ZGlmZiAtLWdpdCBhLzNjb20vM0MzNTkuYmluIGIvM2NvbS8zQzM1OS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEzMjk4OQotLS0gL2Rldi9udWxsCisrKyBiLzNjb20vM0MzNTkuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzNjb20vdHlwaG9vbi5iaW4gYi8zY29tL3R5cGhvb24uYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZDEyOTQKLS0tIC9kZXYvbnVsbAorKysgYi8zY29tL3R5cGhvb24uYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0dQTC0zIGIvR1BMLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQzMjU0MAotLS0gL2Rldi9udWxsCisrKyBiL0dQTC0zCkBAIC0wLDAgKzEsNjc2IEBACisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNworCisgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgorc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLgorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAordG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gIEJ5IGNvbnRyYXN0LAordGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8KK3NoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQorc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuICBXZSwgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdXNlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vc3Qgb2Ygb3VyIHNvZnR3YXJlOyBpdCBhcHBsaWVzIGFsc28gdG8KK2FueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91Cit3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldworZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBwcmV2ZW50IG90aGVycyBmcm9tIGRlbnlpbmcgeW91Cit0aGVzZSByaWdodHMgb3IgYXNraW5nIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gIFRoZXJlZm9yZSwgeW91IGhhdmUKK2NlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgoreW91IG1vZGlmeSBpdDogcmVzcG9uc2liaWxpdGllcyB0byByZXNwZWN0IHRoZSBmcmVlZG9tIG9mIG90aGVycy4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBwYXNzIG9uIHRvIHRoZSByZWNpcGllbnRzIHRoZSBzYW1lCitmcmVlZG9tcyB0aGF0IHlvdSByZWNlaXZlZC4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZQorb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKK2tub3cgdGhlaXIgcmlnaHRzLgorCisgIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKygxKSBhc3NlcnQgY29weXJpZ2h0IG9uIHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBMaWNlbnNlCitnaXZpbmcgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IGl0LgorCisgIEZvciB0aGUgZGV2ZWxvcGVycycgYW5kIGF1dGhvcnMnIHByb3RlY3Rpb24sIHRoZSBHUEwgY2xlYXJseSBleHBsYWlucwordGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiAgRm9yIGJvdGggdXNlcnMnIGFuZAorYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcworY2hhbmdlZCwgc28gdGhhdCB0aGVpciBwcm9ibGVtcyB3aWxsIG5vdCBiZSBhdHRyaWJ1dGVkIGVycm9uZW91c2x5IHRvCithdXRob3JzIG9mIHByZXZpb3VzIHZlcnNpb25zLgorCisgIFNvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4KK21vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlIG1hbnVmYWN0dXJlcgorY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKK3Byb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gIFRoZSBzeXN0ZW1hdGljCitwYXR0ZXJuIG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvciBpbmRpdmlkdWFscyB0bwordXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCitoYXZlIGRlc2lnbmVkIHRoaXMgdmVyc2lvbiBvZiB0aGUgR1BMIHRvIHByb2hpYml0IHRoZSBwcmFjdGljZSBmb3IgdGhvc2UKK3Byb2R1Y3RzLiAgSWYgc3VjaCBwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluIG90aGVyIGRvbWFpbnMsIHdlCitzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKK29mIHRoZSBHUEwsIGFzIG5lZWRlZCB0byBwcm90ZWN0IHRoZSBmcmVlZG9tIG9mIHVzZXJzLgorCisgIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuCitTdGF0ZXMgc2hvdWxkIG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1c2Ugb2YKK3NvZnR3YXJlIG9uIGdlbmVyYWwtcHVycG9zZSBjb21wdXRlcnMsIGJ1dCBpbiB0aG9zZSB0aGF0IGRvLCB3ZSB3aXNoIHRvCithdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKK21ha2UgaXQgZWZmZWN0aXZlbHkgcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHRoZSBHUEwgYXNzdXJlcyB0aGF0CitwYXRlbnRzIGNhbm5vdCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgcHJvZ3JhbSBub24tZnJlZS4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAwLiBEZWZpbml0aW9ucy4KKworICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAiQ29weXJpZ2h0IiBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZgord29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KKyAKKyAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICAiTGljZW5zZWVzIiBhbmQKKyJyZWNpcGllbnRzIiBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy4KKworICBUbyAibW9kaWZ5IiBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrCitpbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4KK2V4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQorZWFybGllciB3b3JrIG9yIGEgd29yayAiYmFzZWQgb24iIHRoZSBlYXJsaWVyIHdvcmsuCisKKyAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLgorCisgIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKK3Blcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKK2luZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYQorY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKK2Rpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlCitwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCisKKyAgVG8gImNvbnZleSIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgorcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoCithIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgorCisgIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICJBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIgordG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQorZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpCit0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQorZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQord29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYKK3RoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhCittZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorCisgIDEuIFNvdXJjZSBDb2RlLgorCisgIFRoZSAic291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrCitmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICAiT2JqZWN0IGNvZGUiIG1lYW5zIGFueSBub24tc291cmNlCitmb3JtIG9mIGEgd29yay4KKworICBBICJTdGFuZGFyZCBJbnRlcmZhY2UiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbAorc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgoraW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKK2lzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorCisgIFRoZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCisiTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKyhrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKyhpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCitwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCit0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCit3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCitjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKK1N5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKK3Byb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAord2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCitpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvcgordGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5CitsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKK3N1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCitzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2VycworY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nCitTb3VyY2UuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0CitzYW1lIHdvcmsuCisKKyAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCisKKyAgQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKKyAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdAorY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKK2luIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKK29mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQord2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8KK25vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKK2ZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24KK2FuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgoreW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgordGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgorCisgIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbAorbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCisxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKK3NpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2gKK21lYXN1cmVzLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgoraXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwordGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKK3VzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZgordGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKworICA0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgorCisgIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQorcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQorbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKK3JlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCisgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKK2FuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCisKKyAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCitwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQordGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKKyAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisKKyAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcworICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgorICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KKyAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgorCisgICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKKyAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNworICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCisgICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KKyAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CisgICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CisgICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCisgICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKKyAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KKworICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Cit3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAorYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKK2luIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KKyJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKworICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcworb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCittYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKworICAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEKKyAgICB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcworICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAorICAgIG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEKKyAgICBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUKKyAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAorICAgIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8KKyAgICBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMKKyAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KKworICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCisgICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKKyAgICBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZAorICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAorICAgIHdpdGggc3Vic2VjdGlvbiA2Yi4KKworICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCisgICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KKyAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0bworICAgIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQorICAgIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbgorICAgIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcworICAgIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisKKyAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCisgICAgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKKyAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCisgICAgY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKKyAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCitmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZQoraW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgorCisgIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55Cit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LAorb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgoraW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LAorZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyCitwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKK3R5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cworb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKK2FjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAoraXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwKK2NvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50Cit0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKworICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCitwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKK2FuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20KK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUgaW5mb3JtYXRpb24gbXVzdAorc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKK2NvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlCittb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworICBJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgorc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKK3BhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQorVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQorZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCitieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKK2lmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCittb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCitiZWVuIGluc3RhbGxlZCBpbiBST00pLgorCisgIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKK3JlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcworZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IKK3RoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKK25ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCithZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQKK3Byb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCisKKyAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCitpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5Citkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbgorc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCit1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KKworICA3LiBBZGRpdGlvbmFsIFRlcm1zLgorCisgICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuCitBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCitiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Cit0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucworYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQordW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieQordGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KK3JlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgoraXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgorcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCithZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCitmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CithZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCit0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQorICAgIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisKKyAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKKyAgICBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsCisgICAgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKworICAgIGMpIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKKyAgICByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgorICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKKworICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IKKyAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKKworICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKKyAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKworICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQKKyAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IKKyAgICBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uCisgICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgorCisgIEFsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICJmdXJ0aGVyCityZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CityZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcworZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyCityZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCithIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcworb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKK25vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgorCisgIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCisgIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlCitmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwordGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgorCisgIDguIFRlcm1pbmF0aW9uLgorCisgIFlvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQorcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCit0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCitwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKKyAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKK2xpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQorcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZAorZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodAoraG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKK3ByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCittYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorCisgIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCisgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgorcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yaworb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KK3RvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCitub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCitub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKK2NvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisKKyAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCisgIEVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKK3JlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQorZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKyAgQW4gImVudGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCisgIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKK25vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgorcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKK2FueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgorc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorCisgIDExLiBQYXRlbnRzLgorCisgIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCit3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJzaW9uIi4KKworICBBIGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAorYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAorYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKK2NvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCitwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKK3BhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBMaWNlbnNlLgorCisgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KK21ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworICBJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBhbnkgZXhwcmVzcworYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Cisoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCitzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQorcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKK3BhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKworICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAorYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKK3RvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKK3B1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCit0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCithdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCitwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgorY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAorbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAiS25vd2luZ2x5IHJlbHlpbmciIG1lYW5zIHlvdSBoYXZlCithY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKK2NvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2luIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAorY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKyAgCisgIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKK2FycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEKK2NvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcworcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5CitvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlCit5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZAord29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCisKKyAgQSBwYXRlbnQgbGljZW5zZSBpcyAiZGlzY3JpbWluYXRvcnkiIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluCit0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcworY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlCitzcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkCit3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcworaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudAordG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcKK3RoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQorcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5CitwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrCitjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQorZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQKK2NvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwKK29yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCisKKyAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZworYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKK290aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KKworICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KKworICBJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBjb252ZXkgYQorY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQorbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91Cit0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkKK3RoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcworTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLgorCisgIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUKK3Blcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKK3VuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUKK2NvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiAgVGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLAorYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZQorY29tYmluYXRpb24gYXMgc3VjaC4KKworICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKK3RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKKyAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKK1Byb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZQorb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKK3ZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCitieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKK3ZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzCitwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91Cit0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KKworICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAorcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQorYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQorbGF0ZXIgdmVyc2lvbi4KKworICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUCitIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZCitPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNCitJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKK0FMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKKyAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTCitUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKK0dFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQorVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgorREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQKK1BBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLAorRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTLgorCisgIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKKyAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCithYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKK3Jldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcworYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQorY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK3N0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworICBJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0Citub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcworbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuICJhYm91dCBib3giLgorCisgIFlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsCitpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LgorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCitpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UKK21heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aAordGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4gIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQKKzxodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93aHktbm90LWxncGwuaHRtbD4uCisKZGlmZiAtLWdpdCBhL0xJQ0VOQ0UuTWFydmVsbCBiL0xJQ0VOQ0UuTWFydmVsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjI0ZTFiCi0tLSAvZGV2L251bGwKKysrIGIvTElDRU5DRS5NYXJ2ZWxsCkBAIC0wLDAgKzEsMTggQEAKK0ZJUk1XQVJFIExJQ0VOU0UgVEVSTVMKKworCitDb3B5cmlnaHQgKGMpIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uLiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIGJpbmFyeSBmb3JtLCB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisqIFJlZGlzdHJpYnV0aW9ucyBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisqIE5laXRoZXIgdGhlIG5hbWUgb2YgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgc3VwcGxpZXJzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIHNvZnR3YXJlIGlzIHBlcm1pdHRlZC4KKworTGltaXRlZCBwYXRlbnQgbGljZW5zZS4gTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4gZ3JhbnRzIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdW5kZXIgcGF0ZW50cyBpdCBub3cgb3IgaGVyZWFmdGVyIG93bnMgb3IgY29udHJvbHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIGltcG9ydCwgb2ZmZXIgdG8gc2VsbCBhbmQgc2VsbCAoIlV0aWxpemUiKSB0aGlzIHNvZnR3YXJlLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgbmVjZXNzYXJ5IHRvIFV0aWxpemUgdGhlIHNvZnR3YXJlIGFsb25lLCBvciBpbiBjb21iaW5hdGlvbiB3aXRoIGFuIG9wZXJhdGluZyBzeXN0ZW0gbGljZW5zZWQgdW5kZXIgYW4gYXBwcm92ZWQgT3BlbiBTb3VyY2UgbGljZW5zZSBhcyBsaXN0ZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgYXQgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorCitESVNDTEFJTUVSLiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9MSUNFTkNFLk9MUEMgYi9MSUNFTkNFLk9MUEMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0MDk1MgotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOQ0UuT0xQQwpAQCAtMCwwICsxLDMzIEBACitDb3B5cmlnaHQgKGMpIDIwMDYsIE9uZSBMYXB0b3AgcGVyIENoaWxkIGFuZCBNYXJ2ZWxsIENvcnBvcmF0aW9uLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24uICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIGJpbmFyeSBmb3JtLCB3aXRob3V0IAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSAKK21ldDoKKworKiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSAKKyAgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyAKKyAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1hcnZlbGwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgc3VwcGxpZXJzIAorICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgCisgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIHNvZnR3YXJlIAorICBpcyBwZXJtaXR0ZWQuCisqIFlvdSBtYXkgbm90IHVzZSBvciBhdHRlbXB0IHRvIHVzZSB0aGlzIHNvZnR3YXJlIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgYW55IHByb2R1Y3QgdGhhdCBpcyBvZmZlcmVkIGJ5IGEgdGhpcmQgcGFydHkgYXMgYSByZXBsYWNlbWVudCwKKyAgc3Vic3RpdHV0ZSBvciBhbHRlcm5hdGl2ZSB0byBhIE1hcnZlbGwgUHJvZHVjdCB3aGVyZSBhIE1hcnZlbGwgUHJvZHVjdAorICBpcyBkZWZpbmVkIGFzIGEgcHJvcHJpZXRhcnkgd2lyZWxlc3MgTEFOIGVtYmVkZGVkIGNsaWVudCBzb2x1dGlvbiBvZgorICBNYXJ2ZWxsIG9yIGEgTWFydmVsbCBBZmZpbGlhdGUuCisKK0RJU0NMQUlNRVIuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgCitDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIAorQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIAorT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCAKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiAKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIAorREFNQUdFLgpkaWZmIC0tZ2l0IGEvTElDRU5DRS5hZ2VyZSBiL0xJQ0VOQ0UuYWdlcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExNDY2YwotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOQ0UuYWdlcmUKQEAgLTAsMCArMSw3NyBAQAorYWdlcmVfc3RhX2Z3LmJpbiAtLSA5LjQ4IEhlcm1lcyBJCithZ2VyZV9hcF9mdy5iaW4gIC0tIDkuNDggSGVybWVzIEkKKworVGhlIGFib3ZlIGZpcm13YXJlIGltYWdlcyB3ZXJlIGNvbXBpbGVkIGZyb20gdGhlIEFnZXJlIGxpbnV4IGRyaXZlcgord2xfbGttXzcxOF9yZWxlYXNlLnRhci5neiwgYW5kIGR1bXBlZC4gVGhlIGRyaXZlciBpcyBjb3ZlcnJlZCBieSB0aGUKK2ZvbGxvd2luZyBjb3B5cmlnaHQgYW5kIHNvZnR3YXJlIGxpY2Vuc2UuCisKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDT1BZUklHSFQgwqkgMTk5NCAtIDE5OTUgIGJ5IEFUJlQuICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqIENPUFlSSUdIVCDCqSAxOTk2IC0gMjAwMCBieSBMdWNlbnQgVGVjaG5vbG9naWVzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogQ09QWVJJR0hUIMKpIDIwMDEgLSAyMDA0ICBieSBBZ2VyZSBTeXN0ZW1zIEluYy4gICBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorCitUaGUgZm9sbG93aW5nIHN0YXRlbWVudCBmcm9tIEFnZXJlIGNsYXJpZmllcyB0aGUgc3RhdHVzIG9mIHRoZSBmaXJtd2FyZQorCistLS0KK0kgd291bGQgbGlrZSB0byBjb25maXJtIHRoYXQgdGhlIHR3byBkcml2ZXJzOyBMaW51eCBMS00gV2lyZWxlc3MgRHJpdmVyCitTb3VyY2UgQ29kZSwgVmVyc2lvbiA3LjE4IGFuZCBMaW51eCBMS00gV2lyZWxlc3MgRHJpdmVyIFNvdXJjZSBDb2RlLAorVmVyc2lvbiA3LjIyIGNvbXBseSB3aXRoIE9wZW4gU291cmNlIEJTRCBMaWNlbnNlLiBUaGVyZWZvcmUgdGhlIHNvdXJjZQorY29kZSBjYW4gYmUgZGlzdHJpYnV0ZWQgaW4gdW5tb2RpZmllZCBvciBtb2RpZmllZCBmb3JtIGNvbnNpc3RlbnQgd2l0aAordGhlIHRlcm1zIG9mIHRoZSBsaWNlbnNlLgorCitUaGUgTGludXggZHJpdmVyIGFyY2hpdGVjdHVyZSB3YXMgYmFzZWQgb24gdHdvIG1vZHVsZXMsIHRoZSBNU0YgKE1vZHVsZQorc3BlY2lmaWMgZnVuY3Rpb25zKSBhbmQgdGhlIEhDRiAoSGFyZHdhcmUgQ29udHJvbCBGdW5jdGlvbnMpLiAgSW5jbHVkZWQKK2luIHRoZSBIQ0YgaXMgcnVuLXRpbWUgZmlybXdhcmUgKGJpbmFyeSBmb3JtYXQpIHdoaWNoIGlzIGRvd25sb2FkZWQgaW50bwordGhlIFJBTSBvZiB0aGUgSGVybWVzIDEvMi8yLjUgV01BQy4KKworVGhpcyBoZXggY29kZWQgZmlybXdhcmUgaXMgbm90IGJhc2VkIG9uIGFueSBvcGVuIHNvdXJjZSBzb2Z0d2FyZSBhbmQKK2hlbmNlIGl0IGlzIG5vdCBzdWJqZWN0IHRvIGFueSBPcGVuIFNvdXJjZSBMaWNlbnNlLiAgVGhlIGZpcm13YXJlIHdhcworZGV2ZWxvcGVkIGJ5IEFnZXJlIGFuZCBydW5zIG9uIHRoZSBESVNDIHByb2Nlc3NvciBlbWJlZGRlZCB3aXRoaW4gdGhlCitIZXJtZXMgMS8yLzIuNSBXaXJlbGVzcyBNQUMgZGV2aWNlcy4gCisKK0hvcGUgdGhpcyBoZWxwcy4KKworU2luY2VyZWx5LAorCitWaXJlbiBQYXRoYXJlCitJbnRlbGxlY3R1YWwgUHJvcGVydHkgTGljZW5zaW5nIE1hbmFnZXIKK0FnZXJlCistLS0KZGlmZiAtLWdpdCBhL0xJQ0VOQ0UuYXRoZXJvc19maXJtd2FyZSBiL0xJQ0VOQ0UuYXRoZXJvc19maXJtd2FyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGViZGFjCi0tLSAvZGV2L251bGwKKysrIGIvTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlCkBAIC0wLDAgKzEsMzggQEAKK0NvcHlyaWdodCAoYykgMjAwOC0yMDEwLCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbi4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gYmluYXJ5IGZvcm0sIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworKiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZQorICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorICBpdHMgc3VwcGxpZXJzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzCisgIHNvZnR3YXJlIGlzIHBlcm1pdHRlZC4KKworTGltaXRlZCBwYXRlbnQgbGljZW5zZS4gIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4gZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlIHVuZGVyIHBhdGVudHMgaXQKK25vdyBvciBoZXJlYWZ0ZXIgb3ducyBvciBjb250cm9scyB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgaW1wb3J0LAorb2ZmZXIgdG8gc2VsbCBhbmQgc2VsbCAoIlV0aWxpemUiKSB0aGlzIHNvZnR3YXJlLCBidXQgc29sZWx5IHRvCit0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIG5lY2Vzc2FyeSB0byBVdGlsaXplIHRoZSBzb2Z0d2FyZQoraW4gY29uanVuY3Rpb24gd2l0aCBhbiBBdGhlcm9zIENoaXBzZXQuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QKK2FwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLiBObworaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworRElTQ0xBSU1FUi4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTAorVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKK09GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9MSUNFTkNFLmJyb2FkY29tX2JjbTQzeHggYi9MSUNFTkNFLmJyb2FkY29tX2JjbTQzeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyNmZkZAotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOQ0UuYnJvYWRjb21fYmNtNDN4eApAQCAtMCwwICsxLDY1IEBACitTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVAorCitUaGUgYWNjb21wYW55aW5nIHNvZnR3YXJlIGluIGJpbmFyeSBjb2RlIGZvcm0gKOKAnFNvZnR3YXJl4oCdKSwgaXMgbGljZW5zZWQgdG8geW91LAorb3IsIGlmIHlvdSBhcmUgYWNjZXB0aW5nIG9uIGJlaGFsZiBvZiBhbiBlbnRpdHksIHRoZSBlbnRpdHkgYW5kIGl0cyBhZmZpbGlhdGVzCitleGVyY2lzaW5nIHJpZ2h0cyBoZXJldW5kZXIgKOKAnExpY2Vuc2Vl4oCdKSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIHNvZnR3YXJlCitsaWNlbnNlIGFncmVlbWVudCAo4oCcQWdyZWVtZW504oCdKSwgdW5sZXNzIExpY2Vuc2VlIGFuZCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorKOKAnEJyb2FkY29t4oCdKSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlIGFncmVlbWVudCBnb3Zlcm5pbmcKK3VzZSBvZiB0aGUgU29mdHdhcmUuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiwgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBTT0ZUV0FSRQorQ09OU1RJVFVURVMgTElDRU5TRUXigJlTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuCUxpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LAorQnJvYWRjb20gaGVyZWJ5IGdyYW50cyB0byBMaWNlbnNlZSBhIGxpbWl0ZWQsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsCityb3lhbHR5LWZyZWUgbGljZW5zZTogKGkpIHRvIHVzZSBhbmQgaW50ZWdyYXRlIHRoZSBTb2Z0d2FyZSB3aXRoIGFueSBvdGhlcgorc29mdHdhcmU7IGFuZCAoaWkpIHRvIHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgY29tcGxldGUsCit1bm1vZGlmaWVkLCBhbmQgYXMgcHJvdmlkZWQgYnkgQnJvYWRjb20sIHNvbGVseSBmb3IgdXNlIHdpdGggQnJvYWRjb20KK3Byb3ByaWV0YXJ5IGludGVncmF0ZWQgY2lyY3VpdCBwcm9kdWN0KHMpIHNvbGQgYnkgQnJvYWRjb20gd2l0aCB3aGljaCB0aGUKK1NvZnR3YXJlIHdhcyBkZXNpZ25lZCB0byBiZSB1c2VkLCBvciB0aGVpciBzdWNjZXNzb3JzLgorCisyLglSZXN0cmljdGlvbnMuIExpY2Vuc2VlIHNoYWxsIGRpc3RyaWJ1dGUgU29mdHdhcmUgd2l0aCBhIGNvcHkgb2YgdGhpcworQWdyZWVtZW50LiBMaWNlbnNlZSBzaGFsbCBub3QgcmVtb3ZlLCBlZmZhY2Ugb3Igb2JzY3VyZSBhbnkgY29weXJpZ2h0IG9yCit0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb2Z0d2FyZS4gUmVwcm9kdWN0aW9ucyBvZiB0aGUgQnJvYWRjb20gY29weXJpZ2h0Citub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFNvZnR3YXJlLCBleGNlcHQgd2hlcmUgc3VjaAorU29mdHdhcmUgaXMgZW1iZWRkZWQgaW4gYSBtYW5uZXIgbm90IHJlYWRpbHkgYWNjZXNzaWJsZSB0byB0aGUgZW5kIHVzZXIuCitMaWNlbnNlZSBzaGFsbCBub3Q6IChpKSB1c2UsIGxpY2Vuc2UsIHNlbGwgb3Igb3RoZXJ3aXNlIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlCitleGNlcHQgYXMgcHJvdmlkZWQgaW4gdGhpcyBBZ3JlZW1lbnQ7IChpaSkgYXR0ZW1wdCB0byBtb2RpZnkgaW4gYW55IHdheSwKK3JldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSBvciBkaXNhc3NlbWJsZSBhbnkgcG9ydGlvbiBvZiB0aGUgU29mdHdhcmU7IG9yCisoaWlpKSB1c2UgdGhlIFNvZnR3YXJlIG9yIG90aGVyIG1hdGVyaWFsIGluIHZpb2xhdGlvbiBvZiBhbnkgYXBwbGljYWJsZSBsYXcgb3IKK3JlZ3VsYXRpb24sIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYW55IHJlZ3VsYXRvcnkgYWdlbmN5LiBUaGlzIEFncmVlbWVudAorc2hhbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBMaWNlbnNlZeKAmXMgZmFpbHVyZSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlCit0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gSW4gc3VjaCBldmVudCwgTGljZW5zZWUgd2lsbCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlCitTb2Z0d2FyZSBhbmQgaXRzIGNvbXBvbmVudCBwYXJ0cy4KKworMy4JT3duZXJzaGlwLiBUaGUgU29mdHdhcmUgaXMgbGljZW5zZWQgYW5kIG5vdCBzb2xkLiAgVGl0bGUgdG8gYW5kCitvd25lcnNoaXAgb2YgdGhlIFNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgdGhlcmV0bywKK2FuZCBhbnkgcG9ydGlvbiB0aGVyZW9mIHJlbWFpbiB3aXRoIEJyb2FkY29tIG9yIGl0cyBsaWNlbnNvcnMuIExpY2Vuc2VlIGhlcmVieQorY292ZW5hbnRzIHRoYXQgaXQgd2lsbCBub3QgYXNzZXJ0IGFueSBjbGFpbSB0aGF0IHRoZSBTb2Z0d2FyZSBjcmVhdGVkIGJ5IG9yIGZvcgorQnJvYWRjb20gaW5mcmluZ2UgYW55IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBvd25lZCBvciBjb250cm9sbGVkIGJ5CitMaWNlbnNlZS4KKworNC4gICAgIAlEaXNjbGFpbWVyLiBUSEUgU09GVFdBUkUgSVMgT0ZGRVJFRCDigJxBUyBJUyzigJ0gQU5EIEJST0FEQ09NIFBST1ZJREVTIEFORAorR1JBTlRTIEFORCBMSUNFTlNFRSBSRUNFSVZFUyBOTyBTVVBQT1JUIEFORCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFWFBSRVNTCitPUiBJTVBMSUVELCBCWSBTVEFUVVRFLCBDT01NVU5JQ0FUSU9OIE9SIENPTkRVQ1QgV0lUSCBMSUNFTlNFRSwgT1IgT1RIRVJXSVNFLgorQlJPQURDT00gU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgU1BFQ0lGSUMgUFVSUE9TRSwgT1IgTk9OSU5GUklOR0VNRU5UIENPTkNFUk5JTkcgVEhFIFNPRlRXQVJFIE9SCitBTlkgVVBHUkFERVMgVE8gT1IgRE9DVU1FTlRBVElPTiBGT1IgVEhFIFNPRlRXQVJFLiBXSVRIT1VUIExJTUlUQVRJT04gT0YgVEhFCitBQk9WRSwgQlJPQURDT00gR1JBTlRTIE5PIFdBUlJBTlRZIFRIQVQgVEhFIFNPRlRXQVJFIElTIEVSUk9SLUZSRUUgT1IgV0lMTAorT1BFUkFURSBXSVRIT1VUIElOVEVSUlVQVElPTiwgQU5EIEdSQU5UUyBOTyBXQVJSQU5UWSBSRUdBUkRJTkcgSVRTIFVTRSBPUiBUSEUKK1JFU1VMVFMgVEhFUkVGUk9NIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBJVFMgQ09SUkVDVE5FU1MsIEFDQ1VSQUNZLCBPUgorUkVMSUFCSUxJVFkuIFRPIFRIRSBNQVhJTVVNIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTCBCUk9BRENPTQorT1IgQU5ZIE9GIElUUyBMSUNFTlNPUlMgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBGT1IgQlJFQUNIIE9GIENPTlRSQUNULCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSkgT1IKK09USEVSV0lTRSwgQVJJU0lORyBPVVQgT0YgVEhJUyBBR1JFRU1FTlQgT1IgVVNFLCBSRVBST0RVQ1RJT04sIE9SIERJU1RSSUJVVElPTgorT0YgVEhFIFNPRlRXQVJFLCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBBTkQgTE9TUyBPRiBQUk9GSVRTLAorRVZFTiBJRiBTVUNIIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhFU0UKK0xJTUlUQVRJT05TIFNIQUxMIEFQUExZIE5PVFdJVEhTVEFORElORyBBTlkgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkKK0xJTUlURUQgUkVNRURZLgorCis1LiAJRXhwb3J0IExhd3MuICBMSUNFTlNFRSBVTkRFUlNUQU5EUyBBTkQgQUdSRUVTIFRIQVQgVEhFIFNPRlRXQVJFIElTCitTVUJKRUNUIFRPIFVOSVRFRCBTVEFURVMgQU5EIE9USEVSIEFQUExJQ0FCTEUgRVhQT1JULVJFTEFURUQgTEFXUyBBTkQKK1JFR1VMQVRJT05TIEFORCBUSEFUIExJQ0VOU0VFIE1BWSBOT1QgRVhQT1JULCBSRS1FWFBPUlQgT1IgVFJBTlNGRVIgVEhFCitTT0ZUV0FSRSBPUiBBTlkgRElSRUNUIFBST0RVQ1QgT0YgVEhFIFNPRlRXQVJFIEVYQ0VQVCBBUyBQRVJNSVRURUQgVU5ERVIgVEhPU0UKK0xBV1MuIFdJVEhPVVQgTElNSVRJTkcgVEhFIEZPUkVHT0lORywgRVhQT1JULCBSRS1FWFBPUlQsIE9SIFRSQU5TRkVSIE9GIFRIRQorU09GVFdBUkUgVE8gQ1VCQSwgSVJBTiwgTk9SVEggS09SRUEsIFNVREFOLCBBTkQgU1lSSUEgSVMgUFJPSElCSVRFRC4KKwpkaWZmIC0tZ2l0IGEvTElDRU5DRS5jYTAxMzIgYi9MSUNFTkNFLmNhMDEzMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTE3NTBhCi0tLSAvZGV2L251bGwKKysrIGIvTElDRU5DRS5jYTAxMzIKQEAgLTAsMCArMSw0NyBAQAorQ29weXJpZ2h0IChjKSAyMDEyLCBDcmVhdGl2ZSBUZWNobm9sb2d5IEx0ZAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24uICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIGJpbmFyeSBmb3JtLCB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyogUmVkaXN0cmlidXRpb25zIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUKKyAgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqIE5laXRoZXIgdGhlIG5hbWUgb2YgQ3JlYXRpdmUgVGVjaG5vbG9neSBMdGQgb3IgaXRzIGFmZmlsaWF0ZXMgKCJDVEwiKQorICBub3IgdGhlIG5hbWVzIG9mIGl0cyBzdXBwbGllcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICBwZXJtaXNzaW9uLgorKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIHNvZnR3YXJlCisgIChvciBhbnkgcGFydCB0aGVyZW9mKSBpcyBwZXJtaXR0ZWQuCisKK0xpbWl0ZWQgcGF0ZW50IGxpY2Vuc2UuIENUTCBncmFudHMgYSBsaW1pdGVkLCB3b3JsZC13aWRlLAorcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdW5kZXIgcGF0ZW50cyBpdCBub3cgb3IgaGVyZWFmdGVyCitvd25zIG9yIGNvbnRyb2xzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBpbXBvcnQsIG9mZmVyIHRvIHNlbGwgYW5kCitzZWxsICgiVXRpbGl6ZSIpIHRoaXMgc29mdHdhcmUsIGJ1dCBzdHJpY3RseSBvbmx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkKK3N1Y2ggcGF0ZW50IGlzIG5lY2Vzc2FyeSB0byBVdGlsaXplIHRoZSBzb2Z0d2FyZSBhbG9uZSwgb3IgaW4KK2NvbWJpbmF0aW9uIHdpdGggYW4gb3BlcmF0aW5nIHN5c3RlbSBsaWNlbnNlZCB1bmRlciBhbiBhcHByb3ZlZCBPcGVuCitTb3VyY2UgbGljZW5zZSBhcyBsaXN0ZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgYXQKK2h0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy4gIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYmUKK2FwcGxpY2FibGUsIHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLgorTm8gaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworRElTQ0xBSU1FUi4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKK09GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFLgorCitOTyBPVEhFUiBSSUdIVFMgR1JBTlRFRC4gVVNFUiBIRVJFQlkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMgVEhBVCBVU0UgT0YKK1RISVMgU09GVFdBUkUgU0hBTEwgTk9UIENSRUFURSBPUiBHSVZFIEdST1VORFMgRk9SIEEgTElDRU5TRSBCWQorSU1QTElDQVRJT04sIEVTVE9QUEVMLCBPUiBPVEhFUldJU0UgVE8gQU5ZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMKKyhQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKQorRU1CT0RJRUQgSU4gQU5ZIE9USEVSIENUTCBIQVJEV0FSRSBPUiBTT0ZUV0FSRSBXSEVUSEVSIFNPTEVMWSBPUiBJTgorQ09NQklOQVRJT04gV0lUSCBUSElTIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvTElDRU5DRS5jaGVsc2lvX2Zpcm13YXJlIGIvTElDRU5DRS5jaGVsc2lvX2Zpcm13YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNWUxYjQKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTkNFLmNoZWxzaW9fZmlybXdhcmUKQEAgLTAsMCArMSwyNyBAQAorQ29weXJpZ2h0IChjKSAyMDExIENoZWxzaW8gQ29tbXVuaWNhdGlvbnMKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0NoZWxzaW8gQ29tbXVuaWNhdGlvbiBUZXJtaW5hdG9yIDQgZXRoZXJuZXQgY29udHJvbGxlciBmaXJtd2FyZQorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIGJpbmFyeSBmb3JtLCB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZAordGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzIuIFRoZSBuYW1lIG9mIENoZWxzaW8gQ29tbXVuaWNhdGlvbnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiszLiBSZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIGZpcm13YXJlIGlzIG5vdAorICAgcGVybWl0dGVkLgorCitESVNDTEFJTUVSLiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECitDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMCitUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL0xJQ0VOQ0UuZW5lX2Zpcm13YXJlIGIvTElDRU5DRS5lbmVfZmlybXdhcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhmMmIwMQotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOQ0UuZW5lX2Zpcm13YXJlCkBAIC0wLDAgKzEsMTQgQEAKK2NvcHlyaWdodCAoYykgMjAxMSwgRU5FIFRFQ0hOT0xPR1kgSU5DLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZQord2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZQorYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwKK1dBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KK0xPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KK1dJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvTElDRU5DRS5nbzcwMDcgYi9MSUNFTkNFLmdvNzAwNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjg5ZjNiCi0tLSAvZGV2L251bGwKKysrIGIvTElDRU5DRS5nbzcwMDcKQEAgLTAsMCArMSw0NTcgQEAKK1RoZSBSRUFETUUgZmlsZSBmcm9tIHRoZSBvcmlnaW5hbCBwYWNrYWdlIGZyb20gTWljcm9uYXMgYXBwZWFycyBiZWxvdy4gT25seQordGhlIHBhcnQgYWJvdXQgdGhlIGZpcm13YXJlIHJlZGlzdHJpYnV0aW9uIGluIHNlY3Rpb24gMCBpcyByZWxldmFudCwgYWxsCitvdGhlciBzZWN0aW9ucyBhcmUgY29tcGxldGVseSBvYnNvbGV0ZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICBXSVMgR083MDA3U0IgUHVibGljIExpbnV4IERyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworKioqIFBsZWFzZSBzZWUgdGhlIGZpbGUgUkVMRUFTRS1OT1RFUyBmb3IgaW1wb3J0YW50IGxhc3QtbWludXRlIHVwZGF0ZXMgKioqCisKKworICAwLiBPVkVSVklFVyBBTkQgTElDRU5TSU5HL0RJU0NMQUlNRVIKKworCitUaGlzIGRyaXZlciBraXQgY29udGFpbnMgTGludXggZHJpdmVycyBmb3IgdGhlIFdJUyBHTzcwMDdTQiBtdWx0aS1mb3JtYXQKK3ZpZGVvIGVuY29kZXIuICBPbmx5IGtlcm5lbCB2ZXJzaW9uIDIuNi54IGlzIHN1cHBvcnRlZC4gIFRoZSB2aWRlbyBzdHJlYW0KK2lzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBWaWRlbzRMaW51eDIgQVBJIGFuZCB0aGUgYXVkaW8gc3RyZWFtIGlzIGF2YWlsYWJsZQordGhyb3VnaCB0aGUgQUxTQSBBUEkgKG9yIHRoZSBPU1MgZW11bGF0aW9uIGxheWVyIG9mIHRoZSBBTFNBIHN5c3RlbSkuCisKK1RoZSBmaWxlcyBpbiBrZXJuZWwvIGFuZCBob3RwbHVnLyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBWZXJzaW9uIDIgZnJvbSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlCitpcyBpbmNsdWRlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLgorCitUaGUgZXhhbXBsZSBhcHBsaWNhdGlvbnMgaW4gYXBwcy8gYW5kIEMgaGVhZGVyIGZpbGVzIGluIGluY2x1ZGUvIGFyZQorbGljZW5zZWQgdW5kZXIgYSBwZXJtaXNzaXZlIGxpY2Vuc2UgaW5jbHVkZWQgaW4gdGhlIHNvdXJjZSBmaWxlcyB3aGljaAorYWxsb3dzIGNvcHlpbmcsIG1vZGlmaWNhdGlvbiBhbmQgcmVkaXN0cmlidXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGhvdXQKK2F0dHJpYnV0aW9uLgorCitUaGUgZmlybXdhcmUgZmlsZXMgaW5jbHVkZWQgaW4gdGhlIGZpcm13YXJlLyBkaXJlY3RvcnkgbWF5IGJlIGZyZWVseQorcmVkaXN0cmlidXRlZCBvbmx5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBkb2N1bWVudDsgYnV0IG1vZGlmaWNhdGlvbiwKK3RhbXBlcmluZyBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBhcmUgcHJvaGliaXRlZC4KKworTUlDUk9OQVMgVVNBLCBJTkMuLCBNQUtFUyBOTyBXQVJSQU5USUVTIFRPIEFOWSBQRVJTT04gT1IgRU5USVRZIFdJVEgKK1JFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFIE9SIEFOWSBERVJJVkFUSVZFUyBUSEVSRU9GIE9SIEFOWSBTRVJWSUNFUyBPUgorTElDRU5TRVMgQU5EIERJU0NMQUlNUyBBTEwgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OCitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgU1VQUE9SVCwgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKworCisgIDEuIFNZU1RFTSBSRVFVSVJFTUVOVFMKKworCitUaGlzIGRyaXZlciByZXF1aXJlcyBMaW51eCBrZXJuZWwgMi42LiAgS2VybmVsIDIuNCBpcyBub3Qgc3VwcG9ydGVkLiAgVXNpbmcKK2tlcm5lbCAyLjYuMTAgb3IgbGF0ZXIgaXMgcmVjb21tZW5kZWQsIGFzIGVhcmxpZXIga2VybmVscyBhcmUga25vd24gdG8gaGF2ZQordW5zdGFibGUgVVNCIDIuMCBzdXBwb3J0LgorCitBIGZ1bGx5IGJ1aWx0IGtlcm5lbCBzb3VyY2UgdHJlZSBtdXN0IGJlIGF2YWlsYWJsZS4gIFR5cGljYWxseSB0aGlzIHdpbGwgYmUKK2xpbmtlZCBmcm9tICIvbGliL21vZHVsZXMvPEtFUk5FTCBWRVJTSU9OPi9idWlsZCIgZm9yIGNvbnZlbmllbmNlLiAgSWYgdGhpcworbGluayBkb2VzIG5vdCBleGlzdCwgYW4gZXh0cmEgcGFyYW1ldGVyIHdpbGwgbmVlZCB0byBiZSBwYXNzZWQgdG8gdGhlCitgbWFrZWAgY29tbWFuZC4KKworQWxsIHZlbmRvci1idWlsdCBrZXJuZWxzIHNob3VsZCBhbHJlYWR5IGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkuICBIb3dldmVyLAorZm9yIGN1c3RvbS1idWlsdCBrZXJuZWxzLCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGluIHRoZQora2VybmVsIGFzIGJ1aWx0LWluIG9yIG1vZHVsZXM6CisKKyAgICAgICAgQ09ORklHX0hPVFBMVUcgICAgICAgICAgIC0gU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBkZXZpY2VzCisgICAgICAgIENPTkZJR19NT0RVTEVTICAgICAgICAgICAtIEVuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorICAgICAgICBDT05GSUdfS01PRCAgICAgICAgICAgICAgLSBBdXRvbWF0aWMga2VybmVsIG1vZHVsZSBsb2FkaW5nCisgICAgICAgIENPTkZJR19GV19MT0FERVIgICAgICAgICAtIEhvdHBsdWcgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0CisgICAgICAgIENPTkZJR19JMkMgICAgICAgICAgICAgICAtIEkyQyBzdXBwb3J0CisgICAgICAgIENPTkZJR19WSURFT19ERVYgICAgICAgICAtIFZpZGVvIEZvciBMaW51eAorICAgICAgICBDT05GSUdfU09VTkQgICAgICAgICAgICAgLSBTb3VuZCBjYXJkIHN1cHBvcnQKKyAgICAgICAgQ09ORklHX1NORCAgICAgICAgICAgICAgIC0gQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisgICAgICAgIENPTkZJR19VU0IgICAgICAgICAgICAgICAtIFN1cHBvcnQgZm9yIEhvc3Qtc2lkZSBVU0IKKyAgICAgICAgQ09ORklHX1VTQl9ERVZJQ0VGUyAgICAgIC0gVVNCIGRldmljZSBmaWxlc3lzdGVtCisgICAgICAgIENPTkZJR19VU0JfRUhDSV9IQ0QgICAgICAtIEVIQ0kgSENEIChVU0IgMi4wKSBzdXBwb3J0CisKK0FkZGl0aW9uYWxseSwgdG8gdXNlIHRoZSBleGFtcGxlIGFwcGxpY2F0aW9uLCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgbmVlZCB0bworYmUgZW5hYmxlZCBpbiB0aGUgQUxTQSBzZWN0aW9uOgorCisgICAgICAgIENPTkZJR19TTkRfTUlYRVJfT1NTICAgICAtIE9TUyBNaXhlciBBUEkKKyAgICAgICAgQ09ORklHX1NORF9QQ01fT1NTICAgICAgIC0gT1NTIFBDTSAoZGlnaXRhbCBhdWRpbykgQVBJCisKK1RoZSBob3RwbHVnIHNjcmlwdHMsIGFsb25nIHdpdGggdGhlIGZ4bG9hZCB1dGlsaXR5LCBtdXN0IGFsc28gYmUgaW5zdGFsbGVkLgorVGhlc2Ugc2NyaXB0cyBjYW4gYmUgb2J0YWluZWQgZnJvbSA8aHR0cDovL2xpbnV4LWhvdHBsdWcuc291cmNlZm9yZ2UubmV0Lz4uCitIb3RwbHVnZ2luZyBpcyB1c2VkIGZvciBsb2FkaW5nIGZpcm13YXJlIGludG8gdGhlIEN5cHJ1c3MgRVotVVNCIGNoaXAgdXNpbmcKK2Z4bG9hZCBhbmQgZm9yIGxvYWRpbmcgZmlybXdhcmUgaW50byB0aGUgZHJpdmVyIHVzaW5nIHRoZSBmaXJtd2FyZSBhZ2VudC4KKworCisgIDIuIENPTVBJTElORyBBTkQgSU5TVEFMTElORyBUSEUgRFJJVkVSCisKKworTW9zdCB1c2VycyBzaG91bGQgYmUgYWJsZSB0byBjb21waWxlIHRoZSBkcml2ZXIgYnkgc2ltcGx5IHJ1bm5pbmc6CisKKyAgICAgICAgJCBtYWtlCisKK2luIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBkcml2ZXIga2l0LiAgRmlyc3QgdGhlIGtlcm5lbCBtb2R1bGVzCit3aWxsIGJlIGJ1aWx0LCBmb2xsb3dlZCBieSB0aGUgZXhhbXBsZSBhcHBsaWNhdGlvbnMuCisKK0lmIHRoZSBidWlsZCBzeXN0ZW0gaXMgdW5hYmxlIHRvIGxvY2F0ZSB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciB0aGUKK2N1cnJlbnRseS1ydW5uaW5nIGtlcm5lbCwgb3IgaWYgdGhlIG1vZHVsZSBzaG91bGQgYmUgYnVpbHQgZm9yIGEga2VybmVsCitvdGhlciB0aGFuIHRoZSBjdXJyZW50bHktcnVubmluZyBrZXJuZWwsIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHdpbGwgbmVlZAordG8gYmUgcGFzc2VkIHRvIG1ha2UgdG8gc3BlY2lmeSB0aGUgYXBwcm9wcmlhdGUga2VybmVsIHNvdXJjZSBkaXJlY3Rvcnk6CisKKyAgICAgICAgJCBtYWtlIEtFUk5FTFNSQz0vdXNyL3NyYy9saW51eC0yLjYuMTAtY3VzdG9tMworCitPbmNlIHRoZSBjb21waWxlIGNvbXBsZXRlcywgdGhlIGRyaXZlciBhbmQgZmlybXdhcmUgZmlsZXMgc2hvdWxkIGJlCitpbnN0YWxsZWQgYnkgcnVubmluZzoKKworICAgICAgICAkIG1ha2UgaW5zdGFsbAorCitUaGUga2VybmVsIG1vZHVsZXMgd2lsbCBiZSBwbGFjZWQgaW4gIi9saWIvbW9kdWxlcy88S0VSTkVMIFZFUlNJT04+L2V4dHJhIgorYW5kIHRoZSBmaXJtd2FyZSBmaWxlcyB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgYXBwcm9wcmlhdGUgaG90cGx1ZyBmaXJtd2FyZQorZGlyZWN0b3J5LCB1c3VhbGx5IC9saWIvZmlybXdhcmUuICBJbiBhZGRpdGlvbiwgVVNCIG1hcHMgYW5kIHNjcmlwdHMgd2lsbAorYmUgcGxhY2VkIGluIC9ldGMvaG90cGx1Zy91c2IgdG8gZW5hYmxlIGZ4bG9hZCB0byBpbml0aWFsaXplIHRoZSBFWi1VU0IKK2NvbnRyb2wgY2hpcCB3aGVuIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkLgorCisKKyAgMy4gUEFML1NFQ0FNIFRVTkVSIENPTkZJR1VSQVRJT04gKFRWNDAyVS1FVSBvbmx5KQorCisKK1RoZSBQQUwgbW9kZWwgb2YgdGhlIFBsZXh0b3IgQ29udmVydFggVFY0MDJVIG1heSByZXF1aXJlIGFkZGl0aW9uYWwKK2NvbmZpZ3VyYXRpb24gdG8gY29ycmVjdGx5IHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgVFYgZnJlcXVlbmN5IGJhbmQgYW5kCithdWRpbyBzdWJjaGFubmVsLgorCitVc2VycyB3aXRoIGEgZGV2aWNlIG90aGVyIHRoYW4gdGhlIFBsZXh0b3IgQ29udmVydFggVFY0MDJVLUVVIHNob3VsZCBza2lwCit0aGlzIHNlY3Rpb24uCisKK1RoZSB3aWRlIHZhcmlldHkgb2YgUEFMIFRWIHN5c3RlbXMgdXNlZCBpbiBFdXJvcGUgcmVxdWlyZXMgdGhhdCBhZGRpdGlvbmFsCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9jYWwgVFYgc3RhbmRhcmRzIGJlIHBhc3NlZCB0byB0aGUgZHJpdmVyIGluIG9yZGVyCit0byBwcm9wZXJseSB0dW5lIFRWIGNoYW5uZWxzLiAgVGhlIHR3byBuZWNlc3NhcnkgcGFyYW1ldGVycyBhcmUgKGEpIHRoZSBQQUwKK1RWIGJhbmQsIGFuZCAoYikgdGhlIGF1ZGlvIHN1YmNoYW5uZWwgZm9ybWF0IGluIHVzZS4KKworSW4gbWFueSBjYXNlcywgdGhlIGFwcHJvcHJpYXRlIFRWIGJhbmQgc2VsZWN0aW9uIGlzIHBhc3NlZCB0byB0aGUgZHJpdmVyCitmcm9tIGFwcGxpY2F0aW9ucy4gIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMsIHRoZSBhcHBsaWNhdGlvbiBvbmx5IHNwZWNpZmllcwordGhhdCB0aGUgZHJpdmVyIHNob3VsZCB1c2UgUEFMIGJ1dCBub3QgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZQorYXBwcm9wcmlhdGUgVFYgYmFuZC4gIFRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsIHRoZSBjb3JyZWN0IFRWIGJhbmQgbWF5IGJlCitzcGVjaWZpZWQgaW4gdGhlICJmb3JjZV9iYW5kIiBwYXJhbWV0ZXIgdG8gdGhlIHdpcy1zb255LXR1bmVyIG1vZHVsZToKKworICAgICBUViBiYW5kICAgICAgICAgICBmb3JjZV9iYW5kCisgICAgIC0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tLS0KKyAgICAgUEFMIEIvRyAgICAgICAgICAgICAgICBCCisgICAgIFBBTCBJICAgICAgICAgICAgICAgICAgSQorICAgICBQQUwgRC9LICAgICAgICAgICAgICAgIEQKKyAgICAgU0VDQU0gTCAgICAgICAgICAgICAgICBMCisKK0lmIHRoZSAiZm9yY2VfYmFuZCIgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCwgdGhlIGRyaXZlciB3aWxsIGlnbm9yZSBhbnkgVFYKK2JhbmQgc3BlY2lmaWVkIGJ5IGFwcGxpY2F0aW9ucyBhbmQgd2lsbCBhbHdheXMgdXNlIHRoZSBiYW5kIHByb3ZpZGVkIGluIHRoZQorbW9kdWxlIHBhcmFtZXRlci4KKworVGhlIG90aGVyIHBhcmFtZXRlciB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgaXMgdGhlIGF1ZGlvIHN1YmNoYW5uZWwgZm9ybWF0LgorVGhlcmUgYXJlIHNldmVyYWwgc3RlcmVvIGF1ZGlvIGNhcnJpZXIgc3lzdGVtcyBpbiB1c2UsIGluY2x1ZGluZyBOSUNBTSBhbmQKK3RocmVlIHZhcmlldGllcyBvZiBBMi4gIFRvIHJlY2VpdmUgYXVkaW8gYnJvYWRjYXN0IG9uIG9uZSBvZiB0aGVzZSBzdGVyZW8KK2NhcnJpZXJzLCB0aGUgImZvcmNlX21weF9tb2RlIiBwYXJhbWV0ZXIgbXVzdCBiZSBzcGVjaWZpZWQgdG8gdGhlCit3aXMtc29ueS10dW5lciBtb2R1bGUuCisKKyAgICAgVFYgYmFuZCAgICAgICAgICAgQXVkaW8gc3ViY2FycmllciAgICAgICBmb3JjZV9tcHhfbW9kZQorICAgICAtLS0tLS0tICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tICAgICAgIC0tLS0tLS0tLS0tLS0tCisgICAgIFBBTCBCL0cgICAgICAgICAgICBNb25vIChkZWZhdWx0KSAgICAgICAgICAgICAgIDEKKyAgICAgUEFMIEIvRyAgICAgICAgICAgICAgICAgIEEyICAgICAgICAgICAgICAgICAgICAgMgorICAgICBQQUwgQi9HICAgICAgICAgICAgICAgICBOSUNBTSAgICAgICAgICAgICAgICAgICAzCisgICAgIFBBTCBJICAgICAgICAgICAgICBNb25vIChkZWZhdWx0KSAgICAgICAgICAgICAgIDQKKyAgICAgUEFMIEkgICAgICAgICAgICAgICAgICAgTklDQU0gICAgICAgICAgICAgICAgICAgNQorICAgICBQQUwgRC9LICAgICAgICAgICAgTW9ubyAoZGVmYXVsdCkgICAgICAgICAgICAgICA2CisgICAgIFBBTCBEL0sgICAgICAgICAgICAgICAgIEEyICgxKSAgICAgICAgICAgICAgICAgIDcKKyAgICAgUEFMIEQvSyAgICAgICAgICAgICAgICAgQTIgKDIpICAgICAgICAgICAgICAgICAgOAorICAgICBQQUwgRC9LICAgICAgICAgICAgICAgICBBMiAoMykgICAgICAgICAgICAgICAgICA5CisgICAgIFBBTCBEL0sgICAgICAgICAgICAgICAgIE5JQ0FNICAgICAgICAgICAgICAgICAgMTAKKyAgICAgU0VDQU0gTCAgICAgICAgICAgIE1vbm8gKGRlZmF1bHQpICAgICAgICAgICAgICAxMQorICAgICBTRUNBTSBMICAgICAgICAgICAgICAgICBOSUNBTSAgICAgICAgICAgICAgICAgIDEyCisKK0lmIHRoZSAiZm9yY2VfbXB4X21vZGUiIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY29ycmVjdCBtb25vLW9ubHkKK21vZGUgd2lsbCBiZSBjaG9zZW4gYmFzZWQgb24gdGhlIFRWIGJhbmQuICBIb3dldmVyLCB0aGUgdHVuZXIgd2lsbCBub3QKK3JlY2VpdmUgc3RlcmVvIGF1ZGlvIG9yIGJpbGluZ3VhbCBicm9hZGNhc3RzIGNvcnJlY3RseS4KKworVG8gcGFzcyB0aGUgImZvcmNlX2JhbmQiIG9yICJmb3JjZV9tcHhfbW9kZSIgcGFyYW1ldGVycyB0byB0aGUKK3dpcy1zb255LXR1bmVyIG1vZHVsZSwgdGhlIGZvbGxvd2luZyBsaW5lIG11c3QgYmUgYWRkZWQgdG8gdGhlIG1vZHByb2JlCitjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIHZhcmllcyBmcm9tIG9uZSBMaW51eCBkaXN0cmlidXRpb24gdG8gYW5vdGhlci4KKworICAgICBvcHRpb25zIHdpcy1zb255LXR1bmVyIGZvcmNlX2JhbmQ9QiBmb3JjZV9tcHhfbW9kZT0yCisKK1RoZSBhYm92ZSBleGFtcGxlIHdvdWxkIGZvcmNlIHRoZSB0dW5lciB0byB0aGUgUEFMIEIvRyBUViBiYW5kIGFuZCByZWNlaXZlCitzdGVyZW8gYXVkaW8gYnJvYWRjYXN0cyBvbiB0aGUgQTIgY2Fycmllci4KKworVG8gdmVyaWZ5IHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gcGxhY2VkIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLAorZXhlY3V0ZToKKworICAgICAgICAkIG1vZHByb2JlIC1jIHwgZ3JlcCB3aXMtc29ueS10dW5lcgorCitJZiB0aGUgY29uZmlndXJhdGlvbiBsaW5lIGFwcGVhcnMsIHRoZW4gbW9kcHJvYmUgd2lsbCBwYXNzIHRoZSBwYXJhbWV0ZXJzCitjb3JyZWN0bHkgdGhlIG5leHQgdGltZSB0aGUgd2lzLXNvbnktdHVuZXIgbW9kdWxlIGlzIGxvYWRlZCBpbnRvIHRoZQora2VybmVsLgorCisKKyAgNC4gVEVTVElORyBUSEUgRFJJVkVSCisKKworQmVjYXVzZSBmZXcgTGludXggYXBwbGljYXRpb25zIGFyZSBhYmxlIHRvIGNvcnJlY3RseSBjYXB0dXJlIGZyb20KK1ZpZGVvNExpbnV4MiBkZXZpY2VzIHdpdGggb25seSBjb21wcmVzc2VkIGZvcm1hdHMgc3VwcG9ydGVkLCB0aGUgbmV3IGRyaXZlcgorc2hvdWxkIGJlIHRlc3RlZCB3aXRoIHRoZSAiZ29yZWNvcmQiIGFwcGxpY2F0aW9uIGluIHRoZSBhcHBzLyBkaXJlY3RvcnkuCisKK0ZpcnN0IGNvbm5lY3QgYSB2aWRlbyBzb3VyY2UgdG8gdGhlIGRldmljZSwgc3VjaCBhcyBhIERWRCBwbGF5ZXIgb3IgVkNSLgorVGhpcyB3aWxsIGJlIGNhcHR1cmVkIHRvIGEgZmlsZSBmb3IgdGVzdGluZyB0aGUgZHJpdmVyLiAgSWYgYW4gaW5wdXQgc291cmNlCitpcyB1bmF2YWlsYWJsZSwgYSB0ZXN0IGZpbGUgY2FuIHN0aWxsIGJlIGNhcHR1cmVkLCBidXQgdGhlIHZpZGVvIHdpbGwgYmUKK2JsYWNrIGFuZCB0aGUgYXVkaW8gd2lsbCBiZSBzaWxlbnQuCisKK1RoaXMgYXBwbGljYXRpb24gd2lsbCBhdXRvLWRldGVjdCB0aGUgVjRMMiBhbmQgQUxTQS9PU1MgZGV2aWNlIG5hbWVzIG9mIHRoZQoraGFyZHdhcmUgYW5kIHdpbGwgcmVjb3JkIHZpZGVvIGFuZCBhdWRpbyB0byBhbiBBVkkgZmlsZSBmb3IgYSBzcGVjaWZpZWQKK251bWJlciBvZiBzZWNvbmRzLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgJCBhcHBzL2dvcmVjb3JkIC1kdXJhdGlvbiA2MCBjYXB0dXJlLmF2aQorCitJZiB0aGlzIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1Y2Nlc3NmdWxseSByZWNvcmQgYW4gQVZJIGZpbGUsIHRoZSBlcnJvcgorbWVzc2FnZXMgcHJvZHVjZWQgYnkgZ29yZWNvcmQgYW5kIHJlY29yZGVkIGluIHRoZSBzeXN0ZW0gbG9nICh1c3VhbGx5IGluCisvdmFyL2xvZy9tZXNzYWdlcykgc2hvdWxkIHByb3ZpZGUgaW5mb3JtYXRpb24gdG8gaGVscCByZXNvbHZlIHRoZSBwcm9ibGVtLgorCitTdXBwbHlpbmcgbm8gcGFyYW1ldGVycyB0byBnb3JlY29yZCB3aWxsIGNhdXNlIGl0IHRvIHByb2JlIHRoZSBhdmFpbGFibGUKK2RldmljZXMgYW5kIGV4aXQuICBVc2UgdGhlIC1oZWxwIGZsYWcgZm9yIHVzYWdlIGluZm9ybWF0aW9uLgorCisKKyAgNS4gVVNJTkcgVEhFIERSSVZFUgorCisKK1RoZSBWNEwyIGRldmljZSBpbXBsZW1lbnRlZCBieSB0aGUgZHJpdmVyIHByb3ZpZGVzIGEgc3RhbmRhcmQgY29tcHJlc3NlZAorZm9ybWF0IEFQSSwgd2l0aGluIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWE6CisKKyAgKiBBcHBsaWNhdGlvbnMgdGhhdCBvbmx5IHN1cHBvcnQgdGhlIG9yaWdpbmFsIFZpZGVvNExpbnV4MSBBUEkgd2lsbCBub3QKKyAgICBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggdGhpcyBkcml2ZXIgYXQgYWxsLgorCisgICogTm8gcmF3IHZpZGVvIG1vZGVzIGFyZSBzdXBwb3J0ZWQsIHNvIGFwcGxpY2F0aW9ucyBsaWtlIHhhd3R2IHRoYXQKKyAgICBleHBlY3Qgb25seSB1bmNvbXByZXNzZWQgdmlkZW8gd2lsbCBub3QgZnVuY3Rpb24uCisKKyAgKiBTdXBwb3J0ZWQgY29tcHJlc3Npb24gZm9ybWF0cyBhcmU6IE1vdGlvbi1KUEVHLCBNUEVHMSwgTVBFRzIgYW5kIE1QRUc0LgorCisgICogTVBFRyB2aWRlbyBmb3JtYXRzIGFyZSBkZWxpdmVyZWQgYXMgVmlkZW8gRWxlbWVudGFyeSBTdHJlYW1zIG9ubHkuCisgICAgUHJvZ3JhbSBTdHJlYW0gKFBTKSwgVHJhbnNwb3J0IFN0cmVhbSAoVFMpIGFuZCBQYWNrZXRpemVkIEVsZW1lbnRhcnkKKyAgICBTdHJlYW0gKFBFUykgZm9ybWF0cyBhcmUgbm90IHN1cHBvcnRlZC4KKworICAqIFZpZGVvIHBhcmFtZXRlcnMgc3VjaCBhcyBmb3JtYXQgYW5kIGlucHV0IHBvcnQgbWF5IG5vdCBiZSBjaGFuZ2VkIHdoaWxlCisgICAgdGhlIGVuY29kZXIgaXMgYWN0aXZlLgorCisgICogVGhlIGF1ZGlvIGNhcHR1cmUgZGV2aWNlIG9ubHkgZnVuY3Rpb25zIHdoZW4gdGhlIHZpZGVvIGVuY29kZXIgaXMKKyAgICBhY3RpdmVseSBjYXB0dXJpbmcgdmlkZW8uICBBdHRlbXB0cyB0byByZWFkIGZyb20gdGhlIGF1ZGlvIGRldmljZSB3aGVuCisgICAgdGhlIGVuY29kZXIgaXMgaW5hY3RpdmUgd2lsbCByZXN1bHQgaW4gYW4gSS9PIGVycm9yLgorCisgICogVGhlIG5hdGl2ZSBmb3JtYXQgb2YgdGhlIGF1ZGlvIGRldmljZSBpcyA0OEtoeiAyLWNoYW5uZWwgMTYtYml0CisgICAgbGl0dGxlLWVuZGlhbiBQQ00sIGRlbGl2ZXJlZCB0aHJvdWdoIHRoZSBBTFNBIHN5c3RlbS4gIE5vIGF1ZGlvCisgICAgY29tcHJlc3Npb24gaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGhhcmR3YXJlLiAgQUxTQSBtYXkgY29udmVydCB0byBvdGhlcgorICAgIHVuY29tcHJlc3NlZCBmb3JtYXRzIG9uIHRoZSBmbHkuCisKK1RoZSBpbmNsdWRlLyBkaXJlY3RvcnkgY29udGFpbnMgYSBDIGhlYWRlciBmaWxlIGRlc2NyaWJpbmcgbm9uLXN0YW5kYXJkCitmZWF0dXJlcyBvZiB0aGUgR083MDA3U0IgZW5jb2Rlciwgd2hpY2ggYXJlIGRlc2NyaWJlZCBiZWxvdzoKKworCisgIEdPNzAwN0lPQ19TX0NPTVBfUEFSQU1TLCBHTzcwMDdJT0NfR19DT01QX1BBUkFNUworCisgICAgVGhlc2UgaW9jdGxzIGFyZSB1c2VkIHRvIG5lZ290aWF0ZSBnZW5lcmFsIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMuCisKKyAgICBUbyBxdWVyeSB0aGUgY3VycmVudCBwYXJhbWV0ZXJzLCBjYWxsIHRoZSBHTzcwMDdJT0NfR19DT01QX1BBUkFNUyBpb2N0bAorICAgIHdpdGggYSBwb2ludGVyIHRvIGEgc3RydWN0IGdvNzAwN19jb21wX3BhcmFtcy4gIElmIHRoZSBkcml2ZXIgaXMgbm90CisgICAgc2V0IHRvIE1QRUcgZm9ybWF0LCB0aGUgRUlOVkFMIGVycm9yIGNvZGUgd2lsbCBiZSByZXR1cm5lZC4KKworICAgIFRvIGNoYW5nZSB0aGUgY3VycmVudCBwYXJhbWV0ZXJzLCBpbml0aWFsaXplIGFsbCBmaWVsZHMgb2YgYSBzdHJ1Y3QKKyAgICBnbzcwMDdfY29tcF9wYXJhbXMgYW5kIGNhbGwgdGhlIEdPNzAwN19JT0NfU19DT01QX1BBUkFNUyBpb2N0bCB3aXRoIGEKKyAgICBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlLiAgVGhlIGRyaXZlciB3aWxsIHJldHVybiB0aGUgY3VycmVudAorICAgIHBhcmFtZXRlcnMgd2l0aCBhbnkgbmVjZXNzYXJ5IGNoYW5nZXMgdG8gY29uZm9ybSB0byB0aGUgbGltaXRhdGlvbnMgb2YKKyAgICB0aGUgaGFyZHdhcmUgb3IgY3VycmVudCBjb21wcmVzc2lvbiBtb2RlLiAgQW55IG9yIGFsbCBmaWVsZHMgY2FuIGJlIHNldAorICAgIHRvIHplcm8gdG8gcmVxdWVzdCBhIHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZS4gIElmIHRoZSBkcml2ZXIgaXMgbm90CisgICAgc2V0IHRvIE1QRUcgZm9ybWF0LCB0aGUgRUlOVkFMIGVycm9yIGNvZGUgd2lsbCBiZSByZXR1cm5lZC4gIFdoZW4gSS9PCisgICAgaXMgaW4gcHJvZ3Jlc3MsIHRoZSBFQlVTWSBlcnJvciBjb2RlIHdpbGwgYmUgcmV0dXJuZWQuCisKKyAgICBGaWVsZHMgaW4gc3RydWN0IGdvNzAwN19jb21wX3BhcmFtczoKKworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgaW4gZWFjaAorICAgICAgICAgIGdvcF9zaXplICAgICAgICAgICAgICAgICAgIEdyb3VwIE9mIFBpY3R1cmVzOyBpLmUuIHRoZSBtYXhpbXVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGZyYW1lcyBtaW51cyBvbmUgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2gga2V5IGZyYW1lLgorCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlcXVlbnRpYWwKKyAgICAgICAgICBtYXhfYl9mcmFtZXMgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsbHktcHJlZGljdGVkIGZyYW1lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQi1mcmFtZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLikKKworICAgICAgICBlbnVtIGdvNzAwN19hc3BlY3RfcmF0aW8gICAgIFRoZSBhc3BlY3QgcmF0aW8gdG8gYmUgZW5jb2RlZCBpbiB0aGUKKyAgICAgICAgICBhc3BlY3RfcmF0aW8gICAgICAgICAgICAgICBtZXRhLWRhdGEgb2YgdGhlIGNvbXByZXNzZWQgZm9ybWF0LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvaWNlcyBhcmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X0FTUEVDVF9SQVRJT18xXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19OVFNDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X0FTUEVDVF9SQVRJT180XzNfUEFMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X0FTUEVDVF9SQVRJT18xNl85X05UU0MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfQVNQRUNUX1JBVElPXzE2XzlfUEFMCisKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgICAgICBCaXQtd2lzZSBPUiBvZiBjb250cm9sIGZsYWdzIChiZWxvdykKKyAgICAgICAgICBmbGFncworCisgICAgRmxhZ3MgaW4gc3RydWN0IGdvNzAwN19jb21wX3BhcmFtczoKKworICAgICAgICBHTzcwMDdfQ09NUF9DTE9TRURfR09QICAgICAgIE9ubHkgcHJvZHVjZSBzZWxmLWNvbnRhaW5lZCBHT1BzLCB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcHJvZHVjZSBzdHJlYW1zIGFwcHJvcHJpYXRlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSBzZWVraW5nLgorCisgICAgICAgIEdPNzAwN19DT01QX09NSVRfU0VRX0hFQURFUiAgT21pdCB0aGUgc3RyZWFtIHNlcXVlbmNlIGhlYWRlci4KKworCisgIEdPNzAwN0lPQ19TX01QRUdfUEFSQU1TLCBHTzcwMDdJT0NfR19NUEVHX1BBUkFNUworCisgICAgVGhlc2UgaW9jdGxzIGFyZSB1c2VkIHRvIG5lZ290aWF0ZSBNUEVHLXNwZWNpZmljIHN0cmVhbSBwYXJhbWV0ZXJzIHdoZW4KKyAgICB0aGUgcGl4ZWxmb3JtYXQgaGFzIGJlZW4gc2V0IHRvIFY0TDJfUElYX0ZNVF9NUEVHLgorCisgICAgVG8gcXVlcnkgdGhlIGN1cnJlbnQgcGFyYW1ldGVycywgY2FsbCB0aGUgR083MDA3SU9DX0dfTVBFR19QQVJBTVMgaW9jdGwKKyAgICB3aXRoIGEgcG9pbnRlciB0byBhIHN0cnVjdCBnbzcwMDdfbXBlZ19wYXJhbXMuICBJZiB0aGUgZHJpdmVyIGlzIG5vdAorICAgIHNldCB0byBNUEVHIGZvcm1hdCwgdGhlIEVJTlZBTCBlcnJvciBjb2RlIHdpbGwgYmUgcmV0dXJuZWQuCisKKyAgICBUbyBjaGFuZ2UgdGhlIGN1cnJlbnQgcGFyYW1ldGVycywgaW5pdGlhbGl6ZSBhbGwgZmllbGRzIG9mIGEgc3RydWN0CisgICAgZ283MDA3X21wZWdfcGFyYW1zIGFuZCBjYWxsIHRoZSBHTzcwMDdfSU9DX1NfTVBFR19QQVJBTVMgaW9jdGwgd2l0aCBhCisgICAgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gIFRoZSBkcml2ZXIgd2lsbCByZXR1cm4gdGhlIGN1cnJlbnQKKyAgICBwYXJhbWV0ZXJzIHdpdGggYW55IG5lY2Vzc2FyeSBjaGFuZ2VzIHRvIGNvbmZvcm0gdG8gdGhlIGxpbWl0YXRpb25zIG9mCisgICAgdGhlIGhhcmR3YXJlIG9yIHNlbGVjdGVkIE1QRUcgbW9kZS4gIEFueSBvciBhbGwgZmllbGRzIGNhbiBiZSBzZXQgdG8KKyAgICB6ZXJvIHRvIHJlcXVlc3QgYSByZWFzb25hYmxlIGRlZmF1bHQgdmFsdWUuICBJZiB0aGUgZHJpdmVyIGlzIG5vdCBzZXQKKyAgICB0byBNUEVHIGZvcm1hdCwgdGhlIEVJTlZBTCBlcnJvciBjb2RlIHdpbGwgYmUgcmV0dXJuZWQuICBXaGVuIEkvTyBpcyBpbgorICAgIHByb2dyZXNzLCB0aGUgRUJVU1kgZXJyb3IgY29kZSB3aWxsIGJlIHJldHVybmVkLgorCisgICAgRmllbGRzIGluIHN0cnVjdCBnbzcwMDdfbXBlZ19wYXJhbXM6CisKKyAgICAgICAgZW51bSBnbzcwMDdfbXBlZ192aWRlb19zdGFuZGFyZAorICAgICAgICAgIG1wZWdfdmlkZW9fc3RhbmRhcmQgICAgICAgIFRoZSBNUEVHIHZpZGVvIHN0YW5kYXJkIGluIHdoaWNoIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3MgdGhlIHZpZGVvLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvaWNlcyBhcmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUdfVklERU9fTVBFRzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFR19WSURFT19NUEVHMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHX1ZJREVPX01QRUc0CisKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgICAgICBCaXQtd2lzZSBPUiBvZiBjb250cm9sIGZsYWdzIChiZWxvdykKKyAgICAgICAgICBmbGFncworCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByb2ZpbGUgYW5kIGxldmVsIGluZGljYXRpb24gdG8gYmUKKyAgICAgICAgICBwYWxpICAgICAgICAgICAgICAgICAgICAgICBzdG9yZWQgaW4gdGhlIHNlcXVlbmNlIGhlYWRlci4gIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvbmx5IHVzZWQgYXMgYW4gaW5kaWNhdG9yIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIsIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIE1QRUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyB1c2VkIGluIHRoZSB2aWRlbyBzdHJlYW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHZhbGlkIGZvciBNUEVHMS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob2ljZXMgZm9yIE1QRUcyIGFyZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzJfUFJPRklMRV9NQUlOX01BSU4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob2ljZXMgZm9yIE1QRUc0IGFyZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9TX0wwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfU19MMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9TX0wzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FSVFNfTDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0wzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MNQorCisgICAgRmxhZ3MgaW4gc3RydWN0IGdvNzAwN19tcGVnX3BhcmFtczoKKworICAgICAgICBHTzcwMDdfTVBFR19GT1JDRV9EVkRfTU9ERSAgIEZvcmNlIGFsbCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHJhdGUgY29udHJvbCBzZXR0aW5ncyB0byBjb21wbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIERWRCBNUEVHMiBzdHJlYW0gcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3ZlcnJpZGVzIG1vc3QgY29tcHJlc3Npb24gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cmF0ZSBzZXR0aW5ncyEKKworICAgICAgICBHTzcwMDdfTVBFR19PTUlUX0dPUF9IRUFERVIgIE9taXQgdGhlIEdPUCBoZWFkZXIuCisKKyAgICAgICAgR083MDA3X01QRUdfUkVQRUFUX1NFUUhFQURFUiBSZXBlYXQgdGhlIE1QRUcgc2VxdWVuY2UgaGVhZGVyIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN0YXJ0IG9mIGVhY2ggR09QLgorCisKKyAgR083MDA3SU9DX1NfQklUUkFURSwgR083MDA3SU9DX0dfQklUUkFURQorCisgICAgVGhlc2UgaW9jdGxzIGFyZSB1c2VkIHRvIHNldCBhbmQgcXVlcnkgdGhlIHRhcmdldCBiaXRyYXRlIHZhbHVlIGZvciB0aGUKKyAgICBjb21wcmVzc2VkIHZpZGVvIHN0cmVhbS4gIFRoZSBiaXRyYXRlIG1heSBiZSBzZWxlY3RlZCBieSBzdG9yaW5nIHRoZQorICAgIHRhcmdldCBiaXRzIHBlciBzZWNvbmQgaW4gYW4gaW50IGFuZCBjYWxsaW5nIEdPNzAwN0lPQ19TX0JJVFJBVEUgd2l0aCBhCisgICAgcG9pbnRlciB0byB0aGUgaW50LiAgVGhlIGJpdHJhdGUgbWF5IGJlIHF1ZXJpZWQgYnkgY2FsbGluZworICAgIEdPNzAwN0lPQ19HX0JJVFJBVEUgd2l0aCBhIHBvaW50ZXIgdG8gYW4gaW50IHdoZXJlIHRoZSBjdXJyZW50IGJpdHJhdGUKKyAgICB3aWxsIGJlIHN0b3JlZC4KKworICAgIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBwcmltYXJ5IG1lYW5zIG9mIGNvbnRyb2xsaW5nIHRoZSB2aWRlbyBxdWFsaXR5CisgICAgZm9yIGFsbCBjb21wcmVzc2lvbiBtb2RlcywgaW5jbHVkaW5nIFY0TDJfUElYX0ZNVF9NSlBFRy4gIFRoZQorICAgIFZJRElPQ19TX0pQRUdDT01QIGlvY3RsIGlzIG5vdCBzdXBwb3J0ZWQuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgIEluc3RhbGxpbmcgdGhlIFdJUyBQQ0kgVm95YWdlciBEcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgV0lTIFBDSSBWb3lhZ2VyIGRyaXZlciByZXF1aXJlcyBzZXZlcmFsIHBhdGNoZXMgdG8gdGhlIExpbnV4IDIuNi4xMS54CitrZXJuZWwgc291cmNlIHRyZWUgYmVmb3JlIGNvbXBpbGluZyB0aGUgZHJpdmVyLiAgVGhlc2UgcGF0Y2hlcyB1cGRhdGUgdGhlCitpbi1rZXJuZWwgU0FBNzEzNCBkcml2ZXIgdG8gdGhlIG5ld2VzdCBkZXZlbG9wbWVudCB2ZXJzaW9uIGFuZCBwYXRjaCBidWdzCitpbiB0aGUgVERBODI5MC9UREE4Mjc1IHR1bmVyIGRyaXZlci4KKworVGhlIGZvbGxvd2luZyBwYXRjaGVzIG11c3QgYmUgZG93bmxvYWRlZCBmcm9tIEdlcmQgS25vcnIncyB3ZWJzaXRlIGFuZAorYXBwbGllZCBpbiB0aGUgb3JkZXIgbGlzdGVkOgorCisJaHR0cDovL2RsLmJ5dGVzZXgub3JnL3BhdGNoZXMvMi42LjExLTIvaTJjLXR1bmVyCisJaHR0cDovL2RsLmJ5dGVzZXgub3JnL3BhdGNoZXMvMi42LjExLTIvaTJjLXR1bmVyMgorCWh0dHA6Ly9kbC5ieXRlc2V4Lm9yZy9wYXRjaGVzLzIuNi4xMS0yL3Y0bDItYXBpLW1wZWcKKwlodHRwOi8vZGwuYnl0ZXNleC5vcmcvcGF0Y2hlcy8yLjYuMTEtMi9zYWE3MTM0LXVwZGF0ZQorCitUaGUgZm9sbG93aW5nIHBhdGNoZXMgYXJlIGluY2x1ZGVkIHdpdGggdGhpcyBTREsgYW5kIGNhbiBiZSBhcHBsaWVkIGluIGFueQorb3JkZXI6CisKKwlwYXRjaGVzLzIuNi4xMS9zYWE3MTM0LXZveWFnZXIuZGlmZgorCXBhdGNoZXMvMi42LjExL3RkYTgyNzUtbmV3YWRkci5kaWZmCisJcGF0Y2hlcy8yLjYuMTEvdGRhODI5MC1udHNjLmRpZmYKKworQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBDT05GSUdfVklERU9fU0FBNzEzNCBvcHRpb24gaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsCitjb25maWd1cmF0aW9uLCBhbmQgYnVpbGQgYW5kIGluc3RhbGwgdGhlIGtlcm5lbC4KKworQWZ0ZXIgcmVib290aW5nIGludG8gdGhlIG5ldyBrZXJuZWwsIHRoZSBHTzcwMDcgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBhbmQKK2luc3RhbGxlZDoKKworCSQgbWFrZSBTQUE3MTM0X0JVSUxEPXkKKwkkIG1ha2UgaW5zdGFsbAorCSQgbW9kcHJvYmUgc2FhNzEzNC1nbzcwMDcKKworVGhlcmUgd2lsbCBiZSB0d28gVjRMIHZpZGVvIGRldmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBQQ0kgVm95YWdlci4gIFRoZQorZmlyc3QgZGV2aWNlIChtb3N0IGxpa2VseSAvZGV2L3ZpZGVvMCkgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSByYXcgdmlkZW8KK2NhcHR1cmUgbW9kZSBvZiB0aGUgU0FBNzEzMyBkZXZpY2UgYW5kIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBzb3VyY2UKK3ZpZGVvIHBhcmFtZXRlcnMgYW5kIHR1bmUgdGhlIFRWIHR1bmVyLiAgVGhpcyBkZXZpY2UgY2FuIGJlIHVzZWQgd2l0aCB4YXd0dgorb3Igb3RoZXIgVjRMKDIpIHZpZGVvIHNvZnR3YXJlIGFzIGEgc3RhbmRhcmQgdW5jb21wcmVzc2VkIGRldmljZS4KKworVGhlIHNlY29uZCBkZXZpY2UgKG1vc3QgbGlrZWx5IC9kZXYvdmlkZW8xKSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlCitjb21wcmVzc2lvbiBmdW5jdGlvbnMgb2YgdGhlIEdPNzAwNy4gIEl0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIGdvcmVjb3JkCithcHBsaWNhdGlvbiBpbiB0aGUgYXBwcy8gZGlyZWN0b3J5IG9mIHRoaXMgU0RLOgorCisJJCBhcHBzL2dvcmVjb3JkIC12ZGV2aWNlIC9kZXYvdmlkZW8xIC1ub2F1ZGlvIHRlc3QuYXZpCisKK0N1cnJlbnRseSB0aGUgZnJhbWUgcmVzb2x1dGlvbiBpcyBmaXhlZCBhdCA3MjB4NDgwIChOVFNDKSBvciA3MjB4NTc2IChQQUwpLAorYW5kIHRoZSB2aWRlbyBzdGFuZGFyZCBtdXN0IGJlIHNwZWNpZmllZCB0byBib3RoIHRoZSByYXcgYW5kIHRoZSBjb21wcmVzc2VkCit2aWRlbyBkZXZpY2VzICh4YXd0diBhbmQgZ29yZWNvcmQsIGZvciBleGFtcGxlKS4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUkVMRUFTRSBOT1RFUyBGT1IgV0lTIEdPNzAwN1NCIExJTlVYIERSSVZFUgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xhc3QgdXBkYXRlZDogNSBOb3ZlbWJlciAyMDA1CisKKyAtIFJlbGVhc2UgMC45LjcgaW5jbHVkZXMgbmV3IHN1cHBvcnQgZm9yIHVzaW5nIHVkZXYgdG8gcnVuIGZ4bG9hZC4gIFRoZQorICAgaW5zdGFsbCBzY3JpcHQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIG9sZCBob3RwbHVnCisgICBzY3JpcHRzIG9yIHRoZSBuZXcgdWRldiBydWxlcyBzaG91bGQgYmUgdXNlZC4gIFRvIGZvcmNlIHRoZSB1c2Ugb2YKKyAgIGhvdHBsdWcsIHJ1biAibWFrZSBpbnN0YWxsIFVTRV9VREVWPW4iLiAgVG8gZm9yY2UgdGhlIHVzZSBvZiB1ZGV2LCBydW4KKyAgICJtYWtlIGluc3RhbGwgVVNFX1VERVY9eSIuCisKKyAtIE1vdGlvbiBkZXRlY3Rpb24gaXMgc3VwcG9ydGVkIGJ1dCB1bmRvY3VtZW50ZWQuICBUcnkgdGhlIGBtb2RldGAgYXBwCisgICBmb3IgYSBkZW1vbnN0cmF0aW9uIG9mIGhvdyB0byB1c2UgdGhlIGZhY2lsaXR5LgorCisgLSBVc2luZyBVU0IyLjAgZGV2aWNlcyBzdWNoIGFzIHRoZSBUVjQwMlUgd2l0aCBVU0IxLjEgSENEcyBvciBodWJzIGNhbgorICAgY2F1c2UgYnVmZmVyIG92ZXJydW5zIGFuZCBmcmFtZSBkcm9wcywgZXZlbiBhdCBsb3cgZnJhbWVyYXRlcywgZHVlIHRvCisgICBpbmNvbnNpc3RlbmN5IGluIHRoZSBiaXRyYXRlIGNvbnRyb2wgbWVjaGFuaXNtLgorCisgLSBPbiBkZXZpY2VzIHdpdGggYW4gU0FBNzExNSwgaW5jbHVkaW5nIHRoZSBQbGV4dG9yIENvbnZlcnRYLCB2aWRlbyBoZWlnaHQKKyAgIHZhbHVlcyBvZiA5NiwgMTI4LCAxNjAsIDE5MiwgMjU2LCAzMjAsIGFuZCAzODQgZG8gbm90IHdvcmsgaW4gTlRTQyBtb2RlLgorICAgQWxsIHZhbGlkIGhlaWdodHMgdXAgdG8gNTEyIHdvcmsgY29ycmVjdGx5IGluIFBBTCBtb2RlLgorCisgLSBUaGUgV0lTIFN0YXIgVHJlayBhbmQgUENJIFZveWFnZXIgYm9hcmRzIGhhdmUgbm8gc3VwcG9ydCB5ZXQgZm9yIGF1ZGlvCisgICBvciB0aGUgVFYgdHVuZXIuCmRpZmYgLS1naXQgYS9MSUNFTkNFLmkyNDAwbSBiL0xJQ0VOQ0UuaTI0MDBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzE2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTkNFLmkyNDAwbQpAQCAtMCwwICsxLDQzIEBACitDb3B5cmlnaHQgKGMpIDIwMDgsIEludGVsIENvcnBvcmF0aW9uLgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbi4gIAorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIGJpbmFyeSBmb3JtLCB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCitwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICogUmVkaXN0cmlidXRpb25zIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUKKyAgIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgc3VwcGxpZXJzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAqIE5vIHJldmVyc2UgZW5naW5lZXJpbmcsIGRlY29tcGlsYXRpb24sIG9yIGRpc2Fzc2VtYmx5IG9mIHRoaXMKKyAgIHNvZnR3YXJlIGlzIHBlcm1pdHRlZC4KKworTGltaXRlZCBwYXRlbnQgbGljZW5zZS4KKworSW50ZWwgQ29ycG9yYXRpb24gZ3JhbnRzIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlCitsaWNlbnNlIHVuZGVyIHBhdGVudHMgaXQgbm93IG9yIGhlcmVhZnRlciBvd25zIG9yIGNvbnRyb2xzIHRvIG1ha2UsCitoYXZlIG1hZGUsIHVzZSwgaW1wb3J0LCBvZmZlciB0byBzZWxsIGFuZCBzZWxsICjigJxVdGlsaXpl4oCdKSB0aGlzCitzb2Z0d2FyZSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIG5lY2Vzc2FyeQordG8gVXRpbGl6ZSB0aGUgc29mdHdhcmUgYWxvbmUuICBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhpcyBzb2Z0d2FyZS4gIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLgorCitESVNDTEFJTUVSLiAgCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9MSUNFTkNFLmlidF9maXJtd2FyZSBiL0xJQ0VOQ0UuaWJ0X2Zpcm13YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Mjc4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTkNFLmlidF9maXJtd2FyZQpAQCAtMCwwICsxLDM5IEBACitDb3B5cmlnaHQgwqkgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbi4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gYmluYXJ5IGZvcm0sIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworKiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZQorICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBzdXBwbGllcnMKKyAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIHNvZnR3YXJlCisgIGlzIHBlcm1pdHRlZC4KKworTGltaXRlZCBwYXRlbnQgbGljZW5zZS4gIEludGVsIENvcnBvcmF0aW9uIGdyYW50cyBhIHdvcmxkLXdpZGUsCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciBwYXRlbnRzIGl0IG5vdyBvciBoZXJlYWZ0ZXIKK293bnMgb3IgY29udHJvbHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIGltcG9ydCwgb2ZmZXIgdG8gc2VsbCBhbmQKK3NlbGwgKCJVdGlsaXplIikgdGhpcyBzb2Z0d2FyZSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55CitzdWNoIHBhdGVudCBpcyBuZWNlc3NhcnkgdG8gVXRpbGl6ZSB0aGUgc29mdHdhcmUgYWxvbmUsIG9yIGluCitjb21iaW5hdGlvbiB3aXRoIGFuIG9wZXJhdGluZyBzeXN0ZW0gbGljZW5zZWQgdW5kZXIgYW4gYXBwcm92ZWQgT3BlbgorU291cmNlIGxpY2Vuc2UgYXMgbGlzdGVkIGJ5IHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIGF0CitodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMuICBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhpcyBzb2Z0d2FyZS4gIE5vIGhhcmR3YXJlIHBlcgorc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorCitESVNDTEFJTUVSLiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECitDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCmRpZmYgLS1naXQgYS9MSUNFTkNFLml3bHdpZmlfZmlybXdhcmUgYi9MSUNFTkNFLml3bHdpZmlfZmlybXdhcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjMzJhMAotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOQ0UuaXdsd2lmaV9maXJtd2FyZQpAQCAtMCwwICsxLDM5IEBACitDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbi4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gYmluYXJ5IGZvcm0sIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworKiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZQorICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBzdXBwbGllcnMKKyAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIHNvZnR3YXJlCisgIGlzIHBlcm1pdHRlZC4KKworTGltaXRlZCBwYXRlbnQgbGljZW5zZS4gIEludGVsIENvcnBvcmF0aW9uIGdyYW50cyBhIHdvcmxkLXdpZGUsCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciBwYXRlbnRzIGl0IG5vdyBvciBoZXJlYWZ0ZXIKK293bnMgb3IgY29udHJvbHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIGltcG9ydCwgb2ZmZXIgdG8gc2VsbCBhbmQKK3NlbGwgKCJVdGlsaXplIikgdGhpcyBzb2Z0d2FyZSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55CitzdWNoIHBhdGVudCBpcyBuZWNlc3NhcnkgdG8gVXRpbGl6ZSB0aGUgc29mdHdhcmUgYWxvbmUsIG9yIGluCitjb21iaW5hdGlvbiB3aXRoIGFuIG9wZXJhdGluZyBzeXN0ZW0gbGljZW5zZWQgdW5kZXIgYW4gYXBwcm92ZWQgT3BlbgorU291cmNlIGxpY2Vuc2UgYXMgbGlzdGVkIGJ5IHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIGF0CitodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMuICBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhpcyBzb2Z0d2FyZS4gIE5vIGhhcmR3YXJlIHBlcgorc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorCitESVNDTEFJTUVSLiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECitDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCmRpZmYgLS1naXQgYS9MSUNFTkNFLm13bDgzMzUgYi9MSUNFTkNFLm13bDgzMzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4MjQ1MgotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOQ0UubXdsODMzNQpAQCAtMCwwICsxLDUyIEBACitGSVJNV0FSRSBMSUNFTlNFIFRFUk1TCisKKworQ29weXJpZ2h0IChjKSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbi4gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBiaW5hcnkgZm9ybSwgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyogUmVkaXN0cmlidXRpb25zIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCitkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKworKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuIG5vciB0aGUgbmFtZXMgb2YgaXRzIHN1cHBsaWVycworbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKK3NwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIHNvZnR3YXJlIGlzCitwZXJtaXR0ZWQuCisKK0xpbWl0ZWQgcGF0ZW50IGxpY2Vuc2UuIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuIGdyYW50cyBhIHdvcmxkLXdpZGUsCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciBwYXRlbnRzIGl0IG5vdyBvciBoZXJlYWZ0ZXIgb3ducyBvcgorY29udHJvbHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIGltcG9ydCwgb2ZmZXIgdG8gc2VsbCBhbmQgc2VsbCAoIlV0aWxpemUiKQordGhpcyBzb2Z0d2FyZSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIG5lY2Vzc2FyeSB0bworVXRpbGl6ZSB0aGUgc29mdHdhcmUgYWxvbmUsIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggYW4gb3BlcmF0aW5nIHN5c3RlbSBsaWNlbnNlZAordW5kZXIgYW4gYXBwcm92ZWQgT3BlbiBTb3VyY2UgbGljZW5zZSBhcyBsaXN0ZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgYXQKK2h0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBhbnkgb3RoZXIKK2NvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoaXMgc29mdHdhcmUuIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZAoraGVyZXVuZGVyLgorCitESVNDTEFJTUVSLiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCitDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKK1RISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0KKworTk9URTogdGhpcyBmaXJtd2FyZSB3YXMgZ2VuZXJhdGVkIGZyb20gaW1nX2NiMzVfZndfZHVwbGV4LmggY29udGFpbmVkIGluIHRoZQorR1BMIHNvdXJjZSByZWxlYXNlIG9mIHRoZSBNYXh0b3IgU2hhcmVkIFN0b3JhZ2UgSUkgcHJvZHVjdCBhdmFpbGFibGUgaGVyZToKKworaHR0cDovL3d3dy5zZWFnYXRlLmNvbS9zdGF0aWNmaWxlcy9tYXh0b3IvZW5fdXMvZG93bmxvYWRzL01TU0lJXzMuMS4yLnNyYy50Z3oKKworRXhwbGljaXQgcGVybWlzc2lvbiBmcm9tIE1hcnZlbGwgd2FzIG9idGFpbmVkIHRvIHVwbG9hZCB0aGlzIGZpcm13YXJlIHRvIHRoZQorbGludXgtZmlybXdhcmUgZ2l0IHJlcG9zaXRvcnkgdW5kZXIgdGhlIE1hcnZlbGwgZmlybXdhcmUgbGljZW5zZSBhYm92ZS4KKwpkaWZmIC0tZ2l0IGEvTElDRU5DRS5teXJpMTBnZV9maXJtd2FyZSBiL0xJQ0VOQ0UubXlyaTEwZ2VfZmlybXdhcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4NDAyMwotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOQ0UubXlyaTEwZ2VfZmlybXdhcmUKQEAgLTAsMCArMSwyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAsIE15cmljb20gSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgMi4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTXlyaWNvbSBJbmMsIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9MSUNFTkNFLnBoYW5mdyBiL0xJQ0VOQ0UucGhhbmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNzc4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTkNFLnBoYW5mdwpAQCAtMCwwICsxLDMyIEBACitDb3B5cmlnaHQgwqkgIDIwMDMtMjAxMyBRTG9naWMgQ29ycG9yYXRpb24KK1FMb2dpYyBMaW51eCBJbnRlbGxpZ2VudCBFdGhlcm5ldCAoMzAwMCBhbmQgMzEwMCBTZXJpZXMpIEFkYXB0ZXIgRmlybXdhcmUKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBiaW5hcnkgZm9ybSwgd2l0aG91dCBtb2RpZmljYXRpb24sIGZvciB1c2UgaW4KK2Nvbmp1bmN0aW9uIHdpdGggUUxvZ2ljIGF1dGhvcml6ZWQgcHJvZHVjdHMgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlCitmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMi4gVGhlIG5hbWUgb2YgUUxvZ2ljIENvcnBvcmF0aW9uIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorMy4gUmV2ZXJzZSBlbmdpbmVlcmluZywgZGVjb21waWxhdGlvbiwgb3IgZGlzYXNzZW1ibHkgb2YgdGhpcyBmaXJtd2FyZSBpcyBub3QKKyAgIHBlcm1pdHRlZC4KKworUkVHQVJETEVTUyBPRiBXSEFUIExJQ0VOU0lORyBNRUNIQU5JU00gSVMgVVNFRCBPUiBBUFBMSUNBQkxFLFRISVMgUFJPR1JBTSBJUworUFJPVklERUQgQlkgUUxPR0lDIENPUlBPUkFUSU9OICJBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUgorQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQorR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFLgorCitVU0VSIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTIFRIQVQgVVNFIE9GIFRISVMgUFJPR1JBTSBXSUxMIE5PVCBDUkVBVEUgT1IgR0lWRQorR1JPVU5EUyBGT1IgQSBMSUNFTlNFIEJZIElNUExJQ0FUSU9OLCBFU1RPUFBFTCwgT1IgT1RIRVJXSVNFIElOIEFOWSBJTlRFTExFQ1RVQUwKK1BST1BFUlRZIFJJR0hUUyAoUEFURU5ULCBDT1BZUklHSFQsIFRSQURFIFNFQ1JFVCwgTUFTSyBXT1JLLCBPUiBPVEhFUgorUFJPUFJJRVRBUlkgUklHSFQpIEVNQk9ESUVEIElOIEFOWSBPVEhFUiBRTE9HSUMgSEFSRFdBUkUgT1IgU09GVFdBUkUgRUlUSEVSCitTT0xFTFkgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBUSElTIFBST0dSQU0uCmRpZmYgLS1naXQgYS9MSUNFTkNFLnFsYTJ4eHggYi9MSUNFTkNFLnFsYTJ4eHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2OWFlMAotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOQ0UucWxhMnh4eApAQCAtMCwwICsxLDM5IEBACitDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDYgUUxvZ2ljIENvcnBvcmF0aW9uCitRTG9naWMgTGludXggRmlicmUgQ2hhbm5lbCBIQkEgRmlybXdhcmUKKworWW91IG1heSByZWRpc3RyaWJ1dGUgdGhlIGhhcmR3YXJlIHNwZWNpZmljIGZpcm13YXJlIGJpbmFyeSBmaWxlCit1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zOgorCisJMS4gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgKG9ubHkgaWYgYXBwbGljYWJsZSksCisJICAgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgorCSAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworCTIuIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorCSAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUKKwkgICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIKKwkgICBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisJMy4gVGhlIG5hbWUgb2YgUUxvZ2ljIENvcnBvcmF0aW9uIG1heSBub3QgYmUgdXNlZCB0bworCSAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorCSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisKK1JFR0FSRExFU1MgT0YgV0hBVCBMSUNFTlNJTkcgTUVDSEFOSVNNIElTIFVTRUQgT1IgQVBQTElDQUJMRSwKK1RISVMgUFJPR1JBTSBJUyBQUk9WSURFRCBCWSBRTE9HSUMgQ09SUE9SQVRJT04gIkFTIElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUgorQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitVU0VSIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTIFRIQVQgVVNFIE9GIFRISVMgUFJPR1JBTSBXSUxMIE5PVAorQ1JFQVRFIE9SIEdJVkUgR1JPVU5EUyBGT1IgQSBMSUNFTlNFIEJZIElNUExJQ0FUSU9OLCBFU1RPUFBFTCwgT1IKK09USEVSV0lTRSBJTiBBTlkgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyAoUEFURU5ULCBDT1BZUklHSFQsCitUUkFERSBTRUNSRVQsIE1BU0sgV09SSywgT1IgT1RIRVIgUFJPUFJJRVRBUlkgUklHSFQpIEVNQk9ESUVEIElOCitBTlkgT1RIRVIgUUxPR0lDIEhBUkRXQVJFIE9SIFNPRlRXQVJFIEVJVEhFUiBTT0xFTFkgT1IgSU4KK0NPTUJJTkFUSU9OIFdJVEggVEhJUyBQUk9HUkFNLgpkaWZmIC0tZ2l0IGEvTElDRU5DRS5yYWxpbmstZmlybXdhcmUudHh0IGIvTElDRU5DRS5yYWxpbmstZmlybXdhcmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZGQwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTkNFLnJhbGluay1maXJtd2FyZS50eHQKQEAgLTAsMCArMSwzOSBAQAorQ29weXJpZ2h0IChjKSAyMDA3LCBSYWxpbmsgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uLiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBiaW5hcnkgZm9ybSwgd2l0aG91dCAKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgCittZXQ6CisKKyogUmVkaXN0cmlidXRpb25zIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgCisgIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgCisgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisqIE5laXRoZXIgdGhlIG5hbWUgb2YgUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgc3VwcGxpZXJzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisqIE5vIHJldmVyc2UgZW5naW5lZXJpbmcsIGRlY29tcGlsYXRpb24sIG9yIGRpc2Fzc2VtYmx5IG9mIHRoaXMgc29mdHdhcmUgCisgIGlzIHBlcm1pdHRlZC4KKworTGltaXRlZCBwYXRlbnQgbGljZW5zZS4gUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gZ3JhbnRzIGEgd29ybGQtd2lkZSwgCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciBwYXRlbnRzIGl0IG5vdyBvciBoZXJlYWZ0ZXIgCitvd25zIG9yIGNvbnRyb2xzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBpbXBvcnQsIG9mZmVyIHRvIHNlbGwgYW5kIAorc2VsbCAoIlV0aWxpemUiKSB0aGlzIHNvZnR3YXJlLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgCitzdWNoIHBhdGVudCBpcyBuZWNlc3NhcnkgdG8gVXRpbGl6ZSB0aGUgc29mdHdhcmUgYWxvbmUsIG9yIGluIAorY29tYmluYXRpb24gd2l0aCBhbiBvcGVyYXRpbmcgc3lzdGVtIGxpY2Vuc2VkIHVuZGVyIGFuIGFwcHJvdmVkIE9wZW4gCitTb3VyY2UgbGljZW5zZSBhcyBsaXN0ZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgYXQgCitodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMuICBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIAorYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoaXMgc29mdHdhcmUuICBObyBoYXJkd2FyZSBwZXIgCitzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCisKK0RJU0NMQUlNRVIuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgCitDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIAorQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIAorT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCAKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiAKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIAorREFNQUdFLgpkaWZmIC0tZ2l0IGEvTElDRU5DRS5yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlIGIvTElDRU5DRS5yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZjE2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTkNFLnJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmUKQEAgLTAsMCArMSwzOSBAQAorQ29weXJpZ2h0IChjKSAyMDEzLCBSYWxpbmssIEEgTWVkaWFUZWsgQ29tcGFueSAKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uLiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBiaW5hcnkgZm9ybSwgd2l0aG91dCAKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgCittZXQ6CisKKyogUmVkaXN0cmlidXRpb25zIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgCisgIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgCisgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisqIE5laXRoZXIgdGhlIG5hbWUgb2YgUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgc3VwcGxpZXJzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisqIE5vIHJldmVyc2UgZW5naW5lZXJpbmcsIGRlY29tcGlsYXRpb24sIG9yIGRpc2Fzc2VtYmx5IG9mIHRoaXMgc29mdHdhcmUgCisgIGlzIHBlcm1pdHRlZC4KKworTGltaXRlZCBwYXRlbnQgbGljZW5zZS4gUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gZ3JhbnRzIGEgd29ybGQtd2lkZSwgCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciBwYXRlbnRzIGl0IG5vdyBvciBoZXJlYWZ0ZXIgCitvd25zIG9yIGNvbnRyb2xzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBpbXBvcnQsIG9mZmVyIHRvIHNlbGwgYW5kIAorc2VsbCAoIlV0aWxpemUiKSB0aGlzIHNvZnR3YXJlLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgCitzdWNoIHBhdGVudCBpcyBuZWNlc3NhcnkgdG8gVXRpbGl6ZSB0aGUgc29mdHdhcmUgYWxvbmUsIG9yIGluIAorY29tYmluYXRpb24gd2l0aCBhbiBvcGVyYXRpbmcgc3lzdGVtIGxpY2Vuc2VkIHVuZGVyIGFuIGFwcHJvdmVkIE9wZW4gCitTb3VyY2UgbGljZW5zZSBhcyBsaXN0ZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgYXQgCitodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMuICBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIAorYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoaXMgc29mdHdhcmUuICBObyBoYXJkd2FyZSBwZXIgCitzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCisKK0RJU0NMQUlNRVIuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgCitDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIAorQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIAorT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCAKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiAKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIAorREFNQUdFLgpkaWZmIC0tZ2l0IGEvTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dCBiL0xJQ0VOQ0UucnRsd2lmaV9maXJtd2FyZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwOTIxZgotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOQ0UucnRsd2lmaV9maXJtd2FyZS50eHQKQEAgLTAsMCArMSwzOSBAQAorQ29weXJpZ2h0IChjKSAyMDEwLCBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycG9yYXRpb24gCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbi4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gYmluYXJ5IGZvcm0sIHdpdGhvdXQgCittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIAorbWV0OgorCisqIFJlZGlzdHJpYnV0aW9ucyBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIAorICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIAorICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICBzdXBwbGllcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyogTm8gcmV2ZXJzZSBlbmdpbmVlcmluZywgZGVjb21waWxhdGlvbiwgb3IgZGlzYXNzZW1ibHkgb2YgdGhpcyBzb2Z0d2FyZSAKKyAgaXMgcGVybWl0dGVkLgorCitMaW1pdGVkIHBhdGVudCBsaWNlbnNlLiBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycG9yYXRpb24gZ3JhbnRzIGEgd29ybGQtd2lkZSwgCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciBwYXRlbnRzIGl0IG5vdyBvciBoZXJlYWZ0ZXIgCitvd25zIG9yIGNvbnRyb2xzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBpbXBvcnQsIG9mZmVyIHRvIHNlbGwgYW5kIAorc2VsbCAoIlV0aWxpemUiKSB0aGlzIHNvZnR3YXJlLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgCitzdWNoIHBhdGVudCBpcyBuZWNlc3NhcnkgdG8gVXRpbGl6ZSB0aGUgc29mdHdhcmUgYWxvbmUsIG9yIGluIAorY29tYmluYXRpb24gd2l0aCBhbiBvcGVyYXRpbmcgc3lzdGVtIGxpY2Vuc2VkIHVuZGVyIGFuIGFwcHJvdmVkIE9wZW4gCitTb3VyY2UgbGljZW5zZSBhcyBsaXN0ZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgYXQgCitodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMuICBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIAorYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoaXMgc29mdHdhcmUuICBObyBoYXJkd2FyZSBwZXIgCitzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCisKK0RJU0NMQUlNRVIuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgCitDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIAorQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIAorT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCAKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiAKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIAorREFNQUdFLgpkaWZmIC0tZ2l0IGEvTElDRU5DRS50ZGE3NzA2LWZpcm13YXJlLnR4dCBiL0xJQ0VOQ0UudGRhNzcwNi1maXJtd2FyZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ4MTU5NAotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOQ0UudGRhNzcwNi1maXJtd2FyZS50eHQKQEAgLTAsMCArMSw0OCBAQAorRklSTVdBUkUgTElDRU5TRSBURVJNUworCisKK0NvcHlyaWdodCAoYykgU1QgTWljcm9lbGVjdHJvbmljcworCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbi4gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBiaW5hcnkgZm9ybSwgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyogUmVkaXN0cmlidXRpb25zIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCitkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKworKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNUIE1pY3JvZWxlY3Ryb25pY3Mgbm9yIHRoZSBuYW1lcyBvZiBpdHMgc3VwcGxpZXJzCittYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisqIE5vIHJldmVyc2UgZW5naW5lZXJpbmcsIGRlY29tcGlsYXRpb24sIG9yIGRpc2Fzc2VtYmx5IG9mIHRoaXMgc29mdHdhcmUgaXMKK3Blcm1pdHRlZC4KKworTGltaXRlZCBwYXRlbnQgbGljZW5zZS4gU1QgTWljcm9lbGVjdHJvbmljcyBncmFudHMgYSB3b3JsZC13aWRlLAorcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdW5kZXIgcGF0ZW50cyBpdCBub3cgb3IgaGVyZWFmdGVyIG93bnMgb3IKK2NvbnRyb2xzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBpbXBvcnQsIG9mZmVyIHRvIHNlbGwgYW5kIHNlbGwgKCJVdGlsaXplIikKK3RoaXMgc29mdHdhcmUsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyBuZWNlc3NhcnkgdG8KK1V0aWxpemUgdGhlIHNvZnR3YXJlIGFsb25lLCBvciBpbiBjb21iaW5hdGlvbiB3aXRoIGFuIG9wZXJhdGluZyBzeXN0ZW0gbGljZW5zZWQKK3VuZGVyIGFuIGFwcHJvdmVkIE9wZW4gU291cmNlIGxpY2Vuc2UgYXMgbGlzdGVkIGJ5IHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIGF0CitodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8gYW55IG90aGVyCitjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQKK2hlcmV1bmRlci4KKworRElTQ0xBSU1FUi4gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuCisKK1NUTWljcm9lbGVjdHJvbmljcyBoYXMgbWFkZSBldmVyeSBlZmZvcnQgcG9zc2libGUgdG8gZW5zdXJlIHRoYXQgdGhpcyBzb2Z0d2FyZSBpcyBmcmVlIG9mIGFueSBidWdzIG9yCitlcnJvcnM7IGhvd2V2ZXIsIGluIG5vIHdheSBpcyB0aGUgc29mdHdhcmUgdG8gYmUgY29uc2lkZXJlZCBlcnJvciBvciBidWcgZnJlZS4gWW91IGFzc3VtZSBhbGwKK3Jlc3BvbnNpYmlsaXR5IGZvciBhbnkgZGFtYWdlcyBvciBsb3N0IGRhdGEgdGhhdCBtYXkgcmVzdWx0IGZyb20gYW55IGVycm9ycyBvciBidWdzIGluIHRoZSBzb2Z0d2FyZS4KK0lOIE5PIEVWRU5UIFdJTEwgU1RNaWNyb2VsZWN0cm9uaWNzIEJFIExJQUJMRSBUTyBZT1UgRk9SIEFOWSBHRU5FUkFMLCBTUEVDSUFMLAorSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsIElOQ0lERU5UQUwgT1IgT1RIRVIgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTCitMSUNFTlNFLgorLS0tLQorCitOb3RlCitFeHBsaWNpdCBwZXJtaXNzaW9uIGZyb20gU1QgTWljcm9lbGVjdHJvbmljcyB3YXMgb2J0YWluZWQgdG8gdXBsb2FkIHRoaXMgZmlybXdhcmUgdG8gdGhlCitsaW51eC1maXJtd2FyZSBnaXQgcmVwb3NpdG9yeSB1bmRlciB0aGUgU1QgTWljcm9lbGVjdHJvbmljcyBmaXJtd2FyZSBsaWNlbnNlIGFib3ZlLgorCmRpZmYgLS1naXQgYS9MSUNFTkNFLnRpLWNvbm5lY3Rpdml0eSBiL0xJQ0VOQ0UudGktY29ubmVjdGl2aXR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYTE1MTYKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTkNFLnRpLWNvbm5lY3Rpdml0eQpAQCAtMCwwICsxLDQ2IEBACitURUNITk9MT0dZIEFORCBTT0ZUV0FSRSBQVUJMSUNMWSBBVkFJTEFCTEUKK1NPRlRXQVJFIExJQ0VOU0UKKworQ29weXJpZ2h0IChjKSAyMDExLCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQuCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIGJpbmFyeSBmb3JtLCB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCitwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICogUmVkaXN0cmlidXRpb25zIG11c3QgcHJlc2VydmUgZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMgYW5kIHJlcHJvZHVjZQorICAgdGhpcyBsaWNlbnNlIChpbmNsdWRpbmcgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBkaXNjbGFpbWVyIGJlbG93KQorICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIG5vciB0aGUgbmFtZXMgb2YKKyAgIGl0cyBzdXBwbGllcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICogTm8gcmV2ZXJzZSBlbmdpbmVlcmluZywgZGVjb21waWxhdGlvbiwgb3IgZGlzYXNzZW1ibHkgb2YgdGhpcworICAgc29mdHdhcmUgaXMgcGVybWl0dGVkLgorCitMaW1pdGVkIHBhdGVudCBsaWNlbnNlLgorCitUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgZ3JhbnRzIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlIHVuZGVyIHBhdGVudHMgaXQgbm93IG9yIGhlcmVhZnRlciBvd25zIG9yIGNvbnRyb2xzCit0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgaW1wb3J0LCBvZmZlciB0byBzZWxsIGFuZCBzZWxsICgiVXRpbGl6ZSIpIHRoaXMKK3NvZnR3YXJlLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgbmVjZXNzYXJ5Cit0byBVdGlsaXplIHRoZSBzb2Z0d2FyZSBhbG9uZS4gIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLiAgTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuCisKK0RJU0NMQUlNRVIuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9MSUNFTkNFLnVlYWdsZS1hdG00LWZpcm13YXJlIGIvTElDRU5DRS51ZWFnbGUtYXRtNC1maXJtd2FyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzM2NzVkCi0tLSAvZGV2L251bGwKKysrIGIvTElDRU5DRS51ZWFnbGUtYXRtNC1maXJtd2FyZQpAQCAtMCwwICsxLDM5IEBACitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBlYWdsZTQgZmlybXdhcmUgJiBEU1Bjb2RlCituYW1lbHksIHRoZSBmaWxlcyBlYWdsZUlWLmZ3ICBEU1A0cC5iaW4qCisKK3wgQ29weXJpZ2h0ICgyMDA2KSBJa2Fub3MgQ29tbXVuaWNhdGlvbnMsIEluYy4gCit8IAorfCBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgCit8IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgCit8IGNvbmRpdGlvbnMgYXJlIG1ldDogCit8IAorfCAqIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgCit8IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCit8IAorfCAqIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSAKK3wgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgCit8IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCAKK3wgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKK3wgCit8ICogVGhlIG5hbWUgb2YgSWthbm9zIENvcnBvcmF0aW9uIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlICAgICAgICAgCit8ICAgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb3VyY2UgY29kZSB3aXRob3V0IHNwZWNpZmljICAgICAKK3wgICBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgSWthbm9zIENvcnBvcmF0aW9uLiAKK3wgCit8IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCit8ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIAorfCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgCit8IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIAorfCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgCit8IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgCit8IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCAKK3wgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIAorfCBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIAorfCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgCit8IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorfCBVU0VSIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTIFRIQVQgVEhFIFBVUkNIQVNFIE9SIFVTRSBPRiBUSElTIFNPRlRXQVJFIFdJTEwgCit8IE5PVCBDUkVBVEUgT1IgR0lWRSBHUk9VTkRTIEZPUiBBICAgICAKK3wgIExJQ0VOU0UgQlkgSU1QTElDQVRJT04sIEVTVE9QUEVMLCBPUiBPVEhFUldJU0UgSU4gQU5ZIElOVEVMTEVDVFVBTCAgICAgICAgIAorfCAgUFJPUEVSVFkgUklHSFRTIChQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSICAgCit8ICBQUk9QUklFVEFSWSBSSUdIVCkgRU1CT0RJRUQgSU4gQU5ZIE9USEVSIElLQU5PUyBIQVJEV0FSRSBPUiBTT0ZUV0FSRSAgICAgICAgIAorfCAgRUlUSEVSIFNPTEVMWSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIFRISVMgU09GVFdBUkUuIAorCmRpZmYgLS1naXQgYS9MSUNFTkNFLnZpYV92dDY2NTYgYi9MSUNFTkNFLnZpYV92dDY2NTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzMWY5OAotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOQ0UudmlhX3Z0NjY1NgpAQCAtMCwwICsxLDI1IEBACitUaGUgZm9sbG93aW5nIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgYmluYXJ5LW9ubHkgVlQ2NjU2IGZpcm13YXJlCithcyBjb250YWluZWQgaW4gdGhlIGZpbGUgInZudHd1c2IuZnciCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgMTk5OC0yMDEwIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CityZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKK2NvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKK0hPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9MSUNFTkNFLndsMTI1MSBiL0xJQ0VOQ0Uud2wxMjUxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMGY1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTkNFLndsMTI1MQpAQCAtMCwwICsxLDU5IEBACitDb3B5cmlnaHQgKGMpIDIwMDAg4oCTIDIwMTMgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQgbm90IGdyYW50ZWQgaGVyZWluLgorCitMaW1pdGVkIExpY2Vuc2UuCisKK1RleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCBncmFudHMgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UgdW5kZXIgY29weXJpZ2h0cyBhbmQgcGF0ZW50cyBpdCBub3cgb3IgaGVyZWFmdGVyIG93bnMgb3IgY29udHJvbHMgdG8KK21ha2UsIGhhdmUgbWFkZSwgdXNlLCBpbXBvcnQsIG9mZmVyIHRvIHNlbGwgYW5kIHNlbGwgKCJVdGlsaXplIikgdGhpcyBzb2Z0d2FyZQorc3ViamVjdCB0byB0aGUgdGVybXMgaGVyZWluLiAgV2l0aCByZXNwZWN0IHRvIHRoZSBmb3JlZ29pbmcgcGF0ZW50IGxpY2Vuc2UsCitzdWNoIGxpY2Vuc2UgaXMgZ3JhbnRlZCAgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgbmVjZXNzYXJ5Cit0byBVdGlsaXplIHRoZSBzb2Z0d2FyZSBhbG9uZS4gIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8gYW55Citjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLCBvdGhlciB0aGFuIGNvbWJpbmF0aW9ucyB3aXRoIGRldmljZXMKK21hbnVmYWN0dXJlZCBieSBvciBmb3IgVEkgKOKAnFRJIERldmljZXPigJ0pLiAgTm8gaGFyZHdhcmUgcGF0ZW50IGlzIGxpY2Vuc2VkCitoZXJldW5kZXIuCisKK1JlZGlzdHJpYnV0aW9ucyBtdXN0IHByZXNlcnZlIGV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGFuZCByZXByb2R1Y2UgdGhpcworbGljZW5zZSAoaW5jbHVkaW5nIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZGlzY2xhaW1lciBhbmQgKGlmCithcHBsaWNhYmxlKSBzb3VyY2UgY29kZSBsaWNlbnNlIGxpbWl0YXRpb25zIGJlbG93KSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKK290aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBiaW5hcnkgZm9ybSwgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQKK3Byb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyoJTm8gcmV2ZXJzZSBlbmdpbmVlcmluZywgZGVjb21waWxhdGlvbiwgb3IgZGlzYXNzZW1ibHkgb2YgdGhpcyBzb2Z0d2FyZQorCWlzIHBlcm1pdHRlZCB3aXRoIHJlc3BlY3QgdG8gYW55IHNvZnR3YXJlIHByb3ZpZGVkIGluIGJpbmFyeSBmb3JtLgorCisqCWFueSByZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGFyZSBsaWNlbnNlZCBieSBUSSBmb3IgdXNlIG9ubHkgd2l0aCBUSQorCURldmljZXMuCisKKyoJTm90aGluZyBzaGFsbCBvYmxpZ2F0ZSBUSSB0byBwcm92aWRlIHlvdSB3aXRoIHNvdXJjZSBjb2RlIGZvciB0aGUKKwlzb2Z0d2FyZSBsaWNlbnNlZCBhbmQgcHJvdmlkZWQgdG8geW91IGluIG9iamVjdCBjb2RlLgorCitJZiBzb2Z0d2FyZSBzb3VyY2UgY29kZSBpcyBwcm92aWRlZCB0byB5b3UsIG1vZGlmaWNhdGlvbiBhbmQgcmVkaXN0cmlidXRpb24gb2YKK3RoZSBzb3VyY2UgY29kZSBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyoJYW55IHJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhlIHNvdXJjZSBjb2RlLCBpbmNsdWRpbmcgYW55IHJlc3VsdGluZworCWRlcml2YXRpdmUgd29ya3MsIGFyZSBsaWNlbnNlZCBieSBUSSBmb3IgdXNlIG9ubHkgd2l0aCBUSSBEZXZpY2VzLgorCisqCWFueSByZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIGFueSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHRoZSBzb3VyY2UKKwljb2RlIGFuZCBhbnkgcmVzdWx0aW5nIGRlcml2YXRpdmUgd29ya3MsIGFyZSBsaWNlbnNlZCBieSBUSSBmb3IgdXNlCisJb25seSB3aXRoIFRJIERldmljZXMuCisKK05laXRoZXIgdGhlIG5hbWUgb2YgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIG5vciB0aGUgbmFtZXMgb2YgaXRzCitzdXBwbGllcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCit3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworRElTQ0xBSU1FUi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSSBBTkQgVEnigJlTIExJQ0VOU09SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KK0VWRU5UIFNIQUxMIFRJIEFORCBUSeKAmVMgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKK09SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvTElDRU5DRS54YzUwMDAgYi9MSUNFTkNFLnhjNTAwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWM4NTU3Ci0tLSAvZGV2L251bGwKKysrIGIvTElDRU5DRS54YzUwMDAKQEAgLTAsMCArMSwyMyBAQAorVGhlIGZvbGxvd2luZyBYQzUwMCBmaXJtd2FyZSBmaWxlICJkdmItZmUteGM1MDAwLTEuNi4xMTQuZnciIHdhcworY3JlYXRlZCBiYXNlZCBvbiAieGM1MDAwX2Zpcm13YXJlc18zMjAwMEtoei5oIi4KKworRmlybXdhcmUgcHJvdmlkZWQgYXMgcGFydCBvZiBhbiBYQzUwMDAgTGludXggZGV2ZWxvcGVycyBraXQgYnkgQnJpYW4KK01hdGhld3MgPGJtYXRoZXdzQHhjZWl2ZS5jb20+IHRvIERldmluIEhlaXRtdWVsbGVyIDxkaGVpdG11ZWxsZXJAbGludXh0di5vcmc+CitvbiBKdWx5IDEsIDIwMDkuCisKK1RoZSBjb2RlIHdhcyByZWxlYXNlZCBieSBYY2VpdmUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorCisvLyBDb3B5cmlnaHQgKGMpIDIwMDksIFhjZWl2ZSBDb3Jwb3JhdGlvbiA8aW5mb0B4Y2VpdmUuY29tPgorLy8KKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUsIG9ubHkKKy8vIGZvciB1c2Ugd2l0aCBYY2VpdmUgSUNzLCBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkKKy8vIGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbgorLy8gbm90aWNlIGFwcGVhciBpbiBhbGwgc291cmNlIGNvZGUgY29waWVzLgorLy8KKy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKy8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKy8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKy8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9MSUNFTlNFLmFtZC11Y29kZSBiL0xJQ0VOU0UuYW1kLXVjb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNGM0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTlNFLmFtZC11Y29kZQpAQCAtMCwwICsxLDY0IEBACitDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGJ5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gKCJBTUQiKSwKK2ZyZWUgb2YgYW55IGxpY2Vuc2UgZmVlcywgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMKK21pY3JvY29kZSBpbiBiaW5hcnkgZm9ybSAodGhlICJTb2Z0d2FyZSIpICgiWW91IiksIHRvIGluc3RhbGwsCityZXByb2R1Y2UsIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBhbmQgdG8gcGVybWl0CitwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIHByb3ZpZGVkIHRvIGRvIHRoZSBzYW1lLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91ciB1c2Ugb2YgYW55IHBvcnRpb24gb2YgdGhlCitTb2Z0d2FyZSBzaGFsbCBjb25zdGl0dXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZAorY29uZGl0aW9ucy4gSWYgWW91IGRvIG5vdCBhZ3JlZSB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorZG8gbm90IHVzZSwgcmV0YWluIG9yIHJlZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgU29mdHdhcmUuCisKK0lmIFlvdSByZWRpc3RyaWJ1dGUgdGhpcyBTb2Z0d2FyZSwgWW91IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBsaWNlbnNlIHdpdGggdGhlIFNvZnR3YXJlLgorV2l0aG91dCBzcGVjaWZpYywgcHJpb3IsIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIEFNRCwgWW91IG1heSBub3QKK3JlZmVyZW5jZSBBTUQgb3IgQU1EIHByb2R1Y3RzIGluIHRoZSBwcm9tb3Rpb24gb2YgYW55IHByb2R1Y3QgZGVyaXZlZAorZnJvbSBvciBpbmNvcnBvcmF0aW5nIHRoaXMgU29mdHdhcmUgaW4gYW55IG1hbm5lciB0aGF0IGltcGxpZXMgdGhhdAorQU1EIGVuZG9yc2VzIG9yIGhhcyBjZXJ0aWZpZWQgc3VjaCBwcm9kdWN0IGRlcml2ZWQgZnJvbSBvcgoraW5jb3Jwb3JhdGluZyB0aGlzIFNvZnR3YXJlLgorCitZb3UgbWF5IG5vdCByZXZlcnNlIGVuZ2luZWVyLCBkZWNvbXBpbGUsIG9yIGRpc2Fzc2VtYmxlIHRoaXMgU29mdHdhcmUKK29yIGFueSBwb3J0aW9uIHRoZXJlb2YuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBOT05JTkZSSU5HRU1FTlQsIFRJVExFLCBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUgorUFVSUE9TRSwgT1IgV0FSUkFOVElFUyBBUklTSU5HIEZST00gQ09ORFVDVCwgQ09VUlNFIE9GIERFQUxJTkcsIE9SCitVU0FHRSBPRiBUUkFERS4gSU4gTk8gRVZFTlQgU0hBTEwgQU1EIE9SIElUUyBMSUNFTlNPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SCitMT1NTIE9GIFBST0ZJVFMsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBEQVRBIE9SCitJTkZPUk1BVElPTikgQVJJU0lORyBPVVQgT0YgQU1EJ1MgTkVHTElHRU5DRSwgR1JPU1MgTkVHTElHRU5DRSwgVEhFCitVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUsIEVWRU4gSUYgQU1EIEhBUyBCRUVOIEFEVklTRUQKK09GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIEJFQ0FVU0UgU09NRSBKVVJJU0RJQ1RJT05TCitQUk9ISUJJVCBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgTElBQklMSVRZIEZPUiBDT05TRVFVRU5USUFMIE9SCitJTkNJREVOVEFMIERBTUFHRVMgT1IgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFRIRSBBQk9WRQorTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworV2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCB0aGUgU29mdHdhcmUgbWF5IGltcGxlbWVudCB0aGlyZCBwYXJ0eQordGVjaG5vbG9naWVzIGZvciB3aGljaCBZb3UgbXVzdCBvYnRhaW4gbGljZW5zZXMgZnJvbSBwYXJ0aWVzIG90aGVyCit0aGFuIEFNRC4gWW91IGFncmVlIHRoYXQgQU1EIGhhcyBub3Qgb2J0YWluZWQgb3IgY29udmV5ZWQgdG8gWW91LCBhbmQKK3RoYXQgWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBvYnRhaW5pbmcgdGhlIHJpZ2h0cyB0byB1c2UgYW5kL29yCitkaXN0cmlidXRlIHRoZSBhcHBsaWNhYmxlIHVuZGVybHlpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cworcmVsYXRlZCB0byB0aGUgdGhpcmQgcGFydHkgdGVjaG5vbG9naWVzLiBUaGVzZSB0aGlyZCBwYXJ0eQordGVjaG5vbG9naWVzIGFyZSBub3QgbGljZW5zZWQgaGVyZXVuZGVyLgorCitJZiBZb3UgdXNlIHRoZSBTb2Z0d2FyZSAoaW4gd2hvbGUgb3IgaW4gcGFydCksIFlvdSBzaGFsbCBhZGhlcmUgdG8gYWxsCithcHBsaWNhYmxlIFUuUy4sIEV1cm9wZWFuLCBhbmQgb3RoZXIgZXhwb3J0IGxhd3MsIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIHRoZSBVLlMuIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBSZWd1bGF0aW9ucyAoIkVBUiIpLCAoMTUKK0MuRi5SLiBTZWN0aW9ucyA3MzAgdGhyb3VnaCA3NzQpLCBhbmQgRS5VLiBDb3VuY2lsIFJlZ3VsYXRpb24gKEVDKSBObworMTMzNC8yMDAwIG9mIDIyIEp1bmUgMjAwMC4gRnVydGhlciwgcHVyc3VhbnQgdG8gU2VjdGlvbiA3NDAuNiAgb2YgdGhlCitFQVIsIFlvdSBoZXJlYnkgY2VydGlmeSB0aGF0LCBleGNlcHQgcHVyc3VhbnQgdG8gYSBsaWNlbnNlIGdyYW50ZWQgYnkKK3RoZSBVbml0ZWQgU3RhdGVzIERlcGFydG1lbnQgb2YgQ29tbWVyY2UgQnVyZWF1IG9mIEluZHVzdHJ5IGFuZAorU2VjdXJpdHkgb3IgYXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCBwdXJzdWFudCB0byBhIExpY2Vuc2UgRXhjZXB0aW9uCit1bmRlciB0aGUgVS5TLiBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMgKCJFQVIiKSwgWW91IHdpbGwgbm90CisoMSkgZXhwb3J0LCByZS1leHBvcnQgb3IgcmVsZWFzZSB0byBhIG5hdGlvbmFsIG9mIGEgY291bnRyeSBpbiBDb3VudHJ5CitHcm91cHMgRDoxLCBFOjEgb3IgRToyIGFueSByZXN0cmljdGVkIHRlY2hub2xvZ3ksIHNvZnR3YXJlLCBvciBzb3VyY2UKK2NvZGUgWW91IHJlY2VpdmUgaGVyZXVuZGVyLCBvciAoMikgZXhwb3J0IHRvIENvdW50cnkgR3JvdXBzIEQ6MSwgRToxCitvciBFOjIgdGhlIGRpcmVjdCBwcm9kdWN0IG9mIHN1Y2ggdGVjaG5vbG9neSBvciBzb2Z0d2FyZSwgaWYgc3VjaAorZm9yZWlnbiBwcm9kdWNlZCBkaXJlY3QgcHJvZHVjdCBpcyBzdWJqZWN0IHRvIG5hdGlvbmFsIHNlY3VyaXR5Citjb250cm9scyBhcyBpZGVudGlmaWVkIG9uIHRoZSBDb21tZXJjZSBDb250cm9sIExpc3QgKGN1cnJlbnRseSBmb3VuZAoraW4gU3VwcGxlbWVudCAxIHRvIFBhcnQgNzc0IG9mIEVBUikuIEZvciB0aGUgbW9zdCBjdXJyZW50IENvdW50cnkKK0dyb3VwIGxpc3RpbmdzLCBvciBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgRUFSIG9yIFlvdXIKK29ibGlnYXRpb25zIHVuZGVyIHRob3NlIHJlZ3VsYXRpb25zLCBwbGVhc2UgcmVmZXIgdG8gdGhlIFUuUy4gQnVyZWF1CitvZiBJbmR1c3RyeSBhbmQgU2VjdXJpdHk/cyB3ZWJzaXRlIGF0IHR0cDovL3d3dy5iaXMuZG9jLmdvdi8uCmRpZmYgLS1naXQgYS9MSUNFTlNFLmRpYjA3MDAgYi9MSUNFTlNFLmRpYjA3MDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRiNmJkZQotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOU0UuZGliMDcwMApAQCAtMCwwICsxLDIyIEBACitGaXJtd2FyZSBwcm92aWRlZCBieSBQYXRyaWNrIEJvZXR0Y2hlciA8cGJvZXR0Y2hlckBkaWJjb20uZnI+IHRvIERldmluCitIZWl0bXVlbGxlciA8ZGhlaXRtdWVsbGVyQGtlcm5lbGxhYnMuY29tPiBvbiBPY3RvYmVyIDgsIDIwMDkuCisKK1RoZSBVU0IgZmlybXdhcmUgZmlsZSAiZHZiLXVzYi1kaWIwNzAwLjEuMjAuZnciIGZvciBEaUJjb20ncyBEaUIwNzAwLAordXNlZCB0b2dldGhlciB3aXRoIHRoZSBMaW51eCBkcml2ZXIgbW9kdWxlIGR2Yi11c2ItZGliMDcwMCwgaXMKK3Byb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zaW5nIHRlcm1zOgorCitDb3B5cmlnaHQgKGMpIDIwMDksIERpQmNvbQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvcgorYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUKK2Fib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMCitXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCitQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgorVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgorUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL0xJQ0VOU0UucmFkZW9uIGIvTElDRU5TRS5yYWRlb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQxODk0ZgotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOU0UucmFkZW9uCkBAIC0wLDAgKzEsNTEgQEAKK0NvcHlyaWdodCAoQykgMjAwOS0yMDEzICBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JFRElTVFJJQlVUSU9OOiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGFueSBsaWNlbnNlIGZlZXMsCit0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBtaWNyb2NvZGUgKHRoZSAiU29mdHdhcmUiKSwgdG8KK2luc3RhbGwsIHJlcHJvZHVjZSwgY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMsIGluIGJpbmFyeSBmb3JtIG9ubHksIG9mCit0aGUgU29mdHdhcmUgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIHByb3ZpZGVkIHRvCitkbyB0aGUgc2FtZSwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworTm8gcmV2ZXJzZSBlbmdpbmVlcmluZywgZGVjb21waWxhdGlvbiwgb3IgZGlzYXNzZW1ibHkgb2YgdGhpcyBTb2Z0d2FyZQoraXMgcGVybWl0dGVkLgorCitSZWRpc3RyaWJ1dGlvbnMgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBhbmQgbm90aWNlcyBpbiB0aGUKK1NvZnR3YXJlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorU29mdHdhcmUuCisKK0RJU0NMQUlNRVI6IFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIElTIEFUIFlPVVIgU09MRSBSSVNLLiAgVEhFIFNPRlRXQVJFCitJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5EIEFORCBDT1BZUklHSFQKK0hPTERFUiBBTkQgSVRTIExJQ0VOU09SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgQU5ECitJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KK0NPUFlSSUdIVCBIT0xERVIgQU5EIElUUyBMSUNFTlNPUlMgRE8gTk9UIFdBUlJBTlQgVEhBVCBUSEUgU09GVFdBUkUgV0lMTAorTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIEJFCitVTklOVEVSUlVQVEVEIE9SIEVSUk9SLUZSRUUuICBUSEUgRU5USVJFIFJJU0sgQVNTT0NJQVRFRCBXSVRIIFRIRSBVU0UgT0YKK1RIRSBTT0ZUV0FSRSBJUyBBU1NVTUVEIEJZIFlPVS4gIEZVUlRIRVJNT1JFLCBDT1BZUklHSFQgSE9MREVSIEFORCBJVFMKK0xJQ0VOU09SUyBETyBOT1QgV0FSUkFOVCBPUiBNQUtFIEFOWSBSRVBSRVNFTlRBVElPTlMgUkVHQVJESU5HIFRIRSBVU0UKK09SIFRIRSBSRVNVTFRTIE9GIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIElOIFRFUk1TIE9GIElUUyBDT1JSRUNUTkVTUywKK0FDQ1VSQUNZLCBSRUxJQUJJTElUWSwgQ1VSUkVOVE5FU1MsIE9SIE9USEVSV0lTRS4KKworRElTQ0xBSU1FUjogVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBJTkNMVURJTkcgTkVHTElHRU5DRSwgU0hBTEwgQ09QWVJJR0hUCitIT0xERVIgQU5EIElUUyBMSUNFTlNPUlMgT1IgSVRTIERJUkVDVE9SUywgT0ZGSUNFUlMsIEVNUExPWUVFUyBPUiBBR0VOVFMKKygiQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRVMiKSBCRSBMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBJTkRJUkVDVCwKK1NQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUworUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBBTkQgVEhFCitMSUtFKSBBUklTSU5HIE9VVCBPRiBUSEUgVVNFLCBNSVNVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUsCitCUkVBQ0ggT1IgREVGQVVMVCwgSU5DTFVESU5HIFRIT1NFIEFSSVNJTkcgRlJPTSBJTkZSSU5HRU1FTlQgT1IgQUxMRUdFRAorSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlQsIFRSQURFTUFSSywgQ09QWVJJR0hUIE9SIE9USEVSIElOVEVMTEVDVFVBTAorUFJPUEVSVFkgUklHSFQgRVZFTiBJRiBDT1BZUklHSFQgSE9MREVSIEFORCBJVFMgQVVUSE9SSVpFRAorUkVQUkVTRU5UQVRJVkVTIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gIElOCitOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSIE9SIElUUyBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFUyBUT1RBTAorTElBQklMSVRZIEZPUiBBTEwgREFNQUdFUywgTE9TU0VTLCBBTkQgQ0FVU0VTIE9GIEFDVElPTiAoV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSBPUiBPVEhFUldJU0UpIEVYQ0VFRCBUSEUgQU1PVU5UIE9GCitVUyQxMC4KKworTm90aWNlOiAgVGhlIFNvZnR3YXJlIGlzIHN1YmplY3QgdG8gVW5pdGVkIFN0YXRlcyBleHBvcnQgbGF3cyBhbmQKK3JlZ3VsYXRpb25zLiAgWW91IGFncmVlIHRvIGNvbXBseSB3aXRoIGFsbCBkb21lc3RpYyBhbmQgaW50ZXJuYXRpb25hbAorZXhwb3J0IGxhd3MgYW5kIHJlZ3VsYXRpb25zIHRoYXQgYXBwbHkgdG8gdGhlIFNvZnR3YXJlLCBpbmNsdWRpbmcgYnV0Citub3QgbGltaXRlZCB0byB0aGUgRXhwb3J0IEFkbWluaXN0cmF0aW9uIFJlZ3VsYXRpb25zIGFkbWluaXN0ZXJlZCBieSB0aGUKK1UuUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSBhbmQgSW50ZXJuYXRpb25hbCBUcmFmZmljIGluIEFybSBSZWd1bGF0aW9ucworYWRtaW5pc3RlcmVkIGJ5IHRoZSBVLlMuIERlcGFydG1lbnQgb2YgU3RhdGUuICBUaGVzZSBsYXdzIGluY2x1ZGUKK3Jlc3RyaWN0aW9ucyBvbiBkZXN0aW5hdGlvbnMsIGVuZCB1c2VycyBhbmQgZW5kIHVzZS4KZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxYTRlMgotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKKyMgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIEdOT01FIEJ1aWxkIEFQSToKKyMgaHR0cDovL3Blb3BsZS5nbm9tZS5vcmcvfndhbHRlcnMvZG9jcy9idWlsZC1hcGkudHh0CisKK0ZJUk1XQVJFRElSID0gL2xpYi9maXJtd2FyZQorCithbGw6CisKK2luc3RhbGw6CisJbWtkaXIgLXAgJChERVNURElSKSQoRklSTVdBUkVESVIpCisJY3AgLXIgKiAkKERFU1RESVIpJChGSVJNV0FSRURJUikKKwlybSAtZiAkKERFU1RESVIpL3VzYmR1eC8qZHV4ICQoREVTVERJUikvKi8qLmFzbQorCXJtICQoREVTVERJUikkKEZJUk1XQVJFRElSKS97V0hFTkNFLExJQ0VOU0UuKixMSUNFTkNFLip9CmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkNmQ3OQotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRQpAQCAtMCwwICsxLDM4IEBACisKKwlMaW51eCBmaXJtd2FyZQorCT09PT09PT09PT09PT09CisKKyAgPGh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9rZXJuZWwvZ2l0L2Zpcm13YXJlL2xpbnV4LWZpcm13YXJlLmdpdD4KKworICBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZmlybXdhcmUvbGludXgtZmlybXdhcmUuZ2l0CisKK1RoaXMgcmVwb3NpdG9yeSBjb250YWlucyBhbGwgdGhlc2UgZmlybXdhcmUgaW1hZ2VzIHdoaWNoIGhhdmUgYmVlbgorZXh0cmFjdGVkIGZyb20gb2xkZXIgZHJpdmVycywgYXMgd2VsbCB2YXJpb3VzIG5ldyBmaXJtd2FyZSBpbWFnZXMgd2hpY2gKK3dlIHdlcmUgbmV2ZXIgcGVybWl0dGVkIHRvIGluY2x1ZGUgaW4gYSBHUEwnZCB3b3JrLCBidXQgd2hpY2ggd2UgX2hhdmVfCitiZWVuIHBlcm1pdHRlZCB0byByZWRpc3RyaWJ1dGUgdW5kZXIgc2VwYXJhdGUgY292ZXIuCisKK1RvIHN1Ym1pdCBmaXJtd2FyZSB0byB0aGlzIHJlcG9zaXRvcnksIHBsZWFzZSBzZW5kIGVpdGhlciBhIGdpdCBiaW5hcnkKK2RpZmYgb3IgcHJlZmVyYWJseSBhIGdpdCBwdWxsIHJlcXVlc3QgdG86CisgICAgICBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgICAgICBCZW4gSHV0Y2hpbmdzIDxiZW5AZGVjYWRlbnQub3JnLnVrPgorYW5kIGFsc28gY2M6IHRvIHJlbGF0ZWQgbWFpbGluZyBsaXN0cy4KKworWW91ciBjb21taXQgc2hvdWxkIGluY2x1ZGUgYW4gdXBkYXRlIHRvIHRoZSBXSEVOQ0UgZmlsZSBjbGVhcmx5CitpZGVudGlmeWluZyB0aGUgbGljZW5jZSB1bmRlciB3aGljaCB0aGUgZmlybXdhcmUgaXMgYXZhaWxhYmxlLCBhbmQKK3RoYXQgaXQgaXMgcmVkaXN0cmlidXRhYmxlLiBJZiB0aGUgbGljZW5jZSBpcyBsb25nIGFuZCBpbnZvbHZlZCwgaXQncworcGVybWl0dGVkIHRvIGluY2x1ZGUgaXQgaW4gYSBzZXBhcmF0ZSBmaWxlIGFuZCByZWZlciB0byBpdCBmcm9tIHRoZQorV0hFTkNFIGZpbGUuCitBbmQgaWYgaXQgd2VyZSBwb3NzaWJsZSwgYSBjaGFuZ2Vsb2cgb2YgdGhlIGZpcm13YXJlIGl0c2VsZi4KKworSWRlYWxseSwgeW91ciBjb21taXQgc2hvdWxkIGNvbnRhaW4gYSBTaWduZWQtT2ZmLUJ5OiBmcm9tIHNvbWVvbmUKK2F1dGhvcml0YXRpdmUgb24gdGhlIGxpY2Vuc2luZyBvZiB0aGUgZmlybXdhcmUgaW4gcXVlc3Rpb24gKGkuZS4gZnJvbQord2l0aGluIHRoZSBjb21wYW55IHRoYXQgb3ducyB0aGUgY29kZSkuCisKKworV0FSTklORzoKKz09PT09PT0KKworRG9uJ3Qgc2VuZCBhbnkgIkNPTkZJREVOVElBTElUWSBTVEFURU1FTlQiIGluIHlvdXIgZS1tYWlsLCBwYXRjaCBvcgorcmVxdWVzdC4gT3RoZXJ3aXNlIHlvdXIgZmlybXdhcmUgX3dpbGwgbmV2ZXIgYmUgYWNjZXB0ZWRfLgorCitNYWludGFpbmVycyBhcmUgcmVhbGx5IGJ1c3ksIHNvIGRvbid0IGV4cGVjdCBhIHByb21wdCByZXBseS4KZGlmZiAtLWdpdCBhL1JUTDgxOTJFL2Jvb3QuaW1nIGIvUlRMODE5MkUvYm9vdC5pbWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5OThiYgotLS0gL2Rldi9udWxsCisrKyBiL1JUTDgxOTJFL2Jvb3QuaW1nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1JUTDgxOTJFL2RhdGEuaW1nIGIvUlRMODE5MkUvZGF0YS5pbWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhYmM0YQotLS0gL2Rldi9udWxsCisrKyBiL1JUTDgxOTJFL2RhdGEuaW1nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1JUTDgxOTJFL21haW4uaW1nIGIvUlRMODE5MkUvbWFpbi5pbWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwM2FmZAotLS0gL2Rldi9udWxsCisrKyBiL1JUTDgxOTJFL21haW4uaW1nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1REQTc3MDZfT01fdjIuNS4xX2Jvb3QudHh0IGIvVERBNzcwNl9PTV92Mi41LjFfYm9vdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyMDM3MgotLS0gL2Rldi9udWxsCisrKyBiL1REQTc3MDZfT01fdjIuNS4xX2Jvb3QudHh0CkBAIC0wLDAgKzEsNTYgQEAKKzAxQUIwMCwwMDAwMDEwMCw4QQorMDFDMDAwLEZCODAxMDAwLEZCQzhBQTAwLEZCOTVBRTAwLEZCOTYxNjAwLEZCQzkxQTAwLEZGRjcwMDAwLEZGRjcwMDAwLEZGRjcwMDAwLEUxRkZFMDFCLDkwMDA3MDUzLDkyMDA1MDZCLDkyMDA5MDFGLEZCMjcwMDAwLEZGRTYwMjk4LEZCODAyMjAwLDhBCiswMUMwMTEsRTBGRkUwMDAsRTQwMDAwMDAsQzA0MEEwMjAsRkIyNzAyNDMsQzAwMDI0NjgsNEUyMjQwMDAsRkZGNzAwMDAsRDgwMDAwMjAsRkIxMDIyNDMsNkM2MjAwMDAsQzRBN0UwMjAsQzAwM0YwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkIxMDIwMDAsRkI5NUEwNDAsQzAwQjYwMjAsOTA3RkUwMDAsQzA4MDAwMjAsRkMwNDAyNDMsNEM2NzAwMDAsOTQwMTQwMDAsQzAwMDIwMjAsOTQ3QkMwMUIsOTAwMUMwMDAsQTgwMDQwMDAsODExRDYwMDAsQTAwMUMwMUIsRkMwNDAwNjUsRkI4MDY0MDYsRkI4MDVBMDEsRkZGNzAwMDAsQTAwMUMwNkIsOTA4NzgwMUIsOTAwMUMwMDAsRkIxMDIwMDAsRkI4NkVDNDAsRTEwODQwMDAsQTAwMTAwMDAsNEZBNzAwMDAsQTAwMTgwMDAsQTQ3RkMwMDAsNDBBNzA0MDUsQTAwMUEwMzMsQUM4RUY0MDUsNDBBNzE5MzcsRkIxMDI5QTQsNDRBNzEwMjQsNjRBNzAwMDAsRkI4OUMyNDAsRkIxMDIwMDAsRkJDQ0I0NDAsRkIxMDIwMDAsRkJDNzI4NDAsRkIxMDIwMDAsRkJDNDFBNDAsQTAwMjIwMDAsRkIxMDIwMjUsQzAwOUQwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkIxMDIwMDAsRkJDOUQ4NDAsRkIxMDIwMDAsRkJGQjkwNDAsRkIxMDIwMDAsRkJGRUYyNDAsRkIxMDIwMDAsRkJDQTY2NDAsRkIxMDIwMDAsRkJDQTRFNDAsQTI3RkUwMDAsRkMwNDAwMjYsRkI4MDAxMDAsRkIxMDIwMDAsRkI4MkE2NDAsRkIxMDIwMDAsRkJGQzJFNDAsRkIxMDIwMDAsRkJGRjBBNDAsQTIwODQwMDAsQzAwQ0MwMjAsRkI4MTQ4MDEsODI2NTgwMDAsOTA3RkUwMDAsQUM4NTQwMDAsRkIxMDIwMjEsQzAwRDcwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkIxMDIwMDAsRkJDRkJBNDAsRkI4MTQ4MDEsQzAwRTAwMjAsOTA3RkUwMDAsQTA0MjAwMDAsRkZBODA0ODcsRkI4MEVBMDQsRkIxMDIwMDAsRkJFMTY2NDAsRkIxMDIwMDAsRkJGRjBBNDAsQTIwODQwMDAsQzAwRjgwMjAsRkI4MTQ4MDEsODI2NTgwMDAsOTA3RkUwMDAsRkIxMDIwMDAsRkJDRkJBNDAsRkIxMDIwMDAsRkI4QzUyNDAsRkI4MTQ4MDEsQzAxMDYwMjAsOTA3RkUwMDAsRkIxMDIwMDAsRkJGQzJFNDAsRkIxMDIwMDAsRkJGRjBBNDAsQTIwODQwMDAsQzAxMTgwMjAsRkI4MTQ4MDEsODI2NTgwMDAsOTA3RkUwMDAsRkIxMDIwMDAsRkJDRkJBNDAsRkI4MTQ4MDEsQzAxMjIwMjAsOTA3RkUwMDAsQTA0MjAwMDAsRkZBODA0ODcsRkI4MTJDMDQsRkIxMDIwMDAsRkJFMTY2NDAsRkIxMDIwMDAsRkJGRjBBNDAsQTIwODQwMDAsQzAxM0EwMjAsRkI4MTQ4MDEsODI2NTgwMDAsOTA3RkUwMDAsRkIxMDIwMDAsRkJDRkJBNDAsRkIxMDIwMDAsRkI5MDVDNDAsRkI4MTQ4MDEsQzAwQjYwMjAsOTA3RkUwMDAsRkI4MDU4MDAsRkYyNzAwMDAsRkZGNzAwMDAsRkZGNzAwMDAsQTAwMUUwMDAsRTAzRTAwMDAsNDgyNzAyMjUsRkMwNDAwMzMsRkMwNDA0QzYsRkI4MTYyMEIsRTQyQjQwMDAsNEUwMDIwMDAsNEUyNTAwMDAsNEUxMEE5MjUsNEUwMDRDMDYsRkMwNDA0ODIsNDQwMDY5MDAsNEUwMDg0MDEsRkMwNDAwMzMsNEM2NzAwMDAsRkMwNDAwNzUsQzAwMDI0MDgsQzAwMEYwMjAsN0M2NzAwMDAsRkMwNDAwNDYsRkMwNDA1MDYsRkMwNDAwMzMsRkMwNDAwNDksRkMwNDAwNDIsMDg2NzEwMUYsOTNFMDAwMDAsOTFGMDAwMDAsREUwQUMwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4MTkwMDYsRkI4MDAwODAsRTQwRUMwMDAsRTAxMDAwMDAsNDgwMDIwMDAsNEUwMDQ4MDAsQTAyMjQwMjQsRkMwNDA5MDAsRkMwNDAyMjQsRkMwNDAwMzMsRkZBODA0ODAsRkI4MUIyMDQsRkI4MUI0MDEsRkZGNzAwMDAsNEUwMEMwMDAsNEUyNTAwMDAsMDA2NzA5MDAsRkMwNDA4MjQsRkMwNDA0MDYsRkMwNDE0ODIsRkMwNDAwMzcsRkI4MDAwODEsMDg2NzAwMDAsMDhBNzAwMDAsRkIxMDIwMDAsRkI5NjNFNDAsRkIxMDIwMDAsRkJEQjlDNDAsRkNBNDAwM0YsQTAwRkUwMDAsRkM0MDAwMDAsRkQyMDAwNDAsRkZGNzAwMDAsRkQyMDAwNDAsRkZGNzAwMDAsRjAwMDIwMDAsRkZDMDAwMTcsQzAxMDE0MTQsRTQxMzgwMUIsNDhBNTQwMDAsNDhBNTQ4MDAsRkUyNzAwMUEsNDhBNTRDMDYsRkUyNzAwMUQsNDhBNTZDMDYsRkM1ODBDMDYsRTQxMzg0MDIsNEUyNTQwMTMsRkMwNDAyOEIsOTAxMzkwMUYsNDhBNzAwMDAsNDhBNTQ4MDAsRkUyNzAwMUEsNDhBNTVDMDcsRkUyNzAwMUQsNDhBNTdDMDcsRkMwNDFDMDcsRkMwNDE0MDMsRkMwNDEwMTcsRkMwNDEyOEYsOTIxM0EwMDAsRkQyODAwMDAsRkZGNzAwMDAsRTEwQjAwMDAsQTAwMTAwMDAsNEZBNzAwMDAsNDQyNzAwMDAsRTEwQjIwMDAsQTAwMTAwMDAsNEZBNzAwMDAsNjQyNzAwMDAsRTEwN0MwMDAsQTAwMTAwMDAsNEZBNzAwMDAsNDgyNzAwMDAsODAxNDIwMDAsRTEwN0UwMDAsQTAwMTAwMDAsNEZBNzAwMDAsNDgyNzAwMDAsQUMxN0UwMDAsQTIxNEE4MDAsODAxNDgwMjYsRkIxMDJDODYsRkMwNDA0ODIsOTAxNEEwMDAsRkI4MjcwNDAsRkI4MDAwODAsRkIxMDIwMDAsRkJERDM2NDAsRTAxM0MwMDAsRTQxNzgwMDAsNEUyNTAwMDAsQTAxNDYwMDAsNDgyNzA4MDAsRkMwNDAwMjUsNEUwMDJDMDYsRkMwNDA0ODIsNDQyNzA5MDAsMDA2NzAwMDAsRkMwNDAwMjUsNEUwMDJDMDYsRkMwNDA0ODIsMDg2NzA5MDAsMDBBNzAwMDAsRkMwNDAwMjUsRkMwNDBDMDYsRkI4MDAwODEsRkMwNDA0ODIsMDhBNzAwMDAsRTAxNDIwMDAsMjA2NzAwMDAsNDgyNzAwMjYsRkMwNDA0NDYsRkMwNDEwMjUsRkI4MjkyMkIsRkZGNzAwMDAsMjg2NzAwMDAsQzAwMDA0QzgsRkI4MjhFMEQsRkZGNzAwMDAsQUM3QkEwMDAsRkI4MjkyMDEsRkMwNDA0MDksRkMwNDA0MDksRkMwNDA0NDksRkMwNDA0NDksQUMxODAwMDAsQUMxODI5MDAsRkMwNDAwNzQsQzAwMDI0MDgsRkMwNDAwNDEsRkMwNDA1MDIsRkMwNDAwMzMsRkI4MDAwODEsRkMwNDAwRkIsMDhBNzAwMDAsQTA0MjIwMDAsRTQ4NDIwNjUsRkI4MzBFMDcsRTA3REMwMDAsNEUwMDQwMDAsNEEyNzAwMDAsRkM0NDAwMDAsNTgxMDIwMDAsMjBFNzA4MDAsRkMwNDAwNzQsQzAwMDI0MDgsRkMwNDAwNDIsRkMwNDA1MDIsRkMwNDAwMzMsNDQyNjIwMDAsNEUwMDY4ODAsRkMwNDAwMjQsMDg2NzEwM0IsRkMwNDA0Q0QsRkI4MkQwMEEsRkMwNDAwMUIsMDhBNzAwMDAsQTA1NEUwMDAsRkZBODA0ODAsRkI4MkRFMDcsRkZGNzAwMDAsMjE0MEEwMDAsRkMwNDAwRkIsMDE4MDk5MjYsRTI3RTkwMkQsNEM0MEREMDcsMjk2NzAwNzQsNzYyNzAwMDAsQzAwMDI0MDgsQzAwMTEwMjAsNUM2NzAwMDAsMDE2NzAwNDUsRkMwNDA1MDIsRkMwNDAwMzMsMDkyNzA0MDYsNEMyNzAwMzMsMDFFNjAwMDAsRkMwNDA5MDAsRkMwNDAwMjQsMDlFNjIwMDAsRkMwNDA0RTUsRkI4MzBFMDQsQUM4NTAwMDAsRkIxMDIwMjEsQzAzMEYwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkI4MDAwODAsQTA3RUEwMDAsODA3RjQwMDAsRkIxMDIwMDAsRkI4RDYwNDAsQTA3RjYwMDAsQTI3RjgwMDAsQzAwMjQ1MDQsQUM0MTYwMDAsNEM2NzAzQUUsQUM0MzI0MjksQTA3Rjg0NjYsRkMwNDA0QzUsRkI4MzJDMDQsRkZBODAxMTcsOTA0MDYwMDAsOTA0ODYwMDAsQzAwMDYwMjAsOTA0ODQwMDAsQTA3MTQwMDAsRkIxMDIwMjUsQzAzM0YwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkI4MDAwODAsRTQ3QUUwMDAsRTA3RTIwMDAsNEUyNTAwMDAsQTAwODQwMDAsQTAzNjY4MDAsNEUwMDIwMDAsNEUwMDQ0MDEsNDQwMDY4MDAsNDgwMDg0MDEsNDQyNzAwNzUsQzAwMDI0MDgsQzAwMUYwMjAsN0M2NzAwMDAsRkMwNDAwNDYsQTAwMDY1MDYsRkMwNDAwMzMsNDgyNzAwNEQsNDQyNzAwNzUsQzAwMDI0MDgsQzAwMEIwMjAsN0M2NzAwMDAsRkMwNDAwNDYsNDgyNzA1MDYsRkMwNDAwMzMsRkMwNDAwNDksNEUyNjIwMDAsRkMwNDA4MDAsRkI4MDAwODEsRkMwNDAwMjQsNDQyNzAwMDAsRTQ3QUUwMDAsRTA3RTIwMDAsNEUyNTAwMDAsQTAyQzQwMDAsQTAyRjI4MDAsNEUwMDIwMDAsNEUwMDQ0MDEsNDQwMDY4MDAsNDgwMDg0MDEsNDQyNzAwNzUsQzAwMDI0MDgsQzAwMTMwMjAsN0M2NzAwMDAsRkMwNDAwNDYsQTAwMDY1MDYsRkMwNDAwMzMsNDgyNzAwNEQsNDQyNzAwNzUsQzAwMDI0MDgsQzAwMEIwMjAsN0M2NzAwMDAsRkMwNDAwNDYsNDgyNzA1MDYsRkMwNDAwMzMsRkMwNDAwNDksNEUyNjIwMDAsRkMwNDA4MDAsRkI4MDAwODEsRkMwNDAwMjQsNDQyNzAwMDAsRTQ3QUUwMDAsNEUyNTAwMDAsQTAxNEEwMDAsNEUwMDI4MDAsRkMwNDA0MDEsNEM2NzAwMDAsRkMwNDAwNzUsQzAwMDI0MDgsQzAwMTMwMjAsN0M2NzAwMDAsRkMwNDAwNDYsQTAwMDY1MDYsRkMwNDAwMzMsRkI4MDAwODEsRTA3RTIwNEQsNDQyNzAwMDAsRTA3REUwMUIsRkUyNzAwMDQsNDRBNzAwMDAsRkI4MDAwODAsQTA1RTgwMDAsQzAwMDgwMjAsRkMwNDEwMjUsRkMwNDA0QzYsRkI4M0VDMDgsRkMwNDEwMjMsQzAzNjAwMjAsRkMwNDAyNDMsOTI1RTYwMDAsNkM2NzEyMEYsRkMwNDAwNkIsRkMwNDA0MEIsRkMwNDEyMkQsQTA2NUU0MEIsRkZBODA0ODIsRkI4NDAyMDQsRkZBODAxMEIsQUM3N0MwMDAsNTQyNzAwMjEsQzA0MEYwMjAsRkIxMDIwMDAsRkE0ODAwMDAsRkI4MDAxMDAsQTA1RUIwMUYsRkM0MDAwMDAsQTA1RTYwMDAsRkMwNDAyMEQsRjAxRDYwNkIsNDhBNzAwMDAsRkMwNDE0MDcsRkMwNDAwNTMsRkI4NDE4MDYsRkI4MDAwODEsNUM2NzAwMDAsNDAyNzAwMDAsQzQwMDAwMjAsRkMwNDAyMjMsNTQyNzAwMDAsMDA2NzAwMDAsRkMwNDAwNjUsRkI4NDNBMDYsODA3RUUwMDAsRkIxMDIwMDAsRkI4ODcwNDAsRkI4NDQwMDAsODA3RUUwMDAsRkIxMDIwMDAsRkI4ODk0NDAsRkI4MDAwODAsQzBDMDAwMjAsRkMwNDAyMjMsNTQyNzAwMDAsMDA2NzAwMDAsRkMwNDAwNjUsRkI4NTA0MDYsQTgwMTQwMDAsRkZBODAwOTIsOTQwMTQwMDAsQzAyODAwMjAsRkMwNDAyNDMsQzAwMDY0NjgsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NDVDMDYsQTFFMDAwMDAsQUM4RjYwMDAsRkMwNDA0MjUsOTFFMDAwMDAsQzAyODAwMjAsRkMwNDAyNDMsQzAwMDY0NjgsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NDcyMDYsRDYwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NDgwMDYsQTFFMDAwMDAsRkZBODAyOEMsOTFFMDAwMDAsRDYwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NDk0MDYsRDQwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NEEyMDYsQTFFMDAwMDAsRkZBODAwODQsOTFFMDAwMDAsRDQwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NEI2MDYsQzAyODAwMjAsRkMwNDAyNDMsQzAwMEE0NjgsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NEM0MDYsQTFFMDAwMDAsRkZBODAyOEQsOTFFMDAwMDAsQzAyODAwMjAsRkMwNDAyNDMsQzAwMEE0NjgsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NEQ4MDYsQzAyODAwMjAsRkMwNDAyNDMsQzAwMDI0NjgsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NEU2MDYsQTFGMDAwMDAsQUM4RjIwMDAsRkMwNDA0MjUsOTFGMDAwMDAsQzAyODAwMjAsRkMwNDAyNDMsQzAwMDI0NjgsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NEZDMDYsRkI4NUZBMDAsQzAwMDI0QzQsRkI4NTE2MDYsQTgwMTQwMDAsRkZBODAyOTEsRkZBODA0OTIsRkI4NTRDMDcsRkZBODAzMTIsOTQwMTQwMDAsRkI4NUZBMDAsQzAwMDQ0QzQsRkI4NTI4MDYsQTgwMTQwMDAsRkZBODAwOTEsRkZBODA0OTIsRkI4NTRDMDcsRkZBODAzMTIsOTQwMTQwMDAsRkI4NUZBMDAsQzAwMDY0QzQsRkI4NTNBMDYsRjAwMDQwMDAsNEUyNDQwMDAsRTQ4MjQwMDAsNEUyMDQwMDAsRkI4NUZBMDEsNEUyNDAwMDAsNEUyMDAwMDAsQzAwMDg0QzQsRkI4NTRBMDYsRjAwMDQwMDAsRTQ4MjgwMDAsNEUyNDQwMDAsNEUyMDQwMDAsNEUyNDAwMDAsNEUyMDAwMDAsRkI4NUZBMDAsQzAyODAwMjAsRkMwNDAyNDMsQzAwMDI0NjgsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NTU0MDYsQTFGMDAwMDAsQUM4RjAwMDAsRkMwNDA0NjUsOTFGMDAwMDAsQzAyODAwMjAsRkMwNDAyNDMsQzAwMDI0NjgsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NTZBMDYsRDYwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NTc4MDYsQTFFMDAwMDAsRkZBODAwOEMsOTFFMDAwMDAsRDYwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NThDMDYsRDQwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NTlBMDYsQTFFMDAwMDAsRkZBODAyODQsOTFFMDAwMDAsRDQwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NUFFMDYsQzAyODAwMjAsRkMwNDAyNDMsQzAwMDY0NjgsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NUJDMDYsQTFFMDAwMDAsQUM4RjQwMDAsRkMwNDA0NjUsOTFFMDAwMDAsQzAyODAwMjAsRkMwNDAyNDMsQzAwMDY0NjgsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NUQyMDYsQzAyODAwMjAsRkMwNDAyNDMsQzAwMEE0NjgsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NUUwMDYsQTFFMDAwMDAsRkZBODAwOEQsOTFFMDAwMDAsQzAyODAwMjAsRkMwNDAyNDMsQzAwMEE0NjgsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NUY0MDYsRkI4MDAwODAsQzQyMDAwMjAsRkMwNDAyMjMsNTQyNzAwMDAsMDA2NzAwMDAsQzAwMDI0QzQsRkI4NjEyMDYsQ0MwMDAwMjAsRkMwNDAyNDMsRkI4NjM2MDEsNEM2NjIwMDAsQzIwQjQwMjAsQzAwMDQ0QzQsRkI4NjIwMDYsQ0UwMDAwMjAsRkMwNDAyNDMsRkI4NjM2MDEsNEM2NjIwMDAsQzAxMjYwMjAsQzAwMDY0QzQsRkI4NjJFMDYsQzgwMDAwMjAsRkMwNDAyNDMsRkI4NjM2MDEsNEM2NjIwMDAsQzAwODAwMjAsQ0EwMDAwMjAsRkMwNDAyNDMsNEM2NjIwMDAsQzIxMDQwMjAsNEUzNjIwMDAsQzAyODAwMjAsRkMwNDAyNDMsQzAwMDg0NjgsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NjQwMDYsQTFFMDAwMDAsRDFGRkYwMjAsRkMwNDEyNDcsQzAxRkY0NkMsRkMwNDE0MjcsRkMwNDE0NkQsOTNFMDAwMDAsOTFDMDAwNkIsQTFDMDAwMDAsRkZBODA0ODAsRkI4NjU2MDYsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NjVFMDYsQTFFMDAwMDAsRDAwMDEwMjAsRDI0MDE0NEMsN0M2NzE0MjcsRkMwNDE0N0YsOTNFMDAwMDAsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NjcyMDYsRDYwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4NjgwMDYsQTNFMDAwMDAsRkZBODAyRUMsOTNFMDAwMDAsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4NjhFMDYsODNFMDAwMDAsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4Njk4MDYsRkI4MDAwODAsMDBBNzAwMUIsMjA2NjAwNkIsRkMwNDA0MDYsRkMwNDA0MDYsNTRBNzE0MUUsNEUyRTMwMjYsOTNEMDEwNkYsQTFEMDAwMDAsRkZBODA0ODAsRkI4NkFFMDYsQTFGMDAwMDAsNTBBNzA0MDYsQTFFMDAwMDAsRkMwNDA0MDYsRkMwNDA0Q0QsRkI4NkFDMDksRkZGNzAwMDAsNTBBNzAwMDAsRkI4MDAwODEsNEM2NzAwMDAsNTAyNzAwMDAsQzAwNjAwMjAsNjhBNzAyNDMsNTQyNzAwMDAsNjhBNzAwMDAsQTA1RUMwMjYsRkMwNDEzOEQsNjhBNzEwNTcsODNGMDAwMDAsNjhBNzAwMDAsODNFMDAwMDAsOTFDMDAwNkIsQTFDMDAwMDAsRkZBODA0ODAsRkI4NkUwMDYsQzAwMDI0Q0MsRkI4NkQ2MEUsRkI4MDAwODAsQTA1RUEwMUIsQTI1RUMwMDAsQTI1RUYwMjYsRkMwNDAwNjYsRkI4NzQwMDcsRkZGNzAwMDAsRkM0MDAwMDAsRkMwNDAwNjUsRkI4NzU4MDQsNjhBNzAwMDAsRkMwNDA0MTYsNEUyNjMwNTcsQzAwMDA0Q0MsRkI4NzAwMEYsRkZGNzAwMDAsNjhBNzAwMDAsRkM0NDA0REUsRkI4NzIyMDUsRkM0MDAwMDAsRjIxRDYwMDAsQzA4MDAwMjAsRkMwNDAyNDMsRTAwMDAwMDAsNEM2NzAwMDAsRkI4NzU4MDEsNTQyNzAwMDAsRTg1RUEwMDAsNjgyNzAwMDAsRkIxMDIzRTYsQzAwN0YwMjAsRTA1RjA0MkIsQzAwNDEwMjAsRkMwNDAwNDcsRkM3MDAwMDAsNjgyNzAwMDAsRkM0MDAwMjYsQzA3M0IwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRTAwMDAwMDAsRTg1RUEwMDAsRkI4NzU4MDAsRkMwNDEwNTYsRkMwNDAwNjcsRkI4NzU4MDcsRkZGNzAwMDAsOTI1RUUwMDAsRTEzRDYwMDAsRTMxRDYwMDAsRjgxRDU4MDksNjhBNzAwMDAsNzBBNzAwMDAsNjhBNzAwMDAsNzBBNzAwMDAsRkI4MDAwODAsMjA2NzAwMDAsQzAwM0UwMjAsMDBFNzEzRTYsRkMwNDE0MkUsQzAwM0E0Q0MsRkI4NzdFMDksMjBCRTAwMDAsNEUyNDAwMDAsRTMyMDAwMDAsRjgxREQwMDksNDhBNzAwMDAsNTBBNzAwMDAsNDhBNzAwMDAsNTBBNzAwMDAsQzAwMDQwMjAsRkI4N0E0MDEsOTA1RUUwMDAsOTE0MDAwMDAsQzAyN0UwMjAsNUMyNzAyNjMsQTI1RUM0MjksNTRBNzAwMjYsQzAwMzQ0Q0MsRkI4NzlBMDcsRkM0NjQwMDAsRjAwMDQwMDAsRkMwNDAwNTMsQzAwMDQ0QzgsRkI4NzhFMEYsNjhBNzAwMDAsNzBBNzAwMDAsRkI4N0E0MDAsNjhBNzAwNTMsQzAwMDQ0QzgsRkI4NzlBMEYsNEUyRTAwMDAsNEUyMDQwMDAsRkI4MDAwODAsQzA3RTAwMjAsNDgyNzAyNDMsNkM2NzAwMDAsRkMwNDEwMjYsRkMwNDA0MjcsRkMwNDAzRTMsQzAwNDA0QzgsRkI4N0JDMDYsRkIxMDIwMDAsRkI4NDI2NDAsRkI4N0QwMDAsQzAwNDI0QzgsRkI4N0M2MDYsRkIxMDIwMDAsRkI4NUZDNDAsRkI4N0QwMDAsQzEwMDAwMjAsRkMwNDAyNDMsNkM2NzE0MjcsRkMwNDE0MEUsNzQyNzAwMDAsRkI4MDAwODAsQTA3RUMwMDAsQUM4NUEwMDAsRTA2N0U0QzUsRkI4N0UyMEIsRTI2NjAwMDAsRTQ2MDIwMDAsRkIxMDIwMDAsRkJCRkRDNDAsQTA2Q0EwMDAsRkI4MDAwODEsRkMwNDAwMjUsNTQyNzAwMDAsQTA3RUMwMDAsQUM4NjYwMDAsRTA2N0U0QzUsRkI4N0ZBMEIsRTI2NjAwMDAsRTQ2OTAwMDAsRkIxMDIwMDAsRkJDMkE0NDAsQTA2RTAwMDAsRkI4MDAwODEsRkMwNDAwMjUsNTQyNzAwMDAsRTI2NjAwMDAsMTBFNzAwMDAsQUM4NjQwMDAsRkMwNDA0QzUsRkI4ODE0MEQsRTA2N0UwMDAsRTQ2N0MwMDAsRkIxMDIwMDAsRkJDMjU4NDAsQTA2REUwMDAsRkI4MDAwODEsRkMwNDAwMjUsNTQyNzAwMDAsQTAwMUUwMDAsQUM4NUMwMDAsRkMwNDA0QzUsRkI4ODVBMEQsRkZGNzAwMDAsRTA2N0UwMDAsMDE2NzAwMDAsQUM4NUUwMDAsRkMwNDA0QzUsRkI4ODVBMEEsMDIyNzAwMDAsQUM4NjAwMDAsRkMwNDA0QzUsRkI4ODVBMEEsQTA2NjYwMDAsQUM4NjIwMDAsRkMwNDA0QzUsRkI4ODVBMEMsMDJBNzAwMDAsQzAwMkM0QzQsRkI4ODVBMEEsRkMwNDAwMUIsMEE2NzAwMDAsQzAwMkMwMjAsMEFBNzAwMDAsRDAwMDAwMjAsRDAwMDI0NDgsNEM2NzAwMDAsMEFFNzAwMDAsQzAwMzYwMjAsMEJFNzAwMDAsRkI4MDAwODEsQTA2QzIwMDAsODA2NjAwMDAsQTA3RUMwMDAsQTQ2ODgwMDAsQTIwMUU4MDAsRkMwNDAyQTYsRkMwNDA0ODIsRkI4MDAwODEsRkMwNDA0MDYsOTA3RUMwMDAsQzAxQzEwMjAsRkMwNDEyNDcsOTNEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4ODc2MDYsQTFFMDAwMDAsRkZBODAyODQsQTFGMDAwMDAsOTFFMDAwMDAsRkZBODAyOTAsRkZBODAzMTQsOTFGMDAwMDAsOTNDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4ODhDMDYsRkI4MDAwODAsQzAxQzEwMjAsRkMwNDEyNDcsOTNEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4ODlBMDYsQTFFMDAwMDAsRkZBODAwODQsQTFGMDAwMDAsOTFFMDAwMDAsRkZBODAwOTAsRkZBODAxMTQsOTFGMDAwMDAsOTNDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4OEIwMDYsRkI4MDAwODAsQTA4NjAwMDAsRkMwNDAwNjUsRkI4OEQyMDQsQUM4OTIwMDAsRkIxMDIwMjEsQzA4QzkwMjAsRkE0ODAwMDAsRkI4MDAxMDAsQUM4OTQwMDAsRkIxMDIwMjEsQzA4RDMwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkI4MDAwODAsQTAwMTAwMDAsRTA4NjAwMDAsRTMwNzIwMDAsNUZBNzAwMDAsNzgyNzAwMDAsMDBFNzEyNDYsN0M2NzAwMjUsRkMwNDA0RDYsRkI4OEVDMEQsRTQ4NjgwMDAsNEUwMDIwMDAsNEUyNTAwMDAsRkMwNDA4ODAsMDEyNzBDMDYsRkMwNDA0ODIsMDhFNzAwMjUsRkMwNDEwMjYsMjhBNzAwMDAsQTI1N0UwMDAsRkMwNDA0RDYsRkI4OTA0MEQsRkZGNzAwMDAsNEUwMEEwMDAsNEUwMDgwMDAsQUU4OTA4ODAsNEUwMENDMDYsRkMwNDA0ODIsMDkyNzAwMzMsNEM2NzAwMDAsNEUwMEU4MDAsNEUwMTA0MDEsRkMwNDAwMzMsNEM2NzAwMDAsRkMwNDAwNzUsQzAwMDI0MDgsQzAwMEQwMjAsN0M2NzAwMDAsRkMwNDAwNDYsMDBFNzA1MDYsRkMwNDAwMzMsNEUwMTIwNDksNEUwMDQwNDEsRkMwNDA4MzMsNEM2NzEyMEMsMDk2NjEwMzcsMDFDMDY5ODAsRkMwNDAwMjQsRkMwNDAwNDksRkMwNDA0REQsRkI4OTNFMEYsRkZGNzAwMDAsMjJBNzAwMDAsRkMwNDAwMjEsMDBBNzEwMUYsMDlBNzA0QzYsRkI4OTUwMEIsNEUwMTQwMDAsQUU4OEUwMDAsRkMwNDA0REQsRkI4OTUyMEMsRkMwNDEwMjEsRkI4OTUyMDAsRkMwNDEwNTYsQTAwMDYwMDAsRkMwNDEwNEQsMkFBNzAwMDAsQTAwMDgwMDAsRkI4MDAwODEsRkMwNDEwNDUsMkFFNzAwMDAsRTA4NjAwMDAsMDFFNzAwMDAsQTIwRDYwMjUsRkMwNDA0RDYsRkI4OTcwMEQsRTQ4N0UwMDAsNEUwMDIwMDAsNEUyNTAwMDAsNEUxMEU4ODAsNEUwMDRDMDYsRkMwNDA0ODIsNEM2NzAwMDAsMDlDMDY4MDAsNEUwMDg0MDEsRkMwNDAwMzMsNEM2NzAwMDAsRkMwNDAwNzUsQzAwMDI0MDgsQzAwMEQwMjAsN0M2NzAwMDAsRkMwNDAwNDYsRkMwNDA1MDYsRkMwNDAwMzMsNEUwMEEwNDksNEUwMEMwNDEsMEEyNzAwRkIsQTAyRjI0MDksRkMwNDEwMUYsRkMwNDA0REQsRkI4OUEyMEIsRkZGNzAwMDAsQUMwMEEwMDAsRkMwNDEwMjEsRkMwNDA0MEIsMEE2NzAwMDAsMDFBNzAwMDAsMDI2NzAzQzUsRkMwNDAyNDMsQzAwMjE1NjQsODFFMDA0MEIsOTFGMDAwMDAsRENBMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4OUJBMDYsRkI4MDAwODAsQTAwMEUwMDAsQTQwMEMwMDAsRkMwNDA0QzUsRkI4OUZFMDQsRTQ4MDgwMDAsNEUyN0MwMDAsNEUzNTAwMDAsQjgwMEUwMjIsQzA5REIwMjAsRkIxMDIwMDAsRkE0ODAwMDAsRkI4MDAxMDAsRDQwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsQTgwMTQwMDAsOTFEMDAwMDAsQTNEMDAwMDAsRkZBODA0QzAsRkI4OUU0MDYsRkZBODA0ODEsRkI4OUY0MDUsQTNFMDAwMDAsRkZBODAyRTYsRkZBODAxRTYsOTNFMDAwMDAsOTFDMDAwMDAsQTNDMDAwMDAsRkZBODA0QzAsRkI4OUY4MDYsRkI4MDAwODAsQTA4RTAwMDAsRkMwNDAwNjUsRkI4QTQ2MDQsQTA4RTIwMDAsRkIxMDIwMjUsQzBBMTEwMjAsRkE0ODAwMDAsRkI4MDAxMDAsQTA4RjYwMDAsQTA4RjgwMjUsQTA4NzcwMjUsRkMwNDAwNjUsRkI4QTIyMDUsRkZGNzAwMDAsQUMwMEEwMDAsRkMwNDAwMjEsRkMwNDEwMjEsOTA4RjYwMDAsOTI4RjgwMDAsOTFGMDAwMDAsREUwOTgwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4QTMwMDYsOTNGMDAwMDAsREUwOUEwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4QTQwMDYsRkI4MDAwODAsRTA4RTIwMDAsMDBBNzAwMDAsMjA2NzAwMjUsRkMwNDA0RDYsRkI4QTU4MEQsRTQ4OTYwMDAsNEUwMDIwMDAsNEUyNTAwMDAsRkMwNDA4ODAsNEUwMDRDMDYsRkMwNDA0ODIsMDhBNzEwMUYsRkMwNDA0QzksRkI4QTZDMEIsRkZGNzAwMDAsNEUxMDYwMDAsNEUxMDgwMDAsQ0ZGRkYwMjAsNEUwMEIyNDcsRkMwNDAwMjIsMEE2NzAwMDAsMkEyNzEwMUYsMDBBNzAwMDAsRkMwNDA0QzUsRkI4QTdDMEEsQ0ZGRkYwMjAsRkMwNDEyNDcsRTQ4QjgwMDAsMjlFNTAwMDAsMDNBNzAwMjEsRkMwNDEwMjUsQzAwMDI0Q0MsRkI4QTkyMDksMjBEMDgwMDAsNEUwMDIwMDAsNEUwMDQwMDAsNEUxMEEwMDAsRkMwNDA0RjYsRkI4QTk4MEMsRkMwNDEwNkYsQzAwMDY0Q0MsRkI4QUEwMDgsNEUwMDYwMDAsNEUxMEMwMDAsQUM4REEwMjEsMEFBNzAwMjIsRkI4MDAwODEsMEFFNzAwMjEsNDQyNzAwMDAsRTA4RTIwMDAsMDBFNzAwMDAsQTI1N0UwMjUsRkMwNDA0RDYsRkI4QUJBMEQsRTQ4QTIwMDAsNEUwMDIwMDAsNEUyNTAwMDAsMjNBNzA4ODAsNEUwMDRDMDYsRkMwNDA0ODIsMDhFNzA0REUsRkI4QUNBMDksRkZGNzAwMDAsQTgwMEEwMDAsMDBFNzAwMDAsNEUwMDYwMDAsNEUwMDg4MDAsNEUzNjA0MDEsNEUwMEEwMzMsNEM2NzAwMDAsRkMwNDAwNzUsQzAwMDI0MDgsQzAwMEQwMjAsN0M2NzAwMDAsRkMwNDAwNDYsRkMwNDA1MDYsRkMwNDAwMzMsNEUwMEMwNDksMDkwMEU5MDAsQTAwMDYwMDAsRkMwNDAyMjQsNUMyNzAwNEQsMEIwMTA4MDAsNEUwMTI0MDEsRkMwNDAwMzMsNEM2NzAwMDAsRkMwNDAwNzUsQzAwMDI0MDgsQzAwMEQwMjAsN0M2NzAwMDAsRkMwNDAwNDYsRkMwNDA1MDYsRkMwNDAwMzMsNEUwMTQwNDksMDk2NzA5MDAsQTAwMDYwMDAsRkMwNDAyMjQsQUM4REMwNEQsRkI4MDAwODEsMEI2NzAwMjEsNDQyNzAwMDAsRTA4RjAwMDAsMDIyNzAwMDAsQTI4RTQwMjUsRkMwNDA0RDYsRkI4QjIyMEQsRTQ4QzYwMDAsNEUwMDIwMDAsNEUyNTAwMDAsRkMwNDA4ODAsMDJBNzBDMDYsRkMwNDA0ODIsMEEyNzAwMjUsRkMwNDA0RDYsRkI4QjM0MEIsRkZGNzAwMDAsNEUwMDIwMDAsNEUyNTAwMDAsRkMwNDA4ODAsMDI0MDRDMDYsRkMwNDBDQTYsMEE4MDY4MjQsMDIyNzA0MDYsRkMwNDA0ODIsMEE2NzAwMzMsMjJBNzE0NDYsMDJFNzBEQUUsMjMyNzE4MjQsRkMwNDE0MDcsRkMwNDFEMjcsMkFDMDg4QTQsRkMwNDA0MTYsRkMwNDA0ODIsMEIyNzAwMDAsMDJFNzAwMDAsRkMwNDA4MDAsQzAwMDMwMjAsRkMwNDA0QzIsRkI4QjY0MEYsRkZGNzAwMDAsMDNFNzAwMDAsRkMwNDEwRkYsQUM4REU0MDcsMkI2NzAwMDAsRkI4MDAwODEsMEJFNzAwMDAsQjg4RTIwMDAsRTA4RkYwMUYsMDI2NzAwMDAsRkMwNDAwNTUsMEE2NzAwMDAsQzAwMDA0QzgsRkI4Qjg2MEYsRTQ4QzYwMDAsMjBEMTAwMDAsMDIwMEEwMDAsMkEyNzAwMjUsMDlFNzAwMjEsMEE2NzAwMDAsMDA4MEMwMUIsRkMwNDFDMEQsRkMwNDA0RTMsRkI4Qjk0MEQsRkZGNzAwMDAsNEUwMEUwMDAsRkMwNDAwNkIsRkMwNDA4MDAsRkMwNDA0RTMsRkI4QjlDMEMsRkMwNDAwNkIsQUM4RTAwMDAsNDQyNzAwMjEsQzBCQTkwMjAsRkIxMDIwMDAsRkE0ODAwMDAsRkI4MDAxMDAsRkI4MDAwODEsQUM4RDgwMDAsQjg4RTIwMDAsRTEwNzIwMDAsQTAwMTAwMDAsNEZBNzAwMDAsNjgyNzAwMDAsRkMwNDAyNDYsNkM2NzAwMUIsODI4RTQwMDAsRTI4RjAwMDAsOTFFMDAwMDAsNThBNzAwMDAsODFGMDAwMDAsREUwOUUwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4QkNDMDYsNThBNzAwMDAsODFGMDAwMDAsREUwOUMwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4QkRFMDYsNThBNzAwMDAsODFGMDAwMDAsREUwQTQwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4QkYwMDYsRjIwMDQwMDAsNThBNzAwMDAsODFGMDAwMDAsREUwOTQwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4QzA0MDYsNThBNzAwMDAsODFGMDAwMDAsREUwOTAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4QzE2MDYsRkI4MDAwODAsREUwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsQTI4RUUwMDAsODNFMDAwMDAsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4QzJBMDYsRkI4MDAwODAsREUwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4QzNBMDYsQTNFMDAwMDAsODI4RUUwMDAsRkZBODAyRTMsOTNFMDAwMDAsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4QzRBMDYsRkI4MDAwODAsQTI3RjAwMDAsRkMwNDAwNjYsRkI4QzkwMDQsQTI3RjMwMUYsRkZBODA0RDUsRkI4QzY0MDcsOTI3RjAwMDAsOTI3RjIwMDAsQUE3QjgwMDAsQzAyODAwMjAsRkMwNDAyNDMsQzAwMEE0NjgsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4QzZDMDYsQzAwM0YwMjAsQTFGMDA0MzcsRkMwNDAyNjMsRkMwNDEyNjcsRkMwNDEwRjcsRkMwNDE0MjcsRkMwNDA0NkIsOTFGMDAwMDAsQzAyODAwMjAsRkMwNDAyNDMsQzAwMEE0NjgsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4QzhBMDYsRkI4MDAwODAsRkIxMDIwMDAsRkI4QzMyNDAsQTA3RUUwMDAsRkMwNDAwNjUsRkI4Q0EwMDQsRkIxMDIwMDAsRkI4ODcwNDAsRkI4MDAwODAsRkIxMDIwMDAsRkI4QzFFNDAsQTA3RUUwMDAsRkMwNDAwNjUsRkI4Q0IwMDQsRkIxMDIwMDAsRkI4ODk0NDAsRkI4MDAwODAsQTA0MkEwMDAsQzAwMDY0QzQsRkI4RDVBMDYsRTQ1MDgwNkQsOTA0MkEwMDAsQzAwMDYwMjAsOTA0ODQwMDAsQUM0NjAwMDAsNEUyN0MwMDAsNEEyNzAwMDAsODA0ODYwMDAsQTA3MTQwMDAsRkIxMDIwMjUsQzBDRDMwMjAsRkE0ODAwMDAsRkI4MDAxMDAsQzAwMDgwMjAsOTA0ODQwMDAsRTQ1MTYwMDAsQUM0NjAwMDAsNEUyN0MwMDAsNEEyNzAwMDAsODA0ODYwMDAsQTA3MTQwMDAsRkIxMDIwMjUsQzBDRUIwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRTQ0RTAwMDAsQTA0MDQwMDAsNEUyNTAwMDAsNEUwMTI0MjUsRkIxMDI0NjksQzAwMDUwMjAsOTI0ODQwMDAsRkZBODAzMTUsOTA0ODYwMDAsQTA3MTQwMDAsRkMwNDAwMjUsQzBEMDcwMjAsRkE0ODAwMDAsRkI4MDAxMDAsQTA0MDQwMDAsNEUyNTAwMDAsNEUwMTI0MjUsRkIxMDI0NjksQzAwMDUwMjAsOTI0ODQwMDAsOTA0ODYwMDAsQTA3MTQwMDAsRkMwNDAwMjUsQzBEMUYwMjAsRkE0ODAwMDAsRkI4MDAxMDAsQUM0NjAwMDAsQTA1NjkwMjEsQUM0RDE1NjcsRkMwNDAwMjEsRkZBODA1QzAsRkI4RDMyMDUsRkZGNzAwMDAsQTg0Q0UwMDAsQUM0RDQwMDAsQTg0RDIwMjEsOTFFMDAwMDAsODFGMDAwMDAsQzAyRTAwMjAsRkMwNDAyNDMsQzAwMDQ0NjgsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4RDNFMDYsQTA1NjYwMUIsOTFFMDAwMDAsODFGMDAwMDAsQzYwMDQwMjAsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4RDRFMDYsRkI4RDVFMDEsQTg0MkEwMDAsODA0ODAwMDAsRkIxMDIwMDAsRkJFNUFDNDAsRkI4MDAwODAsQTA3RjQwMDAsQTQ0MzgwMDAsQTA0MzY0MDUsQzAwMzA1ODgsRTI3Rjg0MDYsRkI4MDAwODEsOTA3RjYwMDAsNTYyNzAwMDAsRkIxMDIwMDAsRkJFOTEyNDAsQUMwMTQwMDAsRkMwNDAwMjEsRkZBODA1MDIsRkI4RDkwMDQsQTA0QzAwMDAsRkZBODAyOTAsOTA0QzAwMDAsQTAxMjIwMDAsQUM0NEMwMDAsRkMwNDA0QzUsRkI4RDkwMDgsQTA0QzAwMDAsRkZBODAwOTAsOTA0QzAwMDAsRkI4MDAwODAsQTA0MjAwMDAsRkZBODA0OEEsRkI4RTEyMDUsRTA0NUEwMDAsQTQ0OTAwMDAsNDgyNzAwMDAsRkMwNDA0QzUsRkI4RTEyMEUsMDIyNzAwMDAsRkMwNDA0QzUsRkI4RTEyMDgsMDIyNzAwMDAsRkMwNDA0QzUsRkI4REI0MDYsRkI4REU2MDEsQTA0N0MwMDAsRkMwNDAwMjUsRkMwNDAwMUIsMDA2NzAwMDAsRkMwNDA0QzUsRkI4REMyMEEsRkI4REI2MDEsRkZGNzAwMDAsRjAwMDIwNkIsOTA0NTgwMDAsNDgyNzAwMDAsMDA2NzA0ODUsNEUyNDAyNDMsNEM2NzE0NDUsNEUyRTIwMDAsRkIxMDIwMDAsRkJDNzQ0NDAsODA0N0UwMDAsQTA0NTgwMDAsRTA0NkMwMDAsNEZBNzAwMDAsMDA2NzAwMDAsNEUyNDAwMDAsQTQ0N0U0NDUsNEUyNDA3QzksRkMwNDAzQzQsRkMwNDA0MDksQUM1N0UwMDAsQTAwMDY0MDksRkMwNDAwNEQsQzAxRkYwMjAsNUM2NzAwMDAsQTg0NDIwNDUsOTA0ODIwMDAsQTQ0MDQwMDAsRkMwNDE0MjUsNUM2NzAyM0IsRkMwNDA0NjYsRkMwNDA0RTksRkI4RTEyMDQsOTA0MDQwMDAsQzAwMDUwMjAsOTI0ODQwMDAsOTA0ODYwMDAsQTA3MTQwMDAsRkIxMDIwMjUsQzBFMTMwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkIxMDIwMDAsRkI4RDYwNDAsQTA3RjYwMDAsQTI3RjgwMDAsQzAwMjQ1MDQsQUM0MTYwMDAsNEM2NzAzQUUsQUM0MzI0MjksQTA3Rjg0NjYsRkMwNDA0QzUsRkI4RTJBMDQsRkZBODAxMTcsOTA0MDYwMDAsOTA0ODYwMDAsQzAwMDYwMjAsOTA0ODQwMDAsQTA3MTQwMDAsRkIxMDIwMjUsQzBFM0QwMjAsRkE0ODAwMDAsRkI4MDAxMDAsQzEwNjIwMjAsRkMwNDAyNDMsQzAxRkU0NjgsQTQ0MDgwMDAsQTI0MzQ0MjksNEM2NzAyNEUsQTI3Rjg0NjYsNEM2NzAwMDAsQzAwM0U0MzQsRkMwNDAyNzMsQTA0NDA0NjYsRkZBODAxMTUsQzAwMDQ0QzQsRkI4RTVFMEUsRkI4RTZFMDEsRkZGNzAwMDAsRkZBODAxMTYsQTA0NDAwMDAsQzAwMDY0QzQsRkI4RTZBMDYsRkI4RTZFMDEsRkZGNzAwMDAsRkZBODAxMTcsRkZBODAxMTYsRkZBODAxMTcsQTA0OTAwMDAsQUM0NDAwMDAsRkZBODAzMTQsRkMwNDA0QzUsRkI4RTdBMEUsRkZBODAxMTQsOTA0MDgwMDAsQzAwMDkwMjAsOTI0ODQwMDAsOTA0ODYwMDAsQTA3MTQwMDAsRkIxMDIwMjUsQzBFOEQwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkI4MDAwODAsRkIxMDIwMDAsRkJFQUJDNDAsRDYwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFEMDAwMDAsQTFEMDAwMDAsRkZBODA0ODAsRkI4RTlBMDYsQTFFMDAwMDAsRkZBODAwOEQsQTA0MjAwMDAsRkZBODA0OEIsRkI4RUFDMDQsRkZBODAzMEQsOTFFMDAwMDAsRDYwMDAwMjAsRkMwNDAyNDMsRkMwNDAzNDMsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4RUI2MDYsRkI4MDAwODAsQTA0ODQwMDAsQUM0MTgwMDAsRkMwNDA0NjUsOTFEMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4RUM2MDYsQTFGMDAwMDAsRkZBODA0OTcsRkI4RUM0MDYsQTA0ODYwMDAsODFGMDAwMDAsOTFDMDAwMDAsQTFDMDAwMDAsRkZBODA0ODAsRkI4RUQ4MDYsRkI4MDAwODAsQTA0MjYwMDAsQzAwMDQ0QzQsRkI4RUY2MDYsQTA3NjIwMDAsRkIxMDIwMjUsQzBFRjEwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkIxMDIwMDAsRkJFMDc4NDAsRkI4RjA4MDAsQzAwMjI0QzQsRkI4RjA4MDYsQTA3NjQwMDAsRkIxMDIwMjUsQzBGMDUwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkIxMDIwMDAsRkJFMEQ0NDAsRkIxMDIwMDAsRkJGMjRDNDAsRkI4MDAwODAsQTA0NTAwMDAsRkMwNDAwNjUsRkI4RjY0MDYsQUM0MjQwMDAsQkM4MjAwMDAsQzAwMDIwMjAsOTA1NzAwNkQsOTA0NTAwMDAsQTA0QzAwMDAsRkZBODAyOTEsOTA0QzAwMDAsQTA0MjAwMDAsRkZBODAwODYsQTgwMTQwMDAsRkZBODA0ODAsRkI4RjRFMDUsRkZGNzAwMDAsOTA0MjAwMDAsQTAyMjQwMDAsRkZBODAwODAsRkZBODAxMDMsOTAyMjQwMDAsQTA2NjIwMDAsODA0OTQwMDAsQzAwMDIwMjAsOTA2NjIwMDAsQTA3NjIwMDAsRkIxMDIwMjUsQzBGNEQwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkI4RjVBMDAsQTgwMTQwMDAsRkZBODA0ODIsRkI4RjVBMDQsQTAyMjQwMDAsRkZBODAwODAsOTAyMjQwMDAsQTg0MUEwMDAsODA0MjQwMDAsRkI4RjlDMDEsQTQ0OTAwMDAsQkM0NUEwMDAsQzAwMjA0QzQsRkI4Rjk4MDYsQTgwMTQwNkQsRkZBODA0ODAsRkI4RjhBMDUsRkZGNzAwMDAsOTA0NTAwMDAsQTAyMjQwMDAsRkZBODAyODAsRkZBODAzMDMsOTAyMjQwMDAsQTA0OTQwMDAsODA2NjIwMDAsQTA3NjQwMDAsRkIxMDIwMjUsQzBGODkwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkI4RjlDMDAsQTgwMTQwMDAsRkZBODA0ODIsRkI4RjlDMDQsQTAyMjQwMDAsRkZBODAyODAsOTAyMjQwMDAsRkI4RjlDMDAsRkIxMDIwMDAsRkJGNkE2NDAsRkI4MDAwODAsQTA0MjgwMDAsQzAwMDg0QzQsRkI5MDJFMDYsQTA1NkEwMDAsRkMwNDAwNjUsRkI4RkM2MDYsQTg1N0EwNkQsOTA1NkEwNjUsRkI4RkI4MDcsRkZGNzAwMDAsQUM1NzYwMDAsQzAwMEEwMjAsOTA0MjgwMDAsQjgwMzYwMDAsQTAwMjQwMDAsRkIxMDIwMjUsQzBGQzUwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkI4RkUwMDAsQUM1NzgwMDAsQUM1N0E0ODUsRkMwNDAwNkIsOTAwMzYwNkQsOTA1NkE0QzUsRkI4RkQ2MDgsQzAwMEEwMjAsOTA0MjgwMDAsQTAwMjQwMDAsRkIxMDIwMjUsQzBGRTEwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRTA0RTQwMUIsQTQ0OTAwMDAsNDhBNzAwMDAsRkMwNDA0QzUsRkI4RkYwMDYsRkI4RkZDMDEsQzAxRkUwMjAsNDhBNzAwMDAsRkMwNDAwNjUsRkI4RkZBMDYsRkI4RkZDMDEsRkZGNzAwMDAsQzAxRkMwMjAsRjAwMDIwNkIsQzAwMjA0QzgsRkI4RkU0MDgsQzAxRkU0QzgsRkI5MDVBMDYsQzAwMkQ1NDQsRkMwNDAwNjcsRkI5MDVBMDUsRkZGNzAwMDAsODA3RjIwMDAsRkMwNDAwMUIsRkZBODA1QzAsRkI5MDE2MDQsQzAwMDIwMjAsQTA0MjAwMDAsRkZBODA0OEIsRkI5MDFFMDQsQzAwMDI0QTgsRkMwNDAwNjMsRkI5MDVBMDQsQTA3MzIwMDAsRkIxMDIwMjUsQzEwMkQwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkI5MDVBMDAsQTA0MjgwMDAsQzAwMEM0QzQsRkI5MDU2MDYsRkIxMDIwMDAsRkJGOTdFNDAsQzAwMDIwMjAsOTA3RjAwMDAsQzAyQzgwMjAsRkMwNDAyNDMsQzAwODA0NjgsQTI0OTAwMDAsNEUyNjIwMDAsRkMwNDA0REUsRkI5MDUwMDcsRkZGNzAwMDAsQTAwMDYwMDAsQTg4RUMwMDAsRkI5MDVBMDEsRkZGNzAwMDAsODA3RkEwMDAsRkIxMDIwMDAsRkJGOTdFNDAsRkI4MDAwODAsRTQ4RTMwMUYsNEUwMDUwNkYsRTFBMDAwNTEsNEUwNDQwNjMsRkI5MDZDMDUsNjQyNTAwMDAsMDBFNzAwMDAsRkI4MDAwODAsNEUxMDMwMjUsNEUzMjUwNkEsRkI5MDc4MkIsRkZGNzAwMDAsMjEyNzAwMDAsRkMwNDEwMUYsRkMwNDA0QzUsRkI5MDgwMDYsQUUwMEMwMDAsRkMwNDEwMjIsRkMwNDAwNjYsRkI5MDg4MDQsQUUwMEMwMDAsRkMwNDEwMjIsNEUzMjAwMDAsNEUwMDQwMDAsQzAwN0UwMjAsNEUwNDIwNTEsNEUwNDQwNjMsRkI5MDlDMDYsQzAwMTQwMjAsRDRBQjUwMjAsMjk4NDUwRjcsMjlBNzAwMDAsRkI4MDAwODAsRkIxMDIwMDAsRkJCQzA0NDAsQTAwRkUwMDAsRkM0MDAwMDAsQTAwMTAwMDAsRkMyNDAwNjUsRkI5MEQyMDcsRkNBNDAwMzAsRjIwODAwMDAsRkQyMDAwNDAsRkZGNzAwMDAsRTQyNjYwMUIsNDhBNTQwMDAsNDhBNTQ4MDAsRkUyNzAwMTIsNDhBNTRDMDYsNDhBNTBDMDYsRkUyNzAwMTUsNDhBNTZDMDYsQTAxN0VDMDYsRkMwNDA0MDIsRkQyODAwMDAsRkZGNzAwMDAsRkI5MEY2MDEsODEwODIwMTMsOTEwODAwMDAsRkQyMDAwNjAsRkZGNzAwMDAsQTExMjAwMUIsNTBBNzAwMDAsRTQyNjYwMDAsNThBNTQwMDAsNThBNTQ4MDAsRkUyNzAwMTIsNThBNTRDMDYsNThBNTBDMDYsRkUyNzAwMTUsNThBNTZDMDYsQTExMjJDMDYsNDBBNzA0MDIsRkQyQzAwMDAsRkZGNzAwMDAsRTgwRkUwMTMsOTAxN0UwMDAsRkI4MDAwODAsRkIxMDIwMDAsRkJCNTQ0NDAsRTAzRTQwMDAsRTQyQzAwMDAsNEUyNTAwMDAsQTAwOTYwMDAsNDgyNzA4MDAsRkMwNDAwMjUsNEUwMDJDMDYsRkMwNDA0ODIsNDQyNzA5MDAsMDA2NzAwMDAsRkMwNDAwMjUsRkMwNDBDMDYsRkI4MDAwODEsRkMwNDA0ODIsMDg2NzAwMDAsRkIxMDIwMDAsRkI5MTJFNDAsRkIxMDIwMDAsRkI4MTUwNDAsRkI4MDAwODAsQzFGMUEwMjAsOTAwMzYwMDAsRkIxMDIwMDAsRkJDN0Q4NDAsRkI4MDAwODAsQTAwMzAwMDAsRTMyMkMwMDAsNUZBNzAwMDAsQTAzRjYwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRjgwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRkEwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRkMwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRkUwMDAsRkM0MDAwMDAsRkI4MDAwODEsNDgyNzAwMDAsNTBBNzAwMDAsRkIxMDIwMDAsRkJCODJFNDAsRTQyOTcwMUYsQTIwMjYwMDAsRTAzNjIwMDAsNEZFNTAwMDAsNDgyNzAwMDAsNEUwMDI4MDAsRTAxN0E0MDEsNEZFNzAyMjMsNDgyNzAwMzMsRkMwNDAwNEYsRkMwNDA0QzYsRkI5MTgwMEQsRkZGNzAwMDAsNEUwMDQwMDAsNEUwMDYwMDAsRTIzNjY5MjUsNUZDMDhDMDYsNTgyNzA0ODIsNEUwMEE4MTMsNDQyRTI0MDEsMDA2NzAyMjMsRkMwNDAwMzMsRkMwNDAwNDksRkMwNDA0QzYsRkI5MTlBMEQsRkZGNzAwMDAsNEUxMEMwMDAsNEUxMEUwMDAsRkMwNDA5NjUsNDgxMTBDNDYsRkMwNDA0ODIsRkMwNDAwMTMsMDg2NzEwMjIsRkMwNDAwNjYsRkI5MUFFMDUsRTIxRkEwMDAsNUZFNzAwMDAsRkMwNDEyQzcsRkZBODA1QzEsRkI5MUI0MDYsNEMyNzAwMDAsRkZBODA1QzIsRkI5MUJBMDYsRkMwNDAwMUIsRkI4MDAwODEsRkMwNDAwNEQsNTQyNzAwMDAsRkIxMDIwMDAsRkJCODdFNDAsRTQyQTYwMDAsNEUyNTQwMDAsQTIwMjcwMjEsRkMwNDAwNjYsRkI5MUQwMDQsRkMwNDEyQzcsRkZBODA1QzAsRkI5MjBBMDYsRTAxRkIwMUYsNEZFNTQwMDAsMDA2NzAwMDAsQzAwMDQ0QzQsRkI5MUU2MDUsNjgzNjAwMDAsNEUyN0UwMDAsNkEyNzAwMDAsNjgyNzE0NUUsQUUwMEEwMDAsRkMwNDAwMjIsRkMwNDAwNjUsRkI5MUY2MDUsRkZGNzAwMDAsRjVGRkUwMDAsNkEyNzAwMDAsNjgyNzA0MUUsRkMwNDA0RDYsRkI5MUZFMEMsRkMwNDEwNTUsNUM2NzAwMDAsRkMwNDA0RDcsRkI5MjA2MEEsRkMwNDEwNkQsNUM2NzAwMDAsRkMwNDAwMjUsMDg2NzAwMDAsRkI4MDAwODAsRkIxMDIwMDAsRkJCOTAyNDAsQTIwMjYwMDAsRTAxRkMwMDAsNEZFNzAwMDAsNDgyNzAwMDAsMjA2NjAwMDAsRkMwNDA0REUsRkI5MjMwMDQsRTQyQUUwMjUsMDg2N0MwMDAsNEUzNTAwMDAsQkEwMzYwMDAsQTAwMjQwMDAsRkIxMDIwMjUsQzEyMzEwMjAsRkE0ODAwMDAsRkI4MDAxMDAsRkI4MDAwODAsRTQzQkUwMDAsQTAwMTAwMDAsRTAyNDIwMDAsNjgwMDIwMDAsRTMwNUE4ODAsNUZBNTAwMjQsNTgxMDcwMjMsMjA4MDQ4MDAsMjA0MDNDODcsMzA2NTFDODcsNDBBNzEwMzcsMDA4MDQ4QTQsQTQzMTZDMDYsNjBBNzBEODYsNjRBNzAwMzMsNDRBNzE1MzEsNEUwMDg5MDAsNEUxMDg1MzEsNEM2QzA5ODAsMTA2NzBDNDYsNEUzNjA0MDksQUEwMkI0MDMsRkMwNDE0MUYsRkZBODA0RDIsRkI5MjY4MDYsRkMwNDAwMjEsRkMwNDEwMjIsNDgwMEEwMDAsNDQ4MEM5MDAsNjgwMEU4MjQsNDA5MTI0MDIsMDA0MTBDODYsNjgwMUNDMDYsNDBBNzA0MDIsNEUxMTRDQzYsRTYzREM0MDIsNEUxMTY5NTMsNDQ5MTg4NjQsNDgyNzA0MDIsMjA1MUFDQzYsNjBBRDBDMDYsNEUzRDBDQzYsNEUwODY0MDIsRkMwNDA0MDIsNEUxODI5NTMsNDQ5ODQ4RTQsNjgyNzA0MDIsMDA1ODhDNDYsNDA5OEFDQzYsMjBDMEFDMDYsRkMwNDA0MDIsRkMwNDA0MDIsRkMwNDA5NTMsNDQ5OEM4NjQsNDgxMENDRTYsMjA0MEVEODYsNjRBNzAwMTMsNDA5MTM4NjQsNDRBNzE0MDMsMDA0MTFDODcsNjgwMURDMDcsNDBBNzE0MDMsNEUxMTVDQzcsRkMwNDE0MDMsNEUxMTc5RDcsNjQ5MTk4NjQsNDgyNzE0MDMsMjA1MUJDQzcsNjBBRDFDMDcsNEUzRDFDQzcsNEUwODc0MDMsRkMwNDE0MDMsNEUxODM5RDcsNjQ5ODU4RTQsNjgyNzE0MDMsMDA1ODlDNDcsNDBBNzFDQzcsNTQwOEJDMDcsMjA2NzE0MDMsRkMwNDE0MDMsRkMwNDE5OTcsNjQ4OEQ4MjQsRkMwNDFDQTcsRkMwNDE0MDMsRkMwNDEwMTcsRkI4MDAwODEsNjQyNzAwMDAsMzg2NzAwMDAsRkIxMDIwMDAsRkJBNDFFNDAsRTAzMEMwMDAsQTAxRjIwMDAsNjgyNzAwMjUsRkMwNDA0RjYsRkI5MkY2MEQsRTQ4RjgwMDAsNEUwMDIwMDAsNEUyNTAwMDAsQTAwRDY4MjYsMjA2NzBDODYsRkMwNDA0ODIsNDQyNzAwMjUsRkMwNDA0RjYsRkI5MzA4MEQsRkZGNzAwMDAsNEUwMDYwMDAsNEUwMDQwMDAsRTQ5Mjg4MjYsQTAwRENDODYsNEUwMDI0ODIsMDg2NzEwMUYsNEUyNTA0ODUsQTAxMTYwNEYsRkMwNDAyOTMsNEUwMDQwNDksRTAyNzcwNzUsQzAwMDM0MEMsNDQwMDcwNDEsQTIwQzc1MDcsNEUwMDk4QjcsRkMwNDE0MEUsMjg2NzA1MDEsQTQyM0UwMDAsQUM4RUE1MDksMDhBNzAwMDAsRTA3RkEwMDAsMDA2NzAwMDAsNDgyNzA4MjUsQUM5MzJDMjYsRkMwNDA0MDIsRkMwNDAwMTMsMDg2NzAwMDAsRTAzMjAwMDAsQTAwRUUwMDAsNDgyNzA4MDAsRkMwNDAwMjUsRkMwNDBDMDYsRkMwNDA0ODIsNDQyNzA5MDAsMDA2NzAwMDAsRkMwNDAwMjUsRkMwNDBDMDYsRkMwNDA0ODIsMDg2NzA5MDAsMDBBNzAwMDAsRkMwNDAwMjUsRkMwNDBDMDYsRkI4MDAwODEsRkMwNDA0ODIsMDhBNzAwMDAsQTAwMjcwNkEsRTYxQUEwMDAsRTQwRTAwMDAsRTAwQzAwMDAsRTIyMkMwMDAsNUZBNzAwMDAsMzEyNzAwMDAsNEUyQzAwMDAsRTIxRUEwMjEsNEZBRTAwMDAsNUY4Q0MwMjEsNDgwQ0EwMDAsNEUyNTAwMDAsNEUxMDI4MDAsQzAwMUUwMjAsNEM2NzAwNzQsQzAwMDI0MDgsOTIwMkMwNDUsMzBFNzA1MDIsRkMwNDAwMzMsRkMwNDA0MTksRkMwNDAwMzMsRkMwNDA0RjYsRkI5Mzk2MEIsMTA0MDQwMDAsNEUxMDYwMDAsNEUxMEEwMDAsNEUwMDgwMDAsRkMwNDAwNjUsRkI5MzlFMDQsNEUxMEEwMDAsNEUwMDgwMDAsRTQzNTE5MUYsNEUzNTA4RTQsNEUwMDI0MDIsRkMwNDAwMzMsMThFNzEwNEIsMjJGRTI5QzAsQTAwMjc0MDEsNEUwOEQwMzcsNEUxMDQ5QzAsNEUxOEI0MTEsRkMwNDEyMEYsMkJBNzAwMDAsRTAxRjIwMDAsNEZBNzAwMDAsNTgyNzAwMDAsQTAwMjY0MDUsNjgwMDY0OTYsRTAwRkE4QjMsNzgwMDgwMDAsQTQwMDc0MDEsNEZBNzEyMTcsRTIzMEIwMzcsNUZBNzEwNDksNDgyNzAwMDAsNzQyNzE0NDcsRkMwNDEwNDksRkMwNDE0OUYsRkMwNDE0MTcsRkMwNDEwMzcsQzAwMkU1MjgsQzAwMkY1MkMsRkMwNDA0NkIsNkM2NzAwMDAsRkMwNDAwNjYsRkI5M0VBMDUsRkZGNzAwMDAsMDMwOEUwMDAsNEUyRDAwMDAsREZGRkU0OTQsNEUxOTAwMzMsMEFDOTM0MDUsQTAwMDYwMDAsMjFFNzEwNEQsRTIwMUYwMzcsMkIxOTQ5QzAsNEUyRTA0MDEsRkMwNDAwMzMsRkMwNDA5MDAsRkMwNDAwMjQsRkMwNDAwNEEsMDkyNzAwMDAsQTcxNkMwMDAsNTgyNzEwMjIsRkMwNDA0REQsRkI5NDEyMEQsRTQyQUEwMDAsNEUyNTAwMDAsNEUwMDQwMDAsRTYzNzE5QTUsNEUyRDFDMDcsNEUxODk0ODMsNzQwODI5ODAsNEUwODQ0MDEsQTAwREQwNzMsQzAwMDM0MEMsRkMwNDEwNDEsRkMwNDE1MEIsRkMwNDEwMzcsNEUxODcwNDIsRkMwNDEwNEEsRkI4MDAwODEsRkMwNDEwNEQsOTIwREMwMDAsRkIxMDIwMDAsRkJBQUZBNDAsQTIzMTgwMDAsRTQzNEQwMjYsQTIwQzAwMDAsRTAzMTg0RDcsRkI5NDQ0MEIsQUUzNEMwMDAsQTAzMUEwMDAsNEUxMDIwMDAsRTQxOTk4RUQsRTIxN0NEQzcsNEUwMDI0ODIsNDQyNzAwMDAsRkJBQjZBMDEsMEM3NTAwMDAsQTAwMjYwMDAsRkI4MDAwODAsRkIxMDIwMDAsRkJBRDhFNDAsRTAzMUMwMDAsNjgyNzAwMDAsQTIwRDcwMjYsRTQzNUE0RDcsRkI5NDY4MEIsRTIzMDAwMDAsNEUzNTAwMDAsNEUxMDIwMDAsMzA2NzE4RUQsNEUxMDREQzcsRkMwNDA0ODIsNDQyNzAwMDAsMEM2NzAwMDAsRkJBREU4MDEsQTAwMjYwMDAsRTAxRTgwMDAsRkI4MDAwODAsRkIxMDIwMDAsRkJCMDk0NDAsRTIyNkUwMDAsQTAwRDYwMDAsNzgyNzEwMjUsRkMwNDA0RjcsRkI5NDhFMEQsRTQyQjYwMDAsNEUwMDIwMDAsNEUyNTAwMDAsRTAxNTU5QTYsNDgyNzFDODcsMjA2NzE0ODMsNzQyNzAwM0QsMTA2NzEwM0UsRkMwNDA0MEIsRkMwNDAyOEIsRkMwNDA0RTYsRkI5NEE2MEQsRkZGNzAwMDAsNEUwMDYwMDAsNEUwMDQwMDAsQUEwMkE5MjUsRkZBODA0QzUsRkI5NEIyMDYsRkMwNDBDMDYsRkMwNDA0ODIsMTg2NzAwMDAsRkI4MDAwODAsQzFGMUMwMjAsOTAwMzYwMDAsRkIxMDIwMDAsRkJDN0Q4NDAsRkIxMDIwMDAsRkJEMEQwNDAsRkI4MDAwODAsRkIxMDIwMDAsRkJCNDYwNDAsQTAwMTAwMDAsRTMwQzIwMDAsNUZBNzAwMDAsQTAyNzQwMDAsNTBBNzAwMDAsQTAyNzgwMDAsNTBBNzAwMDAsQTAyN0EwMDAsNTBBNzAwMDAsQTAwMzAwMDAsRTMyMkMwMDAsNUZBNzAwMDAsQTAzRjYwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRjgwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRkEwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRkMwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRkUwMDAsRkM0MDAwMDAsRkI4MDAwODEsNDgyNzAwMDAsNTBBNzAwMDAsRkIxMDIwMDAsRkJBN0E2NDAsRTAzMEMwMDAsRTQ5MDAwMDAsNDgyNTAwMDAsMDA0MDI4MDAsQTIwMDY0MDEsNEUwMDQyMjMsNEUxMDgwNEUsMDg4MDY4MDAsMDBBNzA0MDEsNEUyNjAyMjMsQTAwMDYwMDAsRkMwNDAwNEQsRkMwNDAwMzMsMDhDMEE5MDAsRkMwNDAwMjQsMDkyNzA5NDAsNEUwMEM0MDEsRkMwNDAyMjMsNEUwMEUwNDksRkI4MDAwODEsRkMwNDAwNDEsMDk2NzAwMDAsRTAxQjIwMDAsMjE2NzAwMDAsRkMwNDAwNkUsQzAwMTA0QzgsRkI5NTQ0MEMsRkMwNDAwMUIsMDk2NzAwMDAsQzAwMEU0QzgsRkI5NTZDMDYsRTQ5MTAwMDAsQTIyNkUwMDAsNEUyNTAwMDAsNEUxMDI4ODAsNEUwMDQwNzQsQzAwMDI0MDgsNEUxMDYwNDIsRkMwNDA1MDIsRkMwNDAwMzMsNEUwMDg0MDksRkMwNDAwMzMsNEUxMEEwNEEsRkMwNDAwNDEsRkMwNDA5NDAsRkI5NTlBMDEsRkMwNDAwMjQsOTAyNzIwMDAsQzAwMTA0QzgsRkI5NTk2MDYsRTQ5MUMwMDAsQTIyNzAwMDAsNEUyNTAwMDAsNEUxMDI4ODAsNEUwMDQwNzQsQzAwMDI0MDgsNEUxMDYwNDIsRkMwNDA1MDIsRkMwNDAwMzMsNEUwMDg0MDksRkMwNDAwMzMsNEUxMEEwNEEsQTQyNzIwNDEsRkMwNDA5NDAsRkMwNDAwMjQsRkMwNDA5MDAsRkI5NTlBMDEsRkMwNDAwMjQsOTAyNzQwMDAsRkIxMDIwMDAsRkJBN0QyNDAsRkI4MDAwODEsQUMwNjIwMDAsQjgwMzIwMDAsRkIxMDIwMDAsRkI5NjI2NDAsQzFGMUUwMjAsOTAwMzYwMDAsRkIxMDIwMDAsRkJDN0Q4NDAsRkI4MDAwODAsQTEwMDAwMDAsRkZBODA0OTQsRkI5NjBBMDQsODEyMDAwMDAsQTEwMDIwMDAsODEyMDIwMDAsQTEwMDQwMDAsODEyMDQwMDAsQTEwMDYwMDAsODEyMDYwMDAsQTEwMDgwMDAsODEyMDgwMDAsQTEwMEEwMDAsODEyMEEwMDAsQTEwMEMwMDAsODEyMEMwMDAsQTEwMEUwMDAsODEyMEUwMDAsQTEwMTAwMDAsODEyMTAwMDAsQTEwMTIwMDAsODEyMTIwMDAsQTEwMTQwMDAsODEyMTQwMDAsQTEwMTYwMDAsODEyMTYwMDAsQTEwMTgwMDAsODEyMTgwMDAsQTEwMUEwMDAsODEyMUEwMDAsQTEwMUMwMDAsODEyMUMwMDAsQTEwMUUwMDAsODEyMUUwMDAsQTEwMjAwMDAsODEyMjAwMDAsQTEwMjIwMDAsODEyMjIwMDAsQTEwMjQwMDAsODEyMjQwMDAsQzAwMDYwMjAsQTEwMjYwMDAsODEyMjYwMDAsRkI5NjE0MDEsOTA1RUUwMDAsOTE0MDAwMDAsQzAwM0U0MjQsQzAwMjcwMjAsRTEwMDAwNDcsOTA1RUMwMDAsRTg1RUEwMDAsRkI4MDAwQzAsQTEyMDAwMDAsQzAwM0U0MjQsQzAwMjcwMjAsRTEyMDAwNDcsOTA1RUMwMDAsRkI4MDAwQzEsRTg1RUEwMDAsRkZGNzAwMDAsQzE0QjQwMjAsOTQwMTgwMDAsQzExMjQwMjAsOTQwMUMwMDAsRkI4MDAwODEsQzE2MzQwMjAsOTQwMjQwMDAsQzFGMTgwMjAsOTAwMzYwMDAsRkIxMDIwMDAsRkJDN0Q4NDAsRkI4MDAwODAsQTAwMzAwMDAsRTMyMkMwMDAsNUZBNzAwMDAsQTAzRjYwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRjgwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRkEwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRkMwMDAsRkM0MDAwMDAsNDgyNzAwMDAsNTBBNzAwMDAsQTAzRkUwMDAsRkM0MDAwMDAsRkI4MDAwODEsNDgyNzAwMDAsNTBBNzAwMDAsOEEKKzAxQ0RGRCxEOEZGRjJBQixENzU1NTU1NSwwMTAxMDMwMCxDNjAwMDBCNixDQzAwMDBDRCwwMTAxMDIwMCwyOTAwMDFFQywyQTAwMDFEQywyODAwMDE4OCwyNzAwNTRFMCwyNjAwMDAwMCwyNTAwMDAwMCwyNDAwRDAwMCwyMzRFODAwMCwyMjAwMDAwMiwyMTAwMDBBMCwwNTAxMDQwMCxCQjM1REQ5QSxCQTI3NjFBNyxCOTA5OUUyRSxCOEY2NDY3RSxCN0Y3RDE4MCxCNjAyNkQ5NyxCNTA2MjFCMixCNDAwRTQ5NSxCM0ZDMUVFMCxCMkZEQjk0QyxCMTAxRDQ1QixCMDAyNzM1OSxBRkZGQjhBMSxBRUZFMTJGOSxBREZGNUJBMCxBQzAxMjE0NyxBQjAwRjkwOSxBQUZGOUQ3MCxBOUZGMUZFMixBOEZGRTA4MSxBNzAwOTAzMyxBNjAwNThFNSxBNUZGQzVEMSxBNEZGQTc2RixBM0ZGRkNEMCxBMjAwM0FCRSxBMTAwMjA1MixBMEZGRTVDMyw5RkZGQ0U5RCw5RUZGREU2Qiw5REZGRjQ4Niw5Q0ZGRkVBMCxCRjAwODAwMCxCRTAwNDAwMCxCRDAwNDAwMCxCQzAwNDAwMCxDMTAwMDAwMSxDMDQwMDAwMCw3QzI2NjY2NiwxQzAwMDEyMiwxQjAwMDBDQywxODAwMDBFMiwxNTAxMDAwMCxGRTAwMDAwMCxGQTAwMDAwMCwyRTAwMDAwMCwyRDAwMDAwMCwyQzAwMDAwMCwwMjgwMDMwMCxGRjAwMDAwMyxGRTAwMDAwMyxGRDAwMDA5MSxGQzAwMDA5NixGQjAwMDA5NSwwMjgwMDEwMCxEQjAwMDAwMCxEQTEwMDAwMCxEOTgwMDAwMCxEOEZGRkZCMSxENzRFQzRFQywwMjgxMDMwMCxDNjAwMDAyRCxDQzAwMDAzMywwMTAxMDIwMCw2MTAwODAwMCw2MDAwODAwMCw1OTAwMEZGRCw1ODAwMEZGRSw1NzAwMEZGRiw1NjAwMDAwMCw1NTAwMDAwMCw1NDAwMDAwMCw1MjAwMDAwMCw1MTAwMDAwMCw1MDAwMDAwMCw0RjAwMDAwMCw0RTAwMDAwMCw0RDAwMDAwMCw0QzAwMDAwMCw0QjAwMDAwMCw1MzAwMDAwMSw1RjIwMDAwMCw1RTAwMjBDNSw1RDAwN0ZCRSw1Q0ZCMDUxRiw1QjAwMjBDNSw1QTAwMjBDNSwwQjgxMDEwMCwyOTAwMDFFQywyQTAwMDFBMCwyODAwMDE4OCwyNzAwM0I2OSwyNjAwMDAwMCwyNTAwMDAwMCwyNDAwQTAwMCwyMzUyRjAwMCwyMjAwMDAwNCwyMTAwMDFGMywwNTAxMDQwMCxFMzAwMDg0RixCMjAwMDkwNixCMTAwMDhFMCxCMDAwMDhBRixFNDAwMDg4RCxBRTAwMDg3QywwMzAxMDAwMCxGQTAwMDAwMCxGRTAwMDAwMCwyRTAwMDAwMCwyRDAwMDAwMCwyQzAwMDAwMCwwMjgwMDMwMCxGRjAwMDA0QixGRTAwMDFCMyxGRDAwMDFCMSxGQzAwMDFCQSxGQjAwMDFCOSxGMDAwMDAwMCwwMzAwMDEwMCw3RjAwMDQwMCwwMDgwMDAwMCxEQjAwMDAwMCxEQUZGRjJENSxEOTA0MEQyQixEOEZGRjJBQixENzU1NTU1NSwwMjgxMDMwMCxDNjAwMDAxNixDQzAwMDAwMSwwMTAxMDIwMCw1NzAwODAwMCw1NTAwMDcwMCxGMjAwMDAwMCxGMTAwMDAwMCxGMDAwMDAwMCxFRjAwMDAwMCxFRTgwMDAwMCxFRDAwMDAwMCxFQzAwMDAwMCxFQjAwMDAwMCxFQTAwMDAwMCxFOTgwMDAwMCxFODAwMDAwMCxFNzAwMDAwMCxFNjAwMDAwMCxFNTAwMDAwMCxFNDgwMDAwMCxFMzgwMDAwMCxFMjAwMDAwMSxGNDdGQ0U5QixGMzdGRTc0RSxGQjAwMDQ1QyxGQTAwMDkxOSxGRDAwMDUwMCxGRjAwMDQzMCw1RTAwMDIwMCw1RDdGRkUwMCw1QzAwMDEwMCw1QjAwN0YwMCxGOTAwMEE2MSwwRjAxMDEwMCw5OTAwMTAwMCwyOTAwMDFFQywyQTAwMDFCRSwyODAwMDE4OCwyNzAwOUYyQiwyNjAwMDAwMCwyNTAwMDAwMCwyNDAyMDAwMCwyMzdDNTAwMCwyMjAwMDAwNCwyMTAwMDE5Miw0ODA3MDAwMCw0NzAwNDgwMCwzRTAwMDAwMCw0NjAxMDAwMCw0NTA0MDAwMCw0NDAyMDAwMCw0MzAwMDAwMCw0MkZGRTAwMCw0MTAxNDAwMCw0MDAwNDdDOCwzRjA1N0UyMSwzRDdGRkZGRiwzQzIwMDAwMCwzQjA2Q0Y0MiwzQUQ5ODkzNywzOTAwMDIwMCwzODFFMDAwMCwzNzAwMTkwMCwzNjM5OTk5QSwzNTE5MzQ5QSwzNDE5MzQ5QSw0QTAwMDRCMCw0OTAwMDQ2QSw4NzdGRkZGRiw4NjdGRkZGRiw4NTA3RUI4NSw4NEY4MDAwMCw4MzA4MDAwMCw4MkVDMDAwMCw4MTBDNkE1Niw4MDI4MjY5MCw3RjAwMDEwMCw3RTBGRkZGRSw3RDBGRkZGRSw3QzAwMDEwMCw3MDAwMDVENyw2RjAwMDVCNyw2RTAwMDU4OSw2RDAwMDU1NSw2QzAwMDUyNCw2QjAwMDgwMCw2QTY2NjY2Niw2OTczMzMzMyw2ODAwMjkwMCw2NzczMzMzMyw2NjAxMDAwMCw2NTAwMjAwMCw2NDAxMDAwMCw2MzIwMDAwMCw2MjAwODAwMCw2MTA0MDAwMCw2MDEwMDAwMCw1RjAwMjAwMCw1RTAxMDAwMCw1RDAyMDAwMCw1QzAxQTAwMCw1QjAwMjAwMCw1QTIwMDAwMCw1OUZFRTk3OSw1ODdDQkM2QSw1NzAyMDAwMCw1NjIwMDAwMCw1NUZFRTk3OSw1NDdDQkM2QSw1MzAwMDAwMiw1MjAyQzZDNiw1MTAwMDM4MCw1MDAwNTFFQiw0RjAwMUEwMCw0RTAwMTIwMCw0RDAyMDdGRSw0QzAwMDcyRiw0QjAwMEU1RSw5ODAwMDAwMSw5NzQwMDA4MCw5NkZGRkZGMCw5NTcwMDAwMCw5NDAwMDAwMCw4RDdGRkZGRiw4QzdGRkZGRiw4QjQwMDAwMCw4QTAwMDAwMCw4OTAwMDAwMyw4ODdBMDAwMCw5MzdGRkZGRiw5MjA0MDAwMCw5MTAwQTAwMCw5MDA0MDAwMCw4RjAwMDAwMCw4RUUwMEU5NCwzMjgxMDQwMCxENjQwQTNENywzMDAwMEE5QywyRjAwMEE4NCwyRDAwMEEzRCwyOTAwMEEyQSwyNTAwMEExOCwyNDAwMDlBRiwxQjAwMDk3MSwwNDAxMDAwMCxGQTAwMDAwMCxGRTAwMDAwMCxGRDAwMDAwMCwyRTAwMDAwMCwyRDAwMDAwMCwyQzAwMDAwMCwwMzAwMDMwMCxGRjAwMDA2QixGRTAwMDA3RCxGRDAwMDBGOSxGQzAwMDAzRixGQjAwMDAzRSwwMjgwMDEwMCwzQjAwMDAwMCwzQTAwMDAwMCwzNzAwMDAwMCwzMzAwMDAwMCwzMDdGRkZGRiwzMTAwMDQ2QSw3RjAwMDAwMCw4ODAwMDAwMCw4NzAwMDAwMCw4NjAwMDAwMCw4NDAwMDAwMCw4MzAwMDAwMCw4MjAwMDAwMCw4MTAwMDAwMCw4MDAwMDAwMCw3NDAwMDAwMCw3MzAwMDAwMCw3MTAwMDUyNCw3MDdGRkZGRiwwOTgwMDQwMCxGRjAzNTJGOCxERjAwMDFFQywzRDAwMzAwMCwzQzA3MDAwMCwzQjBFODAwMCwzQTAwMEUwMCwxNzMzMDAwMCwxNTAwMjAwMCwwNDMwMDAwMCxDNzAwMDJBQyxDNjAwMDJBOSxDNTAwMDJBQixEQzAwMDAxOCxERDg2QkNBMiwwNzAxMDMwMCxDOTA0MEMzNyxGQzA1ODAwMCxGODAwMDUwMCxDODAwMDQ3NCxDNjAwMDAxNixDNTAxQkQ1MCxDNDE0REZDMCxCRDAwMDAwMSxCQzAwMEZCMSw2NDAwMDgwMCw2QjAwMTEwRiwwNTgxMDIwMCw3Nzc4RDZGQyw3NjA2Qzc3Qyw3NTA2NjY2Niw3QkZGRkNGRiw3QTAwMDMwMCw3OUNGM0ZGQiw3ODMwQzAwNCwwMjAzNTJGOCw3NDAwMDAwMSw3MzAwMDAwMSw3MjAwMDAwMCw3MTAwMDAwMCwyOTAwMjQ5MSwyQTAwMjQ5MSwyODAwMjQ5MSwzMzAwMTEwMCwzMTAwMDAwMiwzMDBCMDAwMCwyRjAwMTMwMCwyRTAwMzMwMCwzMjAwMDAwMSwyRDE0MDAwMCwwQjAxMDQwMCxGNzAwMDAwMCw2RjAwMDNGNSw2MDAwMDQwRSw2RTAwMDQwMSw2NDAwMDNFOSxGOTAwMDAwMCxGODAwMDAwMCwxODAwMDNEMywxNzAwMDNBRCwxMzAwMDFGMCxGQTAwMDAwMCw4QTAwMDc1RixCMjAwMDY1MSxCMTAwMDY0OSw5ODAwMDc0Nyw4RjAwMDdDRiw5NTAwMDc3MCw5QTAwMDZCOCw5NzAwMDc4NywwOTgwMDMwMCw0QzAwMDA2NCxGRTAwMDIyMSxGQjAwMDM2NSxGODAwMDM1MCwwMjAwMDIwMCwwMTAwMDAwMCwwMDgwMEMwMCwwMDA2MEU0NCwwMDA4MEU4NiwwMDA4MEYzRSwwMDA2MEY4Qiw4QQorMDFDRjkzLDhFMDAwMDAwLDhEMjAwMDFGLDhDMDFBNTdDLDhCMjAwMDFGLDhBMDFBMDA0LDg5MjAwMDFGLDg4MDE5RTEwLDg3MjAwMDFGLDg2MDE5REFDLDg1MjAwMDFDLDg0MDE5QjU0LDgzMjAwMDFDLDgyMDE5OEZDLDgxMjAwMDFDLDgwMDE5ODk4LDdGODAwMDAwLDdFMDE3QzE0LDdENDAwMDAwLDdDMDE3MjgyLDdCMjAwMDFGLDdBMDE2QjQ4LDc5MjAwMDFGLDc4MDE2QUU0LDc3MjAwMDFGLDc2MDEzODgwLDc1MjAwMDFGLDc0MDEzODFDLDczODAwMDAwLDcyMDEzMTc4LDBFODAwMjAwLDAwMDEwRkIwLDRBMjNGRjAxLDQ5MUExOTE3LDQ4MEI4OEY4LDQ3RkY0OEIxLDQ2RjlDMDYzLDQ1RkFCQTU4LDQ0RkVBQjkzLDQzMDFDOTk0LDQyMDI2NkUzLDQxMDEyRERELDQwRkZCQjY3LDNGRkYyMDYzLDNFRkY2MEI3LDNERkZFN0VGLDNDMDAzODI2LDNCMDAzODhDLDNBMDAxNDhDLDM5RkZGOTE0LDM4RkZGMzY0LDM3RkZGOThBLDM2RkZGRjgxLDM1MDAwMTVBLDM0MDAwMERBLDMzMDAwMDM0LDBDMDEwMTAwLDRBMjNGRjAxLDQ5MUExOTE3LDQ4MEI4OEY4LDQ3RkY0OEIxLDQ2RjlDMDYzLDQ1RkFCQTU4LDQ0RkVBQjkzLDQzMDFDOTk0LDQyMDI2NkUzLDQxMDEyRERELDQwRkZCQjY3LDNGRkYyMDYzLDNFRkY2MEI3LDNERkZFN0VGLDNDMDAzODI2LDNCMDAzODhDLDNBMDAxNDhDLDM5RkZGOTE0LDM4RkZGMzY0LDM3RkZGOThBLDM2RkZGRjgxLDM1MDAwMTVBLDM0MDAwMERBLDMzMDAwMDM0LDBDMDEwMTAwLDRBMjNGRjAxLDQ5MUExOTE3LDQ4MEI4OEY4LDQ3RkY0OEIxLDQ2RjlDMDYzLDQ1RkFCQTU4LDQ0RkVBQjkzLDQzMDFDOTk0LDQyMDI2NkUzLDQxMDEyRERELDQwRkZCQjY3LDNGRkYyMDYzLDNFRkY2MEI3LDNERkZFN0VGLDNDMDAzODI2LDNCMDAzODhDLDNBMDAxNDhDLDM5RkZGOTE0LDM4RkZGMzY0LDM3RkZGOThBLDM2RkZGRjgxLDM1MDAwMTVBLDM0MDAwMERBLDMzMDAwMDM0LDBDMDEwMTAwLDAwMDEwRkNBLDAwMDEwRkUzLDAwMDEwRkZDLDhBCiswMTkwMEEsMDAwMDAwMDAsOEEKKzAxOTBGRiwwMDAwMDAwMCw4QQorMDFCN0ZGLDAwMDAwMDAwLDhBCiswMTQwMDQsMDA1MDAwMTAsMDE4MDEwODIsOEEKKzAxNDAwMywwMDAwMDAwMCw4QQorMDE0MDA3LDAwMDEwMDAwLEZGRkZGRkZGLDAwMDAwMDBCLDhBCiswMTQwMDEsQjBDMjdGN0UsQjBDMjdGRkUsOEEKKzAwQjAwMCwwMDAwMDExMSw4QQorMDBBMDAwLDAwMDAwMDMxLDAwMTZDRTk5LDAwMDBGRkZGLDAwMDU5Q0MwLDhBCiswMEIwMDAsMDAwMDIxMTEsOEEKKzAwODAwMCwwMDAwMDcyMSw4QQorMDA4MTAwLDExMTExMTAwLDhBCiswMDkwMDAsMDAwMDA3MjEsOEEKKzAxNTAwMCwwMDBGMjEzMSw4QQorMDE0MDAxLDgwMDI3QjdFLDhBCiswMTEwMDAsMDAwMDA1MDEsOEEKKzAwMTAwMCwwMDAwMDAwMCw4QQorMDBFMDAwLDAwMDAwMDAwLDhBCiswMEYwMDAsMDAwMDAwMDksOEEKKzAwMTgwMCwwMDE5MDAxNCwyMDBGMDAwOSwwMDE5MDAxNSwyMjBGMDAwOSwwMDE5MDAxNiwyNDBGMDAwOSwwMDE5MDAxNywyNjBGMDAwOSwwMDE5MDAxOCwyODBGMDAwOSwwMDE5MDA2NCwzMDBGMDAwOSwwMDE5MDA2NSwzMjBGMDAwOSwwMDE5MDA2NiwzNDBGMDAwOSwwMDE5MDA2NywzNjBGMDAwOSwwMDE5MDA2OCwzODBGMDAwOSwwMDE5MDAxRSwyMDBGMDAwQSwwMDE5MDAxRiwyMjBGMDAwQSwwMDE5MDAyMCwyNDBGMDAwQSwwMDE5MDAyMSwyNjBGMDAwQSwwMDE5MDAyMiwyODBGMDAwQSwwMDE5MDA2RSwzMDBGMDAwQSwwMDE5MDA2RiwzMjBGMDAwQSwwMDE5MDA3MCwzNDBGMDAwQSwwMDE5MDA3MSwzNjBGMDAwQSwwMDE5MDA3MiwzODBGMDAwQSwwMDE5MDAxOSwyMDBGMDAwOCwwMDE5MDAxQSwyMjBGMDAwOCwwMDE5MDAxQiwyNDBGMDAwOCwwMDE5MDAxQywyNjBGMDAwOCwwMDE5MDAxRCwyODBGMDAwOCwwMDE5MDA2OSwzMDBGMDAwOCwwMDE5MDA2QSwzMjBGMDAwOCwwMDE5MDA2QiwzNDBGMDAwOCwwMDE5MDA2QywzNjBGMDAwOCwwMDE5MDA2RCwzODBGMDAwOCwwMDE5MDAyMywyMDBGMDAwRiwwMDE5MDAyNCwyMjBGMDAwRiwwMDE5MDAyNSwyNDBGMDAwRiwwMDE5MDAyNiwyNjBGMDAwRiwwMDE5MDAyNywyODBGMDAwRiwwMDE5MDA3MywzMDBGMDAwRiwwMDE5MDA3NCwzMjBGMDAwRiwwMDE5MDA3NSwzNDBGMDAwRiwwMDE5MDA3NiwzNjBGMDAwRiwwMDE5MDA3NywzODBGMDAwRiwwMDE5MDAyOCwyMDBGMDAwRSwwMDE5MDAyOSwyMjBGMDAwRSwwMDE5MDAyQSwyNDBGMDAwRSwwMDE5MDAyQiwyNjBGMDAwRSwwMDE5MDAyQywyODBGMDAwRSwwMDE5MDA3OCwzMDBGMDAwRSwwMDE5MDA3OSwzMjBGMDAwRSwwMDE5MDA3QSwzNDBGMDAwRSwwMDE5MDA3QiwzNjBGMDAwRSwwMDE5MDA3QywzODBGMDAwRSwwMDEwMDAwMiwxMDE3MDAwOSwwMDEwMDAwMSwxMDE3MDAwOCwwMDE5MDAzNiwyMjEwMDAwNSwwMDE5MDA4NiwzMjEwMDAwNSwwMDEwMDAwMiwxMjE3MDAwQiwwMDEwMDAwMSwxMjE3MDAwQSwwMDE5MDAzNywyNDEwMDAwNSwwMDE5MDA4NywzNDEwMDAwNSwwMDE5MDA5MSwzNDA2MDAwNCwwMDE5MDA5MCwzNDA2MDAwMywwMDEwMDAwMiwyNDE5MDA0MSwwMDEwMDAwMSwyNDE5MDA0MCwwMDEwMDAwMiwyNjE5MDA1OCwwMDEwMDAwMiwzNjE5MDBBOCwwMDEwMDAwMSwyNjE5MDA1OSwwMDEwMDAwMSwzNjE5MDBBOSwwMDE5MDAzRSwyODEwMDAwNywwMDE5MDA4RSwzODEwMDAwNywwMDE5MDAzRiwyODEwMDAwNSwwMDE5MDA4RiwzODEwMDAwNSwwMDE5MDIzOSwyODBGMDAxMiwwMDE5MDI4OSwzODBGMDAxMiwwMDBFMDAyMCwyMDE5MDA1QSwwMDBFMDAyMCwyMjE5MDA1QiwwMDBFMDAyMCwyNDE5MDA1QywwMDBFMDAyMCwyNjE5MDA1RCwwMDBFMDAyMCwyODE5MDA1RSwwMDBFMDAyMCwzMDE5MDBBQSwwMDBFMDAyMCwzMjE5MDBBQiwwMDBFMDAyMCwzNDE5MDBBQywwMDBFMDAyMCwzNjE5MDBBRCwwMDBFMDAyMCwzODE5MDBBRSwwMDA4MDUwMCwyNjE5MDA0MiwwMDA4MDUwMCwzNjE5MDA5MiwwMDA4MDYwMCwyNjE5MDA0MywwMDA4MDYwMCwzNjE5MDA5MywwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDE5MDAzMSwyMTBFMDYwNiwwMDE5MDA4MSwzMTBFMDYwNiwwMDA2MDAwMSwwMzE3MDAwQSwwMDA2MDAwMiwwMzE3MDAwQiwwMDE5MDAzOCwyNTEwMDAwNSwwMDE5MDAyRCwyMTBFMDYxMCwwMDE5MDA3RCwzMTBFMDYxMCwwMDE5MDAyRSwyMTBFMDYxMSwwMDE5MDA3RSwzMTBFMDYxMSwwMDE5MDAyRiwyMTBFMDYwOCwwMDE5MDA3RiwzMTBFMDYwOCwwMDE5MDAzMCwyMTBFMDYwOSwwMDE5MDA4MCwzMTBFMDYwOSwwMDE5MDAzMiwyMTBFMDYxOCwwMDE5MDA4MiwzMTBFMDYxOCwwMDE5MDAzMywyMTBFMDYxOSwwMDE5MDA4MywzMTBFMDYxOSwwMDE5MDBCNiw0MTEzMDgwMCwwMDE5MDAzQywyNTE3MDAyQSwwMDE5MDAzRCwyNTE3MDAyQiwwMDE5MDA4QywzNTE3MDAyQSwwMDE5MDA4RCwzNTE3MDAyQiwwMDE2MDAwNCwyNTE5MDA0NCwwMDBFMDAwQywyMzE5MDA0NiwwMDBFMDAwQywzMzE5MDA5NiwwMDBFMDAwRCwyMzE5MDA0NywwMDBFMDAwRCwzMzE5MDA5NywwMDE2MDAwNCwzNTE5MDA5NCwwMDE2MDAwNSwyNTE5MDA0NSwwMDE2MDAwNSwzNTE5MDA5NSwwMDBFMDAyOCwyMzE5MDA0QSwwMDBFMDAyOCwzMzE5MDA5QSwwMDBFMDAyOSwyMzE5MDA0QiwwMDBFMDAyOSwzMzE5MDA5QiwwMDBFMDAyQSwyMzE5MDA0QywwMDBFMDAyQSwzMzE5MDA5QywwMDBFMDAyQiwyMzE5MDA0RCwwMDBFMDAyQiwzMzE5MDA5RCwwMDBFMDYyMSwyMzE5MDA2MSwwMDBFMDYyNCwyMzE5MDA2MiwwMDBFMDYyMCwzMzE5MDBCMywwMDBGMDgwNiw0MTE5MDBCNCwwMDBFMDQwMCwxNzE5MDBCOCwwMDBFMDQwMSwxNzE5MDBCOSwwMDBFMDQwMiwxNzE5MDBCQSwwMDBFMDQwMywxNzE5MDBCQiwwMDBFMDQwNCwxNzE5MDBCQywwMDBFMDQwNSwxNzE5MDBCRCwwMDBFMDQwNiwxNzE5MDBCRSwwMDBFMDQwNywxOTE5MDBCRiwwMDBFMDQwOCwxOTE5MDBDMCwwMDBFMDQwOSwxOTE5MDBDMSwwMDBFMDQwQSwxOTE5MDBDMiwwMDBFMDQwQiwxOTE5MDBDMywwMDBFMDQwQywxOTE5MDBDNCwwMDBFMDQwRCwxOTE5MDBDNSwwMDE3MDAyNCwyNTE5MDA1NiwwMDE3MDAyNSwyNTE5MDA1NywwMDE3MDAyNCwzNTE5MDBBNiwwMDE3MDAyNSwzNTE5MDBBNywwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDE5MDAzNCwyNTA5MDgwMCwwMDE5MDA4NCwzNTA5MDgwMCwwMDE5MDAzNSwyNTA5MDg4MCwwMDE5MDA4NSwzNTA5MDg4MCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDE5MDZGRiwxOTAxMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCw4QQorMDBGMDVCLDAwMTEwMDAwLDhBCiswMEYwNjgsMTQ3QjAwMDAsN0ZFRjAwMDAsMDQxOTAwMDAsN0ZERTAwMDAsMDAwQTAwMDAsRkZGODAwMDAsRkZGRTAwMDAsMDAwNDAwMDAsMjAwMDAwMDAsMzAwMDAwMDAsNDAwMDAwMDAsOEEKKzAwRjA3NCwyMDAwMDAwMCwzMDAwMDAwMCw0MDAwMDAwMCwwMTYwMDAwMCwwMTcwMDAwMCwwMTgwMDAwMCwwMDQwMDAwMCwwMDIwMDAwMCw3RUI3MDAwMCwwMDQwMDAwMCwwMDIwMDAwMCwwMjUwMDAwMCwxMDAwMDAwMCwxODAwMDAwMCwwMDAwMDAwMCwwMDAyMDAwMCwwMDBBMDAwMCwwODAwMDAwMCwyMDAwMDAwMCw0MDAwMDAwMCwwMDBDMDAwMCwwMDIwMDAwMCwwMEZBMDAwMCwwMDFDMDAwMCwyQzg4MDAwMCw4QQorMDBGMDhFLDBGQTAwMDAwLDAwMUMwMDAwLDA3RDAwMDAwLDdGRkYwMDAwLDAwMEEwMDAwLEZDMTgwMDAwLDAwMzIwMDAwLDAwN0QwMDAwLDhBCiswMEYwNDgsMDIwMDAwMDAsN0QwMDAwMDAsN0ZGRjAwMDAsN0QwMDAwMDAsMDAxNDAwMDAsMTAwMDAwMDAsMDAyRjAwMDAsMDAxRjAwMDAsMDA4MDAwMDAsMTUwMDAwMDAsMDAxMTAwMDAsMDAxMTAwMDAsMDY2NjAwMDAsMENDQzAwMDAsMjAwMDAwMDAsMDAwMDAwMDAsMDAwMDAwMDAsMDAwMTAwMDAsOEEKKzAwRTAwOCwwMDAwMDAwMCw3RkZGMDAwMCw4QQorMDBFMDE0LDIwMDAwMDAwLDYwMDAwMDAwLDhBCiswMEUwMjEsMDAwMDAwMDAsMDIwMDAwMDAsOEEKKzAwRTUwMCwwMDE5MDIwMCwwMDAwMDA5QSw4QQorMDBFMzc4LDdGRkZGRjAwLDAwMDAwMDAwLDhBCiswMEU2MjIsMDQwMDAwMDAsNzMwMDAwMDAsOEEKKzAwRTMwRSw3RkZGRkYwMCwwMDAwMDAwMCw4QQorMDBFMzFFLDdGRkZGRjAwLDAwMDAwMDAwLDhBCiswMEUzNEUsN0ZGRkZGMDAsMDAwMDAwMDAsOEEKKzAxNzAwMiwwMDAwMDAwMCw4QQorMDE3MDIxLDAwMDAwMDAwLDhBCiswMTcwMjAsMDAwMkMwMDAsOEEKKzAxNzAyNiwwMDAyMDAwMCwwMDAyMDAwMCw4MDAxMDAwMCw4QQorMDAzMDAyLDAwMDAwMDAwLDhBCiswMDMwMDEsMDAwMDE0RkYsOEEKKzAxMDAwMCwwMDAwMDAwMSw4QQorMDEwMDA0LDAwMTkwMDAwLDhBCiswMEUwMDAsMDAwODA4MDEsOEEKKzAwRjAwMCwwMDAwMDAwOSwwMDAwMDAwMCw4QQorMDBGODAyLDAwMDAwMDAxLDhBCiswMDIwMDAsMDAwMDEwMDEsOEEKKzAwMTAwMCwwMDAwMDAzMSw4QQorMDEzMDAwLDcwMDAwMDE1LDhBCiswMDYwMDAsMDAwMDFGMDEsOEEKKzAwNjgwMCwwMDIzNDAwMCwwMDAwMDAwMCwwMDQxRDAwMCwwMDAwMDAwMCwwMDc5NjAwMCwwMDAwMDAwMCwwMEM4RjAwMCwwMDAwMDAwMCwwMTMzQTAwMCwwMDAwMDAwMCwwMUJCMDAwMCwwMDAwMDAwMCwwMjVFNTAwMCwwMDAwMDAwMCwwMzFBNzAwMCwwMDAwMDAwMCwwM0U5OTAwMCwwMDAwMDAwMCwwNEMzNDAwMCwwMDAwMDAwMCwwNTlENjAwMCwwMDAwMDAwMCwwNjZDNDAwMCwwMDAwMDAwMCwwNzI0MDAwMCwwMDAwMDAwMCwwN0I5NTAwMCwwMDAwMDAwMCwwODIyQzAwMCwwMDAwMDAwMCwwODU5NDAwMCwwMDAwMDAwMCw4QQorMDA2MDAwLDAwMDAxRjIxLDhBCmRpZmYgLS1naXQgYS9UREE3NzA2X09NX3YzLjAuMl9ib290LnR4dCBiL1REQTc3MDZfT01fdjMuMC4yX2Jvb3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZDllMzgKLS0tIC9kZXYvbnVsbAorKysgYi9UREE3NzA2X09NX3YzLjAuMl9ib290LnR4dApAQCAtMCwwICsxLDU2IEBACisvLyBUREE3NzA2IE9NIFNXIFZlcnNpb246IDMuMC4yCiswMUFCMDAsMDAwMDAxMDAsOEEKKzAxQzAwMCxGQjgwMTAwMCxGQkQwNkMwMCxGQkQwOEMwMCxGQkQwRjQwMCxGQkQxMDQwMCxGRkY3MDAwMCxGRkY3MDAwMCxGRkY3MDAwMCxFMUZGRTAxQiw5MDAwNzA1Myw5MjAwNTA2Qiw5MjAwOTAxRixGQjI3MDAwMCxGRkU2MDI5OCxGQjgwMjIwMCw4QQorMDFDMDExLEUwRkZFMDAwLEU0MDAwMDAwLEMwNjAwMDIwLEZCMjcwMjQzLEMwMDA0NDY4LDRFMjI0MDAwLEZGRjcwMDAwLEQ4MDAwMDIwLEZCMTAyMjQzLDRDNjIwMDAwLEZCRDFGNjQwLEZCMTAyMDAwLEZCODJBNDQwLEMwMEI0MDIwLDkwOEFFMDAwLEMwODAwMDIwLEZDMDQwMjQzLDRDNjcwMDAwLDk0MDE0MDAwLEMwMDAyMDIwLDk0QjA0MDFCLDkwMDFDMDAwLEE4MDA0MDAwLDgxMUQ2MDAwLEEwMDFDMDFCLEZDMDQwMDY1LEZCODA1RTA2LEZCODA1NDAxLEZGRjcwMDAwLEEwMDFDMDZCLDkwQTEyMDFCLDkwMDFDMDAwLEZCMTAyMDAwLEZCRTI0ODQwLEUxMDk4MDAwLEEwMDEwMDAwLDRGQTcwMDAwLEEwMDE4MDAwLEE0OTBFMDAwLDQwQTcwNDA1LEEwMDFBMDMzLEFDOUVENDA1LDQwQTcxOTM3LEZCMTAyOUE0LDQ0QTcxMDI0LDY0QTcwMDAwLEZCRDYzODQwLEZCMTAyMDAwLEZCRDQ5QzQwLEZCMTAyMDAwLEZCQ0VFQTQwLEZCMTAyMDAwLEZCQ0JDQzQwLEEwMDIyMDAwLEZCMTAyMDI1LEMwMDk3MDIwLEZBNDgwMDAwLEZCODAwMTAwLEZCMTAyMDAwLEZCODI4NDQwLEZCMTAyMDAwLEZCRkNDQTQwLEZCMTAyMDAwLEZCRkJDRTQwLEZCMTAyMDAwLEZCRkY4RTQwLEZCMTAyMDAwLEZCRDFERTQwLEZCMTAyMDAwLEZCRDFDNjQwLEEyOEFFMDAwLEZDMDQwMDI2LEZCODAwMTAwLEZCMTAyMDAwLEZCRDlGMDQwLEZCODEwMDAxLEMwMEJFMDIwLDkwOEFFMDAwLEZCMTAyMDAwLEZCRDVEMDQwLEZCODEwMDAxLEMwMEM4MDIwLDkwOEFFMDAwLEZCMTAyMDAwLEZCRDVFMDQwLEZCODEwMDAxLEMwMEQyMDIwLDkwOEFFMDAwLEZCMTAyMDAwLEZCRDVFQzQwLEZCODEwMDAxLEMwMERDMDIwLDkwOEFFMDAwLEZCODEwMDAxLEMwMEUyMDIwLDkwOEFFMDAwLEZCMTAyMDAwLEZCRDVGQzQwLEZCODEwMDAxLEMwMEVDMDIwLDkwOEFFMDAwLEZCMTAyMDAwLEZCRDYwMjQwLEZCODEwMDAxLEMwMEY2MDIwLDkwOEFFMDAwLEZCMTAyMDAwLEZCRDYwRTQwLEZCODEwMDAxLEMwMEI0MDIwLDkwOEFFMDAwLEZCODA1MjAwLEZGMjcwMDAwLEZGRjcwMDAwLEZGRjcwMDAwLDAwNjcwMDAwLEMwMDAyNEM0LEZCODExNjA2LEE4MDE0MDAwLEZCODEzMjAxLEZGQTgwMjkzLDk0MDE0MDAwLEMwMDBBNEM0LEZCODEzMjA2LEMwQzAwMDIwLEZDMDQwMjIzLDU0MjcwMDAwLDAwQTcwMDAwLEZDMDQwMjQ1LEE4MDE0MDAwLDk0QjAyMDAwLEZGQTgwMjkxLEZGQTgwMzEyLEZCODEzNjAxLEZGQTgwMTEzLDk0MDE0MDAwLEZCMTAyMDAwLEZCREVDMDQwLEZCODAwMDgwLEZCMTAyMDAwLEZCRDY1MjQwLEQ0MDAwMDIwLEZDMDQwMjQzLEZDMDQwMzQzLDkxRDAwMDAwLEEzRDAwMDAwLEZGQTgwNEMwLEZCODE0NDA2LEEzRTAwMDAwLEZGQTgwMkU2LDkzRTAwMDAwLDkxQzAwMDAwLEEzQzAwMDAwLEZGQTgwNEMwLEZCODE1MjA2LEZCODAwMDgwLEZCMTAyMDAwLEZCRDZCRTQwLEQ0MDAwMDIwLEZDMDQwMjQzLEZDMDQwMzQzLDkxRDAwMDAwLEEzRDAwMDAwLEZGQTgwNEMwLEZCODE2NjA2LEEzRTAwMDAwLEZGQTgwMkU2LDkzRTAwMDAwLDkxQzAwMDAwLEEzQzAwMDAwLEZGQTgwNEMwLEZCODE3NDA2LEZCODAwMDgwLEEwNjIwMDAwLEZGQTgwNDg3LEZCODFBODA2LEEyNjkwMDAwLEFDNjQwMDAwLEMwMDAzMDIwLEZDMDQwNERFLEZCODE5QTBDLEZGQTgwNDhCLEZCODFBNjA3LEU0NzY0MDAwLDkyNzRFMDAwLEU0NzVDMDFCLDkwNzRFMDAwLEZCODFBNjAwLEZGQTgwNDhCLEZCODFBNjA3LEU0NzVDMDAwLDkyNzRFMDAwLEU0NzY0MDFCLDkwNzRFMDAwLEZCRUM0MDAwLEZCRUJFQzAwLEZCODAwMDgwLEEwNjI2MDAwLEMwMDA0NEM0LEZCODFDNDA2LEZCMTAyMDZELDkwNjI2MDAwLEZCRDYxODQwLEZCMTAyMDAwLEZCRTk0NDQwLEUwNkNFMDAwLEM4MTY4MDIwLEZCODAwMTAwLEZCODFFQTAwLEMwMDIyNEM0LEZCODFFNjA2LEZCMTAyMDZELDkwNjI2MDAwLEZCRDYyODQwLEZCMTAyMDAwLEZCRTlBMDQwLEMwMDA0MDIwLDkwN0Y4MDAwLEFDNjI2MDAwLEEwMjI0MDAwLEJDOURDMDAwLEZGQTgwMjgxLEE4NjFDMDAwLEZCODFFQTAxLDkwMjI0MDAwLDgwNjI0MDAwLEM4MEZBMDIwLEZCODAwMTAwLEZCODAwMDgwLEEyNjI4MDAwLEMwMDBDNEQ0LEZCODI2NjA2LEEwMDE2MDAwLEZCMTAyMDI1LEMwMUZEMDIwLEZBNDgwMDAwLEZCODAwMTAwLEZDMDQwMDFCLDkwNjI4MDAwLEEwNjIyMDAwLEZGQTgwMjg3LDkwNjIyMDAwLEEwNjIwMDAwLEZDMDQxMDI1LEZDMDQwMDYzLEZCODIxMDA2LEZGQTgwM0U2LDkyNjIwMDAwLEEwN0IyMDAwLEZCMTAyMDI1LEMwMjFEMDIwLEZBNDgwMDAwLEZCODAwMTAwLEEwNzlBMDAwLEZCMTAyMDI1LEMwMjI3MDIwLEZBNDgwMDAwLEZCODAwMTAwLEEwNzg0MDAwLEZCMTAyMDI1LEMwMjMxMDIwLEZBNDgwMDAwLEZCODAwMTAwLEEwN0JBMDAwLEZCMTAyMDI1LEMwMjNCMDIwLEZBNDgwMDAwLEZCODAwMTAwLEMwMDAyMDIwLDkwOTE2MDAwLEMwMkM2MDIwLEZDMDQwMjQzLEMwMEYwNDY4LEEyNjkwMDAwLDRFMjYyMDAwLEZDMDQwNERFLEZCODI2MDA5LEZGRjcwMDAwLEEwMDA2MDAwLEMwMkNBMDIwLEZDMDQwMjQzLEMwMDEwNDY4LEEyNjkwMDAwLDRFMjYyMDAwLEZDMDQwNERFLEZCODI2MDBFLEE4OUVBMDAwLEZCODI2QTAxLEZGRjcwMDAwLDgwOTBDMDAwLEM4ODAyMDIwLEZCODAwMTAwLEZCODAwMDgwLEMxRjFBMDIwLDkwMDM2MDAwLEZCMTAyMDAwLEZCQ0Y5QTQwLEZCODAwMDgwLEMxRjFDMDIwLDkwMDM2MDAwLEZCMTAyMDAwLEZCQ0Y5QTQwLEZCMTAyMDAwLEZCRDkwODQwLEZCODAwMDgwLEFBMDE0MDAwLEMwMDIyNTU0LEMwMDA2NDI4LEZCODI4RTA0LEZCRDE1MDAwLEUwOTEwMDAwLEZGQTgwNEQzLEZCODI5RTA1LEU0OUVFMDAwLDAwODAyMDAwLEZCODJBMDAxLEZGRjcwMDAwLEFBQjAyMDAwLEEzNjAwMDAwLEZCRDE4NDAwLEZCODAwMDgwLEZCMTAyMDAwLEZCODJCMjQwLEMxRjFFMDIwLDkwMDM2MDAwLEZCMTAyMDAwLEZCQ0Y5QTQwLEZCODAwMDgwLEMwMjc2MDIwLDk0MDE4MDAwLEMwMjZDMDIwLDk0MDFDMDAwLEZCODAwMDgxLEMwMkMwMDIwLDk0MDI0MDAwLEMxRjE4MDIwLDkwMDM2MDAwLEZCMTAyMDAwLEZCQ0Y5QTQwLEZCODAwMDgwLDhBCiswMUNGNjUsQzQwMDAwQjYsQ0EwMDAwQ0QsMDEwMTAzMDAsQzYwMDExRDAsQzQwMDAwNUIsQzMwNkY1NDAsQzI1MzdGMDAsRkE3RkZGRkYsRjUwMDAwMDYsRjIwMzUwMDAsRjEwNTAwMDAsRTIzMDAwMDAsREIwMDM5MDAsMDUwMTAzMDAsMjcwMDIwMDAsMjYyMDAwMDAsMUIwMjAwMDAsMTkwMjMwMDAsMTUwMDAwMDAsMDIwMjgwMDAsOTEwMDcwMDAsOTAwMDcwMDAsOEYwMDcwMDAsOEUwMDcwMDAsN0YxQzQ0NTYsN0MwMEEwMDAsN0ExOTk5OUEsNzkwMDAyMDAsNzgwMDIwMDAsNzcwODAwMDAsRTkwMDAwQUQsRTgwMDAwOUMsMDkwMTA0MDAsQ0EwMDAwRDYsREIwMDAwQkUsQzQwMDAwRjYsMDE4MDAzMDAsNjEwMDAwODQsMDA4MDA0MDAsMDAwMDAwMDAsMDAwMTBGNjcsMDAwMDAwMDAsMDAwNDBGOEIsOTE4MDAwMDAsOTAwMDQ3NEEsOEYyMDAwMUYsOEUwMUE1N0MsOEQyMDAwMUYsOEMwMUEwMDQsOEIyMDAwMUYsOEEwMTlFMTAsODkyMDAwMUYsODgwMTlEQUMsODcyMDAwMUMsODYwMTlCNTQsODUyMDAwMUMsODQwMTk4RkMsODMyMDAwMUMsODIwMTk4OTgsODE0MDAwMDAsODAwMTgyQjgsN0Y4MDAwMDAsN0UwMTdDMTQsN0Q0MDAwMDAsN0MwMTcyODIsN0IyMDAwMUYsN0EwMTZCNDgsNzkyMDAwMUYsNzgwMTZBRTQsNzcyMDAwMUYsNzYwMTM4ODAsNzUyMDAwMUYsNzQwMTM4MUMsNzM4MDAwMDAsNzIwMTMxNzgsMTAwMDAzMDAsMDAwMTBGQjAsOEEKKzAxOTAwQSwwMDAwMDAwMCw4QQorMDE5MEZGLDAwMDAwMDAwLDhBCiswMUI3RkYsMDAwMDAwMDAsOEEKKzAxNDAwNCwwMDUwMDAxMCwwMTgwMTA4Miw4QQorMDE0MDAzLDAwMDAwMDAwLDhBCiswMTQwMDcsMDAwMTAwMDAsRkZGRkZGRkYsMDAwMDAwMEIsOEEKKzAxNDAwMSxCMEMyN0Y3RSxCMEMyN0ZGRSw4QQorMDBCMDAwLDAwMDAwMTExLDhBCiswMEEwMDAsMDAwMDAwMzEsMDAxNkNFOTksMDAwMEZGRkYsMDAwNTlDQzAsOEEKKzAwQjAwMCwwMDAwMjExMSw4QQorMDA4MDAwLDAwMDAwNzIxLDhBCiswMDgxMDAsMTExMTExMDAsOEEKKzAwOTAwMCwwMDAwMDcyMSw4QQorMDE1MDAwLDAwMEYyMTMxLDhBCiswMTQwMDEsODAwMjdCN0UsOEEKKzAxMTAwMCwwMDAwMDUwMSw4QQorMDAxMDAwLDAwMDAwMDAwLDhBCiswMEUwMDAsMDAwMDAwMDAsOEEKKzAwRjAwMCwwMDAwMDAwOSw4QQorMDAxODAwLDAwMTkwMDE0LDIwMEYwMDA5LDAwMTkwMDE1LDIyMEYwMDA5LDAwMTkwMDE2LDI0MEYwMDA5LDAwMTkwMDE3LDI2MEYwMDA5LDAwMTkwMDE4LDI4MEYwMDA5LDAwMTkwMDc0LDMwMEYwMDA5LDAwMTkwMDc1LDMyMEYwMDA5LDAwMTkwMDc2LDM0MEYwMDA5LDAwMTkwMDc3LDM2MEYwMDA5LDAwMTkwMDc4LDM4MEYwMDA5LDAwMTkwMDFFLDIwMEYwMDBBLDAwMTkwMDFGLDIyMEYwMDBBLDAwMTkwMDIwLDI0MEYwMDBBLDAwMTkwMDIxLDI2MEYwMDBBLDAwMTkwMDIyLDI4MEYwMDBBLDAwMTkwMDdFLDMwMEYwMDBBLDAwMTkwMDdGLDMyMEYwMDBBLDAwMTkwMDgwLDM0MEYwMDBBLDAwMTkwMDgxLDM2MEYwMDBBLDAwMTkwMDgyLDM4MEYwMDBBLDAwMTkwMDE5LDIwMEYwMDA4LDAwMTkwMDFBLDIyMEYwMDA4LDAwMTkwMDFCLDI0MEYwMDA4LDAwMTkwMDFDLDI2MEYwMDA4LDAwMTkwMDFELDI4MEYwMDA4LDAwMTkwMDc5LDMwMEYwMDA4LDAwMTkwMDdBLDMyMEYwMDA4LDAwMTkwMDdCLDM0MEYwMDA4LDAwMTkwMDdDLDM2MEYwMDA4LDAwMTkwMDdELDM4MEYwMDA4LDAwMTkwMDIzLDIwMEYwMDBGLDAwMTkwMDI0LDIyMEYwMDBGLDAwMTkwMDI1LDI0MEYwMDBGLDAwMTkwMDI2LDI2MEYwMDBGLDAwMTkwMDI3LDI4MEYwMDBGLDAwMTkwMDgzLDMwMEYwMDBGLDAwMTkwMDg0LDMyMEYwMDBGLDAwMTkwMDg1LDM0MEYwMDBGLDAwMTkwMDg2LDM2MEYwMDBGLDAwMTkwMDg3LDM4MEYwMDBGLDAwMTkwMDI4LDIwMEYwMDBFLDAwMTkwMDI5LDIyMEYwMDBFLDAwMTkwMDJBLDI0MEYwMDBFLDAwMTkwMDJCLDI2MEYwMDBFLDAwMTkwMDJDLDI4MEYwMDBFLDAwMTkwMDg4LDMwMEYwMDBFLDAwMTkwMDg5LDMyMEYwMDBFLDAwMTkwMDhBLDM0MEYwMDBFLDAwMTkwMDhCLDM2MEYwMDBFLDAwMTkwMDhDLDM4MEYwMDBFLDAwMTAwMDAyLDEwMTcwMDA5LDAwMTAwMDAxLDEwMTcwMDA4LDAwMTkwMDM2LDIyMTAwMDA1LDAwMTkwMDk2LDMyMTAwMDA1LDAwMTAwMDAyLDEyMTcwMDBCLDAwMTAwMDAxLDEyMTcwMDBBLDAwMTkwMDM3LDI0MTAwMDA1LDAwMTkwMDk3LDM0MTAwMDA1LDAwMTkwMDlGLDM0MDYwMDA0LDAwMTkwMDlFLDM0MDYwMDAzLDAwMTAwMDAyLDI0MTkwMDNGLDAwMTAwMDAxLDI0MTkwMDNFLDAwMTAwMDAyLDI2MTkwMDYyLDAwMTAwMDAyLDM2MTkwMEMyLDAwMTAwMDAxLDI2MTkwMDYzLDAwMTAwMDAxLDM2MTkwMEMzLDAwMTkwMDNDLDI4MTAwMDA3LDAwMTkwMDlDLDM4MTAwMDA3LDAwMTkwMDNELDI4MTAwMDA1LDAwMTkwMDlELDM4MTAwMDA1LDAwMTkwMjM5LDI4MEYwMDEyLDAwMTkwMjk5LDM4MEYwMDEyLDAwMEUwMDIwLDIwMTkwMDY0LDAwMEUwMDIwLDIyMTkwMDY1LDAwMEUwMDIwLDI0MTkwMDY2LDAwMEUwMDIwLDI2MTkwMDY3LDAwMEUwMDIwLDI4MTkwMDY4LDAwMEUwMDIwLDMwMTkwMEM0LDAwMEUwMDIwLDMyMTkwMEM1LDAwMEUwMDIwLDM0MTkwMEM2LDAwMEUwMDIwLDM2MTkwMEM3LDAwMEUwMDIwLDM4MTkwMEM4LDAwMDgwNjAwLDI2MTkwMDRDLDAwMDgwNjAwLDM2MTkwMEFDLDAwMDgwNTAwLDI2MTkwMDRELDAwMDgwNTAwLDM2MTkwMEFELDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMTkwMDMxLDIxMEUwNjA2LDAwMTkwMDkxLDMxMEUwNjA2LDAwMDYwMDAxLDAzMTcwMDBBLDAwMDYwMDAyLDAzMTcwMDBCLDAwMTkwMDM4LDI1MTAwMDA1LDAwMTkwMDJELDIxMEUwNjEwLDAwMTkwMDhELDMxMEUwNjEwLDAwMTkwMDJFLDIxMEUwNjExLDAwMTkwMDhFLDMxMEUwNjExLDAwMTkwMDJGLDIxMEUwNjA4LDAwMTkwMDhGLDMxMEUwNjA4LDAwMTkwMDMwLDIxMEUwNjA5LDAwMTkwMDkwLDMxMEUwNjA5LDAwMTkwMDMyLDIxMEUwNjE4LDAwMTkwMDkyLDMxMEUwNjE4LDAwMTkwMDMzLDIxMEUwNjE5LDAwMTkwMDkzLDMxMEUwNjE5LDAwMTkwMERDLDQxMTMwODAwLDAwMTkwMDNBLDI1MTcwMDJBLDAwMTkwMDNCLDI1MTcwMDJCLDAwMTkwMDlBLDM1MTcwMDJBLDAwMTkwMDlCLDM1MTcwMDJCLDAwMTYwMDA0LDI1MTkwMDRFLDAwMEUwMDBDLDIzMTkwMDUwLDAwMEUwMDBDLDMzMTkwMEIwLDAwMEUwMDBELDIzMTkwMDUxLDAwMEUwMDBELDMzMTkwMEIxLDAwMTYwMDA0LDM1MTkwMEFFLDAwMTYwMDA1LDI1MTkwMDRGLDAwMTYwMDA1LDM1MTkwMEFGLDAwMEUwMDI4LDIzMTkwMDU0LDAwMEUwMDI4LDMzMTkwMEI0LDAwMEUwMDI5LDIzMTkwMDU1LDAwMEUwMDI5LDMzMTkwMEI1LDAwMEUwMDJBLDIzMTkwMDU2LDAwMEUwMDJBLDMzMTkwMEI2LDAwMEUwMDJCLDIzMTkwMDU3LDAwMEUwMDJCLDMzMTkwMEI3LDAwMEUwNjIxLDIzMTkwMDVGLDAwMEUwNjI0LDIzMTkwMDYwLDAwMEUwNjIwLDMzMTkwMEMxLDAwMEYwODA2LDQxMTkwMERBLDAwMEUwNDAwLDE3MTkwMERELDAwMEUwNDAxLDE3MTkwMERFLDAwMEUwNDAyLDE3MTkwMERGLDAwMEUwNDAzLDE3MTkwMEUwLDAwMEUwNDA0LDE3MTkwMEUxLDAwMEUwNDA1LDE3MTkwMEUyLDAwMEUwNDA2LDE3MTkwMEUzLDAwMEUwNDA3LDE5MTkwMEU0LDAwMEUwNDA4LDE5MTkwMEU1LDAwMEUwNDA5LDE5MTkwMEU2LDAwMEUwNDBBLDE5MTkwMEU3LDAwMEUwNDBCLDE5MTkwMEU4LDAwMEUwNDBDLDE5MTkwMEU5LDAwMEUwNDBELDE5MTkwMEVBLDAwMTcwMDI0LDI1MTkwMDUyLDAwMTcwMDI1LDI1MTkwMDUzLDAwMTcwMDI0LDM1MTkwMEIyLDAwMTcwMDI1LDM1MTkwMEIzLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMTkwMDM0LDI1MDkwODgwLDAwMTkwMDk0LDM1MDkwODgwLDAwMTkwMDM1LDI1MDkwODAwLDAwMTkwMDk1LDM1MDkwODAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMTkwNkZGLDE5MDEwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDAwMDAwMDAwLDhBCiswMEYwNUIsMDAxMTAwMDAsOEEKKzAwRjA2OCwxNDdCMDAwMCw3RkVGMDAwMCwwNDE5MDAwMCw3RkRFMDAwMCwwMDBBMDAwMCxGRkY4MDAwMCxGRkZFMDAwMCwwMDA0MDAwMCwyMDAwMDAwMCwzMDAwMDAwMCw0MDAwMDAwMCw4QQorMDBGMDc0LDIwMDAwMDAwLDMwMDAwMDAwLDQwMDAwMDAwLDAxNjAwMDAwLDAxNzAwMDAwLDAxODAwMDAwLDAwNDAwMDAwLDAwMjAwMDAwLDdFQjcwMDAwLDAwNDAwMDAwLDAwMjAwMDAwLDAyNTAwMDAwLDEwMDAwMDAwLDE4MDAwMDAwLDAwMDAwMDAwLDAwMDIwMDAwLDAwMEEwMDAwLDA4MDAwMDAwLDIwMDAwMDAwLDQwMDAwMDAwLDAwMEMwMDAwLDAwMjAwMDAwLDAwRkEwMDAwLDAwMUMwMDAwLDJDODgwMDAwLDhBCiswMEYwOEUsMEZBMDAwMDAsMDAxQzAwMDAsMDdEMDAwMDAsN0ZGRjAwMDAsMDAwQTAwMDAsRkMxODAwMDAsMDAzMjAwMDAsMDA3RDAwMDAsOEEKKzAwRjA0OCwwMjAwMDAwMCw3RDAwMDAwMCw3RkZGMDAwMCw3RDAwMDAwMCwwMDE0MDAwMCwxMDAwMDAwMCwwMDJGMDAwMCwwMDFGMDAwMCwwMDgwMDAwMCwxNTAwMDAwMCwwMDExMDAwMCwwMDExMDAwMCwwNjY2MDAwMCwwQ0NDMDAwMCwyMDAwMDAwMCwwMDAwMDAwMCwwMDAwMDAwMCwwMDAxMDAwMCw4QQorMDBFMDA4LDAwMDAwMDAwLDdGRkYwMDAwLDhBCiswMEUwMTQsMjAwMDAwMDAsNjAwMDAwMDAsOEEKKzAwRTAyMSwwMDAwMDAwMCwwMjAwMDAwMCw4QQorMDBFNTAwLDAwMTkwMjAwLDAwMDAwMDlBLDhBCiswMEUzNzgsN0ZGRkZGMDAsMDAwMDAwMDAsOEEKKzAwRTYyMiwwNDAwMDAwMCw3MzAwMDAwMCw4QQorMDBFMzBFLDdGRkZGRjAwLDAwMDAwMDAwLDhBCiswMEUzMUUsN0ZGRkZGMDAsMDAwMDAwMDAsOEEKKzAwRTM0RSw3RkZGRkYwMCwwMDAwMDAwMCw4QQorMDE3MDAyLDAwMDAwMDAwLDhBCiswMTcwMjEsMDAwMDAwMDAsOEEKKzAxNzAyMCwwMDAyQzAwMCw4QQorMDE3MDI2LDAwMDIwMDAwLDAwMDIwMDAwLDgwMDEwMDAwLDhBCiswMDMwMDIsMDAwMDAwMDAsOEEKKzAwMzAwMSwwMDAwMTRGRiw4QQorMDEwMDAwLDAwMDAwMDAxLDhBCiswMTAwMDQsMDAxOTAwMDAsOEEKKzAwRTAwMCwwMDA4MDgwMSw4QQorMDBGMDAwLDAwMDAwMDA5LDAwMDAwMDAwLDhBCiswMEY4MDIsMDAwMDAwMDEsOEEKKzAwMjAwMCwwMDAwMTAwMSw4QQorMDAxMDAwLDAwMDAwMDMxLDhBCiswMTMwMDAsNzAwMDAwMTUsOEEKKzAwNjAwMCwwMDAwMUYwMSw4QQorMDA2ODAwLDAwMjM0MDAwLDAwMDAwMDAwLDAwNDFEMDAwLDAwMDAwMDAwLDAwNzk2MDAwLDAwMDAwMDAwLDAwQzhGMDAwLDAwMDAwMDAwLDAxMzNBMDAwLDAwMDAwMDAwLDAxQkIwMDAwLDAwMDAwMDAwLDAyNUU1MDAwLDAwMDAwMDAwLDAzMUE3MDAwLDAwMDAwMDAwLDAzRTk5MDAwLDAwMDAwMDAwLDA0QzM0MDAwLDAwMDAwMDAwLDA1OUQ2MDAwLDAwMDAwMDAwLDA2NkM0MDAwLDAwMDAwMDAwLDA3MjQwMDAwLDAwMDAwMDAwLDA3Qjk1MDAwLDAwMDAwMDAwLDA4MjJDMDAwLDAwMDAwMDAwLDA4NTk0MDAwLDAwMDAwMDAwLDhBCiswMDYwMDAsMDAwMDFGMjEsOEEKZGlmZiAtLWdpdCBhL1dIRU5DRSBiL1dIRU5DRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODc1ZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvV0hFTkNFCkBAIC0wLDAgKzEsMjM1MiBAQAorICAgICAgICAgICAgICoqKioqKioqKioKKyAgICAgICAgICAgICAqIFdIRU5DRSAqCisgICAgICAgICAgICAgKioqKioqKioqKgorCitUaGlzIGZpbGUgYXR0ZW1wdHMgdG8gZG9jdW1lbnQgdGhlIG9yaWdpbiBhbmQgbGljZW5zaW5nIGluZm9ybWF0aW9uLAoraWYga25vd24sIGZvciBlYWNoIHBpZWNlIG9mIGZpcm13YXJlIGRpc3RyaWJ1dGVkIGZvciB1c2Ugd2l0aCB0aGUgTGludXgKK2tlcm5lbC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBhbWJhc3NhZG9yIC0tIE1hZGdlIEFtYmFzc2Fkb3IgKENvbGxhZ2UgUENJIDE1NSBTZXJ2ZXIpIEFUTSBOSUMuCisKK0ZpbGU6IGF0bXNhcjExLmZ3CisKK0xpY2VuY2U6IEFsbGVnZWRseSBHUEx2MissIGJ1dCBubyBzb3VyY2UgdmlzaWJsZS4gTWFya2VkOgorCisgIE1hZGdlIEFtYmFzc2Fkb3IgQVRNIEFkYXB0ZXIgbWljcm9jb2RlLgorICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSAgTWFkZ2UgTmV0d29ya3MgTHRkLgorCisgIFRoaXMgbWljcm9jb2RlIGRhdGEgaXMgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UuIFRoZSBHUEwgaXMgY29udGFpbmVkIGluIC91c3IvZG9jL2NvcHlyaWdodC9HUEwgb24gYQorICBEZWJpYW4gc3lzdGVtIGFuZCBpbiB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBMaW51eCBrZXJuZWwgc291cmNlLgorCisgIFdlIHdvdWxkIHByZWZlciB5b3Ugbm90IHRvIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgd2l0aG91dAorICBjb25zdWx0YXRpb24gYW5kIG5vdCB0byBhc2sgZm9yIGFzc2VtYmx5L290aGVyIG1pY3JvY29kZSBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogc25kLWtvcmcxMjEyIC0tIEtvcmcgMTIxMiBJTyBhdWRpbyBkZXZpY2UKKworRmlsZToga29yZy9rMTIxMi5kc3AKKworTGljZW5jZTogVW5rbm93bgorCitGb3VuZCBpbiBhbHNhLWZpcm13YXJlIHBhY2thZ2UgaW4gaGV4IGZvcm07IG5vIGxpY2Vuc2luZyBpbmZvcm1hdGlvbi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBzbmQtbWFlc3RybzMgLS0gRVNTIEFsbGVncm8gTWFlc3RybzMgYXVkaW8gZGV2aWNlCisKK0ZpbGU6IGVzcy9tYWVzdHJvM19hc3NwX2tlcm5lbC5mdworRmlsZTogZXNzL21hZXN0cm8zX2Fzc3BfbWluaXNyYy5mdworCitMaWNlbmNlOiBVbmtub3duCisKK0ZvdW5kIGluIGFsc2EtZmlybXdhcmUgcGFja2FnZSBpbiBoZXggZm9ybSB3aXRoIGEgY29tbWVudCBjbGFpbWluZyB0bworYmUgR1BMdjIrLCBidXQgd2l0aG91dCBzb3VyY2UgLS0gYW5kIHdpdGggYW5vdGhlciBjb21tZW50IHNheWluZyAiRVNTCitkcm9wcyBiaW5hcnkgZHNwIGNvZGUgaW1hZ2VzIG9uIG91ciBoZWFkcywgYnV0IHdlIGRvbid0IGdldCB0byBzZWUKK3NwZWNzIG9uIHRoZSBkc3AuIgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHNuZC15bWZwY2kgLS0gWWFtYWhhIFlNRjcyNC83NDAvNzQ0Lzc1NCBhdWRpbyBkZXZpY2VzCisKK0ZpbGU6IHlhbWFoYS9kczFfY3RybC5mdworRmlsZTogeWFtYWhhL2RzMV9kc3AuZncKK0ZpbGU6IHlhbWFoYS9kczFlX2N0cmwuZncKKworTGljZW5jZTogVW5rbm93bgorCitGb3VuZCBhbHNhLWZpcm13YXJlIHBhY2thZ2UgaW4gaGV4IGZvcm0sIHdpdGggdGhlIGZvbGxvd2luZyBjb21tZW50OgorICAgQ29weXJpZ2h0IChjKSAxOTk3LTE5OTkgWWFtYWhhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGFkdmFuc3lzIC0gQWR2YW5TeXMgU0NTSQorCitGaWxlOiBhZHZhbnN5cy9tY29kZS5iaW4KK0ZpbGU6IGFkdmFuc3lzLzM1NTAuYmluCitGaWxlOiBhZHZhbnN5cy8zOEMwODAwLmJpbgorRmlsZTogYWR2YW5zeXMvMzhDMTYwMC5iaW4KKworTGljZW5jZTogQlNELCBubyBzb3VyY2UgYXZhaWxhYmxlLgorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHFsYTEyODAgLSBRbG9naWMgUUxBIDEyNDAvMXg4MC8xeDE2MCBTQ1NJIHN1cHBvcnQKKworRmlsZTogcWxvZ2ljLzEwNDAuYmluCitGaWxlOiBxbG9naWMvMTI4MC5iaW4KK0ZpbGU6IHFsb2dpYy8xMjE2MC5iaW4KKworTGljZW5jZTogQWxsZWdlZGx5IEdQTHYyKywgYnV0IG5vIHNvdXJjZSB2aXNpYmxlLiBNYXJrZWQ6CisKKyAgICAgICAgICAgICAgICAgICBRTE9HSUMgTElOVVggU09GVFdBUkUKKyAgUUxvZ2ljIElTUDEyODAvIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IDIuMi54IGFuZCAyLjQueAorICBDb3B5cmlnaHQgKEMpIDIwMDEgUWxvZ2ljIENvcnBvcmF0aW9uICh3d3cucWxvZ2ljLmNvbSkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBzbWN0ciAtLSBTTUMgSVNBL01DQSBUb2tlbiBSaW5nIGFkYXB0ZXIKKworRmlsZTogdHJfc21jdHIuYmluCitWZXJzaW9uOiA2LjNDMQorSW5mbzogTUNULkJJTiB2Ni4zQzEgMDMvMDEvOTUKKworT3JpZ2luYWwgbGljZW5jZSBpbmZvOgorCisgKiBUaGlzIGZpcm13YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdSBzdHJpY3RseSBmb3IgdXNlIGluIGNvbmp1bmN0aW9uCisgKiB3aXRoIHRoZSB1c2Ugb2YgU01DIFRva2VuUmluZyBhZGFwdGVycy4gVGhlcmUgaXMgbm8gd2FyYW50eQorICogZXhwcmVzc2VkIG9yIGltcGxpZWQgYWJvdXQgaXRzIGZpdG5lc3MgZm9yIGFueSBwdXJwb3NlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGthd2V0aCAtLSBVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgRXRoZXJuZXQgZGV2aWNlCisKK0ZpbGU6IGthd2V0aC9uZXdfY29kZS5iaW4KK0ZpbGU6IGthd2V0aC9uZXdfY29kZV9maXguYmluCitGaWxlOiBrYXdldGgvdHJpZ2dlcl9jb2RlLmJpbgorRmlsZToga2F3ZXRoL3RyaWdnZXJfY29kZV9maXguYmluCisKK0xpY2VuY2U6IFVua25vd24KKworRm91bmQgaW4gaGV4IGZvcm0gaW4gdGhlIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogZHZiLXR0dXNiLWJ1ZGdldCAtLSBUZWNobm90cmVuZC9IYXVwcGF1Z2UgTm92YS1VU0IgZGV2aWNlcworCitGaWxlOiB0dHVzYi1idWRnZXQvZHNwYm9vdGNvZGUuYmluCisKK0xpY2VuY2U6IFVua25vd24KKworRm91bmQgaW4gaGV4IGZvcm0gaW4gdGhlIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjoga2V5c3BhbiAtLSBVU0IgS2V5c3BhbiBVU0EteHh4IHNlcmlhbCBkZXZpY2UKKworRmlsZToga2V5c3Bhbi9tcHIuZncKK0ZpbGU6IGtleXNwYW4vdXNhMTh4LmZ3CitGaWxlOiBrZXlzcGFuL3VzYTE5LmZ3CitGaWxlOiBrZXlzcGFuL3VzYTE5cWkuZncKK0ZpbGU6IGtleXNwYW4vdXNhMTlxdy5mdworRmlsZToga2V5c3Bhbi91c2ExOXcuZncKK0ZpbGU6IGtleXNwYW4vdXNhMjguZncKK0ZpbGU6IGtleXNwYW4vdXNhMjh4YS5mdworRmlsZToga2V5c3Bhbi91c2EyOHhiLmZ3CitGaWxlOiBrZXlzcGFuL3VzYTI4eC5mdworRmlsZToga2V5c3Bhbi91c2E0OXcuZncKK0ZpbGU6IGtleXNwYW4vdXNhNDl3bGMuZncKKworQ29udmVydGVkIGZyb20gSW50ZWwgSEVYIGZpbGVzLCB1c2VkIGluIG91ciBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgaWhleC4KKworT3JpZ2luYWwgbGljZW5jZSBpbmZvcm1hdGlvbjoKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZQorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQKKwlLZXlzcGFuJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZQorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUKKwlrZXlzcGFuLmMgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluCisJcGFydCwgcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4iCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjoga2V5c3Bhbl9wZGEgLS0gVVNCIEtleXNwYW4gUERBIHNpbmdsZS1wb3J0IHNlcmlhbCBkZXZpY2UKKworRmlsZToga2V5c3Bhbl9wZGEva2V5c3Bhbl9wZGEuZncKK1NvdXJjZToga2V5c3Bhbl9wZGEva2V5c3Bhbl9wZGEuUworCitGaWxlOiBrZXlzcGFuX3BkYS94aXJjb21fcGdzLmZ3CitTb3VyY2U6IGtleXNwYW5fcGRhL3hpcmNvbV9wZ3MuUworCitTb3VyY2U6IGtleXNwYW5fcGRhL01ha2VmaWxlCisKK0xpY2VuY2U6IEdQTHYyKworCitDb21waWxlZCBmcm9tIG9yaWdpbmFsIDgwNTEgc291cmNlIGludG8gSW50ZWwgSEVYLCB1c2VkIGluIG91ciBiaW5hcnkgaWhleCBmb3JtLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGVtaTI2IC0tIEVNSSAyfDYgVVNCIEF1ZGlvIGludGVyZmFjZQorCitGaWxlOiBlbWkyNi9iaXRzdHJlYW0uZncKK1ZlcnNpb246IDEuMS4xLjEzMQorSW5mbzogREFURT0yMDAxZGVjMDYKKworRmlsZTogZW1pMjYvZmlybXdhcmUuZncKK1ZlcnNpb246IDEuMC4yLjkxNgorSW5mbzogREFURT0xMi4wMi4yMDAyCisKK0ZpbGU6IGVtaTI2L2xvYWRlci5mdworCitDb252ZXJ0ZWQgZnJvbSBJbnRlbCBIRVggZmlsZXMsIHVzZWQgaW4gb3VyIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBpaGV4LgorCitPcmlnaW5hbCBsaWNlbmNlIGluZm9ybWF0aW9uOgorLyoKKyAqIFRoaXMgZmlybXdhcmUgaXMgZm9yIHRoZSBFbWFnaWMgRU1JIDJ8NiBBdWRpbyBJbnRlcmZhY2UKKyAqCisgKiBUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBpcyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMiBFbWFnaWMKKyAqIGFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZAorICogb3IgcHVibGljIGFjY2VzcyB0byB0aGlzIGZpcm13YXJlIHdoaWNoIGlzIGEgdHJhZGUgc2VjcmV0IG9mIEVtYWdpYywKKyAqIGFuZCB3aGljaCBtYXkgbm90IGJlIHJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8KKyAqIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IEVtYWdpYydzIHdyaXR0ZW4gY29uc2VudC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUKKyAqIGltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbAorICogaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4KKyAqCisgKiBUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCB0aGUKKyAqIEVtYWdpYyBFTUkgMnw2IEF1ZGlvIEludGVyZmFjZS4gRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YKKyAqIGFueSBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwKKyAqIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuCisgKi8KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBlbWk2MiAtLSBFTUkgNnwybSBVU0IgQXVkaW8gaW50ZXJmYWNlCisKK0ZpbGU6IGVtaTYyL2JpdHN0cmVhbS5mdworVmVyc2lvbjogMS4wLjAuMTkxCitJbmZvOiBEQVRFPSAyMDAyb2N0MjgKKworRmlsZTogZW1pNjIvbG9hZGVyLmZ3CitTb3VyY2U6IEVNSUxPQUQuSEVYCitWZXJzaW9uOiAxLjAuMi4wMDIKK0luZm86IERBVEU9MTAuMDEuMjAwMgorCitGaWxlOiBlbWk2Mi9taWRpLmZ3CitTb3VyY2U6IEVNSTYyTUZXLkhFWAorVmVyc2lvbjogMS4wNC4wNjIKK0luZm86IERBVEU9MTYuMTAuMjAwMgorCitGaWxlOiBlbWk2Mi9zcGRpZi5mdworU291cmNlOiBFTUk2MlNGVy5IRVgKK1ZlcnNpb246IDEuMDQuMDYyCitJbmZvOiBEQVRFPTE2LjEwLjIwMDIKKworQ29udmVydGVkIGZyb20gSW50ZWwgSEVYIGZpbGVzLCB1c2VkIGluIG91ciBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgaWhleC4KKworT3JpZ2luYWwgbGljZW5jZSBpbmZvcm1hdGlvbjogTm9uZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHRpX3VzYl8zNDEwXzUwNTIgLS0gVVNCIFRJIDM0MTAvNTA1MiBzZXJpYWwgZGV2aWNlCisKK0ZpbGU6IHRpXzM0MTAuZncKK0luZm86IGZpcm13YXJlIDkvMTAvMDQgRlczNDEwX1NwZWNpYWxfU3RhcnRXZG9nT25TdGFydFBvcnQKKworRmlsZTogdGlfNTA1Mi5mdworSW5mbzogZmlybXdhcmUgOS8xOC8wNAorCitMaWNlbmNlOiBBbGxlZ2VkbHkgR1BMdjIrLCBidXQgbm8gc291cmNlIHZpc2libGUuIE1hcmtlZDoKKwkgQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogdGlfdXNiXzM0MTBfNTA1MiAtLSBNdWx0aS1UZWNoIFVTQiBjZWxsIG1vZGVtcworCitGaWxlOiBtdHNfY2RtYS5mdworRmlsZTogbXRzX2dzbS5mdworRmlsZTogbXRzX2VkZ2UuZncKKworTGljZW5jZTogImFsbCBmaXJtd2FyZSBjb21wb25lbnRzIGFyZSByZWRpc3RyaWJ1dGFibGUgaW4gYmluYXJ5IGZvcm0iCisgICAgICAgICBwZXIgc3VwcG9ydEBtdWx0aXRlY2guY29tCisJIENvcHlyaWdodCAoQykgMjAwNSBNdWx0aS1UZWNoIFN5c3RlbXMsIEluYy4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4gZnRwOi8vZnRwLm11bHRpdGVjaC5jb20vd2lyZWxlc3Mvd2lyZWxlc3NfbGludXguemlwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogdGlfdXNiXzM0MTBfNTA1MiAtLSBNdWx0aS1UZWNoIFVTQiBmYXggbW9kZW1zCisKK0ZpbGU6IG10c19tdDkyMzRtdS5mdworRmlsZTogbXRzX210OTIzNHpiYS5mdworCitMaWNlbmNlOiBVbmtub3duCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogd2hpdGVoZWF0IC0tIFVTQiBDb25uZWN0VGVjaCBXaGl0ZUhFQVQgc2VyaWFsIGRldmljZQorCitGaWxlOiB3aGl0ZWhlYXQuZncKK1ZlcnNpb246IDQuMDYKKworRmlsZTogd2hpdGVoZWF0X2xvYWRlci5mdworCitMaWNlbmNlOiBBbGxlZ2VkbHkgR1BMdjIsIGJ1dCBubyBzb3VyY2UgdmlzaWJsZS4gTWFya2VkOgorCSBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiAgQ29ubmVjdFRlY2ggSW5jCisKK0RlYnVnIGxvYWRlciBjbGFpbXMgdGhlIGZvbGxvd2luZyBiZWhhdmlvdXI6CisJUG9ydCAxIExFRCBmbGFzaGVzIHdoZW4gdGhlIHZlbmRfYXggcHJvZ3JhbSBpcyBydW5uaW5nCisJUG9ydCAyIExFRCBmbGFzaGVzIHdoZW4gYW55IFNFVFVQIGNvbW1hbmQgYXJyaXZlcworCVBvcnQgMyBMRUQgZmxhc2hlcyB3aGVuIGFueSB2YWxpZCBWRU5ET1IgcmVxdWVzdCBvY2N1cnMKKwlQb3J0IDQgTEVEIGZsYXNoZXMgd2hlbiB0aGUgRVhURVJOQUwgUkFNIERPV05MT0FEIHJlcXVlc3Qgb2NjdXJzCisKK0NvbnZlcnRlZCBmcm9tIEludGVsIEhFWCBmaWxlcywgdXNlZCBpbiBvdXIgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGloZXguCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogaXAyIC0tIENvbXB1dG9uZSBJbnRlbGxpUG9ydCBQbHVzIHNlcmlhbCBkZXZpY2UKKworRmlsZTogaW50ZWxsaXBvcnQyLmJpbgorCitMaWNlbmNlOiBVbmtub3duCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogY3BpYTIgLS0gY2FtZXJhcyBiYXNlZCBvbiBWaXNpb24ncyBDUGlBMgorCitGaWxlOiBjcGlhMi9zdHYwNjcyX3ZwNC5iaW4KKworTGljZW5jZTogQWxsZWdlZGx5IEdQTHYyKywgYnV0IG5vIHNvdXJjZSB2aXNpYmxlLiBNYXJrZWQ6CisJQ29weXJpZ2h0IChDKSAyMDAxIFNUTWljcm9lbGVjdHJvbmljcywgSW5jLgorCUNvbnRhY3Q6ICBzdGV2ZS5taWxsZXJAc3QuY29tCisJRGVzY3JpcHRpb246IFRoaXMgZmlsZSBjb250YWlucyBwYXRjaCBkYXRhIGZvciB0aGUgQ1BpQTIgKHN0djA2NzIpIFZQNC4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBkYWJ1c2IgLS0gRGlnaXRhbCBBdWRpbyBCcm9hZGNhc3RpbmcgKERBQikgUmVjZWl2ZXIgZm9yIFVTQiBhbmQgTGludXgKKworRmlsZTogZGFidXNiL2Zpcm13YXJlLmZ3CitGaWxlOiBkYWJ1c2IvYml0c3RyZWFtLmJpbgorCitMaWNlbmNlOiBEaXN0cmlidXRhYmxlCisKKyAqIENvcHlyaWdodCAoQykgMTk5OSBCYXlDb20gR21iSAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgcmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZQorICogY29kZSByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgY29tbWVudCB3aXRob3V0CisgKiBtb2RpZmljYXRpb24uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogdmljYW0gLS0gVVNCIDNjb20gSG9tZUNvbm5lY3QgKGFrYSB2aWNhbSkKKworRmlsZTogdmljYW0vZmlybXdhcmUuZncKKworTGljZW5jZTogVW5rbm93bgorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGlvX2VkZ2Vwb3J0IC0gVVNCIEluc2lkZSBPdXQgRWRnZXBvcnQgU2VyaWFsIERyaXZlcgorCitGaWxlOiBlZGdlcG9ydC9ib290LmZ3CitGaWxlOiBlZGdlcG9ydC9ib290Mi5mdworRmlsZTogZWRnZXBvcnQvZG93bi5mdworRmlsZTogZWRnZXBvcnQvZG93bjIuZncKKworTGljZW5jZTogQWxsZWdlZGx5IEdQTHYyKywgYnV0IG5vIHNvdXJjZSB2aXNpYmxlLiBNYXJrZWQ6CisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyogRWRnZXBvcnQvNCBCaW5hcnkgSW1hZ2UKKy8vKiBHZW5lcmF0ZWQgYnkgSEVYMkMgdjEuMDYKKy8vKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5zaWRlIE91dCBOZXR3b3JrcywgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBpb190aSAtIFVTQiBJbnNpZGUgT3V0IEVkZ2Vwb3J0IFNlcmlhbCBEcml2ZXIKKyhUSSBEZXZpY2VzKQorCitGaWxlOiBlZGdlcG9ydC9kb3duMy5iaW4KKworTGljZW5jZToKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKiBFZGdlcG9ydCBCaW5hcnkgSW1hZ2UgKGZvciBUSSBiYXNlZCBwcm9kdWN0cykKKy8vKiBHZW5lcmF0ZWQgYnkgVElCaW4yQyB2Mi4wMCAod2F0Y2hwb3J0KQorLy8qIENvcHlyaWdodCAoQykgMjAwMSBJbnNpZGUgT3V0IE5ldHdvcmtzLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGRzcDU2ayAtIEF0YXJpIERTUDU2ayBzdXBwb3J0CisKK0ZpbGU6IGRzcDU2ay9ib290c3RyYXAuYmluCitTb3VyY2U6IGRzcDU2ay9ib290c3RyYXAuYXNtCitTb3VyY2U6IGRzcDU2ay9NYWtlZmlsZQorU291cmNlOiBkc3A1NmsvY29uY2F0LWJvb3RzdHJhcC5wbAorCitMaWNlbmNlOiBHUEx2MiBvciBsYXRlcgorCitEU1A1NjAwMSBhc3NlbWJsZXIsIGJ1aWxkYWJsZSB3aXRoIGE1NiBmcm9tCitodHRwOi8vd3d3Lnpkb21haW4uY29tL2E1Ni5odG1sCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogc25kLXNiMTYtY3NwIC0gU291bmQgQmxhc3RlciAxNi9BV0UgQ1NQIHN1cHBvcnQKKworRmlsZTogc2IxNi9tdWxhd19tYWluLmNzcAorRmlsZTogc2IxNi9hbGF3X21haW4uY3NwCitGaWxlOiBzYjE2L2ltYV9hZHBjbV9pbml0LmNzcAorRmlsZTogc2IxNi9pbWFfYWRwY21fcGxheWJhY2suY3NwCitGaWxlOiBzYjE2L2ltYV9hZHBjbV9jYXB0dXJlLmNzcAorCitMaWNlbmNlOiBBbGxlZ2VkbHkgR1BMdjIrLCBidXQgbm8gc291cmNlIHZpc2libGUuIE1hcmtlZDoKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAxOTk0IENyZWF0aXZlIFRlY2hub2xvZ3kgTHRkLgorICogIE1pY3JvY29kZSBmaWxlcyBmb3IgU0IxNiBBZHZhbmNlZCBTaWduYWwgUHJvY2Vzc29yCisgKi8KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBxbGEyeHh4IC0gUUxvZ2ljIFFMQTJYWFggRmlicmUgQ2hhbm5lbAorCitGaWxlOiBxbDIxMDBfZncuYmluCitWZXJzaW9uOiAxLjE5LjM4IFRQCitGaWxlOiBxbDIyMDBfZncuYmluCitWZXJzaW9uOiAyLjAyLjA4IFRQCitGaWxlOiBxbDIzMDBfZncuYmluCitWZXJzaW9uOiAzLjAzLjI4IElQWAorRmlsZTogcWwyMzIyX2Z3LmJpbgorVmVyc2lvbjogMy4wMy4yOCBJUFgKK0ZpbGU6IHFsMjQwMF9mdy5iaW4KK1ZlcnNpb246IDUuMDguMDAgTUlECitGaWxlOiBxbDI1MDBfZncuYmluCitWZXJzaW9uOiA1LjA4LjAwIE1JRFEKKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5xbGEyeHh4IGZvciBkZXRhaWxzCisKK0F2YWlsYWJsZSBmcm9tIGh0dHA6Ly9sZHJpdmVyLnFsb2dpYy5jb20vZmlybXdhcmUvIAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IG9yaW5vY28gLSBBZ2VyZS9QcmlzbS9TeW1ib2wgT3Jpbm9jbyBzdXBwb3J0CisKK0ZpbGU6IGFnZXJlX3N0YV9mdy5iaW4KK1ZlcnNpb246IDkuNDggSGVybWVzIEkKK0ZpbGU6IGFnZXJlX2FwX2Z3LmJpbgorVmVyc2lvbjogOS40OCBIZXJtZXMgSQorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLmFnZXJlIGZvciBkZXRhaWxzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogYXI5MTcwIC0gQXRoZXJvcyA4MDIuMTFuICJvdHVzIiBVU0IKKworRmlsZTogYXI5MTcwLTEuZncKK0ZpbGU6IGFyOTE3MC0yLmZ3CisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UuYXRoZXJvc19maXJtd2FyZSBmb3IgZGV0YWlscworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGF0aDlrX2h0YyAtIEF0aGVyb3MgSFRDIGRldmljZXMgKFVTQikKKworRmlsZTogYXI5MjcxLmZ3CitGaWxlOiBhcjcwMTAuZncKK0ZpbGU6IGFyNzAxMF8xXzEuZncKK0ZpbGU6IGh0Y185MjcxLmZ3CitWZXJzaW9uOiAxLjMKK0ZpbGU6IGh0Y183MDEwLmZ3CitWZXJzaW9uOiAxLjMKKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlIGZvciBkZXRhaWxzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogY2Fzc2luaSAtIFN1biBDYXNzaW5pCisKK0ZpbGU6IHN1bi9jYXNzaW5pLmJpbgorCitMaWNlbmNlOiBVbmtub3duCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogc2xpY29zcyAtIEFsYWNyaXRlY2ggSVMtTklDIHByb2R1Y3RzCisKK0ZpbGU6IHNsaWNvc3MvZ2Jkb3dubG9hZC5zeXMKK0ZpbGU6IHNsaWNvc3MvZ2JyY3Z1Y29kZS5zeXMKK0ZpbGU6IHNsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5zeXMKK0ZpbGU6IHNsaWNvc3Mvb2FzaXNkb3dubG9hZC5zeXMKK0ZpbGU6IHNsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5zeXMKKworTGljZW5jZToKKwkJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDkgQWxhY3JpdGVjaCwgSW5jLgorCisJYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkIG9yCisJcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgZnJvbSB3aGljaCB0aGlzIGZpcm13YXJlIGltYWdlIGlzCisJZGVyaXZlZC4gIEV4Y2VwdCBhcyBub3RlZCBiZWxvdyB0aGlzIGZpcm13YXJlIGltYWdlIG1heSBub3QgYmUKKwlyZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0CisJQWxhY3JpdGVjaCdzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUKKwlpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwKKwlpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLgorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkLgorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHN4ZyAtIEFsYWNyaXRlY2ggSVMtTklDIHByb2R1Y3RzCisKK0ZpbGU6IHN4Zy9zYWhhcmFkb3dubG9hZEIuc3lzCitGaWxlOiBzeGcvc2FoYXJhZGJnZG93bmxvYWRCLnN5cworCitMaWNlbmNlOgorCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwOSBBbGFjcml0ZWNoLCBJbmMuCisKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZQorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQKKwlBbGFjcml0ZWNoJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZQorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogY3hnYjMgLSBDaGVsc2lvIFRlcm1pbmF0b3IgMyAxRy8xMEcgRXRoZXJuZXQgYWRhcHRlcgorCitGaWxlOiBjeGdiMy90M2JfcHNyYW0tMS4xLjAuYmluCitGaWxlOiBjeGdiMy90M2NfcHNyYW0tMS4xLjAuYmluCitGaWxlOiBjeGdiMy90M2Z3LTcuMC4wLmJpbgorRmlsZTogY3hnYjMvdDNmdy03LjEuMC5iaW4KK0ZpbGU6IGN4Z2IzL3QzZnctNy40LjAuYmluCitGaWxlOiBjeGdiMy90M2Z3LTcuMTAuMC5iaW4KK0ZpbGU6IGN4Z2IzL3QzZnctNy4xMi4wLmJpbgorCitMaWNlbmNlOiBHUEx2MiBvciBPcGVuSUIub3JnIEJTRCBsaWNlbnNlLCBubyBzb3VyY2UgdmlzaWJsZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGN4Z2IzIC0gQ2hlbHNpbyBUZXJtaW5hdG9yIDMgMUcvMTBHIEV0aGVybmV0IGFkYXB0ZXIKKworRmlsZTogY3hnYjMvYWVsMjAwNV9vcHRfZWRjLmJpbgorRmlsZTogY3hnYjMvYWVsMjAwNV90d3hfZWRjLmJpbgorRmlsZTogY3hnYjMvYWVsMjAyMF90d3hfZWRjLmJpbgorCitMaWNlbmNlOgorICoJQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuCisgKgorICoJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlCisgKglkYXRhIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodAorICoJbm90aWNlIGlzIGFjY29tcGFueWluZyBpdC4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBjeGdiNCAtIENoZWxzaW8gVGVybWluYXRvciA0IDFHLzEwRyBFdGhlcm5ldCBhZGFwdGVyCisKK0ZpbGU6IGN4Z2I0L3Q0ZnctMS42LjIuMC5iaW4KK0xpbms6IGN4Z2I0L3Q0ZncuYmluIC0+IHQ0ZnctMS42LjIuMC5iaW4KKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5jaGVsc2lvX2Zpcm13YXJlIGZvciBkZXRhaWxzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogZTEwMCAtLSBJbnRlbCBQUk8vMTAwIEV0aGVybmV0IE5JQworCitGaWxlOiBlMTAwL2QxMDFtX3Vjb2RlLmJpbgorRmlsZTogZTEwMC9kMTAxc191Y29kZS5iaW4KK0ZpbGU6IGUxMDAvZDEwMmVfdWNvZGUuYmluCisKK0xpY2VuY2U6IFVua25vd24KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBhY2VuaWMgLS0gQWx0ZW9uIEFjZU5JQyBHaWdhYml0IEV0aGVybmV0IGNhcmQKKworRmlsZTogYWNlbmljL3RnMS5iaW4KK0ZpbGU6IGFjZW5pYy90ZzIuYmluCisKK0xpY2VuY2U6IFVua25vd24KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZSwgYnV0IHNvdXJjZSBhbGxlZ2VkbHkgYXZhaWxhYmxlIGF0CitodHRwOi8vYWx0ZW9uLnNoYXJlYWJsZS5vcmcvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogdGczIC0tIEJyb2FkY29tIFRpZ29uMyBiYXNlZCBnaWdhYml0IEV0aGVybmV0IGNhcmRzCisKK0ZpbGU6IHRpZ29uL3RnMy5iaW4KK0ZpbGU6IHRpZ29uL3RnM190c28uYmluCitGaWxlOiB0aWdvbi90ZzNfdHNvNS5iaW4KK0ZpbGU6IHRpZ29uL3RnMzU3NzY2LmJpbgorCitMaWNlbmNlOgorICogRmlybXdhcmUgaXM6CisgKglEZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQgc291cmNlIGNvZGUsCisgKglDb3B5cmlnaHQgKEMpIDIwMDAtMjAxMyBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKglQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUKKyAqCWRhdGEgaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0CisgKglub3RpY2UgaXMgYWNjb21wYW55aW5nIGl0LgorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHN0YXJmaXJlIC0gQWRhcHRlYyBTdGFyZmlyZS9EdXJhTEFOIHN1cHBvcnQKKworRmlsZTogYWRhcHRlYy9zdGFyZmlyZV9yeC5iaW4KK0ZpbGU6IGFkYXB0ZWMvc3RhcmZpcmVfdHguYmluCisKK0xpY2VuY2U6IEFsbGVnZWRseSBHUEx2MiwgYnV0IG5vIHNvdXJjZSB2aXNpYmxlLgorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLCB3aXRoIHRoZSBmb2xsb3dpbmcgbm90aWNlOgorCisgQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSBJVCBJUyBMSUNFTlNFRCAiQVMgSVMiIEFORAorIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUKKyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXKS4gVVNFIE9GIFRIRSBQUk9HUkFNIElTIEFUIFlPVVIKKyBPV04gUklTSy4gSU4gTk8gRVZFTlQgV0lMTCBBREFQVEVDIE9SIElUUyBMSUNFTlNPUlMgQkUgTElBQkxFIFRPIFlPVSBGT1IKKyBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGkyNDAwbS11c2IgLSBJbnRlbCAyNDAwIFdpcmVsZXNzIFdpTUFYIENvbm5lY3Rpb24gb3ZlciBVU0IKKworRmlsZTogaTI0MDBtLWZ3LXVzYi0xLjQuc2JjZgorRmlsZTogaTI0MDBtLWZ3LXVzYi0xLjUuc2JjZgorRmlsZTogaTYwNTAtZnctdXNiLTEuNS5zYmNmCisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UuaTI0MDBtIGZvciBkZXRhaWxzCisKK0Fsc28gYXZhaWxhYmxlIGZyb20gaHR0cDovL2xpbnV4d2ltYXgub3JnL0Rvd25sb2FkCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogbGliZXJ0YXMgLSBNYXJ2ZWxsIExpYmVydGFzIGZ1bGxtYWMtdHlwZSA4MDIuMTFiL2cgY2FyZHMKKworRmlsZTogbGliZXJ0YXMvY2Y4MzgxLmJpbgorRmlsZTogbGliZXJ0YXMvY2Y4MzgxX2hlbHBlci5iaW4KK0ZpbGU6IGxpYmVydGFzL2NmODM4NS5iaW4KK0ZpbGU6IGxpYmVydGFzL2NmODM4NV9oZWxwZXIuYmluCitGaWxlOiBsaWJlcnRhcy9nc3BpODY4Mi5iaW4KK0ZpbGU6IGxpYmVydGFzL2dzcGk4NjgyX2hlbHBlci5iaW4KK0ZpbGU6IGxpYmVydGFzL2dzcGk4Njg2X3Y5LmJpbgorRmlsZTogbGliZXJ0YXMvZ3NwaTg2ODZfdjlfaGVscGVyLmJpbgorRmlsZTogbGliZXJ0YXMvZ3NwaTg2ODguYmluCitGaWxlOiBsaWJlcnRhcy9nc3BpODY4OF9oZWxwZXIuYmluCitGaWxlOiBsaWJlcnRhcy9zZDgzODUuYmluCitGaWxlOiBsaWJlcnRhcy9zZDgzODVfaGVscGVyLmJpbgorRmlsZTogbGliZXJ0YXMvc2Q4NjgyLmJpbgorRmlsZTogbGliZXJ0YXMvc2Q4NjgyX2hlbHBlci5iaW4KK0ZpbGU6IGxpYmVydGFzL3NkODY4Nl92OC5iaW4KK0ZpbGU6IGxpYmVydGFzL3NkODY4Nl92OF9oZWxwZXIuYmluCitGaWxlOiBsaWJlcnRhcy9zZDg2ODZfdjkuYmluCitGaWxlOiBsaWJlcnRhcy9zZDg2ODZfdjlfaGVscGVyLmJpbgorRmlsZTogbGliZXJ0YXMvdXNiODM4OF92NS5iaW4KK0ZpbGU6IGxpYmVydGFzL3VzYjgzODhfdjkuYmluCitGaWxlOiBsaWJlcnRhcy91c2I4NjgyLmJpbgorRmlsZTogbXJ2bC9zZDg2ODguYmluCitMaW5rOiBsaWJlcnRhcy9zZDg2ODguYmluIC0+IC4uL21ydmwvc2Q4Njg4LmJpbgorRmlsZTogbXJ2bC9zZDg2ODhfaGVscGVyLmJpbgorTGluazogbGliZXJ0YXMvc2Q4Njg4X2hlbHBlci5iaW4gLT4gLi4vbXJ2bC9zZDg2ODhfaGVscGVyLmJpbgorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLk1hcnZlbGwgZm9yIGRldGFpbHMuICBFeHRyYWN0ZWQgZnJvbQorTGludXggZHJpdmVyIHRhcmJhbGxzIGRvd25sb2FkZWQgZnJvbSBNYXJ2ZWxsJ3MgIkV4dHJhbmV0IiB3aXRoIHBlcm1pc3Npb24uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogbGliZXJ0YXMgLSBNYXJ2ZWxsIExpYmVydGFzIDgwMi4xMWIvZyBjYXJkcywgT0xQQyBmaXJtd2FyZQorCitGaWxlOiBsaWJlcnRhcy9sYnRmX3NkaW8uYmluCitWZXJzaW9uOiA5LjAuNy5wNAorCitGaWxlOiBsYnRmX3VzYi5iaW4KK1ZlcnNpb246IDUuMTMyLjMucDEKKworRmlsZTogbGliZXJ0YXMvdXNiODM4OF9vbHBjLmJpbgorVmVyc2lvbjogNS4xMTAuMjIucDIzCisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UuT0xQQyBmb3IgZGV0YWlscy4KKworQXZhaWxhYmxlIGZyb20gaHR0cDovL2Rldi5sYXB0b3Aub3JnL3B1Yi9maXJtd2FyZS9saWJlcnRhcy8KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBtd2w4ayAtIE1hcnZlbGwgTGliZXJ0YXMgc29mdG1hYy10eXBlIDgwMi4xMWIvZy9uIGNhcmRzCisKK0ZpbGU6IG13bDhrL2ZtaW1hZ2VfODY4Ny5mdworRmlsZTogbXdsOGsvaGVscGVyXzg2ODcuZncKK0ZpbGU6IG13bDhrL2ZtaW1hZ2VfODM2Ni5mdworRmlsZTogbXdsOGsvZm1pbWFnZV84MzY2X2FwLTEuZncKK0ZpbGU6IG13bDhrL2ZtaW1hZ2VfODM2Nl9hcC0yLmZ3CitGaWxlOiBtd2w4ay9mbWltYWdlXzgzNjZfYXAtMy5mdworVmVyc2lvbjogNS4yLjguMTYKK0ZpbGU6IG13bDhrL2hlbHBlcl84MzY2LmZ3CisKK0ZpbGU6IG13bDhrL2ZtaW1hZ2VfODc2NF9hcC0xLmZ3CitWZXJzaW9uOiA3LjQuMC45CisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UuTWFydmVsbCBmb3IgZGV0YWlscy4gIDg2ODcgaW1hZ2VzCitkb3dubG9hZGVkIGZyb20gTWFydmVsbCdzICJFeHRyYW5ldCIgd2l0aCBwZXJtaXNzaW9uLiAgODM2NiBpbWFnZXMgY29udHJpYnV0ZWQKK2RpcmVjdGx5IGJ5IE1hcnZlbGwuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogbXdpZmlleCAtIE1hcnZlbGwgV2ktRmkgZnVsbG1hYy10eXBlIDgwMi4xMW4vYWMgY2FyZHMKKworRmlsZTogbXJ2bC9zZDg3ODdfdWFwc3RhLmJpbgorVmVyc2lvbjogMTQuNjYuOS5wOTYKKworRmlsZTogbXJ2bC9zZDg3OTdfdWFwc3RhLmJpbgorVmVyc2lvbjogMTQuNjYuMTEucDE1MQorCitGaWxlOiBtcnZsL3NkODg5N191YXBzdGEuYmluCitWZXJzaW9uOiAxNS42OS4yLnAxMQorCitGaWxlOiBtcnZsL3VzYjg3OTdfdWFwc3RhLmJpbgorVmVyc2lvbjogMTQuNjkuMTEucDE3OQorCitGaWxlOiBtcnZsL3BjaWU4ODk3X3VhcHN0YS5iaW4KK1ZlcnNpb246IDE1LjY5LjIucDExCisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UuTWFydmVsbCBmb3IgZGV0YWlscy4gIE9yaWdpbmF0ZXMgZnJvbQoraHR0cDovL2dpdC5tYXJ2ZWxsLmNvbS8/cD1td2lmaWV4LWZpcm13YXJlLmdpdAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0RyaXZlcjogaXdsd2lmaSAtIEludGVsIFdpcmVsZXNzIFdpZmkKKworRmlsZTogaXdsd2lmaS0zOTQ1LTIudWNvZGUKK1ZlcnNpb246IDE1LjMyLjIuOQorCitGaWxlOiBpd2x3aWZpLTQ5NjUtMi51Y29kZQorVmVyc2lvbjogMjI4LjYxLjIuMjQKKworRmlsZTogaXdsd2lmaS01MDAwLTEudWNvZGUKK1ZlcnNpb246IDUuNC5BLjExIChha2EgNS40LjEuMTYpCisKK0ZpbGU6IGl3bHdpZmktNTAwMC0yLnVjb2RlCitWZXJzaW9uOiA4LjI0LjIuMTIKKworRmlsZTogaXdsd2lmaS01MDAwLTUudWNvZGUKK1ZlcnNpb246IDguODMuNS4xCisKK0ZpbGU6IGl3bHdpZmktNTE1MC0yLnVjb2RlCitWZXJzaW9uOiA4LjI0LjIuMgorCitGaWxlOiBpd2x3aWZpLTEwMDAtMy51Y29kZQorVmVyc2lvbjogMTI4LjUwLjMuMQorCitGaWxlOiBpd2x3aWZpLTEwMDAtNS51Y29kZQorVmVyc2lvbjogMzkuMzEuNS4xCisKK0ZpbGU6IGl3bHdpZmktNjAwMC00LnVjb2RlCitWZXJzaW9uOiA5LjIyMS40LjEKKworRmlsZTogaXdsd2lmaS02MDUwLTQudWNvZGUKK1ZlcnNpb246IDkuMjAxLjQuMQorCitGaWxlOiBpd2x3aWZpLTYwNTAtNS51Y29kZQorVmVyc2lvbjogNDEuMjguNS4xCisKK0ZpbGU6IGl3bHdpZmktNjAwMGcyYS01LnVjb2RlCitWZXJzaW9uOiAxNy4xNjguNS4zCisKK0ZpbGU6IGl3bHdpZmktNjAwMGcyYS02LnVjb2RlCitWZXJzaW9uOiAxOC4xNjguNi4xCisKK0ZpbGU6IGl3bHdpZmktNjAwMGcyYi01LnVjb2RlCitWZXJzaW9uOiAxNy4xNjguNS4xCisKK0ZpbGU6IGl3bHdpZmktNjAwMGcyYi02LnVjb2RlCitWZXJzaW9uOiAxOC4xNjguNi4xCisKK0ZpbGU6IGl3bHdpZmktMTM1LTYudWNvZGUKK1ZlcnNpb246IDE4LjE2OC42LjEKKworRmlsZTogaXdsd2lmaS0xMDAtNS51Y29kZQorVmVyc2lvbjogMzkuMzEuNS4xCisKK0ZpbGU6IGl3bHdpZmktMTA1LTYudWNvZGUKK1ZlcnNpb246IDE4LjE2OC42LjEKKworRmlsZTogaXdsd2lmaS0yMDMwLTYudWNvZGUKK1ZlcnNpb246IDE4LjE2OC42LjEKKworRmlsZTogaXdsd2lmaS0yMDAwLTYudWNvZGUKK1ZlcnNpb246IDE4LjE2OC42LjEKKworRmlsZTogaXdsd2lmaS03MjYwLTcudWNvZGUKK1ZlcnNpb246IDIyLjAuNy4wCisKK0ZpbGU6IGl3bHdpZmktMzE2MC03LnVjb2RlCitWZXJzaW9uOiAyMi4wLjcuMAorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLml3bHdpZmlfZmlybXdhcmUgZm9yIGRldGFpbHMKKworQWxzbyBhdmFpbGFibGUgZnJvbSBodHRwOi8vaW50ZWxsaW51eHdpcmVsZXNzLm9yZy8/bj1Eb3dubG9hZHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBjeDIzMXh4IC0gQ29uZXhhbnQgQ3gyMzEwMC8xMDEvMTAyIFVTQiBicm9hZGNhc3QgQS9WIGRlY29kZXIKKworRmlsZTogdjRsLWN4MjMxeHgtYXZjb3JlLTAxLmZ3CisKK0xpY2VuY2U6CisgIENvbmV4YW50IGdyYW50cyBwZXJtaXNzaW9uIHRvIHVzZSBhbmQgcmVkaXN0cmlidXRlIHRoZXNlIGZpcm13YXJlCisgIGZpbGVzIGZvciB1c2Ugd2l0aCBDb25leGFudCBkZXZpY2VzLCBidXQgbm90IGFzIGEgcGFydCBvZiB0aGUgTGludXgKKyAga2VybmVsIG9yIGluIGFueSBvdGhlciBmb3JtIHdoaWNoIHdvdWxkIHJlcXVpcmUgdGhlc2UgZmlsZXMgdGhlbXNlbHZlcworICB0byBiZSBjb3ZlcmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgIFRoZXNlIGZpcm13YXJlIGZpbGVzIGFyZSBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IHRoZXkgd2lsbCBiZQorICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiB0ZWh1dGkgLSBUZWh1dGkgTmV0d29ya3MgMTBHIEV0aGVybmV0CisKK0ZpbGU6IHRlaHV0aS9iZHguYmluCisKK0xpY2VuY2U6CisKKyBDb3B5cmlnaHQgKEMpIDIwMDcgVGVodXRpIE5ldHdvcmtzIEx0ZC4KKworIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworIGFjY29tcGFueWluZyBpdC4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiB0eXBob29uIC0gM2NyOTkwIHNlcmllcyBUeXBob29uCisKK0ZpbGU6IDNjb20vdHlwaG9vbi5iaW4KKworTGljZW5jZToKKy8qCisgKiBDb3B5cmlnaHQgMTk5OS0yMDA0IDNDb20gQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgb2YgdGhlIDNjOTkwaW1nLmgKKyAqIG1pY3JvY29kZSBzb2Z0d2FyZSBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIDNDb20gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIDNDT00gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogVVNFUiBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUyBUSEFUIFBVUkNIQVNFIE9SIFVTRSBPRiBUSEUgM2M5OTBpbWcuaAorICogTUlDUk9DT0RFIFNPRlRXQVJFIFdJTEwgTk9UIENSRUFURSBPUiBHSVZFIEdST1VORFMgRk9SIEEgTElDRU5TRSBCWQorICogSU1QTElDQVRJT04sIEVTVE9QUEVMLCBPUiBPVEhFUldJU0UgSU4gQU5ZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMKKyAqIChQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKQorICogRU1CT0RJRUQgSU4gQU5ZIE9USEVSIDNDT00gSEFSRFdBUkUgT1IgU09GVFdBUkUgRUlUSEVSIFNPTEVMWSBPUiBJTgorICogQ09NQklOQVRJT04gV0lUSCBUSEUgM2M5OTBpbWcuaCBNSUNST0NPREUgU09GVFdBUkUKKyAqLworCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHlhbSAtIFlBTSBkcml2ZXIgZm9yIEFYLjI1CisKK0ZpbGU6IHlhbS8xMjAwLmJpbgorRmlsZTogeWFtLzk2MDAuYmluCisKK0xpY2VuY2U6CisgKiAoQykgRjZGQkIgMTk5OAorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IDNjMzU5IC0gM0NvbSAzQzM1OSBUb2tlbiBMaW5rIFZlbG9jaXR5IFhMIGFkYXB0ZXIKKworRmlsZTogM2NvbS8zQzM1OS5iaW4KKworTGljZW5jZToKKy8qCisgKiBUaGUgZmlybXdhcmUgdGhpcyBkcml2ZXIgZG93bmxvYWRzIGludG8gdGhlIHRva2VucmluZyBjYXJkIGlzIGEKKyAqIHNlcGFyYXRlIHByb2dyYW0gYW5kIGlzIG5vdCBHUEwnZCBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhlIExpbnV4CisgKiBzaWRlIGRyaXZlciBhbmQgdGhlIHJvdXRpbmUgdGhhdCBsb2FkcyB0aGlzIGRhdGEgaW50byB0aGUgY2FyZCBhcmUuCisgKgorICogVGhpcyBmaXJtd2FyZSBpcyBsaWNlbnNlZCB0byB5b3Ugc3RyaWN0bHkgZm9yIHVzZSBpbiBjb25qdW5jdGlvbgorICogd2l0aCB0aGUgdXNlIG9mIDNDb20gM0MzNTkgVG9rZW5SaW5nIGFkYXB0ZXJzLiBUaGVyZSBpcyBubworICogd2FyYW50eSBleHByZXNzZWQgb3IgaW1wbGllZCBhYm91dCBpdHMgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuCisgKi8KKy8qIDNjMzU5X21pY3JvY29kZS5tYWM6IDNDb20gM0MzNTkgVG9rZW5yaW5nIG1pY3JvY29kZS4KKyAqCisgKiBOb3RlczoKKyAqICAtIExvYWRlZCBmcm9tIHhsX2luaXQgdXBvbiBhZGFwdGVyIGluaXRpYWxpemF0aW9uLgorICoKKyAqIEF2YWlsYWJsZSBmcm9tIDNDb20gYXMgcGFydCBvZiB0aGVpciBzdGFuZGFyZCAzQzM1OSBkcml2ZXIuCisgKi8KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBwY25ldF9jcyAtIE5FMjAwMCBjb21wYXRpYmxlIFBDTUNJQSBhZGFwdGVyCisKK0ZpbGU6IGNpcy9MQS1QQ00uY2lzCitGaWxlOiBjaXMvUENNTE0yOC5jaXMKK0ZpbGU6IGNpcy9EUDgzOTAzLmNpcworRmlsZTogY2lzL05FMksuY2lzCitGaWxlOiBjaXMvdGFtYXJhY2suY2lzCitGaWxlOiBjaXMvUEUtMjAwLmNpcworRmlsZTogY2lzL1BFNTIwLmNpcworU291cmNlOiBjaXMvc3JjL0xBLVBDTS5jaXMKK1NvdXJjZTogY2lzL3NyYy9QQ01MTTI4LmNpcworU291cmNlOiBjaXMvc3JjL0RQODM5MDMuY2lzCitTb3VyY2U6IGNpcy9zcmMvTkUySy5jaXMKK1NvdXJjZTogY2lzL3NyYy90YW1hcmFjay5jaXMKK1NvdXJjZTogY2lzL3NyYy9QRS0yMDAuY2lzCitTb3VyY2U6IGNpcy9zcmMvUEU1MjAuY2lzCisKK0xpY2VuY2U6IER1YWwgR1BMdjIvTVBMCisKK09yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IHRoZSBwY21jaWEtY3MgcHJvamVjdAorQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIERhdmlkIEEuIEhpbmRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogM2M1ODlfY3MgLSAzQ29tIFBDTUNJQSBhZGFwdGVyCisKK0ZpbGU6IGNpcy8zQ1hFTTU1Ni5jaXMKK1NvdXJjZTogY2lzL3NyYy8zQ1hFTTU1Ni5jaXMKKworTGljZW5jZTogRHVhbCBHUEx2Mi9NUEwKKworT3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgdGhlIHBjbWNpYS1jcyBwcm9qZWN0CitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgRGF2aWQgQS4gSGluZHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiAzYzU3NF9jcyAtIDNDb20gUENNQ0lBIGFkYXB0ZXIKKworRmlsZTogY2lzLzNDQ0ZFTTU1Ni5jaXMKK1NvdXJjZTogY2lzL3NyYy8zQ0NGRU01NTYuY2lzCisKK0xpY2VuY2U6IER1YWwgR1BMdjIvTVBMCisKK09yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IHRoZSBwY21jaWEtY3MgcHJvamVjdAorQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIERhdmlkIEEuIEhpbmRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogc2VyaWFsX2NzIC0gU2VyaWFsIFBDTUNJQSBhZGFwdGVyCisKK0ZpbGU6IGNpcy9NVDU2MzRaTFguY2lzCitGaWxlOiBjaXMvUlMtQ09NLTJQLmNpcworRmlsZTogY2lzL0NPTXBhZDIuY2lzCitGaWxlOiBjaXMvQ09NcGFkNC5jaXMKK1NvdXJjZTogY2lzL3NyYy9NVDU2MzRaTFguY2lzCitTb3VyY2U6IGNpcy9zcmMvUlMtQ09NLTJQLmNpcworU291cmNlOiBjaXMvc3JjL0NPTXBhZDIuY2lzCitTb3VyY2U6IGNpcy9zcmMvQ09NcGFkNC5jaXMKKworTGljZW5jZTogRHVhbCBHUEx2Mi9NUEwKKworT3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgdGhlIHBjbWNpYS1jcyBwcm9qZWN0CitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgRGF2aWQgQS4gSGluZHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBzZXJpYWxfY3MgLSBTZXJpYWwgUENNQ0lBIGFkYXB0ZXIKKworRmlsZTogY2lzL1NXXzU1NV9TRVIuY2lzCitGaWxlOiBjaXMvU1dfN3h4X1NFUi5jaXMKK0ZpbGU6IGNpcy9TV184eHhfU0VSLmNpcworCitMaWNlbmNlOiBHUEx2MworCitDb3B5cmlnaHQgU2llcnJhIFdpcmVsZXNzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogc21jOTFjOTJfY3MgLSBTTUMgOTFDeHggUENNQ0lBCisKK0ZpbGU6IG9zaXRlY2gvWGlsaW54N09ELmJpbgorCitMaWNlbmNlOiBBbGxlZ2VkbHkgR1BMLCBidXQgbm8gc291cmNlIHZpc2libGUuIE1hcmtlZDoKKyAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZpcm13YXJlIG9mIFNldmVuIG9mIERpYW1vbmRzIGZyb20gT1NJVEVDSC4KKyAgICAoU3BlY2lhbCB0aGFua3MgdG8gS2V2aW4gTWFjUGhlcnNvbiBvZiBPU0lURUNIKQorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGN4MjM0MTggLSBDb25leGFudCBQQ0kgQnJvYWRjYXN0IEEvViB3aXRoIE1QRUcgZW5jb2RlcgorCitGaWxlOiB2NGwtY3gyMzQxOC1hcHUuZncKK0ZpbGU6IHY0bC1jeDIzNDE4LWNwdS5mdworRmlsZTogdjRsLWN4MjM0MTgtZGlnLmZ3CisKK0xpY2VuY2U6CisgIENvbmV4YW50IGdyYW50cyBwZXJtaXNzaW9uIHRvIHVzZSBhbmQgcmVkaXN0cmlidXRlIHRoZXNlIGZpcm13YXJlCisgIGZpbGVzIGZvciB1c2Ugd2l0aCBDb25leGFudCBkZXZpY2VzLCBidXQgbm90IGFzIGEgcGFydCBvZiB0aGUgTGludXgKKyAga2VybmVsIG9yIGluIGFueSBvdGhlciBmb3JtIHdoaWNoIHdvdWxkIHJlcXVpcmUgdGhlc2UgZmlsZXMgdGhlbXNlbHZlcworICB0byBiZSBjb3ZlcmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgIFRoZXNlIGZpcm13YXJlIGZpbGVzIGFyZSBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IHRoZXkgd2lsbCBiZQorICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBjeDIzODg1IC0gQ29uZXhhbnQgUENJIEV4cHJlc3MgQnJvYWRjYXN0IEEvViBkZWNvZGVyCisKK0ZpbGU6IHY0bC1jeDIzODg1LWF2Y29yZS0wMS5mdworRmlsZTogdjRsLWN4MjM4ODUtZW5jLmZ3CisKK0xpY2VuY2U6CisgIENvbmV4YW50IGdyYW50cyBwZXJtaXNzaW9uIHRvIHVzZSBhbmQgcmVkaXN0cmlidXRlIHRoZXNlIGZpcm13YXJlCisgIGZpbGVzIGZvciB1c2Ugd2l0aCBDb25leGFudCBkZXZpY2VzLCBidXQgbm90IGFzIGEgcGFydCBvZiB0aGUgTGludXgKKyAga2VybmVsIG9yIGluIGFueSBvdGhlciBmb3JtIHdoaWNoIHdvdWxkIHJlcXVpcmUgdGhlc2UgZmlsZXMgdGhlbXNlbHZlcworICB0byBiZSBjb3ZlcmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgIFRoZXNlIGZpcm13YXJlIGZpbGVzIGFyZSBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IHRoZXkgd2lsbCBiZQorICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBjeDIzODQwIC0gQ29uZXhhbnQgc2lkZXBvcnQgQnJvYWRjYXN0IEEvViBkZWNvZGVyCisKK0ZpbGU6IHY0bC1jeDI1ODQwLmZ3CisKK0xpY2VuY2U6CisgIENvbmV4YW50IGdyYW50cyBwZXJtaXNzaW9uIHRvIHVzZSBhbmQgcmVkaXN0cmlidXRlIHRoZXNlIGZpcm13YXJlCisgIGZpbGVzIGZvciB1c2Ugd2l0aCBDb25leGFudCBkZXZpY2VzLCBidXQgbm90IGFzIGEgcGFydCBvZiB0aGUgTGludXgKKyAga2VybmVsIG9yIGluIGFueSBvdGhlciBmb3JtIHdoaWNoIHdvdWxkIHJlcXVpcmUgdGhlc2UgZmlsZXMgdGhlbXNlbHZlcworICB0byBiZSBjb3ZlcmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgIFRoZXNlIGZpcm13YXJlIGZpbGVzIGFyZSBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IHRoZXkgd2lsbCBiZQorICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBxbG9naWNwdGkgLSBQVEkgUWxvZ2ljLCBJU1AgRHJpdmVyCisKK0ZpbGU6IHFsb2dpYy9pc3AxMDAwLmJpbgorCitMaWNlbmNlOiBVbmtub3duCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogbXlyaV9zYnVzIC0gTXlyaUNPTSBHaWdhYml0IEV0aGVybmV0CisKK0ZpbGU6IG15cmljb20vbGFuYWkuYmluCisKK0xpY2VuY2U6IFVua25vd24KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBibngyeDogQnJvYWRjb20gRXZlcmVzdAorCitGaWxlOiBibngyeC1lMS00LjguNTMuMC5mdworRmlsZTogYm54MngtZTFoLTQuOC41My4wLmZ3CitGaWxlOiBibngyeC1lMS01LjIuNy4wLmZ3CitGaWxlOiBibngyeC1lMWgtNS4yLjcuMC5mdworRmlsZTogYm54MngtZTEtNS4yLjEzLjAuZncKK0ZpbGU6IGJueDJ4LWUxaC01LjIuMTMuMC5mdworRmlsZTogYm54MngvYm54MngtZTEtNi4wLjM0LjAuZncKK0ZpbGU6IGJueDJ4L2JueDJ4LWUxaC02LjAuMzQuMC5mdworRmlsZTogYm54MngvYm54MngtZTItNi4wLjM0LjAuZncKK0ZpbGU6IGJueDJ4L2JueDJ4LWUxLTYuMi41LjAuZncKK0ZpbGU6IGJueDJ4L2JueDJ4LWUxaC02LjIuNS4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMi02LjIuNS4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMS02LjIuOS4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMWgtNi4yLjkuMC5mdworRmlsZTogYm54MngvYm54MngtZTItNi4yLjkuMC5mdworRmlsZTogYm54MngvYm54MngtZTItNy4wLjIwLjAuZncKK0ZpbGU6IGJueDJ4L2JueDJ4LWUxLTcuMC4yMC4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMWgtNy4wLjIwLjAuZncKK0ZpbGU6IGJueDJ4L2JueDJ4LWUyLTcuMC4yMy4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMS03LjAuMjMuMC5mdworRmlsZTogYm54MngvYm54MngtZTFoLTcuMC4yMy4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMi03LjAuMjkuMC5mdworRmlsZTogYm54MngvYm54MngtZTEtNy4wLjI5LjAuZncKK0ZpbGU6IGJueDJ4L2JueDJ4LWUxaC03LjAuMjkuMC5mdworRmlsZTogYm54MngvYm54MngtZTItNy4yLjE2LjAuZncKK0ZpbGU6IGJueDJ4L2JueDJ4LWUxLTcuMi4xNi4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMWgtNy4yLjE2LjAuZncKK0ZpbGU6IGJueDJ4L2JueDJ4LWUyLTcuMi41MS4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMS03LjIuNTEuMC5mdworRmlsZTogYm54MngvYm54MngtZTFoLTcuMi41MS4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMS03LjguMi4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMWgtNy44LjIuMC5mdworRmlsZTogYm54MngvYm54MngtZTItNy44LjIuMC5mdworRmlsZTogYm54MngvYm54MngtZTEtNy44LjE3LjAuZncKK0ZpbGU6IGJueDJ4L2JueDJ4LWUxaC03LjguMTcuMC5mdworRmlsZTogYm54MngvYm54MngtZTItNy44LjE3LjAuZncKKworTGljZW5zZToKKyAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KKworICBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAgc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNy0yMDExIEJyb2FkY29tIENvcnBvcmF0aW9uLgorCisgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyAgYWNjb21wYW55aW5nIGl0LgorCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogYm54MiAtIEJyb2FkY29tIE5ldFh0cmVtZUlJCisKK0ZpbGU6IGJueDIvYm54Mi1taXBzLTA2LTQuNi4xNi5mdworRmlsZTogYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajMuZncKK0ZpbGU6IGJueDIvYm54Mi1taXBzLTA2LTUuMC4wLmo2LmZ3CitGaWxlOiBibngyL2JueDItbWlwcy0wNi02LjAuMTUuZncKK0ZpbGU6IGJueDIvYm54Mi1taXBzLTA2LTYuMi4xLmZ3CitGaWxlOiBibngyL2JueDItbWlwcy0wNi02LjIuMy5mdworRmlsZTogYm54Mi9ibngyLW1pcHMtMDktNC42LjE3LmZ3CitGaWxlOiBibngyL2JueDItbWlwcy0wOS01LjAuMC5qMy5mdworRmlsZTogYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajkuZncKK0ZpbGU6IGJueDIvYm54Mi1taXBzLTA5LTUuMC4wLmoxNS5mdworRmlsZTogYm54Mi9ibngyLW1pcHMtMDktNi4wLjE3LmZ3CitGaWxlOiBibngyL2JueDItbWlwcy0wOS02LjIuMS5mdworRmlsZTogYm54Mi9ibngyLW1pcHMtMDktNi4yLjFhLmZ3CitGaWxlOiBibngyL2JueDItbWlwcy0wOS02LjIuMWIuZncKK0ZpbGU6IGJueDIvYm54Mi1ydjJwLTA2LTQuNi4xNi5mdworRmlsZTogYm54Mi9ibngyLXJ2MnAtMDYtNS4wLjAuajMuZncKK0ZpbGU6IGJueDIvYm54Mi1ydjJwLTA2LTYuMC4xNS5mdworRmlsZTogYm54Mi9ibngyLXJ2MnAtMDktNC42LjE1LmZ3CitGaWxlOiBibngyL2JueDItcnYycC0wOS01LjAuMC5qMy5mdworRmlsZTogYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajEwLmZ3CitGaWxlOiBibngyL2JueDItcnYycC0wOS02LjAuMTcuZncKK0ZpbGU6IGJueDIvYm54Mi1ydjJwLTA5YXgtNS4wLjAuajMuZncKK0ZpbGU6IGJueDIvYm54Mi1ydjJwLTA5YXgtNS4wLjAuajEwLmZ3CitGaWxlOiBibngyL2JueDItcnYycC0wOWF4LTYuMC4xNy5mdworCitMaWNlbmNlOgorCisgVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCisgc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24uCisKKyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQorIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyBhY2NvbXBhbnlpbmcgaXQuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogbmV0eGVuX25pYyAtIE5ldFhlbiBNdWx0aSBwb3J0ICgxLzEwKSBHaWdhYml0IEV0aGVybmV0IE5JQworCitGaWxlOiBwaGFuZncuYmluCitWZXJzaW9uOiA0LjAuNTkwCisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UucGhhbmZ3IGZvciBkZXRhaWxzLgorCitBdmFpbGFibGUgZnJvbSBodHRwOi8vbGRyaXZlci5xbG9naWMuY29tL2Zpcm13YXJlL25ldHhlbl9uaWMvbmV3LworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGR2Yi10dHBjaSAtLSBBVjcxMTAgY2FyZHMKKworRmlsZTogYXY3MTEwL2Jvb3Rjb2RlLmJpbgorU291cmNlOiBhdjcxMTAvQm9vdC5TCitTb3VyY2U6IGF2NzExMC9NYWtlZmlsZQorCitMaWNlbmNlOiBHUEx2MiBvciBsYXRlcgorCitBUk0gYXNzZW1ibHkgc291cmNlIGNvZGUgZnJvbSBodHRwOi8vd3d3LmxpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS9Cb290LlMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBzbmQtd2F2ZWZyb250IC0gSVNBIFdhdmVGcm9udCBzb3VuZCBjYXJkCisKK0ZpbGU6IHlhbWFoYS95c3MyMjVfcmVnaXN0ZXJzLmJpbgorCitMaWNlbmNlOiBBbGxlZ2VkbHkgR1BMdjIrLCBidXQgbm8gc291cmNlIHZpc2libGUuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UsIHdpdGggdGhlIGZvbGxvd2luZyBjb21tZW50OgorICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIgYnkgUGF1bCBEYXZpcyA8cGJkQG9wLm5ldD4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBydDYxcGNpIC0gUmFsaW5rIFJUMjU2MSwgUlQyNTYxUywgUlQyNjYxIHdpcmVsZXNzIE1BQ3MKKworRmlsZTogcnQyNTYxLmJpbgorRmlsZTogcnQyNTYxcy5iaW4KK0ZpbGU6IHJ0MjY2MS5iaW4KKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5yYWxpbmstZmlybXdhcmUudHh0IGZvciBkZXRhaWxzCisKK0Rvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LnJhbGlua3RlY2guY29tL3JhbGluay9Ib21lL1N1cHBvcnQvTGludXguaHRtbAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHJ0NzN1c2IgLSBSYWxpbmsgUlQyNTcxVywgUlQyNjcxIHdpcmVsZXNzIE1BQ3MKKworRmlsZTogcnQ3My5iaW4KKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5yYWxpbmstZmlybXdhcmUudHh0IGZvciBkZXRhaWxzCisKK0Rvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LnJhbGlua3RlY2guY29tL3JhbGluay9Ib21lL1N1cHBvcnQvTGludXguaHRtbAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHJ0MjgwMHBjaSAtIFJhbGluayBSVDI4NjAsIFJUMjg5MCwgUlQzMDkwLCBSVDMyOTAsIFJUNTM5MCB3aXJlbGVzcyBNQUNzCisKK0ZpbGU6IHJ0Mjg2MC5iaW4KK0ZpbGU6IHJ0MzI5MC5iaW4KKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5yYWxpbmstZmlybXdhcmUudHh0IGZvciBkZXRhaWxzCisKK0JpbmFyeSBmaWxlIHN1cHBsaWVkIGJ5IFNoaWFuZyBUdSA8c2hpYW5nX3R1QHJhbGlua3RlY2guY29tPi4gRmlybXdhcmUgVmVyc2lvbiAzNAorcnQzMjkwLmJpbiBpcyBhIHNwZWNpZmljIGZpcm13YXJlIHN1cHBvcnQgdGhlIFJUMzI5MCBjaGlwLiBGaXJtd2FyZSBWZXJzaW9uIDM3CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogcnQyODYwc3RhIC0gUmFsaW5rIFJUMzA5MCB3aXJlbGVzcyBNQUNzCisKK0xpbms6IHJ0MzA5MC5iaW4gLT4gcnQyODYwLmJpbgorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLnJhbGluay1maXJtd2FyZS50eHQgZm9yIGRldGFpbHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBydDI4MDB1c2IgLSBSYWxpbmsgUlQyODcwLCBSVDMwNzAsIFJUMzA3MSwgUlQzMDcyLCBSVDUzNzAgd2lyZWxlc3MgTUFDcworCitGaWxlOiBydDI4NzAuYmluCisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UucmFsaW5rLWZpcm13YXJlLnR4dCBmb3IgZGV0YWlscworCitCaW5hcnkgZmlsZSBzdXBwbGllZCBieSBTaGlhbmcgVHUgPHNoaWFuZ190dUByYWxpbmt0ZWNoLmNvbT4uIEZpcm13YXJlIFZlcnNpb24gMjkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBydDI4NzBzdGEgLSBSYWxpbmsgUlQyODcwLCBSVDMwNzAsIFJUMzA3MSB3aXJlbGVzcyBNQUNzCisKK0xpbms6IHJ0MzA3MC5iaW4gLT4gcnQyODcwLmJpbgorRmlsZTogcnQzMDcxLmJpbgorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLnJhbGluay1maXJtd2FyZS50eHQgZm9yIGRldGFpbHMKKworcnQzMDcxLmJpbiBpcyBhIGNvcHkgb2YgYnl0ZXMgNDA5Ni04MTkxIG9mIHJ0Mjg3MC5iaW4gZm9yIGNvbXBhdGliaWxpdHkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogdXNiZHV4L3VzYmR1eGZhc3QvdXNiZHV4c2lnbWEgLSB1c2JkdXggZGF0YSBhY3F1aXNpdGlvbiBjYXJkcworCitGaWxlOiB1c2JkdXhfZmlybXdhcmUuYmluCitGaWxlOiB1c2JkdXhmYXN0X2Zpcm13YXJlLmJpbgorRmlsZTogdXNiZHV4c2lnbWFfZmlybXdhcmUuYmluCitTb3VyY2U6IHVzYmR1eC9meDItaW5jbHVkZS5hc20KK1NvdXJjZTogdXNiZHV4L3VzYmR1eGZhc3RfZmlybXdhcmUuYXNtCitTb3VyY2U6IHVzYmR1eC91c2JkdXhfZmlybXdhcmUuYXNtCitTb3VyY2U6IHVzYmR1eC91c2JkdXhzaWdtYV9maXJtd2FyZS5hc20KKworTGljZW5jZTogR1BMdjIuIFNlZSBzb3VyY2UgY29kZSBpbiB1c2JkdXgvIHN1YmRpcmVjdG9yeS4KKworUHJvdmlkZWQgZnJvbSB0aGUgYXV0aG9yLCBCZXJuZCBQb3JyIDxCZXJuZFBvcnJAZjJzLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiB4YzUwMDAgLSBYY2VpdmUgNTAwMCBUdW5lciBkcml2ZXIKKworRmlsZTogZHZiLWZlLXhjNTAwMC0xLjYuMTE0LmZ3CitWZXJzaW9uOiAxLjYuMTE0CisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UueGM1MDAwIGZvciBkZXRhaWxzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogZGliMDcwMCAtIERpQmNvbSBkaWIwNzAwIFVTQiBEVkIgYnJpZGdlIGRyaXZlcgorCitGaWxlOiBkdmItdXNiLWRpYjA3MDAtMS4yMC5mdworVmVyc2lvbjogMS4yMAorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLmRpYjA3MDAgZm9yIGRldGFpbHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBhdGgzayAtIERGVSBEcml2ZXIgZm9yIEF0aGVyb3MgYmx1ZXRvb3RoIGNoaXBzZXQgQVIzMDExCisKK0ZpbGU6IGF0aDNrLTEuZncKK1ZlcnNpb246IDEuMAorCitGaXggRUVQUk9NIHJhZGlvIHRhYmxlIGlzc3VlIGFuZCBjaGFuZ2UgUElEIHRvIDMwMDUKKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlIGZvciBkZXRhaWxzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogbWdhIC0gTWF0cm94IEcyMDAvRzQwMC9HNTUwCisKK0ZpbGU6IG1hdHJveC9nMjAwX3dhcnAuZncKK0ZpbGU6IG1hdHJveC9nNDAwX3dhcnAuZncKKworTGljZW5jZToKKworQ29weXJpZ2h0IDE5OTkgTWF0cm94IEdyYXBoaWNzIEluYy4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCitjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAordG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgordGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCithbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCitpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKK09SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCitNQVRST1ggR1JBUEhJQ1MgSU5DLiwgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKK0RBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFCitPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiByMTI4IC0gQVRJIFJhZ2UgMTI4CisKK0ZpbGU6IHIxMjgvcjEyOF9jY2UuYmluCisKK0xpY2VuY2U6CisKK0NvcHlyaWdodCAyMDAwIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKworICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFBSRUNJU0lPTiBJTlNJR0hUIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitGb3VuZCBpbiBkZWNpbWFsIGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiByYWRlb24gLSBBVEkgUmFkZW9uCisKK0ZpbGU6IHJhZGVvbi9SMTAwX2NwLmJpbgorRmlsZTogcmFkZW9uL1IyMDBfY3AuYmluCitGaWxlOiByYWRlb24vUjMwMF9jcC5iaW4KK0ZpbGU6IHJhZGVvbi9SNDIwX2NwLmJpbgorRmlsZTogcmFkZW9uL1JTNjAwX2NwLmJpbgorRmlsZTogcmFkZW9uL1JTNjkwX2NwLmJpbgorRmlsZTogcmFkZW9uL1I1MjBfY3AuYmluCitGaWxlOiByYWRlb24vUjYwMF9wZnAuYmluCitGaWxlOiByYWRlb24vUjYwMF9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9SVjYxMF9wZnAuYmluCitGaWxlOiByYWRlb24vUlY2MTBfbWUuYmluCitGaWxlOiByYWRlb24vUlY2MzBfcGZwLmJpbgorRmlsZTogcmFkZW9uL1JWNjMwX21lLmJpbgorRmlsZTogcmFkZW9uL1JWNjIwX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9SVjYyMF9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9SVjYzNV9wZnAuYmluCitGaWxlOiByYWRlb24vUlY2MzVfbWUuYmluCitGaWxlOiByYWRlb24vUlY2NzBfcGZwLmJpbgorRmlsZTogcmFkZW9uL1JWNjcwX21lLmJpbgorRmlsZTogcmFkZW9uL1JTNzgwX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9SUzc4MF9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9SVjc3MF9wZnAuYmluCitGaWxlOiByYWRlb24vUlY3NzBfbWUuYmluCitGaWxlOiByYWRlb24vUlY3MzBfcGZwLmJpbgorRmlsZTogcmFkZW9uL1JWNzMwX21lLmJpbgorRmlsZTogcmFkZW9uL1JWNzEwX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9SVjcxMF9tZS5iaW4KKworTGljZW5jZToKKworICogQ29weXJpZ2h0IDIwMDctMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSKFMpIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHJhZGVvbiAtIEFUSSBSYWRlb24KKworRmlsZTogcmFkZW9uL1I2MDBfcmxjLmJpbgorRmlsZTogcmFkZW9uL1I3MDBfcmxjLmJpbgorRmlsZTogcmFkZW9uL1JWNzEwX3V2ZC5iaW4KK0ZpbGU6IHJhZGVvbi9SVjcxMF9zbWMuYmluCitGaWxlOiByYWRlb24vUlY3MzBfc21jLmJpbgorRmlsZTogcmFkZW9uL1JWNzQwX3NtYy5iaW4KK0ZpbGU6IHJhZGVvbi9SVjc3MF9zbWMuYmluCitGaWxlOiByYWRlb24vQ0VEQVJfbWUuYmluCitGaWxlOiByYWRlb24vQ0VEQVJfcGZwLmJpbgorRmlsZTogcmFkZW9uL0NFREFSX3JsYy5iaW4KK0ZpbGU6IHJhZGVvbi9DRURBUl9zbWMuYmluCitGaWxlOiByYWRlb24vQ1lQUkVTU19tZS5iaW4KK0ZpbGU6IHJhZGVvbi9DWVBSRVNTX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9DWVBSRVNTX3JsYy5iaW4KK0ZpbGU6IHJhZGVvbi9DWVBSRVNTX3V2ZC5iaW4KK0ZpbGU6IHJhZGVvbi9DWVBSRVNTX3NtYy5iaW4KK0ZpbGU6IHJhZGVvbi9KVU5JUEVSX21lLmJpbgorRmlsZTogcmFkZW9uL0pVTklQRVJfcGZwLmJpbgorRmlsZTogcmFkZW9uL0pVTklQRVJfcmxjLmJpbgorRmlsZTogcmFkZW9uL0pVTklQRVJfc21jLmJpbgorRmlsZTogcmFkZW9uL1JFRFdPT0RfbWUuYmluCitGaWxlOiByYWRlb24vUkVEV09PRF9wZnAuYmluCitGaWxlOiByYWRlb24vUkVEV09PRF9ybGMuYmluCitGaWxlOiByYWRlb24vUkVEV09PRF9zbWMuYmluCitGaWxlOiByYWRlb24vUEFMTV9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9QQUxNX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9TVU1PX3JsYy5iaW4KK0ZpbGU6IHJhZGVvbi9TVU1PX3V2ZC5iaW4KK0ZpbGU6IHJhZGVvbi9CQVJUU19tYy5iaW4KK0ZpbGU6IHJhZGVvbi9CQVJUU19tZS5iaW4KK0ZpbGU6IHJhZGVvbi9CQVJUU19wZnAuYmluCitGaWxlOiByYWRlb24vQkFSVFNfc21jLmJpbgorRmlsZTogcmFkZW9uL0JUQ19ybGMuYmluCitGaWxlOiByYWRlb24vQ0FJQ09TX21jLmJpbgorRmlsZTogcmFkZW9uL0NBSUNPU19tZS5iaW4KK0ZpbGU6IHJhZGVvbi9DQUlDT1NfcGZwLmJpbgorRmlsZTogcmFkZW9uL0NBSUNPU19zbWMuYmluCitGaWxlOiByYWRlb24vVFVSS1NfbWMuYmluCitGaWxlOiByYWRlb24vVFVSS1NfbWUuYmluCitGaWxlOiByYWRlb24vVFVSS1NfcGZwLmJpbgorRmlsZTogcmFkZW9uL1RVUktTX3NtYy5iaW4KK0ZpbGU6IHJhZGVvbi9DQVlNQU5fbWMuYmluCitGaWxlOiByYWRlb24vQ0FZTUFOX21lLmJpbgorRmlsZTogcmFkZW9uL0NBWU1BTl9wZnAuYmluCitGaWxlOiByYWRlb24vQ0FZTUFOX3JsYy5iaW4KK0ZpbGU6IHJhZGVvbi9DQVlNQU5fc21jLmJpbgorRmlsZTogcmFkZW9uL1NVTU9fcGZwLmJpbgorRmlsZTogcmFkZW9uL1NVTU9fbWUuYmluCitGaWxlOiByYWRlb24vU1VNTzJfcGZwLmJpbgorRmlsZTogcmFkZW9uL1NVTU8yX21lLmJpbgorRmlsZTogcmFkZW9uL0FSVUJBX21lLmJpbgorRmlsZTogcmFkZW9uL0FSVUJBX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9BUlVCQV9ybGMuYmluCitGaWxlOiByYWRlb24vUElUQ0FJUk5fY2UuYmluCitGaWxlOiByYWRlb24vUElUQ0FJUk5fbWMuYmluCitGaWxlOiByYWRlb24vUElUQ0FJUk5fbWUuYmluCitGaWxlOiByYWRlb24vUElUQ0FJUk5fcGZwLmJpbgorRmlsZTogcmFkZW9uL1BJVENBSVJOX3JsYy5iaW4KK0ZpbGU6IHJhZGVvbi9QSVRDQUlSTl9zbWMuYmluCitGaWxlOiByYWRlb24vVEFISVRJX2NlLmJpbgorRmlsZTogcmFkZW9uL1RBSElUSV9tYy5iaW4KK0ZpbGU6IHJhZGVvbi9UQUhJVElfbWUuYmluCitGaWxlOiByYWRlb24vVEFISVRJX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9UQUhJVElfcmxjLmJpbgorRmlsZTogcmFkZW9uL1RBSElUSV91dmQuYmluCitGaWxlOiByYWRlb24vVEFISVRJX3NtYy5iaW4KK0ZpbGU6IHJhZGVvbi9WRVJERV9jZS5iaW4KK0ZpbGU6IHJhZGVvbi9WRVJERV9tYy5iaW4KK0ZpbGU6IHJhZGVvbi9WRVJERV9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9WRVJERV9wZnAuYmluCitGaWxlOiByYWRlb24vVkVSREVfcmxjLmJpbgorRmlsZTogcmFkZW9uL1ZFUkRFX3NtYy5iaW4KK0ZpbGU6IHJhZGVvbi9PTEFORF9jZS5iaW4KK0ZpbGU6IHJhZGVvbi9PTEFORF9tYy5iaW4KK0ZpbGU6IHJhZGVvbi9PTEFORF9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9PTEFORF9wZnAuYmluCitGaWxlOiByYWRlb24vT0xBTkRfcmxjLmJpbgorRmlsZTogcmFkZW9uL09MQU5EX3NtYy5iaW4KK0ZpbGU6IHJhZGVvbi9IQUlOQU5fY2UuYmluCitGaWxlOiByYWRlb24vSEFJTkFOX21jLmJpbgorRmlsZTogcmFkZW9uL0hBSU5BTl9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9IQUlOQU5fcGZwLmJpbgorRmlsZTogcmFkZW9uL0hBSU5BTl9ybGMuYmluCitGaWxlOiByYWRlb24vSEFJTkFOX3NtYy5iaW4KK0ZpbGU6IHJhZGVvbi9CT05BSVJFX2NlLmJpbgorRmlsZTogcmFkZW9uL0JPTkFJUkVfbWMuYmluCitGaWxlOiByYWRlb24vQk9OQUlSRV9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9CT05BSVJFX21lYy5iaW4KK0ZpbGU6IHJhZGVvbi9CT05BSVJFX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9CT05BSVJFX3JsYy5iaW4KK0ZpbGU6IHJhZGVvbi9CT05BSVJFX3NkbWEuYmluCitGaWxlOiByYWRlb24vQk9OQUlSRV91dmQuYmluCitGaWxlOiByYWRlb24vQk9OQUlSRV9zbWMuYmluCitGaWxlOiByYWRlb24vS0FCSU5JX2NlLmJpbgorRmlsZTogcmFkZW9uL0tBQklOSV9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9LQUJJTklfbWVjLmJpbgorRmlsZTogcmFkZW9uL0tBQklOSV9wZnAuYmluCitGaWxlOiByYWRlb24vS0FCSU5JX3JsYy5iaW4KK0ZpbGU6IHJhZGVvbi9LQUJJTklfc2RtYS5iaW4KK0ZpbGU6IHJhZGVvbi9LQVZFUklfY2UuYmluCitGaWxlOiByYWRlb24vS0FWRVJJX21lLmJpbgorRmlsZTogcmFkZW9uL0tBVkVSSV9tZWMuYmluCitGaWxlOiByYWRlb24vS0FWRVJJX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9LQVZFUklfcmxjLmJpbgorRmlsZTogcmFkZW9uL0tBVkVSSV9zZG1hLmJpbgorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTlNFLnJhZGVvbiBmb3IgZGV0YWlscy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBzMjI1NWRydgorCitGaWxlOiBmMjI1NXVzYi5iaW4KKworTGljZW5jZToKKyAgU2Vuc29yYXkgZ3JhbnRzIHBlcm1pc3Npb24gdG8gdXNlIGFuZCByZWRpc3RyaWJ1dGUgdGhlc2UgZmlybXdhcmUKKyAgZmlsZXMgZm9yIHVzZSB3aXRoIFNlbnNvcmF5IGRldmljZXMsIGJ1dCBub3QgYXMgYSBwYXJ0IG9mIHRoZSBMaW51eAorICBrZXJuZWwgb3IgaW4gYW55IG90aGVyIGZvcm0gd2hpY2ggd291bGQgcmVxdWlyZSB0aGVzZSBmaWxlcyB0aGVtc2VsdmVzCisgIHRvIGJlIGNvdmVyZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAgVGhlc2UgZmlybXdhcmUgZmlsZXMgYXJlIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgdGhleSB3aWxsIGJlCisgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHJ0bDgxOTJlIC0gUmVhbHRlayA4MTkyIFBDSSB3aXJlbGVzcyBkcml2ZXIKKworRmlsZTogUlRMODE5MkUvKgorTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLCBwcm92aWRlZCBieSBSZWFsdGVrIGluIHRoZWlyIGRyaXZlcgorICAgICAgICAgc291cmNlIGRvd25sb2FkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGxnczhneHggLSBMZWdlbmQgU2lsaWNvbiBHQjIwNjAwIGRlbW9kdWxhdG9yIGRyaXZlcgorCitGaWxlOiBsZ3M4Zzc1LmZ3CisKK0xpY2VuY2U6IFVua25vd24KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBpYl9xaWIgLSBRTG9naWMgSW5maW5pYmFuZAorCitGaWxlOiBxbG9naWMvc2Q3MjIwLmZ3CisKK0xpY2VuY2U6CisKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiB1ZWFnbGUtYXRtIC0gRHJpdmVyIGZvciBVU0IgQURTTCBNb2RlbXMgYmFzZWQgb24gRWFnbGUgSVYgQ2hpcHNldAorCitGaWxlOiB1ZWFnbGUtYXRtL0NNVjRwLmJpbi52MgorRmlsZTogdWVhZ2xlLWF0bS9EU1A0cC5iaW4KK0ZpbGU6IHVlYWdsZS1hdG0vZWFnbGVJVi5mdworVmVyc2lvbjogMS4wCisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UudWVhZ2xlLWF0bTQtZmlybXdhcmUgZm9yIGRldGFpbHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiB1ZWFnbGUtYXRtIC0gRHJpdmVyIGZvciBVU0IgQURTTCBNb2RlbXMgYmFzZWQgb24gRWFnbGUgSSxJSSxJSUkKKworRmlsZTogdWVhZ2xlLWF0bS85MzAtZnBnYS5iaW4KK0ZpbGU6IHVlYWdsZS1hdG0vQ01WZWlXTy5iaW4gICAgCitGaWxlOiB1ZWFnbGUtYXRtL0NNVmVwRlIxMC5iaW4gIAorRmlsZTogdWVhZ2xlLWF0bS9EU1A5cC5iaW4JCitGaWxlOiB1ZWFnbGUtYXRtL2VhZ2xlSUlJLmZ3CitGaWxlOiB1ZWFnbGUtYXRtL2FkaTkzMC5mdyAgICAgCitGaWxlOiB1ZWFnbGUtYXRtL0NNVmVwLmJpbiAgICAgIAorRmlsZTogdWVhZ2xlLWF0bS9DTVZlcEZSLmJpbiAgICAKK0ZpbGU6IHVlYWdsZS1hdG0vRFNQZWkuYmluCitGaWxlOiB1ZWFnbGUtYXRtL0NNVjlpLmJpbiAgICAgCitGaWxlOiB1ZWFnbGUtYXRtL0NNVmVwRVMwMy5iaW4gIAorRmlsZTogdWVhZ2xlLWF0bS9DTVZlcElULmJpbiAgICAKK0ZpbGU6IHVlYWdsZS1hdG0vRFNQZXAuYmluCitGaWxlOiB1ZWFnbGUtYXRtL0NNVjlwLmJpbiAgICAgCitGaWxlOiB1ZWFnbGUtYXRtL0NNVmVwRVMuYmluICAgIAorRmlsZTogdWVhZ2xlLWF0bS9DTVZlcFdPLmJpbiAgICAKK0ZpbGU6IHVlYWdsZS1hdG0vZWFnbGVJLmZ3CitGaWxlOiB1ZWFnbGUtYXRtL0NNVmVpLmJpbiAgICAgCitGaWxlOiB1ZWFnbGUtYXRtL0NNVmVwRlIwNC5iaW4gIAorRmlsZTogdWVhZ2xlLWF0bS9EU1A5aS5iaW4JICAgIAorRmlsZTogdWVhZ2xlLWF0bS9lYWdsZUlJLmZ3CitWZXJzaW9uOiAxLjEKKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBCYXNlZCBvbiAKKyAgICAgICAgIGh0dHBzOi8vbWFpbC5nbmEub3JnL3B1YmxpYy9lYWdsZXVzYi1kZXYvMjAwNC0xMS9tc2cwMDE3Mi5odG1sCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogdnhnZSAtIEV4YXIgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyCisKK0ZpbGU6IHZ4Z2UvWDNmdy5uY2YKK0ZpbGU6IHZ4Z2UvWDNmdy1weGUubmNmCitWZXJzaW9uOiAxLjguMQorCitMaWNlbmNlOgorCisgVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCisgc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAxMCBFeGFyIENvcnBvcmF0aW9uLgorCisgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKKyBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgYWNjb21wYW55aW5nIGl0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGJyY21zbWFjIC0gQnJvYWRjb20gODAyLjExbiBzb2Z0bWFjIHdpcmVsZXNzIExBTiBkcml2ZXIuCisKK0ZpbGU6IGJyY20vYmNtNDN4eC0wLmZ3CitGaWxlOiBicmNtL2JjbTQzeHhfaGRyLTAuZncKK1ZlcnNpb246IDYxMC44MTIKKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5icm9hZGNvbV9iY200M3h4IGZvciBkZXRhaWxzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGJyY21mbWFjIC0gQnJvYWRjb20gODAyLjExbiBmdWxsbWFjIHdpcmVsZXNzIExBTiBkcml2ZXIuCisKK0ZpbGU6IGJyY20vYmNtNDMyOS1mdWxsbWFjLTQuYmluCitGaWxlOiBicmNtL2JyY21mbWFjNDMyMzZiLmJpbgorRmlsZTogYnJjbS9icmNtZm1hYzQzMjktc2Rpby5iaW4KK0ZpbGU6IGJyY20vYnJjbWZtYWM0MzMwLXNkaW8uYmluCitGaWxlOiBicmNtL2JyY21mbWFjNDMzNC1zZGlvLmJpbgorRmlsZTogYnJjbS9icmNtZm1hYzQzMzUtc2Rpby5iaW4KK0ZpbGU6IGJyY20vYnJjbWZtYWM0MzI0MWIwLXNkaW8uYmluCitGaWxlOiBicmNtL2JyY21mbWFjNDMyNDFiNC1zZGlvLmJpbgorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLmJyb2FkY29tX2JjbTQzeHggZm9yIGRldGFpbHMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogdGRhNzcwNiAtIEZNIHJhZGlvIEhpZ2hseSBpbnRlZ3JhdGVkIHR1bmVyIGZvciBBTS9GTSBjYXItcmFkaW8KKworRmlsZTogVERBNzcwNl9PTV92Mi41LjFfYm9vdC50eHQKK0ZpbGU6IFREQTc3MDZfT01fdjMuMC4yX2Jvb3QudHh0CisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UudGRhNzcwNi1maXJtd2FyZS50eHQgZm9yIGRldGFpbHMuCisgICAgICAgIENvcHlyaWdodCDCqSAyMDEwIFNUTWljcm9lbGVjdHJvbmljcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHdsMTI1MSAtIFRleGFzIEluc3RydW1lbnRzIDgwMi4xMSBXTEFOIGRyaXZlciBmb3IgV2lMaW5rNCBjaGlwcworCitGaWxlOiB0aS1jb25uZWN0aXZpdHkvd2wxMjUxLWZ3LmJpbgorVmVyc2lvbjogNC4wLjQuMy43CisKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS93bDEyNTEtbnZzLmJpbgorCitMaWNlbmNlOiBTZWUgTElDRU5DRS53bDEyNTEgZm9yIGRldGFpbHMuCisKK1RoZSBwdWJsaXNoZWQgTlZTIGZpbGVzIGFyZSBmb3IgdGVzdGluZyBvbmx5LiAgRXZlcnkgZGV2aWNlIG5lZWRzIHRvCitoYXZlIGEgdW5pcXVlIE5WUyB3aGljaCBpcyBwcm9wZXJseSBjYWxpYnJhdGVkIGZvciBiZXN0IHJlc3VsdHMuCisKK1RoZSBkcml2ZXIgZXhwZWN0cyB0byBmaW5kIHRoZSBmaXJtd2FyZXMgdW5kZXIgYSB0aS1jb25uZWN0aXZpdHkgc3ViZGlyZWN0b3J5LgorU28gaWYgeW91ciBzeXN0ZW0gbG9va3MgZm9yIGZpcm13YXJlcyBpbiAvbGliL2Zpcm13YXJlLCB0aGUgZmlybXdhcmVzIGZvcgord2wxMnh4IGNoaXBzIG11c3QgYmUgbG9jYXRlZCBpbiAvbGliL2Zpcm13YXJlL3RpLWNvbm5lY3Rpdml0eS8uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogd2wxMnh4IC0gVGV4YXMgSW5zdHJ1bWVudHMgODAyLjExIFdMQU4gZHJpdmVyIGZvciBXaUxpbms2LzcgY2hpcHMKKworRmlsZTogdGktY29ubmVjdGl2aXR5L3dsMTI3MS1mdy5iaW4KK1ZlcnNpb246IDYuMS4wLjUwLjM1MCAoU1RBLW9ubHkpCitGaWxlOiB0aS1jb25uZWN0aXZpdHkvd2wxMjcxLWZ3LTIuYmluCitWZXJzaW9uOiA2LjEuNS41MC43NCAoU1RBLW9ubHkpCitGaWxlOiB0aS1jb25uZWN0aXZpdHkvd2wxMjcxLWZ3LWFwLmJpbgorVmVyc2lvbjogNi4yLjEuMC41NCAoQVAtb25seSkKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctMy5iaW4KK1ZlcnNpb246IDYuMy4wLjAuNzcKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctcGx0LTMuYmluCitWZXJzaW9uOiA2LjMuMC4wLjc3IChQTFQtb25seSkKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctNC1zci5iaW4KK1ZlcnNpb246IDYuMy41LjAuOTggKFNpbmdsZS1yb2xlKQorRmlsZTogdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy00LW1yLmJpbgorVmVyc2lvbjogNi41LjIuMC4xNSAoTXVsdGktcm9sZSkKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctNC1wbHQuYmluCitWZXJzaW9uOiA2LjMuNS4wLjk4IChQTFQtb25seSkKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctNS1zci5iaW4KK1ZlcnNpb246IDYuMy4xMC4wLjEzMyAoU2luZ2xlLXJvbGUpCitGaWxlOiB0aS1jb25uZWN0aXZpdHkvd2wxMjd4LWZ3LTUtbXIuYmluCitWZXJzaW9uOiA2LjUuNy4wLjQyIChNdWx0aS1yb2xlKQorRmlsZTogdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy01LXBsdC5iaW4KK1ZlcnNpb246IDYuMy4xMC4wLjEzMyAoUExULW9ubHkpCisKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS93bDEyOHgtZncuYmluCitWZXJzaW9uOiA3LjEuNS41MC43NCAoU1RBLW9ubHkpCitGaWxlOiB0aS1jb25uZWN0aXZpdHkvd2wxMjh4LWZ3LWFwLmJpbgorVmVyc2lvbjogNy4yLjEuMC41NCAoQVAtb25seSkKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctMy5iaW4KK1ZlcnNpb246IDcuMy4wLjAuNzcKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctcGx0LTMuYmluCitWZXJzaW9uOiA3LjMuMC4wLjc3CitGaWxlOiB0aS1jb25uZWN0aXZpdHkvd2wxMjh4LWZ3LTQtc3IuYmluCitWZXJzaW9uOiA3LjMuNS4wLjk4IChTaW5nbGUtcm9sZSkKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctNC1tci5iaW4KK1ZlcnNpb246IDcuNS4yLjAuMTUgKE11bHRpLXJvbGUpCitGaWxlOiB0aS1jb25uZWN0aXZpdHkvd2wxMjh4LWZ3LTQtcGx0LmJpbgorVmVyc2lvbjogNy4zLjUuMC45OCAoUExUKQorRmlsZTogdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy01LXNyLmJpbgorVmVyc2lvbjogNy4zLjEwLjAuMTMzIChTaW5nbGUtcm9sZSkKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctNS1tci5iaW4KK1ZlcnNpb246IDcuNS43LjAuNDIgKE11bHRpLXJvbGUpCitGaWxlOiB0aS1jb25uZWN0aXZpdHkvd2wxMjh4LWZ3LTUtcGx0LmJpbgorVmVyc2lvbjogNy4zLjEwLjIuMTMzIChQTFQtb25seSkKKworRmlsZTogdGktY29ubmVjdGl2aXR5L3dsMTI3eC1udnMuYmluCitGaWxlOiB0aS1jb25uZWN0aXZpdHkvd2wxMjh4LW52cy5iaW4KK0xpbms6IHRpLWNvbm5lY3Rpdml0eS93bDEyeHgtbnZzLmJpbiAtPiB3bDEyN3gtbnZzLmJpbgorTGluazogdGktY29ubmVjdGl2aXR5L3dsMTI3MS1udnMuYmluIC0+IHdsMTI3eC1udnMuYmluCisKK0xpY2VuY2U6IFNlZSBMSUNFTkNFLnRpLWNvbm5lY3Rpdml0eSBmb3IgZGV0YWlscy4KKworVGhlIE5WUyBmaWxlIGluY2x1ZGVzIHR3byBwYXJ0czoKKwkgLSByYWRpbyBjYWxpYnJhdGlvbgorCSAtIEhXIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAoYWthLiBJTkkgdmFsdWVzKQorCitUaGUgcHVibGlzaGVkIE5WUyBmaWxlcyBhcmUgZm9yIHRlc3Rpbmcgb25seS4gIEV2ZXJ5IGRldmljZSBuZWVkcyB0bworaGF2YSBhIHVuaXF1ZSBOVlMgd2hpY2ggaXMgcHJvcGVybHkgY2FsaWJyYXRlZCBmb3IgYmVzdCByZXN1bHRzLiAgWW91CitjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IE5WUyBnZW5lcmF0aW9uIGZvciB5b3VyIGRldmljZSBoZXJlOgorCitodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL3dsMTJ4eC9jYWxpYnJhdG9yCisKK0lmIHlvdSdyZSB1c2luZyBhIHdsMTI3eCBiYXNlZCBkZXZpY2UsIHVzZSBhIHN5bWJvbGljIGxpbmsgY2FsbGVkCit3bDEyNzEtbnZzLmJpbiB0aGF0IGxpbmtzIHRvIHRoZSB3bDEyN3gtbnZzLmJpbiBmaWxlLiAgSWYgeW91IGFyZQordXNpbmcgd2wxMjh4LCBsaW5rIHRvIHdsMTI4eC1udnMuYmluIGluc3RlYWQuCisKK1RoZSBkcml2ZXIgZXhwZWN0cyB0byBmaW5kIHRoZSBmaXJtd2FyZXMgdW5kZXIgYSB0aS1jb25uZWN0aXZpdHkKK3N1YmRpcmVjdG9yeS4gIFNvIGlmIHlvdXIgc3lzdGVtIGxvb2tzIGZvciBmaXJtd2FyZXMgaW4gL2xpYi9maXJtd2FyZSwKK3RoZSBmaXJtd2FyZXMgZm9yIHdsMTJ4eCBjaGlwcyBtdXN0IGJlIGxvY2F0ZWQgaW4KKy9saWIvZmlybXdhcmUvdGktY29ubmVjdGl2aXR5Ly4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiB3bDE4eHggLSBUZXhhcyBJbnN0cnVtZW50cyA4MDIuMTEgV0xBTiBkcml2ZXIgZm9yIFdpTGluazggY2hpcHMKKworRmlsZTogdGktY29ubmVjdGl2aXR5L3dsMTh4eC1mdy5iaW4KK1ZlcnNpb246IDguMi4wLjAuMTAwCitGaWxlOiB0aS1jb25uZWN0aXZpdHkvd2wxOHh4LWZ3LTIuYmluCitWZXJzaW9uOiA4LjUuMC4wLjU1CitGaWxlOiB0aS1jb25uZWN0aXZpdHkvd2wxOHh4LWNvbmYuYmluCitWZXJzaW9uOiA2LzUKKworTGljZW5jZTogU2VlIExJQ0VOQ0UudGktY29ubmVjdGl2aXR5IGZvciBkZXRhaWxzLgorCitUaGUgZHJpdmVyIGV4cGVjdHMgdG8gZmluZCB0aGUgZmlybXdhcmVzIHVuZGVyIGEgdGktY29ubmVjdGl2aXR5CitzdWJkaXJlY3RvcnkuICBTbyBpZiB5b3VyIHN5c3RlbSBsb29rcyBmb3IgZmlybXdhcmVzIGluIC9saWIvZmlybXdhcmUsCit0aGUgZmlybXdhcmVzIGZvciB3bDE4eHggY2hpcHMgbXVzdCBiZSBsb2NhdGVkIGluCisvbGliL2Zpcm13YXJlL3RpLWNvbm5lY3Rpdml0eS8uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogVElfU1QgLSBUZXhhcyBJbnN0cnVtZW50cyBibHVldG9vdGggZHJpdmVyCisKK0ZpbGU6IHRpLWNvbm5lY3Rpdml0eS9USUluaXRfNy4yLjMxLmJ0cworCitMaWNlbmNlOiBTZWUgTElDRU5DRS50aS1jb25uZWN0aXZpdHkgZm9yIGRldGFpbHMuCisKKwlUSUluaXRfNy4yLjMxLmJ0cyB2ZXJzaW9uIDcuMi4zMQorCisJSW4gb3JkZXIgdG8gdXNlIHRoYXQgZmlsZSBjb3B5IGl0IHRvIC9saWIvZmlybXdhcmUvdGktY29ubmVjdGl2aXR5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHRsZzIzMDAgLSBUZWxnZW50IDIzMDAgVjRML0RWQiBkcml2ZXIuCisKK0ZpbGU6IHRsZzIzMDBfZmlybXdhcmUuYmluCisKK0xpY2VuY2U6CisgIFRlbGVnZW50IFN5c3RlbSBncmFudHMgcGVybWlzc2lvbiB0byB1c2UgYW5kIHJlZGlzdHJpYnV0ZSB0aGVzZQorICBmaXJtd2FyZSBmaWxlcyBmb3IgdXNlIHdpdGggZGV2aWNlcyBjb250YWluaW5nIHRoZSBjaGlwIHRsZzIzMDAsIGJ1dAorICBub3QgYXMgYSBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgb3IgaW4gYW55IG90aGVyIGZvcm0gd2hpY2ggd291bGQKKyAgcmVxdWlyZSB0aGVzZSBmaWxlcyB0aGVtc2VsdmVzIHRvIGJlIGNvdmVyZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhlc2UgZmlybXdhcmUgZmlsZXMgYXJlIGRpc3RyaWJ1dGVkIGluIHRoZQorICBob3BlIHRoYXQgdGhleSB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4KKyAgdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICBQVVJQT1NFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHI4NzEydSAtIFJlYWx0ZWsgODAyLjExbiBXTEFOIGRyaXZlciBmb3IgUlRMODcxMlUKKworRmlsZTogcnRsd2lmaS9ydGw4NzEydS5iaW4KK0luZm86IEZyb20gVmVuZG9yJ3MgcnRsODcxMl84MTg4XzgxOTFfODE5MlNVX3VzYl9saW51eF92N18wLjIwMTAwODMxCisgICAgICBSZXZlcnRlZCBydGw4MTg4Q184MTkyQ184MTkyRF91c2JfbGludXhfdjMuNC4yXzM3MjcuMjAxMjA0MDQKKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dCBmb3IgZGV0YWlscy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBydGw4MTkyY2UgLSBSZWFsdGVrIDgwMi4xMW4gV0xBTiBkcml2ZXIgZm9yIFJUTDgxOTJDRQorCitGaWxlOiBydGx3aWZpL3J0bDgxOTJjZncuYmluCitGaWxlOiBydGx3aWZpL3J0bDgxOTJjZndVLmJpbgorRmlsZTogcnRsd2lmaS9ydGw4MTkyY2Z3VV9CLmJpbgorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLnJ0bHdpZmlfZmlybXdhcmUudHh0IGZvciBkZXRhaWxzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHJ0bDgxOTJjdSAtIFJlYWx0ZWsgODAyLjExbiBXTEFOIGRyaXZlciBmb3IgUlRMODE5MkNVCisKK0ZpbGU6IHJ0bHdpZmkvcnRsODE5MmN1ZncuYmluCitGSUxFOiBydGx3aWZpL3J0bDgxOTJjdWZ3X0EuYmluCitGSUxFOiBydGx3aWZpL3J0bDgxOTJjdWZ3X0IuYmluCitGSUxFOiBydGx3aWZpL3J0bDgxOTJjdWZ3X1RNU0MuYmluCisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UucnRsd2lmaV9maXJtd2FyZS50eHQgZm9yIGRldGFpbHMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogcnRsODE5MnNlIC0gUmVhbHRlayA4MDIuMTFuIFdMQU4gZHJpdmVyIGZvciBSVEw4MTkyU0UKKworSW5mbzogdXBkYXRlZCBmcm9tIHJ0bF85MmNlXzkyc2VfOTJkZV9saW51eF9tYWM4MDIxMV8wMDA0LjA4MTYuMjAxMSBkcml2ZXIgdmVyc2lvbgorRmlsZTogcnRsd2lmaS9ydGw4MTkyc2Vmdy5iaW4KKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dCBmb3IgZGV0YWlscy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBydGw4MTkyZGUgLSBSZWFsdGVrIDgwMi4xMW4gV0xBTiBkcml2ZXIgZm9yIFJUTDgxOTJERQorCitJbmZvOiB1cGRhdGVkIGZyb20gUmVhbHRlayB2ZXJzaW9uIHJ0bF85MmNlXzkyc2VfOTJkZV9saW51eF9tYWM4MDIxMV8wMDA0LjA4MTYuMjAxMQorRmlsZTogcnRsd2lmaS9ydGw4MTkyZGVmdy5iaW4KKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dCBmb3IgZGV0YWlscy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBydGw4NzIzZSAtIFJlYWx0ZWsgODAyLjExbiBXTEFOIGRyaXZlciBmb3IgUlRMODcyM0UKKworSW5mbzogVGFrZW4gZnJvbSBSZWFsdGVrIHZlcnNpb24gcnRsXzkyY2VfOTJzZV85MmRlXzg3MjNhZV9saW51eF9tYWM4MDIxMV8wMDA3LjA4MDkuMjAxMgorRmlsZTogcnRsd2lmaS9ydGw4NzIzZncuYmluCitGaWxlOiBydGx3aWZpL3J0bDg3MjNmd19CLmJpbgorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLnJ0bHdpZmlfZmlybXdhcmUudHh0IGZvciBkZXRhaWxzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHJ0bDgxODhlZSAtIFJlYWx0ZWsgODAyLjExbiBXTEFOIGRyaXZlciBmb3IgUlRMODE4OEVFCisKK0luZm86IFRha2VuIGZyb20gUmVhbHRlayB2ZXJzaW9uIHJ0bF85MmNlXzkyc2VfOTJkZV84NzIzYWVfODhlZV9saW51eF9tYWM4MDIxMV8wMDEwLjAxMDkuMjAxMworRmlsZTogcnRsd2lmaS9ydGw4MTg4ZWZ3LmJpbgorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLnJ0bHdpZmlfZmlybXdhcmUudHh0IGZvciBkZXRhaWxzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHJ0bDgxODhldSAtIFJlYWx0ZWsgODAyLjExbiBXTEFOIGRyaXZlciBmb3IgUlRMODE4OEVVCisKK0luZm86IFRha2VuIGZyb20gUmVhbHRlayB2ZXJzaW9uIFJUTDgxODhFVVNfbGludXhfdjQuMS40XzY3NzMuMjAxMzAyMjIKK0ZpbGU6IHJ0bHdpZmkvcnRsODE4OGV1ZncuYmluCisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UucnRsd2lmaV9maXJtd2FyZS50eHQgZm9yIGRldGFpbHMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogcjgxNjkgLSBSZWFsVGVrIDgxNjkvODE2OC84MTAxIGV0aGVybmV0IGRyaXZlci4KKworRmlsZTogcnRsX25pYy9ydGw4MTY4ZC0xLmZ3CitGaWxlOiBydGxfbmljL3J0bDgxNjhkLTIuZncKK0ZpbGU6IHJ0bF9uaWMvcnRsODEwNWUtMS5mdworRmlsZTogcnRsX25pYy9ydGw4MTY4ZS0xLmZ3CitGaWxlOiBydGxfbmljL3J0bDgxNjhlLTIuZncKKworRmlsZTogcnRsX25pYy9ydGw4MTY4ZS0zLmZ3CitWZXJzaW9uOiAwLjAuNAorCitGaWxlOiBydGxfbmljL3J0bDgxNjhmLTEuZncKK1ZlcnNpb246IDAuMC41CisKK0ZpbGU6IHJ0bF9uaWMvcnRsODE2OGYtMi5mdworVmVyc2lvbjogMC4wLjQKKworRmlsZTogcnRsX25pYy9ydGw4NDExLTEuZncKK1ZlcnNpb246IDAuMC4zCisKK0ZpbGU6IHJ0bF9uaWMvcnRsODQxMS0yLmZ3CitWZXJzaW9uOiAwLjAuMQorCitGaWxlOiBydGxfbmljL3J0bDg0MDItMS5mdworVmVyc2lvbjogMC4wLjEKKworRmlsZTogcnRsX25pYy9ydGw4MTA2ZS0xLmZ3CitWZXJzaW9uOiAwLjAuMQorCitGaWxlOiBydGxfbmljL3J0bDgxMDZlLTIuZncKK1ZlcnNpb246IDAuMC4xCisKK0ZpbGU6IHJ0bF9uaWMvcnRsODE2OGctMS5mdworVmVyc2lvbjogMC4wLjMKKworRmlsZTogcnRsX25pYy9ydGw4MTY4Zy0yLmZ3CitWZXJzaW9uOiAwLjAuMQorCitGaWxlOiBydGxfbmljL3J0bDgxNjhnLTMuZncKK1ZlcnNpb246IDAuMC4xCisKK0xpY2VuY2U6CisgKiBDb3B5cmlnaHQgwqkgMjAxMS0yMDEzLCBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUKKyAqIGRhdGEgaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0CisgKiBub3RpY2UgaXMgYWNjb21wYW55aW5nIGl0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHZ0NjY1NiAtIFZJQSBWVDY2NTYgVVNCIHdpcmVsZXNzIGRyaXZlcgorCitGaWxlOiB2bnR3dXNiLmZ3CisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UudmlhX3Z0NjY1NiBmb3IgZGV0YWlscy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBERlUgRHJpdmVyIGZvciBBdGhlcm9zIGJsdWV0b290aCBjaGlwc2V0IEFSMzAxMgorCitGaWxlOiBhcjNrL0F0aHJCVF8weDAxMDIwMDAxLmRmdQorRmlsZTogYXIzay9yYW1wc18weDAxMDIwMDAxXzI2LmRmdQorRmlsZTogYXIzay9BdGhyQlRfMHgwMTAyMDIwMC5kZnUKK0ZpbGU6IGFyM2svcmFtcHNfMHgwMTAyMDIwMF8yNi5kZnUKK0ZpbGU6IGFyM2svcmFtcHNfMHgwMTAyMDIwMF80MC5kZnUKK0ZpbGU6IGFyM2svQXRockJUXzB4MzEwMTAwMDAuZGZ1CitGaWxlOiBhcjNrL3JhbXBzXzB4MzEwMTAwMDBfNDAuZGZ1CitGaWxlOiBhcjNrL0F0aHJCVF8weDExMDIwMDAwLmRmdQorRmlsZTogYXIzay9yYW1wc18weDExMDIwMDAwXzQwLmRmdQorRmlsZTogYXIzay9BdGhyQlRfMHgwMTAyMDIwMS5kZnUKK0ZpbGU6IGFyM2svcmFtcHNfMHgwMTAyMDIwMV8yNi5kZnUKK0ZpbGU6IGFyM2svcmFtcHNfMHgwMTAyMDIwMV80MC5kZnUKK0ZpbGU6IGFyM2svQXRockJUXzB4NDEwMjAwMDAuZGZ1CitGaWxlOiBhcjNrL3JhbXBzXzB4NDEwMjAwMDBfNDAuZGZ1CisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UuYXRoZXJvc19maXJtd2FyZSBmb3IgZGV0YWlscworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6QXRoZXJvcyBBUjMwMHggVUFSVCBIQ0kgQmx1ZXRvb3RoIENoaXAgZHJpdmVyCisKK0ZpbGU6IGFyM2svMTAyMDIwMS9QU19BU0lDLnBzdAorRmlsZTogYXIzay8xMDIwMjAxL1JhbVBhdGNoLnR4dAorRmlsZTogYXIzay8xMDIwMjAwL2FyM2tiZGFkZHIucHN0CitGaWxlOiBhcjNrLzEwMjAyMDAvUFNfQVNJQy5wc3QKK0ZpbGU6IGFyM2svMTAyMDIwMC9SYW1QYXRjaC50eHQKK0ZpbGU6IGFyM2svMzAxMDEvYXIza2JkYWRkci5wc3QKK0ZpbGU6IGFyM2svMzAxMDEvUFNfQVNJQy5wc3QKK0ZpbGU6IGFyM2svMzAxMDEvUmFtUGF0Y2gudHh0CitGaWxlOiBhcjNrLzMwMDAwL2FyM2tiZGFkZHIucHN0CitGaWxlOiBhcjNrLzMwMDAwL1BTX0FTSUMucHN0CitGaWxlOiBhcjNrLzMwMDAwL1JhbVBhdGNoLnR4dAorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLmF0aGVyb3NfZmlybXdhcmUgZm9yIGRldGFpbHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBhdGg2a2wgLSBBdGhlcm9zIHN1cHBvcnQgZm9yIEFSNjAwMworCitGaWxlOiBhdGg2ay9BUjYwMDQvaHcxLjMvZnctMy5iaW4KK0ZpbGU6IGF0aDZrL0FSNjAwNC9odzEuMy9iZGF0YS5iaW4KK0ZpbGU6IGF0aDZrL0FSNjAwNC9odzEuMi9mdy0yLmJpbgorRmlsZTogYXRoNmsvQVI2MDA0L2h3MS4yL2JkYXRhLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzL2h3MS4wL290cC5iaW4uejc3CitGaWxlOiBhdGg2ay9BUjYwMDMvaHcxLjAvYmRhdGEuU0QzMS5iaW4KK0ZpbGU6IGF0aDZrL0FSNjAwMy9odzEuMC9iZGF0YS5TRDMyLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzL2h3MS4wL2RhdGEucGF0Y2guYmluCitGaWxlOiBhdGg2ay9BUjYwMDMvaHcxLjAvYmRhdGEuV0IzMS5iaW4KK0ZpbGU6IGF0aDZrL0FSNjAwMy9odzEuMC9hdGh3bGFuLmJpbi56NzcKK0ZpbGU6IGF0aDZrL0FSNjAwMy9odzIuMS4xL2Z3LTIuYmluCitGaWxlOiBhdGg2ay9BUjYwMDMvaHcyLjEuMS9mdy0zLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzL2h3Mi4xLjEvb3RwLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzL2h3Mi4xLjEvYXRod2xhbi5iaW4KK0ZpbGU6IGF0aDZrL0FSNjAwMy9odzIuMS4xL2VuZHBvaW50cGluZy5iaW4KK0ZpbGU6IGF0aDZrL0FSNjAwMy9odzIuMS4xL2JkYXRhLlNEMzEuYmluCitGaWxlOiBhdGg2ay9BUjYwMDMvaHcyLjEuMS9iZGF0YS5TRDMyLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzL2h3Mi4xLjEvZGF0YS5wYXRjaC5iaW4KK0ZpbGU6IGF0aDZrL0FSNjAwMy9odzIuMS4xL2JkYXRhLldCMzEuYmluCitGaWxlOiBhdGg2ay9BUjYwMDMvaHcyLjAvb3RwLmJpbi56NzcKK0ZpbGU6IGF0aDZrL0FSNjAwMy9odzIuMC9iZGF0YS5TRDMxLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzL2h3Mi4wL2JkYXRhLlNEMzIuYmluCitGaWxlOiBhdGg2ay9BUjYwMDMvaHcyLjAvZGF0YS5wYXRjaC5iaW4KK0ZpbGU6IGF0aDZrL0FSNjAwMy9odzIuMC9iZGF0YS5XQjMxLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzL2h3Mi4wL2F0aHdsYW4uYmluLno3NworRmlsZTogYXRoNmsvQVI2MDAyL2VlcHJvbS5kYXRhCitGaWxlOiBhdGg2ay9BUjYwMDIvZWVwcm9tLmJpbgorRmlsZTogYXRoNmsvQVI2MDAyL2F0aHdsYW4uYmluLno3NworRmlsZTogYXRoNmsvQVI2MDAyL2RhdGEucGF0Y2guaHcyXzAuYmluCisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UuYXRoZXJvc19maXJtd2FyZSBmb3IgZGV0YWlscworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IG15cmkxMGdlIC0gTXlyaTEwR0UgMTBHYkUgTklDIGRyaXZlcgorCitGaWxlOiBteXJpMTBnZV9ldGhfejhlLmRhdAorRmlsZTogbXlyaTEwZ2VfZXRocF96OGUuZGF0CitGaWxlOiBteXJpMTBnZV9yc3NfZXRoX3o4ZS5kYXQKK0ZpbGU6IG15cmkxMGdlX3Jzc19ldGhwX3o4ZS5kYXQKK1ZlcnNpb246IDEuNC41MgorCitMaWNlbnNlOiBSZWRpc3RyaWJ1dGFibGUuICBTZWUgTElDRU5DRS5teXJpMTBnZV9maXJtd2FyZSBmb3IgZGV0YWlscy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBhdGg2a2wgLSBBdGhlcm9zIHN1cHBvcnQgZm9yIEFSNjAwMyBXaUZpLUJsdWV0b290aCBjb21ibyBtb2R1bGUKKworRmlsZTogYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9hdGh3bGFuLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9iZGF0YS5TRDMxLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9iZGF0YS5TRDMyLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9iZGF0YS5XQjMxLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9kYXRhLnBhdGNoLmJpbgorRmlsZTogYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9lbmRwb2ludHBpbmcuYmluCitGaWxlOiBhdGg2ay9BUjYwMDMuMS9odzIuMS4xL290cC5iaW4KKworTGljZW5zZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlIGZvciBkZXRhaWxzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogYXRoNmtsIC0gQXRoZXJvcyBzdXBwb3J0IGZvciBBUjMwMDEgV2lGaS1CbHVldG9vdGggY29tYm8gbW9kdWxlCisKK0ZpbGU6IGFyM2svMzAxMDFjb2V4L2FyM2tiZGFkZHIucHN0CitGaWxlOiBhcjNrLzMwMTAxY29leC9QU19BU0lDX2FjbExvd1ByaS5wc3QKK0ZpbGU6IGFyM2svMzAxMDFjb2V4L1BTX0FTSUNfYWNsSGlnaFByaS5wc3QKK0ZpbGU6IGFyM2svMzAxMDFjb2V4L1BTX0FTSUMucHN0CitGaWxlOiBhcjNrLzMwMTAxY29leC9SYW1QYXRjaC50eHQKKworTGljZW5zZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlIGZvciBkZXRhaWxzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogZHJ4ayAtIE1pY3JvbmFzIERSWC1LIGRlbW9kdWxhdG9yIGRyaXZlcgorCitGaWxlOiBkdmItdXNiLXRlcnJhdGVjLWg1LWRyeGsuZncKKworTGljZW5jZToKK1RFUlJBVEVDIGdyYW50cyBwZXJtaXNzaW9uIHRvIHVzZSBhbmQgcmVkaXN0cmlidXRlIHRoZXNlIGZpcm13YXJlCitmaWxlcyBmb3IgdXNlIHdpdGggVEVSUkFURUMgZGV2aWNlcywgYnV0IG5vdCBhcyBwYXJ0IG9mIHRoZSBMaW51eAora2VybmVsIG9yIGluIGFueSBvdGhlciBmb3JtIHdoaWNoIHdvdWxkIHJlcXVpcmUgdGhlc2UgZmlsZXMgdGhlbXNlbHZlcwordG8gYmUgY292ZXJlZCBieSB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitUaGVzZSBmaXJtd2FyZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCB0aGV5IHdpbGwgYmUKK3VzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKK29mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBlbmUtdWI2MjUwIC0tIEVORSBVQjYyNTAgU0QgY2FyZCByZWFkZXIgZHJpdmVyCisKK0ZpbGU6IGVuZS11YjYyNTAvc2RfaW5pdDEuYmluCitGaWxlOiBlbmUtdWI2MjUwL3NkX2luaXQyLmJpbgorRmlsZTogZW5lLXViNjI1MC9zZF9yZHdyLmJpbgorRmlsZTogZW5lLXViNjI1MC9tc19pbml0LmJpbgorRmlsZTogZW5lLXViNjI1MC9tc3BfcmR3ci5iaW4KK0ZpbGU6IGVuZS11YjYyNTAvbXNfcmR3ci5iaW4KKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5lbmVfZmlybXdhcmUgZm9yIGRldGFpbHMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogaXNjaSAtLSBJbnRlbCBDNjAwIFNBUyBjb250cm9sbGVyIGRyaXZlcgorCitGaWxlOiBpc2NpL2lzY2lfZmlybXdhcmUuYmluCitTb3VyY2U6IGlzY2kvY3JlYXRlX2Z3LmMKK1NvdXJjZTogaXNjaS9jcmVhdGVfZncuaAorU291cmNlOiBpc2NpL3Byb2JlX3JvbXMuaAorU291cmNlOiBpc2NpL01ha2VmaWxlCisKK0xpY2VuY2U6IEdQTHYyCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogYXI1NTIzIC0tIEF0aGVyb3MgQVI1NTIzIGJhc2VkIFVTQiBXaWZpIGRvbmdsZXMKKworRmlsZTogYXI1NTIzLmJpbgorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLmF0aGVyb3NfZmlybXdhcmUgZm9yIGRldGFpbHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBzNXAtbWZjIC0gU2Ftc3VuZyBNRkMgdmlkZW8gZW5jb2Rlci9kZWNvZGVyIGRyaXZlcgorCitGaWxlOiBzNXAtbWZjL3M1cC1tZmMuZncKK0ZpbGU6IHM1cC1tZmMvczVwLW1mYy12Ni5mdworCitMaWNlbmNlOgorU2Ftc3VuZyBncmFudHMgcGVybWlzc2lvbiB0byB1c2UgYW5kIHJlZGlzdHJpYnV0ZSB0aGVzZSBmaXJtd2FyZQorZmlsZXMgZm9yIHVzZSB3aXRoIEV4eW5vcyBzZXJpZXMgZGV2aWNlcywgYnV0IG5vdCBhcyBwYXJ0IG9mIHRoZSBMaW51eAora2VybmVsIG9yIGluIGFueSBvdGhlciBmb3JtIHdoaWNoIHdvdWxkIHJlcXVpcmUgdGhlc2UgZmlsZXMgdGhlbXNlbHZlcwordG8gYmUgY292ZXJlZCBieSB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitUaGVzZSBmaXJtd2FyZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCB0aGV5IHdpbGwgYmUKK3VzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKK29mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBjYXJsOTE3MCAtLSBBdGhlcm9zIEFSOTE3MCA4MDIuMTEgZHJhZnQtbiBVU0IgZHJpdmVyCisKK0ZpbGU6IGNhcmw5MTcwLTEuZncKK1ZlcnNpb246IDEuOS42CitTb3VyY2U6IGNhcmw5MTcwZncvCisKK0Rvd25sb2FkZWQgZnJvbSBodHRwOi8vbGludXh3aXJlbGVzcy5vcmcvZW4vdXNlcnMvRHJpdmVycy9jYXJsOTE3MAorCitMaWNlbmNlOiBHUEx2Mi4gU29tZSBidWlsZCBzY3JpcHRzIHVzZSB0aGUgTmV3IEJTRCAoMy1jbGF1c2UpIGxpY2VuY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogc25kLWhkYS1jb2RlYy1jYTAxMzIgLSBDcmVhdGl2ZSBTb3VuZCBDb3JlM0QgY29kZWMKKworRmlsZTogY3RlZnguYmluCitGaWxlOiBjdHNwZXEuYmluCisKK0xpY2VuY2U6IFJlZGlzdHJpYnV0YWJsZS4gU2VlIExJQ0VOQ0UuY2EwMTMyIGZvciBkZXRhaWxzCisKK0ZvdW5kIGFsc28gaW4gYWxzYS1maXJtd2FyZSBwYWNrYWdlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGJ0dXNiIC0gQmx1ZXRvb3RoIFVTQiBkcml2ZXIKKworRmlsZTogaW50ZWwvaWJ0LWh3LTM3LjcuYnNlcQorVmVyc2lvbjogMTMxNi4wMi4wMAorRmlsZTogaW50ZWwvaWJ0LWh3LTM3LjcuMTAtZnctMS44MC4yLjMuZC5ic2VxCitWZXJzaW9uOiAxMzM0LjAyLjJFCitGaWxlOiBpbnRlbC9pYnQtaHctMzcuNy4xMC1mdy0xLjAuMi4zLmQuYnNlcQorVmVyc2lvbjogMTMzNC4wMi4yRQorCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLmlidF9maXJtd2FyZSBmb3IgZGV0YWlscworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGJ0bXRrX3VzYiAtIEJsdWV0b290aCBVU0IgZHJpdmVyCisKK0ZpbGU6IG10NzY1MC5iaW4KKworTGljZW5jZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5DRS5yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlIGZvciBkZXRhaWxzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogcnAyIC0tIENvbXRyb2wgUm9ja2V0UG9ydCAyIHNlcmlhbCBkcml2ZXIKKworRmlsZTogcnAyLmZ3CisKK0xpY2VuY2U6CitDb3B5cmlnaHQgKEMpIDIwMTMgQ29tdHJvbCBDb3Jwb3JhdGlvbgorCitDb210cm9sIGdyYW50cyBwZXJtaXNzaW9uIHRvIHVzZSBhbmQgcmVkaXN0cmlidXRlIHRoZXNlIGZpcm13YXJlCitmaWxlcyBmb3IgdXNlIHdpdGggQ29tdHJvbCBkZXZpY2VzLCBidXQgbm90IGFzIHBhcnQgb2YgdGhlIExpbnV4CitrZXJuZWwgb3IgaW4gYW55IG90aGVyIGZvcm0gd2hpY2ggd291bGQgcmVxdWlyZSB0aGVzZSBmaWxlcyB0aGVtc2VsdmVzCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK1RoZXNlIGZpcm13YXJlIGZpbGVzIGFyZSBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IHRoZXkgd2lsbCBiZQordXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IGdvNzAwNworCitGaWxlOiBnbzcwMDcvczIyNTAtMS5mdworRmlsZTogZ283MDA3L3MyMjUwLTIuZncKK0xpbms6IHMyMjUwLmZ3IC0+IGdvNzAwNy9zMjI1MC0yLmZ3CitMaW5rOiBzMjI1MF9sb2FkZXIuZncgLT4gZ283MDA3L3MyMjUwLTEuZncKKworTGljZW5jZToKKyAgU2Vuc29yYXkgZ3JhbnRzIHBlcm1pc3Npb24gdG8gdXNlIGFuZCByZWRpc3RyaWJ1dGUgdGhlc2UgZmlybXdhcmUKKyAgZmlsZXMgZm9yIHVzZSB3aXRoIFNlbnNvcmF5IGRldmljZXMsIGJ1dCBub3QgYXMgYSBwYXJ0IG9mIHRoZSBMaW51eAorICBrZXJuZWwgb3IgaW4gYW55IG90aGVyIGZvcm0gd2hpY2ggd291bGQgcmVxdWlyZSB0aGVzZSBmaWxlcyB0aGVtc2VsdmVzCisgIHRvIGJlIGNvdmVyZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAgVGhlc2UgZmlybXdhcmUgZmlsZXMgYXJlIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgdGhleSB3aWxsIGJlCisgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitGaWxlOiBnbzcwMDcvZ283MDA3ZncuYmluCitGaWxlOiBnbzcwMDcvZ283MDA3dHYuYmluCitGaWxlOiBnbzcwMDcvbHIxOTIuZncKK0ZpbGU6IGdvNzAwNy9weC1tNDAydS5mdworRmlsZTogZ283MDA3L3B4LXR2NDAydS5mdworRmlsZTogZ283MDA3L3dpcy1zdGFydHJlay5mdworCitMaWNlbmNlOiBSZWRpc3RyaWJ1dGFibGUuIFNlZSBMSUNFTkNFLmdvNzAwN19maXJtd2FyZSBmb3IgZGV0YWlscworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IG1pY3JvY29kZV9hbWQgLSBBTUQgQ1BVIE1pY3JvY29kZSBVcGRhdGUgRHJpdmVyIGZvciBMaW51eAorCitGaWxlOiBhbWQtdWNvZGUvbWljcm9jb2RlX2FtZC5iaW4KK1ZlcnNpb246IDIwMTMtMDctMTAKK0ZpbGU6IGFtZC11Y29kZS9taWNyb2NvZGVfYW1kX2ZhbTE1aC5iaW4KK1ZlcnNpb246IDIwMTMtMDctMTAKKworTGljZW5zZTogUmVkaXN0cmlidXRhYmxlLiBTZWUgTElDRU5TRS5hbWQtdWNvZGUgZm9yIGRldGFpbHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBteHVwb3J0IC0gTU9YQSBVUG9ydCBVU0IgU2VyaWFsIGh1YiBkcml2ZXIKKworRmlsZTogbW94YS9tb3hhLTEyNTAuZncKK0ZpbGU6IG1veGEvbW94YS0xMjUxLmZ3CitGaWxlOiBtb3hhL21veGEtMTQxMC5mdworRmlsZTogbW94YS9tb3hhLTE0NTAuZncKK0ZpbGU6IG1veGEvbW94YS0xNDUxLmZ3CitGaWxlOiBtb3hhL21veGEtMTYxMy5mdworRmlsZTogbW94YS9tb3hhLTE2MTguZncKK0ZpbGU6IG1veGEvbW94YS0xNjUzLmZ3CitGaWxlOiBtb3hhL21veGEtMTY1OC5mdworCitMaWNlbnNlOgorVGhlIHNvZnR3YXJlIGFjY29tcGFueWluZyB0aGlzIGxpY2Vuc2Ugc3RhdGVtZW50ICh0aGUg4oCcU29mdHdhcmXigJ0pCitpcyB0aGUgcHJvcGVydHkgb2YgTW94YSBJbmMuICh0aGUg4oCcTW94YeKAnSksIGFuZCBpcyBwcm90ZWN0ZWQgYnkKK1VuaXRlZCBTdGF0ZXMgYW5kIEludGVybmF0aW9uYWwgQ29weXJpZ2h0IExhd3MgYW5kIEludGVybmF0aW9uYWwKK3RyZWF0eSBwcm92aXNpb25zLiBObyBvd25lcnNoaXAgcmlnaHRzIGFyZSBncmFudGVkIGJ5IHRoaXMKK0FncmVlbWVudCBvciBwb3NzZXNzaW9uIG9mIHRoZSBTb2Z0d2FyZS4gVGhlcmVmb3JlLCB5b3UgbXVzdCB0cmVhdAordGhlIExpY2Vuc2VkIFNvZnR3YXJlIGxpa2UgYW55IG90aGVyIGNvcHlyaWdodGVkIG1hdGVyaWFsLiBZb3VyCityaWdodHMgYW5kIG9ibGlnYXRpb25zIGluIGl0cyB1c2UgYXJlIGRlc2NyaWJlZCBhcyBmb2xsb3dzOgorCisxLiBZb3UgbWF5IGZyZWVseSByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSB1bmRlciB0aGlzIGxpY2Vuc2UuCisyLiBZb3UgbWF5IGZyZWVseSBkb3dubG9hZCBhbmQgdXNlIHRoaXMgc29mdHdhcmUgb24gTW94YSdzIGRldmljZS4KKzMuIFlvdSBtYXkgbm90IG1vZGlmeSBvciBhdHRlbXB0IHRvIHJldmVyc2UgZW5naW5lZXIgdGhlIHNvZnR3YXJlLCBvcgorICAgbWFrZSBhbnkgYXR0ZW1wdCB0byBjaGFuZ2Ugb3IgZXZlbiBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUKKyAgIHNvZnR3YXJlLgorNC4gWW91IG1heSBub3QgcmUtbGljZW5zZSBvciBzdWItbGljZW5zZSB0aGUgc29mdHdhcmUgdG8gYW55IHBlcnNvbiBvcgorICAgYnVzaW5lc3MsIHVzaW5nIGFueSBvdGhlciBsaWNlbnNlLgorNS4gTW94YShyKSBpcyB3b3JsZHdpZGUgcmVnaXN0ZXJlZCB0cmFkZW1hcmsuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogY3cxMjAwIC0gU1QtRSBDVzExMDAvQ1cxMjAwIFdMQU4gZHJpdmVyCisKK0ZpbGU6IHNkZF9zYWdyYWRfMTA5MV8xMDk4LmJpbgorCitMaWNlbnNlOgorICBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMyBTYWdyYWQsIEluYy4KKworICBUaGlzIFNERCAoIlN0YXRpYyBEeW5hbWljIERhdGEiKSBmaWxlIGlzIGxpY2Vuc2VkIHN0cmljdGx5IGZvciB1c2Ugd2l0aAorICB0aGUgU2FncmFkIFdpRmkgbW9kdWxlcyAoc3VjaCBhcyB0aGUgU0c5MDEtMTA5MS8xMDk4KSB0aGF0IHV0aWxpemUgdGhlCisgIGN3MTIwMCBkcml2ZXIuIFRoZXJlIGlzIG5vIHdhcnJhbnR5IGV4cHJlc3NlZCBvciBpbXBsaWVkIGFib3V0IGl0cyAKKyAgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuCisKKyAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFNERCBmaWxlIGFzCisgIHBhcnQgb2YgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgaW4gdGV4dCBvcgorICBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4KKworICAoUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGRldmljZSBmaXJtd2FyZSBpcyBzZXBhcmF0ZWx5IGxpY2Vuc2VkIGJ5IAorICAgU1QtRSwgd2hvIGhhcyBub3QgcHJvdmlkZWQgZXhwbGljaXQgcGVybWlzc2lvbiBmb3IgZ2VuZXJhbCByZWRpc3RpYnV0aW9uKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IEJGQS9CTkEgLSBCcm9jYWRlIEFkYXB0ZXIgRkMvRkNPRSBkcml2ZXJzCisKK0ZpbGU6IGNiZnctMy4yLjEuMS5iaW4KK0ZJbGU6IGN0ZnctMy4yLjEuMS5iaW4KK0ZJbGU6IGN0MmZ3LTMuMi4xLjEuYmluCisKK0xpY2VuY2U6CisKK1RoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAorc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAxMyBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKK2luIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKK2FjY29tcGFueWluZyBpdC4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworQnJvY2FkZSBncmFudHMgcGVybWlzc2lvbiB0byB1c2UgYW5kIHJlZGlzdHJpYnV0ZSB0aGVzZSBmaXJtd2FyZSBmaWxlcworZm9yIHVzZSB3aXRoIEJyb2NhZGUgZGV2aWNlcywgYnV0IG5vdCBhcyBhIHBhcnQgb2YgdGhlIExpbnV4CitrZXJuZWwgb3IgaW4gYW55IG90aGVyIGZvcm0gd2hpY2ggd291bGQgcmVxdWlyZSB0aGVzZSBmaWxlcyB0aGVtc2VsdmVzCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitUaGVzZSBmaXJtd2FyZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCB0aGV5IHdpbGwgYmUKK3VzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKK29mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwpkaWZmIC0tZ2l0IGEvYWNlbmljL3RnMS5iaW4gYi9hY2VuaWMvdGcxLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTcxNGZhCi0tLSAvZGV2L251bGwKKysrIGIvYWNlbmljL3RnMS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWNlbmljL3RnMi5iaW4gYi9hY2VuaWMvdGcyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODk5ODFlCi0tLSAvZGV2L251bGwKKysrIGIvYWNlbmljL3RnMi5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWRhcHRlYy9zdGFyZmlyZV9yeC5iaW4gYi9hZGFwdGVjL3N0YXJmaXJlX3J4LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWJkODhmCi0tLSAvZGV2L251bGwKKysrIGIvYWRhcHRlYy9zdGFyZmlyZV9yeC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWRhcHRlYy9zdGFyZmlyZV90eC5iaW4gYi9hZGFwdGVjL3N0YXJmaXJlX3R4LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWJkODhmCi0tLSAvZGV2L251bGwKKysrIGIvYWRhcHRlYy9zdGFyZmlyZV90eC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWR2YW5zeXMvMzU1MC5iaW4gYi9hZHZhbnN5cy8zNTUwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTQ1ODFjCi0tLSAvZGV2L251bGwKKysrIGIvYWR2YW5zeXMvMzU1MC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWR2YW5zeXMvMzhDMDgwMC5iaW4gYi9hZHZhbnN5cy8zOEMwODAwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjIyMmNkCi0tLSAvZGV2L251bGwKKysrIGIvYWR2YW5zeXMvMzhDMDgwMC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWR2YW5zeXMvMzhDMTYwMC5iaW4gYi9hZHZhbnN5cy8zOEMxNjAwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjU2OGRmCi0tLSAvZGV2L251bGwKKysrIGIvYWR2YW5zeXMvMzhDMTYwMC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWR2YW5zeXMvbWNvZGUuYmluIGIvYWR2YW5zeXMvbWNvZGUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMjY1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hZHZhbnN5cy9tY29kZS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWdlcmVfYXBfZncuYmluIGIvYWdlcmVfYXBfZncuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNzVjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VyZV9hcF9mdy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWdlcmVfc3RhX2Z3LmJpbiBiL2FnZXJlX3N0YV9mdy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlMDAwZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZXJlX3N0YV9mdy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYW1kLXVjb2RlL21pY3JvY29kZV9hbWQuYmluIGIvYW1kLXVjb2RlL21pY3JvY29kZV9hbWQuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzlkZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hbWQtdWNvZGUvbWljcm9jb2RlX2FtZC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYW1kLXVjb2RlL21pY3JvY29kZV9hbWQuYmluLmFzYyBiL2FtZC11Y29kZS9taWNyb2NvZGVfYW1kLmJpbi5hc2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwNDhiMQotLS0gL2Rldi9udWxsCisrKyBiL2FtZC11Y29kZS9taWNyb2NvZGVfYW1kLmJpbi5hc2MKQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KK1ZlcnNpb246IEdudVBHIHYxLjQuMTEgKEdOVS9MaW51eCkKKworaVFFY0JBQUJBZ0FHQlFKUjNka0xBQW9KRUtYbzI4bU1BUWkwLzljSUFLcmFYbGJjaFpra0lQenlNclpCWlpKZQoremFwTXRlcnBMZERZTDZ6dWtmcWdGN0ZyZzk0K2lsR1BLOXlLQUZzdkMrRUp5SHJGNWxiUlEvSnRoQU5kUnYrWQorOHNCS3o1L2tuVkk3MldkalNqZys0NzNJMXJGZElVSytZTjdZZ3A2ZUF3UDNmZy9JUTlVRDlpUWZXS2JiVW54MAorV1NFTUNabS9penN5VTJMUU1KdnRpekoyZ3o5a3RGb0FMVXRUdmowYnYzNENLcisrcXFuZ0VWRnkvV0tRZFI2eAorUjNsNU1qRkFodnpPME85Z1Y1OXMxdFhiUFU1NkhSaE1idlNCbjNOSVZadTE3cHdBRnlTSHdRTEFlVzEwR0gwagorVWZncEtRcHBiejkwaUxMYVNoOHZzZVRPb1RCbjVTZWdEdEswSkVKTk1PdUsxVm9aK2tndjBjcUdDczE3SEJRPQorPUZuSHYKKy0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQpkaWZmIC0tZ2l0IGEvYW1kLXVjb2RlL21pY3JvY29kZV9hbWRfZmFtMTVoLmJpbiBiL2FtZC11Y29kZS9taWNyb2NvZGVfYW1kX2ZhbTE1aC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhhMmY3YwotLS0gL2Rldi9udWxsCisrKyBiL2FtZC11Y29kZS9taWNyb2NvZGVfYW1kX2ZhbTE1aC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYW1kLXVjb2RlL21pY3JvY29kZV9hbWRfZmFtMTVoLmJpbi5hc2MgYi9hbWQtdWNvZGUvbWljcm9jb2RlX2FtZF9mYW0xNWguYmluLmFzYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTI1ZDBkCi0tLSAvZGV2L251bGwKKysrIGIvYW1kLXVjb2RlL21pY3JvY29kZV9hbWRfZmFtMTVoLmJpbi5hc2MKQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KK1ZlcnNpb246IEdudVBHIHYxLjQuMTEgKEdOVS9MaW51eCkKKworaVFFY0JBQUJBZ0FHQlFKUjNka2ZBQW9KRUtYbzI4bU1BUWkwaVRzSUFKNW5DZ3ovK2pGWWFnMlcvT0gra09RZQorQkRYWVNDNWRpWFFSNXdGL0hVa1hXaDBzbCtqTksvT3JSVnhUN3NGYUVnQVVoRVhoSzZEZi9oN3FuSkFZUUdGcgorNStDS2hmU3IvMFFiazF6aVdZQVhWS01PWGJ1TFdTU0lvdjFTQ2N3THNwczdBN3B1SVRLNnhEZW1MYnk3S0RHQworeENVZktJTS9CTzZEeUZwTmhLUSt4SmREaSt5VnhVS1FoYmRrLzhnWTk0VmRVblZacTNDVEs5VVN0cEJ1YVh1MAorcUpOZmhiYVUrT3pnWm1ubUxxNSt4R3NDTUwxeGZiZ0Y2c2V4VlJ4N29UL0p2MzB0bTk3WVFKV1IwaDREVTdqVQorempJRDhrR3RZUlZWNytpOGpDK2pWcEZvMjF5RFZVa0hVY3F0TlhYUkIvbGJPWUZBbStVSnZpQUVjNE5FZFN3PQorPUphV1kKKy0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQpkaWZmIC0tZ2l0IGEvYXIzay8xMDIwMjAwL1BTX0FTSUMucHN0IGIvYXIzay8xMDIwMjAwL1BTX0FTSUMucHN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YjJlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcjNrLzEwMjAyMDAvUFNfQVNJQy5wc3QKQEAgLTAsMCArMSwxMzMgQEAKKw0KKy8vIFJhZGlvIHRhYmxlIFRBRyANCisjDQorW0g6U10wMTJDDQorW0g6U10wMEVFDQorW0g6QV1CMSBCMSAxMiAwMCBCMCAwOCBGRSBGRSA3RSAwMCAxOSAwMCAwMCAyMCAwMiAwMCANCisgICAgIDBDIDA5IDAwIDE0IDAwIDAwIDhDIDA4IDAwIDAwIDAwIDQwIDgwIDA4IDc4IDAwIA0KKyAgICAgMDAgMDEgODQgMDggQUQgQUMgODAgNUYgODggMDggMjAgM0YgMDAgNDEgOEMgMDggDQorICAgICAwMCAwMCAwMCA0MCA5NCAwOCA1NCAyNSA2NCA5MiA5OCAwOCBDOCA0RSAyQyAyRSANCisgICAgIDlDIDA4IEMwIDIwIERBIDJDIEMwIDA4IEI2IDBEIDAxIDAwIEM0IDA4IDZDIERCIA0KKyAgICAgQjYgNkQgQzggMDggREIgMzYgRDMgNkQgQ0MgMDggNjAgREIgQjYgNkQgMDAgMDkgDQorICAgICA1MCAwMCA5MiAwNCAwNCAwOSAyMCA0OSAwMCA4MCAwOCAwOSBFMCA2RiA1QiBFNSANCisgICAgIDBDIDA5IDAwIDE0IDAwIDAwIDEwIDA5IDgxIDAzIDMwIEYwIDE0IDA5IDgwIDgwIA0KKyAgICAgNDMgMDAgMTggMDkgMDAgMDAgMDAgODAgMUMgMDkgMDAgMDAgMDAgMDAgMjAgMDkgDQorICAgICAwMiAwMCAwMCAwMCA4MCAwQSAzRiAwMCAwNCAwMCA4NCAwQSA2MCAyNyA3NiAyMCANCisgICAgIDg4IDBBIDAwIDYwIDA0IDU4IDYwIDAwIDAwIDYwIDAyIDAwIDA0IDA3IEM0IEMxIA0KKyAgICAgOEIgMDAgMUMgMDAgMDAgMDUgOTAgMDEgMEMgMDcgMDAgMEQgMDAgMDAgMzAgMDAgDQorICAgICBEOCA3MCBFRiA0QSA3QyAwMCBCMCBEMiA1QSBCMSA3OCAwMCBERSA3QSA1OCAwMCANCisgICAgIDVDIDAwIDAxIDAwIDE0IDAxIDQ0IDAwIDAwIDAwIDEwIEU0IDg0IDAwIDNGIEYwIA0KKyAgICAgRTcgMDQgQzAgMDAgOTAgMDEgMkMgMDAgREMgMDAgRDggNDAgMDYgMDAgDQorLy8gUmFkaW8gdGFibGUgVEFHIA0KKyMNCitbSDpTXTAxMkQNCitbSDpTXTAwRjANCitbSDpBXTg4IDAwIDUyIDZCIDNEIDBFIDk0IDAwIDQxIDA2IDAwIDAwIDgwIDAwIDIwIDlDIA0KKyAgICAgQzggMDAgOTAgMDAgREQgREQgOTcgMDYgNTQgMDAgRTAgQTYgMDkgMDAgMTAgMDcgDQorICAgICAzRCBBMCAwMCAzRCAxNCAwNyBBMCA4MCAwMSAwMCAxOCAwNyAxNyA1NSBEMSAwQyANCisgICAgIDFDIDA3IDZEIDIzIDAwIDAwIEMwIDA3IDY1IEE4IDBDIDBCIEU0IDA3IDI3IENBIA0KKyAgICAgNTQgMDAgQzQgMDcgRkYgRkYgRkYgM0YgQzggMDcgRkYgRkYgRTMgM0YgQ0MgMDcgDQorICAgICBGRiBGRiBGRiAzRiBEMCAwNyBGRiBGRiBGRiAzRiBENCAwNyAzRiBGRSBGRiAzRiANCisgICAgIEQ4IDA3IEZGIEZGIEZGIDNGIERDIDA3IEZGIEZGIEZGIDM4IEUwIDA3IEZGIEZGIA0KKyAgICAgRkYgM0YgQkMgMDcgRDggMDUgMDAgMDAgQjggMDcgNDIgMDAgMEIgMDAgMDAgMDUgDQorICAgICA0QSAxQyAwMCAwMCAwNCAwNSA4QSAxQyAwMCAwMCAwOCAwNSBDQSAxQyAwMCAwMCANCisgICAgIDBDIDA1IDBBIDFEIDAwIDAwIDEwIDA1IDRBIDFEIDAwIDAwIDE0IDA1IDFBIDFDIA0KKyAgICAgMDAgMDAgMTggMDUgNUEgMUMgMDAgMDAgMUMgMDUgOUEgMUMgMDAgMDAgMjAgMDUgDQorICAgICBEQSAxQyAwMCAwMCAyNCAwNSAxQSAxRCAwMCAwMCAyOCAwNSA1QSAxRCAwMCAwMCANCisgICAgIDJDIDA1IDJBIDFDIDAwIDAwIDMwIDA1IDZBIDFDIDAwIDAwIDM0IDA1IEFBIDFDIA0KKyAgICAgMDAgMDAgMzggMDUgRUEgMUMgMDAgMDAgM0MgMDUgMkEgMUQgMDAgMDAgNDAgMDUgDQorICAgICA2QSAxRCAwMCAwMCA0NCAwNSAzQSAxQyAwMCAwMCA0OCAwNSAyQiAxQyAwMCAwMCANCisNCisvLyBSYWRpbyB0YWJsZSBUQUcgDQorIw0KK1tIOlNdMDEyRQ0KK1tIOlNdMDBGMA0KK1tIOkFdNEMgMDUgNkIgMUMgMDAgMDAgNTAgMDUgQUIgMUMgMDAgMDAgNTQgMDUgRUIgMUMgDQorICAgICAwMCAwMCA1OCAwNSAyQiAxRCAwMCAwMCA1QyAwNSA1QyAxRCAwMCAwMCA2MCAwNSANCisgICAgIDJDIDFDIDAwIDAwIDY0IDA1IDZDIDFDIDAwIDAwIDY4IDA1IEFDIDFDIDAwIDAwIA0KKyAgICAgNkMgMDUgMUQgMUQgMDAgMDAgNzAgMDUgMkQgMUMgMDAgMDAgNzQgMDUgNkQgMUMgDQorICAgICAwMCAwMCA3OCAwNSBBRCAxQyAwMCAwMCA3QyAwNSBDRiAxQyAwMCAwMCA4MCAwNSANCisgICAgIDBGIDFEIDAwIDAwIDg0IDA1IDRGIDFEIDAwIDAwIDg4IDA1IDhGIDFEIDAwIDAwIA0KKyAgICAgOEMgMDUgNkUgMUMgMDAgMDAgOTAgMDUgQUUgMUMgMDAgMDAgOTQgMDUgRUUgMUMgDQorICAgICAwMCAwMCA5OCAwNSAyRSAxRCAwMCAwMCA5QyAwNSA2RSAxRCAwMCAwMCBBMCAwNSANCisgICAgIDNFIDFDIDAwIDAwIEE0IDA1IDdFIDFDIDAwIDAwIEE4IDA1IEJFIDFDIDAwIDAwIA0KKyAgICAgQUMgMDUgMkYgMUMgMDAgMDAgQjAgMDUgNkYgMUMgMDAgMDAgQjQgMDUgQUYgMUMgDQorICAgICAwMCAwMCBCOCAwNSBFRiAxQyAwMCAwMCBCQyAwNSAyRiAxRCAwMCAwMCBDMCAwNSANCisgICAgIDZGIDFEIDAwIDAwIEM0IDA1IEFGIDFEIDAwIDAwIEM4IDA1IEJGIDAwIDAwIDAwIA0KKyAgICAgQ0MgMDUgRkYgMUMgMDAgMDAgRDAgMDUgM0YgMDEgMDAgMDAgRDQgMDUgN0YgMDEgDQorICAgICAwMCAwMCBEOCAwNSBCRiAwMSAwMCAwMCBEQyAwNSBGRiAwMSAwMCAwMCBFMCAwNSANCisgICAgIDNGIDAyIDAwIDAwIEU0IDA1IDdGIDEyIDAwIDAwIEU4IDA1IEJGIDAyIDAwIDAwIA0KKw0KKy8vIFJhZGlvIHRhYmxlIFRBRyANCisjDQorW0g6U10wMTJGDQorW0g6U10wMDRBDQorW0g6QV1FQyAwNSBGRiAwMiAwMCAwMCBGMCAwNSAzRiAwMyAwMCAwMCBGNCAwNSA3RiAwMyANCisgICAgIDAwIDAwIEY4IDA1IEJGIDAzIDAwIDAwIEZDIDA1IEZGIDAzIDAwIDAwIDA0IDAwIA0KKyAgICAgMDAgMDAgMDIgMDAgMTAgMDAgMDEgQ0UgQzAgMTAgMTQgMDAgMDcgMDQgMDAgMDAgDQorICAgICBBMCAwNCAwMCBFOSBGRiAwMyBCQyAwNCBGRiA0MSAwMCAwMCAwMSAwMCAwMCBDMCANCisgICAgIDAyIDAwIEI4IDAxIDAxIDAwIDAwIDAwIEIyIEIyIA0KKy8vIFN5c3RlbSBjb25maWcgVEFHIA0KKyMNCitbSDpTXTAwMTMNCitbSDpTXTAwRjANCitbSDpBXUMxIEMxIDIwIDAyIEFEIDA4IEZFIEZFIEI0IDAwIDAwIENDIEIxIDAxIDIwIDAwIA0KKyAgICAgRkYgQ0MgMDIgQ0MgMDQgMDAgQjYgRkIgQTkgOTAgMDAgMjEgMDAgRTAgRkYgQ0MgDQorICAgICAwOCBDQyAxRSAwMCA4MCA4NCAwMCAwNyBEQiAwNSA5MyAxMSBGRiBDQyAwRSBDQyANCisgICAgIDA4IDAwIEVDIEZGIEEwIDA2IDAwIDAwIDJGIEZEIEMxIDA2IDA0IDAwIDZEIEZEIA0KKyAgICAgRjAgRkYgMjAgMDcgMDQgMDAgNTAgRkQgMjEgMjYgMDQgMDAgNkYgRkQgRjQgRkYgDQorICAgICAwMCA0NyAwNCAwMCAzQSBGRCA4MCA2NyAwNCAwMCA4OSBGRCBGOCBGRiBFMCBBNiANCisgICAgIDA0IDAwIDEyIEZEIEEwIDg3IDA4IDAwIDU4IEZEIEZDIEZGIEMwIEE2IDA4IDAwIA0KKyAgICAgNjYgRkQgNjAgMDcgMDkgMDAgMEIgRkQgMDAgMDAgQzAgMjYgMDkgMDAgMUQgRkQgDQorICAgICA2MCAyNyAwRCAwMCAwQyBGRCAwNCAwMCAwMCBFNyAxMCAwMCAwOSBGRCAwMCBFNyANCisgICAgIDEwIDAwIDA5IEZEIDA4IDAwIDYwIEU2IDE0IDAwIDU4IEZEIDYwIEU2IDE0IDAwIA0KKyAgICAgNTggRkQgRkYgQ0MgMEYgQ0MgMDEgMDEgMDEgMDEgMDcgMDQgMDMgMzMgMDAgMEEgDQorICAgICAwMCAwNCAwMCAwMCA2MCA2RCBGMCAwMCA2NiAwMSAwMCAwMCAwMCAwMCAwMCAwMCANCisgICAgIEZGIENDIDEwIENDIDIyIDgxIEEwIDBGIEEwIDAwIDMyIDAwIDAyIDA4IDBBIDY0IA0KKyAgICAgMjAgMjAgMEEgRkYgMjAgMjAgRkYgQ0MgMTEgQ0MgMDEgMDEgRkYgQ0MgMTIgQ0MgDQorICAgICAwOSAwMSBGRiAwMyAwMCBGRiBGRiAwMyBGRiBDQyAxMyBDQyAwMiAwMSBCOCAwQiANCisvLyBTeXN0ZW0gY29uZmlnIFRBRyANCisjDQorW0g6U10wMDE0DQorW0g6U10wMDg0DQorICAgICAxNyAwRiBFMCBGRCBFMCBGRCBFMCBGRCBFMCBGRCA1OCBGRCAxNCBGRCA1OCBGRCANCisgICAgIDE0IEZEIDU0IDI1IDExIEEwIDkyIDI0IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIA0KKyAgICAgMDAgMDAgMDAgMDAgMDIgNjQgMDQgMDIgMDMgRkYgMDQgMDMgRkYgQ0MgMUEgQ0MgDQorICAgICAwNCAwMiAwNCAwMCAwMCBFNyAxMCAwMCAyQSBGRCAwOCAwMCA2MCBFNiAxNCAwMCANCisgICAgIDJBIEZEIEZGIENDIDE4IENDIDAwIDAwIDA1IDA1IDE0IDBBIEZGIENDIDE3IENDIA0KKyAgICAgMjAgMDEgRkYgQ0MgMTYgQ0MgMDcgMDAgQzkgQjAgQjQgMDAgRkYgQ0MgMTQgQ0MgDQorICAgICAwMSAwMSBGRiBDQyAxNSBDQyAwMSAwMCAwOCAwMCBGRiBDQyAxRCBDQyAwMSAwMCANCisgICAgIDAwIDAwIDAwIDAwIDE4IDAwIDNDIDNDIDEzIDAwIDY5IDhDIDAwIDAwIEEwIEU2IA0KKyAgICAgRkYgQ0MgQzIgQzIgDQorLy8gQ29leCBDb25maWd1cmF0aW9uDQorIw0KK1tIOlNdMDAxNw0KK1tIOlNdMDAyNg0KK1tIOkFdZDEgZDEgMjAgMDAgMDIgMDEgMDIgMDkgMGMgMDAgMjQgMWYgMTIgMDAgMDAgMDEgDQorICAgICAwMCAwMSAwMCAwMCAwMSAwMSAwMSAwMSAwMSAwMCAwMCAwMCAwMSAwMCAwMSAwMQ0KKyAgICAgMDEgMDEgMDEgMDAgZDIgZDINCisvL0JkYWRkcg0KKyMNCitbSDpTXTAwMDENCitbSDpTXTAwMDYNCitbSDpBXTc3IDU1IDQyIDdmIDAzIDAwDQorLy9BdWRpbw0KKyMNCitbSDpTXTAwNDINCitbSDpTXTAwMDQNCitbSDpBXTIzIDA4IDAxIDMzDQorLy9BdWRpbw0KKyMNCitbSDpTXTAwNDQNCitbSDpTXTAwMDQNCitbSDpBXWRkIGU1IDJlIDAwDQorLy9BdWRpbw0KKyMNCitbSDpTXTAwNDYNCitbSDpTXTAwMDQNCitbSDpBXTEyIDAwIDAwIDAwDQorLy9BdWRpbw0KKyMNCitbSDpTXTAwNDUNCitbSDpTXTAwMDQNCitbSDpBXTAwIDAwIGE3IDAyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXIzay8xMDIwMjAwL1JhbVBhdGNoLnR4dCBiL2FyM2svMTAyMDIwMC9SYW1QYXRjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhZmVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FyM2svMTAyMDIwMC9SYW1QYXRjaC50eHQKQEAgLTAsMCArMSwzIEBACitEQTowMDU5NDQwMA0KKzY1ZjUNCiswMDVjOTkwMDAwMDAwMDAwMDAwMDAwMDBlODQ3NTkwMDdjNzg1ODAwNDA1Yzk5MDBlNDQ3NTkwMDAwYWE1OTAwNzQ2MDU4MDA0MDUwNTkwMDQwMGE1ODAwNTQ1Yzk5MDA3MDFhNTgwMDc4MjE1ODAwMDA0MDAwMDBkYzQ3NTkwMGYwNTA1ODAwZWEyMjU4MDA3MDQ0NTgwMDMwNTg1ODAwMDA1MDU5MDBhMDQ3NTkwMDAwMjM1ODAwZjAxYTU4MDA3MDQ4NTgwMGYwMjI1ODAwMDA4MDAzMDAwYzg2NTgwMDAwMDAwMDQwMDAwMGZjMGYwMDAwMDA4MDNmYzBmZmZmMDBjMGZmMWYwMDAwMWMwMGYwM2YwMDAwMDAwODAwMDAwMDAwODAwMDAwODBmZmZmMDBmZTAxMDAzMDUyNTgwMGZmZmZmZjAzMDBjMDAzMDAwMDMwMDUwMDljMTA1ODAwMDAwMDIwMDAwMDAwNDAwMGYwMWI1ODAwMDAwMDAwMjBmZWZmZmYwNzAwMDBlMDFmMDAwMDAwNjBmZmZmMDNmMDAwZmNmZjAzMzA4MzU4MDAwMDAyMDIwMGYwNGE1ODAwMDAwMDBmMDAwMDAwMTAwMDAwYzAwMDAwMzA1NDU4MDAwMDMwMDAwMDcwMWM1ODAwMDAwMDAwMWVmMDQ3NTgwMDE4MDY1ODAwNDM0YjU4MDA0NjRiNTgwMDcwNGE1ODAwMDAxMDAwMDA5ZDFiNTgwMDdlMWM1ODAwYTAxYjU4MDA3ZDFjNTgwMDllMWI1ODAwNmExODAwMDBlYjIyNTgwMGZmZmZmZjA3NDQ1MDU5MDA0MDE3NTgwMDhjODc1ODAwZjgwODAwMDBhMDBhMDAwMDBjODc1ODAwMWEyNDU4MDAzMjA5MDAwMDQ0MDkwMDAwODA2Yjk5MDAwZjZjOTkwMGVjMjI1ODAwZmZmZjNmMDAxODI0NTgwMDAwMDAwMDEwMDA1ZTAyMDAxMDIzNTgwMDA4N2E1ODAwNzA1MDU4MDAwMDBlMTgwMGZkMjI1ODAwMTAwYTAwMDA4NTI0NTgwMDAzMjM1ODAwMWMyMzU4MDA3MDFiNTgwMGZjMjI1ODAwNzAyMDU4MDA3MDIxNTgwMDc4NWQ1ODAwMDAwMDYwMDA5ODYwNTgwMGZhMDgwMDAwMTgwOTAwMDAwMDQwMDEwMGZjMDgwMDAwMDgwYTAwMDAwMDFhNTgwMDM4MjQ1ODAwMDBiZTAxMDA3MDdhNTgwMDMwNWM1ODAwNzA0YjU4MDA4Yzg0NTgwMGQ4MGM1ODAwMDkyMzU4MDA3MDI0NTgwMDcwNGY1ODAwODAwYzAwMDAzYzgyNTgwMGZmZmYwMDAwMDAwMDAxMDBmZmZmZmZiZmZmZmZmZWZmZmZmN2ZmZmYwMDAwYzAwMDAwODAwMDAwYzAwZjAwMDAwMDIwMDAwMGMwM2YwMDAwZmZmZmVmZmYwMDAwMDAwYTAwMDAwMDA2MDAwMDAwMDJmZmY2ZmZmZjAwMGYwMDAwMDA3MDAwMDAwMDAwMDcwMDAwMDBmMDAwMDA2NjAyMDAwMDAwMDgwMDM0MjM1ODAwYTQyNDU4MDA3YTI0NTgwMDM4MjM1ODAwZjAyNDU4MDA0YzI0NTgwMGQ0MGY1ODAwNzEyNDU4MDA1NDVkOTkwMDIwNjY5OTAwN2M2Njk5MDBkODY2OTkwMDdjNjc5OTAwMjA2ODk5MDA2ODY4OTkwMDI0NmU5OTAwYTA2OTk5MDBlNDc2OTkwMDUwNzA5OTAwNDQ2OTk5MDA2MDdmOTkwMDQ0OTQ5OTAwZTA5NTk5MDAyYzk2OTkwMDQ0OTg5OTAwNzAwODU4MDBhYzVkOTkwMGI4ODM5OTAwMjA4Mzk5MDA5MDgzOTkwMGI4OTk5OTAwMTA1MDU5MDA2NDUwNTkwMDk4NjI1ODAwZGM0NzU5MDA3ZjExMDAwMGZmZmZkZmZmN2YwZDAwMDA5ODY2NTgwMGI4Njk1ODAwYzYwYzAwMDA2OGZjMDAwMGMwNDc1OTAwYjg3MjU4MDBiODczNTgwMDU0NTA1OTAwNzBhMTk5MDBkMGEyOTkwMGY0OWY5OTAwMDA5Zjk5MDA5MDlmOTkwMGI0YTE5OTAwMGNhMjk5MDA4MDUwNTkwMGQwNDc1OTAwMzg1MDU5MDA0YzUwNTkwMDUwNTA1OTAwNDg1MDU5MDA1MjIzNTgwMDc0NTA1OTAwMDBhNTk5MDA5NGE1OTkwMGJjYTU5OTAwNDQxMTU4MDA2ODk0NTgwMDg0MTE1ODAwNzgxMTU4MDBjODExNTgwMDAwYmUwMDAwZGM0NzU5MDA0YzBmNTgwMDI0YTY5OTAwNWM4OTU4MDA3NDkzNTgwMDg0NTA1OTAwMTQ4ODU4MDBmY2E2OTkwMGM0YTY5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwNjhmY2U2MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MGIwZjI0MmEyZTI4MmIyZjAzMGEwZTQxNTM1MzQ1NTI1NDAwMDAwMDAwNWMwMDQwNTA1OTAwODg1MDU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNjQxMDBiMTA2ODFhODFiYjgwYmE3YmIxMjlkMGJiMGNhYzAwYzBhM2JjY2MwYzI0MTc2OWMwM2E5MDk0Yjk5ZTEwNzgxZDEwODgxZDI2ZTFhNjUyMjA0YTUwMzAwMjU3ODA0NjViNTA0ZTU5YTA0YTVhNzA0MjViMzA0MWRmMDM2NDEwMDQxMDk4MTUxMGE4MTU5MDI0ODA0NDkwMzFkZjAwMDAwMDAzNjQxMDBhMTBiODE4MTBjODEwYzI5ODgwODk5N2FlMDA4MDAxZGYwMzY0MTAwMjEwZTgxMzEwZDgxODEwYzgxNDgwMzQ5MDgyOTAzMWRmMDM2NDEwMDkxMGY4MTIwODJiMDkwODhhMDMyMTg2NDIyMTg2NTQ3NjMwN2YwMjIxMTIwMjBmNDFkZjAxZGYwMDAzNjQxMDA4MTEwODE5MmExZDg5MDkyYzEzMTExODE5YTI4OTIyMjdmMzBhOTEwZDc2OTEwZTc2OTBkYTExMjgxMGMwYmU1YmFiNTkyMjI3ZjMwYTkxMGNjMWEwNzc5MDMwYzEyMWRmMDBjMDIxZGYwMzY0MTAwODExMzgxODIwODJjMDA4ODIzZTYxODA3YTExMjgxMGMwYjI1YjhiNTkyYTBmZjk3OTIwN2ExMTI4MTBjMGI2NWI3YjUzMTE0ODE4MmExZDg4MDgyYzE4YTMzYTIwMzdmY2M2YWExMTI4MTBjMGJlNWI1YjVhMjAzODBiNjRhMTY2NjRhMDg5MTE1ODE5MjI5ZjY5N2IyMGFhMTEyODEwYzBiMjViNGI1YTIwMzgwMjEwZjgxMjAyYWEwMjgxMjFkZjAzNjQxMDAzZDAyYjY1MjA3YTExMjgxMGMwYjY1YjJiNTIxMGY4MTIwMjM5MDIyMTIwYzFkZjAwMDM2NDEwMGEyMDIwMGIyYTBmZmI3MWE0OTBjMDU3MTBmODE2MmExYWM3MDRhYjA2YTQ0YzgxNGM3MzMzMmMwMzNjMDgxMTY4MTkyMDQwMDkyNDIwMDgyMjgyYzU5MTRlMDA4MDA5MjA0MDFiMmEwZmY2NjM5MDRhMTE3ODE1OTBhNjY1OTA0YzExNzgxNTkxY2EyMDIwMGI3OWFjNTA2MDEwMDMwZGNjMGQ5MTQxZGYwMzY4MTA0N2QwM2FkMDFiMTE4ODExYzRjZTVhYzA0NDExOTgxODJhMWQ4ODA4MmMxOGE0NGIyMDQ5MDhjOWJhMTEyODEwYzBiYTVhOWI1YjIwNDkwNjEwZjgxMmMwZGEyMjYxZjIyNjE3ZDU3NmExM2IwZWJiMDYwZWVhMGMyMWU2NDBjMmZmMGNjMjBjMjVlNjQ0NjA1MDBiMGZiYjA2MGZmYTBmMjFmNjQxN2VmMDlhMTEyODEwYzBiMjVhNmI1MmMwZDIxMWE4MWYxMWM4MTRjNGNhMjA0OGY5MTFiODE4MjI2MWY1MjA0OTAwYzAzMzk1MTUyNjE4MWQwYjgxMDk4MDljMGFhYzE1MDU1YjA2MDU1YTBjMjE1NjVlMjA1ZDFlMjYxODNjMjYxN2NhYTk5OTI2MTdmYzIwNjZjZDc4ODA1YTIwNWUxYTI0MjQyNjYyYzBlOTIwZjU4ODJjOWZhMTZiODc3YTJjOWY4MTY1YTc3MGMwYzBjMGVlMjYxNzljMjYxODBiYzZiYTIyMTgxYjJjMTE4YzJjMTE5NjU4OThhMmMwZGIyMDExOGMyMDExOWYxMWM4MWJhOGM4N2I3MThiN2I3MGZhMTEyODEwYzBiNjU5ZGI1MmMwZGYxMWM4MWIyMDExOGIwYzdjMGMyNDExOWMyNDI0MmEyYTc4MGUxMWQ4MTkyMTU2NDBjOGJiNzg5MDI4NjUyMDBjMjI2MWZkMGJjMTBkNzhjMDI4NjhkMDFjMjAxMTk5MjAxMThhMTIwODE4MTFlODE3MjI0MWRjYWM5NzA3MDA0OTExZjgxYzAyMTIxODIwODljYzBjMWU0ODI2MTdhYWNkODY2MTgyYmUwMjIwMWEwMjIxMGExMjE4MTEwODcwMWEwODgxMDIwYTcwMTkwYWExMDgwYWEyMDgyMjE3ZDgwODAzNGEwODgyMDgwMjIyMDRjMDg4MDIyMjA0NjBhMDBlMDIyMDE4MTIxODFhMDIyMTAxMGE3MDE4MGFhMTAyMDg3MDE5MDg4MTBhMDg4MjBhMjIxN2RhMGEwMzRhMDIyMjA4MDIyMjA4MTIyODE4MDIyMTA4MjA1ZDBhMjAxMTgwYzE3YTBhNzkzODA4MTQxMjBhYTAxOTBhYTEwOTEyMzgxMjA4ODExOTA4ODEwOTIwNWUwNzJhNzgwOTA5OTExNzA5OTEwYTBhOTIwODA5OTIwYTA4ODIwYjA4OTgzYTExMTgxOTIwNWQyYjIxNTY2OTA3NDA0YzBiYjExOTA5MDM0MjA3NzExYTA3NzEwOTA3NzIwYTg1MTkyMDVlMjgwYWEyMDgyMDQ4OGQwZGEyMDEwOTkxMWUwOTkxMGExMjQ4MWUwODgwMWEwODgxMGEyYTFkODkwODgyMDgyNjE4MjkxMjU4MTgyMDVlMDkwYmIxMGEwODhjMTcwYmIyMGIyNjE3ZTcyMjE3Y2IxMTA4MWMwNzcxMTkwNzcxMDhhYmI5MjJiN2ZkOTUxNjc2OTEwODEyNjgxYTJhZmJmYTBhOTEwYTI2YjdmODA4ZDIwODk1MWQxMjc4MWI4MzEwYzhlZTI2MTc3ZDBiYjIwYjkzMTA2MGMwMDBjMDcwYzAyODg1MTkyMjE3ZDBjMGIwYzdjYzI2MTc3YjI2MTdlMGMwY2IyMDQ4ODkwOTkxMWEwOTkxMDkwODgyMDEwYmIxMTFjMDllMGJiMTBiMjYxODI5MDg4MjA4OTUxZDIwNjZjMzI2MTc0NjYyZDE5OTIwZjU4MjY2OTA1MzI2MTc0NjY4OTBkMzI2MTc0ZTEyODgxMGMxZGUwY2MxMGQwY2MyMDMxMjk4MTgxMmE4MWMwMjAwMDFjZGJjMjYzOGY4MjI4ODNhMjA1ZDNlMDA4MDA5MjA0NmI1Njk5MDdjMjA0OGE2NjFjNzMyYzhhYjgxNjgxMmE4MWUyZDEwMWYyMjE3NGYyNjE3MWUyY2U3ZjgyMjg3ZGMyY2U0NWYyMjQ3YWIwYjE0MWQyY2U0OWYwYmJjMGYxMmI4MWUyY2U0ZGYwYmIxMGYwYmIxMWUwMDgwMDgyMjE3MWYyYTFmNDg3M2YwNDkyMjE3MmFjNDliMjE1NjRjMmEyMDBjMGJiMjBiMjU1NjRhMjA2NmM2NjJhMTM5MTFjODE5MjA5NTgyNjY5MDI2Njg5MDdhMTEyODEwYzBiYTU3OGI1YzIyMTczYjIyMTcyOTIyMTcxODYwMzAwMGMwYzBjMGIwY2I5OTI2MTcxYjI2MTcyYzI2MTczZTEyZDgxODEyYzgxMjBmYjExYTIyMTgyOTBkMGE0ZDBhYTIwYzBkMGE0YTI2MTgyODBmZjEwZjAyMjIwZTBkZDIwYzAyMDAwZDI2MzhkYTIwNjZjNTYwYTBhNGM0YmEyMDVkMzkxMWI4MWIwYWFjMTk4MDlhYTk5ZTg2OTU2Y2UwOGE4Nzk1NjdhMDg4MTA3ODFhMTJlODE4MjI4MTVhOGVhZTAwODAwYmQwYTljOGE4MTJhODE4MjI4NTZhMjIxODFlMDA4MDAxNjZhMDY4MTA3ODE4ODg4ZTAwODAwYzYxNjAwYTIyMTgxNjViMGZmYmQwYTgxMDc4MWEyNjE3NTg4NzgwY2JhZTAwODAwYTI2MTdiY2M2YWExMTI4MTBjMGJhNTZkYjVhMjIxN2JiYzNhYmQwYWEyMGEwYWMyMjE3NWJhYWFjYmFhMGMwYjI1ODAwNGEyMjE4MWIyMjE3YjkyMTY3YjgxMmE4MTFiOTk4MjI4NTY5MjU2N2JlMDA4MDA4YzlhODEwNzgxODg4OGEyMjE3YmUwMDgwMDgyMjQ1ZWMwMjAwMDgyNjM5MGYyMjQ1ZWUyMjQ1ZmMwMjAwMDBjODllMjYzOTFiMjI0MWQxYzBjYzBjYjEwOTBlYjEwOTc4YjA5Y2M2YzBjMGNjMjYxNzhjNjBlMDA4MTJmODFiMjIxNzRmMTMwODFlMGI4OTNmMGZiMjBjMGJmOTNiMjYxNzhhMjI0NTljMDIwMDBhMjYzOTg5MjI0NWFjMDIwMDA5MjYzOTk4MjI0NWJjMDIwMDA4MjYzOWFmMjI0NWNjMDIwMDBmMjYzOWJiMjI0MWQ3NzZiMWE5MTMxODFhMjA0NmE5MjA5YzVhNzE5MDg4MTJhODE4MjI4NmVlMDA4MDA5MTMyODE0NjAwMDAwYzA5YTIyNjFmYjEzMzgxYTBhNTA0MTYwYTI4YzIwMTE4OTI2MTg0MTZhYzM5YTIyNTMxYjA4YTEwMGMxYzgwODkyMGMwODgyMGMwMjAwMGUyMjE4MjgyNjM4OWYyMDQ2ZjgxMzQ4MWIwZmYwMTgwZmYxMGYwZWUyMGMwMjAwMGUyNjM4YWQyMDVkMjY2NWQwZDgxMmE4MWEyMDQ4ZjgyMjg4MzBjZmJlMDA4MDA5MjIxODM2NjU5NTQ4MTE2ODFhMjIxN2Q4MjI4NTliZDAxZTAwODAwOTIwMTEwYjYyOTQwMGM4ZDBjNGViMjE1NjRhODExYzIyMTgzYTBhNDE0YzBjMDc0ZTBlYjEwZTBjZDkzYzI2MTgzNjYyYTIyODIyMTdmZjIwODIxMDBmZjIzODBmZmEwZjg5ZmYyMWYwMmY2OWYwNDBjNDg4NzhiMDkwYzM5MGM2YWEyNjE3NzkyNjE4M2IyMjQxZGQ3ZWIwYWMyMDQ2YmRjMGNkMjIxODM2NjhkMGJjODMxMGM0ZGQwY2MyMGM5MzE0NjAwMDBjODMxMDc3YjFhZTIxNTY0MGM4ZmY3OGUxMjgxMzU4MTBjNDlhMjA1ZDFhMjYxODM5MGNjMjBjOTMxODA3NzIwNTIyMTc3YzAyMDAwM2MwZWQyMjE3ZmMyNjNhYWQyMGQwM2IyMDY2Y2MwZGQxMWUwZGQxMGQwMjIyMGUxMzc4MTY2MmIxMTkxMWM4MTkyMDk1ODI2NjkwMjY2ODkwNWExMzY4MWEwMjIxMGMwMjAwMDIyNjM4YmMwMjAwMDdjMGE5MjIzODZiMjA0NmJhMDk5MTAwYmJiNTYxYjEzYjIwNjQwMGM3ZGMyMDY0MWQwZDkyMDgwY2MxMWMwOWIyMDIyMjE3ODYwOTkxMWUwOTkxMGMwMjAwMGQyNjM4NmMwMjAwMDYxMmE4MTkyNjM4ZTgyMjZiYmFkMDVlMDA4MDAyMDlhMjBjMDIwMDA5MjYzOGM4MjI2YmNhZDA1ZTAwODAwODEzODgxMjIyMTc5ODIyODNjMjAyYTIwZTAwODAwNjEyZjgxYjJhYzAzZDJhMjAwYjBiMjEwZDBiYjIwYTAyYjgzYTEzOTgxYzAyMDAwOTEzYTgxMjI2YTgzOTIwOWJhMjYzOTEzODEyYTgxODIyOGJkYWQwNWUwMDgwMGMwMjAwMDkxMzk4MWEyNjk4ODgxM2Q4MWEyMjE4MGMxMzA4MWEwYmEwMWIwYWEwMWMwYmIxMDYwYWExMGIwYWEyMGIyMjE4M2QxM2I4MWIwYzAzNGIwOTQwNDAwY2MxMWQwY2MxMGQxM2M4MWMwOTkwMWQwOTkxMGMwOTkyMGEwOTkyMGMxM2U4MWEyMDQ4OTkwNzcyMDgwNzcyMGMyMmNkOTQ3NmIwNzBjMWJlMDBjMDAwNjAxMDAwYzBiZTAwYzAwYzAyMDAwNzI2MzljYzAyMDAwYTJjMTE0ZDEzZjgxNGMwZTgxMTY4MWMyMjE3ZTgyMjg0ZGMyNjM5ZDk4NTFiMjA0NmFjMjA0NmI0MGJiMTFhMGNjMTFlMGNjMTBkMGJiMTBjMGJiMjBiMDk5MjA5OTUxZTAwODAwOTE0MDgxYjg1MWMwMjAwMDBjMTJiMjYzODg3OTY5YTgzMWE5NzkxZGYwYjIwNDcwODE0MTgxZjIwMTEwYzIwNDcxMGNhZGQwZDkyMDgwY2MxMTcwZmYwMTgwZmYxMGYwNzcyMGM2YWVmZmMyMDVkMGEyMjUzMWMwYWFjMGMxMmI4MWEwYTE0MWMwYWExMGYwYWExMTg2NWNmZjFjN2E4MjIxODMxYzZiMjY3ODBhODcyYTAyYjdhODA0MGMzNzQ2MDAwMDBjMTdiMjA1ZDIyNjdiMGNiNzJhMDQxYzY5OTdhYjA0MGMzYjQ2MDAwMDBjMWI5MTE3ODE4ODA5YTJhMGZmOWM0ODg4MTk5YzA4OTE0MjgxOTIwOTkwYTc5OTA4ODE0MjgxODIwODYzYTcxODA3N2E3YjMyNDI0MjA2MGMwMDkyMDQ2YmNjNDk4MjI0MWQwN2Y4ZWM5MjA2Yjk3YTdiOWNkOWIyMDVkMDgyMDVlMWIyNjE3NjhhODc0Yjg4ODdhYjBlYmQwMzkyMjE3NjZiODc4NzI5MDEwYzJiYjI0MjQyOTIwNjZjNjYyOTBiOTIwZjU4MjY2OTAyNjY4OTAyMzI0MjQyMzc2YzM4YTJjMTFjMGMwYmMyYTFhODY1NDAwNDgxNDM4MWEyYzExYzgyMjg3ZWIyYTBmZmUwMDgwMDJjMGRmMTFjODFlMTFkODE5MmRmMjg5MjA5OGNhMmEwZmZhNzk5MDRhMjAxMWM4YzFhMzI0MjQyYzIyNjFmOWQwN2QwYmMxMGMyMDZjMjA2M2NmZWMyMTU2NDBjOGVlNzhjMDcwYzE4ODI2MTgwMDYwMTAwMGMwOTkyNjE4MGEyMGY3NDI3ZWEwOTBjMGMwYzBlZTI2MTdjYzI2MTgzMGMzODgyNjE3OTg2MTlmZTgxMTY4MTgyMjgzN2EyMjE3ZGUwMDgwMDkyMjE4NGIxMzM4MTg2MTRmZjAwMDAzNjQxMDAzMTJhODEyMTNhODE5MmEwZmY5MjQyNjQ5MjQyNjU4MjIzMjVhMmMyNTBlMDA4MDA4MjIzMjVhMTQ0ODFlMDA4MDA5MTQ3ODFiMTI2ODFhMTQ2ODExYzJkZTE0NTgxODExNzgxMGMxZjBjMGNjMjQyNjZjMjQyNjdmOTA4ZjkxOGMyNWUwMGMyNGUwMmQyNWE2ZWQyNWE3MGMyNWE3MWIyNWE2ZDkyNWE2ZjFkZjAwMDAwMzY0MTAwYTE0ODgxMGMwNmEwYjJiMDQyMGI4MDUxMTc4MTY2MzQwMTY5MDU2NjU0MDE2OTE1NTEzMTgxNzE0OTgxNTIwNThlOTJhMGZmOTcxNTI3YzJhMWFjZDEwZjgxODIwYjgxYTA2NWIwZTIwNjgxZTdiODBhZjIwNzAwZjI0YjdmMjI0NzAwMWRmMGNhN2Q3MDc1YjA1MjA2N2Y5Nzk1ZTAyMjQ3MDA5MjRiN2YxZGYwMDAwMDM2NDEwMDMxNGE4MTMwMzJiMGEyMjMyMDY2MGEwYWExMTI4MTBjMGJlNTE3YjVhMjIzMjAwYzE0MDc2YTBhYTExMjgxMGMwYmU1MTZiNWEyMjMyMGY2M2ExMWFkMDI4MTE2ODEwYzA5ODIyODJjOTI2MzIwZTAwODAwMWRmMDkyMDM3ZGIxMTc4MTY2MzkwMTQ5MGJlMTRiODFjMTMxODE2NjU5MDE0OTFiYjJjYWZlYjI2MzIwYTIwYzhkZjJhMGZmZjcxYTMzNTJhMWFjNjEwZjgxNDJjY2FjNDBkYWIwYzIyZDIxYzdiYjEzYjBmY2MwZjI2ZDIxYjI2MzIwYTIwZTAwYTI0MzdjMjI0ZTAwMWRmMDVhZTZlMGVhYjBhMjBkODBjMGJiYzBmNzlhZDQyMjRlMDBmMjQzN2NiMjYzMjAxZGYwMDAzNjQxMDAzMDUwNzQwYzFhOTExNzgxMjA0MDc0NjYzNDAxYTkwOTY2NTQwMWE5MTlhMTMxODE2MGU2MDMwYzJjNjBiMDM0YjcyYzAyNjA2MjAwYTIwYThmODJhMGZmODcxYTEwZTE0YzgxMGNmZGUwYWFiMGQ3MTQ0YWYyMGE3ZjQ3MWY0NDcxNDk4MTBjMDMwYjI3OGM5MzI2MTMxMmExMTI4MTBjMGJhNTA5YjVkMTMxODFjZDA3ZDIwZDhlYzYwMTAwZDEzMTgxY2QwMmQyMGQ4ZDgxMTY4MWFkMDQ4MjI4NGFiZDA1ZTAwODAwOGMzYTFiMzM2NjIzY2I2MGU2MTMxMDIwMDAyZDBhMWRmMDkyMGE4MTU3OTliNDgxMmE4MTgyMjgyNGUwMDgwMDYwZTYxMzEwMjAwMDBjMmE0NmY4ZmYwMDAwMzY0MTAwMjEzMTgxOTIwMjhmYjY3OTBhYTExMjgxMGMwYmE1MDNiNTkyMDI4ZmExNDg4MTBjMWNhMGE5YjA5MjBhODBiMTE3ODE2NjM5MDFjOTBiZTIwMjhjZTI0YTdmZDIwMjhmNjY1OTAxYzkxYmMxNDA4MWIyYTBmZmQyNGMwY2IyNGMwZjFkZjAwMDAwMzY0MTAwODJhMGZmODc5MjA3YTExMjgxMGMwYjY1ZmZiNGFkMDJhNTQ1ZmY1ZDBhNDEzMTgxYTJhNGUyODIwNGFhNjIxNDU0YTA4OGQxOTE0ZDgxOGE2NjNkMDY2N2I5MDdhMTEyODEwYzBiZTVmY2I0NzEwZjgxYjIwNGI0MGM5YWE3MWIwZTI2MWIwYjI2N2IwODI2OGIwNWIyMTczZDg2MTUwMGMxMTU4MWIyMDRiNWMyMmNmNmM3M2IwY2ExMTI4MTBjMGJlNWY5YjQwYzlhYjIwNGI1ZDE0ZTgxZTJhMWQ4ZTBlYmMxZjIwNGI0ZWFkZGQyMGQ4MGIyMTczZDY2MWQyNmE3OWYyM2ExMWI4MWIyMTczZDg4MWE5MmExNWU0Nzc4NDE5Nzk2MTJiYTM2YzJkYWQzYzIxYzk0ZDJkYWQ0YmFjY2MyNWQxNGM2ZmZmZmExMTQ4MWMyYTFkOGMwYzJjMWIwMzM3M2NhYWFhMjBhODA2NTQxZmZiMmE0ZTIzYWFhYTJjYTY0YTVlYzAzODE0ZjgxNTAyYTkwMmIyMjgwMjIxMDFkZjBiMjE3M2Q0NmYzZmYzNjQxMDBjZDA0ODE1MDgxYWQwMjg4NThiZDAzZTAwODAwYzEzMTgxMGNiZWNjNzJiMjBjYjVhMjBjYjQ4NjAzMDBiMjBjOGVkMmNjYWVkMGJiYjBhMjBiN2ZiMjBiODFlNzlhMWRmMTUxODFhMjBjYjJmMjBmNTA4MTBmODFiNzlmMTA4MjE4M2Q5MmE0NzJhYWE4YTBiOWMwYjkwMzFkZjAxZGYwOTE1MjgxOTIxOTJhNDZmYmZmMzY4MTAwODEzODgxODIyODNhZTAwODAwNTY3YTA4NTE0MjgxOTJkNWQ0OTIwOWM0MTc2OTIxYTgwMmEwYTAzNGRjOWFiMjAyMGRjMjA1YzEwMGJiMjMwMGNjMjNiNzFjMGI4MTJhODE4MjI4YWFhMjAyMGNlMDA4MDA3MTBkODE2MTU0ODE5MTUzODFiMTBmODFkMjA1YjFlMmExZDhlMGRkYzFmMmRiMmVhOGRmYmEzZDlhOTNhMGEwMzQ2YTMzNjEwNzgxZjYyYTMyMGMwOWM2MDQwMGVhOWQ4MjE5N2YxYjg4ODI1OTdmZjIxYjhlMGMxOTFiZmZmMjViOGVhMTU1ODFhMjBhYzAwNzZhMGU1NjQ5MDRiMTUyODFjMjEzMDBiMjFiMjJjNzNiMzgxZGYwYzJkYjAxZTE1NjgxMjYyYWM4OTkwMWY2NmEwMmY2M2E1ZGY2OGEwMmY2NmFiNTI2OGE2OTBjOTg4NzFhNGYwY2Y5OTc5YWE4YThlZmEwYTMzNGEyY2FmNzE2ZmEyNzU2YzQyNzBjMTk4NjEzMDAwYzlhYjJhMjE4ODg2NzFjNGNlMDA4MDAyZDBhOWNiYWJkMDM5MjA1YjExYzBjOTI0YTBjYTJjYTEwYTVkZjAzYmQwMmExMGI4MTgyMjYxNGE4MGFlMDA4MDBhZDAzMGMwYjFjMGM2NWYwMDMxZGYwZWE5ZDgyMTk4MDFiODg4MjU5ODBmMjFiOGYxYmZmZjI1YzBmMDZkMmZmMGMwOWExMjk4MWMwMjAwMGEyMmE5ZmE5MjJhMGFhNTU5YzZhMGMwZGEwZTAyNGUyY2VmYmUwOWQ4MzU3NmEwOTgyMWI5MTBjMDkxYjg4ODI1YzExZTgzM2QyMDVjMWEyMTMwMDAwZGQyMzFiYWFhMjUzMDBlYWRkZDkzMzE2ZTkxZTgxNTg4MTkxNTc4MWE4MTJlMjA1YjE0MmExZDg0MGVlYzFhMGFiMDRhOTIxYmE0ZWE4ZWY5YTk0OGE0NDk5NDE4MTEwODFhMGEzMzQ4YWVlZTIyZTdmYTkzMWUwZTAwNGU5MTFiNjJlMTFhMTEyODEwYzBiMjVkM2I0OTg0MWIxMGY4MWE4MzFjMmRiMDFhOTMxOTk0MTBjMThkODIxMGMwMmQwMjg4M2I2MjIxMWExMTI4MTBjMGIyNWQxYjQ5ODQxYjEwZjgxYTgzMWMyZGIwMWQ4MTFjMGRkMTFkMGFhMjBhMGEwNzRmNmNhN2FmMTU5ODFhMGVhOTBmYWVlYTAwZTAwMDYxYjAwNDYxYTAwODYxOTAwMDY2OTAwMDYxNDAwNDYxNzAwODYxNjAwYzYxNTAwMDYxNTAwNDYxNDAwNDY2ZDAwODY2YzAwMDYxMjAwNDYxMTAwODY2NTAwYzY2NDAwMDYwZjAwNDYwZTAwODYwZDAwMDY1ZDAwMDYwODAwNDYwYjAwODYwYTAwYzYwOTAwODY1NDAwNDYwODAwNDY2MTAwODY0ZDAwMDYwNjAwNDYwNTAwODY1OTAwYzY0NTAwODIwOTA2ZDIwOTAzOGE4MjFiZGRkMjQ5MDM4MjQ5MDZlMjA5MDBkMTFjODExYmVlZTI0OTAwZDIwZDU4NjY5ZDdmZjZjYTc2ODE1YTgxYTBmYTkwOGFmZmEwMGYwMDA2MWEwMDQ2MTkwMDg2MTgwMDg2NmUwMDA2MTQwMDQ2MTYwMDg2MTUwMGM2MTQwMDA2MTQwMDQ2MTMwMDQ2NzgwMGM2NzMwMDA2MTEwMDQ2MTAwMGM2NmQwMDQ2NjkwMDA2MGUwMDQ2MGQwMDg2MGMwMDg2NjIwMDg2NWQwMDQ2MGEwMDg2MDkwMGM2MDgwMGM2NTUwMDQ2MDcwMDA2NTAwMDg2NGEwMDA2MDUwMDQ2MDQwMDA2NDQwMDg2M2UwMDk4YTRhODc0OWE5MjFiYWFhOTc0OTlhNGE4MDQxYmFhYTkwNGQ4MjFjY2VkZjIxMzAzMWJmZmYyNTMwM2UyMWI5MDFiZWVlMjVjMTBhMjEzMDE5ODAxMWJhYWEyNTMwMTkyMDkzYTgyYTA2Mzk3MzgwMjg2NTZmZjBjOWFiMmEyMDU4ODY3MWMwY2UwMDgwMDI4MDE0ZDBhMjJjMjNhOWNhYWJkMDI4MjA1YjEwY2ZjODI0YTBjZGJhYWE1YmIwM2JkMDRhMTBiODE4MjI2MTRhODBhZTAwODAwYWQwMjBjMGIwY2ZjNjVjYzAzNDY0N2ZmMGMwOTQ2NzRmZmIyMTMwMjFiYmJiMjUzMDI0NjQzZmZkMjA5MGVlMjA5MGJkYWQyMWJlZWUyNDkwYmQyNDkwZTA2YjlmZmUyMDkwZGYyMDkwYWVhZTIxYmZmZjI0OTBhZTI0OTBkNDZiNGZmZjIwOTBjODIwOTA5ZmFmMjFiODg4MjQ5MDlmMjQ5MGM4NmFmZmY4MjA5MDJkMjA5MDE4YTgyMWJkZGQyNDkwMTgyNDkwMmM2YWFmZmQyMDkwOGUyMDkwNWRhZDIxYmVlZTI0OTA1ZDI0OTA4MDZhNmZmZTIwOTA3ZjIwOTA0ZWFlMjFiZmZmMjQ5MDRlMjQ5MDc0NmExZmZmMjI0MTg4MjI0MTVmYWYyMWI4ODgyNjQxNWYyNjQxODQ2YmZmZjgyMjQxMjk4ZjQ4YTgyMWI5OTk5ZjQ4MjY0MTIwNmJiZmY5MjI0MTdhMjI0MTQ5YTkyMWJhYWEyNjQxNDkyNjQxNzQ2YjZmZmEyMjQxMWQ4ZTRhYWEyMWJkZGQ5ZTRhMjY0MTEwNmIyZmZkMjI0MTZlMjI0MTNkYWQyMWJlZWUyNjQxM2QyNjQxNjQ2YWRmZmUyMjQxMGY4ZDRlYWUyMWJmZmY5ZDRlMjY0MTAwNmE5ZmZmODI0ODgxNGZhZjIxYjg4ODkxNGY5MjQ0NmE1ZmY4OGM0OTg5NDhhODIxYjk5OTk5NDg5YzQ4NmExZmY5ODY0YTg1NDlhOTIxYmFhYTk1NDk5NjRjNjlkZmZhOGI0ZDg4NGFhYTIxYmRkZDk4NGE5YjQwNjlhZmZkODQ0ZTgzNGRhZDIxYmVlZTkzNGQ5NDQ0Njk2ZmYwMDAwMDAzNjQxMDA1MTViODE0MmExZDg0MDQzYzE4MTM4ODE1YTU0NjIyNTIyODIyODNhNjA2MDA0ZTAwODAwNTZkYTBhNTZhNjBhODIwNTdkODJjOGZkNTYxODBhYTgwMjBjZjlhMGEwMzQ5NzFhMDViMmNhZjg1NjFiMDliMTVjODFmMTFiODE0YzRkZDBkM2MxYzgwZmYyZGZkMmYyMGZiOGRhY2NlODFjYzIwYzBhZDgyZTg4MGUwMGNjMjM4MGNjYjBjODBjYjBhZDEwYjBjYzEwY2M3ZmI3MGQ2MmYyMjU4MGE3YmY1YzgyMTU5NjFiODg4MjU1OTZlMTFhODEwYzBkYTBjYTkzYzI2NTgwZDI0ZTM4YjIxNTk2M2NiOWI3YjkzYzBjOWE4MTBkODFiMmEyMTM4ODY4MGM2Y2UwMDgwMDIxNWQ4MTVkMGEyYTI0OWNhYWJkMDIzMjRhMGMwYzRjZWJhYTI1OWIwM2JkMDU4MTA3ODFhMTBiODE4MjI4MTRhODBhZTAwODAwYWQwMjBjMGIwYzRjYTVhYjAzMWRmMDhjN2E5MjI1ODBhNzE5MDc1NmZhZjlkODFlYjc4ZDlhZTIxNTk3MWJlZWUyNTU5N2M2ZTFmZjAwMzY0MTAwODExMzgxNDEyYTgxODIwODIzYjEzOTgxMTZkODA0Yzg4MTkxNWU4MWM3N2M0N2MwMjAwMGQyMmI0MGQ3ZmQzY2Q3ZmMzOWFkMDYyMGM1OTQzMGQzMzQwYzBiMGMwZTgyMjRkNDBjMGZlMDA4MDAxZGYwMGM5OTk3OTcxZWMwMjAwMGEyMmI0MGQ3ZmExNWQ3ZmMxMmFkMDYzMGQzMzQwYzBiMGMwYzBjMWU4MjI0ZDQwYzBmZTAwODAwMWRmMGMwMjAwMGEyMmI0MGM3N2FkMGMwMjAwMDkyNmI0MGMwMjAwMGQyMmI0MGQ3ZmRlNWQ3ZmNlMmFkMDYyMGM1OTQzMGQzMzQwYzBiMGMwZTgyMjRkNDBjMGZlMDA4MDAxZGYwMDAzNjQxMDA4MTEzODE5MTVlODE4MjA4MjNhMTM5ODFiYzA4YzAyMDAwYjIyYTQwYzc3YjI4YzAyMDAwOTI2YTQwYzAyMDAwYzIyYTQwZDdmYzE5ZDdmNzE2YWQwNjIwYzU5NDMwZDMzNDBjMGI4MTJhODEwYzBlODIyOGQ0MGMwZmUwMDgwMDFkZjAwMDAwMDAzNjYxMDA0MTJhODE4MTEzODEwYzBjODIwODIzYzkwMWJjNzgwYzk5OTc5MzJiYWQwMjBjMWJkMTI5ODFjMDIwMDA5MjJkOWM5MDk0MDVjMDk5MTFjMDIwMDAwYzFlMGMwZmQyMmQ5YzgyMjRkNGQwZDAzNTkwZGQyMGUwMDgwMGM2MDEwMDgyMjRkYWFkMDJlMDA4MDBhMmEwNjA4MjI0ZDFiZDAxZTAwODAwOTE1ZTgxYTEzOTgxYzAyMDAwOTI2YTQwMWRmMDM2NDEwMTIyNjExYTYxMTY4MTcxMGY4MTdjZmI0MmEwZmY0MjQxMTA0MjQxMThiOTUxYjk3MTQyNDEyMGI5OTFhODE3ODIyNjQ1YTBhMTQxZTAwODAwYzEzOTgxMWMwZDUxNDA4MTBjMGZmMjU1MTRmMjQ1MmFlMjA1MzZlMjYxMTRkMjQ1MzZhMTI5ODEzMmM1ODAyMjA1MzdjMDIwMDBjMjJjNDJjOWExYzAyMDAwYjIyYTllYjliMWMwMjAwMGEyMmE5NWEwYTc2NGEyNDEzNDkxNWY4MWMwMjAwMDgxMzg4MTkyMjk4MTgyMjg0YTkyNDEzNWUwMDgwMDBjOTYyMjYxMTIxNjNhMDU5MjAzYjQ2Nzk5NGRiMjAzYjU0NzFiNDdhMTYwODEyMmExZDgyMDJiYzE4MTUzODFhYWEyYTIwYTgwOGE4N2EwYWFiMDcwYWFhMGEyMWE2NDhhMjIzNzZhMjY4MjAzYWMwY2Y5OTc5ODFlYThiMWI3ZWExOTgxNjE4MTg4NjgxYzRhZTAwODAwYTIwMjI4ODEzZTgxMGMwYjgyMjhhMTBjMWNlMDA4MDA4MTEwODE5MmExZDgyMTRjODFhMjAzOGZhMjYxMTUyMGZhYjBlMjBmODFlMjYxMWJmMjBmN2Y5MDllYzFmMjYxMWM5YTg4OTExMTgxODIyODdmNDBhZWMwOTA4ODEwMGMwOWEwODk4MzgyNjExNzkyMjExYWEyYzEyOGQ4M2FjODJhYjgxYWE4MGE5OTAxZTVkOWZmYzE2MzgxYjIyMTFhNjE2MjgxODIyMTFjOTIyNjZlODA4ODkwYzBiYjEwZTBhODExYTI2MTE2OTA4OGEwODgxOGEyMjExYmUwMDgwMDIxMTY4MWUyMjExYmYyMjExYWQyYzEyOGE4MGRiODFkYzgyZGQ4M2Q2NWRmZmY2MTFjODFlMjAzYWM5MjAzOGZlOWExZjY4OTBiODIyMjJjYTIyMTE1ZTAwODAwYzYwMTAwNjY5OTA0MGMwOTkyNDYyYzQyNDUwZmMyMDYyY2QyMjExYjBjMGZlMjIxMWNlMjQ1MzRmOTY1ZjI0NTMwZDI0NTM1NTYwYzBiODIwNjJmNDc5ODA1OTIwNjMyNDcxOTBmYjhiMTgxMmE4MWE4MTc4MjI4NmNhMGExNDFlMDA4MDBiMjA3YzAwNzZiMzdhMmMxMjA4MjIyNTViMmMxMjRlMDA4MDBlZDBhMGMwYjkxNjQ4MWMyMDEyMGYyYTFkOGYwZmNjMWQyYTBjNGZhOTk5MjA5OTM0MGNjYzA5MDk5YjA3MDk5YTBkYTk5YzA5YjgzOTI2MTE5ODYwMTAwN2NmZTBjMDg4MjYxMTk5MTNhODE5MjA5OGNlOWUxNDA5OWMwMTY5OTBhYTJjMTE4YjJjMTFjODIyMjgyMGMwY2UwMDgwMDZkMGE4MjIyNDZhMjAxMThlMDA4MDBlOGUxYTI2MTE4OTIyMTE5MjIwMTE4ODJhMWQ4ODAyMmMxODE2NTgxMmEyNzhhMjIxNmU5MDZhMjEyMDBiMjA5MGM2NTRmMDNlOGUxODYxODAwZjIwNjMwNDc5ZjEwYjIwNjJlNDBjYmMwMTZiY2Y1NDc5ZjA0ZmQwNGMwZmI5MzQwZWZjMDE2ZGVmNDgxNjY4MTkyYTFkODkwZmZjMThhOGY4MjA4ODAxNmM4ZjNjMjA3OTJiMjA3YjdjNzNiMDIwNmNjZmZiMjA3OGIxNmFiZjJkMTY3ODFkYWRmZDIwZDgwMDBkZDIzZDcyYjAyNDZjNmZmMGMxYWIyYTBmZjgyMjI0MDFjOWNlMDA4MDA0NmMyZmYwYzBhZmQwYTg2MDIwMDBjMDIwYzBmN2NmNjBjMTk5MjYxMThiMTUxODFmMjYxMTNiMjBiZTllOWUxNDcxYjI5YTJjMTEwODE0MzgxYjJjMTE0ODIyODM2MGMwY2UwMDgwMDgxMTY4MWEyNjExMDgyMjg0N2EyMDExMGUwMDgwMGRkMGFlOGUxYzIyMTEwYzYwMDAwMGMwZDdjZmNhMTY4ODE2NjBlMDIwNjI1MDA5ODkxZTk5NTk5ODU5MjAxMjA5MjQ1MzE1NjBlMDhiMjAxMTg0MGZiYzAxNmFmMjVmMjIxMTk4MjA3ODZmMjBmMTQ4NzNmMDg4MjIxMTg4MmM4ZmUxNjE4MjY5MjA3ODc5NzNmMDhmMjIxMThmMmNmZmQxNjJmMjU4MTY0ODE5MjAxMjBmMmExZDhmMDk5YzE5YTg4ODIwODkzODA4OGIwNzA4OGEwODIxODY0OTJhNDAwOTcwODAyYzY4YjAwMGMwZjkyMTIxZTgyMTc0Mjk3MzgxMjgyMTIxZjhjZTg5MmExZDg5MDliYzE5YTlhOTIyOTVmYTc2OTAxMGMwZjE2OWYyNGIyNDUzMWY4NzE2OTk1Zjk4NTBjOWYwNjc5MDAwYzhmNDYwMDAwMGM3ZjI2MGMyY2U3YmMyOWM5OTU4ODUxOTIwMTEwOTI0NTMxODk4NWRjOGRjNzk2MTFiMjIxMThiMmNiZmUxNjliMjFmMjIxMThmMmNmZmQxNjBmMjEwY2JmNDYwMDAwMGNiZjI2MDY1OWU3YjY1NmM3YjY1M2QyNjExMWMyNjExMDgxMWM4MWU5ZTE4MjA4MmNmMjYxMWYxNjE4MTU4MTJhODE4MjI4NmJlMDA4MDBmMjIxMWZlOGUxYzIyMTEwZDIyMTExYjIwMTE4MTZhYTEzYTE2ODgxOTJhMWQ4OTA5YmMxODIxNzQxOWE5YTk5ZjE5MjE5YjI4NzM5MDI0NjQ4MDA4OGYxODIxOGQ0YjYyODA0ODY0NTAwMGM5ZjY2N2YxMDQyNDUzMTIyNjExZTdjZmI3Y2Y5OTk4NWI5OTU0NjAxMDBiMjI3ODkyMjYxMWUyZDBiZmNkYmQyNjExMWMyNjExMGIyY2ZmODE2M2IxOWMyY2ZmNzE2MWMyMmU5ZTEwY2JhYTc5ZjI1MGMwYjgxMTY4MTkyMDExMDgyMjgyZjkyNDUwN2UwMDgwMDk4ZTEwYzIyNjA5OTYzYjYyOTBhMmQwOTQ2MDEwMDIyMjExOTIyMDIwYzYyMDM4ZWI2YTYwYWExMTI4MTBjMGI2NTM4YjQ2MjAzOGU2MjQ1MGY5MTRjODFiZDAyOTA2NmIwOTE2MjgxODIwNjdlODI0NTBlYTIwNjgxNjIwNjdmOTIyOTZlNjA4NjkwOTA4OGEwODgwOGEyNjExZGUwMDgwMGNjNWEwYzBhMGMxYjI1MzViNGEyMDM4ZjQ3MWFiNGJkMDZhMjIxMWQyNWFjZmY0MTYyODE2MjIxMTRiMjIxMWNkMjIxMTdhMmMxMjg4MTNlODEyMjIxMWI4MjI4YmNjZDAyZTAwODAwOTIwM2M0MDc2OTBkODEyYTgxYTgxNzgyMjg4ZGEwYTE0MWUwMDgwMGIyMjc4NDI2MGIxMjkyMjExNjgyMjQ2ZTlhODg4ODI4YWQwMmUwMDgwMDdjZmFhOTQ1MjZiNjEyYTIyMTEyOTIyNDZlNjA4NjkwOTA4OGEwODgyODdjZmJlMDA4MDAxZGYwYjIwMTE4YTE2ODgxYjI0NTMxNjk5NWYyY2VmZTg4NzE4OTg1NTY2ZmVkOTIyMjEzNjYyOTc1ODJhMWQ4ODA4YmMxOGE4YTgyMjg1ZmYyYTYwMDg3MGY2NGU5OTUwYzhmOTg5MWIyMDEyMGIyNDUzMTk5ODUwNmFjZmYwYzhmYzA4ZWMwNTZiOGUxMTY4ZGUxYzk5NTBjYmY5ODUxYjIwMTEwYjI0NTMxOTk4NWM2ODFmZjY3MWUyZjY2MjYwYmYyMTIwMjI2MWYwYTgyMjExM2Y2NjgwNDBjMGY4NjZlZmZmMTY0ODE4MjAxMjA5MmExZDg5MDg4YzE5MDliYzE4YWZmZjIwZjZkOWE5YTkyMDk0ZWY3MTlkZTBjMWY0NjY2ZmYwYzlmYzY5NWZmMGM4ZmM2ZThmZjY5OTUwYzlmOTg3MWIyMDExOGIyNDUzMTk5ODUwNjc5ZmYwYzhhMGMwYjgxMTY4MTkyMDEyMDgyMjgyZjkyNDM2ZmUwMDgwMGYyMjExOWUyMDc4N2YyMGYxNGIyMjExZWU3M2YzZDgyMjExODI2MTgyODY2NDYyMzkxNjg4MWMyMDEyMGEyMDExOGQyYTFkOGQwYWFjMWQwY2NjMWFhOTlhMTY0ODE5MjA5NGVjYWFhYTIwYTZkYTcxOTAxMGMyNjJkMDZlNzNmMGJjMjIxMTBkMjIxMTFjMGM2NjNkMDJjOTNkMjI3ODkxYmUyZTAyZDgzNTYzMmUzNjBmMmMwNTY3ZmUyOTIyYjEzNjYxOTA1ODIxYjAyZjYyODExYTJjOWZlNTY1YWUxZDIxYjAyYzIxYjFmZDczYzAyNDY4MmZmMGMyMjg2ODJmZjBjOWEwYzBiODExNjgxOTIwMTE4ODIyODJmOTI0Mzc3ZTAwODAwMDY3ZGZmMzYyMTAxOWQwMzIyNjExNWJkMDYwYzA4NDI2MTE3YWQwNTdkMDQ1MjAzMDA0MjA0MDI4MjQxMDAwMDQ0MjM3MDc0YTA3MjYxMTY3ODE3NjI2MTE5MTYxNzdmYTAzMzM0YTk5MTk5ODFlMTY5ODE3Y2ZjMGMxYmFiMjVhMDgwMjQ2MmExZDg2MDY1YzE4OWUxMDAxMjQwODE2YTgxMDBiYmExYzBiYjMwMjJkZWZmYjI2MTExOGE2NjkyMjExNTkwOTRiMGQ4MTlkMGE1MDQ1NjFhN2JhMjIxMTdhMjBhMDA5MjYxMTAwYmJhMTZiYjY3YjJjYWZlMTYxYjFhYzJjYWZkMTZkYzFhZTJjYWZjMTZjZTE1MjY1YTdiMjY2YTQ5MGMwYTBjMWIyNTBmYjQ3MjIxMTdmMjIxMTdiMjIxMTZhMjIxMTAwYzA4OTgxYTg5MWI5MDkwMDQ5OTFhZjIwZjAzMWJhNGMyMDcwMDRkMDgwMGFhMjNjMmNjZmEwMGZmMjNmN2FhMDE0ZDBhNDI0NzAyNzA3NGEwNzI2MTE2NzgxNzU2NGM3NDU2Yjc2ZjQ2ZDAwMTkyMTI5M2ExNjk4MTFiOTk5MjVhMTM4MjA2ODcwMDg4MjMwYjg4ODI0Njg3ZjIxNzAyZTIxMjQ2ZjdiZTMwYWQwNTY1NGZmZWQyMjExMGEyNjY4ZWQ4MWQwNjA4MDBmMjEyOTc4MTY5ODExYmZmZjI1ODE3N2NiOGUyMDY4NmYyMjYxZTAwZWUyMzgwZmYxMGYyNjYxZTBiZWVlMjQ2ODZkMGIyMTQ4MTNlODFhZDA1ODIyODhjY2QwN2UwMDgwMDkyMjIxZmEyMjY2NzU3NjkxMzE3NmExYjgxMTY4MWFkMDU4MjI4N2ZiMjI2NzNlMDA4MDA4NjAyMDA4MTNlODE4MjI4YTNhZDA1ZTAwODAwOTIwNjZkYTIyMjE5NjY3OTBkNzBhYWMwNTY1YWYyMGMwYmIyNDI0YjQ2YzdmZjkyMjExMDk4MTk5MDkyMTRlNjM5MDJlNjE5MDU2NjM5MjY0NjBiMDA4MTNlODFiZDA3ODIyOGEwYWQwNWUwMDgwMDkxMWM4MWIxMWM4MTkyMDkzMDBjMWE1MDk5YzA1NmI5ZWVhMjRiM2E0NmI5ZmYwYzBhMGMxYjI1ZmRiM2M2YjZmZjRiYTEwYzBiMGM4YzI1MTAwM2IyYTFmODRiYzEwYzhkOTg4MTBjMGE4MTBkODFhMjQxMDQwYzJhODg3ODkyMDkwMDkyNDEwNTc5MjFlMDA4MDBjNmFiZmZhZDA1YmQwNzkyMTI3NjgxM2U4MTFiOTk4MjI4OGI5MjUyNzZlMDA4MDA5MjIyMWY1N2U5MGE4MTNlODE4MjI4YTNhZDA1ZTAwODAwYmQwNzgxM2U4MWE4ODE4MjI4YTJhMjBhMDFlMDA4MDA4NjlkZmZhMTZiODE5MjIxMTFhMjJhYjFhMDk5MTBhMTZjODE5MjZhNzFiMjIyMWZjMjI2Njc1NzZiMTAxNzZjMGQ4MTE2ODFhZDA1ODIyODdmYjIyNjczZTAwODAwODEzZTgxODIyOGFmZTAwODAwZDIyMTEwZDgxZGQwOThiNDkyNTcwMmQwOTYxNDI2MTkyMTI2MjkxMDY2MzkyNmUyMTI4YWYxNjk4MTFiZWVlMjVmMGEwNjA2MDBmMjEyODk4MTY5ODExYmZmZjI1ODA5ODYwMjAwODIxMjg4OTE2OTgxMWI4ODgyNTkwODBjOTk5NzkzMmVhMjAyNmM5YzBhYWQwNzgxMTY4MTBjMWI4MjI4OGJjZDAzZTAwODAwYzY3OWZmYWQwN2IxNjk4MTkyMTI4YjgxMDc4MTFiOTk4ODg4OTI1YjBiZTAwODAwYzY3M2ZmNjYyMzEzYWQwN2JkMDU4MTNlODFjODkxODIyODhmZGQwMWUwMDgwMDA2NmVmZjkyMDY2ZDY2Njk3NGY2NTMwMmY2MzMwZGY2YTMwMmY2OTMwN2Y2YjM0ZDBjZWFhNzMzNDg4MTA3ODE4OGY4YWQwN2UwMDgwMGQyMDcwYTkyYTBlZmQwYWFjMGE3MjkwYzgxMDc4MTg4ODhhZDA3ZTAwODAwYzY1ZWZmMGMwYjdhYWRlMjE3MDJjMmEwZjBlMGNjYzBhYWFlY2JhYTY1ZjkwMmNkMDc4MTBkODEwYzJhODg4OGIyYTFmNWUwMDgwMDQ2NTVmZmFkMDdiMTY5ODE5MjEyOGI4MTA3ODExYjk5ODg4ODkyNWIwYmUwMDgwMDQ2NGZmZmFkMDVjZDA3ODEzZTgxZDBiMjE0ODIyODhkYjI2MTE0ZTAwODAwYTIxNzAyOTJhMGZmOGMxYTk3OTUxN2FkMDdiMTY5ODE5MjEyOGM4MTA3ODExYjk5ODg4ODkyNWIwY2UwMDgwMGM2NDFmZjkyMDI2YzE2NTkxYTkxMWM4MTkyMDk1OGE5YTE2Njk5NDVjYmExMGMwYjBjOGNlNWYxMDI3OTQxMGM0YjgxMDc4MWE4YTExYzU5OTI0MTBjYTI2MTEyODg5OGFkMDdlMDA4MDA4MTZkODFkMjIxMTIyYzBiMWM1OTkyNGEwMGIyNGEwMWQyNGEwMjFjNWJkMGU4NDFlMjRhMDM4ODc4YWQwN2UwMDgwMDA2MmNmZmYyYzlmNTU2NGYxMTgxNTA4MTk4Mjg4ODE4OTczODAyYzY0MTAwYzJhMGYwOTExYzgxODEyYTgxYTIwOTZmYjIwOTcwODIyODJjYzBiYjEwYjBiMzIwYjBiMDc0YjI0OTcwZTAwODAwODExNjgxODIyODkxMGMxYWUwMDgwMGExNTA4MTBjMGJiOTNhYzAyMDAwOTE1ZjgxYTgwYTkyMjk4YWE3MTkwOGMwMjAwMGMxNWY4MWEyNmM4YTgxMDc4MTBjM2E4ODc4YjIxNzAyZTAwODAwYTlmMTE2Y2EwN2MyMTcwMmRkMGFiMjA3MGFhMjBhMGE3YWJiY2JiYmRhYWFjYmFhYTliMWE1ZDMwMmFkMDdiOGIxYzJhMGNmOTIwYjAxODEwNzgxYzA5OTEwMmMwY2MwOTkyMDkyNGIwMTg4ODg5MjE3MDJiOGYxNGI5OTkyNWIwMmUwMDgwMGI4ZjE4MTJhODFhMTFjODE4MjI4NTRhMjBhNmZlMDA4MDBlMTUwODFkODFlMWJkZGQ5MWVjMDIwMDBhMTI5ODFiMjJhOWNjMDIwMDBjMTZlODE5MjJhOWRjMGJiMjBjMDIwMDBiMjZhOWNjMDIwMDA5MjZhOWQ0NjAyMDA4MTA3ODE4ODg4YWQwN2UwMDgwMDkxNTA4MWE4Mjk5ODE5YTdiOTAyNDZlYmZlNTI0MTE0MGMzYWIyYTIxYjgxMGQ4MWMyYzExNDg4NzgwYzFkZTAwODAwNDZlNWZlOTIyMTE0MWMxYjY2MzkwOGE3M2IwNTI2ODMyYjI2MzMyOGFkMDcwYzRiYzE2OTgxOTIxMjk0ODEwNzgxMWI5OTg4OTg5MjVjMTRlMDA4MDBhZDA3ODExNjgxMGMxYjgyMjg4YmNkMDNlMDA4MDBjNmQ2ZmU5MjIyMWY1N2U5MGE4MTNlODE4MjI4YTNhZDA1ZTAwODAwOTIyMTE0NjYzOTY5YTIwMjZjNjYyYTM5OTExYzgxOTIwOTU4MjY1OTAyNjY3OTJkYTEzYTgxYTIwYTk0MDc2YTI0ODExNjgxODIyODlkYWQwN2UwMDgwMDljNmFhZDA3YjE2OTgxOTIxMmEwODEwNzgxMWI5OTg4ODg5MjViMjBlMDA4MDAwNmMxZmU3OTcxNTI0MTE5MGMyYWIyYTFmN2MyYzExODBjOGRlMTY5ODEwYzA5ODEwZDgxOTI0MTE4OTIxMjk4ODg3ODFiOTk5MjVlMThlMDA4MDA4NmI2ZmUyNjI5MDI2NjE5MWNjMjA2OGZlY2VjYWQwN2IxNjk4MTkyMTI4ZDgxMDc4MTFiOTk4ODg4OTI1YjBkZTAwODAwYzZhZGZlYWQwN2IxNjk4MTkyMTI4YjgxMDc4MTFiOTk4ODg4OTI1YjBiZTAwODAwYzZhN2ZlY2JhMTBjMGIwYzhjNjVjYzAyODE2ZjgxODIyODM2YWQwNWUwMDgwMGE5YzFhMjQxMGNhOWQxOTJhMGZmOTc5YTE3YWQwN2IxNjk4MTkyMTI4YjgxMDc4MTFiOTk4ODg4OTI1YjBiZTAwODAwODY5OWZlNzk0MWFkMDcwYzRiODEwNzgxOTIxNzAyODg5ODkyNjExMmUwMDgwMGRkMGFhMjYxMThjYzlhYTExMjgxMGMwYjY1YjNiM2QyMjExOGE4ZTExYzA4ZjJhMGNmZThkMTkyMjExNGIyMjExMmIyNGQwMjkyYzlmZWUwZTg0MWIwYzg0MWMyNGQwM2YwZWUxMDgwOGUyMDJjMGZmMGVlMjA5MGU4OTNmOGMxZjI0ZDAwZTI0ZDAxZmNiYWEyMjExN2EyMGEwMGQyNjExODI2MmEwZGExMTI4MTBjMGJhNWFlYjNkMjIxMThlMjBkMDFhZDA3ODEwNzgxNGMwYmUwOTA1NGIwOTkyMGIxNjk4MTkyNGQwMTkyMTI4Yjg4ODgxYjk5OTI1YjBiZTAwODAwNDY3M2ZlZTE2OTgxZDIxMjk0YzExYzgxMWJkZGMyMGMzMGQyNWUxNDU3OWMwN2UxMWM4MTBjMWRkMjRlM2E4MTZkODFhZDA3ODg3OGI4ZDFlMDA4MDA4NjY4ZmViMjEyN2NkMGE4YjQxYmJiYjI1MjdjYTI1NzAyOTIwMjZjOWMwOWFkMDc4MTE2ODEwYzBiODIyODhiMGMwY2UwMDgwMDQ2NWZmZWQwOTYxNDI2MTk1ZjI2MzkzZTkyMjIxZmIyMTI3ZWE4ODExYmJiYjI1MjdlYTIwYTAxNTc2OTFkZGNhYTgxMTY4MTgyMjg1NGUwMDgwMDgxMTY4MWE4ODE4MjI4NTNhMjBhMDFlMDA4MDBhODgxYTIwYTAxMGMwYmEwZGFiMGIyNjExMzIwZGRhMDA2MGYwMGQ4ODFlMjEyODBmMTY5ODExYmVlZTI1ZjAwZDIwZDAxMGMzZWUyNjExM2QwZGRiMDIwZGRhMDg2MDcwMDgyMTI3ZmY4ODExYjg4ODI1MjdmZjIwZjAxZjBkZmIwMjBkZGEwY2MzZjBjMTk5MjVkNzMwYzFhYTI2MTEzODEzZTgxYTIwZGNlODIyODhlYmQwN2UwMDgwMDkyMjIxZjU3ZTkwYTgxM2U4MTgyMjhhM2FkMDVlMDA4MDBiZDA3YzIyMTEzODEzZTgxYTg4MTgyMjhhMWEyMGEwMWUwMDgwMGM2MzBmZWFkMDVjZDA3YjIwNzBhODEyYTgxN2FiYmIyMGIwOTgyMjhlYmIwYjQxNGUwMDgwMDBjYmNjNzlhMjg5MjIxMTU4MjIxMTdlODgxODIwODAyZTgxZTAwODgyMzFiZDg5MDg4YjBkMGQwMDQ1MGRkMDFmODE4OTJhZmRmOTBmZjEwZjkxOGQ5MmVkOTFlNTZmNzgzYjIyMTE5YmM5YmEyMjExN2EyMGEwMDI2MWExODI2MmEzMDI2M2EzYTI2NGEzYzI2NWEzZWQyY2FmYTFjOGMwYzFiZDBiYzgzNDYwMDAwMWMyYmExNmE4MTgxMmE4MWMyYTFkOGMwYzVjMTgyMjg4M2NhYWFhMjBhOTNlMDA4MDAxZGYwZTIwMTAwMWM0ZDFjM2JlMGJkOTM0NmY2ZmYxYzViMDZmNWZmMWM2YmM2ZjNmZjFjN2I4NmYyZmYwMDAwMzY4MTAwNTJhMGZmNjEyYTgxN2QwMjBjMGQwYzEyZDk1MTkwZTYwMzBjMmM5MGEwMzRhNzJjMDI5MDYyMDA5OTYxYTJhMGZmODIyNjM4NDk0MWUwMDgwMGUxM2E4MWUyMGU5NDQyYTBmZmUwZTEwNDU2MWUxMzgxM2U4MTgyMjg5NmExMjE4MWUwMDgwMGExMWM4MTkyZGEyODkyMDk5NGUxMGY4MTkwOTIwNDU2MTkxNjgyMjZmMjBjM2FlMDA4MDAwYzFiNDBjYWMwNWQwYTQwOTVjMDBjMGFjMGFiODNhOTUxMTZmOTFkZTE3MDgxYzE2YTgxZDEwZjgxYjJhMWQ4YjBiNWMxYjkzMWRhZGJkOTcxY2FiYjBjMWNjMjRiOGZhMjA3MDRhMjRiOGQ4MjA3MDA4OTIxODJjOGY1NTYxODI0ODIyNjIyYTg3MTBjMGNjMjRiNmZlYWFhZTAwODAwYjE3MTgxYTg3MTgyMjYxZmJhYWFlMDA4MDBjMDIwMDA5MmFlYmY4MTVmODFhMTUwODFmMjI4OGFmOTBhOTBmZjEwOTJhMjhmOTBmZjIwYzAyMDAwZjI2ODhhYzAyMDAwZDEyOTgxZTE3MjgxYzIyZDlkZTBjYzIwN2MwZWUwY2MxMDBjNGVlMGNjMjBjMDIwMDBiMTczODFjMjZkOWRhODcxMGM2Y2JhYWFiZDAzZTU4MTAyYmQwM2FkMDEwYzNjNjU4MTAyMzEyOTgxYWQwMWMxNzQ4MTgxNzU4MWI4NzE4ODg4Y2FiYmUwMDgwMGQxNzY4MWM4MzFkYWNjODIyYzEwYzAyMDAwODI2MzgwZjIyYzEwZTIyYzExYzAyMDAwYWQwNTBjMmI4MjI2NmRlMjYzODE5MjBjYmEwYzJkZDA5OTIwOTI0Y2JhZTAwODAwMDYzZTAwMGM0ZWUwODkyMDgyNGExNGYxNzc4MWMwMjAwMGUyNmY4MWFjNzI0NzE1MjVhZDA1ODIyNjZkMGNjYmUwMDgwMGExNmE4MWIyYTFkOGIwYjVjMTgyMjYyMGJhYWFhMjBhOGNlMDA4MDA4MjI2ZjNhZDA1ZTAwODAwYjExMzgxOTIwYjJjMDA5OTIzMGJhOWEyNGIyY2U2MTkwN2ExMTI4MTBjMGJlNTc1YjNhODYxYTBlNjEzMTAyMDAwMWRmMGYyMDcwMGIyMGE1ODQ3MWYwOTQ3MWIwNjhjM2IwY2MyODZlN2ZmNTIwYTZmNDc5NTBhYTExMjgxMGMwYjI1NzNiM2UxMGY4MTgyMGU2YzU2ZjgwNmExMTI4MTBjMGIyNTcyYjMwNjE5MDBiMTcxODFhODcxODIyNjFmYmFhYWUwMDgwMDJkMGE1NmFhZjZiMTczODFhODcxMGM2Y2JhYWFiZDAzYTU3MTAyZjE3NjgxYzE3ODgxZTgzMWM4MmNmYWVlYzBjMDE0ZDIwZWJhMGMyZmYwZGQyMGQyNGViYWNjOWM4MTYxODE4MjI4MTUwYzNhZTAwODAwODExNjgxODIyODE2YWQwM2UwMDgwMGFkMDU4MjI2NmQwYzJiZTAwODAwODE3OTgxODIyODM2ZTAwODAwMGMxYWI4NTEwYzA5YjA5YTgzMTZiOWYwYzg0MTBjMGQ4Y2FjZjExYzgxZTIwNzAxZTI0Zjc1ZDI0NzAxMzExNjgxYmQwNzgyMjM4OGFkMDVlMDA4MDAyZDBhNTY3YWVlODExNjgxODIyODg5ZTAwODAwMmQwYTU2OWFlZDkxM2E4MTkyMDk5NDI3NjkwZWIxMWM4MWIyMGI1ODQwYWJjMDE2OGExMDE2NWIxMDgxMTY4MTBjMGE4MjI4MTEwYzBiZTAwODAwYzE2YTgxZDJhMWQ4ZDBkNWMxYTE3YTgxZGFjY2IyMmMxZTRjMGRkMGJiMjBiMjZjMWViODQxOTIwYTE0NTYyYmU4MGMyZWUwZTkyMGUyNGExNDA2YTJmZjg4MjEyNjk4MTIwYzFhYTI0YjZmOTIwNzA2MTZiOWVmMGMwY2MyNGI4YzQ2YzFmZjgyMjYyMmE4NzEwYzBjYzI0YjZmZWFhYWUwMDgwMGIxNzE4MWE4NzE4MjI2MWZiYWFhZTAwODAwYzAyMDAwODE1ZjgxZjIyODhhOTJhZWJmOTBmZjEwOTJhMjhmOTBmZjIwYzAyMDAwZjI2ODhhYzAyMDAwZDEyOTgxZTE3MjgxYzIyZDlkZTBjYzIwN2MwZWUwY2MxMDBjNGVlMGNjMjBjMDIwMDBiMTczODFjMjZkOWRhODcxMGM2Y2JhYWFiZDAzYTU1YzAyYmQwMzNiYTEwYzNjMjU1YzAyMzEyOTgxM2JhMWMxNzQ4MTgxNzU4MWI4NzE4ODg4Y2FiYmUwMDgwMGQxNzY4MWM4MzFkYWNjODIyYzEwYzAyMDAwODI2MzgwZjIyYzEwZTIyYzExYzAyMDAwYWQwNTBjMmI4MjI2NmRlMjYzODE5MjBjYmEwYzJkZDA5OTIwOTI0Y2JhZTAwODAwYzZhOGZmODEzZTgxODIyOGI3YWQwNWUwMDgwMDQ2NmJmZjAwMzY0MTAwYzE1MDgxYTE3YjgxZDJhMDAwYjIxYTJhZDI0YzEwYjJjYmZlYjBiMDc0ODJjYjAxYjA5YmEwYTA5OWEwNzZhODQ4ZTIwOTU4OTJjOWVjMDBlZTIzZTY1ZTNhYjI0YzEwODg2Y2FkMDJlMDA4MDAyMTdjODE5ODAyOTIyOTMyY2NiOWExMTI4MTBjMGIyNTUwYjM5ODAyOTIyOTMyNjYxOTE0YTEzYTgxMGM5YmEyMGFiYWMxMGY4MThjNmFiMjZjMWYwYzNkZDI0YzczMWRmMDBiYmI4NmYwZmYzNjQxMDAzMTUwODE4ODczYWQwMmUwMDgwMDJkMGE5MmEwZmY5NzFhMTBiMTdkODFjMmExZDhjMGNhYzFhMjAzMTBjYWJiYTI0YjgwMWRmMDM2ODEwMTUxNmE4MTQxNTM4MTYxMGY4MWYyYTFkODlkMDMwYzA3MjBlMDc0ZTI0MTkwNzkwMTk5NjFmMGZlYzFiMjA2NzFiMjYxMWY0YTQ2NGE0ZjVhY2YzMjJjMWUyMjBjNmQzMDMwMDQzMjYxMTYyNjMyMTVhMTEyODFiZDA3MjU0N2IzZTIwMTkwZjJhMWQ4ZjBmZWMxYjIyMTFmNWFjZjcyNDY0ZTMxMmE4MTIxN2U4MTRjNDg4MDhlYzEyYWRmMjJkMjI0OTgwMmEyZDMwNjhhOTk4MjBjODc5OTcxMDA4ODIzYTYxODBkYjgxNmYyMWQ0OGIwYjFlNGYwYmJjMGIwYjBlNDgyMGQ5NWYyYTBlMDhjZjg4MjA2NzE4NzNiMGE5MjJjMWUyZDBhMDdlOTAyYzYwMjAzYjhhZDIxMTY4MTE3ZWI1YWMyMDZjMDc4NjEwNzZjMDI4NjAwMDNjYzE3NDZkNDAzMGNhZGZhODQ4MjYxMWI3N2JkMDJjNjQxMDNhZDBlZTU4MWZkYzIwNDJhYjIwNDI5ODIyMjMzYTBiYzkzYTIwMTkwYjBiMDc0YjlmMWUwMDgwMGE5YTE4OGQzYThmMWUwMDgwMGM4YTFmMGNjMTExYmNjYTdiYzAyODZiOTAzODhkM2E4ZjFlMDA4MDBjZDBhODZiNjAzMGMwN2ZhOTQ5MjYxMWI5MTMxODFiMjA5OGZhMTdmODE2NjliNDQ4MjIyM2JlMDA4MDBjZDBhYjYzYTdkOTIwNDJjYTJhMGZmYTc5OTc0ZDE4MDgxYjIyNjFmZTIwMTkwNDdlYjAyODZiZDAzYWQwZWQwYmM2MzgyMjI0NGIyNjExZWUwMDgwMGMyMjY4OWQyMjExZWEyNjExZGM3M2QwMjA2Y2EwM2NkMGRjNmM4MDNiMmRhZjliMjJiYzJiNjNiMzA3Y2VjYjdiYzAyMDY3ZTAyODIyMjQ0YTIwMTkwZTAwODAwYjExYjgxYzIyNjg5YjIyYmMyYTI2MTFkYzdiYjAxY2QwYmUxN2Y4MWQyYTI3MWQwZGM4MmQyNmU2YTA2NzUwMjBjMDIwYzBlZTI2MTFkODYwMTAwMGMwMjBjMGZmMjYxMWQwYzA4ODI2MTFjYTE3ZTgxZTIwMTkwZjJhMWQ4ZjBmZWMxYWFhZmE4YWExNzZhNjIwYzE5YjIxNDhjZDEyYjgxYzgxNjgxMTY4MTVhYWZhMjJhNjdmMjI0NjA4MjI4NzZjMGMxNDFmMGNjYzBhMGE0MDRkMGNjMTBkMjIxMWNmMGNjMTEwYmRkZDBiYzkzYjI2MTEyMGMyZDRiYzFhMGQ5OTNhZDBlZTAwODAwYTkwMTI2MmEwNTI2NGEwMjY2NWEwZDgxMTY4MWEyYTExODgyMjg2Y2FhYTRlMDA4MDBmMjAxOTA4MmExZDg4MGZmYzEwNjAxMDAwYzA4ODI2MTEyMGNiZDVhY2Y5MjBjNmZhMTgxODE1NjI5MGFmMjJjNjcwYzI4ODBlZjEwODc4ZjJhOTIyYzFlYjdlOTI0ODhhYWEyMjQzZWUwMDgwMDBjYmRjYzRhOTIwNDIyYjYyOTdmYzIwMTkwZTJhMWQ4ZTBjY2MxY2FjNWUyMmM2NzBjMmZmMGVlMTBmODE2ODIyNDYwZjBmMTQxODBmZmMwODEyYjgxODBmZjEwZjBmZjExZjllMWYyNjExMmNjMWU0NjQ2MDM5ODAxZjYyOTAyNDY0NDAzNjYzOTAyYzY0MjAzZjIxMTAyYjhlMThiYzFjYmQxZTJjMTEwODIyMzdkMGMwOWFkMGY5OTIxZTAwODAwYTIwMTkwYjJhMWQ4YjBhYWMxYWFhNWEyMmE2NzE3NmExZmI4MDE2NjViMWFjYmExODExNjgxYjJjMTEwODIyODZiOGJjMWUwMDgwMGM2MDEwMGQ5MjEwYzA5OTkzMTk5NDEwY2ZiYTIwMTkwYzJhMWQ4YzBhYWMxODIyMzgzYWFhNWEyMGE5M2UwMDgwMGUyMDE5MGMyYTFkOGMwY2VjMTVhY2NiMjBjNmZkMjA0MjZkYzRiZjIwNDI1ZDcxZjBmMGMyOTBjMGE4MjJjMWVhMjQ0MTk5MDg4MjA4MjZjMWVhZDBlZDI0NDI1NjU1Y2ZkZjJhYmZmMGNmY2IyYTQwMDU2NWEwNmUyMDQyOWUyNDQyYTY2NGUwMjQ2MTMwMzY2OWUwMmM2MTEwMzBjYmRkNzllMDJjNjBmMDMwY2U4ODc5ZTAyYzYwZDAzYzc5ZTAyNDYwYzAzZDIwMTkwODJhMWQ4ODBkZGMxZGFkNWMyMmQxZTFjNDg4NzFlMDkxY2E5OTcxZTA0MWNlODg3OWUwMjg3ZmMxNzFjODk5NzFlMGYxY2I4ODcxZTBhMWNmOTk3MWUwNWYwOWMxMDQ2MDEwMDk3N2NmNmIwOWMyMDkyNmQxZWMyMDQyY2IyYTBmZmI3MWMxYzgyMDE5MDkyYTFkODkwODhjMThhODVlMjI4MWVkMjA0MmFmMGVlMTBlMjY4MWVkMjQ0MmJjMjQ0MmFjMjIxMWJjMjFjMDRhYzhjZDIyMTFiZTE4MjgxZDIxZDA1ZTcxZDFkZjgxNmMwZTE0MWYwZjFlNGQwZmZjMGYwZjBlNGY3YmUwYzBjM2IwYzBjODIyM2ViYTIwMTkwZTAwODAwZjIwMTkwODJhMWQ4ODBmZmMxNWFjZmQyMmMxZTE3N2QxMDA3ZmQwZDBjMDk4MTgzODE5MjQ0MTk4MDhkMjA4MjZjMWUzMTI5ODE4MTdlODEwYzhiOGFjZmM4MmNjMDIwMDBjMjYzOTBhMmEwOTBhYWExYTIwYTAwZjJhMWQ4ZjBhYWMxYWE4OGE4Mjg4ODM4YzAyMDAwODI2MzkxZTJhMDkwZWFlMWUyMGUwMGYwZmVjMTVhY2ZkMjJjMWUxYzBhYjBiZDEwYTBhZDEwMzdlZDA5Y2M2YTBjMDg4MjYxMTk0NjEyMDBmMTMwODE4MTJmODEwYzBlYjBlODkzZjBmZTIwYTBlZjkzZTI2MTE5ZjIyMTFiZDg3ZmMwMjAwMGQyNjM5OGM4OGZjMDIwMDBjMjYzOTk4ODlmYzAyMDAwODI2MzlhZjhhZmMwMjAwMGYyNjM5YmUyYTA5MGVhZTFlMjBlMDBmMmExZDhmMGZlYzE1YWNmZDIyYzFlOTIwNDA3YjIwNDIwODExZDgxMTBiYjExODBiYjEwODEzNDgxYjA5OTAxODA5OTEwYjA5OTIwOTI2MTE3Nzc2ZDI4YzEzMTgxYTIwNDAyYzIwY2M1YTcxYzBiODEyYTgxODIyODZlZTAwODAwZTIwMTkwODEzMjgxZjJhMWQ4ZjBmZWMxODAyMjIwNWFjZmQyMmMxZWIyMGM2ZjY2MWIxYzgyMDQyMjY2MTgwMjQ2YjQwMjkyMjExYjkyMDliMDY2MTkwMjQ2YjEwMjBjMDg4MjYxMTMwNjAxMDAwYzA5OTI2MTEzYTExYzgxMGMyOGEyMGE3NGEyNjExMDgwYWExMDA3ZmQwYTkyMjExMDBjMmRkNzg5MDJjNjhlMDFlMTg0ODFlMDIyMTBkYzFhMGM0OTgyMjExZDBjM2ZmMjYxMTM5MDg4MjA4MjYxMWQ0NjAxMDBiMjA0MmFiMjYxMTMwYzBjMGM1ZDBjMGVmMTM1ODFmMjYxMWFlMjYxMTFkMjYxMTVjMjYxMWM4MjA0MjM5MTNhODE2NjE4NDhiMjAxOTBjMmExZDhjMGJiYzFiYWI1YjIyYjFlYzdlYjM3YzIxNjIyZmMxY2QyZDlkMWQyMGRiMGVjOWRlMjA5YmFlYzRlODIyMTFiZjIwNjczODIxODU2ODdiZjE5OTJkOWQxOTIwOThmMGM5YmI3OTkwNGIyMjExYzhjOGJjMjA0MjU4YzNjZDIwNDI0ZGMyZGUxMWI4MWUyMmVjMmY2M2UwYTBjMGY4MTg0ODFmMjYxMWM4MDIyMTA5MjA2NmMxNmY5MDZiMTg1ODFjMTg0ODFiMDc3MTBjMDIyMTBjMDIwMDBiMTg2ODE4MTI2ODFmMTM5ODE5ODcxZTIyZjgwOTIwOTAzODA4ZTIwOTJjOWZlYjBlZTEwOTBlODkzYzAyMDAwZDEzYTgxZTI2ZjgwZDIwZDk0MGM2Y2Q3MGMzMmU4MTZkMTNhODFlMGUxNDFlMjY0NjBkMjBkOTQyNzZkMjE5MTFjODE5MjA5NzU4MTg3ODFhMGY5MDE4MGZmMTBmMDc3MjBmNjM5MDcwYzFjOTA5YzkzOTI2MTE2MGM2ZGQyNjExYzgxN2U4MWUyMDE5MGYyYTFkOGYwZmVjMThhOGY4OGE4MWMwOTkwYzgxMDk3ODgwOTg4MjFmNmI4MDQ5ODMxMTY0OTEyMTY4YzA2YzIyNDQ4NWFiZmIyMGI2ZmMyNjExNDU2ZmIwNGMyMjExYzBiY2M1NmNjNjhkMjE0OGNkMjYxMTIwNmI1MDFkZDA5ZjgyMWUyMjExMmMyYTRlMmU3M2QwMWNkMGZjOTIxYTIxMTAyYjIyMTEyOGJjMTgxMmE4MWNiZDE4MjI4N2RlMmMxMTBlMDA4MDA5ODAxNjY1OTBmY2JhMTgxMTY4MWIyYzExMDgyMjg2YjhiYzFlMDA4MDBlMjAxOTBjMmExZDhjMGNlYzFjYWM1MDYxYTAwYTIwNDAyNjUyYWZkZDg0MWI4MjFjZDBhODEyYTgxYTgzMTgyMjg3ZWRhYmJlMDA4MDBhOWIxYTIwMTkwNjUyMmZkZjE0ZjgxZThiMWMyMDE5MGQyYTFkOGQwY2NjMWFhZWUyYmVlZjBlZTEwY2FjNWQyMmM2N2UyNjExNDE3NmQyMmYyMTQ4ZWQyMjQ0ODkxNGY4MWQwOGVjMDkwODgxMGYwOWYxMTk3MzgwZGExNGY4MTBiOWZkMDk5OTBhMDk5MTA5MjYxMTQwYzBhYTI2MTFkYjIwYzZmNjYxYjEyOTgwMTI2MjkwNTI2NDkwMjY2NTkwN2MyMjExYmMyMGM3MmRjMmNhMTMzODE5MjIxMTQwYzE4YTA5OTEwOTAyMjIwODAyMjIwMDYwMTAwN2NlY2MwMjIxMGQyMjExY2RjMmRlMTg0ODFlMDIyMTA1NjViNjRmMjA2YmMxNmZmNjMwYzA5ODYwMTAwMGMxOTQ2MDAwMDBjMTlmMTM3ODFjMDIwMDA5MjYzOGZjMDIwMDA3YzBkODJhMDkwOGE4MTgyMDgwMGEyYTFkOGEwODhjMWMyMjM4NjhhODU4MjA4NmZkMGNjMTAwYjg4NTZlODBmOTIwNjQwMGM3ZGEyMDY0MWQwZGMyMDgwY2ExMWMwZTkyMDYwZWUxMWYwZWUxMGMwMjAwMGQyNjM4NmMwMjAwMGMyMjExNmQxMTE4MTIwY2MxMWQwY2MxMGQxM2E4MWUyNjM4ZWQyMGQ5NDlkMGMxN2VkMTdmMjA2NmM2NjJmMTc4MTFjODE4MjA4NTg4MjYxMTgyNjU4MDI2Njc4MDgwNzZkMDU5MTgzODE5MDljMjA0YzBiYTEzZjgxYzAyMDAwZDExMzgxYzIyMTFjZTJhMDkwOTI2MzlkODIwNDAzZjIwNDAyZWFlMWUyMGUwMDQwZmYxMWEwODgxMWIwODgxMGEwZmYxMGIyYTc4MDkwYWUxMWMyNGQyNGIwYWExMGEwZmYyMGMwYTAzNGEwODgyMDgwZmYyMGY5NTE2NjFjNmZkMTdlODFmMmExZDhmMGZlYzFmYWRkZDhhZDQ3ZWQwN2ExMTI4MTBjMGIyNWM0YjIyMDgxNDE5MjI0NDhhMTJiODE5MDkxNDFhMDg4MTA5NzE4MDdhMTEyODEwYzBiNjVjMmIyZTdmMjA3YTExMjgxMGMwYmU1YzFiMmQxN2U4MWUyMDE5MGYyYTFkOGYwZWVjMWVhZGRiOGFkOTIxZDA4YjBiMzA0MTY5YjQwZjIwZDIyOTA5ZmMxMDYwMDAxOTIwNDA4MGNhZDgyMDQwOWQwZGMyMDgwYzgxMTQ2YmZmZjBjMGVlOWMxYTEyMTgxODEyYTgxOTIwNjRjODIyOGJiMTA5OTAxYTA5OTEwOTAyMjIwYTIyMTE1ZTAwODAwYzIyMTFjZDIyMTEzZThjMWYyMjExMWIyMjExMjhkMGE5ODIxYTIyMTE5OTA5MGE0YTBhODIwYTI2MTE5ODIyMTE3YTExYzgxOTA4ODIwODI2MTE3OTEzZDgxYTIwYTU4YTI2MTE4OTI2MTIwMjY5YTJlYTEyYzgxOTIyMTE4MGNiODg3OTkxYjkyMjEyMDIyNjEyMTgxNTA4MTI4MzE4ODM4MjAyMjExYTAyMjEwODA5MjgzMjIyMTIxYzYwMTAwOTgzMTIwOTkxMWEwOTkxMDg4NDFhMTMxODE4MDgwYTQ4MGVlMjA4MjBhYjA5MGZmMjA4Y2Q4OTIwYThmNjY5OTA4MGMwZDJjMGFhOWQxYzYwMDAwMGMwODg5ZDFmNjJkMDQwYzE5OTI0NjRlYzAyMDAwODIyMTE5ODI2MzhjYzAyMDAwZjI2MzhiYzAyMDAwYTIyMTE3YTI2MzhhYzAyMDAwMjI2Mzg5NjYxYzMzYzIxNDA4YWNkY2U5YzFkMjYxMTNiN2JjMTJhMTEyODEwYzBiZTVhZmIyZDIyMTEzZThjMWIyMjExMmMyMTQwODk4NTFiMGJjYzBiMGIxNDE5MDllZTRiNzM5MjVjMGIxNDFjNjA3MDBjMmExZGZiNzNjMGJjMmExZTBiMGJjYzBiMGIxNDE0NjAwMDAxYzRiODEzMDgxZjIyMTFkODBmZjIwZjI2MTFkZjEzZjgxOTEyMzgxMjA4YjExOTA4ODEwODBlZTIwZjBlZTIwZTc3MjI4MGMxZmYyNDY0ZGMyMjQ2MGMwMjAwMGU5YzFkMjYxMTNjMjYzYWNhMjA0MmNiMmEwZmZiNzFhMGNhMTEyODEwYzBiNjVhOGIyZDIyMTEzZThjMWQwOTAzNGEyMDQyNWIxMTE4MTIwYWExMWIwYWExMGIyMjExNmYxM2M4MWMwY2IwMWYwY2MxMGMwYWEyMGYxMTM4MWMwY2IxMWMwYzkyMGMyNGYyNTAwOTkxMWMxM2I4MWYyMjExYWMwOTkxMGEwOTkyMGExODg4MTkwOWYyMGEwZjkyMGYyNjExYWMxM2U4MTIyMjExNTYyZGNmZWMwMjAwMDgyMjExZDgyNjNhYWMwMjAwMGUyNjM4ZGMwMjAwMGYyNjM5YzljMmJiNjRkMTBhMjA0MjE4MjJjZDkwYzFiZTAwODAwNDEzOTgxNDYwMzAwYTIwNDIxODIyY2Q5MGMwYmUwMDgwMDQxMzk4MWMyMDE5MGQyYTFkOGQwY2NjMWNhYzVkMjJjMWU2NzZkMTJmMTI2ODFlODUxODJhZmJmODA4ZDEwODI2YzFlZjBlZTIwZTk1MTU4ZDE4MjI2YmNhZDAyZTAwODAwODEzODgxODIyODNjNzA3YTIwZTAwODAwYmQwYWMyYTIwMGEyYWMwM2EwYTcxMGMwYWEyMGIwN2E4M2MwMjAwMDkxM2E4MTcyNjQ4MzkyMDliYTI2MzkwZDgyMjZiZGFkMDJlMDA4MDA1MDVhMjA4NjAzMDBhMTg5ODFjMDIwMDA5MjI0ODhhMDk5MTA5MDU1MjBjMDIwMDA1MjY0ODhhMmMxMTRjZDAxYjJhMDkwODIyNjY2YmFiMWUwMDgwMGQxNDA4MWY4NTFjMDIwMDAwYzEyYzIyMTFkZjI2Mzg4ZTIyMTFhZTk2ZGM5N2QxZGYwMGMwODgyNjExZDIxMWY4MTBjMTk5MjYxMWM0NjhkZmQ2NjFiMjZiMjA0MjJiNjJiMjBkMTdlODFkYWRmZDhhZDE3ZWQxNjBjMWUwY2VmMGMwODBjMDk5MjYxMWE4MjYxMTFmMjYxMTVlMjYxMTNjNjczZmViMjBjODYwMGJiMjNlNjFiMDIwNjI3MDBhZDBlYTVkM2ZjZTIwMTkwZjJhMWQ4ZjBmZWMxNWFjZjU2OWEwODgxOGE4MWYyMmMxZTgwZmYyMGYyNmMxZTI3NmY0NmQ4NzFjMjBkMjEwMGNjMjNkMGNjYTBjODljYjIwYzBhM2M0YWNhYmI5MjBiMGNjYmJiYjk5MTkwOTE0MWE3MTkwYWExMTI4MTBjMGIyNThjYjJlMjAxOTA4MTE2ODE4ODA4YWQwZWUwMDgwMGIxODQ4MWIwMjIxMGI4OTFhMDk4NDFhMjRiMDE5MjRiMDJkMTEzODEwYzRiOTIyMTFkZTg3MTBjMmMyYzBmMGMwODgyNjExYWYyNjExMWMyNGUwM2IwOTkyMDkyNjExZGMyNGQyNjBjNmVlMjYxMTUwYzNjMGMwZGQyNjExY2MyNjExMzg2NDlmZTgyMDQyMzBiODgxNjE4MThkMjJjMWVkMDk5MDQ1Njg5MTdkMGExMDQxNmNhMjRhZDBlNjVjOGZjZTIwMTkwZjJhMWQ4ZjBmZWMxNTZiYTIzYjE4NDgxMGM0ZGMyMjExZDkxMzU4MTBjNTgwYzBlZTI2MTFjODI2MTE1OTI2MTFhMGMwOGQwY2MyMGIwMjIxMDBjM2RjMjYxMWQ1YWJmYzE4MzgxOTIyYjFlZDI2MTEzYzA5OTIwOTI2YjFlODI0NDE5MDZiMTAwMGMwN2ZhZTRlMjYxMWJjNjE0ZmRmYTc0NzI2MTFiMGMwNzQ2MTJmZGE4MzE4ODIxZjg0MWI4NTFkMTIzODFlMjE0OGY5MGMxMjEyMGNjMTFhMGVlMTFkMGNjMTBjMGJiMjBkMjE0OGVjMjIxMTFiOTUxYTBmODgzZTBkZDAxMGNkOGExMjY4MWY5NDEwY2JiYjkyMWYxOGI4MWE5YzFmMGVlMTBmMTIwODE4MjYxMTVmMGRkMTBlMGRkMjBkMGNjMjBjMjYxMTEwNmYwZmVkMTEzODFkMjBkMmMwMGRkMjNlNjFkMGFhMTEyODEwYzBiMjU3OWIyZTIwMTkwYWQwZTI1YmZmYzkyMjQ2MDgxN2U4MWIyMDE5MGMyYTFkOGMwYmJjMWY4MTZiYTg4ODg2OGIxNGY4MWEwODhjMGIwODgxMDhhZmY4MTJiODFmMGYxNDE4MGZmMTA5MGZmYzA4MGZmMTBmMGZmMTFmMjYxMTI5ODAxYjYyOTAyNjYzOTI2YzIyMTFjOTIxNjJiOTI1MTAyZmQwOTI2MWMxMzgxODE4MTg4YThhMjI0M2VlMDA4MDBmMjExMDIxNmVhMjk5MjE2MmI5YTlmOTI1MTAyODEzODgxMGMwOTgyMjgyZDk5MjFlMDA4MDA1NmNhOGZkMTdlODFlMjAxOTBmMmExZDhmMGVlYzFlYWRkYThhZDkyMWQwOGEwYTMwNDE2MmE4ZGQyMGQyMjkwZGRjMWQwZDBmNDA2MzJmZTBjMTk4NjcxZmUwYzA3YzZjZGZjZjIwYzg3MDBmZjIzZTYxZjM1ODIwNjZjNjYyODE3OTExYzgxOTIwOTc0MDc2OTBlYjExYzgxYjIwYjU4YjI2MTE4MjY1YjFhMjY3YjE3YWQwZWE1YWVmY2NjZmFlMjAxOTBmMmExZDhmMGZlYzE1YWRmZDIyZDFlYzY5MWZmZjIwNDI0MTY4ZmZlODIwNDIzMjYxODE4OTIwMTkwYjJhMWQ4YjA5OWMxOWE5NTkyMjkxZTk3ZTkwN2ExMTI4MTBjMGIyNTY4YjJlMjA0MmFmNjNlMGFhMTEyODEwYzBiNjU2N2IyZTIwNDJhYzIwMTkwODJhMWQ4ODBjY2MxZDExMTgxY2FjNWIyMmMxZTk4NzFkMGJiMjBiMjZjMWUwYzBjYzI0OTAzZjIwMTkwZDExMzgxODBmZmMxYzI0ZDI2NWFjZmQyMmMxZWUyNjExMzE3ZWQ3YjkyMDQyYTgyMDQyOTk3OTg3MmIyMGM4NjAwYmIyM2U2MWI2OTk3ZWQ2NmUyMjExYmUyMGUwNTU2ZGUwNTkxODQ4MTgxOGM4MTkwMjIxMDgwZGQxMGQyNmMxZTg2MTUwMDkxN2U4MTlhOWY5OGE5MTc2OTI3MjdlOTI0OTBiNDA0MGNhODBjYmRhMjIxMTM1YWNmYzIwYzZmYTBhMDc0MGJjY2IwZDg5M2QyNjExNTBjMWJjMGFiODNhMjYxMTMwNjAxMDAwY2ZkZDI2MTE1ODEyYTgxYWQwZTgyMjg2ZDBjNmJlMDA4MDAwYzA5OTI2MTFhMDYxZTAwYjIyMTFkMGM0ZWUwYmIyMGIyNjExZDgyMGM4NzAwODgyM2U2MTg3NTkyMDY2YzY2MjkxN2IxMWM4MWIyMGI3NDA3NmIwZWUxMWM4MWUyMGU1OGUyNjExODI2NWU1MTI2N2U0ZTBjMWI5MTg0ODFlMjBjNmYwY2Y4ODI2MTE1MGJlZTkwMjIxMDBjMDllMDliODM5MjYxMTNiMTdlODFiYWJmYjhhYjE3NmIwZjBjYWY4MjJjNjcwY2JlODA4NDA0ODBlZjkzZTI2MTE1YTc2ZDA1OTE4MzgxOTA3NzIwMGMwYjBjMGNjMjYxMWFiMjYxMWMwYzBkZDI2MTExNDY3ZGZkZTIwYzg2MDBlZTIzZTYxZWE3MGM1ODgyNjExNTQ2ZWVmZmQyMDE5MDgyYTFkODgwZGRjMWRhZDVjMjJkMWU3N2ZjMDJjNmYxZmM4NmZiZmNhMjI0M2ViMjE2MmIxYzQ5ODE4MTgxYzIyYzFlODhhOGMwY2IwNGMwOWI5MzkyNTEwMmUwMDgwMDlkMGFhMjExMDJmMjE2MmI4MmNhMTRhYWZmOTBmODgzZjBmMGY0ZjI1MTAyNDZiMGZjMGMxODgyNjExMzg2NGZmZGI4ZjEwYmE3ODhjM2EwYWM2M2EwNzdjMGEwYTA3NGUwMDgwMGIyMjExYmIyMGJmNWEyNDQyY2Y2MmIxNzE2YjcwNTc5NjFiNjU3MTQ3MThkODFjNjNmZmMwYzA3ZmFjNGMyNjExYjQ2M2RmYzBjMDcwNjNjZmNkODYxNzE4ZTgxYjYzZDAyNDYzOWZjNzE4ZjgxYzYzN2ZjOTJjZjE0YzY1N2ZmODE3ZTgxZjJhMWQ4ZjBmZWMxOGE4ZjgyMDg5NmM5ODFjY2M4NWFjZjgyMmM2NzE3ZTgwNTkyMGM2ZjY2MTkxMDBjMGFhMjYxMWQyMTFmODE4NjUyZmM3MThmODEwNjJhZmNhZDBlYjg4MTgyMjI0NGQwYmI2M2IyNjExZWUwMDgwMGMyMjY4OWQyMjExZWEyNjExZGM3YmQwMWNkMGRlMTdmODFkMmEyNzFkMGRjODJkMjZlNmE4NmYxZmYwMDM2NDEwMDYxMGY4MTgyMDY2YzI2MTgwN2ExMTI4MTBjMGI2NTQxYjI5MjA2NGQzMTJhODE4YzQ5ODIyMzI0ZTAwODAwMjExYzgxMGMyYTkyMDI1OGEyNDY2Y2NjMjkwYzAyMWRmMGEyMDI1OWIyMDI1YTgyMjMxYWMyMDI1YmUwMDgwMDUxMTY4MWEyMDI1ODcyYTBmZjc3MWEzMGEyMDI3MDBjMDQ0NzZhMDI3NzlhMDI0NjAwMDAwYzE0ODIyNTkwYWQwNGUwMDgwMGEyMDI2ZjgyMjMzMmJkMDRlMDA4MDA4MjI1OTEwYzFhZTAwODAwYTIwMjU4NDYwMDAwMGMwNGU2NWEwMmU2MWE2YjkyY2FmYjE2OTkwOGIyY2FmYTE2OGIwODI2N2EzNWMyY2FmODE2NGMwODBjOWRkNzFhNTE0MTU4ODFlMmNhZjYxNjBlMGJmMmNhZjUxNmFmMGM3NzlhM2I4MjIzMTkwYzFhZTAwODAwODIyNTkxMGMwYWUwMDgwMDgyMjU4ZGUwMDgwMDg2MDgwMDBjMDZhZDA0YjIwMjcwODIyNTk1MGMwY2UwMDgwMGEyMDI2ZjgyMjMyY2IyMDI3MGUwMDgwMDgyMjMxOWFkMDZlMDA4MDAwYzAyMWRmMDgyMjMxOTBjMGFlMDA4MDBhMjAyNmY4MjIzMmNiMjAyNzBlMDA4MDBhMTZiODE4MjI1OGNhMjJhYjRlMDA4MDAyZDBhMWRmMDBjMTY0NmVjZmYwYzE2NDYwMDAwMGMwNmIyMDI3MWMyMDI3MmEyMDI2ZmRjNGM4MjI1OTkwYzE5ZDIwMjcwMGMwY2QyY2RmOGQwYzk4M2UwMDgwMGM2MDIwMGMxNmM4MTgyMjU5Y2MyMWNmMGUwMDgwMDgyMjMxOWFkMDZlMDA4MDBjNmU0ZmY4MjIzMTkwYzBhZTAwODAwMGMwYmEyMDI2ZmMyYTFkOGMwYWFjMWMyYTA2NGFhYTY0YWFhZTUzZTAxYzZkY2ZmODIyMzE5MGMwYWUwMDgwMDBjMGJhMjAyNmZjMmExZDhjMGFhYzFjMmEwNjRhYWE2NGFhYWU1M2MwMWM2ZDRmZjAwMzY0MTAwNzEzOTgxYzAyMDAwODE5MDgxNTIyNzgwNjExYzgxODA1NTEwOWM1MjkyYTEwMDYyMDY1ODkwNTUyMDI2OTYwNDBjYjg4Nzk2MDU5MTI2ODE5MDU1MjBjMDIwMDA1MjY3ODBkYzIyYjE3NzgxYzAyMDAwYTIyYjgxN2NiY2MwYWExMGMwMjAwMGEyNmI4MTFkZjAzNjgxMDA4MTkxODFlMTNlODFjZDAzZGQwMjlkMDdhZDA2YmQwNWI5MTFhOTIxOTkzMTIyMjExMjMxMWU4MTcyYTBmMGMwNjQxMTQwNTAzNGUyMmVlOTQyMjExMDcwNjYxMDYwNTUyMDcyMDM4MTYyMDM4MzgwNzcxMTgwNzcxMDgxOTI4MTQwNjYxMTgwNjYxMDcwNjYyMDYwNTUyMDcxOTM4MTYyMDM4NDMyMDM4MjAwNjYxMTcwNjYxMDcxOTQ4MWMwMzMwMTcwMzMxMDYwMzMyMDcyMjExMTBjMDY1MDMzMjAzOTQxMWM4NTMxOTU4MWRjN2RjOTAxYzAyMDAwNjI2MzVjMTY1YzExMGMxYTBjMGIwYzBjMGMwZGUwMGUwMDg2NDQwMDBjMWEwYzFiMGMxY2RkMDZlMDBlMDBhMTk2ODE5ODQxYTA5OTIwYzAyMDAwOTI2MzVkYzAyMDAwODE2MTgxNTI2MzVjODg2ODBjMWFlMDA4MDA5ODExYTgyMWI4MzFjMDIwMDBjMjIzNWNmNzdjZjZjMDIwMDBjMjIzNjdjOTA5YzAyMDAwODIyMzY4ODkwNGMwMjAwMGYyMjM2YmY5MGFjMDIwMDBlMjIzNmNlOTA3YzAyMDAwZDIyMzY5ZDkwYmMwMjAwMGUyMjM2YTZjZWQxNzdlMDJkMGVlMjBlOTAyNzE2MTgxYzAyMDAwNjI2MzVjMGMxYTBjMWI0MTNlODEwYzFjODIyNGU5MGMxZGUwMDgwMGMwMjAwMDUyNjM1Yzg4NjcwYzFhZTAwODAwYzAyMDAwOTIyMzVjZjc3OWY2YjIyMTEzYzAyMDAwYTIyMzY3YTkwYjkyYzE1ODk4MDljMDIwMDA4MjIzNjg4OTA5ZjJjMTUwZjgwZmMwMjAwMGUyMjM2YmU5MGZkMmMxNWNkODBkYzAyMDAwYzIyMzZjYzkwZGIyYzE1NGI4MGJjMDIwMDBhMjIzNjlhOTBiYzAyMDAwZTIyMzZhNmNlYzE3N2UwMmMwZWUyMDkyMjExOGU5MDljMDIwMDA2MjYzNWMwYzFhMGMwYjBjMGM4MjI0ZTkwYzBkZTAwODAwMWRmMDBjMWEwYzFiMGMxYzBjMGRlMDBlMDBjMDIwMDBiODQxYjI2MzVkYTgwMTBjMTlhMDU5OTNjMDIwMDA4MTYxODE1MjYzNWM4ODY4MGMxYWUwMDgwMGMwMjAwMGMyMjM1Y2Y3N2NmNmMwMjAwMGM4MTFiMjIzNjdiOTBjYzAyMDAwYTIyMzY4YTkwNGMwMjAwMDk4MjE4MjIzNmI4OTA5YzAyMDAwZjIyMzZjZjkwN2MwMjAwMGU4MzFkMjIzNjlkOTBlYzAyMDAwZTIyMzZhNmNlZDE3N2UwMmQwZWUyMGU5MDJjMDIwMDA2MjYzNWMxZGYwMDAwMDAwMzY4MTAwMjkyMTBjMWEwYzBiMGMwY2RkMDczOTExNDkwMTgxM2U4MTQxMWU4MTgyMjhlOTMyMDQ4MTkyMDQ4M2UyMDQ4MmU5MzE5OTQxNDIwNDg0ZTAwODAwODE2MTgxMGMwYjIxOTU4MWMwMjAwMGMyYTBmMGIyNjI1YzAwOTQxMWExOTM4MTQ4MzFhMDk5MTBhMTk0ODFjMDQ0MDFhMDQ0MTA5MDQ0MjA5ODIxYjE5MjgxYzBhOTExYzBhYTEwOTA5MDM0YTA5OTIwYTg0MWMxOTE4MTQwYWExMWIwYWExMDgwYjMxMWMwYmIxMGIwYWEyMGEwOTkyMDkwNDQyMGMwMjAwMDQyNjI1ZDBjMjljMDIwMDA5MjYyNWM4ODY4MGMxYWUwMDgwMGU4MDFmODExYzAyMDAwYjIyMjVjZjc3YmY2ZGQwN2MwMjAwMDAwMDM0MGIyMjI2N2I5MGZiMGIwYjFiOTBmYzAyMDAwYTIyMjZiMDAwMzQwYTkwZWEwYTBiMWE5MGVjMDIwMDAwYzFhMGMxYjBjMWM4MTNlODEwYzA5ODIyOGU5OTI2MjVjZTAwODAwMGM0OWMwMjAwMDQyNjI1ZGMwMjAwMDgxNjE4MTkyNjI1Yzg4NjgwYzFhZTAwODAwYjE2MTgxMGM0Y2MwMjAwMGEyMjI1Y2Y3N2FmNmMwMjAwMDAwMDM0MGQyMjI2N2Q5MTVkMGQwYjFkOTE1YzAyMDAwYTIyMjZiMDAwMzQwYTkxNmEwYTBiMWE5MTZjMDIwMDAwYzA3NzI2MjVjOTE4ODgxOTA5NDIwYzAyMDAwOTI2MjVkYzAyMDAwYzI2MjVjODg2YjBjMWFlMDA4MDBjMDIwMDBlMjIyNWNmNzdlZjZjMDIwMDA4MjIyNjcwMDAzNDA4OTA1ODA4MGIxODkwNWMwMjAwMDAwMDM0MGYyMjI2YmY5MDZmMGYwYjFmOTA2YzAyMDAwNzI2MjVjMWRmMDAwMzY4MTAwNjJhMGZmYjEyYjgxNDE5NzgxYWQwM2E5MDEzMTZjODE0MmM0YmM1MmQzZjk3MmQzMDE5MjIzNmQ4MjA0MzE5MDkyYzBiMDk5MTBmMDk5MTE5OTExNjcxODY4ODEyYTgxODIyODZiZTAwODAwNTZjYTA1OTIwNDJkMDdlOTA3YzIxM2RjYjgxMWM3MmI0ZTkxOTg4MWIyMDQzMWMyYTFkOGMwY2JjMTlhOWNkMjA5OTg4Y2JkZDIyOTI0MWJkZDU2N2QzMTBjMGQ0NmNjMDBkMjA0MzM2NzlkMDRkZDBiYjI0NDMzZTE5NzgxZjJhMWQ4ZjBmZGMxZmFlZWUyMGU0ZjAwZWUyM2U2MWUwMjA2ZGYwMDgxMmE4MWFkMGQ4MjI4NmQwYzRiZTAwODAwZDIwNDMwMGMwYzYwOWRjMDE2OTkxZGYxOTk4MTIxOWE4MTkxOTc4MWIyYTFkOGIwYmRjMWFkMGQ5YTliZDIwOTM3MDAxYTQwZGNlZGUyMDk0ZjAwZWUyM2U2MWUwODgyMDk0ZTAwODgyM2E2MTgwZDg4MTVlMjI5NmQ4MDgxNDE4MGVlYzAxNmNlMjg2NjFkMDVlMjE5ZTAxNjNlMjgwYzBiOTIxM2RlMGMxZTgyYTFkODgwOGFjMTAwZWVhMWUwOTkyMDkyNTc1ZThhMjI4MjAyNGIwY2JkMDA4ODIzYTYxODNjODIxMmU0OTEzMTgxZDgxNTkyMDliNWQwZDFlNDgwZGRjMGQwZDBlNGE3OTkwNzg4MDE4MDg5MDQxNjM4MWE5MjAyNTQxNmQ5MTk4MjA0M2E5MjE1MmQxNmI4MDQ5N2JkNDg4MjEzZGZlMDg4MjA4MjU3NWYwNjBmMDA4MjA1NzM5MjEyZGU4NzM5MzE4MjEzZGZlMDg4MjA4MjU3NWY5MjAyMzM2NjE5MjI5MjAyNGEwMDk5MjNlNjE5MTliOTMxZTIyMjcxYTk0MWQ3OWUwZjgxMmE4MTgyMjg3NGUwMDgwMGI4MzEwYzBjZjE5OTgxMGMwZDkyMjUxZjI3Njk1NDU2MGIwOGUyMDQzYjljMWU4MjA1NzU4N2JlMGNhMjIyNzEwY2I5OTcxYTA0MGM5ZWU3OWE2M2E4MTU4MjA1NzZhMGExZTQ4NzNkMTFlMjEzZTFkMjA1NzdlMGVhYzBlMGUwZTRlNzNkMDJjNjJiMDBkMjA0MzA2NzFkMGRlMmExZDhlMGRkYzFkYWRmZDIwZDc3ZDI0NDMwYTI1NzYxYzI0NDNhNDYyNTAwY2M0YjgyMDQzYjE2NjgwNmE4MTU5MjA0M2FhMGExZTQ1NjA5MDZlMjEzZTFkMjA1NzdlMGVhYzBlMGUwZTRlNzNkNTFlZDBiZDIwNDMwODYwNjAwMGNmODg3MWE5NjkyMDQzYTU2MDlmOWUyMDQzYmQyMDQzMDhjM2UxYmVlZTI0NDNiYjBlYjkzZTI0NDNiNjcxZDUyMWM5ZTY3MWQxYzBjYWEwYzBiOTEzMTgxODExNjgxZDI0OTdmODIyODJmZTI0OTdlZTAwODAwMGMxYWEyNDQyYzFkZjAxZGYwYTgxNWEwYTFlNGQyMDQzMDY3MWQwZGUyYTFkOGUwZGRjMWRhZGZkMjBkNzdkMjQ0MzBhMjU3NjFjMjQ0M2FlZDBjNDZlY2ZmZDIwNDMwMGMwZWUyNDQzYjA2ZTdmZmMyNDQzYWMyNDQzYmY4MTVkMjA0MmVkMjQ0MzBmMGYxZTRmMjU3NjE2NzlkMDIwNjI4MDA4MTk4ODFiMmExZDhiMGJkYzE4YThiODIwODYxMTYzODE0ZDIwNThiMTZlZDA2ZjIwNTkyZTIwNWI3ZjczZTAyYzYyYTAwODE2NzgxOGE4YjgyMDg4MDAwODgyMzE2ZDgwOTBjMTI0NjE0MDA5MjAyNGEwMDk5MjNhNjE5MDI0Njk1ZmY5MjA1Yjc4MjA1NzI5N2I4MDI0NjkyZmY4MjAyMzMwYjg4NTYxOGU0ODIwNTczOTIxMmRlODdiOTAyNDY4ZGZmZDkyMWI5MzE5MjIyNzFhOTQxOTJjOWY1NTY2OWUyODEyYTgxODIyODc0ZTAwODAwYjgzMTBjMGNkODIxZjE5OTgxODY5OWZmMGMwMjkyMjUxZjI3NjkxNDgxMmE4MTgyMjg2YmUwMDgwMDBjMGMwYzE5YTAyOTkzNDYwMDAwMGMwMmRjZDJiMjEzZGVhODE1ZDIxM2RmYTBhMWU0YjBkZDEwZDBiYmMwNTYwYjBhYzI1NzVmYTI1NzYwNWMwZTQ2MDAwMDFjOWVjMjU3NWVkMjA0MzA0NmIxZmYwYzAyYzZlY2ZmY2M4ZGZhOGJlMjA4ODkxYmVlZTI0ODg5MGMxYjA2NWJmZmFkMGJlNWY5ZmJmMTk4ODFiMjA0MzFjMmExZDhjMGNiYzFmYWZjZjIyZjI0ZTE0ZjgxZjBkYWMwZTBkZDEwZTIxNTQ3ZTdiZDAyMDYzMWZmZjIwNThiMTZlZmNiOTE5YjgxOWE4YzgyMDg0YzNkMGIxNjQ4ZTk1MTA3ODEyMmExZDgyMDJiYzE4MTljODE5YTQyOGEyMjgyMjUxNWE4MzJlMDA4MDA4MTJhODFiZDBhOTIwMmYwYWQwMzBiOTk4MjI4NTU5MjQyZjBlMDA4MDA5MjA0NGM1NmM5ZmQxZGYwMGMwMjA2ZDJmZmQyMTNlMGIyYTA3OGQwZGFjMGQwZDBlNGQ3YmIwMmM2ZDNmZjFjOWUwNmQ1ZmZiMjA0MmQwN2ViM2VlMjEzZGNhMjE1MjhmMGVlMTFlMGUwZjRlMjU3NWNhNzNlMTM4MTlkODE4ODE4YTI1NzVjZTAwODAwYTA5MDE0YjIwNDJkNDYwMDAwMGMwOWQyMDQzM2MxMmI4MTkwYTJjMDBjMWVlMGViMjBlMjQ0MmRjMGFhMTBhMjYzNmQyZDBkNjBmZGMwMTY2ZmRmMGMwYjgxMTY4MWExMzE4MTVjMDlkMjRhN2Y5MjRhN2U4MjI4MmYwY2FhZTAwODAwYzJhMWQ4YjE5ZTgxYzBjMmMxY2FiYjBjMWNiMjBiODBiMjQ0MzNjMjQ0MmM2MGJiYzA1NjJiZGNkMjA0MmRlMmEwZmVlMGRkMTBkMjQ0MmQxZGYwMzY0MTAwYzFhNzgxYTFhODgxMjFhNDgxZDFhNjgxZjFhNTgxOTE5ZjgxODFhMDgxNjFhMTgxNTFhMjgxMzEyYTgxNDFhMzgxYjJkMzAzZTJkMzA1NDI2ZTcxNTI2ZTZiNjI2ZTZjODI2ZTY3OTI2ZTdjZjI2ZTc3ZDI2ZTExMjI2ZTZlYTI2YjY0YzI2YjdiYzFhZTgxNjgxM2EyZDMwNzkxYTk4MTUxNTA4MTQyMjNmMjIxYWI4MWQxYWQ4MWUyZDMwOGYxYWM4MTgyZDMwNmIyZDMwNGMyNmI2YjgyMjg0YmY5OWVkMjZlMTEyMjZlMWY0OTc1OTk4YTg5NTU2OTY1ODFiMDgxNjFiMjgxOTFhYTgxNDFiNDgxMjFiNTgxMjI2MzZjNDI2M2YyOTliYTY5Mzg1MWIzODE5MWIxODFhMWFmODFhMjZiNmM5MjY4MWI1OTEzMWRmMDAwMDAwMDM2NjEwMGFkMDJkZDA1ZWQwNmZkMDdiZDAzY2QwNGNjODQ5MWI2ODEwYzE4OTA5M2EwODkwOTgxYjc4MTk4YzE5OTAxODgwOGUwMDgwMDFkZjAwMDAwMDAzNjQxMDA4MmEwNzA1ZDA2MmQwMzBjMGJiOTA2MzE2ZjgxNjJhMDhjNDcyODA1OTJhMDZmOTdhNDBkYTJhMDc0YTcxNDI2NGMxMjRjMWJiOTA1MWRmMDk4ZDI1NzY5MGRhZDA0NmFkMjgyMjNlMDBjNmNlMDA4MDA5OGQyYTJhZmRmYTBhOTEwYTlkMjI4MDUxZGYwYmQwNDgyMjNkZTBjMGFlMDA4MDBiZDAyODIyM2UyNmFhMmUwMDgwMDA2ZjlmZjAwMDAwMDM2ODEwMDgxNmY4MWFkMDU4MjI4Yzg0OTQxZTAwODAwNDIyMTEwYTFiNjgxMmMxOTI3YjkwNDJjZmIyN2JiMGIwYzA5YTBkM2EwMGMwY2M5MGQwNjAxMDBhMDkzYTA5ODA5OWMzOWFkMDNiODQxY2QwNWRkMDZlZDA3ZmQwNGU1ZjVmZmNjMmEyZDBhMWRmMGFkMDJiZDAzZGQwNWVkMDZmZDA3ODFiNzgxNDkwMTg4MThjODQxZTAwODAwMmQwYTFkZjAwMDAwMzY2MTAwMzFiODgxYWQwNDgyMjNlY2JkMDFlMDA4MDA3ZDBhY2M5YWExYjk4MTBjMGJlNTg1YjFjNjQ0MDBhMjAyMDBkMmEwN2JhMGExNzRhNzNkMDYwYzFjYmQwYTA2MDMwMGIyMDIwMTBjMmM4MGJiMTFiYWJhYjBiMGY0YTIyNzEyM2M3ODU3N2ExMWUxYmE4MWU3OWIwYmYxYmI4MWYwZmExMGYyNjcxMjQ2MzYwMDg3OWIxMDgxMmE4MWFkMDQ4MjI4ZWZiMjE3MThlMDA4MDA0NjMxMDAyYzQ5OTc5YjEyODEyYTgxYWQwNDgyZDgwMjgyMjhkNTBjMGJlMDA4MDA0NjJiMDBiOTExZTJjYmUxMTY5ZTBhYjkxMWYyY2JlMDE2MWYwYTgyMjcyYmUyYTBmZjgyMTgwOGEyMDdhOGM3Njg0ZGU3MWE0YTkyYTE3Zjk3OWI0NGNhZTJlMjBlMDBlNzNkMDRjZDBlNDYwNDAwMWJjY2MwYzA3NGNhYzJjMjBjMDA4MGNjMTFjYWNlYzBjMGY0ZDFiYzgxYjkxMWQ3OWMxZDgxYmQ4MWIyMDdhOTgyMjg5ZTBjMGNlMDA4MDBiODExMGMwOWEyYTBmZmEyNDdhODkyNDdhOTkyNjcyYmE4ZTcyY2RjMTc2YTA5Yzc5YjA2N2NkZGQwYWExMGE5ZTcyNzZhMGIxYzhlZTc5YjA2N2NiZmYwZmExMGY5ZTdhMjA3MTcyY2U4OGM2YTg3OWIwNDBiOWE5MjQ3MTc4Y2U1YWQwMmJkMDRlZDA2MGMwYzgyMjNmNDBjMWRlMDA4MDAwYzAyMWRmMDIxMmE4MTgyMjI3MGFkMDRlMDA4MDA5MjA3MTA2NjE5MTZhODExNjZjYTExYWQwNDBjMDk5MjQ3MTA4MjIyNGUwYzBiZTAwODAwOTIwNzEwNjYyOWQwYTgxMTFjZmJiNzlhYzlhZDA0MGMwOTkyNDcxMDgyMjI0ZTBjMGJlMDA4MDBjNmVkZmYwMDM2NjEwMDcxYjg4MWFkMDU4MjI3ZWNiZDAxZTAwODAwYWQwNTgyMjdlY2JkMDFlMDA4MDAxNzY0MGY5OGVhMGM0YjI3NjkwMzBjMDIxZGYwYjBjOTIwYzllYWFkMDJiZDAzY2QwNDgxYjc4MWRkMDU4ODI4ZWQwNmUwMDgwMDJkMGExZGYwMDAzNjQxMDA4MTM4ODE4MjI4NGFlMDA4MDA4YzNhZjZkMjA0MWRmMGI2ZDIwODIwOTY3NDIwMjA1NDQ2MDAwMDBjMDk3Y2ZkMGMxYTkwYjlhMGMxYmU4MWYwYmIxMWNhYmIyMGMzNzRjYWJiMjBjMDI0MDAxYzQwYzFiZjgxMDBhYWExY2FiYmMyMGI4MGQwZGEzMGMwYWEyMGQwY2MxMDMwYWM4M2EyNGI4MDFkZjAwMDM2NDEwNDgxYzA4MTYxNmY4MTg3OTI0NzQxYzE4MWQ4MTQ5MmExNDVkN2I5MDlhMWI5ODEwYzBiMjU2NGIxZDgxNGJkMDE4MWJkODFjZDAzODIyOGM2ZDBhMGY0ZTAwODAwZjIyNmY0NzFjMjgxMGMwZGQyNjc2OGI4MTQ1MjA0MDBiMGIwZjRmY2RhYWQwNWNkMDEwYzJlZTAwZjAwM2QwYWM2MGUwMGIxYzM4MWMyMmJlNmIyZGIwM2IyMWI0ZTBjMGFiNzNhMGViZDAyODIyNmRmMGMxYWUwMDgwMDBjMTNjNjEyMDBjMDRhYjA5MjE0MDExYmFhMjcxOThmYTBhMGY0MDZmN2ZmYWQwNWNkMDMwYzJlZTAwZjAwM2QwYTI2MTMwODI2YTMwNTI2MjMwMjY2MzMxZWNjNjRhMWI5ODEwYzBiZTU1YmIxODIyNmM0YWQwMmUwMDgwMDhjOWFiMjE0MDI4MjI2ZGVhZDAzZTAwODAwMGMxOTkyNjc2ODJkMDMxZGYwMzY2MTAwNzFiODgxYWQwNDgyMjdlY2JkMDFlMDA4MDA2ZDBhY2NhYWExYjk4MTBjMGIyNTU4YjEwYzAyMWRmMDkyYTQwNDk3OTIzODgyMjdkYjFjMmFlMDA4MDAxNmRhMDc5OGQ2NzdlOWU1YmQwNjgyMjdkYzBjOWFlMDA4MDA1NmZhMDY5MTdkODFhMWM0ODFiMmExZDhiMGI0YzFhMjBhMDBiYTk5OTIwOTgwYTczOTU4MGM3YTA2MTgwMGMyYTQwNWM3OTIzNTgyMjdkYjFjMmFlMDA4MDBiY2VhOThkNjc3ZTlhNzgxMmE4MWFkMDQ4MjI4NGEwYzJiZTAwODAwNjY4YTk3YmQwM2RkMDRlZDA1ODFiZDgxYTJhNDA3ODIyODE4MGMyY2UwMDgwMDA2ZTBmZmFkMDJiZDAzODFiNzgxY2QwNDg4MzhkZDA1ZTAwODAwMmQwYTFkZjAxY2EyMWRmMDgxMmE4MWFkMDQ4MjI4NGEwYzFiZTAwODAwOTJjYWY5NTY1OWY1YmQwM2RkMDRlZDA1ODFiZDgxYTJhNDA2ODIyODE3MGMyY2UwMDgwMDg2Y2ZmZjAwMDAwMDM2NDEwMDYxYzk4MTgxYzg4MTkxYzc4MWIxYzY4MTQxYzU4MTMxNmY4MWQxYjc4MWMyMjM3NGUyMjNhZWEyZDMwNDUyZDMwNmYyZDMwMmYyMmY4ZjIyMjUxMTI5MmQ0MjY1MTEyMWNiODE1MmQzMDU0MWNhODE0MjY1MWRiOWZhOTI2YTcyZTkwZDgyNjNhZWM5MWQ2MjYzNzRmOTNkMjI2M2M1MWRmMDM2NDEwMDYxY2M4MThkMDI0MjA2MDAxYzIyOGMwNDFkZjAwYzAyYzFjZDgxMWJkNDUxY2U4MTQwMzQ5MDBjYjcwYzg5OTI0ODAwNzI0ODAxNTAzMzkwYjIwMzAwZDI0NjAwY2FiYmIyMGIwMGIyNDgwMmEyMTMwMmEyNDgwMzkyMTMwMjIyNDgwNTkwOTg0MTkyNDgwNDcyMDMwMTcyNDgwNjUyMDMwMjUyNDgwNzMyMDMwMTMyNDgwODFkZjAwMDM2ODEwMDMyYzI4NzgyMDM3OGQxZDA4MWY2ODgwMjA2MjEwMDBjMWM5MjAyMDA5MjQxMDA4MjAyMDE4MjQxMDVmMjAyMDNlMjAyMDI4MGZmMTFmYWVlZjFjZjgxZTBlMGY0ZTI1MTA0YjIwMjA0YjI0MTAxYTIwMjA1YjFkMTgxYTI0MTAyMGMwYTkyMDIwNjkyNDEwNDgyMDIwN2M5MGRlOTBmODI0MTAzYTkwYmEyMDM3ODBjZDlhN2I5MThhMmMxMTAwYzZjOGIyMmJkMDJhNTNiMDBiZDAyYTFkMjgxMGM2YzI1M2IwMGEyMDM3ODBjZWJhN2JiMDVjMjAzODdjMjQxMDZjZDA0ODExNjgxYWQwMTgyMjg5ZmIyYzExMGUwMDgwMDJkMGExZGYwMWMyMjFkZjAwMDM2NjEwNGIyMDIwYTgxYzA4MTJhYmI5MjBiMGQzMjBiMGM4MDk5MTE5YTMzMzAzMGY0ODc5MzQ1ZmI0YmFkMDEyNWVlZmY5ZDA0YWQwMTBjOGM3NmFjMDlkMjBhMDFkMjQ5MDAxYmFhMWI5OWFkMDQwYzBiMGMwYzY1ZjJmZjBjMGM0ZDBhZDJjMTEwYWQwMzMxNzk4MTBjMGU4MjIzNTE0MGIwNzRlMDA4MDA4MjIzNGFhZDAyZTAwODAwMmQwNDFkZjA4MWQzODE4ODA4YWQwMmUwMDgwMDJkMGExZGYwMzY2MTAwYWQwMWU1ZThmZmEwODA3NGRjMjg4MTZkODE4MjI4NTJhZDAxZTAwODAwMWJhMTBjMGIwYzFjNjVlZGZmMWRmMDAwMzY0MTAwODIxMjAzOTJhMjFiOTc5ODBlZTVmY2ZmODEwZDgxODg1OGFkMDJlMDA4MDAxZGYwODFkMzgxODgxOGFkMDJlMDA4MDAxZGYwMDAzNjQxMDA4MjEyMDM5MmEyMWI5Nzk4MGU2NWZhZmY4MTBkODE4ODU4YWQwMmUwMDgwMDFkZjA4MWQzODE4ODI4YWQwMmUwMDgwMDFkZjAwMDM2NDEwMDUxZDQ4MTgxNmQ4MTMxN2M4MTQyMjg3ZDM4MDM1MjY4N2Q1MWQzODEzMjIzMzI0OTA1NDE3OTgxNjYxMzBjMzFkNTgxOTIyNDM3OTkxNTMyNjQzNzFkZjAyNjIzMDExZGYwMzFkNjgxYTIyNDM3YTkyNTg2ZmFmZjAwMzY2MTAwODE4MTgxMGMyYTg4NDgwYzFiZTAwODAwODFkNzgxMWMwYTg4MDhiMWQ4ODE4MjI4MTliMjBiOTFlMDA4MDA0MWRhODEwYzI5MjFkOTgxOTI0NDBhOTgwMjMxZGI4MWNjODk4ODAzMGMxYWUwMDgwMDg2MGQwMDY2MTkyYmExZGM4MWMwMjAwMGQyMmE4MWMwMjAwMGQ5MDFjMTI2ODFjMDIwMDBiODAxYzBiYjIwYzAyMDAwYjkwMWMwMjAwMDk4MDFjMDIwMDA5MjZhODFjNjAxMDBhMWRkODEwYzBiNjUxZGIxZTg3MjI3ZWUxMmI4NDJkOGQzODFkZTgxMGMzYTg4NzgwYzBjZTAwODAwYTI1NDA0MWRmMDAwMzY0MTAwMzFkYjgxMjFkZjgxMjljMzFkZjAwMDAwMDAzNjQxMDBlMWUwODFkMjFlNDA4MjFlNDEyYWRkNGE5ZDk3YjgxMmFkMDI4MWUxODFiZDAzODIyODE4Y2QwNGUwMDgwMDJkMGExZGYwYWQwM2IyMmUxZmNkMDRkYWJiNjUxOTAwMGMxMjFkZjAwMDAwMzY0MTAwNTIwMjAzODIwMjAwMGMwNmUyMDIwMmQyMDIwMTgwZWUxMWVhZGRkMGQwZjQ2MjU0MDAyNjM4MTFhZDAyODFlMjgxYmQwMzg4MDhjZDA0ZTAwODAwMmQwYTFkZjBhMjAyMDQ4MWUzODFjMjAyMDdiMjAyMDY4MGNjMDEwMGJiMTFjYWJiYzIwMjA1ODg3ODgwY2MxMWNhYWFiYWFhY2QwNWJkMDNhYWFkZTAwODAwMGMzZGEwZTBmNGZkMDZlMGY1OTNmMjU0MDBlMDZkODMyZDA2MWRmMDAwMDAzNjQxMDAyMWU1ODE0MWU0ODEzMWUzODE5MWUyODE4OGIzODkwOTQ5YjMyMjYzNDQxZGYwMDAwMDM2NDEwMDFkZjAwMDAwMDAzNjIxMDAzMDcyMzAyMDYxNjAzMDMxNjBiNjIzMzQ2MDUxNDEzNzM1M2E1MGY2NDA0MGYzNDA1MDQ0YzAwMDE0NDAwMDMzYTEwYzAyNzY5NDBkMzczNjA0MzA2NmMwMWIyMmYwMjIxMTMwMzE0MTM3MzYwMTFiMjIyMDUwNjA3MDI1YTMxZGYwOWM1MzYwMjA2MDcwMjZiMzFkZjAwMDAwMzczNjEwMGMxMjdjZjQ3MDI0YTMxZGYwMDAwMDAwMDA0NDQ5NTYzMDBjMDIxZGYwMzYyMTAwYjYyMzJmNmQwMjUwZjY0MDQwZjM0MDQ3YjUyYTUwNDRjMDAwMTQ0MDAwMzNhMTIyYTAwMDc2OTQwZDM3MzYwNDMwNjZjMDFiMjJmMDIyMTEzMDMxNDEzNzM2MDIyMmMyMDExZGYwOGNiMzFkZjAwMDAwMzczNjBjMGMxMjFkZjAwMDAwMDAwMDAwNDQ0OTU2MzAwYzAyMWRmMDAwNzY5NDA5NjIwMzAwMWIzMzYyNDUwMDFiNTUxZGYwYjY3NGVkNjIwMzAwMWIzMzQyYzRmZjYyNDUwMDUyYzUwMTE3NjUyN2I2NjRkOTYyMDMwMDcyMDMwMTJiMzM0MmM0ZmU2MjQ1MDA3MjQ1MDEyYjU1ODYwMzAwMDAwMDAwMzYyMTAwMjA1MjIwMDdlMmM2MTdlMmQ3NDA3NDQxODJhMDAzODc4MzVhNzY5NzE1NjgwMzc4MTM2OTA1NjgyMzc5MTU3ODMzNjkyNTMyYzMxMDc5MzU1MmM1MTAzNzY0MGI2ODAzNzgxMzhiMzM2OTA1NzkxNThiNTUyN2U0MDcxN2U0MTQwN2U0MjExZGYwNjgwMzRiMzM2OTA1NGI1NTE3ZTQwNDA3ZTQxMTFkZjA2MjEzMDAyYjMzNjI1NTAwMmI1NTA3ZTQwMjFkZjAwMDYyMDMwMDYyNDUwMDFkZjAxNmE0ZmYwMDIzNDA4MGIzMTBiMDMzYzA2ODAzNzY5NzIxNzgxMzg4MjM2MDY3ODE2OTA1OTgzMzcwNzg4MTc5MTU2ODQzODA4OTgxODkyNTMyYzMxMDkwOTY4MTk5MzU1MmM1MTAzNzY0MTU3ODEzODgyMzYwNjc4MTY5MDU4YjMzNzA3ODgxNzkxNTUyYzUwODgwNjgyMDI3NjQwYzc4MTM0YjMzNjA2NzgxNjkwNTRiNTU2ZDA3YmEzMzE3ZTQwNjA3ZTQxODFkZjAwMDAwNjIwMzAwNzIwMzAxMmIzMzYyNDUwMDcyNDUwMTJiNTUwN2U0MDExZGYwNjIwMzAwNjI0NTAwMWRmMDAwMDAwMDAwNzY5NDA0MzI0NTAwMWI1NTFkZjAwMGI2ODRmMTMyNDUwMDFiNTUwYjQ0MTc2NTI4YjY4NGU0MzI1NTAwMmI1NTQyYzRmZTg2MDYwMDAwMzYyMTAwMzAzMDc0ODA3MzExNzAzMzIwMDA3MzExNzAzMzIwNWQwMjA3ZTJjYzE3ZTJkNjQwNzQ0MTc2OTcwYTM5MDUzOTE1MzkyNTM5MzU1MmM1MTAzNzY0MDYzOTA1MzkxNTUyYzUwODI3NjQwMzM5MDU0YjU1MTc2NDA0MzI1NTAwMmI1NTA3NjQwMjMyNDUwMDFkZjAwMDAwMDAwMDAwMDIwMjAxMDIwMDAwMDBmZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FyM2svMTAyMDIwMC9hcjNrYmRhZGRyLnBzdCBiL2FyM2svMTAyMDIwMC9hcjNrYmRhZGRyLnBzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTIwODU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXIzay8xMDIwMjAwL2FyM2tiZGFkZHIucHN0CkBAIC0wLDAgKzEgQEAKKzEyNjA0MTdmMDMwMA0KZGlmZiAtLWdpdCBhL2FyM2svMTAyMDIwMS9QU19BU0lDLnBzdCBiL2FyM2svMTAyMDIwMS9QU19BU0lDLnBzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGMyODViCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay8xMDIwMjAxL1BTX0FTSUMucHN0CkBAIC0wLDAgKzEsMjYgQEAKKworLy8gUmFkaW8gdGFibGUgVEFHIAorIworW0g6U10wMTJDCitbSDpTXTAwMTgKK1tIOkFdQjEgQjEgMTIgMDAgRkUgMDggRkUgRkUgMDEgMDAgMDEgMDAgMDAgMjAgMDIgMDAgCisgICAgIDA4IDA5IEUwIDZGIDVCIEU3IEIyIEIyIAorCisvLyBTeXN0ZW0gY29uZmlnIFRBRyAKKyMKK1tIOlNdMDAxMworW0g6U10wMERBCitbSDpBXUMxIEMxIDIwIDAyIENBIDA4IEZFIEZFIDY3IDAwIDAwIENDIEIxIDAxIDIwIDAwIAorICAgICBGRiBDQyAwRSBDQyAwOCAwMCBFQyBGRiA2MCAyNyAwMCAwMCAyRiBGRCA2MCAyNyAKKyAgICAgMDAgMDAgNkQgRkQgRjAgRkYgQTAgMDcgMDQgMDAgNTAgRkQgQTAgMDcgMDQgMDAgCisgICAgIDZGIEZEIEY0IEZGIDYwIDQ3IDA0IDAwIDNBIEZEIDYwIDQ3IDA0IDAwIDg5IEZEIAorICAgICBGOCBGRiA0MCA0NyAwOCAwMCAxMiBGRCA0MCA0NyAwOCAwMCA1OCBGRCBGQyBGRiAKKyAgICAgNDAgRTcgMDQgMDAgNTggRkQgNDAgRTcgMDQgMDAgNTggRkQgMDAgMDAgMDAgRTcgCisgICAgIDA4IDAwIDU4IEZEIDAwIEU3IDA4IDAwIDU4IEZEIDA0IDAwIDgwIDY3IDBEIDQwIAorICAgICA1OCBGRCA4MCA2NyAwRCA0MCA1OCBGRCAwOCAwMCAwMCA2NyAxMSA0MCA1OCBGRCAKKyAgICAgMDAgNjcgMTEgNDAgNTggRkQgRkYgQ0MgMTAgQ0MgMjIgODEgQTAgMEYgQTAgMDAgCisgICAgIDMyIDAwIDAyIDA4IDBBIDY0IDIwIDIwIDBBIEZGIDIwIDIwIEZGIENDIDExIENDIAorICAgICAwMSAwMSBGRiBDQyAxQSBDQyAwNCAwMiAwNCAwMCA4MCA2NyAwRCA0MCA1OCBGRCAKKyAgICAgMDggMDAgMDAgNjcgMTEgNDAgNTggRkQgRkYgQ0MgMUQgQ0MgMDEgMDAgMDAgMDAgCisgICAgIDAwIDAwIDAwIDAwIDA5IDAwIDAyIDAwIDBGIDBEIDA3IDAwIDE5IDE5IEZGIENDIAorICAgICAyMyBDQyBDMCA0OSBEMCA0OCBGRiBDQyBDMiBDMiAKZGlmZiAtLWdpdCBhL2FyM2svMTAyMDIwMS9SYW1QYXRjaC50eHQgYi9hcjNrLzEwMjAyMDEvUmFtUGF0Y2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZTgzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcjNrLzEwMjAyMDEvUmFtUGF0Y2gudHh0CkBAIC0wLDAgKzEsMyBAQAorREE6MDA1OTQwMDAKKzQyZjUKKzAwNTg5OTAwMDAwMDAwMDAwMDAwMDAwMDA0NDM1OTAwOWM3YzU4MDA0YzU4OTkwMDAwNDM1OTAwMDA4MzU5MDA5NDY0NTgwMDAwNTA1OTAwODAwYjU4MDA2MDU4OTkwMGQwMTg1ODAwYTQ0MjU5MDA5ODVhNTgwMDM4MDc1ODAwMDAwMDA0MDAxMTIwMDAwMDEyMjAwMDAwMTAyMDAwMDBkMDE3NTgwMDRiMjU1ODAwNDA5YzAwMDAwNDUwNTkwMDhjMTA1ODAwZjdmZjAwMDA1MDUzNTgwMDRhMjU1ODAwZDA0NjU4MDBkMDFjNTgwMDEwODg1ODAwMjQ2MDU4MDA1MDE5NTgwMDE0MTE1ODAwZmZmZTAwMDA5ODU0NTgwMGZmZmZmZjA3NTAxZTU4MDBmZWZmMDAwMDAwYmUwMjAwMzgwNjU4MDAzODVjOTkwMGY4NjE5OTAwYjQ1ODk5MDA0MDU5OTkwMGM0NWQ5OTAwZmM1Yzk5MDAzNDViOTkwMGI4NWM5OTAwODQ1ZTk5MDAyODVmOTkwMDdjNWY5OTAwODg2MDk5MDA0MDYyOTkwMGYwNjc5MDAwMzg2Mzk5MDBhMDA4NTgwMDNjNjg5OTAwOWM2NTk5MDBiMDY4OTkwMDk4Njg5OTAwNDg2NDk5MDBkODIzNTgwMDAwNDAwMDAwYTQ0MjU5MDAxODBlNTgwMDEwYTU1ODAwMDBmZTAxMDA5ODU2NTgwMDAwMDIwMjAwZmZlMGZmZmYwMDEwMDAwMDE4MTM1ODAwZDAyMzU4MDA5MDI1NTgwMGZmZmZmZjAzMDEyNzU4MDA2NDI1NTgwMGRjMjY1ODAwNTAyNzU4MDBhYzI2NTgwMGRiMjY1ODAwOTgyNTU4MDBiODY2NTgwMDAwMDAwMDEwZDAxZTU4MDAwMDVlMDIwMDhjMWQ1ODAwNjEyNTU4MDBmODA4MDAwMDI4N2U1ODAwZmUxZDU4MDBkMDUyNTgwMDAwMGUxODAwNTA0YTU4MDAyNDUwNTkwMGFjNDI1OTAwZDA0ZDU4MDA1MDFkNTgwMDUwNGQ1ODAwNTAyNTU4MDBlNDI2NTgwMGM0MjY1ODAwZDA0YTU4MDBkMDQ5NTgwMDc4OGE1ODAwYjQ0MjU5MDBkODQyNTkwMDZhMjU1ODAwNWM3ODk5MDBhMDc4OTkwMGQ0NzA5OTAwYWM2YTk5MDAxODZhOTkwMGU0Nzg5OTAwMzg1MDU5MDBiODY0NTgwMGQwNmQ1ODAwMzA3NTAwMDA2MDc5OTkwMDAwM2UwMDAwM2M1MDU5MDBlYzg2NTgwMGRjN2E5OTAwMzAxMjU4MDAwMDNlMDEwMDQwNTA1OTAwMDAxODAwMDBkMDkyNTgwMDEwN2I5OTAwOTA3ZTU4MDA0NDUwNTkwMDE4MGQ1ODAwNjQ3Yjk5MDAyYzcwNTgwMDU4NmY1ODAwYjg2YTU4MDBkYzVlNTgwMDYxZmMwMDAwNjJmYzAwMDA3MmZjMDAwMDczZmMwMDAwOTFmYzAwMDA0ODUwNTkwMDBjNjM1ODAwMGJmYzAwMDAxNGZjMDAwMDMwZmMwMDAwNjVmYzAwMDAzNmZjMDAwMDM0N2Q1ODAwYTQ0MjU5MDA5MGE0NTgwMDM3Yzg1ZWExMGM5YjU4MDA4MDQwMDAwMGI0N2Y1NzAwYjA2NDU4MDAwYzY0NTgwMGJjN2Q5OTAwNTQ3ZTk5MDA2ODdmOTkwMDFjN2M5OTAwZjQ3ZTk5MDBkYzVmNTgwMDQ0ODA5OTAwNDE1MzUzNDU1MjU0MDAwMDU1MjU2NDJkMDAwMDAwMDA3MDYxNjc2NTI4NzQ2Zjc1NzQyMDI1NjQyOTNhMjU3ODIwMjU3ODIwMjU3ODIwMjU3ODIwMjU3ODIwMjU3ODBkMGEwMDAwMDAwZDBhNzA3MDVmNzA2MTY3NjUyODI1NjQyOTJjMjA3NDY0M2EyNTY0MmMyMDczNzQzYTI1NjQyODMwMmQ3Mzc1NjMyOTBkMGEwMDAwMDAwMDAwMDA1YzAwMDA1MDU5MDA1MDUwNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2NDEwMGIxMDY4NGE4MWJiODBiYTdiYjEyOWQwYmIwY2FjMDBjMGEzYmNjYzBjMjQxNzY5YzAzYTkwOTRiOTllMTA3ODRkMTA4ODRkMjZlMWFhNTA0MDA2NTI5MDJhNTA5MDE2NThjMDI2NTBkMDJlNTg3MDJlNTJiMDJlNTMwMDJhNTMzMDJhNThiMDIxZGYwMDAwMDAwMzY0MTAwNDEwOTg0NTEwYTg0NTkwMjQ4MDQ0OTAzMWRmMDAwMDAwMDM2NDEwMGExMGI4NDgxMGM4NDRjMjk4ODA4OTk3YWUwMDgwMDFkZjAzNjQxMDAyMTBlODQzMTBkODQ4MTBjODQ0ODAzNDkwODI5MDMxZGYwMzY0MTAwM2QwMjIxMGY4NGEyMDIwMTgyMDIwMGE3MzMwNGFhODg4NzIzMGFhMTEwODQwYzBiZTVmNWI1YTIwMjAxYTAyM2MwMjJjMjIwMjAyMDc0MWRmMDM2NDEwMDQxMGY4NDkyYTBmZjgyMDQ0YzMyMDQ2MDQ3ZTgwMzBjYzIxZGYwOTc5MzBhYTExMDg0MGMwYmU1ZjJiNTMyMDQ2MDIwZTYwMzBjMmMyMGIwMzRiNzJjMDIyMDYyMDBhMmEwZWY5MjA0NGM4MTExODRiZDAzODIyODMyYTA5OTEwOTI0NDRjMGNiYWUwMDgwMDQxMTI4NGRjNWE4MjI0MzRhZDAzZTAwODAwYWQwMzBjMmI4MjI0MTUwYzBjZTAwODAwODYwMzAwNjYyYTE1YWQwMzBjMmI4MjI0MTUwYzBjZTAwODAwMjBlNjEzMTAyMDAwMGMwMjFkZjAyMGU2MTMxMDIwMDA0YzEyMWRmMDAwMDAzNjYxMDA1MTBmODRjZDAyODIwNTJjOTIwNTQzMDc2ODAyNTYwOTBlOTIwNTRjYTIwNTVlMDc2OTA0MGJhYTE2MmEwZDQ3NjkwN2IyMDU2ZTBiYmIxNjdiMGM3MTEyODQyMTEzODRkMTE0ODQwYzBhZDc5YzM2YmQwNTZkMGExYzllNzZhZTI4MGMwZjBjMWUwYzA4OTIyYjNlYzIyYjNmYTA5OTEwMjBjYzEwYzA4ZTgzOTBmZTgzODcwZjA5OWQwZTU2NTkwOTBjNzY0NjNiMDA4YmJiMWI2NjBjMDk4NmZiZmY4MTE1ODQ2ZDBhODA4Y2MwNTZkODBkYWQwMTBjOGMwYzA2YmQwNjI1OGUwMmJkMDRhZDAxMGM2Y2E1N2IwMjBjMWE3Y2ZiZGQwNTBjMGMxMDRlNDA4ODAxOTgxMTMwZTAwNGYwZWUxMWUwZmYzMTgwOTk4MWUwODgxMTkwZmYyMDIwZmYyMDgwZWUyMDYwZWUyMDFjOTg3NmE4MzEwYzA0MGMxOTMyMmQzZjBjMDhiMDMzMTBmMDMzYzAzMDg5ODMzMjJkM2U3Y2UyMjAyMzEwZTAyMmMwMjA0OTgzODcwNDA0MGMxOTA2MjcwMGE3MDMwMjA2MjUwMDhiZGQxYmNjNDYyMzAwMGNjNjA2MTcwMGFkMDEwYzBiMGM4YzY1ODYwMmJkMDRhZDAxMGM2Y2U1NzMwMjEwNGU0MGI4MTEwYzE5YzgwMTMwYTAwNGYwYWExMWUwOGMxMTgwOGEyMDkwODgyMGMwYmI4MWEwYWYzMWMxMTM4NGIwYWEyMGMwYWEyMDUwYjZiMDgyNmIzZWEyNmIzZmE2MTYxMDdjZWVkMjJiM2RjMjJiM2NkMjZiM2RlMGNjMTBjMjZiM2M4OGI3ZTAwODAwMGMwNjJkMDYxZGYwOTExNjg0MGMwYjk3OWNmMzFjOWM3NmFjMDdhMjY1M2Y2MjY1M2U4YjU1ODhiN2ExMTc4NDBjMTliMjZhN2Y5MjZhN2VlMDA4MDA0NmY0ZmYwYzA5MGMwZDBjMGJjYzM5MWMyNjg2ZjFmZmY5MTE1MGZjYjA4MjJmM2VlOTAxYTcwODEzYjI2ZjNmNjI2ZjNlZmNiYzkxMTc4NGQyNjk3ZmEyNjk3ZWM2MDgwMDFjOGRjNzJkMWVkZDBmMWM5ZWMwZWVjMDc2YWUxZWYyMmQ0MDgyMmQ0MTgyNmQzZmYyNmQzZWE3MGYwZGIyNmQ0MTYyNmQ0MDg4YjdlMDA4MDBjNmRkZmY4YmRkODZmY2ZmOTIyZjNjYjIyZjNkYjI2ZjNkYTA5OTIwOTI2ZjNjMDZmOGZmMzY2MTAwMGNiYmMyYTBmZDYxMTI4NDUxMTg4NDcxMGY4NDQyYTFkODQwNDJjMWEyMjcyYzVhNTQ5MjA1ODA0YWFhY2MzOWE5MDEyNjkzMDk2NjE5NzNhOTAxYjcxMzAxMWRmMDgxMDc4NDBjZGE4ODc4MGM1YmUwMDgwMGJkMGExNmNhZmVjODAxOTIwYzA0MWMwYWEwOTkyMDkyNGMwNDgyMGIwYWEyYTBjZmJhODhmMjA4MGQzYzA5YTBmZjEwOTBmZjIwZjI0ODBkZTIwYjBhMGNiZGJhZWVkMjRlMTA5MjBjMDRhMmEwZmVhMDk5MTA5MjRjMDRhMjA1ODA2NjFhMGFkODAxYzJhMGZkYzBjOTEwYzI0ZDA0YWQwMjgyMjY1MmMxMTk4NGUwMDgwMGE4MDEwY2JiYzJhMGZkYjc5MzhkOTIwYTA0YzA5OTEwOTI0YTA0MjZiOTA3YTExMDg0MGMwYmE1YzFiNWEyMjcyYzRhYWFhMjFhMDMzNzZhMWY4MjI2OTBhZDAyZTAwODAwOTIyNzJjNGE5OTkyMTkwMzkwOTMwNDE2ODlmNWExMTA4NDBjMGJlNWJlYjUxZGYwYTIwNTgwMGJhYTU2NmFmNDgyMjY5NGFkMDJlMDA4MDA5MmNhYmYxNjg5ZjMxNjVhZjNhMTEwODQwYzBiZTViY2I1MWRmMDM2NDEwMDQyYTFkODUxMGY4NDQwNDJjMWEyMjUyYzRhYWFhMjBhMDQ5Y2RhMjZiYTFiMjYzYTE4MjY3YTE1OTExODg0OWE5NDkyMDk4MDI2MTkxYTI2YWEwNzI2MTkxNDFjY2JiNzlhMGY4MTFhODRhZDAyODgyOGJkMDNlMDA4MDAyZDBhMWRmMDgxMTI4NDgyMjg1NGFkMDJlMDA4MDAwY2ZhMGMwZDgxMWI4NGIyMjUyYzBjMWU4MGMyMTFlMGNjMjA0YWJiYjIxYjI0ODg3OGIwYmJhMGYwYmIxMWUwMDgwMGYyMjUyYzBjNjI0YWZmYTI1ZjM2MWRmMDAwMDAzNjQxMDA1MmExZDg0MTBmODQ1MDUyYzE0MjI0MmM1YTQ0MjIwNDA0Mjc2MjE3MjYzMzIyMjY0MzFmMjY1MzFjMjY2MzE5MjYyMzE2MGNkODg3MTMxMTBjMDIxZGYwNDc2MjBhMjY5MzA3MGNiOTk3MTMwMjY2MjNlZDBjMTIxZGYwMDAwMDAwMzY0MTAwNTExMjg0YWQwMjgyMjU5MmJkMDNlMDA4MDA4YzRhM2NhMjFkZjAwMDAwMGMwOTcxMGY4NDYyYTFkODYwNjJjMWIyMjcyYzBjOGM2YWJiYTIyYjNhNzZhYzU4MDAwOTQwYTA4MDkxODA4MDM0NTZhODA0MDAxOTQwMDBjM2ExYzBjYTIwYzI2YjNhMjYxMzY2MjYyMzNkMjYzMzRjMjY0MzI2MjY1MzIzNjY2MzIwYmQwNGEyMjcyY2MyYTEyMTZhYWFjYWFhMGMxYzI1NDIwMmMyMjcyYzZhY2NiMjFjMDMwYzhkZDBiYjIwYjI1YzAzODIyNTkwYWQwMmUwMDgwMDBjMDIxZGYwNGI5OWM2ZWVmZmJkMDRhMjI3MmMwYzVjNmFhYWEyZGEwMTI1M2YwMjA2ZjdmZmJkMDQxY2NjYTIyNzJjZDJhMTA1NmFhYWRhYWFlNTNkMDIwNmYyZmZiZDA0MWM0Y2EyMjcyY2QyYTBlYzZhYWFkYWFhYTUzYzAyMDZlZGZmMDAwMDM2NDEwMDMyYTFkODQxMGY4NDMwMzJjMWMyMjQyYzNhY2M4MjFjMDNkMTEyODQzNzY4MmVhZDAyYjJkYzAxODIyZDRiYjIwYjIxZTAwODAwNTYwYTA2YzIyNDJjZjExYzg0M2FjY2UyMWMwM2QyMGNlNmYwZWUxMGUyNWMwMzU2OWQwNDBjNmRkMjRjZTYxZGYwZTIwY2U2OTIyYzNhZmM5ZWJjNzk5MGUwMzRlMjRjZTZjMjI0MmMzYWNjOTIwY2U2YWMwOTI2MTkyNzI2MjkyZTI2MzkzNTI2NDkzYzI2NTk0MzY2NjkwZmYyMWMwMzM3NmYxMGExMTA4NDBjMGJhNTliYjUxZGYwMGMwYTBjMWIyNTliYjUxZGYwODIyZDZkYWQwMmUwMDgwMDFkZjA4MjJkOTNhZDAyZTAwODAwMWRmMDgyMmQ5NGFkMDJlMDA4MDAxZGYwODIyZDk1YWQwMmUwMDgwMDFkZjA4MjJkOTZhZDAyZTAwODAwMWRmMDM2NDEwMDgxMWQ4NDgyMDgzNDAwODgyM2U2MTgwN2ExMTA4NDBjMGI2NTk2YjU5MmEwZmY5NzkyMDdhMTEwODQwYzBiYTU5NWI1MzExZTg0NDJhMWQ4NDA0MmMxM2EzNGEyMDM3ZmNjNmFhMTEwODQwYzBiMjU5NGI1YTIwMzgwYjY0YTE2NjY0YTA4ODExZjg0ODIyOGY2ODdiMjBhYTExMDg0MGMwYjY1OTJiNWEyMDM4MGQxMGY4NGIxMjA4NGQyMmQyY2IwYmFhMGI4MWI0YWFkYzg0YTkyMWEwM2MwYmJjMGIwYjBmNDE3NjkxNzc3ZTkxNGUyMWEyMGUwZWU5MGYwZWUxMWU3MmIwODNjZTkwYzEyOTI0YWFkMWRmMGYyMWEyNDBjODljMGZmMTFmNzJiMDI4NmZhZmYwYzAyMWRmMDAwMDAzNjQxMDAzMmExZDg0MTBmODQzMDMyYzFiMjI0MmMzYWJiODIxYjM2Y2NiOGExMTA4NDBjMGJlNThiYjViMjI0MmMzYWJiODEyMTg0MGMwOTgyMjg0YzkyNWIzNmUwMDgwMGIyMjQyYzNjZGQzYWJiOGM0YWMyMGJhZGQ3MWMwNDJjMmVlMjRiYWQ4MTEyODQ4MjI4NGRhZDAyZTAwODAwMWRmMDAwMDAzNjYxMDAzMTA3ODQ4OGYzYWQwMmUwMDgwMDJhNGE5MjA0MGFjYzY5YTExMDg0MGMwYmE1ODZiNWMyYTFkOGIyMDQwODUxMGY4NGMwYmJjMTkyMjUyY2JhOTk5MjA5MDQxYzFkMzdlOTc3ZDBkOTEwMjZiZDcxNTIxMjAyYWQwMjg4OTMwYzRiZTAwODAwMzIwMjBhYTIwNDA4MmEzM2NiMzNhNThiZmZhMjQzMDBhMGE4NDFhMjQzMDE5MjAyMGE1MDg4NDEyYTk5NTI0OTBlODI0OTBmOTIwNDBhYzJhMGNmMjYyOTAxY2NlOWQyMDIwYTJhZGRlMjBkMGQyYzBiYzBjZTEwMDYwMzAwZDIwMjBhMmFkZGUyMGQwZDFjMGJjMGNlMTBiMGVjMjBlMjRkMGRhMjA0MDhlNTg2ZmY4MTIyODRiZDBhODg3OGFkMDJlMDA4MDAxZGYwODEyMTg0ODIyODRjZTAwODAwM2NkNmQxMTI4NGFjMmEwYzZiY2QwMTYyNDEwMDgyMmQ4ZmEyMDQwOGUwMDgwMDkyMjUyY2EyMDQwOGIyYTFkOGIwYWFjMWFhOTk2MjQ5YWQ4NjA1MDA5MjI1MmNhMjA0MDhiMmExZDhiMGJhYzFiYTk5NjI0OWFkODIyZDRkZTAwODAwODg4MzkyMDViOGExMjM4NDFiOTk5MjRhMzhhZDAyZTAwODAwMWRmMDM2ODEwMDBjNGFiZDAyNjExMjg0NzEwZjg0NTJhMWQ4NTA1MmMxNDIyNzJjODIyNjhkNWE0NGUwMDgwMDBiOGExNjk4MTQ5MTE4ODQ5YTk1OTIwOTgwMjYxOTQ1YTIwNDA0YjIwNzE4MjdlYTNjMDc2YjM5YWQwMWIyMDMwYTBjOGMzYWJiZGJiYmE1MGIwMjhiYTFiMjAzMGEwYzJjM2FiYmIyY2IxNWE1MGEwMmFkMDJiZDAxODIyNjZhOGJjMWUwMDgwMDBjYjk5NzlhMTdhZDAyODIyNjRjMGM2YmUwMDgwMDFkZjBhZDAyODIyNjRjMGM2YmUwMDgwMDFkZjA5MmNhZmMxNjY5MGU4YzZhYTExMDg0MGMwYmE1NmViNTgxMDc4NDBjZGE4ODc4MWMxYmUwMDgwMDVkMGExNmJhMGM3MTI0ODQwY2NiYTIwNDA0MGMwOTk5NTQ5OTY0YjBhYTIwYTI0NDA0ODg1Nzk5NzRlMDA4MDA4ODU3YTk0MWUwMDgwMDg4NTdhOTUxZTAwODAwMGM4Y2QyYTBkNmE5NjFiMjAzMGFkYWE0M2FiYmIyY2IxNzY1MDIwMmIyYzExMDBjOGNhMmEwZGVhYWE0NjUwMTAyMGM0Y2IyMDMwYWEyYTBjZWFhYTQzYWJiYjJjYjFmNjUwMDAyYjJjMTE4MGM0Y2EyYTBkMmFhYTRhNWZmMDEwYzA5MGM0Yjc2YWIxNTkwYjRjMDlhZDRhMjBkY2VjMjBiZDUyYjk5YzI0ZGNlYTI0YmQ1OTA5MDc0YjJjMTEwZDIwNTBhZjJhMGNmNWFkZGMyMGQwZDNjMGVmMGNjMTBlMGNjMjBjMjRkMGQwYzhjYTIwNTBhMGM0ZDVhYWFkMjRhMTAzMmNhMTBhMmNhMTFlNWZhMDE5YmEzYjJjMTE4MGM0YzI1ZmEwMWFkMDJiZDA1ODIyNjUyMGMwY2UwMDgwMDFkZjAxZGYwMDAzNjQxMDA5MmExZDhkMTBmODQ5MDkyYzFkMjJkMmNhMTE4ODQ5YWRkYzIwZDA0YWFhOTI3NmMxYWEyMGE4MDljNGFhZDAyODExYTg0MGM4OTkwOWMyMDkyNGQwNDg4MzhiZDAzZTAwODAwMWRmMDgxMTI4NGFkMDI4MjI4NGMwYzZiZTAwODAwMWRmMDAwMDAzNjQxMDAwYzVhNTExMjg0MzEwZjg0NjJhMWQ4NjA2MmMxMzIyMzJjODIyNThkNmEzM2JkMDNlMDA4MDAwYjhhMTZkODA4OTIwMzA0Mjc2OTBjNjY1NDE1YTExODg0YWFhNmEyMGE4MGNjYWFhZDAyODIyNTRjMGM2YmUwMDgwMDFkZjA5MjAzMDM2NjE5MDIyNjU0MDg1NmM5MDQ5MmM0ZmE1NjE5MGE4MTA3ODQwY2RhODg3ODBjNWJlMDA4MDBiZDBhMTZiYTA0YWQwMjgyMGIwYTNjMDliYTg4ZjIwODBkYzJhMGNmYzBmZjEwOTBmZjIwZjI0ODBkZTIwYjBhMGM2ZGJhZWVkMjRlMTA5MjAzMDQwYzNjYzA5OTIwOTI0MzA0ODIyNTUyYzExOTg0ZTAwODAwNjY2NDEyOTIwMzA0NDc2OTBlYWQwMjgyMjU3YTBjMGJlMDA4MDA0NjAzMDAxZGYwYWQwMjBjMGI4MjI1NzkwYzFjZTAwODAwYWQwMjBjM2JlMTI1ODQ5MjEzMDNjMjAzMDRkMmEwZTNkMGNjMTBlMDk5MTBjMjQzMDQ4MjI1OTE5MjUzMDNlMDA4MDBmMjAzMDQyNjNmMDdhMTEwODQwYzBiMjU0ZGI1ODgyNWFkMDJlMDA4MDAxZGYwMzY2MTAwODIxMjAzOTJhMmJlOTc5ODJkMzEwNzg0ODhmM2FkMDJlMDA4MDBjMmExZDg2MTBmODQyYTRhZTIwNDA4YjIyNjJjYzBjZWMxY2FiYjkyMGIwMTBjZGFhNzE5MTQ4ODgzYWQwMmUwMDgwMDFkZjA4MTFhODQ4ODQ4YWQwMmUwMDgwMDFkZjA5MjA2ZDRhMmEwZmZhNzE5MTBhZDAyOTIxNjZkODg4MzFiOTk5MjU2NmRlMDA4MDAxZGYwNTExMjg0YTIwYjA0M2NkNzA3NmEzMGFkMGViZDAyODIyNTUwYzIwNDBhZTAwODAwZTIwNDA4ZGNkYTkyMjYyY2EyYTFkOGEwYWVjMWFhOTk3MjQ5YWQ4MjI1NGRhZDBlZTAwODAwODg4M2FkMDJlMDA4MDAxZGYwYWQwZTBjMGIwYzBjZDIwNDBiODIyNTFhMDBkZDIzZTAwODAwZTIwNDBhYTIyNjJjNjYzZTA5ODIyNTRhYWQwMmUwMDgwMDFkZjBiMjA0MDhjMmExZDhjMGJiYzFiYWFhYTIwYTA0MWM0OWE3MDkyZTBjNmJjZDAxODIyNThmNzI0MTAwYTIwNDA4ZTAwODAwZGMyYWEyMjYyY2IyMDQwOGMyYTFkOGMwYmJjMTkyMDEwMGJhYWE5MjRhYWQ4ODgzYWQwMmUwMDgwMDFkZjA4MjI1NDlhZDAyZTAwODAwMWRmMDAwMDAwMDM2NDEwMGFkMDI1MTEyODQ0MTBmODQ3MmExZDg3MDcyYzEzMjI0MmM4MjI1M2M3YTMzZTAwODAwYWQwMjgyMjUzMTBjMGJlMDA4MDA4MjI1MzJhZDAyZTAwODAwOTg4MzQxMDc4NDljYjk2MmMzMjA4MjI0MTVhZDA2ZTAwODAwODg4NGUwMDgwMGEyMDNhZTk4ODMwYmFhYTI0M2FlNTY1OWZlYjhhMzYyYzMyODljZWI4MjI0MTVhZDA2ZTAwODAwODg4NGUwMDgwMDkyMDNhZWE4YTMwYjk5OTA5MDc0OTI0M2FlNTYyYWZlODYwMDAwOTIwM2FlNjEwZjg0OGM2OWExMTA4NDBjMGIyNTMzYjU4MjI1NTRhZDAyZTAwODAwYTIyMzI5OGMzYTg4ODRlMDA4MDBhMjIzMjg4YzNhODg4NGUwMDgwMGFkMDI4MjI1OTIwYzFiZTAwODAwOGNlYWFkMDJiMjI2MmM4MjI1NzI3YWJiYjIwYmFkZTAwODAwYWQwMjgyMjU5MjBjM2JlMDA4MDBhYzFhYjIyNjJjN2FiYjkyMGIwNGIyMGJhZDQ3NjkwYTgyMjU3YWFkMDJlMDA4MDA0NjAyMDBhZDAyODIyNTc5MGMwY2UwMDgwMGFkMDI4MjI1OTIwYzRiZTAwODAwOWMwYWFkMDIwYzBjYjIyNjJjODIyNTU1N2FiYmIyMGJhZGUwMDgwMGFkMDI4MjI1OTIwYzViZTAwODAwOWMwYWFkMDIwYzFjYjIyNjJjODIyNTc2N2FiYmIyMGJhZGUwMDgwMDgxMjY4NDgyMjg5NWFkMDJlMDA4MDBhZDAyMGMwYmMyMjYyYzgyMjUxNjdhY2NjMjBjYWRlMDA4MDA4MjI1MTlhZDAyZTAwODAwMWRmMDAwMzY0MTAwMzEwZjg0NjExMTg0ODIwMzUwNzExMjg0MjA4OGMwNTY3ODFiYTIwMzRjNDJjMzUwMDdlYTBmODIyNzM0YWQwMmUwMDgwMDgyMjYyZmUwMDgwMDFkZjBjMTI0ODQ1MmEwZmJiODEzOTJhMGZkYjBkNDA0MTZiZDE2MGMyYmEwZTEwNDE2NmUxYTkwYWExMGYyMDM3MjBjMThmMGYxNzRmMjQzNzJmMGY4ODNmMjQzNzI4ODNjYTI0MzRjZTAwODAwYjIwMzcyNjViMDAxOTIwMzRjYTI0MzcxNTA5OTEwOTI0MzRjN2NmYTcxMjA4NGMxMWE4NGIxMWQ4NDUxMjc4NGQyMGIzNGUyMDM1MDAwZGQyMzI3OWUyNmU2MWQwY2ExMTA4NDBjMGJlNTFjYjVjMTFhODQ3Y2ZhZjgwY2U4MTdmMGVlYzA1MGVlMTBmNmRlMDIwNjQ2MDBhOTBjNWMwYzQ2MDkwMGU2MWQwY2ExMTA4NDBjMGI2NTFhYjVjMTFhODQ3Y2ZhOTgxYzg4MTc5MDg4YzA1MDg4MTBiNmU4MDZhOTFjNWMwYzQ2MDAwMDJjYWMwY2JhODIyNjQxYmQwMmUwMDgwMGEyMTQwNmM4MTdkMjE0MDNjMGIxZTRkMGJiYzBiMGIwZTRhN2JiMmY4MTI2ODRiMDlhYzA4MjI4ZmM5MjU0MDZlMDA4MDA5MmExMThhNzg5MDI4NjI1MDBhMTI4ODRhMjBhYjgxNmRhMDgwYzFhYjJhMGZmODIyNjQxMWM5Y2UwMDgwMDFkZjA5MTFkODQ5MjA5MzQwMDk5MjNlNjE5MDlhMTEwODQwYzBiYTUxMmI1YzgxN2I4MjRkMjE0MDJiMGJjYzA1MGJiMTBkN2JiMTBiMGFkYzA4MjI2MmViMTI5ODQxYmFhYjBhYTEwZTAwODAwOTIwNDAxN2NmYWE5MjRmMDk5MTE5MDkwNzQ5MjQ0MDFiNjU5MDYwYzE5MGMxYmIyNDQwMTY2MTkxZmQyMTQwMmMyMTQwMWQ3OWMxNmUyMDM2MDI3OWUxMGEyMDM0YzA3NmEwYTQ3NmEwNzgyMjYyZWFkMGRlMDA4MDA4MTEyODRhZDAyODIyODMxMGMwYmUwMDgwMDFkZjA1NzZiNWMwYzRiMjc2YTQwOTIwMzcyOTBiNzA0NTZhYjBkZjA5OTExOTI0MzcyNTBhYTEwODYwYjAwMmNiYzg2YzNmZjQyYzM2MDgyMjczM2FkMDJlMDA4MDA5MjAzNGM0N2U5NDA4MjI3MzRhZDAyZTAwODAwODIyNjJmZTAwODAwMWRmMGIwYWEyMDg2OTlmZmIwYWEyMDg4M2NhMjQzNGNlMDA4MDBiMjAzNzJhNTk2MDE1MmEwZmQ0Njk3ZmZiMDkzMDQxNjM5ZTY5MjAzNzExNmQ5ZTUwYmE5YTI0MzcxNDY5NWZmYjgxM2IwYjYwNDE2ZGJlNDkxMmE4NGMwMjAwMGMyMjMyY2EyMjk5M2IyYTFkOGIwYjJjMWEwYTUwNWJhY2NhMjRjMzhjMDIwMDA4MjIzMmNhMjI5OTRiYTg4YTI0ODM5ZjIyMzJjYTBlODQxYmFmZmUyNGYzYWQyMjMyY2EwYzBmNWJhZGRjMjRkM2JjMjIzMmNhMGE4NzViYWNjYTI0YzNjYzAyMDAwYTIyMzJjOTIyOTk1YmFhYTkyNGEzZGEyMjMyYzkwOTg0MWJhYWE5MjRhM2U4MjI3NDNlMDA4MDA4MjI2MmZlMDA4MDAxZGYwOTJhMGZmNDZjOGZmMDAwMDAwMzY0MTAwNTEyMDg0ODEwZjg0YTExZDg0ODIwODUwNDExYTg0Mjc5ODFjOTgwNDY2MDkzMWIyMGEzNDAwYmIyM2U2MWIwN2ExMTA4NDBjMGJhNWY5YjRjODE1YzkwNDQ2MDYwMGQ4MTRlMjBhMzQ2NjBkMTEwMGVlMjNlNjFlMDdhMTEwODQwYzBiZTVmN2I0ZjgxNWY5MTRhZDAyODg1NGJkMDNlMDA4MDAyZDBhMWRmMDAwMDAwMDM2NDEwMGFkMDI4MTFhODQ3Y2Y5OTkwODg4NjhiZDAzZTAwODAwMmQwYTFkZjAwMDM2NDEwMGFkMDI4MTFhODQ3Y2Y5OTkxODg4NzhiZDAzZTAwODAwMmQwYTFkZjAwMDM2NDEwMDUxMmM4NDQxMmQ4NDcxMWE4NGQxMzI4NGIxMzQ4NGMxMzM4NGYxMzA4NDMxMmU4NGExMzU4NGUxMzE4NDgxMmI4NDIxMmY4NDIyNjg0YWUyNjhjZmEyNjg5MzMyNjg2MWYyNjhkMGMyNjhiYjYyMjg5ZDkyMjg4YmIyNjhhNmQyNjhiZGIxMWE4NGQxM2M4NDk5Mjc2OTM3NDI2ODlkNTI2ODhiMGMwNDUxMGI4NDYxMzg4NDkxMzY4NDkyNjg4OTYyNjg5ZTcxMzc4NDcyNjg5YzYxMzk4NDcyMTUwNzU4NTU2ODA2NTA5NGIwODgxOTFiNDQ2Nzk4M2I4OTRiYTEzYTg0YTkxOTgxM2U4NDMxMWE4NGYxMTI4NGMxM2I4NGIxM2Q4NGIyNmM2MmUyMmM2MTIyMmYxZWEyMmYyMGE5NzM4MjZmMjAyOTYzZTk1M2QyNmM2MWUxM2Y4NGUyNmYxZWMxNDA4NGMyNmY0ZTFkZjA0MDQwNzQ0N2I3YjM0NmYwZmYwMDAwMDAzNjQxMDA4MTQxODQ5MmExZDg5MDkyYzEzMTQyODQ5YTI4OTIyMjdmMzBhOTEwZDc2OTEwZTc2OTBkYTE0Mzg0MGMwYmU1ZTRiNDkyMjI3ZjMwYTkxMGNjMWEwNzc5MDMwYzEyMWRmMDBjMDIxZGYwMzY4MTAwMjkwMTM5MTE0OTIxNTkzMTY5NDE3OTUxMWRmMDAwMDAwMDM2NDEwMDIxNDQ4NGE4MDI5MjJhMzJjY2I5YTE0Mzg0MGMwYjI1ZTFiNGE4MDI5MjJhMzI2NjE5MTk5MTQ1ODQ4MjA5NTUwYzAyOWMwOGIyMmEzY2MyMjk4MTA3ZWIwODY2MmMwNTBjMTIxZGYwMGMwMjFkZjAwMDM2NDEwMGExNDY4NGMwMjAwMDkyMmE4NWIyYTQwMGIwOTkyMGMwMjAwMDgxNDc4NDgyMjg5MTkyNmE4NWUwMDgwMDgxMjE4NDgyMjg0Y2UwMDgwMGJjMGFhMTQ4ODRjMDIwMDBkMTQ5ODRjMjJhYThkMGNjMTBjMDIwMDBjMjZhYThjMDIwMDBiMTRhODQ5MjJhODBiMDk5MjBjMDIwMDA4MTI2ODQ5MjZhODA4MjI4MWMwYzFhZTAwODAwNjVmNmZmZGNmYWUxNGI4NDIxNDQ4NGU4MWU5ODAyYWMwZTkyMjkzMmNjYjlhMTQzODQwYzBiZTVkNmI0OTgwMjkyMjkzMjY2MTkwYzgxMTE4NDBjMWE4MjI4MTIwYzFiZTAwODAwMWRmMDAwMzY4MTAwNjJhMGZmZjE0ZDg0NzE0Yzg0YWQwMmNkMDMyMTI2ODRjOTExNTJkN2Y5NDJjZmMwYjIwNDMxMzJkNzAxNjA4YmMwMTY3ODEzODIwNDJkYTkwMTA3ZTgxN2YyMjc2ZGYwZGFjMGYxNGU4NGUyMTdkY2YwZGQxMGYwZGQxMWU3YWQwMmM2NDUwMDgxNGY4NGEyYTFkOGEwYWJjMWMxNTA4NDhhOGE4MjA4OWJjYWNhMTY1ODBkYzIyYzhjZDExZDg0NjYwYzA0MGMwYzQ2MWYwMGQyMGQzNGI5MjEwMGRkMjNlNjFkMDdhMTQzODQwYzBiYTVjZGI0ZTgyMTY3OWUwN2ExNDM4NDBjMGJhNWNjYjRmMTFlODQ4ODIxOTJhMWQ4OTA4OGMxOGFmZmY5MzFmMjBmN2ZjYzZmYTE0Mzg0MGMwYmU1Y2FiNGE4MzFhMjBhODBiNjRhMWE2NjRhMGFjMTFmODRiODIxYzIyY2Y2YzdiYjBjYTE0Mzg0MGMwYjI1YzliNGE4MzFhMjBhODBlMTUxODRiMjA0MzE1MGNhYTBhMmExZDhhMGFiYzFjODFjZWFlYWUyMmUyZWQxMjc4NGUwY2NjMGQwY2MxMGQyMTU0N2Q3M2M0M2UyMDU4YmJjZGU5MTUyODQ5YWZhZjIwZjRjNGQwYjE2N2YxZjYxMDc4NDMyYTFkODMwM2JjMTgxNTM4NDlhNTM4YTMzODIyNjE1YTgzM2UwMDgwMDgyMjI1NmJkMGE5MjAzZjBhZDA0MGI5OTkyNDNmMGUwMDgwMGEyMDU0YzU2ZmFmZDFkZjBjMjA0MzM2NzljMDRjZDBiYjI0NDMzYjE0ZDg0ZDJhMWQ4ZDBkY2MxZGFiYmIyMGI1MzAwYmIyM2U2MWIwMjA2N2QwMGFkMGM4MjIyNmQwYzRiZTAwODAwYzIwNDMwMGMwZDYwOWNjMDE2MDkyNzkxNGQ4NGEyYTFkOGEwYWNjMTlhOWFiMjA5M2IyZDBjZGNlYmMyMDk1MzAwY2MyM2U2MWMwOGUyMDk1MjAwZWUyM2E2MWUwZDg4MTVmMjI5NmU4MDgxNDE4MGZmYzAxNjRmMmY2NjFiMDVjMjE5ZTIxNmJjMmUwYzBiZTE1NDg0OTJhMWQ4OTA5MmMxZWFlOWUyMGU4YWExNTU4NDE2NGUwNWUxNDg4NGMwMjAwMGUyMmU0MmFhYzllMGUwMzQyNjhlMmU5MjBjMzM5Y2U5ZjIwNWI5OWNlZmM5NDFiOTYxNjYxOTE4ODE1Njg0ODIyODhlYWQwMmUwMDgwMGI4NjFjODQxMGMwZDU2NWEyZTBjMWE4NjAxMDAwYzBhNDYwMDAwMGMwYWEwOTA3NGUyMGM0YjBjMWEwMGVlMjNlNjFlMDhhZDA5YzYwMDAwYWFjOTBjMGE4MjE3ZGUwMDEyNDAwYzFmMDBlZmExZTA4ODIwODI1MzVlODIwYzRiOTEyODg0MDA4ODIzZTYxODAyYzY3YzAwOTIwOWI1Mjc5OTA3ZjgxMWYwZjkwNDE2OGYwYjgyMGM1NTE2MjgwYjkyMDQzYTljYjlmODE1ODIxY2U0ZjBmMWU0ODBmZmMwODIxNTJkZjBmMGU0ODdiZjA4ODIxN2RmZTA4ODIwODI1MzVmMGMwZTQ2MDAwMDBjMGVjYzNiOTIwNDNiOWNhOWY4MTVjMjA0M2FmMGYxZTRkYzVjOTIxN2UxODIwNTc3OTA5ZmMwOTA5MGU0OTczODA3MDYwNTAwZjgxNWYwZjFlNDljNWE5MjE3ZTEwY2E4OTA5ZmMwOTA5MGU0OTczODA4YjI0NDNiYzIwNDMwODYwNzAwYzIwNDMwY2NmZWUyYTFkOGUwZWNjMWMxNTE4NGVhY2NjMjBjNzVjMjQ0MzBmMjUzNjFkMjQ0M2FkMjQ0M2I2MGZjYzAxNjNmMTAxYzllNjcxYzFjMGNhYTBjMGI5MTI4ODQ4MTExODRjMjQ5N2Y4MjI4MzBlMjQ5N2VlMDA4MDAwYzFhYTI0NDJjMWRmMDFkZjBmMjBjNGEwMGZmMjNhNjFmMDIwNmQwZmY5MjA1Yjc4MjA1NzI5N2I4MDIwNmNkZmZmMjBjMzMwYmZmNTZjZmYyOTIwNTczODIxY2RlOTdiODAyMDZjOGZmYTk1MWYyMmM3MWI5NjFmMmNmZjU1NjNmZjE4MTI2ODQ4MjI4NzRhZDAyZTAwODAwYjg2MWE4NTEwYzBkMGMxZTg2YzlmZmIyMDQyZDA3ZWI0MDkyMTdkY2EyMTUyOGYwOTkxMTkwOTBmNDkyNTM1Y2E3MzkxMzgxMjQ4NDg4MzhhMjUzNWNlMDA4MDBhMDkwMTRiMjA0MmQ0NjAwMDAwYzA5YzIwNDMzZDE0ZTg0YTgwMTBjMWVlMGViMjBlMjQ0MmQ5MGFhYzBkMGFhMTBhMjY3NmQyZDBjNjc5YzAyYzZkN2ZmMGMwYjgxMTE4NGExMjg4NDVjMDljMjRhN2Y5MjRhN2U4MjI4MzAwY2FhZTAwODAwYzJhMWQ4YjE1NDg0YzBjMmMxY2FiYjBjMWNiMjBiNzZiMjQ0MzNjMjQ0MmM2MGJiYzA1NmJiZjJkMjA0MmRlMmEwZmVlMGRkMTBkMjQ0MmQxZGYwZDI0NDNhZDI0NDNiYjgxNWMyMDQyZWMyNDQzMGIwYjFlNGIyNTM2MTY3MWM3YmUxNGY4NGEyYTFkOGEwYWNjMWVhZWFlMjBlNjQxNjVlMGJlMjA1OGIxNjRlMGI4MjA1OTJmMjA1Yjc4NzNmMDIwNjI1MDA5MTUwODQ5YTlhOTIwOTdmMDA5OTIzMTY2OTA4MGMxOWM2MTEwMDgyMDU3M2YyMWNkZTg3YmYwMjg2OGVmZmYyMTdkZmUwZmYyMGYyNTM1ZjkyMGMzMzY2MTk3MDgyMGM0YTAwODgyM2U2MTg2N2E5NTFiOTYxOTIyYzcxMGNiZWU3OTk1YjgxMjY4NDgyMjg3NGFkMDJlMDA4MDBiODYxYTg1MTBjMGQwYzFlODY4MGZmMGMwOWRjNTk5MjE3ZGVhMjE3ZGY5MGFhMTBhNzk5NDRkMjUzNWZiMjUzNjA1YzBlNDYwMDAwMWM5ZWQyNTM1ZWM2OTFmZmRjYWJjMTUxODRiMjA0M2JjYWFhOTIwYTg3YmNhYmZjODlkMjQ0M2IwYzBiMDYzZmZmMGMwOTA2ZjBmZjBjMWI4NjNjZmYwYzBlYzY2ZGZmMGMwOTQ2ZWNmZjBjMDkwNmViZmZmMjE3ZTBlMmEwNzhmMGZiYzBmMGYwZTRmNzNlYWUxYzllYzZlY2ZmMGMwYTA2NDhmZjBjMWIxYjg5ODI0YTg3MDYzMGZmMDAwMDM2NDEwMDgxMWQ4NDQxMjY4NDgyMDgyYmIxNDg4NDE2ZDgwNGM4ODE5MTU3ODRjNzdjNDdjMDIwMDBkMjJiNDBkN2ZkM2NkN2ZjMzlhZDA2MjBjNTk0MzBkMzM0MGMwYjBjMGU4MjI0ZDQwYzBmZTAwODAwMWRmMDBjOTk5Nzk3MWVjMDIwMDBhMjJiNDBkN2ZhMTVkN2ZjMTJhZDA2MzBkMzM0MGMwYjBjMGMwYzFlODIyNGQ0MGMwZmUwMDgwMDFkZjBjMDIwMDBhMjJiNDBjNzdhZDBjMDIwMDA5MjZiNDBjMDIwMDBkMjJiNDBkN2ZkZTVkN2ZjZTJhZDA2MjBjNTk0MzBkMzM0MGMwYjBjMGU4MjI0ZDQwYzBmZTAwODAwMWRmMDAwMzY0MTAwODExZDg0OTE1Nzg0ODIwODJiYTE0ODg0YmMwOGMwMjAwMGIyMmE0MGM3N2IyOGMwMjAwMDkyNmE0MGMwMjAwMGMyMmE0MGQ3ZmMxOWQ3ZjcxNmFkMDYyMGM1OTQzMGQzMzQwYzBiODEyNjg0MGMwZTgyMjhkNDBjMGZlMDA4MDAxZGYwMDAwMDAwMzY2MTAwNDEyNjg0ODExZDg0MGMwYzgyMDgyYmM5MDFiYzc4MGM5OTk3OTMyYmFkMDIwYzFiZDE0Njg0YzAyMDAwOTIyZDljOTA5NDA1YzA5OTExYzAyMDAwMGMxZTBjMGZkMjJkOWM4MjI0ZDRkMGQwMzU5MGRkMjBlMDA4MDBjNjAxMDA4MjI0ZGFhZDAyZTAwODAwYTJhMDYwODIyNGQxYmQwMWUwMDgwMDkxNTc4NGExNDg4NGMwMjAwMDkyNmE0MDFkZjAzNjQxMDE1MTIwODQyMjYxMTY3Y2ZiNDJhMGZmNDI0MTEwYjk1MTIxMTE4NGE4MTU4MjIyNDZhMGExNDFlMDA4MDAxYzBmNzE1ODg0MGMwNjYyNTcxNDYyNDcyYTMyMDczNmUyMDczN2U5ZTFmMjQ3MzYzOWMxZDE0ODg0YTE0Njg0MzJjNzgwYzAyMDAwZDIyZDQyZDk2MWMwMjAwMGMyMmE5ZWM5NzFjMDIwMDBiMjJhOWZiOTgxYzAyMDAwYTIyYTk1YTBhNzY0YTI0MTI0OTE1OTg0YzAyMDAwODEyMTg0OTIyOTgxODIyODRjOTI0MTI1ZTAwODAwMGM5ZGIxNWE4NGMxNWI4NDE2MGEwNTkyMDNiNGQ3OTk0YWQyMDNiNTQ3MWQ0NDIyYTFkODIwMmRjMTgxNWM4NGNhYTJhMjBhOTA4YTg1YTBhYWIwYjBhYWEwYTIxYTA2OGEyMjM3NmEyNjgyMDNhYzBjZjk5Nzk4MWVhODcxYjdlYTE5ODE1ZDg0ODg2ODFjNGFlMDA4MDBhMjAyMjk4MTQ3ODQwYzBiODIyOGExMGMxY2UwMDgwMDgxNDE4NDkyYTFkOGYxNWU4NGEyMDM4ZmEyNjExMGYwZmFiMDIyMGY4MWYyMGY3ZmYyNjExNzkwOTJjMWVkMDI5YTg4OTE0Mjg0ODIyODdmNDBhMmMwOTA4ODEwMGMwOWEwODk4MzgyNjExMTkyMjExNmEyYzExOGQ4M2FjODJhYjgxYWE4MGE5OTAxMjVkYWZmYzE2MDg0YjIyMTE2OTE1Zjg0ODIyMTE3OTIyOTcwODA4ODkwYzBiYjEwZTBhODExYTlmMTkwODhhMDg4MThhZDAyZTAwODAwZWQwMmYyMjExNmQyYzExOGE4MGRiODFkYzgyZGQ4M2RlNWRmZmZlMTYyODRiMTYxODRjMjAzYWNiMjBiOTBjOTYxNDcxYjY3YzgxNWQyMjExN2MwYzE0MTY2MmQyMmQyMjExMGM5MGVlMTVlODRlMGRkYjBkMjBkODAxYzdlZTc5ZDQ5ODExMTg0MGMyYTgyMjg0MTFjZWNlMDA4MDA0NjBlMDA5ODBlYTE0ZTg0OTA5Y2MwYTA5OTEwZjA5OTExYjY4OTI4ODExMTg0MGMyYTgyMjg0MTFjN2NlMDA4MDBjMTYyODRiODE1YzgwY2IwYjE0MWMwYmJjMGMxNGU4NGExNjM4NGMwYmIxMGYwYmIxMTY1NzJmZjkxNjQ4NGUxNjU4NGMyMDM4ZmQyZGUwOGI2OGMwMjA2MTAwMTgxMTE4NDgyMjgyZGEyMjExMGUwMDgwMDkxNjY4NDkyMDk5NThjNjlhMTQzODQwYzBiZTU1MmI0YTIwNWMxOGM2YWExNDM4NDBjMGIyNTUyYjQ0MjQ3MGYyMjQ3MzU2OTY3NjI0NzMwYjE2Nzg0YzIyMTE3YjIwYjJjYzI0NzM0ZWMwYmQxNjc4NGQyMGQyZjQ3OWQwOGUxNjc4NGUyMGUzMjQ3MWUwZmI4NzE4MTI2ODRhODE1ODIyODZjYTBhMTQxZTAwODAwOTE2Njg0OTIwOTk0NDcxOTEzYTJjMTEwODExMTg0YjJjMTE0ODIyODgyMGMwY2UwMDgwMDQ2MDAwMDdjZmFlZDBhYTI2MTFiYTI2MTE0YjIwNWMwYzg1MWQyMDExMGQyNjExNWMyNjExMmIwZjAwNDA3NmIyNDgxMTE4NGEyYzExMDgyMjg1NmIyYzExNGUwMDgwMGNkMGFlMjIxMWI2MjAxMTBmMjA1YzA5ODUxOTI2MTEzZjBmMDA0NDYwMjAwNjJhMGZmN2NmYzdjZjg4MjYxMTNlN2JjMGNjOTk3NjI0NzMxOTIyMTEzOTk4NzA2MDMwMGU5OTdhMjIxMTJiMjIxMTViMjQ3MzFhOTg3YjExODg0YWNiZmVjOWNmMmNlZmU1NmNmMzVmMjIxMTVkMmExZDhkMGZmYzFkYmViZWFlZjgyMWVjNjBiODgxNjY4NDM5MjFlYzQyYzc4OTdiODAyYzYwYTAxOWQwZDg2MDAwMDkyYTFkODkwYTZjMWFhYWJhMjYxMThiMTBmODRmMjAzOGViMjBiZTlkMGVmMTE0NzFiNTQ4MTVhODRjOWExODA4ZmIwODIwOGYyMWM0ZDg3YmQ0NGEyYzExMDgxMTI4NGIyYzExNDgyMjgzYTBjMGNlMDA4MDBjOGExZGM2YTBjYmEwYzBiODExMTg0OTIwMTEwODIyODMwOTI0NzA3ZTAwODAwYzhhMTQ2MDQwMGIyMjU4OWI3YmEwYmE5OTdkODUxZTIwMTEwZTI0NzMxZDk4N2UyMDM4ZWQwZWUxMTkxNWU4NDlhZWU4MjBlN2ZmMTY4ODQyNjE4MDI0NjJlMDBhMjAzN2ZiMmExZDhiMGFhYzFhYWFmYTIwYTgxNTY4YTBhMjYwYzAyODYyODAwZDIyMTE0MTZjZDA5YzlhMWI2NmQwMjA2MjUwMGExNWI4NDkyMGU4MTgxMjY4NGIwYjljMTg4ZDhiYWFhYTIwYTkyZTAwODAwODEyNjg0YzE1YTg0YTliMWIyMDM4ZWExNWI4NGMwYmJiMGIyMGJmM2MyYTFkOGMwYmJjMTg4ZDhiYWFhYTIwYTk1ZTAwODAwYzhhMWYxNjg4NGI2MmEwNTkyMjExNGI2NDkyOGY2M2EyNWIxNWE4NGEyMDM4ZWIwYWFiMGEyMGFmM2U1NGJmZmM4YTFmMTY4ODRiYzJhZDhiMTlkMGRiNjJkMDVlMjIxMTRiNjRlMDJiNjM5MjNkMTY0ODQ5MTY5ODRhMjIxMTViMmExZDhiMGFhYzEwYzFiYWE5OWIyNGQxNjFjMGEwYzBiODhkOWIyNjExNGEwODgyMDg5ZDllMTY2ODRkMTZhODRlMjBlOTY5MjA1YzM2NjFlNDQyNjE5NDFjMjAzN2Y0NzljMDI0NjI1MDA4MTViODQ5MmExZDg5MDljYzE4YTg5ODIwODZhNTY0ODA4ZmFhOWEyMGE4MTY2MWE3Y2IxNjc4NGIyMGIzYjE2M2IwNzQyNDczMWMyZGQwMzBjMDk3Y2ZkOTI0YzE1OTI0YzE2ZDk5N2Q5ODcwNjFmMDAwYzJkNjYxOTdhMGI4ZTE2ZjgxZmMyMDM3ZjQwOWNjMDE2YzkxOWExNWI4NDkyYTFkODkwOWNjMWFhYTlhMjBhNmE1NmJhMThhMTY3ODRhMjBhM2IxNjJhMThmYTk5YjIwOTdmZjYzYjAyYzY1ZDAwZTIwNWNlYzBlZWMwMTZlZTE2MGMwZmYyNDk3ZjQyNDczMWIxNjU4NDBjMGE3Y2Y4ODk5Nzg5ODdhMjRiNDFhMjRiNDM0NjY1MDAwYzlhMGMwYjgxMTE4NDkyMjExNTgyMjgzMDkyNDM3N2UwMDgwMDBjMDljMTY0ODQwYzFhYTI0YzE1OTI0YzE2OTI0YzE2MjI2MTFjMjIwMzhlYjZhMjBhYTE0Mzg0MGMwYmU1MjBiNDIyMDM4ZWIyMjU4OTgxNWU4NDIyNDcwZjgwODJiMDkyMDg3ZTkyNDcwZWEyMDg4MTkxNWY4NDgyMDg3ZjgyNjExOTkyMjk3MDgwODg5MDkwODhhMDg4MDhhMjYxMWFlMDA4MDA5MTFkODQ5MjA5MzQyZDBhMDA5OTIzZTYxOTA3YTE0Mzg0MGMwYjY1MWNiNGIxNjI4NGE4MTVhOTFiNDcxNjM1YzIyMTE4YjE2MTg0YzIwYzgwYjIwYjkwZWM2YzQ3MWIyNGMyMjExYWI3MWMxZTY3OWMxYmYxNmE4NGUxNmI4NGY4OWZlMjllOGQ4MTYxODRmN2JlMGE4MjA4OTg5MTZhODQxYjg4ODI0OTE4Y2M1MjBjMGEwYzFiZTUxN2I0OTIwMzhmNDc5OTAyYzZkNWZmYTIyMTFhYjIyMTE5YTU5ZGZmNDhjMWIyMjExN2QyMjExMWEyYzExODgxNDc4NDIyMjExYzgyMjhiZGNkMDJlMDA4MDA5MjAzYzQwNzY5MGQ4MTI2ODRhODE1ODIyODhkYTBhMTQxZTAwODAwYjIyNTg0MjYwYjE0ODE1Zjg0OThmMTgyMjg3MDlhODg4ODI4YWQwMmUwMDgwMDdjZjk5OTQ3MjZiNDE0OTE1Zjg0YThlMTkyMjk3MDQwODQ5MDkwODhhMDg4Mjg3Y2ZiZTAwODAwMWRmMDI2OGM2NDBjOWFhNzFjNjViMmNjZjY1NmNiYmI2MjRkMmM4NmVkZmU5MmExZDgwNjMxZmZmMTYxODRlMTZjODRmMjBmOThlMjllOThmN2FlMGFhMTZhODQwYzA4ODI0YTE4YzY5ZWZmMGM4YTBjMGI4MTExODQ5MjE1NjRjMjA1Y2VjMjQzNmZkMDk5MjA4MjI4MzA5MjU1NjRlMDA4MDAwYzA5YTE2NTg0MGMxYmIyNGE0MTkyNGE0M2UxNjU4NDBjMGRkMjRlNDM0NmEwZmY2MjRlNDEwNmQ3ZmU2MjQ5MTU4NmQ1ZmUwYmE5NTYwYWU3NTZkOGU2YzlhMWUxMTE4NGYxNjk4NGEyYTFkODgyMjExNWIxNjU4NDBjMDk5MjRiNDNhMDg4YzFhMTY0ODQ4YWZmZjlkMTkyNGExNmYyMGZkYWUyMmUzMDI2MWYwMjA2MjMwMDBjOGEwYzBiYzIxNTY0ZjIwNWNlZjI0MzZmZDBjYzIwYzI1NTY0ZTAwZTAwNjI0NzMxZDhhMWIxNjU4NDBjMWFjMjIxMTNjOTg3YTI0YjQxYThkMWQ5OTc5MjBhYmY4MjFhMTAxYjk5OTA5MDc0OTI0YWJmOTczODAyODY3ZmZmOThkMTkyMDliZTI2MjkwNTI2MTkwMjU2MDlkZmI4ZDEwYzBhYTI0YmRhODY3OWZmODJhMWQ4ODA4NmMxZDIwZTcyOGE4YjgyNjExODgyMDg3ZjgwZGRjMDE2Y2RiY2ExNjk4NGQxNjQ4NDBjMWJiMjRkMTZhYWFmMWMwYjBjMGQ5OGRhZDI2MTE0YjA5OTIwOTlkYTg2ZWJmZTBjOWEwYzBiZjIyMTE1ZjI0Mzc3ZTAwZTAwYzE2NDg0MGMxYjgyMjExMjkyMjExNWEyMjExNGE5OTc5MjQ3MzE4OTg3YjI0YzE1NDY2MmZmMDAwMDAwMzY2MTAwYTE2ZDg0YzIwMjAwZDIwMjAxZTIwMjAyZjIwMjAzYjE2Yjg0OTIwMjA0YjIxYjhmOTkwMTgyMDIwNTg5MTFhNTE0ZmZhZDAyOTEyMDg0YmQwMzk4MTk4MTYyODQ5MDkxNDE5OTA4ODgyOGNkMDRlMDA4MDAyZDBhMWRmMDAwMDAwMDM2NDEwMDgxMWQ4NDgyMDgzNDAwODgyM2U2MTgwN2ExNDM4NDBjMGJhNWY0YjNhMTZlODRjMTZhODRiZDAyZTg4Y2MyZGNkMmM4MWNkMTI3ODRlMGNjYzBkMGNjMTBkZDAzNjUwZmZmODE2Mjg0YWQwMjg4MzhiZDAzZTAwODAwMWRmMDAwMDAzNjQxMDA4MTYyODQ4ODQ4YWQwMmUwMDgwMDJkMGE5MmEwZmY5NzFhMGZiMTZmODRjMmExZDhjMGNhYzEwYzFhY2FiYmEyNGI4MDFkZjAwMDM2NDEwMDIxNzU4NGMxNzA4NDYxNzE4NDUxNjI4NDkxNzI4NDgxNzM4NDcxNWY4NDMxMjY4NDcyMjc3MGIyZDMwM2QyZDMwMjgyNjM2Y2EyZDMwNzgxNzQ4NDk5OWFlMjJkYjNlOTM1NjI2YjczZDIyZGI0OTJkMzA0ODI2OTEwZDkyNWMyNmI3NDY5ODc0MjIzZjI0OTQ1MjI2M2YyMWRmMDAwMDAwMDM2ODEwMDgyYTNlYjkyMDUwMTk5NDE4Nzk0MTVhZDA1ODE1Njg0YjJhM2YyODIyOGViMGMwY2UwMDgwMGRjYWEwY2MyMWRmMGFkMDJiZDAzY2QwNGRkMDU4MTc2ODRlZDA2ODgwOGZkMDdlMDA4MDAyZDBhMWRmMDBjMmFiZDAyMGMwOTgxNzc4NDk5MDY4MjI4MTRjMjAzMDNlMDA4MDBhMjIzMTJiMTc4ODRkN2VhN2ViMjFiMTFiMGIwMDQxNjdiMGE4MTU2ODQzYzNhODIyOGRjYmQwM2UwMDgwMDE2N2EwOTgxNTY4NDgyMjhkYjNjM2FlMDA4MDAxNjlhMDg4MTU2ODQzYzRhODIyOGRjYmQwM2UwMDgwMDE2OWEwNzgxNTY4NDgyMjhkYjNjNGFlMDA4MDAxNmJhMDY4MTU2ODQ0YzBhODIyOGRjYmQwM2UwMDgwMDE2YmEwNTgxNTY4NDgyMjhkYjRjMGFlMDA4MDAxNmRhMDRhZDAzMjBiMDc0ZWQwN2ZkMDQwYzFjODE3Nzg0NTkwMTgyMjhhZmRkMDZlMDA4MDAyODA2MWRmMDQxNzc4NDk4NDEyY2FhYTcxOTZjMmMzY2M3MTk2NzBjNWFhOTA2ZDIwMzAxMjYzZDY1ODIyNGQxYmQwM2UwMDgwMGNkMDJkZDAzMGMxYTgyMjQ1MWI4MDZlMDA4MDAwNjEwMDAwYzJhYmQwMmMxNzk4NDQxNzc4NDNiZDM4MjI0MWUwYzhlZTAwODAwODEyMjg0ODhkODFjNmFlMDA4MDBkMmEwOGNkYWQzOWMyYWFkMDJiZDAzZmQwN2MyYTA3MjgyMjQ3ZmVkMDZlMDA4MDBjNjAxMDA4MjI0ZTZhZDBkZTAwODAwMjgwNjFkZjAwYzAyMGMwOTk5MDYxZGYwODIyNDNlYWQwM2UwMDgwMDA2ZmFmZjAwMDAzNjQxMDAyMTdhODQzMTc3ODQ4MTc2ODQ0MjIzOGQ0OTA4MjI2MzhkMWRmMDAwMDAzNjQxMDA5MmEyMDBhMTdiODRjMDIwMDA4MTdjODQ4ODA4OTI2YTllZTAwODAwMWRmMDAwMDAwMDM2NDEwMDIxN2U4NDMxN2Q4NDgxN2M4NDQyMjMyNTQ5MDgyMjYzMjUxZGYwMDAwMDM2NDEwMDQxN2Y4NDg4MzQyMTgwODQwN2U4MDVjMDIwMDAzMjIyOWM4MTgxODQ4ODA4ZTAwODAwOTgzNDA3ZTkxN2MwMjAwMDMyNjI5Y2MwMjAwMGIxODI4NGEyMjI5NGIwYWEyMGMwMjAwMGEyNjI5NDFkZjAwMDM2NDEwMDIxODQ4NDMxODM4NDgxODE4NDQyMjMyMzQ5MDgyMjYzMjMxZGYwMDAwMDM2NDEwMDgxODU4NDg4Mjg5NzY4MDk4MTg2ODQ4ODA4YWQwMmUwMDgwMDFkZjAwMDM2NDEwMDIxODg4NDMxODc4NDgxODY4NDQ4MDM0OTA4MjkwMzFkZjAzNjQxMDAwYzBhZDE4OTg0ODJhMDBhYzIwMjA0YjIwMjAzODBjYzExYzBiYjgwYjBiMGY0YzE4YTg0NzZhODFlYTAyYTkwYTAyMjExY2FlMmUyMWU3ZmRhMjJiNzllMDkwMDNhMjM2NjAzMGQwYzIyMWRmMDFiYWFhMGEwNzQ3Y2YzODZmYmZmYjIwMjAxNjY0YjNkZTY3MzBkODEyNjg0YTIwMjAwODIyODQ1MGMxYmUwMDgwMGEyYTNmZTBjMGIwYzJjODE4Yjg0ZDIwMjAwODIyODExMGMyZWUwMDgwMGJkMDM0YmQyMGM0YTgxNzc4NGMxNzk4NDgyMjgxZTBjNGVlMDA4MDAwYzAyMWRmMDBjYzIxZGYwMzY4MTA0NzE4Yzg0NjEyMjg0MGMwZmYyNTEwMGUyMDIwYTgxOGQ4NDJhZWVmYjRlOTIwZTBkMzIwZTBjODA5OTExOWEzMzMwMzBmNDgwODNjMDE2NzgwYjgxOGU4NDkxOGY4NDgwODNjMDE2MzgwYzkwOTNjMDE2MjkwZGExOTA4NGIxOTE4NGEwYTNjMDE2M2EwZWI3MTMwZTgxOTI4NDg4MDhhZDAyZTAwODAwNWQwYWM2MjAwMGFkMDRiMmMxMTA4MjI2N2VjZDAxZTAwODAwNWQwYTcyYTA5MTBjMDk5MjYxODRhZDAzNTBiMDc0MGMwYzgxOGM4NGQyYzExMDgyMjg1MTBjMGVlMDA4MDBhZDA3NzE5Mzg0YjJjMTEwODIyNzQ5YzIxMTAwZTAwODAwOTIyMTg0YWM5OWVjNzVkMjExMDBhMTk0ODQ5Y2ZkYTBhM2MwMTZjYTBjYjE5NTg0YjBiM2MwMTZjYjA5YzE5Njg0YzBjM2MwMTZiYzBjZTE5Nzg0ZTBlM2MwMTYwZTBhZjE5ODg0Zjc5MzA1ODIyNzRiZTAwODAwODE4Yzg0ODIyODRhYWQwMmUwMDgwMDJkMDUxZGYwYjIwZTBlYWQwNGMyYzExMDgyMjY3Y2RkMDFlMDA4MDA3MmEwNjEwYzA1NDZkY2ZmYWQwNGIyYzExMDgyMjY3ZGNkMDFlMDA4MDA1ZDBhNzJhMDYyMDZkN2ZmYmQwNGMyYzExMGRkMDE4MjI2ODVhMjBlMGVlMDA4MDA1ZDBhNzJhMDkyMGMxOTkyNjE4NDA2ZDFmZmFkMDQyNWU0ZmYwYzBjZDJjMTEwMGMwZTRkMGE4MjI3NTFhZDAzNDBiMDc0ZTAwODAwODIyNzRhYWQwMmUwMDgwMDVkMDRjNmUyZmY5MjA0MDBjY2Y5YTIwNDA1YjJjMTEwODIyNjg4MGMzY2UwMDgwMDg2ZDdmZmQwYTA3NGIyYzExMDgyMjY4ODBjYmNlMDA4MDA0NmQzZmZkMGEwNzRiMmMxMTA4MjI2ODgwYzJjZTAwODAwMDZjZmZmZDBhMDc0YjJjMTEwODIyNjg4MGM1Y2UwMDgwMGM2Y2FmZjAwMDAwMDM2NDEwMDYxOGM4NDgyMjYzMTBjN2FlMDA4MDA3ZDBhODIyNjMxMGM3YWUwMDgwMDVkMGE4MjI2MzIwYzdhZTAwODAwOTE5OTg0NWFiNGJhYWE5MjE5NjEzYmFhYTBhMGY0YTdiOTA3YTE5YTg0MGMwYmE1YTBiMzdhNzQ4MTIyODQzYjc3ODg4ODcwYTBmNGUwMDgwMDVkMGFjYzhhYTE5YTg0MGMwYmU1OWViMzFkZjAxYjg0ZDIwYTBhOTJhMGZmYWFkZDIyNGQwZTkyNGQwYzgyNGQwZDhjNzNiZDAzY2QwNGZiYWQ2NTM1MDAyMTA3ODQ3MjU1MDI4OGQyMGM3YWUwMDgwMGJkMGE4ODkyYWQwNWUwMDgwMDgyMjY0MGFkMDVlMDA4MDAxZGYwMDAzNjQxMDA1MThjODQ4MjI1MzEwYzdhZTAwODAwOTE5Yjg0OTIyOWEyNGQwYTU2MjkwODgyMjUzMTBjN2FlMDA4MDA2ZDBhODIyNTMyMGM3YWUwMDgwMDkxOTk4NDMwYjA3NGJhYjY5MjE5NWZiYWFhMmJhYWEwYTBmNGE3YjkwN2ExOWE4NDBjMGI2NTk2YjM0YTQzODEyMjg0MmI0NDg4ODg0MGEwZjRlMDA4MDA2ZDBhY2M4YWExOWE4NDBjMGJhNTk0YjMxZGYwZDIwYTBhODJhMGZmYWFkZDgyNGQwYzMyNGQwZDhjNzJiZDAyY2QwM2ViYWRhNTJiMDAyMTA3ODQ0MjU2MDI4OGQyMGM3YWUwMDgwMGJkMGE4ODkyYWQwNmUwMDgwMDgyMjU0MGFkMDZlMDA4MDAxZGYwMDAwMDM2NDEwMDYxOGM4NDgyMjYzMTBjN2FlMDA4MDA4MTIyODQzYjRhODg4ODQwYTBmNGUwMDgwMDNkMGExNjFhMDU1MTQ0ODQwYzFiYTIwYTBhMWMwYzNhYWFjMjRhMGNiMjRhMGQyMjRhMGU5ODA1MjE5Yzg0OThlOTQyNTMwMjI3OTkyMzQxMDc4NDg4ZDQwYzdhZTAwODAwYmQwYTg4OTRhZDAzZTAwODAwOTgwNTk4ZTkyNzk5MDk4MjI2NDBhZDAzZTAwODAwMWRmMDgxOWQ4NGJkMDM4ODg4MGM0YWUwMDgwMDFkZjAzNjYxMDA1MThjODQ4MjI1MzEwYzdhZTAwODAwNTY2MjBhODEyMjg0MGMzYzBjMjU0MDVjOTM4ODg4NWFhYTJiYWFhOTAxYTBhMGY0ZTAwODAwNmQwYWQxNDQ4NGUyMGEwYTBjZWZhYWVlZjI0ZTBjNTI0ZTBkZDgwZDcxOWM4NGQ4ZWRjYjVlNzc5ZDBiODEyMjg0ODIyODI2ZTAwODAwMTYxYTA4MGMxOTkyNDUwMjIwYTg0MTIyNDUwM2EyNDUwNDViNTU4YzM0MzI0NTAwMWI1NTBjN2EzMThjODQ5ODAxODIyMzMxOTI1NjAyZTAwODAwMjE0NDg0Y2QwYTBjMGJhZDA1ZTUyYjAwYTgwMmE4ZWE3NzlhMWMyMTA3ODQ4OGQyMGM3YWUwMDgwMGJkMGE4ODkyYWQwNmUwMDgwMDkxNDQ4NDk4MDk5OGU5NzcxOTFkODE5ZDg0YmQwNjg4ODgwYzRhZTAwODAwMWRmMGFkMDI4MTkyODRiZDAzODgxOGNkMDRlMDA4MDAxZGYwODE4Yzg0ODIyODQwYWQwNmUwMDgwMDFkZjAwYzA5ODZkZWZmMDAwMDM2NjEwMGFkMDNiMTlmODQwYzRjMWM4ODkxOWU4NDk5MDE4MjU0MDBlNTEyMDA0YmEzYjFhMDg0MGM0YzY1MTIwMDgxMjI4NGFkMDE4MjI4M2U4YmIzZTAwODAwMjE0NDg0ZWJhMzBjMGIwYzJjMmMxOTkyNDMwY2MyNDMwZDY1MjIwMGMyYTBiOGI4MDJhMmMzMTBjYWJiMGM0YzY1MGYwMGEyYzMxMTBjMGIwYzNjYTUyMDAwYTJjMzE1MGMwYmQ4MDIwYzNjZDIwZDU5ZDI0MzE0YTUxZjAwMGMwMjFkZjAwMDAwMDAzNjQxMDAzMWE3ODQ5MWE1ODRhMWE0ODRmMTkyODRkMWEyODQ0MWE2ODQ4MTIyODRjMWExODRiMWEzODRiOWFjNDI2ODEzZDk5YzIyMjgxNGUyMjg4NmU5MGY5MjY4ODYyOTFmYTI2ODE0MjFhODg0MjI2MzEwMWRmMDAwMDAwMDM2NDEwMDFkZjAwMDAwMDAzNjQxMDAxZGYwMDAwMDAwMzYyMTAwYjYyMzI5NTBmMjQwNDBmMzQwNDdiNTE2NTA0NGMwMDAxNDQwMDAzM2ExM2RmMDc2OTQwODM3MzIwMjMwMjJjMDMwMzE0MTM3MzIwMjMwMjJjMDFkZjAwMDAwY2M1MzAwMDAwMDQ0NDk1NjMwMGMwMjFkZjAwMDAwMDAwMDc2OTQwOTYyMDMwMDFiMzM2MjQ1MDAxYjU1MWRmMGI2NzRlZDYyMDMwMDFiMzM0MmM0ZmY2MjQ1MDA1MmM1MDExNzY1MjdiNjY0ZDk2MjAzMDA3MjAzMDEyYjMzNDJjNGZlNjI0NTAwNzI0NTAxMmI1NTg2MDMwMDAwMDAwMDM2MjEwMDIwNTIyMDA3ZTJjNjE3ZTJkNzQwNzQ0MTgyYTAwMzg3ODM1YTc2OTcxNTY4MDM3ODEzNjkwNTY4MjM3OTE1NzgzMzY5MjUzMmMzMTA3OTM1NTJjNTEwMzc2NDBiNjgwMzc4MTM4YjMzNjkwNTc5MTU4YjU1MjdlNDA3MTdlNDE0MDdlNDIxMWRmMDY4MDM0YjMzNjkwNTRiNTUxN2U0MDQwN2U0MTExZGYwNjIxMzAwMmIzMzYyNTUwMDJiNTUwN2U0MDIxZGYwMDA2MjAzMDA2MjQ1MDAxZGYwMTZhNGZmMDAyMzQwODBiMzEwYjAzM2MwNjgwMzc2OTcyMTc4MTM4ODIzNjA2NzgxNjkwNTk4MzM3MDc4ODE3OTE1Njg0MzgwODk4MTg5MjUzMmMzMTA5MDk2ODE5OTM1NTJjNTEwMzc2NDE1NzgxMzg4MjM2MDY3ODE2OTA1OGIzMzcwNzg4MTc5MTU1MmM1MDg4MDY4MjAyNzY0MGM3ODEzNGIzMzYwNjc4MTY5MDU0YjU1NmQwN2JhMzMxN2U0MDYwN2U0MTgxZGYwMDAwMDYyMDMwMDcyMDMwMTJiMzM2MjQ1MDA3MjQ1MDEyYjU1MDdlNDAxMWRmMDYyMDMwMDYyNDUwMDFkZjAwMDAwMDAwMDc2OTQwNDMyNDUwMDFiNTUxZGYwMDBiNjg0ZjEzMjQ1MDAxYjU1MGI0NDE3NjUyOGI2ODRlNDMyNTUwMDJiNTU0MmM0ZmU4NjA2MDAwMDM2MjEwMDMwMzA3NDgwNzMxMTcwMzMyMDAwNzMxMTcwMzMyMDVkMDIwN2UyY2MxN2UyZDY0MDc0NDE3Njk3MGEzOTA1MzkxNTM5MjUzOTM1NTJjNTEwMzc2NDA2MzkwNTM5MTU1MmM1MDgyNzY0MDMzOTA1NGI1NTE3NjQwNDMyNTUwMDJiNTUwNzY0MDIzMjQ1MDAxZGYwMDAwMDAwMDAwMTAyMDIwMTQyMDAwMDAwZmYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcjNrLzMwMDAwL1BTX0FTSUMucHN0IGIvYXIzay8zMDAwMC9QU19BU0lDLnBzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjBkYTEyCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay8zMDAwMC9QU19BU0lDLnBzdApAQCAtMCwwICsxLDU5IEBACisvLyBiYXNlZCBvbiAxLCBjaGFuZ2UgRFZERD0wLjg1ViwgTFBPIG1lYXN1cmUgdGltZSB0byA4bXMsIDEzMDBtcyByZUNhbCBpbnRlcnZhbA0KKy8vIFJhZGlvIHRhYmxlIFRBRyANCisjDQorW0g6U10wMTJDDQorW0g6U10wMDQyDQorW0g6QV1CMSBCMSAxMiAwMCAwMiAwMCAwMSAzMCAwNiAwMCAwMiAwMCAwMCAyMCAwMiAwMCANCisgICAgIDA0IDAwIDBDIDQwIDAxIDAwIDQ4IDAwIDAwIDQ4IDU0IDlBIDAyIDAwIDAwIDA4IA0KKyAgICAgMDIgMDAgNDggMDAgODkgRUUgNzAgRTYgMzggMDAgRDggNzAgRUYgNTIgMDIgMDAgDQorICAgICAwMCA0MCAwMCAwMCAwOCAwMCAzMSAwMCAwMCAwMCAwNCAwMCAxMCAwMCAwMCAwMCANCisgICAgIEIyIEIyIA0KKy8vIFN5c3RlbSBjb25maWcgVEFHIA0KKyMNCitbSDpTXTAwMTMNCitbSDpTXTAwOUMNCitbSDpBXUMxIEMxIDE3IDAyIDAyIDAwIDAxIDMwIDQ4IDAwIDBFIENDIDMzIDA2IDAxIDA4IA0KKyAgICAgNjQgOTYgMTQgMDUgRkYgRkYgMDUgODAgMDAgMDAgRkYgQ0MgMDAgQ0MgMDEgMDAgDQorICAgICAyMCA4MCBGRiBDQyAwMiBDQyAwNCAwMCBERiBFQyA0MyBGOCAwMCAyMSAwMCBFMCANCisgICAgIEZGIENDIDAzIENDIDA2IDAwIDgwIEYwIDA4IDI4IDgwIEY0IDBDIDIwIDgwIEY4IA0KKyAgICAgMEUgMTggODAgRkMgMTQgMTAgODAgMDAgMTggMDggODAgMDQgMTYgMDAgRkYgQ0MgDQorICAgICAwNCBDQyAwMSAwMCAxQSAxMiA0MCA5NiAwMSBDMCAyOCAwMCAwMCAwMCBDMCAwMSANCisgICAgIDQwIDA2IDAwIDAxIDAwIDAwIEM4IDAwIDAwIEYwIDAwIDAwIEZGIENDIDBDIENDIA0KKyAgICAgMDggMDAgMDEgMDMgMDAgN0UgMDggMDggMDAgN0UgMDEgMDEgMDAgN0UgMDEgMDMgDQorICAgICAwMCA3RSAwMyAwMyAwMCA3RSA2MSA2MyAwMCA3RSA2MyA2NSAwMCA3RSA2QSA2QyANCisgICAgIDAwIDdFIEZGIENDIDA5IENDIDAwIEM5IEZGIENDIEMyIEMyIA0KKy8vRXh0ZXJuIDMyayArIDI0TWh6IENQVQ0KKy8vIw0KKy8vW0g6U10wMDIxDQorLy9bSDpTXTAwMDQNCisvL1tIOkFdMDkgMDAgMDAgMDANCisvL0JkYWRkcg0KKyMNCitbSDpTXTAwMDENCitbSDpTXTAwMDYNCitbSDpBXTg5IDYwIDQxIDdmIDAzIDAwDQorLy9BdWRpbw0KKyMNCitbSDpTXTAwMDINCitbSDpTXTAwMDQNCitbSDpBXTIzIDA4IDAxIDMzDQorLy9BdWRpbw0KKyMNCitbSDpTXTAwMDMNCitbSDpTXTAwMDQNCitbSDpBXWRkIGU1IDJlIDAwDQorLy9BdWRpbw0KKyMNCitbSDpTXTAwMTUNCitbSDpTXTAwMDQNCitbSDpBXTEyIDAwIDAwIDAwDQorLy9BdWRpbw0KKyMNCitbSDpTXTAwMTYNCitbSDpTXTAwMDQNCitbSDpBXTAwIDAwIGE3IDAyDQorIw0KKy8vUExDDQorW0g6U10wMDFGDQorW0g6U10wMDA4DQorW0g6QV0wMSAxQSAwNiAxNCA1MCBCNCAzMiA5Ng0KZGlmZiAtLWdpdCBhL2FyM2svMzAwMDAvUmFtUGF0Y2gudHh0IGIvYXIzay8zMDAwMC9SYW1QYXRjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1Y2NjYwotLS0gL2Rldi9udWxsCisrKyBiL2FyM2svMzAwMDAvUmFtUGF0Y2gudHh0CkBAIC0wLDAgKzEsMiBAQAorMDU2OQ0KKzAwMDAwMDAwMGUyMDAwMDA1MDgwMDAwMDAwMDE1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGQwOTE1MzAwZDQ5MTUzMDBkODkxNTMwMGRjOTE1MzAwOThiMDUzMDA2NGNlNTMwMGY4ZDI1MzAwMDhlNzUzMDAwOGQyNTMwMDBjZDI1MzAwOThkOTUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZjA1MTAwMTAxMDEwMWZmZmZmZjUwNTAwMTAxMDEwMTgwMDE5ODAwYzgwMTk4MDBmNDAyOTgwMGQwMDM5ODAwMzgwNDk4MDAxNDA0OTgwMDI0MDU5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzY2MTAwYWQwNTgxYzIwNmJkMDFlMDA4MDBiZDBhMTc2NDFjMGMwYWJkMDU4MTVkMDgwYzBjZTAwODAwYmQwMmRkMDNlZDA1ODE1YzA4MGMwY2UwMDgwMGM2MDQwMGFkMDVjMWY4MDI5MjJiMTE4MTk5MDNjMDk5MjA5MjZiMTFlMDA4MDAwYzAyMWRmMDAwMzY4MTAwMWMwZTUxNmQwMzBjMDcyMGQwNzRkMjQxMTA3OTExZDBjZDkwYjgwNWEwY2MxMWNhYmJiOTAxNjBlNjAzMGMyYTYwOTAzNDk3MmEwMjYwNjIwMDM4MDFlMmMxMTAyMjAzMDY4ZDA3Y2M4MjYwZTYxMzEwMjAwMGZkMDYxZGYwNzI2MzExMjIwMTEwNzI0MzRmYzgwNTIwNDI5MGEwNDQxMTRhY2M4ODJjMGMxOTgwYTAwNDA3ZTgwNTgyMGM0YjA3ZTgwNzljN2FhMjBjNGIwN2VhMTJhMmMzMzQwYzBiMGNmYzBjMTk4MTkxMDI5OTExZTAwODAwMGMxOTcyNDM0ZWM4MDVlODExNGFjY2E4MmNkMjBjNGJhMGEwMDQxNmFhMDU5MGZkMjBmMjRjNGJjYzRlODIwMzQ5ZjY1ODc4YTFiMTAzOTgwNWEyMGEwMzRhOTk5Mjk5MDk4MGFhMDFhMGE4MzE5MDk4MjE4MDk5MDE5MDk4MzFhNzI5NGEwYzVhODFiYzA0YmQwMmUwMDgwMGNkMGFhZDAyODFiZTA0ZTgwNWMwYjA3NDRhY2U5MjBjNGIwYzRkZDA5OTIwOTI0YzRiZTAwODAwOWM3YTcyNDM0YTg2MDQwMGFkMDIwYzRiODFiZjA0OTJhMGZlOTA5ZDEwOTI0YzRiZTAwODAwNjBlNjEzMTAyMDAwYWQwNjFkZjAwYzFhODFiZDA0YmQwMmUwMDgwMGNkMGE0NmVjZmYwYzVhODFiZDA0YmQwMmUwMDgwMGNkMGE4NmU4ZmYwMDAwMzY4MTAwMzA1MDc0YmQwMTIwNDA3NDgxYzIwNmFkMDRlMDA4MDA5MjJhMTEyMTZkMDM5MDkyMDUxNjg5MGJhMTg4MDRiMTZlMDNjMDIwMDA0MDM0OTA5MWYyMDRhMDMzMTE4MjI5OTJjMDIwMDBiMDg4MTBhMDg4MjBhODAyODI2OTkyM2FhYWIyMGE0OWQyY2E0ODU3OWIwOGMyMGE0YmMwYzIwNDE2MWMwOGIyNGE0YWUxZDEwNDUyNGQwMWVhZTVmMjBlN2ZlMjBlODAzYzI5ZjdiZTRhMWMwYjQyNDExMGQ5MTExYzBjMWMwZjFjMDU1MmMxMTBmZDA1Y2QwNTgwZTYwMzBjMmU4MGQwMzRkNzJlMDI4MDYyMDBiZDA1YjIwNTAwYzIwNTAwYTgwMmMwYmI5MGEwYmIxMWJhYWE5MjRhMzQ4MGU2MTMxMDIwMDA0MjA1MDBkODExNDAzNDkwNTIwZDAxYTAzMzExYWQwNGIyMGQwMDgxYzIwNGNkMDVlMDA4MDBhODAyYjJhMGZiM2FhYTkyMGE0YjBjMTJiMDk5MTA5MjRhNGIxZGYwMGMwMjFkZjAzNjQxMDA4MTFlMDYyMWMwMDk4ODA4OTIxMjA3ZWNlOGVjYzllMWIxMDNiMjEyMDZhMjFlZjFiNzNhMjEwYzBhODE3YzAzZDIxZWYwYzFkNjAzZjE2YzAzYzgwY2UyMGY0NGEwYmQxMWUwYmQ5M2QxZDIwOWUwMDgwMGEyNTIwNzFkZjAwMDAwMzY0MTAwODE3ZjA0OTE2YzAzODgwODkyMDkyODgwODAxNDY2MTgwYWNjNzk4MTBkMDRhMmEwNjRlMDA4MDAxZGYwMDAwMDAwMzY0MTAwYzAyMDAwYzE2YzAzZTE5NDAzOTFkOTAzMjE3ODAzMGMwZGQyNjI4YmYyMDkwMmMwMjAwMGYwZWQ4M2UyNjI4Y2MwMjAwMGQyNjI4ZGMwMjAwMGQyNjI4ZTgyMGM0M2IyMGMyOGQxOWQwMjEwYmIwMWQwYmIxMGNjNTgwY2JhMGM1M2M2MDAwMDBjMGEwYzgzYzAyMDAwMGMxZGQyNjI4ZmMwMjAwMGEyNjI4YWMwMjAwMGIyNjI4OWEyMDkwMjBjMDg4Y2ZhNjYxYTA0MGMxYWM2MDMwMDY2MmEwNWEyMTkwMDI2Y2EwNDBjMGE4NjA3MDAwYzBhZjBiYTAxZTFkYTAzYTIwOTBjZTBiYjEwMGMxZWEwYWU5M2UxZjQwMjMwYWExMWUwYWExMGIwYWEyMGIxZmQwM2MwMjAwMGEyNmJjMWYyMDkwMjBjMThmNjJmMDQwYzA5ODYwNDAwOTIwOTA3MGMxYTkwOWE5MzBjMmFmMDk5MTFhMDk5MTBkMDk5MjBjMDIwMDBkMTdmMDQ5MjZiYzZkODBkZTIwYzI4ZDBkMDE0NjYxZDBhY2M3ZTgxMGQwNGEyYTA2NGUwMDgwMGMwMjAwMDMyNjI4ODFkZjAwMDM2NDEwMDgxYzMwNWMxOTAwOTIwYjA3NGUxOTYwNWQxNmUwOWU4MGVjMDIwMDBkMjJkODJiOTRlZDkyZWMwMjAwMGI5MGMzMGU2MDMwYzJhMzA5MDM0OTcyYTAyMzA2MjAwZTAwODAwYzAyMDAwZmQwMzkxMjUwMzgyYTEwMDgyNjk4MDAwNzEwMDMwZTYxMzEwMjAwMDFkZjAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcjNrLzMwMDAwL2FyM2tiZGFkZHIucHN0IGIvYXIzay8zMDAwMC9hcjNrYmRhZGRyLnBzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTIwODU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXIzay8zMDAwMC9hcjNrYmRhZGRyLnBzdApAQCAtMCwwICsxIEBACisxMjYwNDE3ZjAzMDANCmRpZmYgLS1naXQgYS9hcjNrLzMwMTAxL1BTX0FTSUMucHN0IGIvYXIzay8zMDEwMS9QU19BU0lDLnBzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2YyNGI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXIzay8zMDEwMS9QU19BU0lDLnBzdApAQCAtMCwwICsxLDcwIEBACisNCisvLyBSYWRpbyB0YWJsZSBUQUcgDQorIw0KK1tIOlNdMDEyQw0KK1tIOlNdMDA0Mg0KK1tIOkFdQjEgQjEgMTIgMDAgMDggMDAgMDEgMzAgMDYgMDAgMDIgMDAgMDAgMjAgMDIgMDAgDQorICAgICAwNCAwMCAwQyA0MCAwMSAwMCA0OCAwMCAwMCA0OCA1NCA5QSAwMiAwMCAwMCAwOCANCisgICAgIDAyIDAwIDQ4IDAwIDg5IEVFIDcwIEU2IDM4IDAwIEQ4IDcwIEVGIDUyIDAyIDAwIA0KKyAgICAgMDAgNDAgMDAgMDAgMDggMDAgMzEgMDAgMDAgMDAgMDQgMDAgMTAgMDAgMDAgMDAgDQorICAgICBCMiBCMiANCisvLyBTeXN0ZW0gY29uZmlnIFRBRyANCisjDQorW0g6U10wMDEzDQorW0g6U10wMDlDDQorW0g6QV1DMSBDMSAxNyAwMiAwOCAwMCAwMSAzMCA0OCAwMCAwRSBDQyAzMyAyNiAwMSAwOCANCisgICAgIDY0IDk2IDE0IDA1IEZGIEZGIDA1IDgwIDAwIDAwIEZGIENDIDAwIENDIDAxIDAwIA0KKyAgICAgMjAgODAgRkYgQ0MgMDIgQ0MgMDQgMDAgREYgRUMgNDMgRjggMDAgMjEgMDAgRTAgDQorICAgICBGRiBDQyAwMyBDQyAwNiAwMCA4MCBGMCAwOCAyOCA4MCBGNCAwQyAyMCA4MCBGOCANCisgICAgIDBFIDE4IDgwIEZDIDE0IDEwIDgwIDAwIDE4IDA4IDgwIDA0IDE2IDAwIEZGIENDIA0KKyAgICAgMDQgQ0MgMDEgMDAgMUEgMTIgNDAgOTYgMDEgQzAgMjggMDAgMDAgMDAgQzAgMDEgDQorICAgICA0MCAwNiAwMCAwMSAwMCAwMCBDOCAwMCAwMCBGMCAwMCAwMCBGRiBDQyAwQyBDQyANCisgICAgIDA4IDAwIDAxIDAzIDAwIDdFIDA4IDA4IDAwIDdFIDAxIDAxIDAwIDdFIDAxIDAzIA0KKyAgICAgMDAgN0UgMDMgMDMgMDAgN0UgNjEgNjMgMDAgN0UgNjMgNjUgMDAgN0UgNkEgNkMgDQorICAgICAwMCA3RSBGRiBDQyAwOSBDQyAwMCBDOSBGRiBDQyBDMiBDMiANCisvL0V4dGVybiAzMmsgKyAyNE1oeiBDUFUNCisvLyMNCisvL1tIOlNdMDAyMQ0KKy8vW0g6U10wMDA0DQorLy9bSDpBXTA5IDAwIDAwIDAwDQorLy9CZGFkZHINCisjDQorW0g6U10wMDAxDQorW0g6U10wMDA2DQorW0g6QV04OSA2MCA0MSA3ZiAwMyAwMA0KKy8vQXVkaW8NCisjDQorW0g6U10wMDAyDQorW0g6U10wMDA0DQorW0g6QV0yMyAwOCAwMSAzMw0KKy8vQXVkaW8NCisjDQorW0g6U10wMDAzDQorW0g6U10wMDA0DQorW0g6QV1kZCBlNSAyZSAwMA0KKy8vQXVkaW8NCisjDQorW0g6U10wMDE1DQorW0g6U10wMDA0DQorW0g6QV0xMiAwMCAwMCAwMA0KKy8vQXVkaW8NCisjDQorW0g6U10wMDE2DQorW0g6U10wMDA0DQorW0g6QV0wMCAwMCBhNyAwMg0KKyMNCisvL1BMQw0KK1tIOlNdMDAxRg0KK1tIOlNdMDAwOA0KK1tIOkFdMDEgMUEgMDYgMTQgNTAgQjQgMzIgOTYNCisvL1NuaWZmIFJlY292ZXJ5DQorIw0KK1tIOlNdMDAzRA0KK1tIOlNdMDAxOA0KK1tIOkFdQTAgMEYgMDAgMDAgMDAgMDggMDAgMDAgMEYgMDAgN0QgMDQgRTggMDMgMDEgMDANCisgICAgIDAxIDAwIDAxIDA1IDAwIDAyIDFGIDAxDQorLy9CUk0gQ29uZmlnDQorIw0KK1tIOlNdMDAyNg0KK1tIOlNdMDAwQw0KK1tIOkFdMDEgMjAgNDYgMDEgMEYgMDIgMjggMTQgMDEgMjggNjggMDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcjNrLzMwMTAxL1JhbVBhdGNoLnR4dCBiL2FyM2svMzAxMDEvUmFtUGF0Y2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjY2FhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcjNrLzMwMTAxL1JhbVBhdGNoLnR4dApAQCAtMCwwICsxLDIgQEAKKzIxYzcNCiswMDAwMDAwMDBlMjAwMDAwNTA4MDAwMDAwMDAxNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBkOGQ1NTMwMDI0ZTc1MzAwMzBlMTUzMDA2MGUxNTMwMGVjZTE1MzAwNzBlMzUzMDA4Y2U0NTMwMDU0ZTE1MzAwODhlMTUzMDA0MGFmNTMwMDg4ZTM1MzAwOGNlMzUzMDBkNGUyNTMwMGQ4ZTI1MzAwZmNlMjUzMDAzY2UzNTMwMDI0ZTM1MzAwNTRlMzUzMDAzMGRkNTMwMDI0YjA1MzAwNzhkNTUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwZDU1MzAwMmNhMDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMTk4MDBkODAxOTgwMDZjMDI5ODAwZWMwNDk4MDBmYzA2OTgwMDVjMDg5ODAwOWMwODk4MDAyMDA5OTgwMGNjMDk5ODAwMzQwYTk4MDAzNDBiOTgwMGIwMGI5ODAwNzAwYzk4MDBlNDBjOTgwMDU4MGQ5ODAwYzQwZDk4MDAzMDBlOTgwMDYwMGU5ODAwMzgwZjk4MDBkMDBmOTgwMDU0MTE5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NDE4OTgwMDUwMWI5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2NDEwMDgxM2EwMzQxNmYwMzgyMDg1MTQ4MDQxNjE4MDQwYzEzYmMwNDBjMDc2MTNiMDMwYzAyNjgwNjc2OTQyMjUyYTEwODUwNTI4MjFiMjI1YTU2NDIwNTA2MjAyMDc0MjY1NDA1MjYzNDAyNjY0NDA3OTIwNWJmMTc2OTAxMWI3NzNkZjA0NjAwMDAwYzA3NzA0OGMwMGMwMjQwMjM4MzFkZjAwYzAyMWRmMDAwMzY0MTAwNTY5MjA4YzAyMDAwMjFjZTA5OTFmMzAyMGMwNDQyNjk5MmMwMjAwMDQyNjk5Mzk4MTI4ZDA0ZWQwOTE2YzkwNjNkMDlhODAyYzg1OWI4MDliOTEyYTkwOTk5MDI4YzljYTIxZTA2YjgyZWUwMGMwMDg2MDMwMGEyMWUwODhiY2U1YzBiODFkNjAyMGM4ZGUwMDgwMDk4MTIwYzRiYmNiOWMxZjMwMmQ4MTljMDIwMDBlZDBjZDI2YzkwZGQwY2MwMjAwMDQyNmM5M2MwMjAwMGE4MTJiMjZjOTJhODFhYzAyMDAwYjIyYzkxMGMwY2IwYmFjMGE2MWIwNGU4MTNhNzllMGFjMDIwMDA4MWYzMDIwYzFmZjI2ODkzMWRmMDAwMDAzNmExMDBhMmEwZGNiZDAxODEwYzAzMGMxY2UwMDgwMGEyYTBkMjRiYjEwYzRjNDIxMjAyNTIxMjAxNjEyZDA3ODIwMTAwOTJhMGQ0OTA4ODgyNzIwMjAwOGEyNjIyMDI4MDgxMGMwMzBjMTZlMDA4MDAzMTNkMDMwYzA5YTIwMzAwNTk4MTA3NmExNjkwYjlhMDMwYmJhMGIyMWIwNDA3ZWIwYzFiOTk5MDkwNzQxNmI5ZmU0NjAwMDAwYzE5NjYxOTA0MGMwOWM2MDAwMDZkMDkwYzE5Y2MyOTBjMTIxZGYwMGMyYzc5NTE4MTBjMDM1MTNiMDNiMmExMDhiMGIyODJiOTYxYTgwNTBjMDIyMjUxMDRiYWFhYTIwYTFkYjJhMGNkYmFhYThiYjFlMDA4MDA3MjExMDQ4MTBjMDMyOTMxYTgwNTYwZDZhMDMwM2RhMGIyMDMwZWMyYTEwOGMwYmI4MjBjNGNiYWFhYTIwYTFkYjJhMGM4YmFhYWNiYjFlMDA4MDA4YmIxMGMyYzgxMGMwMzIyNTEwNGE4MDVmODMxZDIwMzBlZTJhMTA4ZTBkZDgyZjk3MWRhYWFhMjBhMWRkMmEwY2RkYWFhZTAwODAwNjIxMTA0Y2JiMTBjNGM4MTBjMDNkODYxYTgwNTI5MzFkYWFhYTIwYTFkZDJhMGM4ZGFhYWUwMDgwMGU4NTFjODMxZTBlMTA0MTYxZTEyYmQwNGExM2MwMzgxZWYwMmEwYWMxMGUwMDgwMGQyMDMxNWI4NzFlODgxYTBmNGMwYTgxMWZhZWVlMDQwZjRiMGFhYzBiMjAzMTBhMDIwZjRkMDliYzBjMmM5ZmVhYzdkZjEzYTAzMTY4YzBmNjYyYzFmZjIwZjUzOWM5ZjUyMDMwZTgyYTEwODgwNTU4MjgxM2IwMzg4MDg1YTg4ODIwODc5NTEzYjAzMGI4ODE2ODgwZGEwZjBmNGUwYTBmNGY3OWEyZjBjMTIxZGYwMGMwMjc3YjYwYzYwOTdjMDk3YmIwNjJiYmFiNzk0MDEwYzEyZDgwNWUyMDMwZWYyYTEwOGYwZWU4MmVhZGRkMjBkNzljYzRkODJjY2ZlMTZkODA4MWRmMGI5NDFmOTkxZDlhMWM5YjFiYTlhZjdhOTFhNDBhMmMwODFiNTAzYjg0MWUwMDgwMGM4YjFiODQxZDhhMWIwOGE4MmY4OTE4YTQ0NDA0MGY0Yjk0MWQ5YTFjOWIxYmE5ZjQ3YTkxODIwYTRjMDgxYjUwM2I4NDFlMDA4MDBiODQxYzhiMWIwOGE4MmQ4YTE4YTIyMjAyMGY0NDdiMjA0YmEyMjIwMjBmNGI3YjIwOWJhMjJiYTQ0NDA0MGY0MjAyMGY0YjA5MmMwOTA4NGMwMTY1OGY2MjBhNGMwMTZmYWY1OWFhZGEwYjRjMDE2N2JmNWI2NmM0MDRiY2FjN2I0MDIwNmQzZmZkMmMyZmM0N2JkMDJjNmQwZmYwYzAyMWRmMGFkMGM4MWVmMDJiZDA0ZTAwODAwODZiN2ZmZjIwZjUzY2QwOWQyY2RmZWQwZDA3NDE2YmZmMWY2NmQwMjQ2YzVmZjJiYzlkMmNkZmVkMGQwNzQ4NmMyZmYxYzRiNjczNzAyYzZjM2ZmNzBlNmMwZTczYjAyODZjMWZmZjJjMmZlZjBmNGMwNTZkZmVmMGMxMjg2YmVmZjAwMDAwMDM2ODEwMDgxNTMwODMyNDExNGUwMDgwMDNkMGE4MTUyMDhhZDAyZTAwODAwZDE1NDA4MzdhYTA3MGMwYWEyNTIwMjg2MDAwMGEyMTIwMmMyMDExNGRhY2NjMjBjMDA5MjEyMDNhMGNjODI3Y2U0YjJjYzFmYzBiY2IzYjBiNTIxMWJiYjQwYmIxMGIyNTIwMTljNjk4MTUzMDhlMDA4MDA4Y2VhYjIxMjAzYTIxMjAxYmFhYTFiYWE0MGFhMTBhMjUyMDFhMTNkMDM3MjAxMTRjMjBhMDAwYzA5MDc2YzE2OTA4OWEwYTA4OGEwODIxODA0MDdlODBjMWI5OTkwOTA3NDE2YjlmZTQ2MDAwMDBjMTkzMTNiMDM1MTNhMDNkMmEwYzg2NjE5MDcwYzBiOTIwMTAwNDYwMDAwMGMxYjkwNjlhMGEwNjZhMGJjZmIwYzRjODFlOTA1YjgwM2QyMDYwZWUyYTEwOGUwZGQ4MmEyYTBjOGRhYmJiMjBiMWRkOTExYWFhYjUwYmJhMGUwMDgwMDBjMmNkODExYjgwMzgxZTkwNWRhYmJiMjBiMWRhMmEwY2RhYWFiNTBiYjkwYjJjYjEwZTAwODAwZDJhMGM4ODEyZDA3OTJhMGQ0OTA3NzgyYjgwMzdhNzg3MjA3ODA4MmExMDg4MDc3ODIwYzRjN2FiYmIyMGIxZDgxZTkwNWRhYWI1MGJiYTBlMDA4MDAwYzJjYjgwMzgxZTkwNTdhYmJiMjBiMWRhMmEwY2RhYWFiNTBiYjkwYjJjYjEwZTAwODAwNGJiNmEyYTBkMjgxZTkwNTBjNGNlMDA4MDBhMmEwZGMwYzFjODFlOTA1YjJjMTE0ZTAwODAwMzEyZTAzODE1NTA4YWQwMmUwMDgwMDMwOWFjMDU2YTkwOWMyMTIwMWEyMTIwMmUyMDExNGIxNTQwODBiOWUxYmRlYmE4ZTgyMDgwMGUwZDk5M2QwZDA3NGEwODg4MmRhYmJmMjBiMDBlMmM4MWZhMGZmODI4MGU4YjNlMGU1MjExYmVlZDJjZjFmZjBkZmIzNDBlZTEwZTBlMGY0ZDBkNTIxMWJkZDQwZGQxMGQwZDBmNGU3YmQyNTgyY2NmZTgwODBmNDgyNTIwMTkyMGIwMGEwOTk4MmYyYzkxZjkwZjliM2YwZjUyMTFiZmY0MGZmMTBmMGYwZjQ4NzNmODMwNjA5MDAyYjljOTA5MGY0OTI1MjAxZTIwYjAwYTBlZTgyZDJjZTFmZTBkZWIzZDBkNTIxMWJkZDQwZGQxMGQwZDBmNGQ3YjkwMmM2ZDZmZjBjMGFhMjUyMDI4MTUzMDhlMDA4MDBkYzFhOTFiNzA2OTIwOTA3ODA5OTAxOTA5ODMxY2MzOTBjMGFhMjUyMDExZGYwMDAwMDM2NjEwMDgxNGQwOGFkMDJlMDA4MDAwYzA1NDFhNTA4NjJhMGQ0NjA2MzgyYTIxMjAxNmE0NGIyMDQ4YTZkMGE4Y2RiMjYxYjBiMjYyYjUyMjEyZTAzMWRmMDJkMGIxZGYwYjIxMjAyODIxNDg0OTIxNDgzYjczODM3OTczYjM0YzJjYmZlYTcyYzFiODFlZjAyZTAwODAwOWMyYTgxNTMwOGUwMDgwMGNjYWE4MWFjMDdlMDA4MDBjYzJhMGMwMjFkZjBiZDAzODE1ODA4YWQwMmUwMDgwMGIyMTIwMjkyMTIwMTU2YmIwZDUyNDQ4YTA2ZWJmZmExM2QwMzUyNDQ4YTkyMGEwMDcyYTBjZDA3NjkxODlkMDU5MGI5YTBhMGJiYTBiMjFiMDQwN2ViMGMxYjk5OTA5MDc0MTZiOWZlNDYwMDAwMGMxOTMxM2IwM2QyYTBjODUxM2EwMzY2MTkwNzBjMGI5MjAxMDA0NjAwMDAwYzFiOTA2OWEwYTA2NmEwYmNlYjBjNGNiODAzNzIwNjBlODJhMTA4ODA3NzgyYTJhMGM4N2FiYmIyMGIxZDgxZTkwNWFhYWI1MGJiYTBlMDA4MDAwYzJjYjgwMzgxZTkwNTdhYmJiMjBiMWRhMmEwY2RhYWFiNTBiYjkwYjJjYjEwZTAwODAwZDJhMGM4NzJhMGNkYjgwMzQyMDQ3NDgyYTEwODgwNDQ4MjBjNGM0YWJiYjIwYjFkODFlOTA1ZGFhYjUwYmJhMGUwMDgwMGI4MDMwYzJjNGFiYmIyMGIxZDgxZTkwNTdhYWI1MGJiOTBiMmNiMTBlMDA4MDA0YmI2YTJhMGQyODFlOTA1MGM0Y2UwMDgwMDgxNTUwOGFkMDJlMDA4MDBhMDIwZjQxZGYwNjA5OWMwNTY1OWVkNTI0NDhhMDZjMGZmMDAwMDAwMzZjMTAwMjI0MTAwMzI0MTAxNDkxMTU5MjE2OTMxNzk0MWEyYTBkZTBjMWNiMmMxMjAyMjQxMjA4MWU5MDU5MjIxMWFkMjAxNjRlMjIxMThlOTUxZDI0MTE4OTk3MWUwMDgwMDgxMDYwOWFkMDFlMDA4MDAyZDBhMWRmMDAwMDAzNjYxMDBhMmEwZGViZDAxODEwYzAzMGMxY2UwMDgwMDQyMDIwMzBjMDc2MTU5MDc4MmEwZDQ4MDg3ODI4YTY2YTIwNjdmOTIwMTAwNjY0YTFlZjY3OTFiODE3ZTAzYzIxNjZhYTIxNjY5YjIwMjAyY2FhYWIwYWFjMGJkMDRlMDA4MDBjYzJhMWNiMjFkZjA1MjAyMDY4MjAyMDJhYzQ1YjYzNTIyOTIxNjY5NjIxNjZhMGMyMzlhNjY4MDY2YzAzMGE2YzA4MTdlMDNiZDA0ZTAwODAwMTY1YWZkMmIzMzMwMzA3NDU3MzNlOTFiNzc3MDcwNzQ2Njk3OTYwYzAyMWRmMDAwMDAzNjYxMDAwYzAzYWQwMmE5MDFiMTU5MDdjMmEwZDRjMGMzODJjYWJiYzIwYjdmNjY0YzIyYzgwMWQ4MDE3MjFiNmFiMjFiNjlkMjFkMDJjMjFjMDE1ZDBkZDdiNzAxNWQwNzc3OTUzOTJkMGI2ZDBjN2QwZDA2MGQwMDFiMzMzMDMwNzQ2NjkzYzMwYzAzNTFjZjA2NDJhMGZmMzBiM2EwNTBiYmEwODIwYjAwNDcxODA5ODE0YzA4YTgwMWUwMDgwMGZjMWExYjMzMzAzMDc0MTYxM2ZlYzYwZDAwMmQwYzZkMGIwYzE0YmQwNTQwYTc4MjgxZWYwMmFhYTYyMGFhYzBlMDA4MDBkYzNhYTJhMDY0ODFiNTAzYmQwNGUwMDgwMDFjZTlhN2I5MDQyMTJlMDMxZGYwMWI0NDQwNDA3NDY2OTRkMDg2ZTVmZjBjMDIxZGYwMDAwMDM2NDEwMGFkMDNiZDA0ODE1OTA4MGMwY2UwMDgwMGFkMDU4MTA1MDcwYzI5ZDIxMzE0ZjEwOTA1ZThkMzBjNGMwYzBiYjI0MzE2YzI0MzAxZjBlZTEwZTlkM2QyNTUwMWMyMTMyYmMyNTUwM2IyNDUwMDkyNDUwNGUwMDgwMGQyMjMxMTg3N2QxN2UyMDNjNDA3NmUxMWJkMDRhMmE0MzAwYzJjZDIwMzAwODFlMzA2MGMzZWUwMDgwMDgxNTAwOGFkMDNlMDA4MDAxZGYwMDAzNjYxMDA0MDgxMDQwYzBhYTI1MTAwMTY1ODA4ZDE3MjA4NWM1ZWMyMDMwMWIyMDMwMDgwY2MxMWNhYmJiMGIwZjRhMGNhOTBkMGNjYTBmMjFjMDIxYmFhYjc5ZjViZDIxYzAxZDI1MTAwZTJhNDEwZTBlYmMwMTY2ZTA5ZjJhNDExZjBmYmMwMTZkZjA4ODJhNDJjODA4YmMwMTY0ODA4OTJhNDJkOTA5YmMwMTZiOTA3YTJhM2ZkYTBhYmMwMTYyYTA3YzJhNDE4YzBjYmMwMTY2YzA1MGMxYWJkMDU4MTc1MDgwYzFjZTAwODAwYTBhMDc0YmQwMmVkMDUwYzFjODE3NDA4ZGQwMWUwMDgwMDg2MGMwMGEwYTA3NGU3OWE4ZjA2ZThmZmFkMDU4MWRhMDYyYmIxZTAwODAwMTY3YTA0YzIwYTExYjIwMzAwMzc2YzQxM2M5OTk3OWIzYzgxYTUwNTkyYTBmNzkwOWMxMDkyNGExMWUwMDgwMDBjMDIxZGYwYmQwMmVkMDUwYzBhMGMxYzgxNzQwOGRkMDFlMDA4MDAwNmZhZmY2MGEwNzRiZDAyZWQwNTBjMWM4MTc0MDhkZDAxZTAwODAwMDZmNWZmYjIwMzAwYWQwMmNkMDNkZDA1ZWQwNjgxODkwOGZkMDRlMDA4MDA4NmVmZmYwMDM2NjEwMDYxMmQwNzgyYTBkNDgwODI4MjhhNjZmNjcyMTQ4MWJkMDVhMjA2YThlMDA4MDA4MTYxMDhlMDA4MDBhMjQzMDFhMjQ0MGM4MWEzMDgwYzE5ZjIwMzAwZjI0MTAwZTIwMzAxZTI0MTAxZDIwMzAyMGJlNWUwZTk5M2QyNDEwMmQyMDY4MGMyMDMwM2MyNDEwMzBjMmNiMjAzMDdiMjQxMDRiZDAxYTIwMzA0YTI0MTA1YTJhNDEwZTAwODAwYjFiNzAyOTFiMzAyODIyNjMxYTIyNjJkOTA4ODIwYjBhYTIwYTI2NjJkODI2NjMxMWRmMDAwMzY4MTAwNjEyZDA3ODJhMGQ0ODA4MjgyOGE2NmY2NzIyMjgxYmQwNWEyMDZhOGUwMDgwMDgxNjEwOGUwMDgwMGJkMGFhMjQzMDE5MjE0MDJhMTM1MDNiMjQ0MGNhMDk5MjA5MjU0MDIyMjAzMDAyMjQxMDBmMjAzMDVmMjQxMDFlMjAzMDFlMjQxMDJkMjAzMDJkMjQxMDNkMWI3MDJjMjAzMDNjMjQxMDRjMjI2MmRiMjAzMDZiMjQxMDViMWIzMDJhMjAzMDdkMGNjMjBkZDAxYTI0MTA2YTIyNjMxOTIwMzA4OTI0MTA3MGMxOWIwYWEyMDgyMTMwNTgyNDEwODcyMTMwNWIyYTQyYzcwNzg0MTcyNDEwOTQyMTMwNjQyNDEwYTIyMTMwNjgxNzQwODIwMjg0MTIyNDEwYmYyMDMwNGYyNDEwY2UyMDMwZWEyNjYzMWMyNjYyZGUyNDEwZGUyMDY4MDFjMGMwYmE1YTBhOTkzZTAwODAwMWRmMDAwMzY2MTAwMjA2MGY0ODFhNDA4YWQwNmUwMDgwMDJkMGEyNmU2MTE5MmEwNmQ5NzE2MGJhMmEwODFhNzE2MDViMmEwNmViNzk2MDI2MmE0MTA2MjQxMDA0MjQxMDJiZDAxMGMyYzBjMTkwYmU1ODJhMGQ0NjBhODQxYTI0MTAxODA4MzgyZTBlOTkzMzEyZDA3YTJhM2ViOGEzMzgxMWIwN2QyMDM4MGUwMDgwMGMxYzIwM2IyMjMyZGQyMjMzMTdjZmVlMGUyMzBlMGRkMTBkMjYzMzFjMGJiMTBiMjYzMmQxZGYwMDAwMDM2NjEwMDIwNjBmNDgxYTQwOGFkMDZlMDA4MDAyZDBhMjZlNjExOTJhMDZkOTcxNjBiYTJhMDgxYTcxNjA1YjJhMDZlYjc5NjAyNjJhNDJjNjI0MTAwNDI0MTAyYmQwMTBjMmMwYzE5MGJlNTgyYTBkNDYwYTg0MWEyNDEwMTgwODM4MmUwZTk5MzMxMmQwN2EyYTQyODhhMzM4MTZlMDdkMjAzODBlMDA4MDBjMWMyMDNiMjIzMmRkMjIzMzE3Y2ZlZTBlMjMwZTBkZDEwZDI2MzMxYzBiYjEwYjI2MzJkMWRmMDAwMDAzNjYxMDAyMDYwZjQ4MWE0MDhhZDA2ZTAwODAwODJhMGQ0ODA4MzgyMzFhNTA4MmQwYThhMzMyNmU2MDU5MmEwNmQ5Nzk2MDI2MmE0MTA4Yzk1OTIwMzg1MGMxYWEwOTkyMDkyNDM4NTYyNTEwMGEyYTNlYWJkMDEwYzJjZDIwMzc0MGMxOTBiZTQ4MTFkMDdlMGU5OTNlMDA4MDBiMWMyMDNhMjIzMmFjMjIzMmU3Y2ZkZDBkMjMwZDBjYzEwYzI2MzJlYjBhYTEwYTI2MzJhMWRmMDAwMDAzNjYxMDAyMDYwZjQ4MWE0MDhhZDA2ZTAwODAwODJhMGQ0ODA4MzgyMzFhNTA4MmQwYThhMzMyNmU2MDU5MmEwNmQ5Nzk2MDI2MmE0MmM4Yzk1OTIwMzg1MGMxYWEwOTkyMDkyNDM4NTYyNTEwMGEyYTQyN2JkMDEwYzJjZDIwMzc0MGMxOTBiZTQ4MTFkMDdlMGU5OTNlMDA4MDBiMWMyMDNhMjIzMmFjMjIzMmU3Y2ZkZDBkMjMwZDBjYzEwYzI2MzJlYjBhYTEwYTI2MzJhMWRmMDAwMDAzNjQxMDA4MTYxMDM0MWI3MDY5MWI0MDg1MmEwZDQ1MDUyODI1YTQ0NTFjMjAzNjIyNDg5MzIyNDg1OTA2NjEwNTAzMzEwODA2NjEwNjI2NDg5MzI2NDg1MWRmMDAwMDAzNjQxMDA4MWE0MDhhZDAyZTAwODAwOTFiNzA2YjJhMGQ0YjBiMzgyYmE5OTkyMjk4OWE3MDkwOWY2NzMzNzU2ZDUwNjBjMDIxZGYwZjY3MzRiNTY1NWZmYzIxNDAyYzBkMDE0YzBjMjA0MTZkYzA4YWQwMmJkMDM4MWI1MDgyYzNjZTAwODAwYzYwMjAwYWQwMmJkMDM4MWI2MDgyYzNjZTAwODAwMGMxMjFkZjA1Njc1ZmM5MjE0MDI5MGQwMTQ5MDkyMDQxNjA5MDVhZDAyYmQwMzgxYjUwODJjM2NlMDA4MDAwNmViZmYxNjk1ZmE5MjE0MDI5MGQwMTQyNzY5MjZhZDAyYmQwMzgxYjUwODJjM2NlMDA4MDA4NmYwZmY5MjE0MDI5MGQwMTQyNzY5YWRhZDAyYmQwMzgxYjUwODJjM2NlMDA4MDA4NmVhZmZhZDAyYmQwMzgxYjYwODJjM2NlMDA4MDBjNmU2ZmZhZDAyYmQwMzgxYjYwODJjM2NlMDA4MDBjNmQ2ZmZhZDAyYmQwMzgxYjYwODJjM2NlMDA4MDA0NmRmZmYwMDAwMDAzNjYxMDAwYzAzNTFhNzA3Y2QwMmM5MTE4MWM2MDZlMDA4MDBiMmEwZDRiMGIzODI1YTRiOTIxNDUwYTA5OWMwMTY1OTA2NzIwNDg1ODFhODA3MjFiNzA2NjJhMWUwMmEyYjZhNjJhZDA2ZTAwODAwYWQwNmIyMTQ1MTgxYWEwNzI5MDFlMDA4MDA5MjA0ODUyZDBhNzcxOTE2YTJhNDEyZDIwNDc4MGMzZTgxYTkwN2I4MDFjMmExZWRjYWJiMGMyY2UwMDgwMGQ4MTFlMjA0ODRkNzE2MWMyNzFlMTkyMjQ0ODRkMjA0NzhhMmE0MTMwYzNlODFhYjA3YjgwMWMyYTFlY2NhYmIwYzJjZTAwODAwMWIzMzMwMzA3NGQyYzNmNjU2N2RmNzFkZjAwMDAwMzZhMTAwYWQwNWJkMDE4MWRhMDYyMjUxMDhlMDA4MDA3ZDBhYzhkYTIxYmMwM2QxOWIwMmYxMzcwNGUxYzEwMzE3NjQzMWIyMTEwOGQ3MGMwMmM2MzUwMDkyMmExMWQwYWMyMGE5ZDdmMDk5MjA5MjY3MTE4MjAxMDAwYzFmYjY3ODAyODYyNjAwMGMwZjIwYzkyMGUwZGEyMGQ5ZDdjMjY3MTE4NjIyMDBkNzhjMjg5MjJhMTFkMGFjMjBhOWQ3ZjA5OTIwOTI2NzExODIwMTAwY2QwYWY2NzgwMjA2MjkwMGUwY2EyMDIwYjkyMGIyNjcxMTBjMDJjOWQ3NDYwMjAwZTBmYzEwMGMxZDBjMDJmMDJkODM4MjA3MDE0MTA5MDU2NjM4NDIwYzdhODEyNTA3YmQwN2UwMDgwMGJjM2E4MTI2MDcwYzdhZTAwODAwYWM5YWEyMTMwMWIyMTMwMjUxMmUwM2E3YmI2NDgxZWYwMmUwMDgwMDgxN2IwOGEyNTMwMWIyMDEwMGFkMDNlMDA4MDA1MGFhYzAwYzE5YTA5NTgzODYxNDAwYzhkNzFjYTI0MGJjMTBiOWQ3MWRmMGFkMGZkZDAzZWQwNTgxNzQwODBjMWNlMDA4MDA4NjAzMDBiZDA3Y2QwM2RkMDI4MTdkMDhhMjAxMDBlMDA4MDAwYzAyMWRmMDYwYTA3NGRkMDNlZDA1ODE3NDA4MGMxY2UwMDgwMDQ2ZmFmZjBjMTJjNmRiZmZhZDAzODE3YjA4YjIwMTAwZTAwODAwOWQwYWZjZjllZDAyYTJhM2VhMGMyY2QyMDcwMGIyYzExMDgxMWQwN2YyMDcxMTBjMjk5MGZmMjBmMjQ3MTFlMDA4MDBjZDAzYmQwNzgxN2MwOGEyMTMwMmEyNTcyYjkyMTMwMTkyNTcyYWEyMDEwMGUwMDgwMGI4ZDc0MGJiMTBiOWQ3MDZlNWZmNTBjOWMwNTZmY2Y3YWQwNzk4ZDc4MTUwMDg0MDk5MTA5OWQ3ZTAwODAwMmMwMjFkZjAzNjQxMDBjMTZkMDQ0YzQ5YTJhMTA4ODEzYjAzYTBhMjgyODgwODcxODQwM2FhODg4MjA4MjRhMTNkMDM4MDg4YTBhMDg4YTA4MjA4MTM3ODI3OTA4ODgyYjFjMTA0OGE3Nzg4MTcyMTZjMDM5ODU4YTg0ODkwNGI0NTcwNTRhMDU4NjU2ODM4YWM0NTYwZDRiMGQ4MWQ1NzZkMWRlMjA1MDYyMGQ5MTA1YTVlOGI1NTI3MDkxMGIwZjUxMGY3MWQwYTIwNDUxMGMwMzkxMDQwMzMyMDM5NThhMDRiNDU3MDU0YTA1ODY1NjA4NGIwYWM1NTg4MTg1NzY4MjE4ODE3NjIwNTA2Nzg0ODVhNTY4YjU1MjA2NzEwMjcwNzEwYjA5NTEwOTcxNjBhMjBiNTEwYzBhNzEwYjBhYTIwYTk0ODFkZjAwMDAwMzY2MTAwNTY3MjBlMGMwYjVjOGMyMTNhMDM4MWFkMDJhZDAyZTAwODAwODJhMGZhYTJhMGYwOTJhMWUwMmM4YjBjMWM0YzZkMmMwZTBjYWZmMjQyNTRlMjQyNDNkMjQyNDRjMjQyMjRjMjQyMjZjMjQyNDJjMjQyNDVjMjQyNDZjMjQyNGFiMjUyMTdiMjQyNDhiMjQyNGI5MjUyMTlhMjUyMTg4MjUyMWE4MWU5MDVhMmExMDQwYzA5OTkwMWEyNTIyNjVjMGExYzRiYjI0MjQ5YmQwMTBjMmNjMjQyNDcwYzRjZTAwODAwODEzZTAzYTJhMGZmZTAwODAwODE4YzAzMjBlNjAzMGMyYTIwOTAzNDk3MmEwMjIwNjIwMGUwMDgwMDgxOGQwM2UwMDgwMDgxOGUwM2UwMDgwMDgxOGYwM2UwMDgwMDgxOTAwM2UwMDgwMDgxOTEwM2UwMDgwMDgxOTIwM2UwMDgwMDgxOTMwM2UwMDgwMDgxOTQwM2UwMDgwMDgxOTUwM2UwMDgwMDgxOTYwM2UwMDgwMDgxOTcwM2UwMDgwMDgxOTgwM2UwMDgwMDIwZTYxMzEwMjAwMDgxOTkwMzlkMDJlMDA4MDA4MTlhMDNlMDA4MDAxZGYwMzY0MTAwY2MzMzIyYTA2NDFkZjAwYzBjMGMwYTc2OTMwNmE3NTIwMTFiY2MxYmFhYmQwM2EyYTA2NDgxZWUwMmEwYWM4MmUwMDgwMGEwMjA3NDFkZjAwMDM2ODEwMGMxYTUwMjYxM2IwMzQyYTEwODQwNDI4MjY4MDYzMmEwYTg0YTY2M2EzNjkyMDZiZjUyMjYyYzY3ZTkxM2EyMWMyNTgyYTA4MDgwODkyMDFiYWFhMjVjMjU4MjQ2YmZjNjA0MDA5MjE2NjBiMjA2YzIwYzFhMDAxYjQwMDBhYWExYTA5OTIwOTI1NjYwYTIxMzBjMGNhYjkyMDMxYTgxNzgwNTFiOTk5MjQzMWFlMDA4MDBhMjQzMWJhMjAzMWEwYzA3YjY5YTA1NzI0MzFhNzI1MzBjNzI0MzE2NzI0MzM4ODE3OTA1YWQwMmUwMDgwMGFkMDI4MTdhMDViZDAzZTAwODAwYTIxNjU0ODIyNjNiZDEzYzAzOTEzYjAzYzE2YzAzOTgwOWUxM2EwMzRhOTliMjA5MWQ5MjI5MmNlMGJiYTBiODBiNzgwZWIwOTljMGMwOTkxMDlhNzc3MDcxNDFkMDc3MTA4MDc3YzBkMDc3MTBmMDc3MTFhN2I3MDE3ZDBhYWQwMmJkMDdjZDAxMGMwZDgxYjgwMzU5NDFlMDA4MDBkMTNhMDNiMTNiMDM1ZDBhZTgwYmMxMzUwMzRhZWU5MjBlNzlmMTgxMDNlYzA5MGMwOWI2MmEwNTgyY2FmZDU2ZDgwZWEyMWQxYWUyMGQyOWFhY2FhMmNhMTRlMGFjODNhMGEwZjRhMjUxMDA0NjM2MDAyNjJhMDUyNjRhMDI2NjVhNDZhZDAyYjIxMTAwODE3YjA1YzEzYTAzOTIwZTFkZDIyZTJjYzBlOWEwZTgwZWYyMjYzYmUwZGRjMGUxNmMwM2M4MGNlMGRkMTBkYWNjZDEzYzAzYzBjMTQxZDBjYzEwZjBjY2MwZDBjYzEwZjBjYzExZTAwODAwYjEzYjAzYzEzNTAzZDEzYTAzZjE4MTAzODgwYjFjMGU0YTg4ODIwOGJmYTgxZjI3ZTgyNWYxYTUwMjkyMWYyNjFiOTk5MjVmMjZjNzhhMzJhMjBkMmM0N2VhMmNlMDlhMjA4MTc5MDM5MjRkMmNlMDA4MDBiMTNiMDM4NjA2MDBjNzhhMTdhMjBkMmM0NzZhMTE4MTc5MDM5MmEwZWY5MDlhMTA5MjRkMmNlMDA4MDBiMTNiMDM4ODQxZTgwYmYxYzEwMjRhZWVjMjBlYmZkMmEwZmJkMGNjMTBkODJlYzI0ZWJmYzJhMGJmYTgwYmYwZGQyMDRhYWE5MjBhYmZkOTJlYzA5OTEwOTI0YWJmMjgyMzBjMWE4MDIyYzAyMDJhOTMxZGYwYTIxMTAwODgxZjk5MTFmN2U4MGZjMjE2NTQ3N2JjMDllMjBkMjljYzNlZjJhNGUyZjkxMWJkMDc0YmMxOGJkMTgxZDcwM2NiZTFlMDA4MDA2NjU1MGI4YmExY2JiMTgxZDYwMzRiYzFlMDA4MDBhODIxNGM0Y2Q4MzFiODExODFjNzAzZGFiYmUwMDgwMGIxM2IwM2MxMzUwM2QxM2EwM2YxODEwM2EyNDMxNmM2YzdmZjAwMDAwMDM2YTEwMDBjMDY3Y2Y4NDk2MTI5NzFkZDAzZDk4MTIxM2IwMzQyYTBmZjg5OTE4OTAxOTFiNzAzYTgwMjUyMDkwNGIyYTEwODQwZTVjMDE2ZWUwYmIwYjU4MjcyYTBhOGJhYWFmMjBhNzk3YTdhNjYxZjE5YzIwYWUwOWMzYzgxODQwNWFkMDVlMDA4MDA5OGE3MGJhOTE2N2ExY2IyYzlmZTE2MWIxYzgxN2MwM2FkMDVlMDA4MDA0YmMxZGQwMWJkMGEzZDBhODE3ZDAzYWQwNWUwMDgwMDZkMGEwYjlhMTY5OTA3MTY2YTA3YTJjYWZkMTZiYTFmYjJjNmZlMTYzYjE5MjY0NjAyNjY1NjU0ODE4NTA1YWQwNWUwMDgwMDQ2MTIwMGEyOTcwYTgxN2UwM2IyMDcxMmUwMDgwMGNjM2EwYzBhYTI1NzBhYzgwMmQyYTEwOGQwZDU4MjFjMGVkYWNjZDIwY2JmYjYyNjAyYzY5YTAwZTBkZDIwMGM5YTBjMGJkMjRjYmY3MTRkMDM4MWFlMDM1MjQ3NGJlMDA4MDBhMWI3MDMwYzE5OTI0YTA1MGMwYmI5OTFjMmM2ZmMxNjVjZjNkMmM2ZmIxNmZkZjIyODkxMWRmMGIyMDcxNmQ4MDJjMmExMDhjMGM1ODJlMTNhMDNjYWRkZDIwZDFkYTgyN2UwZGRhMGQ4MGRmMTZjMDNkMGVhYzBmMGVlMTBlNzNiMDJjNjNmMDBjOTMxYjA5YWMwNTZhNjE3ZTIwNzM4ZTBlOWMwYWQwNTBjYmJkMGNlYzBkMTZjMDM4MTU3MDVkMGNjMTBlMDA4MDBlZDBhZTk1MTE2N2EwZGIxNGQwM2EyMGI1YTgxODYwNWIwYWFiMGE5NDFhMjBhMDNlMDA4MDBjMmNhZmVkODUxYzkwMWQ3M2MwMjg2MmQwMDkxM2EwM2U4NzFkODMxNTI0ZTAwYzgwMjg4NTFkYWNjZjIwYzFkYTA4OGMwOTBmZmEwZjgwZjJiYTg4YWZmODE2YzAzMmJmZjgwZmYxMDg4ODFlMTNkMDNmOTA4ZmQwYWUyMGUwMGY5OTFlMGUwMDQ1NjJlMDZmODQxZjIwZjAxNjYxZjVhZjY1YTU3ODE0ZDAzODIwODdjNTZlODA0ZDIwY2JmYjJhMDgwYjBiZDEwZjYzYTEwYzJhMDgwYzc4ZDU1ZDIwNzFiZWQwOWUyMGU0NGU3M2Q0YWE5YTFhY2NiNWMwYThiYjE4MTBjMDMwYzRjZTAwODAwYjIwMTA4OTIwNzFiYThhMWI3YjkxNmQ4MzFjODAyZGFjY2M4MmM2NzdjMGJmMTNhMDNlMjE3MDBmMjBmNDNmN2JlMThiNjNhMDI0NmI2ZmY5ODQxOTIwOTAxMjY1OTBhMjYzOTA3NTZiOWVjNDYwMDAwMGMzNmE4NjFjODcxYjg4MTUyNGMwMDM5MGI1NjRhZWJkOGE3ZDJjZGZlNTYxZDA3ZTgwMmYyYTEwOGYwZjU4MmZhZWVmMTNhMDNlMjBlMWRmMGVlYTBlODBlMGMyZmY5OTFmMTZjMDMyYmVlZjBlZTEwZjg4MWU5MGYwNmEyZmY4MTdjMDNhZDA1ZTAwODAwMGMwY2RkMDFiZDBhM2QwYTgxN2QwM2EyMDczYmUwMDgwMDZkMGEyNjFhMTEyNjJhMGUyNjNhMGI5MjA3M2I0NzE5OTU2NjM2OTJjNmYzZmY4MmExMDg1MjA3M2I3ODAyODA4NTgyOGE3NzgyYTBhODhhNzc4NmY3ZmZlZDA5NDZhMWZmOTIwNzEzYTI5NzBhMTZlOWRmZTYxYTAyMDY3ZWZmYjIwNzEyZTgwMmI3OWEyZGYyYTEwOGYwZjU4MmZhZWVkMjBlYmY1N2VkMWYwYzJhYjJhMjBlMGMxYzgxN2YwMzJjMDk5MDlkMjA5MjRlYmZlMDA4MDA4YzdhODE4MDAzNTI0YTA4ZTAwODAwOTIxNzA4YTgzN2IxNmMwM2EwYTNjMGIwYWExMGE3YjkxN2M4MDJkMmExMDhkMGQ1ODJkYWNjZDIwY2JmMGM4ZTU3NmQwNWUwZWQyMGUyNGNiZjgxNjkwNWFkMDVlMDA4MDA1NmJhZDc4MTg1MDVhZDA1ZTAwODAwMGM0OWEwNjk5MzQ2NmNmZmIyYTBlZmIwZGQxMDQ2NjNmZjM2ODEwMDUxM2EwMzcxM2IwMzYyYTBmZjQxYTgwM2JkMDNhMjA0MDUwYzEzNjcxYTQxODIwNDAxZDEzYzAzODBlMDA0MDdlODEwOTgyNGMyMTUxNzkwOTJjMGQwOTkxMGYwOTkxMWM3MjkyNGM4MDdmMmExMDhmMGZhODJmYWNjYzIwYzE3Yjk0MTgwY2MwMWMwYzgzMWU2MWMwMjA2NmYwMDgxN2IwMzBjNGJlMDA4MDBiODQxMjIwNDA0MGMwZDYwOTJjMDE2MjkyMTk4MDdlMmExMDhlMGUyODIwMDEyNDA5YWVlYzIwZTc5YTJjZTEwZWM0Y2YyMGUxNzgwZmYwMWYwZjgzMWU2MWYwYjgyMGUxNjgwODgwMTgwODgzMWE2MTgwZGY4MDVlMjJhMzdmMGYxNDFmMGVlYzAxNjllMjE2NjFjMDU4MjFhNzQxNjA4MjEwYzBjMDBmM2ExZTIxNDA3YTJhMTA4YTBhMjgyYTkwMWYwZWUyMGUyNTQwNzlhYWE5MjBhMTdlODA1ODA5OTAxOTA5ODMxYTYxOTVkOTkxMTgyMWE4MGUwZTFlNDgwZWVjMGUwZTBlNDk3ZWIzNTgyMDU0Njk3MjgyZmIyMDU1MWY2M2IyOTgyMGE3OTY2MTgyM2IyMDU0NTkyMWE3Y2I3MzkxYWU5MjE4MjJhM2ZjOTMxNjY5ODEwODFiMDAzYWQwMmUwMDgwMGM4MzEwYzBkZTgyMTA2MTQwMDkyMDQwYzNjYmExNjg5MDRlNzNhNDViMjE0MDhmMGJiMjBiMjU0MDg0NjBlMDA4MjA1NDVlMjFhN2M4NzNlMmViMjE0MDhmMGJiMjBiMjU0MDg5MjBhNzk2NjE5MWZlMjBhMTY4MGVlMDFlMGU4MzFlNjFlMTNmMjJhM2ZjOTMxNjY5ZjBiODFiMDAzYWQwMmUwMDgwMGM4MzEwYzBkMGMwZTU2N2MwNWEyMDQwZDljM2E5MjA1NDc5N2JhMGViODAxYTgwN2JhYWFhMjJhM2YyNjlhMDI2NjhhMzhhODA1ZjIwNTQ4YTBhMWU0ZjczZTBlZTIxNDBhYjIwNTQ5ZTBlYWMwZTBlMGU0ZTdiYjYxMjIwNDA0NjcxMjBmODJhMTA4ODA4MjgyMjgwNzhhMjIyMjAyZjUyMjQ0MDRhMjU0MGFkMjQ0MGM0NjExMDAwY2U5OTcxYWMxYTIwNDBjNTZiYWZiYTIwNDBkMjIwNDA0OGMzYTFiYWFhMjQ0MGQ2MGIyYzBlZDBhYzBlYzkzZTI0NDBkMTY0YjA5MWM5YzY3MTIyMjBjYWEwYzBiOTE0ZDAzODFhZTAzMjI0OTUzYzI0OTUyZTAwODAwMzI0NDAwMWRmMDIyMDQwNDBjMGFhMjQ0MGQ4NmYwZmYxZGYwYjIwNDA3Njc5YjA0YTI0NDA3YmQwYWRjZWU4MWFmMDNlMDA4MDBiMjA0MDdjMjA0MDFhMDkwMTRhMTNjMDM5MDkyYzAzMGNjMjBjMjQ0MDFhMDk5MTA5OTI0MmQwYjY3MWJjYjgxYWUwM2ExNGQwMzVjMDk5MjRhNTJiMjRhNTMwYzBiMGNhYWUwMDgwMGI4MDdjMmExMDhjMGMyODJjYWJiYjIwYmY1MzI0NDAwYjI0NDA3Njc5YmEwZDIwNDAxZTJhMGZlZTBkZDEwZDI0NDAxMWRmMGQyNDQwY2QyNDQwZGYyMTQwNzgyMTQwOGE4MDUyMjA0MDIyMjQ0MDRhMGExZTRhMjU0MGFmMDg4MTA4NzlmMGFkMjU0MDhhMjU0MDk1YzBjMDYwNDAwYzIxNDA5YjJhMDc4YzBjYWMwYzBjMGU0YzczYmU4MWM5Y2QyNTQwNzg2Y2FmZmNjNmNlMjBhZjMxYmVlZTI0YWYzOTgwNzBjMWNjNjc3ZmYzNjYxMDFhMmEwZGZiMmMxMTAwYzRjNDI1MTNjODFlOTA1MGMxZGQ5NDFkOTUxZTAwODAwYTJhMGRmYjJjMTE0ODFlOTA1MGM0Y2UwMDgwMGEyYTBkZmIyYzExMDgxMGMwMzBjNGNlMDA4MDBhMmEwZGZiMmMxMTQ4MTBjMDMwYzRjZTAwODAwMGMwYWQxYjcwNmYyYzE3OGMyYTNmMjQyMTEzYzgxNjAwN2U4NTE5ODQxOTBlZTAxYTA5OTAxOTk0MWU5NTFiMjIzMTE5MGVlMjA4MGVlMjBlMGJiMTBiMjYzMTFjNzI0Nzc0N2FjMDI0NjQ2MDBhZDAzODE2MTA3MjBiMDc0ZTAwODAwZDIyMzExYTFiNzA2ZDA5MTA0MTZhOTNkYTIxYTA0YTBhMDA0NTYxYTNkYmQwNWEyYzEyMDFjMGM5MWJlMDI4MWQ0MDI5MDlkMTA5MjYzMTFlMDA4MDA4MTExMDdlMDA4MDBiMmMxMjBkMmMxNDBjZDBhODExMjA3YTJjMzZjZTAwODAwYTJjMzdjYjJjMTQ0ODFkNDAyMGNjY2UwMDgwMGQyMDMwMGVkMDdhMmEzZjNiMmMxNDA4MTEzMDcwYzJjZTAwODAwMGMwMjFkZjA5MmEwZDI5N2E0MDIwNjMzMDBkMmEwZDI0N2FkMDIwNjU4MDBiMGUwMDQxNmJlMDhiZDA0MGMwMjgxMWEwNmFkMDJlMDA4MDAyMjQzMDZhZDAzMGMxYjgxMGYwNzJjMGNlMDA4MDA0NmYxZmY5MmEwOGY5MDk0YzA1NjQ5MDZhOTA2OTIwNTA3ZTY3MjA1MTY4OTQ3YTY3MjA0MGJhOTE2MGE0NzBjMTRjMWMxMDZiMjFkNGMwYzFkYzJkY2ZmNDBiYjIwYjI1YzRjYTY3MjAxMGMwZGFkMDNiZDAyMGMxYzgxMjQwNzdjZmVlMDA4MDBkY2JhMGM1YTgxMjUwN2JkMDNlMDA4MDAxNjZhNDM4MTI2MDcwYzVhZTAwODAwMTZiYTQyMGMxOTU2ZjkzYWIyMTEzYzFjMWE4MTFhMDZhOTA2ZTAwODAwMjgwNjFkZjBjMmEzZmFjNzI0NzFiMjYxMTk0N2FjMDIwNjIzMDBjZDA1ZGQwNDBjY2UwYzFmYTFiNzAyODE2MjA3YTA5YjIwOTI2MzExYWQwM2JkMDJlMDA4MDAyZDBhMWRmMGMyYTA3NmM3YTQwMjg2NDIwMDQ3YWMwMjA2ZDRmZjA3NmJiYjQyYTBhNGFkMDM5MWI5MDI4MTYzMDc5MDliMjA5MjYzMTFlMDA4MDBiZDAyNGFlMzBjMmExYzZjODEwMDA3ZDFkYjA1ZTAwODAwMGMwYTgxMWEwNjFjNmNjMjQzMDNiMjExM2NlMDA4MDBjNmI2ZmZhMmEzZjhhN2E0MDJjNjQxMDA0N2FhMDIwNjUxMDBhZDAyYmQwM2NkMDRkZDA1ZWQwNjgxNjQwN2ZkMDdlMDA4MDBjNmFkZmZiMmE0MzNiN2E0MDI0NjNmMDA0N2FiMDIwNjUyMDAwYzE0MjBiMDc0ODE2MTA3YWQwM2UwMDgwMDQyNDMwNmFkMDNjMjAzMDM4MTBmMDcwYzBiZTAwODAwMDZhMmZmYzJhM2VmYzdhNDAyODY1ZTAwNDdhYzAyMDY3MTAwYWQwMzgxNjEwNzIwYjA3NGUwMDgwMDBjMmFiZDAzYzFlMjAyOTIyMzExODExMDA3YzA5OTIwOTI2MzExZTAwODAwYmQwNTgxZDQwMjFjMGNlMDA4MDAwYzJhYmQwMjBjOGNkMWRiMDVlMmEwYTQ4MTAwMDdlYWUzZTAwODAwMWM2YTBjODk4MTVjMDY5MjQzMDNlMDA4MDBkMmEwODhkYWQzMTZjYTJkYWQwMmJkMDNlZDA2ZmQwNzgxNjUwN2MyYTA3MmUwMDgwMDQ2ODRmZmIyYTA3NWI3YTQwMjQ2NDcwMDQ3YWIwMjg2YWFmZjQyYTQwMDkyMDMwNWIyMDUwM2IyNDMwNmIwOTljMDU2OTkxOGIyMTEzYzBjMGE4MTFhMDZhOTA2ZTAwODAwYmQwM2MyMDMwNjBjMGE5MjIzMTE4MTBiMDc0MDk5MjA5MjYzMTFlMDA4MDA4NjcyZmZhMmEzZjZhMGE0YzA1NjlhZTZhZDAyYmQwM2NkMDQ4MTY2MDdkZDA1ZTAwODAwMDY2Y2ZmOTJhNDMyOTA5NGMwNTZmOWU0MjBiMDc0ODE2MTA3YWQwM2UwMDgwMGFkMDNjMjAzMDMwYzBiMGMwOTgxMGYwNzkyNDMwNmUwMDgwMGM2NjFmZmEyYTNmOWEwYTRjMDU2NmFlMmJkMGZlZDA3YTJhM2VhMGMyYzgxMWQwN2QyMDMwMGUwMDgwMGFkMDM4MTY3MDdiZDA2ZTAwODAwYzY1N2ZmOTJhNDM0OTBhNGMwNTZlYWRmYjIxZDA0YjBiMDA0MTY0YjE2M2MzYTgxMjUwN2JkMDNlMDA4MDAxNjdhMTU4MTI2MDczYzNhZTAwODAwMTZjYTE0M2M0YTgxMjUwN2JkMDNlMDA4MDAxNmZhMTM4MTI2MDczYzRhZTAwODAwMTY0YTEzYWQwMzIwYjA3NGVkMDcwYzBjZGQwNmYyMTEzYzgxNjgwNzU5MDFlMDA4MDAwNjZiZmY4MmEzZWU4MDg0YzA1NjM4ZGEwYzBhY2QwMmRkMDM4MWY0MDYxYzNiZTAwODAwODYzYWZmOTJjNDhjNTZjOWQ4MGMwYTgxMWEwNmJkMDRlMDA4MDA4MTVjMDYxYzdhZTAwODAwNDJhMDg4NGE0MzE2MGExYWFkMDJiZDAzZGQwNGVkMDZmZDA3ODE2OTA3YzJhMDcwZTAwODAwMDYyZGZmOTJhM2YwOTA5NGMwNTYzOWQ1ZDE2YTA3YzEzNzA0ZDBiYjIwYzBiYjIwYjI2MzExYTY3MjA4ZTFiYzAzZTBlYjIwZTI2MzExYWQwMmJkMDNjZDA0ZGQwNWVkMDY4MTZiMDdmZDA3ZTAwODAwYzYxZWZmYWQwNWJkMDNjZDAyZGQwNmVkMDc4MTE0MDcwYzRmZTAwODAwODYxOWZmMGMyYTgxMjUwN2JkMDNlMDA4MDAxNjRhMDk4MTI2MDcwYzJhZTAwODAwMTY5YTA4YjIxMTNjMGMwYTBjMGM4MTFhMDZjOTA2ZTAwODAwYWQwMzgxNmMwN2IyMDMwNmUwMDgwMDBiOWExNmY5YzJhZDAzMGM0YjkyMjMxMTgxMjgwNzQwOTkyMDkyNjMxMWUwMDgwMGEyYTNmNjZiYjMwYzJjZDIwMzAwODE2ZDA3MGMzZWUwMDgwMGUyYTBhNDkyMDMwNmVhZTMxNjI5MGFiZDAyMGMyYTNjMWM4MTAwMDdkMWRiMDVlMDA4MDAzYzE5OTI0MzAzMDZmYWZlZWQwN2EyYTQyOGIyYzE2MDBjMmM4MTZlMDc5MmE0MzQzYzcyMjI1MTMxOTI1MTMwZDIwMzAwZTAwODAwMjkwNjNjNzIxZGYwYjIxMTNjMmM1YTgxMWEwNmE5MDZlMDA4MDAwNjE3ZmY4MTFhMDZhMWJiMDI5MjIzMTEwYzBjYzI0MzEzYjIxMTNjYTA5OTIwOTI2MzExYTgwNmUwMDgwMGFkMDM4MTI4MDcwYzJiZTAwODAwOTIwMzA1MTY5OTEwMmNhYTgxMjUwN2JkMDNlMDA4MDAxNmJhMGI4MTI2MDcyY2FhZTAwODAwMTYwYTBiYWQwMzBjMWIwY2FjMGMwOTgxMGYwNzkyNDMwNmUwMDgwMDA2MDFmZmJkMDIwYzJhMWNhYzgxMDAwN2QxZGIwNWUwMDgwMDFjYTk0NmQ2ZmY4MTZmMDdhZDBkZTAwODAwNDZjZmZlMGMwOTA2ZjRmZWJkMDQyYzFhODExYTA2YTkwNmUwMDgwMDQ2ZjRmZWIxMWYwNzBjNmM4MTRlMDM5MjIzMTFhMmEyMDBhMDk5MjA5MjYzMTFhZDA0ZTAwODAwZWNhYWIxYjcwNmIyMWIwNDA3ZWIyMjdiYTViMTIwMDc4MWQ0MDIxYzBjZTAwODAwYWQwMmJkMDNkZDA1ZWQwNmZkMDc4MTY5MDdjMmEwNmZlMDA4MDA4NmI4ZmVhZDA0ODEyMTA3YmQwM2UwMDgwMGJkMDIwYzJhMWM0Y2QxZGIwNWUyYTBhNDgxMDAwN2VhZTNlMDA4MDAxYzQ5MDZiNGZmYWQwMzgxMjgwN2IyYTEwNGUwMDgwMDQyNDMxM2VkMDdhMmEzZjY2YmIzMGMyY2QyMDMwMDBjMDk4MTZkMDc5MjQzMDZlMDA4MDBiZDAyMGMyYTFjYmNkMWRiMDVlMmEwYTQ4MTAwMDdlYWUzZTAwODAwMWNiZmYyNDMwMzg2YzlmZWFkMDMyMGIwNzRjZDA1ZDIxMTNjODE3MDA3MGNhZWUwMDgwMDQ2YzRmZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FyM2svMzAxMDEvYXIza2JkYWRkci5wc3QgYi9hcjNrLzMwMTAxL2FyM2tiZGFkZHIucHN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MjA4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcjNrLzMwMTAxL2FyM2tiZGFkZHIucHN0CkBAIC0wLDAgKzEgQEAKKzEyNjA0MTdmMDMwMA0KZGlmZiAtLWdpdCBhL2FyM2svMzAxMDFjb2V4L1BTX0FTSUMucHN0IGIvYXIzay8zMDEwMWNvZXgvUFNfQVNJQy5wc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE3ZDIxMwotLS0gL2Rldi9udWxsCisrKyBiL2FyM2svMzAxMDFjb2V4L1BTX0FTSUMucHN0CkBAIC0wLDAgKzEsOTMgQEAKKworLy8gQ29leCBDb25maWd1cmF0aW9uCisjCitbSDpTXTAwMTcKK1tIOlNdMDAyMgorW0g6QV1kMSBkMSAyMCAwMCAwMiAwMSAwMiAwOSAwYyAwMCAyNCAwZiAxMiAwMCAwMCAwMSAKKyAgICAgMDAgMDEgMDAgMDAgMDEgMDEgMDEgMDEgMDEgMDAgMDAgMDAgMDEgMDAgMDAgMDAgCisgICAgIGQyIGQyIAorLy8gUmFkaW8gdGFibGUgVEFHIAorIworW0g6U10wMTJDCitbSDpTXTAwNDIKK1tIOkFdQjEgQjEgMTIgMDAgMDggMDAgMDEgMzAgMDYgMDAgMDIgMDAgMDAgMjAgMDIgMDAgCisgICAgIDA0IDAwIDBDIDQwIDAxIDAwIDQ4IDAwIDAwIDQ4IDU0IDlBIDAyIDAwIDAwIDA4IAorICAgICAwMiAwMCA0OCAwMCA4OSBFRSA3MCBFNiAzOCAwMCBEOCA3MCBFRiA1MiAwMiAwMCAKKyAgICAgMDAgNDAgMDAgMDAgMDggMDAgMzEgMDAgMDAgMDAgMDQgMDAgMTAgMDAgMDAgMDAgCisgICAgIEIyIEIyIAorLy8gU3lzdGVtIGNvbmZpZyBUQUcgd2l0aCAweDFDIAorIworW0g6U10wMDEzCitbSDpTXTAwQjYKK1tIOkFdQzEgQzEgMTcgMDIgMDYgMDAgMDEgMzAgNTUgMDAgMEUgQ0MgMzMgMDYgMDEgMDggCisgICAgIDY0IDk2IDE0IDA1IEZGIEZGIDA1IDgwIDAwIDAwIEZGIENDIDAwIENDIDAxIDAwIAorICAgICAyMCA4MCBGRiBDQyAwMiBDQyAwNCAwMCBERiBFQyA0MyBGOCAwMCAyMSAwMCBFMCAKKyAgICAgRkYgQ0MgMDMgQ0MgMDYgMDAgODAgRjAgMEUgMjggODAgRjQgMTIgMjAgODAgRjggCisgICAgIDE0IDE4IDgwIEZDIDFBIDEwIDgwIDAwIDFFIDA4IDgwIDA0IDFDIDAwIEZGIENDIAorICAgICAwNCBDQyAwMSAwMCAxQSAxMiA0MCA5NiAwMSBDMCAyOCAwMCAwMCAwMCBDMCAwMSAKKyAgICAgNDAgMDYgMDAgMDEgMDAgMDAgQzggMDAgMDAgRjAgMDAgMDAgRkYgQ0MgMEMgQ0MgCisgICAgIDA4IDAwIDAxIDAzIDAwIDdFIDA4IDA4IDAwIDdFIDAxIDAxIDAwIDdFIDAxIDAzIAorICAgICAwMCA3RSAwMyAwMyAwMCA3RSA2MSA2MyAwMCA3RSA2MyA2NSAwMCA3RSA2QSA2QyAKKyAgICAgMDAgN0UgRkYgQ0MgMDkgQ0MgMDAgQzkgRkYgQ0MgMEIgQ0MgMEEgMTcgMDcgQjIgCisgICAgIDVFIDAxIDUyIDBBIDYwIDA5IDA1IDA2IDE0IDRCIDAwIDAwIDU4IDAyIEQwIDA3IAorICAgICAwMCA0MSBGRiBDQyBDMiBDMiAKKy8vRXh0ZXJuIDMyayArIDI0TWh6IENQVQorLy9iaXQgNzogc2xlZXAgZGlzYWJsZS9lbmFibGUsIGRlZmF1bHQgdG8gZW5hYmxlCisvL2UuZy4gdG8gZGlzYWJsZSBzbGVlcCwgY2xlYXIgYml0IDc6CisvL1tIOkFdMDggMDAgMDAgMDAKKyMKK1tIOlNdMDAyMQorW0g6U10wMDA0CitbSDpBXTg4IDAwIEJEIDFGCisvL0JkYWRkcgorLy8jCisvL1tIOlNdMDAwMQorLy9bSDpTXTAwMDYKKy8vW0g6QV04OSA2MCA0MSA3ZiAwMyAwMAorLy9BdWRpbyBmb3IgSW50ZWwgSTJTIGZvcm1hdAorIworW0g6U10wMDAyCitbSDpTXTAwMDQKK1tIOkFdNjMgMDAgMDEgMzMKKy8vQXVkaW8KKyMKK1tIOlNdMDAwMworW0g6U10wMDA0CitbSDpBXWRkIGU1IDJlIDAwCisvL0F1ZGlvCisjCitbSDpTXTAwMTUKK1tIOlNdMDAwNAorW0g6QV0xMiAwMCAwMCAwMAorLy9BdWRpbworIworW0g6U10wMDE2CitbSDpTXTAwMDQKK1tIOkFdMDAgMDAgYTcgMDIKKyMKKy8vUExDCitbSDpTXTAwMUYKK1tIOlNdMDAwOAorW0g6QV0wMSAxQSAwNiAxNCA1MCBCNCAzMiA5NgorLy9TbmlmZiBSZWNvdmVyeQorIworW0g6U10wMDNECitbSDpTXTAwMTgKK1tIOkFdQTAgMEYgMDAgMDAgMDAgMDggMDAgMDAgMEYgMDAgN0QgMDQgRTggMDMgMDEgMDAKKyAgICAgMDEgMDAgMDEgMDUgMDAgMDIgMUYgMDEKKy8vQlJNIENvbmZpZworIworW0g6U10wMDI2CitbSDpTXTAwMEMKK1tIOkFdMDEgMjAgNDYgMDEgMEYgMDIgMjggMTQgMDEgMjggNjggMDEKKy8vVExQTQorLy9bNzk6NjRdIC0gVExQTSB3YWtldXAgdGltZW91dCBpbiBtcywgZGVmYXVsdCAxMAorLy9bMTI3Ojk2XSAtIFRMUE0gaWRsZSB0aW1lb3V0IGluIG1zLCBkZWZhdWx0IDEwMDAKKy8vZS5nLiB0byBjaGFuZ2UgdGhlIHdha2V1cCB0aW1lb3V0IHRvIDUgYW5kIGlkbGUgdGltZW91dCB0byAyMDAwCisvL1tIOkFdMDMgMDAgMDMgMDAgMDAgMDAgMDAgMDAgMDUgMDAgMEEgMDAgRDAgMDcgMDAgMDAKKy8vICAgICBFOCAwMyAwMCAwMCBFOCAwMyAwMCAwMAorIworW0g6U10wMDIzCitbSDpTXTAwMTgKK1tIOkFdMDMgMDAgMDMgMDAgMDAgMDAgMDAgMDAgMDUgMDAgMDUgMDAgRTggMDMgMDAgMDAKKyAgICAgRTggMDMgMDAgMDAgRTggMDMgMDAgMDAKZGlmZiAtLWdpdCBhL2FyM2svMzAxMDFjb2V4L1BTX0FTSUNfYWNsSGlnaFByaS5wc3QgYi9hcjNrLzMwMTAxY29leC9QU19BU0lDX2FjbEhpZ2hQcmkucHN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZmI4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcjNrLzMwMTAxY29leC9QU19BU0lDX2FjbEhpZ2hQcmkucHN0CkBAIC0wLDAgKzEsOTMgQEAKKworLy8gQ29leCBDb25maWd1cmF0aW9uCisjCitbSDpTXTAwMTcKK1tIOlNdMDAyMgorW0g6QV1kMSBkMSAyMCAwMCAwMiAwMSAwMiAwOSAwYyAwMCAyNCAwZiAwNCAwMCAwMCAwMSAKKyAgICAgMDAgMDEgMDAgMDEgMDEgMDEgMDEgMDEgMDEgMDAgMDAgMDAgMDEgMDAgMDAgMDAgCisgICAgIGQyIGQyIAorLy8gUmFkaW8gdGFibGUgVEFHIAorIworW0g6U10wMTJDCitbSDpTXTAwNDIKK1tIOkFdQjEgQjEgMTIgMDAgMDggMDAgMDEgMzAgMDYgMDAgMDIgMDAgMDAgMjAgMDIgMDAgCisgICAgIDA0IDAwIDBDIDQwIDAxIDAwIDQ4IDAwIDAwIDQ4IDU0IDlBIDAyIDAwIDAwIDA4IAorICAgICAwMiAwMCA0OCAwMCA4OSBFRSA3MCBFNiAzOCAwMCBEOCA3MCBFRiA1MiAwMiAwMCAKKyAgICAgMDAgNDAgMDAgMDAgMDggMDAgMzEgMDAgMDAgMDAgMDQgMDAgMTAgMDAgMDAgMDAgCisgICAgIEIyIEIyIAorLy8gU3lzdGVtIGNvbmZpZyBUQUcgd2l0aCAweDFDIAorIworW0g6U10wMDEzCitbSDpTXTAwQjYKK1tIOkFdQzEgQzEgMTcgMDIgMDYgMDAgMDEgMzAgNTUgMDAgMEUgQ0MgMzMgMDYgMDEgMDggCisgICAgIDY0IDk2IDE0IDA1IEZGIEZGIDA1IDgwIDAwIDAwIEZGIENDIDAwIENDIDAxIDAwIAorICAgICAyMCA4MCBGRiBDQyAwMiBDQyAwNCAwMCBERiBFQyA0MyBGOCAwMCAyMSAwMCBFMCAKKyAgICAgRkYgQ0MgMDMgQ0MgMDYgMDAgODAgRjAgMEUgMjggODAgRjQgMTIgMjAgODAgRjggCisgICAgIDE0IDE4IDgwIEZDIDFBIDEwIDgwIDAwIDFFIDA4IDgwIDA0IDFDIDAwIEZGIENDIAorICAgICAwNCBDQyAwMSAwMCAxQSAxMiA0MCA5NiAwMSBDMCAyOCAwMCAwMCAwMCBDMCAwMSAKKyAgICAgNDAgMDYgMDAgMDEgMDAgMDAgQzggMDAgMDAgRjAgMDAgMDAgRkYgQ0MgMEMgQ0MgCisgICAgIDA4IDAwIDAxIDAzIDAwIDdFIDA4IDA4IDAwIDdFIDAxIDAxIDAwIDdFIDAxIDAzIAorICAgICAwMCA3RSAwMyAwMyAwMCA3RSA2MSA2MyAwMCA3RSA2MyA2NSAwMCA3RSA2QSA2QyAKKyAgICAgMDAgN0UgRkYgQ0MgMDkgQ0MgMDAgQzkgRkYgQ0MgMEIgQ0MgMEEgMTcgMDcgQjIgCisgICAgIDVFIDAxIDUyIDBBIDYwIDA5IDA1IDA2IDE0IDRCIDAwIDAwIDU4IDAyIEQwIDA3IAorICAgICAwMCA0MSBGRiBDQyBDMiBDMiAKKy8vRXh0ZXJuIDMyayArIDI0TWh6IENQVQorLy9iaXQgNzogc2xlZXAgZGlzYWJsZS9lbmFibGUsIGRlZmF1bHQgdG8gZW5hYmxlCisvL2UuZy4gdG8gZGlzYWJsZSBzbGVlcCwgY2xlYXIgYml0IDc6CisvL1tIOkFdMDggMDAgMDAgMDAKKyMKK1tIOlNdMDAyMQorW0g6U10wMDA0CitbSDpBXTg4IDAwIEJEIDFGCisvL0JkYWRkcgorLy8jCisvL1tIOlNdMDAwMQorLy9bSDpTXTAwMDYKKy8vW0g6QV04OSA2MCA0MSA3ZiAwMyAwMAorLy9BdWRpbyBmb3IgSW50ZWwgSTJTIGZvcm1hdAorIworW0g6U10wMDAyCitbSDpTXTAwMDQKK1tIOkFdNjMgMDAgMDEgMzMKKy8vQXVkaW8KKyMKK1tIOlNdMDAwMworW0g6U10wMDA0CitbSDpBXWRkIGU1IDJlIDAwCisvL0F1ZGlvCisjCitbSDpTXTAwMTUKK1tIOlNdMDAwNAorW0g6QV0xMiAwMCAwMCAwMAorLy9BdWRpbworIworW0g6U10wMDE2CitbSDpTXTAwMDQKK1tIOkFdMDAgMDAgYTcgMDIKKyMKKy8vUExDCitbSDpTXTAwMUYKK1tIOlNdMDAwOAorW0g6QV0wMSAxQSAwNiAxNCA1MCBCNCAzMiA5NgorLy9TbmlmZiBSZWNvdmVyeQorIworW0g6U10wMDNECitbSDpTXTAwMTgKK1tIOkFdQTAgMEYgMDAgMDAgMDAgMDggMDAgMDAgMEYgMDAgN0QgMDQgRTggMDMgMDEgMDAKKyAgICAgMDEgMDAgMDEgMDUgMDAgMDIgMUYgMDEKKy8vQlJNIENvbmZpZworIworW0g6U10wMDI2CitbSDpTXTAwMEMKK1tIOkFdMDEgMjAgNDYgMDEgMEYgMDIgMjggMTQgMDEgMjggNjggMDEKKy8vVExQTQorLy9bNzk6NjRdIC0gVExQTSB3YWtldXAgdGltZW91dCBpbiBtcywgZGVmYXVsdCAxMAorLy9bMTI3Ojk2XSAtIFRMUE0gaWRsZSB0aW1lb3V0IGluIG1zLCBkZWZhdWx0IDEwMDAKKy8vZS5nLiB0byBjaGFuZ2UgdGhlIHdha2V1cCB0aW1lb3V0IHRvIDUgYW5kIGlkbGUgdGltZW91dCB0byAyMDAwCisvL1tIOkFdMDMgMDAgMDMgMDAgMDAgMDAgMDAgMDAgMDUgMDAgMEEgMDAgRDAgMDcgMDAgMDAKKy8vICAgICBFOCAwMyAwMCAwMCBFOCAwMyAwMCAwMAorIworW0g6U10wMDIzCitbSDpTXTAwMTgKK1tIOkFdMDMgMDAgMDMgMDAgMDAgMDAgMDAgMDAgMEEgMDAgMEEgMDAgRTggMDMgMDAgMDAKKyAgICAgRTggMDMgMDAgMDAgRTggMDMgMDAgMDAKZGlmZiAtLWdpdCBhL2FyM2svMzAxMDFjb2V4L1BTX0FTSUNfYWNsTG93UHJpLnBzdCBiL2FyM2svMzAxMDFjb2V4L1BTX0FTSUNfYWNsTG93UHJpLnBzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTNjMzAxCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay8zMDEwMWNvZXgvUFNfQVNJQ19hY2xMb3dQcmkucHN0CkBAIC0wLDAgKzEsOTMgQEAKKworLy8gQ29leCBDb25maWd1cmF0aW9uCisjCitbSDpTXTAwMTcKK1tIOlNdMDAyMgorW0g6QV1kMSBkMSAyMCAwMCAwMiAwMSAwMiAwOSAwYyAwMCAyNCAwZiAwNCAwMCAwMCAwMSAKKyAgICAgMDAgMDEgMDAgMDAgMDEgMDEgMDEgMDEgMDEgMDAgMDAgMDAgMDEgMDAgMDAgMDAgCisgICAgIGQyIGQyIAorLy8gUmFkaW8gdGFibGUgVEFHIAorIworW0g6U10wMTJDCitbSDpTXTAwNDIKK1tIOkFdQjEgQjEgMTIgMDAgMDggMDAgMDEgMzAgMDYgMDAgMDIgMDAgMDAgMjAgMDIgMDAgCisgICAgIDA0IDAwIDBDIDQwIDAxIDAwIDQ4IDAwIDAwIDQ4IDU0IDlBIDAyIDAwIDAwIDA4IAorICAgICAwMiAwMCA0OCAwMCA4OSBFRSA3MCBFNiAzOCAwMCBEOCA3MCBFRiA1MiAwMiAwMCAKKyAgICAgMDAgNDAgMDAgMDAgMDggMDAgMzEgMDAgMDAgMDAgMDQgMDAgMTAgMDAgMDAgMDAgCisgICAgIEIyIEIyIAorLy8gU3lzdGVtIGNvbmZpZyBUQUcgd2l0aCAweDFDIAorIworW0g6U10wMDEzCitbSDpTXTAwQjYKK1tIOkFdQzEgQzEgMTcgMDIgMDYgMDAgMDEgMzAgNTUgMDAgMEUgQ0MgMzMgMDYgMDEgMDggCisgICAgIDY0IDk2IDE0IDA1IEZGIEZGIDA1IDgwIDAwIDAwIEZGIENDIDAwIENDIDAxIDAwIAorICAgICAyMCA4MCBGRiBDQyAwMiBDQyAwNCAwMCBERiBFQyA0MyBGOCAwMCAyMSAwMCBFMCAKKyAgICAgRkYgQ0MgMDMgQ0MgMDYgMDAgODAgRjAgMEUgMjggODAgRjQgMTIgMjAgODAgRjggCisgICAgIDE0IDE4IDgwIEZDIDFBIDEwIDgwIDAwIDFFIDA4IDgwIDA0IDFDIDAwIEZGIENDIAorICAgICAwNCBDQyAwMSAwMCAxQSAxMiA0MCA5NiAwMSBDMCAyOCAwMCAwMCAwMCBDMCAwMSAKKyAgICAgNDAgMDYgMDAgMDEgMDAgMDAgQzggMDAgMDAgRjAgMDAgMDAgRkYgQ0MgMEMgQ0MgCisgICAgIDA4IDAwIDAxIDAzIDAwIDdFIDA4IDA4IDAwIDdFIDAxIDAxIDAwIDdFIDAxIDAzIAorICAgICAwMCA3RSAwMyAwMyAwMCA3RSA2MSA2MyAwMCA3RSA2MyA2NSAwMCA3RSA2QSA2QyAKKyAgICAgMDAgN0UgRkYgQ0MgMDkgQ0MgMDAgQzkgRkYgQ0MgMEIgQ0MgMEEgMTcgMDcgQjIgCisgICAgIDVFIDAxIDUyIDBBIDYwIDA5IDA1IDA2IDE0IDRCIDAwIDAwIDU4IDAyIEQwIDA3IAorICAgICAwMCA0MSBGRiBDQyBDMiBDMiAKKy8vRXh0ZXJuIDMyayArIDI0TWh6IENQVQorLy9iaXQgNzogc2xlZXAgZGlzYWJsZS9lbmFibGUsIGRlZmF1bHQgdG8gZW5hYmxlCisvL2UuZy4gdG8gZGlzYWJsZSBzbGVlcCwgY2xlYXIgYml0IDc6CisvL1tIOkFdMDggMDAgMDAgMDAKKyMKK1tIOlNdMDAyMQorW0g6U10wMDA0CitbSDpBXTg4IDAwIEJEIDFGCisvL0JkYWRkcgorLy8jCisvL1tIOlNdMDAwMQorLy9bSDpTXTAwMDYKKy8vW0g6QV04OSA2MCA0MSA3ZiAwMyAwMAorLy9BdWRpbyBmb3IgSW50ZWwgSTJTIGZvcm1hdAorIworW0g6U10wMDAyCitbSDpTXTAwMDQKK1tIOkFdNjMgMDAgMDEgMzMKKy8vQXVkaW8KKyMKK1tIOlNdMDAwMworW0g6U10wMDA0CitbSDpBXWRkIGU1IDJlIDAwCisvL0F1ZGlvCisjCitbSDpTXTAwMTUKK1tIOlNdMDAwNAorW0g6QV0xMiAwMCAwMCAwMAorLy9BdWRpbworIworW0g6U10wMDE2CitbSDpTXTAwMDQKK1tIOkFdMDAgMDAgYTcgMDIKKyMKKy8vUExDCitbSDpTXTAwMUYKK1tIOlNdMDAwOAorW0g6QV0wMSAxQSAwNiAxNCA1MCBCNCAzMiA5NgorLy9TbmlmZiBSZWNvdmVyeQorIworW0g6U10wMDNECitbSDpTXTAwMTgKK1tIOkFdQTAgMEYgMDAgMDAgMDAgMDggMDAgMDAgMEYgMDAgN0QgMDQgRTggMDMgMDEgMDAKKyAgICAgMDEgMDAgMDEgMDUgMDAgMDIgMUYgMDEKKy8vQlJNIENvbmZpZworIworW0g6U10wMDI2CitbSDpTXTAwMEMKK1tIOkFdMDEgMjAgNDYgMDEgMEYgMDIgMjggMTQgMDEgMjggNjggMDEKKy8vVExQTQorLy9bNzk6NjRdIC0gVExQTSB3YWtldXAgdGltZW91dCBpbiBtcywgZGVmYXVsdCAxMAorLy9bMTI3Ojk2XSAtIFRMUE0gaWRsZSB0aW1lb3V0IGluIG1zLCBkZWZhdWx0IDEwMDAKKy8vZS5nLiB0byBjaGFuZ2UgdGhlIHdha2V1cCB0aW1lb3V0IHRvIDUgYW5kIGlkbGUgdGltZW91dCB0byAyMDAwCisvL1tIOkFdMDMgMDAgMDMgMDAgMDAgMDAgMDAgMDAgMDUgMDAgMEEgMDAgRDAgMDcgMDAgMDAKKy8vICAgICBFOCAwMyAwMCAwMCBFOCAwMyAwMCAwMAorIworW0g6U10wMDIzCitbSDpTXTAwMTgKK1tIOkFdMDMgMDAgMDMgMDAgMDAgMDAgMDAgMDAgMEEgMDAgMEEgMDAgRTggMDMgMDAgMDAKKyAgICAgRTggMDMgMDAgMDAgRTggMDMgMDAgMDAKZGlmZiAtLWdpdCBhL2FyM2svMzAxMDFjb2V4L1JhbVBhdGNoLnR4dCBiL2FyM2svMzAxMDFjb2V4L1JhbVBhdGNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg5ZjBjCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay8zMDEwMWNvZXgvUmFtUGF0Y2gudHh0CkBAIC0wLDAgKzEsMiBAQAorMjVmMw0KKzAwMDAwMDAwMGUyMDAwMDA1MDgwMDAwMDAwMDE1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGQ4ZDU1MzAwMjRlNzUzMDAzMGUxNTMwMDYwZTE1MzAwZWNlMTUzMDA3MGUzNTMwMDhjZTQ1MzAwNTRlMTUzMDA4OGUxNTMwMDQwYWY1MzAwODhlMzUzMDA4Y2UzNTMwMGQ0ZTI1MzAwZDhlMjUzMDBmY2UyNTMwMDNjZTM1MzAwMjRlMzUzMDA1NGUzNTMwMDMwZGQ1MzAwMjRiMDUzMDA3OGQ1NTMwMDMwZDU1MzAwMmNhMDUzMDA0MGQ5NTMwMDg4ZTk1MzAwMjRjYzUzMDA5MGRiNTMwMDA4ZTE1MzAwNzBkYzUzMDAzOGRkNTMwMDAwMDAwMDAwMDAwMDAwMDA4MDAxOTgwMGQ4MDE5ODAwNmMwMjk4MDBlYzA0OTgwMGZjMDY5ODAwNWMwODk4MDA5YzA4OTgwMDIwMDk5ODAwY2MwOTk4MDAzNDBhOTgwMDM0MGI5ODAwYjAwYjk4MDA3MDBjOTgwMGU0MGM5ODAwNTgwZDk4MDBjNDBkOTgwMDMwMGU5ODAwNjAwZTk4MDAzODBmOTgwMGQwMGY5ODAwNTQxMTk4MDA4NDE4OTgwMDUwMWI5ODAwNTgyMjk4MDBkMDIxOTgwMDA0MjM5ODAwYjgyMzk4MDA5ODI0OTgwMGQ0MjQ5ODAwNzQyNTk4MDAwMDAwMDAwMDAwMDAwMDAwMzY0MTAwODEzYTAzNDE2ZjAzODIwODUxNDgwNDE2MTgwNDBjMTNiYzA0MGMwNzYxM2IwMzBjMDI2ODA2NzY5NDIyNTJhMTA4NTA1MjgyMWIyMjVhNTY0MjA1MDYyMDIwNzQyNjU0MDUyNjM0MDI2NjQ0MDc5MjA1YmYxNzY5MDExYjc3M2RmMDQ2MDAwMDBjMDc3MDQ4YzAwYzAyNDAyMzgzMWRmMDBjMDIxZGYwMDAzNjQxMDA1NjkyMDhjMDIwMDAyMWNlMDk5MWYzMDIwYzA0NDI2OTkyYzAyMDAwNDI2OTkzOTgxMjhkMDRlZDA5MTZjOTA2M2QwOWE4MDJjODU5YjgwOWI5MTJhOTA5OTkwMjhjOWNhMjFlMDZiODJlZTAwYzAwODYwMzAwYTIxZTA4OGJjZTVjMGI4MWQ2MDIwYzhkZTAwODAwOTgxMjBjNGJiY2I5YzFmMzAyZDgxOWMwMjAwMGVkMGNkMjZjOTBkZDBjYzAyMDAwNDI2YzkzYzAyMDAwYTgxMmIyNmM5MmE4MWFjMDIwMDBiMjJjOTEwYzBjYjBiYWMwYTYxYjA0ZTgxM2E3OWUwYWMwMjAwMDgxZjMwMjBjMWZmMjY4OTMxZGYwMDAwMDM2YTEwMGEyYTBkY2JkMDE4MTBjMDMwYzFjZTAwODAwYTJhMGQyNGJiMTBjNGM0MjEyMDI1MjEyMDE2MTJkMDc4MjAxMDA5MmEwZDQ5MDg4ODI3MjAyMDA4YTI2MjIwMjgwODEwYzAzMGMxNmUwMDgwMDMxM2QwMzBjMDlhMjAzMDA1OTgxMDc2YTE2OTBiOWEwMzBiYmEwYjIxYjA0MDdlYjBjMWI5OTkwOTA3NDE2YjlmZTQ2MDAwMDBjMTk2NjE5MDQwYzA5YzYwMDAwNmQwOTBjMTljYzI5MGMxMjFkZjAwYzJjNzk1MTgxMGMwMzUxM2IwM2IyYTEwOGIwYjI4MmI5NjFhODA1MGMwMjIyNTEwNGJhYWFhMjBhMWRiMmEwY2RiYWFhOGJiMWUwMDgwMDcyMTEwNDgxMGMwMzI5MzFhODA1NjBkNmEwMzAzZGEwYjIwMzBlYzJhMTA4YzBiYjgyMGM0Y2JhYWFhMjBhMWRiMmEwYzhiYWFhY2JiMWUwMDgwMDhiYjEwYzJjODEwYzAzMjI1MTA0YTgwNWY4MzFkMjAzMGVlMmExMDhlMGRkODJmOTcxZGFhYWEyMGExZGQyYTBjZGRhYWFlMDA4MDA2MjExMDRjYmIxMGM0YzgxMGMwM2Q4NjFhODA1MjkzMWRhYWFhMjBhMWRkMmEwYzhkYWFhZTAwODAwZTg1MWM4MzFlMGUxMDQxNjFlMTJiZDA0YTEzYzAzODFlZjAyYTBhYzEwZTAwODAwZDIwMzE1Yjg3MWU4ODFhMGY0YzBhODExZmFlZWUwNDBmNGIwYWFjMGIyMDMxMGEwMjBmNGQwOWJjMGMyYzlmZWFjN2RmMTNhMDMxNjhjMGY2NjJjMWZmMjBmNTM5YzlmNTIwMzBlODJhMTA4ODA1NTgyODEzYjAzODgwODVhODg4MjA4Nzk1MTNiMDMwYjg4MTY4ODBkYTBmMGY0ZTBhMGY0Zjc5YTJmMGMxMjFkZjAwYzAyNzdiNjBjNjA5N2MwOTdiYjA2MmJiYWI3OTQwMTBjMTJkODA1ZTIwMzBlZjJhMTA4ZjBlZTgyZWFkZGQyMGQ3OWNjNGQ4MmNjZmUxNmQ4MDgxZGYwYjk0MWY5OTFkOWExYzliMWJhOWFmN2E5MWE0MGEyYzA4MWI1MDNiODQxZTAwODAwYzhiMWI4NDFkOGExYjA4YTgyZjg5MThhNDQ0MDQwZjRiOTQxZDlhMWM5YjFiYTlmNDdhOTE4MjBhNGMwODFiNTAzYjg0MWUwMDgwMGI4NDFjOGIxYjA4YTgyZDhhMThhMjIyMDIwZjQ0N2IyMDRiYTIyMjAyMGY0YjdiMjA5YmEyMmJhNDQ0MDQwZjQyMDIwZjRiMDkyYzA5MDg0YzAxNjU4ZjYyMGE0YzAxNmZhZjU5YWFkYTBiNGMwMTY3YmY1YjY2YzQwNGJjYWM3YjQwMjA2ZDNmZmQyYzJmYzQ3YmQwMmM2ZDBmZjBjMDIxZGYwYWQwYzgxZWYwMmJkMDRlMDA4MDA4NmI3ZmZmMjBmNTNjZDA5ZDJjZGZlZDBkMDc0MTZiZmYxZjY2ZDAyNDZjNWZmMmJjOWQyY2RmZWQwZDA3NDg2YzJmZjFjNGI2NzM3MDJjNmMzZmY3MGU2YzBlNzNiMDI4NmMxZmZmMmMyZmVmMGY0YzA1NmRmZWYwYzEyODZiZWZmMDAwMDAwMzY4MTAwODE1MzA4MzI0MTE0ZTAwODAwM2QwYTgxNTIwOGFkMDJlMDA4MDBkMTU0MDgzN2FhMDcwYzBhYTI1MjAyODYwMDAwYTIxMjAyYzIwMTE0ZGFjY2MyMGMwMDkyMTIwM2EwY2M4MjdjZTRiMmNjMWZjMGJjYjNiMGI1MjExYmJiNDBiYjEwYjI1MjAxOWM2OTgxNTMwOGUwMDgwMDhjZWFiMjEyMDNhMjEyMDFiYWFhMWJhYTQwYWExMGEyNTIwMWExM2QwMzcyMDExNGMyMGEwMDBjMDkwNzZjMTY5MDg5YTBhMDg4YTA4MjE4MDQwN2U4MGMxYjk5OTA5MDc0MTZiOWZlNDYwMDAwMGMxOTMxM2IwMzUxM2EwM2QyYTBjODY2MTkwNzBjMGI5MjAxMDA0NjAwMDAwYzFiOTA2OWEwYTA2NmEwYmNmYjBjNGM4MWU5MDViODAzZDIwNjBlZTJhMTA4ZTBkZDgyYTJhMGM4ZGFiYmIyMGIxZGQ5MTFhYWFiNTBiYmEwZTAwODAwMGMyY2Q4MTFiODAzODFlOTA1ZGFiYmIyMGIxZGEyYTBjZGFhYWI1MGJiOTBiMmNiMTBlMDA4MDBkMmEwYzg4MTJkMDc5MmEwZDQ5MDc3ODJiODAzN2E3ODcyMDc4MDgyYTEwODgwNzc4MjBjNGM3YWJiYjIwYjFkODFlOTA1ZGFhYjUwYmJhMGUwMDgwMDBjMmNiODAzODFlOTA1N2FiYmIyMGIxZGEyYTBjZGFhYWI1MGJiOTBiMmNiMTBlMDA4MDA0YmI2YTJhMGQyODFlOTA1MGM0Y2UwMDgwMGEyYTBkYzBjMWM4MWU5MDViMmMxMTRlMDA4MDAzMTJlMDM4MTU1MDhhZDAyZTAwODAwMzA5YWMwNTZhOTA5YzIxMjAxYTIxMjAyZTIwMTE0YjE1NDA4MGI5ZTFiZGViYThlODIwODAwZTBkOTkzZDBkMDc0YTA4ODgyZGFiYmYyMGIwMGUyYzgxZmEwZmY4MjgwZThiM2UwZTUyMTFiZWVkMmNmMWZmMGRmYjM0MGVlMTBlMGUwZjRkMGQ1MjExYmRkNDBkZDEwZDBkMGY0ZTdiZDI1ODJjY2ZlODA4MGY0ODI1MjAxOTIwYjAwYTA5OTgyZjJjOTFmOTBmOWIzZjBmNTIxMWJmZjQwZmYxMGYwZjBmNDg3M2Y4MzA2MDkwMDJiOWM5MDkwZjQ5MjUyMDFlMjBiMDBhMGVlODJkMmNlMWZlMGRlYjNkMGQ1MjExYmRkNDBkZDEwZDBkMGY0ZDdiOTAyYzZkNmZmMGMwYWEyNTIwMjgxNTMwOGUwMDgwMGRjMWE5MWI3MDY5MjA5MDc4MDk5MDE5MDk4MzFjYzM5MGMwYWEyNTIwMTFkZjAwMDAwMzY2MTAwODE0ZDA4YWQwMmUwMDgwMDBjMDU0MWE1MDg2MmEwZDQ2MDYzODJhMjEyMDE2YTQ0YjIwNDhhNmQwYThjZGIyNjFiMGIyNjJiNTIyMTJlMDMxZGYwMmQwYjFkZjBiMjEyMDI4MjE0ODQ5MjE0ODNiNzM4Mzc5NzNiMzRjMmNiZmVhNzJjMWI4MWVmMDJlMDA4MDA5YzJhODE1MzA4ZTAwODAwY2NhYTgxYWMwN2UwMDgwMGNjMmEwYzAyMWRmMGJkMDM4MTU4MDhhZDAyZTAwODAwYjIxMjAyOTIxMjAxNTZiYjBkNTI0NDhhMDZlYmZmYTEzZDAzNTI0NDhhOTIwYTAwNzJhMGNkMDc2OTE4OWQwNTkwYjlhMGEwYmJhMGIyMWIwNDA3ZWIwYzFiOTk5MDkwNzQxNmI5ZmU0NjAwMDAwYzE5MzEzYjAzZDJhMGM4NTEzYTAzNjYxOTA3MGMwYjkyMDEwMDQ2MDAwMDBjMWI5MDY5YTBhMDY2YTBiY2ViMGM0Y2I4MDM3MjA2MGU4MmExMDg4MDc3ODJhMmEwYzg3YWJiYjIwYjFkODFlOTA1YWFhYjUwYmJhMGUwMDgwMDBjMmNiODAzODFlOTA1N2FiYmIyMGIxZGEyYTBjZGFhYWI1MGJiOTBiMmNiMTBlMDA4MDBkMmEwYzg3MmEwY2RiODAzNDIwNDc0ODJhMTA4ODA0NDgyMGM0YzRhYmJiMjBiMWQ4MWU5MDVkYWFiNTBiYmEwZTAwODAwYjgwMzBjMmM0YWJiYjIwYjFkODFlOTA1N2FhYjUwYmI5MGIyY2IxMGUwMDgwMDRiYjZhMmEwZDI4MWU5MDUwYzRjZTAwODAwODE1NTA4YWQwMmUwMDgwMGEwMjBmNDFkZjA2MDk5YzA1NjU5ZWQ1MjQ0OGEwNmMwZmYwMDAwMDAzNmMxMDAyMjQxMDAzMjQxMDE0OTExNTkyMTY5MzE3OTQxYTJhMGRlMGMxY2IyYzEyMDIyNDEyMDgxZTkwNTkyMjExYWQyMDE2NGUyMjExOGU5NTFkMjQxMTg5OTcxZTAwODAwODEwNjA5YWQwMWUwMDgwMDJkMGExZGYwMDAwMDM2NjEwMGEyYTBkZWJkMDE4MTBjMDMwYzFjZTAwODAwNDIwMjAzMGMwNzYxNTkwNzgyYTBkNDgwODc4MjhhNjZhMjA2N2Y5MjAxMDA2NjRhMWVmNjc5MWI4MTdlMDNjMjE2NmFhMjE2NjliMjAyMDJjYWFhYjBhYWMwYmQwNGUwMDgwMGNjMmExY2IyMWRmMDUyMDIwNjgyMDIwMmFjNDViNjM1MjI5MjE2Njk2MjE2NmEwYzIzOWE2NjgwNjZjMDMwYTZjMDgxN2UwM2JkMDRlMDA4MDAxNjVhZmQyYjMzMzAzMDc0NTczM2U5MWI3NzcwNzA3NDY2OTc5NjBjMDIxZGYwMDAwMDM2NjEwMDBjMDNhZDAyYTkwMWIxNTkwN2MyYTBkNGMwYzM4MmNhYmJjMjBiN2Y2NjRjMjJjODAxZDgwMTcyMWI2YWIyMWI2OWQyMWQwMmMyMWMwMTVkMGRkN2I3MDE1ZDA3Nzc5NTM5MmQwYjZkMGM3ZDBkMDYwZDAwMWIzMzMwMzA3NDY2OTNjMzBjMDM1MWNmMDY0MmEwZmYzMGIzYTA1MGJiYTA4MjBiMDA0NzE4MDk4MTRjMDhhODAxZTAwODAwZmMxYTFiMzMzMDMwNzQxNjEzZmVjNjBkMDAyZDBjNmQwYjBjMTRiZDA1NDBhNzgyODFlZjAyYWFhNjIwYWFjMGUwMDgwMGRjM2FhMmEwNjQ4MWI1MDNiZDA0ZTAwODAwMWNlOWE3YjkwNDIxMmUwMzFkZjAxYjQ0NDA0MDc0NjY5NGQwODZlNWZmMGMwMjFkZjAwMDAwMzY0MTAwYWQwM2JkMDQ4MTU5MDgwYzBjZTAwODAwYWQwNTgxMDUwNzBjMjlkMjEzMTRmMTA5MDVlOGQzMGM0YzBjMGJiMjQzMTZjMjQzMDFmMGVlMTBlOWQzZDI1NTAxYzIxMzJiYzI1NTAzYjI0NTAwOTI0NTA0ZTAwODAwZDIyMzExODc3ZDE3ZTIwM2M0MDc2ZTExYmQwNGEyYTQzMDBjMmNkMjAzMDA4MWUzMDYwYzNlZTAwODAwODE1MDA4YWQwM2UwMDgwMDFkZjAwMDM2NjEwMDQwODEwNDBjMGFhMjUxMDAxNjU4MDhkMTcyMDg1YzVlYzIwMzAxYjIwMzAwODBjYzExY2FiYmIwYjBmNGEwY2E5MGQwY2NhMGYyMWMwMjFiYWFiNzlmNWJkMjFjMDFkMjUxMDBlMmE0MTBlMGViYzAxNjZlMDlmMmE0MTFmMGZiYzAxNmRmMDg4MmE0MmM4MDhiYzAxNjQ4MDg5MmE0MmQ5MDliYzAxNmI5MDdhMmEzZmRhMGFiYzAxNjJhMDdjMmE0MThjMGNiYzAxNjZjMDUwYzFhYmQwNTgxNzUwODBjMWNlMDA4MDBhMGEwNzRiZDAyZWQwNTBjMWM4MTc0MDhkZDAxZTAwODAwODYwYzAwYTBhMDc0ZTc5YThmMDZlOGZmYWQwNTgxZGEwNjJiYjFlMDA4MDAxNjdhMDRjMjBhMTFiMjAzMDAzNzZjNDEzYzk5OTc5YjNjODFhNTA1OTJhMGY3OTA5YzEwOTI0YTExZTAwODAwMGMwMjFkZjBiZDAyZWQwNTBjMGEwYzFjODE3NDA4ZGQwMWUwMDgwMDA2ZmFmZjYwYTA3NGJkMDJlZDA1MGMxYzgxNzQwOGRkMDFlMDA4MDAwNmY1ZmZiMjAzMDBhZDAyY2QwM2RkMDVlZDA2ODE4OTA4ZmQwNGUwMDgwMDg2ZWZmZjAwMzY2MTAwNjEyZDA3ODJhMGQ0ODA4MjgyOGE2NmY2NzIxNDgxYmQwNWEyMDZhOGUwMDgwMDgxNjEwOGUwMDgwMGEyNDMwMWEyNDQwYzgxYTMwODBjMTlmMjAzMDBmMjQxMDBlMjAzMDFlMjQxMDFkMjAzMDIwYmU1ZTBlOTkzZDI0MTAyZDIwNjgwYzIwMzAzYzI0MTAzMGMyY2IyMDMwN2IyNDEwNGJkMDFhMjAzMDRhMjQxMDVhMmE0MTBlMDA4MDBiMWI3MDI5MWIzMDI4MjI2MzFhMjI2MmQ5MDg4MjBiMGFhMjBhMjY2MmQ4MjY2MzExZGYwMDAzNjgxMDA2MTJkMDc4MmEwZDQ4MDgyODI4YTY2ZjY3MjIyODFiZDA1YTIwNmE4ZTAwODAwODE2MTA4ZTAwODAwYmQwYWEyNDMwMTkyMTQwMmExMzUwM2IyNDQwY2EwOTkyMDkyNTQwMjIyMDMwMDIyNDEwMGYyMDMwNWYyNDEwMWUyMDMwMWUyNDEwMmQyMDMwMmQyNDEwM2QxYjcwMmMyMDMwM2MyNDEwNGMyMjYyZGIyMDMwNmIyNDEwNWIxYjMwMmEyMDMwN2QwY2MyMGRkMDFhMjQxMDZhMjI2MzE5MjAzMDg5MjQxMDcwYzE5YjBhYTIwODIxMzA1ODI0MTA4NzIxMzA1YjJhNDJjNzA3ODQxNzI0MTA5NDIxMzA2NDI0MTBhMjIxMzA2ODE3NDA4MjAyODQxMjI0MTBiZjIwMzA0ZjI0MTBjZTIwMzBlYTI2NjMxYzI2NjJkZTI0MTBkZTIwNjgwMWMwYzBiYTVhMGE5OTNlMDA4MDAxZGYwMDAzNjYxMDAyMDYwZjQ4MWE0MDhhZDA2ZTAwODAwMmQwYTI2ZTYxMTkyYTA2ZDk3MTYwYmEyYTA4MWE3MTYwNWIyYTA2ZWI3OTYwMjYyYTQxMDYyNDEwMDQyNDEwMmJkMDEwYzJjMGMxOTBiZTU4MmEwZDQ2MGE4NDFhMjQxMDE4MDgzODJlMGU5OTMzMTJkMDdhMmEzZWI4YTMzODExYjA3ZDIwMzgwZTAwODAwYzFjMjAzYjIyMzJkZDIyMzMxN2NmZWUwZTIzMGUwZGQxMGQyNjMzMWMwYmIxMGIyNjMyZDFkZjAwMDAwMzY2MTAwMjA2MGY0ODFhNDA4YWQwNmUwMDgwMDJkMGEyNmU2MTE5MmEwNmQ5NzE2MGJhMmEwODFhNzE2MDViMmEwNmViNzk2MDI2MmE0MmM2MjQxMDA0MjQxMDJiZDAxMGMyYzBjMTkwYmU1ODJhMGQ0NjBhODQxYTI0MTAxODA4MzgyZTBlOTkzMzEyZDA3YTJhNDI4OGEzMzgxNmUwN2QyMDM4MGUwMDgwMGMxYzIwM2IyMjMyZGQyMjMzMTdjZmVlMGUyMzBlMGRkMTBkMjYzMzFjMGJiMTBiMjYzMmQxZGYwMDAwMDM2NjEwMDIwNjBmNDgxYTQwOGFkMDZlMDA4MDA4MmEwZDQ4MDgzODIzMWE1MDgyZDBhOGEzMzI2ZTYwNTkyYTA2ZDk3OTYwMjYyYTQxMDhjOTU5MjAzODUwYzFhYTA5OTIwOTI0Mzg1NjI1MTAwYTJhM2VhYmQwMTBjMmNkMjAzNzQwYzE5MGJlNDgxMWQwN2UwZTk5M2UwMDgwMGIxYzIwM2EyMjMyYWMyMjMyZTdjZmRkMGQyMzBkMGNjMTBjMjYzMmViMGFhMTBhMjYzMmExZGYwMDAwMDM2NjEwMDIwNjBmNDgxYTQwOGFkMDZlMDA4MDA4MmEwZDQ4MDgzODIzMWE1MDgyZDBhOGEzMzI2ZTYwNTkyYTA2ZDk3OTYwMjYyYTQyYzhjOTU5MjAzODUwYzFhYTA5OTIwOTI0Mzg1NjI1MTAwYTJhNDI3YmQwMTBjMmNkMjAzNzQwYzE5MGJlNDgxMWQwN2UwZTk5M2UwMDgwMGIxYzIwM2EyMjMyYWMyMjMyZTdjZmRkMGQyMzBkMGNjMTBjMjYzMmViMGFhMTBhMjYzMmExZGYwMDAwMDM2NDEwMDgxNjEwMzQxYjcwNjkxYjQwODUyYTBkNDUwNTI4MjVhNDQ1MWMyMDM2MjI0ODkzMjI0ODU5MDY2MTA1MDMzMTA4MDY2MTA2MjY0ODkzMjY0ODUxZGYwMDAwMDM2NDEwMDgxYTQwOGFkMDJlMDA4MDA5MWI3MDZiMmEwZDRiMGIzODJiYTk5OTIyOTg5YTcwOTA5ZjY3MzM3NTZkNTA2MGMwMjFkZjBmNjczNGI1NjU1ZmZjMjE0MDJjMGQwMTRjMGMyMDQxNmRjMDhhZDAyYmQwMzgxYjUwODJjM2NlMDA4MDBjNjAyMDBhZDAyYmQwMzgxYjYwODJjM2NlMDA4MDAwYzEyMWRmMDU2NzVmYzkyMTQwMjkwZDAxNDkwOTIwNDE2MDkwNWFkMDJiZDAzODFiNTA4MmMzY2UwMDgwMDA2ZWJmZjE2OTVmYTkyMTQwMjkwZDAxNDI3NjkyNmFkMDJiZDAzODFiNTA4MmMzY2UwMDgwMDg2ZjBmZjkyMTQwMjkwZDAxNDI3NjlhZGFkMDJiZDAzODFiNTA4MmMzY2UwMDgwMDg2ZWFmZmFkMDJiZDAzODFiNjA4MmMzY2UwMDgwMGM2ZTZmZmFkMDJiZDAzODFiNjA4MmMzY2UwMDgwMGM2ZDZmZmFkMDJiZDAzODFiNjA4MmMzY2UwMDgwMDQ2ZGZmZjAwMDAwMDM2NjEwMDBjMDM1MWE3MDdjZDAyYzkxMTgxYzYwNmUwMDgwMGIyYTBkNGIwYjM4MjVhNGI5MjE0NTBhMDk5YzAxNjU5MDY3MjA0ODU4MWE4MDcyMWI3MDY2MmExZTAyYTJiNmE2MmFkMDZlMDA4MDBhZDA2YjIxNDUxODFhYTA3MjkwMWUwMDgwMDkyMDQ4NTJkMGE3NzE5MTZhMmE0MTJkMjA0NzgwYzNlODFhOTA3YjgwMWMyYTFlZGNhYmIwYzJjZTAwODAwZDgxMWUyMDQ4NGQ3MTYxYzI3MWUxOTIyNDQ4NGQyMDQ3OGEyYTQxMzBjM2U4MWFiMDdiODAxYzJhMWVjY2FiYjBjMmNlMDA4MDAxYjMzMzAzMDc0ZDJjM2Y2NTY3ZGY3MWRmMDAwMDAzNmExMDBhZDA1YmQwMTgxZGEwNjIyNTEwOGUwMDgwMDdkMGFjOGRhMjFiYzAzZDE5YjAyZjEzNzA0ZTFjMTAzMTc2NDMxYjIxMTA4ZDcwYzAyYzYzNTAwOTIyYTExZDBhYzIwYTlkN2YwOTkyMDkyNjcxMTgyMDEwMDBjMWZiNjc4MDI4NjI2MDAwYzBmMjBjOTIwZTBkYTIwZDlkN2MyNjcxMTg2MjIwMGQ3OGMyODkyMmExMWQwYWMyMGE5ZDdmMDk5MjA5MjY3MTE4MjAxMDBjZDBhZjY3ODAyMDYyOTAwZTBjYTIwMjBiOTIwYjI2NzExMGMwMmM5ZDc0NjAyMDBlMGZjMTAwYzFkMGMwMmYwMmQ4MzgyMDcwMTQxMDkwNTY2Mzg0MjBjN2E4MTI1MDdiZDA3ZTAwODAwYmMzYTgxMjYwNzBjN2FlMDA4MDBhYzlhYTIxMzAxYjIxMzAyNTEyZTAzYTdiYjY0ODFlZjAyZTAwODAwODE3YjA4YTI1MzAxYjIwMTAwYWQwM2UwMDgwMDUwYWFjMDBjMTlhMDk1ODM4NjE0MDBjOGQ3MWNhMjQwYmMxMGI5ZDcxZGYwYWQwZmRkMDNlZDA1ODE3NDA4MGMxY2UwMDgwMDg2MDMwMGJkMDdjZDAzZGQwMjgxN2QwOGEyMDEwMGUwMDgwMDBjMDIxZGYwNjBhMDc0ZGQwM2VkMDU4MTc0MDgwYzFjZTAwODAwNDZmYWZmMGMxMmM2ZGJmZmFkMDM4MTdiMDhiMjAxMDBlMDA4MDA5ZDBhZmNmOWVkMDJhMmEzZWEwYzJjZDIwNzAwYjJjMTEwODExZDA3ZjIwNzExMGMyOTkwZmYyMGYyNDcxMWUwMDgwMGNkMDNiZDA3ODE3YzA4YTIxMzAyYTI1NzJiOTIxMzAxOTI1NzJhYTIwMTAwZTAwODAwYjhkNzQwYmIxMGI5ZDcwNmU1ZmY1MGM5YzA1NmZjZjdhZDA3OThkNzgxNTAwODQwOTkxMDk5ZDdlMDA4MDAyYzAyMWRmMDM2NDEwMGMxNmQwNDRjNDlhMmExMDg4MTNiMDNhMGEyODI4ODA4NzE4NDAzYWE4ODgyMDgyNGExM2QwMzgwODhhMGEwODhhMDgyMDgxMzc4Mjc5MDg4ODJiMWMxMDQ4YTc3ODgxNzIxNmMwMzk4NThhODQ4OTA0YjQ1NzA1NGEwNTg2NTY4MzhhYzQ1NjBkNGIwZDgxZDU3NmQxZGUyMDUwNjIwZDkxMDVhNWU4YjU1MjcwOTEwYjBmNTEwZjcxZDBhMjA0NTEwYzAzOTEwNDAzMzIwMzk1OGEwNGI0NTcwNTRhMDU4NjU2MDg0YjBhYzU1ODgxODU3NjgyMTg4MTc2MjA1MDY3ODQ4NWE1NjhiNTUyMDY3MTAyNzA3MTBiMDk1MTA5NzE2MGEyMGI1MTBjMGE3MTBiMGFhMjBhOTQ4MWRmMDAwMDAzNjYxMDA1NjcyMGUwYzBiNWM4YzIxM2EwMzgxYWQwMmFkMDJlMDA4MDA4MmEwZmFhMmEwZjA5MmExZTAyYzhiMGMxYzRjNmQyYzBlMGNhZmYyNDI1NGUyNDI0M2QyNDI0NGMyNDIyNGMyNDIyNmMyNDI0MmMyNDI0NWMyNDI0NmMyNDI0YWIyNTIxN2IyNDI0OGIyNDI0YjkyNTIxOWEyNTIxODgyNTIxYTgxZTkwNWEyYTEwNDBjMDk5OTAxYTI1MjI2NWMwYTFjNGJiMjQyNDliZDAxMGMyY2MyNDI0NzBjNGNlMDA4MDA4MTNlMDNhMmEwZmZlMDA4MDA4MThjMDMyMGU2MDMwYzJhMjA5MDM0OTcyYTAyMjA2MjAwZTAwODAwODE4ZDAzZTAwODAwODE4ZTAzZTAwODAwODE4ZjAzZTAwODAwODE5MDAzZTAwODAwODE5MTAzZTAwODAwODE5MjAzZTAwODAwODE5MzAzZTAwODAwODE5NDAzZTAwODAwODE5NTAzZTAwODAwODE5NjAzZTAwODAwODE5NzAzZTAwODAwODE5ODAzZTAwODAwMjBlNjEzMTAyMDAwODE5OTAzOWQwMmUwMDgwMDgxOWEwM2UwMDgwMDFkZjAzNjQxMDBjYzMzMjJhMDY0MWRmMDBjMGMwYzBhNzY5MzA2YTc1MjAxMWJjYzFiYWFiZDAzYTJhMDY0ODFlZTAyYTBhYzgyZTAwODAwYTAyMDc0MWRmMDAwMzY4MTAwYzFhNTAyNjEzYjAzNDJhMTA4NDA0MjgyNjgwNjMyYTBhODRhNjYzYTM2OTIwNmJmNTIyNjJjNjdlOTEzYTIxYzI1ODJhMDgwODA4OTIwMWJhYWEyNWMyNTgyNDZiZmM2MDQwMDkyMTY2MGIyMDZjMjBjMWEwMDFiNDAwMGFhYTFhMDk5MjA5MjU2NjBhMjEzMGMwY2FiOTIwMzFhODE3ODA1MWI5OTkyNDMxYWUwMDgwMGEyNDMxYmEyMDMxYTBjMDdiNjlhMDU3MjQzMWE3MjUzMGM3MjQzMTY3MjQzMzg4MTc5MDVhZDAyZTAwODAwYWQwMjgxN2EwNWJkMDNlMDA4MDBhMjE2NTQ4MjI2M2JkMTNjMDM5MTNiMDNjMTZjMDM5ODA5ZTEzYTAzNGE5OWIyMDkxZDkyMjkyY2UwYmJhMGI4MGI3ODBlYjA5OWMwYzA5OTEwOWE3NzcwNzE0MWQwNzcxMDgwNzdjMGQwNzcxMGYwNzcxMWE3YjcwMTdkMGFhZDAyYmQwN2NkMDEwYzBkODFiODAzNTk0MWUwMDgwMGQxM2EwM2IxM2IwMzVkMGFlODBiYzEzNTAzNGFlZTkyMGU3OWYxODEwM2VjMDkwYzA5YjYyYTA1ODJjYWZkNTZkODBlYTIxZDFhZTIwZDI5YWFjYWEyY2ExNGUwYWM4M2EwYTBmNGEyNTEwMDQ2MzYwMDI2MmEwNTI2NGEwMjY2NWE0NmFkMDJiMjExMDA4MTdiMDVjMTNhMDM5MjBlMWRkMjJlMmNjMGU5YTBlODBlZjIyNjNiZTBkZGMwZTE2YzAzYzgwY2UwZGQxMGRhY2NkMTNjMDNjMGMxNDFkMGNjMTBmMGNjYzBkMGNjMTBmMGNjMTFlMDA4MDBiMTNiMDNjMTM1MDNkMTNhMDNmMTgxMDM4ODBiMWMwZTRhODg4MjA4YmZhODFmMjdlODI1ZjFhNTAyOTIxZjI2MWI5OTkyNWYyNmM3OGEzMmEyMGQyYzQ3ZWEyY2UwOWEyMDgxNzkwMzkyNGQyY2UwMDgwMGIxM2IwMzg2MDYwMGM3OGExN2EyMGQyYzQ3NmExMTgxNzkwMzkyYTBlZjkwOWExMDkyNGQyY2UwMDgwMGIxM2IwMzg4NDFlODBiZjFjMTAyNGFlZWMyMGViZmQyYTBmYmQwY2MxMGQ4MmVjMjRlYmZjMmEwYmZhODBiZjBkZDIwNGFhYTkyMGFiZmQ5MmVjMDk5MTA5MjRhYmYyODIzMGMxYTgwMjJjMDIwMmE5MzFkZjBhMjExMDA4ODFmOTkxMWY3ZTgwZmMyMTY1NDc3YmMwOWUyMGQyOWNjM2VmMmE0ZTJmOTExYmQwNzRiYzE4YmQxODFkNzAzY2JlMWUwMDgwMDY2NTUwYjhiYTFjYmIxODFkNjAzNGJjMWUwMDgwMGE4MjE0YzRjZDgzMWI4MTE4MWM3MDNkYWJiZTAwODAwYjEzYjAzYzEzNTAzZDEzYTAzZjE4MTAzYTI0MzE2YzZjN2ZmMDAwMDAwMzZhMTAwMGMwNjdjZjg0OTYxMjk3MWRkMDNkOTgxMjEzYjAzNDJhMGZmODk5MTg5MDE5MWI3MDNhODAyNTIwOTA0YjJhMTA4NDBlNWMwMTZlZTBiYjBiNTgyNzJhMGE4YmFhYWYyMGE3OTdhN2E2NjFmMTljMjBhZTA5YzNjODE4NDA1YWQwNWUwMDgwMDk4YTcwYmE5MTY3YTFjYjJjOWZlMTYxYjFjODE3YzAzYWQwNWUwMDgwMDRiYzFkZDAxYmQwYTNkMGE4MTdkMDNhZDA1ZTAwODAwNmQwYTBiOWExNjk5MDcxNjZhMDdhMmNhZmQxNmJhMWZiMmM2ZmUxNjNiMTkyNjQ2MDI2NjU2NTQ4MTg1MDVhZDA1ZTAwODAwNDYxMjAwYTI5NzBhODE3ZTAzYjIwNzEyZTAwODAwY2MzYTBjMGFhMjU3MGFjODAyZDJhMTA4ZDBkNTgyMWMwZWRhY2NkMjBjYmZiNjI2MDJjNjlhMDBlMGRkMjAwYzlhMGMwYmQyNGNiZjcxNGQwMzgxYWUwMzUyNDc0YmUwMDgwMGExYjcwMzBjMTk5MjRhMDUwYzBiYjk5MWMyYzZmYzE2NWNmM2QyYzZmYjE2ZmRmMjI4OTExZGYwYjIwNzE2ZDgwMmMyYTEwOGMwYzU4MmUxM2EwM2NhZGRkMjBkMWRhODI3ZTBkZGEwZDgwZGYxNmMwM2QwZWFjMGYwZWUxMGU3M2IwMmM2M2YwMGM5MzFiMDlhYzA1NmE2MTdlMjA3MzhlMGU5YzBhZDA1MGNiYmQwY2VjMGQxNmMwMzgxNTcwNWQwY2MxMGUwMDgwMGVkMGFlOTUxMTY3YTBkYjE0ZDAzYTIwYjVhODE4NjA1YjBhYWIwYTk0MWEyMGEwM2UwMDgwMGMyY2FmZWQ4NTFjOTAxZDczYzAyODYyZDAwOTEzYTAzZTg3MWQ4MzE1MjRlMDBjODAyODg1MWRhY2NmMjBjMWRhMDg4YzA5MGZmYTBmODBmMmJhODhhZmY4MTZjMDMyYmZmODBmZjEwODg4MWUxM2QwM2Y5MDhmZDBhZTIwZTAwZjk5MWUwZTAwNDU2MmUwNmY4NDFmMjBmMDE2NjFmNWFmNjVhNTc4MTRkMDM4MjA4N2M1NmU4MDRkMjBjYmZiMmEwODBiMGJkMTBmNjNhMTBjMmEwODBjNzhkNTVkMjA3MWJlZDA5ZTIwZTQ0ZTczZDRhYTlhMWFjY2I1YzBhOGJiMTgxMGMwMzBjNGNlMDA4MDBiMjAxMDg5MjA3MWJhOGExYjdiOTE2ZDgzMWM4MDJkYWNjYzgyYzY3N2MwYmYxM2EwM2UyMTcwMGYyMGY0M2Y3YmUxOGI2M2EwMjQ2YjZmZjk4NDE5MjA5MDEyNjU5MGEyNjM5MDc1NmI5ZWM0NjAwMDAwYzM2YTg2MWM4NzFiODgxNTI0YzAwMzkwYjU2NGFlYmQ4YTdkMmNkZmU1NjFkMDdlODAyZjJhMTA4ZjBmNTgyZmFlZWYxM2EwM2UyMGUxZGYwZWVhMGU4MGUwYzJmZjk5MWYxNmMwMzJiZWVmMGVlMTBmODgxZTkwZjA2YTJmZjgxN2MwM2FkMDVlMDA4MDAwYzBjZGQwMWJkMGEzZDBhODE3ZDAzYTIwNzNiZTAwODAwNmQwYTI2MWExMTI2MmEwZTI2M2EwYjkyMDczYjQ3MTk5NTY2MzY5MmM2ZjNmZjgyYTEwODUyMDczYjc4MDI4MDg1ODI4YTc3ODJhMGE4OGE3Nzg2ZjdmZmVkMDk0NmExZmY5MjA3MTNhMjk3MGExNmU5ZGZlNjFhMDIwNjdlZmZiMjA3MTJlODAyYjc5YTJkZjJhMTA4ZjBmNTgyZmFlZWQyMGViZjU3ZWQxZjBjMmFiMmEyMGUwYzFjODE3ZjAzMmMwOTkwOWQyMDkyNGViZmUwMDgwMDhjN2E4MTgwMDM1MjRhMDhlMDA4MDA5MjE3MDhhODM3YjE2YzAzYTBhM2MwYjBhYTEwYTdiOTE3YzgwMmQyYTEwOGQwZDU4MmRhY2NkMjBjYmYwYzhlNTc2ZDA1ZTBlZDIwZTI0Y2JmODE2OTA1YWQwNWUwMDgwMDU2YmFkNzgxODUwNWFkMDVlMDA4MDAwYzQ5YTA2OTkzNDY2Y2ZmYjJhMGVmYjBkZDEwNDY2M2ZmMzY4MTAwNTEzYTAzNzEzYjAzNjJhMGZmNDFhODAzYmQwM2EyMDQwNTBjMTM2NzFhNDE4MjA0MDFkMTNjMDM4MGUwMDQwN2U4MTA5ODI0YzIxNTE3OTA5MmMwZDA5OTEwZjA5OTExYzcyOTI0YzgwN2YyYTEwOGYwZmE4MmZhY2NjMjBjMTdiOTQxODBjYzAxYzBjODMxZTYxYzAyMDY2ZjAwODE3YjAzMGM0YmUwMDgwMGI4NDEyMjA0MDQwYzBkNjA5MmMwMTYyOTIxOTgwN2UyYTEwOGUwZTI4MjAwMTI0MDlhZWVjMjBlNzlhMmNlMTBlYzRjZjIwZTE3ODBmZjAxZjBmODMxZTYxZjBiODIwZTE2ODA4ODAxODA4ODMxYTYxODBkZjgwNWUyMmEzN2YwZjE0MWYwZWVjMDE2OWUyMTY2MWMwNTgyMWE3NDE2MDgyMTBjMGMwMGYzYTFlMjE0MDdhMmExMDhhMGEyODJhOTAxZjBlZTIwZTI1NDA3OWFhYTkyMGExN2U4MDU4MDk5MDE5MDk4MzFhNjE5NWQ5OTExODIxYTgwZTBlMWU0ODBlZWMwZTBlMGU0OTdlYjM1ODIwNTQ2OTcyODJmYjIwNTUxZjYzYjI5ODIwYTc5NjYxODIzYjIwNTQ1OTIxYTdjYjczOTFhZTkyMTgyMmEzZmM5MzE2Njk4MTA4MWIwMDNhZDAyZTAwODAwYzgzMTBjMGRlODIxMDYxNDAwOTIwNDBjM2NiYTE2ODkwNGU3M2E0NWIyMTQwOGYwYmIyMGIyNTQwODQ2MGUwMDgyMDU0NWUyMWE3Yzg3M2UyZWIyMTQwOGYwYmIyMGIyNTQwODkyMGE3OTY2MTkxZmUyMGExNjgwZWUwMWUwZTgzMWU2MWUxM2YyMmEzZmM5MzE2NjlmMGI4MWIwMDNhZDAyZTAwODAwYzgzMTBjMGQwYzBlNTY3YzA1YTIwNDBkOWMzYTkyMDU0Nzk3YmEwZWI4MDFhODA3YmFhYWEyMmEzZjI2OWEwMjY2OGEzOGE4MDVmMjA1NDhhMGExZTRmNzNlMGVlMjE0MGFiMjA1NDllMGVhYzBlMGUwZTRlN2JiNjEyMjA0MDQ2NzEyMGY4MmExMDg4MDgyODIyODA3OGEyMjIyMDJmNTIyNDQwNGEyNTQwYWQyNDQwYzQ2MTEwMDBjZTk5NzFhYzFhMjA0MGM1NmJhZmJhMjA0MGQyMjA0MDQ4YzNhMWJhYWEyNDQwZDYwYjJjMGVkMGFjMGVjOTNlMjQ0MGQxNjRiMDkxYzljNjcxMjIyMGNhYTBjMGI5MTRkMDM4MWFlMDMyMjQ5NTNjMjQ5NTJlMDA4MDAzMjQ0MDAxZGYwMjIwNDA0MGMwYWEyNDQwZDg2ZjBmZjFkZjBiMjA0MDc2NzliMDRhMjQ0MDdiZDBhZGNlZTgxYWYwM2UwMDgwMGIyMDQwN2MyMDQwMWEwOTAxNGExM2MwMzkwOTJjMDMwY2MyMGMyNDQwMWEwOTkxMDk5MjQyZDBiNjcxYmNiODFhZTAzYTE0ZDAzNWMwOTkyNGE1MmIyNGE1MzBjMGIwY2FhZTAwODAwYjgwN2MyYTEwOGMwYzI4MmNhYmJiMjBiZjUzMjQ0MDBiMjQ0MDc2NzliYTBkMjA0MDFlMmEwZmVlMGRkMTBkMjQ0MDExZGYwZDI0NDBjZDI0NDBkZjIxNDA3ODIxNDA4YTgwNTIyMDQwMjIyNDQwNGEwYTFlNGEyNTQwYWYwODgxMDg3OWYwYWQyNTQwOGEyNTQwOTVjMGMwNjA0MDBjMjE0MDliMmEwNzhjMGNhYzBjMGMwZTRjNzNiZTgxYzljZDI1NDA3ODZjYWZmY2M2Y2UyMGFmMzFiZWVlMjRhZjM5ODA3MGMxY2M2NzdmZjM2NjEwMWEyYTBkZmIyYzExMDBjNGM0MjUxM2M4MWU5MDUwYzFkZDk0MWQ5NTFlMDA4MDBhMmEwZGZiMmMxMTQ4MWU5MDUwYzRjZTAwODAwYTJhMGRmYjJjMTEwODEwYzAzMGM0Y2UwMDgwMGEyYTBkZmIyYzExNDgxMGMwMzBjNGNlMDA4MDAwYzBhZDFiNzA2ZjJjMTc4YzJhM2YyNDIxMTNjODE2MDA3ZTg1MTk4NDE5MGVlMDFhMDk5MDE5OTQxZTk1MWIyMjMxMTkwZWUyMDgwZWUyMGUwYmIxMGIyNjMxMWM3MjQ3NzQ3YWMwMjQ2NDYwMGFkMDM4MTYxMDcyMGIwNzRlMDA4MDBkMjIzMTFhMWI3MDZkMDkxMDQxNmE5M2RhMjFhMDRhMGEwMDQ1NjFhM2RiZDA1YTJjMTIwMWMwYzkxYmUwMjgxZDQwMjkwOWQxMDkyNjMxMWUwMDgwMDgxMTEwN2UwMDgwMGIyYzEyMGQyYzE0MGNkMGE4MTEyMDdhMmMzNmNlMDA4MDBhMmMzN2NiMmMxNDQ4MWQ0MDIwY2NjZTAwODAwZDIwMzAwZWQwN2EyYTNmM2IyYzE0MDgxMTMwNzBjMmNlMDA4MDAwYzAyMWRmMDkyYTBkMjk3YTQwMjA2MzMwMGQyYTBkMjQ3YWQwMjA2NTgwMGIwZTAwNDE2YmUwOGJkMDQwYzAyODExYTA2YWQwMmUwMDgwMDIyNDMwNmFkMDMwYzFiODEwZjA3MmMwY2UwMDgwMDQ2ZjFmZjkyYTA4ZjkwOTRjMDU2NDkwNmE5MDY5MjA1MDdlNjcyMDUxNjg5NDdhNjcyMDQwYmE5MTYwYTQ3MGMxNGMxYzEwNmIyMWQ0YzBjMWRjMmRjZmY0MGJiMjBiMjVjNGNhNjcyMDEwYzBkYWQwM2JkMDIwYzFjODEyNDA3N2NmZWUwMDgwMGRjYmEwYzVhODEyNTA3YmQwM2UwMDgwMDE2NmE0MzgxMjYwNzBjNWFlMDA4MDAxNmJhNDIwYzE5NTZmOTNhYjIxMTNjMWMxYTgxMWEwNmE5MDZlMDA4MDAyODA2MWRmMGMyYTNmYWM3MjQ3MWIyNjExOTQ3YWMwMjA2MjMwMGNkMDVkZDA0MGNjZTBjMWZhMWI3MDI4MTYyMDdhMDliMjA5MjYzMTFhZDAzYmQwMmUwMDgwMDJkMGExZGYwYzJhMDc2YzdhNDAyODY0MjAwNDdhYzAyMDZkNGZmMDc2YmJiNDJhMGE0YWQwMzkxYjkwMjgxNjMwNzkwOWIyMDkyNjMxMWUwMDgwMGJkMDI0YWUzMGMyYTFjNmM4MTAwMDdkMWRiMDVlMDA4MDAwYzBhODExYTA2MWM2Y2MyNDMwM2IyMTEzY2UwMDgwMGM2YjZmZmEyYTNmOGE3YTQwMmM2NDEwMDQ3YWEwMjA2NTEwMGFkMDJiZDAzY2QwNGRkMDVlZDA2ODE2NDA3ZmQwN2UwMDgwMGM2YWRmZmIyYTQzM2I3YTQwMjQ2M2YwMDQ3YWIwMjA2NTIwMDBjMTQyMGIwNzQ4MTYxMDdhZDAzZTAwODAwNDI0MzA2YWQwM2MyMDMwMzgxMGYwNzBjMGJlMDA4MDAwNmEyZmZjMmEzZWZjN2E0MDI4NjVlMDA0N2FjMDIwNjcxMDBhZDAzODE2MTA3MjBiMDc0ZTAwODAwMGMyYWJkMDNjMWUyMDI5MjIzMTE4MTEwMDdjMDk5MjA5MjYzMTFlMDA4MDBiZDA1ODFkNDAyMWMwY2UwMDgwMDBjMmFiZDAyMGM4Y2QxZGIwNWUyYTBhNDgxMDAwN2VhZTNlMDA4MDAxYzZhMGM4OTgxNWMwNjkyNDMwM2UwMDgwMGQyYTA4OGRhZDMxNmNhMmRhZDAyYmQwM2VkMDZmZDA3ODE2NTA3YzJhMDcyZTAwODAwNDY4NGZmYjJhMDc1YjdhNDAyNDY0NzAwNDdhYjAyODZhYWZmNDJhNDAwOTIwMzA1YjIwNTAzYjI0MzA2YjA5OWMwNTY5OTE4YjIxMTNjMGMwYTgxMWEwNmE5MDZlMDA4MDBiZDAzYzIwMzA2MGMwYTkyMjMxMTgxMGIwNzQwOTkyMDkyNjMxMWUwMDgwMDg2NzJmZmEyYTNmNmEwYTRjMDU2OWFlNmFkMDJiZDAzY2QwNDgxNjYwN2RkMDVlMDA4MDAwNjZjZmY5MmE0MzI5MDk0YzA1NmY5ZTQyMGIwNzQ4MTYxMDdhZDAzZTAwODAwYWQwM2MyMDMwMzBjMGIwYzA5ODEwZjA3OTI0MzA2ZTAwODAwYzY2MWZmYTJhM2Y5YTBhNGMwNTY2YWUyYmQwZmVkMDdhMmEzZWEwYzJjODExZDA3ZDIwMzAwZTAwODAwYWQwMzgxNjcwN2JkMDZlMDA4MDBjNjU3ZmY5MmE0MzQ5MGE0YzA1NmVhZGZiMjFkMDRiMGIwMDQxNjRiMTYzYzNhODEyNTA3YmQwM2UwMDgwMDE2N2ExNTgxMjYwNzNjM2FlMDA4MDAxNmNhMTQzYzRhODEyNTA3YmQwM2UwMDgwMDE2ZmExMzgxMjYwNzNjNGFlMDA4MDAxNjRhMTNhZDAzMjBiMDc0ZWQwNzBjMGNkZDA2ZjIxMTNjODE2ODA3NTkwMWUwMDgwMDA2NmJmZjgyYTNlZTgwODRjMDU2MzhkYTBjMGFjZDAyZGQwMzgxZjQwNjFjM2JlMDA4MDA4NjNhZmY5MmM0OGM1NmM5ZDgwYzBhODExYTA2YmQwNGUwMDgwMDgxNWMwNjFjN2FlMDA4MDA0MmEwODg0YTQzMTYwYTFhYWQwMmJkMDNkZDA0ZWQwNmZkMDc4MTY5MDdjMmEwNzBlMDA4MDAwNjJkZmY5MmEzZjA5MDk0YzA1NjM5ZDVkMTZhMDdjMTM3MDRkMGJiMjBjMGJiMjBiMjYzMTFhNjcyMDhlMWJjMDNlMGViMjBlMjYzMTFhZDAyYmQwM2NkMDRkZDA1ZWQwNjgxNmIwN2ZkMDdlMDA4MDBjNjFlZmZhZDA1YmQwM2NkMDJkZDA2ZWQwNzgxMTQwNzBjNGZlMDA4MDA4NjE5ZmYwYzJhODEyNTA3YmQwM2UwMDgwMDE2NGEwOTgxMjYwNzBjMmFlMDA4MDAxNjlhMDhiMjExM2MwYzBhMGMwYzgxMWEwNmM5MDZlMDA4MDBhZDAzODE2YzA3YjIwMzA2ZTAwODAwMGI5YTE2ZjljMmFkMDMwYzRiOTIyMzExODEyODA3NDA5OTIwOTI2MzExZTAwODAwYTJhM2Y2NmJiMzBjMmNkMjAzMDA4MTZkMDcwYzNlZTAwODAwZTJhMGE0OTIwMzA2ZWFlMzE2MjkwYWJkMDIwYzJhM2MxYzgxMDAwN2QxZGIwNWUwMDgwMDNjMTk5MjQzMDMwNmZhZmVlZDA3YTJhNDI4YjJjMTYwMGMyYzgxNmUwNzkyYTQzNDNjNzIyMjUxMzE5MjUxMzBkMjAzMDBlMDA4MDAyOTA2M2M3MjFkZjBiMjExM2MyYzVhODExYTA2YTkwNmUwMDgwMDA2MTdmZjgxMWEwNmExYmIwMjkyMjMxMTBjMGNjMjQzMTNiMjExM2NhMDk5MjA5MjYzMTFhODA2ZTAwODAwYWQwMzgxMjgwNzBjMmJlMDA4MDA5MjAzMDUxNjk5MTAyY2FhODEyNTA3YmQwM2UwMDgwMDE2YmEwYjgxMjYwNzJjYWFlMDA4MDAxNjBhMGJhZDAzMGMxYjBjYWMwYzA5ODEwZjA3OTI0MzA2ZTAwODAwMDYwMWZmYmQwMjBjMmExY2FjODEwMDA3ZDFkYjA1ZTAwODAwMWNhOTQ2ZDZmZjgxNmYwN2FkMGRlMDA4MDA0NmNmZmUwYzA5MDZmNGZlYmQwNDJjMWE4MTFhMDZhOTA2ZTAwODAwNDZmNGZlYjExZjA3MGM2YzgxNGUwMzkyMjMxMWEyYTIwMGEwOTkyMDkyNjMxMWFkMDRlMDA4MDBlY2FhYjFiNzA2YjIxYjA0MDdlYjIyN2JhNWIxMjAwNzgxZDQwMjFjMGNlMDA4MDBhZDAyYmQwM2RkMDVlZDA2ZmQwNzgxNjkwN2MyYTA2ZmUwMDgwMDg2YjhmZWFkMDQ4MTIxMDdiZDAzZTAwODAwYmQwMjBjMmExYzRjZDFkYjA1ZTJhMGE0ODEwMDA3ZWFlM2UwMDgwMDFjNDkwNmI0ZmZhZDAzODEyODA3YjJhMTA0ZTAwODAwNDI0MzEzZWQwN2EyYTNmNjZiYjMwYzJjZDIwMzAwMGMwOTgxNmQwNzkyNDMwNmUwMDgwMGJkMDIwYzJhMWNiY2QxZGIwNWUyYTBhNDgxMDAwN2VhZTNlMDA4MDAxY2JmZjI0MzAzODZjOWZlYWQwMzIwYjA3NGNkMDVkMjExM2M4MTcwMDcwY2FlZTAwODAwNDZjNGZlMDAzNjgxMDA4MTMzMDRlMDA4MDAxNjdhMDcyYzNhYmQwMTgxMGMwMzFjOGNlMDA4MDBhMDkwZjQxNjU5MDZiODAxMGMyYzM3NmIwNGM5MDIwNjAxMDBiMGEwMDRhOTAyMjdmYjAyYjBjMDA1Yzk5MmIwZjIwNGIwMzQzNWIwODQzNGIwOTg3NWIwYTg3NGIwZDEwNGQ5MTJhOTUyOTlkMjg5NzIzOWYyZjk4MmIwYzEwNWM5YTJlODExZTBkMGY1ZDllMmUwZTBmNGU5NjJjODIxODE2ODBhYzBiMGY1YjljMmMwYzBmNGM5NDJhODMxYTkyMjk4NDE5OTMyYTg1MWE5YjJlMDA4MDAxZGYwMDAwMDM2NjEwMDBjMDUwYzAzMGMwYTgxY2UwOTIyNTEwMDcwZTYwMzBjMjk3MDQwMzQ0NzI5MDI3MDYyMDA0ODE4YWQwMWFjNjQ2MjExMDA5MjE0MDY2NzE5Mjg1ZDA0NDgwNDU2MjRmZjA2MDUwMGExZjMwMmMwMjAwMDkyNmE5MmMwMjAwMDkyNmE5M2I4MDhiOTA0NDkwODcwZTYxMzEwMjAwMGNkMDcxZGYwMTYyNGZmMzgwNDhjMzUzOTA1YzZmOGZmMGMwOTM5MTgxNmQzZmMwYzQyZjFmMzAyYzAyMDAwNmQwZjkyNmY5MjU4MTNjMDIwMDA1MjZmOTA1ZDBmYzAyMDAwOTI2ZjkzYzAyMDAwMjI2ZjkyYzAyMDAwZTIyZjkxZDgxMzJkMGZlMGRkYzBlZDA5ZTYxZGE3YzAyMDAwYTFmMzAyMGMxOTkyNmE5MzQ2ZTZmZjAwMzY0MTAwMGMwODMxZjMwMmMwMjAwMDMyMjM4ODljNDI4MTE4MDNlMDA4MDBjMDIwMDBhMWYzMDI3Y2I5OTA5MzEwOTI2YTg4MWRmMGMwMjAwMGUxZTIwMmIxYWIwMjkxZjMwMjBjNGNjMDgzMjA4MjY5ODhjMDIwMDBmMjJiOTNjMDIwMDBlMGZmMjBmMjZiOTNjMDIwMDBkMjJiOTNjMDIwMDBjMGRkMjBkMjZiOTNjMDIwMDBhMjJiOTRjMDIwMDBlMGFhMjBhMjZiOTRjMDIwMDA5MjJiOTRjMDIwMDBjMDk5MjA5MjZiOTRjMDIwMDA4MjJiOTVjMDIwMDBlMDg4MjA4MjZiOTVjMDIwMDBmMjJiOTVjMDIwMDBjMGZmMjBmMjZiOTVjMDIwMDBkMjJiOTZjMDIwMDBlMGRkMjBkMjZiOTZjMDIwMDBhMjJiOTZjMDIwMDBjMGFhMjBhMjZiOTYxZGYwMzY2MTAyODJhNDAxODc5MjA3ODFjYjA1MGMwYWUwMDgwMDkyYTQwNTk3OTIwNzgxY2IwNTBjMGFlMDA4MDA5MmE0MTk5NzkyMDc4MWNiMDUwYzBhZTAwODAwMGMwYWIxYzAwN2MyYTBjZmIwNGFiMDkyMTQwMTFiYWEyNzk5MmVhMjE0MDJiZDAxODFjMTA3Y2QwM2UwMDgwMDBjMGJjMjA0MDBlMWMyMDdmZDBhYTgxNDUxNGQwN2EwYTBmNGUwZGJiMDkyMGQwMDFiYmJjNzk5MGRlODFkODYwNDAwYTBhMGY0YTdiY2JmMDYxNTAwYjBiMGY0MGM4ZGI3YmRkZTBjMGViMmQ1ZmYwYzBjYzI2YjNlY2NhZmJkMDEwYzJkZTAwZTAwM2QwYTA2MDIwMGJkMDMwYzJkZTAwZTAwM2QwYTI2MTMwODI2YTMwNTI2MjMwMjY2MzMxNDgxYzMwN2FkMDJlMDA4MDA4YzlhYjIxNDAyODExYTA2YWQwM2UwMDgwMGEyZDVmZjBjMTk5MjZhM2VjNjAyMDBiZDAyODFjNDA3MGMxYWUwMDgwMDBjMTMyZDAzMWRmMDAwMDAwMDM2NjEwMDgxYzcwNzBjMWFlMDA4MDAxYzViY2QwMTBjNGQ4MWQ2MDI5ZDBhYTkwMWUyMGEwNjBjM2FlYTk5MjI0OTA4ZTAwODAwZjE0OTA0ZjgwZjc3NmYwNzgxY2IwNTBjMWFlMDA4MDAwYzAyMWRmMDAwMDAwMDM2NjEwMDgxYzcwNzBjM2FlMDA4MDAwYzFlYTkwMTQyMGEwNmQ4ZDM0YTRhOGI0NDA3NmQwOTgxYTYwMmUwMDgwMDBjMDIxZGYwOGJhMTgxZDQwMmUwY2QyMGIyYTA4OGJhYjNjOWQzMjI0MTA0MGM2Y2UwMDgwMDBjMGFkMjAzMDdkMjQxMGVhMjQxMGZkY2QyZTE1ZDA2ZjIxMzE0ZjI1MTAzZjIwMzA1ZTIwZTAwZjI0MTBmOGNmZTgxYTYwNTBjMGJlMDA4MDA0NjAxMDA5MThiMDY5MjUxMDNjZDA0MGMzYTgxYzgwNzRiYjFlMDA4MDAwYzNhMWM1YmNkMDE4MWQ2MDIwYzRkZTAwODAwOTE0OTA0OTgwOTkwOTcwNDE2ZDlmODgxY2IwNTBjMWFlMDA4MDA4NmUwZmYwMDAwMzY2MTAwODFjNzA3MGM3YWUwMDgwMDBjMGI4MWFkMDJhOTAxNTIwYTA2YzIxYTAyNWE1YThiNTVhZDA1ZTAwODAwMjI0NTAwYmQwMzFiYTU4MWQ0MDIwYzZjZTAwODAwODFhZjA2YWQwNGUwMDgwMGJkMDRjZDBhODFkNDAyN2JhNWUwMDgwMDBjM2ExYzViY2QwMTgxZDYwMjBjNGRlMDA4MDBmMTQ5MDQwYzk5ZjgwZjk3MTIxYjI2NzIxOGMyYTBmYmUxZDMwNjBjMGRiMWI3MDZkOTBlYTIwYjAwZDI1ZTAyYzBhYTEwYTI0YjAwNzc2ZjA3ODFjYjA1MGMxYWUwMDgwMDBjMDIxZGYwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXIzay8zMDEwMWNvZXgvYXIza2JkYWRkci5wc3QgYi9hcjNrLzMwMTAxY29leC9hcjNrYmRhZGRyLnBzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjQ2NmU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXIzay8zMDEwMWNvZXgvYXIza2JkYWRkci5wc3QKQEAgLTAsMCArMSBAQAorMTIzZmUxN2YwMzAwCmRpZmYgLS1naXQgYS9hcjNrL0F0aHJCVF8weDAxMDIwMDAxLmRmdSBiL2FyM2svQXRockJUXzB4MDEwMjAwMDEuZGZ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NjE2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcjNrL0F0aHJCVF8weDAxMDIwMDAxLmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL0F0aHJCVF8weDAxMDIwMjAwLmRmdSBiL2FyM2svQXRockJUXzB4MDEwMjAyMDAuZGZ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MmNhZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcjNrL0F0aHJCVF8weDAxMDIwMjAwLmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL0F0aHJCVF8weDAxMDIwMjAxLmRmdSBiL2FyM2svQXRockJUXzB4MDEwMjAyMDEuZGZ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MWJmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcjNrL0F0aHJCVF8weDAxMDIwMjAxLmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL0F0aHJCVF8weDExMDIwMDAwLmRmdSBiL2FyM2svQXRockJUXzB4MTEwMjAwMDAuZGZ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MmFhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcjNrL0F0aHJCVF8weDExMDIwMDAwLmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL0F0aHJCVF8weDMxMDEwMDAwLmRmdSBiL2FyM2svQXRockJUXzB4MzEwMTAwMDAuZGZ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNWJlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcjNrL0F0aHJCVF8weDMxMDEwMDAwLmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL0F0aHJCVF8weDQxMDIwMDAwLmRmdSBiL2FyM2svQXRockJUXzB4NDEwMjAwMDAuZGZ1Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxNDcwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcjNrL0F0aHJCVF8weDQxMDIwMDAwLmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL3JhbXBzXzB4MDEwMjAwMDFfMjYuZGZ1IGIvYXIzay9yYW1wc18weDAxMDIwMDAxXzI2LmRmdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWQyMmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay9yYW1wc18weDAxMDIwMDAxXzI2LmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL3JhbXBzXzB4MDEwMjAyMDBfMjYuZGZ1IGIvYXIzay9yYW1wc18weDAxMDIwMjAwXzI2LmRmdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzhlOGVkCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay9yYW1wc18weDAxMDIwMjAwXzI2LmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL3JhbXBzXzB4MDEwMjAyMDBfNDAuZGZ1IGIvYXIzay9yYW1wc18weDAxMDIwMjAwXzQwLmRmdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjE2NmMwCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay9yYW1wc18weDAxMDIwMjAwXzQwLmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL3JhbXBzXzB4MDEwMjAyMDFfMjYuZGZ1IGIvYXIzay9yYW1wc18weDAxMDIwMjAxXzI2LmRmdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGJjNTBhCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay9yYW1wc18weDAxMDIwMjAxXzI2LmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL3JhbXBzXzB4MDEwMjAyMDFfNDAuZGZ1IGIvYXIzay9yYW1wc18weDAxMDIwMjAxXzQwLmRmdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGJjNTBhCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay9yYW1wc18weDAxMDIwMjAxXzQwLmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL3JhbXBzXzB4MTEwMjAwMDBfNDAuZGZ1IGIvYXIzay9yYW1wc18weDExMDIwMDAwXzQwLmRmdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDcxMmNhCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay9yYW1wc18weDExMDIwMDAwXzQwLmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL3JhbXBzXzB4MzEwMTAwMDBfNDAuZGZ1IGIvYXIzay9yYW1wc18weDMxMDEwMDAwXzQwLmRmdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjNkNzlkCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay9yYW1wc18weDMxMDEwMDAwXzQwLmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjNrL3JhbXBzXzB4NDEwMjAwMDBfNDAuZGZ1IGIvYXIzay9yYW1wc18weDQxMDIwMDAwXzQwLmRmdQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NzM4M2JiCi0tLSAvZGV2L251bGwKKysrIGIvYXIzay9yYW1wc18weDQxMDIwMDAwXzQwLmRmdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjU1MjMuYmluIGIvYXI1NTIzLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZTM3M2JmCi0tLSAvZGV2L251bGwKKysrIGIvYXI1NTIzLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjcwMTAuZncgYi9hcjcwMTAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQwMDA1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyNzAxMC5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjcwMTBfMV8xLmZ3IGIvYXI3MDEwXzFfMS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODRkNGNkCi0tLSAvZGV2L251bGwKKysrIGIvYXI3MDEwXzFfMS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjkxNzAtMS5mdyBiL2FyOTE3MC0xLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjJiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcjkxNzAtMS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjkxNzAtMi5mdyBiL2FyOTE3MC0yLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMGU4MDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcjkxNzAtMi5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcjkyNzEuZncgYi9hcjkyNzEuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBlZTc0YQotLS0gL2Rldi9udWxsCisrKyBiL2FyOTI3MS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGgzay0xLmZ3IGIvYXRoM2stMS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2FhOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXRoM2stMS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDIvYXRod2xhbi5iaW4uejc3IGIvYXRoNmsvQVI2MDAyL2F0aHdsYW4uYmluLno3NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTU5OGExCi0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDAyL2F0aHdsYW4uYmluLno3NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDIvZGF0YS5wYXRjaC5odzJfMC5iaW4gYi9hdGg2ay9BUjYwMDIvZGF0YS5wYXRjaC5odzJfMC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljMGQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMi9kYXRhLnBhdGNoLmh3Ml8wLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDIvZWVwcm9tLmJpbiBiL2F0aDZrL0FSNjAwMi9lZXByb20uYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OWJkNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hdGg2ay9BUjYwMDIvZWVwcm9tLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDIvZWVwcm9tLmRhdGEgYi9hdGg2ay9BUjYwMDIvZWVwcm9tLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxOWE3OQotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMi9lZXByb20uZGF0YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMuMS9odzIuMS4xL2F0aHdsYW4uYmluIGIvYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9hdGh3bGFuLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzgxMzY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9hdGh3bGFuLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMuMS9odzIuMS4xL2JkYXRhLlNEMzEuYmluIGIvYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9iZGF0YS5TRDMxLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWVhZTkyCi0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9iZGF0YS5TRDMxLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMuMS9odzIuMS4xL2JkYXRhLlNEMzIuYmluIGIvYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9iZGF0YS5TRDMyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWRmNTE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9iZGF0YS5TRDMyLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMuMS9odzIuMS4xL2JkYXRhLldCMzEuYmluIGIvYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9iZGF0YS5XQjMxLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWVhZTkyCi0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9iZGF0YS5XQjMxLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMuMS9odzIuMS4xL2RhdGEucGF0Y2guYmluIGIvYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9kYXRhLnBhdGNoLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTEzYjRmCi0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDAzLjEvaHcyLjEuMS9kYXRhLnBhdGNoLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMuMS9odzIuMS4xL2VuZHBvaW50cGluZy5iaW4gYi9hdGg2ay9BUjYwMDMuMS9odzIuMS4xL2VuZHBvaW50cGluZy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIzN2Y1YQotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy4xL2h3Mi4xLjEvZW5kcG9pbnRwaW5nLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMuMS9odzIuMS4xL290cC5iaW4gYi9hdGg2ay9BUjYwMDMuMS9odzIuMS4xL290cC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmMjY2NAotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy4xL2h3Mi4xLjEvb3RwLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcxLjAvYXRod2xhbi5iaW4uejc3IGIvYXRoNmsvQVI2MDAzL2h3MS4wL2F0aHdsYW4uYmluLno3NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDIxMDdiCi0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDAzL2h3MS4wL2F0aHdsYW4uYmluLno3NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcxLjAvYmRhdGEuU0QzMS5iaW4gYi9hdGg2ay9BUjYwMDMvaHcxLjAvYmRhdGEuU0QzMS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzNmMzNQotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy9odzEuMC9iZGF0YS5TRDMxLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcxLjAvYmRhdGEuU0QzMi5iaW4gYi9hdGg2ay9BUjYwMDMvaHcxLjAvYmRhdGEuU0QzMi5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViMjhjZgotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy9odzEuMC9iZGF0YS5TRDMyLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcxLjAvYmRhdGEuV0IzMS5iaW4gYi9hdGg2ay9BUjYwMDMvaHcxLjAvYmRhdGEuV0IzMS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzNmMzNQotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy9odzEuMC9iZGF0YS5XQjMxLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcxLjAvZGF0YS5wYXRjaC5iaW4gYi9hdGg2ay9BUjYwMDMvaHcxLjAvZGF0YS5wYXRjaC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyZDFlZgotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy9odzEuMC9kYXRhLnBhdGNoLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcxLjAvb3RwLmJpbi56NzcgYi9hdGg2ay9BUjYwMDMvaHcxLjAvb3RwLmJpbi56NzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhkZTgyMAotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy9odzEuMC9vdHAuYmluLno3NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjAvYXRod2xhbi5iaW4uejc3IGIvYXRoNmsvQVI2MDAzL2h3Mi4wL2F0aHdsYW4uYmluLno3NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjlmM2NlCi0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDAzL2h3Mi4wL2F0aHdsYW4uYmluLno3NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjAvYmRhdGEuU0QzMS5iaW4gYi9hdGg2ay9BUjYwMDMvaHcyLjAvYmRhdGEuU0QzMS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllYWU5MgotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy9odzIuMC9iZGF0YS5TRDMxLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjAvYmRhdGEuU0QzMi5iaW4gYi9hdGg2ay9BUjYwMDMvaHcyLjAvYmRhdGEuU0QzMi5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0ZDU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy9odzIuMC9iZGF0YS5TRDMyLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjAvYmRhdGEuV0IzMS5iaW4gYi9hdGg2ay9BUjYwMDMvaHcyLjAvYmRhdGEuV0IzMS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllYWU5MgotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy9odzIuMC9iZGF0YS5XQjMxLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjAvZGF0YS5wYXRjaC5iaW4gYi9hdGg2ay9BUjYwMDMvaHcyLjAvZGF0YS5wYXRjaC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwYTg0NwotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy9odzIuMC9kYXRhLnBhdGNoLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjAvb3RwLmJpbi56NzcgYi9hdGg2ay9BUjYwMDMvaHcyLjAvb3RwLmJpbi56NzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ5N2ZmYQotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwMy9odzIuMC9vdHAuYmluLno3NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjEuMS9hdGh3bGFuLmJpbiBiL2F0aDZrL0FSNjAwMy9odzIuMS4xL2F0aHdsYW4uYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzEyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hdGg2ay9BUjYwMDMvaHcyLjEuMS9hdGh3bGFuLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjEuMS9iZGF0YS5TRDMxLmJpbiBiL2F0aDZrL0FSNjAwMy9odzIuMS4xL2JkYXRhLlNEMzEuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZWFlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hdGg2ay9BUjYwMDMvaHcyLjEuMS9iZGF0YS5TRDMxLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjEuMS9iZGF0YS5TRDMyLmJpbiBiL2F0aDZrL0FSNjAwMy9odzIuMS4xL2JkYXRhLlNEMzIuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NGQ1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9hdGg2ay9BUjYwMDMvaHcyLjEuMS9iZGF0YS5TRDMyLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjEuMS9iZGF0YS5XQjMxLmJpbiBiL2F0aDZrL0FSNjAwMy9odzIuMS4xL2JkYXRhLldCMzEuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZWFlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hdGg2ay9BUjYwMDMvaHcyLjEuMS9iZGF0YS5XQjMxLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjEuMS9kYXRhLnBhdGNoLmJpbiBiL2F0aDZrL0FSNjAwMy9odzIuMS4xL2RhdGEucGF0Y2guYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMTNiNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hdGg2ay9BUjYwMDMvaHcyLjEuMS9kYXRhLnBhdGNoLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjEuMS9lbmRwb2ludHBpbmcuYmluIGIvYXRoNmsvQVI2MDAzL2h3Mi4xLjEvZW5kcG9pbnRwaW5nLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWM0MjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDAzL2h3Mi4xLjEvZW5kcG9pbnRwaW5nLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjEuMS9mdy0yLmJpbiBiL2F0aDZrL0FSNjAwMy9odzIuMS4xL2Z3LTIuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NzcyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hdGg2ay9BUjYwMDMvaHcyLjEuMS9mdy0yLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjEuMS9mdy0zLmJpbiBiL2F0aDZrL0FSNjAwMy9odzIuMS4xL2Z3LTMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNWZjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hdGg2ay9BUjYwMDMvaHcyLjEuMS9mdy0zLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDMvaHcyLjEuMS9vdHAuYmluIGIvYXRoNmsvQVI2MDAzL2h3Mi4xLjEvb3RwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQyOTkwCi0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDAzL2h3Mi4xLjEvb3RwLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDQvaHcxLjIvYmRhdGEuYmluIGIvYXRoNmsvQVI2MDA0L2h3MS4yL2JkYXRhLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDNmNjZmCi0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDA0L2h3MS4yL2JkYXRhLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDQvaHcxLjIvZnctMi5iaW4gYi9hdGg2ay9BUjYwMDQvaHcxLjIvZnctMi5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxMTM1MwotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwNC9odzEuMi9mdy0yLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDQvaHcxLjMvYmRhdGEuYmluIGIvYXRoNmsvQVI2MDA0L2h3MS4zL2JkYXRhLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTJlYTBhCi0tLSAvZGV2L251bGwKKysrIGIvYXRoNmsvQVI2MDA0L2h3MS4zL2JkYXRhLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdGg2ay9BUjYwMDQvaHcxLjMvZnctMy5iaW4gYi9hdGg2ay9BUjYwMDQvaHcxLjMvZnctMy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5ZDYzNQotLS0gL2Rldi9udWxsCisrKyBiL2F0aDZrL0FSNjAwNC9odzEuMy9mdy0zLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdG1zYXIxMS5mdyBiL2F0bXNhcjExLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNGY2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9hdG1zYXIxMS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdjcxMTAvQm9vdC5TIGIvYXY3MTEwL0Jvb3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTYyZmRjCi0tLSAvZGV2L251bGwKKysrIGIvYXY3MTEwL0Jvb3QuUwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAgIEJvb3QuUzogYm9vdCBsb2FkZXIgZm9yIFNpZW1lbnMgRFZCLVMgY2FyZAorCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgQ29udmVyZ2VuY2UgaW50ZWdyYXRlZCBtZWRpYSBHbWJICisJICAgICAgICAgICAgICBXcml0dGVuIGJ5IFJhbHBoIE1ldHpsZXIKKwkJICAgICAgICAgICAgICAgICA8cmprbUBjb252ZXJnZW5jZS5kZT4KKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXR0aGlldSBDQVNURVQgPGNhc3RldC5tYXR0aGVpdUBmcmVlLmZyPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAgIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBLgorCisqLworCisvKgorCWNoZWNrIEFWNzExeF8zXzEucGRmIGZvciBzb21lIGhhcmR3YXJlIGluZm9zCisJYnVpbGQgaXQgd2l0aCA6CisJJCBjYyAtbWJpZy1lbmRpYW4gLWMgQm9vdC5TCisJJCBsZCAtVHRleHQgMHgyYzAwMDAwMCAtRUIgLW8gQm9vdCBCb290Lm8KKwkkIG9iamNvcHkgLU9iaW5hcnkgQm9vdAorKi8KKworCS50ZXh0CisJLmFsaWduCisJLmdsb2JsIF9zdGFydAorX3N0YXJ0OgorCWIgcmVzZXQJCQkvLyByZXNldCB2ZWN0b3IKKwltb3ZzICBwYywgcjE0ICAgICAgICAgICAvLyB1bmRlZmluZWQKKwlzdWJzICBwYywgcjE0LCAjNCAgICAgICAvLyBTV0kKKwlzdWJzICBwYywgcjE0LCAjNCAgICAgICAvLyBwcmVmZXRjaCBhYm9ydAorCXN1YnMgIHBjLCByMTQsICM4ICAgICAgIC8vIGRhdGEgYWJvcnQKKwlzdWJzICBwYywgcjE0LCAjNCAgICAgICAvLyByZXNlcnZlZAorCXN1YnMgIHBjLCByMTQsICM0ICAgICAgIC8vIElSUQorCXN1YnMgIHBjLCByMTQsICM0ICAgICAgIC8vIEZJUQorCisJLndvcmQgdGJsICAgICAgICAgICAgICAgLy8gdGFibGUgbmVlZGVkIGJ5IGZpcm13YXJlIFJPTQordGJsOgkud29yZCAoZW5kdGJsIC0gdGJsKQorCS53b3JkIDAKKyAgCS53b3JkIGNvbmYKK2VuZHRibDoJLndvcmQgMAorY29uZjoJLndvcmQgMHhhNWE1NWE1YQorCS53b3JkIDB4MDAxZjE1NTUKKwkud29yZCAweDAwMDAwMDA5CisKK3Jlc2V0OglsZHIJcjEzLCBidWZmZXIKKwlsZHIJcjQsIGZsYWcKKwltb3YJcjAsICMwCisJc3RyCXIwLCBbcjRdCisJc3RyCXIwLCBbcjQsICM0XQorCisJbGRyCQlyMSwgd2FpdF9hZGRyZXNzCisJbGRyCQlyMiwgZmxhZ19hZGRyZXNzCisJbGRyCQlyMywgc3JhbQorCitjb3B5Y29kZTogLy8gY29weSB0aGUgY29kZSBIVyBTcmFtCisJbGRtaWEJcjEhLCB7cjUtcjEyfQorCXN0bWlhCXIzISwge3I1LXIxMn0KKwljbXAJCXIxLCByMgorCWJsZSAJY29weWNvZGUKKwlsZHIJCXBjLCBzcmFtIC8vIGp1bXAgdG8gdGhlIGNvcGllZCBjb2RlCisKK3dhaXQ6CWxkcmgJcjEsIFtyNF0gICAgICAgIC8vIHdhaXQgZm9yIGZsYWchPTAKKyAJY21wCXIxLCAjMAorCWJlcQl3YWl0CisKKwltb3YJcjEsIHIxMyAgICAgICAgIC8vIGJ1ZmZlciBhZGRyZXNzCisgCWxkcglyMywgW3I0LCM0XSAgICAgLy8gZGVzdGFkZHIKKworIAlsZHJoCXIyLCBbcjQsIzJdICAgICAvLyBnZXQgc2VnbWVudCBsZW5ndGgKKwlhZGQgICAgIHIyLCByMiwgIzYzICAgICAvLyByb3VuZCBsZW5ndGggdG8gbmV4dCA2NCBieXRlcworCW1vdnMJcjIsIHIyLCBsc3IgIzYgIC8vIGFuZCBkaXZpZGUgYnkgNjQKKwltb3ZlcQlyMCwgIzIgICAgICAgICAgLy8gaWYgMCwgc2V0IGZsYWcgdG8gMiwgZWxzZSBzaWduYWwKKwlzdHJoCXIwLCBbcjRdICAgICAgICAvLyB0aGF0IGJ1ZmZlciBpcyBhY2NlcHRlZCBieSBzZXR0aW5nIHRvIDAKKyAgICAgICAgYmVxIHdhaXQKKwkKK2NvcHlsb29wOgorCWxkbWlhCXIxISwge3I1LXIxMn0KKwlzdG1pYQlyMyEsIHtyNS1yMTJ9CisJbGRtaWEJcjEhLCB7cjUtcjEyfQorCXN0bWlhCXIzISwge3I1LXIxMn0KKyAJc3VicwlyMiwgcjIsICMxCisgCWJuZQljb3B5bG9vcAorCisJZW9yICAgICByMTMsIHIxMywgIzB4MTQwMCAgICAvLyBzd2l0Y2ggdG8gb3RoZXIgYnVmZmVyCisJYgl3YWl0CisKKy8vIGZsYWcgaXMgc3RvcmVkIGF0IDB4MmMwMDAzZjgsIGxlbmd0aCBhdCAweDJjMDAwM2ZhLAorLy8gZGVzdGFkZHIgYXQgMHgyYzAwMDNmYworCitmbGFnOgkud29yZAkweDJjMDAwM2Y4CisKKworLy8gYnVmZmVyIDEgaXMgYXQgMHgyYzAwMDQwMCwgYnVmZmVyIDIgYXQgMHgyYzAwMTAwMAorCitidWZmZXI6CS53b3JkCTB4MmMwMDA0MDAKKworc3JhbTogLndvcmQgICAweDllMDAwODAwCit3YWl0X2FkZHJlc3M6IC53b3JkICAgd2FpdAorZmxhZ19hZGRyZXNzOiAud29yZCAgIGZsYWcKZGlmZiAtLWdpdCBhL2F2NzExMC9NYWtlZmlsZSBiL2F2NzExMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjc3NmZlCi0tLSAvZGV2L251bGwKKysrIGIvYXY3MTEwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKK0NDID0gYXJtLWxpbnV4LWdudWVhYmktZ2NjCitMRCA9IGFybS1saW51eC1nbnVlYWJpLWxkCitPQkpDT1BZID0gYXJtLWxpbnV4LWdudWVhYmktb2JqY29weQorCitib290Y29kZS5iaW46IEJvb3QuUworCSQoQ0MpIC1tYmlnLWVuZGlhbiAtYyBCb290LlMKKwkkKExEKSAtVHRleHQgMHgyYzAwMDAwMCAtRUIgLW8gQm9vdCBCb290Lm8KKwkkKE9CSkNPUFkpIC1PYmluYXJ5IEJvb3QgYm9vdGNvZGUuYmluCisKK2NsZWFuOgorCXJtIC1mIEJvb3QubyBCb290IGJvb3Rjb2RlLmJpbgpkaWZmIC0tZ2l0IGEvYXY3MTEwL2Jvb3Rjb2RlLmJpbiBiL2F2NzExMC9ib290Y29kZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxNTc3NQotLS0gL2Rldi9udWxsCisrKyBiL2F2NzExMC9ib290Y29kZS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDYtNC42LjE2LmZ3IGIvYm54Mi9ibngyLW1pcHMtMDYtNC42LjE2LmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZjRmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItbWlwcy0wNi00LjYuMTYuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajMuZncgYi9ibngyL2JueDItbWlwcy0wNi01LjAuMC5qMy5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODA0YjgyCi0tLSAvZGV2L251bGwKKysrIGIvYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajMuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajYuZncgYi9ibngyL2JueDItbWlwcy0wNi01LjAuMC5qNi5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzdjOGJiCi0tLSAvZGV2L251bGwKKysrIGIvYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajYuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDYtNi4wLjE1LmZ3IGIvYm54Mi9ibngyLW1pcHMtMDYtNi4wLjE1LmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMmM5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItbWlwcy0wNi02LjAuMTUuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDYtNi4yLjEuZncgYi9ibngyL2JueDItbWlwcy0wNi02LjIuMS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzE3Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIvYm54Mi9ibngyLW1pcHMtMDYtNi4yLjEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDYtNi4yLjMuZncgYi9ibngyL2JueDItbWlwcy0wNi02LjIuMy5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTllNTRiCi0tLSAvZGV2L251bGwKKysrIGIvYm54Mi9ibngyLW1pcHMtMDYtNi4yLjMuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDktNC42LjE3LmZ3IGIvYm54Mi9ibngyLW1pcHMtMDktNC42LjE3LmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzZiNGEKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItbWlwcy0wOS00LjYuMTcuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajE1LmZ3IGIvYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajE1LmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNjliNWIKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItbWlwcy0wOS01LjAuMC5qMTUuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajMuZncgYi9ibngyL2JueDItbWlwcy0wOS01LjAuMC5qMy5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzk4OTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajMuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajkuZncgYi9ibngyL2JueDItbWlwcy0wOS01LjAuMC5qOS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWFiMTBhCi0tLSAvZGV2L251bGwKKysrIGIvYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajkuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDktNi4wLjE3LmZ3IGIvYm54Mi9ibngyLW1pcHMtMDktNi4wLjE3LmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNDk5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItbWlwcy0wOS02LjAuMTcuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDktNi4yLjEuZncgYi9ibngyL2JueDItbWlwcy0wOS02LjIuMS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDc4ZTNmCi0tLSAvZGV2L251bGwKKysrIGIvYm54Mi9ibngyLW1pcHMtMDktNi4yLjEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDktNi4yLjFhLmZ3IGIvYm54Mi9ibngyLW1pcHMtMDktNi4yLjFhLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YWM1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItbWlwcy0wOS02LjIuMWEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLW1pcHMtMDktNi4yLjFiLmZ3IGIvYm54Mi9ibngyLW1pcHMtMDktNi4yLjFiLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZDFlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItbWlwcy0wOS02LjIuMWIuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLXJ2MnAtMDYtNC42LjE2LmZ3IGIvYm54Mi9ibngyLXJ2MnAtMDYtNC42LjE2LmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYTMzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItcnYycC0wNi00LjYuMTYuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLXJ2MnAtMDYtNS4wLjAuajMuZncgYi9ibngyL2JueDItcnYycC0wNi01LjAuMC5qMy5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgwNWExCi0tLSAvZGV2L251bGwKKysrIGIvYm54Mi9ibngyLXJ2MnAtMDYtNS4wLjAuajMuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLXJ2MnAtMDYtNi4wLjE1LmZ3IGIvYm54Mi9ibngyLXJ2MnAtMDYtNi4wLjE1LmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNzU2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItcnYycC0wNi02LjAuMTUuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLXJ2MnAtMDktNC42LjE1LmZ3IGIvYm54Mi9ibngyLXJ2MnAtMDktNC42LjE1LmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYjVkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItcnYycC0wOS00LjYuMTUuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajEwLmZ3IGIvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajEwLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhY2M1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItcnYycC0wOS01LjAuMC5qMTAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZncgYi9ibngyL2JueDItcnYycC0wOS01LjAuMC5qMy5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmE1ZGUyCi0tLSAvZGV2L251bGwKKysrIGIvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLXJ2MnAtMDktNi4wLjE3LmZ3IGIvYm54Mi9ibngyLXJ2MnAtMDktNi4wLjE3LmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OTMyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyL2JueDItcnYycC0wOS02LjAuMTcuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMTAuZncgYi9ibngyL2JueDItcnYycC0wOWF4LTUuMC4wLmoxMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTM5MGVjCi0tLSAvZGV2L251bGwKKysrIGIvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMTAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMy5mdyBiL2JueDIvYm54Mi1ydjJwLTA5YXgtNS4wLjAuajMuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0YzQ3OQotLS0gL2Rldi9udWxsCisrKyBiL2JueDIvYm54Mi1ydjJwLTA5YXgtNS4wLjAuajMuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54Mi9ibngyLXJ2MnAtMDlheC02LjAuMTcuZncgYi9ibngyL2JueDItcnYycC0wOWF4LTYuMC4xNy5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTczOGNlCi0tLSAvZGV2L251bGwKKysrIGIvYm54Mi9ibngyLXJ2MnAtMDlheC02LjAuMTcuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngtZTEtNC44LjUzLjAuZncgYi9ibngyeC1lMS00LjguNTMuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2MwZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvYm54MngtZTEtNC44LjUzLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngtZTEtNS4yLjEzLjAuZncgYi9ibngyeC1lMS01LjIuMTMuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjFjZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvYm54MngtZTEtNS4yLjEzLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngtZTEtNS4yLjcuMC5mdyBiL2JueDJ4LWUxLTUuMi43LjAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwM2NkYwotLS0gL2Rldi9udWxsCisrKyBiL2JueDJ4LWUxLTUuMi43LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngtZTFoLTQuOC41My4wLmZ3IGIvYm54MngtZTFoLTQuOC41My4wLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmY2Q5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyeC1lMWgtNC44LjUzLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngtZTFoLTUuMi4xMy4wLmZ3IGIvYm54MngtZTFoLTUuMi4xMy4wLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YTA1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyeC1lMWgtNS4yLjEzLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngtZTFoLTUuMi43LjAuZncgYi9ibngyeC1lMWgtNS4yLjcuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTZlNzEzCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngtZTFoLTUuMi43LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTEtNi4wLjM0LjAuZncgYi9ibngyeC9ibngyeC1lMS02LjAuMzQuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzE5YmNkCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTEtNi4wLjM0LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTEtNi4yLjUuMC5mdyBiL2JueDJ4L2JueDJ4LWUxLTYuMi41LjAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyNWI5MgotLS0gL2Rldi9udWxsCisrKyBiL2JueDJ4L2JueDJ4LWUxLTYuMi41LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTEtNi4yLjkuMC5mdyBiL2JueDJ4L2JueDJ4LWUxLTYuMi45LjAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwYTcwNAotLS0gL2Rldi9udWxsCisrKyBiL2JueDJ4L2JueDJ4LWUxLTYuMi45LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTEtNy4wLjIwLjAuZncgYi9ibngyeC9ibngyeC1lMS03LjAuMjAuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjFiZjZmCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTEtNy4wLjIwLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTEtNy4wLjIzLjAuZncgYi9ibngyeC9ibngyeC1lMS03LjAuMjMuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTIyYWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTEtNy4wLjIzLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTEtNy4wLjI5LjAuZncgYi9ibngyeC9ibngyeC1lMS03LjAuMjkuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYThmZDMyCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTEtNy4wLjI5LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTEtNy4yLjE2LjAuZncgYi9ibngyeC9ibngyeC1lMS03LjIuMTYuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGI2ZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTEtNy4yLjE2LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTEtNy4yLjUxLjAuZncgYi9ibngyeC9ibngyeC1lMS03LjIuNTEuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTU0NmM3Ci0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTEtNy4yLjUxLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTEtNy44LjE3LjAuZncgYi9ibngyeC9ibngyeC1lMS03LjguMTcuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWVhMzFlCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTEtNy44LjE3LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTEtNy44LjIuMC5mdyBiL2JueDJ4L2JueDJ4LWUxLTcuOC4yLjAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmY2JjZgotLS0gL2Rldi9udWxsCisrKyBiL2JueDJ4L2JueDJ4LWUxLTcuOC4yLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTFoLTYuMC4zNC4wLmZ3IGIvYm54MngvYm54MngtZTFoLTYuMC4zNC4wLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YmU4MzcKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyeC9ibngyeC1lMWgtNi4wLjM0LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTFoLTYuMi41LjAuZncgYi9ibngyeC9ibngyeC1lMWgtNi4yLjUuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmQxNWUzCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTFoLTYuMi41LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTFoLTYuMi45LjAuZncgYi9ibngyeC9ibngyeC1lMWgtNi4yLjkuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGUzNWMxCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTFoLTYuMi45LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTFoLTcuMC4yMC4wLmZ3IGIvYm54MngvYm54MngtZTFoLTcuMC4yMC4wLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZDg0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyeC9ibngyeC1lMWgtNy4wLjIwLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTFoLTcuMC4yMy4wLmZ3IGIvYm54MngvYm54MngtZTFoLTcuMC4yMy4wLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNTAzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyeC9ibngyeC1lMWgtNy4wLjIzLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTFoLTcuMC4yOS4wLmZ3IGIvYm54MngvYm54MngtZTFoLTcuMC4yOS4wLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjg3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyeC9ibngyeC1lMWgtNy4wLjI5LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTFoLTcuMi4xNi4wLmZ3IGIvYm54MngvYm54MngtZTFoLTcuMi4xNi4wLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkODYzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyeC9ibngyeC1lMWgtNy4yLjE2LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTFoLTcuMi41MS4wLmZ3IGIvYm54MngvYm54MngtZTFoLTcuMi41MS4wLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMTRhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyeC9ibngyeC1lMWgtNy4yLjUxLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTFoLTcuOC4xNy4wLmZ3IGIvYm54MngvYm54MngtZTFoLTcuOC4xNy4wLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MTBiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9ibngyeC9ibngyeC1lMWgtNy44LjE3LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTFoLTcuOC4yLjAuZncgYi9ibngyeC9ibngyeC1lMWgtNy44LjIuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjYwMTRhCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTFoLTcuOC4yLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTItNi4wLjM0LjAuZncgYi9ibngyeC9ibngyeC1lMi02LjAuMzQuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDJjYTI1Ci0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTItNi4wLjM0LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTItNi4yLjUuMC5mdyBiL2JueDJ4L2JueDJ4LWUyLTYuMi41LjAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxYjJkZgotLS0gL2Rldi9udWxsCisrKyBiL2JueDJ4L2JueDJ4LWUyLTYuMi41LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTItNi4yLjkuMC5mdyBiL2JueDJ4L2JueDJ4LWUyLTYuMi45LjAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5ODQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2JueDJ4L2JueDJ4LWUyLTYuMi45LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTItNy4wLjIwLjAuZncgYi9ibngyeC9ibngyeC1lMi03LjAuMjAuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWU2NGM2Ci0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTItNy4wLjIwLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTItNy4wLjIzLjAuZncgYi9ibngyeC9ibngyeC1lMi03LjAuMjMuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDY2YWViCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTItNy4wLjIzLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTItNy4wLjI5LjAuZncgYi9ibngyeC9ibngyeC1lMi03LjAuMjkuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTM4YTJlCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTItNy4wLjI5LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTItNy4yLjE2LjAuZncgYi9ibngyeC9ibngyeC1lMi03LjIuMTYuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzk3OGNiCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTItNy4yLjE2LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTItNy4yLjUxLjAuZncgYi9ibngyeC9ibngyeC1lMi03LjIuNTEuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjM4Y2QzCi0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTItNy4yLjUxLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTItNy44LjE3LjAuZncgYi9ibngyeC9ibngyeC1lMi03LjguMTcuMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGFiYjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYm54MngvYm54MngtZTItNy44LjE3LjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYm54MngvYm54MngtZTItNy44LjIuMC5mdyBiL2JueDJ4L2JueDJ4LWUyLTcuOC4yLjAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyZDA5ZAotLS0gL2Rldi9udWxsCisrKyBiL2JueDJ4L2JueDJ4LWUyLTcuOC4yLjAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnJjbS9iY200MzI5LWZ1bGxtYWMtNC5iaW4gYi9icmNtL2JjbTQzMjktZnVsbG1hYy00LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Q0MWMzCi0tLSAvZGV2L251bGwKKysrIGIvYnJjbS9iY200MzI5LWZ1bGxtYWMtNC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnJjbS9iY200M3h4LTAuZncgYi9icmNtL2JjbTQzeHgtMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWU1Y2NjCi0tLSAvZGV2L251bGwKKysrIGIvYnJjbS9iY200M3h4LTAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnJjbS9iY200M3h4X2hkci0wLmZ3IGIvYnJjbS9iY200M3h4X2hkci0wLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZGI3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9icmNtL2JjbTQzeHhfaGRyLTAuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnJjbS9icmNtZm1hYzQzMjM2Yi5iaW4gYi9icmNtL2JyY21mbWFjNDMyMzZiLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTIwMDRhCi0tLSAvZGV2L251bGwKKysrIGIvYnJjbS9icmNtZm1hYzQzMjM2Yi5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnJjbS9icmNtZm1hYzQzMjQxYjAtc2Rpby5iaW4gYi9icmNtL2JyY21mbWFjNDMyNDFiMC1zZGlvLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjliODk0Ci0tLSAvZGV2L251bGwKKysrIGIvYnJjbS9icmNtZm1hYzQzMjQxYjAtc2Rpby5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnJjbS9icmNtZm1hYzQzMjQxYjQtc2Rpby5iaW4gYi9icmNtL2JyY21mbWFjNDMyNDFiNC1zZGlvLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDEwYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvYnJjbS9icmNtZm1hYzQzMjQxYjQtc2Rpby5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnJjbS9icmNtZm1hYzQzMjktc2Rpby5iaW4gYi9icmNtL2JyY21mbWFjNDMyOS1zZGlvLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGM0NTYwCi0tLSAvZGV2L251bGwKKysrIGIvYnJjbS9icmNtZm1hYzQzMjktc2Rpby5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnJjbS9icmNtZm1hYzQzMzAtc2Rpby5iaW4gYi9icmNtL2JyY21mbWFjNDMzMC1zZGlvLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2JjMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvYnJjbS9icmNtZm1hYzQzMzAtc2Rpby5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnJjbS9icmNtZm1hYzQzMzQtc2Rpby5iaW4gYi9icmNtL2JyY21mbWFjNDMzNC1zZGlvLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGU5OTRmCi0tLSAvZGV2L251bGwKKysrIGIvYnJjbS9icmNtZm1hYzQzMzQtc2Rpby5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnJjbS9icmNtZm1hYzQzMzUtc2Rpby5iaW4gYi9icmNtL2JyY21mbWFjNDMzNS1zZGlvLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjcwZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvYnJjbS9icmNtZm1hYzQzMzUtc2Rpby5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2FybDkxNzAtMS5mdyBiL2Nhcmw5MTcwLTEuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjMWY0OAotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwLTEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9DTWFrZUxpc3RzLnR4dCBiL2Nhcmw5MTcwZncvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAxN2JiYgotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxOSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOCkKKworcHJvamVjdChjYXJsOTE3MCkKKworI2lmIHlvdSBkb24ndCB3YW50IHRoZSBmdWxsIGNvbXBpbGVyIG91dHB1dCwgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZQorI3NldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIE9OKQorCitpbmNsdWRlKCJjb25maWcuY21ha2UiKQorCithZGRfc3ViZGlyZWN0b3J5KGNhcmxmdykKKworaWYgKENPTkZJR19DQVJMOTE3MEZXX0JVSUxEX01JTklCT09UKQorCWFkZF9zdWJkaXJlY3RvcnkobWluaWZ3KQorZW5kaWYgKENPTkZJR19DQVJMOTE3MEZXX0JVSUxEX01JTklCT09UKQorCitpZiAoQ09ORklHX0NBUkw5MTcwRldfQlVJTERfVE9PTFMpCisJYWRkX3N1YmRpcmVjdG9yeSh0b29scykKK2VuZGlmIChDT05GSUdfQ0FSTDkxNzBGV19CVUlMRF9UT09MUykKKwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9DT1BZUklHSFQgYi9jYXJsOTE3MGZ3L0NPUFlSSUdIVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWQzZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9DT1BZUklHSFQKQEAgLTAsMCArMSwxOSBAQAorQXRoZXJvcyBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKworQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KK0NvcHlyaWdodCAoYykgMjAwNy0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KK0NvcHlyaWdodCAoYykgMjAwOS0yMDExIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZword2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L0dQTCBiL2Nhcmw5MTcwZncvR1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L0dQTApAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L0tjb25maWcgYi9jYXJsOTE3MGZ3L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmZDJjZAotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvS2NvbmZpZwpAQCAtMCwwICsxLDUgQEAKK21haW5tZW51ICJDQVJMOTE3MCBGaXJtd2FyZSBDb25maWd1cmF0aW9uIgorCitzb3VyY2UgImNhcmxmdy9LY29uZmlnIgorc291cmNlICJtaW5pZncvS2NvbmZpZyIKK3NvdXJjZSAidG9vbHMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvUkVBRE1FIGIvY2FybDkxNzBmdy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwYjJkYgotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvUkVBRE1FCkBAIC0wLDAgKzEsNDMgQEAKK0NvbW11bml0eSBBUjkxNzAgTGludXggZmlybXdhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIGZpcm13YXJlIGZvciB0aGUgQXRoZXJvcyBhcjkxNzAgODAyLjExbiBkZXZpY2VzLgorCitUbyBidWlsZCB0aGUgZmlybXdhcmUgeW91IHdpbGwgbmVlZCBhbiBTSC0yIHRvb2xjaGFpbi4KK1lvdSBjYW4gYnVpbGQgeW91ciBvd24gdG9vbGNoYWluOgorCittYWtlIC1DIHRvb2xjaGFpbgorCitidXQgYmUgYXdhcmUgdGhhdCB0aGlzIHdpbGwgdGFrZSBzb21lIHRpbWUgYW5kIHJlcXVpcmVzCithYm91dCAxLjIgR2lCIGRpc2sgc3BhY2UuCisKK1RoZSByZXN1bHRpbmcgZmlybXdhcmUsIGNhcmw5MTcwLmZ3LCBjYW4gYmUgdXNlZCBvbmx5Cit3aXRoIHRoZSBjYXJsOTE3MCBMaW51eCBkcml2ZXIuCisKK0FmdGVyIGdldHRpbmcgYSB0b29sY2hhaW4sIHlvdSB3aWxsIG5lZWQgdG8gZ2V0IG1vcmUKK3Rvb2xzICYgbGliczoKKworICogZ2NjIDQuNCsKKworICogZ3BlcmYsIGJpc29uL2ZsZXgKKworICogY21ha2UgMi44LjArCisKKyAqIGxpYnVzYiAxLjArCisKKyAqIFNETCBTREsgMS4yLjEzKworCithZnRlcndhcmRzLCBzaW1wbHkgZXhlY3V0ZToKKworYXV0b2dlbi5zaAorCit0byBzdGFydCB0aGUgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgcHJvY2Vzcy4KKworaWYgeW91IHdhbnQgdG8gImluc3RhbGwiIHlvdXIgb3duIGZpcm13YXJlLCB5b3UgY2FuIGVpdGhlcgorZG8gdGhpcyBtYW51YWxseSwgb3IgYnkgZXhlY3V0aW5nOgorIAorYXV0b2dlbi5zaCBpbnN0YWxsCisKK1RoaXMgd2lsbCBwbGFjZSBhIGNvcHkgd2l0aCB0aGUgcmlnaHQgZmlsZW5hbWUgW2FkZHMgQVBJIHJldl0KK2ludG8gL2xpYi9maXJtd2FyZS9bdGhlIGRlZmF1bHQgcGF0aCBvbiBtb3N0IERpc3RyaWJ1dGlvbnNdLgorCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2F1dG9nZW4uc2ggYi9jYXJsOTE3MGZ3L2F1dG9nZW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjg0M2YxOQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvYXV0b2dlbi5zaApAQCAtMCwwICsxLDQ3IEBACisjIS9iaW4vYmFzaAorCitzZXQgLWUKKworY2FzZSAiJDEiIGluCisJY29uZmlnKQorCQllY2hvICJDb25maWd1cmluZy4uLiIKKwkJcHVzaGQgY29uZmlnCisJCWNtYWtlIC4KKwkJbWFrZQorCQlwb3BkCisJCWNvbmZpZy9jb25mIEtjb25maWcKKwkJY21ha2UgLgorCTs7CisKKwljb21waWxlKQorCQllY2hvICJDb21waWxlIHRpbWUuLi4iCisJCW1ha2UKKwk7OworCisJaW5zdGFsbCkKKwkJaWYgWyAhIC1lIC5jb25maWcgXTsgdGhlbgorCQkJZXhpdCAxCisJCWZpCisKKwkJLiAuLy5jb25maWcKKwkJbWFrZQorCisJCWVjaG8gLW4gIkluc3RhbGxpbmcgZmlybXdhcmUuLi4iCisJCWlmIFsgIiRDT05GSUdfQ0FSTDkxNzBGV19CVUlMRF9UT09MUyIgPSAieSIgXSAmJgorCQkgICBbICIkQ09ORklHX0NBUkw5MTcwRldfQlVJTERfTUlOSUJPT1QiID0gInkiIF07IHRoZW4KKwkJCWVjaG8gLW4gIkFwcGx5IG1pbmlib290Li4uIgorCQkJdG9vbHMvc3JjL21pbmlib290IGEgY2FybGZ3L2Nhcmw5MTcwLmZ3IG1pbmlmdy9taW5pYm9vdC5mdworCQlmaQorCisJCWluc3RhbGwgLW0gNjQ0IGNhcmxmdy9jYXJsOTE3MC5mdyBcCisJCQkuLi9jYXJsOTE3MC0kQ09ORklHX0NBUkw5MTcwRldfUkVMRUFTRV9WRVJTSU9OLmZ3CisJCWVjaG8gImRvbmUuIgorCTs7CisKKwkqKQorCQkkMCBjb25maWcKKwkJJDAgY29tcGlsZQorCTs7CisKKworZXNhYwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvQ01ha2VMaXN0cy50eHQgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWY5NTk1Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jYXJsZncvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw2NyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOCkKKworcHJvamVjdChjYXJsOTE3MC5mdykKKworaW5jbHVkZSgiLi4vZXh0cmEvc2gtZWxmLWxpbnV4LmNtYWtlIikKK2luY2x1ZGUoIi4uL2NvbmZpZy5jbWFrZSIpCisKK3NldChDQVJMRldfQ0ZMQUdTX1dBUk5JTkcgIi1XIC1XYWxsIC1XZXh0cmEgLVd1bnJlYWNoYWJsZS1jb2RlIC1XaW5saW5lIC1XbG9naWNhbC1vcCAtV25vLXBhY2tlZC1iaXRmaWVsZC1jb21wYXQgLVdpbml0LXNlbGYgLVdzaGFkb3cgLVd3cml0ZS1zdHJpbmdzIC1XYWdncmVnYXRlLXJldHVybiAtV3N0cmljdC1wcm90b3R5cGVzIC1XZm9ybWF0PTIgLVdjYXN0LWFsaWduIC1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XdHlwZS1saW1pdHMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3Npbmctbm9yZXR1cm4gLVdyZWR1bmRhbnQtZGVjbHMgLVduZXN0ZWQtZXh0ZXJucyAtV2Rpc2FibGVkLW9wdGltaXphdGlvbiAtV3BvaW50ZXItYXJpdGggLVd2b2xhdGlsZS1yZWdpc3Rlci12YXIgLVdhZGRyZXNzIC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVd1bnNhZmUtbG9vcC1vcHRpbWl6YXRpb25zIikKK3NldChDQVJMRldfQ0ZMQUdTX0VYVFJBICItbWJpdG9wcyAtc3RkPWdudTk5IC1mZnVuY3Rpb24tc2VjdGlvbnMgLVdmcmFtZS1sYXJnZXItdGhhbj0xMjggLVdlcnJvciIpCitzZXQoQ0FSTEZXX0NGTEFHU19ERUYgIi1EX19DQVJMOTE3MEZXX18iKQoraWYgKENPTkZJR19DQVJMOTE3MEZXX0FHR1JFU1NJVkVfQ0ZMQUdTKQorCXNldChDQVJMRldfQ0ZMQUdTX0FHR1JFU1NJVkUgIi1mb21pdC1mcmFtZS1wb2ludGVyIC1mc2VlIC1mcmVuYW1lLXJlZ2lzdGVycyAtZnRyZWUtdmVjdG9yaXplIC1mbHRvIC1mc3RyaWN0LXZvbGF0aWxlLWJpdGZpZWxkcyAtZm1vZHVsby1zY2hlZCIpCitlbmRpZiAoQ09ORklHX0NBUkw5MTcwRldfQUdHUkVTU0lWRV9DRkxBR1MpCisKK2luY2x1ZGVfZGlyZWN0b3JpZXMgKC4uL2luY2x1ZGUvbGludXggLi4vaW5jbHVkZS9zaGFyZWQgLi4vaW5jbHVkZSBpbmNsdWRlKQorCitzZXQoY2FybDkxNzBfbWFpbl9zcmMgc3JjL21haW4uYyBzcmMvd2xhbi5jIHNyYy9mdy5jIHNyYy9ncGlvLmMKKwkJICAgICAgc3JjL2NtZC5jIHNyYy91YXJ0LmMgc3JjL2RtYS5jIHNyYy9ob3N0aWYuYyBzcmMvcmVib290LlMKKwkJICAgICAgc3JjL3ByaW50Zi5jIHNyYy9yZi5jIHNyYy9jYW0uYyBzcmMvd29sLmMpCisKK3NldChjYXJsOTE3MF9saWJfc3JjIHNyYy9hc2hsc2kzLlMgc3JjL21lbWNweS5TIHNyYy9tZW1zZXQuUyBzcmMvdWRpdnNpM19pNGktT3MuUykKK3NldChjYXJsOTE3MF91c2Jfc3JjIHVzYi9tYWluLmMgdXNiL3VzYi5jIHVzYi9maWZvLmMpCisKK3NldChjYXJsOTE3MF9zcmMgJHtjYXJsOTE3MF9tYWluX3NyY30gJHtjYXJsOTE3MF9saWJfc3JjfSAke2Nhcmw5MTcwX3VzYl9zcmN9KQorCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoc3JjL2FzaGxzaTMuUyBQUk9QRVJUSUVTIExBTkdVQUdFIEMpCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoc3JjL21lbWNweS5TIFBST1BFUlRJRVMgTEFOR1VBR0UgQykKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzcmMvbWVtc2V0LlMgUFJPUEVSVElFUyBMQU5HVUFHRSBDKQorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKHNyYy9yZWJvb3QuUyBQUk9QRVJUSUVTIExBTkdVQUdFIEMpCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoc3JjL3VkaXZzaTNfaTRpLU9zLlMgUFJPUEVSVElFUyBMQU5HVUFHRSBDKQorCithZGRfZXhlY3V0YWJsZShjYXJsOTE3MC5lbGYgJHtjYXJsOTE3MF9zcmN9KQorCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoY2FybDkxNzAuZWxmIFBST1BFUlRJRVMgTElOS0VSX0xBTkdVQUdFIEMpCisKK3NldF90YXJnZXRfcHJvcGVydGllcyhjYXJsOTE3MC5lbGYgUFJPUEVSVElFUyBDT01QSUxFX0ZMQUdTCisJIiAke0NBUkxGV19DRkxBR1NfREVGfSAke0NBUkxGV19DRkxBR1NfRVhUUkF9ICR7Q0FSTEZXX0NGTEFHU19BR0dSRVNTSVZFfSAke0NBUkxGV19DRkxBR1NfV0FSTklOR30iKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGNhcmw5MTcwLmVsZiBQUk9QRVJUSUVTIExJTktfRkxBR1MgIi1UY2FybDkxNzAubGRzIikKKworCisKK2FkZF9jdXN0b21fdGFyZ2V0KGZpcm13YXJlIEFMTCkKKworYWRkX2N1c3RvbV9jb21tYW5kKAorCVNPVVJDRSBjYXJsOTE3MC5lbGYKKwlDT01NQU5EICR7T0JKQ09QWX0KKwlBUkdTIC0tc3RyaXAtdW5uZWVkZWQgLU8gYmluYXJ5IC1SIC5zcmFtIC1SIC5lZXByb20gLVIgLmZ3ZHNjIGNhcmw5MTcwLmVsZiBjYXJsOTE3MC5iaW4KKwlUQVJHRVQgZmlybXdhcmUKKwlPVVRQVVRTIGNhcmw5MTcwLmJpbikKKworYWRkX2N1c3RvbV9jb21tYW5kKAorCVNPVVJDRSBjYXJsOTE3MC5lbGYKKwlDT01NQU5EICR7T0JKQ09QWX0KKwlBUkdTIC0tc3RyaXAtdW5uZWVkZWQgLU8gYmluYXJ5IC1qIC5md2RzYyBjYXJsOTE3MC5lbGYgY2FybDkxNzAuZHNjCisJVEFSR0VUIGZpcm13YXJlCisJT1VUUFVUUyBjYXJsOTE3MC5kc2MpCisKK2FkZF9jdXN0b21fY29tbWFuZCgKKwlTT1VSQ0UgZmlybXdhcmUKKwlUQVJHRVQgZmlybXdhcmUKKwlDT01NQU5EIGNhdAorCUFSR1MgImNhcmw5MTcwLmJpbiIgImNhcmw5MTcwLmRzYyIgPiAiY2FybDkxNzAuZnciCisJREVQRU5EUyBjYXJsOTE3MC5lbGYgY2FybDkxNzAuYmluIGNhcmw5MTcwLmRzYworCU9VVFBVVFMgY2FybDkxNzAuZncpCisKK1NFVF9ESVJFQ1RPUllfUFJPUEVSVElFUygKKwlQUk9QRVJUSUVTIEFERElUSU9OQUxfTUFLRV9DTEVBTl9GSUxFUyAiY2FybDkxNzAuZnciKQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvS2NvbmZpZyBiL2Nhcmw5MTcwZncvY2FybGZ3L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyMjY4YwotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L0tjb25maWcKQEAgLTAsMCArMSwyMzMgQEAKK21lbnUgIkdlbmVyYWwiCisKK2NvbmZpZyBDQVJMOTE3MEZXX1JFTEVBU0VfVkVSU0lPTgorCWludAorCWRlZmF1bHQgMQorCittZW51ICJTZWxlY3RhYmxlIEhhcmR3YXJlIE9wdGlvbnMiCisKK2Nob2ljZQorCXByb21wdCAiUmVjZWl2ZXIgTWF4LiBGcmFtZSBMZW5ndGgiCisJZGVmYXVsdCBDQVJMOTE3MEZXX1JYX0ZSQU1FX0xFTl84MTkyCisKKwljb25maWcgQ0FSTDkxNzBGV19SWF9GUkFNRV9MRU5fNDA5NgorCQlib29sICI0MDk2IgorCisJY29uZmlnIENBUkw5MTcwRldfUlhfRlJBTUVfTEVOXzgxOTIKKwkJYm9vbCAiODE5MiIKKworCWNvbmZpZyBDQVJMOTE3MEZXX1JYX0ZSQU1FX0xFTl8xNjM4NAorCQlib29sICIxNjM4NCIKKworCWNvbmZpZyBDQVJMOTE3MEZXX1JYX0ZSQU1FX0xFTl8zMjc2OAorCQlib29sICIzMjc2OCIKKworZW5kY2hvaWNlCisKK2NvbmZpZyBDQVJMOTE3MEZXX1JYX0ZSQU1FX0xFTgorCWludAorCWRlZmF1bHQgNDA5NiBpZiBDQVJMOTE3MEZXX1JYX0ZSQU1FX0xFTl80MDk2CisJZGVmYXVsdCA4MTkyIGlmIENBUkw5MTcwRldfUlhfRlJBTUVfTEVOXzgxOTIKKwlkZWZhdWx0IDE2Mzg0IGlmIENBUkw5MTcwRldfUlhfRlJBTUVfTEVOXzE2Mzg0CisJZGVmYXVsdCAzMjc2OCBpZiBDQVJMOTE3MEZXX1JYX0ZSQU1FX0xFTl8zMjc2OAorCitjb25maWcgQ0FSTDkxNzBGV19HUElPX0lOVEVSUlVQVAorCWRlZl9ib29sIHkKKwlwcm9tcHQgIkdQSU8gU29mdHdhcmUgSW50ZXJydXB0IgorCS0tLWhlbHAtLS0KKwkgV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUgZmlybXdhcmUgd2lsbCBwb2xsIHRoZSBHUElPCisJIHJlZ2lzdGVycyBhbmQgcmVwb3J0cyB0byB0aGUgZHJpdmVyIHdoZW5ldmVyIHRoZSBHUElPIHN0YXRlCisJIGhhcyBjaGFuZ2VkIGZyb20gYSBwcmV2aW91cyBzdGF0ZS4KKworCSBOb3RlOiBUaGlzIGZlYXR1cmUgaXMgbmVjZXNzYXJ5IHRvIG1vbml0b3IgdGhlIFdQUyBidXR0b24sCisJICAgICAgIGlmIHlvdSBoYXZlIG9uZSBvbiB5b3VyIGRldmljZSwgdGhlbiBzYXkgWS4KKworY29uZmlnIENBUkw5MTcwRldfU0VDVVJJVFlfRU5HSU5FCisJZGVmX2Jvb2wgeQorCXByb21wdCAiU3VwcG9ydCBIYXJkd2FyZSBDcnlwdG8gRW5naW5lIgorCS0tLWhlbHAtLS0KKwkgVGhpcyBvcHRpb25zIGNvbnRyb2xzIGlmIHRoZSBmaXJtd2FyZSB3aWxsIGFsbG93IHRoZSBkcml2ZXIKKwkgdG8gcHJvZ3JhbSB0aGUgc2VjdXJpdHkgZW5naW5lIC8gQ0FNIHRocm91Z2ggYSBmaXJtd2FyZQorCSBpbnRlcmZhY2UuCisKKwkgU2F5IFkuIFVubGVzcyB5b3Ugd2FudCB0byBkbyB0aGUgZW4tIGFuZCBkZWNyeXB0aW9uIGZvcgorCSBDQ01QKEFFUyksIFRLSVAvV0VQKFJDNCkgaW4gdGhlIGFwcGxpY2F0aW9uIGFueXdheS4KKworY29uZmlnIENBUkw5MTcwRldfUkFESU9fRlVOQ1RJT05TCisJZGVmX2Jvb2wgeQorCXByb21wdCAiRW5hYmxlIEZpcm13YXJlLXN1cHBvcnRlZCBSYWRpby9SRiBmdW5jdGlvbnMiCisJLS0taGVscC0tLQorCSBTb21lIFBIWS9SRiBmdW5jdGlvbnMgKGUuZy46IEFHQyBhbmQgTm9pc2UgY2FsaWJyYXRpb24pIG5lZWQKKwkgdG8gYmUgZG9uZSBpbiB0aGUgZmlybXdhcmUuCisKKwkgU2F5IFksIHVubGVzcyB5b3UgcmVhbGx5IGRvbid0IG5lZWQgdGhlIFJhZGlvL1JGIGZvcgorCSB5b3VyIHByb2plY3QuCisKK2VuZG1lbnUKKworbWVudSAiODAyLjExIEZpcm13YXJlIEZlYXR1cmVzIgorCitjb25maWcgQ0FSTDkxNzBGV19DQUJfUVVFVUUKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJTdXBwb3J0IHNvZnR3YXJlLWJhc2VkIENvbnRlbnQgYWZ0ZXIgQmVhY29uIFF1ZXVlIgorCS0tLWhlbHAtLS0KKwkgVGhpcyAoc29mdHdhcmUpIHF1ZXVlIGlzIHVzZWQgdG8gc2VuZCBhbnkgYnJvYWQtL211bHRpLWNhc3QgYnVmZmVyZWQKKwkgZnJhbWVzIGFmdGVyIHRoZSBuZXh0IERUSU0gYmVhY29uLgorCisJIFRoaXMgZmVhdHVyZSBpcyByZXF1aXJlZCBmb3IgQWNjZXNzcG9pbnQgbW9kZSBvcGVyYXRpb24uCisKKwkgU2F5IFkuCisKK2VuZG1lbnUKKworc291cmNlICJjYXJsZncvdXNiL0tjb25maWciCisKK21lbnUgIkV4cGVyaW1lbnRhbCwgVW5zdGFibGUgJiBUZXN0aW5nIEV4dGVuc2lvbnMiCisKK2NvbmZpZyBDQVJMOTE3MEZXX1BSSU5URgorCWRlZl9ib29sIHkKKwlwcm9tcHQgIkFkdmFuY2VkIHByaW50ZiIKKwlkZXBlbmRzIG9uIENBUkw5MTcwRldfREVCVUdfVUFSVCB8fCBDQVJMOTE3MEZXX0RFQlVHX1VTQgorCS0tLWhlbHAtLS0KKwkgQWR2YW5jZWQgcHJpbnRmICh2ZXJ5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzKQorCSBUaGUgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiBhcmU6CisJCSdkJyAndScgJ2MnICdzJyAneCcgJ1gnICdwJy4KKworCSBOb3RlOiBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCwgdGhlIGZpcm13YXJlIHdpbGwgYmUgb25seQorCSAgICAgICBjYXBhYmxlIG9mIHJlcG9ydGVkIF9wcmVmb3JtYXRlZF8gc3RyaW5nLgorCitjb25maWcgQ0FSTDkxNzBGV19FWFBFUklNRU5UQUwKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJFeHBlcmltZW50YWwgRmVhdHVyZXMiCisKK2NvbmZpZyBDQVJMOTE3MEZXX1dPTF9PUFRJT04KKwlkZWZfYm9vbCBuCisJcHJvbXB0ICJXYWtldXAgb24gV0xBTiIKKwlkZXBlbmRzIG9uIENBUkw5MTcwRldfRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQsIHRoZSBmaXJtd2FyZSBjYW4gd2FrZS11cAorCSBzdXNwZW5kZWQgaG9zdHMuLi4gQXMgbG9uZyBhcyB0aGV5IGZ1bGx5IHN1cHBvcnQKKwkgVVNCIHJlbW90ZSB3YWtldXAuCisKK2NvbmZpZyBDQVJMOTE3MEZXX1dPTAorCWRlZl9ib29sIG4KKwlkZXBlbmRzIG9uIENBUkw5MTcwRldfV09MX09QVElPTgorCitjb25maWcgQ0FSTDkxNzBGV19XT0xfTkw4MDIxMV9UUklHR0VSUworCWRlZl9ib29sIG4KKwlwcm9tcHQgIlN0YW5kYXJkIE5MODAyMTEgd2FrZXVwIHRyaWdnZXJzIgorCWRlcGVuZHMgb24gQ0FSTDkxNzBGV19XT0xfT1BUSU9OCisJc2VsZWN0IENBUkw5MTcwRldfV09MCisJLS0taGVscC0tLQorCSBBdmFpbGFibGUgdHJpZ2dlcnM6CisJICAqIE1hZ2ljIFBhY2tldCh0bSkgcGF0dGVybgorCSAgKiBkaXNjb25uZWN0IGV2ZW50CisKK2NvbmZpZyBDQVJMOTE3MEZXX1dPTF9QUk9CRV9SRVFVRVNUCisJZGVmX2Jvb2wgbgorCXByb21wdCAiUHJvYmUgUmVxdWVzdCIKKwlkZXBlbmRzIG9uIENBUkw5MTcwRldfV09MX09QVElPTgorCXNlbGVjdCBDQVJMOTE3MEZXX1dPTAorCS0tLWhlbHAtLS0KKwkgU2NhbiBwcm9iZSByZXF1ZXN0cyBmb3IgYSBnaXZlbiBTU0lELgorCitjb25maWcgQ0FSTDkxNzBGV19XT0xfUFJPQkVfUkVRVUVTVF9TU0lECisJc3RyaW5nCisJcHJvbXB0ICJXYWtldXAgb24gV0xBTiBTU0lEIgorCWRlZmF1bHQgIkNBUkw5MTcwX1dBS0VVUCIKKwlkZXBlbmRzIG9uIENBUkw5MTcwRldfV09MX1BST0JFX1JFUVVFU1QKKworY29uZmlnIENBUkw5MTcwRldfVklGU19OVU0KKwlkZWZhdWx0IDEKKwlpbnQKKwlwcm9tcHQgIk51bWJlciBvZiBhZGRpdGlvbmFsIHBzZXVkbyB2aXJ0dWFsIGludGVyZmFjZXMiCisJZGVwZW5kcyBvbiBDQVJMOTE3MEZXX0VYUEVSSU1FTlRBTAorCitjb25maWcgQ0FSTDkxNzBGV19GV19NQUNfUkVTRVQKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJGaXJtd2FyZSBNQUMgQ2hpcCByZWNvdmVyeSIKKwlkZXBlbmRzIG9uIENBUkw5MTcwRldfRVhQRVJJTUVOVEFMCisKK2NvbmZpZyBDQVJMOTE3MEZXX05PSVNZX01BQ19SRVNFVAorCWRlZl9ib29sIG4KKwlwcm9tcHQgIk5vdGlmeSBNQUMgUkVTRVQgZXZlbnRzIgorCWRlcGVuZHMgb24gQ0FSTDkxNzBGV19GV19NQUNfUkVTRVQKKworY29uZmlnIENBUkw5MTcwRldfQlJPS0VOX0ZFQVRVUkVTCisJZGVmX2Jvb2wgbgorCXByb21wdCAiQnJva2VuIEZlYXR1cnMiCisKK2NvbmZpZyBDQVJMOTE3MEZXX0RFQlVHCisJZGVmX2Jvb2wgbgorCWRlcGVuZHMgb24gQ0FSTDkxNzBGV19CUk9LRU5fRkVBVFVSRVMgJiYgQ0FSTDkxNzBGV19QUklOVEYKKwlwcm9tcHQgIkVuYWJsZSB2ZXJib3NlIGRlYnVnZ2luZyBtZXNzYWdlcyIKKworY29uZmlnIENBUkw5MTcwRldfREVCVUdfTEVEX0hFQVJUQkVBVAorCWRlZl9ib29sIG4KKwlwcm9tcHQgIkxFRCBIZWFydGJlYXQiCisJZGVwZW5kcyBvbiBDQVJMOTE3MEZXX0JST0tFTl9GRUFUVVJFUworCS0tLWhlbHAtLS0KKwkgVGhpcyBvcHRpb24gY29uZmxpY3RzIHdpdGggdGhlIGFwcGxpY2F0aW9uJ3MgTEVEIGNvZGUuCisJIEFsc28sIGl0IGFzc3VtZXMgdGhhdCB5b3UgaGF2ZSB0d28gTEVEcywgd2hpY2ggaXMgbm90CisJIG5lY2Vzc2FyaWx5IHRydWUuCisKK2NvbmZpZyBDQVJMOTE3MEZXX0RFQlVHX1VBUlQKKwlkZWZfYm9vbCBuCisJcHJvbXB0ICJQYXNzIGRlYnVnIG1lc3NhZ2VzIHRocm91Z2ggSGlnaHNwZWVkIFVBUlQiCisJZGVwZW5kcyBvbiBDQVJMOTE3MEZXX0JST0tFTl9GRUFUVVJFUworCS0tLWhlbHAtLS0KKwkgVGhpcyBvcHRpb24gYWxsb3dzIHRoZSBmaXJtd2FyZSB0byBzZW5kIEJVRy9FUlIvSU5GTy9EQkcgYW5kCisJIGhleGR1bXBzIHRocm91Z2ggdGhlIFVBUlQgX2FzIHdlbGxfLiBIb3dldmVyLCBmaXJzdDogeW91IG11c3QKKwkgY29ubmVjdCBhIHdvcmtpbmcgbG9nZ2VyLgorCitjb25maWcgQ0FSTDkxNzBGV19XQVRDSERPR19CVVRUT04KKwlkZWZfYm9vbCBuCisJZGVwZW5kcyBvbiBDQVJMOTE3MEZXX0JST0tFTiAmJiBDQVJMOTE3MEZXX0dQSU9fSU5URVJSVVBUCisJcHJvbXB0ICJUcmlnZ2VyIFdhdGNoZG9nIGJ5IHByZXNzaW5nIHRoZSBXUFMgYnV0dG9uIgorCitjaG9pY2UgQ0FSTDkxNzBGV19VQVJUX0NMT0NLCisJcHJvbXB0ICJVQVJUIENsb2NrIgorCWRlcGVuZHMgb24gQ0FSTDkxNzBGV19ERUJVR19VQVJUCisJZGVmYXVsdCBDQVJMOTE3MEZXX1VBUlRfQ0xPQ0tfNDBNCisKK2NvbmZpZyBDQVJMOTE3MEZXX1VBUlRfQ0xPQ0tfMjVNCisJYm9vbCAiMjUiCisKK2NvbmZpZyBDQVJMOTE3MEZXX1VBUlRfQ0xPQ0tfNDBNCisJYm9vbCAiNDAiCisKK2VuZGNob2ljZQorCitjb25maWcgQ0FSTDkxNzBGV19VTlVTQUJMRQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIENBUkw5MTcwRldfQlJPS0VOIHx8IENBUkw5MTcwRldfREVCVUcKKworY29uZmlnIENBUkw5MTcwRldfVVNCX01PREVTV0lUQ0gKKwlkZWZfYm9vbCBuCisJcHJvbXB0ICJVU0IgMS4xIC8gMi4wIHN3aXRjaGluZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQ0FSTDkxNzBGV19CUk9LRU5fRkVBVFVSRVMKKwktLS1oZWxwLS0tCisJIE1vc3RseSBpbXBsZW1lbnRlZCwgYnV0IHVudGVzdGVkIGFuZCBzb21lIHNlcmlvdXMKKwkgZG91YnRzIHJlbWFpbi4KKworY29uZmlnIENBUkw5MTcwRldfRE1BX1FVRVVFX0JVTVAKKwlkZWZfYm9vbCBuCisJcHJvbXB0ICJCdW1wIGEgc3R1Y2sgVFggcXVldWUgYmVmb3JlIGRvaW5nIGEgTUFDIHJlc2V0IgorCWRlcGVuZHMgb24gQ0FSTDkxNzBGV19CUk9LRU5fRkVBVFVSRVMKKworbWVudSAiQnVpbGQgT3B0aW9ucyIKK2NvbmZpZyBDQVJMOTE3MEZXX0FHR1JFU1NJVkVfQ0ZMQUdTCisJZGVmX2Jvb2wgeQorCXByb21wdCAiRW5hYmxlIGFnZ3Jlc3NpdmUgc2l6ZSBvcHRpbWl6YXRpb24iCisJLS0taGVscC0tLQorCSBUaGlzIG9wdGlvbiBhZGRzIHNldmVyYWwgbW9yZSBvcHRpbWl6YXRpb24gY29tcGlsZXIgZmxhZ3MsCisJIHdoaWNoIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgZmlybXdhcmUgc2l6ZS4uLiBhdCB0aGUgZXhwZW5zZQorCSBvZiBtYWNoaW5lLWNvZGUgcmVhZGFiaWxpdHkuCisKKwkgIFNheSBZLiBFbHNlIHRoZSBmaXJtd2FyZSBtaWdodCBub3QgZml0IG9udG8gdGhlIGRldmljZSEKKworZW5kbWVudQorCitlbmRtZW51CisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L2Nhcmw5MTcwLmxkcyBiL2Nhcmw5MTcwZncvY2FybGZ3L2Nhcmw5MTcwLmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2RkYTY4Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jYXJsZncvY2FybDkxNzAubGRzCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBUaGUgY2FybDkxNzAgZmlyd21hcmUgZ2V0cyBjb3BpZWQgaW50byB0aGUgZGV2aWNlJ3MKKyAqIFByb2dyYW0gUkFNIChwcmFtKSwgd2hpY2ggaGFzIGEgc2l6ZSBvZiAxNkssIGJ1dAorICogYWxzbyBoYXMgdG8gYWNjb21vZGF0ZSB0aGUgc3RhY2sgdGhlIGRldmljZSB1c2VzLAorICogd2hpY2ggc3RhcnRzIGF0IHRoZSB0b3Agb2YgdGhlIDE2aywgc28gd2UgcHJldGVuZAorICogdGhhdCB3ZSBqdXN0IGhhdmUgMTYyNTYgKDE2ayAtIDEyOCkgb2YgcHJhbS4KKyAqCisgKiBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHNvbWUgb2YgdGhlIG90aGVyIGFyZWFzCisgKiBtYXBwZWQgaW50byB0aGUgZmlybXdhcmUgcHJvY2Vzc29yJ3MgYWRkcmVzcyBzcGFjZQorICogYXMgd2VsbC4KKyAqLworCitFTlRSWShfc3RhcnQpOworCitNRU1PUlkKK3sKKyAgICBlZXByb20gICA6IE9SSUdJTiA9IDB4MDAwMDAwLCBMRU5HVEggPSAxMDI0aworICAgIHNyYW0gICAgIDogT1JJR0lOID0gMHgxMDAwMDAsIExFTkdUSCA9IDk2aworICAgIHVhcnQgICAgIDogT1JJR0lOID0gMHgxYzAwMDAsIExFTkdUSCA9IDRrCisgICAgdGltZXIgICAgOiBPUklHSU4gPSAweDFjMTAwMCwgTEVOR1RIID0gNGsKKyAgICB2Zmxhc2ggICA6IE9SSUdJTiA9IDB4MWMyMDAwLCBMRU5HVEggPSA0aworICAgIHdsYW4gICAgIDogT1JJR0lOID0gMHgxYzMwMDAsIExFTkdUSCA9IDRrCisgICAgcGNpMmFoYiAgOiBPUklHSU4gPSAweDFjNDAwMCwgTEVOR1RIID0gNGsKKyAgICBzZWN1cml0eSA6IE9SSUdJTiA9IDB4MWM1MDAwLCBMRU5HVEggPSA0aworICAgIGdwaW8gICAgIDogT1JJR0lOID0gMHgxZDAwMDAsIExFTkdUSCA9IDRrCisgICAgbWVtY3RsICAgOiBPUklHSU4gPSAweDFkMTAwMCwgTEVOR1RIID0gNGsKKyAgICBpcnFjdGwgICA6IE9SSUdJTiA9IDB4MWQyMDAwLCBMRU5HVEggPSA0aworICAgIHVzYiAgICAgIDogT1JJR0lOID0gMHgxZTEwMDAsIExFTkdUSCA9IDRrCisgICAgcHRhICAgICAgOiBPUklHSU4gPSAweDFlMjAwMCwgTEVOR1RIID0gNGsKKyAgICBwcmFtICAgICA6IE9SSUdJTiA9IDB4MjAwMDAwLCBMRU5HVEggPSAxNjI1NgorICAgIGJvZ3VzICAgIDogT1JJR0lOID0gMHgzMDAwMDAsIExFTkdUSCA9IDhrCit9CisKK1NFQ1RJT05TCit7CisJLmVlcHJvbSA6IHsgKiguZWVwcm9tKikgfSA+IGVlcHJvbQorCS5zcmFtCTogeyAqKC5zcmFtKikgfSA+IHNyYW0KKworCS8qCisJICogVGhlIGFyOTE3MCBib290IGNvZGUgd2lsbCBleGVjdXRlIHRoZSBjb2RlCisJICogYXQgYWRkcmVzcyAweDA0IGZyb20gdGhlIGxvYWRlZCBmaXJtd2FyZSBhcworCSAqIHN1Y2ggd2UgbXVzdCBlbnN1cmUgb3VyIHN0YXJ0aW5nIHJvdXRpbmUKKwkgKiBpcyBrZXB0IGF0IHRoYXQgYWRkcmVzcy4KKwkgKi8KKwkucGFkZGluZyA6IHsKKwkJLyogTk9QIE5PUCBqdXN0IGluIGNhc2UgKi8KKwkJTE9ORygweDAwMDkwMDA5KQorCX0gPiBwcmFtCisKKwkuYm9vdCAgICAgOiB7ICooLmJvb3QpIH0gPiBwcmFtCisJLyogYW55dGhpbmcgZWxzZSBjYW4gYmUgYW55d2hlcmUgKi8KKworCS50ZXh0CTogeyAqKC50ZXh0KikgfSA+IHByYW0KKwkucm9kYXRhCTogeyAqKC5yb2RhdGEqKSB9ID4gcHJhbQorCS5ic3MJOiB7ICooLmJzcykgfSA+IHByYW0KKwkuZGF0YQk6IHsgKiguZGF0YSopIH0gPiBwcmFtCisKKwkuZndkc2MJOiB7IEtFRVAoKiguZndkc2MpKSB9ID4gYm9ndXMKK30KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvY2FtLmggYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL2NhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYWZlMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL2NhbS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBDQU0gKFNlY3VyaXR5IEVuZ2luZSkgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQJMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDktMjAxMQlDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MEZXX0NBTV9ICisjZGVmaW5lIF9fQ0FSTDkxNzBGV19DQU1fSAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY21kLmgiCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19TRUNVUklUWV9FTkdJTkUKKworI2RlZmluZSBFTkNSWV9UWVBFX1NUQVJUX0FERFIJMjQKKyNkZWZpbmUgREVGQVVMVF9FTkNSWV9UWVBFCTI2CisjZGVmaW5lIEtFWV9TVEFSVF9BRERSCQkyNworI2RlZmluZSBTVEFfS0VZX1NUQVJUX0FERFIJMTU1CisjZGVmaW5lIENPVU5URVJfU1RBUlRfQUREUiAgICAgIDE2MworI2RlZmluZSBTVEFfQ09VTlRFUl9TVEFSVF9BRERSCTE2NQorCisvKiBDQU0gKi8KKyNkZWZpbmUgTUlDX0ZJTklTSAkJCTB4MQorCit2b2lkIHNldF9rZXkoY29uc3Qgc3RydWN0IGNhcmw5MTcwX3NldF9rZXlfY21kICprZXkpOwordm9pZCBkaXNhYmxlX2tleShjb25zdCBzdHJ1Y3QgY2FybDkxNzBfZGlzYWJsZV9rZXlfY21kICprZXkpOworCisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfU0VDVVJJVFlfRU5HSU5FICovCisKKyNlbmRpZiAvKiBfX0NBUkw5MTcwRldfQ0FNX0ggKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvY2FybDkxNzAuaCBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvY2FybDkxNzAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjE2NDE1Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS9jYXJsOTE3MC5oCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogY2FybDkxNzAgZmlybXdhcmUgLSB1c2VkIGJ5IHRoZSBhcjkxNzAgd2lyZWxlc3MgZGV2aWNlCisgKgorICogRmlybXdhcmUgY29udGV4dCBkZWZpbml0aW9uCisgKgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MEZXX0NBUkw5MTcwX0gKKyNkZWZpbmUgX19DQVJMOTE3MEZXX0NBUkw5MTcwX0gKKworI2luY2x1ZGUgImdlbmVyYXRlZC9hdXRvY29uZi5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyLmgiCisjaW5jbHVkZSAiZndjbWQuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgImRtYS5oIgorI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgImNtZC5oIgorCitzdHJ1Y3QgY2FybDkxNzBfYmFyX2N0eCB7CisJdWludDhfdCB0YVs2XTsKKwl1aW50OF90IHJhWzZdOworCV9fbGUxNiBzdGFydF9zZXFfbnVtOworCV9fbGUxNiBjb250cm9sOworfTsKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX0NBQl9RVUVVRQorZW51bSBjYXJsOTE3MF9jYWJfdHJpZ2dlciB7CisJQ0FSTDkxNzBfQ0FCX1RSSUdHRVJfRU1QVFkJPSAwLAorCUNBUkw5MTcwX0NBQl9UUklHR0VSX0FSTUVECT0gQklUKDApLAorCUNBUkw5MTcwX0NBQl9UUklHR0VSX0RFRkVSCT0gQklUKDEpLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19DQUJfUVVFVUUgKi8KKworZW51bSBjYXJsOTE3MF9lcDBfYWN0aW9uIHsKKwlDQVJMOTE3MF9FUDBfTk9fQUNUSU9OCQk9IDAsCisJQ0FSTDkxNzBfRVAwX1NUQUxMCQk9IEJJVCgwKSwKKwlDQVJMOTE3MF9FUDBfVFJJR0dFUgkJPSBCSVQoMSksCit9OworCitlbnVtIGNhcmw5MTcwX21hY19yZXNldF9zdGF0ZSB7CisJQ0FSTDkxNzBfTUFDX1JFU0VUX09GRgkJPSAwLAorCUNBUkw5MTcwX01BQ19SRVNFVF9BUk1FRCwKKwlDQVJMOTE3MF9NQUNfUkVTRVRfUkVTRVQsCisJQ0FSTDkxNzBfTUFDX1JFU0VUX0ZPUkNFLAorfTsKKworZW51bSBjYXJsOTE3MF9zdXNwZW5kX21vZGUgeworCUNBUkw5MTcwX0hPU1RfQVdBS0UJCQk9IDAsCisJQ0FSTDkxNzBfSE9TVF9TVVNQRU5ERUQsCisJQ0FSTDkxNzBfQVdBS0VfSE9TVCwKK307CisKK2VudW0gY2FybDkxNzBfcGh5X3N0YXRlIHsKKwlDQVJMOTE3MF9QSFlfT0ZGCQk9IDAsCisJQ0FSTDkxNzBfUEhZX09OCit9OworCit0eXBlZGVmIHZvaWQgKCpmd19kZXNjX2NhbGxiYWNrX3QpKHZvaWQgKiwgY29uc3QgYm9vbCk7CisKKy8qCisgKiBUaGlzIHBsYXRmb3JtIC0gYmVpbmcgYW4gb2RkIDMyLWJpdCBhcmNoaXRlY3R1cmUgLSBwcmVmZXJzIHRvCisgKiBoYXZlIDMyLUJpdCB2YXJpYWJsZXMuCisgKi8KKworc3RydWN0IGZpcm13YXJlX2NvbnRleHRfc3RydWN0IHsKKwkvKiB0aW1lciAvIGNsb2NrcyAqLworCXVuc2lnbmVkIGludCB0aWNrc19wZXJfdXNlYzsKKwl1bnNpZ25lZCBpbnQgY291bnRlcjsJCQkvKiBtYWluKCkgY3ljbGVzICovCisKKwkvKiBtaXNjICovCisJdW5zaWduZWQgaW50IHdhdGNoZG9nX2VuYWJsZTsKKwl1bnNpZ25lZCBpbnQgcmVib290OworCXVuc2lnbmVkIGludCBzdXNwZW5kX21vZGU7CisKKwlzdHJ1Y3QgeworCQkvKiBIb3N0IEludGVyZmFjZSBETUEgcXVldWVzICovCisJCXN0cnVjdCBkbWFfcXVldWUgdXBfcXVldWU7CS8qIHVzZWQgdG8gc2VuZCBmcmFtZXMgdG8gdGhlIGhvc3QgKi8KKwkJc3RydWN0IGRtYV9xdWV1ZSBkb3duX3F1ZXVlOwkvKiBzdG9yZXMgaW5jb21pbmcgZnJhbWVzIGZyb20gdGhlIGhvc3QgKi8KKwl9IHB0YTsKKworCXN0cnVjdCB7CisJCS8qIEhhcmR3YXJlIERNQSBxdWV1ZXMgKi8KKwkJc3RydWN0IGRtYV9xdWV1ZSB0eF9xdWV1ZVtfX0FSOTE3MF9OVU1fVFhfUVVFVUVTXTsJLyogd2xhbiB0eCBxdWV1ZSAqLworCQlzdHJ1Y3QgZG1hX3F1ZXVlIHR4X3JldHJ5OworCQlzdHJ1Y3QgZG1hX3F1ZXVlIHJ4X3F1ZXVlOwkJCQkvKiB3bGFuIHJ4IHF1ZXVlICovCisKKwkJLyogdHggYWdncmVnYXRlIHNjaGVkdWxpbmcgKi8KKwkJc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKmFtcGR1X3ByZXZbX19BUjkxNzBfTlVNX1RYX1FVRVVFU107CisKKwkJLyogSGFyZHdhcmUgRE1BIHF1ZXVlIHVuc3R1Y2svZml4IGRldGVjdGlvbiAqLworCQl1bnNpZ25lZCBpbnQgbGFzdF9zdXBlcl9udW1bX19BUjkxNzBfTlVNX1RYX1FVRVVFU107CisJCXN0cnVjdCBjYXJsOTE3MF90eF9zdXBlcmZyYW1lICpsYXN0X3N1cGVyW19fQVI5MTcwX05VTV9UWF9RVUVVRVNdOworCQl1bnNpZ25lZCBpbnQgbWFjX3Jlc2V0OworCQl1bnNpZ25lZCBpbnQgc29mdF9pbnQ7CisKKwkJLyogcnggZmlsdGVyICovCisJCXVuc2lnbmVkIGludCByeF9maWx0ZXI7CisKKwkJLyogdHggc2VxdWVuY2UgY29udHJvbCBjb3VudGVycyAqLworCQl1bnNpZ25lZCBpbnQgc2VxdWVuY2VbQ0FSTDkxNzBfSU5URl9OVU1dOworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfQ0FCX1FVRVVFCisJCS8qIENBQiAqLworCQlzdHJ1Y3QgZG1hX3F1ZXVlIGNhYl9xdWV1ZVtDQVJMOTE3MF9JTlRGX05VTV07CisJCXVuc2lnbmVkIGludCBjYWJfcXVldWVfbGVuW0NBUkw5MTcwX0lOVEZfTlVNXTsKKwkJdW5zaWduZWQgaW50IGNhYl9mbHVzaF90aW1lOworCQllbnVtIGNhcmw5MTcwX2NhYl90cmlnZ2VyIGNhYl9mbHVzaF90cmlnZ2VyW0NBUkw5MTcwX0lOVEZfTlVNXTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19DQUJfUVVFVUUgKi8KKworCQkvKiB0eCBzdGF0dXMgKi8KKwkJdW5zaWduZWQgaW50IHR4X3N0YXR1c19wZW5kaW5nLAorCQkJICAgICB0eF9zdGF0dXNfaGVhZF9pZHgsCisJCQkgICAgIHR4X3N0YXR1c190YWlsX2lkeDsKKwkJc3RydWN0IGNhcmw5MTcwX3R4X3N0YXR1cyB0eF9zdGF0dXNfY2FjaGVbQ0FSTDkxNzBfVFhfU1RBVFVTX05VTV07CisKKwkJLyogaW50ZXJuYWwgZGVzY3JpcHRvciBmb3IgdXNlIHdpdGhpbiB0aGUgc2VydmljZSByb3V0aW5lcyAqLworCQlzdHJ1Y3QgZG1hX2Rlc2MgKmZ3X2Rlc2M7CisJCXVuc2lnbmVkIGludCBmd19kZXNjX2F2YWlsYWJsZTsKKwkJdm9pZCAqZndfZGVzY19kYXRhOworCQlmd19kZXNjX2NhbGxiYWNrX3QgZndfZGVzY19jYWxsYmFjazsKKworCQkvKiBCQShSKSBSZXF1ZXN0IEhhbmRsZXIgKi8KKwkJc3RydWN0IGNhcmw5MTcwX2Jhcl9jdHggYmFfY2FjaGVbQ09ORklHX0NBUkw5MTcwRldfQkFDS19SRVFTX05VTV07CisJCXVuc2lnbmVkIGludCBiYV90YWlsX2lkeCwKKwkJCSAgICAgYmFfaGVhZF9pZHgsCisJCQkgICAgIHF1ZXVlZF9iYTsKKworCQl1bnNpZ25lZCBpbnQgcXVldWVkX2JhcjsKKwl9IHdsYW47CisKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgY29uZmlnLAorCQkJICAgICBpbnRlcmZhY2Vfc2V0dGluZywKKwkJCSAgICAgYWx0ZXJuYXRlX2ludGVyZmFjZV9zZXR0aW5nLAorCQkJICAgICBkZXZpY2VfZmVhdHVyZTsKKwkJZW51bSBjYXJsOTE3MF9lcDBfYWN0aW9uIGVwMF9hY3Rpb247CisKKwkJdm9pZCAqZXAwX3R4cnhfYnVmZmVyOworCQl1bnNpZ25lZCBpbnQgZXAwX3R4cnhfbGVuLAorCQkJICAgICBlcDBfdHhyeF9wb3M7CisKKwkJc3RydWN0IGFyOTE3MF91c2JfY29uZmlnICpjZmdfZGVzYzsKKwkJc3RydWN0IGFyOTE3MF91c2JfY29uZmlnICpvc19jZmdfZGVzYzsKKworCQkvKgorCQkgKiBzcGVjaWFsIGJ1ZmZlcnMgZm9yIGNvbW1hbmQgJiByZXNwb25zZSBoYW5kbGluZworCQkgKgorCQkgKiB0aGUgZmlybXdhcmUgdXNlcyBhIHNvcnQgb2YgcmluZy1idWZmZXIgdG8gY29tbXVuaWNhdGUKKwkJICogdG8gdGhlIGhvc3QuCisJCSAqLworCQl1bnNpZ25lZCBpbnQgaW50X3BlbmRpbmcsCisJCQkgICAgIGludF9kZXNjX2F2YWlsYWJsZSwKKwkJCSAgICAgaW50X2hlYWRfaW5kZXgsCisJCQkgICAgIGludF90YWlsX2luZGV4OworCQlzdHJ1Y3QgZG1hX2Rlc2MgKmludF9kZXNjOworCQlzdHJ1Y3QgY2FybDkxNzBfcnNwIGludF9idWZbQ0FSTDkxNzBfSU5UX1JRX0NBQ0hFU107CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVR19VU0IKKwkJLyogVVNCIHByaW50ZiAqLworCQl1bnNpZ25lZCBpbnQgcHV0X2luZGV4OworCQl1aW50OF90IHB1dF9idWZmZXJbQ0FSTDkxNzBfTUFYX0NNRF9QQVlMT0FEX0xFTl07CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfREVCVUdfVVNCICovCisKKwl9IHVzYjsKKworCXN0cnVjdCB7CisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfUkFESU9fRlVOQ1RJT05TCisJCS8qIChjYWNoZWQpIGFyOTE3MF9yZl9pbml0ICovCisKKwkJLyogUEhZL1JGIHN0YXRlICovCisJCXVuc2lnbmVkIGludCBmcmVxdWVuY3k7CisJCXVuc2lnbmVkIGludCBodF9zZXR0aW5nczsKKworCQllbnVtIGNhcmw5MTcwX3BoeV9zdGF0ZSBzdGF0ZTsKKwkJc3RydWN0IGNhcmw5MTcwX3BzbSBwc207CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfUkFESU9fRlVOQ1RJT05TICovCisJfSBwaHk7CisKKwl1bnNpZ25lZCBpbnQgdGFsbHlfY2xvY2s7CisJc3RydWN0IGNhcmw5MTcwX3RhbGx5X3JzcCB0YWxseTsKKwl1bnNpZ25lZCBpbnQgdHhfdGltZTsKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1dPTAorCXN0cnVjdCB7CisJCXN0cnVjdCBjYXJsOTE3MF93b2xfY21kIGNtZDsKKwkJdW5zaWduZWQgaW50IGxhc3RfYmVhY29uOworCQl1bnNpZ25lZCBpbnQgbG9zdF9udWxsOworCQl1bnNpZ25lZCBpbnQgbGFzdF9udWxsOworCQlib29sIHdha2VfdXA7CisJfSB3b2w7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfV09MICovCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19HUElPX0lOVEVSUlVQVAorCXN0cnVjdCBjYXJsOTE3MF9ncGlvIGNhY2hlZF9ncGlvX3N0YXRlOworI2VuZGlmIC8qQ09ORklHX0NBUkw5MTcwRldfR1BJT19JTlRFUlJVUFQgKi8KK307CisKKy8qCisgKiBnbG9iYWwgZmlybXdhcmUgY29udGV4dCBzdHJ1Y3QuCisgKgorICogTk9URTogVGhpcyBzdHJ1Y3Qgd2lsbCB6ZXJvZWQgb3V0IGluIHN0YXJ0KCkKKyAqLworZXh0ZXJuIHN0cnVjdCBmaXJtd2FyZV9jb250ZXh0X3N0cnVjdCBmdzsKKyNlbmRpZiAvKiBfX0NBUkw5MTcwRldfQ0FSTDkxNzBfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS9jbWQuaCBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvY21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkZDM1MAotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvY21kLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIGNhcmw5MTcwIGZpcm13YXJlIC0gdXNlZCBieSB0aGUgYXI5MTcwIHdpcmVsZXNzIGRldmljZQorICoKKyAqIEZpcm13YXJlIGNvbW1hbmQgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQJMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDktMjAxMQlDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MEZXX0NNRF9ICisjZGVmaW5lIF9fQ0FSTDkxNzBGV19DTURfSAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIuaCIKKyNpbmNsdWRlICJ0eXBlcy5oIgorCisjaW5jbHVkZSAiZndjbWQuaCIKKworc3RhdGljIGlubGluZSB2b2lkIF9fY2hlY2sodm9pZCkKK3sKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF9jbWQpICE9IENBUkw5MTcwX01BWF9DTURfTEVOKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF9yc3ApICE9IENBUkw5MTcwX01BWF9DTURfTEVOKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF9zZXRfa2V5X2NtZCkgIT0gQ0FSTDkxNzBfU0VUX0tFWV9DTURfU0laRSk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgY2FybDkxNzBfZGlzYWJsZV9rZXlfY21kKSAhPSBDQVJMOTE3MF9ESVNBQkxFX0tFWV9DTURfU0laRSk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgY2FybDkxNzBfcmZfaW5pdCkgIT0gQ0FSTDkxNzBfUkZfSU5JVF9TSVpFKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF9yZl9pbml0X3Jlc3VsdCkgIT0gQ0FSTDkxNzBfUkZfSU5JVF9SRVNVTFRfU0laRSk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgY2FybDkxNzBfcHNtKSAhPSBDQVJMOTE3MF9QU01fU0laRSk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgY2FybDkxNzBfdHNmX3JzcCkgIT0gQ0FSTDkxNzBfVFNGX1JTUF9TSVpFKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF9iY25fY3RybF9jbWQpICE9IENBUkw5MTcwX0JDTl9DVFJMX0NNRF9TSVpFKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF90eF9zdGF0dXMpICE9IENBUkw5MTcwX1RYX1NUQVRVU19TSVpFKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBfY2FybDkxNzBfdHhfc3RhdHVzKSAhPSBDQVJMOTE3MF9UWF9TVEFUVVNfU0laRSk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgY2FybDkxNzBfZ3BpbykgIT0gQ0FSTDkxNzBfR1BJT19TSVpFKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF9yeF9maWx0ZXJfY21kKSAhPSBDQVJMOTE3MF9SWF9GSUxURVJfQ01EX1NJWkUpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGNhcmw5MTcwX3dvbF9jbWQpICE9IENBUkw5MTcwX1dPTF9DTURfU0laRSk7Cit9CisKK3ZvaWQgaGFuZGxlX2NtZChzdHJ1Y3QgY2FybDkxNzBfcnNwICpyZXNwKTsKKworI2VuZGlmIC8qIF9fQ0FSTDkxNzBGV19DTURfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS9jb25maWcuaCBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdjMzU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvY29uZmlnLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgImdlbmVyYXRlZC9hdXRvY29uZi5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyLmgiCisjaW5jbHVkZSAiZndjbWQuaCIKKyNpbmNsdWRlICJody5oIgorCisjaWZuZGVmIF9fQ0FSTDkxNzBGV19DT05GSUdfSAorI2RlZmluZSBfX0NBUkw5MTcwRldfQ09ORklHX0gKKworI2RlZmluZSBHQ0NfVkVSU0lPTiAoX19HTlVDX18gKiAxMDAwMCArIF9fR05VQ19NSU5PUl9fICogMTAwICsgX19HTlVDX1BBVENITEVWRUxfXykKKworI2lmIEdDQ19WRVJTSU9OIDwgNDA0MDAKKyMgZXJyb3IgIlRoaXMgZmlybXdhcmUgd2lsbCBub3Qgd29yayBpZiBpdCBpcyBjb21waWxlZCB3aXRoIGdjYyB2ZXJzaW9ucyA8IDQuNCIKKyMgZXJyb3IgIlNlZTogaHR0cDovL2djYy5nbnUub3JnL2djYy00LjQvY2hhbmdlcy5odG1sIC8gQ2F2ZWF0cyBOby4gNCIKKyNlbmRpZgorCisjaWYgKChkZWZpbmVkIENPTkZJR19DQVJMOTE3MEZXX1BSSU5URikgJiYJCQlcCisJKCFkZWZpbmVkIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHX1VTQikgJiYJCVwKKwkoIWRlZmluZWQgQ09ORklHX0NBUkw5MTcwRldfREVCVUdfVUFSVCkpCisjIHdhcm5pbmcgIllvdSBoYXZlIGRpc2FibGVkIGFsbCBkZWJ1ZyBtZXNzYWdlIHRyYW5zcG9ydHMuIgorIyB3YXJuaW5nICJIb3dldmVyIENPTkZJR19DQVJMOTE3MEZXX1BSSU5URiBpcyBzdGlsbCBzZXQuLi4iCisjIHdhcm5pbmcgIldoaWNoIGlzIGEgd2FzdGUgb2YgZmlybXdhcmUgc3BhY2UsIGlmIHlvdSBhc2sgbWUuIgorI2VuZGlmCisKKyNkZWZpbmUgQ0FSTDkxNzBfVFhfU1RBVFVTX05VTQkJKENBUkw5MTcwX1JTUF9UWF9TVEFUVVNfTlVNKQorI2RlZmluZSBDQVJMOTE3MF9JTlRfUlFfQ0FDSEVTCQkxNgorI2RlZmluZSBBUjkxNzBfSU5UX01BR0lDX0hFQURFUl9TSVpFCTEyCisjZGVmaW5lIENBUkw5MTcwX1RCVFRfREVMVEEJCShDQVJMOTE3MF9QUkVUQlRUX0tVUyArIDEpCisKKyNkZWZpbmUgQ0FSTDkxNzBfR1BJT19NQVNLCQkoQVI5MTcwX0dQSU9fUE9SVF9XUFNfQlVUVE9OX1BSRVNTRUQpCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19WSUZTX05VTQorI2RlZmluZSBDQVJMOTE3MF9JTlRGX05VTQkJKDEgKyBDT05GSUdfQ0FSTDkxNzBGV19WSUZTX05VTSkKKyNlbHNlCisjZGVmaW5lIENBUkw5MTcwX0lOVEZfTlVNCQkoMSkKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19WSUZTX05VTSAqLworCisjZGVmaW5lIENPTkZJR19DQVJMOTE3MEZXX0JBQ0tfUkVRU19OVU0JNAorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jb25maWdfY2hlY2sodm9pZCkKK3sKKwlCVUlMRF9CVUdfT04oIUNBUkw5MTcwX1RYX1NUQVRVU19OVU0pOworCUJVSUxEX0JVR19PTihDQVJMOTE3MF9JTlRGX05VTSA8IDEpOworCUJVSUxEX0JVR19PTihDQVJMOTE3MF9JTlRGX05VTSA+PSBBUjkxNzBfTUFYX1ZJUlRVQUxfTUFDKTsKK30KKworI2VuZGlmIC8qIF9fQ0FSTDkxNzBGV19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS9kbWEuaCBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzYTlkZgotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvZG1hLmgKQEAgLTAsMCArMSwzNDkgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBUaGlzIG1vZHVsZSBjb250YWlucyBETUEgZGVzY3JpcHRvciByZWxhdGVkIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodAkyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExICBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MEZXX0RNQV9ICisjZGVmaW5lIF9fQ0FSTDkxNzBGV19ETUFfSAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisjaW5jbHVkZSAid2xhbi5oIgorCitzdHJ1Y3QgZG1hX2Rlc2MgeworCXZvbGF0aWxlIHVpbnQxNl90IHN0YXR1czsJLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KKwl2b2xhdGlsZSB1aW50MTZfdCBjdHJsOwkJLyogRGVzY3JpcHRvciBjb250cm9sICovCisJdm9sYXRpbGUgdWludDE2X3QgZGF0YVNpemU7CS8qIERhdGEgc2l6ZSAqLworCXZvbGF0aWxlIHVpbnQxNl90IHRvdGFsTGVuOwkvKiBUb3RhbCBsZW5ndGggKi8KKwlzdHJ1Y3QgZG1hX2Rlc2MgKmxhc3RBZGRyOwkvKiBMYXN0IGFkZHJlc3Mgb2YgdGhpcyBjaGFpbiAqLworCXVuaW9uIHsKKwkJdWludDhfdCAqX2RhdGFBZGRyOwkvKiBEYXRhIGJ1ZmZlciBhZGRyZXNzICovCisJCXZvaWQgKmRhdGFBZGRyOworCX0gX19wYWNrZWQ7CisJc3RydWN0IGRtYV9kZXNjICpuZXh0QWRkcjsJLyogTmV4dCBURCBhZGRyZXNzICovCit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKKworLyogVXAsIERuLCA1eCBUeCwgcmV0cnksIFJ4LCBbVVNCIEludF0sIChDQUIpLCBGVyAqLworI2RlZmluZSBBUjkxNzBfVEVSTUlOQVRPUl9OVU1CRVJfQgkxMAorCisjZGVmaW5lIEFSOTE3MF9URVJNSU5BVE9SX05VTUJFUl9JTlQJMQorCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfQ0FCX1FVRVVFCisjZGVmaW5lIEFSOTE3MF9URVJNSU5BVE9SX05VTUJFUl9DQUIJQ0FSTDkxNzBfSU5URl9OVU0KKyNlbHNlCisjZGVmaW5lIEFSOTE3MF9URVJNSU5BVE9SX05VTUJFUl9DQUIJMAorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0NBQl9RVUVVRSAqLworCisjZGVmaW5lIEFSOTE3MF9URVJNSU5BVE9SX05VTUJFUiAoQVI5MTcwX1RFUk1JTkFUT1JfTlVNQkVSX0IgKyBcCisJCQkJICBBUjkxNzBfVEVSTUlOQVRPUl9OVU1CRVJfSU5UICsgXAorCQkJCSAgQVI5MTcwX1RFUk1JTkFUT1JfTlVNQkVSX0NBQikKKworI2RlZmluZSBBUjkxNzBfQkxPQ0tfU0laRSAgICAgICAgICAgKDI1NiArIDY0KQorCisjZGVmaW5lIEFSOTE3MF9ERVNDUklQVE9SX1NJWkUgICAgICAoc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykpCisKK3N0cnVjdCBhcjkxNzBfdHhfYmFfZnJhbWUgeworCXN0cnVjdCBhcjkxNzBfdHhfaHdkZXNjIGhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JhIGJhOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNhcmw5MTcwX3R4X2JhX3N1cGVyZnJhbWUgeworCXN0cnVjdCBjYXJsOTE3MF90eF9zdXBlcmRlc2MgczsKKwlzdHJ1Y3QgYXI5MTcwX3R4X2JhX2ZyYW1lIGY7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI5MTcwX3R4X251bGxfZnJhbWUgeworCXN0cnVjdCBhcjkxNzBfdHhfaHdkZXNjIGhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciBudWxsOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNhcmw5MTcwX3R4X251bGxfc3VwZXJmcmFtZSB7CisJc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZGVzYyBzOworCXN0cnVjdCBhcjkxNzBfdHhfbnVsbF9mcmFtZSBmOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBDQVJMOTE3MF9CQV9CVUZGRVJfTEVOCShfX3JvdW5kdXAoc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF90eF9iYV9zdXBlcmZyYW1lKSwgMTYpKQorI2RlZmluZSBDQVJMOTE3MF9SU1BfQlVGRkVSX0xFTglBUjkxNzBfQkxPQ0tfU0laRQorCitzdHJ1Y3QgY2FybDkxNzBfc3JhbV9yZXNlcnZlZCB7CisJdW5pb24geworCQl1aW50MzJfdCBidWZbQ0FSTDkxNzBfQkFfQlVGRkVSX0xFTiAvIHNpemVvZih1aW50MzJfdCldOworCQlzdHJ1Y3QgY2FybDkxNzBfdHhfYmFfc3VwZXJmcmFtZSBiYTsKKwl9IGJhOworCisJdW5pb24geworCQl1aW50MzJfdCBidWZbQ0FSTDkxNzBfTUFYX0NNRF9MRU4gLyBzaXplb2YodWludDMyX3QpXTsKKwkJc3RydWN0IGNhcmw5MTcwX2NtZCBjbWQ7CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19XT0wKKwkJc3RydWN0IGNhcmw5MTcwX3R4X251bGxfc3VwZXJmcmFtZSBudWxsOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1dPTCAqLworCX0gY21kOworCisJdW5pb24geworCQl1aW50MzJfdCBidWZbQ0FSTDkxNzBfUlNQX0JVRkZFUl9MRU4gLyBzaXplb2YodWludDMyX3QpXTsKKwkJc3RydWN0IGNhcmw5MTcwX3JzcCByc3A7CisJfSByc3A7CisKKwl1bmlvbiB7CisJCXVpbnQzMl90IGJ1ZltDQVJMOTE3MF9JTlRGX05VTV1bQVI5MTcwX01BQ19CQ05fTEVOR1RIX01BWCAvIHNpemVvZih1aW50MzJfdCldOworCX0gYmNuOworfTsKKworLyoKKyAqIE1lbW9yeSBsYXlvdXQgaW4gUkFNOgorICoKKyAqIDB4MTAwMDAwCQkJKy0tCisgKgkJCQl8IHRlcm1pbmF0b3IgZGVzY3JpcHRvcnMgKGRtYV9kZXNjKQorICoJCQkJfCAgLSBVcCAodG8gVVNCIGhvc3QpCisgKgkJCQl8ICAtIERvd24gKGZyb20gVVNCIGhvc3QpCisgKgkJCQl8ICAtIFRYICg1eCwgdG8gd2lmaSkKKyAqCQkJCXwgIC0gQU1QRFUgVFggcmV0cnkKKyAqCQkJCXwgIC0gUlggKGZyb20gd2lmaSkKKyAqCQkJCXwgIC0gQ0FCIFF1ZXVlCisgKgkJCQl8ICAtIEZXIGNtZCAmIHJlcSBkZXNjcmlwdG9yCisgKgkJCQl8ICAtIEJsb2NrQWNrIGRlc2NyaXB0b3IKKyAqCQkJCXwgdG90YWw6IEFSOTE3MF9URVJNSU5BVE9SX05VTUJFUgorICoJCQkJKy0tCisgKgkJCQl8IGJsb2NrIGRlc2NyaXB0b3JzIChkbWFfZGVzYykKKyAqCQkJCXwgKEFSOTE3MF9CTE9DS19OVU1CRVIpCisgKiBBUjkxNzBfQkxPQ0tfQlVGRkVSX0JBU0UJKy0tIGFsaWduIHRvIG11bHRpcGxlIG9mIDY0CisgKgkJCQl8IGJsb2NrIGJ1ZmZlcnMgKEFSOTE3MF9CTE9DS19TSVpFIGVhY2gpCisgKgkJCQl8IChBUjkxNzBfQkxPQ0tfTlVNQkVSKQorICogYXBwcm94LiAweDExN2MwMAkJKy0tCisgKgkJCQl8IEJBIGJ1ZmZlciAoMTI4IGJ5dGVzKQorICoJCQkJKy0tCisgKgkJCQl8IENNRCBidWZmZXIgKDEyOCBieXRlcykKKyAqCQkJCXwgLSB1c2VkIGFzIE5VTExGUkFNRSBidWZmZXIgKDEyOCBieXRlcykgZm9yIFdPTAorICoJCQkJKy0tCisgKgkJCQl8IFJTUCBidWZmZXIgKDMyMCBieXRlcykKKyAqCQkJCSstLQorICoJCQkJfCBCRUFDT04gYnVmZmVyICgyNTYgYnl0ZXMpCisgKgkJCQkrLS0KKyAqCQkJCXwgdW5hY2NvdW50ZWQgc3BhY2UgLyBwYWRkaW5nCisgKgkJCQkrLS0KKyAqIDB4MTgwMDAKKyAqLworCisjZGVmaW5lIENBUkw5MTcwX1NSQU1fUkVTRVJWRUQJCShzaXplb2Yoc3RydWN0IGNhcmw5MTcwX3NyYW1fcmVzZXJ2ZWQpKQorCisjZGVmaW5lIEFSOTE3MF9GUkFNRV9NRU1PUllfU0laRQkoQVI5MTcwX1NSQU1fU0laRSAtIENBUkw5MTcwX1NSQU1fUkVTRVJWRUQpCisKKyNkZWZpbmUgQkxPQ0tfQUxJR05NRU5UCQk2NAorCisjZGVmaW5lIE5PTkJMT0NLX0RFU0NSSVBUT1JTX1NJWkUJXAorCShBUjkxNzBfREVTQ1JJUFRPUl9TSVpFICogKEFSOTE3MF9URVJNSU5BVE9SX05VTUJFUikpCisKKyNkZWZpbmUgTk9OQkxPQ0tfREVTQ1JJUFRPUlNfU0laRV9BTElHTkVECVwKKwkoQUxJR04oTk9OQkxPQ0tfREVTQ1JJUFRPUlNfU0laRSwgQkxPQ0tfQUxJR05NRU5UKSkKKworI2RlZmluZSBBUjkxNzBfQkxPQ0tfTlVNQkVSCSgoQVI5MTcwX0ZSQU1FX01FTU9SWV9TSVpFIC0gTk9OQkxPQ0tfREVTQ1JJUFRPUlNfU0laRV9BTElHTkVEKSAvIFwKKwkJCQkgKEFSOTE3MF9CTE9DS19TSVpFICsgQVI5MTcwX0RFU0NSSVBUT1JfU0laRSkpCisKK3N0cnVjdCBhcjkxNzBfZGF0YV9ibG9jayB7CisJdWludDhfdAlkYXRhW0FSOTE3MF9CTE9DS19TSVpFXTsKK307CisKK3N0cnVjdCBhcjkxNzBfZG1hX21lbW9yeSB7CisJc3RydWN0IGRtYV9kZXNjCQkJdGVybWluYXRvcltBUjkxNzBfVEVSTUlOQVRPUl9OVU1CRVJdOworCXN0cnVjdCBkbWFfZGVzYwkJCWJsb2NrW0FSOTE3MF9CTE9DS19OVU1CRVJdOworCXN0cnVjdCBhcjkxNzBfZGF0YV9ibG9jawlkYXRhW0FSOTE3MF9CTE9DS19OVU1CRVJdIF9fYWxpZ25lZChCTE9DS19BTElHTk1FTlQpOworCXN0cnVjdCBjYXJsOTE3MF9zcmFtX3Jlc2VydmVkCXJlc2VydmVkIF9fYWxpZ25lZChCTE9DS19BTElHTk1FTlQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBhcjkxNzBfZG1hX21lbW9yeSBkbWFfbWVtOworCisjZGVmaW5lIEFSOTE3MF9ET1dOX0JMT0NLX1JBVElPCTIKKyNkZWZpbmUgQVI5MTcwX1JYX0JMT0NLX1JBVElPCTEKKy8qIFR4IDE2KjIgPSAzMiBwYWNrZXRzID0+IDMyKig1KjMyMCkgKi8KKyNkZWZpbmUgQVI5MTcwX1RYX0JMT0NLX05VTUJFUgkoQVI5MTcwX0JMT0NLX05VTUJFUiAqIEFSOTE3MF9ET1dOX0JMT0NLX1JBVElPIC8gXAorCQkJCShBUjkxNzBfUlhfQkxPQ0tfUkFUSU8gKyBBUjkxNzBfRE9XTl9CTE9DS19SQVRJTykpCisjZGVmaW5lIEFSOTE3MF9SWF9CTE9DS19OVU1CRVIJKEFSOTE3MF9CTE9DS19OVU1CRVIgLSBBUjkxNzBfVFhfQkxPQ0tfTlVNQkVSKQorCisvKiBFcnJvciBjb2RlICovCisjZGVmaW5lIEFSOTE3MF9FUlJfRlNfQklUCTEKKyNkZWZpbmUgQVI5MTcwX0VSUl9MU19CSVQJMgorI2RlZmluZSBBUjkxNzBfRVJSX09XTl9CSVRTCTMKKyNkZWZpbmUgQVI5MTcwX0VSUl9EQVRBX1NJWkUJNAorI2RlZmluZSBBUjkxNzBfRVJSX1RPVEFMX0xFTgk1CisjZGVmaW5lIEFSOTE3MF9FUlJfREFUQQkJNgorI2RlZmluZSBBUjkxNzBfRVJSX1NFUQkJNworI2RlZmluZSBBUjkxNzBfRVJSX0xFTgkJOAorCisvKiBTdGF0dXMgYml0cyBkZWZpbml0aW9ucyAqLworLyogT3duIGJpdHMgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQVI5MTcwX09XTl9CSVRTCQkweDMKKyNkZWZpbmUgQVI5MTcwX09XTl9CSVRTX1MJMAorI2RlZmluZSBBUjkxNzBfT1dOX0JJVFNfU1cJMHgwCisjZGVmaW5lIEFSOTE3MF9PV05fQklUU19IVwkweDEKKyNkZWZpbmUgQVI5MTcwX09XTl9CSVRTX1NFCTB4MgorCisvKiBDb250cm9sIGJpdHMgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQVI5MTcwX0NUUkxfVFhGQUlMCTEKKyNkZWZpbmUgQVI5MTcwX0NUUkxfQkFGQUlMCTIKKyNkZWZpbmUgQVI5MTcwX0NUUkxfRkFJTAkoQVI5MTcwX0NUUkxfVFhGQUlMIHwgQVI5MTcwX0NUUkxfQkFGQUlMKQorCisvKiBGaXJzdCBzZWdhbWVudCBiaXQgKi8KKyNkZWZpbmUgQVI5MTcwX0NUUkxfTFNfQklUCTB4MTAwCisvKiBMYXN0IHNlZ2FtZW50IGJpdCAqLworI2RlZmluZSBBUjkxNzBfQ1RSTF9GU19CSVQJMHgyMDAKKworc3RydWN0IGRtYV9xdWV1ZSB7CisJc3RydWN0IGRtYV9kZXNjICpoZWFkOworCXN0cnVjdCBkbWFfZGVzYyAqdGVybWluYXRvcjsKK307CisKKyNkZWZpbmUgREVTQ19QQVlMT0FEKGEpCQkJKCh2b2lkICopYS0+ZGF0YUFkZHIpCisjZGVmaW5lIERFU0NfUEFZTE9BRF9PRkYoYSwgb2Zmc2V0KQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGEtPl9kYXRhQWRkcikgKyBvZmZzZXQpKQorCitzdHJ1Y3QgZG1hX2Rlc2MgKmRtYV91bmxpbmtfaGVhZChzdHJ1Y3QgZG1hX3F1ZXVlICpxdWV1ZSk7Cit2b2lkIGRtYV9pbml0X2Rlc2NyaXB0b3JzKHZvaWQpOwordm9pZCBkbWFfcmVjbGFpbShzdHJ1Y3QgZG1hX3F1ZXVlICpxLCBzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2MpOwordm9pZCBkbWFfcHV0KHN0cnVjdCBkbWFfcXVldWUgKnEsIHN0cnVjdCBkbWFfZGVzYyAqZGVzYyk7CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgYm9vbCBpc190ZXJtaW5hdG9yKHN0cnVjdCBkbWFfcXVldWUgKnEsIHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKK3sKKwlyZXR1cm4gcS0+dGVybWluYXRvciA9PSBkZXNjOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIGJvb2wgcXVldWVfZW1wdHkoc3RydWN0IGRtYV9xdWV1ZSAqcSkKK3sKKwlyZXR1cm4gcS0+aGVhZCA9PSBxLT50ZXJtaW5hdG9yOworfQorCisvKgorICogR2V0IGEgY29tcGxldGVkIHBhY2tldCB3aXRoICMgZGVzY3JpcHRvcnMuIFJldHVybiB0aGUgZmlyc3QKKyAqIGRlc2NyaXB0b3IgYW5kIHBvaW50ZXIgdGhlIGhlYWQgZGlyZWN0bHkgYnkgbGFzdEFkZHItPm5leHRBZGRyCisgKi8KK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgc3RydWN0IGRtYV9kZXNjICpkbWFfZGVxdWV1ZV9iaXRzKHN0cnVjdCBkbWFfcXVldWUgKnEsCisJCQkJCQl1aW50MTZfdCBiaXRzKQoreworCXN0cnVjdCBkbWFfZGVzYyAqZGVzYyA9IE5VTEw7CisKKwlpZiAoKHEtPmhlYWQtPnN0YXR1cyAmIEFSOTE3MF9PV05fQklUUykgPT0gYml0cykKKwkJZGVzYyA9IGRtYV91bmxpbmtfaGVhZChxKTsKKworCXJldHVybiBkZXNjOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHN0cnVjdCBkbWFfZGVzYyAqZG1hX2RlcXVldWVfbm90X2JpdHMoc3RydWN0IGRtYV9xdWV1ZSAqcSwKKwkJCQkJCSAgICB1aW50MTZfdCBiaXRzKQoreworCXN0cnVjdCBkbWFfZGVzYyAqZGVzYyA9IE5VTEw7CisKKwkvKiBBUjkxNzBfT1dOX0JJVFNfSFcgd2lsbCBiZSBmaWx0ZXJlZCBvdXQgaGVyZSB0b28uICovCisJaWYgKChxLT5oZWFkLT5zdGF0dXMgJiBBUjkxNzBfT1dOX0JJVFMpICE9IGJpdHMpCisJCWRlc2MgPSBkbWFfdW5saW5rX2hlYWQocSk7CisKKwlyZXR1cm4gZGVzYzsKK30KKworI2RlZmluZSBmb3JfZWFjaF9kZXNjX2JpdHMoZGVzYywgcXVldWUsIGJpdHMpCQkJCVwKKwl3aGlsZSAoKGRlc2MgPSBkbWFfZGVxdWV1ZV9iaXRzKHF1ZXVlLCBiaXRzKSkpCisKKyNkZWZpbmUgZm9yX2VhY2hfZGVzY19ub3RfYml0cyhkZXNjLCBxdWV1ZSwgYml0cykJCQlcCisJd2hpbGUgKChkZXNjID0gZG1hX2RlcXVldWVfbm90X2JpdHMocXVldWUsIGJpdHMpKSkKKworI2RlZmluZSBmb3JfZWFjaF9kZXNjKGRlc2MsIHF1ZXVlKQkJCQkJXAorCXdoaWxlICgoZGVzYyA9IGRtYV91bmxpbmtfaGVhZChxdWV1ZSkpKQorCisjZGVmaW5lIF9fZm9yX2VhY2hfZGVzY19iaXRzKGRlc2MsIHF1ZXVlLCBiaXRzKQkJCQlcCisJZm9yIChkZXNjID0gKHF1ZXVlKS0+aGVhZDsJCQkJCVwKKwkgICAgIChkZXNjICE9IChxdWV1ZSktPnRlcm1pbmF0b3IgJiYJCQkJXAorCSAgICAgKGRlc2MtPnN0YXR1cyAmIEFSOTE3MF9PV05fQklUUykgPT0gYml0cyk7CQkJXAorCSAgICAgZGVzYyA9IGRlc2MtPmxhc3RBZGRyLT5uZXh0QWRkcikKKworI2RlZmluZSBfX3doaWxlX2Rlc2NfYml0cyhkZXNjLCBxdWV1ZSwgYml0cykJCQkJXAorCWZvciAoZGVzYyA9IChxdWV1ZSktPmhlYWQ7CQkJCQlcCisJICAgICAoIXF1ZXVlX2VtcHR5KHF1ZXVlKSAmJgkJCQkJXAorCSAgICAgKGRlc2MtPnN0YXR1cyAmIEFSOTE3MF9PV05fQklUUykgPT0gYml0cyk7CQkJXAorCSAgICAgZGVzYyA9IChxdWV1ZSktPmhlYWQpCisKKyNkZWZpbmUgX19mb3JfZWFjaF9kZXNjX2NvbnRpbnVlKGRlc2MsIHF1ZXVlKQkJCQlcCisJZm9yICg7IGRlc2MgIT0gKHF1ZXVlKS0+dGVybWluYXRvcjsJCQkJXAorCSAgICAgZGVzYyA9IChkZXNjKS0+bGFzdEFkZHItPm5leHRBZGRyKQorCisjZGVmaW5lIF9fZm9yX2VhY2hfZGVzYyhkZXNjLCBxdWV1ZSkJCQkJCVwKKwlmb3IgKGRlc2MgPSAocXVldWUpLT5oZWFkOwkJCQkJXAorCSAgICAgZGVzYyAhPSAocXVldWUpLT50ZXJtaW5hdG9yOwkJCQlcCisJICAgICBkZXNjID0gKGRlc2MpLT5sYXN0QWRkci0+bmV4dEFkZHIpCisKKyNkZWZpbmUgX19mb3JfZWFjaF9kZXNjX3NhZmUoZGVzYywgdG1wLCBxdWV1ZSkJCQkJXAorCWZvciAoZGVzYyA9IChxdWV1ZSktPmhlYWQsIHRtcCA9IGRlc2MtPmxhc3RBZGRyLT5uZXh0QWRkcjsJXAorCSAgICAgZGVzYyAhPSAocXVldWUpLT50ZXJtaW5hdG9yOwkJCQlcCisJICAgICBkZXNjID0gdG1wLCB0bXAgPSB0bXAtPmxhc3RBZGRyLT5uZXh0QWRkcikKKworI2RlZmluZSBfX3doaWxlX3N1YmRlc2MoZGVzYywgcXVldWUpCQkJCQlcCisJZm9yIChkZXNjID0gKHF1ZXVlKS0+aGVhZDsJCQkJCVwKKwkgICAgIGRlc2MgIT0gKHF1ZXVlKS0+dGVybWluYXRvcjsJCQkJXAorCSAgICAgZGVzYyA9IChkZXNjKS0+bmV4dEFkZHIpCisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdW5zaWduZWQgaW50IHF1ZXVlX2xlbihzdHJ1Y3QgZG1hX3F1ZXVlICpxKQoreworCXN0cnVjdCBkbWFfZGVzYyAqZGVzYzsKKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisKKwlfX3doaWxlX3N1YmRlc2MoZGVzYywgcSkKKwkJaSsrOworCisJcmV0dXJuIGk7Cit9CisKKy8qCisgKiByZWFybSBhIGNvbXBsZXRlZCBwYWNrZXQsIHNvIGl0IHdpbGwgYmUgcHJvY2Vzc2VkIGFnaWFuLgorICovCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgZG1hX3JlYXJtKHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKK3sKKwkvKiBTZXQgT1dOIGJpdCB0byBIVyAqLworCWRlc2MtPnN0YXR1cyA9ICgoZGVzYy0+c3RhdHVzICYgKH5BUjkxNzBfT1dOX0JJVFMpKSB8CisJCQlBUjkxNzBfT1dOX0JJVFNfSFcpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgZG1hX2ZpeF9kb3ducXVldWUoc3RydWN0IGRtYV9kZXNjICpkZXNjKQoreworCWRlc2MtPnN0YXR1cyA9IEFSOTE3MF9PV05fQklUU19IVzsKKwlkZXNjLT5jdHJsID0gMDsKKwlkZXNjLT5kYXRhU2l6ZSA9IDA7CisJZGVzYy0+dG90YWxMZW4gPSBBUjkxNzBfQkxPQ0tfU0laRTsKKwlkZXNjLT5sYXN0QWRkciA9IGRlc2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NoZWNrX2Rlc2Modm9pZCkKK3sKKwlzdHJ1Y3QgYXI5MTcwX2RtYV9tZW1vcnkgbWVtOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGFyOTE3MF9kYXRhX2Jsb2NrKSAhPSBBUjkxNzBfQkxPQ0tfU0laRSk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpICE9IDIwKTsKKworCUJVSUxEX0JVR19PTihzaXplb2YobWVtKSA+IEFSOTE3MF9TUkFNX1NJWkUpOworCisJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBjYXJsOTE3MF9zcmFtX3Jlc2VydmVkLCBiYS5idWYpICYgKEJMT0NLX0FMSUdOTUVOVCAtIDEpKTsKKwlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNhcmw5MTcwX3NyYW1fcmVzZXJ2ZWQsIGNtZC5idWYpICYgKEJMT0NLX0FMSUdOTUVOVCAtIDEpKTsKKwlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNhcmw5MTcwX3NyYW1fcmVzZXJ2ZWQsIHJzcC5idWYpICYgKEJMT0NLX0FMSUdOTUVOVCAtIDEpKTsKKwlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNhcmw5MTcwX3NyYW1fcmVzZXJ2ZWQsIGJjbi5idWYpICYgKEJMT0NLX0FMSUdOTUVOVCAtIDEpKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF90eF9udWxsX3N1cGVyZnJhbWUpID4gQ0FSTDkxNzBfTUFYX0NNRF9MRU4pOworfQorCisjZW5kaWYgLyogX19DQVJMOTE3MEZXX0RNQV9IICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL2Z3ZHNjLmggYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL2Z3ZHNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM2YmZlZAotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvZndkc2MuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogY2FybDkxNzAgZmlybXdhcmUgLSB1c2VkIGJ5IHRoZSBhcjkxNzAgd2lyZWxlc3MgZGV2aWNlCisgKgorICogRmlybXdhcmUgZGVmaW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQ0FSTDkxNzBGV19GV0RTQ19ICisjZGVmaW5lIF9fQ0FSTDkxNzBGV19GV0RTQ19ICisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb21waWxlci5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZndkZXNjLmgiCisKK3N0cnVjdCBjYXJsOTE3MF9maXJtd2FyZV9kZXNjcmlwdG9yIHsKKwlzdHJ1Y3QgY2FybDkxNzBmd19vdHVzX2Rlc2Mgb3R1czsKKwlzdHJ1Y3QgY2FybDkxNzBmd190eHNxX2Rlc2MgdHhzcTsKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19XT0wKKwlzdHJ1Y3QgY2FybDkxNzBmd193b2xfZGVzYyAgd29sOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1dPTCAqLworCXN0cnVjdCBjYXJsOTE3MGZ3X21vdGRfZGVzYyBtb3RkOworCXN0cnVjdCBjYXJsOTE3MGZ3X2RiZ19kZXNjICBkYmc7CisJc3RydWN0IGNhcmw5MTcwZndfbGFzdF9kZXNjIGxhc3Q7Cit9IF9fcGFja2VkOworCitleHRlcm4gY29uc3Qgc3RydWN0IGNhcmw5MTcwX2Zpcm13YXJlX2Rlc2NyaXB0b3IgY2FybDkxNzBmd19kZXNjOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19jaGVja19mdyh2b2lkKQoreworCUJVSUxEX0JVR19PTihzaXplb2YoY2FybDkxNzBmd19kZXNjKSAmIDB4Myk7CisJQlVJTERfQlVHX09OKHNpemVvZihjYXJsOTE3MGZ3X2Rlc2MpID4gQ0FSTDkxNzBGV19ERVNDX01BWF9MRU5HVEgpOworfQorCisjZW5kaWYgLyogX19DQVJMOTE3MEZXX0ZXRFNDX0ggKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvZ3Bpby5oIGIvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjMTkyNwotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvZ3Bpby5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBHUElPIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MEZXX0dQSU9fSAorI2RlZmluZSBfX0NBUkw5MTcwRldfR1BJT19ICisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgImlvLmgiCisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCBsZWRfaW5pdCh2b2lkKQoreworCXNldChBUjkxNzBfR1BJT19SRUdfUE9SVF9UWVBFLCAzKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIGxlZF9zZXQoY29uc3QgdW5zaWduZWQgaW50IGxlZHN0YXRlKQoreworCXNldChBUjkxNzBfR1BJT19SRUdfUE9SVF9EQVRBLCBsZWRzdGF0ZSk7Cit9CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19HUElPX0lOVEVSUlVQVAorCit2b2lkIGdwaW9fdGltZXIodm9pZCk7CisKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19HUElPX0lOVEVSUlVQVCAqLworI2VuZGlmIC8qIF9fQ0FSTDkxNzBGV19HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvaG9zdGlmLmggYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL2hvc3RpZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOWYxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL2hvc3RpZi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBIb3N0SUYgZGVmaW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodAkyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExCUNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfX0NBUkw5MTcwRldfSE9TVElGX0gKKyNkZWZpbmUgX19DQVJMOTE3MEZXX0hPU1RJRl9ICisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb21waWxlci5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJpby5oIgorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgZG93bl90cmlnZ2VyKHZvaWQpCit7CisJc2V0KEFSOTE3MF9QVEFfUkVHX0ROX0RNQV9UUklHR0VSLCAxKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHVwX3RyaWdnZXIodm9pZCkKK3sKKwlzZXQoQVI5MTcwX1BUQV9SRUdfVVBfRE1BX1RSSUdHRVIsIDEpOworfQorCit2b2lkIGhhbmRsZV9ob3N0X2ludGVyZmFjZSh2b2lkKTsKKworI2VuZGlmIC8qIF9fQ0FSTDkxNzBGV19IT1NUSUZfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS9pby5oIGIvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjY2RjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL2lvLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MEZXX0lPX0gKKyNkZWZpbmUgX19DQVJMOTE3MEZXX0lPX0gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIuaCIKKworc3RhdGljIGlubGluZSBfX2lubGluZSB1aW50OF90IHJlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuICooY29uc3Qgdm9sYXRpbGUgdWludDhfdCAqKSBhZGRyOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHVpbnQxNl90IHJlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuICooY29uc3Qgdm9sYXRpbGUgdWludDE2X3QgKikgYWRkcjsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2xhdGlsZSB2b2lkICpyZWFkcChjb25zdCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHZvaWQgKiopIGFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdWludDMyX3QgcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcjsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHdyaXRlYih2b2xhdGlsZSB2b2lkICphZGRyLCBjb25zdCB2b2xhdGlsZSB1aW50OF90IHZhbCkKK3sKKwkqKHZvbGF0aWxlIHVpbnQ4X3QgKikgYWRkciA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHdyaXRldyh2b2xhdGlsZSB2b2lkICphZGRyLCBjb25zdCB2b2xhdGlsZSB1aW50MTZfdCB2YWwpCit7CisJKih2b2xhdGlsZSB1aW50MTZfdCAqKSBhZGRyID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgd3JpdGVsKHZvbGF0aWxlIHZvaWQgKmFkZHIsIGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90IHZhbCkKK3sKKwkqKHZvbGF0aWxlIHVpbnQzMl90ICopIGFkZHIgPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCBfX29ybCh2b2xhdGlsZSB2b2lkICphZGRyLCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCB2YWwpCit7CisJKih2b2xhdGlsZSB1aW50MzJfdCAqKSBhZGRyIHw9IHZhbDsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIF9fYW5kbCh2b2xhdGlsZSB2b2lkICphZGRyLCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCB2YWwpCit7CisJKih2b2xhdGlsZSB1aW50MzJfdCAqKSBhZGRyICY9IHZhbDsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIF9feG9ybCh2b2xhdGlsZSB2b2lkICphZGRyLCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCB2YWwpCit7CisJKih2b2xhdGlsZSB1aW50MzJfdCAqKSBhZGRyIF49IHZhbDsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIF9faW5jbCh2b2xhdGlsZSB2b2lkICphZGRyKQoreworCSgqKHZvbGF0aWxlIHVpbnQzMl90ICopYWRkcikrKzsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB1aW50MzJfdCByZWFkbF9hc3luYyhjb25zdCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCXVpbnQzMl90IGkgPSAwLCByZWFkLCB0bXA7CisKKwlyZWFkID0gcmVhZGwoYWRkcik7CisJZG8geworCQl0bXAgPSByZWFkOworCQl0bXAgPSByZWFkbChhZGRyKTsKKwkJaSsrOworCX0gd2hpbGUgKHRtcCAhPSByZWFkICYmIGkgPD0gMTApOworCisJcmV0dXJuIHJlYWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCBzZXQoY29uc3Qgdm9sYXRpbGUgdWludDMyX3QgYWRkciwgY29uc3Qgdm9sYXRpbGUgdWludDMyX3QgdmFsKQoreworCXdyaXRlbCgodm9sYXRpbGUgdm9pZCAqKSBhZGRyLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgb3JsKHZvbGF0aWxlIHVpbnQzMl90IGFkZHIsIGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90IHZhbCkKK3sKKwlfX29ybCgodm9sYXRpbGUgdm9pZCAqKSBhZGRyLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgeG9ybChjb25zdCB2b2xhdGlsZSB1aW50MzJfdCBhZGRyLCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCB2YWwpCit7CisJX194b3JsKCh2b2xhdGlsZSB2b2lkICopIGFkZHIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCBhbmRsKGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90IGFkZHIsIGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90IHZhbCkKK3sKKwlfX2FuZGwoKHZvbGF0aWxlIHZvaWQgKikgYWRkciwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIGluY2woY29uc3Qgdm9sYXRpbGUgdWludDMyX3QgYWRkcikKK3sKKwlfX2luY2woKHZvbGF0aWxlIHZvaWQgKikgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdWludDMyX3QgZ2V0KGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90IGFkZHIpCit7CisJcmV0dXJuIHJlYWRsKCh2b2xhdGlsZSB2b2lkICopIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvbGF0aWxlIHZvaWQgKmdldHAoY29uc3Qgdm9sYXRpbGUgdWludDMyX3QgYWRkcikKK3sKKwlyZXR1cm4gcmVhZHAoKGNvbnN0IHZvbGF0aWxlIHZvaWQgKikgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdWludDMyX3QgZ2V0X2FzeW5jKGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90IGFkZHIpCit7CisJcmV0dXJuIHJlYWRsX2FzeW5jKChjb25zdCB2b2xhdGlsZSB2b2lkICopIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgc2V0Yihjb25zdCB2b2xhdGlsZSB1aW50MzJfdCBhZGRyLCBjb25zdCB2b2xhdGlsZSB1aW50OF90IHZhbCkKK3sKKwl3cml0ZWIoKHZvbGF0aWxlIHZvaWQgKikgYWRkciwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB1aW50OF90IGdldGIoY29uc3Qgdm9sYXRpbGUgdWludDMyX3QgYWRkcikKK3sKKwlyZXR1cm4gcmVhZGIoKGNvbnN0IHZvbGF0aWxlIHZvaWQgKikgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCBhbmRiKGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90IGFkZHIsIGNvbnN0IHZvbGF0aWxlIHVpbnQ4X3QgdmFsKQoreworCXNldGIoYWRkciwgZ2V0YihhZGRyKSAmIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCBvcmIoY29uc3Qgdm9sYXRpbGUgdWludDMyX3QgYWRkciwgY29uc3Qgdm9sYXRpbGUgdWludDMyX3QgdmFsKQoreworCXNldGIoYWRkciwgZ2V0YihhZGRyKSB8IHZhbCk7Cit9CisKKyNlbmRpZiAvKiBfX0NBUkw5MTcwRldfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS9wcmludGYuaCBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvcHJpbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0NTU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvcHJpbnRmLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBwcmludGYgYW5kIGhpcyBmcmllbmRzLi4uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICogQ29weXJpZ2h0CTIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEJQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQ0FSTDkxNzBGV19QUklOVEZfSAorI2RlZmluZSBfX0NBUkw5MTcwRldfUFJJTlRGX0gKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNhcmw5MTcwLmgiCisjaW5jbHVkZSAidWFydC5oIgorI2luY2x1ZGUgImZ3Y21kLmgiCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19QUklOVEYKK3ZvaWQgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkgdGZwX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNkZWZpbmUgcHJpbnRmIHRmcF9wcmludGYKKworI2Vsc2UKK3ZvaWQgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkgbWluX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNkZWZpbmUgcHJpbnRmIG1pbl9wcmludGYKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19QUklOVEYgKi8KKworI2RlZmluZSBQUklOVChmbXQsIGFyZ3MuLi4pCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJcHJpbnRmKGZtdCwgIyMgYXJncyk7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBJTkZPKGZtdCwgYXJncy4uLikJUFJJTlQoZm10LCAjIyBhcmdzKQorCisjZGVmaW5lIEVSUihmbXQsIGFyZ3MuLi4pCVBSSU5UKENBUkw5MTcwX0VSUl9NQUdJQyBmbXQsICMjIGFyZ3MpCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVRworI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKQlQUklOVChmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoLi4uKQkJZG8geyB9IHdoaWxlICgwKTsKKyNlbmRpZgorCisvKgorICogTkI6IGV2ZW4gdGhvdWdoIHRoZSBNQUNSTyBpcyBjYWxsZWQgInN0YWxsIi4gSXQgaXNuJ3Qgc3VwcG9zZWQKKyAqIHRvIHN0YWxsIHNpbmNlIHRoaXMgd2lsbCByZW5kZXIgdGhlIGRldmljZSB1bnJlc3BvbnNpdmUsIHVudGlsCisgKiBzb21lb25lIHB1bGxzIHRoZSBwbHVnLgorICovCisjZGVmaW5lIFNUQUxMKCkKKworI2RlZmluZSBCVUcoZm10LCBhcmdzLi4uKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCVBSSU5UKENBUkw5MTcwX0JVR19NQUdJQyIgJXMoKUAlZCBcIiIgZm10ICJcIiIgLAlcCisJCSAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgIyMgYXJncyk7CQkJXAorCQlTVEFMTCgpCQkJCQkJCVwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSBCVUdfT04oY29uZGl0aW9uKQkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQlpbnQgX19yZXQgPSAhIShjb25kaXRpb24pOwkJCQlcCisJCWlmICh1bmxpa2VseSghIShfX3JldCkpKQkJCQlcCisJCQlCVUcoI2NvbmRpdGlvbik7CQkJCVwKKwkJKF9fcmV0KTsJCQkJCQlcCisJfSkKKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHB1dGNoYXJhY3Rlcihjb25zdCBjaGFyIGMgX191bnVzZWQpCit7CisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfREVCVUdfVVNCCisJdXNiX3B1dGMoYyk7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfREVCVUdfVVNCICovCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVR19VQVJUCisJdWFydF9wdXRjKGMpOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHX1VBUlQgKi8KK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHByaW50X2hleF9kdW1wKGNvbnN0IHZvaWQgKmJ1ZiBfX3VudXNlZCwgaW50IGxlbiBfX3VudXNlZCkKK3sKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVR19VU0IKKwl1c2JfcHJpbnRfaGV4X2R1bXAoYnVmLCBsZW4pOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHX1VTQiAqLworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfREVCVUdfVUFSVAorCXVhcnRfcHJpbnRfaGV4X2R1bXAoYnVmLCBsZW4pOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHX1VBUlQgKi8KK30KKworI2VuZGlmIC8qIF9fQ0FSTDkxNzBGV19QUklOVEZfSCAqLworCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL3JmLmggYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL3JmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxOWJjYgotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvcmYuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogY2FybDkxNzAgZmlybXdhcmUgLSB1c2VkIGJ5IHRoZSBhcjkxNzAgd2lyZWxlc3MgZGV2aWNlCisgKgorICogUkYgcm91dGluZSBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodAkyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExCUNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfX0NBUkw5MTcwRldfUkZfSAorI2RlZmluZSBfX0NBUkw5MTcwRldfUkZfSAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19SQURJT19GVU5DVElPTlMKK3ZvaWQgcmZfbm90aWZ5X3NldF9jaGFubmVsKHZvaWQpOwordm9pZCByZl9jbWQoY29uc3Qgc3RydWN0IGNhcmw5MTcwX2NtZCAqY21kLCBzdHJ1Y3QgY2FybDkxNzBfcnNwICpyZXNwKTsKK3ZvaWQgcmZfcHNtKHZvaWQpOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1JBRElPX0ZVTkNUSU9OUyAqLworCisjZW5kaWYgLyogX19DQVJMOTE3MEZXX1JGX0ggKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvcm9tLmggYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL3JvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMmM1YzgKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL3JvbS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBST00gbGF5b3V0CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICogQ29weXJpZ2h0CTIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEJQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQ0FSTDkxNzBGV19ST01fSAorI2RlZmluZSBfX0NBUkw5MTcwRldfUk9NX0gKKworI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIuaCIKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJlZXByb20uaCIKKworc3RydWN0IGFyOTE3MF9od3R5cGUgeworCS8qIDB4MDAwMDEzNzAgKi8KKwl1aW50OF90IGRhdGFbNF07CisKKwkvKiAweDAwMDAxMzc0ICovCisJc3RydWN0IGFyOTE3MF9sZWRfbW9kZSBsZWRfbW9kZVtBUjkxNzBfTlVNX0xFRFNdOworCisJLyogMHgwMDAwMTM3OCAqLworCXVpbnQ4X3QgbnVsbGRhdGFbMl07CisKKwlzdHJ1Y3QgeworCQkvKiAweDAwMDAxMzdhICovCisJCXN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2M7CisKKwkJLyogMHgwMDAwMTM4YyAqLworCQl1aW50OF90IHN0cmluZzBfZGVzY1s0XTsKKworCQkvKiAweDAwMDAxMzkwICovCisJCXVpbnQ4X3Qgc3RyaW5nMV9kZXNjWzMyXTsKKworCQkvKiAweDAwMDAxM2IwICovCisJCXVpbnQ4X3Qgc3RyaW5nMl9kZXNjWzQ4XTsKKworCQkvKiAweDAwMDAxM2UwICovCisJCXVpbnQ4X3Qgc3RyaW5nM19kZXNjWzMyXTsKKwl9IHVzYjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcjkxNzBfcm9tIHsKKwkvKiAweDAwMDAwMDAwICovCisJdWludDMyX3QgKmlycV90YWJsZVsyXTsKKworCS8qIDB4MDAwMDAwMDggKi8KKwl1aW50OF90IGJvb3Rjb2RlWzQ5NjhdOworCisJLyogMHgwMDAwMTM3MCAqLworCXN0cnVjdCBhcjkxNzBfaHd0eXBlIGh3OworCisJLyogMHgwMDAwMTQwMCAqLworCXVpbnQ4X3QgZGF0YVs1MTJdOworCisJLyogZWVwcm9tICovCisJc3RydWN0IGFyOTE3MF9lZXByb20gc3lzOworfSBfX3BhY2tlZDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhcjkxNzBfcm9tIHJvbSBfX3NlY3Rpb24oZWVwcm9tKTsKKworI2VuZGlmIC8qIF9fQ0FSTDkxNzBGV19ST01fSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS90aW1lci5oIGIvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMWM2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL3RpbWVyLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIGNhcmw5MTcwIGZpcm13YXJlIC0gdXNlZCBieSB0aGUgYXI5MTcwIHdpcmVsZXNzIGRldmljZQorICoKKyAqIENsb2NrLCBUaW1lciAmIFRpbWluZworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodAkyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExCUNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfX0NBUkw5MTcwRldfVElNRVJfSAorI2RlZmluZSBfX0NBUkw5MTcwRldfVElNRVJfSAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKK2VudW0gY3B1X2Nsb2NrX3QgeworCUFIQl80ME1IWl9PU0MgICA9IDAsCisJQUhCXzIwXzIyTUhaICAgID0gMSwKKwlBSEJfNDBfNDRNSFogICAgPSAyLAorCUFIQl84MF84OE1IWiAgICA9IDMKK307CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdWludDMyX3QgZ2V0X2Nsb2NrX2NvdW50ZXIodm9pZCkKK3sKKwlyZXR1cm4gKGdldChBUjkxNzBfVElNRVJfUkVHX0NMT0NLX0hJR0gpIDw8IDE2KSB8IGdldChBUjkxNzBfVElNRVJfUkVHX0NMT0NLX0xPVyk7Cit9CisKKy8qCisgKiB3b3JrcyBvbmx5IHVwIHRvIDk3IHNlY3MgWzQ0IE1Iel0gb3IgMTA3IHNlY3MgZm9yIDQwIE1IegorICogQWxzbywgdGhlIGRlbGF5IHdhaXQgd2lsbCBiZSBhZmZlY3RlZCBieSAyLjRHSHo8LT41R0h6CisgKiBiYW5kIGNoYW5nZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgYm9vbCBpc19hZnRlcl9tc2Vjcyhjb25zdCB1aW50MzJfdCB0MCwgY29uc3QgdWludDMyX3QgbXNlY3MpCit7CisJcmV0dXJuICgoZ2V0X2Nsb2NrX2NvdW50ZXIoKSAtIHQwKSAvIDEwMDApID4gKG1zZWNzICogZncudGlja3NfcGVyX3VzZWMpOworfQorCisvKgorICogTm90ZTogQmUgY2FyZWZ1bCB3aXRoIFt1XWRlbGF5LiBUaGV5IHdvbid0IHNlcnZpY2UgdGhlCisgKiBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lci4gSXQgbWlnaHQgdHJpZ2dlciBpZiB5b3UKKyAqIHdhaXQgbG9uZyBlbm91Z2guIEFsc28gdGhleSBkb24ndCB0ZXJtaW5hdGUgaWYgc2VjIGlzCisgKiBhYm92ZSA5NyBzZWMgWzQ0TUh6XSBvciBtb3JlIHRoYW4gMTA3IHNlYyBbNDBNSHpdLgorICovCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgZGVsYXkoY29uc3QgdWludDMyX3QgbXNlYykKK3sKKwl1aW50MzJfdCB0MSwgdDIsIGR0LCB3dDsKKworCXd0ID0gbXNlYyAqIGZ3LnRpY2tzX3Blcl91c2VjOworCisJdDEgPSBnZXRfY2xvY2tfY291bnRlcigpOworCXdoaWxlICgxKSB7CisJCXQyID0gZ2V0X2Nsb2NrX2NvdW50ZXIoKTsKKwkJZHQgPSAodDIgLSB0MSkgLyAxMDAwOworCQlpZiAoZHQgPj0gd3QpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCB1ZGVsYXkoY29uc3QgdWludDMyX3QgdXNlYykKK3sKKwl1aW50MzJfdCB0MSwgdDIsIGR0OworCisJdDEgPSBnZXRfY2xvY2tfY291bnRlcigpOworCXdoaWxlICgxKSB7CisJCXQyID0gZ2V0X2Nsb2NrX2NvdW50ZXIoKTsKKwkJZHQgPSAodDIgLSB0MSk7CisJCWlmIChkdCA+PSAodXNlYyAqIGZ3LnRpY2tzX3Blcl91c2VjKSkKKwkJCWJyZWFrOworCX0KK30KKwordm9pZCBjbG9ja19zZXQoZW51bSBjcHVfY2xvY2tfdCBfY2xvY2ssIGJvb2wgb24pOworI2VuZGlmIC8qIF9fQ0FSTDkxNzBGV19USU1FUl9IICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL3VhcnQuaCBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZmEyOWQKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL3VhcnQuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogY2FybDkxNzAgZmlybXdhcmUgLSB1c2VkIGJ5IHRoZSBhcjkxNzAgd2lyZWxlc3MgZGV2aWNlCisgKgorICogVUFSVCBmdW5jdGlvbnMgZGVmaW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodAkyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExCUNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfX0NBUkw5MTcwRldfVUFSVF9ICisjZGVmaW5lIF9fQ0FSTDkxNzBGV19VQVJUX0gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfREVCVUdfVUFSVAordm9pZCB1YXJ0X3B1dGMoY29uc3QgY2hhciBjKTsKK3ZvaWQgdWFydF9wcmludF9oZXhfZHVtcChjb25zdCB2b2lkICpidWYsIGNvbnN0IGludCBsZW4pOwordm9pZCB1YXJ0X2luaXQodm9pZCk7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfREVCVUdfVUFSVCAqLworCisjZW5kaWYgLyogX19DQVJMOTE3MEZXX1VBUlRfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS91c2IuaCBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VhMWQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L2luY2x1ZGUvdXNiLmgKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBVU0IgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQJMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDktMjAxMQlDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MEZXX1VTQl9ICisjZGVmaW5lIF9fQ0FSTDkxNzBGV19VU0JfSAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJpby5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAiY2g5LmgiCisKK3N0cnVjdCBhcjkxNzBfdXNiX2NvbmZpZyB7CisJc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciBjZmc7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBpbnRmOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBlcFtBUjkxNzBfVVNCX05VTV9FWFRSQV9FUF07Cit9IF9fcGFja2VkOworCitzdGF0aWMgaW5saW5lIF9faW5saW5lIGJvb2wgdXNiX2RldGVjdF9oaWdoc3BlZWQodm9pZCkKK3sKKwlyZXR1cm4gISEoZ2V0YihBUjkxNzBfVVNCX1JFR19NQUlOX0NUUkwpICYKKwkJICBBUjkxNzBfVVNCX01BSU5fQ1RSTF9ISUdIU1BFRUQpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIGJvb2wgdXNiX2NvbmZpZ3VyZWQodm9pZCkKK3sKKwlyZXR1cm4gISEoZ2V0YihBUjkxNzBfVVNCX1JFR19ERVZJQ0VfQUREUkVTUykgJgorCQkgIEFSOTE3MF9VU0JfREVWSUNFX0FERFJFU1NfQ09ORklHVVJFKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHVzYl9lbmFibGVfcmVtb3RlX3dha2V1cCh2b2lkKQoreworCW9yYihBUjkxNzBfVVNCX1JFR19NQUlOX0NUUkwsIEFSOTE3MF9VU0JfTUFJTl9DVFJMX1JFTU9URV9XQUtFVVApOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgdXNiX2Rpc2FibGVfcmVtb3RlX3dha2V1cCh2b2lkKQoreworCWFuZGIoQVI5MTcwX1VTQl9SRUdfTUFJTl9DVFJMLCB+QVI5MTcwX1VTQl9NQUlOX0NUUkxfUkVNT1RFX1dBS0VVUCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCB1c2JfZW5hYmxlX2dsb2JhbF9pbnQodm9pZCkKK3sKKwlvcmIoQVI5MTcwX1VTQl9SRUdfTUFJTl9DVFJMLCBBUjkxNzBfVVNCX01BSU5fQ1RSTF9FTkFCTEVfR0xPQkFMX0lOVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCB1c2JfdHJpZ2dlcl9vdXQodm9pZCkKK3sKKwlhbmRiKEFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzQsCisJCSh1aW50OF90KSB+QVI5MTcwX1VTQl9JTlRSX0RJU0FCTEVfT1VUX0lOVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCB1c2JfcmVzZXRfb3V0KHZvaWQpCit7CisJb3JiKEFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzQsIEFSOTE3MF9VU0JfSU5UUl9ESVNBQkxFX09VVF9JTlQpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgdXNiX3RyaWdnZXJfaW4odm9pZCkKK3sKKwlhbmRiKEFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzYsIH5BUjkxNzBfVVNCX0lOVFJfRElTQUJMRV9JTl9JTlQpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgdXNiX3Jlc2V0X2luKHZvaWQpCit7CisJb3JiKEFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzYsIEFSOTE3MF9VU0JfSU5UUl9ESVNBQkxFX0lOX0lOVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCB1c2JfZXAzX3hmZXJfZG9uZSh2b2lkKQoreworCW9yYihBUjkxNzBfVVNCX1JFR19FUDNfQllURV9DT1VOVF9ISUdILCAweDA4KTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHVzYl9zdXNwZW5kX2Fjayh2b2lkKQoreworCS8qCisJICogdVAgbXVzdCBkby1vdmVyIGV2ZXJ5dGhpbmcgaXQgc2hvdWxkIGhhbmRsZQorCSAqIGFuZCBkbyBiZWZvcmUgaW50byB0aGUgc3VzcGVuZCBtb2RlCisJICovCisJYW5kYihBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV83LCB+QklUKDIpKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHVzYl9yZXN1bWVfYWNrKHZvaWQpCit7CisJLyoKKwkgKiB1UCBtdXN0IGRvLW92ZXIgZXZlcnl0aGluZyBpdCBzaG91bGQgaGFuZGxlCisJICogYW5kIGRvIGJlZm9yZSBpbnRvIHRoZSBzdXNwZW5kIG1vZGUKKwkgKi8KKworCWFuZGIoQVI5MTcwX1VTQl9SRUdfSU5UUl9TT1VSQ0VfNywgfkJJVCgzKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCB1c2JfcmVzZXRfYWNrKHZvaWQpCit7CisJYW5kYihBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV83LCB+QklUKDEpKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHVzYl9kYXRhX291dDBCeXRlKHZvaWQpCit7CisJYW5kYihBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV83LCAodWludDhfdCkgfkJJVCg3KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCB1c2JfZGF0YV9pbjBCeXRlKHZvaWQpCit7CisJYW5kYihBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV83LCB+QklUKDYpKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHVzYl9zdG9wX2Rvd25fcXVldWUodm9pZCkKK3sKKwlhbmRsKEFSOTE3MF9VU0JfUkVHX0RNQV9DVEwsIH5BUjkxNzBfVVNCX0RNQV9DVExfRU5BQkxFX1RPX0RFVklDRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCB1c2Jfc3RhcnRfZG93bl9xdWV1ZSh2b2lkKQoreworCW9ybChBUjkxNzBfVVNCX1JFR19ETUFfQ1RMLCBBUjkxNzBfVVNCX0RNQV9DVExfRU5BQkxFX1RPX0RFVklDRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCB1c2JfY2xlYXJfaW5wdXRfZXBfdG9nZ2xlKHVuc2lnbmVkIGludCBlcCkKK3sKKwlhbmRsKEFSOTE3MF9VU0JfUkVHX0VQX0lOX01BWF9TSVpFX0hJR0ggKyAoZXAgPDwgMSksCisJICAgICB+QVI5MTcwX1VTQl9FUF9JTl9UT0dHTEUpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgdXNiX3NldF9pbnB1dF9lcF90b2dnbGUodW5zaWduZWQgaW50IGVwKQoreworCW9ybChBUjkxNzBfVVNCX1JFR19FUF9JTl9NQVhfU0laRV9ISUdIICsgKGVwIDw8IDEpLAorCSAgICBBUjkxNzBfVVNCX0VQX0lOX1RPR0dMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCB1c2JfY2xlYXJfb3V0cHV0X2VwX3RvZ2dsZSh1bnNpZ25lZCBpbnQgZXApCit7CisJYW5kbChBUjkxNzBfVVNCX1JFR19FUF9PVVRfTUFYX1NJWkVfSElHSCArIChlcCA8PCAxKSwKKwkgICAgIH5BUjkxNzBfVVNCX0VQX09VVF9UT0dHTEUpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgdXNiX3NldF9vdXRwdXRfZXBfdG9nZ2xlKHVuc2lnbmVkIGludCBlcCkKK3sKKwlvcmwoQVI5MTcwX1VTQl9SRUdfRVBfT1VUX01BWF9TSVpFX0hJR0ggKyAoZXAgPDwgMSksCisJICAgIEFSOTE3MF9VU0JfRVBfT1VUX1RPR0dMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jfc3RydWN0dXJlX2NoZWNrKHZvaWQpCit7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yKSAhPSBVU0JfRFRfQ09ORklHX1NJWkUpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcikgIT0gVVNCX0RUX0RFVklDRV9TSVpFKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcikgIT0gVVNCX0RUX0VORFBPSU5UX1NJWkUpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcikgIT0gVVNCX0RUX0lOVEVSRkFDRV9TSVpFKTsKK30KKwordm9pZCBfX25vcmV0dXJuIGp1bXBfdG9fYm9vdGNvZGUodm9pZCk7CisKK3ZvaWQgc2VuZF9jbWRfdG9faG9zdChjb25zdCB1aW50OF90IGxlbiwgY29uc3QgdWludDhfdCB0eXBlLAorCQkgICAgICBjb25zdCB1aW50OF90IGV4dCwgY29uc3QgdWludDhfdCAqYm9keSk7CisKK3ZvaWQgdXNiX2luaXQodm9pZCk7Cit2b2lkIHVzYl9lcDByeCh2b2lkKTsKK3ZvaWQgdXNiX2VwMHR4KHZvaWQpOwordm9pZCB1c2JfZXAwc2V0dXAodm9pZCk7Cit2b2lkIGhhbmRsZV91c2Iodm9pZCk7CisKK3ZvaWQgdXNiX3RpbWVyKHZvaWQpOwordm9pZCB1c2JfcHV0Yyhjb25zdCBjaGFyIGMpOwordm9pZCB1c2JfcHJpbnRfaGV4X2R1bXAoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKTsKKwordm9pZCB1c2JfaW5pdF9oaWdoc3BlZWRfZmlmb19jZmcodm9pZCk7Cit2b2lkIHVzYl9pbml0X2Z1bGxzcGVlZF9maWZvX2NmZyh2b2lkKTsKKwordm9pZCBfX25vcmV0dXJuIHN0YXJ0KHZvaWQpOwordm9pZCBfX25vcmV0dXJuIHJlYm9vdCh2b2lkKTsKKworI2VuZGlmIC8qIF9fQ0FSTDkxNzBGV19VU0JfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS91c2JfZmlmby5oIGIvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS91c2JfZmlmby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODRjODgKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL3VzYl9maWZvLmgKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBVU0IgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQJMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDktMjAxMQlDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MEZXX1VTQl9GSUZPX0gKKyNkZWZpbmUgX19DQVJMOTE3MEZXX1VTQl9GSUZPX0gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjZGVmaW5lIE1BU0tfRjAgICAgICAgICAgICAgMHhmMAorCisvKiBCbG9jayBTaXplIGRlZmluZSAqLworI2RlZmluZSBCTEs1MTJCWVRFICAgICAgMQorI2RlZmluZSBCTEsxMDI0QllURSAgICAgMgorCisjZGVmaW5lIEJMSzY0QllURSAgICAgICAxCisjZGVmaW5lIEJMSzEyOEJZVEUgICAgICAyCisKKy8qIEJsb2NrIHRvZ2dsZSBudW1iZXIgZGVmaW5lICovCisjZGVmaW5lIFNJTkdMRV9CTEsgICAgICAxCisjZGVmaW5lIERPVUJMRV9CTEsgICAgICAyCisjZGVmaW5lIFRSSUJMRV9CTEsgICAgICAzCisKKy8qIEVuZHBvaW50IHRyYW5zZmVyIHR5cGUgKi8KKyNkZWZpbmUgVEZfVFlQRV9JU09DSFJPTk9VUyAgICAgMQorI2RlZmluZSBURl9UWVBFX0JVTEsgICAgICAgICAgICAyCisjZGVmaW5lIFRGX1RZUEVfSU5URVJSVVBUICAgICAgIDMKKworLyogRW5kcG9pbnQgb3IgRklGTyBkaXJlY3Rpb24gZGVmaW5lICovCisjZGVmaW5lIERJUkVDVElPTl9JTiAgICAwCisjZGVmaW5lIERJUkVDVElPTl9PVVQgICAxCisKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAxX01BWF9QQUNLRVQgICAgICAgICAgICAgIDUxMgorI2RlZmluZSBIU19DMV9JMF9BMF9FUDFfYkludGVydmFsICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQX05VTUJFUiAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQX0xFTkdUSCAgICAgICAgICAgICAgICAgICAoRVBfTEVOR1RIICogSFNfQzFfSTBfQTBfRVBfTlVNQkVSKQorI2RlZmluZSBIU19DMV9JMF9BTFRfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgKEhTX0MxX0kwX0EwX0VQX0xFTkdUSCkKKyNkZWZpbmUgSFNfQzFfSU5URVJGQUNFX0xFTkdUSCAgICAgICAgICAgICAgICAgIChIU19DMV9JMF9BTFRfTEVOR1RIKQorCisjZGVmaW5lIEhTX0MxX0NPTkZJR19UT1RBTF9MRU5HVEggICAgICAgICAgICAgICAoQ09ORklHX0xFTkdUSCArIElOVEVSRkFDRV9MRU5HVEggKyAgSFNfQzFfSU5URVJGQUNFX0xFTkdUSCkKKyNkZWZpbmUgRlNfQzFfQ09ORklHX1RPVEFMX0xFTkdUSCAgICAgICAgICAgICAgIChDT05GSUdfTEVOR1RIICsgSU5URVJGQUNFX0xFTkdUSCArICBGU19DMV9JTlRFUkZBQ0VfTEVOR1RIKQorCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQMV9NQVhfUEFDS0VUICAgICAgICAgICAgICA2NAorLyogI2RlZmluZSBGU19DMV9JMF9BMF9FUDFfYkludGVydmFsICAgICAgICAgICAgICAgSFNfQzFfSTBfQTBfRVAxX2JJbnRlcnZhbCAqLworCisjZGVmaW5lIEhTX0NPTkZJR1VSQVRJT05fTlVNQkVSICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEZTX0NPTkZJR1VSQVRJT05fTlVNQkVSICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgZkRPVUJMRV9CVUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgZkRPVUJMRV9CVUZfSU4gICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworI2RlZmluZSBmRkxBU0hfRElTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBmRU5BQkxFX0lTTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIEhTX0MxX0lOVEVSRkFDRV9OVU1CRVIgIDB4MDEKKyNkZWZpbmUgSFNfQzEgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBIU19DMV9pQ29uZmlndXJhdGlvbiAgICAweDAwCisjZGVmaW5lIEhTX0MxX2JtQXR0cmlidXRlICAgICAgIDB4ODAKKworI2RlZmluZSBIU19DMV9pTWF4UG93ZXIgICAgICAgICAweEZBCisKKy8qIEludGVyZmFjZSAwICovCisjZGVmaW5lIEhTX0MxX0kwX0FMVF9OVU1CRVIgICAgMFgwMQorLyogQWx0ZXJuYXRlU2V0dGluZyAwICovCisjZGVmaW5lIEhTX0MxX0kwX0EwX2JJbnRlcmZhY2VOdW1iZXIJMHgwMAorI2RlZmluZSBIU19DMV9JMF9BMF9iQWx0ZXJuYXRlU2V0dGluZwkweDAwCisvKiBKV0VJIDIwMDMvMDcvMTQgKi8KKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVBfTlVNQkVSCQkweDA0CisjZGVmaW5lIEhTX0MxX0kwX0EwX2JJbnRlcmZhY2VDbGFzcwkweGZmCisjZGVmaW5lIEhTX0MxX0kwX0EwX2JJbnRlcmZhY2VTdWJDbGFzcwkweDAwCisjZGVmaW5lIEhTX0MxX0kwX0EwX2JJbnRlcmZhY2VQcm90b2NvbAkweDAwCisjZGVmaW5lIEhTX0MxX0kwX0EwX2lJbnRlcmZhY2UJCTB4MDAKKworLyogRVAgMSAqLworI2RlZmluZSBIU19DMV9JMF9BMF9FUDFfQkxLU0laRSAgICA1MTIKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAxX0JMS05PICAgICAgRE9VQkxFX0JMSworI2RlZmluZSBIU19DMV9JMF9BMF9FUDFfRElSRUNUSU9OICBESVJFQ1RJT05fT1VUCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQMV9UWVBFICAgICAgIFRGX1RZUEVfQlVMSworCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQMV9NQVhfUEFDS0VUIDUxMgorI2RlZmluZSBIU19DMV9JMF9BMF9FUDFfYkludGVydmFsICAwCisKKy8qIEVQIDIgKi8KKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAyX0JMS1NJWkUgICAgNTEyCisvKiBKV0VJIDIwMDMvMDgvMjAgKi8KKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAyX0JMS05PICAgICAgU0lOR0xFX0JMSworI2RlZmluZSBIU19DMV9JMF9BMF9FUDJfRElSRUNUSU9OICBESVJFQ1RJT05fSU4KKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAyX1RZUEUgICAgICAgVEZfVFlQRV9CVUxLCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQMl9NQVhfUEFDS0VUIDUxMgorI2RlZmluZSBIU19DMV9JMF9BMF9FUDJfYkludGVydmFsICAwCisKKy8qIEVQIDMgKi8KKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAzX0JMS1NJWkUgICAgNjQKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAzX0JMS05PICAgICAgU0lOR0xFX0JMSworI2RlZmluZSBIU19DMV9JMF9BMF9FUDNfRElSRUNUSU9OICBESVJFQ1RJT05fSU4KKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAzX1RZUEUgICAgICAgVEZfVFlQRV9JTlRFUlJVUFQKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAzX01BWF9QQUNLRVQgMHgwMDQwCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQM19iSW50ZXJ2YWwgIDAxCisKKy8qCisgKiBOb3RlOiBIUyBCdWxrIHR5cGUgcmVxdWlyZSBtYXggcGt0IHNpemUgPSA1MTIKKyAqICAgICAgID09PiBtdXN0IHVzZSBJbnRlcnJ1cHQgdHlwZSBmb3IgbWF4IHBrdCBzaXplID0gNjQKKyAqLworCisvKiBFUCA0ICovCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQNF9CTEtTSVpFICAgIDY0CisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQNF9CTEtOTyAgICAgIFNJTkdMRV9CTEsKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVA0X0RJUkVDVElPTiAgRElSRUNUSU9OX09VVAorI2RlZmluZSBIU19DMV9JMF9BMF9FUDRfVFlQRSAgICAgICBURl9UWVBFX0lOVEVSUlVQVAorI2RlZmluZSBIU19DMV9JMF9BMF9FUDRfTUFYX1BBQ0tFVCAweDAwNDAKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVA0X2JJbnRlcnZhbCAgMDEKKworI2RlZmluZSBIU19DMV9JMF9BMF9FUF9MRU5HVEggICAgICAgICAgIChFUF9MRU5HVEggKiBIU19DMV9JMF9BMF9FUF9OVU1CRVIpCisvKiBFUCAxICovCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQMV9GSUZPX1NUQVJUICAwCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQMV9GSUZPX05PICAgICAoSFNfQzFfSTBfQTBfRVAxX0JMS05PICogSFNfQzFfSTBfQTBfRVAxX0JMS1NJWkUpCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQMV9GSUZPX0NPTkZJRyAodWludDhfdCkoMHg4MCB8ICgoSFNfQzFfSTBfQTBfRVAxX0JMS1NJWkUgLSAxKSA8PCA0KSB8ICgoSFNfQzFfSTBfQTBfRVAxX0JMS05PIC0gMSkgPDwgMikgfCBIU19DMV9JMF9BMF9FUDFfVFlQRSkKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAxX0ZJRk9fTUFQICAgICgoKDEgLSBIU19DMV9JMF9BMF9FUDFfRElSRUNUSU9OKSA8PCA0KSB8IDEpCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQMV9NQVAgICAgICAgICAoSFNfQzFfSTBfQTBfRVAxX0ZJRk9fU1RBUlQgfCAgIChIU19DMV9JMF9BMF9FUDFfRklGT19TVEFSVCA8PCA0KSAgIHwgKE1BU0tfRjAgPj4gKDQqSFNfQzFfSTBfQTBfRVAxX0RJUkVDVElPTikpKQorCisvKiBFUCAyICovCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQMl9GSUZPX1NUQVJUICAodWludDhfdCkoSFNfQzFfSTBfQTBfRVAxX0ZJRk9fU1RBUlQgKyBIU19DMV9JMF9BMF9FUDFfRklGT19OTykKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAyX0ZJRk9fTk8gICAgICh1aW50OF90KShIU19DMV9JMF9BMF9FUDJfQkxLTk8gKiBIU19DMV9JMF9BMF9FUDJfQkxLU0laRSkKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAyX0ZJRk9fQ09ORklHICh1aW50OF90KSgweDgwIHwgKChIU19DMV9JMF9BMF9FUDJfQkxLU0laRSAtIDEpIDw8IDQpIHwgKChIU19DMV9JMF9BMF9FUDJfQkxLTk8gLSAxKSA8PCAyKSB8IEhTX0MxX0kwX0EwX0VQMl9UWVBFKQorI2RlZmluZSBIU19DMV9JMF9BMF9FUDJfRklGT19NQVAgICAgKHVpbnQ4X3QpKCgoMSAtIEhTX0MxX0kwX0EwX0VQMl9ESVJFQ1RJT04pIDw8IDQpIHwgMikKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAyX01BUCAgICAgICAgICh1aW50OF90KShIU19DMV9JMF9BMF9FUDJfRklGT19TVEFSVCB8ICAgKEhTX0MxX0kwX0EwX0VQMl9GSUZPX1NUQVJUIDw8IDQpICAgfCAoTUFTS19GMCA+PiAoNCpIU19DMV9JMF9BMF9FUDJfRElSRUNUSU9OKSkpCisKKy8qIEVQIDMgKi8KKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAzX0ZJRk9fU1RBUlQgIDE0CisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQM19GSUZPX05PICAgICAoSFNfQzFfSTBfQTBfRVAzX0JMS05PICogSFNfQzFfSTBfQTBfRVAzX0JMS1NJWkUpCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQM19GSUZPX0NPTkZJRyAodWludDhfdCkoMHg4MCB8ICgoSFNfQzFfSTBfQTBfRVAzX0JMS1NJWkUgLSAxKSA8PCA0KSB8ICgoSFNfQzFfSTBfQTBfRVAzX0JMS05PIC0gMSkgPDwgMikgfCBIU19DMV9JMF9BMF9FUDNfVFlQRSkKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVAzX0ZJRk9fTUFQICAgICh1aW50OF90KSgoKDEgLSBIU19DMV9JMF9BMF9FUDNfRElSRUNUSU9OKSA8PCA0KSB8IDMpCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQM19NQVAgICAgICAgICAodWludDhfdCkoSFNfQzFfSTBfQTBfRVAzX0ZJRk9fU1RBUlQgfCAgIChIU19DMV9JMF9BMF9FUDNfRklGT19TVEFSVCA8PCA0KSAgIHwgKE1BU0tfRjAgPj4gKDQqSFNfQzFfSTBfQTBfRVAzX0RJUkVDVElPTikpKQorCisvKiBFUCA0ICovCisjZGVmaW5lIEhTX0MxX0kwX0EwX0VQNF9GSUZPX1NUQVJUICAoSFNfQzFfSTBfQTBfRVAzX0ZJRk9fU1RBUlQgKyBIU19DMV9JMF9BMF9FUDNfRklGT19OTykKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVA0X0ZJRk9fTk8gICAgIChIU19DMV9JMF9BMF9FUDRfQkxLTk8gKiBIU19DMV9JMF9BMF9FUDRfQkxLU0laRSkKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVA0X0ZJRk9fQ09ORklHICh1aW50OF90KSgweDgwIHwgKChIU19DMV9JMF9BMF9FUDRfQkxLU0laRSAtIDEpIDw8IDQpIHwgKChIU19DMV9JMF9BMF9FUDRfQkxLTk8gLSAxKSA8PCAyKSB8IEhTX0MxX0kwX0EwX0VQNF9UWVBFKQorI2RlZmluZSBIU19DMV9JMF9BMF9FUDRfRklGT19NQVAgICAgKCgoMSAtIEhTX0MxX0kwX0EwX0VQNF9ESVJFQ1RJT04pIDw8IDQpIHwgNCkKKyNkZWZpbmUgSFNfQzFfSTBfQTBfRVA0X01BUCAgICAgICAgICh1aW50OF90KShIU19DMV9JMF9BMF9FUDRfRklGT19TVEFSVCB8ICAgKEhTX0MxX0kwX0EwX0VQNF9GSUZPX1NUQVJUIDw8IDQpICAgfCAoTUFTS19GMCA+PiAoNCpIU19DMV9JMF9BMF9FUDRfRElSRUNUSU9OKSkpCisKKy8qIENvbmZpZ3VyYXRpb24gMSAqLworI2RlZmluZSBGU19DMV9JTlRFUkZBQ0VfTlVNQkVSCQkweDAxCisjZGVmaW5lIEZTX0MxCQkJCTB4MDEKKyNkZWZpbmUgRlNfQzFfaUNvbmZpZ3VyYXRpb24JCTB4MDAKKyNkZWZpbmUgRlNfQzFfYm1BdHRyaWJ1dGUJCTB4ODAKKyNkZWZpbmUgRlNfQzFfaU1heFBvd2VyCQkJMHhmYQorCisvKiBJbnRlcmZhY2UgMCAqLworI2RlZmluZSBGU19DMV9JMF9BTFRfTlVNQkVSCQkweDAxCisvKiBBbHRlcm5hdGVTZXR0aW5nIDB4MDAgKi8KKyNkZWZpbmUgRlNfQzFfSTBfQTBfYkludGVyZmFjZU51bWJlcgkweDAwCisjZGVmaW5lIEZTX0MxX0kwX0EwX2JBbHRlcm5hdGVTZXR0aW5nCTB4MDAKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVBfTlVNQkVSCQkweDA0CisjZGVmaW5lIEZTX0MxX0kwX0EwX2JJbnRlcmZhY2VDbGFzcwkweGZmCisjZGVmaW5lIEZTX0MxX0kwX0EwX2JJbnRlcmZhY2VTdWJDbGFzcwkweDAwCisjZGVmaW5lIEZTX0MxX0kwX0EwX2JJbnRlcmZhY2VQcm90b2NvbAkweDAwCisKKy8qIEVQIDEgKi8KKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAxX0JMS1NJWkUgICAgNTEyCisvKiBKV0VJIDIwMDMvMDUvMTkgKi8KKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAxX0JMS05PICAgICAgRE9VQkxFX0JMSworI2RlZmluZSBGU19DMV9JMF9BMF9FUDFfRElSRUNUSU9OICBESVJFQ1RJT05fT1VUCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQMV9UWVBFICAgICAgIFRGX1RZUEVfQlVMSworI2RlZmluZSBGU19DMV9JMF9BMF9FUDFfTUFYX1BBQ0tFVCA2NAorI2RlZmluZSBGU19DMV9JMF9BMF9FUDFfYkludGVydmFsICAwCisKKy8qIEVQIDIgKi8KKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAyX0JMS1NJWkUgICAgNTEyCisvKiBKV0VJIDIwMDMvMDgvMjAgKi8KKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAyX0JMS05PICAgICAgU0lOR0xFX0JMSworI2RlZmluZSBGU19DMV9JMF9BMF9FUDJfRElSRUNUSU9OICBESVJFQ1RJT05fSU4KKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAyX1RZUEUgICAgICAgVEZfVFlQRV9CVUxLCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQMl9NQVhfUEFDS0VUIDY0CisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQMl9iSW50ZXJ2YWwgIDAKKworLyogRVAgMyAqLworI2RlZmluZSBGU19DMV9JMF9BMF9FUDNfQkxLU0laRSAgICA2NAorI2RlZmluZSBGU19DMV9JMF9BMF9FUDNfQkxLTk8gICAgICBTSU5HTEVfQkxLCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQM19ESVJFQ1RJT04gIERJUkVDVElPTl9JTgorI2RlZmluZSBGU19DMV9JMF9BMF9FUDNfVFlQRSAgICAgICBURl9UWVBFX0lOVEVSUlVQVAorI2RlZmluZSBGU19DMV9JMF9BMF9FUDNfTUFYX1BBQ0tFVCAweDAwNDAKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAzX2JJbnRlcnZhbCAgMQorCisvKiBFUCA0ICovCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQNF9CTEtTSVpFICAgIDY0CisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQNF9CTEtOTyAgICAgIFNJTkdMRV9CTEsKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVA0X0RJUkVDVElPTiAgRElSRUNUSU9OX09VVAorI2RlZmluZSBGU19DMV9JMF9BMF9FUDRfVFlQRSAgICAgICBURl9UWVBFX0JVTEsKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVA0X01BWF9QQUNLRVQgMHgwMDQwCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQNF9iSW50ZXJ2YWwgIDAKKworI2RlZmluZSBGU19DMV9JMF9BMF9FUF9MRU5HVEggICAgICAgICAgIChFUF9MRU5HVEggKiBGU19DMV9JMF9BMF9FUF9OVU1CRVIpCisvKiBFUCAxICovCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQMV9GSUZPX1NUQVJUICAwCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQMV9GSUZPX05PICAgICAodWludDhfdCkoRlNfQzFfSTBfQTBfRVAxX0JMS05PICogRlNfQzFfSTBfQTBfRVAxX0JMS1NJWkUpCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQMV9GSUZPX0NPTkZJRyAodWludDhfdCkoMHg4MCB8ICgoRlNfQzFfSTBfQTBfRVAxX0JMS1NJWkUgLSAxKSA8PCA0KSB8ICgoRlNfQzFfSTBfQTBfRVAxX0JMS05PIC0gMSkgPDwgMikgfCBGU19DMV9JMF9BMF9FUDFfVFlQRSkKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAxX0ZJRk9fTUFQICAgICh1aW50OF90KSgoKDEgLSBGU19DMV9JMF9BMF9FUDFfRElSRUNUSU9OKSA8PCA0KSB8IDEpCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQMV9NQVAgICAgICAgICAodWludDhfdCkoRlNfQzFfSTBfQTBfRVAxX0ZJRk9fU1RBUlQgfCAgIChGU19DMV9JMF9BMF9FUDFfRklGT19TVEFSVCA8PCA0KSAgIHwgKE1BU0tfRjAgPj4gKDQqRlNfQzFfSTBfQTBfRVAxX0RJUkVDVElPTikpKQorCisvKiBFUCAyICovCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQMl9GSUZPX1NUQVJUICAodWludDhfdCkoRlNfQzFfSTBfQTBfRVAxX0ZJRk9fU1RBUlQgKyBGU19DMV9JMF9BMF9FUDFfRklGT19OTykKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAyX0ZJRk9fTk8gICAgICh1aW50OF90KShGU19DMV9JMF9BMF9FUDJfQkxLTk8gKiBGU19DMV9JMF9BMF9FUDJfQkxLU0laRSkKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAyX0ZJRk9fQ09ORklHICh1aW50OF90KSgweDgwIHwgKChGU19DMV9JMF9BMF9FUDJfQkxLU0laRSAtIDEpIDw8IDQpIHwgKChGU19DMV9JMF9BMF9FUDJfQkxLTk8gLSAxKSA8PCAyKSB8IEZTX0MxX0kwX0EwX0VQMl9UWVBFKQorI2RlZmluZSBGU19DMV9JMF9BMF9FUDJfRklGT19NQVAgICAgKHVpbnQ4X3QpKCgoMSAtIEZTX0MxX0kwX0EwX0VQMl9ESVJFQ1RJT04pIDw8IDQpIHwgMikKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAyX01BUCAgICAgICAgICh1aW50OF90KShGU19DMV9JMF9BMF9FUDJfRklGT19TVEFSVCB8ICAgKEZTX0MxX0kwX0EwX0VQMl9GSUZPX1NUQVJUIDw8IDQpICAgfCAoTUFTS19GMCA+PiAoNCpGU19DMV9JMF9BMF9FUDJfRElSRUNUSU9OKSkpCisKKy8qIEVQIDMgKi8KKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAzX0ZJRk9fU1RBUlQgIDE0CisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQM19GSUZPX05PICAgICAodWludDhfdCkoRlNfQzFfSTBfQTBfRVAzX0JMS05PICogRlNfQzFfSTBfQTBfRVAzX0JMS1NJWkUpCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQM19GSUZPX0NPTkZJRyAodWludDhfdCkoMHg4MCB8ICgoRlNfQzFfSTBfQTBfRVAzX0JMS1NJWkUgLSAxKSA8PCA0KSB8ICgoRlNfQzFfSTBfQTBfRVAzX0JMS05PIC0gMSkgPDwgMikgfCBGU19DMV9JMF9BMF9FUDNfVFlQRSkKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVAzX0ZJRk9fTUFQICAgICh1aW50OF90KSgoKDEgLSBGU19DMV9JMF9BMF9FUDNfRElSRUNUSU9OKSA8PCA0KSB8IDMpCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQM19NQVAgICAgICAgICAodWludDhfdCkoRlNfQzFfSTBfQTBfRVAzX0ZJRk9fU1RBUlQgfCAgIChGU19DMV9JMF9BMF9FUDNfRklGT19TVEFSVCA8PCA0KSAgIHwgKE1BU0tfRjAgPj4gKDQqRlNfQzFfSTBfQTBfRVAzX0RJUkVDVElPTikpKQorCisvKiBFUCA0ICovCisjZGVmaW5lIEZTX0MxX0kwX0EwX0VQNF9GSUZPX1NUQVJUICAodWludDhfdCkoRlNfQzFfSTBfQTBfRVAzX0ZJRk9fU1RBUlQgKyBGU19DMV9JMF9BMF9FUDNfRklGT19OTykKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVA0X0ZJRk9fTk8gICAgICh1aW50OF90KShGU19DMV9JMF9BMF9FUDRfQkxLTk8gKiBGU19DMV9JMF9BMF9FUDRfQkxLU0laRSkKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVA0X0ZJRk9fQ09ORklHICh1aW50OF90KSgweDgwIHwgKChGU19DMV9JMF9BMF9FUDRfQkxLU0laRSAtIDEpIDw8IDQpIHwgKChGU19DMV9JMF9BMF9FUDRfQkxLTk8gLSAxKSA8PCAyKSB8IEZTX0MxX0kwX0EwX0VQNF9UWVBFKQorI2RlZmluZSBGU19DMV9JMF9BMF9FUDRfRklGT19NQVAgICAgKHVpbnQ4X3QpKCgoMSAtIEZTX0MxX0kwX0EwX0VQNF9ESVJFQ1RJT04pIDw8IDQpIHwgNCkKKyNkZWZpbmUgRlNfQzFfSTBfQTBfRVA0X01BUCAgICAgICAgICh1aW50OF90KShGU19DMV9JMF9BMF9FUDRfRklGT19TVEFSVCB8ICAgKEZTX0MxX0kwX0EwX0VQNF9GSUZPX1NUQVJUIDw8IDQpICAgfCAoTUFTS19GMCA+PiAoNCpGU19DMV9JMF9BMF9FUDRfRElSRUNUSU9OKSkpCisKKyNlbmRpZiAvKiBfX0NBUkw5MTcwRldfVVNCX0ZJRk9fSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS93bC5oIGIvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS93bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNWIwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL3dsLmgKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBXTEFOCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICogQ29weXJpZ2h0CTIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEJQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQ0FSTDkxNzBGV19XTEFOX0gKKyNkZWZpbmUgX19DQVJMOTE3MEZXX1dMQU5fSAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY2FybDkxNzAuaCIKKyNpbmNsdWRlICJpby5oIgorCitzdHJ1Y3QgaWVlZTgwMjExX2hkcjsKKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHNldF93bGFuX3R4cV9kbWFfYWRkcihjb25zdCB1bnNpZ25lZCBpbnQgcSwgY29uc3QgdWludDMyX3QgdikKK3sKKwlzZXQoQVI5MTcwX01BQ19SRUdfRE1BX1RYUV9BRERSICsgKHEgPDwgMyksIHYpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvaWQgc2V0X3dsYW5fdHhxX2RtYV9jdXJyX2FkZHIoY29uc3QgdW5zaWduZWQgaW50IHEsIGNvbnN0IHVpbnQzMl90IHYpCit7CisJc2V0KEFSOTE3MF9NQUNfUkVHX0RNQV9UWFFfQ1VSUl9BRERSICsgKHEgPDwgMyksIHYpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvbGF0aWxlIHN0cnVjdCBkbWFfZGVzYyAqZ2V0X3dsYW5fdHhxX2RtYV9hZGRyKGNvbnN0IHVuc2lnbmVkIGludCBxKQoreworCXJldHVybiBnZXRwKEFSOTE3MF9NQUNfUkVHX0RNQV9UWFFfQUREUiArIChxIDw8IDMpKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2xhdGlsZSBzdHJ1Y3QgZG1hX2Rlc2MgKmdldF93bGFuX3R4cV9hZGRyKGNvbnN0IHVuc2lnbmVkIGludCBxKQoreworCXJldHVybiBnZXRwKEFSOTE3MF9NQUNfUkVHX0RNQV9UWFFfQ1VSUl9BRERSICsgKHEgPDwgMykpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHZvbGF0aWxlIHN0cnVjdCBkbWFfZGVzYyAqZ2V0X3dsYW5fdHhxX2xhc3RfYWRkcihjb25zdCB1bnNpZ25lZCBpbnQgcSkKK3sKKwlyZXR1cm4gZ2V0cChBUjkxNzBfTUFDX1JFR19ETUFfVFhRX0xBU1RfQUREUiArIChxIDw8IDIpKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB2b2lkIHdsYW5fdHJpZ2dlcihjb25zdCB1aW50MzJfdCBxdWV1ZV9iaXQpCit7CisJc2V0KEFSOTE3MF9NQUNfUkVHX0RNQV9UUklHR0VSLCBxdWV1ZV9iaXQpOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHVpbnQ4X3QgYXI5MTcwX2dldF9yeF9tYWNzdGF0dXNfc3RhdHVzKHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKK3sKKwlyZXR1cm4gKigodWludDhfdCAqKSBERVNDX1BBWUxPQURfT0ZGKGRlc2MtPmxhc3RBZGRyLAorCQkodW5zaWduZWQgaW50KSBkZXNjLT5sYXN0QWRkci0+ZGF0YVNpemUgLSAxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdWludDhfdCBhcjkxNzBfZ2V0X3J4X21hY3N0YXR1c19lcnJvcihzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCWlmIChkZXNjLT5sYXN0QWRkci0+ZGF0YVNpemUgPT0gMSkgeworCQl3aGlsZSAoZGVzYy0+bGFzdEFkZHIgIT0gZGVzYy0+bmV4dEFkZHIpCisJCQlkZXNjID0gZGVzYy0+bmV4dEFkZHI7CisKKwkJb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgKGRlc2MtPmRhdGFTaXplIC0gMSk7CisJfSBlbHNlIHsKKwkJZGVzYyA9IGRlc2MtPmxhc3RBZGRyOworCQlvZmZzZXQgPSBkZXNjLT5kYXRhU2l6ZSAtCisJCQkoc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfbWFjc3RhdHVzKSAtCisJCQkgb2Zmc2V0b2Yoc3RydWN0IGFyOTE3MF9yeF9tYWNzdGF0dXMsIGVycm9yKSk7CisJfQorCisJcmV0dXJuICooKHVpbnQ4X3QgKikgREVTQ19QQVlMT0FEX09GRihkZXNjLCBvZmZzZXQpKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqYXI5MTcwX2dldF9yeF9pM2Uoc3RydWN0IGRtYV9kZXNjICpkZXNjKQoreworCWlmICghKChhcjkxNzBfZ2V0X3J4X21hY3N0YXR1c19zdGF0dXMoZGVzYykgJgorCQlBUjkxNzBfUlhfU1RBVFVTX01QRFUpICYgQVI5MTcwX1JYX1NUQVRVU19NUERVX0xBU1QpKSB7CisJCXJldHVybiAodm9pZCAqKShERVNDX1BBWUxPQURfT0ZGKGRlc2MsCisJCQlvZmZzZXRvZihzdHJ1Y3QgYXI5MTcwX3J4X2ZyYW1lX2hlYWQsIGkzZSkpKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKHZvaWQgKikoREVTQ19QQVlMT0FEX09GRihkZXNjLAorCQkJb2Zmc2V0b2Yoc3RydWN0IGFyOTE3MF9yeF9mcmFtZV90YWlsLCBpM2UpKSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHN0cnVjdCBhcjkxNzBfcnhfaGVhZCAqYXI5MTcwX2dldF9yeF9oZWFkKHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKK3sKKwlpZiAoISgoYXI5MTcwX2dldF9yeF9tYWNzdGF0dXNfc3RhdHVzKGRlc2MpICYKKwkJQVI5MTcwX1JYX1NUQVRVU19NUERVKSAmIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9MQVNUKSkgeworCQlyZXR1cm4gKHZvaWQgKikoKHVpbnQ4X3QgKilERVNDX1BBWUxPQUQoZGVzYykgKworCQkJb2Zmc2V0b2Yoc3RydWN0IGFyOTE3MF9yeF9mcmFtZV9oZWFkLCBwaHlfaGVhZCkpOworCX0gZWxzZSB7CisJCXJldHVybiAodm9pZCAqKSBOVUxMOworCX0KK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSB1aW50MzJfdCBhcjkxNzBfcnhfdG9fcGh5KHN0cnVjdCBkbWFfZGVzYyAqcngpCit7CisJc3RydWN0IGFyOTE3MF90eF9od19waHlfY29udHJvbCBwaHk7CisJc3RydWN0IGFyOTE3MF9yeF9oZWFkICpoZWFkOworCXVpbnQ4X3QgbWFjX3N0YXR1czsKKworCXBoeS5zZXQgPSAwOworCisJaGVhZCA9IGFyOTE3MF9nZXRfcnhfaGVhZChyeCk7CisJaWYgKCFoZWFkKQorCQlyZXR1cm4gbGUzMl90b19jcHUocGh5LnNldCk7CisKKwltYWNfc3RhdHVzID0gYXI5MTcwX2dldF9yeF9tYWNzdGF0dXNfc3RhdHVzKHJ4KTsKKworCXBoeS5tb2R1bGF0aW9uID0gbWFjX3N0YXR1cyAmIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTjsKKwlwaHkuY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzE7CisKKwlzd2l0Y2ggKHBoeS5tb2R1bGF0aW9uKSB7CisJY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fQ0NLOgorCQlpZiAobWFjX3N0YXR1cyAmIEFSOTE3MF9SWF9TVEFUVVNfU0hPUlRfUFJFQU1CTEUpCisJCQlwaHkucHJlYW1ibGUgPSAxOworCisJCXN3aXRjaCAoaGVhZC0+cGxjcFswXSkgeworCQljYXNlIEFSOTE3MF9SWF9QSFlfUkFURV9DQ0tfMk06CisJCQlwaHkubWNzID0gQVI5MTcwX1RYX1BIWV9SQVRFX0NDS18yTTsKKwkJCWJyZWFrOworCisJCWNhc2UgQVI5MTcwX1JYX1BIWV9SQVRFX0NDS181TToKKwkJCXBoeS5tY3MgPSBBUjkxNzBfVFhfUEhZX1JBVEVfQ0NLXzVNOworCQkJYnJlYWs7CisKKwkJY2FzZSBBUjkxNzBfUlhfUEhZX1JBVEVfQ0NLXzExTToKKwkJCXBoeS5tY3MgPSBBUjkxNzBfVFhfUEhZX1JBVEVfQ0NLXzExTTsKKwkJCWJyZWFrOworCisJCWNhc2UgQVI5MTcwX1JYX1BIWV9SQVRFX0NDS18xTToKKwkJZGVmYXVsdDoKKwkJCXBoeS5tY3MgPSBBUjkxNzBfVFhfUEhZX1JBVEVfQ0NLXzFNOworCQkJYnJlYWs7CisKKwkJfQorCQlicmVhazsKKworCWNhc2UgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX0RVUE9GRE06CisJY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fT0ZETToKKwkJcGh5Lm1jcyA9IGhlYWQtPnBsY3BbMF0gJiAweGY7CisJCWJyZWFrOworCisJY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fSFQ6CisJCWlmIChoZWFkLT5wbGNwWzNdICYgMHg4MCkKKwkJCXBoeS5iYW5kd2lkdGggPSAyOworCisJCWlmIChoZWFkLT5wbGNwWzZdICYgMHg4MCkKKwkJCXBoeS5zaG9ydF9naSA9IDE7CisKKwkJLyogVE9ETzogRW5hYmxlIGJvdGggY2hhaW5zIGZvciBNQ1MgPiA3ICovCisJCXBoeS5tY3MgPSBoZWFkLT5wbGNwWzZdICYgMHg3OworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGUzMl90b19jcHUocGh5LnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdW5zaWduZWQgaW50IGFyOTE3MF9nZXRfcnhfbXBkdV9sZW4oc3RydWN0IGRtYV9kZXNjICpkZXNjKQoreworCS8qCisJICogV0FSTklORzogeW91IGhhdmUgdG8gY2hlY2sgdGhlIGVycm9yIGJpdHMgaW4gbWFjc3RhdHVzIGZpcnN0IQorCSAqLworCisJdW5zaWduZWQgaW50IG1wZHVfbGVuID0gZGVzYy0+dG90YWxMZW47CisKKwltcGR1X2xlbiAtPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9tYWNzdGF0dXMpOworCisJc3dpdGNoIChhcjkxNzBfZ2V0X3J4X21hY3N0YXR1c19zdGF0dXMoZGVzYykgJiBBUjkxNzBfUlhfU1RBVFVTX01QRFUpIHsKKwljYXNlIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9MQVNUOgorCQltcGR1X2xlbiAtPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9waHlzdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgQVI5MTcwX1JYX1NUQVRVU19NUERVX1NJTkdMRToKKwkJbXBkdV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfcGh5c3RhdHVzKTsKKworCWNhc2UgQVI5MTcwX1JYX1NUQVRVU19NUERVX0ZJUlNUOgorCQltcGR1X2xlbiAtPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKTsKKwkJYnJlYWs7CisKKwljYXNlIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9NSURETEU6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIG1wZHVfbGVuOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIGJvb2wgYXI5MTcwX3R4X2xlbmd0aF9jaGVjayhjb25zdCB1aW50MTZfdCBsZW4pCit7CisJcmV0dXJuIGxlbiA+IChzaXplb2Yoc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZnJhbWUpICsgMjQgKworCQkJIEZDU19MRU4pOworfQorCitzdGF0aWMgaW5saW5lIF9faW5saW5lIHN0cnVjdCBjYXJsOTE3MF90eF9zdXBlcmZyYW1lICpnZXRfc3VwZXIoc3RydWN0IGRtYV9kZXNjICpkZXNjKQoreworCXJldHVybiBjb250YWluZXJfb2YoREVTQ19QQVlMT0FEKGRlc2MpLCBzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJmcmFtZSwKKwkJCSAgICBmKTsKK30KKworc3RhdGljIGlubGluZSBfX2lubGluZSBzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJmcmFtZSAqX19nZXRfc3VwZXIoc3RydWN0IGRtYV9kZXNjICpkZXNjKQoreworCXJldHVybiBERVNDX1BBWUxPQUQoZGVzYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCBoaWRlX3N1cGVyKHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKK3sKKwlkZXNjLT5kYXRhQWRkciA9ICh1aW50OF90ICopCisJCSgoKHVuc2lnbmVkIGxvbmcpKERFU0NfUEFZTE9BRChkZXNjKSkgKworCQlvZmZzZXRvZihzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJmcmFtZSwgZikpKTsKKworCWRlc2MtPmRhdGFTaXplIC09IHNpemVvZihzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJkZXNjKTsKKwlkZXNjLT50b3RhbExlbiAtPSBzaXplb2Yoc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZGVzYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgdm9pZCB1bmhpZGVfc3VwZXIoc3RydWN0IGRtYV9kZXNjICpkZXNjKQoreworCWRlc2MtPmRhdGFBZGRyID0gKHVpbnQ4X3QgKikgZ2V0X3N1cGVyKGRlc2MpOworCWRlc2MtPmRhdGFTaXplICs9IHNpemVvZihzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJkZXNjKTsKKwlkZXNjLT50b3RhbExlbiArPSBzaXplb2Yoc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZGVzYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19pbmxpbmUgX19ob3Qgdm9pZCByZWFkX3RzZih1aW50MzJfdCAqdHNmKQoreworCS8qCisJICogIkFjY29yZGluZyB0byB0aGUgW2hhcmR3YXJlXSBkb2N1bWVudGF0aW9uOgorCSAqICA+IHdoZW4gVFNGX0xPVyBpcyByZWFkLCBUU0ZfSEkgaXMgYXV0b21hdGljYWxseSBjb25jdXJyZW50bHkKKwkgKiAgPiBjb3BpZWQgaW50byBhIHRlbXBvcmFyeSByZWdpc3RlciBzbyB0aGF0IGFuIGltbWVkaWF0ZSByZWFkCisJICogID4gb2YgVFNGX0hJIHdpbGwgZ2V0IHRoZSB2YWx1ZSB0aGF0IHdhcyBwcmVzZW50IHdoZW4gVFNGX0xPVworCSAqICA+IHdhcyByZWFkLiAiCisJICoKKwkgKiAoRGF2aWQgSC4gTHluY2ggSnIuIC0gbWFpbCBmcm9tIDIwMTAtMDUtMjIpCisJICogaHR0cDovL3Blcm1hbGluay5nbWFuZS5vcmcvZ21hbmUubGludXgua2VybmVsLndpcmVsZXNzLmdlbmVyYWwvNTEyNDkKKwkgKi8KKworCXRzZlswXSA9IGdldChBUjkxNzBfTUFDX1JFR19UU0ZfTCk7CisJdHNmWzFdID0gZ2V0KEFSOTE3MF9NQUNfUkVHX1RTRl9IKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgd29yayBvbiB1aW50MzJfdC1hbGlnbmVkIHBvaW50ZXJzISAqLworc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVfZXRoZXJfYWRkcmVzcyhjb25zdCB2b2lkICpfZDAsIGNvbnN0IHZvaWQgKl9kMSkKK3sKKwljb25zdCB1aW50MzJfdCAqZDAgPSBfZDA7CisJY29uc3QgdWludDMyX3QgKmQxID0gX2QxOworCisJLyogQlVHX09OKCh1bnNpZ25lZCBsb25nKWQwICYgMyB8fCAodW5zaWduZWQgbG9uZylkMSAmIDMpKSAqLworCXJldHVybiAhKChkMFswXSBeIGQxWzBdKSB8ICh1bnNpZ25lZCBzaG9ydCkoZDBbMV0gXiBkMVsxXSkpOworfQorCit2b2lkIHdsYW5fdHgoc3RydWN0IGRtYV9kZXNjICpkZXNjKTsKK3ZvaWQgd2xhbl90eF9mdyhzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJkZXNjICpzdXBlciwgZndfZGVzY19jYWxsYmFja190IGNiKTsKK3ZvaWQgd2xhbl90aW1lcih2b2lkKTsKK3ZvaWQgaGFuZGxlX3dsYW4odm9pZCk7CisKK3ZvaWQgd2xhbl9jYWJfZmx1c2hfcXVldWUoY29uc3QgdW5zaWduZWQgaW50IHZpZik7Cit2b2lkIHdsYW5fbW9kaWZ5X2JlYWNvbihjb25zdCB1bnNpZ25lZCBpbnQgdmlmLAorCQkJY29uc3QgdW5zaWduZWQgaW50IGJjbl9hZGRyLAorCQkJY29uc3QgdW5zaWduZWQgaW50IGJjbl9sZW4pOworCit2b2lkIHdsYW5fdHhfY29tcGxldGUoc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnN1cGVyLCBib29sIHR4cyk7Cit2b2lkIHdsYW5fcHJlcGFyZV93b2wodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NoZWNrX3dsYW50eCh2b2lkKQoreworCUJVSUxEX0JVR19PTihDQVJMOTE3MF9UWF9TVVBFUkRFU0NfTEVOICYgMyk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJkZXNjKSAhPSBDQVJMOTE3MF9UWF9TVVBFUkRFU0NfTEVOKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBfY2FybDkxNzBfdHhfc3VwZXJkZXNjKSAhPSBDQVJMOTE3MF9UWF9TVVBFUkRFU0NfTEVOKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBfY2FybDkxNzBfdHhfc3VwZXJmcmFtZSkgIT0gQ0FSTDkxNzBfVFhfU1VQRVJGUkFNRV9MRU4pOworCUJVSUxEX0JVR19PTigob2Zmc2V0b2Yoc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZnJhbWUsIGYpICYgMykgIT0gMCk7CisJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBfY2FybDkxNzBfdHhfc3VwZXJmcmFtZSwgZikgIT0KKwkJICAgICAob2Zmc2V0b2Yoc3RydWN0IF9jYXJsOTE3MF90eF9zdXBlcmZyYW1lLCBmKSkpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGFyOTE3MF90eF9od2Rlc2MpICE9IEFSOTE3MF9UWF9IV0RFU0NfTEVOKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBfYXI5MTcwX3R4X2h3ZGVzYykgIT0gQVI5MTcwX1RYX0hXREVTQ19MRU4pOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKSAhPSBBUjkxNzBfUlhfSEVBRF9MRU4pOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9waHlzdGF0dXMpICE9IEFSOTE3MF9SWF9QSFlTVEFUVVNfTEVOKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfbWFjc3RhdHVzKSAhPSBBUjkxNzBfUlhfTUFDU1RBVFVTX0xFTik7Cit9CisKKyNlbmRpZiAvKiBfX0NBUkw5MTcwRldfV0xBTl9IICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2Nhcmxmdy9pbmNsdWRlL3dvbC5oIGIvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS93b2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjk0MDBhCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jYXJsZncvaW5jbHVkZS93b2wuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogY2FybDkxNzAgZmlybXdhcmUgLSB1c2VkIGJ5IHRoZSBhcjkxNzAgd2lyZWxlc3MgZGV2aWNlCisgKgorICogV2FrZVVwIG9uIFdMQU4gZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQJMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDktMjAxMQlDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MEZXX1dPTF9ICisjZGVmaW5lIF9fQ0FSTDkxNzBGV19XT0xfSAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIuaCIKKyNpbmNsdWRlICJ0eXBlcy5oIgorCisjaW5jbHVkZSAiZndjbWQuaCIKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1dPTAorCitzdHJ1Y3QgaWVlZTgwMjExX2hkcjsKKwordm9pZCB3b2xfcHJlcGFyZSh2b2lkKTsKK3ZvaWQgd29sX2phbml0b3Iodm9pZCk7Cit2b2lkIHdvbF9yeChjb25zdCB1bnNpZ25lZCBpbnQgcnhfZmlsdGVyIF9fdW51c2VkLAorCSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyIF9fdW51c2VkLAorCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuIF9fdW51c2VkKTsKK3ZvaWQgd29sX2NtZChjb25zdCBzdHJ1Y3QgY2FybDkxNzBfd29sX2NtZCAqY21kKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHdvbF9jbWQoY29uc3Qgc3RydWN0IGNhcmw5MTcwX3dvbF9jbWQgKmNtZCBfX3VudXNlZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdvbF9wcmVwYXJlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3b2xfamFuaXRvcih2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd29sX3J4KGNvbnN0IHVuc2lnbmVkIGludCByeF9maWx0ZXIgX191bnVzZWQsCisJCQkgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgX191bnVzZWQsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGludCBsZW4gX191bnVzZWQpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfV09MICovCisKKyNlbmRpZiAvKiBfX0NBUkw5MTcwRldfQ01EX0ggKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy9hc2hsc2kzLlMgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvYXNobHNpMy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2Q5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvYXNobHNpMy5TCkBAIC0wLDAgKzEsMTkzIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsCisgICAyMDA0LCAyMDA1LCAyMDA2CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorbGF0ZXIgdmVyc2lvbi4KKworSW4gYWRkaXRpb24gdG8gdGhlIHBlcm1pc3Npb25zIGluIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMgeW91IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGxpbmsgdGhlCitjb21waWxlZCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpbnRvIGNvbWJpbmF0aW9ucyB3aXRoIG90aGVyIHByb2dyYW1zLAorYW5kIHRvIGRpc3RyaWJ1dGUgdGhvc2UgY29tYmluYXRpb25zIHdpdGhvdXQgYW55IHJlc3RyaWN0aW9uIGNvbWluZworZnJvbSB0aGUgdXNlIG9mIHRoaXMgZmlsZS4gIChUaGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByZXN0cmljdGlvbnMKK2RvIGFwcGx5IGluIG90aGVyIHJlc3BlY3RzOyBmb3IgZXhhbXBsZSwgdGhleSBjb3ZlciBtb2RpZmljYXRpb24gb2YKK3RoZSBmaWxlLCBhbmQgZGlzdHJpYnV0aW9uIHdoZW4gbm90IGxpbmtlZCBpbnRvIGEgY29tYmluZQorZXhlY3V0YWJsZS4pCisKK1RoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCishISBsaWJnY2Mgcm91dGluZXMgZm9yIHRoZSBSZW5lc2FzIC8gU3VwZXJIIFNIIENQVXMuCishISBDb250cmlidXRlZCBieSBTdGV2ZSBDaGFtYmVybGFpbi4KKyEhIHNhY0BjeWdudXMuY29tCisKKyEhIGFzaGlmdHJ0X3I0X3gsIF9fX2FzaHJzaTMsIF9fX2FzaGxzaTMsIF9fX2xzaHJzaTMgcm91dGluZXMKKyEhIHJlY29kZWQgaW4gYXNzZW1ibHkgYnkgVG9zaGl5YXN1IE1vcml0YQorISEgdG1AbmV0Y29tLmNvbQorCisvKiBTSDIgb3B0aW1pemF0aW9ucyBmb3IgX19fYXNocnNpMywgX19fYXNobHNpMywgX19fbHNocnNpMyBhbmQKKyAgIEVMRiBsb2NhbCBsYWJlbCBwcmVmaXhlcyBieSBKIm9ybiBSZW5uZWNrZQorICAgYW15bGFhckBjeWdudXMuY29tICAqLworCishCishIF9fYXNobHNpMworIQorISBFbnRyeToKKyEKKyEgcjQ6IFZhbHVlIHRvIHNoaWZ0CishIHI1OiBTaGlmdHMKKyEKKyEgRXhpdDoKKyEKKyEgcjA6IFJlc3VsdAorIQorISBEZXN0cm95czoKKyEKKyEgKG5vbmUpCishCisJLmdsb2JhbAlfX19hc2hsc2kzCisKKwkuYWxpZ24JMgorX19fYXNobHNpMzoKKwltb3YJIzMxLHIwCisJYW5kCXIwLHI1CisJbW92YQlhc2hsc2kzX3RhYmxlLHIwCisJbW92LmIJQChyMCxyNSkscjUKKyNpZmRlZiBfX3NoMV9fCisJYWRkCXI1LHIwCisJam1wCUByMAorI2Vsc2UKKwlicmFmCXI1CisjZW5kaWYKKwltb3YJcjQscjAKKworCS5hbGlnbgkyCithc2hsc2kzX3RhYmxlOgorCS5ieXRlCQlhc2hsc2kzXzAtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzEtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzItYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzMtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzQtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzUtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzYtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzctYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzgtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzktYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzEwLWFzaGxzaTNfdGFibGUKKwkuYnl0ZQkJYXNobHNpM18xMS1hc2hsc2kzX3RhYmxlCisJLmJ5dGUJCWFzaGxzaTNfMTItYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzEzLWFzaGxzaTNfdGFibGUKKwkuYnl0ZQkJYXNobHNpM18xNC1hc2hsc2kzX3RhYmxlCisJLmJ5dGUJCWFzaGxzaTNfMTUtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzE2LWFzaGxzaTNfdGFibGUKKwkuYnl0ZQkJYXNobHNpM18xNy1hc2hsc2kzX3RhYmxlCisJLmJ5dGUJCWFzaGxzaTNfMTgtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzE5LWFzaGxzaTNfdGFibGUKKwkuYnl0ZQkJYXNobHNpM18yMC1hc2hsc2kzX3RhYmxlCisJLmJ5dGUJCWFzaGxzaTNfMjEtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzIyLWFzaGxzaTNfdGFibGUKKwkuYnl0ZQkJYXNobHNpM18yMy1hc2hsc2kzX3RhYmxlCisJLmJ5dGUJCWFzaGxzaTNfMjQtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzI1LWFzaGxzaTNfdGFibGUKKwkuYnl0ZQkJYXNobHNpM18yNi1hc2hsc2kzX3RhYmxlCisJLmJ5dGUJCWFzaGxzaTNfMjctYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzI4LWFzaGxzaTNfdGFibGUKKwkuYnl0ZQkJYXNobHNpM18yOS1hc2hsc2kzX3RhYmxlCisJLmJ5dGUJCWFzaGxzaTNfMzAtYXNobHNpM190YWJsZQorCS5ieXRlCQlhc2hsc2kzXzMxLWFzaGxzaTNfdGFibGUKKworYXNobHNpM182OgorCXNobGwyCXIwCithc2hsc2kzXzQ6CisJc2hsbDIJcjAKK2FzaGxzaTNfMjoKKwlydHMKKwlzaGxsMglyMAorCithc2hsc2kzXzc6CisJc2hsbDIJcjAKK2FzaGxzaTNfNToKKwlzaGxsMglyMAorYXNobHNpM18zOgorCXNobGwyCXIwCithc2hsc2kzXzE6CisJcnRzCisJc2hsbAlyMAorCithc2hsc2kzXzE0OgorCXNobGwyCXIwCithc2hsc2kzXzEyOgorCXNobGwyCXIwCithc2hsc2kzXzEwOgorCXNobGwyCXIwCithc2hsc2kzXzg6CisJcnRzCisJc2hsbDgJcjAKKworYXNobHNpM18xNToKKwlzaGxsMglyMAorYXNobHNpM18xMzoKKwlzaGxsMglyMAorYXNobHNpM18xMToKKwlzaGxsMglyMAorYXNobHNpM185OgorCXNobGw4CXIwCisJcnRzCisJc2hsbAlyMAorCithc2hsc2kzXzIyOgorCXNobGwyCXIwCithc2hsc2kzXzIwOgorCXNobGwyCXIwCithc2hsc2kzXzE4OgorCXNobGwyCXIwCithc2hsc2kzXzE2OgorCXJ0cworCXNobGwxNglyMAorCithc2hsc2kzXzIzOgorCXNobGwyCXIwCithc2hsc2kzXzIxOgorCXNobGwyCXIwCithc2hsc2kzXzE5OgorCXNobGwyCXIwCithc2hsc2kzXzE3OgorCXNobGwxNglyMAorCXJ0cworCXNobGwJcjAKKworYXNobHNpM18zMDoKKwlzaGxsMglyMAorYXNobHNpM18yODoKKwlzaGxsMglyMAorYXNobHNpM18yNjoKKwlzaGxsMglyMAorYXNobHNpM18yNDoKKwlzaGxsMTYJcjAKKwlydHMKKwlzaGxsOAlyMAorCithc2hsc2kzXzMxOgorCXNobGwyCXIwCithc2hsc2kzXzI5OgorCXNobGwyCXIwCithc2hsc2kzXzI3OgorCXNobGwyCXIwCithc2hsc2kzXzI1OgorCXNobGwxNglyMAorCXNobGw4CXIwCisJcnRzCisJc2hsbAlyMAorCithc2hsc2kzXzA6CisJcnRzCisJbm9wCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvY2FtLmMgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvY2FtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwZTYxYwotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy9jYW0uYwpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIGNhcmw5MTcwIGZpcm13YXJlIC0gdXNlZCBieSB0aGUgYXI5MTcwIHdpcmVsZXNzIGRldmljZQorICoKKyAqIFNlY3VyaXR5IEVuZ2luZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodAkyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExCUNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgImNhcmw5MTcwLmgiCisjaW5jbHVkZSAiY2FtLmgiCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19TRUNVUklUWV9FTkdJTkUKK3N0YXRpYyB2b2lkIGRpc2FibGVfY2FtX3VzZXIoY29uc3QgdWludDE2X3QgdXNlcklkKQoreworCWlmICh1c2VySWQgPD0gMzEpCisJCWFuZGwoQVI5MTcwX01BQ19SRUdfQ0FNX1JPTExfQ0FMTF9UQkxfTCwgKH4oKHVpbnQzMl90KSAxIDw8IHVzZXJJZCkpKTsKKwllbHNlIGlmICh1c2VySWQgPD0gNjMpCisJCWFuZGwoQVI5MTcwX01BQ19SRUdfQ0FNX1JPTExfQ0FMTF9UQkxfSCwgKH4oKHVpbnQzMl90KSAxIDw8ICh1c2VySWQgLSAzMikpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9jYW1fdXNlcihjb25zdCB1aW50MTZfdCB1c2VySWQpCit7CisJaWYgKHVzZXJJZCA8PSAzMSkKKwkJb3JsKEFSOTE3MF9NQUNfUkVHX0NBTV9ST0xMX0NBTExfVEJMX0wsICgoKHVpbnQzMl90KSAxKSA8PCB1c2VySWQpKTsKKwllbHNlIGlmICh1c2VySWQgPD0gNjMpCisJCW9ybChBUjkxNzBfTUFDX1JFR19DQU1fUk9MTF9DQUxMX1RCTF9ILCAoKCh1aW50MzJfdCkgMSkgPDwgKHVzZXJJZCAtIDMyKSkpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9jYW1fcmVhZF9yZWFkeSh2b2lkKQoreworCXdoaWxlICgoZ2V0KEFSOTE3MF9NQUNfUkVHX0NBTV9TVEFURSkgJiBBUjkxNzBfTUFDX0NBTV9TVEFURV9SRUFEX1BFTkRJTkcpID09IDApIHsKKwkJLyoKKwkJICogd2FpdAorCQkgKi8KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2NhbV93cml0ZV9yZWFkeSh2b2lkKQoreworCXdoaWxlICgoZ2V0KEFSOTE3MF9NQUNfUkVHX0NBTV9TVEFURSkgJiBBUjkxNzBfTUFDX0NBTV9TVEFURV9XUklURV9QRU5ESU5HKSA9PSAwKSB7CisJCS8qCisJCSAqIHdhaXQgc29tZSBtb3JlCisJCSAqLworCX0KK30KKworc3RhdGljIHZvaWQgSFdfQ0FNX0F2YWlsKHZvaWQpCit7CisJdWludDMyX3QgdG1wVmFsdWU7CisKKwlkbyB7CisJCXRtcFZhbHVlID0gZ2V0KEFSOTE3MF9NQUNfUkVHX0NBTV9NT0RFKTsKKwl9IHdoaWxlICh0bXBWYWx1ZSAmIEFSOTE3MF9NQUNfQ0FNX0hPU1RfUEVORElORyk7Cit9CisKK3N0YXRpYyB2b2lkIEhXX0NBTV9Xcml0ZTEyOChjb25zdCB1aW50MzJfdCBhZGRyZXNzLCBjb25zdCB1aW50MzJfdCAqZGF0YSkKK3sKKwlIV19DQU1fQXZhaWwoKTsKKworCXNldChBUjkxNzBfTUFDX1JFR19DQU1fREFUQTAsIGRhdGFbMF0pOworCXNldChBUjkxNzBfTUFDX1JFR19DQU1fREFUQTEsIGRhdGFbMV0pOworCXNldChBUjkxNzBfTUFDX1JFR19DQU1fREFUQTIsIGRhdGFbMl0pOworCXNldChBUjkxNzBfTUFDX1JFR19DQU1fREFUQTMsIGRhdGFbM10pOworCisJc2V0KEFSOTE3MF9NQUNfUkVHX0NBTV9BRERSLCBhZGRyZXNzIHwgQVI5MTcwX01BQ19DQU1fQUREUl9XUklURSk7CisKKwl3YWl0X2Zvcl9jYW1fd3JpdGVfcmVhZHkoKTsKK30KKworc3RhdGljIHZvaWQgSFdfQ0FNX1JlYWQxMjgoY29uc3QgdWludDMyX3QgYWRkcmVzcywgdWludDMyX3QgKmRhdGEpCit7CisKKwlIV19DQU1fQXZhaWwoKTsKKwlzZXQoQVI5MTcwX01BQ19SRUdfQ0FNX0FERFIsIGFkZHJlc3MpOworCisJd2FpdF9mb3JfY2FtX3JlYWRfcmVhZHkoKTsKKwlIV19DQU1fQXZhaWwoKTsKKwlkYXRhWzBdID0gZ2V0KEFSOTE3MF9NQUNfUkVHX0NBTV9EQVRBMCk7CisJZGF0YVsxXSA9IGdldChBUjkxNzBfTUFDX1JFR19DQU1fREFUQTEpOworCWRhdGFbMl0gPSBnZXQoQVI5MTcwX01BQ19SRUdfQ0FNX0RBVEEyKTsKKwlkYXRhWzNdID0gZ2V0KEFSOTE3MF9NQUNfUkVHX0NBTV9EQVRBMyk7Cit9CisKK3ZvaWQgc2V0X2tleShjb25zdCBzdHJ1Y3QgY2FybDkxNzBfc2V0X2tleV9jbWQgKmtleSkKK3sKKwl1aW50MzJfdCBkYXRhWzRdOworCXVpbnQxNl90IHJvdywgd29yZElkLCBuaWJibGVJZCwgaTsKKworCWlmIChrZXktPnVzZXIgPiAoQVI5MTcwX0NBTV9NQVhfVVNFUiArIDMpKQorCQlyZXR1cm4gOworCisJaWYgKGtleS0+a2V5SWQgPiAxKQorCQlyZXR1cm4gOworCisJLyogRGlzYWJsZSBLZXkgKi8KKwlkaXNhYmxlX2NhbV91c2VyKGtleS0+dXNlcik7CisKKwkvKiBTZXQgZW5jcnlwdCB0eXBlICovCisJaWYgKGtleS0+dXNlciA+PSBBUjkxNzBfQ0FNX01BWF9VU0VSKSB7CisJCS8qIGRlZmF1bHQgKi8KKwkJcm93ID0gREVGQVVMVF9FTkNSWV9UWVBFOworCQl3b3JkSWQgPSAwOworCQluaWJibGVJZCA9IChrZXktPnVzZXIgLSBBUjkxNzBfQ0FNX01BWF9VU0VSKSAmIDB4NzsKKwl9IGVsc2UgeworCQlyb3cgPSBFTkNSWV9UWVBFX1NUQVJUX0FERFIgKyAoa2V5LT51c2VyID4+IDUpOworCQl3b3JkSWQgPSAoa2V5LT51c2VyID4+IDMpICYgMHgzOworCQluaWJibGVJZCA9IGtleS0+dXNlciAmIDB4NzsKKwl9CisKKwlIV19DQU1fUmVhZDEyOChyb3csIGRhdGEpOworCWRhdGFbd29yZElkXSAmPSAofigweGYgPDwgKCh1aW50MzJfdCkgbmliYmxlSWQgKiA0KSkpOworCWRhdGFbd29yZElkXSB8PSAoa2V5LT50eXBlIDw8ICgodWludDMyX3QpIG5pYmJsZUlkICogNCkpOworCUhXX0NBTV9Xcml0ZTEyOChyb3csIGRhdGEpOworCisJLyogU2V0IE1BQyBhZGRyZXNzICovCisJaWYgKGtleS0+dXNlciA8IEFSOTE3MF9DQU1fTUFYX1VTRVIpIHsKKwkJdWludDE2X3QgYnl0ZUlkOworCQl3b3JkSWQgPSAoa2V5LT51c2VyID4+IDIpICYgMHgzOworCQlieXRlSWQgPSBrZXktPnVzZXIgJiAweDM7CisJCXJvdyA9IChrZXktPnVzZXIgPj4gNCkgKiA2OworCisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJCUhXX0NBTV9SZWFkMTI4KHJvdyArIGksIGRhdGEpOworCQkJZGF0YVt3b3JkSWRdICY9ICh+KDB4ZmYgPDwgKCh1aW50MzJfdCkgYnl0ZUlkICogOCkpKTsKKwkJCWRhdGFbd29yZElkXSB8PSAoa2V5LT5tYWNBZGRyW2ldIDw8ICgodWludDMyX3QpIGJ5dGVJZCAqIDgpKTsKKwkJCUhXX0NBTV9Xcml0ZTEyOChyb3cgKyBpLCBkYXRhKTsKKwkJfQorCX0KKworCS8qIFNldCBrZXkgKi8KKwlyb3cgPSBLRVlfU1RBUlRfQUREUiArIChrZXktPnVzZXIgKiAyKSArIGtleS0+a2V5SWQ7CisKKwlIV19DQU1fV3JpdGUxMjgocm93LCBrZXktPmtleSk7CisKKwkvKiBFbmFibGUgS2V5ICovCisJZW5hYmxlX2NhbV91c2VyKGtleS0+dXNlcik7Cit9CisKK3ZvaWQgZGlzYWJsZV9rZXkoY29uc3Qgc3RydWN0IGNhcmw5MTcwX2Rpc2FibGVfa2V5X2NtZCAqa2V5KQoreworCWRpc2FibGVfY2FtX3VzZXIoa2V5LT51c2VyKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1NFQ1VSSVRZX0VOR0lORSAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvc3JjL2NtZC5jIGIvY2FybDkxNzBmdy9jYXJsZncvc3JjL2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzODIwODMKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvY21kLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBDb2RlIHRvIGhhbmRsZSBjb21tYW5kcyBmcm9tIHRoZSBob3N0IGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQJMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDktMjAxMQlDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlICJjYXJsOTE3MC5oIgorI2luY2x1ZGUgImlvLmgiCisjaW5jbHVkZSAiY2FtLmgiCisjaW5jbHVkZSAicmYuaCIKKyNpbmNsdWRlICJwcmludGYuaCIKKyNpbmNsdWRlICJ0aW1lci5oIgorI2luY2x1ZGUgIndsLmgiCisjaW5jbHVkZSAid29sLmgiCisKK3ZvaWQgaGFuZGxlX2NtZChzdHJ1Y3QgY2FybDkxNzBfcnNwICpyZXNwKQoreworCXN0cnVjdCBjYXJsOTE3MF9jbWQgKmNtZCA9ICZkbWFfbWVtLnJlc2VydmVkLmNtZC5jbWQ7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBjb3BpZXMgY21kLCBsZW4gYW5kIGV4dHJhIGZpZWxkcyAqLworCXJlc3AtPmhkci5sZW4gPSBjbWQtPmhkci5sZW47CisJcmVzcC0+aGRyLmNtZCA9IGNtZC0+aGRyLmNtZDsKKwlyZXNwLT5oZHIuZXh0ID0gY21kLT5oZHIuZXh0OworCXJlc3AtPmhkci5zZXEgfD0gY21kLT5oZHIuc2VxOworCisJc3dpdGNoIChjbWQtPmhkci5jbWQgJiB+Q0FSTDkxNzBfQ01EX0FTWU5DX0ZMQUcpIHsKKwljYXNlIENBUkw5MTcwX0NNRF9SUkVHOgorCQlmb3IgKGkgPSAwOyBpIDwgKGNtZC0+aGRyLmxlbiAvIDQpOyBpKyspCisJCQlyZXNwLT5ycmVnX3Jlcy52YWxzW2ldID0gZ2V0KGNtZC0+cnJlZy5yZWdzW2ldKTsKKwkJYnJlYWs7CisKKwljYXNlIENBUkw5MTcwX0NNRF9XUkVHOgorCQlyZXNwLT5oZHIubGVuID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IChjbWQtPmhkci5sZW4gLyA4KTsgaSsrKQorCQkJc2V0KGNtZC0+d3JlZy5yZWdzW2ldLmFkZHIsIGNtZC0+d3JlZy5yZWdzW2ldLnZhbCk7CisJCWJyZWFrOworCisJY2FzZSBDQVJMOTE3MF9DTURfRUNITzoKKwkJbWVtY3B5KHJlc3AtPmVjaG8udmFscywgY21kLT5lY2hvLnZhbHMsIGNtZC0+aGRyLmxlbik7CisJCWJyZWFrOworCisJY2FzZSBDQVJMOTE3MF9DTURfU1dSU1Q6CisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfRldfTUFDX1JFU0VUCisJCS8qCisJCSAqIENvbW1hbmQgaGFzIG5vIHBheWxvYWQsIHNvIHRoZSByZXNwb25zZQorCQkgKiBoYXMgbm8gcGF5bG9hZCBlaXRoZXIuCisJCSAqIHJlc3AtPmhkci5sZW4gPSAwOworCQkgKi8KKwkJZncud2xhbi5tYWNfcmVzZXQgPSBDQVJMOTE3MF9NQUNfUkVTRVRfRk9SQ0U7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfRldfTUFDX1JFU0VUICovCisJCWJyZWFrOworCisJY2FzZSBDQVJMOTE3MF9DTURfUkVCT09UOgorCQkvKgorCQkgKiByZXNwLT5sZW4gPSAwOworCQkgKi8KKwkJZncucmVib290ID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIENBUkw5MTcwX0NNRF9SRUFEX1RTRjoKKwkJcmVzcC0+aGRyLmxlbiA9IDg7CisJCXJlYWRfdHNmKCh1aW50MzJfdCAqKXJlc3AtPnRzZi50c2YpOworCQlicmVhazsKKworCWNhc2UgQ0FSTDkxNzBfQ01EX1JYX0ZJTFRFUjoKKwkJcmVzcC0+aGRyLmxlbiA9IDA7CisJCWZ3LndsYW4ucnhfZmlsdGVyID0gY21kLT5yeF9maWx0ZXIucnhfZmlsdGVyOworCQlicmVhazsKKworCWNhc2UgQ0FSTDkxNzBfQ01EX1dPTDoKKwkJd29sX2NtZCgmY21kLT53b2wpOworCQlicmVhazsKKworCWNhc2UgQ0FSTDkxNzBfQ01EX1RBTExZOgorCQlyZXNwLT5oZHIubGVuID0gc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF90YWxseV9yc3ApOworCQltZW1jcHkoJnJlc3AtPnRhbGx5LCAmZncudGFsbHksIHNpemVvZihzdHJ1Y3QgY2FybDkxNzBfdGFsbHlfcnNwKSk7CisJCXJlc3AtPnRhbGx5LnRpY2sgPSBmdy50aWNrc19wZXJfdXNlYzsKKwkJbWVtc2V0KCZmdy50YWxseSwgMCwgc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF90YWxseV9yc3ApKTsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19DQUJfUVVFVUUKKwljYXNlIENBUkw5MTcwX0NNRF9CQ05fQ1RSTDoKKwkJcmVzcC0+aGRyLmxlbiA9IDA7CisKKwkJaWYgKGNtZC0+YmNuX2N0cmwubW9kZSAmIENBUkw5MTcwX0JDTl9DVFJMX0NBQl9UUklHR0VSKSB7CisJCQl3bGFuX21vZGlmeV9iZWFjb24oY21kLT5iY25fY3RybC52aWZfaWQsCisJCQkJY21kLT5iY25fY3RybC5iY25fYWRkciwgY21kLT5iY25fY3RybC5iY25fbGVuKTsKKwkJCXNldChBUjkxNzBfTUFDX1JFR19CQ05fQUREUiwgY21kLT5iY25fY3RybC5iY25fYWRkcik7CisJCQlzZXQoQVI5MTcwX01BQ19SRUdfQkNOX0xFTkdUSCwgY21kLT5iY25fY3RybC5iY25fbGVuKTsKKwkJCXNldChBUjkxNzBfTUFDX1JFR19CQ05fQ1RSTCwgQVI5MTcwX0JDTl9DVFJMX1JFQURZKTsKKwkJfSBlbHNlIHsKKwkJCXdsYW5fY2FiX2ZsdXNoX3F1ZXVlKGNtZC0+YmNuX2N0cmwudmlmX2lkKTsKKwkJCWZ3LndsYW4uY2FiX2ZsdXNoX3RyaWdnZXJbY21kLT5iY25fY3RybC52aWZfaWRdID0gQ0FSTDkxNzBfQ0FCX1RSSUdHRVJfRU1QVFk7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfQ0FCX1FVRVVFICovCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19TRUNVUklUWV9FTkdJTkUKKwljYXNlIENBUkw5MTcwX0NNRF9FS0VZOgorCQlyZXNwLT5oZHIubGVuID0gMDsKKwkJc2V0X2tleSgmY21kLT5zZXRrZXkpOworCQlicmVhazsKKworCWNhc2UgQ0FSTDkxNzBfQ01EX0RLRVk6CisJCXJlc3AtPmhkci5sZW4gPSAwOworCQlkaXNhYmxlX2tleSgmY21kLT5kaXNhYmxla2V5KTsKKwkJYnJlYWs7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfU0VDVVJJVFlfRU5HSU5FICovCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19SQURJT19GVU5DVElPTlMKKwljYXNlIENBUkw5MTcwX0NNRF9GUkVRVUVOQ1k6CisJY2FzZSBDQVJMOTE3MF9DTURfUkZfSU5JVDoKKwkJcmZfY21kKGNtZCwgcmVzcCk7CisJCWJyZWFrOworCisJY2FzZSBDQVJMOTE3MF9DTURfRlJFUV9TVEFSVDoKKwkJLyoKKwkJICogcmVzcC0+aGRyLmxlbiA9IDA7CisJCSAqLworCQlyZl9ub3RpZnlfc2V0X2NoYW5uZWwoKTsKKwkJYnJlYWs7CisKKwljYXNlIENBUkw5MTcwX0NNRF9QU006CisJCXJlc3AtPmhkci5sZW4gPSAwOworCQlmdy5waHkucHNtLnN0YXRlID0gbGUzMl90b19jcHUoY21kLT5wc20uc3RhdGUpOworCQlyZl9wc20oKTsKKwkJYnJlYWs7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfUkFESU9fRlVOQ1RJT05TICovCisKKwlkZWZhdWx0OgorCQlCVUcoIlVua25vd24gY29tbWFuZCAleFxuIiwgY21kLT5oZHIuY21kKTsKKwkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvc3JjL2RtYS5jIGIvY2FybDkxNzBmdy9jYXJsZncvc3JjL2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliODNmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvZG1hLmMKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBETUEgZGVzY3JpcHRvciBoYW5kbGluZyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQJMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDktMjAxMQlDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlICJjYXJsOTE3MC5oIgorI2luY2x1ZGUgIndsLmgiCisjaW5jbHVkZSAicHJpbnRmLmgiCisKK3N0cnVjdCBhcjkxNzBfZG1hX21lbW9yeSBkbWFfbWVtIF9fc2VjdGlvbihzcmFtKTsKKworc3RhdGljIHZvaWQgY29weV9kbWFfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKmRzdCwKKwkJCSAgc3RydWN0IGRtYV9kZXNjICpzcmMpCit7CisJbWVtY3B5KGRzdCwgc3JjLCBzaXplb2Yoc3RydWN0IGRtYV9kZXNjKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2Rlc2NyaXB0b3Ioc3RydWN0IGRtYV9kZXNjICpkKQoreworCWQtPnN0YXR1cyA9IEFSOTE3MF9PV05fQklUU19TVzsKKwlkLT5jdHJsID0gMDsKKwlkLT5kYXRhU2l6ZSA9IDA7CisJZC0+dG90YWxMZW4gPSAwOworCWQtPmxhc3RBZGRyID0gZDsKKwlkLT5kYXRhQWRkciA9IE5VTEw7CisJZC0+bmV4dEFkZHIgPSBkOworfQorCitzdGF0aWMgdm9pZCBmaWxsX2Rlc2NyaXB0b3Ioc3RydWN0IGRtYV9kZXNjICpkLCB1aW50MTZfdCBzaXplLCB1aW50OF90ICpkYXRhKQoreworCWQtPnN0YXR1cyA9IEFSOTE3MF9PV05fQklUU19TVzsKKwlkLT5jdHJsID0gMDsKKwlkLT5kYXRhU2l6ZSA9IHNpemU7CisJZC0+dG90YWxMZW4gPSAwOworCWQtPmxhc3RBZGRyID0gZDsKKwlkLT5kYXRhQWRkciA9IGRhdGE7CisJZC0+bmV4dEFkZHIgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpbml0X3F1ZXVlKHN0cnVjdCBkbWFfcXVldWUgKnEsIHN0cnVjdCBkbWFfZGVzYyAqZCkKK3sKKwlxLT5oZWFkID0gcS0+dGVybWluYXRvciA9IGQ7Cit9CisKKy8qCisgKiAgLSBJbml0IHVwX3F1ZXVlLCBkb3duX3F1ZXVlLCB0eF9xdWV1ZVs1XSwgcnhfcXVldWUuCisgKiAgLSBTZXR1cCBkZXNjcmlwdG9ycyBhbmQgZGF0YSBidWZmZXIgYWRkcmVzcy4KKyAqICAtIFJpbmcgZGVzY3JpcHRvcnMgcnhfcXVldWUgYW5kIGRvd25fcXVldWUgYnkgZG1hX3JlY2xhaW0oKS4KKyAqCisgKiBOT1RFOiBMYXN0QWRkciB0ZW1wYXJ5IHBvaW50IChzYW1lKSB0byBuZXh0QWRkciBhZnRlciBpbml0aWFsaXplLgorICoJIEJlY2F1c2UgTGFzdEFkZHIgaXMgZG9uJ3QgY2FyZSBpbiBmdW5jdGlvbiBkbWFfcmVjbGFpbSgpLgorICovCit2b2lkIGRtYV9pbml0X2Rlc2NyaXB0b3JzKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkbWFfbWVtLnRlcm1pbmF0b3IpOyBpKyspCisJCWNsZWFyX2Rlc2NyaXB0b3IoJmRtYV9tZW0udGVybWluYXRvcltpXSk7CisKKwkvKiBBc3NpZ24gdGVybWluYXRvcnMgdG8gRE1BIHF1ZXVlcyAqLworCWkgPSAwOworCWluaXRfcXVldWUoJmZ3LnB0YS51cF9xdWV1ZSwgJmRtYV9tZW0udGVybWluYXRvcltpKytdKTsKKwlpbml0X3F1ZXVlKCZmdy5wdGEuZG93bl9xdWV1ZSwgJmRtYV9tZW0udGVybWluYXRvcltpKytdKTsKKwlmb3IgKGogPSAwOyBqIDwgX19BUjkxNzBfTlVNX1RYX1FVRVVFUzsgaisrKQorCQlpbml0X3F1ZXVlKCZmdy53bGFuLnR4X3F1ZXVlW2pdLCAmZG1hX21lbS50ZXJtaW5hdG9yW2krK10pOworCWluaXRfcXVldWUoJmZ3LndsYW4udHhfcmV0cnksICZkbWFfbWVtLnRlcm1pbmF0b3JbaSsrXSk7CisJaW5pdF9xdWV1ZSgmZncud2xhbi5yeF9xdWV1ZSwgJmRtYV9tZW0udGVybWluYXRvcltpKytdKTsKKwlmdy51c2IuaW50X2Rlc2MgPSAmZG1hX21lbS50ZXJtaW5hdG9yW2krK107CisJZncud2xhbi5md19kZXNjID0gJmRtYV9tZW0udGVybWluYXRvcltpKytdOworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfQ0FCX1FVRVVFCisJZm9yIChqID0gMDsgaiA8IENBUkw5MTcwX0lOVEZfTlVNOyBqKyspCisJCWluaXRfcXVldWUoJmZ3LndsYW4uY2FiX3F1ZXVlW2pdLCAmZG1hX21lbS50ZXJtaW5hdG9yW2krK10pOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0NBQl9RVUVVRSAqLworCisJQlVHX09OKEFSOTE3MF9URVJNSU5BVE9SX05VTUJFUiAhPSBpKTsKKworCURCRygiQmxvY2tzOiVkIFt0eDolZCwgcng6JWRdIFRlcm1pbmF0b3JzOiVkLyVkXG4iLAorCSAgICBBUjkxNzBfQkxPQ0tfTlVNQkVSLCBBUjkxNzBfVFhfQkxPQ0tfTlVNQkVSLAorCSAgICBBUjkxNzBfUlhfQkxPQ0tfTlVNQkVSLCBBUjkxNzBfVEVSTUlOQVRPUl9OVU1CRVIsIGkpOworCisJLyogSW5pdCBkZXNjcmlwdG9ycyBhbmQgbWVtb3J5IGJsb2NrcyAqLworCWZvciAoaSA9IDA7IGkgPCBBUjkxNzBfQkxPQ0tfTlVNQkVSOyBpKyspIHsKKwkJZmlsbF9kZXNjcmlwdG9yKCZkbWFfbWVtLmJsb2NrW2ldLCBBUjkxNzBfQkxPQ0tfU0laRSwgZG1hX21lbS5kYXRhW2ldLmRhdGEpOworCisJCWlmIChpIDwgQVI5MTcwX1RYX0JMT0NLX05VTUJFUikKKwkJCWRtYV9yZWNsYWltKCZmdy5wdGEuZG93bl9xdWV1ZSwgJmRtYV9tZW0uYmxvY2tbaV0pOworCQllbHNlCisJCQlkbWFfcmVjbGFpbSgmZncud2xhbi5yeF9xdWV1ZSwgJmRtYV9tZW0uYmxvY2tbaV0pOworCX0KKworCS8qIFNldCBETUEgYWRkcmVzcyByZWdpc3RlcnMgKi8KKwlzZXQoQVI5MTcwX1BUQV9SRUdfRE5fRE1BX0FERFJILCAodWludDMyX3QpIGZ3LnB0YS5kb3duX3F1ZXVlLmhlYWQgPj4gMTYpOworCXNldChBUjkxNzBfUFRBX1JFR19ETl9ETUFfQUREUkwsICh1aW50MzJfdCkgZncucHRhLmRvd25fcXVldWUuaGVhZCAmIDB4ZmZmZik7CisJc2V0KEFSOTE3MF9QVEFfUkVHX1VQX0RNQV9BRERSSCwgKHVpbnQzMl90KSBmdy5wdGEudXBfcXVldWUuaGVhZCA+PiAxNik7CisJc2V0KEFSOTE3MF9QVEFfUkVHX1VQX0RNQV9BRERSTCwgKHVpbnQzMl90KSBmdy5wdGEudXBfcXVldWUuaGVhZCAmIDB4ZmZmZik7CisKKwlmb3IgKGkgPSAwOyBpIDwgX19BUjkxNzBfTlVNX1RYX1FVRVVFUzsgaSsrKQorCQlzZXRfd2xhbl90eHFfZG1hX2FkZHIoaSwgKHVpbnQzMl90KSBmdy53bGFuLnR4X3F1ZXVlW2ldLmhlYWQpOworCisJc2V0KEFSOTE3MF9NQUNfUkVHX0RNQV9SWFFfQUREUiwgKHVpbnQzMl90KSBmdy53bGFuLnJ4X3F1ZXVlLmhlYWQpOworCWZ3LnVzYi5pbnRfZGVzYy0+ZGF0YVNpemUgPSBBUjkxNzBfQkxPQ0tfU0laRTsKKwlmdy51c2IuaW50X2Rlc2MtPmRhdGFBZGRyID0gKHZvaWQgKikgJmRtYV9tZW0ucmVzZXJ2ZWQucnNwOworCisJbWVtc2V0KERFU0NfUEFZTE9BRChmdy51c2IuaW50X2Rlc2MpLCAweGZmLAorCSAgICAgICBBUjkxNzBfSU5UX01BR0lDX0hFQURFUl9TSVpFKTsKKwltZW1zZXQoREVTQ19QQVlMT0FEX09GRihmdy51c2IuaW50X2Rlc2MsIEFSOTE3MF9JTlRfTUFHSUNfSEVBREVSX1NJWkUpLAorCSAgICAgICAwLCBBUjkxNzBfQkxPQ0tfU0laRSAtIEFSOTE3MF9JTlRfTUFHSUNfSEVBREVSX1NJWkUpOworCisJLyogcnNwIGlzIG5vdyBhdmFpbGFibGUgZm9yIHVzZSAqLworCWZ3LnVzYi5pbnRfZGVzY19hdmFpbGFibGUgPSAxOworCisJbWVtc2V0KERFU0NfUEFZTE9BRChmdy53bGFuLmZ3X2Rlc2MpLCAwLCAxMjgpOworCWZ3LndsYW4uZndfZGVzY19hdmFpbGFibGUgPSAxOworfQorCisvKgorICogRnJlZSBkZXNjcmlwdG9yLgorICoKKyAqIEV4Y2hhbmdlIHRoZSB0ZXJtaW5hdG9yIGFuZCB0aGUgZmlyc3QgZGVzY3JpcHRvciBvZiB0aGUgcGFja2V0CisgKiBmb3IgaGFyZHdhcmUgYXNjeS4uLgorICovCit2b2lkIGRtYV9yZWNsYWltKHN0cnVjdCBkbWFfcXVldWUgKnEsIHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgZG1hX2Rlc2MgKnRtcERlc2MsICpsYXN0OworCXN0cnVjdCBkbWFfZGVzYyB0ZGVzYzsKKworCS8qIDEuIFNldCBPV04gYml0IHRvIEhXIGZvciBhbGwgVERzIHRvIGJlIGFkZGVkLCBjbGVhciBjdHJsIGFuZCBzaXplICovCisJdG1wRGVzYyA9IGRlc2M7CisJbGFzdCA9IGRlc2MtPmxhc3RBZGRyOworCisJd2hpbGUgKDEpIHsKKwkJdG1wRGVzYy0+c3RhdHVzID0gQVI5MTcwX09XTl9CSVRTX0hXOworCQl0bXBEZXNjLT5jdHJsID0gMDsKKwkJdG1wRGVzYy0+dG90YWxMZW4gPSAwOworCQl0bXBEZXNjLT5kYXRhU2l6ZSA9IEFSOTE3MF9CTE9DS19TSVpFOworCisJCS8qIFRPRE8gOiBFeGNlcHRpb24gaGFuZGxlICovCisKKwkJdG1wRGVzYy0+bGFzdEFkZHIgPSB0bXBEZXNjOworCisJCWlmICh0bXBEZXNjID09IGxhc3QpCisJCQlicmVhazsKKworCQl0bXBEZXNjID0gdG1wRGVzYy0+bmV4dEFkZHI7CisJfQorCisJLyogMi4gTmV4dCBhZGRyZXNzIG9mIExhc3QgVEQgdG8gYmUgYWRkZWQgPSBmaXJzdCBURCAqLworCXRtcERlc2MtPm5leHRBZGRyID0gZGVzYzsKKworCS8qIExpbmsgZmlyc3QgVEQgdG8gc2VsZiAqLworCWRlc2MtPmxhc3RBZGRyID0gcS0+dGVybWluYXRvcjsKKworCS8qIDMuIENvcHkgZmlyc3QgVEQgdG8gYmUgYWRkZWQgdG8gVFREICovCisJY29weV9kbWFfZGVzYygmdGRlc2MsIGRlc2MpOworCisJLyogNC4gSW5pdGlhbGl6ZSBuZXcgdGVybWluYXRvciAqLworCWNsZWFyX2Rlc2NyaXB0b3IoZGVzYyk7CisKKwkvKiA1LiBDb3B5IFRURCB0byBsYXN0IFREICovCisJdGRlc2Muc3RhdHVzID0gMDsKKwljb3B5X2RtYV9kZXNjKCh2b2lkICopcS0+dGVybWluYXRvciwgKHZvaWQgKikmdGRlc2MpOworCXEtPnRlcm1pbmF0b3ItPnN0YXR1cyB8PSBBUjkxNzBfT1dOX0JJVFNfSFc7CisKKwkvKiBVcGRhdGUgdGVybWluYXRvciBwb2ludGVyICovCisJcS0+dGVybWluYXRvciA9IGRlc2M7Cit9CisKKy8qCisgKiBQdXQgYSBjb21wbGV0ZSBwYWNrZXQgaW50byB0aGUgdGFpbCBvZiB0aGUgUXVldWUgcS4KKyAqIEV4Y2hhbmdlIHRoZSB0ZXJtaW5hdG9yIGFuZCB0aGUgZmlyc3QgZGVzY3JpcHRvciBvZiB0aGUgcGFja2V0CisgKiBmb3IgaGFyZHdhcmUgYXNjeS4uLgorICovCit2b2lkIGRtYV9wdXQoc3RydWN0IGRtYV9xdWV1ZSAqcSwgc3RydWN0IGRtYV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBkbWFfZGVzYyAqdG1wRGVzYzsKKwlzdHJ1Y3QgZG1hX2Rlc2MgdGRlc2M7CisKKwl0bXBEZXNjID0gZGVzYzsKKworCXdoaWxlICgxKSB7CisJCS8qIHVwZGF0ZSB0b3RhbExlbiAqLworCQl0bXBEZXNjLT50b3RhbExlbiA9IGRlc2MtPnRvdGFsTGVuOworCisJCS8qIDEuIFNldCBPV04gYml0IHRvIEhXIGZvciBhbGwgVERzIHRvIGJlIGFkZGVkICovCisJCXRtcERlc2MtPnN0YXR1cyA9IEFSOTE3MF9PV05fQklUU19IVzsKKwkJLyogVE9ETyA6IEV4Y2VwdGlvbiBoYW5kbGUgKi8KKworCQl0bXBEZXNjLT5sYXN0QWRkciA9IGRlc2MtPmxhc3RBZGRyOworCisJCWlmIChkZXNjLT5sYXN0QWRkciA9PSB0bXBEZXNjKQorCQkJYnJlYWs7CisKKwkJdG1wRGVzYyA9IHRtcERlc2MtPm5leHRBZGRyOworCX0KKworCS8qIDIuIE5leHQgYWRkcmVzcyBvZiBMYXN0IFREIHRvIGJlIGFkZGVkID0gZmlyc3QgVEQgKi8KKwlkZXNjLT5sYXN0QWRkci0+bmV4dEFkZHIgPSBkZXNjOworCisJLyogSWYgdGhlcmUgaXMgb25seSBvbmUgZGVzY3JpcHRvciwgdXBkYXRlIHBvaW50ZXIgb2YgbGFzdCBkZXNjcmlwdG9yICovCisJaWYgKGRlc2MtPmxhc3RBZGRyID09IGRlc2MpCisJCWRlc2MtPmxhc3RBZGRyID0gcS0+dGVybWluYXRvcjsKKworCS8qIDMuIENvcHkgZmlyc3QgVEQgdG8gYmUgYWRkZWQgdG8gVFREICovCisJY29weV9kbWFfZGVzYygmdGRlc2MsIGRlc2MpOworCisJLyogNC4gSW5pdGlhbGl6ZSBuZXcgdGVybWluYXRvciAqLworCWNsZWFyX2Rlc2NyaXB0b3IoZGVzYyk7CisKKwkvKiA1LiBDb3B5IFRURCB0byBsYXN0IFREICovCisJdGRlc2Muc3RhdHVzICY9ICh+QVI5MTcwX09XTl9CSVRTKTsKKwljb3B5X2RtYV9kZXNjKCh2b2lkICopcS0+dGVybWluYXRvciwgKHZvaWQgKikmdGRlc2MpOworCXEtPnRlcm1pbmF0b3ItPnN0YXR1cyB8PSBBUjkxNzBfT1dOX0JJVFNfSFc7CisKKwkvKiBVcGRhdGUgdGVybWluYXRvciBwb2ludGVyICovCisJcS0+dGVybWluYXRvciA9IGRlc2M7Cit9CisKK3N0cnVjdCBkbWFfZGVzYyAqZG1hX3VubGlua19oZWFkKHN0cnVjdCBkbWFfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBkbWFfZGVzYyAqZGVzYzsKKworCWlmIChxdWV1ZV9lbXB0eShxdWV1ZSkpCisJCXJldHVybiBOVUxMOworCisJZGVzYyA9IHF1ZXVlLT5oZWFkOworCisJcXVldWUtPmhlYWQgPSBkZXNjLT5sYXN0QWRkci0+bmV4dEFkZHI7CisKKwkvKiBwb2lzb24gbmV4dEFkZHIgYWRkcmVzcyAqLworCWRlc2MtPmxhc3RBZGRyLT5uZXh0QWRkciA9IGRlc2MtPmxhc3RBZGRyOworCWRlc2MtPmxhc3RBZGRyLT5sYXN0QWRkciA9IGRlc2MtPmxhc3RBZGRyOworCisJcmV0dXJuIGRlc2M7Cit9CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvZncuYyBiL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy9mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZGU2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvZncuYwpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIGNhcmw5MTcwIGZpcm13YXJlIC0gdXNlZCBieSB0aGUgYXI5MTcwIHdpcmVsZXNzIGRldmljZQorICoKKyAqIEZpcm13YXJlIGRlc2NyaXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKyNpbmNsdWRlICJjYXJsOTE3MC5oIgorI2luY2x1ZGUgImZ3ZHNjLmgiCisKKyNkZWZpbmUgRklMTChzbWFsbCwgYmlnLCBtb3JlLi4uKQkJCQkJXAorCS5zbWFsbCA9IHsJCQkJCQkJXAorCQlDQVJMOTE3MEZXX0ZJTExfREVTQyhiaWcjI19NQUdJQywJCQlcCisJCQlzaXplb2Yoc3RydWN0IGNhcmw5MTcwZndfIyMgc21hbGwjI19kZXNjKSwJXAorCQkJQ0FSTDkxNzBGV18jIyBiaWcjI19ERVNDX01JTl9WRVIsCQlcCisJCQlDQVJMOTE3MEZXXyMjIGJpZyMjX0RFU0NfQ1VSX1ZFUiksCQlcCisJCW1vcmUJCQkJCQkJXAorCX0KKworY29uc3Qgc3RydWN0IGNhcmw5MTcwX2Zpcm13YXJlX2Rlc2NyaXB0b3IgX19zZWN0aW9uKGZ3ZHNjKSBjYXJsOTE3MGZ3X2Rlc2MgPSB7CisJRklMTChvdHVzLCBPVFVTLAorCSAgICAgLmZlYXR1cmVfc2V0ID0gY3B1X3RvX2xlMzIoQklUKENBUkw5MTcwRldfRFVNTVlfRkVBVFVSRSkgfAorCQkJCQlCSVQoQ0FSTDkxNzBGV19VU0JfUkVTUF9FUDIpIHwKKwkJCQkJQklUKENBUkw5MTcwRldfSEFORExFX0JBQ0tfUkVRKSB8CisJCQkJCUJJVChDQVJMOTE3MEZXX1JYX0ZJTFRFUikgfAorCQkJCQlCSVQoQ0FSTDkxNzBGV19IV19DT1VOVEVSUykgfAorCQkJCQlCSVQoQ0FSTDkxNzBGV19SWF9CQV9GSUxURVIpIHwKKwkJCQkJQklUKENBUkw5MTcwRldfVVNCX0lOSVRfRklSTVdBUkUpIHwKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19VU0JfVVBfU1RSRUFNCisJCQkJCUJJVChDQVJMOTE3MEZXX1VTQl9VUF9TVFJFQU0pIHwKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19VU0JfVVBfU1RSRUFNICovCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfVVNCX0RPV05fU1RSRUFNCisJCQkJCUJJVChDQVJMOTE3MEZXX1VTQl9ET1dOX1NUUkVBTSkgfAorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1VTQl9ET1dOX1NUUkVBTSAqLworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1JBRElPX0ZVTkNUSU9OUworCQkJCQlCSVQoQ0FSTDkxNzBGV19DT01NQU5EX1BIWSkgfAorCQkJCQlCSVQoQ0FSTDkxNzBGV19QU00pIHwKKwkJCQkJQklUKENBUkw5MTcwRldfRklYRURfNUdIWl9QU00pIHwKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19SQURJT19GVU5DVElPTlMgKi8KKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19TRUNVUklUWV9FTkdJTkUKKwkJCQkJQklUKENBUkw5MTcwRldfQ09NTUFORF9DQU0pIHwKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19TRUNVUklUWV9FTkdJTkUgKi8KKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19DQUJfUVVFVUUKKwkJCQkJQklUKENBUkw5MTcwRldfV0xBTlRYX0NBQikgfAorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0NBQl9RVUVVRSAqLworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1VOVVNBQkxFCisJCQkJCUJJVChDQVJMOTE3MEZXX1VOVVNBQkxFKSB8CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfVU5VU0FCTEUgKi8KKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19HUElPX0lOVEVSUlVQVAorCQkJCQlCSVQoQ0FSTDkxNzBGV19HUElPX0lOVEVSUlVQVCkgfAorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0dQSU9fSU5URVJSVVBUICovCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfV09MCisJCQkJCUJJVChDQVJMOTE3MEZXX1dPTCkgfAorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1dPTCAqLworCQkJCQkoMCkpLAorCisJICAgICAubWluaWJvb3Rfc2l6ZSA9IGNwdV90b19sZTE2KDApLAorCSAgICAgLnR4X2Rlc2NzID0gQVI5MTcwX1RYX0JMT0NLX05VTUJFUiwKKwkgICAgIC5jbWRfYnVmcyA9IENBUkw5MTcwX0lOVF9SUV9DQUNIRVMsCisJICAgICAucnhfbWF4X2ZyYW1lX2xlbiA9IGNwdV90b19sZTE2KENPTkZJR19DQVJMOTE3MEZXX1JYX0ZSQU1FX0xFTiksCisJICAgICAudHhfZnJhZ19sZW4gPSBjcHVfdG9fbGUxNihBUjkxNzBfQkxPQ0tfU0laRSksCisJICAgICAuZndfYWRkcmVzcyA9IGNwdV90b19sZTMyKEFSOTE3MF9QUkFNX09GRlNFVCksCisJICAgICAuYmNuX2FkZHIgPSAoX19sZTMyKSBjcHVfdG9fbGUzMigmZG1hX21lbS5yZXNlcnZlZC5iY24pLAorCSAgICAgLmJjbl9sZW4gPSAoX19sZTE2KSBjcHVfdG9fbGUxNihzaXplb2YoZG1hX21lbS5yZXNlcnZlZC5iY24pKSwKKwkgICAgIC52aWZfbnVtID0gQ0FSTDkxNzBfSU5URl9OVU0sCisJICAgICAuYXBpX3ZlciA9IENPTkZJR19DQVJMOTE3MEZXX1JFTEVBU0VfVkVSU0lPTiwKKwkpLAorCisJRklMTCh0eHNxLCBUWFNRLAorCSAgICAgLnNlcV90YWJsZV9hZGRyID0gY3B1X3RvX2xlMzIoJmZ3LndsYW4uc2VxdWVuY2UpLAorCSksCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19XT0wKKwlGSUxMKHdvbCwgV09MLAorCSAgICAgLnN1cHBvcnRlZF90cmlnZ2VycyA9IEJJVChDQVJMOTE3MF9XT0xfRElTQ09OTkVDVCkgfAorCQkJCSAgIEJJVChDQVJMOTE3MF9XT0xfTUFHSUNfUEtUKSwKKwkpLAorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1dPTCAqLworCisKKwlGSUxMKG1vdGQsIE1PVEQsCisJICAgICAuZndfeWVhcl9tb250aF9kYXkgPSBjcHVfdG9fbGUzMigKKwkJCUNBUkw5MTcwRldfU0VUX0RBWShDQVJMOTE3MEZXX1ZFUlNJT05fREFZKSArCisJCQlDQVJMOTE3MEZXX1NFVF9NT05USChDQVJMOTE3MEZXX1ZFUlNJT05fTU9OVEgpICsKKwkJCUNBUkw5MTcwRldfU0VUX1lFQVIoQ0FSTDkxNzBGV19WRVJTSU9OX1lFQVIpKSwKKwkgICAgIC5kZXNjID0gIkNvbW11bml0eSBBUjkxNzAgTGludXgiLAorCSAgICAgLnJlbGVhc2UgPSBDQVJMOTE3MEZXX1ZFUlNJT05fR0lUKSwKKworCUZJTEwoZGJnLCBEQkcsCisJICAgICAuYm9nb2Nsb2NrX2FkZHIgPSBjcHVfdG9fbGUzMigwKSwKKwkgICAgIC5jb3VudGVyX2FkZHIgPSBjcHVfdG9fbGUzMigmZncuY291bnRlciksCisJICAgICAucnhfdG90YWxfYWRkciA9IGNwdV90b19sZTMyKDApLAorCSAgICAgLnJ4X292ZXJydW5fYWRkciA9IGNwdV90b19sZTMyKDApLAorCSAgICAgLnJ4X2ZpbHRlciA9IGNwdV90b19sZTMyKCZmdy53bGFuLnJ4X2ZpbHRlciksCisJKSwKKworCUZJTEwobGFzdCwgTEFTVCksCit9OworCisjdW5kZWYgRklMTAorCitzdHJ1Y3QgZmlybXdhcmVfY29udGV4dF9zdHJ1Y3QgZnc7CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvZ3Bpby5jIGIvY2FybDkxNzBmdy9jYXJsZncvc3JjL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWNkODFmCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jYXJsZncvc3JjL2dwaW8uYwpAQCAtMCwwICsxLDUyIEBACisvKgorICogY2FybDkxNzAgZmlybXdhcmUgLSB1c2VkIGJ5IHRoZSBhcjkxNzAgd2lyZWxlc3MgZGV2aWNlCisgKgorICogR1BJTyBpbnRlcnJ1cHQgc2VydmljZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodAkyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExCUNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgImNhcmw5MTcwLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgorCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfR1BJT19JTlRFUlJVUFQKK3ZvaWQgZ3Bpb190aW1lcih2b2lkKQoreworCXVpbnQzMl90IGN1cjsKKworCWN1ciA9IGdldChBUjkxNzBfR1BJT19SRUdfUE9SVF9EQVRBKSAmIENBUkw5MTcwX0dQSU9fTUFTSzsKKworCWlmIChjdXIgIT0gZncuY2FjaGVkX2dwaW9fc3RhdGUuZ3BpbykgeworCQlmdy5jYWNoZWRfZ3Bpb19zdGF0ZS5ncGlvID0gY3VyOworCisJCXNlbmRfY21kX3RvX2hvc3Qoc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF9ncGlvKSwKKwkJCQkgQ0FSTDkxNzBfUlNQX0dQSU8sIDB4MDAsCisJCQkJICh1aW50OF90ICopJmZ3LmNhY2hlZF9ncGlvX3N0YXRlKTsKKworIyBpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19XQVRDSERPR19CVVRUT04KKwkJZm9yICg7OykgeworCQkJLyoKKwkJCSAqIExvb3AgZm9yZXZlci4uLiBVbnRpbCB0aGUgd2F0Y2hkb2cgdHJpZ2dlcnMuCisJCQkgKi8KKwkJfQorIyBlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19XQVRDSERPR19CVVRUT04gKi8KKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfR1BJT19JTlRFUlJVUFQgKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy9ob3N0aWYuYyBiL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy9ob3N0aWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDQ1ZDVmCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jYXJsZncvc3JjL2hvc3RpZi5jCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogY2FybDkxNzAgZmlybXdhcmUgLSB1c2VkIGJ5IHRoZSBhcjkxNzAgd2lyZWxlc3MgZGV2aWNlCisgKgorICogSG9zdCBpbnRlcmZhY2Ugcm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQJMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDktMjAxMQlDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlICJjYXJsOTE3MC5oIgorI2luY2x1ZGUgImhvc3RpZi5oIgorI2luY2x1ZGUgInByaW50Zi5oIgorI2luY2x1ZGUgIndsLmgiCisKK3N0YXRpYyBib29sIGxlbmd0aF9jaGVjayhzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2MpCit7CisJdm9sYXRpbGUgc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnN1cGVyID0gX19nZXRfc3VwZXIoZGVzYyk7CisKKwlpZiAodW5saWtlbHkoZGVzYy0+dG90YWxMZW4gPCBzaXplb2Yoc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZGVzYykpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIGNoZWNrIGlmIHRoZSBETUEgaXMgY29tcGxldGUsIG9yIGNsaXBwZWQuCisJICoKKwkgKiBOQjogVGhlIGhhcmR3YXJlIGFsaWducyB0aGUgZGVzY3JpcHRvciBsZW5ndGggdG8KKwkgKiBhIDQgYnl0ZSBib3VuZGFyeS4gVGhpcyBtYWtlcyB0aGUgZGlyZWN0IGNvbXBhcmlzb24KKwkgKiBkaWZmaWN1bHQsIG9yIHVubmVjZXNzYXJ5IGNvbXBsZXggZm9yIGEgaG90LXBhdGguCisJICovCisJaWYgKHVubGlrZWx5KHN1cGVyLT5zLmxlbiA+IGRlc2MtPnRvdGFsTGVuKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9kb3dubG9hZCh2b2lkKQoreworCXN0cnVjdCBkbWFfZGVzYyAqZGVzYzsKKworCS8qCisJICogVW5kZXIgbm9ybWFsIGNvbmRpdGlvbnMsIGFsbCBjb21wbGV0ZWQgZGVzY3Mgc2hvdWxkIGhhdmUKKwkgKiB0aGUgQVI5MTcwX09XTl9CSVRTX1NFIHN0YXR1cyBmbGFnIHNldC4KKwkgKiBIb3dldmVyIHRoZXJlIHNlZW1zIHRvIGJlIGEgdW5kb2N1bWVudGVkIGNhc2Ugd2hlcmUgdGhlIGZsYWcKKwkgKiBpcyBfU1cgKCBoYW5kbGVfZG93bmxvYWRfZXhjZXB0aW9uICkKKwkgKi8KKworCWZvcl9lYWNoX2Rlc2Nfbm90X2JpdHMoZGVzYywgJmZ3LnB0YS5kb3duX3F1ZXVlLCBBUjkxNzBfT1dOX0JJVFNfSFcpIHsKKwkJaWYgKHVubGlrZWx5KChsZW5ndGhfY2hlY2soZGVzYykgPT0gZmFsc2UpKSkgeworCQkJLyoKKwkJCSAqIFRoZXJlIGlzIG5vIGVhc3kgd2F5IG9mIHRlbGxpbmcgd2hhdCB3YXMgbG9zdC4KKwkJCSAqCisJCQkgKiBUaGVyZWZvcmUgd2UganVzdCByZWNsYWltIHRoZSBkYXRhLgorCQkJICogVGhlIGRyaXZlciBoYXMgdG8gaGF2ZSBzb21lIHNvcnQgZnJhbWUKKwkJCSAqIHRpbWVvdXQgbWVjaGFuaXNtLgorCQkJICovCisKKwkJCXdsYW5fdHhfY29tcGxldGUoX19nZXRfc3VwZXIoZGVzYyksIGZhbHNlKTsKKwkJCWRtYV9yZWNsYWltKCZmdy5wdGEuZG93bl9xdWV1ZSwgZGVzYyk7CisJCQlkb3duX3RyaWdnZXIoKTsKKwkJfSBlbHNlIHsKKwkJCXdsYW5fdHgoZGVzYyk7CisJCX0KKwl9CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVR19MRURfSEVBUlRCRUFUCisJeG9ybChBUjkxNzBfR1BJT19SRUdfUE9SVF9EQVRBLCAyKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVR19MRURfSEVBUlRCRUFUICovCit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV91cGxvYWQodm9pZCkKK3sKKwlzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2M7CisKKwlmb3JfZWFjaF9kZXNjX25vdF9iaXRzKGRlc2MsICZmdy5wdGEudXBfcXVldWUsIEFSOTE3MF9PV05fQklUU19IVykgeworCQkvKgorCQkgKiBCSUcgRkFUIE5PVEU6CisJCSAqCisJCSAqIERPIE5PVCBjb21wYXJlIHRoZSBkZXNjcmlwdG9yIGFkZHJlc3Nlcy4KKwkJICovCisJCWlmIChERVNDX1BBWUxPQUQoZGVzYykgPT0gKHZvaWQgKikgJmRtYV9tZW0ucmVzZXJ2ZWQucnNwKSB7CisJCQlmdy51c2IuaW50X2Rlc2MgPSBkZXNjOworCQkJZncudXNiLmludF9kZXNjX2F2YWlsYWJsZSA9IDE7CisJCX0gZWxzZSB7CisJCQlkbWFfcmVjbGFpbSgmZncud2xhbi5yeF9xdWV1ZSwgZGVzYyk7CisJCQl3bGFuX3RyaWdnZXIoQVI5MTcwX0RNQV9UUklHR0VSX1JYUSk7CisJCX0KKwl9CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVR19MRURfSEVBUlRCRUFUCisJeG9ybChBUjkxNzBfR1BJT19SRUdfUE9SVF9EQVRBLCAyKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVR19MRURfSEVBUlRCRUFUICovCit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9kb3dubG9hZF9leGNlcHRpb24odm9pZCkKK3sKKwlzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2MsICp0YXJnZXQ7CisKKwkvKiBhY3R1YWxseSwgdGhlIHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkIGJ5IG5vdz8gKi8KKwl1c2Jfc3RvcF9kb3duX3F1ZXVlKCk7CisKKwl0YXJnZXQgPSAodm9pZCAqKSgoZ2V0KEFSOTE3MF9QVEFfUkVHX0ROX0NVUlJfQUREUkgpIDw8IDE2KSB8CisJCSAgZ2V0KEFSOTE3MF9QVEFfUkVHX0ROX0NVUlJfQUREUkwpKTsKKworCS8qCisJICogUHV0ICJmb3Jnb3R0ZW4iIHBhY2tldHMgZnJvbSB0aGUgaGVhZCBvZiB0aGUgcXVldWUsIGJhY2sKKwkgKiB0byB0aGUgY3VycmVudCBwb3NpdGlvbgorCSAqLworCV9fd2hpbGVfZGVzY19iaXRzKGRlc2MsICZmdy5wdGEuZG93bl9xdWV1ZSwgQVI5MTcwX09XTl9CSVRTX0hXKSB7CisJCWlmIChkZXNjID09IHRhcmdldCkKKwkJCWJyZWFrOworCisJCWRtYV9yZWNsYWltKCZmdy5wdGEuZG93bl9xdWV1ZSwKKwkJICAgIGRtYV91bmxpbmtfaGVhZCgmZncucHRhLmRvd25fcXVldWUpKTsKKwl9CisKKwlfX2Zvcl9lYWNoX2Rlc2NfY29udGludWUoZGVzYywgJmZ3LnB0YS5kb3duX3F1ZXVlKSB7CisJCWlmICgoZGVzYy0+c3RhdHVzICYgQVI5MTcwX09XTl9CSVRTKSA9PSBBUjkxNzBfT1dOX0JJVFNfU1cpCisJCQlkbWFfZml4X2Rvd25xdWV1ZShkZXNjKTsKKwl9CisKKworCXVzYl9zdGFydF9kb3duX3F1ZXVlKCk7CisKKwlkb3duX3RyaWdnZXIoKTsKK30KKworLyogaGFuZGxlIGludGVycnVwdHMgZnJvbSBETUEgY2hpcCAqLwordm9pZCBoYW5kbGVfaG9zdF9pbnRlcmZhY2Uodm9pZCkKK3sKKwl1aW50MzJfdCBwdGFfaW50OworCisJcHRhX2ludCA9IGdldChBUjkxNzBfUFRBX1JFR19JTlRfRkxBRyk7CisKKyNkZWZpbmUgSEFORExFUihpbnRyLCBmbGFnLCBmdW5jKQkJCVwKKwlkbyB7CQkJCQkJXAorCQlpZiAoKGludHIgJiBmbGFnKSAhPSAwKSB7CQlcCisJCQlmdW5jKCk7CQkJCVwKKwkJfQkJCQkJXAorCX0gd2hpbGUgKDApCisKKwlIQU5ETEVSKHB0YV9pbnQsIEFSOTE3MF9QVEFfSU5UX0ZMQUdfRE4sIGhhbmRsZV9kb3dubG9hZCk7CisKKwlIQU5ETEVSKHB0YV9pbnQsIEFSOTE3MF9QVEFfSU5UX0ZMQUdfVVAsIGhhbmRsZV91cGxvYWQpOworCisJLyogVGhpcyBpcyBqdXN0IGd1ZXNzd29yayBhbmQgTUFHSUMgKi8KKwlwdGFfaW50ID0gZ2V0KEFSOTE3MF9QVEFfUkVHX0RNQV9TVEFUVVMpOworCUhBTkRMRVIocHRhX2ludCwgMHgxLCBoYW5kbGVfZG93bmxvYWRfZXhjZXB0aW9uKTsKKworI3VuZGVmIEhBTkRMRVIKK30KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy9tYWluLmMgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3Y2JhZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvbWFpbi5jCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogY2FybDkxNzAgZmlybXdhcmUgLSB1c2VkIGJ5IHRoZSBhcjkxNzAgd2lyZWxlc3MgZGV2aWNlCisgKgorICogaW5pdGlhbGl6YXRpb24gYW5kIG1haW4oKSBsb29wCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICogQ29weXJpZ2h0CTIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEJQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY2FybDkxNzAuaCIKKyNpbmNsdWRlICJ0aW1lci5oIgorI2luY2x1ZGUgImhvc3RpZi5oIgorI2luY2x1ZGUgInByaW50Zi5oIgorI2luY2x1ZGUgImdwaW8uaCIKKyNpbmNsdWRlICJ3bC5oIgorI2luY2x1ZGUgInJmLmgiCisjaW5jbHVkZSAidXNiLmgiCisKKyNkZWZpbmUgQVI5MTcwX1dBVENIX0RPR19USU1FUgkJICAgMHgxMDAKKworc3RhdGljIHZvaWQgdGltZXJfaW5pdChjb25zdCB1bnNpZ25lZCBpbnQgdGltZXIsIGNvbnN0IHVuc2lnbmVkIGludCBpbnRlcnZhbCkKK3sKKwkvKiBTZXQgdGltZXIgdG8gcGVyaW9kaWMgbW9kZSAqLworCW9ybChBUjkxNzBfVElNRVJfUkVHX0NPTlRST0wsIEJJVCh0aW1lcikpOworCisJLyogU2V0IHRpbWUgaW50ZXJ2YWwgKi8KKwlzZXQoQVI5MTcwX1RJTUVSX1JFR19USU1FUjAgKyAodGltZXIgPDwgMiksIGludGVydmFsIC0gMSk7CisKKwkvKiBDbGVhciB0aW1lciBpbnRlcnJ1cHQgZmxhZyAqLworCW9ybChBUjkxNzBfVElNRVJfUkVHX0lOVEVSUlVQVCwgQklUKHRpbWVyKSk7Cit9CisKK3ZvaWQgY2xvY2tfc2V0KGVudW0gY3B1X2Nsb2NrX3QgY2xvY2tfLCBib29sIG9uKQoreworCS8qCisJICogV29yZCBvZiBXYXJuaW5nIQorCSAqIFRoaXMgc2V0dGluZyBkb2VzIG1vcmUgdGhhbiBqdXN0IG1lc3Mgd2l0aCB0aGUgQ1BVIENsb2NrLgorCSAqIFNvIHdhdGNoIG91dCwgaWYgeW91IG5lZWQgX3N0YWJsZV8gdGltZXIgaW50ZXJydXB0cy4KKwkgKi8KKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19SQURJT19GVU5DVElPTlMKKwlpZiAoZncucGh5LmZyZXF1ZW5jeSA8IDMwMDAwMDApCisJCXNldChBUjkxNzBfUFdSX1JFR19QTExfQUREQUMsIDB4NTE2Myk7CisJZWxzZQorCQlzZXQoQVI5MTcwX1BXUl9SRUdfUExMX0FEREFDLCAweDUxNDMpOworI2Vsc2UKKwlzZXQoQVI5MTcwX1BXUl9SRUdfUExMX0FEREFDLCAweDUxNjMpOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1JBRElPX0ZVTkNUSU9OUyAqLworCisJZncudGlja3NfcGVyX3VzZWMgPSBHRVRfVkFMKEFSOTE3MF9QV1JfUExMX0FEREFDX0RJViwKKwkJZ2V0KEFSOTE3MF9QV1JfUkVHX1BMTF9BRERBQykpOworCisJc2V0KEFSOTE3MF9QV1JfUkVHX0NMT0NLX1NFTCwgKHVpbnQzMl90KSAoKG9uID8gMHg3MCA6IDB4NjAwKSB8IGNsb2NrXykpOworCisJc3dpdGNoIChjbG9ja18pIHsKKwljYXNlIEFIQl8yMF8yMk1IWjoKKwkJZncudGlja3NfcGVyX3VzZWMgPj49IDE7CisJY2FzZSBBSEJfNDBNSFpfT1NDOgorCWNhc2UgQUhCXzQwXzQ0TUhaOgorCQlmdy50aWNrc19wZXJfdXNlYyA+Pj0gMTsKKwljYXNlIEFIQl84MF84OE1IWjoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbml0KHZvaWQpCit7CisJbGVkX2luaXQoKTsKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHX1VBUlQKKwl1YXJ0X2luaXQoKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVR19VQVJUICovCisKKwkvKiAyNS81MC8xMDBtcyB0aW1lciAoZGVwZW5kcyBvbiBjcHUgY2xvY2spICovCisJdGltZXJfaW5pdCgwLCA1MDAwMCk7CisKKwkvKiBVU0IgaW5pdCAqLworCXVzYl9pbml0KCk7CisKKwkvKiBpbml0aWFsaXplIERNQSBtZW1vcnkgKi8KKwltZW1zZXQoJmRtYV9tZW0sIDAsIHNpemVvZihkbWFfbWVtKSk7CisKKwkvKiBmaWxsIERNQSByaW5ncyAqLworCWRtYV9pbml0X2Rlc2NyaXB0b3JzKCk7CisKKwkvKiBjbGVhciBhbGwgaW50ZXJydXB0ICovCisJc2V0KEFSOTE3MF9NQUNfUkVHX0lOVF9DVFJMLCAweGZmZmYpOworCisJb3JsKEFSOTE3MF9NQUNfUkVHX0FGVEVSX1BOUCwgMSk7CisKKwkvKiBJbml0IHdhdGNoIGRvZyBjb250cm9sIGZsYWcgKi8KKwlmdy53YXRjaGRvZ19lbmFibGUgPSAxOworCisJc2V0KEFSOTE3MF9USU1FUl9SRUdfV0FUQ0hfRE9HLCBBUjkxNzBfV0FUQ0hfRE9HX1RJTUVSKTsKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX0dQSU9fSU5URVJSVVBUCisJZncuY2FjaGVkX2dwaW9fc3RhdGUuZ3BpbyA9IGdldChBUjkxNzBfR1BJT19SRUdfUE9SVF9EQVRBKSAmCisJCQkJICAgIENBUkw5MTcwX0dQSU9fTUFTSzsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19HUElPX0lOVEVSUlVQVCAqLworCisJLyogdGhpcyB3aWxsIGdldCB0aGUgZG93bnF1ZXVlIG1vdmluZy4gKi8KKwlkb3duX3RyaWdnZXIoKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2Z3KHZvaWQpCit7CisJaWYgKGZ3LndhdGNoZG9nX2VuYWJsZSA9PSAxKQorCQlzZXQoQVI5MTcwX1RJTUVSX1JFR19XQVRDSF9ET0csIEFSOTE3MF9XQVRDSF9ET0dfVElNRVIpOworCisJaWYgKGZ3LnJlYm9vdCkKKwkJcmVib290KCk7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVyMF9pc3Iodm9pZCkKK3sKKwl3bGFuX3RpbWVyKCk7CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19HUElPX0lOVEVSUlVQVAorCWdwaW9fdGltZXIoKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19HUElPX0lOVEVSUlVQVCAqLworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfREVCVUdfTEVEX0hFQVJUQkVBVAorCXNldChBUjkxNzBfR1BJT19SRUdfUE9SVF9EQVRBLCBnZXQoQVI5MTcwX0dQSU9fUkVHX1BPUlRfREFUQSkgXiAxKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVR19MRURfSEVBUlRCRUFUICovCit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV90aW1lcih2b2lkKQoreworCXVpbnQzMl90IGludHI7CisKKwlpbnRyID0gZ2V0KEFSOTE3MF9USU1FUl9SRUdfSU5URVJSVVBUKTsKKworCS8qIEFDSyB0aW1lciBpbnRlcnJ1cHQgKi8KKwlzZXQoQVI5MTcwX1RJTUVSX1JFR19JTlRFUlJVUFQsIGludHIpOworCisjZGVmaW5lIEhBTkRMRVIoaW50ciwgZmxhZywgZnVuYykJCQlcCisJZG8gewkJCQkJCVwKKwkJaWYgKChpbnRyICYgZmxhZykgIT0gMCkgewkJXAorCQkJaW50ciAmPSB+ZmxhZzsJCQlcCisJCQlmdW5jKCk7CQkJCVwKKwkJfQkJCQkJXAorCX0gd2hpbGUgKDApCisKKwlIQU5ETEVSKGludHIsIEJJVCgwKSwgdGltZXIwX2lzcik7CisKKwlpZiAoaW50cikKKwkJREJHKCJVbmhhbmRsZWQgVGltZXIgRXZlbnQgJXgiLCAodW5zaWduZWQgaW50KSBpbnRyKTsKKworI3VuZGVmIEhBTkRMRVIKK30KKworc3RhdGljIHZvaWQgdGFsbHlfdXBkYXRlKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGJvZmYsIHRpbWUsIGRlbHRhOworCisJdGltZSA9IGdldF9jbG9ja19jb3VudGVyKCk7CisJaWYgKGZ3LnBoeS5zdGF0ZSA9PSBDQVJMOTE3MF9QSFlfT04pIHsKKwkJZGVsdGEgPSAodGltZSAtIGZ3LnRhbGx5X2Nsb2NrKTsKKworCQlmdy50YWxseS5hY3RpdmUgKz0gZGVsdGE7CisKKwkJYm9mZiA9IGdldChBUjkxNzBfTUFDX1JFR19CQUNLT0ZGX1NUQVRVUyk7CisJCWlmIChib2ZmICYgQVI5MTcwX01BQ19CQUNLT0ZGX1RYX1BFKQorCQkJZncudGFsbHkudHhfdGltZSArPSBkZWx0YTsKKwkJaWYgKGJvZmYgJiBBUjkxNzBfTUFDX0JBQ0tPRkZfQ0NBKQorCQkJZncudGFsbHkuY2NhICs9IGRlbHRhOworCX0KKworCWZ3LnRhbGx5X2Nsb2NrID0gdGltZTsKKwlmdy5jb3VudGVyKys7Cit9CisKK3N0YXRpYyB2b2lkIF9fbm9yZXR1cm4gbWFpbl9sb29wKHZvaWQpCit7CisJLyogbWFpbiBsb29wICovCisJd2hpbGUgKDEpIHsKKwkJaGFuZGxlX2Z3KCk7CisKKwkJLyoKKwkJICogRHVlIHRvIGZyYW1lIG9yZGVyIHBlcnNldmF0aW9uLCB0aGUgd2xhbiBzdWJyb3V0aW5lcworCQkgKiBtdXN0IGJlIGV4ZWN1dGVkIGJlZm9yZSBoYW5kbGVfaG9zdF9pbnRlcmZhY2UuCisJCSAqLworCQloYW5kbGVfd2xhbigpOworCisJCWhhbmRsZV9ob3N0X2ludGVyZmFjZSgpOworCisJCWhhbmRsZV91c2IoKTsKKworCQloYW5kbGVfdGltZXIoKTsKKworCQl0YWxseV91cGRhdGUoKTsKKwl9Cit9CisKKy8qCisgKiBUaGUgYm9vdGNvZGUgd2lsbCB3b3JrIHdpdGggdGhlIGRldmljZSBkcml2ZXIgdG8gbG9hZCB0aGUgZmlybXdhcmUKKyAqIG9udG8gdGhlIGRldmljZSdzIFByb2dyYW0gU1JBTS4gVGhlIFByb2dyYW0gU1JBTSBoYXMgYSBzaXplIG9mIDE2IEtCCisgKiBhbmQgYWxzbyBjb250YWlucyB0aGUgc3RhY2ssIHdoaWNoIGdyb3dzIGRvd24gZnJvbSAweDIwNDAwMC4KKyAqCisgKiBUaGUgUHJvZ3JhbSBTUkFNIHN0YXJ0cyBhdCBhZGRyZXNzIDB4MjAwMDAwIG9uIHRoZSBkZXZpY2UuCisgKiBUaGUgZmlybXdhcmUgZW50cnkgcG9pbnQgKDB4MjAwMDA0KSBpcyBsb2NhdGVkIGluIGJvb3QuUy4KKyAqIHdlIHB1dCBfc3RhcnQoKSB0aGVyZSB3aXRoIHRoZSBsaW5rZXIgc2NyaXB0IGNhcmw5MTcwLmxkcy4KKyAqLworCit2b2lkIF9fc2VjdGlvbihib290KSBzdGFydCh2b2lkKQoreworCWNsb2NrX3NldChBSEJfNDBNSFpfT1NDLCB0cnVlKTsKKworCS8qIHdhdGNoZG9nIG1hZ2ljIHBhdHRlcm4gY2hlY2sgKi8KKwlpZiAoKGdldChBUjkxNzBfUFdSX1JFR19XQVRDSF9ET0dfTUFHSUMpICYgMHhmZmZmMDAwMCkgPT0gMHgxMjM0MDAwMCkgeworCQkvKiB3YXRjaCBkb2cgd2FybSBzdGFydCAqLworCQlpbmNsKEFSOTE3MF9QV1JfUkVHX1dBVENIX0RPR19NQUdJQyk7CisJCXVzYl90cmlnZ2VyX291dCgpOworCX0gZWxzZSBpZiAoKGdldChBUjkxNzBfUFdSX1JFR19XQVRDSF9ET0dfTUFHSUMpICYgMHhmZmZmMDAwMCkgPT0gMHg5ODc2MDAwMCkgeworCQkvKiBzdXNwZW5kL3Jlc3VtZSAqLworCX0KKworCS8qIHdyaXRlIHRoZSBtYWdpYyBwYXR0ZXJuIGZvciB3YXRjaCBkb2cgKi8KKwlhbmRsKEFSOTE3MF9QV1JfUkVHX1dBVENIX0RPR19NQUdJQywgMHhGRkZGKTsKKwlvcmwoQVI5MTcwX1BXUl9SRUdfV0FUQ0hfRE9HX01BR0lDLCAweDEyMzQwMDAwKTsKKworCWluaXQoKTsKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHCisKKwlCVUcoIlRFU1QgQlVHIik7CisJQlVHX09OKDB4MmIgfHwgITB4MmIpOworCUlORk8oIklORk8gTUVTU0FHRSIpOworCisJLyogYSBzZXQgb2YgdW5pcXVlIGNoYXJhY3RlcnMgdG8gZGV0ZWN0IHRyYW5zZmVyIGRhdGEgY29ycnVwdGlvbnMgKi8KKwlEQkcoIkFhQmJDY0RkRWVGZkdnSGhJaUpqS2tMbE1tTm5Pb1BwUXFSclNzVHRVdVZ2V3dYeFl5WnoiCisJICAgICIgfmAhMUAyIzMkNCUlNV42JjcqOCg5KTBfLSs9e1t9XXxcXDo7XCInPCw+Lj8vIik7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfREVCVUcgKi8KKworCS8qCisJICogVGVsbCB0aGUgaG9zdCwgdGhhdCB0aGUgZmlybXdhcmUgaGFzIGJvb3RlZCBhbmQgaXMKKwkgKiBub3cgcmVhZHkgdG8gcHJvY2VzcyByZXF1ZXN0cy4KKwkgKi8KKwlzZW5kX2NtZF90b19ob3N0KDAsIENBUkw5MTcwX1JTUF9CT09ULCAweDAwLCBOVUxMKTsKKwltYWluX2xvb3AoKTsKK30KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy9tZW1jcHkuUyBiL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy9tZW1jcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTM5YTZiCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jYXJsZncvc3JjL21lbWNweS5TCkBAIC0wLDAgKzEsMjI4IEBACisvKiAkSWQ6IG1lbWNweS5TLHYgMS4zIDIwMDEvMDcvMjcgMTE6NTA6NTIgZ25paWJlIEV4cCAkCisgKgorICogIm1lbWNweSIgaW1wbGVtZW50YXRpb24gb2YgU3VwZXJICisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EKKyAqCisgKi8KKworLyoKKyAqIHZvaWQgKm1lbWNweSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pOworICogTm8gb3ZlcmxhcCBiZXR3ZWVuIHRoZSBtZW1vcnkgb2YgRFNUIGFuZCBvZiBTUkMgYXJlIGFzc3VtZWQuCisgKi8KKworCS5nbG9ibCBfbWVtY3B5CisJLmFsaWduIDIKKwlfbWVtY3B5OgorCXRzdAlyNixyNgorCWJ0L3MJOWYJCSEgaWYgbj0wLCBkbyBub3RoaW5nCisJIG1vdglyNCxyMAorCXN1YglyNCxyNQkJISBGcm9tIGhlcmUsIHI1IGhhcyB0aGUgZGlzdGFuY2UgdG8gcjAKKwlhZGQJcjYscjAJCSEgRnJvbSBoZXJlLCByMCBwb2ludHMgdGhlIGVuZCBvZiBjb3B5aW5nIHBvaW50CisJbW92CSMxMixyMQorCWNtcC9ndAlyNixyMQorCWJ0L3MJN2YJCSEgaWYgaXQncyB0b28gc21hbGwsIGNvcHkgYSBieXRlIGF0IG9uY2UKKwkgYWRkCSMtMSxyNQorCWFkZAkjMSxyNQorCSEJCQlGcm9tIGhlcmUsIHI2IGlzIGZyZWUKKwkhCisJISAgICAgIHI0ICAgLS0+ICBbIC4uLiAgXSBEU1QgICAgICAgICAgICAgWyAuLi4gIF0gU1JDCisJIQkgICAgICAgICBbIC4uLiAgXSAgICAgICAgICAgICAgICAgWyAuLi4gIF0KKwkhCSAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgIDoKKwkhICAgICAgcjAgICAtLT4gIFsgLi4uICBdICAgICAgIHIwK3I1IC0tPiBbIC4uLiAgXQorCSEKKwkhCisJbW92CXI1LHIxCisJbW92CSMzLHIyCisJYW5kCXIyLHIxCisJc2hsbDIJcjEKKwltb3YJcjAscjMJCSEgU2F2ZSB0aGUgdmFsdWUgb24gUjAgdG8gUjMKKwltb3ZhCWptcHRhYmxlLHIwCisJYWRkCXIxLHIwCisJbW92LmwJQHIwLHIxCisJam1wCUByMQorCSBtb3YJcjMscjAJCSEgYW5kIGJhY2sgdG8gUjAKKwkuYmFsaWduCTQKK2ptcHRhYmxlOgorCS5sb25nCWNhc2UwCisJLmxvbmcJY2FzZTEKKwkubG9uZwljYXNlMgorCS5sb25nCWNhc2UzCisKKwkhIGNvcHkgYSBieXRlIGF0IG9uY2UKKzc6CW1vdglyNCxyMgorCWFkZAkjMSxyMgorODoKKwljbXAvaGkJcjIscjAKKwltb3YuYglAKHIwLHI1KSxyMQorCWJ0L3MJOGIJCQkhIHdoaWxlIChyMD5yMikKKwkgbW92LmIJcjEsQC1yMAorOToKKwlydHMKKwkgbm9wCisKK2Nhc2UwOgorCSEKKwkhCUdISUogS0xNTiBPUFFSIC0tPiAgR0hJSiBLTE1OIE9QUVIKKwkhCisJISBGaXJzdCwgYWxpZ24gdG8gbG9uZyB3b3JkIGJvdW5kYXJ5CisJbW92CXIwLHIzCisJYW5kCXIyLHIzCisJdHN0CXIzLHIzCisJYnQvcwkyZgorCSBhZGQJIy00LHI1CisJYWRkCSMzLHI1CisxOglkdAlyMworCW1vdi5iCUAocjAscjUpLHIxCisJYmYvcwkxYgorCSBtb3YuYglyMSxALXIwCisJIQorCWFkZAkjLTMscjUKKzI6CSEgU2Vjb25kLCBjb3B5IGEgbG9uZyB3b3JkIGF0IG9uY2UKKwltb3YJcjQscjIKKwlhZGQJIzcscjIKKzM6CW1vdi5sCUAocjAscjUpLHIxCisJY21wL2hpCXIyLHIwCisJYnQvcwkzYgorCSBtb3YubAlyMSxALXIwCisJIQorCSEgVGhpcmQsIGNvcHkgYSBieXRlIGF0IG9uY2UsIGlmIG5lY2Vzc2FyeQorCWNtcC9lcQlyNCxyMAorCWJ0L3MJOWIKKwkgYWRkCSMzLHI1CisJYnJhCThiCisJIGFkZAkjLTYscjIKKworY2FzZTE6CisJIQorCSEJR0hJSiBLTE1OIE9QUVIgLS0+ICAuLi5HIEhJSksgTE1OTyBQUVIuCisJIQorCSEgRmlyc3QsIGFsaWduIHRvIGxvbmcgd29yZCBib3VuZGFyeQorCW1vdglyMCxyMworCWFuZAlyMixyMworCXRzdAlyMyxyMworCWJ0L3MJMmYKKwkgYWRkCSMtMSxyNQorMToJZHQJcjMKKwltb3YuYglAKHIwLHI1KSxyMQorCWJmL3MJMWIKKwkgbW92LmIJcjEsQC1yMAorCSEKKzI6CSEgU2Vjb25kLCByZWFkIGEgbG9uZyB3b3JkIGFuZCB3cml0ZSBhIGxvbmcgd29yZCBhdCBvbmNlCisJbW92LmwJQChyMCxyNSkscjEKKwlhZGQJIy00LHI1CisJbW92CXI0LHIyCisJYWRkCSM3LHIyCisJIQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCiszOgltb3YJcjEscjMJCSEgUlFQTworCXNobGwxNglyMworCXNobGw4CXIzCQkhIE94eHgKKwltb3YubAlAKHIwLHI1KSxyMQkhIE5NTEsKKwltb3YJcjEscjYKKwlzaGxyOAlyNgkJISB4Tk1MCisJb3IJcjYscjMJCSEgT05NTAorCWNtcC9oaQlyMixyMAorCWJ0L3MJM2IKKwkgbW92LmwJcjMsQC1yMAorI2Vsc2UKKzM6CW1vdglyMSxyMwkJISBPUFFSCisJc2hscjE2CXIzCisJc2hscjgJcjMJCSEgeHh4TworCW1vdi5sCUAocjAscjUpLHIxCSEgS0xNTgorCW1vdglyMSxyNgorCXNobGw4CXI2CQkhIExNTngKKwlvcglyNixyMwkJISBMTU5PCisJY21wL2hpCXIyLHIwCisJYnQvcwkzYgorCSBtb3YubAlyMyxALXIwCisjZW5kaWYKKwkhCisJISBUaGlyZCwgY29weSBhIGJ5dGUgYXQgb25jZSwgaWYgbmVjZXNzYXJ5CisJY21wL2VxCXI0LHIwCisJYnQvcwk5YgorCSBhZGQJIzQscjUKKwlicmEJOGIKKwkgYWRkCSMtNixyMgorCitjYXNlMjoKKwkhCisJIQlHSElKIEtMTU4gT1BRUiAtLT4gIC4uR0ggSUpLTCBNTk9QIFFSLi4KKwkhCisJISBGaXJzdCwgYWxpZ24gdG8gd29yZCBib3VuZGFyeQorCXRzdAkjMSxyMAorCWJ0L3MJMmYKKwkgYWRkCSMtMSxyNQorCW1vdi5iCUAocjAscjUpLHIxCisJbW92LmIJcjEsQC1yMAorCSEKKzI6CSEgU2Vjb25kLCByZWFkIGEgd29yZCBhbmQgd3JpdGUgYSB3b3JkIGF0IG9uY2UKKwlhZGQJIy0xLHI1CisJbW92CXI0LHIyCisJYWRkCSMzLHIyCisJIQorMzoJbW92LncJQChyMCxyNSkscjEKKwljbXAvaGkJcjIscjAKKwlidC9zCTNiCisJIG1vdi53CXIxLEAtcjAKKwkhCisJISBUaGlyZCwgY29weSBhIGJ5dGUgYXQgb25jZSwgaWYgbmVjZXNzYXJ5CisJY21wL2VxCXI0LHIwCisJYnQvcwk5YgorCSBhZGQJIzEscjUKKwltb3YuYglAKHIwLHI1KSxyMQorCXJ0cworCSBtb3YuYglyMSxALXIwCisKK2Nhc2UzOgorCSEKKwkhCUdISUogS0xNTiBPUFFSIC0tPiAgLkdISSBKS0xNIE5PUFEgUi4uLgorCSEKKwkhIEZpcnN0LCBhbGlnbiB0byBsb25nIHdvcmQgYm91bmRhcnkKKwltb3YJcjAscjMKKwlhbmQJcjIscjMKKwl0c3QJcjMscjMKKwlidC9zCTJmCisJIGFkZAkjLTEscjUKKzE6CWR0CXIzCisJbW92LmIJQChyMCxyNSkscjEKKwliZi9zCTFiCisJIG1vdi5iCXIxLEAtcjAKKwkhCisyOgkhIFNlY29uZCwgcmVhZCBhIGxvbmcgd29yZCBhbmQgd3JpdGUgYSBsb25nIHdvcmQgYXQgb25jZQorCWFkZAkjLTIscjUKKwltb3YubAlAKHIwLHI1KSxyMQorCWFkZAkjLTQscjUKKwltb3YJcjQscjIKKwlhZGQJIzcscjIKKwkhCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKzM6CW1vdglyMSxyMwkJISBSUVBPCisJc2hsbDgJcjMJCSEgUVBPeAorCW1vdi5sCUAocjAscjUpLHIxCSEgTk1MSworCW1vdglyMSxyNgorCXNobHIxNglyNgorCXNobHI4CXI2CQkhIHh4eE4KKwlvcglyNixyMwkJISBRUE9OCisJY21wL2hpCXIyLHIwCisJYnQvcwkzYgorCSBtb3YubAlyMyxALXIwCisjZWxzZQorMzoJbW92CXIxLHIzCQkhIE9QUVIKKwlzaGxyOAlyMwkJISB4T1BRCisJbW92LmwJQChyMCxyNSkscjEJISBLTE1OCisJbW92CXIxLHI2CisJc2hsbDE2CXI2CisJc2hsbDgJcjYJCSEgTnh4eAorCW9yCXI2LHIzCQkhIE5PUFEKKwljbXAvaGkJcjIscjAKKwlidC9zCTNiCisJIG1vdi5sCXIzLEAtcjAKKyNlbmRpZgorCSEKKwkhIFRoaXJkLCBjb3B5IGEgYnl0ZSBhdCBvbmNlLCBpZiBuZWNlc3NhcnkKKwljbXAvZXEJcjQscjAKKwlidC9zCTliCisJIGFkZAkjNixyNQorCWJyYQk4YgorCSBhZGQJIy02LHIyCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvbWVtc2V0LlMgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvbWVtc2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5YzhhNgotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy9tZW1zZXQuUwpAQCAtMCwwICsxLDU4IEBACisvKiAkSWQ6IG1lbXNldC5TLHYgMS4xIDIwMDAvMDQvMTQgMTY6NDk6MDEgbWpkIEV4cCAkCisgKgorICogIm1lbXNldCIgaW1wbGVtZW50YXRpb24gb2YgU3VwZXJICisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EKKyAqCisgKi8KKworLyoKKyAqICAgICAgICAgICAgdm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CisgKi8KKworCS5nbG9ibCBfbWVtc2V0CisJLmFsaWduIDIKKwlfbWVtc2V0OgorCXRzdAlyNixyNgorCWJ0L3MJNWYJCSEgaWYgbj0wLCBkbyBub3RoaW5nCisJIGFkZAlyNixyNAorCW1vdgkjMTIscjAKKwljbXAvZ3QJcjYscjAKKwlidC9zCTRmCQkhIGlmIGl0J3MgdG9vIHNtYWxsLCBzZXQgYSBieXRlIGF0IG9uY2UKKwkgbW92CXI0LHIwCisJYW5kCSMzLHIwCisJY21wL2VxCSMwLHIwCisJYnQvcwkyZgkJISBJdCdzIGFsaWduZWQKKwkgc3ViCXIwLHI2CisxOgorCWR0CXIwCisJYmYvcwkxYgorCSBtb3YuYglyNSxALXI0CisyOgkJCQkhIG1ha2UgVlZWVgorCWV4dHUuYglyNSxyNQorCXN3YXAuYglyNSxyMAkJISAgIFYwCisJb3IJcjAscjUJCSEgICBWVgorCXN3YXAudwlyNSxyMAkJISBWVjAwCisJb3IJcjAscjUJCSEgVlZWVgorCSEKKwltb3YJcjYscjAKKwlzaGxyMglyMAorCXNobHIJcjAJCSEgcjAgPSByNiA+PiAzCiszOgorCWR0CXIwCisJbW92LmwJcjUsQC1yNAkJISBzZXQgOC1ieXRlIGF0IG9uY2UKKwliZi9zCTNiCisJIG1vdi5sCXI1LEAtcjQKKwkhCisJbW92CSM3LHIwCisJYW5kCXIwLHI2CisJdHN0CXI2LHI2CisJYnQJNWYKKwkhIGZpbGwgYnl0ZXMKKzQ6CisJZHQJcjYKKwliZi9zCTRiCisJIG1vdi5iCXI1LEAtcjQKKzU6CisJcnRzCisJIG1vdglyNCxyMApkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvc3JjL3ByaW50Zi5jIGIvY2FybDkxNzBmdy9jYXJsZncvc3JjL3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNmZjA1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvcHJpbnRmLmMKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwOCAgS3VzdGFhIE55aG9sbQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlICJjYXJsOTE3MC5oIgorI2luY2x1ZGUgInByaW50Zi5oIgorCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfUFJJTlRGCitzdGF0aWMgY2hhciAqYmY7CitzdGF0aWMgY2hhciBidWZbMTJdOworc3RhdGljIHVuc2lnbmVkIGludCBudW07CitzdGF0aWMgY2hhciB1YzsKK3N0YXRpYyBjaGFyIHpzOworCitzdGF0aWMgdm9pZCBvdXQoY29uc3QgY2hhciBjKQoreworCSpiZisrID0gYzsKK30KKworc3RhdGljIHZvaWQgb3V0RGd0KGNvbnN0IGNoYXIgZGd0KQoreworCW91dChkZ3QgKyAoZGd0IDwgMTAgPyAnMCcgOiAodWMgPyAnQScgOiAnYScpIC0gMTApKTsKKwl6cyA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGRpdk91dChjb25zdCB1bnNpZ25lZCBpbnQgZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGRndCA9IDA7CisKKwl3aGlsZSAobnVtID49IGQpIHsKKwkJbnVtIC09IGQ7CisJCWRndCsrOworCX0KKworCWlmICh6cyB8fCBkZ3QgPiAwKQorCQlvdXREZ3QoZGd0KTsKK30KKwordm9pZCB0ZnBfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgdmE7CisJY2hhciAqcDsKKwl1bnNpZ25lZCBpbnQgaTsKKwljaGFyIGNoOworCisJdmFfc3RhcnQodmEsIGZtdCk7CisKKwl3aGlsZSAoKGNoID0gKihmbXQrKykpKSB7CisJCWlmIChjaCAhPSAnJScpIHsKKwkJCXB1dGNoYXJhY3RlcihjaCk7CisJCX0gZWxzZSB7CisJCQljaGFyIGx6ID0gMDsKKwkJCWNoYXIgdyA9IDA7CisJCQljaCA9ICooZm10KyspOworCisJCQlpZiAoY2ggPT0gJzAnKSB7CisJCQkJY2ggPSAqKGZtdCsrKTsKKwkJCQlseiA9IDE7CisJCQl9CisKKwkJCWlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisJCQkJdyA9IDA7CisJCQkJd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKwkJCQkJdyA9ICgoKHcgPDwgMikgKyB3KSA8PCAxKSArIGNoIC0gJzAnOworCQkJCQljaCA9ICpmbXQrKzsKKwkJCQkJfQorCQkJfQorCisJCQliZiA9IGJ1ZjsKKwkJCXAgPSBiZjsKKwkJCXpzID0gMDsKKworCQkJc3dpdGNoIChjaCkgeworCQkJY2FzZSAwOgorCQkJCWdvdG8gYWJvcnQ7CisKKwkJCWNhc2UgJ3UnOgorCQkJY2FzZSAnZCc6CisJCQkJbnVtID0gdmFfYXJnKHZhLCB1bnNpZ25lZCBpbnQpOworCQkJCWlmIChjaCA9PSAnZCcgJiYgKGludCkgbnVtIDwgMCkgeworCQkJCQludW0gPSAtKGludCludW07CisJCQkJCW91dCgnLScpOworCQkJCX0KKworCQkJCWZvciAoaSA9IDEwMDAwMDAwMDsgaSAhPSAxOyBpIC89IDEwKQorCQkJCQlkaXZPdXQoaSk7CisKKwkJCQlvdXREZ3QobnVtKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAncCc6CisJCQljYXNlICd4JzoKKwkJCWNhc2UgJ1gnOgorCQkJCXVjID0gY2ggPT0gJ1gnOworCQkJCW51bSA9IHZhX2FyZyh2YSwgdW5zaWduZWQgaW50KTsKKwkJCQlmb3IgKGkgPSAweDEwMDAwMDAwOyBpICE9IDB4MTsgaSA+Pj0gNCkKKwkJCQkJZGl2T3V0KGkpOworCisJCQkJb3V0RGd0KG51bSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ2MnOgorCQkJCW91dCgoY2hhcikodmFfYXJnKHZhLCBpbnQpKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ3MnOgorCQkJCXAgPSB2YV9hcmcodmEsIGNoYXIqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJyUnOgorCQkJCW91dCgnJScpOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJCX0KKworCQkJKmJmID0gMDsKKwkJCWJmID0gcDsKKwkJCXdoaWxlICgqYmYrKyAmJiB3ID4gMCkKKwkJCQl3LS07CisKKwkJCXdoaWxlICh3LS0gPiAwKQorCQkJCXB1dGNoYXJhY3RlcihseiA/ICcwJyA6ICcgJyk7CisKKwkJCXdoaWxlICgoY2ggPSAqcCsrKSkKKwkJCQlwdXRjaGFyYWN0ZXIoY2gpOworCQl9CisJfQorCithYm9ydDoKKwlwdXRjaGFyYWN0ZXIoJ1wwJyk7CisJdmFfZW5kKHZhKTsKK30KKworI2Vsc2UKKwordm9pZCBtaW5fcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWNoYXIgY2g7CisKKwlkbyB7CisJCWNoID0gKihmbXQrKyk7CisJCXB1dGNoYXJhY3RlcihjaCk7CisJfSB3aGlsZSAoY2gpOworfQorCisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfUFJJTlRGICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvcmVib290LlMgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvcmVib290LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjMTgxMwotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy9yZWJvb3QuUwpAQCAtMCwwICsxLDExIEBACisJLmdsb2JsIF9qdW1wX3RvX2Jvb3Rjb2RlCisJLnR5cGUgIF9qdW1wX3RvX2Jvb3Rjb2RlLCBAZnVuY3Rpb24KKwlfanVtcF90b19ib290Y29kZToKKwkJbW92Lmwgc3RhY2tfc3RhcnQsIHIwCisJCW1vdi5sIEByMCwgc3AKKwkJbW92LmwgZWVwcm9tX3N0YXJ0LCByMAorCQltb3YubCBAcjAsIHIwCisJCWptcCBAcjAKKwkuYWxpZ24gNAorc3RhY2tfc3RhcnQ6CS5sb25nIDB4MDAwMDAwMDQKK2VlcHJvbV9zdGFydDoJLmxvbmcgMHgwMDAwMDAwMApkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvc3JjL3JmLmMgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvcmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDMxZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jYXJsZncvc3JjL3JmLmMKQEAgLTAsMCArMSwyNzcgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBQSFkgYW5kIFJGIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodAkyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExCUNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgImNhcmw5MTcwLmgiCisjaW5jbHVkZSAidGltZXIuaCIKKyNpbmNsdWRlICJwcmludGYuaCIKKyNpbmNsdWRlICJyZi5oIgorI2luY2x1ZGUgInNoYXJlZC9waHkuaCIKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1JBRElPX0ZVTkNUSU9OUworc3RhdGljIHZvaWQgc2V0X2NoYW5uZWxfZW5kKHZvaWQpCit7CisJLyogTWFuaXB1bGF0ZSBDQ0EgdGhyZXNob2xkIHRvIHJlc3VtZSB0cmFuc21pc3Npb24gKi8KKwlzZXQoQVI5MTcwX1BIWV9SRUdfQ0NBX1RIUkVTSE9MRCwgMHgwKTsKKwkvKiBEaXNhYmxlIFZpcnR1YWwgQ0NBICovCisJYW5kbChBUjkxNzBfTUFDX1JFR19RT1NfUFJJT1JJVFlfVklSVFVBTF9DQ0EsCisJICAgICB+QVI5MTcwX01BQ19WSVJUVUFMX0NDQV9BTEwpOworCisJZncucGh5LnN0YXRlID0gQ0FSTDkxNzBfUEhZX09OOworfQorCit2b2lkIHJmX25vdGlmeV9zZXRfY2hhbm5lbCh2b2lkKQoreworCS8qIE1hbmlwdWxhdGUgQ0NBIHRocmVzaG9sZCB0byBzdG9wIHRyYW5zbWlzc2lvbiAqLworCXNldChBUjkxNzBfUEhZX1JFR19DQ0FfVEhSRVNIT0xELCAweDMwMCk7CisJLyogRW5hYmxlIFZpcnR1YWwgQ0NBICovCisJb3JsKEFSOTE3MF9NQUNfUkVHX1FPU19QUklPUklUWV9WSVJUVUFMX0NDQSwKKwkgICAgQVI5MTcwX01BQ19WSVJUVUFMX0NDQV9BTEwpOworCisJLyogcmVzZXQgQ0NBIHN0YXRzICovCisJZncudGFsbHkuYWN0aXZlID0gMDsKKwlmdy50YWxseS5jY2EgPSAwOworCWZ3LnRhbGx5LnR4X3RpbWUgPSAwOworCWZ3LnBoeS5zdGF0ZSA9IENBUkw5MTcwX1BIWV9PRkY7Cit9CisKKy8qCisgKiBVcGRhdGUgZGVsdGEgc2xvcGUgY29lZmYgbWFuIGFuZCBleHAKKyAqLworc3RhdGljIHZvaWQgaHdfdHVybl9vZmZfZHluKGNvbnN0IHVpbnQzMl90IGRlbHRhX3Nsb3BlX2NvZWZmX2V4cCwKKwkJCSAgICBjb25zdCB1aW50MzJfdCBkZWx0YV9zbG9wZV9jb2VmZl9tYW4sCisJCQkgICAgY29uc3QgdWludDMyX3QgZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2ksCisJCQkgICAgY29uc3QgdWludDMyX3QgZGVsdGFfc2xvcGVfY29lZmZfbWFuX3NoZ2kpCit7CisJdWludDMyX3QgdG1wOworCisJdG1wID0gZ2V0X2FzeW5jKEFSOTE3MF9QSFlfUkVHX1RJTUlORzMpICYgMHgwMDAwMWZmZjsKKwl0bXAgfD0gKGRlbHRhX3Nsb3BlX2NvZWZmX21hbiA8PCBBUjkxNzBfUEhZX1RJTUlORzNfRFNDX01BTl9TKSAmCisJCUFSOTE3MF9QSFlfVElNSU5HM19EU0NfTUFOOworCXRtcCB8PSAoZGVsdGFfc2xvcGVfY29lZmZfZXhwIDw8IEFSOTE3MF9QSFlfVElNSU5HM19EU0NfRVhQX1MpICYKKwkJQVI5MTcwX1BIWV9USU1JTkczX0RTQ19FWFA7CisKKwlzZXQoQVI5MTcwX1BIWV9SRUdfVElNSU5HMywgdG1wKTsKKworCXRtcCA9IChkZWx0YV9zbG9wZV9jb2VmZl9tYW5fc2hnaSA8PCBBUjkxNzBfUEhZX0hBTEZHSV9EU0NfTUFOX1MpICYKKwkJQVI5MTcwX1BIWV9IQUxGR0lfRFNDX01BTjsKKworCXRtcCB8PSAoZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2kgPDwgQVI5MTcwX1BIWV9IQUxGR0lfRFNDX0VYUF9TKSAmCisJCUFSOTE3MF9QSFlfSEFMRkdJX0RTQ19FWFA7CisKKwlzZXQoQVI5MTcwX1BIWV9SRUdfSEFMRkdJLCB0bXApOworfQorCitzdGF0aWMgdm9pZCBwcm9ncmFtX0FEREFDKHZvaWQpCit7CisJLyogPz8/IFNlbGVjdCBJbnRlcm5hbCBBRERBQyA/Pz8gKGlzIGV4dGVybmFsIHJhZGlvKSAqLworCXNldChBUjkxNzBfUEhZX1JFR19BRENfU0VSSUFMX0NUTCwgQVI5MTcwX1BIWV9BRENfU0NUTF9TRUxfRVhURVJOQUxfUkFESU8pOworCisJZGVsYXkoMTApOworCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDAwKTsJLyojIDctMCAqLworCXNldCgweDFjNTg5YywgMHgwMDAwMDAwMCk7CS8qIyAxNS04ICovCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDAwKTsJLyojIDIzLTE2ICovCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDAwKTsJLyojIDMxLSAqLworCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDAwKTsJLyojIDM5LSAqLworCXNldCgweDFjNTg5YywgMHgwMDAwMDAwMCk7CS8qIyA0Ny0gKi8KKwlzZXQoMHgxYzU4OWMsIDB4MDAwMDAwMDApOwkvKiMgNTUtIFs0OF06ZG91YmxlcyB0aGUgeHRhbG9zYyBiaWFzIGN1cnJlbnQgKi8KKwlzZXQoMHgxYzU4OWMsIDB4MDAwMDAwMDApOwkvKiMgNjMtICovCisKKwlzZXQoMHgxYzU4OWMsIDB4MDAwMDAwMDApOwkvKiMgNzEtICovCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDAwKTsJLyojIDc5LSAqLworCXNldCgweDFjNTg5YywgMHgwMDAwMDAwMCk7CS8qIyA4Ny0gKi8KKwlzZXQoMHgxYzU4OWMsIDB4MDAwMDAwMDApOwkvKiMgOTUtICovCisKKwlzZXQoMHgxYzU4OWMsIDB4MDAwMDAwMDApOwkvKiMgMTAzLSAqLworCXNldCgweDFjNTg5YywgMHgwMDAwMDAwMCk7CS8qIyAxMTEtICovCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDAwKTsJLyojIDExOS0gKi8KKwlzZXQoMHgxYzU4OWMsIDB4MDAwMDAwMDApOwkvKiMgMTI3LSAqLworCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDAwKTsJLyojIDEzNS0gKi8KKwlzZXQoMHgxYzU4OWMsIDB4MDAwMDAwMDApOwkvKiMgMTQzLSAqLworCXNldCgweDFjNTg5YywgMHgwMDAwMDAwMCk7CS8qIyAxNTEtICovCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDMwKTsJLyojIDE1OS0gI1sxNTg6MTU2XT14bG5hYnVmbW9kZSAqLworCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDA0KTsJLyojIDE2Ny0gIFsxNjJdOmRpc2FibGUgY2xrcF9kcml2ZXIgdG8gZmxvdyAqLworCXNldCgweDFjNTg5YywgMHgwMDAwMDAwMCk7CS8qIyAxNzUtICovCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDAwKTsJLyojIDE4My0xNzYgKi8KKwlzZXQoMHgxYzU4OWMsIDB4MDAwMDAwMDApOwkvKiMgMTkxLTE4NCAqLworCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDAwKTsJLyojIDE5OS0gKi8KKwlzZXQoMHgxYzU4OWMsIDB4MDAwMDAwMDApOwkvKiMgMjA3LSAqLworCXNldCgweDFjNTg5YywgMHgwMDAwMDAwMCk7CS8qIyAyMTUtICovCisJc2V0KDB4MWM1ODljLCAweDAwMDAwMDAwKTsJLyojIDIyMy0gKi8KKworCXNldCgweDFjNTg5YywgMHgwMDAwMDAwMCk7CS8qIyAyMzEtICovCisJc2V0KDB4MWM1OGM0LCAweDAwMDAwMDAwKTsJLyojIDIzMy0yMzIgKi8KKworCWRlbGF5KDEwKTsKKworCS8qIFNlbGVjdCBFeHRlcm5hbCBGbG93ID8/Pz8gKGlzIGludGVybmFsIGFkZGFjPz8pICovCisJc2V0KEFSOTE3MF9QSFlfUkVHX0FEQ19TRVJJQUxfQ1RMLCBBUjkxNzBfUEhZX0FEQ19TQ1RMX1NFTF9JTlRFUk5BTF9BRERBQyk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBBR0NfY2FsaWJyYXRpb24odWludDMyX3QgbG9vcCkKK3sKKwl1aW50MzJfdCB3cmRhdGE7CisJdWludDMyX3QgcmV0OworCisjZGVmaW5lIEFHQ19DQUxfTkYJKEFSOTE3MF9QSFlfQUdDX0NPTlRST0xfQ0FMIHwgQVI5MTcwX1BIWV9BR0NfQ09OVFJPTF9ORikKKworCXdyZGF0YSA9IGdldF9hc3luYyhBUjkxNzBfUEhZX1JFR19BR0NfQ09OVFJPTCkgfCBBR0NfQ0FMX05GOworCXNldChBUjkxNzBfUEhZX1JFR19BR0NfQ09OVFJPTCwgd3JkYXRhKTsKKworCXJldCA9IGdldF9hc3luYyhBUjkxNzBfUEhZX1JFR19BR0NfQ09OVFJPTCkgJiBBR0NfQ0FMX05GOworCisJLyogc2l0ZXN1cnZleSA6IDEwMCBtcyAvIGN1cnJlbnQgY29ubmVjdGVkIDIwMCBtcyAqLworCXdoaWxlICgocmV0ICE9IDApICYmIGxvb3AtLSkgeworCQl1ZGVsYXkoMTAwKTsKKworCQlyZXQgPSBnZXRfYXN5bmMoQVI5MTcwX1BIWV9SRUdfQUdDX0NPTlRST0wpICYgQUdDX0NBTF9ORjsKKwl9CisKKwkvKiByZXR1cm4gdGhlIEFHQy9Ob2lzZSBjYWxpYnJhdGlvbiBzdGF0ZSB0byB0aGUgZHJpdmVyICovCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBFSUdIVFlfRkxBRyAoQ0FSTDkxNzBGV19QSFlfSFRfRU5BQkxFIHwgQ0FSTDkxNzBGV19QSFlfSFRfRFlOMjA0MCkKKworc3RhdGljIHVpbnQzMl90IHJmX2luaXQoY29uc3QgdWludDMyX3QgZGVsdGFfc2xvcGVfY29lZmZfZXhwLAorCQkJY29uc3QgdWludDMyX3QgZGVsdGFfc2xvcGVfY29lZmZfbWFuLAorCQkJY29uc3QgdWludDMyX3QgZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2ksCisJCQljb25zdCB1aW50MzJfdCBkZWx0YV9zbG9wZV9jb2VmZl9tYW5fc2hnaSwKKwkJCWNvbnN0IHVpbnQzMl90IGZpbml0ZUxvb3BDb3VudCwKKwkJCWNvbnN0IGJvb2wgaW5pdGlhbGl6ZSkKK3sKKwl1aW50MzJfdCByZXQ7CisKKwlod190dXJuX29mZl9keW4oZGVsdGFfc2xvcGVfY29lZmZfZXhwLAorCQkJZGVsdGFfc2xvcGVfY29lZmZfbWFuLAorCQkJZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2ksCisJCQlkZWx0YV9zbG9wZV9jb2VmZl9tYW5fc2hnaSk7CisKKwlpZiAoaW5pdGlhbGl6ZSkgeworCQkvKiBSZWFsIENoaXAgKi8KKwkJcHJvZ3JhbV9BRERBQygpOworCisJCS8qIGludmVyc2UgY2hhaW4gMCA8LT4gY2hhaW4gMiAqLworCQlzZXQoQVI5MTcwX1BIWV9SRUdfQU5BTE9HX1NXQVAsIEFSOTE3MF9QSFlfQU5BTE9HX1NXQVBfQUIpOworCisJCS8qIHN3YXAgY2hhaW4gMCBhbmQgY2hhaW4gMiAqLworCQlzZXQoQVI5MTcwX1BIWV9SRUdfQU5BTE9HX1NXQVAsIEFSOTE3MF9QSFlfQU5BTE9HX1NXQVBfQUIgfAorCQkJCQkJQVI5MTcwX1BIWV9BTkFMT0dfU1dBUF9BTFRfQ0hBSU4pOworCisJCS8qIEFjdGl2YXRlIEJCICovCisJCXNldChBUjkxNzBfUEhZX1JFR19BQ1RJVkUsIEFSOTE3MF9QSFlfQUNUSVZFX0VOKTsKKwkJZGVsYXkoMTApOworCX0KKworCXJldCA9IEFHQ19jYWxpYnJhdGlvbihmaW5pdGVMb29wQ291bnQpOworCisJc2V0X2NoYW5uZWxfZW5kKCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZl9jbWQoY29uc3Qgc3RydWN0IGNhcmw5MTcwX2NtZCAqY21kLCBzdHJ1Y3QgY2FybDkxNzBfcnNwICpyZXNwKQoreworCXVpbnQzMl90IHJldDsKKworCWZ3LnBoeS5odF9zZXR0aW5ncyA9IGNtZC0+cmZfaW5pdC5odF9zZXR0aW5nczsKKwlmdy5waHkuZnJlcXVlbmN5ID0gY21kLT5yZl9pbml0LmZyZXE7CisKKwkvKgorCSAqIElzIHRoZSBjbG9jayBjb250cm9sbGVkIGJ5IHRoZSBQSFk/CisJICovCisJaWYgKChmdy5waHkuaHRfc2V0dGluZ3MgJiBFSUdIVFlfRkxBRykgPT0gRUlHSFRZX0ZMQUcpCisJCWNsb2NrX3NldChBSEJfODBfODhNSFosIHRydWUpOworCWVsc2UKKwkJY2xvY2tfc2V0KEFIQl80MF80NE1IWiwgdHJ1ZSk7CisKKwlyZXQgPSByZl9pbml0KGxlMzJfdG9fY3B1KGNtZC0+cmZfaW5pdC5kZWx0YV9zbG9wZV9jb2VmZl9leHApLAorCQkgICAgICBsZTMyX3RvX2NwdShjbWQtPnJmX2luaXQuZGVsdGFfc2xvcGVfY29lZmZfbWFuKSwKKwkJICAgICAgbGUzMl90b19jcHUoY21kLT5yZl9pbml0LmRlbHRhX3Nsb3BlX2NvZWZmX2V4cF9zaGdpKSwKKwkJICAgICAgbGUzMl90b19jcHUoY21kLT5yZl9pbml0LmRlbHRhX3Nsb3BlX2NvZWZmX21hbl9zaGdpKSwKKwkJICAgICAgbGUzMl90b19jcHUoY21kLT5yZl9pbml0LmZpbml0ZUxvb3BDb3VudCksCisJCSAgICAgIGNtZC0+aGRyLmNtZCA9PSBDQVJMOTE3MF9DTURfUkZfSU5JVCk7CisKKwlyZXNwLT5oZHIubGVuID0gc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF9yZl9pbml0X3Jlc3VsdCk7CisJcmVzcC0+cmZfaW5pdF9yZXMucmV0ID0gY3B1X3RvX2xlMzIocmV0KTsKK30KKwordm9pZCByZl9wc20odm9pZCkKK3sKKwl1MzIgYmFuazM7CisKKwlpZiAoZncucGh5LnBzbS5zdGF0ZSA9PSBDQVJMOTE3MF9QU01fU09GVFdBUkUpIHsKKwkJLyogbm90IGVuYWJsZWQgYnkgdGhlIGRyaXZlciAqLworCQlyZXR1cm47CisJfQorCisJaWYgKGZ3LnBoeS5wc20uc3RhdGUgJiBDQVJMOTE3MF9QU01fU0xFRVApIHsKKwkJZncucGh5LnBzbS5zdGF0ZSAmPSB+Q0FSTDkxNzBfUFNNX1NMRUVQOworCisJCS8qIGRpc2FibGUgYWxsIGFnYyBnYWluIGFuZCBvZmZzZXQgdXBkYXRlcyB0byBhMiAqLworCQlzZXQoQVI5MTcwX1BIWV9SRUdfVEVTVDIsIDB4ODAwMDAwMCk7CisKKwkJLyogcG93ZXIgZG93biBBRERBQyAqLworCQlzZXQoQVI5MTcwX1BIWV9SRUdfQURDX0NUTCwKKwkJICAgIEFSOTE3MF9QSFlfQURDX0NUTF9PRkZfUFdEREFDIHwKKwkJICAgIEFSOTE3MF9QSFlfQURDX0NUTF9PRkZfUFdEQURDIHwKKwkJICAgIDB4YTAwMDAwMDApOworCisJCS8qIFN5bnRoZXNpemVyIG9mZiArIFJYIG9mZiAqLworCQliYW5rMyA9IDB4MDA0MDAwMTg7CisKKwkJZncucGh5LnN0YXRlID0gQ0FSTDkxNzBfUEhZX09GRjsKKwl9IGVsc2UgeworCQkvKiBhZHZhbmNlIHRvIHRoZSBuZXh0IFBTTSBzdGVwICovCisJCWZ3LnBoeS5wc20uc3RhdGUtLTsKKworCQlpZiAoZncucGh5LnBzbS5zdGF0ZSA9PSBDQVJMOTE3MF9QU01fV0FLRSkgeworCQkJLyogd2FrZSB1cCBBRERBQyAqLworCQkJc2V0KEFSOTE3MF9QSFlfUkVHX0FEQ19DVEwsCisJCQkgICAgQVI5MTcwX1BIWV9BRENfQ1RMX09GRl9QV0REQUMgfAorCQkJICAgIEFSOTE3MF9QSFlfQURDX0NUTF9PRkZfUFdEQURDKTsKKworCQkJLyogZW5hYmxlIGFsbCBhZ2MgZ2FpbiBhbmQgb2Zmc2V0IHVwZGF0ZXMgdG8gYTIgKi8KKwkJCXNldChBUjkxNzBfUEhZX1JFR19URVNUMiwgMHgwKTsKKworCQkJLyogU3ludGhlc2l6ZXIgb24gKyBSWCBvbiAqLworCQkJYmFuazMgPSAweDAxNDIwMDk4OworCisJCQlmdy5waHkuc3RhdGUgPSBDQVJMOTE3MF9QSFlfT047CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gOworCQl9CisJfQorCisJaWYgKGZ3LnBoeS5mcmVxdWVuY3kgPCAzMDAwMDAwKQorCQliYW5rMyB8PSAweDAwODAwMDAwOworCisJc2V0KDB4MWM1OGYwLCBiYW5rMyk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19SQURJT19GVU5DVElPTlMgKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy91YXJ0LmMgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZjY0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvdWFydC5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBVQVJUIGRlYnVnIGludGVyZmFjZSBmdW5jdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICogQ29weXJpZ2h0CTIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEJQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY2FybDkxNzAuaCIKKyNpbmNsdWRlICJ1YXJ0LmgiCisjaW5jbHVkZSAiaW8uaCIKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHX1VBUlQKK3ZvaWQgdWFydF9wdXRjKGNvbnN0IGNoYXIgYykKK3sKKwlzZXQoQVI5MTcwX1VBUlRfUkVHX1RYX0hPTERJTkcsIGMpOworCisJd2hpbGUgKGdldChBUjkxNzBfVUFSVF9SRUdfTElORV9TVEFUVVMpICYKKwkgICAgICAgQVI5MTcwX1VBUlRfTElORV9TVFNfVFhfRklGT19BTE1PU1RfRU1QVFkpIHsKKwkJLyoKKwkJICogd2FpdCB1bnRpbCB0aGUgYnl0ZSBoYXMgbWFkZSBpdAorCQkgKi8KKwl9Cit9CisKK3ZvaWQgdWFydF9wcmludF9oZXhfZHVtcChjb25zdCB2b2lkICpidWYsIGNvbnN0IGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IDA7CisKKwl1YXJ0X3B1dGMoJ0gnKTsKKwl1YXJ0X3B1dGMoJ0QnKTsKKwl1YXJ0X3B1dGMoJzonKTsKKworCXdoaWxlIChsZW4gPiAwKSB7CisJCXVhcnRfcHV0YygqKCh1aW50OF90ICopIGJ1ZiArIG9mZnNldCkpOworCQlvZmZzZXQrKzsKKwl9Cit9CisKK3ZvaWQgdWFydF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSAwOworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfVUFSVF9DTE9DS18yNU0KKwlzZXQoQVI5MTcwX1VBUlRfUkVHX0RJVklTT1JfTFNCLCAweGMpOworI2VsaWYgQ09ORklHX0NBUkw5MTcwRldfVUFSVF9DTE9DS180ME0KKwlzZXQoQVI5MTcwX1VBUlRfUkVHX0RJVklTT1JfTFNCLCAweDE0KTsJLyogNDAgTUh6ICovCisJc2V0KEFSOTE3MF9VQVJUX1JFR19SRU1BSU5ERVIsIDB4YjM4ZSk7CisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBVQVJUIGNsb2NrIgorI2VuZGlmIC8qIENBUkw5MTcwRldfVUFSVF9DTE9DS18yNU0gKi8KKworCXdoaWxlIChnZXQoQVI5MTcwX1VBUlRfUkVHX0xJTkVfU1RBVFVTKSAmCisJICAgICAgIEFSOTE3MF9VQVJUX0xJTkVfU1RTX1RSQU5TTUlUVEVSX0VNUFRZKSB7CisJCWlmICh0aW1lb3V0KysgPj0gMTAwMDApCisJCQlicmVhazsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfREVCVUdfVUFSVCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvc3JjL3VkaXZzaTNfaTRpLU9zLlMgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvdWRpdnNpM19pNGktT3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmJlYzRjCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jYXJsZncvc3JjL3VkaXZzaTNfaTRpLU9zLlMKQEAgLTAsMCArMSwxNDkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorbGF0ZXIgdmVyc2lvbi4KKworSW4gYWRkaXRpb24gdG8gdGhlIHBlcm1pc3Npb25zIGluIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMgeW91IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGxpbmsgdGhlCitjb21waWxlZCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpbnRvIGNvbWJpbmF0aW9ucyB3aXRoIG90aGVyIHByb2dyYW1zLAorYW5kIHRvIGRpc3RyaWJ1dGUgdGhvc2UgY29tYmluYXRpb25zIHdpdGhvdXQgYW55IHJlc3RyaWN0aW9uIGNvbWluZworZnJvbSB0aGUgdXNlIG9mIHRoaXMgZmlsZS4gIChUaGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByZXN0cmljdGlvbnMKK2RvIGFwcGx5IGluIG90aGVyIHJlc3BlY3RzOyBmb3IgZXhhbXBsZSwgdGhleSBjb3ZlciBtb2RpZmljYXRpb24gb2YKK3RoZSBmaWxlLCBhbmQgZGlzdHJpYnV0aW9uIHdoZW4gbm90IGxpbmtlZCBpbnRvIGEgY29tYmluZQorZXhlY3V0YWJsZS4pCisKK1RoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBNb2RlcmF0ZWx5IFNwYWNlLW9wdGltaXplZCBsaWJnY2Mgcm91dGluZXMgZm9yIHRoZSBSZW5lc2FzIFNIIC8KKyAgIFNUTWljcm9lbGVjdHJvbmljcyBTVDQwIENQVXMuCisgICBDb250cmlidXRlZCBieSBKIm9ybiBSZW5uZWNrZSBqb2Vybi5yZW5uZWNrZUBzdC5jb20uICAqLworCisvKiBTaXplOiAxODYgYnl0ZXMgam9pbnRseSBmb3IgdWRpdnNpM19pNGkgYW5kIHNkaXZzaTNfaTRpCisgICBzaDQtMjAwIHJ1biB0aW1lczoKKyAgIHVkaXYgc21hbGwgZGl2aXNvcjogNTUgY3ljbGVzCisgICB1ZGl2IGxhcmdlIGRpdmlzb3I6IDUyIGN5Y2xlcworICAgc2RpdiBzbWFsbCBkaXZpc29yLCBwb3NpdGl2ZSByZXN1bHQ6IDU5IGN5Y2xlcworICAgc2RpdiBsYXJnZSBkaXZpc29yLCBwb3NpdGl2ZSByZXN1bHQ6IDU2IGN5Y2xlcworICAgc2RpdiBzbWFsbCBkaXZpc29yLCBuZWdhdGl2ZSByZXN1bHQ6IDY1IGN5Y2xlcyAoKikKKyAgIHNkaXYgbGFyZ2UgZGl2aXNvciwgbmVnYXRpdmUgcmVzdWx0OiA2MiBjeWNsZXMgKCopCisgICAoKik6IHIyIGlzIHJlc3RvcmVkIGluIHRoZSBydHMgZGVsYXkgc2xvdCBhbmQgaGFzIGEgbGluZ2VyaW5nIGxhdGVuY3kKKyAgICAgICAgb2YgdHdvIG1vcmUgY3ljbGVzLiAgKi8KKwkuYmFsaWduIDQKKwkuZ2xvYmFsCV9fX3VkaXZzaTNfaTRpCisJLmdsb2JhbAlfX191ZGl2c2kzX2k0CisJLnNldAlfX191ZGl2c2kzX2k0LCBfX191ZGl2c2kzX2k0aQorCS50eXBlCV9fX3VkaXZzaTNfaTRpLCBAZnVuY3Rpb24KKwkudHlwZQlfX19zZGl2c2kzX2k0aSwgQGZ1bmN0aW9uCitfX191ZGl2c2kzX2k0aToKKwlzdHMgcHIscjEKKwltb3YubCByNCxALXIxNQorCWV4dHUudyByNSxyMAorCWNtcC9lcSByNSxyMAorCXN3YXAudyByNCxyMAorCXNobHIxNiByNAorCWJmL3MgbGFyZ2VfZGl2aXNvcgorCWRpdjB1CisJbW92LmwgcjUsQC1yMTUKKwlzaGxsMTYgcjUKK3NkaXZfc21hbGxfZGl2aXNvcjoKKwlkaXYxIHI1LHI0CisJYnNyIGRpdjYKKwlkaXYxIHI1LHI0CisJZGl2MSByNSxyNAorCWJzciBkaXY2CisJZGl2MSByNSxyNAorCXh0cmN0IHI0LHIwCisJeHRyY3QgcjAscjQKKwlic3IgZGl2NworCXN3YXAudyByNCxyNAorCWRpdjEgcjUscjQKKwlic3IgZGl2NworCWRpdjEgcjUscjQKKwl4dHJjdCByNCxyMAorCW1vdi5sIEByMTUrLHI1CisJc3dhcC53IHIwLHIwCisJbW92LmwgQHIxNSsscjQKKwlqbXAgQHIxCisJcm90Y2wgcjAKK2Rpdjc6CisJZGl2MSByNSxyNAorZGl2NjoKKwkgICAgICAgICAgICBkaXYxIHI1LHI0OyBkaXYxIHI1LHI0OyBkaXYxIHI1LHI0CisJZGl2MSByNSxyNDsgZGl2MSByNSxyNDsgcnRzOyAgICAgICAgZGl2MSByNSxyNAorCitkaXZ4MzoKKwlyb3RjbCByMAorCWRpdjEgcjUscjQKKwlyb3RjbCByMAorCWRpdjEgcjUscjQKKwlyb3RjbCByMAorCXJ0cworCWRpdjEgcjUscjQKKworbGFyZ2VfZGl2aXNvcjoKKwltb3YubCByNSxALXIxNQorc2Rpdl9sYXJnZV9kaXZpc29yOgorCXhvciByNCxyMAorCS5yZXB0IDQKKwlyb3RjbCByMAorCWJzciBkaXZ4MworCWRpdjEgcjUscjQKKwkuZW5kcgorCW1vdi5sIEByMTUrLHI1CisJbW92LmwgQHIxNSsscjQKKwlqbXAgQHIxCisJcm90Y2wgcjAKKworCS5nbG9iYWwJX19zZGl2c2kzX2k0aQorCS5nbG9iYWwgX19zZGl2c2kzX2k0CisJLmdsb2JhbCBfX3NkaXZzaTMKKwkuc2V0CV9fc2RpdnNpM19pNCwgX19zZGl2c2kzX2k0aQorCS5zZXQJX19zZGl2c2kzLCBfX3NkaXZzaTNfaTRpCitfX3NkaXZzaTNfaTRpOgorCW1vdi5sIHI0LEAtcjE1CisJY21wL3B6IHI1CisJbW92LmwgcjUsQC1yMTUKKwlidC9zIHBvc19kaXZpc29yCisJY21wL3B6IHI0CisJbmVnIHI1LHI1CisJZXh0dS53IHI1LHIwCisJYnQvcyBuZWdfcmVzdWx0CisJY21wL2VxIHI1LHIwCisJbmVnIHI0LHI0Citwb3NfcmVzdWx0OgorCXN3YXAudyByNCxyMAorCWJyYSBzZGl2X2NoZWNrX2Rpdmlzb3IKKwlzdHMgcHIscjEKK3Bvc19kaXZpc29yOgorCWV4dHUudyByNSxyMAorCWJ0L3MgcG9zX3Jlc3VsdAorCWNtcC9lcSByNSxyMAorCW5lZyByNCxyNAorbmVnX3Jlc3VsdDoKKwltb3ZhIG5lZ2F0ZV9yZXN1bHQscjAKKwk7CisJbW92IHIwLHIxCisJc3dhcC53IHI0LHIwCisJbGRzIHIyLG1hY2wKKwlzdHMgcHIscjIKK3NkaXZfY2hlY2tfZGl2aXNvcjoKKwlzaGxyMTYgcjQKKwliZi9zIHNkaXZfbGFyZ2VfZGl2aXNvcgorCWRpdjB1CisJYnJhIHNkaXZfc21hbGxfZGl2aXNvcgorCXNobGwxNiByNQorCS5iYWxpZ24gNAorbmVnYXRlX3Jlc3VsdDoKKwluZWcgcjAscjAKKwlqbXAgQHIyCisJc3RzIG1hY2wscjIKZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L3NyYy93bGFuLmMgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvd2xhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMzI4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvd2xhbi5jCkBAIC0wLDAgKzEsMTIxMSBAQAorLyoKKyAqIGNhcmw5MTcwIGZpcm13YXJlIC0gdXNlZCBieSB0aGUgYXI5MTcwIHdpcmVsZXNzIGRldmljZQorICoKKyAqIEludGVyZmFjZSB0byB0aGUgV0xBTiBwYXJ0IG9mIHRoZSBjaGlwCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICogQ29weXJpZ2h0CTIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEJQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY2FybDkxNzAuaCIKKyNpbmNsdWRlICJzaGFyZWQvcGh5LmgiCisjaW5jbHVkZSAiaG9zdGlmLmgiCisjaW5jbHVkZSAidGltZXIuaCIKKyNpbmNsdWRlICJ3bC5oIgorI2luY2x1ZGUgInByaW50Zi5oIgorI2luY2x1ZGUgInJmLmgiCisjaW5jbHVkZSAibGludXgvaWVlZTgwMjExLmgiCisjaW5jbHVkZSAid29sLmgiCisKK3N0YXRpYyB2b2lkIHdsYW5fdHh1bnN0dWNrKHVuc2lnbmVkIGludCBxdWV1ZSkKK3sKKwlzZXRfd2xhbl90eHFfZG1hX2FkZHIocXVldWUsICgodWludDMyX3QpIGZ3LndsYW4udHhfcXVldWVbcXVldWVdLmhlYWQpIHwgMSk7Cit9CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ETUFfUVVFVUVfQlVNUAorc3RhdGljIHZvaWQgd2xhbl90eHVwZGF0ZSh1bnNpZ25lZCBpbnQgcXVldWUpCit7CisJc2V0X3dsYW5fdHhxX2RtYV9hZGRyKHF1ZXVlLCAoKHVpbnQzMl90KSBmdy53bGFuLnR4X3F1ZXVlW3F1ZXVlXS5oZWFkKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdsYW5fZG1hX2J1bXAodW5zaWduZWQgaW50IHFpZHgpCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHFpZHg7CisJdWludDMyX3Qgc3RhdHVzLCB0cmlnZ2VyOworCisJc3RhdHVzID0gZ2V0KEFSOTE3MF9NQUNfUkVHX0RNQV9TVEFUVVMpID4+IDEyOworCXRyaWdnZXIgPSBnZXQoQVI5MTcwX01BQ19SRUdfRE1BX1RSSUdHRVIpID4+IDEyOworCisJd2hpbGUgKG9mZnNldCAhPSAwKSB7CisJCXN0YXR1cyA+Pj0gNDsKKwkJdHJpZ2dlciA+Pj0gNDsKKwkJb2Zmc2V0LS07CisJfQorCisJc3RhdHVzICY9IDB4ZjsKKwl0cmlnZ2VyICY9IDB4ZjsKKworCWlmICgodHJpZ2dlciA9PSAweGEpICYmIChzdGF0dXMgPT0gMHg4KSkgeworCQlEQkcoIlVOU1RVQ0siKTsKKwkJd2xhbl90eHVuc3R1Y2socWlkeCk7CisJfSBlbHNlIHsKKwkJREJHKCJVUERBVEUiKTsKKwkJd2xhbl90eHVwZGF0ZShxaWR4KTsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfRE1BX1FVRVVFX0JVTVAgKi8KKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHCitzdGF0aWMgdm9pZCB3bGFuX2R1bXBfcXVldWUodW5zaWduZWQgaW50IHFpZHgpCit7CisKKwlzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2M7CisJc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnN1cGVyOworCWludCBlbnRyaWVzID0gMDsKKworCV9fZm9yX2VhY2hfZGVzYyhkZXNjLCAmZncud2xhbi50eF9xdWV1ZVtxaWR4XSkgeworCQlzdXBlciA9IGdldF9zdXBlcihkZXNjKTsKKwkJREJHKCIlZDogJXAgczoleCBjOiV4IHRsOiV4IGRzOiV4IG46JXAgbDolcCAiLCBlbnRyaWVzLCBkZXNjLAorCQkgICAgZGVzYy0+c3RhdHVzLCBkZXNjLT5jdHJsLCBkZXNjLT50b3RhbExlbiwKKwkJICAgIGRlc2MtPmRhdGFTaXplLCBkZXNjLT5uZXh0QWRkciwgZGVzYy0+bGFzdEFkZHIpOworCisJCURCRygiYzoleCB0cjolZCByaTolZCBsOiV4IG06JXggcDoleCBmYzoleCIsCisJCSAgICBzdXBlci0+cy5jb29raWUsIHN1cGVyLT5zLmNudCwgc3VwZXItPnMucml4LAorCQkgICAgc3VwZXItPmYuaGRyLmxlbmd0aCwgc3VwZXItPmYuaGRyLm1hYy5zZXQsCisJCSAgICAodW5zaWduZWQgaW50KSBsZTMyX3RvX2NwdShzdXBlci0+Zi5oZHIucGh5LnNldCksCisJCSAgICBzdXBlci0+Zi5kYXRhLmkzZS5mcmFtZV9jb250cm9sKTsKKworCQllbnRyaWVzKys7CisJfQorCisJZGVzYyA9IGdldF93bGFuX3R4cV9hZGRyKHFpZHgpOworCisJREJHKCJRdWV1ZTogJWQ6IHRlOiVkIHRkOiVkIGg6JXAgYzolcCB0OiVwIiwKKwkgICAgcWlkeCwgZW50cmllcywgcXVldWVfbGVuKCZmdy53bGFuLnR4X3F1ZXVlW3FpZHhdKSwKKwkgICAgZncud2xhbi50eF9xdWV1ZVtxaWR4XS5oZWFkLAorCSAgICBkZXNjLCBmdy53bGFuLnR4X3F1ZXVlW3FpZHhdLnRlcm1pbmF0b3IpOworCisJREJHKCJIVzogdDoleCBzOiV4IGFjOiV4IGM6JXgiLAorCSAgICAodW5zaWduZWQgaW50KSBnZXQoQVI5MTcwX01BQ19SRUdfRE1BX1RSSUdHRVIpLAorCSAgICAodW5zaWduZWQgaW50KSBnZXQoQVI5MTcwX01BQ19SRUdfRE1BX1NUQVRVUyksCisJICAgICh1bnNpZ25lZCBpbnQpIGdldChBUjkxNzBfTUFDX1JFR19BTVBEVV9DT1VOVCksCisJICAgICh1bnNpZ25lZCBpbnQpIGdldChBUjkxNzBfTUFDX1JFR19ETUFfVFhRWF9BRERSX0NVUlIpKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVRyAqLworCitzdGF0aWMgdm9pZCB3bGFuX3NlbmRfYnVmZmVyZWRfdHhfc3RhdHVzKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCXdoaWxlIChmdy53bGFuLnR4X3N0YXR1c19wZW5kaW5nKSB7CisJCWxlbiA9IG1pbigodW5zaWduZWQgaW50KWZ3LndsYW4udHhfc3RhdHVzX3BlbmRpbmcsCisJCQkgIENBUkw5MTcwX1JTUF9UWF9TVEFUVVNfTlVNKTsKKwkJbGVuID0gbWluKGxlbiwgQ0FSTDkxNzBfVFhfU1RBVFVTX05VTSAtCWZ3LndsYW4udHhfc3RhdHVzX2hlYWRfaWR4KTsKKworCQkvKgorCQkgKiByYXRoZXIgdGhhbiBtZW1jcHkgZWFjaCBpbmRpdmlkdWFsIHJlcXVlc3QgaW50byBhIGxhcmdlIGJ1ZmZlciwKKwkJICogd2UgX3NwbGljZV8gdGhlbSBhbGwgdG9nZXRoZXIuCisJCSAqCisJCSAqIFRoZSBvbmx5IGRvd25zaWRlIGlzIGhvd2V2ZXIgdGhhdCB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgYXJvdW5kCisJCSAqIHRoZSBlZGdlcyBvZiB0aGUgdHhfc3RhdHVzX2NhY2hlLgorCQkgKgorCQkgKiBOb3RlOgorCQkgKiBFYWNoIHR4X3N0YXR1cyBpcyBhYm91dCAyIGJ5dGVzLiBIb3dldmVyIGV2ZXJ5IGNvbW1hbmQgcGFja2FnZQorCQkgKiBtdXN0IGhhdmUgYSBzaXplIHdoaWNoIGlzIGEgbXVsdGlwbGUgb2YgNC4KKwkJICovCisKKwkJc2VuZF9jbWRfdG9faG9zdCgobGVuICogc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF90eF9zdGF0dXMpICsgMykgJiB+MywKKwkJCQkgQ0FSTDkxNzBfUlNQX1RYQ09NUCwgbGVuLCAodm9pZCAqKQorCQkJCSAmZncud2xhbi50eF9zdGF0dXNfY2FjaGVbZncud2xhbi50eF9zdGF0dXNfaGVhZF9pZHhdKTsKKworCQlmdy53bGFuLnR4X3N0YXR1c19wZW5kaW5nIC09IGxlbjsKKwkJZncud2xhbi50eF9zdGF0dXNfaGVhZF9pZHggKz0gbGVuOworCQlmdy53bGFuLnR4X3N0YXR1c19oZWFkX2lkeCAlPSBDQVJMOTE3MF9UWF9TVEFUVVNfTlVNOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjYXJsOTE3MF90eF9zdGF0dXMgKndsYW5fZ2V0X3R4X3N0YXR1c19idWZmZXIodm9pZCkKK3sKKwlzdHJ1Y3QgY2FybDkxNzBfdHhfc3RhdHVzICp0bXA7CisKKwl0bXAgPSAmZncud2xhbi50eF9zdGF0dXNfY2FjaGVbZncud2xhbi50eF9zdGF0dXNfdGFpbF9pZHgrK107CisJZncud2xhbi50eF9zdGF0dXNfdGFpbF9pZHggJT0gQ0FSTDkxNzBfVFhfU1RBVFVTX05VTTsKKworCWlmIChmdy53bGFuLnR4X3N0YXR1c19wZW5kaW5nID09IENBUkw5MTcwX1RYX1NUQVRVU19OVU0pCisJCXdsYW5fc2VuZF9idWZmZXJlZF90eF9zdGF0dXMoKTsKKworCWZ3LndsYW4udHhfc3RhdHVzX3BlbmRpbmcrKzsKKworCXJldHVybiB0bXA7Cit9CisKKy8qIGdlbmVyYXRlIF9hZ2dyZWdhdGVkXyB0eF9zdGF0dXMgZm9yIHRoZSBob3N0ICovCit2b2lkIHdsYW5fdHhfY29tcGxldGUoc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnN1cGVyLAorCQkgICAgICBib29sIHR4cykKK3sKKwlzdHJ1Y3QgY2FybDkxNzBfdHhfc3RhdHVzICpzdGF0dXM7CisKKwlzdGF0dXMgPSB3bGFuX2dldF90eF9zdGF0dXNfYnVmZmVyKCk7CisKKwkvKgorCSAqIFRoZSAqdW5pcXVlKiBjb29raWUgYW5kIEFDX0lEIGlzIHVzZWQgYnkgdGhlIGRyaXZlciBmb3IKKwkgKiBmcmFtZSBsb29rdXAuCisJICovCisJc3RhdHVzLT5jb29raWUgPSBzdXBlci0+cy5jb29raWU7CisJc3RhdHVzLT5xdWV1ZSA9IHN1cGVyLT5zLnF1ZXVlOworCXN1cGVyLT5zLmNvb2tpZSA9IDA7CisKKwkvKgorCSAqIFRoaXMgZmllbGQgaG9sZHMgdGhlIG51bWJlciBvZiB0cmllcyBvZiB0aGUgcmF0ZSBpbgorCSAqIHRoZSByYXRlIGluZGV4IGZpZWxkIChyaXgpLgorCSAqLworCXN0YXR1cy0+cml4ID0gc3VwZXItPnMucml4OworCXN0YXR1cy0+dHJpZXMgPSBzdXBlci0+cy5jbnQ7CisJc3RhdHVzLT5zdWNjZXNzID0gKHR4cykgPyAxIDogMDsKK30KKworc3RhdGljIGJvb2wgd2xhbl90eF9jb25zdW1lX3JldHJ5KHN0cnVjdCBjYXJsOTE3MF90eF9zdXBlcmZyYW1lICpzdXBlcikKK3sKKwkvKiBjaGVjayBpZiB0aGlzIHdhcyB0aGUgbGFzdCBwb3NzaWJsZSByZXRyeSB3aXRoIHRoaXMgcmF0ZSAqLworCWlmICh1bmxpa2VseShzdXBlci0+cy5jbnQgPj0gc3VwZXItPnMucmlbc3VwZXItPnMucml4XS50cmllcykpIHsKKwkJLyogZW5kIG9mIHRoZSByb2FkIC0gaW5kaWNhdGUgdHggZmFpbHVyZSAqLworCQlpZiAodW5saWtlbHkoc3VwZXItPnMucml4ID09IENBUkw5MTcwX1RYX01BWF9SRVRSWV9SQVRFUykpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJLyogY2hlY2sgaWYgdGhlcmUgYXJlIGFsdGVybmF0aXZlIHJhdGVzIGF2YWlsYWJsZSAqLworCQlpZiAoIXN1cGVyLT5zLnJyW3N1cGVyLT5zLnJpeF0uc2V0KQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8qIHRyeSBuZXh0IHJldHJ5IHJhdGUgKi8KKwkJc3VwZXItPmYuaGRyLnBoeS5zZXQgPSBzdXBlci0+cy5ycltzdXBlci0+cy5yaXhdLnNldDsKKworCQkvKiBmaW5hbGx5IC0gbWFyayB0aGUgb2xkIHJhdGUgYXMgVVNFRCAqLworCQlzdXBlci0+cy5yaXgrKzsKKworCQkvKiB1cGRhdGUgTUFDIGZsYWdzICovCisJCXN1cGVyLT5mLmhkci5tYWMuZXJwX3Byb3QgPSBzdXBlci0+cy5yaVtzdXBlci0+cy5yaXhdLmVycF9wcm90OworCQlzdXBlci0+Zi5oZHIubWFjLmFtcGR1ID0gc3VwZXItPnMucmlbc3VwZXItPnMucml4XS5hbXBkdTsKKworCQkvKiByZWluaXRpYWxpemUgdHJ5IGNvdW50ZXIgKi8KKwkJc3VwZXItPnMuY250ID0gMTsKKwl9IGVsc2UgeworCQkvKiBqdXN0IGluY3JlYXNlIHJldHJ5IGNvdW50ZXIgKi8KKwkJc3VwZXItPnMuY250Kys7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGdldF90aWQoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKK3sKKwlyZXR1cm4gKGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpKVswXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgb25seSB3b3JrIG9uIHVpbnQzMl90LWFsaWduZWQgcG9pbnRlcnMhICovCitzdGF0aWMgYm9vbCBzYW1lX2hkcihjb25zdCB2b2lkICpfZDAsIGNvbnN0IHZvaWQgKl9kMSkKK3sKKwljb25zdCB1aW50MzJfdCAqZDAgPSBfZDA7CisJY29uc3QgdWludDMyX3QgKmQxID0gX2QxOworCisJLyogQlVHX09OKCh1bnNpZ25lZCBsb25nKWQwICYgMyB8fCAodW5zaWduZWQgbG9uZylkMSAmIDMpKSAqLworCXJldHVybiAhKChkMFswXSBeIGQxWzBdKSB8CQkJLyogRkMgKyBEVSAqLworCQkgKGQwWzFdIF4gZDFbMV0pIHwJCQkvKiBhZGRyMSAqLworCQkgKGQwWzJdIF4gZDFbMl0pIHwgKGQwWzNdIF4gZDFbM10pIHwJLyogYWRkcjIgKyBhZGRyMyAqLworCQkgKGQwWzRdIF4gZDFbNF0pKTsJCQkvKiBhZGRyMyAqLworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2FtZV9hZ2dyKHN0cnVjdCBpZWVlODAyMTFfaGRyICphLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqYikKK3sKKwlyZXR1cm4gKGdldF90aWQoYSkgPT0gZ2V0X3RpZChiKSkgfHwgc2FtZV9oZHIoYSwgYik7Cit9CisKK3N0YXRpYyB2b2lkIHdsYW5fdHhfYW1wZHVfcmVzZXQodW5zaWduZWQgaW50IHFpZHgpCit7CisJZncud2xhbi5hbXBkdV9wcmV2W3FpZHhdID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgd2xhbl90eF9hbXBkdV9lbmQodW5zaWduZWQgaW50IHFpZHgpCit7CisJc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKmh0X3ByZXYgPSBmdy53bGFuLmFtcGR1X3ByZXZbcWlkeF07CisKKwlpZiAoaHRfcHJldikKKwkJaHRfcHJldi0+Zi5oZHIubWFjLmJhX2VuZCA9IDE7CisKKwl3bGFuX3R4X2FtcGR1X3Jlc2V0KHFpZHgpOworfQorCitzdGF0aWMgdm9pZCB3bGFuX3R4X2FtcGR1KHN0cnVjdCBjYXJsOTE3MF90eF9zdXBlcmZyYW1lICpzdXBlcikKK3sKKwl1bnNpZ25lZCBpbnQgcWlkeCA9IHN1cGVyLT5zLnF1ZXVlOworCXN0cnVjdCBjYXJsOTE3MF90eF9zdXBlcmZyYW1lICpodF9wcmV2ID0gZncud2xhbi5hbXBkdV9wcmV2W3FpZHhdOworCisJaWYgKHN1cGVyLT5mLmhkci5tYWMuYW1wZHUpIHsKKwkJaWYgKGh0X3ByZXYgJiYKKwkJICAgICFzYW1lX2FnZ3IoJnN1cGVyLT5mLmRhdGEuaTNlLCAmaHRfcHJldi0+Zi5kYXRhLmkzZSkpCisJCQlodF9wcmV2LT5mLmhkci5tYWMuYmFfZW5kID0gMTsKKwkJZWxzZQorCQkJc3VwZXItPmYuaGRyLm1hYy5iYV9lbmQgPSAwOworCisJCWZ3LndsYW4uYW1wZHVfcHJldltxaWR4XSA9IHN1cGVyOworCX0gZWxzZSB7CisJCXdsYW5fdHhfYW1wZHVfZW5kKHFpZHgpOworCX0KK30KKworLyogZm9yIGFsbCB0cmllcyAqLworc3RhdGljIHZvaWQgX193bGFuX3R4KHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJmcmFtZSAqc3VwZXIgPSBnZXRfc3VwZXIoZGVzYyk7CisKKwlpZiAodW5saWtlbHkoc3VwZXItPnMuZmlsbF9pbl90c2YpKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopICZzdXBlci0+Zi5kYXRhLmkzZTsKKwkJdWludDMyX3QgKnRzZiA9ICh1aW50MzJfdCAqKSAmbWdtdC0+dS5wcm9iZV9yZXNwLnRpbWVzdGFtcDsKKworCQkvKgorCQkgKiBUcnV0aCBiZSB0b2xkOiB0aGlzIGlzIGEgaGFjay4KKwkJICoKKwkJICogVGhlICpyZWFsKiBUU0YgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBoaWdoZXIvb2xkZXIuCisJCSAqIEJ1dCB0aGlzIGhhcmR3YXJlIGVtdWxhdGlvbiBjb2RlIGlzIGhlYWQgYW5kIHNob3VsZGVycworCQkgKiBhYm92ZSBhbnl0aGluZyBhIGRyaXZlciBjYW4gcG9zc2libHkgZG8uCisJCSAqCisJCSAqIChldmVuLCBpZiBpdCdzIGdvdCBhbiBhY2N1cmF0ZSBhdG9taWMgY2xvY2sgc291cmNlKS4KKwkJICovCisKKwkJcmVhZF90c2YodHNmKTsKKwl9CisKKwl3bGFuX3R4X2FtcGR1KHN1cGVyKTsKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHCisJQlVHX09OKGZ3LnBoeS5wc20uc3RhdGUgIT0gQ0FSTDkxNzBfUFNNX1dBS0UpOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHICovCisKKwkvKiBpbnNlcnQgZGVzYyBpbnRvIHRoZSByaWdodCBxdWV1ZSAqLworCWRtYV9wdXQoJmZ3LndsYW4udHhfcXVldWVbc3VwZXItPnMucXVldWVdLCBkZXNjKTsKK30KKworc3RhdGljIHZvaWQgd2xhbl9hc3NpZ25fc2VxKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHVuc2lnbmVkIGludCB2aWYpCit7CisJaGRyLT5zZXFfY3RybCAmPSBjcHVfdG9fbGUxNih+SUVFRTgwMjExX1NDVExfU0VRKTsKKwloZHItPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KGZ3LndsYW4uc2VxdWVuY2VbdmlmXSk7CisKKwlpZiAoaWVlZTgwMjExX2lzX2ZpcnN0X2ZyYWcoaGRyLT5zZXFfY3RybCkpCisJCWZ3LndsYW4uc2VxdWVuY2VbdmlmXSArPSAweDEwOworfQorCisvKiBwcmVwYXJlcyBmcmFtZSBmb3IgdGhlIGZpcnN0IHRyYW5zbWlzc2lvbiAqLworc3RhdGljIHZvaWQgX3dsYW5fdHgoc3RydWN0IGRtYV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBjYXJsOTE3MF90eF9zdXBlcmZyYW1lICpzdXBlciA9IGdldF9zdXBlcihkZXNjKTsKKworCWlmICh1bmxpa2VseShzdXBlci0+cy5hc3NpZ25fc2VxKSkKKwkJd2xhbl9hc3NpZ25fc2VxKCZzdXBlci0+Zi5kYXRhLmkzZSwgc3VwZXItPnMudmlmX2lkKTsKKworCWlmICh1bmxpa2VseShzdXBlci0+cy5hbXBkdV9jb21taXRfZGVuc2l0eSkpIHsKKwkJc2V0KEFSOTE3MF9NQUNfUkVHX0FNUERVX0RFTlNJVFksCisJCSAgICBNT0RfVkFMKEFSOTE3MF9NQUNfQU1QRFVfREVOU0lUWSwKKwkJCSAgICBnZXQoQVI5MTcwX01BQ19SRUdfQU1QRFVfREVOU0lUWSksCisJCQkgICAgc3VwZXItPnMuYW1wZHVfZGVuc2l0eSkpOworCX0KKworCWlmICh1bmxpa2VseShzdXBlci0+cy5hbXBkdV9jb21taXRfZmFjdG9yKSkgeworCQlzZXQoQVI5MTcwX01BQ19SRUdfQU1QRFVfRkFDVE9SLAorCQkgICAgTU9EX1ZBTChBUjkxNzBfTUFDX0FNUERVX0ZBQ1RPUiwKKwkJCSAgICBnZXQoQVI5MTcwX01BQ19SRUdfQU1QRFVfRkFDVE9SKSwKKwkJCSAgICA4IDw8IHN1cGVyLT5zLmFtcGR1X2ZhY3RvcikpOworCX0KK30KKworLyogcHJvcGFnYXRlIHRyYW5zbWlzc2lvbiBzdGF0dXMgYmFjayB0byB0aGUgZHJpdmVyICovCitzdGF0aWMgYm9vbCB3bGFuX3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX3F1ZXVlICpxdWV1ZSwKKwkJCSAgIHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJmcmFtZSAqc3VwZXIgPSBnZXRfc3VwZXIoZGVzYyk7CisJdW5zaWduZWQgaW50IHFpZHggPSBzdXBlci0+cy5xdWV1ZTsKKwlib29sIHR4ZmFpbCA9IGZhbHNlLCBzdWNjZXNzOworCisJc3VjY2VzcyA9IHRydWU7CisKKwkvKiB1cGRhdGUgaGFuZ2NoZWNrICovCisJZncud2xhbi5sYXN0X3N1cGVyX251bVtxaWR4XSA9IDA7CisKKwkvKgorCSAqIE5vdGU6CisJICogVGhlcmUgY291bGQgYmUgYSBjb3JuZXIgY2FzZSB3aGVuIHRoZSBUWEZBSUwgaXMgc2V0CisJICogZXZlbiB0aG91Z2ggdGhlIGZyYW1lIHdhcyBwcm9wZXJseSBBQ0tlZCBieSB0aGUgcGVlcjoKKwkgKiAgIGEgQmxvY2tBY2tSZXEgd2l0aCB0aGUgaW1tZWRpYXRlIHBvbGljeSB3aWxsIGNhdXNlCisJICogICB0aGUgcmVjZWl2aW5nIHBlZXIgdG8gcHJvZHVjZSBhIEJsb2NrQUNLIHVuZm9ydHVuYXRlbHkKKwkgKiAgIHRoZSBNQUMgaW4gdGhpcyBjaGlwIHNlZW1zIHRvIGJlIGV4cGVjdGluZyBhIGxlZ2FjeQorCSAqICAgQUNLIGFuZCBtYXJrcyB0aGUgQkFSIGFzIGZhaWxlZCEKKwkgKi8KKworCWlmICghIShkZXNjLT5jdHJsICYgQVI5MTcwX0NUUkxfRkFJTCkpIHsKKwkJdHhmYWlsID0gISEoZGVzYy0+Y3RybCAmIEFSOTE3MF9DVFJMX1RYRkFJTCk7CisKKwkJLyogcmVzZXQgcmV0cnkgaW5kaWNhdG9yIGZsYWdzICovCisJCWRlc2MtPmN0cmwgJj0gfihBUjkxNzBfQ1RSTF9UWEZBSUwgfCBBUjkxNzBfQ1RSTF9CQUZBSUwpOworCisJCS8qCisJCSAqIE5vdGU6IHdsYW5fdHhfY29uc3VtZV9yZXRyeSB3aWxsIG92ZXJyaWRlIHRoZSBvbGQKKwkJICogcGh5IFtDQ0ssT0ZETSwgSFQsIEJXMjAvNDAsIE1DUy4uLl0gYW5kIG1hYyB2ZWN0b3JzCisJCSAqIFtBTVBEVSxSVFMvQ1RTLC4uLl0gdGhlcmVmb3JlIGJlIGNhcmVmdWwgd2hlbiB0aGV5CisJCSAqIGFyZSB1c2VkLgorCQkgKi8KKwkJaWYgKHdsYW5fdHhfY29uc3VtZV9yZXRyeShzdXBlcikpIHsKKwkJCS8qCisJCQkgKiByZXRyeSBmb3Igc2ltcGxlIGFuZCBhZ2dyZWdhdGVkIDgwMi4xMSBmcmFtZXMuCisJCQkgKgorCQkJICogTm90ZTogV2UgbXVzdCBub3QgbWVzcyB1cCB0aGUgb3JpZ2luYWwgZnJhbWUKKwkJCSAqIG9yZGVyLgorCQkJICovCisKKwkJCWlmICghc3VwZXItPmYuaGRyLm1hYy5hbXBkdSkgeworCQkJCS8qCisJCQkJICogODAyLjExIC0gNy4xLjMuMS41LgorCQkJCSAqIHNldCAiUmV0cnkgRmllbGQiIGZvciBjb25zZWN1dGl2ZSBhdHRlbXB0cworCQkJCSAqCisJCQkJICogTm90ZTogRm9yIEFNUERVIHNlZToKKwkJCQkgKiA4MDIuMTFuIDkuOS4xLjYgIlJldHJhbnNtaXQgUHJvY2VkdXJlcyIKKwkJCQkgKi8KKwkJCQlzdXBlci0+Zi5kYXRhLmkzZS5mcmFtZV9jb250cm9sIHw9CisJCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1JFVFJZKTsKKwkJCX0KKworCQkJaWYgKHR4ZmFpbCkgeworCQkJCS8qIE5vcm1hbCBUWCBGYWlsdXJlICovCisKKwkJCQkvKiBkZW1pc2UgZGVzY3JpcHRvciBvd25lcnNoaXAgYmFjayB0byB0aGUgaGFyZHdhcmUgKi8KKwkJCQlkbWFfcmVhcm0oZGVzYyk7CisKKwkJCQkvKgorCQkJCSAqIEFuZCB0aGlzIHdpbGwgZ2V0IHRoZSBxdWV1ZSBnb2luZyBhZ2Fpbi4KKwkJCQkgKiBUbyB1bmRlcnN0YW5kIHdoeTogeW91IGhhdmUgdG8gZ2V0IHRoZSBIVworCQkJCSAqIHNwZWNzLi4uIEJ1dCBzYWRseSBJIG5ldmVyIHNhdyB0aGVtLgorCQkJCSAqLworCQkJCXdsYW5fdHh1bnN0dWNrKHFpZHgpOworCisJCQkJLyogYWJvcnQgY3ljbGUgLSB0aGlzIGlzIG5lY2Vzc2FyeSBkdWUgdG8gSFcgZGVzaWduICovCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQkvKiAoSFQtKSBCbG9ja0FDSyBmYWlsdXJlICovCisKKwkJCQkvKgorCQkJCSAqIFVubGluayB0aGUgZmFpbGVkIGF0dGVtcHQgYW5kIHB1dCBpdCBpbnRvCisJCQkJICogdGhlIHJldHJ5IHF1ZXVlLiBUaGUgY2FsbGVyIHJvdXRpbmUgbXVzdAorCQkJCSAqIGJlIGF3YXJlIG9mIHRoaXMgc28gdGhlIGZyYW1lcyBkb24ndCBnZXQgbG9zdC4KKwkJCQkgKi8KKworI2lmbmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVRworCQkJCWRtYV91bmxpbmtfaGVhZChxdWV1ZSk7CisjZWxzZSAvKiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVRyAqLworCQkJCUJVR19PTihkbWFfdW5saW5rX2hlYWQocXVldWUpICE9IGRlc2MpOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHICovCisJCQkJZG1hX3B1dCgmZncud2xhbi50eF9yZXRyeSwgZGVzYyk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBvdXQgb2YgZnJhbWUgYXR0ZW1wdHMgLSBkaXNjYXJkIGZyYW1lICovCisJCQlzdWNjZXNzID0gZmFsc2U7CisJCX0KKwl9CisKKyNpZm5kZWYgQ09ORklHX0NBUkw5MTcwRldfREVCVUcKKwlkbWFfdW5saW5rX2hlYWQocXVldWUpOworI2Vsc2UgLyogQ09ORklHX0NBUkw5MTcwRldfREVCVUcgKi8KKwlCVUdfT04oZG1hX3VubGlua19oZWFkKHF1ZXVlKSAhPSBkZXNjKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVRyAqLworCWlmICh0eGZhaWwpIHsKKwkJLyoKKwkJICogSXNzdWUgdGhlIHF1ZXVlIGJ1bXAsCisJCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyBpbiBjYXNlIHRoaXMgd2FzIHRoZSBmcmFtZSdzIGxhc3QKKwkJICogcG9zc2libGUgcmV0cnkgYXR0ZW1wdCBhbmQgaXQgdW5mb3J0dW5hdGVseTogaXQgZmFpbGVkLgorCQkgKi8KKworCQl3bGFuX3R4dW5zdHVjayhxaWR4KTsKKwl9CisKKwl1bmhpZGVfc3VwZXIoZGVzYyk7CisKKwlpZiAodW5saWtlbHkoc3VwZXIgPT0gZncud2xhbi5md19kZXNjX2RhdGEpKSB7CisJCWZ3LndsYW4uZndfZGVzYyA9IGRlc2M7CisJCWZ3LndsYW4uZndfZGVzY19hdmFpbGFibGUgPSAxOworCisJCWlmIChmdy53bGFuLmZ3X2Rlc2NfY2FsbGJhY2spCisJCQlmdy53bGFuLmZ3X2Rlc2NfY2FsbGJhY2soc3VwZXIsIHN1Y2Nlc3MpOworCisJCXJldHVybiB0cnVlOworCX0KKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX0NBQl9RVUVVRQorCWlmICh1bmxpa2VseShzdXBlci0+cy5jYWIpKQorCQlmdy53bGFuLmNhYl9xdWV1ZV9sZW5bc3VwZXItPnMudmlmX2lkXS0tOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0NBQl9RVUVVRSAqLworCisJd2xhbl90eF9jb21wbGV0ZShzdXBlciwgc3VjY2Vzcyk7CisKKwlpZiAoaWVlZTgwMjExX2lzX2JhY2tfcmVxKHN1cGVyLT5mLmRhdGEuaTNlLmZyYW1lX2NvbnRyb2wpKSB7CisJCWZ3LndsYW4ucXVldWVkX2Jhci0tOworCX0KKworCS8qIHJlY3ljbGUgZnJlZWQgZGVzY3JpcHRvcnMgKi8KKwlkbWFfcmVjbGFpbSgmZncucHRhLmRvd25fcXVldWUsIGRlc2MpOworCWRvd25fdHJpZ2dlcigpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfdHhfY29tcGxldGlvbih2b2lkKQoreworCXN0cnVjdCBkbWFfZGVzYyAqZGVzYzsKKwlpbnQgaTsKKworCWZvciAoaSA9IEFSOTE3MF9UWFFfU1BFQ0lBTDsgaSA+PSBBUjkxNzBfVFhRMDsgaS0tKSB7CisJCV9fd2hpbGVfZGVzY19iaXRzKGRlc2MsICZmdy53bGFuLnR4X3F1ZXVlW2ldLCBBUjkxNzBfT1dOX0JJVFNfU1cpIHsKKwkJCWlmICghd2xhbl90eF9zdGF0dXMoJmZ3LndsYW4udHhfcXVldWVbaV0sIGRlc2MpKSB7CisJCQkJLyogdGVybWluYXRpb24gcmVxdWVzdGVkLiAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJd2xhbl90eF9hbXBkdV9yZXNldChpKTsKKworCQlmb3JfZWFjaF9kZXNjKGRlc2MsICZmdy53bGFuLnR4X3JldHJ5KQorCQkJX193bGFuX3R4KGRlc2MpOworCisJCXdsYW5fdHhfYW1wZHVfZW5kKGkpOworCQlpZiAoIXF1ZXVlX2VtcHR5KCZmdy53bGFuLnR4X3F1ZXVlW2ldKSkKKwkJCXdsYW5fdHJpZ2dlcihCSVQoaSkpOworCX0KK30KKwordm9pZCBfX2hvdCB3bGFuX3R4KHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJmcmFtZSAqc3VwZXIgPSBERVNDX1BBWUxPQUQoZGVzYyk7CisKKwlpZiAoaWVlZTgwMjExX2lzX2JhY2tfcmVxKHN1cGVyLT5mLmRhdGEuaTNlLmZyYW1lX2NvbnRyb2wpKSB7CisJCWZ3LndsYW4ucXVldWVkX2JhcisrOworCX0KKworCS8qIGluaXRpYWxpemUgcmF0ZSBjb250cm9sIHN0cnVjdCAqLworCXN1cGVyLT5zLnJpeCA9IDA7CisJc3VwZXItPnMuY250ID0gMTsKKwloaWRlX3N1cGVyKGRlc2MpOworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfQ0FCX1FVRVVFCisJaWYgKHVubGlrZWx5KHN1cGVyLT5zLmNhYikpIHsKKwkJZncud2xhbi5jYWJfcXVldWVfbGVuW3N1cGVyLT5zLnZpZl9pZF0rKzsKKwkJZG1hX3B1dCgmZncud2xhbi5jYWJfcXVldWVbc3VwZXItPnMudmlmX2lkXSwgZGVzYyk7CisJCXJldHVybjsKKwl9CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfQ0FCX1FVRVVFICovCisKKwlfd2xhbl90eChkZXNjKTsKKwlfX3dsYW5fdHgoZGVzYyk7CisJd2xhbl90cmlnZ2VyKEJJVChzdXBlci0+cy5xdWV1ZSkpOworfQorCit2b2lkIHdsYW5fdHhfZncoc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZGVzYyAqc3VwZXIsIGZ3X2Rlc2NfY2FsbGJhY2tfdCBjYikKK3sKKwlpZiAoIWZ3LndsYW4uZndfZGVzY19hdmFpbGFibGUpCisJCXJldHVybjsKKworCWZ3LndsYW4uZndfZGVzY19hdmFpbGFibGUgPSAwOworCisJLyogRm9ybWF0IEJsb2NrQWNrICovCisJZncud2xhbi5md19kZXNjLT5jdHJsID0gQVI5MTcwX0NUUkxfRlNfQklUIHwgQVI5MTcwX0NUUkxfTFNfQklUOworCWZ3LndsYW4uZndfZGVzYy0+c3RhdHVzID0gQVI5MTcwX09XTl9CSVRTX1NXOworCisJZncud2xhbi5md19kZXNjLT50b3RhbExlbiA9IGZ3LndsYW4uZndfZGVzYy0+ZGF0YVNpemUgPSBzdXBlci0+bGVuOworCWZ3LndsYW4uZndfZGVzY19kYXRhID0gZncud2xhbi5md19kZXNjLT5kYXRhQWRkciA9IHN1cGVyOworCWZ3LndsYW4uZndfZGVzYy0+bmV4dEFkZHIgPSBmdy53bGFuLmZ3X2Rlc2MtPmxhc3RBZGRyID0KKwkJZncud2xhbi5md19kZXNjOworCWZ3LndsYW4uZndfZGVzY19jYWxsYmFjayA9IGNiOworCXdsYW5fdHgoZncud2xhbi5md19kZXNjKTsKK30KKworc3RhdGljIHZvaWQgd2xhbl9zZW5kX2J1ZmZlcmVkX2JhKHZvaWQpCit7CisJc3RydWN0IGNhcmw5MTcwX3R4X2JhX3N1cGVyZnJhbWUgKmJhZiA9ICZkbWFfbWVtLnJlc2VydmVkLmJhLmJhOworCXN0cnVjdCBpZWVlODAyMTFfYmEgKmJhID0gKHN0cnVjdCBpZWVlODAyMTFfYmEgKikgJmJhZi0+Zi5iYTsKKwlzdHJ1Y3QgY2FybDkxNzBfYmFyX2N0eCAqY3R4OworCisJaWYgKGxpa2VseSghZncud2xhbi5xdWV1ZWRfYmEpKQorCQlyZXR1cm47CisKKwkvKiB0aGVyZSdzIG5vIHBvaW50IHRvIGNvbnRpbnVlIHdoZW4gdGhlIGJhX2Rlc2MgaXMgbm90IGF2YWlsYWJsZS4gKi8KKwlpZiAoIWZ3LndsYW4uZndfZGVzY19hdmFpbGFibGUpCisJCXJldHVybjsKKworCWN0eCA9ICZmdy53bGFuLmJhX2NhY2hlW2Z3LndsYW4uYmFfaGVhZF9pZHhdOworCWZ3LndsYW4uYmFfaGVhZF9pZHgrKzsKKwlmdy53bGFuLmJhX2hlYWRfaWR4ICU9IENPTkZJR19DQVJMOTE3MEZXX0JBQ0tfUkVRU19OVU07CisJZncud2xhbi5xdWV1ZWRfYmEtLTsKKworCWJhZi0+cy5sZW4gPSBzaXplb2Yoc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZGVzYykgKworCQkgICAgIHNpemVvZihzdHJ1Y3QgYXI5MTcwX3R4X2h3ZGVzYykgKworCQkgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2JhKTsKKwliYWYtPnMucmlbMF0udHJpZXMgPSAxOworCWJhZi0+cy5jb29raWUgPSAwOworCWJhZi0+cy5xdWV1ZSA9IEFSOTE3MF9UWFFfVk87CisJYmFmLT5mLmhkci5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9iYSkgKyBGQ1NfTEVOOworCisJYmFmLT5mLmhkci5tYWMubm9fYWNrID0gMTsKKworCWJhZi0+Zi5oZHIucGh5Lm1vZHVsYXRpb24gPSAxOyAvKiBPRkRNICovCisJYmFmLT5mLmhkci5waHkudHhfcG93ZXIgPSAzNDsgLyogMTcgZEJtICovCisJYmFmLT5mLmhkci5waHkuY2hhaW5zID0gMTsKKwliYWYtPmYuaGRyLnBoeS5tY3MgPSBBUjkxNzBfVFhSWF9QSFlfUkFURV9PRkRNXzZNOworCisJLyogZm9ybWF0IG91dGdvaW5nIEJBICovCisJYmEtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX0JBQ0spOworCWJhLT5kdXJhdGlvbiA9IGNwdV90b19sZTE2KDApOworCisJLyogdGhlIEJBUiBjb250YWlucyBhbGwgbmVjZXNzYXJ5IE1BQ3MuIEFsbCB3ZSBuZWVkIGlzIHRvIHN3YXAgdGhlbSAqLworCW1lbWNweShiYS0+cmEsIGN0eC0+dGEsIDYpOworCW1lbWNweShiYS0+dGEsIGN0eC0+cmEsIDYpOworCisJLyoKKwkgKiBVbmZvcnR1bmF0ZWx5LCB3ZSBjYW5ub3QgbG9vayBpbnRvIHRoZSBoYXJkd2FyZSdzIHNjb3JlYm9hcmQuCisJICogVGhlcmVmb3JlIHdlIGhhdmUgdG8gcHJvY2VlZCBhcyBkZXNjcmliZWQgaW4gODAyLjExbiA5LjEwLjcuNQorCSAqIGFuZCBzZW5kIGEgbnVsbCBCbG9ja0Fjay4KKwkgKi8KKwltZW1zZXQoYmEtPmJpdG1hcCwgMHgwLCBzaXplb2YoYmEtPmJpdG1hcCkpOworCisJLyoKKwkgKiBCb3RoLCB0aGUgb3JpZ2luYWwgZmlybWFyZSBhbmQgYXRoOWsgc2V0IHRoZSBOTyBBQ0sgZmxhZyBpbgorCSAqIHRoZSBCQSBBY2sgUG9saWN5IHN1YmZpZWxkLgorCSAqLworCWJhLT5jb250cm9sID0gY3R4LT5jb250cm9sIHwgY3B1X3RvX2xlMTYoMSk7CisJYmEtPnN0YXJ0X3NlcV9udW0gPSBjdHgtPnN0YXJ0X3NlcV9udW07CisJd2xhbl90eF9mdygmYmFmLT5zLCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBjYXJsOTE3MF9iYXJfY3R4ICp3bGFuX2dldF9iYXJfY2FjaGVfYnVmZmVyKHZvaWQpCit7CisJc3RydWN0IGNhcmw5MTcwX2Jhcl9jdHggKnRtcDsKKworCXRtcCA9ICZmdy53bGFuLmJhX2NhY2hlW2Z3LndsYW4uYmFfdGFpbF9pZHhdOworCWZ3LndsYW4uYmFfdGFpbF9pZHgrKzsKKwlmdy53bGFuLmJhX3RhaWxfaWR4ICU9IENPTkZJR19DQVJMOTE3MEZXX0JBQ0tfUkVRU19OVU07CisJaWYgKGZ3LndsYW4ucXVldWVkX2JhIDwgQ09ORklHX0NBUkw5MTcwRldfQkFDS19SRVFTX05VTSkKKwkJZncud2xhbi5xdWV1ZWRfYmErKzsKKworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9iYXIoc3RydWN0IGRtYV9kZXNjICpkZXNjIF9fdW51c2VkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkgICAgICAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG1hY19lcnIpCit7CisJc3RydWN0IGllZWU4MDIxMV9iYXIgKmJhcjsKKwlzdHJ1Y3QgY2FybDkxNzBfYmFyX2N0eCAqY3R4OworCisJaWYgKHVubGlrZWx5KG1hY19lcnIpKSB7CisJCS8qCisJCSAqIFRoaXMgY2hlY2sgZG9lcyBhIG51bWJlciBvZiB0aGluZ3M6CisJCSAqIDEuIGNoZWNrcyBpZiB0aGUgZnJhbWUgaXMgaW4gZ29vZCBuaWNrCisJCSAqIDIuIGNoZWNrcyBpZiB0aGUgUkEgKE1BQykgbWF0Y2hlcworCQkgKi8KKwkJcmV0dXJuIDsKKwl9CisKKwlpZiAodW5saWtlbHkobGVuIDwgKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2JhcikgKyBGQ1NfTEVOKSkpIHsKKwkJLyoKKwkJICogU25lYWt5LCBjb3JydXB0ZWQgQkFScy4uLiBidXQgbm90IHdpdGggdXMhCisJCSAqLworCisJCXJldHVybiA7CisJfQorCisJYmFyID0gKHZvaWQgKikgaGRyOworCisJaWYgKChiYXItPmNvbnRyb2wgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfQkFSX0NUUkxfTVVMVElfVElEKSkgfHwKKwkgICAgIShiYXItPmNvbnRyb2wgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfQkFSX0NUUkxfQ0JNVElEX0NPTVBSRVNTRURfQkEpKSkgeworCQkvKiBub3QgaW1wbGVtZW50ZWQgeWV0ICovCisKKwkJcmV0dXJuIDsKKwl9CisKKwljdHggPSB3bGFuX2dldF9iYXJfY2FjaGVfYnVmZmVyKCk7CisKKwltZW1jcHkoY3R4LT5yYSwgYmFyLT5yYSwgNik7CisJbWVtY3B5KGN0eC0+dGEsIGJhci0+dGEsIDYpOworCWN0eC0+Y29udHJvbCA9IGJhci0+Y29udHJvbDsKKwljdHgtPnN0YXJ0X3NlcV9udW0gPSBiYXItPnN0YXJ0X3NlcV9udW07Cit9CisKK3N0YXRpYyB2b2lkIHdsYW5fY2hlY2tfcnhfb3ZlcnJ1bih2b2lkKQoreworCXVpbnQzMl90IG92ZXJydW5zLCB0b3RhbDsKKworCWZ3LnRhbGx5LnJ4X3RvdGFsICs9IHRvdGFsID0gZ2V0KEFSOTE3MF9NQUNfUkVHX1JYX1RPVEFMKTsKKwlmdy50YWxseS5yeF9vdmVycnVuICs9IG92ZXJydW5zID0gZ2V0KEFSOTE3MF9NQUNfUkVHX1JYX09WRVJSVU4pOworCWlmICh1bmxpa2VseShvdmVycnVucykpIHsKKwkJaWYgKG92ZXJydW5zID09IHRvdGFsKSB7CisJCQlEQkcoIlJYIE92ZXJydW4iKTsKKwkJCWZ3LndsYW4ubWFjX3Jlc2V0Kys7CisJCX0KKworCQl3bGFuX3RyaWdnZXIoQVI5MTcwX0RNQV9UUklHR0VSX1JYUSk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHdsYW5fcnhfZmlsdGVyKHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXVuc2lnbmVkIGludCBkYXRhX2xlbjsKKwl1bnNpZ25lZCBpbnQgcnhfZmlsdGVyOworCXVuc2lnbmVkIGludCBtYWNfZXJyOworCisJZGF0YV9sZW4gPSBhcjkxNzBfZ2V0X3J4X21wZHVfbGVuKGRlc2MpOworCW1hY19lcnIgPSBhcjkxNzBfZ2V0X3J4X21hY3N0YXR1c19lcnJvcihkZXNjKTsKKworI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfQkFEIChBUjkxNzBfUlhfRVJST1JfRkNTIHwgQVI5MTcwX1JYX0VSUk9SX1BMQ1ApCisKKwlpZiAodW5saWtlbHkoZGF0YV9sZW4gPCAoNCArIDYgKyBGQ1NfTEVOKSB8fAorCSAgICBkZXNjLT50b3RhbExlbiA+IENPTkZJR19DQVJMOTE3MEZXX1JYX0ZSQU1FX0xFTikgfHwKKwkgICAgbWFjX2VyciAmIEFSOTE3MF9SWF9FUlJPUl9CQUQpIHsKKwkJLyoKKwkJICogVGhpcyBmcmFtZSBpcyB0b28gZGFtYWdlZCB0byBkbyBhbnl0aGluZworCQkgKiB1c2VmdWwgd2l0aCBpdC4KKwkJICovCisKKwkJcmV0dXJuIENBUkw5MTcwX1JYX0ZJTFRFUl9CQUQ7CisJfQorCisJcnhfZmlsdGVyID0gMDsKKwlpZiAobWFjX2VyciAmIEFSOTE3MF9SWF9FUlJPUl9XUk9OR19SQSkKKwkJcnhfZmlsdGVyIHw9IENBUkw5MTcwX1JYX0ZJTFRFUl9PVEhFUl9SQTsKKworCWlmIChtYWNfZXJyICYgQVI5MTcwX1JYX0VSUk9SX0RFQ1JZUFQpCisJCXJ4X2ZpbHRlciB8PSBDQVJMOTE3MF9SWF9GSUxURVJfREVDUllfRkFJTDsKKworCWhkciA9IGFyOTE3MF9nZXRfcnhfaTNlKGRlc2MpOworCWlmIChsaWtlbHkoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwkJcnhfZmlsdGVyIHw9IENBUkw5MTcwX1JYX0ZJTFRFUl9EQVRBOworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2N0bChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCXN3aXRjaCAobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JBQ0tfUkVROgorCQkJaGFuZGxlX2JhcihkZXNjLCBoZHIsIGRhdGFfbGVuLCBtYWNfZXJyKTsKKwkJCXJ4X2ZpbHRlciB8PSBDQVJMOTE3MF9SWF9GSUxURVJfQ1RMX0JBQ0tSOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BTUE9MTDoKKwkJCXJ4X2ZpbHRlciB8PSBDQVJMOTE3MF9SWF9GSUxURVJfQ1RMX1BTUE9MTDsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9CQUNLOgorCQkJaWYgKGZ3LndsYW4ucXVldWVkX2JhcikgeworCQkJCS8qCisJCQkJICogRG9uJ3QgZmlsdGVyIGJsb2NrIGFja3Mgd2hlbiB0aGUgYXBwbGljYXRpb24KKwkJCQkgKiBoYXMgcXVldWVkIEJBUnMuIFRoaXMgaXMgYmVjYXVzZSB0aGUgZmlybXdhcmUKKwkJCQkgKiBjYW4ndCBkbyB0aGUgYWNjb3V0aW5nIGFuZCB0aGUgYXBwbGljYXRpb24KKwkJCQkgKiBoYXMgdG8gc29ydCBvdXQgaWYgdGhlIEJBIGJlbG9uZ3MgdG8gYW55IEJBUnMuCisJCQkJICovCisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBvdGhlcndpc2UgZmFsbCB0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlyeF9maWx0ZXIgfD0gQ0FSTDkxNzBfUlhfRklMVEVSX0NUTF9PVEhFUjsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogaWVlZTgwMjExX2lzX21nbXQgKi8KKwkJcnhfZmlsdGVyIHw9IENBUkw5MTcwX1JYX0ZJTFRFUl9NR01UOworCX0KKworCWlmICh1bmxpa2VseShmdy5zdXNwZW5kX21vZGUgPT0gQ0FSTDkxNzBfSE9TVF9TVVNQRU5ERUQpKSB7CisJCXdvbF9yeChyeF9maWx0ZXIsIGhkciwgbWluKGRhdGFfbGVuLAorCQkJKHVuc2lnbmVkIGludClBUjkxNzBfQkxPQ0tfU0laRSkpOworCX0KKworI3VuZGVmIEFSOTE3MF9SWF9FUlJPUl9CQUQKKworCXJldHVybiByeF9maWx0ZXI7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9yeCh2b2lkKQoreworCXN0cnVjdCBkbWFfZGVzYyAqZGVzYzsKKworCWZvcl9lYWNoX2Rlc2Nfbm90X2JpdHMoZGVzYywgJmZ3LndsYW4ucnhfcXVldWUsIEFSOTE3MF9PV05fQklUU19IVykgeworCQlpZiAoISh3bGFuX3J4X2ZpbHRlcihkZXNjKSAmIGZ3LndsYW4ucnhfZmlsdGVyKSkgeworCQkJZG1hX3B1dCgmZncucHRhLnVwX3F1ZXVlLCBkZXNjKTsKKwkJCXVwX3RyaWdnZXIoKTsKKwkJfSBlbHNlIHsKKwkJCWRtYV9yZWNsYWltKCZmdy53bGFuLnJ4X3F1ZXVlLCBkZXNjKTsKKwkJCXdsYW5fdHJpZ2dlcihBUjkxNzBfRE1BX1RSSUdHRVJfUlhRKTsKKwkJfQorCX0KK30KKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX0NBQl9RVUVVRQordm9pZCB3bGFuX2NhYl9mbHVzaF9xdWV1ZShjb25zdCB1bnNpZ25lZCBpbnQgdmlmKQoreworCXN0cnVjdCBkbWFfcXVldWUgKmNhYl9xdWV1ZSA9ICZmdy53bGFuLmNhYl9xdWV1ZVt2aWZdOworCXN0cnVjdCBkbWFfZGVzYyAqZGVzYzsKKworCS8qIG1vdmUgcXVldWVkIGZyYW1lcyBpbnRvIHRoZSBtYWluIHR4IHF1ZXVlcyAqLworCWZvcl9lYWNoX2Rlc2MoZGVzYywgY2FiX3F1ZXVlKSB7CisJCXN0cnVjdCBjYXJsOTE3MF90eF9zdXBlcmZyYW1lICpzdXBlciA9IGdldF9zdXBlcihkZXNjKTsKKwkJaWYgKCFxdWV1ZV9lbXB0eShjYWJfcXVldWUpKSB7CisJCQkvKgorCQkJICogU2V0IE1PUkVEQVRBIGZsYWcgZm9yIGFsbCwKKwkJCSAqIGJ1dCB0aGUgbGFzdCBxdWV1ZWQgZnJhbWUuCisJCQkgKiBzZWU6IDgwMi4xMS0yMDA3IDExLjIuMS41IGYpCisJCQkgKgorCQkJICogVGhpcyBpcyBhY3R1YWxseSB0aGUgcmVhc29uIHRvIHdoeQorCQkJICogd2UgbmVlZCB0byBwcmV2ZW50IHRoZSByZWVudHJ5LgorCQkJICovCisKKwkJCXN1cGVyLT5mLmRhdGEuaTNlLmZyYW1lX2NvbnRyb2wgfD0KKwkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7CisJCX0gZWxzZSB7CisJCQlzdXBlci0+Zi5kYXRhLmkzZS5mcmFtZV9jb250cm9sICY9CisJCQkJY3B1X3RvX2xlMTYofklFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKKwkJfQorCisJCS8qIHJlYWR5IHRvIHJvbGwhICovCisJCV93bGFuX3R4KGRlc2MpOworCQlfX3dsYW5fdHgoZGVzYyk7CisJCXdsYW5fdHJpZ2dlcihCSVQoc3VwZXItPnMucXVldWUpKTsKKwl9Cit9CisKK3N0YXRpYyB1aW50OF90ICpiZWFjb25fZmluZF9pZSh1aW50OF90IGllLCB2b2lkICphZGRyLAorCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gYWRkcjsKKwl1aW50OF90ICpwb3MsICplbmQ7CisKKwlwb3MgPSBtZ210LT51LmJlYWNvbi52YXJpYWJsZTsKKwllbmQgPSAodWludDhfdCAqKSAoKHVuc2lnbmVkIGxvbmcpbWdtdCArIChsZW4gLSBGQ1NfTEVOKSk7CisJd2hpbGUgKHBvcyA8IGVuZCkgeworCQlpZiAocG9zICsgMiArIHBvc1sxXSA+IGVuZCkKKwkJCXJldHVybiBOVUxMOworCisJCWlmIChwb3NbMF0gPT0gaWUpCisJCQlyZXR1cm4gcG9zOworCisJCXBvcyArPSBwb3NbMV0gKyAyOworCX0KKworCXJldHVybiBOVUxMOworfQorCit2b2lkIHdsYW5fbW9kaWZ5X2JlYWNvbihjb25zdCB1bnNpZ25lZCBpbnQgdmlmLAorCWNvbnN0IHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVpbnQ4X3QgKl9pZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqaWU7CisKKwlfaWUgPSBiZWFjb25fZmluZF9pZShXTEFOX0VJRF9USU0sICh2b2lkICopYWRkciwgbGVuKTsKKwlpZiAobGlrZWx5KF9pZSkpIHsKKwkJaWUgPSAoc3RydWN0IGllZWU4MDIxMV90aW1faWUgKikgJl9pZVsyXTsKKworCQlpZiAoIXF1ZXVlX2VtcHR5KCZmdy53bGFuLmNhYl9xdWV1ZVt2aWZdKSAmJiAoaWUtPmR0aW1fY291bnQgPT0gMCkpIHsKKwkJCS8qIHNjaGVkdWxlIERUSU0gdHJhbnNmZXIgKi8KKwkJCWZ3LndsYW4uY2FiX2ZsdXNoX3RyaWdnZXJbdmlmXSA9IENBUkw5MTcwX0NBQl9UUklHR0VSX0FSTUVEOworCQl9IGVsc2UgaWYgKChmdy53bGFuLmNhYl9xdWV1ZV9sZW5bdmlmXSA9PSAwKSAmJiAoZncud2xhbi5jYWJfZmx1c2hfdHJpZ2dlclt2aWZdKSkgeworCQkJLyogdW5kbyBhbGwgY2hhbmNlcyB0byB0aGUgYmVhY29uIHN0cnVjdHVyZSAqLworCQkJaWUtPmJpdG1hcF9jdHJsICY9IH4weDE7CisJCQlmdy53bGFuLmNhYl9mbHVzaF90cmlnZ2VyW3ZpZl0gPSBDQVJMOTE3MF9DQUJfVFJJR0dFUl9FTVBUWTsKKwkJfQorCisJCS8qIFRyaWdnZXJlZCBieSBDQVJMOTE3MF9DQUJfVFJJR0dFUl9BUk1FRCB8fCBDQVJMOTE3MF9DQUJfVFJJR0dFUl9ERUZFUiAqLworCQlpZiAoZncud2xhbi5jYWJfZmx1c2hfdHJpZ2dlclt2aWZdKSB7CisJCQkvKiBTZXQgdGhlIGFsbWlnaHR5IE11bHRpY2FzdCBUcmFmZmljIEluZGljYXRpb24gQml0LiAqLworCQkJaWUtPmJpdG1hcF9jdHJsIHw9IDB4MTsKKwkJfQorCX0KKworCS8qCisJICogSWRlYWxseSwgdGhlIHNlcXVlbmNlIG51bWJlciBzaG91bGQgYmUgYXNzaWduZWQgYnkgdGhlIFRYIGFyYml0ZXIKKwkgKiBoYXJkd2FyZS4gQnV0IEFGQUlLIHRoYXQncyBub3QgcG9zc2libGUsIHNvIHdlIGhhdmUgdG8gZ28gZm9yIHRoZQorCSAqIG5leHQgYmVzdCB0aGluZyBhbmQgd3JpdGUgaXQgaW50byB0aGUgYmVhY29uIGZpZm8gZHVyaW5nIHRoZSBvcGVuCisJICogYmVhY29uIHVwZGF0ZSB3aW5kb3cuCisJICovCisKKwl3bGFuX2Fzc2lnbl9zZXEoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopYWRkciwgdmlmKTsKK30KKworc3RhdGljIHZvaWQgd2xhbl9zZW5kX2J1ZmZlcmVkX2NhYih2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IENBUkw5MTcwX0lOVEZfTlVNOyBpKyspIHsKKwkJaWYgKHVubGlrZWx5KGZ3LndsYW4uY2FiX2ZsdXNoX3RyaWdnZXJbaV0gPT0gQ0FSTDkxNzBfQ0FCX1RSSUdHRVJfQVJNRUQpKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBoYXJkY29kZWQgaW50byBjYXJsOTE3MHVzYiBkcml2ZXIuCisJCQkgKgorCQkJICogVGhlIGRyaXZlciBtdXN0IHNldCB0aGUgUFJFVEJUVCBldmVudCB0byBiZWFjb25faW50ZXJ2YWwgLQorCQkJICogQ0FSTDkxNzBfUFJFVEJUVF9LVVMgKHVzdWFsbHkgNikgS3VzLgorCQkJICoKKwkJCSAqIEJ1dCBzdGlsbCwgd2UgY2FuIG9ubHkgZG8gc28gbXVjaCBhYm91dCA4MDIuMTEtMjAwNyA5LjMuMi4xICYKKwkJCSAqIDExLjIuMS42LiBMZXQncyBob3BlIHRoZSBjdXJyZW50IHNvbHV0aW9uIGlzIGFkZXF1YXRlIGVub3VnaC4KKwkJCSAqLworCisJCQlpZiAoaXNfYWZ0ZXJfbXNlY3MoZncud2xhbi5jYWJfZmx1c2hfdGltZSwgKENBUkw5MTcwX1RCVFRfREVMVEEpKSkgeworCQkJCXdsYW5fY2FiX2ZsdXNoX3F1ZXVlKGkpOworCisJCQkJLyoKKwkJCQkgKiBUaGlzIHByZXZlbnRzIHRoZSBjb2RlIGZyb20gc2VuZGluZyBuZXcgQkMvTUMgZnJhbWVzCisJCQkJICogd2hpY2ggd2VyZSBxdWV1ZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGJ1ZmZlcmVkIHRyYWZmaWMKKwkJCQkgKiBoYXMgYmVlbiBzZW50IG91dC4uLiBUaGV5IHdpbGwgaGF2ZSB0byB3YWl0IHVudGlsIHRoZQorCQkJCSAqIG5leHQgRFRJTSBiZWFjb24gY29tZXMgYWxvbmcuCisJCQkJICovCisJCQkJZncud2xhbi5jYWJfZmx1c2hfdHJpZ2dlcltpXSA9IENBUkw5MTcwX0NBQl9UUklHR0VSX0RFRkVSOworCQkJfQorCQl9CisKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfQ0FCX1FVRVVFICovCisKK3N0YXRpYyB2b2lkIGhhbmRsZV9iZWFjb25fY29uZmlnKHZvaWQpCit7CisJdWludDMyX3QgYmNuX2NvdW50OworCisJYmNuX2NvdW50ID0gZ2V0KEFSOTE3MF9NQUNfUkVHX0JDTl9DT1VOVCk7CisJc2VuZF9jbWRfdG9faG9zdCg0LCBDQVJMOTE3MF9SU1BfQkVBQ09OX0NPTkZJRywgMHgwMCwKKwkJCSAodWludDhfdCAqKSAmYmNuX2NvdW50KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3ByZXRidHQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19DQUJfUVVFVUUKKwlmdy53bGFuLmNhYl9mbHVzaF90aW1lID0gZ2V0X2Nsb2NrX2NvdW50ZXIoKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19DQUJfUVVFVUUgKi8KKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1JBRElPX0ZVTkNUSU9OUworCXJmX3BzbSgpOworCisJc2VuZF9jbWRfdG9faG9zdCg0LCBDQVJMOTE3MF9SU1BfUFJFVEJUVCwgMHgwMCwKKwkJCSAodWludDhfdCAqKSAmZncucGh5LnBzbS5zdGF0ZSk7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfUkFESU9fRlVOQ1RJT05TICovCit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9hdGltKHZvaWQpCit7CisJc2VuZF9jbWRfdG9faG9zdCgwLCBDQVJMOTE3MF9SU1BfQVRJTSwgMHgwMCwgTlVMTCk7Cit9CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVRworc3RhdGljIHZvaWQgaGFuZGxlX3Fvcyh2b2lkKQoreworCS8qCisJICogV2hhdCBpcyB0aGUgUW9TIEJpdCB1c2VkIGZvcj8KKwkgKiBJcyBpdCBvbmx5IGFuIGluZGljYXRvciBmb3IgVFhPUCAmIEJ1cnN0LCBvcgorCSAqIHNob3VsZCB3ZSBkbyBzb21ldGhpbmcgaGVyZT8KKwkgKi8KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3JhZGFyKHZvaWQpCit7CisJc2VuZF9jbWRfdG9faG9zdCgwLCBDQVJMOTE3MF9SU1BfUkFEQVIsIDB4MDAsIE5VTEwpOworfQorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHICovCisKK3N0YXRpYyB2b2lkIHdsYW5famFuaXRvcih2b2lkKQoreworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX0NBQl9RVUVVRQorCXdsYW5fc2VuZF9idWZmZXJlZF9jYWIoKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19DQUJfUVVFVUUgKi8KKworCXdsYW5fc2VuZF9idWZmZXJlZF90eF9zdGF0dXMoKTsKKworCXdsYW5fc2VuZF9idWZmZXJlZF9iYSgpOworCisJd29sX2phbml0b3IoKTsKK30KKwordm9pZCBoYW5kbGVfd2xhbih2b2lkKQoreworCXVpbnQzMl90IGludHI7CisKKwlpbnRyID0gZ2V0KEFSOTE3MF9NQUNfUkVHX0lOVF9DVFJMKTsKKwkvKiBBQ0sgSW50ZXJydXB0ICovCisJc2V0KEFSOTE3MF9NQUNfUkVHX0lOVF9DVFJMLCBpbnRyKTsKKworI2RlZmluZSBIQU5ETEVSKGludHIsIGZsYWcsIGZ1bmMpCQkJXAorCWRvIHsJCQkJCQlcCisJCWlmICgoaW50ciAmIGZsYWcpICE9IDApIHsJCVwKKwkJCWZ1bmMoKTsJCQkJXAorCQl9CQkJCQlcCisJfSB3aGlsZSAoMCkKKworCWludHIgfD0gZncud2xhbi5zb2Z0X2ludDsKKwlmdy53bGFuLnNvZnRfaW50ID0gMDsKKworCUhBTkRMRVIoaW50ciwgQVI5MTcwX01BQ19JTlRfUFJFVEJUVCwgaGFuZGxlX3ByZXRidHQpOworCisJSEFORExFUihpbnRyLCBBUjkxNzBfTUFDX0lOVF9BVElNLCBoYW5kbGVfYXRpbSk7CisKKwlIQU5ETEVSKGludHIsIEFSOTE3MF9NQUNfSU5UX1JYQywgaGFuZGxlX3J4KTsKKworCUhBTkRMRVIoaW50ciwgKEFSOTE3MF9NQUNfSU5UX1RYQyB8IEFSOTE3MF9NQUNfSU5UX1JFVFJZX0ZBSUwpLAorCQloYW5kbGVfdHhfY29tcGxldGlvbik7CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVRworCUhBTkRMRVIoaW50ciwgQVI5MTcwX01BQ19JTlRfUU9TLCBoYW5kbGVfcW9zKTsKKworCUhBTkRMRVIoaW50ciwgQVI5MTcwX01BQ19JTlRfUkFEQVIsIGhhbmRsZV9yYWRhcik7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfREVCVUcgKi8KKworCUhBTkRMRVIoaW50ciwgQVI5MTcwX01BQ19JTlRfQ0ZHX0JDTiwgaGFuZGxlX2JlYWNvbl9jb25maWcpOworCisJaWYgKHVubGlrZWx5KGludHIpKQorCQlEQkcoIlVuaGFuZGxlZCBJbnRlcnJ1cHQgJXhcbiIsICh1bnNpZ25lZCBpbnQpIGludHIpOworCisJd2xhbl9qYW5pdG9yKCk7CisKKyN1bmRlZiBIQU5ETEVSCit9CisKK2VudW0geworCUNBUkw5MTcwRldfVFhfTUFDX0JVTVAgPSA0LAorCUNBUkw5MTcwRldfVFhfTUFDX0RFQlVHID0gNiwKKwlDQVJMOTE3MEZXX1RYX01BQ19SRVNFVCA9IDcsCit9OworCitzdGF0aWMgdm9pZCB3bGFuX2NoZWNrX2hhbmcodm9pZCkKK3sKKwlzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2M7CisJaW50IGk7CisKKwlmb3IgKGkgPSBBUjkxNzBfVFhRX1NQRUNJQUw7IGkgPj0gQVI5MTcwX1RYUTA7IGktLSkgeworCQlpZiAocXVldWVfZW1wdHkoJmZ3LndsYW4udHhfcXVldWVbaV0pKSB7CisJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUuLi4gbW92ZSBhbG9uZyAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBmZXRjaCB0aGUgY3VycmVudCBETUEgcXVldWUgcG9zaXRpb24gKi8KKwkJZGVzYyA9IChzdHJ1Y3QgZG1hX2Rlc2MgKilnZXRfd2xhbl90eHFfYWRkcihpKTsKKworCQkvKiBTdHVjayBmcmFtZSBkZXRlY3Rpb24gKi8KKwkJaWYgKHVubGlrZWx5KERFU0NfUEFZTE9BRChkZXNjKSA9PSBmdy53bGFuLmxhc3Rfc3VwZXJbaV0pKSB7CisJCQlmdy53bGFuLmxhc3Rfc3VwZXJfbnVtW2ldKys7CisKKwkJCWlmICh1bmxpa2VseShmdy53bGFuLmxhc3Rfc3VwZXJfbnVtW2ldID49IENBUkw5MTcwRldfVFhfTUFDX1JFU0VUKSkgeworCQkJCS8qCisJCQkJICogc2NoZWR1bGUgTUFDIHJlc2V0IChha2EgT0ZGL09OID0+IGRlYWQpCisJCQkJICoKKwkJCQkgKiBUaGlzIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBraWxsCisJCQkJICogdGhlIGRldmljZSBmb3IgZ29vZCwgYnV0IGl0J3MgdGhlCisJCQkJICogcmVjb21tZW5kZWQgdGhpbmcgdG8gZG8uLi4KKwkJCQkgKi8KKworCQkJCWZ3LndsYW4ubWFjX3Jlc2V0Kys7CisJCQl9CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVRworCQkJaWYgKHVubGlrZWx5KGZ3LndsYW4ubGFzdF9zdXBlcl9udW1baV0gPj0gQ0FSTDkxNzBGV19UWF9NQUNfREVCVUcpKSB7CisJCQkJLyoKKwkJCQkgKiBTaWdoLCB0aGUgcXVldWUgaXMgYWxtb3N0IGNlcnRhaW5seQorCQkJCSAqIGRlYWQuIER1bXAgdGhlIHF1ZXVlIGNvbnRlbnQgdG8gdGhlCisJCQkJICogdXNlciwgbWF5YmUgd2UgZmluZCBvdXQgd2h5IGl0IGdvdAorCQkJCSAqIHNvIHN0dWNrLgorCQkJCSAqLworCisJCQkJd2xhbl9kdW1wX3F1ZXVlKGkpOworCQkJfQorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHICovCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ETUFfUVVFVUVfQlVNUAorCQkJaWYgKHVubGlrZWx5KGZ3LndsYW4ubGFzdF9zdXBlcl9udW1baV0gPj0gQ0FSTDkxNzBGV19UWF9NQUNfQlVNUCkpIHsKKwkJCQkvKgorCQkJCSAqIEhycm0sIGJ1bXAgdGhlIHF1ZXVlIGEgYml0LgorCQkJCSAqIG1heWJlIHRoaXMgd2lsbCBnZXQgaXQgZ29pbmcgYWdhaW4uCisJCQkJICovCisKKwkJCQl3bGFuX2RtYV9idW1wKGkpOworCQkJCXdsYW5fdHJpZ2dlcihCSVQoaSkpOworCQkJfQorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0RNQV9RVUVVRV9CVU1QICovCisJCX0gZWxzZSB7CisJCQkvKiBOb3RoaW5nIHN0dWNrICovCisJCQlmdy53bGFuLmxhc3Rfc3VwZXJbaV0gPSBERVNDX1BBWUxPQUQoZGVzYyk7CisJCQlmdy53bGFuLmxhc3Rfc3VwZXJfbnVtW2ldID0gMDsKKwkJfQorCX0KK30KKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX0ZXX01BQ19SRVNFVAorLyoKKyAqIE5COiBSZXNldHRpbmcgdGhlIE1BQyBpcyBhIHR3by1lZGdlZCBzd29yZC4KKyAqIE9uIG1vc3Qgb2NjYXNpb25zLCBpdCBkb2VzIHdoYXQgaXQgaXMgc3VwcG9zZWQgdG8gZG8uCisgKiBCdXQgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGlzIHdpbGwgbWFrZSBpdAorICogZXZlbiB3b3JzZSBhbmQgdGhlIHJhZGlvIGRpZXMgc2lsZW50bHkuCisgKi8KK3N0YXRpYyB2b2lkIHdsYW5fbWFjX3Jlc2V0KHZvaWQpCit7CisJdWludDMyX3QgdmFsOworCXVpbnQzMl90IGFnZ193YWl0X2NvdW50ZXI7CisJdWludDMyX3QgYWdnX2RlbnNpdHk7CisJdWludDMyX3QgYmNuX3N0YXJ0X2FkZHI7CisJdWludDMyX3QgcmN0bCwgcmN0aDsKKwl1aW50MzJfdCBjYW1fbW9kZTsKKwl1aW50MzJfdCBhY2tfcG93ZXI7CisJdWludDMyX3QgcnRzX2N0c190cGM7CisJdWludDMyX3QgcnRzX2N0c19yYXRlOworCWludCBpOworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfUkFESU9fRlVOQ1RJT05TCisJdWludDMyX3QgcnhfQkI7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfUkFESU9fRlVOQ1RJT05TICovCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19OT0lTWV9NQUNfUkVTRVQKKwlJTkZPKCJNQUMgUkVTRVQiKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19OT0lTWV9NQUNfUkVTRVQgKi8KKworCS8qIFNhdmUgYWdncmVnYXRpb24gcGFyYW1ldGVycyAqLworCWFnZ193YWl0X2NvdW50ZXIgPSBnZXQoQVI5MTcwX01BQ19SRUdfQU1QRFVfRkFDVE9SKTsKKwlhZ2dfZGVuc2l0eSA9IGdldChBUjkxNzBfTUFDX1JFR19BTVBEVV9ERU5TSVRZKTsKKworCWJjbl9zdGFydF9hZGRyID0gZ2V0KEFSOTE3MF9NQUNfUkVHX0JDTl9BRERSKTsKKworCWNhbV9tb2RlID0gZ2V0KEFSOTE3MF9NQUNfUkVHX0NBTV9NT0RFKTsKKwlyY3RsID0gZ2V0KEFSOTE3MF9NQUNfUkVHX0NBTV9ST0xMX0NBTExfVEJMX0wpOworCXJjdGggPSBnZXQoQVI5MTcwX01BQ19SRUdfQ0FNX1JPTExfQ0FMTF9UQkxfSCk7CisKKwlhY2tfcG93ZXIgPSBnZXQoQVI5MTcwX01BQ19SRUdfQUNLX1RQQyk7CisJcnRzX2N0c190cGMgPSBnZXQoQVI5MTcwX01BQ19SRUdfUlRTX0NUU19UUEMpOworCXJ0c19jdHNfcmF0ZSA9IGdldChBUjkxNzBfTUFDX1JFR19SVFNfQ1RTX1JBVEUpOworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfUkFESU9fRlVOQ1RJT05TCisJLyogMHgxYzg5NjAgd3JpdGUgb25seSAqLworCXJ4X0JCID0gZ2V0KEFSOTE3MF9QSFlfUkVHX1NXSVRDSF9DSEFJTl8wKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19SQURJT19GVU5DVElPTlMgKi8KKworCS8qIFRYL1JYIG11c3QgYmUgc3RvcHBlZCBieSBub3cgKi8KKwl2YWwgPSBnZXQoQVI5MTcwX01BQ19SRUdfUE9XRVJfU1RBVEVfQ1RSTCk7CisKKwl2YWwgfD0gQVI5MTcwX01BQ19QT1dFUl9TVEFURV9DVFJMX1JFU0VUOworCisJLyoKKwkgKiBNYW5pcHVsYXRlIENDQSB0aHJlc2hvbGQgdG8gc3RvcCB0cmFuc21pc3Npb24KKwkgKgorCSAqIHNldChBUjkxNzBfUEhZX1JFR19DQ0FfVEhSRVNIT0xELCAweDMwMCk7CisJICovCisKKwkvKgorCSAqIGNoZWNrIFJ4IHN0YXRlIGluIDAoaWRsZSkgOShkaXNhYmxlKQorCSAqCisJICogY2hTdGF0ZSA9IChnZXQoQVI5MTcwX01BQ19SRUdfTUlTQ182ODQpID4+IDE2KSAmIDB4ZjsKKwkgKiB3aGlsZSggKGNoU3RhdGUgIT0gMCkgJiYgKGNoU3RhdGUgIT0gOSkpIHsKKwkgKgljaFN0YXRlID0gKGdldChBUjkxNzBfTUFDX1JFR19NSVNDXzY4NCkgPj4gMTYpICYgMHhmOworCSAqIH0KKwkgKi8KKworCXNldChBUjkxNzBfTUFDX1JFR19QT1dFUl9TVEFURV9DVFJMLCB2YWwpOworCisJZGVsYXkoMik7CisKKwkvKiBSZXN0b3JlIGFnZ3JlZ2F0aW9uIHBhcmFtZXRlcnMgKi8KKwlzZXQoQVI5MTcwX01BQ19SRUdfQU1QRFVfRkFDVE9SLCBhZ2dfd2FpdF9jb3VudGVyKTsKKwlzZXQoQVI5MTcwX01BQ19SRUdfQU1QRFVfREVOU0lUWSwgYWdnX2RlbnNpdHkpOworCisJc2V0KEFSOTE3MF9NQUNfUkVHX0JDTl9BRERSLCBiY25fc3RhcnRfYWRkcik7CisJc2V0KEFSOTE3MF9NQUNfUkVHX0NBTV9NT0RFLCBjYW1fbW9kZSk7CisJc2V0KEFSOTE3MF9NQUNfUkVHX0NBTV9ST0xMX0NBTExfVEJMX0wsIHJjdGwpOworCXNldChBUjkxNzBfTUFDX1JFR19DQU1fUk9MTF9DQUxMX1RCTF9ILCByY3RoKTsKKworCXNldChBUjkxNzBfTUFDX1JFR19SVFNfQ1RTX1RQQywgcnRzX2N0c190cGMpOworCXNldChBUjkxNzBfTUFDX1JFR19BQ0tfVFBDLCBhY2tfcG93ZXIpOworCXNldChBUjkxNzBfTUFDX1JFR19SVFNfQ1RTX1JBVEUsIHJ0c19jdHNfcmF0ZSk7CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19SQURJT19GVU5DVElPTlMKKwlzZXQoQVI5MTcwX1BIWV9SRUdfU1dJVENIX0NIQUlOXzIsIHJ4X0JCKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19SQURJT19GVU5DVElPTlMgKi8KKworCS8qCisJICogTWFuaXB1bGF0ZSBDQ0EgdGhyZXNob2xkIHRvIHJlc3VtZSB0cmFuc21pc3Npb24KKwkgKgorCSAqIHNldChBUjkxNzBfUEhZX1JFR19DQ0FfVEhSRVNIT0xELCAweDApOworCSAqLworCisJdmFsID0gQVI5MTcwX0RNQV9UUklHR0VSX1JYUTsKKwkvKiBSZWluaXRpYWxpemUgYWxsIFdMQU4gVFggRE1BIHF1ZXVlcy4gKi8KKwlmb3IgKGkgPSBBUjkxNzBfVFhRX1NQRUNJQUw7IGkgPj0gQVI5MTcwX1RYUTA7IGktLSkgeworCQlzdHJ1Y3QgZG1hX2Rlc2MgKml0ZXI7CisKKwkJX19mb3JfZWFjaF9kZXNjX2JpdHMoaXRlciwgJmZ3LndsYW4udHhfcXVldWVbaV0sIEFSOTE3MF9PV05fQklUU19TVyk7CisKKwkJLyoga2lsbCB0aGUgc3R1Y2sgZnJhbWUgKi8KKwkJaWYgKCFpc190ZXJtaW5hdG9yKCZmdy53bGFuLnR4X3F1ZXVlW2ldLCBpdGVyKSAmJgorCQkgICAgZncud2xhbi5sYXN0X3N1cGVyX251bVtpXSA+PSBDQVJMOTE3MEZXX1RYX01BQ19SRVNFVCAmJgorCQkgICAgZncud2xhbi5sYXN0X3N1cGVyW2ldID09IERFU0NfUEFZTE9BRChpdGVyKSkgeworCQkJc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnN1cGVyID0gZ2V0X3N1cGVyKGl0ZXIpOworCisJCQlpdGVyLT5zdGF0dXMgPSBBUjkxNzBfT1dOX0JJVFNfU1c7CisJCQkvKgorCQkJICogTWFyayB0aGUgZnJhbWUgYXMgZmFpbGVkLgorCQkJICogVGhlIEJBRkFJTCBmbGFnIGFsbG93cyB0aGUgZnJhbWUgdG8gc2FpbCB0aHJvdWdoCisJCQkgKiB3bGFuX3R4X3N0YXR1cyB3aXRob3V0IG11Y2ggInVuc3R1Y2siIHRyb3VibGUuCisJCQkgKi8KKwkJCWl0ZXItPmN0cmwgJj0gfihBUjkxNzBfQ1RSTF9GQUlMKTsKKwkJCWl0ZXItPmN0cmwgfD0gQVI5MTcwX0NUUkxfQkFGQUlMOworCisJCQlzdXBlci0+cy5jbnQgPSBDQVJMOTE3MF9UWF9NQVhfUkFURV9UUklFUzsKKwkJCXN1cGVyLT5zLnJpeCA9IENBUkw5MTcwX1RYX01BWF9SRVRSWV9SQVRFUzsKKworCQkJZncud2xhbi5sYXN0X3N1cGVyX251bVtpXSA9IDA7CisJCQlmdy53bGFuLmxhc3Rfc3VwZXJbaV0gPSBOVUxMOworCQkJaXRlciA9IGl0ZXItPmxhc3RBZGRyLT5uZXh0QWRkcjsKKwkJfQorCisJCXNldF93bGFuX3R4cV9kbWFfYWRkcihpLCAodWludDMyX3QpIGl0ZXIpOworCQlpZiAoIWlzX3Rlcm1pbmF0b3IoJmZ3LndsYW4udHhfcXVldWVbaV0sIGl0ZXIpKQorCQkJdmFsIHw9IEJJVChpKTsKKworCQlEQkcoIlE6JWQgbDolZCBoOiVwIHQ6JXAgY3U6JXAgaXQ6JXAgY3Q6JXggc3Q6JXhcbiIsIGksIHF1ZXVlX2xlbigmZncud2xhbi50eF9xdWV1ZVtpXSksCisJCSAgICAgZncud2xhbi50eF9xdWV1ZVtpXS5oZWFkLCBmdy53bGFuLnR4X3F1ZXVlW2ldLnRlcm1pbmF0b3IsCisJCSAgICAgZ2V0X3dsYW5fdHhxX2FkZHIoaSksIGl0ZXIsIGl0ZXItPmN0cmwsIGl0ZXItPnN0YXR1cyk7CisJfQorCisJZncud2xhbi5zb2Z0X2ludCB8PSBBUjkxNzBfTUFDX0lOVF9SWEMgfCBBUjkxNzBfTUFDX0lOVF9UWEMgfAorCQkJICAgIEFSOTE3MF9NQUNfSU5UX1JFVFJZX0ZBSUw7CisKKwlzZXQoQVI5MTcwX01BQ19SRUdfRE1BX1JYUV9BRERSLCAodWludDMyX3QpIGZ3LndsYW4ucnhfcXVldWUuaGVhZCk7CisJd2xhbl90cmlnZ2VyKHZhbCk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgd2xhbl9tYWNfcmVzZXQodm9pZCkKK3sKKwkvKiBUaGUgZHJpdmVyIHRha2VzIGNhcmUgb2YgcmVpbml0aWFsaXppbmcgdGhlIGRldmljZSAqLworCUJVRygiTUFDIFJFU0VUIik7Cit9CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfRldfTUFDX1JFU0VUICovCisKK3ZvaWQgX19jb2xkIHdsYW5fdGltZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY2FjaGVkX21hY19yZXNldDsKKworCWNhY2hlZF9tYWNfcmVzZXQgPSBmdy53bGFuLm1hY19yZXNldDsKKworCS8qIFRYIFF1ZXVlIEhhbmcgY2hlY2sgKi8KKwl3bGFuX2NoZWNrX2hhbmcoKTsKKworCS8qIFJYIE92ZXJydW4gY2hlY2sgKi8KKwl3bGFuX2NoZWNrX3J4X292ZXJydW4oKTsKKworCWlmICh1bmxpa2VseShmdy53bGFuLm1hY19yZXNldCA+PSBDQVJMOTE3MF9NQUNfUkVTRVRfUkVTRVQpKSB7CisJCXdsYW5fbWFjX3Jlc2V0KCk7CisJCWZ3LndsYW4ubWFjX3Jlc2V0ID0gQ0FSTDkxNzBfTUFDX1JFU0VUX09GRjsKKwl9IGVsc2UgeworCQlpZiAoZncud2xhbi5tYWNfcmVzZXQgJiYgY2FjaGVkX21hY19yZXNldCA9PSBmdy53bGFuLm1hY19yZXNldCkKKwkJCWZ3LndsYW4ubWFjX3Jlc2V0LS07CisJfQorfQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvc3JjL3dvbC5jIGIvY2FybDkxNzBmdy9jYXJsZncvc3JjL3dvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZmI4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy9zcmMvd29sLmMKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBXYWtlVXAgb24gV0xBTiBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAxMQlDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlICJjYXJsOTE3MC5oIgorI2luY2x1ZGUgInNoYXJlZC9waHkuaCIKKyNpbmNsdWRlICJ0aW1lci5oIgorI2luY2x1ZGUgIndsLmgiCisjaW5jbHVkZSAicHJpbnRmLmgiCisjaW5jbHVkZSAicmYuaCIKKyNpbmNsdWRlICJ3b2wuaCIKKyNpbmNsdWRlICJsaW51eC9pZWVlODAyMTEuaCIKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1dPTAorCit2b2lkIHdvbF9jbWQoY29uc3Qgc3RydWN0IGNhcmw5MTcwX3dvbF9jbWQgKmNtZCkKK3sKKwltZW1jcHkoJmZ3LndvbC5jbWQsIGNtZCwgc2l6ZW9mKGNtZCkpOworfQorCit2b2lkIHdvbF9wcmVwYXJlKHZvaWQpCit7CisJLyogc2V0IE1BQyBmaWx0ZXIgKi8KKwltZW1jcHkoKHZvaWQgKilBUjkxNzBfTUFDX1JFR19NQUNfQUREUl9MLCBmdy53b2wuY21kLm1hYywgNik7CisJbWVtY3B5KCh2b2lkICopQVI5MTcwX01BQ19SRUdfQlNTSURfTCwgZncud29sLmNtZC5ic3NpZCwgNik7CisJc2V0KEFSOTE3MF9NQUNfUkVHX1JYX0NPTlRST0wsIEFSOTE3MF9NQUNfUlhfQ1RSTF9ERUFHRyk7CisKKwkvKiBzZXQgZmlsdGVyIHBvbGljeSB0bzogZGlzY2FyZCBldmVyeXRoaW5nICovCisJZncud2xhbi5yeF9maWx0ZXIgPSBDQVJMOTE3MF9SWF9GSUxURVJfRVZFUllUSElORzsKKworCS8qIHJlZW5hYmxlIHJ4IGRtYSAqLworCXdsYW5fdHJpZ2dlcihBUjkxNzBfRE1BX1RSSUdHRVJfUlhRKTsKKworCS8qIGluaXRpYWxpemUgdGhlIGxhc3RfYmVhY29uIHRpbWVyICovCisJZncud29sLmxhc3RfbnVsbCA9IGZ3LndvbC5sYXN0X2JlYWNvbiA9IGdldF9jbG9ja19jb3VudGVyKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19XT0xfTkw4MDIxMV9UUklHR0VSUworc3RhdGljIGJvb2wgd2xhbl9yeF93b2xfbWFnaWNfcGFja2V0KGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIGNvbnN0IHVuc2lnbmVkIGludCBsZW4pCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgKmVuZCwgKm1hYzsKKwl1bnNpZ25lZCBpbnQgZm91bmQgPSAwOworCisJLyoKKwkgKiBMSU1JVEFUSU9OOgorCSAqIFdlIGNhbiBvbmx5IHNjYW4gdGhlIGZpcnN0IEFSOTE3MF9CTE9DS19TSVpFIFs9fjMyMF0gYnl0ZXMKKwkgKiBmb3IgTUFHSUMgcGF0dGVybnMhCisJICovCisKKwltYWMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBBUjkxNzBfTUFDX1JFR19NQUNfQUREUl9MOworCisJZGF0YSA9ICh1OCAqKSgodW5zaWduZWQgbG9uZyloZHIgKyBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCkpOworCWVuZCA9ICh1OCAqKSgodW5zaWduZWQgbG9uZyloZHIgKyBsZW4pOworCisJLyoKKwkgKiBzY2FuIGZvciBzdGFuZGFyZCBXT0wgTWFnaWMgZnJhbWUKKwkgKgorCSAqICJBIHBoeXNpY2FsIFdha2VPbkxBTiAoTWFnaWMgUGFja2V0KSB3aWxsIGxvb2sgbGlrZSB0aGlzOgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIHwgU3luY2hyb25pemF0aW9uIFN0cmVhbSB8IFRhcmdldCBNQUMgfCAgUGFzc3dvcmQgKG9wdGlvbmFsKQkgfAorCSAqIHwJNiBvY3RldHMJICAgIHwgOTYgb2N0ZXRzICB8ICAgMCwgNCBvciA2CQkgfAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqCisJICogVGhlIFN5bmNocm9uaXphdGlvbiBTdHJlYW0gaXMgZGVmaW5lZCBhcyA2IGJ5dGVzIG9mIEZGaC4KKwkgKiBUaGUgVGFyZ2V0IE1BQyBibG9jayBjb250YWlucyAxNiBkdXBsaWNhdGlvbnMgb2YgdGhlIElFRUVhZGRyZXNzCisJICogb2YgdGhlIHRhcmdldCwgd2l0aCBubyBicmVha3Mgb3IgaW50ZXJydXB0aW9ucy4KKwkgKgorCSAqIFRoZSBQYXNzd29yZCBmaWVsZCBpcyBvcHRpb25hbCwgYnV0IGlmIHByZXNlbnQsIGNvbnRhaW5zIGVpdGhlcgorCSAqIDQgYnl0ZXMgb3IgNiBieXRlcy4gVGhlIFdha2VPbkxBTiBkaXNzZWN0b3Igd2FzIGltcGxlbWVudGVkIHRvCisJICogZGlzc2VjdCB0aGUgcGFzc3dvcmQsIGlmIHByZXNlbnQsIGFjY29yZGluZyB0byB0aGUgY29tbWFuZC1saW5lCisJICogZm9ybWF0IHRoYXQgZXRoZXItd2FrZSB1c2VzLCB0aGVyZWZvcmUsIGlmIGEgNC1ieXRlIHBhc3N3b3JkIGlzCisJICogcHJlc2VudCwgaXQgd2lsbCBiZSBkaXNzZWN0ZWQgYXMgYW4gSVB2NCBhZGRyZXNzIGFuZCBpZiBhIDYtYnl0ZQorCSAqIHBhc3N3b3JkIGlzIHByZXNlbnQsIGl0IHdpbGwgYmUgZGlzc2VjdGVkIGFzIGFuIEV0aGVybmV0IGFkZHJlc3MuCisJICoKKwkgKiA8aHR0cDovL3dpa2kud2lyZXNoYXJrLm9yZy9XYWtlT25MQU4+CisJICovCisKKwl3aGlsZSAoZGF0YSA8IGVuZCkgeworCQlpZiAoZm91bmQgPj0gNikgeworCQkJaWYgKCpkYXRhID09IG1hY1tmb3VuZCAlIDZdKQorCQkJCWZvdW5kKys7CisJCQllbHNlCisJCQkJZm91bmQgPSAwOworCQl9CisKKwkJLyogcHJldmlvdXMgY2hlY2sgbWlnaHQgcmVzZXQgZm91bmQgY291bnRlciAqLworCQlpZiAoZm91bmQgPCA2KSB7CisJCQlpZiAoKmRhdGEgPT0gMHhmZikKKwkJCQlmb3VuZCsrOworCQkJZWxzZQorCQkJCWZvdW5kID0gMDsKKwkJfQorCisJCWlmIChmb3VuZCA9PSAoNiArIDE2ICogNikpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlkYXRhKys7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCB3bGFuX3dvbF9jb25uZWN0X2NhbGxiYWNrKHZvaWQgX191bnVzZWQgKmR1bW15LCBib29sIHN1Y2Nlc3MpCit7CisJaWYgKHN1Y2Nlc3MpCisJCWZ3LndvbC5sb3N0X251bGwgPSAwOworCWVsc2UKKwkJZncud29sLmxvc3RfbnVsbCsrOworfQorCitzdGF0aWMgdm9pZCB3bGFuX3dvbF9jb25uZWN0aW9uX21vbml0b3Iodm9pZCkKK3sKKwlzdHJ1Y3QgY2FybDkxNzBfdHhfbnVsbF9zdXBlcmZyYW1lICpudWxsZiA9ICZkbWFfbWVtLnJlc2VydmVkLmNtZC5udWxsOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpudWxsID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopICZudWxsZi0+Zi5udWxsOworCisJaWYgKCFmdy53bGFuLmZ3X2Rlc2NfYXZhaWxhYmxlKQorCQlyZXR1cm47CisKKwltZW1zZXQobnVsbGYsIDAsIHNpemVvZigqbnVsbGYpKTsKKworCW51bGxmLT5zLmxlbiA9IHNpemVvZihzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJkZXNjKSArCisJCSAgICAgc2l6ZW9mKHN0cnVjdCBhcjkxNzBfdHhfaHdkZXNjKSArCisJCSAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyKTsKKwludWxsZi0+cy5yaVswXS50cmllcyA9IDM7CisJbnVsbGYtPnMuYXNzaWduX3NlcSA9IHRydWU7CisJbnVsbGYtPnMucXVldWUgPSBBUjkxNzBfVFhRX1ZPOworCW51bGxmLT5mLmhkci5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpICsgRkNTX0xFTjsKKworCW51bGxmLT5mLmhkci5tYWMuYmFja29mZiA9IDE7CisJbnVsbGYtPmYuaGRyLm1hYy5od19kdXJhdGlvbiA9IDE7CisJbnVsbGYtPmYuaGRyLm1hYy5lcnBfcHJvdCA9IEFSOTE3MF9UWF9NQUNfUFJPVF9SVFM7CisKKwludWxsZi0+Zi5oZHIucGh5Lm1vZHVsYXRpb24gPSBBUjkxNzBfVFhfUEhZX01PRF9PRkRNOworCW51bGxmLT5mLmhkci5waHkuYmFuZHdpZHRoID0gQVI5MTcwX1RYX1BIWV9CV18yME1IWjsKKwludWxsZi0+Zi5oZHIucGh5LmNoYWlucyA9IEFSOTE3MF9UWF9QSFlfVFhDSEFJTl8yOworCW51bGxmLT5mLmhkci5waHkudHhfcG93ZXIgPSAyOTsgLyogMTQuNSBkQm0gKi8KKwludWxsZi0+Zi5oZHIucGh5Lm1jcyA9IEFSOTE3MF9UWFJYX1BIWV9SQVRFX09GRE1fNk07CisKKwkvKiBmb3JtYXQgb3V0Z29pbmcgbnVsbGZ1bmMgKi8KKwludWxsLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfAorCQlJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfCBJRUVFODAyMTFfRkNUTF9UT0RTKTsKKworCW1lbWNweShudWxsLT5hZGRyMSwgZncud29sLmNtZC5ic3NpZCwgNik7CisJbWVtY3B5KG51bGwtPmFkZHIyLCBmdy53b2wuY21kLm1hYywgNik7CisJbWVtY3B5KG51bGwtPmFkZHIzLCBmdy53b2wuY21kLmJzc2lkLCA2KTsKKworCXdsYW5fdHhfZncoJm51bGxmLT5zLCB3bGFuX3dvbF9jb25uZWN0X2NhbGxiYWNrKTsKK30KKworc3RhdGljIGJvb2wgd2xhbl9yeF93b2xfZGlzY29ubmVjdChjb25zdCB1bnNpZ25lZCBpbnQgcnhfZmlsdGVyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCisJCQkJICAgY29uc3QgdW5zaWduZWQgaW50IF9fdW51c2VkIGxlbikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpic3NpZDsKKwlic3NpZCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIEFSOTE3MF9NQUNfUkVHX0JTU0lEX0w7CisKKwkvKiBzaG91bGQgY2F0Y2ggYm90aCBicm9hZGNhc3QgYW5kIHVuaWNhc3QgTUxNRXMgKi8KKwlpZiAoIShyeF9maWx0ZXIgJiBDQVJMOTE3MF9SWF9GSUxURVJfT1RIRVJfUkEpKSB7CisJCWlmIChpZWVlODAyMTFfaXNfZGVhdXRoKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkJICAgIGllZWU4MDIxMV9pc19kaXNhc3NvYyhoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICBjb21wYXJlX2V0aGVyX2FkZHJlc3MoaGRyLT5hZGRyMywgYnNzaWQpKSB7CisJCWZ3LndvbC5sYXN0X2JlYWNvbiA9IGdldF9jbG9ja19jb3VudGVyKCk7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisjZW5kaWYgLyogQ0FSTDkxNzBGV19XT0xfTkw4MDIxMV9UUklHR0VSUyAqLworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfV09MX1BST0JFX1JFUVVFU1QKKworLyoKKyAqIE5vdGU6IENPTkZJR19DQVJMOTE3MEZXX1dPTF9QUk9CRV9SRVFVRVNUX1NTSUQgaXMgbm90IGEgcmVhbAorICogc3RyaW5nLiBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGFkZCBhIFwwIGF0IHRoZSBlbmQuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXU4IHNzaWRfaWU7CisJdTggc3NpZF9sZW47CisJdTggc3NpZFtzaXplb2YoQ09ORklHX0NBUkw5MTcwRldfV09MX1BST0JFX1JFUVVFU1RfU1NJRCkgLSAxXTsKK30gX19wYWNrZWQgcHJvYmVfcmVxID0geworCS5zc2lkX2llID0gV0xBTl9FSURfU1NJRCwKKwkuc3NpZF9sZW4gPSBzaXplb2YoQ09ORklHX0NBUkw5MTcwRldfV09MX1BST0JFX1JFUVVFU1RfU1NJRCkgLSAxLAorCS5zc2lkID0gQ09ORklHX0NBUkw5MTcwRldfV09MX1BST0JFX1JFUVVFU1RfU1NJRCwKK307CisKK3N0YXRpYyBib29sIHdsYW5fcnhfd29sX3Byb2JlX3NzaWQoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgY29uc3QgdW5zaWduZWQgaW50IGxlbikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCAqZW5kLCAqc2NhbiA9ICh2b2lkICopICZwcm9iZV9yZXE7CisKKwkvKgorCSAqIElFRUUgODAyLjExLTIwMDcgNy4zLjIuMSBzcGVjaWZpZXMgdGhhdCB0aGUgU1NJRCBpcyBubworCSAqIGxvbmdlciB0aGFuIDMyIG9jdGV0cy4KKwkgKi8KKwlCVUlMRF9CVUdfT04oKHNpemVvZihDT05GSUdfQ0FSTDkxNzBGV19XT0xfUFJPQkVfUkVRVUVTVF9TU0lEKSAtIDEpID4gMzIpOworCisJaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQl1bnNpZ25lZCBpbnQgaTsKKwkJZW5kID0gKHU4ICopKCh1bnNpZ25lZCBsb25nKWhkciArIGxlbik7CisKKwkJLyoKKwkJICogVGhlIHBvc2l0aW9uIG9mIHRoZSBTU0lEIGluZm9ybWF0aW9uIGVsZW1lbnQgaW5zaWRlCisJCSAqIGEgcHJvYmUgcmVxdWVzdCBmcmFtZSBpcyBtb3JlIG9yIGxlc3MgImZpeGVkIi4KKwkJICovCisJCWRhdGEgPSAodTggKikoKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKWhkciktPnUucHJvYmVfcmVxLnZhcmlhYmxlOworCQlmb3IgKGkgPSAwOyBpIDwgKHVuc2lnbmVkIGludCkocHJvYmVfcmVxLnNzaWRfbGVuICsgMSk7IGkrKykgeworCQkJaWYgKGRhdGEgPiBlbmQgfHwgc2NhbltpXSAhPSBkYXRhW2ldKQorCQkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19XT0xfUFJPQkVfUkVRVUVTVCAqLworCit2b2lkIHdvbF9yeChjb25zdCB1bnNpZ25lZCBpbnQgcnhfZmlsdGVyIF9fdW51c2VkLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyIF9fdW51c2VkLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuIF9fdW51c2VkKQoreworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1dPTF9OTDgwMjExX1RSSUdHRVJTCisJLyogRGlzY29ubmVjdCBpcyBhbHdheXMgZW5hYmxlZCAqLworCWlmIChmdy53b2wuY21kLmZsYWdzICYgQ0FSTDkxNzBfV09MX0RJU0NPTk5FQ1QgJiYKKwkgICAgcnhfZmlsdGVyICYgQ0FSTDkxNzBfUlhfRklMVEVSX01HTVQpCisJCWZ3LndvbC53YWtlX3VwIHw9IHdsYW5fcnhfd29sX2Rpc2Nvbm5lY3QocnhfZmlsdGVyLCBoZHIsIGxlbik7CisKKwlpZiAoZncud29sLmNtZC5mbGFncyAmIENBUkw5MTcwX1dPTF9NQUdJQ19QS1QgJiYKKwkgICAgcnhfZmlsdGVyICYgQ0FSTDkxNzBfUlhfRklMVEVSX0RBVEEpCisJCWZ3LndvbC53YWtlX3VwIHw9IHdsYW5fcnhfd29sX21hZ2ljX3BhY2tldChoZHIsIGxlbik7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfV09MX05MODAyMTFfVFJJR0dFUlMgKi8KKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1dPTF9QUk9CRV9SRVFVRVNUCisJaWYgKHJ4X2ZpbHRlciAmIENBUkw5MTcwX1JYX0ZJTFRFUl9NR01UKQorCQlmdy53b2wud2FrZV91cCB8PSB3bGFuX3J4X3dvbF9wcm9iZV9zc2lkKGhkciwgbGVuKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19XT0xfUFJPQkVfUkVRVUVTVCAqLworfQorCit2b2lkIHdvbF9qYW5pdG9yKHZvaWQpCit7CisJaWYgKHVubGlrZWx5KGZ3LnN1c3BlbmRfbW9kZSA9PSBDQVJMOTE3MF9IT1NUX1NVU1BFTkRFRCkpIHsKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19XT0xfTkw4MDIxMV9UUklHR0VSUworCQlpZiAoZncud29sLmNtZC5mbGFncyAmIENBUkw5MTcwX1dPTF9ESVNDT05ORUNUKSB7CisJCQkvKgorCQkJICogY29ubmVjdGlvbiBsb3N0IGFmdGVyIDEwc2VjIHdpdGhvdXQgcmVjZWl2aW5nCisJCQkgKiBhIGJlYWNvbgorCQkJICAqLworCQkJaWYgKGlzX2FmdGVyX21zZWNzKGZ3LndvbC5sYXN0X2JlYWNvbiwgMTAwMDApKQorCQkJCWZ3LndvbC53YWtlX3VwIHw9IHRydWU7CisKKwkJCWlmIChmdy53b2wuY21kLm51bGxfaW50ZXJ2YWwgJiYKKwkJCSAgICBpc19hZnRlcl9tc2Vjcyhmdy53b2wubGFzdF9udWxsLCBmdy53b2wuY21kLm51bGxfaW50ZXJ2YWwpKQorCQkJCXdsYW5fd29sX2Nvbm5lY3Rpb25fbW9uaXRvcigpOworCisJCQlpZiAoZncud29sLmxvc3RfbnVsbCA+PSA1KQorCQkJCWZ3LndvbC53YWtlX3VwIHw9IHRydWU7CisJCX0KKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19XT0xfTkw4MDIxMV9UUklHR0VSUyAqLworCisJCWlmIChmdy53b2wud2FrZV91cCkgeworCQkJZncuc3VzcGVuZF9tb2RlID0gQ0FSTDkxNzBfQVdBS0VfSE9TVDsKKwkJCXNldChBUjkxNzBfVVNCX1JFR19XQUtFX1VQLCBBUjkxNzBfVVNCX1dBS0VfVVBfV0FLRSk7CisJCX0KKwl9Cit9CisjZWxzZQorCisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfV09MICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2Nhcmxmdy91c2IvS2NvbmZpZyBiL2Nhcmw5MTcwZncvY2FybGZ3L3VzYi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNzA3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy91c2IvS2NvbmZpZwpAQCAtMCwwICsxLDM3IEBACittZW51ICJVU0IgRmlybXdhcmUgQ29uZmlndXJhdGlvbiBTZXR0aW5ncyIKKworY29uZmlnIENBUkw5MTcwRldfVVNCX1NUQU5EQVJEX0NNRFMKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJCYXNpYyBVU0IgSW50ZXJmYWNlIgorCS0tLWhlbHAtLS0KKwkgQWxsb3dzIHRoZSBkZXZpY2UgdG8gYmUgcXVlcmllZCBhYm91dCBTdGFuZGFyZCBVU0IgMi4wIERldmljZQorCSBEZXNjcmlwdGlvbiBEZXNjcmlwdG9ycy4KKworCSBTYXkgWSwgdW5sZXNzIHlvdSBkb24ndCBjYXJlIGlmIGxzdXNiIC12IGZhaWxzLgorCitjb25maWcgQ0FSTDkxNzBGV19VU0JfVVBfU1RSRUFNCisJZGVmX2Jvb2wgeQorCXByb21wdCAiVVNCIFVwbG9hZCBTdHJlYW0iCisJLS0taGVscC0tLQorCSBUaGlzIGZlYXR1cmVzIGFsbG93cyB0aGUgVVNCIHNpbGljb24gdG8gY29tYmluZSBzbWFsbCwgc2luZ2xlCisJIGZyYW1lcyBpbnRvIGJpZ2dlciB0cmFuc2ZlcnMuIFRoaXMgY2FuIGhlbHAgdG8gcmVkdWNlCisJIHNvbWUgcGVyLXRyYW5zZmVyIG92ZXJoZWFkIGluIHRoZSBhcHBsaWNhdGlvbi4KKworCSBTYXkgWSwgdW5sZXNzIHlvdSBoYXZlIGV4cGVyaWVuY2VkIHN0cmFuZ2UgcnggY29ycnVwdGlvbnMuCisKK2NvbmZpZyBDQVJMOTE3MEZXX1VTQl9ETl9TVFJFQU0KKwlkZWZfYm9vbCBuCisJcHJvbXB0ICJVU0IgRG93bmxvYWQgU3RyZWFtIgorCitjb25maWcgQ0FSTDkxNzBGV19ERUJVR19VU0IKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJQYXNzIGRlYnVnIG1lc3NhZ2VzIHRocm91Z2ggVVNCIHRyYW5zcG9ydCIKKwktLS1oZWxwLS0tCisJIFJlcG9ydCBhbGwgZmlybXdhcmUgbWVzc2FnZXMgdGhyb3VnaCB0aGUgVVNCIHRyYW5zcG9ydC4KKwkgQnV0IHRoZXJlIGlzIGEgY2F0Y2g6IEluIGNhc2Ugb2YgYSBCVUcsIHRoZSBVU0IgdHJhbnNwb3J0CisJIG5lZWRzIHRvIGJlIGZ1bmN0aW9uYWwsIG90aGVyd2lzZSB0aGUgYXBwbGljYXRpb24gd29uJ3QKKwkgcmVjZWl2ZSBhbnl0aGluZy4KKworCSBTYXkgWS4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jYXJsZncvdXNiL2ZpZm8uYyBiL2Nhcmw5MTcwZncvY2FybGZ3L3VzYi9maWZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjMmUxMgotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L3VzYi9maWZvLmMKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBjYXJsOTE3MCBmaXJtd2FyZSAtIHVzZWQgYnkgdGhlIGFyOTE3MCB3aXJlbGVzcyBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICogQ29weXJpZ2h0CTIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEJQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY2FybDkxNzAuaCIKKyNpbmNsdWRlICJwcmludGYuaCIKKyNpbmNsdWRlICJyb20uaCIKKyNpbmNsdWRlICJ1c2JfZmlmby5oIgorCisvKiBUT0RPIC8gVE9URVNUICovCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfVVNCX01PREVTV0lUQ0gKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfZXBfbWFwKGNvbnN0IHVpbnQ4X3QgZXAsIGNvbnN0IHVpbnQ4X3QgbWFwKQoreworCXNldGIoQVI5MTcwX1VTQl9SRUdfRVBfTUFQICsgKGVwIC0gMSksIG1hcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfZmlmb19tYXAoY29uc3QgdWludDhfdCBmaWZvLCBjb25zdCB1aW50OF90IG1hcCkKK3sKKwlzZXRiKEFSOTE3MF9VU0JfUkVHX0ZJRk9fTUFQICsgKGZpZm8gLSAxKSwgbWFwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzYl9maWZvX2NvbmZpZyhjb25zdCB1aW50OF90IGZpZm8sIGNvbnN0IHVpbnQ4X3QgY2ZnKQoreworCXNldGIoQVI5MTcwX1VTQl9SRUdfRklGT19DT05GSUcgKyAoZmlmbyAtIDEpLCBjZmcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX2VwX3BhY2tldF9zaXplX2hpKGNvbnN0IHVpbnQ4X3QgZXAsIGNvbnN0IHVpbnQ4X3QgZGlyLAorCQkJICAgICBjb25zdCB1aW50MTZfdCBzaXplKQoreworCXNldGIoQVI5MTcwX1VTQl9SRUdfRVBfSU5fTUFYX1NJWkVfSElHSCArICgoKGRpciAqIDB4MjApICsgZXApIDw8IDEpLAorCSAgICAgKHNpemUgPj4gOCkgJiAweGYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX2VwX3BhY2tldF9zaXplX2xvKGNvbnN0IHVpbnQ4X3QgZXAsIGNvbnN0IHVpbnQ4X3QgZGlyLAorCQkJICAgIGNvbnN0IHVpbnQxNl90IHNpemUpCit7CisJc2V0YihBUjkxNzBfVVNCX1JFR19FUF9JTl9NQVhfU0laRV9MT1cgKyAoKChkaXIgKiAweDIwKSArIGVwKSA8PCAxKSwKKwkgICAgIHNpemUgJiAweGZmKTsKK30KKworc3RhdGljIHZvaWQgdXNiX2VwX2luX2hpZ2hiYW5kc2V0KGNvbnN0IHVpbnQ4X3QgZXAsIGNvbnN0IHVpbnQ4X3QgZGlyLAorCQkJCWNvbnN0IHVpbnQxNl90IHNpemUpCit7CisJYW5kYihBUjkxNzBfVVNCX1JFR19FUF9JTl9NQVhfU0laRV9ISUdIICsgKGVwIDw8IDEpLCB+KEJJVCg2KSB8IEJJVCg1KSkpOworCisJc3dpdGNoIChkaXIpIHsKKwljYXNlIERJUkVDVElPTl9JTjoKKwkJc2V0YihBUjkxNzBfVVNCX1JFR19FUF9JTl9NQVhfU0laRV9ISUdIICsgKGVwIDw8IDEpLAorCQkgICAgICgoc2l6ZSA+PiAxMSkgKyAxKSA8PCA1KTsKKwkJYnJlYWs7CisJY2FzZSBESVJFQ1RJT05fT1VUOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqICAgICAgdlVzYkZJRk9fRVB4Q2ZnX0hTKHZvaWQpCisgKiAgICAgIERlc2NyaXB0aW9uOgorICogICAgICAgICAgMS4gQ29uZmlndXJlIHRoZSBGSUZPIGFuZCBFUHggbWFwCisgKiAgICAgIGlucHV0OiBub25lCisgKiAgICAgIG91dHB1dDogbm9uZQorICovCisKK3ZvaWQgdXNiX2luaXRfaGlnaHNwZWVkX2ZpZm9fY2ZnKHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBFUCAxICovCisJdXNiX2VwX21hcCgxLCBIU19DMV9JMF9BMF9FUDFfTUFQKTsKKwl1c2JfZmlmb19tYXAoSFNfQzFfSTBfQTBfRVAxX0ZJRk9fU1RBUlQsIEhTX0MxX0kwX0EwX0VQMV9GSUZPX01BUCk7CisJdXNiX2ZpZm9fY29uZmlnKEhTX0MxX0kwX0EwX0VQMV9GSUZPX1NUQVJULCBIU19DMV9JMF9BMF9FUDFfRklGT19DT05GSUcpOworCisJZm9yIChpID0gSFNfQzFfSTBfQTBfRVAxX0ZJRk9fU1RBUlQgKyAxOworCSAgICAgaSA8IEhTX0MxX0kwX0EwX0VQMV9GSUZPX1NUQVJUICsgSFNfQzFfSTBfQTBfRVAxX0ZJRk9fTk87IGkrKykgeworCQl1c2JfZmlmb19jb25maWcoaSwgKEhTX0MxX0kwX0EwX0VQMV9GSUZPX0NPTkZJRyAmICh+QklUKDcpKSkpOworCX0KKworCXVzYl9lcF9wYWNrZXRfc2l6ZV9oaSgxLCBIU19DMV9JMF9BMF9FUDFfRElSRUNUSU9OLCAoSFNfQzFfSTBfQTBfRVAxX01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9wYWNrZXRfc2l6ZV9sbygxLCBIU19DMV9JMF9BMF9FUDFfRElSRUNUSU9OLCAoSFNfQzFfSTBfQTBfRVAxX01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9pbl9oaWdoYmFuZHNldCgxLCBIU19DMV9JMF9BMF9FUDFfRElSRUNUSU9OLCBIU19DMV9JMF9BMF9FUDFfTUFYX1BBQ0tFVCk7CisKKwkvKiBFUCAyICovCisJdXNiX2VwX21hcCgyLCBIU19DMV9JMF9BMF9FUDJfTUFQKTsKKwl1c2JfZmlmb19tYXAoSFNfQzFfSTBfQTBfRVAyX0ZJRk9fU1RBUlQsIEhTX0MxX0kwX0EwX0VQMl9GSUZPX01BUCk7CisJdXNiX2ZpZm9fY29uZmlnKEhTX0MxX0kwX0EwX0VQMl9GSUZPX1NUQVJULCBIU19DMV9JMF9BMF9FUDJfRklGT19DT05GSUcpOworCisJZm9yIChpID0gSFNfQzFfSTBfQTBfRVAyX0ZJRk9fU1RBUlQgKyAxOworCSAgICAgaSA8IEhTX0MxX0kwX0EwX0VQMl9GSUZPX1NUQVJUICsgSFNfQzFfSTBfQTBfRVAyX0ZJRk9fTk87IGkrKykgeworCQl1c2JfZmlmb19jb25maWcoaSwgKEhTX0MxX0kwX0EwX0VQMl9GSUZPX0NPTkZJRyAmICh+QklUKDcpKSkpOworCX0KKworCXVzYl9lcF9wYWNrZXRfc2l6ZV9oaSgyLCBIU19DMV9JMF9BMF9FUDJfRElSRUNUSU9OLCAoSFNfQzFfSTBfQTBfRVAyX01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9wYWNrZXRfc2l6ZV9sbygyLCBIU19DMV9JMF9BMF9FUDJfRElSRUNUSU9OLCAoSFNfQzFfSTBfQTBfRVAyX01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9pbl9oaWdoYmFuZHNldCgyLCBIU19DMV9JMF9BMF9FUDJfRElSRUNUSU9OLCBIU19DMV9JMF9BMF9FUDJfTUFYX1BBQ0tFVCk7CisKKwkvKiBFUCAzICovCisJdXNiX2VwX21hcCgzLCBIU19DMV9JMF9BMF9FUDNfTUFQKTsKKwl1c2JfZmlmb19tYXAoSFNfQzFfSTBfQTBfRVAzX0ZJRk9fU1RBUlQsIEhTX0MxX0kwX0EwX0VQM19GSUZPX01BUCk7CisJdXNiX2ZpZm9fY29uZmlnKEhTX0MxX0kwX0EwX0VQM19GSUZPX1NUQVJULCBIU19DMV9JMF9BMF9FUDNfRklGT19DT05GSUcpOworCisJZm9yIChpID0gSFNfQzFfSTBfQTBfRVAzX0ZJRk9fU1RBUlQgKyAxOworCSAgICAgaSA8IEhTX0MxX0kwX0EwX0VQM19GSUZPX1NUQVJUICsgSFNfQzFfSTBfQTBfRVAzX0ZJRk9fTk87IGkrKykgeworCQl1c2JfZmlmb19jb25maWcoaSwgKEhTX0MxX0kwX0EwX0VQM19GSUZPX0NPTkZJRyAmICh+QklUKDcpKSkpOworCX0KKworCXVzYl9lcF9wYWNrZXRfc2l6ZV9oaSgzLCBIU19DMV9JMF9BMF9FUDNfRElSRUNUSU9OLCAoSFNfQzFfSTBfQTBfRVAzX01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9wYWNrZXRfc2l6ZV9sbygzLCBIU19DMV9JMF9BMF9FUDNfRElSRUNUSU9OLCAoSFNfQzFfSTBfQTBfRVAzX01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9pbl9oaWdoYmFuZHNldCgzLCBIU19DMV9JMF9BMF9FUDNfRElSRUNUSU9OLCBIU19DMV9JMF9BMF9FUDNfTUFYX1BBQ0tFVCk7CisKKwkvKiBFUCA0ICovCisJdXNiX2VwX21hcCg0LCBIU19DMV9JMF9BMF9FUDRfTUFQKTsKKwl1c2JfZmlmb19tYXAoSFNfQzFfSTBfQTBfRVA0X0ZJRk9fU1RBUlQsIEhTX0MxX0kwX0EwX0VQNF9GSUZPX01BUCk7CisJdXNiX2ZpZm9fY29uZmlnKEhTX0MxX0kwX0EwX0VQNF9GSUZPX1NUQVJULCBIU19DMV9JMF9BMF9FUDRfRklGT19DT05GSUcpOworCisJZm9yIChpID0gSFNfQzFfSTBfQTBfRVA0X0ZJRk9fU1RBUlQgKyAxOworCSAgICAgaSA8IEhTX0MxX0kwX0EwX0VQNF9GSUZPX1NUQVJUICsgSFNfQzFfSTBfQTBfRVA0X0ZJRk9fTk87IGkrKykgeworCQl1c2JfZmlmb19jb25maWcoaSwgKEhTX0MxX0kwX0EwX0VQNF9GSUZPX0NPTkZJRyAmICh+QklUKDcpKSkpOworCX0KKworCXVzYl9lcF9wYWNrZXRfc2l6ZV9oaSg0LCBIU19DMV9JMF9BMF9FUDRfRElSRUNUSU9OLCAoSFNfQzFfSTBfQTBfRVA0X01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9wYWNrZXRfc2l6ZV9sbyg0LCBIU19DMV9JMF9BMF9FUDRfRElSRUNUSU9OLCAoSFNfQzFfSTBfQTBfRVA0X01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9pbl9oaWdoYmFuZHNldCg0LCBIU19DMV9JMF9BMF9FUDRfRElSRUNUSU9OLCBIU19DMV9JMF9BMF9FUDRfTUFYX1BBQ0tFVCk7Cit9CisKK3ZvaWQgdXNiX2luaXRfZnVsbHNwZWVkX2ZpZm9fY2ZnKHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBFUCAxICovCisJdXNiX2VwX21hcCgxLCBGU19DMV9JMF9BMF9FUDFfTUFQKTsKKwl1c2JfZmlmb19tYXAoRlNfQzFfSTBfQTBfRVAxX0ZJRk9fU1RBUlQsIEZTX0MxX0kwX0EwX0VQMV9GSUZPX01BUCk7CisJdXNiX2ZpZm9fY29uZmlnKEZTX0MxX0kwX0EwX0VQMV9GSUZPX1NUQVJULCBGU19DMV9JMF9BMF9FUDFfRklGT19DT05GSUcpOworCisJZm9yIChpID0gRlNfQzFfSTBfQTBfRVAxX0ZJRk9fU1RBUlQgKyAxOworCSAgICAgaSA8IEZTX0MxX0kwX0EwX0VQMV9GSUZPX1NUQVJUICsgRlNfQzFfSTBfQTBfRVAxX0ZJRk9fTk87IGkrKykgeworCQl1c2JfZmlmb19jb25maWcoaSwgKEZTX0MxX0kwX0EwX0VQMV9GSUZPX0NPTkZJRyAmICh+QklUKDcpKSkpOworCX0KKworCXVzYl9lcF9wYWNrZXRfc2l6ZV9oaSgxLCBGU19DMV9JMF9BMF9FUDFfRElSRUNUSU9OLCAoRlNfQzFfSTBfQTBfRVAxX01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9wYWNrZXRfc2l6ZV9sbygxLCBGU19DMV9JMF9BMF9FUDFfRElSRUNUSU9OLCAoRlNfQzFfSTBfQTBfRVAxX01BWF9QQUNLRVQgJiAweDdmZikpOworCS8qIGBgLkpXRUkgMjAwMy8wNC8yOSAqLworCXVzYl9lcF9pbl9oaWdoYmFuZHNldCgxLCBGU19DMV9JMF9BMF9FUDFfRElSRUNUSU9OLCBGU19DMV9JMF9BMF9FUDFfTUFYX1BBQ0tFVCk7CisKKwkvKiBFUCAyICovCisJdXNiX2VwX21hcCgyLCBGU19DMV9JMF9BMF9FUDJfTUFQKTsKKwl1c2JfZmlmb19tYXAoRlNfQzFfSTBfQTBfRVAyX0ZJRk9fU1RBUlQsIEZTX0MxX0kwX0EwX0VQMl9GSUZPX01BUCk7CisJdXNiX2ZpZm9fY29uZmlnKEZTX0MxX0kwX0EwX0VQMl9GSUZPX1NUQVJULCBGU19DMV9JMF9BMF9FUDJfRklGT19DT05GSUcpOworCisJZm9yIChpID0gRlNfQzFfSTBfQTBfRVAyX0ZJRk9fU1RBUlQgKyAxOworCSAgICAgaSA8IEZTX0MxX0kwX0EwX0VQMl9GSUZPX1NUQVJUICsgRlNfQzFfSTBfQTBfRVAyX0ZJRk9fTk87IGkrKykgeworCQl1c2JfZmlmb19jb25maWcoaSwgKEZTX0MxX0kwX0EwX0VQMl9GSUZPX0NPTkZJRyAmICh+QklUKDcpKSkpOworCX0KKworCXVzYl9lcF9wYWNrZXRfc2l6ZV9oaSgyLCBGU19DMV9JMF9BMF9FUDJfRElSRUNUSU9OLCAoRlNfQzFfSTBfQTBfRVAyX01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9wYWNrZXRfc2l6ZV9sbygyLCBGU19DMV9JMF9BMF9FUDJfRElSRUNUSU9OLCAoRlNfQzFfSTBfQTBfRVAyX01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9pbl9oaWdoYmFuZHNldCgyLCBGU19DMV9JMF9BMF9FUDJfRElSRUNUSU9OLCBGU19DMV9JMF9BMF9FUDJfTUFYX1BBQ0tFVCk7CisKKwkvKiBFUCAzICovCisJdXNiX2VwX21hcCgzLCBGU19DMV9JMF9BMF9FUDNfTUFQKTsKKwl1c2JfZmlmb19tYXAoRlNfQzFfSTBfQTBfRVAzX0ZJRk9fU1RBUlQsIEZTX0MxX0kwX0EwX0VQM19GSUZPX01BUCk7CisJdXNiX2ZpZm9fY29uZmlnKEZTX0MxX0kwX0EwX0VQM19GSUZPX1NUQVJULCBGU19DMV9JMF9BMF9FUDNfRklGT19DT05GSUcpOworCisJZm9yIChpID0gRlNfQzFfSTBfQTBfRVAzX0ZJRk9fU1RBUlQgKyAxOworCSAgICAgaSA8IEZTX0MxX0kwX0EwX0VQM19GSUZPX1NUQVJUICsgRlNfQzFfSTBfQTBfRVAzX0ZJRk9fTk87IGkrKykgeworCQl1c2JfZmlmb19jb25maWcoaSwgKEZTX0MxX0kwX0EwX0VQM19GSUZPX0NPTkZJRyAmICh+QklUKDcpKSkpOworCX0KKworCXVzYl9lcF9wYWNrZXRfc2l6ZV9oaSgzLCBGU19DMV9JMF9BMF9FUDNfRElSRUNUSU9OLCAoRlNfQzFfSTBfQTBfRVAzX01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9wYWNrZXRfc2l6ZV9sbygzLCBGU19DMV9JMF9BMF9FUDNfRElSRUNUSU9OLCAoRlNfQzFfSTBfQTBfRVAzX01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9pbl9oaWdoYmFuZHNldCgzLCBGU19DMV9JMF9BMF9FUDNfRElSRUNUSU9OLCBGU19DMV9JMF9BMF9FUDNfTUFYX1BBQ0tFVCk7CisKKwkvKiBFUCA0ICovCisJdXNiX2VwX21hcCg0LCBGU19DMV9JMF9BMF9FUDRfTUFQKTsKKwl1c2JfZmlmb19tYXAoRlNfQzFfSTBfQTBfRVA0X0ZJRk9fU1RBUlQsIEZTX0MxX0kwX0EwX0VQNF9GSUZPX01BUCk7CisJdXNiX2ZpZm9fY29uZmlnKEZTX0MxX0kwX0EwX0VQNF9GSUZPX1NUQVJULCBGU19DMV9JMF9BMF9FUDRfRklGT19DT05GSUcpOworCisJZm9yIChpID0gRlNfQzFfSTBfQTBfRVA0X0ZJRk9fU1RBUlQgKyAxOworCSAgICAgaSA8IEZTX0MxX0kwX0EwX0VQNF9GSUZPX1NUQVJUICsgRlNfQzFfSTBfQTBfRVA0X0ZJRk9fTk87IGkrKykgeworCQl1c2JfZmlmb19jb25maWcoaSwgKEZTX0MxX0kwX0EwX0VQNF9GSUZPX0NPTkZJRyAmICh+QklUKDcpKSkpOworCX0KKworCXVzYl9lcF9wYWNrZXRfc2l6ZV9oaSg0LCBGU19DMV9JMF9BMF9FUDRfRElSRUNUSU9OLCAoRlNfQzFfSTBfQTBfRVA0X01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9wYWNrZXRfc2l6ZV9sbyg0LCBGU19DMV9JMF9BMF9FUDRfRElSRUNUSU9OLCAoRlNfQzFfSTBfQTBfRVA0X01BWF9QQUNLRVQgJiAweDdmZikpOworCXVzYl9lcF9pbl9oaWdoYmFuZHNldCg0LCBGU19DMV9JMF9BMF9FUDRfRElSRUNUSU9OLCBGU19DMV9JMF9BMF9FUDRfTUFYX1BBQ0tFVCk7Cit9CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfVVNCX01PREVTV0lUQ0ggKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY2FybGZ3L3VzYi9tYWluLmMgYi9jYXJsOTE3MGZ3L2Nhcmxmdy91c2IvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDk3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2Nhcmxmdy91c2IvbWFpbi5jCkBAIC0wLDAgKzEsNDMyIEBACisvKgorICogY2FybDkxNzAgZmlybXdhcmUgLSB1c2VkIGJ5IHRoZSBhcjkxNzAgd2lyZWxlc3MgZGV2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICogQ29weXJpZ2h0CTIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEJQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY2FybDkxNzAuaCIKKworI2luY2x1ZGUgInNoYXJlZC9waHkuaCIKKyNpbmNsdWRlICJob3N0aWYuaCIKKyNpbmNsdWRlICJwcmludGYuaCIKKyNpbmNsdWRlICJ0aW1lci5oIgorI2luY2x1ZGUgInJvbS5oIgorI2luY2x1ZGUgIndsLmgiCisjaW5jbHVkZSAid29sLmgiCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19ERUJVR19VU0IKK3ZvaWQgdXNiX3B1dGMoY29uc3QgY2hhciBjKQoreworCWZ3LnVzYi5wdXRfYnVmZmVyW2Z3LnVzYi5wdXRfaW5kZXgrK10gPSAodWludDhfdCkgYzsKKworCWlmIChmdy51c2IucHV0X2luZGV4ID09IENBUkw5MTcwX01BWF9DTURfUEFZTE9BRF9MRU4gfHwgYyA9PSAnXDAnKSB7CisJCWZ3LnVzYi5wdXRfYnVmZmVyW2Z3LnVzYi5wdXRfaW5kZXhdID0gMDsKKworCQlzZW5kX2NtZF90b19ob3N0KF9fcm91bmR1cChmdy51c2IucHV0X2luZGV4LCA0KSwKKwkJCQkgQ0FSTDkxNzBfUlNQX1RFWFQsIGZ3LnVzYi5wdXRfaW5kZXgsCisJCQkJIGZ3LnVzYi5wdXRfYnVmZmVyKTsKKwkJZncudXNiLnB1dF9pbmRleCA9IDA7CisJfQorfQorCit2b2lkIHVzYl9wcmludF9oZXhfZHVtcChjb25zdCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IDAsIGJsb2NrID0gMDsKKwl3aGlsZSAobGVuID4gMCkgeworCQlibG9jayA9IG1pbihfX3JvdW5kdXAobGVuLCA0KSwgQ0FSTDkxNzBfTUFYX0NNRF9QQVlMT0FEX0xFTik7CisKKwkJc2VuZF9jbWRfdG9faG9zdChibG9jaywgQ0FSTDkxNzBfUlNQX0hFWERVTVAsIGxlbiwKKwkJCQkgKGNvbnN0IHVpbnQ4X3QgKikgYnVmICsgb2Zmc2V0KTsKKworCQlvZmZzZXQgKz0gYmxvY2s7CisJCWxlbiAtPSBibG9jazsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfREVCVUdfVVNCICovCisKKy8qIGdyYWIgYSBidWZmZXIgZnJvbSB0aGUgaW50ZXJydXB0IGluIHF1ZXVlIHJpbmctYnVmZmVyICovCitzdGF0aWMgc3RydWN0IGNhcmw5MTcwX3JzcCAqZ2V0X2ludF9idWYodm9pZCkKK3sKKwlzdHJ1Y3QgY2FybDkxNzBfcnNwICp0bXA7CisKKwkvKiBmZXRjaCB0aGUgX29sZGVzdF8gYnVmZmVyIGZyb20gdGhlIHJpbmcgKi8KKwl0bXAgPSAmZncudXNiLmludF9idWZbZncudXNiLmludF90YWlsX2luZGV4XTsKKworCS8qIGFzc2lnbiBhIHVuaXF1ZSBzZXF1ZW5jZSBmb3IgZXZlcnkgcmVzcG9uc2UvdHJhcCAqLworCXRtcC0+aGRyLnNlcSA9IGZ3LnVzYi5pbnRfdGFpbF9pbmRleDsKKworCWZ3LnVzYi5pbnRfdGFpbF9pbmRleCsrOworCisJZncudXNiLmludF90YWlsX2luZGV4ICU9IENBUkw5MTcwX0lOVF9SUV9DQUNIRVM7CisJaWYgKGZ3LnVzYi5pbnRfcGVuZGluZyAhPSBDQVJMOTE3MF9JTlRfUlFfQ0FDSEVTKQorCQlmdy51c2IuaW50X3BlbmRpbmcrKzsKKworCXJldHVybiB0bXA7Cit9CisKKy8qIFBvcCB1cCBkYXRhIGZyb20gSW50ZXJydXB0IElOIFF1ZXVlIHRvIFVTQiBSZXNwb25zZSBidWZmZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2FybDkxNzBfcnNwICpkZXF1ZXVlX2ludF9idWYodW5zaWduZWQgaW50IHNwYWNlKQoreworCXN0cnVjdCBjYXJsOTE3MF9yc3AgKnRtcCA9IE5VTEw7CisKKwlpZiAoZncudXNiLmludF9wZW5kaW5nID4gMCkgeworCQl0bXAgPSAmZncudXNiLmludF9idWZbZncudXNiLmludF9oZWFkX2luZGV4XTsKKworCQlpZiAoKHVuc2lnbmVkIGludCkodG1wLT5oZHIubGVuICsgOCkgPiBzcGFjZSkKKwkJCXJldHVybiBOVUxMOworCisJCWZ3LnVzYi5pbnRfaGVhZF9pbmRleCsrOworCQlmdy51c2IuaW50X2hlYWRfaW5kZXggJT0gQ0FSTDkxNzBfSU5UX1JRX0NBQ0hFUzsKKwkJZncudXNiLmludF9wZW5kaW5nLS07CisJfQorCisJcmV0dXJuIHRtcDsKK30KKworc3RhdGljIHZvaWQgdXNiX2RhdGFfaW4odm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgdXNiX3JlZ19vdXQodm9pZCkKK3sKKwl1aW50MzJfdCAqcmVnYWRkciA9ICh1aW50MzJfdCAqKSAmZG1hX21lbS5yZXNlcnZlZC5jbWQ7CisJdWludDE2X3QgdXNiZmlmb2xlbiwgaTsKKworCXVzYl9yZXNldF9vdXQoKTsKKworCXVzYmZpZm9sZW4gPSBnZXRiKEFSOTE3MF9VU0JfUkVHX0VQNF9CWVRFX0NPVU5UX0xPVykgfAorCQkgICAgIGdldGIoQVI5MTcwX1VTQl9SRUdfRVA0X0JZVEVfQ09VTlRfSElHSCkgPDwgODsKKworCWlmICh1c2JmaWZvbGVuICYgMHgzKQorCQl1c2JmaWZvbGVuID0gKHVzYmZpZm9sZW4gPj4gMikgKyAxOworCWVsc2UKKwkJdXNiZmlmb2xlbiA9IHVzYmZpZm9sZW4gPj4gMjsKKworCWZvciAoaSA9IDA7IGkgPCB1c2JmaWZvbGVuOyBpKyspCisJCSpyZWdhZGRyKysgPSBnZXQoQVI5MTcwX1VTQl9SRUdfRVA0X0RBVEEpOworCisJaGFuZGxlX2NtZChnZXRfaW50X2J1ZigpKTsKKworCXVzYl90cmlnZ2VyX2luKCk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9zdGF0dXNfaW4odm9pZCkKK3sKKwlzdHJ1Y3QgY2FybDkxNzBfcnNwICpyc3A7CisJdW5zaWduZWQgaW50IHJlbSwgdGxlbiwgZWxlbjsKKworCWlmICghZncudXNiLmludF9kZXNjX2F2YWlsYWJsZSkKKwkJcmV0dXJuIDsKKworCWZ3LnVzYi5pbnRfZGVzY19hdmFpbGFibGUgPSAwOworCisJcmVtID0gQVI5MTcwX0JMT0NLX1NJWkUgLSBBUjkxNzBfSU5UX01BR0lDX0hFQURFUl9TSVpFOworCXRsZW4gPSBBUjkxNzBfSU5UX01BR0lDX0hFQURFUl9TSVpFOworCisJdXNiX3Jlc2V0X2luKCk7CisKKwl3aGlsZSAoZncudXNiLmludF9wZW5kaW5nKSB7CisJCXJzcCA9IGRlcXVldWVfaW50X2J1ZihyZW0pOworCQlpZiAoIXJzcCkKKwkJCWJyZWFrOworCisJCWVsZW4gPSByc3AtPmhkci5sZW4gKyA0OworCisJCW1lbWNweShERVNDX1BBWUxPQURfT0ZGKGZ3LnVzYi5pbnRfZGVzYywgdGxlbiksIHJzcCwgZWxlbik7CisKKwkJcmVtIC09IGVsZW47CisJCXRsZW4gKz0gZWxlbjsKKwl9CisKKwlpZiAodGxlbiA9PSBBUjkxNzBfSU5UX01BR0lDX0hFQURFUl9TSVpFKSB7CisJCURCRygiYXR0ZW1wdGVkIHRvIHNlbmQgYW4gZW1wdHkgaW50IHJlc3BvbnNlIVxuIik7CisJCWdvdG8gcmVjbGFpbTsKKwl9CisKKwlmdy51c2IuaW50X2Rlc2MtPmN0cmwgPSBBUjkxNzBfQ1RSTF9GU19CSVQgfCBBUjkxNzBfQ1RSTF9MU19CSVQ7CisJZncudXNiLmludF9kZXNjLT50b3RhbExlbiA9IHRsZW47CisJZncudXNiLmludF9kZXNjLT5kYXRhU2l6ZSA9IHRsZW47CisKKwkvKiBQdXQgdG8gVXBRICovCisJZG1hX3B1dCgmZncucHRhLnVwX3F1ZXVlLCBmdy51c2IuaW50X2Rlc2MpOworCisJLyogVHJpZ2dlciBQVEEgVVAgRE1BICovCisJc2V0KEFSOTE3MF9QVEFfUkVHX1VQX0RNQV9UUklHR0VSLCAxKTsKKwl1c2JfdHJpZ2dlcl9vdXQoKTsKKworCXJldHVybiA7CisKK3JlY2xhaW06CisJLyogVE9ETzogbm90IHN1cmUgd2hhdCB0byBkbyBoZXJlICovCisJZncudXNiLmludF9kZXNjX2F2YWlsYWJsZSA9IDE7Cit9CisKK3ZvaWQgc2VuZF9jbWRfdG9faG9zdChjb25zdCB1aW50OF90IGxlbiwgY29uc3QgdWludDhfdCB0eXBlLAorCQkgICAgICBjb25zdCB1aW50OF90IGV4dCwgY29uc3QgdWludDhfdCAqYm9keSkKK3sKKwlzdHJ1Y3QgY2FybDkxNzBfY21kICpyZXNwOworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfREVCVUcKKwlpZiAodW5saWtlbHkobGVuID4gc2l6ZW9mKHJlc3AtPmRhdGEpKSkgeworCQlEQkcoIkNNRCB0b28gbG9uZzoleCAlZFxuIiwgdHlwZSwgbGVuKTsKKwkJcmV0dXJuIDsKKwl9CisKKwkvKiBFbGVtZW50IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4gKi8KKwlpZiAodW5saWtlbHkobGVuICYgMHgzKSkgeworCQlEQkcoIkNNRCBsZW5ndGggbm90IG11bHQuIG9mIDQ6JXggJWRcbiIsIHR5cGUsIGxlbik7CisJCXJldHVybiA7CisJfQorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX0RFQlVHICovCisKKwlyZXNwID0gKHN0cnVjdCBjYXJsOTE3MF9jbWQgKikgZ2V0X2ludF9idWYoKTsKKwlpZiAodW5saWtlbHkocmVzcCA9PSBOVUxMKSkgeworCQkvKiBub3QgdmVyeSBoZWxwZnVsIGZvciBOT04gVUFSVCB1c2VycyAqLworCQlEQkcoIm91dCBvZiBtc2cgYnVmZmVyc1xuIik7CisJCXJldHVybiA7CisJfQorCisJcmVzcC0+aGRyLmxlbiA9IGxlbjsKKwlyZXNwLT5oZHIuY21kID0gdHlwZTsKKwlyZXNwLT5oZHIuZXh0ID0gZXh0OworCisJbWVtY3B5KHJlc3AtPmRhdGEsIGJvZHksIGxlbik7CisJdXNiX3RyaWdnZXJfaW4oKTsKK30KKworLyogVHVybiBvZmYgQUREQS9SRiBwb3dlciwgUExMICovCitzdGF0aWMgdm9pZCB0dXJuX3Bvd2VyX29mZih2b2lkKQoreworCXNldChBUjkxNzBfUEhZX1JFR19BQ1RJVkUsIEFSOTE3MF9QSFlfQUNUSVZFX0RJUyk7CisJc2V0KEFSOTE3MF9QSFlfUkVHX0FEQ19DVEwsIDB4YTAwMDAwMDAgfAorCSAgICBBUjkxNzBfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyB8IEFSOTE3MF9QSFlfQURDX0NUTF9PRkZfUFdEREFDKTsKKworCS8qIFRoaXMgd2lsbCBhbHNvIHR1cm4tb2ZmIHRoZSBMRURzICovCisJc2V0KEFSOTE3MF9HUElPX1JFR19QT1JUX0RBVEEsIDApOworCXNldChBUjkxNzBfR1BJT19SRUdfUE9SVF9UWVBFLCAweGYpOworCisJc2V0KEFSOTE3MF9QV1JfUkVHX0JBU0UsIDB4NDAwMjEpOworCisJc2V0KEFSOTE3MF9NQUNfUkVHX0RNQV9UUklHR0VSLCAwKTsKKworCWFuZGwoQVI5MTcwX1VTQl9SRUdfRE1BX0NUTCwgfihBUjkxNzBfVVNCX0RNQV9DVExfRU5BQkxFX1RPX0RFVklDRSB8CisJCQkJICAgICAgIEFSOTE3MF9VU0JfRE1BX0NUTF9FTkFCTEVfRlJPTV9ERVZJQ0UgfAorCQkJCSAgICAgICBBUjkxNzBfVVNCX0RNQV9DVExfVVBfUEFDS0VUX01PREUgfAorCQkJCSAgICAgICBBUjkxNzBfVVNCX0RNQV9DVExfRE9XTl9TVFJFQU0pKTsKKworCS8qIERvIGEgc29mdHdhcmUgcmVzZXQgdG8gUFRBIGNvbXBvbmVudCAqLworCW9ybChBUjkxNzBfUFRBX1JFR19ETUFfTU9ERV9DVFJMLCBBUjkxNzBfUFRBX0RNQV9NT0RFX0NUUkxfUkVTRVQpOworCWFuZGwoQVI5MTcwX1BUQV9SRUdfRE1BX01PREVfQ1RSTCwgfkFSOTE3MF9QVEFfRE1BX01PREVfQ1RSTF9SRVNFVCk7CisKKwlvcmwoQVI5MTcwX1BUQV9SRUdfRE1BX01PREVfQ1RSTCwgQVI5MTcwX1BUQV9ETUFfTU9ERV9DVFJMX0RJU0FCTEVfVVNCKTsKKworCXNldChBUjkxNzBfTUFDX1JFR19QT1dFUl9TVEFURV9DVFJMLAorCSAgICBBUjkxNzBfTUFDX1BPV0VSX1NUQVRFX0NUUkxfUkVTRVQpOworCisJLyogUmVzZXQgVVNCIEZJRk8gKi8KKwlzZXQoQVI5MTcwX1BXUl9SRUdfUkVTRVQsIEFSOTE3MF9QV1JfUkVTRVRfQ09NTUlUX1JFU0VUX01BU0sgfAorCQkJCSAgQVI5MTcwX1BXUl9SRVNFVF9ETUFfTUFTSyB8CisJCQkJICBBUjkxNzBfUFdSX1JFU0VUX1dMQU5fTUFTSyk7CisJc2V0KEFSOTE3MF9QV1JfUkVHX1JFU0VULCAweDApOworCisJY2xvY2tfc2V0KEFIQl8yMF8yMk1IWiwgZmFsc2UpOworCisJc2V0KEFSOTE3MF9QV1JfUkVHX1BMTF9BRERBQywgMHg1MTYzKTsJLyogMHg1MDJiOyAqLworCXNldChBUjkxNzBfUEhZX1JFR19BRENfU0VSSUFMX0NUTCwgQVI5MTcwX1BIWV9BRENfU0NUTF9TRUxfRVhURVJOQUxfUkFESU8pOworCXNldCgweDFjNTg5YywgMCk7CS8qIDctMCAqLworCXNldCgweDFjNTg5YywgMCk7CS8qIDE1LTggKi8KKwlzZXQoMHgxYzU4OWMsIDApOwkvKiAyMy0xNiAqLworCXNldCgweDFjNTg5YywgMCk7CS8qIDMxLSAqLworCXNldCgweDFjNTg5YywgMCk7CS8qIDM5LSAqLworCXNldCgweDFjNTg5YywgMCk7CS8qIDQ3LSAqLworCXNldCgweDFjNTg5YywgMCk7CS8qIDU1LSAqLworCXNldCgweDFjNTg5YywgMHhmOCk7CS8qIDYzLSAqLworCXNldCgweDFjNTg5YywgMHgyNyk7CS8qIDB4MjQ7CTcxLQltb2RpZmllZCAqLworCXNldCgweDFjNTg5YywgMHhmOSk7CS8qIDc5LSAqLworCXNldCgweDFjNTg5YywgMHg5MCk7CS8qIDg3LSAqLworCXNldCgweDFjNTg5YywgMHgwNCk7CS8qIDk1LSAqLworCXNldCgweDFjNTg5YywgMHg0OCk7CS8qIDEwMy0gKi8KKwlzZXQoMHgxYzU4OWMsIDB4MTkpOwkvKiAwOwkJMTExLQltb2RpZmllZCAqLworCXNldCgweDFjNTg5YywgMCk7CS8qIDExOS0gKi8KKwlzZXQoMHgxYzU4OWMsIDApOwkvKiAxMjctICovCisJc2V0KDB4MWM1ODljLCAwKTsJLyogMTM1LSAqLworCXNldCgweDFjNTg5YywgMCk7CS8qIDE0My0gKi8KKwlzZXQoMHgxYzU4OWMsIDApOwkvKiAxNTEtICovCisJc2V0KDB4MWM1ODljLCAweDcwKTsJLyogMTU5LSAqLworCXNldCgweDFjNTg5YywgMHgwYyk7CS8qIDE2Ny0gKi8KKwlzZXQoMHgxYzU4OWMsIDApOwkvKiAxNzUtICovCisJc2V0KDB4MWM1ODljLCAwKTsJLyogMTgzLTE3NiAqLworCXNldCgweDFjNTg5YywgMCk7CS8qIDE5MS0xODQgKi8KKwlzZXQoMHgxYzU4OWMsIDApOwkvKiAxOTktICovCisJc2V0KDB4MWM1ODljLCAwKTsJLyogMjA3LSAqLworCXNldCgweDFjNTg5YywgMCk7CS8qIDIxNS0gKi8KKwlzZXQoMHgxYzU4OWMsIDApOwkvKiAyMjMtICovCisJc2V0KDB4MWM1ODljLCAwKTsJLyogMjMxLSAqLworCXNldCgweDFjNThjNCwgMCk7CS8qIDIzMy0gMjMyICovCisJc2V0KEFSOTE3MF9QSFlfUkVHX0FEQ19TRVJJQUxfQ1RMLCBBUjkxNzBfUEhZX0FEQ19TQ1RMX1NFTF9JTlRFUk5BTF9BRERBQyk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfd2F0Y2hkb2codm9pZCkKK3sKKwlpZiAoIWZ3LndhdGNoZG9nX2VuYWJsZSkKKwkJcmV0dXJuOworCisJLyogd3JpdGUgd2F0Y2hkb2cgbWFnaWMgcGF0dGVybiBmb3Igc3VzcGVuZCAgKi8KKwlhbmRsKEFSOTE3MF9QV1JfUkVHX1dBVENIX0RPR19NQUdJQywgMHhmZmZmKTsKKwlvcmwoQVI5MTcwX1BXUl9SRUdfV0FUQ0hfRE9HX01BR0lDLCAweDk4NzYwMDAwKTsKKworCS8qIERpc2FibGUgd2F0Y2hkb2cgKi8KKwlzZXQoQVI5MTcwX1RJTUVSX1JFR19XQVRDSF9ET0csIDB4ZmZmZik7Cit9CisKK3ZvaWQgX19ub3JldHVybiByZWJvb3Qodm9pZCkKK3sKKwlkaXNhYmxlX3dhdGNoZG9nKCk7CisKKwkvKiBUdXJuIG9mZiBwb3dlciAqLworCXR1cm5fcG93ZXJfb2ZmKCk7CisKKwkvKiBjbGVhbiBib290bG9hZGVyIHdvcmtzcGFjZSAqLworCW1lbXNldCgmZG1hX21lbSwgMCwgc2l6ZW9mKGRtYV9tZW0pKTsKKworCS8qIGFkZCBieSB5Z3dlaSBmb3Igd29yayBhcm91bmQgVVNCIFBIWSBjaGlycCBzZXF1ZW5jZSBwcm9ibGVtICovCisJc2V0KDB4MTBmMTAwLCAweDEyMzQ1Njc4KTsKKworCS8qIEp1bXAgdG8gYm9vdCBjb2RlICovCisJanVtcF90b19ib290Y29kZSgpOworfQorCisvKiBzZXJ2aWNlIFVTQiBldmVudHMgYW5kIHJlLWVuYWJsZSBVU0IgaW50ZXJydXB0ICovCitzdGF0aWMgdm9pZCB1c2JfaGFuZGxlcih1aW50OF90IHVzYl9pbnRlcnJ1cHRfbGV2ZWwxKQoreworCXVpbnQ4X3QgdXNiX2ludGVycnVwdF9sZXZlbDI7CisKKwlpZiAodXNiX2ludGVycnVwdF9sZXZlbDEgJiBCSVQoNSkpCisJCXVzYl9kYXRhX2luKCk7CisKKwlpZiAodXNiX2ludGVycnVwdF9sZXZlbDEgJiBCSVQoNCkpCisJCXVzYl9yZWdfb3V0KCk7CisKKwlpZiAodXNiX2ludGVycnVwdF9sZXZlbDEgJiBCSVQoNikpCisJCXVzYl9zdGF0dXNfaW4oKTsKKworCWlmICh1c2JfaW50ZXJydXB0X2xldmVsMSAmIEJJVCgwKSkgeworCQl1c2JfaW50ZXJydXB0X2xldmVsMiA9IGdldGIoQVI5MTcwX1VTQl9SRUdfSU5UUl9TT1VSQ0VfMCk7CisKKwkJaWYgKHVzYl9pbnRlcnJ1cHRfbGV2ZWwyICYgQVI5MTcwX1VTQl9JTlRSX1NSQzBfU0VUVVApCisJCQl1c2JfZXAwc2V0dXAoKTsKKworCQlpZiAodXNiX2ludGVycnVwdF9sZXZlbDIgJiBBUjkxNzBfVVNCX0lOVFJfU1JDMF9JTikKKwkJCXVzYl9lcDB0eCgpOworCisJCWlmICh1c2JfaW50ZXJydXB0X2xldmVsMiAmIEFSOTE3MF9VU0JfSU5UUl9TUkMwX09VVCkKKwkJCXVzYl9lcDByeCgpOworCisJCWlmICh1c2JfaW50ZXJydXB0X2xldmVsMiAmIEFSOTE3MF9VU0JfSU5UUl9TUkMwX0FCT1JUKSB7CisJCQkvKiBDbGVhciB0aGUgY29tbWFuZCBhYm9ydCBpbnRlcnJ1cHQgKi8KKwkJCWFuZGIoQVI5MTcwX1VTQl9SRUdfSU5UUl9TT1VSQ0VfMCwgKHVpbnQ4X3QpCisJCQkgICAgIH5BUjkxNzBfVVNCX0lOVFJfU1JDMF9BQk9SVCk7CisJCX0KKworCQlpZiAodXNiX2ludGVycnVwdF9sZXZlbDIgJiBBUjkxNzBfVVNCX0lOVFJfU1JDMF9GQUlMIHx8CisJCSAgICBmdy51c2IuZXAwX2FjdGlvbiAmIENBUkw5MTcwX0VQMF9TVEFMTCkgeworCQkJLyoKKwkJCSAqIHRyYW5zbWlzc2lvbiBmYWlsdXJlLgorCQkJICogc3RhbGwgZXAgMAorCQkJICovCisJCQlzZXRiKEFSOTE3MF9VU0JfUkVHX0NYX0NPTkZJR19TVEFUVVMsIEJJVCgyKSk7CisJCQlmdy51c2IuZXAwX2FjdGlvbiAmPSB+Q0FSTDkxNzBfRVAwX1NUQUxMOworCQl9CisKKwkJaWYgKHVzYl9pbnRlcnJ1cHRfbGV2ZWwyICYgQVI5MTcwX1VTQl9JTlRSX1NSQzBfRU5EIHx8CisJCSAgICBmdy51c2IuZXAwX2FjdGlvbiAmIENBUkw5MTcwX0VQMF9UUklHR0VSKSB7CisJCQkvKgorCQkJICogdHJhbnNtaXNzaW9uIGRvbmUuCisJCQkgKiBzZXQgRE9ORSBiaXQuCisJCQkgKi8KKwkJCXNldGIoQVI5MTcwX1VTQl9SRUdfQ1hfQ09ORklHX1NUQVRVUywgQklUKDApKTsKKwkJCWZ3LnVzYi5lcDBfYWN0aW9uICY9IH5DQVJMOTE3MF9FUDBfVFJJR0dFUjsKKwkJfQorCX0KKworCWlmICh1c2JfaW50ZXJydXB0X2xldmVsMSAmIEJJVCg3KSkgeworCQl1c2JfaW50ZXJydXB0X2xldmVsMiA9IGdldGIoQVI5MTcwX1VTQl9SRUdfSU5UUl9TT1VSQ0VfNyk7CisKKwkJaWYgKHVzYl9pbnRlcnJ1cHRfbGV2ZWwyICYgQVI5MTcwX1VTQl9JTlRSX1NSQzdfUlgwQllURSkKKwkJCXVzYl9kYXRhX291dDBCeXRlKCk7CisKKwkJaWYgKHVzYl9pbnRlcnJ1cHRfbGV2ZWwyICYgQVI5MTcwX1VTQl9JTlRSX1NSQzdfVFgwQllURSkKKwkJCXVzYl9kYXRhX2luMEJ5dGUoKTsKKworCQlpZiAodXNiX2ludGVycnVwdF9sZXZlbDIgJiBBUjkxNzBfVVNCX0lOVFJfU1JDN19VU0JfUkVTRVQpIHsKKwkJCXVzYl9yZXNldF9hY2soKTsKKwkJCXJlYm9vdCgpOworCQl9CisKKwkJaWYgKHVzYl9pbnRlcnJ1cHRfbGV2ZWwyICYgQVI5MTcwX1VTQl9JTlRSX1NSQzdfVVNCX1NVU1BFTkQpIHsKKwkJCXVzYl9zdXNwZW5kX2FjaygpOworCisJCQlmdy5zdXNwZW5kX21vZGUgPSBDQVJMOTE3MF9IT1NUX1NVU1BFTkRFRDsKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1dPTAorCQkJaWYgKCEoZncudXNiLmRldmljZV9mZWF0dXJlICYgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKSB8fAorCQkJICAgICFmdy53b2wuY21kLmZsYWdzKSB7CisJCQkJZGlzYWJsZV93YXRjaGRvZygpOworCisJCQkJLyogR09fVE9fU1VTUEVORCBzdG9wcyB0aGUgQ1BVIGNsb2NrIHRvby4gKi8KKwkJCQlvcmIoQVI5MTcwX1VTQl9SRUdfTUFJTl9DVFJMLCBBUjkxNzBfVVNCX01BSU5fQ1RSTF9HT19UT19TVVNQRU5EKTsKKwkJCX0gZWxzZSB7CisJCQkJd29sX3ByZXBhcmUoKTsKKwkJCX0KKyNlbHNlIC8qIENPTkZJR19DQVJMOTE3MEZXX1dPTCAqLworCQkJZGlzYWJsZV93YXRjaGRvZygpOworCisJCQkvKiBHT19UT19TVVNQRU5EIHN0b3BzIHRoZSBDUFUgY2xvY2sgdG9vLiAqLworCQkJb3JiKEFSOTE3MF9VU0JfUkVHX01BSU5fQ1RSTCwgQVI5MTcwX1VTQl9NQUlOX0NUUkxfR09fVE9fU1VTUEVORCk7CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfV09MICovCisJCX0KKworCQlpZiAodXNiX2ludGVycnVwdF9sZXZlbDIgJiBBUjkxNzBfVVNCX0lOVFJfU1JDN19VU0JfUkVTVU1FKSB7CisJCQl1c2JfcmVzdW1lX2FjaygpOworCisJCQlmdy5zdXNwZW5kX21vZGUgPSBDQVJMOTE3MF9IT1NUX0FXQUtFOworCQkJc2V0KEFSOTE3MF9VU0JfUkVHX1dBS0VfVVAsIDApOworCisJCQlyZWJvb3QoKTsKKwkJfQorCX0KK30KKwordm9pZCBoYW5kbGVfdXNiKHZvaWQpCit7CisJdWludDhfdCB1c2JfaW50ZXJydXB0X2xldmVsMTsKKworCXVzYl9pbnRlcnJ1cHRfbGV2ZWwxID0gZ2V0YihBUjkxNzBfVVNCX1JFR19JTlRSX0dST1VQKTsKKworCWlmICh1c2JfaW50ZXJydXB0X2xldmVsMSkKKwkJdXNiX2hhbmRsZXIodXNiX2ludGVycnVwdF9sZXZlbDEpOworCisJaWYgKGZ3LnVzYi5pbnRfcGVuZGluZyA+IDApCisJCXVzYl90cmlnZ2VyX2luKCk7Cit9CisKK3ZvaWQgdXNiX3RpbWVyKHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2Nhcmxmdy91c2IvdXNiLmMgYi9jYXJsOTE3MGZ3L2Nhcmxmdy91c2IvdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiOGY4YwotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY2FybGZ3L3VzYi91c2IuYwpAQCAtMCwwICsxLDc1OCBAQAorLyoKKyAqIGNhcmw5MTcwIGZpcm13YXJlIC0gdXNlZCBieSB0aGUgYXI5MTcwIHdpcmVsZXNzIGRldmljZQorICoKKyAqIFVTQiBDb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodAkyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExCUNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKyNpbmNsdWRlICJjYXJsOTE3MC5oIgorI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInByaW50Zi5oIgorI2luY2x1ZGUgInJvbS5oIgorCisvKgorICogTkI6IFRoZSBmaXJtd2FyZSBoYXMgdG8gd3JpdGUgaW50byB0aGVzZSBzdHJ1Y3R1cmVzCisgKiBzbyBkb24ndCB0cnkgdG8gbWFrZSB0aGVtICJjb25zdCIuCisgKi8KKworc3RhdGljIHN0cnVjdCBhcjkxNzBfdXNiX2NvbmZpZyB1c2JfY29uZmlnX2hpZ2hzcGVlZCA9IHsKKwkuY2ZnID0geworCQkuYkxlbmd0aCA9IFVTQl9EVF9DT05GSUdfU0laRSwKKwkJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9DT05GSUcsCisJCS53VG90YWxMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YodXNiX2NvbmZpZ19oaWdoc3BlZWQpKSwKKwkJLmJOdW1JbnRlcmZhY2VzID0gMSwKKwkJLmJDb25maWd1cmF0aW9uVmFsdWUgPSAxLAorCQkuaUNvbmZpZ3VyYXRpb24gPSAwLAorCQkuYm1BdHRyaWJ1dGVzID0gVVNCX0NPTkZJR19BVFRfT05FIHwKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19XT0wKKwkJCQlVU0JfQ09ORklHX0FUVF9XQUtFVVAgfAorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1dPTCAqLworCQkJCTAsCisJCS5iTWF4UG93ZXIgPSAweGZhLCAvKiA1MDAgbUEgKi8KKwl9LAorCisJLmludGYgPSB7CisJCS5iTGVuZ3RoID0gVVNCX0RUX0lOVEVSRkFDRV9TSVpFLAorCQkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0lOVEVSRkFDRSwKKwkJLmJJbnRlcmZhY2VOdW1iZXIgPSAwLAorCQkuYkFsdGVybmF0ZVNldHRpbmcgPSAwLAorCQkuYk51bUVuZHBvaW50cyA9IEFSOTE3MF9VU0JfTlVNX0VYVFJBX0VQLAorCQkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLAorCQkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX1ZFTkRPUl9TUEVDLAorCQkuYkludGVyZmFjZVByb3RvY29sID0gMCwKKwkJLmlJbnRlcmZhY2UgPSAwLAorCX0sCisKKwkuZXAgPSB7CisJCXsJLyogRVAgMSAqLworCQkJLmJMZW5ndGggPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCisJCQkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfT1VUIHwgQVI5MTcwX1VTQl9FUF9UWCwKKwkJCS5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQkJLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNTEyKSwKKwkJCS5iSW50ZXJ2YWwgPSAwLAorCQl9LAorCisJCXsJLyogRVAgMiAqLworCQkJLmJMZW5ndGggPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCisJCQkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4gfCBBUjkxNzBfVVNCX0VQX1JYLAorCQkJLmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCQkud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig1MTIpLAorCQkJLmJJbnRlcnZhbCA9IDAsCisJCX0sCisKKwkJewkvKiBFUCAzICovCisJCQkuYkxlbmd0aCA9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCQkJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVCwKKwkJCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9JTiB8IEFSOTE3MF9VU0JfRVBfSVJRLAorCQkJLmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkJCS53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDY0KSwKKwkJCS5iSW50ZXJ2YWwgPSAxLAorCQl9LAorCisJCXsJLyogRVAgNCAqLworCQkJLmJMZW5ndGggPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCisJCQkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfT1VUIHwgQVI5MTcwX1VTQl9FUF9DTUQsCisJCQkuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCQkJLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpLAorCQkJLmJJbnRlcnZhbCA9IDEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXI5MTcwX3VzYl9jb25maWcgdXNiX2NvbmZpZ19mdWxsc3BlZWQgPSB7CisJLmNmZyA9IHsKKwkJLmJMZW5ndGggPSBVU0JfRFRfQ09ORklHX1NJWkUsCisJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfQ09ORklHLAorCQkud1RvdGFsTGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHVzYl9jb25maWdfZnVsbHNwZWVkKSksCisJCS5iTnVtSW50ZXJmYWNlcyA9IDEsCisJCS5iQ29uZmlndXJhdGlvblZhbHVlID0gMSwKKwkJLmlDb25maWd1cmF0aW9uID0gMCwKKwkJLmJtQXR0cmlidXRlcyA9IFVTQl9DT05GSUdfQVRUX09ORSB8CisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfV09MCisJCQkJVVNCX0NPTkZJR19BVFRfV0FLRVVQIHwKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19XT0wgKi8KKwkJCQkwLAorCQkuYk1heFBvd2VyID0gMHhmYSwgLyogNTAwIG1BICovCisJfSwKKworCS5pbnRmID0geworCQkuYkxlbmd0aCA9IFVTQl9EVF9JTlRFUkZBQ0VfU0laRSwKKwkJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9JTlRFUkZBQ0UsCisJCS5iSW50ZXJmYWNlTnVtYmVyID0gMCwKKwkJLmJBbHRlcm5hdGVTZXR0aW5nID0gMCwKKwkJLmJOdW1FbmRwb2ludHMgPSBBUjkxNzBfVVNCX05VTV9FWFRSQV9FUCwKKwkJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQywKKwkJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19WRU5ET1JfU1BFQywKKwkJLmJJbnRlcmZhY2VQcm90b2NvbCA9IDAsCisJCS5pSW50ZXJmYWNlID0gMCwKKwl9LAorCisJLmVwID0geworCQl7CS8qIEVQIDEgKi8KKwkJCS5iTGVuZ3RoID0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJCQkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAorCQkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX09VVCB8IEFSOTE3MF9VU0JfRVBfVFgsCisJCQkuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkJCS53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDY0KSwKKwkJCS5iSW50ZXJ2YWwgPSAwLAorCQl9LAorCisJCXsJLyogRVAgMiAqLworCQkJLmJMZW5ndGggPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCisJCQkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4gfCBBUjkxNzBfVVNCX0VQX1JYLAorCQkJLmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCQkud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig2NCksCisJCQkuYkludGVydmFsID0gMCwKKwkJfSwKKworCQl7CS8qIEVQIDMgKi8KKwkJCS5iTGVuZ3RoID0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJCQkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAorCQkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgQVI5MTcwX1VTQl9FUF9JUlEsCisJCQkuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCQkJLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpLAorCQkJLmJJbnRlcnZhbCA9IDEsCisJCX0sCisKKwkJewkvKiBFUCA0ICovCisJCQkuYkxlbmd0aCA9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCQkJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVCwKKwkJCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9PVVQgfCBBUjkxNzBfVVNCX0VQX0NNRCwKKwkJCS5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisJCQkud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig2NCksCisJCQkuYkludGVydmFsID0gMSwKKwkJfSwKKwl9LAorfTsKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1VTQl9NT0RFU1dJVENICitzdGF0aWMgdm9pZCB1c2JfcmVzZXRfZXBzKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBjbGVhciBhbGwgRVBzJyB0b2dnbGUgYml0ICovCisJZm9yIChpID0gMTsgaSA8IF9fQVI5MTcwX1VTQl9OVU1fTUFYX0VQOyBpKyspIHsKKwkJdXNiX3NldF9pbnB1dF9lcF90b2dnbGUoaSk7CisJCXVzYl9jbGVhcl9pbnB1dF9lcF90b2dnbGUoaSk7CisJfQorCisJLyoKKwkgKiBOQjogSSd2ZSBubyBpZGVhIHdoeSB0aGlzIGNhbm5vdCBiZSBpbnRlZ3JhdGVkIGludG8gdGhlCisJICogcHJldmlvdXMgbG9vcD8KKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgX19BUjkxNzBfVVNCX05VTV9NQVhfRVA7IGkrKykgeworCQl1c2Jfc2V0X291dHB1dF9lcF90b2dnbGUoaSk7CisJCXVzYl9jbGVhcl9vdXRwdXRfZXBfdG9nZ2xlKGkpOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19VU0JfTU9ERVNXSVRDSCAqLworCisKK3N0YXRpYyB2b2lkIHVzYl9wdGFfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB1c2JfZG1hX2N0cmwgPSAwOworCS8qIFNldCBQVEEgbW9kZSB0byBVU0IgKi8KKwlhbmRsKEFSOTE3MF9QVEFfUkVHX0RNQV9NT0RFX0NUUkwsCisJCX5BUjkxNzBfUFRBX0RNQV9NT0RFX0NUUkxfRElTQUJMRV9VU0IpOworCisJLyogRG8gYSBzb2Z0d2FyZSByZXNldCB0byBQVEEgY29tcG9uZW50ICovCisJb3JsKEFSOTE3MF9QVEFfUkVHX0RNQV9NT0RFX0NUUkwsIEFSOTE3MF9QVEFfRE1BX01PREVfQ1RSTF9SRVNFVCk7CisJYW5kbChBUjkxNzBfUFRBX1JFR19ETUFfTU9ERV9DVFJMLCB+QVI5MTcwX1BUQV9ETUFfTU9ERV9DVFJMX1JFU0VUKTsKKworCWlmICh1c2JfZGV0ZWN0X2hpZ2hzcGVlZCgpKSB7CisJCWZ3LnVzYi5vc19jZmdfZGVzYyA9ICZ1c2JfY29uZmlnX2Z1bGxzcGVlZDsKKwkJZncudXNiLmNmZ19kZXNjID0gJnVzYl9jb25maWdfaGlnaHNwZWVkOworCisJCS8qIDUxMiBCeXRlIERNQSB0cmFuc2ZlcnMgKi8KKwkJdXNiX2RtYV9jdHJsIHw9IEFSOTE3MF9VU0JfRE1BX0NUTF9ISUdIX1NQRUVEOworCX0gZWxzZSB7CisJCWZ3LnVzYi5jZmdfZGVzYyA9ICZ1c2JfY29uZmlnX2Z1bGxzcGVlZDsKKwkJZncudXNiLm9zX2NmZ19kZXNjID0gJnVzYl9jb25maWdfaGlnaHNwZWVkOworCX0KKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1VTQl9VUF9TVFJFQU0KKyMgaWYgKENPTkZJR19DQVJMOTE3MEZXX1JYX0ZSQU1FX0xFTiA9PSA0MDk2KQorCXVzYl9kbWFfY3RybCB8PSBBUjkxNzBfVVNCX0RNQV9DVExfVVBfU1RSRUFNXzRLOworIyBlbGlmIChDT05GSUdfQ0FSTDkxNzBGV19SWF9GUkFNRV9MRU4gPT0gODE5MikKKwl1c2JfZG1hX2N0cmwgfD0gQVI5MTcwX1VTQl9ETUFfQ1RMX1VQX1NUUkVBTV84SzsKKyMgZWxpZiAoQ09ORklHX0NBUkw5MTcwRldfUlhfRlJBTUVfTEVOID09IDE2Mzg0KQorCXVzYl9kbWFfY3RybCB8PSBBUjkxNzBfVVNCX0RNQV9DVExfVVBfU1RSRUFNXzE2SzsKKyMgZWxpZiAoQ09ORklHX0NBUkw5MTcwRldfUlhfRlJBTUVfTEVOID09IDMyNzY4KQorCXVzYl9kbWFfY3RybCB8PSBBUjkxNzBfVVNCX0RNQV9DVExfVVBfU1RSRUFNXzMySzsKKyMgZWxzZQorIwllcnJvciAiSW52YWxpZCBBUjkxNzBfUlhfRlJBTUVfTEVOIHNldHRpbmciCisjIGVuZGlmCisKKyNlbHNlIC8qIENPTkZJR19DQVJMOTE3MEZXX1VTQl9VUF9TVFJFQU0gKi8KKwl1c2JfZG1hX2N0cmwgfD0gQVI5MTcwX1VTQl9ETUFfQ1RMX1VQX1BBQ0tFVF9NT0RFOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1VTQl9VUF9TVFJFQU0gKi8KKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1VTQl9ET1dOX1NUUkVBTQorCS8qIEVuYWJsZSBkb3duIHN0cmVhbSBtb2RlICovCisJdXNiX2RtYV9jdHJsIHw9IEFSOTE3MF9VU0JfRE1BX0NUTF9ET1dOX1NUUkVBTTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19VU0JfRE9XTl9TVFJFQU0gKi8KKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1VTQl9VUF9TVFJFQU0KKwkvKiBTZXQgdGhlIHVwIHN0cmVhbSBtb2RlIG1heGltdW0gYWdncmVnYXRlIG51bWJlciAqLworCXNldChBUjkxNzBfVVNCX1JFR19NQVhfQUdHX1VQTE9BRCwgNCk7CisKKwkvKgorCSAqIFNldCB0aGUgdXAgc3RyZWFtIG1vZGUgdGltZW91dCB2YWx1ZS4KKwkgKiBOQjogVGhlIHZlbmRvciBkcml2ZXIgKG90dXMpIHNldCAweDgwPworCSAqLworCXNldChBUjkxNzBfVVNCX1JFR19VUExPQURfVElNRV9DVEwsIDB4ODApOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1VTQl9VUF9TVFJFQU0gKi8KKworCS8qIEVuYWJsZSB1cCBzdHJlYW0gYW5kIGRvd24gc3RyZWFtICovCisJdXNiX2RtYV9jdHJsIHw9IEFSOTE3MF9VU0JfRE1BX0NUTF9FTkFCTEVfVE9fREVWSUNFIHwKKwkgICAgQVI5MTcwX1VTQl9ETUFfQ1RMX0VOQUJMRV9GUk9NX0RFVklDRTsKKworCXNldChBUjkxNzBfVVNCX1JFR19ETUFfQ1RMLCB1c2JfZG1hX2N0cmwpOworfQorCit2b2lkIHVzYl9pbml0KHZvaWQpCit7CisJdXNiX3B0YV9pbml0KCk7CisKKwlmdy51c2IuY29uZmlnID0gMTsKKwkvKgorCSAqIFRoZSBmdyBzdHJ1Y3R1cmUgaXMgYWx3YXlzIGluaXRpYWxpemVkIHdpdGggIjAiCisJICogZHVyaW5nIGJvb3QoKTsgTm8gbmVlZCB0byB3YXN0ZSBwcmVjaW91cyBieXRlcyBoZXJlLgorCSAqCisJICogZncudXNiLmludGVyZmFjZV9zZXR0aW5nID0gMDsKKwkgKiBmdy51c2IuYWx0ZXJuYXRlX2ludGVyZmFjZV9zZXR0aW5nID0gMDsKKwkgKiBmdy51c2IuZGV2aWNlX2ZlYXR1cmUgPSAwOworCSAqLworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfV09MCisJZncudXNiLmRldmljZV9mZWF0dXJlIHw9IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUDsKKwl1c2JfZW5hYmxlX3JlbW90ZV93YWtldXAoKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19XT0wgKi8KK30KKworI2RlZmluZSBHRVRfQVJSQVkoYSwgbykJKCh1aW50MzJfdCAqKSAoKCh1bnNpZ25lZCBsb25nKSBkYXRhKSArIG9mZnNldCkpCisKK3N0YXRpYyB2b2lkIHVzYl9lcDByeF9kYXRhKGNvbnN0IHZvaWQgKmRhdGEsIGNvbnN0IHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1aW50MzJfdCB2YWx1ZTsKKworCUJVR19PTihsZW4gPiBBUjkxNzBfVVNCX0VQX0NUUkxfTUFYKTsKKwlCVUlMRF9CVUdfT04obGVuID4gQVI5MTcwX1VTQl9FUF9DVFJMX01BWCk7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8ICgobGVuICsgMykgJiB+Myk7IG9mZnNldCArPSA0KSB7CisJCXZhbHVlID0gZ2V0KEFSOTE3MF9VU0JfUkVHX0VQMF9EQVRBKTsKKwkJbWVtY3B5KEdFVF9BUlJBWShkYXRhLCBvZmZzZXQpLCAmdmFsdWUsCisJCSAgICAgICBtaW4obGVuIC0gb2Zmc2V0LCAodW5zaWduZWQgaW50KTQpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdXNiX2VwMHR4X2RhdGEoY29uc3Qgdm9pZCAqZGF0YSwgY29uc3QgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgYmxvY2ssIGxhc3RfYmxvY2sgPSAwOworCXVpbnQzMl90IHZhbHVlOworCisJQlVHX09OKGxlbiA+IEFSOTE3MF9VU0JfRVBfQ1RSTF9NQVgpOworCUJVSUxEX0JVR19PTihsZW4gPiBBUjkxNzBfVVNCX0VQX0NUUkxfTUFYKTsKKworCWJsb2NrID0gbWluKGxlbiwgKHVuc2lnbmVkIGludCkgNCk7CisJb2Zmc2V0ID0gMDsKKwl3aGlsZSAob2Zmc2V0IDwgbGVuKSB7CisKKwkJaWYgKGxhc3RfYmxvY2sgIT0gYmxvY2sgfHwgYmxvY2sgPCA0KQorCQkJc2V0YihBUjkxNzBfVVNCX1JFR19GSUZPX1NJWkUsICgxIDw8IGJsb2NrKSAtIDEpOworCisJCW1lbWNweSgmdmFsdWUsIEdFVF9BUlJBWShkYXRhLCBvZmZzZXQpLCBibG9jayk7CisKKwkJc2V0KEFSOTE3MF9VU0JfUkVHX0VQMF9EQVRBLCB2YWx1ZSk7CisKKwkJb2Zmc2V0ICs9IGJsb2NrOworCQlsYXN0X2Jsb2NrID0gYmxvY2sgPSBtaW4obGVuIC0gb2Zmc2V0LCAodW5zaWduZWQgaW50KSA0KTsKKwl9CisKKwlzZXRiKEFSOTE3MF9VU0JfUkVHX0ZJRk9fU0laRSwgMHhmKTsKKworCS8qIHRoaXMgd2lsbCBwdXNoIHRoZSBkYXRhIHRvIHRoZSBob3N0ICovCisJcmV0dXJuIDE7Cit9CisjdW5kZWYgR0VUX0FSUkFZCisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19VU0JfU1RBTkRBUkRfQ01EUworc3RhdGljIGludCB1c2JfZ2V0X3N0YXR1cyhjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCV9fbGUxNiBzdGF0dXMgPSBjcHVfdG9fbGUxNihmdy51c2IuZGV2aWNlX2ZlYXR1cmUpOworCisJaWYgKChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX01BU0spICE9IFVTQl9ESVJfSU4pCisJCXJldHVybiAtMTsKKworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0spIHsKKwljYXNlIFVTQl9SRUNJUF9ERVZJQ0U6CisJCXN0YXR1cyAmPSBjcHVfdG9fbGUxNih+VVNCX0RFVklDRV9TRUxGX1BPV0VSRUQpOworCQlzdGF0dXMgJj0gY3B1X3RvX2xlMTYoflVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVDSVBfSU5URVJGQUNFOgorCQkvKiBVU0Igc3BlYzogVGhpcyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gKi8KKwkJc3RhdHVzID0gY3B1X3RvX2xlMTYoMCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVDSVBfRU5EUE9JTlQ6CisJY2FzZSBVU0JfUkVDSVBfT1RIRVI6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHVzYl9lcDB0eF9kYXRhKChjb25zdCB2b2lkICopICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKK30KKworc3RhdGljIGludCB1c2JfZ2V0X3N0cmluZ19kZXNjKGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJY29uc3Qgc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciAqc3RyaW5nX2Rlc2MgPSBOVUxMOworCisJc3dpdGNoIChsZTE2X3RvX2NwdShjdHJsLT53VmFsdWUpICYgMHhmZikgeworCWNhc2UgMHgwMDoKKwkJc3RyaW5nX2Rlc2MgPSAoY29uc3Qgc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciAqKQorCQkJcm9tLmh3LnVzYi5zdHJpbmcwX2Rlc2M7CisJCWJyZWFrOworCisJY2FzZSAweDEwOgorCQlzdHJpbmdfZGVzYyA9IChjb25zdCBzdHJ1Y3QgdXNiX3N0cmluZ19kZXNjcmlwdG9yICopCisJCQlyb20uaHcudXNiLnN0cmluZzFfZGVzYzsKKwkJYnJlYWs7CisKKwljYXNlIDB4MjA6CisJCXN0cmluZ19kZXNjID0gKGNvbnN0IHN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgKikKKwkJCXJvbS5ody51c2Iuc3RyaW5nMl9kZXNjOworCQlicmVhazsKKworCWNhc2UgMHgzMDoKKwkJc3RyaW5nX2Rlc2MgPSAoY29uc3Qgc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciAqKQorCQkJcm9tLmh3LnVzYi5zdHJpbmczX2Rlc2M7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHN0cmluZ19kZXNjKQorCQlyZXR1cm4gdXNiX2VwMHR4X2RhdGEoc3RyaW5nX2Rlc2MsIHN0cmluZ19kZXNjLT5iTGVuZ3RoKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCB1c2JfZ2V0X2RldmljZV9kZXNjKGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwgX191bnVzZWQpCit7CisJcmV0dXJuIHVzYl9lcDB0eF9kYXRhKCZyb20uaHcudXNiLmRldmljZV9kZXNjLAorCQkJICAgICAgcm9tLmh3LnVzYi5kZXZpY2VfZGVzYy5iTGVuZ3RoKTsKK30KKworc3RhdGljIGludCB1c2JfZ2V0X2NvbmZpZ19kZXNjKGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwgX191bnVzZWQpCit7CisJZncudXNiLmNmZ19kZXNjLT5jZmcuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0NPTkZJRzsKKworCXJldHVybiB1c2JfZXAwdHhfZGF0YShmdy51c2IuY2ZnX2Rlc2MsCisJCWxlMTZfdG9fY3B1KGZ3LnVzYi5jZmdfZGVzYy0+Y2ZnLndUb3RhbExlbmd0aCkpOworfQorCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfVVNCX01PREVTV0lUQ0gKK3N0YXRpYyBpbnQgdXNiX2dldF9vdGhlcnNwZWVkX2Rlc2MoY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCBfX3VudXNlZCkKK3sKKworCWZ3LnVzYi5vc19jZmdfZGVzYy0+Y2ZnLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUc7CisKKwlyZXR1cm4gdXNiX2VwMHR4X2RhdGEoZncudXNiLm9zX2NmZ19kZXNjLAorCQlsZTE2X3RvX2NwdShmdy51c2Iub3NfY2ZnX2Rlc2MtPmNmZy53VG90YWxMZW5ndGgpKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBGV19VU0JfTU9ERVNXSVRDSCAqLworCitzdGF0aWMgaW50IHVzYl9nZXRfcXVhbGlmaWVyX2Rlc2MoY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCBfX3VudXNlZCkKK3sKKwlzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yIHF1YWw7CisKKwkvKgorCSAqIFRoZSBxdWFsaWZpZXIgZGVzY3JpcHRvciBzaGFyZXMgc29tZSBzdHJ1Y3R1cmFsIGRldGFpbHMKKwkgKiB3aXRoIHRoZSBtYWluIGRldmljZSBkZXNjcmlwdG9yLgorCSAqLworCisJbWVtY3B5KCZxdWFsLCAmcm9tLmh3LnVzYi5kZXZpY2VfZGVzYywgc2l6ZW9mKHF1YWwpKTsKKworCS8qIChSZSktSW5pdGlhbGl6ZSBmaWVsZHMgKi8KKwlxdWFsLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSOworCXF1YWwuYkxlbmd0aCA9IHNpemVvZihxdWFsKTsKKwlxdWFsLmJOdW1Db25maWd1cmF0aW9ucyA9IHJvbS5ody51c2IuZGV2aWNlX2Rlc2MuYk51bUNvbmZpZ3VyYXRpb25zOworCXF1YWwuYlJFU0VSVkVEID0gMDsKKworCXJldHVybiB1c2JfZXAwdHhfZGF0YSgmcXVhbCwgcXVhbC5iTGVuZ3RoKTsKK30KKworI2RlZmluZSBVU0JfQ0hFQ0tfUkVRVFlQRShjdHJsLCByZWNpcCwgZGlyKQkJCVwKKwkoKChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSykgIT0gcmVjaXApIHx8CVwKKwkgKChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX01BU0spICE9IGRpcikpCisKK3N0YXRpYyBpbnQgdXNiX2dldF9kZXNjcmlwdG9yKGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJaW50IHN0YXR1cyA9IC0xOworCisJaWYgKFVTQl9DSEVDS19SRVFUWVBFKGN0cmwsIFVTQl9SRUNJUF9ERVZJQ0UsIFVTQl9ESVJfSU4pKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3dpdGNoIChsZTE2X3RvX2NwdShjdHJsLT53VmFsdWUpID4+IDgpIHsKKwljYXNlIFVTQl9EVF9ERVZJQ0U6CisJCXN0YXR1cyA9IHVzYl9nZXRfZGV2aWNlX2Rlc2MoY3RybCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfRFRfQ09ORklHOgorCQlzdGF0dXMgPSB1c2JfZ2V0X2NvbmZpZ19kZXNjKGN0cmwpOworCQlicmVhazsKKworCWNhc2UgVVNCX0RUX1NUUklORzoKKwkJc3RhdHVzID0gdXNiX2dldF9zdHJpbmdfZGVzYyhjdHJsKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9EVF9JTlRFUkZBQ0U6CisJCWJyZWFrOworCisJY2FzZSBVU0JfRFRfRU5EUE9JTlQ6CisJCWJyZWFrOworCisJY2FzZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjoKKwkJc3RhdHVzID0gdXNiX2dldF9xdWFsaWZpZXJfZGVzYyhjdHJsKTsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19VU0JfTU9ERVNXSVRDSAorCWNhc2UgVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRzoKKwkJc3RhdHVzID0gdXNiX2dldF9vdGhlcnNwZWVkX2Rlc2MoY3RybCk7CisJCWJyZWFrOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1VTQl9NT0RFU1dJVENIICovCisJZGVmYXVsdDoKKwkJYnJlYWs7CisKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHVzYl9nZXRfY29uZmlndXJhdGlvbihjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCWlmIChVU0JfQ0hFQ0tfUkVRVFlQRShjdHJsLCBVU0JfUkVDSVBfREVWSUNFLCBVU0JfRElSX0lOKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHVzYl9lcDB0eF9kYXRhKCZmdy51c2IuY29uZmlnLCAxKTsKK30KKworc3RhdGljIGludCB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24oY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwl1bnNpZ25lZCBpbnQgY29uZmlnOworCisJaWYgKFVTQl9DSEVDS19SRVFUWVBFKGN0cmwsIFVTQl9SRUNJUF9ERVZJQ0UsIFVTQl9ESVJfT1VUKSkKKwkJcmV0dXJuIC0xOworCisJY29uZmlnID0gbGUxNl90b19jcHUoY3RybC0+d1ZhbHVlKTsKKwlzd2l0Y2ggKGNvbmZpZykgeworCWNhc2UgMDoKKwkJLyogRGlzYWJsZSBEZXZpY2UgKi8KKwkJYW5kYihBUjkxNzBfVVNCX1JFR19ERVZJQ0VfQUREUkVTUywKKwkJICAgICAgKHVpbnQ4X3QpIH4oQVI5MTcwX1VTQl9ERVZJQ0VfQUREUkVTU19DT05GSUdVUkUpKTsKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19VU0JfTU9ERVNXSVRDSAorCWNhc2UgMToKKwkJZncudXNiLmNvbmZpZyA9IGNvbmZpZzsKKworCQlpZiAodXNiX2RldGVjdF9oaWdoc3BlZWQoKSkgeworCQkJLyogSGlnaCBTcGVlZCBDb25maWd1cmF0aW9uICovCisJCQl1c2JfaW5pdF9oaWdoc3BlZWRfZmlmb19jZmcoKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEZ1bGwgU3BlZWQgQ29uZmlndXJhdGlvbiAqLworCQkJdXNiX2luaXRfZnVsbHNwZWVkX2ZpZm9fY2ZnKCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCS8qIHVzYl9wdGFfaW5pdCgpID8gKi8KKworCXVzYl9yZXNldF9lcHMoKTsKKwlvcmIoQVI5MTcwX1VTQl9SRUdfREVWSUNFX0FERFJFU1MsCisJICAgIChBUjkxNzBfVVNCX0RFVklDRV9BRERSRVNTX0NPTkZJR1VSRSkpOworCisJdXNiX2VuYWJsZV9nbG9iYWxfaW50KCk7CisJdXNiX3RyaWdnZXJfb3V0KCk7CisJcmV0dXJuIDE7CisjZWxzZQorCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfVVNCX01PREVTV0lUQ0ggKi8KK30KKworc3RhdGljIGludCB1c2Jfc2V0X2FkZHJlc3MoY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkcmVzczsKKworCWlmIChVU0JfQ0hFQ0tfUkVRVFlQRShjdHJsLCBVU0JfUkVDSVBfREVWSUNFLCBVU0JfRElSX09VVCkpCisJCXJldHVybiAtMTsKKworCWFkZHJlc3MgPSBsZTE2X3RvX2NwdShjdHJsLT53VmFsdWUpOworCisJLyoKKwkgKiBUaGUgb3JpZ2luYWwgZmlybXdhcmUgdXNlZCAweDEwMCAod2hpY2ggaXMsIG9mIGNvdXJzZSwKKwkgKiB0b28gYmlnIHRvIGZpdCBpbnRvIHVpbnQ4X3QpLgorCSAqIEhvd2V2ZXIgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBpbmZvcm1hdGlvbiAoaHcuaCksIEJJVCg3KQorCSAqIGlzIHVzZWQgYXMgc29tZSBzb3J0IG9mIGZsYWcgYW5kIHNob3VsZCBub3QgYmUKKwkgKiBwYXJ0IG9mIHRoZSBkZXZpY2UgYWRkcmVzcy4KKwkgKi8KKwlpZiAoYWRkcmVzcyA+PSBCSVQoNykpCisJCXJldHVybiAtMTsKKworCXNldGIoQVI5MTcwX1VTQl9SRUdfREVWSUNFX0FERFJFU1MsICh1aW50OF90KSBhZGRyZXNzKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB1c2JfZ2V0X2ludGVyZmFjZShjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCWlmIChVU0JfQ0hFQ0tfUkVRVFlQRShjdHJsLCBVU0JfUkVDSVBfSU5URVJGQUNFLCBVU0JfRElSX0lOKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHVzYl9jb25maWd1cmVkKCkgPT0gZmFsc2UpCisJCXJldHVybiAtMTsKKworCXN3aXRjaCAoZncudXNiLmNvbmZpZykgeworCWNhc2UgMToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIHVzYl9lcDB0eF9kYXRhKCZmdy51c2IuYWx0ZXJuYXRlX2ludGVyZmFjZV9zZXR0aW5nLCAxKTsKK30KKworc3RhdGljIGludCB1c2JfbWFuaXB1bGF0ZV9mZWF0dXJlKGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwsIGJvb2wgX191bnVzZWQgY2xlYXIpCit7CisJdW5zaWduZWQgaW50IGZlYXR1cmU7CisJaWYgKFVTQl9DSEVDS19SRVFUWVBFKGN0cmwsIFVTQl9SRUNJUF9ERVZJQ0UsIFVTQl9ESVJfT1VUKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHVzYl9jb25maWd1cmVkKCkgPT0gZmFsc2UpCisJCXJldHVybiAtMTsKKworCWZlYXR1cmUgPSBsZTE2X3RvX2NwdShjdHJsLT53VmFsdWUpOworCisjaWZkZWYgQ09ORklHX0NBUkw5MTcwRldfV09MCisJaWYgKGZlYXR1cmUgJiBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApIHsKKwkJaWYgKGNsZWFyKQorCQkJdXNiX2Rpc2FibGVfcmVtb3RlX3dha2V1cCgpOworCQllbHNlCisJCQl1c2JfZW5hYmxlX3JlbW90ZV93YWtldXAoKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfV09MICovCisKKwlpZiAoY2xlYXIpCisJCWZ3LnVzYi5kZXZpY2VfZmVhdHVyZSAmPSB+ZmVhdHVyZTsKKwllbHNlCisJCWZ3LnVzYi5kZXZpY2VfZmVhdHVyZSB8PSBmZWF0dXJlOworCisJcmV0dXJuIDE7Cit9CisKKyNpZmRlZiBDT05GSUdfQ0FSTDkxNzBGV19VU0JfTU9ERVNXSVRDSAorc3RhdGljIGludCB1c2Jfc2V0X2ludGVyZmFjZShjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCXVuc2lnbmVkIGludCBpbnRmLCBhbHRfaW50ZjsKKwlpZiAoVVNCX0NIRUNLX1JFUVRZUEUoY3RybCwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgVVNCX0RJUl9PVVQpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodXNiX2NvbmZpZ3VyZWQoKSA9PSBmYWxzZSkKKwkJcmV0dXJuIC0xOworCisJaW50ZiA9IGxlMTZfdG9fY3B1KGN0cmwtPndJbmRleCk7CisJYWx0X2ludGYgPSBsZTE2X3RvX2NwdShjdHJsLT53VmFsdWUpOworCisJc3dpdGNoIChpbnRmKSB7CisJY2FzZSAwOgorCQlpZiAoYWx0X2ludGYgIT0gZncudXNiLmNmZ19kZXNjLT5pbnRmLmJBbHRlcm5hdGVTZXR0aW5nKQorCQkJcmV0dXJuIC0xOworCisJCWZ3LnVzYi5pbnRlcmZhY2Vfc2V0dGluZyA9ICh1aW50OF90KSBpbnRmOworCQlmdy51c2IuYWx0ZXJuYXRlX2ludGVyZmFjZV9zZXR0aW5nID0gKHVpbnQ4X3QpIGFsdF9pbnRmOworCQlpZiAodXNiX2RldGVjdF9oaWdoc3BlZWQoKSkKKwkJCXVzYl9pbml0X2hpZ2hzcGVlZF9maWZvX2NmZygpOworCQllbHNlCisJCQl1c2JfaW5pdF9mdWxsc3BlZWRfZmlmb19jZmcoKTsKKworCQl1c2JfcmVzZXRfZXBzKCk7CisJCXVzYl9lbmFibGVfZ2xvYmFsX2ludCgpOworCQl1c2JfdHJpZ2dlcl9vdXQoKTsKKwkJcmV0dXJuIDE7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorfQorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1VTQl9NT0RFU1dJVENIICovCisjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwRldfVVNCX1NUQU5EQVJEX0NNRFMgKi8KKworc3RhdGljIGludCB1c2Jfc3RhbmRhcmRfY29tbWFuZChjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsIF9fdW51c2VkKQoreworCWludCBzdGF0dXMgPSAtMTsKKworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1VTQl9TVEFOREFSRF9DTURTCisJc3dpdGNoIChjdHJsLT5iUmVxdWVzdCkgeworCWNhc2UgVVNCX1JFUV9HRVRfU1RBVFVTOgorCQlzdGF0dXMgPSB1c2JfZ2V0X3N0YXR1cyhjdHJsKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCXVzYl9tYW5pcHVsYXRlX2ZlYXR1cmUoY3RybCwgY3RybC0+YlJlcXVlc3QgPT0gVVNCX1JFUV9DTEVBUl9GRUFUVVJFKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCXN0YXR1cyA9IHVzYl9zZXRfYWRkcmVzcyhjdHJsKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCXN0YXR1cyA9IHVzYl9nZXRfZGVzY3JpcHRvcihjdHJsKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRVFfU0VUX0RFU0NSSVBUT1I6CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgorCQlzdGF0dXMgPSB1c2JfZ2V0X2NvbmZpZ3VyYXRpb24oY3RybCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgorCQlzdGF0dXMgPSB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24oY3RybCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX0dFVF9JTlRFUkZBQ0U6CisJCXN0YXR1cyA9IHVzYl9nZXRfaW50ZXJmYWNlKGN0cmwpOworCQlicmVhazsKKworCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgorI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1VTQl9NT0RFU1dJVENICisJCXN0YXR1cyA9IHVzYl9zZXRfaW50ZXJmYWNlKGN0cmwpOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1VTQl9NT0RFU1dJVENIICovCisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX1NZTkNIX0ZSQU1FOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCisJfQorI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1VTQl9TVEFOREFSRF9DTURTICovCisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHVzYl9jbGFzc19jb21tYW5kKGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwgX191bnVzZWQpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHVzYl92ZW5kb3JfY29tbWFuZChjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsIF9fdW51c2VkKQoreworCS8qCisJICogTm90ZTogRmlybXdhcmUgdXBsb2FkL2Jvb3QgaXMgbm90IGltcGxlbWVudGVkLgorCSAqIEl0J3MgaW1wb3NzaWJsZSB0byByZXBsYWNlIHRoZSBjdXJyZW50IGltYWdlCisJICogaW4gcGxhY2UuCisJICovCisKKwlyZXR1cm4gLTE7Cit9CisKKyN1bmRlZiBVU0JfQ0hFQ0tfVFlQRQorCit2b2lkIHVzYl9lcDBzZXR1cCh2b2lkKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgY3RybDsKKwlpbnQgc3RhdHVzID0gLTE7CisJdXNiX2VwMHJ4X2RhdGEoJmN0cmwsIHNpemVvZihjdHJsKSk7CisKKwlzd2l0Y2ggKGN0cmwuYlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgeworCWNhc2UgVVNCX1RZUEVfU1RBTkRBUkQ6CisJCXN0YXR1cyA9IHVzYl9zdGFuZGFyZF9jb21tYW5kKCZjdHJsKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9UWVBFX0NMQVNTOgorCQlzdGF0dXMgPSB1c2JfY2xhc3NfY29tbWFuZCgmY3RybCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfVFlQRV9WRU5ET1I6CisJCXN0YXR1cyA9IHVzYl92ZW5kb3JfY29tbWFuZCgmY3RybCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisKKwl9CisKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZncudXNiLmVwMF9hY3Rpb24gfD0gQ0FSTDkxNzBfRVAwX1NUQUxMOworI2lmZGVmIENPTkZJR19DQVJMOTE3MEZXX1VTQl9TVEFOREFSRF9DTURTCisJaWYgKHN0YXR1cyA+IDApCisJCWZ3LnVzYi5lcDBfYWN0aW9uIHw9IENBUkw5MTcwX0VQMF9UUklHR0VSOworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MEZXX1VTQl9TVEFOREFSRF9DTURTICovCit9CisKK3ZvaWQgdXNiX2VwMHJ4KHZvaWQpCit7CisJaWYgKEJVR19PTighZncudXNiLmVwMF90eHJ4X2J1ZmZlciB8fCAhZncudXNiLmVwMF90eHJ4X2xlbikpCisJCXJldHVybiA7CisKKwl1c2JfZXAwcnhfZGF0YShmdy51c2IuZXAwX3R4cnhfYnVmZmVyLCBmdy51c2IuZXAwX3R4cnhfbGVuKTsKKwlmdy51c2IuZXAwX3R4cnhfcG9zID0gZncudXNiLmVwMF90eHJ4X2xlbjsKK30KKwordm9pZCB1c2JfZXAwdHgodm9pZCkKK3sKKwlpZiAoQlVHX09OKCFmdy51c2IuZXAwX3R4cnhfYnVmZmVyIHx8ICFmdy51c2IuZXAwX3R4cnhfbGVuKSkKKwkJcmV0dXJuIDsKKworCXVzYl9lcDB0eF9kYXRhKGZ3LnVzYi5lcDBfdHhyeF9idWZmZXIsIGZ3LnVzYi5lcDBfdHhyeF9sZW4pOworCWZ3LnVzYi5lcDBfdHhyeF9wb3MgPSBmdy51c2IuZXAwX3R4cnhfbGVuOworfQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jb25maWcvQ01ha2VMaXN0cy50eHQgYi9jYXJsOTE3MGZ3L2NvbmZpZy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTJkZGViCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jb25maWcvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyNyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOCkKKworcHJvamVjdChjb25maWcpCisKKyNzZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBPTikKKworZmluZF9wYWNrYWdlKEJJU09OIFJFUVVJUkVEKQorZmluZF9wYWNrYWdlKEZMRVggUkVRVUlSRUQpCisKK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9KQorCitmaWxlKE1BS0VfRElSRUNUT1JZICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vaW5jbHVkZS9nZW5lcmF0ZWQiKQorCitMSVNUKEFQUEVORCBDTUFLRV9NT0RVTEVfUEFUSCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uL2V4dHJhIikKK0ZJTkRfUEFDS0FHRShHUEVSRiBSRVFVSVJFRCkKKworQklTT05fVEFSR0VUKHpjb25mIHpjb25mLnkgemNvbmYudGFiLmMgQ09NUElMRV9GTEFHUyAiLWwgLWIgemNvbmYgLXAgemNvbmYgLXQiKQorRkxFWF9UQVJHRVQoemNvbmZzY2FuIHpjb25mLmwgemNvbmYubGV4LmMgQ09NUElMRV9GTEFHUyAiLVB6Y29uZiAtTCIpCitHUEVSRl9UQVJHRVQoemNvbmZoYXNoIHpjb25mLmdwZXJmIHpjb25mLmhhc2guYykKKworU0VUKHpjb25mX2RlcHMgJHtGTEVYX3pjb25mc2Nhbl9PVVRQVVRTfSAke0dQRVJGX3pjb25maGFzaF9PVVRQVVRTfSkKK1NFVF9TT1VSQ0VfRklMRVNfUFJPUEVSVElFUygke0JJU09OX3pjb25mX09VVFBVVFN9CisgICAgICBQUk9QRVJUSUVTIE9CSkVDVF9ERVBFTkRTICIke3pjb25mX2RlcHN9IikKKworc2V0KGNvbmZfc3JjIGNvbmYuYyAke0JJU09OX3pjb25mX09VVFBVVFN9KQorCithZGRfZXhlY3V0YWJsZShjb25mICR7Y29uZl9zcmN9KQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jb25maWcvY29uZi5jIGIvY2FybDkxNzBmdy9jb25maWcvY29uZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZGFjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2NvbmZpZy9jb25mLmMKQEAgLTAsMCArMSw2NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqLworCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworc3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjaGVja19jb25mKHN0cnVjdCBtZW51ICptZW51KTsKK3N0YXRpYyB2b2lkIHhmZ2V0cyhjaGFyICpzdHIsIGludCBzaXplLCBGSUxFICppbik7CisKK2VudW0gaW5wdXRfbW9kZSB7CisJb2xkYXNrY29uZmlnLAorCW9sZGNvbmZpZywKKwlhbGxub2NvbmZpZywKKwlhbGx5ZXNjb25maWcsCisJYWxsbW9kY29uZmlnLAorCWFsbGRlZmNvbmZpZywKKwlyYW5kY29uZmlnLAorCWRlZmNvbmZpZywKKwlzYXZlZGVmY29uZmlnLAorCWxpc3RuZXdjb25maWcsCisJb2xkbm9jb25maWcsCit9IGlucHV0X21vZGUgPSBvbGRhc2tjb25maWc7CisKK3N0YXRpYyBpbnQgaW5kZW50ID0gMTsKK3N0YXRpYyBpbnQgdmFsaWRfc3RkaW4gPSAxOworc3RhdGljIGludCBjb25mX2NudDsKK3N0YXRpYyBjaGFyIGxpbmVbMTI4XTsKK3N0YXRpYyBzdHJ1Y3QgbWVudSAqcm9vdEVudHJ5OworCitzdGF0aWMgdm9pZCBwcmludF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBnc3RyIGhlbHAgPSBzdHJfbmV3KCk7CisKKwltZW51X2dldF9leHRfaGVscChtZW51LCAmaGVscCk7CisKKwlwcmludGYoIlxuJXNcbiIsIHN0cl9nZXQoJmhlbHApKTsKKwlzdHJfZnJlZSgmaGVscCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmlwKGNoYXIgKnN0cikKK3sKKwljaGFyICpwID0gc3RyOworCWludCBsOworCisJd2hpbGUgKChpc3NwYWNlKCpwKSkpCisJCXArKzsKKwlsID0gc3RybGVuKHApOworCWlmIChwICE9IHN0cikKKwkJbWVtbW92ZShzdHIsIHAsIGwgKyAxKTsKKwlpZiAoIWwpCisJCXJldHVybjsKKwlwID0gc3RyICsgbCAtIDE7CisJd2hpbGUgKChpc3NwYWNlKCpwKSkpCisJCSpwLS0gPSAwOworfQorCitzdGF0aWMgdm9pZCBjaGVja19zdGRpbih2b2lkKQoreworCWlmICghdmFsaWRfc3RkaW4pIHsKKwkJcHJpbnRmKF8oImFib3J0ZWQhXG5cbiIpKTsKKwkJcHJpbnRmKF8oIkNvbnNvbGUgaW5wdXQvb3V0cHV0IGlzIHJlZGlyZWN0ZWQuICIpKTsKKwkJcHJpbnRmKF8oIlJ1biAnbWFrZSBjb25maWcnIHRvIHVwZGF0ZSBjb25maWd1cmF0aW9uLlxuXG4iKSk7CisJCWV4aXQoMSk7CisJfQorfQorCitzdGF0aWMgaW50IGNvbmZfYXNrdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpkZWYpCit7CisJZW51bSBzeW1ib2xfdHlwZSB0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7CisKKwlpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSkKKwkJcHJpbnRmKF8oIihORVcpICIpKTsKKworCWxpbmVbMF0gPSAnXG4nOworCWxpbmVbMV0gPSAwOworCisJaWYgKCFzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKKwkJcHJpbnRmKCIlc1xuIiwgZGVmKTsKKwkJbGluZVswXSA9ICdcbic7CisJCWxpbmVbMV0gPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGlucHV0X21vZGUpIHsKKwljYXNlIG9sZGNvbmZpZzoKKwkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSkgeworCQkJcHJpbnRmKCIlc1xuIiwgZGVmKTsKKwkJCXJldHVybiAwOworCQl9CisJCWNoZWNrX3N0ZGluKCk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2Ugb2xkYXNrY29uZmlnOgorCQlmZmx1c2goc3Rkb3V0KTsKKwkJeGZnZXRzKGxpbmUsIDEyOCwgc3RkaW4pOworCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNfSU5UOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX1NUUklORzoKKwkJcHJpbnRmKCIlc1xuIiwgZGVmKTsKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJOworCX0KKwlwcmludGYoIiVzIiwgbGluZSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY29uZl9zdHJpbmcoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOworCWNvbnN0IGNoYXIgKmRlZjsKKworCXdoaWxlICgxKSB7CisJCXByaW50ZigiJSpzJXMgIiwgaW5kZW50IC0gMSwgIiIsIF8obWVudS0+cHJvbXB0LT50ZXh0KSk7CisJCXByaW50ZigiKCVzKSAiLCBzeW0tPm5hbWUpOworCQlkZWYgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQlpZiAoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSkKKwkJCXByaW50ZigiWyVzXSAiLCBkZWYpOworCQlpZiAoIWNvbmZfYXNrdmFsdWUoc3ltLCBkZWYpKQorCQkJcmV0dXJuIDA7CisJCXN3aXRjaCAobGluZVswXSkgeworCQljYXNlICdcbic6CisJCQlicmVhazsKKwkJY2FzZSAnPyc6CisJCQkvKiBwcmludCBoZWxwICovCisJCQlpZiAobGluZVsxXSA9PSAnXG4nKSB7CisJCQkJcHJpbnRfaGVscChtZW51KTsKKwkJCQlkZWYgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlsaW5lW3N0cmxlbihsaW5lKS0xXSA9IDA7CisJCQlkZWYgPSBsaW5lOworCQl9CisJCWlmIChkZWYgJiYgc3ltX3NldF9zdHJpbmdfdmFsdWUoc3ltLCBkZWYpKQorCQkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IGNvbmZfc3ltKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwl0cmlzdGF0ZSBvbGR2YWwsIG5ld3ZhbDsKKworCXdoaWxlICgxKSB7CisJCXByaW50ZigiJSpzJXMgIiwgaW5kZW50IC0gMSwgIiIsIF8obWVudS0+cHJvbXB0LT50ZXh0KSk7CisJCWlmIChzeW0tPm5hbWUpCisJCQlwcmludGYoIiglcykgIiwgc3ltLT5uYW1lKTsKKwkJcHV0Y2hhcignWycpOworCQlvbGR2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCXN3aXRjaCAob2xkdmFsKSB7CisJCWNhc2Ugbm86CisJCQlwdXRjaGFyKCdOJyk7CisJCQlicmVhazsKKwkJY2FzZSBtb2Q6CisJCQlwdXRjaGFyKCdNJyk7CisJCQlicmVhazsKKwkJY2FzZSB5ZXM6CisJCQlwdXRjaGFyKCdZJyk7CisJCQlicmVhazsKKwkJfQorCQlpZiAob2xkdmFsICE9IG5vICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBubykpCisJCQlwcmludGYoIi9uIik7CisJCWlmIChvbGR2YWwgIT0gbW9kICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpKQorCQkJcHJpbnRmKCIvbSIpOworCQlpZiAob2xkdmFsICE9IHllcyAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKSkKKwkJCXByaW50ZigiL3kiKTsKKwkJaWYgKG1lbnVfaGFzX2hlbHAobWVudSkpCisJCQlwcmludGYoIi8/Iik7CisJCXByaW50ZigiXSAiKTsKKwkJaWYgKCFjb25mX2Fza3ZhbHVlKHN5bSwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSkpCisJCQlyZXR1cm4gMDsKKwkJc3RyaXAobGluZSk7CisKKwkJc3dpdGNoIChsaW5lWzBdKSB7CisJCWNhc2UgJ24nOgorCQljYXNlICdOJzoKKwkJCW5ld3ZhbCA9IG5vOworCQkJaWYgKCFsaW5lWzFdIHx8ICFzdHJjbXAoJmxpbmVbMV0sICJvIikpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJY2FzZSAnbSc6CisJCWNhc2UgJ00nOgorCQkJbmV3dmFsID0gbW9kOworCQkJaWYgKCFsaW5lWzFdKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCWNhc2UgJ3knOgorCQljYXNlICdZJzoKKwkJCW5ld3ZhbCA9IHllczsKKwkJCWlmICghbGluZVsxXSB8fCAhc3RyY21wKCZsaW5lWzFdLCAiZXMiKSkKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQljYXNlIDA6CisJCQluZXd2YWwgPSBvbGR2YWw7CisJCQlicmVhazsKKwkJY2FzZSAnPyc6CisJCQlnb3RvIGhlbHA7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5ld3ZhbCkpCisJCQlyZXR1cm4gMDsKK2hlbHA6CisJCXByaW50X2hlbHAobWVudSk7CisJfQorfQorCitzdGF0aWMgaW50IGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSwgKmRlZl9zeW07CisJc3RydWN0IG1lbnUgKmNoaWxkOworCWJvb2wgaXNfbmV3OworCisJc3ltID0gbWVudS0+c3ltOworCWlzX25ldyA9ICFzeW1faGFzX3ZhbHVlKHN5bSk7CisJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgeworCQljb25mX3N5bShtZW51KTsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJc3dpdGNoIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkpIHsKKwkJY2FzZSBubzoKKwkJCXJldHVybiAxOworCQljYXNlIG1vZDoKKwkJCXJldHVybiAwOworCQljYXNlIHllczoKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkpIHsKKwkJY2FzZSBubzoKKwkJCXJldHVybiAxOworCQljYXNlIG1vZDoKKwkJCXByaW50ZigiJSpzJXNcbiIsIGluZGVudCAtIDEsICIiLCBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSkpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgeWVzOgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwl3aGlsZSAoMSkgeworCQlpbnQgY250LCBkZWY7CisKKwkJcHJpbnRmKCIlKnMlc1xuIiwgaW5kZW50IC0gMSwgIiIsIF8obWVudV9nZXRfcHJvbXB0KG1lbnUpKSk7CisJCWRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOworCQljbnQgPSBkZWYgPSAwOworCQlsaW5lWzBdID0gMDsKKwkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCQlpZiAoIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCisJCQkJY29udGludWU7CisJCQlpZiAoIWNoaWxkLT5zeW0pIHsKKwkJCQlwcmludGYoIiUqYyAlc1xuIiwgaW5kZW50LCAnKicsIF8obWVudV9nZXRfcHJvbXB0KGNoaWxkKSkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY250Kys7CisJCQlpZiAoY2hpbGQtPnN5bSA9PSBkZWZfc3ltKSB7CisJCQkJZGVmID0gY250OworCQkJCXByaW50ZigiJSpjIiwgaW5kZW50LCAnPicpOworCQkJfSBlbHNlCisJCQkJcHJpbnRmKCIlKmMiLCBpbmRlbnQsICcgJyk7CisJCQlwcmludGYoIiAlZC4gJXMiLCBjbnQsIF8obWVudV9nZXRfcHJvbXB0KGNoaWxkKSkpOworCQkJaWYgKGNoaWxkLT5zeW0tPm5hbWUpCisJCQkJcHJpbnRmKCIgKCVzKSIsIGNoaWxkLT5zeW0tPm5hbWUpOworCQkJaWYgKCFzeW1faGFzX3ZhbHVlKGNoaWxkLT5zeW0pKQorCQkJCXByaW50ZihfKCIgKE5FVykiKSk7CisJCQlwcmludGYoIlxuIik7CisJCX0KKwkJcHJpbnRmKF8oIiUqc2Nob2ljZSIpLCBpbmRlbnQgLSAxLCAiIik7CisJCWlmIChjbnQgPT0gMSkgeworCQkJcHJpbnRmKCJbMV06IDFcbiIpOworCQkJZ290byBjb25mX2NoaWxkczsKKwkJfQorCQlwcmludGYoIlsxLSVkIiwgY250KTsKKwkJaWYgKG1lbnVfaGFzX2hlbHAobWVudSkpCisJCQlwcmludGYoIj8iKTsKKwkJcHJpbnRmKCJdOiAiKTsKKwkJc3dpdGNoIChpbnB1dF9tb2RlKSB7CisJCWNhc2Ugb2xkY29uZmlnOgorCQkJaWYgKCFpc19uZXcpIHsKKwkJCQljbnQgPSBkZWY7CisJCQkJcHJpbnRmKCIlZFxuIiwgY250KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNoZWNrX3N0ZGluKCk7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBvbGRhc2tjb25maWc6CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCXhmZ2V0cyhsaW5lLCAxMjgsIHN0ZGluKTsKKwkJCXN0cmlwKGxpbmUpOworCQkJaWYgKGxpbmVbMF0gPT0gJz8nKSB7CisJCQkJcHJpbnRfaGVscChtZW51KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghbGluZVswXSkKKwkJCQljbnQgPSBkZWY7CisJCQllbHNlIGlmIChpc2RpZ2l0KGxpbmVbMF0pKQorCQkJCWNudCA9IGF0b2kobGluZSk7CisJCQllbHNlCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwljb25mX2NoaWxkczoKKwkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCQlpZiAoIWNoaWxkLT5zeW0gfHwgIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCisJCQkJY29udGludWU7CisJCQlpZiAoIS0tY250KQorCQkJCWJyZWFrOworCQl9CisJCWlmICghY2hpbGQpCisJCQljb250aW51ZTsKKwkJaWYgKGxpbmVbMF0gJiYgbGluZVtzdHJsZW4obGluZSkgLSAxXSA9PSAnPycpIHsKKwkJCXByaW50X2hlbHAoY2hpbGQpOworCQkJY29udGludWU7CisJCX0KKwkJc3ltX3NldF9jaG9pY2VfdmFsdWUoc3ltLCBjaGlsZC0+c3ltKTsKKwkJZm9yIChjaGlsZCA9IGNoaWxkLT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaW5kZW50ICs9IDI7CisJCQljb25mKGNoaWxkKTsKKwkJCWluZGVudCAtPSAyOworCQl9CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBtZW51ICpjaGlsZDsKKworCWlmICghbWVudV9pc192aXNpYmxlKG1lbnUpKQorCQlyZXR1cm47CisKKwlzeW0gPSBtZW51LT5zeW07CisJcHJvcCA9IG1lbnUtPnByb21wdDsKKwlpZiAocHJvcCkgeworCQljb25zdCBjaGFyICpwcm9tcHQ7CisKKwkJc3dpdGNoIChwcm9wLT50eXBlKSB7CisJCWNhc2UgUF9NRU5VOgorCQkJaWYgKChpbnB1dF9tb2RlID09IGxpc3RuZXdjb25maWcgfHwKKwkJCSAgICAgaW5wdXRfbW9kZSA9PSBvbGRub2NvbmZpZykgJiYKKwkJCSAgICByb290RW50cnkgIT0gbWVudSkgeworCQkJCWNoZWNrX2NvbmYobWVudSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgUF9DT01NRU5UOgorCQkJcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOworCQkJaWYgKHByb21wdCkKKwkJCQlwcmludGYoIiUqY1xuJSpjICVzXG4lKmNcbiIsCisJCQkJCWluZGVudCwgJyonLAorCQkJCQlpbmRlbnQsICcqJywgXyhwcm9tcHQpLAorCQkJCQlpbmRlbnQsICcqJyk7CisJCWRlZmF1bHQ6CisJCQk7CisJCX0KKwl9CisKKwlpZiAoIXN5bSkKKwkJZ290byBjb25mX2NoaWxkczsKKworCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpIHsKKwkJY29uZl9jaG9pY2UobWVudSk7CisJCWlmIChzeW0tPmN1cnIudHJpICE9IG1vZCkKKwkJCXJldHVybjsKKwkJZ290byBjb25mX2NoaWxkczsKKwl9CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwljYXNlIFNfU1RSSU5HOgorCQljb25mX3N0cmluZyhtZW51KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29uZl9zeW0obWVudSk7CisJCWJyZWFrOworCX0KKworY29uZl9jaGlsZHM6CisJaWYgKHN5bSkKKwkJaW5kZW50ICs9IDI7CisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KQorCQljb25mKGNoaWxkKTsKKwlpZiAoc3ltKQorCQlpbmRlbnQgLT0gMjsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfY29uZihzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IG1lbnUgKmNoaWxkOworCisJaWYgKCFtZW51X2lzX3Zpc2libGUobWVudSkpCisJCXJldHVybjsKKworCXN5bSA9IG1lbnUtPnN5bTsKKwlpZiAoc3ltICYmICFzeW1faGFzX3ZhbHVlKHN5bSkpIHsKKwkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSB8fAorCQkgICAgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKSkgeworCQkJaWYgKGlucHV0X21vZGUgPT0gbGlzdG5ld2NvbmZpZykgeworCQkJCWlmIChzeW0tPm5hbWUgJiYgIXN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgeworCQkJCQlwcmludGYoIiVzJXNcbiIsIENPTkZJR18sIHN5bS0+bmFtZSk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChpbnB1dF9tb2RlICE9IG9sZG5vY29uZmlnKSB7CisJCQkJaWYgKCFjb25mX2NudCsrKQorCQkJCQlwcmludGYoXygiKlxuKiBSZXN0YXJ0IGNvbmZpZy4uLlxuKlxuIikpOworCQkJCXJvb3RFbnRyeSA9IG1lbnVfZ2V0X3BhcmVudF9tZW51KG1lbnUpOworCQkJCWNvbmYocm9vdEVudHJ5KTsKKwkJCX0KKwkJfQorCX0KKworCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkKKwkJY2hlY2tfY29uZihjaGlsZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0c1tdID0geworCXsiYXNrY29uZmlnIiwgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIG9sZGFza2NvbmZpZ30sCisJeyJjb25maWciLCAgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkY29uZmlnfSwKKwl7ImRlZmNvbmZpZyIsICAgICAgIG9wdGlvbmFsX2FyZ3VtZW50LCBOVUxMLCBkZWZjb25maWd9LAorCXsic2F2ZWRlZmNvbmZpZyIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIHNhdmVkZWZjb25maWd9LAorCXsiYWxsbm9jb25maWciLCAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGFsbG5vY29uZmlnfSwKKwl7ImFsbHllc2NvbmZpZyIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGx5ZXNjb25maWd9LAorCXsiYWxsbW9kY29uZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGFsbG1vZGNvbmZpZ30sCisJeyJhbGxkZWZjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxsZGVmY29uZmlnfSwKKwl7InJhbmRjb25maWciLCAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCByYW5kY29uZmlnfSwKKwl7Imxpc3RuZXdjb25maWciLCAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBsaXN0bmV3Y29uZmlnfSwKKwl7Im5vY29uZmlnIiwgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBvbGRub2NvbmZpZ30sCisJe05VTEwsIDAsIE5VTEwsIDB9Cit9OworCitzdGF0aWMgdm9pZCBjb25mX3VzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQoreworCisJcHJpbnRmKCJVc2FnZTogJXMgW29wdGlvbl0gPGtjb25maWctZmlsZT5cbiIsIHByb2duYW1lKTsKKwlwcmludGYoIltvcHRpb25dIGlzIF9vbmVfIG9mIHRoZSBmb2xsb3dpbmc6XG4iKTsKKwlwcmludGYoIiAgLS1saXN0bmV3Y29uZmlnICAgICAgICAgTGlzdCBuZXcgb3B0aW9uc1xuIik7CisJcHJpbnRmKCIgIC0tYXNrY29uZmlnICAgICAgICAgICAgIFN0YXJ0IGEgbmV3IGNvbmZpZ3VyYXRpb24gdXNpbmcgYSBsaW5lLW9yaWVudGVkIHByb2dyYW1cbiIpOworCXByaW50ZigiICAtLWNvbmZpZyAgICAgICAgICAgICAgICBVcGRhdGUgYSBjb25maWd1cmF0aW9uIHVzaW5nIGEgcHJvdmlkZWQgLmNvbmZpZyBhcyBiYXNlXG4iKTsKKwlwcmludGYoIiAgLS1zaWxlbnRjb25maWcgICAgICAgICAgU2FtZSBhcyBjb25maWcsIGJ1dCBxdWlldGx5LCBhZGRpdGlvbmFsbHkgdXBkYXRlIGRlcHNcbiIpOworCXByaW50ZigiICAtLW5vY29uZmlnICAgICAgICAgICAgICBTYW1lIGFzIHNpbGVudGNvbmZpZyBidXQgc2V0IG5ldyBzeW1ib2xzIHRvIG5vXG4iKTsKKwlwcmludGYoIiAgLS1kZWZjb25maWcgPGZpbGU+ICAgICAgTmV3IGNvbmZpZyB3aXRoIGRlZmF1bHQgZGVmaW5lZCBpbiA8ZmlsZT5cbiIpOworCXByaW50ZigiICAtLXNhdmVkZWZjb25maWcgPGZpbGU+ICBTYXZlIHRoZSBtaW5pbWFsIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0byA8ZmlsZT5cbiIpOworCXByaW50ZigiICAtLWFsbG5vY29uZmlnICAgICAgICAgICBOZXcgY29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhbnN3ZXJlZCB3aXRoIG5vXG4iKTsKKwlwcmludGYoIiAgLS1hbGx5ZXNjb25maWcgICAgICAgICAgTmV3IGNvbmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0aCB5ZXNcbiIpOworCXByaW50ZigiICAtLWFsbG1vZGNvbmZpZyAgICAgICAgICBOZXcgY29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhbnN3ZXJlZCB3aXRoIG1vZFxuIik7CisJcHJpbnRmKCIgIC0tYWxsZGVmY29uZmlnICAgICAgICAgIE5ldyBjb25maWcgd2l0aCBhbGwgc3ltYm9scyBzZXQgdG8gZGVmYXVsdFxuIik7CisJcHJpbnRmKCIgIC0tcmFuZGNvbmZpZyAgICAgICAgICAgIE5ldyBjb25maWcgd2l0aCByYW5kb20gYW5zd2VyIHRvIGFsbCBvcHRpb25zXG4iKTsKK30KKworaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCit7CisJY29uc3QgY2hhciAqcHJvZ25hbWUgPSBhdlswXTsKKwlpbnQgb3B0OworCWNvbnN0IGNoYXIgKm5hbWUsICpkZWZjb25maWdfZmlsZSA9IE5VTEwgLyogZ2NjIHVuaW5pdCAqLzsKKwlzdHJ1Y3Qgc3RhdCB0bXBzdGF0OworCisJc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKFBBQ0tBR0UsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihQQUNLQUdFKTsKKworCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYWMsIGF2LCAiIiwgbG9uZ19vcHRzLCBOVUxMKSkgIT0gLTEpIHsKKwkJaW5wdXRfbW9kZSA9IChlbnVtIGlucHV0X21vZGUpb3B0OworCQlzd2l0Y2ggKG9wdCkgeworCQljYXNlIGRlZmNvbmZpZzoKKwkJY2FzZSBzYXZlZGVmY29uZmlnOgorCQkJZGVmY29uZmlnX2ZpbGUgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSByYW5kY29uZmlnOgorCQl7CisJCQlzdHJ1Y3QgdGltZXZhbCBub3c7CisJCQl1bnNpZ25lZCBpbnQgc2VlZDsKKworCQkJLyoKKwkJCSAqIFVzZSBtaWNyb3NlY29uZHMgZGVyaXZlZCBzZWVkLAorCQkJICogY29tcGVuc2F0ZSBmb3Igc3lzdGVtcyB3aGVyZSBpdCBtYXkgYmUgemVybworCQkJICovCisJCQlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisKKwkJCXNlZWQgPSAodW5zaWduZWQgaW50KSgobm93LnR2X3NlYyArIDEpICogKG5vdy50dl91c2VjICsgMSkpOworCQkJc3JhbmQoc2VlZCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIG9sZGFza2NvbmZpZzoKKwkJY2FzZSBvbGRjb25maWc6CisJCWNhc2UgYWxsbm9jb25maWc6CisJCWNhc2UgYWxseWVzY29uZmlnOgorCQljYXNlIGFsbG1vZGNvbmZpZzoKKwkJY2FzZSBhbGxkZWZjb25maWc6CisJCWNhc2UgbGlzdG5ld2NvbmZpZzoKKwkJY2FzZSBvbGRub2NvbmZpZzoKKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCWNvbmZfdXNhZ2UocHJvZ25hbWUpOworCQkJZXhpdCgxKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChhYyA9PSBvcHRpbmQpIHsKKwkJcHJpbnRmKF8oIiVzOiBLY29uZmlnIGZpbGUgbWlzc2luZ1xuIiksIGF2WzBdKTsKKwkJY29uZl91c2FnZShwcm9nbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCW5hbWUgPSBhdltvcHRpbmRdOworCWNvbmZfcGFyc2UobmFtZSk7CisJLy96Y29uZmR1bXAoc3Rkb3V0KTsKKworCXN3aXRjaCAoaW5wdXRfbW9kZSkgeworCWNhc2UgZGVmY29uZmlnOgorCQlpZiAoIWRlZmNvbmZpZ19maWxlKQorCQkJZGVmY29uZmlnX2ZpbGUgPSBjb25mX2dldF9kZWZhdWx0X2NvbmZuYW1lKCk7CisJCWlmIChjb25mX3JlYWQoZGVmY29uZmlnX2ZpbGUpKSB7CisJCQlwcmludGYoXygiKioqXG4iCisJCQkJIioqKiBDYW4ndCBmaW5kIGRlZmF1bHQgY29uZmlndXJhdGlvbiBcIiVzXCIhXG4iCisJCQkJIioqKlxuIiksIGRlZmNvbmZpZ19maWxlKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBzYXZlZGVmY29uZmlnOgorCWNhc2Ugb2xkYXNrY29uZmlnOgorCWNhc2Ugb2xkY29uZmlnOgorCWNhc2UgbGlzdG5ld2NvbmZpZzoKKwljYXNlIG9sZG5vY29uZmlnOgorCQljb25mX3JlYWQoTlVMTCk7CisJCWJyZWFrOworCWNhc2UgYWxsbm9jb25maWc6CisJY2FzZSBhbGx5ZXNjb25maWc6CisJY2FzZSBhbGxtb2Rjb25maWc6CisJY2FzZSBhbGxkZWZjb25maWc6CisJY2FzZSByYW5kY29uZmlnOgorCQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX0FMTENPTkZJRyIpOworCQlpZiAobmFtZSAmJiAhc3RhdChuYW1lLCAmdG1wc3RhdCkpIHsKKwkJCWNvbmZfcmVhZF9zaW1wbGUobmFtZSwgU19ERUZfVVNFUik7CisJCQlicmVhazsKKwkJfQorCQlzd2l0Y2ggKGlucHV0X21vZGUpIHsKKwkJY2FzZSBhbGxub2NvbmZpZzoJbmFtZSA9ICJhbGxuby5jb25maWciOyBicmVhazsKKwkJY2FzZSBhbGx5ZXNjb25maWc6CW5hbWUgPSAiYWxseWVzLmNvbmZpZyI7IGJyZWFrOworCQljYXNlIGFsbG1vZGNvbmZpZzoJbmFtZSA9ICJhbGxtb2QuY29uZmlnIjsgYnJlYWs7CisJCWNhc2UgYWxsZGVmY29uZmlnOgluYW1lID0gImFsbGRlZi5jb25maWciOyBicmVhazsKKwkJY2FzZSByYW5kY29uZmlnOgluYW1lID0gImFsbHJhbmRvbS5jb25maWciOyBicmVhazsKKwkJZGVmYXVsdDogYnJlYWs7CisJCX0KKwkJaWYgKCFzdGF0KG5hbWUsICZ0bXBzdGF0KSkKKwkJCWNvbmZfcmVhZF9zaW1wbGUobmFtZSwgU19ERUZfVVNFUik7CisJCWVsc2UgaWYgKCFzdGF0KCJhbGwuY29uZmlnIiwgJnRtcHN0YXQpKQorCQkJY29uZl9yZWFkX3NpbXBsZSgiYWxsLmNvbmZpZyIsIFNfREVGX1VTRVIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwl2YWxpZF9zdGRpbiA9IGlzYXR0eSgwKSAmJiBpc2F0dHkoMSkgJiYgaXNhdHR5KDIpOworCisJc3dpdGNoIChpbnB1dF9tb2RlKSB7CisJY2FzZSBhbGxub2NvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9ubyk7CisJCWJyZWFrOworCWNhc2UgYWxseWVzY29uZmlnOgorCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX3llcyk7CisJCWJyZWFrOworCWNhc2UgYWxsbW9kY29uZmlnOgorCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX21vZCk7CisJCWJyZWFrOworCWNhc2UgYWxsZGVmY29uZmlnOgorCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX2RlZmF1bHQpOworCQlicmVhazsKKwljYXNlIHJhbmRjb25maWc6CisJCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfcmFuZG9tKTsKKwkJYnJlYWs7CisJY2FzZSBkZWZjb25maWc6CisJCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfZGVmYXVsdCk7CisJCWJyZWFrOworCWNhc2Ugc2F2ZWRlZmNvbmZpZzoKKwkJYnJlYWs7CisJY2FzZSBvbGRhc2tjb25maWc6CisJCXJvb3RFbnRyeSA9ICZyb290bWVudTsKKwkJY29uZigmcm9vdG1lbnUpOworCQlpbnB1dF9tb2RlID0gb2xkY29uZmlnOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIG9sZGNvbmZpZzoKKwljYXNlIGxpc3RuZXdjb25maWc6CisJY2FzZSBvbGRub2NvbmZpZzoKKwkJLyogVXBkYXRlIHVudGlsIGEgbG9vcCBjYXVzZWQgbm8gbW9yZSBjaGFuZ2VzICovCisJCWRvIHsKKwkJCWNvbmZfY250ID0gMDsKKwkJCWNoZWNrX2NvbmYoJnJvb3RtZW51KTsKKwkJfSB3aGlsZSAoY29uZl9jbnQgJiYKKwkJCSAoaW5wdXRfbW9kZSAhPSBsaXN0bmV3Y29uZmlnICYmCisJCQkgIGlucHV0X21vZGUgIT0gb2xkbm9jb25maWcpKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGlucHV0X21vZGUgPT0gc2F2ZWRlZmNvbmZpZykgeworCQlpZiAoY29uZl93cml0ZV9kZWZjb25maWcoZGVmY29uZmlnX2ZpbGUpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygibioqKiBFcnJvciB3aGlsZSBzYXZpbmcgZGVmY29uZmlnIHRvOiAlc1xuXG4iKSwKKwkJCSAgICAgICAgZGVmY29uZmlnX2ZpbGUpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgaWYgKGlucHV0X21vZGUgIT0gbGlzdG5ld2NvbmZpZykgeworCQkvKgorCQkgKiBidWlsZCBzbyB3ZSBzaGFsbCB1cGRhdGUgYXV0b2NvbmYuCisJCSAqLworCQlpZiAoY29uZl93cml0ZShOVUxMKSkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIlxuKioqIEVycm9yIGR1cmluZyB3cml0aW5nIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuXG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmIChjb25mX3dyaXRlX2F1dG9jb25mKCkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJcbioqKiBFcnJvciBkdXJpbmcgdXBkYXRlIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuXG4iKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0byBmYWNpbGl0YXRlIGZnZXRzKCkgYnkgSmVhbiBTYWNyZW4uCisgKi8KK3ZvaWQgeGZnZXRzKGNoYXIgKnN0ciwgaW50IHNpemUsIEZJTEUgKmluKQoreworCWlmIChmZ2V0cyhzdHIsIHNpemUsIGluKSA9PSBOVUxMKQorCQlmcHJpbnRmKHN0ZGVyciwgIlxuRXJyb3IgaW4gcmVhZGluZyBvciBlbmQgb2YgZmlsZS5cbiIpOworfQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jb25maWcvY29uZmRhdGEuYyBiL2Nhcmw5MTcwZncvY29uZmlnL2NvbmZkYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ1YzM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY29uZmlnL2NvbmZkYXRhLmMKQEAgLTAsMCArMSwxMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKi8KKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworc3RhdGljIHZvaWQgY29uZl93YXJuaW5nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZfZmlsZW5hbWU7CitzdGF0aWMgaW50IGNvbmZfbGluZW5vLCBjb25mX3dhcm5pbmdzLCBjb25mX3Vuc2F2ZWQ7CisKK2NvbnN0IGNoYXIgY29uZl9kZWZuYW1lW10gPSAiaW5jbHVkZS9nZW5lcmF0ZWQvZGVmY29uZmlnIjsKKworc3RhdGljIHZvaWQgY29uZl93YXJuaW5nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJZnByaW50ZihzdGRlcnIsICIlczolZDp3YXJuaW5nOiAiLCBjb25mX2ZpbGVuYW1lLCBjb25mX2xpbmVubyk7CisJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJdmFfZW5kKGFwKTsKKwljb25mX3dhcm5pbmdzKys7Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfZGVmYXVsdF9tZXNzYWdlX2NhbGxiYWNrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlwcmludGYoIiNcbiMgIik7CisJdnByaW50ZihmbXQsIGFwKTsKKwlwcmludGYoIlxuI1xuIik7Cit9CisKK3N0YXRpYyB2b2lkICgqY29uZl9tZXNzYWdlX2NhbGxiYWNrKSAoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKSA9CisJY29uZl9kZWZhdWx0X21lc3NhZ2VfY2FsbGJhY2s7Cit2b2lkIGNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2sodm9pZCAoKmZuKSAoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKSkKK3sKKwljb25mX21lc3NhZ2VfY2FsbGJhY2sgPSBmbjsKK30KKworc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlpZiAoY29uZl9tZXNzYWdlX2NhbGxiYWNrKQorCQljb25mX21lc3NhZ2VfY2FsbGJhY2soZm10LCBhcCk7Cit9CisKK2NvbnN0IGNoYXIgKmNvbmZfZ2V0X2NvbmZpZ25hbWUodm9pZCkKK3sKKwljaGFyICpuYW1lID0gZ2V0ZW52KCJLQ09ORklHX0NPTkZJRyIpOworCisJcmV0dXJuIG5hbWUgPyBuYW1lIDogIi5jb25maWciOworfQorCitjb25zdCBjaGFyICpjb25mX2dldF9hdXRvY29uZmlnX25hbWUodm9pZCkKK3sKKwljaGFyICpuYW1lID0gZ2V0ZW52KCJLQ09ORklHX0FVVE9DT05GSUciKTsKKworCXJldHVybiBuYW1lID8gbmFtZSA6ICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRvLmNvbmYiOworfQorCitzdGF0aWMgY2hhciAqY29uZl9leHBhbmRfdmFsdWUoY29uc3QgY2hhciAqaW4pCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWNvbnN0IGNoYXIgKnNyYzsKKwlzdGF0aWMgY2hhciByZXNfdmFsdWVbU1lNQk9MX01BWExFTkdUSF07CisJY2hhciAqZHN0LCBuYW1lW1NZTUJPTF9NQVhMRU5HVEhdOworCisJcmVzX3ZhbHVlWzBdID0gMDsKKwlkc3QgPSBuYW1lOworCXdoaWxlICgoc3JjID0gc3RyY2hyKGluLCAnJCcpKSkgeworCQlzdHJuY2F0KHJlc192YWx1ZSwgaW4sIHNyYyAtIGluKTsKKwkJc3JjKys7CisJCWRzdCA9IG5hbWU7CisJCXdoaWxlIChpc2FsbnVtKCpzcmMpIHx8ICpzcmMgPT0gJ18nKQorCQkJKmRzdCsrID0gKnNyYysrOworCQkqZHN0ID0gMDsKKwkJc3ltID0gc3ltX2xvb2t1cChuYW1lLCAwKTsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJc3RyY2F0KHJlc192YWx1ZSwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7CisJCWluID0gc3JjOworCX0KKwlzdHJjYXQocmVzX3ZhbHVlLCBpbik7CisKKwlyZXR1cm4gcmVzX3ZhbHVlOworfQorCitjaGFyICpjb25mX2dldF9kZWZhdWx0X2NvbmZuYW1lKHZvaWQpCit7CisJc3RydWN0IHN0YXQgYnVmOworCXN0YXRpYyBjaGFyIGZ1bGxuYW1lW1BBVEhfTUFYKzFdOworCWNoYXIgKmVudiwgKm5hbWU7CisKKwluYW1lID0gY29uZl9leHBhbmRfdmFsdWUoY29uZl9kZWZuYW1lKTsKKwllbnYgPSBnZXRlbnYoU1JDVFJFRSk7CisJaWYgKGVudikgeworCQlzcHJpbnRmKGZ1bGxuYW1lLCAiJXMvJXMiLCBlbnYsIG5hbWUpOworCQlpZiAoIXN0YXQoZnVsbG5hbWUsICZidWYpKQorCQkJcmV0dXJuIGZ1bGxuYW1lOworCX0KKwlyZXR1cm4gbmFtZTsKK30KKworc3RhdGljIGludCBjb25mX3NldF9zeW1fdmFsKHN0cnVjdCBzeW1ib2wgKnN5bSwgaW50IGRlZiwgaW50IGRlZl9mbGFncywgY2hhciAqcCkKK3sKKwljaGFyICpwMjsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX1RSSVNUQVRFOgorCQlpZiAocFswXSA9PSAnbScpIHsKKwkJCXN5bS0+ZGVmW2RlZl0udHJpID0gbW9kOworCQkJc3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfQk9PTEVBTjoKKwkJaWYgKHBbMF0gPT0gJ3knKSB7CisJCQlzeW0tPmRlZltkZWZdLnRyaSA9IHllczsKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBbMF0gPT0gJ24nKSB7CisJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOworCQkJc3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7CisJCQlicmVhazsKKwkJfQorCQljb25mX3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQgZm9yICVzIiwgcCwgc3ltLT5uYW1lKTsKKwkJcmV0dXJuIDE7CisJY2FzZSBTX09USEVSOgorCQlpZiAoKnAgIT0gJyInKSB7CisJCQlmb3IgKHAyID0gcDsgKnAyICYmICFpc3NwYWNlKCpwMik7IHAyKyspCisJCQkJOworCQkJc3ltLT50eXBlID0gU19TVFJJTkc7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTX1NUUklORzoKKwkJaWYgKCpwKysgIT0gJyInKQorCQkJYnJlYWs7CisJCWZvciAocDIgPSBwOyAocDIgPSBzdHJwYnJrKHAyLCAiXCJcXCIpKTsgcDIrKykgeworCQkJaWYgKCpwMiA9PSAnIicpIHsKKwkJCQkqcDIgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJbWVtbW92ZShwMiwgcDIgKyAxLCBzdHJsZW4ocDIpKTsKKwkJfQorCQlpZiAoIXAyKSB7CisJCQljb25mX3dhcm5pbmcoImludmFsaWQgc3RyaW5nIGZvdW5kIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfSU5UOgorCWNhc2UgU19IRVg6CisJZG9uZToKKwkJaWYgKHN5bV9zdHJpbmdfdmFsaWQoc3ltLCBwKSkgeworCQkJc3ltLT5kZWZbZGVmXS52YWwgPSBzdHJkdXAocCk7CisJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsKKwkJfSBlbHNlIHsKKwkJCWNvbmZfd2FybmluZygic3ltYm9sIHZhbHVlICclcycgaW52YWxpZCBmb3IgJXMiLCBwLCBzeW0tPm5hbWUpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNvbmZfcmVhZF9zaW1wbGUoY29uc3QgY2hhciAqbmFtZSwgaW50IGRlZikKK3sKKwlGSUxFICppbiA9IE5VTEw7CisJY2hhciBsaW5lWzEwMjRdOworCWNoYXIgKnAsICpwMjsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJaW50IGksIGRlZl9mbGFnczsKKworCWlmIChuYW1lKSB7CisJCWluID0gemNvbmZfZm9wZW4obmFtZSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJCW5hbWUgPSBjb25mX2dldF9jb25maWduYW1lKCk7CisJCWluID0gemNvbmZfZm9wZW4obmFtZSk7CisJCWlmIChpbikKKwkJCWdvdG8gbG9hZDsKKwkJc3ltX2FkZF9jaGFuZ2VfY291bnQoMSk7CisJCWlmICghc3ltX2RlZmNvbmZpZ19saXN0KSB7CisJCQlpZiAobW9kdWxlc19zeW0pCisJCQkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlmb3JfYWxsX2RlZmF1bHRzKHN5bV9kZWZjb25maWdfbGlzdCwgcHJvcCkgeworCQkJaWYgKGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpID09IG5vIHx8CisJCQkgICAgcHJvcC0+ZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCQljb250aW51ZTsKKwkJCW5hbWUgPSBjb25mX2V4cGFuZF92YWx1ZShwcm9wLT5leHByLT5sZWZ0LnN5bS0+bmFtZSk7CisJCQlpbiA9IHpjb25mX2ZvcGVuKG5hbWUpOworCQkJaWYgKGluKSB7CisJCQkJY29uZl9tZXNzYWdlKF8oInVzaW5nIGRlZmF1bHRzIGZvdW5kIGluICVzIiksCisJCQkJCSBuYW1lKTsKKwkJCQlnb3RvIGxvYWQ7CisJCQl9CisJCX0KKwl9CisJaWYgKCFpbikKKwkJcmV0dXJuIDE7CisKK2xvYWQ6CisJY29uZl9maWxlbmFtZSA9IG5hbWU7CisJY29uZl9saW5lbm8gPSAwOworCWNvbmZfd2FybmluZ3MgPSAwOworCWNvbmZfdW5zYXZlZCA9IDA7CisKKwlkZWZfZmxhZ3MgPSBTWU1CT0xfREVGIDw8IGRlZjsKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0NIQU5HRUQ7CisJCXN5bS0+ZmxhZ3MgJj0gfihkZWZfZmxhZ3N8U1lNQk9MX1ZBTElEKTsKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOworCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQljYXNlIFNfSU5UOgorCQljYXNlIFNfSEVYOgorCQljYXNlIFNfU1RSSU5HOgorCQkJaWYgKHN5bS0+ZGVmW2RlZl0udmFsKQorCQkJCWZyZWUoc3ltLT5kZWZbZGVmXS52YWwpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlzeW0tPmRlZltkZWZdLnZhbCA9IE5VTEw7CisJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOworCQl9CisJfQorCisJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CisJCWNvbmZfbGluZW5vKys7CisJCXN5bSA9IE5VTEw7CisJCWlmIChsaW5lWzBdID09ICcjJykgeworCQkJaWYgKG1lbWNtcChsaW5lICsgMiwgQ09ORklHXywgc3RybGVuKENPTkZJR18pKSkKKwkJCQljb250aW51ZTsKKwkJCXAgPSBzdHJjaHIobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXyksICcgJyk7CisJCQlpZiAoIXApCisJCQkJY29udGludWU7CisJCQkqcCsrID0gMDsKKwkJCWlmIChzdHJuY21wKHAsICJpcyBub3Qgc2V0IiwgMTApKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGRlZiA9PSBTX0RFRl9VU0VSKSB7CisJCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXykpOworCQkJCWlmICghc3ltKSB7CisJCQkJCXN5bV9hZGRfY2hhbmdlX2NvdW50KDEpOworCQkJCQlnb3RvIHNldHN5bTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN5bSA9IHN5bV9sb29rdXAobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXyksIDApOworCQkJCWlmIChzeW0tPnR5cGUgPT0gU19VTktOT1dOKQorCQkJCQlzeW0tPnR5cGUgPSBTX0JPT0xFQU47CisJCQl9CisJCQlpZiAoc3ltLT5mbGFncyAmIGRlZl9mbGFncykgeworCQkJCWNvbmZfd2FybmluZygib3ZlcnJpZGU6IHJlYXNzaWduaW5nIHRvIHN5bWJvbCAlcyIsIHN5bS0+bmFtZSk7CisJCQl9CisJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJc3ltLT5kZWZbZGVmXS50cmkgPSBubzsKKwkJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJOworCQkJfQorCQl9IGVsc2UgaWYgKG1lbWNtcChsaW5lLCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApIHsKKwkJCXAgPSBzdHJjaHIobGluZSArIHN0cmxlbihDT05GSUdfKSwgJz0nKTsKKwkJCWlmICghcCkKKwkJCQljb250aW51ZTsKKwkJCSpwKysgPSAwOworCQkJcDIgPSBzdHJjaHIocCwgJ1xuJyk7CisJCQlpZiAocDIpIHsKKwkJCQkqcDItLSA9IDA7CisJCQkJaWYgKCpwMiA9PSAnXHInKQorCQkJCQkqcDIgPSAwOworCQkJfQorCQkJaWYgKGRlZiA9PSBTX0RFRl9VU0VSKSB7CisJCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIHN0cmxlbihDT05GSUdfKSk7CisJCQkJaWYgKCFzeW0pIHsKKwkJCQkJc3ltX2FkZF9jaGFuZ2VfY291bnQoMSk7CisJCQkJCWdvdG8gc2V0c3ltOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc3ltID0gc3ltX2xvb2t1cChsaW5lICsgc3RybGVuKENPTkZJR18pLCAwKTsKKwkJCQlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikKKwkJCQkJc3ltLT50eXBlID0gU19PVEhFUjsKKwkJCX0KKwkJCWlmIChzeW0tPmZsYWdzICYgZGVmX2ZsYWdzKSB7CisJCQkJY29uZl93YXJuaW5nKCJvdmVycmlkZTogcmVhc3NpZ25pbmcgdG8gc3ltYm9sICVzIiwgc3ltLT5uYW1lKTsKKwkJCX0KKwkJCWlmIChjb25mX3NldF9zeW1fdmFsKHN5bSwgZGVmLCBkZWZfZmxhZ3MsIHApKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJaWYgKGxpbmVbMF0gIT0gJ1xyJyAmJiBsaW5lWzBdICE9ICdcbicpCisJCQkJY29uZl93YXJuaW5nKCJ1bmV4cGVjdGVkIGRhdGEiKTsKKwkJCWNvbnRpbnVlOworCQl9CitzZXRzeW06CisJCWlmIChzeW0gJiYgc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7CisJCQlzdHJ1Y3Qgc3ltYm9sICpjcyA9IHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSkpOworCQkJc3dpdGNoIChzeW0tPmRlZltkZWZdLnRyaSkgeworCQkJY2FzZSBubzoKKwkJCQlicmVhazsKKwkJCWNhc2UgbW9kOgorCQkJCWlmIChjcy0+ZGVmW2RlZl0udHJpID09IHllcykgeworCQkJCQljb25mX3dhcm5pbmcoIiVzIGNyZWF0ZXMgaW5jb25zaXN0ZW50IGNob2ljZSBzdGF0ZSIsIHN5bS0+bmFtZSk7CisJCQkJCWNzLT5mbGFncyAmPSB+ZGVmX2ZsYWdzOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgeWVzOgorCQkJCWlmIChjcy0+ZGVmW2RlZl0udHJpICE9IG5vKQorCQkJCQljb25mX3dhcm5pbmcoIm92ZXJyaWRlOiAlcyBjaGFuZ2VzIGNob2ljZSBzdGF0ZSIsIHN5bS0+bmFtZSk7CisJCQkJY3MtPmRlZltkZWZdLnZhbCA9IHN5bTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNzLT5kZWZbZGVmXS50cmkgPSBFWFBSX09SKGNzLT5kZWZbZGVmXS50cmksIHN5bS0+ZGVmW2RlZl0udHJpKTsKKwkJfQorCX0KKwlmY2xvc2UoaW4pOworCisJaWYgKG1vZHVsZXNfc3ltKQorCQlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb25mX3JlYWQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJaW50IGk7CisKKwlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsKKworCWlmIChjb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX1VTRVIpKQorCQlyZXR1cm4gMTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSB8fCAoc3ltLT5mbGFncyAmIFNZTUJPTF9BVVRPKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pICYmIChzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkgeworCQkJLyogY2hlY2sgdGhhdCBjYWxjdWxhdGVkIHZhbHVlIGFncmVlcyB3aXRoIHNhdmVkIHZhbHVlICovCisJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJaWYgKHN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSAhPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkpCisJCQkJCWJyZWFrOworCQkJCWlmICghc3ltX2lzX2Nob2ljZShzeW0pKQorCQkJCQljb250aW51ZTsKKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJCWRlZmF1bHQ6CisJCQkJaWYgKCFzdHJjbXAoc3ltLT5jdXJyLnZhbCwgc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSAmJiAhKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpKQorCQkJLyogbm8gcHJldmlvdXMgdmFsdWUgYW5kIG5vdCBzYXZlZCAqLworCQkJY29udGludWU7CisJCWNvbmZfdW5zYXZlZCsrOworCQkvKiBtYXliZSBwcmludCB2YWx1ZSBpbiB2ZXJib3NlIG1vZGUuLi4gKi8KKwl9CisKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkgJiYgIXN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgeworCQkJLyogUmVzZXQgdmFsdWVzIG9mIGdlbmVyYXRlcyB2YWx1ZXMsIHNvIHRoZXknbGwgYXBwZWFyCisJCQkgKiBhcyBuZXcsIGlmIHRoZXkgc2hvdWxkIGJlY29tZSB2aXNpYmxlLCBidXQgdGhhdAorCQkJICogZG9lc24ndCBxdWl0ZSB3b3JrIGlmIHRoZSBLY29uZmlnIGFuZCB0aGUgc2F2ZWQKKwkJCSAqIGNvbmZpZ3VyYXRpb24gZGlzYWdyZWUuCisJCQkgKi8KKwkJCWlmIChzeW0tPnZpc2libGUgPT0gbm8gJiYgIWNvbmZfdW5zYXZlZCkKKwkJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfREVGX1VTRVI7CisJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJY2FzZSBTX1NUUklORzoKKwkJCWNhc2UgU19JTlQ6CisJCQljYXNlIFNfSEVYOgorCQkJCS8qIFJlc2V0IGEgc3RyaW5nIHZhbHVlIGlmIGl0J3Mgb3V0IG9mIHJhbmdlICovCisJCQkJaWYgKHN5bV9zdHJpbmdfd2l0aGluX3JhbmdlKHN5bSwgc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsKSkKKwkJCQkJYnJlYWs7CisJCQkJc3ltLT5mbGFncyAmPSB+KFNZTUJPTF9WQUxJRHxTWU1CT0xfREVGX1VTRVIpOworCQkJCWNvbmZfdW5zYXZlZCsrOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXN5bV9hZGRfY2hhbmdlX2NvdW50KGNvbmZfd2FybmluZ3MgfHwgY29uZl91bnNhdmVkKTsKKworCXJldHVybiAwOworfQorCisvKgorICogS2NvbmZpZyBjb25maWd1cmF0aW9uIHByaW50ZXIKKyAqCisgKiBUaGlzIHByaW50ZXIgaXMgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlIHJlc3VsdGluZyBjb25maWd1cmF0aW9uIGFmdGVyCisgKiBrY29uZmlnIGludm9jYXRpb24gYW5kIGBkZWZjb25maWcnIGZpbGVzLiBVbnNldCBzeW1ib2wgbWlnaHQgYmUgb21pdHRlZCBieQorICogcGFzc2luZyBhIG5vbi1OVUxMIGFyZ3VtZW50IHRvIHRoZSBwcmludGVyLgorICoKKyAqLworc3RhdGljIHZvaWQKK2tjb25maWdfcHJpbnRfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICphcmcpCit7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19UUklTVEFURToKKwkJaWYgKCp2YWx1ZSA9PSAnbicpIHsKKwkJCWJvb2wgc2tpcF91bnNldCA9IChhcmcgIT0gTlVMTCk7CisKKwkJCWlmICghc2tpcF91bnNldCkKKwkJCQlmcHJpbnRmKGZwLCAiIyAlcyVzIGlzIG5vdCBzZXRcbiIsCisJCQkJICAgIENPTkZJR18sIHN5bS0+bmFtZSk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZnByaW50ZihmcCwgIiVzJXM9JXNcbiIsIENPTkZJR18sIHN5bS0+bmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZAora2NvbmZpZ19wcmludF9jbWFrZV9zeW1ib2woRklMRSAqZnAsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykKK3sKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQlpZiAoKnZhbHVlID09ICduJykgeworCQkJYm9vbCBza2lwX3Vuc2V0ID0gKGFyZyAhPSBOVUxMKTsKKworCQkJaWYgKCFza2lwX3Vuc2V0KQorCQkJCWZwcmludGYoZnAsICJzZXQoJXMlcyBmYWxzZSlcbiIsCisJCQkJCUNPTkZJR18sIHN5bS0+bmFtZSwgdmFsdWUpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKCp2YWx1ZSA9PSAnbScpIHsKKwkJCWFib3J0KCk7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKGZwLCAic2V0KCVzJXMgdHJ1ZSlcbiIsIENPTkZJR18sIHN5bS0+bmFtZSwgdmFsdWUpOworCQl9CisJCWJyZWFrOworCWNhc2UgU19IRVg6IHsKKwkJY29uc3QgY2hhciAqcHJlZml4ID0gIiI7CisKKwkJaWYgKHZhbHVlWzBdICE9ICcwJyB8fCAodmFsdWVbMV0gIT0gJ3gnICYmIHZhbHVlWzFdICE9ICdYJykpCisJCQlwcmVmaXggPSAiMHgiOworCQlmcHJpbnRmKGZwLCAic2V0KCVzJXMgJXMlcylcbiIsCisJCSAgICBDT05GSUdfLCBzeW0tPm5hbWUsIHByZWZpeCwgdmFsdWUpOworCQlicmVhazsKKwl9CisJY2FzZSBTX1NUUklORzoKKwljYXNlIFNfSU5UOgorCQlmcHJpbnRmKGZwLCAic2V0KCVzJXMgJXMpXG4iLAorCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCB2YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworfQorCitzdGF0aWMgdm9pZAora2NvbmZpZ19wcmludF9jb21tZW50KEZJTEUgKmZwLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQoreworCWNvbnN0IGNoYXIgKnAgPSB2YWx1ZTsKKwlzaXplX3QgbDsKKworCWZvciAoOzspIHsKKwkJbCA9IHN0cmNzcG4ocCwgIlxuIik7CisJCWZwcmludGYoZnAsICIjIik7CisJCWlmIChsKSB7CisJCQlmcHJpbnRmKGZwLCAiICIpOworCQkJeGZ3cml0ZShwLCBsLCAxLCBmcCk7CisJCQlwICs9IGw7CisJCX0KKwkJZnByaW50ZihmcCwgIlxuIik7CisJCWlmICgqcCsrID09ICdcMCcpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uZl9wcmludGVyIGtjb25maWdfcHJpbnRlcl9jYiA9Cit7CisJLnByaW50X3N5bWJvbCA9IGtjb25maWdfcHJpbnRfc3ltYm9sLAorCS5wcmludF9jb21tZW50ID0ga2NvbmZpZ19wcmludF9jb21tZW50LAorfTsKKworc3RhdGljIHN0cnVjdCBjb25mX3ByaW50ZXIga2NvbmZpZ19wcmludGVyX2NtYWtlX2NiID0KK3sKKwkucHJpbnRfc3ltYm9sID0ga2NvbmZpZ19wcmludF9jbWFrZV9zeW1ib2wsCisJLnByaW50X2NvbW1lbnQgPSBrY29uZmlnX3ByaW50X2NvbW1lbnQsCit9OworCisvKgorICogSGVhZGVyIHByaW50ZXIKKyAqCisgKiBUaGlzIHByaW50ZXIgaXMgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlIGBpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oJyBmaWxlLgorICovCitzdGF0aWMgdm9pZAoraGVhZGVyX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQoreworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6IHsKKwkJY29uc3QgY2hhciAqc3VmZml4ID0gIiI7CisKKwkJc3dpdGNoICgqdmFsdWUpIHsKKwkJY2FzZSAnbic6CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlzdWZmaXggPSAiX01PRFVMRSI7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCWZwcmludGYoZnAsICIjZGVmaW5lICVzJXMlcyAxXG4iLAorCQkJICAgIENPTkZJR18sIHN5bS0+bmFtZSwgc3VmZml4KTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTX0hFWDogeworCQljb25zdCBjaGFyICpwcmVmaXggPSAiIjsKKworCQlpZiAodmFsdWVbMF0gIT0gJzAnIHx8ICh2YWx1ZVsxXSAhPSAneCcgJiYgdmFsdWVbMV0gIT0gJ1gnKSkKKwkJCXByZWZpeCA9ICIweCI7CisJCWZwcmludGYoZnAsICIjZGVmaW5lICVzJXMgJXMlc1xuIiwKKwkJICAgIENPTkZJR18sIHN5bS0+bmFtZSwgcHJlZml4LCB2YWx1ZSk7CisJCWJyZWFrOworCX0KKwljYXNlIFNfU1RSSU5HOgorCWNhc2UgU19JTlQ6CisJCWZwcmludGYoZnAsICIjZGVmaW5lICVzJXMgJXNcbiIsCisJCSAgICBDT05GSUdfLCBzeW0tPm5hbWUsIHZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCit9CisKK3N0YXRpYyB2b2lkCitoZWFkZXJfcHJpbnRfY29tbWVudChGSUxFICpmcCwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykKK3sKKwljb25zdCBjaGFyICpwID0gdmFsdWU7CisJc2l6ZV90IGw7CisKKwlmcHJpbnRmKGZwLCAiLypcbiIpOworCWZvciAoOzspIHsKKwkJbCA9IHN0cmNzcG4ocCwgIlxuIik7CisJCWZwcmludGYoZnAsICIgKiIpOworCQlpZiAobCkgeworCQkJZnByaW50ZihmcCwgIiAiKTsKKwkJCXhmd3JpdGUocCwgbCwgMSwgZnApOworCQkJcCArPSBsOworCQl9CisJCWZwcmludGYoZnAsICJcbiIpOworCQlpZiAoKnArKyA9PSAnXDAnKQorCQkJYnJlYWs7CisJfQorCWZwcmludGYoZnAsICIgKi9cbiIpOworfQorCitzdGF0aWMgc3RydWN0IGNvbmZfcHJpbnRlciBoZWFkZXJfcHJpbnRlcl9jYiA9Cit7CisJLnByaW50X3N5bWJvbCA9IGhlYWRlcl9wcmludF9zeW1ib2wsCisJLnByaW50X2NvbW1lbnQgPSBoZWFkZXJfcHJpbnRfY29tbWVudCwKK307CisKKy8qCisgKiBUcmlzdGF0ZSBwcmludGVyCisgKgorICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBgaW5jbHVkZS9nZW5lcmF0ZWQvdHJpc3RhdGUuY29uZicgZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK3RyaXN0YXRlX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQoreworCisJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFICYmICp2YWx1ZSAhPSAnbicpCisJCWZwcmludGYoZnAsICIlcyVzPSVjXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUsIChjaGFyKXRvdXBwZXIoKnZhbHVlKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uZl9wcmludGVyIHRyaXN0YXRlX3ByaW50ZXJfY2IgPQoreworCS5wcmludF9zeW1ib2wgPSB0cmlzdGF0ZV9wcmludF9zeW1ib2wsCisJLnByaW50X2NvbW1lbnQgPSBrY29uZmlnX3ByaW50X2NvbW1lbnQsCit9OworCitzdGF0aWMgdm9pZCBjb25mX3dyaXRlX3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLAorCQkJICAgICAgc3RydWN0IGNvbmZfcHJpbnRlciAqcHJpbnRlciwgdm9pZCAqcHJpbnRlcl9hcmcpCit7CisJY29uc3QgY2hhciAqc3RyOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfT1RIRVI6CisJY2FzZSBTX1VOS05PV046CisJCWJyZWFrOworCWNhc2UgU19TVFJJTkc6CisJCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisJCXN0ciA9IHN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVlKHN0cik7CisJCXByaW50ZXItPnByaW50X3N5bWJvbChmcCwgc3ltLCBzdHIsIHByaW50ZXJfYXJnKTsKKwkJZnJlZSgodm9pZCAqKXN0cik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisJCXByaW50ZXItPnByaW50X3N5bWJvbChmcCwgc3ltLCBzdHIsIHByaW50ZXJfYXJnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitjb25mX3dyaXRlX2hlYWRpbmcoRklMRSAqZnAsIHN0cnVjdCBjb25mX3ByaW50ZXIgKnByaW50ZXIsIHZvaWQgKnByaW50ZXJfYXJnKQoreworCWNoYXIgYnVmWzI1Nl07CisKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLAorCSAgICAiXG4iCisJICAgICJBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmaWxlOyBETyBOT1QgRURJVC5cbiIKKwkgICAgIiVzXG4iLAorCSAgICByb290bWVudS5wcm9tcHQtPnRleHQpOworCisJcHJpbnRlci0+cHJpbnRfY29tbWVudChmcCwgYnVmLCBwcmludGVyX2FyZyk7Cit9CisKKy8qCisgKiBXcml0ZSBvdXQgYSBtaW5pbWFsIGNvbmZpZy4KKyAqIEFsbCB2YWx1ZXMgdGhhdCBoYXMgZGVmYXVsdCB2YWx1ZXMgYXJlIHNraXBwZWQgYXMgdGhpcyBpcyByZWR1bmRhbnQuCisgKi8KK2ludCBjb25mX3dyaXRlX2RlZmNvbmZpZyhjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IG1lbnUgKm1lbnU7CisJRklMRSAqb3V0OworCisJb3V0ID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7CisJaWYgKCFvdXQpCisJCXJldHVybiAxOworCisJc3ltX2NsZWFyX2FsbF92YWxpZCgpOworCisJLyogVHJhdmVyc2UgYWxsIG1lbnVzIHRvIGZpbmQgYWxsIHJlbGV2YW50IHN5bWJvbHMgKi8KKwltZW51ID0gcm9vdG1lbnUubGlzdDsKKworCXdoaWxlIChtZW51ICE9IE5VTEwpCisJeworCQlzeW0gPSBtZW51LT5zeW07CisJCWlmIChzeW0gPT0gTlVMTCkgeworCQkJaWYgKCFtZW51X2lzX3Zpc2libGUobWVudSkpCisJCQkJZ290byBuZXh0X21lbnU7CisJCX0gZWxzZSBpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkgeworCQkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJCWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpKQorCQkJCWdvdG8gbmV4dF9tZW51OworCQkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1dSSVRFOworCQkJLyogSWYgd2UgY2Fubm90IGNoYW5nZSB0aGUgc3ltYm9sIC0gc2tpcCAqLworCQkJaWYgKCFzeW1faXNfY2hhbmdhYmxlKHN5bSkpCisJCQkJZ290byBuZXh0X21lbnU7CisJCQkvKiBJZiBzeW1ib2wgZXF1YWxzIHRvIGRlZmF1bHQgdmFsdWUgLSBza2lwICovCisJCQlpZiAoc3RyY21wKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSksIHN5bV9nZXRfc3RyaW5nX2RlZmF1bHQoc3ltKSkgPT0gMCkKKwkJCQlnb3RvIG5leHRfbWVudTsKKworCQkJLyoKKwkJCSAqIElmIHN5bWJvbCBpcyBhIGNob2ljZSB2YWx1ZSBhbmQgZXF1YWxzIHRvIHRoZQorCQkJICogZGVmYXVsdCBmb3IgYSBjaG9pY2UgLSBza2lwLgorCQkJICogQnV0IG9ubHkgaWYgdmFsdWUgaXMgYm9vbCBhbmQgZXF1YWwgdG8gInkiIGFuZAorCQkJICogY2hvaWNlIGlzIG5vdCAib3B0aW9uYWwiLgorCQkJICogKElmIGNob2ljZSBpcyAib3B0aW9uYWwiIHRoZW4gYWxsIHZhbHVlcyBjYW4gYmUgIm4iKQorCQkJICovCisJCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7CisJCQkJc3RydWN0IHN5bWJvbCAqY3M7CisJCQkJc3RydWN0IHN5bWJvbCAqZHM7CisKKwkJCQljcyA9IHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSkpOworCQkJCWRzID0gc3ltX2Nob2ljZV9kZWZhdWx0KGNzKTsKKwkJCQlpZiAoIXN5bV9pc19vcHRpb25hbChjcykgJiYgc3ltID09IGRzKSB7CisJCQkJCWlmICgoc3ltLT50eXBlID09IFNfQk9PTEVBTikgJiYKKwkJCQkJICAgIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PSB5ZXMpCisJCQkJCQlnb3RvIG5leHRfbWVudTsKKwkJCQl9CisJCQl9CisJCQljb25mX3dyaXRlX3N5bWJvbChvdXQsIHN5bSwgJmtjb25maWdfcHJpbnRlcl9jYiwgTlVMTCk7CisJCX0KK25leHRfbWVudToKKwkJaWYgKG1lbnUtPmxpc3QgIT0gTlVMTCkgeworCQkJbWVudSA9IG1lbnUtPmxpc3Q7CisJCX0KKwkJZWxzZSBpZiAobWVudS0+bmV4dCAhPSBOVUxMKSB7CisJCQltZW51ID0gbWVudS0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkpIHsKKwkJCQlpZiAobWVudS0+bmV4dCAhPSBOVUxMKSB7CisJCQkJCW1lbnUgPSBtZW51LT5uZXh0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZmNsb3NlKG91dCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb25mX3dyaXRlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJRklMRSAqb3V0OworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwljb25zdCBjaGFyICpiYXNlbmFtZTsKKwljb25zdCBjaGFyICpzdHI7CisJY2hhciBkaXJuYW1lW1BBVEhfTUFYKzFdLCB0bXBuYW1lW1BBVEhfTUFYKzFdLCBuZXduYW1lW1BBVEhfTUFYKzFdOworCWNoYXIgKmVudjsKKworCWRpcm5hbWVbMF0gPSAwOworCWlmIChuYW1lICYmIG5hbWVbMF0pIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWNoYXIgKnNsYXNoOworCisJCWlmICghc3RhdChuYW1lLCAmc3QpICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCXN0cmNweShkaXJuYW1lLCBuYW1lKTsKKwkJCXN0cmNhdChkaXJuYW1lLCAiLyIpOworCQkJYmFzZW5hbWUgPSBjb25mX2dldF9jb25maWduYW1lKCk7CisJCX0gZWxzZSBpZiAoKHNsYXNoID0gc3RycmNocihuYW1lLCAnLycpKSkgeworCQkJaW50IHNpemUgPSBzbGFzaCAtIG5hbWUgKyAxOworCQkJbWVtY3B5KGRpcm5hbWUsIG5hbWUsIHNpemUpOworCQkJZGlybmFtZVtzaXplXSA9IDA7CisJCQlpZiAoc2xhc2hbMV0pCisJCQkJYmFzZW5hbWUgPSBzbGFzaCArIDE7CisJCQllbHNlCisJCQkJYmFzZW5hbWUgPSBjb25mX2dldF9jb25maWduYW1lKCk7CisJCX0gZWxzZQorCQkJYmFzZW5hbWUgPSBuYW1lOworCX0gZWxzZQorCQliYXNlbmFtZSA9IGNvbmZfZ2V0X2NvbmZpZ25hbWUoKTsKKworCXNwcmludGYobmV3bmFtZSwgIiVzJXMiLCBkaXJuYW1lLCBiYXNlbmFtZSk7CisJZW52ID0gZ2V0ZW52KCJLQ09ORklHX09WRVJXUklURUNPTkZJRyIpOworCWlmICghZW52IHx8ICEqZW52KSB7CisJCXNwcmludGYodG1wbmFtZSwgIiVzLnRtcGNvbmZpZy4lZCIsIGRpcm5hbWUsIChpbnQpZ2V0cGlkKCkpOworCQlvdXQgPSBmb3Blbih0bXBuYW1lLCAidyIpOworCX0gZWxzZSB7CisJCSp0bXBuYW1lID0gMDsKKwkJb3V0ID0gZm9wZW4obmV3bmFtZSwgInciKTsKKwl9CisJaWYgKCFvdXQpCisJCXJldHVybiAxOworCisJY29uZl93cml0ZV9oZWFkaW5nKG91dCwgJmtjb25maWdfcHJpbnRlcl9jYiwgTlVMTCk7CisKKwlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkKKwkJc3ltX2NsZWFyX2FsbF92YWxpZCgpOworCisJbWVudSA9IHJvb3RtZW51Lmxpc3Q7CisJd2hpbGUgKG1lbnUpIHsKKwkJc3ltID0gbWVudS0+c3ltOworCQlpZiAoIXN5bSkgeworCQkJaWYgKCFtZW51X2lzX3Zpc2libGUobWVudSkpCisJCQkJZ290byBuZXh0OworCQkJc3RyID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOworCQkJZnByaW50ZihvdXQsICJcbiIKKwkJCQkgICAgICIjXG4iCisJCQkJICAgICAiIyAlc1xuIgorCQkJCSAgICAgIiNcbiIsIHN0cik7CisJCX0gZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0NIT0lDRSkpIHsKKwkJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJCQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkKKwkJCQlnb3RvIG5leHQ7CisJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7CisKKwkJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsKKwkJfQorCituZXh0OgorCQlpZiAobWVudS0+bGlzdCkgeworCQkJbWVudSA9IG1lbnUtPmxpc3Q7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobWVudS0+bmV4dCkKKwkJCW1lbnUgPSBtZW51LT5uZXh0OworCQllbHNlIHdoaWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkpIHsKKwkJCWlmIChtZW51LT5uZXh0KSB7CisJCQkJbWVudSA9IG1lbnUtPm5leHQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJZmNsb3NlKG91dCk7CisKKwlpZiAoKnRtcG5hbWUpIHsKKwkJc3RyY2F0KGRpcm5hbWUsIGJhc2VuYW1lKTsKKwkJc3RyY2F0KGRpcm5hbWUsICIub2xkIik7CisJCXJlbmFtZShuZXduYW1lLCBkaXJuYW1lKTsKKwkJaWYgKHJlbmFtZSh0bXBuYW1lLCBuZXduYW1lKSkKKwkJCXJldHVybiAxOworCX0KKworCWNvbmZfbWVzc2FnZShfKCJjb25maWd1cmF0aW9uIHdyaXR0ZW4gdG8gJXMiKSwgbmV3bmFtZSk7CisKKwlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbmZfc3BsaXRfY29uZmlnKHZvaWQpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwljaGFyIHBhdGhbUEFUSF9NQVgrMV07CisJY2hhciAqcywgKmQsIGM7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBzdGF0IHNiOworCWludCByZXMsIGksIGZkOworCisJbmFtZSA9IGNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSgpOworCWNvbmZfcmVhZF9zaW1wbGUobmFtZSwgU19ERUZfQVVUTyk7CisKKwlpZiAoY2hkaXIoImluY2x1ZGUvZ2VuZXJhdGVkIikpCisJCXJldHVybiAxOworCisJcmVzID0gMDsKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJCWlmICgoc3ltLT5mbGFncyAmIFNZTUJPTF9BVVRPKSB8fCAhc3ltLT5uYW1lKQorCQkJY29udGludWU7CisJCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSB7CisJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9ERUZfQVVUTykgeworCQkJCS8qCisJCQkJICogc3ltYm9sIGhhcyBvbGQgYW5kIG5ldyB2YWx1ZSwKKwkJCQkgKiBzbyBjb21wYXJlIHRoZW0uLi4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJCWNhc2UgU19CT09MRUFOOgorCQkJCWNhc2UgU19UUklTVEFURToKKwkJCQkJaWYgKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PQorCQkJCQkgICAgc3ltLT5kZWZbU19ERUZfQVVUT10udHJpKQorCQkJCQkJY29udGludWU7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU19TVFJJTkc6CisJCQkJY2FzZSBTX0hFWDoKKwkJCQljYXNlIFNfSU5UOgorCQkJCQlpZiAoIXN0cmNtcChzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pLAorCQkJCQkJICAgIHN5bS0+ZGVmW1NfREVGX0FVVE9dLnZhbCkpCisJCQkJCQljb250aW51ZTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoZXJlIGlzIG5vIG9sZCB2YWx1ZSwgb25seSAnbm8nICh1bnNldCkKKwkJCQkgKiBpcyBhbGxvd2VkIGFzIG5ldyB2YWx1ZS4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJCWNhc2UgU19CT09MRUFOOgorCQkJCWNhc2UgU19UUklTVEFURToKKwkJCQkJaWYgKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PSBubykKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0RFRl9BVVRPKSkKKwkJCS8qIFRoZXJlIGlzIG5laXRoZXIgYW4gb2xkIG5vciBhIG5ldyB2YWx1ZS4gKi8KKwkJCWNvbnRpbnVlOworCQkvKiBlbHNlCisJCSAqCVRoZXJlIGlzIGFuIG9sZCB2YWx1ZSwgYnV0IG5vIG5ldyB2YWx1ZSAoJ25vJyAodW5zZXQpCisJCSAqCWlzbid0IHNhdmVkIGluIGF1dG8uY29uZiwgc28gdGhlIG9sZCB2YWx1ZSBpcyBhbHdheXMKKwkJICoJZGlmZmVyZW50IGZyb20gJ25vJykuCisJCSAqLworCisJCS8qIFJlcGxhY2UgYWxsICdfJyBhbmQgYXBwZW5kICIuaCIgKi8KKwkJcyA9IHN5bS0+bmFtZTsKKwkJZCA9IHBhdGg7CisJCXdoaWxlICgoYyA9ICpzKyspKSB7CisJCQljID0gdG9sb3dlcihjKTsKKwkJCSpkKysgPSAoYyA9PSAnXycpID8gJy8nIDogYzsKKwkJfQorCQlzdHJjcHkoZCwgIi5oIik7CisKKwkJLyogQXNzdW1lIGRpcmVjdG9yeSBwYXRoIGFscmVhZHkgZXhpc3RzLiAqLworCQlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7CisJCWlmIChmZCA9PSAtMSkgeworCQkJaWYgKGVycm5vICE9IEVOT0VOVCkgeworCQkJCXJlcyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKgorCQkJICogQ3JlYXRlIGRpcmVjdG9yeSBjb21wb25lbnRzLAorCQkJICogdW5sZXNzIHRoZXkgZXhpc3QgYWxyZWFkeS4KKwkJCSAqLworCQkJZCA9IHBhdGg7CisJCQl3aGlsZSAoKGQgPSBzdHJjaHIoZCwgJy8nKSkpIHsKKwkJCQkqZCA9IDA7CisJCQkJaWYgKHN0YXQocGF0aCwgJnNiKSAmJiBta2RpcihwYXRoLCAwNzU1KSkgeworCQkJCQlyZXMgPSAxOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJKmQrKyA9ICcvJzsKKwkJCX0KKwkJCS8qIFRyeSBpdCBhZ2Fpbi4gKi8KKwkJCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjQ0KTsKKwkJCWlmIChmZCA9PSAtMSkgeworCQkJCXJlcyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJY2xvc2UoZmQpOworCX0KK291dDoKKwlpZiAoY2hkaXIoIi4uLy4uIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIHJlczsKK30KKworaW50IGNvbmZfd3JpdGVfYXV0b2NvbmYodm9pZCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJY29uc3QgY2hhciAqbmFtZTsKKwlGSUxFICpvdXQsICp0cmlzdGF0ZSwgKm91dF9oLCAqb3V0X2M7CisJaW50IGk7CisKKwlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwlmaWxlX3dyaXRlX2RlcCgiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0by5jb25mLmNtZCIpOworCisJaWYgKGNvbmZfc3BsaXRfY29uZmlnKCkpCisJCXJldHVybiAxOworCisJb3V0ID0gZm9wZW4oIi50bXBjb25maWciLCAidyIpOworCWlmICghb3V0KQorCQlyZXR1cm4gMTsKKworCXRyaXN0YXRlID0gZm9wZW4oIi50bXBjb25maWdfdHJpc3RhdGUiLCAidyIpOworCWlmICghdHJpc3RhdGUpIHsKKwkJZmNsb3NlKG91dCk7CisJCXJldHVybiAxOworCX0KKworCW91dF9oID0gZm9wZW4oIi50bXBjb25maWcuaCIsICJ3Iik7CisJaWYgKCFvdXRfaCkgeworCQlmY2xvc2Uob3V0KTsKKwkJZmNsb3NlKHRyaXN0YXRlKTsKKwkJcmV0dXJuIDE7CisJfQorCisJb3V0X2MgPSBmb3BlbigiLnRtcGNvbmZpZy5jbWFrZSIsICJ3Iik7CisJaWYgKCFvdXRfYykgeworCQlmY2xvc2Uob3V0KTsKKwkJZmNsb3NlKHRyaXN0YXRlKTsKKwkJZmNsb3NlKG91dF9oKTsKKwl9CisKKwljb25mX3dyaXRlX2hlYWRpbmcob3V0LCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsKKworCWNvbmZfd3JpdGVfaGVhZGluZyh0cmlzdGF0ZSwgJnRyaXN0YXRlX3ByaW50ZXJfY2IsIE5VTEwpOworCisJY29uZl93cml0ZV9oZWFkaW5nKG91dF9oLCAmaGVhZGVyX3ByaW50ZXJfY2IsIE5VTEwpOworCisJY29uZl93cml0ZV9oZWFkaW5nKG91dF9jLCAma2NvbmZpZ19wcmludGVyX2NtYWtlX2NiLCBOVUxMKTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkgfHwgIXN5bS0+bmFtZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHdyaXRlIHN5bWJvbCB0byBhdXRvLmNvbmYsIHRyaXN0YXRlIGFuZCBoZWFkZXIgZmlsZXMgKi8KKwkJY29uZl93cml0ZV9zeW1ib2wob3V0LCBzeW0sICZrY29uZmlnX3ByaW50ZXJfY2IsICh2b2lkICopMSk7CisKKwkJY29uZl93cml0ZV9zeW1ib2wodHJpc3RhdGUsIHN5bSwgJnRyaXN0YXRlX3ByaW50ZXJfY2IsICh2b2lkICopMSk7CisKKwkJY29uZl93cml0ZV9zeW1ib2wob3V0X2gsIHN5bSwgJmhlYWRlcl9wcmludGVyX2NiLCBOVUxMKTsKKworCQljb25mX3dyaXRlX3N5bWJvbChvdXRfYywgc3ltLCAma2NvbmZpZ19wcmludGVyX2NtYWtlX2NiLCBOVUxMKTsKKwl9CisJZmNsb3NlKG91dCk7CisJZmNsb3NlKHRyaXN0YXRlKTsKKwlmY2xvc2Uob3V0X2gpOworCWZjbG9zZShvdXRfYyk7CisKKwluYW1lID0gZ2V0ZW52KCJLQ09ORklHX0FVVE9IRUFERVIiKTsKKwlpZiAoIW5hbWUpCisJCW5hbWUgPSAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCI7CisJaWYgKHJlbmFtZSgiLnRtcGNvbmZpZy5oIiwgbmFtZSkpCisJCXJldHVybiAxOworCW5hbWUgPSBnZXRlbnYoIktDT05GSUdfVFJJU1RBVEUiKTsKKwlpZiAoIW5hbWUpCisJCW5hbWUgPSAiaW5jbHVkZS9nZW5lcmF0ZWQvdHJpc3RhdGUuY29uZiI7CisJaWYgKHJlbmFtZSgiLnRtcGNvbmZpZ190cmlzdGF0ZSIsIG5hbWUpKQorCQlyZXR1cm4gMTsKKwluYW1lID0gZ2V0ZW52KCJLQ09ORklHX0NNQUtFIik7CisJaWYgKCFuYW1lKQorCQluYW1lID0gImNvbmZpZy5jbWFrZSI7CisJaWYgKHJlbmFtZSgiLnRtcGNvbmZpZy5jbWFrZSIsIG5hbWUpKQorCQlyZXR1cm4gMTsKKwluYW1lID0gY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKCk7CisJLyoKKwkgKiBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc3RlcCwga2J1aWxkIGhhcyBhIGRlcGVuZGVuY3kgb24gYXV0by5jb25mCisJICogYW5kIHRoaXMgbWFya3MgdGhlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUgcHJldmlvdXMgc3RlcHMuCisJICovCisJaWYgKHJlbmFtZSgiLnRtcGNvbmZpZyIsIG5hbWUpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN5bV9jaGFuZ2VfY291bnQ7CitzdGF0aWMgdm9pZCAoKmNvbmZfY2hhbmdlZF9jYWxsYmFjaykodm9pZCk7CisKK3ZvaWQgc3ltX3NldF9jaGFuZ2VfY291bnQoaW50IGNvdW50KQoreworCWludCBfc3ltX2NoYW5nZV9jb3VudCA9IHN5bV9jaGFuZ2VfY291bnQ7CisJc3ltX2NoYW5nZV9jb3VudCA9IGNvdW50OworCWlmIChjb25mX2NoYW5nZWRfY2FsbGJhY2sgJiYKKwkgICAgKGJvb2wpX3N5bV9jaGFuZ2VfY291bnQgIT0gKGJvb2wpY291bnQpCisJCWNvbmZfY2hhbmdlZF9jYWxsYmFjaygpOworfQorCit2b2lkIHN5bV9hZGRfY2hhbmdlX2NvdW50KGludCBjb3VudCkKK3sKKwlzeW1fc2V0X2NoYW5nZV9jb3VudChjb3VudCArIHN5bV9jaGFuZ2VfY291bnQpOworfQorCitib29sIGNvbmZfZ2V0X2NoYW5nZWQodm9pZCkKK3sKKwlyZXR1cm4gc3ltX2NoYW5nZV9jb3VudDsKK30KKwordm9pZCBjb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKHZvaWQgKCpmbikodm9pZCkpCit7CisJY29uZl9jaGFuZ2VkX2NhbGxiYWNrID0gZm47Cit9CisKK3N0YXRpYyB2b2lkIHJhbmRvbWl6ZV9jaG9pY2VfdmFsdWVzKHN0cnVjdCBzeW1ib2wgKmNzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgZXhwciAqZTsKKwlpbnQgY250LCBkZWY7CisKKwkvKgorCSAqIElmIGNob2ljZSBpcyBtb2QgdGhlbiB3ZSBtYXkgaGF2ZSBtb3JlIGl0ZW1zIHNlbGVjdGVkCisJICogYW5kIGlmIG5vIHRoZW4gbm8tb25lLgorCSAqIEluIGJvdGggY2FzZXMgc3RvcC4KKwkgKi8KKwlpZiAoY3N5bS0+Y3Vyci50cmkgIT0geWVzKQorCQlyZXR1cm47CisKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjc3ltKTsKKworCS8qIGNvdW50IGVudHJpZXMgaW4gY2hvaWNlIGJsb2NrICovCisJY250ID0gMDsKKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkKKwkJY250Kys7CisKKwkvKgorCSAqIGZpbmQgYSByYW5kb20gdmFsdWUgYW5kIHNldCBpdCB0byB5ZXMsCisJICogc2V0IHRoZSByZXN0IHRvIG5vIHNvIHdlIGhhdmUgb25seSBvbmUgc2V0CisJICovCisJZGVmID0gKHJhbmQoKSAlIGNudCk7CisKKwljbnQgPSAwOworCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCWlmIChkZWYgPT0gY250KyspIHsKKwkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsKKwkJCWNzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwgPSBzeW07CisJCX0KKwkJZWxzZSB7CisJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKKwkJfQorCX0KKwljc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7CisJLyogY2xlYXIgVkFMSUQgdG8gZ2V0IHZhbHVlIGNhbGN1bGF0ZWQgKi8KKwljc3ltLT5mbGFncyAmPSB+KFNZTUJPTF9WQUxJRCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9hbGxfY2hvaWNlX3ZhbHVlcyhzdHJ1Y3Qgc3ltYm9sICpjc3ltKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IGV4cHIgKmU7CisKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjc3ltKTsKKworCS8qCisJICogU2V0IGFsbCBub24tYXNzaW5nZWQgY2hvaWNlIHZhbHVlcyB0byBubworCSAqLworCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCWlmICghc3ltX2hhc192YWx1ZShzeW0pKQorCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gbm87CisJfQorCWNzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFsdWUgY2FsY3VsYXRlZCAqLworCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEKTsKK30KKwordm9pZCBjb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZW51bSBjb25mX2RlZl9tb2RlIG1vZGUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAqY3N5bTsKKwlpbnQgaSwgY250OworCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgeworCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pKQorCQkJY29udGludWU7CisJCXN3aXRjaCAoc3ltX2dldF90eXBlKHN5bSkpIHsKKwkJY2FzZSBTX0JPT0xFQU46CisJCWNhc2UgU19UUklTVEFURToKKwkJCXN3aXRjaCAobW9kZSkgeworCQkJY2FzZSBkZWZfeWVzOgorCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsKKwkJCQlicmVhazsKKwkJCWNhc2UgZGVmX21vZDoKKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBtb2Q7CisJCQkJYnJlYWs7CisJCQljYXNlIGRlZl9ubzoKKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKKwkJCQlicmVhazsKKwkJCWNhc2UgZGVmX3JhbmRvbToKKwkJCQljbnQgPSBzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX1RSSVNUQVRFID8gMyA6IDI7CisJCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gKHRyaXN0YXRlKShyYW5kKCkgJSBjbnQpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBtb2RlID09IGRlZl9yYW5kb20pKQorCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJfQorCisJc3ltX2NsZWFyX2FsbF92YWxpZCgpOworCisJLyoKKwkgKiBXZSBoYXZlIGRpZmZlcmVudCB0eXBlIG9mIGNob2ljZSBibG9ja3MuCisJICogSWYgY3Vyci50cmkgZXF1YWxzIHRvIG1vZCB0aGVuIHdlIGNhbiBzZWxlY3Qgc2V2ZXJhbAorCSAqIGNob2ljZSBzeW1ib2xzIGluIG9uZSBibG9jay4KKwkgKiBJbiB0aGlzIGNhc2Ugd2UgZG8gbm90aGluZy4KKwkgKiBJZiBjdXJyLnRyaSBlcXVhbHMgeWVzIHRoZW4gb25seSBvbmUgc3ltYm9sIGNhbiBiZQorCSAqIHNlbGVjdGVkIGluIGEgY2hvaWNlIGJsb2NrIGFuZCB3ZSBzZXQgaXQgdG8geWVzLAorCSAqIGFuZCB0aGUgcmVzdCB0byBuby4KKwkgKi8KKwlmb3JfYWxsX3N5bWJvbHMoaSwgY3N5bSkgeworCQlpZiAoc3ltX2hhc192YWx1ZShjc3ltKSB8fCAhc3ltX2lzX2Nob2ljZShjc3ltKSkKKwkJCWNvbnRpbnVlOworCisJCXN5bV9jYWxjX3ZhbHVlKGNzeW0pOworCQlpZiAobW9kZSA9PSBkZWZfcmFuZG9tKQorCQkJcmFuZG9taXplX2Nob2ljZV92YWx1ZXMoY3N5bSk7CisJCWVsc2UKKwkJCXNldF9hbGxfY2hvaWNlX3ZhbHVlcyhjc3ltKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2NvbmZpZy9leHByLmMgYi9jYXJsOTE3MGZ3L2NvbmZpZy9leHByLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwY2U0MQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY29uZmlnL2V4cHIuYwpAQCAtMCwwICsxLDExNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxrYy5oIgorCisjZGVmaW5lIERFQlVHX0VYUFIJMAorCitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19zeW1ib2woc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBleHByICplID0gY2FsbG9jKDEsIHNpemVvZigqZSkpOworCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwllLT5sZWZ0LnN5bSA9IHN5bTsKKwlyZXR1cm4gZTsKK30KKworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2Nfb25lKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICpjZSkKK3sKKwlzdHJ1Y3QgZXhwciAqZSA9IGNhbGxvYygxLCBzaXplb2YoKmUpKTsKKwllLT50eXBlID0gdHlwZTsKKwllLT5sZWZ0LmV4cHIgPSBjZTsKKwlyZXR1cm4gZTsKK30KKworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCXN0cnVjdCBleHByICplID0gY2FsbG9jKDEsIHNpemVvZigqZSkpOworCWUtPnR5cGUgPSB0eXBlOworCWUtPmxlZnQuZXhwciA9IGUxOworCWUtPnJpZ2h0LmV4cHIgPSBlMjsKKwlyZXR1cm4gZTsKK30KKworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfY29tcChlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzMSwgc3RydWN0IHN5bWJvbCAqczIpCit7CisJc3RydWN0IGV4cHIgKmUgPSBjYWxsb2MoMSwgc2l6ZW9mKCplKSk7CisJZS0+dHlwZSA9IHR5cGU7CisJZS0+bGVmdC5zeW0gPSBzMTsKKwllLT5yaWdodC5zeW0gPSBzMjsKKwlyZXR1cm4gZTsKK30KKworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfYW5kKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCWlmICghZTEpCisJCXJldHVybiBlMjsKKwlyZXR1cm4gZTIgPyBleHByX2FsbG9jX3R3byhFX0FORCwgZTEsIGUyKSA6IGUxOworfQorCitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vcihzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikKK3sKKwlpZiAoIWUxKQorCQlyZXR1cm4gZTI7CisJcmV0dXJuIGUyID8gZXhwcl9hbGxvY190d28oRV9PUiwgZTEsIGUyKSA6IGUxOworfQorCitzdHJ1Y3QgZXhwciAqZXhwcl9jb3B5KGNvbnN0IHN0cnVjdCBleHByICpvcmcpCit7CisJc3RydWN0IGV4cHIgKmU7CisKKwlpZiAoIW9yZykKKwkJcmV0dXJuIE5VTEw7CisKKwllID0gbWFsbG9jKHNpemVvZigqb3JnKSk7CisJbWVtY3B5KGUsIG9yZywgc2l6ZW9mKCpvcmcpKTsKKwlzd2l0Y2ggKG9yZy0+dHlwZSkgeworCWNhc2UgRV9TWU1CT0w6CisJCWUtPmxlZnQgPSBvcmctPmxlZnQ7CisJCWJyZWFrOworCWNhc2UgRV9OT1Q6CisJCWUtPmxlZnQuZXhwciA9IGV4cHJfY29weShvcmctPmxlZnQuZXhwcik7CisJCWJyZWFrOworCWNhc2UgRV9FUVVBTDoKKwljYXNlIEVfVU5FUVVBTDoKKwkJZS0+bGVmdC5zeW0gPSBvcmctPmxlZnQuc3ltOworCQllLT5yaWdodC5zeW0gPSBvcmctPnJpZ2h0LnN5bTsKKwkJYnJlYWs7CisJY2FzZSBFX0FORDoKKwljYXNlIEVfT1I6CisJY2FzZSBFX0xJU1Q6CisJCWUtPmxlZnQuZXhwciA9IGV4cHJfY29weShvcmctPmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSBleHByX2NvcHkob3JnLT5yaWdodC5leHByKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJjYW4ndCBjb3B5IHR5cGUgJWRcbiIsIGUtPnR5cGUpOworCQlmcmVlKGUpOworCQllID0gTlVMTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGU7Cit9CisKK3ZvaWQgZXhwcl9mcmVlKHN0cnVjdCBleHByICplKQoreworCWlmICghZSkKKwkJcmV0dXJuOworCisJc3dpdGNoIChlLT50eXBlKSB7CisJY2FzZSBFX1NZTUJPTDoKKwkJYnJlYWs7CisJY2FzZSBFX05PVDoKKwkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7CisJCXJldHVybjsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX1VORVFVQUw6CisJCWJyZWFrOworCWNhc2UgRV9PUjoKKwljYXNlIEVfQU5EOgorCQlleHByX2ZyZWUoZS0+bGVmdC5leHByKTsKKwkJZXhwcl9mcmVlKGUtPnJpZ2h0LmV4cHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoImhvdyB0byBmcmVlIHR5cGUgJWQ/XG4iLCBlLT50eXBlKTsKKwkJYnJlYWs7CisJfQorCWZyZWUoZSk7Cit9CisKK3N0YXRpYyBpbnQgdHJhbnNfY291bnQ7CisKKyNkZWZpbmUgZTEgKCplcDEpCisjZGVmaW5lIGUyICgqZXAyKQorCitzdGF0aWMgdm9pZCBfX2V4cHJfZWxpbWluYXRlX2VxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKK3sKKwlpZiAoZTEtPnR5cGUgPT0gdHlwZSkgeworCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMS0+bGVmdC5leHByLCAmZTIpOworCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMS0+cmlnaHQuZXhwciwgJmUyKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZTItPnR5cGUgPT0gdHlwZSkgeworCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMSwgJmUyLT5sZWZ0LmV4cHIpOworCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMSwgJmUyLT5yaWdodC5leHByKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYKKwkgICAgZTEtPmxlZnQuc3ltID09IGUyLT5sZWZ0LnN5bSAmJgorCSAgICAoZTEtPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzIHx8IGUxLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSkKKwkJcmV0dXJuOworCWlmICghZXhwcl9lcShlMSwgZTIpKQorCQlyZXR1cm47CisJdHJhbnNfY291bnQrKzsKKwlleHByX2ZyZWUoZTEpOyBleHByX2ZyZWUoZTIpOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRV9PUjoKKwkJZTEgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJZTIgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJYnJlYWs7CisJY2FzZSBFX0FORDoKKwkJZTEgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7CisJCWUyID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorfQorCit2b2lkIGV4cHJfZWxpbWluYXRlX2VxKHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKK3sKKwlpZiAoIWUxIHx8ICFlMikKKwkJcmV0dXJuOworCXN3aXRjaCAoZTEtPnR5cGUpIHsKKwljYXNlIEVfT1I6CisJY2FzZSBFX0FORDoKKwkJX19leHByX2VsaW1pbmF0ZV9lcShlMS0+dHlwZSwgZXAxLCBlcDIpOworCWRlZmF1bHQ6CisJCTsKKwl9CisJaWYgKGUxLT50eXBlICE9IGUyLT50eXBlKSBzd2l0Y2ggKGUyLT50eXBlKSB7CisJY2FzZSBFX09SOgorCWNhc2UgRV9BTkQ6CisJCV9fZXhwcl9lbGltaW5hdGVfZXEoZTItPnR5cGUsIGVwMSwgZXAyKTsKKwlkZWZhdWx0OgorCQk7CisJfQorCWUxID0gZXhwcl9lbGltaW5hdGVfeW4oZTEpOworCWUyID0gZXhwcl9lbGltaW5hdGVfeW4oZTIpOworfQorCisjdW5kZWYgZTEKKyN1bmRlZiBlMgorCitpbnQgZXhwcl9lcShzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikKK3sKKwlpbnQgcmVzLCBvbGRfY291bnQ7CisKKwlpZiAoZTEtPnR5cGUgIT0gZTItPnR5cGUpCisJCXJldHVybiAwOworCXN3aXRjaCAoZTEtPnR5cGUpIHsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX1VORVFVQUw6CisJCXJldHVybiBlMS0+bGVmdC5zeW0gPT0gZTItPmxlZnQuc3ltICYmIGUxLT5yaWdodC5zeW0gPT0gZTItPnJpZ2h0LnN5bTsKKwljYXNlIEVfU1lNQk9MOgorCQlyZXR1cm4gZTEtPmxlZnQuc3ltID09IGUyLT5sZWZ0LnN5bTsKKwljYXNlIEVfTk9UOgorCQlyZXR1cm4gZXhwcl9lcShlMS0+bGVmdC5leHByLCBlMi0+bGVmdC5leHByKTsKKwljYXNlIEVfQU5EOgorCWNhc2UgRV9PUjoKKwkJZTEgPSBleHByX2NvcHkoZTEpOworCQllMiA9IGV4cHJfY29weShlMik7CisJCW9sZF9jb3VudCA9IHRyYW5zX2NvdW50OworCQlleHByX2VsaW1pbmF0ZV9lcSgmZTEsICZlMik7CisJCXJlcyA9IChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJgorCQkgICAgICAgZTEtPmxlZnQuc3ltID09IGUyLT5sZWZ0LnN5bSk7CisJCWV4cHJfZnJlZShlMSk7CisJCWV4cHJfZnJlZShlMik7CisJCXRyYW5zX2NvdW50ID0gb2xkX2NvdW50OworCQlyZXR1cm4gcmVzOworCWNhc2UgRV9MSVNUOgorCWNhc2UgRV9SQU5HRToKKwljYXNlIEVfTk9ORToKKwkJLyogcGFuaWMgKi87CisJfQorCisJaWYgKERFQlVHX0VYUFIpIHsKKwkJZXhwcl9mcHJpbnQoZTEsIHN0ZG91dCk7CisJCXByaW50ZigiID0gIik7CisJCWV4cHJfZnByaW50KGUyLCBzdGRvdXQpOworCQlwcmludGYoIiA/XG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX3luKHN0cnVjdCBleHByICplKQoreworCXN0cnVjdCBleHByICp0bXA7CisKKwlpZiAoZSkgc3dpdGNoIChlLT50eXBlKSB7CisJY2FzZSBFX0FORDoKKwkJZS0+bGVmdC5leHByID0gZXhwcl9lbGltaW5hdGVfeW4oZS0+bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfZWxpbWluYXRlX3luKGUtPnJpZ2h0LmV4cHIpOworCQlpZiAoZS0+bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9MKSB7CisJCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7CisJCQkJZXhwcl9mcmVlKGUtPnJpZ2h0LmV4cHIpOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87CisJCQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7CisJCQkJcmV0dXJuIGU7CisJCQl9IGVsc2UgaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKKwkJCQlmcmVlKGUtPmxlZnQuZXhwcik7CisJCQkJdG1wID0gZS0+cmlnaHQuZXhwcjsKKwkJCQkqZSA9ICooZS0+cmlnaHQuZXhwcik7CisJCQkJZnJlZSh0bXApOworCQkJCXJldHVybiBlOworCQkJfQorCQl9CisJCWlmIChlLT5yaWdodC5leHByLT50eXBlID09IEVfU1lNQk9MKSB7CisJCQlpZiAoZS0+cmlnaHQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykgeworCQkJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJCWV4cHJfZnJlZShlLT5yaWdodC5leHByKTsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX25vOworCQkJCWUtPnJpZ2h0LmV4cHIgPSBOVUxMOworCQkJCXJldHVybiBlOworCQkJfSBlbHNlIGlmIChlLT5yaWdodC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJCWZyZWUoZS0+cmlnaHQuZXhwcik7CisJCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJCSplID0gKihlLT5sZWZ0LmV4cHIpOworCQkJCWZyZWUodG1wKTsKKwkJCQlyZXR1cm4gZTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIEVfT1I6CisJCWUtPmxlZnQuZXhwciA9IGV4cHJfZWxpbWluYXRlX3luKGUtPmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSBleHByX2VsaW1pbmF0ZV95bihlLT5yaWdodC5leHByKTsKKwkJaWYgKGUtPmxlZnQuZXhwci0+dHlwZSA9PSBFX1NZTUJPTCkgeworCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykgeworCQkJCWZyZWUoZS0+bGVmdC5leHByKTsKKwkJCQl0bXAgPSBlLT5yaWdodC5leHByOworCQkJCSplID0gKihlLT5yaWdodC5leHByKTsKKwkJCQlmcmVlKHRtcCk7CisJCQkJcmV0dXJuIGU7CisJCQl9IGVsc2UgaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKKwkJCQlleHByX2ZyZWUoZS0+bGVmdC5leHByKTsKKwkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7CisJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7CisJCQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7CisJCQkJcmV0dXJuIGU7CisJCQl9CisJCX0KKwkJaWYgKGUtPnJpZ2h0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wpIHsKKwkJCWlmIChlLT5yaWdodC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQkJZnJlZShlLT5yaWdodC5leHByKTsKKwkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQkJKmUgPSAqKGUtPmxlZnQuZXhwcik7CisJCQkJZnJlZSh0bXApOworCQkJCXJldHVybiBlOworCQkJfSBlbHNlIGlmIChlLT5yaWdodC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJCWV4cHJfZnJlZShlLT5yaWdodC5leHByKTsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX3llczsKKwkJCQllLT5yaWdodC5leHByID0gTlVMTDsKKwkJCQlyZXR1cm4gZTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorCXJldHVybiBlOworfQorCisvKgorICogYm9vbCBGT08hPW4gPT4gRk9PCisgKi8KK3N0cnVjdCBleHByICpleHByX3RyYW5zX2Jvb2woc3RydWN0IGV4cHIgKmUpCit7CisJaWYgKCFlKQorCQlyZXR1cm4gTlVMTDsKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfQU5EOgorCWNhc2UgRV9PUjoKKwljYXNlIEVfTk9UOgorCQllLT5sZWZ0LmV4cHIgPSBleHByX3RyYW5zX2Jvb2woZS0+bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfdHJhbnNfYm9vbChlLT5yaWdodC5leHByKTsKKwkJYnJlYWs7CisJY2FzZSBFX1VORVFVQUw6CisJCS8vIEZPTyE9biAtPiBGT08KKwkJaWYgKGUtPmxlZnQuc3ltLT50eXBlID09IFNfVFJJU1RBVEUpIHsKKwkJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgeworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5yaWdodC5zeW0gPSBOVUxMOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisJcmV0dXJuIGU7Cit9CisKKy8qCisgKiBlMSB8fCBlMiAtPiA/CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZXhwciAqZXhwcl9qb2luX29yKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCXN0cnVjdCBleHByICp0bXA7CisJc3RydWN0IHN5bWJvbCAqc3ltMSwgKnN5bTI7CisKKwlpZiAoZXhwcl9lcShlMSwgZTIpKQorCQlyZXR1cm4gZXhwcl9jb3B5KGUxKTsKKwlpZiAoZTEtPnR5cGUgIT0gRV9FUVVBTCAmJiBlMS0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTEtPnR5cGUgIT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgIT0gRV9OT1QpCisJCXJldHVybiBOVUxMOworCWlmIChlMi0+dHlwZSAhPSBFX0VRVUFMICYmIGUyLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMi0+dHlwZSAhPSBFX05PVCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGUxLT50eXBlID09IEVfTk9UKSB7CisJCXRtcCA9IGUxLT5sZWZ0LmV4cHI7CisJCWlmICh0bXAtPnR5cGUgIT0gRV9FUVVBTCAmJiB0bXAtPnR5cGUgIT0gRV9VTkVRVUFMICYmIHRtcC0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCXJldHVybiBOVUxMOworCQlzeW0xID0gdG1wLT5sZWZ0LnN5bTsKKwl9IGVsc2UKKwkJc3ltMSA9IGUxLT5sZWZ0LnN5bTsKKwlpZiAoZTItPnR5cGUgPT0gRV9OT1QpIHsKKwkJaWYgKGUyLT5sZWZ0LmV4cHItPnR5cGUgIT0gRV9TWU1CT0wpCisJCQlyZXR1cm4gTlVMTDsKKwkJc3ltMiA9IGUyLT5sZWZ0LmV4cHItPmxlZnQuc3ltOworCX0gZWxzZQorCQlzeW0yID0gZTItPmxlZnQuc3ltOworCWlmIChzeW0xICE9IHN5bTIpCisJCXJldHVybiBOVUxMOworCWlmIChzeW0xLT50eXBlICE9IFNfQk9PTEVBTiAmJiBzeW0xLT50eXBlICE9IFNfVFJJU1RBVEUpCisJCXJldHVybiBOVUxMOworCWlmIChzeW0xLT50eXBlID09IFNfVFJJU1RBVEUpIHsKKwkJaWYgKGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJgorCQkgICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8CisJCSAgICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpKSB7CisJCQkvLyAoYT0neScpIHx8IChhPSdtJykgLT4gKGEhPSduJykKKwkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9sX25vKTsKKwkJfQorCQlpZiAoZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmCisJCSAgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fAorCQkgICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpKSB7CisJCQkvLyAoYT0neScpIHx8IChhPSduJykgLT4gKGEhPSdtJykKKwkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9sX21vZCk7CisJCX0KKwkJaWYgKGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJgorCQkgICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgfHwKKwkJICAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpKSkgeworCQkJLy8gKGE9J20nKSB8fCAoYT0nbicpIC0+IChhIT0neScpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgc3ltMSwgJnN5bWJvbF95ZXMpOworCQl9CisJfQorCWlmIChzeW0xLT50eXBlID09IFNfQk9PTEVBTiAmJiBzeW0xID09IHN5bTIpIHsKKwkJaWYgKChlMS0+dHlwZSA9PSBFX05PVCAmJiBlMS0+bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfU1lNQk9MKSB8fAorCQkgICAgKGUyLT50eXBlID09IEVfTk9UICYmIGUyLT5sZWZ0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0gRV9TWU1CT0wpKQorCQkJcmV0dXJuIGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsKKwl9CisKKwlpZiAoREVCVUdfRVhQUikgeworCQlwcmludGYoIm9wdGltaXplICgiKTsKKwkJZXhwcl9mcHJpbnQoZTEsIHN0ZG91dCk7CisJCXByaW50ZigiKSB8fCAoIik7CisJCWV4cHJfZnByaW50KGUyLCBzdGRvdXQpOworCQlwcmludGYoIik/XG4iKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXhwciAqZXhwcl9qb2luX2FuZChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikKK3sKKwlzdHJ1Y3QgZXhwciAqdG1wOworCXN0cnVjdCBzeW1ib2wgKnN5bTEsICpzeW0yOworCisJaWYgKGV4cHJfZXEoZTEsIGUyKSkKKwkJcmV0dXJuIGV4cHJfY29weShlMSk7CisJaWYgKGUxLT50eXBlICE9IEVfRVFVQUwgJiYgZTEtPnR5cGUgIT0gRV9VTkVRVUFMICYmIGUxLT50eXBlICE9IEVfU1lNQk9MICYmIGUxLT50eXBlICE9IEVfTk9UKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoZTItPnR5cGUgIT0gRV9FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTItPnR5cGUgIT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgIT0gRV9OT1QpCisJCXJldHVybiBOVUxMOworCWlmIChlMS0+dHlwZSA9PSBFX05PVCkgeworCQl0bXAgPSBlMS0+bGVmdC5leHByOworCQlpZiAodG1wLT50eXBlICE9IEVfRVFVQUwgJiYgdG1wLT50eXBlICE9IEVfVU5FUVVBTCAmJiB0bXAtPnR5cGUgIT0gRV9TWU1CT0wpCisJCQlyZXR1cm4gTlVMTDsKKwkJc3ltMSA9IHRtcC0+bGVmdC5zeW07CisJfSBlbHNlCisJCXN5bTEgPSBlMS0+bGVmdC5zeW07CisJaWYgKGUyLT50eXBlID09IEVfTk9UKSB7CisJCWlmIChlMi0+bGVmdC5leHByLT50eXBlICE9IEVfU1lNQk9MKQorCQkJcmV0dXJuIE5VTEw7CisJCXN5bTIgPSBlMi0+bGVmdC5leHByLT5sZWZ0LnN5bTsKKwl9IGVsc2UKKwkJc3ltMiA9IGUyLT5sZWZ0LnN5bTsKKwlpZiAoc3ltMSAhPSBzeW0yKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoc3ltMS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltMS0+dHlwZSAhPSBTX1RSSVNUQVRFKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB8fAorCSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkKKwkJLy8gKGEpICYmIChhPSd5JykgLT4gKGE9J3knKQorCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVzKTsKKworCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgfHwKKwkgICAgKGUyLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pKQorCQkvLyAoYSkgJiYgKGEhPSduJykgLT4gKGEpCisJCXJldHVybiBleHByX2FsbG9jX3N5bWJvbChzeW0xKTsKKworCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8CisJICAgIChlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkpCisJCS8vIChhKSAmJiAoYSE9J20nKSAtPiAoYT0neScpCisJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF95ZXMpOworCisJaWYgKHN5bTEtPnR5cGUgPT0gU19UUklTVEFURSkgeworCQlpZiAoZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwpIHsKKwkJCS8vIChhPSdiJykgJiYgKGEhPSdjJykgLT4gJ2InPSdjJyA/ICduJyA6IGE9J2InCisJCQlzeW0yID0gZTEtPnJpZ2h0LnN5bTsKKwkJCWlmICgoZTItPnJpZ2h0LnN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1QpICYmIChzeW0yLT5mbGFncyAmIFNZTUJPTF9DT05TVCkpCisJCQkJcmV0dXJuIHN5bTIgIT0gZTItPnJpZ2h0LnN5bSA/IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCBzeW0yKQorCQkJCQkJCSAgICAgOiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJfQorCQlpZiAoZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVfRVFVQUwpIHsKKwkJCS8vIChhPSdiJykgJiYgKGEhPSdjJykgLT4gJ2InPSdjJyA/ICduJyA6IGE9J2InCisJCQlzeW0yID0gZTItPnJpZ2h0LnN5bTsKKwkJCWlmICgoZTEtPnJpZ2h0LnN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1QpICYmIChzeW0yLT5mbGFncyAmIFNZTUJPTF9DT05TVCkpCisJCQkJcmV0dXJuIHN5bTIgIT0gZTEtPnJpZ2h0LnN5bSA/IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCBzeW0yKQorCQkJCQkJCSAgICAgOiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJfQorCQlpZiAoZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJgorCQkJICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgfHwKKwkJCSAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpKSkKKwkJCS8vIChhIT0neScpICYmIChhIT0nbicpIC0+IChhPSdtJykKKwkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF9tb2QpOworCisJCWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmCisJCQkgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgfHwKKwkJCSAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkpCisJCQkvLyAoYSE9J3knKSAmJiAoYSE9J20nKSAtPiAoYT0nbicpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfbm8pOworCisJCWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmCisJCQkgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fAorCQkJICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkpKQorCQkJLy8gKGEhPSdtJykgJiYgKGEhPSduJykgLT4gKGE9J20nKQorCQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX3llcyk7CisKKwkJaWYgKChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8CisJCSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fAorCQkgICAgKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB8fAorCQkgICAgKGUyLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkKKwkJCXJldHVybiBOVUxMOworCX0KKworCWlmIChERUJVR19FWFBSKSB7CisJCXByaW50Zigib3B0aW1pemUgKCIpOworCQlleHByX2ZwcmludChlMSwgc3Rkb3V0KTsKKwkJcHJpbnRmKCIpICYmICgiKTsKKwkJZXhwcl9mcHJpbnQoZTIsIHN0ZG91dCk7CisJCXByaW50ZigiKT9cbiIpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZXhwcl9lbGltaW5hdGVfZHVwczEoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKQoreworI2RlZmluZSBlMSAoKmVwMSkKKyNkZWZpbmUgZTIgKCplcDIpCisJc3RydWN0IGV4cHIgKnRtcDsKKworCWlmIChlMS0+dHlwZSA9PSB0eXBlKSB7CisJCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMS0+bGVmdC5leHByLCAmZTIpOworCQlleHByX2VsaW1pbmF0ZV9kdXBzMSh0eXBlLCAmZTEtPnJpZ2h0LmV4cHIsICZlMik7CisJCXJldHVybjsKKwl9CisJaWYgKGUyLT50eXBlID09IHR5cGUpIHsKKwkJZXhwcl9lbGltaW5hdGVfZHVwczEodHlwZSwgJmUxLCAmZTItPmxlZnQuZXhwcik7CisJCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMSwgJmUyLT5yaWdodC5leHByKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZTEgPT0gZTIpCisJCXJldHVybjsKKworCXN3aXRjaCAoZTEtPnR5cGUpIHsKKwljYXNlIEVfT1I6IGNhc2UgRV9BTkQ6CisJCWV4cHJfZWxpbWluYXRlX2R1cHMxKGUxLT50eXBlLCAmZTEsICZlMSk7CisJZGVmYXVsdDoKKwkJOworCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRV9PUjoKKwkJdG1wID0gZXhwcl9qb2luX29yKGUxLCBlMik7CisJCWlmICh0bXApIHsKKwkJCWV4cHJfZnJlZShlMSk7IGV4cHJfZnJlZShlMik7CisJCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOworCQkJZTIgPSB0bXA7CisJCQl0cmFuc19jb3VudCsrOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9BTkQ6CisJCXRtcCA9IGV4cHJfam9pbl9hbmQoZTEsIGUyKTsKKwkJaWYgKHRtcCkgeworCQkJZXhwcl9mcmVlKGUxKTsgZXhwcl9mcmVlKGUyKTsKKwkJCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOworCQkJZTIgPSB0bXA7CisJCQl0cmFuc19jb3VudCsrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisjdW5kZWYgZTEKKyN1bmRlZiBlMgorfQorCitzdGF0aWMgdm9pZCBleHByX2VsaW1pbmF0ZV9kdXBzMihlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpCit7CisjZGVmaW5lIGUxICgqZXAxKQorI2RlZmluZSBlMiAoKmVwMikKKwlzdHJ1Y3QgZXhwciAqdG1wLCAqdG1wMSwgKnRtcDI7CisKKwlpZiAoZTEtPnR5cGUgPT0gdHlwZSkgeworCQlleHByX2VsaW1pbmF0ZV9kdXBzMih0eXBlLCAmZTEtPmxlZnQuZXhwciwgJmUyKTsKKwkJZXhwcl9lbGltaW5hdGVfZHVwczIodHlwZSwgJmUxLT5yaWdodC5leHByLCAmZTIpOworCQlyZXR1cm47CisJfQorCWlmIChlMi0+dHlwZSA9PSB0eXBlKSB7CisJCWV4cHJfZWxpbWluYXRlX2R1cHMyKHR5cGUsICZlMSwgJmUyLT5sZWZ0LmV4cHIpOworCQlleHByX2VsaW1pbmF0ZV9kdXBzMih0eXBlLCAmZTEsICZlMi0+cmlnaHQuZXhwcik7CisJfQorCWlmIChlMSA9PSBlMikKKwkJcmV0dXJuOworCisJc3dpdGNoIChlMS0+dHlwZSkgeworCWNhc2UgRV9PUjoKKwkJZXhwcl9lbGltaW5hdGVfZHVwczIoZTEtPnR5cGUsICZlMSwgJmUxKTsKKwkJLy8gKEZPTyB8fCBCQVIpICYmICghRk9PICYmICFCQVIpIC0+IG4KKwkJdG1wMSA9IGV4cHJfdHJhbnNmb3JtKGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBleHByX2NvcHkoZTEpKSk7CisJCXRtcDIgPSBleHByX2NvcHkoZTIpOworCQl0bXAgPSBleHByX2V4dHJhY3RfZXFfYW5kKCZ0bXAxLCAmdG1wMik7CisJCWlmIChleHByX2lzX3llcyh0bXAxKSkgeworCQkJZXhwcl9mcmVlKGUxKTsKKwkJCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7CisJCQl0cmFuc19jb3VudCsrOworCQl9CisJCWV4cHJfZnJlZSh0bXAyKTsKKwkJZXhwcl9mcmVlKHRtcDEpOworCQlleHByX2ZyZWUodG1wKTsKKwkJYnJlYWs7CisJY2FzZSBFX0FORDoKKwkJZXhwcl9lbGltaW5hdGVfZHVwczIoZTEtPnR5cGUsICZlMSwgJmUxKTsKKwkJLy8gKEZPTyAmJiBCQVIpIHx8ICghRk9PIHx8ICFCQVIpIC0+IHkKKwkJdG1wMSA9IGV4cHJfdHJhbnNmb3JtKGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBleHByX2NvcHkoZTEpKSk7CisJCXRtcDIgPSBleHByX2NvcHkoZTIpOworCQl0bXAgPSBleHByX2V4dHJhY3RfZXFfb3IoJnRtcDEsICZ0bXAyKTsKKwkJaWYgKGV4cHJfaXNfbm8odG1wMSkpIHsKKwkJCWV4cHJfZnJlZShlMSk7CisJCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsKKwkJCXRyYW5zX2NvdW50Kys7CisJCX0KKwkJZXhwcl9mcmVlKHRtcDIpOworCQlleHByX2ZyZWUodG1wMSk7CisJCWV4cHJfZnJlZSh0bXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorI3VuZGVmIGUxCisjdW5kZWYgZTIKK30KKworc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX2R1cHMoc3RydWN0IGV4cHIgKmUpCit7CisJaW50IG9sZGNvdW50OworCWlmICghZSkKKwkJcmV0dXJuIGU7CisKKwlvbGRjb3VudCA9IHRyYW5zX2NvdW50OworCXdoaWxlICgxKSB7CisJCXRyYW5zX2NvdW50ID0gMDsKKwkJc3dpdGNoIChlLT50eXBlKSB7CisJCWNhc2UgRV9PUjogY2FzZSBFX0FORDoKKwkJCWV4cHJfZWxpbWluYXRlX2R1cHMxKGUtPnR5cGUsICZlLCAmZSk7CisJCQlleHByX2VsaW1pbmF0ZV9kdXBzMihlLT50eXBlLCAmZSwgJmUpOworCQlkZWZhdWx0OgorCQkJOworCQl9CisJCWlmICghdHJhbnNfY291bnQpCisJCQlicmVhazsKKwkJZSA9IGV4cHJfZWxpbWluYXRlX3luKGUpOworCX0KKwl0cmFuc19jb3VudCA9IG9sZGNvdW50OworCXJldHVybiBlOworfQorCitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc2Zvcm0oc3RydWN0IGV4cHIgKmUpCit7CisJc3RydWN0IGV4cHIgKnRtcDsKKworCWlmICghZSkKKwkJcmV0dXJuIE5VTEw7CisJc3dpdGNoIChlLT50eXBlKSB7CisJY2FzZSBFX0VRVUFMOgorCWNhc2UgRV9VTkVRVUFMOgorCWNhc2UgRV9TWU1CT0w6CisJY2FzZSBFX0xJU1Q6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWUtPmxlZnQuZXhwciA9IGV4cHJfdHJhbnNmb3JtKGUtPmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSBleHByX3RyYW5zZm9ybShlLT5yaWdodC5leHByKTsKKwl9CisKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfRVFVQUw6CisJCWlmIChlLT5sZWZ0LnN5bS0+dHlwZSAhPSBTX0JPT0xFQU4pCisJCQlicmVhazsKKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQllLT50eXBlID0gRV9OT1Q7CisJCQllLT5sZWZ0LmV4cHIgPSBleHByX2FsbG9jX3N5bWJvbChlLT5sZWZ0LnN5bSk7CisJCQllLT5yaWdodC5zeW0gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgeworCQkJcHJpbnRmKCJib29sZWFuIHN5bWJvbCAlcyB0ZXN0ZWQgZm9yICdtJz8gdGVzdCBmb3JjZWQgdG8gJ24nXG4iLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87CisJCQllLT5yaWdodC5zeW0gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9VTkVRVUFMOgorCQlpZiAoZS0+bGVmdC5zeW0tPnR5cGUgIT0gU19CT09MRUFOKQorCQkJYnJlYWs7CisJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgeworCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHsKKwkJCXByaW50ZigiYm9vbGVhbiBzeW1ib2wgJXMgdGVzdGVkIGZvciAnbSc/IHRlc3QgZm9yY2VkIHRvICd5J1xuIiwgZS0+bGVmdC5zeW0tPm5hbWUpOworCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX3llczsKKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJCQllLT50eXBlID0gRV9OT1Q7CisJCQllLT5sZWZ0LmV4cHIgPSBleHByX2FsbG9jX3N5bWJvbChlLT5sZWZ0LnN5bSk7CisJCQllLT5yaWdodC5zeW0gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFX05PVDoKKwkJc3dpdGNoIChlLT5sZWZ0LmV4cHItPnR5cGUpIHsKKwkJY2FzZSBFX05PVDoKKwkJCS8vICEhYSAtPiBhCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHItPmxlZnQuZXhwcjsKKwkJCWZyZWUoZS0+bGVmdC5leHByKTsKKwkJCWZyZWUoZSk7CisJCQllID0gdG1wOworCQkJZSA9IGV4cHJfdHJhbnNmb3JtKGUpOworCQkJYnJlYWs7CisJCWNhc2UgRV9FUVVBTDoKKwkJY2FzZSBFX1VORVFVQUw6CisJCQkvLyAhYT0neCcgLT4gYSE9J3gnCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQlmcmVlKGUpOworCQkJZSA9IHRtcDsKKwkJCWUtPnR5cGUgPSBlLT50eXBlID09IEVfRVFVQUwgPyBFX1VORVFVQUwgOiBFX0VRVUFMOworCQkJYnJlYWs7CisJCWNhc2UgRV9PUjoKKwkJCS8vICEoYSB8fCBiKSAtPiAhYSAmJiAhYgorCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJZS0+dHlwZSA9IEVfQU5EOworCQkJZS0+cmlnaHQuZXhwciA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCB0bXAtPnJpZ2h0LmV4cHIpOworCQkJdG1wLT50eXBlID0gRV9OT1Q7CisJCQl0bXAtPnJpZ2h0LmV4cHIgPSBOVUxMOworCQkJZSA9IGV4cHJfdHJhbnNmb3JtKGUpOworCQkJYnJlYWs7CisJCWNhc2UgRV9BTkQ6CisJCQkvLyAhKGEgJiYgYikgLT4gIWEgfHwgIWIKKwkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCWUtPnR5cGUgPSBFX09SOworCQkJZS0+cmlnaHQuZXhwciA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCB0bXAtPnJpZ2h0LmV4cHIpOworCQkJdG1wLT50eXBlID0gRV9OT1Q7CisJCQl0bXAtPnJpZ2h0LmV4cHIgPSBOVUxMOworCQkJZSA9IGV4cHJfdHJhbnNmb3JtKGUpOworCQkJYnJlYWs7CisJCWNhc2UgRV9TWU1CT0w6CisJCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJCS8vICEneScgLT4gJ24nCisJCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJCWZyZWUoZSk7CisJCQkJZSA9IHRtcDsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX25vOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9tb2QpIHsKKwkJCQkvLyAhJ20nIC0+ICdtJworCQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCQlmcmVlKGUpOworCQkJCWUgPSB0bXA7CisJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF9tb2Q7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQkJLy8gISduJyAtPiAneScKKwkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQkJZnJlZShlKTsKKwkJCQllID0gdG1wOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfeWVzOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKwlyZXR1cm4gZTsKK30KKworaW50IGV4cHJfY29udGFpbnNfc3ltYm9sKHN0cnVjdCBleHByICpkZXAsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlpZiAoIWRlcCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGRlcC0+dHlwZSkgeworCWNhc2UgRV9BTkQ6CisJY2FzZSBFX09SOgorCQlyZXR1cm4gZXhwcl9jb250YWluc19zeW1ib2woZGVwLT5sZWZ0LmV4cHIsIHN5bSkgfHwKKwkJICAgICAgIGV4cHJfY29udGFpbnNfc3ltYm9sKGRlcC0+cmlnaHQuZXhwciwgc3ltKTsKKwljYXNlIEVfU1lNQk9MOgorCQlyZXR1cm4gZGVwLT5sZWZ0LnN5bSA9PSBzeW07CisJY2FzZSBFX0VRVUFMOgorCWNhc2UgRV9VTkVRVUFMOgorCQlyZXR1cm4gZGVwLT5sZWZ0LnN5bSA9PSBzeW0gfHwKKwkJICAgICAgIGRlcC0+cmlnaHQuc3ltID09IHN5bTsKKwljYXNlIEVfTk9UOgorCQlyZXR1cm4gZXhwcl9jb250YWluc19zeW1ib2woZGVwLT5sZWZ0LmV4cHIsIHN5bSk7CisJZGVmYXVsdDoKKwkJOworCX0KKwlyZXR1cm4gMDsKK30KKworYm9vbCBleHByX2RlcGVuZHNfc3ltYm9sKHN0cnVjdCBleHByICpkZXAsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlpZiAoIWRlcCkKKwkJcmV0dXJuIGZhbHNlOworCisJc3dpdGNoIChkZXAtPnR5cGUpIHsKKwljYXNlIEVfQU5EOgorCQlyZXR1cm4gZXhwcl9kZXBlbmRzX3N5bWJvbChkZXAtPmxlZnQuZXhwciwgc3ltKSB8fAorCQkgICAgICAgZXhwcl9kZXBlbmRzX3N5bWJvbChkZXAtPnJpZ2h0LmV4cHIsIHN5bSk7CisJY2FzZSBFX1NZTUJPTDoKKwkJcmV0dXJuIGRlcC0+bGVmdC5zeW0gPT0gc3ltOworCWNhc2UgRV9FUVVBTDoKKwkJaWYgKGRlcC0+bGVmdC5zeW0gPT0gc3ltKSB7CisJCQlpZiAoZGVwLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgfHwgZGVwLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFX1VORVFVQUw6CisJCWlmIChkZXAtPmxlZnQuc3ltID09IHN5bSkgeworCQkJaWYgKGRlcC0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKyAJcmV0dXJuIGZhbHNlOworfQorCitzdHJ1Y3QgZXhwciAqZXhwcl9leHRyYWN0X2VxX2FuZChzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpCit7CisJc3RydWN0IGV4cHIgKnRtcCA9IE5VTEw7CisJZXhwcl9leHRyYWN0X2VxKEVfQU5ELCAmdG1wLCBlcDEsIGVwMik7CisJaWYgKHRtcCkgeworCQkqZXAxID0gZXhwcl9lbGltaW5hdGVfeW4oKmVwMSk7CisJCSplcDIgPSBleHByX2VsaW1pbmF0ZV95bigqZXAyKTsKKwl9CisJcmV0dXJuIHRtcDsKK30KKworc3RydWN0IGV4cHIgKmV4cHJfZXh0cmFjdF9lcV9vcihzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpCit7CisJc3RydWN0IGV4cHIgKnRtcCA9IE5VTEw7CisJZXhwcl9leHRyYWN0X2VxKEVfT1IsICZ0bXAsIGVwMSwgZXAyKTsKKwlpZiAodG1wKSB7CisJCSplcDEgPSBleHByX2VsaW1pbmF0ZV95bigqZXAxKTsKKwkJKmVwMiA9IGV4cHJfZWxpbWluYXRlX3luKCplcDIpOworCX0KKwlyZXR1cm4gdG1wOworfQorCit2b2lkIGV4cHJfZXh0cmFjdF9lcShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqKmVwLCBzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpCit7CisjZGVmaW5lIGUxICgqZXAxKQorI2RlZmluZSBlMiAoKmVwMikKKwlpZiAoZTEtPnR5cGUgPT0gdHlwZSkgeworCQlleHByX2V4dHJhY3RfZXEodHlwZSwgZXAsICZlMS0+bGVmdC5leHByLCAmZTIpOworCQlleHByX2V4dHJhY3RfZXEodHlwZSwgZXAsICZlMS0+cmlnaHQuZXhwciwgJmUyKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZTItPnR5cGUgPT0gdHlwZSkgeworCQlleHByX2V4dHJhY3RfZXEodHlwZSwgZXAsIGVwMSwgJmUyLT5sZWZ0LmV4cHIpOworCQlleHByX2V4dHJhY3RfZXEodHlwZSwgZXAsIGVwMSwgJmUyLT5yaWdodC5leHByKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZXhwcl9lcShlMSwgZTIpKSB7CisJCSplcCA9ICplcCA/IGV4cHJfYWxsb2NfdHdvKHR5cGUsICplcCwgZTEpIDogZTE7CisJCWV4cHJfZnJlZShlMik7CisJCWlmICh0eXBlID09IEVfQU5EKSB7CisJCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsKKwkJCWUyID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gRV9PUikgeworCQkJZTEgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJCWUyID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7CisJCX0KKwl9CisjdW5kZWYgZTEKKyN1bmRlZiBlMgorfQorCitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19jb21wYXJlKHN0cnVjdCBleHByICplLCBlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IGV4cHIgKmUxLCAqZTI7CisKKwlpZiAoIWUpIHsKKwkJZSA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSk7CisJCWlmICh0eXBlID09IEVfVU5FUVVBTCkKKwkJCWUgPSBleHByX2FsbG9jX29uZShFX05PVCwgZSk7CisJCXJldHVybiBlOworCX0KKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfQU5EOgorCQllMSA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5sZWZ0LmV4cHIsIEVfRVFVQUwsIHN5bSk7CisJCWUyID0gZXhwcl90cmFuc19jb21wYXJlKGUtPnJpZ2h0LmV4cHIsIEVfRVFVQUwsIHN5bSk7CisJCWlmIChzeW0gPT0gJnN5bWJvbF95ZXMpCisJCQllID0gZXhwcl9hbGxvY190d28oRV9BTkQsIGUxLCBlMik7CisJCWlmIChzeW0gPT0gJnN5bWJvbF9ubykKKwkJCWUgPSBleHByX2FsbG9jX3R3byhFX09SLCBlMSwgZTIpOworCQlpZiAodHlwZSA9PSBFX1VORVFVQUwpCisJCQllID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGUpOworCQlyZXR1cm4gZTsKKwljYXNlIEVfT1I6CisJCWUxID0gZXhwcl90cmFuc19jb21wYXJlKGUtPmxlZnQuZXhwciwgRV9FUVVBTCwgc3ltKTsKKwkJZTIgPSBleHByX3RyYW5zX2NvbXBhcmUoZS0+cmlnaHQuZXhwciwgRV9FUVVBTCwgc3ltKTsKKwkJaWYgKHN5bSA9PSAmc3ltYm9sX3llcykKKwkJCWUgPSBleHByX2FsbG9jX3R3byhFX09SLCBlMSwgZTIpOworCQlpZiAoc3ltID09ICZzeW1ib2xfbm8pCisJCQllID0gZXhwcl9hbGxvY190d28oRV9BTkQsIGUxLCBlMik7CisJCWlmICh0eXBlID09IEVfVU5FUVVBTCkKKwkJCWUgPSBleHByX2FsbG9jX29uZShFX05PVCwgZSk7CisJCXJldHVybiBlOworCWNhc2UgRV9OT1Q6CisJCXJldHVybiBleHByX3RyYW5zX2NvbXBhcmUoZS0+bGVmdC5leHByLCB0eXBlID09IEVfRVFVQUwgPyBFX1VORVFVQUwgOiBFX0VRVUFMLCBzeW0pOworCWNhc2UgRV9VTkVRVUFMOgorCWNhc2UgRV9FUVVBTDoKKwkJaWYgKHR5cGUgPT0gRV9FUVVBTCkgeworCQkJaWYgKHN5bSA9PSAmc3ltYm9sX3llcykKKwkJCQlyZXR1cm4gZXhwcl9jb3B5KGUpOworCQkJaWYgKHN5bSA9PSAmc3ltYm9sX21vZCkKKwkJCQlyZXR1cm4gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7CisJCQlpZiAoc3ltID09ICZzeW1ib2xfbm8pCisJCQkJcmV0dXJuIGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBleHByX2NvcHkoZSkpOworCQl9IGVsc2UgeworCQkJaWYgKHN5bSA9PSAmc3ltYm9sX3llcykKKwkJCQlyZXR1cm4gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGV4cHJfY29weShlKSk7CisJCQlpZiAoc3ltID09ICZzeW1ib2xfbW9kKQorCQkJCXJldHVybiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7CisJCQlpZiAoc3ltID09ICZzeW1ib2xfbm8pCisJCQkJcmV0dXJuIGV4cHJfY29weShlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVfU1lNQk9MOgorCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKHR5cGUsIGUtPmxlZnQuc3ltLCBzeW0pOworCWNhc2UgRV9MSVNUOgorCWNhc2UgRV9SQU5HRToKKwljYXNlIEVfTk9ORToKKwkJLyogcGFuaWMgKi87CisJfQorCXJldHVybiBOVUxMOworfQorCit0cmlzdGF0ZSBleHByX2NhbGNfdmFsdWUoc3RydWN0IGV4cHIgKmUpCit7CisJdHJpc3RhdGUgdmFsMSwgdmFsMjsKKwljb25zdCBjaGFyICpzdHIxLCAqc3RyMjsKKworCWlmICghZSkKKwkJcmV0dXJuIHllczsKKworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9TWU1CT0w6CisJCXN5bV9jYWxjX3ZhbHVlKGUtPmxlZnQuc3ltKTsKKwkJcmV0dXJuIGUtPmxlZnQuc3ltLT5jdXJyLnRyaTsKKwljYXNlIEVfQU5EOgorCQl2YWwxID0gZXhwcl9jYWxjX3ZhbHVlKGUtPmxlZnQuZXhwcik7CisJCXZhbDIgPSBleHByX2NhbGNfdmFsdWUoZS0+cmlnaHQuZXhwcik7CisJCXJldHVybiBFWFBSX0FORCh2YWwxLCB2YWwyKTsKKwljYXNlIEVfT1I6CisJCXZhbDEgPSBleHByX2NhbGNfdmFsdWUoZS0+bGVmdC5leHByKTsKKwkJdmFsMiA9IGV4cHJfY2FsY192YWx1ZShlLT5yaWdodC5leHByKTsKKwkJcmV0dXJuIEVYUFJfT1IodmFsMSwgdmFsMik7CisJY2FzZSBFX05PVDoKKwkJdmFsMSA9IGV4cHJfY2FsY192YWx1ZShlLT5sZWZ0LmV4cHIpOworCQlyZXR1cm4gRVhQUl9OT1QodmFsMSk7CisJY2FzZSBFX0VRVUFMOgorCQlzeW1fY2FsY192YWx1ZShlLT5sZWZ0LnN5bSk7CisJCXN5bV9jYWxjX3ZhbHVlKGUtPnJpZ2h0LnN5bSk7CisJCXN0cjEgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShlLT5sZWZ0LnN5bSk7CisJCXN0cjIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShlLT5yaWdodC5zeW0pOworCQlyZXR1cm4gIXN0cmNtcChzdHIxLCBzdHIyKSA/IHllcyA6IG5vOworCWNhc2UgRV9VTkVRVUFMOgorCQlzeW1fY2FsY192YWx1ZShlLT5sZWZ0LnN5bSk7CisJCXN5bV9jYWxjX3ZhbHVlKGUtPnJpZ2h0LnN5bSk7CisJCXN0cjEgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShlLT5sZWZ0LnN5bSk7CisJCXN0cjIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShlLT5yaWdodC5zeW0pOworCQlyZXR1cm4gIXN0cmNtcChzdHIxLCBzdHIyKSA/IG5vIDogeWVzOworCWRlZmF1bHQ6CisJCXByaW50ZigiZXhwcl9jYWxjX3ZhbHVlOiAlZD9cbiIsIGUtPnR5cGUpOworCQlyZXR1cm4gbm87CisJfQorfQorCitpbnQgZXhwcl9jb21wYXJlX3R5cGUoZW51bSBleHByX3R5cGUgdDEsIGVudW0gZXhwcl90eXBlIHQyKQoreworI2lmIDAKKwlyZXR1cm4gMTsKKyNlbHNlCisJaWYgKHQxID09IHQyKQorCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKHQxKSB7CisJY2FzZSBFX0VRVUFMOgorCWNhc2UgRV9VTkVRVUFMOgorCQlpZiAodDIgPT0gRV9OT1QpCisJCQlyZXR1cm4gMTsKKwljYXNlIEVfTk9UOgorCQlpZiAodDIgPT0gRV9BTkQpCisJCQlyZXR1cm4gMTsKKwljYXNlIEVfQU5EOgorCQlpZiAodDIgPT0gRV9PUikKKwkJCXJldHVybiAxOworCWNhc2UgRV9PUjoKKwkJaWYgKHQyID09IEVfTElTVCkKKwkJCXJldHVybiAxOworCWNhc2UgRV9MSVNUOgorCQlpZiAodDIgPT0gMCkKKwkJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJcHJpbnRmKCJbJWRndCVkP10iLCB0MSwgdDIpOworCXJldHVybiAwOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHIgKgorZXhwcl9nZXRfbGVmdG1vc3Rfc3ltYm9sKGNvbnN0IHN0cnVjdCBleHByICplKQoreworCisJaWYgKGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSAoZS0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJZSA9IGUtPmxlZnQuZXhwcjsKKworCXJldHVybiBleHByX2NvcHkoZSk7Cit9CisKKy8qCisgKiBHaXZlbiBleHByZXNzaW9uIGBlMScgYW5kIGBlMicsIHJldHVybnMgdGhlIGxlYWYgb2YgdGhlIGxvbmdlc3QKKyAqIHN1Yi1leHByZXNzaW9uIG9mIGBlMScgbm90IGNvbnRhaW5pbmcgJ2UyLgorICovCitzdHJ1Y3QgZXhwciAqZXhwcl9zaW1wbGlmeV91bm1ldF9kZXAoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpCit7CisJc3RydWN0IGV4cHIgKnJldDsKKworCXN3aXRjaCAoZTEtPnR5cGUpIHsKKwljYXNlIEVfT1I6CisJCXJldHVybiBleHByX2FsbG9jX2FuZCgKKwkJICAgIGV4cHJfc2ltcGxpZnlfdW5tZXRfZGVwKGUxLT5sZWZ0LmV4cHIsIGUyKSwKKwkJICAgIGV4cHJfc2ltcGxpZnlfdW5tZXRfZGVwKGUxLT5yaWdodC5leHByLCBlMikpOworCWNhc2UgRV9BTkQ6IHsKKwkJc3RydWN0IGV4cHIgKmU7CisJCWUgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkoZTEpLCBleHByX2NvcHkoZTIpKTsKKwkJZSA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZSk7CisJCXJldCA9ICghZXhwcl9lcShlLCBlMSkpID8gZTEgOiBOVUxMOworCQlleHByX2ZyZWUoZSk7CisJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJcmV0ID0gZTE7CisJCWJyZWFrOworCX0KKworCXJldHVybiBleHByX2dldF9sZWZ0bW9zdF9zeW1ib2wocmV0KTsKK30KKwordm9pZCBleHByX3ByaW50KHN0cnVjdCBleHByICplLCB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFyICopLCB2b2lkICpkYXRhLCBpbnQgcHJldnRva2VuKQoreworCWlmICghZSkgeworCQlmbihkYXRhLCBOVUxMLCAieSIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGV4cHJfY29tcGFyZV90eXBlKHByZXZ0b2tlbiwgZS0+dHlwZSkgPiAwKQorCQlmbihkYXRhLCBOVUxMLCAiKCIpOworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9TWU1CT0w6CisJCWlmIChlLT5sZWZ0LnN5bS0+bmFtZSkKKwkJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCWVsc2UKKwkJCWZuKGRhdGEsIE5VTEwsICI8Y2hvaWNlPiIpOworCQlicmVhazsKKwljYXNlIEVfTk9UOgorCQlmbihkYXRhLCBOVUxMLCAiISIpOworCQlleHByX3ByaW50KGUtPmxlZnQuZXhwciwgZm4sIGRhdGEsIEVfTk9UKTsKKwkJYnJlYWs7CisJY2FzZSBFX0VRVUFMOgorCQlpZiAoZS0+bGVmdC5zeW0tPm5hbWUpCisJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUpOworCQllbHNlCisJCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKKwkJZm4oZGF0YSwgTlVMTCwgIj0iKTsKKwkJZm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0tPm5hbWUpOworCQlicmVhazsKKwljYXNlIEVfVU5FUVVBTDoKKwkJaWYgKGUtPmxlZnQuc3ltLT5uYW1lKQorCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJZWxzZQorCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+Iik7CisJCWZuKGRhdGEsIE5VTEwsICIhPSIpOworCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgRV9PUjoKKwkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX09SKTsKKwkJZm4oZGF0YSwgTlVMTCwgIiB8fCAiKTsKKwkJZXhwcl9wcmludChlLT5yaWdodC5leHByLCBmbiwgZGF0YSwgRV9PUik7CisJCWJyZWFrOworCWNhc2UgRV9BTkQ6CisJCWV4cHJfcHJpbnQoZS0+bGVmdC5leHByLCBmbiwgZGF0YSwgRV9BTkQpOworCQlmbihkYXRhLCBOVUxMLCAiICYmICIpOworCQlleHByX3ByaW50KGUtPnJpZ2h0LmV4cHIsIGZuLCBkYXRhLCBFX0FORCk7CisJCWJyZWFrOworCWNhc2UgRV9MSVNUOgorCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7CisJCWlmIChlLT5sZWZ0LmV4cHIpIHsKKwkJCWZuKGRhdGEsIE5VTEwsICIgXiAiKTsKKwkJCWV4cHJfcHJpbnQoZS0+bGVmdC5leHByLCBmbiwgZGF0YSwgRV9MSVNUKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVfUkFOR0U6CisJCWZuKGRhdGEsIE5VTEwsICJbIik7CisJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCWZuKGRhdGEsIE5VTEwsICIgIik7CisJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsKKwkJZm4oZGF0YSwgTlVMTCwgIl0iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkgIHsKKwkJY2hhciBidWZbMzJdOworCQlzcHJpbnRmKGJ1ZiwgIjx1bmtub3duIHR5cGUgJWQ+IiwgZS0+dHlwZSk7CisJCWZuKGRhdGEsIE5VTEwsIGJ1Zik7CisJCWJyZWFrOworCSAgfQorCX0KKwlpZiAoZXhwcl9jb21wYXJlX3R5cGUocHJldnRva2VuLCBlLT50eXBlKSA+IDApCisJCWZuKGRhdGEsIE5VTEwsICIpIik7Cit9CisKK3N0YXRpYyB2b2lkIGV4cHJfcHJpbnRfZmlsZV9oZWxwZXIodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpCit7CisJeGZ3cml0ZShzdHIsIHN0cmxlbihzdHIpLCAxLCBkYXRhKTsKK30KKwordm9pZCBleHByX2ZwcmludChzdHJ1Y3QgZXhwciAqZSwgRklMRSAqb3V0KQoreworCWV4cHJfcHJpbnQoZSwgZXhwcl9wcmludF9maWxlX2hlbHBlciwgb3V0LCBFX05PTkUpOworfQorCitzdGF0aWMgdm9pZCBleHByX3ByaW50X2dzdHJfaGVscGVyKHZvaWQgKmRhdGEsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqc3RyKQoreworCXN0cnVjdCBnc3RyICpncyA9IChzdHJ1Y3QgZ3N0ciopZGF0YTsKKwljb25zdCBjaGFyICpzeW1fc3RyID0gTlVMTDsKKworCWlmIChzeW0pCisJCXN5bV9zdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCisJaWYgKGdzLT5tYXhfd2lkdGgpIHsKKwkJdW5zaWduZWQgZXh0cmFfbGVuZ3RoID0gc3RybGVuKHN0cik7CisJCWNvbnN0IGNoYXIgKmxhc3RfY3IgPSBzdHJyY2hyKGdzLT5zLCAnXG4nKTsKKwkJdW5zaWduZWQgbGFzdF9saW5lX2xlbmd0aDsKKworCQlpZiAoc3ltX3N0cikKKwkJCWV4dHJhX2xlbmd0aCArPSA0ICsgc3RybGVuKHN5bV9zdHIpOworCisJCWlmICghbGFzdF9jcikKKwkJCWxhc3RfY3IgPSBncy0+czsKKworCQlsYXN0X2xpbmVfbGVuZ3RoID0gc3RybGVuKGdzLT5zKSAtIChsYXN0X2NyIC0gZ3MtPnMpOworCisJCWlmICgobGFzdF9saW5lX2xlbmd0aCArIGV4dHJhX2xlbmd0aCkgPiBncy0+bWF4X3dpZHRoKQorCQkJc3RyX2FwcGVuZChncywgIlxcXG4iKTsKKwl9CisKKwlzdHJfYXBwZW5kKGdzLCBzdHIpOworCWlmIChzeW0gJiYgc3ltLT50eXBlICE9IFNfVU5LTk9XTikKKwkJc3RyX3ByaW50ZihncywgIiBbPSVzXSIsIHN5bV9zdHIpOworfQorCit2b2lkIGV4cHJfZ3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3RydWN0IGdzdHIgKmdzKQoreworCWV4cHJfcHJpbnQoZSwgZXhwcl9wcmludF9nc3RyX2hlbHBlciwgZ3MsIEVfTk9ORSk7Cit9CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2NvbmZpZy9leHByLmggYi9jYXJsOTE3MGZ3L2NvbmZpZy9leHByLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlY2NlOAotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY29uZmlnL2V4cHIuaApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICovCisKKyNpZm5kZWYgRVhQUl9ICisjZGVmaW5lIEVYUFJfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmbmRlZiBfX2NwbHVzcGx1cworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNlbmRpZgorCitzdHJ1Y3QgZmlsZSB7CisJc3RydWN0IGZpbGUgKm5leHQ7CisJc3RydWN0IGZpbGUgKnBhcmVudDsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBsaW5lbm87Cit9OworCit0eXBlZGVmIGVudW0gdHJpc3RhdGUgeworCW5vLCBtb2QsIHllcworfSB0cmlzdGF0ZTsKKworZW51bSBleHByX3R5cGUgeworCUVfTk9ORSwgRV9PUiwgRV9BTkQsIEVfTk9ULCBFX0VRVUFMLCBFX1VORVFVQUwsIEVfTElTVCwgRV9TWU1CT0wsIEVfUkFOR0UKK307CisKK3VuaW9uIGV4cHJfZGF0YSB7CisJc3RydWN0IGV4cHIgKmV4cHI7CisJc3RydWN0IHN5bWJvbCAqc3ltOworfTsKKworc3RydWN0IGV4cHIgeworCWVudW0gZXhwcl90eXBlIHR5cGU7CisJdW5pb24gZXhwcl9kYXRhIGxlZnQsIHJpZ2h0OworfTsKKworI2RlZmluZSBFWFBSX09SKGRlcDEsIGRlcDIpCSgoKGRlcDEpPihkZXAyKSk/KGRlcDEpOihkZXAyKSkKKyNkZWZpbmUgRVhQUl9BTkQoZGVwMSwgZGVwMikJKCgoZGVwMSk8KGRlcDIpKT8oZGVwMSk6KGRlcDIpKQorI2RlZmluZSBFWFBSX05PVChkZXApCQkoMi0oZGVwKSkKKworI2RlZmluZSBleHByX2xpc3RfZm9yX2VhY2hfc3ltKGwsIGUsIHMpIFwKKwlmb3IgKGUgPSAobCk7IGUgJiYgKHMgPSBlLT5yaWdodC5zeW0pOyBlID0gZS0+bGVmdC5leHByKQorCitzdHJ1Y3QgZXhwcl92YWx1ZSB7CisJc3RydWN0IGV4cHIgKmV4cHI7CisJdHJpc3RhdGUgdHJpOworfTsKKworc3RydWN0IHN5bWJvbF92YWx1ZSB7CisJdm9pZCAqdmFsOworCXRyaXN0YXRlIHRyaTsKK307CisKK2VudW0gc3ltYm9sX3R5cGUgeworCVNfVU5LTk9XTiwgU19CT09MRUFOLCBTX1RSSVNUQVRFLCBTX0lOVCwgU19IRVgsIFNfU1RSSU5HLCBTX09USEVSCit9OworCisvKiBlbnVtIHZhbHVlcyBhcmUgdXNlZCBhcyBpbmRleCB0byBzeW1ib2wuZGVmW10gKi8KK2VudW0geworCVNfREVGX1VTRVIsCQkvKiBtYWluIHVzZXIgdmFsdWUgKi8KKwlTX0RFRl9BVVRPLAkJLyogdmFsdWVzIHJlYWQgZnJvbSBhdXRvLmNvbmYgKi8KKwlTX0RFRl9ERUYzLAkJLyogUmVzZXJ2ZWQgZm9yIFVJIHVzYWdlICovCisJU19ERUZfREVGNCwJCS8qIFJlc2VydmVkIGZvciBVSSB1c2FnZSAqLworCVNfREVGX0NPVU5UCit9OworCitzdHJ1Y3Qgc3ltYm9sIHsKKwlzdHJ1Y3Qgc3ltYm9sICpuZXh0OworCWNoYXIgKm5hbWU7CisJZW51bSBzeW1ib2xfdHlwZSB0eXBlOworCXN0cnVjdCBzeW1ib2xfdmFsdWUgY3VycjsKKwlzdHJ1Y3Qgc3ltYm9sX3ZhbHVlIGRlZltTX0RFRl9DT1VOVF07CisJdHJpc3RhdGUgdmlzaWJsZTsKKwlpbnQgZmxhZ3M7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByX3ZhbHVlIGRpcl9kZXA7CisJc3RydWN0IGV4cHJfdmFsdWUgcmV2X2RlcDsKK307CisKKyNkZWZpbmUgZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgZm9yIChpID0gMDsgaSA8IFNZTUJPTF9IQVNIU0laRTsgaSsrKSBmb3IgKHN5bSA9IHN5bWJvbF9oYXNoW2ldOyBzeW07IHN5bSA9IHN5bS0+bmV4dCkgaWYgKHN5bS0+dHlwZSAhPSBTX09USEVSKQorCisjZGVmaW5lIFNZTUJPTF9DT05TVCAgICAgIDB4MDAwMSAgLyogc3ltYm9sIGlzIGNvbnN0ICovCisjZGVmaW5lIFNZTUJPTF9DSEVDSyAgICAgIDB4MDAwOCAgLyogdXNlZCBkdXJpbmcgZGVwZW5kZW5jeSBjaGVja2luZyAqLworI2RlZmluZSBTWU1CT0xfQ0hPSUNFICAgICAweDAwMTAgIC8qIHN0YXJ0IG9mIGEgY2hvaWNlIGJsb2NrIChudWxsIG5hbWUpICovCisjZGVmaW5lIFNZTUJPTF9DSE9JQ0VWQUwgIDB4MDAyMCAgLyogdXNlZCBhcyBhIHZhbHVlIGluIGEgY2hvaWNlIGJsb2NrICovCisjZGVmaW5lIFNZTUJPTF9WQUxJRCAgICAgIDB4MDA4MCAgLyogc2V0IHdoZW4gc3ltYm9sLmN1cnIgaXMgY2FsY3VsYXRlZCAqLworI2RlZmluZSBTWU1CT0xfT1BUSU9OQUwgICAweDAxMDAgIC8qIGNob2ljZSBpcyBvcHRpb25hbCAtIHZhbHVlcyBjYW4gYmUgJ24nICovCisjZGVmaW5lIFNZTUJPTF9XUklURSAgICAgIDB4MDIwMCAgLyogPyAqLworI2RlZmluZSBTWU1CT0xfQ0hBTkdFRCAgICAweDA0MDAgIC8qID8gKi8KKyNkZWZpbmUgU1lNQk9MX0FVVE8gICAgICAgMHgxMDAwICAvKiB2YWx1ZSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlICovCisjZGVmaW5lIFNZTUJPTF9DSEVDS0VEICAgIDB4MjAwMCAgLyogdXNlZCBkdXJpbmcgZGVwZW5kZW5jeSBjaGVja2luZyAqLworI2RlZmluZSBTWU1CT0xfV0FSTkVEICAgICAweDgwMDAgIC8qIHdhcm5pbmcgaGFzIGJlZW4gaXNzdWVkICovCisKKy8qIFNldCB3aGVuIHN5bWJvbC5kZWZbXSBpcyB1c2VkICovCisjZGVmaW5lIFNZTUJPTF9ERUYgICAgICAgIDB4MTAwMDAgIC8qIEZpcnN0IGJpdCBvZiBTWU1CT0xfREVGICovCisjZGVmaW5lIFNZTUJPTF9ERUZfVVNFUiAgIDB4MTAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZfVVNFUl0gaXMgdmFsaWQgKi8KKyNkZWZpbmUgU1lNQk9MX0RFRl9BVVRPICAgMHgyMDAwMCAgLyogc3ltYm9sLmRlZltTX0RFRl9BVVRPXSBpcyB2YWxpZCAqLworI2RlZmluZSBTWU1CT0xfREVGMyAgICAgICAweDQwMDAwICAvKiBzeW1ib2wuZGVmW1NfREVGXzNdIGlzIHZhbGlkICovCisjZGVmaW5lIFNZTUJPTF9ERUY0ICAgICAgIDB4ODAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZfNF0gaXMgdmFsaWQgKi8KKworI2RlZmluZSBTWU1CT0xfTUFYTEVOR1RICTI1NgorI2RlZmluZSBTWU1CT0xfSEFTSFNJWkUJCTk5NzMKKworLyogQSBwcm9wZXJ0eSByZXByZXNlbnQgdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQKKyAqIHdpdGggYSBjb25maWcgInN5bWJvbCIuCisgKiBTYW1wbGU6CisgKiBjb25maWcgRk9PCisgKiAgICAgICAgIGRlZmF1bHQgeQorICogICAgICAgICBwcm9tcHQgImZvbyBwcm9tcHQiCisgKiAgICAgICAgIHNlbGVjdCBCQVIKKyAqIGNvbmZpZyBCQVoKKyAqICAgICAgICAgaW50ICJCQVogVmFsdWUiCisgKiAgICAgICAgIHJhbmdlIDEuLjI1NQorICovCitlbnVtIHByb3BfdHlwZSB7CisJUF9VTktOT1dOLAorCVBfUFJPTVBULCAgIC8qIHByb21wdCAiZm9vIHByb21wdCIgb3IgIkJBWiBWYWx1ZSIgKi8KKwlQX0NPTU1FTlQsICAvKiB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBhIGNvbW1lbnQgKi8KKwlQX01FTlUsICAgICAvKiBwcm9tcHQgYXNzb2NpYXRlZCB3aXRoIGEgbWVudWNvbmZpZyBvcHRpb24gKi8KKwlQX0RFRkFVTFQsICAvKiBkZWZhdWx0IHkgKi8KKwlQX0NIT0lDRSwgICAvKiBjaG9pY2UgdmFsdWUgKi8KKwlQX1NFTEVDVCwgICAvKiBzZWxlY3QgQkFSICovCisJUF9SQU5HRSwgICAgLyogcmFuZ2UgNy4uMTAwIChmb3IgYSBzeW1ib2wpICovCisJUF9FTlYsICAgICAgLyogdmFsdWUgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZSAqLworCVBfU1lNQk9MLCAgIC8qIHdoZXJlIGEgc3ltYm9sIGlzIGRlZmluZWQgKi8KK307CisKK3N0cnVjdCBwcm9wZXJ0eSB7CisJc3RydWN0IHByb3BlcnR5ICpuZXh0OyAgICAgLyogbmV4dCBwcm9wZXJ0eSAtIG51bGwgaWYgbGFzdCAqLworCXN0cnVjdCBzeW1ib2wgKnN5bTsgICAgICAgIC8qIHRoZSBzeW1ib2wgZm9yIHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhc3NvY2lhdGVkICovCisJZW51bSBwcm9wX3R5cGUgdHlwZTsgICAgICAgLyogdHlwZSBvZiBwcm9wZXJ0eSAqLworCWNvbnN0IGNoYXIgKnRleHQ7ICAgICAgICAgIC8qIHRoZSBwcm9tcHQgdmFsdWUgLSBQX1BST01QVCwgUF9NRU5VLCBQX0NPTU1FTlQgKi8KKwlzdHJ1Y3QgZXhwcl92YWx1ZSB2aXNpYmxlOworCXN0cnVjdCBleHByICpleHByOyAgICAgICAgIC8qIHRoZSBvcHRpb25hbCBjb25kaXRpb25hbCBwYXJ0IG9mIHRoZSBwcm9wZXJ0eSAqLworCXN0cnVjdCBtZW51ICptZW51OyAgICAgICAgIC8qIHRoZSBtZW51IHRoZSBwcm9wZXJ0eSBhcmUgYXNzb2NpYXRlZCB3aXRoCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdmFsaWQgZm9yOiBQX1NFTEVDVCwgUF9SQU5HRSwgUF9DSE9JQ0UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICogUF9QUk9NUFQsIFBfREVGQVVMVCwgUF9NRU5VLCBQX0NPTU1FTlQgKi8KKwlzdHJ1Y3QgZmlsZSAqZmlsZTsgICAgICAgICAvKiB3aGF0IGZpbGUgd2FzIHRoaXMgcHJvcGVydHkgZGVmaW5lZCAqLworCWludCBsaW5lbm87ICAgICAgICAgICAgICAgIC8qIHdoYXQgbGluZW5vIHdhcyB0aGlzIHByb3BlcnR5IGRlZmluZWQgKi8KK307CisKKyNkZWZpbmUgZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgc3QsIHRvaykgXAorCWZvciAoc3QgPSBzeW0tPnByb3A7IHN0OyBzdCA9IHN0LT5uZXh0KSBcCisJCWlmIChzdC0+dHlwZSA9PSAodG9rKSkKKyNkZWZpbmUgZm9yX2FsbF9kZWZhdWx0cyhzeW0sIHN0KSBmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBzdCwgUF9ERUZBVUxUKQorI2RlZmluZSBmb3JfYWxsX2Nob2ljZXMoc3ltLCBzdCkgZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgc3QsIFBfQ0hPSUNFKQorI2RlZmluZSBmb3JfYWxsX3Byb21wdHMoc3ltLCBzdCkgXAorCWZvciAoc3QgPSBzeW0tPnByb3A7IHN0OyBzdCA9IHN0LT5uZXh0KSBcCisJCWlmIChzdC0+dGV4dCkKKworc3RydWN0IG1lbnUgeworCXN0cnVjdCBtZW51ICpuZXh0OworCXN0cnVjdCBtZW51ICpwYXJlbnQ7CisJc3RydWN0IG1lbnUgKmxpc3Q7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvbXB0OworCXN0cnVjdCBleHByICp2aXNpYmlsaXR5OworCXN0cnVjdCBleHByICpkZXA7CisJdW5zaWduZWQgaW50IGZsYWdzOworCWNoYXIgKmhlbHA7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJaW50IGxpbmVubzsKKwl2b2lkICpkYXRhOworfTsKKworI2RlZmluZSBNRU5VX0NIQU5HRUQJCTB4MDAwMQorI2RlZmluZSBNRU5VX1JPT1QJCTB4MDAwMgorCitleHRlcm4gc3RydWN0IGZpbGUgKmZpbGVfbGlzdDsKK2V4dGVybiBzdHJ1Y3QgZmlsZSAqY3VycmVudF9maWxlOworc3RydWN0IGZpbGUgKmxvb2t1cF9maWxlKGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRlcm4gc3RydWN0IHN5bWJvbCBzeW1ib2xfeWVzLCBzeW1ib2xfbm8sIHN5bWJvbF9tb2Q7CitleHRlcm4gc3RydWN0IHN5bWJvbCAqbW9kdWxlc19zeW07CitleHRlcm4gc3RydWN0IHN5bWJvbCAqc3ltX2RlZmNvbmZpZ19saXN0OworZXh0ZXJuIGludCBjZGVidWc7CitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19zeW1ib2woc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBleHByICpleHByX2FsbG9jX29uZShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqY2UpOworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKTsKK3N0cnVjdCBleHByICpleHByX2FsbG9jX2NvbXAoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqczEsIHN0cnVjdCBzeW1ib2wgKnMyKTsKK3N0cnVjdCBleHByICpleHByX2FsbG9jX2FuZChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7CitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vcihzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7CitzdHJ1Y3QgZXhwciAqZXhwcl9jb3B5KGNvbnN0IHN0cnVjdCBleHByICpvcmcpOwordm9pZCBleHByX2ZyZWUoc3RydWN0IGV4cHIgKmUpOworaW50IGV4cHJfZXEoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpOwordm9pZCBleHByX2VsaW1pbmF0ZV9lcShzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpOwordHJpc3RhdGUgZXhwcl9jYWxjX3ZhbHVlKHN0cnVjdCBleHByICplKTsKK3N0cnVjdCBleHByICpleHByX2VsaW1pbmF0ZV95bihzdHJ1Y3QgZXhwciAqZSk7CitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19ib29sKHN0cnVjdCBleHByICplKTsKK3N0cnVjdCBleHByICpleHByX2VsaW1pbmF0ZV9kdXBzKHN0cnVjdCBleHByICplKTsKK3N0cnVjdCBleHByICpleHByX3RyYW5zZm9ybShzdHJ1Y3QgZXhwciAqZSk7CitpbnQgZXhwcl9jb250YWluc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAqc3ltKTsKK2Jvb2wgZXhwcl9kZXBlbmRzX3N5bWJvbChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworc3RydWN0IGV4cHIgKmV4cHJfZXh0cmFjdF9lcV9hbmQoc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKTsKK3N0cnVjdCBleHByICpleHByX2V4dHJhY3RfZXFfb3Ioc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKTsKK3ZvaWQgZXhwcl9leHRyYWN0X2VxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMik7CitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19jb21wYXJlKHN0cnVjdCBleHByICplLCBlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworc3RydWN0IGV4cHIgKmV4cHJfc2ltcGxpZnlfdW5tZXRfZGVwKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKTsKKwordm9pZCBleHByX2ZwcmludChzdHJ1Y3QgZXhwciAqZSwgRklMRSAqb3V0KTsKK3N0cnVjdCBnc3RyOyAvKiBmb3J3YXJkICovCit2b2lkIGV4cHJfZ3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3RydWN0IGdzdHIgKmdzKTsKKworc3RhdGljIGlubGluZSBpbnQgZXhwcl9pc195ZXMoc3RydWN0IGV4cHIgKmUpCit7CisJcmV0dXJuICFlIHx8IChlLT50eXBlID09IEVfU1lNQk9MICYmIGUtPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXhwcl9pc19ubyhzdHJ1Y3QgZXhwciAqZSkKK3sKKwlyZXR1cm4gZSAmJiAoZS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIEVYUFJfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jb25maWcvbGtjLmggYi9jYXJsOTE3MGZ3L2NvbmZpZy9sa2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMThmMmJkCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jb25maWcvbGtjLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqLworCisjaWZuZGVmIExLQ19ICisjZGVmaW5lIExLQ19ICisKKyNpbmNsdWRlICJleHByLmgiCisKKyNpZm5kZWYgS0JVSUxEX05PX05MUworIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisjZWxzZQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpnZXR0ZXh0KGNvbnN0IGNoYXIgKnR4dCkgeyByZXR1cm4gdHh0OyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGJpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRpcikge30KK3N0YXRpYyBpbmxpbmUgY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoY29uc3QgY2hhciAqZG4sIGNoYXIgKmMpIHsgcmV0dXJuIGM7IH0KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgUChuYW1lLHR5cGUsYXJnKQlleHRlcm4gdHlwZSBuYW1lIGFyZworI2luY2x1ZGUgImxrY19wcm90by5oIgorI3VuZGVmIFAKKworI2RlZmluZSBTUkNUUkVFICJzcmN0cmVlIgorCisjaWZuZGVmIFBBQ0tBR0UKKyNkZWZpbmUgUEFDS0FHRSAibGludXgiCisjZW5kaWYKKworI2RlZmluZSBMT0NBTEVESVIgIi91c3Ivc2hhcmUvbG9jYWxlIgorCisjZGVmaW5lIF8odGV4dCkgZ2V0dGV4dCh0ZXh0KQorI2RlZmluZSBOXyh0ZXh0KSAodGV4dCkKKworI2lmbmRlZiBDT05GSUdfCisjZGVmaW5lIENPTkZJR18gIkNPTkZJR18iCisjZW5kaWYKKworI2RlZmluZSBURl9DT01NQU5ECTB4MDAwMQorI2RlZmluZSBURl9QQVJBTQkweDAwMDIKKyNkZWZpbmUgVEZfT1BUSU9OCTB4MDAwNAorCitlbnVtIGNvbmZfZGVmX21vZGUgeworCWRlZl9kZWZhdWx0LAorCWRlZl95ZXMsCisJZGVmX21vZCwKKwlkZWZfbm8sCisJZGVmX3JhbmRvbQorfTsKKworI2RlZmluZSBUX09QVF9NT0RVTEVTCQkxCisjZGVmaW5lIFRfT1BUX0RFRkNPTkZJR19MSVNUCTIKKyNkZWZpbmUgVF9PUFRfRU5WCQkzCisKK3N0cnVjdCBrY29uZl9pZCB7CisJaW50IG5hbWU7CisJaW50IHRva2VuOworCXVuc2lnbmVkIGludCBmbGFnczsKKwllbnVtIHN5bWJvbF90eXBlIHN0eXBlOworfTsKKworZXh0ZXJuIGludCB6Y29uZmRlYnVnOworCitpbnQgemNvbmZwYXJzZSh2b2lkKTsKK3ZvaWQgemNvbmZkdW1wKEZJTEUgKm91dCk7Cit2b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lkKTsKK0ZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCB6Y29uZl9pbml0c2Nhbihjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgemNvbmZfbGluZW5vKHZvaWQpOworY29uc3QgY2hhciAqemNvbmZfY3VybmFtZSh2b2lkKTsKKworLyogY29uZmRhdGEuYyAqLworY29uc3QgY2hhciAqY29uZl9nZXRfY29uZmlnbmFtZSh2b2lkKTsKK2NvbnN0IGNoYXIgKmNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSh2b2lkKTsKK2NoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUodm9pZCk7Cit2b2lkIHN5bV9zZXRfY2hhbmdlX2NvdW50KGludCBjb3VudCk7Cit2b2lkIHN5bV9hZGRfY2hhbmdlX2NvdW50KGludCBjb3VudCk7Cit2b2lkIGNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhlbnVtIGNvbmZfZGVmX21vZGUgbW9kZSk7CisKK3N0cnVjdCBjb25mX3ByaW50ZXIgeworCXZvaWQgKCpwcmludF9zeW1ib2wpKEZJTEUgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CisJdm9pZCAoKnByaW50X2NvbW1lbnQpKEZJTEUgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworfTsKKworLyogY29uZmRhdGEuYyBhbmQgZXhwci5jICovCitzdGF0aWMgaW5saW5lIHZvaWQgeGZ3cml0ZShjb25zdCB2b2lkICpzdHIsIHNpemVfdCBsZW4sIHNpemVfdCBjb3VudCwgRklMRSAqb3V0KQoreworCWFzc2VydChsZW4gIT0gMCk7CisKKwlpZiAoZndyaXRlKHN0ciwgbGVuLCBjb3VudCwgb3V0KSAhPSBjb3VudCkKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBpbiB3cml0aW5nIG9yIGVuZCBvZiBmaWxlLlxuIik7Cit9CisKKy8qIG1lbnUuYyAqLwordm9pZCBfbWVudV9pbml0KHZvaWQpOwordm9pZCBtZW51X3dhcm4oc3RydWN0IG1lbnUgKm1lbnUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3N0cnVjdCBtZW51ICptZW51X2FkZF9tZW51KHZvaWQpOwordm9pZCBtZW51X2VuZF9tZW51KHZvaWQpOwordm9pZCBtZW51X2FkZF9lbnRyeShzdHJ1Y3Qgc3ltYm9sICpzeW0pOwordm9pZCBtZW51X2VuZF9lbnRyeSh2b2lkKTsKK3ZvaWQgbWVudV9hZGRfZGVwKHN0cnVjdCBleHByICpkZXApOwordm9pZCBtZW51X2FkZF92aXNpYmlsaXR5KHN0cnVjdCBleHByICpkZXApOworc3RydWN0IHByb3BlcnR5ICptZW51X2FkZF9wcm9wKGVudW0gcHJvcF90eXBlIHR5cGUsIGNoYXIgKnByb21wdCwgc3RydWN0IGV4cHIgKmV4cHIsIHN0cnVjdCBleHByICpkZXApOworc3RydWN0IHByb3BlcnR5ICptZW51X2FkZF9wcm9tcHQoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAqcHJvbXB0LCBzdHJ1Y3QgZXhwciAqZGVwKTsKK3ZvaWQgbWVudV9hZGRfZXhwcihlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqZXhwciwgc3RydWN0IGV4cHIgKmRlcCk7Cit2b2lkIG1lbnVfYWRkX3N5bWJvbChlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIHN0cnVjdCBleHByICpkZXApOwordm9pZCBtZW51X2FkZF9vcHRpb24oaW50IHRva2VuLCBjaGFyICphcmcpOwordm9pZCBtZW51X2ZpbmFsaXplKHN0cnVjdCBtZW51ICpwYXJlbnQpOwordm9pZCBtZW51X3NldF90eXBlKGludCB0eXBlKTsKKworLyogdXRpbC5jICovCitzdHJ1Y3QgZmlsZSAqZmlsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgZmlsZV93cml0ZV9kZXAoY29uc3QgY2hhciAqbmFtZSk7CisKK3N0cnVjdCBnc3RyIHsKKwlzaXplX3QgbGVuOworCWNoYXIgICpzOworCS8qCisJKiB3aGVuIG1heF93aWR0aCBpcyBub3QgemVybyBsb25nIGxpbmVzIGluIHN0cmluZyBzIChpZiBhbnkpIGdldAorCSogd3JhcHBlZCBub3QgdG8gZXhjZWVkIHRoZSBtYXhfd2lkdGggdmFsdWUKKwkqLworCWludCBtYXhfd2lkdGg7Cit9Oworc3RydWN0IGdzdHIgc3RyX25ldyh2b2lkKTsKK3N0cnVjdCBnc3RyIHN0cl9hc3NpZ24oY29uc3QgY2hhciAqcyk7Cit2b2lkIHN0cl9mcmVlKHN0cnVjdCBnc3RyICpncyk7Cit2b2lkIHN0cl9hcHBlbmQoc3RydWN0IGdzdHIgKmdzLCBjb25zdCBjaGFyICpzKTsKK3ZvaWQgc3RyX3ByaW50ZihzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2NvbnN0IGNoYXIgKnN0cl9nZXQoc3RydWN0IGdzdHIgKmdzKTsKKworLyogc3ltYm9sLmMgKi8KK2V4dGVybiBzdHJ1Y3QgZXhwciAqc3ltX2Vudl9saXN0OworCit2b2lkIHN5bV9pbml0KHZvaWQpOwordm9pZCBzeW1fY2xlYXJfYWxsX3ZhbGlkKHZvaWQpOwordm9pZCBzeW1fc2V0X2FsbF9jaGFuZ2VkKHZvaWQpOwordm9pZCBzeW1fc2V0X2NoYW5nZWQoc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBzeW1ib2wgKnN5bV9jaG9pY2VfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pOworY29uc3QgY2hhciAqc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pOworc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNrX2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBwcm9wZXJ0eSAqcHJvcF9hbGxvYyhlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworc3RydWN0IHN5bWJvbCAqcHJvcF9nZXRfc3ltYm9sKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCk7CitzdHJ1Y3QgcHJvcGVydHkgKnN5bV9nZXRfZW52X3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKTsKKworc3RhdGljIGlubGluZSB0cmlzdGF0ZSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4gc3ltLT5jdXJyLnRyaTsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1ib2wgKnN5bV9nZXRfY2hvaWNlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4gKHN0cnVjdCBzeW1ib2wgKilzeW0tPmN1cnIudmFsOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3ltX3NldF9jaG9pY2VfdmFsdWUoc3RydWN0IHN5bWJvbCAqY2gsIHN0cnVjdCBzeW1ib2wgKmNodmFsKQoreworCXJldHVybiBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKGNodmFsLCB5ZXMpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3ltX2lzX2Nob2ljZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hPSUNFID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3ltX2lzX2Nob2ljZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hPSUNFVkFMID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3ltX2lzX29wdGlvbmFsKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4gc3ltLT5mbGFncyAmIFNZTUJPTF9PUFRJT05BTCA/IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN5bV9oYXNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXJldHVybiBzeW0tPmZsYWdzICYgU1lNQk9MX0RFRl9VU0VSID8gdHJ1ZSA6IGZhbHNlOworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTEtDX0ggKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY29uZmlnL2xrY19wcm90by5oIGIvY2FybDkxNzBmdy9jb25maWcvbGtjX3Byb3RvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmZTljMwotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY29uZmlnL2xrY19wcm90by5oCkBAIC0wLDAgKzEsNTQgQEAKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyogY29uZmRhdGEuYyAqLworUChjb25mX3BhcnNlLHZvaWQsKGNvbnN0IGNoYXIgKm5hbWUpKTsKK1AoY29uZl9yZWFkLGludCwoY29uc3QgY2hhciAqbmFtZSkpOworUChjb25mX3JlYWRfc2ltcGxlLGludCwoY29uc3QgY2hhciAqbmFtZSwgaW50KSk7CitQKGNvbmZfd3JpdGVfZGVmY29uZmlnLGludCwoY29uc3QgY2hhciAqbmFtZSkpOworUChjb25mX3dyaXRlLGludCwoY29uc3QgY2hhciAqbmFtZSkpOworUChjb25mX3dyaXRlX2F1dG9jb25mLGludCwodm9pZCkpOworUChjb25mX2dldF9jaGFuZ2VkLGJvb2wsKHZvaWQpKTsKK1AoY29uZl9zZXRfY2hhbmdlZF9jYWxsYmFjaywgdm9pZCwodm9pZCAoKmZuKSh2b2lkKSkpOworUChjb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrLCB2b2lkLCh2b2lkICgqZm4pKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkpKTsKKworLyogbWVudS5jICovCitQKHJvb3RtZW51LHN0cnVjdCBtZW51LCk7CisKK1AobWVudV9pc192aXNpYmxlLCBib29sLCAoc3RydWN0IG1lbnUgKm1lbnUpKTsKK1AobWVudV9oYXNfcHJvbXB0LCBib29sLCAoc3RydWN0IG1lbnUgKm1lbnUpKTsKK1AobWVudV9nZXRfcHJvbXB0LGNvbnN0IGNoYXIgKiwoc3RydWN0IG1lbnUgKm1lbnUpKTsKK1AobWVudV9nZXRfcm9vdF9tZW51LHN0cnVjdCBtZW51ICosKHN0cnVjdCBtZW51ICptZW51KSk7CitQKG1lbnVfZ2V0X3BhcmVudF9tZW51LHN0cnVjdCBtZW51ICosKHN0cnVjdCBtZW51ICptZW51KSk7CitQKG1lbnVfaGFzX2hlbHAsYm9vbCwoc3RydWN0IG1lbnUgKm1lbnUpKTsKK1AobWVudV9nZXRfaGVscCxjb25zdCBjaGFyICosKHN0cnVjdCBtZW51ICptZW51KSk7CitQKGdldF9zeW1ib2xfc3RyLCB2b2lkLCAoc3RydWN0IGdzdHIgKnIsIHN0cnVjdCBzeW1ib2wgKnN5bSkpOworUChnZXRfcmVsYXRpb25zX3N0ciwgc3RydWN0IGdzdHIsIChzdHJ1Y3Qgc3ltYm9sICoqc3ltX2FycikpOworUChtZW51X2dldF9leHRfaGVscCx2b2lkLChzdHJ1Y3QgbWVudSAqbWVudSwgc3RydWN0IGdzdHIgKmhlbHApKTsKKworLyogc3ltYm9sLmMgKi8KK1Aoc3ltYm9sX2hhc2gsc3RydWN0IHN5bWJvbCAqLFtTWU1CT0xfSEFTSFNJWkVdKTsKKworUChzeW1fbG9va3VwLHN0cnVjdCBzeW1ib2wgKiwoY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKSk7CitQKHN5bV9maW5kLHN0cnVjdCBzeW1ib2wgKiwoY29uc3QgY2hhciAqbmFtZSkpOworUChzeW1fZXhwYW5kX3N0cmluZ192YWx1ZSxjb25zdCBjaGFyICosKGNvbnN0IGNoYXIgKmluKSk7CitQKHN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVlLCBjb25zdCBjaGFyICosKGNvbnN0IGNoYXIgKmluKSk7CitQKHN5bV9yZV9zZWFyY2gsc3RydWN0IHN5bWJvbCAqKiwoY29uc3QgY2hhciAqcGF0dGVybikpOworUChzeW1fdHlwZV9uYW1lLGNvbnN0IGNoYXIgKiwoZW51bSBzeW1ib2xfdHlwZSB0eXBlKSk7CitQKHN5bV9jYWxjX3ZhbHVlLHZvaWQsKHN0cnVjdCBzeW1ib2wgKnN5bSkpOworUChzeW1fZ2V0X3R5cGUsZW51bSBzeW1ib2xfdHlwZSwoc3RydWN0IHN5bWJvbCAqc3ltKSk7CitQKHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2UsYm9vbCwoc3RydWN0IHN5bWJvbCAqc3ltLHRyaXN0YXRlIHRyaSkpOworUChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlLGJvb2wsKHN0cnVjdCBzeW1ib2wgKnN5bSx0cmlzdGF0ZSB0cmkpKTsKK1Aoc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZSx0cmlzdGF0ZSwoc3RydWN0IHN5bWJvbCAqc3ltKSk7CitQKHN5bV9zdHJpbmdfdmFsaWQsYm9vbCwoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpuZXd2YWwpKTsKK1Aoc3ltX3N0cmluZ193aXRoaW5fcmFuZ2UsYm9vbCwoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpKTsKK1Aoc3ltX3NldF9zdHJpbmdfdmFsdWUsYm9vbCwoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpuZXd2YWwpKTsKK1Aoc3ltX2lzX2NoYW5nYWJsZSxib29sLChzdHJ1Y3Qgc3ltYm9sICpzeW0pKTsKK1Aoc3ltX2dldF9jaG9pY2VfcHJvcCxzdHJ1Y3QgcHJvcGVydHkgKiwoc3RydWN0IHN5bWJvbCAqc3ltKSk7CitQKHN5bV9nZXRfZGVmYXVsdF9wcm9wLHN0cnVjdCBwcm9wZXJ0eSAqLChzdHJ1Y3Qgc3ltYm9sICpzeW0pKTsKK1Aoc3ltX2dldF9zdHJpbmdfdmFsdWUsY29uc3QgY2hhciAqLChzdHJ1Y3Qgc3ltYm9sICpzeW0pKTsKKworUChwcm9wX2dldF90eXBlX25hbWUsY29uc3QgY2hhciAqLChlbnVtIHByb3BfdHlwZSB0eXBlKSk7CisKKy8qIGV4cHIuYyAqLworUChleHByX2NvbXBhcmVfdHlwZSxpbnQsKGVudW0gZXhwcl90eXBlIHQxLCBlbnVtIGV4cHJfdHlwZSB0MikpOworUChleHByX3ByaW50LHZvaWQsKHN0cnVjdCBleHByICplLCB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFyICopLCB2b2lkICpkYXRhLCBpbnQgcHJldnRva2VuKSk7CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2NvbmZpZy9tZW51LmMgYi9jYXJsOTE3MGZ3L2NvbmZpZy9tZW51LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyYTk3ZQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY29uZmlnL21lbnUuYwpAQCAtMCwwICsxLDYwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibGtjLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIG5vaGVscF90ZXh0W10gPSAiVGhlcmUgaXMgbm8gaGVscCBhdmFpbGFibGUgZm9yIHRoaXMgb3B0aW9uLiI7CisKK3N0cnVjdCBtZW51IHJvb3RtZW51Oworc3RhdGljIHN0cnVjdCBtZW51ICoqbGFzdF9lbnRyeV9wdHI7CisKK3N0cnVjdCBmaWxlICpmaWxlX2xpc3Q7CitzdHJ1Y3QgZmlsZSAqY3VycmVudF9maWxlOworCit2b2lkIG1lbnVfd2FybihzdHJ1Y3QgbWVudSAqbWVudSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6ICIsIG1lbnUtPmZpbGUtPm5hbWUsIG1lbnUtPmxpbmVubyk7CisJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJdmFfZW5kKGFwKTsKK30KKworc3RhdGljIHZvaWQgcHJvcF93YXJuKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6ICIsIHByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubyk7CisJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJdmFfZW5kKGFwKTsKK30KKwordm9pZCBfbWVudV9pbml0KHZvaWQpCit7CisJY3VycmVudF9lbnRyeSA9IGN1cnJlbnRfbWVudSA9ICZyb290bWVudTsKKwlsYXN0X2VudHJ5X3B0ciA9ICZyb290bWVudS5saXN0OworfQorCit2b2lkIG1lbnVfYWRkX2VudHJ5KHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKworCW1lbnUgPSBtYWxsb2Moc2l6ZW9mKCptZW51KSk7CisJbWVtc2V0KG1lbnUsIDAsIHNpemVvZigqbWVudSkpOworCW1lbnUtPnN5bSA9IHN5bTsKKwltZW51LT5wYXJlbnQgPSBjdXJyZW50X21lbnU7CisJbWVudS0+ZmlsZSA9IGN1cnJlbnRfZmlsZTsKKwltZW51LT5saW5lbm8gPSB6Y29uZl9saW5lbm8oKTsKKworCSpsYXN0X2VudHJ5X3B0ciA9IG1lbnU7CisJbGFzdF9lbnRyeV9wdHIgPSAmbWVudS0+bmV4dDsKKwljdXJyZW50X2VudHJ5ID0gbWVudTsKKwlpZiAoc3ltKQorCQltZW51X2FkZF9zeW1ib2woUF9TWU1CT0wsIHN5bSwgTlVMTCk7Cit9CisKK3ZvaWQgbWVudV9lbmRfZW50cnkodm9pZCkKK3sKK30KKworc3RydWN0IG1lbnUgKm1lbnVfYWRkX21lbnUodm9pZCkKK3sKKwltZW51X2VuZF9lbnRyeSgpOworCWxhc3RfZW50cnlfcHRyID0gJmN1cnJlbnRfZW50cnktPmxpc3Q7CisJcmV0dXJuIGN1cnJlbnRfbWVudSA9IGN1cnJlbnRfZW50cnk7Cit9CisKK3ZvaWQgbWVudV9lbmRfbWVudSh2b2lkKQoreworCWxhc3RfZW50cnlfcHRyID0gJmN1cnJlbnRfbWVudS0+bmV4dDsKKwljdXJyZW50X21lbnUgPSBjdXJyZW50X21lbnUtPnBhcmVudDsKK30KKworc3RhdGljIHN0cnVjdCBleHByICptZW51X2NoZWNrX2RlcChzdHJ1Y3QgZXhwciAqZSkKK3sKKwlpZiAoIWUpCisJCXJldHVybiBlOworCisJc3dpdGNoIChlLT50eXBlKSB7CisJY2FzZSBFX05PVDoKKwkJZS0+bGVmdC5leHByID0gbWVudV9jaGVja19kZXAoZS0+bGVmdC5leHByKTsKKwkJYnJlYWs7CisJY2FzZSBFX09SOgorCWNhc2UgRV9BTkQ6CisJCWUtPmxlZnQuZXhwciA9IG1lbnVfY2hlY2tfZGVwKGUtPmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSBtZW51X2NoZWNrX2RlcChlLT5yaWdodC5leHByKTsKKwkJYnJlYWs7CisJY2FzZSBFX1NZTUJPTDoKKwkJLyogY2hhbmdlICdtJyBpbnRvICdtJyAmJiBNT0RVTEVTICovCisJCWlmIChlLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX21vZCkKKwkJCXJldHVybiBleHByX2FsbG9jX2FuZChlLCBleHByX2FsbG9jX3N5bWJvbChtb2R1bGVzX3N5bSkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIGU7Cit9CisKK3ZvaWQgbWVudV9hZGRfZGVwKHN0cnVjdCBleHByICpkZXApCit7CisJY3VycmVudF9lbnRyeS0+ZGVwID0gZXhwcl9hbGxvY19hbmQoY3VycmVudF9lbnRyeS0+ZGVwLCBtZW51X2NoZWNrX2RlcChkZXApKTsKK30KKwordm9pZCBtZW51X3NldF90eXBlKGludCB0eXBlKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGN1cnJlbnRfZW50cnktPnN5bTsKKworCWlmIChzeW0tPnR5cGUgPT0gdHlwZSkKKwkJcmV0dXJuOworCWlmIChzeW0tPnR5cGUgPT0gU19VTktOT1dOKSB7CisJCXN5bS0+dHlwZSA9IHR5cGU7CisJCXJldHVybjsKKwl9CisJbWVudV93YXJuKGN1cnJlbnRfZW50cnksICJ0eXBlIG9mICclcycgcmVkZWZpbmVkIGZyb20gJyVzJyB0byAnJXMnIiwKKwkgICAgc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkgICAgc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpLCBzeW1fdHlwZV9uYW1lKHR5cGUpKTsKK30KKworc3RydWN0IHByb3BlcnR5ICptZW51X2FkZF9wcm9wKGVudW0gcHJvcF90eXBlIHR5cGUsIGNoYXIgKnByb21wdCwgc3RydWN0IGV4cHIgKmV4cHIsIHN0cnVjdCBleHByICpkZXApCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wID0gcHJvcF9hbGxvYyh0eXBlLCBjdXJyZW50X2VudHJ5LT5zeW0pOworCisJcHJvcC0+bWVudSA9IGN1cnJlbnRfZW50cnk7CisJcHJvcC0+ZXhwciA9IGV4cHI7CisJcHJvcC0+dmlzaWJsZS5leHByID0gbWVudV9jaGVja19kZXAoZGVwKTsKKworCWlmIChwcm9tcHQpIHsKKwkJaWYgKGlzc3BhY2UoKnByb21wdCkpIHsKKwkJCXByb3Bfd2Fybihwcm9wLCAibGVhZGluZyB3aGl0ZXNwYWNlIGlnbm9yZWQiKTsKKwkJCXdoaWxlIChpc3NwYWNlKCpwcm9tcHQpKQorCQkJCXByb21wdCsrOworCQl9CisJCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQgJiYgY3VycmVudF9lbnRyeSAhPSAmcm9vdG1lbnUpCisJCQlwcm9wX3dhcm4ocHJvcCwgInByb21wdCByZWRlZmluZWQiKTsKKworCQkvKiBBcHBseSBhbGwgdXBwZXIgbWVudXMnIHZpc2liaWxpdGllcyB0byBhY3R1YWwgcHJvbXB0cy4gKi8KKwkJaWYodHlwZSA9PSBQX1BST01QVCkgeworCQkJc3RydWN0IG1lbnUgKm1lbnUgPSBjdXJyZW50X2VudHJ5OworCisJCQl3aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpICE9IE5VTEwpIHsKKwkJCQlpZiAoIW1lbnUtPnZpc2liaWxpdHkpCisJCQkJCWNvbnRpbnVlOworCQkJCXByb3AtPnZpc2libGUuZXhwcgorCQkJCQk9IGV4cHJfYWxsb2NfYW5kKHByb3AtPnZpc2libGUuZXhwciwKKwkJCQkJCQkgbWVudS0+dmlzaWJpbGl0eSk7CisJCQl9CisJCX0KKworCQljdXJyZW50X2VudHJ5LT5wcm9tcHQgPSBwcm9wOworCX0KKwlwcm9wLT50ZXh0ID0gcHJvbXB0OworCisJcmV0dXJuIHByb3A7Cit9CisKK3N0cnVjdCBwcm9wZXJ0eSAqbWVudV9hZGRfcHJvbXB0KGVudW0gcHJvcF90eXBlIHR5cGUsIGNoYXIgKnByb21wdCwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwlyZXR1cm4gbWVudV9hZGRfcHJvcCh0eXBlLCBwcm9tcHQsIE5VTEwsIGRlcCk7Cit9CisKK3ZvaWQgbWVudV9hZGRfdmlzaWJpbGl0eShzdHJ1Y3QgZXhwciAqZXhwcikKK3sKKwljdXJyZW50X2VudHJ5LT52aXNpYmlsaXR5ID0gZXhwcl9hbGxvY19hbmQoY3VycmVudF9lbnRyeS0+dmlzaWJpbGl0eSwKKwkgICAgZXhwcik7Cit9CisKK3ZvaWQgbWVudV9hZGRfZXhwcihlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqZXhwciwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwltZW51X2FkZF9wcm9wKHR5cGUsIE5VTEwsIGV4cHIsIGRlcCk7Cit9CisKK3ZvaWQgbWVudV9hZGRfc3ltYm9sKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwltZW51X2FkZF9wcm9wKHR5cGUsIE5VTEwsIGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSksIGRlcCk7Cit9CisKK3ZvaWQgbWVudV9hZGRfb3B0aW9uKGludCB0b2tlbiwgY2hhciAqYXJnKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCXN3aXRjaCAodG9rZW4pIHsKKwljYXNlIFRfT1BUX01PRFVMRVM6CisJCXByb3AgPSBwcm9wX2FsbG9jKFBfREVGQVVMVCwgbW9kdWxlc19zeW0pOworCQlwcm9wLT5leHByID0gZXhwcl9hbGxvY19zeW1ib2woY3VycmVudF9lbnRyeS0+c3ltKTsKKwkJYnJlYWs7CisJY2FzZSBUX09QVF9ERUZDT05GSUdfTElTVDoKKwkJaWYgKCFzeW1fZGVmY29uZmlnX2xpc3QpCisJCQlzeW1fZGVmY29uZmlnX2xpc3QgPSBjdXJyZW50X2VudHJ5LT5zeW07CisJCWVsc2UgaWYgKHN5bV9kZWZjb25maWdfbGlzdCAhPSBjdXJyZW50X2VudHJ5LT5zeW0pCisJCQl6Y29uZl9lcnJvcigidHJ5aW5nIHRvIHJlZGVmaW5lIGRlZmNvbmZpZyBzeW1ib2wiKTsKKwkJYnJlYWs7CisJY2FzZSBUX09QVF9FTlY6CisJCXByb3BfYWRkX2VudihhcmcpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWVudV92YWxpZGF0ZV9udW1iZXIoc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3Qgc3ltYm9sICpzeW0yKQoreworCXJldHVybiBzeW0yLT50eXBlID09IFNfSU5UIHx8IHN5bTItPnR5cGUgPT0gU19IRVggfHwKKwkgICAgICAgKHN5bTItPnR5cGUgPT0gU19VTktOT1dOICYmIHN5bV9zdHJpbmdfdmFsaWQoc3ltLCBzeW0yLT5uYW1lKSk7Cit9CisKK3N0YXRpYyB2b2lkIHN5bV9jaGVja19wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqc3ltMjsKKwlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQljYXNlIFBfREVGQVVMVDoKKwkJCWlmICgoc3ltLT50eXBlID09IFNfU1RSSU5HIHx8IHN5bS0+dHlwZSA9PSBTX0lOVCB8fCBzeW0tPnR5cGUgPT0gU19IRVgpICYmCisJCQkgICAgcHJvcC0+ZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCQlwcm9wX3dhcm4ocHJvcCwKKwkJCQkgICAgImRlZmF1bHQgZm9yIGNvbmZpZyBzeW1ib2wgJyVzJyIKKwkJCQkgICAgIiBtdXN0IGJlIGEgc2luZ2xlIHN5bWJvbCIsIHN5bS0+bmFtZSk7CisJCQlpZiAocHJvcC0+ZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCQlicmVhazsKKwkJCXN5bTIgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7CisJCQlpZiAoc3ltLT50eXBlID09IFNfSEVYIHx8IHN5bS0+dHlwZSA9PSBTX0lOVCkgeworCQkJCWlmICghbWVudV92YWxpZGF0ZV9udW1iZXIoc3ltLCBzeW0yKSkKKwkJCQkJcHJvcF93YXJuKHByb3AsCisJCQkJCSAgICAiJyVzJzogbnVtYmVyIGlzIGludmFsaWQiLAorCQkJCQkgICAgc3ltLT5uYW1lKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBfU0VMRUNUOgorCQkJc3ltMiA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsKKwkJCWlmIChzeW0tPnR5cGUgIT0gU19CT09MRUFOICYmIHN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFKQorCQkJCXByb3Bfd2Fybihwcm9wLAorCQkJCSAgICAiY29uZmlnIHN5bWJvbCAnJXMnIHVzZXMgc2VsZWN0LCBidXQgaXMgIgorCQkJCSAgICAibm90IGJvb2xlYW4gb3IgdHJpc3RhdGUiLCBzeW0tPm5hbWUpOworCQkJZWxzZSBpZiAoc3ltMi0+dHlwZSAhPSBTX1VOS05PV04gJiYKKwkJCSAgICAgICAgIHN5bTItPnR5cGUgIT0gU19CT09MRUFOICYmCisJCQkgICAgICAgICBzeW0yLT50eXBlICE9IFNfVFJJU1RBVEUpCisJCQkJcHJvcF93YXJuKHByb3AsCisJCQkJICAgICInJXMnIGhhcyB3cm9uZyB0eXBlLiAnc2VsZWN0JyBvbmx5ICIKKwkJCQkgICAgImFjY2VwdCBhcmd1bWVudHMgb2YgYm9vbGVhbiBhbmQgIgorCQkJCSAgICAidHJpc3RhdGUgdHlwZSIsIHN5bTItPm5hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgUF9SQU5HRToKKwkJCWlmIChzeW0tPnR5cGUgIT0gU19JTlQgJiYgc3ltLT50eXBlICE9IFNfSEVYKQorCQkJCXByb3Bfd2Fybihwcm9wLCAicmFuZ2UgaXMgb25seSBhbGxvd2VkICIKKwkJCQkgICAgICAgICAgICAgICAgImZvciBpbnQgb3IgaGV4IHN5bWJvbHMiKTsKKwkJCWlmICghbWVudV92YWxpZGF0ZV9udW1iZXIoc3ltLCBwcm9wLT5leHByLT5sZWZ0LnN5bSkgfHwKKwkJCSAgICAhbWVudV92YWxpZGF0ZV9udW1iZXIoc3ltLCBwcm9wLT5leHByLT5yaWdodC5zeW0pKQorCQkJCXByb3Bfd2Fybihwcm9wLCAicmFuZ2UgaXMgaW52YWxpZCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQk7CisJCX0KKwl9Cit9CisKK3ZvaWQgbWVudV9maW5hbGl6ZShzdHJ1Y3QgbWVudSAqcGFyZW50KQoreworCXN0cnVjdCBtZW51ICptZW51LCAqbGFzdF9tZW51OworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4cHIgKnBhcmVudGRlcCwgKmJhc2VkZXAsICpkZXAsICpkZXAyLCAqKmVwOworCisJc3ltID0gcGFyZW50LT5zeW07CisJaWYgKHBhcmVudC0+bGlzdCkgeworCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2Uoc3ltKSkgeworCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1VOS05PV04pIHsKKwkJCQkvKiBmaW5kIHRoZSBmaXJzdCBjaG9pY2UgdmFsdWUgdG8gZmluZCBvdXQgY2hvaWNlIHR5cGUgKi8KKwkJCQljdXJyZW50X2VudHJ5ID0gcGFyZW50OworCQkJCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKKwkJCQkJaWYgKG1lbnUtPnN5bSAmJiBtZW51LT5zeW0tPnR5cGUgIT0gU19VTktOT1dOKSB7CisJCQkJCQltZW51X3NldF90eXBlKG1lbnUtPnN5bS0+dHlwZSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCS8qIHNldCB0aGUgdHlwZSBvZiB0aGUgcmVtYWluaW5nIGNob2ljZSB2YWx1ZXMgKi8KKwkJCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKKwkJCQljdXJyZW50X2VudHJ5ID0gbWVudTsKKwkJCQlpZiAobWVudS0+c3ltICYmIG1lbnUtPnN5bS0+dHlwZSA9PSBTX1VOS05PV04pCisJCQkJCW1lbnVfc2V0X3R5cGUoc3ltLT50eXBlKTsKKwkJCX0KKwkJCXBhcmVudGRlcCA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSk7CisJCX0gZWxzZSBpZiAocGFyZW50LT5wcm9tcHQpCisJCQlwYXJlbnRkZXAgPSBwYXJlbnQtPnByb21wdC0+dmlzaWJsZS5leHByOworCQllbHNlCisJCQlwYXJlbnRkZXAgPSBwYXJlbnQtPmRlcDsKKworCQlmb3IgKG1lbnUgPSBwYXJlbnQtPmxpc3Q7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0KSB7CisJCQliYXNlZGVwID0gZXhwcl90cmFuc2Zvcm0obWVudS0+ZGVwKTsKKwkJCWJhc2VkZXAgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkocGFyZW50ZGVwKSwgYmFzZWRlcCk7CisJCQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhiYXNlZGVwKTsKKwkJCW1lbnUtPmRlcCA9IGJhc2VkZXA7CisJCQlpZiAobWVudS0+c3ltKQorCQkJCXByb3AgPSBtZW51LT5zeW0tPnByb3A7CisJCQllbHNlCisJCQkJcHJvcCA9IG1lbnUtPnByb21wdDsKKwkJCWZvciAoOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQkJCWlmIChwcm9wLT5tZW51ICE9IG1lbnUpCisJCQkJCWNvbnRpbnVlOworCQkJCWRlcCA9IGV4cHJfdHJhbnNmb3JtKHByb3AtPnZpc2libGUuZXhwcik7CisJCQkJZGVwID0gZXhwcl9hbGxvY19hbmQoZXhwcl9jb3B5KGJhc2VkZXApLCBkZXApOworCQkJCWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZGVwKTsKKwkJCQlpZiAobWVudS0+c3ltICYmIG1lbnUtPnN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFKQorCQkJCQlkZXAgPSBleHByX3RyYW5zX2Jvb2woZGVwKTsKKwkJCQlwcm9wLT52aXNpYmxlLmV4cHIgPSBkZXA7CisJCQkJaWYgKHByb3AtPnR5cGUgPT0gUF9TRUxFQ1QpIHsKKwkJCQkJc3RydWN0IHN5bWJvbCAqZXMgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7CisJCQkJCWVzLT5yZXZfZGVwLmV4cHIgPSBleHByX2FsbG9jX29yKGVzLT5yZXZfZGVwLmV4cHIsCisJCQkJCQkJZXhwcl9hbGxvY19hbmQoZXhwcl9hbGxvY19zeW1ib2wobWVudS0+c3ltKSwgZXhwcl9jb3B5KGRlcCkpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkKKwkJCW1lbnVfZmluYWxpemUobWVudSk7CisJfSBlbHNlIGlmIChzeW0pIHsKKwkJYmFzZWRlcCA9IHBhcmVudC0+cHJvbXB0ID8gcGFyZW50LT5wcm9tcHQtPnZpc2libGUuZXhwciA6IE5VTEw7CisJCWJhc2VkZXAgPSBleHByX3RyYW5zX2NvbXBhcmUoYmFzZWRlcCwgRV9VTkVRVUFMLCAmc3ltYm9sX25vKTsKKwkJYmFzZWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZXhwcl90cmFuc2Zvcm0oYmFzZWRlcCkpOworCQlsYXN0X21lbnUgPSBOVUxMOworCQlmb3IgKG1lbnUgPSBwYXJlbnQtPm5leHQ7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0KSB7CisJCQlkZXAgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnZpc2libGUuZXhwciA6IG1lbnUtPmRlcDsKKwkJCWlmICghZXhwcl9jb250YWluc19zeW1ib2woZGVwLCBzeW0pKQorCQkJCWJyZWFrOworCQkJaWYgKGV4cHJfZGVwZW5kc19zeW1ib2woZGVwLCBzeW0pKQorCQkJCWdvdG8gbmV4dDsKKwkJCWRlcCA9IGV4cHJfdHJhbnNfY29tcGFyZShkZXAsIEVfVU5FUVVBTCwgJnN5bWJvbF9ubyk7CisJCQlkZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBzKGV4cHJfdHJhbnNmb3JtKGRlcCkpOworCQkJZGVwMiA9IGV4cHJfY29weShiYXNlZGVwKTsKKwkJCWV4cHJfZWxpbWluYXRlX2VxKCZkZXAsICZkZXAyKTsKKwkJCWV4cHJfZnJlZShkZXApOworCQkJaWYgKCFleHByX2lzX3llcyhkZXAyKSkgeworCQkJCWV4cHJfZnJlZShkZXAyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWV4cHJfZnJlZShkZXAyKTsKKwkJbmV4dDoKKwkJCW1lbnVfZmluYWxpemUobWVudSk7CisJCQltZW51LT5wYXJlbnQgPSBwYXJlbnQ7CisJCQlsYXN0X21lbnUgPSBtZW51OworCQl9CisJCWlmIChsYXN0X21lbnUpIHsKKwkJCXBhcmVudC0+bGlzdCA9IHBhcmVudC0+bmV4dDsKKwkJCXBhcmVudC0+bmV4dCA9IGxhc3RfbWVudS0+bmV4dDsKKwkJCWxhc3RfbWVudS0+bmV4dCA9IE5VTEw7CisJCX0KKworCQlzeW0tPmRpcl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Ioc3ltLT5kaXJfZGVwLmV4cHIsIHBhcmVudC0+ZGVwKTsKKwl9CisJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgeworCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2Uoc3ltKSAmJgorCQkgICAgbWVudS0+c3ltICYmICFzeW1faXNfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkpIHsKKwkJCWN1cnJlbnRfZW50cnkgPSBtZW51OworCQkJbWVudS0+c3ltLT5mbGFncyB8PSBTWU1CT0xfQ0hPSUNFVkFMOworCQkJaWYgKCFtZW51LT5wcm9tcHQpCisJCQkJbWVudV93YXJuKG1lbnUsICJjaG9pY2UgdmFsdWUgbXVzdCBoYXZlIGEgcHJvbXB0Iik7CisJCQlmb3IgKHByb3AgPSBtZW51LT5zeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCQkJaWYgKHByb3AtPnR5cGUgPT0gUF9ERUZBVUxUKQorCQkJCQlwcm9wX3dhcm4ocHJvcCwgImRlZmF1bHRzIGZvciBjaG9pY2UgIgorCQkJCQkJICAidmFsdWVzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCQlpZiAocHJvcC0+bWVudSA9PSBtZW51KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAocHJvcC0+dHlwZSA9PSBQX1BST01QVCAmJgorCQkJCSAgICBwcm9wLT5tZW51LT5wYXJlbnQtPnN5bSAhPSBzeW0pCisJCQkJCXByb3Bfd2Fybihwcm9wLCAiY2hvaWNlIHZhbHVlIHVzZWQgb3V0c2lkZSBpdHMgY2hvaWNlIGdyb3VwIik7CisJCQl9CisJCQkvKiBOb24tdHJpc3RhdGUgY2hvaWNlIHZhbHVlcyBvZiB0cmlzdGF0ZSBjaG9pY2VzIG11c3QKKwkJCSAqIGRlcGVuZCBvbiB0aGUgY2hvaWNlIGJlaW5nIHNldCB0byBZLiBUaGUgY2hvaWNlCisJCQkgKiB2YWx1ZXMnIGRlcGVuZGVuY2llcyB3ZXJlIHByb3BhZ2F0ZWQgdG8gdGhlaXIKKwkJCSAqIHByb3BlcnRpZXMgYWJvdmUsIHNvIHRoZSBjaGFuZ2UgaGVyZSBtdXN0IGJlIHJlLQorCQkJICogcHJvcGFnYXRlZC4KKwkJCSAqLworCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFICYmIG1lbnUtPnN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFKSB7CisJCQkJYmFzZWRlcCA9IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0sICZzeW1ib2xfeWVzKTsKKwkJCQltZW51LT5kZXAgPSBleHByX2FsbG9jX2FuZChiYXNlZGVwLCBtZW51LT5kZXApOworCQkJCWZvciAocHJvcCA9IG1lbnUtPnN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKKwkJCQkJaWYgKHByb3AtPm1lbnUgIT0gbWVudSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlwcm9wLT52aXNpYmxlLmV4cHIgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkoYmFzZWRlcCksCisJCQkJCQkJCQkgICAgcHJvcC0+dmlzaWJsZS5leHByKTsKKwkJCQl9CisJCQl9CisJCQltZW51X2FkZF9zeW1ib2woUF9DSE9JQ0UsIHN5bSwgTlVMTCk7CisJCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOworCQkJZm9yIChlcCA9ICZwcm9wLT5leHByOyAqZXA7IGVwID0gJigqZXApLT5sZWZ0LmV4cHIpCisJCQkJOworCQkJKmVwID0gZXhwcl9hbGxvY19vbmUoRV9MSVNULCBOVUxMKTsKKwkJCSgqZXApLT5yaWdodC5zeW0gPSBtZW51LT5zeW07CisJCX0KKwkJaWYgKG1lbnUtPmxpc3QgJiYgKCFtZW51LT5wcm9tcHQgfHwgIW1lbnUtPnByb21wdC0+dGV4dCkpIHsKKwkJCWZvciAobGFzdF9tZW51ID0gbWVudS0+bGlzdDsgOyBsYXN0X21lbnUgPSBsYXN0X21lbnUtPm5leHQpIHsKKwkJCQlsYXN0X21lbnUtPnBhcmVudCA9IHBhcmVudDsKKwkJCQlpZiAoIWxhc3RfbWVudS0+bmV4dCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlsYXN0X21lbnUtPm5leHQgPSBtZW51LT5uZXh0OworCQkJbWVudS0+bmV4dCA9IG1lbnUtPmxpc3Q7CisJCQltZW51LT5saXN0ID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChzeW0gJiYgIShzeW0tPmZsYWdzICYgU1lNQk9MX1dBUk5FRCkpIHsKKwkJaWYgKHN5bS0+dHlwZSA9PSBTX1VOS05PV04pCisJCQltZW51X3dhcm4ocGFyZW50LCAiY29uZmlnIHN5bWJvbCBkZWZpbmVkIHdpdGhvdXQgdHlwZSIpOworCisJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkgJiYgIXBhcmVudC0+cHJvbXB0KQorCQkJbWVudV93YXJuKHBhcmVudCwgImNob2ljZSBtdXN0IGhhdmUgYSBwcm9tcHQiKTsKKworCQkvKiBDaGVjayBwcm9wZXJ0aWVzIGNvbm5lY3RlZCB0byB0aGlzIHN5bWJvbCAqLworCQlzeW1fY2hlY2tfcHJvcChzeW0pOworCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XQVJORUQ7CisJfQorCisJaWYgKHN5bSAmJiAhc3ltX2lzX29wdGlvbmFsKHN5bSkgJiYgcGFyZW50LT5wcm9tcHQpIHsKKwkJc3ltLT5yZXZfZGVwLmV4cHIgPSBleHByX2FsbG9jX29yKHN5bS0+cmV2X2RlcC5leHByLAorCQkJCWV4cHJfYWxsb2NfYW5kKHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHIsCisJCQkJCWV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbW9kKSkpOworCX0KK30KKworYm9vbCBtZW51X2hhc19wcm9tcHQoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJaWYgKCFtZW51LT5wcm9tcHQpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBtZW51X2lzX3Zpc2libGUoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwl0cmlzdGF0ZSB2aXNpYmxlOworCisJaWYgKCFtZW51LT5wcm9tcHQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChtZW51LT52aXNpYmlsaXR5KSB7CisJCWlmIChleHByX2NhbGNfdmFsdWUobWVudS0+dmlzaWJpbGl0eSkgPT0gbm8pCisJCQlyZXR1cm4gbm87CisJfQorCisJc3ltID0gbWVudS0+c3ltOworCWlmIChzeW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJdmlzaWJsZSA9IG1lbnUtPnByb21wdC0+dmlzaWJsZS50cmk7CisJfSBlbHNlCisJCXZpc2libGUgPSBtZW51LT5wcm9tcHQtPnZpc2libGUudHJpID0gZXhwcl9jYWxjX3ZhbHVlKG1lbnUtPnByb21wdC0+dmlzaWJsZS5leHByKTsKKworCWlmICh2aXNpYmxlICE9IG5vKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICghc3ltIHx8IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUobWVudS0+c3ltKSA9PSBubykKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCWlmIChtZW51X2lzX3Zpc2libGUoY2hpbGQpKSB7CisJCQlpZiAoc3ltKQorCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IGNoYXIgKm1lbnVfZ2V0X3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlpZiAobWVudS0+cHJvbXB0KQorCQlyZXR1cm4gbWVudS0+cHJvbXB0LT50ZXh0OworCWVsc2UgaWYgKG1lbnUtPnN5bSkKKwkJcmV0dXJuIG1lbnUtPnN5bS0+bmFtZTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG1lbnUgKm1lbnVfZ2V0X3Jvb3RfbWVudShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlyZXR1cm4gJnJvb3RtZW51OworfQorCitzdHJ1Y3QgbWVudSAqbWVudV9nZXRfcGFyZW50X21lbnUoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJZW51bSBwcm9wX3R5cGUgdHlwZTsKKworCWZvciAoOyBtZW51ICE9ICZyb290bWVudTsgbWVudSA9IG1lbnUtPnBhcmVudCkgeworCQl0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogMDsKKwkJaWYgKHR5cGUgPT0gUF9NRU5VKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBtZW51OworfQorCitib29sIG1lbnVfaGFzX2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJcmV0dXJuIG1lbnUtPmhlbHAgIT0gTlVMTDsKK30KKworY29uc3QgY2hhciAqbWVudV9nZXRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlpZiAobWVudS0+aGVscCkKKwkJcmV0dXJuIG1lbnUtPmhlbHA7CisJZWxzZQorCQlyZXR1cm4gIiI7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9wcm9tcHRfc3RyKHN0cnVjdCBnc3RyICpyLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3ApCit7CisJaW50IGksIGo7CisJc3RydWN0IG1lbnUgKnN1Ym1lbnVbOF0sICptZW51OworCisJc3RyX3ByaW50ZihyLCBfKCJQcm9tcHQ6ICVzXG4iKSwgXyhwcm9wLT50ZXh0KSk7CisJc3RyX3ByaW50ZihyLCBfKCIgIERlZmluZWQgYXQgJXM6JWRcbiIpLCBwcm9wLT5tZW51LT5maWxlLT5uYW1lLAorCQlwcm9wLT5tZW51LT5saW5lbm8pOworCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgeworCQlzdHJfYXBwZW5kKHIsIF8oIiAgRGVwZW5kcyBvbjogIikpOworCQlleHByX2dzdHJfcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCByKTsKKwkJc3RyX2FwcGVuZChyLCAiXG4iKTsKKwl9CisJbWVudSA9IHByb3AtPm1lbnUtPnBhcmVudDsKKwlmb3IgKGkgPSAwOyBtZW51ICE9ICZyb290bWVudSAmJiBpIDwgODsgbWVudSA9IG1lbnUtPnBhcmVudCkKKwkJc3VibWVudVtpKytdID0gbWVudTsKKwlpZiAoaSA+IDApIHsKKwkJc3RyX3ByaW50ZihyLCBfKCIgIExvY2F0aW9uOlxuIikpOworCQlmb3IgKGogPSA0OyAtLWkgPj0gMDsgaiArPSAyKSB7CisJCQltZW51ID0gc3VibWVudVtpXTsKKwkJCXN0cl9wcmludGYociwgIiUqYy0+ICVzIiwgaiwgJyAnLCBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSkpOworCQkJaWYgKG1lbnUtPnN5bSkgeworCQkJCXN0cl9wcmludGYociwgIiAoJXMgWz0lc10pIiwgbWVudS0+c3ltLT5uYW1lID8KKwkJCQkJbWVudS0+c3ltLT5uYW1lIDogXygiPGNob2ljZT4iKSwKKwkJCQkJc3ltX2dldF9zdHJpbmdfdmFsdWUobWVudS0+c3ltKSk7CisJCQl9CisJCQlzdHJfYXBwZW5kKHIsICJcbiIpOworCQl9CisJfQorfQorCit2b2lkIGdldF9zeW1ib2xfc3RyKHN0cnVjdCBnc3RyICpyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJYm9vbCBoaXQ7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJaWYgKHN5bSAmJiBzeW0tPm5hbWUpIHsKKwkJc3RyX3ByaW50ZihyLCAiU3ltYm9sOiAlcyBbPSVzXVxuIiwgc3ltLT5uYW1lLAorCQkJICAgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7CisJCXN0cl9wcmludGYociwgIlR5cGUgIDogJXNcbiIsIHN5bV90eXBlX25hbWUoc3ltLT50eXBlKSk7CisJCWlmIChzeW0tPnR5cGUgPT0gU19JTlQgfHwgc3ltLT50eXBlID09IFNfSEVYKSB7CisJCQlwcm9wID0gc3ltX2dldF9yYW5nZV9wcm9wKHN5bSk7CisJCQlpZiAocHJvcCkgeworCQkJCXN0cl9wcmludGYociwgIlJhbmdlIDogIik7CisJCQkJZXhwcl9nc3RyX3ByaW50KHByb3AtPmV4cHIsIHIpOworCQkJCXN0cl9hcHBlbmQociwgIlxuIik7CisJCQl9CisJCX0KKwl9CisJZm9yX2FsbF9wcm9tcHRzKHN5bSwgcHJvcCkKKwkJZ2V0X3Byb21wdF9zdHIociwgcHJvcCk7CisJaGl0ID0gZmFsc2U7CisJZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgcHJvcCwgUF9TRUxFQ1QpIHsKKwkJaWYgKCFoaXQpIHsKKwkJCXN0cl9hcHBlbmQociwgIiAgU2VsZWN0czogIik7CisJCQloaXQgPSB0cnVlOworCQl9IGVsc2UKKwkJCXN0cl9wcmludGYociwgIiAmJiAiKTsKKwkJZXhwcl9nc3RyX3ByaW50KHByb3AtPmV4cHIsIHIpOworCX0KKwlpZiAoaGl0KQorCQlzdHJfYXBwZW5kKHIsICJcbiIpOworCWlmIChzeW0tPnJldl9kZXAuZXhwcikgeworCQlzdHJfYXBwZW5kKHIsIF8oIiAgU2VsZWN0ZWQgYnk6ICIpKTsKKwkJZXhwcl9nc3RyX3ByaW50KHN5bS0+cmV2X2RlcC5leHByLCByKTsKKwkJc3RyX2FwcGVuZChyLCAiXG4iKTsKKwl9CisJc3RyX2FwcGVuZChyLCAiXG5cbiIpOworfQorCitzdHJ1Y3QgZ3N0ciBnZXRfcmVsYXRpb25zX3N0cihzdHJ1Y3Qgc3ltYm9sICoqc3ltX2FycikKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IGdzdHIgcmVzID0gc3RyX25ldygpOworCWludCBpOworCisJZm9yIChpID0gMDsgc3ltX2FyciAmJiAoc3ltID0gc3ltX2FycltpXSk7IGkrKykKKwkJZ2V0X3N5bWJvbF9zdHIoJnJlcywgc3ltKTsKKwlpZiAoIWkpCisJCXN0cl9hcHBlbmQoJnJlcywgXygiTm8gbWF0Y2hlcyBmb3VuZC5cbiIpKTsKKwlyZXR1cm4gcmVzOworfQorCisKK3ZvaWQgbWVudV9nZXRfZXh0X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBnc3RyICpoZWxwKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwljb25zdCBjaGFyICpoZWxwX3RleHQgPSBub2hlbHBfdGV4dDsKKworCWlmIChtZW51X2hhc19oZWxwKG1lbnUpKSB7CisJCWlmIChzeW0tPm5hbWUpCisJCQlzdHJfcHJpbnRmKGhlbHAsICIlcyVzOlxuXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUpOworCQloZWxwX3RleHQgPSBtZW51X2dldF9oZWxwKG1lbnUpOworCX0KKwlzdHJfcHJpbnRmKGhlbHAsICIlc1xuIiwgXyhoZWxwX3RleHQpKTsKKwlpZiAoc3ltKQorCQlnZXRfc3ltYm9sX3N0cihoZWxwLCBzeW0pOworfQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jb25maWcvc3ltYm9sLmMgYi9jYXJsOTE3MGZ3L2NvbmZpZy9zeW1ib2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmEzYzQwCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jb25maWcvc3ltYm9sLmMKQEAgLTAsMCArMSwxMzEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8cmVnZXguaD4KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorCisjaW5jbHVkZSAibGtjLmgiCisKK3N0cnVjdCBzeW1ib2wgc3ltYm9sX3llcyA9IHsKKwkubmFtZSA9ICJ5IiwKKwkuY3VyciA9IHsgInkiLCB5ZXMgfSwKKwkuZmxhZ3MgPSBTWU1CT0xfQ09OU1R8U1lNQk9MX1ZBTElELAorfSwgc3ltYm9sX21vZCA9IHsKKwkubmFtZSA9ICJtIiwKKwkuY3VyciA9IHsgIm0iLCBtb2QgfSwKKwkuZmxhZ3MgPSBTWU1CT0xfQ09OU1R8U1lNQk9MX1ZBTElELAorfSwgc3ltYm9sX25vID0geworCS5uYW1lID0gIm4iLAorCS5jdXJyID0geyAibiIsIG5vIH0sCisJLmZsYWdzID0gU1lNQk9MX0NPTlNUfFNZTUJPTF9WQUxJRCwKK30sIHN5bWJvbF9lbXB0eSA9IHsKKwkubmFtZSA9ICIiLAorCS5jdXJyID0geyAiIiwgbm8gfSwKKwkuZmxhZ3MgPSBTWU1CT0xfVkFMSUQsCit9OworCitzdHJ1Y3Qgc3ltYm9sICpzeW1fZGVmY29uZmlnX2xpc3Q7CitzdHJ1Y3Qgc3ltYm9sICptb2R1bGVzX3N5bTsKK3RyaXN0YXRlIG1vZHVsZXNfdmFsOworCitzdHJ1Y3QgZXhwciAqc3ltX2Vudl9saXN0OworCitzdGF0aWMgdm9pZCBzeW1fYWRkX2RlZmF1bHQoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpkZWYpCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wID0gcHJvcF9hbGxvYyhQX0RFRkFVTFQsIHN5bSk7CisKKwlwcm9wLT5leHByID0gZXhwcl9hbGxvY19zeW1ib2woc3ltX2xvb2t1cChkZWYsIFNZTUJPTF9DT05TVCkpOworfQorCit2b2lkIHN5bV9pbml0KHZvaWQpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCB1dHNuYW1lIHV0czsKKwlzdGF0aWMgYm9vbCBpbml0ZWQgPSBmYWxzZTsKKworCWlmIChpbml0ZWQpCisJCXJldHVybjsKKwlpbml0ZWQgPSB0cnVlOworCisJdW5hbWUoJnV0cyk7CisKKwlzeW0gPSBzeW1fbG9va3VwKCJVTkFNRV9SRUxFQVNFIiwgMCk7CisJc3ltLT50eXBlID0gU19TVFJJTkc7CisJc3ltLT5mbGFncyB8PSBTWU1CT0xfQVVUTzsKKwlzeW1fYWRkX2RlZmF1bHQoc3ltLCB1dHMucmVsZWFzZSk7Cit9CisKK2VudW0gc3ltYm9sX3R5cGUgc3ltX2dldF90eXBlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwllbnVtIHN5bWJvbF90eXBlIHR5cGUgPSBzeW0tPnR5cGU7CisKKwlpZiAodHlwZSA9PSBTX1RSSVNUQVRFKSB7CisJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgc3ltLT52aXNpYmxlID09IHllcykKKwkJCXR5cGUgPSBTX0JPT0xFQU47CisJCWVsc2UgaWYgKG1vZHVsZXNfdmFsID09IG5vKQorCQkJdHlwZSA9IFNfQk9PTEVBTjsKKwl9CisJcmV0dXJuIHR5cGU7Cit9CisKK2NvbnN0IGNoYXIgKnN5bV90eXBlX25hbWUoZW51bSBzeW1ib2xfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCQlyZXR1cm4gImJvb2xlYW4iOworCWNhc2UgU19UUklTVEFURToKKwkJcmV0dXJuICJ0cmlzdGF0ZSI7CisJY2FzZSBTX0lOVDoKKwkJcmV0dXJuICJpbnRlZ2VyIjsKKwljYXNlIFNfSEVYOgorCQlyZXR1cm4gImhleCI7CisJY2FzZSBTX1NUUklORzoKKwkJcmV0dXJuICJzdHJpbmciOworCWNhc2UgU19VTktOT1dOOgorCQlyZXR1cm4gInVua25vd24iOworCWNhc2UgU19PVEhFUjoKKwkJYnJlYWs7CisJfQorCXJldHVybiAiPz8/IjsKK30KKworc3RydWN0IHByb3BlcnR5ICpzeW1fZ2V0X2Nob2ljZV9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlmb3JfYWxsX2Nob2ljZXMoc3ltLCBwcm9wKQorCQlyZXR1cm4gcHJvcDsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IHByb3BlcnR5ICpzeW1fZ2V0X2Vudl9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBwcm9wLCBQX0VOVikKKwkJcmV0dXJuIHByb3A7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCWZvcl9hbGxfZGVmYXVsdHMoc3ltLCBwcm9wKSB7CisJCXByb3AtPnZpc2libGUudHJpID0gZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcik7CisJCWlmIChwcm9wLT52aXNpYmxlLnRyaSAhPSBubykKKwkJCXJldHVybiBwcm9wOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9yYW5nZV9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBwcm9wLCBQX1JBTkdFKSB7CisJCXByb3AtPnZpc2libGUudHJpID0gZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcik7CisJCWlmIChwcm9wLT52aXNpYmxlLnRyaSAhPSBubykKKwkJCXJldHVybiBwcm9wOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBzeW1fZ2V0X3JhbmdlX3ZhbChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGludCBiYXNlKQoreworCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfSU5UOgorCQliYXNlID0gMTA7CisJCWJyZWFrOworCWNhc2UgU19IRVg6CisJCWJhc2UgPSAxNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBzdHJ0b2woc3ltLT5jdXJyLnZhbCwgTlVMTCwgYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHN5bV92YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCWludCBiYXNlLCB2YWwsIHZhbDI7CisJY2hhciBzdHJbNjRdOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfSU5UOgorCQliYXNlID0gMTA7CisJCWJyZWFrOworCWNhc2UgU19IRVg6CisJCWJhc2UgPSAxNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKwlwcm9wID0gc3ltX2dldF9yYW5nZV9wcm9wKHN5bSk7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisJdmFsID0gc3RydG9sKHN5bS0+Y3Vyci52YWwsIE5VTEwsIGJhc2UpOworCXZhbDIgPSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5sZWZ0LnN5bSwgYmFzZSk7CisJaWYgKHZhbCA+PSB2YWwyKSB7CisJCXZhbDIgPSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5yaWdodC5zeW0sIGJhc2UpOworCQlpZiAodmFsIDw9IHZhbDIpCisJCQlyZXR1cm47CisJfQorCWlmIChzeW0tPnR5cGUgPT0gU19JTlQpCisJCXNwcmludGYoc3RyLCAiJWQiLCB2YWwyKTsKKwllbHNlCisJCXNwcmludGYoc3RyLCAiMHgleCIsIHZhbDIpOworCXN5bS0+Y3Vyci52YWwgPSBzdHJkdXAoc3RyKTsKK30KKworc3RhdGljIHZvaWQgc3ltX2NhbGNfdmlzaWJpbGl0eShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXRyaXN0YXRlIHRyaTsKKworCS8qIGFueSBwcm9tcHQgdmlzaWJsZT8gKi8KKwl0cmkgPSBubzsKKwlmb3JfYWxsX3Byb21wdHMoc3ltLCBwcm9wKSB7CisJCXByb3AtPnZpc2libGUudHJpID0gZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcik7CisJCXRyaSA9IEVYUFJfT1IodHJpLCBwcm9wLT52aXNpYmxlLnRyaSk7CisJfQorCWlmICh0cmkgPT0gbW9kICYmIChzeW0tPnR5cGUgIT0gU19UUklTVEFURSB8fCBtb2R1bGVzX3ZhbCA9PSBubykpCisJCXRyaSA9IHllczsKKwlpZiAoc3ltLT52aXNpYmxlICE9IHRyaSkgeworCQlzeW0tPnZpc2libGUgPSB0cmk7CisJCXN5bV9zZXRfY2hhbmdlZChzeW0pOworCX0KKwlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKQorCQlyZXR1cm47CisJLyogZGVmYXVsdGluZyB0byAieWVzIiBpZiBubyBleHBsaWNpdCAiZGVwZW5kcyBvbiIgYXJlIGdpdmVuICovCisJdHJpID0geWVzOworCWlmIChzeW0tPmRpcl9kZXAuZXhwcikKKwkJdHJpID0gZXhwcl9jYWxjX3ZhbHVlKHN5bS0+ZGlyX2RlcC5leHByKTsKKwlpZiAodHJpID09IG1vZCkKKwkJdHJpID0geWVzOworCWlmIChzeW0tPmRpcl9kZXAudHJpICE9IHRyaSkgeworCQlzeW0tPmRpcl9kZXAudHJpID0gdHJpOworCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKKwl9CisJdHJpID0gbm87CisJaWYgKHN5bS0+cmV2X2RlcC5leHByKQorCQl0cmkgPSBleHByX2NhbGNfdmFsdWUoc3ltLT5yZXZfZGVwLmV4cHIpOworCWlmICh0cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikKKwkJdHJpID0geWVzOworCWlmIChzeW0tPnJldl9kZXAudHJpICE9IHRyaSkgeworCQlzeW0tPnJldl9kZXAudHJpID0gdHJpOworCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKKwl9Cit9CisKKy8qCisgKiBGaW5kIHRoZSBkZWZhdWx0IHN5bWJvbCBmb3IgYSBjaG9pY2UuCisgKiBGaXJzdCB0cnkgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgY2hvaWNlIHN5bWJvbAorICogTmV4dCBsb2NhdGUgdGhlIGZpcnN0IHZpc2libGUgY2hvaWNlIHZhbHVlCisgKiBSZXR1cm4gTlVMTCBpZiBub25lIHdhcyBmb3VuZAorICovCitzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hvaWNlX2RlZmF1bHQoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByICplOworCisJLyogYW55IG9mIHRoZSBkZWZhdWx0cyB2aXNpYmxlPyAqLworCWZvcl9hbGxfZGVmYXVsdHMoc3ltLCBwcm9wKSB7CisJCXByb3AtPnZpc2libGUudHJpID0gZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcik7CisJCWlmIChwcm9wLT52aXNpYmxlLnRyaSA9PSBubykKKwkJCWNvbnRpbnVlOworCQlkZWZfc3ltID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAhPSBubykKKwkJCXJldHVybiBkZWZfc3ltOworCX0KKworCS8qIGp1c3QgZ2V0IHRoZSBmaXJzdCB2aXNpYmxlIHZhbHVlICovCisJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIGRlZl9zeW0pCisJCWlmIChkZWZfc3ltLT52aXNpYmxlICE9IG5vKQorCQkJcmV0dXJuIGRlZl9zeW07CisKKwkvKiBmYWlsZWQgdG8gbG9jYXRlIGFueSBkZWZhdWx0cyAqLworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2NhbGNfY2hvaWNlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZTsKKwlpbnQgZmxhZ3M7CisKKwkvKiBmaXJzdCBjYWxjdWxhdGUgYWxsIGNob2ljZSB2YWx1ZXMnIHZpc2liaWxpdGllcyAqLworCWZsYWdzID0gc3ltLT5mbGFnczsKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOworCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgZGVmX3N5bSkgeworCQlzeW1fY2FsY192aXNpYmlsaXR5KGRlZl9zeW0pOworCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAhPSBubykKKwkJCWZsYWdzICY9IGRlZl9zeW0tPmZsYWdzOworCX0KKworCXN5bS0+ZmxhZ3MgJj0gZmxhZ3MgfCB+U1lNQk9MX0RFRl9VU0VSOworCisJLyogaXMgdGhlIHVzZXIgY2hvaWNlIHZpc2libGU/ICovCisJZGVmX3N5bSA9IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsKKwlpZiAoZGVmX3N5bSAmJiBkZWZfc3ltLT52aXNpYmxlICE9IG5vKQorCQlyZXR1cm4gZGVmX3N5bTsKKworCWRlZl9zeW0gPSBzeW1fY2hvaWNlX2RlZmF1bHQoc3ltKTsKKworCWlmIChkZWZfc3ltID09IE5VTEwpCisJCS8qIG5vIGNob2ljZT8gcmVzZXQgdHJpc3RhdGUgdmFsdWUgKi8KKwkJc3ltLT5jdXJyLnRyaSA9IG5vOworCisJcmV0dXJuIGRlZl9zeW07Cit9CisKK3ZvaWQgc3ltX2NhbGNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBzeW1ib2xfdmFsdWUgbmV3dmFsLCBvbGR2YWw7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByICplOworCisJaWYgKCFzeW0pCisJCXJldHVybjsKKworCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX1ZBTElEKQorCQlyZXR1cm47CisJc3ltLT5mbGFncyB8PSBTWU1CT0xfVkFMSUQ7CisKKwlvbGR2YWwgPSBzeW0tPmN1cnI7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwljYXNlIFNfU1RSSU5HOgorCQluZXd2YWwgPSBzeW1ib2xfZW1wdHkuY3VycjsKKwkJYnJlYWs7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQluZXd2YWwgPSBzeW1ib2xfbm8uY3VycjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3ltLT5jdXJyLnZhbCA9IHN5bS0+bmFtZTsKKwkJc3ltLT5jdXJyLnRyaSA9IG5vOworCQlyZXR1cm47CisJfQorCWlmICghc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKQorCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7CisKKwlzeW1fY2FsY192aXNpYmlsaXR5KHN5bSk7CisKKwkvKiBzZXQgZGVmYXVsdCBpZiByZWN1cnNpdmVseSBjYWxsZWQgKi8KKwlzeW0tPmN1cnIgPSBuZXd2YWw7CisKKwlzd2l0Y2ggKHN5bV9nZXRfdHlwZShzeW0pKSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpIHsKKwkJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CisJCQluZXd2YWwudHJpID0gKHByb3BfZ2V0X3N5bWJvbChwcm9wKS0+Y3Vyci52YWwgPT0gc3ltKSA/IHllcyA6IG5vOworCQl9IGVsc2UgeworCQkJaWYgKHN5bS0+dmlzaWJsZSAhPSBubykgeworCQkJCS8qIGlmIHRoZSBzeW1ib2wgaXMgdmlzaWJsZSB1c2UgdGhlIHVzZXIgdmFsdWUKKwkJCQkgKiBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB0cnkgdGhlIGRlZmF1bHQgdmFsdWUKKwkJCQkgKi8KKwkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKKwkJCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pKSB7CisJCQkJCW5ld3ZhbC50cmkgPSBFWFBSX0FORChzeW0tPmRlZltTX0RFRl9VU0VSXS50cmksCisJCQkJCQkJICAgICAgc3ltLT52aXNpYmxlKTsKKwkJCQkJZ290byBjYWxjX25ld3ZhbDsKKwkJCQl9CisJCQl9CisJCQlpZiAoc3ltLT5yZXZfZGVwLnRyaSAhPSBubykKKwkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKKwkJCWlmICghc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCQkJcHJvcCA9IHN5bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7CisJCQkJaWYgKHByb3ApIHsKKwkJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQkJCW5ld3ZhbC50cmkgPSBFWFBSX0FORChleHByX2NhbGNfdmFsdWUocHJvcC0+ZXhwciksCisJCQkJCQkJICAgICAgcHJvcC0+dmlzaWJsZS50cmkpOworCQkJCX0KKwkJCX0KKwkJY2FsY19uZXd2YWw6CisJCQlpZiAoc3ltLT5kaXJfZGVwLnRyaSA9PSBubyAmJiBzeW0tPnJldl9kZXAudHJpICE9IG5vKSB7CisJCQkJc3RydWN0IGV4cHIgKmU7CisJCQkJZSA9IGV4cHJfc2ltcGxpZnlfdW5tZXRfZGVwKHN5bS0+cmV2X2RlcC5leHByLAorCQkJCSAgICBzeW0tPmRpcl9kZXAuZXhwcik7CisJCQkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiAoIik7CisJCQkJZXhwcl9mcHJpbnQoZSwgc3RkZXJyKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIikgc2VsZWN0cyAlcyB3aGljaCBoYXMgdW5tZXQgZGlyZWN0IGRlcGVuZGVuY2llcyAoIiwKKwkJCQkJc3ltLT5uYW1lKTsKKwkJCQlleHByX2ZwcmludChzeW0tPmRpcl9kZXAuZXhwciwgc3RkZXJyKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIilcbiIpOworCQkJCWV4cHJfZnJlZShlKTsKKwkJCX0KKwkJCW5ld3ZhbC50cmkgPSBFWFBSX09SKG5ld3ZhbC50cmksIHN5bS0+cmV2X2RlcC50cmkpOworCQl9CisJCWlmIChuZXd2YWwudHJpID09IG1vZCAmJiBzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4pCisJCQluZXd2YWwudHJpID0geWVzOworCQlicmVhazsKKwljYXNlIFNfU1RSSU5HOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX0lOVDoKKwkJaWYgKHN5bS0+dmlzaWJsZSAhPSBubykgeworCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pKSB7CisJCQkJbmV3dmFsLnZhbCA9IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlwcm9wID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsKKwkJaWYgKHByb3ApIHsKKwkJCXN0cnVjdCBzeW1ib2wgKmRzID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQkJaWYgKGRzKSB7CisJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQkJc3ltX2NhbGNfdmFsdWUoZHMpOworCQkJCW5ld3ZhbC52YWwgPSBkcy0+Y3Vyci52YWw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKworCXN5bS0+Y3VyciA9IG5ld3ZhbDsKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIG5ld3ZhbC50cmkgPT0geWVzKQorCQlzeW0tPmN1cnIudmFsID0gc3ltX2NhbGNfY2hvaWNlKHN5bSk7CisJc3ltX3ZhbGlkYXRlX3JhbmdlKHN5bSk7CisKKwlpZiAobWVtY21wKCZvbGR2YWwsICZzeW0tPmN1cnIsIHNpemVvZihvbGR2YWwpKSkgeworCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKKwkJaWYgKG1vZHVsZXNfc3ltID09IHN5bSkgeworCQkJc3ltX3NldF9hbGxfY2hhbmdlZCgpOworCQkJbW9kdWxlc192YWwgPSBtb2R1bGVzX3N5bS0+Y3Vyci50cmk7CisJCX0KKwl9CisKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCXN0cnVjdCBzeW1ib2wgKmNob2ljZV9zeW07CisKKwkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKKwkJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBjaG9pY2Vfc3ltKSB7CisJCQlpZiAoKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpICYmCisJCQkgICAgY2hvaWNlX3N5bS0+dmlzaWJsZSAhPSBubykKKwkJCQljaG9pY2Vfc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DSEFOR0VEKQorCQkJCXN5bV9zZXRfY2hhbmdlZChjaG9pY2Vfc3ltKTsKKwkJfQorCX0KKworCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0FVVE8pCisJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9XUklURTsKK30KKwordm9pZCBzeW1fY2xlYXJfYWxsX3ZhbGlkKHZvaWQpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBpOworCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkKKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1ZBTElEOworCXN5bV9hZGRfY2hhbmdlX2NvdW50KDEpOworCWlmIChtb2R1bGVzX3N5bSkKKwkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworfQorCit2b2lkIHN5bV9zZXRfY2hhbmdlZChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJc3ltLT5mbGFncyB8PSBTWU1CT0xfQ0hBTkdFRDsKKwlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCWlmIChwcm9wLT5tZW51KQorCQkJcHJvcC0+bWVudS0+ZmxhZ3MgfD0gTUVOVV9DSEFOR0VEOworCX0KK30KKwordm9pZCBzeW1fc2V0X2FsbF9jaGFuZ2VkKHZvaWQpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBpOworCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7Cit9CisKK2Jvb2wgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIHRyaXN0YXRlIHZhbCkKK3sKKwlpbnQgdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOworCisJaWYgKHN5bS0+dmlzaWJsZSA9PSBubykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHR5cGUgIT0gU19CT09MRUFOICYmIHR5cGUgIT0gU19UUklTVEFURSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHR5cGUgPT0gU19CT09MRUFOICYmIHZhbCA9PSBtb2QpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3ltLT52aXNpYmxlIDw9IHN5bS0+cmV2X2RlcC50cmkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpCisJCXJldHVybiB2YWwgPT0geWVzOworCXJldHVybiB2YWwgPj0gc3ltLT5yZXZfZGVwLnRyaSAmJiB2YWwgPD0gc3ltLT52aXNpYmxlOworfQorCitib29sIHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltLCB0cmlzdGF0ZSB2YWwpCit7CisJdHJpc3RhdGUgb2xkdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOworCisJaWYgKG9sZHZhbCAhPSB2YWwgJiYgIXN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB2YWwpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0RFRl9VU0VSKSkgeworCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJfQorCS8qCisJICogc2V0dGluZyBhIGNob2ljZSB2YWx1ZSBhbHNvIHJlc2V0cyB0aGUgbmV3IGZsYWcgb2YgdGhlIGNob2ljZQorCSAqIHN5bWJvbCBhbmQgYWxsIG90aGVyIGNob2ljZSB2YWx1ZXMuCisJICovCisJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiB2YWwgPT0geWVzKSB7CisJCXN0cnVjdCBzeW1ib2wgKmNzID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKSk7CisJCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwkJc3RydWN0IGV4cHIgKmU7CisKKwkJY3MtPmRlZltTX0RFRl9VU0VSXS52YWwgPSBzeW07CisJCWNzLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7CisJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNzKTsKKwkJZm9yIChlID0gcHJvcC0+ZXhwcjsgZTsgZSA9IGUtPmxlZnQuZXhwcikgeworCQkJaWYgKGUtPnJpZ2h0LnN5bS0+dmlzaWJsZSAhPSBubykKKwkJCQllLT5yaWdodC5zeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJfQorCX0KKworCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHZhbDsKKwlpZiAob2xkdmFsICE9IHZhbCkKKwkJc3ltX2NsZWFyX2FsbF92YWxpZCgpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3RyaXN0YXRlIHN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXRyaXN0YXRlIG9sZHZhbCwgbmV3dmFsOworCisJb2xkdmFsID0gbmV3dmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOworCWRvIHsKKwkJc3dpdGNoIChuZXd2YWwpIHsKKwkJY2FzZSBubzoKKwkJCW5ld3ZhbCA9IG1vZDsKKwkJCWJyZWFrOworCQljYXNlIG1vZDoKKwkJCW5ld3ZhbCA9IHllczsKKwkJCWJyZWFrOworCQljYXNlIHllczoKKwkJCW5ld3ZhbCA9IG5vOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBuZXd2YWwpKQorCQkJYnJlYWs7CisJfSB3aGlsZSAob2xkdmFsICE9IG5ld3ZhbCk7CisJcmV0dXJuIG5ld3ZhbDsKK30KKworYm9vbCBzeW1fc3RyaW5nX3ZhbGlkKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqc3RyKQoreworCXNpZ25lZCBjaGFyIGNoOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfU1RSSU5HOgorCQlyZXR1cm4gdHJ1ZTsKKwljYXNlIFNfSU5UOgorCQljaCA9ICpzdHIrKzsKKwkJaWYgKGNoID09ICctJykKKwkJCWNoID0gKnN0cisrOworCQlpZiAoIWlzZGlnaXQoY2gpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoY2ggPT0gJzAnICYmICpzdHIgIT0gMCkKKwkJCXJldHVybiBmYWxzZTsKKwkJd2hpbGUgKChjaCA9ICpzdHIrKykpIHsKKwkJCWlmICghaXNkaWdpdChjaCkpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCWNhc2UgU19IRVg6CisJCWlmIChzdHJbMF0gPT0gJzAnICYmIChzdHJbMV0gPT0gJ3gnIHx8IHN0clsxXSA9PSAnWCcpKQorCQkJc3RyICs9IDI7CisJCWNoID0gKnN0cisrOworCQlkbyB7CisJCQlpZiAoIWlzeGRpZ2l0KGNoKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0gd2hpbGUgKChjaCA9ICpzdHIrKykpOworCQlyZXR1cm4gdHJ1ZTsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAoc3RyWzBdKSB7CisJCWNhc2UgJ3knOiBjYXNlICdZJzoKKwkJY2FzZSAnbSc6IGNhc2UgJ00nOgorCQljYXNlICduJzogY2FzZSAnTic6CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworYm9vbCBzeW1fc3RyaW5nX3dpdGhpbl9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJaW50IHZhbDsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX1NUUklORzoKKwkJcmV0dXJuIHN5bV9zdHJpbmdfdmFsaWQoc3ltLCBzdHIpOworCWNhc2UgU19JTlQ6CisJCWlmICghc3ltX3N0cmluZ192YWxpZChzeW0sIHN0cikpCisJCQlyZXR1cm4gZmFsc2U7CisJCXByb3AgPSBzeW1fZ2V0X3JhbmdlX3Byb3Aoc3ltKTsKKwkJaWYgKCFwcm9wKQorCQkJcmV0dXJuIHRydWU7CisJCXZhbCA9IHN0cnRvbChzdHIsIE5VTEwsIDEwKTsKKwkJcmV0dXJuIHZhbCA+PSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5sZWZ0LnN5bSwgMTApICYmCisJCSAgICAgICB2YWwgPD0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQuc3ltLCAxMCk7CisJY2FzZSBTX0hFWDoKKwkJaWYgKCFzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgc3RyKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJcHJvcCA9IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOworCQlpZiAoIXByb3ApCisJCQlyZXR1cm4gdHJ1ZTsKKwkJdmFsID0gc3RydG9sKHN0ciwgTlVMTCwgMTYpOworCQlyZXR1cm4gdmFsID49IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPmxlZnQuc3ltLCAxNikgJiYKKwkJICAgICAgIHZhbCA8PSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5yaWdodC5zeW0sIDE2KTsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAoc3RyWzBdKSB7CisJCWNhc2UgJ3knOiBjYXNlICdZJzoKKwkJCXJldHVybiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKTsKKwkJY2FzZSAnbSc6IGNhc2UgJ00nOgorCQkJcmV0dXJuIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpOworCQljYXNlICduJzogY2FzZSAnTic6CisJCQlyZXR1cm4gc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG5vKTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworYm9vbCBzeW1fc2V0X3N0cmluZ192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKm5ld3ZhbCkKK3sKKwljb25zdCBjaGFyICpvbGR2YWw7CisJY2hhciAqdmFsOworCWludCBzaXplOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAobmV3dmFsWzBdKSB7CisJCWNhc2UgJ3knOiBjYXNlICdZJzoKKwkJCXJldHVybiBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgeWVzKTsKKwkJY2FzZSAnbSc6IGNhc2UgJ00nOgorCQkJcmV0dXJuIHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBtb2QpOworCQljYXNlICduJzogY2FzZSAnTic6CisJCQlyZXR1cm4gc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5vKTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJZGVmYXVsdDoKKwkJOworCX0KKworCWlmICghc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3ltLCBuZXd2YWwpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0RFRl9VU0VSKSkgeworCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJfQorCisJb2xkdmFsID0gc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsOworCXNpemUgPSBzdHJsZW4obmV3dmFsKSArIDE7CisJaWYgKHN5bS0+dHlwZSA9PSBTX0hFWCAmJiAobmV3dmFsWzBdICE9ICcwJyB8fCAobmV3dmFsWzFdICE9ICd4JyAmJiBuZXd2YWxbMV0gIT0gJ1gnKSkpIHsKKwkJc2l6ZSArPSAyOworCQlzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwgPSB2YWwgPSBtYWxsb2Moc2l6ZSk7CisJCSp2YWwrKyA9ICcwJzsKKwkJKnZhbCsrID0gJ3gnOworCX0gZWxzZSBpZiAoIW9sZHZhbCB8fCBzdHJjbXAob2xkdmFsLCBuZXd2YWwpKQorCQlzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwgPSB2YWwgPSBtYWxsb2Moc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gdHJ1ZTsKKworCXN0cmNweSh2YWwsIG5ld3ZhbCk7CisJZnJlZSgodm9pZCAqKW9sZHZhbCk7CisJc3ltX2NsZWFyX2FsbF92YWxpZCgpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBkZWZhdWx0IHZhbHVlIGFzc29jaWF0ZWQgdG8gYSBzeW1ib2wuCisgKiBGb3IgdHJpc3RhdGUgc3ltYm9sIGhhbmRsZSB0aGUgbW9kdWxlcz1uIGNhc2UKKyAqIGluIHdoaWNoIGNhc2UgIm0iIGJlY29tZXMgInkiLgorICogSWYgdGhlIHN5bWJvbCBkb2VzIG5vdCBoYXZlIGFueSBkZWZhdWx0IHRoZW4gZmFsbGJhY2sKKyAqIHRvIHRoZSBmaXhlZCBkZWZhdWx0IHZhbHVlcy4KKyAqLworY29uc3QgY2hhciAqc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wgKmRzOworCWNvbnN0IGNoYXIgKnN0cjsKKwl0cmlzdGF0ZSB2YWw7CisKKwlzeW1fY2FsY192aXNpYmlsaXR5KHN5bSk7CisJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworCXZhbCA9IHN5bWJvbF9uby5jdXJyLnRyaTsKKwlzdHIgPSBzeW1ib2xfZW1wdHkuY3Vyci52YWw7CisKKwkvKiBJZiBzeW1ib2wgaGFzIGEgZGVmYXVsdCB2YWx1ZSBsb29rIGl0IHVwICovCisJcHJvcCA9IHN5bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7CisJaWYgKHByb3AgIT0gTlVMTCkgeworCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQljYXNlIFNfQk9PTEVBTjoKKwkJY2FzZSBTX1RSSVNUQVRFOgorCQkJLyogVGhlIHZpc2liaWxpdHkgbWF5IGxpbWl0IHRoZSB2YWx1ZSBmcm9tIHllcyA9PiBtb2QgKi8KKwkJCXZhbCA9IEVYUFJfQU5EKGV4cHJfY2FsY192YWx1ZShwcm9wLT5leHByKSwgcHJvcC0+dmlzaWJsZS50cmkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogVGhlIGZvbGxvd2luZyBmYWlscyB0byBoYW5kbGUgdGhlIHNpdHVhdGlvbgorCQkJICogd2hlcmUgYSBkZWZhdWx0IHZhbHVlIGlzIGZ1cnRoZXIgbGltaXRlZCBieQorCQkJICogdGhlIHZhbGlkIHJhbmdlLgorCQkJICovCisJCQlkcyA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsKKwkJCWlmIChkcyAhPSBOVUxMKSB7CisJCQkJc3ltX2NhbGNfdmFsdWUoZHMpOworCQkJCXN0ciA9IChjb25zdCBjaGFyICopZHMtPmN1cnIudmFsOworCQkJfQorCQl9CisJfQorCisJLyogSGFuZGxlIHNlbGVjdCBzdGF0ZW1lbnRzICovCisJdmFsID0gRVhQUl9PUih2YWwsIHN5bS0+cmV2X2RlcC50cmkpOworCisJLyogdHJhbnNwb3NlIG1vZCB0byB5ZXMgaWYgbW9kdWxlcyBhcmUgbm90IGVuYWJsZWQgKi8KKwlpZiAodmFsID09IG1vZCkKKwkJaWYgKCFzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgbW9kdWxlc19zeW0tPmN1cnIudHJpID09IG5vKQorCQkJdmFsID0geWVzOworCisJLyogdHJhbnNwb3NlIG1vZCB0byB5ZXMgaWYgdHlwZSBpcyBib29sICovCisJaWYgKHN5bS0+dHlwZSA9PSBTX0JPT0xFQU4gJiYgdmFsID09IG1vZCkKKwkJdmFsID0geWVzOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2Ugbm86IHJldHVybiAibiI7CisJCWNhc2UgbW9kOiByZXR1cm4gIm0iOworCQljYXNlIHllczogcmV0dXJuICJ5IjsKKwkJfQorCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwkJcmV0dXJuIHN0cjsKKwljYXNlIFNfU1RSSU5HOgorCQlyZXR1cm4gc3RyOworCWNhc2UgU19PVEhFUjoKKwljYXNlIFNfVU5LTk9XTjoKKwkJYnJlYWs7CisJfQorCXJldHVybiAiIjsKK30KKworY29uc3QgY2hhciAqc3ltX2dldF9zdHJpbmdfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXRyaXN0YXRlIHZhbDsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2Ugbm86CisJCQlyZXR1cm4gIm4iOworCQljYXNlIG1vZDoKKwkJCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsKKwkJCXJldHVybiAobW9kdWxlc19zeW0tPmN1cnIudHJpID09IG5vKSA/ICJuIiA6ICJtIjsKKwkJY2FzZSB5ZXM6CisJCQlyZXR1cm4gInkiOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisJcmV0dXJuIChjb25zdCBjaGFyICopc3ltLT5jdXJyLnZhbDsKK30KKworYm9vbCBzeW1faXNfY2hhbmdhYmxlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4gc3ltLT52aXNpYmxlID4gc3ltLT5yZXZfZGVwLnRyaTsKK30KKworc3RhdGljIHVuc2lnbmVkIHN0cmhhc2goY29uc3QgY2hhciAqcykKK3sKKwkvKiBmbnYzMiBoYXNoICovCisJdW5zaWduZWQgaGFzaCA9IDIxNjYxMzYyNjFVOworCWZvciAoOyAqczsgcysrKQorCQloYXNoID0gKGhhc2ggXiAqcykgKiAweDAxMDAwMTkzOworCXJldHVybiBoYXNoOworfQorCitzdHJ1Y3Qgc3ltYm9sICpzeW1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2w7CisJY2hhciAqbmV3X25hbWU7CisJaW50IGhhc2g7CisKKwlpZiAobmFtZSkgeworCQlpZiAobmFtZVswXSAmJiAhbmFtZVsxXSkgeworCQkJc3dpdGNoIChuYW1lWzBdKSB7CisJCQljYXNlICd5JzogcmV0dXJuICZzeW1ib2xfeWVzOworCQkJY2FzZSAnbSc6IHJldHVybiAmc3ltYm9sX21vZDsKKwkJCWNhc2UgJ24nOiByZXR1cm4gJnN5bWJvbF9ubzsKKwkJCX0KKwkJfQorCQloYXNoID0gc3RyaGFzaChuYW1lKSAlIFNZTUJPTF9IQVNIU0laRTsKKworCQlmb3IgKHN5bWJvbCA9IHN5bWJvbF9oYXNoW2hhc2hdOyBzeW1ib2w7IHN5bWJvbCA9IHN5bWJvbC0+bmV4dCkgeworCQkJaWYgKHN5bWJvbC0+bmFtZSAmJgorCQkJICAgICFzdHJjbXAoc3ltYm9sLT5uYW1lLCBuYW1lKSAmJgorCQkJICAgIChmbGFncyA/IHN5bWJvbC0+ZmxhZ3MgJiBmbGFncworCQkJCSAgIDogIShzeW1ib2wtPmZsYWdzICYgKFNZTUJPTF9DT05TVHxTWU1CT0xfQ0hPSUNFKSkpKQorCQkJCXJldHVybiBzeW1ib2w7CisJCX0KKwkJbmV3X25hbWUgPSBzdHJkdXAobmFtZSk7CisJfSBlbHNlIHsKKwkJbmV3X25hbWUgPSBOVUxMOworCQloYXNoID0gMDsKKwl9CisKKwlzeW1ib2wgPSBtYWxsb2Moc2l6ZW9mKCpzeW1ib2wpKTsKKwltZW1zZXQoc3ltYm9sLCAwLCBzaXplb2YoKnN5bWJvbCkpOworCXN5bWJvbC0+bmFtZSA9IG5ld19uYW1lOworCXN5bWJvbC0+dHlwZSA9IFNfVU5LTk9XTjsKKwlzeW1ib2wtPmZsYWdzIHw9IGZsYWdzOworCisJc3ltYm9sLT5uZXh0ID0gc3ltYm9sX2hhc2hbaGFzaF07CisJc3ltYm9sX2hhc2hbaGFzaF0gPSBzeW1ib2w7CisKKwlyZXR1cm4gc3ltYm9sOworfQorCitzdHJ1Y3Qgc3ltYm9sICpzeW1fZmluZChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bWJvbCA9IE5VTEw7CisJaW50IGhhc2ggPSAwOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChuYW1lWzBdICYmICFuYW1lWzFdKSB7CisJCXN3aXRjaCAobmFtZVswXSkgeworCQljYXNlICd5JzogcmV0dXJuICZzeW1ib2xfeWVzOworCQljYXNlICdtJzogcmV0dXJuICZzeW1ib2xfbW9kOworCQljYXNlICduJzogcmV0dXJuICZzeW1ib2xfbm87CisJCX0KKwl9CisJaGFzaCA9IHN0cmhhc2gobmFtZSkgJSBTWU1CT0xfSEFTSFNJWkU7CisKKwlmb3IgKHN5bWJvbCA9IHN5bWJvbF9oYXNoW2hhc2hdOyBzeW1ib2w7IHN5bWJvbCA9IHN5bWJvbC0+bmV4dCkgeworCQlpZiAoc3ltYm9sLT5uYW1lICYmCisJCSAgICAhc3RyY21wKHN5bWJvbC0+bmFtZSwgbmFtZSkgJiYKKwkJICAgICEoc3ltYm9sLT5mbGFncyAmIFNZTUJPTF9DT05TVCkpCisJCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN5bWJvbDsKK30KKworLyoKKyAqIEV4cGFuZCBzeW1ib2wncyBuYW1lcyBlbWJlZGRlZCBpbiB0aGUgc3RyaW5nIGdpdmVuIGluIGFyZ3VtZW50LiBTeW1ib2xzJworICogbmFtZSB0byBiZSBleHBhbmRlZCBzaGFsbCBiZSBwcmVmaXhlZCBieSBhICckJy4gVW5rbm93biBzeW1ib2wgZXhwYW5kcyB0bworICogdGhlIGVtcHR5IHN0cmluZy4KKyAqLworY29uc3QgY2hhciAqc3ltX2V4cGFuZF9zdHJpbmdfdmFsdWUoY29uc3QgY2hhciAqaW4pCit7CisJY29uc3QgY2hhciAqc3JjOworCWNoYXIgKnJlczsKKwlzaXplX3QgcmVzbGVuOworCisJcmVzbGVuID0gc3RybGVuKGluKSArIDE7CisJcmVzID0gbWFsbG9jKHJlc2xlbik7CisJcmVzWzBdID0gJ1wwJzsKKworCXdoaWxlICgoc3JjID0gc3RyY2hyKGluLCAnJCcpKSkgeworCQljaGFyICpwLCBuYW1lW1NZTUJPTF9NQVhMRU5HVEhdOworCQljb25zdCBjaGFyICpzeW12YWwgPSAiIjsKKwkJc3RydWN0IHN5bWJvbCAqc3ltOworCQlzaXplX3QgbmV3bGVuOworCisJCXN0cm5jYXQocmVzLCBpbiwgc3JjIC0gaW4pOworCQlzcmMrKzsKKworCQlwID0gbmFtZTsKKwkJd2hpbGUgKGlzYWxudW0oKnNyYykgfHwgKnNyYyA9PSAnXycpCisJCQkqcCsrID0gKnNyYysrOworCQkqcCA9ICdcMCc7CisKKwkJc3ltID0gc3ltX2ZpbmQobmFtZSk7CisJCWlmIChzeW0gIT0gTlVMTCkgeworCQkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJCXN5bXZhbCA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisJCX0KKworCQluZXdsZW4gPSBzdHJsZW4ocmVzKSArIHN0cmxlbihzeW12YWwpICsgc3RybGVuKHNyYykgKyAxOworCQlpZiAobmV3bGVuID4gcmVzbGVuKSB7CisJCQlyZXNsZW4gPSBuZXdsZW47CisJCQlyZXMgPSByZWFsbG9jKHJlcywgcmVzbGVuKTsKKwkJfQorCisJCXN0cmNhdChyZXMsIHN5bXZhbCk7CisJCWluID0gc3JjOworCX0KKwlzdHJjYXQocmVzLCBpbik7CisKKwlyZXR1cm4gcmVzOworfQorCitjb25zdCBjaGFyICpzeW1fZXNjYXBlX3N0cmluZ192YWx1ZShjb25zdCBjaGFyICppbikKK3sKKwljb25zdCBjaGFyICpwOworCXNpemVfdCByZXNsZW47CisJY2hhciAqcmVzOworCXNpemVfdCBsOworCisJcmVzbGVuID0gc3RybGVuKGluKSArIHN0cmxlbigiXCJcIiIpICsgMTsKKworCXAgPSBpbjsKKwlmb3IgKDs7KSB7CisJCWwgPSBzdHJjc3BuKHAsICJcIlxcIik7CisJCXAgKz0gbDsKKworCQlpZiAocFswXSA9PSAnXDAnKQorCQkJYnJlYWs7CisKKwkJcmVzbGVuKys7CisJCXArKzsKKwl9CisKKwlyZXMgPSBtYWxsb2MocmVzbGVuKTsKKwlyZXNbMF0gPSAnXDAnOworCisJc3RyY2F0KHJlcywgIlwiIik7CisKKwlwID0gaW47CisJZm9yICg7OykgeworCQlsID0gc3RyY3NwbihwLCAiXCJcXCIpOworCQlzdHJuY2F0KHJlcywgcCwgbCk7CisJCXAgKz0gbDsKKworCQlpZiAocFswXSA9PSAnXDAnKQorCQkJYnJlYWs7CisKKwkJc3RyY2F0KHJlcywgIlxcIik7CisJCXN0cm5jYXQocmVzLCBwKyssIDEpOworCX0KKworCXN0cmNhdChyZXMsICJcIiIpOworCXJldHVybiByZXM7Cit9CisKK3N0cnVjdCBzeW1ib2wgKipzeW1fcmVfc2VhcmNoKGNvbnN0IGNoYXIgKnBhdHRlcm4pCit7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAqKnN5bV9hcnIgPSBOVUxMOworCWludCBpLCBjbnQsIHNpemU7CisJcmVnZXhfdCByZTsKKworCWNudCA9IHNpemUgPSAwOworCS8qIFNraXAgaWYgZW1wdHkgKi8KKwlpZiAoc3RybGVuKHBhdHRlcm4pID09IDApCisJCXJldHVybiBOVUxMOworCWlmIChyZWdjb21wKCZyZSwgcGF0dGVybiwgUkVHX0VYVEVOREVEfFJFR19OT1NVQnxSRUdfSUNBU0UpKQorCQlyZXR1cm4gTlVMTDsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1QgfHwgIXN5bS0+bmFtZSkKKwkJCWNvbnRpbnVlOworCQlpZiAocmVnZXhlYygmcmUsIHN5bS0+bmFtZSwgMCwgTlVMTCwgMCkpCisJCQljb250aW51ZTsKKwkJaWYgKGNudCArIDEgPj0gc2l6ZSkgeworCQkJdm9pZCAqdG1wID0gc3ltX2FycjsKKwkJCXNpemUgKz0gMTY7CisJCQlzeW1fYXJyID0gcmVhbGxvYyhzeW1fYXJyLCBzaXplICogc2l6ZW9mKHN0cnVjdCBzeW1ib2wgKikpOworCQkJaWYgKCFzeW1fYXJyKSB7CisJCQkJZnJlZSh0bXApOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJCXN5bV9hcnJbY250KytdID0gc3ltOworCX0KKwlpZiAoc3ltX2FycikKKwkJc3ltX2FycltjbnRdID0gTlVMTDsKKwlyZWdmcmVlKCZyZSk7CisKKwlyZXR1cm4gc3ltX2FycjsKK30KKworLyoKKyAqIFdoZW4gd2UgY2hlY2sgZm9yIHJlY3Vyc2l2ZSBkZXBlbmRlbmNpZXMgd2UgdXNlIGEgc3RhY2sgdG8gc2F2ZQorICogY3VycmVudCBzdGF0ZSBzbyB3ZSBjYW4gcHJpbnQgb3V0IHJlbGV2YW50IGluZm8gdG8gdXNlci4KKyAqIFRoZSBlbnRyaWVzIGFyZSBsb2NhdGVkIG9uIHRoZSBjYWxsIHN0YWNrIHNvIG5vIG5lZWQgdG8gZnJlZSBtZW1vcnkuCisgKiBOb3RlIGluc2VyKCkgcmVtb3ZlKCkgbXVzdCBhbHdheXMgbWF0Y2ggdG8gcHJvcGVybHkgY2xlYXIgdGhlIHN0YWNrLgorICovCitzdGF0aWMgc3RydWN0IGRlcF9zdGFjayB7CisJc3RydWN0IGRlcF9zdGFjayAqcHJldiwgKm5leHQ7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZXhwcjsKK30gKmNoZWNrX3RvcDsKKworc3RhdGljIHZvaWQgZGVwX3N0YWNrX2luc2VydChzdHJ1Y3QgZGVwX3N0YWNrICpzdGFjaywgc3RydWN0IHN5bWJvbCAqc3ltKQoreworCW1lbXNldChzdGFjaywgMCwgc2l6ZW9mKCpzdGFjaykpOworCWlmIChjaGVja190b3ApCisJCWNoZWNrX3RvcC0+bmV4dCA9IHN0YWNrOworCXN0YWNrLT5wcmV2ID0gY2hlY2tfdG9wOworCXN0YWNrLT5zeW0gPSBzeW07CisJY2hlY2tfdG9wID0gc3RhY2s7Cit9CisKK3N0YXRpYyB2b2lkIGRlcF9zdGFja19yZW1vdmUodm9pZCkKK3sKKwljaGVja190b3AgPSBjaGVja190b3AtPnByZXY7CisJaWYgKGNoZWNrX3RvcCkKKwkJY2hlY2tfdG9wLT5uZXh0ID0gTlVMTDsKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIHdlIGhhdmUgZGV0ZWN0ZWQgYSByZWN1cnNpdmUgZGVwZW5kZW5jeS4KKyAqIGNoZWNrX3RvcCBwb2ludCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjdCBzbyB3ZSB1c2UKKyAqIHRoZSAtPnByZXYgcG9pbnRlciB0byBsb2NhdGUgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCisgKi8KK3N0YXRpYyB2b2lkIHN5bV9jaGVja19wcmludF9yZWN1cnNpdmUoc3RydWN0IHN5bWJvbCAqbGFzdF9zeW0pCit7CisJc3RydWN0IGRlcF9zdGFjayAqc3RhY2s7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAqbmV4dF9zeW07CisJc3RydWN0IG1lbnUgKm1lbnUgPSBOVUxMOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZGVwX3N0YWNrIGN2X3N0YWNrOworCisJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUobGFzdF9zeW0pKSB7CisJCWRlcF9zdGFja19pbnNlcnQoJmN2X3N0YWNrLCBsYXN0X3N5bSk7CisJCWxhc3Rfc3ltID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3AobGFzdF9zeW0pKTsKKwl9CisKKwlmb3IgKHN0YWNrID0gY2hlY2tfdG9wOyBzdGFjayAhPSBOVUxMOyBzdGFjayA9IHN0YWNrLT5wcmV2KQorCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0X3N5bSkKKwkJCWJyZWFrOworCWlmICghc3RhY2spIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGVycm9yXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoOyBzdGFjazsgc3RhY2sgPSBzdGFjay0+bmV4dCkgeworCQlzeW0gPSBzdGFjay0+c3ltOworCQluZXh0X3N5bSA9IHN0YWNrLT5uZXh0ID8gc3RhY2stPm5leHQtPnN5bSA6IGxhc3Rfc3ltOworCQlwcm9wID0gc3RhY2stPnByb3A7CisJCWlmIChwcm9wID09IE5VTEwpCisJCQlwcm9wID0gc3RhY2stPnN5bS0+cHJvcDsKKworCQkvKiBmb3IgY2hvaWNlIHZhbHVlcyBmaW5kIHRoZSBtZW51IGVudHJ5ICh1c2VkIGJlbG93KSAqLworCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pIHx8IHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgeworCQkJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQkJCW1lbnUgPSBwcm9wLT5tZW51OworCQkJCWlmIChwcm9wLT5tZW51KQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0X3N5bSkKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIVxuIiwKKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8pOworCQlpZiAoc3RhY2stPmV4cHIpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRzeW1ib2wgJXMgJXMgdmFsdWUgY29udGFpbnMgJXNcbiIsCisJCQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJcHJvcF9nZXRfdHlwZV9uYW1lKHByb3AtPnR5cGUpLAorCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsKKwkJfSBlbHNlIGlmIChzdGFjay0+cHJvcCkgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyBkZXBlbmRzIG9uICVzXG4iLAorCQkJCXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywKKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsKKwkJfSBlbHNlIGlmIChzeW1faXNfY2hvaWNlKHN5bSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRjaG9pY2UgJXMgY29udGFpbnMgc3ltYm9sICVzXG4iLAorCQkJCW1lbnUtPmZpbGUtPm5hbWUsIG1lbnUtPmxpbmVubywKKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsKKwkJfSBlbHNlIGlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRzeW1ib2wgJXMgaXMgcGFydCBvZiBjaG9pY2UgJXNcbiIsCisJCQkJbWVudS0+ZmlsZS0+bmFtZSwgbWVudS0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyBpcyBzZWxlY3RlZCBieSAlc1xuIiwKKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sCisJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7CisJCX0KKwl9CisKKwlpZiAoY2hlY2tfdG9wID09ICZjdl9zdGFjaykKKwkJZGVwX3N0YWNrX3JlbW92ZSgpOworfQorCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNrX2V4cHJfZGVwcyhzdHJ1Y3QgZXhwciAqZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisKKwlpZiAoIWUpCisJCXJldHVybiBOVUxMOworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9PUjoKKwljYXNlIEVfQU5EOgorCQlzeW0gPSBzeW1fY2hlY2tfZXhwcl9kZXBzKGUtPmxlZnQuZXhwcik7CisJCWlmIChzeW0pCisJCQlyZXR1cm4gc3ltOworCQlyZXR1cm4gc3ltX2NoZWNrX2V4cHJfZGVwcyhlLT5yaWdodC5leHByKTsKKwljYXNlIEVfTk9UOgorCQlyZXR1cm4gc3ltX2NoZWNrX2V4cHJfZGVwcyhlLT5sZWZ0LmV4cHIpOworCWNhc2UgRV9FUVVBTDoKKwljYXNlIEVfVU5FUVVBTDoKKwkJc3ltID0gc3ltX2NoZWNrX2RlcHMoZS0+bGVmdC5zeW0pOworCQlpZiAoc3ltKQorCQkJcmV0dXJuIHN5bTsKKwkJcmV0dXJuIHN5bV9jaGVja19kZXBzKGUtPnJpZ2h0LnN5bSk7CisJY2FzZSBFX1NZTUJPTDoKKwkJcmV0dXJuIHN5bV9jaGVja19kZXBzKGUtPmxlZnQuc3ltKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcHJpbnRmKCJPb3BzISBIb3cgdG8gY2hlY2sgJWQ/XG4iLCBlLT50eXBlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogcmV0dXJuIE5VTEwgd2hlbiBkZXBlbmRlbmNpZXMgYXJlIE9LICovCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNrX3N5bV9kZXBzKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0yOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOworCisJZGVwX3N0YWNrX2luc2VydCgmc3RhY2ssIHN5bSk7CisKKwlzeW0yID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhzeW0tPnJldl9kZXAuZXhwcik7CisJaWYgKHN5bTIpCisJCWdvdG8gb3V0OworCisJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQlpZiAocHJvcC0+dHlwZSA9PSBQX0NIT0lDRSB8fCBwcm9wLT50eXBlID09IFBfU0VMRUNUKQorCQkJY29udGludWU7CisJCXN0YWNrLnByb3AgPSBwcm9wOworCQlzeW0yID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhwcm9wLT52aXNpYmxlLmV4cHIpOworCQlpZiAoc3ltMikKKwkJCWJyZWFrOworCQlpZiAocHJvcC0+dHlwZSAhPSBQX0RFRkFVTFQgfHwgc3ltX2lzX2Nob2ljZShzeW0pKQorCQkJY29udGludWU7CisJCXN0YWNrLmV4cHIgPSBwcm9wLT5leHByOworCQlzeW0yID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhwcm9wLT5leHByKTsKKwkJaWYgKHN5bTIpCisJCQlicmVhazsKKwkJc3RhY2suZXhwciA9IE5VTEw7CisJfQorCitvdXQ6CisJZGVwX3N0YWNrX3JlbW92ZSgpOworCisJcmV0dXJuIHN5bTI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfY2hvaWNlX2RlcHMoc3RydWN0IHN5bWJvbCAqY2hvaWNlKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSwgKnN5bTI7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByICplOworCXN0cnVjdCBkZXBfc3RhY2sgc3RhY2s7CisKKwlkZXBfc3RhY2tfaW5zZXJ0KCZzdGFjaywgY2hvaWNlKTsKKworCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNob2ljZSk7CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pCisJCXN5bS0+ZmxhZ3MgfD0gKFNZTUJPTF9DSEVDSyB8IFNZTUJPTF9DSEVDS0VEKTsKKworCWNob2ljZS0+ZmxhZ3MgfD0gKFNZTUJPTF9DSEVDSyB8IFNZTUJPTF9DSEVDS0VEKTsKKwlzeW0yID0gc3ltX2NoZWNrX3N5bV9kZXBzKGNob2ljZSk7CisJY2hvaWNlLT5mbGFncyAmPSB+U1lNQk9MX0NIRUNLOworCWlmIChzeW0yKQorCQlnb3RvIG91dDsKKworCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCXN5bTIgPSBzeW1fY2hlY2tfc3ltX2RlcHMoc3ltKTsKKwkJaWYgKHN5bTIpCisJCQlicmVhazsKKwl9CitvdXQ6CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pCisJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9DSEVDSzsKKworCWlmIChzeW0yICYmIHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltMikgJiYKKwkgICAgcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltMikpID09IGNob2ljZSkKKwkJc3ltMiA9IGNob2ljZTsKKworCWRlcF9zdGFja19yZW1vdmUoKTsKKworCXJldHVybiBzeW0yOworfQorCitzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfZGVwcyhzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHN5bWJvbCAqc3ltMjsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DSEVDSykgeworCQlzeW1fY2hlY2tfcHJpbnRfcmVjdXJzaXZlKHN5bSk7CisJCXJldHVybiBzeW07CisJfQorCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NIRUNLRUQpCisJCXJldHVybiBOVUxMOworCisJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgeworCQlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOworCisJCS8qIGZvciBjaG9pY2UgZ3JvdXBzIHN0YXJ0IHRoZSBjaGVjayB3aXRoIG1haW4gY2hvaWNlIHN5bWJvbCAqLworCQlkZXBfc3RhY2tfaW5zZXJ0KCZzdGFjaywgc3ltKTsKKwkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKKwkJc3ltMiA9IHN5bV9jaGVja19kZXBzKHByb3BfZ2V0X3N5bWJvbChwcm9wKSk7CisJCWRlcF9zdGFja19yZW1vdmUoKTsKKwl9IGVsc2UgaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgeworCQlzeW0yID0gc3ltX2NoZWNrX2Nob2ljZV9kZXBzKHN5bSk7CisJfSBlbHNlIHsKKwkJc3ltLT5mbGFncyB8PSAoU1lNQk9MX0NIRUNLIHwgU1lNQk9MX0NIRUNLRUQpOworCQlzeW0yID0gc3ltX2NoZWNrX3N5bV9kZXBzKHN5bSk7CisJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9DSEVDSzsKKwl9CisKKwlpZiAoc3ltMiAmJiBzeW0yID09IHN5bSkKKwkJc3ltMiA9IE5VTEw7CisKKwlyZXR1cm4gc3ltMjsKK30KKworc3RydWN0IHByb3BlcnR5ICpwcm9wX2FsbG9jKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHByb3BlcnR5ICoqcHJvcHA7CisKKwlwcm9wID0gbWFsbG9jKHNpemVvZigqcHJvcCkpOworCW1lbXNldChwcm9wLCAwLCBzaXplb2YoKnByb3ApKTsKKwlwcm9wLT50eXBlID0gdHlwZTsKKwlwcm9wLT5zeW0gPSBzeW07CisJcHJvcC0+ZmlsZSA9IGN1cnJlbnRfZmlsZTsKKwlwcm9wLT5saW5lbm8gPSB6Y29uZl9saW5lbm8oKTsKKworCS8qIGFwcGVuZCBwcm9wZXJ0eSB0byB0aGUgcHJvcCBsaXN0IG9mIHN5bWJvbCAqLworCWlmIChzeW0pIHsKKwkJZm9yIChwcm9wcCA9ICZzeW0tPnByb3A7ICpwcm9wcDsgcHJvcHAgPSAmKCpwcm9wcCktPm5leHQpCisJCQk7CisJCSpwcm9wcCA9IHByb3A7CisJfQorCisJcmV0dXJuIHByb3A7Cit9CisKK3N0cnVjdCBzeW1ib2wgKnByb3BfZ2V0X3N5bWJvbChzdHJ1Y3QgcHJvcGVydHkgKnByb3ApCit7CisJaWYgKHByb3AtPmV4cHIgJiYgKHByb3AtPmV4cHItPnR5cGUgPT0gRV9TWU1CT0wgfHwKKwkJCSAgIHByb3AtPmV4cHItPnR5cGUgPT0gRV9MSVNUKSkKKwkJcmV0dXJuIHByb3AtPmV4cHItPmxlZnQuc3ltOworCXJldHVybiBOVUxMOworfQorCitjb25zdCBjaGFyICpwcm9wX2dldF90eXBlX25hbWUoZW51bSBwcm9wX3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFBfUFJPTVBUOgorCQlyZXR1cm4gInByb21wdCI7CisJY2FzZSBQX0VOVjoKKwkJcmV0dXJuICJlbnYiOworCWNhc2UgUF9DT01NRU5UOgorCQlyZXR1cm4gImNvbW1lbnQiOworCWNhc2UgUF9NRU5VOgorCQlyZXR1cm4gIm1lbnUiOworCWNhc2UgUF9ERUZBVUxUOgorCQlyZXR1cm4gImRlZmF1bHQiOworCWNhc2UgUF9DSE9JQ0U6CisJCXJldHVybiAiY2hvaWNlIjsKKwljYXNlIFBfU0VMRUNUOgorCQlyZXR1cm4gInNlbGVjdCI7CisJY2FzZSBQX1JBTkdFOgorCQlyZXR1cm4gInJhbmdlIjsKKwljYXNlIFBfU1lNQk9MOgorCQlyZXR1cm4gInN5bWJvbCI7CisJY2FzZSBQX1VOS05PV046CisJCWJyZWFrOworCX0KKwlyZXR1cm4gInVua25vd24iOworfQorCitzdGF0aWMgdm9pZCBwcm9wX2FkZF9lbnYoY29uc3QgY2hhciAqZW52KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSwgKnN5bTI7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCWNoYXIgKnA7CisKKwlzeW0gPSBjdXJyZW50X2VudHJ5LT5zeW07CisJc3ltLT5mbGFncyB8PSBTWU1CT0xfQVVUTzsKKwlmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBwcm9wLCBQX0VOVikgeworCQlzeW0yID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQlpZiAoc3RyY21wKHN5bTItPm5hbWUsIGVudikpCisJCQltZW51X3dhcm4oY3VycmVudF9lbnRyeSwgInJlZGVmaW5pbmcgZW52aXJvbm1lbnQgc3ltYm9sIGZyb20gJXMiLAorCQkJCSAgc3ltMi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwcm9wID0gcHJvcF9hbGxvYyhQX0VOViwgc3ltKTsKKwlwcm9wLT5leHByID0gZXhwcl9hbGxvY19zeW1ib2woc3ltX2xvb2t1cChlbnYsIFNZTUJPTF9DT05TVCkpOworCisJc3ltX2Vudl9saXN0ID0gZXhwcl9hbGxvY19vbmUoRV9MSVNULCBzeW1fZW52X2xpc3QpOworCXN5bV9lbnZfbGlzdC0+cmlnaHQuc3ltID0gc3ltOworCisJcCA9IGdldGVudihlbnYpOworCWlmIChwKQorCQlzeW1fYWRkX2RlZmF1bHQoc3ltLCBwKTsKKwllbHNlCisJCW1lbnVfd2FybihjdXJyZW50X2VudHJ5LCAiZW52aXJvbm1lbnQgdmFyaWFibGUgJXMgdW5kZWZpbmVkIiwgZW52KTsKK30KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY29uZmlnL3V0aWwuYyBiL2Nhcmw5MTcwZncvY29uZmlnL3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGI4YjIzCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9jb25maWcvdXRpbC5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBTYW0gUmF2bmJvcmcgPHNhbUByYXZuYm9yZy5vcmc+CisgKgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxrYy5oIgorCisvKiBmaWxlIGFscmVhZHkgcHJlc2VudCBpbiBsaXN0PyBJZiBub3QgYWRkIGl0ICovCitzdHJ1Y3QgZmlsZSAqZmlsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwljb25zdCBjaGFyICpmaWxlX25hbWUgPSBzeW1fZXhwYW5kX3N0cmluZ192YWx1ZShuYW1lKTsKKworCWZvciAoZmlsZSA9IGZpbGVfbGlzdDsgZmlsZTsgZmlsZSA9IGZpbGUtPm5leHQpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgZmlsZS0+bmFtZSkpIHsKKwkJCWZyZWUoKHZvaWQgKilmaWxlX25hbWUpOworCQkJcmV0dXJuIGZpbGU7CisJCX0KKwl9CisKKwlmaWxlID0gbWFsbG9jKHNpemVvZigqZmlsZSkpOworCW1lbXNldChmaWxlLCAwLCBzaXplb2YoKmZpbGUpKTsKKwlmaWxlLT5uYW1lID0gZmlsZV9uYW1lOworCWZpbGUtPm5leHQgPSBmaWxlX2xpc3Q7CisJZmlsZV9saXN0ID0gZmlsZTsKKwlyZXR1cm4gZmlsZTsKK30KKworLyogd3JpdGUgYSBkZXBlbmRlbmN5IGZpbGUgYXMgdXNlZCBieSBrYnVpbGQgdG8gdHJhY2sgZGVwZW5kZW5jaWVzICovCitpbnQgZmlsZV93cml0ZV9kZXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0sICplbnZfc3ltOworCXN0cnVjdCBleHByICplOworCXN0cnVjdCBmaWxlICpmaWxlOworCUZJTEUgKm91dDsKKworCWlmICghbmFtZSkKKwkJbmFtZSA9ICIua2NvbmZpZy5kIjsKKwlvdXQgPSBmb3BlbigiLi5jb25maWcudG1wIiwgInciKTsKKwlpZiAoIW91dCkKKwkJcmV0dXJuIDE7CisJZnByaW50ZihvdXQsICJkZXBzX2NvbmZpZyA6PSBcXFxuIik7CisJZm9yIChmaWxlID0gZmlsZV9saXN0OyBmaWxlOyBmaWxlID0gZmlsZS0+bmV4dCkgeworCQlpZiAoZmlsZS0+bmV4dCkKKwkJCWZwcmludGYob3V0LCAiXHQlcyBcXFxuIiwgZmlsZS0+bmFtZSk7CisJCWVsc2UKKwkJCWZwcmludGYob3V0LCAiXHQlc1xuIiwgZmlsZS0+bmFtZSk7CisJfQorCWZwcmludGYob3V0LCAiXG4lczogXFxcbiIKKwkJICAgICAiXHQkKGRlcHNfY29uZmlnKVxuXG4iLCBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKSk7CisKKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHN5bV9lbnZfbGlzdCwgZSwgc3ltKSB7CisJCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwkJY29uc3QgY2hhciAqdmFsdWU7CisKKwkJcHJvcCA9IHN5bV9nZXRfZW52X3Byb3Aoc3ltKTsKKwkJZW52X3N5bSA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsKKwkJaWYgKCFlbnZfc3ltKQorCQkJY29udGludWU7CisJCXZhbHVlID0gZ2V0ZW52KGVudl9zeW0tPm5hbWUpOworCQlpZiAoIXZhbHVlKQorCQkJdmFsdWUgPSAiIjsKKwkJZnByaW50ZihvdXQsICJpZm5lcSBcIiQoJXMpXCIgXCIlc1wiXG4iLCBlbnZfc3ltLT5uYW1lLCB2YWx1ZSk7CisJCWZwcmludGYob3V0LCAiJXM6IEZPUkNFXG4iLCBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKSk7CisJCWZwcmludGYob3V0LCAiZW5kaWZcbiIpOworCX0KKworCWZwcmludGYob3V0LCAiXG4kKGRlcHNfY29uZmlnKTogO1xuIik7CisJZmNsb3NlKG91dCk7CisJcmVuYW1lKCIuLmNvbmZpZy50bXAiLCBuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiBBbGxvY2F0ZSBpbml0aWFsIGdyb3dhYmxlIHN0cmluZyAqLworc3RydWN0IGdzdHIgc3RyX25ldyh2b2lkKQoreworCXN0cnVjdCBnc3RyIGdzOworCWdzLnMgPSBtYWxsb2Moc2l6ZW9mKGNoYXIpICogNjQpOworCWdzLmxlbiA9IDY0OworCWdzLm1heF93aWR0aCA9IDA7CisJc3RyY3B5KGdzLnMsICJcMCIpOworCXJldHVybiBnczsKK30KKworLyogQWxsb2NhdGUgYW5kIGFzc2lnbiBncm93YWJsZSBzdHJpbmcgKi8KK3N0cnVjdCBnc3RyIHN0cl9hc3NpZ24oY29uc3QgY2hhciAqcykKK3sKKwlzdHJ1Y3QgZ3N0ciBnczsKKwlncy5zID0gc3RyZHVwKHMpOworCWdzLmxlbiA9IHN0cmxlbihzKSArIDE7CisJZ3MubWF4X3dpZHRoID0gMDsKKwlyZXR1cm4gZ3M7Cit9CisKKy8qIEZyZWUgc3RvcmFnZSBmb3IgZ3Jvd2FibGUgc3RyaW5nICovCit2b2lkIHN0cl9mcmVlKHN0cnVjdCBnc3RyICpncykKK3sKKwlpZiAoZ3MtPnMpCisJCWZyZWUoZ3MtPnMpOworCWdzLT5zID0gTlVMTDsKKwlncy0+bGVuID0gMDsKK30KKworLyogQXBwZW5kIHRvIGdyb3dhYmxlIHN0cmluZyAqLwordm9pZCBzdHJfYXBwZW5kKHN0cnVjdCBnc3RyICpncywgY29uc3QgY2hhciAqcykKK3sKKwlzaXplX3QgbDsKKwlpZiAocykgeworCQlsID0gc3RybGVuKGdzLT5zKSArIHN0cmxlbihzKSArIDE7CisJCWlmIChsID4gZ3MtPmxlbikgeworCQkJZ3MtPnMgICA9IHJlYWxsb2MoZ3MtPnMsIGwpOworCQkJZ3MtPmxlbiA9IGw7CisJCX0KKwkJc3RyY2F0KGdzLT5zLCBzKTsKKwl9Cit9CisKKy8qIEFwcGVuZCBwcmludGYgZm9ybWF0dGVkIHN0cmluZyB0byBncm93YWJsZSBzdHJpbmcgKi8KK3ZvaWQgc3RyX3ByaW50ZihzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJY2hhciBzWzEwMDAwXTsgLyogYmlnIGVub3VnaC4uLiAqLworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihzLCBzaXplb2YocyksIGZtdCwgYXApOworCXN0cl9hcHBlbmQoZ3MsIHMpOworCXZhX2VuZChhcCk7Cit9CisKKy8qIFJldHJpZXZlIHZhbHVlIG9mIGdyb3dhYmxlIHN0cmluZyAqLworY29uc3QgY2hhciAqc3RyX2dldChzdHJ1Y3QgZ3N0ciAqZ3MpCit7CisJcmV0dXJuIGdzLT5zOworfQorCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2NvbmZpZy96Y29uZi5ncGVyZiBiL2Nhcmw5MTcwZncvY29uZmlnL3pjb25mLmdwZXJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOGVjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2NvbmZpZy96Y29uZi5ncGVyZgpAQCAtMCwwICsxLDQ3IEBACislbGFuZ3VhZ2U9QU5TSS1DCislZGVmaW5lIGhhc2gtZnVuY3Rpb24tbmFtZSBrY29uZl9pZF9oYXNoCislZGVmaW5lIGxvb2t1cC1mdW5jdGlvbi1uYW1lIGtjb25mX2lkX2xvb2t1cAorJWRlZmluZSBzdHJpbmctcG9vbC1uYW1lIGtjb25mX2lkX3N0cmluZ3MKKyVjb21wYXJlLXN0cm5jbXAKKyVlbnVtCislcGljCislc3RydWN0LXR5cGUKKworc3RydWN0IGtjb25mX2lkOworCitzdHJ1Y3Qga2NvbmZfaWQgKmtjb25mX2lkX2xvb2t1cChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pOworCislJQorbWFpbm1lbnUsCVRfTUFJTk1FTlUsCVRGX0NPTU1BTkQKK21lbnUsCQlUX01FTlUsCQlURl9DT01NQU5ECitlbmRtZW51LAlUX0VORE1FTlUsCVRGX0NPTU1BTkQKK3NvdXJjZSwJCVRfU09VUkNFLAlURl9DT01NQU5ECitjaG9pY2UsCQlUX0NIT0lDRSwJVEZfQ09NTUFORAorZW5kY2hvaWNlLAlUX0VORENIT0lDRSwJVEZfQ09NTUFORAorY29tbWVudCwJVF9DT01NRU5ULAlURl9DT01NQU5ECitjb25maWcsCQlUX0NPTkZJRywJVEZfQ09NTUFORAorbWVudWNvbmZpZywJVF9NRU5VQ09ORklHLAlURl9DT01NQU5ECitoZWxwLAkJVF9IRUxQLAkJVEZfQ09NTUFORAoraWYsCQlUX0lGLAkJVEZfQ09NTUFORHxURl9QQVJBTQorZW5kaWYsCQlUX0VORElGLAlURl9DT01NQU5ECitkZXBlbmRzLAlUX0RFUEVORFMsCVRGX0NPTU1BTkQKK29wdGlvbmFsLAlUX09QVElPTkFMLAlURl9DT01NQU5ECitkZWZhdWx0LAlUX0RFRkFVTFQsCVRGX0NPTU1BTkQsIFNfVU5LTk9XTgorcHJvbXB0LAkJVF9QUk9NUFQsCVRGX0NPTU1BTkQKK3RyaXN0YXRlLAlUX1RZUEUsCQlURl9DT01NQU5ELCBTX1RSSVNUQVRFCitkZWZfdHJpc3RhdGUsCVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19UUklTVEFURQorYm9vbCwJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfQk9PTEVBTgorYm9vbGVhbiwJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19CT09MRUFOCitkZWZfYm9vbCwJVF9ERUZBVUxULAlURl9DT01NQU5ELCBTX0JPT0xFQU4KK2ludCwJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfSU5UCitoZXgsCQlUX1RZUEUsCQlURl9DT01NQU5ELCBTX0hFWAorc3RyaW5nLAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19TVFJJTkcKK3NlbGVjdCwJCVRfU0VMRUNULAlURl9DT01NQU5ECityYW5nZSwJCVRfUkFOR0UsCVRGX0NPTU1BTkQKK3Zpc2libGUsCVRfVklTSUJMRSwJVEZfQ09NTUFORAorb3B0aW9uLAkJVF9PUFRJT04sCVRGX0NPTU1BTkQKK29uLAkJVF9PTiwJCVRGX1BBUkFNCittb2R1bGVzLAlUX09QVF9NT0RVTEVTLAlURl9PUFRJT04KK2RlZmNvbmZpZ19saXN0LAlUX09QVF9ERUZDT05GSUdfTElTVCxURl9PUFRJT04KK2VudiwJCVRfT1BUX0VOViwJVEZfT1BUSU9OCislJQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9jb25maWcvemNvbmYubCBiL2Nhcmw5MTcwZncvY29uZmlnL3pjb25mLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiMjg5NQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvY29uZmlnL3pjb25mLmwKQEAgLTAsMCArMSwzNjQgQEAKKyVvcHRpb24gbm9zdGRpbml0IG5veXl3cmFwIG5ldmVyLWludGVyYWN0aXZlIGZ1bGwgZWNzCislb3B0aW9uIDhiaXQgbm9kZWZhdWx0IHBlcmYtcmVwb3J0IHBlcmYtcmVwb3J0Cislb3B0aW9uIG5vaW5wdXQKKyV4IENPTU1BTkQgSEVMUCBTVFJJTkcgUEFSQU0KKyV7CisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKi8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworI2RlZmluZSBTVEFSVF9TVFJTSVpFCTE2CisKK3N0YXRpYyBzdHJ1Y3QgeworCXN0cnVjdCBmaWxlICpmaWxlOworCWludCBsaW5lbm87Cit9IGN1cnJlbnRfcG9zOworCitzdGF0aWMgY2hhciAqdGV4dDsKK3N0YXRpYyBpbnQgdGV4dF9zaXplLCB0ZXh0X2FzaXplOworCitzdHJ1Y3QgYnVmZmVyIHsKKyAgICAgICAgc3RydWN0IGJ1ZmZlciAqcGFyZW50OworICAgICAgICBZWV9CVUZGRVJfU1RBVEUgc3RhdGU7Cit9OworCitzdHJ1Y3QgYnVmZmVyICpjdXJyZW50X2J1ZjsKKworc3RhdGljIGludCBsYXN0X3RzLCBmaXJzdF90czsKKworc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsKK3N0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCk7CisKK3N0YXRpYyB2b2lkIG5ld19zdHJpbmcodm9pZCkKK3sKKwl0ZXh0ID0gbWFsbG9jKFNUQVJUX1NUUlNJWkUpOworCXRleHRfYXNpemUgPSBTVEFSVF9TVFJTSVpFOworCXRleHRfc2l6ZSA9IDA7CisJKnRleHQgPSAwOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCit7CisJaW50IG5ld19zaXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7CisJaWYgKG5ld19zaXplID4gdGV4dF9hc2l6ZSkgeworCQluZXdfc2l6ZSArPSBTVEFSVF9TVFJTSVpFIC0gMTsKKwkJbmV3X3NpemUgJj0gLVNUQVJUX1NUUlNJWkU7CisJCXRleHQgPSByZWFsbG9jKHRleHQsIG5ld19zaXplKTsKKwkJdGV4dF9hc2l6ZSA9IG5ld19zaXplOworCX0KKwltZW1jcHkodGV4dCArIHRleHRfc2l6ZSwgc3RyLCBzaXplKTsKKwl0ZXh0X3NpemUgKz0gc2l6ZTsKKwl0ZXh0W3RleHRfc2l6ZV0gPSAwOworfQorCitzdGF0aWMgdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3sKKwl0ZXh0ID0gbWFsbG9jKHNpemUgKyAxKTsKKwltZW1jcHkodGV4dCwgc3RyLCBzaXplKTsKKwl0ZXh0W3NpemVdID0gMDsKK30KKyV9CisKK3dzCVsgXG5cdF0KK24JW0EtWmEtejAtOV9dCisKKyUlCisJaW50IHN0ciA9IDA7CisJaW50IHRzLCBpOworCitbIFx0XSojLipcbgl8CitbIFx0XSpcbgl7CisJY3VycmVudF9maWxlLT5saW5lbm8rKzsKKwlyZXR1cm4gVF9FT0w7Cit9CitbIFx0XSojLioKKworCitbIFx0XSsJeworCUJFR0lOKENPTU1BTkQpOworfQorCisuCXsKKwl1bnB1dCh5eXRleHRbMF0pOworCUJFR0lOKENPTU1BTkQpOworfQorCisKKzxDT01NQU5EPnsKKwl7bn0rCXsKKwkJY29uc3Qgc3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCh5eXRleHQsIHl5bGVuZyk7CisJCUJFR0lOKFBBUkFNKTsKKwkJY3VycmVudF9wb3MuZmlsZSA9IGN1cnJlbnRfZmlsZTsKKwkJY3VycmVudF9wb3MubGluZW5vID0gY3VycmVudF9maWxlLT5saW5lbm87CisJCWlmIChpZCAmJiBpZC0+ZmxhZ3MgJiBURl9DT01NQU5EKSB7CisJCQl6Y29uZmx2YWwuaWQgPSBpZDsKKwkJCXJldHVybiBpZC0+dG9rZW47CisJCX0KKwkJYWxsb2Nfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKKwkJemNvbmZsdmFsLnN0cmluZyA9IHRleHQ7CisJCXJldHVybiBUX1dPUkQ7CisJfQorCS4KKwlcbgl7CisJCUJFR0lOKElOSVRJQUwpOworCQljdXJyZW50X2ZpbGUtPmxpbmVubysrOworCQlyZXR1cm4gVF9FT0w7CisJfQorfQorCis8UEFSQU0+eworCSImJiIJcmV0dXJuIFRfQU5EOworCSJ8fCIJcmV0dXJuIFRfT1I7CisJIigiCXJldHVybiBUX09QRU5fUEFSRU47CisJIikiCXJldHVybiBUX0NMT1NFX1BBUkVOOworCSIhIglyZXR1cm4gVF9OT1Q7CisJIj0iCXJldHVybiBUX0VRVUFMOworCSIhPSIJcmV0dXJuIFRfVU5FUVVBTDsKKwlcInxcJwl7CisJCXN0ciA9IHl5dGV4dFswXTsKKwkJbmV3X3N0cmluZygpOworCQlCRUdJTihTVFJJTkcpOworCX0KKwlcbglCRUdJTihJTklUSUFMKTsgY3VycmVudF9maWxlLT5saW5lbm8rKzsgcmV0dXJuIFRfRU9MOworCS0tLQkvKiBpZ25vcmUgKi8KKwkoe259fFstLy5dKSsJeworCQljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKHl5dGV4dCwgeXlsZW5nKTsKKwkJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX1BBUkFNKSB7CisJCQl6Y29uZmx2YWwuaWQgPSBpZDsKKwkJCXJldHVybiBpZC0+dG9rZW47CisJCX0KKwkJYWxsb2Nfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKKwkJemNvbmZsdmFsLnN0cmluZyA9IHRleHQ7CisJCXJldHVybiBUX1dPUkQ7CisJfQorCSMuKgkvKiBjb21tZW50ICovCisJXFxcbgljdXJyZW50X2ZpbGUtPmxpbmVubysrOworCS4KKwk8PEVPRj4+IHsKKwkJQkVHSU4oSU5JVElBTCk7CisJfQorfQorCis8U1RSSU5HPnsKKwlbXiciXFxcbl0rL1xuCXsKKwkJYXBwZW5kX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7CisJCXpjb25mbHZhbC5zdHJpbmcgPSB0ZXh0OworCQlyZXR1cm4gVF9XT1JEX1FVT1RFOworCX0KKwlbXiciXFxcbl0rCXsKKwkJYXBwZW5kX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7CisJfQorCVxcLj8vXG4JeworCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCArIDEsIHl5bGVuZyAtIDEpOworCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKKwkJcmV0dXJuIFRfV09SRF9RVU9URTsKKwl9CisJXFwuPwl7CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0ICsgMSwgeXlsZW5nIC0gMSk7CisJfQorCVwnfFwiCXsKKwkJaWYgKHN0ciA9PSB5eXRleHRbMF0pIHsKKwkJCUJFR0lOKFBBUkFNKTsKKwkJCXpjb25mbHZhbC5zdHJpbmcgPSB0ZXh0OworCQkJcmV0dXJuIFRfV09SRF9RVU9URTsKKwkJfSBlbHNlCisJCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgMSk7CisJfQorCVxuCXsKKwkJcHJpbnRmKCIlczolZDp3YXJuaW5nOiBtdWx0aS1saW5lIHN0cmluZ3Mgbm90IHN1cHBvcnRlZFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJCWN1cnJlbnRfZmlsZS0+bGluZW5vKys7CisJCUJFR0lOKElOSVRJQUwpOworCQlyZXR1cm4gVF9FT0w7CisJfQorCTw8RU9GPj4JeworCQlCRUdJTihJTklUSUFMKTsKKwl9Cit9CisKKzxIRUxQPnsKKwlbIFx0XSsJeworCQl0cyA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCB5eWxlbmc7IGkrKykgeworCQkJaWYgKHl5dGV4dFtpXSA9PSAnXHQnKQorCQkJCXRzID0gKHRzICYgfjcpICsgODsKKwkJCWVsc2UKKwkJCQl0cysrOworCQl9CisJCWxhc3RfdHMgPSB0czsKKwkJaWYgKGZpcnN0X3RzKSB7CisJCQlpZiAodHMgPCBmaXJzdF90cykgeworCQkJCXpjb25mX2VuZGhlbHAoKTsKKwkJCQlyZXR1cm4gVF9IRUxQVEVYVDsKKwkJCX0KKwkJCXRzIC09IGZpcnN0X3RzOworCQkJd2hpbGUgKHRzID4gOCkgeworCQkJCWFwcGVuZF9zdHJpbmcoIiAgICAgICAgIiwgOCk7CisJCQkJdHMgLT0gODsKKwkJCX0KKwkJCWFwcGVuZF9zdHJpbmcoIiAgICAgICAgIiwgdHMpOworCQl9CisJfQorCVsgXHRdKlxuL1teIFx0XG5dIHsKKwkJY3VycmVudF9maWxlLT5saW5lbm8rKzsKKwkJemNvbmZfZW5kaGVscCgpOworCQlyZXR1cm4gVF9IRUxQVEVYVDsKKwl9CisJWyBcdF0qXG4JeworCQljdXJyZW50X2ZpbGUtPmxpbmVubysrOworCQlhcHBlbmRfc3RyaW5nKCJcbiIsIDEpOworCX0KKwlbXiBcdFxuXS4qIHsKKwkJd2hpbGUgKHl5bGVuZykgeworCQkJaWYgKCh5eXRleHRbeXlsZW5nLTFdICE9ICcgJykgJiYgKHl5dGV4dFt5eWxlbmctMV0gIT0gJ1x0JykpCisJCQkJYnJlYWs7CisJCQl5eWxlbmctLTsKKwkJfQorCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKKwkJaWYgKCFmaXJzdF90cykKKwkJCWZpcnN0X3RzID0gbGFzdF90czsKKwl9CisJPDxFT0Y+Pgl7CisJCXpjb25mX2VuZGhlbHAoKTsKKwkJcmV0dXJuIFRfSEVMUFRFWFQ7CisJfQorfQorCis8PEVPRj4+CXsKKwlpZiAoY3VycmVudF9maWxlKSB7CisJCXpjb25mX2VuZGZpbGUoKTsKKwkJcmV0dXJuIFRfRU9MOworCX0KKwlmY2xvc2UoeXlpbik7CisJeXl0ZXJtaW5hdGUoKTsKK30KKworJSUKK3ZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpCit7CisJbmV3X3N0cmluZygpOworCWxhc3RfdHMgPSBmaXJzdF90cyA9IDA7CisJQkVHSU4oSEVMUCk7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCkKK3sKKwl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKKwlCRUdJTihJTklUSUFMKTsKK30KKworCisvKgorICogVHJ5IHRvIG9wZW4gc3BlY2lmaWVkIGZpbGUgd2l0aCBmb2xsb3dpbmcgbmFtZXM6CisgKiAuL25hbWUKKyAqICQoc3JjdHJlZSkvbmFtZQorICogVGhlIGxhdHRlciBpcyB1c2VkIHdoZW4gc3JjdHJlZSBpcyBzZXBhcmF0ZSBmcm9tIG9ianRyZWUKKyAqIHdoZW4gY29tcGlsaW5nIHRoZSBmaXJtd2FyZS4KKyAqIFJldHVybiBOVUxMIGlmIGZpbGUgaXMgbm90IGZvdW5kLgorICovCitGSUxFICp6Y29uZl9mb3Blbihjb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgKmVudiwgZnVsbG5hbWVbUEFUSF9NQVgrMV07CisJRklMRSAqZjsKKworCWYgPSBmb3BlbihuYW1lLCAiciIpOworCWlmICghZiAmJiBuYW1lICE9IE5VTEwgJiYgbmFtZVswXSAhPSAnLycpIHsKKwkJZW52ID0gZ2V0ZW52KFNSQ1RSRUUpOworCQlpZiAoZW52KSB7CisJCQlzcHJpbnRmKGZ1bGxuYW1lLCAiJXMvJXMiLCBlbnYsIG5hbWUpOworCQkJZiA9IGZvcGVuKGZ1bGxuYW1lLCAiciIpOworCQl9CisJfQorCXJldHVybiBmOworfQorCit2b2lkIHpjb25mX2luaXRzY2FuKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJeXlpbiA9IHpjb25mX2ZvcGVuKG5hbWUpOworCWlmICgheXlpbikgeworCQlwcmludGYoImNhbid0IGZpbmQgZmlsZSAlc1xuIiwgbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCisJY3VycmVudF9idWYgPSBtYWxsb2Moc2l6ZW9mKCpjdXJyZW50X2J1ZikpOworCW1lbXNldChjdXJyZW50X2J1ZiwgMCwgc2l6ZW9mKCpjdXJyZW50X2J1ZikpOworCisJY3VycmVudF9maWxlID0gZmlsZV9sb29rdXAobmFtZSk7CisJY3VycmVudF9maWxlLT5saW5lbm8gPSAxOworfQorCit2b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZpbGUgKml0ZXI7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsKKwlzdHJ1Y3QgYnVmZmVyICpidWYgPSBtYWxsb2Moc2l6ZW9mKCpidWYpKTsKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOworCisJY3VycmVudF9idWYtPnN0YXRlID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisJeXlpbiA9IHpjb25mX2ZvcGVuKGZpbGUtPm5hbWUpOworCWlmICgheXlpbikgeworCQlwcmludGYoIiVzOiVkOiBjYW4ndCBvcGVuIGZpbGUgXCIlc1wiXG4iLAorCQkgICAgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgZmlsZS0+bmFtZSk7CisJCWV4aXQoMSk7CisJfQorCXl5X3N3aXRjaF90b19idWZmZXIoeXlfY3JlYXRlX2J1ZmZlcih5eWluLCBZWV9CVUZfU0laRSkpOworCWJ1Zi0+cGFyZW50ID0gY3VycmVudF9idWY7CisJY3VycmVudF9idWYgPSBidWY7CisKKwlmb3IgKGl0ZXIgPSBjdXJyZW50X2ZpbGUtPnBhcmVudDsgaXRlcjsgaXRlciA9IGl0ZXItPnBhcmVudCApIHsKKwkJaWYgKCFzdHJjbXAoY3VycmVudF9maWxlLT5uYW1lLGl0ZXItPm5hbWUpICkgeworCQkJcHJpbnRmKCIlczolZDogcmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC4gIgorCQkJICAgICAgICJJbmNsdXNpb24gcGF0aDpcbiAgY3VycmVudCBmaWxlIDogJyVzJ1xuIiwKKwkJCSAgICAgICB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAorCQkJICAgICAgIHpjb25mX2N1cm5hbWUoKSk7CisJCQlpdGVyID0gY3VycmVudF9maWxlLT5wYXJlbnQ7CisJCQl3aGlsZSAoaXRlciAmJiBcCisJCQkgICAgICAgc3RyY21wKGl0ZXItPm5hbWUsY3VycmVudF9maWxlLT5uYW1lKSkgeworCQkJCXByaW50ZigiICBpbmNsdWRlZCBmcm9tOiAnJXM6JWQnXG4iLAorCQkJCSAgICAgICBpdGVyLT5uYW1lLCBpdGVyLT5saW5lbm8tMSk7CisJCQkJaXRlciA9IGl0ZXItPnBhcmVudDsKKwkJCX0KKwkJCWlmIChpdGVyKQorCQkJCXByaW50ZigiICBpbmNsdWRlZCBmcm9tOiAnJXM6JWQnXG4iLAorCQkJCSAgICAgICBpdGVyLT5uYW1lLCBpdGVyLT5saW5lbm8rMSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCWZpbGUtPmxpbmVubyA9IDE7CisJZmlsZS0+cGFyZW50ID0gY3VycmVudF9maWxlOworCWN1cnJlbnRfZmlsZSA9IGZpbGU7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCkKK3sKKwlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7CisKKwljdXJyZW50X2ZpbGUgPSBjdXJyZW50X2ZpbGUtPnBhcmVudDsKKworCXBhcmVudCA9IGN1cnJlbnRfYnVmLT5wYXJlbnQ7CisJaWYgKHBhcmVudCkgeworCQlmY2xvc2UoeXlpbik7CisJCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIpOworCQl5eV9zd2l0Y2hfdG9fYnVmZmVyKHBhcmVudC0+c3RhdGUpOworCX0KKwlmcmVlKGN1cnJlbnRfYnVmKTsKKwljdXJyZW50X2J1ZiA9IHBhcmVudDsKK30KKworaW50IHpjb25mX2xpbmVubyh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3Bvcy5saW5lbm87Cit9CisKK2NvbnN0IGNoYXIgKnpjb25mX2N1cm5hbWUodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF9wb3MuZmlsZSA/IGN1cnJlbnRfcG9zLmZpbGUtPm5hbWUgOiAiPG5vbmU+IjsKK30KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvY29uZmlnL3pjb25mLnkgYi9jYXJsOTE3MGZ3L2NvbmZpZy96Y29uZi55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NTdhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2NvbmZpZy96Y29uZi55CkBAIC0wLDAgKzEsNzQwIEBACisleworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjaW5jbHVkZSAibGtjLmgiCisKKyNkZWZpbmUgcHJpbnRkKG1hc2ssIGZtdC4uLikgaWYgKGNkZWJ1ZyAmIChtYXNrKSkgcHJpbnRmKGZtdCkKKworI2RlZmluZSBQUklOVEQJCTB4MDAwMQorI2RlZmluZSBERUJVR19QQVJTRQkweDAwMDIKKworaW50IGNkZWJ1ZyA9IFBSSU5URDsKKworZXh0ZXJuIGludCB6Y29uZmxleCh2b2lkKTsKK3N0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pOworc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pOworc3RhdGljIHZvaWQgemNvbmZlcnJvcihjb25zdCBjaGFyICplcnIpOworc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oY29uc3Qgc3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2tlbik7CisKK3N0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoW1NZTUJPTF9IQVNIU0laRV07CisKK3N0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51LCAqY3VycmVudF9lbnRyeTsKKworJX0KKyVleHBlY3QgMzAKKworJXVuaW9uCit7CisJY2hhciAqc3RyaW5nOworCXN0cnVjdCBmaWxlICpmaWxlOworCXN0cnVjdCBzeW1ib2wgKnN5bWJvbDsKKwlzdHJ1Y3QgZXhwciAqZXhwcjsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkOworfQorCisldG9rZW4gPGlkPlRfTUFJTk1FTlUKKyV0b2tlbiA8aWQ+VF9NRU5VCisldG9rZW4gPGlkPlRfRU5ETUVOVQorJXRva2VuIDxpZD5UX1NPVVJDRQorJXRva2VuIDxpZD5UX0NIT0lDRQorJXRva2VuIDxpZD5UX0VORENIT0lDRQorJXRva2VuIDxpZD5UX0NPTU1FTlQKKyV0b2tlbiA8aWQ+VF9DT05GSUcKKyV0b2tlbiA8aWQ+VF9NRU5VQ09ORklHCisldG9rZW4gPGlkPlRfSEVMUAorJXRva2VuIDxzdHJpbmc+IFRfSEVMUFRFWFQKKyV0b2tlbiA8aWQ+VF9JRgorJXRva2VuIDxpZD5UX0VORElGCisldG9rZW4gPGlkPlRfREVQRU5EUworJXRva2VuIDxpZD5UX09QVElPTkFMCisldG9rZW4gPGlkPlRfUFJPTVBUCisldG9rZW4gPGlkPlRfVFlQRQorJXRva2VuIDxpZD5UX0RFRkFVTFQKKyV0b2tlbiA8aWQ+VF9TRUxFQ1QKKyV0b2tlbiA8aWQ+VF9SQU5HRQorJXRva2VuIDxpZD5UX1ZJU0lCTEUKKyV0b2tlbiA8aWQ+VF9PUFRJT04KKyV0b2tlbiA8aWQ+VF9PTgorJXRva2VuIDxzdHJpbmc+IFRfV09SRAorJXRva2VuIDxzdHJpbmc+IFRfV09SRF9RVU9URQorJXRva2VuIFRfVU5FUVVBTAorJXRva2VuIFRfQ0xPU0VfUEFSRU4KKyV0b2tlbiBUX09QRU5fUEFSRU4KKyV0b2tlbiBUX0VPTAorCislbGVmdCBUX09SCislbGVmdCBUX0FORAorJWxlZnQgVF9FUVVBTCBUX1VORVFVQUwKKyVub25hc3NvYyBUX05PVAorCisldHlwZSA8c3RyaW5nPiBwcm9tcHQKKyV0eXBlIDxzeW1ib2w+IHN5bWJvbAorJXR5cGUgPGV4cHI+IGV4cHIKKyV0eXBlIDxleHByPiBpZl9leHByCisldHlwZSA8aWQ+IGVuZAorJXR5cGUgPGlkPiBvcHRpb25fbmFtZQorJXR5cGUgPG1lbnU+IGlmX2VudHJ5IG1lbnVfZW50cnkgY2hvaWNlX2VudHJ5CisldHlwZSA8c3RyaW5nPiBzeW1ib2xfb3B0aW9uX2FyZyB3b3JkX29wdAorCislZGVzdHJ1Y3RvciB7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogbWlzc2luZyBlbmQgc3RhdGVtZW50IGZvciB0aGlzIGVudHJ5XG4iLAorCQkkJC0+ZmlsZS0+bmFtZSwgJCQtPmxpbmVubyk7CisJaWYgKGN1cnJlbnRfbWVudSA9PSAkJCkKKwkJbWVudV9lbmRfbWVudSgpOworfSBpZl9lbnRyeSBtZW51X2VudHJ5IGNob2ljZV9lbnRyeQorCisleworLyogSW5jbHVkZSB6Y29uZi5oYXNoLmMgaGVyZSBzbyBpdCBjYW4gc2VlIHRoZSB0b2tlbiBjb25zdGFudHMuICovCisjaW5jbHVkZSAiemNvbmYuaGFzaC5jIgorJX0KKworJSUKK2lucHV0OiBubCBzdGFydCB8IHN0YXJ0OworCitzdGFydDogbWFpbm1lbnVfc3RtdCBzdG10X2xpc3QgfCBzdG10X2xpc3Q7CisKK3N0bXRfbGlzdDoKKwkgIC8qIGVtcHR5ICovCisJfCBzdG10X2xpc3QgY29tbW9uX3N0bXQKKwl8IHN0bXRfbGlzdCBjaG9pY2Vfc3RtdAorCXwgc3RtdF9saXN0IG1lbnVfc3RtdAorCXwgc3RtdF9saXN0IGVuZAkJCXsgemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgZW5kIHN0YXRlbWVudCIpOyB9CisJfCBzdG10X2xpc3QgVF9XT1JEIGVycm9yIFRfRU9MCXsgemNvbmZfZXJyb3IoInVua25vd24gc3RhdGVtZW50IFwiJXNcIiIsICQyKTsgfQorCXwgc3RtdF9saXN0IG9wdGlvbl9uYW1lIGVycm9yIFRfRU9MCit7CisJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgb3B0aW9uIFwiJXNcIiIsIGtjb25mX2lkX3N0cmluZ3MgKyAkMi0+bmFtZSk7Cit9CisJfCBzdG10X2xpc3QgZXJyb3IgVF9FT0wJCXsgemNvbmZfZXJyb3IoImludmFsaWQgc3RhdGVtZW50Iik7IH0KKzsKKworb3B0aW9uX25hbWU6CisJVF9ERVBFTkRTIHwgVF9QUk9NUFQgfCBUX1RZUEUgfCBUX1NFTEVDVCB8IFRfT1BUSU9OQUwgfCBUX1JBTkdFIHwgVF9ERUZBVUxUIHwgVF9WSVNJQkxFCis7CisKK2NvbW1vbl9zdG10OgorCSAgVF9FT0wKKwl8IGlmX3N0bXQKKwl8IGNvbW1lbnRfc3RtdAorCXwgY29uZmlnX3N0bXQKKwl8IG1lbnVjb25maWdfc3RtdAorCXwgc291cmNlX3N0bXQKKzsKKworb3B0aW9uX2Vycm9yOgorCSAgVF9XT1JEIGVycm9yIFRfRU9MCQl7IHpjb25mX2Vycm9yKCJ1bmtub3duIG9wdGlvbiBcIiVzXCIiLCAkMSk7IH0KKwl8IGVycm9yIFRfRU9MCQkJeyB6Y29uZl9lcnJvcigiaW52YWxpZCBvcHRpb24iKTsgfQorOworCisKKy8qIGNvbmZpZy9tZW51Y29uZmlnIGVudHJ5ICovCisKK2NvbmZpZ19lbnRyeV9zdGFydDogVF9DT05GSUcgVF9XT1JEIFRfRU9MCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2xvb2t1cCgkMiwgMCk7CisJc3ltLT5mbGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7CisJbWVudV9hZGRfZW50cnkoc3ltKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb25maWcgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQyKTsKK307CisKK2NvbmZpZ19zdG10OiBjb25maWdfZW50cnlfc3RhcnQgY29uZmlnX29wdGlvbl9saXN0Cit7CisJbWVudV9lbmRfZW50cnkoKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworbWVudWNvbmZpZ19lbnRyeV9zdGFydDogVF9NRU5VQ09ORklHIFRfV09SRCBUX0VPTAoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoJDIsIDApOworCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOworCW1lbnVfYWRkX2VudHJ5KHN5bSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudWNvbmZpZyAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDIpOworfTsKKworbWVudWNvbmZpZ19zdG10OiBtZW51Y29uZmlnX2VudHJ5X3N0YXJ0IGNvbmZpZ19vcHRpb25fbGlzdAoreworCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQpCisJCWN1cnJlbnRfZW50cnktPnByb21wdC0+dHlwZSA9IFBfTUVOVTsKKwllbHNlCisJCXpjb25mcHJpbnQoIndhcm5pbmc6IG1lbnVjb25maWcgc3RhdGVtZW50IHdpdGhvdXQgcHJvbXB0Iik7CisJbWVudV9lbmRfZW50cnkoKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworY29uZmlnX29wdGlvbl9saXN0OgorCSAgLyogZW1wdHkgKi8KKwl8IGNvbmZpZ19vcHRpb25fbGlzdCBjb25maWdfb3B0aW9uCisJfCBjb25maWdfb3B0aW9uX2xpc3Qgc3ltYm9sX29wdGlvbgorCXwgY29uZmlnX29wdGlvbl9saXN0IGRlcGVuZHMKKwl8IGNvbmZpZ19vcHRpb25fbGlzdCBoZWxwCisJfCBjb25maWdfb3B0aW9uX2xpc3Qgb3B0aW9uX2Vycm9yCisJfCBjb25maWdfb3B0aW9uX2xpc3QgVF9FT0wKKzsKKworY29uZmlnX29wdGlvbjogVF9UWVBFIHByb21wdF9zdG10X29wdCBUX0VPTAoreworCW1lbnVfc2V0X3R5cGUoJDEtPnN0eXBlKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwKKwkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKKwkJJDEtPnN0eXBlKTsKK307CisKK2NvbmZpZ19vcHRpb246IFRfUFJPTVBUIHByb21wdCBpZl9leHByIFRfRU9MCit7CisJbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAkMiwgJDMpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9OworCitjb25maWdfb3B0aW9uOiBUX0RFRkFVTFQgZXhwciBpZl9leHByIFRfRU9MCit7CisJbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsICQyLCAkMyk7CisJaWYgKCQxLT5zdHlwZSAhPSBTX1VOS05PV04pCisJCW1lbnVfc2V0X3R5cGUoJDEtPnN0eXBlKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0KCV1KVxuIiwKKwkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKKwkJJDEtPnN0eXBlKTsKK307CisKK2NvbmZpZ19vcHRpb246IFRfU0VMRUNUIFRfV09SRCBpZl9leHByIFRfRU9MCit7CisJbWVudV9hZGRfc3ltYm9sKFBfU0VMRUNULCBzeW1fbG9va3VwKCQyLCAwKSwgJDMpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNlbGVjdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9OworCitjb25maWdfb3B0aW9uOiBUX1JBTkdFIHN5bWJvbCBzeW1ib2wgaWZfZXhwciBUX0VPTAoreworCW1lbnVfYWRkX2V4cHIoUF9SQU5HRSwgZXhwcl9hbGxvY19jb21wKEVfUkFOR0UsJDIsICQzKSwgJDQpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnJhbmdlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisKK3N5bWJvbF9vcHRpb246IFRfT1BUSU9OIHN5bWJvbF9vcHRpb25fbGlzdCBUX0VPTAorOworCitzeW1ib2xfb3B0aW9uX2xpc3Q6CisJICAvKiBlbXB0eSAqLworCXwgc3ltYm9sX29wdGlvbl9saXN0IFRfV09SRCBzeW1ib2xfb3B0aW9uX2FyZworeworCWNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoJDIsIHN0cmxlbigkMikpOworCWlmIChpZCAmJiBpZC0+ZmxhZ3MgJiBURl9PUFRJT04pCisJCW1lbnVfYWRkX29wdGlvbihpZC0+dG9rZW4sICQzKTsKKwllbHNlCisJCXpjb25mcHJpbnQoIndhcm5pbmc6IGlnbm9yaW5nIHVua25vd24gb3B0aW9uICVzIiwgJDIpOworCWZyZWUoJDIpOworfTsKKworc3ltYm9sX29wdGlvbl9hcmc6CisJICAvKiBlbXB0eSAqLwkJeyAkJCA9IE5VTEw7IH0KKwl8IFRfRVFVQUwgcHJvbXB0CXsgJCQgPSAkMjsgfQorOworCisvKiBjaG9pY2UgZW50cnkgKi8KKworY2hvaWNlOiBUX0NIT0lDRSB3b3JkX29wdCBUX0VPTAoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoJDIsIFNZTUJPTF9DSE9JQ0UpOworCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0FVVE87CisJbWVudV9hZGRfZW50cnkoc3ltKTsKKwltZW51X2FkZF9leHByKFBfQ0hPSUNFLCBOVUxMLCBOVUxMKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjaG9pY2VcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworY2hvaWNlX2VudHJ5OiBjaG9pY2UgY2hvaWNlX29wdGlvbl9saXN0Cit7CisJJCQgPSBtZW51X2FkZF9tZW51KCk7Cit9OworCitjaG9pY2VfZW5kOiBlbmQKK3sKKwlpZiAoemNvbmZfZW5kdG9rZW4oJDEsIFRfQ0hPSUNFLCBUX0VORENIT0lDRSkpIHsKKwkJbWVudV9lbmRfbWVudSgpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjaG9pY2VcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0KK307CisKK2Nob2ljZV9zdG10OiBjaG9pY2VfZW50cnkgY2hvaWNlX2Jsb2NrIGNob2ljZV9lbmQKKzsKKworY2hvaWNlX29wdGlvbl9saXN0OgorCSAgLyogZW1wdHkgKi8KKwl8IGNob2ljZV9vcHRpb25fbGlzdCBjaG9pY2Vfb3B0aW9uCisJfCBjaG9pY2Vfb3B0aW9uX2xpc3QgZGVwZW5kcworCXwgY2hvaWNlX29wdGlvbl9saXN0IGhlbHAKKwl8IGNob2ljZV9vcHRpb25fbGlzdCBUX0VPTAorCXwgY2hvaWNlX29wdGlvbl9saXN0IG9wdGlvbl9lcnJvcgorOworCitjaG9pY2Vfb3B0aW9uOiBUX1BST01QVCBwcm9tcHQgaWZfZXhwciBUX0VPTAoreworCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgJDIsICQzKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworY2hvaWNlX29wdGlvbjogVF9UWVBFIHByb21wdF9zdG10X29wdCBUX0VPTAoreworCWlmICgkMS0+c3R5cGUgPT0gU19CT09MRUFOIHx8ICQxLT5zdHlwZSA9PSBTX1RSSVNUQVRFKSB7CisJCW1lbnVfc2V0X3R5cGUoJDEtPnN0eXBlKTsKKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCisJCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAorCQkJJDEtPnN0eXBlKTsKKwl9IGVsc2UKKwkJWVlFUlJPUjsKK307CisKK2Nob2ljZV9vcHRpb246IFRfT1BUSU9OQUwgVF9FT0wKK3sKKwljdXJyZW50X2VudHJ5LT5zeW0tPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpvcHRpb25hbFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9OworCitjaG9pY2Vfb3B0aW9uOiBUX0RFRkFVTFQgVF9XT1JEIGlmX2V4cHIgVF9FT0wKK3sKKwlpZiAoJDEtPnN0eXBlID09IFNfVU5LTk9XTikgeworCQltZW51X2FkZF9zeW1ib2woUF9ERUZBVUxULCBzeW1fbG9va3VwKCQyLCAwKSwgJDMpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0XG4iLAorCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJfSBlbHNlCisJCVlZRVJST1I7Cit9OworCitjaG9pY2VfYmxvY2s6CisJICAvKiBlbXB0eSAqLworCXwgY2hvaWNlX2Jsb2NrIGNvbW1vbl9zdG10Cis7CisKKy8qIGlmIGVudHJ5ICovCisKK2lmX2VudHJ5OiBUX0lGIGV4cHIgbmwKK3sKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJbWVudV9hZGRfZW50cnkoTlVMTCk7CisJbWVudV9hZGRfZGVwKCQyKTsKKwkkJCA9IG1lbnVfYWRkX21lbnUoKTsKK307CisKK2lmX2VuZDogZW5kCit7CisJaWYgKHpjb25mX2VuZHRva2VuKCQxLCBUX0lGLCBUX0VORElGKSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl9Cit9OworCitpZl9zdG10OiBpZl9lbnRyeSBpZl9ibG9jayBpZl9lbmQKKzsKKworaWZfYmxvY2s6CisJICAvKiBlbXB0eSAqLworCXwgaWZfYmxvY2sgY29tbW9uX3N0bXQKKwl8IGlmX2Jsb2NrIG1lbnVfc3RtdAorCXwgaWZfYmxvY2sgY2hvaWNlX3N0bXQKKzsKKworLyogbWFpbm1lbnUgZW50cnkgKi8KKworbWFpbm1lbnVfc3RtdDogVF9NQUlOTUVOVSBwcm9tcHQgbmwKK3sKKwltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAkMiwgTlVMTCk7Cit9OworCisvKiBtZW51IGVudHJ5ICovCisKK21lbnU6IFRfTUVOVSBwcm9tcHQgVF9FT0wKK3sKKwltZW51X2FkZF9lbnRyeShOVUxMKTsKKwltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAkMiwgTlVMTCk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9OworCittZW51X2VudHJ5OiBtZW51IHZpc2liaWxpdHlfbGlzdCBkZXBlbmRzX2xpc3QKK3sKKwkkJCA9IG1lbnVfYWRkX21lbnUoKTsKK307CisKK21lbnVfZW5kOiBlbmQKK3sKKwlpZiAoemNvbmZfZW5kdG9rZW4oJDEsIFRfTUVOVSwgVF9FTkRNRU5VKSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZG1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0KK307CisKK21lbnVfc3RtdDogbWVudV9lbnRyeSBtZW51X2Jsb2NrIG1lbnVfZW5kCis7CisKK21lbnVfYmxvY2s6CisJICAvKiBlbXB0eSAqLworCXwgbWVudV9ibG9jayBjb21tb25fc3RtdAorCXwgbWVudV9ibG9jayBtZW51X3N0bXQKKwl8IG1lbnVfYmxvY2sgY2hvaWNlX3N0bXQKKzsKKworc291cmNlX3N0bXQ6IFRfU09VUkNFIHByb21wdCBUX0VPTAoreworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNvdXJjZSAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDIpOworCXpjb25mX25leHRmaWxlKCQyKTsKK307CisKKy8qIGNvbW1lbnQgZW50cnkgKi8KKworY29tbWVudDogVF9DT01NRU5UIHByb21wdCBUX0VPTAoreworCW1lbnVfYWRkX2VudHJ5KE5VTEwpOworCW1lbnVfYWRkX3Byb21wdChQX0NPTU1FTlQsICQyLCBOVUxMKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb21tZW50XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisKK2NvbW1lbnRfc3RtdDogY29tbWVudCBkZXBlbmRzX2xpc3QKK3sKKwltZW51X2VuZF9lbnRyeSgpOworfTsKKworLyogaGVscCBvcHRpb24gKi8KKworaGVscF9zdGFydDogVF9IRUxQIFRfRU9MCit7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aGVscFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJemNvbmZfc3RhcnRoZWxwKCk7Cit9OworCitoZWxwOiBoZWxwX3N0YXJ0IFRfSEVMUFRFWFQKK3sKKwljdXJyZW50X2VudHJ5LT5oZWxwID0gJDI7Cit9OworCisvKiBkZXBlbmRzIG9wdGlvbiAqLworCitkZXBlbmRzX2xpc3Q6CisJICAvKiBlbXB0eSAqLworCXwgZGVwZW5kc19saXN0IGRlcGVuZHMKKwl8IGRlcGVuZHNfbGlzdCBUX0VPTAorCXwgZGVwZW5kc19saXN0IG9wdGlvbl9lcnJvcgorOworCitkZXBlbmRzOiBUX0RFUEVORFMgVF9PTiBleHByIFRfRU9MCit7CisJbWVudV9hZGRfZGVwKCQzKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZXBlbmRzIG9uXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisKKy8qIHZpc2liaWxpdHkgb3B0aW9uICovCisKK3Zpc2liaWxpdHlfbGlzdDoKKwkgIC8qIGVtcHR5ICovCisJfCB2aXNpYmlsaXR5X2xpc3QgdmlzaWJsZQorCXwgdmlzaWJpbGl0eV9saXN0IFRfRU9MCis7CisKK3Zpc2libGU6IFRfVklTSUJMRSBpZl9leHByCit7CisJbWVudV9hZGRfdmlzaWJpbGl0eSgkMik7Cit9OworCisvKiBwcm9tcHQgc3RhdGVtZW50ICovCisKK3Byb21wdF9zdG10X29wdDoKKwkgIC8qIGVtcHR5ICovCisJfCBwcm9tcHQgaWZfZXhwcgoreworCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgJDEsICQyKTsKK307CisKK3Byb21wdDoJICBUX1dPUkQKKwl8IFRfV09SRF9RVU9URQorOworCitlbmQ6CSAgVF9FTkRNRU5VIFRfRU9MCXsgJCQgPSAkMTsgfQorCXwgVF9FTkRDSE9JQ0UgVF9FT0wJeyAkJCA9ICQxOyB9CisJfCBUX0VORElGIFRfRU9MCQl7ICQkID0gJDE7IH0KKzsKKworbmw6CisJICBUX0VPTAorCXwgbmwgVF9FT0wKKzsKKworaWZfZXhwcjogIC8qIGVtcHR5ICovCQkJeyAkJCA9IE5VTEw7IH0KKwl8IFRfSUYgZXhwcgkJCXsgJCQgPSAkMjsgfQorOworCitleHByOgkgIHN5bWJvbAkJCQl7ICQkID0gZXhwcl9hbGxvY19zeW1ib2woJDEpOyB9CisJfCBzeW1ib2wgVF9FUVVBTCBzeW1ib2wJCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsICQxLCAkMyk7IH0KKwl8IHN5bWJvbCBUX1VORVFVQUwgc3ltYm9sCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgJDEsICQzKTsgfQorCXwgVF9PUEVOX1BBUkVOIGV4cHIgVF9DTE9TRV9QQVJFTgl7ICQkID0gJDI7IH0KKwl8IFRfTk9UIGV4cHIJCQkJeyAkJCA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCAkMik7IH0KKwl8IGV4cHIgVF9PUiBleHByCQkJeyAkJCA9IGV4cHJfYWxsb2NfdHdvKEVfT1IsICQxLCAkMyk7IH0KKwl8IGV4cHIgVF9BTkQgZXhwcgkJCXsgJCQgPSBleHByX2FsbG9jX3R3byhFX0FORCwgJDEsICQzKTsgfQorOworCitzeW1ib2w6CSAgVF9XT1JECXsgJCQgPSBzeW1fbG9va3VwKCQxLCAwKTsgZnJlZSgkMSk7IH0KKwl8IFRfV09SRF9RVU9URQl7ICQkID0gc3ltX2xvb2t1cCgkMSwgU1lNQk9MX0NPTlNUKTsgZnJlZSgkMSk7IH0KKzsKKword29yZF9vcHQ6IC8qIGVtcHR5ICovCQkJeyAkJCA9IE5VTEw7IH0KKwl8IFRfV09SRAorCislJQorCit2b2lkIGNvbmZfcGFyc2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJaW50IGk7CisKKwl6Y29uZl9pbml0c2NhbihuYW1lKTsKKworCXN5bV9pbml0KCk7CisJX21lbnVfaW5pdCgpOworCW1vZHVsZXNfc3ltID0gc3ltX2xvb2t1cChOVUxMLCAwKTsKKwltb2R1bGVzX3N5bS0+dHlwZSA9IFNfQk9PTEVBTjsKKwltb2R1bGVzX3N5bS0+ZmxhZ3MgfD0gU1lNQk9MX0FVVE87CisJcm9vdG1lbnUucHJvbXB0ID0gbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgIkNBUkw5MTcwIEZpcm13YXJlIENvbmZpZ3VyYXRpb24iLCBOVUxMKTsKKworCWlmIChnZXRlbnYoIlpDT05GX0RFQlVHIikpCisJCXpjb25mZGVidWcgPSAxOworCXpjb25mcGFyc2UoKTsKKwlpZiAoemNvbmZuZXJycykKKwkJZXhpdCgxKTsKKwlpZiAoIW1vZHVsZXNfc3ltLT5wcm9wKSB7CisJCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCQlwcm9wID0gcHJvcF9hbGxvYyhQX0RFRkFVTFQsIG1vZHVsZXNfc3ltKTsKKwkJcHJvcC0+ZXhwciA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bV9sb29rdXAoIk1PRFVMRVMiLCAwKSk7CisJfQorCisJcm9vdG1lbnUucHJvbXB0LT50ZXh0ID0gXyhyb290bWVudS5wcm9tcHQtPnRleHQpOworCXJvb3RtZW51LnByb21wdC0+dGV4dCA9IHN5bV9leHBhbmRfc3RyaW5nX3ZhbHVlKHJvb3RtZW51LnByb21wdC0+dGV4dCk7CisKKwltZW51X2ZpbmFsaXplKCZyb290bWVudSk7CisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgeworCQlpZiAoc3ltX2NoZWNrX2RlcHMoc3ltKSkKKwkJCXpjb25mbmVycnMrKzsKKyAgICAgICAgfQorCWlmICh6Y29uZm5lcnJzKQorCQlleGl0KDEpOworCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKK3sKKwlzd2l0Y2ggKHRva2VuKSB7CisJY2FzZSBUX01FTlU6CQlyZXR1cm4gIm1lbnUiOworCWNhc2UgVF9FTkRNRU5VOgkJcmV0dXJuICJlbmRtZW51IjsKKwljYXNlIFRfQ0hPSUNFOgkJcmV0dXJuICJjaG9pY2UiOworCWNhc2UgVF9FTkRDSE9JQ0U6CXJldHVybiAiZW5kY2hvaWNlIjsKKwljYXNlIFRfSUY6CQlyZXR1cm4gImlmIjsKKwljYXNlIFRfRU5ESUY6CQlyZXR1cm4gImVuZGlmIjsKKwljYXNlIFRfREVQRU5EUzoJCXJldHVybiAiZGVwZW5kcyI7CisJY2FzZSBUX1ZJU0lCTEU6CQlyZXR1cm4gInZpc2libGUiOworCX0KKwlyZXR1cm4gIjx0b2tlbj4iOworfQorCitzdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKQoreworCWlmIChpZC0+dG9rZW4gIT0gZW5kdG9rZW4pIHsKKwkJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgJyVzJyB3aXRoaW4gJXMgYmxvY2siLAorCQkJa2NvbmZfaWRfc3RyaW5ncyArIGlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOworCQl6Y29uZm5lcnJzKys7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKGN1cnJlbnRfbWVudS0+ZmlsZSAhPSBjdXJyZW50X2ZpbGUpIHsKKwkJemNvbmZfZXJyb3IoIiclcycgaW4gZGlmZmVyZW50IGZpbGUgdGhhbiAnJXMnIiwKKwkJCWtjb25mX2lkX3N0cmluZ3MgKyBpZC0+bmFtZSwgemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczolZDogbG9jYXRpb24gb2YgdGhlICclcydcbiIsCisJCQljdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRfbWVudS0+bGluZW5vLAorCQkJemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwkJemNvbmZuZXJycysrOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl2YV9zdGFydChhcCwgZXJyKTsKKwl2ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOworCXZhX2VuZChhcCk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworfQorCitzdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJemNvbmZuZXJycysrOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCXZhX3N0YXJ0KGFwLCBlcnIpOworCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBhcCk7CisJdmFfZW5kKGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mZXJyb3IoY29uc3QgY2hhciAqZXJyKQoreworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSwgZXJyKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwljb25zdCBjaGFyICpwOworCWludCBsZW47CisKKwlwdXRjKCciJywgb3V0KTsKKwl3aGlsZSAoKHAgPSBzdHJjaHIoc3RyLCAnIicpKSkgeworCQlsZW4gPSBwIC0gc3RyOworCQlpZiAobGVuKQorCQkJZnByaW50ZihvdXQsICIlLipzIiwgbGVuLCBzdHIpOworCQlmcHV0cygiXFxcIiIsIG91dCk7CisJCXN0ciA9IHAgKyAxOworCX0KKwlmcHV0cyhzdHIsIG91dCk7CisJcHV0YygnIicsIG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKQorCQlmcHJpbnRmKG91dCwgIlxuY2hvaWNlXG4iKTsKKwllbHNlCisJCWZwcmludGYob3V0LCAiXG5jb25maWcgJXNcbiIsIHN5bS0+bmFtZSk7CisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwkJZnB1dHMoIiAgYm9vbGVhblxuIiwgb3V0KTsKKwkJYnJlYWs7CisJY2FzZSBTX1RSSVNUQVRFOgorCQlmcHV0cygiICB0cmlzdGF0ZVxuIiwgb3V0KTsKKwkJYnJlYWs7CisJY2FzZSBTX1NUUklORzoKKwkJZnB1dHMoIiAgc3RyaW5nXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfSU5UOgorCQlmcHV0cygiICBpbnRlZ2VyXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfSEVYOgorCQlmcHV0cygiICBoZXhcbiIsIG91dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZwdXRzKCIgID8/P1xuIiwgb3V0KTsKKwkJYnJlYWs7CisJfQorCWZvciAocHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKKwkJaWYgKHByb3AtPm1lbnUgIT0gbWVudSkKKwkJCWNvbnRpbnVlOworCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJY2FzZSBQX1BST01QVDoKKwkJCWZwdXRzKCIgIHByb21wdCAiLCBvdXQpOworCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOworCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7CisJCQkJZnB1dHMoIiBpZiAiLCBvdXQpOworCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsKKwkJCX0KKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX0RFRkFVTFQ6CisJCQlmcHV0cyggIiAgZGVmYXVsdCAiLCBvdXQpOworCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsKKwkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgeworCQkJCWZwdXRzKCIgaWYgIiwgb3V0KTsKKwkJCQlleHByX2ZwcmludChwcm9wLT52aXNpYmxlLmV4cHIsIG91dCk7CisJCQl9CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9DSE9JQ0U6CisJCQlmcHV0cygiICAjY2hvaWNlIHZhbHVlXG4iLCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9TRUxFQ1Q6CisJCQlmcHV0cyggIiAgc2VsZWN0ICIsIG91dCk7CisJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOworCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFBfUkFOR0U6CisJCQlmcHV0cyggIiAgcmFuZ2UgIiwgb3V0KTsKKwkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9NRU5VOgorCQkJZnB1dHMoICIgIG1lbnUgIiwgb3V0KTsKKwkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZwcmludGYob3V0LCAiICB1bmtub3duIHByb3AgJWQhXG4iLCBwcm9wLT50eXBlKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChtZW51LT5oZWxwKSB7CisJCWludCBsZW4gPSBzdHJsZW4obWVudS0+aGVscCk7CisJCXdoaWxlIChtZW51LT5oZWxwWy0tbGVuXSA9PSAnXG4nKQorCQkJbWVudS0+aGVscFtsZW5dID0gMDsKKwkJZnByaW50ZihvdXQsICIgIGhlbHBcbiVzXG4iLCBtZW51LT5oZWxwKTsKKwl9Cit9CisKK3ZvaWQgemNvbmZkdW1wKEZJTEUgKm91dCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBtZW51ICptZW51OworCisJbWVudSA9IHJvb3RtZW51Lmxpc3Q7CisJd2hpbGUgKG1lbnUpIHsKKwkJaWYgKChzeW0gPSBtZW51LT5zeW0pKQorCQkJcHJpbnRfc3ltYm9sKG91dCwgbWVudSk7CisJCWVsc2UgaWYgKChwcm9wID0gbWVudS0+cHJvbXB0KSkgeworCQkJc3dpdGNoIChwcm9wLT50eXBlKSB7CisJCQljYXNlIFBfQ09NTUVOVDoKKwkJCQlmcHV0cygiXG5jb21tZW50ICIsIG91dCk7CisJCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOworCQkJCWZwdXRzKCJcbiIsIG91dCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBfTUVOVToKKwkJCQlmcHV0cygiXG5tZW51ICIsIG91dCk7CisJCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOworCQkJCWZwdXRzKCJcbiIsIG91dCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCTsKKwkJCX0KKwkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgeworCQkJCWZwdXRzKCIgIGRlcGVuZHMgIiwgb3V0KTsKKwkJCQlleHByX2ZwcmludChwcm9wLT52aXNpYmxlLmV4cHIsIG91dCk7CisJCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCX0KKwkJfQorCisJCWlmIChtZW51LT5saXN0KQorCQkJbWVudSA9IG1lbnUtPmxpc3Q7CisJCWVsc2UgaWYgKG1lbnUtPm5leHQpCisJCQltZW51ID0gbWVudS0+bmV4dDsKKwkJZWxzZSB3aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpKSB7CisJCQlpZiAobWVudS0+cHJvbXB0ICYmIG1lbnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpCisJCQkJZnB1dHMoIlxuZW5kbWVudVxuIiwgb3V0KTsKKwkJCWlmIChtZW51LT5uZXh0KSB7CisJCQkJbWVudSA9IG1lbnUtPm5leHQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKKyNpbmNsdWRlICJ6Y29uZi5sZXguYyIKKyNpbmNsdWRlICJ1dGlsLmMiCisjaW5jbHVkZSAiY29uZmRhdGEuYyIKKyNpbmNsdWRlICJleHByLmMiCisjaW5jbHVkZSAic3ltYm9sLmMiCisjaW5jbHVkZSAibWVudS5jIgpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9leHRyYS9GaW5kR1BFUkYuY21ha2UgYi9jYXJsOTE3MGZ3L2V4dHJhL0ZpbmRHUEVSRi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWY4NzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9leHRyYS9GaW5kR1BFUkYuY21ha2UKQEAgLTAsMCArMSwxNjAgQEAKKyMgLSBGaW5kIGdwZXJmIGV4ZWN1dGFibGUgYW5kIHByb3ZpZGVzIGEgbWFjcm8gdG8gZ2VuZXJhdGUgY3VzdG9tIGJ1aWxkIHJ1bGVzCisjCisjIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyMgIEdQRVJGX0ZPVU5EIC0gdHJ1ZSBpcyBncGVyZiBleGVjdXRhYmxlIGlzIGZvdW5kCisjICBHUEVSRl9FWEVDVVRBQkxFIC0gdGhlIHBhdGggdG8gdGhlIGdwZXJmIGV4ZWN1dGFibGUKKyMgIEdQRVJGX1ZFUlNJT04gLSB0aGUgdmVyc2lvbiBvZiBncGVyZgorIyAgR1BFUkZfTElCUkFSSUVTIC0gVGhlIGdwZXJmIGxpYnJhcmllcworIworIyBUaGUgbWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIG9mIGdwZXJmIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlCisjIHN0YW5kYXJkIHN5bnRheCwgZS5nLiBGSU5EX1BBQ0tBR0UoR1BFUkYgMi41LjEzKQorIworIworIyBJZiBncGVyZiBpcyBmb3VuZCBvbiB0aGUgc3lzdGVtLCB0aGUgbW9kdWxlIHByb3ZpZGVzIHRoZSBtYWNybzoKKyMgIEdQRVJGX1RBUkdFVChOYW1lIEdwZXJmSW5wdXQgR3BlcmZPdXRwdXQgW0NPTVBJTEVfRkxBR1MgPHN0cmluZz5dKQorIyB3aGljaCBjcmVhdGVzIGEgY3VzdG9tIGNvbW1hbmQgIHRvIGdlbmVyYXRlIHRoZSA8R3BlcmZPdXRwdXQ+IGZpbGUgZnJvbQorIyB0aGUgPEdwZXJmSW5wdXQ+IGZpbGUuICBJZiAgQ09NUElMRV9GTEFHUyBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUgbmV4dAorIyBwYXJhbWV0ZXIgaXMgYWRkZWQgdG8gdGhlIGdwZXJmICBjb21tYW5kIGxpbmUuIE5hbWUgaXMgYW4gYWxpYXMgdXNlZCB0bworIyBnZXQgIGRldGFpbHMgb2YgIHRoaXMgY3VzdG9tICBjb21tYW5kLiAgSW5kZWVkIHRoZSAgbWFjcm8gZGVmaW5lcyAgdGhlCisjIGZvbGxvd2luZyB2YXJpYWJsZXM6CisjICBHUEVSRl8ke05hbWV9X0RFRklORUQgLSB0cnVlIGlzIHRoZSBtYWNybyByYW4gc3VjY2Vzc2Z1bGx5CisjICBHUEVSRl8ke05hbWV9X09VVFBVVFMgLSB0aGUgc291cmNlIGZpbGUgZ2VuZXJhdGVkIGJ5IHRoZSBjdXN0b20gcnVsZSwgYW4KKyMgIGFsaWFzIGZvciBHcGVyZk91dHB1dAorIyAgR1BFUkZfJHtOYW1lfV9JTlBVVCAtIHRoZSBncGVyZiBzb3VyY2UgZmlsZSwgYW4gYWxpYXMgZm9yICR7R3BlcmZJbnB1dH0KKyMKKyMgR3BlcmYgc2Nhbm5lcnMgb2Z0ZW5seSB1c2UgdG9rZW5zICBkZWZpbmVkIGJ5IEJpc29uOiB0aGUgY29kZSBnZW5lcmF0ZWQKKyMgYnkgR3BlcmYgIGRlcGVuZHMgb2YgdGhlIGhlYWRlciAgZ2VuZXJhdGVkIGJ5IEJpc29uLiAgIFRoaXMgbW9kdWxlIGFsc28KKyMgZGVmaW5lcyBhIG1hY3JvOgorIyAgQUREX0dQRVJGX0JJU09OX0RFUEVOREVOQ1koR3BlcmZUYXJnZXQgQmlzb25UYXJnZXQpCisjIHdoaWNoICBhZGRzIHRoZSAgcmVxdWlyZWQgZGVwZW5kZW5jeSAgYmV0d2VlbiBhICBzY2FubmVyIGFuZCAgYSBwYXJzZXIKKyMgd2hlcmUgIDxHcGVyZlRhcmdldD4gIGFuZCA8Qmlzb25UYXJnZXQ+ICBhcmUgIHRoZSAgZmlyc3QgcGFyYW1ldGVycyAgb2YKKyMgcmVzcGVjdGl2ZWx5IEdQRVJGX1RBUkdFVCBhbmQgQklTT05fVEFSR0VUIG1hY3Jvcy4KKyMKKyMgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICBFeGFtcGxlOgorIworIyAgIGZpbmRfcGFja2FnZShHUEVSRikKKyMKKyMgICBHUEVSRl9UQVJHRVQoTXlIYXNoIGhhc2guZ3BlcmYgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9oYXNoLmMpCisjCisjICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgQ29weXJpZ2h0IDIwMDkgS2l0d2FyZSwgSW5jLgorIyBDb3B5cmlnaHQgMjAwNiBUcmlzdGFuIENhcmVsCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIEtpdHdhcmUsIEluYy4sIHRoZSBJbnNpZ2h0IFNvZnR3YXJlIENvbnNvcnRpdW0sCisjICAgbm9yIHRoZSBuYW1lcyBvZiB0aGVpciBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisjICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisjICAgcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorCitGSU5EX1BST0dSQU0oR1BFUkZfRVhFQ1VUQUJMRSBncGVyZiBET0MgInBhdGggdG8gdGhlIGdwZXJmIGV4ZWN1dGFibGUiKQorTUFSS19BU19BRFZBTkNFRChHUEVSRl9FWEVDVVRBQkxFKQorCitGSU5EX0xJQlJBUlkoRkxfTElCUkFSWSBOQU1FUyBmbAorICBET0MgInBhdGggdG8gdGhlIGZsIGxpYnJhcnkiKQorTUFSS19BU19BRFZBTkNFRChGTF9MSUJSQVJZKQorU0VUKEdQRVJGX0xJQlJBUklFUyAke0ZMX0xJQlJBUll9KQorCitJRihHUEVSRl9FWEVDVVRBQkxFKQorCisgIEVYRUNVVEVfUFJPQ0VTUyhDT01NQU5EICR7R1BFUkZfRVhFQ1VUQUJMRX0gLS12ZXJzaW9uCisgICAgT1VUUFVUX1ZBUklBQkxFIEdQRVJGX3ZlcnNpb25fb3V0cHV0CisgICAgRVJST1JfVkFSSUFCTEUgR1BFUkZfdmVyc2lvbl9lcnJvcgorICAgIFJFU1VMVF9WQVJJQUJMRSBHUEVSRl92ZXJzaW9uX3Jlc3VsdAorICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorCisgIFNFVChFTlZ7TENfQUxMfSAke19CaXNvbl9TQVZFRF9MQ19BTEx9KQorCisgIElGKE5PVCAke0dQRVJGX3ZlcnNpb25fcmVzdWx0fSBFUVVBTCAwKQorICAgIE1FU1NBR0UoU0VORF9FUlJPUiAiQ29tbWFuZCBcIiR7R1BFUkZfRVhFQ1VUQUJMRX0gLS12ZXJzaW9uXCIgZmFpbGVkIHdpdGggb3V0cHV0OlxuJHtHUEVSRl92ZXJzaW9uX2Vycm9yfSIpCisgIEVMU0UoKSAKKyAgICBTVFJJTkcoUkVHRVggUkVQTEFDRSAiXkdOVSBncGVyZiAoW15cbl0rKVxuLioiICJcXDEiCisgICAgICBHUEVSRl9WRVJTSU9OICIke0dQRVJGX3ZlcnNpb25fb3V0cHV0fSIpCisgIEVORElGKCkKKworICAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICMgR1BFUkZfVEFSR0VUIChwdWJsaWMgbWFjcm8pCisgICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIworICBNQUNSTyhHUEVSRl9UQVJHRVQgTmFtZSBJbnB1dCBPdXRwdXQpCisgICAgU0VUKEdQRVJGX1RBUkdFVF91c2FnZSAiR1BFUkZfVEFSR0VUKDxOYW1lPiA8SW5wdXQ+IDxPdXRwdXQ+IFtDT01QSUxFX0ZMQUdTIDxzdHJpbmc+XSIpCisgICAgSUYoJHtBUkdDfSBHUkVBVEVSIDMpCisgICAgICBJRigke0FSR0N9IEVRVUFMIDUpCisgICAgICAgIElGKCIke0FSR1YzfSIgU1RSRVFVQUwgIkNPTVBJTEVfRkxBR1MiKQorICAgICAgICAgIFNFVChHUEVSRl9FWEVDVVRBQkxFX29wdHMgICIke0FSR1Y0fSIpCisgICAgICAgICAgU0VQQVJBVEVfQVJHVU1FTlRTKEdQRVJGX0VYRUNVVEFCTEVfb3B0cykKKyAgICAgICAgRUxTRSgpCisgICAgICAgICAgTUVTU0FHRShTRU5EX0VSUk9SICR7R1BFUkZfVEFSR0VUX3VzYWdlfSkKKyAgICAgICAgRU5ESUYoKQorICAgICAgRUxTRSgpCisgICAgICAgIE1FU1NBR0UoU0VORF9FUlJPUiAke0dQRVJGX1RBUkdFVF91c2FnZX0pCisgICAgICBFTkRJRigpCisgICAgRU5ESUYoKQorCisgICAgQUREX0NVU1RPTV9DT01NQU5EKE9VVFBVVCAke091dHB1dH0KKyAgICAgIENPTU1BTkQgJHtHUEVSRl9FWEVDVVRBQkxFfQorICAgICAgQVJHUyAke0dQRVJGX0VYRUNVVEFCTEVfb3B0c30gPCAke0lucHV0fSA+ICR7T3V0cHV0fQorICAgICAgREVQRU5EUyAke0lucHV0fQorICAgICAgQ09NTUVOVCAiW0dQRVJGXVske05hbWV9XSBCdWlsZGluZyBoYXNoIHdpdGggZ3BlcmYgJHtHUEVSRl9WRVJTSU9OfSIKKyAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKKworICAgIFNFVChHUEVSRl8ke05hbWV9X0RFRklORUQgVFJVRSkKKyAgICBTRVQoR1BFUkZfJHtOYW1lfV9PVVRQVVRTICR7T3V0cHV0fSkKKyAgICBTRVQoR1BFUkZfJHtOYW1lfV9JTlBVVCAke0lucHV0fSkKKyAgICBTRVQoR1BFUkZfJHtOYW1lfV9DT01QSUxFX0ZMQUdTICR7R1BFUkZfRVhFQ1VUQUJMRV9vcHRzfSkKKyAgRU5ETUFDUk8oR1BFUkZfVEFSR0VUKQorICAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworICAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICMgQUREX0dQRVJGX0JJU09OX0RFUEVOREVOQ1kgKHB1YmxpYyBtYWNybykKKyAgIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAjCisgIE1BQ1JPKEFERF9HUEVSRl9CSVNPTl9ERVBFTkRFTkNZIEdwZXJmVGFyZ2V0IEJpc29uVGFyZ2V0KQorCisgICAgSUYoTk9UIEdQRVJGXyR7R3BlcmZUYXJnZXR9X09VVFBVVFMpCisgICAgICBNRVNTQUdFKFNFTkRfRVJST1IgIkdwZXJmIHRhcmdldCBgJHtHcGVyZlRhcmdldH0nIGRvZXMgbm90IGV4aXN0cy4iKQorICAgIEVORElGKCkKKworICAgIElGKE5PVCBCSVNPTl8ke0Jpc29uVGFyZ2V0fV9PVVRQVVRfSEVBREVSKQorICAgICAgTUVTU0FHRShTRU5EX0VSUk9SICJCaXNvbiB0YXJnZXQgYCR7Qmlzb25UYXJnZXR9JyBkb2VzIG5vdCBleGlzdHMuIikKKyAgICBFTkRJRigpCisKKyAgICBTRVRfU09VUkNFX0ZJTEVTX1BST1BFUlRJRVMoJHtHUEVSRl8ke0dwZXJmVGFyZ2V0fV9PVVRQVVRTfQorICAgICAgUFJPUEVSVElFUyBPQkpFQ1RfREVQRU5EUyAke0JJU09OXyR7Qmlzb25UYXJnZXR9X09VVFBVVF9IRUFERVJ9KQorICBFTkRNQUNSTyhBRERfR1BFUkZfQklTT05fREVQRU5ERU5DWSkKKyAgIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFTkRJRihHUEVSRl9FWEVDVVRBQkxFKQorCitJTkNMVURFKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCitGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoR1BFUkYgUkVRVUlSRURfVkFSUyBHUEVSRl9FWEVDVVRBQkxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX1ZBUiBHUEVSRl9WRVJTSU9OKQorCisjIEZpbmRHUEVSRi5jbWFrZSBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvZXh0cmEvRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UgYi9jYXJsOTE3MGZ3L2V4dHJhL0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMzQ0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2V4dHJhL0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlCkBAIC0wLDAgKzEsMjc4IEBACisjIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyg8bmFtZT4gLi4uICkKKyMKKyMgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGluIEZpbmRYWFguY21ha2UgbW9kdWxlcyBmaWxlcy4KKyMgSXQgaGFuZGxlcyB0aGUgUkVRVUlSRUQsIFFVSUVUIGFuZCB2ZXJzaW9uLXJlbGF0ZWQgYXJndW1lbnRzIHRvIEZJTkRfUEFDS0FHRSgpLgorIyBJdCBhbHNvIHNldHMgdGhlIDxVUFBFUkNBU0VEX05BTUU+X0ZPVU5EIHZhcmlhYmxlLgorIyBUaGUgcGFja2FnZSBpcyBjb25zaWRlcmVkIGZvdW5kIGlmIGFsbCB2YXJpYWJsZXMgPHZhcjE+Li4uIGxpc3RlZCBjb250YWluCisjIHZhbGlkIHJlc3VsdHMsIGUuZy4gdmFsaWQgZmlsZXBhdGhzLgorIworIyBUaGVyZSBhcmUgdHdvIG1vZGVzIG9mIHRoaXMgZnVuY3Rpb24uIFRoZSBmaXJzdCBhcmd1bWVudCBpbiBib3RoIG1vZGVzIGlzCisjIHRoZSBuYW1lIG9mIHRoZSBGaW5kLW1vZHVsZSB3aGVyZSBpdCBpcyBjYWxsZWQgKGluIG9yaWdpbmFsIGNhc2luZykuCisjCisjIFRoZSBmaXJzdCBzaW1wbGUgbW9kZSBsb29rcyBsaWtlIHRoaXM6CisjICAgIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyg8bmFtZT4gKERFRkFVTFRfTVNHfCJDdXN0b20gZmFpbHVyZSBtZXNzYWdlIikgPHZhcjE+Li4uPHZhck4+ICkKKyMgSWYgdGhlIHZhcmlhYmxlcyA8dmFyMT4gdG8gPHZhck4+IGFyZSBhbGwgdmFsaWQsIHRoZW4gPFVQUEVSQ0FTRURfTkFNRT5fRk9VTkQKKyMgd2lsbCBiZSBzZXQgdG8gVFJVRS4KKyMgSWYgREVGQVVMVF9NU0cgaXMgZ2l2ZW4gYXMgc2Vjb25kIGFyZ3VtZW50LCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIGdlbmVyYXRlCisjIGl0c2VsZiB1c2VmdWwgc3VjY2VzcyBhbmQgZXJyb3IgbWVzc2FnZXMuIFlvdSBjYW4gYWxzbyBzdXBwbHkgYSBjdXN0b20gZXJyb3IgbWVzc2FnZQorIyBmb3IgdGhlIGZhaWx1cmUgY2FzZS4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuCisjCisjIFRoZSBzZWNvbmQgbW9kZSBpcyBtb3JlIHBvd2VyZnVsIGFuZCBhbHNvIHN1cHBvcnRzIHZlcnNpb24gY2hlY2tpbmc6CisjICAgIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhOQU1FIFtSRVFVSVJFRF9WQVJTIDx2YXIxPi4uLjx2YXJOPl0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ZFUlNJT05fVkFSICAgPHZlcnNpb252YXI+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtDT05GSUdfTU9ERV0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZBSUxfTUVTU0FHRSAiQ3VzdG9tIGZhaWx1cmUgbWVzc2FnZSJdICkKKyMKKyMgQXMgYWJvdmUsIGlmIDx2YXIxPiB0aHJvdWdoIDx2YXJOPiBhcmUgYWxsIHZhbGlkLCA8VVBQRVJDQVNFRF9OQU1FPl9GT1VORAorIyB3aWxsIGJlIHNldCB0byBUUlVFLgorIyBBZnRlciBSRVFVSVJFRF9WQVJTIHRoZSB2YXJpYWJsZXMgd2hpY2ggYXJlIHJlcXVpcmVkIGZvciB0aGlzIHBhY2thZ2UgYXJlIGxpc3RlZC4KKyMgRm9sbG93aW5nIFZFUlNJT05fVkFSIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBjYW4gYmUgc3BlY2lmaWVkIHdoaWNoIGhvbGRzCisjIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIHdoaWNoIGhhcyBiZWVuIGZvdW5kLiBJZiB0aGlzIGlzIGRvbmUsIHRoaXMgdmVyc2lvbgorIyB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgKHBvdGVudGlhbGx5KSBzcGVjaWZpZWQgcmVxdWlyZWQgdmVyc2lvbiB1c2VkCisjIGluIHRoZSBmaW5kX3BhY2thZ2UoKSBjYWxsLiBUaGUgRVhBQ1Qga2V5d29yZCBpcyBhbHNvIGhhbmRsZWQuIFRoZSBkZWZhdWx0CisjIG1lc3NhZ2VzIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVpcmVkIHZlcnNpb24gYW5kIHRoZSB2ZXJzaW9uCisjIHdoaWNoIGhhcyBiZWVuIGFjdHVhbGx5IGZvdW5kLCBib3RoIGlmIHRoZSB2ZXJzaW9uIGlzIG9rIG9yIG5vdC4KKyMgVXNlIHRoZSBvcHRpb24gQ09ORklHX01PREUgaWYgeW91ciBGaW5kWFhYLmNtYWtlIG1vZHVsZSBpcyBhIHdyYXBwZXIgZm9yCisjIGEgZmluZF9wYWNrYWdlKC4uLiBOT19NT0RVTEUpIGNhbGwsIGluIHRoaXMgY2FzZSBhbGwgdGhlIGluZm9ybWF0aW9uCisjIHByb3ZpZGVkIGJ5IHRoZSBjb25maWctbW9kZSBvZiBmaW5kX3BhY2thZ2UoKSB3aWxsIGJlIGV2YWx1YXRlZAorIyBhdXRvbWF0aWNhbGx5LgorIyBWaWEgRkFJTF9NRVNTQUdFIGEgY3VzdG9tIGZhaWx1cmUgbWVzc2FnZSBjYW4gYmUgc3BlY2lmaWVkLCBpZiB0aGlzIGlzIG5vdAorIyB1c2VkLCB0aGUgZGVmYXVsdCBtZXNzYWdlIHdpbGwgYmUgZGlzcGxheWVkLgorIworIyBFeGFtcGxlIGZvciBtb2RlIDE6CisjCisjICAgIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhMaWJYbWwyICBERUZBVUxUX01TRyAgTElCWE1MMl9MSUJSQVJZIExJQlhNTDJfSU5DTFVERV9ESVIpCisjCisjIExpYlhtbDIgaXMgY29uc2lkZXJlZCB0byBiZSBmb3VuZCwgaWYgYm90aCBMSUJYTUwyX0xJQlJBUlkgYW5kCisjIExJQlhNTDJfSU5DTFVERV9ESVIgYXJlIHZhbGlkLiBUaGVuIGFsc28gTElCWE1MMl9GT1VORCBpcyBzZXQgdG8gVFJVRS4KKyMgSWYgaXQgaXMgbm90IGZvdW5kIGFuZCBSRVFVSVJFRCB3YXMgdXNlZCwgaXQgZmFpbHMgd2l0aCBGQVRBTF9FUlJPUiwKKyMgaW5kZXBlbmRlbnQgd2hldGhlciBRVUlFVCB3YXMgdXNlZCBvciBub3QuCisjIElmIGl0IGlzIGZvdW5kLCBzdWNjZXNzIHdpbGwgYmUgcmVwb3J0ZWQsIGluY2x1ZGluZyB0aGUgY29udGVudCBvZiA8dmFyMT4uCisjIE9uIHJlcGVhdGVkIENtYWtlIHJ1bnMsIHRoZSBzYW1lIG1lc3NhZ2Ugd29uJ3QgYmUgcHJpbnRlZCBhZ2Fpbi4KKyMKKyMgRXhhbXBsZSBmb3IgbW9kZSAyOgorIworIyAgICBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoQklTT04gIFJFUVVJUkVEX1ZBUlMgQklTT05fRVhFQ1VUQUJMRQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fVkFSIEJJU09OX1ZFUlNJT04pCisjIEluIHRoaXMgY2FzZSwgQklTT04gaXMgY29uc2lkZXJlZCB0byBiZSBmb3VuZCBpZiB0aGUgdmFyaWFibGUocykgbGlzdGVkCisjIGFmdGVyIFJFUVVJUkVEX1ZBUiBhcmUgYWxsIHZhbGlkLCBpLmUuIEJJU09OX0VYRUNVVEFCTEUgaW4gdGhpcyBjYXNlLgorIyBBbHNvIHRoZSB2ZXJzaW9uIG9mIEJJU09OIHdpbGwgYmUgY2hlY2tlZCBieSB1c2luZyB0aGUgdmVyc2lvbiBjb250YWluZWQKKyMgaW4gQklTT05fVkVSU0lPTi4KKyMgU2luY2Ugbm8gRkFJTF9NRVNTQUdFIGlzIGdpdmVuLCB0aGUgZGVmYXVsdCBtZXNzYWdlcyB3aWxsIGJlIHByaW50ZWQuCisjCisjIEFub3RoZXIgZXhhbXBsZSBmb3IgbW9kZSAyOgorIworIyAgICBGSU5EX1BBQ0tBR0UoQXV0b21vYzQgUVVJRVQgTk9fTU9EVUxFIEhJTlRTIC9vcHQvYXV0b21vYzQpCisjICAgIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhBdXRvbW9jNCAgQ09ORklHX01PREUpCisjIEluIHRoaXMgY2FzZSwgRmluZEF1dG1vYzQuY21ha2Ugd3JhcHMgYSBjYWxsIHRvIEZJTkRfUEFDS0FHRShBdXRvbW9jNCBOT19NT0RVTEUpCisjIGFuZCBhZGRzIGFuIGFkZGl0aW9uYWwgc2VhcmNoIGRpcmVjdG9yeSBmb3IgYXV0b21vYzQuCisjIFRoZSBmb2xsb3dpbmcgRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKCkgY2FsbCBwcm9kdWNlcyBhIHByb3BlcgorIyBzdWNjZXNzL2Vycm9yIG1lc3NhZ2UuCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBDb3B5cmlnaHQgMjAwNy0yMDA5IEtpdHdhcmUsIEluYy4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIworIyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjICogTmVpdGhlciB0aGUgbmFtZXMgb2YgS2l0d2FyZSwgSW5jLiwgdGhlIEluc2lnaHQgU29mdHdhcmUgQ29uc29ydGl1bSwKKyMgICBub3IgdGhlIG5hbWVzIG9mIHRoZWlyIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyMgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyMgICBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitJTkNMVURFKEZpbmRQYWNrYWdlTWVzc2FnZSkKK0lOQ0xVREUoQ01ha2VQYXJzZUFyZ3VtZW50cykKKworIyBpbnRlcm5hbCBoZWxwZXIgbWFjcm8KK01BQ1JPKF9GUEhTQV9GQUlMVVJFX01FU1NBR0UgX21zZykKKyAgSUYgKCR7X05BTUV9X0ZJTkRfUkVRVUlSRUQpCisgICAgTUVTU0FHRShGQVRBTF9FUlJPUiAiJHtfbXNnfSIpCisgIEVMU0UgKCR7X05BTUV9X0ZJTkRfUkVRVUlSRUQpCisgICAgSUYgKE5PVCAke19OQU1FfV9GSU5EX1FVSUVUTFkpCisgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtfbXNnfSIpCisgICAgRU5ESUYgKE5PVCAke19OQU1FfV9GSU5EX1FVSUVUTFkpCisgIEVORElGICgke19OQU1FfV9GSU5EX1JFUVVJUkVEKQorRU5ETUFDUk8oX0ZQSFNBX0ZBSUxVUkVfTUVTU0FHRSBfbXNnKQorCisKKyMgaW50ZXJuYWwgaGVscGVyIG1hY3JvIHRvIGdlbmVyYXRlIHRoZSBmYWlsdXJlIG1lc3NhZ2Ugd2hlbiB1c2VkIGluIENPTkZJR19NT0RFOgorTUFDUk8oX0ZQSFNBX0hBTkRMRV9GQUlMVVJFX0NPTkZJR19NT0RFKQorICAjIDxuYW1lPl9DT05GSUcgaXMgc2V0LCBidXQgRk9VTkQgaXMgZmFsc2UsIHRoaXMgbWVhbnMgdGhhdCBzb21lIG90aGVyIG9mIHRoZSBSRVFVSVJFRF9WQVJTIHdhcyBub3QgZm91bmQ6CisgIElGKCR7X05BTUV9X0NPTkZJRykKKyAgICBfRlBIU0FfRkFJTFVSRV9NRVNTQUdFKCIke0ZQSFNBX0ZBSUxfTUVTU0FHRX06IG1pc3Npbmc6ICR7TUlTU0lOR19WQVJTfSAoZm91bmQgJHske19OQU1FfV9DT05GSUd9ICR7VkVSU0lPTl9NU0d9KSIpCisgIEVMU0UoJHtfTkFNRX1fQ09ORklHKQorICAgICMgSWYgX0NPTlNJREVSRURfQ09ORklHUyBpcyBzZXQsIHRoZSBjb25maWctZmlsZSBoYXMgYmVlbiBmb3VuZCwgYnV0IG5vIHN1aXRhYmxlIHZlcnNpb24uCisgICAgIyBMaXN0IHRoZW0gYWxsIGluIHRoZSBlcnJvciBtZXNzYWdlOgorICAgIElGKCR7X05BTUV9X0NPTlNJREVSRURfQ09ORklHUykKKyAgICAgIFNFVChjb25maWdzVGV4dCAiIikKKyAgICAgIExJU1QoTEVOR1RIICR7X05BTUV9X0NPTlNJREVSRURfQ09ORklHUyBjb25maWdzQ291bnQpCisgICAgICBNQVRIKEVYUFIgY29uZmlnc0NvdW50ICIke2NvbmZpZ3NDb3VudH0gLSAxIikKKyAgICAgIEZPUkVBQ0goY3VycmVudENvbmZpZ0luZGV4IFJBTkdFICR7Y29uZmlnc0NvdW50fSkKKyAgICAgICAgTElTVChHRVQgJHtfTkFNRX1fQ09OU0lERVJFRF9DT05GSUdTICR7Y3VycmVudENvbmZpZ0luZGV4fSBmaWxlbmFtZSkKKyAgICAgICAgTElTVChHRVQgJHtfTkFNRX1fQ09OU0lERVJFRF9WRVJTSU9OUyAke2N1cnJlbnRDb25maWdJbmRleH0gdmVyc2lvbikKKyAgICAgICAgU0VUKGNvbmZpZ3NUZXh0ICIke2NvbmZpZ3NUZXh0fSAgICAke2ZpbGVuYW1lfSAodmVyc2lvbiAke3ZlcnNpb259KVxuIikKKyAgICAgIEVOREZPUkVBQ0goY3VycmVudENvbmZpZ0luZGV4KQorICAgICAgX0ZQSFNBX0ZBSUxVUkVfTUVTU0FHRSgiJHtGUEhTQV9GQUlMX01FU1NBR0V9ICR7VkVSU0lPTl9NU0d9LCBjaGVja2VkIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4ke2NvbmZpZ3NUZXh0fSIpCisKKyAgICBFTFNFKCR7X05BTUV9X0NPTlNJREVSRURfQ09ORklHUykKKyAgICAgICMgU2ltcGxlIGNhc2U6IE5vIENvbmZpZy1maWxlIHdhcyBmb3VuZCBhdCBhbGw6CisgICAgICBfRlBIU0FfRkFJTFVSRV9NRVNTQUdFKCIke0ZQSFNBX0ZBSUxfTUVTU0FHRX06IGZvdW5kIG5laXRoZXIgJHtfTkFNRX1Db25maWcuY21ha2Ugbm9yICR7X05BTUVfTE9XRVJ9LWNvbmZpZy5jbWFrZSAke1ZFUlNJT05fTVNHfSIpCisgICAgRU5ESUYoJHtfTkFNRX1fQ09OU0lERVJFRF9DT05GSUdTKQorICBFTkRJRigke19OQU1FfV9DT05GSUcpCitFTkRNQUNSTyhfRlBIU0FfSEFORExFX0ZBSUxVUkVfQ09ORklHX01PREUpCisKKworRlVOQ1RJT04oRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTIF9OQU1FIF9GSVJTVF9BUkcpCisKKyMgc2V0IHVwIHRoZSBhcmd1bWVudHMgZm9yIENNQUtFX1BBUlNFX0FSR1VNRU5UUyBhbmQgY2hlY2sgd2hldGhlciB3ZSBhcmUgaW4KKyMgbmV3IGV4dGVuZGVkIG9yIGluIHRoZSAib2xkIiBtb2RlOgorICBTRVQob3B0aW9ucyBDT05GSUdfTU9ERSkKKyAgU0VUKG9uZVZhbHVlQXJncyBGQUlMX01FU1NBR0UgVkVSU0lPTl9WQVIpCisgIFNFVChtdWx0aVZhbHVlQXJncyBSRVFVSVJFRF9WQVJTKQorICBTRVQoX0tFWVdPUkRTX0ZPUl9FWFRFTkRFRF9NT0RFICAke29wdGlvbnN9ICR7b25lVmFsdWVBcmdzfSAke211bHRpVmFsdWVBcmdzfSApCisgIExJU1QoRklORCBfS0VZV09SRFNfRk9SX0VYVEVOREVEX01PREUgIiR7X0ZJUlNUX0FSR30iIElOREVYKQorCisgIElGKCR7SU5ERVh9IEVRVUFMIC0xKQorICAgIFNFVChGUEhTQV9GQUlMX01FU1NBR0UgJHtfRklSU1RfQVJHfSkKKyAgICBTRVQoRlBIU0FfUkVRVUlSRURfVkFSUyAke0FSR059KQorICAgIFNFVChGUEhTQV9WRVJTSU9OX1ZBUikKKyAgRUxTRSgke0lOREVYfSBFUVVBTCAtMSkKKworICAgIENNQUtFX1BBUlNFX0FSR1VNRU5UUyhGUEhTQSAiJHtvcHRpb25zfSIgIiR7b25lVmFsdWVBcmdzfSIgIiR7bXVsdGlWYWx1ZUFyZ3N9IiAgJHtfRklSU1RfQVJHfSAke0FSR059KQorCisgICAgSUYoRlBIU0FfVU5QQVJTRURfQVJHVU1FTlRTKQorICAgICAgTUVTU0FHRShGQVRBTF9FUlJPUiAiVW5rbm93biBrZXl3b3JkcyBnaXZlbiB0byBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoKTogXCIke0ZQSFNBX1VOUEFSU0VEX0FSR1VNRU5UU31cIiIpCisgICAgRU5ESUYoRlBIU0FfVU5QQVJTRURfQVJHVU1FTlRTKQorCisgICAgSUYoTk9UIEZQSFNBX0ZBSUxfTUVTU0FHRSkKKyAgICAgIFNFVChGUEhTQV9GQUlMX01FU1NBR0UgICJERUZBVUxUX01TRyIpCisgICAgRU5ESUYoTk9UIEZQSFNBX0ZBSUxfTUVTU0FHRSkKKyAgRU5ESUYoJHtJTkRFWH0gRVFVQUwgLTEpCisKKyMgbm93IHRoYXQgd2UgY29sbGVjdGVkIGFsbCBhcmd1bWVudHMsIHByb2Nlc3MgdGhlbQorCisgIElGKCIke0ZQSFNBX0ZBSUxfTUVTU0FHRX0iIFNUUkVRVUFMICJERUZBVUxUX01TRyIpCisgICAgU0VUKEZQSFNBX0ZBSUxfTUVTU0FHRSAiQ291bGQgTk9UIGZpbmQgJHtfTkFNRX0iKQorICBFTkRJRigiJHtGUEhTQV9GQUlMX01FU1NBR0V9IiBTVFJFUVVBTCAiREVGQVVMVF9NU0ciKQorCisgICMgSW4gY29uZmlnLW1vZGUsIHdlIHJlbHkgb24gdGhlIHZhcmlhYmxlIDxwYWNrYWdlPl9DT05GSUcsIHdoaWNoIGlzIHNldCBieSBmaW5kX3BhY2thZ2UoKQorICAjIHdoZW4gaXQgc3VjY2Vzc2Z1bGx5IGZvdW5kIHRoZSBjb25maWctZmlsZSwgaW5jbHVkaW5nIHZlcnNpb24gY2hlY2tpbmc6CisgIElGKEZQSFNBX0NPTkZJR19NT0RFKQorICAgIExJU1QoSU5TRVJUIEZQSFNBX1JFUVVJUkVEX1ZBUlMgMCAke19OQU1FfV9DT05GSUcpCisgICAgTElTVChSRU1PVkVfRFVQTElDQVRFUyBGUEhTQV9SRVFVSVJFRF9WQVJTKQorICAgIFNFVChGUEhTQV9WRVJTSU9OX1ZBUiAke19OQU1FfV9WRVJTSU9OKQorICBFTkRJRihGUEhTQV9DT05GSUdfTU9ERSkKKworICBJRihOT1QgRlBIU0FfUkVRVUlSRURfVkFSUykKKyAgICBNRVNTQUdFKEZBVEFMX0VSUk9SICJObyBSRVFVSVJFRF9WQVJTIHNwZWNpZmllZCBmb3IgRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKCkiKQorICBFTkRJRihOT1QgRlBIU0FfUkVRVUlSRURfVkFSUykKKworICBMSVNUKEdFVCBGUEhTQV9SRVFVSVJFRF9WQVJTIDAgX0ZJUlNUX1JFUVVJUkVEX1ZBUikKKworICBTVFJJTkcoVE9VUFBFUiAke19OQU1FfSBfTkFNRV9VUFBFUikKKyAgU1RSSU5HKFRPTE9XRVIgJHtfTkFNRX0gX05BTUVfTE9XRVIpCisKKyAgIyBjb2xsZWN0IGFsbCB2YXJpYWJsZXMgd2hpY2ggd2VyZSBub3QgZm91bmQsIHNvIHRoZXkgY2FuIGJlIHByaW50ZWQsIHNvIHRoZQorICAjIHVzZXIga25vd3MgYmV0dGVyIHdoYXQgd2VudCB3cm9uZyAoIzYzNzUpCisgIFNFVChNSVNTSU5HX1ZBUlMgIiIpCisgIFNFVChERVRBSUxTICIiKQorICBTRVQoJHtfTkFNRV9VUFBFUn1fRk9VTkQgVFJVRSkKKyAgIyBjaGVjayBpZiBhbGwgcGFzc2VkIHZhcmlhYmxlcyBhcmUgdmFsaWQKKyAgRk9SRUFDSChfQ1VSUkVOVF9WQVIgJHtGUEhTQV9SRVFVSVJFRF9WQVJTfSkKKyAgICBJRihOT1QgJHtfQ1VSUkVOVF9WQVJ9KQorICAgICAgU0VUKCR7X05BTUVfVVBQRVJ9X0ZPVU5EIEZBTFNFKQorICAgICAgU0VUKE1JU1NJTkdfVkFSUyAiJHtNSVNTSU5HX1ZBUlN9ICR7X0NVUlJFTlRfVkFSfSIpCisgICAgRUxTRShOT1QgJHtfQ1VSUkVOVF9WQVJ9KQorICAgICAgU0VUKERFVEFJTFMgIiR7REVUQUlMU31bJHske19DVVJSRU5UX1ZBUn19XSIpCisgICAgRU5ESUYoTk9UICR7X0NVUlJFTlRfVkFSfSkKKyAgRU5ERk9SRUFDSChfQ1VSUkVOVF9WQVIpCisKKworICAjIHZlcnNpb24gaGFuZGxpbmc6CisgIFNFVChWRVJTSU9OX01TRyAiIikKKyAgU0VUKFZFUlNJT05fT0sgVFJVRSkKKyAgU0VUKFZFUlNJT04gJHske0ZQSFNBX1ZFUlNJT05fVkFSfX0gKQorICBJRiAoJHtfTkFNRX1fRklORF9WRVJTSU9OKQorCisgICAgSUYoVkVSU0lPTikKKworICAgICAgSUYoJHtfTkFNRX1fRklORF9WRVJTSU9OX0VYQUNUKSAgICAgICAjIGV4YWN0IHZlcnNpb24gcmVxdWlyZWQKKyAgICAgICAgSUYgKE5PVCAiJHske19OQU1FfV9GSU5EX1ZFUlNJT059IiBWRVJTSU9OX0VRVUFMICIke1ZFUlNJT059IikKKyAgICAgICAgICBTRVQoVkVSU0lPTl9NU0cgIkZvdW5kIHVuc3VpdGFibGUgdmVyc2lvbiBcIiR7VkVSU0lPTn1cIiwgYnV0IHJlcXVpcmVkIGlzIGV4YWN0IHZlcnNpb24gXCIkeyR7X05BTUV9X0ZJTkRfVkVSU0lPTn1cIiIpCisgICAgICAgICAgU0VUKFZFUlNJT05fT0sgRkFMU0UpCisgICAgICAgIEVMU0UgKE5PVCAiJHske19OQU1FfV9GSU5EX1ZFUlNJT059IiBWRVJTSU9OX0VRVUFMICIke1ZFUlNJT059IikKKyAgICAgICAgICBTRVQoVkVSU0lPTl9NU0cgIihmb3VuZCBzdWl0YWJsZSBleGFjdCB2ZXJzaW9uIFwiJHtWRVJTSU9OfVwiKSIpCisgICAgICAgIEVORElGIChOT1QgIiR7JHtfTkFNRX1fRklORF9WRVJTSU9OfSIgVkVSU0lPTl9FUVVBTCAiJHtWRVJTSU9OfSIpCisKKyAgICAgIEVMU0UoJHtfTkFNRX1fRklORF9WRVJTSU9OX0VYQUNUKSAgICAgIyBtaW5pbXVtIHZlcnNpb24gc3BlY2lmaWVkOgorICAgICAgICBJRiAoIiR7JHtfTkFNRX1fRklORF9WRVJTSU9OfSIgVkVSU0lPTl9HUkVBVEVSICIke1ZFUlNJT059IikKKyAgICAgICAgICBTRVQoVkVSU0lPTl9NU0cgIkZvdW5kIHVuc3VpdGFibGUgdmVyc2lvbiBcIiR7VkVSU0lPTn1cIiwgYnV0IHJlcXVpcmVkIGlzIGF0IGxlYXN0IFwiJHske19OQU1FfV9GSU5EX1ZFUlNJT059XCIiKQorICAgICAgICAgIFNFVChWRVJTSU9OX09LIEZBTFNFKQorICAgICAgICBFTFNFICgiJHske19OQU1FfV9GSU5EX1ZFUlNJT059IiBWRVJTSU9OX0dSRUFURVIgIiR7VkVSU0lPTn0iKQorICAgICAgICAgIFNFVChWRVJTSU9OX01TRyAiKGZvdW5kIHN1aXRhYmxlIHZlcnNpb24gXCIke1ZFUlNJT059XCIsIHJlcXVpcmVkIGlzIFwiJHske19OQU1FfV9GSU5EX1ZFUlNJT059XCIpIikKKyAgICAgICAgRU5ESUYgKCIkeyR7X05BTUV9X0ZJTkRfVkVSU0lPTn0iIFZFUlNJT05fR1JFQVRFUiAiJHtWRVJTSU9OfSIpCisgICAgICBFTkRJRigke19OQU1FfV9GSU5EX1ZFUlNJT05fRVhBQ1QpCisKKyAgICBFTFNFKFZFUlNJT04pCisKKyAgICAgICMgaWYgdGhlIHBhY2thZ2Ugd2FzIG5vdCBmb3VuZCwgYnV0IGEgdmVyc2lvbiB3YXMgZ2l2ZW4sIGFkZCB0aGF0IHRvIHRoZSBvdXRwdXQ6CisgICAgICBJRigke19OQU1FfV9GSU5EX1ZFUlNJT05fRVhBQ1QpCisgICAgICAgICBTRVQoVkVSU0lPTl9NU0cgIihSZXF1aXJlZCBpcyBleGFjdCB2ZXJzaW9uIFwiJHske19OQU1FfV9GSU5EX1ZFUlNJT059XCIpIikKKyAgICAgIEVMU0UoJHtfTkFNRX1fRklORF9WRVJTSU9OX0VYQUNUKQorICAgICAgICAgU0VUKFZFUlNJT05fTVNHICIoUmVxdWlyZWQgaXMgYXQgbGVhc3QgdmVyc2lvbiBcIiR7JHtfTkFNRX1fRklORF9WRVJTSU9OfVwiKSIpCisgICAgICBFTkRJRigke19OQU1FfV9GSU5EX1ZFUlNJT05fRVhBQ1QpCisKKyAgICBFTkRJRihWRVJTSU9OKQorICBFTFNFICgke19OQU1FfV9GSU5EX1ZFUlNJT04pCisgICAgSUYoVkVSU0lPTikKKyAgICAgIFNFVChWRVJTSU9OX01TRyAiKGZvdW5kIHZlcnNpb24gXCIke1ZFUlNJT059XCIpIikKKyAgICBFTkRJRihWRVJTSU9OKQorICBFTkRJRiAoJHtfTkFNRX1fRklORF9WRVJTSU9OKQorCisgIElGKFZFUlNJT05fT0spCisgICAgU0VUKERFVEFJTFMgIiR7REVUQUlMU31bdiR7VkVSU0lPTn0oJHske19OQU1FfV9GSU5EX1ZFUlNJT059KV0iKQorICBFTFNFKFZFUlNJT05fT0spCisgICAgU0VUKCR7X05BTUVfVVBQRVJ9X0ZPVU5EIEZBTFNFKQorICBFTkRJRihWRVJTSU9OX09LKQorCisKKyAgIyBwcmludCB0aGUgcmVzdWx0OgorICBJRiAoJHtfTkFNRV9VUFBFUn1fRk9VTkQpCisgICAgRklORF9QQUNLQUdFX01FU1NBR0UoJHtfTkFNRX0gIkZvdW5kICR7X05BTUV9OiAkeyR7X0ZJUlNUX1JFUVVJUkVEX1ZBUn19ICR7VkVSU0lPTl9NU0d9IiAiJHtERVRBSUxTfSIpCisgIEVMU0UgKCR7X05BTUVfVVBQRVJ9X0ZPVU5EKQorCisgICAgSUYoRlBIU0FfQ09ORklHX01PREUpCisgICAgICBfRlBIU0FfSEFORExFX0ZBSUxVUkVfQ09ORklHX01PREUoKQorICAgIEVMU0UoRlBIU0FfQ09ORklHX01PREUpCisgICAgICBJRihOT1QgVkVSU0lPTl9PSykKKyAgICAgICAgX0ZQSFNBX0ZBSUxVUkVfTUVTU0FHRSgiJHtGUEhTQV9GQUlMX01FU1NBR0V9OiAke1ZFUlNJT05fTVNHfSAoZm91bmQgJHske19GSVJTVF9SRVFVSVJFRF9WQVJ9fSkiKQorICAgICAgRUxTRShOT1QgVkVSU0lPTl9PSykKKyAgICAgICAgX0ZQSFNBX0ZBSUxVUkVfTUVTU0FHRSgiJHtGUEhTQV9GQUlMX01FU1NBR0V9IChtaXNzaW5nOiAke01JU1NJTkdfVkFSU30pICR7VkVSU0lPTl9NU0d9IikKKyAgICAgIEVORElGKE5PVCBWRVJTSU9OX09LKQorICAgIEVORElGKEZQSFNBX0NPTkZJR19NT0RFKQorCisgIEVORElGICgke19OQU1FX1VQUEVSfV9GT1VORCkKKworICBTRVQoJHtfTkFNRV9VUFBFUn1fRk9VTkQgJHske19OQU1FX1VQUEVSfV9GT1VORH0gUEFSRU5UX1NDT1BFKQorCitFTkRGVU5DVElPTihGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MgX0ZJUlNUX0FSRykKZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvZXh0cmEvRmluZFVTQi0xLjAuY21ha2UgYi9jYXJsOTE3MGZ3L2V4dHJhL0ZpbmRVU0ItMS4wLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZGYwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2V4dHJhL0ZpbmRVU0ItMS4wLmNtYWtlCkBAIC0wLDAgKzEsMTEyIEBACisjIC0gVHJ5IHRvIGZpbmQgVVNCLTEuMAorIyBPbmNlIGRvbmUgdGhpcyB3aWxsIGRlZmluZQorIworIyAgVVNCLTEuMF9GT1VORCAtIHN5c3RlbSBoYXMgVVNCLTEuMAorIyAgVVNCLTEuMF9JTkNMVURFX0RJUlMgLSB0aGUgVVNCLTEuMCBpbmNsdWRlIGRpcmVjdG9yeQorIyAgVVNCLTEuMF9MSUJSQVJJRVMgLSBMaW5rIHRoZXNlIHRvIHVzZSBVU0ItMS4wCisjICBVU0ItMS4wX0RFRklOSVRJT05TIC0gQ29tcGlsZXIgc3dpdGNoZXMgcmVxdWlyZWQgZm9yIHVzaW5nIFVTQi0xLjAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAwOSBBbmRyZWFzIFNjaG5laWRlciA8bWFpbEBjeW5hcHNlcy5vcmc+CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyMgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworIyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorIyBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisjIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorIyBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2lmIChVU0ItMS4wX0xJQlJBUklFUyBBTkQgVVNCLTEuMF9JTkNMVURFX0RJUlMpCisgICMgaW4gY2FjaGUgYWxyZWFkeQorICBzZXQoVVNCLTEuMF9GT1VORCBUUlVFKQorZWxzZSAoVVNCLTEuMF9MSUJSQVJJRVMgQU5EIFVTQi0xLjBfSU5DTFVERV9ESVJTKQorICAjIHVzZSBwa2ctY29uZmlnIHRvIGdldCB0aGUgZGlyZWN0b3JpZXMgYW5kIHRoZW4gdXNlIHRoZXNlIHZhbHVlcworICAjIGluIHRoZSBGSU5EX1BBVEgoKSBhbmQgRklORF9MSUJSQVJZKCkgY2FsbHMKKyAgaWYgKCR7Q01BS0VfTUFKT1JfVkVSU0lPTn0gRVFVQUwgMiBBTkQgJHtDTUFLRV9NSU5PUl9WRVJTSU9OfSBFUVVBTCA0KQorICAgIGluY2x1ZGUoVXNlUGtnQ29uZmlnKQorICAgIHBrZ2NvbmZpZyhsaWJ1c2ItMS4wIF9VU0ItMS4wX0lOQ0xVREVESVIgX1VTQi0xLjBfTElCRElSIF9VU0ItMS4wX0xERkxBR1MgX1VTQi0xLjBfQ0ZMQUdTKQorICBlbHNlICgke0NNQUtFX01BSk9SX1ZFUlNJT059IEVRVUFMIDIgQU5EICR7Q01BS0VfTUlOT1JfVkVSU0lPTn0gRVFVQUwgNCkKKyAgICBmaW5kX3BhY2thZ2UoUGtnQ29uZmlnKQorICAgIGlmIChQS0dfQ09ORklHX0ZPVU5EKQorICAgICAgcGtnX2NoZWNrX21vZHVsZXMoX1VTQi0xLjAgbGlidXNiLTEuMCkKKyAgICBlbmRpZiAoUEtHX0NPTkZJR19GT1VORCkKKyAgZW5kaWYgKCR7Q01BS0VfTUFKT1JfVkVSU0lPTn0gRVFVQUwgMiBBTkQgJHtDTUFLRV9NSU5PUl9WRVJTSU9OfSBFUVVBTCA0KQorCisgIGZpbmRfcGF0aChVU0ItMS4wX0lOQ0xVREVfRElSCisgICAgTkFNRVMKKyAgICAgIGxpYnVzYi5oCisgICAgUEFUSFMKKyAgICAgICR7X1VTQi0xLjBfSU5DTFVERURJUn0KKyAgICAgIC91c3IvaW5jbHVkZQorICAgICAgL3Vzci9sb2NhbC9pbmNsdWRlCisgICAgICAvb3B0L2xvY2FsL2luY2x1ZGUKKyAgICAgIC9zdy9pbmNsdWRlCisgICAgUEFUSF9TVUZGSVhFUworICAgICAgbGlidXNiLTEuMAorICApCisgIG1hcmtfYXNfYWR2YW5jZWQoVVNCLTEuMF9JTkNMVURFX0RJUikKKworICBmaW5kX2xpYnJhcnkoVVNCLTEuMF9MSUJSQVJZCisgICAgTkFNRVMKKyAgICAgIHVzYi0xLjAKKyAgICBQQVRIUworICAgICAgJHtfVVNCLTEuMF9MSUJESVJ9CisgICAgICAvdXNyL2xpYgorICAgICAgL3Vzci9sb2NhbC9saWIKKyAgICAgIC9vcHQvbG9jYWwvbGliCisgICAgICAvc3cvbGliCisgICkKKyAgbWFya19hc19hZHZhbmNlZChVU0ItMS4wX0xJQlJBUlkpCisKKyAgaWYgKFVTQi0xLjBfTElCUkFSWSkKKyAgICBzZXQoVVNCLTEuMF9GT1VORCBUUlVFKQorICAgIG1hcmtfYXNfYWR2YW5jZWQoVVNCLTEuMF9GT1VORCkKKyAgZW5kaWYgKFVTQi0xLjBfTElCUkFSWSkKKworICBzZXQoVVNCLTEuMF9JTkNMVURFX0RJUlMKKyAgICAke1VTQi0xLjBfSU5DTFVERV9ESVJ9CisgICkKKworICBpZiAoVVNCLTEuMF9GT1VORCkKKyAgICBzZXQoVVNCLTEuMF9MSUJSQVJJRVMKKyAgICAgICR7VVNCLTEuMF9MSUJSQVJJRVN9CisgICAgICAke1VTQi0xLjBfTElCUkFSWX0KKyAgICApCisgIGVuZGlmIChVU0ItMS4wX0ZPVU5EKQorCisgIGlmIChVU0ItMS4wX0lOQ0xVREVfRElSUyBBTkQgVVNCLTEuMF9MSUJSQVJJRVMpCisgICAgIHNldChVU0ItMS4wX0ZPVU5EIFRSVUUpCisgIGVuZGlmIChVU0ItMS4wX0lOQ0xVREVfRElSUyBBTkQgVVNCLTEuMF9MSUJSQVJJRVMpCisKKyAgaWYgKFVTQi0xLjBfRk9VTkQpCisgICAgaWYgKE5PVCBVU0ItMS4wX0ZJTkRfUVVJRVRMWSkKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJGb3VuZCBVU0ItMS4wOiAke1VTQi0xLjBfTElCUkFSSUVTfSIpCisgICAgZW5kaWYgKE5PVCBVU0ItMS4wX0ZJTkRfUVVJRVRMWSkKKyAgZWxzZSAoVVNCLTEuMF9GT1VORCkKKyAgICBpZiAoVVNCLTEuMF9GSU5EX1JFUVVJUkVEKQorICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ291bGQgbm90IGZpbmQgVVNCLTEuMCIpCisgICAgZW5kaWYgKFVTQi0xLjBfRklORF9SRVFVSVJFRCkKKyAgZW5kaWYgKFVTQi0xLjBfRk9VTkQpCisKKyAgIyBzaG93IHRoZSBVU0ItMS4wX0lOQ0xVREVfRElSUyBhbmQgVVNCLTEuMF9MSUJSQVJJRVMgdmFyaWFibGVzIG9ubHkgaW4gdGhlIGFkdmFuY2VkIHZpZXcKKyAgbWFya19hc19hZHZhbmNlZChVU0ItMS4wX0lOQ0xVREVfRElSUyBVU0ItMS4wX0xJQlJBUklFUykKKworZW5kaWYgKFVTQi0xLjBfTElCUkFSSUVTIEFORCBVU0ItMS4wX0lOQ0xVREVfRElSUykKKwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9leHRyYS9HQ0NWZXJzaW9uLmNtYWtlIGIvY2FybDkxNzBmdy9leHRyYS9HQ0NWZXJzaW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNWZlZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2V4dHJhL0dDQ1ZlcnNpb24uY21ha2UKQEAgLTAsMCArMSw2MCBAQAorIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIENvcHlyaWdodCAyMDA2LTIwMDkgS2l0d2FyZSwgSW5jLgorIyBDb3B5cmlnaHQgMjAwNi0yMDA4IEFuZHJlYXMgU2NobmVpZGVyIDxtYWlsQGN5bmFwc2VzLm9yZz4KKyMgQ29weXJpZ2h0IDIwMDcgICAgICBXZW5nbworIyBDb3B5cmlnaHQgMjAwNyAgICAgIE1pa2UgSmFja3NvbgorIyBDb3B5cmlnaHQgMjAwOCAgICAgIEFuZHJlYXMgUGFrdWxhdCA8YXBha3VAZ214LmRlPgorIyBDb3B5cmlnaHQgMjAwOC0yMDA5IFBoaWxpcCBMb3dtYW4gPHBoaWxpcEB5aGJ0LmNvbT4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIworIyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjICogTmVpdGhlciB0aGUgbmFtZXMgb2YgS2l0d2FyZSwgSW5jLiwgdGhlIEluc2lnaHQgU29mdHdhcmUgQ29uc29ydGl1bSwKKyMgICBub3IgdGhlIG5hbWVzIG9mIHRoZWlyIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyMgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyMgICBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjCisjIFJ1bnMgY29tcGlsZXIgd2l0aCAiLWR1bXB2ZXJzaW9uIiBhbmQgcGFyc2VzIG1ham9yL21pbm9yCisjIHZlcnNpb24gd2l0aCBhIHJlZ2V4LgorIworRlVOQ1RJT04oX0NPTVBJTEVSX0RVTVBWRVJTSU9OIF9PVVRQVVRfVkVSU0lPTikKKworICBFWEVDX1BST0dSQU0oJHtDTUFLRV9DX0NPTVBJTEVSfQorICAgIEFSR1MgJHtDTUFLRV9DX0NPTVBJTEVSX0FSRzF9IC1kdW1wdmVyc2lvbgorICAgIE9VVFBVVF9WQVJJQUJMRSBfQ09NUElMRVJfVkVSU0lPTgorICApCisgIFNUUklORyhSRUdFWCBSRVBMQUNFICIoWzAtOV0pXFwuKFswLTldKShcXC5bMC05XSk/IiAiXFwxXFwyIgorICAgIF9DT01QSUxFUl9WRVJTSU9OICR7X0NPTVBJTEVSX1ZFUlNJT059KQorCisgIFNFVCgke19PVVRQVVRfVkVSU0lPTn0gJHtfQ09NUElMRVJfVkVSU0lPTn0gUEFSRU5UX1NDT1BFKQorRU5ERlVOQ1RJT04oKQorCisjCisjIEVuZCBmdW5jdGlvbnMvbWFjcm9zCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvZXh0cmEvbGlidXNiLXplcm9wYWNrZXQuZGlmZiBiL2Nhcmw5MTcwZncvZXh0cmEvbGlidXNiLXplcm9wYWNrZXQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWE3M2RlCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9leHRyYS9saWJ1c2ItemVyb3BhY2tldC5kaWZmCkBAIC0wLDAgKzEsMzggQEAKK2RpZmYgLU51cnAgbGlidXNiLTEuMC0xLjAuMi9saWJ1c2IvbGlidXNiLmggbGlidXNiLTEuMC0xLjAuMi1vcmlnL2xpYnVzYi9saWJ1c2IuaAorLS0tIGxpYnVzYi0xLjAtMS4wLjIvbGlidXNiL2xpYnVzYi5oCTIwMDktMDYtMDcgMjM6MTg6MTkuMDAwMDAwMDAwICswMjAwCisrKysgbGlidXNiLTEuMC0xLjAuMi1vcmlnL2xpYnVzYi9saWJ1c2IuaAkyMDA5LTA4LTEwIDIyOjA3OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTY3Myw2ICs2NzMsOSBAQCBlbnVtIGxpYnVzYl90cmFuc2Zlcl9mbGFncyB7CisgCSAqIGZyb20geW91ciB0cmFuc2ZlciBjYWxsYmFjaywgYXMgdGhpcyB3aWxsIHJlc3VsdCBpbiBhIGRvdWJsZS1mcmVlCisgCSAqIHdoZW4gdGhpcyBmbGFnIGlzIGFjdGVkIHVwb24uICovCisgCUxJQlVTQl9UUkFOU0ZFUl9GUkVFX1RSQU5TRkVSID0gMTw8MiwKKysKKysJLyoqIFNlbmQgYW4gZXh0cmEgdGVybWluYXRpb24gcGFja2V0LCB3aGVuIG5lZWRlZCAqLworKwlMSUJVU0JfVFJBTlNGRVJfWkVST19QQUNLRVQgPSAxPDwzLAorIH07CisgCisgLyoqIFxpbmdyb3VwIGFzeW5jaW8KK2RpZmYgLU51cnAgbGlidXNiLTEuMC0xLjAuMi9saWJ1c2Ivb3MvbGludXhfdXNiZnMuYyBsaWJ1c2ItMS4wLTEuMC4yLW9yaWcvbGlidXNiL29zL2xpbnV4X3VzYmZzLmMKKy0tLSBsaWJ1c2ItMS4wLTEuMC4yL2xpYnVzYi9vcy9saW51eF91c2Jmcy5jCTIwMDktMDYtMTAgMjI6NDE6MjYuMDAwMDAwMDAwICswMjAwCisrKysgbGlidXNiLTEuMC0xLjAuMi1vcmlnL2xpYnVzYi9vcy9saW51eF91c2Jmcy5jCTIwMDktMDgtMTAgMjI6MTA6MTQuMDAwMDAwMDAwICswMjAwCitAQCAtMTI5OCw2ICsxMjk4LDggQEAgc3RhdGljIGludCBzdWJtaXRfYnVsa190cmFuc2ZlcihzdHJ1Y3QgdQorIAkJdXJiLT50eXBlID0gdXJiX3R5cGU7CisgCQl1cmItPmVuZHBvaW50ID0gdHJhbnNmZXItPmVuZHBvaW50OworIAkJdXJiLT5idWZmZXIgPSB0cmFuc2Zlci0+YnVmZmVyICsgKGkgKiBNQVhfQlVMS19CVUZGRVJfTEVOR1RIKTsKKysJCWlmICh0cmFuc2Zlci0+ZmxhZ3MgJiBMSUJVU0JfVFJBTlNGRVJfWkVST19QQUNLRVQpCisrCQkJdXJiLT5mbGFncyA9IFVTQkZTX1VSQl9aRVJPX1BBQ0tFVDsKKyAJCWlmIChpID09IG51bV91cmJzIC0gMSAmJiBsYXN0X3VyYl9wYXJ0aWFsKQorIAkJCXVyYi0+YnVmZmVyX2xlbmd0aCA9IHRyYW5zZmVyLT5sZW5ndGggJSBNQVhfQlVMS19CVUZGRVJfTEVOR1RIOworIAkJZWxzZQorZGlmZiAtTnVycCBsaWJ1c2ItMS4wLTEuMC4yL2xpYnVzYi9vcy9saW51eF91c2Jmcy5oIGxpYnVzYi0xLjAtMS4wLjItb3JpZy9saWJ1c2Ivb3MvbGludXhfdXNiZnMuaAorLS0tIGxpYnVzYi0xLjAtMS4wLjIvbGlidXNiL29zL2xpbnV4X3VzYmZzLmgJMjAwOC0wNy0xNiAxNjoxNzo1Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJ1c2ItMS4wLTEuMC4yLW9yaWcvbGlidXNiL29zL2xpbnV4X3VzYmZzLmgJMjAwOS0wOC0xMCAyMjoxMzoxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02Myw2ICs2Myw5IEBAIHN0cnVjdCB1c2Jmc19nZXRkcml2ZXIgeworICNkZWZpbmUgVVNCRlNfVVJCX0RJU0FCTEVfU1BECTEKKyAjZGVmaW5lIFVTQkZTX1VSQl9JU09fQVNBUAkyCisgI2RlZmluZSBVU0JGU19VUkJfUVVFVUVfQlVMSwkweDEwCisrI2RlZmluZSBVU0JGU19VUkJfTk9fRlNCUgkweDIwCisrI2RlZmluZSBVU0JGU19VUkJfWkVST19QQUNLRVQJMHg0MAorKyNkZWZpbmUgVVNCRlNfVVJCX05PX0lOVEVSUlVQVAkweDgwCisgCisgZW51bSB1c2Jmc191cmJfdHlwZSB7CisgCVVTQkZTX1VSQl9UWVBFX0lTTyA9IDAsCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2V4dHJhL3NoLWVsZi1saW51eC5jbWFrZSBiL2Nhcmw5MTcwZncvZXh0cmEvc2gtZWxmLWxpbnV4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTZkMzYKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2V4dHJhL3NoLWVsZi1saW51eC5jbWFrZQpAQCAtMCwwICsxLDIxIEBACitzZXQoQ01BS0VfU1lTVEVNX05BTUUgIkdlbmVyaWMiKQorc2V0KENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgInNoMiIpCisKK3NldF9wcm9wZXJ0eShESVJFQ1RPUlkgUFJPUEVSVFkgVEFSR0VUX1NVUFBPUlRTX1NIQVJFRF9MSUJTIEZBTFNFKQorCitzZXQoQ01BS0VfRklORF9ST09UX1BBVEggJHtDTUFLRV9TT1VSQ0VfRElSfS90b29sY2hhaW4vaW5zdC8pCisKK3NldChDTUFLRV9DX0ZMQUdTICItbTIgLW1sIC1PcyAtZmZyZWVzdGFuZGluZyAtbm9zdGFydGZpbGVzIikKK3NldChDTUFLRV9DX0xJTktfRkxBR1MgIi1zdGF0aWMgLUVMIC14IC0tZ2Mtc2VjdGlvbnMiKQorCitzZXQoT0JKQ09QWSAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rvb2xjaGFpbi9pbnN0L2Jpbi9zaC1lbGYtb2JqY29weSkKK3NldChDTUFLRV9DX0NPTVBJTEVSICIke0NNQUtFX1NPVVJDRV9ESVJ9L3Rvb2xjaGFpbi9pbnN0L2Jpbi9zaC1lbGYtZ2NjIikKK3NldChDTUFLRV9BUiAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rvb2xjaGFpbi9pbnN0L2Jpbi9zaC1lbGYtYXIpCitzZXQoQ01BS0VfQVNNX0NPTVBJTEVSICR7Q01BS0VfU09VUkNFX0RJUn0vdG9vbGNoYWluL2luc3QvYmluL3NoLWVsZi1hcykKK3NldChDTUFLRV9BU00tQVRUX0NPTVBJTEVSICR7Q01BS0VfU09VUkNFX0RJUn0vdG9vbGNoYWluL2luc3QvYmluL3NoLWVsZi1hcykKK3NldChDTUFLRV9MSU5LRVIgJHtDTUFLRV9TT1VSQ0VfRElSfS90b29sY2hhaW4vaW5zdC9iaW4vc2gtZWxmLWxkKQorc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFICIke0NNQUtFX1NPVVJDRV9ESVJ9L3Rvb2xjaGFpbi9pbnN0L2Jpbi9zaC1lbGYtbGQgPE9CSkVDVFM+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiAtbyA8VEFSR0VUPiIpCisKK3NldChDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gTkVWRVIpCitzZXQoQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkpCitzZXQoQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9JTkNMVURFIE9OTFkpCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2dlbmFwaS5zaCBiL2Nhcmw5MTcwZncvZ2VuYXBpLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5MTJjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2dlbmFwaS5zaApAQCAtMCwwICsxLDExIEBACisjIS9iaW4vc2gKKworY2F0IDw8RU9GID4gaW5jbHVkZS9zaGFyZWQvdmVyc2lvbi5oCisjaWZuZGVmIF9fQ0FSTDkxNzBfU0hBUkVEX1ZFUlNJT05fSAorI2RlZmluZSBfX0NBUkw5MTcwX1NIQVJFRF9WRVJTSU9OX0gKKyNkZWZpbmUgQ0FSTDkxNzBGV19WRVJTSU9OX1lFQVIgJCgoMTAwYGRhdGUgKyVZYCUxMDApKQorI2RlZmluZSBDQVJMOTE3MEZXX1ZFUlNJT05fTU9OVEggJCgoMTAwYGRhdGUgKyVtYCUxMDApKQorI2RlZmluZSBDQVJMOTE3MEZXX1ZFUlNJT05fREFZICQoKDEwMGBkYXRlICslZGAlMTAwKSkKKyNkZWZpbmUgQ0FSTDkxNzBGV19WRVJTSU9OX0dJVCAiYGdpdCBkZXNjcmliZSAyPi9kZXYvbnVsbGAiCisjZW5kaWYgLyogX19DQVJMOTE3MF9TSEFSRURfVkVSU0lPTl9IICovCitFT0YKZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvaW5jbHVkZS9saW51eC9jaDkuaCBiL2Nhcmw5MTcwZncvaW5jbHVkZS9saW51eC9jaDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGUwMWJiCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9pbmNsdWRlL2xpbnV4L2NoOS5oCkBAIC0wLDAgKzEsODAzIEBACisvKgorICogVGhpcyBmaWxlIGhvbGRzIFVTQiBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMgdGhhdCBhcmUgbmVlZGVkIGZvcgorICogVVNCIGRldmljZSBBUElzLiAgVGhlc2UgYXJlIHVzZWQgYnkgdGhlIFVTQiBkZXZpY2UgbW9kZWwsIHdoaWNoIGlzCisgKiBkZWZpbmVkIGluIGNoYXB0ZXIgOSBvZiB0aGUgVVNCIDIuMCBzcGVjaWZpY2F0aW9uIGFuZCBpbiB0aGUKKyAqIFdpcmVsZXNzIFVTQiAxLjAgKHNwcmVhZCBhcm91bmQpLiAgTGludXggaGFzIHNldmVyYWwgQVBJcyBpbiBDIHRoYXQKKyAqIG5lZWQgdGhlc2U6CisgKgorICogLSB0aGUgbWFzdGVyL2hvc3Qgc2lkZSBMaW51eC1VU0Iga2VybmVsIGRyaXZlciBBUEk7CisgKiAtIHRoZSAidXNiZnMiIHVzZXIgc3BhY2UgQVBJOyBhbmQKKyAqIC0gdGhlIExpbnV4ICJnYWRnZXQiIHNsYXZlL2RldmljZS9wZXJpcGhlcmFsIHNpZGUgZHJpdmVyIEFQSS4KKyAqCisgKiBVU0IgMi4wIGFkZHMgYW4gYWRkaXRpb25hbCAiT24gVGhlIEdvIiAoT1RHKSBtb2RlLCB3aGljaCBsZXRzIHN5c3RlbXMKKyAqIGFjdCBlaXRoZXIgYXMgYSBVU0IgbWFzdGVyL2hvc3Qgb3IgYXMgYSBVU0Igc2xhdmUvZGV2aWNlLiAgVGhhdCBtZWFucworICogdGhlIG1hc3RlciBhbmQgc2xhdmUgc2lkZSBBUElzIGJlbmVmaXQgZnJvbSB3b3JraW5nIHdlbGwgdG9nZXRoZXIuCisgKgorICogVGhlcmUncyBhbHNvICJXaXJlbGVzcyBVU0IiLCB1c2luZyBsb3cgcG93ZXIgc2hvcnQgcmFuZ2UgcmFkaW9zIGZvcgorICogcGVyaXBoZXJhbCBpbnRlcmNvbm5lY3Rpb24gYnV0IG90aGVyd2lzZSBidWlsZGluZyBvbiB0aGUgVVNCIGZyYW1ld29yay4KKyAqCisgKiBOb3RlIGFsbCBkZXNjcmlwdG9ycyBhcmUgZGVjbGFyZWQgJ19fYXR0cmlidXRlX18oKHBhY2tlZCkpJyBzbyB0aGF0OgorICoKKyAqIFthXSB0aGV5IG5ldmVyIGdldCBwYWRkZWQsIGVpdGhlciBpbnRlcm5hbGx5IChVU0Igc3BlYyB3cml0ZXJzCisgKiAgICAgcHJvYmFibHkgaGFuZGxlZCB0aGF0KSBvciBleHRlcm5hbGx5OworICoKKyAqIFtiXSBzbyB0aGF0IGFjY2Vzc2luZyBiaWdnZXItdGhhbi1hLWJ5dGVzIGZpZWxkcyB3aWxsIG5ldmVyCisgKiAgICAgZ2VuZXJhdGUgYnVzIGVycm9ycyBvbiBhbnkgcGxhdGZvcm0sIGV2ZW4gd2hlbiB0aGUgbG9jYXRpb24gb2YKKyAqICAgICBpdHMgZGVzY3JpcHRvciBpbnNpZGUgYSBidW5kbGUgaXNuJ3QgIm5hdHVyYWxseSBhbGlnbmVkIiwgYW5kCisgKgorICogW2NdIGZvciBjb25zaXN0ZW5jeSwgcmVtb3ZpbmcgYWxsIGRvdWJ0IGV2ZW4gd2hlbiBpdCBhcHBlYXJzIHRvCisgKiAgICAgc29tZW9uZSB0aGF0IHRoZSB0d28gb3RoZXIgcG9pbnRzIGFyZSBub24taXNzdWVzIGZvciB0aGF0CisgKiAgICAgcGFydGljdWxhciBkZXNjcmlwdG9yIHR5cGUuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9DSDlfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9DSDlfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogX191OCBldGMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ09OVFJPTCBSRVFVRVNUIFNVUFBPUlQgKi8KKworLyoKKyAqIFVTQiBkaXJlY3Rpb25zCisgKgorICogVGhpcyBiaXQgZmxhZyBpcyB1c2VkIGluIGVuZHBvaW50IGRlc2NyaXB0b3JzJyBiRW5kcG9pbnRBZGRyZXNzIGZpZWxkLgorICogSXQncyBhbHNvIG9uZSBvZiB0aHJlZSBmaWVsZHMgaW4gY29udHJvbCByZXF1ZXN0cyBiUmVxdWVzdFR5cGUuCisgKi8KKyNkZWZpbmUgVVNCX0RJUl9NQVNLCQkJMHg4MAorI2RlZmluZSBVU0JfRElSX09VVAkJCTAJCS8qIHRvIGRldmljZSAqLworI2RlZmluZSBVU0JfRElSX0lOCQkJMHg4MAkJLyogdG8gaG9zdCAqLworCisvKgorICogVVNCIHR5cGVzLCB0aGUgc2Vjb25kIG9mIHRocmVlIGJSZXF1ZXN0VHlwZSBmaWVsZHMKKyAqLworI2RlZmluZSBVU0JfVFlQRV9NQVNLCQkJKDB4MDMgPDwgNSkKKyNkZWZpbmUgVVNCX1RZUEVfU1RBTkRBUkQJCSgweDAwIDw8IDUpCisjZGVmaW5lIFVTQl9UWVBFX0NMQVNTCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgVVNCX1RZUEVfVkVORE9SCQkJKDB4MDIgPDwgNSkKKyNkZWZpbmUgVVNCX1RZUEVfUkVTRVJWRUQJCSgweDAzIDw8IDUpCisKKy8qCisgKiBVU0IgcmVjaXBpZW50cywgdGhlIHRoaXJkIG9mIHRocmVlIGJSZXF1ZXN0VHlwZSBmaWVsZHMKKyAqLworI2RlZmluZSBVU0JfUkVDSVBfTUFTSwkJCTB4MWYKKyNkZWZpbmUgVVNCX1JFQ0lQX0RFVklDRQkJMHgwMAorI2RlZmluZSBVU0JfUkVDSVBfSU5URVJGQUNFCQkweDAxCisjZGVmaW5lIFVTQl9SRUNJUF9FTkRQT0lOVAkJMHgwMgorI2RlZmluZSBVU0JfUkVDSVBfT1RIRVIJCQkweDAzCisvKiBGcm9tIFdpcmVsZXNzIFVTQiAxLjAgKi8KKyNkZWZpbmUgVVNCX1JFQ0lQX1BPUlQJCQkweDA0CisjZGVmaW5lIFVTQl9SRUNJUF9SUElQRQkJMHgwNQorCisvKgorICogU3RhbmRhcmQgcmVxdWVzdHMsIGZvciB0aGUgYlJlcXVlc3QgZmllbGQgb2YgYSBTRVRVUCBwYWNrZXQuCisgKgorICogVGhlc2UgYXJlIHF1YWxpZmllZCBieSB0aGUgYlJlcXVlc3RUeXBlIGZpZWxkLCBzbyB0aGF0IGZvciBleGFtcGxlCisgKiBUWVBFX0NMQVNTIG9yIFRZUEVfVkVORE9SIHNwZWNpZmljIGZlYXR1cmUgZmxhZ3MgY291bGQgYmUgcmV0cmlldmVkCisgKiBieSBhIEdFVF9TVEFUVVMgcmVxdWVzdC4KKyAqLworI2RlZmluZSBVU0JfUkVRX0dFVF9TVEFUVVMJCTB4MDAKKyNkZWZpbmUgVVNCX1JFUV9DTEVBUl9GRUFUVVJFCQkweDAxCisjZGVmaW5lIFVTQl9SRVFfU0VUX0ZFQVRVUkUJCTB4MDMKKyNkZWZpbmUgVVNCX1JFUV9TRVRfQUREUkVTUwkJMHgwNQorI2RlZmluZSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SCQkweDA2CisjZGVmaW5lIFVTQl9SRVFfU0VUX0RFU0NSSVBUT1IJCTB4MDcKKyNkZWZpbmUgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTgkweDA4CisjZGVmaW5lIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04JMHgwOQorI2RlZmluZSBVU0JfUkVRX0dFVF9JTlRFUkZBQ0UJCTB4MEEKKyNkZWZpbmUgVVNCX1JFUV9TRVRfSU5URVJGQUNFCQkweDBCCisjZGVmaW5lIFVTQl9SRVFfU1lOQ0hfRlJBTUUJCTB4MEMKKworI2RlZmluZSBVU0JfUkVRX1NFVF9FTkNSWVBUSU9OCQkweDBECS8qIFdpcmVsZXNzIFVTQiAqLworI2RlZmluZSBVU0JfUkVRX0dFVF9FTkNSWVBUSU9OCQkweDBFCisjZGVmaW5lIFVTQl9SRVFfUlBJUEVfQUJPUlQJCTB4MEUKKyNkZWZpbmUgVVNCX1JFUV9TRVRfSEFORFNIQUtFCQkweDBGCisjZGVmaW5lIFVTQl9SRVFfUlBJUEVfUkVTRVQJCTB4MEYKKyNkZWZpbmUgVVNCX1JFUV9HRVRfSEFORFNIQUtFCQkweDEwCisjZGVmaW5lIFVTQl9SRVFfU0VUX0NPTk5FQ1RJT04JCTB4MTEKKyNkZWZpbmUgVVNCX1JFUV9TRVRfU0VDVVJJVFlfREFUQQkweDEyCisjZGVmaW5lIFVTQl9SRVFfR0VUX1NFQ1VSSVRZX0RBVEEJMHgxMworI2RlZmluZSBVU0JfUkVRX1NFVF9XVVNCX0RBVEEJCTB4MTQKKyNkZWZpbmUgVVNCX1JFUV9MT09QQkFDS19EQVRBX1dSSVRFCTB4MTUKKyNkZWZpbmUgVVNCX1JFUV9MT09QQkFDS19EQVRBX1JFQUQJMHgxNgorI2RlZmluZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0VfRFMJMHgxNworCisvKiBUaGUgTGluayBQb3dlciBNYW5hZ2VtZW50IChMUE0pIEVDTiBkZWZpbmVzIFVTQl9SRVFfVEVTVF9BTkRfU0VUIGNvbW1hbmQsCisgKiB1c2VkIGJ5IGh1YnMgdG8gcHV0IHBvcnRzIGludG8gYSBuZXcgTDEgc3VzcGVuZCBzdGF0ZSwgZXhjZXB0IHRoYXQgaXQKKyAqIGZvcmdvdCB0byBkZWZpbmUgaXRzIG51bWJlciAuLi4KKyAqLworCisvKgorICogVVNCIGZlYXR1cmUgZmxhZ3MgYXJlIHdyaXR0ZW4gdXNpbmcgVVNCX1JFUV97Q0xFQVIsU0VUfV9GRUFUVVJFLCBhbmQKKyAqIGFyZSByZWFkIGFzIGEgYml0IGFycmF5IHJldHVybmVkIGJ5IFVTQl9SRVFfR0VUX1NUQVRVUy4gIChTbyB0aGVyZQorICogYXJlIGF0IG1vc3Qgc2l4dGVlbiBmZWF0dXJlcyBvZiBlYWNoIHR5cGUuKSAgSHVicyBtYXkgYWxzbyBzdXBwb3J0IGEKKyAqIG5ldyBVU0JfUkVRX1RFU1RfQU5EX1NFVF9GRUFUVVJFIHRvIHB1dCBwb3J0cyBpbnRvIEwxIHN1c3BlbmQuCisgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9TRUxGX1BPV0VSRUQJCTAJLyogKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQCTEJLyogZGV2IG1heSBpbml0aWF0ZSB3YWtldXAgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9URVNUX01PREUJCTIJLyogKHdpcmVkIGhpZ2ggc3BlZWQgb25seSkgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9CQVRURVJZCQkyCS8qICh3aXJlbGVzcykgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9CX0hOUF9FTkFCTEUJCTMJLyogKG90ZykgZGV2IG1heSBpbml0aWF0ZSBITlAgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9XVVNCX0RFVklDRQkJMwkvKiAod2lyZWxlc3MpKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9BX0hOUF9TVVBQT1JUCTQJLyogKG90ZykgUkggcG9ydCBzdXBwb3J0cyBITlAgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9BX0FMVF9ITlBfU1VQUE9SVAk1CS8qIChvdGcpIG90aGVyIFJIIHBvcnQgZG9lcyAqLworI2RlZmluZSBVU0JfREVWSUNFX0RFQlVHX01PREUJCTYJLyogKHNwZWNpYWwgZGV2aWNlcyBvbmx5KSAqLworCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9IQUxUCQkwCS8qIElOL09VVCB3aWxsIFNUQUxMICovCisKKworLyoqCisgKiBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IC0gU0VUVVAgZGF0YSBmb3IgYSBVU0IgZGV2aWNlIGNvbnRyb2wgcmVxdWVzdAorICogQGJSZXF1ZXN0VHlwZTogbWF0Y2hlcyB0aGUgVVNCIGJtUmVxdWVzdFR5cGUgZmllbGQKKyAqIEBiUmVxdWVzdDogbWF0Y2hlcyB0aGUgVVNCIGJSZXF1ZXN0IGZpZWxkCisgKiBAd1ZhbHVlOiBtYXRjaGVzIHRoZSBVU0Igd1ZhbHVlIGZpZWxkIChsZTE2IGJ5dGUgb3JkZXIpCisgKiBAd0luZGV4OiBtYXRjaGVzIHRoZSBVU0Igd0luZGV4IGZpZWxkIChsZTE2IGJ5dGUgb3JkZXIpCisgKiBAd0xlbmd0aDogbWF0Y2hlcyB0aGUgVVNCIHdMZW5ndGggZmllbGQgKGxlMTYgYnl0ZSBvcmRlcikKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHNlbmQgY29udHJvbCByZXF1ZXN0cyB0byBhIFVTQiBkZXZpY2UuICBJdCBtYXRjaGVzCisgKiB0aGUgZGlmZmVyZW50IGZpZWxkcyBvZiB0aGUgVVNCIDIuMCBTcGVjIHNlY3Rpb24gOS4zLCB0YWJsZSA5LTIuICBTZWUgdGhlCisgKiBVU0Igc3BlYyBmb3IgYSBmdWxsZXIgZGVzY3JpcHRpb24gb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMsIGFuZCB3aGF0IHRoZXkgYXJlCisgKiB1c2VkIGZvci4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGRyaXZlciBmb3IgYW55IGludGVyZmFjZSBjYW4gaXNzdWUgY29udHJvbCByZXF1ZXN0cy4KKyAqIEZvciBtb3N0IGRldmljZXMsIGludGVyZmFjZXMgZG9uJ3QgY29vcmRpbmF0ZSB3aXRoIGVhY2ggb3RoZXIsIHNvCisgKiBzdWNoIHJlcXVlc3RzIG1heSBiZSBtYWRlIGF0IGFueSB0aW1lLgorICovCitzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHsKKwlfX3U4IGJSZXF1ZXN0VHlwZTsKKwlfX3U4IGJSZXF1ZXN0OworCV9fbGUxNiB3VmFsdWU7CisJX19sZTE2IHdJbmRleDsKKwlfX2xlMTYgd0xlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogU1RBTkRBUkQgREVTQ1JJUFRPUlMgLi4uIGFzIHJldHVybmVkIGJ5IEdFVF9ERVNDUklQVE9SLCBvcgorICogKHJhcmVseSkgYWNjZXB0ZWQgYnkgU0VUX0RFU0NSSVBUT1IuCisgKgorICogTm90ZSB0aGF0IGFsbCBtdWx0aS1ieXRlIHZhbHVlcyBoZXJlIGFyZSBlbmNvZGVkIGluIGxpdHRsZSBlbmRpYW4KKyAqIGJ5dGUgb3JkZXIgIm9uIHRoZSB3aXJlIi4gIFdpdGhpbiB0aGUga2VybmVsIGFuZCB3aGVuIGV4cG9zZWQKKyAqIHRocm91Z2ggdGhlIExpbnV4LVVTQiBBUElzLCB0aGV5IGFyZSBub3QgY29udmVydGVkIHRvIGNwdSBieXRlCisgKiBvcmRlcjsgaXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjbGllbnQgY29kZSB0byBkbyB0aGlzLgorICogVGhlIHNpbmdsZSBleGNlcHRpb24gaXMgd2hlbiBkZXZpY2UgYW5kIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcnMgKGJ1dAorICogbm90IG90aGVyIGRlc2NyaXB0b3JzKSBhcmUgcmVhZCBmcm9tIHVzYmZzIChpLmUuIC9wcm9jL2J1cy91c2IvQkJCL0RERCk7CisgKiBpbiB0aGlzIGNhc2UgdGhlIGZpZWxkcyBhcmUgY29udmVydGVkIHRvIGhvc3QgZW5kaWFubmVzcyBieSB0aGUga2VybmVsLgorICovCisKKy8qCisgKiBEZXNjcmlwdG9yIHR5cGVzIC4uLiBVU0IgMi4wIHNwZWMgdGFibGUgOS41CisgKi8KKyNkZWZpbmUgVVNCX0RUX0RFVklDRQkJCTB4MDEKKyNkZWZpbmUgVVNCX0RUX0NPTkZJRwkJCTB4MDIKKyNkZWZpbmUgVVNCX0RUX1NUUklORwkJCTB4MDMKKyNkZWZpbmUgVVNCX0RUX0lOVEVSRkFDRQkJMHgwNAorI2RlZmluZSBVU0JfRFRfRU5EUE9JTlQJCQkweDA1CisjZGVmaW5lIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSCQkweDA2CisjZGVmaW5lIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUcJMHgwNworI2RlZmluZSBVU0JfRFRfSU5URVJGQUNFX1BPV0VSCQkweDA4CisvKiB0aGVzZSBhcmUgZnJvbSBhIG1pbm9yIHVzYiAyLjAgcmV2aXNpb24gKEVDTikgKi8KKyNkZWZpbmUgVVNCX0RUX09URwkJCTB4MDkKKyNkZWZpbmUgVVNCX0RUX0RFQlVHCQkJMHgwYQorI2RlZmluZSBVU0JfRFRfSU5URVJGQUNFX0FTU09DSUFUSU9OCTB4MGIKKy8qIHRoZXNlIGFyZSBmcm9tIHRoZSBXaXJlbGVzcyBVU0Igc3BlYyAqLworI2RlZmluZSBVU0JfRFRfU0VDVVJJVFkJCQkweDBjCisjZGVmaW5lIFVTQl9EVF9LRVkJCQkweDBkCisjZGVmaW5lIFVTQl9EVF9FTkNSWVBUSU9OX1RZUEUJCTB4MGUKKyNkZWZpbmUgVVNCX0RUX0JPUwkJCTB4MGYKKyNkZWZpbmUgVVNCX0RUX0RFVklDRV9DQVBBQklMSVRZCTB4MTAKKyNkZWZpbmUgVVNCX0RUX1dJUkVMRVNTX0VORFBPSU5UX0NPTVAJMHgxMQorI2RlZmluZSBVU0JfRFRfV0lSRV9BREFQVEVSCQkweDIxCisjZGVmaW5lIFVTQl9EVF9SUElQRQkJCTB4MjIKKyNkZWZpbmUgVVNCX0RUX0NTX1JBRElPX0NPTlRST0wJCTB4MjMKKy8qIEZyb20gdGhlIFVTQiAzLjAgc3BlYyAqLworI2RlZmluZQlVU0JfRFRfU1NfRU5EUE9JTlRfQ09NUAkJMHgzMAorCisvKiBDb252ZW50aW9uYWwgY29kZXMgZm9yIGNsYXNzLXNwZWNpZmljIGRlc2NyaXB0b3JzLiAgVGhlIGNvbnZlbnRpb24gaXMKKyAqIGRlZmluZWQgaW4gdGhlIFVTQiAiQ29tbW9uIENsYXNzIiBTcGVjICgzLjExKS4gIEluZGl2aWR1YWwgY2xhc3Mgc3BlY3MKKyAqIGFyZSBhdXRob3JpdGF0aXZlIGZvciB0aGVpciB1c2FnZSwgbm90IHRoZSAiY29tbW9uIGNsYXNzIiB3cml0ZXVwLgorICovCisjZGVmaW5lIFVTQl9EVF9DU19ERVZJQ0UJCShVU0JfVFlQRV9DTEFTUyB8IFVTQl9EVF9ERVZJQ0UpCisjZGVmaW5lIFVTQl9EVF9DU19DT05GSUcJCShVU0JfVFlQRV9DTEFTUyB8IFVTQl9EVF9DT05GSUcpCisjZGVmaW5lIFVTQl9EVF9DU19TVFJJTkcJCShVU0JfVFlQRV9DTEFTUyB8IFVTQl9EVF9TVFJJTkcpCisjZGVmaW5lIFVTQl9EVF9DU19JTlRFUkZBQ0UJCShVU0JfVFlQRV9DTEFTUyB8IFVTQl9EVF9JTlRFUkZBQ0UpCisjZGVmaW5lIFVTQl9EVF9DU19FTkRQT0lOVAkJKFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RUX0VORFBPSU5UKQorCisvKiBBbGwgc3RhbmRhcmQgZGVzY3JpcHRvcnMgaGF2ZSB0aGVzZSAyIGZpZWxkcyBhdCB0aGUgYmVnaW5uaW5nICovCitzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9ERVZJQ0U6IERldmljZSBkZXNjcmlwdG9yICovCitzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fbGUxNiBiY2RVU0I7CisJX191OCAgYkRldmljZUNsYXNzOworCV9fdTggIGJEZXZpY2VTdWJDbGFzczsKKwlfX3U4ICBiRGV2aWNlUHJvdG9jb2w7CisJX191OCAgYk1heFBhY2tldFNpemUwOworCV9fbGUxNiBpZFZlbmRvcjsKKwlfX2xlMTYgaWRQcm9kdWN0OworCV9fbGUxNiBiY2REZXZpY2U7CisJX191OCAgaU1hbnVmYWN0dXJlcjsKKwlfX3U4ICBpUHJvZHVjdDsKKwlfX3U4ICBpU2VyaWFsTnVtYmVyOworCV9fdTggIGJOdW1Db25maWd1cmF0aW9uczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFVTQl9EVF9ERVZJQ0VfU0laRQkJMTgKKworCisvKgorICogRGV2aWNlIGFuZC9vciBJbnRlcmZhY2UgQ2xhc3MgY29kZXMKKyAqIGFzIGZvdW5kIGluIGJEZXZpY2VDbGFzcyBvciBiSW50ZXJmYWNlQ2xhc3MKKyAqIGFuZCBkZWZpbmVkIGJ5IHd3dy51c2Iub3JnIGRvY3VtZW50cworICovCisjZGVmaW5lIFVTQl9DTEFTU19QRVJfSU5URVJGQUNFCQkwCS8qIGZvciBEZXZpY2VDbGFzcyAqLworI2RlZmluZSBVU0JfQ0xBU1NfQVVESU8JCQkxCisjZGVmaW5lIFVTQl9DTEFTU19DT01NCQkJMgorI2RlZmluZSBVU0JfQ0xBU1NfSElECQkJMworI2RlZmluZSBVU0JfQ0xBU1NfUEhZU0lDQUwJCTUKKyNkZWZpbmUgVVNCX0NMQVNTX1NUSUxMX0lNQUdFCQk2CisjZGVmaW5lIFVTQl9DTEFTU19QUklOVEVSCQk3CisjZGVmaW5lIFVTQl9DTEFTU19NQVNTX1NUT1JBR0UJCTgKKyNkZWZpbmUgVVNCX0NMQVNTX0hVQgkJCTkKKyNkZWZpbmUgVVNCX0NMQVNTX0NEQ19EQVRBCQkweDBhCisjZGVmaW5lIFVTQl9DTEFTU19DU0NJRAkJCTB4MGIJLyogY2hpcCsgc21hcnQgY2FyZCAqLworI2RlZmluZSBVU0JfQ0xBU1NfQ09OVEVOVF9TRUMJCTB4MGQJLyogY29udGVudCBzZWN1cml0eSAqLworI2RlZmluZSBVU0JfQ0xBU1NfVklERU8JCQkweDBlCisjZGVmaW5lIFVTQl9DTEFTU19XSVJFTEVTU19DT05UUk9MTEVSCTB4ZTAKKyNkZWZpbmUgVVNCX0NMQVNTX01JU0MJCQkweGVmCisjZGVmaW5lIFVTQl9DTEFTU19BUFBfU1BFQwkJMHhmZQorI2RlZmluZSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMJCTB4ZmYKKworI2RlZmluZSBVU0JfU1VCQ0xBU1NfVkVORE9SX1NQRUMJMHhmZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfQ09ORklHOiBDb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24uCisgKgorICogVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRyBpcyB0aGUgc2FtZSBkZXNjcmlwdG9yLCBleGNlcHQgdGhhdCB0aGUKKyAqIGRlc2NyaXB0b3IgdHlwZSBpcyBkaWZmZXJlbnQuICBIaWdoc3BlZWQtY2FwYWJsZSBkZXZpY2VzIGNhbiBsb29rCisgKiBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHdoYXQgc3BlZWQgdGhleSdyZSBjdXJyZW50bHkgcnVubmluZy4gIE9ubHkKKyAqIGRldmljZXMgd2l0aCBhIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSIGhhdmUgYW55IE9USEVSX1NQRUVEX0NPTkZJRworICogZGVzY3JpcHRvcnMuCisgKi8KK3N0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJX19sZTE2IHdUb3RhbExlbmd0aDsKKwlfX3U4ICBiTnVtSW50ZXJmYWNlczsKKwlfX3U4ICBiQ29uZmlndXJhdGlvblZhbHVlOworCV9fdTggIGlDb25maWd1cmF0aW9uOworCV9fdTggIGJtQXR0cmlidXRlczsKKwlfX3U4ICBiTWF4UG93ZXI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfRFRfQ09ORklHX1NJWkUJCTkKKworLyogZnJvbSBjb25maWcgZGVzY3JpcHRvciBibUF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgVVNCX0NPTkZJR19BVFRfT05FCQkoMSA8PCA3KQkvKiBtdXN0IGJlIHNldCAqLworI2RlZmluZSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIJKDEgPDwgNikJLyogc2VsZiBwb3dlcmVkICovCisjZGVmaW5lIFVTQl9DT05GSUdfQVRUX1dBS0VVUAkJKDEgPDwgNSkJLyogY2FuIHdha2V1cCAqLworI2RlZmluZSBVU0JfQ09ORklHX0FUVF9CQVRURVJZCQkoMSA8PCA0KQkvKiBiYXR0ZXJ5IHBvd2VyZWQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX1NUUklORzogU3RyaW5nIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJX19sZTE2IHdEYXRhWzFdOwkJLyogVVRGLTE2TEUgZW5jb2RlZCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIG5vdGUgdGhhdCAic3RyaW5nIiB6ZXJvIGlzIHNwZWNpYWwsIGl0IGhvbGRzIGxhbmd1YWdlIGNvZGVzIHRoYXQKKyAqIHRoZSBkZXZpY2Ugc3VwcG9ydHMsIG5vdCBVbmljb2RlIGNoYXJhY3RlcnMuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX0lOVEVSRkFDRTogSW50ZXJmYWNlIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJX191OCAgYkludGVyZmFjZU51bWJlcjsKKwlfX3U4ICBiQWx0ZXJuYXRlU2V0dGluZzsKKwlfX3U4ICBiTnVtRW5kcG9pbnRzOworCV9fdTggIGJJbnRlcmZhY2VDbGFzczsKKwlfX3U4ICBiSW50ZXJmYWNlU3ViQ2xhc3M7CisJX191OCAgYkludGVyZmFjZVByb3RvY29sOworCV9fdTggIGlJbnRlcmZhY2U7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfRFRfSU5URVJGQUNFX1NJWkUJCTkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX0VORFBPSU5UOiBFbmRwb2ludCBkZXNjcmlwdG9yICovCitzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJX191OCAgYkVuZHBvaW50QWRkcmVzczsKKwlfX3U4ICBibUF0dHJpYnV0ZXM7CisJX19sZTE2IHdNYXhQYWNrZXRTaXplOworCV9fdTggIGJJbnRlcnZhbDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFVTQl9EVF9FTkRQT0lOVF9TSVpFCQk3CisjZGVmaW5lIFVTQl9EVF9FTkRQT0lOVF9BVURJT19TSVpFCTkJLyogQXVkaW8gZXh0ZW5zaW9uICovCisKKworLyoKKyAqIEVuZHBvaW50cworICovCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSwkweDBmCS8qIGluIGJFbmRwb2ludEFkZHJlc3MgKi8KKyNkZWZpbmUgVVNCX0VORFBPSU5UX0RJUl9NQVNLCQkweDgwCisKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NZTkNUWVBFCQkweDBjCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TWU5DX05PTkUJCSgwIDw8IDIpCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TWU5DX0FTWU5DCQkoMSA8PCAyKQorI2RlZmluZSBVU0JfRU5EUE9JTlRfU1lOQ19BREFQVElWRQkoMiA8PCAyKQorI2RlZmluZSBVU0JfRU5EUE9JTlRfU1lOQ19TWU5DCQkoMyA8PCAyKQorCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLCTB4MDMJLyogaW4gYm1BdHRyaWJ1dGVzICovCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wJMAorI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DCQkxCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsJCTIKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfSU5UCQkzCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9NQVhfQURKVVNUQUJMRQkweDgwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX2VuZHBvaW50X251bSAtIGdldCB0aGUgZW5kcG9pbnQncyBudW1iZXIKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIEBlcGQncyBudW1iZXI6IDAgdG8gMTUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9udW0oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfdHlwZSAtIGdldCB0aGUgZW5kcG9pbnQncyB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyBvbmUgb2YgVVNCX0VORFBPSU5UX1hGRVJfe0NPTlRST0wsIElTT0MsIEJVTEssIElOVH0gYWNjb3JkaW5nCisgKiB0byBAZXBkJ3MgdHJhbnNmZXIgdHlwZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3R5cGUoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2Rpcl9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgSU4gZGlyZWN0aW9uCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIElOLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2Rpcl9pbihjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9kaXJfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBPVVQgZGlyZWN0aW9uCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIE9VVCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBidWxrLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfYnVsaygKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBjb250cm9sIHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgY29udHJvbCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfaW50IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpbnRlcnJ1cHQsIG90aGVyd2lzZSBpdCByZXR1cm5zCisgKiBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaW50KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfaXNvYyAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpc29jaHJvbm91cywgb3RoZXJ3aXNlIGl0IHJldHVybnMKKyAqIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9pc29jKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfSVNPQzsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIElOCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGJ1bGsgT1VUCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19idWxrX291dCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gdXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2ludF9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgSU4KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pbnRfaW4oCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaW50X291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgT1VUCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2ludF9vdXQoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2lzb2NfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaXNvY2hyb25vdXMgSU4KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2NfaW4oCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIE9VVAorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiB1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX1NTX0VORFBPSU5UX0NPTVA6IFN1cGVyU3BlZWQgRW5kcG9pbnQgQ29tcGFuaW9uIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCB1c2Jfc3NfZXBfY29tcF9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fdTggIGJNYXhCdXJzdDsKKwlfX3U4ICBibUF0dHJpYnV0ZXM7CisJX19sZTE2IHdCeXRlc1BlckludGVydmFsOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX1NTX0VQX0NPTVBfU0laRQkJNgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjogRGV2aWNlIFF1YWxpZmllciBkZXNjcmlwdG9yICovCitzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fbGUxNiBiY2RVU0I7CisJX191OCAgYkRldmljZUNsYXNzOworCV9fdTggIGJEZXZpY2VTdWJDbGFzczsKKwlfX3U4ICBiRGV2aWNlUHJvdG9jb2w7CisJX191OCAgYk1heFBhY2tldFNpemUwOworCV9fdTggIGJOdW1Db25maWd1cmF0aW9uczsKKwlfX3U4ICBiUkVTRVJWRUQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfT1RHIChmcm9tIE9URyAxLjBhIHN1cHBsZW1lbnQpICovCitzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fdTggIGJtQXR0cmlidXRlczsJLyogc3VwcG9ydCBmb3IgSE5QLCBTUlAsIGV0YyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIGZyb20gdXNiX290Z19kZXNjcmlwdG9yLmJtQXR0cmlidXRlcyAqLworI2RlZmluZSBVU0JfT1RHX1NSUAkJKDEgPDwgMCkKKyNkZWZpbmUgVVNCX09UR19ITlAJCSgxIDw8IDEpCS8qIHN3YXAgaG9zdC9kZXZpY2Ugcm9sZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCX0RUX0RFQlVHOiAgZm9yIHNwZWNpYWwgaGlnaHNwZWVkIGRldmljZXMsIHJlcGxhY2luZyBzZXJpYWwgY29uc29sZSAqLworc3RydWN0IHVzYl9kZWJ1Z19kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCS8qIGJ1bGsgZW5kcG9pbnRzIHdpdGggOCBieXRlIG1heHBhY2tldCAqLworCV9fdTggIGJEZWJ1Z0luRW5kcG9pbnQ7CisJX191OCAgYkRlYnVnT3V0RW5kcG9pbnQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfSU5URVJGQUNFX0FTU09DSUFUSU9OOiBncm91cHMgaW50ZXJmYWNlcyAqLworc3RydWN0IHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisKKwlfX3U4ICBiRmlyc3RJbnRlcmZhY2U7CisJX191OCAgYkludGVyZmFjZUNvdW50OworCV9fdTggIGJGdW5jdGlvbkNsYXNzOworCV9fdTggIGJGdW5jdGlvblN1YkNsYXNzOworCV9fdTggIGJGdW5jdGlvblByb3RvY29sOworCV9fdTggIGlGdW5jdGlvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9TRUNVUklUWTogIGdyb3VwIG9mIHdpcmVsZXNzIHNlY3VyaXR5IGRlc2NyaXB0b3JzLCBpbmNsdWRpbmcKKyAqIGVuY3J5cHRpb24gdHlwZXMgYXZhaWxhYmxlIGZvciBzZXR0aW5nIHVwIGEgQ0MvYXNzb2NpYXRpb24uCisgKi8KK3N0cnVjdCB1c2Jfc2VjdXJpdHlfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisKKwlfX2xlMTYgd1RvdGFsTGVuZ3RoOworCV9fdTggIGJOdW1FbmNyeXB0aW9uVHlwZXM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfS0VZOiAgdXNlZCB3aXRoIHtHRVQsU0VUfV9TRUNVUklUWV9EQVRBOyBvbmx5IHB1YmxpYyBrZXlzCisgKiBtYXkgYmUgcmV0cmlldmVkLgorICovCitzdHJ1Y3QgdXNiX2tleV9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fdTggIHRUS0lEWzNdOworCV9fdTggIGJSZXNlcnZlZDsKKwlfX3U4ICBiS2V5RGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9FTkNSWVBUSU9OX1RZUEU6ICBidW5kbGVkIGluIERUX1NFQ1VSSVRZIGdyb3VwcyAqLworc3RydWN0IHVzYl9lbmNyeXB0aW9uX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCisJX191OCAgYkVuY3J5cHRpb25UeXBlOworI2RlZmluZQlVU0JfRU5DX1RZUEVfVU5TRUNVUkUJCTAKKyNkZWZpbmUJVVNCX0VOQ19UWVBFX1dJUkVECQkxCS8qIG5vbi13aXJlbGVzcyBtb2RlICovCisjZGVmaW5lCVVTQl9FTkNfVFlQRV9DQ01fMQkJMgkvKiBhZXMxMjgvY2JjIHNlc3Npb24gKi8KKyNkZWZpbmUJVVNCX0VOQ19UWVBFX1JTQV8xCQkzCS8qIHJzYTMwNzIvc2hhMSBhdXRoICovCisJX191OCAgYkVuY3J5cHRpb25WYWx1ZTsJCS8qIHVzZSBpbiBTRVRfRU5DUllQVElPTiAqLworCV9fdTggIGJBdXRoS2V5SW5kZXg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9CT1M6ICBncm91cCBvZiBkZXZpY2UtbGV2ZWwgY2FwYWJpbGl0aWVzICovCitzdHJ1Y3QgdXNiX2Jvc19kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fbGUxNiB3VG90YWxMZW5ndGg7CisJX191OCAgYk51bURldmljZUNhcHM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfRFRfREVWSUNFX0NBUEFCSUxJVFk6ICBncm91cGVkIHdpdGggQk9TICovCitzdHJ1Y3QgdXNiX2Rldl9jYXBfaGVhZGVyIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiRGV2Q2FwYWJpbGl0eVR5cGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lCVVTQl9DQVBfVFlQRV9XSVJFTEVTU19VU0IJMQorCitzdHJ1Y3QgdXNiX3dpcmVsZXNzX2NhcF9kZXNjcmlwdG9yIHsJLyogVWx0cmEgV2lkZSBCYW5kICovCisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisJX191OCAgYkRldkNhcGFiaWxpdHlUeXBlOworCisJX191OCAgYm1BdHRyaWJ1dGVzOworI2RlZmluZQlVU0JfV0lSRUxFU1NfUDJQX0RSRAkJKDEgPDwgMSkKKyNkZWZpbmUJVVNCX1dJUkVMRVNTX0JFQUNPTl9NQVNLCSgzIDw8IDIpCisjZGVmaW5lCVVTQl9XSVJFTEVTU19CRUFDT05fU0VMRgkoMSA8PCAyKQorI2RlZmluZQlVU0JfV0lSRUxFU1NfQkVBQ09OX0RJUkVDVEVECSgyIDw8IDIpCisjZGVmaW5lCVVTQl9XSVJFTEVTU19CRUFDT05fTk9ORQkoMyA8PCAyKQorCV9fbGUxNiB3UEhZUmF0ZXM7CS8qIGJpdCByYXRlcywgTWJwcyAqLworI2RlZmluZQlVU0JfV0lSRUxFU1NfUEhZXzUzCQkoMSA8PCAwKQkvKiBhbHdheXMgc2V0ICovCisjZGVmaW5lCVVTQl9XSVJFTEVTU19QSFlfODAJCSgxIDw8IDEpCisjZGVmaW5lCVVTQl9XSVJFTEVTU19QSFlfMTA3CQkoMSA8PCAyKQkvKiBhbHdheXMgc2V0ICovCisjZGVmaW5lCVVTQl9XSVJFTEVTU19QSFlfMTYwCQkoMSA8PCAzKQorI2RlZmluZQlVU0JfV0lSRUxFU1NfUEhZXzIwMAkJKDEgPDwgNCkJLyogYWx3YXlzIHNldCAqLworI2RlZmluZQlVU0JfV0lSRUxFU1NfUEhZXzMyMAkJKDEgPDwgNSkKKyNkZWZpbmUJVVNCX1dJUkVMRVNTX1BIWV80MDAJCSgxIDw8IDYpCisjZGVmaW5lCVVTQl9XSVJFTEVTU19QSFlfNDgwCQkoMSA8PCA3KQorCV9fdTggIGJtVEZJVFhQb3dlckluZm87CS8qIFRGSSBwb3dlciBsZXZlbHMgKi8KKwlfX3U4ICBibUZGSVRYUG93ZXJJbmZvOwkvKiBGRkkgcG93ZXIgbGV2ZWxzICovCisJX19sZTE2IGJtQmFuZEdyb3VwOworCV9fdTggIGJSZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUJVVNCX0NBUF9UWVBFX0VYVAkJMgorCitzdHJ1Y3QgdXNiX2V4dF9jYXBfZGVzY3JpcHRvciB7CQkvKiBMaW5rIFBvd2VyIE1hbmFnZW1lbnQgKi8KKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiRGV2Q2FwYWJpbGl0eVR5cGU7CisJX191OCAgYm1BdHRyaWJ1dGVzOworI2RlZmluZSBVU0JfTFBNX1NVUFBPUlQJCQkoMSA8PCAxKQkvKiBzdXBwb3J0cyBMUE0gKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQl9EVF9XSVJFTEVTU19FTkRQT0lOVF9DT01QOiAgY29tcGFuaW9uIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoCisgKiBlYWNoIGVuZHBvaW50IGRlc2NyaXB0b3IgZm9yIGEgd2lyZWxlc3MgZGV2aWNlCisgKi8KK3N0cnVjdCB1c2Jfd2lyZWxlc3NfZXBfY29tcF9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKworCV9fdTggIGJNYXhCdXJzdDsKKwlfX3U4ICBiTWF4U2VxdWVuY2U7CisJX19sZTE2IHdNYXhTdHJlYW1EZWxheTsKKwlfX2xlMTYgd092ZXJUaGVBaXJQYWNrZXRTaXplOworCV9fdTggIGJPdmVyVGhlQWlySW50ZXJ2YWw7CisJX191OCAgYm1Db21wQXR0cmlidXRlczsKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NXSVRDSF9NQVNLCTB4MDMJLyogaW4gYm1Db21wQXR0cmlidXRlcyAqLworI2RlZmluZSBVU0JfRU5EUE9JTlRfU1dJVENIX05PCQkwCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TV0lUQ0hfU1dJVENICTEKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NXSVRDSF9TQ0FMRQkyCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfUkVRX1NFVF9IQU5EU0hBS0UgaXMgYSBmb3VyLXdheSBoYW5kc2hha2UgdXNlZCBiZXR3ZWVuIGEgd2lyZWxlc3MKKyAqIGhvc3QgYW5kIGEgZGV2aWNlIGZvciBjb25uZWN0aW9uIHNldCB1cCwgbXV0dWFsIGF1dGhlbnRpY2F0aW9uLCBhbmQKKyAqIGV4Y2hhbmdpbmcgc2hvcnQgbGl2ZWQgc2Vzc2lvbiBrZXlzLiAgVGhlIGhhbmRzaGFrZSBkZXBlbmRzIG9uIGEgQ0MuCisgKi8KK3N0cnVjdCB1c2JfaGFuZHNoYWtlIHsKKwlfX3U4IGJNZXNzYWdlTnVtYmVyOworCV9fdTggYlN0YXR1czsKKwlfX3U4IHRUS0lEWzNdOworCV9fdTggYlJlc2VydmVkOworCV9fdTggQ0RJRFsxNl07CisJX191OCBub25jZVsxNl07CisJX191OCBNSUNbOF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0JfUkVRX1NFVF9DT05ORUNUSU9OIG1vZGlmaWVzIG9yIHJldm9rZXMgYSBjb25uZWN0aW9uIGNvbnRleHQgKENDKS4KKyAqIEEgQ0MgbWF5IGFsc28gYmUgc2V0IHVwIHVzaW5nIG5vbi13aXJlbGVzcyBzZWN1cmUgY2hhbm5lbHMgKGluY2x1ZGluZworICogd2lyZWQgVVNCISksIGFuZCBzb21lIGRldmljZXMgbWF5IHN1cHBvcnQgQ0NzIHdpdGggbXVsdGlwbGUgaG9zdHMuCisgKi8KK3N0cnVjdCB1c2JfY29ubmVjdGlvbl9jb250ZXh0IHsKKwlfX3U4IENISURbMTZdOwkJLyogcGVyc2lzdGVudCBob3N0IGlkICovCisJX191OCBDRElEWzE2XTsJCS8qIGRldmljZSBpZCAodW5pcXVlIHcvaW4gaG9zdCBjb250ZXh0KSAqLworCV9fdTggQ0tbMTZdOwkJLyogY29ubmVjdGlvbiBrZXkgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQiAyLjAgZGVmaW5lcyB0aHJlZSBzcGVlZHMsIGhlcmUncyBob3cgTGludXggaWRlbnRpZmllcyB0aGVtICovCisKK2VudW0gdXNiX2RldmljZV9zcGVlZCB7CisJVVNCX1NQRUVEX1VOS05PV04gPSAwLAkJCS8qIGVudW1lcmF0aW5nICovCisJVVNCX1NQRUVEX0xPVywgVVNCX1NQRUVEX0ZVTEwsCQkvKiB1c2IgMS4xICovCisJVVNCX1NQRUVEX0hJR0gsCQkJCS8qIHVzYiAyLjAgKi8KKwlVU0JfU1BFRURfV0lSRUxFU1MsCQkJLyogd2lyZWxlc3MgKHVzYiAyLjUpICovCisJVVNCX1NQRUVEX1NVUEVSLAkJCS8qIHVzYiAzLjAgKi8KK307CisKK2VudW0gdXNiX2RldmljZV9zdGF0ZSB7CisJLyogTk9UQVRUQUNIRUQgaXNuJ3QgaW4gdGhlIFVTQiBzcGVjLCBhbmQgdGhpcyBzdGF0ZSBhY3RzCisJICogdGhlIHNhbWUgYXMgQVRUQUNIRUQgLi4uIGJ1dCBpdCdzIGNsZWFyZXIgdGhpcyB3YXkuCisJICovCisJVVNCX1NUQVRFX05PVEFUVEFDSEVEID0gMCwKKworCS8qIGNoYXB0ZXIgOSBhbmQgYXV0aGVudGljYXRpb24gKHdpcmVsZXNzKSBkZXZpY2Ugc3RhdGVzICovCisJVVNCX1NUQVRFX0FUVEFDSEVELAorCVVTQl9TVEFURV9QT1dFUkVELAkJCS8qIHdpcmVkICovCisJVVNCX1NUQVRFX1JFQ09OTkVDVElORywJCQkvKiBhdXRoICovCisJVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRCwJCS8qIGF1dGggKi8KKwlVU0JfU1RBVEVfREVGQVVMVCwJCQkvKiBsaW1pdGVkIGZ1bmN0aW9uICovCisJVVNCX1NUQVRFX0FERFJFU1MsCisJVVNCX1NUQVRFX0NPTkZJR1VSRUQsCQkJLyogbW9zdCBmdW5jdGlvbnMgKi8KKworCVVTQl9TVEFURV9TVVNQRU5ERUQKKworCS8qIE5PVEU6ICB0aGVyZSBhcmUgYWN0dWFsbHkgZm91ciBkaWZmZXJlbnQgU1VTUEVOREVECisJICogc3RhdGVzLCByZXR1cm5pbmcgdG8gUE9XRVJFRCwgREVGQVVMVCwgQUREUkVTUywgb3IKKwkgKiBDT05GSUdVUkVEIHJlc3BlY3RpdmVseSB3aGVuIFNPRiB0b2tlbnMgZmxvdyBhZ2Fpbi4KKwkgKiBBdCB0aGlzIGxldmVsIHRoZXJlJ3Mgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIEwxIGFuZCBMMgorCSAqIHN1c3BlbmQgc3RhdGVzLiAgKEwyIGJlaW5nIG9yaWdpbmFsIFVTQiAxLjEgc3VzcGVuZC4pCisJICovCit9OworCisjZW5kaWYgLyogX19MSU5VWF9VU0JfQ0g5X0ggKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvY2FybDkxNzBmdy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzMWYzYwotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZuZGVmIF9fU0hBUkVEX0NPTVBJTEVSX0gKKyNkZWZpbmUgX19TSEFSRURfQ09NUElMRVJfSAorCisjZGVmaW5lIF9fbm9pbmxpbmUJX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorI2RlZmluZSBfX25vcmV0dXJuCV9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkKKyNkZWZpbmUgX19pbmxpbmUJX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjZGVmaW5lIF9faG90CQlfX2F0dHJpYnV0ZV9fKChob3QpKQorI2RlZmluZSBfX2NvbGQJCV9fYXR0cmlidXRlX18oKGNvbGQpKQorI2RlZmluZSBfX3VudXNlZAlfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorI2RlZmluZSBfX2ZvcmNlCQlfX2F0dHJpYnV0ZV9fKChmb3JjZSkpCisjZGVmaW5lIF9fc2VjdGlvbihzKQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuIiAjIHMpKSkKKyNkZWZpbmUgX19hbGlnbmVkKGEpCV9fYXR0cmlidXRlX18oKGFsaWduZWQoYSkpKQorI2RlZmluZSBfX3BhY2tlZAlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorCisjZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pCSgodm9pZClzaXplb2YoY2hhclsxIC0gMiohIShjb25kaXRpb24pXSkpCisjZGVmaW5lIEJVSUxEX0JVR19PTl9aRVJPKGUpIChzaXplb2YoY2hhclsxIC0gMiAqICEhKGUpXSkgLSAxKQorCisjZGVmaW5lIEFMSUdOKHgsIGEpCQlfX0FMSUdOX01BU0soeCwgKHR5cGVvZih4KSkoYSkgLSAxKQorI2RlZmluZSBfX0FMSUdOX01BU0soeCwgbWFzaykJKCgoeCkgKyAobWFzaykpICYgfihtYXNrKSkKKworI2RlZmluZSBfX3JvdW5kdXAoeCwgeSkgKCgoKHgpICsgKCh5KSAtIDEpKSAvICh5KSkgKiAoeSkpCisKKyNkZWZpbmUgX19tdXN0X2JlX2FycmF5KGEpIFwKKyAgQlVJTERfQlVHX09OX1pFUk8oX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoYSksIHR5cGVvZigmYVswXSkpKQorI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZigoYXJyKSkgLyBzaXplb2YoKGFycilbMF0pICsgX19tdXN0X2JlX2FycmF5KGFycikpCisKKyNkZWZpbmUgQklUKGIpCQkJKDEgPDwgKGIpKQorI2RlZmluZSBNQVNLKHcpCQkJKEJJVCh3KSAtIDEpCisKKyN1bmRlZiBvZmZzZXRvZgorI2lmZGVmIF9fY29tcGlsZXJfb2Zmc2V0b2YKKyMgZGVmaW5lIG9mZnNldG9mKFRZUEUsIE1FTUJFUikgX19jb21waWxlcl9vZmZzZXRvZihUWVBFLCBNRU1CRVIpCisjZWxzZQorIyBkZWZpbmUgb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAoKHNpemVfdCkgJigoVFlQRSAqKTApLT5NRU1CRVIpCisjZW5kaWYKKworI2RlZmluZSBsaWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMSkKKyNkZWZpbmUgdW5saWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMCkKKworI2RlZmluZSBtaW4oeCwgeSkgKHsJCQkJXAorCXR5cGVvZih4KSBfbWluMSA9ICh4KTsJCQlcCisJdHlwZW9mKHkpIF9taW4yID0gKHkpOwkJCVwKKwkodm9pZCkgKCZfbWluMSA9PSAmX21pbjIpOwkJXAorCV9taW4xIDwgX21pbjIgPyBfbWluMSA6IF9taW4yOyB9KQorCisjZGVmaW5lIG1heCh4LCB5KSAoewkJCQlcCisJdHlwZW9mKHgpIF9tYXgxID0gKHgpOwkJCVwKKwl0eXBlb2YoeSkgX21heDIgPSAoeSk7CQkJXAorCSh2b2lkKSAoJl9tYXgxID09ICZfbWF4Mik7CQlcCisJX21heDEgPiBfbWF4MiA/IF9tYXgxIDogX21heDI7IH0pCisKKyNkZWZpbmUgbWluX3QodHlwZSwgeCwgeSkgKHsJCQlcCisJdHlwZSBfX21pbjEgPSAoeCk7CQkJXAorCXR5cGUgX19taW4yID0gKHkpOwkJCVwKKwlfX21pbjEgPCBfX21pbjIgPyBfX21pbjEgOiBfX21pbjI7IH0pCisKKyNkZWZpbmUgbWF4X3QodHlwZSwgeCwgeSkgKHsJCQlcCisJdHlwZSBfX21heDEgPSAoeCk7CQkJXAorCXR5cGUgX19tYXgyID0gKHkpOwkJCVwKKwlfX21heDEgPiBfX21heDIgPyBfX21heDEgOiBfX21heDI7IH0pCisKKworI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpICh7CQkJXAorCWNvbnN0IHR5cGVvZigoKHR5cGUgKikwKS0+bWVtYmVyKSAqIF9fbXB0ciA9IChwdHIpOwlcCisJKHR5cGUgKikoKCh1bnNpZ25lZCBsb25nKV9fbXB0ciAtIG9mZnNldG9mKHR5cGUsIG1lbWJlcikpKTsgfSkKKworI2RlZmluZSBNQVhfRVJSTk8JNDA5NQorCisjZGVmaW5lIElTX0VSUl9WQUxVRSh4KSB1bmxpa2VseSgoeCkgPj0gKHVuc2lnbmVkIGxvbmcpLU1BWF9FUlJOTykKKworc3RhdGljIGlubGluZSB2b2lkICpFUlJfUFRSKGxvbmcgZXJyb3JucikKK3sKKwlyZXR1cm4gKHZvaWQgKikgZXJyb3JucjsKK30KKworc3RhdGljIGlubGluZSBsb25nIFBUUl9FUlIoY29uc3Qgdm9pZCAqcHRyKQoreworCXJldHVybiAobG9uZykgcHRyOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgSVNfRVJSKGNvbnN0IHZvaWQgKnB0cikKK3sKKwlyZXR1cm4gSVNfRVJSX1ZBTFVFKCh1bnNpZ25lZCBsb25nKXB0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBJU19FUlJfT1JfTlVMTChjb25zdCB2b2lkICpwdHIpCit7CisJcmV0dXJuICFwdHIgfHwgSVNfRVJSX1ZBTFVFKCh1bnNpZ25lZCBsb25nKXB0cik7Cit9CisKKyNlbmRpZiAvKiBfX1NIQVJFRF9DT01QSUxFUl9IICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9jYXJsOTE3MGZ3L2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0NDhjYQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaApAQCAtMCwwICsxLDE5MTggQEAKKy8qCisgKiBJRUVFIDgwMi4xMSBkZWZpbmVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIsIFNTSCBDb21tdW5pY2F0aW9ucyBTZWN1cml0eSBDb3JwIGFuZCBKb3VuaSBNYWxpbmVuCisgKiA8amttYWxpbmVAY2MuaHV0LmZpPgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMsIEpvdW5pIE1hbGluZW4gPGprbWFsaW5lQGNjLmh1dC5maT4KKyAqIENvcHlyaWdodCAoYykgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfSUVFRTgwMjExX0gKKyNkZWZpbmUgX19MSU5VWF9JRUVFODAyMTFfSAorCisvKgorICogRFMgYml0IHVzYWdlCisgKgorICogVEEgPSB0cmFuc21pdHRlciBhZGRyZXNzCisgKiBSQSA9IHJlY2VpdmVyIGFkZHJlc3MKKyAqIERBID0gZGVzdGluYXRpb24gYWRkcmVzcworICogU0EgPSBzb3VyY2UgYWRkcmVzcworICoKKyAqIFRvRFMgICAgRnJvbURTICBBMShSQSkgIEEyKFRBKSAgQTMgICAgICBBNCAgICAgIFVzZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAwICAgICAgIDAgICAgICAgREEgICAgICBTQSAgICAgIEJTU0lEICAgLSAgICAgICBJQlNTL0RMUworICogIDAgICAgICAgMSAgICAgICBEQSAgICAgIEJTU0lEICAgU0EgICAgICAtICAgICAgIEFQIC0+IFNUQQorICogIDEgICAgICAgMCAgICAgICBCU1NJRCAgIFNBICAgICAgREEgICAgICAtICAgICAgIEFQIDwtIFNUQQorICogIDEgICAgICAgMSAgICAgICBSQSAgICAgIFRBICAgICAgREEgICAgICBTQSAgICAgIHVuc3BlY2lmaWVkIChXRFMpCisgKi8KKworI2RlZmluZSBGQ1NfTEVOIDQKKworI2RlZmluZSBJRUVFODAyMTFfRkNUTF9WRVJTCQkweDAwMDMKKyNkZWZpbmUgSUVFRTgwMjExX0ZDVExfRlRZUEUJCTB4MDAwYworI2RlZmluZSBJRUVFODAyMTFfRkNUTF9TVFlQRQkJMHgwMGYwCisjZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1RPRFMJCTB4MDEwMAorI2RlZmluZSBJRUVFODAyMTFfRkNUTF9GUk9NRFMJCTB4MDIwMAorI2RlZmluZSBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MJMHgwNDAwCisjZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1JFVFJZCQkweDA4MDAKKyNkZWZpbmUgSUVFRTgwMjExX0ZDVExfUE0JCTB4MTAwMAorI2RlZmluZSBJRUVFODAyMTFfRkNUTF9NT1JFREFUQQkJMHgyMDAwCisjZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRAkweDQwMDAKKyNkZWZpbmUgSUVFRTgwMjExX0ZDVExfT1JERVIJCTB4ODAwMAorCisjZGVmaW5lIElFRUU4MDIxMV9TQ1RMX0ZSQUcJCTB4MDAwRgorI2RlZmluZSBJRUVFODAyMTFfU0NUTF9TRVEJCTB4RkZGMAorCisjZGVmaW5lIElFRUU4MDIxMV9GVFlQRV9NR01UCQkweDAwMDAKKyNkZWZpbmUgSUVFRTgwMjExX0ZUWVBFX0NUTAkJMHgwMDA0CisjZGVmaW5lIElFRUU4MDIxMV9GVFlQRV9EQVRBCQkweDAwMDgKKworLyogbWFuYWdlbWVudCAqLworI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRCTB4MDAwMAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUAkweDAwMTAKKyNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRCTB4MDAyMAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQCTB4MDAzMAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRCTB4MDA0MAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUAkweDAwNTAKKyNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0JFQUNPTgkJMHgwMDgwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BVElNCQkweDAwOTAKKyNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DCTB4MDBBMAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVVUSAkJMHgwMEIwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9ERUFVVEgJCTB4MDBDMAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OCQkweDAwRDAKKworLyogY29udHJvbCAqLworI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVEJMHgwMDgwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9CQUNLCQkweDAwOTAKKyNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1BTUE9MTAkJMHgwMEEwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9SVFMJCTB4MDBCMAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ1RTCQkweDAwQzAKKyNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FDSwkJMHgwMEQwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkVORAkJMHgwMEUwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkVOREFDSwkweDAwRjAKKworLyogZGF0YSAqLworI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREFUQQkJCTB4MDAwMAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREFUQV9DRkFDSwkJMHgwMDEwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBX0NGUE9MTAkJMHgwMDIwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBX0NGQUNLUE9MTAkJMHgwMDMwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQwkJMHgwMDQwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkFDSwkJCTB4MDA1MAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZQT0xMCQkJMHgwMDYwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkFDS1BPTEwJCTB4MDA3MAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEJCTB4MDA4MAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEFfQ0ZBQ0sJCTB4MDA5MAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEFfQ0ZQT0xMCQkweDAwQTAKKyNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBX0NGQUNLUE9MTAkweDAwQjAKKyNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1FPU19OVUxMRlVOQwkJMHgwMEMwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9RT1NfQ0ZBQ0sJCTB4MDBEMAorI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUU9TX0NGUE9MTAkJMHgwMEUwCisjZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9RT1NfQ0ZBQ0tQT0xMCQkweDAwRjAKKworCisvKiBtaXNjZWxsYW5lb3VzIElFRUUgODAyLjExIGNvbnN0YW50cyAqLworI2RlZmluZSBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xECTIzNTIKKyNkZWZpbmUgSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xECTIzNTMKKyNkZWZpbmUgSUVFRTgwMjExX01BWF9BSUQJCTIwMDcKKyNkZWZpbmUgSUVFRTgwMjExX01BWF9USU1fTEVOCQkyNTEKKy8qIE1heGltdW0gc2l6ZSBmb3IgdGhlIE1BLVVOSVREQVRBIHByaW1pdGl2ZSwgODAyLjExIHN0YW5kYXJkIHNlY3Rpb24KKyAgIDYuMi4xLjEuMi4KKworICAgODAyLjExZSBjbGFyaWZpZXMgdGhlIGZpZ3VyZSBpbiBzZWN0aW9uIDcuMS4yLiBUaGUgZnJhbWUgYm9keSBpcworICAgdXAgdG8gMjMwNCBvY3RldHMgbG9uZyAobWF4aW11bSBNU0RVIHNpemUpIHBsdXMgYW55IGNyeXB0IG92ZXJoZWFkLiAqLworI2RlZmluZSBJRUVFODAyMTFfTUFYX0RBVEFfTEVOCQkyMzA0CisvKiAzMCBieXRlIDQgYWRkciBoZHIsIDIgYnl0ZSBRb1MsIDIzMDQgYnl0ZSBNU0RVLCAxMiBieXRlIGNyeXB0LCA0IGJ5dGUgRkNTICovCisjZGVmaW5lIElFRUU4MDIxMV9NQVhfRlJBTUVfTEVOCQkyMzUyCisKKyNkZWZpbmUgSUVFRTgwMjExX01BWF9TU0lEX0xFTgkJMzIKKworI2RlZmluZSBJRUVFODAyMTFfTUFYX01FU0hfSURfTEVOCTMyCisKKyNkZWZpbmUgSUVFRTgwMjExX1FPU19DVExfTEVOCQkyCisvKiAxZCB0YWcgbWFzayAqLworI2RlZmluZSBJRUVFODAyMTFfUU9TX0NUTF9UQUcxRF9NQVNLCQkweDAwMDcKKy8qIFRJRCBtYXNrICovCisjZGVmaW5lIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLCQkweDAwMGYKKy8qIEVPU1AgKi8KKyNkZWZpbmUgSUVFRTgwMjExX1FPU19DVExfRU9TUAkJCTB4MDAxMAorLyogQUNLIHBvbGljeSAqLworI2RlZmluZSBJRUVFODAyMTFfUU9TX0NUTF9BQ0tfUE9MSUNZX05PUk1BTAkweDAwMDAKKyNkZWZpbmUgSUVFRTgwMjExX1FPU19DVExfQUNLX1BPTElDWV9OT0FDSwkweDAwMjAKKyNkZWZpbmUgSUVFRTgwMjExX1FPU19DVExfQUNLX1BPTElDWV9OT19FWFBMCTB4MDA0MAorI2RlZmluZSBJRUVFODAyMTFfUU9TX0NUTF9BQ0tfUE9MSUNZX0JMT0NLQUNLCTB4MDA2MAorI2RlZmluZSBJRUVFODAyMTFfUU9TX0NUTF9BQ0tfUE9MSUNZX01BU0sJMHgwMDYwCisvKiBBLU1TRFUgODAyLjExbiAqLworI2RlZmluZSBJRUVFODAyMTFfUU9TX0NUTF9BX01TRFVfUFJFU0VOVAkweDAwODAKKy8qIE1lc2ggQ29udHJvbCA4MDIuMTFzICovCisjZGVmaW5lIElFRUU4MDIxMV9RT1NfQ1RMX01FU0hfQ09OVFJPTF9QUkVTRU5UICAweDAxMDAKKworLyogVS1BUFNEIHF1ZXVlIGZvciBXTU0gSUVzIHNlbnQgYnkgQVAgKi8KKyNkZWZpbmUgSUVFRTgwMjExX1dNTV9JRV9BUF9RT1NJTkZPX1VBUFNECSgxPDw3KQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX0FQX1FPU0lORk9fUEFSQU1fU0VUX0NOVF9NQVNLCTB4MGYKKworLyogVS1BUFNEIHF1ZXVlcyBmb3IgV01NIElFcyBzZW50IGJ5IFNUQSAqLworI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX1ZPCSgxPDwwKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX1ZJCSgxPDwxKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX0JLCSgxPDwyKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX0JFCSgxPDwzKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX01BU0sJMHgwZgorCisvKiBVLUFQU0QgbWF4IFNQIGxlbmd0aCBmb3IgV01NIElFcyBzZW50IGJ5IFNUQSAqLworI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX1NQX0FMTAkweDAwCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfMgkweDAxCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfNAkweDAyCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfNgkweDAzCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfTUFTSwkweDAzCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfU0hJRlQJNQorCisjZGVmaW5lIElFRUU4MDIxMV9IVF9DVExfTEVOCQk0CisKK3N0cnVjdCBpZWVlODAyMTFfaGRyIHsKKwlfX2xlMTYgZnJhbWVfY29udHJvbDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbNl07CisJdTggYWRkcjJbNl07CisJdTggYWRkcjNbNl07CisJX19sZTE2IHNlcV9jdHJsOworCXU4IGFkZHI0WzZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIHsKKwlfX2xlMTYgZnJhbWVfY29udHJvbDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbNl07CisJdTggYWRkcjJbNl07CisJdTggYWRkcjNbNl07CisJX19sZTE2IHNlcV9jdHJsOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfcW9zX2hkciB7CisJX19sZTE2IGZyYW1lX2NvbnRyb2w7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxWzZdOworCXU4IGFkZHIyWzZdOworCXU4IGFkZHIzWzZdOworCV9fbGUxNiBzZXFfY3RybDsKKwlfX2xlMTYgcW9zX2N0cmw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoqCisgKiBpZWVlODAyMTFfaGFzX3RvZHMgLSBjaGVjayBpZiBJRUVFODAyMTFfRkNUTF9UT0RTIGlzIHNldAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9oYXNfdG9kcyhfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMpKSAhPSAwOworfQorCisvKioKKyAqIGllZWU4MDIxMV9oYXNfZnJvbWRzIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZDVExfRlJPTURTIGlzIHNldAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9oYXNfZnJvbWRzKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKSkgIT0gMDsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaGFzX2E0IC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZDVExfVE9EUyBhbmQgSUVFRTgwMjExX0ZDVExfRlJPTURTIGFyZSBzZXQKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaGFzX2E0KF9fbGUxNiBmYykKK3sKKwlfX2xlMTYgdG1wID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUyk7CisJcmV0dXJuIChmYyAmIHRtcCkgPT0gdG1wOworfQorCisvKioKKyAqIGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTIGlzIHNldAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKSkgIT0gMDsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaGFzX3JldHJ5IC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZDVExfUkVUUlkgaXMgc2V0CisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2hhc19yZXRyeShfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1JFVFJZKSkgIT0gMDsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaGFzX3BtIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZDVExfUE0gaXMgc2V0CisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2hhc19wbShfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKSkgIT0gMDsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaGFzX21vcmVkYXRhIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZDVExfTU9SRURBVEEgaXMgc2V0CisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2hhc19tb3JlZGF0YShfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKSkgIT0gMDsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaGFzX3Byb3RlY3RlZCAtIGNoZWNrIGlmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCBpcyBzZXQKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkpICE9IDA7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2hhc19vcmRlciAtIGNoZWNrIGlmIElFRUU4MDIxMV9GQ1RMX09SREVSIGlzIHNldAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9oYXNfb3JkZXIoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9PUkRFUikpICE9IDA7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX21nbXQgLSBjaGVjayBpZiB0eXBlIGlzIElFRUU4MDIxMV9GVFlQRV9NR01UCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX21nbXQoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfY3RsIC0gY2hlY2sgaWYgdHlwZSBpcyBJRUVFODAyMTFfRlRZUEVfQ1RMCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2N0bChfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2RhdGEgLSBjaGVjayBpZiB0eXBlIGlzIElFRUU4MDIxMV9GVFlQRV9EQVRBCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2RhdGEoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfZGF0YV9xb3MgLSBjaGVjayBpZiB0eXBlIGlzIElFRUU4MDIxMV9GVFlQRV9EQVRBIGFuZCBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEgaXMgc2V0CisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2RhdGFfcW9zKF9fbGUxNiBmYykKK3sKKwkvKgorCSAqIG1hc2sgd2l0aCBRT1NfREFUQSByYXRoZXIgdGhhbiBJRUVFODAyMTFfRkNUTF9TVFlQRSBhcyB3ZSBqdXN0IG5lZWQKKwkgKiB0byBjaGVjayB0aGUgb25lIGJpdAorCSAqLworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50IC0gY2hlY2sgaWYgdHlwZSBpcyBJRUVFODAyMTFfRlRZUEVfREFUQSBhbmQgaGFzIGRhdGEKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50KF9fbGUxNiBmYykKK3sKKwkvKgorCSAqIG1hc2sgd2l0aCAweDQwIGFuZCB0ZXN0IHRoYXQgdGhhdCBiaXQgaXMgY2xlYXIgdG8gb25seSByZXR1cm4gdHJ1ZQorCSAqIGZvciB0aGUgZGF0YS1jb250YWluaW5nIHN1YnN0eXBlcy4KKwkgKi8KKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCAweDQwKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEpOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19hc3NvY19yZXEgLSBjaGVjayBpZiBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJiBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2Fzc29jX3JlcShfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEpOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19hc3NvY19yZXNwIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1AKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfYXNzb2NfcmVzcChfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEgLSBjaGVjayBpZiBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJiBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19yZWFzc29jX3Jlc3AgLSBjaGVjayBpZiBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJiBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVzcChfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1ApOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19wcm9iZV9yZXEgLSBjaGVjayBpZiBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJiBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX3Byb2JlX3JlcShfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19wcm9iZV9yZXNwIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfYmVhY29uIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYgSUVFRTgwMjExX1NUWVBFX0JFQUNPTgorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19iZWFjb24oX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfYXRpbSAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9NR01UICYmIElFRUU4MDIxMV9TVFlQRV9BVElNCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2F0aW0oX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfQVRJTSk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2Rpc2Fzc29jIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2Rpc2Fzc29jKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfYXV0aCAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9NR01UICYmIElFRUU4MDIxMV9TVFlQRV9BVVRICisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2F1dGgoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfQVVUSCk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2RlYXV0aCAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9NR01UICYmIElFRUU4MDIxMV9TVFlQRV9ERUFVVEgKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfZGVhdXRoKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0RFQVVUSCk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2FjdGlvbiAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9NR01UICYmIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04KKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfYWN0aW9uKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2JhY2tfcmVxIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX0NUTCAmJiBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVEKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfYmFja19yZXEoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9CQUNLX1JFUSk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2JhY2sgLSBjaGVjayBpZiBJRUVFODAyMTFfRlRZUEVfQ1RMICYmIElFRUU4MDIxMV9TVFlQRV9CQUNLCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2JhY2soX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9CQUNLKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfcHNwb2xsIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX0NUTCAmJiBJRUVFODAyMTFfU1RZUEVfUFNQT0xMCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX3BzcG9sbChfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX1BTUE9MTCk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX3J0cyAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9DVEwgJiYgSUVFRTgwMjExX1NUWVBFX1JUUworICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19ydHMoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9SVFMpOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19jdHMgLSBjaGVjayBpZiBJRUVFODAyMTFfRlRZUEVfQ1RMICYmIElFRUU4MDIxMV9TVFlQRV9DVFMKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfY3RzKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfQ1RTKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfYWNrIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX0NUTCAmJiBJRUVFODAyMTFfU1RZUEVfQUNLCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2FjayhfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX0FDSyk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2NmZW5kIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX0NUTCAmJiBJRUVFODAyMTFfU1RZUEVfQ0ZFTkQKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfY2ZlbmQoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9DRkVORCk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2NmZW5kYWNrIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX0NUTCAmJiBJRUVFODAyMTFfU1RZUEVfQ0ZFTkRBQ0sKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfY2ZlbmRhY2soX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9DRkVOREFDSyk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX251bGxmdW5jIC0gY2hlY2sgaWYgZnJhbWUgaXMgYSByZWd1bGFyIChub24tUW9TKSBudWxsZnVuYyBmcmFtZQorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19udWxsZnVuYyhfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX3Fvc19udWxsZnVuYyAtIGNoZWNrIGlmIGZyYW1lIGlzIGEgUW9TIG51bGxmdW5jIGZyYW1lCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX3Fvc19udWxsZnVuYyhfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9RT1NfTlVMTEZVTkMpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpZWVlODAyMTFfaGRybGVuKF9fbGUxNiBmYykKK3sKKwl1bnNpZ25lZCBpbnQgaGRybGVuID0gMjQ7CisKKwlpZiAoaWVlZTgwMjExX2hhc19hNChmYykpCisJCWhkcmxlbiA9IDMwOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKKwkJaGRybGVuICs9IElFRUU4MDIxMV9RT1NfQ1RMX0xFTjsKKwkJaWYgKGllZWU4MDIxMV9oYXNfb3JkZXIoZmMpKQorCQkJaGRybGVuICs9IElFRUU4MDIxMV9IVF9DVExfTEVOOworCX0KKworICAgICAgICByZXR1cm4gaGRybGVuOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19maXJzdF9mcmFnIC0gY2hlY2sgaWYgSUVFRTgwMjExX1NDVExfRlJBRyBpcyBub3Qgc2V0CisgKiBAc2VxX2N0cmw6IGZyYW1lIHNlcXVlbmNlIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2ZpcnN0X2ZyYWcoX19sZTE2IHNlcV9jdHJsKQoreworCXJldHVybiAoc2VxX2N0cmwgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKSkgPT0gMDsKK30KKworc3RydWN0IGllZWU4MDIxMXNfaGRyIHsKKwl1OCBmbGFnczsKKwl1OCB0dGw7CisJX19sZTMyIHNlcW51bTsKKwl1OCBlYWRkcjFbNl07CisJdTggZWFkZHIyWzZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIE1lc2ggZmxhZ3MgKi8KKyNkZWZpbmUgTUVTSF9GTEFHU19BRV9BNAkweDEKKyNkZWZpbmUgTUVTSF9GTEFHU19BRV9BNV9BNgkweDIKKyNkZWZpbmUgTUVTSF9GTEFHU19BRQkJMHgzCisjZGVmaW5lIE1FU0hfRkxBR1NfUFNfREVFUAkweDQKKworLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX3F1aWV0X2llCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVmZXJzIHRvICJRdWlldCBpbmZvcm1hdGlvbiBlbGVtZW50IgorICovCitzdHJ1Y3QgaWVlZTgwMjExX3F1aWV0X2llIHsKKwl1OCBjb3VudDsKKwl1OCBwZXJpb2Q7CisJX19sZTE2IGR1cmF0aW9uOworCV9fbGUxNiBvZmZzZXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX21zcm1lbnRfaWUKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZWZlcnMgdG8gIk1lYXN1cmVtZW50IFJlcXVlc3QvUmVwb3J0IGluZm9ybWF0aW9uIGVsZW1lbnQiCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfbXNybWVudF9pZSB7CisJdTggdG9rZW47CisJdTggbW9kZTsKKwl1OCB0eXBlOworCXU4IHJlcXVlc3RbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dfaWUKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZWZlcnMgdG8gIkNoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBpbmZvcm1hdGlvbiBlbGVtZW50IgorICovCitzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dfaWUgeworCXU4IG1vZGU7CisJdTggbmV3X2NoX251bTsKKwl1OCBjb3VudDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKioKKyAqIHN0cnVjdCBpZWVlODAyMTFfdGltCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVmZXJzIHRvICJUcmFmZmljIEluZGljYXRpb24gTWFwIGluZm9ybWF0aW9uIGVsZW1lbnQiCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfdGltX2llIHsKKwl1OCBkdGltX2NvdW50OworCXU4IGR0aW1fcGVyaW9kOworCXU4IGJpdG1hcF9jdHJsOworCS8qIHZhcmlhYmxlIHNpemU6IDEgLSAyNTEgYnl0ZXMgKi8KKwl1OCB2aXJ0dWFsX21hcFsxXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKioKKyAqIHN0cnVjdCBpZWVlODAyMTFfbWVzaGNvbmZfaWUKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZWZlcnMgdG8gIk1lc2ggQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBlbGVtZW50IgorICovCitzdHJ1Y3QgaWVlZTgwMjExX21lc2hjb25mX2llIHsKKwl1OCBtZXNoY29uZl9wc2VsOworCXU4IG1lc2hjb25mX3BtZXRyaWM7CisJdTggbWVzaGNvbmZfY29uZ2VzdDsKKwl1OCBtZXNoY29uZl9zeW5jaDsKKwl1OCBtZXNoY29uZl9hdXRoOworCXU4IG1lc2hjb25mX2Zvcm07CisJdTggbWVzaGNvbmZfY2FwOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKgorICogc3RydWN0IGllZWU4MDIxMV9yYW5uX2llCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVmZXJzIHRvICJSb290IEFubm91bmNlbWVudCBpbmZvcm1hdGlvbiBlbGVtZW50IgorICovCitzdHJ1Y3QgaWVlZTgwMjExX3Jhbm5faWUgeworCXU4IHJhbm5fZmxhZ3M7CisJdTggcmFubl9ob3Bjb3VudDsKKwl1OCByYW5uX3R0bDsKKwl1OCByYW5uX2FkZHJbNl07CisJX19sZTMyIHJhbm5fc2VxOworCV9fbGUzMiByYW5uX2ludGVydmFsOworCV9fbGUzMiByYW5uX21ldHJpYzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIGllZWU4MDIxMV9yYW5uX2ZsYWdzIHsKKwlSQU5OX0ZMQUdfSVNfR0FURSA9IDEgPDwgMCwKK307CisKKyNkZWZpbmUgV0xBTl9TQV9RVUVSWV9UUl9JRF9MRU4gMgorCitzdHJ1Y3QgaWVlZTgwMjExX21nbXQgeworCV9fbGUxNiBmcmFtZV9jb250cm9sOworCV9fbGUxNiBkdXJhdGlvbjsKKwl1OCBkYVs2XTsKKwl1OCBzYVs2XTsKKwl1OCBic3NpZFs2XTsKKwlfX2xlMTYgc2VxX2N0cmw7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19sZTE2IGF1dGhfYWxnOworCQkJX19sZTE2IGF1dGhfdHJhbnNhY3Rpb247CisJCQlfX2xlMTYgc3RhdHVzX2NvZGU7CisJCQkvKiBwb3NzaWJseSBmb2xsb3dlZCBieSBDaGFsbGVuZ2UgdGV4dCAqLworCQkJdTggdmFyaWFibGVbMF07CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF1dGg7CisJCXN0cnVjdCB7CisJCQlfX2xlMTYgcmVhc29uX2NvZGU7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGRlYXV0aDsKKwkJc3RydWN0IHsKKwkJCV9fbGUxNiBjYXBhYl9pbmZvOworCQkJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwkJCS8qIGZvbGxvd2VkIGJ5IFNTSUQgYW5kIFN1cHBvcnRlZCByYXRlcyAqLworCQkJdTggdmFyaWFibGVbMF07CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGFzc29jX3JlcTsKKwkJc3RydWN0IHsKKwkJCV9fbGUxNiBjYXBhYl9pbmZvOworCQkJX19sZTE2IHN0YXR1c19jb2RlOworCQkJX19sZTE2IGFpZDsKKwkJCS8qIGZvbGxvd2VkIGJ5IFN1cHBvcnRlZCByYXRlcyAqLworCQkJdTggdmFyaWFibGVbMF07CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGFzc29jX3Jlc3AsIHJlYXNzb2NfcmVzcDsKKwkJc3RydWN0IHsKKwkJCV9fbGUxNiBjYXBhYl9pbmZvOworCQkJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwkJCXU4IGN1cnJlbnRfYXBbNl07CisJCQkvKiBmb2xsb3dlZCBieSBTU0lEIGFuZCBTdXBwb3J0ZWQgcmF0ZXMgKi8KKwkJCXU4IHZhcmlhYmxlWzBdOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSByZWFzc29jX3JlcTsKKwkJc3RydWN0IHsKKwkJCV9fbGUxNiByZWFzb25fY29kZTsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZGlzYXNzb2M7CisJCXN0cnVjdCB7CisJCQlfX2xlNjQgdGltZXN0YW1wOworCQkJX19sZTE2IGJlYWNvbl9pbnQ7CisJCQlfX2xlMTYgY2FwYWJfaW5mbzsKKwkJCS8qIGZvbGxvd2VkIGJ5IHNvbWUgb2YgU1NJRCwgU3VwcG9ydGVkIHJhdGVzLAorCQkJICogRkggUGFyYW1zLCBEUyBQYXJhbXMsIENGIFBhcmFtcywgSUJTUyBQYXJhbXMsIFRJTSAqLworCQkJdTggdmFyaWFibGVbMF07CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJlYWNvbjsKKwkJc3RydWN0IHsKKwkJCS8qIG9ubHkgdmFyaWFibGUgaXRlbXM6IFNTSUQsIFN1cHBvcnRlZCByYXRlcyAqLworCQkJdTggdmFyaWFibGVbMF07CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHByb2JlX3JlcTsKKwkJc3RydWN0IHsKKwkJCV9fbGU2NCB0aW1lc3RhbXA7CisJCQlfX2xlMTYgYmVhY29uX2ludDsKKwkJCV9fbGUxNiBjYXBhYl9pbmZvOworCQkJLyogZm9sbG93ZWQgYnkgc29tZSBvZiBTU0lELCBTdXBwb3J0ZWQgcmF0ZXMsCisJCQkgKiBGSCBQYXJhbXMsIERTIFBhcmFtcywgQ0YgUGFyYW1zLCBJQlNTIFBhcmFtcyAqLworCQkJdTggdmFyaWFibGVbMF07CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHByb2JlX3Jlc3A7CisJCXN0cnVjdCB7CisJCQl1OCBjYXRlZ29yeTsKKwkJCXVuaW9uIHsKKwkJCQlzdHJ1Y3QgeworCQkJCQl1OCBhY3Rpb25fY29kZTsKKwkJCQkJdTggZGlhbG9nX3Rva2VuOworCQkJCQl1OCBzdGF0dXNfY29kZTsKKwkJCQkJdTggdmFyaWFibGVbMF07CisJCQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd21lX2FjdGlvbjsKKwkJCQlzdHJ1Y3R7CisJCQkJCXU4IGFjdGlvbl9jb2RlOworCQkJCQl1OCBlbGVtZW50X2lkOworCQkJCQl1OCBsZW5ndGg7CisJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSBzd19lbGVtOworCQkJCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgY2hhbl9zd2l0Y2g7CisJCQkJc3RydWN0eworCQkJCQl1OCBhY3Rpb25fY29kZTsKKwkJCQkJdTggZGlhbG9nX3Rva2VuOworCQkJCQl1OCBlbGVtZW50X2lkOworCQkJCQl1OCBsZW5ndGg7CisJCQkJCXN0cnVjdCBpZWVlODAyMTFfbXNybWVudF9pZSBtc3JfZWxlbTsKKwkJCQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG1lYXN1cmVtZW50OworCQkJCXN0cnVjdHsKKwkJCQkJdTggYWN0aW9uX2NvZGU7CisJCQkJCXU4IGRpYWxvZ190b2tlbjsKKwkJCQkJX19sZTE2IGNhcGFiOworCQkJCQlfX2xlMTYgdGltZW91dDsKKwkJCQkJX19sZTE2IHN0YXJ0X3NlcV9udW07CisJCQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhZGRiYV9yZXE7CisJCQkJc3RydWN0eworCQkJCQl1OCBhY3Rpb25fY29kZTsKKwkJCQkJdTggZGlhbG9nX3Rva2VuOworCQkJCQlfX2xlMTYgc3RhdHVzOworCQkJCQlfX2xlMTYgY2FwYWI7CisJCQkJCV9fbGUxNiB0aW1lb3V0OworCQkJCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYWRkYmFfcmVzcDsKKwkJCQlzdHJ1Y3R7CisJCQkJCXU4IGFjdGlvbl9jb2RlOworCQkJCQlfX2xlMTYgcGFyYW1zOworCQkJCQlfX2xlMTYgcmVhc29uX2NvZGU7CisJCQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBkZWxiYTsKKwkJCQlzdHJ1Y3QgeworCQkJCQl1OCBhY3Rpb25fY29kZTsKKwkJCQkJdTggdmFyaWFibGVbMF07CisJCQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzZWxmX3Byb3Q7CisJCQkJc3RydWN0eworCQkJCQl1OCBhY3Rpb25fY29kZTsKKwkJCQkJdTggdmFyaWFibGVbMF07CisJCQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtZXNoX2FjdGlvbjsKKwkJCQlzdHJ1Y3QgeworCQkJCQl1OCBhY3Rpb247CisJCQkJCXU4IHRyYW5zX2lkW1dMQU5fU0FfUVVFUllfVFJfSURfTEVOXTsKKwkJCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBzYV9xdWVyeTsKKwkJCQlzdHJ1Y3QgeworCQkJCQl1OCBhY3Rpb247CisJCQkJCXU4IHNtcHNfY29udHJvbDsKKwkJCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBodF9zbXBzOworCQkJCXN0cnVjdCB7CisJCQkJCXU4IGFjdGlvbl9jb2RlOworCQkJCQl1OCBkaWFsb2dfdG9rZW47CisJCQkJCV9fbGUxNiBjYXBhYmlsaXR5OworCQkJCQl1OCB2YXJpYWJsZVswXTsKKwkJCQl9IF9fcGFja2VkIHRkbHNfZGlzY292ZXJfcmVzcDsKKwkJCX0gdTsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYWN0aW9uOworCX0gdTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBTdXBwb3J0ZWQgUmF0ZXMgdmFsdWUgZW5jb2RpbmdzIGluIDgwMi4xMW4tMjAwOSA3LjMuMi4yICovCisjZGVmaW5lIEJTU19NRU1CRVJTSElQX1NFTEVDVE9SX0hUX1BIWQkxMjcKKworLyogbWdtdCBoZWFkZXIgKyAxIGJ5dGUgY2F0ZWdvcnkgY29kZSAqLworI2RlZmluZSBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5hY3Rpb24udSkKKworCisvKiBNYW5hZ2VtZW50IE1JQyBpbmZvcm1hdGlvbiBlbGVtZW50IChJRUVFIDgwMi4xMXcpICovCitzdHJ1Y3QgaWVlZTgwMjExX21taWUgeworCXU4IGVsZW1lbnRfaWQ7CisJdTggbGVuZ3RoOworCV9fbGUxNiBrZXlfaWQ7CisJdTggc2VxdWVuY2VfbnVtYmVyWzZdOworCXU4IG1pY1s4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX3ZlbmRvcl9pZSB7CisJdTggZWxlbWVudF9pZDsKKwl1OCBsZW47CisJdTggb3VpWzNdOworCXU4IG91aV90eXBlOworfSBfX3BhY2tlZDsKKworLyogQ29udHJvbCBmcmFtZXMgKi8KK3N0cnVjdCBpZWVlODAyMTFfcnRzIHsKKwlfX2xlMTYgZnJhbWVfY29udHJvbDsKKwlfX2xlMTYgZHVyYXRpb247CisJdTggcmFbNl07CisJdTggdGFbNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9jdHMgeworCV9fbGUxNiBmcmFtZV9jb250cm9sOworCV9fbGUxNiBkdXJhdGlvbjsKKwl1OCByYVs2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX3BzcG9sbCB7CisJX19sZTE2IGZyYW1lX2NvbnRyb2w7CisJX19sZTE2IGFpZDsKKwl1OCBic3NpZFs2XTsKKwl1OCB0YVs2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBURExTICovCisKKy8qIExpbmstaWQgaW5mb3JtYXRpb24gZWxlbWVudCAqLworc3RydWN0IGllZWU4MDIxMV90ZGxzX2xua2llIHsKKwl1OCBpZV90eXBlOyAvKiBMaW5rIElkZW50aWZpZXIgSUUgKi8KKwl1OCBpZV9sZW47CisJdTggYnNzaWRbNl07CisJdTggaW5pdF9zdGFbNl07CisJdTggcmVzcF9zdGFbNl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaWVlZTgwMjExX3RkbHNfZGF0YSB7CisJdTggZGFbNl07CisJdTggc2FbNl07CisJX19iZTE2IGV0aGVyX3R5cGU7CisJdTggcGF5bG9hZF90eXBlOworCXU4IGNhdGVnb3J5OworCXU4IGFjdGlvbl9jb2RlOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4IGRpYWxvZ190b2tlbjsKKwkJCV9fbGUxNiBjYXBhYmlsaXR5OworCQkJdTggdmFyaWFibGVbMF07CisJCX0gX19wYWNrZWQgc2V0dXBfcmVxOworCQlzdHJ1Y3QgeworCQkJX19sZTE2IHN0YXR1c19jb2RlOworCQkJdTggZGlhbG9nX3Rva2VuOworCQkJX19sZTE2IGNhcGFiaWxpdHk7CisJCQl1OCB2YXJpYWJsZVswXTsKKwkJfSBfX3BhY2tlZCBzZXR1cF9yZXNwOworCQlzdHJ1Y3QgeworCQkJX19sZTE2IHN0YXR1c19jb2RlOworCQkJdTggZGlhbG9nX3Rva2VuOworCQkJdTggdmFyaWFibGVbMF07CisJCX0gX19wYWNrZWQgc2V0dXBfY2ZtOworCQlzdHJ1Y3QgeworCQkJX19sZTE2IHJlYXNvbl9jb2RlOworCQkJdTggdmFyaWFibGVbMF07CisJCX0gX19wYWNrZWQgdGVhcmRvd247CisJCXN0cnVjdCB7CisJCQl1OCBkaWFsb2dfdG9rZW47CisJCQl1OCB2YXJpYWJsZVswXTsKKwkJfSBfX3BhY2tlZCBkaXNjb3Zlcl9yZXE7CisJfSB1OworfSBfX3BhY2tlZDsKKworLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX2JhciAtIEhUIEJsb2NrIEFjayBSZXF1ZXN0CisgKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVmZXJzIHRvICJIVCBCbG9ja0Fja1JlcSIgYXMKKyAqIGRlc2NyaWJlZCBpbiA4MDIuMTFuIGRyYWZ0IHNlY3Rpb24gNy4yLjEuNy4xCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfYmFyIHsKKwlfX2xlMTYgZnJhbWVfY29udHJvbDsKKwlfX2xlMTYgZHVyYXRpb247CisJX191OCByYVs2XTsKKwlfX3U4IHRhWzZdOworCV9fbGUxNiBjb250cm9sOworCV9fbGUxNiBzdGFydF9zZXFfbnVtOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBfX2FsaWduZWQoNCk7CisKKy8qIDgwMi4xMSBCQShSKSBjb250cm9sIG1hc2tzICovCisjZGVmaW5lIElFRUU4MDIxMV9CQVJfQ1RSTF9BQ0tfUE9MSUNZX05PUk1BTAkweDAwMDAKKyNkZWZpbmUgSUVFRTgwMjExX0JBUl9DVFJMX01VTFRJX1RJRAkJMHgwMDAyCisjZGVmaW5lIElFRUU4MDIxMV9CQVJfQ1RSTF9DQk1USURfQ09NUFJFU1NFRF9CQQkweDAwMDQKKyNkZWZpbmUgSUVFRTgwMjExX0JBUl9DVFJMX1RJRF9JTkZPX01BU0sJMHhmMDAwCisjZGVmaW5lIElFRUU4MDIxMV9CQVJfQ1RSTF9USURfSU5GT19TSElGVAkxMgorCisvKioKKyAqIHN0cnVjdCBpZWVlODAyMTFfYmEgLSBIVCBCbG9jayBBY2sKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZWZlcnMgdG8gIkhUIEJsb2NrQWNrIiBhcworICogZGVzY3JpYmVkIGluIDgwMi4xMW4gZHJhZnQgc2VjdGlvbiA3LjIuMS44LjEKKyAqLworc3RydWN0IGllZWU4MDIxMV9iYSB7CisJX19sZTE2IGZyYW1lX2NvbnRyb2w7CisJX19sZTE2IGR1cmF0aW9uOworCXU4IHJhWzZdOworCXU4IHRhWzZdOworCV9fbGUxNiBjb250cm9sOworCisJX19sZTE2IHN0YXJ0X3NlcV9udW07CisJdTggYml0bWFwWzhdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBJRUVFODAyMTFfSFRfTUNTX01BU0tfTEVOCQkxMAorCisvKioKKyAqIHN0cnVjdCBpZWVlODAyMTFfbWNzX2luZm8gLSBNQ1MgaW5mb3JtYXRpb24KKyAqIEByeF9tYXNrOiBSWCBtYXNrCisgKiBAcnhfaGlnaGVzdDogaGlnaGVzdCBzdXBwb3J0ZWQgUlggcmF0ZS4gSWYgc2V0IHJlcHJlc2VudHMKKyAqCXRoZSBoaWdoZXN0IHN1cHBvcnRlZCBSWCBkYXRhIHJhdGUgaW4gdW5pdHMgb2YgMSBNYnBzLgorICoJSWYgdGhpcyBmaWVsZCBpcyAwIHRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSB1c2VkIHRvCisgKgljb25zaWRlciB0aGUgaGlnaGVzdCBSWCBkYXRhIHJhdGUgc3VwcG9ydGVkLgorICogQHR4X3BhcmFtczogVFggcGFyYW1ldGVycworICovCitzdHJ1Y3QgaWVlZTgwMjExX21jc19pbmZvIHsKKwl1OCByeF9tYXNrW0lFRUU4MDIxMV9IVF9NQ1NfTUFTS19MRU5dOworCV9fbGUxNiByeF9oaWdoZXN0OworCXU4IHR4X3BhcmFtczsKKwl1OCByZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIDgwMi4xMW4gSFQgY2FwYWJpbGl0eSBNU0Mgc2V0ICovCisjZGVmaW5lIElFRUU4MDIxMV9IVF9NQ1NfUlhfSElHSEVTVF9NQVNLCTB4M2ZmCisjZGVmaW5lIElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRAkJMHgwMQorI2RlZmluZSBJRUVFODAyMTFfSFRfTUNTX1RYX1JYX0RJRkYJCTB4MDIKKy8qIHZhbHVlIDAgPT0gMSBzdHJlYW0gZXRjICovCisjZGVmaW5lIElFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfTUFTSwkweDBDCisjZGVmaW5lIElFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfU0hJRlQJMgorI2RlZmluZQkJSUVFRTgwMjExX0hUX01DU19UWF9NQVhfU1RSRUFNUwk0CisjZGVmaW5lIElFRUU4MDIxMV9IVF9NQ1NfVFhfVU5FUVVBTF9NT0RVTEFUSU9OCTB4MTAKKworLyoKKyAqIDgwMi4xMW4gRDUuMCAyMC4zLjUgLyAyMC42IHNheXM6CisgKiAtIGluZGljZXMgMCB0byA3IGFuZCAzMiBhcmUgc2luZ2xlIHNwYXRpYWwgc3RyZWFtCisgKiAtIDggdG8gMzEgYXJlIG11bHRpcGxlIHNwYXRpYWwgc3RyZWFtcyB1c2luZyBlcXVhbCBtb2R1bGF0aW9uCisgKiAgIFs4Li4xNSBmb3IgdHdvIHN0cmVhbXMsIDE2Li4yMyBmb3IgdGhyZWUgYW5kIDI0Li4zMSBmb3IgZm91cl0KKyAqIC0gcmVtYWluZGVyIGFyZSBtdWx0aXBsZSBzcGF0aWFsIHN0cmVhbXMgdXNpbmcgdW5lcXVhbCBtb2R1bGF0aW9uCisgKi8KKyNkZWZpbmUgSUVFRTgwMjExX0hUX01DU19VTkVRVUFMX01PRFVMQVRJT05fU1RBUlQgMzMKKyNkZWZpbmUgSUVFRTgwMjExX0hUX01DU19VTkVRVUFMX01PRFVMQVRJT05fU1RBUlRfQllURSBcCisJKElFRUU4MDIxMV9IVF9NQ1NfVU5FUVVBTF9NT0RVTEFUSU9OX1NUQVJUIC8gOCkKKworLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAtIEhUIGNhcGFiaWxpdGllcworICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHRoZSAiSFQgY2FwYWJpbGl0aWVzIGVsZW1lbnQiIGFzCisgKiBkZXNjcmliZWQgaW4gODAyLjExbiBENS4wIDcuMy4yLjU3CisgKi8KK3N0cnVjdCBpZWVlODAyMTFfaHRfY2FwIHsKKwlfX2xlMTYgY2FwX2luZm87CisJdTggYW1wZHVfcGFyYW1zX2luZm87CisKKwkvKiAxNiBieXRlcyBNQ1MgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX21jc19pbmZvIG1jczsKKworCV9fbGUxNiBleHRlbmRlZF9odF9jYXBfaW5mbzsKKwlfX2xlMzIgdHhfQkZfY2FwX2luZm87CisJdTggYW50ZW5uYV9zZWxlY3Rpb25faW5mbzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiA4MDIuMTFuIEhUIGNhcGFiaWxpdGllcyBtYXNrcyAoZm9yIGNhcF9pbmZvKSAqLworI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX0xEUENfQ09ESU5HCQkweDAwMDEKKyNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAJMHgwMDAyCisjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfU01fUFMJCQkweDAwMEMKKyNkZWZpbmUJCUlFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQJMgorI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQJCTB4MDAxMAorI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMAkJCTB4MDAyMAorI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MAkJCTB4MDA0MAorI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1RYX1NUQkMJCTB4MDA4MAorI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkMJCTB4MDMwMAorI2RlZmluZQkJSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDX1NISUZUCTgKKyNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9ERUxBWV9CQQkJMHgwNDAwCisjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVCQkweDA4MDAKKyNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDAJCTB4MTAwMAorI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1JFU0VSVkVECQkweDIwMDAKKyNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF80ME1IWl9JTlRPTEVSQU5UCTB4NDAwMAorI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX0xTSUdfVFhPUF9QUk9UCQkweDgwMDAKKworLyogODAyLjExbiBIVCBleHRlbmRlZCBjYXBhYmlsaXRpZXMgbWFza3MgKGZvciBleHRlbmRlZF9odF9jYXBfaW5mbykgKi8KKyNkZWZpbmUgSUVFRTgwMjExX0hUX0VYVF9DQVBfUENPCQkweDAwMDEKKyNkZWZpbmUgSUVFRTgwMjExX0hUX0VYVF9DQVBfUENPX1RJTUUJCTB4MDAwNgorI2RlZmluZQkJSUVFRTgwMjExX0hUX0VYVF9DQVBfUENPX1RJTUVfU0hJRlQJMQorI2RlZmluZSBJRUVFODAyMTFfSFRfRVhUX0NBUF9NQ1NfRkIJCTB4MDMwMAorI2RlZmluZQkJSUVFRTgwMjExX0hUX0VYVF9DQVBfTUNTX0ZCX1NISUZUCTgKKyNkZWZpbmUgSUVFRTgwMjExX0hUX0VYVF9DQVBfSFRDX1NVUAkJMHgwNDAwCisjZGVmaW5lIElFRUU4MDIxMV9IVF9FWFRfQ0FQX1JEX1JFU1BPTkRFUgkweDA4MDAKKworLyogODAyLjExbiBIVCBjYXBhYmlsaXR5IEFNUERVIHNldHRpbmdzIChmb3IgYW1wZHVfcGFyYW1zX2luZm8pICovCisjZGVmaW5lIElFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0ZBQ1RPUgkJMHgwMworI2RlZmluZSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZCQkweDFDCisjZGVmaW5lCQlJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZX1NISUZUCTIKKworLyoKKyAqIE1heGltdW0gbGVuZ3RoIG9mIEFNUERVIHRoYXQgdGhlIFNUQSBjYW4gcmVjZWl2ZS4KKyAqIExlbmd0aCA9IDIgXiAoMTMgKyBtYXhfYW1wZHVfbGVuZ3RoX2V4cCkgLSAxIChvY3RldHMpCisgKi8KK2VudW0gaWVlZTgwMjExX21heF9hbXBkdV9sZW5ndGhfZXhwIHsKKwlJRUVFODAyMTFfSFRfTUFYX0FNUERVXzhLID0gMCwKKwlJRUVFODAyMTFfSFRfTUFYX0FNUERVXzE2SyA9IDEsCisJSUVFRTgwMjExX0hUX01BWF9BTVBEVV8zMksgPSAyLAorCUlFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLID0gMworfTsKKworI2RlZmluZSBJRUVFODAyMTFfSFRfTUFYX0FNUERVX0ZBQ1RPUiAxMworCisvKiBNaW5pbXVtIE1QRFUgc3RhcnQgc3BhY2luZyAqLworZW51bSBpZWVlODAyMTFfbWluX21wZHVfc3BhY2luZyB7CisJSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV9OT05FID0gMCwJLyogTm8gcmVzdHJpY3Rpb24gKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzBfMjUgPSAxLAkvKiAxLzQgdXNlYyAqLworCUlFRUU4MDIxMV9IVF9NUERVX0RFTlNJVFlfMF81ID0gMiwJLyogMS8yIHVzZWMgKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzEgPSAzLAkvKiAxIHVzZWMgKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzIgPSA0LAkvKiAyIHVzZWMgKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzQgPSA1LAkvKiA0IHVzZWMgKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzggPSA2LAkvKiA4IHVzZWMgKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzE2ID0gNwkvKiAxNiB1c2VjICovCit9OworCisvKioKKyAqIHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uIC0gSFQgb3BlcmF0aW9uIElFCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdGhlICJIVCBvcGVyYXRpb24gZWxlbWVudCIgYXMKKyAqIGRlc2NyaWJlZCBpbiA4MDIuMTFuLTIwMDkgNy4zLjIuNTcKKyAqLworc3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24geworCXU4IHByaW1hcnlfY2hhbjsKKwl1OCBodF9wYXJhbTsKKwlfX2xlMTYgb3BlcmF0aW9uX21vZGU7CisJX19sZTE2IHN0YmNfcGFyYW07CisJdTggYmFzaWNfc2V0WzE2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBmb3IgaHRfcGFyYW0gKi8KKyNkZWZpbmUgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfT0ZGU0VUCQkweDAzCisjZGVmaW5lCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19OT05FCQkweDAwCisjZGVmaW5lCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRQkweDAxCisjZGVmaW5lCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19CRUxPVwkweDAzCisjZGVmaW5lIElFRUU4MDIxMV9IVF9QQVJBTV9DSEFOX1dJRFRIX0FOWQkJMHgwNAorI2RlZmluZSBJRUVFODAyMTFfSFRfUEFSQU1fUklGU19NT0RFCQkJMHgwOAorCisvKiBmb3Igb3BlcmF0aW9uX21vZGUgKi8KKyNkZWZpbmUgSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTgkJCTB4MDAwMworI2RlZmluZQkJSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTl9OT05FCQkwCisjZGVmaW5lCQlJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OX05PTk1FTUJFUgkxCisjZGVmaW5lCQlJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OXzIwTUhaCQkyCisjZGVmaW5lCQlJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OX05PTkhUX01JWEVECTMKKyNkZWZpbmUgSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVAkJMHgwMDA0CisjZGVmaW5lIElFRUU4MDIxMV9IVF9PUF9NT0RFX05PTl9IVF9TVEFfUFJTTlQJCTB4MDAxMAorCisvKiBmb3Igc3RiY19wYXJhbSAqLworI2RlZmluZSBJRUVFODAyMTFfSFRfU1RCQ19QQVJBTV9EVUFMX0JFQUNPTgkJMHgwMDQwCisjZGVmaW5lIElFRUU4MDIxMV9IVF9TVEJDX1BBUkFNX0RVQUxfQ1RTX1BST1QJCTB4MDA4MAorI2RlZmluZSBJRUVFODAyMTFfSFRfU1RCQ19QQVJBTV9TVEJDX0JFQUNPTgkJMHgwMTAwCisjZGVmaW5lIElFRUU4MDIxMV9IVF9TVEJDX1BBUkFNX0xTSUdfVFhPUF9GVUxMUFJPVAkweDAyMDAKKyNkZWZpbmUgSUVFRTgwMjExX0hUX1NUQkNfUEFSQU1fUENPX0FDVElWRQkJMHgwNDAwCisjZGVmaW5lIElFRUU4MDIxMV9IVF9TVEJDX1BBUkFNX1BDT19QSEFTRQkJMHgwODAwCisKKworLyogYmxvY2stYWNrIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgSUVFRTgwMjExX0FEREJBX1BBUkFNX1BPTElDWV9NQVNLIDB4MDAwMgorI2RlZmluZSBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0sgMHgwMDNDCisjZGVmaW5lIElFRUU4MDIxMV9BRERCQV9QQVJBTV9CVUZfU0laRV9NQVNLIDB4RkZDMAorI2RlZmluZSBJRUVFODAyMTFfREVMQkFfUEFSQU1fVElEX01BU0sgMHhGMDAwCisjZGVmaW5lIElFRUU4MDIxMV9ERUxCQV9QQVJBTV9JTklUSUFUT1JfTUFTSyAweDA4MDAKKworLyoKKyAqIEEtUE1EVSBidWZmZXIgc2l6ZXMKKyAqIEFjY29yZGluZyB0byBJRUVFODAyLjExbiBzcGVjIHNpemUgdmFyaWVzIGZyb20gOEsgdG8gNjRLIChpbiBwb3dlcnMgb2YgMikKKyAqLworI2RlZmluZSBJRUVFODAyMTFfTUlOX0FNUERVX0JVRiAweDgKKyNkZWZpbmUgSUVFRTgwMjExX01BWF9BTVBEVV9CVUYgMHg0MAorCisKKy8qIFNwYXRpYWwgTXVsdGlwbGV4aW5nIFBvd2VyIFNhdmUgTW9kZXMgKGZvciBjYXBhYmlsaXR5KSAqLworI2RlZmluZSBXTEFOX0hUX0NBUF9TTV9QU19TVEFUSUMJMAorI2RlZmluZSBXTEFOX0hUX0NBUF9TTV9QU19EWU5BTUlDCTEKKyNkZWZpbmUgV0xBTl9IVF9DQVBfU01fUFNfSU5WQUxJRAkyCisjZGVmaW5lIFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVECTMKKworLyogZm9yIFNNIHBvd2VyIGNvbnRyb2wgZmllbGQgbG93ZXIgdHdvIGJpdHMgKi8KKyNkZWZpbmUgV0xBTl9IVF9TTVBTX0NPTlRST0xfRElTQUJMRUQJMAorI2RlZmluZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9TVEFUSUMJMQorI2RlZmluZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9EWU5BTUlDCTMKKworLyogQXV0aGVudGljYXRpb24gYWxnb3JpdGhtcyAqLworI2RlZmluZSBXTEFOX0FVVEhfT1BFTiAwCisjZGVmaW5lIFdMQU5fQVVUSF9TSEFSRURfS0VZIDEKKyNkZWZpbmUgV0xBTl9BVVRIX0ZUIDIKKyNkZWZpbmUgV0xBTl9BVVRIX1NBRSAzCisjZGVmaW5lIFdMQU5fQVVUSF9MRUFQIDEyOAorCisjZGVmaW5lIFdMQU5fQVVUSF9DSEFMTEVOR0VfTEVOIDEyOAorCisjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9FU1MJCSgxPDwwKQorI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfSUJTUwkJKDE8PDEpCisKKy8qCisgKiBBIG1lc2ggU1RBIHNldHMgdGhlIEVTUyBhbmQgSUJTUyBjYXBhYmlsaXR5IGJpdHMgdG8gemVyby4KKyAqIGhvd2V2ZXIsIHRoaXMgaG9sZHMgdHJ1ZSBmb3IgcDJwIHByb2JlIHJlc3BvbnNlcyAoaW4gdGhlIHAycF9maW5kCisgKiBwaGFzZSkgYXMgd2VsbC4KKyAqLworI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfSVNfU1RBX0JTUyhjYXApCVwKKwkoISgoY2FwKSAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSkKKworI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfQ0ZfUE9MTEFCTEUJKDE8PDIpCisjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9DRl9QT0xMX1JFUVVFU1QJKDE8PDMpCisjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZCQkoMTw8NCkKKyNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFCSgxPDw1KQorI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfUEJDQwkJKDE8PDYpCisjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9DSEFOTkVMX0FHSUxJVFkJKDE8PDcpCisKKy8qIDgwMi4xMWggKi8KKyNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQJKDE8PDgpCisjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9RT1MJCSgxPDw5KQorI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FCSgxPDwxMCkKKyNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0RTU1NfT0ZETQkoMTw8MTMpCisvKiBtZWFzdXJlbWVudCAqLworI2RlZmluZSBJRUVFODAyMTFfU1BDVF9NU1JfUlBSVF9NT0RFX0xBVEUJKDE8PDApCisjZGVmaW5lIElFRUU4MDIxMV9TUENUX01TUl9SUFJUX01PREVfSU5DQVBBQkxFCSgxPDwxKQorI2RlZmluZSBJRUVFODAyMTFfU1BDVF9NU1JfUlBSVF9NT0RFX1JFRlVTRUQJKDE8PDIpCisKKyNkZWZpbmUgSUVFRTgwMjExX1NQQ1RfTVNSX1JQUlRfVFlQRV9CQVNJQwkwCisjZGVmaW5lIElFRUU4MDIxMV9TUENUX01TUl9SUFJUX1RZUEVfQ0NBCTEKKyNkZWZpbmUgSUVFRTgwMjExX1NQQ1RfTVNSX1JQUlRfVFlQRV9SUEkJMgorCisKKy8qIDgwMi4xMWcgRVJQIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KKyNkZWZpbmUgV0xBTl9FUlBfTk9OX0VSUF9QUkVTRU5UICgxPDwwKQorI2RlZmluZSBXTEFOX0VSUF9VU0VfUFJPVEVDVElPTiAoMTw8MSkKKyNkZWZpbmUgV0xBTl9FUlBfQkFSS0VSX1BSRUFNQkxFICgxPDwyKQorCisvKiBXTEFOX0VSUF9CQVJLRVJfUFJFQU1CTEUgdmFsdWVzICovCitlbnVtIHsKKwlXTEFOX0VSUF9QUkVBTUJMRV9TSE9SVCA9IDAsCisJV0xBTl9FUlBfUFJFQU1CTEVfTE9ORyA9IDEsCit9OworCisvKiBTdGF0dXMgY29kZXMgKi8KK2VudW0gaWVlZTgwMjExX3N0YXR1c2NvZGUgeworCVdMQU5fU1RBVFVTX1NVQ0NFU1MgPSAwLAorCVdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUgPSAxLAorCVdMQU5fU1RBVFVTX0NBUFNfVU5TVVBQT1JURUQgPSAxMCwKKwlXTEFOX1NUQVRVU19SRUFTU09DX05PX0FTU09DID0gMTEsCisJV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX1VOU1BFQyA9IDEyLAorCVdMQU5fU1RBVFVTX05PVF9TVVBQT1JURURfQVVUSF9BTEcgPSAxMywKKwlXTEFOX1NUQVRVU19VTktOT1dOX0FVVEhfVFJBTlNBQ1RJT04gPSAxNCwKKwlXTEFOX1NUQVRVU19DSEFMTEVOR0VfRkFJTCA9IDE1LAorCVdMQU5fU1RBVFVTX0FVVEhfVElNRU9VVCA9IDE2LAorCVdMQU5fU1RBVFVTX0FQX1VOQUJMRV9UT19IQU5ETEVfTkVXX1NUQSA9IDE3LAorCVdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9SQVRFUyA9IDE4LAorCS8qIDgwMi4xMWIgKi8KKwlXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfTk9TSE9SVFBSRUFNQkxFID0gMTksCisJV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PUEJDQyA9IDIwLAorCVdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9OT0FHSUxJVFkgPSAyMSwKKwkvKiA4MDIuMTFoICovCisJV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PU1BFQ1RSVU0gPSAyMiwKKwlXTEFOX1NUQVRVU19BU1NPQ19SRUpFQ1RFRF9CQURfUE9XRVIgPSAyMywKKwlXTEFOX1NUQVRVU19BU1NPQ19SRUpFQ1RFRF9CQURfU1VQUF9DSEFOID0gMjQsCisJLyogODAyLjExZyAqLworCVdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9OT1NIT1JUVElNRSA9IDI1LAorCVdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9OT0RTU1NPRkRNID0gMjYsCisJLyogODAyLjExdyAqLworCVdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX1RFTVBPUkFSSUxZID0gMzAsCisJV0xBTl9TVEFUVVNfUk9CVVNUX01HTVRfRlJBTUVfUE9MSUNZX1ZJT0xBVElPTiA9IDMxLAorCS8qIDgwMi4xMWkgKi8KKwlXTEFOX1NUQVRVU19JTlZBTElEX0lFID0gNDAsCisJV0xBTl9TVEFUVVNfSU5WQUxJRF9HUk9VUF9DSVBIRVIgPSA0MSwKKwlXTEFOX1NUQVRVU19JTlZBTElEX1BBSVJXSVNFX0NJUEhFUiA9IDQyLAorCVdMQU5fU1RBVFVTX0lOVkFMSURfQUtNUCA9IDQzLAorCVdMQU5fU1RBVFVTX1VOU1VQUF9SU05fVkVSU0lPTiA9IDQ0LAorCVdMQU5fU1RBVFVTX0lOVkFMSURfUlNOX0lFX0NBUCA9IDQ1LAorCVdMQU5fU1RBVFVTX0NJUEhFUl9TVUlURV9SRUpFQ1RFRCA9IDQ2LAorCS8qIDgwMi4xMWUgKi8KKwlXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9RT1MgPSAzMiwKKwlXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfTk9CQU5EV0lEVEggPSAzMywKKwlXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfTE9XQUNLID0gMzQsCisJV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX1VOU1VQUF9RT1MgPSAzNSwKKwlXTEFOX1NUQVRVU19SRVFVRVNUX0RFQ0xJTkVEID0gMzcsCisJV0xBTl9TVEFUVVNfSU5WQUxJRF9RT1NfUEFSQU0gPSAzOCwKKwlXTEFOX1NUQVRVU19DSEFOR0VfVFNQRUMgPSAzOSwKKwlXTEFOX1NUQVRVU19XQUlUX1RTX0RFTEFZID0gNDcsCisJV0xBTl9TVEFUVVNfTk9fRElSRUNUX0xJTksgPSA0OCwKKwlXTEFOX1NUQVRVU19TVEFfTk9UX1BSRVNFTlQgPSA0OSwKKwlXTEFOX1NUQVRVU19TVEFfTk9UX1FTVEEgPSA1MCwKKwkvKiA4MDIuMTFzICovCisJV0xBTl9TVEFUVVNfQU5USV9DTE9HX1JFUVVJUkVEID0gNzYsCisJV0xBTl9TVEFUVVNfRkNHX05PVF9TVVBQID0gNzgsCisJV0xBTl9TVEFUVVNfU1RBX05PX1RCVFQgPSA3OCwKK307CisKKworLyogUmVhc29uIGNvZGVzICovCitlbnVtIGllZWU4MDIxMV9yZWFzb25jb2RlIHsKKwlXTEFOX1JFQVNPTl9VTlNQRUNJRklFRCA9IDEsCisJV0xBTl9SRUFTT05fUFJFVl9BVVRIX05PVF9WQUxJRCA9IDIsCisJV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcgPSAzLAorCVdMQU5fUkVBU09OX0RJU0FTU09DX0RVRV9UT19JTkFDVElWSVRZID0gNCwKKwlXTEFOX1JFQVNPTl9ESVNBU1NPQ19BUF9CVVNZID0gNSwKKwlXTEFOX1JFQVNPTl9DTEFTUzJfRlJBTUVfRlJPTV9OT05BVVRIX1NUQSA9IDYsCisJV0xBTl9SRUFTT05fQ0xBU1MzX0ZSQU1FX0ZST01fTk9OQVNTT0NfU1RBID0gNywKKwlXTEFOX1JFQVNPTl9ESVNBU1NPQ19TVEFfSEFTX0xFRlQgPSA4LAorCVdMQU5fUkVBU09OX1NUQV9SRVFfQVNTT0NfV0lUSE9VVF9BVVRIID0gOSwKKwkvKiA4MDIuMTFoICovCisJV0xBTl9SRUFTT05fRElTQVNTT0NfQkFEX1BPV0VSID0gMTAsCisJV0xBTl9SRUFTT05fRElTQVNTT0NfQkFEX1NVUFBfQ0hBTiA9IDExLAorCS8qIDgwMi4xMWkgKi8KKwlXTEFOX1JFQVNPTl9JTlZBTElEX0lFID0gMTMsCisJV0xBTl9SRUFTT05fTUlDX0ZBSUxVUkUgPSAxNCwKKwlXTEFOX1JFQVNPTl80V0FZX0hBTkRTSEFLRV9USU1FT1VUID0gMTUsCisJV0xBTl9SRUFTT05fR1JPVVBfS0VZX0hBTkRTSEFLRV9USU1FT1VUID0gMTYsCisJV0xBTl9SRUFTT05fSUVfRElGRkVSRU5UID0gMTcsCisJV0xBTl9SRUFTT05fSU5WQUxJRF9HUk9VUF9DSVBIRVIgPSAxOCwKKwlXTEFOX1JFQVNPTl9JTlZBTElEX1BBSVJXSVNFX0NJUEhFUiA9IDE5LAorCVdMQU5fUkVBU09OX0lOVkFMSURfQUtNUCA9IDIwLAorCVdMQU5fUkVBU09OX1VOU1VQUF9SU05fVkVSU0lPTiA9IDIxLAorCVdMQU5fUkVBU09OX0lOVkFMSURfUlNOX0lFX0NBUCA9IDIyLAorCVdMQU5fUkVBU09OX0lFRUU4MDIxWF9GQUlMRUQgPSAyMywKKwlXTEFOX1JFQVNPTl9DSVBIRVJfU1VJVEVfUkVKRUNURUQgPSAyNCwKKwkvKiA4MDIuMTFlICovCisJV0xBTl9SRUFTT05fRElTQVNTT0NfVU5TUEVDSUZJRURfUU9TID0gMzIsCisJV0xBTl9SRUFTT05fRElTQVNTT0NfUUFQX05PX0JBTkRXSURUSCA9IDMzLAorCVdMQU5fUkVBU09OX0RJU0FTU09DX0xPV19BQ0sgPSAzNCwKKwlXTEFOX1JFQVNPTl9ESVNBU1NPQ19RQVBfRVhDRUVEX1RYT1AgPSAzNSwKKwlXTEFOX1JFQVNPTl9RU1RBX0xFQVZFX1FCU1MgPSAzNiwKKwlXTEFOX1JFQVNPTl9RU1RBX05PVF9VU0UgPSAzNywKKwlXTEFOX1JFQVNPTl9RU1RBX1JFUVVJUkVfU0VUVVAgPSAzOCwKKwlXTEFOX1JFQVNPTl9RU1RBX1RJTUVPVVQgPSAzOSwKKwlXTEFOX1JFQVNPTl9RU1RBX0NJUEhFUl9OT1RfU1VQUCA9IDQ1LAorCS8qIDgwMi4xMXMgKi8KKwlXTEFOX1JFQVNPTl9NRVNIX1BFRVJfQ0FOQ0VMRUQgPSA1MiwKKwlXTEFOX1JFQVNPTl9NRVNIX01BWF9QRUVSUyA9IDUzLAorCVdMQU5fUkVBU09OX01FU0hfQ09ORklHID0gNTQsCisJV0xBTl9SRUFTT05fTUVTSF9DTE9TRSA9IDU1LAorCVdMQU5fUkVBU09OX01FU0hfTUFYX1JFVFJJRVMgPSA1NiwKKwlXTEFOX1JFQVNPTl9NRVNIX0NPTkZJUk1fVElNRU9VVCA9IDU3LAorCVdMQU5fUkVBU09OX01FU0hfSU5WQUxJRF9HVEsgPSA1OCwKKwlXTEFOX1JFQVNPTl9NRVNIX0lOQ09OU0lTVEVOVF9QQVJBTSA9IDU5LAorCVdMQU5fUkVBU09OX01FU0hfSU5WQUxJRF9TRUNVUklUWSA9IDYwLAorCVdMQU5fUkVBU09OX01FU0hfUEFUSF9FUlJPUiA9IDYxLAorCVdMQU5fUkVBU09OX01FU0hfUEFUSF9OT0ZPUldBUkQgPSA2MiwKKwlXTEFOX1JFQVNPTl9NRVNIX1BBVEhfREVTVF9VTlJFQUNIQUJMRSA9IDYzLAorCVdMQU5fUkVBU09OX01BQ19FWElTVFNfSU5fTUJTUyA9IDY0LAorCVdMQU5fUkVBU09OX01FU0hfQ0hBTl9SRUdVTEFUT1JZID0gNjUsCisJV0xBTl9SRUFTT05fTUVTSF9DSEFOID0gNjYsCit9OworCisKKy8qIEluZm9ybWF0aW9uIEVsZW1lbnQgSURzICovCitlbnVtIGllZWU4MDIxMV9laWQgeworCVdMQU5fRUlEX1NTSUQgPSAwLAorCVdMQU5fRUlEX1NVUFBfUkFURVMgPSAxLAorCVdMQU5fRUlEX0ZIX1BBUkFNUyA9IDIsCisJV0xBTl9FSURfRFNfUEFSQU1TID0gMywKKwlXTEFOX0VJRF9DRl9QQVJBTVMgPSA0LAorCVdMQU5fRUlEX1RJTSA9IDUsCisJV0xBTl9FSURfSUJTU19QQVJBTVMgPSA2LAorCVdMQU5fRUlEX0NIQUxMRU5HRSA9IDE2LAorCisJV0xBTl9FSURfQ09VTlRSWSA9IDcsCisJV0xBTl9FSURfSFBfUEFSQU1TID0gOCwKKwlXTEFOX0VJRF9IUF9UQUJMRSA9IDksCisJV0xBTl9FSURfUkVRVUVTVCA9IDEwLAorCisJV0xBTl9FSURfUUJTU19MT0FEID0gMTEsCisJV0xBTl9FSURfRURDQV9QQVJBTV9TRVQgPSAxMiwKKwlXTEFOX0VJRF9UU1BFQyA9IDEzLAorCVdMQU5fRUlEX1RDTEFTID0gMTQsCisJV0xBTl9FSURfU0NIRURVTEUgPSAxNSwKKwlXTEFOX0VJRF9UU19ERUxBWSA9IDQzLAorCVdMQU5fRUlEX1RDTEFTX1BST0NFU1NJTkcgPSA0NCwKKwlXTEFOX0VJRF9RT1NfQ0FQQSA9IDQ2LAorCS8qIDgwMi4xMXogKi8KKwlXTEFOX0VJRF9MSU5LX0lEID0gMTAxLAorCS8qIDgwMi4xMXMgKi8KKwlXTEFOX0VJRF9NRVNIX0NPTkZJRyA9IDExMywKKwlXTEFOX0VJRF9NRVNIX0lEID0gMTE0LAorCVdMQU5fRUlEX0xJTktfTUVUUklDX1JFUE9SVCA9IDExNSwKKwlXTEFOX0VJRF9DT05HRVNUSU9OX05PVElGSUNBVElPTiA9IDExNiwKKwlXTEFOX0VJRF9QRUVSX01HTVQgPSAxMTcsCisJV0xBTl9FSURfQ0hBTl9TV0lUQ0hfUEFSQU0gPSAxMTgsCisJV0xBTl9FSURfTUVTSF9BV0FLRV9XSU5ET1cgPSAxMTksCisJV0xBTl9FSURfQkVBQ09OX1RJTUlORyA9IDEyMCwKKwlXTEFOX0VJRF9NQ0NBT1BfU0VUVVBfUkVRID0gMTIxLAorCVdMQU5fRUlEX01DQ0FPUF9TRVRVUF9SRVNQID0gMTIyLAorCVdMQU5fRUlEX01DQ0FPUF9BRFZFUlQgPSAxMjMsCisJV0xBTl9FSURfTUNDQU9QX1RFQVJET1dOID0gMTI0LAorCVdMQU5fRUlEX0dBTk4gPSAxMjUsCisJV0xBTl9FSURfUkFOTiA9IDEyNiwKKwlXTEFOX0VJRF9QUkVRID0gMTMwLAorCVdMQU5fRUlEX1BSRVAgPSAxMzEsCisJV0xBTl9FSURfUEVSUiA9IDEzMiwKKwlXTEFOX0VJRF9QWFUgPSAxMzcsCisJV0xBTl9FSURfUFhVQyA9IDEzOCwKKwlXTEFOX0VJRF9BVVRIX01FU0hfUEVFUl9FWENIID0gMTM5LAorCVdMQU5fRUlEX01JQyA9IDE0MCwKKworCVdMQU5fRUlEX1BXUl9DT05TVFJBSU5UID0gMzIsCisJV0xBTl9FSURfUFdSX0NBUEFCSUxJVFkgPSAzMywKKwlXTEFOX0VJRF9UUENfUkVRVUVTVCA9IDM0LAorCVdMQU5fRUlEX1RQQ19SRVBPUlQgPSAzNSwKKwlXTEFOX0VJRF9TVVBQT1JURURfQ0hBTk5FTFMgPSAzNiwKKwlXTEFOX0VJRF9DSEFOTkVMX1NXSVRDSCA9IDM3LAorCVdMQU5fRUlEX01FQVNVUkVfUkVRVUVTVCA9IDM4LAorCVdMQU5fRUlEX01FQVNVUkVfUkVQT1JUID0gMzksCisJV0xBTl9FSURfUVVJRVQgPSA0MCwKKwlXTEFOX0VJRF9JQlNTX0RGUyA9IDQxLAorCisJV0xBTl9FSURfRVJQX0lORk8gPSA0MiwKKwlXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUyA9IDUwLAorCisJV0xBTl9FSURfSFRfQ0FQQUJJTElUWSA9IDQ1LAorCVdMQU5fRUlEX0hUX09QRVJBVElPTiA9IDYxLAorCisJV0xBTl9FSURfUlNOID0gNDgsCisJV0xBTl9FSURfTU1JRSA9IDc2LAorCVdMQU5fRUlEX1dQQSA9IDIyMSwKKwlXTEFOX0VJRF9HRU5FUklDID0gMjIxLAorCVdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQyA9IDIyMSwKKwlXTEFOX0VJRF9RT1NfUEFSQU1FVEVSID0gMjIyLAorCisJV0xBTl9FSURfQVBfQ0hBTl9SRVBPUlQgPSA1MSwKKwlXTEFOX0VJRF9ORUlHSEJPUl9SRVBPUlQgPSA1MiwKKwlXTEFOX0VJRF9SQ1BJID0gNTMsCisJV0xBTl9FSURfQlNTX0FWR19BQ0NFU1NfREVMQVkgPSA2MywKKwlXTEFOX0VJRF9BTlRFTk5BX0lORk8gPSA2NCwKKwlXTEFOX0VJRF9SU05JID0gNjUsCisJV0xBTl9FSURfTUVBU1VSRU1FTlRfUElMT1RfVFhfSU5GTyA9IDY2LAorCVdMQU5fRUlEX0JTU19BVkFJTEFCTEVfQ0FQQUNJVFkgPSA2NywKKwlXTEFOX0VJRF9CU1NfQUNfQUNDRVNTX0RFTEFZID0gNjgsCisJV0xBTl9FSURfUlJNX0VOQUJMRURfQ0FQQUJJTElUSUVTID0gNzAsCisJV0xBTl9FSURfTVVMVElQTEVfQlNTSUQgPSA3MSwKKwlXTEFOX0VJRF9CU1NfQ09FWF8yMDQwID0gNzIsCisJV0xBTl9FSURfT1ZFUkxBUF9CU1NfU0NBTl9QQVJBTSA9IDc0LAorCVdMQU5fRUlEX0VYVF9DQVBBQklMSVRZID0gMTI3LAorCisJV0xBTl9FSURfTU9CSUxJVFlfRE9NQUlOID0gNTQsCisJV0xBTl9FSURfRkFTVF9CU1NfVFJBTlNJVElPTiA9IDU1LAorCVdMQU5fRUlEX1RJTUVPVVRfSU5URVJWQUwgPSA1NiwKKwlXTEFOX0VJRF9SSUNfREFUQSA9IDU3LAorCVdMQU5fRUlEX1JJQ19ERVNDUklQVE9SID0gNzUsCisKKwlXTEFOX0VJRF9EU0VfUkVHSVNURVJFRF9MT0NBVElPTiA9IDU4LAorCVdMQU5fRUlEX1NVUFBPUlRFRF9SRUdVTEFUT1JZX0NMQVNTRVMgPSA1OSwKKwlXTEFOX0VJRF9FWFRfQ0hBTlNXSVRDSF9BTk4gPSA2MCwKK307CisKKy8qIEFjdGlvbiBjYXRlZ29yeSBjb2RlICovCitlbnVtIGllZWU4MDIxMV9jYXRlZ29yeSB7CisJV0xBTl9DQVRFR09SWV9TUEVDVFJVTV9NR01UID0gMCwKKwlXTEFOX0NBVEVHT1JZX1FPUyA9IDEsCisJV0xBTl9DQVRFR09SWV9ETFMgPSAyLAorCVdMQU5fQ0FURUdPUllfQkFDSyA9IDMsCisJV0xBTl9DQVRFR09SWV9QVUJMSUMgPSA0LAorCVdMQU5fQ0FURUdPUllfSFQgPSA3LAorCVdMQU5fQ0FURUdPUllfU0FfUVVFUlkgPSA4LAorCVdMQU5fQ0FURUdPUllfUFJPVEVDVEVEX0RVQUxfT0ZfQUNUSU9OID0gOSwKKwlXTEFOX0NBVEVHT1JZX1RETFMgPSAxMiwKKwlXTEFOX0NBVEVHT1JZX01FU0hfQUNUSU9OID0gMTMsCisJV0xBTl9DQVRFR09SWV9NVUxUSUhPUF9BQ1RJT04gPSAxNCwKKwlXTEFOX0NBVEVHT1JZX1NFTEZfUFJPVEVDVEVEID0gMTUsCisJV0xBTl9DQVRFR09SWV9XTU0gPSAxNywKKwlXTEFOX0NBVEVHT1JZX1ZFTkRPUl9TUEVDSUZJQ19QUk9URUNURUQgPSAxMjYsCisJV0xBTl9DQVRFR09SWV9WRU5ET1JfU1BFQ0lGSUMgPSAxMjcsCit9OworCisvKiBTUEVDVFJVTV9NR01UIGFjdGlvbiBjb2RlICovCitlbnVtIGllZWU4MDIxMV9zcGVjdHJ1bV9tZ210X2FjdGlvbmNvZGUgeworCVdMQU5fQUNUSU9OX1NQQ1RfTVNSX1JFUSA9IDAsCisJV0xBTl9BQ1RJT05fU1BDVF9NU1JfUlBSVCA9IDEsCisJV0xBTl9BQ1RJT05fU1BDVF9UUENfUkVRID0gMiwKKwlXTEFOX0FDVElPTl9TUENUX1RQQ19SUFJUID0gMywKKwlXTEFOX0FDVElPTl9TUENUX0NITF9TV0lUQ0ggPSA0LAorfTsKKworLyogSFQgYWN0aW9uIGNvZGVzICovCitlbnVtIGllZWU4MDIxMV9odF9hY3Rpb25jb2RlIHsKKwlXTEFOX0hUX0FDVElPTl9OT1RJRllfQ0hBTldJRFRIID0gMCwKKwlXTEFOX0hUX0FDVElPTl9TTVBTID0gMSwKKwlXTEFOX0hUX0FDVElPTl9QU01QID0gMiwKKwlXTEFOX0hUX0FDVElPTl9QQ09fUEhBU0UgPSAzLAorCVdMQU5fSFRfQUNUSU9OX0NTSSA9IDQsCisJV0xBTl9IVF9BQ1RJT05fTk9OQ09NUFJFU1NFRF9CRiA9IDUsCisJV0xBTl9IVF9BQ1RJT05fQ09NUFJFU1NFRF9CRiA9IDYsCisJV0xBTl9IVF9BQ1RJT05fQVNFTF9JRFhfRkVFREJBQ0sgPSA3LAorfTsKKworLyogU2VsZiBQcm90ZWN0ZWQgQWN0aW9uIGNvZGVzICovCitlbnVtIGllZWU4MDIxMV9zZWxmX3Byb3RlY3RlZF9hY3Rpb25jb2RlIHsKKwlXTEFOX1NQX1JFU0VSVkVEID0gMCwKKwlXTEFOX1NQX01FU0hfUEVFUklOR19PUEVOID0gMSwKKwlXTEFOX1NQX01FU0hfUEVFUklOR19DT05GSVJNID0gMiwKKwlXTEFOX1NQX01FU0hfUEVFUklOR19DTE9TRSA9IDMsCisJV0xBTl9TUF9NR0tfSU5GT1JNID0gNCwKKwlXTEFOX1NQX01HS19BQ0sgPSA1LAorfTsKKworLyogTWVzaCBhY3Rpb24gY29kZXMgKi8KK2VudW0gaWVlZTgwMjExX21lc2hfYWN0aW9uY29kZSB7CisJV0xBTl9NRVNIX0FDVElPTl9MSU5LX01FVFJJQ19SRVBPUlQsCisJV0xBTl9NRVNIX0FDVElPTl9IV01QX1BBVEhfU0VMRUNUSU9OLAorCVdMQU5fTUVTSF9BQ1RJT05fR0FURV9BTk5PVU5DRU1FTlQsCisJV0xBTl9NRVNIX0FDVElPTl9DT05HRVNUSU9OX0NPTlRST0xfTk9USUZJQ0FUSU9OLAorCVdMQU5fTUVTSF9BQ1RJT05fTUNDQV9TRVRVUF9SRVFVRVNULAorCVdMQU5fTUVTSF9BQ1RJT05fTUNDQV9TRVRVUF9SRVBMWSwKKwlXTEFOX01FU0hfQUNUSU9OX01DQ0FfQURWRVJUSVNFTUVOVF9SRVFVRVNULAorCVdMQU5fTUVTSF9BQ1RJT05fTUNDQV9BRFZFUlRJU0VNRU5ULAorCVdMQU5fTUVTSF9BQ1RJT05fTUNDQV9URUFSRE9XTiwKKwlXTEFOX01FU0hfQUNUSU9OX1RCVFRfQURKVVNUTUVOVF9SRVFVRVNULAorCVdMQU5fTUVTSF9BQ1RJT05fVEJUVF9BREpVU1RNRU5UX1JFU1BPTlNFLAorfTsKKworLyogU2VjdXJpdHkga2V5IGxlbmd0aCAqLworZW51bSBpZWVlODAyMTFfa2V5X2xlbiB7CisJV0xBTl9LRVlfTEVOX1dFUDQwID0gNSwKKwlXTEFOX0tFWV9MRU5fV0VQMTA0ID0gMTMsCisJV0xBTl9LRVlfTEVOX0NDTVAgPSAxNiwKKwlXTEFOX0tFWV9MRU5fVEtJUCA9IDMyLAorCVdMQU5fS0VZX0xFTl9BRVNfQ01BQyA9IDE2LAorfTsKKworLyogUHVibGljIGFjdGlvbiBjb2RlcyAqLworZW51bSBpZWVlODAyMTFfcHViX2FjdGlvbmNvZGUgeworCVdMQU5fUFVCX0FDVElPTl9URExTX0RJU0NPVkVSX1JFUyA9IDE0LAorfTsKKworLyogVERMUyBhY3Rpb24gY29kZXMgKi8KK2VudW0gaWVlZTgwMjExX3RkbHNfYWN0aW9uY29kZSB7CisJV0xBTl9URExTX1NFVFVQX1JFUVVFU1QgPSAwLAorCVdMQU5fVERMU19TRVRVUF9SRVNQT05TRSA9IDEsCisJV0xBTl9URExTX1NFVFVQX0NPTkZJUk0gPSAyLAorCVdMQU5fVERMU19URUFSRE9XTiA9IDMsCisJV0xBTl9URExTX1BFRVJfVFJBRkZJQ19JTkRJQ0FUSU9OID0gNCwKKwlXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVRVUVTVCA9IDUsCisJV0xBTl9URExTX0NIQU5ORUxfU1dJVENIX1JFU1BPTlNFID0gNiwKKwlXTEFOX1RETFNfUEVFUl9QU01fUkVRVUVTVCA9IDcsCisJV0xBTl9URExTX1BFRVJfUFNNX1JFU1BPTlNFID0gOCwKKwlXTEFOX1RETFNfUEVFUl9UUkFGRklDX1JFU1BPTlNFID0gOSwKKwlXTEFOX1RETFNfRElTQ09WRVJZX1JFUVVFU1QgPSAxMCwKK307CisKKy8qCisgKiBURExTIGNhcGFiaWxpbGl0ZXMgdG8gYmUgZW5hYmxlZCBpbiB0aGUgNXRoIGJ5dGUgb2YgdGhlCisgKiBAV0xBTl9FSURfRVhUX0NBUEFCSUxJVFkgaW5mb3JtYXRpb24gZWxlbWVudAorICovCisjZGVmaW5lIFdMQU5fRVhUX0NBUEE1X1RETFNfRU5BQkxFRAlCSVQoNSkKKyNkZWZpbmUgV0xBTl9FWFRfQ0FQQTVfVERMU19QUk9ISUJJVEVECUJJVCg2KQorCisvKiBURExTIHNwZWNpZmljIHBheWxvYWQgdHlwZSBpbiB0aGUgTExDL1NOQVAgaGVhZGVyICovCisjZGVmaW5lIFdMQU5fVERMU19TTkFQX1JGVFlQRQkweDIKKworLyoqCisgKiBlbnVtIC0gbWVzaCBzeW5jaHJvbml6YXRpb24gbWV0aG9kIGlkZW50aWZpZXIKKyAqCisgKiBASUVFRTgwMjExX1NZTkNfTUVUSE9EX05FSUdIQk9SX09GRlNFVDogdGhlIGRlZmF1bHQgc3luY2hyb25pemF0aW9uIG1ldGhvZAorICogQElFRUU4MDIxMV9TWU5DX01FVEhPRF9WRU5ET1I6IGEgdmVuZG9yIHNwZWNpZmljIHN5bmNocm9uaXphdGlvbiBtZXRob2QKKyAqIHRoYXQgd2lsbCBiZSBzcGVjaWZpZWQgaW4gYSB2ZW5kb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gZWxlbWVudAorICovCitlbnVtIHsKKwlJRUVFODAyMTFfU1lOQ19NRVRIT0RfTkVJR0hCT1JfT0ZGU0VUID0gMSwKKwlJRUVFODAyMTFfU1lOQ19NRVRIT0RfVkVORE9SID0gMjU1LAorfTsKKworLyoqCisgKiBlbnVtIC0gbWVzaCBwYXRoIHNlbGVjdGlvbiBwcm90b2NvbCBpZGVudGlmaWVyCisgKgorICogQElFRUU4MDIxMV9QQVRIX1BST1RPQ09MX0hXTVA6IHRoZSBkZWZhdWx0IHBhdGggc2VsZWN0aW9uIHByb3RvY29sCisgKiBASUVFRTgwMjExX1BBVEhfUFJPVE9DT0xfVkVORE9SOiBhIHZlbmRvciBzcGVjaWZpYyBwcm90b2NvbCB0aGF0IHdpbGwKKyAqIGJlIHNwZWNpZmllZCBpbiBhIHZlbmRvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBlbGVtZW50CisgKi8KK2VudW0geworCUlFRUU4MDIxMV9QQVRIX1BST1RPQ09MX0hXTVAgPSAxLAorCUlFRUU4MDIxMV9QQVRIX1BST1RPQ09MX1ZFTkRPUiA9IDI1NSwKK307CisKKy8qKgorICogZW51bSAtIG1lc2ggcGF0aCBzZWxlY3Rpb24gbWV0cmljIGlkZW50aWZpZXIKKyAqCisgKiBASUVFRTgwMjExX1BBVEhfTUVUUklDX0FJUlRJTUU6IHRoZSBkZWZhdWx0IHBhdGggc2VsZWN0aW9uIG1ldHJpYworICogQElFRUU4MDIxMV9QQVRIX01FVFJJQ19WRU5ET1I6IGEgdmVuZG9yIHNwZWNpZmljIG1ldHJpYyB0aGF0IHdpbGwgYmUKKyAqIHNwZWNpZmllZCBpbiBhIHZlbmRvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBlbGVtZW50CisgKi8KK2VudW0geworCUlFRUU4MDIxMV9QQVRIX01FVFJJQ19BSVJUSU1FID0gMSwKKwlJRUVFODAyMTFfUEFUSF9NRVRSSUNfVkVORE9SID0gMjU1LAorfTsKKworCisvKgorICogSUVFRSA4MDIuMTEtMjAwNyA3LjMuMi45IENvdW50cnkgaW5mb3JtYXRpb24gZWxlbWVudAorICoKKyAqIE1pbmltdW0gbGVuZ3RoIGlzIDggb2N0ZXRzLCBpZSBsZW4gbXVzdCBiZSBldmVubHkKKyAqIGRpdmlzaWJsZSBieSAyCisgKi8KKworLyogQWx0aG91Z2ggdGhlIHNwZWMgc2F5cyA4IEknbSBzZWVpbmcgNiBpbiBwcmFjdGljZSAqLworI2RlZmluZSBJRUVFODAyMTFfQ09VTlRSWV9JRV9NSU5fTEVOCTYKKworLyogVGhlIENvdW50cnkgU3RyaW5nIGZpZWxkIG9mIHRoZSBlbGVtZW50IHNoYWxsIGJlIDMgb2N0ZXRzIGluIGxlbmd0aCAqLworI2RlZmluZSBJRUVFODAyMTFfQ09VTlRSWV9TVFJJTkdfTEVOCTMKKworLyoKKyAqIEZvciByZWd1bGF0b3J5IGV4dGVuc2lvbiBzdHVmZiBzZWUgSUVFRSA4MDIuMTEtMjAwNworICogQW5uZXggSSAocGFnZSAxMTQxKSBhbmQgQW5uZXggSiAocGFnZSAxMTQ3KS4gQWxzbworICogcmV2aWV3IDcuMy4yLjkuCisgKgorICogV2hlbiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgdHJ1ZSBhbmQgdGhlCisgKiBmaXJzdF9jaGFubmVsL3JlZ19leHRlbnNpb25faWQgaXMgPj0gMjAxIHRoZW4gdGhlIElFCisgKiBjb21wcm9taXNlcyBvZiB0aGUgJ2V4dCcgc3RydWN0IHJlcHJlc2VudGVkIGJlbG93OgorICoKKyAqICAtIFJlZ3VsYXRvcnkgZXh0ZW5zaW9uIElEIC0gd2hlbiBnZW5lcmF0aW5nIElFIHRoaXMganVzdCBuZWVkcworICogICAgdG8gYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGZvciBlYWNoIHRyaXBsZXQgcGFzc2VkIGluCisgKiAgICB0aGUgSUUKKyAqICAtIFJlZ3VsYXRvcnkgY2xhc3MgLSBpbmRleCBpbnRvIHNldCBvZiBydWxlcworICogIC0gQ292ZXJhZ2UgY2xhc3MgLSBpbmRleCBpbnRvIGFpciBwcm9wYWdhdGlvbiB0aW1lIChUYWJsZSA3LTI3KSwKKyAqICAgIGluIG1pY3Jvc2Vjb25kcywgeW91IGNhbiBjb21wdXRlIHRoZSBhaXIgcHJvcGFnYXRpb24gdGltZSBmcm9tCisgKiAgICB0aGUgaW5kZXggYnkgbXVsdGlwbHlpbmcgYnkgMywgc28gaW5kZXggMTAgeWllbGRzIGEgcHJvcGFnYXRpb24KKyAqICAgIG9mIDEwIHVzLiBWYWxpZCB2YWx1ZXMgYXJlIDAtMzEsIHZhbHVlcyAzMi0yNTUgYXJlIG5vdCBkZWZpbmVkCisgKiAgICB5ZXQuIEEgdmFsdWUgb2YgMCBpbmljYXRlcyBhaXIgcHJvcGFnYXRpb24gb2YgPD0gMSB1cy4KKyAqCisgKiAgU2VlIGFsc28gVGFibGUgSS4yIGZvciBFbWlzc2lvbiBsaW1pdCBzZXRzIGFuZCB0YWJsZQorICogIEkuMyBmb3IgQmVoYXZpb3IgbGltaXQgc2V0cy4gVGFibGUgSi4xIGluZGljYXRlcyBob3cgdG8gbWFwCisgKiAgYSByZWdfY2xhc3MgdG8gYW4gZW1pc3Npb24gbGltaXQgc2V0IGFuZCBiZWhhdmlvciBsaW1pdCBzZXQuCisgKi8KKyNkZWZpbmUgSUVFRTgwMjExX0NPVU5UUllfRVhURU5TSU9OX0lEIDIwMQorCisvKgorICogIENoYW5uZWxzIG51bWJlcnMgaW4gdGhlIElFIG11c3QgYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nCisgKiAgaWYgZG90MTFSZWd1bGF0b3J5Q2xhc3Nlc1JlcXVpcmVkIGlzIG5vdCB0cnVlLgorICoKKyAqICBJZiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgdHJ1ZSBjb25zZWN1dGl2ZQorICogIHN1YmJhbmQgdHJpcGxldHMgZm9sbG93aW5nIGEgcmVndWxhdG9yeSB0cmlwbGV0IHNoYWxsCisgKiAgaGF2ZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgZmlyc3RfY2hhbm5lbCBudW1iZXIgZmllbGRzLgorICoKKyAqICBDaGFubmVsIG51bWJlcnMgc2hhbGwgbm90IG92ZXJsYXAuCisgKgorICogIE5vdGUgdGhhdCBtYXhfcG93ZXIgaXMgc2lnbmVkLgorICovCitzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldCB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTggZmlyc3RfY2hhbm5lbDsKKwkJCXU4IG51bV9jaGFubmVsczsKKwkJCXM4IG1heF9wb3dlcjsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY2hhbnM7CisJCXN0cnVjdCB7CisJCQl1OCByZWdfZXh0ZW5zaW9uX2lkOworCQkJdTggcmVnX2NsYXNzOworCQkJdTggY292ZXJhZ2VfY2xhc3M7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGV4dDsKKwl9OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gaWVlZTgwMjExX3RpbWVvdXRfaW50ZXJ2YWxfdHlwZSB7CisJV0xBTl9USU1FT1VUX1JFQVNTT0NfREVBRExJTkUgPSAxIC8qIDgwMi4xMXIgKi8sCisJV0xBTl9USU1FT1VUX0tFWV9MSUZFVElNRSA9IDIgLyogODAyLjExciAqLywKKwlXTEFOX1RJTUVPVVRfQVNTT0NfQ09NRUJBQ0sgPSAzIC8qIDgwMi4xMXcgKi8sCit9OworCisvKiBCQUNLIGFjdGlvbiBjb2RlICovCitlbnVtIGllZWU4MDIxMV9iYWNrX2FjdGlvbmNvZGUgeworCVdMQU5fQUNUSU9OX0FEREJBX1JFUSA9IDAsCisJV0xBTl9BQ1RJT05fQUREQkFfUkVTUCA9IDEsCisJV0xBTl9BQ1RJT05fREVMQkEgPSAyLAorfTsKKworLyogQkFDSyAoYmxvY2stYWNrKSBwYXJ0aWVzICovCitlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgeworCVdMQU5fQkFDS19SRUNJUElFTlQgPSAwLAorCVdMQU5fQkFDS19JTklUSUFUT1IgPSAxLAorfTsKKworLyogU0EgUXVlcnkgYWN0aW9uICovCitlbnVtIGllZWU4MDIxMV9zYV9xdWVyeV9hY3Rpb24geworCVdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFUVVFU1QgPSAwLAorCVdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFU1BPTlNFID0gMSwKK307CisKKworLyogY2lwaGVyIHN1aXRlIHNlbGVjdG9ycyAqLworI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9VU0VfR1JPVVAJMHgwMDBGQUMwMAorI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MAkJMHgwMDBGQUMwMQorI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQCQkweDAwMEZBQzAyCisvKiByZXNlcnZlZDoJCQkJMHgwMDBGQUMwMyAqLworI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QCQkweDAwMEZBQzA0CisjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNAkweDAwMEZBQzA1CisjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDCTB4MDAwRkFDMDYKKworI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9TTVM0CQkweDAwMTQ3MjAxCisKKy8qIEFLTSBzdWl0ZSBzZWxlY3RvcnMgKi8KKyNkZWZpbmUgV0xBTl9BS01fU1VJVEVfODAyMVgJCTB4MDAwRkFDMDEKKyNkZWZpbmUgV0xBTl9BS01fU1VJVEVfUFNLCQkweDAwMEZBQzAyCisjZGVmaW5lIFdMQU5fQUtNX1NVSVRFX1NBRQkJCTB4MDAwRkFDMDgKKyNkZWZpbmUgV0xBTl9BS01fU1VJVEVfRlRfT1ZFUl9TQUUJMHgwMDBGQUMwOQorCisjZGVmaW5lIFdMQU5fTUFYX0tFWV9MRU4JCTMyCisKKyNkZWZpbmUgV0xBTl9QTUtJRF9MRU4JCQkxNgorCisjZGVmaW5lIFdMQU5fT1VJX1dGQQkJCTB4NTA2ZjlhCisjZGVmaW5lIFdMQU5fT1VJX1RZUEVfV0ZBX1AyUAkJOQorCisvKgorICogV01NLzgwMi4xMWUgVHNwZWMgRWxlbWVudAorICovCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfVFNQRUNfVElEX01BU0sJCTB4MEYKKyNkZWZpbmUgSUVFRTgwMjExX1dNTV9JRV9UU1BFQ19USURfU0hJRlQJMQorCitlbnVtIGllZWU4MDIxMV90c3BlY19zdGF0dXNfY29kZSB7CisJSUVFRTgwMjExX1RTUEVDX1NUQVRVU19BRE1JU1NfQUNDRVBURUQgPSAwLAorCUlFRUU4MDIxMV9UU1BFQ19TVEFUVVNfQUREVFNfSU5WQUxfUEFSQU1TID0gMHgxLAorfTsKKworc3RydWN0IGllZWU4MDIxMV90c3BlY19pZSB7CisJdTggZWxlbWVudF9pZDsKKwl1OCBsZW47CisJdTggb3VpWzNdOworCXU4IG91aV90eXBlOworCXU4IG91aV9zdWJ0eXBlOworCXU4IHZlcnNpb247CisJX19sZTE2IHRzaW5mbzsKKwl1OCB0c2luZm9fcmVzdmQ7CisJX19sZTE2IG5vbWluYWxfbXNkdTsKKwlfX2xlMTYgbWF4X21zZHU7CisJX19sZTMyIG1pbl9zZXJ2aWNlX2ludDsKKwlfX2xlMzIgbWF4X3NlcnZpY2VfaW50OworCV9fbGUzMiBpbmFjdGl2aXR5X2ludDsKKwlfX2xlMzIgc3VzcGVuc2lvbl9pbnQ7CisJX19sZTMyIHNlcnZpY2Vfc3RhcnRfdGltZTsKKwlfX2xlMzIgbWluX2RhdGFfcmF0ZTsKKwlfX2xlMzIgbWVhbl9kYXRhX3JhdGU7CisJX19sZTMyIHBlYWtfZGF0YV9yYXRlOworCV9fbGUzMiBtYXhfYnVyc3Rfc2l6ZTsKKwlfX2xlMzIgZGVsYXlfYm91bmQ7CisJX19sZTMyIG1pbl9waHlfcmF0ZTsKKwlfX2xlMTYgc2JhOworCV9fbGUxNiBtZWRpdW1fdGltZTsKK30gX19wYWNrZWQ7CisKKy8qKgorICogaWVlZTgwMjExX2dldF9xb3NfY3RsIC0gZ2V0IHBvaW50ZXIgdG8gcW9zIGNvbnRyb2wgYnl0ZXMKKyAqIEBoZHI6IHRoZSBmcmFtZQorICoKKyAqIFRoZSBxb3MgY3RybCBieXRlcyBjb21lIGFmdGVyIHRoZSBmcmFtZV9jb250cm9sLCBkdXJhdGlvbiwgc2VxX251bQorICogYW5kIDMgb3IgNCBhZGRyZXNzZXMgb2YgbGVuZ3RoIEVUSF9BTEVOLgorICogMyBhZGRyOiAyICsgMiArIDIgKyAzKjYgPSAyNAorICogNCBhZGRyOiAyICsgMiArIDIgKyA0KjYgPSAzMAorICovCitzdGF0aWMgaW5saW5lIHU4ICppZWVlODAyMTFfZ2V0X3Fvc19jdGwoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKK3sKKwlpZiAoaWVlZTgwMjExX2hhc19hNChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gKHU4ICopaGRyICsgMzA7CisJZWxzZQorCQlyZXR1cm4gKHU4ICopaGRyICsgMjQ7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2dldF9TQSAtIGdldCBwb2ludGVyIHRvIFNBCisgKiBAaGRyOiB0aGUgZnJhbWUKKyAqCisgKiBHaXZlbiBhbiA4MDIuMTEgZnJhbWUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2Zmc2V0CisgKiB0byB0aGUgc291cmNlIGFkZHJlc3MgKFNBKS4gSXQgZG9lcyBub3QgdmVyaWZ5IHRoYXQgdGhlCisgKiBoZWFkZXIgaXMgbG9uZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgYWRkcmVzcywgYW5kIHRoZQorICogaGVhZGVyIG11c3QgYmUgbG9uZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgZnJhbWUgY29udHJvbAorICogZmllbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggKmllZWU4MDIxMV9nZXRfU0Eoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKK3sKKwlpZiAoaWVlZTgwMjExX2hhc19hNChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gaGRyLT5hZGRyNDsKKwlpZiAoaWVlZTgwMjExX2hhc19mcm9tZHMoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIGhkci0+YWRkcjM7CisJcmV0dXJuIGhkci0+YWRkcjI7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2dldF9EQSAtIGdldCBwb2ludGVyIHRvIERBCisgKiBAaGRyOiB0aGUgZnJhbWUKKyAqCisgKiBHaXZlbiBhbiA4MDIuMTEgZnJhbWUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2Zmc2V0CisgKiB0byB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyAoREEpLiBJdCBkb2VzIG5vdCB2ZXJpZnkgdGhhdAorICogdGhlIGhlYWRlciBpcyBsb25nIGVub3VnaCB0byBjb250YWluIHRoZSBhZGRyZXNzLCBhbmQgdGhlCisgKiBoZWFkZXIgbXVzdCBiZSBsb25nIGVub3VnaCB0byBjb250YWluIHRoZSBmcmFtZSBjb250cm9sCisgKiBmaWVsZC4KKyAqLworc3RhdGljIGlubGluZSB1OCAqaWVlZTgwMjExX2dldF9EQShzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCWlmIChpZWVlODAyMTFfaGFzX3RvZHMoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIGhkci0+YWRkcjM7CisJZWxzZQorCQlyZXR1cm4gaGRyLT5hZGRyMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUgLSBjaGVjayBpZiBmcmFtZSBpcyBhIHJvYnVzdCBtYW5hZ2VtZW50IGZyYW1lCisgKiBAaGRyOiB0aGUgZnJhbWUgKGJ1ZmZlciBtdXN0IGluY2x1ZGUgYXQgbGVhc3QgdGhlIGZpcnN0IG9jdGV0IG9mIHBheWxvYWQpCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKK3sKKwlpZiAoaWVlZTgwMjExX2lzX2Rpc2Fzc29jKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkgICAgaWVlZTgwMjExX2lzX2RlYXV0aChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChpZWVlODAyMTFfaXNfYWN0aW9uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJdTggKmNhdGVnb3J5OworCisJCS8qCisJCSAqIEFjdGlvbiBmcmFtZXMsIGV4Y2x1ZGluZyBQdWJsaWMgQWN0aW9uIGZyYW1lcywgYXJlIFJvYnVzdAorCQkgKiBNYW5hZ2VtZW50IEZyYW1lcy4gSG93ZXZlciwgaWYgd2UgYXJlIGxvb2tpbmcgYXQgYSBQcm90ZWN0ZWQKKwkJICogZnJhbWUsIHNraXAgdGhlIGNoZWNrIHNpbmNlIHRoZSBkYXRhIG1heSBiZSBlbmNyeXB0ZWQgYW5kCisJCSAqIHRoZSBmcmFtZSBoYXMgYWxyZWFkeSBiZWVuIGZvdW5kIHRvIGJlIGEgUm9idXN0IE1hbmFnZW1lbnQKKwkJICogRnJhbWUgKGJ5IHRoZSBvdGhlciBlbmQpLgorCQkgKi8KKwkJaWYgKGllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJY2F0ZWdvcnkgPSAoKHU4ICopIGhkcikgKyAyNDsKKwkJcmV0dXJuICpjYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX1BVQkxJQyAmJgorCQkJKmNhdGVnb3J5ICE9IFdMQU5fQ0FURUdPUllfSFQgJiYKKwkJCSpjYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX1NFTEZfUFJPVEVDVEVEICYmCisJCQkqY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9WRU5ET1JfU1BFQ0lGSUM7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19wdWJsaWNfYWN0aW9uIC0gY2hlY2sgaWYgZnJhbWUgaXMgYSBwdWJsaWMgYWN0aW9uIGZyYW1lCisgKiBAaGRyOiB0aGUgZnJhbWUKKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgZnJhbWUKKyAqLworc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9pc19wdWJsaWNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCisJCQkJCSAgICAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKiloZHI7CisKKwlpZiAobGVuIDwgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDOworfQorCisvKioKKyAqIGllZWU4MDIxMV9maHNzX2NoYW5fdG9fZnJlcSAtIGdldCBjaGFubmVsIGZyZXF1ZW5jeQorICogQGNoYW5uZWw6IHRoZSBGSFNTIGNoYW5uZWwKKyAqCisgKiBDb252ZXJ0IElFRUU4MDIuMTEgRkhTUyBjaGFubmVsIHRvIGZyZXF1ZW5jeSAoTUh6KQorICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxNC42CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9maHNzX2NoYW5fdG9fZnJlcShpbnQgY2hhbm5lbCkKK3sKKwlpZiAoKGNoYW5uZWwgPiAxKSAmJiAoY2hhbm5lbCA8IDk2KSkKKwkJcmV0dXJuIGNoYW5uZWwgKyAyNDAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGllZWU4MDIxMV9mcmVxX3RvX2Zoc3NfY2hhbiAtIGdldCBjaGFubmVsCisgKiBAZnJlcTogdGhlIGNoYW5uZWxzIGZyZXF1ZW5jeQorICoKKyAqIENvbnZlcnQgZnJlcXVlbmN5IChNSHopIHRvIElFRUU4MDIuMTEgRkhTUyBjaGFubmVsCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE0LjYKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2ZyZXFfdG9fZmhzc19jaGFuKGludCBmcmVxKQoreworCWlmICgoZnJlcSA+IDI0MDEpICYmIChmcmVxIDwgMjQ5NikpCisJCXJldHVybiBmcmVxIC0gMjQwMDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEgLSBnZXQgY2hhbm5lbCBjZW50ZXIgZnJlcXVlbmN5CisgKiBAY2hhbm5lbDogdGhlIERTU1MgY2hhbm5lbAorICoKKyAqIENvbnZlcnQgSUVFRTgwMi4xMSBEU1NTIGNoYW5uZWwgdG8gdGhlIGNlbnRlciBmcmVxdWVuY3kgKE1IeikuCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE1LjYKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGludCBjaGFubmVsKQoreworCWlmICgoY2hhbm5lbCA+IDApICYmIChjaGFubmVsIDwgMTQpKQorCQlyZXR1cm4gMjQwNyArIChjaGFubmVsICogNSk7CisJZWxzZSBpZiAoY2hhbm5lbCA9PSAxNCkKKwkJcmV0dXJuIDI0ODQ7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuIC0gZ2V0IGNoYW5uZWwKKyAqIEBmcmVxOiB0aGUgZnJlcXVlbmN5CisgKgorICogQ29udmVydCBmcmVxdWVuY3kgKE1IeikgdG8gSUVFRTgwMi4xMSBEU1NTIGNoYW5uZWwKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTUuNgorICoKKyAqIFRoaXMgcm91dGluZSBzZWxlY3RzIHRoZSBjaGFubmVsIHdpdGggdGhlIGNsb3Nlc3QgY2VudGVyIGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGludCBmcmVxKQoreworCWlmICgoZnJlcSA+PSAyNDEwKSAmJiAoZnJlcSA8IDI0NzUpKQorCQlyZXR1cm4gKGZyZXEgLSAyNDA1KSAvIDU7CisJZWxzZSBpZiAoKGZyZXEgPj0gMjQ4MikgJiYgKGZyZXEgPCAyNDg3KSkKKwkJcmV0dXJuIDE0OworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKiBDb252ZXJ0IElFRUU4MDIuMTEgSFIgRFNTUyBjaGFubmVsIHRvIGZyZXF1ZW5jeSAoTUh6KSBhbmQgYmFjaworICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxOC40LjYuMgorICoKKyAqIFRoZSBjaGFubmVscyBhbmQgZnJlcXVlbmNpZXMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGRlZmluZWQgZm9yIERTU1MKKyAqLworI2RlZmluZSBpZWVlODAyMTFfaHJfY2hhbl90b19mcmVxKGNoYW4pIGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFuKQorI2RlZmluZSBpZWVlODAyMTFfZnJlcV90b19ocl9jaGFuKGZyZXEpIGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbihmcmVxKQorCisvKiBDb252ZXJ0IElFRUU4MDIuMTEgRVJQIGNoYW5uZWwgdG8gZnJlcXVlbmN5IChNSHopIGFuZCBiYWNrCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE5LjQuMgorICovCisjZGVmaW5lIGllZWU4MDIxMV9lcnBfY2hhbl90b19mcmVxKGNoYW4pIGllZWU4MDIxMV9ocl9jaGFuX3RvX2ZyZXEoY2hhbikKKyNkZWZpbmUgaWVlZTgwMjExX2ZyZXFfdG9fZXJwX2NoYW4oZnJlcSkgaWVlZTgwMjExX2ZyZXFfdG9faHJfY2hhbihmcmVxKQorCisvKioKKyAqIGllZWU4MDIxMV9vZmRtX2NoYW5fdG9fZnJlcSAtIGdldCBjaGFubmVsIGNlbnRlciBmcmVxdWVuY3kKKyAqIEBzX2ZyZXE6IHN0YXJ0aW5nIGZyZXF1ZW5jeSA9PSAoZG90Q2hhbm5lbFN0YXJ0aW5nRmFjdG9yLzIpIE1IegorICogQGNoYW5uZWw6IHRoZSBPRkRNIGNoYW5uZWwKKyAqCisgKiBDb252ZXJ0IElFRUU4MDIuMTEgT0ZETSBjaGFubmVsIHRvIGNlbnRlciBmcmVxdWVuY3kgKE1IeikKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTcuMy44LjMuMgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfb2ZkbV9jaGFuX3RvX2ZyZXEoaW50IHNfZnJlcSwgaW50IGNoYW5uZWwpCit7CisJaWYgKChjaGFubmVsID4gMCkgJiYgKGNoYW5uZWwgPD0gMjAwKSAmJgorCSAgICAoc19mcmVxID49IDQwMDApKQorCQlyZXR1cm4gc19mcmVxICsgKGNoYW5uZWwgKiA1KTsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZnJlcV90b19vZmRtX2NoYW5uZWwgLSBnZXQgY2hhbm5lbAorICogQHNfZnJlcTogc3RhcnRpbmcgZnJlcXVlbmN5ID09IChkb3RDaGFubmVsU3RhcnRpbmdGYWN0b3IvMikgTUh6CisgKiBAZnJlcTogdGhlIGZyZXF1ZW5jeQorICoKKyAqIENvbnZlcnQgZnJlcXVlbmN5IChNSHopIHRvIElFRUU4MDIuMTEgT0ZETSBjaGFubmVsCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE3LjMuOC4zLjIKKyAqCisgKiBUaGlzIHJvdXRpbmUgc2VsZWN0cyB0aGUgY2hhbm5lbCB3aXRoIHRoZSBjbG9zZXN0IGNlbnRlciBmcmVxdWVuY3kuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9mcmVxX3RvX29mZG1fY2hhbihpbnQgc19mcmVxLCBpbnQgZnJlcSkKK3sKKwlpZiAoKGZyZXEgPiAoc19mcmVxICsgMikpICYmIChmcmVxIDw9IChzX2ZyZXEgKyAxMjAyKSkgJiYKKwkgICAgKHNfZnJlcSA+PSA0MDAwKSkKKwkJcmV0dXJuIChmcmVxICsgMiAtIHNfZnJlcSkgLyA1OworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGllZWU4MDIxMV90dV90b191c2VjIC0gY29udmVydCB0aW1lIHVuaXRzIChUVSkgdG8gbWljcm9zZWNvbmRzCisgKiBAdHU6IHRoZSBUVXMKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGllZWU4MDIxMV90dV90b191c2VjKHVuc2lnbmVkIGxvbmcgdHUpCit7CisJcmV0dXJuIDEwMjQgKiB0dTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfY2hlY2tfdGltIC0gY2hlY2sgaWYgQUlEIGJpdCBpcyBzZXQgaW4gVElNCisgKiBAdGltOiB0aGUgVElNIElFCisgKiBAdGltX2xlbjogbGVuZ3RoIG9mIHRoZSBUSU0gSUUKKyAqIEBhaWQ6IHRoZSBBSUQgdG8gbG9vayBmb3IKKyAqLworc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9jaGVja190aW0oc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbSwKKwkJCQkgICAgICAgdTggdGltX2xlbiwgdTE2IGFpZCkKK3sKKwl1OCBtYXNrOworCXU4IGluZGV4bjAsIGluZGV4bjEsIGluZGV4bjI7CisKKwlpZiAodW5saWtlbHkoIXRpbSB8fCB0aW1fbGVuIDwgc2l6ZW9mKCp0aW0pKSkKKwkJcmV0dXJuIGZhbHNlOworCisJYWlkICY9IDB4M2ZmZjsKKwlpbmRleG4wID0gYWlkIC8gODsKKwltYXNrICA9IDEgPDwgKGFpZCAmIDcpOworCisJaW5kZXhuMSA9IHRpbS0+Yml0bWFwX2N0cmwgJiAweGZlOworCWluZGV4bjIgPSB0aW1fbGVuICsgaW5kZXhuMSAtIDQ7CisKKwlpZiAoaW5kZXhuMCA8IGluZGV4bjEgfHwgaW5kZXhuMCA+IGluZGV4bjIpCisJCXJldHVybiBmYWxzZTsKKworCWluZGV4bjAgLT0gaW5kZXhuMTsKKworCXJldHVybiAhISh0aW0tPnZpcnR1YWxfbWFwW2luZGV4bjBdICYgbWFzayk7Cit9CisKKyNlbmRpZiAvKiBfX0xJTlVYX0lFRUU4MDIxMV9IICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2Nhcmw5MTcwZncvaW5jbHVkZS9saW51eC90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNDVmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2luY2x1ZGUvbGludXgvdHlwZXMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfVFlQRVNfSAorI2RlZmluZSBfX0xJTlVYX1RZUEVTX0gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKworI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorI2Vycm9yCSJiaWcgZW5kaWFuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGFyZ2V0IgorI2VuZGlmCisKK3R5cGVkZWYgdWludDE2X3QJX19sZTE2OwordHlwZWRlZiB1aW50MzJfdAlfX2xlMzI7Cit0eXBlZGVmIHVpbnQ2NF90CV9fbGU2NDsKKwordHlwZWRlZiB1aW50OF90CQl1ODsKK3R5cGVkZWYgdWludDhfdAkJX191ODsKK3R5cGVkZWYgdWludDE2X3QJdTE2OwordHlwZWRlZiB1aW50MTZfdAlfX3UxNjsKK3R5cGVkZWYgdWludDMyX3QJdTMyOwordHlwZWRlZiB1aW50MzJfdAlfX3UzMjsKK3R5cGVkZWYgdWludDY0X3QJdTY0OwordHlwZWRlZiB1aW50NjRfdAlfX3U2NDsKK3R5cGVkZWYgaW50OF90CQlzODsKK3R5cGVkZWYgaW50OF90CQlfX3M4OwordHlwZWRlZiBpbnQxNl90CQlzMTY7Cit0eXBlZGVmIGludDE2X3QJCV9fczE2OwordHlwZWRlZiBpbnQzMl90CQlzMzI7Cit0eXBlZGVmIGludDMyX3QJCV9fczMyOwordHlwZWRlZiBpbnQ2NF90CQlzNjQ7Cit0eXBlZGVmIGludDY0X3QJCV9fczY0OworCisjZGVmaW5lIGNwdV90b19sZTE2KHgpICgoX19sZTE2KSh1aW50MTZfdCkoeCkpCisjZGVmaW5lIGxlMTZfdG9fY3B1KHgpICgodWludDE2X3QpKF9fbGUxNikoeCkpCisjZGVmaW5lIGNwdV90b19sZTMyKHgpICgoX19sZTMyKSh1aW50MzJfdCkoeCkpCisjZGVmaW5lIGxlMzJfdG9fY3B1KHgpICgodWludDMyX3QpKF9fbGUzMikoeCkpCisjZGVmaW5lIGNwdV90b19sZTY0KHgpICgoX19sZTY0KSh1aW50NjRfdCkoeCkpCisjZGVmaW5lIGxlNjRfdG9fY3B1KHgpICgodWludDY0X3QpKF9fbGU2NCkoeCkpCisKK3R5cGVkZWYgdWludDE2X3QJX19iZTE2OwordHlwZWRlZiB1aW50MzJfdAlfX2JlMzI7Cit0eXBlZGVmIHVpbnQ2NF90CV9fYmU2NDsKKworI2VuZGlmIC8qIF9fTElOVVhfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9pbmNsdWRlL3NoYXJlZC9lZXByb20uaCBiL2Nhcmw5MTcwZncvaW5jbHVkZS9zaGFyZWQvZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmZjQwYQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvaW5jbHVkZS9zaGFyZWQvZWVwcm9tLmgKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBTaGFyZWQgQXRoZXJvcyBBUjkxNzAgSGVhZGVyCisgKgorICogRUVQUk9NIGxheW91dAorICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgKiBwZXJtaXNzaW9uIG5vdGljZToKKyAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqCisgKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfX0NBUkw5MTcwX1NIQVJFRF9FRVBST01fSAorI2RlZmluZSBfX0NBUkw5MTcwX1NIQVJFRF9FRVBST01fSAorCisjZGVmaW5lIEFSOTE3MF9FRVBST01fU1RBUlQJCTB4MTYwMAorCisjZGVmaW5lIEFSNTQxNl9NQVhfQ0hBSU5TCQkyCisjZGVmaW5lIEFSNTQxNl9NT0RBTF9TUFVSUwkJNQorCitzdHJ1Y3QgYXI5MTcwX2VlcHJvbV9tb2RhbCB7CisJX19sZTMyCWFudEN0cmxDaGFpbltBUjU0MTZfTUFYX0NIQUlOU107CisJX19sZTMyCWFudEN0cmxDb21tb247CisJczgJYW50ZW5uYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTgJc3dpdGNoU2V0dGxpbmc7CisJdTgJdHhSeEF0dGVuQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4CXJ4VHhNYXJnaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJczgJYWRjRGVzaXJlZFNpemU7CisJczgJcGdhRGVzaXJlZFNpemU7CisJdTgJeGxuYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTgJdHhFbmRUb1hwYU9mZjsKKwl1OAl0eEVuZFRvUnhPbjsKKwl1OAl0eEZyYW1lVG9YcGFPbjsKKwl1OAl0aHJlc2g2MjsKKwlzOAlub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4CXhwZEdhaW47CisJdTgJeHBkOworCXM4CWlxQ2FsSUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwlzOAlpcUNhbFFDaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTgJcGRHYWluT3ZlcmxhcDsKKwl1OAlvYjsKKwl1OAlkYjsKKwl1OAl4cGFCaWFzTHZsOworCXU4CXB3ckRlY3JlYXNlRm9yMkNoYWluOworCXU4CXB3ckRlY3JlYXNlRm9yM0NoYWluOworCXU4CXR4RnJhbWVUb0RhdGFTdGFydDsKKwl1OAl0eEZyYW1lVG9QYU9uOworCXU4CWh0NDBQb3dlckluY0ZvclBkYWRjOworCXU4CWJzd0F0dGVuW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OAlic3dNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCXU4CXN3U2V0dGxlSHQ0MDsKKwl1OAlyZXNlcnZlZFsyMl07CisJc3RydWN0IHNwdXJfY2hhbm5lbCB7CisJCV9fbGUxNiBzcHVyQ2hhbjsKKwkJdTgJc3B1clJhbmdlTG93OworCQl1OAlzcHVyUmFuZ2VIaWdoOworCX0gX19wYWNrZWQgc3B1cl9jaGFubmVsc1tBUjU0MTZfTU9EQUxfU1BVUlNdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBBUjU0MTZfTlVNX1BEX0dBSU5TCQk0CisjZGVmaW5lIEFSNTQxNl9QRF9HQUlOX0lDRVBUUwkJNQorCitzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX2RhdGFfcGVyX2ZyZXEgeworCXU4CXB3cl9wZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKKwl1OAl2cGRfcGRnW0FSNTQxNl9OVU1fUERfR0FJTlNdW0FSNTQxNl9QRF9HQUlOX0lDRVBUU107Cit9IF9fcGFja2VkOworCisjZGVmaW5lIEFSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTCQk4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTCQk0CisKKyNkZWZpbmUgQVI1NDE2X05VTV81R19UQVJHRVRfUFdSUwk4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QV1JTCTMKKyNkZWZpbmUgQVI1NDE2X05VTV8yR19PRkRNX1RBUkdFVF9QV1JTCTQKKyNkZWZpbmUgQVI1NDE2X01BWF9OVU1fVEdUX1BXUlMJCTgKKworc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfbGVnYWN5IHsKKwl1OAlmcmVxOworCXU4CXBvd2VyWzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfaHQgeworCXU4CWZyZXE7CisJdTgJcG93ZXJbOF07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIEFSNTQxNl9OVU1fQ1RMUwkJCTI0CisKK3N0cnVjdCBhcjkxNzBfY2FsY3RsX2VkZ2VzIHsKKwl1OAljaGFubmVsOworI2RlZmluZSBBUjkxNzBfQ0FMQ1RMX0VER0VfRkxBR1MJMHhDMAorCXU4CXBvd2VyX2ZsYWdzOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBBUjU0MTZfTlVNX0JBTkRfRURHRVMJCTgKKworc3RydWN0IGFyOTE3MF9jYWxjdGxfZGF0YSB7CisJc3RydWN0IGFyOTE3MF9jYWxjdGxfZWRnZXMKKwkJY29udHJvbF9lZGdlc1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV9CQU5EX0VER0VTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcjkxNzBfZWVwcm9tIHsKKwlfX2xlMTYJbGVuZ3RoOworCV9fbGUxNgljaGVja3N1bTsKKwlfX2xlMTYJdmVyc2lvbjsKKwl1OAlvcGVyYXRpbmdfZmxhZ3M7CisjZGVmaW5lIEFSOTE3MF9PUEZMQUdfNUdIWgkJMQorI2RlZmluZSBBUjkxNzBfT1BGTEFHXzJHSFoJCTIKKwl1OAltaXNjOworCV9fbGUxNglyZWdfZG9tYWluWzJdOworCXU4CW1hY19hZGRyZXNzWzZdOworCXU4CXJ4X21hc2s7CisJdTgJdHhfbWFzazsKKwlfX2xlMTYJcmZfc2lsZW50OworCV9fbGUxNglibHVldG9vdGhfb3B0aW9uczsKKwlfX2xlMTYJZGV2aWNlX2NhcGFiaWxpdGllczsKKwlfX2xlMzIJYnVpbGRfbnVtYmVyOworCXU4CWRldmljZVR5cGU7CisJdTgJcmVzZXJ2ZWRbMzNdOworCisJdTgJY3VzdG9tZXJfZGF0YVs2NF07CisKKwlzdHJ1Y3QgYXI5MTcwX2VlcHJvbV9tb2RhbAorCQltb2RhbF9oZWFkZXJbMl07CisKKwl1OAljYWxfZnJlcV9waWVyXzVHW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKKwl1OAljYWxfZnJlcV9waWVyXzJHW0FSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTXTsKKworCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fZGF0YV9wZXJfZnJlcQorCQljYWxfcGllcl9kYXRhXzVHW0FSNTQxNl9NQVhfQ0hBSU5TXVtBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU10sCisJCWNhbF9waWVyX2RhdGFfMkdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTXTsKKworCS8qIHBvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KKwlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9sZWdhY3kKKwkJY2FsX3RndF9wd3JfNUdbQVI1NDE2X05VTV81R19UQVJHRVRfUFdSU107CisJc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfaHQKKwkJY2FsX3RndF9wd3JfNUdfaHQyMFtBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTXSwKKwkJY2FsX3RndF9wd3JfNUdfaHQ0MFtBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTXTsKKworCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeQorCQljYWxfdGd0X3B3cl8yR19jY2tbQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BXUlNdLAorCQljYWxfdGd0X3B3cl8yR19vZmRtW0FSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSU107CisJc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfaHQKKwkJY2FsX3RndF9wd3JfMkdfaHQyMFtBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlNdLAorCQljYWxfdGd0X3B3cl8yR19odDQwW0FSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSU107CisKKwkvKiBjb25mb3JtYW5jZSB0ZXN0aW5nIGxpbWl0cyAqLworCXU4CWN0bF9pbmRleFtBUjU0MTZfTlVNX0NUTFNdOworCXN0cnVjdCBhcjkxNzBfY2FsY3RsX2RhdGEKKwkJY3RsX2RhdGFbQVI1NDE2X05VTV9DVExTXTsKKworCXU4CXBhZDsKKwlfX2xlMTYJc3Vic3lzdGVtX2lkOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBBUjkxNzBfTEVEX01PREVfUE9XRVJfT04JCTB4MDAwMQorI2RlZmluZSBBUjkxNzBfTEVEX01PREVfUkVTRVJWRUQJCTB4MDAwMgorI2RlZmluZSBBUjkxNzBfTEVEX01PREVfRElTQUJMRV9TVEFURQkJMHgwMDA0CisjZGVmaW5lIEFSOTE3MF9MRURfTU9ERV9PRkZfSU5fUFNNCQkweDAwMDgKKworLyogQVI5MTcwX0xFRF9NT0RFIEJJVCBpcyBzZXQgKi8KKyNkZWZpbmUgQVI5MTcwX0xFRF9NT0RFX0ZSRVFVRU5DWV9TCQk0CisjZGVmaW5lIEFSOTE3MF9MRURfTU9ERV9GUkVRVUVOQ1kJCTB4MDAzMAorI2RlZmluZSBBUjkxNzBfTEVEX01PREVfRlJFUVVFTkNZXzFIWgkJMHgwMDAwCisjZGVmaW5lIEFSOTE3MF9MRURfTU9ERV9GUkVRVUVOQ1lfMF81SFoJCTB4MDAxMAorI2RlZmluZSBBUjkxNzBfTEVEX01PREVfRlJFUVVFTkNZXzBfMjVIWgkweDAwMjAKKyNkZWZpbmUgQVI5MTcwX0xFRF9NT0RFX0ZSRVFVRU5DWV8wXzEyNUhaCTB4MDAzMAorCisvKiBBUjkxNzBfTEVEX01PREUgQklUIGlzIG5vdCBzZXQgKi8KKyNkZWZpbmUgQVI5MTcwX0xFRF9NT0RFX0NPTk5fU1RBVEVfUwkJNAorI2RlZmluZSBBUjkxNzBfTEVEX01PREVfQ09OTl9TVEFURQkJMHgwMDMwCisjZGVmaW5lIEFSOTE3MF9MRURfTU9ERV9DT05OX1NUQVRFX0ZPUkNFX09GRgkweDAwMDAKKyNkZWZpbmUgQVI5MTcwX0xFRF9NT0RFX0NPTk5fU1RBVEVfRk9SQ0VfT04JMHgwMDEwCisvKiBJZGxlIG9mZiAvIEFjdGl2ZSBvbiAqLworI2RlZmluZSBBUjkxNzBfTEVEX01PREVfQ09OTl9TVEFURV9JT0ZGX0FPTgkweDAwMjAKKy8qIElkbGUgb24gLyBBY3RpdmUgb2ZmICovCisjZGVmaW5lIEFSOTE3MF9MRURfTU9ERV9DT05OX1NUQVRFX0lPTl9BT0ZGCTB4MDAxMAorCisjZGVmaW5lIEFSOTE3MF9MRURfTU9ERV9NT0RFCQkJMHgwMDQwCisjZGVmaW5lIEFSOTE3MF9MRURfTU9ERV9SRVNFUlZFRDIJCTB4MDA4MAorCisjZGVmaW5lIEFSOTE3MF9MRURfTU9ERV9UT05fU0NBTl9TCQk4CisjZGVmaW5lIEFSOTE3MF9MRURfTU9ERV9UT05fU0NBTgkJMHgwZjAwCisKKyNkZWZpbmUgQVI5MTcwX0xFRF9NT0RFX1RPRkZfU0NBTl9TCQkxMgorI2RlZmluZSBBUjkxNzBfTEVEX01PREVfVE9GRl9TQ0FOCQkweGYwMDAKKworc3RydWN0IGFyOTE3MF9sZWRfbW9kZSB7CisJX19sZTE2IGxlZDsKK307CisKKyNlbmRpZiAvKiBfX0NBUkw5MTcwX1NIQVJFRF9FRVBST01fSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9pbmNsdWRlL3NoYXJlZC9md2NtZC5oIGIvY2FybDkxNzBmdy9pbmNsdWRlL3NoYXJlZC9md2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NDNjODAKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2luY2x1ZGUvc2hhcmVkL2Z3Y21kLmgKQEAgLTAsMCArMSwzMTggQEAKKy8qCisgKiBTaGFyZWQgQXRoZXJvcyBBUjkxNzAgSGVhZGVyCisgKgorICogRmlybXdhcmUgY29tbWFuZCBpbnRlcmZhY2UgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX0NBUkw5MTcwX1NIQVJFRF9GV0NNRF9ICisjZGVmaW5lIF9fQ0FSTDkxNzBfU0hBUkVEX0ZXQ01EX0gKKworI2RlZmluZQlDQVJMOTE3MF9NQVhfQ01EX0xFTgkJNjQKKyNkZWZpbmUJQ0FSTDkxNzBfTUFYX0NNRF9QQVlMT0FEX0xFTgk2MAorCisjZGVmaW5lIENBUkw5MTcwRldfQVBJX01JTl9WRVIJCTEKKyNkZWZpbmUgQ0FSTDkxNzBGV19BUElfTUFYX1ZFUgkJMQorCitlbnVtIGNhcmw5MTcwX2NtZF9vaWRzIHsKKwlDQVJMOTE3MF9DTURfUlJFRwkJPSAweDAwLAorCUNBUkw5MTcwX0NNRF9XUkVHCQk9IDB4MDEsCisJQ0FSTDkxNzBfQ01EX0VDSE8JCT0gMHgwMiwKKwlDQVJMOTE3MF9DTURfU1dSU1QJCT0gMHgwMywKKwlDQVJMOTE3MF9DTURfUkVCT09UCQk9IDB4MDQsCisJQ0FSTDkxNzBfQ01EX0JDTl9DVFJMCQk9IDB4MDUsCisJQ0FSTDkxNzBfQ01EX1JFQURfVFNGCQk9IDB4MDYsCisJQ0FSTDkxNzBfQ01EX1JYX0ZJTFRFUgkJPSAweDA3LAorCUNBUkw5MTcwX0NNRF9XT0wJCT0gMHgwOCwKKwlDQVJMOTE3MF9DTURfVEFMTFkJCT0gMHgwOSwKKworCS8qIENBTSAqLworCUNBUkw5MTcwX0NNRF9FS0VZCQk9IDB4MTAsCisJQ0FSTDkxNzBfQ01EX0RLRVkJCT0gMHgxMSwKKworCS8qIFJGIC8gUEhZICovCisJQ0FSTDkxNzBfQ01EX0ZSRVFVRU5DWQkJPSAweDIwLAorCUNBUkw5MTcwX0NNRF9SRl9JTklUCQk9IDB4MjEsCisJQ0FSTDkxNzBfQ01EX1NZTlRICQk9IDB4MjIsCisJQ0FSTDkxNzBfQ01EX0ZSRVFfU1RBUlQJCT0gMHgyMywKKwlDQVJMOTE3MF9DTURfUFNNCQk9IDB4MjQsCisKKwkvKiBBc3ljaHJvbm91cyBjb21tYW5kIGZsYWcgKi8KKwlDQVJMOTE3MF9DTURfQVNZTkNfRkxBRwkJPSAweDQwLAorCUNBUkw5MTcwX0NNRF9XUkVHX0FTWU5DCQk9IChDQVJMOTE3MF9DTURfV1JFRyB8CisJCQkJCSAgIENBUkw5MTcwX0NNRF9BU1lOQ19GTEFHKSwKKwlDQVJMOTE3MF9DTURfUkVCT09UX0FTWU5DCT0gKENBUkw5MTcwX0NNRF9SRUJPT1QgfAorCQkJCQkgICBDQVJMOTE3MF9DTURfQVNZTkNfRkxBRyksCisJQ0FSTDkxNzBfQ01EX0JDTl9DVFJMX0FTWU5DCT0gKENBUkw5MTcwX0NNRF9CQ05fQ1RSTCB8CisJCQkJCSAgIENBUkw5MTcwX0NNRF9BU1lOQ19GTEFHKSwKKwlDQVJMOTE3MF9DTURfUFNNX0FTWU5DCQk9IChDQVJMOTE3MF9DTURfUFNNIHwKKwkJCQkJICAgQ0FSTDkxNzBfQ01EX0FTWU5DX0ZMQUcpLAorCisJLyogcmVzcG9uc2VzIGFuZCB0cmFwcyAqLworCUNBUkw5MTcwX1JTUF9GTEFHCQk9IDB4YzAsCisJQ0FSTDkxNzBfUlNQX1BSRVRCVFQJCT0gMHhjMCwKKwlDQVJMOTE3MF9SU1BfVFhDT01QCQk9IDB4YzEsCisJQ0FSTDkxNzBfUlNQX0JFQUNPTl9DT05GSUcJPSAweGMyLAorCUNBUkw5MTcwX1JTUF9BVElNCQk9IDB4YzMsCisJQ0FSTDkxNzBfUlNQX1dBVENIRE9HCQk9IDB4YzYsCisJQ0FSTDkxNzBfUlNQX1RFWFQJCT0gMHhjYSwKKwlDQVJMOTE3MF9SU1BfSEVYRFVNUAkJPSAweGNjLAorCUNBUkw5MTcwX1JTUF9SQURBUgkJPSAweGNkLAorCUNBUkw5MTcwX1JTUF9HUElPCQk9IDB4Y2UsCisJQ0FSTDkxNzBfUlNQX0JPT1QJCT0gMHhjZiwKK307CisKK3N0cnVjdCBjYXJsOTE3MF9zZXRfa2V5X2NtZCB7CisJX19sZTE2CQl1c2VyOworCV9fbGUxNgkJa2V5SWQ7CisJX19sZTE2CQl0eXBlOworCXU4CQltYWNBZGRyWzZdOworCXUzMgkJa2V5WzRdOworfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CisjZGVmaW5lIENBUkw5MTcwX1NFVF9LRVlfQ01EX1NJWkUJCTI4CisKK3N0cnVjdCBjYXJsOTE3MF9kaXNhYmxlX2tleV9jbWQgeworCV9fbGUxNgkJdXNlcjsKKwlfX2xlMTYJCXBhZGRpbmc7Cit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKKyNkZWZpbmUgQ0FSTDkxNzBfRElTQUJMRV9LRVlfQ01EX1NJWkUJCTQKKworc3RydWN0IGNhcmw5MTcwX3UzMl9saXN0IHsKKwl1MzIJdmFsc1swXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYXJsOTE3MF9yZWdfbGlzdCB7CisJX19sZTMyCQlyZWdzWzBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNhcmw5MTcwX3dyaXRlX3JlZyB7CisJc3RydWN0IHsKKwkJX19sZTMyCQlhZGRyOworCQlfX2xlMzIJCXZhbDsKKwl9IHJlZ3NbMF0gX19wYWNrZWQ7Cit9IF9fcGFja2VkOworCisjZGVmaW5lCUNBUkw5MTcwRldfUEhZX0hUX0VOQUJMRQkJMHg0CisjZGVmaW5lCUNBUkw5MTcwRldfUEhZX0hUX0RZTjIwNDAJCTB4OAorI2RlZmluZQlDQVJMOTE3MEZXX1BIWV9IVF9FWFRfQ0hBTl9PRkYJCTB4MworI2RlZmluZQlDQVJMOTE3MEZXX1BIWV9IVF9FWFRfQ0hBTl9PRkZfUwkyCisKK3N0cnVjdCBjYXJsOTE3MF9yZl9pbml0IHsKKwlfX2xlMzIJCWZyZXE7CisJdTgJCWh0X3NldHRpbmdzOworCXU4CQlwYWRkaW5nMlszXTsKKwlfX2xlMzIJCWRlbHRhX3Nsb3BlX2NvZWZmX2V4cDsKKwlfX2xlMzIJCWRlbHRhX3Nsb3BlX2NvZWZmX21hbjsKKwlfX2xlMzIJCWRlbHRhX3Nsb3BlX2NvZWZmX2V4cF9zaGdpOworCV9fbGUzMgkJZGVsdGFfc2xvcGVfY29lZmZfbWFuX3NoZ2k7CisJX19sZTMyCQlmaW5pdGVMb29wQ291bnQ7Cit9IF9fcGFja2VkOworI2RlZmluZSBDQVJMOTE3MF9SRl9JTklUX1NJWkUJCTI4CisKK3N0cnVjdCBjYXJsOTE3MF9yZl9pbml0X3Jlc3VsdCB7CisJX19sZTMyCQlyZXQ7CQkvKiBBUjkxNzBfUEhZX1JFR19BR0NfQ09OVFJPTCAqLworfSBfX3BhY2tlZDsKKyNkZWZpbmUJQ0FSTDkxNzBfUkZfSU5JVF9SRVNVTFRfU0laRQk0CisKKyNkZWZpbmUJQ0FSTDkxNzBfUFNNX1NMRUVQCQkweDEwMDAKKyNkZWZpbmUJQ0FSTDkxNzBfUFNNX1NPRlRXQVJFCQkwCisjZGVmaW5lCUNBUkw5MTcwX1BTTV9XQUtFCQkwIC8qIGludGVybmFsbHkgdXNlZC4gKi8KKyNkZWZpbmUJQ0FSTDkxNzBfUFNNX0NPVU5URVIJCTB4ZmZmCisjZGVmaW5lCUNBUkw5MTcwX1BTTV9DT1VOVEVSX1MJCTAKKworc3RydWN0IGNhcmw5MTcwX3BzbSB7CisJX19sZTMyCQlzdGF0ZTsKK30gX19wYWNrZWQ7CisjZGVmaW5lIENBUkw5MTcwX1BTTV9TSVpFCQk0CisKK3N0cnVjdCBjYXJsOTE3MF9yeF9maWx0ZXJfY21kIHsKKwlfX2xlMzIJCXJ4X2ZpbHRlcjsKK30gX19wYWNrZWQ7CisjZGVmaW5lIENBUkw5MTcwX1JYX0ZJTFRFUl9DTURfU0laRQk0CisKKyNkZWZpbmUgQ0FSTDkxNzBfUlhfRklMVEVSX0JBRAkJMHgwMQorI2RlZmluZSBDQVJMOTE3MF9SWF9GSUxURVJfT1RIRVJfUkEJMHgwMgorI2RlZmluZSBDQVJMOTE3MF9SWF9GSUxURVJfREVDUllfRkFJTAkweDA0CisjZGVmaW5lIENBUkw5MTcwX1JYX0ZJTFRFUl9DVExfT1RIRVIJMHgwOAorI2RlZmluZSBDQVJMOTE3MF9SWF9GSUxURVJfQ1RMX1BTUE9MTAkweDEwCisjZGVmaW5lIENBUkw5MTcwX1JYX0ZJTFRFUl9DVExfQkFDS1IJMHgyMAorI2RlZmluZSBDQVJMOTE3MF9SWF9GSUxURVJfTUdNVAkJMHg0MAorI2RlZmluZSBDQVJMOTE3MF9SWF9GSUxURVJfREFUQQkJMHg4MAorI2RlZmluZSBDQVJMOTE3MF9SWF9GSUxURVJfRVZFUllUSElORwkofjApCisKK3N0cnVjdCBjYXJsOTE3MF9iY25fY3RybF9jbWQgeworCV9fbGUzMgkJdmlmX2lkOworCV9fbGUzMgkJbW9kZTsKKwlfX2xlMzIJCWJjbl9hZGRyOworCV9fbGUzMgkJYmNuX2xlbjsKK30gX19wYWNrZWQ7CisjZGVmaW5lIENBUkw5MTcwX0JDTl9DVFJMX0NNRF9TSVpFCTE2CisKKyNkZWZpbmUgQ0FSTDkxNzBfQkNOX0NUUkxfRFJBSU4JMAorI2RlZmluZSBDQVJMOTE3MF9CQ05fQ1RSTF9DQUJfVFJJR0dFUgkxCisKK3N0cnVjdCBjYXJsOTE3MF93b2xfY21kIHsKKwlfX2xlMzIJCWZsYWdzOworCXU4CQltYWNbNl07CisJdTgJCWJzc2lkWzZdOworCV9fbGUzMgkJbnVsbF9pbnRlcnZhbDsKKwlfX2xlMzIJCWZyZWVfZm9yX3VzZTI7CisJX19sZTMyCQltYXNrOworCXU4CQlwYXR0ZXJuWzMyXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQ0FSTDkxNzBfV09MX0NNRF9TSVpFCQk2MAorCisjZGVmaW5lIENBUkw5MTcwX1dPTF9ESVNDT05ORUNUCQkxCisjZGVmaW5lIENBUkw5MTcwX1dPTF9NQUdJQ19QS1QJCTIKKworc3RydWN0IGNhcmw5MTcwX2NtZF9oZWFkIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OAlsZW47CisJCQl1OAljbWQ7CisJCQl1OAlzZXE7CisJCQl1OAlleHQ7CisJCX0gX19wYWNrZWQ7CisKKwkJdTMyIGhkcl9kYXRhOworCX0gX19wYWNrZWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FybDkxNzBfY21kIHsKKwlzdHJ1Y3QgY2FybDkxNzBfY21kX2hlYWQgaGRyOworCXVuaW9uIHsKKwkJc3RydWN0IGNhcmw5MTcwX3NldF9rZXlfY21kCXNldGtleTsKKwkJc3RydWN0IGNhcmw5MTcwX2Rpc2FibGVfa2V5X2NtZAlkaXNhYmxla2V5OworCQlzdHJ1Y3QgY2FybDkxNzBfdTMyX2xpc3QJZWNobzsKKwkJc3RydWN0IGNhcmw5MTcwX3JlZ19saXN0CXJyZWc7CisJCXN0cnVjdCBjYXJsOTE3MF93cml0ZV9yZWcJd3JlZzsKKwkJc3RydWN0IGNhcmw5MTcwX3JmX2luaXQJCXJmX2luaXQ7CisJCXN0cnVjdCBjYXJsOTE3MF9wc20JCXBzbTsKKwkJc3RydWN0IGNhcmw5MTcwX3dvbF9jbWQJCXdvbDsKKwkJc3RydWN0IGNhcmw5MTcwX2Jjbl9jdHJsX2NtZAliY25fY3RybDsKKwkJc3RydWN0IGNhcmw5MTcwX3J4X2ZpbHRlcl9jbWQJcnhfZmlsdGVyOworCQl1OCBkYXRhW0NBUkw5MTcwX01BWF9DTURfUEFZTE9BRF9MRU5dOworCX0gX19wYWNrZWQ7Cit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKKworI2RlZmluZQlDQVJMOTE3MF9UWF9TVEFUVVNfUVVFVUUJMworI2RlZmluZQlDQVJMOTE3MF9UWF9TVEFUVVNfUVVFVUVfUwkwCisjZGVmaW5lCUNBUkw5MTcwX1RYX1NUQVRVU19SSVhfUwkyCisjZGVmaW5lCUNBUkw5MTcwX1RYX1NUQVRVU19SSVgJCSgzIDw8IENBUkw5MTcwX1RYX1NUQVRVU19SSVhfUykKKyNkZWZpbmUJQ0FSTDkxNzBfVFhfU1RBVFVTX1RSSUVTX1MJNAorI2RlZmluZQlDQVJMOTE3MF9UWF9TVEFUVVNfVFJJRVMJKDcgPDwgQ0FSTDkxNzBfVFhfU1RBVFVTX1RSSUVTX1MpCisjZGVmaW5lCUNBUkw5MTcwX1RYX1NUQVRVU19TVUNDRVNTCTB4ODAKKworI2lmZGVmIF9fQ0FSTDkxNzBGV19fCisvKgorICogTk9URToKKyAqIEJvdGggc3RydWN0cyBbY2FybDkxNzBfdHhfc3RhdHVzIGFuZCBfY2FybDkxNzBfdHhfc3RhdHVzXQorICogbmVlZCB0byBiZSAiYml0IGZvciBiaXQiIGluIHN5bmMuCisgKi8KK3N0cnVjdCBjYXJsOTE3MF90eF9zdGF0dXMgeworCS8qCisJICogQmV3YXJlIG9mIGNvbXBpbGVyIGJ1Z3MgaW4gYWxsIGdjYyBwcmUgNC40IQorCSAqLworCisJdTggY29va2llOworCXU4IHF1ZXVlOjI7CisJdTggcml4OjI7CisJdTggdHJpZXM6MzsKKwl1OCBzdWNjZXNzOjE7Cit9IF9fcGFja2VkOworI2VuZGlmIC8qIF9fQ0FSTDkxNzBGV19fICovCisKK3N0cnVjdCBfY2FybDkxNzBfdHhfc3RhdHVzIHsKKwkvKgorCSAqIFRoaXMgdmVyc2lvbiBzaG91bGQgYmUgaW1tdW5lIHRvIGFsbCBhbGlnbm1lbnQgYnVncy4KKwkgKi8KKworCXU4IGNvb2tpZTsKKwl1OCBpbmZvOworfSBfX3BhY2tlZDsKKyNkZWZpbmUgQ0FSTDkxNzBfVFhfU1RBVFVTX1NJWkUJCTIKKworI2RlZmluZQlDQVJMOTE3MF9SU1BfVFhfU1RBVFVTX05VTQkoQ0FSTDkxNzBfTUFYX0NNRF9QQVlMT0FEX0xFTiAvCVwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N0YXR1cykpCisKKyNkZWZpbmUJQ0FSTDkxNzBfVFhfTUFYX1JBVEVfVFJJRVMJNworCisjZGVmaW5lCUNBUkw5MTcwX1RYX01BWF9SQVRFUwkJNAorI2RlZmluZQlDQVJMOTE3MF9UWF9NQVhfUkVUUllfUkFURVMJKENBUkw5MTcwX1RYX01BWF9SQVRFUyAtIDEpCisjZGVmaW5lCUNBUkw5MTcwX0VSUl9NQUdJQwkJIkVSUjoiCisjZGVmaW5lCUNBUkw5MTcwX0JVR19NQUdJQwkJIkJVRzoiCisKK3N0cnVjdCBjYXJsOTE3MF9ncGlvIHsKKwlfX2xlMzIgZ3BpbzsKK30gX19wYWNrZWQ7CisjZGVmaW5lIENBUkw5MTcwX0dQSU9fU0laRQkJNAorCitzdHJ1Y3QgY2FybDkxNzBfdHNmX3JzcCB7CisJdW5pb24geworCQlfX2xlMzIgdHNmWzJdOworCQlfX2xlNjQgdHNmXzY0OworCX0gX19wYWNrZWQ7Cit9IF9fcGFja2VkOworI2RlZmluZSBDQVJMOTE3MF9UU0ZfUlNQX1NJWkUJCTgKKworc3RydWN0IGNhcmw5MTcwX3RhbGx5X3JzcCB7CisJX19sZTMyIGFjdGl2ZTsKKwlfX2xlMzIgY2NhOworCV9fbGUzMiB0eF90aW1lOworCV9fbGUzMiByeF90b3RhbDsKKwlfX2xlMzIgcnhfb3ZlcnJ1bjsKKwlfX2xlMzIgdGljazsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYXJsOTE3MF9yc3AgeworCXN0cnVjdCBjYXJsOTE3MF9jbWRfaGVhZCBoZHI7CisKKwl1bmlvbiB7CisJCXN0cnVjdCBjYXJsOTE3MF9yZl9pbml0X3Jlc3VsdAlyZl9pbml0X3JlczsKKwkJc3RydWN0IGNhcmw5MTcwX3UzMl9saXN0CXJyZWdfcmVzOworCQlzdHJ1Y3QgY2FybDkxNzBfdTMyX2xpc3QJZWNobzsKKyNpZmRlZiBfX0NBUkw5MTcwRldfXworCQlzdHJ1Y3QgY2FybDkxNzBfdHhfc3RhdHVzCXR4X3N0YXR1c1swXTsKKyNlbmRpZiAvKiBfX0NBUkw5MTcwRldfXyAqLworCQlzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N0YXR1cwlfdHhfc3RhdHVzWzBdOworCQlzdHJ1Y3QgY2FybDkxNzBfZ3BpbwkJZ3BpbzsKKwkJc3RydWN0IGNhcmw5MTcwX3RzZl9yc3AJCXRzZjsKKwkJc3RydWN0IGNhcmw5MTcwX3BzbQkJcHNtOworCQlzdHJ1Y3QgY2FybDkxNzBfdGFsbHlfcnNwCXRhbGx5OworCQl1OCBkYXRhW0NBUkw5MTcwX01BWF9DTURfUEFZTE9BRF9MRU5dOworCX0gX19wYWNrZWQ7Cit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKKworI2VuZGlmIC8qIF9fQ0FSTDkxNzBfU0hBUkVEX0ZXQ01EX0ggKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvaW5jbHVkZS9zaGFyZWQvZndkZXNjLmggYi9jYXJsOTE3MGZ3L2luY2x1ZGUvc2hhcmVkL2Z3ZGVzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ODQ4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2luY2x1ZGUvc2hhcmVkL2Z3ZGVzYy5oCkBAIC0wLDAgKzEsMjc3IEBACisvKgorICogU2hhcmVkIENBUkw5MTcwIEhlYWRlcgorICoKKyAqIEZpcm13YXJlIGRlc2NyaXB0b3IgZm9ybWF0CisgKgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKi8KKworI2lmbmRlZiBfX0NBUkw5MTcwX1NIQVJFRF9GV0RFU0NfSAorI2RlZmluZSBfX0NBUkw5MTcwX1NIQVJFRF9GV0RFU0NfSAorCisvKiBOT1RFOiBEb24ndCBtZXNzIHdpdGggdGhlIG9yZGVyIG9mIHRoZSBmbGFncyEgKi8KK2VudW0gY2FybDkxNzBmd19mZWF0dXJlX2xpc3QgeworCS8qIEFsd2F5cyBzZXQgKi8KKwlDQVJMOTE3MEZXX0RVTU1ZX0ZFQVRVUkUsCisKKwkvKgorCSAqIEluZGljYXRlcyB0aGF0IHRoaXMgaW1hZ2UgaGFzIHNwZWNpYWwgYm9vdCBibG9jayB3aGljaCBwcmV2ZW50cworCSAqIGxlZ2FjeSBkcml2ZXJzIHRvIGRyaXZlIHRoZSBmaXJtd2FyZS4KKwkgKi8KKwlDQVJMOTE3MEZXX01JTklCT09ULAorCisJLyogdXNiIHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhlIGZpcm13YXJlICovCisJQ0FSTDkxNzBGV19VU0JfSU5JVF9GSVJNV0FSRSwKKworCS8qIGNvbW1hbmQgdHJhcHMgJiBub3RpZmljYXRpb25zIGFyZSBzZW5kIHRocm91Z2ggRVAyICovCisJQ0FSTDkxNzBGV19VU0JfUkVTUF9FUDIsCisKKwkvKiB1c2IgZG93bmxvYWQgKGFwcCAtPiBmdykgc3RyZWFtICovCisJQ0FSTDkxNzBGV19VU0JfRE9XTl9TVFJFQU0sCisKKwkvKiB1c2IgdXBsb2FkIChmdyAtPiBhcHApIHN0cmVhbSAqLworCUNBUkw5MTcwRldfVVNCX1VQX1NUUkVBTSwKKworCS8qIHVudXNhYmxlIC0gcmVzZXJ2ZWQgdG8gZmxhZyBub24tZnVuY3Rpb25hbCBkZWJ1ZyBmaXJtd2FyZXMgKi8KKwlDQVJMOTE3MEZXX1VOVVNBQkxFLAorCisJLyogQVI5MTcwX0NNRF9SRl9JTklULCBBUjkxNzBfQ01EX0ZSRVFfU1RBUlQsIEFSOTE3MF9DTURfRlJFUVVFTkNZICovCisJQ0FSTDkxNzBGV19DT01NQU5EX1BIWSwKKworCS8qIEFSOTE3MF9DTURfRUtFWSwgQVI5MTcwX0NNRF9ES0VZICovCisJQ0FSTDkxNzBGV19DT01NQU5EX0NBTSwKKworCS8qIEZpcm13YXJlIGhhcyBhIHNvZnR3YXJlIENvbnRlbnQgQWZ0ZXIgQmVhY29uIFF1ZXVlaW5nIG1lY2hhbmlzbSAqLworCUNBUkw5MTcwRldfV0xBTlRYX0NBQiwKKworCS8qIFRoZSBmaXJtd2FyZSBpcyBjYXBhYmxlIG9mIHJlc3BvbmRpbmcgdG8gaW5jb21pbmcgQkFSIGZyYW1lcyAqLworCUNBUkw5MTcwRldfSEFORExFX0JBQ0tfUkVRLAorCisJLyogR1BJTyBJbnRlcnJ1cHQgfCBDQVJMOTE3MF9SU1BfR1BJTyAqLworCUNBUkw5MTcwRldfR1BJT19JTlRFUlJVUFQsCisKKwkvKiBGaXJtd2FyZSBQU00gc3VwcG9ydCB8IENBUkw5MTcwX0NNRF9QU00gKi8KKwlDQVJMOTE3MEZXX1BTTSwKKworCS8qIEZpcm13YXJlIFJYIGZpbHRlciB8IENBUkw5MTcwX0NNRF9SWF9GSUxURVIgKi8KKwlDQVJMOTE3MEZXX1JYX0ZJTFRFUiwKKworCS8qIFdha2UgdXAgb24gV0xBTiAqLworCUNBUkw5MTcwRldfV09MLAorCisJLyogRmlybXdhcmUgc3VwcG9ydHMgUFNNIGluIHRoZSA1R0haIEJhbmQgKi8KKwlDQVJMOTE3MEZXX0ZJWEVEXzVHSFpfUFNNLAorCisJLyogSFcgKEFOSSwgQ0NBLCBNSUIpIHRhbGx5IGNvdW50ZXJzICovCisJQ0FSTDkxNzBGV19IV19DT1VOVEVSUywKKworCS8qIEZpcm13YXJlIHdpbGwgcGFzcyBCQSB3aGVuIEJBUnMgYXJlIHF1ZXVlZCAqLworCUNBUkw5MTcwRldfUlhfQkFfRklMVEVSLAorCisJLyogS0VFUCBMQVNUICovCisJX19DQVJMOTE3MEZXX0ZFQVRVUkVfTlVNCit9OworCisjZGVmaW5lIE9UVVNfTUFHSUMJIk9UQVIiCisjZGVmaW5lIE1PVERfTUFHSUMJIk1PVEQiCisjZGVmaW5lIEZJWF9NQUdJQwkiRklYXDAiCisjZGVmaW5lIERCR19NQUdJQwkiREJHXDAiCisjZGVmaW5lIENIS19NQUdJQwkiQ0hLXDAiCisjZGVmaW5lIFRYU1FfTUFHSUMJIlRYU1EiCisjZGVmaW5lIFdPTF9NQUdJQwkiV09MXDAiCisjZGVmaW5lIExBU1RfTUFHSUMJIkxBU1QiCisKKyNkZWZpbmUgQ0FSTDkxNzBGV19TRVRfREFZKGQpICgoKGQpIC0gMSkgJSAzMSkKKyNkZWZpbmUgQ0FSTDkxNzBGV19TRVRfTU9OVEgobSkgKCgoKG0pIC0gMSkgJSAxMikgKiAzMSkKKyNkZWZpbmUgQ0FSTDkxNzBGV19TRVRfWUVBUih5KSAoKCh5KSAtIDEwKSAqIDM3MikKKworI2RlZmluZSBDQVJMOTE3MEZXX0dFVF9EQVkoZCkgKCgoZCkgJSAzMSkgKyAxKQorI2RlZmluZSBDQVJMOTE3MEZXX0dFVF9NT05USChtKSAoKCgobSkgLyAzMSkgJSAxMikgKyAxKQorI2RlZmluZSBDQVJMOTE3MEZXX0dFVF9ZRUFSKHkpICgoeSkgLyAzNzIgKyAxMCkKKworI2RlZmluZSBDQVJMOTE3MEZXX01BR0lDX1NJWkUJCQk0CisKK3N0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCB7CisJdTgJbWFnaWNbQ0FSTDkxNzBGV19NQUdJQ19TSVpFXTsKKwlfX2xlMTYgbGVuZ3RoOworCXU4IG1pbl92ZXI7CisJdTggY3VyX3ZlcjsKK30gX19wYWNrZWQ7CisjZGVmaW5lIENBUkw5MTcwRldfREVTQ19IRUFEX1NJWkUJCQlcCisJKHNpemVvZihzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQpKQorCisjZGVmaW5lIENBUkw5MTcwRldfT1RVU19ERVNDX01JTl9WRVIJCTYKKyNkZWZpbmUgQ0FSTDkxNzBGV19PVFVTX0RFU0NfQ1VSX1ZFUgkJNworc3RydWN0IGNhcmw5MTcwZndfb3R1c19kZXNjIHsKKwlzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgaGVhZDsKKwlfX2xlMzIgZmVhdHVyZV9zZXQ7CisJX19sZTMyIGZ3X2FkZHJlc3M7CisJX19sZTMyIGJjbl9hZGRyOworCV9fbGUxNiBiY25fbGVuOworCV9fbGUxNiBtaW5pYm9vdF9zaXplOworCV9fbGUxNiB0eF9mcmFnX2xlbjsKKwlfX2xlMTYgcnhfbWF4X2ZyYW1lX2xlbjsKKwl1OCB0eF9kZXNjczsKKwl1OCBjbWRfYnVmczsKKwl1OCBhcGlfdmVyOworCXU4IHZpZl9udW07Cit9IF9fcGFja2VkOworI2RlZmluZSBDQVJMOTE3MEZXX09UVVNfREVTQ19TSVpFCQkJXAorCShzaXplb2Yoc3RydWN0IGNhcmw5MTcwZndfb3R1c19kZXNjKSkKKworI2RlZmluZSBDQVJMOTE3MEZXX01PVERfU1RSSU5HX0xFTgkJCTI0CisjZGVmaW5lIENBUkw5MTcwRldfTU9URF9SRUxFQVNFX0xFTgkJCTIwCisjZGVmaW5lIENBUkw5MTcwRldfTU9URF9ERVNDX01JTl9WRVIJCQkxCisjZGVmaW5lIENBUkw5MTcwRldfTU9URF9ERVNDX0NVUl9WRVIJCQkyCitzdHJ1Y3QgY2FybDkxNzBmd19tb3RkX2Rlc2MgeworCXN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCBoZWFkOworCV9fbGUzMiBmd195ZWFyX21vbnRoX2RheTsKKwljaGFyIGRlc2NbQ0FSTDkxNzBGV19NT1REX1NUUklOR19MRU5dOworCWNoYXIgcmVsZWFzZVtDQVJMOTE3MEZXX01PVERfUkVMRUFTRV9MRU5dOworfSBfX3BhY2tlZDsKKyNkZWZpbmUgQ0FSTDkxNzBGV19NT1REX0RFU0NfU0laRQkJCVwKKwkoc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MGZ3X21vdGRfZGVzYykpCisKKyNkZWZpbmUgQ0FSTDkxNzBGV19GSVhfREVTQ19NSU5fVkVSCQkJMQorI2RlZmluZSBDQVJMOTE3MEZXX0ZJWF9ERVNDX0NVUl9WRVIJCQkyCitzdHJ1Y3QgY2FybDkxNzBmd19maXhfZW50cnkgeworCV9fbGUzMiBhZGRyZXNzOworCV9fbGUzMiBtYXNrOworCV9fbGUzMiB2YWx1ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYXJsOTE3MGZ3X2ZpeF9kZXNjIHsKKwlzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgaGVhZDsKKwlzdHJ1Y3QgY2FybDkxNzBmd19maXhfZW50cnkgZGF0YVswXTsKK30gX19wYWNrZWQ7CisjZGVmaW5lIENBUkw5MTcwRldfRklYX0RFU0NfU0laRQkJCVwKKwkoc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MGZ3X2ZpeF9kZXNjKSkKKworI2RlZmluZSBDQVJMOTE3MEZXX0RCR19ERVNDX01JTl9WRVIJCQkxCisjZGVmaW5lIENBUkw5MTcwRldfREJHX0RFU0NfQ1VSX1ZFUgkJCTMKK3N0cnVjdCBjYXJsOTE3MGZ3X2RiZ19kZXNjIHsKKwlzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgaGVhZDsKKworCV9fbGUzMiBib2dvY2xvY2tfYWRkcjsKKwlfX2xlMzIgY291bnRlcl9hZGRyOworCV9fbGUzMiByeF90b3RhbF9hZGRyOworCV9fbGUzMiByeF9vdmVycnVuX2FkZHI7CisJX19sZTMyIHJ4X2ZpbHRlcjsKKworCS8qIFB1dCB5b3VyIGRlYnVnZ2luZyBkZWZpbml0aW9ucyBoZXJlICovCit9IF9fcGFja2VkOworI2RlZmluZSBDQVJMOTE3MEZXX0RCR19ERVNDX1NJWkUJCQlcCisJKHNpemVvZihzdHJ1Y3QgY2FybDkxNzBmd19kYmdfZGVzYykpCisKKyNkZWZpbmUgQ0FSTDkxNzBGV19DSEtfREVTQ19NSU5fVkVSCQkJMQorI2RlZmluZSBDQVJMOTE3MEZXX0NIS19ERVNDX0NVUl9WRVIJCQkyCitzdHJ1Y3QgY2FybDkxNzBmd19jaGtfZGVzYyB7CisJc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkIGhlYWQ7CisJX19sZTMyIGZ3X2NyYzMyOworCV9fbGUzMiBoZHJfY3JjMzI7Cit9IF9fcGFja2VkOworI2RlZmluZSBDQVJMOTE3MEZXX0NIS19ERVNDX1NJWkUJCQlcCisJKHNpemVvZihzdHJ1Y3QgY2FybDkxNzBmd19jaGtfZGVzYykpCisKKyNkZWZpbmUgQ0FSTDkxNzBGV19UWFNRX0RFU0NfTUlOX1ZFUgkJCTEKKyNkZWZpbmUgQ0FSTDkxNzBGV19UWFNRX0RFU0NfQ1VSX1ZFUgkJCTEKK3N0cnVjdCBjYXJsOTE3MGZ3X3R4c3FfZGVzYyB7CisJc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkIGhlYWQ7CisKKwlfX2xlMzIgc2VxX3RhYmxlX2FkZHI7Cit9IF9fcGFja2VkOworI2RlZmluZSBDQVJMOTE3MEZXX1RYU1FfREVTQ19TSVpFCQkJXAorCShzaXplb2Yoc3RydWN0IGNhcmw5MTcwZndfdHhzcV9kZXNjKSkKKworI2RlZmluZSBDQVJMOTE3MEZXX1dPTF9ERVNDX01JTl9WRVIJCQkxCisjZGVmaW5lIENBUkw5MTcwRldfV09MX0RFU0NfQ1VSX1ZFUgkJCTEKK3N0cnVjdCBjYXJsOTE3MGZ3X3dvbF9kZXNjIHsKKwlzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgaGVhZDsKKworCV9fbGUzMiBzdXBwb3J0ZWRfdHJpZ2dlcnM7CS8qIENBUkw5MTcwX1dPTF8gKi8KK30gX19wYWNrZWQ7CisjZGVmaW5lIENBUkw5MTcwRldfV09MX0RFU0NfU0laRQkJCVwKKwkoc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MGZ3X3dvbF9kZXNjKSkKKworI2RlZmluZSBDQVJMOTE3MEZXX0xBU1RfREVTQ19NSU5fVkVSCQkJMQorI2RlZmluZSBDQVJMOTE3MEZXX0xBU1RfREVTQ19DVVJfVkVSCQkJMgorc3RydWN0IGNhcmw5MTcwZndfbGFzdF9kZXNjIHsKKwlzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgaGVhZDsKK30gX19wYWNrZWQ7CisjZGVmaW5lIENBUkw5MTcwRldfTEFTVF9ERVNDX1NJWkUJCQlcCisJKHNpemVvZihzdHJ1Y3QgY2FybDkxNzBmd19maXhfZGVzYykpCisKKyNkZWZpbmUgQ0FSTDkxNzBGV19ERVNDX01BWF9MRU5HVEgJCQk4MTkyCisKKyNkZWZpbmUgQ0FSTDkxNzBGV19GSUxMX0RFU0MoX21hZ2ljLCBfbGVuZ3RoLCBfbWluX3ZlciwgX2N1cl92ZXIpCVwKKwkuaGVhZCA9IHsJCQkJCQkJXAorCQkubWFnaWMgPSBfbWFnaWMsCQkJCQlcCisJCS5sZW5ndGggPSBjcHVfdG9fbGUxNihfbGVuZ3RoKSwJCQkJXAorCQkubWluX3ZlciA9IF9taW5fdmVyLAkJCQkJXAorCQkuY3VyX3ZlciA9IF9jdXJfdmVyLAkJCQkJXAorCX0KKworc3RhdGljIGlubGluZSB2b2lkIGNhcmw5MTcwZndfZmlsbF9kZXNjKHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqaGVhZCwKKwkJCQkJIHU4IG1hZ2ljW0NBUkw5MTcwRldfTUFHSUNfU0laRV0sCisJCQkJCSBfX2xlMTYgbGVuZ3RoLCB1OCBtaW5fdmVyLCB1OCBjdXJfdmVyKQoreworCWhlYWQtPm1hZ2ljWzBdID0gbWFnaWNbMF07CisJaGVhZC0+bWFnaWNbMV0gPSBtYWdpY1sxXTsKKwloZWFkLT5tYWdpY1syXSA9IG1hZ2ljWzJdOworCWhlYWQtPm1hZ2ljWzNdID0gbWFnaWNbM107CisKKwloZWFkLT5sZW5ndGggPSBsZW5ndGg7CisJaGVhZC0+bWluX3ZlciA9IG1pbl92ZXI7CisJaGVhZC0+Y3VyX3ZlciA9IGN1cl92ZXI7Cit9CisKKyNkZWZpbmUgY2FybDkxNzBmd19mb3JfZWFjaF9oZHIoZGVzYywgZndfZGVzYykJCQkJXAorCWZvciAoZGVzYyA9IGZ3X2Rlc2M7CQkJCQkJXAorCSAgICAgbWVtY21wKGRlc2MtPm1hZ2ljLCBMQVNUX01BR0lDLCBDQVJMOTE3MEZXX01BR0lDX1NJWkUpICYmCVwKKwkgICAgIGxlMTZfdG9fY3B1KGRlc2MtPmxlbmd0aCkgPj0gQ0FSTDkxNzBGV19ERVNDX0hFQURfU0laRSAmJglcCisJICAgICBsZTE2X3RvX2NwdShkZXNjLT5sZW5ndGgpIDwgQ0FSTDkxNzBGV19ERVNDX01BWF9MRU5HVEg7CVwKKwkgICAgIGRlc2MgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylkZXNjICsgbGUxNl90b19jcHUoZGVzYy0+bGVuZ3RoKSkpCisKKyNkZWZpbmUgQ0hFQ0tfSERSX1ZFUlNJT04oaGVhZCwgX21pbl92ZXIpCQkJCVwKKwkoKChoZWFkKS0+Y3VyX3ZlciA8IF9taW5fdmVyKSB8fCAoKGhlYWQpLT5taW5fdmVyID4gX21pbl92ZXIpKQlcCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYXJsOTE3MGZ3X3N1cHBvcnRzKF9fbGUzMiBsaXN0LCB1OCBmZWF0dXJlKQoreworCXJldHVybiBsZTMyX3RvX2NwdShsaXN0KSAmIEJJVChmZWF0dXJlKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNhcmw5MTcwZndfZGVzY19jbXAoY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkICpoZWFkLAorCQkJCSAgICAgICBjb25zdCB1OCBkZXNjaWRbQ0FSTDkxNzBGV19NQUdJQ19TSVpFXSwKKwkJCQkgICAgICAgdTE2IG1pbl9sZW4sIHU4IGNvbXBhdGlibGVfcmV2aXNpb24pCit7CisJaWYgKGRlc2NpZFswXSA9PSBoZWFkLT5tYWdpY1swXSAmJiBkZXNjaWRbMV0gPT0gaGVhZC0+bWFnaWNbMV0gJiYKKwkgICAgZGVzY2lkWzJdID09IGhlYWQtPm1hZ2ljWzJdICYmIGRlc2NpZFszXSA9PSBoZWFkLT5tYWdpY1szXSAmJgorCSAgICAhQ0hFQ0tfSERSX1ZFUlNJT04oaGVhZCwgY29tcGF0aWJsZV9yZXZpc2lvbikgJiYKKwkgICAgKGxlMTZfdG9fY3B1KGhlYWQtPmxlbmd0aCkgPj0gbWluX2xlbikpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCisjZGVmaW5lIENBUkw5MTcwRldfTUlOX1NJWkUJMzIKKyNkZWZpbmUgQ0FSTDkxNzBGV19NQVhfU0laRQkxNjM4NAorCitzdGF0aWMgaW5saW5lIGJvb2wgY2FybDkxNzBmd19zaXplX2NoZWNrKHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIChsZW4gPD0gQ0FSTDkxNzBGV19NQVhfU0laRSAmJiBsZW4gPj0gQ0FSTDkxNzBGV19NSU5fU0laRSk7Cit9CisKKyNlbmRpZiAvKiBfX0NBUkw5MTcwX1NIQVJFRF9GV0RFU0NfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9pbmNsdWRlL3NoYXJlZC9ody5oIGIvY2FybDkxNzBmdy9pbmNsdWRlL3NoYXJlZC9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhODM0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2luY2x1ZGUvc2hhcmVkL2h3LmgKQEAgLTAsMCArMSw4MTcgQEAKKy8qCisgKiBTaGFyZWQgQXRoZXJvcyBBUjkxNzAgSGVhZGVyCisgKgorICogUmVnaXN0ZXIgbWFwLCBoYXJkd2FyZS1zcGVjaWZpYyBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgKiBwZXJtaXNzaW9uIG5vdGljZToKKyAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqCisgKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9fQ0FSTDkxNzBfU0hBUkVEX0hXX0gKKyNkZWZpbmUgX19DQVJMOTE3MF9TSEFSRURfSFdfSAorCisvKiBIaWdoIFNwZWVkIFVBUlQgKi8KKyNkZWZpbmUJQVI5MTcwX1VBUlRfUkVHX0JBU0UJCQkweDFjMDAwMAorCisvKiBEZWZpbml0aW9ucyBvZiBpbnRlcnJ1cHQgcmVnaXN0ZXJzICovCisjZGVmaW5lCUFSOTE3MF9VQVJUX1JFR19SWF9CVUZGRVIJCShBUjkxNzBfVUFSVF9SRUdfQkFTRSArIDB4MDAwKQorI2RlZmluZQlBUjkxNzBfVUFSVF9SRUdfVFhfSE9MRElORwkJKEFSOTE3MF9VQVJUX1JFR19CQVNFICsgMHgwMDQpCisjZGVmaW5lCUFSOTE3MF9VQVJUX1JFR19GSUZPX0NPTlRST0wJCShBUjkxNzBfVUFSVF9SRUdfQkFTRSArIDB4MDEwKQorI2RlZmluZQkJQVI5MTcwX1VBUlRfRklGT19DVFJMX1JFU0VUX1JYX0ZJRk8JMHgwMgorI2RlZmluZQkJQVI5MTcwX1VBUlRfRklGT19DVFJMX1JFU0VUX1RYX0ZJRk8JMHgwNAorCisjZGVmaW5lCUFSOTE3MF9VQVJUX1JFR19MSU5FX0NPTlRST0wJCShBUjkxNzBfVUFSVF9SRUdfQkFTRSArIDB4MDE0KQorI2RlZmluZQlBUjkxNzBfVUFSVF9SRUdfTU9ERU1fQ09OVFJPTAkJKEFSOTE3MF9VQVJUX1JFR19CQVNFICsgMHgwMTgpCisjZGVmaW5lCQlBUjkxNzBfVUFSVF9NT0RFTV9DVFJMX0RUUl9CSVQJCTB4MDEKKyNkZWZpbmUJCUFSOTE3MF9VQVJUX01PREVNX0NUUkxfUlRTX0JJVAkJMHgwMgorI2RlZmluZQkJQVI5MTcwX1VBUlRfTU9ERU1fQ1RSTF9JTlRFUk5BTF9MT09QX0JBQ0sJMHgxMAorI2RlZmluZQkJQVI5MTcwX1VBUlRfTU9ERU1fQ1RSTF9BVVRPX1JUUwkJMHgyMAorI2RlZmluZQkJQVI5MTcwX1VBUlRfTU9ERU1fQ1RSTF9BVVRPX0NUUgkJMHg0MAorCisjZGVmaW5lCUFSOTE3MF9VQVJUX1JFR19MSU5FX1NUQVRVUwkJKEFSOTE3MF9VQVJUX1JFR19CQVNFICsgMHgwMWMpCisjZGVmaW5lCQlBUjkxNzBfVUFSVF9MSU5FX1NUU19SWF9EQVRBX1JFQURZCTB4MDEKKyNkZWZpbmUJCUFSOTE3MF9VQVJUX0xJTkVfU1RTX1JYX0JVRkZFUl9PVkVSUlVOCTB4MDIKKyNkZWZpbmUJCUFSOTE3MF9VQVJUX0xJTkVfU1RTX1JYX0JSRUFLX0lORAkweDEwCisjZGVmaW5lCQlBUjkxNzBfVUFSVF9MSU5FX1NUU19UWF9GSUZPX05FQVJfRU1QVFkJMHgyMAorI2RlZmluZQkJQVI5MTcwX1VBUlRfTElORV9TVFNfVFJBTlNNSVRURVJfRU1QVFkJMHg0MAorCisjZGVmaW5lCUFSOTE3MF9VQVJUX1JFR19NT0RFTV9TVEFUVVMJCShBUjkxNzBfVUFSVF9SRUdfQkFTRSArIDB4MDIwKQorI2RlZmluZQkJQVI5MTcwX1VBUlRfTU9ERU1fU1RTX0NUU19DSEFOR0UJMHgwMQorI2RlZmluZQkJQVI5MTcwX1VBUlRfTU9ERU1fU1RTX0RTUl9DSEFOR0UJMHgwMgorI2RlZmluZQkJQVI5MTcwX1VBUlRfTU9ERU1fU1RTX0RDRF9DSEFOR0UJMHgwOAorI2RlZmluZQkJQVI5MTcwX1VBUlRfTU9ERU1fU1RTX0NUU19DT01QTAkJMHgxMAorI2RlZmluZQkJQVI5MTcwX1VBUlRfTU9ERU1fU1RTX0RTUl9DT01QTAkJMHgyMAorI2RlZmluZQkJQVI5MTcwX1VBUlRfTU9ERU1fU1RTX0RDRF9DT01QTAkJMHg4MAorCisjZGVmaW5lCUFSOTE3MF9VQVJUX1JFR19TQ1JBVENICQkJKEFSOTE3MF9VQVJUX1JFR19CQVNFICsgMHgwMjQpCisjZGVmaW5lCUFSOTE3MF9VQVJUX1JFR19ESVZJU09SX0xTQgkJKEFSOTE3MF9VQVJUX1JFR19CQVNFICsgMHgwMjgpCisjZGVmaW5lCUFSOTE3MF9VQVJUX1JFR19ESVZJU09SX01TQgkJKEFSOTE3MF9VQVJUX1JFR19CQVNFICsgMHgwMmMpCisjZGVmaW5lCUFSOTE3MF9VQVJUX1JFR19XT1JEX1JYX0JVRkZFUgkJKEFSOTE3MF9VQVJUX1JFR19CQVNFICsgMHgwMzQpCisjZGVmaW5lCUFSOTE3MF9VQVJUX1JFR19XT1JEX1RYX0hPTERJTkcJCShBUjkxNzBfVUFSVF9SRUdfQkFTRSArIDB4MDM4KQorI2RlZmluZQlBUjkxNzBfVUFSVF9SRUdfRklGT19DT1VOVAkJKEFSOTE3MF9VQVJUX1JFR19CQVNFICsgMHgwM2MpCisjZGVmaW5lCUFSOTE3MF9VQVJUX1JFR19SRU1BSU5ERVIJCShBUjkxNzBfVUFSVF9SRUdfQkFTRSArIDB4MDRjKQorCisvKiBUaW1lciAqLworI2RlZmluZQlBUjkxNzBfVElNRVJfUkVHX0JBU0UJCQkweDFjMTAwMAorCisjZGVmaW5lCUFSOTE3MF9USU1FUl9SRUdfV0FUQ0hfRE9HCQkoQVI5MTcwX1RJTUVSX1JFR19CQVNFICsgMHgwMDApCisjZGVmaW5lCUFSOTE3MF9USU1FUl9SRUdfVElNRVIwCQkJKEFSOTE3MF9USU1FUl9SRUdfQkFTRSArIDB4MDEwKQorI2RlZmluZQlBUjkxNzBfVElNRVJfUkVHX1RJTUVSMQkJCShBUjkxNzBfVElNRVJfUkVHX0JBU0UgKyAweDAxNCkKKyNkZWZpbmUJQVI5MTcwX1RJTUVSX1JFR19USU1FUjIJCQkoQVI5MTcwX1RJTUVSX1JFR19CQVNFICsgMHgwMTgpCisjZGVmaW5lCUFSOTE3MF9USU1FUl9SRUdfVElNRVIzCQkJKEFSOTE3MF9USU1FUl9SRUdfQkFTRSArIDB4MDFjKQorI2RlZmluZQlBUjkxNzBfVElNRVJfUkVHX1RJTUVSNAkJCShBUjkxNzBfVElNRVJfUkVHX0JBU0UgKyAweDAyMCkKKyNkZWZpbmUJQVI5MTcwX1RJTUVSX1JFR19DT05UUk9MCQkoQVI5MTcwX1RJTUVSX1JFR19CQVNFICsgMHgwMjQpCisjZGVmaW5lCQlBUjkxNzBfVElNRVJfQ1RSTF9ESVNBQkxFX0NMT0NLCQkweDEwMAorCisjZGVmaW5lCUFSOTE3MF9USU1FUl9SRUdfSU5URVJSVVBUCQkoQVI5MTcwX1RJTUVSX1JFR19CQVNFICsgMHgwMjgpCisjZGVmaW5lCQlBUjkxNzBfVElNRVJfSU5UX1RJTUVSMAkJCTB4MDAxCisjZGVmaW5lCQlBUjkxNzBfVElNRVJfSU5UX1RJTUVSMQkJCTB4MDAyCisjZGVmaW5lCQlBUjkxNzBfVElNRVJfSU5UX1RJTUVSMgkJCTB4MDA0CisjZGVmaW5lCQlBUjkxNzBfVElNRVJfSU5UX1RJTUVSMwkJCTB4MDA4CisjZGVmaW5lCQlBUjkxNzBfVElNRVJfSU5UX1RJTUVSNAkJCTB4MDEwCisjZGVmaW5lCQlBUjkxNzBfVElNRVJfSU5UX1RJQ0tfVElNRVIJCTB4MTAwCisKKyNkZWZpbmUJQVI5MTcwX1RJTUVSX1JFR19USUNLX1RJTUVSCQkoQVI5MTcwX1RJTUVSX1JFR19CQVNFICsgMHgwMzApCisjZGVmaW5lCUFSOTE3MF9USU1FUl9SRUdfQ0xPQ0tfTE9XCQkoQVI5MTcwX1RJTUVSX1JFR19CQVNFICsgMHgwNDApCisjZGVmaW5lCUFSOTE3MF9USU1FUl9SRUdfQ0xPQ0tfSElHSAkJKEFSOTE3MF9USU1FUl9SRUdfQkFTRSArIDB4MDQ0KQorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0JBU0UJCQkweDFjMzAwMAorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1BPV0VSX1NUQVRFX0NUUkwJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MDApCisjZGVmaW5lCQlBUjkxNzBfTUFDX1BPV0VSX1NUQVRFX0NUUkxfUkVTRVQJMHgyMAorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX01BQ19QT1dFUl9TVEFURV9DVFJMCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MGMpCisKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfSU5UX0NUUkwJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NTEwKQorI2RlZmluZQkJQVI5MTcwX01BQ19JTlRfVFhDCQkJQklUKDApCisjZGVmaW5lCQlBUjkxNzBfTUFDX0lOVF9SWEMJCQlCSVQoMSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfSU5UX1JFVFJZX0ZBSUwJCUJJVCgyKQorI2RlZmluZQkJQVI5MTcwX01BQ19JTlRfV0FLRVVQCQkJQklUKDMpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0lOVF9BVElNCQkJQklUKDQpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0lOVF9EVElNCQkJQklUKDUpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0lOVF9DRkdfQkNOCQkJQklUKDYpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0lOVF9BQk9SVAkJCUJJVCg3KQorI2RlZmluZQkJQVI5MTcwX01BQ19JTlRfUU9TCQkJQklUKDgpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0lOVF9NSU1PX1BTCQkJQklUKDkpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0lOVF9LRVlfR0VOCQkJQklUKDEwKQorI2RlZmluZQkJQVI5MTcwX01BQ19JTlRfREVDUllfTk9VU0VSCQlCSVQoMTEpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0lOVF9SQURBUgkJCUJJVCgxMikKKyNkZWZpbmUJCUFSOTE3MF9NQUNfSU5UX1FVSUVUX0ZSQU1FCQlCSVQoMTMpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0lOVF9QUkVUQlRUCQkJQklUKDE0KQorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1RTRl9MCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDUxNCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfVFNGX0gJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NTE4KQorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0FUSU1fV0lORE9XCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NTFjKQorI2RlZmluZQkJQVI5MTcwX01BQ19BVElNX1BFUklPRF9TCQkwCisjZGVmaW5lCQlBUjkxNzBfTUFDX0FUSU1fUEVSSU9ECQkJMHgwMDAwZmZmZgorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0JDTl9QRVJJT0QJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MjApCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9QRVJJT0RfUwkJCTAKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX1BFUklPRAkJCTB4MDAwMGZmZmYKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0RUSU1fUwkJCTE2CisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9EVElNCQkJMHgwMGZmMDAwMAorI2RlZmluZQkJQVI5MTcwX01BQ19CQ05fQVBfTU9ERQkJCUJJVCgyNCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0lCU1NfTU9ERQkJQklUKDI1KQorI2RlZmluZQkJQVI5MTcwX01BQ19CQ05fUFdSX01HVAkJCUJJVCgyNikKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX1NUQV9QUwkJCUJJVCgyNykKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19QUkVUQlRUCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDUyNCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUFJFVEJUVF9TCQkJMAorI2RlZmluZQkJQVI5MTcwX01BQ19QUkVUQlRUCQkJMHgwMDAwZmZmZgorI2RlZmluZQkJQVI5MTcwX01BQ19QUkVUQlRUMl9TCQkJMTYKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUFJFVEJUVDIJCQkweGZmZmYwMDAwCisKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfTUFDX0FERFJfTAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYxMCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfTUFDX0FERFJfSAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYxNCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQlNTSURfTAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MTgpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0JTU0lEX0gJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjFjKQorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0wJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MjQpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0gJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MjgpCisKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfUlhfVElNRU9VVAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYyYykKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19CQVNJQ19SQVRFCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjMwKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19NQU5EQVRPUllfUkFURQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYzNCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfUlRTX0NUU19SQVRFCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjM4KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19CQUNLT0ZGX1BST1RFQ1QJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2M2MpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1JYX1RIUkVTSE9MRAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY0MCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQUZURVJfUE5QCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjQ4KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19SWF9QRV9ERUxBWQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY0YykKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19EWU5BTUlDX1NJRlNfQUNLCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjU4KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19TTklGRkVSCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY3NCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfU05JRkZFUl9FTkFCTEVfUFJPTUlTQwlCSVQoMCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfU05JRkZFUl9ERUZBVUxUUwkJMHgwMjAwMDAwMAorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Njc4KQorI2RlZmluZQkJQVI5MTcwX01BQ19FTkNSWVBUSU9OX01HTVRfUlhfU09GVFdBUkUJQklUKDIpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0VOQ1JZUFRJT05fUlhfU09GVFdBUkUJQklUKDMpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0VOQ1JZUFRJT05fREVGQVVMVFMJCTB4NzAKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19NSVNDXzY4MAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2ODApCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX01JU0NfNjg0CQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY4NCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfVFhfVU5ERVJSVU4JCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2ODgpCisKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfRlJBTUVUWVBFX0ZJTFRFUgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY4YykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfRlRGX0FTU09DX1JFUQkJQklUKDApCisjZGVmaW5lCQlBUjkxNzBfTUFDX0ZURl9BU1NPQ19SRVNQCQlCSVQoMSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfRlRGX1JFQVNTT0NfUkVRCQlCSVQoMikKKyNkZWZpbmUJCUFSOTE3MF9NQUNfRlRGX1JFQVNTT0NfUkVTUAkJQklUKDMpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0ZURl9QUkJfUkVRCQkJQklUKDQpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0ZURl9QUkJfUkVTUAkJCUJJVCg1KQorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfQklUNgkJCUJJVCg2KQorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfQklUNwkJCUJJVCg3KQorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfQkVBQ09OCQkJQklUKDgpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0ZURl9BVElNCQkJQklUKDkpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0ZURl9ERUFTU09DCQkJQklUKDEwKQorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfQVVUSAkJCUJJVCgxMSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfRlRGX0RFQVVUSAkJCUJJVCgxMikKKyNkZWZpbmUJCUFSOTE3MF9NQUNfRlRGX0JJVDEzCQkJQklUKDEzKQorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfQklUMTQJCQlCSVQoMTQpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0ZURl9CSVQxNQkJCUJJVCgxNSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfRlRGX0JBUgkJCUJJVCgyNCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfRlRGX0JBCQkJQklUKDI1KQorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfUFNQT0xMCQkJQklUKDI2KQorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfUlRTCQkJQklUKDI3KQorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfQ1RTCQkJQklUKDI4KQorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfQUNLCQkJQklUKDI5KQorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfQ0ZFCQkJQklUKDMwKQorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfQ0ZFX0FDSwkJCUJJVCgzMSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfRlRGX0RFRkFVTFRTCQkJMHgwNTAwZmZmZgorI2RlZmluZQkJQVI5MTcwX01BQ19GVEZfTU9OSVRPUgkJCTB4ZmYwMGZmZmYKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19BQ0tfRVhURU5TSU9OCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjkwKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19BQ0tfVFBDCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY5NCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfRUlGU19BTkRfU0lGUwkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY5OCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfUlhfVElNRU9VVF9DT1VOVAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY5YykKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfUlhfVE9UQUwJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NmEwKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19SWF9DUkMzMgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2YTQpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1JYX0NSQzE2CQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZhOCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfUlhfRVJSX0RFQ1JZUFRJT05fVU5JCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2YWMpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1JYX09WRVJSVU4JCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2YjApCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1JYX0VSUl9ERUNSWVBUSU9OX01VTAkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NmJjKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWF9CTE9DS0FDS1MJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2YzApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX05BVl9DT1VOVAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZjNCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkFDS09GRl9TVEFUVVMJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2YzgpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JBQ0tPRkZfQ0NBCQkJQklUKDI0KQorI2RlZmluZQkJQVI5MTcwX01BQ19CQUNLT0ZGX1RYX1BFWAkJQklUKDI1KQorI2RlZmluZQkJQVI5MTcwX01BQ19CQUNLT0ZGX1JYX1BFCQlCSVQoMjYpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JBQ0tPRkZfTURfUkVBRFkJCUJJVCgyNykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkFDS09GRl9UWF9QRQkJQklUKDI4KQorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1RYX1JFVFJZCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZjYykKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWF9DT01QTEVURQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZkNCkKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19DSEFOTkVMX0JVU1kJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2ZTgpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0VYVF9CVVNZCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZlYykKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19TTE9UX1RJTUUJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2ZjApCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1RYX1RPVEFMCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZmNCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQUNLX0ZDCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZmOCkKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19DQU1fTU9ERQkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg3MDApCisjZGVmaW5lCQlBUjkxNzBfTUFDX0NBTV9JQlNTCQkJMHhlMAorI2RlZmluZQkJQVI5MTcwX01BQ19DQU1fQVAJCQkweGExCisjZGVmaW5lCQlBUjkxNzBfTUFDX0NBTV9TVEEJCQkweDIKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQ0FNX0FQX1dEUwkJCTB4MworI2RlZmluZQkJQVI5MTcwX01BQ19DQU1fREVGQVVMVFMJCQkoMHhmIDw8IDI0KQorI2RlZmluZQkJQVI5MTcwX01BQ19DQU1fSE9TVF9QRU5ESU5HCQkweDgwMDAwMDAwCisKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQ0FNX1JPTExfQ0FMTF9UQkxfTAkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzA0KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19DQU1fUk9MTF9DQUxMX1RCTF9ICShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg3MDgpCisKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQ0FNX0FERFIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzBjKQorI2RlZmluZQkJQVI5MTcwX01BQ19DQU1fQUREUl9XUklURQkJMHg4MDAwMDAwMAorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19DQU1fREFUQTAJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg3MjApCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0NBTV9EQVRBMQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDcyNCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQ0FNX0RBVEEyCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzI4KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19DQU1fREFUQTMJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg3MmMpCisKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQ0FNX0RCRzAJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzMwKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19DQU1fREJHMQkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg3MzQpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0NBTV9EQkcyCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDczOCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQ0FNX1NUQVRFCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzNjKQorI2RlZmluZQkJQVI5MTcwX01BQ19DQU1fU1RBVEVfUkVBRF9QRU5ESU5HCTB4NDAwMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQ0FNX1NUQVRFX1dSSVRFX1BFTkRJTkcJMHg4MDAwMDAwMAorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0NBTV9UWEtFWQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDc0MCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQ0FNX1JYS0VZCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzUwKQorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0NBTV9UWF9FTkNfVFlQRQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDc2MCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQ0FNX1JYX0VOQ19UWVBFCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzcwKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19DQU1fVFhfU0VSQUNIX0hJVAkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzgwKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19DQU1fUlhfU0VSQUNIX0hJVAkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzkwKQorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0FDMF9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhiMDApCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0FDMV9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhiMDQpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0FDMl9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhiMDgpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0FDM19DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhiMGMpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0FDNF9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhiMTApCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0FDMl9BQzFfQUMwX0FJRlMJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhiMTQpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0FDNF9BQzNfQUMyX0FJRlMJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhiMTgpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1RYT1BfQUNLX0VYVEVOU0lPTgkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4YjFjKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWE9QX0FDS19JTlRFUlZBTAkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4YjIwKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19DT05URU5USU9OX1BPSU5UCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4YjI0KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19SRVRSWV9NQVgJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhiMjgpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1RJRF9DRkFDS19DRkVORF9SQVRFCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhiMmMpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1RYT1BfTk9UX0VOT1VHSF9JTkQJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGIzMCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVEtJUF9UU0MJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4YjM0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWE9QX0RVUkFUSU9OCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4YjM4KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWF9RT1NfVEhSRVNIT0xECQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4YjNjKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19RT1NfUFJJT1JJVFlfVklSVFVBTF9DQ0EJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGI0MCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVklSVFVBTF9DQ0FfUTAJCUJJVCgxNSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVklSVFVBTF9DQ0FfUTEJCUJJVCgxNikKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVklSVFVBTF9DQ0FfUTIJCUJJVCgxNykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVklSVFVBTF9DQ0FfUTMJCUJJVCgxOCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVklSVFVBTF9DQ0FfUTQJCUJJVCgxOSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVklSVFVBTF9DQ0FfQUxMCQkoMHhmODAwMCkKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19BQzFfQUMwX1RYT1AJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhiNDQpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0FDM19BQzJfVFhPUAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGI0OCkKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19BTVBEVV9DT1VOVAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGI4OCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfTVBEVV9DT1VOVAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGI4YykKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19BTVBEVV9GQUNUT1IJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhiOWMpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0FNUERVX0ZBQ1RPUgkJCTB4N2YwMDAwCisjZGVmaW5lCQlBUjkxNzBfTUFDX0FNUERVX0ZBQ1RPUl9TCQkxNgorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19BTVBEVV9ERU5TSVRZCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4YmEwKQorI2RlZmluZQkJQVI5MTcwX01BQ19BTVBEVV9ERU5TSVRZCQkweDcKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQU1QRFVfREVOU0lUWV9TCQkwCisKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfRkNTX1NFTEVDVAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGJiMCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfRkNTX1NXRkNTCQkJMHgxCisjZGVmaW5lCQlBUjkxNzBfTUFDX0ZDU19GSUZPX1BST1QJCTB4NAorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1JUU19DVFNfVFBDCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4YmI0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19DRkVORF9RT1NOVUxMX1RQQwkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4YmI4KQorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0FDS19UQUJMRQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGMwMCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfQ09OVFJPTAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGM0MCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUlhfQ1RSTF9ERUFHRwkJMHgxCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JYX0NUUkxfU0hPUlRfRklMVEVSCQkweDIKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUlhfQ1RSTF9TQV9EQV9TRUFSQ0gJCTB4MjAKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUlhfQ1RSTF9QQVNTX1RPX0hPU1QJCUJJVCgyOCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUlhfQ1RSTF9BQ0tfSU5fU05JRkZFUglCSVQoMzApCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfQ09OVFJPTF8xCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4YzQ0KQorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0FNUERVX1JYX1RIUkVTSAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGM1MCkKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19SWF9NUERVCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGNhMCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfUlhfRFJPUFBFRF9NUERVCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Y2E0KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19SWF9ERUxfTVBEVQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGNhOCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfUlhfUEhZX01JU0NfRVJST1IJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGNhYykKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfUlhfUEhZX1hSX0VSUk9SCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Y2IwKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19SWF9QSFlfT0ZETV9FUlJPUgkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Y2I0KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19SWF9QSFlfQ0NLX0VSUk9SCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Y2I4KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19SWF9QSFlfSFRfRVJST1IJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhjYmMpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1JYX1BIWV9UT1RBTAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGNjMCkKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19ETUFfVFhRX0FERFIJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhkMDApCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0RNQV9UWFFfQ1VSUl9BRERSCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhkMDQpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0RNQV9UWFEwX0FERFIJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhkMDApCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0RNQV9UWFEwX0NVUlJfQUREUgkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDA0KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19ETUFfVFhRMV9BRERSCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDA4KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19ETUFfVFhRMV9DVVJSX0FERFIJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGQwYykKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfRE1BX1RYUTJfQUREUgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGQxMCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfRE1BX1RYUTJfQ1VSUl9BRERSCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhkMTQpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0RNQV9UWFEzX0FERFIJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhkMTgpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0RNQV9UWFEzX0NVUlJfQUREUgkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDFjKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19ETUFfVFhRNF9BRERSCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDIwKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19ETUFfVFhRNF9DVVJSX0FERFIJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGQyNCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfRE1BX1JYUV9BRERSCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDI4KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19ETUFfUlhRX0NVUlJfQUREUgkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDJjKQorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0RNQV9UUklHR0VSCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDMwKQorI2RlZmluZQkJQVI5MTcwX0RNQV9UUklHR0VSX1RYUTAJCQlCSVQoMCkKKyNkZWZpbmUJCUFSOTE3MF9ETUFfVFJJR0dFUl9UWFExCQkJQklUKDEpCisjZGVmaW5lCQlBUjkxNzBfRE1BX1RSSUdHRVJfVFhRMgkJCUJJVCgyKQorI2RlZmluZQkJQVI5MTcwX0RNQV9UUklHR0VSX1RYUTMJCQlCSVQoMykKKyNkZWZpbmUJCUFSOTE3MF9ETUFfVFJJR0dFUl9UWFE0CQkJQklUKDQpCisjZGVmaW5lCQlBUjkxNzBfRE1BX1RSSUdHRVJfUlhRCQkJQklUKDgpCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfRE1BX1dMQU5fU1RBVFVTCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDM4KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19ETUFfU1RBVFVTCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDNjKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19ETUFfVFhRX0xBU1RfQUREUgkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDQwKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19ETUFfVFhRMF9MQVNUX0FERFIJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGQ0MCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfRE1BX1RYUTFfTEFTVF9BRERSCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhkNDQpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0RNQV9UWFEyX0xBU1RfQUREUgkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDQ4KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19ETUFfVFhRM19MQVNUX0FERFIJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGQ0YykKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfRE1BX1RYUTRfTEFTVF9BRERSCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhkNTApCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0RNQV9UWFEwUTFfTEVOCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDU0KQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19ETUFfVFhRMlEzX0xFTgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGQ1OCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfRE1BX1RYUTRfTEVOCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDVjKQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0RNQV9UWFFYX0xBU1RfQUREUgkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDc0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19ETUFfVFhRWF9GQUlMX0FERFIJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGQ3OCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfVFhSWF9NUEkJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDdjKQorI2RlZmluZQkJQVI5MTcwX01BQ19UWFJYX01QSV9UWF9NUElfTUFTSwkJMHgwMDAwMDAwZgorI2RlZmluZQkJQVI5MTcwX01BQ19UWFJYX01QSV9UWF9UT19NQVNLCQkweDAwMDBmZmYwCisjZGVmaW5lCQlBUjkxNzBfTUFDX1RYUlhfTVBJX1JYX01QSV9NQVNLCQkweDAwMGYwMDAwCisjZGVmaW5lCQlBUjkxNzBfTUFDX1RYUlhfTVBJX1JYX1RPX01BU0sJCTB4ZmZmMDAwMDAKKworI2RlZmluZQlBUjkxNzBfTUFDX1JFR19CQ05fQUREUgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhkODQpCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0JDTl9MRU5HVEgJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhkODgpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9MRU5HVEhfTUFYCQkyNTYKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fU1RBVFVTCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDhjKQorCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX0JDTl9QTENQCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGQ5MCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQkNOX0NUUkwJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDk0KQorI2RlZmluZQkJQVI5MTcwX0JDTl9DVFJMX1JFQURZCQkJMHgwMQorI2RlZmluZQkJQVI5MTcwX0JDTl9DVFJMX0xPQ0sJCQkweDAyCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX0NVUlJfQUREUgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGQ5OCkKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQkNOX0NPVU5UCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZDljKQorI2RlZmluZQlBUjkxNzBfTUFDX1JFR19CQ05fSFQxCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweGRhMCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMV9IVF9FTgkJQklUKDApCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9IVDFfR0ZfUE1CCQlCSVQoMSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMV9TUF9FWFAJCUJJVCgyKQorI2RlZmluZQkJQVI5MTcwX01BQ19CQ05fSFQxX1RYX0JGCQlCSVQoMykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMV9QV1JfQ1RSTF9TCQk0CisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9IVDFfUFdSX0NUUkwJCTB4NzAKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMV9UWF9BTlQxCQlCSVQoNykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMV9UWF9BTlQwCQlCSVQoOCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMV9OVU1fTEZUX1MJCTkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMV9OVU1fTEZUCQkweDYwMAorI2RlZmluZQkJQVI5MTcwX01BQ19CQ05fSFQxX0JXQ18yME1fRVhUCQlCSVQoMTYpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9IVDFfQldDXzQwTV9TSEFSRUQJQklUKDE3KQorI2RlZmluZQkJQVI5MTcwX01BQ19CQ05fSFQxX0JXQ180ME1fRFVQCQkoQklUKDE2KSB8IEJJVCgxNykpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9IVDFfQkZfTUNTX1MJCTE4CisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9IVDFfQkZfTUNTCQkweDFjMDAwMAorI2RlZmluZQkJQVI5MTcwX01BQ19CQ05fSFQxX1RQQ19TCQkyMQorI2RlZmluZQkJQVI5MTcwX01BQ19CQ05fSFQxX1RQQwkJCTB4N2UwMDAwMAorI2RlZmluZQkJQVI5MTcwX01BQ19CQ05fSFQxX0NIQUlOX01BU0tfUwkJMjcKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMV9DSEFJTl9NQVNLCQkweDM4MDAwMDAwCisKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfQkNOX0hUMgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhkYTQpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9IVDJfTUNTX1MJCTAKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMl9NQ1MJCQkweDdmCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9IVDJfQlc0MAkJCUJJVCg4KQorI2RlZmluZQkJQVI5MTcwX01BQ19CQ05fSFQyX1NNT09USElORwkJQklUKDkpCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9IVDJfU1MJCQlCSVQoMTApCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9IVDJfTlNTCQkJQklUKDExKQorI2RlZmluZQkJQVI5MTcwX01BQ19CQ05fSFQyX1NUQkNfUwkJMTIKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMl9TVEJDCQkJMHgzMDAwCisjZGVmaW5lCQlBUjkxNzBfTUFDX0JDTl9IVDJfQURWX0NPRAkJQklUKDE0KQorI2RlZmluZQkJQVI5MTcwX01BQ19CQ05fSFQyX1NHSQkJCUJJVCgxNSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMl9MRU5fUwkJMTYKKyNkZWZpbmUJCUFSOTE3MF9NQUNfQkNOX0hUMl9MRU4JCQkweGZmZmYwMDAwCisKKyNkZWZpbmUJQVI5MTcwX01BQ19SRUdfRE1BX1RYUVhfQUREUl9DVVJSCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhkYzApCisKKy8qIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisjZGVmaW5lCUFSOTE3MF9SQU5EX1JFR19CQVNFCQkJMHgxZDAwMDAKKworI2RlZmluZQlBUjkxNzBfUkFORF9SRUdfTlVNCQkJKEFSOTE3MF9SQU5EX1JFR19CQVNFICsgMHgwMDApCisjZGVmaW5lCUFSOTE3MF9SQU5EX1JFR19NT0RFCQkJKEFSOTE3MF9SQU5EX1JFR19CQVNFICsgMHgwMDQpCisjZGVmaW5lCQlBUjkxNzBfUkFORF9NT0RFX01BTlVBTAkJCTB4MDAwCisjZGVmaW5lCQlBUjkxNzBfUkFORF9NT0RFX0ZSRUUJCQkweDAwMQorCisvKiBHUElPICovCisjZGVmaW5lCUFSOTE3MF9HUElPX1JFR19CQVNFCQkJMHgxZDAxMDAKKyNkZWZpbmUJQVI5MTcwX0dQSU9fUkVHX1BPUlRfVFlQRQkJKEFSOTE3MF9HUElPX1JFR19CQVNFICsgMHgwMDApCisjZGVmaW5lCUFSOTE3MF9HUElPX1JFR19QT1JUX0RBVEEJCShBUjkxNzBfR1BJT19SRUdfQkFTRSArIDB4MDA0KQorI2RlZmluZQkJQVI5MTcwX0dQSU9fUE9SVF9MRURfMAkJCTEKKyNkZWZpbmUJCUFSOTE3MF9HUElPX1BPUlRfTEVEXzEJCQkyCisvKiBXUFMgQnV0dG9uIEdQSU8gZm9yIFRQLUxpbmsgVEwtV044MjFOICovCisjZGVmaW5lCQlBUjkxNzBfR1BJT19QT1JUX1dQU19CVVRUT05fUFJFU1NFRAk0CisKKy8qIE1lbW9yeSBDb250cm9sbGVyICovCisjZGVmaW5lCUFSOTE3MF9NQ19SRUdfQkFTRQkJCTB4MWQxMDAwCisKKyNkZWZpbmUJQVI5MTcwX01DX1JFR19GTEFTSF9XQUlUX1NUQVRFCQkoQVI5MTcwX01DX1JFR19CQVNFICsgMHgwMDApCisjZGVmaW5lCUFSOTE3MF9NQ19SRUdfU0VFUFJPTV9XUDAJCShBUjkxNzBfTUNfUkVHX0JBU0UgKyAweDQwMCkKKyNkZWZpbmUJQVI5MTcwX01DX1JFR19TRUVQUk9NX1dQMQkJKEFSOTE3MF9NQ19SRUdfQkFTRSArIDB4NDA0KQorI2RlZmluZQlBUjkxNzBfTUNfUkVHX1NFRVBST01fV1AyCQkoQVI5MTcwX01DX1JFR19CQVNFICsgMHg0MDgpCisKKy8qIEludGVycnVwdCBDb250cm9sbGVyICovCisjZGVmaW5lCUFSOTE3MF9NQVhfSU5UX1NSQwkJCTkKKyNkZWZpbmUJQVI5MTcwX0lOVF9SRUdfQkFTRQkJCTB4MWQyMDAwCisKKyNkZWZpbmUJQVI5MTcwX0lOVF9SRUdfRkxBRwkJCShBUjkxNzBfSU5UX1JFR19CQVNFICsgMHgwMDApCisjZGVmaW5lCUFSOTE3MF9JTlRfUkVHX0ZJUV9NQVNLCQkJKEFSOTE3MF9JTlRfUkVHX0JBU0UgKyAweDAwNCkKKyNkZWZpbmUJQVI5MTcwX0lOVF9SRUdfSVJRX01BU0sJCQkoQVI5MTcwX0lOVF9SRUdfQkFTRSArIDB4MDA4KQorLyogSU5UX1JFR19GTEFHLCBJTlRfUkVHX0ZJUV9NQVNLIGFuZCBJTlRfUkVHX0lSUV9NQVNLICovCisjZGVmaW5lCQlBUjkxNzBfSU5UX0ZMQUdfV0xBTgkJCTB4MDAxCisjZGVmaW5lCQlBUjkxNzBfSU5UX0ZMQUdfUFRBQl9CSVQJCTB4MDAyCisjZGVmaW5lCQlBUjkxNzBfSU5UX0ZMQUdfU0VfQklUCQkJMHgwMDQKKyNkZWZpbmUJCUFSOTE3MF9JTlRfRkxBR19VQVJUX0JJVAkJMHgwMDgKKyNkZWZpbmUJCUFSOTE3MF9JTlRfRkxBR19USU1FUl9CSVQJCTB4MDEwCisjZGVmaW5lCQlBUjkxNzBfSU5UX0ZMQUdfRVhUX0JJVAkJCTB4MDIwCisjZGVmaW5lCQlBUjkxNzBfSU5UX0ZMQUdfU1dfQklUCQkJMHgwNDAKKyNkZWZpbmUJCUFSOTE3MF9JTlRfRkxBR19VU0JfQklUCQkJMHgwODAKKyNkZWZpbmUJCUFSOTE3MF9JTlRfRkxBR19FVEhFUk5FVF9CSVQJCTB4MTAwCisKKyNkZWZpbmUJQVI5MTcwX0lOVF9SRUdfUFJJT1JJVFkxCQkoQVI5MTcwX0lOVF9SRUdfQkFTRSArIDB4MDBjKQorI2RlZmluZQlBUjkxNzBfSU5UX1JFR19QUklPUklUWTIJCShBUjkxNzBfSU5UX1JFR19CQVNFICsgMHgwMTApCisjZGVmaW5lCUFSOTE3MF9JTlRfUkVHX1BSSU9SSVRZMwkJKEFSOTE3MF9JTlRfUkVHX0JBU0UgKyAweDAxNCkKKyNkZWZpbmUJQVI5MTcwX0lOVF9SRUdfRVhUX0lOVF9DT05UUk9MCQkoQVI5MTcwX0lOVF9SRUdfQkFTRSArIDB4MDE4KQorI2RlZmluZQlBUjkxNzBfSU5UX1JFR19TV19JTlRfQ09OVFJPTAkJKEFSOTE3MF9JTlRfUkVHX0JBU0UgKyAweDAxYykKKyNkZWZpbmUJCUFSOTE3MF9JTlRfU1dfSU5UX0VOQUJMRQkJMHgxCisKKyNkZWZpbmUJQVI5MTcwX0lOVF9SRUdfRklRX0VOQ09ERQkJKEFSOTE3MF9JTlRfUkVHX0JBU0UgKyAweDAyMCkKKyNkZWZpbmUJQVI5MTcwX0lOVF9JTlRfSVJRX0VOQ09ERQkJKEFSOTE3MF9JTlRfUkVHX0JBU0UgKyAweDAyNCkKKworLyogUG93ZXIgTWFuYWdlbWVudCAqLworI2RlZmluZQlBUjkxNzBfUFdSX1JFR19CQVNFCQkJMHgxZDQwMDAKKworI2RlZmluZSBBUjkxNzBfUFdSX1JFR19QT1dFUl9TVEFURQkJKEFSOTE3MF9QV1JfUkVHX0JBU0UgKyAweDAwMCkKKworI2RlZmluZQlBUjkxNzBfUFdSX1JFR19SRVNFVAkJCShBUjkxNzBfUFdSX1JFR19CQVNFICsgMHgwMDQpCisjZGVmaW5lCQlBUjkxNzBfUFdSX1JFU0VUX0NPTU1JVF9SRVNFVF9NQVNLCUJJVCgwKQorI2RlZmluZQkJQVI5MTcwX1BXUl9SRVNFVF9XTEFOX01BU0sJCUJJVCgxKQorI2RlZmluZQkJQVI5MTcwX1BXUl9SRVNFVF9ETUFfTUFTSwkJQklUKDIpCisjZGVmaW5lCQlBUjkxNzBfUFdSX1JFU0VUX0JSSURHRV9NQVNLCQlCSVQoMykKKyNkZWZpbmUJCUFSOTE3MF9QV1JfUkVTRVRfQUhCX01BU0sJCUJJVCg5KQorI2RlZmluZQkJQVI5MTcwX1BXUl9SRVNFVF9CQl9XQVJNX1JFU0VUCQlCSVQoMTApCisjZGVmaW5lCQlBUjkxNzBfUFdSX1JFU0VUX0JCX0NPTERfUkVTRVQJCUJJVCgxMSkKKyNkZWZpbmUJCUFSOTE3MF9QV1JfUkVTRVRfQUREQV9DTEtfQ09MRF9SRVNFVAlCSVQoMTIpCisjZGVmaW5lCQlBUjkxNzBfUFdSX1JFU0VUX1BMTAkJCUJJVCgxMykKKyNkZWZpbmUJCUFSOTE3MF9QV1JfUkVTRVRfVVNCX1BMTAkJQklUKDE0KQorCisjZGVmaW5lCUFSOTE3MF9QV1JfUkVHX0NMT0NLX1NFTAkJKEFSOTE3MF9QV1JfUkVHX0JBU0UgKyAweDAwOCkKKyNkZWZpbmUJCUFSOTE3MF9QV1JfQ0xLX0FIQl80ME1IWgkJMAorI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfQUhCXzIwXzIyTUhaCQkxCisjZGVmaW5lCQlBUjkxNzBfUFdSX0NMS19BSEJfNDBfNDRNSFoJCTIKKyNkZWZpbmUJCUFSOTE3MF9QV1JfQ0xLX0FIQl84MF84OE1IWgkJMworI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfREFDXzE2MF9JTlZfRExZCQkweDcwCisKKyNkZWZpbmUJQVI5MTcwX1BXUl9SRUdfQ0hJUF9SRVZJU0lPTgkJKEFSOTE3MF9QV1JfUkVHX0JBU0UgKyAweDAxMCkKKyNkZWZpbmUgQVI5MTcwX1BXUl9SRUdfUExMX0FEREFDCQkoQVI5MTcwX1BXUl9SRUdfQkFTRSArIDB4MDE0KQorI2RlZmluZQkJQVI5MTcwX1BXUl9QTExfQUREQUNfRElWX1MJCTIKKyNkZWZpbmUJCUFSOTE3MF9QV1JfUExMX0FEREFDX0RJVgkJMHhmZmMKKyNkZWZpbmUJQVI5MTcwX1BXUl9SRUdfV0FUQ0hfRE9HX01BR0lDCQkoQVI5MTcwX1BXUl9SRUdfQkFTRSArIDB4MDIwKQorCisvKiBGYXJhZGF5IFVTQiBDb250cm9sbGVyICovCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0JBU0UJCQkweDFlMTAwMAorCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX01BSU5fQ1RSTAkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDAwMCkKKyNkZWZpbmUJCUFSOTE3MF9VU0JfTUFJTl9DVFJMX1JFTU9URV9XQUtFVVAJQklUKDApCisjZGVmaW5lCQlBUjkxNzBfVVNCX01BSU5fQ1RSTF9FTkFCTEVfR0xPQkFMX0lOVAlCSVQoMikKKyNkZWZpbmUJCUFSOTE3MF9VU0JfTUFJTl9DVFJMX0dPX1RPX1NVU1BFTkQJQklUKDMpCisjZGVmaW5lCQlBUjkxNzBfVVNCX01BSU5fQ1RSTF9SRVNFVAkJQklUKDQpCisjZGVmaW5lCQlBUjkxNzBfVVNCX01BSU5fQ1RSTF9DSElQX0VOQUJMRQlCSVQoNSkKKyNkZWZpbmUJCUFSOTE3MF9VU0JfTUFJTl9DVFJMX0hJR0hTUEVFRAkJQklUKDYpCisKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfREVWSUNFX0FERFJFU1MJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMDEpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0RFVklDRV9BRERSRVNTX0NPTkZJR1VSRQlCSVQoNykKKworI2RlZmluZQlBUjkxNzBfVVNCX1JFR19URVNUCQkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDAwMikKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfUEhZX1RFU1RfU0VMRUNUCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDA4KQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19DWF9DT05GSUdfU1RBVFVTCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDBiKQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19FUDBfREFUQQkJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMGMpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0VQMF9EQVRBMQkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDAwYykKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRVAwX0RBVEEyCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDBkKQorCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzAJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMTEpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzEJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMTIpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzIJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMTMpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzMJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMTQpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzQJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMTUpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0lOVFJfRElTQUJMRV9PVVRfSU5UCQkoQklUKDcpIHwgQklUKDYpKQorCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzUJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMTYpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzYJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMTcpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0lOVFJfRElTQUJMRV9JTl9JTlQJCUJJVCg2KQorCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0lOVFJfTUFTS19CWVRFXzcJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMTgpCisKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfSU5UUl9HUk9VUAkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDAyMCkKKworI2RlZmluZQlBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV8wCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDIxKQorI2RlZmluZQkJQVI5MTcwX1VTQl9JTlRSX1NSQzBfU0VUVVAJCUJJVCgwKQorI2RlZmluZQkJQVI5MTcwX1VTQl9JTlRSX1NSQzBfSU4JCQlCSVQoMSkKKyNkZWZpbmUJCUFSOTE3MF9VU0JfSU5UUl9TUkMwX09VVAkJQklUKDIpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0lOVFJfU1JDMF9GQUlMCQlCSVQoMykgLyogPz8/ICovCisjZGVmaW5lCQlBUjkxNzBfVVNCX0lOVFJfU1JDMF9FTkQJCUJJVCg0KSAvKiA/Pz8gKi8KKyNkZWZpbmUJCUFSOTE3MF9VU0JfSU5UUl9TUkMwX0FCT1JUCQlCSVQoNykKKworI2RlZmluZQlBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV8xCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDIyKQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV8yCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDIzKQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV8zCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDI0KQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV80CQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDI1KQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV81CQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDI2KQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV82CQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDI3KQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19JTlRSX1NPVVJDRV83CQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDI4KQorI2RlZmluZQkJQVI5MTcwX1VTQl9JTlRSX1NSQzdfVVNCX1JFU0VUCQlCSVQoMSkKKyNkZWZpbmUJCUFSOTE3MF9VU0JfSU5UUl9TUkM3X1VTQl9TVVNQRU5ECUJJVCgyKQorI2RlZmluZQkJQVI5MTcwX1VTQl9JTlRSX1NSQzdfVVNCX1JFU1VNRQkJQklUKDMpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0lOVFJfU1JDN19JU09fU0VRX0VSUglCSVQoNCkKKyNkZWZpbmUJCUFSOTE3MF9VU0JfSU5UUl9TUkM3X0lTT19TRVFfQUJPUlQJQklUKDUpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0lOVFJfU1JDN19UWDBCWVRFCQlCSVQoNikKKyNkZWZpbmUJCUFSOTE3MF9VU0JfSU5UUl9TUkM3X1JYMEJZVEUJCUJJVCg3KQorCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0lETEVfQ09VTlQJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMmYpCisKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRVBfTUFQCQkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDAzMCkKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRVAxX01BUAkJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMzApCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0VQMl9NQVAJCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDMxKQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19FUDNfTUFQCQkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDAzMikKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRVA0X01BUAkJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMzMpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0VQNV9NQVAJCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDM0KQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19FUDZfTUFQCQkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDAzNSkKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRVA3X01BUAkJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwMzYpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0VQOF9NQVAJCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDM3KQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19FUDlfTUFQCQkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDAzOCkKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRVAxMF9NQVAJCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDM5KQorCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0VQX0lOX01BWF9TSVpFX0hJR0gJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDAzZikKKyNkZWZpbmUJCUFSOTE3MF9VU0JfRVBfSU5fVE9HR0xFCQkJMHgxMAorCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0VQX0lOX01BWF9TSVpFX0xPVwkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDNlKQorCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0VQX09VVF9NQVhfU0laRV9ISUdICShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwNWYpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0VQX09VVF9UT0dHTEUJCTB4MTAKKworI2RlZmluZQlBUjkxNzBfVVNCX1JFR19FUF9PVVRfTUFYX1NJWkVfTE9XCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwNWUpCisKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRVAzX0JZVEVfQ09VTlRfSElHSAkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MGFlKQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19FUDNfQllURV9DT1VOVF9MT1cJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDBiZSkKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRVA0X0JZVEVfQ09VTlRfSElHSAkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MGFmKQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19FUDRfQllURV9DT1VOVF9MT1cJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDBiZikKKworI2RlZmluZQlBUjkxNzBfVVNCX1JFR19GSUZPX01BUAkJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwODApCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0ZJRk8wX01BUAkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDA4MCkKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRklGTzFfTUFQCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDgxKQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19GSUZPMl9NQVAJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwODIpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0ZJRk8zX01BUAkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDA4MykKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRklGTzRfTUFQCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDg0KQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19GSUZPNV9NQVAJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwODUpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0ZJRk82X01BUAkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDA4NikKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRklGTzdfTUFQCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDg3KQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19GSUZPOF9NQVAJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwODgpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0ZJRk85X01BUAkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDA4OSkKKworI2RlZmluZQlBUjkxNzBfVVNCX1JFR19GSUZPX0NPTkZJRwkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDA5MCkKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRklGTzBfQ09ORklHCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDkwKQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19GSUZPMV9DT05GSUcJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwOTEpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0ZJRk8yX0NPTkZJRwkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDA5MikKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRklGTzNfQ09ORklHCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDkzKQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19GSUZPNF9DT05GSUcJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwOTQpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0ZJRk81X0NPTkZJRwkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDA5NSkKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRklGTzZfQ09ORklHCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDk2KQorI2RlZmluZQlBUjkxNzBfVVNCX1JFR19GSUZPN19DT05GSUcJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgwOTcpCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0ZJRk84X0NPTkZJRwkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDA5OCkKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRklGTzlfQ09ORklHCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MDk5KQorCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0VQM19EQVRBCQkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDBmOCkKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRVA0X0RBVEEJCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MGZjKQorCisjZGVmaW5lCUFSOTE3MF9VU0JfUkVHX0ZJRk9fU0laRQkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDEwMCkKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfRE1BX0NUTAkJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgxMDgpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0RNQV9DVExfRU5BQkxFX1RPX0RFVklDRQlCSVQoMCkKKyNkZWZpbmUJCUFSOTE3MF9VU0JfRE1BX0NUTF9FTkFCTEVfRlJPTV9ERVZJQ0UJQklUKDEpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0RNQV9DVExfSElHSF9TUEVFRAkJQklUKDIpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0RNQV9DVExfVVBfUEFDS0VUX01PREUJQklUKDMpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0RNQV9DVExfVVBfU1RSRUFNX1MJCTQKKyNkZWZpbmUJCUFSOTE3MF9VU0JfRE1BX0NUTF9VUF9TVFJFQU0JCShCSVQoNCkgfCBCSVQoNSkpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0RNQV9DVExfVVBfU1RSRUFNXzRLCQkoMCkKKyNkZWZpbmUJCUFSOTE3MF9VU0JfRE1BX0NUTF9VUF9TVFJFQU1fOEsJCUJJVCg0KQorI2RlZmluZQkJQVI5MTcwX1VTQl9ETUFfQ1RMX1VQX1NUUkVBTV8xNksJQklUKDUpCisjZGVmaW5lCQlBUjkxNzBfVVNCX0RNQV9DVExfVVBfU1RSRUFNXzMySwkoQklUKDQpIHwgQklUKDUpKQorI2RlZmluZQkJQVI5MTcwX1VTQl9ETUFfQ1RMX0RPV05fU1RSRUFNCQlCSVQoNikKKworI2RlZmluZQlBUjkxNzBfVVNCX1JFR19ETUFfU1RBVFVTCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MTBjKQorI2RlZmluZQkJQVI5MTcwX1VTQl9ETUFfU1RBVFVTX1VQX0lETEUJCUJJVCg4KQorI2RlZmluZQkJQVI5MTcwX1VTQl9ETUFfU1RBVFVTX0ROX0lETEUJCUJJVCgxNikKKworI2RlZmluZQlBUjkxNzBfVVNCX1JFR19NQVhfQUdHX1VQTE9BRAkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDExMCkKKyNkZWZpbmUJQVI5MTcwX1VTQl9SRUdfVVBMT0FEX1RJTUVfQ1RMCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MTE0KQorCisjZGVmaW5lIEFSOTE3MF9VU0JfUkVHX1dBS0VfVVAJCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MTIwKQorI2RlZmluZQkJQVI5MTcwX1VTQl9XQUtFX1VQX1dBS0UJCQlCSVQoMCkKKworI2RlZmluZQlBUjkxNzBfVVNCX1JFR19DQlVTX0NUUkwJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgxZjApCisjZGVmaW5lCQlBUjkxNzBfVVNCX0NCVVNfQ1RSTF9CVUZGRVJfRU5ECQkoQklUKDEpKQorCisvKiBQQ0kvVVNCIHRvIEFIQiBCcmlkZ2UgKi8KKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfQkFTRQkJCTB4MWUyMDAwCisKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfQ01ECQkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDAwMCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfUEFSQU0xCQkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDAwNCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfUEFSQU0yCQkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDAwOCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfUEFSQU0zCQkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDAwYykKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfUlNQCQkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDAxMCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfU1RBVFVTMQkJCShBUjkxNzBfUFRBX1JFR19CQVNFICsgMHgwMTQpCisjZGVmaW5lCUFSOTE3MF9QVEFfUkVHX1NUQVRVUzIJCQkoQVI5MTcwX1BUQV9SRUdfQkFTRSArIDB4MDE4KQorI2RlZmluZQlBUjkxNzBfUFRBX1JFR19TVEFUVVMzCQkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDAxYykKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfQUhCX0lOVF9GTEFHCQkoQVI5MTcwX1BUQV9SRUdfQkFTRSArIDB4MDIwKQorI2RlZmluZQlBUjkxNzBfUFRBX1JFR19BSEJfSU5UX01BU0sJCShBUjkxNzBfUFRBX1JFR19CQVNFICsgMHgwMjQpCisjZGVmaW5lCUFSOTE3MF9QVEFfUkVHX0FIQl9JTlRfQUNLCQkoQVI5MTcwX1BUQV9SRUdfQkFTRSArIDB4MDI4KQorI2RlZmluZQlBUjkxNzBfUFRBX1JFR19BSEJfU0NSQVRDSDEJCShBUjkxNzBfUFRBX1JFR19CQVNFICsgMHgwMzApCisjZGVmaW5lCUFSOTE3MF9QVEFfUkVHX0FIQl9TQ1JBVENIMgkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDAzNCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfQUhCX1NDUkFUQ0gzCQkoQVI5MTcwX1BUQV9SRUdfQkFTRSArIDB4MDM4KQorI2RlZmluZQlBUjkxNzBfUFRBX1JFR19BSEJfU0NSQVRDSDQJCShBUjkxNzBfUFRBX1JFR19CQVNFICsgMHgwM2MpCisKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfU0hBUkVfTUVNX0NUUkwJCShBUjkxNzBfUFRBX1JFR19CQVNFICsgMHgxMjQpCisKKy8qCisgKiBQQ0kgdG8gQUhCIEJyaWRnZQorICovCisKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfSU5UX0ZMQUcJCQkoQVI5MTcwX1BUQV9SRUdfQkFTRSArIDB4MTAwKQorI2RlZmluZQkJQVI5MTcwX1BUQV9JTlRfRkxBR19ETgkJCTB4MDEKKyNkZWZpbmUJCUFSOTE3MF9QVEFfSU5UX0ZMQUdfVVAJCQkweDAyCisjZGVmaW5lCQlBUjkxNzBfUFRBX0lOVF9GTEFHX0NNRAkJCTB4MDQKKworI2RlZmluZQlBUjkxNzBfUFRBX1JFR19JTlRfTUFTSwkJCShBUjkxNzBfUFRBX1JFR19CQVNFICsgMHgxMDQpCisjZGVmaW5lCUFSOTE3MF9QVEFfUkVHX0ROX0RNQV9BRERSTAkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDEwOCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfRE5fRE1BX0FERFJICQkoQVI5MTcwX1BUQV9SRUdfQkFTRSArIDB4MTBjKQorI2RlZmluZQlBUjkxNzBfUFRBX1JFR19VUF9ETUFfQUREUkwJCShBUjkxNzBfUFRBX1JFR19CQVNFICsgMHgxMTApCisjZGVmaW5lCUFSOTE3MF9QVEFfUkVHX1VQX0RNQV9BRERSSAkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDExNCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfRE5fUEVORF9USU1FCQkoQVI5MTcwX1BUQV9SRUdfQkFTRSArIDB4MTE4KQorI2RlZmluZQlBUjkxNzBfUFRBX1JFR19VUF9QRU5EX1RJTUUJCShBUjkxNzBfUFRBX1JFR19CQVNFICsgMHgxMWMpCisjZGVmaW5lCUFSOTE3MF9QVEFfUkVHX0NPTlRST0wJCQkoQVI5MTcwX1BUQV9SRUdfQkFTRSArIDB4MTIwKQorI2RlZmluZQkJQVI5MTcwX1BUQV9DVFJMXzRfQkVBVF9CVVJTVAkJMHgwMAorI2RlZmluZQkJQVI5MTcwX1BUQV9DVFJMXzhfQkVBVF9CVVJTVAkJMHgwMQorI2RlZmluZQkJQVI5MTcwX1BUQV9DVFJMXzE2X0JFQVRfQlVSU1QJCTB4MDIKKyNkZWZpbmUJCUFSOTE3MF9QVEFfQ1RSTF9MT09QQkFDS19NT0RFCQkweDEwCisKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfTUVNX0NUUkwJCQkoQVI5MTcwX1BUQV9SRUdfQkFTRSArIDB4MTI0KQorI2RlZmluZQlBUjkxNzBfUFRBX1JFR19NRU1fQUREUgkJCShBUjkxNzBfUFRBX1JFR19CQVNFICsgMHgxMjgpCisjZGVmaW5lCUFSOTE3MF9QVEFfUkVHX0ROX0RNQV9UUklHR0VSCQkoQVI5MTcwX1BUQV9SRUdfQkFTRSArIDB4MTJjKQorI2RlZmluZQlBUjkxNzBfUFRBX1JFR19VUF9ETUFfVFJJR0dFUgkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDEzMCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfRE1BX1NUQVRVUwkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDEzNCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfRE5fQ1VSUl9BRERSTAkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDEzOCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfRE5fQ1VSUl9BRERSSAkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDEzYykKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfVVBfQ1VSUl9BRERSTAkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDE0MCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfVVBfQ1VSUl9BRERSSAkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDE0NCkKKyNkZWZpbmUJQVI5MTcwX1BUQV9SRUdfRE1BX01PREVfQ1RSTAkJKEFSOTE3MF9QVEFfUkVHX0JBU0UgKyAweDE0OCkKKyNkZWZpbmUJCUFSOTE3MF9QVEFfRE1BX01PREVfQ1RSTF9SRVNFVAkJQklUKDApCisjZGVmaW5lCQlBUjkxNzBfUFRBX0RNQV9NT0RFX0NUUkxfRElTQUJMRV9VU0IJQklUKDEpCisKKy8qIFByb3RvY29sIENvbnRyb2xsZXIgTW9kdWxlICovCisjZGVmaW5lCUFSOTE3MF9NQUNfUkVHX1BDX1JFR19CQVNFCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4ZTAwKQorCisKKyNkZWZpbmUJQVI5MTcwX05VTV9MRURTCQkJCTIKKworLyogQ0FNICovCisjZGVmaW5lCUFSOTE3MF9DQU1fTUFYX1VTRVIJCQk2NAorI2RlZmluZQlBUjkxNzBfQ0FNX01BWF9LRVlfTEVOR1RICQkxNgorCisjZGVmaW5lIEFSOTE3MF9TUkFNX09GRlNFVAkJMHgxMDAwMDAKKyNkZWZpbmUgQVI5MTcwX1NSQU1fU0laRQkJMHgxODAwMAorCisjZGVmaW5lIEFSOTE3MF9QUkFNX09GRlNFVAkJMHgyMDAwMDAKKyNkZWZpbmUgQVI5MTcwX1BSQU1fU0laRQkJMHg4MDAwCisKK2VudW0gY3B1X2Nsb2NrIHsKKwlBSEJfU1RBVElDXzQwTUhaID0gMCwKKwlBSEJfR01PREVfMjJNSFogPSAxLAorCUFIQl9BTU9ERV8yME1IWiA9IDEsCisJQUhCX0dNT0RFXzQ0TUhaID0gMiwKKwlBSEJfQU1PREVfNDBNSFogPSAyLAorCUFIQl9HTU9ERV84OE1IWiA9IDMsCisJQUhCX0FNT0RFXzgwTUhaID0gMworfTsKKworLyogVVNCIGVuZHBvaW50cyAqLworZW51bSBhcjkxNzBfdXNiX2VwIHsKKwkvKgorCSAqIENvbnRyb2wgRVAgaXMgYWx3YXlzIEVQIDAgKFVTQiBTUEVDKQorCSAqCisJICogVGhlIHdlaXJkIHRoaW5nIGlzOiB0aGUgb3JpZ2luYWwgZmlybXdhcmUgaGFzIGEgZmV3CisJICogY29tbWVudHMgdGhhdCBzdWdnZXN0IHRoYXQgdGhlIGFjdHVhbCBFUCBudW1iZXJzCisJICogYXJlIGluIHRoZSAxIHRvIDEwIHJhbmdlPyEKKwkgKi8KKwlBUjkxNzBfVVNCX0VQX0NUUkwJCT0gMCwKKworCUFSOTE3MF9VU0JfRVBfVFgsCisJQVI5MTcwX1VTQl9FUF9SWCwKKwlBUjkxNzBfVVNCX0VQX0lSUSwKKwlBUjkxNzBfVVNCX0VQX0NNRCwKKwlBUjkxNzBfVVNCX05VTV9FWFRSQV9FUAkJPSA0LAorCisJX19BUjkxNzBfVVNCX05VTV9FUCwKKworCV9fQVI5MTcwX1VTQl9OVU1fTUFYX0VQCQk9IDEwCit9OworCitlbnVtIGFyOTE3MF91c2JfZmlmbyB7CisJX19BUjkxNzBfVVNCX05VTV9NQVhfRklGTwk9IDEwCit9OworCitlbnVtIGFyOTE3MF90eF9xdWV1ZXMgeworCUFSOTE3MF9UWFEwCT0gMCwKKwlBUjkxNzBfVFhRMSwKKwlBUjkxNzBfVFhRMiwKKwlBUjkxNzBfVFhRMywKKwlBUjkxNzBfVFhRX1NQRUNJQUwsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX0FSOTE3MF9OVU1fVFhfUVVFVUVTID0gNQorfTsKKworI2RlZmluZQlBUjkxNzBfVFhfU1RSRUFNX1RBRwkJMHg2OTdlCisjZGVmaW5lCUFSOTE3MF9SWF9TVFJFQU1fVEFHCQkweDRlMDAKKyNkZWZpbmUJQVI5MTcwX1JYX1NUUkVBTV9NQVhfU0laRQkweGZmZmYKKworc3RydWN0IGFyOTE3MF9zdHJlYW0geworCV9fbGUxNiBsZW5ndGg7CisJX19sZTE2IHRhZzsKKworCXU4IHBheWxvYWRbMF07Cit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKKyNkZWZpbmUgQVI5MTcwX1NUUkVBTV9MRU4JCQkJNAorCisjZGVmaW5lIEFSOTE3MF9NQVhfQUNLVEFCTEVfRU5UUklFUwkJCTgKKyNkZWZpbmUgQVI5MTcwX01BWF9WSVJUVUFMX01BQwkJCQk3CisKKyNkZWZpbmUJQVI5MTcwX1VTQl9FUF9DVFJMX01BWAkJCQk2NAorI2RlZmluZQlBUjkxNzBfVVNCX0VQX1RYX01BWAkJCQk1MTIKKyNkZWZpbmUJQVI5MTcwX1VTQl9FUF9SWF9NQVgJCQkJNTEyCisjZGVmaW5lCUFSOTE3MF9VU0JfRVBfSVJRX01BWAkJCQk2NAorI2RlZmluZQlBUjkxNzBfVVNCX0VQX0NNRF9NQVgJCQkJNjQKKworLyogVHJpZ2dlciBQUkVUQlRUIGludGVycnVwdCA2IEt1cyBlYXJsaWVyICovCisjZGVmaW5lIENBUkw5MTcwX1BSRVRCVFRfS1VTCQkJCTYKKworI2RlZmluZQlBUjU0MTZfTUFYX1JBVEVfUE9XRVIJCQkJNjMKKworI2RlZmluZSBTRVRfVkFMKHJlZywgdmFsdWUsIG5ld3ZhbHVlKQkJCQkJXAorCSh2YWx1ZSA9ICgodmFsdWUpICYgfnJlZykgfCAoKChuZXd2YWx1ZSkgPDwgcmVnIyNfUykgJiByZWcpKQorCisjZGVmaW5lIFNFVF9DT05TVFZBTChyZWcsIG5ld3ZhbHVlKQkJCQkJXAorCSgoKG5ld3ZhbHVlKSA8PCByZWcjI19TKSAmIHJlZykKKworI2RlZmluZSBNT0RfVkFMKHJlZywgdmFsdWUsIG5ld3ZhbHVlKQkJCQkJXAorCSgoKHZhbHVlKSAmIH5yZWcpIHwgKCgobmV3dmFsdWUpIDw8IHJlZyMjX1MpICYgcmVnKSkKKworI2RlZmluZSBHRVRfVkFMKHJlZywgdmFsdWUpCQkJCQkJXAorCSgoKHZhbHVlKSAmIHJlZykgPj4gcmVnIyNfUykKKworI2VuZGlmCS8qIF9fQ0FSTDkxNzBfU0hBUkVEX0hXX0ggKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvaW5jbHVkZS9zaGFyZWQvcGh5LmggYi9jYXJsOTE3MGZ3L2luY2x1ZGUvc2hhcmVkL3BoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNGZiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L2luY2x1ZGUvc2hhcmVkL3BoeS5oCkBAIC0wLDAgKzEsNTY0IEBACisvKgorICogU2hhcmVkIEF0aGVyb3MgQVI5MTcwIEhlYWRlcgorICoKKyAqIFBIWSByZWdpc3RlciBtYXAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9fQ0FSTDkxNzBfU0hBUkVEX1BIWV9ICisjZGVmaW5lIF9fQ0FSTDkxNzBfU0hBUkVEX1BIWV9ICisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQkFTRQkJCSgweDFiYzAwMCArIDB4OTgwMCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUcoX24pCQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyBcCisJCQkJCQkgKChfbikgPDwgMikpCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfVEVTVAkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMDAwKQorI2RlZmluZQkJQVI5MTcwX1BIWV9URVNUX0FHQ19DTFIJCQkweDEwMDAwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RFU1RfUkZTSUxFTlRfQkIJCTB4MDAwMDIwMDAKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19UVVJCTwkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMDA0KQorI2RlZmluZQkJQVI5MTcwX1BIWV9UVVJCT19GQ19UVVJCT19NT0RFCQkweDAwMDAwMDAxCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RVUkJPX0ZDX1RVUkJPX1NIT1JUCQkweDAwMDAwMDAyCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RVUkJPX0ZDX0RZTjIwNDBfRU4JCTB4MDAwMDAwMDQKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFVSQk9fRkNfRFlOMjA0MF9QUklfT05MWQkweDAwMDAwMDA4CisjZGVmaW5lCQlBUjkxNzBfUEhZX1RVUkJPX0ZDX0RZTjIwNDBfUFJJX0NICTB4MDAwMDAwMTAKKy8qIEZvciAyNSBNSHogY2hhbm5lbCBzcGFjaW5nIC0tIG5vdCB1c2VkIGJ1dCBzdXBwb3J0ZWQgYnkgaHcgKi8KKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFVSQk9fRkNfRFlOMjA0MF9FWFRfQ0gJMHgwMDAwMDAyMAorI2RlZmluZQkJQVI5MTcwX1BIWV9UVVJCT19GQ19IVF9FTgkJMHgwMDAwMDA0MAorI2RlZmluZQkJQVI5MTcwX1BIWV9UVVJCT19GQ19TSE9SVF9HSV80MAkJMHgwMDAwMDA4MAorI2RlZmluZQkJQVI5MTcwX1BIWV9UVVJCT19GQ19XQUxTSAkJMHgwMDAwMDEwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9UVVJCT19GQ19TSU5HTEVfSFRfTFRGMQkweDAwMDAwMjAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RVUkJPX0ZDX0VOQUJMRV9EQUNfRklGTwkweDAwMDAwODAwCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfVEVTVDIJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDAwOCkKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19USU1JTkcyCQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAwMTApCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RJTUlORzJfVVNFX0ZPUkNFCQkweDAwMDAxMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RJTUlORzJfRk9SQ0UJCTB4MDAwMDBmZmYKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVElNSU5HMl9GT1JDRV9TCQkJIDAKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19USU1JTkczCQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAwMTQpCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RJTUlORzNfRFNDX0VYUAkJMHgwMDAxZTAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkczX0RTQ19FWFBfUwkJMTMKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVElNSU5HM19EU0NfTUFOCQkweGZmZmUwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RJTUlORzNfRFNDX01BTl9TCQkxNworCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NISVBfSUQJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDAxOCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0hJUF9JRF9SRVZfMAkJMHg4MAorI2RlZmluZQkJQVI5MTcwX1BIWV9DSElQX0lEX1JFVl8xCQkweDgxCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NISVBfSURfOTE2MF9SRVZfMAkJMHhiMAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0FDVElWRQkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMDFjKQorI2RlZmluZQkJQVI5MTcwX1BIWV9BQ1RJVkVfRU4JCQkweDAwMDAwMDAxCisjZGVmaW5lCQlBUjkxNzBfUEhZX0FDVElWRV9ESVMJCQkweDAwMDAwMDAwCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUkZfQ1RMMgkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMDI0KQorI2RlZmluZQkJQVI5MTcwX1BIWV9SRl9DVEwyX1RYX0VORF9EQVRBX1NUQVJUCTB4MDAwMDAwZmYKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkZfQ1RMMl9UWF9FTkRfREFUQV9TVEFSVF9TCTAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkZfQ1RMMl9UWF9FTkRfUEFfT04JCTB4MDAwMGZmMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkZfQ1RMMl9UWF9FTkRfUEFfT05fUwk4CisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUkZfQ1RMMyAgICAgICAgICAgICAgICAgIChBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMDI4KQorI2RlZmluZQkJQVI5MTcwX1BIWV9SRl9DVEwzX1RYX0VORF9UT19BMl9SWF9PTgkweDAwZmYwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JGX0NUTDNfVFhfRU5EX1RPX0EyX1JYX09OX1MJMTYKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19BRENfQ1RMCQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAwMmMpCisjZGVmaW5lCQlBUjkxNzBfUEhZX0FEQ19DVExfT0ZGX0lOQlVGR0FJTgkweDAwMDAwMDAzCisjZGVmaW5lCQlBUjkxNzBfUEhZX0FEQ19DVExfT0ZGX0lOQlVGR0FJTl9TCTAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQURDX0NUTF9PRkZfUFdEREFDCQkweDAwMDAyMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX0FEQ19DVExfT0ZGX1BXREJBTkRHQVAJMHgwMDAwNDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9BRENfQ1RMX09GRl9QV0RBREMJCTB4MDAwMDgwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQURDX0NUTF9PTl9JTkJVRkdBSU4JCTB4MDAwMzAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQURDX0NUTF9PTl9JTkJVRkdBSU5fUwkxNgorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0FEQ19TRVJJQUxfQ1RMCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDAzMCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQURDX1NDVExfU0VMX0lOVEVSTkFMX0FEREFDCTB4MDAwMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQURDX1NDVExfU0VMX0VYVEVSTkFMX1JBRElPCTB4MDAwMDAwMDEKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19SRl9DVEw0CQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAwMzQpCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUJfT0ZGCTB4ZmYwMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkZfUwkyNAorI2RlZmluZQkJQVI5MTcwX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFBX09GRgkweDAwZmYwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGX1MJMTYKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFCX09OCTB4MDAwMGZmMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFCX09OX1MJOAorI2RlZmluZQkJQVI5MTcwX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04JMHgwMDAwMDBmZgorI2RlZmluZQkJQVI5MTcwX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT05fUwkwCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfVFNUREFDX0NPTlNUCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDAzYykKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19TRVRUTElORwkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMDQ0KQorI2RlZmluZQkJQVI5MTcwX1BIWV9TRVRUTElOR19TV0lUQ0gJCTB4MDAwMDNmODAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0VUVExJTkdfU1dJVENIX1MJCTcKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19SWEdBSU4JCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDA0OCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUlhHQUlOX0NIQUlOXzIJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgyMDQ4KQorI2RlZmluZQkJQVI5MTcwX1BIWV9SWEdBSU5fVFhSWF9BVFRFTgkJMHgwMDAzZjAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9SWEdBSU5fVFhSWF9BVFRFTl9TCQkxMgorI2RlZmluZQkJQVI5MTcwX1BIWV9SWEdBSU5fVFhSWF9SRl9NQVgJCTB4MDA3YzAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUlhHQUlOX1RYUlhfUkZfTUFYX1MJCTE4CisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfREVTSVJFRF9TWgkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAwNTApCisjZGVmaW5lCQlBUjkxNzBfUEhZX0RFU0lSRURfU1pfQURDCQkweDAwMDAwMGZmCisjZGVmaW5lCQlBUjkxNzBfUEhZX0RFU0lSRURfU1pfQURDX1MJCTAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfREVTSVJFRF9TWl9QR0EJCTB4MDAwMGZmMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfREVTSVJFRF9TWl9QR0FfUwkJOAorI2RlZmluZQkJQVI5MTcwX1BIWV9ERVNJUkVEX1NaX1RPVF9ERVMJCTB4MGZmMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfREVTSVJFRF9TWl9UT1RfREVTX1MJCTIwCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfRklORF9TSUcJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDA1OCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfRklORF9TSUdfRklSU1RFUAkJMHgwMDAzZjAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9GSU5EX1NJR19GSVJTVEVQX1MJCTEyCisjZGVmaW5lCQlBUjkxNzBfUEhZX0ZJTkRfU0lHX0ZJUlBXUgkJMHgwM2ZjMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9GSU5EX1NJR19GSVJQV1JfUwkJMTgKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19BR0NfQ1RMMQkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMDVjKQorI2RlZmluZQkJQVI5MTcwX1BIWV9BR0NfQ1RMMV9DT0FSU0VfTE9XCQkweDAwMDA3ZjgwCisjZGVmaW5lCQlBUjkxNzBfUEhZX0FHQ19DVEwxX0NPQVJTRV9MT1dfUwk3CisjZGVmaW5lCQlBUjkxNzBfUEhZX0FHQ19DVEwxX0NPQVJTRV9ISUdICQkweDAwM2Y4MDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX0FHQ19DVEwxX0NPQVJTRV9ISUdIX1MJMTUKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19BR0NfQ09OVFJPTAkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAwNjApCisjZGVmaW5lCQlBUjkxNzBfUEhZX0FHQ19DT05UUk9MX0NBTAkJMHgwMDAwMDAwMQorI2RlZmluZQkJQVI5MTcwX1BIWV9BR0NfQ09OVFJPTF9ORgkJMHgwMDAwMDAwMgorI2RlZmluZQkJQVI5MTcwX1BIWV9BR0NfQ09OVFJPTF9FTkFCTEVfTkYJMHgwMDAwODAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTAkJMHgwMDAxMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9BR0NfQ09OVFJPTF9OT19VUERBVEVfTkYJMHgwMDAyMDAwMAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NDQQkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMDY0KQorI2RlZmluZQkJQVI5MTcwX1BIWV9DQ0FfTUlOX1BXUgkJCTB4MGZmODAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0NBX01JTl9QV1JfUwkJMTkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0NBX1RIUkVTSDYyCQkJMHgwMDA3ZjAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9DQ0FfVEhSRVNINjJfUwkJMTIKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19TRkNPUlIJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDA2OCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0ZDT1JSX00yQ09VTlRfVEhSCQkweDAwMDAwMDFmCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NGQ09SUl9NMkNPVU5UX1RIUl9TCQkwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NGQ09SUl9NMV9USFJFU0gJCTB4MDBmZTAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0ZDT1JSX00xX1RIUkVTSF9TCQkxNworI2RlZmluZQkJQVI5MTcwX1BIWV9TRkNPUlJfTTJfVEhSRVNICQkweDdmMDAwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NGQ09SUl9NMl9USFJFU0hfUwkJMjQKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19TRkNPUlJfTE9XCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDA2YykKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0ZDT1JSX0xPV19VU0VfU0VMRl9DT1JSX0xPVwkweDAwMDAwMDAxCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NGQ09SUl9MT1dfTTJDT1VOVF9USFJfTE9XCTB4MDAwMDNmMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0ZDT1JSX0xPV19NMkNPVU5UX1RIUl9MT1dfUwk4CisjZGVmaW5lCQlBUjkxNzBfUEhZX1NGQ09SUl9MT1dfTTFfVEhSRVNIX0xPVwkweDAwMWZjMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NGQ09SUl9MT1dfTTFfVEhSRVNIX0xPV19TCTE0CisjZGVmaW5lCQlBUjkxNzBfUEhZX1NGQ09SUl9MT1dfTTJfVEhSRVNIX0xPVwkweDBmZTAwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NGQ09SUl9MT1dfTTJfVEhSRVNIX0xPV19TCTIxCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfU0xFRVBfQ1RSX0NPTlRST0wJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAwNzApCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1NMRUVQX0NUUl9MSU1JVAkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAwNzQpCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1NMRUVQX1NDQUwJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMDc4KQorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1BMTF9DVEwJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDA3YykKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUExMX0NUTF80MAkJCTB4YWEKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUExMX0NUTF80MF81NDEzCQkweDA0CisjZGVmaW5lCQlBUjkxNzBfUEhZX1BMTF9DVExfNDQJCQkweGFiCisjZGVmaW5lCQlBUjkxNzBfUEhZX1BMTF9DVExfNDRfMjEzMwkJMHhlYgorI2RlZmluZQkJQVI5MTcwX1BIWV9QTExfQ1RMXzQwXzIxMzMJCTB4ZWEKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19CSU5fTUFTS18xCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDEwMCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQklOX01BU0tfMgkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAxMDQpCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0JJTl9NQVNLXzMJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMTA4KQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19NQVNLX0NUTAkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMTBjKQorCisvKiBhbmFsb2d1ZSBwb3dlciBvbiB0aW1lICgxMDBucykgKi8KKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUlhfREVMQVkJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDExNCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfU0VBUkNIX1NUQVJUX0RFTEFZCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMTE4KQorI2RlZmluZQkJQVI5MTcwX1BIWV9SWF9ERUxBWV9ERUxBWQkJMHgwMDAwM2ZmZgorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1RJTUlOR19DVFJMNChfaSkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgXAorCQkJCQkJKDB4MDEyMCArICgoX2kpIDw8IDEyKSkpCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYJCTB4MDFmCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkZfUwkwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYJCTB4N2UwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkZfUwk1CisjZGVmaW5lCQlBUjkxNzBfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfRU5BQkxFCQkweDgwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkdfQ1RSTDRfSVFDQUxfTE9HX0NPVU5UX01BWAkweGYwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVElNSU5HX0NUUkw0X0lRQ0FMX0xPR19DT1VOVF9NQVhfUwkxMgorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkdfQ1RSTDRfRE9fSVFDQUwJCTB4MTAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVElNSU5HX0NUUkw0X0VOQUJMRV9TUFVSX1JTU0kJMHg4MDAwMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkdfQ1RSTDRfRU5BQkxFX1NQVVJfRklMVEVSCTB4NDAwMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVElNSU5HX0NUUkw0X0VOQUJMRV9DSEFOX01BU0sJMHgyMDAwMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkdfQ1RSTDRfRU5BQkxFX1BJTE9UX01BU0sJMHgxMDAwMDAwMAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1RJTUlORzUJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDEyNCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVElNSU5HNV9DWUNQV1JfVEhSMQkJMHgwMDAwMDBmZQorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkc1X0NZQ1BXUl9USFIxX1MJMQorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1BPV0VSX1RYX1JBVEUxCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDEzNCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUE9XRVJfVFhfUkFURTIJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMTM4KQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19QT1dFUl9UWF9SQVRFX01BWAkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDEzYykKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUE9XRVJfVFhfUkFURV9NQVhfVFBDX0VOQUJMRQkweDAwMDAwMDQwCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfRlJBTUVfQ1RMCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDE0NCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfRlJBTUVfQ1RMX1RYX0NMSVAJCTB4MDAwMDAwMzgKKyNkZWZpbmUJCUFSOTE3MF9QSFlfRlJBTUVfQ1RMX1RYX0NMSVBfUwkJMworCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1NQVVJfUkVHCQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAxNGMpCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NQVVJfUkVHX01BU0tfUkFURV9DTlRMCSgweGZmIDw8IDE4KQorI2RlZmluZQkJQVI5MTcwX1BIWV9TUFVSX1JFR19NQVNLX1JBVEVfQ05UTF9TCTE4CisjZGVmaW5lCQlBUjkxNzBfUEhZX1NQVVJfUkVHX0VOQUJMRV9NQVNLX1BQTQkweDIwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NQVVJfUkVHX01BU0tfUkFURV9TRUxFQ1QJKDB4ZmYgPDwgOSkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU1BVUl9SRUdfTUFTS19SQVRFX1NFTEVDVF9TCTkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU1BVUl9SRUdfRU5BQkxFX1ZJVF9TUFVSX1JTU0kJMHgxMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU1BVUl9SRUdfU1BVUl9SU1NJX1RIUkVTSAkweDdmCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NQVVJfUkVHX1NQVVJfUlNTSV9USFJFU0hfUwkwCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUkFEQVJfRVhUCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDE0MCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkFEQVJfRVhUX0VOQQkJMHgwMDAwNDAwMAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1JBREFSXzAJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDE1NCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkFEQVJfMF9FTkEJCQkweDAwMDAwMDAxCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JBREFSXzBfRkZUX0VOQQkJMHg4MDAwMDAwMAorLyogaW5iYW5kIHB1bHNlIHRocmVzaG9sZCAqLworI2RlZmluZQkJQVI5MTcwX1BIWV9SQURBUl8wX0lOQkFORAkJMHgwMDAwMDAzZQorI2RlZmluZQkJQVI5MTcwX1BIWV9SQURBUl8wX0lOQkFORF9TCQkxCisvKiBwdWxzZSBSU1NJIHRocmVzaG9sZCAqLworI2RlZmluZQkJQVI5MTcwX1BIWV9SQURBUl8wX1BSU1NJCQkweDAwMDAwZmMwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JBREFSXzBfUFJTU0lfUwkJNgorLyogcHVsc2UgaGVpZ2h0IHRocmVzaG9sZCAqLworI2RlZmluZQkJQVI5MTcwX1BIWV9SQURBUl8wX0hFSUdIVAkJMHgwMDAzZjAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9SQURBUl8wX0hFSUdIVF9TCQkxMgorLyogcmFkYXIgUlNTSSB0aHJlc2hvbGQgKi8KKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkFEQVJfMF9SUlNTSQkJMHgwMGZjMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9SQURBUl8wX1JSU1NJX1MJCTE4CisvKiByYWRhciBmaXJlcG93ZXIgdGhyZXNob2xkICovCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JBREFSXzBfRklSUFdSCQkweDdmMDAwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JBREFSXzBfRklSUFdSX1MJCTI0CisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUkFEQVJfMQkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMTU4KQorI2RlZmluZQkJQVI5MTcwX1BIWV9SQURBUl8xX1JFTFBXUl9FTkEJCTB4MDA4MDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkFEQVJfMV9VU0VfRklSMTI4CQkweDAwNDAwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JBREFSXzFfUkVMUFdSX1RIUkVTSAkweDAwM2YwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JBREFSXzFfUkVMUFdSX1RIUkVTSF9TCTE2CisjZGVmaW5lCQlBUjkxNzBfUEhZX1JBREFSXzFfQkxPQ0tfQ0hFQ0sJCTB4MDAwMDgwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkFEQVJfMV9NQVhfUlJTU0kJCTB4MDAwMDQwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkFEQVJfMV9SRUxTVEVQX0NIRUNLCTB4MDAwMDIwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkFEQVJfMV9SRUxTVEVQX1RIUkVTSAkweDAwMDAxZjAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JBREFSXzFfUkVMU1RFUF9USFJFU0hfUwk4CisjZGVmaW5lCQlBUjkxNzBfUEhZX1JBREFSXzFfTUFYTEVOCQkweDAwMDAwMGZmCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JBREFSXzFfTUFYTEVOX1MJCTAKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19TV0lUQ0hfQ0hBSU5fMAkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAxNjApCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1NXSVRDSF9DSEFJTl8yCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MjE2MCkKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19TV0lUQ0hfQ09NCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDE2NCkKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19DQ0FfVEhSRVNIT0xECQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDE2OCkKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19TSUdNQV9ERUxUQQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAxNmMpCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NJR01BX0RFTFRBX0FEQ19TRUwJCTB4MDAwMDAwMDMKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0lHTUFfREVMVEFfQURDX1NFTF9TCTAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0lHTUFfREVMVEFfRklMVDIJCTB4MDAwMDAwZjgKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0lHTUFfREVMVEFfRklMVDJfUwkJMworI2RlZmluZQkJQVI5MTcwX1BIWV9TSUdNQV9ERUxUQV9GSUxUMQkJMHgwMDAwMWYwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9TSUdNQV9ERUxUQV9GSUxUMV9TCQk4CisjZGVmaW5lCQlBUjkxNzBfUEhZX1NJR01BX0RFTFRBX0FEQ19DTElQCQkweDAxZmZlMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NJR01BX0RFTFRBX0FEQ19DTElQX1MJMTMKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19SRVNUQVJUCQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAxNzApCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JFU1RBUlRfRElWX0dDCQkweDAwMWMwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1JFU1RBUlRfRElWX0dDX1MJCTE4CisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUkZCVVNfUkVRCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDE3YykKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkZCVVNfUkVRX0VOCQkJMHgwMDAwMDAwMQorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1RJTUlORzcJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDE4MCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfVElNSU5HOAkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMTg0KQorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkc4X1BJTE9UX01BU0tfMgkJMHgwMDBmZmZmZgorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkc4X1BJTE9UX01BU0tfMl9TCTAKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19CSU5fTUFTSzJfMQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAxODgpCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0JJTl9NQVNLMl8yCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDE4YykKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQklOX01BU0syXzMJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMTkwKQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19CSU5fTUFTSzJfNAkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAxOTQpCisjZGVmaW5lCQlBUjkxNzBfUEhZX0JJTl9NQVNLMl80X01BU0tfNAkJMHgwMDAwM2ZmZgorI2RlZmluZQkJQVI5MTcwX1BIWV9CSU5fTUFTSzJfNF9NQVNLXzRfUwkJMAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1RJTUlORzkJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDE5OCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfVElNSU5HMTAJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDE5YykKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVElNSU5HMTBfUElMT1RfTUFTS18yCTB4MDAwZmZmZmYKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVElNSU5HMTBfUElMT1RfTUFTS18yX1MJMAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1RJTUlORzExCQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAxYTApCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RJTUlORzExX1NQVVJfREVMVEFfUEhBU0UJMHgwMDBmZmZmZgorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkcxMV9TUFVSX0RFTFRBX1BIQVNFX1MJMAorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkcxMV9TUFVSX0ZSRVFfU0QJMHgzZmYwMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkcxMV9TUFVSX0ZSRVFfU0RfUwkyMAorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkcxMV9VU0VfU1BVUl9JTl9BR0MJMHg0MDAwMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9USU1JTkcxMV9VU0VfU1BVUl9JTl9TRUxGQ09SCTB4ODAwMDAwMDAKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19SWF9DSEFJTk1BU0sJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMWE0KQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19ORVdfQURDX0RDX0dBSU5fQ09SUihfaSkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyBcCisJCQkJCQkgMHgwMWI0ICsgKChfaSkgPDwgMTIpKQorI2RlZmluZQkJQVI5MTcwX1BIWV9ORVdfQURDX0dBSU5fQ09SUl9FTkFCTEUJCTB4NDAwMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfTkVXX0FEQ19EQ19PRkZTRVRfQ09SUl9FTkFCTEUJMHg4MDAwMDAwMAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX01VTFRJQ0hBSU5fR0FJTl9DVEwJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAxYWMpCisjZGVmaW5lCQlBUjkxNzBfUEhZXzkyODVfQU5UX0RJVl9DVExfQUxMCQkweDdmMDAwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZXzkyODVfQU5UX0RJVl9DVEwJCTB4MDEwMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfOTI4NV9BTlRfRElWX0NUTF9TCQkyNAorI2RlZmluZQkJQVI5MTcwX1BIWV85Mjg1X0FOVF9ESVZfQUxUX0xOQUNPTkYJMHgwNjAwMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV85Mjg1X0FOVF9ESVZfQUxUX0xOQUNPTkZfUwkyNQorI2RlZmluZQkJQVI5MTcwX1BIWV85Mjg1X0FOVF9ESVZfTUFJTl9MTkFDT05GCTB4MTgwMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfOTI4NV9BTlRfRElWX01BSU5fTE5BQ09ORl9TCTI3CisjZGVmaW5lCQlBUjkxNzBfUEhZXzkyODVfQU5UX0RJVl9BTFRfR0FJTlRCCTB4MjAwMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfOTI4NV9BTlRfRElWX0FMVF9HQUlOVEJfUwkyOQorI2RlZmluZQkJQVI5MTcwX1BIWV85Mjg1X0FOVF9ESVZfTUFJTl9HQUlOVEIJMHg0MDAwMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV85Mjg1X0FOVF9ESVZfTUFJTl9HQUlOVEJfUwkzMAorI2RlZmluZQkJQVI5MTcwX1BIWV85Mjg1X0FOVF9ESVZfTE5BMQkJMgorI2RlZmluZQkJQVI5MTcwX1BIWV85Mjg1X0FOVF9ESVZfTE5BMgkJMQorI2RlZmluZQkJQVI5MTcwX1BIWV85Mjg1X0FOVF9ESVZfTE5BMV9QTFVTX0xOQTIJMworI2RlZmluZQkJQVI5MTcwX1BIWV85Mjg1X0FOVF9ESVZfTE5BMV9NSU5VU19MTkEyCTAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfOTI4NV9BTlRfRElWX0dBSU5UQl8wCTAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfOTI4NV9BTlRfRElWX0dBSU5UQl8xCTEKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19FWFRfQ0NBMAkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMWI4KQorI2RlZmluZQkJQVI5MTcwX1BIWV9SRUdfRVhUX0NDQTBfVEhSRVNINjIJMHgwMDAwMDBmZgorI2RlZmluZQkJQVI5MTcwX1BIWV9SRUdfRVhUX0NDQTBfVEhSRVNINjJfUwkwCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfRVhUX0NDQQkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMWJjKQorI2RlZmluZQkJQVI5MTcwX1BIWV9FWFRfQ0NBX0NZQ1BXUl9USFIxCQkweDAwMDBmZTAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX0VYVF9DQ0FfQ1lDUFdSX1RIUjFfUwk5CisjZGVmaW5lCQlBUjkxNzBfUEhZX0VYVF9DQ0FfVEhSRVNINjIJCTB4MDA3ZjAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfRVhUX0NDQV9USFJFU0g2Ml9TCQkxNgorI2RlZmluZQkJQVI5MTcwX1BIWV9FWFRfQ0NBX01JTl9QV1IJCTB4ZmY4MDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfRVhUX0NDQV9NSU5fUFdSX1MJCTIzCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfU0ZDT1JSX0VYVAkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAxYzApCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NGQ09SUl9FWFRfTTFfVEhSRVNICQkweDAwMDAwMDdmCisjZGVmaW5lCQlBUjkxNzBfUEhZX1NGQ09SUl9FWFRfTTFfVEhSRVNIX1MJMAorI2RlZmluZQkJQVI5MTcwX1BIWV9TRkNPUlJfRVhUX00yX1RIUkVTSAkJMHgwMDAwM2Y4MAorI2RlZmluZQkJQVI5MTcwX1BIWV9TRkNPUlJfRVhUX00yX1RIUkVTSF9TCTcKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0ZDT1JSX0VYVF9NMV9USFJFU0hfTE9XCTB4MDAxZmMwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0ZDT1JSX0VYVF9NMV9USFJFU0hfTE9XX1MJMTQKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0ZDT1JSX0VYVF9NMl9USFJFU0hfTE9XCTB4MGZlMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0ZDT1JSX0VYVF9NMl9USFJFU0hfTE9XX1MJMjEKKyNkZWZpbmUJCUFSOTE3MF9QSFlfU0ZDT1JSX1NQVVJfU1VCQ0hOTF9TRF9TCTI4CisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfSEFMRkdJCQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDAxZDApCisjZGVmaW5lCQlBUjkxNzBfUEhZX0hBTEZHSV9EU0NfTUFOCQkweDAwMDdmZmYwCisjZGVmaW5lCQlBUjkxNzBfUEhZX0hBTEZHSV9EU0NfTUFOX1MJCTQKKyNkZWZpbmUJCUFSOTE3MF9QSFlfSEFMRkdJX0RTQ19FWFAJCTB4MDAwMDAwMGYKKyNkZWZpbmUJCUFSOTE3MF9QSFlfSEFMRkdJX0RTQ19FWFBfUwkJMAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NIQU5ORUxfTUFTS18wMV8zMAkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDFkNCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQ0hBTk5FTF9NQVNLXzMxXzYwCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMWQ4KQorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NIQU5fSU5GT19NRU1PUlkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMWRjKQorI2RlZmluZQkJQVI5MTcwX1BIWV9DSEFOX0lORk9fTUVNT1JZX0NBUFRVUkVfTUFTSwkweDAwMDEKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19IRUFWWV9DTElQX0VOQUJMRQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDFlMCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfSEVBVllfQ0xJUF9GQUNUT1JfUklGUwkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDFlYykKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUklGU19JTklUX0RFTEFZCQkweDAzZmYwMDAwCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQ0FMTU9ERQkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMWYwKQorI2RlZmluZQkJQVI5MTcwX1BIWV9DQUxNT0RFX0lRCQkJMHgwMDAwMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9DQUxNT0RFX0FEQ19HQUlOCQkweDAwMDAwMDAxCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NBTE1PREVfQURDX0RDX1BFUgkJMHgwMDAwMDAwMgorI2RlZmluZQkJQVI5MTcwX1BIWV9DQUxNT0RFX0FEQ19EQ19JTklUCQkweDAwMDAwMDAzCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUkVGQ0xLRExZCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDFmNCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUkVGQ0xLUEQJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDFmOCkKKworCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NBTF9NRUFTXzAoX2kpCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIFwKKwkJCQkJCSAweDA0MTAgKyAoKF9pKSA8PCAxMikpCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NBTF9NRUFTXzEoX2kpCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIFwKKwkJCQkJCSAweDA0MTQgXCArICgoX2kpIDw8IDEyKSkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQ0FMX01FQVNfMihfaSkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgXAorCQkJCQkJIDB4MDQxOCArICgoX2kpIDw8IDEyKSkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQ0FMX01FQVNfMyhfaSkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgXAorCQkJCQkJIDB4MDQxYyArICgoX2kpIDw8IDEyKSkKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19DVVJSRU5UX1JTU0kJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwNDFjKQorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1JGQlVTX0dSQU5UCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDQyMCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfUkZCVVNfR1JBTlRfRU4JCTB4MDAwMDAwMDEKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19DSEFOX0lORk9fR0FJTl9ESUZGCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwNGY0KQorI2RlZmluZQkJQVI5MTcwX1BIWV9DSEFOX0lORk9fR0FJTl9ESUZGX1VQUEVSX0xJTUlUCTMyMAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NIQU5fSU5GT19HQUlOCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDRmYykKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19NT0RFCQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBhMDApCisjZGVmaW5lCQlBUjkxNzBfUEhZX01PREVfQVNZTkNGSUZPCQkweDgwCisjZGVmaW5lCQlBUjkxNzBfUEhZX01PREVfQVIyMTMzCQkJMHgwOAorI2RlZmluZQkJQVI5MTcwX1BIWV9NT0RFX0FSNTExMQkJCTB4MDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfTU9ERV9BUjUxMTIJCQkweDA4CisjZGVmaW5lCQlBUjkxNzBfUEhZX01PREVfRFlOQU1JQwkJCTB4MDQKKyNkZWZpbmUJCUFSOTE3MF9QSFlfTU9ERV9SRjJHSFoJCQkweDAyCisjZGVmaW5lCQlBUjkxNzBfUEhZX01PREVfUkY1R0haCQkJMHgwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9NT0RFX0NDSwkJCTB4MDEKKyNkZWZpbmUJCUFSOTE3MF9QSFlfTU9ERV9PRkRNCQkJMHgwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9NT0RFX0RZTl9DQ0tfRElTQUJMRQkJMHgxMDAKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19DQ0tfVFhfQ1RSTAkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBhMDQpCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NDS19UWF9DVFJMX0pBUEFOCQkJMHgwMDAwMDAxMAorI2RlZmluZQkJQVI5MTcwX1BIWV9DQ0tfVFhfQ1RSTF9UWF9EQUNfU0NBTEVfQ0NLICAgICAgICAgMHgwMDAwMDAwYworI2RlZmluZQkJQVI5MTcwX1BIWV9DQ0tfVFhfQ1RSTF9UWF9EQUNfU0NBTEVfQ0NLX1MgICAgICAgMgorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NDS19ERVRFQ1QJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYTA4KQorI2RlZmluZQkJQVI5MTcwX1BIWV9DQ0tfREVURUNUX1dFQUtfU0lHX1RIUl9DQ0sJCTB4MDAwMDAwM2YKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0NLX0RFVEVDVF9XRUFLX1NJR19USFJfQ0NLX1MJMAorLyogWzEyOjZdIHNldHRsaW5nIHRpbWUgZm9yIGFudGVubmEgc3dpdGNoICovCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NDS19ERVRFQ1RfQU5UX1NXSVRDSF9USU1FCQkweDAwMDAxZmMwCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NDS19ERVRFQ1RfQU5UX1NXSVRDSF9USU1FX1MJCTYKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0NLX0RFVEVDVF9CQl9FTkFCTEVfQU5UX0ZBU1RfRElWCTB4MjAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVZfUwkxMworCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0dBSU5fMkdIWgkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBhMGMpCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0dBSU5fMkdIWl9DSEFJTl8yCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgyYTBjKQorI2RlZmluZQkJQVI5MTcwX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU4JMHgwMGZjMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU5fUwkxOAorI2RlZmluZQkJQVI5MTcwX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTgkJMHgwMDAwM2MwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTl9TCTEwCisjZGVmaW5lCQlBUjkxNzBfUEhZX0dBSU5fMkdIWl9CU1dfQVRURU4JCTB4MDAwMDAwMWYKKyNkZWZpbmUJCUFSOTE3MF9QSFlfR0FJTl8yR0haX0JTV19BVFRFTl9TCTAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfR0FJTl8yR0haX1hBVFRFTjJfTUFSR0lOCTB4MDAzZTAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfR0FJTl8yR0haX1hBVFRFTjJfTUFSR0lOX1MJMTcKKyNkZWZpbmUJCUFSOTE3MF9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOCTB4MDAwMWYwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOX1MJMTIKKyNkZWZpbmUJCUFSOTE3MF9QSFlfR0FJTl8yR0haX1hBVFRFTjJfREIJCTB4MDAwMDBmYzAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfR0FJTl8yR0haX1hBVFRFTjJfREJfUwk2CisjZGVmaW5lCQlBUjkxNzBfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCCQkweDAwMDAwMDNmCisjZGVmaW5lCQlBUjkxNzBfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCX1MJMAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NDS19SWENUUkw0CQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MGExYykKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0NLX1JYQ1RSTDRfRlJFUV9FU1RfU0hPUlQJMHgwMWY4MDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9DQ0tfUlhDVFJMNF9GUkVRX0VTVF9TSE9SVF9TCTE5CisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfREFHX0NUUkxDQ0sJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYTI4KQorI2RlZmluZQkJQVI5MTcwX1JFR19EQUdfQ1RSTENDS19FTl9SU1NJX1RIUgkweDAwMDAwMjAwCisjZGVmaW5lCQlBUjkxNzBfUkVHX0RBR19DVFJMQ0NLX1JTU0lfVEhSCQkweDAwMDFmYzAwCisjZGVmaW5lCQlBUjkxNzBfUkVHX0RBR19DVFJMQ0NLX1JTU0lfVEhSX1MJMTAKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19GT1JDRV9DTEtFTl9DQ0sJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYTJjKQorI2RlZmluZQkJQVI5MTcwX0ZPUkNFX0NMS0VOX0NDS19NUkNfTVVYCQkweDAwMDAwMDQwCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUE9XRVJfVFhfUkFURTMJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYTM0KQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19QT1dFUl9UWF9SQVRFNAkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBhMzgpCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfU0NSTV9TRVFfWFIJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYTNjKQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19IRUFERVJfREVURUNUX1hSCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MGE0MCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQ0hJUlBfREVURUNURURfWFIJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBhNDQpCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0JMVUVUT09USAkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBhNTQpCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfVFBDUkcxCQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBhNTgpCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RQQ1JHMV9OVU1fUERfR0FJTgkJMHgwMDAwYzAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9UUENSRzFfTlVNX1BEX0dBSU5fUwkJMTQKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFBDUkcxX1BEX0dBSU5fMQkJMHgwMDAzMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9UUENSRzFfUERfR0FJTl8xX1MJCTE2CisjZGVmaW5lCQlBUjkxNzBfUEhZX1RQQ1JHMV9QRF9HQUlOXzIJCTB4MDAwYzAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFBDUkcxX1BEX0dBSU5fMl9TCQkxOAorI2RlZmluZQkJQVI5MTcwX1BIWV9UUENSRzFfUERfR0FJTl8zCQkweDAwMzAwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RQQ1JHMV9QRF9HQUlOXzNfUwkJMjAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFBDUkcxX1BEX0NBTF9FTkFCTEUJCTB4MDA0MDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFBDUkcxX1BEX0NBTF9FTkFCTEVfUwkyMgorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1RYX1BXUkNUUkw0CQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MGE2NCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfVkFMSUQJMHgwMDAwMDAwMQorI2RlZmluZQkJQVI5MTcwX1BIWV9UWF9QV1JDVFJMX1BEX0FWR19WQUxJRF9TCTAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfT1VUCTB4MDAwMDAxZmUKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfT1VUX1MJMQorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0FOQUxPR19TV0FQCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MGE2OCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQU5BTE9HX1NXQVBfQUIJCTB4MDAwMQorI2RlZmluZQkJQVI5MTcwX1BIWV9BTkFMT0dfU1dBUF9BTFRfQ0hBSU4JMHgwMDAwMDA0MAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1RQQ1JHNQkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYTZjKQorI2RlZmluZQkJQVI5MTcwX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQCTB4MDAwMDAwMGYKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUF9TCTAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMQkweDAwMDAwM2YwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzFfUwk0CisjZGVmaW5lCQlBUjkxNzBfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIJMHgwMDAwZmMwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8yX1MJMTAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMyAgICAweDAwM2YwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzNfUyAgMTYKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfNCAgICAweDBmYzAwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzRfUyAgMjIKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19UWF9QV1JDVFJMNl8wCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MGE3MCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfVFhfUFdSQ1RSTDZfMQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDFhNzApCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFCTB4MDMwMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREVfUwkyNAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1RYX1BXUkNUUkw3CQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MGE3NCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFhfUFdSQ1RSTF9JTklUX1RYX0dBSU4JMHgwMWY4MDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTl9TCTE5CisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfVFhfUFdSQ1RSTDkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYTdjKQorI2RlZmluZQkJQVI5MTcwX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDSwkJMHgwMDAwN2MwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDS19TCTEwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RYX1BXUkNUUkw5X1JFU19EQ19SRU1PVkFMCTB4ODAwMDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFhfUFdSQ1RSTDlfUkVTX0RDX1JFTU9WQUxfUwkzMQorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1RYX0dBSU5fVEJMMQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBiMDApCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RYX0dBSU4JCQkweDAwMDdmMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX1RYX0dBSU5fUwkJCTEyCisKKy8qIENhcnJpZXIgbGVhayBjYWxpYnJhdGlvbiBjb250cm9sLCBkbyBpdCBhZnRlciBBR0MgY2FsaWJyYXRpb24gKi8KKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQ0xfQ0FMX0NUTAkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBiNTgpCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NMX0NBTF9FTkFCTEUJCTB4MDAwMDAwMDIKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0xfQ0FMX1BBUkFMTEVMX0NBTF9FTkFCTEUJMHgwMDAwMDAwMQorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1BPV0VSX1RYX1JBVEU1CQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MGI4YykKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUE9XRVJfVFhfUkFURTYJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYjkwKQorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NIMF9UWF9QV1JDVFJMMTEJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYjk4KQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19DSDFfVFhfUFdSQ1RSTDExCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MWI5OCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfVFhfQ0hYX1BXUkNUUkxfT0xQQ19URU1QX0NPTVAJMHgwMDAwZmMwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9UWF9DSFhfUFdSQ1RSTF9PTFBDX1RFTVBfQ09NUF9TCTEwCisKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQ0FMX0NIQUlOTUFTSwkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBiOWMpCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1ZJVF9NQVNLMl9NXzQ2XzYxCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYmEwKQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19NQVNLMl9NXzMxXzQ1CQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MGJhNCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfTUFTSzJfTV8xNl8zMAkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBiYTgpCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX01BU0syX01fMDBfMTUJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYmFjKQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19QSUxPVF9NQVNLXzAxXzMwCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MGJiMCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUElMT1RfTUFTS18zMV82MAkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBiYjQpCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX01BU0syX1BfMTVfMDEJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYmI4KQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19NQVNLMl9QXzMwXzE2CQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MGJiYykKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfTUFTSzJfUF80NV8zMQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBiYzApCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX01BU0syX1BfNjFfNDUJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYmM0KQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19QT1dFUl9UWF9TVUIJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYmM4KQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19QT1dFUl9UWF9SQVRFNwkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBiY2MpCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1BPV0VSX1RYX1JBVEU4CQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MGJkMCkKKyNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfUE9XRVJfVFhfUkFURTkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwYmQ0KQorI2RlZmluZQlBUjkxNzBfUEhZX1JFR19YUEFfQ0ZHCQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDBiZDgpCisjZGVmaW5lCQlBUjkxNzBfUEhZX0ZPUkNFX1hQQV9DRkcJCTB4MDAwMDAwMDAxCisjZGVmaW5lCQlBUjkxNzBfUEhZX0ZPUkNFX1hQQV9DRkdfUwkJMAorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NIMV9DQ0EJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MTA2NCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0gxX0NDQV9NSU5fUFdSCQkweDBmZjgwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NIMV9DQ0FfTUlOX1BXUl9TCQkxOQorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NIMl9DQ0EJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MjA2NCkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0gyX0NDQV9NSU5fUFdSCQkweDBmZjgwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NIMl9DQ0FfTUlOX1BXUl9TCQkxOQorCisjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX0NIMV9FWFRfQ0NBCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MTFiYykKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0gxX0VYVF9DQ0FfTUlOX1BXUgkJMHhmZjgwMDAwMAorI2RlZmluZQkJQVI5MTcwX1BIWV9DSDFfRVhUX0NDQV9NSU5fUFdSX1MJMjMKKworI2RlZmluZQlBUjkxNzBfUEhZX1JFR19DSDJfRVhUX0NDQQkJKEFSOTE3MF9QSFlfUkVHX0JBU0UgKyAweDIxYmMpCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NIMl9FWFRfQ0NBX01JTl9QV1IJCTB4ZmY4MDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0gyX0VYVF9DQ0FfTUlOX1BXUl9TCTIzCisKKyNlbmRpZgkvKiBfX0NBUkw5MTcwX1NIQVJFRF9QSFlfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9pbmNsdWRlL3NoYXJlZC92ZXJzaW9uLmggYi9jYXJsOTE3MGZ3L2luY2x1ZGUvc2hhcmVkL3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWMzZTkxCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9pbmNsdWRlL3NoYXJlZC92ZXJzaW9uLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQ0FSTDkxNzBfU0hBUkVEX1ZFUlNJT05fSAorI2RlZmluZSBfX0NBUkw5MTcwX1NIQVJFRF9WRVJTSU9OX0gKKyNkZWZpbmUgQ0FSTDkxNzBGV19WRVJTSU9OX1lFQVIgMTIKKyNkZWZpbmUgQ0FSTDkxNzBGV19WRVJTSU9OX01PTlRIIDcKKyNkZWZpbmUgQ0FSTDkxNzBGV19WRVJTSU9OX0RBWSA3CisjZGVmaW5lIENBUkw5MTcwRldfVkVSU0lPTl9HSVQgIjEuOS42IgorI2VuZGlmIC8qIF9fQ0FSTDkxNzBfU0hBUkVEX1ZFUlNJT05fSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9pbmNsdWRlL3NoYXJlZC93bGFuLmggYi9jYXJsOTE3MGZ3L2luY2x1ZGUvc2hhcmVkL3dsYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTE3OTk1Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9pbmNsdWRlL3NoYXJlZC93bGFuLmgKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBTaGFyZWQgQXRoZXJvcyBBUjkxNzAgSGVhZGVyCisgKgorICogUlgvVFggbWV0YSBkZXNjcmlwdG9yIGZvcm1hdAorICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgKiBwZXJtaXNzaW9uIG5vdGljZToKKyAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqCisgKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9fQ0FSTDkxNzBfU0hBUkVEX1dMQU5fSAorI2RlZmluZSBfX0NBUkw5MTcwX1NIQVJFRF9XTEFOX0gKKworI2luY2x1ZGUgImZ3Y21kLmgiCisKKyNkZWZpbmUJQVI5MTcwX1JYX1BIWV9SQVRFX0NDS18xTQkJMHgwYQorI2RlZmluZQlBUjkxNzBfUlhfUEhZX1JBVEVfQ0NLXzJNCQkweDE0CisjZGVmaW5lCUFSOTE3MF9SWF9QSFlfUkFURV9DQ0tfNU0JCTB4MzcKKyNkZWZpbmUJQVI5MTcwX1JYX1BIWV9SQVRFX0NDS18xMU0JCTB4NmUKKworI2RlZmluZQlBUjkxNzBfRU5DX0FMR19OT05FCQkJMHgwCisjZGVmaW5lCUFSOTE3MF9FTkNfQUxHX1dFUDY0CQkJMHgxCisjZGVmaW5lCUFSOTE3MF9FTkNfQUxHX1RLSVAJCQkweDIKKyNkZWZpbmUJQVI5MTcwX0VOQ19BTEdfQUVTQ0NNUAkJCTB4NAorI2RlZmluZQlBUjkxNzBfRU5DX0FMR19XRVAxMjgJCQkweDUKKyNkZWZpbmUJQVI5MTcwX0VOQ19BTEdfV0VQMjU2CQkJMHg2CisjZGVmaW5lCUFSOTE3MF9FTkNfQUxHX0NFTkMJCQkweDcKKworI2RlZmluZQlBUjkxNzBfUlhfRU5DX1NPRlRXQVJFCQkJMHg4CisKKyNkZWZpbmUJQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OCQkweDAzCisjZGVmaW5lCUFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9TCQkwCisjZGVmaW5lCUFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9DQ0sJCTB4MDAKKyNkZWZpbmUJQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX09GRE0JMHgwMQorI2RlZmluZQlBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fSFQJCTB4MDIKKyNkZWZpbmUJQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX0RVUE9GRE0JMHgwMworCisvKiBkZXBlbmRzIG9uIG1vZHVsYXRpb24gKi8KKyNkZWZpbmUJQVI5MTcwX1JYX1NUQVRVU19TSE9SVF9QUkVBTUJMRQkJMHgwOAorI2RlZmluZQlBUjkxNzBfUlhfU1RBVFVTX0dSRUVORklFTEQJCTB4MDgKKworI2RlZmluZQlBUjkxNzBfUlhfU1RBVFVTX01QRFUJCQkweDMwCisjZGVmaW5lCUFSOTE3MF9SWF9TVEFUVVNfTVBEVV9TCQkJNAorI2RlZmluZQlBUjkxNzBfUlhfU1RBVFVTX01QRFVfU0lOR0xFCQkweDAwCisjZGVmaW5lCUFSOTE3MF9SWF9TVEFUVVNfTVBEVV9GSVJTVAkJMHgyMAorI2RlZmluZQlBUjkxNzBfUlhfU1RBVFVTX01QRFVfTUlERExFCQkweDMwCisjZGVmaW5lCUFSOTE3MF9SWF9TVEFUVVNfTVBEVV9MQVNUCQkweDEwCisKKyNkZWZpbmUJQVI5MTcwX1JYX1NUQVRVU19DT05UX0FHR1IJCTB4NDAKKyNkZWZpbmUJQVI5MTcwX1JYX1NUQVRVU19UT1RBTF9FUlJPUgkJMHg4MAorCisjZGVmaW5lCUFSOTE3MF9SWF9FUlJPUl9SWFRPCQkJMHgwMQorI2RlZmluZQlBUjkxNzBfUlhfRVJST1JfT1ZFUlJVTgkJCTB4MDIKKyNkZWZpbmUJQVI5MTcwX1JYX0VSUk9SX0RFQ1JZUFQJCQkweDA0CisjZGVmaW5lCUFSOTE3MF9SWF9FUlJPUl9GQ1MJCQkweDA4CisjZGVmaW5lCUFSOTE3MF9SWF9FUlJPUl9XUk9OR19SQQkJMHgxMAorI2RlZmluZQlBUjkxNzBfUlhfRVJST1JfUExDUAkJCTB4MjAKKyNkZWZpbmUJQVI5MTcwX1JYX0VSUk9SX01NSUMJCQkweDQwCisKKy8qIHRoZXNlIGFyZSBlaXRoZXItb3IgKi8KKyNkZWZpbmUJQVI5MTcwX1RYX01BQ19QUk9UX1JUUwkJCTB4MDAwMQorI2RlZmluZQlBUjkxNzBfVFhfTUFDX1BST1RfQ1RTCQkJMHgwMDAyCisjZGVmaW5lCUFSOTE3MF9UWF9NQUNfUFJPVAkJCTB4MDAwMworCisjZGVmaW5lCUFSOTE3MF9UWF9NQUNfTk9fQUNLCQkJMHgwMDA0CisvKiBpZiB1bnNldCwgTUFDIHdpbGwgb25seSBkbyBTSUZTIHNwYWNlIGJlZm9yZSBmcmFtZSAqLworI2RlZmluZQlBUjkxNzBfVFhfTUFDX0JBQ0tPRkYJCQkweDAwMDgKKyNkZWZpbmUJQVI5MTcwX1RYX01BQ19CVVJTVAkJCTB4MDAxMAorI2RlZmluZQlBUjkxNzBfVFhfTUFDX0FHR1IJCQkweDAwMjAKKworLyogZW5jcnlwdGlvbiBpcyBhIHR3by1iaXQgZmllbGQgKi8KKyNkZWZpbmUJQVI5MTcwX1RYX01BQ19FTkNSX05PTkUJCQkweDAwMDAKKyNkZWZpbmUJQVI5MTcwX1RYX01BQ19FTkNSX1JDNAkJCTB4MDA0MAorI2RlZmluZQlBUjkxNzBfVFhfTUFDX0VOQ1JfQ0VOQwkJCTB4MDA4MAorI2RlZmluZQlBUjkxNzBfVFhfTUFDX0VOQ1JfQUVTCQkJMHgwMGMwCisKKyNkZWZpbmUJQVI5MTcwX1RYX01BQ19NTUlDCQkJMHgwMTAwCisjZGVmaW5lCUFSOTE3MF9UWF9NQUNfSFdfRFVSQVRJT04JCTB4MDIwMAorI2RlZmluZQlBUjkxNzBfVFhfTUFDX1FPU19TCQkJMTAKKyNkZWZpbmUJQVI5MTcwX1RYX01BQ19RT1MJCQkweDBjMDAKKyNkZWZpbmUJQVI5MTcwX1RYX01BQ19ESVNBQkxFX1RYT1AJCTB4MTAwMAorI2RlZmluZQlBUjkxNzBfVFhfTUFDX1RYT1BfUklGUwkJCTB4MjAwMAorI2RlZmluZQlBUjkxNzBfVFhfTUFDX0lNTV9CQQkJCTB4NDAwMAorCisvKiBlaXRoZXItb3IgKi8KKyNkZWZpbmUJQVI5MTcwX1RYX1BIWV9NT0RfQ0NLCQkJMHgwMDAwMDAwMAorI2RlZmluZQlBUjkxNzBfVFhfUEhZX01PRF9PRkRNCQkJMHgwMDAwMDAwMQorI2RlZmluZQlBUjkxNzBfVFhfUEhZX01PRF9IVAkJCTB4MDAwMDAwMDIKKworLyogZGVwZW5kcyBvbiBtb2R1bGF0aW9uICovCisjZGVmaW5lCUFSOTE3MF9UWF9QSFlfU0hPUlRfUFJFQU1CTEUJCTB4MDAwMDAwMDQKKyNkZWZpbmUJQVI5MTcwX1RYX1BIWV9HUkVFTkZJRUxECQkweDAwMDAwMDA0CisKKyNkZWZpbmUJQVI5MTcwX1RYX1BIWV9CV19TCQkJMworI2RlZmluZQlBUjkxNzBfVFhfUEhZX0JXCQkJKDMgPDwgQVI5MTcwX1RYX1BIWV9CV19TSElGVCkKKyNkZWZpbmUJQVI5MTcwX1RYX1BIWV9CV18yME1IWgkJCTAKKyNkZWZpbmUJQVI5MTcwX1RYX1BIWV9CV180ME1IWgkJCTIKKyNkZWZpbmUJQVI5MTcwX1RYX1BIWV9CV180ME1IWl9EVVAJCTMKKworI2RlZmluZQlBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVBfUwkJNgorI2RlZmluZQlBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVAJCSg3IDw8IFwKKwkJCQkJCSBBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVBfUykKKworI2RlZmluZQlBUjkxNzBfVFhfUEhZX1RYX1BXUl9TCQkJOQorI2RlZmluZQlBUjkxNzBfVFhfUEhZX1RYX1BXUgkJCSgweDNmIDw8IFwKKwkJCQkJCSBBUjkxNzBfVFhfUEhZX1RYX1BXUl9TKQorCisjZGVmaW5lCUFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TCQkJMTUKKyNkZWZpbmUJQVI5MTcwX1RYX1BIWV9UWENIQUlOCQkJKDcgPDwgXAorCQkJCQkJIEFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TKQorI2RlZmluZQlBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMQkJCTEKKy8qIHVzZSBmb3IgY2NrLCBvZmRtIDYvOS8xMi8xOC8yNCBhbmQgSFQgaWYgY2FwYWJsZSAqLworI2RlZmluZQlBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMgkJCTUKKworI2RlZmluZQlBUjkxNzBfVFhfUEhZX01DU19TCQkJMTgKKyNkZWZpbmUJQVI5MTcwX1RYX1BIWV9NQ1MJCQkoMHg3ZiA8PCBcCisJCQkJCQkgQVI5MTcwX1RYX1BIWV9NQ1NfUykKKworI2RlZmluZQlBUjkxNzBfVFhfUEhZX1JBVEVfQ0NLXzFNCQkweDAKKyNkZWZpbmUJQVI5MTcwX1RYX1BIWV9SQVRFX0NDS18yTQkJMHgxCisjZGVmaW5lCUFSOTE3MF9UWF9QSFlfUkFURV9DQ0tfNU0JCTB4MgorI2RlZmluZQlBUjkxNzBfVFhfUEhZX1JBVEVfQ0NLXzExTQkJMHgzCisKKy8qIHNhbWUgYXMgQVI5MTcwX1JYX1BIWV9SQVRFICovCisjZGVmaW5lCUFSOTE3MF9UWFJYX1BIWV9SQVRFX09GRE1fNk0JCTB4YgorI2RlZmluZQlBUjkxNzBfVFhSWF9QSFlfUkFURV9PRkRNXzlNCQkweGYKKyNkZWZpbmUJQVI5MTcwX1RYUlhfUEhZX1JBVEVfT0ZETV8xMk0JCTB4YQorI2RlZmluZQlBUjkxNzBfVFhSWF9QSFlfUkFURV9PRkRNXzE4TQkJMHhlCisjZGVmaW5lCUFSOTE3MF9UWFJYX1BIWV9SQVRFX09GRE1fMjRNCQkweDkKKyNkZWZpbmUJQVI5MTcwX1RYUlhfUEhZX1JBVEVfT0ZETV8zNk0JCTB4ZAorI2RlZmluZQlBUjkxNzBfVFhSWF9QSFlfUkFURV9PRkRNXzQ4TQkJMHg4CisjZGVmaW5lCUFSOTE3MF9UWFJYX1BIWV9SQVRFX09GRE1fNTRNCQkweGMKKworI2RlZmluZQlBUjkxNzBfVFhSWF9QSFlfUkFURV9IVF9NQ1MwCQkweDAKKyNkZWZpbmUJQVI5MTcwX1RYUlhfUEhZX1JBVEVfSFRfTUNTMQkJMHgxCisjZGVmaW5lCUFSOTE3MF9UWFJYX1BIWV9SQVRFX0hUX01DUzIJCTB4MgorI2RlZmluZQlBUjkxNzBfVFhSWF9QSFlfUkFURV9IVF9NQ1MzCQkweDMKKyNkZWZpbmUJQVI5MTcwX1RYUlhfUEhZX1JBVEVfSFRfTUNTNAkJMHg0CisjZGVmaW5lCUFSOTE3MF9UWFJYX1BIWV9SQVRFX0hUX01DUzUJCTB4NQorI2RlZmluZQlBUjkxNzBfVFhSWF9QSFlfUkFURV9IVF9NQ1M2CQkweDYKKyNkZWZpbmUJQVI5MTcwX1RYUlhfUEhZX1JBVEVfSFRfTUNTNwkJMHg3CisjZGVmaW5lCUFSOTE3MF9UWFJYX1BIWV9SQVRFX0hUX01DUzgJCTB4OAorI2RlZmluZQlBUjkxNzBfVFhSWF9QSFlfUkFURV9IVF9NQ1M5CQkweDkKKyNkZWZpbmUJQVI5MTcwX1RYUlhfUEhZX1JBVEVfSFRfTUNTMTAJCTB4YQorI2RlZmluZQlBUjkxNzBfVFhSWF9QSFlfUkFURV9IVF9NQ1MxMQkJMHhiCisjZGVmaW5lCUFSOTE3MF9UWFJYX1BIWV9SQVRFX0hUX01DUzEyCQkweGMKKyNkZWZpbmUJQVI5MTcwX1RYUlhfUEhZX1JBVEVfSFRfTUNTMTMJCTB4ZAorI2RlZmluZQlBUjkxNzBfVFhSWF9QSFlfUkFURV9IVF9NQ1MxNAkJMHhlCisjZGVmaW5lCUFSOTE3MF9UWFJYX1BIWV9SQVRFX0hUX01DUzE1CQkweGYKKworI2RlZmluZQlBUjkxNzBfVFhfUEhZX1NIT1JUX0dJCQkJMHg4MDAwMDAwMAorCisjaWZkZWYgX19DQVJMOTE3MEZXX18KK3N0cnVjdCBhcjkxNzBfdHhfaHdfbWFjX2NvbnRyb2wgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCS8qCisJCQkgKiBCZXdhcmUgb2YgY29tcGlsZXIgYnVncyBpbiBhbGwgZ2NjIHByZSA0LjQhCisJCQkgKi8KKworCQkJdTggZXJwX3Byb3Q6MjsKKwkJCXU4IG5vX2FjazoxOworCQkJdTggYmFja29mZjoxOworCQkJdTggYnVyc3Q6MTsKKwkJCXU4IGFtcGR1OjE7CisKKwkJCXU4IGVuY19tb2RlOjI7CisKKwkJCXU4IGh3X21taWM6MTsKKwkJCXU4IGh3X2R1cmF0aW9uOjE7CisKKwkJCXU4IHFvc19xdWV1ZToyOworCisJCQl1OCBkaXNhYmxlX3R4b3A6MTsKKwkJCXU4IHR4b3BfcmlmczoxOworCisJCQl1OCBiYV9lbmQ6MTsKKwkJCXU4IHByb2JlOjE7CisJCX0gX19wYWNrZWQ7CisKKwkJX19sZTE2IHNldDsKKwl9IF9fcGFja2VkOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFyOTE3MF90eF9od19waHlfY29udHJvbCB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJLyoKKwkJCSAqIEJld2FyZSBvZiBjb21waWxlciBidWdzIGluIGFsbCBnY2MgcHJlIDQuNCEKKwkJCSAqLworCisJCQl1OCBtb2R1bGF0aW9uOjI7CisJCQl1OCBwcmVhbWJsZToxOworCQkJdTggYmFuZHdpZHRoOjI7CisJCQl1ODoxOworCQkJdTggaGVhdnlfY2xpcDozOworCQkJdTggdHhfcG93ZXI6NjsKKwkJCXU4IGNoYWluczozOworCQkJdTggbWNzOjc7CisJCQl1ODo2OworCQkJdTggc2hvcnRfZ2k6MTsKKwkJfSBfX3BhY2tlZDsKKworCQlfX2xlMzIgc2V0OworCX0gX19wYWNrZWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI5MTcwX3R4X3JhdGVfaW5mbyB7CisJdTggdHJpZXM6MzsKKwl1OCBlcnBfcHJvdDoyOworCXU4IGFtcGR1OjE7CisJdTggZnJlZToyOyAvKiBmcmVlIGZvciB1c2UgKGUuZy46UklGUy9UWE9QL0FNUERVKSAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGNhcmw5MTcwX3R4X3N1cGVyZGVzYyB7CisJX19sZTE2IGxlbjsKKwl1OCByaXg7CisJdTggY250OworCXU4IGNvb2tpZTsKKwl1OCBhbXBkdV9kZW5zaXR5OjM7CisJdTggYW1wZHVfZmFjdG9yOjI7CisJdTggYW1wZHVfY29tbWl0X2RlbnNpdHk6MTsKKwl1OCBhbXBkdV9jb21taXRfZmFjdG9yOjE7CisJdTggYW1wZHVfdW51c2VkX2JpdDoxOworCXU4IHF1ZXVlOjI7CisJdTggYXNzaWduX3NlcToxOworCXU4IHZpZl9pZDozOworCXU4IGZpbGxfaW5fdHNmOjE7CisJdTggY2FiOjE7CisJdTggcGFkZGluZzI7CisJc3RydWN0IGFyOTE3MF90eF9yYXRlX2luZm8gcmlbQ0FSTDkxNzBfVFhfTUFYX1JBVEVTXTsKKwlzdHJ1Y3QgYXI5MTcwX3R4X2h3X3BoeV9jb250cm9sIHJyW0NBUkw5MTcwX1RYX01BWF9SRVRSWV9SQVRFU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI5MTcwX3R4X2h3ZGVzYyB7CisJX19sZTE2IGxlbmd0aDsKKwlzdHJ1Y3QgYXI5MTcwX3R4X2h3X21hY19jb250cm9sIG1hYzsKKwlzdHJ1Y3QgYXI5MTcwX3R4X2h3X3BoeV9jb250cm9sIHBoeTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcjkxNzBfdHhfZnJhbWUgeworCXN0cnVjdCBhcjkxNzBfdHhfaHdkZXNjIGhkcjsKKworCXVuaW9uIHsKKwkJc3RydWN0IGllZWU4MDIxMV9oZHIgaTNlOworCQl1OCBwYXlsb2FkWzBdOworCX0gZGF0YTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYXJsOTE3MF90eF9zdXBlcmZyYW1lIHsKKwlzdHJ1Y3QgY2FybDkxNzBfdHhfc3VwZXJkZXNjIHM7CisJc3RydWN0IGFyOTE3MF90eF9mcmFtZSBmOworfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CisKKyNlbmRpZiAvKiBfX0NBUkw5MTcwRldfXyAqLworCitzdHJ1Y3QgX2FyOTE3MF90eF9od2Rlc2MgeworCV9fbGUxNiBsZW5ndGg7CisJX19sZTE2IG1hY19jb250cm9sOworCV9fbGUzMiBwaHlfY29udHJvbDsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUJQ0FSTDkxNzBfVFhfU1VQRVJfQU1QRFVfREVOU0lUWV9TCQkwCisjZGVmaW5lCUNBUkw5MTcwX1RYX1NVUEVSX0FNUERVX0RFTlNJVFkJCQkweDcKKyNkZWZpbmUJQ0FSTDkxNzBfVFhfU1VQRVJfQU1QRFVfRkFDVE9SCQkJMHgxOAorI2RlZmluZQlDQVJMOTE3MF9UWF9TVVBFUl9BTVBEVV9GQUNUT1JfUwkJMworI2RlZmluZQlDQVJMOTE3MF9UWF9TVVBFUl9BTVBEVV9DT01NSVRfREVOU0lUWQkJMHgyMAorI2RlZmluZQlDQVJMOTE3MF9UWF9TVVBFUl9BTVBEVV9DT01NSVRfREVOU0lUWV9TCTUKKyNkZWZpbmUJQ0FSTDkxNzBfVFhfU1VQRVJfQU1QRFVfQ09NTUlUX0ZBQ1RPUgkJMHg0MAorI2RlZmluZQlDQVJMOTE3MF9UWF9TVVBFUl9BTVBEVV9DT01NSVRfRkFDVE9SX1MJCTYKKworI2RlZmluZSBDQVJMOTE3MF9UWF9TVVBFUl9NSVNDX1FVRVVFCQkJMHgzCisjZGVmaW5lIENBUkw5MTcwX1RYX1NVUEVSX01JU0NfUVVFVUVfUwkJCTAKKyNkZWZpbmUgQ0FSTDkxNzBfVFhfU1VQRVJfTUlTQ19BU1NJR05fU0VRCQkweDQKKyNkZWZpbmUJQ0FSTDkxNzBfVFhfU1VQRVJfTUlTQ19WSUZfSUQJCQkweDM4CisjZGVmaW5lCUNBUkw5MTcwX1RYX1NVUEVSX01JU0NfVklGX0lEX1MJCQkzCisjZGVmaW5lCUNBUkw5MTcwX1RYX1NVUEVSX01JU0NfRklMTF9JTl9UU0YJCTB4NDAKKyNkZWZpbmUJQ0FSTDkxNzBfVFhfU1VQRVJfTUlTQ19DQUIJCQkweDgwCisKKyNkZWZpbmUgQ0FSTDkxNzBfVFhfU1VQRVJfUklfVFJJRVMJCQkweDcKKyNkZWZpbmUgQ0FSTDkxNzBfVFhfU1VQRVJfUklfVFJJRVNfUwkJCTAKKyNkZWZpbmUgQ0FSTDkxNzBfVFhfU1VQRVJfUklfRVJQX1BST1QJCQkweDE4CisjZGVmaW5lIENBUkw5MTcwX1RYX1NVUEVSX1JJX0VSUF9QUk9UX1MJCQkzCisjZGVmaW5lIENBUkw5MTcwX1RYX1NVUEVSX1JJX0FNUERVCQkJMHgyMAorI2RlZmluZSBDQVJMOTE3MF9UWF9TVVBFUl9SSV9BTVBEVV9TCQkJNQorCitzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N1cGVyZGVzYyB7CisJX19sZTE2IGxlbjsKKwl1OCByaXg7CisJdTggY250OworCXU4IGNvb2tpZTsKKwl1OCBhbXBkdV9zZXR0aW5nczsKKwl1OCBtaXNjOworCXU4IHBhZGRpbmc7CisJdTggcmlbQ0FSTDkxNzBfVFhfTUFYX1JBVEVTXTsKKwlfX2xlMzIgcnJbQ0FSTDkxNzBfVFhfTUFYX1JFVFJZX1JBVEVTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBfY2FybDkxNzBfdHhfc3VwZXJmcmFtZSB7CisJc3RydWN0IF9jYXJsOTE3MF90eF9zdXBlcmRlc2MgczsKKwlzdHJ1Y3QgX2FyOTE3MF90eF9od2Rlc2MgZjsKKwl1OCBmcmFtZV9kYXRhWzBdOworfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CisKKyNkZWZpbmUJQ0FSTDkxNzBfVFhfU1VQRVJERVNDX0xFTgkJMjQKKyNkZWZpbmUJQVI5MTcwX1RYX0hXREVTQ19MRU4JCQk4CisjZGVmaW5lCUNBUkw5MTcwX1RYX1NVUEVSRlJBTUVfTEVOCQkoQ0FSTDkxNzBfVFhfU1VQRVJERVNDX0xFTiArIFwKKwkJCQkJCSBBUjkxNzBfVFhfSFdERVNDX0xFTikKKworc3RydWN0IGFyOTE3MF9yeF9oZWFkIHsKKwl1OCBwbGNwWzEyXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUJQVI5MTcwX1JYX0hFQURfTEVOCQkJMTIKKworc3RydWN0IGFyOTE3MF9yeF9waHlzdGF0dXMgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4IHJzc2lfYW50MCwgcnNzaV9hbnQxLCByc3NpX2FudDIsCisJCQkJcnNzaV9hbnQweCwgcnNzaV9hbnQxeCwgcnNzaV9hbnQyeCwKKwkJCQlyc3NpX2NvbWJpbmVkOworCQl9IF9fcGFja2VkOworCQl1OCByc3NpWzddOworCX0gX19wYWNrZWQ7CisKKwl1OCBldm1fc3RyZWFtMFs2XSwgZXZtX3N0cmVhbTFbNl07CisJdTggcGh5X2VycjsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUJQVI5MTcwX1JYX1BIWVNUQVRVU19MRU4JCQkyMAorCitzdHJ1Y3QgYXI5MTcwX3J4X21hY3N0YXR1cyB7CisJdTggU0FpZHgsIERBaWR4OworCXU4IGVycm9yOworCXU4IHN0YXR1czsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUJQVI5MTcwX1JYX01BQ1NUQVRVU19MRU4JCQk0CisKK3N0cnVjdCBhcjkxNzBfcnhfZnJhbWVfc2luZ2xlIHsKKwlzdHJ1Y3QgYXI5MTcwX3J4X2hlYWQgcGh5X2hlYWQ7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgaTNlOworCXN0cnVjdCBhcjkxNzBfcnhfcGh5c3RhdHVzIHBoeV90YWlsOworCXN0cnVjdCBhcjkxNzBfcnhfbWFjc3RhdHVzIG1hY3N0YXR1czsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcjkxNzBfcnhfZnJhbWVfaGVhZCB7CisJc3RydWN0IGFyOTE3MF9yeF9oZWFkIHBoeV9oZWFkOworCXN0cnVjdCBpZWVlODAyMTFfaGRyIGkzZTsKKwlzdHJ1Y3QgYXI5MTcwX3J4X21hY3N0YXR1cyBtYWNzdGF0dXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI5MTcwX3J4X2ZyYW1lX21pZGRsZSB7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgaTNlOworCXN0cnVjdCBhcjkxNzBfcnhfbWFjc3RhdHVzIG1hY3N0YXR1czsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcjkxNzBfcnhfZnJhbWVfdGFpbCB7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgaTNlOworCXN0cnVjdCBhcjkxNzBfcnhfcGh5c3RhdHVzIHBoeV90YWlsOworCXN0cnVjdCBhcjkxNzBfcnhfbWFjc3RhdHVzIG1hY3N0YXR1czsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcjkxNzBfcnhfZnJhbWUgeworCXVuaW9uIHsKKwkJc3RydWN0IGFyOTE3MF9yeF9mcmFtZV9zaW5nbGUgc2luZ2xlOworCQlzdHJ1Y3QgYXI5MTcwX3J4X2ZyYW1lX2hlYWQgaGVhZDsKKwkJc3RydWN0IGFyOTE3MF9yeF9mcmFtZV9taWRkbGUgbWlkZGxlOworCQlzdHJ1Y3QgYXI5MTcwX3J4X2ZyYW1lX3RhaWwgdGFpbDsKKwl9IF9fcGFja2VkOworfSBfX3BhY2tlZDsKKworc3RhdGljIGlubGluZSB1OCBhcjkxNzBfZ2V0X2RlY3J5cHRfdHlwZShzdHJ1Y3QgYXI5MTcwX3J4X21hY3N0YXR1cyAqdCkKK3sKKwlyZXR1cm4gKHQtPlNBaWR4ICYgMHhjMCkgPj4gNCB8CisJICAgICAgICh0LT5EQWlkeCAmIDB4YzApID4+IDY7Cit9CisKKy8qCisgKiBUaGlzIGlzIGFuIHdvcmthcm91bmQgZm9yIHNldmVyYWwgdW5kb2N1bWVudGVkIGJ1Z3MuCisgKiBEb24ndCBtZXNzIHdpdGggdGhlIFFvUy9BQyA8LT4gSFcgUXVldWUgbWFwLCBpZiB5b3UgZG9uJ3QKKyAqIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorICoKKyAqIEtub3duIHByb2JsZW1zIFtoYXJkd2FyZV06CisgKiAgKiBUaGUgTUFDIGRvZXMgbm90IGFnZ3JlZ2F0ZSBmcmFtZXMgb24gYW55dGhpbmcgb3RoZXIKKyAqICAgIHRoYW4gdGhlIGZpcnN0IEhXIHF1ZXVlLgorICogICogd2hlbiBhbiBBTVBEVSBpcyBwbGFjZWQgW2luIHRoZSBmaXJzdCBodyBxdWV1ZV0gYW5kCisgKiAgICBhZGRpdGlvbmFsIGZyYW1lcyBhcmUgYWxyZWFkeSBxdWV1ZWQgb24gYSBkaWZmZXJlbnQKKyAqICAgIGh3IHF1ZXVlLCB0aGUgTUFDIHdpbGwgQUxXQVlTIGZyZWV6ZS4KKyAqCisgKiBJbiBhIG51dHNoZWxsOiBUaGUgaGFyZHdhcmUgY2FuIGVpdGhlciBkbyBRb1Mgb3IKKyAqIEFnZ3JlZ2F0aW9uIGJ1dCBub3QgYm90aCBhdCB0aGUgc2FtZSB0aW1lLiBBcyBhCisgKiByZXN1bHQsIHRoaXMgbWFrZXMgdGhlIGRldmljZSBwcmV0dHkgbXVjaCB1c2VsZXNzCisgKiBmb3IgYW55IHNlcmlvdXMgODAyLjExbiBzZXR1cC4KKyAqLworZW51bSBhcjkxNzBfdHhxIHsKKwlBUjkxNzBfVFhRX0JLID0gMCwJLyogVFhRMCAqLworCUFSOTE3MF9UWFFfQkUsCQkvKiBUWFExCSovCisJQVI5MTcwX1RYUV9WSSwJCS8qIFRYUTIJKi8KKwlBUjkxNzBfVFhRX1ZPLAkJLyogVFhRMyAqLworCisJX19BUjkxNzBfTlVNX1RYUSwKK307CisKKyNkZWZpbmUJQVI5MTcwX1RYUV9ERVBUSAkJCTMyCisKKyNlbmRpZiAvKiBfX0NBUkw5MTcwX1NIQVJFRF9XTEFOX0ggKi8KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvbWluaWZ3L0NNYWtlTGlzdHMudHh0IGIvY2FybDkxNzBmdy9taW5pZncvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmNWUwOAotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvbWluaWZ3L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMjAgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjgpCisKK3Byb2plY3QobWluaWJvb3QuZncpCisKK2luY2x1ZGUoIi4uL2V4dHJhL3NoLWVsZi1saW51eC5jbWFrZSIpCitpbmNsdWRlKCIuLi9jb25maWcuY21ha2UiKQorCitzZXQobWluaWJvb3Rfc3JjIG1pbmlib290LlMpCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMobWluaWJvb3QuUyBQUk9QRVJUSUVTIExBTkdVQUdFIEMpCisKK2FkZF9leGVjdXRhYmxlKG1pbmlib290LmVsZiBtaW5pYm9vdC5TKQorCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMobWluaWJvb3QuZWxmIFBST1BFUlRJRVMgTElOS0VSX0xBTkdVQUdFIEMpCisKK3NldF90YXJnZXRfcHJvcGVydGllcyhtaW5pYm9vdC5lbGYgUFJPUEVSVElFUyBMSU5LX0ZMQUdTICItVG1pbmlib290LmxkcyIpCisKK2FkZF9jdXN0b21fdGFyZ2V0KAorCW1pbmlib290LmZ3IEFMTAorCSR7T0JKQ09QWX0gLS1zdHJpcC11bm5lZWRlZCAtTyBiaW5hcnkgLVIgLnNyYW0gLVIgLmVlcHJvbSAtUiAuZndkc2MgbWluaWJvb3QuZWxmIG1pbmlib290LmZ3CisJREVQRU5EUyBtaW5pYm9vdC5lbGYpCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L21pbmlmdy9LY29uZmlnIGIvY2FybDkxNzBmdy9taW5pZncvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDI5YmQyCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy9taW5pZncvS2NvbmZpZwpAQCAtMCwwICsxLDMgQEAKK2NvbmZpZyBDQVJMOTE3MEZXX0JVSUxEX01JTklCT09UCisJZGVmX2Jvb2wgeQorCXByb21wdCAiQnVpbGQgTWluaUJvb3QgRmlybXdhcmUgSGVhZGVyIgpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy9taW5pZncvbWluaWJvb3QuUyBiL2Nhcmw5MTcwZncvbWluaWZ3L21pbmlib290LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkNTk4ZQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvbWluaWZ3L21pbmlib290LlMKQEAgLTAsMCArMSw3IEBACisJLmdsb2JsIF9zdGFydAorCS50eXBlICBfc3RhcnQsIEBmdW5jdGlvbgorCS5zZWN0aW9uICIuYm9vdCIsICJheCIKKwlfc3RhcnQ6CisJCW1vdi5sIHN0YXJ0Y29kZSwgcjAKKwkJam1wIEByMAorc3RhcnRjb2RlOgkubG9uZyAweDAwMDAwMDA4CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L21pbmlmdy9taW5pYm9vdC5sZHMgYi9jYXJsOTE3MGZ3L21pbmlmdy9taW5pYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFlNWFjNAotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvbWluaWZ3L21pbmlib290LmxkcwpAQCAtMCwwICsxLDIwIEBACitFTlRSWShfc3RhcnQpOworCitNRU1PUlkKK3sKKyAgICBwcmFtICAgICA6IE9SSUdJTiA9IDB4MjAwMDAwLCBMRU5HVEggPSAxNmsKK30KKworU0VDVElPTlMKK3sKKwkucGFkZGluZyA6IHsKKwkJLyogTk9QIE5PUCBqdXN0IGluIGNhc2UgKi8KKwkJTE9ORygweDAwMDkwMDA5KQorCX0gPiBwcmFtCisKKwkuYm9vdCAgIDogeyAqKC5ib290KSB9ID4gcHJhbQorCS50ZXh0CTogeyAqKC50ZXh0KikgfSA+IHByYW0KKwkucm9kYXRhCTogeyAqKC5yb2RhdGEqKSB9ID4gcHJhbQorCS5ic3MJOiB7ICooLmJzcykgfSA+IHByYW0KKwkuZGF0YQk6IHsgKiguZGF0YSopIH0gPiBwcmFtCit9CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xjaGFpbi9NYWtlZmlsZSBiL2Nhcmw5MTcwZncvdG9vbGNoYWluL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjVmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xjaGFpbi9NYWtlZmlsZQpAQCAtMCwwICsxLDY2IEBACitCSU5VVElMU19WRVI9Mi4yMgorQklOVVRJTFNfVVJMPWh0dHA6Ly9taXJyb3JzLmtlcm5lbC5vcmcvZ251L2JpbnV0aWxzL2JpbnV0aWxzLSQoQklOVVRJTFNfVkVSKS50YXIuYnoyCitCSU5VVElMU19UQVI9YmludXRpbHMtJChCSU5VVElMU19WRVIpLnRhci5iejIKKworTkVXTElCX1ZFUj0xLjIwLjAKK05FV0xJQl9VUkw9ZnRwOi8vc291cmNlcy5yZWRoYXQuY29tL3B1Yi9uZXdsaWIvbmV3bGliLSQoTkVXTElCX1ZFUikudGFyLmd6CitORVdMSUJfVEFSPW5ld2xpYi0kKE5FV0xJQl9WRVIpLnRhci5negorCitHQ0NfVkVSPTQuNy4xCitHQ0NfVVJMPWh0dHA6Ly9taXJyb3JzLmtlcm5lbC5vcmcvZ251L2djYy9nY2MtJChHQ0NfVkVSKS9nY2MtJChHQ0NfVkVSKS50YXIuYnoyCitHQ0NfVEFSPWdjYy0kKEdDQ19WRVIpLnRhci5iejIKKworQkFTRURJUj0kKHNoZWxsIHB3ZCkKKworZGVmaW5lIGNoZWNrc3VtCitAaWYgZ3JlcCAtcSAnICAkKHN1YnN0IC4sXC4sJCgxKSkkJCcgU0hBMjU2U1VNUzsgdGhlbgkJCVwKKwlncmVwICcgICQoc3Vic3QgLixcLiwkKDEpKSQkJyBTSEEyNTZTVU1TIHwgc2hhMjU2c3VtIC1jOwlcCitlbHNlCQkJCQkJCQkJXAorCWVjaG8gIldBUk5JTkc6IG5vIGNoZWNrc3VtIGRlZmluZWQgZm9yICQoMSkiOwkJCVwKK2ZpCitlbmRlZgorCithbGw6IGdjYworCitzcmMvJChCSU5VVElMU19UQVIpOgorCXdnZXQgLVAgc3JjICQoQklOVVRJTFNfVVJMKQorCSQoY2FsbCBjaGVja3N1bSwkQCkKKworc3JjLyQoTkVXTElCX1RBUik6CisJd2dldCAtUCBzcmMgJChORVdMSUJfVVJMKQorCSQoY2FsbCBjaGVja3N1bSwkQCkKKworc3JjLyQoR0NDX1RBUik6CisJd2dldCAtUCBzcmMgJChHQ0NfVVJMKQorCSQoY2FsbCBjaGVja3N1bSwkQCkKKworc3JjL2JpbnV0aWxzLSQoQklOVVRJTFNfVkVSKTogc3JjLyQoQklOVVRJTFNfVEFSKQorCXRhciAtQyBzcmMgLXhqZiAkPAorCitzcmMvbmV3bGliLSQoTkVXTElCX1ZFUik6IHNyYy8kKE5FV0xJQl9UQVIpCisJdGFyIC1DIHNyYyAteHpmICQ8CisKK3NyYy9nY2MtJChHQ0NfVkVSKTogc3JjLyQoR0NDX1RBUikgc3JjL25ld2xpYi0kKE5FV0xJQl9WRVIpCisJdGFyIC1DIHNyYyAteGpmICQ8CisJbG4gLXMgJChCQVNFRElSKS9zcmMvbmV3bGliLSQoTkVXTElCX1ZFUikvbmV3bGliICRACisJbG4gLXMgJChCQVNFRElSKS9zcmMvbmV3bGliLSQoTkVXTElCX1ZFUikvbGliZ2xvc3MgJEAKKworYmludXRpbHM6IHNyYy9iaW51dGlscy0kKEJJTlVUSUxTX1ZFUikKKwlta2RpciAtcCBidWlsZC9iaW51dGlscworCWNkIGJ1aWxkL2JpbnV0aWxzOyBcCisJJChCQVNFRElSKS8kPC9jb25maWd1cmUgLS10YXJnZXQ9c2gtZWxmIC0tcHJlZml4PSQoQkFTRURJUikvaW5zdDsgXAorCSQoTUFLRSkgLWozOyBcCisJJChNQUtFKSBpbnN0YWxsCisKK2djYzogc3JjL2djYy0kKEdDQ19WRVIpIGJpbnV0aWxzCisJbWtkaXIgLXAgYnVpbGQvZ2NjCisJY2QgYnVpbGQvZ2NjOyBcCisJJChCQVNFRElSKS8kPC9jb25maWd1cmUgLS10YXJnZXQ9c2gtZWxmIC0tcHJlZml4PSQoQkFTRURJUikvaW5zdCAtZW5hYmxlLWxhbmd1YWdlcz1jIC0td2l0aG91dC1wa2d2ZXJzaW9uIC0td2l0aC1uZXdsaWI7IFwKKwkkKE1BS0UpIC1qMzsgXAorCSQoTUFLRSkgaW5zdGFsbAorCitjbGVhbjoKKwlybSAtcmYgYnVpbGQgaW5zdAorCitkaXN0Y2xlYW46IGNsZWFuCisJcm0gLXJmIHNyYwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy90b29sY2hhaW4vU0hBMjU2U1VNUyBiL2Nhcmw5MTcwZncvdG9vbGNoYWluL1NIQTI1NlNVTVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjMzkxMQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvdG9vbGNoYWluL1NIQTI1NlNVTVMKQEAgLTAsMCArMSwzIEBACis2YzdhZjhlZDFjOGNmOWI0YjlkNmU2ZmUwOWEzZTFkM2Q0NzlmZTYzOTg0YmE4YjliMjZiZjM1NmI2MzEzY2E5ICBzcmMvYmludXRpbHMtMi4yMi50YXIuYnoyCisxNjA5M2Y2ZmEwMTczMmFkZjM3OGQ5N2ZlMzM4ZjExM2M5MzNiZGY1NmRhMjJiZjg3Yzc2YmVmZjEzZGE0MDZmICBzcmMvZ2NjLTQuNy4xLnRhci5iejIKK2M2NDRiMjg0NzI0NDI3OGM1N2JlYzJkZGRhNjlkOGZhYjVhN2M3NjdmM2I5YWY2OWFhN2FhM2RhODIzZmY2OTIgIHNyYy9uZXdsaWItMS4yMC4wLnRhci5negpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy90b29scy9DTWFrZUxpc3RzLnR4dCBiL2Nhcmw5MTcwZncvdG9vbHMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkNzFmYQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvdG9vbHMvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzOCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOCkKKworcHJvamVjdCh0b29scykKKworaWYgKENPTkZJR19DQVJMOTE3MEZXX01BS0VfUkVMRUFTRSkKKwlzZXQoQ01BS0VfQlVJTERfVFlQRSBSZWxlYXNlKQorZW5kaWYgKENPTkZJR19DQVJMOTE3MEZXX01BS0VfUkVMRUFTRSkKKworc2V0KENNQUtFX01PRFVMRV9QQVRIICR7Q01BS0VfU09VUkNFX0RJUn0vZXh0cmEpCisKK2luY2x1ZGUoR0NDVmVyc2lvbikKK2luY2x1ZGUoIi4uL2NvbmZpZy5jbWFrZSIpCisKK19DT01QSUxFUl9EVU1QVkVSU0lPTihfQ09NUElMRVJfVkVSU0lPTikKKworaWYgKCgiJHtfQ09NUElMRVJfVkVSU0lPTn0iIFZFUlNJT05fR1JFQVRFUiA0NCkgT1IKKyAgICAoIiR7X0NPTVBJTEVSX1ZFUlNJT059IiBWRVJTSU9OX0VRVUFMIDQ0KSkKKworCWluY2x1ZGVfZGlyZWN0b3JpZXMgKC4uL2luY2x1ZGUvbGludXggLi4vaW5jbHVkZS9zaGFyZWQgLi4vaW5jbHVkZSBsaWIgaW5jbHVkZSkKKwlhZGRfc3ViZGlyZWN0b3J5KGxpYikKKwlhZGRfc3ViZGlyZWN0b3J5KHNyYykKKworCWlmIChDT05GSUdfQ0FSTDkxNzBGV19CVUlMRF9UT09MU19DQVJMVSkKKwkJZmluZF9wYWNrYWdlKFNETCBRVUlFVCkKKwkJZmluZF9wYWNrYWdlKFVTQi0xLjAgUVVJRVQpCisKKwkJaWYgKCIke1VTQi0xLjBfRk9VTkR9IiBBTkQgIiR7U0RMX0ZPVU5EfSIpCisJCQlhZGRfc3ViZGlyZWN0b3J5KGNhcmx1KQorCQllbHNlKCkKKwkJCWlmICgiJHtVU0ItMS4wX0ZPVU5EfSIpCisJCQkJTUVTU0FHRShFUlJPUiAiTGliVVNCIG5vdCBmb3VuZFxuIikKKwkJCWVuZGlmICgiJHtVU0ItMS4wX0ZPVU5EfSIpCisJCQlpZiAoIiR7U0RMX0ZPVU5EfSIpCisJCQkJTUVTU0FHRShFUlJPUiAiU0RMIG5vdCBmb3VuZFxuIikKKwkJCWVuZGlmICgiJHtTRExfRk9VTkR9IikKKwkJZW5kaWYgKCkKKwllbmRpZiAoQ09ORklHX0NBUkw5MTcwRldfQlVJTERfVE9PTFNfQ0FSTFUpCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy90b29scy9LY29uZmlnIGIvY2FybDkxNzBmdy90b29scy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNGViYTIKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL0tjb25maWcKQEAgLTAsMCArMSwxMiBAQAorbWVudSAiRmlybXdhcmUgVG9vbHMiCisKK2NvbmZpZyBDQVJMOTE3MEZXX0JVSUxEX1RPT0xTCisJZGVmX2Jvb2wgeQorCXByb21wdCAiQnVpbGQgRmlybXdhcmUgVG9vbHMiCisKK2NvbmZpZyBDQVJMOTE3MEZXX0JVSUxEX1RPT0xTX0NBUkxVCisJZGVmX2Jvb2wgbgorCXByb21wdCAiQnVpbGQgQ0FSTFUgdGVzdGJlbmNoIgorCWRlcGVuZHMgb24gQ0FSTDkxNzBGV19CVUlMRF9UT09MUworCitlbmRtZW51CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L0NNYWtlTGlzdHMudHh0IGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWE2YTA1Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE4IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44KQorCitwcm9qZWN0KGNhcmx1KQorCitmaW5kX3BhY2thZ2UoU0RMIFJFUVVJUkVEKQorZmluZF9wYWNrYWdlKFVTQi0xLjAgUkVRVUlSRUQpCisKK3NldChjYXJsdV9zcmMgc3JjL2RlYnVnLmMgc3JjL2NtZC5jIHNyYy91c2IuYyBzcmMvcnguYyBzcmMvdHguYyBzcmMvZncuYworCSAgICAgIHNyYy90ZXN0LmMgc3JjL21haW4uYykKKworYWRkX2RlZmluaXRpb25zKC1EX0dOVV9TT1VSQ0UgJHtVU0ItMS4wX0RFRklOSVRJT05TfSkKK2FkZF9kZWZpbml0aW9ucygtRENBUkxVX1BBVEg9IiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSIpCisKK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtTRExfSU5DTFVERV9ESVJ9ICR7VVNCLTEuMF9JTkNMVURFX0RJUlN9KQorCithZGRfZXhlY3V0YWJsZShjYXJsdSAke2Nhcmx1X3NyY30pCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoY2FybHUgJHtTRExfTElCUkFSWX0gJHtVU0ItMS4wX0xJQlJBUklFU30gU0RMbWFpbiBjYXJsZncpCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9jYXJsdS5oIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvY2FybHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTJjNmJiCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvY2FybHUuaApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIGNhcmx1IC0gdXNlcnNwYWNlIHRlc3RpbmcgdXRpbGl0eSBmb3IgYXI5MTcwIGRldmljZXMKKyAqCisgKiBjb21tb24gQVBJIGRlY2xhcmF0aW9uCisgKgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MFVTRVJfSAorI2RlZmluZSBfX0NBUkw5MTcwVVNFUl9ICisKKyNpbmNsdWRlICJTREwuaCIKKyNpbmNsdWRlICJTRExfdGhyZWFkLmgiCisKKyNpbmNsdWRlICJjYXJsZncuaCIKKworI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJmd2NtZC5oIgorI2luY2x1ZGUgImZyYW1lLmgiCisjaW5jbHVkZSAiZWVwcm9tLmgiCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisjaW5jbHVkZSAid2xhbi5oIgorI2luY2x1ZGUgInVzYi5oIgorCitzdHJ1Y3QgY2FybHUgeworCWxpYnVzYl9kZXZpY2VfaGFuZGxlICpkZXY7CisJbGlidXNiX2NvbnRleHQgKmN0eDsKKworCVNETF9UaHJlYWQgKmV2ZW50X3RocmVhZDsKKwlib29sIHN0b3BfZXZlbnRfcG9sbGluZzsKKworCXN0cnVjdCBsaWJ1c2JfdHJhbnNmZXIgKnJ4X3JpbmdbQVI5MTcwX1JYX0JVTEtfQlVGU107CisKKwlzdHJ1Y3QgbGlidXNiX3RyYW5zZmVyICpyeF9pbnRlcnJ1cHQ7CisJdW5zaWduZWQgY2hhciBpcnFfYnVmW0FSOTE3MF9SWF9CVUxLX0lSUV9TSVpFXTsKKworCXVuaW9uIHsKKwkJdW5zaWduZWQgY2hhciBidWZbQ0FSTDkxNzBfTUFYX0NNRF9MRU5dOworCQl1aW50MzJfdCBidWY0W0NBUkw5MTcwX01BWF9DTURfTEVOIC8gc2l6ZW9mKHVpbnQzMl90KV07CisJCXN0cnVjdCBjYXJsOTE3MF9jbWQgY21kOworCQlzdHJ1Y3QgY2FybDkxNzBfcnNwIHJzcDsKKwl9IGNtZDsKKworCXN0cnVjdCBsaXN0X2hlYWQgdHhfcXVldWU7CisJU0RMX211dGV4ICp0eF9xdWV1ZV9sb2NrOworCXVuc2lnbmVkIGludCB0eF9xdWV1ZV9sZW47CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OworCXVuc2lnbmVkIGludCBpZHg7CisKKwl1bnNpZ25lZCBpbnQgbWluaWJvb3Rfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnhfbWF4OworCisJaW50IGV2ZW50X3BpcGVbMl07CisKKwlTRExfY29uZCAqcmVzcF9wZW5kOworCVNETF9tdXRleCAqcmVzcF9sb2NrOworCXVpbnQ4X3QgKnJlc3BfYnVmOworCXNpemVfdCByZXNwX2xlbjsKKworCWludCB0eF9wZW5kaW5nOworCXVpbnQ4X3QgY29va2llOworCisJdm9pZCAoKnR4X2NiKShzdHJ1Y3QgY2FybHUgKiwgc3RydWN0IGZyYW1lICopOworCXZvaWQgKCp0eF9mYl9jYikoc3RydWN0IGNhcmx1ICosIHN0cnVjdCBmcmFtZSAqKTsKKwl2b2lkICgqcnhfY2IpKHN0cnVjdCBjYXJsdSAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CisJaW50ICgqY21kX2NiKShzdHJ1Y3QgY2FybHUgKiwgc3RydWN0IGNhcmw5MTcwX3JzcCAqLAorCQkgICAgICB2b2lkICosIHVuc2lnbmVkIGludCk7CisKKwlzdHJ1Y3QgY2FybGZ3ICpmdzsKKworCXN0cnVjdCBhcjkxNzBfZWVwcm9tIGVlcHJvbTsKKworCXN0cnVjdCBmcmFtZV9xdWV1ZSB0eF9zZW50X3F1ZXVlW19fQVI5MTcwX05VTV9UWFFdOworCisJU0RMX211dGV4ICptZW1fbG9jazsKKwl1bnNpZ25lZCBpbnQgZG1hX2NodW5rczsKKwl1bnNpZ25lZCBpbnQgZG1hX2NodW5rX3NpemU7CisJdW5zaWduZWQgaW50IHVzZWRfZG1hX2NodW5rczsKKworCXVuc2lnbmVkIGludCBleHRyYV9oZWFkcm9vbTsKKwlib29sIHR4X3N0cmVhbTsKKwlib29sIHJ4X3N0cmVhbTsKKworCS8qIHN0YXRpc3RpY3MgKi8KKwl1bnNpZ25lZCBpbnQgcnhlZDsKKwl1bnNpZ25lZCBpbnQgdHhlZDsKKworCXVuc2lnbmVkIGxvbmcgdHhfb2N0ZXRzOworCXVuc2lnbmVkIGxvbmcgcnhfb2N0ZXRzOworfTsKKworc3RydWN0IGNhcmx1X3JhdGUgeworCWludDhfdCByaXg7CisJaW50OF90IGNudDsKKwl1aW50OF90IGZsYWdzOworfTsKKworc3RydWN0IGNhcmx1X3R4X2luZm9fdHggeworCXVuc2lnbmVkIGludCBrZXk7Cit9OworCitzdHJ1Y3QgY2FybHVfdHhfaW5mbyB7CisJdWludDMyX3QgZmxhZ3M7CisKKwlzdHJ1Y3QgY2FybHVfcmF0ZSByYXRlc1tDQVJMOTE3MF9UWF9NQVhfUkFURVNdOworCisJdW5pb24geworCQlzdHJ1Y3QgY2FybHVfdHhfaW5mb190eCB0eDsKKwl9OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FybHVfdHhfaW5mbyAqZ2V0X3R4X2luZm8oc3RydWN0IGZyYW1lICpmcmFtZSkKK3sKKwlyZXR1cm4gKHZvaWQgKikgZnJhbWUtPmNiOworfQorCit2b2lkICpjYXJsdV9hbGxvY19kcml2ZXIoc2l6ZV90IHNpemUpOwordm9pZCBjYXJsdV9mcmVlX2RyaXZlcihzdHJ1Y3QgY2FybHUgKmFyKTsKKworaW50IGNhcmx1X2Z3X2NoZWNrKHN0cnVjdCBjYXJsdSAqYXIpOwordm9pZCBjYXJsdV9md19pbmZvKHN0cnVjdCBjYXJsdSAqYXIpOworCit2b2lkIGNhcmx1X3J4KHN0cnVjdCBjYXJsdSAqYXIsIHN0cnVjdCBmcmFtZSAqZnJhbWUpOworaW50IGNhcmx1X3R4KHN0cnVjdCBjYXJsdSAqYXIsIHN0cnVjdCBmcmFtZSAqZnJhbWUpOwordm9pZCBjYXJsdV90eF9mZWVkYmFjayhzdHJ1Y3QgY2FybHUgKmFyLAorCQkJICBzdHJ1Y3QgY2FybDkxNzBfcnNwICpjbWQpOwordm9pZCBjYXJsdV9oYW5kbGVfY29tbWFuZChzdHJ1Y3QgY2FybHUgKmFyLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOworCitzdHJ1Y3QgZnJhbWUgKmNhcmx1X2FsbG9jX2ZyYW1lKHN0cnVjdCBjYXJsdSAqYXIsIHVuc2lnbmVkIGludCBzaXplKTsKK3ZvaWQgY2FybHVfZnJlZV9mcmFtZShzdHJ1Y3QgY2FybHUgKmFyLCBzdHJ1Y3QgZnJhbWUgKmZyYW1lKTsKKyNlbmRpZiAvKiBfX0NBUkw5MTcwVVNFUl9IICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9jbWQuYyBiL2Nhcmw5MTcwZncvdG9vbHMvY2FybHUvc3JjL2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODczOTkKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9jbWQuYwpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIGNhcmx1IC0gdXNlcnNwYWNlIHRlc3RpbmcgdXRpbGl0eSBmb3IgYXI5MTcwIGRldmljZXMKKyAqCisgKiBBYnN0cmFjdGlvbiBMYXllciBmb3IgRlcvSFcgY29tbWFuZCBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsaWJ1c2IuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY2FybHUuaCIKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImZ3Y21kLmgiCisjaW5jbHVkZSAiZWVwcm9tLmgiCisjaW5jbHVkZSAiY21kLmgiCisKK2ludCBjYXJsdV9jbWRfZWNobyhzdHJ1Y3QgY2FybHUgKmFyLCBjb25zdCB1aW50MzJfdCBtZXNzYWdlKQoreworCXVpbnQzMl90IF9tZXNzYWdlOworCWludCByZXQ7CisKKwlyZXQgPSBjYXJsdXNiX2NtZChhciwgQ0FSTDkxNzBfQ01EX0VDSE8sCisJCQkgICAgICh1aW50OF90ICopJm1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSwKKwkJCSAgICAgKHVpbnQ4X3QgKikmX21lc3NhZ2UsIHNpemVvZihfbWVzc2FnZSkpOworCisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSAobWVzc2FnZSA9PSBfbWVzc2FnZSkgPyAwIDogLUVJTzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBjYXJsOTE3MF9jbWQgKmNhcmx1X2NtZF9idWYoc3RydWN0IGNhcmx1ICphciwKKwljb25zdCBlbnVtIGNhcmw5MTcwX2NtZF9vaWRzIGNtZCwgY29uc3QgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgY2FybDkxNzBfY21kICp0bXA7CisKKwlpZiAobGVuICUgNCB8fCAoc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MF9jbWRfaGVhZCkgKyBsZW4gPiA2NCkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJdG1wID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FybDkxNzBfY21kX2hlYWQpICsgbGVuKTsKKwlpZiAodG1wKSB7CisJCXRtcC0+aGRyLmNtZCA9IGNtZDsKKwkJdG1wLT5oZHIubGVuID0gbGVuOworCX0KKwlyZXR1cm4gdG1wOworfQorCitpbnQgY2FybHVfY21kX3JlYm9vdChzdHJ1Y3QgY2FybHUgKmFyKQoreworCXN0cnVjdCBjYXJsOTE3MF9jbWQgKnJlYm9vdDsKKwlpbnQgZXJyOworCisJLyogc3VyZSwgd2UgY291bGQgcHV0IHRoZSBzdHJ1Y3Qgb24gdGhlIHN0YWNrIHRvby4gKi8KKwlyZWJvb3QgPSBjYXJsdV9jbWRfYnVmKGFyLCBDQVJMOTE3MF9DTURfUkVCT09UX0FTWU5DLCAwKTsKKwlpZiAoSVNfRVJSX09SX05VTEwocmVib290KSkKKwkJcmV0dXJuIHJlYm9vdCA/IFBUUl9FUlIocmVib290KSA6IC1FTk9NRU07CisKKwllcnIgPSBjYXJsdXNiX2NtZF9hc3luYyhhciwgcmVib290LCB0cnVlKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY2FybHVfY21kX21lbV9kdW1wKHN0cnVjdCBjYXJsdSAqYXIsIGNvbnN0IHVpbnQzMl90IHN0YXJ0LAorCQkJY29uc3QgdW5zaWduZWQgaW50IGxlbiwgdm9pZCAqX2J1ZikKK3sKKyNkZWZpbmUgUlcJOAkvKiBudW1iZXIgb2Ygd29yZHMgdG8gcmVhZCBhdCBvbmNlICovCisjZGVmaW5lIFJCCShzaXplb2YodWludDMyX3QpICogUlcpCisJdWludDhfdCAqYnVmID0gX2J1ZjsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgYmxvY2s7CisJaW50IGVycjsKKwlfX2xlMzIgb2Zmc2V0c1tSV107CisKKwlmb3IgKGkgPSAwOyBpIDwgKGxlbiArIFJCIC0gMSkgLyBSQjsgaSsrKSB7CisJCWJsb2NrID0gbWluX3QodW5zaWduZWQgaW50LCAobGVuIC0gUkIgKiBpKSAvIHNpemVvZih1aW50MzJfdCksIFJXKTsKKwkJZm9yIChqID0gMDsgaiA8IGJsb2NrOyBqKyspCisJCQlvZmZzZXRzW2pdID0gY3B1X3RvX2xlMzIoc3RhcnQgKyBSQiAqIGkgKyA0ICogaik7CisKKwkJZXJyID0gY2FybHVzYl9jbWQoYXIsIENBUkw5MTcwX0NNRF9SUkVHLAorCQkJCSAgICAodm9pZCAqKSAmb2Zmc2V0cywgYmxvY2sgKiBzaXplb2YodWludDMyX3QpLAorCQkJCSAgICAodm9pZCAqKSBidWYgKyBSQiAqIGksIFJCKTsKKworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKyN1bmRlZiBSVworI3VuZGVmIFJCCisKKwlyZXR1cm4gMDsKK30KKworaW50IGNhcmx1X2NtZF9tZW1fd2F0Y2goc3RydWN0IGNhcmx1ICphciwgY29uc3QgdWludDMyX3QgbWVtLAorCQkJY29uc3QgdW5zaWduZWQgaW50IGxlbiwgdm9pZCAqX2J1ZikKK3sKKyNkZWZpbmUgUlcJOAkvKiBudW1iZXIgb2Ygd29yZHMgdG8gcmVhZCBhdCBvbmNlICovCisjZGVmaW5lIFJCCShzaXplb2YodWludDMyX3QpICogUlcpCisJdWludDhfdCAqYnVmID0gX2J1ZjsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgYmxvY2s7CisJaW50IGVycjsKKwlfX2xlMzIgb2Zmc2V0c1tSV107CisKKwlmb3IgKGkgPSAwOyBpIDwgKGxlbiArIFJCIC0gMSkgLyBSQjsgaSsrKSB7CisJCWJsb2NrID0gbWluX3QodW5zaWduZWQgaW50LCAobGVuIC0gUkIgKiBpKSAvIHNpemVvZih1aW50MzJfdCksIFJXKTsKKwkJZm9yIChqID0gMDsgaiA8IGJsb2NrOyBqKyspCisJCQlvZmZzZXRzW2pdID0gY3B1X3RvX2xlMzIobWVtKTsKKworCQllcnIgPSBjYXJsdXNiX2NtZChhciwgQ0FSTDkxNzBfQ01EX1JSRUcsCisJCQkJICAgICh2b2lkICopICZvZmZzZXRzLCBibG9jayAqIHNpemVvZih1aW50MzJfdCksCisJCQkJICAgICh2b2lkICopIGJ1ZiArIFJCICogaSwgUkIpOworCisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworI3VuZGVmIFJXCisjdW5kZWYgUkIKKworCXJldHVybiAwOworfQorCitpbnQgY2FybHVfY21kX3dyaXRlX21lbShzdHJ1Y3QgY2FybHUgKmFyLCBjb25zdCB1aW50MzJfdCBhZGRyLAorCQkJY29uc3QgdWludDMyX3QgdmFsKQoreworCWludCBlcnI7CisJX19sZTMyIG1zZywgYmxvY2tbMl0gPSB7IGNwdV90b19sZTMyKGFkZHIpLCBjcHVfdG9fbGUzMih2YWwpIH07CisKKwllcnIgPSBjYXJsdXNiX2NtZChhciwgQ0FSTDkxNzBfQ01EX1dSRUcsCisJCQkgICh2b2lkICopICZibG9jaywgc2l6ZW9mKGJsb2NrKSwKKwkJCSAgKHZvaWQgKikgJm1zZywgc2l6ZW9mKG1zZykpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBjYXJsdV9jbWRfcmVhZF9tZW0oc3RydWN0IGNhcmx1ICphciwgY29uc3QgdWludDMyX3QgX2FkZHIsCisJCSAgICAgICB1aW50MzJfdCAqdmFsKQoreworCWludCBlcnI7CisJX19sZTMyIG1zZywgYWRkciA9IHsgY3B1X3RvX2xlMzIoX2FkZHIpIH07CisJZXJyID0gY2FybHVzYl9jbWQoYXIsIENBUkw5MTcwX0NNRF9SUkVHLCAodm9pZCAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpLAorCQkJICAodm9pZCAqKSAmbXNnLCBzaXplb2YobXNnKSk7CisKKwkqdmFsID0gbGUzMl90b19jcHUobXNnKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY2FybHVfY21kX3JlYWRfZWVwcm9tKHN0cnVjdCBjYXJsdSAqYXIpCit7CisKKwlpbnQgZXJyOworCisJZXJyID0gY2FybHVfY21kX21lbV9kdW1wKGFyLCBBUjkxNzBfRUVQUk9NX1NUQVJULCBzaXplb2YoYXItPmVlcHJvbSksCisJCQkJICAmYXItPmVlcHJvbSk7CisKKyNpZm5kZWYgX19DSEVDS0VSX18KKwkvKiBkb24ndCB3YW50IHRvIGhhbmRsZSB0cmFpbGluZyByZW1haW5zICovCisJQlVJTERfQlVHX09OKHNpemVvZihhci0+ZWVwcm9tKSAlIDgpOworI2VuZGlmCisKKwlpZiAoYXItPmVlcHJvbS5sZW5ndGggPT0gY3B1X3RvX2xlMTYoMHhmZmZmKSkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9jbWQuaCBiL2Nhcmw5MTcwZncvdG9vbHMvY2FybHUvc3JjL2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzlhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9jbWQuaApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIGNhcmx1IC0gdXNlcnNwYWNlIHRlc3RpbmcgdXRpbGl0eSBmb3IgYXI5MTcwIGRldmljZXMKKyAqCisgKiByZWdpc3Rlci9tZW1vcnkvY29tbWFuZCBhY2Nlc3MgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MFVTRVJfQ01EX0gKKyNkZWZpbmUgX19DQVJMOTE3MFVTRVJfQ01EX0gKKworI2luY2x1ZGUgImNhcmx1LmgiCisKK2ludCBjYXJsdV9jbWRfZWNobyhzdHJ1Y3QgY2FybHUgKmFyLCBjb25zdCB1aW50MzJfdCBtZXNzYWdlKTsKK2ludCBjYXJsdV9jbWRfcmVib290KHN0cnVjdCBjYXJsdSAqYXIpOworaW50IGNhcmx1X2NtZF9yZWFkX2VlcHJvbShzdHJ1Y3QgY2FybHUgKmFyKTsKK2ludCBjYXJsdV9jbWRfbWVtX2R1bXAoc3RydWN0IGNhcmx1ICphciwgY29uc3QgdWludDMyX3Qgc3RhcnQsCisJCQljb25zdCB1bnNpZ25lZCBpbnQgbGVuLCB2b2lkICpfYnVmKTsKK2ludCBjYXJsdV9jbWRfd3JpdGVfbWVtKHN0cnVjdCBjYXJsdSAqYXIsIGNvbnN0IHVpbnQzMl90IGFkZHIsCisJCQljb25zdCB1aW50MzJfdCB2YWwpOworaW50IGNhcmx1X2NtZF9tZW1fd2F0Y2goc3RydWN0IGNhcmx1ICphciwgY29uc3QgdWludDMyX3QgbWVtLAorCQkJY29uc3QgdW5zaWduZWQgaW50IGxlbiwgdm9pZCAqX2J1Zik7CisKK3N0cnVjdCBjYXJsOTE3MF9jbWQgKmNhcmx1X2NtZF9idWYoc3RydWN0IGNhcmx1ICphciwKKwljb25zdCBlbnVtIGNhcmw5MTcwX2NtZF9vaWRzIGNtZCwgY29uc3QgdW5zaWduZWQgaW50IGxlbik7CisKKyNkZWZpbmUgUEFZTE9BRF9NQVgJKENBUkw5MTcwX01BWF9DTURfTEVOIC8gNCAtIDEpCisvKgorICogTWFjcm9zIHRvIGZhY2lsaXRhdGUgd3JpdGluZyBtdWx0aXBsZSByZWdpc3RlcnMgaW4gYSBzaW5nbGUKKyAqIHdyaXRlLWNvbWJpbmluZyBVU0IgY29tbWFuZC4gTm90ZSB0aGF0IHdoZW4gdGhlIGZpcnN0IGdyb3VwCisgKiBmYWlscyB0aGUgd2hvbGUgdGhpbmcgd2lsbCBmYWlsIHdpdGhvdXQgYW55IG90aGVycyBhdHRlbXB0ZWQsCisgKiBidXQgeW91IHdvbid0IGtub3cgd2hpY2ggd3JpdGUgaW4gdGhlIGdyb3VwIGZhaWxlZC4KKyAqLworI2RlZmluZSBjYXJsdV9yZWd3cml0ZV9iZWdpbihhcikJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJc3RydWN0IGNhcmx1ICpfX2FyID0gYXI7CQkJCQlcCisJdW5zaWduZWQgaW50IF9fbnJlZyA9IDA7CQkJCQlcCisJaW50IF9fZXJyID0gMDsJCQkJCQkJXAorCXVpbnQzMl90IF9fZHVtbXk7CisKKyNkZWZpbmUgY2FybHVfcmVnd3JpdGVfZmx1c2goKQkJCQkJCVwKKwlpZiAoX19ucmVnKSB7CQkJCQkJCVwKKwkJX19lcnIgPSBjYXJsdXNiX2NtZChfX2FyLCBDQVJMOTE3MF9DTURfV1JFRywJCVwKKwkJCSh1OCAqKSZfX2FyLT5jbWQuY21kLmRhdGEsIDggKiBfX25yZWcsCQlcCisJCQkodTggKikmX19kdW1teSwgc2l6ZW9mKF9fZHVtbXkpKTsJCVwKKwkJX19ucmVnID0gMDsJCQkJCQlcCisJCWlmIChfX2VycikJCQkJCQlcCisJCQlnb3RvIF9fcmVnd3JpdGVfb3V0OwkJCQlcCisJfQorCisjZGVmaW5lIGNhcmx1X3JlZ3dyaXRlKHIsIHYpIGRvIHsJCQkJCVwKKwlfX2FyLT5jbWQuYnVmNFsyICogX19ucmVnICsgMV0gPSBjcHVfdG9fbGUzMihyKTsJCVwKKwlfX2FyLT5jbWQuYnVmNFsyICogX19ucmVnICsgMl0gPSBjcHVfdG9fbGUzMih2KTsJCVwKKwlfX25yZWcrKzsJCQkJCQkJXAorCWlmICgoX19ucmVnID49IFBBWUxPQURfTUFYIC8gMikpIHsJCQkJXAorCQlfX2VyciA9IGNhcmx1c2JfY21kKF9fYXIsIENBUkw5MTcwX0NNRF9XUkVHLAkJXAorCQkJKHU4ICopJl9fYXItPmNtZC5jbWQuZGF0YSwgOCAqIF9fbnJlZywJCVwKKwkJCSh1OCAqKSZfX2R1bW15LCBzaXplb2YoX19kdW1teSkpOwkJXAorCQkJCQkJCQkJXAorCQlfX25yZWcgPSAwOwkJCQkJCVwKKwkJaWYgKF9fZXJyKQkJCQkJCVwKKwkJCWdvdG8gX19yZWd3cml0ZV9vdXQ7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGNhcmx1X3JlZ3dyaXRlX2ZpbmlzaCgpCQkJCQkJXAorX19yZWd3cml0ZV9vdXQgOgkJCQkJCQlcCisJaWYgKF9fZXJyID09IDAgJiYgX19ucmVnKQkJCQkJXAorCQljYXJsdV9yZWd3cml0ZV9mbHVzaCgpOworCisjZGVmaW5lIGNhcmx1X3JlZ3dyaXRlX3Jlc3VsdCgpCQkJCQkJXAorCV9fZXJyOwkJCQkJCQkJXAorfSB3aGlsZSAoMCk7CisKKworI2RlZmluZSBjYXJsdV9hc3luY19nZXRfYnVmKCkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCV9fY21kID0gY2FybHVfY21kX2J1ZihfX2NhcmwsIENBUkw5MTcwX0NNRF9XUkVHX0FTWU5DLAkJXAorCQkJCSBDQVJMOTE3MF9NQVhfQ01EX1BBWUxPQURfTEVOKTsJCVwKKwlpZiAoSVNfRVJSX09SX05VTEwoX19jbWQpKSB7CQkJCQlcCisJCV9fZXJyID0gX19jbWQgPyBQVFJfRVJSKF9fY21kKSA6IC1FTk9NRU07CQlcCisJCWdvdG8gX19hc3luY19yZWd3cml0ZV9vdXQ7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKTsKKworI2RlZmluZSBjYXJsdV9hc3luY19yZWd3cml0ZV9iZWdpbihjYXJsKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWludCBfX25yZWcgPSAwLCBfX2VyciA9IDA7CQkJCQlcCisJc3RydWN0IGNhcmx1ICpfX2NhcmwgPSBjYXJsOwkJCQkJXAorCXN0cnVjdCBjYXJsOTE3MF9jbWQgKl9fY21kOwkJCQkJXAorCWNhcmx1X2FzeW5jX2dldF9idWYoKTsJCQkJCQlcCisKKyNkZWZpbmUgY2FybHVfYXN5bmNfcmVnd3JpdGVfZmx1c2goKQkJCQkJXAorCWlmIChfX25yZWcpIHsJCQkJCQkJXAorCQlfX2NtZC0+aGRyLmxlbiA9IDggKiBfX25yZWc7CQkJCVwKKwkJX19lcnIgPSBjYXJsdXNiX2NtZF9hc3luYyhfX2NhcmwsIF9fY21kLCB0cnVlKTsJCVwKKwkJX19ucmVnID0gMDsJCQkJCQlcCisJCWlmIChfX2VycikJCQkJCQlcCisJCQlnb3RvIF9fYXN5bmNfcmVnd3JpdGVfb3V0OwkJCVwKKwkJX19jbWQgPSBOVUxMOwkJCQkJCVwKKwkJY2FybHVfYXN5bmNfZ2V0X2J1ZigpOwkJCQkJXAorCX0KKworI2RlZmluZSBjYXJsdV9hc3luY19yZWd3cml0ZShyLCB2KSBkbyB7CQkJCQlcCisJX19jbWQtPndyZWcucmVnc1tfX25yZWddLmFkZHIgPSBjcHVfdG9fbGUzMihyKTsJCQlcCisJX19jbWQtPndyZWcucmVnc1tfX25yZWddLnZhbCA9IGNwdV90b19sZTMyKHYpOwkJCVwKKwlfX25yZWcrKzsJCQkJCQkJXAorCWlmICgoX19ucmVnID49IFBBWUxPQURfTUFYIC8gMikpCQkJCVwKKwkJY2FybHVfYXN5bmNfcmVnd3JpdGVfZmx1c2goKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBjYXJsdV9hc3luY19yZWd3cml0ZV9maW5pc2goKQkJCQkJXAorX19hc3luY19yZWd3cml0ZV9vdXQgOgkJCQkJCQlcCisJaWYgKF9fZXJyID09IDAgJiYgX19ucmVnKQkJCQkJXAorCQljYXJsdV9hc3luY19yZWd3cml0ZV9mbHVzaCgpOworCisjZGVmaW5lIGNhcmx1X2FzeW5jX3JlZ3dyaXRlX3Jlc3VsdCgpCQkJCQlcCisJX19lcnI7CQkJCQkJCQlcCit9IHdoaWxlICgwKTsKKworI2VuZGlmIC8qIF9fQ0FSTDkxNzBVU0VSX0NNRF9IICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9kZWJ1Zy5jIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGQ2MzcyCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvZGVidWcuYwpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIGNhcmx1IC0gdXNlcnNwYWNlIHRlc3RpbmcgdXRpbGl0eSBmb3IgYXI5MTcwIGRldmljZXMKKyAqCisgKiBSYW5kb20gYXNzb3J0bWVudCBvZiBkZWJ1ZyBzdHVmZgorICoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlICJkZWJ1Zy5oIgorCitib29sIHByaW50X21lc3NhZ2VfZGVidWdfbGV2ZWw7CitlbnVtIGRlYnVnX2xldmVsX3QgZGVidWdfbGV2ZWw7CitGSUxFICpfc3Rkb3V0OworRklMRSAqX3N0ZGRiZzsKK0ZJTEUgKl9zdGRlcnI7CisKK3ZvaWQgaW5pdF9kZWJ1ZygpCit7CisJZGVidWdfbGV2ZWwgPSBWRVJCT1NFOworCWRlYnVnX2xldmVsID0gSU5GTzsKKwlwcmludF9tZXNzYWdlX2RlYnVnX2xldmVsID0gZmFsc2U7CisKKwlfc3Rkb3V0ID0gc3Rkb3V0OworCV9zdGRkYmcgPSBzdGRvdXQ7CisJX3N0ZGVyciA9IHN0ZGVycjsKK30KKworRklMRSAqZGJnX2x2bF90b19maChjb25zdCBlbnVtIGRlYnVnX2xldmVsX3QgbHZsKQoreworCXN3aXRjaCAobHZsKSB7CisJY2FzZSBFUlJPUjoKKwljYXNlIFdBUk5JTkc6CisJCXJldHVybiBfc3RkZXJyOworCWNhc2UgSU5GTzoKKwkJcmV0dXJuIF9zdGRvdXQ7CisJY2FzZSBWRVJCT1NFOgorCQlyZXR1cm4gX3N0ZGRiZzsKKwlkZWZhdWx0OgorCQlCVUdfT04oMSk7CisJfQorfQorCit2b2lkIHByaW50X2hleF9kdW1wX2J5dGVzKGNvbnN0IGVudW0gZGVidWdfbGV2ZWxfdCBsdmwsIGNvbnN0IGNoYXIgKnByZSwKKwkJCSAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCWNoYXIgbGluZVs1OF07CisJY2hhciBzdHJbMTddID0geyAwIH07CisJY29uc3QgdW5zaWduZWQgY2hhciAqdG1wID0gKHZvaWQgKikgYnVmOworCWNoYXIgKnBidWYgPSBsaW5lOworCXNpemVfdCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChpICUgMTYgPT0gMCkgeworCQkJaWYgKHBidWYgIT0gbGluZSkgeworCQkJCV9fZnByaW50ZihsdmwsICIlcyVzOiAlc1xuIiwgcHJlLCBsaW5lLCBzdHIpOworCQkJCXBidWYgPSBsaW5lOworCQkJfQorCisJCQlwYnVmICs9IHNwcmludGYocGJ1ZiwgIjB4JTA0bHg6ICIsICh1bnNpZ25lZCBsb25nKWkpOworCQl9CisKKwkJcGJ1ZiArPSBzcHJpbnRmKHBidWYsICIlLjJ4ICIsIHRtcFtpXSk7CisJCXN0cltpICUgMTZdID0gKGlzcHJpbnQodG1wW2ldKSAmJiBpc2FzY2lpKHRtcFtpXSkpID8gdG1wW2ldIDogJy4nOworCX0KKwlpZiAocGJ1ZiAhPSBsaW5lKSB7CisJCWlmICgoaSAlIDE2KSkgeworCQkJc3RyW2kgJSAxNl0gPSAnXDAnOworCisJCQlmb3IgKGogPSAwOyBqIDwgKDE2IC0gKGkgJSAxNikpOyBqKyspCisJCQkJcGJ1ZiArPSBzcHJpbnRmKHBidWYsICIgICAiKTsKKwkJfQorCisJCV9fZnByaW50ZihsdmwsICIlcyVzOiAlc1xuIiwgcHJlLCBsaW5lLCBzdHIpOworCX0KK30KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvdG9vbHMvY2FybHUvc3JjL2RlYnVnLmggYi9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNzgwNTYKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9kZWJ1Zy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBjYXJsdSAtIHVzZXJzcGFjZSB0ZXN0aW5nIHV0aWxpdHkgZm9yIGFyOTE3MCBkZXZpY2VzCisgKgorICogRGVidWcgQVBJIGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfX0NBUkw5MTcwVVNFUl9ERUJVR19ICisjZGVmaW5lIF9fQ0FSTDkxNzBVU0VSX0RFQlVHX0gKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiY29tcGlsZXIuaCIKKworZW51bSBkZWJ1Z19sZXZlbF90IHsKKwlTSUxFTlQsCisJRVJST1IsCisJV0FSTklORywKKwlJTkZPLAorCVZFUkJPU0UsCisKKwkvKiBLRUVQIExBU1QgKi8KKwlBTEwsCit9OworCitleHRlcm4gYm9vbCBwcmludF9tZXNzYWdlX2RlYnVnX2xldmVsOworZXh0ZXJuIGVudW0gZGVidWdfbGV2ZWxfdCBkZWJ1Z19sZXZlbDsKKworI2RlZmluZSBfX2ZwcmludGYobHZsLCBmbXQsIGFyZ3MuLi4pCQlkbyB7CQkJCQkJXAorCQlpZiAobHZsIDw9IGRlYnVnX2xldmVsKSB7CQkJCQkJCVwKKwkJCWlmIChwcmludF9tZXNzYWdlX2RlYnVnX2xldmVsKQkJCQkJCVwKKwkJCQlmcHJpbnRmKGRiZ19sdmxfdG9fZmgobHZsKSwgIjwlZD46IiBmbXQsIGx2bCwgIyNhcmdzKTsJCVwKKwkJCWVsc2UJCQkJCQkJCQlcCisJCQkJZnByaW50ZihkYmdfbHZsX3RvX2ZoKGx2bCksIGZtdCwgIyNhcmdzKTsJCQlcCisJCX0JCQkJCQkJCQkJXAorCX0gd2hpbGUgKDApOworCisjZGVmaW5lIGRiZyhmbXQsIGFyZ3MuLi4pIF9fZnByaW50ZihWRVJCT1NFLCBmbXQsICMjYXJncykKKyNkZWZpbmUgaW5mbyhmbXQsIGFyZ3MuLi4pIF9fZnByaW50ZihJTkZPLCBmbXQsICMjYXJncykKKyNkZWZpbmUgd2FybihmbXQsIGFyZ3MuLi4pIF9fZnByaW50ZihXQVJOSU5HLCBmbXQsICMjYXJncykKKyNkZWZpbmUgZXJyKGZtdCwgYXJncy4uLikgX19mcHJpbnRmKEVSUk9SLCBmbXQsICMjYXJncykKKworI2RlZmluZSBCVUdfT04oYSkJCQkJCQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJCVwKKwkJaWYgKGEpIHsJCQkJCQkJCQlcCisJCQlfX2ZwcmludGYoRVJST1IsICIhISE9PkJVRyBJTiBmdW5jdGlvbiBcIiVzXCIgYXQgbGluZSAlZDw9ISEhICVzXG4iLAlcCisJCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgI2EpOwkJCQkJXAorCQkJZmZsdXNoKHN0ZGVycik7CQkJCQkJCQlcCisJCQlhYm9ydCgpOwkJCQkJCQkJXAorCQl9CQkJCQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCitGSUxFICpkYmdfbHZsX3RvX2ZoKGNvbnN0IGVudW0gZGVidWdfbGV2ZWxfdCBsdmwpOwordm9pZCBpbml0X2RlYnVnKHZvaWQpOwordm9pZCBwcmludF9oZXhfZHVtcF9ieXRlcyhjb25zdCBlbnVtIGRlYnVnX2xldmVsX3QgbHZsLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CisKKyNlbmRpZiAvKiBfX0NBUkw5MTcwVVNFUl9ERUJVR19IICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9mdy5jIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTRiMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvZncuYwpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIGNhcmx1IC0gdXNlcnNwYWNlIHRlc3RpbmcgdXRpbGl0eSBmb3IgYXI5MTcwIGRldmljZXMKKyAqCisgKiBGaXJtd2FyZSBwYXJzZXJzCisgKgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibGlidXNiLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNhcmx1LmgiCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKworaW50IGNhcmx1X2Z3X2NoZWNrKHN0cnVjdCBjYXJsdSAqYXIpCit7CisJc3RydWN0IGNhcmw5MTcwZndfb3R1c19kZXNjICpvdHVzX2Rlc2M7CisKKwlvdHVzX2Rlc2MgPSBjYXJsZndfZmluZF9kZXNjKGFyLT5mdywgKHVpbnQ4X3QgKikgT1RVU19NQUdJQywKKwkJCQkgICAgIHNpemVvZigqb3R1c19kZXNjKSwKKwkJCQkgICAgIENBUkw5MTcwRldfT1RVU19ERVNDX0NVUl9WRVIpOworCisJaWYgKCFvdHVzX2Rlc2MpIHsKKwkJZXJyKCJObyB2YWxpZCBPVFVTIGRlc2NyaXB0b3IgZm91bmQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFjYXJsOTE3MGZ3X3N1cHBvcnRzKG90dXNfZGVzYy0+ZmVhdHVyZV9zZXQsIENBUkw5MTcwRldfRFVNTVlfRkVBVFVSRSkpIHsKKwkJZXJyKCJJbnZhbGlkIEZpcm13YXJlIERlc2NyaXB0b3IuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGNhcmw5MTcwZndfc3VwcG9ydHMob3R1c19kZXNjLT5mZWF0dXJlX3NldCwgQ0FSTDkxNzBGV19VTlVTQUJMRSkpCisJCWRiZygiRmlybXdhcmUgaXMgbWFya2VkIGFzIHVudXNlYWJsZS5cbiIpOworCisJaW5mbygiRmlybXdhcmUgVmVyc2lvbjogJWQuXG4iLCBvdHVzX2Rlc2MtPmFwaV92ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjYXJsdXNiX2Z3X2NoZWNrKHN0cnVjdCBjYXJsdSAqYXIpCit7CisJc3RydWN0IGNhcmw5MTcwZndfb3R1c19kZXNjICpvdHVzX2Rlc2M7CisKKwlvdHVzX2Rlc2MgPSBjYXJsZndfZmluZF9kZXNjKGFyLT5mdywgKHVpbnQ4X3QgKikgT1RVU19NQUdJQywKKwkJCQkgICAgIHNpemVvZigqb3R1c19kZXNjKSwKKwkJCQkgICAgIENBUkw5MTcwRldfT1RVU19ERVNDX0NVUl9WRVIpOworCisJaWYgKCFvdHVzX2Rlc2MpIHsKKwkJZXJyKCJObyB2YWxpZCBVU0IgZGVzY3JpcHRvciBmb3VuZC5cbiIpOworCQlyZXR1cm4gLUVOT0RBVEE7CisJfQorCisJaWYgKCFjYXJsOTE3MGZ3X3N1cHBvcnRzKG90dXNfZGVzYy0+ZmVhdHVyZV9zZXQsIENBUkw5MTcwRldfRFVNTVlfRkVBVFVSRSkpIHsKKwkJZXJyKCJJbnZhbGlkIEZpcm13YXJlIERlc2NyaXB0b3IuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFjYXJsOTE3MGZ3X3N1cHBvcnRzKG90dXNfZGVzYy0+ZmVhdHVyZV9zZXQsIENBUkw5MTcwRldfVVNCX0lOSVRfRklSTVdBUkUpKSB7CisJCWVycigiRmlybXdhcmUgZG9lcyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSBVU0IgY29yZS5cbiIpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJaWYgKGNhcmw5MTcwZndfc3VwcG9ydHMob3R1c19kZXNjLT5mZWF0dXJlX3NldCwgQ0FSTDkxNzBGV19VU0JfRE9XTl9TVFJFQU0pKSB7CisJCWRiZygiRW5hYmxlZCB0eCBzdHJlYW0gbW9kZS5cbiIpOworCQlhci0+dHhfc3RyZWFtID0gdHJ1ZTsKKwkJYXItPmV4dHJhX2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfc3RyZWFtKTsKKwl9CisKKwlpZiAoY2FybDkxNzBmd19zdXBwb3J0cyhvdHVzX2Rlc2MtPmZlYXR1cmVfc2V0LCBDQVJMOTE3MEZXX1VTQl9VUF9TVFJFQU0pKSB7CisJCWRiZygiRW5hYmxlZCByeCBzdHJlYW0gbW9kZS5cbiIpOworCQlhci0+cnhfc3RyZWFtID0gdHJ1ZTsKKwl9CisKKwlpZiAoY2FybDkxNzBmd19zdXBwb3J0cyhvdHVzX2Rlc2MtPmZlYXR1cmVfc2V0LCBDQVJMOTE3MEZXX1VTQl9SRVNQX0VQMikpCisJCWRiZygiRmlybXdhcmUgc2VuZHMgdHJhcHMgb3ZlciBFUDIuXG4iKTsKKworCWFyLT5kbWFfY2h1bmtfc2l6ZSA9IGxlMTZfdG9fY3B1KG90dXNfZGVzYy0+dHhfZnJhZ19sZW4pOworCWFyLT5kbWFfY2h1bmtzID0gb3R1c19kZXNjLT50eF9kZXNjczsKKwlhci0+cnhfbWF4ID0gbGUxNl90b19jcHUob3R1c19kZXNjLT5yeF9tYXhfZnJhbWVfbGVuKTsKKworCWlmIChjYXJsOTE3MGZ3X3N1cHBvcnRzKG90dXNfZGVzYy0+ZmVhdHVyZV9zZXQsIENBUkw5MTcwRldfTUlOSUJPT1QpKQorCQlhci0+bWluaWJvb3Rfc2l6ZSA9IGxlMTZfdG9fY3B1KG90dXNfZGVzYy0+bWluaWJvb3Rfc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjYXJsdV9md19pbmZvKHN0cnVjdCBjYXJsdSAqYXIpCit7CisJc3RydWN0IGNhcmw5MTcwZndfbW90ZF9kZXNjICptb3RkX2Rlc2M7CisJdW5zaWduZWQgaW50IGZ3X2RhdGU7CisKKwltb3RkX2Rlc2MgPSBjYXJsZndfZmluZF9kZXNjKGFyLT5mdywgKHVpbnQ4X3QgKikgTU9URF9NQUdJQywKKwkJCQkgICAgIHNpemVvZigqbW90ZF9kZXNjKSwKKwkJCQkgICAgIENBUkw5MTcwRldfTU9URF9ERVNDX0NVUl9WRVIpOworCisJaWYgKG1vdGRfZGVzYykgeworCQlmd19kYXRlID0gbGUzMl90b19jcHUobW90ZF9kZXNjLT5md195ZWFyX21vbnRoX2RheSk7CisKKwkJaW5mbygiRmlybXdhcmUgRGF0ZTogMiUuM2QtJS4yZC0lLjJkXG4iLAorCQkgICAgIENBUkw5MTcwRldfR0VUX1lFQVIoZndfZGF0ZSksIENBUkw5MTcwRldfR0VUX01PTlRIKGZ3X2RhdGUpLAorCQkgICAgIENBUkw5MTcwRldfR0VUX0RBWShmd19kYXRlKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvbWFpbi5jIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjMyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9tYWluLmMKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiBjYXJsdSAtIHVzZXJzcGFjZSB0ZXN0aW5nIHV0aWxpdHkgZm9yIGFyOTE3MCBkZXZpY2VzCisgKgorICogbWFpbiBwcm9ncmFtIHJvdXRpbmUKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJTREwuaCIKKyNpbmNsdWRlIDxTRExfdmVyc2lvbi5oPgorCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJjYXJsdS5oIgorI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgImZyYW1lLmgiCisjaW5jbHVkZSAidGVzdC5oIgorI2luY2x1ZGUgImNtZC5oIgorCit2b2lkICpjYXJsdV9hbGxvY19kcml2ZXIoc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGNhcmx1ICphcjsKKworCWlmIChzaXplIDwgc2l6ZW9mKCphcikpIHsKKwkJZXJyKCJib2d1cyBkcml2ZXIgY29udGV4dCByZXF1ZXN0LiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlhciA9IG1hbGxvYyhzaXplKTsKKwlpZiAoYXIgPT0gTlVMTCkgeworCQllcnIoImZhaWxlZCB0byBhbGxvYyBkcml2ZXIgY29udGV4dC4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbXNldChhciwgMCwgc2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgX19BUjkxNzBfTlVNX1RYUTsgaSsrKQorCQlmcmFtZV9xdWV1ZV9pbml0KCZhci0+dHhfc2VudF9xdWV1ZVtpXSk7CisJYXItPnJlc3BfbG9jayA9IFNETF9DcmVhdGVNdXRleCgpOworCWFyLT5tZW1fbG9jayA9IFNETF9DcmVhdGVNdXRleCgpOworCWFyLT5yZXNwX3BlbmQgPSBTRExfQ3JlYXRlQ29uZCgpOworCWFyLT50eF9wZW5kaW5nID0gMDsKKwlyZXR1cm4gYXI7Cit9CisKK3ZvaWQgY2FybHVfZnJlZV9kcml2ZXIoc3RydWN0IGNhcmx1ICphcikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWRiZygiZGVzdHJveSBkcml2ZXIgc3RydWN0LlxuIik7CisJU0RMX0Rlc3Ryb3lNdXRleChhci0+cmVzcF9sb2NrKTsKKwlTRExfRGVzdHJveU11dGV4KGFyLT5tZW1fbG9jayk7CisJU0RMX0Rlc3Ryb3lDb25kKGFyLT5yZXNwX3BlbmQpOworCisJZm9yIChpID0gMDsgaSA8IF9fQVI5MTcwX05VTV9UWFE7IGkrKykKKwkJZnJhbWVfcXVldWVfa2lsbCgmYXItPnR4X3NlbnRfcXVldWVbaV0pOworCisJZnJlZShhcik7Cit9CisKK3N0YXRpYyBpbnQgY2FybHVfaW5pdCgpCit7CisJc3RydWN0IFNETF92ZXJzaW9uIGNvbXBpbGVkOworCWludCByZXQ7CisKKwlTRExfVkVSU0lPTigmY29tcGlsZWQpOworCWRiZygiPT09IFNETCAlZC4lZC4lZCA9PT1cbiIsIGNvbXBpbGVkLm1ham9yLCBjb21waWxlZC5taW5vciwgY29tcGlsZWQucGF0Y2gpOworCisJcmV0ID0gU0RMX0luaXQoU0RMX0lOSVRfVElNRVIpOworCWlmIChyZXQgIT0gMCkgeworCQllcnIoIlVuYWJsZSB0byBpbml0aWFsaXplIFNETDogKCVzKVxuIiwgU0RMX0dldEVycm9yKCkpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXJldHVybiB1c2JfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBjYXJsdV9leGl0KCkKK3sKKwlTRExfUXVpdCgpOworCXVzYl9leGl0KCk7Cit9CisKK3N0YXRpYyBpbnQgY2FybHVfZHVtcF9lZXByb20odm9pZCkKK3sKKwlzdHJ1Y3QgY2FybHUgKmNhcmwgPSBOVUxMOworCXVpbnQ4X3QgZGF0YVs4MTkyXSA9IHsgMCB9OworCWludCBlcnI7CisKKwllcnIgPSBjYXJsdV9pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwljYXJsID0gY2FybHVzYl9wcm9iZSgpOworCWlmIChJU19FUlJfT1JfTlVMTChjYXJsKSkgeworCQllcnIgPSBQVFJfRVJSKGNhcmwpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBjYXJsdV9jbWRfbWVtX2R1bXAoY2FybCwgMCwgc2l6ZW9mKGRhdGEpLCAmZGF0YSk7CisJaWYgKGVycikKKwkJZ290byBvdXRfY2xvc2U7CisKKwlwcmludF9oZXhfZHVtcF9ieXRlcyhJTkZPLCAiRUVQUk9NOiIsIGRhdGEsIHNpemVvZihkYXRhKSk7CisKK291dF9jbG9zZToKKwljYXJsdXNiX2Nsb3NlKGNhcmwpOworCitvdXQ6CisJY2FybHVfZXhpdCgpOworCXJldHVybiBlcnIgPyBFWElUX0ZBSUxVUkUgOiBFWElUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgY2FybHVfcnVuX2dwaW9fdGVzdCh2b2lkKQoreworCXN0cnVjdCBjYXJsdSAqY2FybCA9IE5VTEw7CisJaW50IGVycjsKKworCWVyciA9IGNhcmx1X2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWNhcmwgPSBjYXJsdXNiX3Byb2JlKCk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGNhcmwpKSB7CisJCWVyciA9IFBUUl9FUlIoY2FybCk7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGNhcmx1X2dwaW9fdGVzdChjYXJsKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9jbG9zZTsKKworb3V0X2Nsb3NlOgorCWNhcmx1c2JfY2xvc2UoY2FybCk7CisKK291dDoKKwljYXJsdV9leGl0KCk7CisJcmV0dXJuIGVyciA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBjYXJsdV9ydW5fcmFuZG9tX3Rlc3Qodm9pZCkKK3sKKwlzdHJ1Y3QgY2FybHUgKmNhcmwgPSBOVUxMOworCWludCBlcnI7CisKKwllcnIgPSBjYXJsdV9pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwljYXJsID0gY2FybHVzYl9wcm9iZSgpOworCWlmIChJU19FUlJfT1JfTlVMTChjYXJsKSkgeworCQllcnIgPSBQVFJfRVJSKGNhcmwpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBjYXJsdV9yYW5kb21fdGVzdChjYXJsKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9jbG9zZTsKKworb3V0X2Nsb3NlOgorCWNhcmx1c2JfY2xvc2UoY2FybCk7CisKK291dDoKKwljYXJsdV9leGl0KCk7CisJcmV0dXJuIGVyciA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBjYXJsdV9ydW5fbG9vcF90ZXN0KHZvaWQpCit7CisJc3RydWN0IGNhcmx1ICpjYXJsOworCWludCBlcnI7CisKKwllcnIgPSBjYXJsdV9pbml0KCk7CisJaWYgKGVycikKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworCWNhcmwgPSBjYXJsdXNiX3Byb2JlKCk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGNhcmwpKSB7CisJCWVyciA9IFBUUl9FUlIoY2FybCk7CisJCWdvdG8gb3V0OworCX0KKworCWNhcmx1X2NtZF93cml0ZV9tZW0oY2FybCwgQVI5MTcwX01BQ19SRUdfQkNOX1BFUklPRCwgMHhGRkZGRkZGRik7CisJY2FybHVfY21kX3dyaXRlX21lbShjYXJsLCBBUjkxNzBfTUFDX1JFR19QUkVUQlRULCAweEZGRkZGRkZGKTsKKworCS8qIGRpZmZlcmVudCBwYXlsb2FkIHRlc3QgKi8KKwljYXJsdV9sb29wYmFja190ZXN0KGNhcmwsIDkwMDAsIDEwMDAsIDE1NjYsIDE1NjYpOworCWNhcmx1c2JfY2xvc2UoY2FybCk7CisKK291dDoKKwlyZXR1cm4gZXJyID8gRVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTOworfQorCitzdGF0aWMgaW50IGNhcmx1X3Byb2JlX2FsbCh2b2lkKQoreworCXN0cnVjdCBjYXJsdSAqY2FybFszMl0gPSB7IDAgfTsKKwl1bnNpZ25lZCBpbnQgZGV2czsKKwlpbnQgcmV0OworCisJcmV0ID0gY2FybHVfaW5pdCgpOworCWlmIChyZXQpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwlmb3IgKGRldnMgPSAwOyBkZXZzIDwgQVJSQVlfU0laRShjYXJsKTsgZGV2cysrKSB7CisJCWNhcmxbZGV2c10gPSBjYXJsdXNiX3Byb2JlKCk7CisJCWlmIChJU19FUlJfT1JfTlVMTChjYXJsW2RldnNdKSkKKwkJCWJyZWFrOworCX0KKworCWluZm8oIkZvdW5kICVkIGRldmljZXNcbiIsIGRldnMpOworCisJZm9yICg7IGRldnMgPiAwOyBkZXZzLS0pCisJCWNhcmx1c2JfY2xvc2UoY2FybFtkZXZzIC0gMV0pOworCisJY2FybHVfZXhpdCgpOworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKK3N0cnVjdCBtZW51X3N0cnVjdCB7CisJY2hhciBvcHRpb247CisJdW5zaWduZWQgaW50IHBhcmFtZXRlcnM7CisJaW50ICgqZnVuY3Rpb24pKHZvaWQpOworCWNoYXIgaGVscF90ZXh0WzgwXTsKK307CisKKyNkZWZpbmUgTUVOVV9JVEVNKG9wLCBmdW5jLCBoZWxwbWUpCVwKKwl7CQkJCVwKKwkJLm9wdGlvbiA9IG9wLAkJXAorCQkucGFyYW1ldGVycyA9IDAsCVwKKwkJLmZ1bmN0aW9uID0gZnVuYywJXAorCQkuaGVscF90ZXh0ID0gaGVscG1lLAlcCisJfQorCitzdGF0aWMgaW50IHNob3dfaGVscCh2b2lkKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtZW51X3N0cnVjdCBtZW51W10gPSB7CisJWzBdID0gTUVOVV9JVEVNKCdoJywgc2hvd19oZWxwLCAic2hvd3MgdGhpcyB1c2VsZXNzIGhlbHAgbWVzc2FnZSB0ZXh0LiIpLAkvKiBrZWVwIHRoaXMgZW50cnkgYXQgMCEgKi8KKwkgICAgICBNRU5VX0lURU0oJ2UnLCBjYXJsdV9kdW1wX2VlcHJvbSwgImhleGR1bXBzIGVlcHJvbSBjb250ZW50IHRvIHN0ZG91dC4iKSwKKwkgICAgICBNRU5VX0lURU0oJ2wnLCBjYXJsdXNiX3ByaW50X2tub3duX2RldmljZXMsICJsaXN0IG9mIGFsbCBrbm93biBhcjkxNzAgdXNiIGRldmljZXMuIiksCisJICAgICAgTUVOVV9JVEVNKCdwJywgY2FybHVfcHJvYmVfYWxsLCAicHJvYmUgYWxsIHBvc3NpYmxlIGRldmljZXMuIiksCisJICAgICAgTUVOVV9JVEVNKCd0JywgY2FybHVfcnVuX2xvb3BfdGVzdCwgInJ1biB0eC9yeCB0ZXN0LiIpLAorCSAgICAgIE1FTlVfSVRFTSgnZycsIGNhcmx1X3J1bl9ncGlvX3Rlc3QsICJmbGFzaCB0aGUgbGVkcy4iKSwKKwkgICAgICBNRU5VX0lURU0oJ3InLCBjYXJsdV9ydW5fcmFuZG9tX3Rlc3QsICJnZXQgcmFuZG9tIG51bWJlcnMuIiksCit9OworCitzdGF0aWMgaW50IHNob3dfaGVscCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCWNoYXIgcGFyYW1ldGVyc1tBUlJBWV9TSVpFKG1lbnUpICsgMV07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZW51KTsgaSsrKQorCQlwYXJhbWV0ZXJzW2ldID0gbWVudVtpXS5vcHRpb247CisKKwlwYXJhbWV0ZXJzW0FSUkFZX1NJWkUobWVudSldID0gJ1wwJzsKKworCWluZm8oInVzYWdlOiBhcjkxNzB1c2VyIC1bJXNdXG4iLCBwYXJhbWV0ZXJzKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1lbnUpOyBpKyspCisJCWluZm8oIlx0LSVjXHQlc1xuIiwgbWVudVtpXS5vcHRpb24sIG1lbnVbaV0uaGVscF90ZXh0KTsKKworCXJldHVybiBFWElUX0ZBSUxVUkU7Cit9CisKK3N0YXRpYyBpbnQgc2VsZWN0X21lbnVfaXRlbShjb25zdCBjaGFyIGFyZykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUobWVudSkgLSAxOyBpICE9IDA7IGktLSkgeworCQlpZiAoYXJnID09IG1lbnVbaV0ub3B0aW9uKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIG1lbnVbaV0uZnVuY3Rpb24oKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbml0X2RlYnVnKCk7CisKKwlpZiAoYXJnYyAhPSAyIHx8IHN0cmxlbihhcmd2WzFdKSAhPSAyIHx8IGFyZ3ZbMV1bMF0gIT0gJy0nKQorCQlyZXR1cm4gc2hvd19oZWxwKCk7CisKKwlyZXR1cm4gc2VsZWN0X21lbnVfaXRlbShhcmd2WzFdWzFdKTsKK30KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvdG9vbHMvY2FybHUvc3JjL3J4LmMgYi9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNzczMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy9yeC5jCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogY2FybHUgLSB1c2Vyc3BhY2UgdGVzdGluZyB1dGlsaXR5IGZvciBhcjkxNzAgZGV2aWNlcworICoKKyAqIFJYIGRhdGEgcHJvY2Vzc2luZworICoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxpYnVzYi5oIgorCisjaW5jbHVkZSAiY2FybHUuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImZyYW1lLmgiCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisjaW5jbHVkZSAid2xhbi5oIgorCitzdGF0aWMgdm9pZCBjYXJsdV9oYW5kbGVfZGF0YShzdHJ1Y3QgY2FybHUgKmFyLCB2b2lkICpidWYsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAoYXItPnJ4X2NiKSB7CisJCWFyLT5yeF9jYihhciwgYnVmLCBsZW4pOworCX0gZWxzZSB7CisJCWRiZygidW5oYW5kbGVkIGRhdGE6XG4iKTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoVkVSQk9TRSwgIkRBVEE6IiwgYnVmLCBsZW4pOworCX0KK30KKwordm9pZCBjYXJsdV9oYW5kbGVfY29tbWFuZChzdHJ1Y3QgY2FybHUgKmFyLCB2b2lkICpidWYsCisJCQkgIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IGNhcmw5MTcwX3JzcCAqY21kOworCWludCByZXQgPSAwOworCisJY21kID0gKHZvaWQgKikgYnVmOworCisJaWYgKChjbWQtPmhkci5jbWQgJiBDQVJMOTE3MF9SU1BfRkxBRykgIT0gQ0FSTDkxNzBfUlNQX0ZMQUcpIHsKKwkJaWYgKChjbWQtPmhkci5jbWQgJiBDQVJMOTE3MF9DTURfQVNZTkNfRkxBRykpCisJCQlyZXR1cm47CisKKwkJU0RMX211dGV4UChhci0+cmVzcF9sb2NrKTsKKwkJaWYgKGFyLT5yZXNwX2J1ZiAmJiBhci0+cmVzcF9sZW4gJiYgYXItPnJlc3BfbGVuID49IChsZW4gLSA0KSkgeworCQkJbWVtY3B5KGFyLT5yZXNwX2J1ZiwgYnVmICsgNCwgbGVuIC0gNCk7CisJCQlhci0+cmVzcF9idWYgPSBOVUxMOworCQl9IGVsc2UgeworCQkJd2Fybigic3B1cmlvdXMgY29tbWFuZCByZXNwb25zZSAoJWQgLyAlZClcbiIsCisJCQkgICAgIChpbnQpIGxlbiAtIDQsIChpbnQpIGFyLT5yZXNwX2xlbik7CisJCQlwcmludF9oZXhfZHVtcF9ieXRlcyhXQVJOSU5HLCAiUlNQOiIsIGJ1ZiwgbGVuKTsKKwkJfQorCQlTRExfbXV0ZXhWKGFyLT5yZXNwX2xvY2spOworCisJCVNETF9Db25kU2lnbmFsKGFyLT5yZXNwX3BlbmQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGFyLT5jbWRfY2IpCisJCXJldCA9IGFyLT5jbWRfY2IoYXIsIGNtZCwgYnVmLCBsZW4pOworCisJaWYgKHJldCkgeworCQlzd2l0Y2ggKGNtZC0+aGRyLmNtZCkgeworCQljYXNlIENBUkw5MTcwX1JTUF9UWENPTVA6CisJCQljYXJsdV90eF9mZWVkYmFjayhhciwgY21kKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ0FSTDkxNzBfUlNQX1RFWFQ6CisJCQlpbmZvKCJjYXJsOTE3MCBGVzogJS4qc1xuIiwgKGludClsZW4gLSA0LCAoY2hhciAqKWJ1ZiArIDQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBDQVJMOTE3MF9SU1BfSEVYRFVNUDoKKwkJCWluZm8oImNhcmw5MTcwIEZXOiBoZXhkdW1wXG4iKTsKKwkJCXByaW50X2hleF9kdW1wX2J5dGVzKElORk8sICJIRVg6IiwgKGNoYXIgKilidWYgKyA0LCBsZW4gLSA0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ0FSTDkxNzBfUlNQX1dBVENIRE9HOgorCQkJZXJyKCJXb29mIFdvb2YhIFdhdGNoZG9nIG5vdGlmaWNhdGlvbi5cbiIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBDQVJMOTE3MF9SU1BfR1BJTzoKKwkJCWluZm8oIkdQSU8gSW50ZXJydXB0ID0+IEdQSU8gc3RhdGUgJS44eFxuIiwKKwkJCSAgICBsZTMyX3RvX2NwdShjbWQtPmdwaW8uZ3BpbykpOworCQkJYnJlYWs7CisKKwkJY2FzZSBDQVJMOTE3MF9SU1BfUkFEQVI6CisJCQlpbmZvKCJSQURBUiBJbnRlcnJ1cHQiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQl3YXJuKCJyZWNlaXZlZCB1bmhhbmRsZWQgZXZlbnQgMHgleFxuIiwgY21kLT5oZHIuY21kKTsKKwkJCXByaW50X2hleF9kdW1wX2J5dGVzKFdBUk5JTkcsICJSU1A6IiwgKGNoYXIgKilidWYgKyA0LCBsZW4gLSA0KTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2Nhcmx1X3J4KHN0cnVjdCBjYXJsdSAqYXIsIHVpbnQ4X3QgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWkgPSAwOworCisJLyogd2VpcmQgdGhpbmcsIGJ1dCB0aGlzIGlzIHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBkcml2ZXIgKi8KKwl3aGlsZSAobGVuID4gMiAmJiBpIDwgMTIgJiYgYnVmWzBdID09IDB4ZmYgJiYgYnVmWzFdID09IDB4ZmYpIHsKKwkJaSArPSAyOworCQlsZW4gLT0gMjsKKwkJYnVmICs9IDI7CisJfQorCisJaWYgKGkgPT0gMTIpIHsKKwkJc3RydWN0IGNhcmw5MTcwX3JzcCAqY21kOworCQlpID0gMDsKKworCQl3aGlsZSAoaSA8IGxlbikgeworCQkJY21kID0gKHZvaWQgKikgJmJ1ZltpXTsKKworCQkJY2FybHVfaGFuZGxlX2NvbW1hbmQoYXIsIGNtZCwgY21kLT5oZHIubGVuICsgNCk7CisJCQlpICs9IGNtZC0+aGRyLmxlbiArIDQ7CisJCX0KKwl9IGVsc2UgeworCQljYXJsdV9oYW5kbGVfZGF0YShhciwgYnVmLCBsZW4pOworCX0KK30KKworc3RhdGljIHZvaWQgY2FybHVfcnhfc3RyZWFtKHN0cnVjdCBjYXJsdSAqYXIsIHN0cnVjdCBmcmFtZSAqZnJhbWUpCit7CisJdm9pZCAqYnVmID0gZnJhbWUtPmRhdGE7CisJdW5zaWduZWQgaW50IGxlbiA9IGZyYW1lLT5sZW47CisKKwl3aGlsZSAobGVuID49IDQpIHsKKwkJc3RydWN0IGFyOTE3MF9zdHJlYW0gKnJ4X3N0cmVhbTsKKwkJdW5zaWduZWQgaW50IHJlc3BsZW4sIGVsZW47CisKKwkJcnhfc3RyZWFtID0gKHZvaWQgKikgYnVmOworCQlyZXNwbGVuID0gbGUxNl90b19jcHUocnhfc3RyZWFtLT5sZW5ndGgpOworCQllbGVuID0gcm91bmR1cChyZXNwbGVuICsgNCwgNCk7CisKKwkJaWYgKHJ4X3N0cmVhbS0+dGFnICE9IGNwdV90b19sZTE2KDB4NGUwMCkpIHsKKwkJCXdhcm4oImZyYW1lIGhhcyBubyB0YWcgJXAgJXUgJXguXG4iLAorCQkJICAgICAgYnVmLCAoaW50KSBsZW4sIHJ4X3N0cmVhbS0+dGFnKTsKKwkJCXByaW50X2hleF9kdW1wX2J5dGVzKFdBUk5JTkcsICJGUkFNRToiLCBmcmFtZS0+ZGF0YSwgZnJhbWUtPmxlbik7CisKKwkJCV9fY2FybHVfcngoYXIsIGJ1ZiwgbGVuKTsKKwkJCXJldHVybjsKKwkJfQorCisJCV9fY2FybHVfcngoYXIsIHJ4X3N0cmVhbS0+cGF5bG9hZCwgcmVzcGxlbik7CisKKwkJbGVuIC09IGVsZW47CisJCWJ1ZiArPSBlbGVuOworCX0KK30KKwordm9pZCBjYXJsdV9yeChzdHJ1Y3QgY2FybHUgKmFyLCBzdHJ1Y3QgZnJhbWUgKmZyYW1lKQoreworCWlmIChhci0+cnhfc3RyZWFtKQorCQljYXJsdV9yeF9zdHJlYW0oYXIsIGZyYW1lKTsKKwllbHNlCisJCV9fY2FybHVfcngoYXIsIGZyYW1lLT5kYXRhLCBmcmFtZS0+bGVuKTsKK30KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvdG9vbHMvY2FybHUvc3JjL3Rlc3QuYyBiL2Nhcmw5MTcwZncvdG9vbHMvY2FybHUvc3JjL3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjQ5NTU5Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvdGVzdC5jCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogY2FybHUgLSB1c2Vyc3BhY2UgdGVzdGluZyB1dGlsaXR5IGZvciBhcjkxNzAgZGV2aWNlcworICoKKyAqIFZhcmlvdXMgdGVzdHMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsaWJ1c2IuaCIKKyNpbmNsdWRlICJTREwuaCIKKworI2luY2x1ZGUgImNhcmx1LmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJmcmFtZS5oIgorI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgImNtZC5oIgorCit2b2lkIGRlYnVnX3Rlc3Qodm9pZCkKK3sKKwllcnIoIlRoaXMgaXMgYW4gZXJyb3IuXG4iKTsKKwl3YXJuKCJUaGlzIGlzIGEgd2FybmlnLlxuIik7CisJaW5mbygiVGhpcyBpcyBhbiBpbmZvcm1hdGl2ZSBtZXNzYWdlLlxuIik7CisJZGJnKCJUaGlzIGlzIGp1c3QgdXR0ZXIgdXNlbGVzcyBiYWJibGUuXG4iKTsKK30KKwordm9pZCBjYXJsdV9mcmFtZV90ZXN0KHN0cnVjdCBjYXJsdSAqYXIpCit7CisJc3RydWN0IGZyYW1lICpmcmFtZTsKKworCWZyYW1lID0gY2FybHVfYWxsb2NfZnJhbWUoYXIsIDB4NDApOworCWZyYW1lX3Jlc2VydmUoZnJhbWUsIDB4MTApOworCisJbWVtc2V0KGZyYW1lX3B1dChmcmFtZSwgMHgxMCksIDB4MTEsIDB4MTApOworCW1lbXNldChmcmFtZV9wdXQoZnJhbWUsIDB4MTApLCAweDIyLCAweDEwKTsKKwltZW1zZXQoZnJhbWVfcHVzaChmcmFtZSwgMHgxMCksIDB4MzMsIDB4MTApOworCW1lbXNldChmcmFtZV9wdXQoZnJhbWUsIDB4MTApLCAweDQ0LCAweDEwKTsKKworCXByaW50X2hleF9kdW1wX2J5dGVzKElORk8sICJEQVRBOiIsIGZyYW1lLT5kYXRhLCBmcmFtZS0+bGVuKTsKKworCXByaW50X2hleF9kdW1wX2J5dGVzKElORk8sICJQQVlMT0FEOiIsIGZyYW1lLT5wYXlsb2FkLCBmcmFtZS0+YWxsb2NlZCk7CisKKwlmcmFtZV9mcmVlKGZyYW1lKTsKK30KKworc3RhdGljIHZvaWQgY2FybHVfbG9vcGJhY2tfdHhfY2Ioc3RydWN0IGNhcmx1ICphciBfX3VudXNlZCwKKwkJCQkgICAgc3RydWN0IGZyYW1lICpmcmFtZSBfX3VudXNlZCkKK3sKK30KKworc3RhdGljIGludCBjYXJsdV9sb29wYmFja19jbWQoc3RydWN0IGNhcmx1ICphciBfX3VudXNlZCwKKwkJCSAgICAgIHN0cnVjdCBjYXJsOTE3MF9yc3AgKmNtZCwgdm9pZCAqYnVmIF9fdW51c2VkLAorCQkJICAgICAgdW5zaWduZWQgaW50IGxlbiBfX3VudXNlZCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbjsKKworCXN3aXRjaCAoY21kLT5oZHIuY21kKSB7CisJY2FzZSBDQVJMOTE3MF9SU1BfVFhDT01QOgorCQluID0gY21kLT5oZHIuZXh0OworCQlkYmcoInJlY2VpdmVkIHR4IGZlZWRiYWNrICglZCkuXG4iLCBuKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlkYmcoImNvb2tpZToleCBpbmZvOiV4XG4iLAorCQkJCWNtZC0+X3R4X3N0YXR1c1tpXS5jb29raWUsCisJCQkJY21kLT5fdHhfc3RhdHVzW2ldLmluZm8pOworCQl9CisJCXJldHVybiAtMTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNhcmx1X2xvb3BiYWNrX3J4KHN0cnVjdCBjYXJsdSAqYXIsCisJCQkJdm9pZCAqYnVmIF9fdW51c2VkLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWFyLT5yeGVkKys7CisJYXItPnJ4X29jdGV0cyArPSBsZW47Cit9CisKK3N0YXRpYyB2b2lkIGNhcmx1X2xvb3BiYWNrX21hcmtfdHhfZnJhbWVzKHN0cnVjdCBmcmFtZSAqZnJhbWUpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnJhbWUtPmxlbjsgaSsrKQorCQlmcmFtZS0+ZGF0YVtpXSA9ICh1aW50OF90KSBpOworfQorCit2b2lkIGNhcmx1X2xvb3BiYWNrX3Rlc3Qoc3RydWN0IGNhcmx1ICphciwgY29uc3QgdW5zaWduZWQgaW50IHRvdGFsX3J1bnMsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGludCBpbnRlcnZhbCwgY29uc3QgdW5zaWduZWQgaW50IG1pbl9sZW4sIGNvbnN0IHVuc2lnbmVkIGludCBtYXhfbGVuKQoreworCXN0cnVjdCBmcmFtZSAqZnJhbWU7CisJdWludDMyX3Qgc3RhcnRfdGltZSwgdG90YWxfdGltZSA9IDA7CisJZmxvYXQgbW9jdGV0cywgZHRpbWU7CisJdW5zaWduZWQgaW50IHJ1bnMgPSAwLCBpID0gMCwgaiA9IDAsIGxlbjsKKwlpbnQgcmV0OworCisJaWYgKG1pbl9sZW4gPiBtYXhfbGVuKSB7CisJCWVycigic3RyZXNzdGVzdDogaW52YWxpZCBwYXJhbWV0ZXJzID0+IG1pbl9sZW46JWQgPiBtYXhfbGVuOiVkIiwKKwkJICAgIG1pbl9sZW4sIG1heF9sZW4pOworCQlyZXR1cm47CisJfQorCisJaWYgKG1pbl9sZW4gPCA0KSB7CisJCWVycigic3RyZXNzdGVzdDogaW52YWxpZCBwYXJhbWV0ZXJzID0+IG1pbl9sZW4gaXMgc21hbGxlciB0aGFuIDQiKTsKKwkJcmV0dXJuOworCX0KKworCWxlbiA9IG1pbl9sZW47CisJZnJhbWUgPSBjYXJsdV9hbGxvY19mcmFtZShhciwgbGVuKTsKKwlmcmFtZV9wdXQoZnJhbWUsIGxlbik7CisKKwljYXJsdV9sb29wYmFja19tYXJrX3R4X2ZyYW1lcyhmcmFtZSk7CisKKwlhci0+cnhfY2IgPSBjYXJsdV9sb29wYmFja19yeDsKKwlhci0+Y21kX2NiID0gY2FybHVfbG9vcGJhY2tfY21kOworCWFyLT50eF9jYiA9IGNhcmx1X2xvb3BiYWNrX3R4X2NiOworCisJc3RhcnRfdGltZSA9IFNETF9HZXRUaWNrcygpOworCXdoaWxlIChydW5zIDw9IHRvdGFsX3J1bnMpIHsKKwkJaWYgKGZyYW1lICYmIGNhcmx1X3R4KGFyLCBmcmFtZSkgPT0gMCkgeworCQkJbGVuID0gbWluX2xlbjsKKwkJCWkrKzsKKwkJfSBlbHNlIHsKKwkJCWZyYW1lX2ZyZWUoZnJhbWUpOworCQl9CisKKwkJZnJhbWUgPSBOVUxMOworCisJCWZyYW1lID0gY2FybHVfYWxsb2NfZnJhbWUoYXIsIGxlbik7CisJCWZyYW1lX3B1dChmcmFtZSwgbGVuKTsKKworCQljYXJsdV9sb29wYmFja19tYXJrX3R4X2ZyYW1lcyhmcmFtZSk7CisJCWorKzsKKworCQl0b3RhbF90aW1lID0gU0RMX0dldFRpY2tzKCkgLSBzdGFydF90aW1lOworCisJCWlmICh0b3RhbF90aW1lID49IGludGVydmFsKSB7CisJCQltb2N0ZXRzID0gKChmbG9hdClhci0+dHhfb2N0ZXRzKSAvICgxMDI0LjBmICogMTAyNC4wZik7CisJCQlkdGltZSA9ICgoZmxvYXQpdG90YWxfdGltZSkgLyAxMDAwOworCQkJaW5mbygiJWQ6IHR4ICVkIG9mICVkID0+ICUuMmYgTWlCIGluICUuMmYgc2VjcyA9PiAlLjRmIE1CaXRzL3NcbiIsCisJCQkJcnVucywgaSwgaiwgbW9jdGV0cywgZHRpbWUsIChtb2N0ZXRzICogOC4wZikgLyBkdGltZSk7CisKKwkJCW1vY3RldHMgPSAoKGZsb2F0KWFyLT5yeF9vY3RldHMpIC8gKDEwMjQuMGYgKiAxMDI0LjBmKTsKKwkJCWluZm8oIiVkOiByeCAlZCBvZiAlZCA9PiAlLjJmIE1pQiBpbiAlLjJmIHNlY3MgPT4gJS40ZiBNQml0cy9zXG4iLAorCQkJCXJ1bnMsIGFyLT5yeGVkLCBpLCBtb2N0ZXRzLCBkdGltZSwgKG1vY3RldHMgKiA4LjBmKSAvIGR0aW1lKTsKKworCQkJaWYgKChhci0+cnhlZCA9PSAwICYmIGkpIHx8ICFpKSB7CisJCQkJcmV0ID0gY2FybHVfY21kX2VjaG8oYXIsIDB4ZGVhZGJlZWYpOworCQkJCWlmIChyZXQpCisJCQkJCXdhcm4oImZpcm13YXJlIGNyYXNoZWQuLi4gZWNob19jbWQ6ICglZClcbiIsIHJldCk7CisJCQl9CisKKwkJCXRvdGFsX3RpbWUgPSAwOworCQkJaSA9IDA7CisJCQlqID0gMDsKKwkJCWFyLT5yeGVkID0gMDsKKwkJCWFyLT50eGVkID0gMDsKKwkJCWFyLT5yeF9vY3RldHMgPSAwOworCQkJYXItPnR4X29jdGV0cyA9IDA7CisJCQlydW5zKys7CisJCQlzdGFydF90aW1lID0gU0RMX0dldFRpY2tzKCk7CisJCX0KKwl9CisKKwlhci0+cnhfY2IgPSBOVUxMOworCWFyLT5jbWRfY2IgPSBOVUxMOworCWFyLT50eF9jYiA9IE5VTEw7Cit9CisKK2ludCBjYXJsdV9ncGlvX3Rlc3Qoc3RydWN0IGNhcmx1ICphcikKK3sKKwl1aW50MzJfdCBncGlvOworCisjZGVmaW5lIENISyhjbWQpCQkJCVwKKwlkbyB7CQkJCQlcCisJCWludCBfX2VyciA9IGNtZDsJCVwKKwkJaWYgKChfX2VycikpCQkJXAorCQkJcmV0dXJuIF9fZXJyOwkJXAorCX0gd2hpbGUgKDApCisKKwlDSEsoY2FybHVfY21kX3JlYWRfbWVtKGFyLCBBUjkxNzBfR1BJT19SRUdfUE9SVF9EQVRBLCAmZ3BpbykpOworCWluZm8oIkdQSU8gc3RhdGU6JXhcbiIsIGdwaW8pOworCisJLyogdHVybiBib3RoIExFRHMgb24gKi8KKwlDSEsoY2FybHVfY21kX3dyaXRlX21lbShhciwgQVI5MTcwX0dQSU9fUkVHX1BPUlRfREFUQSwKKwkgICAgQVI5MTcwX0dQSU9fUE9SVF9MRURfMCB8IEFSOTE3MF9HUElPX1BPUlRfTEVEXzEpKTsKKworCVNETF9EZWxheSg3MDApOworCisJQ0hLKGNhcmx1X2NtZF9yZWFkX21lbShhciwgQVI5MTcwX0dQSU9fUkVHX1BPUlRfREFUQSwgJmdwaW8pKTsKKwlpbmZvKCJHUElPIHN0YXRlOiV4XG4iLCBncGlvKTsKKworCS8qIHR1cm4gTEVEcyBvZmYgZXZlcnl0aGluZyAqLworCUNISyhjYXJsdV9jbWRfd3JpdGVfbWVtKGFyLCBBUjkxNzBfR1BJT19SRUdfUE9SVF9EQVRBLCAwKSk7CisKKwlDSEsoY2FybHVfY21kX3JlYWRfbWVtKGFyLCBBUjkxNzBfR1BJT19SRUdfUE9SVF9EQVRBLCAmZ3BpbykpOworCWluZm8oIkdQSU8gc3RhdGU6JXhcbiIsIGdwaW8pOworfQorCitpbnQgY2FybHVfcmFuZG9tX3Rlc3Qoc3RydWN0IGNhcmx1ICphcikKK3sKKwl1aW50MzJfdCBidWZbNDA5Nl07CisJaW50IGVyciwgaTsKKworCWVyciA9IGNhcmx1X2NtZF9tZW1fd2F0Y2goYXIsIEFSOTE3MF9SQU5EX1JFR19OVU0sIHNpemVvZihidWYpLCBidWYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWYpOyBpKyspCisJCWluZm8oIiUuMnggJS4yeCAiLCBidWZbaV0gJiAweGZmLCBidWZbaV0gPj4gOCk7CisKKwlpbmZvKCJcbiIpOworfQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvdGVzdC5oIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3M2JhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy90ZXN0LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIGNhcmx1IC0gdXNlcnNwYWNlIHRlc3RpbmcgdXRpbGl0eSBmb3IgYXI5MTcwIGRldmljZXMKKyAqCisgKiB0ZXN0LmMgaGVhZGVyCisgKgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19DQVJMOTE3MFVTRVJfVEVTVF9ICisjZGVmaW5lIF9fQ0FSTDkxNzBVU0VSX1RFU1RfSAorCisjaW5jbHVkZSAiY2FybHUuaCIKKwordm9pZCBjYXJsdV9sb29wYmFja190ZXN0KHN0cnVjdCBjYXJsdSAqYXIsIGNvbnN0IHVuc2lnbmVkIGludCB0b3RhbF9ydW5zLAorCQkJIGNvbnN0IHVuc2lnbmVkIGludCBpbnRlcnZhbCwgY29uc3QgdW5zaWduZWQgaW50IG1pbl9sZW4sCisJCQkgY29uc3QgdW5zaWduZWQgaW50IG1heF9sZW4pOworCitpbnQgY2FybHVfZ3Bpb190ZXN0KHN0cnVjdCBjYXJsdSAqYXIpOworaW50IGNhcmx1X3JhbmRvbV90ZXN0KHN0cnVjdCBjYXJsdSAqYXIpOworCisjZW5kaWYgLyogX19DQVJMOTE3MFVTRVJfVEVTVF9IICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy90eC5jIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk3NTAyCi0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvdHguYwpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIGNhcmx1IC0gdXNlcnNwYWNlIHRlc3RpbmcgdXRpbGl0eSBmb3IgYXI5MTcwIGRldmljZXMKKyAqCisgKiB4bWl0IC0gcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsaWJ1c2IuaCIKKworI2luY2x1ZGUgImNhcmx1LmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJmcmFtZS5oIgorI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgImllZWU4MDIxMS5oIgorI2luY2x1ZGUgIndsYW4uaCIKKworc3RydWN0IGZyYW1lICpjYXJsdV9hbGxvY19mcmFtZShzdHJ1Y3QgY2FybHUgKmFyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZnJhbWUgKnRtcDsKKwl1bnNpZ25lZCBpbnQgdG90YWxfbGVuOworCisJdG90YWxfbGVuID0gYXItPmV4dHJhX2hlYWRyb29tICsgc2l6ZW9mKHN0cnVjdCBfY2FybDkxNzBfdHhfc3VwZXJmcmFtZSkgKyBzaXplOworCisJdG1wID0gZnJhbWVfYWxsb2ModG90YWxfbGVuKTsKKwlpZiAoIXRtcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmcmFtZV9yZXNlcnZlKHRtcCwgc2l6ZW9mKHN0cnVjdCBfY2FybDkxNzBfdHhfc3VwZXJmcmFtZSkgKyBhci0+ZXh0cmFfaGVhZHJvb20pOworCisJdG1wLT5xdWV1ZSA9IDI7CisKKwlyZXR1cm4gdG1wOworfQorCitzdGF0aWMgaW50IGNhcmx1X2FsbG9jX2Rldl9tZW0oc3RydWN0IGNhcmx1ICphciwKKwkJCQlzdHJ1Y3QgZnJhbWUgKmZyYW1lKQoreworCXN0cnVjdCBfY2FybDkxNzBfdHhfc3VwZXJmcmFtZSAqdHhwID0gKHZvaWQgKilmcmFtZS0+ZGF0YTsKKwl1bnNpZ25lZCBpbnQgbGVuLCBjaHVua3M7CisKKwlsZW4gPSByb3VuZHVwKGZyYW1lLT5sZW4sIGFyLT5kbWFfY2h1bmtfc2l6ZSk7CisJY2h1bmtzID0gbGVuIC8gYXItPmRtYV9jaHVua19zaXplOworCisJU0RMX211dGV4UChhci0+bWVtX2xvY2spOworCWlmIChhci0+dHhfcGVuZGluZyA+PSBhci0+ZG1hX2NodW5rcyB8fAorCSAgICBhci0+dXNlZF9kbWFfY2h1bmtzICsgY2h1bmtzID49IGFyLT5kbWFfY2h1bmtzKSB7CisJCVNETF9tdXRleFYoYXItPm1lbV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJYXItPnVzZWRfZG1hX2NodW5rcyArPSBjaHVua3M7CisJYXItPnR4X3BlbmRpbmcrKzsKKwl0eHAtPnMuY29va2llID0gYXItPmNvb2tpZSsrOworCVNETF9tdXRleFYoYXItPm1lbV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjYXJsdV9mcmVlX2Rldl9tZW0oc3RydWN0IGNhcmx1ICphciwKKwkJCQkgc3RydWN0IGZyYW1lICpmcmFtZSkKK3sKKwlzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnR4cCA9ICh2b2lkICopZnJhbWUtPmRhdGE7CisJdW5zaWduZWQgaW50IGxlbiwgY2h1bmtzOworCisJbGVuID0gcm91bmR1cChmcmFtZS0+bGVuLCBhci0+ZG1hX2NodW5rX3NpemUpOworCWNodW5rcyA9IGxlbiAvIGFyLT5kbWFfY2h1bmtfc2l6ZTsKKworCVNETF9tdXRleFAoYXItPm1lbV9sb2NrKTsKKwlhci0+dXNlZF9kbWFfY2h1bmtzIC09IGNodW5rczsKKwlhci0+dHhfcGVuZGluZy0tOworCVNETF9tdXRleFYoYXItPm1lbV9sb2NrKTsKK30KKwordm9pZCBjYXJsdV9mcmVlX2ZyYW1lKHN0cnVjdCBjYXJsdSAqYXIgX191bnVzZWQsCisJCQkgc3RydWN0IGZyYW1lICpmcmFtZSkKK3sKKwlmcmFtZV9mcmVlKGZyYW1lKTsKK30KKworc3RhdGljIHN0cnVjdCBmcmFtZSAqY2FybHVfZmluZF9mcmFtZShzdHJ1Y3QgY2FybHUgKmFyLAorCQkJCQkgdW5zaWduZWQgaW50IHF1ZXVlLCB1aW50OF90IGNvb2tpZSkKK3sKKwlzdHJ1Y3QgZnJhbWUgKmZyYW1lID0gTlVMTDsKKworCUJVR19PTihxdWV1ZSA+PSBfX0FSOTE3MF9OVU1fVFhRKTsKKwlCVUdfT04oU0RMX211dGV4UChhci0+dHhfc2VudF9xdWV1ZVtxdWV1ZV0ubG9jaykgIT0gMCk7CisJRlJBTUVfV0FMSyhmcmFtZSwgJmFyLT50eF9zZW50X3F1ZXVlW3F1ZXVlXSkgeworCQlzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnN1cGVyOworCisJCXN1cGVyID0gKHZvaWQgKikgZnJhbWUtPmRhdGE7CisJCWlmIChzdXBlci0+cy5jb29raWUgPT0gY29va2llKSB7CisJCQlfX2ZyYW1lX3VubGluaygmYXItPnR4X3NlbnRfcXVldWVbcXVldWVdLCBmcmFtZSk7CisJCQlTRExfbXV0ZXhWKGFyLT50eF9zZW50X3F1ZXVlW3F1ZXVlXS5sb2NrKTsKKwkJCXJldHVybiBmcmFtZTsKKwkJfQorCX0KKwlTRExfbXV0ZXhWKGFyLT50eF9zZW50X3F1ZXVlW3F1ZXVlXS5sb2NrKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBjYXJsdV90eF9mYl9jYihzdHJ1Y3QgY2FybHUgKmFyLAorCQkJICAgICAgc3RydWN0IGZyYW1lICpmcmFtZSkKK3sKKwlpZiAoYXItPnR4X2ZiX2NiKQorCQlhci0+dHhfZmJfY2IoYXIsIGZyYW1lKTsKKwllbHNlCisJCWNhcmx1X2ZyZWVfZnJhbWUoYXIsIGZyYW1lKTsKKworfQorCit2b2lkIGNhcmx1X3R4X2ZlZWRiYWNrKHN0cnVjdCBjYXJsdSAqYXIsCisJCSAgICAgICBzdHJ1Y3QgY2FybDkxNzBfcnNwICpjbWQpCit7CisJdW5zaWduZWQgaW50IGksIG4sIGssIHE7CisJc3RydWN0IGZyYW1lICpmcmFtZTsKKwlzdHJ1Y3QgY2FybHVfdHhfaW5mbyAqdHhfaW5mbzsKKworCW4gPSBjbWQtPmhkci5leHQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXEgPSAoY21kLT5fdHhfc3RhdHVzW2ldLmluZm8gPj4gQ0FSTDkxNzBfVFhfU1RBVFVTX1FVRVVFX1MpICYKKwkJICAgIENBUkw5MTcwX1RYX1NUQVRVU19RVUVVRTsKKwkJZnJhbWUgPSBjYXJsdV9maW5kX2ZyYW1lKGFyLCBxLCBjbWQtPl90eF9zdGF0dXNbaV0uY29va2llKTsKKwkJaWYgKGZyYW1lKSB7CisJCQljYXJsdV9mcmVlX2Rldl9tZW0oYXIsIGZyYW1lKTsKKwkJCXR4X2luZm8gPSBnZXRfdHhfaW5mbyhmcmFtZSk7CisKKwkJCWsgPSAoY21kLT5fdHhfc3RhdHVzW2ldLmluZm8gPj4gQ0FSTDkxNzBfVFhfU1RBVFVTX1JJWCkKKwkJCSAgICAmIENBUkw5MTcwX1RYX1NUQVRVU19SSVhfUzsKKwkJCXR4X2luZm8tPnJhdGVzW2tdLmNudCA9IChjbWQtPl90eF9zdGF0dXNbaV0uaW5mbyA+PgorCQkJCQkJIENBUkw5MTcwX1RYX1NUQVRVU19UUklFU19TKSAmCisJCQkJCQlDQVJMOTE3MF9UWF9TVEFUVVNfVFJJRVM7CisJCQlmb3IgKGsrKzsgayA8IENBUkw5MTcwX1RYX01BWF9SQVRFUzsgaysrKSB7CisJCQkJdHhfaW5mby0+cmF0ZXNba10ucml4ID0gLTE7CisJCQkJdHhfaW5mby0+cmF0ZXNba10uY250ID0gLTE7CisJCQl9CisKKwkJCWNhcmx1X3R4X2ZiX2NiKGFyLCBmcmFtZSk7CisJCX0gZWxzZSB7CisJCQllcnIoIkZvdW5kIG5vIGZyYW1lIGZvciBjb29raWUgJWQuXG4iLAorCQkJICAgIGNtZC0+X3R4X3N0YXR1c1tpXS5jb29raWUpOworCQl9CisJfQorfQorCitpbnQgY2FybHVfdHgoc3RydWN0IGNhcmx1ICphciwgc3RydWN0IGZyYW1lICpmcmFtZSkKK3sKKwlzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnR4cDsKKwl1bnNpZ25lZCBpbnQgbGVuLCBxdWV1ZTsKKwlpbnQgY29va2llLCBlcnI7CisKKwlsZW4gPSBmcmFtZS0+bGVuOworCisJdHhwID0gKHZvaWQgKikgZnJhbWVfcHVzaChmcmFtZSwgc2l6ZW9mKHN0cnVjdCBfY2FybDkxNzBfdHhfc3VwZXJmcmFtZSkpOworCisJaWYgKHR4cC0+cy5yaXgpCisJCWdvdG8gZXJyX291dDsKKworCWVyciA9IGNhcmx1X2FsbG9jX2Rldl9tZW0oYXIsIGZyYW1lKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKKwl0eHAtPnMubGVuID0gY3B1X3RvX2xlMTYoZnJhbWUtPmxlbik7CisKKwlxdWV1ZSA9IChmcmFtZS0+cXVldWUgJSBfX0FSOTE3MF9OVU1fVFhRKTsKKworCVNFVF9WQUwoQ0FSTDkxNzBfVFhfU1VQRVJfTUlTQ19RVUVVRSwgdHhwLT5zLm1pc2MsIHF1ZXVlKTsKKworCXR4cC0+Zi5sZW5ndGggPSBsZW4gKyBGQ1NfTEVOOyAvKiArIEkoQylWX0xFTiAqLworCisJdHhwLT5mLm1hY19jb250cm9sID0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19IV19EVVJBVElPTiB8CisJCQkJCSBBUjkxNzBfVFhfTUFDX0JBQ0tPRkYpOworCXR4cC0+Zi5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihxdWV1ZSA8PCBBUjkxNzBfVFhfTUFDX1FPU19TKTsKKworCXR4cC0+Zi5waHlfY29udHJvbCA9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfTU9EX0NDSyB8IEFSOTE3MF9UWF9QSFlfQldfMjBNSFogfAorCQkJCQkgKCgxNyAqIDIpIDw8IEFSOTE3MF9UWF9QSFlfVFhfUFdSX1MpIHwKKwkJCQkJIChBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMSA8PCBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fUykgfAorCQkJCQkgKDExIDw8IEFSOTE3MF9UWF9QSFlfTUNTX1MpKTsKKworCWZyYW1lX3F1ZXVlX3RhaWwoJmFyLT50eF9zZW50X3F1ZXVlW3F1ZXVlXSwgZnJhbWUpOworCWNhcmx1c2JfdHgoYXIsIGZyYW1lKTsKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlmcmFtZV9wdWxsKGZyYW1lLCBzaXplb2Yoc3RydWN0IF9jYXJsOTE3MF90eF9zdXBlcmZyYW1lKSk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvdG9vbHMvY2FybHUvc3JjL3VzYi5jIGIvY2FybDkxNzBmdy90b29scy9jYXJsdS9zcmMvdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJjMTlhOQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvdG9vbHMvY2FybHUvc3JjL3VzYi5jCkBAIC0wLDAgKzEsNzkzIEBACisvKgorICogY2FybHUgLSB1c2Vyc3BhY2UgdGVzdGluZyB1dGlsaXR5IGZvciBhcjkxNzAgZGV2aWNlcworICoKKyAqIFVTQiBiYWNrLWVuZCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsaWJ1c2IuaCIKKworI2luY2x1ZGUgImNhcmx1LmgiCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJsaXN0LmgiCisjaW5jbHVkZSAiY21kLmgiCisKKyNkZWZpbmUgQUREX0RFVihfdmlkLCBfcGlkLCBfdnMsIF9wcykJewkJXAorCS5pZFZlbmRvciA9IF92aWQsCQkJCVwKKwkuaWRQcm9kdWN0ID0gX3BpZCwJCQkJXAorCS52ZW5kb3JfbmFtZSA9IF92cywJCQkJXAorCS5wcm9kdWN0X25hbWUgPSBfcHMJCQkJXAorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1aW50MTZfdCBpZFZlbmRvcjsKKwl1aW50MTZfdCBpZFByb2R1Y3Q7CisJY2hhciAqdmVuZG9yX25hbWU7CisJY2hhciAqcHJvZHVjdF9uYW1lOworfSBkZXZfbGlzdFtdID0geworCUFERF9ERVYoMHgwY2YzLCAweDkxNzAsICJBdGhlcm9zIiwgIjkxNzAiKSwKKwlBRERfREVWKDB4MGNmMywgMHgxMDAxLCAiQXRoZXJvcyIsICJURzEyMU4iKSwKKwlBRERfREVWKDB4MGNmMywgMHgxMDAyLCAiVFAtTGluayIsICJUTC1XTjgyMU4gdjIiKSwKKwlBRERfREVWKDB4Y2FjZSwgMHgwMzAwLCAiQ2FjZSIsICJBaXJwY2FwIE5YIiksCisJQUREX0RFVigweDA3ZDEsIDB4M2MxMCwgIkQtTGluayIsICJEV0EgMTYwIEExIiksCisJQUREX0RFVigweDA3ZDEsIDB4M2EwOSwgIkQtTGluayIsICJEV0EgMTYwIEEyIiksCisJQUREX0RFVigweDA4NDYsIDB4OTAxMCwgIk5ldGdlYXIiLCAiV05EQTMxMDAiKSwKKwlBRERfREVWKDB4MDg0NiwgMHg5MDAxLCAiTmV0Z2VhciIsICJXTjExMSB2MiIpLAorCUFERF9ERVYoMHgwYWNlLCAweDEyMjEsICJaeWRhcyIsICJaRDEyMjEiKSwKKwlBRERfREVWKDB4MDU4NiwgMHgzNDE3LCAiWnlYRUwiLCAiTldEMjcxTiIpLAorCUFERF9ERVYoMHgwY2RlLCAweDAwMjMsICJaLUNvbSIsICJVQjgxIEJHIiksCisJQUREX0RFVigweDBjZGUsIDB4MDAyNiwgIlotQ29tIiwgIlVCODIgQUJHIiksCisJQUREX0RFVigweDBjZGUsIDB4MDAyNywgIlNwaGFpcm9uIiwgIkhvbWVsaW5rIDEyMDIiKSwKKwlBRERfREVWKDB4MDgzYSwgMHhmNTIyLCAiQXJjYWR5YW4iLCAiV043NTEyIiksCisJQUREX0RFVigweDIwMTksIDB4NTMwNCwgIlBsYW5leCIsICJHV1VTMzAwIiksCisJQUREX0RFVigweDA0YmIsIDB4MDkzZiwgIklPLURhdGEiLCAiV05HRE5VUzIiKSwKKwlBRERfREVWKDB4MDU3QywgMHg4NDAxLCAiQVZNIiwgIkZSSVRaIVdMQU4gVVNCIFN0aWNrIE4iKSwKKwlBRERfREVWKDB4MDU3QywgMHg4NDAyLCAiQVZNIiwgIkZSSVRaIVdMQU4gVVNCIFN0aWNrIE4gMi40IiksCit9OworCitzdGF0aWMgbGlidXNiX2NvbnRleHQgKnVzYl9jdHg7CitzdGF0aWMgTElTVF9IRUFEKGFjdGl2ZV9kZXZfbGlzdCk7CisKK3N0YXRpYyBpbnQgY2FybHVzYl9ldmVudF90aHJlYWQodm9pZCAqX2FyKQoreworCXN0cnVjdCBjYXJsdSAqYXIgPSAodm9pZCAqKV9hcjsKKwlkYmcoImV2ZW50IHRocmVhZCBhY3RpdmUgYW5kIHBvbGxpbmcuXG4iKTsKKworCXdoaWxlICghYXItPnN0b3BfZXZlbnRfcG9sbGluZykKKwkJbGlidXNiX2hhbmRsZV9ldmVudHMoYXItPmN0eCk7CisKKwlkYmcoIj09PiBldmVudCB0aHJlYWQgZGVzaXhlZC5cbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhcmx1c2JfaXNfYXI5MTcwKHN0cnVjdCBsaWJ1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZfbGlzdCk7IGkrKykgeworCQlpZiAoKGRlc2MtPmlkVmVuZG9yID09IGRldl9saXN0W2ldLmlkVmVuZG9yKSAmJgorCQkgICAgKGRlc2MtPmlkUHJvZHVjdCA9PSBkZXZfbGlzdFtpXS5pZFByb2R1Y3QpKSB7CisJCQlkYmcoIj09IGZvdW5kIGRldmljZSBcIiVzICVzXCIgWzB4JTA0eDoweCUwNHhdXG4iLAorCQkJCWRldl9saXN0W2ldLnZlbmRvcl9uYW1lLCBkZXZfbGlzdFtpXS5wcm9kdWN0X25hbWUsCisJCQkJZGVzYy0+aWRWZW5kb3IsIGRlc2MtPmlkUHJvZHVjdCk7CisKKwkJCXJldHVybiBpOworCQl9CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgYm9vbCBjYXJsdXNiX2lzX2RldihzdHJ1Y3QgY2FybHUgKml0ZXIsCisJCQkgICAgICAgc3RydWN0IGxpYnVzYl9kZXZpY2UgKmRldikKK3sKKwlsaWJ1c2JfZGV2aWNlICpsaXN0X2RldjsKKworCWlmICghaXRlci0+ZGV2KQorCQlyZXR1cm4gZmFsc2U7CisKKwlsaXN0X2RldiA9IGxpYnVzYl9nZXRfZGV2aWNlKGl0ZXItPmRldik7CisKKwlpZiAobGlidXNiX2dldF9idXNfbnVtYmVyKGxpc3RfZGV2KSA9PSBsaWJ1c2JfZ2V0X2J1c19udW1iZXIoZGV2KSAmJgorCSAgICBsaWJ1c2JfZ2V0X2RldmljZV9hZGRyZXNzKGxpc3RfZGV2KSA9PSBsaWJ1c2JfZ2V0X2RldmljZV9hZGRyZXNzKGRldikpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitpbnQgY2FybHVzYl9zaG93X2RldmluZm8oc3RydWN0IGNhcmx1ICphcikKK3sKKwlzdHJ1Y3QgbGlidXNiX2RldmljZV9kZXNjcmlwdG9yIGRlc2M7CisJbGlidXNiX2RldmljZSAqZGV2OworCWludCBlcnI7CisKKwlkZXYgPSBsaWJ1c2JfZ2V0X2RldmljZShhci0+ZGV2KTsKKworCWVyciA9IGxpYnVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IoZGV2LCAmZGVzYyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWluZm8oIlVTQiBEZXZpY2UgSW5mb3JtYXRpb246XG4iKTsKKwlpbmZvKCJcdFVTQiBWZW5kb3JJRDolLjR4KCVzKSwgUHJvZHVjdElEOiUuNHgoJXMpXG4iLAorCSAgICAgZGV2X2xpc3RbYXItPmlkeF0uaWRWZW5kb3IsIGRldl9saXN0W2FyLT5pZHhdLnZlbmRvcl9uYW1lLAorCSAgICAgZGV2X2xpc3RbYXItPmlkeF0uaWRQcm9kdWN0LCBkZXZfbGlzdFthci0+aWR4XS5wcm9kdWN0X25hbWUpOworCWluZm8oIlx0QnVzOiVkIEFkZHJlc3M6JWRcbiIsIGxpYnVzYl9nZXRfYnVzX251bWJlcihkZXYpLAorCSAgICAgbGlidXNiX2dldF9kZXZpY2VfYWRkcmVzcyhkZXYpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhcmx1c2JfZ2V0X2RldihzdHJ1Y3QgY2FybHUgKmFyLCBib29sIHJlc2V0KQoreworCXN0cnVjdCBjYXJsdSAqaXRlcjsKKwlsaWJ1c2JfZGV2aWNlX2hhbmRsZSAqZGV2OworCWxpYnVzYl9kZXZpY2UgKipsaXN0OworCWludCByZXQsIGVyciwgaSwgaWR4ID0gLTE7CisKKwlyZXQgPSBsaWJ1c2JfZ2V0X2RldmljZV9saXN0KHVzYl9jdHgsICZsaXN0KTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInVzYiBkZXZpY2UgZW51bSBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcmV0OyBpKyspIHsKKwkJc3RydWN0IGxpYnVzYl9kZXZpY2VfZGVzY3JpcHRvciBkZXNjOworCisJCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKKwkJZXJyID0gbGlidXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcihsaXN0W2ldLCAmZGVzYyk7CisJCWlmIChlcnIgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlkeCA9IGNhcmx1c2JfaXNfYXI5MTcwKCZkZXNjKTsKKwkJaWYgKGlkeCA8IDApCisJCQljb250aW51ZTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZhY3RpdmVfZGV2X2xpc3QsIGRldl9saXN0KSB7CisJCQlpZiAoY2FybHVzYl9pc19kZXYoaXRlciwgbGlzdFtpXSkpIHsKKwkJCQllcnIgPSAtRUFMUkVBRFk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoZXJyKQorCQkJY29udGludWU7CisKKwkJZXJyID0gbGlidXNiX29wZW4obGlzdFtpXSwgJmRldik7CisJCWlmIChlcnIgIT0gMCkgeworCQkJZXJyKCJmYWlsZWQgdG8gb3BlbiBkZXZpY2UgKCVkKVxuIiwgZXJyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZXJyID0gbGlidXNiX2tlcm5lbF9kcml2ZXJfYWN0aXZlKGRldiwgMCk7CisJCXN3aXRjaCAoZXJyKSB7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyKCJmYWlsZWQgdG8gYXF1aXJlIGV4Y3VsdXNpdmUgYWNjZXNzICglZCkuXG4iLCBlcnIpOworCQkJZ290byBza2lwOworCQl9CisKKwkJaWYgKHJlc2V0KSB7CisJCQllcnIgPSBsaWJ1c2JfcmVzZXRfZGV2aWNlKGRldik7CisJCQlpZiAoZXJyICE9IDApIHsKKwkJCQllcnIoImZhaWxlZCB0byByZXNldCBkZXZpY2UgKCVkKVxuIiwgZXJyKTsKKwkJCQlnb3RvIHNraXA7CisJCQl9CisJCX0KKworCQllcnIgPSBsaWJ1c2JfY2xhaW1faW50ZXJmYWNlKGRldiwgMCk7CisJCWlmIChlcnIgPT0gMCkgeworCQkJZGJnKCI+ZGV2aWNlIGlzIG5vdyB1bmRlciBvdXIgY29udHJvbC5cbiIpOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQllcnIoImZhaWxlZCB0byBjbGFpbSBkZXZpY2UgKCVkKVxuIiwgZXJyKTsKKwkJCWdvdG8gc2tpcDsKKwkJfQorCitza2lwOgorCQlsaWJ1c2JfY2xvc2UoZGV2KTsKKwl9CisKKwlpZiAoaSAhPSByZXQpIHsKKwkJYXItPmlkeCA9IGlkeDsKKwkJYXItPmN0eCA9IHVzYl9jdHg7CisJCWFyLT5kZXYgPSBkZXY7CisJCWxpc3RfYWRkX3RhaWwoJmFyLT5kZXZfbGlzdCwgJmFjdGl2ZV9kZXZfbGlzdCk7CisJCXJldCA9IDA7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwl9CisKKwlsaWJ1c2JfZnJlZV9kZXZpY2VfbGlzdChsaXN0LCAxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjYXJsdXNiX3R4X2NiKHN0cnVjdCBjYXJsdSAqYXIsCisJCQkgICAgICBzdHJ1Y3QgZnJhbWUgKmZyYW1lKQoreworCWlmIChhci0+dHhfY2IpCisJCWFyLT50eF9jYihhciwgZnJhbWUpOworCisJYXItPnR4X29jdGV0cyArPSBmcmFtZS0+bGVuOworCisJY2FybHVfZnJlZV9mcmFtZShhciwgZnJhbWUpOworfQorCitzdGF0aWMgdm9pZCBjYXJsdXNiX3phcF9xdWV1ZXMoc3RydWN0IGNhcmx1ICphcikKK3sKKwlzdHJ1Y3QgZnJhbWUgKmZyYW1lOworCisJQlVHX09OKFNETF9tdXRleFAoYXItPnR4X3F1ZXVlX2xvY2spICE9IDApOworCXdoaWxlICghbGlzdF9lbXB0eSgmYXItPnR4X3F1ZXVlKSkgeworCQlmcmFtZSA9IGxpc3RfZmlyc3RfZW50cnkoJmFyLT50eF9xdWV1ZSwgc3RydWN0IGZyYW1lLCBkY2IubGlzdCk7CisJCWxpc3RfZGVsKCZmcmFtZS0+ZGNiLmxpc3QpOworCQljYXJsdXNiX3R4X2NiKGFyLCBmcmFtZSk7CisJfQorCVNETF9tdXRleFYoYXItPnR4X3F1ZXVlX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBjYXJsdXNiX2ZyZWVfZHJpdmVyKHN0cnVjdCBjYXJsdSAqYXIpCit7CisJaWYgKCFJU19FUlJfT1JfTlVMTChhcikpIHsKKwkJaWYgKGFyLT5ldmVudF9waXBlWzBdID4gLTEpCisJCQljbG9zZShhci0+ZXZlbnRfcGlwZVswXSk7CisKKwkJaWYgKGFyLT5ldmVudF9waXBlWzFdID4gLTEpCisJCQljbG9zZShhci0+ZXZlbnRfcGlwZVsxXSk7CisKKwkJY2FybHVzYl96YXBfcXVldWVzKGFyKTsKKwkJY2FybGZ3X3JlbGVhc2UoYXItPmZ3KTsKKwkJYXItPmZ3ID0gTlVMTDsKKworCQlpZiAoYXItPmRldikgeworCQkJbGlidXNiX3JlbGVhc2VfaW50ZXJmYWNlKGFyLT5kZXYsIDApOworCQkJbGlidXNiX2Nsb3NlKGFyLT5kZXYpOworCQkJYXItPmRldiA9IE5VTEw7CisJCX0KKwkJY2FybHVfZnJlZV9kcml2ZXIoYXIpOworCX0KK30KKworc3RhdGljIGludCBjYXJsdXNiX2luaXQoc3RydWN0IGNhcmx1ICphcikKK3sKKwlpbml0X2xpc3RfaGVhZCgmYXItPnR4X3F1ZXVlKTsKKwlhci0+dHhfcXVldWVfbG9jayA9IFNETF9DcmVhdGVNdXRleCgpOworCWFyLT5ldmVudF9waXBlWzBdID0gYXItPmV2ZW50X3BpcGVbMV0gPSAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNhcmx1ICpjYXJsdXNiX29wZW4odm9pZCkKK3sKKwlzdHJ1Y3QgY2FybHUgKnRtcDsKKwlpbnQgZXJyOworCisJdG1wID0gY2FybHVfYWxsb2NfZHJpdmVyKHNpemVvZigqdG1wKSk7CisJaWYgKHRtcCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWVyciA9IGNhcmx1c2JfaW5pdCh0bXApOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXQ7CisKKwllcnIgPSBjYXJsdXNiX2dldF9kZXYodG1wLCB0cnVlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0OworCisJcmV0dXJuIHRtcDsKKworZXJyX291dDoKKwljYXJsdXNiX2ZyZWVfZHJpdmVyKHRtcCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIHZvaWQgY2FybHVzYl9jYW5jZWxfcmluZ3Moc3RydWN0IGNhcmx1ICphcikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyLT5yeF9yaW5nKTsgaSsrKQorCQlsaWJ1c2JfY2FuY2VsX3RyYW5zZmVyKGFyLT5yeF9yaW5nW2ldKTsKKworCWxpYnVzYl9jYW5jZWxfdHJhbnNmZXIoYXItPnJ4X2ludGVycnVwdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNhcmx1c2JfZnJlZV9yaW5ncyhzdHJ1Y3QgY2FybHUgKmFyKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXItPnJ4X3JpbmcpOyBpKyspCisJCWxpYnVzYl9mcmVlX3RyYW5zZmVyKGFyLT5yeF9yaW5nW2ldKTsKKworCWxpYnVzYl9mcmVlX3RyYW5zZmVyKGFyLT5yeF9pbnRlcnJ1cHQpOworfQorCitzdGF0aWMgdm9pZCBjYXJsdXNiX2Rlc3Ryb3koc3RydWN0IGNhcmx1ICphcikKK3sKKwlpbnQgZXZlbnRfdGhyZWFkX3N0YXR1czsKKworCWRiZygiPT0+cmVsZWFzZSBkZXZpY2UuXG4iKTsKKworCWFyLT5zdG9wX2V2ZW50X3BvbGxpbmcgPSB0cnVlOworCisJY2FybHVzYl9jYW5jZWxfcmluZ3MoYXIpOworCisJU0RMX1dhaXRUaHJlYWQoYXItPmV2ZW50X3RocmVhZCwgJmV2ZW50X3RocmVhZF9zdGF0dXMpOworCisJY2FybHVzYl9mcmVlX3JpbmdzKGFyKTsKKwlsaXN0X2RlbCgmYXItPmRldl9saXN0KTsKK30KKworc3RhdGljIHZvaWQgY2FybHVzYl90eF9idWxrX2NiKHN0cnVjdCBsaWJ1c2JfdHJhbnNmZXIgKnRyYW5zZmVyKTsKKworc3RhdGljIHZvaWQgY2FybHVzYl90eF9wZW5kaW5nKHN0cnVjdCBjYXJsdSAqYXIpCit7CisJc3RydWN0IGZyYW1lICpmcmFtZTsKKwlzdHJ1Y3QgbGlidXNiX3RyYW5zZmVyICp1cmI7CisJaW50IGVycjsKKworCUJVR19PTihTRExfbXV0ZXhQKGFyLT50eF9xdWV1ZV9sb2NrKSAhPSAwKTsKKwlpZiAoYXItPnR4X3F1ZXVlX2xlbiA+PSAoQVI5MTcwX1RYX01BWF9BQ1RJVkVfVVJCUykgfHwKKwkgICAgbGlzdF9lbXB0eSgmYXItPnR4X3F1ZXVlKSkKKwkJZ290byBvdXQ7CisKKwlhci0+dHhfcXVldWVfbGVuKys7CisKKwl1cmIgPSBsaWJ1c2JfYWxsb2NfdHJhbnNmZXIoMCk7CisJaWYgKHVyYiA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCWZyYW1lID0gbGlzdF9maXJzdF9lbnRyeSgmYXItPnR4X3F1ZXVlLCBzdHJ1Y3QgZnJhbWUsIGRjYi5saXN0KTsKKwlsaXN0X2RlbCgmZnJhbWUtPmRjYi5saXN0KTsKKworCWlmIChhci0+dHhfc3RyZWFtKSB7CisJCXN0cnVjdCBhcjkxNzBfc3RyZWFtICp0eF9zdHJlYW07CisKKwkJdHhfc3RyZWFtID0gZnJhbWVfcHVzaChmcmFtZSwgc2l6ZW9mKCp0eF9zdHJlYW0pKTsKKwkJdHhfc3RyZWFtLT5sZW5ndGggPSBjcHVfdG9fbGUxNihmcmFtZS0+bGVuKTsKKwkJdHhfc3RyZWFtLT50YWcgPSBjcHVfdG9fbGUxNigweDY5N2UpOworCX0KKworCWxpYnVzYl9maWxsX2J1bGtfdHJhbnNmZXIodXJiLCBhci0+ZGV2LCBBUjkxNzBfRVBfVFgsICh1bnNpZ25lZCBjaGFyICopCisJCWZyYW1lLT5kYXRhLCBmcmFtZS0+bGVuLCBjYXJsdXNiX3R4X2J1bGtfY2IsICh2b2lkICopZnJhbWUsIDApOworCisJLyogRklYTUU6IFpFUk9fUEFDS0VUIHN1cHBvcnQhICovCisJdXJiLT5mbGFncyB8PSBMSUJVU0JfVFJBTlNGRVJfRlJFRV9UUkFOU0ZFUjsKKy8qCXVyYi0+ZmxhZ3MgfD0gTElCVVNCX1RSQU5TRkVSX1pFUk9fUEFDS0VUOyAqLworCWZyYW1lLT5kZXYgPSAodm9pZCAqKSBhcjsKKwlmcmFtZV9nZXQoZnJhbWUpOworCisJZXJyID0gbGlidXNiX3N1Ym1pdF90cmFuc2Zlcih1cmIpOworCWlmIChlcnIgIT0gMCkgeworCQllcnIoIi0+dXNiIGJ1bGsgdHggc3VibWl0IGZhaWxlZCAoJWQpLlxuIiwgZXJyKTsKKwkJbGlidXNiX2ZyZWVfdHJhbnNmZXIodXJiKTsKKwl9CisKK291dDoKKwlTRExfbXV0ZXhWKGFyLT50eF9xdWV1ZV9sb2NrKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQgY2FybHVzYl90eChzdHJ1Y3QgY2FybHUgKmFyLCBzdHJ1Y3QgZnJhbWUgKmZyYW1lKQoreworCUJVR19PTihTRExfbXV0ZXhQKGFyLT50eF9xdWV1ZV9sb2NrKSAhPSAwKTsKKworCWxpc3RfYWRkX3RhaWwoJmZyYW1lLT5kY2IubGlzdCwgJmFyLT50eF9xdWV1ZSk7CisJU0RMX211dGV4Vihhci0+dHhfcXVldWVfbG9jayk7CisKKwljYXJsdXNiX3R4X3BlbmRpbmcoYXIpOworfQorCitzdGF0aWMgdm9pZCBjYXJsdXNiX3R4X2J1bGtfY2Ioc3RydWN0IGxpYnVzYl90cmFuc2ZlciAqdHJhbnNmZXIpCit7CisJc3RydWN0IGZyYW1lICpmcmFtZSA9ICh2b2lkICopIHRyYW5zZmVyLT51c2VyX2RhdGE7CisJc3RydWN0IGNhcmx1ICphciA9ICh2b2lkICopIGZyYW1lLT5kZXY7CisKKwlCVUdfT04oU0RMX211dGV4UChhci0+dHhfcXVldWVfbG9jaykgIT0gMCk7CisJYXItPnR4X3F1ZXVlX2xlbi0tOworCVNETF9tdXRleFYoYXItPnR4X3F1ZXVlX2xvY2spOworCisJaWYgKGFyLT50eF9zdHJlYW0pCisJCWZyYW1lX3B1bGwoZnJhbWUsIDQpOworCisJY2FybHVzYl90eF9jYihhciwgZnJhbWUpOworCWNhcmx1c2JfdHhfcGVuZGluZyhhcik7Cit9CisKK3N0YXRpYyB2b2lkIGNhcmx1c2JfcnhfaW50ZXJydXB0X2NiKHN0cnVjdCBsaWJ1c2JfdHJhbnNmZXIgKnRyYW5zZmVyKQoreworCXN0cnVjdCBjYXJsdSAqYXIgPSAodm9pZCAqKSB0cmFuc2Zlci0+dXNlcl9kYXRhOworCWludCBlcnI7CisKKwlzd2l0Y2ggKHRyYW5zZmVyLT5zdGF0dXMpIHsKKwljYXNlIExJQlVTQl9UUkFOU0ZFUl9DT01QTEVURUQ6CisJCWNhcmx1X2hhbmRsZV9jb21tYW5kKGFyLCB0cmFuc2Zlci0+YnVmZmVyLCB0cmFuc2Zlci0+YWN0dWFsX2xlbmd0aCk7CisJCWJyZWFrOworCisJY2FzZSBMSUJVU0JfVFJBTlNGRVJfQ0FOQ0VMTEVEOgorCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQllcnIoIj09PnJ4X2lycSB1cmIgZGllZCAoJWQpXG4iLCB0cmFuc2Zlci0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJZXJyID0gbGlidXNiX3N1Ym1pdF90cmFuc2Zlcih0cmFuc2Zlcik7CisJaWYgKGVyciAhPSAwKQorCQllcnIoIj09PnJ4X2lycSB1cmIgcmVzdWJtaXQgZmFpbGVkICglZClcbiIsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkIGNhcmx1c2JfcnhfYnVsa19jYihzdHJ1Y3QgbGlidXNiX3RyYW5zZmVyICp0cmFuc2ZlcikKK3sKKwlzdHJ1Y3QgZnJhbWUgKmZyYW1lID0gKHZvaWQgKikgdHJhbnNmZXItPnVzZXJfZGF0YTsKKwlzdHJ1Y3QgY2FybHUgKmFyID0gKHZvaWQgKikgZnJhbWUtPmRldjsKKwlpbnQgZXJyOworCisJc3dpdGNoICh0cmFuc2Zlci0+c3RhdHVzKSB7CisJY2FzZSBMSUJVU0JfVFJBTlNGRVJfQ09NUExFVEVEOgorCQlmcmFtZV9wdXQoZnJhbWUsIHRyYW5zZmVyLT5hY3R1YWxfbGVuZ3RoKTsKKworCQljYXJsdV9yeChhciwgZnJhbWUpOworCisJCWZyYW1lX3RyaW0oZnJhbWUsIDApOworCQlicmVhazsKKworCWNhc2UgTElCVVNCX1RSQU5TRkVSX0NBTkNFTExFRDoKKwkJcmV0dXJuOworCisJZGVmYXVsdDoKKwkJZXJyKCI9PT5yeF9idWxrIHVyYiBkaWVkICglZClcbiIsIHRyYW5zZmVyLT5zdGF0dXMpOworCQlicmVhazsKKwl9CisKKwllcnIgPSBsaWJ1c2Jfc3VibWl0X3RyYW5zZmVyKHRyYW5zZmVyKTsKKwlpZiAoZXJyICE9IDApCisJCWVycigiLT5yeF9idWxrIHVyYiByZXN1Ym1pdCBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKK30KKworc3RhdGljIGludCBjYXJsdXNiX2luaXRpYWxpemVfcnhpcnEoc3RydWN0IGNhcmx1ICphcikKK3sKKwlpbnQgZXJyOworCisJYXItPnJ4X2ludGVycnVwdCA9IGxpYnVzYl9hbGxvY190cmFuc2ZlcigwKTsKKwlpZiAoYXItPnJ4X2ludGVycnVwdCA9PSBOVUxMKSB7CisJCWVycigiPT0+Y2Fubm90IGFsbG9jIHJ4IGludGVycnVwdCB1cmJcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbGlidXNiX2ZpbGxfaW50ZXJydXB0X3RyYW5zZmVyKGFyLT5yeF9pbnRlcnJ1cHQsIGFyLT5kZXYsIEFSOTE3MF9FUF9JUlEsCisJCQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopJmFyLT5pcnFfYnVmLCBzaXplb2YoYXItPmlycV9idWYpLAorCQkJCSAgICAgICBjYXJsdXNiX3J4X2ludGVycnVwdF9jYiwgKHZvaWQgKikgYXIsIDApOworCisJZXJyID0gbGlidXNiX3N1Ym1pdF90cmFuc2Zlcihhci0+cnhfaW50ZXJydXB0KTsKKwlpZiAoZXJyICE9IDApIHsKKwkJZXJyKCI9PT5mYWlsZWQgdG8gc3VibWl0IHJ4IGludGVycnVwdCAoJWQpXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRiZygicnggaW50ZXJydXB0IGlzIG5vdyBvcGVyYXRpb25hbC5cbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhcmx1c2JfaW5pdGlhbGl6ZV9yeHJpbmdzKHN0cnVjdCBjYXJsdSAqYXIpCit7CisJc3RydWN0IGZyYW1lICp0bXA7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyLT5yeF9yaW5nKTsgaSsrKSB7CisJCXRtcCA9IGZyYW1lX2FsbG9jKGFyLT5yeF9tYXgpOworCQlpZiAodG1wID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl0bXAtPmRldiA9ICh2b2lkICopIGFyOworCisJCWFyLT5yeF9yaW5nW2ldID0gbGlidXNiX2FsbG9jX3RyYW5zZmVyKDApOworCQlpZiAoYXItPnJ4X3JpbmdbaV0gPT0gTlVMTCkgeworCQkJZnJhbWVfZnJlZSh0bXApOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlsaWJ1c2JfZmlsbF9idWxrX3RyYW5zZmVyKGFyLT5yeF9yaW5nW2ldLCBhci0+ZGV2LAorCQkJQVI5MTcwX0VQX1JYLCAodW5zaWduZWQgY2hhciAqKXRtcC0+ZGF0YSwKKwkJCWFyLT5yeF9tYXgsIGNhcmx1c2JfcnhfYnVsa19jYiwgKHZvaWQgKil0bXAsIDApOworCisJCWVyciA9IGxpYnVzYl9zdWJtaXRfdHJhbnNmZXIoYXItPnJ4X3JpbmdbaV0pOworCQlpZiAoZXJyICE9IDApIHsKKwkJCWVycigiPT0+ZmFpbGVkIHRvIHN1Ym1pdCByeCBidWxkIHVyYiAoJWQpXG4iLCBlcnIpOworCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJfQorCX0KKworCWRiZygicnggcmluZyBpcyBub3cgcmVhZHkgdG8gcmVjZWl2ZS5cbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhcmx1c2JfbG9hZF9maXJtd2FyZShzdHJ1Y3QgY2FybHUgKmFyKQoreworCWludCByZXQgPSAwOworCisJZGJnKCJsb2FkaW5nIGZpcm13YXJlLi4uXG4iKTsKKworCWFyLT5mdyA9IGNhcmxmd19sb2FkKENBUkw5MTcwX0ZJUk1XQVJFX0ZJTEUpOworCWlmIChJU19FUlJfT1JfTlVMTChhci0+ZncpKQorCQlyZXR1cm4gUFRSX0VSUihhci0+ZncpOworCisJcmV0ID0gY2FybHVfZndfY2hlY2soYXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjYXJsdXNiX2Z3X2NoZWNrKGFyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FybHVzYl91cGxvYWRfZmlybXdhcmUoc3RydWN0IGNhcmx1ICphciwgYm9vbCBib290KQoreworCXVpbnQzMl90IGFkZHIgPSAweDIwMDAwMDsKKwlzaXplX3QgbGVuOworCXZvaWQgKmJ1ZjsKKwlpbnQgcmV0ID0gMDsKKworCWRiZygiaW5pdGlhdGluZyBmaXJtd2FyZSBpbWFnZSB1cGxvYWQgcHJvY2VkdXJlLlxuIik7CisKKwlidWYgPSBjYXJsZndfZ2V0X2Z3KGFyLT5mdywgJmxlbik7CisJaWYgKElTX0VSUl9PUl9OVUxMKGJ1ZikpCisJCXJldHVybiBQVFJfRVJSKGJ1Zik7CisKKwlpZiAoYXItPm1pbmlib290X3NpemUpIHsKKwkJZGJnKCJNaW5pYm9vdCBmaXJtd2FyZSBzaXplOiVkXG4iLCBhci0+bWluaWJvb3Rfc2l6ZSk7CisJCWxlbiAtPSBhci0+bWluaWJvb3Rfc2l6ZTsKKwkJYnVmICs9IGFyLT5taW5pYm9vdF9zaXplOworCX0KKworCXdoaWxlIChsZW4pIHsKKwkJaW50IGJsb2NrbGVuID0gbGVuID4gNDA5NiA/IDQwOTYgOiBsZW47CisKKwkJcmV0ID0gbGlidXNiX2NvbnRyb2xfdHJhbnNmZXIoYXItPmRldiwgMHg0MCwgMHgzMCwgYWRkciA+PiA4LCAwLCBidWYsIGJsb2NrbGVuLCAxMDAwKTsKKwkJaWYgKHJldCAhPSBibG9ja2xlbiAmJiByZXQgIT0gTElCVVNCX0VSUk9SX1RJTUVPVVQpIHsKKwkJCWVycigiPT0+ZmlybXdhcmUgdXBsb2FkIGZhaWxlZCAoJWQpXG4iLCByZXQpOworCQkJcmV0dXJuIC1FWElUX0ZBSUxVUkU7CisJCX0KKworCQlkYmcoInVwbG9hZGVkICVkIGJ5dGVzIHRvIHN0YXJ0IGFkZHJlc3MgMHglMDR4LlxuIiwgYmxvY2tsZW4sIGFkZHIpOworCisJCWJ1ZiArPSBibG9ja2xlbjsKKwkJYWRkciArPSBibG9ja2xlbjsKKwkJbGVuIC09IGJsb2NrbGVuOworCX0KKworCWlmIChib290KSB7CisJCXJldCA9IGxpYnVzYl9jb250cm9sX3RyYW5zZmVyKGFyLT5kZXYsIDB4NDAsIDB4MzEsIDAsIDAsIE5VTEwsIDAsIDUwMDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZXJyKCJ1bmFibGUgdG8gYm9vdCBmaXJtd2FyZSAoJWQpXG4iLCByZXQpOworCQkJcmV0dXJuIC1FWElUX0ZBSUxVUkU7CisJCX0KKworCQkvKiBnaXZlIHRoZSBmaXJtd2FyZSBzb21lIHRpbWUgdG8gcmVzZXQgJiByZWJvb3QgKi8KKwkJU0RMX0RlbGF5KDEwMCk7CisKKwkJLyoKKwkJICogc2luY2UgdGhlIGRldmljZSBkaWQgYSBmdWxsIHVzYiByZXNldCwKKwkJICogd2UgaGF2ZSB0byBnZXQgYSBuZXcgImRldiIuCisJCSAqLworCQlsaWJ1c2JfcmVsZWFzZV9pbnRlcmZhY2UoYXItPmRldiwgMCk7CisJCWxpYnVzYl9jbG9zZShhci0+ZGV2KTsKKwkJYXItPmRldiA9IE5VTEw7CisJCWxpc3RfZGVsKCZhci0+ZGV2X2xpc3QpOworCisJCXJldCA9IGNhcmx1c2JfZ2V0X2RldihhciwgZmFsc2UpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgY2FybHVzYl9jbWRfYXN5bmMoc3RydWN0IGNhcmx1ICphciwgc3RydWN0IGNhcmw5MTcwX2NtZCAqY21kLAorCQkgICAgICBjb25zdCBib29sIGZyZWVfYnVmKQoreworCXN0cnVjdCBsaWJ1c2JfdHJhbnNmZXIgKnVyYjsKKwlpbnQgcmV0LCBzZW5kOworCisJaWYgKGNtZC0+aGRyLmxlbiA+IChDQVJMOTE3MF9NQVhfQ01EX0xFTiAtIDQpKSB7CisJCWVycigifC0+IHRvbyBtdWNoIHBheWxvYWRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY21kLT5oZHIubGVuICUgNCkgeworCQllcnIoInwtPiBpbnZhbGlkIGNvbW1hbmQgbGVuZ3RoXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gbGlidXNiX2ludGVycnVwdF90cmFuc2Zlcihhci0+ZGV2LCBBUjkxNzBfRVBfQ01ELCAodm9pZCAqKSBjbWQsIGNtZC0+aGRyLmxlbiArIDQsICZzZW5kLCAzMik7CisJaWYgKHJldCAhPSAwKSB7CisJCWVycigiT0lEOjB4JS4yeCBmYWlsZWQgZHVlIHRvICglZCkgKCVkKS5cbiIsIGNtZC0+aGRyLmNtZCwgcmV0LCBzZW5kKTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoRVJST1IsICJDTUQ6IiwgY21kLCBjbWQtPmhkci5sZW4pOworCX0KKworb3V0OgorCWlmIChmcmVlX2J1ZikKKwkJZnJlZSgodm9pZCAqKWNtZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY2FybHVzYl9jbWQoc3RydWN0IGNhcmx1ICphciwgdWludDhfdCBvaWQsCisJCSAgICAgIHVpbnQ4X3QgKmNtZCwgc2l6ZV90IGNsZW4sCisJCSAgICAgIHVpbnQ4X3QgKnJzcCwgc2l6ZV90IHJsZW4pCit7CisJaW50IHJldCwgc2VuZDsKKworCWlmIChjbGVuID4gKENBUkw5MTcwX01BWF9DTURfTEVOIC0gNCkpIHsKKwkJZXJyKCJ8LT4gT0lEOjB4JS4yeCBoYXMgdG9vIG11Y2ggcGF5bG9hZCAoJWQgb2N0cylcbiIsIG9pZCwgKGludCljbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gU0RMX211dGV4UChhci0+cmVzcF9sb2NrKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZXJyKCJmYWlsZWQgdG8gYWNxdWlyZSByZXNwX2xvY2suXG4iKTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoRVJST1IsICJDTUQ6IiwgYXItPmNtZC5idWYsIGNsZW4pOworCQlyZXR1cm4gLTE7CisJfQorCisJYXItPmNtZC5jbWQuaGRyLmxlbiA9IGNsZW47CisJYXItPmNtZC5jbWQuaGRyLmNtZCA9IG9pZDsKKwkvKiBidWZbMl0gJiBidWZbM10gYXJlIHBhZGRpbmcgKi8KKwlpZiAoY2xlbiAmJiBjbWQgIT0gKHVpbnQ4X3QgKikoJmFyLT5jbWQuY21kLmRhdGEpKQorCQltZW1jcHkoJmFyLT5jbWQuY21kLmRhdGEsIGNtZCwgY2xlbik7CisKKwlhci0+cmVzcF9idWYgPSAodWludDhfdCAqKXJzcDsKKwlhci0+cmVzcF9sZW4gPSBybGVuOworCisJcmV0ID0gY2FybHVzYl9jbWRfYXN5bmMoYXIsICZhci0+Y21kLmNtZCwgZmFsc2UpOworCWlmIChyZXQgIT0gMCkgeworCQllcnIoIk9JRDoweCUuMnggZmFpbGVkIGR1ZSB0byAoJWQpICglZCkuXG4iLCBvaWQsIHJldCwgc2VuZCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKEVSUk9SLCAiQ01EOiIsIGFyLT5jbWQuYnVmLCBjbGVuKTsKKwkJU0RMX211dGV4Vihhci0+cmVzcF9sb2NrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBTRExfQ29uZFdhaXRUaW1lb3V0KGFyLT5yZXNwX3BlbmQsIGFyLT5yZXNwX2xvY2ssIDEwMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWVycigifC0+IE9JRDoweCUuMnggdGltZWQgb3V0ICVkLlxuIiwgb2lkLCByZXQpOworCQlhci0+cmVzcF9idWYgPSBOVUxMOworCQlhci0+cmVzcF9sZW4gPSAwOworCQlyZXQgPSAtRVRJTUVET1VUOworCX0KKworCVNETF9tdXRleFYoYXItPnJlc3BfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGNhcmx1ICpjYXJsdXNiX3Byb2JlKHZvaWQpCit7CisJc3RydWN0IGNhcmx1ICphcjsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWFyID0gY2FybHVzYl9vcGVuKCk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGFyKSkgeworCQlpZiAoSVNfRVJSKGFyKSkKKwkJCXJldCA9IFBUUl9FUlIoYXIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJcmV0ID0gY2FybHVzYl9zaG93X2RldmluZm8oYXIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX291dDsKKworCXJldCA9IGNhcmx1c2JfbG9hZF9maXJtd2FyZShhcik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfb3V0OworCisJcmV0ID0gcGlwZShhci0+ZXZlbnRfcGlwZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfb3V0OworCisJYXItPnN0b3BfZXZlbnRfcG9sbGluZyA9IGZhbHNlOworCWFyLT5ldmVudF90aHJlYWQgPSBTRExfQ3JlYXRlVGhyZWFkKGNhcmx1c2JfZXZlbnRfdGhyZWFkLCBhcik7CisKKwlyZXQgPSBjYXJsdXNiX3VwbG9hZF9maXJtd2FyZShhciwgdHJ1ZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfa2lsbDsKKworCXJldCA9IGNhcmx1c2JfaW5pdGlhbGl6ZV9yeGlycShhcik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfa2lsbDsKKworCXJldCA9IGNhcmx1c2JfaW5pdGlhbGl6ZV9yeHJpbmdzKGFyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9raWxsOworCisJcmV0ID0gY2FybHVfY21kX2VjaG8oYXIsIDB4NDQxMTBkZWUpOworCWlmIChyZXQpIHsKKwkJZXJyKCJlY2hvIHRlc3QgZmFpbGVkLi4uXG4iKTsKKwkJZ290byBlcnJfa2lsbDsKKwl9CisKKwlpbmZvKCJmaXJtd2FyZSBpcyBhY3RpdmUgYW5kIHJ1bm5pbmcuXG4iKTsKKworCWNhcmx1X2Z3X2luZm8oYXIpOworCisJcmV0dXJuIGFyOworCitlcnJfa2lsbDoKKwljYXJsdXNiX2Rlc3Ryb3koYXIpOworCitlcnJfb3V0OgorCWNhcmx1c2JfZnJlZV9kcml2ZXIoYXIpOworCWVycigidXNiIGRldmljZSByZW5kZXp2b3VzIGZhaWxlZCAoJWQpLlxuIiwgcmV0KTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCit2b2lkIGNhcmx1c2JfY2xvc2Uoc3RydWN0IGNhcmx1ICphcikKK3sKKwljYXJsdV9jbWRfcmVib290KGFyKTsKKworCWNhcmx1c2JfZGVzdHJveShhcik7CisJY2FybHVzYl9mcmVlX2RyaXZlcihhcik7Cit9CisKK2ludCBjYXJsdXNiX3ByaW50X2tub3duX2RldmljZXModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWRlYnVnX2xldmVsID0gSU5GTzsKKworCWluZm8oIj09PiBkdW1waW5nIGtub3duIGRldmljZSBsaXN0IDw9PVxuIik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2X2xpc3QpOyBpKyspIHsKKwkJaW5mbygiVmVuZG9yOlwiJS05c1wiIFByb2R1Y3Q6XCIlLTI2c1wiID0+IFVTQklEOlsweCUwNHg6MHglMDR4XVxuIiwKKwkJICAgICBkZXZfbGlzdFtpXS52ZW5kb3JfbmFtZSwgZGV2X2xpc3RbaV0ucHJvZHVjdF9uYW1lLAorCQkgICAgIGRldl9saXN0W2ldLmlkVmVuZG9yLCBkZXZfbGlzdFtpXS5pZFByb2R1Y3QpOworCX0KKwlpbmZvKCI9PT4gZW5kIG9mIGRldmljZSBsaXN0IDw9PVxuIik7CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitpbnQgdXNiX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbGlidXNiX2luaXQoJnVzYl9jdHgpOworCWlmIChyZXQgIT0gMCkgeworCQllcnIoImZhaWxlZCB0byBpbml0aWFsaXplIHVzYiBzdWJzeXN0ZW0gKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBsaWtlIGEgc2lsZW50IGNoYXR0ZXJib3ghICovCisJbGlidXNiX3NldF9kZWJ1Zyh1c2JfY3R4LCAyKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHVzYl9leGl0KHZvaWQpCit7CisJbGlidXNiX2V4aXQodXNiX2N0eCk7Cit9CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy91c2IuaCBiL2Nhcmw5MTcwZncvdG9vbHMvY2FybHUvc3JjL3VzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YzY3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL2Nhcmx1L3NyYy91c2IuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogY2FybHUgLSB1c2Vyc3BhY2UgdGVzdGluZyB1dGlsaXR5IGZvciBhcjkxNzAgZGV2aWNlcworICoKKyAqIFVTQiBiYWNrLWVuZCBBUEkgZGVjbGFyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfX0NBUkw5MTcwVVNFUl9VU0JfSAorI2RlZmluZSBfX0NBUkw5MTcwVVNFUl9VU0JfSAorCisjaW5jbHVkZSAiU0RMLmgiCisjaW5jbHVkZSAiU0RMX3RocmVhZC5oIgorI2luY2x1ZGUgImxpYnVzYi5oIgorI2luY2x1ZGUgImZyYW1lLmgiCisjaW5jbHVkZSAibGlzdC5oIgorCisjaW5jbHVkZSAiZndjbWQuaCIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlICJjYXJsdS5oIgorCisjZGVmaW5lIEFSOTE3MF9SWF9CVUxLX0JVRlMJCTE2CisjZGVmaW5lIEFSOTE3MF9SWF9CVUxLX0JVRl9TSVpFCQk4MTkyCisjZGVmaW5lIEFSOTE3MF9SWF9CVUxLX0lSUV9TSVpFCQk2NAorCisvKiBlbmRwb2ludHMgKi8KKyNkZWZpbmUgQVI5MTcwX0VQX1RYCQkJCShMSUJVU0JfRU5EUE9JTlRfT1VUIHwgQVI5MTcwX1VTQl9FUF9UWCkKKyNkZWZpbmUgQVI5MTcwX0VQX1JYCQkJCShMSUJVU0JfRU5EUE9JTlRfSU4gIHwgQVI5MTcwX1VTQl9FUF9SWCkKKyNkZWZpbmUgQVI5MTcwX0VQX0lSUQkJCQkoTElCVVNCX0VORFBPSU5UX0lOICB8IEFSOTE3MF9VU0JfRVBfSVJRKQorI2RlZmluZSBBUjkxNzBfRVBfQ01ECQkJCShMSUJVU0JfRU5EUE9JTlRfT1VUIHwgQVI5MTcwX1VTQl9FUF9DTUQpCisKKyNkZWZpbmUgQVI5MTcwX1RYX01BWF9BQ1RJVkVfVVJCUwkJOAorCisjZGVmaW5lIENBUkw5MTcwX0ZJUk1XQVJFX0ZJTEUgKENBUkxVX1BBVEggIi8uLi8uLi9jYXJsZncvY2FybDkxNzAuZnciKQorCitzdHJ1Y3QgY2FybHU7CisKK3ZvaWQgY2FybHVzYl9yZXNldF90eGVwKHN0cnVjdCBjYXJsdSAqYXIpOworCitpbnQgdXNiX2luaXQodm9pZCk7Cit2b2lkIHVzYl9leGl0KHZvaWQpOworCitzdHJ1Y3QgY2FybHUgKmNhcmx1c2JfcHJvYmUodm9pZCk7Cit2b2lkIGNhcmx1c2JfY2xvc2Uoc3RydWN0IGNhcmx1ICphcik7CisKK3ZvaWQgY2FybHVzYl90eChzdHJ1Y3QgY2FybHUgKmFyLCBzdHJ1Y3QgZnJhbWUgKmZyYW1lKTsKK2ludCBjYXJsdXNiX2Z3X2NoZWNrKHN0cnVjdCBjYXJsdSAqYXIpOworCitpbnQgY2FybHVzYl9jbWQoc3RydWN0IGNhcmx1ICpfYXIsIHVpbnQ4X3Qgb2lkLCB1aW50OF90ICpjbWQsIHNpemVfdCBjbGVuLAorCQl1aW50OF90ICpyc3AsIHNpemVfdCBybGVuKTsKKworaW50IGNhcmx1c2JfcHJpbnRfa25vd25fZGV2aWNlcyh2b2lkKTsKKworI2VuZGlmIC8qIF9fQ0FSTDkxNzBVU0VSX1VTQl9IICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL2luY2x1ZGUvZnJhbWUuaCBiL2Nhcmw5MTcwZncvdG9vbHMvaW5jbHVkZS9mcmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTNmZTMKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL2luY2x1ZGUvZnJhbWUuaApAQCAtMCwwICsxLDQwMSBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogTW9zdCBpZGVhcyBhbmQgc29tZSBjb2RlIGFyZSBjb3BpZWQgZnJvbSB0aGUgbGludXgnIGtlcm5lbHMKKyAqCWluY2x1ZGUvbGludXgvc2tidWZmLmgKKyAqLworCisjaWZuZGVmIF9fVE9PTFNfRlJBTUVfSAorI2RlZmluZSBfX1RPT0xTX0ZSQU1FX0gKKworI2luY2x1ZGUgIlNETC5oIgorI2luY2x1ZGUgImxpc3QuaCIKKworLyoqCisgKiBzdHJ1Y3QgZnJhbWVfcXVldWUgLSBza19idWZmX2hlYWQgbGlrZSBmcmFtZSBxdWV1ZQorICoKKyAqIEBsaXN0OiBwb2ludGVyIHRvIGhlYWQgYW5kIHRhaWwKKyAqIEBsb2NrOiBtdXRleCBsb2NrIGZvciBzZXJpYWxpemUgYWNjZXNzCisgKiBAbGVuOiBleGFjdCBudW1iZXIgb2YgcXVldWVkIGZyYW1lcworICovCisKK3N0cnVjdCBmcmFtZV9xdWV1ZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCVNETF9tdXRleCAqbG9jazsKKwlzaXplX3QgbGVuOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZnJhbWUgLSBmcmFtZSBkYXRhIHN0cnVjdHVyZSAobGlrZSBza19idWZmKQorICoKKyAqIEBsaXN0OiBzdG9yYWdlIGZvciBkb3VibGUtbGlua2VkICZzdHJ1Y3QgZnJhbWVfcXVldWUgbGlzdAorICogQGRldjogcG9pbnRlciB0byBwcml2YXRlIGRldmljZS9kcml2ZXIgc3RydWN0dXJlCisgKiBAdGltZXN0YW1wOiBzcGFjZSBmb3IgdGhlIGN1cnJlbnQgdGltZXN0YW1wCisgKiBAY2I6IHByaXZhdGUgZHJpdmVyIGRhdGEKKyAqIEBkY2I6IG1vcmUgcmVzZXJ2ZWQgc3BhY2UgZm9yIGxvdy1sZXZlbCAvIGJhY2tlbmQgZHJpdmVyCisgKiBAcXVldWU6IHNlbGVjdGVkIGZyYW1lIHF1ZXVlIC8gcHJpb3JpdHkKKyAqIEByZWY6IHJlZmVyZW5jZSBjb3VudGVyCisgKiBAYWxsb2NlZDogbWF4aW11bSBhdmFpbGFibGUgc3BhY2UKKyAqIEB0b3RhbF9sZW46IGN1cnJlbnRseSBjb25zdW1lZCBhbmQgcmVzZXJ2ZWQgbWVtb3J5CisgKiBAbGVuOiBjdXJyZW50IGZyYW1lIGxlbmd0aAorICogQGhlYWQ6IHBvaW50cyB0byB0aGUgYnVmZmVyIGhlYWQKKyAqIEBkYXRhOiBjdXJyZW50IGZyYW1lIGRhdGEgcG9pbnRlcgorICogQHRhaWw6IGZyYW1lIGRhdGEgdGFpbCBwb2ludGVyCisgKiBAcGF5bG9hZDogZnJhbWUgZGF0YSBzdG9yYWdlIGNvbnRhaW5lcgorICovCisKK3N0cnVjdCBmcmFtZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXZvaWQgKmRldjsKKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKKwl1aW50OF90IGNiWzY0XTsKKwl1bmlvbiB7CisJCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwkJdWludDhfdCByYXdfZGF0YVszMl07CisJfSBkY2I7CisKKwl1bnNpZ25lZCBpbnQgcXVldWU7CisJdW5zaWduZWQgaW50IHJlZjsKKwl1bnNpZ25lZCBpbnQgYWxsb2NlZDsKKwl1bnNpZ25lZCBpbnQgdG90YWxfbGVuOworCXVuc2lnbmVkIGludCBsZW47CisJdWludDhfdCAqaGVhZDsKKwl1aW50OF90ICpkYXRhOworCXVpbnQ4X3QgKnRhaWw7CisKKwkvKiBwYXlsb2FkIG11c3QgYmUgdGhlIGxhc3QgZW50cnkgKi8KKwl1aW50OF90IHBheWxvYWRbMF07Cit9OworCisvKioKKyAqIGZyYW1lX3B1dCAtIGFwcGVuZCBtb3JlIGRhdGEgdG8gJnN0cnVjdCBmcmFtZQorICoKKyAqIEFsbG9jYXRlIEBzaXplIGJ5dGVzIGZyb20gJnN0cnVjdCBmcmFtZSB0YWlsIGFuZAorICogcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHJlcXVlc3RlZCBsb2NhdGlvbi4KKyAqCisgKiBAZnJhbWU6IGZyYW1lIHRvIGFsdGVyCisgKiBAc2l6ZTogZXh0cmEgc2l6ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmZyYW1lX3B1dChzdHJ1Y3QgZnJhbWUgKmZyYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl2b2lkICp0bXA7CisKKwlCVUdfT04oZnJhbWUtPnRvdGFsX2xlbiArIHNpemUgPiBmcmFtZS0+YWxsb2NlZCk7CisKKwlmcmFtZS0+bGVuICs9IHNpemU7CisJZnJhbWUtPnRvdGFsX2xlbiArPSBzaXplOworCisJdG1wID0gKHZvaWQgKikgZnJhbWUtPnRhaWw7CisJZnJhbWUtPnRhaWwgKz0gc2l6ZTsKKworCUJVR19PTihmcmFtZS0+dGFpbCA+IChmcmFtZS0+cGF5bG9hZCArIGZyYW1lLT5hbGxvY2VkKSk7CisKKwlyZXR1cm4gdG1wOworfQorCisvKioKKyAqIGZyYW1lX3B1c2ggLSBhbGxvY2F0ZSBoZWFkCisgKgorICogcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZSBhcmVhIGF0ICZzdHJ1Y3QgZnJhbWUgaGVhZC4KKyAqCisgKiBAZnJhbWU6IGZyYW1lIHRvIG1vZGlmeQorICogQHNpemU6IHJlcXVlc3RlZCBleHRyYSBzaXplCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqZnJhbWVfcHVzaChzdHJ1Y3QgZnJhbWUgKmZyYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlmcmFtZS0+bGVuICs9IHNpemU7CisJZnJhbWUtPmRhdGEgLT0gc2l6ZTsKKworCUJVR19PTihmcmFtZS0+ZGF0YSA8IGZyYW1lLT5wYXlsb2FkKTsKKwlyZXR1cm4gZnJhbWUtPmRhdGE7Cit9CisKKy8qKgorICogZnJhbWVfZ2V0IC0gcmVmZXJlbmNlIGZyYW1lIGJ1ZmZlcgorICoKKyAqIGdyYWIgYSByZWZlcmVuY2UgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLCBpbiBvcmRlciB0bworICogcHJldmVudCBpdCBmcm9tIGJlaW5nIGZyZWVkIHByZW1hdHVyZWx5IGJ5IGEgZGlmZmVyZW50IHVzZXIuCisgKgorICogQGZyYW1lOiBmcmFtZSBwb2ludGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZyYW1lICpmcmFtZV9nZXQoc3RydWN0IGZyYW1lICpmcmFtZSkKK3sKKwlmcmFtZS0+cmVmKys7CisJcmV0dXJuIGZyYW1lOworfQorCisvKioKKyAqIGZyYW1lX3B1bGwgLSByZW1vdmUgc3BhY2UgZnJvbSAmc3RydWN0IGZyYW1lIGhlYWQKKyAqCisgKiBEb2VzIHRoZSBvcHBvc2l0ZSBvZiBmcmFtZV9wdXNoKCkgYW5kIHJlbW92ZXMgZnJlZWQtdXAKKyAqIHNwYWNlIGF0IHRoZSBmcmFtZXMncyBoZWFkLgorICoKKyAqIEBmcmFtZTogcG9pbnRlciB0byBmcmFtZSBzdHJ1Y3R1cmUKKyAqIEBzaXplOiBieXRlcyB0byByZW1vdmUgZnJvbSBoZWFkCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqZnJhbWVfcHVsbChzdHJ1Y3QgZnJhbWUgKmZyYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlCVUdfT04oZnJhbWUtPmxlbiA8IHNpemUpOworCisJZnJhbWUtPmxlbiAtPSBzaXplOworCWZyYW1lLT50b3RhbF9sZW4gLT0gc2l6ZTsKKwlmcmFtZS0+ZGF0YSArPSBzaXplOworCisJcmV0dXJuIGZyYW1lLT5kYXRhOworfQorCisvKioKKyAqIGZyYW1lX3Jlc2VydmUgLSByZXNlcnZlIGZyYW1lIGhlYWRyb29tCisgKgorICogUmVzZXJ2ZSBhIGNlcnRhaW4gYW1vdW50IG9mIHNwYWNlIHRvIGFsbG93IGhlYWRyb29tIG1hbmlwdWxhdGlvbnMKKyAqIGluIHRoZSBmdXR1cmUuCisgKgorICogQGZyYW1lOiBmcmFtZSB0byBhZGp1c3QKKyAqIEBzaXplOiBieXRlcyB0byByZXNlcnZlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmFtZV9yZXNlcnZlKHN0cnVjdCBmcmFtZSAqZnJhbWUsIHVuc2lnbmVkIGludCBzaXplKQoreworCUJVR19PTihmcmFtZS0+dG90YWxfbGVuICsgc2l6ZSA+IGZyYW1lLT5hbGxvY2VkKTsKKwlCVUdfT04oZnJhbWUtPmxlbiAhPSAwKTsKKworCWZyYW1lLT50b3RhbF9sZW4gKz0gc2l6ZTsKKwlmcmFtZS0+ZGF0YSArPSBzaXplOworCWZyYW1lLT50YWlsICs9IHNpemU7Cit9CisKKy8qKgorICogZnJhbWVfdHJpbSAtIHNldCBmcmFtZSBsZW5ndGgKKyAqCisgKiBjdXQgdGhlIGZyYW1lIHRvIEBzaXplIGxlbmd0aC4KKyAqCisgKiBAZnJhbWU6IGZyYW1lIHRvIGJlIHRyaW1tZWQKKyAqIEBzaXplOiBuZXcgbGVuZ3RoCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmFtZV90cmltKHN0cnVjdCBmcmFtZSAqZnJhbWUsIHVuc2lnbmVkIGludCBzaXplKQoreworCUJVR19PTihzaXplID4gZnJhbWUtPnRvdGFsX2xlbik7CisKKwlmcmFtZS0+bGVuID0gc2l6ZTsKKwlmcmFtZS0+dG90YWxfbGVuID0gc2l6ZTsKKwlmcmFtZS0+ZGF0YSA9IGZyYW1lLT5oZWFkOworCWZyYW1lLT50YWlsID0gZnJhbWUtPmhlYWQgKyBzaXplOworfQorCisvKioKKyAqIGZyYW1lX2FsbG9jIC0gYWxsb2MgYW5kIGluaXRpYWxpemUgbmV3IGZyYW1lCisgKgorICogcmV0dXJucyBhIG5ld2x5IGNyZWF0ZWQgJnN0cnVjdCBmcmFtZSBvYmplY3QuCisgKgorICogQHNpemU6IG1heGltdW0gZnJhbWUgc2l6ZSBvZiB0aGUgbmV3IGZyYW1lCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZyYW1lICpmcmFtZV9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZnJhbWUgKnRtcDsKKworCXRtcCA9IG1hbGxvYyhzaXplICsgc2l6ZW9mKCp0bXApKTsKKwlpZiAodG1wICE9IE5VTEwpIHsKKwkJbWVtc2V0KHRtcCwgMCwgc2l6ZW9mKCp0bXApKTsKKwkJaW5pdF9saXN0X2hlYWQoJnRtcC0+bGlzdCk7CisJCWluaXRfbGlzdF9oZWFkKCZ0bXAtPmRjYi5saXN0KTsKKwkJdG1wLT5sZW4gPSAwOworCQl0bXAtPnRvdGFsX2xlbiA9IDA7CisJCXRtcC0+YWxsb2NlZCA9IHNpemU7CisKKwkJdG1wLT5oZWFkID0gdG1wLT5wYXlsb2FkOworCQl0bXAtPmRhdGEgPSB0bXAtPnBheWxvYWQ7CisJCXRtcC0+dGFpbCA9IHRtcC0+cGF5bG9hZDsKKwkJdG1wLT5yZWYgPSAxOworCX0KKwlyZXR1cm4gdG1wOworfQorCisvKioKKyAqIGZyYW1lX2ZyZWUgLSB1bnJlZiBhbmQgZnJlZSBmcmFtZQorICoKKyAqIFVucmVmZXJlbmNlIGZyYW1lIGFuZCBmcmVlIGl0IHVwLCBpZiBhbGwgdXNlcnMgYXJlIGdvbmUuCisgKgorICogQGZyYW1lOiBmcmFtZSB0byBiZSBmcmVlZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnJhbWVfZnJlZShzdHJ1Y3QgZnJhbWUgKmZyYW1lKQoreworCWlmICghLS1mcmFtZS0+cmVmKQorCQlmcmVlKGZyYW1lKTsKK30KKworLyoqCisgKiBGUkFNRV9XQUxLIC0gTUFDUk8gd2Fsa2VyCisgKgorICogV2Fsa3Mgb3ZlciBhbGwgcXVldWVkIGVsZW1lbnRzIGluICZzdHJ1Y3QgZnJhbWVfcXVldWUKKyAqCisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGlzIHZ1bG5lcmFibGUgaW4gY29uY3VycmVudCBhY2Nlc3MKKyAqCSBzY2VuYXJpb3Mgd2l0aG91dCBwcm9wZXIgbG9ja2luZy4KKyAqCisgKiBAcG9zOiBjdXJyZW50IHBvc2l0aW9uIGluc2lkZSB0aGUgcXVldWUKKyAqIEBoZWFkOiAmc3RydWN0IGZyYW1lX3F1ZXVlIGhlYWQKKyAqLworI2RlZmluZSBGUkFNRV9XQUxLKHBvcywgaGVhZCkJCQkJCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KChwb3MpLCAmKGhlYWQpLT5saXN0LCBsaXN0KQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19mcmFtZV9xdWV1ZV9pbml0KHN0cnVjdCBmcmFtZV9xdWV1ZSAqcXVldWUpCit7CisJcXVldWUtPmxlbiA9IDA7CisJaW5pdF9saXN0X2hlYWQoJnF1ZXVlLT5saXN0KTsKK30KKworLyoqCisgKiBmcmFtZV9xdWV1ZV9pbml0IC0gaW5pdGlhbGl6ZSBmcmFtZV9xdWV1ZQorICoKKyAqIEluaXRpYWxpemUgdGhlIGdpdmVuICZzdHJ1Y3QgZnJhbWVfcXVldWUgb2JqZWN0LgorICoKKyAqIEBxdWV1ZTogZnJhbWVfcXVldWUgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZyYW1lX3F1ZXVlX2luaXQoc3RydWN0IGZyYW1lX3F1ZXVlICpxdWV1ZSkKK3sKKwlxdWV1ZS0+bG9jayA9IFNETF9DcmVhdGVNdXRleCgpOworCV9fZnJhbWVfcXVldWVfaW5pdChxdWV1ZSk7Cit9CisKKy8qKgorICogZnJhbWVfcXVldWVfbGVuIC0gcmV0dXJucyBudW1iZXIgb2YgcXVldWUgZWxlbWVudHMKKyAqCisgKiBAcXVldWU6IGZyYW1lX3F1ZXVlIG9iamVjdAorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmcmFtZV9xdWV1ZV9sZW4oc3RydWN0IGZyYW1lX3F1ZXVlICpxdWV1ZSkKK3sKKwlyZXR1cm4gcXVldWUtPmxlbjsKK30KKworLyoqCisgKiBmcmFtZV9xdWV1ZV9lbXB0eSAtIHJldHVybnMgJVRSVUUgd2hlbmV2ZXIgcXVldWUgaXMgZW1wdHkKKyAqCisgKiBAcXVldWU6IGZyYW1lX3F1ZXVlIG9iamVjdAorICovCitzdGF0aWMgaW5saW5lIGJvb2wgZnJhbWVfcXVldWVfZW1wdHkoc3RydWN0IGZyYW1lX3F1ZXVlICpxdWV1ZSkKK3sKKwlyZXR1cm4gbGlzdF9lbXB0eSgmcXVldWUtPmxpc3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19mcmFtZV9xdWV1ZV9oZWFkKHN0cnVjdCBmcmFtZV9xdWV1ZSAqcXVldWUsIHN0cnVjdCBmcmFtZSAqZnJhbWUpCit7CisJbGlzdF9hZGRfaGVhZCgmZnJhbWUtPmxpc3QsICZxdWV1ZS0+bGlzdCk7CisJcXVldWUtPmxlbisrOworfQorCisvKioKKyAqIGZyYW1lX3F1ZXVlX2hlYWQgLSBxdWV1ZSBhIGZyYW1lIGF0IHRoZSBxdWV1ZXMgaGVhZAorICogQHF1ZXVlOiBxdWV1ZSB0byB1c2UKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZyYW1lX3F1ZXVlX2hlYWQoc3RydWN0IGZyYW1lX3F1ZXVlICpxdWV1ZSwgc3RydWN0IGZyYW1lICpmcmFtZSkKK3sKKwlCVUdfT04oKFNETF9tdXRleFAocXVldWUtPmxvY2spICE9IDApKTsKKwlfX2ZyYW1lX3F1ZXVlX2hlYWQocXVldWUsIGZyYW1lKTsKKwlTRExfbXV0ZXhWKHF1ZXVlLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZnJhbWVfcXVldWVfdGFpbChzdHJ1Y3QgZnJhbWVfcXVldWUgKnF1ZXVlLCBzdHJ1Y3QgZnJhbWUgKmZyYW1lKQoreworCWxpc3RfYWRkX3RhaWwoJmZyYW1lLT5saXN0LCAmcXVldWUtPmxpc3QpOworCXF1ZXVlLT5sZW4rKzsKK30KKworLyoqCisgKiBmcmFtZV9xdWV1ZV9oZWFkIC0gcXVldWUgYSBmcmFtZSBhdCB0aGUgcXVldWVzIHRhaWwKKyAqIEBxdWV1ZTogcXVldWUgdG8gdXNlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmFtZV9xdWV1ZV90YWlsKHN0cnVjdCBmcmFtZV9xdWV1ZSAqcXVldWUsIHN0cnVjdCBmcmFtZSAqZnJhbWUpCit7CisJQlVHX09OKChTRExfbXV0ZXhQKHF1ZXVlLT5sb2NrKSAhPSAwKSk7CisJX19mcmFtZV9xdWV1ZV90YWlsKHF1ZXVlLCBmcmFtZSk7CisJU0RMX211dGV4VihxdWV1ZS0+bG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZyYW1lX3VubGluayhzdHJ1Y3QgZnJhbWVfcXVldWUgKnF1ZXVlLCBzdHJ1Y3QgZnJhbWUgKmZyYW1lKQoreworCWxpc3RfZGVsKCZmcmFtZS0+bGlzdCk7CisJcXVldWUtPmxlbi0tOworfQorCisvKioKKyAqIGZyYW1lX3F1ZXVlX3VubGluayAtIHJlbW92ZSBhIGZyYW1lIGZyb20gdGhlIHF1ZXVlCisgKiBAcXVldWU6IHF1ZXVlIHRvIHVzZQorICogQGZyYW1lOiBmcmFtZSB0byByZW1vdmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZyYW1lX3VubGluayhzdHJ1Y3QgZnJhbWVfcXVldWUgKnF1ZXVlLCBzdHJ1Y3QgZnJhbWUgKmZyYW1lKQoreworCUJVR19PTigoU0RMX211dGV4UChxdWV1ZS0+bG9jaykgIT0gMCkpOworCV9fZnJhbWVfdW5saW5rKHF1ZXVlLCBmcmFtZSk7CisJU0RMX211dGV4VihxdWV1ZS0+bG9jayk7Cit9CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZnJhbWUgKl9fZnJhbWVfZGVxdWV1ZShzdHJ1Y3QgZnJhbWVfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBmcmFtZSAqdG1wID0gTlVMTDsKKworCWlmICghZnJhbWVfcXVldWVfZW1wdHkocXVldWUpKSB7CisJCXRtcCA9IGxpc3RfZW50cnkocXVldWUtPmxpc3QubmV4dCwgc3RydWN0IGZyYW1lLCBsaXN0KTsKKwkJX19mcmFtZV91bmxpbmsocXVldWUsIHRtcCk7CisJfQorCisJcmV0dXJuIHRtcDsKK30KKworLyoqCisgKiBmcmFtZV9kZXF1ZXVlIC0gcmVtb3ZlIGZyYW1lIGZyb20gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlCisgKgorICogQHF1ZXVlOiBxdWV1ZSB0byBkZXF1ZXVlIGZyb20KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZnJhbWUgKmZyYW1lX2RlcXVldWUoc3RydWN0IGZyYW1lX3F1ZXVlICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgZnJhbWUgKnRtcDsKKworCUJVR19PTigoU0RMX211dGV4UChxdWV1ZS0+bG9jaykgIT0gMCkpOworCisJdG1wID0gX19mcmFtZV9kZXF1ZXVlKHF1ZXVlKTsKKwlTRExfbXV0ZXhWKHF1ZXVlLT5sb2NrKTsKKwlyZXR1cm4gdG1wOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19mcmFtZV9xdWV1ZV9wdXJnZShzdHJ1Y3QgZnJhbWVfcXVldWUgKnF1ZXVlKQoreworCXdoaWxlIChsaXN0X2VtcHR5KCZxdWV1ZS0+bGlzdCkgPT0gZmFsc2UpCisJCWZyYW1lX2ZyZWUoX19mcmFtZV9kZXF1ZXVlKHF1ZXVlKSk7Cit9CisKKy8qKgorICogZnJhbWVfcXVldWVfcHVyZ2UgLSBmcmVlcyBhbGwgcXVldWVkICZzdHJ1Y3QgZnJhbWUgb2JqZWN0cworICoKKyAqIEBxdWV1ZTogcXVldWUgdG8gYmUgZnJlZWQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZyYW1lX3F1ZXVlX3B1cmdlKHN0cnVjdCBmcmFtZV9xdWV1ZSAqcXVldWUpCit7CisJQlVHX09OKChTRExfbXV0ZXhQKHF1ZXVlLT5sb2NrKSAhPSAwKSk7CisJX19mcmFtZV9xdWV1ZV9wdXJnZShxdWV1ZSk7CisJU0RMX211dGV4VihxdWV1ZS0+bG9jayk7Cit9CisKKy8qKgorICogZnJhbWVfcXVldWVfa2lsbCAtIGRlc3Ryb3lzIGZyYW1lX3F1ZXVlIG9iamVjdAorICoKKyAqIERlc3Ryb3kgb2JqZWN0IGFuZCBmcmVlcyB1cCBhbGwgcmVtYWluaW5nIGVsZW1lbnRzCisgKgorICogQHF1ZXVlOiBmcmFtZV9xdWV1ZSB2aWN0aW0KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZyYW1lX3F1ZXVlX2tpbGwoc3RydWN0IGZyYW1lX3F1ZXVlICpxdWV1ZSkKK3sKKwlTRExfRGVzdHJveU11dGV4KHF1ZXVlLT5sb2NrKTsKKwlfX2ZyYW1lX3F1ZXVlX3B1cmdlKHF1ZXVlKTsKK30KKworI2VuZGlmIC8qIF9fVE9PTFNfRlJBTUVfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy90b29scy9pbmNsdWRlL2xpc3QuaCBiL2Nhcmw5MTcwZncvdG9vbHMvaW5jbHVkZS9saXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5MWQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvdG9vbHMvaW5jbHVkZS9saXN0LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIGxpc3QuaCBMaXN0IFV0aWxpdGllcworICoKKyAqCVRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqCUxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLjEKKyAqCW9mIHRoZSBMaWNlbnNlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA2IFRob21hcyBHcmFmIDx0Z3JhZkBzdXVnLmNoPgorICovCisKKyNpZm5kZWYgX19MSVNUX0gKKyNkZWZpbmUgX19MSVNUX0gKKworc3RydWN0IGxpc3RfaGVhZCB7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2OworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKm9iaiwKKwkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LAorCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpCit7CisJcHJldi0+bmV4dCA9IG9iajsKKwlvYmotPnByZXYgPSBwcmV2OworCW5leHQtPnByZXYgPSBvYmo7CisJb2JqLT5uZXh0ID0gbmV4dDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkX3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqb2JqLAorCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWxpc3RfYWRkKG9iaiwgaGVhZC0+cHJldiwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2FkZF9oZWFkKHN0cnVjdCBsaXN0X2hlYWQgKm9iaiwKKwkJCQkgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlsaXN0X2FkZChvYmosIGhlYWQsIGhlYWQtPm5leHQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqb2JqKQoreworCW9iai0+cHJldi0+bmV4dCA9IG9iai0+bmV4dDsKKwlvYmotPm5leHQtPnByZXYgPSBvYmotPnByZXY7CisJb2JqLT5uZXh0ID0gb2JqLT5wcmV2ID0gb2JqOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9yZXBsYWNlKHN0cnVjdCBsaXN0X2hlYWQgKm9sZCwKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpvYmopCit7CisJb2JqLT5uZXh0ID0gb2xkLT5uZXh0OworCW9iai0+bmV4dC0+cHJldiA9IG9iajsKKwlvYmotPnByZXYgPSBvbGQtPnByZXY7CisJb2JqLT5wcmV2LT5uZXh0ID0gb2JqOworfQorCitzdGF0aWMgaW5saW5lIGludCBsaXN0X2VtcHR5KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuIGhlYWQtPm5leHQgPT0gaGVhZDsKK30KKworI2RlZmluZSBsaXN0X2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBcCisJY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKQorCisjZGVmaW5lIGxpc3RfZmlyc3RfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIFwKKwljb250YWluZXJfb2YoKHB0ciktPm5leHQsIHR5cGUsIG1lbWJlcikKKworI2RlZmluZSBsaXN0X2F0X3RhaWwocG9zLCBoZWFkLCBtZW1iZXIpIFwKKwkoKHBvcyktPm1lbWJlci5uZXh0ID09IChoZWFkKSkKKworI2RlZmluZSBsaXN0X2F0X2hlYWQocG9zLCBoZWFkLCBtZW1iZXIpIFwKKwkoKHBvcyktPm1lbWJlci5wcmV2ID09IChoZWFkKSkKKworI2RlZmluZSBMSVNUX0hFQUQobmFtZSkgXAorCXN0cnVjdCBsaXN0X2hlYWQgbmFtZSA9IHsgJihuYW1lKSwgJihuYW1lKSB9CisKKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG1lbWJlcikJCQkJXAorCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAorCSAgICAgJihwb3MpLT5tZW1iZXIgIT0gKGhlYWQpOwkJCQkJXAorCSAgICAgKHBvcykgPSBsaXN0X2VudHJ5KChwb3MpLT5tZW1iZXIubmV4dCwgdHlwZW9mKCoocG9zKSksIG1lbWJlcikpCisKKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgaGVhZCwgbWVtYmVyKQkJCVwKKwlmb3IgKHBvcyA9IGxpc3RfZW50cnkoKGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlciksCVwKKwkgICAgIG4gPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAorCSAgICAgJihwb3MpLT5tZW1iZXIgIT0gKGhlYWQpOwkJCQkJXAorCSAgICAgcG9zID0gbiwgbiA9IGxpc3RfZW50cnkobi0+bWVtYmVyLm5leHQsIHR5cGVvZigqbiksIG1lbWJlcikpCisKKyNkZWZpbmUgaW5pdF9saXN0X2hlYWQoaGVhZCkgXAorCWRvIHsgKGhlYWQpLT5uZXh0ID0gKGhlYWQpOyAoaGVhZCktPnByZXYgPSAoaGVhZCk7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX0xJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy90b29scy9saWIvQ01ha2VMaXN0cy50eHQgYi9jYXJsOTE3MGZ3L3Rvb2xzL2xpYi9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDEzOWU2Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy90b29scy9saWIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw3IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44KQorCitwcm9qZWN0KGxpYmNhcmxmdykKKworc2V0KGNhcmxmd19zcmMgY2FybGZ3LmMpCisKK2FkZF9saWJyYXJ5KCBjYXJsZncgU1RBVElDICR7Y2FybGZ3X3NyY30pCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL2xpYi9jYXJsZncuYyBiL2Nhcmw5MTcwZncvdG9vbHMvbGliL2Nhcmxmdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjFhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL2xpYi9jYXJsZncuYwpAQCAtMCwwICsxLDYzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwLTIwMTEgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJvci5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNhcmxmdy5oIgorCitzdHJ1Y3QgY2FybGZ3X2ZpbGUgeworCWNoYXIgKm5hbWU7CisJc2l6ZV90IGxlbjsKKwljaGFyICpkYXRhOworfTsKKworc3RydWN0IGNhcmxmdyB7CisJc3RydWN0IGNhcmxmd19maWxlIGZ3OworCXN0cnVjdCBjYXJsZndfZmlsZSBoZHI7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRlc2NfbGlzdDsKKwl1bnNpZ25lZCBpbnQgZGVzY19saXN0X2VudHJpZXMsCisJCSAgICAgZGVzY19saXN0X2xlbjsKK307CisKKyNkZWZpbmUgY2FybGZ3X3dhbGtfZGVzY3MoaXRlciwgZncpCQkJCQlcCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCAmZnctPmRlc2NfbGlzdCwgaC5saXN0KQorCitzdHJ1Y3QgY2FybGZ3X2xpc3RfZW50cnlfaGVhZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IGNhcmxmd19saXN0X2VudHJ5IHsKKwlzdHJ1Y3QgY2FybGZ3X2xpc3RfZW50cnlfaGVhZCBoOworCXVuaW9uIHsKKwkJc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkIGhlYWQ7CisJCXVpbnQzMl90IGRhdGFbMF07CisJCWNoYXIgdGV4dFswXTsKKwl9OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FybGZ3X2xpc3RfZW50cnkgKmNhcmxmd19kZXNjX3RvX2VudHJ5KHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqaGVhZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBjYXJsZndfbGlzdF9lbnRyeSwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkICpjYXJsZndfZW50cnlfdG9fZGVzYyhzdHJ1Y3QgY2FybGZ3X2xpc3RfZW50cnkgKmVudHJ5KQoreworCXJldHVybiAmZW50cnktPmhlYWQ7Cit9CisKK3N0YXRpYyB2b2lkIGNhcmxmd19lbnRyeV91bmxpbmsoc3RydWN0IGNhcmxmdyAqZncsCisJc3RydWN0IGNhcmxmd19saXN0X2VudHJ5ICplbnRyeSkKK3sKKwlmdy0+ZGVzY19saXN0X2VudHJpZXMtLTsKKwlmdy0+ZGVzY19saXN0X2xlbiAtPSBsZTE2X3RvX2NwdShlbnRyeS0+aGVhZC5sZW5ndGgpOworCWxpc3RfZGVsKCZlbnRyeS0+aC5saXN0KTsKK30KKworc3RhdGljIHZvaWQgY2FybGZ3X2VudHJ5X2RlbChzdHJ1Y3QgY2FybGZ3ICpmdywKKwlzdHJ1Y3QgY2FybGZ3X2xpc3RfZW50cnkgKmVudHJ5KQoreworCWNhcmxmd19lbnRyeV91bmxpbmsoZncsIGVudHJ5KTsKKwlmcmVlKGVudHJ5KTsKK30KKworc3RhdGljIHN0cnVjdCBjYXJsZndfbGlzdF9lbnRyeSAqY2FybGZ3X2ZpbmRfZW50cnkoc3RydWN0IGNhcmxmdyAqZncsCisJCQkJCQkgICBjb25zdCB1aW50OF90IGRlc2NpZFs0XSwKKwkJCQkJCSAgIHVuc2lnbmVkIGludCBsZW4sCisJCQkJCQkgICB1aW50OF90IGNvbXBhdGlibGVfcmV2aXNpb24pCit7CisJc3RydWN0IGNhcmxmd19saXN0X2VudHJ5ICppdGVyOworCisJY2FybGZ3X3dhbGtfZGVzY3MoaXRlciwgZncpIHsKKwkJaWYgKGNhcmw5MTcwZndfZGVzY19jbXAoJml0ZXItPmhlYWQsIGRlc2NpZCwgbGVuLAorCQkJCQkgY29tcGF0aWJsZV9yZXZpc2lvbikpCisJCQlyZXR1cm4gKHZvaWQgKilpdGVyOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGNhcmxmd19saXN0X2VudHJ5ICpfX2Nhcmxmd19lbnRyeV9hZGRfcHJlcGFyZShzdHJ1Y3QgY2FybGZ3ICpmdywKKwljb25zdCBzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKmRlc2MpCit7CisJc3RydWN0IGNhcmxmd19saXN0X2VudHJ5ICp0bXA7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWxlbiA9IGxlMTZfdG9fY3B1KGRlc2MtPmxlbmd0aCk7CisKKwlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJdG1wID0gbWFsbG9jKHNpemVvZigqdG1wKSArIGxlbik7CisJaWYgKCF0bXApCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZnctPmRlc2NfbGlzdF9lbnRyaWVzKys7CisJZnctPmRlc2NfbGlzdF9sZW4gKz0gbGVuOworCisJbWVtY3B5KHRtcC0+ZGF0YSwgZGVzYywgbGVuKTsKKwlyZXR1cm4gdG1wOworfQorCitzdGF0aWMgdm9pZCBfX2Nhcmxmd19yZWxlYXNlKHN0cnVjdCBjYXJsZndfZmlsZSAqZikKK3sKKwlmLT5sZW4gPSAwOworCWlmIChmLT5uYW1lKQorCQlmcmVlKGYtPm5hbWUpOworCWYtPm5hbWUgPSBOVUxMOworCisJaWYgKGYtPmRhdGEpCisJCWZyZWUoZi0+ZGF0YSk7CisJZi0+ZGF0YSA9IE5VTEw7Cit9CisKK3ZvaWQgY2FybGZ3X3JlbGVhc2Uoc3RydWN0IGNhcmxmdyAqZncpCit7CisJc3RydWN0IGNhcmxmd19saXN0X2VudHJ5ICplbnRyeTsKKworCWlmICghSVNfRVJSX09SX05VTEwoZncpKSB7CisJCXdoaWxlICghbGlzdF9lbXB0eSgmZnctPmRlc2NfbGlzdCkpIHsKKwkJCWVudHJ5ID0gbGlzdF9lbnRyeShmdy0+ZGVzY19saXN0Lm5leHQsCisJCQkJCSAgIHN0cnVjdCBjYXJsZndfbGlzdF9lbnRyeSwgaC5saXN0KTsKKwkJCWNhcmxmd19lbnRyeV9kZWwoZncsIGVudHJ5KTsKKwkJfQorCisJCV9fY2FybGZ3X3JlbGVhc2UoJmZ3LT5mdyk7CisJCV9fY2FybGZ3X3JlbGVhc2UoJmZ3LT5oZHIpOworCQlmcmVlKGZ3KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19jYXJsZndfbG9hZChzdHJ1Y3QgY2FybGZ3X2ZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJc3RydWN0IHN0YXQgZmlsZV9zdGF0OworCUZJTEUgKmZoOworCWludCBlcnI7CisKKwlmaCA9IGZvcGVuKG5hbWUsIG1vZGUpOworCWlmIChmaCA9PSBOVUxMKQorCQlyZXR1cm4gZXJybm8gPyAtZXJybm8gOiAtMTsKKworCWVyciA9IGZzdGF0KGZpbGVubyhmaCksICZmaWxlX3N0YXQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnJubyA/IC1lcnJubyA6IC0xOworCisJZmlsZS0+bGVuID0gZmlsZV9zdGF0LnN0X3NpemU7CisJZmlsZS0+ZGF0YSA9IG1hbGxvYyhmaWxlLT5sZW4pOworCWlmIChmaWxlLT5kYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gZnJlYWQoZmlsZS0+ZGF0YSwgZmlsZS0+bGVuLCAxLCBmaCk7CisJaWYgKGVyciAhPSAxKQorCQlyZXR1cm4gLWZlcnJvcihmaCk7CisKKwlmaWxlLT5uYW1lID0gc3RyZHVwKG5hbWUpOworCWZjbG9zZShmaCk7CisKKwlpZiAoIWZpbGUtPm5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpfX2Nhcmxmd19maW5kX2Rlc2Moc3RydWN0IGNhcmxmd19maWxlICpmaWxlLAorCQkJCXVpbnQ4X3QgZGVzY2lkWzRdLAorCQkJCXVuc2lnbmVkIGludCBsZW4sCisJCQkJdWludDhfdCBjb21wYXRpYmxlX3JldmlzaW9uKQoreworCWludCBzY2FuID0gZmlsZS0+bGVuLCBmb3VuZCA9IDA7CisJc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkICp0bXAgPSBOVUxMOworCisJd2hpbGUgKHNjYW4gPj0gMCkgeworCQlpZiAoZmlsZS0+ZGF0YVtzY2FuXSA9PSBkZXNjaWRbQ0FSTDkxNzBGV19NQUdJQ19TSVpFIC0gZm91bmQgLSAxXSkKKwkJCWZvdW5kKys7CisJCWVsc2UKKwkJCWZvdW5kID0gMDsKKworCQlpZiAoZm91bmQgPT0gQ0FSTDkxNzBGV19NQUdJQ19TSVpFKQorCQkJYnJlYWs7CisKKwkJc2Nhbi0tOworCX0KKworCWlmIChmb3VuZCA9PSBDQVJMOTE3MEZXX01BR0lDX1NJWkUpIHsKKwkJdG1wID0gKHZvaWQgKikgJmZpbGUtPmRhdGFbc2Nhbl07CisKKwkJaWYgKCFDSEVDS19IRFJfVkVSU0lPTih0bXAsIGNvbXBhdGlibGVfcmV2aXNpb24pICYmCisJCSAgICAobGUxNl90b19jcHUodG1wLT5sZW5ndGgpID49IGxlbikpCisJCQlyZXR1cm4gdG1wOworCX0KKworCXJldHVybiBOVUxMOworfQorCit2b2lkICpjYXJsZndfZmluZF9kZXNjKHN0cnVjdCBjYXJsZncgKmZ3LAorCQkgICAgICAgY29uc3QgdWludDhfdCBkZXNjaWRbNF0sCisJCSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuLAorCQkgICAgICAgY29uc3QgdWludDhfdCBjb21wYXRpYmxlX3JldmlzaW9uKQoreworCXN0cnVjdCBjYXJsZndfbGlzdF9lbnRyeSAqdG1wOworCisJdG1wID0gY2FybGZ3X2ZpbmRfZW50cnkoZncsIGRlc2NpZCwgbGVuLCBjb21wYXRpYmxlX3JldmlzaW9uKTsKKworCXJldHVybiB0bXAgPyBjYXJsZndfZW50cnlfdG9fZGVzYyh0bXApIDogTlVMTDsKK30KKworaW50IGNhcmxmd19kZXNjX2FkZF90YWlsKHN0cnVjdCBjYXJsZncgKmZ3LAorCWNvbnN0IHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqZGVzYykKK3sKKwlzdHJ1Y3QgY2FybGZ3X2xpc3RfZW50cnkgKnRtcDsKKworCXRtcCA9IF9fY2FybGZ3X2VudHJ5X2FkZF9wcmVwYXJlKGZ3LCBkZXNjKTsKKwlpZiAoSVNfRVJSKHRtcCkpCisJCXJldHVybiBQVFJfRVJSKHRtcCk7CisKKwlsaXN0X2FkZF90YWlsKCZ0bXAtPmgubGlzdCwgJmZ3LT5kZXNjX2xpc3QpOworCXJldHVybiAwOworfQorCitpbnQgY2FybGZ3X2Rlc2NfYWRkKHN0cnVjdCBjYXJsZncgKmZ3LAorCQkgICAgY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkICpkZXNjLAorCQkgICAgc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkICpwcmV2LAorCQkgICAgc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkICpuZXh0KQoreworCXN0cnVjdCBjYXJsZndfbGlzdF9lbnRyeSAqdG1wOworCisJdG1wID0gX19jYXJsZndfZW50cnlfYWRkX3ByZXBhcmUoZncsIGRlc2MpOworCWlmIChJU19FUlIodG1wKSkKKwkJcmV0dXJuIFBUUl9FUlIodG1wKTsKKworCWxpc3RfYWRkKCZ0bXAtPmgubGlzdCwgJigoY2FybGZ3X2Rlc2NfdG9fZW50cnkocHJldikpLT5oLmxpc3QpLAorCQkgJigoY2FybGZ3X2Rlc2NfdG9fZW50cnkobmV4dCkpLT5oLmxpc3QpKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNhcmxmd19kZXNjX2FkZF9iZWZvcmUoc3RydWN0IGNhcmxmdyAqZncsCisJCQkgICBjb25zdCBzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKmRlc2MsCisJCQkgICBzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKnBvcykKK3sKKwlzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKnByZXY7CisJc3RydWN0IGNhcmxmd19saXN0X2VudHJ5ICpwcmV2X2VudHJ5OworCisJcHJldl9lbnRyeSA9IGNhcmxmd19kZXNjX3RvX2VudHJ5KHBvcyk7CisKKwlwcmV2ID0gY2FybGZ3X2VudHJ5X3RvX2Rlc2MoKHN0cnVjdCBjYXJsZndfbGlzdF9lbnRyeSAqKSBwcmV2X2VudHJ5LT5oLmxpc3QucHJldik7CisKKwlyZXR1cm4gY2FybGZ3X2Rlc2NfYWRkKGZ3LCBkZXNjLCBwcmV2LCBwb3MpOworfQorCit2b2lkIGNhcmxmd19kZXNjX3VubGluayhzdHJ1Y3QgY2FybGZ3ICpmdywKKwlzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKmRlc2MpCit7CisJY2FybGZ3X2VudHJ5X3VubGluayhmdywgY2FybGZ3X2Rlc2NfdG9fZW50cnkoZGVzYykpOworfQorCit2b2lkIGNhcmxmd19kZXNjX2RlbChzdHJ1Y3QgY2FybGZ3ICpmdywKKwlzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKmRlc2MpCit7CisJY2FybGZ3X2VudHJ5X2RlbChmdywgY2FybGZ3X2Rlc2NfdG9fZW50cnkoZGVzYykpOworfQorCit2b2lkICpjYXJsZndfZGVzY19tb2RfbGVuKHN0cnVjdCBjYXJsZncgKmZ3IF9fdW51c2VkLAorCXN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqZGVzYywgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgY2FybGZ3X2xpc3RfZW50cnkgKm9iaiwgdG1wOworCWludCBuZXdfbGVuID0gbGUxNl90b19jcHUoZGVzYy0+bGVuZ3RoKSArIGxlbjsKKworCWlmIChuZXdfbGVuIDwgKGludClzaXplb2YoKmRlc2MpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWlmIChuZXdfbGVuID4gQ0FSTDkxNzBGV19ERVNDX01BWF9MRU5HVEgpCisJCXJldHVybiBFUlJfUFRSKC1FMkJJRyk7CisKKwlvYmogPSBjYXJsZndfZGVzY190b19lbnRyeShkZXNjKTsKKworCW1lbWNweSgmdG1wLCBvYmosIHNpemVvZih0bXApKTsKKwlvYmogPSByZWFsbG9jKG9iaiwgbmV3X2xlbiArIHNpemVvZihzdHJ1Y3QgY2FybGZ3X2xpc3RfZW50cnlfaGVhZCkpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlsaXN0X3JlcGxhY2UoJnRtcC5oLmxpc3QsICZvYmotPmgubGlzdCk7CisKKwlkZXNjID0gY2FybGZ3X2VudHJ5X3RvX2Rlc2Mob2JqKTsKKwlkZXNjLT5sZW5ndGggPSBsZTE2X3RvX2NwdShuZXdfbGVuKTsKKwlmdy0+ZGVzY19saXN0X2xlbiArPSBsZW47CisKKwlyZXR1cm4gZGVzYzsKK30KKwordm9pZCAqY2FybGZ3X2Rlc2NfbmV4dChzdHJ1Y3QgY2FybGZ3ICpmdywKKwkJICAgICAgIHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqcG9zKQoreworCXN0cnVjdCBjYXJsZndfbGlzdF9lbnRyeSAqZW50cnk7CisKKwlpZiAoIXBvcykKKwkJZW50cnkgPSAoc3RydWN0IGNhcmxmd19saXN0X2VudHJ5ICopICZmdy0+ZGVzY19saXN0OworCWVsc2UKKwkJZW50cnkgPSBjYXJsZndfZGVzY190b19lbnRyeShwb3MpOworCisJaWYgKGxpc3RfYXRfdGFpbChlbnRyeSwgJmZ3LT5kZXNjX2xpc3QsIGgubGlzdCkpCisJCXJldHVybiBOVUxMOworCisJZW50cnkgPSAoc3RydWN0IGNhcmxmd19saXN0X2VudHJ5ICopIGVudHJ5LT5oLmxpc3QubmV4dDsKKworCXJldHVybiBjYXJsZndfZW50cnlfdG9fZGVzYyhlbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgY2FybGZ3X3BhcnNlX2Rlc2NzKHN0cnVjdCBjYXJsZncgKmZ3LAorCQkJICAgICAgc3RydWN0IGNhcmw5MTcwZndfb3R1c19kZXNjICpvdHVzX2Rlc2MpCit7CisJY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkICppdGVyID0gTlVMTDsKKwlpbnQgZXJyOworCisJY2FybDkxNzBmd19mb3JfZWFjaF9oZHIoaXRlciwgJm90dXNfZGVzYy0+aGVhZCkgeworCQllcnIgPSBjYXJsZndfZGVzY19hZGRfdGFpbChmdywgaXRlcik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwkvKiBMQVNUIGlzIGFkZGVkIGF1dG9tYXRpY2FsbHkgYnkgY2FybGZ3X3N0b3JlICovCisKKwlyZXR1cm4gZXJyOworfQorCisjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisjZGVmaW5lIENSQ1BPTFlfTEUgMHhlZGI4ODMyMAorCisvKiBjb3BpZWQgZnJvbSB0aGUgbGludXgga2VybmVsICAqLworc3RhdGljIHVpbnQzMl90IGNyYzMyX2xlKHVpbnQzMl90IGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaTsKKwl3aGlsZSAobGVuLS0pIHsKKwkJY3JjIF49ICpwKys7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQljcmMgPSAoY3JjID4+IDEpIF4gKChjcmMgJiAxKSA/IENSQ1BPTFlfTEUgOiAwKTsKKwl9CisJcmV0dXJuIGNyYzsKK30KKyNlbHNlCisjZXJyb3IgInRoaXMgdG9vbCBkb2VzIG5vdCB3b3JrIHdpdGggYSBiaWcgZW5kaWFuIGhvc3QgeWV0ISIKKyNlbmRpZgorCitzdGF0aWMgaW50IGNhcmxmd19jaGVja19jcmMzMnMoc3RydWN0IGNhcmxmdyAqZncpCit7CisJc3RydWN0IGNhcmw5MTcwZndfY2hrX2Rlc2MgKmNoa19kZXNjOworCXN0cnVjdCBjYXJsZndfbGlzdF9lbnRyeSAqaXRlcjsKKwl1bnNpZ25lZCBpbnQgZWxlbjsKKwl1aW50MzJfdCBjcmMzMjsKKworCWNoa19kZXNjID0gY2FybGZ3X2ZpbmRfZGVzYyhmdywgKHVpbnQ4X3QgKikgQ0hLX01BR0lDLAorCQkJCSAgICBzaXplb2YoKmNoa19kZXNjKSwKKwkJCQkgICAgQ0FSTDkxNzBGV19DSEtfREVTQ19DVVJfVkVSKTsKKwlpZiAoIWNoa19kZXNjKQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwljcmMzMiA9IGNyYzMyX2xlKH4wLCAodm9pZCAqKSBmdy0+ZncuZGF0YSwgZnctPmZ3Lmxlbik7CisJaWYgKGNyYzMyICE9IGxlMzJfdG9fY3B1KGNoa19kZXNjLT5md19jcmMzMikpCisJCXJldHVybiAtRUlOVkFMOworCisJY2FybGZ3X3dhbGtfZGVzY3MoaXRlciwgZncpIHsKKwkJZWxlbiA9IGxlMTZfdG9fY3B1KGl0ZXItPmhlYWQubGVuZ3RoKTsKKworCQlpZiAoY2FybDkxNzBmd19kZXNjX2NtcCgmaXRlci0+aGVhZCwgKHVpbnQ4X3QgKikgQ0hLX01BR0lDLAorCQkJCQlzaXplb2YoKmNoa19kZXNjKSwKKwkJCQkJQ0FSTDkxNzBGV19DSEtfREVTQ19DVVJfVkVSKSkKKwkJCWNvbnRpbnVlOworCisJCWNyYzMyID0gY3JjMzJfbGUoY3JjMzIsICh2b2lkICopICZpdGVyLT5oZWFkLCBlbGVuKTsKKwl9CisKKwlpZiAoY3JjMzIgIT0gbGUzMl90b19jcHUoY2hrX2Rlc2MtPmhkcl9jcmMzMikpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjYXJsZncgKmNhcmxmd19sb2FkKGNvbnN0IGNoYXIgKmJhc2VuYW1lKQoreworCWNoYXIgZmlsZW5hbWVbMjU2XTsKKwlzdHJ1Y3QgY2FybGZ3ICpmdzsKKwlzdHJ1Y3QgY2FybDkxNzBmd19vdHVzX2Rlc2MgKm90dXNfZGVzYzsKKwlzdHJ1Y3QgY2FybDkxNzBmd19sYXN0X2Rlc2MgKmxhc3RfZGVzYzsKKwlzdHJ1Y3QgY2FybGZ3X2ZpbGUgKmhkcl9maWxlOworCXVuc2lnbmVkIGxvbmcgZmluLCBkaWZmLCBvZmYsIHJlbTsKKwlpbnQgZXJyOworCisJZncgPSBjYWxsb2MoMSwgc2l6ZW9mKCpmdykpOworCWlmICghZncpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaW5pdF9saXN0X2hlYWQoJmZ3LT5kZXNjX2xpc3QpOworCisJZXJyID0gX19jYXJsZndfbG9hZCgmZnctPmZ3LCBiYXNlbmFtZSwgInIiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKKwlpZiAoZnctPmhkci5uYW1lKQorCQloZHJfZmlsZSA9ICZmdy0+aGRyOworCWVsc2UKKwkJaGRyX2ZpbGUgPSAmZnctPmZ3OworCisJb3R1c19kZXNjID0gX19jYXJsZndfZmluZF9kZXNjKGhkcl9maWxlLCAodWludDhfdCAqKSBPVFVTX01BR0lDLAorCQkJCSAgICAgICBzaXplb2YoKm90dXNfZGVzYyksCisJCQkJICAgICAgIENBUkw5MTcwRldfT1RVU19ERVNDX0NVUl9WRVIpOworCWxhc3RfZGVzYyA9IF9fY2FybGZ3X2ZpbmRfZGVzYyhoZHJfZmlsZSwgKHVpbnQ4X3QgKikgTEFTVF9NQUdJQywKKwkJCQkgICAgICAgc2l6ZW9mKCpsYXN0X2Rlc2MpLAorCQkJCSAgICAgICBDQVJMOTE3MEZXX0xBU1RfREVTQ19DVVJfVkVSKTsKKworCWlmICghb3R1c19kZXNjIHx8ICFsYXN0X2Rlc2MgfHwKKwkgICAgKHVuc2lnbmVkIGxvbmcpIG90dXNfZGVzYyA+ICh1bnNpZ25lZCBsb25nKSBsYXN0X2Rlc2MpIHsKKwkJZXJyID0gLUVOT0RBVEE7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwllcnIgPSBjYXJsZndfcGFyc2VfZGVzY3MoZncsIG90dXNfZGVzYyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJZmluID0gKHVuc2lnbmVkIGxvbmcpbGFzdF9kZXNjICsgc2l6ZW9mKCpsYXN0X2Rlc2MpOworCWRpZmYgPSBmaW4gLSAodW5zaWduZWQgbG9uZylvdHVzX2Rlc2M7CisJcmVtID0gaGRyX2ZpbGUtPmxlbiAtIChmaW4gLSAodW5zaWduZWQgbG9uZykgaGRyX2ZpbGUtPmRhdGEpOworCisJaWYgKHJlbSkgeworCQlvZmYgPSAodW5zaWduZWQgbG9uZylvdHVzX2Rlc2MgLSAodW5zaWduZWQgbG9uZyloZHJfZmlsZS0+ZGF0YTsKKwkJbWVtbW92ZSgmaGRyX2ZpbGUtPmRhdGFbb2ZmXSwKKwkJCSgodWludDhfdCAqKWxhc3RfZGVzYykgKyBzaXplb2YoKmxhc3RfZGVzYyksIHJlbSk7CisJfQorCisJaGRyX2ZpbGUtPmxlbiAtPSBkaWZmOworCWhkcl9maWxlLT5kYXRhID0gcmVhbGxvYyhoZHJfZmlsZS0+ZGF0YSwgaGRyX2ZpbGUtPmxlbik7CisJaWYgKCFoZHJfZmlsZS0+ZGF0YSAmJiBoZHJfZmlsZS0+bGVuKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwllcnIgPSBjYXJsZndfY2hlY2tfY3JjMzJzKGZ3KTsKKwlpZiAoZXJyICYmIGVyciAhPSAtRU5PREFUQSkKKwkJZ290byBlcnJfb3V0OworCisJcmV0dXJuIGZ3OworCitlcnJfb3V0OgorCWNhcmxmd19yZWxlYXNlKGZ3KTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgaW50IGNhcmxmd19hcHBseV9jaGVja3N1bXMoc3RydWN0IGNhcmxmdyAqZncpCit7CisJc3RydWN0IGNhcmxmd19saXN0X2VudHJ5ICppdGVyOworCXN0cnVjdCBjYXJsOTE3MGZ3X2Noa19kZXNjIHRtcCA9IHsKKwkJQ0FSTDkxNzBGV19GSUxMX0RFU0MoQ0hLX01BR0lDLCBzaXplb2YodG1wKSwKKwkJCQkgICAgICBDQVJMOTE3MEZXX0NIS19ERVNDX01JTl9WRVIsCisJCQkJICAgICAgQ0FSTDkxNzBGV19DSEtfREVTQ19DVVJfVkVSKSB9OworCXN0cnVjdCBjYXJsOTE3MGZ3X2Noa19kZXNjICpjaGtfZGVzYyA9IE5VTEw7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IGxlbiA9IDAsIGVsZW4sIG1heF9sZW47CisJdWludDMyX3QgY3JjMzI7CisKKwljaGtfZGVzYyA9IGNhcmxmd19maW5kX2Rlc2MoZncsICh1aW50OF90ICopIENIS19NQUdJQywKKwkJCQkgICAgc2l6ZW9mKCpjaGtfZGVzYyksCisJCQkJICAgIENBUkw5MTcwRldfQ0hLX0RFU0NfQ1VSX1ZFUik7CisJaWYgKGNoa19kZXNjKSB7CisJCWNhcmxmd19kZXNjX2RlbChmdywgJmNoa19kZXNjLT5oZWFkKTsKKwkJY2hrX2Rlc2MgPSBOVUxMOworCX0KKworCW1heF9sZW4gPSBmdy0+ZGVzY19saXN0X2xlbjsKKworCWNyYzMyID0gY3JjMzJfbGUofjAsICh2b2lkICopIGZ3LT5mdy5kYXRhLCBmdy0+ZncubGVuKTsKKwl0bXAuZndfY3JjMzIgPSBjcHVfdG9fbGUzMihjcmMzMik7CisKKwkvKgorCSAqIE5PVEU6CisJICoKKwkgKiBUaGUgZGVzY3JpcHRvciBjaGVja3N1bSBpcyBzZWVkZWQgd2l0aCB0aGUgZmlybXdhcmUncyBjcmMzMi4KKwkgKiBUaGlzIG5lYXQgdHJpY2sgZW5zdXJlcyB0aGF0IHRoZSBkcml2ZXIgY2FuIGNoZWNrIHdoZW5ldmVyCisJICogZGVzY3JpcHRvciBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBmaXJtd2FyZSwgb3Igbm90LgorCSAqLworCisJY2FybGZ3X3dhbGtfZGVzY3MoaXRlciwgZncpIHsKKwkJZWxlbiA9IGxlMTZfdG9fY3B1KGl0ZXItPmhlYWQubGVuZ3RoKTsKKworCQlpZiAobWF4X2xlbiA8IGxlbiArIGVsZW4pCisJCQlyZXR1cm4gLUVNU0dTSVpFOworCisJCWNyYzMyID0gY3JjMzJfbGUoY3JjMzIsICh2b2lkICopICZpdGVyLT5oZWFkLCBlbGVuKTsKKwkJbGVuICs9IGVsZW47CisJfQorCisJdG1wLmhkcl9jcmMzMiA9IGNwdV90b19sZTMyKGNyYzMyKTsKKworCWVyciA9IGNhcmxmd19kZXNjX2FkZF90YWlsKGZ3LCAmdG1wLmhlYWQpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IGNhcmxmd19zdG9yZShzdHJ1Y3QgY2FybGZ3ICpmdykKK3sKKwlzdHJ1Y3QgY2FybDkxNzBmd19sYXN0X2Rlc2MgbGFzdF9kZXNjID0geworCQlDQVJMOTE3MEZXX0ZJTExfREVTQyhMQVNUX01BR0lDLCBzaXplb2YobGFzdF9kZXNjKSwKKwkJCUNBUkw5MTcwRldfTEFTVF9ERVNDX01JTl9WRVIsCisJCQlDQVJMOTE3MEZXX0xBU1RfREVTQ19DVVJfVkVSKSB9OworCisJc3RydWN0IGNhcmxmd19saXN0X2VudHJ5ICppdGVyOworCUZJTEUgKmZoOworCWludCBlcnIsIGVsZW47CisKKwllcnIgPSBjYXJsZndfYXBwbHlfY2hlY2tzdW1zKGZ3KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZmggPSBmb3Blbihmdy0+ZncubmFtZSwgInciKTsKKwlpZiAoIWZoKQorCQlyZXR1cm4gLWVycm5vOworCisJZXJyID0gZndyaXRlKGZ3LT5mdy5kYXRhLCBmdy0+ZncubGVuLCAxLCBmaCk7CisJaWYgKGVyciAhPSAxKSB7CisJCWVyciA9IC1lcnJubzsKKwkJZ290byBjbG9zZV9vdXQ7CisJfQorCisJaWYgKGZ3LT5oZHIubmFtZSkgeworCQlmY2xvc2UoZmgpOworCisJCWZoID0gZm9wZW4oZnctPmhkci5uYW1lLCAidyIpOworCX0KKworCWNhcmxmd193YWxrX2Rlc2NzKGl0ZXIsIGZ3KSB7CisJCWVsZW4gPSBsZTE2X3RvX2NwdShpdGVyLT5oZWFkLmxlbmd0aCk7CisKKwkJaWYgKGVsZW4gPiBDQVJMOTE3MEZXX0RFU0NfTUFYX0xFTkdUSCkgeworCQkJZXJyID0gLUUyQklHOworCQkJZ290byBjbG9zZV9vdXQ7CisJCX0KKworCQllcnIgPSBmd3JpdGUoaXRlci0+ZGF0YSwgZWxlbiwgMSwgZmgpOworCQlpZiAoZXJyICE9IDEpIHsKKwkJCWVyciA9IC1mZXJyb3IoZmgpOworCQkJZ290byBjbG9zZV9vdXQ7CisJCX0KKwl9CisKKwllcnIgPSBmd3JpdGUoJmxhc3RfZGVzYywgc2l6ZW9mKGxhc3RfZGVzYyksIDEsIGZoKTsKKwlpZiAoZXJyICE9IDEpIHsKKwkJZXJyID0gLWZlcnJvcihmaCk7CisJCWdvdG8gY2xvc2Vfb3V0OworCX0KKworCWVyciA9IDA7CisKK2Nsb3NlX291dDoKKwlmY2xvc2UoZmgpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgKmNhcmxmd19tb2RfdGFpbHJvb20oc3RydWN0IGNhcmxmdyAqZncsIHNzaXplX3QgbGVuKQoreworCXNpemVfdCBuZXdfbGVuOworCXZvaWQgKmJ1ZjsKKworCW5ld19sZW4gPSBmdy0+ZncubGVuICsgbGVuOworCisJaWYgKCFjYXJsOTE3MGZ3X3NpemVfY2hlY2sobmV3X2xlbikpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJYnVmID0gcmVhbGxvYyhmdy0+ZncuZGF0YSwgbmV3X2xlbik7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWZ3LT5mdy5sZW4gPSBuZXdfbGVuOworCWZ3LT5mdy5kYXRhID0gYnVmOworCXJldHVybiAmZnctPmZ3LmRhdGFbbmV3X2xlbiAtIGxlbl07Cit9CisKK3ZvaWQgKmNhcmxmd19tb2RfaGVhZHJvb20oc3RydWN0IGNhcmxmdyAqZncsIHNzaXplX3QgbGVuKQoreworCXNpemVfdCBuZXdfbGVuOworCXZvaWQgKnB0cjsKKworCW5ld19sZW4gPSBmdy0+ZncubGVuICsgbGVuOworCWlmICghY2FybDkxNzBmd19zaXplX2NoZWNrKG5ld19sZW4pKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWlmIChsZW4gPCAwKQorCQltZW1tb3ZlKGZ3LT5mdy5kYXRhLCAmZnctPmZ3LmRhdGFbbGVuXSwgbmV3X2xlbik7CisKKwlwdHIgPSBjYXJsZndfbW9kX3RhaWxyb29tKGZ3LCBsZW4pOworCWlmIChJU19FUlJfT1JfTlVMTChwdHIpKQorCQlyZXR1cm4gcHRyOworCisJaWYgKGxlbiA+IDApCisJCW1lbW1vdmUoJmZ3LT5mdy5kYXRhW2xlbl0sICZmdy0+ZncuZGF0YVswXSwgbmV3X2xlbiAtIGxlbik7CisKKwlyZXR1cm4gZnctPmZ3LmRhdGE7Cit9CisKK3ZvaWQgKmNhcmxmd19nZXRfZncoc3RydWN0IGNhcmxmdyAqZncsIHNpemVfdCAqbGVuKQoreworCSpsZW4gPSBmdy0+ZncubGVuOworCXJldHVybiBmdy0+ZncuZGF0YTsKK30KKwordW5zaWduZWQgaW50IGNhcmxmd19nZXRfZGVzY3NfbnVtKHN0cnVjdCBjYXJsZncgKmZ3KQoreworCXJldHVybiBmdy0+ZGVzY19saXN0X2VudHJpZXM7Cit9CisKK3Vuc2lnbmVkIGludCBjYXJsZndfZ2V0X2Rlc2NzX3NpemUoc3RydWN0IGNhcmxmdyAqZncpCit7CisJcmV0dXJuIGZ3LT5kZXNjX2xpc3RfbGVuOworfQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy90b29scy9saWIvY2FybGZ3LmggYi9jYXJsOTE3MGZ3L3Rvb2xzL2xpYi9jYXJsZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTcyMmM5Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy90b29scy9saWIvY2FybGZ3LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwLTIwMTEgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQ0FSTEZXX0gKKyNkZWZpbmUgX19DQVJMRldfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlICJjb21waWxlci5oIgorI2luY2x1ZGUgImZ3ZGVzYy5oIgorI2luY2x1ZGUgImxpc3QuaCIKKworc3RydWN0IGNhcmxmdzsKKwordm9pZCBjYXJsZndfcmVsZWFzZShzdHJ1Y3QgY2FybGZ3ICpmdyk7CitzdHJ1Y3QgY2FybGZ3ICpjYXJsZndfbG9hZChjb25zdCBjaGFyICpiYXNlbmFtZSk7CitpbnQgY2FybGZ3X3N0b3JlKHN0cnVjdCBjYXJsZncgKmZ3KTsKK3ZvaWQgKmNhcmxmd19maW5kX2Rlc2Moc3RydWN0IGNhcmxmdyAqZncsCisJY29uc3QgdWludDhfdCBkZXNjaWRbNF0sIGNvbnN0IHVuc2lnbmVkIGludCBsZW4sCisJY29uc3QgdWludDhfdCBjb21wYXRpYmxlX3JldmlzaW9uKTsKKworaW50IGNhcmxmd19kZXNjX2FkZF90YWlsKHN0cnVjdCBjYXJsZncgKmZ3LAorCQkJIGNvbnN0IHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqZGVzYyk7CisKK2ludCBjYXJsZndfZGVzY19hZGQoc3RydWN0IGNhcmxmdyAqZncsCisJCSAgICBjb25zdCBzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKmRlc2MsCisJCSAgICBzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKnByZXYsCisJCSAgICBzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKm5leHQpOworCit2b2lkICpjYXJsZndfZGVzY19tb2RfbGVuKHN0cnVjdCBjYXJsZncgKmZ3LAorCQkJICBzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKmRlc2MsCisJCQkgIHNpemVfdCBsZW4pOworCitpbnQgY2FybGZ3X2Rlc2NfYWRkX2JlZm9yZShzdHJ1Y3QgY2FybGZ3ICpmdywKKwkJCSAgIGNvbnN0IHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqZGVzYywKKwkJCSAgIHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqcG9zKTsKKwordm9pZCBjYXJsZndfZGVzY191bmxpbmsoc3RydWN0IGNhcmxmdyAqZncsCisJCQlzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKmRlc2MpOworCit2b2lkIGNhcmxmd19kZXNjX2RlbChzdHJ1Y3QgY2FybGZ3ICpmdywKKwkJICAgICBzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKmVudHJ5KTsKKwordm9pZCAqY2FybGZ3X2Rlc2NfbmV4dChzdHJ1Y3QgY2FybGZ3ICpmdywKKwkJICAgICAgIHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqcG9zKTsKKwordm9pZCAqY2FybGZ3X21vZF90YWlscm9vbShzdHJ1Y3QgY2FybGZ3ICpmdywgc3NpemVfdCBsZW4pOwordm9pZCAqY2FybGZ3X21vZF9oZWFkcm9vbShzdHJ1Y3QgY2FybGZ3ICpmdywgc3NpemVfdCBsZW4pOworCit2b2lkICpjYXJsZndfZ2V0X2Z3KHN0cnVjdCBjYXJsZncgKmZ3LCBzaXplX3QgKmxlbik7CisKK3Vuc2lnbmVkIGludCBjYXJsZndfZ2V0X2Rlc2NzX251bShzdHJ1Y3QgY2FybGZ3ICpmdyk7Cit1bnNpZ25lZCBpbnQgY2FybGZ3X2dldF9kZXNjc19zaXplKHN0cnVjdCBjYXJsZncgKmZ3KTsKKyNlbmRpZiAvKiBfX0NBUkxGV19IICovCmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL3NyYy9DTWFrZUxpc3RzLnR4dCBiL2Nhcmw5MTcwZncvdG9vbHMvc3JjL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZDMxZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL3NyYy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44KQorCitwcm9qZWN0KHRvb2xzKQorCithZGRfY3VzdG9tX3RhcmdldCh3b2wgQUxMIENPTU1BTkQgZ2NjIHdvbC5jIC1vIHdvbCkKKworc2V0KHRvb2xzIGZ3aW5mbyBtaW5pYm9vdCBjaGVja3N1bSBlZXByb21fZml4KQorCitmb3JlYWNoKHRvb2wgJHt0b29sc30pCisJYWRkX2V4ZWN1dGFibGUoICR7dG9vbH0gJHt0b29sfS5jICkKKwlhZGRfZGVmaW5pdGlvbnMoIi1zdGQ9Z251OTkgLVdhbGwgLVdleHRyYSAtV3NoYWRvdyIpCisJdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCAke3Rvb2x9IGNhcmxmdyApCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvdG9vbHMvc3JjL2NoZWNrc3VtLmMgYi9jYXJsOTE3MGZ3L3Rvb2xzL3NyYy9jaGVja3N1bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOTQxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL3NyYy9jaGVja3N1bS5jCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMC0yMDExIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJyb3IuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJjYXJsZncuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyLmgiCisKK3N0YXRpYyB2b2lkIGNoZWNrc3VtX2hlbHAodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOlxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdGNoZWNrc3VtIEZXLUZJTEVcbiIpOworCisJZnByaW50ZihzdGRlcnIsICJcbkRlc2NyaXB0aW9uOlxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdFRoaXMgc2ltcGxlIHV0aWxpdHkgYWRkcy91cGRhdGVzIHZhcmlvdXMgIgorCQkJImNoZWNrc3Vtcy5cbiIpOworCisJZnByaW50ZihzdGRlcnIsICJcblBhcmFtZXRlcmVzOlxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdCAnRlctRklMRScJPSBmaXJtd2FyZSBuYW1lXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmdzW10pCit7CisJc3RydWN0IGNhcmxmdyAqZncgPSBOVUxMOworCWludCBlcnIgPSAwOworCisJaWYgKGFyZ2MgIT0gMikgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlmdyA9IGNhcmxmd19sb2FkKGFyZ3NbMV0pOworCWlmIChJU19FUlJfT1JfTlVMTChmdykpIHsKKwkJZXJyID0gUFRSX0VSUihmdyk7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gZmlsZSBcIiVzXCIgKCVkKS5cbiIsCisJCQlhcmdzWzFdLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIE5vIG1hZ2ljIGhlcmUsIFRoZSBjaGVja3N1bSBkZXNjcmlwdG9yIGlzIGFkZGVkL3VwZGF0ZQorCSAqIGF1dG9tYXRpY2FsbHkgaW4gYSBzdWJyb3V0aW5lIG9mIGNhcmxmd19zdG9yZSgpLgorCSAqCisJICogVGhpcyB0b29scyBzZXJ2ZXMgYXMgYSBza2VsZXRvbi9leGFtcGxlLgorCSAqLworCWVyciA9IGNhcmxmd19zdG9yZShmdyk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhcHBseSBjaGVja3N1bSAoJWQpLlxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJc3dpdGNoIChlcnIpIHsKKwljYXNlIDA6CisJCWZwcmludGYoc3Rkb3V0LCAiY2hlY2tzdW0gYXBwbGllZC5cbiIpOworCQlicmVhazsKKwljYXNlIC1FSU5WQUw6CisJCWNoZWNrc3VtX2hlbHAoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJY2FybGZ3X3JlbGVhc2UoZncpOworCXJldHVybiBlcnIgPyBFWElUX0ZBSUxVUkUgOiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9jYXJsOTE3MGZ3L3Rvb2xzL3NyYy9lZXByb21fZml4LmMgYi9jYXJsOTE3MGZ3L3Rvb2xzL3NyYy9lZXByb21fZml4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg4NTEwZQotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvdG9vbHMvc3JjL2VlcHJvbV9maXguYwpAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwLTIwMTEgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJvci5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNhcmxmdy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIuaCIKKworc3RhdGljIGludCBnZXRfdmFsKGNoYXIgKnN0ciwgdW5zaWduZWQgaW50ICp2YWwpCit7CisJaW50IGVycjsKKworCWVyciA9IHNzY2FuZihzdHIsICIlOHgiLCB2YWwpOworCWlmIChlcnIgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfYWRkcihjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqdmFsKQoreworCWludCBlcnI7CisKKwllcnIgPSBnZXRfdmFsKHN0ciwgdmFsKTsKKwlpZiAoKnZhbCAmIDMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJBZGRyZXNzIDB4JS44eCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LlxuIiwKKwkJCSp2YWwpOworCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK25ld19maXhfZW50cnkoc3RydWN0IGNhcmxmdyAqZncsIHN0cnVjdCBjYXJsOTE3MGZ3X2ZpeF9lbnRyeSAqZml4X2VudHJ5KQoreworCXN0cnVjdCBjYXJsOTE3MGZ3X2ZpeF9kZXNjICpmaXg7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWxlbiA9IHNpemVvZigqZml4KSArIHNpemVvZigqZml4X2VudHJ5KTsKKwlmaXggPSBtYWxsb2MobGVuKTsKKwlpZiAoIWZpeCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYXJsOTE3MGZ3X2ZpbGxfZGVzYygmZml4LT5oZWFkLCAodWludDhfdCAqKSBGSVhfTUFHSUMsCisJCQkgICAgICBjcHVfdG9fbGUxNihsZW4pLAorCQkJICAgICAgQ0FSTDkxNzBGV19GSVhfREVTQ19NSU5fVkVSLAorCQkJICAgICAgQ0FSTDkxNzBGV19GSVhfREVTQ19DVVJfVkVSKTsKKworCW1lbWNweSgmZml4LT5kYXRhWzBdLCBmaXhfZW50cnksIHNpemVvZigqZml4X2VudHJ5KSk7CisKKwlyZXR1cm4gY2FybGZ3X2Rlc2NfYWRkX3RhaWwoZncsICZmaXgtPmhlYWQpOworfQorCitzdGF0aWMgc3RydWN0IGNhcmw5MTcwZndfZml4X2VudHJ5ICoKK3NjYW5fZm9yX3NpbWlsYXJfZml4KHN0cnVjdCBjYXJsOTE3MGZ3X2ZpeF9kZXNjICpmaXgsIF9fbGUzMiBhZGRyZXNzKQoreworCXVuc2lnbmVkIGludCBpLCBlbnRyaWVzOworCisJZW50cmllcyA9IChsZTE2X3RvX2NwdShmaXgtPmhlYWQubGVuZ3RoKSAtIHNpemVvZigqZml4KSkgLworCQkgICBzaXplb2Yoc3RydWN0IGNhcmw5MTcwZndfZml4X2VudHJ5KTsKKworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKKwkJaWYgKGFkZHJlc3MgPT0gZml4LT5kYXRhW2ldLmFkZHJlc3MpCisJCQlyZXR1cm4gJmZpeC0+ZGF0YVtpXTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorYWRkX2Fub3RoZXJfZml4X2VudHJ5KHN0cnVjdCBjYXJsZncgKmZ3LCBzdHJ1Y3QgY2FybDkxNzBmd19maXhfZGVzYyAqZml4LAorCQkgc3RydWN0IGNhcmw5MTcwZndfZml4X2VudHJ5ICpmaXhfZW50cnkpCit7CisJdW5zaWduZWQgaW50IGVudHJ5OworCisJZml4ID0gY2FybGZ3X2Rlc2NfbW9kX2xlbihmdywgJmZpeC0+aGVhZCwgc2l6ZW9mKCpmaXhfZW50cnkpKTsKKwlpZiAoSVNfRVJSX09SX05VTEwoZml4KSkKKwkJcmV0dXJuIChpbnQpIFBUUl9FUlIoZml4KTsKKworCWVudHJ5ID0gKGxlMTZfdG9fY3B1KGZpeC0+aGVhZC5sZW5ndGgpIC0gc2l6ZW9mKCpmaXgpKSAvCisJCXNpemVvZigqZml4X2VudHJ5KSAtIDE7CisKKwltZW1jcHkoJmZpeC0+ZGF0YVtlbnRyeV0sIGZpeF9lbnRyeSwgc2l6ZW9mKCpmaXhfZW50cnkpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordXBkYXRlX2VudHJ5KGNoYXIgb3B0aW9uLCBzdHJ1Y3QgY2FybDkxNzBmd19maXhfZW50cnkgKmVudHJ5LAorCSAgICAgc3RydWN0IGNhcmw5MTcwZndfZml4X2VudHJ5ICpmaXgpCit7CisJc3dpdGNoIChvcHRpb24pIHsKKwljYXNlICc9JzoKKwkJZW50cnktPm1hc2sgPSBmaXgtPm1hc2s7CisJCWVudHJ5LT52YWx1ZSA9IGZpeC0+dmFsdWU7CisJCWJyZWFrOworCisJY2FzZSAnTyc6CisJCWVudHJ5LT5tYXNrIHw9IGZpeC0+bWFzazsKKwkJZW50cnktPnZhbHVlIHw9IGZpeC0+dmFsdWU7CisJCWJyZWFrOworCisJY2FzZSAnQSc6CisJCWVudHJ5LT5tYXNrICY9IGZpeC0+bWFzazsKKwkJZW50cnktPnZhbHVlICY9IGZpeC0+dmFsdWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbjogJyVjJ1xuIiwgb3B0aW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzZXJfZWR1Y2F0aW9uKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTpcbiIpOworCWZwcmludGYoc3RkZXJyLCAiXHRlZXByb21fZml4IEZXLUZJTEUgU1dJVENIIFtBRERSRVNTIFtWQUxVRSBNQVNLXV1cbiIpOworCisJZnByaW50ZihzdGRlcnIsICJcbkRlc2NyaXB0aW9uOlxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdFRoaXMgdXRpbGl0eSBtYW5hZ2UgYSBzZXQgb2Ygb3ZlcnJpZGVzIHdoaWNoICIKKwkJCSJjb21tYW5kcyB0aGUgZHJpdmVyXG5cdHRvIGxvYWQgY3VzdG9taXplZCBFRVBST00nICIKKwkJCSJkYXRhIGZvciBhbGwgc3BlY2lmaWVkIGFkZHJlc3Nlcy5cbiIpOworCisJZnByaW50ZihzdGRlcnIsICJcblBhcmFtZXRlcnM6XG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0J0ZXLUZJTEUnICA9IGZpcm13YXJlIGZpbGUgW2Jhc2VuYW1lXVxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdCdTV0lUQ0gnICAgPSBbPXxkfERdXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0IHwgJz0nICAgICAgID0+IGFkZC9zZXQgdmFsdWUgZm9yIGFkZHJlc3NcbiIpOworCWZwcmludGYoc3RkZXJyLCAiXHQgfCAnRCcgICAgICAgPT4gcmVtb3ZlcyBhbGwgRUVQUk9NIG92ZXJyaWRlc1xuIik7CisJZnByaW50ZihzdGRlcnIsICJcdCAqICdkJyAgICAgICA9PiByZW1vdmVkIG92ZXJyaWRlIGZvciAnYWRkcmVzcydcbiIpOworCWZwcmludGYoc3RkZXJyLCAiXG5cdCdBRERSRVNTJyAgPSBsb2NhdGlvbiBvZiB0aGUgRUVQUk9NIG92ZXJyaWRlXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0XHQgICAgIE5COiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC5cbiIpOworCWZwcmludGYoc3RkZXJyLCAiXHRcdCAgICAgYW4gYWRkcmVzcyBtYXAgY2FuIGJlIGZvdW5kIGluIGVlcHJvbS5oLlxuIik7CisJZnByaW50ZihzdGRlcnIsICJcblx0J1ZBTFVFJyAgICA9IHJlcGxhY2VtZW50IHZhbHVlXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0J01BU0snICAgICA9IG1hc2sgZm9yIHRoZSB2YWx1ZSBwbGFjZW1lbnQuXG5cbiIpOworCisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgaW50CitzZXRfZml4KHN0cnVjdCBjYXJsZncgKmZ3LCBzdHJ1Y3QgY2FybDkxNzBmd19maXhfZGVzYyAqZml4LAorCWNoYXIgX191bnVzZWQgb3B0aW9uLCBpbnQgX191bnVzZWQgYXJnYywgY2hhciAqYXJnc1tdKQoreworCXN0cnVjdCBjYXJsOTE3MGZ3X2ZpeF9lbnRyeSBmaXhfZW50cnksICplbnRyeSA9IE5VTEw7CisJdW5zaWduZWQgaW50IGFkZHJlc3MsIHZhbHVlLCBtYXNrOworCWludCBlcnI7CisKKwllcnIgPSBnZXRfYWRkcihhcmdzWzNdLCAmYWRkcmVzcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGdldF92YWwoYXJnc1s0XSwgJnZhbHVlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gZ2V0X3ZhbChhcmdzWzVdLCAmbWFzayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZpeF9lbnRyeS5hZGRyZXNzID0gY3B1X3RvX2xlMzIoYWRkcmVzcyk7CisJZml4X2VudHJ5LnZhbHVlID0gY3B1X3RvX2xlMzIodmFsdWUpOworCWZpeF9lbnRyeS5tYXNrID0gY3B1X3RvX2xlMzIobWFzayk7CisKKwlpZiAoIWZpeCkgeworCQllcnIgPSBuZXdfZml4X2VudHJ5KGZ3LCAmZml4X2VudHJ5KTsKKwl9IGVsc2UgeworCQllbnRyeSA9IHNjYW5fZm9yX3NpbWlsYXJfZml4KGZpeCwgZml4X2VudHJ5LmFkZHJlc3MpOworCQlpZiAoZW50cnkpIHsKKwkJCWVyciA9IHVwZGF0ZV9lbnRyeShvcHRpb24sIGVudHJ5LCAmZml4X2VudHJ5KTsKKwkJCWlmIChlcnIpCisJCQkJZnByaW50ZihzdGRvdXQsICJPdmVyd3JpdGUgb2xkIGVudHJ5LlxuIik7CisJCX0gZWxzZSB7CisJCQllcnIgPSBhZGRfYW5vdGhlcl9maXhfZW50cnkoZncsIGZpeCwgJmZpeF9lbnRyeSk7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CitkZWxfZml4KHN0cnVjdCBjYXJsZncgKmZ3LCBzdHJ1Y3QgY2FybDkxNzBmd19maXhfZGVzYyAqZml4LAorCWNoYXIgX191bnVzZWQgb3B0aW9uLCBpbnQgX191bnVzZWQgYXJnYywgY2hhciAqYXJnc1tdKQoreworCXN0cnVjdCBjYXJsOTE3MGZ3X2ZpeF9lbnRyeSAqZW50cnkgPSBOVUxMOworCXVuc2lnbmVkIGludCBhZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgb2ZmOworCXVuc2lnbmVkIGludCByZW1fbGVuOworCWludCBlcnI7CisKKwllcnIgPSBnZXRfYWRkcihhcmdzWzNdLCAmYWRkcmVzcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChmaXgpCisJCWVudHJ5ID0gc2Nhbl9mb3Jfc2ltaWxhcl9maXgoZml4LCBjcHVfdG9fbGUzMihhZGRyZXNzKSk7CisKKwlpZiAoIWVudHJ5KSB7CisJCWZwcmludGYoc3RkZXJyLCAiRW50cnkgZm9yIDB4JS44eCBub3QgZm91bmRcbiIsIGFkZHJlc3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvZmYgPSAodW5zaWduZWQgbG9uZykgZW50cnkgLSAodW5zaWduZWQgbG9uZykgZml4LT5kYXRhOworCXJlbV9sZW4gPSBsZTE2X3RvX2NwdShmaXgtPmhlYWQubGVuZ3RoKSAtIG9mZjsKKworCWlmIChyZW1fbGVuKSB7CisJCXVuc2lnbmVkIGxvbmcgY29udDsKKwkJY29udCA9ICh1bnNpZ25lZCBsb25nKSBlbnRyeSArIHNpemVvZigqZW50cnkpOworCQltZW1tb3ZlKGVudHJ5LCAodm9pZCAqKWNvbnQsIHJlbV9sZW4pOworCX0KKworCWZpeCA9IGNhcmxmd19kZXNjX21vZF9sZW4oZncsICZmaXgtPmhlYWQsIC1zaXplb2YoKmVudHJ5KSk7CisJZXJyID0gSVNfRVJSX09SX05VTEwoZml4KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRlbF9hbGwoc3RydWN0IGNhcmxmdyAqZncsIHN0cnVjdCBjYXJsOTE3MGZ3X2ZpeF9kZXNjICpmaXgsCisJY2hhciBfX3VudXNlZCBvcHRpb24sIGludCBfX3VudXNlZCBhcmdjLCBjaGFyIF9fdW51c2VkICphcmdzW10pCit7CisJaWYgKCFmaXgpCisJCXJldHVybiAwOworCisJY2FybGZ3X2Rlc2NfZGVsKGZ3LCAmZml4LT5oZWFkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY2hhciBvcHRpb247CisJaW50IGFyZ2M7CisJaW50ICgqZnVuYykoc3RydWN0IGNhcmxmdyAqLCBzdHJ1Y3QgY2FybDkxNzBmd19maXhfZGVzYyAqLAorCQkgICAgY2hhciwgaW50LCBjaGFyICoqKTsKK30gcHJvZ3JhbW1fZnVuY3Rpb25bXSA9IHsKKwl7ICc9JywgNiwgc2V0X2ZpeCB9LAorCXsgJ08nLCA2LCBzZXRfZml4IH0sCisJeyAnQScsIDYsIHNldF9maXggfSwKKwl7ICdkJywgNCwgZGVsX2ZpeCB9LAorCXsgJ0QnLCAzLCBkZWxfYWxsIH0sCit9OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJnc1tdKQoreworCXN0cnVjdCBjYXJsOTE3MGZ3X2ZpeF9kZXNjICpmaXg7CisJc3RydWN0IGNhcmxmdyAqZncgPSBOVUxMOworCXVuc2lnbmVkIGludCBpOworCWludCBlcnIgPSAwOworCWNoYXIgb3B0aW9uOworCisJaWYgKGFyZ2MgPCAzIHx8IGFyZ2MgPiA2KSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWZ3ID0gY2FybGZ3X2xvYWQoYXJnc1sxXSk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGZ3KSkgeworCQllcnIgPSBQVFJfRVJSKGZ3KTsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiBmaWxlIFwiJXNcIiAoJWQpLlxuIiwKKwkJCWFyZ3NbMV0sIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCWZpeCA9IGNhcmxmd19maW5kX2Rlc2MoZncsICh1aW50OF90ICopRklYX01BR0lDLCBzaXplb2YoKmZpeCksCisJCQkgICAgICAgQ0FSTDkxNzBGV19GSVhfREVTQ19DVVJfVkVSKTsKKworCW9wdGlvbiA9IGFyZ3NbMl1bMF07CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvZ3JhbW1fZnVuY3Rpb24pOyBpKyspIHsKKwkJaWYgKHByb2dyYW1tX2Z1bmN0aW9uW2ldLm9wdGlvbiAhPSBvcHRpb24pCisJCQljb250aW51ZTsKKworCQlpZiAoYXJnYyAhPSBwcm9ncmFtbV9mdW5jdGlvbltpXS5hcmdjKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQllcnIgPSBwcm9ncmFtbV9mdW5jdGlvbltpXS5mdW5jKGZ3LCBmaXgsIG9wdGlvbiwgYXJnYywgYXJncyk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQlicmVhazsKKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRShwcm9ncmFtbV9mdW5jdGlvbikpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbjogJyVjJ1xuIiwKKwkJCWFyZ3NbMl1bMF0pOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBjYXJsZndfc3RvcmUoZncpOworCWlmIChlcnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYXBwbHkgY2hhbmdlcyAoJWQpLlxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJY2FybGZ3X3JlbGVhc2UoZncpOworCisJaWYgKGVycikgeworCQlpZiAoZXJyID09IC1FSU5WQUwpCisJCQl1c2VyX2VkdWNhdGlvbigpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzdHJlcnJvcihlcnIpKTsKKwl9CisKKwlyZXR1cm4gZXJyID8gRVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvY2FybDkxNzBmdy90b29scy9zcmMvZndpbmZvLmMgYi9jYXJsOTE3MGZ3L3Rvb2xzL3NyYy9md2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDVjZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvY2FybDkxNzBmdy90b29scy9zcmMvZndpbmZvLmMKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMC0yMDExIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJyb3IuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgImNhcmxmdy5oIgorCisjaW5jbHVkZSAiZndjbWQuaCIKKyNpbmNsdWRlICJjb21waWxlci5oIgorCitzdHJ1Y3QgZmVhdHVyZV9saXN0IHsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJY2hhciBuYW1lWzY0XTsKKwl2b2lkICgqZnVuYykoY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkICosIHN0cnVjdCBjYXJsZncgKmZ3KTsKK307CisKKyNkZWZpbmUgQ0hFQ0tfRk9SX0ZFQVRVUkUoZmVhdHVyZV9lbnVtKQkJCQkJXAorCXsgLmlkID0gZmVhdHVyZV9lbnVtLCAubmFtZSA9ICNmZWF0dXJlX2VudW0sIC5mdW5jID0gTlVMTCB9CisKKyNkZWZpbmUgQ0hFQ0tfRk9SX0ZFQVRVUkVfRlVOQyhmZWF0dXJlX2VudW0sIF9mdW5jKQkJCVwKKwl7IC5pZCA9IGZlYXR1cmVfZW51bSwgLm5hbWUgPSAjZmVhdHVyZV9lbnVtLCAuZnVuYyA9IF9mdW5jIH0KKworc3RhdGljIHZvaWQgc2hvd19taW5pYm9vdF9pbmZvKGNvbnN0IHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqaGVhZCwKKwkJCSAgICAgICBzdHJ1Y3QgY2FybGZ3ICpmdyBfX3VudXNlZCkKK3sKKwljb25zdCBzdHJ1Y3QgY2FybDkxNzBmd19vdHVzX2Rlc2MgKm90dXMgPSAoY29uc3Qgdm9pZCAqKSBoZWFkOworCisJZnByaW50ZihzdGRvdXQsICJcdFx0XHRtaW5pYm9vdCBzaXplOiAlZCBCeXRlc1xuIiwgb3R1cy0+bWluaWJvb3Rfc2l6ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmVhdHVyZV9saXN0IGtub3duX290dXNfZmVhdHVyZXNfdjFbXSA9IHsKKwlDSEVDS19GT1JfRkVBVFVSRShDQVJMOTE3MEZXX0RVTU1ZX0ZFQVRVUkUpLAorCUNIRUNLX0ZPUl9GRUFUVVJFX0ZVTkMoQ0FSTDkxNzBGV19NSU5JQk9PVCwgc2hvd19taW5pYm9vdF9pbmZvKSwKKwlDSEVDS19GT1JfRkVBVFVSRShDQVJMOTE3MEZXX1VTQl9JTklUX0ZJUk1XQVJFKSwKKwlDSEVDS19GT1JfRkVBVFVSRShDQVJMOTE3MEZXX1VTQl9SRVNQX0VQMiksCisJQ0hFQ0tfRk9SX0ZFQVRVUkUoQ0FSTDkxNzBGV19VU0JfRE9XTl9TVFJFQU0pLAorCUNIRUNLX0ZPUl9GRUFUVVJFKENBUkw5MTcwRldfVVNCX1VQX1NUUkVBTSksCisJQ0hFQ0tfRk9SX0ZFQVRVUkUoQ0FSTDkxNzBGV19VTlVTQUJMRSksCisJQ0hFQ0tfRk9SX0ZFQVRVUkUoQ0FSTDkxNzBGV19DT01NQU5EX1BIWSksCisJQ0hFQ0tfRk9SX0ZFQVRVUkUoQ0FSTDkxNzBGV19DT01NQU5EX0NBTSksCisJQ0hFQ0tfRk9SX0ZFQVRVUkUoQ0FSTDkxNzBGV19XTEFOVFhfQ0FCKSwKKwlDSEVDS19GT1JfRkVBVFVSRShDQVJMOTE3MEZXX0hBTkRMRV9CQUNLX1JFUSksCisJQ0hFQ0tfRk9SX0ZFQVRVUkUoQ0FSTDkxNzBGV19HUElPX0lOVEVSUlVQVCksCisJQ0hFQ0tfRk9SX0ZFQVRVUkUoQ0FSTDkxNzBGV19QU00pLAorCUNIRUNLX0ZPUl9GRUFUVVJFKENBUkw5MTcwRldfUlhfRklMVEVSKSwKKwlDSEVDS19GT1JfRkVBVFVSRShDQVJMOTE3MEZXX1dPTCksCisJQ0hFQ0tfRk9SX0ZFQVRVUkUoQ0FSTDkxNzBGV19GSVhFRF81R0haX1BTTSksCisJQ0hFQ0tfRk9SX0ZFQVRVUkUoQ0FSTDkxNzBGV19IV19DT1VOVEVSUyksCisJQ0hFQ0tfRk9SX0ZFQVRVUkUoQ0FSTDkxNzBGV19SWF9CQV9GSUxURVIpLAorfTsKKworc3RhdGljIHZvaWQgY2hlY2tfZmVhdHVyZV9saXN0KGNvbnN0IHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqaGVhZCwKKwkJCSAgICAgICBjb25zdCBfX2xlMzIgYml0bWFwLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmZWF0dXJlX2xpc3QgKmxpc3QsCisJCQkgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGVudHJpZXMsCisJCQkgICAgICAgc3RydWN0IGNhcmxmdyAqZncpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCWlmICghY2FybDkxNzBmd19zdXBwb3J0cyhiaXRtYXAsIGxpc3RbaV0uaWQpKQorCQkJY29udGludWU7CisKKwkJZnByaW50ZihzdGRvdXQsICJcdFx0JTJkID0gJXNcbiIsIGxpc3RbaV0uaWQsIGxpc3RbaV0ubmFtZSk7CisJCWlmIChsaXN0W2ldLmZ1bmMpCisJCQlsaXN0W2ldLmZ1bmMoaGVhZCwgZncpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19vdHVzX2Rlc2MoY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkICpoZWFkLAorCQkJICAgc3RydWN0IGNhcmxmdyAqZncpCit7CisJY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfb3R1c19kZXNjICpvdHVzID0gKGNvbnN0IHZvaWQgKikgaGVhZDsKKworCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGtub3duX290dXNfZmVhdHVyZXNfdjEpICE9IF9fQ0FSTDkxNzBGV19GRUFUVVJFX05VTSk7CisKKwlmcHJpbnRmKHN0ZG91dCwgIlx0RmlybXdhcmUgdXBsb2FkIHBvaW50ZXI6IDB4JXhcbiIsCisJCW90dXMtPmZ3X2FkZHJlc3MpOworCWZwcmludGYoc3Rkb3V0LCAiXHRCZWFjb24gQWRkcmVzczogJXgsIChyZXNlcnZlZDolZCBCeXRlcylcbiIsCisJCWxlMzJfdG9fY3B1KG90dXMtPmJjbl9hZGRyKSwgbGUxNl90b19jcHUob3R1cy0+YmNuX2xlbikpOworCWZwcmludGYoc3Rkb3V0LCAiXHRUWCBETUEgY2h1bmsgc2l6ZTolZCBCeXRlcywgVFggRE1BIGNodW5rczolZFxuIiwKKwkJb3R1cy0+dHhfZnJhZ19sZW4sIG90dXMtPnR4X2Rlc2NzKTsKKwlmcHJpbnRmKHN0ZG91dCwgIlx0PT4gJWQgQnl0ZXMgYXJlIHJlc2VydmVkIGZvciB0aGUgVFggcXVldWVzXG4iLAorCQlvdHVzLT50eF9mcmFnX2xlbiAqIG90dXMtPnR4X2Rlc2NzKTsKKwlmcHJpbnRmKHN0ZG91dCwgIlx0Q29tbWFuZCByZXNwb25zZSBidWZmZXJzOiVkXG4iLCBvdHVzLT5jbWRfYnVmcyk7CisJZnByaW50ZihzdGRvdXQsICJcdE1heC4gUlggc3RyZWFtIGJsb2NrIHNpemU6JWQgQnl0ZXNcbiIsCisJCW90dXMtPnJ4X21heF9mcmFtZV9sZW4pOworCWZwcmludGYoc3Rkb3V0LCAiXHRTdXBwb3J0ZWQgRmlybXdhcmUgSW50ZXJmYWNlczogJWRcbiIsIG90dXMtPnZpZl9udW0pOworCWZwcmludGYoc3Rkb3V0LCAiXHRGaXJtd2FyZSBBUEkgVmVyc2lvbjogJWRcbiIsIG90dXMtPmFwaV92ZXIpOworCWZwcmludGYoc3Rkb3V0LCAiXHRTdXBwb3J0ZWQgRmVhdHVyZXM6IChyYXc6JS4wOHgpXG4iLAorCQlsZTMyX3RvX2NwdShvdHVzLT5mZWF0dXJlX3NldCkpOworCisJY2hlY2tfZmVhdHVyZV9saXN0KGhlYWQsIG90dXMtPmZlYXR1cmVfc2V0LCBrbm93bl9vdHVzX2ZlYXR1cmVzX3YxLAorCQkJICAgQVJSQVlfU0laRShrbm93bl9vdHVzX2ZlYXR1cmVzX3YxKSwgZncpOworfQorCitzdGF0aWMgdm9pZCBzaG93X21vdGRfZGVzYyhjb25zdCBzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKmhlYWQsCisJCQkgICBzdHJ1Y3QgY2FybGZ3ICpmdyBfX3VudXNlZCkKK3sKKwljb25zdCBzdHJ1Y3QgY2FybDkxNzBmd19tb3RkX2Rlc2MgKm1vdGQgPSAoY29uc3Qgdm9pZCAqKSBoZWFkOworCWNoYXIgYnVmW0NBUkw5MTcwRldfTU9URF9TVFJJTkdfTEVOXTsKKwl1bnNpZ25lZCBpbnQgZndfZGF0ZTsKKworCWZ3X2RhdGUgPSBtb3RkLT5md195ZWFyX21vbnRoX2RheTsKKwlmcHJpbnRmKHN0ZG91dCwgIlx0RmlybXdhcmUgQnVpbGQgRGF0ZSAoWVlZWS1NTS1ERCk6IDIlMDNkLSUwMmQtJTAyZFxuIiwKKwkJQ0FSTDkxNzBGV19HRVRfWUVBUihmd19kYXRlKSwgQ0FSTDkxNzBGV19HRVRfTU9OVEgoZndfZGF0ZSksCisJCUNBUkw5MTcwRldfR0VUX0RBWShmd19kYXRlKSk7CisKKwlzdHJuY3B5KGJ1ZiwgbW90ZC0+ZGVzYywgQ0FSTDkxNzBGV19NT1REX1NUUklOR19MRU4pOworCWZwcmludGYoc3Rkb3V0LCAiXHRGaXJtd2FyZSBUZXh0OlwiJXNcIlxuIiwgYnVmKTsKKworCXN0cm5jcHkoYnVmLCBtb3RkLT5yZWxlYXNlLCBDQVJMOTE3MEZXX01PVERfU1RSSU5HX0xFTik7CisJZnByaW50ZihzdGRvdXQsICJcdEZpcm13YXJlIFJlbGVhc2U6XCIlc1wiXG4iLCBidWYpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2ZpeF9kZXNjKGNvbnN0IHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqaGVhZCwKKwkJCSAgc3RydWN0IGNhcmxmdyAqZncgX191bnVzZWQpCit7CisJY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfZml4X2Rlc2MgKmZpeCA9IChjb25zdCB2b2lkICopIGhlYWQ7CisJY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfZml4X2VudHJ5ICppdGVyOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IChoZWFkLT5sZW5ndGggLSBzaXplb2YoKmhlYWQpKSAvIHNpemVvZigqaXRlcik7IGkrKykgeworCQlpdGVyID0gJmZpeC0+ZGF0YVtpXTsKKwkJZnByaW50ZihzdGRvdXQsICJcdFx0JWQ6IDB4JS44eCA6PSAweCUuOHggKDB4JS44eClcbiIsIGksCisJCQlsZTMyX3RvX2NwdShpdGVyLT5hZGRyZXNzKSwgbGUzMl90b19jcHUoaXRlci0+dmFsdWUpLAorCQkJbGUzMl90b19jcHUoaXRlci0+bWFzaykpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19kYmdfZGVzYyhjb25zdCBzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKmhlYWQsCisJCQkgICAgc3RydWN0IGNhcmxmdyAqZncgX191bnVzZWQpCit7CisJY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfZGJnX2Rlc2MgKmRiZyA9IChjb25zdCB2b2lkICopIGhlYWQ7CisKKyNkZWZpbmUgREJHX0FERFIoX25hbWUsIF9yZWcpIGRvIHsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX190bXAgPSBsZTMyX3RvX2NwdShkYmctPl9yZWcpOwkJCVwKKwlpZiAoX190bXApCQkJCQkJCVwKKwkJZnByaW50ZihzdGRvdXQsICJcdFx0IiBfbmFtZSAiID0gMHglLjh4XG4iLCBfX3RtcCk7CVwKKwl9IHdoaWxlICgwKTsKKworCWZwcmludGYoc3Rkb3V0LCAiXHRGaXJtd2FyZSBEZWJ1ZyBSZWdpc3RlcnMvQ291bnRlcnNcbiIpOworCURCR19BRERSKCJib2dvY2xvY2sgICAgIiwgYm9nb2Nsb2NrX2FkZHIpOworCURCR19BRERSKCJjb3VudGVyICAgICAgIiwgY291bnRlcl9hZGRyKTsKKwlEQkdfQUREUigicnggdG90YWwgICAgICIsIHJ4X3RvdGFsX2FkZHIpOworCURCR19BRERSKCJyeCBvdmVycnVuICAgIiwgcnhfb3ZlcnJ1bl9hZGRyKTsKKwlEQkdfQUREUigicnggZmlsZXIgICAgICIsIHJ4X2ZpbHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfdHhzcV9kZXNjKGNvbnN0IHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqaGVhZCwKKwkJCSAgIHN0cnVjdCBjYXJsZncgKmZ3IF9fdW51c2VkKQoreworCWNvbnN0IHN0cnVjdCBjYXJsOTE3MGZ3X3R4c3FfZGVzYyAqdHhzcSA9IChjb25zdCB2b2lkICopIGhlYWQ7CisKKwlmcHJpbnRmKHN0ZG91dCwgIlx0XHR0eC1zZXEgdGFibGUgYWRkcjogMHgleFxuIiwKKwkJbGUzMl90b19jcHUodHhzcS0+c2VxX3RhYmxlX2FkZHIpKTsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZlYXR1cmVfbGlzdCB3b2xfdHJpZ2dlcnNfdjFbXSA9IHsKKwlDSEVDS19GT1JfRkVBVFVSRShDQVJMOTE3MF9XT0xfRElTQ09OTkVDVCksCisJQ0hFQ0tfRk9SX0ZFQVRVUkUoQ0FSTDkxNzBfV09MX01BR0lDX1BLVCksCit9OworCitzdGF0aWMgdm9pZCBzaG93X3dvbF9kZXNjKGNvbnN0IHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqaGVhZCwKKwkJCSAgc3RydWN0IGNhcmxmdyAqZncgX191bnVzZWQpCit7CisJY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfd29sX2Rlc2MgKndvbCA9IChjb25zdCB2b2lkICopIGhlYWQ7CisKKwlmcHJpbnRmKHN0ZG91dCwgIlx0U3VwcG9ydGVkIFdPV0xBTiB0cmlnZ2VyczogKHJhdzolLjA4eClcbiIsCisJCWxlMzJfdG9fY3B1KHdvbC0+c3VwcG9ydGVkX3RyaWdnZXJzKSk7CisKKwljaGVja19mZWF0dXJlX2xpc3QoaGVhZCwgd29sLT5zdXBwb3J0ZWRfdHJpZ2dlcnMsIHdvbF90cmlnZ2Vyc192MSwKKwkJCSAgIEFSUkFZX1NJWkUod29sX3RyaWdnZXJzX3YxKSwgZncpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2Noa19kZXNjKGNvbnN0IHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqaGVhZCwKKwkJCSAgc3RydWN0IGNhcmxmdyAqZncgX191bnVzZWQpCit7CisJY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfY2hrX2Rlc2MgKmNoayA9IChjb25zdCB2b2lkICopIGhlYWQ7CisKKwlmcHJpbnRmKHN0ZG91dCwgIlx0RmlybXdhcmUgRGVzY3JpcHRvciBDUkMzMjogJTA4eFxuIiwKKwkJbGUzMl90b19jcHUoY2hrLT5oZHJfY3JjMzIpKTsKKwlmcHJpbnRmKHN0ZG91dCwgIlx0RmlybXdhcmUgSW1hZ2UgQ1JDMzI6ICUwOHhcbiIsCisJCWxlMzJfdG9fY3B1KGNoay0+ZndfY3JjMzIpKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19sYXN0X2Rlc2MoY29uc3Qgc3RydWN0IGNhcmw5MTcwZndfZGVzY19oZWFkICpoZWFkLAorCQkJICAgc3RydWN0IGNhcmxmdyAqZncgX191bnVzZWQpCisKK3sKKwljb25zdCBzdHJ1Y3QgY2FybDkxNzBmd19sYXN0X2Rlc2MgKmxhc3QgX191bnVzZWQgPSAoY29uc3Qgdm9pZCAqKSBoZWFkOworCisJLyogTm90aGluZyBoZXJlICovCit9CisKKyNkZWZpbmUgQUREX0hBTkRMRVIoX21hZ2ljLCBfZnVuYykJCQkJXAorCXsJCQkJCQkJXAorCSAgLm1hZ2ljID0gX21hZ2ljIyNfTUFHSUMsCQkJCVwKKwkgIC5taW5fdmVyID0gQ0FSTDkxNzBGV18jIyBfbWFnaWMjI19ERVNDX0NVUl9WRVIsCVwKKwkgIC5mdW5jID0gX2Z1bmMsCQkJCQlcCisJICAuc2l6ZSA9IENBUkw5MTcwRldfIyMgX21hZ2ljIyNfREVTQ19TSVpFLAkJXAorCX0KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJdWludDhfdCBtYWdpY1s0XTsKKwl1aW50OF90IG1pbl92ZXI7CisJdm9pZCAoKmZ1bmMpKGNvbnN0IHN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqLCBzdHJ1Y3QgY2FybGZ3ICopOworCXVpbnQxNl90IHNpemU7Cit9IGtub3duX21hZ2ljc1tdID0geworCUFERF9IQU5ETEVSKE9UVVMsIHNob3dfb3R1c19kZXNjKSwKKwlBRERfSEFORExFUihUWFNRLCBzaG93X3R4c3FfZGVzYyksCisJQUREX0hBTkRMRVIoTU9URCwgc2hvd19tb3RkX2Rlc2MpLAorCUFERF9IQU5ETEVSKERCRywgc2hvd19kYmdfZGVzYyksCisJQUREX0hBTkRMRVIoRklYLCBzaG93X2ZpeF9kZXNjKSwKKwlBRERfSEFORExFUihDSEssIHNob3dfY2hrX2Rlc2MpLAorCUFERF9IQU5ETEVSKFdPTCwgc2hvd193b2xfZGVzYyksCisJQUREX0hBTkRMRVIoTEFTVCwgc2hvd19sYXN0X2Rlc2MpLAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3R1c19tYWdpY1s0XSA9IHsgT1RVU19NQUdJQyB9OworCitzdGF0aWMgdm9pZCBzaG93X2Rlc2NfaGVhZChzdHJ1Y3QgY2FybDkxNzBmd19kZXNjX2hlYWQgKmhlYWQpCit7CisjZGVmaW5lIFAoYykgKGlzcHJpbnQoYykgPyBjIDogICcgJykKKworCWZwcmludGYoc3Rkb3V0LCAiPlx0JWMlYyVjJWMgRGVzY3JpcHRvcjogc2l6ZTolZCwgY29tcGF0aWJsZTolZCwgIgorCQkJInZlcnNpb246JWRcbiIsCisJCVAoaGVhZC0+bWFnaWNbMF0pLCBQKGhlYWQtPm1hZ2ljWzFdKSwgUChoZWFkLT5tYWdpY1syXSksCisJCVAoaGVhZC0+bWFnaWNbM10pLCBsZTE2X3RvX2NwdShoZWFkLT5sZW5ndGgpLCBoZWFkLT5taW5fdmVyLAorCQloZWFkLT5jdXJfdmVyKTsKK30KKworc3RhdGljIHZvaWQgZndpbmZvX2luZm8odm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOlxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdGZ3aW5mbyBGVy1GSUxFXG4iKTsKKworCWZwcmludGYoc3RkZXJyLCAiXG5EZXNjcmlwdGlvbjpcbiIpOworCWZwcmludGYoc3RkZXJyLCAiXHREaXNwbGF5IGZpcm13YXJlIGRlc2NyaXB0b3JzIGluZm9ybWF0aW9uIGluICIKKwkJCSJhIGh1bWFuIHJlYWRhYmxlIGZvcm0uXG4iKTsKKworCWZwcmludGYoc3RkZXJyLCAiXG5QYXJhbWV0ZXJlczpcbiIpOworCWZwcmludGYoc3RkZXJyLCAiXHQgJ0ZXLUZJTEUnCT0gZmlybXdhcmUgZmlsZS9iYXNlLW5hbWVcblxuIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmdzW10pCit7CisJc3RydWN0IGNhcmxmdyAqZncgPSBOVUxMOworCXN0cnVjdCBjYXJsOTE3MGZ3X2Rlc2NfaGVhZCAqZndfZGVzYzsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyID0gMDsKKwlzaXplX3QgbGVuOworCisJaWYgKGFyZ2MgIT0gMikgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlmdyA9IGNhcmxmd19sb2FkKGFyZ3NbMV0pOworCWlmIChJU19FUlJfT1JfTlVMTChmdykpIHsKKwkJZXJyID0gUFRSX0VSUihmdyk7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gZmlybXdhcmUgXCIlc1wiICglZCkuXG4iLAorCQkJYXJnc1sxXSwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJY2FybGZ3X2dldF9mdyhmdywgJmxlbik7CisJZnByaW50ZihzdGRvdXQsICJHZW5lcmFsIEZpcm13YXJlIFN0YXRpc3RpY3M6XG4iKTsKKwlmcHJpbnRmKHN0ZG91dCwgIlx0RmlybXdhcmUgZmlsZSBzaXplOiAldSBCeXRlc1xuIiwgKHVuc2lnbmVkIGludClsZW4pOworCWZwcmludGYoc3Rkb3V0LCAiXHQlZCBEZXNjcmlwdG9ycyBpbiAlZCBCeXRlc1xuIiwKKwkJY2FybGZ3X2dldF9kZXNjc19udW0oZncpLCBjYXJsZndfZ2V0X2Rlc2NzX3NpemUoZncpKTsKKworCWZ3X2Rlc2MgPSBOVUxMOworCWZwcmludGYoc3Rkb3V0LCAiXG5EZXRhaWxlZCBEZXNjcmlwdG9yIERlc2NyaXB0aW9uOlxuIik7CisJd2hpbGUgKChmd19kZXNjID0gY2FybGZ3X2Rlc2NfbmV4dChmdywgZndfZGVzYykpKSB7CisJCXNob3dfZGVzY19oZWFkKGZ3X2Rlc2MpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtub3duX21hZ2ljcyk7IGkrKykgeworCQkJaWYgKGNhcmw5MTcwZndfZGVzY19jbXAoZndfZGVzYywga25vd25fbWFnaWNzW2ldLm1hZ2ljLAorCQkJICAgIGtub3duX21hZ2ljc1tpXS5zaXplLCBrbm93bl9tYWdpY3NbaV0ubWluX3ZlcikpIHsKKwkJCQlrbm93bl9tYWdpY3NbaV0uZnVuYyhmd19kZXNjLCBmdyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaSA9PSBBUlJBWV9TSVpFKGtub3duX21hZ2ljcykpCisJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gRGVzY3JpcHRvci5cbiIpOworCisJCWZwcmludGYoc3Rkb3V0LCAiXG4iKTsKKwl9CisKK291dDoKKwlzd2l0Y2ggKGVycikgeworCWNhc2UgMDoKKwkJYnJlYWs7CisKKwljYXNlIC1FSU5WQUw6CisJCWZ3aW5mb19pbmZvKCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgc3RyZXJyb3IoLWVycikpOworCQlicmVhazsKKwl9CisKKwljYXJsZndfcmVsZWFzZShmdyk7CisJcmV0dXJuIGVyciA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvdG9vbHMvc3JjL21pbmlib290LmMgYi9jYXJsOTE3MGZ3L3Rvb2xzL3NyYy9taW5pYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOWQ4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9jYXJsOTE3MGZ3L3Rvb2xzL3NyYy9taW5pYm9vdC5jCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAtMjAxMSBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm9yLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY2FybGZ3LmgiCisKKyNpbmNsdWRlICJjb21waWxlci5oIgorCitzdGF0aWMgdm9pZCBtaW5pX2hlbHAodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOlxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdG1pbmlib290IEFDVElPTiBGVy1GSUxFIFtNQi1GSUxFXVxuIik7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlxuRGVzY3JpcHRpb246XG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0RmlybXdhcmUgY29uY2F0ZW5hdGlvbiB1dGlsaXR5LlxuIik7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlxuUGFyYW1ldGVyZXM6XG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0J0FDVElPTicJPSBbYXxkXVxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdCB8ICdhJwk9IEFkZCBtaW5pYm9vdCBmaXJtd2FyZS5cbiIpOworCWZwcmludGYoc3RkZXJyLCAiXHQgKiAnZCcJPSByZW1vdmUgbWluaWJvb3QgZmlybXdhcmUuXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0J0ZXLUZJTEUnCT0gZGVzdGluYXRpb24gZm9yIHRoZSBwYWNrYWdlLlxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdCdNQi1GSUxFJwk9IGV4dHJhIGZpcm13YXJlIGltYWdlLlxuIik7Cit9CisKK3N0YXRpYyBpbnQgYWRkX21pbmkoc3RydWN0IGNhcmxmdyAqZncsIGNvbnN0IGNoYXIgKm1pbmkpCit7CisJc3RydWN0IHN0YXQgZmlsZV9zdGF0OworCXN0cnVjdCBjYXJsOTE3MGZ3X290dXNfZGVzYyAqb3R1c19kZXNjID0gTlVMTDsKKwlGSUxFICptID0gTlVMTDsKKwljaGFyICpidWYgPSBOVUxMOworCXNpemVfdCBleHRyYTsKKwlpbnQgZXJyOworCisJbSA9IGZvcGVuKG1pbmksICJyIik7CisJaWYgKG0gPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuIGZpbGUgJXMgKCVkKS5cbiIsCisJCQltaW5pLCBlcnJubyk7CisJCWVyciA9IC1lcnJubzsKKwkJZ290byBmYWlsOworCX0KKworCWVyciA9IGZzdGF0KGZpbGVubyhtKSwgJmZpbGVfc3RhdCk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBxdWVyeSBmaWxlIGluZm9zIGZyb20gIgorCQkJCSJcIiVzXCIgKCVkKS5cbiIsIG1pbmksIGVycm5vKTsKKwkJZXJyID0gLWVycm5vOworCQlnb3RvIGZhaWw7CisJfQorCWV4dHJhID0gZmlsZV9zdGF0LnN0X3NpemU7CisKKwlvdHVzX2Rlc2MgPSBjYXJsZndfZmluZF9kZXNjKGZ3LCAodWludDhfdCAqKSBPVFVTX01BR0lDLAorCQkJCSAgICAgc2l6ZW9mKCpvdHVzX2Rlc2MpLAorCQkJCSAgICAgQ0FSTDkxNzBGV19PVFVTX0RFU0NfQ1VSX1ZFUik7CisJaWYgKCFvdHVzX2Rlc2MpIHsKKwkJZnByaW50ZihzdGRlcnIsICJObyBPVFVTIGRlc2NyaXB0b3IgZm91bmRcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKGNhcmw5MTcwZndfc3VwcG9ydHMob3R1c19kZXNjLT5mZWF0dXJlX3NldCwgQ0FSTDkxNzBGV19NSU5JQk9PVCkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJGaXJtd2FyZSBoYXMgYWxyZWFkeSBhIG1pbmlib290IGltYWdlLlxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlvdHVzX2Rlc2MtPmZlYXR1cmVfc2V0IHw9IGNwdV90b19sZTMyKEJJVChDQVJMOTE3MEZXX01JTklCT09UKSk7CisJb3R1c19kZXNjLT5taW5pYm9vdF9zaXplID0gY3B1X3RvX2xlMTYoZXh0cmEpOworCisJYnVmID0gY2FybGZ3X21vZF9oZWFkcm9vbShmdywgZXh0cmEpOworCWlmIChJU19FUlJfT1JfTlVMTChidWYpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGFkZCBtaW5pYm9vdCBpbWFnZS5cbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJZXJyID0gZnJlYWQoYnVmLCBleHRyYSwgMSwgbSk7CisJaWYgKGVyciAhPSAxKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGxvYWQgbWluaWJvb3QuXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCWNhcmxmd19zdG9yZShmdyk7CisJZmNsb3NlKG0pOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJaWYgKG0pCisJCWZjbG9zZShtKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZGVsX21pbmkoc3RydWN0IGNhcmxmdyAqZncpCit7CisJc3RydWN0IGNhcmw5MTcwZndfb3R1c19kZXNjICpvdHVzX2Rlc2MgPSBOVUxMOworCXZvaWQgKmJ1ZjsKKwlpbnQgY3V0OworCisJb3R1c19kZXNjID0gY2FybGZ3X2ZpbmRfZGVzYyhmdywgKHVpbnQ4X3QgKikgT1RVU19NQUdJQywKKwkJCQkgICAgIHNpemVvZigqb3R1c19kZXNjKSwKKwkJCQkgICAgIENBUkw5MTcwRldfT1RVU19ERVNDX0NVUl9WRVIpOworCWlmICghb3R1c19kZXNjKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmlybXdhcmUgaXMgbm90IGZvciBVU0IgZGV2aWNlcy5cbiIpOworCQlyZXR1cm4gLUVOT0RBVEE7CisJfQorCisJaWYgKCFjYXJsOTE3MGZ3X3N1cHBvcnRzKG90dXNfZGVzYy0+ZmVhdHVyZV9zZXQsIENBUkw5MTcwRldfTUlOSUJPT1QpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmlybXdhcmUgaGFzIG5vIG1pbmlib290IGltYWdlLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWN1dCA9IGxlMTZfdG9fY3B1KG90dXNfZGVzYy0+bWluaWJvb3Rfc2l6ZSk7CisKKwlidWYgPSBjYXJsZndfbW9kX2hlYWRyb29tKGZ3LCAtY3V0KTsKKwlpZiAoSVNfRVJSX09SX05VTEwoYnVmKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byByZW1vdmUgbWluaWJvb3QuXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoYnVmKTsKKwl9CisKKwlvdHVzX2Rlc2MtPmZlYXR1cmVfc2V0ICY9IGNwdV90b19sZTMyKH5CSVQoQ0FSTDkxNzBGV19NSU5JQk9PVCkpOworCW90dXNfZGVzYy0+bWluaWJvb3Rfc2l6ZSA9IGNwdV90b19sZTE2KDApOworCisJY2FybGZ3X3N0b3JlKGZ3KTsKKwlyZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3NbXSkKK3sKKwlzdHJ1Y3QgY2FybGZ3ICpmdyA9IE5VTEw7CisJaW50IGVycjsKKworCWlmIChhcmdjIDwgMyB8fCBhcmdjID4gNCkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9wYXJhbTsKKwl9CisKKwlzd2l0Y2ggKGFyZ3NbMV1bMF0pIHsKKwljYXNlICdhJzoKKwkJaWYgKGFyZ2MgIT0gNCkKKwkJCWdvdG8gZXJyX3BhcmFtOworCisJCWZ3ID0gY2FybGZ3X2xvYWQoYXJnc1syXSk7CisJCWlmIChJU19FUlJfT1JfTlVMTChmdykpIHsKKwkJCWVyciA9IFBUUl9FUlIoZncpOworCQkJZ290byBlcnJfb3V0OworCQl9CisKKwkJZXJyID0gYWRkX21pbmkoZncsIGFyZ3NbM10pOworCQlicmVhazsKKwljYXNlICdkJzoKKwkJaWYgKGFyZ2MgIT0gMykKKwkJCWdvdG8gZXJyX3BhcmFtOworCisJCWZ3ID0gY2FybGZ3X2xvYWQoYXJnc1syXSk7CisJCWlmIChJU19FUlJfT1JfTlVMTChmdykpIHsKKwkJCWVyciA9IFBUUl9FUlIoZncpOworCQkJZ290byBlcnJfb3V0OworCQl9CisKKwkJZXJyID0gZGVsX21pbmkoZncpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gZXJyX3BhcmFtOworCQlicmVhazsKKwl9CisKKwljYXJsZndfcmVsZWFzZShmdyk7CisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKworZXJyX291dDoKKwljYXJsZndfcmVsZWFzZShmdyk7CisJZnByaW50ZihzdGRlcnIsICJtaW5pYm9vdCBhY3Rpb24gZmFpbGVkICglZCkuXG4iLCBlcnIpOworCXJldHVybiBFWElUX0ZBSUxVUkU7CisKK2Vycl9wYXJhbToKKwljYXJsZndfcmVsZWFzZShmdyk7CisJbWluaV9oZWxwKCk7CisJcmV0dXJuIEVYSVRfRkFJTFVSRTsKK30KZGlmZiAtLWdpdCBhL2Nhcmw5MTcwZncvdG9vbHMvc3JjL3dvbC5jIGIvY2FybDkxNzBmdy90b29scy9zcmMvd29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFkYWJhMgotLS0gL2Rldi9udWxsCisrKyBiL2Nhcmw5MTcwZncvdG9vbHMvc3JjL3dvbC5jCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTEsIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CS8qIEVUSF9QX0FMTCAqLworI2luY2x1ZGUgPGxpbnV4L2lmX3BhY2tldC5oPgkvKiBzb2NrYWRkcl9sbCAqLworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CQkvKiBJRk5BTVNJWiAqLworCitzdGF0aWMgaW50IG1vbml0b3JfaW5pdChjb25zdCBjaGFyICppZm5hbWUpCit7CisJc3RydWN0IHNvY2thZGRyX2xsIGxsOworCWludCBtb25pdG9yX3NvY2s7CisKKwltZW1zZXQoJmxsLCAwLCBzaXplb2YobGwpKTsKKwlsbC5zbGxfZmFtaWx5ID0gQUZfUEFDS0VUOworCWxsLnNsbF9pZmluZGV4ID0gaWZfbmFtZXRvaW5kZXgoaWZuYW1lKTsKKwlpZiAobGwuc2xsX2lmaW5kZXggPT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIk1vbml0b3IgaW50ZXJmYWNlICclcycgZG9lcyBub3QgZXhpc3RcbiIsIGlmbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwltb25pdG9yX3NvY2sgPSBzb2NrZXQoUEZfUEFDS0VULCBTT0NLX1JBVywgaHRvbnMoRVRIX1BfQUxMKSk7CisJaWYgKG1vbml0b3Jfc29jayA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJzb2NrZXQoUEZfUEFDS0VULFNPQ0tfUkFXKTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYmluZChtb25pdG9yX3NvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmxsLCBzaXplb2YobGwpKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJiaW5kKFBBQ0tFVCk6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCQljbG9zZShtb25pdG9yX3NvY2spOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIG1vbml0b3Jfc29jazsKK30KKworc3RhdGljIGludCBpbmplY3RfZnJhbWUoaW50IHMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9GX0ZSQUcgICAgICAgMHgwOAorCXVuc2lnbmVkIGNoYXIgcnRhcF9oZHJbXSA9IHsKKwkJMHgwMCwgMHgwMCwgLyogcmFkaW90YXAgdmVyc2lvbiAqLworCQkweDBlLCAweDAwLCAvKiByYWRpb3RhcCBsZW5ndGggKi8KKwkJMHgwMiwgMHhjMCwgMHgwMCwgMHgwMCwgLyogYm1hcDogZmxhZ3MsIHR4IGFuZCByeCBmbGFncyAqLworCQlJRUVFODAyMTFfUkFESU9UQVBfRl9GUkFHLCAvKiBGX0ZSQUcgKGZyYWdtZW50IGlmIHJlcXVpcmVkKSAqLworCQkweDAwLCAgICAgICAvKiBwYWRkaW5nICovCisJCTB4MDAsIDB4MDAsIC8qIFJYIGFuZCBUWCBmbGFncyB0byBpbmRpY2F0ZSB0aGF0ICovCisJCTB4MDAsIDB4MDAsIC8qIHRoaXMgaXMgdGhlIGluamVjdGVkIGZyYW1lIGRpcmVjdGx5ICovCisJfTsKKwlzdHJ1Y3QgaW92ZWMgaW92WzJdID0geworCQl7CisJCQkuaW92X2Jhc2UgPSAmcnRhcF9oZHIsCisJCQkuaW92X2xlbiA9IHNpemVvZihydGFwX2hkciksCisJCX0sCisJCXsKKwkJCS5pb3ZfYmFzZSA9ICh2b2lkICopIGRhdGEsCisJCQkuaW92X2xlbiA9IGxlbiwKKwkJfQorCX07CisJc3RydWN0IG1zZ2hkciBtc2cgPSB7CisJCS5tc2dfbmFtZSA9IE5VTEwsCisJCS5tc2dfbmFtZWxlbiA9IDAsCisJCS5tc2dfaW92ID0gaW92LAorCQkubXNnX2lvdmxlbiA9IDIsCisJCS5tc2dfY29udHJvbCA9IE5VTEwsCisJCS5tc2dfY29udHJvbGxlbiA9IDAsCisJCS5tc2dfZmxhZ3MgPSAwLAorCX07CisJaW50IHJldDsKKworCXJldCA9IHNlbmRtc2cocywgJm1zZywgMCk7CisJaWYgKHJldCA8IDApCisJCXBlcnJvcigic2VuZG1zZyIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHdvbF9tYWdpY190bXBsWzMwICsgNiArIDE2ICogNl0gPSB7CisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAkvKiBSQSAqLworCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCS8qIFRBICovCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwJLyogU0EgKi8KKwkweDAwLCAweDAwLAorCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKK307CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfd29sKHVuc2lnbmVkIGNoYXIgKndvbF9tYWdpYywgdW5zaWduZWQgY2hhciAqbWFjKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCW1lbWNweSgmd29sX21hZ2ljWzMwICsgaSAqIDZdLCBtYWMsIDYpOworfQorCit2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTpcbiIpOworCWZwcmludGYoc3RkZXJyLCAiXHR3b2wgLWkgbW9uaXRvcl9kZXYgLW0gREU6Vkk6Q0U6TUE6Q1c6T0wgLW4gI251bSAtdlxuIik7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlxuRGVzY3JpcHRpb246XG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0VGhpcyB1dGlsaXR5IGdlbmVyYXRlcyBhIFdPTCBwYWNrZXQgZm9yIHRoZSIKKwkJCSJnaXZlbiBbTUFDXSBhZGRyZXNzIGFuZCB0cmllcyB0byBpbmplY3RzIgorCQkJIml0IGludG8gW21vbml0b3JfZGV2XVxuIik7CisKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKKyNkZWZpbmUgTUFDX1NUUiAiJTJYOiUyWDolMlg6JTJYOiUyWDolMlgiCisKKyNkZWZpbmUgTShhLCBpKSAoKHVuc2lnbmVkIGludCAqKSZhW2ldKQorI2RlZmluZSBNQUNfQVJHKGEpIE0oYSwgMCksIE0oYSwgMSksIE0oYSwgMiksIE0oYSwgMyksIE0oYSwgNCksIE0oYSwgNSkKKworI2RlZmluZSBNMihhLCBpKSAoYVtpXSkKKyNkZWZpbmUgTUFDX0FSRzIoYSkgTTIoYSwgMCksIE0yKGEsIDEpLCBNMihhLCAyKSwgTTIoYSwgMyksIE0yKGEsIDQpLCBNMihhLCA1KQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3MpCit7CisJaW50IHNvY2ssIGVyciA9IDAsIG9wdCwgbnVtID0gMTA7CisJdW5zaWduZWQgY2hhciBtYWNbRVRIX0FMRU5dOworCWNoYXIgZGV2X25hbWVbSUZOQU1TSVogKyAxXSA9IHsgMCB9OworCWJvb2wgaGFzX21hYyA9IGZhbHNlLCBoYXNfZGV2ID0gZmFsc2UsIHZlcmJvc2UgPSBmYWxzZTsKKworCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3MsICJtOmk6bjp2IikpICE9IC1FWElUX0ZBSUxVUkUpIHsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSAnaSc6CisJCQloYXNfZGV2ID0gdHJ1ZTsKKwkJCXN0cm5jcHkoZGV2X25hbWUsIG9wdGFyZywgSUZOQU1TSVopOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJaGFzX21hYyA9IHRydWU7CisJCQllcnIgPSBzc2NhbmYob3B0YXJnLCBNQUNfU1RSLCBNQUNfQVJHKG1hYykpICE9IDY7CisJCQlpZiAoZXJyKQorCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBNQUM6IFwiJXNcIlxuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ24nOgorCQkJZXJyID0gc3NjYW5mKG9wdGFyZywgIiVkIiwgJm51bSkgIT0gMTsKKwkJCWVyciB8PSBudW0gPCAxIHwgbnVtID4gMTAwMDsKKwkJCWlmIChlcnIpCisJCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHRyaWVzOiBcIiVzXCJcbiIsIG9wdGFyZyk7CisJCQlicmVhazsKKworCQljYXNlICd2JzoKKwkJCXZlcmJvc2UgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIWhhc19tYWMgfHwgIWhhc19kZXYgfHwgZXJyKQorCQl1c2FnZSgpOworCisJaWYgKHZlcmJvc2UpCisJCWZwcmludGYoc3Rkb3V0LCAiT3BlbmluZyBtb25pdG9yIGluamVjdGlvbiBpbnRlcmZhY2UgWyVzXS5cbiIsIGRldl9uYW1lKTsKKworCXNvY2sgPSBtb25pdG9yX2luaXQoZGV2X25hbWUpOworCWlmIChzb2NrIDwgMCkKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworCWlmICh2ZXJib3NlKQorCQlmcHJpbnRmKHN0ZG91dCwgIkdlbmVyYXRpbmcgJWQgV09MIHBhY2tldCBmb3IgWyJNQUNfU1RSIl0uXG4iLCBudW0sIE1BQ19BUkcyKG1hYykpOworCisJcHJlcGFyZV93b2wod29sX21hZ2ljX3RtcGwsIG1hYyk7CisKKwl3aGlsZSAobnVtLS0pIHsKKwkJZXJyID0gaW5qZWN0X2ZyYW1lKHNvY2ssIHdvbF9tYWdpY190bXBsLCBzaXplb2Yod29sX21hZ2ljX3RtcGwpKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIHNlbmQgV09MIHBhY2tldC5cbiIpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAodmVyYm9zZSkgeworCQkJZnByaW50ZihzdGRvdXQsICJXT0wgcGFja2V0IHNlbnQuXG4iKTsKKwkJfQorCX0KKworCWNsb3NlKHNvY2spOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jYmZ3LTMuMi4xLjEuYmluIGIvY2Jmdy0zLjIuMS4xLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzg2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvY2Jmdy0zLjIuMS4xLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jaXMvM0NDRkVNNTU2LmNpcyBiL2Npcy8zQ0NGRU01NTYuY2lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NTAyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jaXMvM0NDRkVNNTU2LmNpcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jaXMvM0NYRU01NTYuY2lzIGIvY2lzLzNDWEVNNTU2LmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjQwOGFjCi0tLSAvZGV2L251bGwKKysrIGIvY2lzLzNDWEVNNTU2LmNpcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jaXMvQ09NcGFkMi5jaXMgYi9jaXMvQ09NcGFkMi5jaXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhZWRkNwotLS0gL2Rldi9udWxsCisrKyBiL2Npcy9DT01wYWQyLmNpcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jaXMvQ09NcGFkNC5jaXMgYi9jaXMvQ09NcGFkNC5jaXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNhNmYwYQotLS0gL2Rldi9udWxsCisrKyBiL2Npcy9DT01wYWQ0LmNpcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jaXMvRFA4MzkwMy5jaXMgYi9jaXMvRFA4MzkwMy5jaXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc1NTMwMAotLS0gL2Rldi9udWxsCisrKyBiL2Npcy9EUDgzOTAzLmNpcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jaXMvTEEtUENNLmNpcyBiL2Npcy9MQS1QQ00uY2lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjEyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9jaXMvTEEtUENNLmNpcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jaXMvTVQ1NjM0WkxYLmNpcyBiL2Npcy9NVDU2MzRaTFguY2lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNTlmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXMvTVQ1NjM0WkxYLmNpcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jaXMvTWFrZWZpbGUgYi9jaXMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyMjJmMQotLS0gL2Rldi9udWxsCisrKyBiL2Npcy9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACisjIFRoZSBwYWNrX2NpcyB0b29sIGZyb20gY2lzLXRvb2xzCisjIDxodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvP3A9dXRpbHMvY2lzLXRvb2xzL2Npcy10b29scy5naXQ+LgorUEFDS19DSVMgPSBwYWNrX2NpcworCitDSVNfU1JDIDo9ICQod2lsZGNhcmQgc3JjLyouY2lzKQorQ0lTX0JJTiA6PSAkKG5vdGRpciAkKENJU19TUkMpKQorCithbGw6ICQoQ0lTX0JJTikKKworJS5jaXM6IHNyYy8lLmNpcworCSQoUEFDS19DSVMpIC1vICRAICQ8CisKK2NsZWFuOgorCXJtIC1mICQoQ0lTX0JJTikKZGlmZiAtLWdpdCBhL2Npcy9ORTJLLmNpcyBiL2Npcy9ORTJLLmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFjOGMxCi0tLSAvZGV2L251bGwKKysrIGIvY2lzL05FMksuY2lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Npcy9QQ01MTTI4LmNpcyBiL2Npcy9QQ01MTTI4LmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzVkOTNlCi0tLSAvZGV2L251bGwKKysrIGIvY2lzL1BDTUxNMjguY2lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Npcy9QRS0yMDAuY2lzIGIvY2lzL1BFLTIwMC5jaXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2ZTA2MQotLS0gL2Rldi9udWxsCisrKyBiL2Npcy9QRS0yMDAuY2lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Npcy9QRTUyMC5jaXMgYi9jaXMvUEU1MjAuY2lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGZhOTEKLS0tIC9kZXYvbnVsbAorKysgYi9jaXMvUEU1MjAuY2lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Npcy9SUy1DT00tMlAuY2lzIGIvY2lzL1JTLUNPTS0yUC5jaXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1ODI1MgotLS0gL2Rldi9udWxsCisrKyBiL2Npcy9SUy1DT00tMlAuY2lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Npcy9TV181NTVfU0VSLmNpcyBiL2Npcy9TV181NTVfU0VSLmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmY0NzRiCi0tLSAvZGV2L251bGwKKysrIGIvY2lzL1NXXzU1NV9TRVIuY2lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Npcy9TV183eHhfU0VSLmNpcyBiL2Npcy9TV183eHhfU0VSLmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmZjODUyCi0tLSAvZGV2L251bGwKKysrIGIvY2lzL1NXXzd4eF9TRVIuY2lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Npcy9TV184eHhfU0VSLmNpcyBiL2Npcy9TV184eHhfU0VSLmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGZkNjEzCi0tLSAvZGV2L251bGwKKysrIGIvY2lzL1NXXzh4eF9TRVIuY2lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Npcy9zcmMvM0NDRkVNNTU2LmNpcyBiL2Npcy9zcmMvM0NDRkVNNTU2LmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTYyN2QwCi0tLSAvZGV2L251bGwKKysrIGIvY2lzL3NyYy8zQ0NGRU01NTYuY2lzCkBAIC0wLDAgKzEsMjIgQEAKKyMKKyMgVGhpcyBjYXJkIGlzIE1GQy1jb21wbGlhbnQsIGJ1dCBpZGVudGlmaWVzIGl0c2VsZiBhcyBzaW5nbGUgZnVuY3Rpb24KKyMKK3ZlcnNfMSA1LjAsICIzQ29tIiwgIk1lZ2FoZXJ0eiAzQ0NGRU01NTYiLCAiTEFOICsgNTZrIE1vZGVtIgorbWFuZmlkIDB4MDEwMSwgMHgwNTU2CitmdW5jaWQgMAorCittZmMgeworICBmdW5jaWQgbmV0d29ya19hZGFwdGVyCisgIGNvbmZpZyBiYXNlIDB4MTAwMCBtYXNrIDB4MjY3IGxhc3RfaW5kZXggMHgwNworICBjZnRhYmxlX2VudHJ5IDB4MDcKKyAgICBWY2MgVm5vbSA1VgorICAgIGlycSBtYXNrIDB4ZmZmZiBbbGV2ZWxdCisgICAgaW8gIDB4MDAwMC0weDAwMGYgWzhiaXRdIFsxNmJpdF0KK30sIHsKKyAgZnVuY2lkIHNlcmlhbF9wb3J0CisgIGNvbmZpZyBiYXNlIDB4MTEwMCBtYXNrIDB4Mjc3IGxhc3RfaW5kZXggMHgyNworICBjZnRhYmxlX2VudHJ5IDB4MjcKKyAgICBWY2MgVm5vbSA1VgorICAgIGlycSBtYXNrIDB4ZmZmZiBbbGV2ZWxdCisgICAgaW8gIDB4MDAwMC0weDAwMDcgWzhiaXRdCit9CmRpZmYgLS1naXQgYS9jaXMvc3JjLzNDWEVNNTU2LmNpcyBiL2Npcy9zcmMvM0NYRU01NTYuY2lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOWYwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jaXMvc3JjLzNDWEVNNTU2LmNpcwpAQCAtMCwwICsxLDIyIEBACisjCisjIFRoaXMgY2FyZCBpcyBNRkMtY29tcGxpYW50LCBidXQgaWRlbnRpZmllcyBpdHNlbGYgYXMgc2luZ2xlIGZ1bmN0aW9uCisjCit2ZXJzXzEgNS4wLCAiM0NvbSIsICJNZWdhaGVydHogM0NYRU01NTYiLCAiTEFOICsgNTZrIE1vZGVtIgorbWFuZmlkIDB4MDEwMSwgMHgwMDM1CitmdW5jaWQgMAorCittZmMgeworICBmdW5jaWQgbmV0d29ya19hZGFwdGVyCisgIGNvbmZpZyBiYXNlIDB4MDgwMCBtYXNrIDB4NjMgbGFzdF9pbmRleCAweDA3CisgIGNmdGFibGVfZW50cnkgMHgwNworICAgIFZjYyBWbm9tIDVWCisgICAgaXJxIG1hc2sgMHhmZmZmIFtsZXZlbF0KKyAgICBpbyAgMHgwMDAwLTB4MDAwZiBbOGJpdF0gWzE2Yml0XQorfSwgeworICBmdW5jaWQgc2VyaWFsX3BvcnQKKyAgY29uZmlnIGJhc2UgMHg5MDAgbWFzayAweDYzIGxhc3RfaW5kZXggMHgyNworICBjZnRhYmxlX2VudHJ5IDB4MjcKKyAgICBWY2MgVm5vbSA1VgorICAgIGlycSBtYXNrIDB4ZmZmZiBbbGV2ZWxdCisgICAgaW8gIDB4MDAwMC0weDAwMDcgWzhiaXRdCit9CmRpZmYgLS1naXQgYS9jaXMvc3JjL0NPTXBhZDIuY2lzIGIvY2lzL3NyYy9DT01wYWQyLmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmMyMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvY2lzL3NyYy9DT01wYWQyLmNpcwpAQCAtMCwwICsxLDIwIEBACisjCisjIFJlcGxhY2VtZW50IENJUyBmb3IgQWR2YW50ZWNoIENPTXBhZC0zMi84NQorIworZGV2X2luZm8KKyAgTlVMTCAwbnMsIDUxMmIKK3ZlcnNfMSA0LjEsICJBRFZBTlRFQ0giLCAiQ09NcGFkLTMyLzg1IiwgIjEuMCIKK2Z1bmNpZCBzZXJpYWxfcG9ydCBbcG9zdF0KK2NvbmZpZyBiYXNlIDB4MDEwMCBtYXNrIDB4MDAwMyBsYXN0X2luZGV4IDB4MDUKK2NmdGFibGVfZW50cnkgMHgwMSBbZGVmYXVsdF0KKyAgW213YWl0XQorICBpbyAweDAyZTgtMHgwMmVmLCAweDAzZTgtMHgwM2VmIFtsaW5lcz0xMF0gWzhiaXRdIFtyYW5nZV0KKyAgaXJxIG1hc2sgMHg5ZWI4IFtsZXZlbF0KK2NmdGFibGVfZW50cnkgMHgwMgorICBpbyAweDAzMzAtMHgwMzNmIFtsaW5lcz0xMF0gWzhiaXRdIFtyYW5nZV0KK2NmdGFibGVfZW50cnkgMHgwMworICBpbyAweDAzNDAtMHgwMzRmIFtsaW5lcz0xMF0gWzhiaXRdIFtyYW5nZV0KK2NmdGFibGVfZW50cnkgMHgwNAorICBpbyAweDAzNTAtMHgwMzVmIFtsaW5lcz0xMF0gWzhiaXRdIFtyYW5nZV0KK2NmdGFibGVfZW50cnkgMHgwNQorICBpbyAweDAzNjAtMHgwMzZmIFtsaW5lcz0xMF0gWzhiaXRdIFtyYW5nZV0KZGlmZiAtLWdpdCBhL2Npcy9zcmMvQ09NcGFkNC5jaXMgYi9jaXMvc3JjL0NPTXBhZDQuY2lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTk5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9jaXMvc3JjL0NPTXBhZDQuY2lzCkBAIC0wLDAgKzEsMTQgQEAKKyMKKyMgUmVwbGFjZW1lbnQgQ0lTIGZvciBBZHZhbnRlY2ggQ09NcGFkLTMyLzg1Qi00CisjCitkZXZfaW5mbworICBOVUxMIDBucywgNTEyYgordmVyc18xIDQuMSwgIkFEVkFOVEVDSCIsICJDT01wYWQtMzIvODVCLTQiCitmdW5jaWQgc2VyaWFsX3BvcnQgW3Bvc3RdCitjb25maWcgYmFzZSAweDAxMDAgbWFzayAweDAwMDEgbGFzdF9pbmRleCAweDAyCitjZnRhYmxlX2VudHJ5IDB4MDEgW2RlZmF1bHRdCisgIFttd2FpdF0KKyAgaW8gMHgwMjQwLTB4MDI1ZiBbbGluZXM9MTBdIFs4Yml0XSBbcmFuZ2VdCisgIGlycSBtYXNrIDB4OWViOCBbbGV2ZWxdCitjZnRhYmxlX2VudHJ5IDB4MDIKKyAgaW8gMHgwMzQwLTB4MDM1ZiBbbGluZXM9MTBdIFs4Yml0XSBbcmFuZ2VdCmRpZmYgLS1naXQgYS9jaXMvc3JjL0RQODM5MDMuY2lzIGIvY2lzL3NyYy9EUDgzOTAzLmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTg2ZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY2lzL3NyYy9EUDgzOTAzLmNpcwpAQCAtMCwwICsxLDI0IEBACisjCisjIFRoaXMgQ0lTIGlzIGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvcgorIyBEUDgzOTAzIE11bHRpcGxlIEZ1bmN0aW9uIEludGVyZmFjZSBDaGlwCisjCit2ZXJzXzEgNC4xLCAiTXVsdGlmdW5jdGlvbiBDYXJkIiwgIiIsICIiLCAiTlNDIE1GIExBTi9Nb2RlbSIKK21hbmZpZCAweDAxNzUsIDB4MDAwMAorZnVuY2lkIDAKKworbWZjIHsKKyAgZnVuY2lkIG5ldHdvcmtfYWRhcHRlcgorICBjb25maWcgYmFzZSAweDEwMjAgbWFzayAweDI3NyBsYXN0X2luZGV4IDB4MTcKKyAgY2Z0YWJsZV9lbnRyeSAweDE3CisgICAgVmNjIFZub20gNVYKKyAgICBpcnEgbWFzayAweGZmZmYgW2xldmVsXQorICAgIGlvICAweDAwMDAtMHgwMDFmIFs4Yml0XSBbMTZiaXRdCisgICAgbWVtb3J5IDB4MDAwMC0weDNmZmYgQCAweDAwMDAKK30sIHsKKyAgZnVuY2lkIHNlcmlhbF9wb3J0CisgIGNvbmZpZyBiYXNlIDB4MTA0MCBtYXNrIDB4MDI3NyBsYXN0X2luZGV4IDB4MDcKKyAgY2Z0YWJsZV9lbnRyeSAweDA3CisgICAgVmNjIFZub20gNVYKKyAgICBpcnEgbWFzayAweGZmZmYgW2xldmVsXQorICAgIGlvICAweDAwMDAtMHgwMDA3IFs4Yml0XQorfQpkaWZmIC0tZ2l0IGEvY2lzL3NyYy9MQS1QQ00uY2lzIGIvY2lzL3NyYy9MQS1QQ00uY2lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDI3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXMvc3JjL0xBLVBDTS5jaXMKQEAgLTAsMCArMSw0NCBAQAorIworIyBSZXBsYWNlbWVudCBDSVMgZm9yIEFsbGllZCBUZWxlc2lzIExBLVBDTQorIworZGV2X2luZm8KKyAgZm5fc3BlY2lmaWMgMTAwbnMsIDY0a2IKKyAgRkxBU0ggMTUwbnMsIDYwa2IKK2F0dHJfZGV2X2luZm8KKyAgRkxBU0ggMTUwbnMsIDRrYgorbWFuZmlkIDB4YzAwZiwgMHgwMDAyCitmdW5jaWQgbmV0d29ya19hZGFwdGVyIFtwb3N0XSBbcm9tXQordmVyc18xIDQuMSwgIkFsbGllZCBUZWxlc2lzLEsuSyIsICJFdGhlcm5ldCBMQU4gQ2FyZCIsICJDZW50cmVDT00iLCAiTEEtUENNIgorY29uZmlnIGJhc2UgMHgyMDAwMCBtYXNrIDB4MDAwYiBsYXN0X2luZGV4IDB4MTAKK2NmdGFibGVfZW50cnkgMHgwMQorICBpbyAweDAyMDAtMHgwMjFmIFs4Yml0XSBbMTZiaXRdCitjZnRhYmxlX2VudHJ5IDB4MDIKKyAgaW8gMHgwMjIwLTB4MDIzZiBbOGJpdF0gWzE2Yml0XQorY2Z0YWJsZV9lbnRyeSAweDAzCisgIGlvIDB4MDI0MC0weDAyNWYgWzhiaXRdIFsxNmJpdF0KK2NmdGFibGVfZW50cnkgMHgwNAorICBpbyAweDAyNjAtMHgwMjdmIFs4Yml0XSBbMTZiaXRdCitjZnRhYmxlX2VudHJ5IDB4MDUKKyAgaW8gMHgwMjgwLTB4MDI5ZiBbOGJpdF0gWzE2Yml0XQorY2Z0YWJsZV9lbnRyeSAweDA2CisgIGlvIDB4MDJhMC0weDAyYmYgWzhiaXRdIFsxNmJpdF0KK2NmdGFibGVfZW50cnkgMHgwNworICBpbyAweDAyYzAtMHgwMmRmIFs4Yml0XSBbMTZiaXRdCitjZnRhYmxlX2VudHJ5IDB4MDgKKyAgaW8gMHgwMmUwLTB4MDJmZiBbOGJpdF0gWzE2Yml0XQorY2Z0YWJsZV9lbnRyeSAweDA5CisgIGlvIDB4MDMwMC0weDAzMWYgWzhiaXRdIFsxNmJpdF0KK2NmdGFibGVfZW50cnkgMHgwYQorICBpbyAweDAzMjAtMHgwMzNmIFs4Yml0XSBbMTZiaXRdCitjZnRhYmxlX2VudHJ5IDB4MGIKKyAgaW8gMHgwMzQwLTB4MDM1ZiBbOGJpdF0gWzE2Yml0XQorY2Z0YWJsZV9lbnRyeSAweDBjCisgIGlvIDB4MDM2MC0weDAzN2YgWzhiaXRdIFsxNmJpdF0KK2NmdGFibGVfZW50cnkgMHgwZAorICBpbyAweDAzODAtMHgwMzlmIFs4Yml0XSBbMTZiaXRdCitjZnRhYmxlX2VudHJ5IDB4MGUKKyAgaW8gMHgwM2EwLTB4MDNiZiBbOGJpdF0gWzE2Yml0XQorY2Z0YWJsZV9lbnRyeSAweDBmCisgIGlvIDB4MDNjMC0weDAzZGYgWzhiaXRdIFsxNmJpdF0KK2NmdGFibGVfZW50cnkgMHgxMAorICBpbyAweDAzZTAtMHgwM2ZmIFs4Yml0XSBbMTZiaXRdCmRpZmYgLS1naXQgYS9jaXMvc3JjL01UNTYzNFpMWC5jaXMgYi9jaXMvc3JjL01UNTYzNFpMWC5jaXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIyNDliMwotLS0gL2Rldi9udWxsCisrKyBiL2Npcy9zcmMvTVQ1NjM0WkxYLmNpcwpAQCAtMCwwICsxLDE4IEBACisjCisjIFJlcGxhY2VtZW50IENJUyBmb3IgTXVsdGl0ZWNoIE1UNTYzNFpMWCBtb2RlbXMKKyMKK2Rldl9pbmZvIG5vX2luZm8KK3ZlcnNfMSA0LjEsICJNdWx0aVRlY2giLCAiUENNQ0lBIDU2SyBEYXRhRmF4IgorbWFuZmlkIDB4MDIwMCwgMHgwMDAxCitmdW5jaWQgc2VyaWFsX3BvcnQKK2NvbmZpZyBiYXNlIDB4ZmY4MCBtYXNrIDB4MDA2NyBsYXN0X2luZGV4IDB4MjcKK2NmdGFibGVfZW50cnkgMHgwZiBbZGVmYXVsdF0KKyAgW3JkeWJzeV0gW2F1ZGlvXSBbcHdyZG93bl0KKyAgVmNjIFZub20gNVYgVnBwMSBWbm9tIDVWIFZwcDIgVm5vbSA1VgorICBpbyAweDAzZjgtMHgwM2ZmIFtsaW5lcz0xMF0gWzhiaXRdCitjZnRhYmxlX2VudHJ5IDB4MTcKKyAgaW8gMHgwMmY4LTB4MDJmZiBbbGluZXM9MTBdIFs4Yml0XQorY2Z0YWJsZV9lbnRyeSAweDFmCisgIGlvIDB4MDNlOC0weDAzZWYgW2xpbmVzPTEwXSBbOGJpdF0KK2NmdGFibGVfZW50cnkgMHgyNworICBpbyAweDAyZTgtMHgwMmVmIFtsaW5lcz0xMF0gWzhiaXRdCmRpZmYgLS1naXQgYS9jaXMvc3JjL05FMksuY2lzIGIvY2lzL3NyYy9ORTJLLmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWQ0N2YzCi0tLSAvZGV2L251bGwKKysrIGIvY2lzL3NyYy9ORTJLLmNpcwpAQCAtMCwwICsxLDEwIEBACisjCisjIFJlcGxhY2VtZW50IENJUyBmb3IgdmFyaW91cyBidXN0ZWQgTkUyMDAwLWNvbXBhdGlibGUgY2FyZHMKKyMKK3ZlcnNfMSA0LjEsICJQQ01DSUEiLCAiRXRoZXJuZXQiCitmdW5jaWQgbmV0d29ya19hZGFwdGVyCitjb25maWcgYmFzZSAweDAzZjggbWFzayAweDAzIGxhc3RfaW5kZXggMHgyMAorY2Z0YWJsZV9lbnRyeSAweDIwIFtkZWZhdWx0XQorICBWY2MgVm5vbSA1VgorICBpcnEgbWFzayAweGZmZmYgW2xldmVsXQorICBpbyAweDAwMDAtMHgwMDFmIFs4Yml0XSBbMTZiaXRdCmRpZmYgLS1naXQgYS9jaXMvc3JjL1BDTUxNMjguY2lzIGIvY2lzL3NyYy9QQ01MTTI4LmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWM2ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvY2lzL3NyYy9QQ01MTTI4LmNpcwpAQCAtMCwwICsxLDM3IEBACisjCisjIFRoZSBvbi1jYXJkIENJUyBzYXlzIGl0IGlzIE1GQy1jb21wbGlhbnQsIGJ1dCBpdCBpcyBub3QKKyMKK3ZlcnNfMSA0LjEsICJMSU5LU1lTIiwgIlBDTUxNMjgiCittYW5maWQgMHgwMTQzLCAweGMwYWIKK2Z1bmNpZCAwCitjb25maWcgYmFzZSAweDAzZjggbWFzayAweDAzIGxhc3RfaW5kZXggMHgyZgorCitjZnRhYmxlX2VudHJ5IDB4MjQgW2RlZmF1bHRdCisgIFZjYyBWbm9tIDVWCisgIGlycSBtYXNrIDB4ZmZmZiBbbGV2ZWxdCisgIGlvIDB4MDMwMC0weDAzMWYsIDB4MDJmOC0weDAyZmYgWzhiaXRdIFsxNmJpdF0KKworY2Z0YWJsZV9lbnRyeSAweDI1CisgIGlvIDB4MDMyMC0weDAzM2YsIDB4MDJmOC0weDAyZmYgWzhiaXRdIFsxNmJpdF0KK2NmdGFibGVfZW50cnkgMHgyNgorICBpbyAweDAzNDAtMHgwMzVmLCAweDAyZjgtMHgwMmZmIFs4Yml0XSBbMTZiaXRdCitjZnRhYmxlX2VudHJ5IDB4MjcKKyAgaW8gMHgwMzYwLTB4MDM3ZiwgMHgwMmY4LTB4MDJmZiBbOGJpdF0gWzE2Yml0XQorCitjZnRhYmxlX2VudHJ5IDB4MjgKKyAgaW8gMHgwMzAwLTB4MDMxZiwgMHgwM2U4LTB4MDNlZiBbOGJpdF0gWzE2Yml0XQorY2Z0YWJsZV9lbnRyeSAweDI5CisgIGlvIDB4MDMyMC0weDAzM2YsIDB4MDNlOC0weDAzZWYgWzhiaXRdIFsxNmJpdF0KK2NmdGFibGVfZW50cnkgMHgyYQorICBpbyAweDAzNDAtMHgwMzVmLCAweDAzZTgtMHgwM2VmIFs4Yml0XSBbMTZiaXRdCitjZnRhYmxlX2VudHJ5IDB4MmIKKyAgaW8gMHgwMzYwLTB4MDM3ZiwgMHgwM2U4LTB4MDNlZiBbOGJpdF0gWzE2Yml0XQorCitjZnRhYmxlX2VudHJ5IDB4MmMKKyAgaW8gMHgwMzAwLTB4MDMxZiwgMHgwMmU4LTB4MDJlZiBbOGJpdF0gWzE2Yml0XQorY2Z0YWJsZV9lbnRyeSAweDJkCisgIGlvIDB4MDMyMC0weDAzM2YsIDB4MDJlOC0weDAyZWYgWzhiaXRdIFsxNmJpdF0KK2NmdGFibGVfZW50cnkgMHgyZQorICBpbyAweDAzNDAtMHgwMzVmLCAweDAyZTgtMHgwMmVmIFs4Yml0XSBbMTZiaXRdCitjZnRhYmxlX2VudHJ5IDB4MmYKKyAgaW8gMHgwMzYwLTB4MDM3ZiwgMHgwMmU4LTB4MDJlZiBbOGJpdF0gWzE2Yml0XQpkaWZmIC0tZ2l0IGEvY2lzL3NyYy9QRS0yMDAuY2lzIGIvY2lzL3NyYy9QRS0yMDAuY2lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYjc0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jaXMvc3JjL1BFLTIwMC5jaXMKQEAgLTAsMCArMSwxMSBAQAorIworIyBSZXBsYWNlbWVudCBDSVMgZm9yIFBFLTIwMCBldGhlcm5ldCBjYXJkCisjCit2ZXJzXzEgNC4xLCAiUE1YICAgIiwgIlBFLTIwMCIsICJFVEhFUk5FVCIsICJSMDEiCitmdW5jaWQgbmV0d29ya19hZGFwdGVyIFtwb3N0XSBbcm9tXQorY29uZmlnIGJhc2UgMHgwMTAwIG1hc2sgMHgwMDAxIGxhc3RfaW5kZXggMHgwMQorY2Z0YWJsZV9lbnRyeSAweDEgW2RlZmF1bHRdCisgIFttd2FpdF0KKyAgVmNjIFZub20gNVYKKyAgaXJxIG1hc2sgMHhmZmZmIFtsZXZlbF0KKyAgaW8gMHgwMDAwLTB4MDAwZiwgMHgwMDEwLTB4MDAxZiBbOGJpdF0gWzE2Yml0XQpkaWZmIC0tZ2l0IGEvY2lzL3NyYy9QRTUyMC5jaXMgYi9jaXMvc3JjL1BFNTIwLmNpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjQxMWFiCi0tLSAvZGV2L251bGwKKysrIGIvY2lzL3NyYy9QRTUyMC5jaXMKQEAgLTAsMCArMSwxMSBAQAorIworIyBSZXBsYWNlbWVudCBDSVMgZm9yIExhblBybyBFUC00MDAwQSBldGhlcm5ldCBjYXJkCisjCit2ZXJzXzEgNC4xLCAiS1RJIiwgIlBFNTIwIFBMVVMiLCAiUENNQ0lBIEV0aGVybmV0IgorbWFuZmlkIDB4MDE2MSwgMHgwMDEwCitmdW5jaWQgbmV0d29ya19hZGFwdGVyCitjb25maWcgYmFzZSAweDBmZDAgbWFzayAweDBiIGxhc3RfaW5kZXggMHgwMQorY2Z0YWJsZV9lbnRyeSAweDAxIFtkZWZhdWx0XQorICBWY2MgVm5vbSA1VgorICBpcnEgbWFzayAweGZmZmYgW2xldmVsXQorICBpbyAweDAwMDAtMHgwMDFmIFs4Yml0XSBbMTZiaXRdCmRpZmYgLS1naXQgYS9jaXMvc3JjL1JTLUNPTS0yUC5jaXMgYi9jaXMvc3JjL1JTLUNPTS0yUC5jaXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzODVjYgotLS0gL2Rldi9udWxsCisrKyBiL2Npcy9zcmMvUlMtQ09NLTJQLmNpcwpAQCAtMCwwICsxLDE0IEBACisjCisjIFJlcGxhY2VtZW50IENJUyBmb3IgZHVhbC1zZXJpYWwtcG9ydCBJTyBjYXJkCisjCit2ZXJzXzEgNC4xLCAiUENNQ0lBIiwgIlJTLUNPTSAyUCIKK2Z1bmNpZCBzZXJpYWxfcG9ydCBbcG9zdF0KK2NvbmZpZyBiYXNlIDB4MDEwMCBtYXNrIDB4MDAwMSBsYXN0X2luZGV4IDB4MDMKK2NmdGFibGVfZW50cnkgMHgwMSBbZGVmYXVsdF0KKyAgW213YWl0XQorICBpbyAweDAzZTgtMHgwM2VmLCAweDAyZTgtMHgwMmVmIFtsaW5lcz0xMF0gWzhiaXRdIFtyYW5nZV0KKyAgaXJxIG1hc2sgMHg5ZWI4IFtsZXZlbF0KK2NmdGFibGVfZW50cnkgMHgwMgorICBpbyAweDAyNTAtMHgwMjU3LCAweDAyNTgtMHgwMjVmIFtsaW5lcz0xMF0gWzhiaXRdIFtyYW5nZV0KK2NmdGFibGVfZW50cnkgMHgwMworICBpbyAweDAyNjAtMHgwMjY3LCAweDAyNjgtMHgwMjZmIFtsaW5lcz0xMF0gWzhiaXRdIFtyYW5nZV0KZGlmZiAtLWdpdCBhL2Npcy9zcmMvdGFtYXJhY2suY2lzIGIvY2lzL3NyYy90YW1hcmFjay5jaXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwMjY5NAotLS0gL2Rldi9udWxsCisrKyBiL2Npcy9zcmMvdGFtYXJhY2suY2lzCkBAIC0wLDAgKzEsMTcgQEAKKyMKKyMgUmVwbGFjZW1lbnQgQ0lTIGZvciBTdXJlY29tLCBUYW1hcmFjayBORTIwMDAgY2FyZHMKKyMKK2Rldl9pbmZvCisgIGZuX3NwZWNpZmljIDEwMG5zLCA1MTJiCithdHRyX2Rldl9pbmZvCisgIEVFUFJPTSAyNTBucywgNTEyYgordmVyc18xIDQuMSwgIlRBTUFSQUNLIiwgIkV0aGVybmV0IiwgIkEiLCAiMDA0NzQzMTE4MDAxIgorZnVuY2lkIG5ldHdvcmtfYWRhcHRlcgorY29uZmlnIGJhc2UgMHgwM2Y4IG1hc2sgMHgwMDAzIGxhc3RfaW5kZXggMHgyMAorY2Z0YWJsZV9lbnRyeSAweDIwIFtkZWZhdWx0XQorICBbbXdhaXRdCisgIFZjYyBWbm9tIDVWIFZtaW4gNDUwMG1WIFZtYXggNTUwMG1WIElzdGF0aWMgMTAwbUEKKyAgICBJYXZnIDE3MG1BIElwZWFrIDIwMG1BCisgIHRpbWluZyB3YWl0IDE1dXMKKyAgaW8gMHgwMDAwLTB4MDAwZiwgMHgwMDEwLTB4MDAxZiBbbGluZXM9NV0gWzhiaXRdIFsxNmJpdF0KKyAgaXJxIG1hc2sgMHhmZmZmIFtsZXZlbF0KZGlmZiAtLWdpdCBhL2Npcy90YW1hcmFjay5jaXMgYi9jaXMvdGFtYXJhY2suY2lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Yzg4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9jaXMvdGFtYXJhY2suY2lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjYwZjlhCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlCkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL2Jhc2gKKyMgLSotIG1vZGU6IHNoIC0qLQorIyBPdXIgTWFrZWZpbGUgZG9lc24ndCBkbyBzcmNkaXIgIT0gYnVpbGRkaXIKKyNidWlsZGFwaS12YXJpYWJsZS1uby1idWlsZGRpcgpkaWZmIC0tZ2l0IGEvY3BpYTIvc3R2MDY3Ml92cDQuYmluIGIvY3BpYTIvc3R2MDY3Ml92cDQuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NjU4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9jcGlhMi9zdHYwNjcyX3ZwNC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3QyZnctMy4yLjEuMS5iaW4gYi9jdDJmdy0zLjIuMS4xLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjU4NDA5Ci0tLSAvZGV2L251bGwKKysrIGIvY3QyZnctMy4yLjEuMS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3RlZnguYmluIGIvY3RlZnguYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOTQ1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdGVmeC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3Rmdy0zLjIuMS4xLmJpbiBiL2N0ZnctMy4yLjEuMS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmNDJhMQotLS0gL2Rldi9udWxsCisrKyBiL2N0ZnctMy4yLjEuMS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3RzcGVxLmJpbiBiL2N0c3BlcS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmMDIwMwotLS0gL2Rldi9udWxsCisrKyBiL2N0c3BlcS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjMvYWVsMjAwNV9vcHRfZWRjLmJpbiBiL2N4Z2IzL2FlbDIwMDVfb3B0X2VkYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyZmZkOQotLS0gL2Rldi9udWxsCisrKyBiL2N4Z2IzL2FlbDIwMDVfb3B0X2VkYy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjMvYWVsMjAwNV90d3hfZWRjLmJpbiBiL2N4Z2IzL2FlbDIwMDVfdHd4X2VkYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNlOTFmYQotLS0gL2Rldi9udWxsCisrKyBiL2N4Z2IzL2FlbDIwMDVfdHd4X2VkYy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjMvYWVsMjAyMF90d3hfZWRjLmJpbiBiL2N4Z2IzL2FlbDIwMjBfdHd4X2VkYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjZjcwYQotLS0gL2Rldi9udWxsCisrKyBiL2N4Z2IzL2FlbDIwMjBfdHd4X2VkYy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjMvdDNiX3BzcmFtLTEuMS4wLmJpbiBiL2N4Z2IzL3QzYl9wc3JhbS0xLjEuMC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkNDM2OQotLS0gL2Rldi9udWxsCisrKyBiL2N4Z2IzL3QzYl9wc3JhbS0xLjEuMC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjMvdDNjX3BzcmFtLTEuMS4wLmJpbiBiL2N4Z2IzL3QzY19wc3JhbS0xLjEuMC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1ODcxMgotLS0gL2Rldi9udWxsCisrKyBiL2N4Z2IzL3QzY19wc3JhbS0xLjEuMC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjMvdDNmdy03LjAuMC5iaW4gYi9jeGdiMy90M2Z3LTcuMC4wLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjQ4ZTRhCi0tLSAvZGV2L251bGwKKysrIGIvY3hnYjMvdDNmdy03LjAuMC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjMvdDNmdy03LjEuMC5iaW4gYi9jeGdiMy90M2Z3LTcuMS4wLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTI4NWNlCi0tLSAvZGV2L251bGwKKysrIGIvY3hnYjMvdDNmdy03LjEuMC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjMvdDNmdy03LjEwLjAuYmluIGIvY3hnYjMvdDNmdy03LjEwLjAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNWMzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9jeGdiMy90M2Z3LTcuMTAuMC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjMvdDNmdy03LjEyLjAuYmluIGIvY3hnYjMvdDNmdy03LjEyLjAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOWNlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jeGdiMy90M2Z3LTcuMTIuMC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjMvdDNmdy03LjQuMC5iaW4gYi9jeGdiMy90M2Z3LTcuNC4wLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Q4ZmMyCi0tLSAvZGV2L251bGwKKysrIGIvY3hnYjMvdDNmdy03LjQuMC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjQvdDRmdy0xLjYuMi4wLmJpbiBiL2N4Z2I0L3Q0ZnctMS42LjIuMC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyYjUwZgotLS0gL2Rldi9udWxsCisrKyBiL2N4Z2I0L3Q0ZnctMS42LjIuMC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3hnYjQvdDRmdy5iaW4gYi9jeGdiNC90NGZ3LmJpbgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi44MzBjYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvY3hnYjQvdDRmdy5iaW4KQEAgLTAsMCArMSBAQAordDRmdy0xLjYuMi4wLmJpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RhYnVzYi9iaXRzdHJlYW0uYmluIGIvZGFidXNiL2JpdHN0cmVhbS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNiYzMxOQotLS0gL2Rldi9udWxsCisrKyBiL2RhYnVzYi9iaXRzdHJlYW0uYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RhYnVzYi9maXJtd2FyZS5mdyBiL2RhYnVzYi9maXJtd2FyZS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGY0NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZGFidXNiL2Zpcm13YXJlLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RzcDU2ay9NYWtlZmlsZSBiL2RzcDU2ay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzU4YTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHNwNTZrL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorYm9vdHN0cmFwLmJpbjogYm9vdHN0cmFwLmFzbSBjb25jYXQtYm9vdHN0cmFwLnBsCisJYTU2IGJvb3RzdHJhcC5hc20gPi9kZXYvbnVsbAorCXBlcmwgY29uY2F0LWJvb3RzdHJhcC5wbCA8YTU2Lm91dCA+Ym9vdHN0cmFwLmJpbgorCitjbGVhbjoKKwlybSAtZiBhNTYub3V0IGJvb3RzdHJhcC5iaW4KZGlmZiAtLWdpdCBhL2RzcDU2ay9ib290c3RyYXAuYXNtIGIvZHNwNTZrL2Jvb3RzdHJhcC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxMTA0NwotLS0gL2Rldi9udWxsCisrKyBiL2RzcDU2ay9ib290c3RyYXAuYXNtCkBAIC0wLDAgKzEsOTggQEAKKzsgQXV0aG9yOiBGcmVkZXJpayBOb3JpbmcgPG5vcmluZ0Bub2NyZXcub3JnPgorOworOyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworOyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorOyBmb3IgbW9yZSBkZXRhaWxzLgorCis7IERTUDU2ayBsb2FkZXIKKworOyBIb3N0IEludGVyZmFjZQorTV9CQ1IgICBFUVUgICAgICRGRkZFICAgICAgICAgICA7IFBvcnQgQSBCdXMgQ29udHJvbCBSZWdpc3RlcgorTV9QQkMgICBFUVUgICAgICRGRkUwICAgICAgICAgICA7IFBvcnQgQiBDb250cm9sIFJlZ2lzdGVyCitNX1BCRERSIEVRVSAgICAgJEZGRTIgICAgICAgICAgIDsgUG9ydCBCIERhdGEgRGlyZWN0aW9uIFJlZ2lzdGVyCitNX1BCRCAgIEVRVSAgICAgJEZGRTQgICAgICAgICAgIDsgUG9ydCBCIERhdGEgUmVnaXN0ZXIKK01fUENDICAgRVFVICAgICAkRkZFMSAgICAgICAgICAgOyBQb3J0IEMgQ29udHJvbCBSZWdpc3RlcgorTV9QQ0REUiBFUVUgICAgICRGRkUzICAgICAgICAgICA7IFBvcnQgQyBEYXRhIERpcmVjdGlvbiBSZWdpc3RlcgorTV9QQ0QgICBFUVUgICAgICRGRkU1ICAgICAgICAgICA7IFBvcnQgQyBEYXRhIFJlZ2lzdGVyCisKK01fSENSICAgRVFVICAgICAkRkZFOCAgICAgICAgICAgOyBIb3N0IENvbnRyb2wgUmVnaXN0ZXIKK01fSFNSICAgRVFVICAgICAkRkZFOSAgICAgICAgICAgOyBIb3N0IFN0YXR1cyBSZWdpc3RlcgorTV9IUlggICBFUVUgICAgICRGRkVCICAgICAgICAgICA7IEhvc3QgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyCitNX0hUWCAgIEVRVSAgICAgJEZGRUIgICAgICAgICAgIDsgSG9zdCBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyCisKKzsgU1NJLCBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlCitNX1JYICAgIEVRVSAgICAgJEZGRUYgICAgICAgICAgIDsgU2VyaWFsIFJlY2VpdmUgRGF0YSBSZWdpc3RlcgorTV9UWCAgICBFUVUgICAgICRGRkVGICAgICAgICAgICA7IFNlcmlhbCBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyCitNX0NSQSAgIEVRVSAgICAgJEZGRUMgICAgICAgICAgIDsgU1NJIENvbnRyb2wgUmVnaXN0ZXIgQQorTV9DUkIgICBFUVUgICAgICRGRkVEICAgICAgICAgICA7IFNTSSBDb250cm9sIFJlZ2lzdGVyIEIKK01fU1IgICAgRVFVICAgICAkRkZFRSAgICAgICAgICAgOyBTU0kgU3RhdHVzIFJlZ2lzdGVyCitNX1RTUiAgIEVRVSAgICAgJEZGRUUgICAgICAgICAgIDsgU1NJIFRpbWUgU2xvdCBSZWdpc3RlcgorCis7IEV4Y2VwdGlvbiBQcm9jZXNzaW5nCitNX0lQUiAgIEVRVSAgICAgJEZGRkYgICAgICAgICAgIDsgSW50ZXJydXB0IFByaW9yaXR5IFJlZ2lzdGVyCisKKyAgICAgICAgb3JnICAgICBQOiQwCitzdGFydCAgIGptcCAgICAgPCQ0MAorCisgICAgICAgIG9yZyAgICAgUDokNDAKKzsgICAgICAgOyBaZXJvIDE2Mzg0IERTUCBYIGFuZCBZIHdvcmRzCis7ICAgICAgIGNsciAgICAgQSAjMCxyMAorOyAgICAgICBjbHIgICAgIEIgIzAscjQKKzsgICAgICAgZG8gICAgICAjNjQsPF9ibG9jazEKKzsgICAgICAgcmVwICAgICAjMjU2Cis7ICAgICAgIG1vdmUgICAgQSxYOihyMCkrIEIsWToocjQpKworO19ibG9jazEgICAgICAgIDsgWmVybyAoMzI3NjgtNTEyKSBQcm9ncmFtIHdvcmRzCis7ICAgICAgIGNsciAgICAgQSAjNTEyLHIwCis7ICAgICAgIGRvICAgICAgIzEyNiw8X2Jsb2NrMgorOyAgICAgICByZXAgICAgICMyNTYKKzsgICAgICAgbW92ZSAgICBBLFA6KHIwKSsKKztfYmxvY2syCisKKyAgICAgICAgOyBDb3B5IERTUCBwcm9ncmFtIGNvbnRyb2wKKyAgICAgICAgbW92ZSAgICAjcmVhbCxyMAorICAgICAgICBtb3ZlICAgICN1cGxvYWQscjEKKyAgICAgICAgZG8gICAgICAjdXBsb2FkX2VuZC11cGxvYWQsX2NvcHkKKyAgICAgICAgbW92ZW0gICAgUDoocjApKyx4MAorICAgICAgICBtb3ZlbSAgICB4MCxQOihyMSkrCitfY29weSAgIG1vdmVwICAgIzQsWDo8PE1fSENSCisgICAgICAgIG1vdmVwICAgIyRjMDAsWDo8PE1fSVBSCisgICAgICAgIGFuZCAgICAgIzwkZmUsbXIKKyAgICAgICAgam1wICAgICB1cGxvYWQKKworcmVhbAorICAgICAgICBvcmcgICAgIFA6JDdlYTkKK3VwbG9hZAorICAgICAgICBtb3ZlcCAgICMxLFg6PDxNX1BCQworICAgICAgICBtb3ZlcCAgICMwLFg6PDxNX0JDUgorCituZXh0ICAgIGpjbHIgICAgIzAsWDo8PE1fSFNSLCoKKyAgICAgICAgbW92ZXAgICBYOjw8TV9IUlgsQQorICAgICAgICBtb3ZlICAgICM+Myx4MAorICAgICAgICBjbXAgICAgIHgwLEEgIz4xLHgwCisgICAgICAgIGplcSAgICAgPCQwCitfZ2V0X2FkZHJlc3MKKyAgICAgICAgamNsciAgICAjMCxYOjw8TV9IU1IsX2dldF9hZGRyZXNzCisgICAgICAgIG1vdmVwICAgWDo8PE1fSFJYLHIwCitfZ2V0X2xlbmd0aAorICAgICAgICBqY2xyICAgICMwLFg6PDxNX0hTUixfZ2V0X2xlbmd0aAorICAgICAgICBtb3ZlcCAgIFg6PDxNX0hSWCx5MAorICAgICAgICBjbXAgICAgIHgwLEEgIz4yLHgwCisgICAgICAgIGplcSAgICAgbG9hZF9YCisgICAgICAgIGNtcCAgICAgeDAsQQorICAgICAgICBqZXEgICAgIGxvYWRfWQorCitsb2FkX1AgIGRvICAgICAgeTAsX2xvYWRfUAorICAgICAgICBqY2xyICAgICMwLFg6PDxNX0hTUiwqCisgICAgICAgIG1vdmVwICAgWDo8PE1fSFJYLFA6KHIwKSsKK19sb2FkX1Agam1wICAgICBuZXh0Citsb2FkX1ggIGRvICAgICAgeTAsX2xvYWRfWAorICAgICAgICBqY2xyICAgICMwLFg6PDxNX0hTUiwqCisgICAgICAgIG1vdmVwICAgWDo8PE1fSFJYLFg6KHIwKSsKK19sb2FkX1ggam1wICAgICBuZXh0Citsb2FkX1kgIGRvICAgICAgeTAsX2xvYWRfWQorICAgICAgICBqY2xyICAgICMwLFg6PDxNX0hTUiwqCisgICAgICAgIG1vdmVwICAgWDo8PE1fSFJYLFk6KHIwKSsKK19sb2FkX1kgam1wICAgICBuZXh0CisKK3VwbG9hZF9lbmQKKyAgICAgICAgZW5kCmRpZmYgLS1naXQgYS9kc3A1NmsvYm9vdHN0cmFwLmJpbiBiL2RzcDU2ay9ib290c3RyYXAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxODBjZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kc3A1NmsvYm9vdHN0cmFwLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kc3A1NmsvY29uY2F0LWJvb3RzdHJhcC5wbCBiL2RzcDU2ay9jb25jYXQtYm9vdHN0cmFwLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZDkwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9kc3A1NmsvY29uY2F0LWJvb3RzdHJhcC5wbApAQCAtMCwwICsxLDMzIEBACisjIFBvc3Rwcm9jZXNzb3IgZm9yIGRzcDU2ayBib290c3RyYXAgY29kZS4KKyMKKyMgQ29weXJpZ2h0IEJlbiBIdXRjaGluZ3MgMjAxMS4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKworbXkgQG1lbW9yeTsKK215ICVzeW1ib2w7CisKKyMgUmVjb25zdHJ1Y3QgbWVtb3J5IGltYWdlIGFuZCBzeW1ib2wgdGFibGUKK3doaWxlICg8PikgeworICAgIGlmICgvXlAgKFswLTlBLUZdezR9KSAoWzAtOUEtRl17Nn0pXG4vKSB7CisJJG1lbW9yeVtoZXgoJDEpXSA9IGhleCgkMik7CisgICAgfSBlbHNpZiAoL15JIChbMC05QS1GXXs2fSkgKFx3Kylcbi8pIHsKKwkkc3ltYm9seyQyfSA9IGhleCgkMSk7CisgICAgfSBlbHNlIHsKKwlwcmludCBTVERFUlIgIlc6IGRpZCBub3QgcmVjb2duaXNlIGxpbmUgJC5cbiI7CisgICAgfQorfQorCisjIENvbmNhdGVuYXRlIGZpcnN0IGFuZCBzZWNvbmQgc3RhZ2UuICBTZWNvbmQgc3RhZ2UgaXMgYXNzZW1ibGVkCisjIGJldHdlZW4gJ3VwbG9hZCcgYW5kICd1cGxvYWRfZW5kJywgYnV0IGluaXRpYWxseSBsb2FkZWQgYXQKKyMgJ3JlYWwnIChlbmQgb2YgdGhlIGZpcnN0IHN0YWdlKS4KK2ZvciAoMCAuLiAoJHN5bWJvbHtyZWFsfSAtIDEpLCAkc3ltYm9se3VwbG9hZH0gLi4gKCRzeW1ib2x7dXBsb2FkX2VuZH0gLSAxKSkgeworICAgIG15ICR3b3JkID0gJG1lbW9yeVskX10gfHwgMDsKKyAgICBwcmludCBwYWNrKCdDQ0MnLCAkd29yZCAvIDY1NTM2LCAoJHdvcmQgLyAyNTYpICUgMjU2LCAkd29yZCAlIDI1Nik7Cit9CmRpZmYgLS1naXQgYS9kdmItZmUteGM1MDAwLTEuNi4xMTQuZncgYi9kdmItZmUteGM1MDAwLTEuNi4xMTQuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwZjhjNwotLS0gL2Rldi9udWxsCisrKyBiL2R2Yi1mZS14YzUwMDAtMS42LjExNC5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kdmItdXNiLWRpYjA3MDAtMS4yMC5mdyBiL2R2Yi11c2ItZGliMDcwMC0xLjIwLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDEyNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kdmItdXNiLWRpYjA3MDAtMS4yMC5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kdmItdXNiLXRlcnJhdGVjLWg1LWRyeGsuZncgYi9kdmItdXNiLXRlcnJhdGVjLWg1LWRyeGsuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJhZDM5MgotLS0gL2Rldi9udWxsCisrKyBiL2R2Yi11c2ItdGVycmF0ZWMtaDUtZHJ4ay5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMTAwL2QxMDFtX3Vjb2RlLmJpbiBiL2UxMDAvZDEwMW1fdWNvZGUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MDBiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9lMTAwL2QxMDFtX3Vjb2RlLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMTAwL2QxMDFzX3Vjb2RlLmJpbiBiL2UxMDAvZDEwMXNfdWNvZGUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NjllMDYKLS0tIC9kZXYvbnVsbAorKysgYi9lMTAwL2QxMDFzX3Vjb2RlLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMTAwL2QxMDJlX3Vjb2RlLmJpbiBiL2UxMDAvZDEwMmVfdWNvZGUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZmM2NWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMTAwL2QxMDJlX3Vjb2RlLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lZGdlcG9ydC9ib290LmZ3IGIvZWRnZXBvcnQvYm9vdC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjlmNjYwCi0tLSAvZGV2L251bGwKKysrIGIvZWRnZXBvcnQvYm9vdC5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lZGdlcG9ydC9ib290Mi5mdyBiL2VkZ2Vwb3J0L2Jvb3QyLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OTAwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9lZGdlcG9ydC9ib290Mi5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lZGdlcG9ydC9kb3duLmZ3IGIvZWRnZXBvcnQvZG93bi5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDE2Y2U1Ci0tLSAvZGV2L251bGwKKysrIGIvZWRnZXBvcnQvZG93bi5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lZGdlcG9ydC9kb3duMi5mdyBiL2VkZ2Vwb3J0L2Rvd24yLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZWM5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9lZGdlcG9ydC9kb3duMi5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lZGdlcG9ydC9kb3duMy5iaW4gYi9lZGdlcG9ydC9kb3duMy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwNmRkMQotLS0gL2Rldi9udWxsCisrKyBiL2VkZ2Vwb3J0L2Rvd24zLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbWkyNi9iaXRzdHJlYW0uZncgYi9lbWkyNi9iaXRzdHJlYW0uZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxYWJmZAotLS0gL2Rldi9udWxsCisrKyBiL2VtaTI2L2JpdHN0cmVhbS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbWkyNi9maXJtd2FyZS5mdyBiL2VtaTI2L2Zpcm13YXJlLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NWI2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9lbWkyNi9maXJtd2FyZS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbWkyNi9sb2FkZXIuZncgYi9lbWkyNi9sb2FkZXIuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5YTY5MwotLS0gL2Rldi9udWxsCisrKyBiL2VtaTI2L2xvYWRlci5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbWk2Mi9iaXRzdHJlYW0uZncgYi9lbWk2Mi9iaXRzdHJlYW0uZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxYWJmZAotLS0gL2Rldi9udWxsCisrKyBiL2VtaTYyL2JpdHN0cmVhbS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbWk2Mi9sb2FkZXIuZncgYi9lbWk2Mi9sb2FkZXIuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwZTVlZQotLS0gL2Rldi9udWxsCisrKyBiL2VtaTYyL2xvYWRlci5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbWk2Mi9taWRpLmZ3IGIvZW1pNjIvbWlkaS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzJjODU5Ci0tLSAvZGV2L251bGwKKysrIGIvZW1pNjIvbWlkaS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbWk2Mi9zcGRpZi5mdyBiL2VtaTYyL3NwZGlmLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NjkxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9lbWk2Mi9zcGRpZi5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbmUtdWI2MjUwL21zX2luaXQuYmluIGIvZW5lLXViNjI1MC9tc19pbml0LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNmMGVkCi0tLSAvZGV2L251bGwKKysrIGIvZW5lLXViNjI1MC9tc19pbml0LmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbmUtdWI2MjUwL21zX3Jkd3IuYmluIGIvZW5lLXViNjI1MC9tc19yZHdyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmE4ZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvZW5lLXViNjI1MC9tc19yZHdyLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbmUtdWI2MjUwL21zcF9yZHdyLmJpbiBiL2VuZS11YjYyNTAvbXNwX3Jkd3IuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYmE2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9lbmUtdWI2MjUwL21zcF9yZHdyLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbmUtdWI2MjUwL3NkX2luaXQxLmJpbiBiL2VuZS11YjYyNTAvc2RfaW5pdDEuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NzRmODgKLS0tIC9kZXYvbnVsbAorKysgYi9lbmUtdWI2MjUwL3NkX2luaXQxLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbmUtdWI2MjUwL3NkX2luaXQyLmJpbiBiL2VuZS11YjYyNTAvc2RfaW5pdDIuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMjkwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9lbmUtdWI2MjUwL3NkX2luaXQyLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lbmUtdWI2MjUwL3NkX3Jkd3IuYmluIGIvZW5lLXViNjI1MC9zZF9yZHdyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzhhMWIyCi0tLSAvZGV2L251bGwKKysrIGIvZW5lLXViNjI1MC9zZF9yZHdyLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lc3MvbWFlc3RybzNfYXNzcF9rZXJuZWwuZncgYi9lc3MvbWFlc3RybzNfYXNzcF9rZXJuZWwuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjNzE0NwotLS0gL2Rldi9udWxsCisrKyBiL2Vzcy9tYWVzdHJvM19hc3NwX2tlcm5lbC5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lc3MvbWFlc3RybzNfYXNzcF9taW5pc3JjLmZ3IGIvZXNzL21hZXN0cm8zX2Fzc3BfbWluaXNyYy5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDcwZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvZXNzL21hZXN0cm8zX2Fzc3BfbWluaXNyYy5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mMjI1NXVzYi5iaW4gYi9mMjI1NXVzYi5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwYjVkNgotLS0gL2Rldi9udWxsCisrKyBiL2YyMjU1dXNiLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9nbzcwMDcvZ283MDA3ZncuYmluIGIvZ283MDA3L2dvNzAwN2Z3LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDQ0YjgyCi0tLSAvZGV2L251bGwKKysrIGIvZ283MDA3L2dvNzAwN2Z3LmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9nbzcwMDcvZ283MDA3dHYuYmluIGIvZ283MDA3L2dvNzAwN3R2LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGE3YWJkCi0tLSAvZGV2L251bGwKKysrIGIvZ283MDA3L2dvNzAwN3R2LmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9nbzcwMDcvbHIxOTIuZncgYi9nbzcwMDcvbHIxOTIuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllMmQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2dvNzAwNy9scjE5Mi5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9nbzcwMDcvcHgtbTQwMnUuZncgYi9nbzcwMDcvcHgtbTQwMnUuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyMjE2MwotLS0gL2Rldi9udWxsCisrKyBiL2dvNzAwNy9weC1tNDAydS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9nbzcwMDcvcHgtdHY0MDJ1LmZ3IGIvZ283MDA3L3B4LXR2NDAydS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2EwM2FjCi0tLSAvZGV2L251bGwKKysrIGIvZ283MDA3L3B4LXR2NDAydS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9nbzcwMDcvczIyNTAtMS5mdyBiL2dvNzAwNy9zMjI1MC0xLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzBhYWIKLS0tIC9kZXYvbnVsbAorKysgYi9nbzcwMDcvczIyNTAtMS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9nbzcwMDcvczIyNTAtMi5mdyBiL2dvNzAwNy9zMjI1MC0yLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZmRiZGYKLS0tIC9kZXYvbnVsbAorKysgYi9nbzcwMDcvczIyNTAtMi5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9nbzcwMDcvd2lzLXN0YXJ0cmVrLmZ3IGIvZ283MDA3L3dpcy1zdGFydHJlay5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTE5NTE3Ci0tLSAvZGV2L251bGwKKysrIGIvZ283MDA3L3dpcy1zdGFydHJlay5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9odGNfNzAxMC5mdyBiL2h0Y183MDEwLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODM4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9odGNfNzAxMC5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9odGNfOTI3MS5mdyBiL2h0Y185MjcxLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOGY1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9odGNfOTI3MS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pMjQwMG0tZnctdXNiLTEuNC5zYmNmIGIvaTI0MDBtLWZ3LXVzYi0xLjQuc2JjZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzA3OWMzCi0tLSAvZGV2L251bGwKKysrIGIvaTI0MDBtLWZ3LXVzYi0xLjQuc2JjZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pMjQwMG0tZnctdXNiLTEuNS5zYmNmIGIvaTI0MDBtLWZ3LXVzYi0xLjUuc2JjZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmI5NjM1Ci0tLSAvZGV2L251bGwKKysrIGIvaTI0MDBtLWZ3LXVzYi0xLjUuc2JjZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pNjA1MC1mdy11c2ItMS41LnNiY2YgYi9pNjA1MC1mdy11c2ItMS41LnNiY2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4NDVkYgotLS0gL2Rldi9udWxsCisrKyBiL2k2MDUwLWZ3LXVzYi0xLjUuc2JjZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbnRlbC9pYnQtaHctMzcuNy4xMC1mdy0xLjAuMi4zLmQuYnNlcSBiL2ludGVsL2lidC1ody0zNy43LjEwLWZ3LTEuMC4yLjMuZC5ic2VxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMjMxNjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRlbC9pYnQtaHctMzcuNy4xMC1mdy0xLjAuMi4zLmQuYnNlcQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbnRlbC9pYnQtaHctMzcuNy4xMC1mdy0xLjgwLjIuMy5kLmJzZXEgYi9pbnRlbC9pYnQtaHctMzcuNy4xMC1mdy0xLjgwLjIuMy5kLmJzZXEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3MzZlNAotLS0gL2Rldi9udWxsCisrKyBiL2ludGVsL2lidC1ody0zNy43LjEwLWZ3LTEuODAuMi4zLmQuYnNlcQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbnRlbC9pYnQtaHctMzcuNy5ic2VxIGIvaW50ZWwvaWJ0LWh3LTM3LjcuYnNlcQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzNjZGJhCi0tLSAvZGV2L251bGwKKysrIGIvaW50ZWwvaWJ0LWh3LTM3LjcuYnNlcQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbnRlbGxpcG9ydDIuYmluIGIvaW50ZWxsaXBvcnQyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGVhNTY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW50ZWxsaXBvcnQyLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pc2NpL01ha2VmaWxlIGIvaXNjaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODQ5MzczCi0tLSAvZGV2L251bGwKKysrIGIvaXNjaS9NYWtlZmlsZQpAQCAtMCwwICsxLDIzIEBACisjIE1ha2VmaWxlIGZvciBjcmVhdGVfZncKKyMKK0NDPWdjYworQ0ZMQUdTPS1jIC1XYWxsIC1PMiAtZworTERGTEFHUz0KK1NPVVJDRVM9Y3JlYXRlX2Z3LmMKK09CSkVDVFM9JChTT1VSQ0VTOi5jcHA9Lm8pCitFWEVDVVRBQkxFPWNyZWF0ZV9mdworQkxPQj1pc2NpX2Zpcm13YXJlLmJpbgorCithbGw6ICQoU09VUkNFUykgJChFWEVDVVRBQkxFKSAkKEJMT0IpCisKKyQoRVhFQ1VUQUJMRSk6ICQoT0JKRUNUUykKKwkkKENDKSAkKExERkxBR1MpICQoT0JKRUNUUykgLW8gJEAKKworLmMubzoKKwkkKENDKSAkKENGTEFHUykgJDwgLU8gJEAKKworJChCTE9CKTogJChFWEVDVVRBQkxFKQorCS4vJChFWEVDVVRBQkxFKSA+JEAKKworY2xlYW46CisJcm0gLWYgKi5vICQoRVhFQ1VUQUJMRSkKZGlmZiAtLWdpdCBhL2lzY2kvUkVBRE1FIGIvaXNjaS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2M2FjMwotLS0gL2Rldi9udWxsCisrKyBiL2lzY2kvUkVBRE1FCkBAIC0wLDAgKzEsMzYgQEAKK1RoaXMgZGVmaW5lcyB0aGUgdGVtcG9yYXJ5IGJpbmFyeSBibG93IHdlIGFyZSB0byBwYXNzIHRvIHRoZSBTQ1UKK2RyaXZlciB0byBlbXVsYXRlIHRoZSBiaW5hcnkgZmlybXdhcmUgdGhhdCB3ZSB3aWxsIGV2ZW50dWFsbHkgYmUKK2FibGUgdG8gYWNjZXNzIHZpYSBOVlJBTSBvbiB0aGUgU0NVIGNvbnRyb2xsZXIuCisKK1RoZSBjdXJyZW50IHNpemUgb2YgdGhlIGJpbmFyeSBibG9iIGlzIGV4cGVjdGVkIHRvIGJlIDE0OSBieXRlcyBvciBsYXJnZXIKKworSGVhZGVyIFR5cGVzOgorMHgxOiBQaHkgTWFza3MKKzB4MjogUGh5IEdlbnMKKzB4MzogU0FTIEFkZHJzCisweGZmOiBFbmQgb2YgRGF0YQorCitJRCBzdHJpbmcgLSB1OFsxMl06ICIjU0NVIE1BR0lDI1wwIgorVmVyc2lvbiAtIHU4OiAxCitTdWJWZXJzaW9uIC0gdTg6IDAKKworSGVhZGVyIFR5cGUgLSB1ODogMHgxCitTaXplIC0gdTg6IDgKK1BoeSBNYXNrIC0gdTMyWzhdCisKK0hlYWRlciBUeXBlIC0gdTg6IDB4MgorU2l6ZSAtIHU4OiA4CitQaHkgR2VuIC0gdTMyWzhdCisKK0hlYWRlciBUeXBlIC0gdTg6IDB4MworU2l6ZSAtIHU4OiA4CitTYXMgQWRkciAtIHU2NFs4XQorCitIZWFkZXIgVHlwZSAtIHU4OiAweGYKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUGxhY2UgaXNjaV9maXJtd2FyZS5iaW4gaW4gL2xpYi9maXJtd2FyZS9pc2NpCitCZSBzdXJlIHRvIHJlY3JlYXRlIHRoZSBpbml0cmFtZnMgaW1hZ2UgdG8gaW5jbHVkZSB0aGUgZmlybXdhcmUuCisKZGlmZiAtLWdpdCBhL2lzY2kvY3JlYXRlX2Z3LmMgYi9pc2NpL2NyZWF0ZV9mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDM3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9pc2NpL2NyZWF0ZV9mdy5jCkBAIC0wLDAgKzEsOTkgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgImNyZWF0ZV9mdy5oIgorCitpbnQgd3JpdGVfYmxvYihzdHJ1Y3QgaXNjaV9vcm9tICppc2NpX29yb20pCit7CisJRklMRSAqZmQ7CisJaW50IGVycjsKKwlzaXplX3QgY291bnQ7CisKKwlmZCA9IGZvcGVuKGJsb2JfbmFtZSwgIncrIik7CisJaWYgKCFmZCkgeworCQlwZXJyb3IoIk9wZW4gZmlsZSBmb3Igd3JpdGUgZmFpbGVkIik7CisJCWZjbG9zZShmZCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWNvdW50ID0gZndyaXRlKGlzY2lfb3JvbSwgc2l6ZW9mKHN0cnVjdCBpc2NpX29yb20pLCAxLCBmZCk7CisJaWYgKGNvdW50ICE9IDEpIHsKKwkJcGVycm9yKCJXcml0ZSBkYXRhIGZhaWxlZCIpOworCQlmY2xvc2UoZmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlmY2xvc2UoZmQpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2V0X2JpbmFyeV92YWx1ZXMoc3RydWN0IGlzY2lfb3JvbSAqaXNjaV9vcm9tKQoreworCWludCBjLCBwaHlfaWR4LCBwb3J0X2lkeDsKKworCS8qIHNldHRpbmcgT1JPTSBzaWduYXR1cmUgKi8KKwlzdHJuY3B5KGlzY2lfb3JvbS0+aGRyLnNpZ25hdHVyZSwgc2lnLCBzdHJsZW4oc2lnKSk7CisJaXNjaV9vcm9tLT5oZHIudmVyc2lvbiA9IHZlcnNpb247CisJaXNjaV9vcm9tLT5oZHIudG90YWxfYmxvY2tfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpc2NpX29yb20pOworCWlzY2lfb3JvbS0+aGRyLmhkcl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjaV9iaW9zX29lbV9wYXJhbV9ibG9ja19oZHIpOworCWlzY2lfb3JvbS0+aGRyLm51bV9lbGVtZW50cyA9IG51bV9lbGVtZW50czsKKworCWZvciAoYyA9IDA7IGMgPCAyOyBjKyspIHsKKwkJc3RydWN0IHNjaV9vZW1fcGFyYW1zICpjdHJsID0gJmlzY2lfb3JvbS0+Y3RybFtjXTsKKwkJX191OCBjYWJsZV9zZWxlY3Rpb25fbWFzayA9IDA7CisKKwkJY3RybC0+Y29udHJvbGxlci5tb2RlX3R5cGUgPSBtb2RlX3R5cGU7CisJCWN0cmwtPmNvbnRyb2xsZXIubWF4X2NvbmN1cnJfc3Bpbl91cCA9IG1heF9udW1fY29uY3VycmVudF9kZXZfc3Bpbl91cDsKKwkJY3RybC0+Y29udHJvbGxlci5kb19lbmFibGVfc3NjID0gZW5hYmxlX3NzYzsKKworCQlmb3IgKHBvcnRfaWR4ID0gMDsgcG9ydF9pZHggPCBTQ0lfTUFYX1BPUlRTOyBwb3J0X2lkeCsrKQorCQkJY3RybC0+cG9ydHNbcG9ydF9pZHhdLnBoeV9tYXNrID0gcGh5X21hc2tbY11bcG9ydF9pZHhdOworCisJCWZvciAocGh5X2lkeCA9IDA7IHBoeV9pZHggPCBTQ0lfTUFYX1BIWVM7IHBoeV9pZHgrKykgeworCQkJc3RydWN0IHNjaV9waHlfb2VtX3BhcmFtcyAqcGh5ID0gJmN0cmwtPnBoeXNbcGh5X2lkeF07CisJCQlfX3U4IGNhYmxlX3BoeSA9IGNhYmxlX3NlbGVjdGlvbltjXVtwaHlfaWR4XTsKKworCQkJcGh5LT5zYXNfYWRkcmVzcy5oaWdoID0gc2FzX2FkZHJbY11bcGh5X2lkeF0gPj4gMzI7CisJCQlwaHktPnNhc19hZGRyZXNzLmxvdyA9IHNhc19hZGRyW2NdW3BoeV9pZHhdOworCisJCQlwaHktPmFmZV90eF9hbXBfY29udHJvbDAgPSBhZmVfdHhfYW1wX2NvbnRyb2wwOworCQkJcGh5LT5hZmVfdHhfYW1wX2NvbnRyb2wxID0gYWZlX3R4X2FtcF9jb250cm9sMTsKKwkJCXBoeS0+YWZlX3R4X2FtcF9jb250cm9sMiA9IGFmZV90eF9hbXBfY29udHJvbDI7CisJCQlwaHktPmFmZV90eF9hbXBfY29udHJvbDMgPSBhZmVfdHhfYW1wX2NvbnRyb2wzOworCisJCQljYWJsZV9zZWxlY3Rpb25fbWFzayB8PSAoY2FibGVfcGh5ICYgMSkgPDwgcGh5X2lkeDsKKwkJCWNhYmxlX3NlbGVjdGlvbl9tYXNrIHw9IChjYWJsZV9waHkgJiAyKSA8PCAocGh5X2lkeCArIDMpOworCQl9CisJCWN0cmwtPmNvbnRyb2xsZXIuY2FibGVfc2VsZWN0aW9uX21hc2sgPSBjYWJsZV9zZWxlY3Rpb25fbWFzazsKKwl9Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaXNjaV9vcm9tICppc2NpX29yb207CisKKwlpc2NpX29yb20gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2NpX29yb20pKTsKKwltZW1zZXQoaXNjaV9vcm9tLCAwLCBzaXplb2Yoc3RydWN0IGlzY2lfb3JvbSkpOworCisJc2V0X2JpbmFyeV92YWx1ZXMoaXNjaV9vcm9tKTsKKworCWVyciA9IHdyaXRlX2Jsb2IoaXNjaV9vcm9tKTsKKwlpZiAoZXJyIDwgMCkgeworCQlmcmVlKGlzY2lfb3JvbSk7CisJCXJldHVybiBlcnI7CisJfQorCisJZnJlZShpc2NpX29yb20pOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvaXNjaS9jcmVhdGVfZncuaCBiL2lzY2kvY3JlYXRlX2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliMDRiYQotLS0gL2Rldi9udWxsCisrKyBiL2lzY2kvY3JlYXRlX2Z3LmgKQEAgLTAsMCArMSw4NiBAQAorI2lmbmRlZiBfQ1JFQVRFX0ZXX0hfCisjZGVmaW5lIF9DUkVBVEVfRldfSF8KKyNpbmNsdWRlICJwcm9iZV9yb21zLmgiCisKKworLyogd2UgYXJlIGNvbmZpZ3VyaW5nIGZvciAyIFNDVXMgKi8KK3N0YXRpYyBjb25zdCBpbnQgbnVtX2VsZW1lbnRzID0gMjsKKworLyoKKyAqIEZvciBhbGwgZGVmaW5lZCBhcnJheXM6CisgKiBlbGVtZW50cyAwLTMgYXJlIGZvciBTQ1UwLCBwb3J0cyAwLTMKKyAqIGVsZW1lbnRzIDQtNyBhcmUgZm9yIFNDVTEsIHBvcnRzIDAtMworICoKKyAqIHZhbGlkIGNvbmZpZ3VyYXRpb25zIGZvciBvbmUgU0NVIGFyZToKKyAqICBQMCAgUDEgIFAyICBQMworICogLS0tLS0tLS0tLS0tLS0tLQorICogMHhGLDB4MCwweDAsMHgwICMgMSB4NCBwb3J0CisgKiAweDMsMHgwLDB4NCwweDggIyBQaHlzIDAgYW5kIDEgYXJlIGEgeDIgcG9ydCwgcGh5IDIgYW5kIHBoeSAzIGFyZSBlYWNoIHgxCisgKiAgICAgICAgICAgICAgICAgIyBwb3J0cworICogMHgxLDB4MiwweEMsMHgwICMgUGh5cyAwIGFuZCAxIGFyZSBlYWNoIHgxIHBvcnRzLCBwaHkgMiBhbmQgcGh5IDMgYXJlIGEgeDIKKyAqICAgICAgICAgICAgICAgICAjIHBvcnQKKyAqIDB4MywweDAsMHhDLDB4MCAjIFBoeXMgMCBhbmQgMSBhcmUgYSB4MiBwb3J0LCBwaHkgMiBhbmQgcGh5IDMgYXJlIGEgeDIgcG9ydAorICogMHgxLDB4MiwweDQsMHg4ICMgRWFjaCBwaHkgaXMgYSB4MSBwb3J0ICh0aGlzIGlzIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24pCisgKgorICogaWYgdGhlcmUgaXMgYSBwb3J0L3BoeSBvbiB3aGljaCB5b3UgZG8gbm90IHdpc2ggdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKyAqIHZhbHVlcywgdXNlIHRoZSB2YWx1ZSBhc3NpZ25lZCB0byBVTklOSVRfUEFSQU0gKDI1NSkuCisgKi8KKworLyogZGlzY292ZXJ5IG1vZGUgdHlwZSAocG9ydCBhdXRvIGNvbmZpZyBtb2RlIGJ5IGRlZmF1bHQgKSAqLworCisvKgorICogaWYgdGhlcmUgaXMgYSBwb3J0L3BoeSBvbiB3aGljaCB5b3UgZG8gbm90IHdpc2ggdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKyAqIHZhbHVlcywgdXNlIHRoZSB2YWx1ZSAiMDAwMDAwMDAwMDAwMDAwMCIuIFNBUyBhZGRyZXNzIG9mIHplcm8ncyBpcworICogY29uc2lkZXJlZCBpbnZhbGlkIGFuZCB3aWxsIG5vdCBiZSB1c2VkLgorICovCisjaWZkZWYgTVBDCitzdGF0aWMgY29uc3QgaW50IG1vZGVfdHlwZSA9IFNDSUNfUE9SVF9NQU5VQUxfQ09ORklHVVJBVElPTl9NT0RFOworc3RhdGljIGNvbnN0IF9fdTggcGh5X21hc2tbMl1bNF0gPSB7IHsxLCAyLCA0LCA4fSwKKwkJCQkgICAgIHsxLCAyLCA0LCA4fSB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBzYXNfYWRkclsyXVs0XSA9IHsgeyAweDVGQ0ZGRkZGRjAwMDAwMDFVTEwsCisJCQkJCQkgICAgIDB4NUZDRkZGRkZGMDAwMDAwMlVMTCwKKwkJCQkJCSAgICAgMHg1RkNGRkZGRkYwMDAwMDAzVUxMLAorCQkJCQkJICAgICAweDVGQ0ZGRkZGRjAwMDAwMDRVTEwgfSwKKwkJCQkJCSAgIHsgMHg1RkNGRkZGRkYwMDAwMDA1VUxMLAorCQkJCQkJICAgICAweDVGQ0ZGRkZGRjAwMDAwMDZVTEwsCisJCQkJCQkgICAgIDB4NUZDRkZGRkZGMDAwMDAwN1VMTCwKKwkJCQkJCSAgICAgMHg1RkNGRkZGRkYwMDAwMDA4VUxMIH0gfTsKKyNlbHNlCS8qIEFQQyAoZGVmYXVsdCkgKi8KK3N0YXRpYyBjb25zdCBpbnQgbW9kZV90eXBlID0gU0NJQ19QT1JUX0FVVE9NQVRJQ19DT05GSUdVUkFUSU9OX01PREU7CitzdGF0aWMgY29uc3QgX191OCBwaHlfbWFza1syXVs0XTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgc2FzX2FkZHJbMl1bNF0gPSB7IHsgMHg1RkNGRkZGRjAwMDAwMDAxVUxMLAorCQkJCQkJICAgICAweDVGQ0ZGRkZGMDAwMDAwMDFVTEwsCisJCQkJCQkgICAgIDB4NUZDRkZGRkYwMDAwMDAwMVVMTCwKKwkJCQkJCSAgICAgMHg1RkNGRkZGRjAwMDAwMDAxVUxMIH0sCisJCQkJCQkgICB7IDB4NUZDRkZGRkYwMDAwMDAwMlVMTCwKKwkJCQkJCSAgICAgMHg1RkNGRkZGRjAwMDAwMDAyVUxMLAorCQkJCQkJICAgICAweDVGQ0ZGRkZGMDAwMDAwMDJVTEwsCisJCQkJCQkgICAgIDB4NUZDRkZGRkYwMDAwMDAwMlVMTCB9IH07CisjZW5kaWYKKworc3RhdGljIGNvbnN0IGludCBjYWJsZV9zZWxlY3Rpb25bMl1bNF07CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgZGV2aWNlIHNwaW4gdXAgKi8KK3N0YXRpYyBjb25zdCBpbnQgbWF4X251bV9jb25jdXJyZW50X2Rldl9zcGluX3VwID0gMTsKKworLyogZW5hYmxlIG9mIHNzYyBvcGVyYXRpb24gKi8KKy8qCisgKiBOT1RFOiBhbHNvIHNlZSBwcm9iZV9yb21zLmguIFRoaXMgdmFsdWUgY2FuIGJlIHNldCBmb3Igc3NjIHZhbHVlcy4KKyAqIFZhbHVlcyBjYW4gYmUgc2V0IGZvcjoKKyAqIHNzY19zYXRhX3R4X3NwcmVhZF9sZXZlbAorICogc3NjX3Nhc190eF9zcHJlYWRfbGV2ZWwKKyAqIHNzY19zYXNfdHhfdHlwZQorICovCitzdGF0aWMgY29uc3QgX191OCBlbmFibGVfc3NjOworCisvKiBBRkVfVFhfQU1QX0NPTlRST0wgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWZlX3R4X2FtcF9jb250cm9sMCA9IDB4MDAwYmRkMDg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFmZV90eF9hbXBfY29udHJvbDEgPSAweDAwMGZmYzAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhZmVfdHhfYW1wX2NvbnRyb2wyID0gMHgwMDBiN2MwOTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWZlX3R4X2FtcF9jb250cm9sMyA9IDB4MDAwYWZjNmU7CisKK3N0YXRpYyBjb25zdCBjaGFyIGJsb2JfbmFtZVtdID0gImlzY2lfZmlybXdhcmUuYmluIjsKK3N0YXRpYyBjb25zdCBjaGFyIHNpZ1tdID0gIklTQ1VPRU1CIjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHZlcnNpb24gPSBJU0NJX1JPTV9WRVJfTEFURVNUOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2lzY2kvaXNjaV9maXJtd2FyZS5iaW4gYi9pc2NpL2lzY2lfZmlybXdhcmUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNTRmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9pc2NpL2lzY2lfZmlybXdhcmUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2lzY2kvcHJvYmVfcm9tcy5oIGIvaXNjaS9wcm9iZV9yb21zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwZTlkNAotLS0gL2Rldi9udWxsCisrKyBiL2lzY2kvcHJvYmVfcm9tcy5oCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHByb3ZpZGVkIHVuZGVyIGEgZHVhbCBCU0QvR1BMdjIgbGljZW5zZS4gIFdoZW4gdXNpbmcgb3IKKyAqIHJlZGlzdHJpYnV0aW5nIHRoaXMgZmlsZSwgeW91IG1heSBkbyBzbyB1bmRlciBlaXRoZXIgbGljZW5zZS4KKyAqCisgKiBHUEwgTElDRU5TRSBTVU1NQVJZCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorICoKKyAqIEJTRCBMSUNFTlNFCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICAgZGlzdHJpYnV0aW9uLgorICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfSVNDSV9QUk9CRV9ST01TX0hfCisjZGVmaW5lIF9JU0NJX1BST0JFX1JPTVNfSF8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorI2luY2x1ZGUgImlzY2kuaCIKKworI2RlZmluZSBTQ0lDX1NEU19QQVJNX05PX1NQRUVEICAgMAorCisvKiBnZW5lcmF0aW9uIDEgKGkuZS4gMS41IEdiL3MpICovCisjZGVmaW5lIFNDSUNfU0RTX1BBUk1fR0VOMV9TUEVFRCAxCisKKy8qIGdlbmVyYXRpb24gMiAoaS5lLiAzLjAgR2IvcykgKi8KKyNkZWZpbmUgU0NJQ19TRFNfUEFSTV9HRU4yX1NQRUVEIDIKKworLyogZ2VuZXJhdGlvbiAzIChpLmUuIDYuMCBHYi9zKSAqLworI2RlZmluZSBTQ0lDX1NEU19QQVJNX0dFTjNfU1BFRUQgMworI2RlZmluZSBTQ0lDX1NEU19QQVJNX01BWF9TUEVFRCBTQ0lDX1NEU19QQVJNX0dFTjNfU1BFRUQKKworLyogcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBzZXQgYnkgbW9kdWxlIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBzY2lfdXNlcl9wYXJhbWV0ZXJzIHsKKwlzdHJ1Y3Qgc2NpX3BoeV91c2VyX3BhcmFtcyB7CisJCS8qKgorCQkgKiBUaGlzIGZpZWxkIHNwZWNpZmllcyB0aGUgTk9USUZZIChFTkFCTEUgU1BJTiBVUCkgcHJpbWl0aXZlCisJCSAqIGluc2VydGlvbiBmcmVxdWVuY3kgZm9yIHRoaXMgcGh5IGluZGV4LgorCQkgKi8KKwkJdTMyIG5vdGlmeV9lbmFibGVfc3Bpbl91cF9pbnNlcnRpb25fZnJlcXVlbmN5OworCisJCS8qKgorCQkgKiBUaGlzIG1ldGhvZCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBEV09SRHMgd2l0aGluIHdoaWNoCisJCSAqIHRvIHRyYW5zbWl0IGEgc2luZ2xlIEFMSUdOIHByaW1pdGl2ZS4gIFRoaXMgdmFsdWUgYXBwbGllcyByZWdhcmRsZXNzCisJCSAqIG9mIHdoYXQgdHlwZSBvZiBkZXZpY2UgaXMgYXR0YWNoZWQgb3IgY29ubmVjdGlvbiBzdGF0ZS4gIEEgdmFsdWUgb2YKKwkJICogMCBpbmRpY2F0ZXMgdGhhdCBubyBBTElHTiBwcmltaXRpdmVzIHdpbGwgYmUgaW5zZXJ0ZWQuCisJCSAqLworCQl1MTYgYWxpZ25faW5zZXJ0aW9uX2ZyZXF1ZW5jeTsKKworCQkvKioKKwkJICogVGhpcyBtZXRob2Qgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgRFdPUkRzIHdpdGhpbiB3aGljaAorCQkgKiB0byB0cmFuc21pdCAyIEFMSUdOIHByaW1pdGl2ZXMuICBUaGlzIGFwcGxpZXMgZm9yIFNBUyBjb25uZWN0aW9ucworCQkgKiBvbmx5LiAgQSBtaW5pbXVtIHZhbHVlIG9mIDMgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZmllbGQuCisJCSAqLworCQl1MTYgaW5fY29ubmVjdGlvbl9hbGlnbl9pbnNlcnRpb25fZnJlcXVlbmN5OworCisJCS8qKgorCQkgKiBUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBzcGVlZCBnZW5lcmF0aW9uIHRvIGJlIHV0aWxpemVkCisJCSAqIGJ5IHBoeXMgaW4gdGhlIHN1cHBsaWVkIHBvcnQuCisJCSAqIC0gQSB2YWx1ZSBvZiAxIGluZGljYXRlcyBnZW5lcmF0aW9uIDEgKGkuZS4gMS41IEdiL3MpLgorCQkgKiAtIEEgdmFsdWUgb2YgMiBpbmRpY2F0ZXMgZ2VuZXJhdGlvbiAyIChpLmUuIDMuMCBHYi9zKS4KKwkJICogLSBBIHZhbHVlIG9mIDMgaW5kaWNhdGVzIGdlbmVyYXRpb24gMyAoaS5lLiA2LjAgR2IvcykuCisJCSAqLworCQl1OCBtYXhfc3BlZWRfZ2VuZXJhdGlvbjsKKworCX0gcGh5c1tTQ0lfTUFYX1BIWVNdOworCisJLyoqCisJICogVGhpcyBmaWVsZCBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRpcmVjdCBhdHRhY2hlZCBkZXZpY2VzCisJICogdGhhdCBjYW4gaGF2ZSBwb3dlciBzdXBwbGllZCB0byB0aGVtIHNpbXVsdGFuZW91c2x5LgorCSAqLworCXU4IG1heF9jb25jdXJyX3NwaW51cDsKKworCS8qKgorCSAqIFRoaXMgZmllbGQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBhbGxvdyBhIHBoeSB0byBjb25zdW1lCisJICogcG93ZXIgYmVmb3JlIHlpZWxkaW5nIHRvIGFub3RoZXIgcGh5LgorCSAqCisJICovCisJdTggcGh5X3NwaW5fdXBfZGVsYXlfaW50ZXJ2YWw7CisKKwkvKioKKwkgKiBUaGVzZSB0aW1lciB2YWx1ZXMgc3BlY2lmaWVzIGhvdyBsb25nIGEgbGluayB3aWxsIHJlbWFpbiBvcGVuIHdpdGggbm8KKwkgKiBhY3Rpdml0eSBpbiBpbmNyZW1lbnRzIG9mIGEgbWljcm9zZWNvbmQsIGl0IGNhbiBiZSBpbiBpbmNyZW1lbnRzIG9mCisJICogMTAwIG1pY3Jvc2Vjb25kcyBpZiB0aGUgdXBwZXIgbW9zdCBiaXQgaXMgc2V0LgorCSAqCisJICovCisJdTE2IHN0cF9pbmFjdGl2aXR5X3RpbWVvdXQ7CisJdTE2IHNzcF9pbmFjdGl2aXR5X3RpbWVvdXQ7CisKKwkvKioKKwkgKiBUaGVzZSB0aW1lciB2YWx1ZXMgc3BlY2lmaWVzIGhvdyBsb25nIGEgbGluayB3aWxsIHJlbWFpbiBvcGVuIGluIGluY3JlbWVudHMKKwkgKiBvZiAxMDAgbWljcm9zZWNvbmRzLgorCSAqCisJICovCisJdTE2IHN0cF9tYXhfb2NjdXBhbmN5X3RpbWVvdXQ7CisJdTE2IHNzcF9tYXhfb2NjdXBhbmN5X3RpbWVvdXQ7CisKKwkvKioKKwkgKiBUaGlzIHRpbWVyIHZhbHVlIHNwZWNpZmllcyBob3cgbG9uZyBhIGxpbmsgd2lsbCByZW1haW4gb3BlbiB3aXRoIG5vCisJICogb3V0Ym91bmQgdHJhZmZpYyBpbiBpbmNyZW1lbnRzIG9mIGEgbWljcm9zZWNvbmQuCisJICoKKwkgKi8KKwl1OCBub19vdXRib3VuZF90YXNrX3RpbWVvdXQ7CisKK307CisKKyNkZWZpbmUgU0NJQ19TRFNfUEFSTV9QSFlfTUFTS19NSU4gMHgwCisjZGVmaW5lIFNDSUNfU0RTX1BBUk1fUEhZX01BU0tfTUFYIDB4RgorI2RlZmluZSBNQVhfQ09OQ1VSUkVOVF9ERVZJQ0VfU1BJTl9VUF9DT1VOVCA0CisKK3N0cnVjdCBzY2lfb2VtX3BhcmFtczsKK2ludCBzY2lfb2VtX3BhcmFtZXRlcnNfdmFsaWRhdGUoc3RydWN0IHNjaV9vZW1fcGFyYW1zICpvZW0sIHU4IHZlcnNpb24pOworCitzdHJ1Y3QgaXNjaV9vcm9tOworc3RydWN0IGlzY2lfb3JvbSAqaXNjaV9yZXF1ZXN0X29wcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2VudW0gc2NpX3N0YXR1cyBpc2NpX3BhcnNlX29lbV9wYXJhbWV0ZXJzKHN0cnVjdCBzY2lfb2VtX3BhcmFtcyAqb2VtLAorCQkJCQkgIHN0cnVjdCBpc2NpX29yb20gKm9yb20sIGludCBzY3VfaW5kZXgpOworc3RydWN0IGlzY2lfb3JvbSAqaXNjaV9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KTsKK3N0cnVjdCBpc2NpX29yb20gKmlzY2lfZ2V0X2VmaV92YXIoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCitzdHJ1Y3QgaXNjaV9vZW1faGRyIHsKKwl1OCBzaWdbNF07CisJdTggcmV2X21ham9yOworCXU4IHJldl9taW5vcjsKKwl1MTYgbGVuOworCXU4IGNoZWNrc3VtOworCXU4IHJlc2VydmVkMTsKKwl1MTYgcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbHNlCisjZGVmaW5lIFNDSV9NQVhfUE9SVFMgNAorI2RlZmluZSBTQ0lfTUFYX1BIWVMgNAorI2RlZmluZSBTQ0lfTUFYX0NPTlRST0xMRVJTIDIKKyNlbmRpZgorCisjZGVmaW5lIElTQ0lfRldfTkFNRQkJImlzY2kvaXNjaV9maXJtd2FyZS5iaW4iCisKKyNkZWZpbmUgUk9NU0lHTkFUVVJFCQkweGFhNTUKKworI2RlZmluZSBJU0NJX09FTV9TSUcJCSIkT0VNIgorI2RlZmluZSBJU0NJX09FTV9TSUdfU0laRQk0CisjZGVmaW5lIElTQ0lfUk9NX1NJRwkJIklTQ1VPRU1CIgorI2RlZmluZSBJU0NJX1JPTV9TSUdfU0laRQk4CisKKyNkZWZpbmUgSVNDSV9FRklfVkVORE9SX0dVSUQJXAorCUVGSV9HVUlEKDB4MTkzZGZlZmEsIDB4YTQ0NSwgMHg0MzAyLCAweDk5LCAweGQ4LCAweGVmLCAweDNhLCAweGFkLCBcCisJCQkweDFhLCAweDA0LCAweGM2KQorI2RlZmluZSBJU0NJX0VGSV9WQVJfTkFNRQkiUnN0U2N1TyIKKworI2RlZmluZSBJU0NJX1JPTV9WRVJfMV8wCTB4MTAKKyNkZWZpbmUgSVNDSV9ST01fVkVSXzFfMQkweDExCisjZGVmaW5lIElTQ0lfUk9NX1ZFUl8xXzMJMHgxMworI2RlZmluZSBJU0NJX1JPTV9WRVJfTEFURVNUCUlTQ0lfUk9NX1ZFUl8xXzMKKworLyogQWxsb3dlZCBQT1JUIGNvbmZpZ3VyYXRpb24gbW9kZXMgQVBDIEF1dG9tYXRpYyBQT1JUIGNvbmZpZ3VyYXRpb24gbW9kZSBpcworICogZGVmaW5lZCBieSB0aGUgT0VNIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRpbmcgbm8gUEhZX01BU0sgcGFyYW1ldGVycworICogZm9yIGFueSBQT1JULiBpLmUuIFRoZXJlIGFyZSBubyBwaHlzIGFzc2lnbmVkIHRvIGFueSBvZiB0aGUgcG9ydHMgYXQgc3RhcnQuCisgKiBNUEMgTWFudWFsIFBPUlQgY29uZmlndXJhdGlvbiBtb2RlIGlzIGRlZmluZWQgYnkgdGhlIE9FTSBjb25maWd1cmF0aW9uCisgKiBwYXJhbWV0ZXJzIHByb3ZpZGluZyBhIFBIWV9NQVNLIHZhbHVlIGZvciBhbnkgUE9SVC4gIEl0IGlzIGFzc3VtZWQgdGhhdCBhbnkKKyAqIFBPUlQgd2l0aCBubyBQSFlfTUFTSyBpcyBhbiBpbnZhbGlkIHBvcnQgYW5kIG5vdCBhbGwgUEhZcyBtdXN0IGJlIGFzc2lnbmVkLgorICogQSBQT1JUX1BIWSBtYXNrIHRoYXQgYXNzaWducyBqdXN0IGEgc2luZ2xlIFBIWSB0byBhIHBvcnQgYW5kIG5vIG90aGVyIFBIWXMKKyAqIGJlaW5nIGFzc2lnbmVkIGlzIHN1ZmZpY2llbnQgdG8gZGVjbGFyZSBtYW51YWwgUE9SVCBjb25maWd1cmF0aW9uLgorICovCitlbnVtIHNjaV9wb3J0X2NvbmZpZ3VyYXRpb25fbW9kZSB7CisJU0NJQ19QT1JUX01BTlVBTF9DT05GSUdVUkFUSU9OX01PREUgPSAwLAorCVNDSUNfUE9SVF9BVVRPTUFUSUNfQ09ORklHVVJBVElPTl9NT0RFID0gMQorfTsKKworc3RydWN0IHNjaV9iaW9zX29lbV9wYXJhbV9ibG9ja19oZHIgeworCXVpbnQ4X3Qgc2lnbmF0dXJlW0lTQ0lfUk9NX1NJR19TSVpFXTsKKwl1aW50MTZfdCB0b3RhbF9ibG9ja19sZW5ndGg7CisJdWludDhfdCBoZHJfbGVuZ3RoOworCXVpbnQ4X3QgdmVyc2lvbjsKKwl1aW50OF90IHByZWJvb3Rfc291cmNlOworCXVpbnQ4X3QgbnVtX2VsZW1lbnRzOworCXVpbnQxNl90IGVsZW1lbnRfbGVuZ3RoOworCXVpbnQ4X3QgcmVzZXJ2ZWRbOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHNjaV9vZW1fcGFyYW1zIHsKKwlzdHJ1Y3QgeworCQl1aW50OF90IG1vZGVfdHlwZTsKKwkJdWludDhfdCBtYXhfY29uY3Vycl9zcGluX3VwOworCQkvKgorCQkgKiBUaGlzIGJpdGZpZWxkIGluZGljYXRlcyB0aGUgT0VNJ3MgZGVzaXJlZCBkZWZhdWx0IFR4CisJCSAqIFNwcmVhZCBTcGVjdHJ1bSBDbG9ja2luZyAoU1NDKSBzZXR0aW5ncyBmb3IgU0FUQSBhbmQgU0FTLgorCQkgKiBOT1RFOiBEZWZhdWx0IFNTQyBNb2R1bGF0aW9uIEZyZXF1ZW5jeSBpcyAzMS41S0h6LgorCQkgKi8KKwkJdW5pb24geworCQkJc3RydWN0IHsKKwkJCS8qCisJCQkgKiBOT1RFOiBNYXggc3ByZWFkIGZvciBTQVRBIGlzICswIC8gLTUwMDAgUFBNLgorCQkJICogRG93bi1zcHJlYWRpbmcgU1NDIChvbmx5IG1ldGhvZCBhbGxvd2VkIGZvciBTQVRBKToKKwkJCSAqICBTQVRBIFNTQyBUeCBEaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgPSAweDAKKwkJCSAqICBTQVRBIFNTQyBUeCBhdCArMCAvIC0xNDE5IFBQTSBTcHJlYWQgICAgPSAweDIKKwkJCSAqICBTQVRBIFNTQyBUeCBhdCArMCAvIC0yMTI5IFBQTSBTcHJlYWQgICAgPSAweDMKKwkJCSAqICBTQVRBIFNTQyBUeCBhdCArMCAvIC00MjU3IFBQTSBTcHJlYWQgICAgPSAweDYKKwkJCSAqICBTQVRBIFNTQyBUeCBhdCArMCAvIC00OTY3IFBQTSBTcHJlYWQgICAgPSAweDcKKwkJCSAqLworCQkJCXVpbnQ4X3Qgc3NjX3NhdGFfdHhfc3ByZWFkX2xldmVsOjQ7CisJCQkvKgorCQkJICogU0FTIFNTQyBUeCBEaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgID0gMHgwCisJCQkgKgorCQkJICogTk9URTogTWF4IHNwcmVhZCBmb3IgU0FTIGRvd24tc3ByZWFkaW5nICswIC8KKwkJCSAqCSAtMjMwMCBQUE0KKwkJCSAqIERvd24tc3ByZWFkaW5nIFNTQzoKKwkJCSAqICBTQVMgU1NDIFR4IGF0ICswIC8gLTE0MTkgUFBNIFNwcmVhZCAgICAgPSAweDIKKwkJCSAqICBTQVMgU1NDIFR4IGF0ICswIC8gLTIxMjkgUFBNIFNwcmVhZCAgICAgPSAweDMKKwkJCSAqCisJCQkgKiBOT1RFOiBNYXggc3ByZWFkIGZvciBTQVMgY2VudGVyLXNwcmVhZGluZyArMjMwMCAvCisJCQkgKgkgLTIzMDAgUFBNCisJCQkgKiBDZW50ZXItc3ByZWFkaW5nIFNTQzoKKwkJCSAqICBTQVMgU1NDIFR4IGF0ICsxMDY0IC8gLTEwNjQgUFBNIFNwcmVhZCAgPSAweDMKKwkJCSAqICBTQVMgU1NDIFR4IGF0ICsyMTI5IC8gLTIxMjkgUFBNIFNwcmVhZCAgPSAweDYKKwkJCSAqLworCQkJCXVpbnQ4X3Qgc3NjX3Nhc190eF9zcHJlYWRfbGV2ZWw6MzsKKwkJCS8qCisJCQkgKiBOT1RFOiBSZWZlciB0byB0aGUgU1NDIHNlY3Rpb24gb2YgdGhlIFNBUyAyLngKKwkJCSAqIFNwZWNpZmljYXRpb24gZm9yIHByb3BlciBzZXR0aW5nIG9mIHRoaXMgZmllbGQuCisJCQkgKiBGb3Igc3RhbmRhcmQgU0FTIEluaXRpYXRvciBTQVMgUEhZIG9wZXJhdGlvbiBpdAorCQkJICogc2hvdWxkIGJlIDAgZm9yIERvd24tc3ByZWFkaW5nLgorCQkJICogU0FTIFNTQyBUeCBzcHJlYWQgdHlwZToKKwkJCSAqICBEb3duLXNwcmVhZGluZyBTU0MgICAgICA9IDAKKwkJCSAqICBDZW50ZXItc3ByZWFkaW5nIFNTQyAgICA9IDEKKwkJCSAqLworCQkJCXVpbnQ4X3Qgc3NjX3Nhc190eF90eXBlOjE7CisJCQl9OworCQkJdWludDhfdCBkb19lbmFibGVfc3NjOworCQl9OworCQkvKgorCQkgKiBUaGlzIGZpZWxkIGluZGljYXRlcyBsZW5ndGggb2YgdGhlIFNBUy9TQVRBIGNhYmxlIGJldHdlZW4KKwkJICogaG9zdCBhbmQgZGV2aWNlLgorCQkgKiBUaGlzIGZpZWxkIGlzIHVzZWQgbWFrZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhbmFsb2cKKwkJICogcGFyYW1ldGVycyBvZiB0aGUgcGh5IGluIHRoZSBzaWxpY29uIGFuZCBsZW5ndGggb2YgdGhlIGNhYmxlLgorCQkgKiBTdXBwb3J0ZWQgY2FibGUgYXR0ZW51YXRpb24gbGV2ZWxzOgorCQkgKiAic2hvcnQiLSB1cCB0byAzbSwgIm1lZGl1bSItM20gdG8gNm0sIGFuZCAibG9uZyItIG1vcmUgdGhhbgorCQkgKiA2bS4KKwkJICoKKwkJICogVGhpcyBpcyBiaXQgbWFzayBmaWVsZDoKKwkJICoKKwkJICogQklUOiAgICAgIChNU0IpIDcgICAgIDYgICAgIDUgICAgIDQKKwkJICogQVNTSUdOTUVOVDogICA8cGh5Mz48cGh5Mj48cGh5MT48cGh5MD4gIC0gTWVkaXVtIGNhYmxlCisJCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCBhc3NpZ25tZW50CisJCSAqIEJJVDogICAgICAgICAgICAzICAgICAyICAgICAxICAgICAwICAoTFNCKQorCQkgKiBBU1NJR05NRU5UOiAgIDxwaHkzPjxwaHkyPjxwaHkxPjxwaHkwPiAgLSBMb25nIGNhYmxlIGxlbmd0aAorCQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50CisJCSAqCisJCSAqIEJJVFMgNy00IGFyZSBzZXQgd2hlbiB0aGUgY2FibGUgbGVuZ3RoIGlzIGFzc2lnbmVkIHRvIG1lZGl1bQorCQkgKiBCSVRTIDMtMCBhcmUgc2V0IHdoZW4gdGhlIGNhYmxlIGxlbmd0aCBpcyBhc3NpZ25lZCB0byBsb25nCisJCSAqCisJCSAqIFRoZSBCSVQgcG9zaXRpb25zIGFyZSBjbGVhciB3aGVuIHRoZSBjYWJsZSBsZW5ndGggaXMKKwkJICogYXNzaWduZWQgdG8gc2hvcnQuCisJCSAqCisJCSAqIFNldHRpbmcgdGhlIGJpdHMgZm9yIGJvdGggbG9uZyBhbmQgbWVkaXVtIGNhYmxlIGxlbmd0aCBpcworCQkgKiB1bmRlZmluZWQuCisJCSAqCisJCSAqIEEgdmFsdWUgb2YgMHg4NCB3b3VsZCBhc3NpZ24KKwkJICogICAgcGh5MyAtIG1lZGl1bQorCQkgKiAgICBwaHkyIC0gbG9uZworCQkgKiAgICBwaHkxIC0gc2hvcnQKKwkJICogICAgcGh5MCAtIHNob3J0CisJCSAqLworCQl1aW50OF90IGNhYmxlX3NlbGVjdGlvbl9tYXNrOworCX0gY29udHJvbGxlcjsKKworCXN0cnVjdCB7CisJCXVpbnQ4X3QgcGh5X21hc2s7CisJfSBwb3J0c1tTQ0lfTUFYX1BPUlRTXTsKKworCXN0cnVjdCBzY2lfcGh5X29lbV9wYXJhbXMgeworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgaGlnaDsKKwkJCXVpbnQzMl90IGxvdzsKKwkJfSBzYXNfYWRkcmVzczsKKworCQl1aW50MzJfdCBhZmVfdHhfYW1wX2NvbnRyb2wwOworCQl1aW50MzJfdCBhZmVfdHhfYW1wX2NvbnRyb2wxOworCQl1aW50MzJfdCBhZmVfdHhfYW1wX2NvbnRyb2wyOworCQl1aW50MzJfdCBhZmVfdHhfYW1wX2NvbnRyb2wzOworCX0gcGh5c1tTQ0lfTUFYX1BIWVNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpc2NpX29yb20geworCXN0cnVjdCBzY2lfYmlvc19vZW1fcGFyYW1fYmxvY2tfaGRyIGhkcjsKKwlzdHJ1Y3Qgc2NpX29lbV9wYXJhbXMgY3RybFtTQ0lfTUFYX0NPTlRST0xMRVJTXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2l3bHdpZmktMTAwLTUudWNvZGUgYi9pd2x3aWZpLTEwMC01LnVjb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNjlhMWEKLS0tIC9kZXYvbnVsbAorKysgYi9pd2x3aWZpLTEwMC01LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktMTAwMC0zLnVjb2RlIGIvaXdsd2lmaS0xMDAwLTMudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3NDQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktMTAwMC0zLnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktMTAwMC01LnVjb2RlIGIvaXdsd2lmaS0xMDAwLTUudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FhNDY2YwotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktMTAwMC01LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktMTA1LTYudWNvZGUgYi9pd2x3aWZpLTEwNS02LnVjb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNTMyZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pd2x3aWZpLTEwNS02LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktMTM1LTYudWNvZGUgYi9pd2x3aWZpLTEzNS02LnVjb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYTMyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pd2x3aWZpLTEzNS02LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktMjAwMC02LnVjb2RlIGIvaXdsd2lmaS0yMDAwLTYudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1ODAxNgotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktMjAwMC02LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktMjAzMC02LnVjb2RlIGIvaXdsd2lmaS0yMDMwLTYudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkNzY1NgotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktMjAzMC02LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktMzE2MC03LnVjb2RlIGIvaXdsd2lmaS0zMTYwLTcudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2NDZkNQotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktMzE2MC03LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktMzk0NS0yLnVjb2RlIGIvaXdsd2lmaS0zOTQ1LTIudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4MDZhMgotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktMzk0NS0yLnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNDk2NS0yLnVjb2RlIGIvaXdsd2lmaS00OTY1LTIudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFkNGFjZgotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNDk2NS0yLnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNTAwMC0xLnVjb2RlIGIvaXdsd2lmaS01MDAwLTEudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxOTE0OQotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNTAwMC0xLnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNTAwMC0yLnVjb2RlIGIvaXdsd2lmaS01MDAwLTIudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU3NmUwZAotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNTAwMC0yLnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNTAwMC01LnVjb2RlIGIvaXdsd2lmaS01MDAwLTUudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0ZjBjNwotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNTAwMC01LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNTE1MC0yLnVjb2RlIGIvaXdsd2lmaS01MTUwLTIudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkNjU4NgotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNTE1MC0yLnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNjAwMC00LnVjb2RlIGIvaXdsd2lmaS02MDAwLTQudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNlMDNhZQotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNjAwMC00LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNjAwMGcyYS01LnVjb2RlIGIvaXdsd2lmaS02MDAwZzJhLTUudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiOGZhNQotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNjAwMGcyYS01LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNjAwMGcyYS02LnVjb2RlIGIvaXdsd2lmaS02MDAwZzJhLTYudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmMjQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNjAwMGcyYS02LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNjAwMGcyYi01LnVjb2RlIGIvaXdsd2lmaS02MDAwZzJiLTUudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg1MDk1OQotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNjAwMGcyYi01LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNjAwMGcyYi02LnVjb2RlIGIvaXdsd2lmaS02MDAwZzJiLTYudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhZjlkYgotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNjAwMGcyYi02LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNjA1MC00LnVjb2RlIGIvaXdsd2lmaS02MDUwLTQudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyMGJkZgotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNjA1MC00LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNjA1MC01LnVjb2RlIGIvaXdsd2lmaS02MDUwLTUudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhMjA4NQotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNjA1MC01LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l3bHdpZmktNzI2MC03LnVjb2RlIGIvaXdsd2lmaS03MjYwLTcudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0YzdmMgotLS0gL2Rldi9udWxsCisrKyBiL2l3bHdpZmktNzI2MC03LnVjb2RlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2thd2V0aC9uZXdfY29kZS5iaW4gYi9rYXdldGgvbmV3X2NvZGUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZjA2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9rYXdldGgvbmV3X2NvZGUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2thd2V0aC9uZXdfY29kZV9maXguYmluIGIva2F3ZXRoL25ld19jb2RlX2ZpeC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxODg0MwotLS0gL2Rldi9udWxsCisrKyBiL2thd2V0aC9uZXdfY29kZV9maXguYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2thd2V0aC90cmlnZ2VyX2NvZGUuYmluIGIva2F3ZXRoL3RyaWdnZXJfY29kZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjZDdiOQotLS0gL2Rldi9udWxsCisrKyBiL2thd2V0aC90cmlnZ2VyX2NvZGUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2thd2V0aC90cmlnZ2VyX2NvZGVfZml4LmJpbiBiL2thd2V0aC90cmlnZ2VyX2NvZGVfZml4LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWFmMmQyCi0tLSAvZGV2L251bGwKKysrIGIva2F3ZXRoL3RyaWdnZXJfY29kZV9maXguYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vbXByLmZ3IGIva2V5c3Bhbi9tcHIuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5MDM4OAotLS0gL2Rldi9udWxsCisrKyBiL2tleXNwYW4vbXByLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vdXNhMTh4LmZ3IGIva2V5c3Bhbi91c2ExOHguZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4ODI5MwotLS0gL2Rldi9udWxsCisrKyBiL2tleXNwYW4vdXNhMTh4LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vdXNhMTkuZncgYi9rZXlzcGFuL3VzYTE5LmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNDBmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9rZXlzcGFuL3VzYTE5LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vdXNhMTlxaS5mdyBiL2tleXNwYW4vdXNhMTlxaS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjU1YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIva2V5c3Bhbi91c2ExOXFpLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vdXNhMTlxdy5mdyBiL2tleXNwYW4vdXNhMTlxdy5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTFhZTk3Ci0tLSAvZGV2L251bGwKKysrIGIva2V5c3Bhbi91c2ExOXF3LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vdXNhMTl3LmZ3IGIva2V5c3Bhbi91c2ExOXcuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhNTBkNgotLS0gL2Rldi9udWxsCisrKyBiL2tleXNwYW4vdXNhMTl3LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vdXNhMjguZncgYi9rZXlzcGFuL3VzYTI4LmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0OWZkODYKLS0tIC9kZXYvbnVsbAorKysgYi9rZXlzcGFuL3VzYTI4LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vdXNhMjh4LmZ3IGIva2V5c3Bhbi91c2EyOHguZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2OWYzYwotLS0gL2Rldi9udWxsCisrKyBiL2tleXNwYW4vdXNhMjh4LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vdXNhMjh4YS5mdyBiL2tleXNwYW4vdXNhMjh4YS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGZkNDhhCi0tLSAvZGV2L251bGwKKysrIGIva2V5c3Bhbi91c2EyOHhhLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vdXNhMjh4Yi5mdyBiL2tleXNwYW4vdXNhMjh4Yi5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGZlMjRjCi0tLSAvZGV2L251bGwKKysrIGIva2V5c3Bhbi91c2EyOHhiLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vdXNhNDl3LmZ3IGIva2V5c3Bhbi91c2E0OXcuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxNGQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2tleXNwYW4vdXNhNDl3LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW4vdXNhNDl3bGMuZncgYi9rZXlzcGFuL3VzYTQ5d2xjLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDA1N2MKLS0tIC9kZXYvbnVsbAorKysgYi9rZXlzcGFuL3VzYTQ5d2xjLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW5fcGRhL01ha2VmaWxlIGIva2V5c3Bhbl9wZGEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzN2VhNAotLS0gL2Rldi9udWxsCisrKyBiL2tleXNwYW5fcGRhL01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKK0NDID0gZ2NjCitJSEVYMkZXID0gaWhleDJmdworCithbGw6IGtleXNwYW5fcGRhLmZ3IHhpcmNvbV9wZ3MuZncKKworJS5mdzogJS5TCisJJChDQykgLXggYXNzZW1ibGVyLXdpdGgtY3BwIC1QIC1FIC1vICQqLmFzbSAkPAorCWFzMzEgLWwgJCouYXNtCisJJChJSEVYMkZXKSAkKi5oZXggJEAKKworY2xlYW46CisJcm0gLWYgKi5hc20gKi5mdyAqLmhleCAqLmxzdCAqLm9iagpkaWZmIC0tZ2l0IGEva2V5c3Bhbl9wZGEva2V5c3Bhbl9wZGEuUyBiL2tleXNwYW5fcGRhL2tleXNwYW5fcGRhLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyYmNjZQotLS0gL2Rldi9udWxsCisrKyBiL2tleXNwYW5fcGRhL2tleXNwYW5fcGRhLlMKQEAgLTAsMCArMSwxMTI5IEBACisvKiAgJElkOiBsb29wLnMsdiAxLjIzIDIwMDAvMDMvMjAgMDk6NDk6MDYgd2FybmVyIEV4cCAkCisgKiAKKyAqICBGaXJtd2FyZSBmb3IgdGhlIEtleXNwYW4gUERBIFNlcmlhbCBBZGFwdGVyLCBhIFVTQiBzZXJpYWwgcG9ydCBiYXNlZCBvbgorICogIHRoZSBFelVTQiBtaWNyb2NvbnRyb2xsZXIuCisgKiAKKyAqICAoQykgQ29weXJpZ2h0IDIwMDAgQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KKyAqIAorICogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIAl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqICAiS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIiIGlzIHByb2JhYmx5IGEgY29weXJpZ2h0IG9mIEtleXNwYW4sIHRoZQorICogIGNvbXBhbnkuCisgKiAKKyAqICBUaGlzIHNlcmlhbCBhZGFwdGVyIGlzIGJhc2ljYWxseSBhbiBFelVTQiBjaGlwIGFuZCBhbiBSUy0yMzIgbGluZSBkcml2ZXIKKyAqICBpbiBhIGxpdHRsZSB3aWRnZXQgdGhhdCBoYXMgYSBEQi05IG9uIG9uZSBlbmQgYW5kIGEgVVNCIHBsdWcgb24gdGhlIG90aGVyLgorICogIEl0IHVzZXMgdGhlIEV6VVNCJ3MgaW50ZXJuYWwgVUFSVDAgKHVzaW5nIHRoZSBwaW5zIGZyb20gUG9ydCBDKSBhbmQgdGltZXIyCisgKiAgYXMgYSBiYXVkLXJhdGUgZ2VuZXJhdG9yLiBUaGUgd2lyaW5nIGlzOgorICogICBQQzAvUnhEMCA8LSByeGQgKERCOSBwaW4gMikgICAgICAgICBQQzQgPC0gZHNyIHBpbiA2CisgKiAgIFBDMS9UeEQwIC0+IHR4ZCBwaW4gMyAgICAgICAgICAgICAgIFBDNSA8LSByaSAgcGluIDkKKyAqICAgUEMyICAgICAgLT4gcnRzIHBpbiA3ICAgICAgICAgICAgICAgUEM2IDwtIGRjZCBwaW4gMQorICogICBQQzMgICAgICA8LSBjdHMgcGluIDggICAgICAgICAgICAgICBQQzcgLT4gZHRyIHBpbiA0CisgKiAgIFBCMSAtPiBsaW5lIGRyaXZlciBzdGFuZGJ5CisgKgorICogIFRoZSBFelVTQiByZWdpc3RlciBjb25zdGFudHMgYmVsb3cgY29tZSBmcm9tIHRoZWlyIGV4Y2VsbGVudCBkb2N1bWVudGF0aW9uCisgKiAgYW5kIHNhbXBsZSBjb2RlICh3aGljaCB1c2VkIHRvIGJlIGF2YWlsYWJsZSBhdCB3d3cuYW5jaG9yY2hpcHMuY29tLCBidXQKKyAqICB0aGF0IGhhcyBub3cgYmVlbiBhYnNvcmJlZCBpbnRvIEN5cHJlc3MnIHNpdGUgYW5kIHRoZSBDRC1ST00gY29udGVudHMKKyAqICBkb24ndCBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlIG9ubGluZSBhbnltb3JlKS4gSWYgd2UgZ2V0IG11bHRpcGxlCisgKiAgRXpVU0ItYmFzZWQgZHJpdmVycyBpbnRvIHRoZSBrZXJuZWwsIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBwdWxsIHRoZW0gb3V0CisgKiAgaW50byBhIHNlcGFyYXRlIC5oIGZpbGUuCisgKiAKKyAqIFRIRU9SWSBPRiBPUEVSQVRJT046CisgKgorICogICBUaGVyZSBhcmUgdHdvIDI1Ni1ieXRlIHJpbmcgYnVmZmVycywgb25lIGZvciB0eCwgb25lIGZvciByeC4KKyAqCisgKiAgIEVQMm91dCBpcyBwdXJlIHR4IGRhdGEuIFdoZW4gaXQgYXBwZWFycywgdGhlIGRhdGEgaXMgY29waWVkIGludG8gdGhlIHR4CisgKiAgIHJpbmcgYW5kIHNlcmlhbCB0cmFuc21pc3Npb24gaXMgc3RhcnRlZCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBydW5uaW5nLiBUaGUKKyAqICAgInR4IGJ1ZmZlciBlbXB0eSIgaW50ZXJydXB0IG1heSBraWNrIG9mZiBhbm90aGVyIGNoYXJhY3RlciBpZiB0aGUgcmluZworICogICBzdGlsbCBoYXMgZGF0YS4gSWYgdGhlIGhvc3QgaXMgdHgtYmxvY2tlZCBiZWNhdXNlIHRoZSByaW5nIGZpbGxlZCB1cCwKKyAqICAgaXQgd2lsbCByZXF1ZXN0IGEgInR4IHVudGhyb3R0bGUiIGludGVycnVwdC4gSWYgc2VuZGluZyBhIHNlcmlhbCBjaGFyYWN0ZXIKKyAqICAgZW1wdGllcyB0aGUgcmluZyBiZWxvdyB0aGUgZGVzaXJlZCB0aHJlc2hvbGQsIHdlIHNldCBhIGJpdCB0aGF0IHdpbGwgc2VuZAorICogICB1cCB0aGUgdHggdW50aHJvdHRsZSBtZXNzYWdlIGFzIHNvb24gYXMgdGhlIHJ4IGJ1ZmZlciBiZWNvbWVzIGZyZWUuCisgKgorICogICBFUDJpbiAoaW50ZXJydXB0KSBpcyB1c2VkIHRvIHNlbmQgYm90aCByeCBjaGFycyBhbmQgcnggc3RhdHVzIG1lc3NhZ2VzCisgKiAgIChvbmx5ICJ0eCB1bnRocm90dGxlIiBhdCB0aGlzIHRpbWUpIGJhY2sgdXAgdG8gdGhlIGhvc3QuIFRoZSBmaXJzdCBieXRlCisgKiAgIG9mIHRoZSByeCBtZXNzYWdlIGluZGljYXRlcyBkYXRhICgwKSBvciBzdGF0dXMgbXNnICgxKS4gU3RhdHVzIG1lc3NhZ2VzCisgKiAgIGFyZSBzZW50IGJlZm9yZSBhbnkgZGF0YS4KKyAqCisgKiAgIEluY29taW5nIHNlcmlhbCBjaGFyYWN0ZXJzIGFyZSBwdXQgaW50byB0aGUgcnggcmluZyBieSB0aGUgc2VyaWFsCisgKiAgIGludGVycnVwdCwgYW5kIHRoZSBFUDJpbiBidWZmZXIgc2VudCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBpbiB0cmFuc2l0LgorICogICBXaGVuIHRoZSBFUDJpbiBidWZmZXIgcmV0dXJucywgdGhlIGludGVycnVwdCBwcm9tcHRzIHVzIHRvIHNlbmQgbW9yZQorICogICByeCBjaGFycyAob3Igc3RhdHVzIG1lc3NhZ2VzKSBpZiB0aGV5IGFyZSBwZW5kaW5nLgorICoKKyAqICAgRGV2aWNlIGNvbnRyb2wgaGFwcGVucyB0aHJvdWdoICJ2ZW5kb3Igc3BlY2lmaWMiIGNvbnRyb2wgbWVzc2FnZXMgb24gRVAwLgorICogICBBbGwgbWVzc2FnZXMgYXJlIGRlc3RpbmVkIGZvciB0aGUgIkludGVyZmFjZSIgKHdpdGggdGhlIGluZGV4IGFsd2F5cyAwLAorICogICBzbyB0aGF0IGlmIHRoZWlyIHR3by1wb3J0IGRldmljZSBtaWdodCBzb21lZGF5IHVzZSBzaW1pbGFyIGZpcm13YXJlLCB3ZQorICogICBjYW4gdXNlIGluZGV4PTEgdG8gcmVmZXIgdG8gdGhlIHNlY29uZCBwb3J0KS4gVGhlIG1lc3NhZ2VzIGRlZmluZWQgYXJlOgorICoKKyAqICAgIGJSZXF1ZXN0ID0gMCA6IHNldCBiYXVkL2JpdHMvcGFyaXR5CisgKiAgICAgICAgICAgICAgIDEgOiB1bnVzZWQKKyAqICAgICAgICAgICAgICAgMiA6IHJlc2VydmVkIGZvciBzZXR0aW5nIEhXIGZsb3cgY29udHJvbCAoQ1RTUlRTKQorICogICAgICAgICAgICAgICAzIDogZ2V0L3NldCAibW9kZW0gaW5mbyIgKHBpbiBzdGF0ZXM6IERUUiwgUlRTLCBEQ0QsIFJJLCBldGMpCisgKiAgICAgICAgICAgICAgIDQgOiBzZXQgYnJlYWsgKG9uL29mZikKKyAqICAgICAgICAgICAgICAgNSA6IHJlc2VydmVkIGZvciByZXF1ZXN0aW5nIGludGVycnVwdHMgb24gcGluIHN0YXRlIGNoYW5nZQorICogICAgICAgICAgICAgICA2IDogcXVlcnkgYnVmZmVyIHJvb20gb3IgY2hhcnMgaW4gdHggYnVmZmVyCisgKiAgICAgICAgICAgICAgIDcgOiByZXF1ZXN0IHR4IHVudGhyb3R0bGUgaW50ZXJydXB0CisgKgorICogIFRoZSBob3N0LXNpZGUgZHJpdmVyIGlzIHNldCB0byByZWNvZ25pemUgdGhlIGRldmljZSBJRCB2YWx1ZXMgc3Rhc2hlZCBpbgorICogIHNlcmlhbCBFRVBST00gKDB4MDZjZCwgMHgwMTAzKSwgcHJvZ3JhbSB0aGlzIGZpcm13YXJlIGludG8gcGxhY2UsIHRoZW4KKyAqICBzdGFydCBpdCBydW5uaW5nLiBUaGlzIGZpcm13YXJlIHdpbGwgdXNlIEV6VVNCJ3MgInJlbnVtZXJhdGlvbiIgdHJpY2sgYnkKKyAqICBzaW11bGF0aW5nIGEgYnVzIGRpc2Nvbm5lY3QsIHRoZW4gcmVjb25uZWN0IHdpdGggYSBkaWZmZXJlbnQgZGV2aWNlIElECisgKiAgKGVuY29kZWQgaW4gdGhlIGRlc2NfZGV2aWNlIGRlc2NyaXB0b3IgYmVsb3cpLiBUaGUgaG9zdCBkcml2ZXIgdGhlbgorICogIHJlY29nbml6ZXMgdGhlIG5ldyBkZXZpY2UgSUQgYW5kIGdsdWVzIGl0IHRvIHRoZSByZWFsIHNlcmlhbCBkcml2ZXIgY29kZS4KKyAqCisgKiBVU0VGVUwgRE9DUzoKKyAqICBFelVTQiBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbDogPGh0dHA6Ly93d3cuYW5jaG9yY2hpcHMuY29tPgorICogIDgwNTEgbWFudWFsczogZXZlcnl3aGVyZSwgYnV0IHRyeSB3d3cuZGFsc2VtaS5jb20gYmVjYXVzZSB0aGUgRXpVU0IgaXMKKyAqICAgYmFzaWNhbGx5IHRoZSBEYWxsYXMgZW5oYW5jZWQgODA1MSBjb2RlLiBSZW1lbWJlciB0aGF0IHRoZSBFelVTQiBJTyBwb3J0cworICogICB1c2UgdG90YWxseSBkaWZmZXJlbnQgcmVnaXN0ZXJzIQorICogIFVTQiAxLjEgc3BlYzogd3d3LnVzYi5vcmcKKyAqCisgKiBIT1cgVE8gQlVJTEQ6CisgKiAgZ2NjIC14IGFzc2VtYmxlci13aXRoLWNwcCAtUCAtRSAtbyBrZXlzcGFuX3BkYS5hc20ga2V5c3Bhbl9wZGEucworICogIGFzMzEgLWwga2V5c3Bhbl9wZGEuYXNtCisgKiAgbXYga2V5c3Bhbl9wZGEub2JqIGtleXNwYW5fcGRhLmhleAorICogIHBlcmwgZXp1c2JfY29udmVydC5wbCBrZXlzcGFuX3BkYSA8IGtleXNwYW5fcGRhLmhleCA+IGtleXNwYW5fcGRhX2Z3LmgKKyAqIEdldCBhczMxIGZyb20gPGh0dHA6Ly93d3cucGpyYy5jb20vdGVjaC84MDUxL2luZGV4Lmh0bWw+LCBhbmQgaGFjayBvbiBpdAorICogYSBiaXQgdG8gbWFrZSBpdCBidWlsZC4KKyAqCisgKiBUSEFOS1M6CisgKiAgR3JlZyBLcm9haC1IYXJ0bWFuLCBmb3IgY29vcmRpbmF0aW5nIHRoZSB3aG9sZSB1c2Itc2VyaWFsIHRoaW5nLgorICogIEFuY2hvckNoaXBzLCBmb3IgbWFraW5nIHN1Y2ggYW4gaW5jcmVkaWJseSB1c2VmdWwgbGl0dGxlIG1pY3JvY29udHJvbGxlci4KKyAqICBLZXlTcGFuLCBmb3IgbWFraW5nIGEgaGFuZHksIGNoZWFwICgkNDApIHdpZGdldCB0aGF0IHdhcyBzbyBlYXN5IHRvIHRha2UKKyAqICAgICAgICAgICBhcGFydCBhbmQgdHJhY2Ugd2l0aCBhbiBvaG1tZXRlci4KKyAqCisgKiBUT0RPOgorICogIGxvdHMuIGdyZXAgZm9yIFRPRE8uIEludGVycnVwdCBzYWZldHkgbmVlZHMgc3RyZXNzLXRlc3RpbmcuIEJldHRlciBmbG93CisgKiAgY29udHJvbC4gSW50ZXJydXB0aW5nIGhvc3QgdXBvbiBjaGFuZ2UgaW4gRENELCBldGMsIGNvdW50aW5nIHRyYW5zaXRpb25zLgorICogIE5lZWQgdG8gZmluZCBhIHNhZmUgZGV2aWNlIGlkIHRvIHVzZSAodGhlIG9uZSB1c2VkIGJ5IHRoZSBLZXlzcGFuIGZpcm13YXJlCisgKiAgdW5kZXIgV2luZG93cyB3b3VsZCBiZSBpZGVhbC4uIGNhbiBhbnlvbmUgZmlndXJlIG91dCB3aGF0IGl0IGlzPykuIFBhcml0eS4KKyAqICBNb3JlIGJhdWQgcmF0ZXMuIE9oLCBhbmQgdGhlIHN0cmluZy1kZXNjcmlwdG9yLWxlbmd0aCBzaWxpY29uIGJ1ZworICogIHdvcmthcm91bmQgc2hvdWxkIGJlIGltcGxlbWVudGVkLCBidXQgSSdtIGxhenksIGFuZCB0aGUgY29uc2VxdWVuY2UgaXMKKyAqICB0aGF0IHRoZSBkZXZpY2UgbmFtZSBzdHJpbmdzIHRoYXQgc2hvdyB1cCBpbiB5b3VyIGtlcm5lbCBsb2cgd2lsbCBoYXZlCisgKiAgbG90cyBvZiB0cmFpbGluZyBiaW5hcnkgZ2FyYmFnZSBpbiB0aGVtIChhcHBlYXJzIGFzID8/Pz8pLiBEZXZpY2Ugc3RyaW5ncworICogIHNob3VsZCBiZSBtYWRlIG1vcmUgYWNjdXJhdGUuCisgKgorICogUXVlc3Rpb25zLCBidWdzLCBwYXRjaGVzIHRvIEJyaWFuLgorICoKKyAqICAtQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KKyAqCisgKi8KKwkKKyNkZWZpbmUgSElHSCh4KSAoKCh4KSAmIDB4ZmYwMCkgLyAyNTYpCisjZGVmaW5lIExPVyh4KSAoKHgpICYgMHhmZikKKworI2RlZmluZSBkcGwxIDB4ODQKKyNkZWZpbmUgZHBoMSAweDg1CisjZGVmaW5lIGRwcyAweDg2CisKKzs7OyBvdXIgYml0IGFzc2lnbm1lbnRzCisjZGVmaW5lIFRYX1JVTk5JTkcgMAorI2RlZmluZSBET19UWF9VTlRIUk9UVExFIDEKKwkKKwk7OyBzdGFjayBmcm9tIDB4NjAgdG8gMHg3Zjogc2hvdWxkIHJlYWxseSBzZXQgU1AgdG8gMHg2MC0xLCBub3QgMHg2MAorI2RlZmluZSBTVEFDSyAjMHg2MC0xCisKKyNkZWZpbmUgRVhJRiAweDkxCisjZGVmaW5lIEVJRSAweGU4CisJLmZsYWcgRVVTQiwgRUlFLjAKKwkuZmxhZyBFUzAsIElFLjQKKworI2RlZmluZSBFUDBDUyAjMHg3ZmI0CisjZGVmaW5lIEVQMFNUQUxMYml0ICMweDAxCisjZGVmaW5lIElOMEJVRiAjMHg3ZjAwCisjZGVmaW5lIElOMEJDICMweDdmYjUKKyNkZWZpbmUgT1VUMEJVRiAjMHg3ZWMwCisjZGVmaW5lIE9VVDBCQyAjMHg3ZmM1CQkKKyNkZWZpbmUgSU4yQlVGICMweDdlMDAKKyNkZWZpbmUgSU4yQkMgIzB4N2ZiOQorI2RlZmluZSBJTjJDUyAjMHg3ZmI4CisjZGVmaW5lIE9VVDJCQyAjMHg3ZmM5CisjZGVmaW5lIE9VVDJDUyAjMHg3ZmM4CisjZGVmaW5lIE9VVDJCVUYgIzB4N2RjMAorI2RlZmluZSBJTjRCVUYgIzB4N2QwMAorI2RlZmluZSBJTjRCQyAjMHg3ZmJkCisjZGVmaW5lIElONENTICMweDdmYmMKKyNkZWZpbmUgT0VCICMweDdmOWQKKyNkZWZpbmUgT1VUQiAjMHg3Zjk3CisjZGVmaW5lIE9FQyAjMHg3ZjllCisjZGVmaW5lIE9VVEMgIzB4N2Y5OAorI2RlZmluZSBQSU5TQyAjMHg3ZjliCisjZGVmaW5lIFBPUlRDQ0ZHICMweDdmOTUKKyNkZWZpbmUgSU4wN0lSUSAjMHg3ZmE5CisjZGVmaW5lIE9VVDA3SVJRICMweDdmYWEKKyNkZWZpbmUgSU4wN0lFTiAjMHg3ZmFjCisjZGVmaW5lIE9VVDA3SUVOICMweDdmYWQKKyNkZWZpbmUgVVNCSVJRICMweDdmYWIKKyNkZWZpbmUgVVNCSUVOICMweDdmYWUKKyNkZWZpbmUgVVNCQkFWICMweDdmYWYKKyNkZWZpbmUgVVNCQ1MgIzB4N2ZkNgorI2RlZmluZSBTVURQVFJIICMweDdmZDQKKyNkZWZpbmUgU1VEUFRSTCAjMHg3ZmQ1CisjZGVmaW5lIFNFVFVQREFUICMweDdmZTgKKwkJCisJOzsgdXNiIGludGVycnVwdCA6IGVuYWJsZSBpcyBFSUUuMCAoMHhlOCksIGZsYWcgaXMgRVhJRi40ICgweDkxKQorCisJLm9yZyAwCisJbGptcCBzdGFydAorCTs7IGludGVycnVwdCB2ZWN0b3JzCisJLm9yZyAyM0gKKwlsam1wIHNlcmlhbF9pbnQKKwkuYnl0ZSAwCisJCisJLm9yZyA0M0gKKwlsam1wIFVTQl9KdW1wX1RhYmxlCisJLmJ5dGUgMAkJCTsgZmlsbGVkIGluIGJ5IHRoZSBVU0IgY29yZQorCis7OzsgbG9jYWwgdmFyaWFibGVzLiBUaGVzZSBhcmUgbm90IGluaXRpYWxpemVkIHByb3Blcmx5OiBkbyBpdCBieSBoYW5kLgorCS5vcmcgMzBICityeF9yaW5nX2luOgkuYnl0ZSAwCityeF9yaW5nX291dDoJLmJ5dGUgMAordHhfcmluZ19pbjoJLmJ5dGUgMAordHhfcmluZ19vdXQ6CS5ieXRlIDAKK3R4X3VudGhyb3R0bGVfdGhyZXNob2xkOgkuYnl0ZSAwCisJCQorCS5vcmcgMHgxMDBICQk7IHdhbnRzIHRvIGJlIG9uIGEgcGFnZSBib3VuZGFyeQorVVNCX0p1bXBfVGFibGU6CisJbGptcAlJU1JfU3VkYXYJOyBTZXR1cCBEYXRhIEF2YWlsYWJsZQorCS5ieXRlIDAKKwlsam1wCTAJCTsgU3RhcnQgb2YgRnJhbWUKKwkuYnl0ZSAwCisJbGptcAkwCQk7IFNldHVwIERhdGEgTG9hZGluZworCS5ieXRlIDAKKwlsam1wCTAJCTsgR2xvYmFsIFN1c3BlbmQKKwkuYnl0ZSAJMAorCWxqbXAJMAkJOyBVU0IgUmVzZXQgIAkKKwkuYnl0ZQkwCisJbGptcAkwCQk7IFJlc2VydmVkCisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMCBJbgorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDAgT3V0CisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMSBJbgorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDEgT3V0CisJLmJ5dGUJMAorCWxqbXAJSVNSX0VwMmluCisJLmJ5dGUJMAorCWxqbXAJSVNSX0VwMm91dAorCS5ieXRlCTAKKworCisJLm9yZyAweDIwMAorCQkKK3N0YXJ0Ogltb3YgU1AsU1RBQ0stMSA7IHNldCBzdGFjaworCTs7IGNsZWFyIGxvY2FsIHZhcmlhYmxlcworCWNsciBhCisJbW92IHR4X3JpbmdfaW4sIGEKKwltb3YgdHhfcmluZ19vdXQsIGEKKwltb3YgcnhfcmluZ19pbiwgYQorCW1vdiByeF9yaW5nX291dCwgYQorCW1vdiB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgYQorCWNsciBUWF9SVU5OSU5HCisJY2xyIERPX1RYX1VOVEhST1RUTEUKKwkKKwk7OyBjbGVhciBmaWZvIHdpdGggImZlIgorCW1vdiByMSwgMAorCW1vdiBhLCAjMHhmZQorCW1vdiBkcHRyLCAjdHhfcmluZworY2xlYXJfdHhfcmluZ19sb29wOgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCWRqbnogcjEsIGNsZWFyX3R4X3JpbmdfbG9vcAorCisJbW92IGEsICMweGZkCisJbW92IGRwdHIsICNyeF9yaW5nCitjbGVhcl9yeF9yaW5nX2xvb3A6CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJZGpueiByMSwgY2xlYXJfcnhfcmluZ19sb29wCisKKzs7OyB0dXJuIG9uIHRoZSBSUy0yMzIgZHJpdmVyIGNoaXAgKGJyaW5nIHRoZSBTVEFOREJZIHBpbiBsb3cpCisJOzsgc2V0IE9FQi4xCisJbW92IGEsICMwMkgKKwltb3YgZHB0cixPRUIKKwltb3Z4IEBkcHRyLGEKKwk7OyBjbGVhciBQQjEKKwltb3YgYSwgIzAwSAorCW1vdiBkcHRyLE9VVEIKKwltb3Z4IEBkcHRyLGEKKwk7OyBzZXQgT0VDLlsxMjddCisJbW92IGEsICMweDg2CisJbW92IGRwdHIsT0VDCisJbW92eCBAZHB0cixhCisJOzsgc2V0IFBPUlRDQ0ZHLlswMV0gdG8gcm91dGUgVHhEMCxSeEQwIHRvIHNlcmlhbCBwb3J0CisJbW92IGRwdHIsIFBPUlRDQ0ZHCisJbW92IGEsICMweDAzCisJbW92eCBAZHB0ciwgYQorCQorCTs7IHNldCB1cCBpbnRlcnJ1cHRzLCBhdXRvdmVjdG9yaW5nCisJbW92IGRwdHIsIFVTQkJBVgorCW1vdnggYSxAZHB0cgorCXNldGIgYWNjLjAJCTsgQVZFTiBiaXQgdG8gMAorCW1vdnggQGRwdHIsIGEKKworCW1vdiBhLCMweDAxCQk7IGVuYWJsZSBTVURBVjoJc2V0dXAgZGF0YSBhdmFpbGFibGUgKGZvciBlcDApCisJbW92IGRwdHIsIFVTQklSUQorCW1vdnggQGRwdHIsIGEJCTsgY2xlYXIgU1VEQVZJCisJbW92IGRwdHIsIFVTQklFTgorCW1vdnggQGRwdHIsIGEKKwkKKwltb3YgZHB0ciwgSU4wN0lFTgorCW1vdiBhLCMweDA0CQk7IGVuYWJsZSBJTjIgaW50CisJbW92eCBAZHB0ciwgYQorCQorCW1vdiBkcHRyLCBPVVQwN0lFTgorCW1vdiBhLCMweDA0CQk7IGVuYWJsZSBPVVQyIGludAorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgT1VUMkJDCisJbW92eCBAZHB0ciwgYQkJOyBhcm0gT1VUMgorCisJbW92IGEsICMweDg0CQk7IHR1cm4gb24gUlRTLCBEVFIKKwltb3YgZHB0cixPVVRDCisJbW92eCBAZHB0ciwgYQorCTs7IHNldHVwIHRoZSBzZXJpYWwgcG9ydC4gOTYwMCA4TjEuCisJOzsgT3JpZ2luYWwgc291cmNlIGhhZDoKKwk7O21vdiBhLCMwMTAxMDAxMQkJOyBtb2RlIDEsIGVuYWJsZSByeCwgY2xlYXIgaW50CisJOzsgVGhpcyB3YXMgcHJlc3VtYWJseSBtZWFudCB0byBiZSBhIGJpbmFyeSBjb25zdGFudCwgYnV0IGl0J3MKKwk7OyByZWFsbHkgZGVjaW1hbCBhbmQgb3V0IG9mIDgtYml0IHJhbmdlLiAgYXMzMSB1c2VkIHRvIHRyZWF0CisJOzsgaXQgYXMgMCBhbmQgdGhhdCBzZWVtcyB0byBoYXZlIHdvcmtlZCwgc28gY2Fycnkgb24gd2l0aCAwLgorCW1vdiBhLCMwCisJbW92IFNDT04sIGEKKwk7OyAgdXNpbmcgdGltZXIyLCBpbiAxNi1iaXQgYmF1ZC1yYXRlLWdlbmVyYXRvciBtb2RlCisJOzsgICAoeHRhbCAxMk1IeiwgaW50ZXJuYWwgZm9zYyAyNE1IeikKKwk7OyAgUkNBUDJILFJDQVAyTCA9IDY1NTM2IC0gZm9zYy8oMzIqYmF1ZCkKKwk7OyAgNTc2MDA6IDB4RkZGMi5GLCBzYXkgMHhGRkYzCisJOzsgICA5NjAwOiAweEZGQjEuRSwgc2F5IDB4RkZCMgorCTs7ICAgIDMwMDogMHhGNjNDCisjZGVmaW5lIEJBVUQgOTYwMAorI2RlZmluZSBCQVVEX1RJTUVPVVQocmF0ZSkgKDY1NTM2IC0gKDI0ICogMTAwMCAqIDEwMDApIC8gKDMyICogcmF0ZSkpCisjZGVmaW5lIEJBVURfSElHSChyYXRlKSBISUdIKEJBVURfVElNRU9VVChyYXRlKSkKKyNkZWZpbmUgQkFVRF9MT1cocmF0ZSkgTE9XKEJBVURfVElNRU9VVChyYXRlKSkKKwkJCisJbW92IFQyQ09OLCAjMDMwaAk7IHJjbGs9MSx0Y2xrPTEsY3A9MCx0cjI9MChlbmFibGUgbGF0ZXIpCisJbW92IHIzLCAjNQorCWFjYWxsIHNldF9iYXVkCisJc2V0YiBUUjIKKwltb3YgU0NPTiwgIzA1MGgKKwkKKyNpZiAwCisJbW92IHIxLCAjMHg0MAorCW1vdiBhLCAjMHg0MQorc2VuZDoJCisJbW92IFNCVUYsIGEKKwlpbmMgYQorCWFubCBhLCAjMHgzRgorCW9ybCBhLCAjMHg0MAorOwl4cmwgYSwgIzB4MDIKK3dhaXQxOgkKKwlqbmIgVEksIHdhaXQxCisJY2xyIFRJCisJZGpueiByMSwgc2VuZAorO2RvbmU6CXNqbXAgZG9uZQorCisjZW5kaWYKKwkKKwlzZXRiIEVVU0IKKwlzZXRiIEVBCisJc2V0YiBFUzAKKwk7YWNhbGwgZHVtcF9zdGF0CisKKwk7OyBoZXksIHdoYXQgc2F5IHdlIFJFTlVNRVJBVEUhIChUUk0gcC42MikKKwltb3YgYSwgIzAKKwltb3YgZHBzLCBhCisJbW92IGRwdHIsIFVTQkNTCisJbW92IGEsICMweDAyCQk7IERJU0NPTj0wLCBESVNDT0U9MCwgUkVOVU09MQorCW1vdnggQGRwdHIsIGEKKwk7OyBub3cgcHJlc2VuY2UgcGluIGlzIGZsb2F0aW5nLCBzaW11bGF0aW5nIGRpc2Nvbm5lY3QuIHdhaXQgMC41cworCW1vdiByMSwgIzQ2CityZW51bV93YWl0MToKKwltb3YgcjIsICMwCityZW51bV93YWl0MjoKKwltb3YgcjMsICMwCityZW51bV93YWl0MzoKKwlkam56IHIzLCByZW51bV93YWl0MworCWRqbnogcjIsIHJlbnVtX3dhaXQyCisJZGpueiByMSwgcmVudW1fd2FpdDEJOyB3YWl0IGFib3V0IG4qKDI1Nl4yKSA2TUh6IGNsb2NrcworCW1vdiBhLCAjMHgwNgkJOyBESVNDT049MCwgRElTQ09FPTEsIFJFTlVNPTEKKwltb3Z4IEBkcHRyLCBhCisJOzsgd2UgYXJlIGJhY2sgb25saW5lLiB0aGUgaG9zdCBkZXZpY2Ugd2lsbCBub3cgcmUtcXVlcnkgdXMKKwkKKwkKK21haW46CXNqbXAgbWFpbgorCisJCisKK0lTUl9TdWRhdjoKKwlwdXNoIGRwcworCXB1c2ggZHBsCisJcHVzaCBkcGgKKwlwdXNoIGRwbDEKKwlwdXNoIGRwaDEKKwlwdXNoIGFjYworCW1vdiBhLEVYSUYKKwljbHIgYWNjLjQKKwltb3YgRVhJRixhCQk7IGNsZWFyIElOVDIgZmlyc3QKKwltb3YgZHB0ciwgVVNCSVJRCTsgY2xlYXIgVVNCIGludAorCW1vdiBhLCMwMWgKKwltb3Z4IEBkcHRyLGEKKworCTs7IGdldCByZXF1ZXN0IHR5cGUKKwltb3YgZHB0ciwgU0VUVVBEQVQKKwltb3Z4IGEsIEBkcHRyCisJbW92IHIxLCBhCQk7IHIxID0gYm1SZXF1ZXN0VHlwZQorCWluYyBkcHRyCisJbW92eCBhLCBAZHB0cgorCW1vdiByMiwgYQkJOyByMiA9IGJSZXF1ZXN0CisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHIzLCBhCQk7IHIzID0gd1ZhbHVlTAorCWluYyBkcHRyCisJbW92eCBhLCBAZHB0cgorCW1vdiByNCwgYQkJOyByNCA9IHdWYWx1ZUgKKworCTs7IG1haW4gc3dpdGNoIG9uIGJtUmVxdWVzdC50eXBlOiBzdGFuZGFyZCBvciB2ZW5kb3IKKwltb3YgYSwgcjEKKwlhbmwgYSwgIzB4NjAKKwljam5lIGEsICMweDAwLCBzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZAorCTs7IHN0YW5kYXJkIHJlcXVlc3Q6IG5vdyBtYWluIHN3aXRjaCBpcyBvbiBiUmVxdWVzdAorCWxqbXAgc2V0dXBfYm1yZXFfaXNfc3RhbmRhcmQKKwkKK3NldHVwX2JtcmVxX3R5cGVfbm90X3N0YW5kYXJkOgkKKwk7OyBhIHN0aWxsIGhhcyBibXJlcSYweDYwCisJY2puZSBhLCAjMHg0MCwgc2V0dXBfYm1yZXFfdHlwZV9ub3RfdmVuZG9yCisJOzsgQW5jaG9yIHJlc2VydmVzIGJSZXF1ZXN0IDB4YTAtMHhhZiwgd2UgdXNlIHNtYWxsIG9uZXMKKwk7OyBzd2l0Y2ggb24gYlJlcXVlc3QuIGJtUmVxdWVzdCB3aWxsIGFsd2F5cyBiZSAweDQxIG9yIDB4YzEKKwljam5lIHIyLCAjMHgwMCwgc2V0dXBfY3RybF9ub3RfMDAKKwk7OyAwMCBpcyBzZXQgYmF1ZCwgd1ZhbHVlWzBdIGhhcyBiYXVkIHJhdGUgaW5kZXgKKwlsY2FsbCBzZXRfYmF1ZAkJOyBpbmRleCBpbiByMywgY2Fycnkgc2V0IGlmIGVycm9yCisJamMgc2V0dXBfYm1yZXFfdHlwZV9ub3Rfc3RhbmRhcmRfX2RvX3N0YWxsCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfYm1yZXFfdHlwZV9ub3Rfc3RhbmRhcmRfX2RvX3N0YWxsOgorCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzAwOgorCWNqbmUgcjIsICMweDAxLCBzZXR1cF9jdHJsX25vdF8wMQorCTs7IDAxIGlzIHJlc2VydmVkIGZvciBzZXQgYml0cyAocGFyaXR5KS4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzAxOgorCWNqbmUgcjIsICMweDAyLCBzZXR1cF9jdHJsX25vdF8wMgorCTs7IDAyIGlzIHNldCBIVyBmbG93IGNvbnRyb2wuIFRPRE8KKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wMjoKKwljam5lIHIyLCAjMHgwMywgc2V0dXBfY3RybF9ub3RfMDMKKwk7OyAwMyBpcyBjb250cm9sIHBpbnMgKFJUUywgRFRSKS4KKwlsam1wIGNvbnRyb2xfcGlucwk7IHdpbGwganVtcCB0byBzZXR1cF9kb25lX2FjaywKKwkJCQk7ICBvciBzZXR1cF9yZXR1cm5fb25lX2J5dGUKK3NldHVwX2N0cmxfbm90XzAzOgorCWNqbmUgcjIsICMweDA0LCBzZXR1cF9jdHJsX25vdF8wNAorCTs7IDA0IGlzIHNlbmQgYnJlYWsgKHJlYWxseSAidHVybiBicmVhayBvbi9vZmYiKS4gVE9ETworCWNqbmUgcjMsICMweDAwLCBzZXR1cF9jdHJsX2RvX2JyZWFrX29uCisJOzsgZG8gYnJlYWsgb2ZmOiByZXN0b3JlIFBPUlRDQ0ZHLjEgdG8gcmVjb25uZWN0IFR4RDAgdG8gc2VyaWFsIHBvcnQKKwltb3YgZHB0ciwgUE9SVENDRkcKKwltb3Z4IGEsIEBkcHRyCisJb3JsIGEsICMweDAyCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2N0cmxfZG9fYnJlYWtfb246CisJOzsgZG8gYnJlYWsgb246IGNsZWFyIFBPUlRDQ0ZHLjAsIHNldCBUeEQgaGlnaCg/KSAoYjEgbG93KQorCW1vdiBkcHRyLCBPVVRDCisJbW92eCBhLCBAZHB0cgorCWFubCBhLCAjMHhmZAkJOyB+MHgwMgorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgUE9SVENDRkcKKwltb3Z4IGEsIEBkcHRyCisJYW5sIGEsICMweGZkCQk7IH4weDAyCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2N0cmxfbm90XzA0OgorCWNqbmUgcjIsICMweDA1LCBzZXR1cF9jdHJsX25vdF8wNQorCTs7IDA1IGlzIHNldCBkZXNpcmVkIGludGVycnVwdCBiaXRtYXAuIFRPRE8KKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wNToKKwljam5lIHIyLCAjMHgwNiwgc2V0dXBfY3RybF9ub3RfMDYKKwk7OyAwNiBpcyBxdWVyeSByb29tCisJY2puZSByMywgIzB4MDAsIHNldHVwX2N0cmxfMDZfbm90XzAwCisJOzsgMDYsIHdWYWx1ZVswXT0wIGlzIHF1ZXJ5IHdyaXRlX3Jvb20KKwltb3YgYSwgdHhfcmluZ19vdXQKKwlzZXRiIGMKKwlzdWJiIGEsIHR4X3JpbmdfaW4JOyBvdXQtMS1pbiA9IDI1NSAtIChpbi1vdXQpCisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKK3NldHVwX2N0cmxfMDZfbm90XzAwOgorCWNqbmUgcjMsICMweDAxLCBzZXR1cF9jdHJsXzA2X25vdF8wMQorCTs7IDA2LCB3VmFsdWVbMF09MSBpcyBxdWVyeSBjaGFyc19pbl9idWZmZXIKKwltb3YgYSwgdHhfcmluZ19pbgorCWNsciBjCisJc3ViYiBhLCB0eF9yaW5nX291dAk7IGluLW91dAorCWxqbXAgc2V0dXBfcmV0dXJuX29uZV9ieXRlCitzZXR1cF9jdHJsXzA2X25vdF8wMToJCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDY6CisJY2puZSByMiwgIzB4MDcsIHNldHVwX2N0cmxfbm90XzA3CisJOzsgMDcgaXMgcmVxdWVzdCB0eCB1bnRocm90dGxlIGludGVycnVwdAorCW1vdiB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgcjM7IHdWYWx1ZVswXSBpcyB0aHJlc2hvbGQgdmFsdWUKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9jdHJsX25vdF8wNzoKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9ibXJlcV90eXBlX25vdF92ZW5kb3I6CisJbGptcCBzZXR1cF9zdGFsbAorCisKK3NldHVwX2JtcmVxX2lzX3N0YW5kYXJkOgkKKwljam5lIHIyLCAjMHgwMCwgc2V0dXBfYnJlcV9ub3RfMDAKKwk7OyAwMDoJR2V0X1N0YXR1cyAoc3ViLXN3aXRjaCBvbiBibVJlcXVlc3RUeXBlOiBkZXZpY2UsIGVwLCBpbnQpCisJY2puZSByMSwgIzB4ODAsIHNldHVwX0dldF9TdGF0dXNfbm90X2RldmljZQorCTs7IEdldF9TdGF0dXMoZGV2aWNlKQorCTs7ICBhcmUgd2Ugc2VsZi1wb3dlcmVkPyBuby4gY2FuIHdlIGRvIHJlbW90ZSB3YWtldXA/IG5vCisJOzsgICBzbyByZXR1cm4gdHdvIHplcm8gYnl0ZXMuIFRoaXMgaXMgcmV1c2FibGUKK3NldHVwX3JldHVybl90d29femVyb19ieXRlczoKKwltb3YgZHB0ciwgSU4wQlVGCisJY2xyIGEKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIElOMEJDCisJbW92IGEsICMyCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0dldF9TdGF0dXNfbm90X2RldmljZToKKwljam5lIHIxLCAjMHg4Miwgc2V0dXBfR2V0X1N0YXR1c19ub3RfZW5kcG9pbnQKKwk7OyBHZXRfU3RhdHVzKGVuZHBvaW50KQorCTs7ICBtdXN0IGdldCBzdGFsbCBiaXQgZm9yIGVwW3dJbmRleExdLCByZXR1cm4gdHdvIGJ5dGVzLCBiaXQgaW4gbHNiIDAKKwk7OyBmb3Igbm93OiBjaGVhdC4gVE9ETworCXNqbXAgc2V0dXBfcmV0dXJuX3R3b196ZXJvX2J5dGVzCitzZXR1cF9HZXRfU3RhdHVzX25vdF9lbmRwb2ludDoKKwljam5lIHIxLCAjMHg4MSwgc2V0dXBfR2V0X1N0YXR1c19ub3RfaW50ZXJmYWNlCisJOzsgR2V0X1N0YXR1cyhpbnRlcmZhY2UpOiByZXR1cm4gdHdvIHplcm9zCisJc2ptcCBzZXR1cF9yZXR1cm5fdHdvX3plcm9fYnl0ZXMKK3NldHVwX0dldF9TdGF0dXNfbm90X2ludGVyZmFjZToJCisJbGptcCBzZXR1cF9zdGFsbAorCQorc2V0dXBfYnJlcV9ub3RfMDA6CisJY2puZSByMiwgIzB4MDEsIHNldHVwX2JyZXFfbm90XzAxCisJOzsgMDE6CUNsZWFyX0ZlYXR1cmUgKHN1Yi1zd2l0Y2ggb24gd1ZhbHVlTDogc3RhbGwsIHJlbW90ZSB3YWtldXApCisJY2puZSByMywgIzB4MDAsIHNldHVwX0NsZWFyX0ZlYXR1cmVfbm90X3N0YWxsCisJOzsgQ2xlYXJfRmVhdHVyZShzdGFsbCkuIHNob3VsZCBjbGVhciBhIHN0YWxsIGJpdC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX0NsZWFyX0ZlYXR1cmVfbm90X3N0YWxsOgorCWNqbmUgcjMsICMweDAxLCBzZXR1cF9DbGVhcl9GZWF0dXJlX25vdF9yd2FrZQorCTs7IENsZWFyX0ZlYXR1cmUocmVtb3RlIHdha2V1cCkuIGlnbm9yZWQuCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfcndha2U6CisJbGptcCBzZXR1cF9zdGFsbAorCQorc2V0dXBfYnJlcV9ub3RfMDE6CisJY2puZSByMiwgIzB4MDMsIHNldHVwX2JyZXFfbm90XzAzCisJOzsgMDM6CVNldF9GZWF0dXJlIChzdWItc3dpdGNoIG9uIHdWYWx1ZUw6IHN0YWxsLCByZW1vdGUgd2FrZXVwKQorCWNqbmUgcjMsICMweDAwLCBzZXR1cF9TZXRfRmVhdHVyZV9ub3Rfc3RhbGwKKwk7OyBTZXRfRmVhdHVyZShzdGFsbCkuIFNob3VsZCBzZXQgYSBzdGFsbCBiaXQuIFRPRE8KKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9TZXRfRmVhdHVyZV9ub3Rfc3RhbGw6CisJY2puZSByMywgIzB4MDEsIHNldHVwX1NldF9GZWF0dXJlX25vdF9yd2FrZQorCTs7IFNldF9GZWF0dXJlKHJlbW90ZSB3YWtldXApLiBpZ25vcmVkLgorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX1NldF9GZWF0dXJlX25vdF9yd2FrZToKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wMzoJCisJY2puZSByMiwgIzB4MDYsIHNldHVwX2JyZXFfbm90XzA2CisJOzsgMDY6CUdldF9EZXNjcmlwdG9yIChzLXN3aXRjaCBvbiB3VmFsdWVIOiBkZXYsIGNvbmZpZ1tuXSwgc3RyaW5nW25dKQorCWNqbmUgcjQsICMweDAxLCBzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3RfZGV2aWNlCisJOzsgR2V0X0Rlc2NyaXB0b3IoZGV2aWNlKQorCW1vdiBkcHRyLCBTVURQVFJICisJbW92IGEsICNISUdIKGRlc2NfZGV2aWNlKQorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgU1VEUFRSTAorCW1vdiBhLCAjTE9XKGRlc2NfZGV2aWNlKQorCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3RfZGV2aWNlOgorCWNqbmUgcjQsICMweDAyLCBzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3RfY29uZmlnCisJOzsgR2V0X0Rlc2NyaXB0b3IoY29uZmlnW25dKQorCWNqbmUgcjMsICMweDAwLCBzZXR1cF9zdGFsbDsgb25seSBoYW5kbGUgbj09MAorCTs7IEdldF9EZXNjcmlwdG9yKGNvbmZpZ1swXSkKKwltb3YgZHB0ciwgU1VEUFRSSAorCW1vdiBhLCAjSElHSChkZXNjX2NvbmZpZzEpCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBTVURQVFJMCisJbW92IGEsICNMT1coZGVzY19jb25maWcxKQorCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3RfY29uZmlnOgorCWNqbmUgcjQsICMweDAzLCBzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3Rfc3RyaW5nCisJOzsgR2V0X0Rlc2NyaXB0b3Ioc3RyaW5nW3dWYWx1ZUxdKQorCTs7ICBpZiAod1ZhbHVlTCA+PSBtYXhzdHJpbmdzKSBzdGFsbAorCW1vdiBhLCAjKChkZXNjX3N0cmluZ3NfZW5kLWRlc2Nfc3RyaW5ncykvMikKKwljbHIgYworCXN1YmIgYSxyMwkJOyBhPTQsIHIzID0gMC4uMyAuIGlmIGE8PTAgdGhlbiBzdGFsbAorCWpjICBzZXR1cF9zdGFsbAorCWp6ICBzZXR1cF9zdGFsbAorCW1vdiBhLCByMworCWFkZCBhLCByMwkJOyBhID0gMip3VmFsdWVMCisJbW92IGRwdHIsICNkZXNjX3N0cmluZ3MKKwlhZGQgYSwgZHBsCisJbW92IGRwbCwgYQorCW1vdiBhLCAjMAorCWFkZGMgYSwgZHBoCisJbW92IGRwaCwgYQkJOyBkcGggPSBkZXNjX3N0cmluZ3NbYV0uIGJpZyBlbmRpYW4hIChoYW5keSkKKwk7OyBpdCBsb29rcyBsaWtlIG15IGFkYXB0ZXIgdXNlcyBhIHJldmlzaW9uIG9mIHRoZSBFWlVTQiB0aGF0CisJOzsgY29udGFpbnMgInJldiBEIGVycmF0YSBudW1iZXIgOCIsIGFzIGhpbnRlZCBpbiB0aGUgRXpVU0IgZXhhbXBsZQorCTs7IGNvZGUuIEkgY2Fubm90IGZpbmQgYW4gYWN0dWFsIGVycmF0YSBkZXNjcmlwdGlvbiBvbiB0aGUgQ3lwcmVzcworCTs7IHdlYiBzaXRlLCBidXQgZnJvbSB0aGUgZXhhbXBsZSBjb2RlIGl0IGxvb2tzIGxpa2UgdGhpcyBidWcgY2F1c2VzCisJOzsgdGhlIGxlbmd0aCBvZiBzdHJpbmcgZGVzY3JpcHRvcnMgdG8gYmUgcmVhZCBpbmNvcnJlY3RseSwgcG9zc2libHkKKwk7OyBzZW5kaW5nIGJhY2sgbW9yZSBjaGFyYWN0ZXJzIHRoYW4gdGhlIGRlc2NyaXB0b3IgaGFzLiBUaGUgd29ya2Fyb3VuZAorCTs7IGlzIHRvIG1hbnVhbGx5IHNlbmQgb3V0IGFsbCBvZiB0aGUgZGF0YS4gVGhlIGNvbnNlcXVlbmNlIG9mIG5vdAorCTs7IHVzaW5nIHRoZSB3b3JrYXJvdW5kIGlzIHRoYXQgdGhlIHN0cmluZ3MgZ2F0aGVyZWQgYnkgdGhlIGtlcm5lbAorCTs7IGRyaXZlciBhcmUgdG9vIGxvbmcgYW5kIGFyZSBmaWxsZWQgd2l0aCB0cmFpbGluZyBnYXJiYWdlIChpbmNsdWRpbmcKKwk7OyBsZWZ0b3ZlciBzdHJpbmdzKS4gV3JpdGluZyB0aGlzIG91dCBieSBoYW5kIGlzIGEgbnVpc2FuY2UsIHNvIGZvcgorCTs7IG5vdyBJIHdpbGwganVzdCBsaXZlIHdpdGggdGhlIGJ1Zy4KKwltb3Z4IGEsIEBkcHRyCisJbW92IHIxLCBhCisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHIyLCBhCisJbW92IGRwdHIsIFNVRFBUUkgKKwltb3YgYSwgcjEKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIFNVRFBUUkwKKwltb3YgYSwgcjIKKwltb3Z4IEBkcHRyLCBhCisJOzsgZG9uZQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKKwkKK3NldHVwX0dldF9EZXNjcmlwdG9yX25vdF9zdHJpbmc6CisJbGptcCBzZXR1cF9zdGFsbAorCQorc2V0dXBfYnJlcV9ub3RfMDY6CisJY2puZSByMiwgIzB4MDgsIHNldHVwX2JyZXFfbm90XzA4CisJOzsgR2V0X0NvbmZpZ3VyYXRpb24uIGFsd2F5cyAxLiByZXR1cm4gb25lIGJ5dGUuCisJOzsgdGhpcyBpcyByZXVzYWJsZQorCW1vdiBhLCAjMQorc2V0dXBfcmV0dXJuX29uZV9ieXRlOgkKKwltb3YgZHB0ciwgSU4wQlVGCisJbW92eCBAZHB0ciwgYQorCW1vdiBhLCAjMQorCW1vdiBkcHRyLCBJTjBCQworCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9icmVxX25vdF8wODoKKwljam5lIHIyLCAjMHgwOSwgc2V0dXBfYnJlcV9ub3RfMDkKKwk7OyAwOTogU2V0X0NvbmZpZ3VyYXRpb24uIGlnbm9yZWQuCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfYnJlcV9ub3RfMDk6CisJY2puZSByMiwgIzB4MGEsIHNldHVwX2JyZXFfbm90XzBhCisJOzsgMGE6IEdldF9JbnRlcmZhY2UuIGdldCB0aGUgY3VycmVudCBhbHRzZXR0aW5nIGZvciBpbnRbd0luZGV4TF0KKwk7OyAgc2luY2Ugd2Ugb25seSBoYXZlIG9uZSBpbnRlcmZhY2UsIGlnbm9yZSB3SW5kZXhMLCByZXR1cm4gYSAwCisJbW92IGEsICMwCisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKK3NldHVwX2JyZXFfbm90XzBhOgorCWNqbmUgcjIsICMweDBiLCBzZXR1cF9icmVxX25vdF8wYgorCTs7IDBiOiBTZXRfSW50ZXJmYWNlLiBzZXQgYWx0c2V0dGluZyBmb3IgaW50ZXJmYWNlW3dJbmRleExdLiBpZ25vcmVkCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfYnJlcV9ub3RfMGI6CisJbGptcCBzZXR1cF9zdGFsbAorCisJCQorc2V0dXBfZG9uZV9hY2s6CQorCTs7IG5vdyBjbGVhciBIU05BSworCW1vdiBkcHRyLCBFUDBDUworCW1vdiBhLCAjMHgwMgorCW1vdnggQGRwdHIsIGEKKwlzam1wIHNldHVwX2RvbmUKK3NldHVwX3N0YWxsOgkKKwk7OyB1bmhhbmRsZWQuIFNUQUxMCisJO0VQMENTIHw9IGJtRVBTVEFMTAorCW1vdiBkcHRyLCBFUDBDUworCW1vdnggYSwgQGRwdHIKKwlvcmwgYSwgRVAwU1RBTExiaXQKKwltb3Z4IEBkcHRyLCBhCisJc2ptcCBzZXR1cF9kb25lCisJCitzZXR1cF9kb25lOgkKKwlwb3AgYWNjCisJcG9wIGRwaDEKKwlwb3AgZHBsMQorCXBvcCBkcGgKKwlwb3AgZHBsCisJcG9wIGRwcworCXJldGkKKworOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCitzZXRfYmF1ZDoJCQk7IGJhdWQgaW5kZXggaW4gcjMKKwk7OyB2ZXJpZnkgYSA8IDEwCisJbW92IGEsIHIzCisJamIgQUNDLjcsIHNldF9iYXVkX19iYWRiYXVkCisJY2xyIGMKKwlzdWJiIGEsICMxMAorCWpuYyBzZXRfYmF1ZF9fYmFkYmF1ZAorCW1vdiBhLCByMworCXJsIGEJCQk7IGEgPSBpbmRleCoyCisJYWRkIGEsICNMT1coYmF1ZF90YWJsZSkKKwltb3YgZHBsLCBhCisJbW92IGEsICNISUdIKGJhdWRfdGFibGUpCisJYWRkYyBhLCAjMAorCW1vdiBkcGgsIGEKKwk7OyBUT0RPOiBzaHV0IGRvd24geG1pdC9yZWNlaXZlCisJOzsgVE9ETzogd2FpdCBmb3IgY3VycmVudCB4bWl0IGNoYXIgdG8gbGVhdmUKKwk7OyBUT0RPOiBzaHV0IGRvd24gdGltZXIgdG8gYXZvaWQgcGFydGlhbC1jaGFyIGdsaXRjaAorCW1vdnggYSxAZHB0cgkJOyBCQVVEX0hJR0gKKwltb3YgUkNBUDJILCBhCisJbW92IFRIMiwgYQorCWluYyBkcHRyCisJbW92eCBhLEBkcHRyCQk7IEJBVURfTE9XCisJbW92IFJDQVAyTCwgYQorCW1vdiBUTDIsIGEKKwk7OyBUT0RPOiByZXN0YXJ0IHhtaXQvcmVjZWl2ZQorCTs7IFRPRE86IHJlZW5hYmxlIGludGVycnVwdHMsIHJlc3VtZSB0eCBpZiBwZW5kaW5nCisJY2xyIGMJCQk7IGM9MDogc3VjY2VzcworCXJldAorc2V0X2JhdWRfX2JhZGJhdWQ6CisJc2V0YiBjCQkJOyBjPTE6IGZhaWx1cmUKKwlyZXQKKwkKKzs7OyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorY29udHJvbF9waW5zOgorCWNqbmUgcjEsICMweDQxLCBjb250cm9sX3BpbnNfaW4KK2NvbnRyb2xfcGluc19vdXQ6CisJbW92IGEsIHIzIDsgd1ZhbHVlWzBdIGhvbGRzIG5ldyBiaXRzOgliNyBpcyBuZXcgRFRSLCBiMiBpcyBuZXcgUlRTCisJeHJsIGEsICMweGZmCQk7IDEgbWVhbnMgYWN0aXZlLCAwViwgKzEyViA/CisJYW5sIGEsICMweDg0CisJbW92IHIzLCBhCisJbW92IGRwdHIsIE9VVEMKKwltb3Z4IGEsIEBkcHRyCQk7IG9ubHkgY2hhbmdlIGJpdHMgNyBhbmQgMgorCWFubCBhLCAjMHg3YgkJOyB+MHg4NAorCW9ybCBhLCByMworCW1vdnggQGRwdHIsIGEJCTsgb3RoZXIgcGlucyBhcmUgaW5wdXRzLCBiaXRzIGlnbm9yZWQKKwlsam1wIHNldHVwX2RvbmVfYWNrCitjb250cm9sX3BpbnNfaW46CisJbW92IGRwdHIsIFBJTlNDCisJbW92eCBhLCBAZHB0cgorCXhybCBhLCAjMHhmZgorCWxqbXAgc2V0dXBfcmV0dXJuX29uZV9ieXRlCisKKzs7OyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCitJU1JfRXAyaW46CisJcHVzaCBkcHMKKwlwdXNoIGRwbAorCXB1c2ggZHBoCisJcHVzaCBkcGwxCisJcHVzaCBkcGgxCisJcHVzaCBhY2MKKwltb3YgYSxFWElGCisJY2xyIGFjYy40CisJbW92IEVYSUYsYQkJOyBjbGVhciBJTlQyIGZpcnN0CisJbW92IGRwdHIsIElOMDdJUlEJOyBjbGVhciBVU0IgaW50CisJbW92IGEsIzA0aAorCW1vdnggQGRwdHIsYQorCisJOzsgZG8gc3R1ZmYKKwlsY2FsbCBzdGFydF9pbgorCQorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCitJU1JfRXAyb3V0OgorCXB1c2ggZHBzCisJcHVzaCBkcGwKKwlwdXNoIGRwaAorCXB1c2ggZHBsMQorCXB1c2ggZHBoMQorCXB1c2ggYWNjCisJbW92IGEsRVhJRgorCWNsciBhY2MuNAorCW1vdiBFWElGLGEJCTsgY2xlYXIgSU5UMiBmaXJzdAorCW1vdiBkcHRyLCBPVVQwN0lSUQk7IGNsZWFyIFVTQiBpbnQKKwltb3YgYSwjMDRoCisJbW92eCBAZHB0cixhCisKKwk7OyBkbyBzdHVmZgorCisJOzsgY29weSBkYXRhIGludG8gYnVmZmVyLiBmb3Igbm93LCBhc3N1bWUgd2Ugd2lsbCBoYXZlIGVub3VnaCBzcGFjZQorCW1vdiBkcHRyLCBPVVQyQkMJOyBnZXQgYnl0ZSBjb3VudAorCW1vdnggYSxAZHB0cgorCW1vdiByMSwgYQorCWNsciBhCisJbW92IGRwcywgYQorCW1vdiBkcHRyLCBPVVQyQlVGCTsgbG9hZCBEUFRSMCB3aXRoIHNvdXJjZQorCW1vdiBkcGgxLCAjSElHSCh0eF9yaW5nKQk7IGxvYWQgRFBUUjEgd2l0aCB0YXJnZXQKKwltb3YgZHBsMSwgdHhfcmluZ19pbgorT1VUX2xvb3A6CisJbW92eCBhLEBkcHRyCQk7IHJlYWQKKwlpbmMgZHBzCQkJOyBzd2l0Y2ggdG8gRFBUUjE6IHRhcmdldAorCWluYyBkcGwxCQk7IHRhcmdldCA9IHR4X3JpbmdfaW4rMQorCW1vdnggQGRwdHIsYQkJOyBzdG9yZQorCW1vdiBhLGRwbDEKKwljam5lIGEsIHR4X3Jpbmdfb3V0LCBPVVRfbm9fb3ZlcmZsb3cKKwlzam1wIE9VVF9vdmVyZmxvdworT1VUX25vX292ZXJmbG93OgkKKwlpbmMgdHhfcmluZ19pbgkJOyB0eF9yaW5nX2luKysKKwlpbmMgZHBzCQkJOyBzd2l0Y2ggdG8gRFBUUjA6IHNvdXJjZQorCWluYyBkcHRyCisJZGpueiByMSwgT1VUX2xvb3AKKwlzam1wIE9VVF9kb25lCitPVVRfb3ZlcmZsb3c6CisJOzsgc2lnbmFsIG92ZXJmbG93CisJOzsgZmFsbCB0aHJvdWdoCitPVVRfZG9uZToJCisJOzsgYWNrCisJbW92IGRwdHIsT1VUMkJDCisJbW92eCBAZHB0cixhCisKKwk7OyBzdGFydCB0eAorCWFjYWxsIG1heWJlX3N0YXJ0X3R4CisJO2FjYWxsIGR1bXBfc3RhdAorCQorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCitkdW1wX3N0YXQ6CisJOzsgZmlsbCBpbiBFUDRpbiB3aXRoIGEgZGVidWdnaW5nIG1lc3NhZ2U6CisJOzsgICB0eF9yaW5nX2luLCB0eF9yaW5nX291dCwgcnhfcmluZ19pbiwgcnhfcmluZ19vdXQKKwk7OyAgIHR4X2FjdGl2ZQorCTs7ICAgdHhfcmluZ1swLi4xNV0KKwk7OyAgIDB4ZmMKKwk7OyAgIHJ4X3JpbmdbMC4uMTVdCisJY2xyIGEKKwltb3YgZHBzLCBhCisJCisJbW92IGRwdHIsIElONENTCisJbW92eCBhLCBAZHB0cgorCWpiIGFjYy4xLCBkdW1wX3N0YXRfX2RvbmU7IGJ1c3k6IGNhbm5vdCBkdW1wLCBvbGQgb25lIHN0aWxsIHBlbmRpbmcKKwltb3YgZHB0ciwgSU40QlVGCisJCisJbW92IGEsIHR4X3JpbmdfaW4KKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwltb3YgYSwgdHhfcmluZ19vdXQKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKworCW1vdiBhLCByeF9yaW5nX2luCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJbW92IGEsIHJ4X3Jpbmdfb3V0CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJCisJY2xyIGEKKwlqbmIgVFhfUlVOTklORywgZHVtcF9zdGF0X19ub190eF9ydW5uaW5nCisJaW5jIGEKK2R1bXBfc3RhdF9fbm9fdHhfcnVubmluZzoKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwk7OyB0eF9yaW5nWzAuLjE1XQorCWluYyBkcHMKKwltb3YgZHB0ciwgI3R4X3JpbmcJOyBEUFRSMTogc291cmNlCisJbW92IHIxLCAjMTYKK2R1bXBfc3RhdF9fdHhfcmluZ19sb29wOgorCW1vdnggYSwgQGRwdHIKKwlpbmMgZHB0cgorCWluYyBkcHMKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJZGpueiByMSwgZHVtcF9zdGF0X190eF9yaW5nX2xvb3AKKwlpbmMgZHBzCisJCisJbW92IGEsICMweGZjCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJCisJOzsgcnhfcmluZ1swLi4xNV0KKwlpbmMgZHBzCisJbW92IGRwdHIsICNyeF9yaW5nCTsgRFBUUjE6IHNvdXJjZQorCW1vdiByMSwgIzE2CitkdW1wX3N0YXRfX3J4X3JpbmdfbG9vcDoKKwltb3Z4IGEsIEBkcHRyCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJaW5jIGRwcworCWRqbnogcjEsIGR1bXBfc3RhdF9fcnhfcmluZ19sb29wCisJCisJOzsgbm93IHNlbmQgaXQKKwljbHIgYQorCW1vdiBkcHMsIGEKKwltb3YgZHB0ciwgSU40QkMKKwltb3YgYSwgIzM4CisJbW92eCBAZHB0ciwgYQorZHVtcF9zdGF0X19kb25lOgkKKwlyZXQKKwkJCis7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCittYXliZV9zdGFydF90eDoKKwk7OyBtYWtlIHN1cmUgdGhlIHR4IHByb2Nlc3MgaXMgcnVubmluZy4KKwlqYiBUWF9SVU5OSU5HLCBzdGFydF90eF9kb25lCitzdGFydF90eDoKKwk7OyBpcyB0aGVyZSB3b3JrIHRvIGJlIGRvbmU/CisJbW92IGEsIHR4X3JpbmdfaW4KKwljam5lIGEsdHhfcmluZ19vdXQsIHN0YXJ0X3R4X193b3JrCisJcmV0CQkJOyBubyB3b3JrCitzdGFydF90eF9fd29yazoJCisJOzsgdHggd2FzIG5vdCBydW5uaW5nLiBzZW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIHNldHVwIHRoZSBUSSBpbnQKKwlpbmMgdHhfcmluZ19vdXQJCTsgWysrdHhfcmluZ19vdXRdCisJbW92IGRwaCwgI0hJR0godHhfcmluZykKKwltb3YgZHBsLCB0eF9yaW5nX291dAorCW1vdnggYSwgQGRwdHIKKwltb3Ygc2J1ZiwgYQorCXNldGIgVFhfUlVOTklORworc3RhcnRfdHhfZG9uZToKKwk7OyBjYW4gd2UgdW50aHJvdHRsZSB0aGUgaG9zdCB0eCBwcm9jZXNzPworCTs7ICBzdGVwIDE6IGRvIHdlIGNhcmU/CisJbW92IGEsICMwCisJY2puZSBhLCB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgc3RhcnRfdHhfX21heWJlX3VudGhyb3R0bGVfdHgKKwk7OyBub3BlCitzdGFydF90eF9yZWFsbHlfZG9uZToKKwlyZXQKK3N0YXJ0X3R4X19tYXliZV91bnRocm90dGxlX3R4OgorCTs7ICBzdGVwIDI6IGlzIHRoZXJlIG5vdyByb29tPworCW1vdiBhLCB0eF9yaW5nX291dAorCXNldGIgYworCXN1YmIgYSwgdHhfcmluZ19pbgorCTs7IGEgaXMgbm93IHdyaXRlX3Jvb20uIElmIHRocmVzaCA+PSBhLCB3ZSBjYW4gdW50aHJvdHRsZQorCWNsciBjCisJc3ViYiBhLCB0eF91bnRocm90dGxlX3RocmVzaG9sZAorCWpjIHN0YXJ0X3R4X3JlYWxseV9kb25lCTsgbm9wZQorCTs7IHllcywgd2UgY2FuIHVudGhyb3R0bGUuIHJlbW92ZSB0aGUgdGhyZXNob2xkIGFuZCBtYXJrIGEgcmVxdWVzdAorCW1vdiB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgIzAKKwlzZXRiIERPX1RYX1VOVEhST1RUTEUKKwk7OyBwcm9kIHJ4LCB3aGljaCB3aWxsIGFjdHVhbGx5IHNlbmQgdGhlIG1lc3NhZ2Ugd2hlbiBpbjIgYmVjb21lcyBmcmVlCisJbGptcCBzdGFydF9pbgorCQorCitzZXJpYWxfaW50OgorCXB1c2ggZHBzCisJcHVzaCBkcGwKKwlwdXNoIGRwaAorCXB1c2ggZHBsMQorCXB1c2ggZHBoMQorCXB1c2ggYWNjCisJam5iIFRJLCBzZXJpYWxfaW50X19ub3RfdHgKKwk7OyB0eCBmaW5pc2hlZC4gc2VuZCBhbm90aGVyIGNoYXJhY3RlciBpZiB3ZSBoYXZlIG9uZQorCWNsciBUSQkJCTsgY2xlYXIgaW50CisJY2xyIFRYX1JVTk5JTkcKKwlsY2FsbCBzdGFydF90eAorc2VyaWFsX2ludF9fbm90X3R4OgorCWpuYiBSSSwgc2VyaWFsX2ludF9fbm90X3J4CisJbGNhbGwgZ2V0X3J4X2NoYXIKKwljbHIgUkkJCQk7IGNsZWFyIGludAorc2VyaWFsX2ludF9fbm90X3J4OgkKKwk7OyByZXR1cm4KKwlwb3AgYWNjCisJcG9wIGRwaDEKKwlwb3AgZHBsMQorCXBvcCBkcGgKKwlwb3AgZHBsCisJcG9wIGRwcworCXJldGkKKworZ2V0X3J4X2NoYXI6CisJbW92IGRwaCwgI0hJR0gocnhfcmluZykKKwltb3YgZHBsLCByeF9yaW5nX2luCisJaW5jIGRwbAkJCTsgdGFyZ2V0ID0gcnhfcmluZ19pbisxCisJbW92IGEsIHNidWYKKwltb3Z4IEBkcHRyLCBhCisJOzsgY2hlY2sgZm9yIG92ZXJmbG93IGJlZm9yZSBpbmNyZW1lbnRpbmcgcnhfcmluZ19pbgorCW1vdiBhLCBkcGwKKwljam5lIGEsIHJ4X3Jpbmdfb3V0LCBnZXRfcnhfY2hhcl9fbm9fb3ZlcmZsb3cKKwk7OyBzaWduYWwgb3ZlcmZsb3cKKwlyZXQKK2dldF9yeF9jaGFyX19ub19vdmVyZmxvdzoJCisJaW5jIHJ4X3JpbmdfaW4KKwk7OyBraWNrIG9mZiBVU0IgSU5waXBlCisJYWNhbGwgc3RhcnRfaW4KKwlyZXQKKworc3RhcnRfaW46CisJOzsgY2hlY2sgaWYgdGhlIGlucGlwZSBpcyBhbHJlYWR5IHJ1bm5pbmcuCisJbW92IGRwdHIsIElOMkNTCisJbW92eCBhLCBAZHB0cgorCWpiIGFjYy4xLCBzdGFydF9pbl9fZG9uZTsgaW50IHdpbGwgaGFuZGxlIGl0CisJamIgRE9fVFhfVU5USFJPVFRMRSwgc3RhcnRfaW5fX2RvX3R4X3VudGhyb3R0bGUKKwk7OyBzZWUgaWYgdGhlcmUgaXMgYW55IHdvcmsgdG8gZG8uIGEgc2VyaWFsIGludGVycnVwdCBtaWdodCBvY2N1cgorCTs7IGR1cmluZyB0aGlzIHNlcXVlbmNlPworCW1vdiBhLCByeF9yaW5nX2luCisJY2puZSBhLCByeF9yaW5nX291dCwgc3RhcnRfaW5fX2hhdmVfd29yaworCXJldAkJCTsgbm9wZQorc3RhcnRfaW5fX2hhdmVfd29yazoJCisJOzsgbm93IGNvcHkgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlIGludG8gdGhlIHBpcGUuIDYzIGJ5dGVzIG1heC4KKwljbHIgYQorCW1vdiBkcHMsIGEKKwltb3YgZHBoLCAjSElHSChyeF9yaW5nKQk7IGxvYWQgRFBUUjAgd2l0aCBzb3VyY2UKKwlpbmMgZHBzCisJbW92IGRwdHIsIElOMkJVRgk7IGxvYWQgRFBUUjEgd2l0aCB0YXJnZXQKKwltb3Z4IEBkcHRyLCBhCQk7IGluWzBdIHNpZ25hbHMgdGhhdCByZXN0IG9mIElOIGlzIHJ4IGRhdGEKKwlpbmMgZHB0cgorCWluYyBkcHMKKwk7OyBsb29wIHVudGlsIHdlIHJ1biBvdXQgb2YgZGF0YSwgb3Igd2UgaGF2ZSBjb3BpZWQgNjQgYnl0ZXMKKwltb3YgcjEsICMxCQk7IElOYnVmIHNpemUgY291bnRlcgorc3RhcnRfaW5fX2xvb3A6CisJbW92IGEsIHJ4X3JpbmdfaW4KKwljam5lIGEsIHJ4X3Jpbmdfb3V0LCBzdGFydF9pbmxvY2FsX2lycV9lbmFibGVsbF9jb3B5aW5nCisJc2ptcCBzdGFydF9pbl9fa2ljaworc3RhcnRfaW5sb2NhbF9pcnFfZW5hYmxlbGxfY29weWluZzoKKwlpbmMgcnhfcmluZ19vdXQKKwltb3YgZHBsLCByeF9yaW5nX291dAorCW1vdnggYSwgQGRwdHIKKwlpbmMgZHBzCisJbW92eCBAZHB0ciwgYQkJOyB3cml0ZSBpbnRvIElOIGJ1ZmZlcgorCWluYyBkcHRyCisJaW5jIGRwcworCWluYyByMQorCWNqbmUgcjEsICM2NCwgc3RhcnRfaW5fX2xvb3A7IGxvb3AKK3N0YXJ0X2luX19raWNrOgorCTs7IGVpdGhlciB3ZSByYW4gb3V0IG9mIGRhdGEsIG9yIHdlIGNvcGllZCA2NCBieXRlcy4gcjEgaGFzIGJ5dGUgY291bnQKKwk7OyBraWNrIG9mZiBJTgorCW1vdiBkcHRyLCBJTjJCQworCW1vdiBhLCByMQorCWp6IHN0YXJ0X2luX19kb25lCisJbW92eCBAZHB0ciwgYQorCTs7IGRvbmUKK3N0YXJ0X2luX19kb25lOgorCTthY2FsbCBkdW1wX3N0YXQKKwlyZXQKK3N0YXJ0X2luX19kb190eF91bnRocm90dGxlOgorCTs7IHNwZWNpYWwgc2VxdWVuY2U6IHNlbmQgYSB0eCB1bnRocm90dGxlIG1lc3NhZ2UKKwljbHIgRE9fVFhfVU5USFJPVFRMRQorCWNsciBhCisJbW92IGRwcywgYQorCW1vdiBkcHRyLCBJTjJCVUYKKwltb3YgYSwgIzEKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwltb3YgYSwgIzIKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIElOMkJDCisJbW92eCBAZHB0ciwgYQorCXJldAorCQorcHV0Y2hhcjoKKwljbHIgVEkKKwltb3YgU0JVRiwgYQorcHV0Y2hhcl93YWl0OgorCWpuYiBUSSwgcHV0Y2hhcl93YWl0CisJY2xyIFRJCisJcmV0CisKKwkKK2JhdWRfdGFibGU6CQkJOyBiYXVkX2hpZ2gsIHRoZW4gYmF1ZF9sb3cKKwk7OyBiYXVkWzBdOiAxMTAKKwkuYnl0ZSBCQVVEX0hJR0goMTEwKQorCS5ieXRlIEJBVURfTE9XKDExMCkKKwk7OyBiYXVkWzFdOiAzMDAKKwkuYnl0ZSBCQVVEX0hJR0goMzAwKQorCS5ieXRlIEJBVURfTE9XKDMwMCkKKwk7OyBiYXVkWzJdOiAxMjAwCisJLmJ5dGUgQkFVRF9ISUdIKDEyMDApCisJLmJ5dGUgQkFVRF9MT1coMTIwMCkKKwk7OyBiYXVkWzNdOiAyNDAwCisJLmJ5dGUgQkFVRF9ISUdIKDI0MDApCisJLmJ5dGUgQkFVRF9MT1coMjQwMCkKKwk7OyBiYXVkWzRdOiA0ODAwCisJLmJ5dGUgQkFVRF9ISUdIKDQ4MDApCisJLmJ5dGUgQkFVRF9MT1coNDgwMCkKKwk7OyBiYXVkWzVdOiA5NjAwCisJLmJ5dGUgQkFVRF9ISUdIKDk2MDApCisJLmJ5dGUgQkFVRF9MT1coOTYwMCkKKwk7OyBiYXVkWzZdOiAxOTIwMAorCS5ieXRlIEJBVURfSElHSCgxOTIwMCkKKwkuYnl0ZSBCQVVEX0xPVygxOTIwMCkKKwk7OyBiYXVkWzddOiAzODQwMAorCS5ieXRlIEJBVURfSElHSCgzODQwMCkKKwkuYnl0ZSBCQVVEX0xPVygzODQwMCkKKwk7OyBiYXVkWzhdOiA1NzYwMAorCS5ieXRlIEJBVURfSElHSCg1NzYwMCkKKwkuYnl0ZSBCQVVEX0xPVyg1NzYwMCkKKwk7OyBiYXVkWzldOiAxMTUyMDAKKwkuYnl0ZSBCQVVEX0hJR0goMTE1MjAwKQorCS5ieXRlIEJBVURfTE9XKDExNTIwMCkKKworZGVzY19kZXZpY2U6CisJLmJ5dGUgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHg0MAorCS5ieXRlIDB4Y2QsIDB4MDYsIDB4MDQsIDB4MDEsIDB4ODksIDB4YWIsIDEsIDIsIDMsIDB4MDEKKzs7OyBUaGUgInJlYWwiIGRldmljZSBpZCwgd2hpY2ggbXVzdCBtYXRjaCB0aGUgaG9zdCBkcml2ZXIsIGlzIHRoYXQKKzs7OyAiMHhjZCAweDA2IDB4MDQgMHgwMSIgc2VxdWVuY2UsIHdoaWNoIGlzIDB4MDZjZCwgMHgwMTA0CisJCitkZXNjX2NvbmZpZzE6CisJLmJ5dGUgMHgwOSwgMHgwMiwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMgorCS5ieXRlIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAKKwkuYnl0ZSAweDA3LCAweDA1LCAweDgyLCAweDAzLCAweDQwLCAweDAwLCAweDAxCisJLmJ5dGUgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMAorCitkZXNjX3N0cmluZ3M6CisJLndvcmQgc3RyaW5nX2xhbmdpZHMsIHN0cmluZ19tZmcsIHN0cmluZ19wcm9kdWN0LCBzdHJpbmdfc2VyaWFsCitkZXNjX3N0cmluZ3NfZW5kOgorCitzdHJpbmdfbGFuZ2lkczoJLmJ5dGUgc3RyaW5nX2xhbmdpZHNfZW5kLXN0cmluZ19sYW5naWRzCisJLmJ5dGUgMworCS53b3JkIDAKK3N0cmluZ19sYW5naWRzX2VuZDoKKworCTs7IHNpZ2guIFRoZXNlIHN0cmluZ3MgYXJlIFVuaWNvZGUsIG1lYW5pbmcgVVRGMTY/IDIgYnl0ZXMgZWFjaC4gTm93CisJOzsgKnRoYXQqIGlzIGEgcGFpbiBpbiB0aGUgYXNzIHRvIGVuY29kZS4gQW5kIHRoZXkgYXJlIGxpdHRsZS1lbmRpYW4KKwk7OyB0b28uIFVzZSB0aGlzIHBlcmwgc25pcHBldCB0byBnZXQgdGhlIGJ5dGVjb2RlczoKKwkvKiB3aGlsZSAoPD4pIHsKKwkgICAgQGMgPSBzcGxpdCgvLyk7CisJICAgIGZvcmVhY2ggJGMgKEBjKSB7CisJICAgICBwcmludGYoIjB4JTAyeCwgMHgwMCwgIiwgb3JkKCRjKSk7CisJICAgIH0KKwkgICB9CisJKi8KKworc3RyaW5nX21mZzoJLmJ5dGUgc3RyaW5nX21mZ19lbmQtc3RyaW5nX21mZworCS5ieXRlIDMKKzsJLmJ5dGUgIkFDTUUgdXNiIHdpZGdldHMiCisJLmJ5dGUgMHg0MSwgMHgwMCwgMHg0MywgMHgwMCwgMHg0ZCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2NywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MywgMHgwMAorc3RyaW5nX21mZ19lbmQ6CisJCitzdHJpbmdfcHJvZHVjdDoJLmJ5dGUgc3RyaW5nX3Byb2R1Y3RfZW5kLXN0cmluZ19wcm9kdWN0CisJLmJ5dGUgMworOwkuYnl0ZSAiQUNNRSBVU0Igc2VyaWFsIHdpZGdldCIKKwkuYnl0ZSAweDQxLCAweDAwLCAweDQzLCAweDAwLCAweDRkLCAweDAwLCAweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLCAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDczLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLCAweDAwLCAweDIwLCAweDAwLCAweDc3LCAweDAwLCAweDY5LCAweDAwLCAweDY0LCAweDAwLCAweDY3LCAweDAwLCAweDY1LCAweDAwLCAweDc0LCAweDAwCitzdHJpbmdfcHJvZHVjdF9lbmQ6CisJCitzdHJpbmdfc2VyaWFsOgkuYnl0ZSBzdHJpbmdfc2VyaWFsX2VuZC1zdHJpbmdfc2VyaWFsCisJLmJ5dGUgMworOwkuYnl0ZSAiNDciCisJLmJ5dGUgMHgzNCwgMHgwMCwgMHgzNywgMHgwMAorc3RyaW5nX3NlcmlhbF9lbmQ6CisJCQorOzs7IHJpbmcgYnVmZmVyIG1lbW9yeQorCTs7IHR4X3JpbmdfaW4rMSBpcyB3aGVyZSB0aGUgbmV4dCBpbnB1dCBieXRlIHdpbGwgZ28KKwk7OyBbdHhfcmluZ19vdXRdIGhhcyBiZWVuIHNlbnQKKwk7OyBpZiB0eF9yaW5nX2luID09IHR4X3Jpbmdfb3V0LCB0aGVyZXMgbm8gd29yayB0byBkbworCTs7IHRoZXJlIGFyZSAodHhfcmluZ19pbiAtIHR4X3Jpbmdfb3V0KSBjaGFycyB0byBiZSB3cml0dGVuCisJOzsgZG9udCBsZXQgX2luIGxhcCBfb3V0CisJOzsgICBjYW5ub3QgaW5jIGlmIHR4X3JpbmdfaW4rMSA9PSB0eF9yaW5nX291dAorCTs7ICB3cml0ZSBbdHhfcmluZ19pbisxXSB0aGVuIHR4X3JpbmdfaW4rKworCTs7ICAgaWYgKHR4X3JpbmdfaW4rMSA9PSB0eF9yaW5nX291dCksIG92ZXJmbG93CisJOzsgICBlbHNlIHR4X3JpbmdfaW4rKworCTs7ICByZWFkL3NlbmQgW3R4X3Jpbmdfb3V0KzFdLCB0aGVuIHR4X3Jpbmdfb3V0KysKKworCTs7IHJ4X3JpbmdfaW4gd29ya3MgdGhlIHNhbWUgd2F5CisJCisJLm9yZyAweDEwMDAKK3R4X3Jpbmc6CisJLnNraXAgMHgxMDAJCTsgMjU2IGJ5dGVzCityeF9yaW5nOgorCS5za2lwIDB4MTAwCQk7IDI1NiBieXRlcworCQorCQorCS5FTkQKKwkKZGlmZiAtLWdpdCBhL2tleXNwYW5fcGRhL2tleXNwYW5fcGRhLmZ3IGIva2V5c3Bhbl9wZGEva2V5c3Bhbl9wZGEuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJiY2UzNAotLS0gL2Rldi9udWxsCisrKyBiL2tleXNwYW5fcGRhL2tleXNwYW5fcGRhLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2tleXNwYW5fcGRhL3hpcmNvbV9wZ3MuUyBiL2tleXNwYW5fcGRhL3hpcmNvbV9wZ3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWQ5OWRkCi0tLSAvZGV2L251bGwKKysrIGIva2V5c3Bhbl9wZGEveGlyY29tX3Bncy5TCkBAIC0wLDAgKzEsMTE5MiBAQAorLyogICRJZDogbG9vcC5zLHYgMS4yMyAyMDAwLzAzLzIwIDA5OjQ5OjA2IHdhcm5lciBFeHAgJAorICogCisgKiAgRmlybXdhcmUgZm9yIHRoZSBLZXlzcGFuIFBEQSBTZXJpYWwgQWRhcHRlciwgYSBVU0Igc2VyaWFsIHBvcnQgYmFzZWQgb24KKyAqICB0aGUgRXpVU0IgbWljcm9jb250cm9sbGVyLgorICogCisgKiAgKEMpIENvcHlyaWdodCAyMDAwIEJyaWFuIFdhcm5lciA8d2FybmVyQGxvdGhhci5jb20+CisgKiAKKyAqIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIAkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgIktleXNwYW4gUERBIFNlcmlhbCBBZGFwdGVyIiBpcyBwcm9iYWJseSBhIGNvcHlyaWdodCBvZiBLZXlzcGFuLCB0aGUKKyAqICBjb21wYW55LgorICogCisgKiAgVGhpcyBzZXJpYWwgYWRhcHRlciBpcyBiYXNpY2FsbHkgYW4gRXpVU0IgY2hpcCBhbmQgYW4gUlMtMjMyIGxpbmUgZHJpdmVyCisgKiAgaW4gYSBsaXR0bGUgd2lkZ2V0IHRoYXQgaGFzIGEgREItOSBvbiBvbmUgZW5kIGFuZCBhIFVTQiBwbHVnIG9uIHRoZSBvdGhlci4KKyAqICBJdCB1c2VzIHRoZSBFelVTQidzIGludGVybmFsIFVBUlQwICh1c2luZyB0aGUgcGlucyBmcm9tIFBvcnQgQykgYW5kIHRpbWVyMgorICogIGFzIGEgYmF1ZC1yYXRlIGdlbmVyYXRvci4gVGhlIHdpcmluZyBpczoKKyAqICAgUEMwL1J4RDAgPC0gcnhkIChEQjkgcGluIDIpICAgICAgICAgUEM0IDwtIGRzciBwaW4gNgorICogICBQQzEvVHhEMCAtPiB0eGQgcGluIDMgICAgICAgICAgICAgICBQQzUgPC0gcmkgIHBpbiA5CisgKiAgIFBDMiAgICAgIC0+IHJ0cyBwaW4gNyAgICAgICAgICAgICAgIFBDNiA8LSBkY2QgcGluIDEKKyAqICAgUEMzICAgICAgPC0gY3RzIHBpbiA4ICAgICAgICAgICAgICAgUEM3IC0+IGR0ciBwaW4gNAorICogICBQQjEgLT4gbGluZSBkcml2ZXIgc3RhbmRieQorICoKKyAqICBUaGUgRXpVU0IgcmVnaXN0ZXIgY29uc3RhbnRzIGJlbG93IGNvbWUgZnJvbSB0aGVpciBleGNlbGxlbnQgZG9jdW1lbnRhdGlvbgorICogIGFuZCBzYW1wbGUgY29kZSAod2hpY2ggdXNlZCB0byBiZSBhdmFpbGFibGUgYXQgd3d3LmFuY2hvcmNoaXBzLmNvbSwgYnV0CisgKiAgdGhhdCBoYXMgbm93IGJlZW4gYWJzb3JiZWQgaW50byBDeXByZXNzJyBzaXRlIGFuZCB0aGUgQ0QtUk9NIGNvbnRlbnRzCisgKiAgZG9uJ3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZSBvbmxpbmUgYW55bW9yZSkuIElmIHdlIGdldCBtdWx0aXBsZQorICogIEV6VVNCLWJhc2VkIGRyaXZlcnMgaW50byB0aGUga2VybmVsLCBpdCBtaWdodCBiZSB1c2VmdWwgdG8gcHVsbCB0aGVtIG91dAorICogIGludG8gYSBzZXBhcmF0ZSAuaCBmaWxlLgorICogCisgKiBUSEVPUlkgT0YgT1BFUkFUSU9OOgorICoKKyAqICAgVGhlcmUgYXJlIHR3byAyNTYtYnl0ZSByaW5nIGJ1ZmZlcnMsIG9uZSBmb3IgdHgsIG9uZSBmb3IgcnguCisgKgorICogICBFUDJvdXQgaXMgcHVyZSB0eCBkYXRhLiBXaGVuIGl0IGFwcGVhcnMsIHRoZSBkYXRhIGlzIGNvcGllZCBpbnRvIHRoZSB0eAorICogICByaW5nIGFuZCBzZXJpYWwgdHJhbnNtaXNzaW9uIGlzIHN0YXJ0ZWQgaWYgaXQgd2Fzbid0IGFscmVhZHkgcnVubmluZy4gVGhlCisgKiAgICJ0eCBidWZmZXIgZW1wdHkiIGludGVycnVwdCBtYXkga2ljayBvZmYgYW5vdGhlciBjaGFyYWN0ZXIgaWYgdGhlIHJpbmcKKyAqICAgc3RpbGwgaGFzIGRhdGEuIElmIHRoZSBob3N0IGlzIHR4LWJsb2NrZWQgYmVjYXVzZSB0aGUgcmluZyBmaWxsZWQgdXAsCisgKiAgIGl0IHdpbGwgcmVxdWVzdCBhICJ0eCB1bnRocm90dGxlIiBpbnRlcnJ1cHQuIElmIHNlbmRpbmcgYSBzZXJpYWwgY2hhcmFjdGVyCisgKiAgIGVtcHRpZXMgdGhlIHJpbmcgYmVsb3cgdGhlIGRlc2lyZWQgdGhyZXNob2xkLCB3ZSBzZXQgYSBiaXQgdGhhdCB3aWxsIHNlbmQKKyAqICAgdXAgdGhlIHR4IHVudGhyb3R0bGUgbWVzc2FnZSBhcyBzb29uIGFzIHRoZSByeCBidWZmZXIgYmVjb21lcyBmcmVlLgorICoKKyAqICAgRVAyaW4gKGludGVycnVwdCkgaXMgdXNlZCB0byBzZW5kIGJvdGggcnggY2hhcnMgYW5kIHJ4IHN0YXR1cyBtZXNzYWdlcworICogICAob25seSAidHggdW50aHJvdHRsZSIgYXQgdGhpcyB0aW1lKSBiYWNrIHVwIHRvIHRoZSBob3N0LiBUaGUgZmlyc3QgYnl0ZQorICogICBvZiB0aGUgcnggbWVzc2FnZSBpbmRpY2F0ZXMgZGF0YSAoMCkgb3Igc3RhdHVzIG1zZyAoMSkuIFN0YXR1cyBtZXNzYWdlcworICogICBhcmUgc2VudCBiZWZvcmUgYW55IGRhdGEuCisgKgorICogICBJbmNvbWluZyBzZXJpYWwgY2hhcmFjdGVycyBhcmUgcHV0IGludG8gdGhlIHJ4IHJpbmcgYnkgdGhlIHNlcmlhbAorICogICBpbnRlcnJ1cHQsIGFuZCB0aGUgRVAyaW4gYnVmZmVyIHNlbnQgaWYgaXQgd2Fzbid0IGFscmVhZHkgaW4gdHJhbnNpdC4KKyAqICAgV2hlbiB0aGUgRVAyaW4gYnVmZmVyIHJldHVybnMsIHRoZSBpbnRlcnJ1cHQgcHJvbXB0cyB1cyB0byBzZW5kIG1vcmUKKyAqICAgcnggY2hhcnMgKG9yIHN0YXR1cyBtZXNzYWdlcykgaWYgdGhleSBhcmUgcGVuZGluZy4KKyAqCisgKiAgIERldmljZSBjb250cm9sIGhhcHBlbnMgdGhyb3VnaCAidmVuZG9yIHNwZWNpZmljIiBjb250cm9sIG1lc3NhZ2VzIG9uIEVQMC4KKyAqICAgQWxsIG1lc3NhZ2VzIGFyZSBkZXN0aW5lZCBmb3IgdGhlICJJbnRlcmZhY2UiICh3aXRoIHRoZSBpbmRleCBhbHdheXMgMCwKKyAqICAgc28gdGhhdCBpZiB0aGVpciB0d28tcG9ydCBkZXZpY2UgbWlnaHQgc29tZWRheSB1c2Ugc2ltaWxhciBmaXJtd2FyZSwgd2UKKyAqICAgY2FuIHVzZSBpbmRleD0xIHRvIHJlZmVyIHRvIHRoZSBzZWNvbmQgcG9ydCkuIFRoZSBtZXNzYWdlcyBkZWZpbmVkIGFyZToKKyAqCisgKiAgICBiUmVxdWVzdCA9IDAgOiBzZXQgYmF1ZC9iaXRzL3Bhcml0eQorICogICAgICAgICAgICAgICAxIDogdW51c2VkCisgKiAgICAgICAgICAgICAgIDIgOiByZXNlcnZlZCBmb3Igc2V0dGluZyBIVyBmbG93IGNvbnRyb2wgKENUU1JUUykKKyAqICAgICAgICAgICAgICAgMyA6IGdldC9zZXQgIm1vZGVtIGluZm8iIChwaW4gc3RhdGVzOiBEVFIsIFJUUywgRENELCBSSSwgZXRjKQorICogICAgICAgICAgICAgICA0IDogc2V0IGJyZWFrIChvbi9vZmYpCisgKiAgICAgICAgICAgICAgIDUgOiByZXNlcnZlZCBmb3IgcmVxdWVzdGluZyBpbnRlcnJ1cHRzIG9uIHBpbiBzdGF0ZSBjaGFuZ2UKKyAqICAgICAgICAgICAgICAgNiA6IHF1ZXJ5IGJ1ZmZlciByb29tIG9yIGNoYXJzIGluIHR4IGJ1ZmZlcgorICogICAgICAgICAgICAgICA3IDogcmVxdWVzdCB0eCB1bnRocm90dGxlIGludGVycnVwdAorICoKKyAqICBUaGUgaG9zdC1zaWRlIGRyaXZlciBpcyBzZXQgdG8gcmVjb2duaXplIHRoZSBkZXZpY2UgSUQgdmFsdWVzIHN0YXNoZWQgaW4KKyAqICBzZXJpYWwgRUVQUk9NICgweDA2Y2QsIDB4MDEwMyksIHByb2dyYW0gdGhpcyBmaXJtd2FyZSBpbnRvIHBsYWNlLCB0aGVuCisgKiAgc3RhcnQgaXQgcnVubmluZy4gVGhpcyBmaXJtd2FyZSB3aWxsIHVzZSBFelVTQidzICJyZW51bWVyYXRpb24iIHRyaWNrIGJ5CisgKiAgc2ltdWxhdGluZyBhIGJ1cyBkaXNjb25uZWN0LCB0aGVuIHJlY29ubmVjdCB3aXRoIGEgZGlmZmVyZW50IGRldmljZSBJRAorICogIChlbmNvZGVkIGluIHRoZSBkZXNjX2RldmljZSBkZXNjcmlwdG9yIGJlbG93KS4gVGhlIGhvc3QgZHJpdmVyIHRoZW4KKyAqICByZWNvZ25pemVzIHRoZSBuZXcgZGV2aWNlIElEIGFuZCBnbHVlcyBpdCB0byB0aGUgcmVhbCBzZXJpYWwgZHJpdmVyIGNvZGUuCisgKgorICogVVNFRlVMIERPQ1M6CisgKiAgRXpVU0IgVGVjaG5pY2FsIFJlZmVyZW5jZSBNYW51YWw6IDxodHRwOi8vd3d3LmFuY2hvcmNoaXBzLmNvbT4KKyAqICA4MDUxIG1hbnVhbHM6IGV2ZXJ5d2hlcmUsIGJ1dCB0cnkgd3d3LmRhbHNlbWkuY29tIGJlY2F1c2UgdGhlIEV6VVNCIGlzCisgKiAgIGJhc2ljYWxseSB0aGUgRGFsbGFzIGVuaGFuY2VkIDgwNTEgY29kZS4gUmVtZW1iZXIgdGhhdCB0aGUgRXpVU0IgSU8gcG9ydHMKKyAqICAgdXNlIHRvdGFsbHkgZGlmZmVyZW50IHJlZ2lzdGVycyEKKyAqICBVU0IgMS4xIHNwZWM6IHd3dy51c2Iub3JnCisgKgorICogSE9XIFRPIEJVSUxEOgorICogIGdjYyAteCBhc3NlbWJsZXItd2l0aC1jcHAgLVAgLUUgLW8ga2V5c3Bhbl9wZGEuYXNtIGtleXNwYW5fcGRhLnMKKyAqICBhczMxIC1sIGtleXNwYW5fcGRhLmFzbQorICogIG12IGtleXNwYW5fcGRhLm9iaiBrZXlzcGFuX3BkYS5oZXgKKyAqICBwZXJsIGV6dXNiX2NvbnZlcnQucGwga2V5c3Bhbl9wZGEgPCBrZXlzcGFuX3BkYS5oZXggPiBrZXlzcGFuX3BkYV9mdy5oCisgKiBHZXQgYXMzMSBmcm9tIDxodHRwOi8vd3d3LnBqcmMuY29tL3RlY2gvODA1MS9pbmRleC5odG1sPiwgYW5kIGhhY2sgb24gaXQKKyAqIGEgYml0IHRvIG1ha2UgaXQgYnVpbGQuCisgKgorICogVEhBTktTOgorICogIEdyZWcgS3JvYWgtSGFydG1hbiwgZm9yIGNvb3JkaW5hdGluZyB0aGUgd2hvbGUgdXNiLXNlcmlhbCB0aGluZy4KKyAqICBBbmNob3JDaGlwcywgZm9yIG1ha2luZyBzdWNoIGFuIGluY3JlZGlibHkgdXNlZnVsIGxpdHRsZSBtaWNyb2NvbnRyb2xsZXIuCisgKiAgS2V5U3BhbiwgZm9yIG1ha2luZyBhIGhhbmR5LCBjaGVhcCAoJDQwKSB3aWRnZXQgdGhhdCB3YXMgc28gZWFzeSB0byB0YWtlCisgKiAgICAgICAgICAgYXBhcnQgYW5kIHRyYWNlIHdpdGggYW4gb2htbWV0ZXIuCisgKgorICogVE9ETzoKKyAqICBsb3RzLiBncmVwIGZvciBUT0RPLiBJbnRlcnJ1cHQgc2FmZXR5IG5lZWRzIHN0cmVzcy10ZXN0aW5nLiBCZXR0ZXIgZmxvdworICogIGNvbnRyb2wuIEludGVycnVwdGluZyBob3N0IHVwb24gY2hhbmdlIGluIERDRCwgZXRjLCBjb3VudGluZyB0cmFuc2l0aW9ucy4KKyAqICBOZWVkIHRvIGZpbmQgYSBzYWZlIGRldmljZSBpZCB0byB1c2UgKHRoZSBvbmUgdXNlZCBieSB0aGUgS2V5c3BhbiBmaXJtd2FyZQorICogIHVuZGVyIFdpbmRvd3Mgd291bGQgYmUgaWRlYWwuLiBjYW4gYW55b25lIGZpZ3VyZSBvdXQgd2hhdCBpdCBpcz8pLiBQYXJpdHkuCisgKiAgTW9yZSBiYXVkIHJhdGVzLiBPaCwgYW5kIHRoZSBzdHJpbmctZGVzY3JpcHRvci1sZW5ndGggc2lsaWNvbiBidWcKKyAqICB3b3JrYXJvdW5kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCwgYnV0IEknbSBsYXp5LCBhbmQgdGhlIGNvbnNlcXVlbmNlIGlzCisgKiAgdGhhdCB0aGUgZGV2aWNlIG5hbWUgc3RyaW5ncyB0aGF0IHNob3cgdXAgaW4geW91ciBrZXJuZWwgbG9nIHdpbGwgaGF2ZQorICogIGxvdHMgb2YgdHJhaWxpbmcgYmluYXJ5IGdhcmJhZ2UgaW4gdGhlbSAoYXBwZWFycyBhcyA/Pz8/KS4gRGV2aWNlIHN0cmluZ3MKKyAqICBzaG91bGQgYmUgbWFkZSBtb3JlIGFjY3VyYXRlLgorICoKKyAqIFF1ZXN0aW9ucywgYnVncywgcGF0Y2hlcyB0byBCcmlhbi4KKyAqCisgKiAgLUJyaWFuIFdhcm5lciA8d2FybmVyQGxvdGhhci5jb20+CisgKgorICovCisJCisjZGVmaW5lIEhJR0goeCkgKCgoeCkgJiAweGZmMDApIC8gMjU2KQorI2RlZmluZSBMT1coeCkgKCh4KSAmIDB4ZmYpCisKKyNkZWZpbmUgZHBsMSAweDg0CisjZGVmaW5lIGRwaDEgMHg4NQorI2RlZmluZSBkcHMgMHg4NgorCis7Ozsgb3VyIGJpdCBhc3NpZ25tZW50cworI2RlZmluZSBUWF9SVU5OSU5HIDAKKyNkZWZpbmUgRE9fVFhfVU5USFJPVFRMRSAxCisJCisJOzsgc3RhY2sgZnJvbSAweDYwIHRvIDB4N2Y6IHNob3VsZCByZWFsbHkgc2V0IFNQIHRvIDB4NjAtMSwgbm90IDB4NjAKKyNkZWZpbmUgU1RBQ0sgIzB4NjAtMQorCisjZGVmaW5lIEVYSUYgMHg5MQorI2RlZmluZSBFSUUgMHhlOAorCS5mbGFnIEVVU0IsIEVJRS4wCisJLmZsYWcgRVMwLCBJRS40CisKKyNkZWZpbmUgRVAwQ1MgIzB4N2ZiNAorI2RlZmluZSBFUDBTVEFMTGJpdCAjMHgwMQorI2RlZmluZSBJTjBCVUYgIzB4N2YwMAorI2RlZmluZSBJTjBCQyAjMHg3ZmI1CisjZGVmaW5lIE9VVDBCVUYgIzB4N2VjMAorI2RlZmluZSBPVVQwQkMgIzB4N2ZjNQkJCisjZGVmaW5lIElOMkJVRiAjMHg3ZTAwCisjZGVmaW5lIElOMkJDICMweDdmYjkKKyNkZWZpbmUgSU4yQ1MgIzB4N2ZiOAorI2RlZmluZSBPVVQyQkMgIzB4N2ZjOQorI2RlZmluZSBPVVQyQ1MgIzB4N2ZjOAorI2RlZmluZSBPVVQyQlVGICMweDdkYzAKKyNkZWZpbmUgSU40QlVGICMweDdkMDAKKyNkZWZpbmUgSU40QkMgIzB4N2ZiZAorI2RlZmluZSBJTjRDUyAjMHg3ZmJjCisjZGVmaW5lIE9FQiAjMHg3ZjlkCisjZGVmaW5lIE9VVEIgIzB4N2Y5NworI2RlZmluZSBPRUMgIzB4N2Y5ZQorI2RlZmluZSBPVVRDICMweDdmOTgKKyNkZWZpbmUgUElOU0MgIzB4N2Y5YgorI2RlZmluZSBQT1JUQkNGRyAjMHg3Zjk0CisjZGVmaW5lIFBPUlRDQ0ZHICMweDdmOTUKKyNkZWZpbmUgT0VBCSMweDdmOWMKKyNkZWZpbmUgSU4wN0lSUSAjMHg3ZmE5CisjZGVmaW5lIE9VVDA3SVJRICMweDdmYWEKKyNkZWZpbmUgSU4wN0lFTiAjMHg3ZmFjCisjZGVmaW5lIE9VVDA3SUVOICMweDdmYWQKKyNkZWZpbmUgVVNCSVJRICMweDdmYWIKKyNkZWZpbmUgVVNCSUVOICMweDdmYWUKKyNkZWZpbmUgVVNCQkFWICMweDdmYWYKKyNkZWZpbmUgVVNCQ1MgIzB4N2ZkNgorI2RlZmluZSBTVURQVFJIICMweDdmZDQKKyNkZWZpbmUgU1VEUFRSTCAjMHg3ZmQ1CisjZGVmaW5lIFNFVFVQREFUICMweDdmZTgKKwkJCisJOzsgdXNiIGludGVycnVwdCA6IGVuYWJsZSBpcyBFSUUuMCAoMHhlOCksIGZsYWcgaXMgRVhJRi40ICgweDkxKQorCisJLm9yZyAwCisJbGptcCBzdGFydAorCTs7IGludGVycnVwdCB2ZWN0b3JzCisJLm9yZyAyM0gKKwlsam1wIHNlcmlhbF9pbnQKKwkuYnl0ZSAwCisJCisJLm9yZyA0M0gKKwlsam1wIFVTQl9KdW1wX1RhYmxlCisJLmJ5dGUgMAkJCTsgZmlsbGVkIGluIGJ5IHRoZSBVU0IgY29yZQorCis7OzsgbG9jYWwgdmFyaWFibGVzLiBUaGVzZSBhcmUgbm90IGluaXRpYWxpemVkIHByb3Blcmx5OiBkbyBpdCBieSBoYW5kLgorCS5vcmcgMzBICityeF9yaW5nX2luOgkuYnl0ZSAwCityeF9yaW5nX291dDoJLmJ5dGUgMAordHhfcmluZ19pbjoJLmJ5dGUgMAordHhfcmluZ19vdXQ6CS5ieXRlIDAKK3R4X3VudGhyb3R0bGVfdGhyZXNob2xkOgkuYnl0ZSAwCisJCQorCS5vcmcgMHgxMDBICQk7IHdhbnRzIHRvIGJlIG9uIGEgcGFnZSBib3VuZGFyeQorVVNCX0p1bXBfVGFibGU6CisJbGptcAlJU1JfU3VkYXYJOyBTZXR1cCBEYXRhIEF2YWlsYWJsZQorCS5ieXRlIDAKKwlsam1wCTAJCTsgU3RhcnQgb2YgRnJhbWUKKwkuYnl0ZSAwCisJbGptcAkwCQk7IFNldHVwIERhdGEgTG9hZGluZworCS5ieXRlIDAKKwlsam1wCTAJCTsgR2xvYmFsIFN1c3BlbmQKKwkuYnl0ZSAJMAorCWxqbXAJMAkJOyBVU0IgUmVzZXQgIAkKKwkuYnl0ZQkwCisJbGptcAkwCQk7IFJlc2VydmVkCisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMCBJbgorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDAgT3V0CisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMSBJbgorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDEgT3V0CisJLmJ5dGUJMAorCWxqbXAJSVNSX0VwMmluCisJLmJ5dGUJMAorCWxqbXAJSVNSX0VwMm91dAorCS5ieXRlCTAKKworCisJLm9yZyAweDIwMAorCQkKK3N0YXJ0Ogltb3YgU1AsU1RBQ0stMSA7IHNldCBzdGFjaworCTs7IGNsZWFyIGxvY2FsIHZhcmlhYmxlcworCWNsciBhCisJbW92IHR4X3JpbmdfaW4sIGEKKwltb3YgdHhfcmluZ19vdXQsIGEKKwltb3YgcnhfcmluZ19pbiwgYQorCW1vdiByeF9yaW5nX291dCwgYQorCW1vdiB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgYQorCWNsciBUWF9SVU5OSU5HCisJY2xyIERPX1RYX1VOVEhST1RUTEUKKwkKKwk7OyBjbGVhciBmaWZvIHdpdGggImZlIgorCW1vdiByMSwgMAorCW1vdiBhLCAjMHhmZQorCW1vdiBkcHRyLCAjdHhfcmluZworY2xlYXJfdHhfcmluZ19sb29wOgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCWRqbnogcjEsIGNsZWFyX3R4X3JpbmdfbG9vcAorCisJbW92IGEsICMweGZkCisJbW92IGRwdHIsICNyeF9yaW5nCitjbGVhcl9yeF9yaW5nX2xvb3A6CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJZGpueiByMSwgY2xlYXJfcnhfcmluZ19sb29wCisKKzs7OyB0dXJuIG9uIHRoZSBSUy0yMzIgZHJpdmVyIGNoaXAgKGJyaW5nIHRoZSBTVEFOREJZIHBpbiBsb3cpCis7Ozsgb24gWGlyY29tIHRoZSBTVEFOREJZIGlzIHdpcmVkIHRvIFBCNiBhbmQgUEM0IAorCW1vdiBkcHRyLCBQT1JUQkNGRworICAgICAgICBtb3YgYSwgIzB4QmYKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBQT1JUQ0NGRworICAgICAgICBtb3YgYSwgIzB4ZWYKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCQorCTs7IHNldCBPRUMuNAorICAgICAgICBtb3YgYSwgIzB4MTAKKyAgICAgICAgbW92IGRwdHIsT0VDCisgICAgICAgIG1vdnggQGRwdHIsYQorCisgICAgICAgIDs7IGNsZWFyIFBDNAorICAgICAgICBtb3YgYSwgIzB4MDAKKyAgICAgICAgbW92IGRwdHIsT1VUQworICAgICAgICBtb3Z4IEBkcHRyLGEKKworCTs7IHNldCBPRUIuNgorCW1vdiBhLCAjMHg0MAorCW1vdiBkcHRyLE9FQgorCW1vdnggQGRwdHIsYQorCisJOzsgY2xlYXIgUEI2CisJbW92IGEsICMweDAwCisJbW92IGRwdHIsT1VUQgorCW1vdnggQGRwdHIsYQorCisJOzsgc2V0IE9FQy5bMTddCisJbW92IGEsICMweDgyCisJbW92IGRwdHIsT0VDCisJbW92eCBAZHB0cixhCisKKworCTs7IHNldCBQT1JUQ0NGRy5bMDFdIHRvIHJvdXRlIFR4RDAsUnhEMCB0byBzZXJpYWwgcG9ydAorCW1vdiBkcHRyLCBQT1JUQ0NGRworCW1vdiBhLCAjMHgwMworCW1vdnggQGRwdHIsIGEKKwkKKwk7OyBzZXQgdXAgaW50ZXJydXB0cywgYXV0b3ZlY3RvcmluZworCTs7IHNldCBCS1BUCisJbW92IGRwdHIsIFVTQkJBVgorCW1vdnggYSxAZHB0cgorCXNldGIgYWNjLjAJCTsgQVZFTiBiaXQgdG8gMAorCW1vdnggQGRwdHIsIGEKKworCW1vdiBhLCMweDAxCQk7IGVuYWJsZSBTVURBVjoJc2V0dXAgZGF0YSBhdmFpbGFibGUgKGZvciBlcDApCisJbW92IGRwdHIsIFVTQklSUQorCW1vdnggQGRwdHIsIGEJCTsgY2xlYXIgU1VEQVZJCisJbW92IGRwdHIsIFVTQklFTgorCW1vdnggQGRwdHIsIGEKKwkKKwltb3YgZHB0ciwgSU4wN0lFTgorCW1vdiBhLCMweDA0CQk7IGVuYWJsZSBJTjIgaW50CisJbW92eCBAZHB0ciwgYQorCQorCW1vdiBkcHRyLCBPVVQwN0lFTgorCW1vdiBhLCMweDA0CQk7IGVuYWJsZSBPVVQyIGludAorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgT1VUMkJDCisJbW92eCBAZHB0ciwgYQkJOyBhcm0gT1VUMgorCis7Owltb3YgYSwgIzB4ODQJCTsgdHVybiBvbiBSVFMsIERUUgorOzsJbW92IGRwdHIsT1VUQworOzsJbW92eCBAZHB0ciwgYQorCisJbW92IGEsICMweDcgICAgICAgICAgICAgOyB0dXJuIG9uICBEVFIKKyAgICAgICAgbW92IGRwdHIsVVNCQkFWCisgICAgICAgIG1vdnggQGRwdHIsIGEKKworCW1vdiBhLCAjMHgyMCAgICAgICAgICAgICA7IHR1cm4gb24gdGhlIFJFRCBsZWQgCisgICAgICAgIG1vdiBkcHRyLE9FQQorICAgICAgICBtb3Z4IEBkcHRyLCBhCisKKwltb3YgYSwgIzB4ODAgICAgICAgICAgICA7IHR1cm4gb24gIFJUUworICAgICAgICBtb3YgZHB0cixPVVRDCisgICAgICAgIG1vdnggQGRwdHIsIGEKKworCTs7IHNldHVwIHRoZSBzZXJpYWwgcG9ydC4gOTYwMCA4TjEuCisJbW92IGEsIzB4NTMJCTsgbW9kZSAxLCBlbmFibGUgcngsIGNsZWFyIGludAorCW1vdiBTQ09OLCBhCisJOzsgIHVzaW5nIHRpbWVyMiwgaW4gMTYtYml0IGJhdWQtcmF0ZS1nZW5lcmF0b3IgbW9kZQorCTs7ICAgKHh0YWwgMTJNSHosIGludGVybmFsIGZvc2MgMjRNSHopCisJOzsgIFJDQVAySCxSQ0FQMkwgPSA2NTUzNiAtIGZvc2MvKDMyKmJhdWQpCisJOzsgIDU3NjAwOiAweEZGRjIuRiwgc2F5IDB4RkZGMworCTs7ICAgOTYwMDogMHhGRkIxLkUsIHNheSAweEZGQjIKKwk7OyAgICAzMDA6IDB4RjYzQworI2RlZmluZSBCQVVEIDk2MDAKKyNkZWZpbmUgQkFVRF9USU1FT1VUKHJhdGUpICg2NTUzNiAtICgyNCAqIDEwMDAgKiAxMDAwKSAvICgzMiAqIHJhdGUpKQorI2RlZmluZSBCQVVEX0hJR0gocmF0ZSkgSElHSChCQVVEX1RJTUVPVVQocmF0ZSkpCisjZGVmaW5lIEJBVURfTE9XKHJhdGUpIExPVyhCQVVEX1RJTUVPVVQocmF0ZSkpCisJCQorCW1vdiBUMkNPTiwgIzAzMGgJOyByY2xrPTEsdGNsaz0xLGNwPTAsdHIyPTAoZW5hYmxlIGxhdGVyKQorCW1vdiByMywgIzUKKwlhY2FsbCBzZXRfYmF1ZAorCXNldGIgVFIyCisJbW92IFNDT04sICMwNTBoCisJCisjaWYgMAorCW1vdiByMSwgIzB4NDAKKwltb3YgYSwgIzB4NDEKK3NlbmQ6CQorCW1vdiBTQlVGLCBhCisJaW5jIGEKKwlhbmwgYSwgIzB4M0YKKwlvcmwgYSwgIzB4NDAKKzsJeHJsIGEsICMweDAyCit3YWl0MToJCisJam5iIFRJLCB3YWl0MQorCWNsciBUSQorCWRqbnogcjEsIHNlbmQKKztkb25lOglzam1wIGRvbmUKKworI2VuZGlmCisJCisJc2V0YiBFVVNCCisJc2V0YiBFQQorCXNldGIgRVMwCisJO2FjYWxsIGR1bXBfc3RhdAorCisJOzsgaGV5LCB3aGF0IHNheSB3ZSBSRU5VTUVSQVRFISAoVFJNIHAuNjIpCisJbW92IGEsICMwCisJbW92IGRwcywgYQorCW1vdiBkcHRyLCBVU0JDUworCW1vdiBhLCAjMHgwMgkJOyBESVNDT049MCwgRElTQ09FPTAsIFJFTlVNPTEKKwltb3Z4IEBkcHRyLCBhCisJOzsgbm93IHByZXNlbmNlIHBpbiBpcyBmbG9hdGluZywgc2ltdWxhdGluZyBkaXNjb25uZWN0LiB3YWl0IDAuNXMKKwltb3YgcjEsICM0NgorcmVudW1fd2FpdDE6CisJbW92IHIyLCAjMAorcmVudW1fd2FpdDI6CisJbW92IHIzLCAjMAorcmVudW1fd2FpdDM6CisJZGpueiByMywgcmVudW1fd2FpdDMKKwlkam56IHIyLCByZW51bV93YWl0MgorCWRqbnogcjEsIHJlbnVtX3dhaXQxCTsgd2FpdCBhYm91dCBuKigyNTZeMikgNk1IeiBjbG9ja3MKKwltb3YgYSwgIzB4MDYJCTsgRElTQ09OPTAsIERJU0NPRT0xLCBSRU5VTT0xCisJbW92eCBAZHB0ciwgYQorCTs7IHdlIGFyZSBiYWNrIG9ubGluZS4gdGhlIGhvc3QgZGV2aWNlIHdpbGwgbm93IHJlLXF1ZXJ5IHVzCisJCisJCittYWluOglzam1wIG1haW4KKworCQorCitJU1JfU3VkYXY6CisJcHVzaCBkcHMKKwlwdXNoIGRwbAorCXB1c2ggZHBoCisJcHVzaCBkcGwxCisJcHVzaCBkcGgxCisJcHVzaCBhY2MKKwltb3YgYSxFWElGCisJY2xyIGFjYy40CisJbW92IEVYSUYsYQkJOyBjbGVhciBJTlQyIGZpcnN0CisJbW92IGRwdHIsIFVTQklSUQk7IGNsZWFyIFVTQiBpbnQKKwltb3YgYSwjMDFoCisJbW92eCBAZHB0cixhCisKKwk7OyBnZXQgcmVxdWVzdCB0eXBlCisJbW92IGRwdHIsIFNFVFVQREFUCisJbW92eCBhLCBAZHB0cgorCW1vdiByMSwgYQkJOyByMSA9IGJtUmVxdWVzdFR5cGUKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjIsIGEJCTsgcjIgPSBiUmVxdWVzdAorCWluYyBkcHRyCisJbW92eCBhLCBAZHB0cgorCW1vdiByMywgYQkJOyByMyA9IHdWYWx1ZUwKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjQsIGEJCTsgcjQgPSB3VmFsdWVICisKKwk7OyBtYWluIHN3aXRjaCBvbiBibVJlcXVlc3QudHlwZTogc3RhbmRhcmQgb3IgdmVuZG9yCisJbW92IGEsIHIxCisJYW5sIGEsICMweDYwCisJY2puZSBhLCAjMHgwMCwgc2V0dXBfYm1yZXFfdHlwZV9ub3Rfc3RhbmRhcmQKKwk7OyBzdGFuZGFyZCByZXF1ZXN0OiBub3cgbWFpbiBzd2l0Y2ggaXMgb24gYlJlcXVlc3QKKwlsam1wIHNldHVwX2JtcmVxX2lzX3N0YW5kYXJkCisJCitzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZDoJCisJOzsgYSBzdGlsbCBoYXMgYm1yZXEmMHg2MAorCWNqbmUgYSwgIzB4NDAsIHNldHVwX2JtcmVxX3R5cGVfbm90X3ZlbmRvcgorCTs7IEFuY2hvciByZXNlcnZlcyBiUmVxdWVzdCAweGEwLTB4YWYsIHdlIHVzZSBzbWFsbCBvbmVzCisJOzsgc3dpdGNoIG9uIGJSZXF1ZXN0LiBibVJlcXVlc3Qgd2lsbCBhbHdheXMgYmUgMHg0MSBvciAweGMxCisJY2puZSByMiwgIzB4MDAsIHNldHVwX2N0cmxfbm90XzAwCisJOzsgMDAgaXMgc2V0IGJhdWQsIHdWYWx1ZVswXSBoYXMgYmF1ZCByYXRlIGluZGV4CisJbGNhbGwgc2V0X2JhdWQJCTsgaW5kZXggaW4gcjMsIGNhcnJ5IHNldCBpZiBlcnJvcgorCWpjIHNldHVwX2JtcmVxX3R5cGVfbm90X3N0YW5kYXJkX19kb19zdGFsbAorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2JtcmVxX3R5cGVfbm90X3N0YW5kYXJkX19kb19zdGFsbDoKKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wMDoKKwljam5lIHIyLCAjMHgwMSwgc2V0dXBfY3RybF9ub3RfMDEKKwk7OyAwMSBpcyByZXNlcnZlZCBmb3Igc2V0IGJpdHMgKHBhcml0eSkuIFRPRE8KKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wMToKKwljam5lIHIyLCAjMHgwMiwgc2V0dXBfY3RybF9ub3RfMDIKKwk7OyAwMiBpcyBzZXQgSFcgZmxvdyBjb250cm9sLiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDI6CisJY2puZSByMiwgIzB4MDMsIHNldHVwX2N0cmxfbm90XzAzCisJOzsgMDMgaXMgY29udHJvbCBwaW5zIChSVFMsIERUUikuCisJbGptcCBjb250cm9sX3BpbnMJOyB3aWxsIGp1bXAgdG8gc2V0dXBfZG9uZV9hY2ssCisJCQkJOyAgb3Igc2V0dXBfcmV0dXJuX29uZV9ieXRlCitzZXR1cF9jdHJsX25vdF8wMzoKKwljam5lIHIyLCAjMHgwNCwgc2V0dXBfY3RybF9ub3RfMDQKKwk7OyAwNCBpcyBzZW5kIGJyZWFrIChyZWFsbHkgInR1cm4gYnJlYWsgb24vb2ZmIikuIFRPRE8KKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfY3RybF9kb19icmVha19vbgorCTs7IGRvIGJyZWFrIG9mZjogcmVzdG9yZSBQT1JUQ0NGRy4xIHRvIHJlY29ubmVjdCBUeEQwIHRvIHNlcmlhbCBwb3J0CisJbW92IGRwdHIsIFBPUlRDQ0ZHCisJbW92eCBhLCBAZHB0cgorCW9ybCBhLCAjMHgwMgorCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9jdHJsX2RvX2JyZWFrX29uOgorCTs7IGRvIGJyZWFrIG9uOiBjbGVhciBQT1JUQ0NGRy4wLCBzZXQgVHhEIGhpZ2goPykgKGIxIGxvdykKKwltb3YgZHB0ciwgT1VUQworCW1vdnggYSwgQGRwdHIKKwlhbmwgYSwgIzB4ZmQJCTsgfjB4MDIKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIFBPUlRDQ0ZHCisJbW92eCBhLCBAZHB0cgorCWFubCBhLCAjMHhmZAkJOyB+MHgwMgorCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9jdHJsX25vdF8wNDoKKwljam5lIHIyLCAjMHgwNSwgc2V0dXBfY3RybF9ub3RfMDUKKwk7OyAwNSBpcyBzZXQgZGVzaXJlZCBpbnRlcnJ1cHQgYml0bWFwLiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDU6CisJY2puZSByMiwgIzB4MDYsIHNldHVwX2N0cmxfbm90XzA2CisJOzsgMDYgaXMgcXVlcnkgcm9vbQorCWNqbmUgcjMsICMweDAwLCBzZXR1cF9jdHJsXzA2X25vdF8wMAorCTs7IDA2LCB3VmFsdWVbMF09MCBpcyBxdWVyeSB3cml0ZV9yb29tCisJbW92IGEsIHR4X3Jpbmdfb3V0CisJc2V0YiBjCisJc3ViYiBhLCB0eF9yaW5nX2luCTsgb3V0LTEtaW4gPSAyNTUgLSAoaW4tb3V0KQorCWxqbXAgc2V0dXBfcmV0dXJuX29uZV9ieXRlCitzZXR1cF9jdHJsXzA2X25vdF8wMDoKKwljam5lIHIzLCAjMHgwMSwgc2V0dXBfY3RybF8wNl9ub3RfMDEKKwk7OyAwNiwgd1ZhbHVlWzBdPTEgaXMgcXVlcnkgY2hhcnNfaW5fYnVmZmVyCisJbW92IGEsIHR4X3JpbmdfaW4KKwljbHIgYworCXN1YmIgYSwgdHhfcmluZ19vdXQJOyBpbi1vdXQKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfY3RybF8wNl9ub3RfMDE6CQorCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzA2OgorCWNqbmUgcjIsICMweDA3LCBzZXR1cF9jdHJsX25vdF8wNworCTs7IDA3IGlzIHJlcXVlc3QgdHggdW50aHJvdHRsZSBpbnRlcnJ1cHQKKwltb3YgdHhfdW50aHJvdHRsZV90aHJlc2hvbGQsIHIzOyB3VmFsdWVbMF0gaXMgdGhyZXNob2xkIHZhbHVlCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfY3RybF9ub3RfMDc6CisJbGptcCBzZXR1cF9zdGFsbAorCQorc2V0dXBfYm1yZXFfdHlwZV9ub3RfdmVuZG9yOgorCWxqbXAgc2V0dXBfc3RhbGwKKworCitzZXR1cF9ibXJlcV9pc19zdGFuZGFyZDoJCisJY2puZSByMiwgIzB4MDAsIHNldHVwX2JyZXFfbm90XzAwCisJOzsgMDA6CUdldF9TdGF0dXMgKHN1Yi1zd2l0Y2ggb24gYm1SZXF1ZXN0VHlwZTogZGV2aWNlLCBlcCwgaW50KQorCWNqbmUgcjEsICMweDgwLCBzZXR1cF9HZXRfU3RhdHVzX25vdF9kZXZpY2UKKwk7OyBHZXRfU3RhdHVzKGRldmljZSkKKwk7OyAgYXJlIHdlIHNlbGYtcG93ZXJlZD8gbm8uIGNhbiB3ZSBkbyByZW1vdGUgd2FrZXVwPyBubworCTs7ICAgc28gcmV0dXJuIHR3byB6ZXJvIGJ5dGVzLiBUaGlzIGlzIHJldXNhYmxlCitzZXR1cF9yZXR1cm5fdHdvX3plcm9fYnl0ZXM6CisJbW92IGRwdHIsIElOMEJVRgorCWNsciBhCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBJTjBCQworCW1vdiBhLCAjMgorCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9HZXRfU3RhdHVzX25vdF9kZXZpY2U6CisJY2puZSByMSwgIzB4ODIsIHNldHVwX0dldF9TdGF0dXNfbm90X2VuZHBvaW50CisJOzsgR2V0X1N0YXR1cyhlbmRwb2ludCkKKwk7OyAgbXVzdCBnZXQgc3RhbGwgYml0IGZvciBlcFt3SW5kZXhMXSwgcmV0dXJuIHR3byBieXRlcywgYml0IGluIGxzYiAwCisJOzsgZm9yIG5vdzogY2hlYXQuIFRPRE8KKwlzam1wIHNldHVwX3JldHVybl90d29femVyb19ieXRlcworc2V0dXBfR2V0X1N0YXR1c19ub3RfZW5kcG9pbnQ6CisJY2puZSByMSwgIzB4ODEsIHNldHVwX0dldF9TdGF0dXNfbm90X2ludGVyZmFjZQorCTs7IEdldF9TdGF0dXMoaW50ZXJmYWNlKTogcmV0dXJuIHR3byB6ZXJvcworCXNqbXAgc2V0dXBfcmV0dXJuX3R3b196ZXJvX2J5dGVzCitzZXR1cF9HZXRfU3RhdHVzX25vdF9pbnRlcmZhY2U6CQorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JyZXFfbm90XzAwOgorCWNqbmUgcjIsICMweDAxLCBzZXR1cF9icmVxX25vdF8wMQorCTs7IDAxOglDbGVhcl9GZWF0dXJlIChzdWItc3dpdGNoIG9uIHdWYWx1ZUw6IHN0YWxsLCByZW1vdGUgd2FrZXVwKQorCWNqbmUgcjMsICMweDAwLCBzZXR1cF9DbGVhcl9GZWF0dXJlX25vdF9zdGFsbAorCTs7IENsZWFyX0ZlYXR1cmUoc3RhbGwpLiBzaG91bGQgY2xlYXIgYSBzdGFsbCBiaXQuIFRPRE8KKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9DbGVhcl9GZWF0dXJlX25vdF9zdGFsbDoKKwljam5lIHIzLCAjMHgwMSwgc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfcndha2UKKwk7OyBDbGVhcl9GZWF0dXJlKHJlbW90ZSB3YWtldXApLiBpZ25vcmVkLgorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0NsZWFyX0ZlYXR1cmVfbm90X3J3YWtlOgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JyZXFfbm90XzAxOgorCWNqbmUgcjIsICMweDAzLCBzZXR1cF9icmVxX25vdF8wMworCTs7IDAzOglTZXRfRmVhdHVyZSAoc3ViLXN3aXRjaCBvbiB3VmFsdWVMOiBzdGFsbCwgcmVtb3RlIHdha2V1cCkKKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3N0YWxsCisJOzsgU2V0X0ZlYXR1cmUoc3RhbGwpLiBTaG91bGQgc2V0IGEgc3RhbGwgYml0LiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3N0YWxsOgorCWNqbmUgcjMsICMweDAxLCBzZXR1cF9TZXRfRmVhdHVyZV9ub3Rfcndha2UKKwk7OyBTZXRfRmVhdHVyZShyZW1vdGUgd2FrZXVwKS4gaWdub3JlZC4KKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9TZXRfRmVhdHVyZV9ub3Rfcndha2U6CisJbGptcCBzZXR1cF9zdGFsbAorCQorc2V0dXBfYnJlcV9ub3RfMDM6CQorCWNqbmUgcjIsICMweDA2LCBzZXR1cF9icmVxX25vdF8wNgorCTs7IDA2OglHZXRfRGVzY3JpcHRvciAocy1zd2l0Y2ggb24gd1ZhbHVlSDogZGV2LCBjb25maWdbbl0sIHN0cmluZ1tuXSkKKwljam5lIHI0LCAjMHgwMSwgc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X2RldmljZQorCTs7IEdldF9EZXNjcmlwdG9yKGRldmljZSkKKwltb3YgZHB0ciwgU1VEUFRSSAorCW1vdiBhLCAjSElHSChkZXNjX2RldmljZSkKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIFNVRFBUUkwKKwltb3YgYSwgI0xPVyhkZXNjX2RldmljZSkKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X2RldmljZToKKwljam5lIHI0LCAjMHgwMiwgc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X2NvbmZpZworCTs7IEdldF9EZXNjcmlwdG9yKGNvbmZpZ1tuXSkKKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfc3RhbGw7IG9ubHkgaGFuZGxlIG49PTAKKwk7OyBHZXRfRGVzY3JpcHRvcihjb25maWdbMF0pCisJbW92IGRwdHIsIFNVRFBUUkgKKwltb3YgYSwgI0hJR0goZGVzY19jb25maWcxKQorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgU1VEUFRSTAorCW1vdiBhLCAjTE9XKGRlc2NfY29uZmlnMSkKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X2NvbmZpZzoKKwljam5lIHI0LCAjMHgwMywgc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X3N0cmluZworCTs7IEdldF9EZXNjcmlwdG9yKHN0cmluZ1t3VmFsdWVMXSkKKwk7OyAgaWYgKHdWYWx1ZUwgPj0gbWF4c3RyaW5ncykgc3RhbGwKKwltb3YgYSwgIygoZGVzY19zdHJpbmdzX2VuZC1kZXNjX3N0cmluZ3MpLzIpCisJY2xyIGMKKwlzdWJiIGEscjMJCTsgYT00LCByMyA9IDAuLjMgLiBpZiBhPD0wIHRoZW4gc3RhbGwKKwlqYyAgc2V0dXBfc3RhbGwKKwlqeiAgc2V0dXBfc3RhbGwKKwltb3YgYSwgcjMKKwlhZGQgYSwgcjMJCTsgYSA9IDIqd1ZhbHVlTAorCW1vdiBkcHRyLCAjZGVzY19zdHJpbmdzCisJYWRkIGEsIGRwbAorCW1vdiBkcGwsIGEKKwltb3YgYSwgIzAKKwlhZGRjIGEsIGRwaAorCW1vdiBkcGgsIGEJCTsgZHBoID0gZGVzY19zdHJpbmdzW2FdLiBiaWcgZW5kaWFuISAoaGFuZHkpCisJOzsgaXQgbG9va3MgbGlrZSBteSBhZGFwdGVyIHVzZXMgYSByZXZpc2lvbiBvZiB0aGUgRVpVU0IgdGhhdAorCTs7IGNvbnRhaW5zICJyZXYgRCBlcnJhdGEgbnVtYmVyIDgiLCBhcyBoaW50ZWQgaW4gdGhlIEV6VVNCIGV4YW1wbGUKKwk7OyBjb2RlLiBJIGNhbm5vdCBmaW5kIGFuIGFjdHVhbCBlcnJhdGEgZGVzY3JpcHRpb24gb24gdGhlIEN5cHJlc3MKKwk7OyB3ZWIgc2l0ZSwgYnV0IGZyb20gdGhlIGV4YW1wbGUgY29kZSBpdCBsb29rcyBsaWtlIHRoaXMgYnVnIGNhdXNlcworCTs7IHRoZSBsZW5ndGggb2Ygc3RyaW5nIGRlc2NyaXB0b3JzIHRvIGJlIHJlYWQgaW5jb3JyZWN0bHksIHBvc3NpYmx5CisJOzsgc2VuZGluZyBiYWNrIG1vcmUgY2hhcmFjdGVycyB0aGFuIHRoZSBkZXNjcmlwdG9yIGhhcy4gVGhlIHdvcmthcm91bmQKKwk7OyBpcyB0byBtYW51YWxseSBzZW5kIG91dCBhbGwgb2YgdGhlIGRhdGEuIFRoZSBjb25zZXF1ZW5jZSBvZiBub3QKKwk7OyB1c2luZyB0aGUgd29ya2Fyb3VuZCBpcyB0aGF0IHRoZSBzdHJpbmdzIGdhdGhlcmVkIGJ5IHRoZSBrZXJuZWwKKwk7OyBkcml2ZXIgYXJlIHRvbyBsb25nIGFuZCBhcmUgZmlsbGVkIHdpdGggdHJhaWxpbmcgZ2FyYmFnZSAoaW5jbHVkaW5nCisJOzsgbGVmdG92ZXIgc3RyaW5ncykuIFdyaXRpbmcgdGhpcyBvdXQgYnkgaGFuZCBpcyBhIG51aXNhbmNlLCBzbyBmb3IKKwk7OyBub3cgSSB3aWxsIGp1c3QgbGl2ZSB3aXRoIHRoZSBidWcuCisJbW92eCBhLCBAZHB0cgorCW1vdiByMSwgYQorCWluYyBkcHRyCisJbW92eCBhLCBAZHB0cgorCW1vdiByMiwgYQorCW1vdiBkcHRyLCBTVURQVFJICisJbW92IGEsIHIxCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBTVURQVFJMCisJbW92IGEsIHIyCisJbW92eCBAZHB0ciwgYQorCTs7IGRvbmUKKwlsam1wIHNldHVwX2RvbmVfYWNrCisJCitzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3Rfc3RyaW5nOgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JyZXFfbm90XzA2OgorCWNqbmUgcjIsICMweDA4LCBzZXR1cF9icmVxX25vdF8wOAorCTs7IEdldF9Db25maWd1cmF0aW9uLiBhbHdheXMgMS4gcmV0dXJuIG9uZSBieXRlLgorCTs7IHRoaXMgaXMgcmV1c2FibGUKKwltb3YgYSwgIzEKK3NldHVwX3JldHVybl9vbmVfYnl0ZToJCisJbW92IGRwdHIsIElOMEJVRgorCW1vdnggQGRwdHIsIGEKKwltb3YgYSwgIzEKKwltb3YgZHB0ciwgSU4wQkMKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfYnJlcV9ub3RfMDg6CisJY2puZSByMiwgIzB4MDksIHNldHVwX2JyZXFfbm90XzA5CisJOzsgMDk6IFNldF9Db25maWd1cmF0aW9uLiBpZ25vcmVkLgorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2JyZXFfbm90XzA5OgorCWNqbmUgcjIsICMweDBhLCBzZXR1cF9icmVxX25vdF8wYQorCTs7IDBhOiBHZXRfSW50ZXJmYWNlLiBnZXQgdGhlIGN1cnJlbnQgYWx0c2V0dGluZyBmb3IgaW50W3dJbmRleExdCisJOzsgIHNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgaW50ZXJmYWNlLCBpZ25vcmUgd0luZGV4TCwgcmV0dXJuIGEgMAorCW1vdiBhLCAjMAorCWxqbXAgc2V0dXBfcmV0dXJuX29uZV9ieXRlCitzZXR1cF9icmVxX25vdF8wYToKKwljam5lIHIyLCAjMHgwYiwgc2V0dXBfYnJlcV9ub3RfMGIKKwk7OyAwYjogU2V0X0ludGVyZmFjZS4gc2V0IGFsdHNldHRpbmcgZm9yIGludGVyZmFjZVt3SW5kZXhMXS4gaWdub3JlZAorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2JyZXFfbm90XzBiOgorCWxqbXAgc2V0dXBfc3RhbGwKKworCQkKK3NldHVwX2RvbmVfYWNrOgkKKwk7OyBub3cgY2xlYXIgSFNOQUsKKwltb3YgZHB0ciwgRVAwQ1MKKwltb3YgYSwgIzB4MDIKKwltb3Z4IEBkcHRyLCBhCisJc2ptcCBzZXR1cF9kb25lCitzZXR1cF9zdGFsbDoJCisJOzsgdW5oYW5kbGVkLiBTVEFMTAorCTtFUDBDUyB8PSBibUVQU1RBTEwKKwltb3YgZHB0ciwgRVAwQ1MKKwltb3Z4IGEsIEBkcHRyCisJb3JsIGEsIEVQMFNUQUxMYml0CisJbW92eCBAZHB0ciwgYQorCXNqbXAgc2V0dXBfZG9uZQorCQorc2V0dXBfZG9uZToJCisJcG9wIGFjYworCXBvcCBkcGgxCisJcG9wIGRwbDEKKwlwb3AgZHBoCisJcG9wIGRwbAorCXBvcCBkcHMKKwlyZXRpCisKKzs7OyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQorc2V0X2JhdWQ6CQkJOyBiYXVkIGluZGV4IGluIHIzCisJOzsgdmVyaWZ5IGEgPCAxMAorCW1vdiBhLCByMworCWpiIEFDQy43LCBzZXRfYmF1ZF9fYmFkYmF1ZAorCWNsciBjCisJc3ViYiBhLCAjMTAKKwlqbmMgc2V0X2JhdWRfX2JhZGJhdWQKKwltb3YgYSwgcjMKKwlybCBhCQkJOyBhID0gaW5kZXgqMgorCWFkZCBhLCAjTE9XKGJhdWRfdGFibGUpCisJbW92IGRwbCwgYQorCW1vdiBhLCAjSElHSChiYXVkX3RhYmxlKQorCWFkZGMgYSwgIzAKKwltb3YgZHBoLCBhCisJOzsgVE9ETzogc2h1dCBkb3duIHhtaXQvcmVjZWl2ZQorCTs7IFRPRE86IHdhaXQgZm9yIGN1cnJlbnQgeG1pdCBjaGFyIHRvIGxlYXZlCisJOzsgVE9ETzogc2h1dCBkb3duIHRpbWVyIHRvIGF2b2lkIHBhcnRpYWwtY2hhciBnbGl0Y2gKKwltb3Z4IGEsQGRwdHIJCTsgQkFVRF9ISUdICisJbW92IFJDQVAySCwgYQorCW1vdiBUSDIsIGEKKwlpbmMgZHB0cgorCW1vdnggYSxAZHB0cgkJOyBCQVVEX0xPVworCW1vdiBSQ0FQMkwsIGEKKwltb3YgVEwyLCBhCisJOzsgVE9ETzogcmVzdGFydCB4bWl0L3JlY2VpdmUKKwk7OyBUT0RPOiByZWVuYWJsZSBpbnRlcnJ1cHRzLCByZXN1bWUgdHggaWYgcGVuZGluZworCWNsciBjCQkJOyBjPTA6IHN1Y2Nlc3MKKwlyZXQKK3NldF9iYXVkX19iYWRiYXVkOgorCXNldGIgYwkJCTsgYz0xOiBmYWlsdXJlCisJcmV0CisJCis7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2NvbnRyb2xfcGluczoKKwljam5lIHIxLCAjMHg0MSwgY29udHJvbF9waW5zX2luCitjb250cm9sX3BpbnNfb3V0OgorCQk7VE9ETyBCS1BUIGlzIERUUgorCW1vdiBhLCByMyA7IHdWYWx1ZVswXSBob2xkcyBuZXcgYml0czoJYjcgaXMgbmV3IFJUUworCXhybCBhLCAjMHhmZgkJOyAxIG1lYW5zIGFjdGl2ZSwgMFYsICsxMlYgPworCWFubCBhLCAjMHg4MAorCW1vdiByMywgYQorCW1vdiBkcHRyLCBPVVRDCisJbW92eCBhLCBAZHB0cgkJOyBvbmx5IGNoYW5nZSBiaXQgNyAKKwlhbmwgYSwgIzB4N0YJCTsgfjB4ODQKKwlvcmwgYSwgcjMKKwltb3Z4IEBkcHRyLCBhCQk7IG90aGVyIHBpbnMgYXJlIGlucHV0cywgYml0cyBpZ25vcmVkCisJbGptcCBzZXR1cF9kb25lX2FjaworY29udHJvbF9waW5zX2luOgorCW1vdiBkcHRyLCBQSU5TQworCW1vdnggYSwgQGRwdHIKKwl4cmwgYSwgIzB4ZmYKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorCis7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQorSVNSX0VwMmluOgorCXB1c2ggZHBzCisJcHVzaCBkcGwKKwlwdXNoIGRwaAorCXB1c2ggZHBsMQorCXB1c2ggZHBoMQorCXB1c2ggYWNjCisJbW92IGEsRVhJRgorCWNsciBhY2MuNAorCW1vdiBFWElGLGEJCTsgY2xlYXIgSU5UMiBmaXJzdAorCW1vdiBkcHRyLCBJTjA3SVJRCTsgY2xlYXIgVVNCIGludAorCW1vdiBhLCMwNGgKKwltb3Z4IEBkcHRyLGEKKworCW1vdiBhLCAjMHgyMCAgICAgICAgICAgICA7IFR1cm4gb2ZmIHRoZSBncmVlbiBMRUQKKyAgICAgICAgbW92IGRwdHIsT0VBCisgICAgICAgIG1vdnggQGRwdHIsIGEKKworCisJOzsgZG8gc3R1ZmYKKwlsY2FsbCBzdGFydF9pbgorCisJbW92IGEsICMweDIwICAgICAgICAgICAgIDsgVHVybiBvZmYgdGhlIGdyZWVuIExFRAorICAgICAgICBtb3YgZHB0cixPRUEKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCisKKwkKKwlwb3AgYWNjCisJcG9wIGRwaDEKKwlwb3AgZHBsMQorCXBvcCBkcGgKKwlwb3AgZHBsCisJcG9wIGRwcworCXJldGkKKworSVNSX0VwMm91dDoKKwlwdXNoIGRwcworCXB1c2ggZHBsCisJcHVzaCBkcGgKKwlwdXNoIGRwbDEKKwlwdXNoIGRwaDEKKwlwdXNoIGFjYworCisgICAgICAgIG1vdiBhLCAjMHgxMCAgICAgICAgICAgICA7IFR1cm4gdGhlIGdyZWVuIExFRAorICAgICAgICBtb3YgZHB0cixPRUEKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCisKKworCW1vdiBhLEVYSUYKKwljbHIgYWNjLjQKKwltb3YgRVhJRixhCQk7IGNsZWFyIElOVDIgZmlyc3QKKwltb3YgZHB0ciwgT1VUMDdJUlEJOyBjbGVhciBVU0IgaW50CisJbW92IGEsIzA0aAorCW1vdnggQGRwdHIsYQorCisJOzsgZG8gc3R1ZmYKKworCTs7IGNvcHkgZGF0YSBpbnRvIGJ1ZmZlci4gZm9yIG5vdywgYXNzdW1lIHdlIHdpbGwgaGF2ZSBlbm91Z2ggc3BhY2UKKwltb3YgZHB0ciwgT1VUMkJDCTsgZ2V0IGJ5dGUgY291bnQKKwltb3Z4IGEsQGRwdHIKKwltb3YgcjEsIGEKKwljbHIgYQorCW1vdiBkcHMsIGEKKwltb3YgZHB0ciwgT1VUMkJVRgk7IGxvYWQgRFBUUjAgd2l0aCBzb3VyY2UKKwltb3YgZHBoMSwgI0hJR0godHhfcmluZykJOyBsb2FkIERQVFIxIHdpdGggdGFyZ2V0CisJbW92IGRwbDEsIHR4X3JpbmdfaW4KK09VVF9sb29wOgorCW1vdnggYSxAZHB0cgkJOyByZWFkCisJaW5jIGRwcwkJCTsgc3dpdGNoIHRvIERQVFIxOiB0YXJnZXQKKwlpbmMgZHBsMQkJOyB0YXJnZXQgPSB0eF9yaW5nX2luKzEKKwltb3Z4IEBkcHRyLGEJCTsgc3RvcmUKKwltb3YgYSxkcGwxCisJY2puZSBhLCB0eF9yaW5nX291dCwgT1VUX25vX292ZXJmbG93CisJc2ptcCBPVVRfb3ZlcmZsb3cKK09VVF9ub19vdmVyZmxvdzoJCisJaW5jIHR4X3JpbmdfaW4JCTsgdHhfcmluZ19pbisrCisJaW5jIGRwcwkJCTsgc3dpdGNoIHRvIERQVFIwOiBzb3VyY2UKKwlpbmMgZHB0cgorCWRqbnogcjEsIE9VVF9sb29wCisJc2ptcCBPVVRfZG9uZQorT1VUX292ZXJmbG93OgorCTs7IHNpZ25hbCBvdmVyZmxvdworCTs7IGZhbGwgdGhyb3VnaAorT1VUX2RvbmU6CQorCTs7IGFjaworCW1vdiBkcHRyLE9VVDJCQworCW1vdnggQGRwdHIsYQorCisJOzsgc3RhcnQgdHgKKwlhY2FsbCBtYXliZV9zdGFydF90eAorCTthY2FsbCBkdW1wX3N0YXQKKworICAgICAgICBtb3YgYSwgIzB4MjAgICAgICAgICAgICAgOyBUdXJuIG9mZiB0aGUgZ3JlZW4gTEVECisgICAgICAgIG1vdiBkcHRyLE9FQQorICAgICAgICBtb3Z4IEBkcHRyLCBhCisJCisJcG9wIGFjYworCXBvcCBkcGgxCisJcG9wIGRwbDEKKwlwb3AgZHBoCisJcG9wIGRwbAorCXBvcCBkcHMKKwlyZXRpCisKK2R1bXBfc3RhdDoKKwk7OyBmaWxsIGluIEVQNGluIHdpdGggYSBkZWJ1Z2dpbmcgbWVzc2FnZToKKwk7OyAgIHR4X3JpbmdfaW4sIHR4X3Jpbmdfb3V0LCByeF9yaW5nX2luLCByeF9yaW5nX291dAorCTs7ICAgdHhfYWN0aXZlCisJOzsgICB0eF9yaW5nWzAuLjE1XQorCTs7ICAgMHhmYworCTs7ICAgcnhfcmluZ1swLi4xNV0KKwljbHIgYQorCW1vdiBkcHMsIGEKKwkKKwltb3YgZHB0ciwgSU40Q1MKKwltb3Z4IGEsIEBkcHRyCisJamIgYWNjLjEsIGR1bXBfc3RhdF9fZG9uZTsgYnVzeTogY2Fubm90IGR1bXAsIG9sZCBvbmUgc3RpbGwgcGVuZGluZworCW1vdiBkcHRyLCBJTjRCVUYKKwkKKwltb3YgYSwgdHhfcmluZ19pbgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdiBhLCB0eF9yaW5nX291dAorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCisJbW92IGEsIHJ4X3JpbmdfaW4KKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwltb3YgYSwgcnhfcmluZ19vdXQKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwkKKwljbHIgYQorCWpuYiBUWF9SVU5OSU5HLCBkdW1wX3N0YXRfX25vX3R4X3J1bm5pbmcKKwlpbmMgYQorZHVtcF9zdGF0X19ub190eF9ydW5uaW5nOgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCTs7IHR4X3JpbmdbMC4uMTVdCisJaW5jIGRwcworCW1vdiBkcHRyLCAjdHhfcmluZwk7IERQVFIxOiBzb3VyY2UKKwltb3YgcjEsICMxNgorZHVtcF9zdGF0X190eF9yaW5nX2xvb3A6CisJbW92eCBhLCBAZHB0cgorCWluYyBkcHRyCisJaW5jIGRwcworCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCWluYyBkcHMKKwlkam56IHIxLCBkdW1wX3N0YXRfX3R4X3JpbmdfbG9vcAorCWluYyBkcHMKKwkKKwltb3YgYSwgIzB4ZmMKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwkKKwk7OyByeF9yaW5nWzAuLjE1XQorCWluYyBkcHMKKwltb3YgZHB0ciwgI3J4X3JpbmcJOyBEUFRSMTogc291cmNlCisJbW92IHIxLCAjMTYKK2R1bXBfc3RhdF9fcnhfcmluZ19sb29wOgorCW1vdnggYSwgQGRwdHIKKwlpbmMgZHB0cgorCWluYyBkcHMKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJZGpueiByMSwgZHVtcF9zdGF0X19yeF9yaW5nX2xvb3AKKwkKKwk7OyBub3cgc2VuZCBpdAorCWNsciBhCisJbW92IGRwcywgYQorCW1vdiBkcHRyLCBJTjRCQworCW1vdiBhLCAjMzgKKwltb3Z4IEBkcHRyLCBhCitkdW1wX3N0YXRfX2RvbmU6CQorCXJldAorCQkKKzs7OyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkKK21heWJlX3N0YXJ0X3R4OgorCTs7IG1ha2Ugc3VyZSB0aGUgdHggcHJvY2VzcyBpcyBydW5uaW5nLgorCWpiIFRYX1JVTk5JTkcsIHN0YXJ0X3R4X2RvbmUKK3N0YXJ0X3R4OgorCTs7IGlzIHRoZXJlIHdvcmsgdG8gYmUgZG9uZT8KKwltb3YgYSwgdHhfcmluZ19pbgorCWNqbmUgYSx0eF9yaW5nX291dCwgc3RhcnRfdHhfX3dvcmsKKwlyZXQJCQk7IG5vIHdvcmsKK3N0YXJ0X3R4X193b3JrOgkKKwk7OyB0eCB3YXMgbm90IHJ1bm5pbmcuIHNlbmQgdGhlIGZpcnN0IGNoYXJhY3Rlciwgc2V0dXAgdGhlIFRJIGludAorCWluYyB0eF9yaW5nX291dAkJOyBbKyt0eF9yaW5nX291dF0KKwltb3YgZHBoLCAjSElHSCh0eF9yaW5nKQorCW1vdiBkcGwsIHR4X3Jpbmdfb3V0CisJbW92eCBhLCBAZHB0cgorCW1vdiBzYnVmLCBhCisJc2V0YiBUWF9SVU5OSU5HCitzdGFydF90eF9kb25lOgorCTs7IGNhbiB3ZSB1bnRocm90dGxlIHRoZSBob3N0IHR4IHByb2Nlc3M/CisJOzsgIHN0ZXAgMTogZG8gd2UgY2FyZT8KKwltb3YgYSwgIzAKKwljam5lIGEsIHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCBzdGFydF90eF9fbWF5YmVfdW50aHJvdHRsZV90eAorCTs7IG5vcGUKK3N0YXJ0X3R4X3JlYWxseV9kb25lOgorCXJldAorc3RhcnRfdHhfX21heWJlX3VudGhyb3R0bGVfdHg6CisJOzsgIHN0ZXAgMjogaXMgdGhlcmUgbm93IHJvb20/CisJbW92IGEsIHR4X3Jpbmdfb3V0CisJc2V0YiBjCisJc3ViYiBhLCB0eF9yaW5nX2luCisJOzsgYSBpcyBub3cgd3JpdGVfcm9vbS4gSWYgdGhyZXNoID49IGEsIHdlIGNhbiB1bnRocm90dGxlCisJY2xyIGMKKwlzdWJiIGEsIHR4X3VudGhyb3R0bGVfdGhyZXNob2xkCisJamMgc3RhcnRfdHhfcmVhbGx5X2RvbmUJOyBub3BlCisJOzsgeWVzLCB3ZSBjYW4gdW50aHJvdHRsZS4gcmVtb3ZlIHRoZSB0aHJlc2hvbGQgYW5kIG1hcmsgYSByZXF1ZXN0CisJbW92IHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCAjMAorCXNldGIgRE9fVFhfVU5USFJPVFRMRQorCTs7IHByb2QgcngsIHdoaWNoIHdpbGwgYWN0dWFsbHkgc2VuZCB0aGUgbWVzc2FnZSB3aGVuIGluMiBiZWNvbWVzIGZyZWUKKwlsam1wIHN0YXJ0X2luCisJCisKK3NlcmlhbF9pbnQ6CisJcHVzaCBkcHMKKwlwdXNoIGRwbAorCXB1c2ggZHBoCisJcHVzaCBkcGwxCisJcHVzaCBkcGgxCisJcHVzaCBhY2MKKwlqbmIgVEksIHNlcmlhbF9pbnRfX25vdF90eAorCTs7IHR4IGZpbmlzaGVkLiBzZW5kIGFub3RoZXIgY2hhcmFjdGVyIGlmIHdlIGhhdmUgb25lCisJY2xyIFRJCQkJOyBjbGVhciBpbnQKKwljbHIgVFhfUlVOTklORworCWxjYWxsIHN0YXJ0X3R4CitzZXJpYWxfaW50X19ub3RfdHg6CisJam5iIFJJLCBzZXJpYWxfaW50X19ub3RfcngKKwlsY2FsbCBnZXRfcnhfY2hhcgorCWNsciBSSQkJCTsgY2xlYXIgaW50CitzZXJpYWxfaW50X19ub3Rfcng6CQorCTs7IHJldHVybgorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCitnZXRfcnhfY2hhcjoKKwltb3YgZHBoLCAjSElHSChyeF9yaW5nKQorCW1vdiBkcGwsIHJ4X3JpbmdfaW4KKwlpbmMgZHBsCQkJOyB0YXJnZXQgPSByeF9yaW5nX2luKzEKKwltb3YgYSwgc2J1ZgorCW1vdnggQGRwdHIsIGEKKwk7OyBjaGVjayBmb3Igb3ZlcmZsb3cgYmVmb3JlIGluY3JlbWVudGluZyByeF9yaW5nX2luCisJbW92IGEsIGRwbAorCWNqbmUgYSwgcnhfcmluZ19vdXQsIGdldF9yeF9jaGFyX19ub19vdmVyZmxvdworCTs7IHNpZ25hbCBvdmVyZmxvdworCXJldAorZ2V0X3J4X2NoYXJfX25vX292ZXJmbG93OgkKKwlpbmMgcnhfcmluZ19pbgorCTs7IGtpY2sgb2ZmIFVTQiBJTnBpcGUKKwlhY2FsbCBzdGFydF9pbgorCXJldAorCitzdGFydF9pbjoKKwk7OyBjaGVjayBpZiB0aGUgaW5waXBlIGlzIGFscmVhZHkgcnVubmluZy4KKwltb3YgIGEsIzB4MTAKKwltb3YgZHB0ciwgT0VBCisJbW92eCBAZHB0cixhCisKKwltb3YgZHB0ciwgSU4yQ1MKKwltb3Z4IGEsIEBkcHRyCisJamIgYWNjLjEsIHN0YXJ0X2luX19kb25lOyBpbnQgd2lsbCBoYW5kbGUgaXQKKwlqYiBET19UWF9VTlRIUk9UVExFLCBzdGFydF9pbl9fZG9fdHhfdW50aHJvdHRsZQorCTs7IHNlZSBpZiB0aGVyZSBpcyBhbnkgd29yayB0byBkby4gYSBzZXJpYWwgaW50ZXJydXB0IG1pZ2h0IG9jY3VyCisJOzsgZHVyaW5nIHRoaXMgc2VxdWVuY2U/CisJbW92IGEsIHJ4X3JpbmdfaW4KKwljam5lIGEsIHJ4X3Jpbmdfb3V0LCBzdGFydF9pbl9faGF2ZV93b3JrCisJcmV0CQkJOyBub3BlCitzdGFydF9pbl9faGF2ZV93b3JrOgkKKwk7OyBub3cgY29weSBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUgaW50byB0aGUgcGlwZS4gNjMgYnl0ZXMgbWF4LgorCWNsciBhCisJbW92IGRwcywgYQorCW1vdiBkcGgsICNISUdIKHJ4X3JpbmcpCTsgbG9hZCBEUFRSMCB3aXRoIHNvdXJjZQorCWluYyBkcHMKKwltb3YgZHB0ciwgSU4yQlVGCTsgbG9hZCBEUFRSMSB3aXRoIHRhcmdldAorCW1vdnggQGRwdHIsIGEJCTsgaW5bMF0gc2lnbmFscyB0aGF0IHJlc3Qgb2YgSU4gaXMgcnggZGF0YQorCWluYyBkcHRyCisJaW5jIGRwcworCTs7IGxvb3AgdW50aWwgd2UgcnVuIG91dCBvZiBkYXRhLCBvciB3ZSBoYXZlIGNvcGllZCA2NCBieXRlcworCW1vdiByMSwgIzEJCTsgSU5idWYgc2l6ZSBjb3VudGVyCitzdGFydF9pbl9fbG9vcDoKKwltb3YgYSwgcnhfcmluZ19pbgorCWNqbmUgYSwgcnhfcmluZ19vdXQsIHN0YXJ0X2lubG9jYWxfaXJxX2VuYWJsZWxsX2NvcHlpbmcKKwlzam1wIHN0YXJ0X2luX19raWNrCitzdGFydF9pbmxvY2FsX2lycV9lbmFibGVsbF9jb3B5aW5nOgorCWluYyByeF9yaW5nX291dAorCW1vdiBkcGwsIHJ4X3Jpbmdfb3V0CisJbW92eCBhLCBAZHB0cgorCWluYyBkcHMKKwltb3Z4IEBkcHRyLCBhCQk7IHdyaXRlIGludG8gSU4gYnVmZmVyCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJaW5jIHIxCisJY2puZSByMSwgIzY0LCBzdGFydF9pbl9fbG9vcDsgbG9vcAorc3RhcnRfaW5fX2tpY2s6CisJOzsgZWl0aGVyIHdlIHJhbiBvdXQgb2YgZGF0YSwgb3Igd2UgY29waWVkIDY0IGJ5dGVzLiByMSBoYXMgYnl0ZSBjb3VudAorCTs7IGtpY2sgb2ZmIElOCisJbW92IGEsICMweDEwICAgICAgICAgICAgIDsgVHVybiB0aGUgZ3JlZW4gTEVECisgICAgICAgIG1vdiBkcHRyLE9FQQorICAgICAgICBtb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIElOMkJDCisJbW92IGEsIHIxCisJanogc3RhcnRfaW5fX2RvbmUKKwltb3Z4IEBkcHRyLCBhCisJOzsgZG9uZQorc3RhcnRfaW5fX2RvbmU6CisJO2FjYWxsIGR1bXBfc3RhdAorCXJldAorc3RhcnRfaW5fX2RvX3R4X3VudGhyb3R0bGU6CisJOzsgc3BlY2lhbCBzZXF1ZW5jZTogc2VuZCBhIHR4IHVudGhyb3R0bGUgbWVzc2FnZQorCWNsciBET19UWF9VTlRIUk9UVExFCisJY2xyIGEKKwltb3YgZHBzLCBhCisJbW92IGRwdHIsIElOMkJVRgorCW1vdiBhLCAjMQorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdiBhLCAjMgorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgSU4yQkMKKwltb3Z4IEBkcHRyLCBhCisJcmV0CisJCitwdXRjaGFyOgorCWNsciBUSQorCW1vdiBTQlVGLCBhCitwdXRjaGFyX3dhaXQ6CisJam5iIFRJLCBwdXRjaGFyX3dhaXQKKwljbHIgVEkKKwlyZXQKKworCQorYmF1ZF90YWJsZToJCQk7IGJhdWRfaGlnaCwgdGhlbiBiYXVkX2xvdworCTs7IGJhdWRbMF06IDExMAorCS5ieXRlIEJBVURfSElHSCgxMTApCisJLmJ5dGUgQkFVRF9MT1coMTEwKQorCTs7IGJhdWRbMV06IDMwMAorCS5ieXRlIEJBVURfSElHSCgzMDApCisJLmJ5dGUgQkFVRF9MT1coMzAwKQorCTs7IGJhdWRbMl06IDEyMDAKKwkuYnl0ZSBCQVVEX0hJR0goMTIwMCkKKwkuYnl0ZSBCQVVEX0xPVygxMjAwKQorCTs7IGJhdWRbM106IDI0MDAKKwkuYnl0ZSBCQVVEX0hJR0goMjQwMCkKKwkuYnl0ZSBCQVVEX0xPVygyNDAwKQorCTs7IGJhdWRbNF06IDQ4MDAKKwkuYnl0ZSBCQVVEX0hJR0goNDgwMCkKKwkuYnl0ZSBCQVVEX0xPVyg0ODAwKQorCTs7IGJhdWRbNV06IDk2MDAKKwkuYnl0ZSBCQVVEX0hJR0goOTYwMCkKKwkuYnl0ZSBCQVVEX0xPVyg5NjAwKQorCTs7IGJhdWRbNl06IDE5MjAwCisJLmJ5dGUgQkFVRF9ISUdIKDE5MjAwKQorCS5ieXRlIEJBVURfTE9XKDE5MjAwKQorCTs7IGJhdWRbN106IDM4NDAwCisJLmJ5dGUgQkFVRF9ISUdIKDM4NDAwKQorCS5ieXRlIEJBVURfTE9XKDM4NDAwKQorCTs7IGJhdWRbOF06IDU3NjAwCisJLmJ5dGUgQkFVRF9ISUdIKDU3NjAwKQorCS5ieXRlIEJBVURfTE9XKDU3NjAwKQorCTs7IGJhdWRbOV06IDExNTIwMAorCS5ieXRlIEJBVURfSElHSCgxMTUyMDApCisJLmJ5dGUgQkFVRF9MT1coMTE1MjAwKQorCitkZXNjX2RldmljZToKKwkuYnl0ZSAweDEyLCAweDAxLCAweDAwLCAweDAxLCAweGZmLCAweGZmLCAweGZmLCAweDQwCisJLmJ5dGUgMHhjZCwgMHgwNiwgMHgwNCwgMHgwMSwgMHg4OSwgMHhhYiwgMSwgMiwgMywgMHgwMQorOzs7IFRoZSAicmVhbCIgZGV2aWNlIGlkLCB3aGljaCBtdXN0IG1hdGNoIHRoZSBob3N0IGRyaXZlciwgaXMgdGhhdAorOzs7ICIweGNkIDB4MDYgMHgwNCAweDAxIiBzZXF1ZW5jZSwgd2hpY2ggaXMgMHgwNmNkLCAweDAxMDQKKwkKK2Rlc2NfY29uZmlnMToKKwkuYnl0ZSAweDA5LCAweDAyLCAweDIwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDMyCisJLmJ5dGUgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMAorCS5ieXRlIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDMsIDB4NDAsIDB4MDAsIDB4MDEKKwkuYnl0ZSAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwCisKK2Rlc2Nfc3RyaW5nczoKKwkud29yZCBzdHJpbmdfbGFuZ2lkcywgc3RyaW5nX21mZywgc3RyaW5nX3Byb2R1Y3QsIHN0cmluZ19zZXJpYWwKK2Rlc2Nfc3RyaW5nc19lbmQ6CisKK3N0cmluZ19sYW5naWRzOgkuYnl0ZSBzdHJpbmdfbGFuZ2lkc19lbmQtc3RyaW5nX2xhbmdpZHMKKwkuYnl0ZSAzCisJLndvcmQgMAorc3RyaW5nX2xhbmdpZHNfZW5kOgorCisJOzsgc2lnaC4gVGhlc2Ugc3RyaW5ncyBhcmUgVW5pY29kZSwgbWVhbmluZyBVVEYxNj8gMiBieXRlcyBlYWNoLiBOb3cKKwk7OyAqdGhhdCogaXMgYSBwYWluIGluIHRoZSBhc3MgdG8gZW5jb2RlLiBBbmQgdGhleSBhcmUgbGl0dGxlLWVuZGlhbgorCTs7IHRvby4gVXNlIHRoaXMgcGVybCBzbmlwcGV0IHRvIGdldCB0aGUgYnl0ZWNvZGVzOgorCS8qIHdoaWxlICg8PikgeworCSAgICBAYyA9IHNwbGl0KC8vKTsKKwkgICAgZm9yZWFjaCAkYyAoQGMpIHsKKwkgICAgIHByaW50ZigiMHglMDJ4LCAweDAwLCAiLCBvcmQoJGMpKTsKKwkgICAgfQorCSAgIH0KKwkqLworCitzdHJpbmdfbWZnOgkuYnl0ZSBzdHJpbmdfbWZnX2VuZC1zdHJpbmdfbWZnCisJLmJ5dGUgMworOwkuYnl0ZSAiQUNNRSB1c2Igd2lkZ2V0cyIKKwkuYnl0ZSAweDQxLCAweDAwLCAweDQzLCAweDAwLCAweDRkLCAweDAwLCAweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDc1LCAweDAwLCAweDczLCAweDAwLCAweDYyLCAweDAwLCAweDIwLCAweDAwLCAweDc3LCAweDAwLCAweDY5LCAweDAwLCAweDY0LCAweDAwLCAweDY3LCAweDAwLCAweDY1LCAweDAwLCAweDc0LCAweDAwLCAweDczLCAweDAwCitzdHJpbmdfbWZnX2VuZDoKKwkKK3N0cmluZ19wcm9kdWN0OgkuYnl0ZSBzdHJpbmdfcHJvZHVjdF9lbmQtc3RyaW5nX3Byb2R1Y3QKKwkuYnl0ZSAzCis7CS5ieXRlICJBQ01FIFVTQiBzZXJpYWwgd2lkZ2V0IgorCS5ieXRlIDB4NDEsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGQsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjcsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzQsIDB4MDAKK3N0cmluZ19wcm9kdWN0X2VuZDoKKwkKK3N0cmluZ19zZXJpYWw6CS5ieXRlIHN0cmluZ19zZXJpYWxfZW5kLXN0cmluZ19zZXJpYWwKKwkuYnl0ZSAzCis7CS5ieXRlICI0NyIKKwkuYnl0ZSAweDM0LCAweDAwLCAweDM3LCAweDAwCitzdHJpbmdfc2VyaWFsX2VuZDoKKwkJCis7OzsgcmluZyBidWZmZXIgbWVtb3J5CisJOzsgdHhfcmluZ19pbisxIGlzIHdoZXJlIHRoZSBuZXh0IGlucHV0IGJ5dGUgd2lsbCBnbworCTs7IFt0eF9yaW5nX291dF0gaGFzIGJlZW4gc2VudAorCTs7IGlmIHR4X3JpbmdfaW4gPT0gdHhfcmluZ19vdXQsIHRoZXJlcyBubyB3b3JrIHRvIGRvCisJOzsgdGhlcmUgYXJlICh0eF9yaW5nX2luIC0gdHhfcmluZ19vdXQpIGNoYXJzIHRvIGJlIHdyaXR0ZW4KKwk7OyBkb250IGxldCBfaW4gbGFwIF9vdXQKKwk7OyAgIGNhbm5vdCBpbmMgaWYgdHhfcmluZ19pbisxID09IHR4X3Jpbmdfb3V0CisJOzsgIHdyaXRlIFt0eF9yaW5nX2luKzFdIHRoZW4gdHhfcmluZ19pbisrCisJOzsgICBpZiAodHhfcmluZ19pbisxID09IHR4X3Jpbmdfb3V0KSwgb3ZlcmZsb3cKKwk7OyAgIGVsc2UgdHhfcmluZ19pbisrCisJOzsgIHJlYWQvc2VuZCBbdHhfcmluZ19vdXQrMV0sIHRoZW4gdHhfcmluZ19vdXQrKworCisJOzsgcnhfcmluZ19pbiB3b3JrcyB0aGUgc2FtZSB3YXkKKwkKKwkub3JnIDB4MTAwMAordHhfcmluZzoKKwkuc2tpcCAweDEwMAkJOyAyNTYgYnl0ZXMKK3J4X3Jpbmc6CisJLnNraXAgMHgxMDAJCTsgMjU2IGJ5dGVzCisJCisJCisJLkVORAorCQpkaWZmIC0tZ2l0IGEva2V5c3Bhbl9wZGEveGlyY29tX3Bncy5mdyBiL2tleXNwYW5fcGRhL3hpcmNvbV9wZ3MuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwZjQwNgotLS0gL2Rldi9udWxsCisrKyBiL2tleXNwYW5fcGRhL3hpcmNvbV9wZ3MuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEva29yZy9rMTIxMi5kc3AgYi9rb3JnL2sxMjEyLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTBiMjRjCi0tLSAvZGV2L251bGwKKysrIGIva29yZy9rMTIxMi5kc3AKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGJ0Zl91c2IuYmluIGIvbGJ0Zl91c2IuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTIzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9sYnRmX3VzYi5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGdzOGc3NS5mdyBiL2xnczhnNzUuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk3YzM3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xnczhnNzUuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvY2Y4MzgxLmJpbiBiL2xpYmVydGFzL2NmODM4MS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjNDU2YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL2NmODM4MS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvY2Y4MzgxX2hlbHBlci5iaW4gYi9saWJlcnRhcy9jZjgzODFfaGVscGVyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTNiOWU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXJ0YXMvY2Y4MzgxX2hlbHBlci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvY2Y4Mzg1LmJpbiBiL2xpYmVydGFzL2NmODM4NS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzYzAyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL2NmODM4NS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvY2Y4Mzg1X2hlbHBlci5iaW4gYi9saWJlcnRhcy9jZjgzODVfaGVscGVyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDljYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXJ0YXMvY2Y4Mzg1X2hlbHBlci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvZ3NwaTg2ODIuYmluIGIvbGliZXJ0YXMvZ3NwaTg2ODIuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMTk5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJlcnRhcy9nc3BpODY4Mi5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvZ3NwaTg2ODJfaGVscGVyLmJpbiBiL2xpYmVydGFzL2dzcGk4NjgyX2hlbHBlci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Y2ZiMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL2dzcGk4NjgyX2hlbHBlci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvZ3NwaTg2ODZfdjkuYmluIGIvbGliZXJ0YXMvZ3NwaTg2ODZfdjkuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZGMwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJlcnRhcy9nc3BpODY4Nl92OS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvZ3NwaTg2ODZfdjlfaGVscGVyLmJpbiBiL2xpYmVydGFzL2dzcGk4Njg2X3Y5X2hlbHBlci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Y2ZiMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL2dzcGk4Njg2X3Y5X2hlbHBlci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvZ3NwaTg2ODguYmluIGIvbGliZXJ0YXMvZ3NwaTg2ODguYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiN2JiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJlcnRhcy9nc3BpODY4OC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvZ3NwaTg2ODhfaGVscGVyLmJpbiBiL2xpYmVydGFzL2dzcGk4Njg4X2hlbHBlci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Y2ZiMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL2dzcGk4Njg4X2hlbHBlci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvbGJ0Zl9zZGlvLmJpbiBiL2xpYmVydGFzL2xidGZfc2Rpby5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzZDc2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL2xidGZfc2Rpby5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvc2Q4Mzg1LmJpbiBiL2xpYmVydGFzL3NkODM4NS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEyODM5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL3NkODM4NS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvc2Q4Mzg1X2hlbHBlci5iaW4gYi9saWJlcnRhcy9zZDgzODVfaGVscGVyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjY1OGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXJ0YXMvc2Q4Mzg1X2hlbHBlci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvc2Q4NjgyLmJpbiBiL2xpYmVydGFzL3NkODY4Mi5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEwZmI5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL3NkODY4Mi5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvc2Q4NjgyX2hlbHBlci5iaW4gYi9saWJlcnRhcy9zZDg2ODJfaGVscGVyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDZhZTBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliZXJ0YXMvc2Q4NjgyX2hlbHBlci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvc2Q4Njg2X3Y4LmJpbiBiL2xpYmVydGFzL3NkODY4Nl92OC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmN2JiYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL3NkODY4Nl92OC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvc2Q4Njg2X3Y4X2hlbHBlci5iaW4gYi9saWJlcnRhcy9zZDg2ODZfdjhfaGVscGVyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmRkZmJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliZXJ0YXMvc2Q4Njg2X3Y4X2hlbHBlci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvc2Q4Njg2X3Y5LmJpbiBiL2xpYmVydGFzL3NkODY4Nl92OS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3YzZmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL3NkODY4Nl92OS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvc2Q4Njg2X3Y5X2hlbHBlci5iaW4gYi9saWJlcnRhcy9zZDg2ODZfdjlfaGVscGVyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDUwZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXJ0YXMvc2Q4Njg2X3Y5X2hlbHBlci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvc2Q4Njg4LmJpbiBiL2xpYmVydGFzL3NkODY4OC5iaW4KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uNDZkODE3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL3NkODY4OC5iaW4KQEAgLTAsMCArMSBAQAorLi4vbXJ2bC9zZDg2ODguYmluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliZXJ0YXMvc2Q4Njg4X2hlbHBlci5iaW4gYi9saWJlcnRhcy9zZDg2ODhfaGVscGVyLmJpbgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi42NTE1YTJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliZXJ0YXMvc2Q4Njg4X2hlbHBlci5iaW4KQEAgLTAsMCArMSBAQAorLi4vbXJ2bC9zZDg2ODhfaGVscGVyLmJpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYmVydGFzL3VzYjgzODhfb2xwYy5iaW4gYi9saWJlcnRhcy91c2I4Mzg4X29scGMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMWI2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJlcnRhcy91c2I4Mzg4X29scGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmVydGFzL3VzYjgzODhfdjUuYmluIGIvbGliZXJ0YXMvdXNiODM4OF92NS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk4YjA4OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL3VzYjgzODhfdjUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmVydGFzL3VzYjgzODhfdjkuYmluIGIvbGliZXJ0YXMvdXNiODM4OF92OS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmMjhjYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL3VzYjgzODhfdjkuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmVydGFzL3VzYjg2ODIuYmluIGIvbGliZXJ0YXMvdXNiODY4Mi5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2OTEwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmVydGFzL3VzYjg2ODIuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21hdHJveC9nMjAwX3dhcnAuZncgYi9tYXRyb3gvZzIwMF93YXJwLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjN2Y3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tYXRyb3gvZzIwMF93YXJwLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21hdHJveC9nNDAwX3dhcnAuZncgYi9tYXRyb3gvZzQwMF93YXJwLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZjEwODgKLS0tIC9kZXYvbnVsbAorKysgYi9tYXRyb3gvZzQwMF93YXJwLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21veGEvbW94YS0xMjUwLmZ3IGIvbW94YS9tb3hhLTEyNTAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlN2VhNQotLS0gL2Rldi9udWxsCisrKyBiL21veGEvbW94YS0xMjUwLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21veGEvbW94YS0xMjUxLmZ3IGIvbW94YS9tb3hhLTEyNTEuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0MDY1MAotLS0gL2Rldi9udWxsCisrKyBiL21veGEvbW94YS0xMjUxLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21veGEvbW94YS0xNDEwLmZ3IGIvbW94YS9tb3hhLTE0MTAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3MGJlZgotLS0gL2Rldi9udWxsCisrKyBiL21veGEvbW94YS0xNDEwLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21veGEvbW94YS0xNDUwLmZ3IGIvbW94YS9tb3hhLTE0NTAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhODM3NAotLS0gL2Rldi9udWxsCisrKyBiL21veGEvbW94YS0xNDUwLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21veGEvbW94YS0xNDUxLmZ3IGIvbW94YS9tb3hhLTE0NTEuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxNjRkMwotLS0gL2Rldi9udWxsCisrKyBiL21veGEvbW94YS0xNDUxLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21veGEvbW94YS0xNjEzLmZ3IGIvbW94YS9tb3hhLTE2MTMuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2NjI2OQotLS0gL2Rldi9udWxsCisrKyBiL21veGEvbW94YS0xNjEzLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21veGEvbW94YS0xNjE4LmZ3IGIvbW94YS9tb3hhLTE2MTguZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODllZGE4NwotLS0gL2Rldi9udWxsCisrKyBiL21veGEvbW94YS0xNjE4LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21veGEvbW94YS0xNjUzLmZ3IGIvbW94YS9tb3hhLTE2NTMuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYxOTY4OQotLS0gL2Rldi9udWxsCisrKyBiL21veGEvbW94YS0xNjUzLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21veGEvbW94YS0xNjU4LmZ3IGIvbW94YS9tb3hhLTE2NTguZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjZmI0OAotLS0gL2Rldi9udWxsCisrKyBiL21veGEvbW94YS0xNjU4LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ydmwvcGNpZTg4OTdfdWFwc3RhLmJpbiBiL21ydmwvcGNpZTg4OTdfdWFwc3RhLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NThjMTAwCi0tLSAvZGV2L251bGwKKysrIGIvbXJ2bC9wY2llODg5N191YXBzdGEuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ydmwvc2Q4Njg4LmJpbiBiL21ydmwvc2Q4Njg4LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTllMzJhCi0tLSAvZGV2L251bGwKKysrIGIvbXJ2bC9zZDg2ODguYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ydmwvc2Q4Njg4X2hlbHBlci5iaW4gYi9tcnZsL3NkODY4OF9oZWxwZXIuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NmFlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9tcnZsL3NkODY4OF9oZWxwZXIuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ydmwvc2Q4Nzg3X3VhcHN0YS5iaW4gYi9tcnZsL3NkODc4N191YXBzdGEuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZjRlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tcnZsL3NkODc4N191YXBzdGEuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ydmwvc2Q4Nzk3X3VhcHN0YS5iaW4gYi9tcnZsL3NkODc5N191YXBzdGEuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNmY5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tcnZsL3NkODc5N191YXBzdGEuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ydmwvc2Q4ODk3X3VhcHN0YS5iaW4gYi9tcnZsL3NkODg5N191YXBzdGEuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNzMyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tcnZsL3NkODg5N191YXBzdGEuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ydmwvdXNiODc5N191YXBzdGEuYmluIGIvbXJ2bC91c2I4Nzk3X3VhcHN0YS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ3YzA3YwotLS0gL2Rldi9udWxsCisrKyBiL21ydmwvdXNiODc5N191YXBzdGEuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL210NzY1MC5iaW4gYi9tdDc2NTAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZGY5MDQKLS0tIC9kZXYvbnVsbAorKysgYi9tdDc2NTAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL210c19jZG1hLmZ3IGIvbXRzX2NkbWEuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0MTk3NgotLS0gL2Rldi9udWxsCisrKyBiL210c19jZG1hLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL210c19lZGdlLmZ3IGIvbXRzX2VkZ2UuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxNDQ2MgotLS0gL2Rldi9udWxsCisrKyBiL210c19lZGdlLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL210c19nc20uZncgYi9tdHNfZ3NtLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDE5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9tdHNfZ3NtLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL210c19tdDkyMzRtdS5mdyBiL210c19tdDkyMzRtdS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWMxMzYxCi0tLSAvZGV2L251bGwKKysrIGIvbXRzX210OTIzNG11LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL210c19tdDkyMzR6YmEuZncgYi9tdHNfbXQ5MjM0emJhLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzY2IxZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tdHNfbXQ5MjM0emJhLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL213bDhrL2ZtaW1hZ2VfODM2Ni5mdyBiL213bDhrL2ZtaW1hZ2VfODM2Ni5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZThlYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvbXdsOGsvZm1pbWFnZV84MzY2LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL213bDhrL2ZtaW1hZ2VfODM2Nl9hcC0xLmZ3IGIvbXdsOGsvZm1pbWFnZV84MzY2X2FwLTEuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkZGRiNwotLS0gL2Rldi9udWxsCisrKyBiL213bDhrL2ZtaW1hZ2VfODM2Nl9hcC0xLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL213bDhrL2ZtaW1hZ2VfODM2Nl9hcC0yLmZ3IGIvbXdsOGsvZm1pbWFnZV84MzY2X2FwLTIuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlYTJkOQotLS0gL2Rldi9udWxsCisrKyBiL213bDhrL2ZtaW1hZ2VfODM2Nl9hcC0yLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL213bDhrL2ZtaW1hZ2VfODM2Nl9hcC0zLmZ3IGIvbXdsOGsvZm1pbWFnZV84MzY2X2FwLTMuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhNTkyNgotLS0gL2Rldi9udWxsCisrKyBiL213bDhrL2ZtaW1hZ2VfODM2Nl9hcC0zLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL213bDhrL2ZtaW1hZ2VfODY4Ny5mdyBiL213bDhrL2ZtaW1hZ2VfODY4Ny5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGYxNmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbXdsOGsvZm1pbWFnZV84Njg3LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL213bDhrL2ZtaW1hZ2VfODc2NF9hcC0xLmZ3IGIvbXdsOGsvZm1pbWFnZV84NzY0X2FwLTEuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0YzhjZQotLS0gL2Rldi9udWxsCisrKyBiL213bDhrL2ZtaW1hZ2VfODc2NF9hcC0xLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL213bDhrL2hlbHBlcl84MzY2LmZ3IGIvbXdsOGsvaGVscGVyXzgzNjYuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3ZWZiNQotLS0gL2Rldi9udWxsCisrKyBiL213bDhrL2hlbHBlcl84MzY2LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL213bDhrL2hlbHBlcl84Njg3LmZ3IGIvbXdsOGsvaGVscGVyXzg2ODcuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAyMjFmYgotLS0gL2Rldi9udWxsCisrKyBiL213bDhrL2hlbHBlcl84Njg3LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL215cmkxMGdlX2V0aF96OGUuZGF0IGIvbXlyaTEwZ2VfZXRoX3o4ZS5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2YzNkYgotLS0gL2Rldi9udWxsCisrKyBiL215cmkxMGdlX2V0aF96OGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL215cmkxMGdlX2V0aHBfejhlLmRhdCBiL215cmkxMGdlX2V0aHBfejhlLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2Y0OWQzCi0tLSAvZGV2L251bGwKKysrIGIvbXlyaTEwZ2VfZXRocF96OGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL215cmkxMGdlX3Jzc19ldGhfejhlLmRhdCBiL215cmkxMGdlX3Jzc19ldGhfejhlLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjJhYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbXlyaTEwZ2VfcnNzX2V0aF96OGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL215cmkxMGdlX3Jzc19ldGhwX3o4ZS5kYXQgYi9teXJpMTBnZV9yc3NfZXRocF96OGUuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MTc2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9teXJpMTBnZV9yc3NfZXRocF96OGUuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL215cmljb20vbGFuYWkuYmluIGIvbXlyaWNvbS9sYW5haS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEwOTY0MgotLS0gL2Rldi9udWxsCisrKyBiL215cmljb20vbGFuYWkuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL29zaXRlY2gvWGlsaW54N09ELmJpbiBiL29zaXRlY2gvWGlsaW54N09ELmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmRlOTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvb3NpdGVjaC9YaWxpbng3T0QuYmluCkBAIC0wLDAgKzEgQEAKK/8EoDbz7P///9/7//P////vP//3/////+9//v/O/v7+/t693f3//c/3v3//fz/+v////7z//721f3+/v3//7/////v/9/f//////t7+/vrevf3t/f3P7+/v78ff39/f3/9+/v19be7+fPv0+8/b3///u3//f//3/56/O7+/f39/fm/f7/X2/fb17ev/7+/vfn9/b3///v7+/v7vv/////////////+8Hx/u/7y3/9//3+8749P/+///3////7q/Ldu9/dvf+vv/7/vb8//f/X/v+///vr8nuv773//2///v+9vz2Zo//6+///++Pze9lv///////6778/Pr////////9/q8rv6+/rt//f9/7/f7u9f3f//3///3vO39vZ19e/t7e/uv//79/f7+//////equb+Pv9//f///f8/768vr7v//1////z4zPxx8/P//////z9Pz4/P7///////r/jU/Pf39////v//vb+Pj4+///9////f+Pl7+//////3//6/P8svPjv///////fw+H56t/f//v///7/+z9+f3+v//////7uurr5/jf//e/3/u///7Ovr/8nf///f+//69rt59ff3/v+7//f/b+//37/v///7/La+5/Xn7+v+/7///kfr73/f3/////M83v7//f3////+v///z+/v/9e////f6///u+v77Vd3/f6/+//v79f/37////769vb29fXt7e3v7rv/9/v/////////32rdh/7lZ83Pz339v3+/36+vX/9f///f+f/s+OHP2f/z//8//t/uzs2f/5/3/7/Z/t7z1e/b39f//7//3//fO5/+f///1/n3/X//////////v//bL2+7+/9/////+f74ePv7/ff7//++/5//j4//f5////7jvty/u/9//v/9/7+u/o9P/f//////3vv0/z/37//////+v+7+7v9v9+/////8+/j+6uv7////v/+/Df7Kb//////7//zz/Pzz//v//////r/P+8+Pr////+//3mv6vnr7+/9///3vv97/7+/v//3////+8vf293X17e3t7+67////+/v/9////95r/n/+v7/////9/z/P/6//r//+////v/v83/L/////////P7/3z/+7+//////9u/S/9//3//////+/P//O/af////////77n/+//f//////74f+2u/P/////////u+/7+/9///////v/f97/+v+/////+v4/++v//+9////f+5/7/+7/7/7////9/b7vf3d9f//////r/9f9d//f///////9vP/3v7v/f/////v/97fX9/9///////+///+/v/9/////6///+/t/9////v//9q9vq7+f/3f//9/7//7+/t/9//////3vP29vb39e3t7e/uu///9/////f/////6n7+/z3///////6//6+vr/9f+//+/5/6/f/z//+3/////T//7+///3f///////r3fnf3fuf/////v//vv6//e///////2n//8/vv9/////+/f+s3Pv5//////9/6//9/vX/////9/b/+7/f//////////fv9f/7+/+f///39ue//v/evf//////e2Pvz9v377////9+/38/f/+////////241ef+//P//////7/tT3//rv///////vP///7///f////+v9f/3//v///////+6qu7+P339////f693+/v/+/f/////9769vb29/Xt7e3v7rv/v//////z/////mtm4//95///////P+//r/+vX/////+fe+Pv+P/v9/////8+tv/r/c9///////zr1t/w/+f3///9/7/P/v/7zn/7////3Pv///7////////+v0/7b/9vf//////8+/7//f//9/////4/z/+3/9/v/////7/Y8/v////////+f7+/R////////////fr/9/////////7vv3/H////////////uPv7/////////v+/9w/////////+///w+/v//////////Lu/z///////////3ur7+/////////3+v+/v9/////v////LW7b29vX17e3t7+6/f/////////////5K///////////9/r+vr///////////n/i7+//////////9P7/P////////////+PP7//////////+/Ow/3///////////5d////////////78/r///////////37j7//////////3/v3+L////7///////2vvz/////////f+5f5v///////////z59////////////7/P7/////////7/3Nr7+///////////v0/b+///////////8f+7//////////6/v6////////////7q+/v//////////7vv6///////////31v29vb19e3t7e/uu/37///////////e6v///////////f+/ra///////////9/6+/v//////////T+/3///////////vPm78///////////vw8n///////////8+v////////////+/71f////////////7+/v//////////b+/7////+///////9t//////////f/7v////////////5//+//f///////9/+u+////////////n//7//////////3/+77///////////6f//Pf/////////f/6u///9////////5/f6//3/////////f6//////////////9769vb29fXt7e3v7r3//////////////yv///////////39v/////////////+f+/////////////8/+//////////////7f////////////7//+/////////////v/////////////v//////////////f+/////////////+///v////v/////5/L87/////////9/ru/////////////3fv3////////////v//7///+/////v//+/v//////////3+/d/v////////////7+////////////r+//////////////uv7////////////v+v7///////////acvb29vX17e3t7+67/////////////93r/////3/////9v7/f////f///////3/v7////f///////P6////////////++e/P///////////+/v//////////////7///////////9/78v///////3/////vv3////////////v7////9/////////4/////7///////+////////////////7////////////7r3/////f/////////u/////////////v////////////v//+/////////////67/////////////9/r///////////9/7//////////////3vL29vb19e3t7e/uv//////////////f6////////////f69/////////////7/7/////////////z////////////////v////////v////v///////////////+/////////////+////////+///////z/////////////7///////+//////v/v+fn58/Pz8/P//v39/f38+3v7+/v/+8uZ29vX17e3t7++/X9fPx0WXj4+Oj//5//t7e/729vb3f7/v38/Pz5+fn5+f7/v///////////////wpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BoYW5mdy5iaW4gYi9waGFuZncuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NDk0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9waGFuZncuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3FsMjEwMF9mdy5iaW4gYi9xbDIxMDBfZncuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYjUxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9xbDIxMDBfZncuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3FsMjIwMF9mdy5iaW4gYi9xbDIyMDBfZncuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Y2M4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9xbDIyMDBfZncuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3FsMjMwMF9mdy5iaW4gYi9xbDIzMDBfZncuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWJlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9xbDIzMDBfZncuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3FsMjMyMl9mdy5iaW4gYi9xbDIzMjJfZncuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjUzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9xbDIzMjJfZncuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3FsMjQwMF9mdy5iaW4gYi9xbDI0MDBfZncuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMWViOTgKLS0tIC9kZXYvbnVsbAorKysgYi9xbDI0MDBfZncuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3FsMjUwMF9mdy5iaW4gYi9xbDI1MDBfZncuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOWYxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9xbDI1MDBfZncuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Fsb2dpYy8xMDQwLmJpbiBiL3Fsb2dpYy8xMDQwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTM2NmVhCi0tLSAvZGV2L251bGwKKysrIGIvcWxvZ2ljLzEwNDAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Fsb2dpYy8xMjE2MC5iaW4gYi9xbG9naWMvMTIxNjAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2YyNTUKLS0tIC9kZXYvbnVsbAorKysgYi9xbG9naWMvMTIxNjAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Fsb2dpYy8xMjgwLmJpbiBiL3Fsb2dpYy8xMjgwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQyOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvcWxvZ2ljLzEyODAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Fsb2dpYy9pc3AxMDAwLmJpbiBiL3Fsb2dpYy9pc3AxMDAwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjRjM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvcWxvZ2ljL2lzcDEwMDAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Fsb2dpYy9zZDcyMjAuZncgYi9xbG9naWMvc2Q3MjIwLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2EzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9xbG9naWMvc2Q3MjIwLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3IxMjgvcjEyOF9jY2UuYmluIGIvcjEyOC9yMTI4X2NjZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiMDBiNwotLS0gL2Rldi9udWxsCisrKyBiL3IxMjgvcjEyOF9jY2UuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9BUlVCQV9tZS5iaW4gYi9yYWRlb24vQVJVQkFfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MTdmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQVJVQkFfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9BUlVCQV9wZnAuYmluIGIvcmFkZW9uL0FSVUJBX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQxZGMyMAotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9BUlVCQV9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9BUlVCQV9ybGMuYmluIGIvcmFkZW9uL0FSVUJBX3JsYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4MmZlNgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9BUlVCQV9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CQVJUU19tYy5iaW4gYi9yYWRlb24vQkFSVFNfbWMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYTk1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQkFSVFNfbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CQVJUU19tZS5iaW4gYi9yYWRlb24vQkFSVFNfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOWNlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQkFSVFNfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CQVJUU19wZnAuYmluIGIvcmFkZW9uL0JBUlRTX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3N2YxNwotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9CQVJUU19wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CQVJUU19zbWMuYmluIGIvcmFkZW9uL0JBUlRTX3NtYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkMWUwOAotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9CQVJUU19zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CT05BSVJFX2NlLmJpbiBiL3JhZGVvbi9CT05BSVJFX2NlLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQwZmJmCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0JPTkFJUkVfY2UuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CT05BSVJFX21jLmJpbiBiL3JhZGVvbi9CT05BSVJFX21jLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2M3MDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0JPTkFJUkVfbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CT05BSVJFX21lLmJpbiBiL3JhZGVvbi9CT05BSVJFX21lLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWJmZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0JPTkFJUkVfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CT05BSVJFX21lYy5iaW4gYi9yYWRlb24vQk9OQUlSRV9tZWMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZmQ2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQk9OQUlSRV9tZWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CT05BSVJFX3BmcC5iaW4gYi9yYWRlb24vQk9OQUlSRV9wZnAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMmExYWYKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQk9OQUlSRV9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CT05BSVJFX3JsYy5iaW4gYi9yYWRlb24vQk9OQUlSRV9ybGMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzIyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQk9OQUlSRV9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CT05BSVJFX3NkbWEuYmluIGIvcmFkZW9uL0JPTkFJUkVfc2RtYS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc2NmEyYQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9CT05BSVJFX3NkbWEuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CT05BSVJFX3NtYy5iaW4gYi9yYWRlb24vQk9OQUlSRV9zbWMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MzVjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQk9OQUlSRV9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CT05BSVJFX3V2ZC5iaW4gYi9yYWRlb24vQk9OQUlSRV91dmQuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NzZkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQk9OQUlSRV91dmQuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9CVENfcmxjLmJpbiBiL3JhZGVvbi9CVENfcmxjLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTI5YTcyCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0JUQ19ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DQUlDT1NfbWMuYmluIGIvcmFkZW9uL0NBSUNPU19tYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhOTU2OAotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9DQUlDT1NfbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DQUlDT1NfbWUuYmluIGIvcmFkZW9uL0NBSUNPU19tZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM5Y2VmYwotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9DQUlDT1NfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DQUlDT1NfcGZwLmJpbiBiL3JhZGVvbi9DQUlDT1NfcGZwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDE3ZDVjCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0NBSUNPU19wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DQUlDT1Nfc21jLmJpbiBiL3JhZGVvbi9DQUlDT1Nfc21jLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzg4NDBjCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0NBSUNPU19zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DQVlNQU5fbWMuYmluIGIvcmFkZW9uL0NBWU1BTl9tYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4MzlmMAotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9DQVlNQU5fbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DQVlNQU5fbWUuYmluIGIvcmFkZW9uL0NBWU1BTl9tZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdmOGRjMwotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9DQVlNQU5fbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DQVlNQU5fcGZwLmJpbiBiL3JhZGVvbi9DQVlNQU5fcGZwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTQ5YzRmCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0NBWU1BTl9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DQVlNQU5fcmxjLmJpbiBiL3JhZGVvbi9DQVlNQU5fcmxjLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2YzY2ViCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0NBWU1BTl9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DQVlNQU5fc21jLmJpbiBiL3JhZGVvbi9DQVlNQU5fc21jLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTFjMmU1Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0NBWU1BTl9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DRURBUl9tZS5iaW4gYi9yYWRlb24vQ0VEQVJfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MjY4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQ0VEQVJfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DRURBUl9wZnAuYmluIGIvcmFkZW9uL0NFREFSX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliODI2MwotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9DRURBUl9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DRURBUl9ybGMuYmluIGIvcmFkZW9uL0NFREFSX3JsYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0ZTU4MAotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9DRURBUl9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DRURBUl9zbWMuYmluIGIvcmFkZW9uL0NFREFSX3NtYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFkMWY0ZQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9DRURBUl9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DWVBSRVNTX21lLmJpbiBiL3JhZGVvbi9DWVBSRVNTX21lLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDZjYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0NZUFJFU1NfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DWVBSRVNTX3BmcC5iaW4gYi9yYWRlb24vQ1lQUkVTU19wZnAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNjI5NTcKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQ1lQUkVTU19wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DWVBSRVNTX3JsYy5iaW4gYi9yYWRlb24vQ1lQUkVTU19ybGMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NGU1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQ1lQUkVTU19ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DWVBSRVNTX3NtYy5iaW4gYi9yYWRlb24vQ1lQUkVTU19zbWMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Mzc2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQ1lQUkVTU19zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9DWVBSRVNTX3V2ZC5iaW4gYi9yYWRlb24vQ1lQUkVTU191dmQuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MGI2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vQ1lQUkVTU191dmQuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9IQUlOQU5fY2UuYmluIGIvcmFkZW9uL0hBSU5BTl9jZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3ZTEzMgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9IQUlOQU5fY2UuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9IQUlOQU5fbWMuYmluIGIvcmFkZW9uL0hBSU5BTl9tYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdiODBjMwotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9IQUlOQU5fbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9IQUlOQU5fbWUuYmluIGIvcmFkZW9uL0hBSU5BTl9tZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjODk1YgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9IQUlOQU5fbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9IQUlOQU5fcGZwLmJpbiBiL3JhZGVvbi9IQUlOQU5fcGZwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTE4ZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0hBSU5BTl9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9IQUlOQU5fcmxjLmJpbiBiL3JhZGVvbi9IQUlOQU5fcmxjLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjA3Njc4Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0hBSU5BTl9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9IQUlOQU5fc21jLmJpbiBiL3JhZGVvbi9IQUlOQU5fc21jLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmY1YjM2Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0hBSU5BTl9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9KVU5JUEVSX21lLmJpbiBiL3JhZGVvbi9KVU5JUEVSX21lLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDZjYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0pVTklQRVJfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9KVU5JUEVSX3BmcC5iaW4gYi9yYWRlb24vSlVOSVBFUl9wZnAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNjI5NTcKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vSlVOSVBFUl9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9KVU5JUEVSX3JsYy5iaW4gYi9yYWRlb24vSlVOSVBFUl9ybGMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NGU1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vSlVOSVBFUl9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9KVU5JUEVSX3NtYy5iaW4gYi9yYWRlb24vSlVOSVBFUl9zbWMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMmMwNmEKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vSlVOSVBFUl9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQUJJTklfY2UuYmluIGIvcmFkZW9uL0tBQklOSV9jZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0MGZiZgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9LQUJJTklfY2UuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQUJJTklfbWUuYmluIGIvcmFkZW9uL0tBQklOSV9tZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFkYTA3NQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9LQUJJTklfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQUJJTklfbWVjLmJpbiBiL3JhZGVvbi9LQUJJTklfbWVjLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTllNDU3Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0tBQklOSV9tZWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQUJJTklfcGZwLmJpbiBiL3JhZGVvbi9LQUJJTklfcGZwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWZhMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0tBQklOSV9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQUJJTklfcmxjLmJpbiBiL3JhZGVvbi9LQUJJTklfcmxjLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGNiMmJkCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0tBQklOSV9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQUJJTklfc2RtYS5iaW4gYi9yYWRlb24vS0FCSU5JX3NkbWEuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NjZhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vS0FCSU5JX3NkbWEuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQVZFUklfY2UuYmluIGIvcmFkZW9uL0tBVkVSSV9jZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkOTJkZQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9LQVZFUklfY2UuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQVZFUklfbWUuYmluIGIvcmFkZW9uL0tBVkVSSV9tZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzZGM2NwotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9LQVZFUklfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQVZFUklfbWVjLmJpbiBiL3JhZGVvbi9LQVZFUklfbWVjLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDJhYzVjCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0tBVkVSSV9tZWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQVZFUklfcGZwLmJpbiBiL3JhZGVvbi9LQVZFUklfcGZwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzU5MGExCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0tBVkVSSV9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQVZFUklfcmxjLmJpbiBiL3JhZGVvbi9LQVZFUklfcmxjLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTg0ZDg2Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL0tBVkVSSV9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9LQVZFUklfc2RtYS5iaW4gYi9yYWRlb24vS0FWRVJJX3NkbWEuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NjZhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vS0FWRVJJX3NkbWEuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9PTEFORF9jZS5iaW4gYi9yYWRlb24vT0xBTkRfY2UuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2UxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vT0xBTkRfY2UuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9PTEFORF9tYy5iaW4gYi9yYWRlb24vT0xBTkRfbWMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YjgwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vT0xBTkRfbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9PTEFORF9tZS5iaW4gYi9yYWRlb24vT0xBTkRfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzg5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vT0xBTkRfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9PTEFORF9wZnAuYmluIGIvcmFkZW9uL09MQU5EX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2YTIwYgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9PTEFORF9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9PTEFORF9ybGMuYmluIGIvcmFkZW9uL09MQU5EX3JsYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1NzVhYwotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9PTEFORF9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9PTEFORF9zbWMuYmluIGIvcmFkZW9uL09MQU5EX3NtYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjMDdmOQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9PTEFORF9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9QQUxNX21lLmJpbiBiL3JhZGVvbi9QQUxNX21lLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDMwMzBmCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1BBTE1fbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9QQUxNX3BmcC5iaW4gYi9yYWRlb24vUEFMTV9wZnAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZDc3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUEFMTV9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9QSVRDQUlSTl9jZS5iaW4gYi9yYWRlb24vUElUQ0FJUk5fY2UuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2UxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUElUQ0FJUk5fY2UuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9QSVRDQUlSTl9tYy5iaW4gYi9yYWRlb24vUElUQ0FJUk5fbWMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDAwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUElUQ0FJUk5fbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9QSVRDQUlSTl9tZS5iaW4gYi9yYWRlb24vUElUQ0FJUk5fbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MDZkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUElUQ0FJUk5fbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9QSVRDQUlSTl9wZnAuYmluIGIvcmFkZW9uL1BJVENBSVJOX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwODEzZQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9QSVRDQUlSTl9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9QSVRDQUlSTl9ybGMuYmluIGIvcmFkZW9uL1BJVENBSVJOX3JsYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3MGY5YQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9QSVRDQUlSTl9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9QSVRDQUlSTl9zbWMuYmluIGIvcmFkZW9uL1BJVENBSVJOX3NtYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxOGM4OAotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9QSVRDQUlSTl9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SMTAwX2NwLmJpbiBiL3JhZGVvbi9SMTAwX2NwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWU4YTExCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1IxMDBfY3AuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SMjAwX2NwLmJpbiBiL3JhZGVvbi9SMjAwX2NwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWM4OGM2Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1IyMDBfY3AuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SMzAwX2NwLmJpbiBiL3JhZGVvbi9SMzAwX2NwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWIxMTAwCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1IzMDBfY3AuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SNDIwX2NwLmJpbiBiL3JhZGVvbi9SNDIwX2NwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmVmZjYwCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1I0MjBfY3AuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SNTIwX2NwLmJpbiBiL3JhZGVvbi9SNTIwX2NwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzkzY2E5Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1I1MjBfY3AuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SNjAwX21lLmJpbiBiL3JhZGVvbi9SNjAwX21lLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTM5Njg1Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1I2MDBfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SNjAwX3BmcC5iaW4gYi9yYWRlb24vUjYwMF9wZnAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYjJlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUjYwMF9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SNjAwX3JsYy5iaW4gYi9yYWRlb24vUjYwMF9ybGMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMDIzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUjYwMF9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SNzAwX3JsYy5iaW4gYi9yYWRlb24vUjcwMF9ybGMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMDI4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUjcwMF9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SRURXT09EX21lLmJpbiBiL3JhZGVvbi9SRURXT09EX21lLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjA4YzhlCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1JFRFdPT0RfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SRURXT09EX3BmcC5iaW4gYi9yYWRlb24vUkVEV09PRF9wZnAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YjgyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUkVEV09PRF9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SRURXT09EX3JsYy5iaW4gYi9yYWRlb24vUkVEV09PRF9ybGMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NGU1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUkVEV09PRF9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SRURXT09EX3NtYy5iaW4gYi9yYWRlb24vUkVEV09PRF9zbWMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjODM1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUkVEV09PRF9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SUzYwMF9jcC5iaW4gYi9yYWRlb24vUlM2MDBfY3AuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MWVjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUlM2MDBfY3AuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SUzY5MF9jcC5iaW4gYi9yYWRlb24vUlM2OTBfY3AuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZjExYjQKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUlM2OTBfY3AuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SUzc4MF9tZS5iaW4gYi9yYWRlb24vUlM3ODBfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MjkyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUlM3ODBfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SUzc4MF9wZnAuYmluIGIvcmFkZW9uL1JTNzgwX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4OTg3OAotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SUzc4MF9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjYxMF9tZS5iaW4gYi9yYWRlb24vUlY2MTBfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZDI2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUlY2MTBfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjYxMF9wZnAuYmluIGIvcmFkZW9uL1JWNjEwX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjMzU0NgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjYxMF9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjYyMF9tZS5iaW4gYi9yYWRlb24vUlY2MjBfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZDI2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUlY2MjBfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjYyMF9wZnAuYmluIGIvcmFkZW9uL1JWNjIwX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjMzU0NgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjYyMF9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjYzMF9tZS5iaW4gYi9yYWRlb24vUlY2MzBfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZWQ3NTcKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUlY2MzBfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjYzMF9wZnAuYmluIGIvcmFkZW9uL1JWNjMwX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjMzU0NgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjYzMF9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjYzNV9tZS5iaW4gYi9yYWRlb24vUlY2MzVfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZWQ3NTcKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUlY2MzVfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjYzNV9wZnAuYmluIGIvcmFkZW9uL1JWNjM1X3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjMzU0NgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjYzNV9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjY3MF9tZS5iaW4gYi9yYWRlb24vUlY2NzBfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOWI2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUlY2NzBfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjY3MF9wZnAuYmluIGIvcmFkZW9uL1JWNjcwX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjMzU0NgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjY3MF9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjcxMF9tZS5iaW4gYi9yYWRlb24vUlY3MTBfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMjU5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUlY3MTBfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjcxMF9wZnAuYmluIGIvcmFkZW9uL1JWNzEwX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1YjM2ZAotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjcxMF9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjcxMF9zbWMuYmluIGIvcmFkZW9uL1JWNzEwX3NtYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3OWI4MgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjcxMF9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjcxMF91dmQuYmluIGIvcmFkZW9uL1JWNzEwX3V2ZC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhOTMxYwotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjcxMF91dmQuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjczMF9tZS5iaW4gYi9yYWRlb24vUlY3MzBfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjhlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUlY3MzBfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjczMF9wZnAuYmluIGIvcmFkZW9uL1JWNzMwX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1YjM2ZAotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjczMF9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjczMF9zbWMuYmluIGIvcmFkZW9uL1JWNzMwX3NtYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhZjk4NQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjczMF9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjc0MF9zbWMuYmluIGIvcmFkZW9uL1JWNzQwX3NtYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0MTZkOQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjc0MF9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjc3MF9tZS5iaW4gYi9yYWRlb24vUlY3NzBfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlOGM4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vUlY3NzBfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjc3MF9wZnAuYmluIGIvcmFkZW9uL1JWNzcwX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzNTM3MgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjc3MF9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9SVjc3MF9zbWMuYmluIGIvcmFkZW9uL1JWNzcwX3NtYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5NTVjYQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9SVjc3MF9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9TVU1PMl9tZS5iaW4gYi9yYWRlb24vU1VNTzJfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNzIzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vU1VNTzJfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9TVU1PMl9wZnAuYmluIGIvcmFkZW9uL1NVTU8yX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM2OTBiYQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9TVU1PMl9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9TVU1PX21lLmJpbiBiL3JhZGVvbi9TVU1PX21lLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDcyMzA4Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1NVTU9fbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9TVU1PX3BmcC5iaW4gYi9yYWRlb24vU1VNT19wZnAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYmNiNjQKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vU1VNT19wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9TVU1PX3JsYy5iaW4gYi9yYWRlb24vU1VNT19ybGMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYjUwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vU1VNT19ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9TVU1PX3V2ZC5iaW4gYi9yYWRlb24vU1VNT191dmQuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjRjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vU1VNT191dmQuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9UQUhJVElfY2UuYmluIGIvcmFkZW9uL1RBSElUSV9jZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3ZTEzMgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9UQUhJVElfY2UuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9UQUhJVElfbWMuYmluIGIvcmFkZW9uL1RBSElUSV9tYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0MDA2YgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9UQUhJVElfbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9UQUhJVElfbWUuYmluIGIvcmFkZW9uL1RBSElUSV9tZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwNmRjYgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9UQUhJVElfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9UQUhJVElfcGZwLmJpbiBiL3JhZGVvbi9UQUhJVElfcGZwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjA4MTNlCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1RBSElUSV9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9UQUhJVElfcmxjLmJpbiBiL3JhZGVvbi9UQUhJVElfcmxjLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGI3NDM3Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1RBSElUSV9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9UQUhJVElfc21jLmJpbiBiL3JhZGVvbi9UQUhJVElfc21jLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmVmNTFlCi0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1RBSElUSV9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9UQUhJVElfdXZkLmJpbiBiL3JhZGVvbi9UQUhJVElfdXZkLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmRjOTE4Ci0tLSAvZGV2L251bGwKKysrIGIvcmFkZW9uL1RBSElUSV91dmQuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9UVVJLU19tYy5iaW4gYi9yYWRlb24vVFVSS1NfbWMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYTk1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vVFVSS1NfbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9UVVJLU19tZS5iaW4gYi9yYWRlb24vVFVSS1NfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOWNlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vVFVSS1NfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9UVVJLU19wZnAuYmluIGIvcmFkZW9uL1RVUktTX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5YTYzYQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9UVVJLU19wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9UVVJLU19zbWMuYmluIGIvcmFkZW9uL1RVUktTX3NtYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0NGFiNgotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9UVVJLU19zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9WRVJERV9jZS5iaW4gYi9yYWRlb24vVkVSREVfY2UuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2UxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vVkVSREVfY2UuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9WRVJERV9tYy5iaW4gYi9yYWRlb24vVkVSREVfbWMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDAwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vVkVSREVfbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9WRVJERV9tZS5iaW4gYi9yYWRlb24vVkVSREVfbWUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYjRlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9yYWRlb24vVkVSREVfbWUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9WRVJERV9wZnAuYmluIGIvcmFkZW9uL1ZFUkRFX3BmcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhMmUwMAotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9WRVJERV9wZnAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9WRVJERV9ybGMuYmluIGIvcmFkZW9uL1ZFUkRFX3JsYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmViMTdiMAotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9WRVJERV9ybGMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JhZGVvbi9WRVJERV9zbWMuYmluIGIvcmFkZW9uL1ZFUkRFX3NtYy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhhMTU0ZQotLS0gL2Rldi9udWxsCisrKyBiL3JhZGVvbi9WRVJERV9zbWMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JwMi5mdyBiL3JwMi5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTcxZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvcnAyLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J0MjU2MS5iaW4gYi9ydDI1NjEuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNGJhZDMKLS0tIC9kZXYvbnVsbAorKysgYi9ydDI1NjEuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J0MjU2MXMuYmluIGIvcnQyNTYxcy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmNzk1MAotLS0gL2Rldi9udWxsCisrKyBiL3J0MjU2MXMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J0MjY2MS5iaW4gYi9ydDI2NjEuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNTJhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9ydDI2NjEuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J0Mjg2MC5iaW4gYi9ydDI4NjAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MDMwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9ydDI4NjAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J0Mjg3MC5iaW4gYi9ydDI4NzAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNTM1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9ydDI4NzAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J0MzA3MC5iaW4gYi9ydDMwNzAuYmluCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmQyMzNhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9ydDMwNzAuYmluCkBAIC0wLDAgKzEgQEAKK3J0Mjg3MC5iaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ydDMwNzEuYmluIGIvcnQzMDcxLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWY0NGUwCi0tLSAvZGV2L251bGwKKysrIGIvcnQzMDcxLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydDMwOTAuYmluIGIvcnQzMDkwLmJpbgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5jNWE5YWIwCi0tLSAvZGV2L251bGwKKysrIGIvcnQzMDkwLmJpbgpAQCAtMCwwICsxIEBACitydDI4NjAuYmluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcnQzMjkwLmJpbiBiL3J0MzI5MC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNhMzNhNQotLS0gL2Rldi9udWxsCisrKyBiL3J0MzI5MC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnQ3My5iaW4gYi9ydDczLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTM5NWRkCi0tLSAvZGV2L251bGwKKysrIGIvcnQ3My5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTA1ZS0xLmZ3IGIvcnRsX25pYy9ydGw4MTA1ZS0xLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMmNiZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxMDVlLTEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTA2ZS0xLmZ3IGIvcnRsX25pYy9ydGw4MTA2ZS0xLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Njk0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxMDZlLTEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTA2ZS0yLmZ3IGIvcnRsX25pYy9ydGw4MTA2ZS0yLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDQyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxMDZlLTIuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTY4ZC0xLmZ3IGIvcnRsX25pYy9ydGw4MTY4ZC0xLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTAwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxNjhkLTEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTY4ZC0yLmZ3IGIvcnRsX25pYy9ydGw4MTY4ZC0yLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjJhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxNjhkLTIuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTY4ZS0xLmZ3IGIvcnRsX25pYy9ydGw4MTY4ZS0xLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDNiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxNjhlLTEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTY4ZS0yLmZ3IGIvcnRsX25pYy9ydGw4MTY4ZS0yLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYTU5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxNjhlLTIuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTY4ZS0zLmZ3IGIvcnRsX25pYy9ydGw4MTY4ZS0zLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmODg4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxNjhlLTMuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTY4Zi0xLmZ3IGIvcnRsX25pYy9ydGw4MTY4Zi0xLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzg4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxNjhmLTEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTY4Zi0yLmZ3IGIvcnRsX25pYy9ydGw4MTY4Zi0yLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNDI0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxNjhmLTIuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTY4Zy0xLmZ3IGIvcnRsX25pYy9ydGw4MTY4Zy0xLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNjI4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxNjhnLTEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTY4Zy0yLmZ3IGIvcnRsX25pYy9ydGw4MTY4Zy0yLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NGQ0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxNjhnLTIuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4MTY4Zy0zLmZ3IGIvcnRsX25pYy9ydGw4MTY4Zy0zLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTdkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9ydGxfbmljL3J0bDgxNjhnLTMuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4NDAyLTEuZncgYi9ydGxfbmljL3J0bDg0MDItMS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmZhMzVkCi0tLSAvZGV2L251bGwKKysrIGIvcnRsX25pYy9ydGw4NDAyLTEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4NDExLTEuZncgYi9ydGxfbmljL3J0bDg0MTEtMS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjc3MmRiCi0tLSAvZGV2L251bGwKKysrIGIvcnRsX25pYy9ydGw4NDExLTEuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsX25pYy9ydGw4NDExLTIuZncgYi9ydGxfbmljL3J0bDg0MTEtMi5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzc4OWZlCi0tLSAvZGV2L251bGwKKysrIGIvcnRsX25pYy9ydGw4NDExLTIuZncKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4MTg4ZWZ3LmJpbiBiL3J0bHdpZmkvcnRsODE4OGVmdy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5YTQzMAotLS0gL2Rldi9udWxsCisrKyBiL3J0bHdpZmkvcnRsODE4OGVmdy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4MTg4ZXVmdy5iaW4gYi9ydGx3aWZpL3J0bDgxODhldWZ3LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWU3ZTFjCi0tLSAvZGV2L251bGwKKysrIGIvcnRsd2lmaS9ydGw4MTg4ZXVmdy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4MTkyY2Z3LmJpbiBiL3J0bHdpZmkvcnRsODE5MmNmdy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3MTk2OAotLS0gL2Rldi9udWxsCisrKyBiL3J0bHdpZmkvcnRsODE5MmNmdy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4MTkyY2Z3VS5iaW4gYi9ydGx3aWZpL3J0bDgxOTJjZndVLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjMxZTFkCi0tLSAvZGV2L251bGwKKysrIGIvcnRsd2lmaS9ydGw4MTkyY2Z3VS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4MTkyY2Z3VV9CLmJpbiBiL3J0bHdpZmkvcnRsODE5MmNmd1VfQi5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmNDcwYwotLS0gL2Rldi9udWxsCisrKyBiL3J0bHdpZmkvcnRsODE5MmNmd1VfQi5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4MTkyY3Vmdy5iaW4gYi9ydGx3aWZpL3J0bDgxOTJjdWZ3LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWE3NTA2Ci0tLSAvZGV2L251bGwKKysrIGIvcnRsd2lmaS9ydGw4MTkyY3Vmdy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4MTkyY3Vmd19BLmJpbiBiL3J0bHdpZmkvcnRsODE5MmN1ZndfQS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2OWQwYQotLS0gL2Rldi9udWxsCisrKyBiL3J0bHdpZmkvcnRsODE5MmN1ZndfQS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4MTkyY3Vmd19CLmJpbiBiL3J0bHdpZmkvcnRsODE5MmN1ZndfQi5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYwODljNAotLS0gL2Rldi9udWxsCisrKyBiL3J0bHdpZmkvcnRsODE5MmN1ZndfQi5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4MTkyY3Vmd19UTVNDLmJpbiBiL3J0bHdpZmkvcnRsODE5MmN1ZndfVE1TQy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiODRkNAotLS0gL2Rldi9udWxsCisrKyBiL3J0bHdpZmkvcnRsODE5MmN1ZndfVE1TQy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4MTkyZGVmdy5iaW4gYi9ydGx3aWZpL3J0bDgxOTJkZWZ3LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGUyOTY5Ci0tLSAvZGV2L251bGwKKysrIGIvcnRsd2lmaS9ydGw4MTkyZGVmdy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4MTkyc2Vmdy5iaW4gYi9ydGx3aWZpL3J0bDgxOTJzZWZ3LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRhZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvcnRsd2lmaS9ydGw4MTkyc2Vmdy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4NzEydS5iaW4gYi9ydGx3aWZpL3J0bDg3MTJ1LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjk2NWE2Ci0tLSAvZGV2L251bGwKKysrIGIvcnRsd2lmaS9ydGw4NzEydS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4NzIzZncuYmluIGIvcnRsd2lmaS9ydGw4NzIzZncuYmluCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcyNWYyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydGx3aWZpL3J0bDg3MjNmdy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnRsd2lmaS9ydGw4NzIzZndfQi5iaW4gYi9ydGx3aWZpL3J0bDg3MjNmd19CLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OTNjN2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvcnRsd2lmaS9ydGw4NzIzZndfQi5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvczIyNTAuZncgYi9zMjI1MC5mdwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi43ZGIzODA3Ci0tLSAvZGV2L251bGwKKysrIGIvczIyNTAuZncKQEAgLTAsMCArMSBAQAorZ283MDA3L3MyMjUwLTIuZncKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zMjI1MF9sb2FkZXIuZncgYi9zMjI1MF9sb2FkZXIuZncKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uYjU3YWMxMAotLS0gL2Rldi9udWxsCisrKyBiL3MyMjUwX2xvYWRlci5mdwpAQCAtMCwwICsxIEBACitnbzcwMDcvczIyNTAtMS5mdwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3M1cC1tZmMvczVwLW1mYy12Ni5mdyBiL3M1cC1tZmMvczVwLW1mYy12Ni5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTExNzlmCi0tLSAvZGV2L251bGwKKysrIGIvczVwLW1mYy9zNXAtbWZjLXY2LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3M1cC1tZmMvczVwLW1mYy5mdyBiL3M1cC1tZmMvczVwLW1mYy5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWM4MDYwCi0tLSAvZGV2L251bGwKKysrIGIvczVwLW1mYy9zNXAtbWZjLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NiMTYvYWxhd19tYWluLmNzcCBiL3NiMTYvYWxhd19tYWluLmNzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWY2ZDdiCi0tLSAvZGV2L251bGwKKysrIGIvc2IxNi9hbGF3X21haW4uY3NwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NiMTYvaW1hX2FkcGNtX2NhcHR1cmUuY3NwIGIvc2IxNi9pbWFfYWRwY21fY2FwdHVyZS5jc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3YjkxMAotLS0gL2Rldi9udWxsCisrKyBiL3NiMTYvaW1hX2FkcGNtX2NhcHR1cmUuY3NwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NiMTYvaW1hX2FkcGNtX2luaXQuY3NwIGIvc2IxNi9pbWFfYWRwY21faW5pdC5jc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExMjZmZAotLS0gL2Rldi9udWxsCisrKyBiL3NiMTYvaW1hX2FkcGNtX2luaXQuY3NwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NiMTYvaW1hX2FkcGNtX3BsYXliYWNrLmNzcCBiL3NiMTYvaW1hX2FkcGNtX3BsYXliYWNrLmNzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNhY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvc2IxNi9pbWFfYWRwY21fcGxheWJhY2suY3NwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NiMTYvbXVsYXdfbWFpbi5jc3AgYi9zYjE2L211bGF3X21haW4uY3NwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YjE2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9zYjE2L211bGF3X21haW4uY3NwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NkZF9zYWdyYWRfMTA5MV8xMDk4LmJpbiBiL3NkZF9zYWdyYWRfMTA5MV8xMDk4LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTM4NTc2Ci0tLSAvZGV2L251bGwKKysrIGIvc2RkX3NhZ3JhZF8xMDkxXzEwOTguYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NsaWNvc3MvZ2Jkb3dubG9hZC5zeXMgYi9zbGljb3NzL2diZG93bmxvYWQuc3lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYWI3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9zbGljb3NzL2diZG93bmxvYWQuc3lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NsaWNvc3MvZ2JyY3Z1Y29kZS5zeXMgYi9zbGljb3NzL2dicmN2dWNvZGUuc3lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NWIyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9zbGljb3NzL2dicmN2dWNvZGUuc3lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5zeXMgYi9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuc3lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZTUwMjMKLS0tIC9kZXYvbnVsbAorKysgYi9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuc3lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5zeXMgYi9zbGljb3NzL29hc2lzZG93bmxvYWQuc3lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYzJjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zbGljb3NzL29hc2lzZG93bmxvYWQuc3lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5zeXMgYi9zbGljb3NzL29hc2lzcmN2dWNvZGUuc3lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYjliZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zbGljb3NzL29hc2lzcmN2dWNvZGUuc3lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3N1bi9jYXNzaW5pLmJpbiBiL3N1bi9jYXNzaW5pLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGNkZmFkCi0tLSAvZGV2L251bGwKKysrIGIvc3VuL2Nhc3NpbmkuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3N4Zy9zYWhhcmFkYmdkb3dubG9hZEIuc3lzIGIvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkQi5zeXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiM2VkMQotLS0gL2Rldi9udWxsCisrKyBiL3N4Zy9zYWhhcmFkYmdkb3dubG9hZEIuc3lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3N4Zy9zYWhhcmFkb3dubG9hZEIuc3lzIGIvc3hnL3NhaGFyYWRvd25sb2FkQi5zeXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ4Y2I5MgotLS0gL2Rldi9udWxsCisrKyBiL3N4Zy9zYWhhcmFkb3dubG9hZEIuc3lzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RlaHV0aS9iZHguYmluIGIvdGVodXRpL2JkeC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkNmUyMwotLS0gL2Rldi9udWxsCisrKyBiL3RlaHV0aS9iZHguYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RpLWNvbm5lY3Rpdml0eS9USUluaXRfNy4yLjMxLmJ0cyBiL3RpLWNvbm5lY3Rpdml0eS9USUluaXRfNy4yLjMxLmJ0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDY3OWY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L1RJSW5pdF83LjIuMzEuYnRzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RpLWNvbm5lY3Rpdml0eS93bDEyNTEtZncuYmluIGIvdGktY29ubmVjdGl2aXR5L3dsMTI1MS1mdy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5Yzk4MwotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyNTEtZncuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RpLWNvbm5lY3Rpdml0eS93bDEyNTEtbnZzLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyNTEtbnZzLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmY5YzUwCi0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTI1MS1udnMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RpLWNvbm5lY3Rpdml0eS93bDEyNzEtZnctMi5iaW4gYi90aS1jb25uZWN0aXZpdHkvd2wxMjcxLWZ3LTIuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMTMyNGUKLS0tIC9kZXYvbnVsbAorKysgYi90aS1jb25uZWN0aXZpdHkvd2wxMjcxLWZ3LTIuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RpLWNvbm5lY3Rpdml0eS93bDEyNzEtZnctYXAuYmluIGIvdGktY29ubmVjdGl2aXR5L3dsMTI3MS1mdy1hcC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4ZTU3MAotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyNzEtZnctYXAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RpLWNvbm5lY3Rpdml0eS93bDEyNzEtZncuYmluIGIvdGktY29ubmVjdGl2aXR5L3dsMTI3MS1mdy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhZmU4ZAotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyNzEtZncuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RpLWNvbm5lY3Rpdml0eS93bDEyNzEtbnZzLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyNzEtbnZzLmJpbgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5hMzBhMDc2Ci0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTI3MS1udnMuYmluCkBAIC0wLDAgKzEgQEAKK3dsMTI3eC1udnMuYmluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy0zLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctMy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiZDFiNQotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctMy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy00LW1yLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctNC1tci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRkN2YwZQotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctNC1tci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy00LXBsdC5iaW4gYi90aS1jb25uZWN0aXZpdHkvd2wxMjd4LWZ3LTQtcGx0LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2I3ZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy00LXBsdC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy00LXNyLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctNC1zci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkOGY5NgotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctNC1zci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy01LW1yLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctNS1tci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1M2ZlZgotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctNS1tci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy01LXBsdC5iaW4gYi90aS1jb25uZWN0aXZpdHkvd2wxMjd4LWZ3LTUtcGx0LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjYyNDlmCi0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy01LXBsdC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy01LXNyLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctNS1zci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzZDNlYgotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyN3gtZnctNS1zci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy1wbHQtMy5iaW4gYi90aS1jb25uZWN0aXZpdHkvd2wxMjd4LWZ3LXBsdC0zLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmZjNzFhCi0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1mdy1wbHQtMy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1udnMuYmluIGIvdGktY29ubmVjdGl2aXR5L3dsMTI3eC1udnMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOTc4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi90aS1jb25uZWN0aXZpdHkvd2wxMjd4LW52cy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy0zLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctMy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxYWNjNwotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctMy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy00LW1yLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctNC1tci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjYThmYQotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctNC1tci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy00LXBsdC5iaW4gYi90aS1jb25uZWN0aXZpdHkvd2wxMjh4LWZ3LTQtcGx0LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWYxMzE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy00LXBsdC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy00LXNyLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctNC1zci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlMTAwMAotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctNC1zci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy01LW1yLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctNS1tci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ5MzFlZAotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctNS1tci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy01LXBsdC5iaW4gYi90aS1jb25uZWN0aXZpdHkvd2wxMjh4LWZ3LTUtcGx0LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDIzMmQwCi0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy01LXBsdC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy01LXNyLmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctNS1zci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEwYTFiYQotLS0gL2Rldi9udWxsCisrKyBiL3RpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctNS1zci5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy1hcC5iaW4gYi90aS1jb25uZWN0aXZpdHkvd2wxMjh4LWZ3LWFwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzk1NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy1hcC5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy1wbHQtMy5iaW4gYi90aS1jb25uZWN0aXZpdHkvd2wxMjh4LWZ3LXBsdC0zLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjFiODI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy1wbHQtMy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy5iaW4gYi90aS1jb25uZWN0aXZpdHkvd2wxMjh4LWZ3LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmJmNjI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1udnMuYmluIGIvdGktY29ubmVjdGl2aXR5L3dsMTI4eC1udnMuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1N2M5MzYKLS0tIC9kZXYvbnVsbAorKysgYi90aS1jb25uZWN0aXZpdHkvd2wxMjh4LW52cy5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGktY29ubmVjdGl2aXR5L3dsMTJ4eC1udnMuYmluIGIvdGktY29ubmVjdGl2aXR5L3dsMTJ4eC1udnMuYmluCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmEzMGEwNzYKLS0tIC9kZXYvbnVsbAorKysgYi90aS1jb25uZWN0aXZpdHkvd2wxMnh4LW52cy5iaW4KQEAgLTAsMCArMSBAQAord2wxMjd4LW52cy5iaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aS1jb25uZWN0aXZpdHkvd2wxOHh4LWNvbmYuYmluIGIvdGktY29ubmVjdGl2aXR5L3dsMTh4eC1jb25mLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2QyNDczCi0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTh4eC1jb25mLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aS1jb25uZWN0aXZpdHkvd2wxOHh4LWZ3LTIuYmluIGIvdGktY29ubmVjdGl2aXR5L3dsMTh4eC1mdy0yLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE1NmY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGktY29ubmVjdGl2aXR5L3dsMTh4eC1mdy0yLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aS1jb25uZWN0aXZpdHkvd2wxOHh4LWZ3LmJpbiBiL3RpLWNvbm5lY3Rpdml0eS93bDE4eHgtZncuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMWUyNGUKLS0tIC9kZXYvbnVsbAorKysgYi90aS1jb25uZWN0aXZpdHkvd2wxOHh4LWZ3LmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aV8zNDEwLmZ3IGIvdGlfMzQxMC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDRiZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGlfMzQxMC5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aV81MDUyLmZ3IGIvdGlfNTA1Mi5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGRiZjhlCi0tLSAvZGV2L251bGwKKysrIGIvdGlfNTA1Mi5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aWdvbi90ZzMuYmluIGIvdGlnb24vdGczLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjhhZTVhCi0tLSAvZGV2L251bGwKKysrIGIvdGlnb24vdGczLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aWdvbi90ZzM1Nzc2Ni5iaW4gYi90aWdvbi90ZzM1Nzc2Ni5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4MTZhMAotLS0gL2Rldi9udWxsCisrKyBiL3RpZ29uL3RnMzU3NzY2LmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aWdvbi90ZzNfdHNvLmJpbiBiL3RpZ29uL3RnM190c28uYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNDgxYzkKLS0tIC9kZXYvbnVsbAorKysgYi90aWdvbi90ZzNfdHNvLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aWdvbi90ZzNfdHNvNS5iaW4gYi90aWdvbi90ZzNfdHNvNS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI3N2YwZgotLS0gL2Rldi9udWxsCisrKyBiL3RpZ29uL3RnM190c281LmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90bGcyMzAwX2Zpcm13YXJlLmJpbiBiL3RsZzIzMDBfZmlybXdhcmUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YmQyYTUKLS0tIC9kZXYvbnVsbAorKysgYi90bGcyMzAwX2Zpcm13YXJlLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90cl9zbWN0ci5iaW4gYi90cl9zbWN0ci5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkODQzYwotLS0gL2Rldi9udWxsCisrKyBiL3RyX3NtY3RyLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90dHVzYi1idWRnZXQvZHNwYm9vdGNvZGUuYmluIGIvdHR1c2ItYnVkZ2V0L2RzcGJvb3Rjb2RlLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGNlNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdHR1c2ItYnVkZ2V0L2RzcGJvb3Rjb2RlLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtLzkzMC1mcGdhLmJpbiBiL3VlYWdsZS1hdG0vOTMwLWZwZ2EuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OGJhMTMKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtLzkzMC1mcGdhLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVjRwLmJpbi52MiBiL3VlYWdsZS1hdG0vQ01WNHAuYmluLnYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNzg4YWUKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL0NNVjRwLmJpbi52MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVjlpLmJpbiBiL3VlYWdsZS1hdG0vQ01WOWkuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZTAwYTYKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL0NNVjlpLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVjlwLmJpbiBiL3VlYWdsZS1hdG0vQ01WOXAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MGE3ZjYKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL0NNVjlwLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVmVpLmJpbiBiL3VlYWdsZS1hdG0vQ01WZWkuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MDQ0NzIKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL0NNVmVpLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVmVpV08uYmluIGIvdWVhZ2xlLWF0bS9DTVZlaVdPLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjA0NDcyCi0tLSAvZGV2L251bGwKKysrIGIvdWVhZ2xlLWF0bS9DTVZlaVdPLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVmVwLmJpbiBiL3VlYWdsZS1hdG0vQ01WZXAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMzUwMTEKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL0NNVmVwLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVmVwRVMuYmluIGIvdWVhZ2xlLWF0bS9DTVZlcEVTLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTcxZDkwCi0tLSAvZGV2L251bGwKKysrIGIvdWVhZ2xlLWF0bS9DTVZlcEVTLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVmVwRVMwMy5iaW4gYi91ZWFnbGUtYXRtL0NNVmVwRVMwMy5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3OWFiOAotLS0gL2Rldi9udWxsCisrKyBiL3VlYWdsZS1hdG0vQ01WZXBFUzAzLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVmVwRlIuYmluIGIvdWVhZ2xlLWF0bS9DTVZlcEZSLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWRlNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvdWVhZ2xlLWF0bS9DTVZlcEZSLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVmVwRlIwNC5iaW4gYi91ZWFnbGUtYXRtL0NNVmVwRlIwNC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxNjQ4MAotLS0gL2Rldi9udWxsCisrKyBiL3VlYWdsZS1hdG0vQ01WZXBGUjA0LmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVmVwRlIxMC5iaW4gYi91ZWFnbGUtYXRtL0NNVmVwRlIxMC5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExZDk1NQotLS0gL2Rldi9udWxsCisrKyBiL3VlYWdsZS1hdG0vQ01WZXBGUjEwLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVmVwSVQuYmluIGIvdWVhZ2xlLWF0bS9DTVZlcElULmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM3MGYwCi0tLSAvZGV2L251bGwKKysrIGIvdWVhZ2xlLWF0bS9DTVZlcElULmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0NNVmVwV08uYmluIGIvdWVhZ2xlLWF0bS9DTVZlcFdPLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWRlNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvdWVhZ2xlLWF0bS9DTVZlcFdPLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0RTUDRwLmJpbiBiL3VlYWdsZS1hdG0vRFNQNHAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NzEyYzUKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL0RTUDRwLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0RTUDlpLmJpbiBiL3VlYWdsZS1hdG0vRFNQOWkuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YzJiYzEKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL0RTUDlpLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0RTUDlwLmJpbiBiL3VlYWdsZS1hdG0vRFNQOXAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOWJmY2IKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL0RTUDlwLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0RTUGVpLmJpbiBiL3VlYWdsZS1hdG0vRFNQZWkuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjE2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL0RTUGVpLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL0RTUGVwLmJpbiBiL3VlYWdsZS1hdG0vRFNQZXAuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzkxOGEKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL0RTUGVwLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL2FkaTkzMC5mdyBiL3VlYWdsZS1hdG0vYWRpOTMwLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNWRhNjEKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL2FkaTkzMC5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL2VhZ2xlSS5mdyBiL3VlYWdsZS1hdG0vZWFnbGVJLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMWQ0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi91ZWFnbGUtYXRtL2VhZ2xlSS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL2VhZ2xlSUkuZncgYi91ZWFnbGUtYXRtL2VhZ2xlSUkuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJjZjc3ZgotLS0gL2Rldi9udWxsCisrKyBiL3VlYWdsZS1hdG0vZWFnbGVJSS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL2VhZ2xlSUlJLmZ3IGIvdWVhZ2xlLWF0bS9lYWdsZUlJSS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjVmNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdWVhZ2xlLWF0bS9lYWdsZUlJSS5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91ZWFnbGUtYXRtL2VhZ2xlSVYuZncgYi91ZWFnbGUtYXRtL2VhZ2xlSVYuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1MTdlNQotLS0gL2Rldi9udWxsCisrKyBiL3VlYWdsZS1hdG0vZWFnbGVJVi5mdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS91c2JkdXgvTWFrZWZpbGVfZHV4IGIvdXNiZHV4L01ha2VmaWxlX2R1eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGMwOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvdXNiZHV4L01ha2VmaWxlX2R1eApAQCAtMCwwICsxLDIyIEBACisjIChjKSBCZXJuZCBQb3JyCisjIEdOVSBwdWJsaWMgbGljZW5zZQorIyBubyB3YXJyYW50eQorIworCithbGw6IGFzMzEgdXNiZHV4ZmFzdF9maXJtd2FyZS5iaW4gdXNiZHV4X2Zpcm13YXJlLmJpbiB1c2JkdXhzaWdtYV9maXJtd2FyZS5iaW4KKworYXMzMToKKwltYWtlIC1DIGFzMzEtMi4xCisKK3VzYmR1eGZhc3RfZmlybXdhcmUuYmluOiBmeDItaW5jbHVkZS5hc20gdXNiZHV4ZmFzdF9maXJtd2FyZS5hc20gYXMzMQorCWFzMzEtMi4xL2FzMzEgLUZiaW4gdXNiZHV4ZmFzdF9maXJtd2FyZS5hc20KKwordXNiZHV4X2Zpcm13YXJlLmJpbjogZngyLWluY2x1ZGUuYXNtIHVzYmR1eF9maXJtd2FyZS5hc20gYXMzMQorCWFzMzEtMi4xL2FzMzEgLUZiaW4gdXNiZHV4X2Zpcm13YXJlLmFzbQorCit1c2JkdXhzaWdtYV9maXJtd2FyZS5iaW46IGZ4Mi1pbmNsdWRlLmFzbSB1c2JkdXhzaWdtYV9maXJtd2FyZS5hc20gYXMzMQorCWFzMzEtMi4xL2FzMzEgLUZiaW4gdXNiZHV4c2lnbWFfZmlybXdhcmUuYXNtCisKK2NsZWFuOgorCXJtIC1mICouYmluICp+ICoubHN0ICouYmluCisJbWFrZSAtQyBhczMxLTIuMSBjbGVhbgpkaWZmIC0tZ2l0IGEvdXNiZHV4L1JFQURNRS5kdXggYi91c2JkdXgvUkVBRE1FLmR1eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2M4YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvdXNiZHV4L1JFQURNRS5kdXgKQEAgLTAsMCArMSwxNSBAQAorVG8gY29tcGlsZSB0aGUgZmlybXdhcmUgZm9yIHRoZSBVU0JEVVgsVVNCRFVYZmFzdCBhbmQgVVNCRFVYc2lnbWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEb3dubG9hZCB0aGUgYXMzMSBmcm9tOgorCitodHRwOi8vd3d3LmJlcm5kcG9yci5tZS51ay9hczMxLworCisodGhpcyBpcyBhIHBhdGNoZWQgdmVyc2lvbiBvZiBhczMxIHdoaWNoIHN1cHBvcnRzIGFuCitpbmNsdWRlIGRpcmVjdGl2ZSkuCisKK0luc3RhbGwgaXQgaW4gdGhpcyBkaXJlY3RvcnkuCisKK1RoZW4gcnVuICJtYWtlIC1mIE1ha2VmaWxlX2R1eCIuCisKK0ZlZWRiYWNrOgorQmVybmRQb3JyQGYycy5jb20KZGlmZiAtLWdpdCBhL3VzYmR1eC9meDItaW5jbHVkZS5hc20gYi91c2JkdXgvZngyLWluY2x1ZGUuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Nzc5OTYKLS0tIC9kZXYvbnVsbAorKysgYi91c2JkdXgvZngyLWluY2x1ZGUuYXNtCkBAIC0wLDAgKzEsMTY0IEBACis7IHJldiAwLjkxCis7IChjKSBCZXJuZCBQb3JyLCBCZXJuZFBvcnJAZjJzLmNvbQorOyBHUEwsIEdOVSBwdWJsaWMgbGljZW5zZQorOworOyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cis7ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorOyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCis7ICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCis7Cis7IEluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGFzMzEuCis7IEluY2x1ZGUtZmlsZSBmb3IgdGhlIEZYMiBieSBDeXByZXNzLiBUaGUgcmVzdCBvZiB0aGUgcmVncyBpcyBkZWZpbmVkCis7IGJ5IHRoZSBhczMxIGl0c2VsZi4KKzsKKzsgZnJvbSB0aGUgVFJNIG9mIHRoZSBGWDI6Cis7CisJOzsgIENQVSBjb250cm9sCisJLmVxdQlDUFVDUywwRTYwMEgKKwkuZXF1CVJFVkNUTCwwRTYwQkgKKwk7OyBpbnRlcmZhY2UgY29uZmlnCisJLmVxdQlJRkNPTkZJRywwRTYwMUgKKwkuZXF1CUZJRk9SRVNFVCwwRTYwNEgKKwk7OyBFbmRwb2ludCBjb25maWdzCisJLmVxdQlFUDFPVVRDRkcsMEU2MTBICisJLmVxdQlFUDFJTkNGRywwRTYxMUgKKwkuZXF1CUVQMkNGRywwRTYxMkgKKwkuZXF1CUVQNENGRywwRTYxM0gKKwkuZXF1CUVQNkNGRywwRTYxNEgKKwkuZXF1CUVQOENGRywwRTYxNUgKKwk7OyBwYWNrZXRzIHBlciBmcmFtZSwgYWx3YXlzIG9uZSBmb3IgVVNCIDEuMQorCS5lcXUJRVAySVNPSU5QS1RTLDBFNjQwSAorCS5lcXUJRVA0SVNPSU5QS1RTLDBFNjQxSAorCS5lcXUJRVA2SVNPSU5QS1RTLDBFNjQySAorCS5lcXUJRVA4SVNPSU5QS1RTLDBFNjQzSAorCTs7IGVuZHBvaW50IGJ5dGUgY291bnRzCisJLmVxdQlFUDFPVVRCQywwRTY4REgKKwkuZXF1CUVQMkJDSCwwRTY5MEgKKwkuZXF1CUVQMkJDTCwwRTY5MUgKKwkuZXF1CUVQNEJDSCwwRTY5NEgKKwkuZXF1CUVQNEJDTCwwRTY5NUgKKwkuZXF1CUVQNkJDSCwwRTY5OEgKKwkuZXF1CUVQNkJDTCwwRTY5OUgKKwkuZXF1CUVQOEJDSCwwRTY5Q0gKKwkuZXF1CUVQOEJDTCwwRTY5REgKKwk7OworCS5lcXUJRVA0QVVUT0lOTEVOSCwwRTYyMkgKKwkuZXF1CUVQNEFVVE9JTkxFTkwsMEU2MjNICisJLmVxdQlFUDZBVVRPSU5MRU5ILDBFNjI0SAorCS5lcXUJRVA2QVVUT0lOTEVOTCwwRTYyNUgKKwkuZXF1CUVQMkZJRk9DRkcsMEU2MThICisJLmVxdQlFUDRGSUZPQ0ZHLDBFNjE5SAorCS5lcXUJRVA2RklGT0NGRywwRTYxQUgKKwkuZXF1CUVQOEZJRk9DRkcsMEU2MUJICisJOzsgCisJLmVxdQlJTlBLVEVORCwwRTY0OEgKKwkuZXF1CU9VVFBLVEVORCwwRTY0OUgKKwkuZXF1CUdQSUZDVExDRkcsMEU2QzNICisJLmVxdQlHUElGQUJPUlQsMEU2RjVICisJLmVxdQlHUElGSURMRUNUTCwwRTZDMkgKKwkuZXF1CUdQSUZXRlNFTEVDVCwwRTZDMEgKKwkuZXF1CUdQSUZSRUFEWUNGRywwRTZGM0gKKwkuZXF1CUdQSUZJRExFQ1MsMEU2QzFICisJLmVxdQlFUDZHUElGRkxHU0VMLDBFNkUySAorCS5lcXUJRVA2R1BJRlBERlNUT1AsMEU2RTNICisJLmVxdQlFUDZHUElGVFJJRywwRTZFNEgKKwkuZXF1CUdQSUZUQ0IzLDBFNkNFSAorCS5lcXUJR1BJRlRDQjIsMEU2Q0ZICisJLmVxdQlHUElGVENCMSwwRTZEMEgKKwkuZXF1CUdQSUZUQ0IwLDBFNkQxSAorCS5lcXUJRVA0R1BJRkZMR1NFTCwwRTZEQUgKKwkuZXF1CUVQNEdQSUZQRlNUT1AsMEU2REJICisJOzsgCisJOzsgZW5kcG9pbnQgY29udHJvbAorCS5lcXUJRVAyQ1MsMEU2QTNICisJLmVxdQlFUDRDUywwRTZBNEgKKwkuZXF1CUVQNkNTLDBFNkE1SAorCS5lcXUJRVA4Q1MsMEU2QTZICisJOzsgZW5kcG9pbnQgYnVmZmVycworCS5lcXUJRVAyRklGT0JVRiwwRjAwMEgKKwkuZXF1CUVQNEZJRk9CVUYsMEY0MDBICisJLmVxdQlFUDZGSUZPQlVGLDBGODAwSAorCS5lcXUJRVA4RklGT0JVRiwwRkMwMEgKKwk7OyBJUlEgZW5hYmxlIGZvciBidWxrIE5BSworCS5lcXUJSUJOSUUsMEU2NThICisJOzsgaW50ZXJydXB0IHJlcXUgZm9yIE5BSworCS5lcXUJSUJOSVJRLDBFNjU5SAorCTs7IFVTQiBJTlQgZW5hYmxlcworCS5lcXUJVVNCSUUsMEU2NUNICisJOzsgVVNCIGludGVycnVwdCByZXF1ZXN0CisJLmVxdQlVU0JJUlEsMEU2NURICisJOzsgZW5kcG9pbnQgSVJRIGVuYWJsZQorCS5lcXUJRVBJRSwwRTY1RUgKKwk7OyBlbmRwb2ludCBJUlEgcmVxdWVzdHMKKwkuZXF1CUVQSVJRLDBFNjVGSAorCTs7IFVTQiBlcnJvciBJUlEgcmVxdWVzdHMKKwkuZXF1CVVTQkVSUklFLDBFNjYySAorCTs7IFVTQiBlcnJvciBJUlEgcmVxdWVzdAorCS5lcXUJVVNCRVJSSVJRLDBFNjYzSAorCTs7IFVTQiBpbnRlcnJ1cHQgMiBhdXRvdmVjdG9yCisJLmVxdQlJTlQySVZFQywwRTY2NkgKKwk7OyBhdXRvdmVjdG9yIGVuYWJsZQorCS5lcXUJSU5UU0VUVVAsMEU2NjhICisJOzsgcG9ydCBjZmcKKwkuZXF1CVBPUlRBQ0ZHLDBFNjcwSAorCS5lcXUJUE9SVENDRkcsMEU2NzFICisJLmVxdQlQT1JURUNGRywwRTY3MkgKKwk7OyBJMkMgYnVzCisJLmVxdQlJMkNTLDBFNjc4SAorCS5lcXUJSTJEQVQsMEU2NzlICisJLmVxdQlJMkNUTCwwRTY3QUgKKwk7OyBhdXRvIHBvaW50ZXJzLCByZWFkL3dyaXRlIGlzIGRpcmVjdGVkIHRvIHRoZSBwb2ludGVkIGFkZHJlc3MKKwkuZXF1CVhBVVRPREFUMSwwRTY3QkgKKwkuZXF1CVhBVVRPREFUMiwwRTY3Q0gKKwk7OyBVU0ItY29udHJvbAorCS5lcXUJVVNCQ1MsMEU2ODBICisKKwkuZXF1CUlPQSw4MEgKKwkuZXF1CURQTDAsODJICisJLmVxdQlEUEgwLDgzSAorCS5lcXUJRFBMMSw4NEgKKwkuZXF1CURQSDEsODVICisJLmVxdQlEUFMsODZICisJLmVxdQlDS0NPTiw4RWgKKwkuZXF1CUlPQiw5MEgKKwkuZXF1CUVYSUYsOTFoCisJLmVxdQlNUEFHRSw5MmgKKwkuZXF1CUFVVE9QVFJIMSw5QUgKKwkuZXF1CUFVVE9QVFJMMSw5QkgKKwkuZXF1CUFVVE9QVFJIMiw5REgKKwkuZXF1CUFVVE9QVFJMMiw5RUgKKwkuZXF1CUlPQywwQTBICisJLmVxdQlJTlQyQ0xSLDBBMUgKKwkuZXF1CUlOVDRDTFIsMEEySAorCS5lcXUJRVAyNDY4U1RBVCwwQUFICisJLmVxdQlFUDI0RklGT0ZMR1MsMEFCSAorCS5lcXUJRVA2OEZJRk9GTEdTLDBBQ0gKKwkuZXF1CUFVVE9QVFJTRVRVUCwwQUZICisJLmVxdQlJT0QsMEIwSAorCS5lcXUJSU9FLDBCMUgKKwkuZXF1CU9FQSwwQjJICisJLmVxdQlPRUIsMEIzSAorCS5lcXUJT0VDLDBCNEgKKwkuZXF1CU9FRCwwQjVICisJLmVxdQlPRUUsMEI2SAorCS5lcXUJR1BJRlRSSUcsMEJCSAorCS5lcXUJRUlFLDBFOGgKKwkuZXF1CUVJUCwwRjhoCisJLmVxdQlHUElGSUUsMEU2NjBICisKKzs7OyBzZXJpYWwgY29udHJvbAorCS5lcXUJU0NPTjAsMDk4aAorCS5lcXUJU0JVRjAsMDk5aAorCisJOzs7IGVuZCBvZiBmaWxlCisJCisKZGlmZiAtLWdpdCBhL3VzYmR1eC91c2JkdXhfZmlybXdhcmUuYXNtIGIvdXNiZHV4L3VzYmR1eF9maXJtd2FyZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzYTg5NQotLS0gL2Rldi9udWxsCisrKyBiL3VzYmR1eC91c2JkdXhfZmlybXdhcmUuYXNtCkBAIC0wLDAgKzEsMTE4NCBAQAorOyAgIHVzYmR1eF9maXJtd2FyZS5hc20KKzsgICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwOSBCZXJuZCBQb3JyLCBCZXJuZC5Qb3JyQGYycy5jb20KKzsgICBGb3IgdXNiZHV4LmMKKzsKKzsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorOyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKzsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorOyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorOworOworOyBGaXJtd2FyZTogdXNiZHV4X2Zpcm13YXJlLmFzbSBmb3IgdXNiZHV4LmMKKzsgRGVzY3JpcHRpb246IFVuaXZlcnNpdHkgb2YgU3RpcmxpbmcgVVNCIERBUSAmIElOQ0lURSBUZWNobm9sb2d5IExpbWl0ZWQKKzsgRGV2aWNlczogW0lUTF0gVVNCLURVWCAodXNiZHV4Lm8pCis7IEF1dGhvcjogQmVybmQgUG9yciA8QmVybmQuUG9yckBmMnMuY29tPgorOyBVcGRhdGVkOiAxNyBBcHIgMjAwOQorOyBTdGF0dXM6IHN0YWJsZQorOworOzs7Cis7OzsKKzs7OworCisJLmluYwlmeDItaW5jbHVkZS5hc20KKworCS5lcXUJQ0hBTk5FTExJU1QsODBoCTsgY2hhbm5lbGxpc3QgaW4gaW5kaXJlY3QgbWVtb3J5CisJCisJLmVxdQlDTURfRkxBRyw5MGgJOyBmbGFnIGlmIG5leHQgSU4gdHJhbnNmIGlzIERJTworCS5lcXUJU0dMQ0hBTk5FTCw5MWgJOyBjaGFubmVsIGZvciBJTlNOCisJLmVxdQlQV01GTEFHLDkyaAk7IFBXTQorCQorCS5lcXUJRElPU1RBVDAsOThoCTsgbGFzdCBzdGF0dXMgb2YgdGhlIGRpZ2l0YWwgcG9ydAorCS5lcXUJRElPU1RBVDEsOTloCTsgc2FtZSBmb3IgdGhlIHNlY29uZCBjb3VudGVyCisJCisJLmVxdQlDVFIwLDBBMEgJOyBjb3VudGVyIDAKKwkuZXF1CUNUUjEsMEEySAk7IGNvdW50ZXIgMQorCQkJCisJLm9yZwkwMDAwaAkJOyBhZnRlciByZXNldCB0aGUgcHJvY2Vzc29yIHN0YXJ0cyBoZXJlCisJbGptcAltYWluCQk7IGp1bXAgdG8gdGhlIG1haW4gbG9vcAorCisJLm9yZwkwMDBiaAkJOyB0aW1lciAwIGlycQorCWxqbXAJdGltZXIwX2lzcgorCisJLm9yZwkwMDQzaAkJOyB0aGUgSVJRMi12ZWN0b3IKKwlsam1wCWptcHRibAkJOyBpcnEgc2VydmljZS1yb3V0aW5lCisJCisJLm9yZwkwMTAwaAkJOyBzdGFydCBvZiB0aGUganVtcCB0YWJsZQorCitqbXB0Ymw6CWxqbXAJc3VkYXZfaXNyCisJbm9wCisJbGptcAlzb2ZfaXNyCisJbm9wCisJbGptcAlzdXRva19pc3IKKwlub3AKKwlsam1wCXN1c3BlbmRfaXNyCisJbm9wCisJbGptcAl1c2JyZXNldF9pc3IKKwlub3AKKwlsam1wCWhpc3BlZWRfaXNyCisJbm9wCisJbGptcAllcDBhY2tfaXNyCisJbm9wCisJbGptcAlzcGFyZV9pc3IKKwlub3AKKwlsam1wCWVwMGluX2lzcgorCW5vcAorCWxqbXAJZXAwb3V0X2lzcgorCW5vcAorCWxqbXAJZXAxaW5faXNyCisJbm9wCisJbGptcAllcDFvdXRfaXNyCisJbm9wCisJbGptcAllcDJfaXNyCisJbm9wCisJbGptcAllcDRfaXNyCisJbm9wCisJbGptcAllcDZfaXNyCisJbm9wCisJbGptcAllcDhfaXNyCisJbm9wCisJbGptcAlpYm5faXNyCisJbm9wCisJbGptcAlzcGFyZV9pc3IKKwlub3AKKwlsam1wCWVwMHBpbmdfaXNyCisJbm9wCisJbGptcAllcDFwaW5nX2lzcgorCW5vcAorCWxqbXAJZXAycGluZ19pc3IKKwlub3AKKwlsam1wCWVwNHBpbmdfaXNyCisJbm9wCisJbGptcAllcDZwaW5nX2lzcgorCW5vcAorCWxqbXAJZXA4cGluZ19pc3IKKwlub3AKKwlsam1wCWVycmxpbWl0X2lzcgorCW5vcAorCWxqbXAJc3BhcmVfaXNyCisJbm9wCisJbGptcAlzcGFyZV9pc3IKKwlub3AKKwlsam1wCXNwYXJlX2lzcgorCW5vcAorCWxqbXAJZXAyaXNvZXJyX2lzcgorCW5vcAorCWxqbXAJZXA0aXNvZXJyX2lzcgorCW5vcAorCWxqbXAJZXA2aXNvZXJyX2lzcgorCW5vcAorCWxqbXAJZXA4aXNvZXJyX2lzcgorCisJCisJOzsgZHVtbXkgaXNyCitzdWRhdl9pc3I6CQorc3V0b2tfaXNyOgkKK3N1c3BlbmRfaXNyOgkKK3VzYnJlc2V0X2lzcjoJCitoaXNwZWVkX2lzcjoJCitlcDBhY2tfaXNyOgkKK3NwYXJlX2lzcjoJCitlcDBpbl9pc3I6CQorZXAwb3V0X2lzcjoJCitlcDFpbl9pc3I6CQoraWJuX2lzcjoJCitlcDBwaW5nX2lzcjoJCitlcDFwaW5nX2lzcjoJCitlcDJwaW5nX2lzcjoJCitlcDRwaW5nX2lzcjoJCitlcDZwaW5nX2lzcjoJCitlcDhwaW5nX2lzcjoJCitlcnJsaW1pdF9pc3I6CQorZXAyaXNvZXJyX2lzcjoJCitlcDRpc29lcnJfaXNyOgkKK2VwNmlzb2Vycl9pc3I6CQorZXA4aXNvZXJyX2lzcjoKK2VwNl9pc3I6CitlcDJfaXNyOgorZXA0X2lzcjoJCisKKwlwdXNoCWRwcworCXB1c2gJZHBsCisJcHVzaAlkcGgKKwlwdXNoCWRwbDEKKwlwdXNoCWRwaDEKKwlwdXNoCWFjYworCXB1c2gJcHN3CisKKwk7OyBjbGVhciB0aGUgVVNCMiBpcnEgYml0IGFuZCByZXR1cm4KKwltb3YJYSxFWElGCisJY2xyCWFjYy40CisJbW92CUVYSUYsYQorCisJcG9wCXBzdworCXBvcAlhY2MgCisJcG9wCWRwaDEgCisJcG9wCWRwbDEKKwlwb3AJZHBoIAorCXBvcAlkcGwgCisJcG9wCWRwcworCQorCXJldGkKKworCQkKKzs7OyBtYWluIHByb2dyYW0KKzs7OyBiYXNpY2FsbHkgb25seSBpbml0aWFsaXNlcyB0aGUgcHJvY2Vzc29yIGFuZAorOzs7IHRoZW4gZW5nYWdlcyBpbiBhbiBlbmRsZXNzIGxvb3AKK21haW46CisJbW92CURQVFIsI0NQVUNTCTsgQ1BVIGNvbnRyb2wgcmVnaXN0ZXIKKwltb3YJYSwjMDAwMTAwMDBiCTsgNDhNaHoKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisgICAgICAgIG1vdiAgICAgZHB0ciwjUkVWQ1RMCisgICAgICAgIG1vdiAgICAgYSwjMDAwMDAwMTFiICAgIDsgYWxsb3dzIHNraXAKKyAgICAgICAgbGNhbGwgICBzeW5jZGVsYXl3cgorCisJbW92CUlQLCMwCQk7IGFsbCBzdGQgODA1MSBpbnQgaGF2ZSBsb3cgcHJpb3JpdHkKKwltb3YJRUlQLCMwRkZICTsgYWxsIEZYMiBpbnRlcnJ1cHRzIGhhdmUgaGlnaCBwcmlvcml0eQorCQorCW1vdglkcHRyLCNJTlRTRVRVUAk7IElSUSBzZXR1cCByZWdpc3RlcgorCW1vdglhLCMwOGgJCTsgZW5hYmxlIGF1dG92ZWN0b3IKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJbGNhbGwJaW5pdEFECQk7IGluaXQgdGhlIHBvcnRzIHRvIHRoZSBjb252ZXJ0ZXJzCisKKwlsY2FsbAlpbml0ZXBzCQk7IGluaXQgdGhlIGlzb2Nocm9ub3VzIGRhdGEtdHJhbnNmZXIKKworCWxjYWxsCWluaXRfdGltZXIKKwkKK21sb29wMjoJbm9wCisKKzs7OyBwd20KKwltb3YJcjAsI1BXTUZMQUcJOyBwd20gb24/CisJbW92CWEsQHIwCQk7IGdldCBpbmZvCisJanoJbWxvb3AyCQk7IGl0J3Mgb2ZmCisKKwltb3YJYSxHUElGVFJJRwk7IEdQSUYgc3RhdHVzCisJYW5sCWEsIzgwaAkJOyBkb25lIGJpdAorCWp6CW1sb29wMgkJOyBHUElGIHN0aWxsIGJ1c3kKKworICAgICAgICBtb3YgICAgIGEsIzAxaAkJOyBXUixFUDQsIDAxID0gRVA0CisgICAgICAgIG1vdiAgICAgR1BJRlRSSUcsYQk7IHJlc3RhcnQgaXQKKworCXNqbXAJbWxvb3AyCQk7IGxvb3AgZm9yIGV2ZXIKKworCis7OzsgR1BJRiB3YXZlZm9ybSBmb3IgUFdNCit3YXZlZm9ybToKKwk7OyAgICAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcobm90IHVzZWQpCisJOzsgbGVuIChnaXZlcyA1MC4wMDdIeikKKwkuZGIJMTk1LCAgMTk1LCAgMTk1LCAgMTk1LCAgMTk1LCAgMTk1LCAgMSwgICAgMQorCisJOzsgb3Bjb2RlCisJLmRiCTAwMkgsIDAwNkgsIDAwMkgsIDAwMkgsIDAwMkgsIDAwMkgsIDAwMkgsIDAwMkgKKwkKKwk7OyBvdXQKKwkuZGIJMGZmSCwgMGZmSCwgMGZmSCwgMGZmSCwgMGZmSCwgMGZmSCwgMGZmSCwgMGZmSAorCisJOzsgbG9nCisJLmRiCTAwMEgsIDAwMEgsIDAwMEgsIDAwMEgsIDAwMEgsIDAwMEgsIDAwMEgsIDAwMEgKKworCitzdG9wUFdNOgorCW1vdglyMCwjUFdNRkxBRwk7IGZsYWcgZm9yIFBXTQorCW1vdglhLCMwCQk7IFBXTSAoZm9yIHRoZSBtYWluIGxvb3ApCisJbW92CUByMCxhCQk7IHNldCBpdAorCisJbW92CWRwdHIsI0lGQ09ORklHCTsgc3dpdGNoIG9mZiBHUElGCisJbW92CWEsIzEwMDAwMDAwYgk7IGdwaWYsIDMwTUh6LCBpbnRlcm5hbCBJRkNMSworCWxjYWxsCXN5bmNkZWxheXdyCisJcmV0CisJCisKKzs7OyBpbml0IFBXTQorc3RhcnRQV006CisJbW92CWRwdHIsI0lGQ09ORklHCTsgc3dpdGNoIG9uIElGQ0xLIHNpZ25hbAorCW1vdglhLCMxMDAwMDAxMGIJOyBncGlmLCAzME1IeiwgaW50ZXJuYWwgSUZDTEsKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJbW92CU9FQiwwRkZICTsgb3V0cHV0IHRvIHBvcnQgQgorCisJbW92CURQVFIsI0VQNENGRworCW1vdglhLCMxMDEwMDAwMGIJOyB2YWxpZCwgb3V0LCBidWxrCisJbW92eAlARFBUUixhCisKKwk7OyByZXNldCB0aGUgZW5kcG9pbnQKKwltb3YJZHB0ciwjRklGT1JFU0VUCisJbW92CWEsIzgwaAkJOyBOQUsKKwlsY2FsbAlzeW5jZGVsYXl3cgorCW1vdglhLCM4NGgJCTsgcmVzZXQgRVA0ICsgTkFLCisJbGNhbGwJc3luY2RlbGF5d3IKKwltb3YJYSwjMAkJOyBub3JtYWwgb3AKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJbW92CWRwdHIsI0VQNEJDTAorCW1vdglhLCMwSAkJOyBkaXNjYXJkIHBhY2tldHMKKwlsY2FsbAlzeW5jZGVsYXl3cgk7IGVtcHR5IEZJRk8gYnVmZmVyCisJbGNhbGwJc3luY2RlbGF5d3IJOyBlbXB0eSBGSUZPIGJ1ZmZlcgorCisJOzsgYWJvcnRzIGFsbCB0cmFuc2ZlcnMgYnkgdGhlIEdQSUYKKwltb3YJZHB0ciwjR1BJRkFCT1JUCisJbW92CWEsIzBmZmgJCTsgYWJvcnQgYWxsIHRyYW5zZmVycworCWxjYWxsCXN5bmNkZWxheXdyCisKKwk7OyB3YWl0IGZvciBHUElGIHRvIGZpbmlzaAord2FpdF9mX2Fib3J0OgorCW1vdglhLEdQSUZUUklHCTsgR1BJRiBzdGF0dXMKKwlhbmwJYSwjODBoCQk7IGRvbmUgYml0CisJanoJd2FpdF9mX2Fib3J0CTsgR1BJRiBidXN5CisKKyAgICAgICAgbW92ICAgICBkcHRyLCNHUElGQ1RMQ0ZHCisgICAgICAgIG1vdiAgICAgYSwjMTAwMDAwMDBiICAgIDsgdHJpIHN0YXRlIGZvciBDVFJMCisgICAgICAgIGxjYWxsICAgc3luY2RlbGF5d3IKKworICAgICAgICBtb3YgICAgIGRwdHIsI0dQSUZJRExFQ1RMCisgICAgICAgIG1vdiAgICAgYSwjMTExMTAwMDBiICAgIDsgYWxsIENUTCBvdXRwdXRzIGxvdworICAgICAgICBsY2FsbCAgIHN5bmNkZWxheXdyCisKKwk7OyBhYm9ydCBpZiBGSUZPIGlzIGVtcHR5CisgICAgICAgIG1vdiAgICAgYSwjMDAwMDAwMDFiICAgIDsgYWJvcnQgaWYgZW1wdHkKKyAgICAgICAgbW92ICAgICBkcHRyLCNFUDRHUElGRkxHU0VMCisgICAgICAgIGxjYWxsICAgc3luY2RlbGF5d3IKKworCTs7IAorICAgICAgICBtb3YgICAgIGEsIzAwMDAwMDAxYiAgICA7IHN0b3AgaWYgR1BJRiBmbGcKKyAgICAgICAgbW92ICAgICBkcHRyLCNFUDRHUElGUEZTVE9QCisgICAgICAgIGxjYWxsICAgc3luY2RlbGF5d3IKKworCTs7IHRyYW5zYWN0aW9uIGNvdW50ZXIKKwltb3YJYSwjMGZmSAorCW1vdglkcHRyLCNHUElGVENCMworCWxjYWxsCXN5bmNkZWxheXdyCisKKwk7OyB0cmFuc2FjdGlvbiBjb3VudGVyCisJbW92CWEsIzBmZkgKKwltb3YJZHB0ciwjR1BJRlRDQjIKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJOzsgdHJhbnNhY3Rpb24gY291bnRlcgorCW1vdglhLCMwZmZICQk7IDUxMiBieXRlcworCW1vdglkcHRyLCNHUElGVENCMQorCWxjYWxsCXN5bmNkZWxheXdyCisKKwk7OyB0cmFuc2FjdGlvbiBjb3VudGVyCisJbW92CWEsIzBmZkgKKwltb3YJZHB0ciwjR1BJRlRDQjAKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJOzsgUkRZIHBpbnMuIE5vdCB1c2VkIGhlcmUuCisgICAgICAgIG1vdiAgICAgYSwjMAorICAgICAgICBtb3YgICAgIGRwdHIsI0dQSUZSRUFEWUNGRworICAgICAgICBsY2FsbCAgIHN5bmNkZWxheXdyCisKKwk7OyBkcml2ZXMgdGhlIG91dHB1dCBpbiB0aGUgSURMRSBzdGF0ZQorICAgICAgICBtb3YgICAgIGEsIzEKKyAgICAgICAgbW92ICAgICBkcHRyLCNHUElGSURMRUNTCisgICAgICAgIGxjYWxsICAgc3luY2RlbGF5d3IKKworCTs7IGRpcmVjdCBkYXRhIHRyYW5zZmVyIGZyb20gdGhlIEVQIHRvIHRoZSBHUElGCisJbW92CWRwdHIsI0VQNEZJRk9DRkcKKwltb3YJYSwjMDAwMTAwMDBiCTsgYXV0b291dD0xLCBieXRlLXdpZGUKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJOzsgd2F2ZWZvcm0gMCBpcyB1c2VkIGZvciBGSUZPIG91dAorCW1vdglkcHRyLCNHUElGV0ZTRUxFQ1QKKwltb3YJYSwjMDAwMDAwMDBiCisJbW92eAlAZHB0cixhCisJbGNhbGwJc3luY2RlbGF5CisKKwk7OyB0cmFuc2ZlciB0aGUgZGVsYXkgYnl0ZSBmcm9tIHRoZSBFUCB0byB0aGUgd2F2ZWZvcm0KKwltb3YJZHB0ciwjMGU3ODFoCTsgRVAxIGJ1ZmZlcgorCW1vdngJYSxAZHB0cgkJOyBnZXQgdGhlIGRlbGF5CisJbW92CWRwdHIsI3dhdmVmb3JtCTsgcG9pbnRzIHRvIHRoZSB3YXZlZm9ybQorCW1vdglyMiwjNgkJOyBmaWxsIDYgYnl0ZXMKK3RpbWxvb3A6CisJbW92eAlAZHB0cixhCQk7IHNhdmUgdGltaW5nIGluIGEgeHh4CisJaW5jCWRwdHIKKwlkam56CXIyLHRpbWxvb3AJOyBmaWxsIHRoZSA2IGRlbGF5IGJ5dGVzCisKKwk7OyBsb2FkIHdhdmVmb3JtCisgICAgICAgIG1vdiAgICAgQVVUT1BUUkgyLCMwRTRIIDsgWERBVEEwSAorICAgICAgICBsY2FsbCAgIHN5bmNkZWxheQorICAgICAgICBtb3YgICAgIEFVVE9QVFJMMiwjMDBIICA7IFhEQVRBMEwKKyAgICAgICAgbGNhbGwgICBzeW5jZGVsYXkKKworCW1vdglkcHRyLCN3YXZlZm9ybQk7IHBvaW50cyB0byB0aGUgd2F2ZWZvcm0KKwkKKyAgICAgICAgbW92ICAgICBBVVRPUFRSU0VUVVAsIzcgOyBhdXRvaW5jIGFuZCBlbmFibGUKKyAgICAgICAgbGNhbGwgICBzeW5jZGVsYXkKKworICAgICAgICBtb3YgICAgIHIyLCMyMEggICAgICAgICA7IDMyIGJ5dGVzIHRvIHRyYW5zZmVyCisKK3dhdmV0cjoKKyAgICAgICAgbW92eCAgICBhLEBkcHRyCisJaW5jCWRwdHIKKwlwdXNoCWRwbAorCXB1c2gJZHBoCisJcHVzaAlkcGwxCisJcHVzaAlkcGgxCisgICAgICAgIG1vdiAgICAgZHB0ciwjWEFVVE9EQVQyCisgICAgICAgIG1vdnggICAgQGRwdHIsYQorICAgICAgICBsY2FsbCAgIHN5bmNkZWxheQorCXBvcAlkcGgxIAorCXBvcAlkcGwxCisJcG9wCWRwaCAKKwlwb3AJZHBsCisgICAgICAgIGRqbnogICAgcjIsd2F2ZXRyCisKKwltb3YJZHB0ciwjT1VUUEtURU5ECisJbW92CWEsIzA4NEgKKwlsY2FsbAlzeW5jZGVsYXl3cgorCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJcjAsI1BXTUZMQUcJOyBmbGFnIGZvciBQV00KKwltb3YJYSwjMQkJOyBQV00gKGZvciB0aGUgbWFpbiBsb29wKQorCW1vdglAcjAsYQkJOyBzZXQgaXQKKworCXJldAorCisKKworOzs7IGluaXRpYWxpc2UgdGhlIHBvcnRzIGZvciB0aGUgQUQtY29udmVydGVyCitpbml0QUQ6CisJbW92CU9FQSwjMjdICTtQb3J0QTAsQTEsQTIsQTUgT3V0cHV0cworCW1vdglJT0EsIzIySAk7L0NTID0gMSwgZGlzYWJsZSB0cmFuc2ZlcnMgdG8gdGhlIGNvbnZlcnRlcnMKKwlyZXQKKworCis7OzsgaW5pdCB0aGUgdGltZXIgZm9yIHRoZSBzb2Z0IGNvdW50ZXJzCitpbml0X3RpbWVyOgorCTs7IGluaXQgdGhlIHRpbWVyIGZvciAybXMgc2FtcGxpbmcgcmF0ZQorCW1vdglDS0NPTiwjMDAwMDAwMDFiOyBDTEtPVVQvMTIgZm9yIHRpbWVyCisJbW92CVRMMCwjMDEwSAk7IDE2CisJbW92CVRIMCwjMEgJCTsgMjU2CisJbW92CUlFLCM4MkgJCTsgc3dpdGNoIG9uIHRpbWVyIGludGVycnVwdCAoODBIIGZvciBhbGwgSVJRcykKKwltb3YJVE1PRCwjMDAwMDAwMDBiCTsgMTMgYml0IGNvdW50ZXJzCisJc2V0YglUQ09OLjQJCTsgZW5hYmxlIHRpbWVyIDAKKwlyZXQKKworCis7OzsgZnJvbSBoZXJlIGl0J3Mgb25seSBJUlEgaGFuZGxpbmcuLi4KKwkKKzs7OyBBL0QtY29udmVyc2lvbjoKKzs7OyBjb250cm9sLWJ5dGUgaW4gYSwKKzs7OyByZXN1bHQgaW4gcjMobG93KSBhbmQgcjQoaGlnaCkKKzs7OyB0aGlzIHJvdXRpbmUgaXMgb3B0aW1pc2VkIGZvciBzcGVlZAorcmVhZEFEOgkJCQk7IG1hc2sgdGhlIGNvbnRyb2wgYnl0ZQorCWFubAlhLCMwMTExMTEwMGIJOyBvbmx5IHRoZSBjaGFubmVsLCBnYWluK3BvbCBhcmUgbGVmdAorCW9ybAlhLCMxMDAwMDAwMWIJOyBzdGFydCBiaXQsIGV4dGVybmFsIGNsb2NrCisJOzsgc2V0IENTIHRvIGxvdworCWNscglJT0EuMQkJOyBzZXQgL0NTIHRvIHplcm8KKwk7OyBzZW5kIHRoZSBjb250cm9sIGJ5dGUgdG8gdGhlIEFELWNvbnZlcnRlcgorCW1vdiAJUjIsIzgJCTsgYml0LWNvdW50ZXIKK2JpdGxwOglqbmIgICAgIEFDQy43LGJpdHplcm8JOyBqdW1wIGlmIEJpdDcgPSAwPworCXNldGIJSU9BLjIJCTsgc2V0IHRoZSBESU4gYml0CisJc2ptcAljbG9jawkJOyBjb250aW51ZSB3aXRoIHRoZSBjbG9jaworYml0emVybzpjbHIJSU9BLjIJCTsgY2xlYXIgdGhlIERJTiBiaXQKK2Nsb2NrOglzZXRiCUlPQS4wCQk7IFNDTEsgPSAxCisJY2xyCUlPQS4wCQk7IFNDTEsgPSAwCisgICAgICAgIHJsICAgICAgYSAgICAgICAgICAgICAgIDsgbmV4dCBCaXQKKyAgICAgICAgZGpueiAgICBSMixiaXRscAorCisJOzsgY29udGludWUgdGhlIGFxdWlzaXRpb24gKGFscmVhZHkgc3RhcnRlZCkKKwljbHIJSU9BLjIJCTsgY2xlYXIgdGhlIERJTiBiaXQKKwltb3YgCVIyLCM1CQk7IGZpdmUgc3RlcHMgZm9yIHRoZSBhcXVpc2lvbgorY2xvY2thcTpzZXRiCUlPQS4wCQk7IFNDTEsgPSAxCisJY2xyCUlPQS4wCQk7IFNDTEsgPSAwCisgICAgICAgIGRqbnogICAgUjIsY2xvY2thcQk7IGxvb3AKKwkKKwk7OyByZWFkIGhpZ2hieXRlIGZyb20gdGhlIEEvRC1jb252ZXJ0ZXIKKwk7OyBhbmQgZG8gdGhlIGNvbnZlcnNpb24KKwltb3YJcjQsIzAgCQk7IEhpZ2hieXRlIGdvZXMgaW50byBSNAorCW1vdglSMiwjNAkJOyBDT1VOVEVSIDQgZGF0YSBiaXRzIGluIHRoZSBNU0IKKwltb3YJcjUsIzA4aAkJOyBjcmVhdGUgYml0LW1hc2sKK2dldGhpOgkJCQk7IGxvb3AgZ2V0IHRoZSA4IGhpZ2hlc3QgYml0cyBmcm9tIE1TQiBkb3dudworCXNldGIJSU9BLjAJCTsgU0NMSyA9IDEKKwljbHIJSU9BLjAJCTsgU0NMSyA9IDAKKwltb3YJYSxJT0EJCTsgZnJvbSBwb3J0IEEKKwlqbmIJQUNDLjQsemVyb2IJOyB0aGUgaW4tYml0IGlzIHplcm8KKwltb3YJYSxyNAkJOyBnZXQgdGhlIGJ5dGUKKwlvcmwJYSxyNQkJOyBvciB0aGUgYml0IHRvIHRoZSByZXN1bHQKKwltb3YJcjQsYQkJOyBzYXZlIGl0IGFnYWluIGluIHI0Cit6ZXJvYjoJbW92CWEscjUJCTsgZ2V0IHI1IGluIG9yZGVyIHRvIHNoaWZ0IHRoZSBtYXNrCisJcnIJYQkJOyByb3RhdGUgcmlnaHQKKwltb3YJcjUsYQkJOyBiYWNrIHRvIHI1CisJZGpueglSMixnZXRoaQorCTs7IHJlYWQgdGhlIGxvd2J5dGUgZnJvbSB0aGUgQS9ELWNvbnZlcnRlcgorCW1vdglyMywjMCAJCTsgTG93Ynl0ZSBnb2VzIGludG8gUjMKKwltb3YJcjIsIzgJCTsgQ09VTlRFUiA4IGRhdGEtYml0cyBpbiB0aGUgTFNCCisJbW92CXI1LCM4MGgJCTsgY3JlYXRlIGJpdC1tYXNrCitnZXRsbzoJCQkJOyBsb29wIGdldCB0aGUgOCBoaWdoZXN0IGJpdHMgZnJvbSBNU0IgZG93bncKKwlzZXRiCUlPQS4wCQk7IFNDTEsgPSAxCisJY2xyCUlPQS4wCQk7IFNDTEsgPSAwCisJbW92CWEsSU9BCQk7IGZyb20gcG9ydCBBCisJam5iCUFDQy40LHplcm9iMgk7IHRoZSBpbi1iaXQgaXMgemVybworCW1vdglhLHIzCQk7IGdldCB0aGUgcmVzdWx0LWJ5dGUKKwlvcmwJYSxyNQkJOyBvciB0aGUgYml0IHRvIHRoZSByZXN1bHQKKwltb3YJcjMsYQkJOyBzYXZlIGl0IGFnYWluIGluIHI0Cit6ZXJvYjI6CW1vdglhLHI1CQk7IGdldCByNSBpbiBvcmRlciB0byBzaGlmdCB0aGUgbWFzaworCXJyCWEJCTsgcm90YXRlIHJpZ2h0CisJbW92CXI1LGEJCTsgYmFjayB0byByNQorCWRqbnoJUjIsZ2V0bG8KKwlzZXRiCUlPQS4xCQk7IHNldCAvQ1MgdG8gb25lCisJOzsKKwlyZXQKKwkKKworCQorOzs7IGFxdWlyZXMgZGF0YSBmcm9tIEEvRCBjaGFubmVscyBhbmQgc3RvcmVzIHRoZW0gaW4gdGhlIEVQNiBidWZmZXIKK2NvbnZfYWQ6CisJbW92CUFVVE9QVFJIMSwjMEY4SAk7IGF1dG8gcG9pbnRlciBvbiBFUDYKKwltb3YJQVVUT1BUUkwxLCMwMEgKKwltb3YJQVVUT1BUUlNFVFVQLCM3CisJbW92CXIwLCNDSEFOTkVMTElTVAk7IHBvaW50cyB0byB0aGUgY2hhbm5lbGxpc3QKKworCW1vdglhLEByMAkJOyBudW1iZXIgb2YgY2hhbm5lbHMKKwltb3YJcjEsYQkJOyBjb3VudGVyCisKKwltb3YgCURQVFIsI1hBVVRPREFUMQk7IGF1dG8gcG9pbnRlcgorY29udmxvb3A6CisJaW5jCXIwCisJbW92IAlhLEByMAkJOyBDaGFubmVsCisJbGNhbGwgCXJlYWRBRAorCW1vdiAJYSxSMwkJOworCW1vdnggCUBEUFRSLEEKKwltb3YgCWEsUjQJCTsKKwltb3Z4IAlARFBUUixBCisJZGpueglyMSxjb252bG9vcAorCisJcmV0CisKKworCisKKzs7OyBpbml0aWxpc2UgdGhlIHRyYW5zZmVyCis7OzsgSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBVU0IgaW50ZXJmYWNlIGlzIGluIGFsdGVybmF0ZSBzZXR0aW5nIDMKK2luaXRlcHM6CisJbW92CWRwdHIsI0ZJRk9SRVNFVAorCW1vdglhLCM4MEgJCQorCW1vdngJQGRwdHIsYQkJOyByZXNldCBhbGwgZmlmb3MKKwltb3YJYSwjMgkKKwltb3Z4CUBkcHRyLGEJCTsgCisJbW92CWEsIzQJCQorCW1vdngJQGRwdHIsYQkJOyAKKwltb3YJYSwjNgkJCisJbW92eAlAZHB0cixhCQk7IAorCW1vdglhLCM4CQkKKwltb3Z4CUBkcHRyLGEJCTsgCisJbW92CWEsIzAJCQorCW1vdngJQGRwdHIsYQkJOyBub3JtYWwgb3BlcmF0CisJCisJbW92CURQVFIsI0VQMkNGRworCW1vdglhLCMxMDAxMDAxMGIJOyB2YWxpZCwgb3V0LCBkb3VibGUgYnVmZiwgaXNvCisJbW92eAlARFBUUixhCisKKwltb3YJZHB0ciwjRVAyRklGT0NGRworCW1vdglhLCMwMDAwMDAwMGIJOyBtYW51YWwKKwltb3Z4CUBkcHRyLGEKKworCW1vdglkcHRyLCNFUDJCQ0wJOyAiYXJtIiBpdAorCW1vdglhLCMwMGgKKwltb3Z4CUBEUFRSLGEJCTsgY2FuIHJlY2VpdmUgZGF0YQorCWxjYWxsCXN5bmNkZWxheQk7IHdhaXQgdG8gc3luYworCW1vdngJQERQVFIsYQkJOyBjYW4gcmVjZWl2ZSBkYXRhCisJbGNhbGwJc3luY2RlbGF5CTsgd2FpdCB0byBzeW5jCisJbW92eAlARFBUUixhCQk7IGNhbiByZWNlaXZlIGRhdGEKKwlsY2FsbAlzeW5jZGVsYXkJOyB3YWl0IHRvIHN5bmMKKwkKKwltb3YJRFBUUiwjRVAxT1VUQ0ZHCisJbW92CWEsIzEwMTAwMDAwYgk7IHZhbGlkCisJbW92eAlAZHB0cixhCisKKwltb3YJZHB0ciwjRVAxT1VUQkMJOyAiYXJtIiBpdAorCW1vdglhLCMwMGgKKwltb3Z4CUBEUFRSLGEJCTsgY2FuIHJlY2VpdmUgZGF0YQorCWxjYWxsCXN5bmNkZWxheQk7IHdhaXQgdW50aWwgd2UgY2FuIHdyaXRlIGFnYWluCisJbW92eAlAZHB0cixhCQk7IG1ha2Ugc2h1cmUgaXRzIHJlYWxseSBlbXB0eQorCWxjYWxsCXN5bmNkZWxheQk7IHdhaXQKKworCW1vdglEUFRSLCNFUDZDRkcJOyBJU08gZGF0YSBmcm9tIGhlcmUgdG8gdGhlIGhvc3QKKwltb3YJYSwjMTEwMTAwMTBiCTsgVmFsaWQKKwltb3Z4CUBEUFRSLGEJCTsgSVNPIHRyYW5zZmVyLCBkb3VibGUgYnVmZmVyaW5nCisKKwltb3YJRFBUUiwjRVA4Q0ZHCTsgRVA4CisJbW92CWEsIzExMTAwMDAwYgk7IEJVTEsgZGF0YSBmcm9tIGhlcmUgdG8gdGhlIGhvc3QKKwltb3Z4CUBEUFRSLGEJCTsKKworCW1vdglkcHRyLCNFUElFCTsgaW50ZXJydXB0IGVuYWJsZQorCW1vdglhLCMxMDAwMTAwMGIJOyBlbmFibGUgaXJxIGZvciBlcDFvdXQsOAorCW1vdngJQGRwdHIsYQkJOyBkbyBpdAorCisJbW92CWRwdHIsI0VQSVJRCTsgY2xlYXIgSVJRcworCW1vdglhLCMxMDEwMDAwMGIKKwltb3Z4CUBkcHRyLGEKKworCTs7IGVuYWJsZSBpbnRlcnJ1cHMKKyAgICAgICAgbW92ICAgICBEUFRSLCNVU0JJRQk7IFVTQiBpbnQgZW5hYmxlcyByZWdpc3RlcgorICAgICAgICBtb3YgICAgIGEsIzIgICAgICAgICAgICA7IGVuYWJsZXMgU09GICgxbXMvMTI1dXMgaW50ZXJydXB0KQorICAgICAgICBtb3Z4ICAgIEBEUFRSLGEgICAgICAgICA7IAorCisJbW92CUVJRSwjMDAwMDAwMDFiCTsgZW5hYmxlIElOVDIgaW4gdGhlIDgwNTEncyBTRlIKKwltb3YJSUUsIzgwaAkJOyBJRSwgZW5hYmxlIGFsbCBpbnRlcnJ1cHRzCisKKwlyZXQKKworCis7OzsgY291bnRlcgorOzs7IHIwOiBESU9TVEFUCis7OzsgcjE6CWNvdW50ZXIgYWRkcmVzcworOzs7IHIyOgl1cC9kb3duLW1hc2sKKzs7OyByMzoJcmVzZXQtbWFzaworOzs7IHI0OgljbG9jay1tYXNrCitjb3VudGVyOgkKKwltb3YJYSxJT0IJCTsgYWN0dWFsIElPQiBpbnB1dCBzdGF0ZQorCW1vdglyNSxhCQk7IHNhdmUgaW4gcjUKKwlhbmwJYSxyMwkJOyBiaXQgbWFzayBmb3IgcmVzZXQKKwlqeglub19yZXNldAk7IHJlc2V0IGlmIG9uZQorCWNscglhCQk7IHNldCBjb3VudGVyIHRvIHplcm8KKwltb3YJQHIxLGEKKwlpbmMJcjQKKwltb3YJQHIxLGEKKwlzam1wCWN0cl9lbmQKK25vX3Jlc2V0OgkKKwltb3YJYSxAcjAJCTsgZ2V0IGxhc3Qgc3RhdGUKKwl4cmwJYSxyNQkJOyBoYXMgaXQgY2hhbmdlZD8KKwlhbmwJYSxyNQkJOyBpcyBpdCBub3cgb24/CisJYW5sCWEscjQJCTsgbWFzayBvdXQgdGhlIHBvcnQKKwlqegljdHJfZW5kCQk7IG5vIHJpc2luZyBlZGdlCisJbW92CWEscjUJCTsgZ2V0IHBvcnQgQiBhZ2FpbgorCWFubAlhLHIyCQk7IHRlc3QgaWYgdXAgb3IgZG93bgorCWpuegljdHJfdXAJCTsgY291bnQgdXAKKwltb3YJYSxAcjEKKwlkZWMJYQorCW1vdglAcjEsYQorCWNqbmUJYSwjMGZmaCxjdHJfZW5kCTsgdW5kZXJmbG93PworCWluYwlyMQkJOyBoaWdoIGJ5dGUKKwltb3YJYSxAcjEKKwlkZWMJYQorCW1vdglAcjEsYQorCXNqbXAJY3RyX2VuZAorY3RyX3VwOgkJCQk7IGNvdW50IHVwCisJbW92CWEsQHIxCisJaW5jCWEKKwltb3YJQHIxLGEKKwlqbnoJY3RyX2VuZAorCWluYwlyMQkJOyBoaWdoIGJ5dGUKKwltb3YJYSxAcjEKKwlpbmMJYQorCW1vdglAcjEsYQorY3RyX2VuZDoKKwltb3YJYSxyNQorCW1vdglAcjAsYQorCXJldAorCis7OzsgaW1wbGVtZW50cyB0d28gc29mdCBjb3VudGVycyB3aXRoIHVwL2Rvd24gYW5kIHJlc2V0Cit0aW1lcjBfaXNyOgorCXB1c2gJZHBzCisJcHVzaAlhY2MKKwlwdXNoCXBzdworCXB1c2gJMDBoCQk7IFIwCisJcHVzaAkwMWgJCTsgUjEKKwlwdXNoCTAyaAkJOyBSMgorCXB1c2gJMDNoCQk7IFIzCisJcHVzaAkwNGgJCTsgUjQKKwlwdXNoCTA1aAkJOyBSNQorCQkKKwltb3YJcjAsI0RJT1NUQVQwCTsgc3RhdHVzIG9mIHBvcnQKKwltb3YJcjEsI0NUUjAJOyBhZGRyZXNzIG9mIGNvdW50ZXIwCisJbW92CWEsIzAwMDAwMDAxYgk7IGJpdCAwCisJbW92CXI0LGEJCTsgY2xvY2sKKwlybAlhCQk7IGJpdCAxCisJbW92CXIyLGEJCTsgdXAvZG93bgorCXJsCWEJCTsgYml0IDIKKwltb3YJcjMsYQkJOyByZXNldCBtYXNrCisJbGNhbGwJY291bnRlcgorCWluYwlyMAkJOyB0byBESVNUQVQxCisJaW5jCXIxCQk7IHRvIENUUjEKKwlpbmMJcjEKKwltb3YJYSxyMworCXJsCWEJCTsgYml0IDMKKwlybAlhCQk7IGJpdCA0CisJbW92CXI0LGEJCTsgY2xvY2sKKwlybAlhCQk7IGJpdCA1CisJbW92CXIyLGEJCTsgdXAvZG93bgorCXJsCWEJCTsgYml0IDYKKwltb3YJcjMsYQkJOyByZXNldAorCWxjYWxsCWNvdW50ZXIKKwkKKwlwb3AJMDVoCQk7IFI1CisJcG9wCTA0aAkJOyBSNAorCXBvcAkwM2gJCTsgUjMKKwlwb3AJMDJoCQk7IFIyCisJcG9wCTAxaAkJOyBSMQorCXBvcAkwMGgJCTsgUjAKKwlwb3AJcHN3CisJcG9wCWFjYyAKKwlwb3AJZHBzCisKKwlyZXRpCisKKzs7OyBpbnRlcnJ1cHQtcm91dGluZSBmb3IgU09GCis7OzsgaXMgZm9yIGZ1bGwgc3BlZWQKK3NvZl9pc3I6CisJcHVzaAlkcHMKKwlwdXNoCWRwbAorCXB1c2gJZHBoCisJcHVzaAlkcGwxCisJcHVzaAlkcGgxCisJcHVzaAlhY2MKKwlwdXNoCXBzdworCXB1c2gJMDBoCQk7IFIwCisJcHVzaAkwMWgJCTsgUjEKKwlwdXNoCTAyaAkJOyBSMgorCXB1c2gJMDNoCQk7IFIzCisJcHVzaAkwNGgJCTsgUjQKKwlwdXNoCTA1aAkJOyBSNQorCXB1c2gJMDZoCQk7IFI2CisJcHVzaAkwN2gJCTsgUjcKKwkJCisJbW92CWEsRVAyNDY4U1RBVAorCWFubAlhLCMyMEgJCTsgZnVsbD8KKwlqbnoJZXBmdWxsCQk7IEVQNi1idWZmZXIgaXMgZnVsbAorCisJbGNhbGwJY29udl9hZAkJOyBjb252ZXJzaW9uCisKKwltb3YJRFBUUiwjRVA2QkNICTsgYnl0ZSBjb3VudCBICisJbW92CWEsIzAJCTsgaXMgemVybworCWxjYWxsCXN5bmNkZWxheXdyCTsgd2FpdCB1bnRpbCB3ZSBjYW4gd3JpdGUgYWdhaW4KKwkKKwltb3YJRFBUUiwjRVA2QkNMCTsgYnl0ZSBjb3VudCBMCisJbW92CWEsIzEwSAkJOyBpcyA4eCB3b3JkID0gMTYgYnl0ZXMKKwlsY2FsbAlzeW5jZGVsYXl3cgk7IHdhaXQgdW50aWwgd2UgY2FuIHdyaXRlIGFnYWluCisJCitlcGZ1bGw6CisJOzsgZG8gdGhlIEQvQSBjb252ZXJzaW9uCisJbW92CWEsRVAyNDY4U1RBVAorCWFubAlhLCMwMUgJCTsgZW1wdHkKKwlqbnoJZXBlbXB0eQkJOyBub3RoaW5nIHRvIGdldAorCisJbW92CWRwdHIsIzBGMDAwSAk7IEVQMiBmaWZvIGJ1ZmZlcgorCWxjYWxsCWRhbG8JCTsgY29udmVyc2lvbgorCisJbW92CWRwdHIsI0VQMkJDTAk7ICJhcm0iIGl0CisJbW92CWEsIzAwaAorCWxjYWxsCXN5bmNkZWxheXdyCTsgd2FpdCBmb3IgdGhlIHJlYyB0byBzeW5jCisJbGNhbGwJc3luY2RlbGF5d3IJOyB3YWl0IGZvciB0aGUgcmVjIHRvIHN5bmMKKworZXBlbXB0eToJCisJOzsgY2xlYXIgSU5UMgorCW1vdglhLEVYSUYJCTsgRklSU1QgY2xlYXIgdGhlIFVTQiAoSU5UMikgaW50ZXJydXB0IHJlcXVlc3QKKwljbHIJYWNjLjQKKwltb3YJRVhJRixhCQk7IE5vdGU6IEVYSUYgcmVnIGlzIG5vdCA4MDUxIGJpdC1hZGRyZXNzYWJsZQorCQorCW1vdglEUFRSLCNVU0JJUlEJOyBwb2ludHMgdG8gdGhlIFNPRgorCW1vdglhLCMyCQk7IGNsZWFyIHRoZSBTT0YKKwltb3Z4CUBEUFRSLGEKKworbm9zb2Y6CQorCXBvcAkwN2gKKwlwb3AJMDZoCisJcG9wCTA1aAorCXBvcAkwNGgJCTsgUjQKKwlwb3AJMDNoCQk7IFIzCisJcG9wCTAyaAkJOyBSMgorCXBvcAkwMWgJCTsgUjEKKwlwb3AJMDBoCQk7IFIwCisJcG9wCXBzdworCXBvcAlhY2MgCisJcG9wCWRwaDEgCisJcG9wCWRwbDEKKwlwb3AJZHBoIAorCXBvcAlkcGwgCisJcG9wCWRwcworCXJldGkKKworCityZXNldF9lcDg6CisJOzsgZXJhc2UgYWxsIGRhdGEgaW4gZXA4CisJbW92CWRwdHIsI0ZJRk9SRVNFVAorCW1vdglhLCM4MEgJCTsgTkFLCisJbGNhbGwJc3luY2RlbGF5d3IKKwltb3YJZHB0ciwjRklGT1JFU0VUCisJbW92CWEsIzgJCTsgcmVzZXQgRVA4CisJbGNhbGwJc3luY2RlbGF5d3IKKwltb3YJZHB0ciwjRklGT1JFU0VUCisJbW92CWEsIzAJCTsgbm9ybWFsIG9wZXJhdGlvbgorCWxjYWxsCXN5bmNkZWxheXdyCisJcmV0CisKKworcmVzZXRfZXA2OgorCTs7IHRocm93IG91dCBvbGQgZGF0YQorCW1vdglkcHRyLCNGSUZPUkVTRVQKKwltb3YJYSwjODBICQk7IE5BSworCWxjYWxsCXN5bmNkZWxheXdyCisJbW92CWRwdHIsI0ZJRk9SRVNFVAorCW1vdglhLCM2CQk7IHJlc2V0IEVQNgorCWxjYWxsCXN5bmNkZWxheXdyCisJbW92CWRwdHIsI0ZJRk9SRVNFVAorCW1vdglhLCMwCQk7IG5vcm1hbCBvcGVyYXRpb24KKwlsY2FsbAlzeW5jZGVsYXl3cgorCXJldAorCis7OzsgaW50ZXJydXB0LXJvdXRpbmUgZm9yIGVwMW91dAorOzs7IHJlY2VpdmVzIHRoZSBjaGFubmVsIGxpc3QgYW5kIG90aGVyIGNvbW1hbmRzCitlcDFvdXRfaXNyOgorCXB1c2gJZHBzCisJcHVzaAlkcGwKKwlwdXNoCWRwaAorCXB1c2gJZHBsMQorCXB1c2gJZHBoMQorCXB1c2gJYWNjCisJcHVzaAlwc3cKKwlwdXNoCTAwaAkJOyBSMAorCXB1c2gJMDFoCQk7IFIxCisJcHVzaAkwMmgJCTsgUjIKKwlwdXNoCTAzaAkJOyBSMworCXB1c2gJMDRoCQk7IFI0CisJcHVzaAkwNWgJCTsgUjUKKwlwdXNoCTA2aAkJOyBSNgorCXB1c2gJMDdoCQk7IFI3CisJCQorCW1vdglkcHRyLCMwRTc4MGgJOyBGSUZPIGJ1ZmZlciBvZiBFUDFPVVQKKwltb3Z4CWEsQGRwdHIJCTsgZ2V0IHRoZSBmaXJzdCBieXRlCisJbW92CXIwLCNDTURfRkxBRwk7IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgYnl0ZQorCW1vdiAJQHIwLGEJCTsgc3RvcmUgdGhlIGNvbW1hbmQgYnl0ZSBmb3IgZXA4CisKKwltb3YJZHB0ciwjZXAxb3V0X2ptcDsganVtcCB0YWJsZSBmb3IgdGhlIGRpZmZlcmVudCBmdW5jdGlvbnMKKwlybAlhCQk7IG11bHRpcGx5IGJ5IDI6IHNpemVvZiBzam1wCisJam1wCUBhK2RwdHIJCTsganVtcCB0byB0aGUganVtcCB0YWJsZQorCTs7IGp1bXAgdGFibGUsIGNvcnJlc3BvbmRzIHRvIHRoZSBjb21tYW5kIGJ5dGVzIGRlZmluZWQKKwk7OyBpbiB1c2JkdXguYworZXAxb3V0X2ptcDoKKwlzam1wCXN0b3JlY2hhbm5lbGxpc3Q7IGE9MAorCXNqbXAJc2luZ2xlX2RhCTsgYT0xCisJc2ptcAljb25maWdfZGlnaXRhbF9iOyBhPTIKKwlzam1wCXdyaXRlX2RpZ2l0YWxfYgk7IGE9MworCXNqbXAJc3RvcmVzZ2xjaGFubmVsCTsgYT00CisJc2ptcAlyZWFkY291bnRlcgk7IGE9NQorCXNqbXAJd3JpdGVjb3VudGVyCTsgYT02CisJc2ptcAlwd21fb24JCTsgYT03CisJc2ptcAlwd21fb2ZmCQk7IGE9OAorCitwd21fb246CisJbGNhbGwJc3RhcnRQV00KKwlzam1wCW92ZXJfZGEKKworcHdtX29mZjoKKwlsY2FsbAlzdG9wUFdNCisJc2ptcAlvdmVyX2RhCisKKwk7OyByZWFkIHRoZSBjb3VudGVyCityZWFkY291bnRlcjoKKwlsY2FsbAlyZXNldF9lcDgJOyByZXNldCBlcDgKKwlsY2FsbAllcDhfb3BzCQk7IGZpbGwgdGhlIGNvdW50ZXIgZGF0YSBpbiB0aGVyZQorCXNqbXAJb3Zlcl9kYQkJOyBqdW1wIHRvIHRoZSBlbmQKKworCTs7IHdyaXRlIHplcm9lcyB0byB0aGUgY291bnRlcnMKK3dyaXRlY291bnRlcjoKKwltb3YJZHB0ciwjMGU3ODFoCTsgYnVmZmVyCisJbW92CXIwLCNDVFIwCTsgcjAgcG9pbnRzIHRvIGNvdW50ZXIgMAorCW1vdngJYSxAZHB0cgkJOyBjaGFubmVsIG51bWJlcgorCWp6CXdyY3RyMAkJOyBmaXJzdCBjaGFubmVsCisJbW92CXIxLGEJCTsgY291bnRlcgord3JjdHJsOgorCWluYwlyMAkJOyBuZXh0IGNvdW50ZXIKKwlpbmMJcjAJCTsgbmV4dCBjb3VudGVyCisJZGpueglyMSx3cmN0cmwJOyBhZHZhbmNlIHRvIHRoZSByaWdodCBjb3VudGVyCit3cmN0cjA6CisJaW5jCWRwdHIJCTsgZ2V0IHRvIHRoZSB2YWx1ZQorCW1vdngJYSxAZHB0cgkJOyBnZXQgdmFsdWUKKwltb3YJQHIwLGEJCTsgc2F2ZSBpbiBjdHIKKwlpbmMJcjAJCTsgbmV4dCBieXRlCisJaW5jCWRwdHIKKwltb3Z4CWEsQGRwdHIJCTsgZ2V0IHZhbHVlCisJbW92CUByMCxhCQk7IHNhdmUgaW4gY3RyCisJc2ptcAlvdmVyX2RhCQk7IGp1bXAgdG8gdGhlIGVuZAorCitzdG9yZXNnbGNoYW5uZWw6CisJbW92CXIwLCNTR0xDSEFOTkVMCTsgdGhlIGNvbnZlcnNpb24gYnl0ZXMgYXJlIG5vdyBzdG9yZWQgaW4gODBoCisJbW92CWRwdHIsIzBlNzgxaAk7IEZJRk8gYnVmZmVyIG9mIEVQMU9VVAorCW1vdngJYSxAZHB0cgkJOyAKKwltb3YJQHIwLGEKKworCWxjYWxsCXJlc2V0X2VwOAk7IHJlc2V0IEZJRk8KKwk7OyBTYXZlIG5ldyBBL0QgZGF0YSBpbiBFUDguIFRoaXMgaXMgdGhlIGZpcnN0IGJ5dGUKKwk7OyB0aGUgaG9zdCB3aWxsIHJlYWQgZHVyaW5nIGFuIElOU04uIElmIHRoZXJlIGFyZQorCTs7IG1vcmUgdG8gY29tZSB0aGV5IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgSVNSIG9mCisJOzsgZXA4LgorCWxjYWxsCWVwOF9vcHMJCTsgZ2V0IEEvRCBkYXRhCisJCQorCXNqbXAJb3Zlcl9kYQorCisJCis7OzsgQ2hhbm5lbGxpc3Q6Cis7OzsgdGhlIGZpcnN0IGJ5dGUgaXMgemVybzoKKzs7OyB3ZSd2ZSBqdXN0IHJlY2VpdmVkIHRoZSBjaGFubmVsIGxpc3QKKzs7OyB0aGUgY2hhbm5lbCBsaXN0IGlzIHN0b3JlZCBpbiB0aGUgYWRkcmVzc2VzIGZyb20gQ0hBTk5FTExJU1Qgd2hpY2gKKzs7OyBhcmUgX29ubHlfIHJlYWNoYWJsZSBieSBpbmRpcmVjdCBhZGRyZXNzaW5nCitzdG9yZWNoYW5uZWxsaXN0OgorCW1vdglyMCwjQ0hBTk5FTExJU1QJOyB0aGUgY29udmVyc2lvbiBieXRlcyBhcmUgbm93IHN0b3JlZCBpbiA4MGgKKwltb3YJcjIsIzkJCTsgY291bnRlcgorCW1vdglkcHRyLCMwZTc4MWgJOyBGSUZPIGJ1ZmZlciBvZiBFUDFPVVQKK2NoYW5sbG9vcDoJCisJbW92eAlhLEBkcHRyCQk7IAorCW1vdglAcjAsYQorCWluYwlkcHRyCisJaW5jCXIwCisJZGpueglyMixjaGFubGxvb3AKKworCWxjYWxsCXJlc2V0X2VwNgk7IHJlc2V0IEZJRk8KKwkKKwk7OyBsb2FkIG5ldyBBL0QgZGF0YSBpbnRvIEVQNgorCTs7IFRoaXMgbXVzdCBiZSBkb25lLiBPdGhlcndpc2UgdGhlIElTUiBpcyBuZXZlciBjYWxsZWQuCisJOzsgVGhlIElTUiBpcyBvbmx5IGNhbGxlZCB3aGVuIGRhdGEgaGFzIF9sZWZ0XyB0aGUKKwk7OyBlcCBidWZmZXIgaGVyZSBpdCBoYXMgdG8gYmUgcmVmaWxsZWQuCisJbGNhbGwJZXA2X2FybQkJOyBmaWxsIHdpdGggdGhlIGZpcnN0IGRhdGEgYnl0ZQorCQorCXNqbXAJb3Zlcl9kYQorCis7OzsgU2luZ2xlIERBIGNvbnZlcnNpb24uIFRoZSAyIGJ5dGVzIGFyZSBpbiB0aGUgRklGTyBidWZmZXIKK3NpbmdsZV9kYToKKwltb3YJZHB0ciwjMGU3ODFoCTsgRklGTyBidWZmZXIgb2YgRVAxT1VUCisJbGNhbGwJZGFsbwkJOyBjb252ZXJzaW9uCisJc2ptcAlvdmVyX2RhCisKKzs7OyBjb25maWd1cmUgdGhlIHBvcnQgQiBhcyBpbnB1dCBvciBvdXRwdXQgKGJpdHdpc2UpCitjb25maWdfZGlnaXRhbF9iOgorCW1vdglkcHRyLCMwZTc4MWgJOyBGSUZPIGJ1ZmZlciBvZiBFUDFPVVQKKwltb3Z4CWEsQGRwdHIJCTsgZ2V0IHRoZSBzZWNvbmQgYnl0ZQorCW1vdglPRUIsYQkJOyBzZXQgdGhlIG91dHB1dCBlbmFibGUgYml0cworCXNqbXAJb3Zlcl9kYQorCQorOzs7IFdyaXRlIG9uZSBieXRlIHRvIHRoZSBleHRlcm5hbCBkaWdpdGFsIHBvcnQgQgorOzs7IGFuZCBwcmVwYXJlIGZvciBkaWdpdGFsIHJlYWQKK3dyaXRlX2RpZ2l0YWxfYjoKKwltb3YJZHB0ciwjMGU3ODFoCTsgRklGTyBidWZmZXIgb2YgRVAxT1VUCisJbW92eAlhLEBkcHRyCQk7IGdldCB0aGUgc2Vjb25kIGJ5dGUKKwltb3YJT0VCLGEJCTsgb3V0cHV0IGVuYWJsZQorCWluYwlkcHRyCQk7IG5leHQgYnl0ZQorCW1vdngJYSxAZHB0cgkJOyBiaXRzCisJbW92CUlPQixhCQk7IHNlbmQgdGhlIGJ5dGUgdG8gdGhlIEkvTyBwb3J0CisKKwlsY2FsbAlyZXNldF9lcDgJOyByZXNldCBGSUZPIG9mIGVwIDgKKworCTs7IGZpbGwgZXA4IHdpdGggbmV3IGRhdGEgZnJvbSBwb3J0IEIKKwk7OyBXaGVuIHRoZSBob3N0IHJlcXVlc3RzIHRoZSBkYXRhIGl0J3MgYWxyZWFkeSB0aGVyZS4KKwk7OyBUaGlzIG11c3QgYmUgc28uIE90aGVyd2lzZSB0aGUgSVNSIGlzIG5vdCBjYWxsZWQuCisJOzsgVGhlIElTUiBpcyBvbmx5IGNhbGxlZCB3aGVuIGEgcGFja2V0IGhhcyBiZWVuIGRlbGl2ZXJlZAorCTs7IHRvIHRoZSBob3N0LiBUaHVzLCB3ZSBuZWVkIGEgcGFja2V0IGhlcmUgaW4gdGhlCisJOzsgZmlyc3QgaW5zdGFuY2UuCisJbGNhbGwJZXA4X29wcwkJOyBnZXQgZGlnaXRhbCBkYXRhCisKKwk7OyAKKwk7OyBmb3IgYWxsIGNvbW1hbmRzIHRoZSBzYW1lCitvdmVyX2RhOgkKKwltb3YJZHB0ciwjRVAxT1VUQkMKKwltb3YJYSwjMDBoCisJbGNhbGwJc3luY2RlbGF5d3IJOyBhcm0KKwlsY2FsbAlzeW5jZGVsYXl3cgk7IGFybQorCWxjYWxsCXN5bmNkZWxheXdyCTsgYXJtCisKKwk7OyBjbGVhciBJTlQyCisJbW92CWEsRVhJRgkJOyBGSVJTVCBjbGVhciB0aGUgVVNCIChJTlQyKSBpbnRlcnJ1cHQgcmVxdWVzdAorCWNscglhY2MuNAorCW1vdglFWElGLGEJCTsgTm90ZTogRVhJRiByZWcgaXMgbm90IDgwNTEgYml0LWFkZHJlc3NhYmxlCisKKwltb3YJRFBUUiwjRVBJUlEJOyAKKwltb3YJYSwjMDAwMDEwMDBiCTsgY2xlYXIgdGhlIGVwMW91dGlycQorCW1vdngJQERQVFIsYQorCisJcG9wCTA3aAorCXBvcAkwNmgKKwlwb3AJMDVoCisJcG9wCTA0aAkJOyBSNAorCXBvcAkwM2gJCTsgUjMKKwlwb3AJMDJoCQk7IFIyCisJcG9wCTAxaAkJOyBSMQorCXBvcAkwMGgJCTsgUjAKKwlwb3AJcHN3CisJcG9wCWFjYyAKKwlwb3AJZHBoMSAKKwlwb3AJZHBsMQorCXBvcAlkcGggCisJcG9wCWRwbCAKKwlwb3AJZHBzCisJcmV0aQorCisKKwkKKzs7OyBhbGwgY2hhbm5lbHMKK2RhbG86CisJbW92eAlhLEBkcHRyCQk7IG51bWJlciBvZiBjaGFubmVscworCWluYwlkcHRyCQk7IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYW5uZWwKKwltb3YJcjAsYQkJOyA0IGNoYW5uZWxzCituZXh0REE6CQorCW1vdngJYSxAZHB0cgkJOyBnZXQgdGhlIGZpcnN0IGxvdyBieXRlCisJbW92CXIzLGEJCTsgc3RvcmUgaW4gcjMgKHNlZSBiZWxvdykKKwlpbmMJZHB0cgkJOyBwb2ludCB0byB0aGUgaGlnaCBieXRlCisJbW92eAlhLEBkcHRyCQk7IGdldCB0aGUgaGlnaCBieXRlCisJbW92CXI0LGEJCTsgc3RvcmUgaW4gcjQgKGZvciB3cml0ZURBKQorCWluYwlkcHRyCQk7IHBvaW50IHRvIHRoZSBjaGFubmVsIG51bWJlcgorCW1vdngJYSxAZHB0cgkJOyBnZXQgdGhlIGNoYW5uZWwgbnVtYmVyCisJaW5jCWRwdHIJCTsgZ2V0IHJlYWR5IGZvciB0aGUgbmV4dCBjaGFubmVsCisJbGNhbGwJd3JpdGVEQQkJOyB3cml0ZSB2YWx1ZSB0byB0aGUgREFDCisJZGpueglyMCxuZXh0REEJOyBuZXh0IGNoYW5uZWwKKwlyZXQKKworCisKKzs7OyBEL0EtY29udmVyc2lvbjoKKzs7OyBjb250cm9sLWJ5dGUgaW4gYSwKKzs7OyB2YWx1ZSBpbiByMyhsb3cpIGFuZCByNChoaWdoKQord3JpdGVEQToJCQk7IG1hc2sgdGhlIGNvbnRyb2wgYnl0ZQorCWFubAlhLCMxMTAwMDAwMGIJOyBvbmx5IHRoZSBjaGFubmVsIGlzIGxlZnQKKwlvcmwJYSwjMDAxMTAwMDBiCTsgaW50ZXJuYWwgY2xvY2ssIGJpcG9sYXIgbW9kZSwgKy8tNVYKKwlvcmwJYSxyNAkJOyBvciB0aGUgdmFsdWUgb2YgUjQgdG8gaXQKKwk7OyBzZXQgQ1MgdG8gbG93CisJY2xyCUlPQS41CQk7IHNldCAvQ1MgdG8gemVybworCTs7IHNlbmQgdGhlIGZpcnN0IGJ5dGUgdG8gdGhlIERBLWNvbnZlcnRlcgorCW1vdiAJUjIsIzgJCTsgYml0LWNvdW50ZXIKK0RBMTogICAgam5iICAgICBBQ0MuNyx6ZXJvZGEJOyBqdW1wIGlmIEJpdDcgPSAwPworCXNldGIJSU9BLjIJCTsgc2V0IHRoZSBESU4gYml0CisJc2ptcAljbGtkYQkJOyBjb250aW51ZSB3aXRoIHRoZSBjbG9jaworemVyb2RhOiBjbHIJSU9BLjIJCTsgY2xlYXIgdGhlIERJTiBiaXQKK2Nsa2RhOglzZXRiCUlPQS4wCQk7IFNDTEsgPSAxCisJY2xyCUlPQS4wCQk7IFNDTEsgPSAwCisgICAgICAgIHJsICAgICAgYSAgICAgICAgICAgICAgIDsgbmV4dCBCaXQKKyAgICAgICAgZGpueiAgICBSMixEQTEKKworCQorCTs7IHNlbmQgdGhlIHNlY29uZCBieXRlIHRvIHRoZSBEQS1jb252ZXJ0ZXIKKwltb3YJYSxyMwkJOyBsb3cgYnl0ZQorCW1vdiAJUjIsIzgJCTsgYml0LWNvdW50ZXIKK0RBMjogICAgam5iICAgICBBQ0MuNyx6ZXJvZGEyCTsganVtcCBpZiBCaXQ3ID0gMD8KKwlzZXRiCUlPQS4yCQk7IHNldCB0aGUgRElOIGJpdAorCXNqbXAJY2xrZGEyCQk7IGNvbnRpbnVlIHdpdGggdGhlIGNsb2NrCit6ZXJvZGEyOmNscglJT0EuMgkJOyBjbGVhciB0aGUgRElOIGJpdAorY2xrZGEyOglzZXRiCUlPQS4wCQk7IFNDTEsgPSAxCisJY2xyCUlPQS4wCQk7IFNDTEsgPSAwCisgICAgICAgIHJsICAgICAgYSAgICAgICAgICAgICAgIDsgbmV4dCBCaXQKKyAgICAgICAgZGpueiAgICBSMixEQTIKKwk7OyAKKwlzZXRiCUlPQS41CQk7IHNldCAvQ1MgdG8gb25lCisJOzsgCitub0RBOglyZXQKKwkKKworCis7OzsgYXJtIGVwNgorZXA2X2FybToKKwlsY2FsbAljb252X2FkCisJCisJbW92CURQVFIsI0VQNkJDSAk7IGJ5dGUgY291bnQgSAorCW1vdglhLCMwCQk7IGlzIHplcm8KKwlsY2FsbAlzeW5jZGVsYXl3cgk7IHdhaXQgdW50aWwgdGhlIGxlbmd0aCBoYXMgYXJyaXZlZAorCQorCW1vdglEUFRSLCNFUDZCQ0wJOyBieXRlIGNvdW50IEwKKwltb3YJYSwjMTBICQk7IGlzIG9uZQorCWxjYWxsCXN5bmNkZWxheXdyCTsgd2FpdCB1bnRpbCB0aGUgbGVuZ3RoIGhhcyBiZWVuIHByb2MKKwlyZXQKKwkKKworCis7OzsgY29udmVydHMgb25lIGFuYWxvZy9kaWdpdGFsIGNoYW5uZWwgYW5kIHN0b3JlcyBpdCBpbiBFUDgKKzs7OyBhbHNvIGdldHMgdGhlIGNvbnRlbnQgb2YgdGhlIGRpZ2l0YWwgcG9ydHMgQiBhbmQgRCBkZXBlbmRpbmcgb24KKzs7OyB0aGUgQ09NTUFORCBmbGFnCitlcDhfb3BzOgorCW1vdglkcHRyLCMwZmMwMWgJOyBlcDggZmlmbyBidWZmZXIKKwljbHIJYQkJOyBoaWdoIGJ5dGUKKwltb3Z4CUBkcHRyLGEJCTsgc2V0IEg9MAorCW1vdglkcHRyLCMwZmMwMGgJOyBsb3cgYnl0ZQorCW1vdglyMCwjQ01EX0ZMQUcKKwltb3YJYSxAcjAKKwltb3Z4CUBkcHRyLGEJCTsgc2F2ZSBjb21tYW5kIGJ5dGUKKworCW1vdglkcHRyLCNlcDhfam1wCTsganVtcCB0YWJsZSBmb3IgdGhlIGRpZmZlcmVudCBmdW5jdGlvbnMKKwlybAlhCQk7IG11bHRpcGx5IGJ5IDI6IHNpemVvZiBzam1wCisJam1wCUBhK2RwdHIJCTsganVtcCB0byB0aGUganVtcCB0YWJsZQorCTs7IGp1bXAgdGFibGUsIGNvcnJlc3BvbmRzIHRvIHRoZSBjb21tYW5kIGJ5dGVzIGRlZmluZWQKKwk7OyBpbiB1c2JkdXguYworZXA4X2ptcDoKKwlzam1wCWVwOF9lcnIJCTsgYT0wLCBlcnIKKwlzam1wCWVwOF9lcnIJCTsgYT0xLCBlcnIKKwlzam1wCWVwOF9lcnIJCTsgYT0yLCBlcnIKKwlzam1wCWVwOF9kaW8JCTsgYT0zLCBkaWdpdGFsIHJlYWQKKwlzam1wCWVwOF9zZ2xjaGFubmVsCTsgYT00LCBhbmFsb2cgQS9ECisJc2ptcAllcDhfcmVhZGN0cgk7IGE9NSwgcmVhZCBjb3VudGVyCisJc2ptcAllcDhfZXJyCQk7IGE9Niwgd3JpdGUgY291bnRlcgorCisJOzsgcmVhZHMgYWxsIGNvdW50ZXJzCitlcDhfcmVhZGN0cjoKKwltb3YJcjAsI0NUUjAJOyBwb2ludHMgdG8gY291bnRlcjAKKwltb3YJZHB0ciwjMGZjMDJoCTsgZXA4IGZpZm8gYnVmZmVyCisJbW92CXIxLCM4CQk7IHRyYW5zZmVyIDQgMTZiaXQgY291bnRlcnMKK2VwOF9jdHJscDoKKwltb3YJYSxAcjAJCTsgZ2V0IHRoZSBjb3VudGVyCisJbW92eAlAZHB0cixhCQk7IHNhdmUgaW4gdGhlIGZpZm8gYnVmZmVyCisJaW5jCXIwCQk7IGluYyBwb2ludGVyIHRvIHRoZSBjb3VudGVycworCWluYwlkcHRyCQk7IGluYyBwb2ludGVyIHRvIHRoZSBmaWZvIGJ1ZmZlcgorCWRqbnoJcjEsZXA4X2N0cmxwCTsgbG9vcCB1bnRpbCByZWFkeQorCQorCXNqbXAJZXA4X3NlbmQJOyBzZW5kIHRoZSBkYXRhCisJCisJOzsgcmVhZCBvbmUgQS9EIGNoYW5uZWwKK2VwOF9zZ2xjaGFubmVsOgkJCisJbW92CXIwLCNTR0xDSEFOTkVMCTsgcG9pbnRzIHRvIHRoZSBjaGFubmVsCisJbW92IAlhLEByMAkJOyBDaDAKKwkKKwlsY2FsbCAJcmVhZEFECQk7IHN0YXJ0IHRoZSBjb252ZXJzaW9uCisJCQorCW1vdiAJRFBUUiwjMGZjMDJoCTsgRVA4IEZJRk8gCisJbW92IAlhLFIzCQk7IGdldCBsb3cgYnl0ZQorCW1vdnggCUBEUFRSLEEJCTsgc3RvcmUgaW4gRklGTworCWluYwlkcHRyCQk7IG5leHQgZmlmbyBlbnRyeQorCW1vdiAJYSxSNAkJOyBnZXQgaGlnaCBieXRlCisJbW92eCAJQERQVFIsQQkJOyBzdG9yZSBpbiBGSUZPCisKKwlzam1wCWVwOF9zZW5kCTsgc2VuZCB0aGUgZGF0YQorCisJOzsgcmVhZCB0aGUgZGlnaXRhbCBsaW5lcworZXA4X2RpbzoJCisJbW92IAlEUFRSLCMwZmMwMmgJOyBzdG9yZSB0aGUgY29udGVudHMgb2YgcG9ydCBCCisJbW92CWEsSU9CCQk7IGluIHRoZSBuZXh0CisJbW92eAlAZHB0cixhCQk7IGVudHJ5IG9mIHRoZSBidWZmZXIKKworCWluYwlkcHRyCisJY2xyCWEJCTsgaGlnaCBieXRlIGlzIHplcm8KKwltb3Z4CUBkcHRyLGEJCTsgbmV4dCBieXRlIG9mIHRoZSBFUAorCQorZXA4X3NlbmQ6CQorCW1vdglEUFRSLCNFUDhCQ0gJOyBieXRlIGNvdW50IEgKKwltb3YJYSwjMAkJOyBpcyB6ZXJvCisJbGNhbGwJc3luY2RlbGF5d3IKKwkKKwltb3YJRFBUUiwjRVA4QkNMCTsgYnl0ZSBjb3VudCBMCisJbW92CWEsIzEwSAkJOyAxNiBieXRlcworCWxjYWxsCXN5bmNkZWxheXdyCTsgc2VuZCB0aGUgZGF0YSBvdmVyIHRvIHRoZSBob3N0CisKK2VwOF9lcnI6CQorCXJldAorCisKKworOzs7IEVQOCBpbnRlcnJ1cHQ6IGdldHMgb25lIG1lYXN1cmVtZW50IGZyb20gdGhlIEFEIGNvbnZlcnRlciBhbmQKKzs7OyBzZW5kcyBpdCB2aWEgRVA4LiBUaGUgY2hhbm5lbCAjIGlzIHN0b3JlZCBpbiBhZGRyZXNzIDgwSC4KKzs7OyBJdCBhbHNvIGdldHMgdGhlIHN0YXRlIG9mIHRoZSBkaWdpdGFsIHJlZ2lzdGVycyBCIGFuZCBELgorZXA4X2lzcjoJCisJcHVzaAlkcHMKKwlwdXNoCWRwbAorCXB1c2gJZHBoCisJcHVzaAlkcGwxCisJcHVzaAlkcGgxCisJcHVzaAlhY2MKKwlwdXNoCXBzdworCXB1c2gJMDBoCQk7IFIwCisJcHVzaAkwMWgJCTsgUjEKKwlwdXNoCTAyaAkJOyBSMgorCXB1c2gJMDNoCQk7IFIzCisJcHVzaAkwNGgJCTsgUjQKKwlwdXNoCTA1aAkJOyBSNQorCXB1c2gJMDZoCQk7IFI2CisJcHVzaAkwN2gJCTsgUjcKKwkJCisJbGNhbGwJZXA4X29wcworCQorCTs7IGNsZWFyIElOVDIKKwltb3YJYSxFWElGCQk7IEZJUlNUIGNsZWFyIHRoZSBVU0IgKElOVDIpIGludGVycnVwdCByZXF1ZXN0CisJY2xyCWFjYy40CisJbW92CUVYSUYsYQkJOyBOb3RlOiBFWElGIHJlZyBpcyBub3QgODA1MSBiaXQtYWRkcmVzc2FibGUKKworCW1vdglEUFRSLCNFUElSUQk7IAorCW1vdglhLCMxMDAwMDAwMGIJOyBjbGVhciB0aGUgZXA4aXJxCisJbW92eAlARFBUUixhCisKKwlwb3AJMDdoCisJcG9wCTA2aAorCXBvcAkwNWgKKwlwb3AJMDRoCQk7IFI0CisJcG9wCTAzaAkJOyBSMworCXBvcAkwMmgJCTsgUjIKKwlwb3AJMDFoCQk7IFIxCisJcG9wCTAwaAkJOyBSMAorCXBvcAlwc3cKKwlwb3AJYWNjIAorCXBvcAlkcGgxIAorCXBvcAlkcGwxCisJcG9wCWRwaCAKKwlwb3AJZHBsIAorCXBvcAlkcHMKKwlyZXRpCisKKworOzsgbmVlZCB0byBkZWxheSBldmVyeSB0aW1lIHRoZSBieXRlIGNvdW50ZXJzCis7OyBmb3IgdGhlIEVQcyBoYXZlIGJlZW4gY2hhbmdlZC4KKworc3luY2RlbGF5OgorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCXJldAorCitzeW5jZGVsYXl3cjoKKwltb3Z4CUBkcHRyLGEKKwlsY2FsbAlzeW5jZGVsYXkKKwlyZXQKKworCisuRW5kCisKKwpkaWZmIC0tZ2l0IGEvdXNiZHV4L3VzYmR1eGZhc3RfZmlybXdhcmUuYXNtIGIvdXNiZHV4L3VzYmR1eGZhc3RfZmlybXdhcmUuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOGU3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi91c2JkdXgvdXNiZHV4ZmFzdF9maXJtd2FyZS5hc20KQEAgLTAsMCArMSw1NDcgQEAKKzsgICB1c2JkdXhmYXN0X2Zpcm13YXJlLmFzbQorOyAgIENvcHlyaWdodCAoQykgMjAwNCwyMDA5IEJlcm5kIFBvcnIsIEJlcm5kLlBvcnJAZjJzLmNvbQorOworOyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cis7ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorOyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCis7ICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCis7Cis7Cis7IEZpcm13YXJlOiB1c2JkdXhmYXN0X2Zpcm13YXJlLmFzbSBmb3IgdXNiZHV4LmMKKzsgRGVzY3JpcHRpb246IEZpcm13YXJlIGZvciB1c2JkdXhmYXN0Cis7IERldmljZXM6IFtJVExdIFVTQi1EVVggKHVzYmR1eC5vKQorOyBBdXRob3I6IEJlcm5kIFBvcnIgPEJlcm5kLlBvcnJAZjJzLmNvbT4KKzsgVXBkYXRlZDogMTcgQXByIDIwMDkKKzsgU3RhdHVzOiBzdGFibGUKKzsKKzs7OworOzs7Cis7OzsKKworCS5pbmMJZngyLWluY2x1ZGUuYXNtCisKKwkuZXF1CVdGTE9BREVELDcwSAk7IHdhdmVmb3JtIGlzIGxvYWRlZAorCisJLm9yZwkwMDAwaAkJOyBhZnRlciByZXNldCB0aGUgcHJvY2Vzc29yIHN0YXJ0cyBoZXJlCisJbGptcAltYWluCQk7IGp1bXAgdG8gdGhlIG1haW4gbG9vcAorCisJLm9yZwkwMDQzaAkJOyB0aGUgSVJRMi12ZWN0b3IKKwlsam1wCWptcHRibAkJOyBpcnEgc2VydmljZS1yb3V0aW5lCisKKwkub3JnCTAxMDBoCQk7IHN0YXJ0IG9mIHRoZSBqdW1wIHRhYmxlCisKK2ptcHRibDoJbGptcAlzdWRhdl9pc3IKKwlub3AKKwlsam1wCXNvZl9pc3IKKwlub3AKKwlsam1wCXN1dG9rX2lzcgorCW5vcAorCWxqbXAJc3VzcGVuZF9pc3IKKwlub3AKKwlsam1wCXVzYnJlc2V0X2lzcgorCW5vcAorCWxqbXAJaGlzcGVlZF9pc3IKKwlub3AKKwlsam1wCWVwMGFja19pc3IKKwlub3AKKwlsam1wCXNwYXJlX2lzcgorCW5vcAorCWxqbXAJZXAwaW5faXNyCisJbm9wCisJbGptcAllcDBvdXRfaXNyCisJbm9wCisJbGptcAllcDFpbl9pc3IKKwlub3AKKwlsam1wCWVwMW91dF9pc3IKKwlub3AKKwlsam1wCWVwMl9pc3IKKwlub3AKKwlsam1wCWVwNF9pc3IKKwlub3AKKwlsam1wCWVwNl9pc3IKKwlub3AKKwlsam1wCWVwOF9pc3IKKwlub3AKKwlsam1wCWlibl9pc3IKKwlub3AKKwlsam1wCXNwYXJlX2lzcgorCW5vcAorCWxqbXAJZXAwcGluZ19pc3IKKwlub3AKKwlsam1wCWVwMXBpbmdfaXNyCisJbm9wCisJbGptcAllcDJwaW5nX2lzcgorCW5vcAorCWxqbXAJZXA0cGluZ19pc3IKKwlub3AKKwlsam1wCWVwNnBpbmdfaXNyCisJbm9wCisJbGptcAllcDhwaW5nX2lzcgorCW5vcAorCWxqbXAJZXJybGltaXRfaXNyCisJbm9wCisJbGptcAlzcGFyZV9pc3IKKwlub3AKKwlsam1wCXNwYXJlX2lzcgorCW5vcAorCWxqbXAJc3BhcmVfaXNyCisJbm9wCisJbGptcAllcDJpc29lcnJfaXNyCisJbm9wCisJbGptcAllcDRpc29lcnJfaXNyCisJbm9wCisJbGptcAllcDZpc29lcnJfaXNyCisJbm9wCisJbGptcAllcDhpc29lcnJfaXNyCisKKwkKKwk7OyBkdW1teSBpc3IKK3NvZl9pc3I6CitzdWRhdl9pc3I6CQorc3V0b2tfaXNyOgkKK3N1c3BlbmRfaXNyOgkKK3VzYnJlc2V0X2lzcjoJCitoaXNwZWVkX2lzcjoJCitlcDBhY2tfaXNyOgkKK3NwYXJlX2lzcjoJCitlcDBpbl9pc3I6CQorZXAwb3V0X2lzcjoJCitlcDFvdXRfaXNyOgorZXAxaW5faXNyOgkKK2libl9pc3I6CQorZXAwcGluZ19pc3I6CQorZXAxcGluZ19pc3I6CQorZXAycGluZ19pc3I6CQorZXA0cGluZ19pc3I6CQorZXA2cGluZ19pc3I6CQorZXA4cGluZ19pc3I6CQorZXJybGltaXRfaXNyOgkKK2VwMmlzb2Vycl9pc3I6CQorZXA0aXNvZXJyX2lzcjoJCitlcDZpc29lcnJfaXNyOgkKK2VwOGlzb2Vycl9pc3I6CitlcDZfaXNyOgorZXAyX2lzcjoKK2VwOF9pc3I6CisKKwlwdXNoCWRwcworCXB1c2gJZHBsCisJcHVzaAlkcGgKKwlwdXNoCWRwbDEKKwlwdXNoCWRwaDEKKwlwdXNoCWFjYworCXB1c2gJcHN3CisKKwk7OyBjbGVhciB0aGUgVVNCMiBpcnEgYml0IGFuZCByZXR1cm4KKwltb3YJYSxFWElGCisJY2xyCWFjYy40CisJbW92CUVYSUYsYQorCisJcG9wCXBzdworCXBvcAlhY2MgCisJcG9wCWRwaDEgCisJcG9wCWRwbDEKKwlwb3AJZHBoIAorCXBvcAlkcGwgCisJcG9wCWRwcworCQorCXJldGkKKworCQkKKzs7OyBtYWluIHByb2dyYW0KKzs7OyBiYXNpY2FsbHkgb25seSBpbml0aWFsaXNlcyB0aGUgcHJvY2Vzc29yIGFuZAorOzs7IHRoZW4gZW5nYWdlcyBpbiBhbiBlbmRsZXNzIGxvb3AKK21haW46CisJbW92CWRwdHIsI1JFVkNUTAorCW1vdglhLCMwMDAwMDAxMWIJOyBhbGxvd3Mgc2tpcAorCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJRFBUUiwjQ1BVQ1MJOyBDUFUgY29udHJvbCByZWdpc3RlcgorCW1vdglhLCMwMDAxMDAwMGIJOyA0OE1oegorCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJZHB0ciwjSUZDT05GSUcJOyBzd2l0Y2ggb24gSUZDTEsgc2lnbmFsCisJbW92CWEsIzEwMTAwMDEwYgk7IGdwaWYsIDMwTUh6CisJbGNhbGwJc3luY2RlbGF5d3IKKworCW1vdglkcHRyLCNGSUZPUkVTRVQKKwltb3YJYSwjODBoCisJbGNhbGwJc3luY2RlbGF5d3IKKwltb3YJYSwjOAorCWxjYWxsCXN5bmNkZWxheXdyCisJbW92CWEsIzIJCQorCWxjYWxsCXN5bmNkZWxheXdyCisJbW92CWEsIzQJCQorCWxjYWxsCXN5bmNkZWxheXdyCisJbW92CWEsIzYJCQorCWxjYWxsCXN5bmNkZWxheXdyCisJbW92CWEsIzAJCQorCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJZHB0ciwjSU5UU0VUVVAJOyBJUlEgc2V0dXAgcmVnaXN0ZXIKKwltb3YJYSwjMDhoCQk7IGVuYWJsZSBhdXRvdmVjdG9yCisJbGNhbGwJc3luY2RlbGF5d3IKKworCWxjYWxsCWluaXRlcHMJCTsgaW5pdCB0aGUgaXNvY2hyb25vdXMgZGF0YS10cmFuc2ZlcgorCisJbGNhbGwJaW5pdEdQSUYKKworOzs7IG1haW4gbG9vcAorCittbG9vcDI6CisJbGNhbGwJZ3BpZl9ydW4KKwlzam1wCW1sb29wMgkJOyBkbyBub3RoaW5nLiBUaGUgcmVzdCBpcyBkb25lIGJ5IHRoZSBJUlFzCisKKworZ3BpZl9ydW46CisJbW92CWEsV0ZMT0FERUQKKwlqeglub190cmlnCQk7IGRvIG5vdCB0cmlnZ2VyCisJbW92CWEsR1BJRlRSSUcJOyBHUElGIHN0YXR1cworCWFubAlhLCM4MGgJCTsgZG9uZSBiaXQKKwlqeglub190cmlnCQk7IEdQSUYgYnVzeQorCis7OzsgZ3BpZiBoYXMgc3RvcHBlZAorCW1vdglhLCMwNmgJCTsgUkQsRVA2CisJbW92CUdQSUZUUklHLGEKK25vX3RyaWc6CisJcmV0CisKKwkKKworaW5pdEdQSUY6CisJbW92CURQVFIsI0VQNkNGRwk7IEJMSyBkYXRhIGZyb20gaGVyZSB0byB0aGUgaG9zdAorCW1vdglhLCMxMTEwMDAwMGIJOyBWYWxpZCwgcXVhZCBidWZmZXJpbmcKKwlsY2FsbAlzeW5jZGVsYXl3cgk7IHdyaXRlCisKKwltb3YJZHB0ciwjRVA2RklGT0NGRworCW1vdglhLCMwMDAwMTAwMWIJOyBhdXRvaW4sIHdvcmR3aWRlCisJbGNhbGwJc3luY2RlbGF5d3IKKworCW1vdglkcHRyLCNFUDZBVVRPSU5MRU5ICisJbW92CWEsIzAwMDAwMDEwYgk7IDUxMiBieXRlcworCWxjYWxsCXN5bmNkZWxheXdyCTsgd3JpdGUKKworCW1vdglkcHRyLCNFUDZBVVRPSU5MRU5MCisJbW92CWEsIzAwMDAwMDAwYgk7IDAKKwlsY2FsbAlzeW5jZGVsYXl3cgk7IHdyaXRlCisKKwltb3YJZHB0ciwjR1BJRldGU0VMRUNUCisJbW92CWEsIzExMTExMTAwYgk7IHdhdmVmb3JtIDAgZm9yIEZJRk8gUkQKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJbW92CWRwdHIsI0dQSUZDVExDRkcKKwltb3YJYSwjMTAwMDAwMDBiCTsgdHJpIHN0YXRlIGZvciBDVFJMCisJbGNhbGwJc3luY2RlbGF5d3IKKworCW1vdglkcHRyLCNHUElGSURMRUNUTAorCW1vdglhLCMxMTExMTExMWIJOyBhbGwgQ1RMIG91dHB1dHMgaGlnaAorCWxjYWxsCXN5bmNkZWxheXdyCisJbW92CWEsIzExMTExMTAxYgk7IHJlc2V0IGNvdW50ZXIKKwlsY2FsbAlzeW5jZGVsYXl3cgorCW1vdglhLCMxMTExMTExMWIJOyByZXNldCB0byBoaWdoIGFnYWluCisJbGNhbGwJc3luY2RlbGF5d3IKKworCW1vdglhLCMwMDAwMDAxMGIJOyBhYm9ydCB3aGVuIGZ1bGwKKwltb3YJZHB0ciwjRVA2R1BJRkZMR1NFTAorCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJYSwjMDAwMDAwMDFiCTsgc3RvcCB3aGVuIGJ1ZmZlciBvdmVyZmwKKwltb3YJZHB0ciwjRVA2R1BJRlBERlNUT1AKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJbW92CWEsIzAKKwltb3YJZHB0ciwjR1BJRlJFQURZQ0ZHCisJbGNhbGwJc3luY2RlbGF5d3IKKworCW1vdglhLCMwCisJbW92CWRwdHIsI0dQSUZJRExFQ1MKKwlsY2FsbAlzeW5jZGVsYXl3cgorCis7IHdhdmVmb3JtIDEKKzsgdGhpcyBpcyBhIGR1bW15IHdhdmVmb3JtIHdoaWNoIGlzIHVzZWQKKzsgZHVyaW5nIHRoZSB1cGxvYWQgb2YgYW5vdGhlciB3YXZlZm9ybSBpbnRvCis7IHdhdmVmcm9tIDAKKzsgaXQgYnJhbmNoZXMgZGlyZWN0bHkgaW50byB0aGUgSURMRSBzdGF0ZQorCW1vdglkcHRyLCMwRTQyMEgKKwltb3YJYSwjMDAxMTExMTFiCTsgYnJhbmNoIHRvIElETEUKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJbW92CWRwdHIsIzBFNDI4SAk7IG9wY29kZQorCW1vdglhLCMwMDAwMDAwMWIJOyBkZWNlaXNpb24gcG9pbnQKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJbW92CWRwdHIsIzBFNDMwSAorCW1vdglhLCMwRkZICQk7IG91dHB1dCBpcyBoaWdoCisJbGNhbGwJc3luY2RlbGF5d3IKKworCW1vdglkcHRyLCMwRTQzOEgKKwltb3YJYSwjMEZGSAkJOyBsb2dpYyBmdW5jdGlvbgorCWxjYWxsCXN5bmNkZWxheXdyCisKKzsgc2lnbmFscyB0aGF0IG5vIHdhdmVmb3JtIDAgaXMgbG9hZGVkIHNvIGZhcgorCW1vdglXRkxPQURFRCwjMAk7IHdhdmVmb3JtIGZsYWcKKworCXJldAorCisKKworOzs7IGluaXRpbGlzZSB0aGUgdHJhbnNmZXIKKzs7OyBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIFVTQiBpbnRlcmZhY2UgaXMgaW4gYWx0ZXJuYXRlIHNldHRpbmcgMQoraW5pdGVwczoKKwltb3YJRFBUUiwjRVA0Q0ZHCisJbW92CWEsIzEwMTAwMDAwYgk7IHZhbGlkLCBidWxrLCBvdXQKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJbW92CWRwdHIsI0VQNEJDTAk7ICJhcm0iIGl0CisJbW92CWEsIzAwaAorCWxjYWxsCXN5bmNkZWxheXdyCTsgd2FpdCB1bnRpbCB3ZSBjYW4gd3JpdGUgYWdhaW4KKwlsY2FsbAlzeW5jZGVsYXl3cgk7IHdhaXQKKwlsY2FsbAlzeW5jZGVsYXl3cgk7IHdhaXQKKworCW1vdglEUFRSLCNFUDhDRkcKKwltb3YJYSwjMAkJOyBkaXNhYmxlIEVQOCwgaXQgb3ZlcmxhcHMgd2l0aCBFUDYhIQorCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJZHB0ciwjRVBJRQk7IGludGVycnVwdCBlbmFibGUKKwltb3YJYSwjMDAxMDAwMDBiCTsgZW5hYmxlIGlycSBmb3IgZXA0CisJbGNhbGwJc3luY2RlbGF5d3IJOyBkbyBpdAorCisJbW92CWRwdHIsI0VQSVJRCTsgY2xlYXIgSVJRcworCW1vdglhLCMwMDEwMDEwMGIKKwltb3Z4CUBkcHRyLGEKKworICAgICAgICBtb3YgICAgIERQVFIsI1VTQklFCTsgVVNCIGludCBlbmFibGUgcmVnaXN0ZXIKKyAgICAgICAgbW92ICAgICBhLCMwICAgICAgICAgICAgOyBTT0YgZXRjCisgICAgICAgIG1vdnggICAgQERQVFIsYSAgICAgICAgIDsKKworICAgICAgICBtb3YgICAgIERQVFIsI0dQSUZJRQk7IEdQSUYgaW50IGVuYWJsZSByZWdpc3RlcgorICAgICAgICBtb3YgICAgIGEsIzAgICAgICAgICAgICA7IGRvbmUgSVJRCisgICAgICAgIG1vdnggICAgQERQVFIsYSAgICAgICAgIDsKKworCW1vdglFSUUsIzAwMDAwMDAxYgk7IGVuYWJsZSBJTlQyIGluIHRoZSA4MDUxJ3MgU0ZSCisJbW92CUlFLCM4MGgJCTsgSUUsIGVuYWJsZSBhbGwgaW50ZXJydXB0cworCisJcmV0CisKKworOzs7IGludGVycnVwdC1yb3V0aW5lIGZvciBlcDQKKzs7OyByZWNlaXZlcyB0aGUgY2hhbm5lbCBsaXN0IGFuZCBvdGhlciBjb21tYW5kcworZXA0X2lzcjoKKwlwdXNoCWRwcworCXB1c2gJZHBsCisJcHVzaAlkcGgKKwlwdXNoCWRwbDEKKwlwdXNoCWRwaDEKKwlwdXNoCWFjYworCXB1c2gJcHN3CisJcHVzaAkwMGgJCTsgUjAKKwlwdXNoCTAxaAkJOyBSMQorCXB1c2gJMDJoCQk7IFIyCisJcHVzaAkwM2gJCTsgUjMKKwlwdXNoCTA0aAkJOyBSNAorCXB1c2gJMDVoCQk7IFI1CisJcHVzaAkwNmgJCTsgUjYKKwlwdXNoCTA3aAkJOyBSNworCQkKKwltb3YJZHB0ciwjMGY0MDBoCTsgRklGTyBidWZmZXIgb2YgRVA0CisJbW92eAlhLEBkcHRyCQk7IGdldCB0aGUgZmlyc3QgYnl0ZQorCisJbW92CWRwdHIsI2VwNF9qbXAJOyBqdW1wIHRhYmxlIGZvciB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucworCXJsCWEJCTsgbXVsdGlwbHkgYnkgMjogc2l6ZW9mIHNqbXAKKwlqbXAJQGErZHB0cgkJOyBqdW1wIHRvIHRoZSBqdW1wIHRhYmxlCisKK2VwNF9qbXA6CisJc2ptcAlzdG9yZXdhdmVmb3JtCTsgYT0wCisJc2ptcAlpbml0X2VwNgk7IGE9MQorCQoraW5pdF9lcDY6CisJOyBzdG9wIGVwNgorCTsganVzdCBub3cgZG8gbm90aGluZworCisJbGptcAlvdmVyX3dmCisKKworc3RvcmV3YXZlZm9ybToKKwltb3YJV0ZMT0FERUQsIzAJOyB3YXZlZm9ybSBmbGFnCisKKwltb3YJZHB0ciwjRVA2RklGT0NGRworCW1vdglhLCMwMDAwMDAwMGIJOworCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJZHB0ciwjR1BJRkFCT1JUCisJbW92CWEsIzBmZmgJCTsgYWJvcnQgYWxsIHRyYW5zZmVycworCWxjYWxsCXN5bmNkZWxheXdyCisKK3dhaXRfZl9hYm9ydDoKKwltb3YJYSxHUElGVFJJRwk7IEdQSUYgc3RhdHVzCisJYW5sCWEsIzgwaAkJOyBkb25lIGJpdAorCWp6CXdhaXRfZl9hYm9ydAk7IEdQSUYgYnVzeQorCisJbW92CWRwdHIsI0dQSUZXRlNFTEVDVAorCW1vdglhLCMxMTExMTEwMWIJOyBzZWxlY3QgZHVtbXkgd2F2ZWZvcm0KKwltb3Z4CUBkcHRyLGEKKwlsY2FsbAlzeW5jZGVsYXkKKworCW1vdglkcHRyLCNGSUZPUkVTRVQKKwltb3YJYSwjODBoCQk7IE5BSworCWxjYWxsCXN5bmNkZWxheXdyCisJbW92CWEsIzYJCTsgcmVzZXQgRVA2CisJbGNhbGwJc3luY2RlbGF5d3IKKwltb3YJYSwjMAkJOyBub3JtYWwgb3AKKwlsY2FsbAlzeW5jZGVsYXl3cgorCis7IGNoYW5nZSB0byBkdW1teSB3YXZlZm9ybSAxCisJbW92CWEsIzA2aAkJOyBSRCxFUDYKKwltb3YJR1BJRlRSSUcsYQorCis7IHdhaXQgYSBiaXQKKwltb3YJcjIsMjU1Citsb29weDoKKwlkam56CXIyLGxvb3B4CisKKzsgYWJvcnQgd2F2ZWZvcm0gaWYgbm90IGFscmVhZHkgc28KKwltb3YJZHB0ciwjR1BJRkFCT1JUCisJbW92CWEsIzBmZmgJCTsgYWJvcnQgYWxsIHRyYW5zZmVycworCWxjYWxsCXN5bmNkZWxheXdyCisKKzsgd2FpdCBhZ2FpbgorCW1vdglyMiwyNTUKK2xvb3B4MjoKKwlkam56CXIyLGxvb3B4MgorCis7IGNoZWNrIGZvciBET05FCit3YWl0X2ZfYWJvcnQyOgorCW1vdglhLEdQSUZUUklHCTsgR1BJRiBzdGF0dXMKKwlhbmwJYSwjODBoCQk7IGRvbmUgYml0CisJanoJd2FpdF9mX2Fib3J0Mgk7IEdQSUYgYnVzeQorCis7IHVwbG9hZCB0aGUgbmV3IHdhdmVmb3JtIGludG8gd2F2ZWZvcm0gMAorCW1vdglBVVRPUFRSSDIsIzBFNEgJOyBYREFUQTBICisJbGNhbGwJc3luY2RlbGF5CisJbW92CUFVVE9QVFJMMiwjMDBICTsgWERBVEEwTAorCWxjYWxsCXN5bmNkZWxheQorCisJbW92CUFVVE9QVFJIMSwjMEY0SAk7IEVQNCBoaWdoCisJbGNhbGwJc3luY2RlbGF5CisJbW92CUFVVE9QVFJMMSwjMDFICTsgRVA0IGxvdworCWxjYWxsCXN5bmNkZWxheQorCisJbW92CUFVVE9QVFJTRVRVUCwjNwk7IGF1dG9pbmMgYW5kIGVuYWJsZQorCWxjYWxsCXN5bmNkZWxheQorCisJbW92IAlyMiwjMjBICQk7IDMyIGJ5dGVzIHRvIHRyYW5zZmVyCisKK3dhdmV0cjoKKwltb3YgCWRwdHIsI1hBVVRPREFUMQorCW1vdngJYSxAZHB0cgorCWxjYWxsCXN5bmNkZWxheQorCW1vdglkcHRyLCNYQVVUT0RBVDIKKwltb3Z4CUBkcHRyLGEKKwlsY2FsbAlzeW5jZGVsYXkKKwlkam56CXIyLHdhdmV0cgorCisJbW92CWRwdHIsI0VQNkZJRk9DRkcKKwltb3YJYSwjMDAwMDEwMDFiCTsgYXV0b2luLCB3b3Jkd2lkZQorCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJZHB0ciwjR1BJRldGU0VMRUNUCisJbW92CWEsIzExMTExMTAwYgorCW1vdngJQGRwdHIsYQorCWxjYWxsCXN5bmNkZWxheQorCisJbW92CWRwdHIsI0ZJRk9SRVNFVAorCW1vdglhLCM4MGgJCTsgTkFLCisJbGNhbGwJc3luY2RlbGF5d3IKKwltb3YJYSwjNgkJOyByZXNldCBFUDYKKwlsY2FsbAlzeW5jZGVsYXl3cgorCW1vdglhLCMwCQk7IG5vcm1hbCBvcAorCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJZHB0ciwjMEU0MDBIKzEwSDsgd2F2ZWZvcm0gMDogZmlyc3QgQ1RMIGJ5dGUKKwltb3Z4CWEsQGRwdHIJCTsgZ2V0IGl0CisJb3JsCWEsIzExMTExMDExYgk7IGZvcmNlIGFsbCBiaXRzIHRvIG9uZSBleGNlcHQgdGhlIHJhbmdlIGJpdAorCW1vdglkcHRyLCNHUElGSURMRUNUTAorCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJV0ZMT0FERUQsIzEJOyB3YXZlZm9ybSBmbGFnCisKKzsgZG8gdGhlIGNvbW1vbiB0aGluZ3MgaGVyZQkKK292ZXJfd2Y6CQorCW1vdglkcHRyLCNFUDRCQ0wKKwltb3YJYSwjMDBoCisJbW92eAlARFBUUixhCQk7IGFybSBpdAorCWxjYWxsCXN5bmNkZWxheQk7IHdhaXQKKwltb3Z4CUBEUFRSLGEJCTsgYXJtIGl0CisJbGNhbGwJc3luY2RlbGF5CTsgd2FpdAorCisJOzsgY2xlYXIgSU5UMgorCW1vdglhLEVYSUYJCTsgRklSU1QgY2xlYXIgdGhlIFVTQiAoSU5UMikgaW50ZXJydXB0IHJlcXVlc3QKKwljbHIJYWNjLjQKKwltb3YJRVhJRixhCQk7IE5vdGU6IEVYSUYgcmVnIGlzIG5vdCA4MDUxIGJpdC1hZGRyZXNzYWJsZQorCisJbW92CURQVFIsI0VQSVJRCTsgCisJbW92CWEsIzAwMTAwMDAwYgk7IGNsZWFyIHRoZSBlcDRpcnEKKwltb3Z4CUBEUFRSLGEKKworCXBvcAkwN2gKKwlwb3AJMDZoCisJcG9wCTA1aAorCXBvcAkwNGgJCTsgUjQKKwlwb3AJMDNoCQk7IFIzCisJcG9wCTAyaAkJOyBSMgorCXBvcAkwMWgJCTsgUjEKKwlwb3AJMDBoCQk7IFIwCisJcG9wCXBzdworCXBvcAlhY2MgCisJcG9wCWRwaDEgCisJcG9wCWRwbDEKKwlwb3AJZHBoIAorCXBvcAlkcGwgCisJcG9wCWRwcworCXJldGkKKworCis7OyBuZWVkIHRvIGRlbGF5IGV2ZXJ5IHRpbWUgdGhlIGJ5dGUgY291bnRlcnMKKzs7IGZvciB0aGUgRVBzIGhhdmUgYmVlbiBjaGFuZ2VkLgorCitzeW5jZGVsYXk6CisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJcmV0CisKKworc3luY2RlbGF5d3I6CisJbGNhbGwJc3luY2RlbGF5CisJbW92eAlAZHB0cixhCisJcmV0CisKKworLkVuZAorCisKKworCisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvdXNiZHV4L3VzYmR1eHNpZ21hX2Zpcm13YXJlLmFzbSBiL3VzYmR1eC91c2JkdXhzaWdtYV9maXJtd2FyZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzMDVlNQotLS0gL2Rldi9udWxsCisrKyBiL3VzYmR1eC91c2JkdXhzaWdtYV9maXJtd2FyZS5hc20KQEAgLTAsMCArMSwxMjIwIEBACis7ICAgdXNiZHV4X2Zpcm13YXJlLmFzbQorOyAgIENvcHlyaWdodCAoQykgMjAxMCwyMDExIEJlcm5kIFBvcnIsIEJlcm5kLlBvcnJAZjJzLmNvbQorOyAgIEZvciB1c2JkdXhzaWdtYS5jIDAuNSsKKzsKKzsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorOyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKzsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorOyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorOworOworOyBGaXJtd2FyZTogdXNiZHV4c2lnbWFfZmlybXdhcmUuYXNtIGZvciB1c2JkdXhzaWdtYS5jCis7IERlc2NyaXB0aW9uOiBVbml2ZXJzaXR5IG9mIFN0aXJsaW5nIFVTQiBEQVEgJiBJTkNJVEUgVGVjaG5vbG9neSBMaW1pdGVkCis7IERldmljZXM6IFtJVExdIFVTQi1EVVgtU0lHTUEgKHVzYmR1eHNpZ21hLmtvKQorOyBBdXRob3I6IEJlcm5kIFBvcnIgPEJlcm5kLlBvcnJAZjJzLmNvbT4KKzsgVXBkYXRlZDogMjQgSnVsIDIwMTEKKzsgU3RhdHVzOiB0ZXN0aW5nCis7Cis7OzsKKzs7OworOzs7CisJCisJLmluYwlmeDItaW5jbHVkZS5hc20KKworOzs7IGEgY291cGxlIG9mIGZsYWdzCisJLmVxdQlDTURfRkxBRyw4MGgJOyBmbGFnIGZvciB0aGUgbmV4dCBpbiB0cmFuc2ZlcgorCS5lcXUJUFdNRkxBRyw4MWgJOyBQV00gb24gb3Igb2ZmPworCS5lcXUJTUFYU01QTCw4MkgJOyBtYXhpbXVtIG51bWJlciBvZiBzYW1wbGVzLCBuIGNoYW5uZWxsaXN0CisJLmVxdQlNVVhTRzAsODNICTsgY29udGVudCBvZiB0aGUgTVVYU0cwIHJlZ2lzdGVyCisKKzs7OyBhY3R1YWwgY29kZQorCS5vcmcJMDAwMGgJCTsgYWZ0ZXIgcmVzZXQgdGhlIHByb2Nlc3NvciBzdGFydHMgaGVyZQorCWxqbXAJbWFpbgkJOyBqdW1wIHRvIHRoZSBtYWluIGxvb3AKKworCS5vcmcJMDA0M2gJCTsgdGhlIElSUTItdmVjdG9yCisJbGptcAlqbXB0YmwJCTsgaXJxIHNlcnZpY2Utcm91dGluZQorCQorCS5vcmcJMDEwMGgJCTsgc3RhcnQgb2YgdGhlIGp1bXAgdGFibGUKKworam1wdGJsOglsam1wCXN1ZGF2X2lzcgorCW5vcAorCWxqbXAJc29mX2lzcgorCW5vcAorCWxqbXAJc3V0b2tfaXNyCisJbm9wCisJbGptcAlzdXNwZW5kX2lzcgorCW5vcAorCWxqbXAJdXNicmVzZXRfaXNyCisJbm9wCisJbGptcAloaXNwZWVkX2lzcgorCW5vcAorCWxqbXAJZXAwYWNrX2lzcgorCW5vcAorCWxqbXAJc3BhcmVfaXNyCisJbm9wCisJbGptcAllcDBpbl9pc3IKKwlub3AKKwlsam1wCWVwMG91dF9pc3IKKwlub3AKKwlsam1wCWVwMWluX2lzcgorCW5vcAorCWxqbXAJZXAxb3V0X2lzcgorCW5vcAorCWxqbXAJZXAyX2lzcgorCW5vcAorCWxqbXAJZXA0X2lzcgorCW5vcAorCWxqbXAJZXA2X2lzcgorCW5vcAorCWxqbXAJZXA4X2lzcgorCW5vcAorCWxqbXAJaWJuX2lzcgorCW5vcAorCWxqbXAJc3BhcmVfaXNyCisJbm9wCisJbGptcAllcDBwaW5nX2lzcgorCW5vcAorCWxqbXAJZXAxcGluZ19pc3IKKwlub3AKKwlsam1wCWVwMnBpbmdfaXNyCisJbm9wCisJbGptcAllcDRwaW5nX2lzcgorCW5vcAorCWxqbXAJZXA2cGluZ19pc3IKKwlub3AKKwlsam1wCWVwOHBpbmdfaXNyCisJbm9wCisJbGptcAllcnJsaW1pdF9pc3IKKwlub3AKKwlsam1wCXNwYXJlX2lzcgorCW5vcAorCWxqbXAJc3BhcmVfaXNyCisJbm9wCisJbGptcAlzcGFyZV9pc3IKKwlub3AKKwlsam1wCWVwMmlzb2Vycl9pc3IKKwlub3AKKwlsam1wCWVwNGlzb2Vycl9pc3IKKwlub3AKKwlsam1wCWVwNmlzb2Vycl9pc3IKKwlub3AKKwlsam1wCWVwOGlzb2Vycl9pc3IKKworCQorCTs7IGR1bW15IGlzcgorc3VkYXZfaXNyOgkKK3N1dG9rX2lzcjoJCitzdXNwZW5kX2lzcjoJCit1c2JyZXNldF9pc3I6CQoraGlzcGVlZF9pc3I6CQorZXAwYWNrX2lzcjoJCitzcGFyZV9pc3I6CQorZXAwaW5faXNyOgkKK2VwMG91dF9pc3I6CQorZXAxaW5faXNyOgkKK2libl9pc3I6CQorZXAwcGluZ19pc3I6CQorZXAxcGluZ19pc3I6CQorZXAycGluZ19pc3I6CQorZXA0cGluZ19pc3I6CQorZXA2cGluZ19pc3I6CQorZXA4cGluZ19pc3I6CQorZXJybGltaXRfaXNyOgkKK2VwMmlzb2Vycl9pc3I6CQorZXA0aXNvZXJyX2lzcjoJCitlcDZpc29lcnJfaXNyOgkKK2VwOGlzb2Vycl9pc3I6CitlcDZfaXNyOgorZXAyX2lzcjoKK2VwNF9pc3I6CQorCisJcHVzaAlkcHMKKwlwdXNoCWRwbAorCXB1c2gJZHBoCisJcHVzaAlkcGwxCisJcHVzaAlkcGgxCisJcHVzaAlhY2MKKwlwdXNoCXBzdworCisJOzsgY2xlYXIgdGhlIFVTQjIgaXJxIGJpdCBhbmQgcmV0dXJuCisJbW92CWEsRVhJRgorCWNscglhY2MuNAorCW1vdglFWElGLGEKKworCXBvcAlwc3cKKwlwb3AJYWNjIAorCXBvcAlkcGgxIAorCXBvcAlkcGwxCisJcG9wCWRwaCAKKwlwb3AJZHBsIAorCXBvcAlkcHMKKwkKKwlyZXRpCisKKwkJCis7OzsgbWFpbiBwcm9ncmFtCis7OzsgYmFzaWNhbGx5IG9ubHkgaW5pdGlhbGlzZXMgdGhlIHByb2Nlc3NvciBhbmQKKzs7OyB0aGVuIGVuZ2FnZXMgaW4gYW4gZW5kbGVzcyBsb29wCittYWluOgorCW1vdglEUFRSLCNDUFVDUwk7IENQVSBjb250cm9sIHJlZ2lzdGVyCisJbW92CWEsIzAwMDEwMDAwYgk7IDQ4TWh6CisJbGNhbGwJc3luY2RlbGF5d3IKKworICAgICAgICBtb3YgICAgIGRwdHIsI1JFVkNUTAorICAgICAgICBtb3YgICAgIGEsIzAwMDAwMDExYiAgICA7IGFsbG93cyBza2lwCisgICAgICAgIGxjYWxsICAgc3luY2RlbGF5d3IKKworCW1vdglJUCwjMAkJOyBhbGwgc3RkIDgwNTEgaW50IGhhdmUgbG93IHByaW9yaXR5CisJbW92CUVJUCwjMEZGSAk7IGFsbCBGWDIgaW50ZXJydXB0cyBoYXZlIGhpZ2ggcHJpb3JpdHkKKwkKKwltb3YJZHB0ciwjSU5UU0VUVVAJOyBJUlEgc2V0dXAgcmVnaXN0ZXIKKwltb3YJYSwjMDhoCQk7IGVuYWJsZSBhdXRvdmVjdG9yCisJbGNhbGwJc3luY2RlbGF5d3IKKworCW1vdglkcHRyLCNQT1JUQ0NGRworCW1vdglhLCMwCisJbGNhbGwJc3luY2RlbGF5d3IKKworCWxjYWxsCWluaXRBRAkJOyBpbml0IHRoZSBwb3J0cyB0byB0aGUgY29udmVydGVycworCisJbGNhbGwJaW5pdGVwcwkJOyBpbml0IHRoZSBpc29jaHJvbm91cyBkYXRhLXRyYW5zZmVyCisKKzs7OyBtYWluIGxvb3AsIHJlc3QgaXMgZG9uZSBhcyBpbnRlcnJ1cHRzCittbG9vcDI6CW5vcAorCis7OzsgcHdtCisJbW92CXIwLCNQV01GTEFHCTsgcHdtIG9uPworCW1vdglhLEByMAkJOyBnZXQgaW5mbworCWp6CW1sb29wMgkJOyBpdCdzIG9mZgorCisJbW92CWEsR1BJRlRSSUcJOyBHUElGIHN0YXR1cworCWFubAlhLCM4MGgJCTsgZG9uZSBiaXQKKwlqegltbG9vcDIJCTsgR1BJRiBzdGlsbCBidXN5CisKKyAgICAgICAgbW92ICAgICBhLCMwMWgJCTsgV1IsRVA0LCAwMSA9IEVQNAorICAgICAgICBtb3YgICAgIEdQSUZUUklHLGEJOyByZXN0YXJ0IGl0CisKKwlzam1wCW1sb29wMgkJOyBsb29wIGZvciBldmVyCisKKworOzs7IGluaXRpYWxpc2UgdGhlIHBvcnRzIGZvciB0aGUgQUQtY29udmVydGVyCitpbml0QUQ6CisJbW92CXIwLCNNQVhTTVBMCTsgbGVuZ3RoIG9mIGNoYW5uZWxsaXN0CisJbW92CUByMCwjMAkJOyB3ZSBkb24ndCB3YW50IHRvIGFjY3VtbGF0ZSBzYW1wbGVzCisKKwltb3YJT0VBLCMxMTEwMDAwMGIJOyBQb3J0QTcsQTYsQTUgT3V0cHV0cworCW1vdglJT0EsIzAxMTAwMDAwYgk7IC9DUyA9IDEgYW5kIFNUQVJUID0gMAorCW1vdglkcHRyLCNJRkNPTkZJRwk7IHN3aXRjaCBvbiBjbG9jayBvbiBJRkNMSyBwaW4KKwltb3YJYSwjMTAxMDAwMDBiCTsgZ3BpZiwgMzBNSHosIGludGVybmFsIElGQ0xLIC0+IDE1TUh6IGZvciBBRAorCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJU0NPTjAsIzAxM0gJOyBzZXIgcmVjIGVuLCBUWC9SWDogc3RvcCwgNDgvMTJNSHo9NE1IeiBjbG9jaworCQorCW1vdglkcHRyLCNQT1JURUNGRworCW1vdglhLCMwMDAwMTAwMGIJOyBzcGVjaWFsIGZ1bmN0aW9uIGZvciBwb3J0IEU6IFJYRDBPVVQKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJcmV0CisKKworOzs7IHNlbmQgYSBieXRlIHZpYSBTUEkKKzs7OyBjb250ZW50IGluIGEsIGRwdHIxIGlzIGNoYW5nZWQKKzs7OyB0aGUgbG9va3VwIGlzIGRvbmUgaW4gZHB0cjEgc28gdGhhdCB0aGUgbm9ybWFsIGRwdHIgaXMgbm90IGFmZmVjdGVkCis7OzsgaW1wb3J0YW50OiAvY3MgbmVlZHMgdG8gYmUgcmVzZXQgdG8gMSBieSB0aGUgY2FsbGVyOiBJT0EuNQorc2VuZFNQSToKKwlpbmMJRFBTCisJCisJOzsgYml0IHJldmVyc2UKKwltb3YJZHB0ciwjc3dhcF9sdXQJOyBsb29rdXAgdGFibGUKKwltb3ZjIAlhLEBhK2RwdHIJOyByZXZlcnNlIGJpdHMKKworCTs7IGNsZWFyIGludGVycnVwdCBmbGFnLCBpcyB1c2VkIHRvIGRldGVjdAorCTs7IHN1Y2Nlc3NmdWwgdHJhbnNtaXNzaW9uCisJY2xyCVNDT04wLjEJCTsgY2xlYXIgaW50ZXJydXB0IGZsYWcKKworCTs7IHN0YXJ0IHRyYW5zbWlzc2lvbiBieSB3cml0aW5nIHRoZSBieXRlCisJOzsgaW4gdGhlIHRyYW5zbWl0IGJ1ZmZlcgorCW1vdglTQlVGMCxhCQk7IHN0YXJ0IHRyYW5zbWlzc2lvbgorCisJOzsgd2FpdCBmb3IgdGhlIGVuZCBvZiB0aGUgdHJhbnNtaXNzaW9uCitzZW5kU1BJd2FpdDoKKwltb3YJYSxTQ09OMAkJOyBnZXQgdHJhbnNtaXNzaW9uIHN0YXR1cworCWpuYiAgICAgQUNDLjEsc2VuZFNQSXdhaXQJOyBsb29wIHVudGlsIHRyYW5zbWl0dGVkCisKKwlpbmMJRFBTCisJCisJcmV0CisKKworCisJCis7OzsgcmVjZWl2ZSBhIGJ5dGUgdmlhIFNQSQorOzs7IGNvbnRlbnQgaW4gYSwgZHB0ciBpcyBjaGFuZ2VkCis7OzsgdGhlIGxvb2t1cCBpcyBkb25lIGluIGRwdHIxIHNvIHRoYXQgdGhlIG5vcm1hbCBkcHRyIGlzIG5vdCBhZmZlY3RlZAorOzs7IGltcG9ydGFudDogdGhlIC9DUyBuZWVkcyB0byBiZSBzZXQgdG8gMSBieSB0aGUgY2FsbGVyIHZpYSAic2V0YiBJT0EuNSIKK3JlY1NQSToKKwlpbmMJRFBTCisJCisJY2xyCUlPQS41CQk7IC9jcyB0byAwCQorCisJOzsgY2xlYXJuaW5nIHRoZSBSSSBiaXQgc3RhcnRzIHJlY2VwdGlvbiBvZiBkYXRhCisJY2xyCVNDT04wLjAKKworcmVjU1BJd2FpdDoKKwk7OyBSSSBnb2VzIGJhY2sgdG8gMSBhZnRlciB0aGUgcmVjZXB0aW9uIG9mIHRoZSA4IGJpdHMKKwltb3YJYSxTQ09OMAkJOyBnZXQgcmVjZWl2ZSBzdGF0dXMKKwlqbmIJQUNDLjAscmVjU1BJd2FpdDsgbG9vcCB1bnRpbCBhbGwgYml0cyByZWNlaXZlZAorCisJOzsgcmVhZCB0aGUgYnl0ZSBmcm9tIHRoZSBidWZmZXIKKwltb3YJYSxTQlVGMAkJOyBnZXQgYnl0ZQorCQorCTs7IGxvb2t1cDogcmV2ZXJzZSB0aGUgYml0cworCW1vdglkcHRyLCNzd2FwX2x1dAk7IGxvb2t1cCB0YWJsZQorCW1vdmMgCWEsQGErZHB0cgk7IHJldmVyc2UgdGhlIGJpdHMKKworCWluYwlEUFMKKwkKKwlyZXQKKworCisKKwkKKzs7OyByZWFkcyBhIHJlZ2lzdGVyCis7OzsgcmVnaXN0ZXIgYWRkcmVzcyBpbiBhCis7OzsgcmV0dXJucyB2YWx1ZSBpbiBhCityZWdpc3RlclJlYWQ6CisJYW5sCWEsIzAwMDAxMTExYgk7IG1hc2sgb3V0IHRoZSBpbmRleCB0byB0aGUgcmVnaXN0ZXIKKwlvcmwJYSwjMDEwMDAwMDBiCTsgMDEweHh4eHggaW5kaWNhdGVzIHJlZ2lzdGVyIHJlYWQKKwljbHIJSU9BLjUJCTsgQURDIC9jcyB0byAwCisJbGNhbGwJc2VuZFNQSQkJOyBzZW5kIHRoZSBjb21tYW5kIG92ZXIKKwlsY2FsbAlyZWNTUEkJCTsgcmVhZCB0aGUgY29udGVudHMgYmFjaworCXNldGIJSU9BLjUJCTsgQURDIC9jcyB0byAxCisJcmV0CisKKworCis7Ozsgd3JpdGVzIHRvIGEgcmVnaXN0ZXIKKzs7OyByZWdpc3RlciBhZGRyZXNzIGluIGEKKzs7OyB2YWx1ZSBpbiByMAorcmVnaXN0ZXJXcml0ZToKKwlwdXNoCWFjYworCWFubAlhLCMwMDAwMTExMWIJOyBtYXNrIG91dCB0aGUgaW5kZXggdG8gdGhlIHJlZ2lzdGVyCisJb3JsCWEsIzAxMTAwMDAwYgk7IDAxMXh4eHh4IGluZGljYXRlcyByZWdpc3RlciB3cml0ZQorCisJY2xyCUlPQS41CQk7IEFEQyAvY3MgdG8gMAkKKworCWxjYWxsCXNlbmRTUEkJCTsKKwltb3YJYSxyMAorCWxjYWxsCXNlbmRTUEkKKworCXNldGIJSU9BLjUJCTsgQURDIC9jcyB0byAxCisJcG9wCWFjYworCisJbGNhbGwJcmVnaXN0ZXJSZWFkCTsgY2hlY2sgaWYgdGhlIGRhdGEgaGFzIGFycml2ZWQgaW4gdGhlIEFEQworCW1vdgkwZjBoLHIwCQk7IHJlZ2lzdGVyIEIKKwljam5lCWEsMGYwaCxyZWdpc3RlcldyaXRlIDsgc29tZXRoaW5nIHdlbnQgd3JvbmcsIHRyeSBhZ2FpbgorCQorCXJldAorCisKKworOzs7IGluaXRpbGlzZSB0aGUgZW5kcG9pbnRzCitpbml0ZXBzOgorCW1vdglkcHRyLCNGSUZPUkVTRVQKKwltb3YJYSwjODBICQkKKwltb3Z4CUBkcHRyLGEJCTsgcmVzZXQgYWxsIGZpZm9zCisJbW92CWEsIzIJCisJbW92eAlAZHB0cixhCQk7IAorCW1vdglhLCM0CQkKKwltb3Z4CUBkcHRyLGEJCTsgCisJbW92CWEsIzYJCQorCW1vdngJQGRwdHIsYQkJOyAKKwltb3YJYSwjOAkJCisJbW92eAlAZHB0cixhCQk7IAorCW1vdglhLCMwCQkKKwltb3Z4CUBkcHRyLGEJCTsgbm9ybWFsIG9wZXJhdAorCQorCW1vdglEUFRSLCNFUDJDRkcKKwltb3YJYSwjMTAwMTAwMTBiCTsgdmFsaWQsIG91dCwgZG91YmxlIGJ1ZmYsIGlzbworCW1vdngJQERQVFIsYQorCisJbW92CWRwdHIsI0VQMkZJRk9DRkcKKwltb3YJYSwjMDAwMDAwMDBiCTsgbWFudWFsCisJbW92eAlAZHB0cixhCisKKwltb3YJZHB0ciwjRVAyQkNMCTsgImFybSIgaXQKKwltb3YJYSwjMDBoCisJbW92eAlARFBUUixhCQk7IGNhbiByZWNlaXZlIGRhdGEKKwlsY2FsbAlzeW5jZGVsYXkJOyB3YWl0IHRvIHN5bmMKKwltb3Z4CUBEUFRSLGEJCTsgY2FuIHJlY2VpdmUgZGF0YQorCWxjYWxsCXN5bmNkZWxheQk7IHdhaXQgdG8gc3luYworCW1vdngJQERQVFIsYQkJOyBjYW4gcmVjZWl2ZSBkYXRhCisJbGNhbGwJc3luY2RlbGF5CTsgd2FpdCB0byBzeW5jCisJCisJbW92CURQVFIsI0VQMU9VVENGRworCW1vdglhLCMxMDEwMDAwMGIJOyB2YWxpZAorCW1vdngJQGRwdHIsYQorCisJbW92CWRwdHIsI0VQMU9VVEJDCTsgImFybSIgaXQKKwltb3YJYSwjMDBoCisJbW92eAlARFBUUixhCQk7IGNhbiByZWNlaXZlIGRhdGEKKwlsY2FsbAlzeW5jZGVsYXkJOyB3YWl0IHVudGlsIHdlIGNhbiB3cml0ZSBhZ2FpbgorCW1vdngJQGRwdHIsYQkJOyBtYWtlIHNodXJlIGl0cyByZWFsbHkgZW1wdHkKKwlsY2FsbAlzeW5jZGVsYXkJOyB3YWl0CisKKwltb3YJRFBUUiwjRVA2Q0ZHCTsgSVNPIGRhdGEgZnJvbSBoZXJlIHRvIHRoZSBob3N0CisJbW92CWEsIzExMDEwMDEwYgk7IFZhbGlkCisJbW92eAlARFBUUixhCQk7IElTTyB0cmFuc2ZlciwgZG91YmxlIGJ1ZmZlcmluZworCisJbW92CURQVFIsI0VQOENGRwk7IEVQOAorCW1vdglhLCMxMTEwMDAwMGIJOyBCVUxLIGRhdGEgZnJvbSBoZXJlIHRvIHRoZSBob3N0CisJbW92eAlARFBUUixhCQk7CisKKwk7OyBlbmFibGUgaW50ZXJydXB0cworCW1vdglkcHRyLCNFUElFCTsgaW50ZXJydXB0IGVuYWJsZQorCW1vdglhLCMxMDAwMTAwMGIJOyBlbmFibGUgaXJxIGZvciBlcDFvdXQsOAorCW1vdngJQGRwdHIsYQkJOyBkbyBpdAorCisJbW92CWRwdHIsI0VQSVJRCTsgY2xlYXIgSVJRcworCW1vdglhLCMxMDAwMTAwMGIKKwltb3Z4CUBkcHRyLGEKKwkKKyAgICAgICAgbW92ICAgICBEUFRSLCNVU0JJRQk7IFVTQiBpbnQgZW5hYmxlcyByZWdpc3RlcgorICAgICAgICBtb3YgICAgIGEsIzIgICAgICAgICAgICA7IGVuYWJsZXMgU09GICgxbXMvMTI1dXMgaW50ZXJydXB0KQorICAgICAgICBtb3Z4ICAgIEBEUFRSLGEgICAgICAgICA7IAorCisJbW92CUVJRSwjMDAwMDAwMDFiCTsgZW5hYmxlIElOVDIvVVNCSU5UIGluIHRoZSA4MDUxJ3MgU0ZSCisJbW92CUlFLCM4MGgJCTsgSUUsIGVuYWJsZSBhbGwgaW50ZXJydXB0cworCisJcmV0CisKKworOzs7IFJlYWRzIG9uZSBBREMgY2hhbm5lbCBmcm9tIHRoZSBjb252ZXJ0ZXIgYW5kIHN0b3JlcworOzs7IHRoZSByZXN1bHQgYXQgZHB0cgorcmVhZEFEQ2NoOgorCTs7IHdlIGRvIHBvbGxpbmc6IHdlIHdhaXQgdW50aWwgREFUQSBSRUFEWSBpcyB6ZXJvCisJbW92CWEsSU9BCQk7IGdldCAvRFJEWQorCWpiCUFDQy4wLHJlYWRBRENjaAk7IHdhaXQgdW50aWwgZGF0YSByZWFkeSAoRFJEWT0wKQorCQorCTs7IHJlYWRpbmcgZGF0YSBpcyBkb25lIGJ5IGp1c3QgZHJvcHBpbmcgL0NTIGFuZCBzdGFydCByZWFkaW5nIGFuZAorCTs7IHdoaWxlIGtlZXBpbmcgdGhlIElOIHNpZ25hbCB0byB0aGUgQURDIGluYWN0aXZlCisJY2xyCUlPQS41CQk7IC9jcyB0byAwCisJCisJOzsgMXN0IGJ5dGU6IFNUQVRVUworCWxjYWxsCXJlY1NQSQkJOyBpbmRleAorCW1vdngJQGRwdHIsYQkJOyBzdG9yZSB0aGUgYnl0ZQorCWluYwlkcHRyCQk7IGluY3JlbWVudCBwb2ludGVyCisKKwk7OyAybmQgYnl0ZTogTVNCCisJbGNhbGwJcmVjU1BJCQk7IGRhdGEKKwltb3Z4CUBkcHRyLGEKKwlpbmMJZHB0cgorCisJOzsgM3JkIGJ5dGU6IE1TQi0xCisJbGNhbGwJcmVjU1BJCQk7IGRhdGEKKwltb3Z4CUBkcHRyLGEKKwlpbmMJZHB0cgorCisJOzsgNHRoIGJ5dGU6IExTQgorCWxjYWxsCXJlY1NQSQkJOyBkYXRhCisJbW92eAlAZHB0cixhCisJaW5jCWRwdHIKKwkKKwk7OyBnb3QgYWxsIGJ5dGVzCisJc2V0YglJT0EuNQkJOyAvY3MgdG8gMQorCQorCXJldAorCisJCisKKzs7OyBpbnRlcnJ1cHQtcm91dGluZSBmb3IgU09GCitzb2ZfaXNyOgorCXB1c2gJZHBzCisJcHVzaAlkcGwKKwlwdXNoCWRwaAorCXB1c2gJZHBsMQorCXB1c2gJZHBoMQorCXB1c2gJYWNjCisJcHVzaAlwc3cKKwlwdXNoCTAwaAkJOyBSMAorCXB1c2gJMDFoCQk7IFIxCisJcHVzaAkwMmgJCTsgUjIKKwlwdXNoCTAzaAkJOyBSMworCXB1c2gJMDRoCQk7IFI0CisJcHVzaAkwNWgJCTsgUjUKKwlwdXNoCTA2aAkJOyBSNgorCXB1c2gJMDdoCQk7IFI3CisKKwljbHIJSUUuNwkJOyBtYWtlIHN1cmUgdGhhdCBubyBvdGhlciBpbnQncyBkaXN0dXJiZSB1cworCQorCW1vdglhLEVQMjQ2OFNUQVQKKwlhbmwJYSwjMjBICQk7IGZ1bGw/CisJam56CWVwZnVsbAkJOyBFUDYtYnVmZmVyIGlzIGZ1bGwKKworCWNscglJT0EuNwkJOyBzdG9wIGNvbnZlcnRlciwgU1RBUlQgPSAwCisKKwk7OyBtYWtlIHN1cmUgdGhhdCB3ZSBhcmUgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgY2hhbm5lbAorCW1vdglyMCwjTVVYU0cwCTsKKwltb3YJYSxAcjAJCTsgZ2V0IGNvbmZpZyBvZiBNVVhTRzAKKwltb3YJcjAsYQorCW1vdglhLCMwNEgJCTsgTVVYU0cwCisJbGNhbGwJcmVnaXN0ZXJXcml0ZQk7IHRoaXMgcmVzZXRzIHRoZSBjaGFubmVsIHNlcXVlbmNlCisKKwlzZXRiCUlPQS43CQk7IHN0YXJ0IGNvbnZlcnRlciwgU1RBUlQgPSAxCisJCisJOzsgZ2V0IHRoZSBkYXRhIGZyb20gdGhlIEFEQyBhcyBmYXN0IGFzIHBvc3NpYmxlIGFuZCB0cmFuc2ZlciBpdAorCTs7IHRvIHRoZSBFUCBidWZmZXIKKwltb3YJZHB0ciwjMGY4MDBoCTsgRVA2IGJ1ZmZlcgorCW1vdglhLElPRAkJOyBnZXQgRElPIEQKKwltb3Z4CUBkcHRyLGEJCTsgc3RvcmUgaXQKKwlpbmMJZHB0cgkJOyBuZXh0IGJ5dGUKKwltb3YJYSxJT0MJCTsgZ2V0IERJTyBDCisJbW92eAlAZHB0cixhCQk7IHN0b3JlIGl0CisJaW5jCWRwdHIJCTsgbmV4dCBieXRlCisJbW92CWEsSU9CCQk7IGdldCBESU8gQgorCW1vdngJQGRwdHIsYQkJOyBzdG9yZSBpdAorCWluYwlkcHRyCQk7IG5leHQgYnl0ZQorCW1vdglhLCMwCQk7IGp1c3QgemVybworCW1vdngJQGRwdHIsYQkJOyBwYWQgaXQgdXAKKwlpbmMJZHB0cgkJOyBhbGdpbiBhbG9uZyBhIDMyIGJpdCB3b3JkCisKKwltb3YJcjAsI01BWFNNUEwJOyBudW1iZXIgb2Ygc2FtcGxlcyB0byB0cmFuc21pdAorCW1vdglhLEByMAkJOyBnZXQgdGhlbQorCW1vdglyMSxhCQk7IGNvdW50ZXIKKworCTs7IG1haW4gbG9vcCwgZ2V0IGFsbCB0aGUgZGF0YQorZXB0cmFuczoJCisJbGNhbGwJcmVhZEFEQ2NoCTsgZ2V0IG9uZSByZWFkaW5nCisJZGpueglyMSxlcHRyYW5zCTsgZG8gdW50aWwgd2UgaGF2ZSBhbGwgY29udGVudCB0cmFuc2YnZAorCisJY2xyCUlPQS43CQk7IHN0b3AgY29udmVydGVyLCBTVEFSVCA9IDAKKworCTs7IGFybSB0aGUgZW5kcG9pbnQgYW5kIHNlbmQgb2ZmIHRoZSBkYXRhCisJbW92CURQVFIsI0VQNkJDSAk7IGJ5dGUgY291bnQgSAorCW1vdglhLCMwCQk7IGlzIHplcm8KKwlsY2FsbAlzeW5jZGVsYXl3cgk7IHdhaXQgdW50aWwgd2UgY2FuIHdyaXRlIGFnYWluCisJCisJbW92CXIwLCNNQVhTTVBMCTsgbnVtYmVyIG9mIHNhbXBsZXMgdG8gdHJhbnNtaXQKKwltb3YJYSxAcjAJCTsgZ2V0IHRoZW0KKwlybAlhCQk7IGE9YSoyCisJcmwJYQkJOyBhPWEqMgorCWFkZAlhLCM0CQk7IGZvdXIgYnl0ZXMgZm9yIERJTworCW1vdglEUFRSLCNFUDZCQ0wJOyBieXRlIGNvdW50IEwKKwlsY2FsbAlzeW5jZGVsYXl3cgk7IHdhaXQgdW50aWwgd2UgY2FuIHdyaXRlIGFnYWluCisKK2VwZnVsbDoKKwk7OyBkbyB0aGUgRC9BIGNvbnZlcnNpb24KKwltb3YJYSxFUDI0NjhTVEFUCisJYW5sCWEsIzAxSAkJOyBlbXB0eQorCWpuegllcGVtcHR5CQk7IG5vdGhpbmcgdG8gZ2V0CisKKwltb3YJZHB0ciwjMEYwMDBICTsgRVAyIGZpZm8gYnVmZmVyCisJbGNhbGwJZGFsbwkJOyBjb252ZXJzaW9uCisKKwltb3YJZHB0ciwjRVAyQkNMCTsgImFybSIgaXQKKwltb3YJYSwjMDBoCisJbGNhbGwJc3luY2RlbGF5d3IJOyB3YWl0IGZvciB0aGUgcmVjIHRvIHN5bmMKKwlsY2FsbAlzeW5jZGVsYXl3cgk7IHdhaXQgZm9yIHRoZSByZWMgdG8gc3luYworCitlcGVtcHR5OgkKKwk7OyBjbGVhciBJTlQyCisJbW92CWEsRVhJRgkJOyBGSVJTVCBjbGVhciB0aGUgVVNCIChJTlQyKSBpbnRlcnJ1cHQgcmVxdWVzdAorCWNscglhY2MuNAorCW1vdglFWElGLGEJCTsgTm90ZTogRVhJRiByZWcgaXMgbm90IDgwNTEgYml0LWFkZHJlc3NhYmxlCisJCisJbW92CURQVFIsI1VTQklSUQk7IHBvaW50cyB0byB0aGUgU09GCisJbW92CWEsIzIJCTsgY2xlYXIgdGhlIFNPRgorCW1vdngJQERQVFIsYQorCitub3NvZjoKKwlzZXRiCUlFLjcJCTsgcmUtZW5hYmxlIGdsb2JhbCBpbnRlcnJ1cHRzCisJCisJcG9wCTA3aAorCXBvcAkwNmgKKwlwb3AJMDVoCisJcG9wCTA0aAkJOyBSNAorCXBvcAkwM2gJCTsgUjMKKwlwb3AJMDJoCQk7IFIyCisJcG9wCTAxaAkJOyBSMQorCXBvcAkwMGgJCTsgUjAKKwlwb3AJcHN3CisJcG9wCWFjYyAKKwlwb3AJZHBoMSAKKwlwb3AJZHBsMQorCXBvcAlkcGggCisJcG9wCWRwbCAKKwlwb3AJZHBzCisJcmV0aQorCisKK3Jlc2V0X2VwODoKKwk7OyBlcmFzZSBhbGwgZGF0YSBpbiBlcDgKKwltb3YJZHB0ciwjRklGT1JFU0VUCisJbW92CWEsIzgwSAkJOyBOQUsKKwlsY2FsbAlzeW5jZGVsYXl3cgorCW1vdglkcHRyLCNGSUZPUkVTRVQKKwltb3YJYSwjOAkJOyByZXNldCBFUDgKKwlsY2FsbAlzeW5jZGVsYXl3cgorCW1vdglkcHRyLCNGSUZPUkVTRVQKKwltb3YJYSwjMAkJOyBub3JtYWwgb3BlcmF0aW9uCisJbGNhbGwJc3luY2RlbGF5d3IKKwlyZXQKKworCityZXNldF9lcDY6CisJOzsgdGhyb3cgb3V0IG9sZCBkYXRhCisJbW92CWRwdHIsI0ZJRk9SRVNFVAorCW1vdglhLCM4MEgJCTsgTkFLCisJbGNhbGwJc3luY2RlbGF5d3IKKwltb3YJZHB0ciwjRklGT1JFU0VUCisJbW92CWEsIzYJCTsgcmVzZXQgRVA2CisJbGNhbGwJc3luY2RlbGF5d3IKKwltb3YJZHB0ciwjRklGT1JFU0VUCisJbW92CWEsIzAJCTsgbm9ybWFsIG9wZXJhdGlvbgorCWxjYWxsCXN5bmNkZWxheXdyCisJcmV0CisKKworOzs7IGNvbmZpZ3VyZSB0aGUgQURDIGNvbnZlcnRlcgorOzs7IHRoZSBkcHRyIHBvaW50cyB0byB0aGUgaW5pdCBkYXRhOgorOzs7IENPTkZJRyAwLDEsMyw0LDUsNgorOzs7IG5vdGUgdGhhdCBDT05GSUcyIGlzIG9taXR0ZWQKK2NvbmZpZ0FEQzoJCisJY2xyCUlPQS43CQk7IHN0b3BzIEFEQzogU1RBUlQgbGluZSBvZiBBREMgPSBMCisJc2V0YglJT0EuNQkJOyBBREMgL2NzIHRvIDEKKworCTs7IGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgaGFzIGdvbmUgd3JvbmcKKwlub3AKKwlub3AKKwlub3AKKworCW1vdglhLCMxMTAwMDAwMGIJOyByZXNldAl0aGUgQURDCisJY2xyCUlPQS41CQk7IEFEQyAvY3MgdG8gMAkKKwlsY2FsbAlzZW5kU1BJCisJc2V0YglJT0EuNQkJOyBBREMgL2NzIHRvIDEJCisKKwltb3Z4CWEsQGRwdHIJCTsKKwlpbmMJZHB0cgorCW1vdglyMCxhCisJbW92CWEsIzAwSAkJOyBDT05GSUcwCisJbGNhbGwJcmVnaXN0ZXJXcml0ZQorCisJbW92eAlhLEBkcHRyCQk7CisJaW5jCWRwdHIKKwltb3YJcjAsYQorCW1vdglhLCMwMUgJCTsgQ09ORklHMQorCWxjYWxsCXJlZ2lzdGVyV3JpdGUKKworCW1vdngJYSxAZHB0cgkJOworCWluYwlkcHRyCisJbW92CXIwLGEKKwltb3YJYSwjMDNICQk7IE1VWERJRgorCWxjYWxsCXJlZ2lzdGVyV3JpdGUKKworCW1vdngJYSxAZHB0cgkJOworCWluYwlkcHRyCisJbW92CXIwLCNNVVhTRzAKKwltb3YJQHIwLGEJCTsgc3RvcmUgaXQgZm9yIHJlc2V0IHB1cnBvc2VzCisJbW92CXIwLGEKKwltb3YJYSwjMDRICQk7IE1VWFNHMAorCWxjYWxsCXJlZ2lzdGVyV3JpdGUKKwkKKwltb3Z4CWEsQGRwdHIJCTsKKwlpbmMJZHB0cgorCW1vdglyMCxhCisJbW92CWEsIzA1SAkJOyBNVVhTRzEKKwlsY2FsbAlyZWdpc3RlcldyaXRlCisJCisJbW92eAlhLEBkcHRyCQk7CisJaW5jCWRwdHIKKwltb3YJcjAsYQorCW1vdglhLCMwNkgJCTsgU1lTUkVECisJbGNhbGwJcmVnaXN0ZXJXcml0ZQorCisJcmV0CisKKwkKKzs7OyBpbnRlcnJ1cHQtcm91dGluZSBmb3IgZXAxb3V0Cis7OzsgcmVjZWl2ZXMgdGhlIGNoYW5uZWwgbGlzdCBhbmQgb3RoZXIgY29tbWFuZHMKK2VwMW91dF9pc3I6CisJcHVzaAlkcHMKKwlwdXNoCWRwbAorCXB1c2gJZHBoCisJcHVzaAlkcGwxCisJcHVzaAlkcGgxCisJcHVzaAlhY2MKKwlwdXNoCXBzdworCXB1c2gJMDBoCQk7IFIwCisJcHVzaAkwMWgJCTsgUjEKKwlwdXNoCTAyaAkJOyBSMgorCXB1c2gJMDNoCQk7IFIzCisJcHVzaAkwNGgJCTsgUjQKKwlwdXNoCTA1aAkJOyBSNQorCXB1c2gJMDZoCQk7IFI2CisJcHVzaAkwN2gJCTsgUjcKKworCWNscglJRS43CQk7IGJsb2NrIG90aGVyIGludGVycnVwdHMKKwkJCisJbW92CWRwdHIsIzBFNzgwaAk7IEZJRk8gYnVmZmVyIG9mIEVQMU9VVAorCW1vdngJYSxAZHB0cgkJOyBnZXQgdGhlIGZpcnN0IGJ5dGUKKwltb3YJcjAsI0NNRF9GTEFHCTsgcG9pbnRlciB0byB0aGUgY29tbWFuZCBieXRlCisJbW92IAlAcjAsYQkJOyBzdG9yZSB0aGUgY29tbWFuZCBieXRlIGZvciBlcDgKKworCW1vdglkcHRyLCNlcDFvdXRfam1wOyBqdW1wIHRhYmxlIGZvciB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucworCXJsCWEJCTsgbXVsdGlwbHkgYnkgMjogc2l6ZW9mIHNqbXAKKwlqbXAJQGErZHB0cgkJOyBqdW1wIHRvIHRoZSBqdW1wIHRhYmxlCisJOzsganVtcCB0YWJsZSwgY29ycmVzcG9uZHMgdG8gdGhlIGNvbW1hbmQgYnl0ZXMgZGVmaW5lZAorCTs7IGluIHVzYmR1eC5jCitlcDFvdXRfam1wOgorCXNqbXAJc3RhcnRhZGMJOyBhPTAKKwlzam1wCXNpbmdsZV9kYQk7IGE9MQorCXNqbXAJY29uZmlnX2RpZ2l0YWxfYjsgYT0yCisJc2ptcAl3cml0ZV9kaWdpdGFsX2IJOyBhPTMKKwlzam1wCWluaXRzZ0FEY2hhbm5lbAk7IGE9NAorCXNqbXAJbm90aGluZwkJOyBhPTUKKwlzam1wCW5vdGhpbmcJCTsgYT02CisJc2ptcAlwd21fb24JCTsgYT03CisJc2ptcAlwd21fb2ZmCQk7IGE9OAorCitub3RoaW5nOgorCWxqbXAJb3Zlcl9kYQorCitwd21fb246CisJbGNhbGwJc3RhcnRQV00KKwlzam1wCW92ZXJfZGEKKworcHdtX29mZjoKKwlsY2FsbAlzdG9wUFdNCisJc2ptcAlvdmVyX2RhCisKK2luaXRzZ0FEY2hhbm5lbDoKKwltb3YJZHB0ciwjMGU3ODFoCTsgRklGTyBidWZmZXIgb2YgRVAxT1VUCisJbGNhbGwJY29uZmlnQURDCTsgY29uZmlndXJlcyB0aGUgQURDIGVzcCBzZWwgdGhlIGNoYW5uZWwKKworCWxjYWxsCXJlc2V0X2VwOAk7IHJlc2V0IEZJRk86IGdldCByaWQgb2Ygb2xkIGJ5dGVzCisJOzsgU2F2ZSBuZXcgQS9EIGRhdGEgaW4gRVA4LiBUaGlzIGlzIHRoZSBmaXJzdCBieXRlCisJOzsgdGhlIGhvc3Qgd2lsbCByZWFkIGR1cmluZyBhbiBJTlNOLiBJZiB0aGVyZSBhcmUKKwk7OyBtb3JlIHRvIGNvbWUgdGhleSB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIElTUiBvZgorCTs7IGVwOC4KKwlsY2FsbAllcDhfb3BzCQk7IGdldCBBL0QgZGF0YQorCQkKKwlzam1wCW92ZXJfZGEKKworCQorOzs7IGNvbmZpZyBBRDoKKzs7OyB3ZSB3cml0ZSB0byB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBBL0QgY29udmVydGVyCitzdGFydGFkYzoKKwltb3YJZHB0ciwjMGU3ODFoCTsgRklGTyBidWZmZXIgb2YgRVAxT1VUIGZyb20gMm5kIGJ5dGUKKworCW1vdngJYSxAZHB0cgkJOyBnZXQgbGVuZ3RoIG9mIGNoYW5uZWwgbGlzdAorCWluYwlkcHRyCisJbW92CXIwLCNNQVhTTVBMCisJbW92CUByMCxhIAkJOyBsZW5ndGggb2YgdGhlIGNoYW5uZWwgbGlzdAorCisJbGNhbGwJY29uZmlnQURDCTsgY29uZmlndXJlcyBhbGwgcmVnaXN0ZXJzCisKKwlsY2FsbAlyZXNldF9lcDYJOyByZXNldCBGSUZPCisJCisJOzsgbG9hZCBuZXcgQS9EIGRhdGEgaW50byBFUDYKKwk7OyBUaGlzIG11c3QgYmUgZG9uZS4gT3RoZXJ3aXNlIHRoZSBJU1IgaXMgbmV2ZXIgY2FsbGVkLgorCTs7IFRoZSBJU1IgaXMgb25seSBjYWxsZWQgd2hlbiBkYXRhIGhhcyBfbGVmdF8gdGhlCisJOzsgZXAgYnVmZmVyIGhlcmUgaXQgaGFzIHRvIGJlIHJlZmlsbGVkLgorCWxjYWxsCWVwNl9hcm0JCTsgZmlsbCB3aXRoIGR1bW15IGRhdGEKKwkKKwlzam1wCW92ZXJfZGEKKworOzs7IFNpbmdsZSBEQSBjb252ZXJzaW9uLiBUaGUgMiBieXRlcyBhcmUgaW4gdGhlIEZJRk8gYnVmZmVyCitzaW5nbGVfZGE6CisJbW92CWRwdHIsIzBlNzgxaAk7IEZJRk8gYnVmZmVyIG9mIEVQMU9VVAorCWxjYWxsCWRhbG8JCTsgY29udmVyc2lvbgorCXNqbXAJb3Zlcl9kYQorCis7OzsgY29uZmlndXJlIHRoZSBwb3J0IEIgYXMgaW5wdXQgb3Igb3V0cHV0IChiaXR3aXNlKQorY29uZmlnX2RpZ2l0YWxfYjoKKwltb3YJZHB0ciwjMGU3ODFoCTsgRklGTyBidWZmZXIgb2YgRVAxT1VUCisJbW92eAlhLEBkcHRyCQk7IGdldCB0aGUgc2Vjb25kIGJ5dGUKKwlpbmMJZHB0cgorCW1vdglPRUIsYQkJOyBzZXQgdGhlIG91dHB1dCBlbmFibGUgYml0cworCW1vdngJYSxAZHB0cgkJOyBnZXQgdGhlIHNlY29uZCBieXRlCisJaW5jCWRwdHIKKwltb3YJT0VDLGEKKwltb3Z4CWEsQGRwdHIJCTsgZ2V0IHRoZSBzZWNvbmQgYnl0ZQorCWluYwlkcHRyCisJbW92CU9FRCxhCisJc2ptcAlvdmVyX2RhCisJCis7OzsgV3JpdGUgb25lIGJ5dGUgdG8gdGhlIGV4dGVybmFsIGRpZ2l0YWwgcG9ydCBCCis7OzsgYW5kIHByZXBhcmUgZm9yIGRpZ2l0YWwgcmVhZAord3JpdGVfZGlnaXRhbF9iOgorCW1vdglkcHRyLCMwZTc4MWgJOyBGSUZPIGJ1ZmZlciBvZiBFUDFPVVQKKwltb3Z4CWEsQGRwdHIJCTsgY29tbWFuZFsxXQorCWluYwlkcHRyCisJbW92CU9FQixhCQk7IG91dHB1dCBlbmFibGUKKwltb3Z4CWEsQGRwdHIJCTsgY29tbWFuZFsyXQorCWluYwlkcHRyCisJbW92CU9FQyxhCisJbW92eAlhLEBkcHRyCQk7IGNvbW1hbmRbM10KKwlpbmMJZHB0cgorCW1vdglPRUQsYSAKKwltb3Z4CWEsQGRwdHIJCTsgY29tbWFuZFs0XQorCWluYwlkcHRyCisJbW92CUlPQixhCQk7CisJbW92eAlhLEBkcHRyCQk7IGNvbW1hbmRbNV0KKwlpbmMJZHB0cgorCW1vdglJT0MsYQorCW1vdngJYSxAZHB0cgkJOyBjb21tYW5kWzZdCisJaW5jCWRwdHIKKwltb3YJSU9ELGEKKworCWxjYWxsCXJlc2V0X2VwOAk7IHJlc2V0IEZJRk8gb2YgZXAgOAorCisJOzsgZmlsbCBlcDggd2l0aCBuZXcgZGF0YSBmcm9tIHBvcnQgQgorCTs7IFdoZW4gdGhlIGhvc3QgcmVxdWVzdHMgdGhlIGRhdGEgaXQncyBhbHJlYWR5IHRoZXJlLgorCTs7IFRoaXMgbXVzdCBiZSBzby4gT3RoZXJ3aXNlIHRoZSBJU1IgaXMgbm90IGNhbGxlZC4KKwk7OyBUaGUgSVNSIGlzIG9ubHkgY2FsbGVkIHdoZW4gYSBwYWNrZXQgaGFzIGJlZW4gZGVsaXZlcmVkCisJOzsgdG8gdGhlIGhvc3QuIFRodXMsIHdlIG5lZWQgYSBwYWNrZXQgaGVyZSBpbiB0aGUKKwk7OyBmaXJzdCBpbnN0YW5jZS4KKwlsY2FsbAllcDhfb3BzCQk7IGdldCBkaWdpdGFsIGRhdGEKKworCTs7IAorCTs7IGZvciBhbGwgY29tbWFuZHMgdGhlIHNhbWUKK292ZXJfZGE6CQorCW1vdglkcHRyLCNFUDFPVVRCQworCW1vdglhLCMwMGgKKwlsY2FsbAlzeW5jZGVsYXl3cgk7IGFybQorCWxjYWxsCXN5bmNkZWxheXdyCTsgYXJtCisJbGNhbGwJc3luY2RlbGF5d3IJOyBhcm0KKworCTs7IGNsZWFyIElOVDIKKwltb3YJYSxFWElGCQk7IEZJUlNUIGNsZWFyIHRoZSBVU0IgKElOVDIpIGludGVycnVwdCByZXF1ZXN0CisJY2xyCWFjYy40CisJbW92CUVYSUYsYQkJOyBOb3RlOiBFWElGIHJlZyBpcyBub3QgODA1MSBiaXQtYWRkcmVzc2FibGUKKworCW1vdglEUFRSLCNFUElSUQk7IAorCW1vdglhLCMwMDAwMTAwMGIJOyBjbGVhciB0aGUgZXAxb3V0aXJxCisJbW92eAlARFBUUixhCisKKwlzZXRiCUlFLjcJCTsgcmUtZW5hYmxlIGludGVycnVwdHMKKworCXBvcAkwN2gKKwlwb3AJMDZoCisJcG9wCTA1aAorCXBvcAkwNGgJCTsgUjQKKwlwb3AJMDNoCQk7IFIzCisJcG9wCTAyaAkJOyBSMgorCXBvcAkwMWgJCTsgUjEKKwlwb3AJMDBoCQk7IFIwCisJcG9wCXBzdworCXBvcAlhY2MgCisJcG9wCWRwaDEgCisJcG9wCWRwbDEKKwlwb3AJZHBoIAorCXBvcAlkcGwgCisJcG9wCWRwcworCXJldGkKKworCisJCis7OzsgYWxsIGNoYW5uZWxzCitkYWxvOgorCW1vdngJYSxAZHB0cgkJOyBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCBvdXQKKwlpbmMJZHB0cgkJOyBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlCisJbW92CXIwLGEJCTsgY291bnRlcgorbmV4dERBOgkKKwltb3Z4CWEsQGRwdHIJCTsgZ2V0IHRoZSBieXRlCisJaW5jCWRwdHIJCTsgcG9pbnQgdG8gdGhlIGhpZ2ggYnl0ZQorCW1vdglyMyxhCQk7IHN0b3JlIGluIHIzIGZvciB3cml0ZURBCisJbW92eAlhLEBkcHRyCQk7IGdldCB0aGUgY2hhbm5lbCBudW1iZXIKKwlpbmMJZHB0cgkJOyBnZXQgcmVhZHkgZm9yIHRoZSBuZXh0IGNoYW5uZWwKKwlsY2FsbAl3cml0ZURBCQk7IHdyaXRlIHZhbHVlIHRvIHRoZSBEQUMKKwlkam56CXIwLG5leHREQQk7IG5leHQgY2hhbm5lbAorCXJldAorCisKKworOzs7IEQvQS1jb252ZXJzaW9uOgorOzs7IGNoYW5uZWwgbnVtYmVyIGluIGEKKzs7OyB2YWx1ZSBpbiByMword3JpdGVEQToKKwlhbmwJYSwjMDAwMDAwMTFiCTsgNCBjaGFubmVscworCW1vdglyMSwjNgkJOyB0aGUgY2hhbm5lbCBudW1iZXIgbmVlZHMgdG8gYmUgc2hpZnRlZCB1cAord3JpdGVEQTI6CisJcmwJYQkJOyBiaXQgc2hpZnQgdG8gdGhlIGxlZnQKKwlkam56CXIxLHdyaXRlREEyCTsgZG8gaXQgNiB0aW1lcworCW9ybAlhLCMwMDAxMDAwMGIJOyB1cGRhdGUgb3V0cHV0cyBhZnRlciB3cml0ZQorCW1vdglyMixhCQk7IGJhY2t1cAorCW1vdglhLHIzCQk7IGdldCBieXRlCisJYW5sCWEsIzExMTEwMDAwYgk7IGdldCB0aGUgdXBwZXIgbmliYmxlCisJbW92CXIxLCM0CQk7IHNoaWZ0IGl0IHVwIHRvIHRoZSB1cHBlciBuaWJibGUKK3dyaXRlREEzOgorCXJyCWEJCTsgc2hpZnQgdG8gdGhlIHVwcGVyIHRvIHRoZSBsb3dlcgorCWRqbnoJcjEsd3JpdGVEQTMKKwlvcmwJYSxyMgkJOyBtZXJnZSB3aXRoIHRoZSBjaGFubmVsIGluZm8KKwljbHIJSU9BLjYJCTsgL1NZTkMgb2YgdGhlIERBIHRvIDAKKwlsY2FsbAlzZW5kU1BJCQk7IHNlbmQgaXQgb3V0IHRvIHRoZSBTUEkKKwltb3YJYSxyMwkJOyBnZXQgZGF0YSBhZ2FpbgorCWFubAlhLCMwMDAwMTExMWIJOyBnZXQgdGhlIGxvd2VyIG5pYmJsZQorCW1vdglyMSwjNAkJOyBzaGlmdCB0aGF0IHRvIHRoZSB1cHBlcgord3JpdGVEQTQ6CisJcmwJYQorCWRqbnoJcjEsd3JpdGVEQTQKKwlhbmwJYSwjMTExMTAwMDBiCTsgbWFrZSBzdXJlIHRoYXQncyBlbXB0eQorCWxjYWxsCXNlbmRTUEkKKwlzZXRiCUlPQS42CQk7IC9TWU5DIG9mIHRoZSBEQSB0byAxCitub0RBOglyZXQKKwkKKworCis7OzsgYXJtIGVwNjogdGhpcyBpcyBqdXN0IGEgZHVtbXkgYXJtIHRvIGdldCB0aGluZ3MgZ29pbmcKK2VwNl9hcm06CisJbW92CURQVFIsI0VQNkJDSAk7IGJ5dGUgY291bnQgSAorCW1vdglhLCMwCQk7IGlzIHplcm8KKwlsY2FsbAlzeW5jZGVsYXl3cgk7IHdhaXQgdW50aWwgdGhlIGxlbmd0aCBoYXMgYXJyaXZlZAorCQorCW1vdglEUFRSLCNFUDZCQ0wJOyBieXRlIGNvdW50IEwKKwltb3YJYSwjMQkJOyBpcyBvbmUKKwlsY2FsbAlzeW5jZGVsYXl3cgk7IHdhaXQgdW50aWwgdGhlIGxlbmd0aCBoYXMgYmVlbiBwcm9jCisJcmV0CisJCisKKworOzs7IGNvbnZlcnRzIG9uZSBhbmFsb2cvZGlnaXRhbCBjaGFubmVsIGFuZCBzdG9yZXMgaXQgaW4gRVA4Cis7OzsgYWxzbyBnZXRzIHRoZSBjb250ZW50IG9mIHRoZSBkaWdpdGFsIHBvcnRzIEIsQyBhbmQgRCBkZXBlbmRpbmcgb24KKzs7OyB0aGUgQ09NTUFORCBmbGFnCitlcDhfb3BzOgorCW1vdglkcHRyLCMwZmMwMWgJOyBlcDggZmlmbyBidWZmZXIKKwljbHIJYQkJOyBoaWdoIGJ5dGUKKwltb3Z4CUBkcHRyLGEJCTsgc2V0IEg9MAorCW1vdglkcHRyLCMwZmMwMGgJOyBsb3cgYnl0ZQorCW1vdglyMCwjQ01EX0ZMQUcKKwltb3YJYSxAcjAKKwltb3Z4CUBkcHRyLGEJCTsgc2F2ZSBjb21tYW5kIGJ5dGUKKworCW1vdglkcHRyLCNlcDhfam1wCTsganVtcCB0YWJsZSBmb3IgdGhlIGRpZmZlcmVudCBmdW5jdGlvbnMKKwlybAlhCQk7IG11bHRpcGx5IGJ5IDI6IHNpemVvZiBzam1wCisJam1wCUBhK2RwdHIJCTsganVtcCB0byB0aGUganVtcCB0YWJsZQorCTs7IGp1bXAgdGFibGUsIGNvcnJlc3BvbmRzIHRvIHRoZSBjb21tYW5kIGJ5dGVzIGRlZmluZWQKKwk7OyBpbiB1c2JkdXguYworZXA4X2ptcDoKKwlzam1wCWVwOF9lcnIJCTsgYT0wLCBlcnIKKwlzam1wCWVwOF9lcnIJCTsgYT0xLCBlcnIKKwlzam1wCWVwOF9lcnIJCTsgYT0yLCBlcnIKKwlzam1wCWVwOF9kaW8JCTsgYT0zLCBkaWdpdGFsIHJlYWQKKwlzam1wCWVwOF9zZ2xjaGFubmVsCTsgYT00LCBhbmFsb2cgQS9ECisJc2ptcAllcDhfZXJyCQk7IGE9NSwgZXJyCisJc2ptcAllcDhfZXJyCQk7IGE9NiwgZXJyCisKKwk7OyByZWFkIG9uZSBBL0QgY2hhbm5lbAorZXA4X3NnbGNoYW5uZWw6CisJbW92IAlEUFRSLCMwZmMwMWgJOyBFUDggRklGTworCXNldGIJSU9BLjcJCTsgc3RhcnQgY29udmVydGVyLCBTVEFSVCA9IDEKKwlsY2FsbAlyZWFkQURDY2gJOyBnZXQgb25lIHJlYWRpbmcKKwljbHIJSU9BLjcJCTsgc3RvcCB0aGUgY29udmVydGVyLCBTVEFSVCA9IDAKKworCXNqbXAJZXA4X3NlbmQJOyBzZW5kIHRoZSBkYXRhCisKKwk7OyByZWFkIHRoZSBkaWdpdGFsIGxpbmVzCitlcDhfZGlvOgkKKwltb3YgCURQVFIsIzBmYzAxaAk7IHN0b3JlIHRoZSBjb250ZW50cyBvZiBwb3J0IEIKKwltb3YJYSxJT0IJCTsgaW4gdGhlIG5leHQKKwltb3Z4CUBkcHRyLGEJCTsgZW50cnkgb2YgdGhlIGJ1ZmZlcgorCWluYwlkcHRyCisJbW92CWEsSU9DCQk7IHBvcnQgQworCW1vdngJQGRwdHIsYQkJOyBuZXh0IGJ5dGUgb2YgdGhlIEVQCisJaW5jCWRwdHIKKwltb3YJYSxJT0QKKwltb3Z4CUBkcHRyLGEJCTsgcG9ydCBECisJCitlcDhfc2VuZDoJCisJbW92CURQVFIsI0VQOEJDSAk7IGJ5dGUgY291bnQgSAorCW1vdglhLCMwCQk7IGlzIHplcm8KKwlsY2FsbAlzeW5jZGVsYXl3cgorCQorCW1vdglEUFRSLCNFUDhCQ0wJOyBieXRlIGNvdW50IEwKKwltb3YJYSwjMTBICQk7IDE2IGJ5dGVzLCBiZWMgaXQncyBzdWNoIGEgZ3JlYXQgbnVtYmVyLi4uCisJbGNhbGwJc3luY2RlbGF5d3IJOyBzZW5kIHRoZSBkYXRhIG92ZXIgdG8gdGhlIGhvc3QKKworZXA4X2VycjoJCisJcmV0CisKKworCis7OzsgRVA4IGludGVycnVwdCBpcyB0aGUgZW5kcG9pbnQgd2hpY2ggc2VuZHMgZGF0YSBiYWNrIGFmdGVyIGEgY29tbWFuZAorOzs7IFRoZSBhY3R1YWwgY29tbWFuZCBmaWxscyB0aGUgRVAgYnVmZmVyIGFscmVhZHkKKzs7OyBidXQgZm9yIElOU05zIHdlIG5lZWQgdG8gZGVsaXZlciBtb3JlIGRhdGEgaWYgdGhlIGNvdW50ID4gMQorZXA4X2lzcjoJCisJcHVzaAlkcHMKKwlwdXNoCWRwbAorCXB1c2gJZHBoCisJcHVzaAlkcGwxCisJcHVzaAlkcGgxCisJcHVzaAlhY2MKKwlwdXNoCXBzdworCXB1c2gJMDBoCQk7IFIwCisJcHVzaAkwMWgJCTsgUjEKKwlwdXNoCTAyaAkJOyBSMgorCXB1c2gJMDNoCQk7IFIzCisJcHVzaAkwNGgJCTsgUjQKKwlwdXNoCTA1aAkJOyBSNQorCXB1c2gJMDZoCQk7IFI2CisJcHVzaAkwN2gJCTsgUjcKKwkJCisJbGNhbGwJZXA4X29wcworCQorCTs7IGNsZWFyIElOVDIKKwltb3YJYSxFWElGCQk7IEZJUlNUIGNsZWFyIHRoZSBVU0IgKElOVDIpIGludGVycnVwdCByZXF1ZXN0CisJY2xyCWFjYy40CisJbW92CUVYSUYsYQkJOyBOb3RlOiBFWElGIHJlZyBpcyBub3QgODA1MSBiaXQtYWRkcmVzc2FibGUKKworCW1vdglEUFRSLCNFUElSUQk7IAorCW1vdglhLCMxMDAwMDAwMGIJOyBjbGVhciB0aGUgZXA4aXJxCisJbW92eAlARFBUUixhCisKKwlwb3AJMDdoCisJcG9wCTA2aAorCXBvcAkwNWgKKwlwb3AJMDRoCQk7IFI0CisJcG9wCTAzaAkJOyBSMworCXBvcAkwMmgJCTsgUjIKKwlwb3AJMDFoCQk7IFIxCisJcG9wCTAwaAkJOyBSMAorCXBvcAlwc3cKKwlwb3AJYWNjIAorCXBvcAlkcGgxIAorCXBvcAlkcGwxCisJcG9wCWRwaCAKKwlwb3AJZHBsIAorCXBvcAlkcHMKKwlyZXRpCisKKworCis7OzsgR1BJRiB3YXZlZm9ybSBmb3IgUFdNCit3YXZlZm9ybToKKwk7OyAgICAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcobm90IHVzZWQpCisJOzsgbGVuIChnaXZlcyA1MC4wMDdIeikKKwkuZGIJMTk1LCAgMTk1LCAgMTk1LCAgMTk1LCAgMTk1LCAgMTk1LCAgMSwgICAgMQorCisJOzsgb3Bjb2RlCisJLmRiCTAwMkgsIDAwNkgsIDAwMkgsIDAwMkgsIDAwMkgsIDAwMkgsIDAwMkgsIDAwMkgKKwkKKwk7OyBvdXQKKwkuZGIJMGZmSCwgMGZmSCwgMGZmSCwgMGZmSCwgMGZmSCwgMGZmSCwgMGZmSCwgMGZmSAorCisJOzsgbG9nCisJLmRiCTAwMEgsIDAwMEgsIDAwMEgsIDAwMEgsIDAwMEgsIDAwMEgsIDAwMEgsIDAwMEgKKworCitzdG9wUFdNOgorCW1vdglyMCwjUFdNRkxBRwk7IGZsYWcgZm9yIFBXTQorCW1vdglhLCMwCQk7IFBXTSAoZm9yIHRoZSBtYWluIGxvb3ApCisJbW92CUByMCxhCQk7IHNldCBpdAorCisJbW92CWRwdHIsI0lGQ09ORklHCTsgc3dpdGNoIG9mZiBHUElGCisJbW92CWEsIzEwMTAwMDAwYgk7IGdwaWYsIDMwTUh6LCBpbnRlcm5hbCBJRkNMSworCWxjYWxsCXN5bmNkZWxheXdyCisJcmV0CisJCisKKzs7OyBpbml0IFBXTQorc3RhcnRQV006CisJbW92CWRwdHIsI0lGQ09ORklHCTsgc3dpdGNoIG9uIElGQ0xLIHNpZ25hbAorCW1vdglhLCMxMDEwMDAxMGIJOyBncGlmLCAzME1IeiwgaW50ZXJuYWwgSUZDTEsKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJbW92CU9FQiwwRkZICTsgb3V0cHV0IHRvIHBvcnQgQgorCisJbW92CURQVFIsI0VQNENGRworCW1vdglhLCMxMDEwMDAwMGIJOyB2YWxpZCwgb3V0LCBidWxrCisJbW92eAlARFBUUixhCisKKwk7OyByZXNldCB0aGUgZW5kcG9pbnQKKwltb3YJZHB0ciwjRklGT1JFU0VUCisJbW92CWEsIzgwaAkJOyBOQUsKKwlsY2FsbAlzeW5jZGVsYXl3cgorCW1vdglhLCM4NGgJCTsgcmVzZXQgRVA0ICsgTkFLCisJbGNhbGwJc3luY2RlbGF5d3IKKwltb3YJYSwjMAkJOyBub3JtYWwgb3AKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJbW92CWRwdHIsI0VQNEJDTAorCW1vdglhLCMwSAkJOyBkaXNjYXJkIHBhY2tldHMKKwlsY2FsbAlzeW5jZGVsYXl3cgk7IGVtcHR5IEZJRk8gYnVmZmVyCisJbGNhbGwJc3luY2RlbGF5d3IJOyBlbXB0eSBGSUZPIGJ1ZmZlcgorCisJOzsgYWJvcnRzIGFsbCB0cmFuc2ZlcnMgYnkgdGhlIEdQSUYKKwltb3YJZHB0ciwjR1BJRkFCT1JUCisJbW92CWEsIzBmZmgJCTsgYWJvcnQgYWxsIHRyYW5zZmVycworCWxjYWxsCXN5bmNkZWxheXdyCisKKwk7OyB3YWl0IGZvciBHUElGIHRvIGZpbmlzaAord2FpdF9mX2Fib3J0OgorCW1vdglhLEdQSUZUUklHCTsgR1BJRiBzdGF0dXMKKwlhbmwJYSwjODBoCQk7IGRvbmUgYml0CisJanoJd2FpdF9mX2Fib3J0CTsgR1BJRiBidXN5CisKKyAgICAgICAgbW92ICAgICBkcHRyLCNHUElGQ1RMQ0ZHCisgICAgICAgIG1vdiAgICAgYSwjMTAwMDAwMDBiICAgIDsgdHJpIHN0YXRlIGZvciBDVFJMCisgICAgICAgIGxjYWxsICAgc3luY2RlbGF5d3IKKworICAgICAgICBtb3YgICAgIGRwdHIsI0dQSUZJRExFQ1RMCisgICAgICAgIG1vdiAgICAgYSwjMTExMTAwMDBiICAgIDsgYWxsIENUTCBvdXRwdXRzIGxvdworICAgICAgICBsY2FsbCAgIHN5bmNkZWxheXdyCisKKwk7OyBhYm9ydCBpZiBGSUZPIGlzIGVtcHR5CisgICAgICAgIG1vdiAgICAgYSwjMDAwMDAwMDFiICAgIDsgYWJvcnQgaWYgZW1wdHkKKyAgICAgICAgbW92ICAgICBkcHRyLCNFUDRHUElGRkxHU0VMCisgICAgICAgIGxjYWxsICAgc3luY2RlbGF5d3IKKworCTs7IAorICAgICAgICBtb3YgICAgIGEsIzAwMDAwMDAxYiAgICA7IHN0b3AgaWYgR1BJRiBmbGcKKyAgICAgICAgbW92ICAgICBkcHRyLCNFUDRHUElGUEZTVE9QCisgICAgICAgIGxjYWxsICAgc3luY2RlbGF5d3IKKworCTs7IHRyYW5zYWN0aW9uIGNvdW50ZXIKKwltb3YJYSwjMGZmSAorCW1vdglkcHRyLCNHUElGVENCMworCWxjYWxsCXN5bmNkZWxheXdyCisKKwk7OyB0cmFuc2FjdGlvbiBjb3VudGVyCisJbW92CWEsIzBmZkgKKwltb3YJZHB0ciwjR1BJRlRDQjIKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJOzsgdHJhbnNhY3Rpb24gY291bnRlcgorCW1vdglhLCMwZmZICQk7IDUxMiBieXRlcworCW1vdglkcHRyLCNHUElGVENCMQorCWxjYWxsCXN5bmNkZWxheXdyCisKKwk7OyB0cmFuc2FjdGlvbiBjb3VudGVyCisJbW92CWEsIzBmZkgKKwltb3YJZHB0ciwjR1BJRlRDQjAKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJOzsgUkRZIHBpbnMuIE5vdCB1c2VkIGhlcmUuCisgICAgICAgIG1vdiAgICAgYSwjMAorICAgICAgICBtb3YgICAgIGRwdHIsI0dQSUZSRUFEWUNGRworICAgICAgICBsY2FsbCAgIHN5bmNkZWxheXdyCisKKwk7OyBkcml2ZXMgdGhlIG91dHB1dCBpbiB0aGUgSURMRSBzdGF0ZQorICAgICAgICBtb3YgICAgIGEsIzEKKyAgICAgICAgbW92ICAgICBkcHRyLCNHUElGSURMRUNTCisgICAgICAgIGxjYWxsICAgc3luY2RlbGF5d3IKKworCTs7IGRpcmVjdCBkYXRhIHRyYW5zZmVyIGZyb20gdGhlIEVQIHRvIHRoZSBHUElGCisJbW92CWRwdHIsI0VQNEZJRk9DRkcKKwltb3YJYSwjMDAwMTAwMDBiCTsgYXV0b291dD0xLCBieXRlLXdpZGUKKwlsY2FsbAlzeW5jZGVsYXl3cgorCisJOzsgd2F2ZWZvcm0gMCBpcyB1c2VkIGZvciBGSUZPIG91dAorCW1vdglkcHRyLCNHUElGV0ZTRUxFQ1QKKwltb3YJYSwjMDAwMDAwMDBiCisJbW92eAlAZHB0cixhCisJbGNhbGwJc3luY2RlbGF5CisKKwk7OyB0cmFuc2ZlciB0aGUgZGVsYXkgYnl0ZSBmcm9tIHRoZSBFUCB0byB0aGUgd2F2ZWZvcm0KKwltb3YJZHB0ciwjMGU3ODFoCTsgRVAxIGJ1ZmZlcgorCW1vdngJYSxAZHB0cgkJOyBnZXQgdGhlIGRlbGF5CisJbW92CWRwdHIsI3dhdmVmb3JtCTsgcG9pbnRzIHRvIHRoZSB3YXZlZm9ybQorCW1vdglyMiwjNgkJOyBmaWxsIDYgYnl0ZXMKK3RpbWxvb3A6CisJbW92eAlAZHB0cixhCQk7IHNhdmUgdGltaW5nIGluIGEgeHh4CisJaW5jCWRwdHIKKwlkam56CXIyLHRpbWxvb3AJOyBmaWxsIHRoZSA2IGRlbGF5IGJ5dGVzCisKKwk7OyBsb2FkIHdhdmVmb3JtCisgICAgICAgIG1vdiAgICAgQVVUT1BUUkgyLCMwRTRIIDsgWERBVEEwSAorICAgICAgICBsY2FsbCAgIHN5bmNkZWxheQorICAgICAgICBtb3YgICAgIEFVVE9QVFJMMiwjMDBIICA7IFhEQVRBMEwKKyAgICAgICAgbGNhbGwgICBzeW5jZGVsYXkKKworCW1vdglkcHRyLCN3YXZlZm9ybQk7IHBvaW50cyB0byB0aGUgd2F2ZWZvcm0KKwkKKyAgICAgICAgbW92ICAgICBBVVRPUFRSU0VUVVAsIzcgOyBhdXRvaW5jIGFuZCBlbmFibGUKKyAgICAgICAgbGNhbGwgICBzeW5jZGVsYXkKKworICAgICAgICBtb3YgICAgIHIyLCMyMEggICAgICAgICA7IDMyIGJ5dGVzIHRvIHRyYW5zZmVyCisKK3dhdmV0cjoKKyAgICAgICAgbW92eCAgICBhLEBkcHRyCisJaW5jCWRwdHIKKwlwdXNoCWRwbAorCXB1c2gJZHBoCisJcHVzaAlkcGwxCisJcHVzaAlkcGgxCisgICAgICAgIG1vdiAgICAgZHB0ciwjWEFVVE9EQVQyCisgICAgICAgIG1vdnggICAgQGRwdHIsYQorICAgICAgICBsY2FsbCAgIHN5bmNkZWxheQorCXBvcAlkcGgxIAorCXBvcAlkcGwxCisJcG9wCWRwaCAKKwlwb3AJZHBsCisgICAgICAgIGRqbnogICAgcjIsd2F2ZXRyCisKKwltb3YJZHB0ciwjT1VUUEtURU5ECisJbW92CWEsIzA4NEgKKwlsY2FsbAlzeW5jZGVsYXl3cgorCWxjYWxsCXN5bmNkZWxheXdyCisKKwltb3YJcjAsI1BXTUZMQUcJOyBmbGFnIGZvciBQV00KKwltb3YJYSwjMQkJOyBQV00gKGZvciB0aGUgbWFpbiBsb29wKQorCW1vdglAcjAsYQkJOyBzZXQgaXQKKworCXJldAorCisJCisKKzs7IG5lZWQgdG8gZGVsYXkgZXZlcnkgdGltZSB0aGUgYnl0ZSBjb3VudGVycworOzsgZm9yIHRoZSBFUHMgaGF2ZSBiZWVuIGNoYW5nZWQuCisKK3N5bmNkZWxheToKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlyZXQKKworc3luY2RlbGF5d3I6CisJbW92eAlAZHB0cixhCisJbGNhbGwJc3luY2RlbGF5CisJcmV0CisKKworCisJLm9yZwkxRjAwaAkJOyBsb29rdXAgdGFibGUgYXQgdGhlIGVuZCBvZiBtZW1vcnkKKworc3dhcF9sdXQ6CisuZGIgMCwxMjgsNjQsMTkyLDMyLDE2MCw5NiwyMjQsMTYsMTQ0LDgwLDIwOCw0OCwxNzYsMTEyLDI0MCw4LDEzNgorLmRiIDcyLDIwMCw0MCwxNjgsMTA0LDIzMiwyNCwxNTIsODgsMjE2LDU2LDE4NCwxMjAsMjQ4LDQsMTMyLDY4LDE5NiwzNiwxNjQsMTAwCisuZGIgMjI4LDIwLDE0OCw4NCwyMTIsNTIsMTgwLDExNiwyNDQsMTIsMTQwLDc2LDIwNCw0NCwxNzIsMTA4LDIzNiwyOCwxNTYsOTIsMjIwCisuZGIgNjAsMTg4LDEyNCwyNTIsMiwxMzAsNjYsMTk0LDM0LDE2Miw5OCwyMjYsMTgsMTQ2LDgyLDIxMCw1MCwxNzgsMTE0LDI0MiwxMAorLmRiIDEzOCw3NCwyMDIsNDIsMTcwLDEwNiwyMzQsMjYsMTU0LDkwLDIxOCw1OCwxODYsMTIyLDI1MCw2LDEzNCw3MCwxOTgsMzgsMTY2CisuZGIgMTAyLDIzMCwyMiwxNTAsODYsMjE0LDU0LDE4MiwxMTgsMjQ2LDE0LDE0Miw3OCwyMDYsNDYsMTc0LDExMCwyMzgsMzAsMTU4LDk0CisuZGIgMjIyLDYyLDE5MCwxMjYsMjU0LDEsMTI5LDY1LDE5MywzMywxNjEsOTcsMjI1LDE3LDE0NSw4MSwyMDksNDksMTc3LDExMywyNDEsOQorLmRiIDEzNyw3MywyMDEsNDEsMTY5LDEwNSwyMzMsMjUsMTUzLDg5LDIxNyw1NywxODUsMTIxLDI0OSw1LDEzMyw2OSwxOTcsMzcsMTY1CisuZGIgMTAxLDIyOSwyMSwxNDksODUsMjEzLDUzLDE4MSwxMTcsMjQ1LDEzLDE0MSw3NywyMDUsNDUsMTczLDEwOSwyMzcsMjksMTU3LDkzCisuZGIgMjIxLDYxLDE4OSwxMjUsMjUzLDMsMTMxLDY3LDE5NSwzNSwxNjMsOTksMjI3LDE5LDE0Nyw4MywyMTEsNTEsMTc5LDExNSwyNDMsMTEKKy5kYiAxMzksNzUsMjAzLDQzLDE3MSwxMDcsMjM1LDI3LDE1NSw5MSwyMTksNTksMTg3LDEyMywyNTEsNywxMzUsNzEsMTk5LDM5LDE2NworLmRiIDEwMywyMzEsMjMsMTUxLDg3LDIxNSw1NSwxODMsMTE5LDI0NywxNSwxNDMsNzksMjA3LDQ3LDE3NSwxMTEsMjM5LDMxLDE1OSw5NQorLmRiIDIyMyw2MywxOTEsMTI3LDI1NQorCisKKworCQorLkVuZAorCisKZGlmZiAtLWdpdCBhL3VzYmR1eF9maXJtd2FyZS5iaW4gYi91c2JkdXhfZmlybXdhcmUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNTM3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi91c2JkdXhfZmlybXdhcmUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3VzYmR1eGZhc3RfZmlybXdhcmUuYmluIGIvdXNiZHV4ZmFzdF9maXJtd2FyZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E2NDQxZAotLS0gL2Rldi9udWxsCisrKyBiL3VzYmR1eGZhc3RfZmlybXdhcmUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3VzYmR1eHNpZ21hX2Zpcm13YXJlLmJpbiBiL3VzYmR1eHNpZ21hX2Zpcm13YXJlLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQxMjYxCi0tLSAvZGV2L251bGwKKysrIGIvdXNiZHV4c2lnbWFfZmlybXdhcmUuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Y0bC1jeDIzMXh4LWF2Y29yZS0wMS5mdyBiL3Y0bC1jeDIzMXh4LWF2Y29yZS0wMS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGM1ZTllCi0tLSAvZGV2L251bGwKKysrIGIvdjRsLWN4MjMxeHgtYXZjb3JlLTAxLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Y0bC1jeDIzNDE4LWFwdS5mdyBiL3Y0bC1jeDIzNDE4LWFwdS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDM1MWYxCi0tLSAvZGV2L251bGwKKysrIGIvdjRsLWN4MjM0MTgtYXB1LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Y0bC1jeDIzNDE4LWNwdS5mdyBiL3Y0bC1jeDIzNDE4LWNwdS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjIyN2I2Ci0tLSAvZGV2L251bGwKKysrIGIvdjRsLWN4MjM0MTgtY3B1LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Y0bC1jeDIzNDE4LWRpZy5mdyBiL3Y0bC1jeDIzNDE4LWRpZy5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmQ2ZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdjRsLWN4MjM0MTgtZGlnLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Y0bC1jeDIzODg1LWF2Y29yZS0wMS5mdyBiL3Y0bC1jeDIzODg1LWF2Y29yZS0wMS5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWZkNTFjCi0tLSAvZGV2L251bGwKKysrIGIvdjRsLWN4MjM4ODUtYXZjb3JlLTAxLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Y0bC1jeDI1ODQwLmZ3IGIvdjRsLWN4MjU4NDAuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhODlmZgotLS0gL2Rldi9udWxsCisrKyBiL3Y0bC1jeDI1ODQwLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3ZpY2FtL2Zpcm13YXJlLmZ3IGIvdmljYW0vZmlybXdhcmUuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ4YTczOAotLS0gL2Rldi9udWxsCisrKyBiL3ZpY2FtL2Zpcm13YXJlLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3ZudHd1c2IuZncgYi92bnR3dXNiLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNWMzNTMKLS0tIC9kZXYvbnVsbAorKysgYi92bnR3dXNiLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Z4Z2UvWDNmdy1weGUubmNmIGIvdnhnZS9YM2Z3LXB4ZS5uY2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFkNGY1MgotLS0gL2Rldi9udWxsCisrKyBiL3Z4Z2UvWDNmdy1weGUubmNmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Z4Z2UvWDNmdy5uY2YgYi92eGdlL1gzZncubmNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMjdkNzAKLS0tIC9kZXYvbnVsbAorKysgYi92eGdlL1gzZncubmNmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3doaXRlaGVhdC5mdyBiL3doaXRlaGVhdC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWU3ZjNiCi0tLSAvZGV2L251bGwKKysrIGIvd2hpdGVoZWF0LmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3doaXRlaGVhdF9sb2FkZXIuZncgYi93aGl0ZWhlYXRfbG9hZGVyLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMzkyZTIKLS0tIC9kZXYvbnVsbAorKysgYi93aGl0ZWhlYXRfbG9hZGVyLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lhbS8xMjAwLmJpbiBiL3lhbS8xMjAwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWZhNTJhCi0tLSAvZGV2L251bGwKKysrIGIveWFtLzEyMDAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lhbS85NjAwLmJpbiBiL3lhbS85NjAwLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTZkMjgxCi0tLSAvZGV2L251bGwKKysrIGIveWFtLzk2MDAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lhbWFoYS9kczFfY3RybC5mdyBiL3lhbWFoYS9kczFfY3RybC5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjJlNDFlCi0tLSAvZGV2L251bGwKKysrIGIveWFtYWhhL2RzMV9jdHJsLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lhbWFoYS9kczFfZHNwLmZ3IGIveWFtYWhhL2RzMV9kc3AuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgxMzYyMAotLS0gL2Rldi9udWxsCisrKyBiL3lhbWFoYS9kczFfZHNwLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lhbWFoYS9kczFlX2N0cmwuZncgYi95YW1haGEvZHMxZV9jdHJsLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMWI0NTIKLS0tIC9kZXYvbnVsbAorKysgYi95YW1haGEvZHMxZV9jdHJsLmZ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lhbWFoYS95c3MyMjVfcmVnaXN0ZXJzLmJpbiBiL3lhbWFoYS95c3MyMjVfcmVnaXN0ZXJzLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWU5NzkwCi0tLSAvZGV2L251bGwKKysrIGIveWFtYWhhL3lzczIyNV9yZWdpc3RlcnMuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIK