ZGlmZiAtLWdpdCBhL0FVVEhPUlMgYi9BVVRIT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNWZhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9BVVRIT1JTCkBAIC0wLDAgKzEsMTEwIEBACitUaGlzIHByb2plY3QgY29uc2lzdHMgb2YgY29udHJpYnV0aW9ucyBmcm9tIHNldmVyYWwgcGVvcGxlLCByZWNvZ25pemVkIGhlcmUgZm9yIGNvbnZlbmllbmNlLAoraW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorCitBZ3VzdMOtbiBEZWxnYWRvIChTZXJ2aW5mb3JtIFMuQS4pCitBaXRvciBBbG1laWRhIChVbml2ZXJzaXR5IG9mIERldXN0bykKK0FsYXNkYWlyIE1hY2tpbnRvc2ggKEdvb2dsZSkKK0FsZXggRHVwcmUKK0FsZXhhbmRlciBNYXJ0aW4gKEhhYXNlICYgTWFydGluIEdtYkgpCitBbGV4YW5kZXIgU2NobWlkdAorQW5kZXJzIEJvcmcKK0FuZHJlYXMgUGlsbGF0aAorQW5kcmV3IFdhbGJyYW4gKEdvb2dsZSkKK0FuZHJleSBTaXRuaWsKK0FuZHJvaWRhLmh1IC8gaHR0cDovL3d3dy5hbmRyb2lkYS5odS8KK0FudG9uaW8gTWFudWVsIEJlbmp1bWVhIChTZXJ2aW5mb3JtIFMuQS4pCitBc2llciBJdHVycmFsZGUKK0FzbXVyaSBBbndhcgorQmV0YW1pbm9zCitCcmlhbiBCcm93biAoR29vZ2xlKQorQnJ1Y2UgQWxsZW4KK0NoYW5nIEh5dW4gUGFyaworQ2hyaXN0aWFuIEJydW5zY2hlbiAoR29vZ2xlKQorQ2hyaXN0b3BoIFNjaHVseiAoY3JlYXRhbGUgR21iSCkKK0Nvc3RhIFdhbGNvdHQgKFNDVk5HUikKK2Nyb3dkaW4ubmV0CitEYW5pZWwgU3dpdGtpbiAoR29vZ2xlKQorRGF2ZSBNYWNMYWNobGFuIChHb29nbGUpCitEYXZpZCBQaGlsbGlwIE9zdGVyIChHb29nbGUpCitEYXZpZCBBbGJlcnQgKEJ1ZyBMYWJzKQorRGF2aWQgT2xpdmllcgorRGF2aWQgV2Fsa2VyIChHb29nbGUpCitEaWVnbyBQaWVyb3R0bworRGlvbiBIYXJkeQorZHJlamM4MworRWR1YXJkbyBDYXN0aWxsZWpvIChVbml2ZXJzaXR5IG9mIERldXN0bykKK0VtYW51ZWxlIEFpbmEKK0VyaWMgS29icmluIChWZWxvY2l0dWRlKQorZXZhbnNlcGR4CitFcmlrIEJhcmJhcmEKK0ZyYW5jb2lzIEIuIChHb29nbGUpCitGcmVkIExpbiAoQW5vYmlpdCkKK2djc3RhbmcKK0d1ZW50aGVyIEdyYXUKK0d1aWxsYXVtZSBMZSBCaWxsZXIKK0hhbm5lcyBFcnZlbgorSGFydG11dCBOZXViYXVlciAoU2Nod2VlcnMgSW5mb3JtYXRpb25zdGVjaG5vbG9naWUgR21iSCkKK2hvc2lndW1heXV1Z2kKK2h5cGVzdCAoQmFyY29yYW1hIHByb2plY3QpCitJYW4gVy4gRGF2aXMKK0lzYWFjIFBvdG9jem55LUpvbmVzCitKYWNvYiBIYXluZXMgKEdvb2dsZSkKK0plZmYgQnJlaWRlbmJhY2ggKEdvb2dsZSkKK0pvYW4gTW9udGFuw6kgKFNvZnRjYXRhbMOgLmNhdCkKK0pvaG4gQ29ubm9sbHkgKEJ1ZyBMYWJzKQorSm9uYXMgUGV0ZXJzc29uIChQcmlzamFrdCkKK0pvc2VwaCBXYWluIChHb29nbGUpCitKdWhhIEt1aXR1bmVuCitKdWhvIE1pa2tvbmVuCitqd2lja3MKK0thbWlsIEthY3ptYXJjenlrCitLYXp1a2kgTmlzaGl1cmEKK0tldmluIE8nU3VsbGl2YW4gKFNJVEEpCitLZXZpbiBYdWUgKE5ldERyYWdvbiBXZWJzb2Z0IEluYy4sIENoaW5hKQorTGFjaGV6YXIgRG9icmV2CitMdWl6IFNpbHZhCitMdWthIEZpbsW+Z2FyCivFgXVrYXN6IFN0ZWZhbmlhaworTWFsdGUgU3Rhcm9zdGlrCitNYW51ZWwgS2FzdGVuCitNYXJjZWxvCitNYXRldXN6IErEmWRyYXNpaworTWF0cml4NDQKK01hdHRoZXcgU2NodWxraW5kIChHb29nbGUpCitNYXR0IFlvcmsgKExpZmVNYXJrcykKK21pa2UzMjc2NworbWlrZWowNgorTW9oYW1hZCBGYWlyb2wKK01vcmdhbiBDb3VyYmV0CitOaWtvbGFvcyBGdHlsaXRha2lzCitOaWtvbGF1cyBIdWJlcgorT2xsaQorUGFibG8gT3JkdcOxYSAoVW5pdmVyc2l0eSBvZiBEZXVzdG8pCitQYXVsIEhhY2tlbmJlcmdlcgorcGVyZW5uaWFsbWluZAorUmFsZiBLaXN0bmVyCitSYW5keSBTaGVuIChBY2VyKQorUmFzbXVzIFNjaHLDuGRlciBTw7hyZW5zZW4KK1JpY2hhcmQgSMWZaXbFiMOhaworUm9tYWluIFBlY2hheXJlCitSb21hbiBOdXJpayAoR29vZ2xlKQorUnVzdGFtIEFiZHVsbGFldgorUnlhbiBBbGZvcmQKK1NhbmZvcmQgU3F1aXJlcworU2F0b3NoaSBLYW1ldGF5YQorU2hhY2hhciBTaGVtZXNoCitTZWFuIE93ZW4gKEdvb2dsZSkKK1NoaXl1YW4gR3VvIC8g6YOt5LiW5YWDCitTaHVtb3ZpY2hZCitTaW1vbiBGbGFubmVyeSAoRXJpY3Nzb24pCitTdGV2ZW4gUGFya2VzCitzdG90eTc0CitTdXJhaiBTdXBla2FyCitTdmVuIEtsaW5raGFtZXIKK3RlY2hpbnN0YW50ZHgKK1Rob21hcyBHZXJiZXQKK1RpbSBHZXJuYXQKK3YuYW5lc3RpcworVmluY2UgRnJhbmNpcyAoTGlmZU1hcmtzKQorV29sZmdhbmcgSnVuZworWWFrb3YgT2tzaHRlaW4gKEdvb2dsZSkKZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MWVlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HCkBAIC0wLDAgKzEsMjAxIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL05PVElDRSBiL05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQ0NzA4Ci0tLSAvZGV2L251bGwKKysrIGIvTk9USUNFCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOT1RJQ0VTIEZPUiBCQVJDT0RFNEoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JhcmNvZGU0SgorQ29weXJpZ2h0IDIwMDItMjAxMCBKZXJlbWlhcyBNw6Rya2kKK0NvcHlyaWdodCAyMDA1LTIwMDYgRGlldG1hciBCw7xya2xlCisKK1BvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBjb250cmlidXRlZCB1bmRlciBzZWN0aW9uIDUgb2YgdGhlCitBcGFjaGUgTGljZW5zZS4gQ29udHJpYnV0b3JzIGFyZSBsaXN0ZWQgdW5kZXI6CitodHRwOi8vYmFyY29kZTRqLnNvdXJjZWZvcmdlLm5ldC9jb250cmlidXRvcnMuaHRtbApkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OTEyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUubWQKQEAgLTAsMCArMSwxMTggQEAKK1pYaW5nT2JqQworPT09PT09PT09CisKK1pYaW5nT2JqQyBpcyBhIGZ1bGwgT2JqZWN0aXZlLUMgcG9ydCBvZiBbWlhpbmddKGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC96eGluZy8pICgiWmVicmEgQ3Jvc3NpbmciKSwgYSBKYXZhIGJhcmNvZGUgaW1hZ2UgcHJvY2Vzc2luZyBsaWJyYXJ5LiBJdCBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIG9uIGJvdGggaU9TIGRldmljZXMgYW5kIGluIE1hYyBhcHBsaWNhdGlvbnMuCisKK1RoZSBmb2xsb3dpbmcgYmFyY29kZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9yIGJvdGggZW5jb2RpbmcgYW5kIGRlY29kaW5nOgorCisqIFVQQy1BIGFuZCBVUEMtRQorKiBFQU4tOCBhbmQgRUFOLTEzCisqIENvZGUgMzkKKyogQ29kZSA5MworKiBDb2RlIDEyOAorKiBJVEYKKyogQ29kYWJhcgorKiBSU1MtMTQgKGFsbCB2YXJpYW50cykKKyogUVIgQ29kZQorKiBEYXRhIE1hdHJpeAorKiBBenRlYyAoJ2JldGEnIHF1YWxpdHkpCisqIFBERiA0MTcgKCdhbHBoYScgcXVhbGl0eSkKKworWlhpbmdPYmpDIGN1cnJlbnRseSBoYXMgZmVhdHVyZSBwYXJpdHkgd2l0aCBaWGluZyB2ZXJzaW9uIDIuMC4KKworVXNhZ2UKKy0tLS0KKworRW5jb2Rpbmc6CisKK2BgYG9iamMKK05TRXJyb3IqIGVycm9yID0gbmlsOworWlhNdWx0aUZvcm1hdFdyaXRlciogd3JpdGVyID0gW1pYTXVsdGlGb3JtYXRXcml0ZXIgd3JpdGVyXTsKK1pYQml0TWF0cml4KiByZXN1bHQgPSBbd3JpdGVyIGVuY29kZTpAIkEgc3RyaW5nIHRvIGVuY29kZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOjUwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OjUwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiZlcnJvcl07CitpZiAocmVzdWx0KSB7CisgIENHSW1hZ2VSZWYgaW1hZ2UgPSBbW1pYSW1hZ2UgaW1hZ2VXaXRoTWF0cml4OnJlc3VsdF0gY2dpbWFnZV07CisKKyAgLy8gVGhpcyBDR0ltYWdlUmVmIGltYWdlIGNhbiBiZSBwbGFjZWQgaW4gYSBVSUltYWdlLCBOU0ltYWdlLCBvciB3cml0dGVuIHRvIGEgZmlsZS4KK30gZWxzZSB7CisgIE5TU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSBbZXJyb3IgbG9jYWxpemVkRGVzY3JpcHRpb25dOworfQorYGBgCisKK0RlY29kaW5nOgorCitgYGBvYmpjCitDR0ltYWdlUmVmIGltYWdlVG9EZWNvZGU7ICAvLyBHaXZlbiBhIENHSW1hZ2UgaW4gd2hpY2ggd2UgYXJlIGxvb2tpbmcgZm9yIGJhcmNvZGVzCisKK1pYTHVtaW5hbmNlU291cmNlKiBzb3VyY2UgPSBbW1taWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTppbWFnZVRvRGVjb2RlXSBhdXRvcmVsZWFzZV07CitaWEJpbmFyeUJpdG1hcCogYml0bWFwID0gW1pYQmluYXJ5Qml0bWFwIGJpbmFyeUJpdG1hcFdpdGhCaW5hcml6ZXI6W1pYSHlicmlkQmluYXJpemVyIGJpbmFyaXplcldpdGhTb3VyY2U6c291cmNlXV07CisKK05TRXJyb3IqIGVycm9yID0gbmlsOworCisvLyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgaGludHMgd2UgY2FuIGdpdmUgdG8gdGhlIHJlYWRlciwgaW5jbHVkaW5nCisvLyBwb3NzaWJsZSBmb3JtYXRzLCBhbGxvd2VkIGxlbmd0aHMsIGFuZCB0aGUgc3RyaW5nIGVuY29kaW5nLgorWlhEZWNvZGVIaW50cyogaGludHMgPSBbWlhEZWNvZGVIaW50cyBoaW50c107CisKK1pYTXVsdGlGb3JtYXRSZWFkZXIqIHJlYWRlciA9IFtaWE11bHRpRm9ybWF0UmVhZGVyIHJlYWRlcl07CitaWFJlc3VsdCogcmVzdWx0ID0gW3JlYWRlciBkZWNvZGU6Yml0bWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludHM6aGludHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjomZXJyb3JdOworaWYgKHJlc3VsdCkgeworICAvLyBUaGUgY29kZWQgcmVzdWx0IGFzIGEgc3RyaW5nLiBUaGUgcmF3IGRhdGEgY2FuIGJlIGFjY2Vzc2VkIHdpdGgKKyAgLy8gcmVzdWx0LnJhd0J5dGVzIGFuZCByZXN1bHQubGVuZ3RoLgorICBOU1N0cmluZyogY29udGVudHMgPSByZXN1bHQudGV4dDsKKworICAvLyBUaGUgYmFyY29kZSBmb3JtYXQsIHN1Y2ggYXMgYSBRUiBjb2RlIG9yIFVQQy1BCisgIFpYQmFyY29kZUZvcm1hdCBmb3JtYXQgPSByZXN1bHQuYmFyY29kZUZvcm1hdDsKK30gZWxzZSB7CisgIC8vIFVzZSBlcnJvciB0byBkZXRlcm1pbmUgd2h5IHdlIGRpZG4ndCBnZXQgYSByZXN1bHQsIHN1Y2ggYXMgYSBiYXJjb2RlCisgIC8vIG5vdCBiZWluZyBmb3VuZCwgYW4gaW52YWxpZCBjaGVja3N1bSwgb3IgYSBmb3JtYXQgaW5jb25zaXN0ZW5jeS4KK30KK2BgYAorCitFeGFtcGxlcworLS0tLS0tLS0KKworWlhpbmdPYmpDIGluY2x1ZGVzIHNldmVyYWwgZXhhbXBsZSBhcHBsaWNhdGlvbnMgZm91bmQgaW4gImV4YW1wbGVzIiBmb2xkZXI6CisKKyogQmFyY29kZVNjYW5uZXIgLSBBbiBpT1MgYXBwbGljYXRpb24gdGhhdCBjYXB0dXJlcyB2aWRlbyBmcm9tIHRoZSBjYW1lcmEsIHNjYW5zIGZvciBiYXJjb2RlcyBhbmQgZGlzcGxheXMgcmVzdWx0cyBvbiBzY3JlZW4uCisqIFFyQ29kZVRlc3QgLSBBIGJhc2ljIFFSIGNvZGUgZ2VuZXJhdG9yIHRoYXQgYWNjZXB0cyBpbnB1dCwgZW5jb2RlcyBpdCBhcyBhIFFSIGNvZGUsIGFuZCBkaXNwbGF5cyBpdCBvbiBzY3JlZW4uCisKK0dldHRpbmcgU3RhcnRlZAorLS0tLS0tLS0tLS0tLS0tCis+IEFzIGEgc2ltcGxlciBhbHRlcm5hdGl2ZSB0byBhZGRpbmcgZmlsZXMgZGlyZWN0bHksIHlvdSBjYW4gY29uc2lkZXIgdXNpbmcgW0NvY29hUG9kc10oaHR0cDovL2NvY29hcG9kcy5vcmcpIHRvIGFkZCBaWGluZ09iakMgYXMgYSBkZXBlbmRlbmN5LgorCisxLiBbRG93bmxvYWQgWlhpbmdPYmpDXShodHRwczovL2dpdGh1Yi5jb20vVGhlTGV2ZWxVcC9aWGluZ09iakMvdGFyYmFsbC9tYXN0ZXIpIG9yIGNsb25lIGl0IGZyb20gZ2l0OiBgZ2l0IGNsb25lIGdpdDovL2dpdGh1Yi5jb20vVGhlTGV2ZWxVcC9aWGluZ09iakMuZ2l0YC4KKworMi4gRHJhZyB0aGUgWlhpbmdPYmpDIGZvbGRlciBvbnRvIFhjb2RlLiBNYWtlIHN1cmUgIkNvcHkgaXRlbXMiIGlzIGNoZWNrZWQgYmVmb3JlIGNsaWNraW5nICJBZGQiLgorCiszLiBTZWxlY3RpbmcgeW91ciBwcm9qZWN0IGluIHRoZSBsZWZ0IHNpZGViYXIsIHNlbGVjdCB5b3VyIHRhcmdldCwgYW5kIGNob29zZSB0aGUgIkJ1aWxkIFBoYXNlcyIgdGFiLiBVbmRlciAiTGluayBCaW5hcnkgV2l0aCBMaWJyYXJpZXMiLCBhZGQgdGhlIGFwcHJvcHJpYXRlIGZyYW1ld29ya3MgZm9yIHlvdXIgYXJjaGl0ZWN0dXJlOgorCisgIEZvciBhbiBpT1MgYXBwOgorICAgICogQVZGb3VuZGF0aW9uLmZyYW1ld29yaworICAgICogQ29yZUdyYXBoaWNzLmZyYW1ld29yaworICAgICogQ29yZU1lZGlhLmZyYW1ld29yaworICAgICogQ29yZVZpZGVvLmZyYW1ld29yaworICAgICogSW1hZ2VJTy5mcmFtZXdvcmsKKyAgICAqIFF1YXJ0ekNvcmUuZnJhbWV3b3JrCisKKyAgRm9yIGEgTWFjIGFwcDoKKyAgICAqIEFwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrCisgICAgKiBDb3JlTWVkaWEuZnJhbWV3b3JrCisgICAgKiBDb3JlVmlkZW8uZnJhbWV3b3JrCisgICAgKiBRdWFydHpDb3JlLmZyYW1ld29yaworICAgICogUVRLaXQuZnJhbWV3b3JrCisKKzQuIEltcG9ydCB0aGUgWlhpbmdPYmpDIGZyYW1ld29yayBoZWFkZXI6CisKK2BgYG9iai1jCisjaW1wb3J0ICJaWGluZ09iakMuaCIKK2BgYAorCitMaWNlbnNlCistLS0tLS0tCisKK1pYaW5nT2JqQyBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIFtBcGFjaGUgMi4wIGxpY2Vuc2VdKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC5odG1sKS4KZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy5wb2RzcGVjIGIvWlhpbmdPYmpDLnBvZHNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmZTFkMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy5wb2RzcGVjCkBAIC0wLDAgKzEsMTggQEAKK1BvZDo6U3BlYy5uZXcgZG8gfHN8CisgIHMubmFtZSAgICAgICAgICAgICAgICAgICAgICAgID0gIlpYaW5nT2JqQyIKKyAgcy52ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgPSAiMi4yLjMiCisgIHMuc3VtbWFyeSAgICAgICAgICAgICAgICAgICAgID0gIkFuIE9iamVjdGl2ZS1DIFBvcnQgb2YgWlhpbmcuIgorICBzLmhvbWVwYWdlICAgICAgICAgICAgICAgICAgICA9ICJodHRwczovL2dpdGh1Yi5jb20vVGhlTGV2ZWxVcC9aWGluZ09iakMiCisgIHMuYXV0aG9yICAgICAgICAgICAgICAgICAgICAgID0gIlpYaW5nIHRlYW0gKGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC96eGluZy9wZW9wbGUvbGlzdCkgYW5kIFRoZUxldmVsVXAiCisKKyAgcy5saWNlbnNlICAgICAgICAgICAgICAgICAgICAgPSB7IDp0eXBlID0+ICdBcGFjaGUgTGljZW5zZSAyLjAnLCA6ZmlsZSA9PiAnQ09QWUlORycgfQorCisgIHMuc291cmNlICAgICAgICAgICAgICAgICAgICAgID0geyA6Z2l0ID0+ICJodHRwczovL2dpdGh1Yi5jb20vVGhlTGV2ZWxVcC9aWGluZ09iakMuZ2l0IiwgOnRhZyA9PiAiMi4yLjMiIH0KKyAgcy5pb3MuZGVwbG95bWVudF90YXJnZXQgCT0gJzUuMCcKKyAgcy5vc3guZGVwbG95bWVudF90YXJnZXQgCT0gJzEwLjcnCisKKyAgcy5zb3VyY2VfZmlsZXMgICAgICAgICAgICAgICAgPSAnWlhpbmdPYmpDLyoqLyoue2gsbX0nCisgIHMucmVxdWlyZXNfYXJjICAgICAgICAgICAgICAgID0gdHJ1ZQorCisgIHMuZnJhbWV3b3JrcyAgICAgICAgICAgICAgICAgID0gJ0ltYWdlSU8nLCAnQ29yZUdyYXBoaWNzJywgJ0NvcmVWaWRlbycsICdDb3JlTWVkaWEnLCAnUXVhcnR6Q29yZScsICdBVkZvdW5kYXRpb24nLCAnQXVkaW9Ub29sYm94JworZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1pYaW5nT2JqQy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDNiMzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMCwwICsxLDYwODUgQEAKKy8vICEkKlVURjgqJCEKK3sKKwlhcmNoaXZlVmVyc2lvbiA9IDE7CisJY2xhc3NlcyA9IHsKKwl9OworCW9iamVjdFZlcnNpb24gPSA0NjsKKwlvYmplY3RzID0geworCisvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCQkwMjQ5NTdGMzE4OTg2NDFCMDAzRDRFNkEgLyogQXp0ZWNCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRUYxNjZBQTBGMTAwRTEzMzA0IC8qIEF6dGVjQmxhY2tCb3gxVGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU3RjQxODk4NjQxQjAwM0Q0RTZBIC8qIEF6dGVjQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkYxMTY2QUEwRjEwMEUxMzMwNCAvKiBBenRlY0JsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1N0ZCMTg5ODY0MUIwMDNENEU2QSAvKiBQREY0MTdCbGFja0JveDRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjVCNTgyOTgxODE2RjdCMDAwMTM2MzRBIC8qIFBERjQxN0JsYWNrQm94NFRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODAyMTg5ODY0MUIwMDNENEU2QSAvKiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDBFMTY2QUEwRjEwMEUxMzMwNCAvKiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MDMxODk4NjQxQjAwM0Q0RTZBIC8qIEFic3RyYWN0TmVnYXRpdmVCbGFja0JveFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAxMDE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MDQxODk4NjQxQjAwM0Q0RTZBIC8qIFRlc3RSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDFCMTY2QUEwRjEwMEUxMzMwNCAvKiBUZXN0UmVzdWx0Lm0gKi87IH07CisJCTAyNDk1ODBCMTg5ODY0MUIwMDNENEU2QSAvKiBEYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDJBMTY2QUEwRjEwMEUxMzMwNCAvKiBEYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MEMxODk4NjQxQjAwM0Q0RTZBIC8qIERhdGFNYXRyaXhCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMkMxNjZBQTBGMTAwRTEzMzA0IC8qIERhdGFNYXRyaXhCbGFja0JveDJUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgwRTE4OTg2NDFCMDAzRDRFNkEgLyogRmFsc2VQb3NpdGl2ZXMyQmxhY2tCb3hUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMzIxNjZBQTBGMTAwRTEzMzA0IC8qIEZhbHNlUG9zaXRpdmVzMkJsYWNrQm94VGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MEYxODk4NjQxQjAwM0Q0RTZBIC8qIEZhbHNlUG9zaXRpdmVzQmxhY2tCb3hUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMzQxNjZBQTBGMTAwRTEzMzA0IC8qIEZhbHNlUG9zaXRpdmVzQmxhY2tCb3hUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgxMDE4OTg2NDFCMDAzRDRFNkEgLyogUGFydGlhbEJsYWNrQm94VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDM2MTY2QUEwRjEwMEUxMzMwNCAvKiBQYXJ0aWFsQmxhY2tCb3hUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgxMTE4OTg2NDFCMDAzRDRFNkEgLyogVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAzODE2NkFBMEYxMDBFMTMzMDQgLyogVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODEyMTg5ODY0MUIwMDNENEU2QSAvKiBDb2RhYmFyQmxhY2tib3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDNCMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RhYmFyQmxhY2tib3gxVGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MTMxODk4NjQxQjAwM0Q0RTZBIC8qIFBERjQxN0JsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNUU5RTkxODE3RkE1NTU0MDAzNjQ4NjEgLyogUERGNDE3QmxhY2tCb3gzVGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MTQxODk4NjQxQjAwM0Q0RTZBIC8qIENvZGUxMjhCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwM0QxNjZBQTBGMTAwRTEzMzA0IC8qIENvZGUxMjhCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgxNTE4OTg2NDFCMDAzRDRFNkEgLyogQ29kZTEyOEJsYWNrQm94MlRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAzRjE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTEyOEJsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODE2MTg5ODY0MUIwMDNENEU2QSAvKiBDb2RlMTI4QmxhY2tCb3gzVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDQxMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMTI4QmxhY2tCb3gzVGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MTcxODk4NjQxQjAwM0Q0RTZBIC8qIENvZGUzOUJsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA0MzE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTM5QmxhY2tCb3gxVGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MTgxODk4NjQxQjAwM0Q0RTZBIC8qIENvZGUzOUJsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA0NTE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTM5QmxhY2tCb3gzVGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MTkxODk4NjQxQjAwM0Q0RTZBIC8qIENvZGUzOUV4dGVuZGVkQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDQ3MTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMzlFeHRlbmRlZEJsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODFBMTg5ODY0MUIwMDNENEU2QSAvKiBDb2RlOTNCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNDkxNjZBQTBGMTAwRTEzMzA0IC8qIENvZGU5M0JsYWNrQm94MVRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODFCMTg5ODY0MUIwMDNENEU2QSAvKiBFQU4xM0JsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA0QjE2NkFBMEYxMDBFMTMzMDQgLyogRUFOMTNCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgxQzE4OTg2NDFCMDAzRDRFNkEgLyogRUFOMTNCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNEQxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjEzQmxhY2tCb3gyVGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MUQxODk4NjQxQjAwM0Q0RTZBIC8qIEVBTjEzQmxhY2tCb3gzVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDRGMTY2QUEwRjEwMEUxMzMwNCAvKiBFQU4xM0JsYWNrQm94M1Rlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODFFMTg5ODY0MUIwMDNENEU2QSAvKiBFQU4xM0JsYWNrQm94NFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA1MTE2NkFBMEYxMDBFMTMzMDQgLyogRUFOMTNCbGFja0JveDRUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgxRjE4OTg2NDFCMDAzRDRFNkEgLyogRUFOMTNCbGFja0JveDVCbHVycnlUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNTMxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjEzQmxhY2tCb3g1Qmx1cnJ5VGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MjAxODk4NjQxQjAwM0Q0RTZBIC8qIEVBTjhCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNTUxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjhCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgyMTE4OTg2NDFCMDAzRDRFNkEgLyogSVRGQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDU3MTY2QUEwRjEwMEUxMzMwNCAvKiBJVEZCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgyMjE4OTg2NDFCMDAzRDRFNkEgLyogSVRGQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDU5MTY2QUEwRjEwMEUxMzMwNCAvKiBJVEZCbGFja0JveDJUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgyOTE4OTg2NDFCMDAzRDRFNkEgLyogUlNTRXhwYW5kZWRCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNkExNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkQmxhY2tCb3gxVGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MkExODk4NjQxQjAwM0Q0RTZBIC8qIFJTU0V4cGFuZGVkQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDZDMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEJsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODJCMTg5ODY0MUIwMDNENEU2QSAvKiBSU1NFeHBhbmRlZEJsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA2RTE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRCbGFja0JveDNUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgyQzE4OTg2NDFCMDAzRDRFNkEgLyogUlNTRXhwYW5kZWRJbWFnZTJiaW5hcnlUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNzAxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2UyYmluYXJ5VGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MkQxODk4NjQxQjAwM0Q0RTZBIC8qIFJTU0V4cGFuZGVkSW1hZ2UycmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDcyMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMnJlc3VsdFRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODJFMTg5ODY0MUIwMDNENEU2QSAvKiBSU1NFeHBhbmRlZEltYWdlMnN0cmluZ1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA3NDE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJzdHJpbmdUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgyRjE4OTg2NDFCMDAzRDRFNkEgLyogUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA3NjE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODM0MTg5ODY0MUIwMDNENEU2QSAvKiBSU1MxNEJsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA4MDE2NkFBMEYxMDBFMTMzMDQgLyogUlNTMTRCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgzNTE4OTg2NDFCMDAzRDRFNkEgLyogUlNTMTRCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwODIxNjZBQTBGMTAwRTEzMzA0IC8qIFJTUzE0QmxhY2tCb3gyVGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4MzYxODk4NjQxQjAwM0Q0RTZBIC8qIFVQQ0FCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwODQxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0FCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgzNzE4OTg2NDFCMDAzRDRFNkEgLyogVVBDQUJsYWNrQm94MlRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA4NjE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODM4MTg5ODY0MUIwMDNENEU2QSAvKiBVUENBQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA4ODE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgzOTE4OTg2NDFCMDAzRDRFNkEgLyogVVBDQUJsYWNrQm94NFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA4QTE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94NFRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODNBMTg5ODY0MUIwMDNENEU2QSAvKiBVUENBQmxhY2tCb3g1VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDhDMTY2QUEwRjEwMEUxMzMwNCAvKiBVUENBQmxhY2tCb3g1VGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4M0IxODk4NjQxQjAwM0Q0RTZBIC8qIFVQQ0FCbGFja0JveDZCbHVycnlUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwOEUxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0FCbGFja0JveDZCbHVycnlUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgzQzE4OTg2NDFCMDAzRDRFNkEgLyogVVBDRUFORXh0ZW5zaW9uQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDkwMTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQU5FeHRlbnNpb25CbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTgzRDE4OTg2NDFCMDAzRDRFNkEgLyogVVBDRUJsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA5MjE2NkFBMEYxMDBFMTMzMDQgLyogVVBDRUJsYWNrQm94MVRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODNFMTg5ODY0MUIwMDNENEU2QSAvKiBVUENFQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDk0MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQmxhY2tCb3gyVGVzdENhc2UubSAqLzsgfTsKKwkJMDI0OTU4M0YxODk4NjQxQjAwM0Q0RTZBIC8qIFVQQ0VCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDk2MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLm0gKi87IH07CisJCTAyNDk1ODQ1MTg5ODY0MUIwMDNENEU2QSAvKiBBYnN0cmFjdEVycm9yQ29ycmVjdGlvblRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDBBOTE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTg0NzE4OTg2NDFCMDAzRDRFNkEgLyogUERGNDE3QmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEFEMTY2QUEwRjEwMEUxMzMwNCAvKiBQREY0MTdCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTg0ODE4OTg2NDFCMDAzRDRFNkEgLyogUERGNDE3QmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEFGMTY2QUEwRjEwMEUxMzMwNCAvKiBQREY0MTdCbGFja0JveDJUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTg1NDE4OTg2NDFCMDAzRDRFNkEgLyogUVJDb2RlQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MENBMTY2QUEwRjEwMEUxMzMwNCAvKiBRUkNvZGVCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTg1NTE4OTg2NDFCMDAzRDRFNkEgLyogUVJDb2RlQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MENDMTY2QUEwRjEwMEUxMzMwNCAvKiBRUkNvZGVCbGFja0JveDJUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTg1NjE4OTg2NDFCMDAzRDRFNkEgLyogUVJDb2RlQmxhY2tCb3gzVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MENFMTY2QUEwRjEwMEUxMzMwNCAvKiBRUkNvZGVCbGFja0JveDNUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTg1ODE4OTg2NDFCMDAzRDRFNkEgLyogUVJDb2RlQmxhY2tCb3g0VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEQwMTY2QUEwRjEwMEUxMzMwNCAvKiBRUkNvZGVCbGFja0JveDRUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTg1OTE4OTg2NDFCMDAzRDRFNkEgLyogUVJDb2RlQmxhY2tCb3g1VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEQyMTY2QUEwRjEwMEUxMzMwNCAvKiBRUkNvZGVCbGFja0JveDVUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTg1QTE4OTg2NDFCMDAzRDRFNkEgLyogUVJDb2RlQmxhY2tCb3g2VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEQ0MTY2QUEwRjEwMEUxMzMwNCAvKiBRUkNvZGVCbGFja0JveDZUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTg1QzE4OTg2NDFCMDAzRDRFNkEgLyogUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1RkU1RDM5MTZEMEI4MkYwMDgyNkNEQiAvKiBSU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTg1RDE4OTg2NDFCMDAzRDRFNkEgLyogUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1RkU1RDNCMTZEMEI4MzAwMDgyNkNEQiAvKiBSU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDJUZXN0Q2FzZS5tICovOyB9OworCQkwMjQ5NTg2OTE4OTg2NDFCMDAzRDRFNkEgLyogQVZGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0NzFBMTY2QUMyMTAwMEUxMzMwNCAvKiBBVkZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OworCQkwMjQ5NTg2QTE4OTg2NDFCMDAzRDRFNkEgLyogQ29yZUdyYXBoaWNzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MTRFMTY2QUEzMzcwMEUxMzMwNCAvKiBDb3JlR3JhcGhpY3MuZnJhbWV3b3JrICovOyB9OworCQkwMjQ5NTg2QjE4OTg2NDFCMDAzRDRFNkEgLyogQ29yZVZpZGVvLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MTVFMTY2QUFBMkYwMEUxMzMwNCAvKiBDb3JlVmlkZW8uZnJhbWV3b3JrICovOyB9OworCQkwMjQ5NTg2QzE4OTg2NDFCMDAzRDRFNkEgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NCNjE2NkE5NkZBMDBFMTMzMDQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTAyNDk1ODZEMTg5ODY0MUIwMDNENEU2QSAvKiBJbWFnZUlPLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MTVCMTY2QUE4NjkwMEUxMzMwNCAvKiBJbWFnZUlPLmZyYW1ld29yayAqLzsgfTsKKwkJMDI0OTU4NkUxODk4NjQxQjAwM0Q0RTZBIC8qIFNlblRlc3RpbmdLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDQzUxNjZBOTZGQTAwRTEzMzA0IC8qIFNlblRlc3RpbmdLaXQuZnJhbWV3b3JrICovOyB9OworCQkwMjQ5NTg2RjE4OTg2NDFCMDAzRDRFNkEgLyogVUlLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQxNDUxNjZBQTE2MjAwRTEzMzA0IC8qIFVJS2l0LmZyYW1ld29yayAqLzsgfTsKKwkJMDI0OTU4NzAxODk4NjQxQjAwM0Q0RTZBIC8qIGxpYlpYaW5nT2JqQy1pT1MuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzQ0IzMTY2QTk2RkEwMEUxMzMwNCAvKiBsaWJaWGluZ09iakMtaU9TLmEgKi87IH07CisJCTAyNDk1ODcyMTg5ODY0MUIwMDNENEU2QSAvKiBSZXNvdXJjZXMgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1RkU1RDQ0MTZEMTk5N0MwMDgyNkNEQiAvKiBSZXNvdXJjZXMgKi87IH07CisJCTAyQjQ4ODRBMTdGNUYxMDAwMEU2Mjg1RCAvKiBSZXNvdXJjZXMgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1RkU1RDQ0MTZEMTk5N0MwMDgyNkNEQiAvKiBSZXNvdXJjZXMgKi87IH07CisJCTAyRDgxMzczMTg5ODY0QzcwMDgxNzIxRCAvKiBSU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjVGRTVEMzkxNkQwQjgyRjAwODI2Q0RCIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MVRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxMzc0MTg5ODY0QzcwMDgxNzIxRCAvKiBSU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjVGRTVEM0IxNkQwQjgzMDAwODI2Q0RCIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxMzc1MTg5ODY0QzcwMDgxNzIxRCAvKiBSU1NFeHBhbmRlZFN0YWNrZWRJbnRlcm5hbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNUZFNUQzRjE2RDBCODRDMDA4MjZDREIgLyogUlNTRXhwYW5kZWRTdGFja2VkSW50ZXJuYWxUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTM3NzE4OTg2NEM3MDA4MTcyMUQgLyogQXp0ZWNCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRUYxNjZBQTBGMTAwRTEzMzA0IC8qIEF6dGVjQmxhY2tCb3gxVGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzNzgxODk4NjRDNzAwODE3MjFEIC8qIEF6dGVjQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkYxMTY2QUEwRjEwMEUxMzMwNCAvKiBBenRlY0JsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxMzdCMTg5ODY0QzcwMDgxNzIxRCAvKiBQREY0MTdCbGFja0JveDRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjVCNTgyOTgxODE2RjdCMDAwMTM2MzRBIC8qIFBERjQxN0JsYWNrQm94NFRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxMzg2MTg5ODY0QzcwMDgxNzIxRCAvKiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDBFMTY2QUEwRjEwMEUxMzMwNCAvKiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzODcxODk4NjRDNzAwODE3MjFEIC8qIFBERjQxN0JsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNUU5RTkxODE3RkE1NTU0MDAzNjQ4NjEgLyogUERGNDE3QmxhY2tCb3gzVGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzODgxODk4NjRDNzAwODE3MjFEIC8qIEFic3RyYWN0TmVnYXRpdmVCbGFja0JveFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAxMDE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzODkxODk4NjRDNzAwODE3MjFEIC8qIFRlc3RSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDFCMTY2QUEwRjEwMEUxMzMwNCAvKiBUZXN0UmVzdWx0Lm0gKi87IH07CisJCTAyRDgxMzkwMTg5ODY0QzcwMDgxNzIxRCAvKiBEYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDJBMTY2QUEwRjEwMEUxMzMwNCAvKiBEYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzOTExODk4NjRDNzAwODE3MjFEIC8qIERhdGFNYXRyaXhCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMkMxNjZBQTBGMTAwRTEzMzA0IC8qIERhdGFNYXRyaXhCbGFja0JveDJUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTM5MzE4OTg2NEM3MDA4MTcyMUQgLyogRmFsc2VQb3NpdGl2ZXMyQmxhY2tCb3hUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMzIxNjZBQTBGMTAwRTEzMzA0IC8qIEZhbHNlUG9zaXRpdmVzMkJsYWNrQm94VGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzOTQxODk4NjRDNzAwODE3MjFEIC8qIEZhbHNlUG9zaXRpdmVzQmxhY2tCb3hUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMzQxNjZBQTBGMTAwRTEzMzA0IC8qIEZhbHNlUG9zaXRpdmVzQmxhY2tCb3hUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTM5NTE4OTg2NEM3MDA4MTcyMUQgLyogUGFydGlhbEJsYWNrQm94VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDM2MTY2QUEwRjEwMEUxMzMwNCAvKiBQYXJ0aWFsQmxhY2tCb3hUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTM5NjE4OTg2NEM3MDA4MTcyMUQgLyogVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAzODE2NkFBMEYxMDBFMTMzMDQgLyogVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxMzk3MTg5ODY0QzcwMDgxNzIxRCAvKiBDb2RhYmFyQmxhY2tib3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDNCMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RhYmFyQmxhY2tib3gxVGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzOTgxODk4NjRDNzAwODE3MjFEIC8qIENvZGUxMjhCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwM0QxNjZBQTBGMTAwRTEzMzA0IC8qIENvZGUxMjhCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTM5OTE4OTg2NEM3MDA4MTcyMUQgLyogQ29kZTEyOEJsYWNrQm94MlRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAzRjE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTEyOEJsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxMzlBMTg5ODY0QzcwMDgxNzIxRCAvKiBDb2RlMTI4QmxhY2tCb3gzVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDQxMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMTI4QmxhY2tCb3gzVGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzOUIxODk4NjRDNzAwODE3MjFEIC8qIENvZGUzOUJsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA0MzE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTM5QmxhY2tCb3gxVGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzOUMxODk4NjRDNzAwODE3MjFEIC8qIENvZGUzOUJsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA0NTE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTM5QmxhY2tCb3gzVGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzOUQxODk4NjRDNzAwODE3MjFEIC8qIENvZGUzOUV4dGVuZGVkQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDQ3MTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMzlFeHRlbmRlZEJsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxMzlFMTg5ODY0QzcwMDgxNzIxRCAvKiBDb2RlOTNCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNDkxNjZBQTBGMTAwRTEzMzA0IC8qIENvZGU5M0JsYWNrQm94MVRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxMzlGMTg5ODY0QzcwMDgxNzIxRCAvKiBFQU4xM0JsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA0QjE2NkFBMEYxMDBFMTMzMDQgLyogRUFOMTNCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNBMDE4OTg2NEM3MDA4MTcyMUQgLyogRUFOMTNCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNEQxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjEzQmxhY2tCb3gyVGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzQTExODk4NjRDNzAwODE3MjFEIC8qIEVBTjEzQmxhY2tCb3gzVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDRGMTY2QUEwRjEwMEUxMzMwNCAvKiBFQU4xM0JsYWNrQm94M1Rlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0EyMTg5ODY0QzcwMDgxNzIxRCAvKiBFQU4xM0JsYWNrQm94NFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA1MTE2NkFBMEYxMDBFMTMzMDQgLyogRUFOMTNCbGFja0JveDRUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNBMzE4OTg2NEM3MDA4MTcyMUQgLyogRUFOMTNCbGFja0JveDVCbHVycnlUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNTMxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjEzQmxhY2tCb3g1Qmx1cnJ5VGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzQTQxODk4NjRDNzAwODE3MjFEIC8qIEVBTjhCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNTUxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjhCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNBNTE4OTg2NEM3MDA4MTcyMUQgLyogSVRGQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDU3MTY2QUEwRjEwMEUxMzMwNCAvKiBJVEZCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNBNjE4OTg2NEM3MDA4MTcyMUQgLyogSVRGQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDU5MTY2QUEwRjEwMEUxMzMwNCAvKiBJVEZCbGFja0JveDJUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNBRDE4OTg2NEM3MDA4MTcyMUQgLyogUlNTRXhwYW5kZWRCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNkExNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkQmxhY2tCb3gxVGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzQUUxODk4NjRDNzAwODE3MjFEIC8qIFJTU0V4cGFuZGVkQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDZDMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEJsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0FGMTg5ODY0QzcwMDgxNzIxRCAvKiBSU1NFeHBhbmRlZEJsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA2RTE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRCbGFja0JveDNUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNCMDE4OTg2NEM3MDA4MTcyMUQgLyogUlNTRXhwYW5kZWRJbWFnZTJiaW5hcnlUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNzAxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2UyYmluYXJ5VGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzQjExODk4NjRDNzAwODE3MjFEIC8qIFJTU0V4cGFuZGVkSW1hZ2UycmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDcyMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMnJlc3VsdFRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0IyMTg5ODY0QzcwMDgxNzIxRCAvKiBSU1NFeHBhbmRlZEltYWdlMnN0cmluZ1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA3NDE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJzdHJpbmdUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNCMzE4OTg2NEM3MDA4MTcyMUQgLyogUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA3NjE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0I4MTg5ODY0QzcwMDgxNzIxRCAvKiBSU1MxNEJsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA4MDE2NkFBMEYxMDBFMTMzMDQgLyogUlNTMTRCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNCOTE4OTg2NEM3MDA4MTcyMUQgLyogUlNTMTRCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwODIxNjZBQTBGMTAwRTEzMzA0IC8qIFJTUzE0QmxhY2tCb3gyVGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzQkExODk4NjRDNzAwODE3MjFEIC8qIFVQQ0FCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwODQxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0FCbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNCQjE4OTg2NEM3MDA4MTcyMUQgLyogVVBDQUJsYWNrQm94MlRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA4NjE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0JDMTg5ODY0QzcwMDgxNzIxRCAvKiBVUENBQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA4ODE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNCRDE4OTg2NEM3MDA4MTcyMUQgLyogVVBDQUJsYWNrQm94NFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA4QTE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94NFRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0JFMTg5ODY0QzcwMDgxNzIxRCAvKiBVUENBQmxhY2tCb3g1VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDhDMTY2QUEwRjEwMEUxMzMwNCAvKiBVUENBQmxhY2tCb3g1VGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzQkYxODk4NjRDNzAwODE3MjFEIC8qIFVQQ0FCbGFja0JveDZCbHVycnlUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwOEUxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0FCbGFja0JveDZCbHVycnlUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNDMDE4OTg2NEM3MDA4MTcyMUQgLyogVVBDRUFORXh0ZW5zaW9uQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDkwMTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQU5FeHRlbnNpb25CbGFja0JveDFUZXN0Q2FzZS5tICovOyB9OworCQkwMkQ4MTNDMTE4OTg2NEM3MDA4MTcyMUQgLyogVVBDRUJsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA5MjE2NkFBMEYxMDBFMTMzMDQgLyogVVBDRUJsYWNrQm94MVRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0MyMTg5ODY0QzcwMDgxNzIxRCAvKiBVUENFQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDk0MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQmxhY2tCb3gyVGVzdENhc2UubSAqLzsgfTsKKwkJMDJEODEzQzMxODk4NjRDNzAwODE3MjFEIC8qIFVQQ0VCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDk2MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0NCMTg5ODY0QzcwMDgxNzIxRCAvKiBQREY0MTdCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQUQxNjZBQTBGMTAwRTEzMzA0IC8qIFBERjQxN0JsYWNrQm94MVRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0NDMTg5ODY0QzcwMDgxNzIxRCAvKiBQREY0MTdCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQUYxNjZBQTBGMTAwRTEzMzA0IC8qIFBERjQxN0JsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0Q4MTg5ODY0QzcwMDgxNzIxRCAvKiBRUkNvZGVCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQ0ExNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94MVRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0Q5MTg5ODY0QzcwMDgxNzIxRCAvKiBRUkNvZGVCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQ0MxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94MlRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0RBMTg5ODY0QzcwMDgxNzIxRCAvKiBRUkNvZGVCbGFja0JveDNUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQ0UxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94M1Rlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0RDMTg5ODY0QzcwMDgxNzIxRCAvKiBRUkNvZGVCbGFja0JveDRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwRDAxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94NFRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0REMTg5ODY0QzcwMDgxNzIxRCAvKiBRUkNvZGVCbGFja0JveDVUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwRDIxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94NVRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0RFMTg5ODY0QzcwMDgxNzIxRCAvKiBRUkNvZGVCbGFja0JveDZUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwRDQxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94NlRlc3RDYXNlLm0gKi87IH07CisJCTAyRDgxM0U5MTg5ODY0QzcwMDgxNzIxRCAvKiBRVEtpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDcwMDE2NkFCQzNGMDBFMTMzMDQgLyogUVRLaXQuZnJhbWV3b3JrICovOyB9OworCQkwMkQ4MTNFQTE4OTg2NEM3MDA4MTcyMUQgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDZGQzE2NkFCQzE2MDBFMTMzMDQgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTAyRDgxM0VCMTg5ODY0QzcwMDgxNzIxRCAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0Mzk0MTY2QUI5NTcwMEUxMzMwNCAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yayAqLzsgfTsKKwkJMDJEODEzRUMxODk4NjRDNzAwODE3MjFEIC8qIENvcmVWaWRlby5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDM4NzE2NkFCOENGMDBFMTMzMDQgLyogQ29yZVZpZGVvLmZyYW1ld29yayAqLzsgfTsKKwkJMDJEODEzRUQxODk4NjRDNzAwODE3MjFEIC8qIFNlblRlc3RpbmdLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDQzUxNjZBOTZGQTAwRTEzMzA0IC8qIFNlblRlc3RpbmdLaXQuZnJhbWV3b3JrICovOyB9OworCQkwMkQ4MTNFRTE4OTg2NEM3MDA4MTcyMUQgLyogbGliWlhpbmdPYmpDLW9zeC5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQxNjYxNjZBQURBQzAwRTEzMzA0IC8qIGxpYlpYaW5nT2JqQy1vc3guYSAqLzsgfTsKKwkJMDJEODEzRjAxODk4NjRDNzAwODE3MjFEIC8qIFJlc291cmNlcyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjVGRTVENDQxNkQxOTk3QzAwODI2Q0RCIC8qIFJlc291cmNlcyAqLzsgfTsKKwkJMjUwNEQ0QzYxNkY2OThBQTAwREY4ODgyIC8qIFpYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MDRENEM0MTZGNjk4QUEwMERGODg4MiAvKiBaWEludmVydGVkTHVtaW5hbmNlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTA0RDRDNzE2RjY5OEFBMDBERjg4ODIgLyogWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUwNEQ0QzUxNkY2OThBQTAwREY4ODgyIC8qIFpYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UubSAqLzsgfTsKKwkJMjUwNEQ0QzgxNkY2OThCRTAwREY4ODgyIC8qIFpYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MDRENEM0MTZGNjk4QUEwMERGODg4MiAvKiBaWEludmVydGVkTHVtaW5hbmNlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTA0RDRDQTE2RjY5OEM5MDBERjg4ODIgLyogWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUwNEQ0QzUxNkY2OThBQTAwREY4ODgyIC8qIFpYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UubSAqLzsgfTsKKwkJMjUwNEQ0Q0IxNkY2OThDOTAwREY4ODgyIC8qIFpYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MDRENEM1MTZGNjk4QUEwMERGODg4MiAvKiBaWEludmVydGVkTHVtaW5hbmNlU291cmNlLm0gKi87IH07CisJCTI1MDREOUNGMTZGRkQyRTIwMERGODg4MiAvKiBaWEF6dGVjQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUwNEQ5Q0QxNkZGRDJFMjAwREY4ODgyIC8qIFpYQXp0ZWNDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTA0RDlEMDE2RkZEMkUyMDBERjg4ODIgLyogWlhBenRlY0NvZGUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MDREOUNFMTZGRkQyRTIwMERGODg4MiAvKiBaWEF6dGVjQ29kZS5tICovOyB9OworCQkyNTA0RDlEMTE2RkZEM0ExMDBERjg4ODIgLyogWlhBenRlY0NvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MDREOUNEMTZGRkQyRTIwMERGODg4MiAvKiBaWEF6dGVjQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUwNEQ5RDMxNkZGRDNCMzAwREY4ODgyIC8qIFpYQXp0ZWNDb2RlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTA0RDlDRTE2RkZEMkUyMDBERjg4ODIgLyogWlhBenRlY0NvZGUubSAqLzsgfTsKKwkJMjUwNEQ5RDQxNkZGRDNCMzAwREY4ODgyIC8qIFpYQXp0ZWNDb2RlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTA0RDlDRTE2RkZEMkUyMDBERjg4ODIgLyogWlhBenRlY0NvZGUubSAqLzsgfTsKKwkJMjUwNEQ5REMxNkZGRDRDRDAwREY4ODgyIC8qIFpYQXp0ZWNFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTA0RDlEQTE2RkZENENEMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1MDREOUREMTZGRkQ0Q0QwMERGODg4MiAvKiBaWEF6dGVjRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUwNEQ5REIxNkZGRDRDRDAwREY4ODgyIC8qIFpYQXp0ZWNFbmNvZGVyLm0gKi87IH07CisJCTI1MDREOURGMTZGRkVCN0EwMERGODg4MiAvKiBaWEF6dGVjRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUwNEQ5REIxNkZGRDRDRDAwREY4ODgyIC8qIFpYQXp0ZWNFbmNvZGVyLm0gKi87IH07CisJCTI1MDREOUUwMTZGRkVCN0IwMERGODg4MiAvKiBaWEF6dGVjRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUwNEQ5REIxNkZGRDRDRDAwREY4ODgyIC8qIFpYQXp0ZWNFbmNvZGVyLm0gKi87IH07CisJCTI1MDREOUUyMTZGRkVCODEwMERGODg4MiAvKiBaWEF6dGVjRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUwNEQ5REExNkZGRDRDRDAwREY4ODgyIC8qIFpYQXp0ZWNFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTA0RDlFODE2RkZGMjdDMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTA0RDlFNTE2RkZGMjdDMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXJUZXN0Lm0gKi87IH07CisJCTI1MDREOUU5MTZGRkYyQTkwMERGODg4MiAvKiBaWEF6dGVjRW5jb2RlclRlc3QubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MDREOUU1MTZGRkYyN0MwMERGODg4MiAvKiBaWEF6dGVjRW5jb2RlclRlc3QubSAqLzsgfTsKKwkJMjUwNEQ5RUMxNzAwMDVGRTAwREY4ODgyIC8qIFJlZWRTb2xvbW9uVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MDREOUVCMTcwMDA1RkUwMERGODg4MiAvKiBSZWVkU29sb21vblRlc3RDYXNlLm0gKi87IH07CisJCTI1MDREOUVEMTcwMDA1RkUwMERGODg4MiAvKiBSZWVkU29sb21vblRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTA0RDlFQjE3MDAwNUZFMDBERjg4ODIgLyogUmVlZFNvbG9tb25UZXN0Q2FzZS5tICovOyB9OworCQkyNTE5QUIzNDE3RkQxRUMwMDBBNzFDNDUgLyogWlhBenRlY1dyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCMzIxN0ZEMUVDMDAwQTcxQzQ1IC8qIFpYQXp0ZWNXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1MTlBQjM1MTdGRDFFQzAwMEE3MUM0NSAvKiBaWEF6dGVjV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUIzMjE3RkQxRUMwMDBBNzFDNDUgLyogWlhBenRlY1dyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUxOUFCMzcxN0ZEMUVDMDAwQTcxQzQ1IC8qIFpYQXp0ZWNXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjMzMTdGRDFFQzAwMEE3MUM0NSAvKiBaWEF6dGVjV3JpdGVyLm0gKi87IH07CisJCTI1MTlBQjM4MTdGRDFFQzAwMEE3MUM0NSAvKiBaWEF6dGVjV3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUIzMzE3RkQxRUMwMDBBNzFDNDUgLyogWlhBenRlY1dyaXRlci5tICovOyB9OworCQkyNTE5QUIzOTE3RkQxRUMwMDBBNzFDNDUgLyogWlhBenRlY1dyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCMzMxN0ZEMUVDMDAwQTcxQzQ1IC8qIFpYQXp0ZWNXcml0ZXIubSAqLzsgfTsKKwkJMjUxOUFCM0MxN0ZEMUVFNDAwQTcxQzQ1IC8qIFpYUERGNDE3V3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUIzQTE3RkQxRUU0MDBBNzFDNDUgLyogWlhQREY0MTdXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1MTlBQjNEMTdGRDFFRTQwMEE3MUM0NSAvKiBaWFBERjQxN1dyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCM0ExN0ZEMUVFNDAwQTcxQzQ1IC8qIFpYUERGNDE3V3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTE5QUIzRjE3RkQxRUU0MDBBNzFDNDUgLyogWlhQREY0MTdXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjNCMTdGRDFFRTQwMEE3MUM0NSAvKiBaWFBERjQxN1dyaXRlci5tICovOyB9OworCQkyNTE5QUI0MDE3RkQxRUU0MDBBNzFDNDUgLyogWlhQREY0MTdXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjNCMTdGRDFFRTQwMEE3MUM0NSAvKiBaWFBERjQxN1dyaXRlci5tICovOyB9OworCQkyNTE5QUI0MTE3RkQxRUU0MDBBNzFDNDUgLyogWlhQREY0MTdXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjNCMTdGRDFFRTQwMEE3MUM0NSAvKiBaWFBERjQxN1dyaXRlci5tICovOyB9OworCQkyNTE5QUI0NDE3RkU1NTREMDBBNzFDNDUgLyogWlhQREY0MTdDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjQyMTdGRTU1NEQwMEE3MUM0NSAvKiBaWFBERjQxN0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUxOUFCNDUxN0ZFNTU0RDAwQTcxQzQ1IC8qIFpYUERGNDE3Q29tbW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI0MzE3RkU1NTREMDBBNzFDNDUgLyogWlhQREY0MTdDb21tb24ubSAqLzsgfTsKKwkJMjUxOUFCNDgxN0ZFNUMxRjAwQTcxQzQ1IC8qIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjQ2MTdGRTVDMUYwMEE3MUM0NSAvKiBaWFBERjQxN1Jlc3VsdE1ldGFkYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTE5QUI0OTE3RkU1QzFGMDBBNzFDNDUgLyogWlhQREY0MTdSZXN1bHRNZXRhZGF0YS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCNDcxN0ZFNUMxRjAwQTcxQzQ1IC8qIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEubSAqLzsgfTsKKwkJMjUxOUFCNEExN0ZFNUMyRTAwQTcxQzQ1IC8qIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjQ3MTdGRTVDMUYwMEE3MUM0NSAvKiBaWFBERjQxN1Jlc3VsdE1ldGFkYXRhLm0gKi87IH07CisJCTI1MTlBQjRCMTdGRTVDMkUwMEE3MUM0NSAvKiBaWFBERjQxN1Jlc3VsdE1ldGFkYXRhLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI0NzE3RkU1QzFGMDBBNzFDNDUgLyogWlhQREY0MTdSZXN1bHRNZXRhZGF0YS5tICovOyB9OworCQkyNTE5QUI0QzE3RkU1QzMxMDBBNzFDNDUgLyogWlhQREY0MTdDb21tb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjQzMTdGRTU1NEQwMEE3MUM0NSAvKiBaWFBERjQxN0NvbW1vbi5tICovOyB9OworCQkyNTE5QUI0RDE3RkU1QzMxMDBBNzFDNDUgLyogWlhQREY0MTdDb21tb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjQzMTdGRTU1NEQwMEE3MUM0NSAvKiBaWFBERjQxN0NvbW1vbi5tICovOyB9OworCQkyNTE5QUI1MDE3RkU1QzQ1MDBBNzFDNDUgLyogWlhQREY0MTdDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjQyMTdGRTU1NEQwMEE3MUM0NSAvKiBaWFBERjQxN0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUxOUFCNTIxN0ZFNUM1NDAwQTcxQzQ1IC8qIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjQ2MTdGRTVDMUYwMEE3MUM0NSAvKiBaWFBERjQxN1Jlc3VsdE1ldGFkYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTE5QUI1RTE3RkU1RTRGMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjVDMTdGRTVFNEYwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVNZXRhZGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUxOUFCNUYxN0ZFNUU0RjAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI1QzE3RkU1RTRGMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1MTlBQjYxMTdGRTVFNEYwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVNZXRhZGF0YS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCNUQxN0ZFNUU0RjAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZU1ldGFkYXRhLm0gKi87IH07CisJCTI1MTlBQjYyMTdGRTVFNEYwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVNZXRhZGF0YS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCNUQxN0ZFNUU0RjAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZU1ldGFkYXRhLm0gKi87IH07CisJCTI1MTlBQjYzMTdGRTVFNEYwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVNZXRhZGF0YS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCNUQxN0ZFNUU0RjAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZU1ldGFkYXRhLm0gKi87IH07CisJCTI1MTlBQjY2MTdGRTVGMkUwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCNjQxN0ZFNUYyRTAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTE5QUI2NzE3RkU1RjJFMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjY0MTdGRTVGMkUwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUxOUFCNjkxN0ZFNUYyRTAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZVZhbHVlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI2NTE3RkU1RjJFMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlVmFsdWUubSAqLzsgfTsKKwkJMjUxOUFCNkExN0ZFNUYyRTAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZVZhbHVlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI2NTE3RkU1RjJFMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlVmFsdWUubSAqLzsgfTsKKwkJMjUxOUFCNkIxN0ZFNUYyRTAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZVZhbHVlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI2NTE3RkU1RjJFMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlVmFsdWUubSAqLzsgfTsKKwkJMjUxOUFCNkUxN0ZFNjBFNzAwQTcxQzQ1IC8qIFpYUERGNDE3Qm91bmRpbmdCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjZDMTdGRTYwRTcwMEE3MUM0NSAvKiBaWFBERjQxN0JvdW5kaW5nQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTE5QUI2RjE3RkU2MEU3MDBBNzFDNDUgLyogWlhQREY0MTdCb3VuZGluZ0JveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCNkMxN0ZFNjBFNzAwQTcxQzQ1IC8qIFpYUERGNDE3Qm91bmRpbmdCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1MTlBQjcxMTdGRTYwRTcwMEE3MUM0NSAvKiBaWFBERjQxN0JvdW5kaW5nQm94Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI2RDE3RkU2MEU3MDBBNzFDNDUgLyogWlhQREY0MTdCb3VuZGluZ0JveC5tICovOyB9OworCQkyNTE5QUI3MjE3RkU2MEU3MDBBNzFDNDUgLyogWlhQREY0MTdCb3VuZGluZ0JveC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCNkQxN0ZFNjBFNzAwQTcxQzQ1IC8qIFpYUERGNDE3Qm91bmRpbmdCb3gubSAqLzsgfTsKKwkJMjUxOUFCNzMxN0ZFNjBFNzAwQTcxQzQ1IC8qIFpYUERGNDE3Qm91bmRpbmdCb3gubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjZEMTdGRTYwRTcwMEE3MUM0NSAvKiBaWFBERjQxN0JvdW5kaW5nQm94Lm0gKi87IH07CisJCTI1MTlBQjc2MTdGRTY0OTAwMEE3MUM0NSAvKiBaWFBERjQxN0NvZGV3b3JkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI3NDE3RkU2NDkwMDBBNzFDNDUgLyogWlhQREY0MTdDb2Rld29yZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUxOUFCNzcxN0ZFNjQ5MDAwQTcxQzQ1IC8qIFpYUERGNDE3Q29kZXdvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjc0MTdGRTY0OTAwMEE3MUM0NSAvKiBaWFBERjQxN0NvZGV3b3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTE5QUI3OTE3RkU2NDkwMDBBNzFDNDUgLyogWlhQREY0MTdDb2Rld29yZC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCNzUxN0ZFNjQ5MDAwQTcxQzQ1IC8qIFpYUERGNDE3Q29kZXdvcmQubSAqLzsgfTsKKwkJMjUxOUFCN0ExN0ZFNjQ5MDAwQTcxQzQ1IC8qIFpYUERGNDE3Q29kZXdvcmQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjc1MTdGRTY0OTAwMEE3MUM0NSAvKiBaWFBERjQxN0NvZGV3b3JkLm0gKi87IH07CisJCTI1MTlBQjdCMTdGRTY0OTAwMEE3MUM0NSAvKiBaWFBERjQxN0NvZGV3b3JkLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI3NTE3RkU2NDkwMDBBNzFDNDUgLyogWlhQREY0MTdDb2Rld29yZC5tICovOyB9OworCQkyNTFGQ0RFQjE2Q0M4RjUzMDAwQzI3RTUgLyogWlhSR0JMdW1pbmFuY2VTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MUZDREU5MTZDQzhGNTMwMDBDMjdFNSAvKiBaWFJHQkx1bWluYW5jZVNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUxRkNERUMxNkNDOEY1MzAwMEMyN0U1IC8qIFpYUkdCTHVtaW5hbmNlU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTFGQ0RFOTE2Q0M4RjUzMDAwQzI3RTUgLyogWlhSR0JMdW1pbmFuY2VTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1MUZDREVEMTZDQzhGNTMwMDBDMjdFNSAvKiBaWFJHQkx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxRkNERUExNkNDOEY1MzAwMEMyN0U1IC8qIFpYUkdCTHVtaW5hbmNlU291cmNlLm0gKi87IH07CisJCTI1MUZDREVFMTZDQzhGNTMwMDBDMjdFNSAvKiBaWFJHQkx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxRkNERUExNkNDOEY1MzAwMEMyN0U1IC8qIFpYUkdCTHVtaW5hbmNlU291cmNlLm0gKi87IH07CisJCTI1MUZDREYwMTZDQzhGN0MwMDBDMjdFNSAvKiBaWFJHQkx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxRkNERUExNkNDOEY1MzAwMEMyN0U1IC8qIFpYUkdCTHVtaW5hbmNlU291cmNlLm0gKi87IH07CisJCTI1Mzg5QjYwMTdGRkM4NDMwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUzODlCNUUxN0ZGQzg0MzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTM4OUI2MTE3RkZDODQzMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1Mzg5QjVFMTdGRkM4NDMwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUzODlCNjIxN0ZGQzg0MzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI1RjE3RkZDODQzMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQubSAqLzsgfTsKKwkJMjUzODlCNjMxN0ZGQzg0MzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI1RjE3RkZDODQzMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQubSAqLzsgfTsKKwkJMjUzODlCNjQxN0ZGQzg0ODAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI1RjE3RkZDODQzMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQubSAqLzsgfTsKKwkJMjUzODlCNjUxN0ZGQzg0RjAwNzcyMzkyIC8qIFpYUERGNDE3RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMjMxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUzODlCNjkxN0ZGQzk4MTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI2NzE3RkZDOTgxMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1Mzg5QjZBMTdGRkM5ODEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUzODlCNjcxN0ZGQzk4MTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTM4OUI2QzE3RkZDOTgxMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1Mzg5QjY4MTdGRkM5ODEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbi5tICovOyB9OworCQkyNTM4OUI2RDE3RkZDOTgxMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1Mzg5QjY4MTdGRkM5ODEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbi5tICovOyB9OworCQkyNTM4OUI2RTE3RkZDOTgxMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1Mzg5QjY4MTdGRkM5ODEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbi5tICovOyB9OworCQkyNTM4OUI3MTE3RkZDQTI3MDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1Mzg5QjZGMTdGRkNBMjcwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUzODlCNzIxN0ZGQ0EyNzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI2RjE3RkZDQTI3MDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1Mzg5Qjc0MTdGRkNBMjcwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUzODlCNzAxN0ZGQ0EyNzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLm0gKi87IH07CisJCTI1Mzg5Qjc1MTdGRkNBMjcwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUzODlCNzAxN0ZGQ0EyNzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLm0gKi87IH07CisJCTI1Mzg5Qjc2MTdGRkNBMjcwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUzODlCNzAxN0ZGQ0EyNzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLm0gKi87IH07CisJCTI1Mzg5Qjc5MTgwMERFQzMwMDc3MjM5MiAvKiBaWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUzODlCNzcxODAwREVDMzAwNzcyMzkyIC8qIFpYUERGNDE3Q29kZXdvcmREZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTM4OUI3QTE4MDBERUMzMDA3NzIzOTIgLyogWlhQREY0MTdDb2Rld29yZERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1Mzg5Qjc3MTgwMERFQzMwMDc3MjM5MiAvKiBaWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUzODlCN0MxODAwREVDMzAwNzcyMzkyIC8qIFpYUERGNDE3Q29kZXdvcmREZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI3ODE4MDBERUMzMDA3NzIzOTIgLyogWlhQREY0MTdDb2Rld29yZERlY29kZXIubSAqLzsgfTsKKwkJMjUzODlCN0QxODAwREVDMzAwNzcyMzkyIC8qIFpYUERGNDE3Q29kZXdvcmREZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI3ODE4MDBERUMzMDA3NzIzOTIgLyogWlhQREY0MTdDb2Rld29yZERlY29kZXIubSAqLzsgfTsKKwkJMjUzODlCN0UxODAwREVDMzAwNzcyMzkyIC8qIFpYUERGNDE3Q29kZXdvcmREZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI3ODE4MDBERUMzMDA3NzIzOTIgLyogWlhQREY0MTdDb2Rld29yZERlY29kZXIubSAqLzsgfTsKKwkJMjUzODlCODExODAwRTM1QjAwNzcyMzkyIC8qIFpYUERGNDE3U2Nhbm5pbmdEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI3RjE4MDBFMzVCMDA3NzIzOTIgLyogWlhQREY0MTdTY2FubmluZ0RlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1Mzg5QjgyMTgwMEUzNUIwMDc3MjM5MiAvKiBaWFBERjQxN1NjYW5uaW5nRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUzODlCN0YxODAwRTM1QjAwNzcyMzkyIC8qIFpYUERGNDE3U2Nhbm5pbmdEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTM4OUI4NDE4MDBFMzVCMDA3NzIzOTIgLyogWlhQREY0MTdTY2FubmluZ0RlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1Mzg5QjgwMTgwMEUzNUIwMDc3MjM5MiAvKiBaWFBERjQxN1NjYW5uaW5nRGVjb2Rlci5tICovOyB9OworCQkyNTM4OUI4NTE4MDBFMzVCMDA3NzIzOTIgLyogWlhQREY0MTdTY2FubmluZ0RlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1Mzg5QjgwMTgwMEUzNUIwMDc3MjM5MiAvKiBaWFBERjQxN1NjYW5uaW5nRGVjb2Rlci5tICovOyB9OworCQkyNTM4OUI4NjE4MDBFMzVCMDA3NzIzOTIgLyogWlhQREY0MTdTY2FubmluZ0RlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1Mzg5QjgwMTgwMEUzNUIwMDc3MjM5MiAvKiBaWFBERjQxN1NjYW5uaW5nRGVjb2Rlci5tICovOyB9OworCQkyNTM4OUI4OTE4MDEwQjlBMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUzODlCODcxODAxMEI5QTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1Mzg5QjhBMTgwMTBCOUEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdG9yUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI4NzE4MDEwQjlBMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjUzODlCOEMxODAxMEI5QTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1Mzg5Qjg4MTgwMTBCOUEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdG9yUmVzdWx0Lm0gKi87IH07CisJCTI1Mzg5QjhEMTgwMTBCOUEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdG9yUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI4ODE4MDEwQjlBMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclJlc3VsdC5tICovOyB9OworCQkyNTM4OUI4RTE4MDEwQjlBMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUzODlCODgxODAxMEI5QTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQubSAqLzsgfTsKKwkJMjUzODlCOTgxODAxMERDQjAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0b3JUZXN0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI5MTE4MDEwRDlCMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclRlc3QubSAqLzsgfTsKKwkJMjUzODlCOTkxODAxMERDQjAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0b3JUZXN0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI5MTE4MDEwRDlCMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclRlc3QubSAqLzsgfTsKKwkJMjU0MDNDQjcxNjZBOTZGQTAwRTEzMzA0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDQjYxNjZBOTZGQTAwRTEzMzA0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OworCQkyNTQwM0NDNjE2NkE5NkZBMDBFMTMzMDQgLyogU2VuVGVzdGluZ0tpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NDNTE2NkE5NkZBMDBFMTMzMDQgLyogU2VuVGVzdGluZ0tpdC5mcmFtZXdvcmsgKi87IH07CisJCTI1NDAzQ0M5MTY2QTk2RkEwMEUxMzMwNCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzQ0I2MTY2QTk2RkEwMEUxMzMwNCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMjU0MDNDQ0MxNjZBOTZGQTAwRTEzMzA0IC8qIGxpYlpYaW5nT2JqQy1pT1MuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzQ0IzMTY2QTk2RkEwMEUxMzMwNCAvKiBsaWJaWGluZ09iakMtaU9TLmEgKi87IH07CisJCTI1NDAzQ0UzMTY2QTk4QzcwMEUxMzMwNCAvKiBaWGluZ09iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzQ0JCMTY2QTk2RkEwMEUxMzMwNCAvKiBaWGluZ09iakMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzQ0Y3MTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDRUUxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0NGODE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzQ0VGMTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGVjb2Rlci5tICovOyB9OworCQkyNTQwM0NGOTE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NGMTE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0NGQTE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NGMjE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yLm0gKi87IH07CisJCTI1NDAzQ0ZCMTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzQ0YzMTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzQ0ZDMTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzQ0Y0MTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDNDRkQxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzQ0Y1MTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0NGRTE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY1JlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDRjYxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDNENTAxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDAxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Q1MTE2NkE5QTA4MDBFMTMzMDQgLyogWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDIxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDNENTIxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDMxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNENTMxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDQxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwM0Q1NDE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0RvQ29Nb1Jlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDUxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDU1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwNjE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0RvQ29Nb1Jlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwM0Q1NjE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDcxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDU3MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwODE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwM0Q1ODE2NkE5QTA4MDBFMTMzMDQgLyogWlhCaXpjYXJkUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwOTE2NkE5QTA4MDBFMTMzMDQgLyogWlhCaXpjYXJkUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Q1OTE2NkE5QTA4MDBFMTMzMDQgLyogWlhCaXpjYXJkUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwQTE2NkE5QTA4MDBFMTMzMDQgLyogWlhCaXpjYXJkUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDAzRDVBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNENUIxNjZBOUEwODAwRTEzMzA0IC8qIFpYQm9va21hcmtEb0NvTW9SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDBDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDAzRDVDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwRDE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNENUQxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDBFMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0Lm0gKi87IH07CisJCTI1NDAzRDVFMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMEYxNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Q1RjE2NkE5QTA4MDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDEwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwM0Q2MDE2NkE5QTA4MDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDExMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1Jlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNENjExNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxMjE2NkE5QTA4MDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDNENjIxNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDEzMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Q2MzE2NkE5QTA4MDBFMTMzMDQgLyogWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMTQxNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDNENjQxNjZBOUEwODAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxNTE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDY1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMTYxNjZBOUEwODAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0Lm0gKi87IH07CisJCTI1NDAzRDY2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMTcxNjZBOUEwODAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Q2NzE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDE4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwM0Q2ODE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9QYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDE5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEdlb1BhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNENjkxNjZBOUEwODAwRTEzMzA0IC8qIFpYR2VvUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxQTE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9QYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDNENkExNjZBOUEwODAwRTEzMzA0IC8qIFpYR2VvUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9SZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDZCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEdlb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMUMxNjZBOUEwODAwRTEzMzA0IC8qIFpYR2VvUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDAzRDZDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDFEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDZEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDFFMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDNENkUxNjZBOUEwODAwRTEzMzA0IC8qIFpYSVNCTlJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMUYxNjZBOUEwODAwRTEzMzA0IC8qIFpYSVNCTlJlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNENkYxNjZBOUEwODAwRTEzMzA0IC8qIFpYSVNCTlJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMjAxNjZBOUEwODAwRTEzMzA0IC8qIFpYSVNCTlJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwM0Q3MDE2NkE5QTA4MDBFMTMzMDQgLyogWlhQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDIxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFBhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNENzExNjZBOUEwODAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyMjE2NkE5QTA4MDBFMTMzMDQgLyogWlhQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDNENzIxNjZBOUEwODAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMjMxNjZBOUEwODAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNENzMxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMjQxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNENzQxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMjUxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwM0Q3NTE2NkE5QTA4MDBFMTMzMDQgLyogWlhQcm9kdWN0UmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyNjE2NkE5QTA4MDBFMTMzMDQgLyogWlhQcm9kdWN0UmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Q3NjE2NkE5QTA4MDBFMTMzMDQgLyogWlhQcm9kdWN0UmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyNzE2NkE5QTA4MDBFMTMzMDQgLyogWlhQcm9kdWN0UmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDAzRDc3MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMjgxNjZBOUEwODAwRTEzMzA0IC8qIFpYUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Q3ODE2NkE5QTA4MDBFMTMzMDQgLyogWlhSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDI5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwM0Q3OTE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDJBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU01NU1Jlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNEN0ExNjZBOUEwODAwRTEzMzA0IC8qIFpYU01TTU1TUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDNEN0IxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01TUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyQzE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNQYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDdDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU1BhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMkQxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01TUGFyc2VkUmVzdWx0Lm0gKi87IH07CisJCTI1NDAzRDdEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDJFMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDdFMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDJGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDNEN0YxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01UUFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMzAxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01UUFJlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNEODAxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01UUFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMzExNjZBOUEwODAwRTEzMzA0IC8qIFpYU01UUFJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwM0Q4MTE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZWxQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDMyMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRlbFBhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNEODIxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGVsUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzMzE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZWxQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDNEODMxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGVsUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzNDE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZWxSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDg0MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRlbFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMzUxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGVsUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDAzRDg1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDM2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDg2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDM3MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDNEODcxNjZBOUEwODAwRTEzMzA0IC8qIFpYVVJJUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzODE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDg4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMzkxNjZBOUEwODAwRTEzMzA0IC8qIFpYVVJJUGFyc2VkUmVzdWx0Lm0gKi87IH07CisJCTI1NDAzRDg5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEM0ExNjZBOUEwODAwRTEzMzA0IC8qIFpYVVJJUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Q4QTE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUklSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDNCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwM0Q4QjE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUkxUT1Jlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEM0MxNjZBOUEwODAwRTEzMzA0IC8qIFpYVVJMVE9SZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDhDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSTFRPUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzRDE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUkxUT1Jlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwM0Q4RDE2NkE5QTA4MDBFMTMzMDQgLyogWlhWQ2FyZFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEM0UxNjZBOUEwODAwRTEzMzA0IC8qIFpYVkNhcmRSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDhFMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZDYXJkUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzRjE2NkE5QTA4MDBFMTMzMDQgLyogWlhWQ2FyZFJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwM0Q4RjE2NkE5QTA4MDBFMTMzMDQgLyogWlhWRXZlbnRSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDQwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZFdmVudFJlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNEOTAxNjZBOUEwODAwRTEzMzA0IC8qIFpYVkV2ZW50UmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0MTE2NkE5QTA4MDBFMTMzMDQgLyogWlhWRXZlbnRSZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDNEOTExNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENDIxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNEOTIxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENDMxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwM0Q5MzE2NkE5QTA4MDBFMTMzMDQgLyogWlhXaWZpUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0NDE2NkE5QTA4MDBFMTMzMDQgLyogWlhXaWZpUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Q5NDE2NkE5QTA4MDBFMTMzMDQgLyogWlhXaWZpUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0NTE2NkE5QTA4MDBFMTMzMDQgLyogWlhXaWZpUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDAzRDk1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDQ2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDk2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDQ3MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmUubSAqLzsgfTsKKwkJMjU0MDNEOTcxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FwdHVyZURlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0ODE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYXB0dXJlRGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDk4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmVWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0OTE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYXB0dXJlVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNEOTkxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FwdHVyZVZpZXcubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDRBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmVWaWV3Lm0gKi87IH07CisJCTI1NDAzRDlBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDRCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRDlCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDRDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UubSAqLzsgfTsKKwkJMjU0MDNEOUMxNjZBOUEwODAwRTEzMzA0IC8qIFpYSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDREMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Q5RDE2NkE5QTA4MDBFMTMzMDQgLyogWlhJbWFnZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENEUxNjZBOUEwODAwRTEzMzA0IC8qIFpYSW1hZ2UubSAqLzsgfTsKKwkJMjU0MDNEOUUxNjZBOUEwODAwRTEzMzA0IC8qIFpYVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENEYxNjZBOUEwODAwRTEzMzA0IC8qIFpYVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNEQ0ExNjZBOUMwRTAwRTEzMzA0IC8qIFpYTWF0aFV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBMTE2NkE5QzBFMDBFMTMzMDQgLyogWlhNYXRoVXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRENCMTY2QTlDMEUwMEUxMzMwNCAvKiBaWE1hdGhVdGlscy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQTIxNjZBOUMwRTAwRTEzMzA0IC8qIFpYTWF0aFV0aWxzLm0gKi87IH07CisJCTI1NDAzRENDMTY2QTlDMEUwMEUxMzMwNCAvKiBaWE1vbm9jaHJvbWVSZWN0YW5nbGVEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQTMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0RDRDE2NkE5QzBFMDBFMTMzMDQgLyogWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREE0MTY2QTlDMEUwMEUxMzMwNCAvKiBaWE1vbm9jaHJvbWVSZWN0YW5nbGVEZXRlY3Rvci5tICovOyB9OworCQkyNTQwM0RDRTE2NkE5QzBFMDBFMTMzMDQgLyogWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBNTE2NkE5QzBFMDBFMTMzMDQgLyogWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0RDRjE2NkE5QzBFMDBFMTMzMDQgLyogWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBNjE2NkE5QzBFMDBFMTMzMDQgLyogWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLm0gKi87IH07CisJCTI1NDAzREQwMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQTgxNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2VuZXJpY0dGLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0REMTE2NkE5QzBFMDBFMTMzMDQgLyogWlhHZW5lcmljR0YubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREE5MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRi5tICovOyB9OworCQkyNTQwM0REMjE2NkE5QzBFMDBFMTMzMDQgLyogWlhHZW5lcmljR0ZQb2x5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBQTE2NkE5QzBFMDBFMTMzMDQgLyogWlhHZW5lcmljR0ZQb2x5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0REMzE2NkE5QzBFMDBFMTMzMDQgLyogWlhHZW5lcmljR0ZQb2x5Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBQjE2NkE5QzBFMDBFMTMzMDQgLyogWlhHZW5lcmljR0ZQb2x5Lm0gKi87IH07CisJCTI1NDAzREQ0MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFJlZWRTb2xvbW9uRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQUMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25EZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0RENTE2NkE5QzBFMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkRlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREFEMTY2QTlDMEUwMEUxMzMwNCAvKiBaWFJlZWRTb2xvbW9uRGVjb2Rlci5tICovOyB9OworCQkyNTQwM0RENjE2NkE5QzBFMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREFFMTY2QTlDMEUwMEUxMzMwNCAvKiBaWFJlZWRTb2xvbW9uRW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNERDcxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25FbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBRjE2NkE5QzBFMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkVuY29kZXIubSAqLzsgfTsKKwkJMjU0MDNERDgxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREIwMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0REOTE2NkE5QzBFMDBFMTMzMDQgLyogWlhCaXRBcnJheS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjExNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0QXJyYXkubSAqLzsgfTsKKwkJMjU0MDNEREExNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0TWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RCMjE2NkE5QzBFMDBFMTMzMDQgLyogWlhCaXRNYXRyaXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRERCMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdE1hdHJpeC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0TWF0cml4Lm0gKi87IH07CisJCTI1NDAzRERDMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0U291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0RERDE2NkE5QzBFMDBFMTMzMDQgLyogWlhCaXRTb3VyY2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREI1MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZS5tICovOyB9OworCQkyNTQwM0RERTE2NkE5QzBFMDBFMTMzMDQgLyogWlhDaGFyYWN0ZXJTZXRFQ0kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREI2MTY2QTlDMEUwMEUxMzMwNCAvKiBaWENoYXJhY3RlclNldEVDSS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNEREYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQ2hhcmFjdGVyU2V0RUNJLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RCNzE2NkE5QzBFMDBFMTMzMDQgLyogWlhDaGFyYWN0ZXJTZXRFQ0kubSAqLzsgfTsKKwkJMjU0MDNERTAxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGVjb2RlclJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjgxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGVjb2RlclJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNERTExNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGVjb2RlclJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjkxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGVjb2RlclJlc3VsdC5tICovOyB9OworCQkyNTQwM0RFMjE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZWZhdWx0R3JpZFNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREJBMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERlZmF1bHRHcmlkU2FtcGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNERTMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGVmYXVsdEdyaWRTYW1wbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RCQjE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZWZhdWx0R3JpZFNhbXBsZXIubSAqLzsgfTsKKwkJMjU0MDNERTQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGV0ZWN0b3JSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREJDMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERldGVjdG9yUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0RFNTE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZXRlY3RvclJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQkQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGV0ZWN0b3JSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDNERTYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRUNJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RCRTE2NkE5QzBFMDBFMTMzMDQgLyogWlhFQ0kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzREU3MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEVDSS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQkYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRUNJLm0gKi87IH07CisJCTI1NDAzREU4MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQzAxNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0RFOTE2NkE5QzBFMDBFMTMzMDQgLyogWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREMxMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplci5tICovOyB9OworCQkyNTQwM0RFQTE2NkE5QzBFMDBFMTMzMDQgLyogWlhHcmlkU2FtcGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQzIxNjZBOUMwRTAwRTEzMzA0IC8qIFpYR3JpZFNhbXBsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzREVCMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdyaWRTYW1wbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDMzE2NkE5QzBFMDBFMTMzMDQgLyogWlhHcmlkU2FtcGxlci5tICovOyB9OworCQkyNTQwM0RFQzE2NkE5QzBFMDBFMTMzMDQgLyogWlhIeWJyaWRCaW5hcml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREM0MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEh5YnJpZEJpbmFyaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNERUQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYSHlicmlkQmluYXJpemVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDNTE2NkE5QzBFMDBFMTMzMDQgLyogWlhIeWJyaWRCaW5hcml6ZXIubSAqLzsgfTsKKwkJMjU0MDNERUUxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREM2MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0RFRjE2NkE5QzBFMDBFMTMzMDQgLyogWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQzcxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0ubSAqLzsgfTsKKwkJMjU0MDNERjAxNjZBOUMwRTAwRTEzMzA0IC8qIFpYU3RyaW5nVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREM4MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0RGMTE2NkE5QzBFMDBFMTMzMDQgLyogWlhTdHJpbmdVdGlscy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQzkxNjZBOUMwRTAwRTEzMzA0IC8qIFpYU3RyaW5nVXRpbHMubSAqLzsgfTsKKwkJMjU0MDNFMDMxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeEJpdE1hdHJpeFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNERjQxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeEJpdE1hdHJpeFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFMDQxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeEJpdE1hdHJpeFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNERjUxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeEJpdE1hdHJpeFBhcnNlci5tICovOyB9OworCQkyNTQwM0UwNTE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGNjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0UwNjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGNzE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLm0gKi87IH07CisJCTI1NDAzRTA3MTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGODE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFMDgxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREY5MTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gKi87IH07CisJCTI1NDAzRTA5MTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGQTE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFMEExNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREZCMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVyLm0gKi87IH07CisJCTI1NDAzRTBCMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhWZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGQzE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4VmVyc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFMEMxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeFZlcnNpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREZEMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhWZXJzaW9uLm0gKi87IH07CisJCTI1NDAzRTBEMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNERkYxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERldGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0UwRTE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGV0ZWN0b3IubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTAwMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZXRlY3Rvci5tICovOyB9OworCQkyNTQwM0UwRjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UwMTE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4UmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0UxMDE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UwMjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4UmVhZGVyLm0gKi87IH07CisJCTI1NDAzRTFCMTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UxMzE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZUJpdE1hdHJpeFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFMUMxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTE0MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLm0gKi87IH07CisJCTI1NDAzRTFEMTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMTUxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0UxRTE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTE2MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tICovOyB9OworCQkyNTQwM0UxRjE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTE3MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFMjAxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVEZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UxODE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZXIubSAqLzsgfTsKKwkJMjU0MDNFMjExNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTE5MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0UyMjE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZVJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMUExNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDNFMzExNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMjYxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFMzIxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMjcxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5tICovOyB9OworCQkyNTQwM0UzMzE2NkE5RDhCMDBFMTMzMDQgLyogWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTI4MTY2QTlEOEIwMEUxMzMwNCAvKiBaWE11bHRpRmluZGVyUGF0dGVybkZpbmRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFMzQxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UyOTE2NkE5RDhCMDBFMTMzMDQgLyogWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIubSAqLzsgfTsKKwkJMjU0MDNFMzUxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYUVJDb2RlTXVsdGlSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTJBMTY2QTlEOEIwMEUxMzMwNCAvKiBaWFFSQ29kZU11bHRpUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0UzNjE2NkE5RDhCMDBFMTMzMDQgLyogWlhRUkNvZGVNdWx0aVJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMkIxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYUVJDb2RlTXVsdGlSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDNFMzcxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMkMxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFMzgxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMkQxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5tICovOyB9OworCQkyNTQwM0UzOTE2NkE5RDhCMDBFMTMzMDQgLyogWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UyRTE2NkE5RDhCMDBFMTMzMDQgLyogWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0UzQTE2NkE5RDhCMDBFMTMzMDQgLyogWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UyRjE2NkE5RDhCMDBFMTMzMDQgLyogWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLm0gKi87IH07CisJCTI1NDAzRTNCMTY2QTlEOEIwMEUxMzMwNCAvKiBaWE11bHRpcGxlQmFyY29kZVJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMzAxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VBQzE2NkE5REY0MDBFMTMzMDQgLyogWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNDAxNjZBOURGMzAwRTEzMzA0IC8qIFpYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUFEMTY2QTlERjQwMEUxMzMwNCAvKiBaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0MTE2NkE5REYzMDBFMTMzMDQgLyogWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5tICovOyB9OworCQkyNTQwM0VBRTE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxMzEwM2RlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQyMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzMTAzZGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFQUYxNjZBOURGNDAwRTEzMzA0IC8qIFpYQUkwMTMxMDNkZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0MzE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzEwM2RlY29kZXIubSAqLzsgfTsKKwkJMjU0MDNFQjAxNjZBOURGNDAwRTEzMzA0IC8qIFpYQUkwMTMyMHhEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0NDE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzIweERlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUIxMTY2QTlERjQwMEUxMzMwNCAvKiBaWEFJMDEzMjB4RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNDUxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTMyMHhEZWNvZGVyLm0gKi87IH07CisJCTI1NDAzRUIyMTY2QTlERjQwMEUxMzMwNCAvKiBaWEFJMDEzOTJ4RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNDYxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTM5MnhEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VCMzE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxMzkyeERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQ3MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzOTJ4RGVjb2Rlci5tICovOyB9OworCQkyNTQwM0VCNDE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxMzkzeERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQ4MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzOTN4RGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFQjUxNjZBOURGNDAwRTEzMzA0IC8qIFpYQUkwMTM5M3hEZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0OTE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzkzeERlY29kZXIubSAqLzsgfTsKKwkJMjU0MDNFQjYxNjZBOURGNDAwRTEzMzA0IC8qIFpYQUkwMTN4MHgxeERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTRBMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzeDB4MXhEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VCNzE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxM3gweDF4RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNEIxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTN4MHgxeERlY29kZXIubSAqLzsgfTsKKwkJMjU0MDNFQjgxNjZBOURGNDAwRTEzMzA0IC8qIFpYQUkwMTN4MHhEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0QzE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxM3gweERlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUI5MTY2QTlERjQwMEUxMzMwNCAvKiBaWEFJMDEzeDB4RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNEQxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTN4MHhEZWNvZGVyLm0gKi87IH07CisJCTI1NDAzRUJBMTY2QTlERjQwMEUxMzMwNCAvKiBaWEFJMDFBbmRPdGhlckFJcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNEUxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMUFuZE90aGVyQUlzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VCQjE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxQW5kT3RoZXJBSXMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTRGMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDFBbmRPdGhlckFJcy5tICovOyB9OworCQkyNTQwM0VCQzE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxZGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNTAxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMWRlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUJEMTY2QTlERjQwMEUxMzMwNCAvKiBaWEFJMDFkZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1MTE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxZGVjb2Rlci5tICovOyB9OworCQkyNTQwM0VCRTE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxd2VpZ2h0RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNTIxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMXdlaWdodERlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUJGMTY2QTlERjQwMEUxMzMwNCAvKiBaWEFJMDF3ZWlnaHREZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1MzE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxd2VpZ2h0RGVjb2Rlci5tICovOyB9OworCQkyNTQwM0VDMDE2NkE5REY0MDBFMTMzMDQgLyogWlhBbnlBSURlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTU0MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFueUFJRGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFQzExNjZBOURGNDAwRTEzMzA0IC8qIFpYQW55QUlEZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1NTE2NkE5REYzMDBFMTMzMDQgLyogWlhBbnlBSURlY29kZXIubSAqLzsgfTsKKwkJMjU0MDNFQzIxNjZBOURGNDAwRTEzMzA0IC8qIFpYQmxvY2tQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTU2MTY2QTlERjMwMEUxMzMwNCAvKiBaWEJsb2NrUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VDMzE2NkE5REY0MDBFMTMzMDQgLyogWlhCbG9ja1BhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNTcxNjZBOURGMzAwRTEzMzA0IC8qIFpYQmxvY2tQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDNFQzQxNjZBOURGNDAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNTgxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFQzUxNjZBOURGNDAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNTkxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5tICovOyB9OworCQkyNTQwM0VDNjE2NkE5REY0MDBFMTMzMDQgLyogWlhEZWNvZGVkQ2hhci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNUExNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZENoYXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUM3MTY2QTlERjQwMEUxMzMwNCAvKiBaWERlY29kZWRDaGFyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1QjE2NkE5REYzMDBFMTMzMDQgLyogWlhEZWNvZGVkQ2hhci5tICovOyB9OworCQkyNTQwM0VDODE2NkE5REY0MDBFMTMzMDQgLyogWlhEZWNvZGVkSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTVDMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWRJbmZvcm1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFQzkxNjZBOURGNDAwRTEzMzA0IC8qIFpYRGVjb2RlZEluZm9ybWF0aW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1RDE2NkE5REYzMDBFMTMzMDQgLyogWlhEZWNvZGVkSW5mb3JtYXRpb24ubSAqLzsgfTsKKwkJMjU0MDNFQ0ExNjZBOURGNDAwRTEzMzA0IC8qIFpYRGVjb2RlZE51bWVyaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTVFMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWROdW1lcmljLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VDQjE2NkE5REY0MDBFMTMzMDQgLyogWlhEZWNvZGVkTnVtZXJpYy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNUYxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZE51bWVyaWMubSAqLzsgfTsKKwkJMjU0MDNFQ0MxNjZBOURGNDAwRTEzMzA0IC8qIFpYRGVjb2RlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNjAxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFQ0QxNjZBOURGNDAwRTEzMzA0IC8qIFpYRGVjb2RlZE9iamVjdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNjExNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZE9iamVjdC5tICovOyB9OworCQkyNTQwM0VDRTE2NkE5REY0MDBFMTMzMDQgLyogWlhGaWVsZFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNjIxNjZBOURGMzAwRTEzMzA0IC8qIFpYRmllbGRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUNGMTY2QTlERjQwMEUxMzMwNCAvKiBaWEZpZWxkUGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2MzE2NkE5REYzMDBFMTMzMDQgLyogWlhGaWVsZFBhcnNlci5tICovOyB9OworCQkyNTQwM0VEMDE2NkE5REY0MDBFMTMzMDQgLyogWlhHZW5lcmFsQXBwSWREZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2NDE2NkE5REYzMDBFMTMzMDQgLyogWlhHZW5lcmFsQXBwSWREZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VEMTE2NkE5REY0MDBFMTMzMDQgLyogWlhHZW5lcmFsQXBwSWREZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2NTE2NkE5REYzMDBFMTMzMDQgLyogWlhHZW5lcmFsQXBwSWREZWNvZGVyLm0gKi87IH07CisJCTI1NDAzRUQyMTY2QTlERjQwMEUxMzMwNCAvKiBaWEJpdEFycmF5QnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNjYxNjZBOURGMzAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VEMzE2NkE5REY0MDBFMTMzMDQgLyogWlhCaXRBcnJheUJ1aWxkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTY3MTY2QTlERjMwMEUxMzMwNCAvKiBaWEJpdEFycmF5QnVpbGRlci5tICovOyB9OworCQkyNTQwM0VENDE2NkE5REY0MDBFMTMzMDQgLyogWlhFeHBhbmRlZFBhaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTY4MTY2QTlERjMwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUGFpci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFRDUxNjZBOURGNDAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQYWlyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2OTE2NkE5REYzMDBFMTMzMDQgLyogWlhFeHBhbmRlZFBhaXIubSAqLzsgfTsKKwkJMjU0MDNFRDYxNjZBOURGNDAwRTEzMzA0IC8qIFpYUlNTRXhwYW5kZWRSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTZBMTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU0V4cGFuZGVkUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VENzE2NkE5REY0MDBFMTMzMDQgLyogWlhSU1NFeHBhbmRlZFJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNkIxNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTRXhwYW5kZWRSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDNFRDgxNjZBOURGNDAwRTEzMzA0IC8qIFpYQWJzdHJhY3RSU1NSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTZDMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFic3RyYWN0UlNTUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VEOTE2NkE5REY0MDBFMTMzMDQgLyogWlhBYnN0cmFjdFJTU1JlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNkQxNjZBOURGMzAwRTEzMzA0IC8qIFpYQWJzdHJhY3RSU1NSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDNFREExNjZBOURGNDAwRTEzMzA0IC8qIFpYRGF0YUNoYXJhY3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNkUxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGF0YUNoYXJhY3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFREIxNjZBOURGNDAwRTEzMzA0IC8qIFpYRGF0YUNoYXJhY3Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNkYxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGF0YUNoYXJhY3Rlci5tICovOyB9OworCQkyNTQwM0VEQzE2NkE5REY0MDBFMTMzMDQgLyogWlhQYWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U3MDE2NkE5REYzMDBFMTMzMDQgLyogWlhQYWlyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VERDE2NkE5REY0MDBFMTMzMDQgLyogWlhQYWlyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U3MTE2NkE5REYzMDBFMTMzMDQgLyogWlhQYWlyLm0gKi87IH07CisJCTI1NDAzRURFMTY2QTlERjQwMEUxMzMwNCAvKiBaWFJTUzE0UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U3MjE2NkE5REYzMDBFMTMzMDQgLyogWlhSU1MxNFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFREYxNjZBOURGNDAwRTEzMzA0IC8qIFpYUlNTMTRSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTczMTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTUzE0UmVhZGVyLm0gKi87IH07CisJCTI1NDAzRUUwMTY2QTlERjQwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTc0MTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUUxMTY2QTlERjQwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTc1MTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4ubSAqLzsgfTsKKwkJMjU0MDNFRTIxNjZBOURGNDAwRTEzMzA0IC8qIFpYUlNTVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTc2MTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU1V0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VFMzE2NkE5REY0MDBFMTMzMDQgLyogWlhSU1NVdGlscy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNzcxNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTVXRpbHMubSAqLzsgfTsKKwkJMjU0MDNFRTQxNjZBOURGNDAwRTEzMzA0IC8qIFpYQ29kYUJhclJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNzgxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kYUJhclJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFRTUxNjZBOURGNDAwRTEzMzA0IC8qIFpYQ29kYUJhclJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNzkxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kYUJhclJlYWRlci5tICovOyB9OworCQkyNTQwM0VFNjE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RhQmFyV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U3QTE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RhQmFyV3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VFNzE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RhQmFyV3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U3QjE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RhQmFyV3JpdGVyLm0gKi87IH07CisJCTI1NDAzRUU4MTY2QTlERjQwMEUxMzMwNCAvKiBaWENvZGUxMjhSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTdDMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUxMjhSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUU5MTY2QTlERjQwMEUxMzMwNCAvKiBaWENvZGUxMjhSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTdEMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUxMjhSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDNFRUExNjZBOURGNDAwRTEzMzA0IC8qIFpYQ29kZTEyOFdyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFN0UxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTEyOFdyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFRUIxNjZBOURGNDAwRTEzMzA0IC8qIFpYQ29kZTEyOFdyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFN0YxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTEyOFdyaXRlci5tICovOyB9OworCQkyNTQwM0VFQzE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTgwMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUzOVJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFRUQxNjZBOURGNDAwRTEzMzA0IC8qIFpYQ29kZTM5UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4MTE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDNFRUUxNjZBOURGNDAwRTEzMzA0IC8qIFpYQ29kZTM5V3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4MjE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUVGMTY2QTlERjQwMEUxMzMwNCAvKiBaWENvZGUzOVdyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFODMxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTM5V3JpdGVyLm0gKi87IH07CisJCTI1NDAzRUYwMTY2QTlERjQwMEUxMzMwNCAvKiBaWENvZGU5M1JlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFODQxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTkzUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VGMTE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RlOTNSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTg1MTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGU5M1JlYWRlci5tICovOyB9OworCQkyNTQwM0VGMjE2NkE5REY0MDBFMTMzMDQgLyogWlhFQU4xM1JlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFODYxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOMTNSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUYzMTY2QTlERjQwMEUxMzMwNCAvKiBaWEVBTjEzUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4NzE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU4xM1JlYWRlci5tICovOyB9OworCQkyNTQwM0VGNDE2NkE5REY0MDBFMTMzMDQgLyogWlhFQU4xM1dyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFODgxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOMTNXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUY1MTY2QTlERjQwMEUxMzMwNCAvKiBaWEVBTjEzV3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4OTE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU4xM1dyaXRlci5tICovOyB9OworCQkyNTQwM0VGNjE2NkE5REY0MDBFMTMzMDQgLyogWlhFQU44UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4QTE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU44UmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0VGNzE2NkE5REY0MDBFMTMzMDQgLyogWlhFQU44UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4QjE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU44UmVhZGVyLm0gKi87IH07CisJCTI1NDAzRUY4MTY2QTlERjQwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRThDMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUY5MTY2QTlERjQwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRThEMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDNFRkExNjZBOURGNDAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOEUxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFRkIxNjZBOURGNDAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOEYxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5tICovOyB9OworCQkyNTQwM0VGQzE2NkE5REY0MDBFMTMzMDQgLyogWlhJVEZSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTkwMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURlJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNFRkQxNjZBOURGNDAwRTEzMzA0IC8qIFpYSVRGUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5MTE2NkE5REYzMDBFMTMzMDQgLyogWlhJVEZSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDNFRkUxNjZBOURGNDAwRTEzMzA0IC8qIFpYSVRGV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5MjE2NkE5REYzMDBFMTMzMDQgLyogWlhJVEZXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRUZGMTY2QTlERjQwMEUxMzMwNCAvKiBaWElURldyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOTMxNjZBOURGMzAwRTEzMzA0IC8qIFpYSVRGV3JpdGVyLm0gKi87IH07CisJCTI1NDAzRjAwMTY2QTlERjQwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0T25lRFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOTQxNjZBOURGMzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRPbmVEUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0YwMTE2NkE5REY0MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTk1MTY2QTlERjMwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0T25lRFJlYWRlci5tICovOyB9OworCQkyNTQwM0YwMjE2NkE5REY0MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOTYxNjZBOURGMzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRVUENFQU5SZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjAzMTY2QTlERjQwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5NzE2NkE5REYzMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlci5tICovOyB9OworCQkyNTQwM0YwNDE2NkE5REY0MDBFMTMzMDQgLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTk4MTY2QTlERjMwMEUxMzMwNCAvKiBaWE9uZURpbWVuc2lvbmFsQ29kZVdyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGMDUxNjZBOURGNDAwRTEzMzA0IC8qIFpYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5OTE2NkE5REYzMDBFMTMzMDQgLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDNGMDYxNjZBOURGNDAwRTEzMzA0IC8qIFpYT25lRFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOUExNjZBOURGMzAwRTEzMzA0IC8qIFpYT25lRFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGMDcxNjZBOURGNDAwRTEzMzA0IC8qIFpYT25lRFJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOUIxNjZBOURGMzAwRTEzMzA0IC8qIFpYT25lRFJlYWRlci5tICovOyB9OworCQkyNTQwM0YwODE2NkE5REY0MDBFMTMzMDQgLyogWlhVUENBUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5QzE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENBUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0YwOTE2NkE5REY0MDBFMTMzMDQgLyogWlhVUENBUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5RDE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENBUmVhZGVyLm0gKi87IH07CisJCTI1NDAzRjBBMTY2QTlERjQwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTlFMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjBCMTY2QTlERjQwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTlGMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDNGMEMxNjZBOURGNDAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uMlN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUEwMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0YwRDE2NkE5REY0MDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFQTExNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uMlN1cHBvcnQubSAqLzsgfTsKKwkJMjU0MDNGMEUxNjZBOURGNDAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUEyMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjVTdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0YwRjE2NkE5REY0MDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFQTMxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQubSAqLzsgfTsKKwkJMjU0MDNGMTAxNjZBOURGNDAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFQTQxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGMTExNjZBOURGNDAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFQTUxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5tICovOyB9OworCQkyNTQwM0YxMjE2NkE5REY0MDBFMTMzMDQgLyogWlhVUENFQU5SZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUE2MTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTlJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGMTMxNjZBOURGNDAwRTEzMzA0IC8qIFpYVVBDRUFOUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBNzE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5SZWFkZXIubSAqLzsgfTsKKwkJMjU0MDNGMTQxNjZBOURGNDAwRTEzMzA0IC8qIFpYVVBDRUFOV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBODE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5Xcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjE1MTY2QTlERjQwMEUxMzMwNCAvKiBaWFVQQ0VBTldyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFQTkxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFOV3JpdGVyLm0gKi87IH07CisJCTI1NDAzRjE2MTY2QTlERjQwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUFBMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjE3MTY2QTlERjQwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUFCMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDNGM0MxNjZBOUVCNTAwRTEzMzA0IC8qIFpYTW9kdWx1c0dGLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YxQjE2NkE5RUI1MDBFMTMzMDQgLyogWlhNb2R1bHVzR0YuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjNEMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNHRi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMUMxNjZBOUVCNTAwRTEzMzA0IC8qIFpYTW9kdWx1c0dGLm0gKi87IH07CisJCTI1NDAzRjNFMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNQb2x5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YxRDE2NkE5RUI1MDBFMTMzMDQgLyogWlhNb2R1bHVzUG9seS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGM0YxNjZBOUVCNTAwRTEzMzA0IC8qIFpYTW9kdWx1c1BvbHkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjFFMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNQb2x5Lm0gKi87IH07CisJCTI1NDAzRjQwMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YxRjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGNDExNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RUNFcnJvckNvcnJlY3Rpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjIwMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLm0gKi87IH07CisJCTI1NDAzRjQ0MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjIzMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjQ1MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjI0MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIubSAqLzsgfTsKKwkJMjU0MDNGNDgxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjI4MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0RldGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Y0OTE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMjkxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RGV0ZWN0b3IubSAqLzsgfTsKKwkJMjU0MDNGNEExNjZBOUVCNTAwRTEzMzA0IC8qIFpYQmFyY29kZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMkIxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQmFyY29kZU1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGNEIxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQmFyY29kZU1hdHJpeC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMkMxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQmFyY29kZU1hdHJpeC5tICovOyB9OworCQkyNTQwM0Y0QzE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlUm93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YyRDE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlUm93LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Y0RDE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlUm93Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YyRTE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlUm93Lm0gKi87IH07CisJCTI1NDAzRjRFMTY2QTlFQjUwMEUxMzMwNCAvKiBaWENvbXBhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjJGMTY2QTlFQjUwMEUxMzMwNCAvKiBaWENvbXBhY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjRGMTY2QTlFQjUwMEUxMzMwNCAvKiBaWERpbWVuc2lvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjMwMTY2QTlFQjUwMEUxMzMwNCAvKiBaWERpbWVuc2lvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjUwMTY2QTlFQjUwMEUxMzMwNCAvKiBaWERpbWVuc2lvbnMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjMxMTY2QTlFQjUwMEUxMzMwNCAvKiBaWERpbWVuc2lvbnMubSAqLzsgfTsKKwkJMjU0MDNGNTExNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YzMjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjUyMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxNy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMzMxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3Lm0gKi87IH07CisJCTI1NDAzRjUzMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMzQxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RXJyb3JDb3JyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Y1NDE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFcnJvckNvcnJlY3Rpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjM1MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5tICovOyB9OworCQkyNTQwM0Y1NTE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YzNjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Y1NjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YzNzE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLm0gKi87IH07CisJCTI1NDAzRjU5MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN1JlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGM0ExNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3UmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Y1QTE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjNCMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN1JlYWRlci5tICovOyB9OworCQkyNTQwM0Y4RDE2NkE5RjJEMDBFMTMzMDQgLyogWlhEYXRhTWFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNUQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRGF0YU1hc2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjhFMTY2QTlGMkQwMEUxMzMwNCAvKiBaWERhdGFNYXNrLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y1RTE2NkE5RjJEMDBFMTMzMDQgLyogWlhEYXRhTWFzay5tICovOyB9OworCQkyNTQwM0Y4RjE2NkE5RjJEMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNUYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjkwMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEVycm9yQ29ycmVjdGlvbkxldmVsLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2MDE2NkE5RjJEMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5tICovOyB9OworCQkyNTQwM0Y5MTE2NkE5RjJEMDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNjExNjZBOUYyRDAwRTEzMzA0IC8qIFpYRm9ybWF0SW5mb3JtYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjkyMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZvcm1hdEluZm9ybWF0aW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2MjE2NkE5RjJEMDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvbi5tICovOyB9OworCQkyNTQwM0Y5MzE2NkE5RjJEMDBFMTMzMDQgLyogWlhNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2MzE2NkE5RjJEMDBFMTMzMDQgLyogWlhNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Y5NDE2NkE5RjJEMDBFMTMzMDQgLyogWlhNb2RlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2NDE2NkE5RjJEMDBFMTMzMDQgLyogWlhNb2RlLm0gKi87IH07CisJCTI1NDAzRjk1MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNjUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Y5NjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVCaXRNYXRyaXhQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjY2MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5tICovOyB9OworCQkyNTQwM0Y5NzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEYXRhQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjY3MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZURhdGFCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGOTgxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGF0YUJsb2NrLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2ODE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEYXRhQmxvY2subSAqLzsgfTsKKwkJMjU0MDNGOTkxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNjkxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGOUExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNkExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tICovOyB9OworCQkyNTQwM0Y5QjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2QjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0Y5QzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2QzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLm0gKi87IH07CisJCTI1NDAzRjlEMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjZEMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRjlFMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjZFMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24ubSAqLzsgfTsKKwkJMjU0MDNGOUYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNzAxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGQTAxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNzExNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybi5tICovOyB9OworCQkyNTQwM0ZBMTE2NkE5RjJEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3MjE2NkE5RjJEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0ZBMjE2NkE5RjJEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3MzE2NkE5RjJEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLm0gKi87IH07CisJCTI1NDAzRkEzMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5GaW5kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjc0MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5GaW5kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRkE0MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5GaW5kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjc1MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5GaW5kZXIubSAqLzsgfTsKKwkJMjU0MDNGQTUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRmluZGVyUGF0dGVybkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjc2MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0ZBNjE2NkE5RjJEMDBFMTMzMDQgLyogWlhGaW5kZXJQYXR0ZXJuSW5mby5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNzcxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRmluZGVyUGF0dGVybkluZm8ubSAqLzsgfTsKKwkJMjU0MDNGQTcxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjc4MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZURldGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0ZBODE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNzkxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGV0ZWN0b3IubSAqLzsgfTsKKwkJMjU0MDNGQTkxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRmluZGVyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGN0ExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRmluZGVyUGF0dGVybi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGQUExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRmluZGVyUGF0dGVybi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGN0IxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRmluZGVyUGF0dGVybi5tICovOyB9OworCQkyNTQwM0ZBQjE2NkE5RjJEMDBFMTMzMDQgLyogWlhCbG9ja1BhaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjdEMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEJsb2NrUGFpci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGQUMxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQmxvY2tQYWlyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3RTE2NkE5RjJEMDBFMTMzMDQgLyogWlhCbG9ja1BhaXIubSAqLzsgfTsKKwkJMjU0MDNGQUQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQnl0ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGN0YxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQnl0ZU1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGQUUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQnl0ZU1hdHJpeC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODAxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQnl0ZU1hdHJpeC5tICovOyB9OworCQkyNTQwM0ZBRjE2NkE5RjJEMDBFMTMzMDQgLyogWlhFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y4MTE2NkE5RjJEMDBFMTMzMDQgLyogWlhFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0ZCMDE2NkE5RjJEMDBFMTMzMDQgLyogWlhFbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y4MjE2NkE5RjJEMDBFMTMzMDQgLyogWlhFbmNvZGVyLm0gKi87IH07CisJCTI1NDAzRkIxMTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1hc2tVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y4MzE2NkE5RjJEMDBFMTMzMDQgLyogWlhNYXNrVXRpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGQjIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWFza1V0aWwubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjg0MTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1hc2tVdGlsLm0gKi87IH07CisJCTI1NDAzRkIzMTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1hdHJpeFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjg1MTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1hdHJpeFV0aWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRkI0MTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1hdHJpeFV0aWwubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjg2MTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1hdHJpeFV0aWwubSAqLzsgfTsKKwkJMjU0MDNGQjUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y4NzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRkI2MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODgxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlLm0gKi87IH07CisJCTI1NDAzRkI3MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODkxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0ZCODE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjhBMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVJlYWRlci5tICovOyB9OworCQkyNTQwM0ZCOTE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjhCMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVdyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGQkExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlV3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y4QzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDNGQzYxNjZBOUZGQzAwRTEzMzA0IC8qIFpYQmFyY29kZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQkIxNjZBOUZGQzAwRTEzMzA0IC8qIFpYQmFyY29kZUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGQzcxNjZBOUZGQzAwRTEzMzA0IC8qIFpYQmluYXJpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZCQzE2NkE5RkZDMDBFMTMzMDQgLyogWlhCaW5hcml6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRkM4MTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJpbmFyaXplci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQkQxNjZBOUZGQzAwRTEzMzA0IC8qIFpYQmluYXJpemVyLm0gKi87IH07CisJCTI1NDAzRkM5MTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJpbmFyeUJpdG1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQkUxNjZBOUZGQzAwRTEzMzA0IC8qIFpYQmluYXJ5Qml0bWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0ZDQTE2NkE5RkZDMDBFMTMzMDQgLyogWlhCaW5hcnlCaXRtYXAubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkJGMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJpbmFyeUJpdG1hcC5tICovOyB9OworCQkyNTQwM0ZDQjE2NkE5RkZDMDBFMTMzMDQgLyogWlhEZWNvZGVIaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQzAxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRGVjb2RlSGludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRkNDMTY2QTlGRkMwMEUxMzMwNCAvKiBaWERlY29kZUhpbnRzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZDMTE2NkE5RkZDMDBFMTMzMDQgLyogWlhEZWNvZGVIaW50cy5tICovOyB9OworCQkyNTQwM0ZDRDE2NkE5RkZDMDBFMTMzMDQgLyogWlhFbmNvZGVIaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQzIxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRW5jb2RlSGludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRkNFMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEVuY29kZUhpbnRzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZDMzE2NkE5RkZDMDBFMTMzMDQgLyogWlhFbmNvZGVIaW50cy5tICovOyB9OworCQkyNTQwM0ZDRjE2NkE5RkZDMDBFMTMzMDQgLyogWlhFcnJvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkM0MTY2QTlGRkMwMEUxMzMwNCAvKiBaWEVycm9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGRDAxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRXJyb3JzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZDNTE2NkE5RkZDMDBFMTMzMDQgLyogWlhFcnJvcnMubSAqLzsgfTsKKwkJMjU0MDNGREYxNjZBQTAwODAwRTEzMzA0IC8qIFpYTHVtaW5hbmNlU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZEMTE2NkFBMDA3MDBFMTMzMDQgLyogWlhMdW1pbmFuY2VTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRkUwMTY2QUEwMDgwMEUxMzMwNCAvKiBaWEx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRDIxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTHVtaW5hbmNlU291cmNlLm0gKi87IH07CisJCTI1NDAzRkUxMTY2QUEwMDgwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZEMzE2NkFBMDA3MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGRTIxNjZBQTAwODAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkQ0MTY2QUEwMDcwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0UmVhZGVyLm0gKi87IH07CisJCTI1NDAzRkUzMTY2QUEwMDgwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0V3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZENTE2NkFBMDA3MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFdyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGRTQxNjZBQTAwODAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkQ2MTY2QUEwMDcwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0V3JpdGVyLm0gKi87IH07CisJCTI1NDAzRkU1MTY2QUEwMDgwMEUxMzMwNCAvKiBaWFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRDcxNjZBQTAwNzAwRTEzMzA0IC8qIFpYUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwM0ZFNjE2NkFBMDA4MDBFMTMzMDQgLyogWlhSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkQ4MTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGRTcxNjZBQTAwODAwRTEzMzA0IC8qIFpYUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZEOTE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDNGRTgxNjZBQTAwODAwRTEzMzA0IC8qIFpYUmVzdWx0TWV0YWRhdGFUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZEQTE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHRNZXRhZGF0YVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRkU5MTY2QUEwMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZEQjE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHRQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDNGRUExNjZBQTAwODAwRTEzMzA0IC8qIFpYUmVzdWx0UG9pbnQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkRDMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50Lm0gKi87IH07CisJCTI1NDAzRkVCMTY2QUEwMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkREMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50Q2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDAzRkVDMTY2QUEwMDgwMEUxMzMwNCAvKiBaWFdyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGREUxNjZBQTAwNzAwRTEzMzA0IC8qIFpYV3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDBEOTE2NkFBMEYxMDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZGNTE2NkFBMEYxMDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MERBMTY2QUEwRjEwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkY3MTY2QUEwRjEwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQwREIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkY5MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MERDMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZGQjE2NkFBMEYxMDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDBERDE2NkFBMEYxMDBFMTMzMDQgLyogWlhHZW9QYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRkQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYR2VvUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQwREUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYSVNCTlBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZGRjE2NkFBMEYxMDBFMTMzMDQgLyogWlhJU0JOUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQwREYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUGFyc2VkUmVhZGVyUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDAxMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFBhcnNlZFJlYWRlclJlc3VsdFRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MEUwMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMDMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MEUxMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFNNU01NU1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAwNTE2NkFBMEYxMDBFMTMzMDQgLyogWlhTTVNNTVNQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDBFMjE2NkFBMEYxMDBFMTMzMDQgLyogWlhUZWxQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMDcxNjZBQTBGMTAwRTEzMzA0IC8qIFpYVGVsUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQwRTMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYVVJJUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDA5MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFVSSVBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MEU0MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFdpZmlQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMEIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MEVDMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpdEFycmF5VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDFEMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpdEFycmF5VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQwRUQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0TWF0cml4VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDFGMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpdE1hdHJpeFRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MEVFMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZUJ1aWxkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDIxMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZUJ1aWxkZXIubSAqLzsgfTsKKwkJMjU0MDQwRUYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0U291cmNlVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDIzMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZVRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MEYwMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDI1MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQwRjExNjZBQTBGMTAwRTEzMzA0IC8qIFpYU3RyaW5nVXRpbHNUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMjcxNjZBQTBGMTAwRTEzMzA0IC8qIFpYU3RyaW5nVXRpbHNUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDBGNDE2NkFBMEYxMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAyRjE2NkFBMEYxMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MTA5MTY2QUEwRjEwMEUxMzMwNCAvKiBBYnN0cmFjdERlY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA1RTE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3REZWNvZGVyVGVzdC5tICovOyB9OworCQkyNTQwNDEwQTE2NkFBMEYxMDBFMTMzMDQgLyogQUkwMV8zMTAzX0RlY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA2MDE2NkFBMEYxMDBFMTMzMDQgLyogQUkwMV8zMTAzX0RlY29kZXJUZXN0Lm0gKi87IH07CisJCTI1NDA0MTBCMTY2QUEwRjEwMEUxMzMwNCAvKiBBSTAxXzMyMDJfMzIwM19EZWNvZGVyVGVzdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNjIxNjZBQTBGMTAwRTEzMzA0IC8qIEFJMDFfMzIwMl8zMjAzX0RlY29kZXJUZXN0Lm0gKi87IH07CisJCTI1NDA0MTBDMTY2QUEwRjEwMEUxMzMwNCAvKiBBSTAxXzNYMFhfMVhfRGVjb2RlclRlc3QubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDY0MTY2QUEwRjEwMEUxMzMwNCAvKiBBSTAxXzNYMFhfMVhfRGVjb2RlclRlc3QubSAqLzsgfTsKKwkJMjU0MDQxMEQxNjZBQTBGMTAwRTEzMzA0IC8qIEFueUFJRGVjb2RlclRlc3QubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDY2MTY2QUEwRjEwMEUxMzMwNCAvKiBBbnlBSURlY29kZXJUZXN0Lm0gKi87IH07CisJCTI1NDA0MTBFMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEZpZWxkUGFyc2VyVGVzdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNjgxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRmllbGRQYXJzZXJUZXN0Lm0gKi87IH07CisJCTI1NDA0MTEyMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMmJpbmFyeVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA3MDE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJiaW5hcnlUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDExMzE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJyZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNzIxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2UycmVzdWx0VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQxMTQxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2Uyc3RyaW5nVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDc0MTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMnN0cmluZ1Rlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MTE1MTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEludGVybmFsVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDc2MTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEludGVybmFsVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQxMTYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQmluYXJ5VXRpbC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNzgxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQmluYXJ5VXRpbC5tICovOyB9OworCQkyNTQwNDExNzE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaW5hcnlVdGlsVGVzdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwN0ExNjZBQTBGMTAwRTEzMzA0IC8qIFpYQmluYXJ5VXRpbFRlc3QubSAqLzsgfTsKKwkJMjU0MDQxMTgxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyVGVzdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwN0MxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyVGVzdC5tICovOyB9OworCQkyNTQwNDExOTE2NkFBMEYxMDBFMTMzMDQgLyogWlhFeHBhbmRlZEluZm9ybWF0aW9uRGVjb2RlclRlc3QubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDdFMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEV4cGFuZGVkSW5mb3JtYXRpb25EZWNvZGVyVGVzdC5tICovOyB9OworCQkyNTQwNDEyNjE2NkFBMEYxMDBFMTMzMDQgLyogWlhDb2RhQmFyV3JpdGVyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDk4MTY2QUEwRjEwMEUxMzMwNCAvKiBaWENvZGFCYXJXcml0ZXJUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDEyODE2NkFBMEYxMDBFMTMzMDQgLyogWlhFQU4xM1dyaXRlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA5QzE2NkFBMEYxMDBFMTMzMDQgLyogWlhFQU4xM1dyaXRlclRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MTI5MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwOUUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRUFOOFdyaXRlclRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MTJBMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnRUZXN0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDBBMDE2NkFBMEYxMDBFMTMzMDQgLyogWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0VGVzdC5tICovOyB9OworCQkyNTQwNDEyQzE2NkFBMEYxMDBFMTMzMDQgLyogWlhVUENBV3JpdGVyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEE0MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXJUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDEyRDE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQTkxNjZBQTBGMTAwRTEzMzA0IC8qIEFic3RyYWN0RXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQxMkUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUERGNDE3RUNFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQUIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUERGNDE3RUNFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDEzMTE2NkFBMEYxMDBFMTMzMDQgLyogWlhEYXRhTWFza1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDBCMzE2NkFBMEYxMDBFMTMzMDQgLyogWlhEYXRhTWFza1Rlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MTMyMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVycm9yQ29ycmVjdGlvbkxldmVsVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEI1MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVycm9yQ29ycmVjdGlvbkxldmVsVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQxMzMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRm9ybWF0SW5mb3JtYXRpb25UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQjcxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRm9ybWF0SW5mb3JtYXRpb25UZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDEzNDE2NkFBMEYxMDBFMTMzMDQgLyogWlhNb2RlVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEI5MTY2QUEwRjEwMEUxMzMwNCAvKiBaWE1vZGVUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDEzNTE2NkFBMEYxMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEJCMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXJUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDEzNjE2NkFBMEYxMDBFMTMzMDQgLyogWlhRUkNvZGVWZXJzaW9uVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEJEMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb25UZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDEzNzE2NkFBMEYxMDBFMTMzMDQgLyogQml0VmVjdG9yVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEMwMTY2QUEwRjEwMEUxMzMwNCAvKiBCaXRWZWN0b3JUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDEzODE2NkFBMEYxMDBFMTMzMDQgLyogWlhFbmNvZGVyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEMyMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVuY29kZXJUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDEzOTE2NkFBMEYxMDBFMTMzMDQgLyogWlhNYXNrVXRpbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDBDNDE2NkFBMEYxMDBFMTMzMDQgLyogWlhNYXNrVXRpbFRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MTNBMTY2QUEwRjEwMEUxMzMwNCAvKiBaWE1hdHJpeFV0aWxUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQzYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbFRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MTNCMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFFSQ29kZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDBDODE2NkFBMEYxMDBFMTMzMDQgLyogWlhRUkNvZGVUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDE0MjE2NkFBMEYxMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwRDYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlV3JpdGVyVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQxNDYxNjZBQTE2MjAwRTEzMzA0IC8qIFVJS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MTQ1MTY2QUExNjIwMEUxMzMwNCAvKiBVSUtpdC5mcmFtZXdvcmsgKi87IH07CisJCTI1NDA0MTRGMTY2QUEzMzcwMEUxMzMwNCAvKiBDb3JlR3JhcGhpY3MuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQxNEUxNjZBQTMzNzAwRTEzMzA0IC8qIENvcmVHcmFwaGljcy5mcmFtZXdvcmsgKi87IH07CisJCTI1NDA0MTUwMTY2QUEzM0UwMEUxMzMwNCAvKiBDb3JlR3JhcGhpY3MuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQxNEUxNjZBQTMzNzAwRTEzMzA0IC8qIENvcmVHcmFwaGljcy5mcmFtZXdvcmsgKi87IH07CisJCTI1NDA0MTVDMTY2QUE4NjkwMEUxMzMwNCAvKiBJbWFnZUlPLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MTVCMTY2QUE4NjkwMEUxMzMwNCAvKiBJbWFnZUlPLmZyYW1ld29yayAqLzsgfTsKKwkJMjU0MDQxNUQxNjZBQTg3MDAwRTEzMzA0IC8qIEltYWdlSU8uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQxNUIxNjZBQTg2OTAwRTEzMzA0IC8qIEltYWdlSU8uZnJhbWV3b3JrICovOyB9OworCQkyNTQwNDE1RjE2NkFBQTJGMDBFMTMzMDQgLyogQ29yZVZpZGVvLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MTVFMTY2QUFBMkYwMEUxMzMwNCAvKiBDb3JlVmlkZW8uZnJhbWV3b3JrICovOyB9OworCQkyNTQwNDE2MDE2NkFBQUFCMDBFMTMzMDQgLyogVUlLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQxNDUxNjZBQTE2MjAwRTEzMzA0IC8qIFVJS2l0LmZyYW1ld29yayAqLzsgfTsKKwkJMjU0MDQxNjExNjZBQUFEOTAwRTEzMzA0IC8qIENvcmVWaWRlby5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDE1RTE2NkFBQTJGMDBFMTMzMDQgLyogQ29yZVZpZGVvLmZyYW1ld29yayAqLzsgfTsKKwkJMjU0MDQxNzkxNjZBQURBQzAwRTEzMzA0IC8qIFNlblRlc3RpbmdLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDQzUxNjZBOTZGQTAwRTEzMzA0IC8qIFNlblRlc3RpbmdLaXQuZnJhbWV3b3JrICovOyB9OworCQkyNTQwNDE3RDE2NkFBREFDMDBFMTMzMDQgLyogbGliWlhpbmdPYmpDLW9zeC5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQxNjYxNjZBQURBQzAwRTEzMzA0IC8qIGxpYlpYaW5nT2JqQy1vc3guYSAqLzsgfTsKKwkJMjU0MDQxOEYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQXp0ZWNEZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NFRjE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RlY29kZXIubSAqLzsgfTsKKwkJMjU0MDQxOTAxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDRjIxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDE5MTE2NkFBRTYwMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NGNDE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yUmVzdWx0Lm0gKi87IH07CisJCTI1NDA0MTkyMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEF6dGVjUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NGNjE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY1JlYWRlci5tICovOyB9OworCQkyNTQwNDE5MzE2NkFBRTYwMDBFMTMzMDQgLyogWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDIxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQxOTQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDQxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDE5NTE2NkFBRTYwMDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0RvQ29Nb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDYxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQxOTYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDA4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0Lm0gKi87IH07CisJCTI1NDA0MTk3MTY2QUFFNjAwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDBBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQxOTgxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQm9va21hcmtEb0NvTW9SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDBDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDA0MTk5MTY2QUFFNjAwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwRTE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDE5QTE2NkFBRTYwMDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDEwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDE5QjE2NkFBRTYwMDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDEyMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1Jlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDE5QzE2NkFBRTYwMDBFMTMzMDQgLyogWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMTQxNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQxOUQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxNjE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQxOUUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxODE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RSZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQxOUYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYR2VvUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxQTE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9QYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQxQTAxNjZBQUU2MDAwRTEzMzA0IC8qIFpYR2VvUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxQzE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQxQTExNjZBQUU2MDAwRTEzMzA0IC8qIFpYSVNCTlBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMUUxNjZBOUEwODAwRTEzMzA0IC8qIFpYSVNCTlBhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDFBMjE2NkFBRTYwMDBFMTMzMDQgLyogWlhJU0JOUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyMDE2NkE5QTA4MDBFMTMzMDQgLyogWlhJU0JOUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDA0MUEzMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMjIxNjZBOUEwODAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0Lm0gKi87IH07CisJCTI1NDA0MUE0MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFByb2R1Y3RQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDI1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFByb2R1Y3RQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQxQTUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUHJvZHVjdFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMjcxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDFBNjE2NkFBRTYwMDBFMTMzMDQgLyogWlhSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDI5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDFBNzE2NkFBRTYwMDBFMTMzMDQgLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDJCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU01NU1Jlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDFBODE2NkFBRTYwMDBFMTMzMDQgLyogWlhTTVNQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDJEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU1BhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDFBOTE2NkFBRTYwMDBFMTMzMDQgLyogWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyRjE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDA0MUFBMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFNNVFBSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDMxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNVFBSZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQxQUIxNjZBQUU2MDAwRTEzMzA0IC8qIFpYVGVsUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzMzE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZWxQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQxQUMxNjZBQUU2MDAwRTEzMzA0IC8qIFpYVGVsUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzNTE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZWxSZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQxQUQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYVGV4dFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMzcxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGV4dFBhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDFBRTE2NkFBRTYwMDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDM5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVBhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDFBRjE2NkFBRTYwMDBFMTMzMDQgLyogWlhVUklSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDNCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDFCMDE2NkFBRTYwMDBFMTMzMDQgLyogWlhVUkxUT1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEM0QxNjZBOUEwODAwRTEzMzA0IC8qIFpYVVJMVE9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQxQjExNjZBQUU2MDAwRTEzMzA0IC8qIFpYVkNhcmRSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDNGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZDYXJkUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDA0MUIyMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFZFdmVudFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENDExNjZBOUEwODAwRTEzMzA0IC8qIFpYVkV2ZW50UmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDA0MUIzMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFdpZmlQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDQzMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFdpZmlQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQxQjQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYV2lmaVJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENDUxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDFCNTE2NkFBRTYwMDBFMTMzMDQgLyogWlhDYXB0dXJlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0NzE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYXB0dXJlLm0gKi87IH07CisJCTI1NDA0MUI2MTY2QUFFNjAwMEUxMzMwNCAvKiBaWENhcHR1cmVWaWV3Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0QTE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYXB0dXJlVmlldy5tICovOyB9OworCQkyNTQwNDFCNzE2NkFBRTYwMDBFMTMzMDQgLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0QzE2NkE5QTA4MDBFMTMzMDQgLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLm0gKi87IH07CisJCTI1NDA0MUI4MTY2QUFFNjAwMEUxMzMwNCAvKiBaWEltYWdlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0RTE2NkE5QTA4MDBFMTMzMDQgLyogWlhJbWFnZS5tICovOyB9OworCQkyNTQwNDFCOTE2NkFBRTYwMDBFMTMzMDQgLyogWlhNYXRoVXRpbHMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREEyMTY2QTlDMEUwMEUxMzMwNCAvKiBaWE1hdGhVdGlscy5tICovOyB9OworCQkyNTQwNDFCQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREE0MTY2QTlDMEUwMEUxMzMwNCAvKiBaWE1vbm9jaHJvbWVSZWN0YW5nbGVEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDFCQjE2NkFBRTYwMDBFMTMzMDQgLyogWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBNjE2NkE5QzBFMDBFMTMzMDQgLyogWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLm0gKi87IH07CisJCTI1NDA0MUJDMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQTkxNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2VuZXJpY0dGLm0gKi87IH07CisJCTI1NDA0MUJEMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRlBvbHkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREFCMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRlBvbHkubSAqLzsgfTsKKwkJMjU0MDQxQkUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25EZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBRDE2NkE5QzBFMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkRlY29kZXIubSAqLzsgfTsKKwkJMjU0MDQxQkYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25FbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBRjE2NkE5QzBFMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkVuY29kZXIubSAqLzsgfTsKKwkJMjU0MDQxQzAxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQml0QXJyYXkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREIxMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdEFycmF5Lm0gKi87IH07CisJCTI1NDA0MUMxMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEJpdE1hdHJpeC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0TWF0cml4Lm0gKi87IH07CisJCTI1NDA0MUMyMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjUxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0U291cmNlLm0gKi87IH07CisJCTI1NDA0MUMzMTY2QUFFNjAwMEUxMzMwNCAvKiBaWENoYXJhY3RlclNldEVDSS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjcxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQ2hhcmFjdGVyU2V0RUNJLm0gKi87IH07CisJCTI1NDA0MUM0MTY2QUFFNjAwMEUxMzMwNCAvKiBaWERlY29kZXJSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREI5MTY2QTlDMEUwMEUxMzMwNCAvKiBaWERlY29kZXJSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQxQzUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGVmYXVsdEdyaWRTYW1wbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RCQjE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZWZhdWx0R3JpZFNhbXBsZXIubSAqLzsgfTsKKwkJMjU0MDQxQzYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGV0ZWN0b3JSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREJEMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERldGVjdG9yUmVzdWx0Lm0gKi87IH07CisJCTI1NDA0MUM3MTY2QUFFNjAwMEUxMzMwNCAvKiBaWEVDSS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQkYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRUNJLm0gKi87IH07CisJCTI1NDA0MUM4MTY2QUFFNjAwMEUxMzMwNCAvKiBaWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQzExNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLm0gKi87IH07CisJCTI1NDA0MUM5MTY2QUFFNjAwMEUxMzMwNCAvKiBaWEdyaWRTYW1wbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDMzE2NkE5QzBFMDBFMTMzMDQgLyogWlhHcmlkU2FtcGxlci5tICovOyB9OworCQkyNTQwNDFDQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhIeWJyaWRCaW5hcml6ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREM1MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEh5YnJpZEJpbmFyaXplci5tICovOyB9OworCQkyNTQwNDFDQjE2NkFBRTYwMDBFMTMzMDQgLyogWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQzcxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0ubSAqLzsgfTsKKwkJMjU0MDQxQ0MxNjZBQUU2MDAwRTEzMzA0IC8qIFpYU3RyaW5nVXRpbHMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREM5MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzLm0gKi87IH07CisJCTI1NDA0MUNEMTY2QUFFNjAwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREY1MTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQxQ0UxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERhdGFCbG9jay5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNERjcxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERhdGFCbG9jay5tICovOyB9OworCQkyNTQwNDFDRjE2NkFBRTYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNERjkxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQxRDAxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREZCMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVyLm0gKi87IH07CisJCTI1NDA0MUQxMTY2QUFFNjAwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhWZXJzaW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGRDE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4VmVyc2lvbi5tICovOyB9OworCQkyNTQwNDFEMjE2NkFBRTYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGV0ZWN0b3IubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTAwMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDFEMzE2NkFBRTYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UwMjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4UmVhZGVyLm0gKi87IH07CisJCTI1NDA0MUQ0MTY2QUFFNjAwMEUxMzMwNCAvKiBaWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UxNDE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZUJpdE1hdHJpeFBhcnNlci5tICovOyB9OworCQkyNTQwNDFENTE2NkFBRTYwMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTE2MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tICovOyB9OworCQkyNTQwNDFENjE2NkFBRTYwMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTE4MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2Rlci5tICovOyB9OworCQkyNTQwNDFENzE2NkFBRTYwMDBFMTMzMDQgLyogWlhNYXhpQ29kZVJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMUExNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQxRDgxNjZBQUU2MDAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMjcxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDFEOTE2NkFBRTYwMDBFMTMzMDQgLyogWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTI5MTY2QTlEOEIwMEUxMzMwNCAvKiBaWE11bHRpRmluZGVyUGF0dGVybkZpbmRlci5tICovOyB9OworCQkyNTQwNDFEQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhRUkNvZGVNdWx0aVJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMkIxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYUVJDb2RlTXVsdGlSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQxREIxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMkQxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5tICovOyB9OworCQkyNTQwNDFEQzE2NkFBRTYwMDBFMTMzMDQgLyogWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UyRjE2NkE5RDhCMDBFMTMzMDQgLyogWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLm0gKi87IH07CisJCTI1NDA0MUREMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0MTE2NkE5REYzMDBFMTMzMDQgLyogWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5tICovOyB9OworCQkyNTQwNDFERTE2NkFBRTYwMDBFMTMzMDQgLyogWlhBSTAxMzEwM2RlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQzMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzMTAzZGVjb2Rlci5tICovOyB9OworCQkyNTQwNDFERjE2NkFBRTYwMDBFMTMzMDQgLyogWlhBSTAxMzIweERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQ1MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzMjB4RGVjb2Rlci5tICovOyB9OworCQkyNTQwNDFFMDE2NkFBRTYwMDBFMTMzMDQgLyogWlhBSTAxMzkyeERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQ3MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzOTJ4RGVjb2Rlci5tICovOyB9OworCQkyNTQwNDFFMTE2NkFBRTYwMDBFMTMzMDQgLyogWlhBSTAxMzkzeERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQ5MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzOTN4RGVjb2Rlci5tICovOyB9OworCQkyNTQwNDFFMjE2NkFBRTYwMDBFMTMzMDQgLyogWlhBSTAxM3gweDF4RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNEIxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTN4MHgxeERlY29kZXIubSAqLzsgfTsKKwkJMjU0MDQxRTMxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQUkwMTN4MHhEZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0RDE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxM3gweERlY29kZXIubSAqLzsgfTsKKwkJMjU0MDQxRTQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQUkwMUFuZE90aGVyQUlzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0RjE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxQW5kT3RoZXJBSXMubSAqLzsgfTsKKwkJMjU0MDQxRTUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQUkwMWRlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTUxMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDFkZWNvZGVyLm0gKi87IH07CisJCTI1NDA0MUU2MTY2QUFFNjAwMEUxMzMwNCAvKiBaWEFJMDF3ZWlnaHREZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1MzE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxd2VpZ2h0RGVjb2Rlci5tICovOyB9OworCQkyNTQwNDFFNzE2NkFBRTYwMDBFMTMzMDQgLyogWlhBbnlBSURlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTU1MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFueUFJRGVjb2Rlci5tICovOyB9OworCQkyNTQwNDFFODE2NkFBRTYwMDBFMTMzMDQgLyogWlhCbG9ja1BhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNTcxNjZBOURGMzAwRTEzMzA0IC8qIFpYQmxvY2tQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQxRTkxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNTkxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5tICovOyB9OworCQkyNTQwNDFFQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhEZWNvZGVkQ2hhci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNUIxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZENoYXIubSAqLzsgfTsKKwkJMjU0MDQxRUIxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGVjb2RlZEluZm9ybWF0aW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1RDE2NkE5REYzMDBFMTMzMDQgLyogWlhEZWNvZGVkSW5mb3JtYXRpb24ubSAqLzsgfTsKKwkJMjU0MDQxRUMxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGVjb2RlZE51bWVyaWMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTVGMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWROdW1lcmljLm0gKi87IH07CisJCTI1NDA0MUVEMTY2QUFFNjAwMEUxMzMwNCAvKiBaWERlY29kZWRPYmplY3QubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTYxMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWRPYmplY3QubSAqLzsgfTsKKwkJMjU0MDQxRUUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRmllbGRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTYzMTY2QTlERjMwMEUxMzMwNCAvKiBaWEZpZWxkUGFyc2VyLm0gKi87IH07CisJCTI1NDA0MUVGMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEdlbmVyYWxBcHBJZERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTY1MTY2QTlERjMwMEUxMzMwNCAvKiBaWEdlbmVyYWxBcHBJZERlY29kZXIubSAqLzsgfTsKKwkJMjU0MDQxRjAxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2NzE2NkE5REYzMDBFMTMzMDQgLyogWlhCaXRBcnJheUJ1aWxkZXIubSAqLzsgfTsKKwkJMjU0MDQxRjExNjZBQUU2MDAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQYWlyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2OTE2NkE5REYzMDBFMTMzMDQgLyogWlhFeHBhbmRlZFBhaXIubSAqLzsgfTsKKwkJMjU0MDQxRjIxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUlNTRXhwYW5kZWRSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTZCMTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU0V4cGFuZGVkUmVhZGVyLm0gKi87IH07CisJCTI1NDA0MUYzMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEFic3RyYWN0UlNTUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2RDE2NkE5REYzMDBFMTMzMDQgLyogWlhBYnN0cmFjdFJTU1JlYWRlci5tICovOyB9OworCQkyNTQwNDFGNDE2NkFBRTYwMDBFMTMzMDQgLyogWlhEYXRhQ2hhcmFjdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2RjE2NkE5REYzMDBFMTMzMDQgLyogWlhEYXRhQ2hhcmFjdGVyLm0gKi87IH07CisJCTI1NDA0MUY1MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFBhaXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTcxMTY2QTlERjMwMEUxMzMwNCAvKiBaWFBhaXIubSAqLzsgfTsKKwkJMjU0MDQxRjYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUlNTMTRSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTczMTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTUzE0UmVhZGVyLm0gKi87IH07CisJCTI1NDA0MUY3MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTc1MTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4ubSAqLzsgfTsKKwkJMjU0MDQxRjgxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUlNTVXRpbHMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTc3MTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU1V0aWxzLm0gKi87IH07CisJCTI1NDA0MUY5MTY2QUFFNjAwMEUxMzMwNCAvKiBaWENvZGFCYXJSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTc5MTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGFCYXJSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQxRkExNjZBQUU2MDAwRTEzMzA0IC8qIFpYQ29kYUJhcldyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFN0IxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kYUJhcldyaXRlci5tICovOyB9OworCQkyNTQwNDFGQjE2NkFBRTYwMDBFMTMzMDQgLyogWlhDb2RlMTI4UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U3RDE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMTI4UmVhZGVyLm0gKi87IH07CisJCTI1NDA0MUZDMTY2QUFFNjAwMEUxMzMwNCAvKiBaWENvZGUxMjhXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTdGMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUxMjhXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQxRkQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQ29kZTM5UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4MTE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQxRkUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQ29kZTM5V3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4MzE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQxRkYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQ29kZTkzUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4NTE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlOTNSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQyMDAxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRUFOMTNSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTg3MTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjEzUmVhZGVyLm0gKi87IH07CisJCTI1NDA0MjAxMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEVBTjEzV3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4OTE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU4xM1dyaXRlci5tICovOyB9OworCQkyNTQwNDIwMjE2NkFBRTYwMDBFMTMzMDQgLyogWlhFQU44UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4QjE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU44UmVhZGVyLm0gKi87IH07CisJCTI1NDA0MjAzMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRThEMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQyMDQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOEYxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5tICovOyB9OworCQkyNTQwNDIwNTE2NkFBRTYwMDBFMTMzMDQgLyogWlhJVEZSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTkxMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURlJlYWRlci5tICovOyB9OworCQkyNTQwNDIwNjE2NkFBRTYwMDBFMTMzMDQgLyogWlhJVEZXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTkzMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURldyaXRlci5tICovOyB9OworCQkyNTQwNDIwNzE2NkFBRTYwMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTk1MTY2QTlERjMwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0T25lRFJlYWRlci5tICovOyB9OworCQkyNTQwNDIwODE2NkFBRTYwMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOTcxNjZBOURGMzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRVUENFQU5SZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQyMDkxNjZBQUU2MDAwRTEzMzA0IC8qIFpYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5OTE2NkE5REYzMDBFMTMzMDQgLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQyMEExNjZBQUU2MDAwRTEzMzA0IC8qIFpYT25lRFJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOUIxNjZBOURGMzAwRTEzMzA0IC8qIFpYT25lRFJlYWRlci5tICovOyB9OworCQkyNTQwNDIwQjE2NkFBRTYwMDBFMTMzMDQgLyogWlhVUENBUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5RDE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENBUmVhZGVyLm0gKi87IH07CisJCTI1NDA0MjBDMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTlGMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQyMEQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uMlN1cHBvcnQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUExMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0Lm0gKi87IH07CisJCTI1NDA0MjBFMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjVTdXBwb3J0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBMzE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5tICovOyB9OworCQkyNTQwNDIwRjE2NkFBRTYwMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBNTE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0Lm0gKi87IH07CisJCTI1NDA0MjEwMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFVQQ0VBTlJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFQTcxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFOUmVhZGVyLm0gKi87IH07CisJCTI1NDA0MjExMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFVQQ0VBTldyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFQTkxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFOV3JpdGVyLm0gKi87IH07CisJCTI1NDA0MjEyMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUFCMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQyMTMxNjZBQUU2MDAwRTEzMzA0IC8qIFpYTW9kdWx1c0dGLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YxQzE2NkE5RUI1MDBFMTMzMDQgLyogWlhNb2R1bHVzR0YubSAqLzsgfTsKKwkJMjU0MDQyMTQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYTW9kdWx1c1BvbHkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjFFMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNQb2x5Lm0gKi87IH07CisJCTI1NDA0MjE1MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YyMDE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5tICovOyB9OworCQkyNTQwNDIxNzE2NkFBRTYwMDBFMTMzMDQgLyogWlhQREY0MTdEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YyNDE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gKi87IH07CisJCTI1NDA0MjE5MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFBERjQxN0RldGVjdG9yLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YyOTE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDIxQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhCYXJjb2RlTWF0cml4Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YyQzE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlTWF0cml4Lm0gKi87IH07CisJCTI1NDA0MjFCMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEJhcmNvZGVSb3cubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjJFMTY2QTlFQjUwMEUxMzMwNCAvKiBaWEJhcmNvZGVSb3cubSAqLzsgfTsKKwkJMjU0MDQyMUMxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGltZW5zaW9ucy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMzExNjZBOUVCNTAwRTEzMzA0IC8qIFpYRGltZW5zaW9ucy5tICovOyB9OworCQkyNTQwNDIxRDE2NkFBRTYwMDBFMTMzMDQgLyogWlhQREY0MTcubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjMzMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxNy5tICovOyB9OworCQkyNTQwNDIxRTE2NkFBRTYwMDBFMTMzMDQgLyogWlhQREY0MTdFcnJvckNvcnJlY3Rpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjM1MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5tICovOyB9OworCQkyNTQwNDIxRjE2NkFBRTYwMDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YzNzE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLm0gKi87IH07CisJCTI1NDA0MjIxMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFBERjQxN1JlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGM0IxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3UmVhZGVyLm0gKi87IH07CisJCTI1NDA0MjIyMTY2QUFFNjAwMEUxMzMwNCAvKiBaWERhdGFNYXNrLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y1RTE2NkE5RjJEMDBFMTMzMDQgLyogWlhEYXRhTWFzay5tICovOyB9OworCQkyNTQwNDIyMzE2NkFBRTYwMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNjAxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwubSAqLzsgfTsKKwkJMjU0MDQyMjQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRm9ybWF0SW5mb3JtYXRpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjYyMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZvcm1hdEluZm9ybWF0aW9uLm0gKi87IH07CisJCTI1NDA0MjI1MTY2QUFFNjAwMEUxMzMwNCAvKiBaWE1vZGUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjY0MTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1vZGUubSAqLzsgfTsKKwkJMjU0MDQyMjYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2NjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVCaXRNYXRyaXhQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQyMjcxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUVJDb2RlRGF0YUJsb2NrLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2ODE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEYXRhQmxvY2subSAqLzsgfTsKKwkJMjU0MDQyMjgxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNkExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tICovOyB9OworCQkyNTQwNDIyOTE2NkFBRTYwMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2QzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLm0gKi87IH07CisJCTI1NDA0MjJBMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjZFMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24ubSAqLzsgfTsKKwkJMjU0MDQyMkIxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNzExNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybi5tICovOyB9OworCQkyNTQwNDIyQzE2NkFBRTYwMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3MzE2NkE5RjJEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLm0gKi87IH07CisJCTI1NDA0MjJEMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5GaW5kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjc1MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5GaW5kZXIubSAqLzsgfTsKKwkJMjU0MDQyMkUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRmluZGVyUGF0dGVybkluZm8ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjc3MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5JbmZvLm0gKi87IH07CisJCTI1NDA0MjJGMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFFSQ29kZURldGVjdG9yLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3OTE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDIzMDE2NkFBRTYwMDBFMTMzMDQgLyogWlhRUkNvZGVGaW5kZXJQYXR0ZXJuLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3QjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVGaW5kZXJQYXR0ZXJuLm0gKi87IH07CisJCTI1NDA0MjMxMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEJsb2NrUGFpci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGN0UxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQmxvY2tQYWlyLm0gKi87IH07CisJCTI1NDA0MjMyMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEJ5dGVNYXRyaXgubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjgwMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEJ5dGVNYXRyaXgubSAqLzsgfTsKKwkJMjU0MDQyMzMxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRW5jb2Rlci5tICovOyB9OworCQkyNTQwNDIzNDE2NkFBRTYwMDBFMTMzMDQgLyogWlhNYXNrVXRpbC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWFza1V0aWwubSAqLzsgfTsKKwkJMjU0MDQyMzUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbC5tICovOyB9OworCQkyNTQwNDIzNjE2NkFBRTYwMDBFMTMzMDQgLyogWlhRUkNvZGUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjg4MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZS5tICovOyB9OworCQkyNTQwNDIzNzE2NkFBRTYwMDBFMTMzMDQgLyogWlhRUkNvZGVSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjhBMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVJlYWRlci5tICovOyB9OworCQkyNTQwNDIzODE2NkFBRTYwMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjhDMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVdyaXRlci5tICovOyB9OworCQkyNTQwNDIzOTE2NkFBRTYwMDBFMTMzMDQgLyogWlhCaW5hcml6ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkJEMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJpbmFyaXplci5tICovOyB9OworCQkyNTQwNDIzQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhCaW5hcnlCaXRtYXAubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkJGMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJpbmFyeUJpdG1hcC5tICovOyB9OworCQkyNTQwNDIzQjE2NkFBRTYwMDBFMTMzMDQgLyogWlhEZWNvZGVIaW50cy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQzExNjZBOUZGQzAwRTEzMzA0IC8qIFpYRGVjb2RlSGludHMubSAqLzsgfTsKKwkJMjU0MDQyM0MxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRW5jb2RlSGludHMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkMzMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEVuY29kZUhpbnRzLm0gKi87IH07CisJCTI1NDA0MjNEMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEVycm9ycy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQzUxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRXJyb3JzLm0gKi87IH07CisJCTI1NDA0MjNFMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRDIxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTHVtaW5hbmNlU291cmNlLm0gKi87IH07CisJCTI1NDA0MjNGMTY2QUFFNjAwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZENDE2NkFBMDA3MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFJlYWRlci5tICovOyB9OworCQkyNTQwNDI0MDE2NkFBRTYwMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFdyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRDYxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQyNDExNjZBQUU2MDAwRTEzMzA0IC8qIFpYUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZEOTE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQyNDIxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUmVzdWx0UG9pbnQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkRDMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50Lm0gKi87IH07CisJCTI1NDA0MzFEMTY2QUI4QjgwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkY1MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzMUUxNjZBQjhCODAwRTEzMzA0IC8qIFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRjcxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDMxRjE2NkFCOEI4MDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRjkxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzMjAxNjZBQjhCODAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkZCMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MzIxMTY2QUI4QjgwMEUxMzMwNCAvKiBaWEdlb1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZGRDE2NkFBMEYxMDBFMTMzMDQgLyogWlhHZW9QYXJzZWRSZXN1bHRUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDMyMjE2NkFCOEI4MDBFMTMzMDQgLyogWlhJU0JOUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkZGMTY2QUEwRjEwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHRUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDMyMzE2NkFCOEI4MDBFMTMzMDQgLyogWlhQYXJzZWRSZWFkZXJSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMDExNjZBQTBGMTAwRTEzMzA0IC8qIFpYUGFyc2VkUmVhZGVyUmVzdWx0VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzMjQxNjZBQjhCODAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAwMzE2NkFBMEYxMDBFMTMzMDQgLyogWlhQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzMjUxNjZBQjhCODAwRTEzMzA0IC8qIFpYU01TTU1TUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDA1MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFNNU01NU1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MzI2MTY2QUI4QjgwMEUxMzMwNCAvKiBaWFRlbFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAwNzE2NkFBMEYxMDBFMTMzMDQgLyogWlhUZWxQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDMyNzE2NkFCOEI4MDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMDkxNjZBQTBGMTAwRTEzMzA0IC8qIFpYVVJJUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzMjgxNjZBQjhCODAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAwQjE2NkFBMEYxMDBFMTMzMDQgLyogWlhXaWZpUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzMzAxNjZBQjhCODAwRTEzMzA0IC8qIFpYQml0QXJyYXlUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMUQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0QXJyYXlUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDMzMTE2NkFCOEI4MDBFMTMzMDQgLyogWlhCaXRNYXRyaXhUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMUYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0TWF0cml4VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzMzIxNjZBQjhCODAwRTEzMzA0IC8qIFpYQml0U291cmNlQnVpbGRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMjExNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0U291cmNlQnVpbGRlci5tICovOyB9OworCQkyNTQwNDMzMzE2NkFCOEI4MDBFMTMzMDQgLyogWlhCaXRTb3VyY2VUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMjMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0U291cmNlVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzMzQxNjZBQjhCODAwRTEzMzA0IC8qIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm1UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwMjUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm1UZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDMzNTE2NkFCOEI4MDBFMTMzMDQgLyogWlhTdHJpbmdVdGlsc1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDAyNzE2NkFBMEYxMDBFMTMzMDQgLyogWlhTdHJpbmdVdGlsc1Rlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MzM4MTY2QUI4QjgwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDJGMTY2QUEwRjEwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzNEQxNjZBQjhCODAwRTEzMzA0IC8qIEFic3RyYWN0RGVjb2RlclRlc3QubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDVFMTY2QUEwRjEwMEUxMzMwNCAvKiBBYnN0cmFjdERlY29kZXJUZXN0Lm0gKi87IH07CisJCTI1NDA0MzRFMTY2QUI4QjgwMEUxMzMwNCAvKiBBSTAxXzMxMDNfRGVjb2RlclRlc3QubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDYwMTY2QUEwRjEwMEUxMzMwNCAvKiBBSTAxXzMxMDNfRGVjb2RlclRlc3QubSAqLzsgfTsKKwkJMjU0MDQzNEYxNjZBQjhCODAwRTEzMzA0IC8qIEFJMDFfMzIwMl8zMjAzX0RlY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA2MjE2NkFBMEYxMDBFMTMzMDQgLyogQUkwMV8zMjAyXzMyMDNfRGVjb2RlclRlc3QubSAqLzsgfTsKKwkJMjU0MDQzNTAxNjZBQjhCODAwRTEzMzA0IC8qIEFJMDFfM1gwWF8xWF9EZWNvZGVyVGVzdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNjQxNjZBQTBGMTAwRTEzMzA0IC8qIEFJMDFfM1gwWF8xWF9EZWNvZGVyVGVzdC5tICovOyB9OworCQkyNTQwNDM1MTE2NkFCOEI4MDBFMTMzMDQgLyogQW55QUlEZWNvZGVyVGVzdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNjYxNjZBQTBGMTAwRTEzMzA0IC8qIEFueUFJRGVjb2RlclRlc3QubSAqLzsgfTsKKwkJMjU0MDQzNTIxNjZBQjhCODAwRTEzMzA0IC8qIFpYRmllbGRQYXJzZXJUZXN0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA2ODE2NkFBMEYxMDBFMTMzMDQgLyogWlhGaWVsZFBhcnNlclRlc3QubSAqLzsgfTsKKwkJMjU0MDQzNTYxNjZBQjhCODAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2UyYmluYXJ5VGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDcwMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMmJpbmFyeVRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MzU3MTY2QUI4QjgwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMnJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA3MjE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJyZXN1bHRUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDM1ODE2NkFCOEI4MDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJzdHJpbmdUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNzQxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2Uyc3RyaW5nVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzNTkxNjZBQjhCODAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW50ZXJuYWxUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwNzYxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW50ZXJuYWxUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDM1QTE2NkFCOEI4MDBFMTMzMDQgLyogWlhCaW5hcnlVdGlsLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA3ODE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaW5hcnlVdGlsLm0gKi87IH07CisJCTI1NDA0MzVCMTY2QUI4QjgwMEUxMzMwNCAvKiBaWEJpbmFyeVV0aWxUZXN0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA3QTE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaW5hcnlVdGlsVGVzdC5tICovOyB9OworCQkyNTQwNDM1QzE2NkFCOEI4MDBFMTMzMDQgLyogWlhCaXRBcnJheUJ1aWxkZXJUZXN0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA3QzE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaXRBcnJheUJ1aWxkZXJUZXN0Lm0gKi87IH07CisJCTI1NDA0MzVEMTY2QUI4QjgwMEUxMzMwNCAvKiBaWEV4cGFuZGVkSW5mb3JtYXRpb25EZWNvZGVyVGVzdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwN0UxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRXhwYW5kZWRJbmZvcm1hdGlvbkRlY29kZXJUZXN0Lm0gKi87IH07CisJCTI1NDA0MzZBMTY2QUI4QjgwMEUxMzMwNCAvKiBaWENvZGFCYXJXcml0ZXJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwOTgxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQ29kYUJhcldyaXRlclRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MzZDMTY2QUI4QjgwMEUxMzMwNCAvKiBaWEVBTjEzV3JpdGVyVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MDlDMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVBTjEzV3JpdGVyVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzNkQxNjZBQjhCODAwRTEzMzA0IC8qIFpYRUFOOFdyaXRlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDA5RTE2NkFBMEYxMDBFMTMzMDQgLyogWlhFQU44V3JpdGVyVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzNkUxNjZBQjhCODAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydFRlc3QubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEEwMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnRUZXN0Lm0gKi87IH07CisJCTI1NDA0MzcwMTY2QUI4QjgwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQTQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYVVBDQVdyaXRlclRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MzcxMTY2QUI4QjgwMEUxMzMwNCAvKiBBYnN0cmFjdEVycm9yQ29ycmVjdGlvblRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDBBOTE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDM3MjE2NkFCOEI4MDBFMTMzMDQgLyogWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvblRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDBBQjE2NkFBMEYxMDBFMTMzMDQgLyogWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvblRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0Mzc1MTY2QUI4QjgwMEUxMzMwNCAvKiBaWERhdGFNYXNrVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEIzMTY2QUEwRjEwMEUxMzMwNCAvKiBaWERhdGFNYXNrVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzNzYxNjZBQjhCODAwRTEzMzA0IC8qIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQjUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDM3NzE2NkFCOEI4MDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvblRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDBCNzE2NkFBMEYxMDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvblRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0Mzc4MTY2QUI4QjgwMEUxMzMwNCAvKiBaWE1vZGVUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQjkxNjZBQTBGMTAwRTEzMzA0IC8qIFpYTW9kZVRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0Mzc5MTY2QUI4QjgwMEUxMzMwNCAvKiBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQkIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MzdBMTY2QUI4QjgwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb25UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQkQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlVmVyc2lvblRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MzdCMTY2QUI4QjgwMEUxMzMwNCAvKiBCaXRWZWN0b3JUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQzAxNjZBQTBGMTAwRTEzMzA0IC8qIEJpdFZlY3RvclRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MzdDMTY2QUI4QjgwMEUxMzMwNCAvKiBaWEVuY29kZXJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQwQzIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRW5jb2RlclRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0MzdEMTY2QUI4QjgwMEUxMzMwNCAvKiBaWE1hc2tVdGlsVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEM0MTY2QUEwRjEwMEUxMzMwNCAvKiBaWE1hc2tVdGlsVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzN0UxNjZBQjhCODAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDBDNjE2NkFBMEYxMDBFMTMzMDQgLyogWlhNYXRyaXhVdGlsVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MDQzN0YxNjZBQjhCODAwRTEzMzA0IC8qIFpYUVJDb2RlVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0MEM4MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFFSQ29kZVRlc3RDYXNlLm0gKi87IH07CisJCTI1NDA0Mzg2MTY2QUI4QjgwMEUxMzMwNCAvKiBaWFFSQ29kZVdyaXRlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDBENjE2NkFBMEYxMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXJUZXN0Q2FzZS5tICovOyB9OworCQkyNTQwNDM4ODE2NkFCOENGMDBFMTMzMDQgLyogQ29yZVZpZGVvLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0Mzg3MTY2QUI4Q0YwMEUxMzMwNCAvKiBDb3JlVmlkZW8uZnJhbWV3b3JrICovOyB9OworCQkyNTQwNDM4OTE2NkFCOEQ2MDBFMTMzMDQgLyogQ29yZVZpZGVvLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0Mzg3MTY2QUI4Q0YwMEUxMzMwNCAvKiBDb3JlVmlkZW8uZnJhbWV3b3JrICovOyB9OworCQkyNTQwNDM5MDE2NkFCOTE3MDBFMTMzMDQgLyogQ29jb2EuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQzOEYxNjZBQjkxNzAwRTEzMzA0IC8qIENvY29hLmZyYW1ld29yayAqLzsgfTsKKwkJMjU0MDQzOTUxNjZBQjk1NzAwRTEzMzA0IC8qIEFwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQzOTQxNjZBQjk1NzAwRTEzMzA0IC8qIEFwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrICovOyB9OworCQkyNTQwNDM5NzE2NkFCOTYwMDBFMTMzMDQgLyogQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDM5NDE2NkFCOTU3MDBFMTMzMDQgLyogQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsgKi87IH07CisJCTI1NDA0M0I1MTY2QUJBNkIwMEUxMzMwNCAvKiBDb2NvYS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDM4RjE2NkFCOTE3MDBFMTMzMDQgLyogQ29jb2EuZnJhbWV3b3JrICovOyB9OworCQkyNTQwNDNCNjE2NkFCQTc1MDBFMTMzMDQgLyogQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDM5NDE2NkFCOTU3MDBFMTMzMDQgLyogQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsgKi87IH07CisJCTI1NDA0M0I3MTY2QUJBNzgwMEUxMzMwNCAvKiBDb3JlVmlkZW8uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQzODcxNjZBQjhDRjAwRTEzMzA0IC8qIENvcmVWaWRlby5mcmFtZXdvcmsgKi87IH07CisJCTI1NDA0NTJCMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEF6dGVjRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDRUUxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDUyQzE2NkFCQUYwMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NGMTE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDUyRDE2NkFCQUYwMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NGMzE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDUyRTE2NkFCQUYwMDBFMTMzMDQgLyogWlhBenRlY1JlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDRjUxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTJGMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwMTE2NkE5QTA4MDBFMTMzMDQgLyogWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1MzAxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDMxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1MzExNjZBQkFGMDAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDA1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDUzMjE2NkFCQUYwMDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDcxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTMzMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDA5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTM0MTY2QUJBRjAwMEUxMzMwNCAvKiBaWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1MzUxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDBEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDUzNjE2NkFCQUYwMDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDBGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1MzcxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxMTE2NkE5QTA4MDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTM4MTY2QUJBRjAwMEUxMzMwNCAvKiBaWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxMzE2NkE5QTA4MDBFMTMzMDQgLyogWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1MzkxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxNTE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTNBMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMTcxNjZBOUEwODAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDUzQjE2NkFCQUYwMDBFMTMzMDQgLyogWlhHZW9QYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDE5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEdlb1BhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1M0MxNjZBQkFGMDAwRTEzMzA0IC8qIFpYR2VvUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9SZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTNEMTY2QUJBRjAwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDFEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTNFMTY2QUJBRjAwMEUxMzMwNCAvKiBaWElTQk5SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDFGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5SZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTNGMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMjExNjZBOUEwODAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU0MDE2NkFCQUYwMDBFMTMzMDQgLyogWlhQYXJzZWRSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyMzE2NkE5QTA4MDBFMTMzMDQgLyogWlhQYXJzZWRSZXN1bHRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU0MTE2NkFCQUYwMDBFMTMzMDQgLyogWlhQcm9kdWN0UGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyNDE2NkE5QTA4MDBFMTMzMDQgLyogWlhQcm9kdWN0UGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU0MjE2NkFCQUYwMDBFMTMzMDQgLyogWlhQcm9kdWN0UmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyNjE2NkE5QTA4MDBFMTMzMDQgLyogWlhQcm9kdWN0UmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU0MzE2NkFCQUYwMDBFMTMzMDQgLyogWlhSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDI4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NDQxNjZBQkFGMDAwRTEzMzA0IC8qIFpYU01TTU1TUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyQTE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTQ1MTY2QUJBRjAwMEUxMzMwNCAvKiBaWFNNU1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMkMxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01TUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU0NjE2NkFCQUYwMDBFMTMzMDQgLyogWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyRTE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU0NzE2NkFCQUYwMDBFMTMzMDQgLyogWlhTTVRQUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzMDE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVRQUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU0ODE2NkFCQUYwMDBFMTMzMDQgLyogWlhUZWxQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDMyMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRlbFBhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NDkxNjZBQkFGMDAwRTEzMzA0IC8qIFpYVGVsUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzNDE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZWxSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTRBMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDM2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTRCMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFVSSVBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMzgxNjZBOUEwODAwRTEzMzA0IC8qIFpYVVJJUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU0QzE2NkFCQUYwMDBFMTMzMDQgLyogWlhVUklSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDNBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVJlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NEQxNjZBQkFGMDAwRTEzMzA0IC8qIFpYVVJMVE9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDNDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSTFRPUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU0RTE2NkFCQUYwMDBFMTMzMDQgLyogWlhWQ2FyZFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEM0UxNjZBOUEwODAwRTEzMzA0IC8qIFpYVkNhcmRSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTRGMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFZFdmVudFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENDAxNjZBOUEwODAwRTEzMzA0IC8qIFpYVkV2ZW50UmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU1MDE2NkFCQUYwMDBFMTMzMDQgLyogWlhXaWZpUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0MjE2NkE5QTA4MDBFMTMzMDQgLyogWlhXaWZpUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU1MTE2NkFCQUYwMDBFMTMzMDQgLyogWlhXaWZpUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0NDE2NkE5QTA4MDBFMTMzMDQgLyogWlhXaWZpUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU1MjE2NkFCQUYwMDBFMTMzMDQgLyogWlhDYXB0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0NjE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYXB0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU1MzE2NkFCQUYwMDBFMTMzMDQgLyogWlhDYXB0dXJlRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDQ4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmVEZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NTQxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQ2FwdHVyZVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDQ5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmVWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU1NTE2NkFCQUYwMDBFMTMzMDQgLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0QjE2NkE5QTA4MDBFMTMzMDQgLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU1NjE2NkFCQUYwMDBFMTMzMDQgLyogWlhJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENEQxNjZBOUEwODAwRTEzMzA0IC8qIFpYSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTU3MTY2QUJBRjAwMEUxMzMwNCAvKiBaWFZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDRGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTU4MTY2QUJBRjAwMEUxMzMwNCAvKiBaWE1hdGhVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQTExNjZBOUMwRTAwRTEzMzA0IC8qIFpYTWF0aFV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU1OTE2NkFCQUYwMDBFMTMzMDQgLyogWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREEzMTY2QTlDMEUwMEUxMzMwNCAvKiBaWE1vbm9jaHJvbWVSZWN0YW5nbGVEZXRlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NUExNjZBQkFGMDAwRTEzMzA0IC8qIFpYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQTUxNjZBOUMwRTAwRTEzMzA0IC8qIFpYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NUIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYR2VuZXJpY0dGLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBODE2NkE5QzBFMDBFMTMzMDQgLyogWlhHZW5lcmljR0YuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTVDMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRlBvbHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREFBMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRlBvbHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTVEMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFJlZWRTb2xvbW9uRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQUMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25EZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU1RTE2NkFCQUYwMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREFFMTY2QTlDMEUwMEUxMzMwNCAvKiBaWFJlZWRTb2xvbW9uRW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NUYxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQml0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREIwMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU2MDE2NkFCQUYwMDBFMTMzMDQgLyogWlhCaXRNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREIyMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdE1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NjExNjZBQkFGMDAwRTEzMzA0IC8qIFpYQml0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RCNDE2NkE5QzBFMDBFMTMzMDQgLyogWlhCaXRTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTYyMTY2QUJBRjAwMEUxMzMwNCAvKiBaWENoYXJhY3RlclNldEVDSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQ2hhcmFjdGVyU2V0RUNJLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU2MzE2NkFCQUYwMDBFMTMzMDQgLyogWlhEZWNvZGVyUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RCODE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZWNvZGVyUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU2NDE2NkFCQUYwMDBFMTMzMDQgLyogWlhEZWZhdWx0R3JpZFNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREJBMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERlZmF1bHRHcmlkU2FtcGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NjUxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRGV0ZWN0b3JSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREJDMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERldGVjdG9yUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU2NjE2NkFCQUYwMDBFMTMzMDQgLyogWlhFQ0kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREJFMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEVDSS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NjcxNjZBQkFGMDAwRTEzMzA0IC8qIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDMDE2NkE5QzBFMDBFMTMzMDQgLyogWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTY4MTY2QUJBRjAwMEUxMzMwNCAvKiBaWEdyaWRTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDMjE2NkE5QzBFMDBFMTMzMDQgLyogWlhHcmlkU2FtcGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NjkxNjZBQkFGMDAwRTEzMzA0IC8qIFpYSHlicmlkQmluYXJpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDNDE2NkE5QzBFMDBFMTMzMDQgLyogWlhIeWJyaWRCaW5hcml6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTZBMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDNjE2NkE5QzBFMDBFMTMzMDQgLyogWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NkIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYU3RyaW5nVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREM4MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU2QzE2NkFCQUYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGNDE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU2RDE2NkFCQUYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGNjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU2RTE2NkFCQUYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNERjgxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTZGMTY2QUJBRjAwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGQTE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NzAxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeFZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREZDMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhWZXJzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU3MTE2NkFCQUYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREZGMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZXRlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NzIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMDExNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NzMxNjZBQkFGMDAwRTEzMzA0IC8qIFpYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTEzMTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU3NDE2NkFCQUYwMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTE1MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NzUxNjZBQkFGMDAwRTEzMzA0IC8qIFpYTWF4aUNvZGVEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UxNzE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTc2MTY2QUJBRjAwMEUxMzMwNCAvKiBaWE1heGlDb2RlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UxOTE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZVJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NzcxNjZBQkFGMDAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMjYxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1NzgxNjZBQkFGMDAwRTEzMzA0IC8qIFpYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UyODE2NkE5RDhCMDBFMTMzMDQgLyogWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTc5MTY2QUJBRjAwMEUxMzMwNCAvKiBaWFFSQ29kZU11bHRpUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UyQTE2NkE5RDhCMDBFMTMzMDQgLyogWlhRUkNvZGVNdWx0aVJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1N0ExNjZBQkFGMDAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMkMxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1N0IxNjZBQkFGMDAwRTEzMzA0IC8qIFpYR2VuZXJpY011bHRpcGxlQmFyY29kZVJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMkUxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYR2VuZXJpY011bHRpcGxlQmFyY29kZVJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1N0MxNjZBQkFGMDAwRTEzMzA0IC8qIFpYTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UzMDE2NkE5RDhCMDBFMTMzMDQgLyogWlhNdWx0aXBsZUJhcmNvZGVSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTdEMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFBERjQxN0RldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YyODE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdEZXRlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1N0UxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQmFyY29kZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMkIxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQmFyY29kZU1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1N0YxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQmFyY29kZVJvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMkQxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQmFyY29kZVJvdy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1ODAxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQ29tcGFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMkYxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQ29tcGFjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1ODExNjZBQkFGMDAwRTEzMzA0IC8qIFpYRGltZW5zaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMzAxNjZBOUVCNTAwRTEzMzA0IC8qIFpYRGltZW5zaW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1ODIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUERGNDE3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YzMjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTgzMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMzQxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RXJyb3JDb3JyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU4NDE2NkFCQUYwMDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YzNjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU4NjE2NkFCQUYwMDBFMTMzMDQgLyogWlhQREY0MTdSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjNBMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN1JlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1ODcxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRGF0YU1hc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjVEMTY2QTlGMkQwMEUxMzMwNCAvKiBaWERhdGFNYXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU4ODE2NkFCQUYwMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNUYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTg5MTY2QUJBRjAwMEUxMzMwNCAvKiBaWEZvcm1hdEluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2MTE2NkE5RjJEMDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1OEExNjZBQkFGMDAwRTEzMzA0IC8qIFpYTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNjMxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1OEIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2NTE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVCaXRNYXRyaXhQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NThDMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFFSQ29kZURhdGFCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNjcxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGF0YUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU4RDE2NkFCQUYwMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2OTE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU4RTE2NkFCQUYwMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2QjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU4RjE2NkFCQUYwMDBFMTMzMDQgLyogWlhRUkNvZGVWZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2RDE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVWZXJzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU5MDE2NkFCQUYwMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3MDE2NkE5RjJEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU5MTE2NkFCQUYwMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3MjE2NkE5RjJEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU5MjE2NkFCQUYwMDBFMTMzMDQgLyogWlhGaW5kZXJQYXR0ZXJuRmluZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3NDE2NkE5RjJEMDBFMTMzMDQgLyogWlhGaW5kZXJQYXR0ZXJuRmluZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU5MzE2NkFCQUYwMDBFMTMzMDQgLyogWlhGaW5kZXJQYXR0ZXJuSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNzYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRmluZGVyUGF0dGVybkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTk0MTY2QUJBRjAwMEUxMzMwNCAvKiBaWFFSQ29kZURldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3ODE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZXRlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1OTUxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUVJDb2RlRmluZGVyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGN0ExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRmluZGVyUGF0dGVybi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1OTYxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQmxvY2tQYWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3RDE2NkE5RjJEMDBFMTMzMDQgLyogWlhCbG9ja1BhaXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTk3MTY2QUJBRjAwMEUxMzMwNCAvKiBaWEJ5dGVNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjdGMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEJ5dGVNYXRyaXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTk4MTY2QUJBRjAwMEUxMzMwNCAvKiBaWEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjgxMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEVuY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTk5MTY2QUJBRjAwMEUxMzMwNCAvKiBaWE1hc2tVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y4MzE2NkE5RjJEMDBFMTMzMDQgLyogWlhNYXNrVXRpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1OUExNjZBQkFGMDAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1OUIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUVJDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y4NzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTlDMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFFSQ29kZVJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODkxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDU5RDE2NkFCQUYwMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjhCMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVdyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1OUUxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQmluYXJpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZCQzE2NkE5RkZDMDBFMTMzMDQgLyogWlhCaW5hcml6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NTlGMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEJpbmFyeUJpdG1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQkUxNjZBOUZGQzAwRTEzMzA0IC8qIFpYQmluYXJ5Qml0bWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDVBMDE2NkFCQUYwMDBFMTMzMDQgLyogWlhEZWNvZGVIaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQzAxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRGVjb2RlSGludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NUExMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEVuY29kZUhpbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZDMjE2NkE5RkZDMDBFMTMzMDQgLyogWlhFbmNvZGVIaW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1QTIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRXJyb3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZDNDE2NkE5RkZDMDBFMTMzMDQgLyogWlhFcnJvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NUEzMTY2QUJBRjAwMEUxMzMwNCAvKiBaWGluZ09iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzQ0JCMTY2QTk2RkEwMEUxMzMwNCAvKiBaWGluZ09iakMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NUE0MTY2QUJBRjAwMEUxMzMwNCAvKiBaWEx1bWluYW5jZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRDExNjZBQTAwNzAwRTEzMzA0IC8qIFpYTHVtaW5hbmNlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDVBNTE2NkFCQUYwMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRDMxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NUE2MTY2QUJBRjAwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0V3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZENTE2NkFBMDA3MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFdyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1QTcxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZENzE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDA0NUE4MTY2QUJBRjAwMEUxMzMwNCAvKiBaWFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRDgxNjZBQTAwNzAwRTEzMzA0IC8qIFpYUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDVBOTE2NkFCQUYwMDBFMTMzMDQgLyogWlhSZXN1bHRNZXRhZGF0YVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkRBMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlc3VsdE1ldGFkYXRhVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ1QUExNjZBQkFGMDAwRTEzMzA0IC8qIFpYUmVzdWx0UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkRCMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDVBQjE2NkFCQUYwMDBFMTMzMDQgLyogWlhSZXN1bHRQb2ludENhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZERDE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHRQb2ludENhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQwNDVBQzE2NkFCQUYwMDBFMTMzMDQgLyogWlhXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkRFMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFdyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0MDQ2NDgxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQXp0ZWNEZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NFRjE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RlY29kZXIubSAqLzsgfTsKKwkJMjU0MDQ2NDkxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDRjIxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDY0QTE2NkFCQkVEMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NGNDE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yUmVzdWx0Lm0gKi87IH07CisJCTI1NDA0NjRCMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEF6dGVjUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NGNjE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY1JlYWRlci5tICovOyB9OworCQkyNTQwNDY0QzE2NkFCQkVEMDBFMTMzMDQgLyogWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDIxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2NEQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDQxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDY0RTE2NkFCQkVEMDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0RvQ29Nb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDYxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2NEYxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDA4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0Lm0gKi87IH07CisJCTI1NDA0NjUwMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDBBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2NTExNjZBQkJFRDAwRTEzMzA0IC8qIFpYQm9va21hcmtEb0NvTW9SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDBDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDA0NjUyMTY2QUJCRUQwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwRTE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDY1MzE2NkFCQkVEMDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDEwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDY1NDE2NkFCQkVEMDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDEyMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1Jlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDY1NTE2NkFCQkVEMDBFMTMzMDQgLyogWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMTQxNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2NTYxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxNjE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQ2NTcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxODE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RSZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2NTgxNjZBQkJFRDAwRTEzMzA0IC8qIFpYR2VvUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxQTE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9QYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQ2NTkxNjZBQkJFRDAwRTEzMzA0IC8qIFpYR2VvUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxQzE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2NUExNjZBQkJFRDAwRTEzMzA0IC8qIFpYSVNCTlBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMUUxNjZBOUEwODAwRTEzMzA0IC8qIFpYSVNCTlBhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDY1QjE2NkFCQkVEMDBFMTMzMDQgLyogWlhJU0JOUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyMDE2NkE5QTA4MDBFMTMzMDQgLyogWlhJU0JOUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDA0NjVDMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMjIxNjZBOUEwODAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0Lm0gKi87IH07CisJCTI1NDA0NjVEMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFByb2R1Y3RQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDI1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFByb2R1Y3RQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQ2NUUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUHJvZHVjdFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMjcxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDY1RjE2NkFCQkVEMDBFMTMzMDQgLyogWlhSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDI5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDY2MDE2NkFCQkVEMDBFMTMzMDQgLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDJCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU01NU1Jlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDY2MTE2NkFCQkVEMDBFMTMzMDQgLyogWlhTTVNQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDJEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU1BhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDY2MjE2NkFCQkVEMDBFMTMzMDQgLyogWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyRjE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDA0NjYzMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFNNVFBSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDMxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNVFBSZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2NjQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYVGVsUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzMzE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZWxQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQ2NjUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYVGVsUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzNTE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZWxSZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2NjYxNjZBQkJFRDAwRTEzMzA0IC8qIFpYVGV4dFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMzcxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGV4dFBhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDY2NzE2NkFCQkVEMDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDM5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVBhcnNlZFJlc3VsdC5tICovOyB9OworCQkyNTQwNDY2ODE2NkFCQkVEMDBFMTMzMDQgLyogWlhVUklSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDNCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDY2OTE2NkFCQkVEMDBFMTMzMDQgLyogWlhVUkxUT1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEM0QxNjZBOUEwODAwRTEzMzA0IC8qIFpYVVJMVE9SZXN1bHRQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2NkExNjZBQkJFRDAwRTEzMzA0IC8qIFpYVkNhcmRSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDNGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZDYXJkUmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDA0NjZCMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFZFdmVudFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENDExNjZBOUEwODAwRTEzMzA0IC8qIFpYVkV2ZW50UmVzdWx0UGFyc2VyLm0gKi87IH07CisJCTI1NDA0NjZDMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFdpZmlQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDQzMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFdpZmlQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQ2NkQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYV2lmaVJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENDUxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVJlc3VsdFBhcnNlci5tICovOyB9OworCQkyNTQwNDY2RTE2NkFCQkVEMDBFMTMzMDQgLyogWlhDYXB0dXJlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0NzE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYXB0dXJlLm0gKi87IH07CisJCTI1NDA0NjZGMTY2QUJCRUQwMEUxMzMwNCAvKiBaWENhcHR1cmVWaWV3Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0QTE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYXB0dXJlVmlldy5tICovOyB9OworCQkyNTQwNDY3MDE2NkFCQkVEMDBFMTMzMDQgLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0QzE2NkE5QTA4MDBFMTMzMDQgLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLm0gKi87IH07CisJCTI1NDA0NjcxMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEltYWdlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0RTE2NkE5QTA4MDBFMTMzMDQgLyogWlhJbWFnZS5tICovOyB9OworCQkyNTQwNDY3MjE2NkFCQkVEMDBFMTMzMDQgLyogWlhNYXRoVXRpbHMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREEyMTY2QTlDMEUwMEUxMzMwNCAvKiBaWE1hdGhVdGlscy5tICovOyB9OworCQkyNTQwNDY3MzE2NkFCQkVEMDBFMTMzMDQgLyogWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREE0MTY2QTlDMEUwMEUxMzMwNCAvKiBaWE1vbm9jaHJvbWVSZWN0YW5nbGVEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDY3NDE2NkFCQkVEMDBFMTMzMDQgLyogWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBNjE2NkE5QzBFMDBFMTMzMDQgLyogWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLm0gKi87IH07CisJCTI1NDA0Njc1MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQTkxNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2VuZXJpY0dGLm0gKi87IH07CisJCTI1NDA0Njc2MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRlBvbHkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREFCMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRlBvbHkubSAqLzsgfTsKKwkJMjU0MDQ2NzcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25EZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBRDE2NkE5QzBFMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkRlY29kZXIubSAqLzsgfTsKKwkJMjU0MDQ2NzgxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25FbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBRjE2NkE5QzBFMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkVuY29kZXIubSAqLzsgfTsKKwkJMjU0MDQ2NzkxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQml0QXJyYXkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREIxMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdEFycmF5Lm0gKi87IH07CisJCTI1NDA0NjdBMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEJpdE1hdHJpeC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0TWF0cml4Lm0gKi87IH07CisJCTI1NDA0NjdCMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjUxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0U291cmNlLm0gKi87IH07CisJCTI1NDA0NjdDMTY2QUJCRUQwMEUxMzMwNCAvKiBaWENoYXJhY3RlclNldEVDSS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjcxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQ2hhcmFjdGVyU2V0RUNJLm0gKi87IH07CisJCTI1NDA0NjdEMTY2QUJCRUQwMEUxMzMwNCAvKiBaWERlY29kZXJSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREI5MTY2QTlDMEUwMEUxMzMwNCAvKiBaWERlY29kZXJSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQ2N0UxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRGVmYXVsdEdyaWRTYW1wbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RCQjE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZWZhdWx0R3JpZFNhbXBsZXIubSAqLzsgfTsKKwkJMjU0MDQ2N0YxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRGV0ZWN0b3JSZXN1bHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREJEMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERldGVjdG9yUmVzdWx0Lm0gKi87IH07CisJCTI1NDA0NjgwMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEVDSS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQkYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRUNJLm0gKi87IH07CisJCTI1NDA0NjgxMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQzExNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLm0gKi87IH07CisJCTI1NDA0NjgyMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEdyaWRTYW1wbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDMzE2NkE5QzBFMDBFMTMzMDQgLyogWlhHcmlkU2FtcGxlci5tICovOyB9OworCQkyNTQwNDY4MzE2NkFCQkVEMDBFMTMzMDQgLyogWlhIeWJyaWRCaW5hcml6ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREM1MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEh5YnJpZEJpbmFyaXplci5tICovOyB9OworCQkyNTQwNDY4NDE2NkFCQkVEMDBFMTMzMDQgLyogWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQzcxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0ubSAqLzsgfTsKKwkJMjU0MDQ2ODUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYU3RyaW5nVXRpbHMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREM5MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzLm0gKi87IH07CisJCTI1NDA0Njg2MTY2QUJCRUQwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREY1MTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2ODcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERhdGFCbG9jay5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNERjcxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERhdGFCbG9jay5tICovOyB9OworCQkyNTQwNDY4ODE2NkFCQkVEMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNERjkxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2ODkxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREZCMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVyLm0gKi87IH07CisJCTI1NDA0NjhBMTY2QUJCRUQwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhWZXJzaW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGRDE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4VmVyc2lvbi5tICovOyB9OworCQkyNTQwNDY4QjE2NkFCQkVEMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGV0ZWN0b3IubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTAwMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDY4QzE2NkFCQkVEMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UwMjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4UmVhZGVyLm0gKi87IH07CisJCTI1NDA0NjhEMTY2QUJCRUQwMEUxMzMwNCAvKiBaWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UxNDE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZUJpdE1hdHJpeFBhcnNlci5tICovOyB9OworCQkyNTQwNDY4RTE2NkFCQkVEMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTE2MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tICovOyB9OworCQkyNTQwNDY4RjE2NkFCQkVEMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTE4MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2Rlci5tICovOyB9OworCQkyNTQwNDY5MDE2NkFCQkVEMDBFMTMzMDQgLyogWlhNYXhpQ29kZVJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMUExNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQ2OTExNjZBQkJFRDAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMjcxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDY5MjE2NkFCQkVEMDBFMTMzMDQgLyogWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTI5MTY2QTlEOEIwMEUxMzMwNCAvKiBaWE11bHRpRmluZGVyUGF0dGVybkZpbmRlci5tICovOyB9OworCQkyNTQwNDY5MzE2NkFCQkVEMDBFMTMzMDQgLyogWlhRUkNvZGVNdWx0aVJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMkIxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYUVJDb2RlTXVsdGlSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQ2OTQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMkQxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5tICovOyB9OworCQkyNTQwNDY5NTE2NkFCQkVEMDBFMTMzMDQgLyogWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UyRjE2NkE5RDhCMDBFMTMzMDQgLyogWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLm0gKi87IH07CisJCTI1NDA0Njk2MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0MTE2NkE5REYzMDBFMTMzMDQgLyogWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5tICovOyB9OworCQkyNTQwNDY5NzE2NkFCQkVEMDBFMTMzMDQgLyogWlhBSTAxMzEwM2RlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQzMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzMTAzZGVjb2Rlci5tICovOyB9OworCQkyNTQwNDY5ODE2NkFCQkVEMDBFMTMzMDQgLyogWlhBSTAxMzIweERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQ1MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzMjB4RGVjb2Rlci5tICovOyB9OworCQkyNTQwNDY5OTE2NkFCQkVEMDBFMTMzMDQgLyogWlhBSTAxMzkyeERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQ3MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzOTJ4RGVjb2Rlci5tICovOyB9OworCQkyNTQwNDY5QTE2NkFCQkVEMDBFMTMzMDQgLyogWlhBSTAxMzkzeERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQ5MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzOTN4RGVjb2Rlci5tICovOyB9OworCQkyNTQwNDY5QjE2NkFCQkVEMDBFMTMzMDQgLyogWlhBSTAxM3gweDF4RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNEIxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTN4MHgxeERlY29kZXIubSAqLzsgfTsKKwkJMjU0MDQ2OUMxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQUkwMTN4MHhEZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0RDE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxM3gweERlY29kZXIubSAqLzsgfTsKKwkJMjU0MDQ2OUQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQUkwMUFuZE90aGVyQUlzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0RjE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxQW5kT3RoZXJBSXMubSAqLzsgfTsKKwkJMjU0MDQ2OUUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQUkwMWRlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTUxMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDFkZWNvZGVyLm0gKi87IH07CisJCTI1NDA0NjlGMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEFJMDF3ZWlnaHREZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1MzE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxd2VpZ2h0RGVjb2Rlci5tICovOyB9OworCQkyNTQwNDZBMDE2NkFCQkVEMDBFMTMzMDQgLyogWlhBbnlBSURlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTU1MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFueUFJRGVjb2Rlci5tICovOyB9OworCQkyNTQwNDZBMTE2NkFCQkVEMDBFMTMzMDQgLyogWlhCbG9ja1BhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNTcxNjZBOURGMzAwRTEzMzA0IC8qIFpYQmxvY2tQYXJzZWRSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQ2QTIxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNTkxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5tICovOyB9OworCQkyNTQwNDZBMzE2NkFCQkVEMDBFMTMzMDQgLyogWlhEZWNvZGVkQ2hhci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNUIxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZENoYXIubSAqLzsgfTsKKwkJMjU0MDQ2QTQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRGVjb2RlZEluZm9ybWF0aW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1RDE2NkE5REYzMDBFMTMzMDQgLyogWlhEZWNvZGVkSW5mb3JtYXRpb24ubSAqLzsgfTsKKwkJMjU0MDQ2QTUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRGVjb2RlZE51bWVyaWMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTVGMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWROdW1lcmljLm0gKi87IH07CisJCTI1NDA0NkE2MTY2QUJCRUQwMEUxMzMwNCAvKiBaWERlY29kZWRPYmplY3QubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTYxMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWRPYmplY3QubSAqLzsgfTsKKwkJMjU0MDQ2QTcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRmllbGRQYXJzZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTYzMTY2QTlERjMwMEUxMzMwNCAvKiBaWEZpZWxkUGFyc2VyLm0gKi87IH07CisJCTI1NDA0NkE4MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEdlbmVyYWxBcHBJZERlY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTY1MTY2QTlERjMwMEUxMzMwNCAvKiBaWEdlbmVyYWxBcHBJZERlY29kZXIubSAqLzsgfTsKKwkJMjU0MDQ2QTkxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2NzE2NkE5REYzMDBFMTMzMDQgLyogWlhCaXRBcnJheUJ1aWxkZXIubSAqLzsgfTsKKwkJMjU0MDQ2QUExNjZBQkJFRDAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQYWlyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2OTE2NkE5REYzMDBFMTMzMDQgLyogWlhFeHBhbmRlZFBhaXIubSAqLzsgfTsKKwkJMjU0MDQ2QUIxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUlNTRXhwYW5kZWRSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTZCMTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU0V4cGFuZGVkUmVhZGVyLm0gKi87IH07CisJCTI1NDA0NkFDMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEFic3RyYWN0UlNTUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2RDE2NkE5REYzMDBFMTMzMDQgLyogWlhBYnN0cmFjdFJTU1JlYWRlci5tICovOyB9OworCQkyNTQwNDZBRDE2NkFCQkVEMDBFMTMzMDQgLyogWlhEYXRhQ2hhcmFjdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2RjE2NkE5REYzMDBFMTMzMDQgLyogWlhEYXRhQ2hhcmFjdGVyLm0gKi87IH07CisJCTI1NDA0NkFFMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFBhaXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTcxMTY2QTlERjMwMEUxMzMwNCAvKiBaWFBhaXIubSAqLzsgfTsKKwkJMjU0MDQ2QUYxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUlNTMTRSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTczMTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTUzE0UmVhZGVyLm0gKi87IH07CisJCTI1NDA0NkIwMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTc1MTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4ubSAqLzsgfTsKKwkJMjU0MDQ2QjExNjZBQkJFRDAwRTEzMzA0IC8qIFpYUlNTVXRpbHMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTc3MTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU1V0aWxzLm0gKi87IH07CisJCTI1NDA0NkIyMTY2QUJCRUQwMEUxMzMwNCAvKiBaWENvZGFCYXJSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTc5MTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGFCYXJSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQ2QjMxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQ29kYUJhcldyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFN0IxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kYUJhcldyaXRlci5tICovOyB9OworCQkyNTQwNDZCNDE2NkFCQkVEMDBFMTMzMDQgLyogWlhDb2RlMTI4UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U3RDE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMTI4UmVhZGVyLm0gKi87IH07CisJCTI1NDA0NkI1MTY2QUJCRUQwMEUxMzMwNCAvKiBaWENvZGUxMjhXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTdGMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUxMjhXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQ2QjYxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQ29kZTM5UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4MTE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQ2QjcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQ29kZTM5V3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4MzE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQ2QjgxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQ29kZTkzUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4NTE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlOTNSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQ2QjkxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRUFOMTNSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTg3MTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjEzUmVhZGVyLm0gKi87IH07CisJCTI1NDA0NkJBMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEVBTjEzV3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4OTE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU4xM1dyaXRlci5tICovOyB9OworCQkyNTQwNDZCQjE2NkFCQkVEMDBFMTMzMDQgLyogWlhFQU44UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4QjE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU44UmVhZGVyLm0gKi87IH07CisJCTI1NDA0NkJDMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRThEMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQ2QkQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOEYxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5tICovOyB9OworCQkyNTQwNDZCRTE2NkFCQkVEMDBFMTMzMDQgLyogWlhJVEZSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTkxMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURlJlYWRlci5tICovOyB9OworCQkyNTQwNDZCRjE2NkFCQkVEMDBFMTMzMDQgLyogWlhJVEZXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTkzMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURldyaXRlci5tICovOyB9OworCQkyNTQwNDZDMDE2NkFCQkVEMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTk1MTY2QTlERjMwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0T25lRFJlYWRlci5tICovOyB9OworCQkyNTQwNDZDMTE2NkFCQkVEMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOTcxNjZBOURGMzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRVUENFQU5SZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQ2QzIxNjZBQkJFRDAwRTEzMzA0IC8qIFpYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5OTE2NkE5REYzMDBFMTMzMDQgLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQ2QzMxNjZBQkJFRDAwRTEzMzA0IC8qIFpYT25lRFJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOUIxNjZBOURGMzAwRTEzMzA0IC8qIFpYT25lRFJlYWRlci5tICovOyB9OworCQkyNTQwNDZDNDE2NkFCQkVEMDBFMTMzMDQgLyogWlhVUENBUmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5RDE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENBUmVhZGVyLm0gKi87IH07CisJCTI1NDA0NkM1MTY2QUJCRUQwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTlGMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQ2QzYxNjZBQkJFRDAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uMlN1cHBvcnQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUExMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0Lm0gKi87IH07CisJCTI1NDA0NkM3MTY2QUJCRUQwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjVTdXBwb3J0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBMzE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5tICovOyB9OworCQkyNTQwNDZDODE2NkFCQkVEMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBNTE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0Lm0gKi87IH07CisJCTI1NDA0NkM5MTY2QUJCRUQwMEUxMzMwNCAvKiBaWFVQQ0VBTlJlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFQTcxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFOUmVhZGVyLm0gKi87IH07CisJCTI1NDA0NkNBMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFVQQ0VBTldyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFQTkxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFOV3JpdGVyLm0gKi87IH07CisJCTI1NDA0NkNCMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUFCMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIubSAqLzsgfTsKKwkJMjU0MDQ2Q0MxNjZBQkJFRDAwRTEzMzA0IC8qIFpYTW9kdWx1c0dGLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YxQzE2NkE5RUI1MDBFMTMzMDQgLyogWlhNb2R1bHVzR0YubSAqLzsgfTsKKwkJMjU0MDQ2Q0QxNjZBQkJFRDAwRTEzMzA0IC8qIFpYTW9kdWx1c1BvbHkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjFFMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNQb2x5Lm0gKi87IH07CisJCTI1NDA0NkNFMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YyMDE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5tICovOyB9OworCQkyNTQwNDZEMDE2NkFCQkVEMDBFMTMzMDQgLyogWlhQREY0MTdEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YyNDE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gKi87IH07CisJCTI1NDA0NkQyMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFBERjQxN0RldGVjdG9yLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YyOTE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDZEMzE2NkFCQkVEMDBFMTMzMDQgLyogWlhCYXJjb2RlTWF0cml4Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YyQzE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlTWF0cml4Lm0gKi87IH07CisJCTI1NDA0NkQ0MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEJhcmNvZGVSb3cubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjJFMTY2QTlFQjUwMEUxMzMwNCAvKiBaWEJhcmNvZGVSb3cubSAqLzsgfTsKKwkJMjU0MDQ2RDUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRGltZW5zaW9ucy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMzExNjZBOUVCNTAwRTEzMzA0IC8qIFpYRGltZW5zaW9ucy5tICovOyB9OworCQkyNTQwNDZENjE2NkFCQkVEMDBFMTMzMDQgLyogWlhQREY0MTcubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjMzMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxNy5tICovOyB9OworCQkyNTQwNDZENzE2NkFCQkVEMDBFMTMzMDQgLyogWlhQREY0MTdFcnJvckNvcnJlY3Rpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjM1MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5tICovOyB9OworCQkyNTQwNDZEODE2NkFCQkVEMDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YzNzE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLm0gKi87IH07CisJCTI1NDA0NkRBMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFBERjQxN1JlYWRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGM0IxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3UmVhZGVyLm0gKi87IH07CisJCTI1NDA0NkRCMTY2QUJCRUQwMEUxMzMwNCAvKiBaWERhdGFNYXNrLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y1RTE2NkE5RjJEMDBFMTMzMDQgLyogWlhEYXRhTWFzay5tICovOyB9OworCQkyNTQwNDZEQzE2NkFCQkVEMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNjAxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwubSAqLzsgfTsKKwkJMjU0MDQ2REQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRm9ybWF0SW5mb3JtYXRpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjYyMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZvcm1hdEluZm9ybWF0aW9uLm0gKi87IH07CisJCTI1NDA0NkRFMTY2QUJCRUQwMEUxMzMwNCAvKiBaWE1vZGUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjY0MTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1vZGUubSAqLzsgfTsKKwkJMjU0MDQ2REYxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2NjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVCaXRNYXRyaXhQYXJzZXIubSAqLzsgfTsKKwkJMjU0MDQ2RTAxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGF0YUJsb2NrLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2ODE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEYXRhQmxvY2subSAqLzsgfTsKKwkJMjU0MDQ2RTExNjZBQkJFRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNkExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tICovOyB9OworCQkyNTQwNDZFMjE2NkFCQkVEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y2QzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLm0gKi87IH07CisJCTI1NDA0NkUzMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjZFMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24ubSAqLzsgfTsKKwkJMjU0MDQ2RTQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNzExNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybi5tICovOyB9OworCQkyNTQwNDZFNTE2NkFCQkVEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3MzE2NkE5RjJEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLm0gKi87IH07CisJCTI1NDA0NkU2MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5GaW5kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjc1MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5GaW5kZXIubSAqLzsgfTsKKwkJMjU0MDQ2RTcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRmluZGVyUGF0dGVybkluZm8ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjc3MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5JbmZvLm0gKi87IH07CisJCTI1NDA0NkU4MTY2QUJCRUQwMEUxMzMwNCAvKiBaWFFSQ29kZURldGVjdG9yLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3OTE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZXRlY3Rvci5tICovOyB9OworCQkyNTQwNDZFOTE2NkFCQkVEMDBFMTMzMDQgLyogWlhRUkNvZGVGaW5kZXJQYXR0ZXJuLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3QjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVGaW5kZXJQYXR0ZXJuLm0gKi87IH07CisJCTI1NDA0NkVBMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEJsb2NrUGFpci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGN0UxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQmxvY2tQYWlyLm0gKi87IH07CisJCTI1NDA0NkVCMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEJ5dGVNYXRyaXgubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjgwMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEJ5dGVNYXRyaXgubSAqLzsgfTsKKwkJMjU0MDQ2RUMxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRW5jb2Rlci5tICovOyB9OworCQkyNTQwNDZFRDE2NkFCQkVEMDBFMTMzMDQgLyogWlhNYXNrVXRpbC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWFza1V0aWwubSAqLzsgfTsKKwkJMjU0MDQ2RUUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbC5tICovOyB9OworCQkyNTQwNDZFRjE2NkFCQkVEMDBFMTMzMDQgLyogWlhRUkNvZGUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjg4MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZS5tICovOyB9OworCQkyNTQwNDZGMDE2NkFCQkVEMDBFMTMzMDQgLyogWlhRUkNvZGVSZWFkZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjhBMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVJlYWRlci5tICovOyB9OworCQkyNTQwNDZGMTE2NkFCQkVEMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjhDMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVdyaXRlci5tICovOyB9OworCQkyNTQwNDZGMjE2NkFCQkVEMDBFMTMzMDQgLyogWlhCaW5hcml6ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkJEMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJpbmFyaXplci5tICovOyB9OworCQkyNTQwNDZGMzE2NkFCQkVEMDBFMTMzMDQgLyogWlhCaW5hcnlCaXRtYXAubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkJGMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJpbmFyeUJpdG1hcC5tICovOyB9OworCQkyNTQwNDZGNDE2NkFCQkVEMDBFMTMzMDQgLyogWlhEZWNvZGVIaW50cy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQzExNjZBOUZGQzAwRTEzMzA0IC8qIFpYRGVjb2RlSGludHMubSAqLzsgfTsKKwkJMjU0MDQ2RjUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRW5jb2RlSGludHMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkMzMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEVuY29kZUhpbnRzLm0gKi87IH07CisJCTI1NDA0NkY2MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEVycm9ycy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQzUxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRXJyb3JzLm0gKi87IH07CisJCTI1NDA0NkY3MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRDIxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTHVtaW5hbmNlU291cmNlLm0gKi87IH07CisJCTI1NDA0NkY4MTY2QUJCRUQwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0UmVhZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZENDE2NkFBMDA3MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFJlYWRlci5tICovOyB9OworCQkyNTQwNDZGOTE2NkFCQkVEMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFdyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRDYxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRXcml0ZXIubSAqLzsgfTsKKwkJMjU0MDQ2RkExNjZBQkJFRDAwRTEzMzA0IC8qIFpYUmVzdWx0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZEOTE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHQubSAqLzsgfTsKKwkJMjU0MDQ2RkIxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUmVzdWx0UG9pbnQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkRDMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50Lm0gKi87IH07CisJCTI1NDA0NkZEMTY2QUJDMTYwMEUxMzMwNCAvKiBRdWFydHpDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0NkZDMTY2QUJDMTYwMEUxMzMwNCAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLzsgfTsKKwkJMjU0MDQ2RkUxNjZBQkMyMTAwRTEzMzA0IC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQ2RkMxNjZBQkMxNjAwRTEzMzA0IC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovOyB9OworCQkyNTQwNDZGRjE2NkFCQzI2MDBFMTMzMDQgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDZGQzE2NkFCQzE2MDBFMTMzMDQgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTI1NDA0NzAxMTY2QUJDM0YwMEUxMzMwNCAvKiBRVEtpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwNDcwMDE2NkFCQzNGMDBFMTMzMDQgLyogUVRLaXQuZnJhbWV3b3JrICovOyB9OworCQkyNTQwNDcwMjE2NkFCQzQ2MDBFMTMzMDQgLyogUVRLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQ3MDAxNjZBQkMzRjAwRTEzMzA0IC8qIFFUS2l0LmZyYW1ld29yayAqLzsgfTsKKwkJMjU0MDQ3MDMxNjZBQkM0QjAwRTEzMzA0IC8qIFFUS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDA0NzAwMTY2QUJDM0YwMEUxMzMwNCAvKiBRVEtpdC5mcmFtZXdvcmsgKi87IH07CisJCTI1NDA0NzFCMTY2QUMyMTAwMEUxMzMwNCAvKiBBVkZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQ3MUExNjZBQzIxMDAwRTEzMzA0IC8qIEFWRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTI1NDA0NzFDMTY2QUMyMUQwMEUxMzMwNCAvKiBBVkZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDQ3MUExNjZBQzIxMDAwRTEzMzA0IC8qIEFWRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTI1NDI5OTZEMTZEMzMzMUYwMEQ0QzA0NSAvKiBaWFBsYW5hcllVVkx1bWluYW5jZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5NkIxNkQzMzMxRjAwRDRDMDQ1IC8qIFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQyOTk2RTE2RDMzMzFGMDBENEMwNDUgLyogWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OTZDMTZEMzMzMUYwMEQ0QzA0NSAvKiBaWFBsYW5hcllVVkx1bWluYW5jZVNvdXJjZS5tICovOyB9OworCQkyNTQyOTk2RjE2RDMzMzQxMDBENEMwNDUgLyogWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OTZCMTZEMzMzMUYwMEQ0QzA0NSAvKiBaWFBsYW5hcllVVkx1bWluYW5jZVNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5NzExNkQzMzM2MDAwRDRDMDQ1IC8qIFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk2QzE2RDMzMzFGMDBENEMwNDUgLyogWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UubSAqLzsgfTsKKwkJMjU0Mjk5NzIxNkQzMzM2MTAwRDRDMDQ1IC8qIFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk2QzE2RDMzMzFGMDBENEMwNDUgLyogWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UubSAqLzsgfTsKKwkJMjU0Mjk5NzUxNkQ0NkU4NTAwRDRDMDQ1IC8qIFpYRGltZW5zaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk3MzE2RDQ2RTg0MDBENEMwNDUgLyogWlhEaW1lbnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDI5OTc2MTZENDZFODUwMEQ0QzA0NSAvKiBaWERpbWVuc2lvbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5NzQxNkQ0NkU4NDAwRDRDMDQ1IC8qIFpYRGltZW5zaW9uLm0gKi87IH07CisJCTI1NDI5OTc3MTZENDZGRTkwMEQ0QzA0NSAvKiBaWERpbWVuc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5NzMxNkQ0NkU4NDAwRDRDMDQ1IC8qIFpYRGltZW5zaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQyOTk3OTE2RDQ2RkYxMDBENEMwNDUgLyogWlhEaW1lbnNpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OTc0MTZENDZFODQwMEQ0QzA0NSAvKiBaWERpbWVuc2lvbi5tICovOyB9OworCQkyNTQyOTk3QTE2RDQ2RkYyMDBENEMwNDUgLyogWlhEaW1lbnNpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OTc0MTZENDZFODQwMEQ0QzA0NSAvKiBaWERpbWVuc2lvbi5tICovOyB9OworCQkyNTQyOTk3RDE2RDQ3MEQ2MDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk3QjE2RDQ3MEQ2MDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQyOTk3RTE2RDQ3MEQ2MDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk3QzE2RDQ3MEQ2MDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyLm0gKi87IH07CisJCTI1NDI5OTdGMTZENDcwRTYwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OTdCMTZENDcwRDYwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDI5OTgxMTZENDcwRjMwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhXcml0ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OTdDMTZENDcwRDYwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhXcml0ZXIubSAqLzsgfTsKKwkJMjU0Mjk5ODIxNkQ0NzBGNDAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFdyaXRlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5N0MxNkQ0NzBENjAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFdyaXRlci5tICovOyB9OworCQkyNTQyOTk4NjE2RDQ3OEEwMDBENEMwNDUgLyogWlhBU0NJSUVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OTg0MTZENDc4QTAwMEQ0QzA0NSAvKiBaWEFTQ0lJRW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5ODcxNkQ0NzhBMDAwRDRDMDQ1IC8qIFpYQVNDSUlFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk4NDE2RDQ3OEEwMDBENEMwNDUgLyogWlhBU0NJSUVuY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDI5OTg5MTZENDc4QTAwMEQ0QzA0NSAvKiBaWEFTQ0lJRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5ODUxNkQ0NzhBMDAwRDRDMDQ1IC8qIFpYQVNDSUlFbmNvZGVyLm0gKi87IH07CisJCTI1NDI5OThBMTZENDc4QTAwMEQ0QzA0NSAvKiBaWEFTQ0lJRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5ODUxNkQ0NzhBMDAwRDRDMDQ1IC8qIFpYQVNDSUlFbmNvZGVyLm0gKi87IH07CisJCTI1NDI5OThCMTZENDc4QTAwMEQ0QzA0NSAvKiBaWEFTQ0lJRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5ODUxNkQ0NzhBMDAwRDRDMDQ1IC8qIFpYQVNDSUlFbmNvZGVyLm0gKi87IH07CisJCTI1NDI5OThGMTZENDdCQzAwMEQ0QzA0NSAvKiBaWEJhc2UyNTZFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk4RDE2RDQ3QkJGMDBENEMwNDUgLyogWlhCYXNlMjU2RW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5OTAxNkQ0N0JDMDAwRDRDMDQ1IC8qIFpYQmFzZTI1NkVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OThEMTZENDdCQkYwMEQ0QzA0NSAvKiBaWEJhc2UyNTZFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQyOTk5MjE2RDQ3QkMwMDBENEMwNDUgLyogWlhCYXNlMjU2RW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5OEUxNkQ0N0JCRjAwRDRDMDQ1IC8qIFpYQmFzZTI1NkVuY29kZXIubSAqLzsgfTsKKwkJMjU0Mjk5OTMxNkQ0N0JDMDAwRDRDMDQ1IC8qIFpYQmFzZTI1NkVuY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OThFMTZENDdCQkYwMEQ0QzA0NSAvKiBaWEJhc2UyNTZFbmNvZGVyLm0gKi87IH07CisJCTI1NDI5OTk0MTZENDdCQzAwMEQ0QzA0NSAvKiBaWEJhc2UyNTZFbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk4RTE2RDQ3QkJGMDBENEMwNDUgLyogWlhCYXNlMjU2RW5jb2Rlci5tICovOyB9OworCQkyNTQyOTk5OTE2RDQ4MkY5MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk5NzE2RDQ4MkY4MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQyOTk5QTE2RDQ4MkY5MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk5NzE2RDQ4MkY4MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQyOTk5QzE2RDQ4MkY5MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk5ODE2RDQ4MkY4MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLm0gKi87IH07CisJCTI1NDI5OTlEMTZENDgyRjkwMEQ0QzA0NSAvKiBaWEM0MEVuY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OTk4MTZENDgyRjgwMEQ0QzA0NSAvKiBaWEM0MEVuY29kZXIubSAqLzsgfTsKKwkJMjU0Mjk5QTExNkQ0ODc5ODAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFN5bWJvbEluZm8xNDQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OTlGMTZENDg3OTgwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQyOTlBMjE2RDQ4Nzk4MDBENEMwNDUgLyogWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5OUYxNkQ0ODc5ODAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFN5bWJvbEluZm8xNDQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDI5OUE0MTZENDg3OTgwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlBMDE2RDQ4Nzk4MDBENEMwNDUgLyogWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5tICovOyB9OworCQkyNTQyOTlBNTE2RDQ4Nzk4MDBENEMwNDUgLyogWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5QTAxNkQ0ODc5ODAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFN5bWJvbEluZm8xNDQubSAqLzsgfTsKKwkJMjU0Mjk5QTYxNkQ0ODc5ODAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFN5bWJvbEluZm8xNDQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUEwMTZENDg3OTgwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0Lm0gKi87IH07CisJCTI1NDI5OUE5MTZENDg4NjEwMEQ0QzA0NSAvKiBaWERlZmF1bHRQbGFjZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUE3MTZENDg4NjAwMEQ0QzA0NSAvKiBaWERlZmF1bHRQbGFjZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDI5OUFBMTZENDg4NjEwMEQ0QzA0NSAvKiBaWERlZmF1bHRQbGFjZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUE3MTZENDg4NjAwMEQ0QzA0NSAvKiBaWERlZmF1bHRQbGFjZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDI5OUFDMTZENDg4NjEwMEQ0QzA0NSAvKiBaWERlZmF1bHRQbGFjZW1lbnQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUE4MTZENDg4NjAwMEQ0QzA0NSAvKiBaWERlZmF1bHRQbGFjZW1lbnQubSAqLzsgfTsKKwkJMjU0Mjk5QUQxNkQ0ODg2MTAwRDRDMDQ1IC8qIFpYRGVmYXVsdFBsYWNlbWVudC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5QTgxNkQ0ODg2MDAwRDRDMDQ1IC8qIFpYRGVmYXVsdFBsYWNlbWVudC5tICovOyB9OworCQkyNTQyOTlBRTE2RDQ4ODYxMDBENEMwNDUgLyogWlhEZWZhdWx0UGxhY2VtZW50Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlBODE2RDQ4ODYwMDBENEMwNDUgLyogWlhEZWZhdWx0UGxhY2VtZW50Lm0gKi87IH07CisJCTI1NDI5OUIxMTZENEEzNjcwMEQ0QzA0NSAvKiBaWEVkaWZhY3RFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlBRjE2RDRBMzY3MDBENEMwNDUgLyogWlhFZGlmYWN0RW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5QjIxNkQ0QTM2NzAwRDRDMDQ1IC8qIFpYRWRpZmFjdEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUFGMTZENEEzNjcwMEQ0QzA0NSAvKiBaWEVkaWZhY3RFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQyOTlCNDE2RDRBMzY3MDBENEMwNDUgLyogWlhFZGlmYWN0RW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5QjAxNkQ0QTM2NzAwRDRDMDQ1IC8qIFpYRWRpZmFjdEVuY29kZXIubSAqLzsgfTsKKwkJMjU0Mjk5QjUxNkQ0QTM2NzAwRDRDMDQ1IC8qIFpYRWRpZmFjdEVuY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUIwMTZENEEzNjcwMEQ0QzA0NSAvKiBaWEVkaWZhY3RFbmNvZGVyLm0gKi87IH07CisJCTI1NDI5OUI2MTZENEEzNjcwMEQ0QzA0NSAvKiBaWEVkaWZhY3RFbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlCMDE2RDRBMzY3MDBENEMwNDUgLyogWlhFZGlmYWN0RW5jb2Rlci5tICovOyB9OworCQkyNTQyOTlCOTE2RDRBNUFBMDBENEMwNDUgLyogWlhFbmNvZGVyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5QjcxNkQ0QTVBOTAwRDRDMDQ1IC8qIFpYRW5jb2RlckNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDI5OUJBMTZENEE1QUEwMEQ0QzA0NSAvKiBaWEVuY29kZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlCNzE2RDRBNUE5MDBENEMwNDUgLyogWlhFbmNvZGVyQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5QkMxNkQ0QTVBQTAwRDRDMDQ1IC8qIFpYRW5jb2RlckNvbnRleHQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUI4MTZENEE1QTkwMEQ0QzA0NSAvKiBaWEVuY29kZXJDb250ZXh0Lm0gKi87IH07CisJCTI1NDI5OUJEMTZENEE1QUEwMEQ0QzA0NSAvKiBaWEVuY29kZXJDb250ZXh0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlCODE2RDRBNUE5MDBENEMwNDUgLyogWlhFbmNvZGVyQ29udGV4dC5tICovOyB9OworCQkyNTQyOTlCRTE2RDRBNUFBMDBENEMwNDUgLyogWlhFbmNvZGVyQ29udGV4dC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5QjgxNkQ0QTVBOTAwRDRDMDQ1IC8qIFpYRW5jb2RlckNvbnRleHQubSAqLzsgfTsKKwkJMjU0Mjk5QzExNkQ1QjhFNTAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5QkYxNkQ1QjhFNDAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5QzIxNkQ1QjhFNTAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5QkYxNkQ1QjhFNDAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5QzQxNkQ1QjhFNTAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5QzAxNkQ1QjhFNDAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5tICovOyB9OworCQkyNTQyOTlDNTE2RDVCOEU1MDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlDMDE2RDVCOEU0MDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLm0gKi87IH07CisJCTI1NDI5OUM2MTZENUI4RTUwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUMwMTZENUI4RTQwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb24ubSAqLzsgfTsKKwkJMjU0Mjk5QzkxNkQ1QkQ1NDAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5QzcxNkQ1QkQ1MzAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5Q0ExNkQ1QkQ1NDAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5QzcxNkQ1QkQ1MzAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5Q0MxNkQ1QkQ1NDAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5QzgxNkQ1QkQ1MzAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2Rlci5tICovOyB9OworCQkyNTQyOTlDRDE2RDVCRDU0MDBENEMwNDUgLyogWlhIaWdoTGV2ZWxFbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlDODE2RDVCRDUzMDBENEMwNDUgLyogWlhIaWdoTGV2ZWxFbmNvZGVyLm0gKi87IH07CisJCTI1NDI5OUNFMTZENUJENTQwMEQ0QzA0NSAvKiBaWEhpZ2hMZXZlbEVuY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUM4MTZENUJENTMwMEQ0QzA0NSAvKiBaWEhpZ2hMZXZlbEVuY29kZXIubSAqLzsgfTsKKwkJMjU0Mjk5RDExNkQ1Qzk2MTAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5Q0YxNkQ1Qzk2MDAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5RDIxNkQ1Qzk2MTAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5Q0YxNkQ1Qzk2MDAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5RDQxNkQ1Qzk2MTAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mby5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5RDAxNkQ1Qzk2MDAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mby5tICovOyB9OworCQkyNTQyOTlENTE2RDVDOTYxMDBENEMwNDUgLyogWlhTeW1ib2xJbmZvLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlEMDE2RDVDOTYwMDBENEMwNDUgLyogWlhTeW1ib2xJbmZvLm0gKi87IH07CisJCTI1NDI5OUQ2MTZENUM5NjEwMEQ0QzA0NSAvKiBaWFN5bWJvbEluZm8ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUQwMTZENUM5NjAwMEQ0QzA0NSAvKiBaWFN5bWJvbEluZm8ubSAqLzsgfTsKKwkJMjU0Mjk5RDkxNkQ1RDEyMDAwRDRDMDQ1IC8qIFpYU3ltYm9sU2hhcGVIaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlENzE2RDVEMTFFMDBENEMwNDUgLyogWlhTeW1ib2xTaGFwZUhpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDI5OURBMTZENUQxMjAwMEQ0QzA0NSAvKiBaWFN5bWJvbFNoYXBlSGludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5RDcxNkQ1RDExRTAwRDRDMDQ1IC8qIFpYU3ltYm9sU2hhcGVIaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTQyOTlFMDE2RDVEMjRFMDBENEMwNDUgLyogWlhTeW1ib2xTaGFwZUhpbnQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OURGMTZENUQyNEQwMEQ0QzA0NSAvKiBaWFN5bWJvbFNoYXBlSGludC5tICovOyB9OworCQkyNTQyOTlFMTE2RDVEMjRFMDBENEMwNDUgLyogWlhTeW1ib2xTaGFwZUhpbnQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OURGMTZENUQyNEQwMEQ0QzA0NSAvKiBaWFN5bWJvbFNoYXBlSGludC5tICovOyB9OworCQkyNTQyOTlFMjE2RDVEMjRFMDBENEMwNDUgLyogWlhTeW1ib2xTaGFwZUhpbnQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OURGMTZENUQyNEQwMEQ0QzA0NSAvKiBaWFN5bWJvbFNoYXBlSGludC5tICovOyB9OworCQkyNTQyOTlFNTE2RDVEODFBMDBENEMwNDUgLyogWlhUZXh0RW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5RTMxNkQ1RDgxODAwRDRDMDQ1IC8qIFpYVGV4dEVuY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NDI5OUU2MTZENUQ4MUEwMEQ0QzA0NSAvKiBaWFRleHRFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlFMzE2RDVEODE4MDBENEMwNDUgLyogWlhUZXh0RW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5RTgxNkQ1RDgxQTAwRDRDMDQ1IC8qIFpYVGV4dEVuY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUU0MTZENUQ4MTkwMEQ0QzA0NSAvKiBaWFRleHRFbmNvZGVyLm0gKi87IH07CisJCTI1NDI5OUU5MTZENUQ4MUEwMEQ0QzA0NSAvKiBaWFRleHRFbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlFNDE2RDVEODE5MDBENEMwNDUgLyogWlhUZXh0RW5jb2Rlci5tICovOyB9OworCQkyNTQyOTlFQTE2RDVEODFBMDBENEMwNDUgLyogWlhUZXh0RW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5RTQxNkQ1RDgxOTAwRDRDMDQ1IC8qIFpYVGV4dEVuY29kZXIubSAqLzsgfTsKKwkJMjU0Mjk5RUQxNkQ1RDk0QjAwRDRDMDQ1IC8qIFpYWDEyRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5RUIxNkQ1RDk0OTAwRDRDMDQ1IC8qIFpYWDEyRW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5RUUxNkQ1RDk0QjAwRDRDMDQ1IC8qIFpYWDEyRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5RUIxNkQ1RDk0OTAwRDRDMDQ1IC8qIFpYWDEyRW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU0Mjk5RjAxNkQ1RDk0QjAwRDRDMDQ1IC8qIFpYWDEyRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5RUMxNkQ1RDk0QTAwRDRDMDQ1IC8qIFpYWDEyRW5jb2Rlci5tICovOyB9OworCQkyNTQyOTlGMTE2RDVEOTRCMDBENEMwNDUgLyogWlhYMTJFbmNvZGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlFQzE2RDVEOTRBMDBENEMwNDUgLyogWlhYMTJFbmNvZGVyLm0gKi87IH07CisJCTI1NDI5OUYyMTZENUQ5NEIwMEQ0QzA0NSAvKiBaWFgxMkVuY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUVDMTZENUQ5NEEwMEQ0QzA0NSAvKiBaWFgxMkVuY29kZXIubSAqLzsgfTsKKwkJMjU0Mjk5RkIxNkQ1RENDMDAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFdyaXRlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlGNDE2RDVEQzhFMDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0Mjk5RkMxNkQ1RENDMzAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFdyaXRlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlGNDE2RDVEQzhFMDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MjlBMDAxNkQ1REZEODAwRDRDMDQ1IC8qIFpYRGVidWdQbGFjZW1lbnQubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUZGMTZENURGRDgwMEQ0QzA0NSAvKiBaWERlYnVnUGxhY2VtZW50Lm0gKi87IH07CisJCTI1NDI5QTAxMTZENURGRDgwMEQ0QzA0NSAvKiBaWERlYnVnUGxhY2VtZW50Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlGRjE2RDVERkQ4MDBENEMwNDUgLyogWlhEZWJ1Z1BsYWNlbWVudC5tICovOyB9OworCQkyNTQyOUEwNDE2RDVFMEVEMDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5QTAzMTZENUUwRUQwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tICovOyB9OworCQkyNTQyOUEwNTE2RDVFMEVEMDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5QTAzMTZENUUwRUQwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tICovOyB9OworCQkyNTQyOUEwODE2RDVFMjFDMDBENEMwNDUgLyogWlhIaWdoTGV2ZWxFbmNvZGVUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MjlBMDcxNkQ1RTIxQzAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2RlVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MjlBMDkxNkQ1RTIxQzAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2RlVGVzdENhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5QTA3MTZENUUyMUMwMEQ0QzA0NSAvKiBaWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlLm0gKi87IH07CisJCTI1NDI5QTBDMTZENUY0RTAwMEQ0QzA0NSAvKiBaWFBsYWNlbWVudFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOUEwQjE2RDVGNEUwMDBENEMwNDUgLyogWlhQbGFjZW1lbnRUZXN0Q2FzZS5tICovOyB9OworCQkyNTQyOUEwRDE2RDVGNEUwMDBENEMwNDUgLyogWlhQbGFjZW1lbnRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MjlBMEIxNkQ1RjRFMDAwRDRDMDQ1IC8qIFpYUGxhY2VtZW50VGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MjlBMTAxNkQ1RjY2RDAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mb1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOUEwRjE2RDVGNjZEMDBENEMwNDUgLyogWlhTeW1ib2xJbmZvVGVzdENhc2UubSAqLzsgfTsKKwkJMjU0MjlBMTExNkQ1RjY2RDAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mb1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOUEwRjE2RDVGNjZEMDBENEMwNDUgLyogWlhTeW1ib2xJbmZvVGVzdENhc2UubSAqLzsgfTsKKwkJMjU1QjlEQjExNkZGQ0RFMDAwRUVFRTYxIC8qIFpYRGF0YU1hdHJpeEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OThDMTZENDc4RjgwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVCOURCMjE2RkZDREUxMDBFRUVFNjEgLyogWlhEYXRhTWF0cml4RW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5OEMxNkQ0NzhGODAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeEVuY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODFFMTgxNDNBMzkwMEEwM0EyOCAvKiBSU1NFeHBhbmRlZFN0YWNrZWRJbnRlcm5hbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNUZFNUQzRjE2RDBCODRDMDA4MjZDREIgLyogUlNTRXhwYW5kZWRTdGFja2VkSW50ZXJuYWxUZXN0Q2FzZS5tICovOyB9OworCQkyNTVFNDgxRjE4MTQzQTM5MDBBMDNBMjggLyogVGVzdENhc2VVdGlsLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNUZFNUQ0MjE2RDBCOEIyMDA4MjZDREIgLyogVGVzdENhc2VVdGlsLm0gKi87IH07CisJCTI1NUU0ODIwMTgxNDNBNEEwMEEwM0EyOCAvKiBaWEM0MEVuY29kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OTk4MTZENDgyRjgwMEQ0QzA0NSAvKiBaWEM0MEVuY29kZXIubSAqLzsgfTsKKwkJMjU1RTQ4MjExODE0M0E4ODAwQTAzQTI4IC8qIFpYQXp0ZWNEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0NFRTE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODIyMTgxNDNBODgwMEEwM0EyOCAvKiBaWEF6dGVjRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzQ0YxMTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGV0ZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODIzMTgxNDNBODgwMEEwM0EyOCAvKiBaWEF6dGVjQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUwNEQ5Q0QxNkZGRDJFMjAwREY4ODgyIC8qIFpYQXp0ZWNDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDgyNDE4MTQzQTg4MDBBMDNBMjggLyogWlhBenRlY0VuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MDREOURBMTZGRkQ0Q0QwMERGODg4MiAvKiBaWEF6dGVjRW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4MjUxODE0M0E4ODAwQTAzQTI4IC8qIFpYQXp0ZWNEZXRlY3RvclJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDRjMxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3RvclJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4MjYxODE0M0E4ODAwQTAzQTI4IC8qIFpYQXp0ZWNSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzQ0Y1MTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDgyNzE4MTQzQTg4MDBBMDNBMjggLyogWlhBenRlY1dyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCMzIxN0ZEMUVDMDAwQTcxQzQ1IC8qIFpYQXp0ZWNXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODI4MTgxNDNBODgwMEEwM0EyOCAvKiBaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwMTE2NkE5QTA4MDBFMTMzMDQgLyogWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4MjkxODE0M0E4ODAwQTAzQTI4IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDMxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4MkExODE0M0E4ODAwQTAzQTI4IC8qIFpYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDA1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDgyQjE4MTQzQTg4MDBBMDNBMjggLyogWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMDcxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODJDMTgxNDNBODgwMEEwM0EyOCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDA5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODJEMTgxNDNBODgwMEEwM0EyOCAvKiBaWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QwQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4MkUxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDBEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDgyRjE4MTQzQTg4MDBBMDNBMjggLyogWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDBGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4MzAxODE0M0E4ODAwQTAzQTI4IC8qIFpYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxMTE2NkE5QTA4MDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODMxMTgxNDNBODgwMEEwM0EyOCAvKiBaWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxMzE2NkE5QTA4MDBFMTMzMDQgLyogWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4MzIxODE0M0E4ODAwQTAzQTI4IC8qIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxNTE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODMzMTgxNDNBODgwMEEwM0EyOCAvKiBaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMTcxNjZBOUEwODAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDgzNDE4MTQzQTg4MDBBMDNBMjggLyogWlhHZW9QYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDE5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEdlb1BhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4MzUxODE0M0E4ODAwQTAzQTI4IC8qIFpYR2VvUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QxQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9SZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODM2MTgxNDNBODgwMEEwM0EyOCAvKiBaWElTQk5QYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDFEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODM3MTgxNDNBODgwMEEwM0EyOCAvKiBaWElTQk5SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDFGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5SZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODM4MTgxNDNBODgwMEEwM0EyOCAvKiBaWFBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMjExNjZBOUEwODAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDgzOTE4MTQzQTg4MDBBMDNBMjggLyogWlhQYXJzZWRSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyMzE2NkE5QTA4MDBFMTMzMDQgLyogWlhQYXJzZWRSZXN1bHRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDgzQTE4MTQzQTg4MDBBMDNBMjggLyogWlhQcm9kdWN0UGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyNDE2NkE5QTA4MDBFMTMzMDQgLyogWlhQcm9kdWN0UGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDgzQjE4MTQzQTg4MDBBMDNBMjggLyogWlhQcm9kdWN0UmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyNjE2NkE5QTA4MDBFMTMzMDQgLyogWlhQcm9kdWN0UmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDgzQzE4MTQzQTg4MDBBMDNBMjggLyogWlhSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDI4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4M0QxODE0M0E4ODAwQTAzQTI4IC8qIFpYU01TTU1TUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyQTE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODNFMTgxNDNBODgwMEEwM0EyOCAvKiBaWFNNU1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMkMxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01TUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDgzRjE4MTQzQTg4MDBBMDNBMjggLyogWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QyRTE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg0MDE4MTQzQTg4MDBBMDNBMjggLyogWlhTTVRQUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzMDE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVRQUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg0MTE4MTQzQTg4MDBBMDNBMjggLyogWlhUZWxQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDMyMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRlbFBhcnNlZFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NDIxODE0M0E4ODAwQTAzQTI4IC8qIFpYVGVsUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0QzNDE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZWxSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODQzMTgxNDNBODgwMEEwM0EyOCAvKiBaWFRleHRQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDM2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODQ0MTgxNDNBODgwMEEwM0EyOCAvKiBaWFVSSVBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEMzgxNjZBOUEwODAwRTEzMzA0IC8qIFpYVVJJUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg0NTE4MTQzQTg4MDBBMDNBMjggLyogWlhVUklSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDNBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVJlc3VsdFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NDYxODE0M0E4ODAwQTAzQTI4IC8qIFpYVVJMVE9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDNDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSTFRPUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg0NzE4MTQzQTg4MDBBMDNBMjggLyogWlhWQ2FyZFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEM0UxNjZBOUEwODAwRTEzMzA0IC8qIFpYVkNhcmRSZXN1bHRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODQ4MTgxNDNBODgwMEEwM0EyOCAvKiBaWFZFdmVudFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENDAxNjZBOUEwODAwRTEzMzA0IC8qIFpYVkV2ZW50UmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg0OTE4MTQzQTg4MDBBMDNBMjggLyogWlhXaWZpUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0MjE2NkE5QTA4MDBFMTMzMDQgLyogWlhXaWZpUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg0QTE4MTQzQTg4MDBBMDNBMjggLyogWlhXaWZpUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0NDE2NkE5QTA4MDBFMTMzMDQgLyogWlhXaWZpUmVzdWx0UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg0QjE4MTQzQTg4MDBBMDNBMjggLyogWlhDYXB0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0NjE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYXB0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg0QzE4MTQzQTg4MDBBMDNBMjggLyogWlhDYXB0dXJlRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDQ4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmVEZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NEQxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ2FwdHVyZVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDQ5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmVWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg0RTE4MTQzQTg4MDBBMDNBMjggLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Q0QjE2NkE5QTA4MDBFMTMzMDQgLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg0RjE4MTQzQTg4MDBBMDNBMjggLyogWlhJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNENEQxNjZBOUEwODAwRTEzMzA0IC8qIFpYSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODUwMTgxNDNBODgwMEEwM0EyOCAvKiBaWFZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRDRGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODUxMTgxNDNBODgwMEEwM0EyOCAvKiBaWE1hdGhVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQTExNjZBOUMwRTAwRTEzMzA0IC8qIFpYTWF0aFV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg1MjE4MTQzQTg4MDBBMDNBMjggLyogWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREEzMTY2QTlDMEUwMEUxMzMwNCAvKiBaWE1vbm9jaHJvbWVSZWN0YW5nbGVEZXRlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NTMxODE0M0E4ODAwQTAzQTI4IC8qIFpYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQTUxNjZBOUMwRTAwRTEzMzA0IC8qIFpYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NTQxODE0M0E4ODAwQTAzQTI4IC8qIFpYR2VuZXJpY0dGLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RBODE2NkE5QzBFMDBFMTMzMDQgLyogWlhHZW5lcmljR0YuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODU1MTgxNDNBODgwMEEwM0EyOCAvKiBaWEdlbmVyaWNHRlBvbHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREFBMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRlBvbHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODU2MTgxNDNBODgwMEEwM0EyOCAvKiBaWFJlZWRTb2xvbW9uRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQUMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25EZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg1NzE4MTQzQTg4MDBBMDNBMjggLyogWlhSZWVkU29sb21vbkVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREFFMTY2QTlDMEUwMEUxMzMwNCAvKiBaWFJlZWRTb2xvbW9uRW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NTgxODE0M0E4ODAwQTAzQTI4IC8qIFpYQml0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREIwMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg1OTE4MTQzQTg4MDBBMDNBMjggLyogWlhCaXRNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREIyMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdE1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NUExODE0M0E4ODAwQTAzQTI4IC8qIFpYQml0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RCNDE2NkE5QzBFMDBFMTMzMDQgLyogWlhCaXRTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODVCMTgxNDNBODgwMEEwM0EyOCAvKiBaWENoYXJhY3RlclNldEVDSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNEQjYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQ2hhcmFjdGVyU2V0RUNJLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg1QzE4MTQzQTg4MDBBMDNBMjggLyogWlhEZWNvZGVyUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RCODE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZWNvZGVyUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg1RDE4MTQzQTg4MDBBMDNBMjggLyogWlhEZWZhdWx0R3JpZFNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREJBMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERlZmF1bHRHcmlkU2FtcGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NUUxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGV0ZWN0b3JSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREJDMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERldGVjdG9yUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg1RjE4MTQzQTg4MDBBMDNBMjggLyogWlhFQ0kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREJFMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEVDSS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NjAxODE0M0E4ODAwQTAzQTI4IC8qIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDMDE2NkE5QzBFMDBFMTMzMDQgLyogWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODYxMTgxNDNBODgwMEEwM0EyOCAvKiBaWEdyaWRTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDMjE2NkE5QzBFMDBFMTMzMDQgLyogWlhHcmlkU2FtcGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NjIxODE0M0E4ODAwQTAzQTI4IC8qIFpYSHlicmlkQmluYXJpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDNDE2NkE5QzBFMDBFMTMzMDQgLyogWlhIeWJyaWRCaW5hcml6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODYzMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RDNjE2NkE5QzBFMDBFMTMzMDQgLyogWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NjQxODE0M0E4ODAwQTAzQTI4IC8qIFpYU3RyaW5nVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREM4MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg2NTE4MTQzQTg4MDBBMDNBMjggLyogWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGNDE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg2NjE4MTQzQTg4MDBBMDNBMjggLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGNjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg2NzE4MTQzQTg4MDBBMDNBMjggLyogWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNERjgxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODY4MTgxNDNBODgwMEEwM0EyOCAvKiBaWERhdGFNYXRyaXhEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0RGQTE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NjkxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGF0YU1hdHJpeFZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREZDMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhWZXJzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg2QTE4MTQzQTg4MDBBMDNBMjggLyogWlhEYXRhTWF0cml4RGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzREZGMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZXRlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NkIxODE0M0E4ODAwQTAzQTI4IC8qIFpYQVNDSUlFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk4NDE2RDQ3OEEwMDBENEMwNDUgLyogWlhBU0NJSUVuY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODZDMTgxNDNBODgwMEEwM0EyOCAvKiBaWEJhc2UyNTZFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk4RDE2RDQ3QkJGMDBENEMwNDUgLyogWlhCYXNlMjU2RW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NkQxODE0M0E4ODAwQTAzQTI4IC8qIFpYQzQwRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5OTcxNkQ0ODJGODAwRDRDMDQ1IC8qIFpYQzQwRW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NkUxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGF0YU1hdHJpeEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OThDMTZENDc4RjgwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg2RjE4MTQzQTg4MDBBMDNBMjggLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlCRjE2RDVCOEU0MDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg3MDE4MTQzQTg4MDBBMDNBMjggLyogWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5OUYxNkQ0ODc5ODAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFN5bWJvbEluZm8xNDQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODcxMTgxNDNBODgwMEEwM0EyOCAvKiBaWERlZmF1bHRQbGFjZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUE3MTZENDg4NjAwMEQ0QzA0NSAvKiBaWERlZmF1bHRQbGFjZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODcyMTgxNDNBODgwMEEwM0EyOCAvKiBaWEVkaWZhY3RFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlBRjE2RDRBMzY3MDBENEMwNDUgLyogWlhFZGlmYWN0RW5jb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NzMxODE0M0E4ODAwQTAzQTI4IC8qIFpYRW5jb2RlckNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUI3MTZENEE1QTkwMEQ0QzA0NSAvKiBaWEVuY29kZXJDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg3NDE4MTQzQTg4MDBBMDNBMjggLyogWlhIaWdoTGV2ZWxFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlDNzE2RDVCRDUzMDBENEMwNDUgLyogWlhIaWdoTGV2ZWxFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg3NTE4MTQzQTg4MDBBMDNBMjggLyogWlhTeW1ib2xJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlDRjE2RDVDOTYwMDBENEMwNDUgLyogWlhTeW1ib2xJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg3NjE4MTQzQTg4MDBBMDNBMjggLyogWlhTeW1ib2xTaGFwZUhpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUQ3MTZENUQxMUUwMEQ0QzA0NSAvKiBaWFN5bWJvbFNoYXBlSGludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4NzcxODE0M0E4ODAwQTAzQTI4IC8qIFpYVGV4dEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OUUzMTZENUQ4MTgwMEQ0QzA0NSAvKiBaWFRleHRFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg3ODE4MTQzQTg4MDBBMDNBMjggLyogWlhYMTJFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTlFQjE2RDVEOTQ5MDBENEMwNDUgLyogWlhYMTJFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg3OTE4MTQzQTg4MDBBMDNBMjggLyogWlhEYXRhTWF0cml4UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UwMTE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4UmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg3QTE4MTQzQTg4MDBBMDNBMjggLyogWlhEYXRhTWF0cml4V3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyOTk3QjE2RDQ3MEQ2MDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg3QjE4MTQzQTg4MDBBMDNBMjggLyogWlhNYXhpQ29kZUJpdE1hdHJpeFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMTMxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODdDMTgxNDNBODgwMEEwM0EyOCAvKiBaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFMTUxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg3RDE4MTQzQTg4MDBBMDNBMjggLyogWlhNYXhpQ29kZURlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTE3MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4N0UxODE0M0E4ODAwQTAzQTI4IC8qIFpYTWF4aUNvZGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTE5MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg3RjE4MTQzQTg4MDBBMDNBMjggLyogWlhNdWx0aURldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UyNjE2NkE5RDhCMDBFMTMzMDQgLyogWlhNdWx0aURldGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg4MDE4MTQzQTg4MDBBMDNBMjggLyogWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTI4MTY2QTlEOEIwMEUxMzMwNCAvKiBaWE11bHRpRmluZGVyUGF0dGVybkZpbmRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4ODExODE0M0E4ODAwQTAzQTI4IC8qIFpYUVJDb2RlTXVsdGlSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTJBMTY2QTlEOEIwMEUxMzMwNCAvKiBaWFFSQ29kZU11bHRpUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg4MjE4MTQzQTg4MDBBMDNBMjggLyogWlhCeVF1YWRyYW50UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UyQzE2NkE5RDhCMDBFMTMzMDQgLyogWlhCeVF1YWRyYW50UmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg4MzE4MTQzQTg4MDBBMDNBMjggLyogWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0UyRTE2NkE5RDhCMDBFMTMzMDQgLyogWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg4NDE4MTQzQTg4MDBBMDNBMjggLyogWlhNdWx0aXBsZUJhcmNvZGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTMwMTY2QTlEOEIwMEUxMzMwNCAvKiBaWE11bHRpcGxlQmFyY29kZVJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4ODUxODE0M0E4ODAwQTAzQTI4IC8qIFpYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQwMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg4NjE4MTQzQTg4MDBBMDNBMjggLyogWlhBSTAxMzEwM2RlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQyMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzMTAzZGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4ODcxODE0M0E4ODAwQTAzQTI4IC8qIFpYQUkwMTMyMHhEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0NDE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzIweERlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODg4MTgxNDNBODgwMEEwM0EyOCAvKiBaWEFJMDEzOTJ4RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNDYxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTM5MnhEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg4OTE4MTQzQTg4MDBBMDNBMjggLyogWlhBSTAxMzkzeERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQ4MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzOTN4RGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4OEExODE0M0E4ODAwQTAzQTI4IC8qIFpYQUkwMTN4MHgxeERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTRBMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzeDB4MXhEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg4QjE4MTQzQTg4MDBBMDNBMjggLyogWlhBSTAxM3gweERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTRDMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzeDB4RGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4OEMxODE0M0E4ODAwQTAzQTI4IC8qIFpYQUkwMUFuZE90aGVyQUlzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0RTE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxQW5kT3RoZXJBSXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODhEMTgxNDNBODgwMEEwM0EyOCAvKiBaWEFJMDFkZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1MDE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxZGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4OEUxODE0M0E4ODAwQTAzQTI4IC8qIFpYQUkwMXdlaWdodERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTUyMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDF3ZWlnaHREZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg4RjE4MTQzQTg4MDBBMDNBMjggLyogWlhBbnlBSURlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTU0MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFueUFJRGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4OTAxODE0M0E4ODAwQTAzQTI4IC8qIFpYQmxvY2tQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTU2MTY2QTlERjMwMEUxMzMwNCAvKiBaWEJsb2NrUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg5MTE4MTQzQTg4MDBBMDNBMjggLyogWlhDdXJyZW50UGFyc2luZ1N0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1ODE2NkE5REYzMDBFMTMzMDQgLyogWlhDdXJyZW50UGFyc2luZ1N0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg5MjE4MTQzQTg4MDBBMDNBMjggLyogWlhEZWNvZGVkQ2hhci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNUExNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZENoYXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODkzMTgxNDNBODgwMEEwM0EyOCAvKiBaWERlY29kZWRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNUMxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZEluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg5NDE4MTQzQTg4MDBBMDNBMjggLyogWlhEZWNvZGVkTnVtZXJpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNUUxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZE51bWVyaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODk1MTgxNDNBODgwMEEwM0EyOCAvKiBaWERlY29kZWRPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTYwMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWRPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODk2MTgxNDNBODgwMEEwM0EyOCAvKiBaWEZpZWxkUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2MjE2NkE5REYzMDBFMTMzMDQgLyogWlhGaWVsZFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4OTcxODE0M0E4ODAwQTAzQTI4IC8qIFpYR2VuZXJhbEFwcElkRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNjQxNjZBOURGMzAwRTEzMzA0IC8qIFpYR2VuZXJhbEFwcElkRGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4OTgxODE0M0E4ODAwQTAzQTI4IC8qIFpYQml0QXJyYXlCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2NjE2NkE5REYzMDBFMTMzMDQgLyogWlhCaXRBcnJheUJ1aWxkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODk5MTgxNDNBODgwMEEwM0EyOCAvKiBaWEV4cGFuZGVkUGFpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNjgxNjZBOURGMzAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQYWlyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg5QTE4MTQzQTg4MDBBMDNBMjggLyogWlhFeHBhbmRlZFJvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjVGRTVEMzExNkQwQUZFRDAwODI2Q0RCIC8qIFpYRXhwYW5kZWRSb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0ODlCMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJTU0V4cGFuZGVkUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2QTE2NkE5REYzMDBFMTMzMDQgLyogWlhSU1NFeHBhbmRlZFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4OUMxODE0M0E4ODAwQTAzQTI4IC8qIFpYQWJzdHJhY3RSU1NSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTZDMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFic3RyYWN0UlNTUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg5RDE4MTQzQTg4MDBBMDNBMjggLyogWlhEYXRhQ2hhcmFjdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2RTE2NkE5REYzMDBFMTMzMDQgLyogWlhEYXRhQ2hhcmFjdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg5RTE4MTQzQTg4MDBBMDNBMjggLyogWlhQYWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U3MDE2NkE5REYzMDBFMTMzMDQgLyogWlhQYWlyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDg5RjE4MTQzQTg4MDBBMDNBMjggLyogWlhSU1MxNFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNzIxNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTMTRSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEEwMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTc0MTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEExMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJTU1V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U3NjE2NkE5REYzMDBFMTMzMDQgLyogWlhSU1NVdGlscy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QTIxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ29kYUJhclJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNzgxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kYUJhclJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QTMxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ29kYUJhcldyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFN0ExNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kYUJhcldyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QTQxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ29kZTEyOFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFN0MxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTEyOFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QTUxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ29kZTEyOFdyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFN0UxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTEyOFdyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QTYxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ29kZTM5UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4MDE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEE3MTgxNDNBODgwMEEwM0EyOCAvKiBaWENvZGUzOVdyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFODIxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTM5V3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhBODE4MTQzQTg4MDBBMDNBMjggLyogWlhDb2RlOTNSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTg0MTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGU5M1JlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QTkxODE0M0E4ODAwQTAzQTI4IC8qIFpYRUFOMTNSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTg2MTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjEzUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhBQTE4MTQzQTg4MDBBMDNBMjggLyogWlhFQU4xM1dyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFODgxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOMTNXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEFCMTgxNDNBODgwMEEwM0EyOCAvKiBaWEVBTjhSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRThBMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjhSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEFDMTgxNDNBODgwMEEwM0EyOCAvKiBaWEVBTjhXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRThDMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEFEMTgxNDNBODgwMEEwM0EyOCAvKiBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRThFMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEFFMTgxNDNBODgwMEEwM0EyOCAvKiBaWElURlJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOTAxNjZBOURGMzAwRTEzMzA0IC8qIFpYSVRGUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhBRjE4MTQzQTg4MDBBMDNBMjggLyogWlhJVEZXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTkyMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURldyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QjAxODE0M0E4ODAwQTAzQTI4IC8qIFpYTXVsdGlGb3JtYXRPbmVEUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5NDE2NkE5REYzMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEIxMTgxNDNBODgwMEEwM0EyOCAvKiBaWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5NjE2NkE5REYzMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QjIxODE0M0E4ODAwQTAzQTI4IC8qIFpYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5ODE2NkE5REYzMDBFMTMzMDQgLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEIzMTgxNDNBODgwMEEwM0EyOCAvKiBaWE9uZURSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTlBMTY2QTlERjMwMEUxMzMwNCAvKiBaWE9uZURSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEI0MTgxNDNBODgwMEEwM0EyOCAvKiBaWFVQQ0FSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTlDMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0FSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEI1MTgxNDNBODgwMEEwM0EyOCAvKiBaWFVQQ0FXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTlFMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEI2MTgxNDNBODgwMEEwM0EyOCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBMDE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QjcxODE0M0E4ODAwQTAzQTI4IC8qIFpYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUEyMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjVTdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhCODE4MTQzQTg4MDBBMDNBMjggLyogWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBNDE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhCOTE4MTQzQTg4MDBBMDNBMjggLyogWlhVUENFQU5SZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUE2MTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTlJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QkExODE0M0E4ODAwQTAzQTI4IC8qIFpYVVBDRUFOV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBODE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5Xcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEJCMTgxNDNBODgwMEEwM0EyOCAvKiBaWFVQQ0VSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUFBMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEJDMTgxNDNBODgwMEEwM0EyOCAvKiBaWE1vZHVsdXNHRi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMUIxNjZBOUVCNTAwRTEzMzA0IC8qIFpYTW9kdWx1c0dGLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhCRDE4MTQzQTg4MDBBMDNBMjggLyogWlhNb2R1bHVzUG9seS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMUQxNjZBOUVCNTAwRTEzMzA0IC8qIFpYTW9kdWx1c1BvbHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEJFMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YxRjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QzAxODE0M0E4ODAwQTAzQTI4IC8qIFpYUERGNDE3QmFyY29kZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI1QzE3RkU1RTRGMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEMxMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0JhcmNvZGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCNjQxN0ZFNUYyRTAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhDMjE4MTQzQTg4MDBBMDNBMjggLyogWlhQREY0MTdCb3VuZGluZ0JveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxOUFCNkMxN0ZFNjBFNzAwQTcxQzQ1IC8qIFpYUERGNDE3Qm91bmRpbmdCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEMzMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0NvZGV3b3JkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI3NDE3RkU2NDkwMDBBNzFDNDUgLyogWlhQREY0MTdDb2Rld29yZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QzQxODE0M0E4ODAwQTAzQTI4IC8qIFpYUERGNDE3Q29kZXdvcmREZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI3NzE4MDBERUMzMDA3NzIzOTIgLyogWlhQREY0MTdDb2Rld29yZERlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEM1MTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjIzMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEM2MTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUzODlCNUUxN0ZGQzg0MzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhDNzE4MTQzQTg4MDBBMDNBMjggLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1Mzg5QjY3MTdGRkM5ODEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4QzgxODE0M0E4ODAwQTAzQTI4IC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI2RjE3RkZDQTI3MDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEM5MTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN1NjYW5uaW5nRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUzODlCN0YxODAwRTM1QjAwNzcyMzkyIC8qIFpYUERGNDE3U2Nhbm5pbmdEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhDQTE4MTQzQTg4MDBBMDNBMjggLyogWlhQREY0MTdEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMjgxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RGV0ZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OENCMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0RldGVjdG9yUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTM4OUI4NzE4MDEwQjlBMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4Q0MxODE0M0E4ODAwQTAzQTI4IC8qIFpYQmFyY29kZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMkIxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQmFyY29kZU1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4Q0QxODE0M0E4ODAwQTAzQTI4IC8qIFpYQmFyY29kZVJvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMkQxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQmFyY29kZVJvdy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4Q0UxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ29tcGFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMkYxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQ29tcGFjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4Q0YxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGltZW5zaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMzAxNjZBOUVCNTAwRTEzMzA0IC8qIFpYRGltZW5zaW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RDAxODE0M0E4ODAwQTAzQTI4IC8qIFpYUERGNDE3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YzMjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEQxMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMzQxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RXJyb3JDb3JyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhEMjE4MTQzQTg4MDBBMDNBMjggLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YzNjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhEMzE4MTQzQTg4MDBBMDNBMjggLyogWlhQREY0MTdDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MTlBQjQyMTdGRTU1NEQwMEE3MUM0NSAvKiBaWFBERjQxN0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RDQxODE0M0E4ODAwQTAzQTI4IC8qIFpYUERGNDE3UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YzQTE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEQ1MTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN1Jlc3VsdE1ldGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUI0NjE3RkU1QzFGMDBBNzFDNDUgLyogWlhQREY0MTdSZXN1bHRNZXRhZGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RDYxODE0M0E4ODAwQTAzQTI4IC8qIFpYUERGNDE3V3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTE5QUIzQTE3RkQxRUU0MDBBNzFDNDUgLyogWlhQREY0MTdXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEQ3MTgxNDNBODgwMEEwM0EyOCAvKiBaWERhdGFNYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y1RDE2NkE5RjJEMDBFMTMzMDQgLyogWlhEYXRhTWFzay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RDgxODE0M0E4ODAwQTAzQTI4IC8qIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjVGMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEVycm9yQ29ycmVjdGlvbkxldmVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhEOTE4MTQzQTg4MDBBMDNBMjggLyogWlhGb3JtYXRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNjExNjZBOUYyRDAwRTEzMzA0IC8qIFpYRm9ybWF0SW5mb3JtYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OERBMTgxNDNBODgwMEEwM0EyOCAvKiBaWE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjYzMTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OERCMTgxNDNBODgwMEEwM0EyOCAvKiBaWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNjUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhEQzE4MTQzQTg4MDBBMDNBMjggLyogWlhRUkNvZGVEYXRhQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjY3MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZURhdGFCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4REQxODE0M0E4ODAwQTAzQTI4IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNjkxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4REUxODE0M0E4ODAwQTAzQTI4IC8qIFpYUVJDb2RlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNkIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4REYxODE0M0E4ODAwQTAzQTI4IC8qIFpYUVJDb2RlVmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNkQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlVmVyc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RTAxODE0M0E4ODAwQTAzQTI4IC8qIFpYQWxpZ25tZW50UGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNzAxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RTExODE0M0E4ODAwQTAzQTI4IC8qIFpYQWxpZ25tZW50UGF0dGVybkZpbmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNzIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybkZpbmRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RTIxODE0M0E4ODAwQTAzQTI4IC8qIFpYRmluZGVyUGF0dGVybkZpbmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNzQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRmluZGVyUGF0dGVybkZpbmRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RTMxODE0M0E4ODAwQTAzQTI4IC8qIFpYRmluZGVyUGF0dGVybkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjc2MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhFNDE4MTQzQTg4MDBBMDNBMjggLyogWlhRUkNvZGVEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGNzgxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGV0ZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEU1MTgxNDNBODgwMEEwM0EyOCAvKiBaWFFSQ29kZUZpbmRlclBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjdBMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZUZpbmRlclBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEU2MTgxNDNBODgwMEEwM0EyOCAvKiBaWEJsb2NrUGFpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGN0QxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQmxvY2tQYWlyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhFNzE4MTQzQTg4MDBBMDNBMjggLyogWlhCeXRlTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y3RjE2NkE5RjJEMDBFMTMzMDQgLyogWlhCeXRlTWF0cml4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhFODE4MTQzQTg4MDBBMDNBMjggLyogWlhFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y4MTE2NkE5RjJEMDBFMTMzMDQgLyogWlhFbmNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhFOTE4MTQzQTg4MDBBMDNBMjggLyogWlhNYXNrVXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODMxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWFza1V0aWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEVBMTgxNDNBODgwMEEwM0EyOCAvKiBaWE1hdHJpeFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjg1MTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1hdHJpeFV0aWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEVCMTgxNDNBODgwMEEwM0EyOCAvKiBaWFFSQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGODcxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhFQzE4MTQzQTg4MDBBMDNBMjggLyogWlhRUkNvZGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRjg5MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RUQxODE0M0E4ODAwQTAzQTI4IC8qIFpYUVJDb2RlV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0Y4QjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEVFMTgxNDNBODgwMEEwM0EyOCAvKiBaWEJhcmNvZGVGb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkJCMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJhcmNvZGVGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEVGMTgxNDNBODgwMEEwM0EyOCAvKiBaWEJpbmFyaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQkMxNjZBOUZGQzAwRTEzMzA0IC8qIFpYQmluYXJpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhGMDE4MTQzQTg4MDBBMDNBMjggLyogWlhCaW5hcnlCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkJFMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJpbmFyeUJpdG1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RjExODE0M0E4ODAwQTAzQTI4IC8qIFpYRGVjb2RlSGludHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkMwMTY2QTlGRkMwMEUxMzMwNCAvKiBaWERlY29kZUhpbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhGMjE4MTQzQTg4MDBBMDNBMjggLyogWlhEaW1lbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDI5OTczMTZENDZFODQwMEQ0QzA0NSAvKiBaWERpbWVuc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RjMxODE0M0E4ODAwQTAzQTI4IC8qIFpYRW5jb2RlSGludHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkMyMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEVuY29kZUhpbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhGNDE4MTQzQTg4MDBBMDNBMjggLyogWlhFcnJvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkM0MTY2QTlGRkMwMEUxMzMwNCAvKiBaWEVycm9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RjUxODE0M0E4ODAwQTAzQTI4IC8qIFpYaW5nT2JqQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNDQkIxNjZBOTZGQTAwRTEzMzA0IC8qIFpYaW5nT2JqQy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RjYxODE0M0E4ODAwQTAzQTI4IC8qIFpYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MDRENEM0MTZGNjk4QUEwMERGODg4MiAvKiBaWEludmVydGVkTHVtaW5hbmNlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhGNzE4MTQzQTg4MDBBMDNBMjggLyogWlhMdW1pbmFuY2VTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkQxMTY2QUEwMDcwMEUxMzMwNCAvKiBaWEx1bWluYW5jZVNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RjgxODE0M0E4ODAwQTAzQTI4IC8qIFpYTXVsdGlGb3JtYXRSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkQzMTY2QUEwMDcwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0UmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhGOTE4MTQzQTg4MDBBMDNBMjggLyogWlhNdWx0aUZvcm1hdFdyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGRDUxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEZBMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBsYW5hcllVVkx1bWluYW5jZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0Mjk5NkIxNkQzMzMxRjAwRDRDMDQ1IC8qIFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhGQjE4MTQzQTg4MDBBMDNBMjggLyogWlhSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkQ3MTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ4RkMxODE0M0E4ODAwQTAzQTI4IC8qIFpYUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0ZEODE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEZEMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJlc3VsdE1ldGFkYXRhVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGREExNjZBQTAwNzAwRTEzMzA0IC8qIFpYUmVzdWx0TWV0YWRhdGFUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDhGRTE4MTQzQTg4MDBBMDNBMjggLyogWlhSZXN1bHRQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGREIxNjZBQTAwNzAwRTEzMzA0IC8qIFpYUmVzdWx0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OEZGMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJlc3VsdFBvaW50Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkREMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50Q2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTAwMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJHQkx1bWluYW5jZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUxRkNERTkxNkNDOEY1MzAwMEMyN0U1IC8qIFpYUkdCTHVtaW5hbmNlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkwMTE4MTQzQTg4MDBBMDNBMjggLyogWlhXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRkRFMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFdyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MDIxODE0M0FDNjAwQTAzQTI4IC8qIFpYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQwMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkwMzE4MTQzQUM2MDBBMDNBMjggLyogWlhBSTAxMzEwM2RlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQyMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzMTAzZGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MDQxODE0M0FDNjAwQTAzQTI4IC8qIFpYQUkwMTMyMHhEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0NDE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzIweERlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTA1MTgxNDNBQzYwMEEwM0EyOCAvKiBaWEFJMDEzOTJ4RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNDYxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTM5MnhEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkwNjE4MTQzQUM2MDBBMDNBMjggLyogWlhBSTAxMzkzeERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTQ4MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzOTN4RGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MDcxODE0M0FDNjAwQTAzQTI4IC8qIFpYQUkwMTN4MHgxeERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTRBMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzeDB4MXhEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkwODE4MTQzQUM2MDBBMDNBMjggLyogWlhBSTAxM3gweERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTRDMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzeDB4RGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MDkxODE0M0FDNjAwQTAzQTI4IC8qIFpYQUkwMUFuZE90aGVyQUlzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U0RTE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxQW5kT3RoZXJBSXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTBBMTgxNDNBQzYwMEEwM0EyOCAvKiBaWEFJMDFkZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1MDE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxZGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MEIxODE0M0FDNjAwQTAzQTI4IC8qIFpYQUkwMXdlaWdodERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTUyMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDF3ZWlnaHREZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkwQzE4MTQzQUM2MDBBMDNBMjggLyogWlhBbnlBSURlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTU0MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFueUFJRGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MEQxODE0M0FDNjAwQTAzQTI4IC8qIFpYQmxvY2tQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTU2MTY2QTlERjMwMEUxMzMwNCAvKiBaWEJsb2NrUGFyc2VkUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkwRTE4MTQzQUM2MDBBMDNBMjggLyogWlhDdXJyZW50UGFyc2luZ1N0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U1ODE2NkE5REYzMDBFMTMzMDQgLyogWlhDdXJyZW50UGFyc2luZ1N0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkwRjE4MTQzQUM2MDBBMDNBMjggLyogWlhEZWNvZGVkQ2hhci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNUExNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZENoYXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTEwMTgxNDNBQzYwMEEwM0EyOCAvKiBaWERlY29kZWRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNUMxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZEluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkxMTE4MTQzQUM2MDBBMDNBMjggLyogWlhEZWNvZGVkTnVtZXJpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNUUxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZE51bWVyaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTEyMTgxNDNBQzYwMEEwM0EyOCAvKiBaWERlY29kZWRPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTYwMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWRPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTEzMTgxNDNBQzYwMEEwM0EyOCAvKiBaWEZpZWxkUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2MjE2NkE5REYzMDBFMTMzMDQgLyogWlhGaWVsZFBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MTQxODE0M0FDNjAwQTAzQTI4IC8qIFpYR2VuZXJhbEFwcElkRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNjQxNjZBOURGMzAwRTEzMzA0IC8qIFpYR2VuZXJhbEFwcElkRGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MTUxODE0M0FDNjAwQTAzQTI4IC8qIFpYQml0QXJyYXlCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2NjE2NkE5REYzMDBFMTMzMDQgLyogWlhCaXRBcnJheUJ1aWxkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTE2MTgxNDNBQzYwMEEwM0EyOCAvKiBaWEV4cGFuZGVkUGFpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNjgxNjZBOURGMzAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQYWlyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkxNzE4MTQzQUM2MDBBMDNBMjggLyogWlhFeHBhbmRlZFJvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjVGRTVEMzExNkQwQUZFRDAwODI2Q0RCIC8qIFpYRXhwYW5kZWRSb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTE4MTgxNDNBQzYwMEEwM0EyOCAvKiBaWFJTU0V4cGFuZGVkUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2QTE2NkE5REYzMDBFMTMzMDQgLyogWlhSU1NFeHBhbmRlZFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MTkxODE0M0FDNjAwQTAzQTI4IC8qIFpYQWJzdHJhY3RSU1NSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTZDMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFic3RyYWN0UlNTUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkxQTE4MTQzQUM2MDBBMDNBMjggLyogWlhEYXRhQ2hhcmFjdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U2RTE2NkE5REYzMDBFMTMzMDQgLyogWlhEYXRhQ2hhcmFjdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkxQjE4MTQzQUM2MDBBMDNBMjggLyogWlhQYWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U3MDE2NkE5REYzMDBFMTMzMDQgLyogWlhQYWlyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkxQzE4MTQzQUM2MDBBMDNBMjggLyogWlhSU1MxNFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNzIxNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTMTRSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTFEMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTc0MTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTFFMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFJTU1V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U3NjE2NkE5REYzMDBFMTMzMDQgLyogWlhSU1NVdGlscy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MUYxODE0M0FDNjAwQTAzQTI4IC8qIFpYQ29kYUJhclJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFNzgxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kYUJhclJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MjAxODE0M0FDNjAwQTAzQTI4IC8qIFpYQ29kYUJhcldyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFN0ExNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kYUJhcldyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MjExODE0M0FDNjAwQTAzQTI4IC8qIFpYQ29kZTEyOFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFN0MxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTEyOFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MjIxODE0M0FDNjAwQTAzQTI4IC8qIFpYQ29kZTEyOFdyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFN0UxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTEyOFdyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MjMxODE0M0FDNjAwQTAzQTI4IC8qIFpYQ29kZTM5UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U4MDE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTI0MTgxNDNBQzYwMEEwM0EyOCAvKiBaWENvZGUzOVdyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFODIxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTM5V3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkyNTE4MTQzQUM2MDBBMDNBMjggLyogWlhDb2RlOTNSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTg0MTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGU5M1JlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MjYxODE0M0FDNjAwQTAzQTI4IC8qIFpYRUFOMTNSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTg2MTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjEzUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkyNzE4MTQzQUM2MDBBMDNBMjggLyogWlhFQU4xM1dyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFODgxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOMTNXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTI4MTgxNDNBQzYwMEEwM0EyOCAvKiBaWEVBTjhSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRThBMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjhSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTI5MTgxNDNBQzYwMEEwM0EyOCAvKiBaWEVBTjhXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRThDMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTJBMTgxNDNBQzYwMEEwM0EyOCAvKiBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRThFMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTJCMTgxNDNBQzYwMEEwM0EyOCAvKiBaWElURlJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNFOTAxNjZBOURGMzAwRTEzMzA0IC8qIFpYSVRGUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkyQzE4MTQzQUM2MDBBMDNBMjggLyogWlhJVEZXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTkyMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURldyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MkQxODE0M0FDNjAwQTAzQTI4IC8qIFpYTXVsdGlGb3JtYXRPbmVEUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5NDE2NkE5REYzMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTJFMTgxNDNBQzYwMEEwM0EyOCAvKiBaWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5NjE2NkE5REYzMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MkYxODE0M0FDNjAwQTAzQTI4IC8qIFpYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0U5ODE2NkE5REYzMDBFMTMzMDQgLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTMwMTgxNDNBQzYwMEEwM0EyOCAvKiBaWE9uZURSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTlBMTY2QTlERjMwMEUxMzMwNCAvKiBaWE9uZURSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTMxMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFVQQ0FSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTlDMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0FSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTMyMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFVQQ0FXcml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRTlFMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTMzMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBMDE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MzQxODE0M0FDNjAwQTAzQTI4IC8qIFpYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUEyMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjVTdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkzNTE4MTQzQUM2MDBBMDNBMjggLyogWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBNDE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkzNjE4MTQzQUM2MDBBMDNBMjggLyogWlhVUENFQU5SZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUE2MTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTlJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5MzcxODE0M0FDNjAwQTAzQTI4IC8qIFpYVVBDRUFOV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0VBODE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5Xcml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTM4MTgxNDNBQzYwMEEwM0EyOCAvKiBaWFVQQ0VSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDAzRUFBMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTM5MTgxNDNBQzYwMEEwM0EyOCAvKiBaWE1vZHVsdXNHRi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMUIxNjZBOUVCNTAwRTEzMzA0IC8qIFpYTW9kdWx1c0dGLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNTVFNDkzQTE4MTQzQUM2MDBBMDNBMjggLyogWlhNb2R1bHVzUG9seS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGMUQxNjZBOUVCNTAwRTEzMzA0IC8qIFpYTW9kdWx1c1BvbHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTI1NUU0OTNCMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQwM0YxRjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjU1RTQ5M0MxODE0M0FDNjAwQTAzQTI4IC8qIFpYQmFyY29kZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MDNGQkIxNjZBOUZGQzAwRTEzMzA0IC8qIFpYQmFyY29kZUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJMjVGRTVEMzMxNkQwQUZFRDAwODI2Q0RCIC8qIFpYRXhwYW5kZWRSb3cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1RkU1RDMxMTZEMEFGRUQwMDgyNkNEQiAvKiBaWEV4cGFuZGVkUm93LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQkyNUZFNUQzNDE2RDBBRkVEMDA4MjZDREIgLyogWlhFeHBhbmRlZFJvdy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjVGRTVEMzIxNkQwQUZFRDAwODI2Q0RCIC8qIFpYRXhwYW5kZWRSb3cubSAqLzsgfTsKKwkJMjVGRTVEMzYxNkQwQjAwNjAwODI2Q0RCIC8qIFpYRXhwYW5kZWRSb3cubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1RkU1RDMyMTZEMEFGRUQwMDgyNkNEQiAvKiBaWEV4cGFuZGVkUm93Lm0gKi87IH07CisJCTI1RkU1RDM3MTZEMEIwMDcwMDgyNkNEQiAvKiBaWEV4cGFuZGVkUm93Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNUZFNUQzMjE2RDBBRkVEMDA4MjZDREIgLyogWlhFeHBhbmRlZFJvdy5tICovOyB9OworCQkyNUZFNUQ0MDE2RDBCODRDMDA4MjZDREIgLyogUlNTRXhwYW5kZWRTdGFja2VkSW50ZXJuYWxUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjVGRTVEM0YxNkQwQjg0QzAwODI2Q0RCIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEludGVybmFsVGVzdENhc2UubSAqLzsgfTsKKwkJMjVGRTVENDMxNkQwQjhCMjAwODI2Q0RCIC8qIFRlc3RDYXNlVXRpbC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjVGRTVENDIxNkQwQjhCMjAwODI2Q0RCIC8qIFRlc3RDYXNlVXRpbC5tICovOyB9OworCQkyNUZFNUQ0NTE2RDE5OTdDMDA4MjZDREIgLyogUmVzb3VyY2VzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNUZFNUQ0NDE2RDE5OTdDMDA4MjZDREIgLyogUmVzb3VyY2VzICovOyB9OworLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCisJCTAyNDk1N0YxMTg5ODY0MUIwMDNENEU2QSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSAyNTQwM0NBQTE2NkE5NkY5MDBFMTMzMDQgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAyNTQwM0NCMjE2NkE5NkZBMDBFMTMzMDQ7CisJCQlyZW1vdGVJbmZvID0gWlhpbmdPYmpDOworCQl9OworCQkwMkQ4MTM3MTE4OTg2NEM3MDA4MTcyMUQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMjU0MDNDQUExNjZBOTZGOTAwRTEzMzA0IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMjU0MDQxNjUxNjZBQURBQzAwRTEzMzA0OworCQkJcmVtb3RlSW5mbyA9IFpYaW5nT2JqQzsKKwkJfTsKKwkJMjU0MDNDQ0ExNjZBOTZGQTAwRTEzMzA0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKKwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9IDI1NDAzQ0FBMTY2QTk2RjkwMEUxMzMwNCAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5VHlwZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDI1NDAzQ0IyMTY2QTk2RkEwMEUxMzMwNDsKKwkJCXJlbW90ZUluZm8gPSBaWGluZ09iakM7CisJCX07CisJCTI1NDA0MTdCMTY2QUFEQUMwMEUxMzMwNCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSAyNTQwM0NBQTE2NkE5NkY5MDBFMTMzMDQgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAyNTQwNDE2NTE2NkFBREFDMDBFMTMzMDQ7CisJCQlyZW1vdGVJbmZvID0gWlhpbmdPYmpDOworCQl9OworLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkwMjQ5NTg3ODE4OTg2NDFCMDAzRDRFNkEgLyogWlhpbmdPYmpDVGVzdHMtaU9TIGNvcHkub2N0ZXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmNmYnVuZGxlOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSAiWlhpbmdPYmpDVGVzdHMtaU9TIGNvcHkub2N0ZXN0Ijsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJMDJCREEyRUUxODAzMTA5RTAwMzlCMzI2IC8qIFRlc3RzLWlPUy1QcmVmaXgucGNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiVGVzdHMtaU9TLVByZWZpeC5wY2giOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMkJEQTJFRjE4MDMxMDlFMDAzOUIzMjYgLyogVGVzdHMtT1NYLVByZWZpeC5wY2ggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJUZXN0cy1PU1gtUHJlZml4LnBjaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAyQkRBMkYwMTgwMzEwOUUwMDM5QjMyNiAvKiBaWGluZ09iakNUZXN0cy1JbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSAiWlhpbmdPYmpDVGVzdHMtSW5mby5wbGlzdCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAyRDgxM0Y2MTg5ODY0QzcwMDgxNzIxRCAvKiBaWGluZ09iakNUZXN0cy1vc3ggY29weS5vY3Rlc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuY2ZidW5kbGU7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9ICJaWGluZ09iakNUZXN0cy1vc3ggY29weS5vY3Rlc3QiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkyNTA0RDRDNDE2RjY5OEFBMDBERjg4ODIgLyogWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEludmVydGVkTHVtaW5hbmNlU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1MDRENEM1MTZGNjk4QUEwMERGODg4MiAvKiBaWEludmVydGVkTHVtaW5hbmNlU291cmNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUwNEQ5Q0QxNkZGRDJFMjAwREY4ODgyIC8qIFpYQXp0ZWNDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFpYQXp0ZWNDb2RlLmg7IHBhdGggPSBlbmNvZGVyL1pYQXp0ZWNDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1MDREOUNFMTZGRkQyRTIwMERGODg4MiAvKiBaWEF6dGVjQ29kZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBaWEF6dGVjQ29kZS5tOyBwYXRoID0gZW5jb2Rlci9aWEF6dGVjQ29kZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTA0RDlEQTE2RkZENENEMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWlhBenRlY0VuY29kZXIuaDsgcGF0aCA9IGVuY29kZXIvWlhBenRlY0VuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUwNEQ5REIxNkZGRDRDRDAwREY4ODgyIC8qIFpYQXp0ZWNFbmNvZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFpYQXp0ZWNFbmNvZGVyLm07IHBhdGggPSBlbmNvZGVyL1pYQXp0ZWNFbmNvZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1MDREOUU0MTZGRkYyN0MwMERGODg4MiAvKiBaWEF6dGVjRW5jb2RlclRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWlhBenRlY0VuY29kZXJUZXN0Lmg7IHBhdGggPSBlbmNvZGVyL1pYQXp0ZWNFbmNvZGVyVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTA0RDlFNTE2RkZGMjdDMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXJUZXN0Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFpYQXp0ZWNFbmNvZGVyVGVzdC5tOyBwYXRoID0gZW5jb2Rlci9aWEF6dGVjRW5jb2RlclRlc3QubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUwNEQ5RUExNzAwMDVGRTAwREY4ODgyIC8qIFJlZWRTb2xvbW9uVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVlZFNvbG9tb25UZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTA0RDlFQjE3MDAwNUZFMDBERjg4ODIgLyogUmVlZFNvbG9tb25UZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBSZWVkU29sb21vblRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1MTlBQjMyMTdGRDFFQzAwMEE3MUM0NSAvKiBaWEF6dGVjV3JpdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQXp0ZWNXcml0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUxOUFCMzMxN0ZEMUVDMDAwQTcxQzQ1IC8qIFpYQXp0ZWNXcml0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhBenRlY1dyaXRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTE5QUIzQTE3RkQxRUU0MDBBNzFDNDUgLyogWlhQREY0MTdXcml0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQREY0MTdXcml0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUxOUFCM0IxN0ZEMUVFNDAwQTcxQzQ1IC8qIFpYUERGNDE3V3JpdGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUERGNDE3V3JpdGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1MTlBQjQyMTdGRTU1NEQwMEE3MUM0NSAvKiBaWFBERjQxN0NvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFBERjQxN0NvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTE5QUI0MzE3RkU1NTREMDBBNzFDNDUgLyogWlhQREY0MTdDb21tb24ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhQREY0MTdDb21tb24ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUxOUFCNDYxN0ZFNUMxRjAwQTcxQzQ1IC8qIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQREY0MTdSZXN1bHRNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTE5QUI0NzE3RkU1QzFGMDBBNzFDNDUgLyogWlhQREY0MTdSZXN1bHRNZXRhZGF0YS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFBERjQxN1Jlc3VsdE1ldGFkYXRhLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1MTlBQjVDMTdGRTVFNEYwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVNZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFBERjQxN0JhcmNvZGVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTE5QUI1RDE3RkU1RTRGMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUxOUFCNjQxN0ZFNUYyRTAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUERGNDE3QmFyY29kZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1MTlBQjY1MTdGRTVGMkUwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVWYWx1ZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFBERjQxN0JhcmNvZGVWYWx1ZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTE5QUI2QzE3RkU2MEU3MDBBNzFDNDUgLyogWlhQREY0MTdCb3VuZGluZ0JveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFBERjQxN0JvdW5kaW5nQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1MTlBQjZEMTdGRTYwRTcwMEE3MUM0NSAvKiBaWFBERjQxN0JvdW5kaW5nQm94Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUERGNDE3Qm91bmRpbmdCb3gubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUxOUFCNzQxN0ZFNjQ5MDAwQTcxQzQ1IC8qIFpYUERGNDE3Q29kZXdvcmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQREY0MTdDb2Rld29yZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTE5QUI3NTE3RkU2NDkwMDBBNzFDNDUgLyogWlhQREY0MTdDb2Rld29yZC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFBERjQxN0NvZGV3b3JkLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1MUZDREU5MTZDQzhGNTMwMDBDMjdFNSAvKiBaWFJHQkx1bWluYW5jZVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFJHQkx1bWluYW5jZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTFGQ0RFQTE2Q0M4RjUzMDAwQzI3RTUgLyogWlhSR0JMdW1pbmFuY2VTb3VyY2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhSR0JMdW1pbmFuY2VTb3VyY2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUzODlCNUUxN0ZGQzg0MzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1Mzg5QjVGMTdGRkM4NDMwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFBERjQxN0RldGVjdGlvblJlc3VsdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTM4OUI2NzE3RkZDOTgxMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUzODlCNjgxN0ZGQzk4MTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1Mzg5QjZGMTdGRkNBMjcwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTM4OUI3MDE3RkZDQTI3MDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUzODlCNzcxODAwREVDMzAwNzcyMzkyIC8qIFpYUERGNDE3Q29kZXdvcmREZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUERGNDE3Q29kZXdvcmREZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1Mzg5Qjc4MTgwMERFQzMwMDc3MjM5MiAvKiBaWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTM4OUI3RjE4MDBFMzVCMDA3NzIzOTIgLyogWlhQREY0MTdTY2FubmluZ0RlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQREY0MTdTY2FubmluZ0RlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUzODlCODAxODAwRTM1QjAwNzcyMzkyIC8qIFpYUERGNDE3U2Nhbm5pbmdEZWNvZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUERGNDE3U2Nhbm5pbmdEZWNvZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1Mzg5Qjg3MTgwMTBCOUEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdG9yUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUzODlCODgxODAxMEI5QTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhQREY0MTdEZXRlY3RvclJlc3VsdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTM4OUI5MDE4MDEwRDlCMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQREY0MTdEZXRlY3RvclRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUzODlCOTExODAxMEQ5QjAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0b3JUZXN0Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUERGNDE3RGV0ZWN0b3JUZXN0Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzQ0IzMTY2QTk2RkEwMEUxMzMwNCAvKiBsaWJaWGluZ09iakMtaU9TLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9ICJsaWJaWGluZ09iakMtaU9TLmEiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkyNTQwM0NCNjE2NkE5NkZBMDBFMTMzMDQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CisJCTI1NDAzQ0JCMTY2QTk2RkEwMEUxMzMwNCAvKiBaWGluZ09iakMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhpbmdPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzQ0M0MTY2QTk2RkEwMEUxMzMwNCAvKiBVbml0IFRlc3RzIGlPUy5vY3Rlc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuY2ZidW5kbGU7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9ICJVbml0IFRlc3RzIGlPUy5vY3Rlc3QiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkyNTQwM0NDNTE2NkE5NkZBMDBFMTMzMDQgLyogU2VuVGVzdGluZ0tpdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFNlblRlc3RpbmdLaXQuZnJhbWV3b3JrOyBwYXRoID0gTGlicmFyeS9GcmFtZXdvcmtzL1NlblRlc3RpbmdLaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gREVWRUxPUEVSX0RJUjsgfTsKKwkJMjU0MDNDRTExNjZBOTc5NzAwRTEzMzA0IC8qIGlvcy1QcmVmaXgucGNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiaW9zLVByZWZpeC5wY2giOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTI1NDAzQ0VFMTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEF6dGVjRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0NFRjE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RlY29kZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhBenRlY0RlY29kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNDRjExNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEF6dGVjRGV0ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNDRjIxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3Rvci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEF6dGVjRGV0ZWN0b3IubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNDRjMxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3RvclJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNDRjQxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3RvclJlc3VsdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNDRjUxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhBenRlY1JlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0NGNjE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY1JlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEF6dGVjUmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDAxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMDIxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QwMzE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QwNDE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QwNTE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0RvQ29Nb1Jlc3VsdFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDA2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMDcxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QwODE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDA5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhCaXpjYXJkUmVzdWx0UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDBBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhCaXpjYXJkUmVzdWx0UGFyc2VyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDBCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQm9va21hcmtEb0NvTW9SZXN1bHRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMEMxNjZBOUEwODAwRTEzMzA0IC8qIFpYQm9va21hcmtEb0NvTW9SZXN1bHRQYXJzZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QwRDE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWENhbGVuZGFyUGFyc2VkUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDBFMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMEYxNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDEwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QxMTE2NkE5QTA4MDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMTIxNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDEzMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMTQxNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QxNTE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMTYxNjZBOUEwODAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDE3MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QxODE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RSZXN1bHRQYXJzZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhFeHBhbmRlZFByb2R1Y3RSZXN1bHRQYXJzZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMTkxNjZBOUEwODAwRTEzMzA0IC8qIFpYR2VvUGFyc2VkUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYR2VvUGFyc2VkUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDFBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEdlb1BhcnNlZFJlc3VsdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEdlb1BhcnNlZFJlc3VsdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QxQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9SZXN1bHRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhHZW9SZXN1bHRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMUMxNjZBOUEwODAwRTEzMzA0IC8qIFpYR2VvUmVzdWx0UGFyc2VyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYR2VvUmVzdWx0UGFyc2VyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDFEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhJU0JOUGFyc2VkUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDFFMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHQubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhJU0JOUGFyc2VkUmVzdWx0Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDFGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5SZXN1bHRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhJU0JOUmVzdWx0UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDIwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5SZXN1bHRQYXJzZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhJU0JOUmVzdWx0UGFyc2VyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDIxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFBhcnNlZFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFBhcnNlZFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QyMjE2NkE5QTA4MDBFMTMzMDQgLyogWlhQYXJzZWRSZXN1bHQubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhQYXJzZWRSZXN1bHQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMjMxNjZBOUEwODAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFBhcnNlZFJlc3VsdFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMjQxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFByb2R1Y3RQYXJzZWRSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMjUxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFByb2R1Y3RQYXJzZWRSZXN1bHQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMjYxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFJlc3VsdFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFByb2R1Y3RSZXN1bHRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMjcxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFJlc3VsdFBhcnNlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFByb2R1Y3RSZXN1bHRQYXJzZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMjgxNjZBOUEwODAwRTEzMzA0IC8qIFpYUmVzdWx0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUmVzdWx0UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDI5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBhcnNlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFJlc3VsdFBhcnNlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QyQTE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhTTVNNTVNSZXN1bHRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMkIxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01TTU1TUmVzdWx0UGFyc2VyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYU01TTU1TUmVzdWx0UGFyc2VyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDJDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU1BhcnNlZFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFNNU1BhcnNlZFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QyRDE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNQYXJzZWRSZXN1bHQubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhTTVNQYXJzZWRSZXN1bHQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMkUxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01TVE9NTVNUT1Jlc3VsdFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMkYxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01TVE9NTVNUT1Jlc3VsdFBhcnNlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMzAxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01UUFJlc3VsdFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFNNVFBSZXN1bHRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMzExNjZBOUEwODAwRTEzMzA0IC8qIFpYU01UUFJlc3VsdFBhcnNlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFNNVFBSZXN1bHRQYXJzZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMzIxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGVsUGFyc2VkUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYVGVsUGFyc2VkUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDMzMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRlbFBhcnNlZFJlc3VsdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFRlbFBhcnNlZFJlc3VsdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QzNDE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZWxSZXN1bHRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhUZWxSZXN1bHRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEMzUxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGVsUmVzdWx0UGFyc2VyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYVGVsUmVzdWx0UGFyc2VyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDM2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhUZXh0UGFyc2VkUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDM3MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhUZXh0UGFyc2VkUmVzdWx0Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDM4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVBhcnNlZFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFVSSVBhcnNlZFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QzOTE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHQubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhVUklQYXJzZWRSZXN1bHQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEM0ExNjZBOUEwODAwRTEzMzA0IC8qIFpYVVJJUmVzdWx0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYVVJJUmVzdWx0UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDNCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVJlc3VsdFBhcnNlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFVSSVJlc3VsdFBhcnNlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QzQzE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUkxUT1Jlc3VsdFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFVSTFRPUmVzdWx0UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDNEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSTFRPUmVzdWx0UGFyc2VyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYVVJMVE9SZXN1bHRQYXJzZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEM0UxNjZBOUEwODAwRTEzMzA0IC8qIFpYVkNhcmRSZXN1bHRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhWQ2FyZFJlc3VsdFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0QzRjE2NkE5QTA4MDBFMTMzMDQgLyogWlhWQ2FyZFJlc3VsdFBhcnNlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFZDYXJkUmVzdWx0UGFyc2VyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDQwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZFdmVudFJlc3VsdFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFZFdmVudFJlc3VsdFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Q0MTE2NkE5QTA4MDBFMTMzMDQgLyogWlhWRXZlbnRSZXN1bHRQYXJzZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhWRXZlbnRSZXN1bHRQYXJzZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNENDIxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFdpZmlQYXJzZWRSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNENDMxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFdpZmlQYXJzZWRSZXN1bHQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNENDQxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVJlc3VsdFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFdpZmlSZXN1bHRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNENDUxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVJlc3VsdFBhcnNlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFdpZmlSZXN1bHRQYXJzZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNENDYxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FwdHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWENhcHR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNENDcxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FwdHVyZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWENhcHR1cmUubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNENDgxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FwdHVyZURlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQ2FwdHVyZURlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDQ5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmVWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQ2FwdHVyZVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNENEExNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FwdHVyZVZpZXcubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhDYXB0dXJlVmlldy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Q0QjE2NkE5QTA4MDBFMTMzMDQgLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Q0QzE2NkE5QTA4MDBFMTMzMDQgLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Q0RDE2NkE5QTA4MDBFMTMzMDQgLyogWlhJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRDRFMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEltYWdlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYSW1hZ2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNENEYxNjZBOUEwODAwRTEzMzA0IC8qIFpYVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQTExNjZBOUMwRTAwRTEzMzA0IC8qIFpYTWF0aFV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYTWF0aFV0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREEyMTY2QTlDMEUwMEUxMzMwNCAvKiBaWE1hdGhVdGlscy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWE1hdGhVdGlscy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RBMzE2NkE5QzBFMDBFMTMzMDQgLyogWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQTQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREE1MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFdoaXRlUmVjdGFuZ2xlRGV0ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREE2MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFdoaXRlUmVjdGFuZ2xlRGV0ZWN0b3IubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREE4MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEdlbmVyaWNHRi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RBOTE2NkE5QzBFMDBFMTMzMDQgLyogWlhHZW5lcmljR0YubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhHZW5lcmljR0YubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQUExNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2VuZXJpY0dGUG9seS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEdlbmVyaWNHRlBvbHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQUIxNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2VuZXJpY0dGUG9seS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEdlbmVyaWNHRlBvbHkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQUMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25EZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUmVlZFNvbG9tb25EZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREFEMTY2QTlDMEUwMEUxMzMwNCAvKiBaWFJlZWRTb2xvbW9uRGVjb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFJlZWRTb2xvbW9uRGVjb2Rlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RBRTE2NkE5QzBFMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhSZWVkU29sb21vbkVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQUYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25FbmNvZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUmVlZFNvbG9tb25FbmNvZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREIwMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQml0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQjExNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0QXJyYXkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhCaXRBcnJheS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RCMjE2NkE5QzBFMDBFMTMzMDQgLyogWlhCaXRNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhCaXRNYXRyaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQjMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0TWF0cml4Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQml0TWF0cml4Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREI0MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEJpdFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RCNTE2NkE5QzBFMDBFMTMzMDQgLyogWlhCaXRTb3VyY2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhCaXRTb3VyY2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQjYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQ2hhcmFjdGVyU2V0RUNJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQ2hhcmFjdGVyU2V0RUNJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREI3MTY2QTlDMEUwMEUxMzMwNCAvKiBaWENoYXJhY3RlclNldEVDSS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWENoYXJhY3RlclNldEVDSS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RCODE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZWNvZGVyUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRGVjb2RlclJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RCOTE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZWNvZGVyUmVzdWx0Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRGVjb2RlclJlc3VsdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RCQTE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZWZhdWx0R3JpZFNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhEZWZhdWx0R3JpZFNhbXBsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQkIxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGVmYXVsdEdyaWRTYW1wbGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRGVmYXVsdEdyaWRTYW1wbGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREJDMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERldGVjdG9yUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRGV0ZWN0b3JSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQkQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGV0ZWN0b3JSZXN1bHQubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhEZXRlY3RvclJlc3VsdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RCRTE2NkE5QzBFMDBFMTMzMDQgLyogWlhFQ0kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhFQ0kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQkYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRUNJLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRUNJLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREMwMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RDMTE2NkE5QzBFMDBFMTMzMDQgLyogWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQzIxNjZBOUMwRTAwRTEzMzA0IC8qIFpYR3JpZFNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhHcmlkU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RDMzE2NkE5QzBFMDBFMTMzMDQgLyogWlhHcmlkU2FtcGxlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEdyaWRTYW1wbGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREM0MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEh5YnJpZEJpbmFyaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEh5YnJpZEJpbmFyaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RDNTE2NkE5QzBFMDBFMTMzMDQgLyogWlhIeWJyaWRCaW5hcml6ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhIeWJyaWRCaW5hcml6ZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQzYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RDNzE2NkE5QzBFMDBFMTMzMDQgLyogWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREM4MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYU3RyaW5nVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNEQzkxNjZBOUMwRTAwRTEzMzA0IC8qIFpYU3RyaW5nVXRpbHMubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhTdHJpbmdVdGlscy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RGNDE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRGF0YU1hdHJpeEJpdE1hdHJpeFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RGNTE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRGF0YU1hdHJpeEJpdE1hdHJpeFBhcnNlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RGNjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRGF0YU1hdHJpeERhdGFCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RGNzE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRGF0YU1hdHJpeERhdGFCbG9jay5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RGODE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREY5MTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNERkExNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhEYXRhTWF0cml4RGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RGQjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWERhdGFNYXRyaXhEZWNvZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzREZDMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhWZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRGF0YU1hdHJpeFZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNERkQxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeFZlcnNpb24ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhEYXRhTWF0cml4VmVyc2lvbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0RGRjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGV0ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhEYXRhTWF0cml4RGV0ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFMDAxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERldGVjdG9yLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRGF0YU1hdHJpeERldGVjdG9yLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTAxMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhEYXRhTWF0cml4UmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTAyMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhSZWFkZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhEYXRhTWF0cml4UmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTEzMTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFMTQxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhNYXhpQ29kZUJpdE1hdHJpeFBhcnNlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0UxNTE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhNYXhpQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFMTYxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYTWF4aUNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTE3MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWE1heGlDb2RlRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0UxODE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhNYXhpQ29kZURlY29kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFMTkxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhNYXhpQ29kZVJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0UxQTE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZVJlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWE1heGlDb2RlUmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTI2MTY2QTlEOEIwMEUxMzMwNCAvKiBaWE11bHRpRGV0ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhNdWx0aURldGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTI3MTY2QTlEOEIwMEUxMzMwNCAvKiBaWE11bHRpRGV0ZWN0b3IubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhNdWx0aURldGVjdG9yLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTI4MTY2QTlEOEIwMEUxMzMwNCAvKiBaWE11bHRpRmluZGVyUGF0dGVybkZpbmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWE11bHRpRmluZGVyUGF0dGVybkZpbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0UyOTE2NkE5RDhCMDBFMTMzMDQgLyogWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFMkExNjZBOUQ4QjAwRTEzMzA0IC8qIFpYUVJDb2RlTXVsdGlSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhRUkNvZGVNdWx0aVJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0UyQjE2NkE5RDhCMDBFMTMzMDQgLyogWlhRUkNvZGVNdWx0aVJlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFFSQ29kZU11bHRpUmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTJDMTY2QTlEOEIwMEUxMzMwNCAvKiBaWEJ5UXVhZHJhbnRSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhCeVF1YWRyYW50UmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTJEMTY2QTlEOEIwMEUxMzMwNCAvKiBaWEJ5UXVhZHJhbnRSZWFkZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhCeVF1YWRyYW50UmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTJFMTY2QTlEOEIwMEUxMzMwNCAvKiBaWEdlbmVyaWNNdWx0aXBsZUJhcmNvZGVSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTJGMTY2QTlEOEIwMEUxMzMwNCAvKiBaWEdlbmVyaWNNdWx0aXBsZUJhcmNvZGVSZWFkZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTMwMTY2QTlEOEIwMEUxMzMwNCAvKiBaWE11bHRpcGxlQmFyY29kZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWE11bHRpcGxlQmFyY29kZVJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U0MDE2NkE5REYzMDBFMTMzMDQgLyogWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTQxMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNDIxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTMxMDNkZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQUkwMTMxMDNkZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTQzMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzMTAzZGVjb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEFJMDEzMTAzZGVjb2Rlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U0NDE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzIweERlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhBSTAxMzIweERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNDUxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTMyMHhEZWNvZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQUkwMTMyMHhEZWNvZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTQ2MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzOTJ4RGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEFJMDEzOTJ4RGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U0NzE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzkyeERlY29kZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhBSTAxMzkyeERlY29kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNDgxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTM5M3hEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQUkwMTM5M3hEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTQ5MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzOTN4RGVjb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEFJMDEzOTN4RGVjb2Rlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U0QTE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxM3gweDF4RGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEFJMDEzeDB4MXhEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTRCMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzeDB4MXhEZWNvZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQUkwMTN4MHgxeERlY29kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNEMxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTN4MHhEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQUkwMTN4MHhEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTREMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzeDB4RGVjb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEFJMDEzeDB4RGVjb2Rlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U0RTE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxQW5kT3RoZXJBSXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhBSTAxQW5kT3RoZXJBSXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNEYxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMUFuZE90aGVyQUlzLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQUkwMUFuZE90aGVyQUlzLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTUwMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDFkZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQUkwMWRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNTExNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMWRlY29kZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhBSTAxZGVjb2Rlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U1MjE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxd2VpZ2h0RGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEFJMDF3ZWlnaHREZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTUzMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDF3ZWlnaHREZWNvZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQUkwMXdlaWdodERlY29kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNTQxNjZBOURGMzAwRTEzMzA0IC8qIFpYQW55QUlEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQW55QUlEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTU1MTY2QTlERjMwMEUxMzMwNCAvKiBaWEFueUFJRGVjb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEFueUFJRGVjb2Rlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U1NjE2NkE5REYzMDBFMTMzMDQgLyogWlhCbG9ja1BhcnNlZFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEJsb2NrUGFyc2VkUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTU3MTY2QTlERjMwMEUxMzMwNCAvKiBaWEJsb2NrUGFyc2VkUmVzdWx0Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQmxvY2tQYXJzZWRSZXN1bHQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNTgxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEN1cnJlbnRQYXJzaW5nU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNTkxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEN1cnJlbnRQYXJzaW5nU3RhdGUubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNUExNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZENoYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhEZWNvZGVkQ2hhci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U1QjE2NkE5REYzMDBFMTMzMDQgLyogWlhEZWNvZGVkQ2hhci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWERlY29kZWRDaGFyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTVDMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWRJbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWERlY29kZWRJbmZvcm1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U1RDE2NkE5REYzMDBFMTMzMDQgLyogWlhEZWNvZGVkSW5mb3JtYXRpb24ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhEZWNvZGVkSW5mb3JtYXRpb24ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNUUxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZE51bWVyaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhEZWNvZGVkTnVtZXJpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U1RjE2NkE5REYzMDBFMTMzMDQgLyogWlhEZWNvZGVkTnVtZXJpYy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWERlY29kZWROdW1lcmljLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTYwMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhEZWNvZGVkT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTYxMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWRPYmplY3QubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhEZWNvZGVkT2JqZWN0Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTYyMTY2QTlERjMwMEUxMzMwNCAvKiBaWEZpZWxkUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRmllbGRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNjMxNjZBOURGMzAwRTEzMzA0IC8qIFpYRmllbGRQYXJzZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhGaWVsZFBhcnNlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U2NDE2NkE5REYzMDBFMTMzMDQgLyogWlhHZW5lcmFsQXBwSWREZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYR2VuZXJhbEFwcElkRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U2NTE2NkE5REYzMDBFMTMzMDQgLyogWlhHZW5lcmFsQXBwSWREZWNvZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYR2VuZXJhbEFwcElkRGVjb2Rlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U2NjE2NkE5REYzMDBFMTMzMDQgLyogWlhCaXRBcnJheUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhCaXRBcnJheUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNjcxNjZBOURGMzAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQml0QXJyYXlCdWlsZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTY4MTY2QTlERjMwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUGFpci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEV4cGFuZGVkUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U2OTE2NkE5REYzMDBFMTMzMDQgLyogWlhFeHBhbmRlZFBhaXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhFeHBhbmRlZFBhaXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNkExNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTRXhwYW5kZWRSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhSU1NFeHBhbmRlZFJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U2QjE2NkE5REYzMDBFMTMzMDQgLyogWlhSU1NFeHBhbmRlZFJlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFJTU0V4cGFuZGVkUmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTZDMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFic3RyYWN0UlNTUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQWJzdHJhY3RSU1NSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNkQxNjZBOURGMzAwRTEzMzA0IC8qIFpYQWJzdHJhY3RSU1NSZWFkZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhBYnN0cmFjdFJTU1JlYWRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U2RTE2NkE5REYzMDBFMTMzMDQgLyogWlhEYXRhQ2hhcmFjdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRGF0YUNoYXJhY3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U2RjE2NkE5REYzMDBFMTMzMDQgLyogWlhEYXRhQ2hhcmFjdGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRGF0YUNoYXJhY3Rlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U3MDE2NkE5REYzMDBFMTMzMDQgLyogWlhQYWlyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U3MTE2NkE5REYzMDBFMTMzMDQgLyogWlhQYWlyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUGFpci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U3MjE2NkE5REYzMDBFMTMzMDQgLyogWlhSU1MxNFJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFJTUzE0UmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTczMTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTUzE0UmVhZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUlNTMTRSZWFkZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNzQxNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTRmluZGVyUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFJTU0ZpbmRlclBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNzUxNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTRmluZGVyUGF0dGVybi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFJTU0ZpbmRlclBhdHRlcm4ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFNzYxNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhSU1NVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U3NzE2NkE5REYzMDBFMTMzMDQgLyogWlhSU1NVdGlscy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFJTU1V0aWxzLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTc4MTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGFCYXJSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhDb2RhQmFyUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTc5MTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGFCYXJSZWFkZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhDb2RhQmFyUmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTdBMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGFCYXJXcml0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhDb2RhQmFyV3JpdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTdCMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGFCYXJXcml0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhDb2RhQmFyV3JpdGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTdDMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUxMjhSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhDb2RlMTI4UmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTdEMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUxMjhSZWFkZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhDb2RlMTI4UmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTdFMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUxMjhXcml0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhDb2RlMTI4V3JpdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTdGMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUxMjhXcml0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhDb2RlMTI4V3JpdGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTgwMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUzOVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWENvZGUzOVJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U4MTE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhDb2RlMzlSZWFkZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFODIxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTM5V3JpdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQ29kZTM5V3JpdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTgzMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUzOVdyaXRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWENvZGUzOVdyaXRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U4NDE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlOTNSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhDb2RlOTNSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFODUxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTkzUmVhZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQ29kZTkzUmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTg2MTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjEzUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRUFOMTNSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFODcxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOMTNSZWFkZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhFQU4xM1JlYWRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U4ODE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU4xM1dyaXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEVBTjEzV3JpdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTg5MTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjEzV3JpdGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRUFOMTNXcml0ZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOEExNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOOFJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEVBTjhSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOEIxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOOFJlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEVBTjhSZWFkZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOEMxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOOFdyaXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEVBTjhXcml0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOEQxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOOFdyaXRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEVBTjhXcml0ZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOEUxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOEYxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOTAxNjZBOURGMzAwRTEzMzA0IC8qIFpYSVRGUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYSVRGUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTkxMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURlJlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWElURlJlYWRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U5MjE2NkE5REYzMDBFMTMzMDQgLyogWlhJVEZXcml0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhJVEZXcml0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOTMxNjZBOURGMzAwRTEzMzA0IC8qIFpYSVRGV3JpdGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYSVRGV3JpdGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTk0MTY2QTlERjMwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0T25lRFJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWE11bHRpRm9ybWF0T25lRFJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U5NTE2NkE5REYzMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOTYxNjZBOURGMzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRVUENFQU5SZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U5NzE2NkE5REYzMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRTk4MTY2QTlERjMwMEUxMzMwNCAvKiBaWE9uZURpbWVuc2lvbmFsQ29kZVdyaXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWE9uZURpbWVuc2lvbmFsQ29kZVdyaXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0U5OTE2NkE5REYzMDBFMTMzMDQgLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOUExNjZBOURGMzAwRTEzMzA0IC8qIFpYT25lRFJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWE9uZURSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOUIxNjZBOURGMzAwRTEzMzA0IC8qIFpYT25lRFJlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWE9uZURSZWFkZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOUMxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDQVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFVQQ0FSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOUQxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDQVJlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFVQQ0FSZWFkZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOUUxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDQVdyaXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFVQQ0FXcml0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFOUYxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDQVdyaXRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFVQQ0FXcml0ZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFQTAxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uMlN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0VBMTE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRUEyMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjVTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFQTMxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0VBNDE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0VBNTE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0VBNjE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5SZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhVUENFQU5SZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFQTcxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFOUmVhZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYVVBDRUFOUmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRUE4MTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTldyaXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFVQQ0VBTldyaXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0VBOTE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5Xcml0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhVUENFQU5Xcml0ZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFQUExNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFVQQ0VSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNFQUIxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRVJlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFVQQ0VSZWFkZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGMUIxNjZBOUVCNTAwRTEzMzA0IC8qIFpYTW9kdWx1c0dGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYTW9kdWx1c0dGLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjFDMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNHRi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWE1vZHVsdXNHRi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0YxRDE2NkE5RUI1MDBFMTMzMDQgLyogWlhNb2R1bHVzUG9seS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWE1vZHVsdXNQb2x5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjFFMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNQb2x5Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYTW9kdWx1c1BvbHkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGMUYxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RUNFcnJvckNvcnJlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0YyMDE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjIzMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQREY0MTdEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjI0MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhQREY0MTdEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjI4MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0RldGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUERGNDE3RGV0ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGMjkxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RGV0ZWN0b3IubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhQREY0MTdEZXRlY3Rvci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0YyQjE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlTWF0cml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQmFyY29kZU1hdHJpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0YyQzE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlTWF0cml4Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQmFyY29kZU1hdHJpeC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0YyRDE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlUm93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQmFyY29kZVJvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0YyRTE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlUm93Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQmFyY29kZVJvdy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0YyRjE2NkE5RUI1MDBFMTMzMDQgLyogWlhDb21wYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQ29tcGFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0YzMDE2NkE5RUI1MDBFMTMzMDQgLyogWlhEaW1lbnNpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRGltZW5zaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0YzMTE2NkE5RUI1MDBFMTMzMDQgLyogWlhEaW1lbnNpb25zLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRGltZW5zaW9ucy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0YzMjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQREY0MTcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGMzMxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUERGNDE3Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjM0MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0YzNTE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFcnJvckNvcnJlY3Rpb24ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhQREY0MTdFcnJvckNvcnJlY3Rpb24ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGMzYxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3SGlnaExldmVsRW5jb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFBERjQxN0hpZ2hMZXZlbEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGMzcxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3SGlnaExldmVsRW5jb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFBERjQxN0hpZ2hMZXZlbEVuY29kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGM0ExNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3UmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUERGNDE3UmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjNCMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN1JlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFBERjQxN1JlYWRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y1RDE2NkE5RjJEMDBFMTMzMDQgLyogWlhEYXRhTWFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWERhdGFNYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjVFMTY2QTlGMkQwMEUxMzMwNCAvKiBaWERhdGFNYXNrLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRGF0YU1hc2subTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNUYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y2MDE2NkE5RjJEMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEVycm9yQ29ycmVjdGlvbkxldmVsLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjYxMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZvcm1hdEluZm9ybWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRm9ybWF0SW5mb3JtYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNjIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRm9ybWF0SW5mb3JtYXRpb24ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhGb3JtYXRJbmZvcm1hdGlvbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y2MzE2NkE5RjJEMDBFMTMzMDQgLyogWlhNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y2NDE2NkE5RjJEMDBFMTMzMDQgLyogWlhNb2RlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYTW9kZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y2NTE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVCaXRNYXRyaXhQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhRUkNvZGVCaXRNYXRyaXhQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNjYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjY3MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZURhdGFCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFFSQ29kZURhdGFCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y2ODE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEYXRhQmxvY2subSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhRUkNvZGVEYXRhQmxvY2subTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNjkxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNkExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNkIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFFSQ29kZURlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNkMxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFFSQ29kZURlY29kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNkQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlVmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFFSQ29kZVZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNkUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlVmVyc2lvbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFFSQ29kZVZlcnNpb24ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNzAxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEFsaWdubWVudFBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNzExNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEFsaWdubWVudFBhdHRlcm4ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNzIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybkZpbmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEFsaWdubWVudFBhdHRlcm5GaW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNzMxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybkZpbmRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEFsaWdubWVudFBhdHRlcm5GaW5kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNzQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRmluZGVyUGF0dGVybkZpbmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEZpbmRlclBhdHRlcm5GaW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNzUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRmluZGVyUGF0dGVybkZpbmRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEZpbmRlclBhdHRlcm5GaW5kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNzYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRmluZGVyUGF0dGVybkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhGaW5kZXJQYXR0ZXJuSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y3NzE2NkE5RjJEMDBFMTMzMDQgLyogWlhGaW5kZXJQYXR0ZXJuSW5mby5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEZpbmRlclBhdHRlcm5JbmZvLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjc4MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZURldGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUVJDb2RlRGV0ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGNzkxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGV0ZWN0b3IubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhRUkNvZGVEZXRlY3Rvci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y3QTE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVGaW5kZXJQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUVJDb2RlRmluZGVyUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y3QjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVGaW5kZXJQYXR0ZXJuLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUVJDb2RlRmluZGVyUGF0dGVybi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y3RDE2NkE5RjJEMDBFMTMzMDQgLyogWlhCbG9ja1BhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhCbG9ja1BhaXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGN0UxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQmxvY2tQYWlyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQmxvY2tQYWlyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjdGMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEJ5dGVNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhCeXRlTWF0cml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjgwMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEJ5dGVNYXRyaXgubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhCeXRlTWF0cml4Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjgxMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhFbmNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjgyMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEVuY29kZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhFbmNvZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjgzMTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1hc2tVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYTWFza1V0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGODQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWFza1V0aWwubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhNYXNrVXRpbC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y4NTE2NkE5RjJEMDBFMTMzMDQgLyogWlhNYXRyaXhVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYTWF0cml4VXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y4NjE2NkE5RjJEMDBFMTMzMDQgLyogWlhNYXRyaXhVdGlsLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYTWF0cml4VXRpbC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y4NzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhRUkNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGODgxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUVJDb2RlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjg5MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFFSQ29kZVJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0Y4QTE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVSZWFkZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhRUkNvZGVSZWFkZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGOEIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlV3JpdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUVJDb2RlV3JpdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRjhDMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVdyaXRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFFSQ29kZVdyaXRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZCQjE2NkE5RkZDMDBFMTMzMDQgLyogWlhCYXJjb2RlRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQmFyY29kZUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZCQzE2NkE5RkZDMDBFMTMzMDQgLyogWlhCaW5hcml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhCaW5hcml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGQkQxNjZBOUZGQzAwRTEzMzA0IC8qIFpYQmluYXJpemVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQmluYXJpemVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkJFMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJpbmFyeUJpdG1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEJpbmFyeUJpdG1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZCRjE2NkE5RkZDMDBFMTMzMDQgLyogWlhCaW5hcnlCaXRtYXAubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhCaW5hcnlCaXRtYXAubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGQzAxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRGVjb2RlSGludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhEZWNvZGVIaW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZDMTE2NkE5RkZDMDBFMTMzMDQgLyogWlhEZWNvZGVIaW50cy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWERlY29kZUhpbnRzLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkMyMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEVuY29kZUhpbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRW5jb2RlSGludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGQzMxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRW5jb2RlSGludHMubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhFbmNvZGVIaW50cy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZDNDE2NkE5RkZDMDBFMTMzMDQgLyogWlhFcnJvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhFcnJvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGQzUxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRXJyb3JzLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRXJyb3JzLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkQxMTY2QUEwMDcwMEUxMzMwNCAvKiBaWEx1bWluYW5jZVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEx1bWluYW5jZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZEMjE2NkFBMDA3MDBFMTMzMDQgLyogWlhMdW1pbmFuY2VTb3VyY2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhMdW1pbmFuY2VTb3VyY2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGRDMxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhNdWx0aUZvcm1hdFJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZENDE2NkFBMDA3MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFJlYWRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWE11bHRpRm9ybWF0UmVhZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkQ1MTY2QUEwMDcwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0V3JpdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYTXVsdGlGb3JtYXRXcml0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGRDYxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRXcml0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhNdWx0aUZvcm1hdFdyaXRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZENzE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGRDgxNjZBQTAwNzAwRTEzMzA0IC8qIFpYUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkQ5MTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlc3VsdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFJlc3VsdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZEQTE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHRNZXRhZGF0YVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhSZXN1bHRNZXRhZGF0YVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGREIxNjZBQTAwNzAwRTEzMzA0IC8qIFpYUmVzdWx0UG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhSZXN1bHRQb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZEQzE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHRQb2ludC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFJlc3VsdFBvaW50Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkREMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhSZXN1bHRQb2ludENhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkRFMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFdyaXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFdyaXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZFRTE2NkFBMEYxMDBFMTMzMDQgLyogQXp0ZWNCbGFja0JveDFUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBenRlY0JsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkVGMTY2QUEwRjEwMEUxMzMwNCAvKiBBenRlY0JsYWNrQm94MVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEF6dGVjQmxhY2tCb3gxVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGRjAxNjZBQTBGMTAwRTEzMzA0IC8qIEF6dGVjQmxhY2tCb3gyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXp0ZWNCbGFja0JveDJUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZGMTE2NkFBMEYxMDBFMTMzMDQgLyogQXp0ZWNCbGFja0JveDJUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBBenRlY0JsYWNrQm94MlRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkY0MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0VGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkY1MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkY2MTY2QUEwRjEwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0VGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhDYWxlbmRhclBhcnNlZFJlc3VsdFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkY3MTY2QUEwRjEwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhDYWxlbmRhclBhcnNlZFJlc3VsdFRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkY4MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0VGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGRjkxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZGQTE2NkFBMEYxMDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkZCMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDNGRkMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYR2VvUGFyc2VkUmVzdWx0VGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhHZW9QYXJzZWRSZXN1bHRUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZGRDE2NkFBMEYxMDBFMTMzMDQgLyogWlhHZW9QYXJzZWRSZXN1bHRUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEdlb1BhcnNlZFJlc3VsdFRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDAzRkZFMTY2QUEwRjEwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHRUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWElTQk5QYXJzZWRSZXN1bHRUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwM0ZGRjE2NkFBMEYxMDBFMTMzMDQgLyogWlhJU0JOUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhJU0JOUGFyc2VkUmVzdWx0VGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwMDAxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUGFyc2VkUmVhZGVyUmVzdWx0VGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQYXJzZWRSZWFkZXJSZXN1bHRUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAwMTE2NkFBMEYxMDBFMTMzMDQgLyogWlhQYXJzZWRSZWFkZXJSZXN1bHRUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFBhcnNlZFJlYWRlclJlc3VsdFRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDAyMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAwMzE2NkFBMEYxMDBFMTMzMDQgLyogWlhQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwMDQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYU01TTU1TUGFyc2VkUmVzdWx0VGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhTTVNNTVNQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAwNTE2NkFBMEYxMDBFMTMzMDQgLyogWlhTTVNNTVNQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFNNU01NU1BhcnNlZFJlc3VsdFRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDA2MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFRlbFBhcnNlZFJlc3VsdFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYVGVsUGFyc2VkUmVzdWx0VGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwMDcxNjZBQTBGMTAwRTEzMzA0IC8qIFpYVGVsUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhUZWxQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAwODE2NkFBMEYxMDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFVSSVBhcnNlZFJlc3VsdFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDA5MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFVSSVBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYVVJJUGFyc2VkUmVzdWx0VGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwMEExNjZBQTBGMTAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYV2lmaVBhcnNlZFJlc3VsdFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDBCMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFdpZmlQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFdpZmlQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAwRDE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAwRTE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAwRjE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwMTAxNjZBQTBGMTAwRTEzMzA0IC8qIEFic3RyYWN0TmVnYXRpdmVCbGFja0JveFRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEFic3RyYWN0TmVnYXRpdmVCbGFja0JveFRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDFBMTY2QUEwRjEwMEUxMzMwNCAvKiBUZXN0UmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlc3RSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwMUIxNjZBQTBGMTAwRTEzMzA0IC8qIFRlc3RSZXN1bHQubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gVGVzdFJlc3VsdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAxQzE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaXRBcnJheVRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQml0QXJyYXlUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAxRDE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaXRBcnJheVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQml0QXJyYXlUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAxRTE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaXRNYXRyaXhUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEJpdE1hdHJpeFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDFGMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpdE1hdHJpeFRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQml0TWF0cml4VGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwMjAxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0U291cmNlQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEJpdFNvdXJjZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwMjExNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0U291cmNlQnVpbGRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEJpdFNvdXJjZUJ1aWxkZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwMjIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0U291cmNlVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhCaXRTb3VyY2VUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAyMzE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaXRTb3VyY2VUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEJpdFNvdXJjZVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDI0MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDI1MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDI2MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhTdHJpbmdVdGlsc1Rlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDI3MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhTdHJpbmdVdGlsc1Rlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDI5MTY2QUEwRjEwMEUxMzMwNCAvKiBEYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YU1hdHJpeEJsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDJBMTY2QUEwRjEwMEUxMzMwNCAvKiBEYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gRGF0YU1hdHJpeEJsYWNrQm94MVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDJCMTY2QUEwRjEwMEUxMzMwNCAvKiBEYXRhTWF0cml4QmxhY2tCb3gyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YU1hdHJpeEJsYWNrQm94MlRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDJDMTY2QUEwRjEwMEUxMzMwNCAvKiBEYXRhTWF0cml4QmxhY2tCb3gyVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gRGF0YU1hdHJpeEJsYWNrQm94MlRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDJFMTY2QUEwRjEwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDJGMTY2QUEwRjEwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDMxMTY2QUEwRjEwMEUxMzMwNCAvKiBGYWxzZVBvc2l0aXZlczJCbGFja0JveFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhbHNlUG9zaXRpdmVzMkJsYWNrQm94VGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwMzIxNjZBQTBGMTAwRTEzMzA0IC8qIEZhbHNlUG9zaXRpdmVzMkJsYWNrQm94VGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gRmFsc2VQb3NpdGl2ZXMyQmxhY2tCb3hUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAzMzE2NkFBMEYxMDBFMTMzMDQgLyogRmFsc2VQb3NpdGl2ZXNCbGFja0JveFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhbHNlUG9zaXRpdmVzQmxhY2tCb3hUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAzNDE2NkFBMEYxMDBFMTMzMDQgLyogRmFsc2VQb3NpdGl2ZXNCbGFja0JveFRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEZhbHNlUG9zaXRpdmVzQmxhY2tCb3hUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDAzNTE2NkFBMEYxMDBFMTMzMDQgLyogUGFydGlhbEJsYWNrQm94VGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFydGlhbEJsYWNrQm94VGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwMzYxNjZBQTBGMTAwRTEzMzA0IC8qIFBhcnRpYWxCbGFja0JveFRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFBhcnRpYWxCbGFja0JveFRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDM3MTY2QUEwRjEwMEUxMzMwNCAvKiBVbnN1cHBvcnRlZEJsYWNrQm94VGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDM4MTY2QUEwRjEwMEUxMzMwNCAvKiBVbnN1cHBvcnRlZEJsYWNrQm94VGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDNBMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RhYmFyQmxhY2tCb3gxVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kYWJhckJsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDNCMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RhYmFyQmxhY2tib3gxVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gQ29kYWJhckJsYWNrYm94MVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDNDMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMTI4QmxhY2tCb3gxVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZTEyOEJsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDNEMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMTI4QmxhY2tCb3gxVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gQ29kZTEyOEJsYWNrQm94MVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDNFMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMTI4QmxhY2tCb3gyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZTEyOEJsYWNrQm94MlRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDNGMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMTI4QmxhY2tCb3gyVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gQ29kZTEyOEJsYWNrQm94MlRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDQwMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMTI4QmxhY2tCb3gzVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZTEyOEJsYWNrQm94M1Rlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDQxMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMTI4QmxhY2tCb3gzVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gQ29kZTEyOEJsYWNrQm94M1Rlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDQyMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMzlCbGFja0JveDFUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlMzlCbGFja0JveDFUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA0MzE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTM5QmxhY2tCb3gxVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gQ29kZTM5QmxhY2tCb3gxVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNDQxNjZBQTBGMTAwRTEzMzA0IC8qIENvZGUzOUJsYWNrQm94M1Rlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGUzOUJsYWNrQm94M1Rlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDQ1MTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMzlCbGFja0JveDNUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBDb2RlMzlCbGFja0JveDNUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA0NjE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTM5RXh0ZW5kZWRCbGFja0JveDJUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlMzlFeHRlbmRlZEJsYWNrQm94MlRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDQ3MTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMzlFeHRlbmRlZEJsYWNrQm94MlRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IENvZGUzOUV4dGVuZGVkQmxhY2tCb3gyVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNDgxNjZBQTBGMTAwRTEzMzA0IC8qIENvZGU5M0JsYWNrQm94MVRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGU5M0JsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDQ5MTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlOTNCbGFja0JveDFUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBDb2RlOTNCbGFja0JveDFUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA0QTE2NkFBMEYxMDBFMTMzMDQgLyogRUFOMTNCbGFja0JveDFUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFQU4xM0JsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDRCMTY2QUEwRjEwMEUxMzMwNCAvKiBFQU4xM0JsYWNrQm94MVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEVBTjEzQmxhY2tCb3gxVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNEMxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjEzQmxhY2tCb3gyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRUFOMTNCbGFja0JveDJUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA0RDE2NkFBMEYxMDBFMTMzMDQgLyogRUFOMTNCbGFja0JveDJUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBFQU4xM0JsYWNrQm94MlRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDRFMTY2QUEwRjEwMEUxMzMwNCAvKiBFQU4xM0JsYWNrQm94M1Rlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVBTjEzQmxhY2tCb3gzVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNEYxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjEzQmxhY2tCb3gzVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gRUFOMTNCbGFja0JveDNUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA1MDE2NkFBMEYxMDBFMTMzMDQgLyogRUFOMTNCbGFja0JveDRUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFQU4xM0JsYWNrQm94NFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDUxMTY2QUEwRjEwMEUxMzMwNCAvKiBFQU4xM0JsYWNrQm94NFRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEVBTjEzQmxhY2tCb3g0VGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNTIxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjEzQmxhY2tCb3g1Qmx1cnJ5VGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRUFOMTNCbGFja0JveDVCbHVycnlUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA1MzE2NkFBMEYxMDBFMTMzMDQgLyogRUFOMTNCbGFja0JveDVCbHVycnlUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBFQU4xM0JsYWNrQm94NUJsdXJyeVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDU0MTY2QUEwRjEwMEUxMzMwNCAvKiBFQU44QmxhY2tCb3gxVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRUFOOEJsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDU1MTY2QUEwRjEwMEUxMzMwNCAvKiBFQU44QmxhY2tCb3gxVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gRUFOOEJsYWNrQm94MVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDU2MTY2QUEwRjEwMEUxMzMwNCAvKiBJVEZCbGFja0JveDFUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJVEZCbGFja0JveDFUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA1NzE2NkFBMEYxMDBFMTMzMDQgLyogSVRGQmxhY2tCb3gxVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gSVRGQmxhY2tCb3gxVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNTgxNjZBQTBGMTAwRTEzMzA0IC8qIElURkJsYWNrQm94MlRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElURkJsYWNrQm94MlRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDU5MTY2QUEwRjEwMEUxMzMwNCAvKiBJVEZCbGFja0JveDJUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBJVEZCbGFja0JveDJUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA1RDE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3REZWNvZGVyVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdERlY29kZXJUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDVFMTY2QUEwRjEwMEUxMzMwNCAvKiBBYnN0cmFjdERlY29kZXJUZXN0Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEFic3RyYWN0RGVjb2RlclRlc3QubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNUYxNjZBQTBGMTAwRTEzMzA0IC8qIEFJMDFfMzEwM19EZWNvZGVyVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBSTAxXzMxMDNfRGVjb2RlclRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNjAxNjZBQTBGMTAwRTEzMzA0IC8qIEFJMDFfMzEwM19EZWNvZGVyVGVzdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBBSTAxXzMxMDNfRGVjb2RlclRlc3QubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNjExNjZBQTBGMTAwRTEzMzA0IC8qIEFJMDFfMzIwMl8zMjAzX0RlY29kZXJUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFJMDFfMzIwMl8zMjAzX0RlY29kZXJUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDYyMTY2QUEwRjEwMEUxMzMwNCAvKiBBSTAxXzMyMDJfMzIwM19EZWNvZGVyVGVzdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBBSTAxXzMyMDJfMzIwM19EZWNvZGVyVGVzdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA2MzE2NkFBMEYxMDBFMTMzMDQgLyogQUkwMV8zWDBYXzFYX0RlY29kZXJUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFJMDFfM1gwWF8xWF9EZWNvZGVyVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA2NDE2NkFBMEYxMDBFMTMzMDQgLyogQUkwMV8zWDBYXzFYX0RlY29kZXJUZXN0Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEFJMDFfM1gwWF8xWF9EZWNvZGVyVGVzdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA2NTE2NkFBMEYxMDBFMTMzMDQgLyogQW55QUlEZWNvZGVyVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbnlBSURlY29kZXJUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDY2MTY2QUEwRjEwMEUxMzMwNCAvKiBBbnlBSURlY29kZXJUZXN0Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEFueUFJRGVjb2RlclRlc3QubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNjcxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRmllbGRQYXJzZXJUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRmllbGRQYXJzZXJUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDY4MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEZpZWxkUGFyc2VyVGVzdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEZpZWxkUGFyc2VyVGVzdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA2OTE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRCbGFja0JveDFUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSU1NFeHBhbmRlZEJsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDZBMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEJsYWNrQm94MVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFJTU0V4cGFuZGVkQmxhY2tCb3gxVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNkIxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkQmxhY2tCb3gyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlNTRXhwYW5kZWRCbGFja0JveDJUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA2QzE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRCbGFja0JveDJUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBSU1NFeHBhbmRlZEJsYWNrQm94MlRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDZEMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEJsYWNrQm94M1Rlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJTU0V4cGFuZGVkQmxhY2tCb3gzVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNkUxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkQmxhY2tCb3gzVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gUlNTRXhwYW5kZWRCbGFja0JveDNUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA2RjE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJiaW5hcnlUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSU1NFeHBhbmRlZEltYWdlMmJpbmFyeVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDcwMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMmJpbmFyeVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFJTU0V4cGFuZGVkSW1hZ2UyYmluYXJ5VGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNzExNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2UycmVzdWx0VGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlNTRXhwYW5kZWRJbWFnZTJyZXN1bHRUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA3MjE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJyZXN1bHRUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBSU1NFeHBhbmRlZEltYWdlMnJlc3VsdFRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDczMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMnN0cmluZ1Rlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJTU0V4cGFuZGVkSW1hZ2Uyc3RyaW5nVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwNzQxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2Uyc3RyaW5nVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gUlNTRXhwYW5kZWRJbWFnZTJzdHJpbmdUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA3NTE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJTU0V4cGFuZGVkSW50ZXJuYWxUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA3NjE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFJTU0V4cGFuZGVkSW50ZXJuYWxUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA3NzE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaW5hcnlVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYQmluYXJ5VXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA3ODE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaW5hcnlVdGlsLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQmluYXJ5VXRpbC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA3OTE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaW5hcnlVdGlsVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEJpbmFyeVV0aWxUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDdBMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpbmFyeVV0aWxUZXN0Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQmluYXJ5VXRpbFRlc3QubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwN0IxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEJpdEFycmF5QnVpbGRlclRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwN0MxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyVGVzdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEJpdEFycmF5QnVpbGRlclRlc3QubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwN0QxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRXhwYW5kZWRJbmZvcm1hdGlvbkRlY29kZXJUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRXhwYW5kZWRJbmZvcm1hdGlvbkRlY29kZXJUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDdFMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEV4cGFuZGVkSW5mb3JtYXRpb25EZWNvZGVyVGVzdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEV4cGFuZGVkSW5mb3JtYXRpb25EZWNvZGVyVGVzdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA3RjE2NkFBMEYxMDBFMTMzMDQgLyogUlNTMTRCbGFja0JveDFUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSU1MxNEJsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDgwMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1MxNEJsYWNrQm94MVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFJTUzE0QmxhY2tCb3gxVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwODExNjZBQTBGMTAwRTEzMzA0IC8qIFJTUzE0QmxhY2tCb3gyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlNTMTRCbGFja0JveDJUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA4MjE2NkFBMEYxMDBFMTMzMDQgLyogUlNTMTRCbGFja0JveDJUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBSU1MxNEJsYWNrQm94MlRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDgzMTY2QUEwRjEwMEUxMzMwNCAvKiBVUENBQmxhY2tCb3gxVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVBDQUJsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDg0MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENBQmxhY2tCb3gxVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gVVBDQUJsYWNrQm94MVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDg1MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENBQmxhY2tCb3gyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVBDQUJsYWNrQm94MlRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDg2MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENBQmxhY2tCb3gyVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gVVBDQUJsYWNrQm94MlRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDg3MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENBQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVQQ0FCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwODgxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0FCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gVVBDQUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA4OTE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94NFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVQQ0FCbGFja0JveDRUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA4QTE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94NFRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFVQQ0FCbGFja0JveDRUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA4QjE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94NVRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVQQ0FCbGFja0JveDVUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA4QzE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94NVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFVQQ0FCbGFja0JveDVUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA4RDE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94NkJsdXJyeVRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVQQ0FCbGFja0JveDZCbHVycnlUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA4RTE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94NkJsdXJyeVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFVQQ0FCbGFja0JveDZCbHVycnlUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA4RjE2NkFBMEYxMDBFMTMzMDQgLyogVVBDRUFORXh0ZW5zaW9uQmxhY2tCb3gxVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVBDRUFORXh0ZW5zaW9uQmxhY2tCb3gxVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwOTAxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0VBTkV4dGVuc2lvbkJsYWNrQm94MVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFVQQ0VBTkV4dGVuc2lvbkJsYWNrQm94MVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDkxMTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQmxhY2tCb3gxVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVBDRUJsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDkyMTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQmxhY2tCb3gxVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gVVBDRUJsYWNrQm94MVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDkzMTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQmxhY2tCb3gyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVBDRUJsYWNrQm94MlRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDk0MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQmxhY2tCb3gyVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gVVBDRUJsYWNrQm94MlRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDk1MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVQQ0VCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwOTYxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0VCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gVVBDRUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA5NzE2NkFBMEYxMDBFMTMzMDQgLyogWlhDb2RhQmFyV3JpdGVyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhDb2RhQmFyV3JpdGVyVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwOTgxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQ29kYUJhcldyaXRlclRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYQ29kYUJhcldyaXRlclRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDlCMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVBTjEzV3JpdGVyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhFQU4xM1dyaXRlclRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDlDMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVBTjEzV3JpdGVyVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhFQU4xM1dyaXRlclRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MDlEMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXJUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEVBTjhXcml0ZXJUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDA5RTE2NkFBMEYxMDBFMTMzMDQgLyogWlhFQU44V3JpdGVyVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhFQU44V3JpdGVyVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwOUYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBBMDE2NkFBMEYxMDBFMTMzMDQgLyogWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0VGVzdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnRUZXN0Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEEzMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXJUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFVQQ0FXcml0ZXJUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBBNDE2NkFBMEYxMDBFMTMzMDQgLyogWlhVUENBV3JpdGVyVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhVUENBV3JpdGVyVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwQTgxNjZBQTBGMTAwRTEzMzA0IC8qIEFic3RyYWN0RXJyb3JDb3JyZWN0aW9uVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBBOTE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBBYnN0cmFjdEVycm9yQ29ycmVjdGlvblRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEFBMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvblRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEFCMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvblRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEFDMTY2QUEwRjEwMEUxMzMwNCAvKiBQREY0MTdCbGFja0JveDFUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQREY0MTdCbGFja0JveDFUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBBRDE2NkFBMEYxMDBFMTMzMDQgLyogUERGNDE3QmxhY2tCb3gxVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gUERGNDE3QmxhY2tCb3gxVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwQUUxNjZBQTBGMTAwRTEzMzA0IC8qIFBERjQxN0JsYWNrQm94MlRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBERjQxN0JsYWNrQm94MlRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEFGMTY2QUEwRjEwMEUxMzMwNCAvKiBQREY0MTdCbGFja0JveDJUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBQREY0MTdCbGFja0JveDJUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBCMjE2NkFBMEYxMDBFMTMzMDQgLyogWlhEYXRhTWFza1Rlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRGF0YU1hc2tUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBCMzE2NkFBMEYxMDBFMTMzMDQgLyogWlhEYXRhTWFza1Rlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRGF0YU1hc2tUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBCNDE2NkFBMEYxMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBCNTE2NkFBMEYxMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbFRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBCNjE2NkFBMEYxMDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvblRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRm9ybWF0SW5mb3JtYXRpb25UZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBCNzE2NkFBMEYxMDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvblRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYRm9ybWF0SW5mb3JtYXRpb25UZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBCODE2NkFBMEYxMDBFMTMzMDQgLyogWlhNb2RlVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhNb2RlVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwQjkxNjZBQTBGMTAwRTEzMzA0IC8qIFpYTW9kZVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYTW9kZVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEJBMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXJUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXJUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBCQjE2NkFBMEYxMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwQkMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlVmVyc2lvblRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYUVJDb2RlVmVyc2lvblRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEJEMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb25UZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFFSQ29kZVZlcnNpb25UZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBCRjE2NkFBMEYxMDBFMTMzMDQgLyogQml0VmVjdG9yVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQml0VmVjdG9yVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwQzAxNjZBQTBGMTAwRTEzMzA0IC8qIEJpdFZlY3RvclRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEJpdFZlY3RvclRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEMxMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVuY29kZXJUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWEVuY29kZXJUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBDMjE2NkFBMEYxMDBFMTMzMDQgLyogWlhFbmNvZGVyVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhFbmNvZGVyVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwQzMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYTWFza1V0aWxUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWE1hc2tVdGlsVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwQzQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYTWFza1V0aWxUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWE1hc2tVdGlsVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwQzUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYTWF0cml4VXRpbFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEM2MTY2QUEwRjEwMEUxMzMwNCAvKiBaWE1hdHJpeFV0aWxUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWE1hdHJpeFV0aWxUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBDNzE2NkFBMEYxMDBFMTMzMDQgLyogWlhRUkNvZGVUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWFFSQ29kZVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEM4MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFFSQ29kZVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUVJDb2RlVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwQzkxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94MVRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFFSQ29kZUJsYWNrQm94MVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MENBMTY2QUEwRjEwMEUxMzMwNCAvKiBRUkNvZGVCbGFja0JveDFUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBRUkNvZGVCbGFja0JveDFUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBDQjE2NkFBMEYxMDBFMTMzMDQgLyogUVJDb2RlQmxhY2tCb3gyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUVJDb2RlQmxhY2tCb3gyVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwQ0MxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94MlRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFFSQ29kZUJsYWNrQm94MlRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MENEMTY2QUEwRjEwMEUxMzMwNCAvKiBRUkNvZGVCbGFja0JveDNUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRUkNvZGVCbGFja0JveDNUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBDRTE2NkFBMEYxMDBFMTMzMDQgLyogUVJDb2RlQmxhY2tCb3gzVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gUVJDb2RlQmxhY2tCb3gzVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwQ0YxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94NFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFFSQ29kZUJsYWNrQm94NFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEQwMTY2QUEwRjEwMEUxMzMwNCAvKiBRUkNvZGVCbGFja0JveDRUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBRUkNvZGVCbGFja0JveDRUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBEMTE2NkFBMEYxMDBFMTMzMDQgLyogUVJDb2RlQmxhY2tCb3g1VGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUVJDb2RlQmxhY2tCb3g1VGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwRDIxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94NVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFFSQ29kZUJsYWNrQm94NVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MEQzMTY2QUEwRjEwMEUxMzMwNCAvKiBRUkNvZGVCbGFja0JveDZUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRUkNvZGVCbGFja0JveDZUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBENDE2NkFBMEYxMDBFMTMzMDQgLyogUVJDb2RlQmxhY2tCb3g2VGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gUVJDb2RlQmxhY2tCb3g2VGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MDQwRDUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlV3JpdGVyVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhRUkNvZGVXcml0ZXJUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQwNDBENjE2NkFBMEYxMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXJUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWFFSQ29kZVdyaXRlclRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDA0MTQ1MTY2QUExNjIwMEUxMzMwNCAvKiBVSUtpdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFVJS2l0LmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvVUlLaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKKwkJMjU0MDQxNEUxNjZBQTMzNzAwRTEzMzA0IC8qIENvcmVHcmFwaGljcy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IENvcmVHcmFwaGljcy5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVHcmFwaGljcy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OworCQkyNTQwNDE1QjE2NkFBODY5MDBFMTMzMDQgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEltYWdlSU8uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CisJCTI1NDA0MTVFMTY2QUFBMkYwMEUxMzMwNCAvKiBDb3JlVmlkZW8uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDb3JlVmlkZW8uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlVmlkZW8uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKKwkJMjU0MDQxNjYxNjZBQURBQzAwRTEzMzA0IC8qIGxpYlpYaW5nT2JqQy1vc3guYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gImxpYlpYaW5nT2JqQy1vc3guYSI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTI1NDA0MTc4MTY2QUFEQUMwMEUxMzMwNCAvKiBVbml0IFRlc3RzIE9TIFgub2N0ZXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmNmYnVuZGxlOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSAiVW5pdCBUZXN0cyBPUyBYLm9jdGVzdCI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTI1NDA0MThEMTY2QUFERUYwMEUxMzMwNCAvKiBvc3gtUHJlZml4LnBjaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gIm9zeC1QcmVmaXgucGNoIjsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQkyNTQwNDM4NzE2NkFCOENGMDBFMTMzMDQgLyogQ29yZVZpZGVvLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ29yZVZpZGVvLmZyYW1ld29yazsgcGF0aCA9IFBsYXRmb3Jtcy9NYWNPU1gucGxhdGZvcm0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuOC5zZGsvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlVmlkZW8uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gREVWRUxPUEVSX0RJUjsgfTsKKwkJMjU0MDQzOEYxNjZBQjkxNzAwRTEzMzA0IC8qIENvY29hLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ29jb2EuZnJhbWV3b3JrOyBwYXRoID0gUGxhdGZvcm1zL01hY09TWC5wbGF0Zm9ybS9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC44LnNkay9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvY29hLmZyYW1ld29yazsgc291cmNlVHJlZSA9IERFVkVMT1BFUl9ESVI7IH07CisJCTI1NDA0Mzk0MTY2QUI5NTcwMEUxMzMwNCAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcms7IHBhdGggPSBQbGF0Zm9ybXMvTWFjT1NYLnBsYXRmb3JtL0RldmVsb3Blci9TREtzL01hY09TWDEwLjguc2RrL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBERVZFTE9QRVJfRElSOyB9OworCQkyNTQwNDM5RTE2NkFCQTBBMDBFMTMzMDQgLyogWlhpbmdPYmpDLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFpYaW5nT2JqQy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTI1NDA0NkZDMTY2QUJDMTYwMEUxMzMwNCAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSBQbGF0Zm9ybXMvTWFjT1NYLnBsYXRmb3JtL0RldmVsb3Blci9TREtzL01hY09TWDEwLjguc2RrL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvUXVhcnR6Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBERVZFTE9QRVJfRElSOyB9OworCQkyNTQwNDcwMDE2NkFCQzNGMDBFMTMzMDQgLyogUVRLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBRVEtpdC5mcmFtZXdvcms7IHBhdGggPSBQbGF0Zm9ybXMvTWFjT1NYLnBsYXRmb3JtL0RldmVsb3Blci9TREtzL01hY09TWDEwLjguc2RrL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvUVRLaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gREVWRUxPUEVSX0RJUjsgfTsKKwkJMjU0MDQ3MUExNjZBQzIxMDAwRTEzMzA0IC8qIEFWRm91bmRhdGlvbi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEFWRm91bmRhdGlvbi5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FWRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OworCQkyNTQyOTk2QjE2RDMzMzFGMDBENEMwNDUgLyogWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5NkMxNkQzMzMxRjAwRDRDMDQ1IC8qIFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5OTczMTZENDZFODQwMEQ0QzA0NSAvKiBaWERpbWVuc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWERpbWVuc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOTk3NDE2RDQ2RTg0MDBENEMwNDUgLyogWlhEaW1lbnNpb24ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhEaW1lbnNpb24ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5N0IxNkQ0NzBENjAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFdyaXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBaWERhdGFNYXRyaXhXcml0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5N0MxNkQ0NzBENjAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFdyaXRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWERhdGFNYXRyaXhXcml0ZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5ODQxNkQ0NzhBMDAwRDRDMDQ1IC8qIFpYQVNDSUlFbmNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFpYQVNDSUlFbmNvZGVyLmg7IHBhdGggPSBlbmNvZGVyL1pYQVNDSUlFbmNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5OTg1MTZENDc4QTAwMEQ0QzA0NSAvKiBaWEFTQ0lJRW5jb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBaWEFTQ0lJRW5jb2Rlci5tOyBwYXRoID0gZW5jb2Rlci9aWEFTQ0lJRW5jb2Rlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOTk4QzE2RDQ3OEY4MDBENEMwNDUgLyogWlhEYXRhTWF0cml4RW5jb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBaWERhdGFNYXRyaXhFbmNvZGVyLmg7IHBhdGggPSBlbmNvZGVyL1pYRGF0YU1hdHJpeEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5OEQxNkQ0N0JCRjAwRDRDMDQ1IC8qIFpYQmFzZTI1NkVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWlhCYXNlMjU2RW5jb2Rlci5oOyBwYXRoID0gZW5jb2Rlci9aWEJhc2UyNTZFbmNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5OThFMTZENDdCQkYwMEQ0QzA0NSAvKiBaWEJhc2UyNTZFbmNvZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFpYQmFzZTI1NkVuY29kZXIubTsgcGF0aCA9IGVuY29kZXIvWlhCYXNlMjU2RW5jb2Rlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOTk5NzE2RDQ4MkY4MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFpYQzQwRW5jb2Rlci5oOyBwYXRoID0gZW5jb2Rlci9aWEM0MEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5OTgxNkQ0ODJGODAwRDRDMDQ1IC8qIFpYQzQwRW5jb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBaWEM0MEVuY29kZXIubTsgcGF0aCA9IGVuY29kZXIvWlhDNDBFbmNvZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5OTlGMTZENDg3OTgwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFpYRGF0YU1hdHJpeFN5bWJvbEluZm8xNDQuaDsgcGF0aCA9IGVuY29kZXIvWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOTlBMDE2RDQ4Nzk4MDBENEMwNDUgLyogWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBaWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0Lm07IHBhdGggPSBlbmNvZGVyL1pYRGF0YU1hdHJpeFN5bWJvbEluZm8xNDQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5QTcxNkQ0ODg2MDAwRDRDMDQ1IC8qIFpYRGVmYXVsdFBsYWNlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBaWERlZmF1bHRQbGFjZW1lbnQuaDsgcGF0aCA9IGVuY29kZXIvWlhEZWZhdWx0UGxhY2VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5OUE4MTZENDg4NjAwMEQ0QzA0NSAvKiBaWERlZmF1bHRQbGFjZW1lbnQubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gWlhEZWZhdWx0UGxhY2VtZW50Lm07IHBhdGggPSBlbmNvZGVyL1pYRGVmYXVsdFBsYWNlbWVudC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOTlBRjE2RDRBMzY3MDBENEMwNDUgLyogWlhFZGlmYWN0RW5jb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBaWEVkaWZhY3RFbmNvZGVyLmg7IHBhdGggPSBlbmNvZGVyL1pYRWRpZmFjdEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5QjAxNkQ0QTM2NzAwRDRDMDQ1IC8qIFpYRWRpZmFjdEVuY29kZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gWlhFZGlmYWN0RW5jb2Rlci5tOyBwYXRoID0gZW5jb2Rlci9aWEVkaWZhY3RFbmNvZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5OUI3MTZENEE1QTkwMEQ0QzA0NSAvKiBaWEVuY29kZXJDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFpYRW5jb2RlckNvbnRleHQuaDsgcGF0aCA9IGVuY29kZXIvWlhFbmNvZGVyQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOTlCODE2RDRBNUE5MDBENEMwNDUgLyogWlhFbmNvZGVyQ29udGV4dC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBaWEVuY29kZXJDb250ZXh0Lm07IHBhdGggPSBlbmNvZGVyL1pYRW5jb2RlckNvbnRleHQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5QkYxNkQ1QjhFNDAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb24uaDsgcGF0aCA9IGVuY29kZXIvWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5OUMwMTZENUI4RTQwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb24ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLm07IHBhdGggPSBlbmNvZGVyL1pYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOTlDNzE2RDVCRDUzMDBENEMwNDUgLyogWlhIaWdoTGV2ZWxFbmNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFpYSGlnaExldmVsRW5jb2Rlci5oOyBwYXRoID0gZW5jb2Rlci9aWEhpZ2hMZXZlbEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5QzgxNkQ1QkQ1MzAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2Rlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBaWEhpZ2hMZXZlbEVuY29kZXIubTsgcGF0aCA9IGVuY29kZXIvWlhIaWdoTGV2ZWxFbmNvZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5OUNGMTZENUM5NjAwMEQ0QzA0NSAvKiBaWFN5bWJvbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWlhTeW1ib2xJbmZvLmg7IHBhdGggPSBlbmNvZGVyL1pYU3ltYm9sSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOTlEMDE2RDVDOTYwMDBENEMwNDUgLyogWlhTeW1ib2xJbmZvLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFpYU3ltYm9sSW5mby5tOyBwYXRoID0gZW5jb2Rlci9aWFN5bWJvbEluZm8ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5RDcxNkQ1RDExRTAwRDRDMDQ1IC8qIFpYU3ltYm9sU2hhcGVIaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFpYU3ltYm9sU2hhcGVIaW50Lmg7IHBhdGggPSBlbmNvZGVyL1pYU3ltYm9sU2hhcGVIaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5OURGMTZENUQyNEQwMEQ0QzA0NSAvKiBaWFN5bWJvbFNoYXBlSGludC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBaWFN5bWJvbFNoYXBlSGludC5tOyBwYXRoID0gZW5jb2Rlci9aWFN5bWJvbFNoYXBlSGludC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOTlFMzE2RDVEODE4MDBENEMwNDUgLyogWlhUZXh0RW5jb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBaWFRleHRFbmNvZGVyLmg7IHBhdGggPSBlbmNvZGVyL1pYVGV4dEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5RTQxNkQ1RDgxOTAwRDRDMDQ1IC8qIFpYVGV4dEVuY29kZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gWlhUZXh0RW5jb2Rlci5tOyBwYXRoID0gZW5jb2Rlci9aWFRleHRFbmNvZGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5OUVCMTZENUQ5NDkwMEQ0QzA0NSAvKiBaWFgxMkVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWlhYMTJFbmNvZGVyLmg7IHBhdGggPSBlbmNvZGVyL1pYWDEyRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOTlFQzE2RDVEOTRBMDBENEMwNDUgLyogWlhYMTJFbmNvZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFpYWDEyRW5jb2Rlci5tOyBwYXRoID0gZW5jb2Rlci9aWFgxMkVuY29kZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5RjMxNkQ1REM4RTAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFdyaXRlclRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRGF0YU1hdHJpeFdyaXRlclRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5OUY0MTZENURDOEUwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhXcml0ZXJUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBaWERhdGFNYXRyaXhXcml0ZXJUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOTlGRTE2RDVERkQ4MDBENEMwNDUgLyogWlhEZWJ1Z1BsYWNlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBaWERlYnVnUGxhY2VtZW50Lmg7IHBhdGggPSBlbmNvZGVyL1pYRGVidWdQbGFjZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0Mjk5RkYxNkQ1REZEODAwRDRDMDQ1IC8qIFpYRGVidWdQbGFjZW1lbnQubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gWlhEZWJ1Z1BsYWNlbWVudC5tOyBwYXRoID0gZW5jb2Rlci9aWERlYnVnUGxhY2VtZW50Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5QTAyMTZENUUwRUQwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5oOyBwYXRoID0gZW5jb2Rlci9aWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOUEwMzE2RDVFMEVEMDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubTsgcGF0aCA9IGVuY29kZXIvWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MjlBMDYxNkQ1RTIxQzAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2RlVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWlhIaWdoTGV2ZWxFbmNvZGVUZXN0Q2FzZS5oOyBwYXRoID0gZW5jb2Rlci9aWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5QTA3MTZENUUyMUMwMEQ0QzA0NSAvKiBaWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFpYSGlnaExldmVsRW5jb2RlVGVzdENhc2UubTsgcGF0aCA9IGVuY29kZXIvWlhIaWdoTGV2ZWxFbmNvZGVUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOUEwQTE2RDVGNEUwMDBENEMwNDUgLyogWlhQbGFjZW1lbnRUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBaWFBsYWNlbWVudFRlc3RDYXNlLmg7IHBhdGggPSBlbmNvZGVyL1pYUGxhY2VtZW50VGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjU0MjlBMEIxNkQ1RjRFMDAwRDRDMDQ1IC8qIFpYUGxhY2VtZW50VGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gWlhQbGFjZW1lbnRUZXN0Q2FzZS5tOyBwYXRoID0gZW5jb2Rlci9aWFBsYWNlbWVudFRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1NDI5QTBFMTZENUY2NkQwMEQ0QzA0NSAvKiBaWFN5bWJvbEluZm9UZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBaWFN5bWJvbEluZm9UZXN0Q2FzZS5oOyBwYXRoID0gZW5jb2Rlci9aWFN5bWJvbEluZm9UZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTQyOUEwRjE2RDVGNjZEMDBENEMwNDUgLyogWlhTeW1ib2xJbmZvVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gWlhTeW1ib2xJbmZvVGVzdENhc2UubTsgcGF0aCA9IGVuY29kZXIvWlhTeW1ib2xJbmZvVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjVCNTgyOTcxODE2RjdCMDAwMTM2MzRBIC8qIFBERjQxN0JsYWNrQm94NFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBERjQxN0JsYWNrQm94NFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1QjU4Mjk4MTgxNkY3QjAwMDEzNjM0QSAvKiBQREY0MTdCbGFja0JveDRUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBQREY0MTdCbGFja0JveDRUZXN0Q2FzZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNUU5RTkxNzE3RkE1NTU0MDAzNjQ4NjEgLyogUERGNDE3QmxhY2tCb3gzVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUERGNDE3QmxhY2tCb3gzVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjVFOUU5MTgxN0ZBNTU1NDAwMzY0ODYxIC8qIFBERjQxN0JsYWNrQm94M1Rlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFBERjQxN0JsYWNrQm94M1Rlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1RkU1RDMxMTZEMEFGRUQwMDgyNkNEQiAvKiBaWEV4cGFuZGVkUm93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFpYRXhwYW5kZWRSb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjVGRTVEMzIxNkQwQUZFRDAwODI2Q0RCIC8qIFpYRXhwYW5kZWRSb3cubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gWlhFeHBhbmRlZFJvdy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNUZFNUQzODE2RDBCODJGMDA4MjZDREIgLyogUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gxVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gxVGVzdENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjVGRTVEMzkxNkQwQjgyRjAwODI2Q0RCIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MVRlc3RDYXNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFJTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MVRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1RkU1RDNBMTZEMEI4MzAwMDgyNkNEQiAvKiBSU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDJUZXN0Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDJUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNUZFNUQzQjE2RDBCODMwMDA4MjZDREIgLyogUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gyVGVzdENhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gyVGVzdENhc2UubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjVGRTVEM0UxNkQwQjg0QzAwODI2Q0RCIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEludGVybmFsVGVzdENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlNTRXhwYW5kZWRTdGFja2VkSW50ZXJuYWxUZXN0Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNUZFNUQzRjE2RDBCODRDMDA4MjZDREIgLyogUlNTRXhwYW5kZWRTdGFja2VkSW50ZXJuYWxUZXN0Q2FzZS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBSU1NFeHBhbmRlZFN0YWNrZWRJbnRlcm5hbFRlc3RDYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1RkU1RDQxMTZEMEI4QjEwMDgyNkNEQiAvKiBUZXN0Q2FzZVV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdENhc2VVdGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1RkU1RDQyMTZEMEI4QjIwMDgyNkNEQiAvKiBUZXN0Q2FzZVV0aWwubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gVGVzdENhc2VVdGlsLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1RkU1RDQ0MTZEMTk5N0MwMDgyNkNEQiAvKiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmb2xkZXI7IHBhdGggPSBSZXNvdXJjZXM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMDI0OTU4NjgxODk4NjQxQjAwM0Q0RTZBIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwMjQ5NTg2OTE4OTg2NDFCMDAzRDRFNkEgLyogQVZGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTAyNDk1ODZBMTg5ODY0MUIwMDNENEU2QSAvKiBDb3JlR3JhcGhpY3MuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMDI0OTU4NkIxODk4NjQxQjAwM0Q0RTZBIC8qIENvcmVWaWRlby5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwMjQ5NTg2QzE4OTg2NDFCMDAzRDRFNkEgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwMjQ5NTg2RDE4OTg2NDFCMDAzRDRFNkEgLyogSW1hZ2VJTy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwMjQ5NTg2RTE4OTg2NDFCMDAzRDRFNkEgLyogU2VuVGVzdGluZ0tpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwMjQ5NTg2RjE4OTg2NDFCMDAzRDRFNkEgLyogVUlLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMDI0OTU4NzAxODk4NjQxQjAwM0Q0RTZBIC8qIGxpYlpYaW5nT2JqQy1pT1MuYSBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQkwMkQ4MTNFODE4OTg2NEM3MDA4MTcyMUQgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTAyRDgxM0U5MTg5ODY0QzcwMDgxNzIxRCAvKiBRVEtpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwMkQ4MTNFQTE4OTg2NEM3MDA4MTcyMUQgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwMkQ4MTNFQjE4OTg2NEM3MDA4MTcyMUQgLyogQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwMkQ4MTNFQzE4OTg2NEM3MDA4MTcyMUQgLyogQ29yZVZpZGVvLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTAyRDgxM0VEMTg5ODY0QzcwMDgxNzIxRCAvKiBTZW5UZXN0aW5nS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTAyRDgxM0VFMTg5ODY0QzcwMDgxNzIxRCAvKiBsaWJaWGluZ09iakMtb3N4LmEgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMjU0MDNDQjAxNjZBOTZGQTAwRTEzMzA0IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkyNTQwNDcxQjE2NkFDMjEwMDBFMTMzMDQgLyogQVZGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDA0MTRGMTY2QUEzMzcwMEUxMzMwNCAvKiBDb3JlR3JhcGhpY3MuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMjU0MDQxNjExNjZBQUFEOTAwRTEzMzA0IC8qIENvcmVWaWRlby5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkyNTQwM0NCNzE2NkE5NkZBMDBFMTMzMDQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkyNTQwNDE1QzE2NkFBODY5MDBFMTMzMDQgLyogSW1hZ2VJTy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkyNTQwNDE0NjE2NkFBMTYyMDBFMTMzMDQgLyogVUlLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCTI1NDAzQ0MwMTY2QTk2RkEwMEUxMzMwNCAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMjU0MDQ3MUMxNjZBQzIxRDAwRTEzMzA0IC8qIEFWRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkyNTQwNDE1MDE2NkFBMzNFMDBFMTMzMDQgLyogQ29yZUdyYXBoaWNzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDA0MTVGMTY2QUFBMkYwMEUxMzMwNCAvKiBDb3JlVmlkZW8uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMjU0MDNDQzkxNjZBOTZGQTAwRTEzMzA0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMjU0MDQxNUQxNjZBQTg3MDAwRTEzMzA0IC8qIEltYWdlSU8uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMjU0MDNDQzYxNjZBOTZGQTAwRTEzMzA0IC8qIFNlblRlc3RpbmdLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMjU0MDQxNjAxNjZBQUFBQjAwRTEzMzA0IC8qIFVJS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDAzQ0NDMTY2QTk2RkEwMEUxMzMwNCAvKiBsaWJaWGluZ09iakMtaU9TLmEgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMjU0MDQxNjMxNjZBQURBQzAwRTEzMzA0IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkyNTQwNDM5NTE2NkFCOTU3MDBFMTMzMDQgLyogQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkyNTQwNDM5MDE2NkFCOTE3MDBFMTMzMDQgLyogQ29jb2EuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMjU0MDQ3MDExNjZBQkMzRjAwRTEzMzA0IC8qIFFUS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDA0NkZGMTY2QUJDMjYwMEUxMzMwNCAvKiBRdWFydHpDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDA0Mzg4MTY2QUI4Q0YwMEUxMzMwNCAvKiBDb3JlVmlkZW8uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCTI1NDA0MTc0MTY2QUFEQUMwMEUxMzMwNCAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMjU0MDQ3MDIxNjZBQkM0NjAwRTEzMzA0IC8qIFFUS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDA0NkZFMTY2QUJDMjEwMEUxMzMwNCAvKiBRdWFydHpDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDA0Mzk3MTY2QUI5NjAwMEUxMzMwNCAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDA0Mzg5MTY2QUI4RDYwMEUxMzMwNCAvKiBDb3JlVmlkZW8uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMjU0MDQxNzkxNjZBQURBQzAwRTEzMzA0IC8qIFNlblRlc3RpbmdLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMjU0MDQxN0QxNjZBQURBQzAwRTEzMzA0IC8qIGxpYlpYaW5nT2JqQy1vc3guYSBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQkyNTQwNDM5QTE2NkFCQTBBMDBFMTMzMDQgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTI1NDA0NzAzMTY2QUJDNEIwMEUxMzMwNCAvKiBRVEtpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkyNTQwNDZGRDE2NkFCQzE2MDBFMTMzMDQgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkyNTQwNDNCNzE2NkFCQTc4MDBFMTMzMDQgLyogQ29yZVZpZGVvLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDA0M0I2MTY2QUJBNzUwMEUxMzMwNCAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDA0M0I1MTY2QUJBNkIwMEUxMzMwNCAvKiBDb2NvYS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KKwkJMDJCREEyRUQxODAzMTA5RTAwMzlCMzI2IC8qIFN1cHBvcnRpbmcgRmlsZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTAyQkRBMkVFMTgwMzEwOUUwMDM5QjMyNiAvKiBUZXN0cy1pT1MtUHJlZml4LnBjaCAqLywKKwkJCQkwMkJEQTJFRjE4MDMxMDlFMDAzOUIzMjYgLyogVGVzdHMtT1NYLVByZWZpeC5wY2ggKi8sCisJCQkJMDJCREEyRjAxODAzMTA5RTAwMzlCMzI2IC8qIFpYaW5nT2JqQ1Rlc3RzLUluZm8ucGxpc3QgKi8sCisJCQkpOworCQkJcGF0aCA9ICJTdXBwb3J0aW5nIEZpbGVzIjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1MDREOUNDMTZGRkQyQ0MwMERGODg4MiAvKiBlbmNvZGVyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTA0RDlDRDE2RkZEMkUyMDBERjg4ODIgLyogWlhBenRlY0NvZGUuaCAqLywKKwkJCQkyNTA0RDlDRTE2RkZEMkUyMDBERjg4ODIgLyogWlhBenRlY0NvZGUubSAqLywKKwkJCQkyNTA0RDlEQTE2RkZENENEMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXIuaCAqLywKKwkJCQkyNTA0RDlEQjE2RkZENENEMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXIubSAqLywKKwkJCSk7CisJCQluYW1lID0gZW5jb2RlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1MDREOUUzMTZGRkYyNUUwMERGODg4MiAvKiBlbmNvZGVyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTA0RDlFNDE2RkZGMjdDMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXJUZXN0LmggKi8sCisJCQkJMjUwNEQ5RTUxNkZGRjI3QzAwREY4ODgyIC8qIFpYQXp0ZWNFbmNvZGVyVGVzdC5tICovLAorCQkJKTsKKwkJCW5hbWUgPSBlbmNvZGVyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjUzODlCOEYxODAxMEQ3QTAwNzcyMzkyIC8qIGRldGVjdG9yICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTM4OUI5MDE4MDEwRDlCMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclRlc3QuaCAqLywKKwkJCQkyNTM4OUI5MTE4MDEwRDlCMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclRlc3QubSAqLywKKwkJCSk7CisJCQluYW1lID0gZGV0ZWN0b3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0NBODE2NkE5NkY5MDBFMTMzMDQgPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzQ0I4MTY2QTk2RkEwMEUxMzMwNCAvKiBaWGluZ09iakMgKi8sCisJCQkJMjU0MDNDQ0QxNjZBOTZGQTAwRTEzMzA0IC8qIFpYaW5nT2JqQ1Rlc3RzICovLAorCQkJCTI1NDAzQ0I5MTY2QTk2RkEwMEUxMzMwNCAvKiBTdXBwb3J0aW5nIEZpbGVzICovLAorCQkJCTI1NDAzQ0I1MTY2QTk2RkEwMEUxMzMwNCAvKiBpT1MgRnJhbWV3b3JrcyAqLywKKwkJCQkyNTQwNDM4QTE2NkFCOEVBMDBFMTMzMDQgLyogT1MgWCBGcmFtZXdvcmtzICovLAorCQkJCTI1NDAzQ0I0MTY2QTk2RkEwMEUxMzMwNCAvKiBQcm9kdWN0cyAqLywKKwkJCSk7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0NCNDE2NkE5NkZBMDBFMTMzMDQgLyogUHJvZHVjdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzQ0IzMTY2QTk2RkEwMEUxMzMwNCAvKiBsaWJaWGluZ09iakMtaU9TLmEgKi8sCisJCQkJMjU0MDNDQzQxNjZBOTZGQTAwRTEzMzA0IC8qIFVuaXQgVGVzdHMgaU9TLm9jdGVzdCAqLywKKwkJCQkyNTQwNDE2NjE2NkFBREFDMDBFMTMzMDQgLyogbGliWlhpbmdPYmpDLW9zeC5hICovLAorCQkJCTI1NDA0MTc4MTY2QUFEQUMwMEUxMzMwNCAvKiBVbml0IFRlc3RzIE9TIFgub2N0ZXN0ICovLAorCQkJCTI1NDA0MzlFMTY2QUJBMEEwMEUxMzMwNCAvKiBaWGluZ09iakMuZnJhbWV3b3JrICovLAorCQkJCTAyNDk1ODc4MTg5ODY0MUIwMDNENEU2QSAvKiBaWGluZ09iakNUZXN0cy1pT1MgY29weS5vY3Rlc3QgKi8sCisJCQkJMDJEODEzRjYxODk4NjRDNzAwODE3MjFEIC8qIFpYaW5nT2JqQ1Rlc3RzLW9zeCBjb3B5Lm9jdGVzdCAqLywKKwkJCSk7CisJCQluYW1lID0gUHJvZHVjdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0NCNTE2NkE5NkZBMDBFMTMzMDQgLyogaU9TIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDA0NzFBMTY2QUMyMTAwMEUxMzMwNCAvKiBBVkZvdW5kYXRpb24uZnJhbWV3b3JrICovLAorCQkJCTI1NDA0MTRFMTY2QUEzMzcwMEUxMzMwNCAvKiBDb3JlR3JhcGhpY3MuZnJhbWV3b3JrICovLAorCQkJCTI1NDA0MTVFMTY2QUFBMkYwMEUxMzMwNCAvKiBDb3JlVmlkZW8uZnJhbWV3b3JrICovLAorCQkJCTI1NDAzQ0I2MTY2QTk2RkEwMEUxMzMwNCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLywKKwkJCQkyNTQwNDE1QjE2NkFBODY5MDBFMTMzMDQgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8sCisJCQkJMjU0MDNDQzUxNjZBOTZGQTAwRTEzMzA0IC8qIFNlblRlc3RpbmdLaXQuZnJhbWV3b3JrICovLAorCQkJCTI1NDA0MTQ1MTY2QUExNjIwMEUxMzMwNCAvKiBVSUtpdC5mcmFtZXdvcmsgKi8sCisJCQkpOworCQkJbmFtZSA9ICJpT1MgRnJhbWV3b3JrcyI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0NCODE2NkE5NkZBMDBFMTMzMDQgLyogWlhpbmdPYmpDICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwM0NFQzE2NkE5OTlEMDBFMTMzMDQgLyogYXp0ZWMgKi8sCisJCQkJMjU0MDNDRkYxNjZBOUEwODAwRTEzMzA0IC8qIGNsaWVudCAqLywKKwkJCQkyNTQwM0Q5RjE2NkE5QzBFMDBFMTMzMDQgLyogY29tbW9uICovLAorCQkJCTI1NDAzREYyMTY2QTlDQ0IwMEUxMzMwNCAvKiBkYXRhbWF0cml4ICovLAorCQkJCTI1NDAzRTExMTY2QTlENEIwMEUxMzMwNCAvKiBtYXhpY29kZSAqLywKKwkJCQkyNTQwM0UyMzE2NkE5RDhCMDBFMTMzMDQgLyogbXVsdGkgKi8sCisJCQkJMjU0MDNFM0MxNjZBOURGMzAwRTEzMzA0IC8qIG9uZWQgKi8sCisJCQkJMjU0MDNGMTgxNjZBOUVCNTAwRTEzMzA0IC8qIHBkZjQxNyAqLywKKwkJCQkyNTQwM0Y1QjE2NkE5RjJEMDBFMTMzMDQgLyogcXJjb2RlICovLAorCQkJCTI1NDAzRkJCMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJhcmNvZGVGb3JtYXQuaCAqLywKKwkJCQkyNTQwM0ZCQzE2NkE5RkZDMDBFMTMzMDQgLyogWlhCaW5hcml6ZXIuaCAqLywKKwkJCQkyNTQwM0ZCRDE2NkE5RkZDMDBFMTMzMDQgLyogWlhCaW5hcml6ZXIubSAqLywKKwkJCQkyNTQwM0ZCRTE2NkE5RkZDMDBFMTMzMDQgLyogWlhCaW5hcnlCaXRtYXAuaCAqLywKKwkJCQkyNTQwM0ZCRjE2NkE5RkZDMDBFMTMzMDQgLyogWlhCaW5hcnlCaXRtYXAubSAqLywKKwkJCQkyNTQwM0ZDMDE2NkE5RkZDMDBFMTMzMDQgLyogWlhEZWNvZGVIaW50cy5oICovLAorCQkJCTI1NDAzRkMxMTY2QTlGRkMwMEUxMzMwNCAvKiBaWERlY29kZUhpbnRzLm0gKi8sCisJCQkJMjU0Mjk5NzMxNkQ0NkU4NDAwRDRDMDQ1IC8qIFpYRGltZW5zaW9uLmggKi8sCisJCQkJMjU0Mjk5NzQxNkQ0NkU4NDAwRDRDMDQ1IC8qIFpYRGltZW5zaW9uLm0gKi8sCisJCQkJMjU0MDNGQzIxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRW5jb2RlSGludHMuaCAqLywKKwkJCQkyNTQwM0ZDMzE2NkE5RkZDMDBFMTMzMDQgLyogWlhFbmNvZGVIaW50cy5tICovLAorCQkJCTI1NDAzRkM0MTY2QTlGRkMwMEUxMzMwNCAvKiBaWEVycm9ycy5oICovLAorCQkJCTI1NDAzRkM1MTY2QTlGRkMwMEUxMzMwNCAvKiBaWEVycm9ycy5tICovLAorCQkJCTI1NDAzQ0JCMTY2QTk2RkEwMEUxMzMwNCAvKiBaWGluZ09iakMuaCAqLywKKwkJCQkyNTA0RDRDNDE2RjY5OEFBMDBERjg4ODIgLyogWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZS5oICovLAorCQkJCTI1MDRENEM1MTZGNjk4QUEwMERGODg4MiAvKiBaWEludmVydGVkTHVtaW5hbmNlU291cmNlLm0gKi8sCisJCQkJMjU0MDNGRDExNjZBQTAwNzAwRTEzMzA0IC8qIFpYTHVtaW5hbmNlU291cmNlLmggKi8sCisJCQkJMjU0MDNGRDIxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTHVtaW5hbmNlU291cmNlLm0gKi8sCisJCQkJMjU0MDNGRDMxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRSZWFkZXIuaCAqLywKKwkJCQkyNTQwM0ZENDE2NkFBMDA3MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFJlYWRlci5tICovLAorCQkJCTI1NDAzRkQ1MTY2QUEwMDcwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0V3JpdGVyLmggKi8sCisJCQkJMjU0MDNGRDYxNjZBQTAwNzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRXcml0ZXIubSAqLywKKwkJCQkyNTQyOTk2QjE2RDMzMzFGMDBENEMwNDUgLyogWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UuaCAqLywKKwkJCQkyNTQyOTk2QzE2RDMzMzFGMDBENEMwNDUgLyogWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UubSAqLywKKwkJCQkyNTQwM0ZENzE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZWFkZXIuaCAqLywKKwkJCQkyNTQwM0ZEODE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHQuaCAqLywKKwkJCQkyNTQwM0ZEOTE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHQubSAqLywKKwkJCQkyNTQwM0ZEQTE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHRNZXRhZGF0YVR5cGUuaCAqLywKKwkJCQkyNTQwM0ZEQjE2NkFBMDA3MDBFMTMzMDQgLyogWlhSZXN1bHRQb2ludC5oICovLAorCQkJCTI1NDAzRkRDMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50Lm0gKi8sCisJCQkJMjU0MDNGREQxNjZBQTAwNzAwRTEzMzA0IC8qIFpYUmVzdWx0UG9pbnRDYWxsYmFjay5oICovLAorCQkJCTI1MUZDREU5MTZDQzhGNTMwMDBDMjdFNSAvKiBaWFJHQkx1bWluYW5jZVNvdXJjZS5oICovLAorCQkJCTI1MUZDREVBMTZDQzhGNTMwMDBDMjdFNSAvKiBaWFJHQkx1bWluYW5jZVNvdXJjZS5tICovLAorCQkJCTI1NDAzRkRFMTY2QUEwMDcwMEUxMzMwNCAvKiBaWFdyaXRlci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBaWGluZ09iakM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0NCOTE2NkE5NkZBMDBFMTMzMDQgLyogU3VwcG9ydGluZyBGaWxlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDNDRTExNjZBOTc5NzAwRTEzMzA0IC8qIGlvcy1QcmVmaXgucGNoICovLAorCQkJCTI1NDA0MThEMTY2QUFERUYwMEUxMzMwNCAvKiBvc3gtUHJlZml4LnBjaCAqLywKKwkJCSk7CisJCQluYW1lID0gIlN1cHBvcnRpbmcgRmlsZXMiOworCQkJcGF0aCA9IFpYaW5nT2JqQzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDAzQ0NEMTY2QTk2RkEwMEUxMzMwNCAvKiBaWGluZ09iakNUZXN0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDNGRUQxNjZBQTBGMTAwRTEzMzA0IC8qIGF6dGVjICovLAorCQkJCTI1NDAzRkYyMTY2QUEwRjEwMEUxMzMwNCAvKiBjbGllbnQgKi8sCisJCQkJMjU0MDQwMEMxNjZBQTBGMTAwRTEzMzA0IC8qIGNvbW1vbiAqLywKKwkJCQkyNTQwNDAyODE2NkFBMEYxMDBFMTMzMDQgLyogZGF0YW1hdHJpeCAqLywKKwkJCQkyNTQwNDAzMDE2NkFBMEYxMDBFMTMzMDQgLyogbmVnYXRpdmUgKi8sCisJCQkJMjU0MDQwMzkxNjZBQTBGMTAwRTEzMzA0IC8qIG9uZWQgKi8sCisJCQkJMjU0MDQwQTUxNjZBQTBGMTAwRTEzMzA0IC8qIHBkZjQxNyAqLywKKwkJCQkyNTQwNDBCMDE2NkFBMEYxMDBFMTMzMDQgLyogcXJjb2RlICovLAorCQkJCTI1RkU1RDQ0MTZEMTk5N0MwMDgyNkNEQiAvKiBSZXNvdXJjZXMgKi8sCisJCQkJMDJCREEyRUQxODAzMTA5RTAwMzlCMzI2IC8qIFN1cHBvcnRpbmcgRmlsZXMgKi8sCisJCQkpOworCQkJcGF0aCA9IFpYaW5nT2JqQ1Rlc3RzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNDRUMxNjZBOTk5RDAwRTEzMzA0IC8qIGF6dGVjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwM0NFRDE2NkE5OTlEMDBFMTMzMDQgLyogZGVjb2RlciAqLywKKwkJCQkyNTQwM0NGMDE2NkE5OTlEMDBFMTMzMDQgLyogZGV0ZWN0b3IgKi8sCisJCQkJMjUwNEQ5Q0MxNkZGRDJDQzAwREY4ODgyIC8qIGVuY29kZXIgKi8sCisJCQkJMjU0MDNDRjMxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3RvclJlc3VsdC5oICovLAorCQkJCTI1NDAzQ0Y0MTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQubSAqLywKKwkJCQkyNTQwM0NGNTE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY1JlYWRlci5oICovLAorCQkJCTI1NDAzQ0Y2MTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjUmVhZGVyLm0gKi8sCisJCQkJMjUxOUFCMzIxN0ZEMUVDMDAwQTcxQzQ1IC8qIFpYQXp0ZWNXcml0ZXIuaCAqLywKKwkJCQkyNTE5QUIzMzE3RkQxRUMwMDBBNzFDNDUgLyogWlhBenRlY1dyaXRlci5tICovLAorCQkJKTsKKwkJCXBhdGggPSBhenRlYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDAzQ0VEMTY2QTk5OUQwMEUxMzMwNCAvKiBkZWNvZGVyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwM0NFRTE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RlY29kZXIuaCAqLywKKwkJCQkyNTQwM0NFRjE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RlY29kZXIubSAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVjb2RlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDAzQ0YwMTY2QTk5OUQwMEUxMzMwNCAvKiBkZXRlY3RvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDNDRjExNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3Rvci5oICovLAorCQkJCTI1NDAzQ0YyMTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGV0ZWN0b3IubSAqLywKKwkJCSk7CisJCQlwYXRoID0gZGV0ZWN0b3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0NGRjE2NkE5QTA4MDBFMTMzMDQgLyogY2xpZW50ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwM0QwMDE2NkE5QTA4MDBFMTMzMDQgLyogcmVzdWx0ICovLAorCQkJCTI1NDAzRDQ2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmUuaCAqLywKKwkJCQkyNTQwM0Q0NzE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYXB0dXJlLm0gKi8sCisJCQkJMjU0MDNENDgxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FwdHVyZURlbGVnYXRlLmggKi8sCisJCQkJMjU0MDNENDkxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FwdHVyZVZpZXcuaCAqLywKKwkJCQkyNTQwM0Q0QTE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYXB0dXJlVmlldy5tICovLAorCQkJCTI1NDAzRDRCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UuaCAqLywKKwkJCQkyNTQwM0Q0QzE2NkE5QTA4MDBFMTMzMDQgLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLm0gKi8sCisJCQkJMjU0MDNENEQxNjZBOUEwODAwRTEzMzA0IC8qIFpYSW1hZ2UuaCAqLywKKwkJCQkyNTQwM0Q0RTE2NkE5QTA4MDBFMTMzMDQgLyogWlhJbWFnZS5tICovLAorCQkJCTI1NDAzRDRGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZpZXcuaCAqLywKKwkJCSk7CisJCQluYW1lID0gY2xpZW50OworCQkJcGF0aCA9IFpYaW5nT2JqQy9jbGllbnQ7CisJCQlzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7CisJCX07CisJCTI1NDAzRDAwMTY2QTlBMDgwMEUxMzMwNCAvKiByZXN1bHQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRDAxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLmggKi8sCisJCQkJMjU0MDNEMDIxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIubSAqLywKKwkJCQkyNTQwM0QwMzE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyLmggKi8sCisJCQkJMjU0MDNEMDQxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5tICovLAorCQkJCTI1NDAzRDA1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLmggKi8sCisJCQkJMjU0MDNEMDYxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIubSAqLywKKwkJCQkyNTQwM0QwNzE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdC5oICovLAorCQkJCTI1NDAzRDA4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0Lm0gKi8sCisJCQkJMjU0MDNEMDkxNjZBOUEwODAwRTEzMzA0IC8qIFpYQml6Y2FyZFJlc3VsdFBhcnNlci5oICovLAorCQkJCTI1NDAzRDBBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIubSAqLywKKwkJCQkyNTQwM0QwQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlci5oICovLAorCQkJCTI1NDAzRDBDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLm0gKi8sCisJCQkJMjU0MDNEMEQxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHQuaCAqLywKKwkJCQkyNTQwM0QwRTE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5tICovLAorCQkJCTI1NDAzRDBGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5oICovLAorCQkJCTI1NDAzRDEwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5tICovLAorCQkJCTI1NDAzRDExMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1Jlc3VsdFBhcnNlci5oICovLAorCQkJCTI1NDAzRDEyMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1Jlc3VsdFBhcnNlci5tICovLAorCQkJCTI1NDAzRDEzMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLmggKi8sCisJCQkJMjU0MDNEMTQxNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIubSAqLywKKwkJCQkyNTQwM0QxNTE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQuaCAqLywKKwkJCQkyNTQwM0QxNjE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQubSAqLywKKwkJCQkyNTQwM0QxNzE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RSZXN1bHRQYXJzZXIuaCAqLywKKwkJCQkyNTQwM0QxODE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RSZXN1bHRQYXJzZXIubSAqLywKKwkJCQkyNTQwM0QxOTE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9QYXJzZWRSZXN1bHQuaCAqLywKKwkJCQkyNTQwM0QxQTE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9QYXJzZWRSZXN1bHQubSAqLywKKwkJCQkyNTQwM0QxQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9SZXN1bHRQYXJzZXIuaCAqLywKKwkJCQkyNTQwM0QxQzE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9SZXN1bHRQYXJzZXIubSAqLywKKwkJCQkyNTQwM0QxRDE2NkE5QTA4MDBFMTMzMDQgLyogWlhJU0JOUGFyc2VkUmVzdWx0LmggKi8sCisJCQkJMjU0MDNEMUUxNjZBOUEwODAwRTEzMzA0IC8qIFpYSVNCTlBhcnNlZFJlc3VsdC5tICovLAorCQkJCTI1NDAzRDFGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5SZXN1bHRQYXJzZXIuaCAqLywKKwkJCQkyNTQwM0QyMDE2NkE5QTA4MDBFMTMzMDQgLyogWlhJU0JOUmVzdWx0UGFyc2VyLm0gKi8sCisJCQkJMjU0MDNEMjExNjZBOUEwODAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0LmggKi8sCisJCQkJMjU0MDNEMjIxNjZBOUEwODAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0Lm0gKi8sCisJCQkJMjU0MDNEMjMxNjZBOUEwODAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0VHlwZS5oICovLAorCQkJCTI1NDAzRDI0MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFByb2R1Y3RQYXJzZWRSZXN1bHQuaCAqLywKKwkJCQkyNTQwM0QyNTE2NkE5QTA4MDBFMTMzMDQgLyogWlhQcm9kdWN0UGFyc2VkUmVzdWx0Lm0gKi8sCisJCQkJMjU0MDNEMjYxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFJlc3VsdFBhcnNlci5oICovLAorCQkJCTI1NDAzRDI3MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFByb2R1Y3RSZXN1bHRQYXJzZXIubSAqLywKKwkJCQkyNTQwM0QyODE2NkE5QTA4MDBFMTMzMDQgLyogWlhSZXN1bHRQYXJzZXIuaCAqLywKKwkJCQkyNTQwM0QyOTE2NkE5QTA4MDBFMTMzMDQgLyogWlhSZXN1bHRQYXJzZXIubSAqLywKKwkJCQkyNTQwM0QyQTE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIuaCAqLywKKwkJCQkyNTQwM0QyQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIubSAqLywKKwkJCQkyNTQwM0QyQzE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNQYXJzZWRSZXN1bHQuaCAqLywKKwkJCQkyNTQwM0QyRDE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNQYXJzZWRSZXN1bHQubSAqLywKKwkJCQkyNTQwM0QyRTE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLmggKi8sCisJCQkJMjU0MDNEMkYxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01TVE9NTVNUT1Jlc3VsdFBhcnNlci5tICovLAorCQkJCTI1NDAzRDMwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNVFBSZXN1bHRQYXJzZXIuaCAqLywKKwkJCQkyNTQwM0QzMTE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVRQUmVzdWx0UGFyc2VyLm0gKi8sCisJCQkJMjU0MDNEMzIxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGVsUGFyc2VkUmVzdWx0LmggKi8sCisJCQkJMjU0MDNEMzMxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGVsUGFyc2VkUmVzdWx0Lm0gKi8sCisJCQkJMjU0MDNEMzQxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGVsUmVzdWx0UGFyc2VyLmggKi8sCisJCQkJMjU0MDNEMzUxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGVsUmVzdWx0UGFyc2VyLm0gKi8sCisJCQkJMjU0MDNEMzYxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGV4dFBhcnNlZFJlc3VsdC5oICovLAorCQkJCTI1NDAzRDM3MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQubSAqLywKKwkJCQkyNTQwM0QzODE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHQuaCAqLywKKwkJCQkyNTQwM0QzOTE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHQubSAqLywKKwkJCQkyNTQwM0QzQTE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUklSZXN1bHRQYXJzZXIuaCAqLywKKwkJCQkyNTQwM0QzQjE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUklSZXN1bHRQYXJzZXIubSAqLywKKwkJCQkyNTQwM0QzQzE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUkxUT1Jlc3VsdFBhcnNlci5oICovLAorCQkJCTI1NDAzRDNEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSTFRPUmVzdWx0UGFyc2VyLm0gKi8sCisJCQkJMjU0MDNEM0UxNjZBOUEwODAwRTEzMzA0IC8qIFpYVkNhcmRSZXN1bHRQYXJzZXIuaCAqLywKKwkJCQkyNTQwM0QzRjE2NkE5QTA4MDBFMTMzMDQgLyogWlhWQ2FyZFJlc3VsdFBhcnNlci5tICovLAorCQkJCTI1NDAzRDQwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZFdmVudFJlc3VsdFBhcnNlci5oICovLAorCQkJCTI1NDAzRDQxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZFdmVudFJlc3VsdFBhcnNlci5tICovLAorCQkJCTI1NDAzRDQyMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFdpZmlQYXJzZWRSZXN1bHQuaCAqLywKKwkJCQkyNTQwM0Q0MzE2NkE5QTA4MDBFMTMzMDQgLyogWlhXaWZpUGFyc2VkUmVzdWx0Lm0gKi8sCisJCQkJMjU0MDNENDQxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVJlc3VsdFBhcnNlci5oICovLAorCQkJCTI1NDAzRDQ1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFdpZmlSZXN1bHRQYXJzZXIubSAqLywKKwkJCSk7CisJCQlwYXRoID0gcmVzdWx0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNEOUYxNjZBOUMwRTAwRTEzMzA0IC8qIGNvbW1vbiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDNEQTAxNjZBOUMwRTAwRTEzMzA0IC8qIGRldGVjdG9yICovLAorCQkJCTI1NDAzREE3MTY2QTlDMEUwMEUxMzMwNCAvKiByZWVkc29sb21vbiAqLywKKwkJCQkyNTQwM0RCMDE2NkE5QzBFMDBFMTMzMDQgLyogWlhCaXRBcnJheS5oICovLAorCQkJCTI1NDAzREIxMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdEFycmF5Lm0gKi8sCisJCQkJMjU0MDNEQjIxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0TWF0cml4LmggKi8sCisJCQkJMjU0MDNEQjMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0TWF0cml4Lm0gKi8sCisJCQkJMjU0MDNEQjQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0U291cmNlLmggKi8sCisJCQkJMjU0MDNEQjUxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0U291cmNlLm0gKi8sCisJCQkJMjU0MDNEQjYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQ2hhcmFjdGVyU2V0RUNJLmggKi8sCisJCQkJMjU0MDNEQjcxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQ2hhcmFjdGVyU2V0RUNJLm0gKi8sCisJCQkJMjU0MDNEQjgxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGVjb2RlclJlc3VsdC5oICovLAorCQkJCTI1NDAzREI5MTY2QTlDMEUwMEUxMzMwNCAvKiBaWERlY29kZXJSZXN1bHQubSAqLywKKwkJCQkyNTQwM0RCQTE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZWZhdWx0R3JpZFNhbXBsZXIuaCAqLywKKwkJCQkyNTQwM0RCQjE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZWZhdWx0R3JpZFNhbXBsZXIubSAqLywKKwkJCQkyNTQwM0RCQzE2NkE5QzBFMDBFMTMzMDQgLyogWlhEZXRlY3RvclJlc3VsdC5oICovLAorCQkJCTI1NDAzREJEMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERldGVjdG9yUmVzdWx0Lm0gKi8sCisJCQkJMjU0MDNEQkUxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRUNJLmggKi8sCisJCQkJMjU0MDNEQkYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRUNJLm0gKi8sCisJCQkJMjU0MDNEQzAxNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLmggKi8sCisJCQkJMjU0MDNEQzExNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLm0gKi8sCisJCQkJMjU0MDNEQzIxNjZBOUMwRTAwRTEzMzA0IC8qIFpYR3JpZFNhbXBsZXIuaCAqLywKKwkJCQkyNTQwM0RDMzE2NkE5QzBFMDBFMTMzMDQgLyogWlhHcmlkU2FtcGxlci5tICovLAorCQkJCTI1NDAzREM0MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEh5YnJpZEJpbmFyaXplci5oICovLAorCQkJCTI1NDAzREM1MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEh5YnJpZEJpbmFyaXplci5tICovLAorCQkJCTI1NDAzREM2MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtLmggKi8sCisJCQkJMjU0MDNEQzcxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0ubSAqLywKKwkJCQkyNTQwM0RDODE2NkE5QzBFMDBFMTMzMDQgLyogWlhTdHJpbmdVdGlscy5oICovLAorCQkJCTI1NDAzREM5MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGNvbW1vbjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDAzREEwMTY2QTlDMEUwMEUxMzMwNCAvKiBkZXRlY3RvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDNEQTExNjZBOUMwRTAwRTEzMzA0IC8qIFpYTWF0aFV0aWxzLmggKi8sCisJCQkJMjU0MDNEQTIxNjZBOUMwRTAwRTEzMzA0IC8qIFpYTWF0aFV0aWxzLm0gKi8sCisJCQkJMjU0MDNEQTMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yLmggKi8sCisJCQkJMjU0MDNEQTQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yLm0gKi8sCisJCQkJMjU0MDNEQTUxNjZBOUMwRTAwRTEzMzA0IC8qIFpYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5oICovLAorCQkJCTI1NDAzREE2MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFdoaXRlUmVjdGFuZ2xlRGV0ZWN0b3IubSAqLywKKwkJCSk7CisJCQlwYXRoID0gZGV0ZWN0b3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0RBNzE2NkE5QzBFMDBFMTMzMDQgLyogcmVlZHNvbG9tb24gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzREE4MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRi5oICovLAorCQkJCTI1NDAzREE5MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRi5tICovLAorCQkJCTI1NDAzREFBMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRlBvbHkuaCAqLywKKwkJCQkyNTQwM0RBQjE2NkE5QzBFMDBFMTMzMDQgLyogWlhHZW5lcmljR0ZQb2x5Lm0gKi8sCisJCQkJMjU0MDNEQUMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25EZWNvZGVyLmggKi8sCisJCQkJMjU0MDNEQUQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25EZWNvZGVyLm0gKi8sCisJCQkJMjU0MDNEQUUxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25FbmNvZGVyLmggKi8sCisJCQkJMjU0MDNEQUYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25FbmNvZGVyLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IHJlZWRzb2xvbW9uOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNERjIxNjZBOUNDQjAwRTEzMzA0IC8qIGRhdGFtYXRyaXggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzREYzMTY2QTlDQ0IwMEUxMzMwNCAvKiBkZWNvZGVyICovLAorCQkJCTI1NDAzREZFMTY2QTlDQ0IwMEUxMzMwNCAvKiBkZXRlY3RvciAqLywKKwkJCQkyNTQyOTk4MzE2RDQ3ODgxMDBENEMwNDUgLyogZW5jb2RlciAqLywKKwkJCQkyNTQwM0UwMTE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4UmVhZGVyLmggKi8sCisJCQkJMjU0MDNFMDIxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeFJlYWRlci5tICovLAorCQkJCTI1NDI5OTdCMTZENDcwRDYwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhXcml0ZXIuaCAqLywKKwkJCQkyNTQyOTk3QzE2RDQ3MEQ2MDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGRhdGFtYXRyaXg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0RGMzE2NkE5Q0NCMDBFMTMzMDQgLyogZGVjb2RlciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDNERjQxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeEJpdE1hdHJpeFBhcnNlci5oICovLAorCQkJCTI1NDAzREY1MTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIubSAqLywKKwkJCQkyNTQwM0RGNjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLmggKi8sCisJCQkJMjU0MDNERjcxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERhdGFCbG9jay5tICovLAorCQkJCTI1NDAzREY4MTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmggKi8sCisJCQkJMjU0MDNERjkxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIubSAqLywKKwkJCQkyNTQwM0RGQTE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2Rlci5oICovLAorCQkJCTI1NDAzREZCMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVyLm0gKi8sCisJCQkJMjU0MDNERkMxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeFZlcnNpb24uaCAqLywKKwkJCQkyNTQwM0RGRDE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4VmVyc2lvbi5tICovLAorCQkJKTsKKwkJCXBhdGggPSBkZWNvZGVyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNERkUxNjZBOUNDQjAwRTEzMzA0IC8qIGRldGVjdG9yICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwM0RGRjE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGV0ZWN0b3IuaCAqLywKKwkJCQkyNTQwM0UwMDE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGV0ZWN0b3IubSAqLywKKwkJCSk7CisJCQlwYXRoID0gZGV0ZWN0b3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0UxMTE2NkE5RDRCMDBFMTMzMDQgLyogbWF4aWNvZGUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRTEyMTY2QTlENEIwMEUxMzMwNCAvKiBkZWNvZGVyICovLAorCQkJCTI1NDAzRTE5MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlUmVhZGVyLmggKi8sCisJCQkJMjU0MDNFMUExNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVSZWFkZXIubSAqLywKKwkJCSk7CisJCQlwYXRoID0gbWF4aWNvZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0UxMjE2NkE5RDRCMDBFMTMzMDQgLyogZGVjb2RlciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDNFMTMxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIuaCAqLywKKwkJCQkyNTQwM0UxNDE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZUJpdE1hdHJpeFBhcnNlci5tICovLAorCQkJCTI1NDAzRTE1MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oICovLAorCQkJCTI1NDAzRTE2MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tICovLAorCQkJCTI1NDAzRTE3MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2Rlci5oICovLAorCQkJCTI1NDAzRTE4MTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2Rlci5tICovLAorCQkJKTsKKwkJCXBhdGggPSBkZWNvZGVyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNFMjMxNjZBOUQ4QjAwRTEzMzA0IC8qIG11bHRpICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwM0UyNDE2NkE5RDhCMDBFMTMzMDQgLyogcXJjb2RlICovLAorCQkJCTI1NDAzRTJDMTY2QTlEOEIwMEUxMzMwNCAvKiBaWEJ5UXVhZHJhbnRSZWFkZXIuaCAqLywKKwkJCQkyNTQwM0UyRDE2NkE5RDhCMDBFMTMzMDQgLyogWlhCeVF1YWRyYW50UmVhZGVyLm0gKi8sCisJCQkJMjU0MDNFMkUxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYR2VuZXJpY011bHRpcGxlQmFyY29kZVJlYWRlci5oICovLAorCQkJCTI1NDAzRTJGMTY2QTlEOEIwMEUxMzMwNCAvKiBaWEdlbmVyaWNNdWx0aXBsZUJhcmNvZGVSZWFkZXIubSAqLywKKwkJCQkyNTQwM0UzMDE2NkE5RDhCMDBFMTMzMDQgLyogWlhNdWx0aXBsZUJhcmNvZGVSZWFkZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gbXVsdGk7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0UyNDE2NkE5RDhCMDBFMTMzMDQgLyogcXJjb2RlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwM0UyNTE2NkE5RDhCMDBFMTMzMDQgLyogZGV0ZWN0b3IgKi8sCisJCQkJMjU0MDNFMkExNjZBOUQ4QjAwRTEzMzA0IC8qIFpYUVJDb2RlTXVsdGlSZWFkZXIuaCAqLywKKwkJCQkyNTQwM0UyQjE2NkE5RDhCMDBFMTMzMDQgLyogWlhRUkNvZGVNdWx0aVJlYWRlci5tICovLAorCQkJKTsKKwkJCXBhdGggPSBxcmNvZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0UyNTE2NkE5RDhCMDBFMTMzMDQgLyogZGV0ZWN0b3IgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRTI2MTY2QTlEOEIwMEUxMzMwNCAvKiBaWE11bHRpRGV0ZWN0b3IuaCAqLywKKwkJCQkyNTQwM0UyNzE2NkE5RDhCMDBFMTMzMDQgLyogWlhNdWx0aURldGVjdG9yLm0gKi8sCisJCQkJMjU0MDNFMjgxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyLmggKi8sCisJCQkJMjU0MDNFMjkxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGRldGVjdG9yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNFM0MxNjZBOURGMzAwRTEzMzA0IC8qIG9uZWQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRTNEMTY2QTlERjMwMEUxMzMwNCAvKiByc3MgKi8sCisJCQkJMjU0MDNFNzgxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kYUJhclJlYWRlci5oICovLAorCQkJCTI1NDAzRTc5MTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGFCYXJSZWFkZXIubSAqLywKKwkJCQkyNTQwM0U3QTE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RhQmFyV3JpdGVyLmggKi8sCisJCQkJMjU0MDNFN0IxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kYUJhcldyaXRlci5tICovLAorCQkJCTI1NDAzRTdDMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUxMjhSZWFkZXIuaCAqLywKKwkJCQkyNTQwM0U3RDE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMTI4UmVhZGVyLm0gKi8sCisJCQkJMjU0MDNFN0UxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ29kZTEyOFdyaXRlci5oICovLAorCQkJCTI1NDAzRTdGMTY2QTlERjMwMEUxMzMwNCAvKiBaWENvZGUxMjhXcml0ZXIubSAqLywKKwkJCQkyNTQwM0U4MDE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIuaCAqLywKKwkJCQkyNTQwM0U4MTE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIubSAqLywKKwkJCQkyNTQwM0U4MjE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlXcml0ZXIuaCAqLywKKwkJCQkyNTQwM0U4MzE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlMzlXcml0ZXIubSAqLywKKwkJCQkyNTQwM0U4NDE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlOTNSZWFkZXIuaCAqLywKKwkJCQkyNTQwM0U4NTE2NkE5REYzMDBFMTMzMDQgLyogWlhDb2RlOTNSZWFkZXIubSAqLywKKwkJCQkyNTQwM0U4NjE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU4xM1JlYWRlci5oICovLAorCQkJCTI1NDAzRTg3MTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjEzUmVhZGVyLm0gKi8sCisJCQkJMjU0MDNFODgxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOMTNXcml0ZXIuaCAqLywKKwkJCQkyNTQwM0U4OTE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU4xM1dyaXRlci5tICovLAorCQkJCTI1NDAzRThBMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjhSZWFkZXIuaCAqLywKKwkJCQkyNTQwM0U4QjE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU44UmVhZGVyLm0gKi8sCisJCQkJMjU0MDNFOEMxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOOFdyaXRlci5oICovLAorCQkJCTI1NDAzRThEMTY2QTlERjMwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIubSAqLywKKwkJCQkyNTQwM0U4RTE2NkE5REYzMDBFMTMzMDQgLyogWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0LmggKi8sCisJCQkJMjU0MDNFOEYxNjZBOURGMzAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5tICovLAorCQkJCTI1NDAzRTkwMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURlJlYWRlci5oICovLAorCQkJCTI1NDAzRTkxMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURlJlYWRlci5tICovLAorCQkJCTI1NDAzRTkyMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURldyaXRlci5oICovLAorCQkJCTI1NDAzRTkzMTY2QTlERjMwMEUxMzMwNCAvKiBaWElURldyaXRlci5tICovLAorCQkJCTI1NDAzRTk0MTY2QTlERjMwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0T25lRFJlYWRlci5oICovLAorCQkJCTI1NDAzRTk1MTY2QTlERjMwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0T25lRFJlYWRlci5tICovLAorCQkJCTI1NDAzRTk2MTY2QTlERjMwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLmggKi8sCisJCQkJMjU0MDNFOTcxNjZBOURGMzAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRVUENFQU5SZWFkZXIubSAqLywKKwkJCQkyNTQwM0U5ODE2NkE5REYzMDBFMTMzMDQgLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIuaCAqLywKKwkJCQkyNTQwM0U5OTE2NkE5REYzMDBFMTMzMDQgLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIubSAqLywKKwkJCQkyNTQwM0U5QTE2NkE5REYzMDBFMTMzMDQgLyogWlhPbmVEUmVhZGVyLmggKi8sCisJCQkJMjU0MDNFOUIxNjZBOURGMzAwRTEzMzA0IC8qIFpYT25lRFJlYWRlci5tICovLAorCQkJCTI1NDAzRTlDMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0FSZWFkZXIuaCAqLywKKwkJCQkyNTQwM0U5RDE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENBUmVhZGVyLm0gKi8sCisJCQkJMjU0MDNFOUUxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDQVdyaXRlci5oICovLAorCQkJCTI1NDAzRTlGMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIubSAqLywKKwkJCQkyNTQwM0VBMDE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5oICovLAorCQkJCTI1NDAzRUExMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0Lm0gKi8sCisJCQkJMjU0MDNFQTIxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQuaCAqLywKKwkJCQkyNTQwM0VBMzE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5tICovLAorCQkJCTI1NDAzRUE0MTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQuaCAqLywKKwkJCQkyNTQwM0VBNTE2NkE5REYzMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0Lm0gKi8sCisJCQkJMjU0MDNFQTYxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFOUmVhZGVyLmggKi8sCisJCQkJMjU0MDNFQTcxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFOUmVhZGVyLm0gKi8sCisJCQkJMjU0MDNFQTgxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFOV3JpdGVyLmggKi8sCisJCQkJMjU0MDNFQTkxNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRUFOV3JpdGVyLm0gKi8sCisJCQkJMjU0MDNFQUExNjZBOURGMzAwRTEzMzA0IC8qIFpYVVBDRVJlYWRlci5oICovLAorCQkJCTI1NDAzRUFCMTY2QTlERjMwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIubSAqLywKKwkJCSk7CisJCQlwYXRoID0gb25lZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDAzRTNEMTY2QTlERjMwMEUxMzMwNCAvKiByc3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRTNFMTY2QTlERjMwMEUxMzMwNCAvKiBleHBhbmRlZCAqLywKKwkJCQkyNTQwM0U2QzE2NkE5REYzMDBFMTMzMDQgLyogWlhBYnN0cmFjdFJTU1JlYWRlci5oICovLAorCQkJCTI1NDAzRTZEMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFic3RyYWN0UlNTUmVhZGVyLm0gKi8sCisJCQkJMjU0MDNFNkUxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGF0YUNoYXJhY3Rlci5oICovLAorCQkJCTI1NDAzRTZGMTY2QTlERjMwMEUxMzMwNCAvKiBaWERhdGFDaGFyYWN0ZXIubSAqLywKKwkJCQkyNTQwM0U3MDE2NkE5REYzMDBFMTMzMDQgLyogWlhQYWlyLmggKi8sCisJCQkJMjU0MDNFNzExNjZBOURGMzAwRTEzMzA0IC8qIFpYUGFpci5tICovLAorCQkJCTI1NDAzRTcyMTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTUzE0UmVhZGVyLmggKi8sCisJCQkJMjU0MDNFNzMxNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTMTRSZWFkZXIubSAqLywKKwkJCQkyNTQwM0U3NDE2NkE5REYzMDBFMTMzMDQgLyogWlhSU1NGaW5kZXJQYXR0ZXJuLmggKi8sCisJCQkJMjU0MDNFNzUxNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTRmluZGVyUGF0dGVybi5tICovLAorCQkJCTI1NDAzRTc2MTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU1V0aWxzLmggKi8sCisJCQkJMjU0MDNFNzcxNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTVXRpbHMubSAqLywKKwkJCSk7CisJCQlwYXRoID0gcnNzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNFM0UxNjZBOURGMzAwRTEzMzA0IC8qIGV4cGFuZGVkICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwM0UzRjE2NkE5REYzMDBFMTMzMDQgLyogZGVjb2RlcnMgKi8sCisJCQkJMjU0MDNFNjYxNjZBOURGMzAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyLmggKi8sCisJCQkJMjU0MDNFNjcxNjZBOURGMzAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyLm0gKi8sCisJCQkJMjU0MDNFNjgxNjZBOURGMzAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQYWlyLmggKi8sCisJCQkJMjU0MDNFNjkxNjZBOURGMzAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQYWlyLm0gKi8sCisJCQkJMjVGRTVEMzExNkQwQUZFRDAwODI2Q0RCIC8qIFpYRXhwYW5kZWRSb3cuaCAqLywKKwkJCQkyNUZFNUQzMjE2RDBBRkVEMDA4MjZDREIgLyogWlhFeHBhbmRlZFJvdy5tICovLAorCQkJCTI1NDAzRTZBMTY2QTlERjMwMEUxMzMwNCAvKiBaWFJTU0V4cGFuZGVkUmVhZGVyLmggKi8sCisJCQkJMjU0MDNFNkIxNjZBOURGMzAwRTEzMzA0IC8qIFpYUlNTRXhwYW5kZWRSZWFkZXIubSAqLywKKwkJCSk7CisJCQlwYXRoID0gZXhwYW5kZWQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0UzRjE2NkE5REYzMDBFMTMzMDQgLyogZGVjb2RlcnMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRTQwMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLmggKi8sCisJCQkJMjU0MDNFNDExNjZBOURGMzAwRTEzMzA0IC8qIFpYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIubSAqLywKKwkJCQkyNTQwM0U0MjE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzEwM2RlY29kZXIuaCAqLywKKwkJCQkyNTQwM0U0MzE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzEwM2RlY29kZXIubSAqLywKKwkJCQkyNTQwM0U0NDE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzIweERlY29kZXIuaCAqLywKKwkJCQkyNTQwM0U0NTE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzIweERlY29kZXIubSAqLywKKwkJCQkyNTQwM0U0NjE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzkyeERlY29kZXIuaCAqLywKKwkJCQkyNTQwM0U0NzE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzkyeERlY29kZXIubSAqLywKKwkJCQkyNTQwM0U0ODE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzkzeERlY29kZXIuaCAqLywKKwkJCQkyNTQwM0U0OTE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxMzkzeERlY29kZXIubSAqLywKKwkJCQkyNTQwM0U0QTE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxM3gweDF4RGVjb2Rlci5oICovLAorCQkJCTI1NDAzRTRCMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDEzeDB4MXhEZWNvZGVyLm0gKi8sCisJCQkJMjU0MDNFNEMxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTN4MHhEZWNvZGVyLmggKi8sCisJCQkJMjU0MDNFNEQxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMTN4MHhEZWNvZGVyLm0gKi8sCisJCQkJMjU0MDNFNEUxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMUFuZE90aGVyQUlzLmggKi8sCisJCQkJMjU0MDNFNEYxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMUFuZE90aGVyQUlzLm0gKi8sCisJCQkJMjU0MDNFNTAxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMWRlY29kZXIuaCAqLywKKwkJCQkyNTQwM0U1MTE2NkE5REYzMDBFMTMzMDQgLyogWlhBSTAxZGVjb2Rlci5tICovLAorCQkJCTI1NDAzRTUyMTY2QTlERjMwMEUxMzMwNCAvKiBaWEFJMDF3ZWlnaHREZWNvZGVyLmggKi8sCisJCQkJMjU0MDNFNTMxNjZBOURGMzAwRTEzMzA0IC8qIFpYQUkwMXdlaWdodERlY29kZXIubSAqLywKKwkJCQkyNTQwM0U1NDE2NkE5REYzMDBFMTMzMDQgLyogWlhBbnlBSURlY29kZXIuaCAqLywKKwkJCQkyNTQwM0U1NTE2NkE5REYzMDBFMTMzMDQgLyogWlhBbnlBSURlY29kZXIubSAqLywKKwkJCQkyNTQwM0U1NjE2NkE5REYzMDBFMTMzMDQgLyogWlhCbG9ja1BhcnNlZFJlc3VsdC5oICovLAorCQkJCTI1NDAzRTU3MTY2QTlERjMwMEUxMzMwNCAvKiBaWEJsb2NrUGFyc2VkUmVzdWx0Lm0gKi8sCisJCQkJMjU0MDNFNTgxNjZBOURGMzAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5oICovLAorCQkJCTI1NDAzRTU5MTY2QTlERjMwMEUxMzMwNCAvKiBaWEN1cnJlbnRQYXJzaW5nU3RhdGUubSAqLywKKwkJCQkyNTQwM0U1QTE2NkE5REYzMDBFMTMzMDQgLyogWlhEZWNvZGVkQ2hhci5oICovLAorCQkJCTI1NDAzRTVCMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWRDaGFyLm0gKi8sCisJCQkJMjU0MDNFNUMxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZEluZm9ybWF0aW9uLmggKi8sCisJCQkJMjU0MDNFNUQxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZEluZm9ybWF0aW9uLm0gKi8sCisJCQkJMjU0MDNFNUUxNjZBOURGMzAwRTEzMzA0IC8qIFpYRGVjb2RlZE51bWVyaWMuaCAqLywKKwkJCQkyNTQwM0U1RjE2NkE5REYzMDBFMTMzMDQgLyogWlhEZWNvZGVkTnVtZXJpYy5tICovLAorCQkJCTI1NDAzRTYwMTY2QTlERjMwMEUxMzMwNCAvKiBaWERlY29kZWRPYmplY3QuaCAqLywKKwkJCQkyNTQwM0U2MTE2NkE5REYzMDBFMTMzMDQgLyogWlhEZWNvZGVkT2JqZWN0Lm0gKi8sCisJCQkJMjU0MDNFNjIxNjZBOURGMzAwRTEzMzA0IC8qIFpYRmllbGRQYXJzZXIuaCAqLywKKwkJCQkyNTQwM0U2MzE2NkE5REYzMDBFMTMzMDQgLyogWlhGaWVsZFBhcnNlci5tICovLAorCQkJCTI1NDAzRTY0MTY2QTlERjMwMEUxMzMwNCAvKiBaWEdlbmVyYWxBcHBJZERlY29kZXIuaCAqLywKKwkJCQkyNTQwM0U2NTE2NkE5REYzMDBFMTMzMDQgLyogWlhHZW5lcmFsQXBwSWREZWNvZGVyLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGRlY29kZXJzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNGMTgxNjZBOUVCNTAwRTEzMzA0IC8qIHBkZjQxNyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDNGMTkxNjZBOUVCNTAwRTEzMzA0IC8qIGRlY29kZXIgKi8sCisJCQkJMjU0MDNGMjcxNjZBOUVCNTAwRTEzMzA0IC8qIGRldGVjdG9yICovLAorCQkJCTI1NDAzRjJBMTY2QTlFQjUwMEUxMzMwNCAvKiBlbmNvZGVyICovLAorCQkJCTI1MTlBQjQyMTdGRTU1NEQwMEE3MUM0NSAvKiBaWFBERjQxN0NvbW1vbi5oICovLAorCQkJCTI1MTlBQjQzMTdGRTU1NEQwMEE3MUM0NSAvKiBaWFBERjQxN0NvbW1vbi5tICovLAorCQkJCTI1NDAzRjNBMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN1JlYWRlci5oICovLAorCQkJCTI1NDAzRjNCMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN1JlYWRlci5tICovLAorCQkJCTI1MTlBQjQ2MTdGRTVDMUYwMEE3MUM0NSAvKiBaWFBERjQxN1Jlc3VsdE1ldGFkYXRhLmggKi8sCisJCQkJMjUxOUFCNDcxN0ZFNUMxRjAwQTcxQzQ1IC8qIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEubSAqLywKKwkJCQkyNTE5QUIzQTE3RkQxRUU0MDBBNzFDNDUgLyogWlhQREY0MTdXcml0ZXIuaCAqLywKKwkJCQkyNTE5QUIzQjE3RkQxRUU0MDBBNzFDNDUgLyogWlhQREY0MTdXcml0ZXIubSAqLywKKwkJCSk7CisJCQlwYXRoID0gcGRmNDE3OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNGMTkxNjZBOUVCNTAwRTEzMzA0IC8qIGRlY29kZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRjFBMTY2QTlFQjUwMEUxMzMwNCAvKiBlYyAqLywKKwkJCQkyNTE5QUI1QzE3RkU1RTRGMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEuaCAqLywKKwkJCQkyNTE5QUI1RDE3RkU1RTRGMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEubSAqLywKKwkJCQkyNTE5QUI2NDE3RkU1RjJFMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlVmFsdWUuaCAqLywKKwkJCQkyNTE5QUI2NTE3RkU1RjJFMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlVmFsdWUubSAqLywKKwkJCQkyNTE5QUI2QzE3RkU2MEU3MDBBNzFDNDUgLyogWlhQREY0MTdCb3VuZGluZ0JveC5oICovLAorCQkJCTI1MTlBQjZEMTdGRTYwRTcwMEE3MUM0NSAvKiBaWFBERjQxN0JvdW5kaW5nQm94Lm0gKi8sCisJCQkJMjUxOUFCNzQxN0ZFNjQ5MDAwQTcxQzQ1IC8qIFpYUERGNDE3Q29kZXdvcmQuaCAqLywKKwkJCQkyNTE5QUI3NTE3RkU2NDkwMDBBNzFDNDUgLyogWlhQREY0MTdDb2Rld29yZC5tICovLAorCQkJCTI1Mzg5Qjc3MTgwMERFQzMwMDc3MjM5MiAvKiBaWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5oICovLAorCQkJCTI1Mzg5Qjc4MTgwMERFQzMwMDc3MjM5MiAvKiBaWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5tICovLAorCQkJCTI1NDAzRjIzMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCAqLywKKwkJCQkyNTQwM0YyNDE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gKi8sCisJCQkJMjUzODlCNUUxN0ZGQzg0MzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0LmggKi8sCisJCQkJMjUzODlCNUYxN0ZGQzg0MzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Lm0gKi8sCisJCQkJMjUzODlCNjcxN0ZGQzk4MTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLmggKi8sCisJCQkJMjUzODlCNjgxN0ZGQzk4MTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLm0gKi8sCisJCQkJMjUzODlCNkYxN0ZGQ0EyNzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLmggKi8sCisJCQkJMjUzODlCNzAxN0ZGQ0EyNzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLm0gKi8sCisJCQkJMjUzODlCN0YxODAwRTM1QjAwNzcyMzkyIC8qIFpYUERGNDE3U2Nhbm5pbmdEZWNvZGVyLmggKi8sCisJCQkJMjUzODlCODAxODAwRTM1QjAwNzcyMzkyIC8qIFpYUERGNDE3U2Nhbm5pbmdEZWNvZGVyLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGRlY29kZXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0YxQTE2NkE5RUI1MDBFMTMzMDQgLyogZWMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRjFCMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNHRi5oICovLAorCQkJCTI1NDAzRjFDMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNHRi5tICovLAorCQkJCTI1NDAzRjFEMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNQb2x5LmggKi8sCisJCQkJMjU0MDNGMUUxNjZBOUVCNTAwRTEzMzA0IC8qIFpYTW9kdWx1c1BvbHkubSAqLywKKwkJCQkyNTQwM0YxRjE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5oICovLAorCQkJCTI1NDAzRjIwMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGVjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNGMjcxNjZBOUVCNTAwRTEzMzA0IC8qIGRldGVjdG9yICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwM0YyODE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdEZXRlY3Rvci5oICovLAorCQkJCTI1NDAzRjI5MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0RldGVjdG9yLm0gKi8sCisJCQkJMjUzODlCODcxODAxMEI5QTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQuaCAqLywKKwkJCQkyNTM4OUI4ODE4MDEwQjlBMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclJlc3VsdC5tICovLAorCQkJKTsKKwkJCXBhdGggPSBkZXRlY3RvcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDAzRjJBMTY2QTlFQjUwMEUxMzMwNCAvKiBlbmNvZGVyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwM0YyQjE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlTWF0cml4LmggKi8sCisJCQkJMjU0MDNGMkMxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQmFyY29kZU1hdHJpeC5tICovLAorCQkJCTI1NDAzRjJEMTY2QTlFQjUwMEUxMzMwNCAvKiBaWEJhcmNvZGVSb3cuaCAqLywKKwkJCQkyNTQwM0YyRTE2NkE5RUI1MDBFMTMzMDQgLyogWlhCYXJjb2RlUm93Lm0gKi8sCisJCQkJMjU0MDNGMkYxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQ29tcGFjdGlvbi5oICovLAorCQkJCTI1NDAzRjMwMTY2QTlFQjUwMEUxMzMwNCAvKiBaWERpbWVuc2lvbnMuaCAqLywKKwkJCQkyNTQwM0YzMTE2NkE5RUI1MDBFMTMzMDQgLyogWlhEaW1lbnNpb25zLm0gKi8sCisJCQkJMjU0MDNGMzIxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3LmggKi8sCisJCQkJMjU0MDNGMzMxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3Lm0gKi8sCisJCQkJMjU0MDNGMzQxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RXJyb3JDb3JyZWN0aW9uLmggKi8sCisJCQkJMjU0MDNGMzUxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RXJyb3JDb3JyZWN0aW9uLm0gKi8sCisJCQkJMjU0MDNGMzYxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3SGlnaExldmVsRW5jb2Rlci5oICovLAorCQkJCTI1NDAzRjM3MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0hpZ2hMZXZlbEVuY29kZXIubSAqLywKKwkJCSk7CisJCQlwYXRoID0gZW5jb2RlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDAzRjVCMTY2QTlGMkQwMEUxMzMwNCAvKiBxcmNvZGUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRjVDMTY2QTlGMkQwMEUxMzMwNCAvKiBkZWNvZGVyICovLAorCQkJCTI1NDAzRjZGMTY2QTlGMkQwMEUxMzMwNCAvKiBkZXRlY3RvciAqLywKKwkJCQkyNTQwM0Y3QzE2NkE5RjJEMDBFMTMzMDQgLyogZW5jb2RlciAqLywKKwkJCQkyNTQwM0Y4OTE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVSZWFkZXIuaCAqLywKKwkJCQkyNTQwM0Y4QTE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVSZWFkZXIubSAqLywKKwkJCQkyNTQwM0Y4QjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXIuaCAqLywKKwkJCQkyNTQwM0Y4QzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXIubSAqLywKKwkJCSk7CisJCQlwYXRoID0gcXJjb2RlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNGNUMxNjZBOUYyRDAwRTEzMzA0IC8qIGRlY29kZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRjVEMTY2QTlGMkQwMEUxMzMwNCAvKiBaWERhdGFNYXNrLmggKi8sCisJCQkJMjU0MDNGNUUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRGF0YU1hc2subSAqLywKKwkJCQkyNTQwM0Y1RjE2NkE5RjJEMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5oICovLAorCQkJCTI1NDAzRjYwMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEVycm9yQ29ycmVjdGlvbkxldmVsLm0gKi8sCisJCQkJMjU0MDNGNjExNjZBOUYyRDAwRTEzMzA0IC8qIFpYRm9ybWF0SW5mb3JtYXRpb24uaCAqLywKKwkJCQkyNTQwM0Y2MjE2NkE5RjJEMDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvbi5tICovLAorCQkJCTI1NDAzRjYzMTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1vZGUuaCAqLywKKwkJCQkyNTQwM0Y2NDE2NkE5RjJEMDBFMTMzMDQgLyogWlhNb2RlLm0gKi8sCisJCQkJMjU0MDNGNjUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLmggKi8sCisJCQkJMjU0MDNGNjYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLm0gKi8sCisJCQkJMjU0MDNGNjcxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGF0YUJsb2NrLmggKi8sCisJCQkJMjU0MDNGNjgxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGF0YUJsb2NrLm0gKi8sCisJCQkJMjU0MDNGNjkxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oICovLAorCQkJCTI1NDAzRjZBMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIubSAqLywKKwkJCQkyNTQwM0Y2QjE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLmggKi8sCisJCQkJMjU0MDNGNkMxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2Rlci5tICovLAorCQkJCTI1NDAzRjZEMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24uaCAqLywKKwkJCQkyNTQwM0Y2RTE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVWZXJzaW9uLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGRlY29kZXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0Y2RjE2NkE5RjJEMDBFMTMzMDQgLyogZGV0ZWN0b3IgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRjcwMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEFsaWdubWVudFBhdHRlcm4uaCAqLywKKwkJCQkyNTQwM0Y3MTE2NkE5RjJEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuLm0gKi8sCisJCQkJMjU0MDNGNzIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQWxpZ25tZW50UGF0dGVybkZpbmRlci5oICovLAorCQkJCTI1NDAzRjczMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEFsaWdubWVudFBhdHRlcm5GaW5kZXIubSAqLywKKwkJCQkyNTQwM0Y3NDE2NkE5RjJEMDBFMTMzMDQgLyogWlhGaW5kZXJQYXR0ZXJuRmluZGVyLmggKi8sCisJCQkJMjU0MDNGNzUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRmluZGVyUGF0dGVybkZpbmRlci5tICovLAorCQkJCTI1NDAzRjc2MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5JbmZvLmggKi8sCisJCQkJMjU0MDNGNzcxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRmluZGVyUGF0dGVybkluZm8ubSAqLywKKwkJCQkyNTQwM0Y3ODE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZXRlY3Rvci5oICovLAorCQkJCTI1NDAzRjc5MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZURldGVjdG9yLm0gKi8sCisJCQkJMjU0MDNGN0ExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRmluZGVyUGF0dGVybi5oICovLAorCQkJCTI1NDAzRjdCMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZUZpbmRlclBhdHRlcm4ubSAqLywKKwkJCSk7CisJCQlwYXRoID0gZGV0ZWN0b3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwM0Y3QzE2NkE5RjJEMDBFMTMzMDQgLyogZW5jb2RlciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDNGN0QxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQmxvY2tQYWlyLmggKi8sCisJCQkJMjU0MDNGN0UxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQmxvY2tQYWlyLm0gKi8sCisJCQkJMjU0MDNGN0YxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQnl0ZU1hdHJpeC5oICovLAorCQkJCTI1NDAzRjgwMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEJ5dGVNYXRyaXgubSAqLywKKwkJCQkyNTQwM0Y4MTE2NkE5RjJEMDBFMTMzMDQgLyogWlhFbmNvZGVyLmggKi8sCisJCQkJMjU0MDNGODIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRW5jb2Rlci5tICovLAorCQkJCTI1NDAzRjgzMTY2QTlGMkQwMEUxMzMwNCAvKiBaWE1hc2tVdGlsLmggKi8sCisJCQkJMjU0MDNGODQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWFza1V0aWwubSAqLywKKwkJCQkyNTQwM0Y4NTE2NkE5RjJEMDBFMTMzMDQgLyogWlhNYXRyaXhVdGlsLmggKi8sCisJCQkJMjU0MDNGODYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbC5tICovLAorCQkJCTI1NDAzRjg3MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZS5oICovLAorCQkJCTI1NDAzRjg4MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZS5tICovLAorCQkJKTsKKwkJCXBhdGggPSBlbmNvZGVyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDNGRUQxNjZBQTBGMTAwRTEzMzA0IC8qIGF6dGVjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTA0RDlFMzE2RkZGMjVFMDBERjg4ODIgLyogZW5jb2RlciAqLywKKwkJCQkyNTQwM0ZFRTE2NkFBMEYxMDBFMTMzMDQgLyogQXp0ZWNCbGFja0JveDFUZXN0Q2FzZS5oICovLAorCQkJCTI1NDAzRkVGMTY2QUEwRjEwMEUxMzMwNCAvKiBBenRlY0JsYWNrQm94MVRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDNGRjAxNjZBQTBGMTAwRTEzMzA0IC8qIEF6dGVjQmxhY2tCb3gyVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwM0ZGMTE2NkFBMEYxMDBFMTMzMDQgLyogQXp0ZWNCbGFja0JveDJUZXN0Q2FzZS5tICovLAorCQkJKTsKKwkJCXBhdGggPSBhenRlYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDAzRkYyMTY2QUEwRjEwMEUxMzMwNCAvKiBjbGllbnQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRkYzMTY2QUEwRjEwMEUxMzMwNCAvKiByZXN1bHQgKi8sCisJCQkpOworCQkJcGF0aCA9IGNsaWVudDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDAzRkYzMTY2QUEwRjEwMEUxMzMwNCAvKiByZXN1bHQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDAzRkY0MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0VGVzdENhc2UuaCAqLywKKwkJCQkyNTQwM0ZGNTE2NkFBMEYxMDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDNGRjYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oICovLAorCQkJCTI1NDAzRkY3MTY2QUEwRjEwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLywKKwkJCQkyNTQwM0ZGODE2NkFBMEYxMDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oICovLAorCQkJCTI1NDAzRkY5MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDNGRkExNjZBQTBGMTAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UuaCAqLywKKwkJCQkyNTQwM0ZGQjE2NkFBMEYxMDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tICovLAorCQkJCTI1NDAzRkZDMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEdlb1BhcnNlZFJlc3VsdFRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDNGRkQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYR2VvUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLywKKwkJCQkyNTQwM0ZGRTE2NkFBMEYxMDBFMTMzMDQgLyogWlhJU0JOUGFyc2VkUmVzdWx0VGVzdENhc2UuaCAqLywKKwkJCQkyNTQwM0ZGRjE2NkFBMEYxMDBFMTMzMDQgLyogWlhJU0JOUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDAwMDE2NkFBMEYxMDBFMTMzMDQgLyogWlhQYXJzZWRSZWFkZXJSZXN1bHRUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDAxMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFBhcnNlZFJlYWRlclJlc3VsdFRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwMDIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwMDMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwMDQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYU01TTU1TUGFyc2VkUmVzdWx0VGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDAwNTE2NkFBMEYxMDBFMTMzMDQgLyogWlhTTVNNTVNQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDA2MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFRlbFBhcnNlZFJlc3VsdFRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwMDcxNjZBQTBGMTAwRTEzMzA0IC8qIFpYVGVsUGFyc2VkUmVzdWx0VGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDAwODE2NkFBMEYxMDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDA5MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFVSSVBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwMEExNjZBQTBGMTAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdFRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwMEIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IHJlc3VsdDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDA0MDBDMTY2QUEwRjEwMEUxMzMwNCAvKiBjb21tb24gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDA0MDBEMTY2QUEwRjEwMEUxMzMwNCAvKiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDAwRTE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwMEYxNjZBQTBGMTAwRTEzMzA0IC8qIEFic3RyYWN0TmVnYXRpdmVCbGFja0JveFRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwMTAxNjZBQTBGMTAwRTEzMzA0IC8qIEFic3RyYWN0TmVnYXRpdmVCbGFja0JveFRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwMTExNjZBQTBGMTAwRTEzMzA0IC8qIHJlZWRzb2xvbW9uICovLAorCQkJCTI1NDA0MDFBMTY2QUEwRjEwMEUxMzMwNCAvKiBUZXN0UmVzdWx0LmggKi8sCisJCQkJMjU0MDQwMUIxNjZBQTBGMTAwRTEzMzA0IC8qIFRlc3RSZXN1bHQubSAqLywKKwkJCQkyNTQwNDAxQzE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaXRBcnJheVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwMUQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0QXJyYXlUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDFFMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpdE1hdHJpeFRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwMUYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0TWF0cml4VGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDAyMDE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaXRTb3VyY2VCdWlsZGVyLmggKi8sCisJCQkJMjU0MDQwMjExNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0U291cmNlQnVpbGRlci5tICovLAorCQkJCTI1NDA0MDIyMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwMjMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0U291cmNlVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDAyNDE2NkFBMEYxMDBFMTMzMDQgLyogWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwMjUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm1UZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDI2MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDAyNzE2NkFBMEYxMDBFMTMzMDQgLyogWlhTdHJpbmdVdGlsc1Rlc3RDYXNlLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGNvbW1vbjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDA0MDExMTY2QUEwRjEwMEUxMzMwNCAvKiByZWVkc29sb21vbiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjUwNEQ5RUExNzAwMDVGRTAwREY4ODgyIC8qIFJlZWRTb2xvbW9uVGVzdENhc2UuaCAqLywKKwkJCQkyNTA0RDlFQjE3MDAwNUZFMDBERjg4ODIgLyogUmVlZFNvbG9tb25UZXN0Q2FzZS5tICovLAorCQkJKTsKKwkJCXBhdGggPSByZWVkc29sb21vbjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDA0MDI4MTY2QUEwRjEwMEUxMzMwNCAvKiBkYXRhbWF0cml4ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwNDAyOTE2NkFBMEYxMDBFMTMzMDQgLyogRGF0YU1hdHJpeEJsYWNrQm94MVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwMkExNjZBQTBGMTAwRTEzMzA0IC8qIERhdGFNYXRyaXhCbGFja0JveDFUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDJCMTY2QUEwRjEwMEUxMzMwNCAvKiBEYXRhTWF0cml4QmxhY2tCb3gyVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDAyQzE2NkFBMEYxMDBFMTMzMDQgLyogRGF0YU1hdHJpeEJsYWNrQm94MlRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwMkQxNjZBQTBGMTAwRTEzMzA0IC8qIGRlY29kZXIgKi8sCisJCQkJMjU0Mjk5RkQxNkQ1REZCQjAwRDRDMDQ1IC8qIGVuY29kZXIgKi8sCisJCQkJMjU0Mjk5RjMxNkQ1REM4RTAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFdyaXRlclRlc3RDYXNlLmggKi8sCisJCQkJMjU0Mjk5RjQxNkQ1REM4RTAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFdyaXRlclRlc3RDYXNlLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGRhdGFtYXRyaXg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwNDAyRDE2NkFBMEYxMDBFMTMzMDQgLyogZGVjb2RlciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDQwMkUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXJUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDJGMTY2QUEwRjEwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubSAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVjb2RlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDA0MDMwMTY2QUEwRjEwMEUxMzMwNCAvKiBuZWdhdGl2ZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDQwMzExNjZBQTBGMTAwRTEzMzA0IC8qIEZhbHNlUG9zaXRpdmVzMkJsYWNrQm94VGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDAzMjE2NkFBMEYxMDBFMTMzMDQgLyogRmFsc2VQb3NpdGl2ZXMyQmxhY2tCb3hUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDMzMTY2QUEwRjEwMEUxMzMwNCAvKiBGYWxzZVBvc2l0aXZlc0JsYWNrQm94VGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDAzNDE2NkFBMEYxMDBFMTMzMDQgLyogRmFsc2VQb3NpdGl2ZXNCbGFja0JveFRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwMzUxNjZBQTBGMTAwRTEzMzA0IC8qIFBhcnRpYWxCbGFja0JveFRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwMzYxNjZBQTBGMTAwRTEzMzA0IC8qIFBhcnRpYWxCbGFja0JveFRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwMzcxNjZBQTBGMTAwRTEzMzA0IC8qIFVuc3VwcG9ydGVkQmxhY2tCb3hUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDM4MTY2QUEwRjEwMEUxMzMwNCAvKiBVbnN1cHBvcnRlZEJsYWNrQm94VGVzdENhc2UubSAqLywKKwkJCSk7CisJCQlwYXRoID0gbmVnYXRpdmU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwNDAzOTE2NkFBMEYxMDBFMTMzMDQgLyogb25lZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDQwM0ExNjZBQTBGMTAwRTEzMzA0IC8qIENvZGFiYXJCbGFja0JveDFUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDNCMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RhYmFyQmxhY2tib3gxVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDAzQzE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTEyOEJsYWNrQm94MVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwM0QxNjZBQTBGMTAwRTEzMzA0IC8qIENvZGUxMjhCbGFja0JveDFUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDNFMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMTI4QmxhY2tCb3gyVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDAzRjE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTEyOEJsYWNrQm94MlRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwNDAxNjZBQTBGMTAwRTEzMzA0IC8qIENvZGUxMjhCbGFja0JveDNUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDQxMTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMTI4QmxhY2tCb3gzVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA0MjE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTM5QmxhY2tCb3gxVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA0MzE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTM5QmxhY2tCb3gxVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA0NDE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTM5QmxhY2tCb3gzVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA0NTE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTM5QmxhY2tCb3gzVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA0NjE2NkFBMEYxMDBFMTMzMDQgLyogQ29kZTM5RXh0ZW5kZWRCbGFja0JveDJUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDQ3MTY2QUEwRjEwMEUxMzMwNCAvKiBDb2RlMzlFeHRlbmRlZEJsYWNrQm94MlRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwNDgxNjZBQTBGMTAwRTEzMzA0IC8qIENvZGU5M0JsYWNrQm94MVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwNDkxNjZBQTBGMTAwRTEzMzA0IC8qIENvZGU5M0JsYWNrQm94MVRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwNEExNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjEzQmxhY2tCb3gxVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA0QjE2NkFBMEYxMDBFMTMzMDQgLyogRUFOMTNCbGFja0JveDFUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDRDMTY2QUEwRjEwMEUxMzMwNCAvKiBFQU4xM0JsYWNrQm94MlRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwNEQxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjEzQmxhY2tCb3gyVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA0RTE2NkFBMEYxMDBFMTMzMDQgLyogRUFOMTNCbGFja0JveDNUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDRGMTY2QUEwRjEwMEUxMzMwNCAvKiBFQU4xM0JsYWNrQm94M1Rlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwNTAxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjEzQmxhY2tCb3g0VGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA1MTE2NkFBMEYxMDBFMTMzMDQgLyogRUFOMTNCbGFja0JveDRUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDUyMTY2QUEwRjEwMEUxMzMwNCAvKiBFQU4xM0JsYWNrQm94NUJsdXJyeVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwNTMxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjEzQmxhY2tCb3g1Qmx1cnJ5VGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA1NDE2NkFBMEYxMDBFMTMzMDQgLyogRUFOOEJsYWNrQm94MVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwNTUxNjZBQTBGMTAwRTEzMzA0IC8qIEVBTjhCbGFja0JveDFUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDU2MTY2QUEwRjEwMEUxMzMwNCAvKiBJVEZCbGFja0JveDFUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDU3MTY2QUEwRjEwMEUxMzMwNCAvKiBJVEZCbGFja0JveDFUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDU4MTY2QUEwRjEwMEUxMzMwNCAvKiBJVEZCbGFja0JveDJUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDU5MTY2QUEwRjEwMEUxMzMwNCAvKiBJVEZCbGFja0JveDJUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDVBMTY2QUEwRjEwMEUxMzMwNCAvKiByc3MgKi8sCisJCQkJMjU0MDQwODMxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0FCbGFja0JveDFUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDg0MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENBQmxhY2tCb3gxVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA4NTE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94MlRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwODYxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0FCbGFja0JveDJUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDg3MTY2QUEwRjEwMEUxMzMwNCAvKiBVUENBQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwODgxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0FCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA4OTE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94NFRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwOEExNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0FCbGFja0JveDRUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDhCMTY2QUEwRjEwMEUxMzMwNCAvKiBVUENBQmxhY2tCb3g1VGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA4QzE2NkFBMEYxMDBFMTMzMDQgLyogVVBDQUJsYWNrQm94NVRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwOEQxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0FCbGFja0JveDZCbHVycnlUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDhFMTY2QUEwRjEwMEUxMzMwNCAvKiBVUENBQmxhY2tCb3g2Qmx1cnJ5VGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA4RjE2NkFBMEYxMDBFMTMzMDQgLyogVVBDRUFORXh0ZW5zaW9uQmxhY2tCb3gxVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA5MDE2NkFBMEYxMDBFMTMzMDQgLyogVVBDRUFORXh0ZW5zaW9uQmxhY2tCb3gxVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA5MTE2NkFBMEYxMDBFMTMzMDQgLyogVVBDRUJsYWNrQm94MVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwOTIxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0VCbGFja0JveDFUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDkzMTY2QUEwRjEwMEUxMzMwNCAvKiBVUENFQmxhY2tCb3gyVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA5NDE2NkFBMEYxMDBFMTMzMDQgLyogVVBDRUJsYWNrQm94MlRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwOTUxNjZBQTBGMTAwRTEzMzA0IC8qIFVQQ0VCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA5NjE2NkFBMEYxMDBFMTMzMDQgLyogVVBDRUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDk3MTY2QUEwRjEwMEUxMzMwNCAvKiBaWENvZGFCYXJXcml0ZXJUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDk4MTY2QUEwRjEwMEUxMzMwNCAvKiBaWENvZGFCYXJXcml0ZXJUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDlCMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVBTjEzV3JpdGVyVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA5QzE2NkFBMEYxMDBFMTMzMDQgLyogWlhFQU4xM1dyaXRlclRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwOUQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRUFOOFdyaXRlclRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwOUUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRUFOOFdyaXRlclRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwOUYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydFRlc3QuaCAqLywKKwkJCQkyNTQwNDBBMDE2NkFBMEYxMDBFMTMzMDQgLyogWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0VGVzdC5tICovLAorCQkJCTI1NDA0MEEzMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXJUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MEE0MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXJUZXN0Q2FzZS5tICovLAorCQkJKTsKKwkJCXBhdGggPSBvbmVkOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDQwNUExNjZBQTBGMTAwRTEzMzA0IC8qIHJzcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDQwNUIxNjZBQTBGMTAwRTEzMzA0IC8qIGV4cGFuZGVkICovLAorCQkJCTI1NDA0MDdGMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1MxNEJsYWNrQm94MVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwODAxNjZBQTBGMTAwRTEzMzA0IC8qIFJTUzE0QmxhY2tCb3gxVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA4MTE2NkFBMEYxMDBFMTMzMDQgLyogUlNTMTRCbGFja0JveDJUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDgyMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1MxNEJsYWNrQm94MlRlc3RDYXNlLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IHJzczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDA0MDVCMTY2QUEwRjEwMEUxMzMwNCAvKiBleHBhbmRlZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDQwNUMxNjZBQTBGMTAwRTEzMzA0IC8qIGRlY29kZXJzICovLAorCQkJCTI1NDA0MDY5MTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEJsYWNrQm94MVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwNkExNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkQmxhY2tCb3gxVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA2QjE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRCbGFja0JveDJUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDZDMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEJsYWNrQm94MlRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwNkQxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkQmxhY2tCb3gzVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA2RTE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRCbGFja0JveDNUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDZGMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMmJpbmFyeVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwNzAxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2UyYmluYXJ5VGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDA3MTE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJyZXN1bHRUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MDcyMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMnJlc3VsdFRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwNzMxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2Uyc3RyaW5nVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA3NDE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJzdHJpbmdUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MDc1MTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEludGVybmFsVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDA3NjE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLm0gKi8sCisJCQkJMjVGRTVEMzgxNkQwQjgyRjAwODI2Q0RCIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MVRlc3RDYXNlLmggKi8sCisJCQkJMjVGRTVEMzkxNkQwQjgyRjAwODI2Q0RCIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MVRlc3RDYXNlLm0gKi8sCisJCQkJMjVGRTVEM0ExNkQwQjgzMDAwODI2Q0RCIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MlRlc3RDYXNlLmggKi8sCisJCQkJMjVGRTVEM0IxNkQwQjgzMDAwODI2Q0RCIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MlRlc3RDYXNlLm0gKi8sCisJCQkJMjVGRTVEM0UxNkQwQjg0QzAwODI2Q0RCIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEludGVybmFsVGVzdENhc2UuaCAqLywKKwkJCQkyNUZFNUQzRjE2RDBCODRDMDA4MjZDREIgLyogUlNTRXhwYW5kZWRTdGFja2VkSW50ZXJuYWxUZXN0Q2FzZS5tICovLAorCQkJCTI1RkU1RDQxMTZEMEI4QjEwMDgyNkNEQiAvKiBUZXN0Q2FzZVV0aWwuaCAqLywKKwkJCQkyNUZFNUQ0MjE2RDBCOEIyMDA4MjZDREIgLyogVGVzdENhc2VVdGlsLm0gKi8sCisJCQkJMjU0MDQwNzcxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQmluYXJ5VXRpbC5oICovLAorCQkJCTI1NDA0MDc4MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpbmFyeVV0aWwubSAqLywKKwkJCQkyNTQwNDA3OTE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaW5hcnlVdGlsVGVzdC5oICovLAorCQkJCTI1NDA0MDdBMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpbmFyeVV0aWxUZXN0Lm0gKi8sCisJCQkJMjU0MDQwN0IxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyVGVzdC5oICovLAorCQkJCTI1NDA0MDdDMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpdEFycmF5QnVpbGRlclRlc3QubSAqLywKKwkJCQkyNTQwNDA3RDE2NkFBMEYxMDBFMTMzMDQgLyogWlhFeHBhbmRlZEluZm9ybWF0aW9uRGVjb2RlclRlc3QuaCAqLywKKwkJCQkyNTQwNDA3RTE2NkFBMEYxMDBFMTMzMDQgLyogWlhFeHBhbmRlZEluZm9ybWF0aW9uRGVjb2RlclRlc3QubSAqLywKKwkJCSk7CisJCQlwYXRoID0gZXhwYW5kZWQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwNDA1QzE2NkFBMEYxMDBFMTMzMDQgLyogZGVjb2RlcnMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDA0MDVEMTY2QUEwRjEwMEUxMzMwNCAvKiBBYnN0cmFjdERlY29kZXJUZXN0LmggKi8sCisJCQkJMjU0MDQwNUUxNjZBQTBGMTAwRTEzMzA0IC8qIEFic3RyYWN0RGVjb2RlclRlc3QubSAqLywKKwkJCQkyNTQwNDA1RjE2NkFBMEYxMDBFMTMzMDQgLyogQUkwMV8zMTAzX0RlY29kZXJUZXN0LmggKi8sCisJCQkJMjU0MDQwNjAxNjZBQTBGMTAwRTEzMzA0IC8qIEFJMDFfMzEwM19EZWNvZGVyVGVzdC5tICovLAorCQkJCTI1NDA0MDYxMTY2QUEwRjEwMEUxMzMwNCAvKiBBSTAxXzMyMDJfMzIwM19EZWNvZGVyVGVzdC5oICovLAorCQkJCTI1NDA0MDYyMTY2QUEwRjEwMEUxMzMwNCAvKiBBSTAxXzMyMDJfMzIwM19EZWNvZGVyVGVzdC5tICovLAorCQkJCTI1NDA0MDYzMTY2QUEwRjEwMEUxMzMwNCAvKiBBSTAxXzNYMFhfMVhfRGVjb2RlclRlc3QuaCAqLywKKwkJCQkyNTQwNDA2NDE2NkFBMEYxMDBFMTMzMDQgLyogQUkwMV8zWDBYXzFYX0RlY29kZXJUZXN0Lm0gKi8sCisJCQkJMjU0MDQwNjUxNjZBQTBGMTAwRTEzMzA0IC8qIEFueUFJRGVjb2RlclRlc3QuaCAqLywKKwkJCQkyNTQwNDA2NjE2NkFBMEYxMDBFMTMzMDQgLyogQW55QUlEZWNvZGVyVGVzdC5tICovLAorCQkJCTI1NDA0MDY3MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEZpZWxkUGFyc2VyVGVzdC5oICovLAorCQkJCTI1NDA0MDY4MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEZpZWxkUGFyc2VyVGVzdC5tICovLAorCQkJKTsKKwkJCXBhdGggPSBkZWNvZGVyczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDA0MEE1MTY2QUEwRjEwMEUxMzMwNCAvKiBwZGY0MTcgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDA0MEE2MTY2QUEwRjEwMEUxMzMwNCAvKiBkZWNvZGVyICovLAorCQkJCTI1Mzg5QjhGMTgwMTBEN0EwMDc3MjM5MiAvKiBkZXRlY3RvciAqLywKKwkJCQkyNTQwNDBBQzE2NkFBMEYxMDBFMTMzMDQgLyogUERGNDE3QmxhY2tCb3gxVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDBBRDE2NkFBMEYxMDBFMTMzMDQgLyogUERGNDE3QmxhY2tCb3gxVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDBBRTE2NkFBMEYxMDBFMTMzMDQgLyogUERGNDE3QmxhY2tCb3gyVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDBBRjE2NkFBMEYxMDBFMTMzMDQgLyogUERGNDE3QmxhY2tCb3gyVGVzdENhc2UubSAqLywKKwkJCQkyNUU5RTkxNzE3RkE1NTU0MDAzNjQ4NjEgLyogUERGNDE3QmxhY2tCb3gzVGVzdENhc2UuaCAqLywKKwkJCQkyNUU5RTkxODE3RkE1NTU0MDAzNjQ4NjEgLyogUERGNDE3QmxhY2tCb3gzVGVzdENhc2UubSAqLywKKwkJCQkyNUI1ODI5NzE4MTZGN0IwMDAxMzYzNEEgLyogUERGNDE3QmxhY2tCb3g0VGVzdENhc2UuaCAqLywKKwkJCQkyNUI1ODI5ODE4MTZGN0IwMDAxMzYzNEEgLyogUERGNDE3QmxhY2tCb3g0VGVzdENhc2UubSAqLywKKwkJCSk7CisJCQlwYXRoID0gcGRmNDE3OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDQwQTYxNjZBQTBGMTAwRTEzMzA0IC8qIGRlY29kZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDA0MEE3MTY2QUEwRjEwMEUxMzMwNCAvKiBlYyAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVjb2RlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTI1NDA0MEE3MTY2QUEwRjEwMEUxMzMwNCAvKiBlYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDQwQTgxNjZBQTBGMTAwRTEzMzA0IC8qIEFic3RyYWN0RXJyb3JDb3JyZWN0aW9uVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDBBOTE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MEFBMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDBBQjE2NkFBMEYxMDBFMTMzMDQgLyogWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvblRlc3RDYXNlLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGVjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0MDQwQjAxNjZBQTBGMTAwRTEzMzA0IC8qIHFyY29kZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDQwQjExNjZBQTBGMTAwRTEzMzA0IC8qIGRlY29kZXIgKi8sCisJCQkJMjU0MDQwQkUxNjZBQTBGMTAwRTEzMzA0IC8qIGVuY29kZXIgKi8sCisJCQkJMjU0MDQwQzkxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94MVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwQ0ExNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94MVRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwQ0IxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94MlRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwQ0MxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94MlRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwQ0QxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94M1Rlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwQ0UxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94M1Rlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwQ0YxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94NFRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwRDAxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94NFRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwRDExNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94NVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwRDIxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94NVRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwRDMxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94NlRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwRDQxNjZBQTBGMTAwRTEzMzA0IC8qIFFSQ29kZUJsYWNrQm94NlRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwRDUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlV3JpdGVyVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDBENjE2NkFBMEYxMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXJUZXN0Q2FzZS5tICovLAorCQkJKTsKKwkJCXBhdGggPSBxcmNvZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwNDBCMTE2NkFBMEYxMDBFMTMzMDQgLyogZGVjb2RlciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDQwQjIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRGF0YU1hc2tUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MEIzMTY2QUEwRjEwMEUxMzMwNCAvKiBaWERhdGFNYXNrVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDBCNDE2NkFBMEYxMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbFRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwQjUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZS5tICovLAorCQkJCTI1NDA0MEI2MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEZvcm1hdEluZm9ybWF0aW9uVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDBCNzE2NkFBMEYxMDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvblRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwQjgxNjZBQTBGMTAwRTEzMzA0IC8qIFpYTW9kZVRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwQjkxNjZBQTBGMTAwRTEzMzA0IC8qIFpYTW9kZVRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwQkExNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwQkIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwQkMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlVmVyc2lvblRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwQkQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlVmVyc2lvblRlc3RDYXNlLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGRlY29kZXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwNDBCRTE2NkFBMEYxMDBFMTMzMDQgLyogZW5jb2RlciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0MDQwQkYxNjZBQTBGMTAwRTEzMzA0IC8qIEJpdFZlY3RvclRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwQzAxNjZBQTBGMTAwRTEzMzA0IC8qIEJpdFZlY3RvclRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwQzExNjZBQTBGMTAwRTEzMzA0IC8qIFpYRW5jb2RlclRlc3RDYXNlLmggKi8sCisJCQkJMjU0MDQwQzIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRW5jb2RlclRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MDQwQzMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYTWFza1V0aWxUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MEM0MTY2QUEwRjEwMEUxMzMwNCAvKiBaWE1hc2tVdGlsVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDBDNTE2NkFBMEYxMDBFMTMzMDQgLyogWlhNYXRyaXhVdGlsVGVzdENhc2UuaCAqLywKKwkJCQkyNTQwNDBDNjE2NkFBMEYxMDBFMTMzMDQgLyogWlhNYXRyaXhVdGlsVGVzdENhc2UubSAqLywKKwkJCQkyNTQwNDBDNzE2NkFBMEYxMDBFMTMzMDQgLyogWlhRUkNvZGVUZXN0Q2FzZS5oICovLAorCQkJCTI1NDA0MEM4MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFFSQ29kZVRlc3RDYXNlLm0gKi8sCisJCQkpOworCQkJcGF0aCA9IGVuY29kZXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQwNDM4QTE2NkFCOEVBMDBFMTMzMDQgLyogT1MgWCBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkyNTQwNDM5NDE2NkFCOTU3MDBFMTMzMDQgLyogQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsgKi8sCisJCQkJMjU0MDQzOEYxNjZBQjkxNzAwRTEzMzA0IC8qIENvY29hLmZyYW1ld29yayAqLywKKwkJCQkyNTQwNDM4NzE2NkFCOENGMDBFMTMzMDQgLyogQ29yZVZpZGVvLmZyYW1ld29yayAqLywKKwkJCQkyNTQwNDcwMDE2NkFCQzNGMDBFMTMzMDQgLyogUVRLaXQuZnJhbWV3b3JrICovLAorCQkJCTI1NDA0NkZDMTY2QUJDMTYwMEUxMzMwNCAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLywKKwkJCSk7CisJCQluYW1lID0gIk9TIFggRnJhbWV3b3JrcyI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkyNTQyOTk4MzE2RDQ3ODgxMDBENEMwNDUgLyogZW5jb2RlciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMjU0Mjk5ODQxNkQ0NzhBMDAwRDRDMDQ1IC8qIFpYQVNDSUlFbmNvZGVyLmggKi8sCisJCQkJMjU0Mjk5ODUxNkQ0NzhBMDAwRDRDMDQ1IC8qIFpYQVNDSUlFbmNvZGVyLm0gKi8sCisJCQkJMjU0Mjk5OEQxNkQ0N0JCRjAwRDRDMDQ1IC8qIFpYQmFzZTI1NkVuY29kZXIuaCAqLywKKwkJCQkyNTQyOTk4RTE2RDQ3QkJGMDBENEMwNDUgLyogWlhCYXNlMjU2RW5jb2Rlci5tICovLAorCQkJCTI1NDI5OTk3MTZENDgyRjgwMEQ0QzA0NSAvKiBaWEM0MEVuY29kZXIuaCAqLywKKwkJCQkyNTQyOTk5ODE2RDQ4MkY4MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLm0gKi8sCisJCQkJMjU0Mjk5OEMxNkQ0NzhGODAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeEVuY29kZXIuaCAqLywKKwkJCQkyNTQyOTlCRjE2RDVCOEU0MDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLmggKi8sCisJCQkJMjU0Mjk5QzAxNkQ1QjhFNDAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5tICovLAorCQkJCTI1NDI5OTlGMTZENDg3OTgwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0LmggKi8sCisJCQkJMjU0Mjk5QTAxNkQ0ODc5ODAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeFN5bWJvbEluZm8xNDQubSAqLywKKwkJCQkyNTQyOTlBNzE2RDQ4ODYwMDBENEMwNDUgLyogWlhEZWZhdWx0UGxhY2VtZW50LmggKi8sCisJCQkJMjU0Mjk5QTgxNkQ0ODg2MDAwRDRDMDQ1IC8qIFpYRGVmYXVsdFBsYWNlbWVudC5tICovLAorCQkJCTI1NDI5OUFGMTZENEEzNjcwMEQ0QzA0NSAvKiBaWEVkaWZhY3RFbmNvZGVyLmggKi8sCisJCQkJMjU0Mjk5QjAxNkQ0QTM2NzAwRDRDMDQ1IC8qIFpYRWRpZmFjdEVuY29kZXIubSAqLywKKwkJCQkyNTQyOTlCNzE2RDRBNUE5MDBENEMwNDUgLyogWlhFbmNvZGVyQ29udGV4dC5oICovLAorCQkJCTI1NDI5OUI4MTZENEE1QTkwMEQ0QzA0NSAvKiBaWEVuY29kZXJDb250ZXh0Lm0gKi8sCisJCQkJMjU0Mjk5QzcxNkQ1QkQ1MzAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2Rlci5oICovLAorCQkJCTI1NDI5OUM4MTZENUJENTMwMEQ0QzA0NSAvKiBaWEhpZ2hMZXZlbEVuY29kZXIubSAqLywKKwkJCQkyNTQyOTlDRjE2RDVDOTYwMDBENEMwNDUgLyogWlhTeW1ib2xJbmZvLmggKi8sCisJCQkJMjU0Mjk5RDAxNkQ1Qzk2MDAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mby5tICovLAorCQkJCTI1NDI5OUQ3MTZENUQxMUUwMEQ0QzA0NSAvKiBaWFN5bWJvbFNoYXBlSGludC5oICovLAorCQkJCTI1NDI5OURGMTZENUQyNEQwMEQ0QzA0NSAvKiBaWFN5bWJvbFNoYXBlSGludC5tICovLAorCQkJCTI1NDI5OUUzMTZENUQ4MTgwMEQ0QzA0NSAvKiBaWFRleHRFbmNvZGVyLmggKi8sCisJCQkJMjU0Mjk5RTQxNkQ1RDgxOTAwRDRDMDQ1IC8qIFpYVGV4dEVuY29kZXIubSAqLywKKwkJCQkyNTQyOTlFQjE2RDVEOTQ5MDBENEMwNDUgLyogWlhYMTJFbmNvZGVyLmggKi8sCisJCQkJMjU0Mjk5RUMxNkQ1RDk0QTAwRDRDMDQ1IC8qIFpYWDEyRW5jb2Rlci5tICovLAorCQkJKTsKKwkJCW5hbWUgPSBlbmNvZGVyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMjU0Mjk5RkQxNkQ1REZCQjAwRDRDMDQ1IC8qIGVuY29kZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTI1NDI5QTAyMTZENUUwRUQwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5oICovLAorCQkJCTI1NDI5QTAzMTZENUUwRUQwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tICovLAorCQkJCTI1NDI5OUZFMTZENURGRDgwMEQ0QzA0NSAvKiBaWERlYnVnUGxhY2VtZW50LmggKi8sCisJCQkJMjU0Mjk5RkYxNkQ1REZEODAwRDRDMDQ1IC8qIFpYRGVidWdQbGFjZW1lbnQubSAqLywKKwkJCQkyNTQyOUEwNjE2RDVFMjFDMDBENEMwNDUgLyogWlhIaWdoTGV2ZWxFbmNvZGVUZXN0Q2FzZS5oICovLAorCQkJCTI1NDI5QTA3MTZENUUyMUMwMEQ0QzA0NSAvKiBaWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlLm0gKi8sCisJCQkJMjU0MjlBMEExNkQ1RjRFMDAwRDRDMDQ1IC8qIFpYUGxhY2VtZW50VGVzdENhc2UuaCAqLywKKwkJCQkyNTQyOUEwQjE2RDVGNEUwMDBENEMwNDUgLyogWlhQbGFjZW1lbnRUZXN0Q2FzZS5tICovLAorCQkJCTI1NDI5QTBFMTZENUY2NkQwMEQ0QzA0NSAvKiBaWFN5bWJvbEluZm9UZXN0Q2FzZS5oICovLAorCQkJCTI1NDI5QTBGMTZENUY2NkQwMEQ0QzA0NSAvKiBaWFN5bWJvbEluZm9UZXN0Q2FzZS5tICovLAorCQkJKTsKKwkJCW5hbWUgPSBlbmNvZGVyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKy8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMjU0MDNDRTIxNjZBOThCNjAwRTEzMzA0IC8qIEhlYWRlcnMgKi8gPSB7CisJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkyNTQwM0NFMzE2NkE5OEM3MDBFMTMzMDQgLyogWlhpbmdPYmpDLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0NGNzE2NkE5OTlEMDBFMTMzMDQgLyogWlhBenRlY0RlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzQ0Y5MTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzQ0ZCMTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzQ0ZEMTY2QTk5OUQwMEUxMzMwNCAvKiBaWEF6dGVjUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q1MDE2NkE5QTA4MDBFMTMzMDQgLyogWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNENTIxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNENTQxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDU2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q1ODE2NkE5QTA4MDBFMTMzMDQgLyogWlhCaXpjYXJkUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q1QTE2NkE5QTA4MDBFMTMzMDQgLyogWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNENUMxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1MTlBQjc2MTdGRTY0OTAwMEE3MUM0NSAvKiBaWFBERjQxN0NvZGV3b3JkLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q1RTE2NkE5QTA4MDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDYwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1Jlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNENjIxNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDY0MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNENjYxNjZBOUEwODAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTE5QUI2NjE3RkU1RjJFMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDY4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEdlb1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNENkExNjZBOUEwODAwRTEzMzA0IC8qIFpYR2VvUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q2QzE2NkE5QTA4MDBFMTMzMDQgLyogWlhJU0JOUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q2RTE2NkE5QTA4MDBFMTMzMDQgLyogWlhJU0JOUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q3MDE2NkE5QTA4MDBFMTMzMDQgLyogWlhQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDcyMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFBhcnNlZFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDczMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFByb2R1Y3RQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDc1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFByb2R1Y3RSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDc3MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNENzkxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01TTU1TUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q3QjE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDdEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDdGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNVFBSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDgxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRlbFBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNEODMxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGVsUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q4NTE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZXh0UGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q4NzE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDg5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNEOEIxNjZBOUEwODAwRTEzMzA0IC8qIFpYVVJMVE9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDhEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZDYXJkUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q4RjE2NkE5QTA4MDBFMTMzMDQgLyogWlhWRXZlbnRSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDkxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFdpZmlQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDkzMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFdpZmlSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDk1MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDk3MTY2QTlBMDgwMEUxMzMwNCAvKiBaWENhcHR1cmVEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNEOTgxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FwdHVyZVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDlBMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRDlDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Q5RTE2NkE5QTA4MDBFMTMzMDQgLyogWlhWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0RDQTE2NkE5QzBFMDBFMTMzMDQgLyogWlhNYXRoVXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1MTlBQjQ0MTdGRTU1NEQwMEE3MUM0NSAvKiBaWFBERjQxN0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNEQ0MxNjZBOUMwRTAwRTEzMzA0IC8qIFpYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0RDRTE2NkE5QzBFMDBFMTMzMDQgLyogWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0REMDE2NkE5QzBFMDBFMTMzMDQgLyogWlhHZW5lcmljR0YuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzREQyMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRlBvbHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzREQ0MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFJlZWRTb2xvbW9uRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNERDYxNjZBOUMwRTAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25FbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0REODE2NkE5QzBFMDBFMTMzMDQgLyogWlhCaXRBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNEREExNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0TWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0REQzE2NkE5QzBFMDBFMTMzMDQgLyogWlhCaXRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRERFMTY2QTlDMEUwMEUxMzMwNCAvKiBaWENoYXJhY3RlclNldEVDSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUxOUFCNDgxN0ZFNUMxRjAwQTcxQzQ1IC8qIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzREUwMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERlY29kZXJSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzREUyMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERlZmF1bHRHcmlkU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNERTQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGV0ZWN0b3JSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzREU2MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEVDSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNERTgxNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0RFQTE2NkE5QzBFMDBFMTMzMDQgLyogWlhHcmlkU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNERUMxNjZBOUMwRTAwRTEzMzA0IC8qIFpYSHlicmlkQmluYXJpemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0RFRTE2NkE5QzBFMDBFMTMzMDQgLyogWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNERjAxNjZBOUMwRTAwRTEzMzA0IC8qIFpYU3RyaW5nVXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRTAzMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRTA1MTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEYXRhQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRTA3MTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0UwOTE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFMEIxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeFZlcnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRTBEMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFMEYxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFMUIxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRTFEMTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFMUYxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0UyMTE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFMzExNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFMzMxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0UzNTE2NkE5RDhCMDBFMTMzMDQgLyogWlhRUkNvZGVNdWx0aVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFMzcxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFMzkxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYR2VuZXJpY011bHRpcGxlQmFyY29kZVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFM0IxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VBQzE2NkE5REY0MDBFMTMzMDQgLyogWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFQUUxNjZBOURGNDAwRTEzMzA0IC8qIFpYQUkwMTMxMDNkZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VCMDE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxMzIweERlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRUIyMTY2QTlERjQwMEUxMzMwNCAvKiBaWEFJMDEzOTJ4RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFQjQxNjZBOURGNDAwRTEzMzA0IC8qIFpYQUkwMTM5M3hEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VCNjE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxM3gweDF4RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFQjgxNjZBOURGNDAwRTEzMzA0IC8qIFpYQUkwMTN4MHhEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VCQTE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxQW5kT3RoZXJBSXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRUJDMTY2QTlERjQwMEUxMzMwNCAvKiBaWEFJMDFkZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VCRTE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxd2VpZ2h0RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFQzAxNjZBOURGNDAwRTEzMzA0IC8qIFpYQW55QUlEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VDMjE2NkE5REY0MDBFMTMzMDQgLyogWlhCbG9ja1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUxOUFCNUUxN0ZFNUU0RjAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VDNDE2NkE5REY0MDBFMTMzMDQgLyogWlhDdXJyZW50UGFyc2luZ1N0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VDNjE2NkE5REY0MDBFMTMzMDQgLyogWlhEZWNvZGVkQ2hhci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFQzgxNjZBOURGNDAwRTEzMzA0IC8qIFpYRGVjb2RlZEluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VDQTE2NkE5REY0MDBFMTMzMDQgLyogWlhEZWNvZGVkTnVtZXJpYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFQ0MxNjZBOURGNDAwRTEzMzA0IC8qIFpYRGVjb2RlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFQ0UxNjZBOURGNDAwRTEzMzA0IC8qIFpYRmllbGRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRUQwMTY2QTlERjQwMEUxMzMwNCAvKiBaWEdlbmVyYWxBcHBJZERlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRUQyMTY2QTlERjQwMEUxMzMwNCAvKiBaWEJpdEFycmF5QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFRDQxNjZBOURGNDAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQYWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VENjE2NkE5REY0MDBFMTMzMDQgLyogWlhSU1NFeHBhbmRlZFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFRDgxNjZBOURGNDAwRTEzMzA0IC8qIFpYQWJzdHJhY3RSU1NSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRURBMTY2QTlERjQwMEUxMzMwNCAvKiBaWERhdGFDaGFyYWN0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRURDMTY2QTlERjQwMEUxMzMwNCAvKiBaWFBhaXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRURFMTY2QTlERjQwMEUxMzMwNCAvKiBaWFJTUzE0UmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VFMDE2NkE5REY0MDBFMTMzMDQgLyogWlhSU1NGaW5kZXJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VFMjE2NkE5REY0MDBFMTMzMDQgLyogWlhSU1NVdGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUxOUFCM0MxN0ZEMUVFNDAwQTcxQzQ1IC8qIFpYUERGNDE3V3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VFNDE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RhQmFyUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VFNjE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RhQmFyV3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VFODE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RlMTI4UmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VFQTE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RlMTI4V3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VFQzE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRUVFMTY2QTlERjQwMEUxMzMwNCAvKiBaWENvZGUzOVdyaXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFRjAxNjZBOURGNDAwRTEzMzA0IC8qIFpYQ29kZTkzUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0VGMjE2NkE5REY0MDBFMTMzMDQgLyogWlhFQU4xM1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFRjQxNjZBOURGNDAwRTEzMzA0IC8qIFpYRUFOMTNXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRUY2MTY2QTlERjQwMEUxMzMwNCAvKiBaWEVBTjhSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRUY4MTY2QTlERjQwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRUZBMTY2QTlERjQwMEUxMzMwNCAvKiBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRUZDMTY2QTlERjQwMEUxMzMwNCAvKiBaWElURlJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNFRkUxNjZBOURGNDAwRTEzMzA0IC8qIFpYSVRGV3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0YwMDE2NkE5REY0MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjAyMTY2QTlERjQwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0YwNDE2NkE5REY0MDBFMTMzMDQgLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjA2MTY2QTlERjQwMEUxMzMwNCAvKiBaWE9uZURSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjA4MTY2QTlERjQwMEUxMzMwNCAvKiBaWFVQQ0FSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjBBMTY2QTlERjQwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjBDMTY2QTlERjQwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0YwRTE2NkE5REY0MDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGMTAxNjZBOURGNDAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGMTIxNjZBOURGNDAwRTEzMzA0IC8qIFpYVVBDRUFOUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0YxNDE2NkE5REY0MDBFMTMzMDQgLyogWlhVUENFQU5Xcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjE2MTY2QTlERjQwMEUxMzMwNCAvKiBaWFVQQ0VSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjNDMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNHRi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGM0UxNjZBOUVCNTAwRTEzMzA0IC8qIFpYTW9kdWx1c1BvbHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjQwMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Y0NDE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Y0ODE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGNEExNjZBOUVCNTAwRTEzMzA0IC8qIFpYQmFyY29kZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGNEMxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQmFyY29kZVJvdy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGNEUxNjZBOUVCNTAwRTEzMzA0IC8qIFpYQ29tcGFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGNEYxNjZBOUVCNTAwRTEzMzA0IC8qIFpYRGltZW5zaW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGNTExNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Y1MzE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFcnJvckNvcnJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjU1MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0hpZ2hMZXZlbEVuY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjU5MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGOEQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRGF0YU1hc2suaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjhGMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEVycm9yQ29ycmVjdGlvbkxldmVsLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Y5MTE2NkE5RjJEMDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGOTMxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGOTUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0Y5NzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEYXRhQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjk5MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjlCMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZURlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjlEMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRjlGMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEFsaWdubWVudFBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRkExMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEFsaWdubWVudFBhdHRlcm5GaW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRkEzMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5GaW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRkE1MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0ZBNzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGQTkxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRmluZGVyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGQUIxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQmxvY2tQYWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0ZBRDE2NkE5RjJEMDBFMTMzMDQgLyogWlhCeXRlTWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0ZBRjE2NkE5RjJEMDBFMTMzMDQgLyogWlhFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0ZCMTE2NkE5RjJEMDBFMTMzMDQgLyogWlhNYXNrVXRpbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGQjMxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGQjUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0ZCNzE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRkI5MTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVdyaXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGQzYxNjZBOUZGQzAwRTEzMzA0IC8qIFpYQmFyY29kZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGQzcxNjZBOUZGQzAwRTEzMzA0IC8qIFpYQmluYXJpemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0ZDOTE2NkE5RkZDMDBFMTMzMDQgLyogWlhCaW5hcnlCaXRtYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRkNCMTY2QTlGRkMwMEUxMzMwNCAvKiBaWERlY29kZUhpbnRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0ZDRDE2NkE5RkZDMDBFMTMzMDQgLyogWlhFbmNvZGVIaW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGQ0YxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRXJyb3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0ZERjE2NkFBMDA4MDBFMTMzMDQgLyogWlhMdW1pbmFuY2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRkUxMTY2QUEwMDgwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0UmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0ZFMzE2NkFBMDA4MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFdyaXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGRTUxNjZBQTAwODAwRTEzMzA0IC8qIFpYUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwM0ZFNjE2NkFBMDA4MDBFMTMzMDQgLyogWlhSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRkU4MTY2QUEwMDgwMEUxMzMwNCAvKiBaWFJlc3VsdE1ldGFkYXRhVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDNGRTkxNjZBQTAwODAwRTEzMzA0IC8qIFpYUmVzdWx0UG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRkVCMTY2QUEwMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDAzRkVDMTY2QUEwMDgwMEUxMzMwNCAvKiBaWFdyaXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUxRkNERUIxNkNDOEY1MzAwMEMyN0U1IC8qIFpYUkdCTHVtaW5hbmNlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNUZFNUQzMzE2RDBBRkVEMDA4MjZDREIgLyogWlhFeHBhbmRlZFJvdy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0Mjk5NkQxNkQzMzMxRjAwRDRDMDQ1IC8qIFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTk3RDE2RDQ3MEQ2MDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTk4NjE2RDQ3OEEwMDBENEMwNDUgLyogWlhBU0NJSUVuY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1Mzg5Qjc5MTgwMERFQzMwMDc3MjM5MiAvKiBaWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUzODlCODkxODAxMEI5QTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1MTlBQjM0MTdGRDFFQzAwMEE3MUM0NSAvKiBaWEF6dGVjV3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTM4OUI2OTE3RkZDOTgxMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1Mzg5QjcxMTdGRkNBMjcwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0Mjk5NzUxNkQ0NkU4NTAwRDRDMDQ1IC8qIFpYRGltZW5zaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTk5OTE2RDQ4MkY5MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTlBMTE2RDQ4Nzk4MDBENEMwNDUgLyogWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0Mjk5QTkxNkQ0ODg2MTAwRDRDMDQ1IC8qIFpYRGVmYXVsdFBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0Mjk5QjExNkQ0QTM2NzAwRDRDMDQ1IC8qIFpYRWRpZmFjdEVuY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1Mzg5QjgxMTgwMEUzNUIwMDc3MjM5MiAvKiBaWFBERjQxN1NjYW5uaW5nRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0Mjk5QjkxNkQ0QTVBQTAwRDRDMDQ1IC8qIFpYRW5jb2RlckNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDI5OUMxMTZENUI4RTUwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDI5OUM5MTZENUJENTQwMEQ0QzA0NSAvKiBaWEhpZ2hMZXZlbEVuY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDI5OUQxMTZENUM5NjEwMEQ0QzA0NSAvKiBaWFN5bWJvbEluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDI5OUQ5MTZENUQxMjAwMEQ0QzA0NSAvKiBaWFN5bWJvbFNoYXBlSGludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0Mjk5RTUxNkQ1RDgxQTAwRDRDMDQ1IC8qIFpYVGV4dEVuY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDI5OUVEMTZENUQ5NEIwMEQ0QzA0NSAvKiBaWFgxMkVuY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUI5REIxMTZGRkNERTAwMEVFRUU2MSAvKiBaWERhdGFNYXRyaXhFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTk4RjE2RDQ3QkMwMDBENEMwNDUgLyogWlhCYXNlMjU2RW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUzODlCNjAxN0ZGQzg0MzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTA0RDRDNjE2RjY5OEFBMDBERjg4ODIgLyogWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUwNEQ5Q0YxNkZGRDJFMjAwREY4ODgyIC8qIFpYQXp0ZWNDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTE5QUI2RTE3RkU2MEU3MDBBNzFDNDUgLyogWlhQREY0MTdCb3VuZGluZ0JveC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUwNEQ5REMxNkZGRDRDRDAwREY4ODgyIC8qIFpYQXp0ZWNFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMjU0MDQxNjQxNjZBQURBQzAwRTEzMzA0IC8qIEhlYWRlcnMgKi8gPSB7CisJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkyNTQwNDUyQjE2NkFCQUYwMDBFMTMzMDQgLyogWlhBenRlY0RlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTJDMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEF6dGVjRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTJEMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTJFMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEF6dGVjUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDUyRjE2NkFCQUYwMDBFMTMzMDQgLyogWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1MzAxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1MzExNjZBQkFGMDAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTMyMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDUzMzE2NkFCQUYwMDBFMTMzMDQgLyogWlhCaXpjYXJkUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDUzNDE2NkFCQUYwMDBFMTMzMDQgLyogWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1MzUxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTM2MTY2QUJBRjAwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1MzcxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDUzODE2NkFCQUYwMDBFMTMzMDQgLyogWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1MzkxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDUzQTE2NkFCQUYwMDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTNCMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEdlb1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1M0MxNjZBQkFGMDAwRTEzMzA0IC8qIFpYR2VvUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDUzRDE2NkFCQUYwMDBFMTMzMDQgLyogWlhJU0JOUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDUzRTE2NkFCQUYwMDBFMTMzMDQgLyogWlhJU0JOUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDUzRjE2NkFCQUYwMDBFMTMzMDQgLyogWlhQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTQwMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFBhcnNlZFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTQxMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFByb2R1Y3RQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTQyMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFByb2R1Y3RSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTQzMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NDQxNjZBQkFGMDAwRTEzMzA0IC8qIFpYU01TTU1TUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU0NTE2NkFCQUYwMDBFMTMzMDQgLyogWlhTTVNQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTQ2MTY2QUJBRjAwMEUxMzMwNCAvKiBaWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTQ3MTY2QUJBRjAwMEUxMzMwNCAvKiBaWFNNVFBSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTQ4MTY2QUJBRjAwMEUxMzMwNCAvKiBaWFRlbFBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NDkxNjZBQkFGMDAwRTEzMzA0IC8qIFpYVGVsUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU0QTE2NkFCQUYwMDBFMTMzMDQgLyogWlhUZXh0UGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU0QjE2NkFCQUYwMDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTRDMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFVSSVJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NEQxNjZBQkFGMDAwRTEzMzA0IC8qIFpYVVJMVE9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTRFMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFZDYXJkUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU0RjE2NkFCQUYwMDBFMTMzMDQgLyogWlhWRXZlbnRSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTUwMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFdpZmlQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTUxMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFdpZmlSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTUyMTY2QUJBRjAwMEUxMzMwNCAvKiBaWENhcHR1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTUzMTY2QUJBRjAwMEUxMzMwNCAvKiBaWENhcHR1cmVEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NTQxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQ2FwdHVyZVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTU1MTY2QUJBRjAwMEUxMzMwNCAvKiBaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTU2MTY2QUJBRjAwMEUxMzMwNCAvKiBaWEltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU1NzE2NkFCQUYwMDBFMTMzMDQgLyogWlhWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU1ODE2NkFCQUYwMDBFMTMzMDQgLyogWlhNYXRoVXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTU5MTY2QUJBRjAwMEUxMzMwNCAvKiBaWE1vbm9jaHJvbWVSZWN0YW5nbGVEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NUExNjZBQkFGMDAwRTEzMzA0IC8qIFpYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NUIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYR2VuZXJpY0dGLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU1QzE2NkFCQUYwMDBFMTMzMDQgLyogWlhHZW5lcmljR0ZQb2x5LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU1RDE2NkFCQUYwMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkRlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1MTlBQjVGMTdGRTVFNEYwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NUUxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25FbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU1RjE2NkFCQUYwMDBFMTMzMDQgLyogWlhCaXRBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NjAxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQml0TWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU2MTE2NkFCQUYwMDBFMTMzMDQgLyogWlhCaXRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTYyMTY2QUJBRjAwMEUxMzMwNCAvKiBaWENoYXJhY3RlclNldEVDSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NjMxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRGVjb2RlclJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NjQxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRGVmYXVsdEdyaWRTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU2NTE2NkFCQUYwMDBFMTMzMDQgLyogWlhEZXRlY3RvclJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NjYxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRUNJLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTM4OUI2NTE3RkZDODRGMDA3NzIzOTIgLyogWlhQREY0MTdEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTE5QUI2RjE3RkU2MEU3MDBBNzFDNDUgLyogWlhQREY0MTdCb3VuZGluZ0JveC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NjcxNjZBQkFGMDAwRTEzMzA0IC8qIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU2ODE2NkFCQUYwMDBFMTMzMDQgLyogWlhHcmlkU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NjkxNjZBQkFGMDAwRTEzMzA0IC8qIFpYSHlicmlkQmluYXJpemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU2QTE2NkFCQUYwMDBFMTMzMDQgLyogWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NkIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYU3RyaW5nVXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTZDMTY2QUJBRjAwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTZEMTY2QUJBRjAwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEYXRhQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTZFMTY2QUJBRjAwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTE5QUI3NzE3RkU2NDkwMDBBNzFDNDUgLyogWlhQREY0MTdDb2Rld29yZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NkYxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTcwMTY2QUJBRjAwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhWZXJzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU3MTE2NkFCQUYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTcyMTY2QUJBRjAwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTczMTY2QUJBRjAwMEUxMzMwNCAvKiBaWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU3NDE2NkFCQUYwMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTc1MTY2QUJBRjAwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUxOUFCM0QxN0ZEMUVFNDAwQTcxQzQ1IC8qIFpYUERGNDE3V3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU3NjE2NkFCQUYwMDBFMTMzMDQgLyogWlhNYXhpQ29kZVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NzcxNjZBQkFGMDAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1NzgxNjZBQkFGMDAwRTEzMzA0IC8qIFpYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU3OTE2NkFCQUYwMDBFMTMzMDQgLyogWlhRUkNvZGVNdWx0aVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1N0ExNjZBQkFGMDAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1N0IxNjZBQkFGMDAwRTEzMzA0IC8qIFpYR2VuZXJpY011bHRpcGxlQmFyY29kZVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1N0MxNjZBQkFGMDAwRTEzMzA0IC8qIFpYTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU3RDE2NkFCQUYwMDBFMTMzMDQgLyogWlhQREY0MTdEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1N0UxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQmFyY29kZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1N0YxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQmFyY29kZVJvdy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1ODAxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQ29tcGFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1ODExNjZBQkFGMDAwRTEzMzA0IC8qIFpYRGltZW5zaW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1ODIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUERGNDE3LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU4MzE2NkFCQUYwMDBFMTMzMDQgLyogWlhQREY0MTdFcnJvckNvcnJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTg0MTY2QUJBRjAwMEUxMzMwNCAvKiBaWFBERjQxN0hpZ2hMZXZlbEVuY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTg2MTY2QUJBRjAwMEUxMzMwNCAvKiBaWFBERjQxN1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1ODcxNjZBQkFGMDAwRTEzMzA0IC8qIFpYRGF0YU1hc2suaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTg4MTY2QUJBRjAwMEUxMzMwNCAvKiBaWEVycm9yQ29ycmVjdGlvbkxldmVsLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU4OTE2NkFCQUYwMDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1OEExNjZBQkFGMDAwRTEzMzA0IC8qIFpYTW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1OEIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU4QzE2NkFCQUYwMDBFMTMzMDQgLyogWlhRUkNvZGVEYXRhQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NThEMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NThFMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFFSQ29kZURlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NThGMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTkwMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEFsaWdubWVudFBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTkxMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEFsaWdubWVudFBhdHRlcm5GaW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTkyMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5GaW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTkzMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU5NDE2NkFCQUYwMDBFMTMzMDQgLyogWlhRUkNvZGVEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1OTUxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUVJDb2RlRmluZGVyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1OTYxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQmxvY2tQYWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU5NzE2NkFCQUYwMDBFMTMzMDQgLyogWlhCeXRlTWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU5ODE2NkFCQUYwMDBFMTMzMDQgLyogWlhFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU5OTE2NkFCQUYwMDBFMTMzMDQgLyogWlhNYXNrVXRpbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1OUExNjZBQkFGMDAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1OUIxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUVJDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTE5QUI1MDE3RkU1QzQ1MDBBNzFDNDUgLyogWlhQREY0MTdDb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NTlDMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFFSQ29kZVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1OUQxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUVJDb2RlV3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDU5RTE2NkFCQUYwMDBFMTMzMDQgLyogWlhCaW5hcml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1MTlBQjY3MTdGRTVGMkUwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1OUYxNjZBQkFGMDAwRTEzMzA0IC8qIFpYQmluYXJ5Qml0bWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDVBMDE2NkFCQUYwMDBFMTMzMDQgLyogWlhEZWNvZGVIaW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUxOUFCNTIxN0ZFNUM1NDAwQTcxQzQ1IC8qIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1Mzg5QjYxMTdGRkM4NDMwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1QTExNjZBQkFGMDAwRTEzMzA0IC8qIFpYRW5jb2RlSGludHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NUEyMTY2QUJBRjAwMEUxMzMwNCAvKiBaWEVycm9ycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1QTMxNjZBQkFGMDAwRTEzMzA0IC8qIFpYaW5nT2JqQy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1QTQxNjZBQkFGMDAwRTEzMzA0IC8qIFpYTHVtaW5hbmNlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDVBNTE2NkFCQUYwMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1QTYxNjZBQkFGMDAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NUE3MTY2QUJBRjAwMEUxMzMwNCAvKiBaWFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0MDQ1QTgxNjZBQkFGMDAwRTEzMzA0IC8qIFpYUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDVBOTE2NkFCQUYwMDBFMTMzMDQgLyogWlhSZXN1bHRNZXRhZGF0YVR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDA0NUFBMTY2QUJBRjAwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDVBQjE2NkFCQUYwMDBFMTMzMDQgLyogWlhSZXN1bHRQb2ludENhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQwNDVBQzE2NkFCQUYwMDBFMTMzMDQgLyogWlhXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1MUZDREVDMTZDQzhGNTMwMDBDMjdFNSAvKiBaWFJHQkx1bWluYW5jZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0Mjk5NkYxNkQzMzM0MTAwRDRDMDQ1IC8qIFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTk3NzE2RDQ2RkU5MDBENEMwNDUgLyogWlhEaW1lbnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1Mzg5QjZBMTdGRkM5ODEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUzODlCNzIxN0ZGQ0EyNzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTM4OUI4MjE4MDBFMzVCMDA3NzIzOTIgLyogWlhQREY0MTdTY2FubmluZ0RlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1MTlBQjM1MTdGRDFFQzAwMEE3MUM0NSAvKiBaWEF6dGVjV3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTM4OUI4QTE4MDEwQjlBMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUzODlCN0ExODAwREVDMzAwNzcyMzkyIC8qIFpYUERGNDE3Q29kZXdvcmREZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTk5QTE2RDQ4MkY5MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTlBMjE2RDQ4Nzk4MDBENEMwNDUgLyogWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0Mjk5QUExNkQ0ODg2MTAwRDRDMDQ1IC8qIFpYRGVmYXVsdFBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU0Mjk5QjIxNkQ0QTM2NzAwRDRDMDQ1IC8qIFpYRWRpZmFjdEVuY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDI5OUJBMTZENEE1QUEwMEQ0QzA0NSAvKiBaWEVuY29kZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTlDMjE2RDVCOEU1MDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTlDQTE2RDVCRDU0MDBENEMwNDUgLyogWlhIaWdoTGV2ZWxFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTlEMjE2RDVDOTYxMDBENEMwNDUgLyogWlhTeW1ib2xJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTlEQTE2RDVEMTIwMDBENEMwNDUgLyogWlhTeW1ib2xTaGFwZUhpbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDI5OUU2MTZENUQ4MUEwMEQ0QzA0NSAvKiBaWFRleHRFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTlFRTE2RDVEOTRCMDBENEMwNDUgLyogWlhYMTJFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVCOURCMjE2RkZDREUxMDBFRUVFNjEgLyogWlhEYXRhTWF0cml4RW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUwNEQ5RTIxNkZGRUI4MTAwREY4ODgyIC8qIFpYQXp0ZWNFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTk3RjE2RDQ3MEU2MDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTQyOTk4NzE2RDQ3OEEwMDBENEMwNDUgLyogWlhBU0NJSUVuY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NDI5OTkwMTZENDdCQzAwMEQ0QzA0NSAvKiBaWEJhc2UyNTZFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTA0RDRDODE2RjY5OEJFMDBERjg4ODIgLyogWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjUwNEQ5RDExNkZGRDNBMTAwREY4ODgyIC8qIFpYQXp0ZWNDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkwMjE4MTQzQUM2MDBBMDNBMjggLyogWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MDMxODE0M0FDNjAwQTAzQTI4IC8qIFpYQUkwMTMxMDNkZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkwNDE4MTQzQUM2MDBBMDNBMjggLyogWlhBSTAxMzIweERlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTA1MTgxNDNBQzYwMEEwM0EyOCAvKiBaWEFJMDEzOTJ4RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MDYxODE0M0FDNjAwQTAzQTI4IC8qIFpYQUkwMTM5M3hEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkwNzE4MTQzQUM2MDBBMDNBMjggLyogWlhBSTAxM3gweDF4RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MDgxODE0M0FDNjAwQTAzQTI4IC8qIFpYQUkwMTN4MHhEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkwOTE4MTQzQUM2MDBBMDNBMjggLyogWlhBSTAxQW5kT3RoZXJBSXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTBBMTgxNDNBQzYwMEEwM0EyOCAvKiBaWEFJMDFkZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkwQjE4MTQzQUM2MDBBMDNBMjggLyogWlhBSTAxd2VpZ2h0RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MEMxODE0M0FDNjAwQTAzQTI4IC8qIFpYQW55QUlEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkwRDE4MTQzQUM2MDBBMDNBMjggLyogWlhCbG9ja1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MEUxODE0M0FDNjAwQTAzQTI4IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MEYxODE0M0FDNjAwQTAzQTI4IC8qIFpYRGVjb2RlZENoYXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTEwMTgxNDNBQzYwMEEwM0EyOCAvKiBaWERlY29kZWRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MTExODE0M0FDNjAwQTAzQTI4IC8qIFpYRGVjb2RlZE51bWVyaWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTEyMTgxNDNBQzYwMEEwM0EyOCAvKiBaWERlY29kZWRPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTEzMTgxNDNBQzYwMEEwM0EyOCAvKiBaWEZpZWxkUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkxNDE4MTQzQUM2MDBBMDNBMjggLyogWlhHZW5lcmFsQXBwSWREZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkxNTE4MTQzQUM2MDBBMDNBMjggLyogWlhCaXRBcnJheUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTE2MTgxNDNBQzYwMEEwM0EyOCAvKiBaWEV4cGFuZGVkUGFpci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MTcxODE0M0FDNjAwQTAzQTI4IC8qIFpYRXhwYW5kZWRSb3cuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTE4MTgxNDNBQzYwMEEwM0EyOCAvKiBaWFJTU0V4cGFuZGVkUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkxOTE4MTQzQUM2MDBBMDNBMjggLyogWlhBYnN0cmFjdFJTU1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MUExODE0M0FDNjAwQTAzQTI4IC8qIFpYRGF0YUNoYXJhY3Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MUIxODE0M0FDNjAwQTAzQTI4IC8qIFpYUGFpci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MUMxODE0M0FDNjAwQTAzQTI4IC8qIFpYUlNTMTRSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTFEMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTFFMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFJTU1V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkxRjE4MTQzQUM2MDBBMDNBMjggLyogWlhDb2RhQmFyUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkyMDE4MTQzQUM2MDBBMDNBMjggLyogWlhDb2RhQmFyV3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkyMTE4MTQzQUM2MDBBMDNBMjggLyogWlhDb2RlMTI4UmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkyMjE4MTQzQUM2MDBBMDNBMjggLyogWlhDb2RlMTI4V3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkyMzE4MTQzQUM2MDBBMDNBMjggLyogWlhDb2RlMzlSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTI0MTgxNDNBQzYwMEEwM0EyOCAvKiBaWENvZGUzOVdyaXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MjUxODE0M0FDNjAwQTAzQTI4IC8qIFpYQ29kZTkzUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkyNjE4MTQzQUM2MDBBMDNBMjggLyogWlhFQU4xM1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MjcxODE0M0FDNjAwQTAzQTI4IC8qIFpYRUFOMTNXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTI4MTgxNDNBQzYwMEEwM0EyOCAvKiBaWEVBTjhSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTI5MTgxNDNBQzYwMEEwM0EyOCAvKiBaWEVBTjhXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTJBMTgxNDNBQzYwMEEwM0EyOCAvKiBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTJCMTgxNDNBQzYwMEEwM0EyOCAvKiBaWElURlJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MkMxODE0M0FDNjAwQTAzQTI4IC8qIFpYSVRGV3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkyRDE4MTQzQUM2MDBBMDNBMjggLyogWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTJFMTgxNDNBQzYwMEEwM0EyOCAvKiBaWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkyRjE4MTQzQUM2MDBBMDNBMjggLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTMwMTgxNDNBQzYwMEEwM0EyOCAvKiBaWE9uZURSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTMxMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFVQQ0FSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTMyMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFVQQ0FXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTMzMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkzNDE4MTQzQUM2MDBBMDNBMjggLyogWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MzUxODE0M0FDNjAwQTAzQTI4IC8qIFpYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MzYxODE0M0FDNjAwQTAzQTI4IC8qIFpYVVBDRUFOUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkzNzE4MTQzQUM2MDBBMDNBMjggLyogWlhVUENFQU5Xcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTM4MTgxNDNBQzYwMEEwM0EyOCAvKiBaWFVQQ0VSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTM5MTgxNDNBQzYwMEEwM0EyOCAvKiBaWE1vZHVsdXNHRi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5M0ExODE0M0FDNjAwQTAzQTI4IC8qIFpYTW9kdWx1c1BvbHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTNCMTgxNDNBQzYwMEEwM0EyOCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDkzQzE4MTQzQUM2MDBBMDNBMjggLyogWlhCYXJjb2RlRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMjU0MDQzOUIxNjZBQkEwQTAwRTEzMzA0IC8qIEhlYWRlcnMgKi8gPSB7CisJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkyNTVFNDgyMTE4MTQzQTg4MDBBMDNBMjggLyogWlhBenRlY0RlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODIyMTgxNDNBODgwMEEwM0EyOCAvKiBaWEF6dGVjRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODIzMTgxNDNBODgwMEEwM0EyOCAvKiBaWEF6dGVjQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4MjQxODE0M0E4ODAwQTAzQTI4IC8qIFpYQXp0ZWNFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDgyNTE4MTQzQTg4MDBBMDNBMjggLyogWlhBenRlY0RldGVjdG9yUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDgyNjE4MTQzQTg4MDBBMDNBMjggLyogWlhBenRlY1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4MjcxODE0M0E4ODAwQTAzQTI4IC8qIFpYQXp0ZWNXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODI4MTgxNDNBODgwMEEwM0EyOCAvKiBaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDgyOTE4MTQzQTg4MDBBMDNBMjggLyogWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDgyQTE4MTQzQTg4MDBBMDNBMjggLyogWlhBZGRyZXNzQm9va0RvQ29Nb1Jlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4MkIxODE0M0E4ODAwQTAzQTI4IC8qIFpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODJDMTgxNDNBODgwMEEwM0EyOCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODJEMTgxNDNBODgwMEEwM0EyOCAvKiBaWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDgyRTE4MTQzQTg4MDBBMDNBMjggLyogWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4MkYxODE0M0E4ODAwQTAzQTI4IC8qIFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDgzMDE4MTQzQTg4MDBBMDNBMjggLyogWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODMxMTgxNDNBODgwMEEwM0EyOCAvKiBaWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDgzMjE4MTQzQTg4MDBBMDNBMjggLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODMzMTgxNDNBODgwMEEwM0EyOCAvKiBaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4MzQxODE0M0E4ODAwQTAzQTI4IC8qIFpYR2VvUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDgzNTE4MTQzQTg4MDBBMDNBMjggLyogWlhHZW9SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODM2MTgxNDNBODgwMEEwM0EyOCAvKiBaWElTQk5QYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODM3MTgxNDNBODgwMEEwM0EyOCAvKiBaWElTQk5SZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODM4MTgxNDNBODgwMEEwM0EyOCAvKiBaWFBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4MzkxODE0M0E4ODAwQTAzQTI4IC8qIFpYUGFyc2VkUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4M0ExODE0M0E4ODAwQTAzQTI4IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4M0IxODE0M0E4ODAwQTAzQTI4IC8qIFpYUHJvZHVjdFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4M0MxODE0M0E4ODAwQTAzQTI4IC8qIFpYUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDgzRDE4MTQzQTg4MDBBMDNBMjggLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODNFMTgxNDNBODgwMEEwM0EyOCAvKiBaWFNNU1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4M0YxODE0M0E4ODAwQTAzQTI4IC8qIFpYU01TVE9NTVNUT1Jlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NDAxODE0M0E4ODAwQTAzQTI4IC8qIFpYU01UUFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NDExODE0M0E4ODAwQTAzQTI4IC8qIFpYVGVsUGFyc2VkUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg0MjE4MTQzQTg4MDBBMDNBMjggLyogWlhUZWxSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODQzMTgxNDNBODgwMEEwM0EyOCAvKiBaWFRleHRQYXJzZWRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODQ0MTgxNDNBODgwMEEwM0EyOCAvKiBaWFVSSVBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NDUxODE0M0E4ODAwQTAzQTI4IC8qIFpYVVJJUmVzdWx0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg0NjE4MTQzQTg4MDBBMDNBMjggLyogWlhVUkxUT1Jlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NDcxODE0M0E4ODAwQTAzQTI4IC8qIFpYVkNhcmRSZXN1bHRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODQ4MTgxNDNBODgwMEEwM0EyOCAvKiBaWFZFdmVudFJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NDkxODE0M0E4ODAwQTAzQTI4IC8qIFpYV2lmaVBhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NEExODE0M0E4ODAwQTAzQTI4IC8qIFpYV2lmaVJlc3VsdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NEIxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ2FwdHVyZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NEMxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ2FwdHVyZURlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg0RDE4MTQzQTg4MDBBMDNBMjggLyogWlhDYXB0dXJlVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NEUxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NEYxODE0M0E4ODAwQTAzQTI4IC8qIFpYSW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODUwMTgxNDNBODgwMEEwM0EyOCAvKiBaWFZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODUxMTgxNDNBODgwMEEwM0EyOCAvKiBaWE1hdGhVdGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NTIxODE0M0E4ODAwQTAzQTI4IC8qIFpYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg1MzE4MTQzQTg4MDBBMDNBMjggLyogWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg1NDE4MTQzQTg4MDBBMDNBMjggLyogWlhHZW5lcmljR0YuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODU1MTgxNDNBODgwMEEwM0EyOCAvKiBaWEdlbmVyaWNHRlBvbHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODU2MTgxNDNBODgwMEEwM0EyOCAvKiBaWFJlZWRTb2xvbW9uRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NTcxODE0M0E4ODAwQTAzQTI4IC8qIFpYUmVlZFNvbG9tb25FbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg1ODE4MTQzQTg4MDBBMDNBMjggLyogWlhCaXRBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NTkxODE0M0E4ODAwQTAzQTI4IC8qIFpYQml0TWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg1QTE4MTQzQTg4MDBBMDNBMjggLyogWlhCaXRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODVCMTgxNDNBODgwMEEwM0EyOCAvKiBaWENoYXJhY3RlclNldEVDSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NUMxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGVjb2RlclJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NUQxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGVmYXVsdEdyaWRTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg1RTE4MTQzQTg4MDBBMDNBMjggLyogWlhEZXRlY3RvclJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NUYxODE0M0E4ODAwQTAzQTI4IC8qIFpYRUNJLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg2MDE4MTQzQTg4MDBBMDNBMjggLyogWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODYxMTgxNDNBODgwMEEwM0EyOCAvKiBaWEdyaWRTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg2MjE4MTQzQTg4MDBBMDNBMjggLyogWlhIeWJyaWRCaW5hcml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODYzMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg2NDE4MTQzQTg4MDBBMDNBMjggLyogWlhTdHJpbmdVdGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NjUxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGF0YU1hdHJpeEJpdE1hdHJpeFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NjYxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGF0YU1hdHJpeERhdGFCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NjcxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODY4MTgxNDNBODgwMEEwM0EyOCAvKiBaWERhdGFNYXRyaXhEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg2OTE4MTQzQTg4MDBBMDNBMjggLyogWlhEYXRhTWF0cml4VmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NkExODE0M0E4ODAwQTAzQTI4IC8qIFpYRGF0YU1hdHJpeERldGVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg2QjE4MTQzQTg4MDBBMDNBMjggLyogWlhBU0NJSUVuY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODZDMTgxNDNBODgwMEEwM0EyOCAvKiBaWEJhc2UyNTZFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg2RDE4MTQzQTg4MDBBMDNBMjggLyogWlhDNDBFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg2RTE4MTQzQTg4MDBBMDNBMjggLyogWlhEYXRhTWF0cml4RW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NkYxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NzAxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGF0YU1hdHJpeFN5bWJvbEluZm8xNDQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODcxMTgxNDNBODgwMEEwM0EyOCAvKiBaWERlZmF1bHRQbGFjZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODcyMTgxNDNBODgwMEEwM0EyOCAvKiBaWEVkaWZhY3RFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg3MzE4MTQzQTg4MDBBMDNBMjggLyogWlhFbmNvZGVyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NzQxODE0M0E4ODAwQTAzQTI4IC8qIFpYSGlnaExldmVsRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NzUxODE0M0E4ODAwQTAzQTI4IC8qIFpYU3ltYm9sSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NzYxODE0M0E4ODAwQTAzQTI4IC8qIFpYU3ltYm9sU2hhcGVIaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg3NzE4MTQzQTg4MDBBMDNBMjggLyogWlhUZXh0RW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NzgxODE0M0E4ODAwQTAzQTI4IC8qIFpYWDEyRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4NzkxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGF0YU1hdHJpeFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4N0ExODE0M0E4ODAwQTAzQTI4IC8qIFpYRGF0YU1hdHJpeFdyaXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4N0IxODE0M0E4ODAwQTAzQTI4IC8qIFpYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODdDMTgxNDNBODgwMEEwM0EyOCAvKiBaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4N0QxODE0M0E4ODAwQTAzQTI4IC8qIFpYTWF4aUNvZGVEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg3RTE4MTQzQTg4MDBBMDNBMjggLyogWlhNYXhpQ29kZVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4N0YxODE0M0E4ODAwQTAzQTI4IC8qIFpYTXVsdGlEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4ODAxODE0M0E4ODAwQTAzQTI4IC8qIFpYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg4MTE4MTQzQTg4MDBBMDNBMjggLyogWlhRUkNvZGVNdWx0aVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4ODIxODE0M0E4ODAwQTAzQTI4IC8qIFpYQnlRdWFkcmFudFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4ODMxODE0M0E4ODAwQTAzQTI4IC8qIFpYR2VuZXJpY011bHRpcGxlQmFyY29kZVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4ODQxODE0M0E4ODAwQTAzQTI4IC8qIFpYTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg4NTE4MTQzQTg4MDBBMDNBMjggLyogWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4ODYxODE0M0E4ODAwQTAzQTI4IC8qIFpYQUkwMTMxMDNkZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg4NzE4MTQzQTg4MDBBMDNBMjggLyogWlhBSTAxMzIweERlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODg4MTgxNDNBODgwMEEwM0EyOCAvKiBaWEFJMDEzOTJ4RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4ODkxODE0M0E4ODAwQTAzQTI4IC8qIFpYQUkwMTM5M3hEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg4QTE4MTQzQTg4MDBBMDNBMjggLyogWlhBSTAxM3gweDF4RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4OEIxODE0M0E4ODAwQTAzQTI4IC8qIFpYQUkwMTN4MHhEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg4QzE4MTQzQTg4MDBBMDNBMjggLyogWlhBSTAxQW5kT3RoZXJBSXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODhEMTgxNDNBODgwMEEwM0EyOCAvKiBaWEFJMDFkZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg4RTE4MTQzQTg4MDBBMDNBMjggLyogWlhBSTAxd2VpZ2h0RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4OEYxODE0M0E4ODAwQTAzQTI4IC8qIFpYQW55QUlEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg5MDE4MTQzQTg4MDBBMDNBMjggLyogWlhCbG9ja1BhcnNlZFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4OTExODE0M0E4ODAwQTAzQTI4IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4OTIxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGVjb2RlZENoYXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODkzMTgxNDNBODgwMEEwM0EyOCAvKiBaWERlY29kZWRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4OTQxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGVjb2RlZE51bWVyaWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODk1MTgxNDNBODgwMEEwM0EyOCAvKiBaWERlY29kZWRPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODk2MTgxNDNBODgwMEEwM0EyOCAvKiBaWEZpZWxkUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg5NzE4MTQzQTg4MDBBMDNBMjggLyogWlhHZW5lcmFsQXBwSWREZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg5ODE4MTQzQTg4MDBBMDNBMjggLyogWlhCaXRBcnJheUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODk5MTgxNDNBODgwMEEwM0EyOCAvKiBaWEV4cGFuZGVkUGFpci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4OUExODE0M0E4ODAwQTAzQTI4IC8qIFpYRXhwYW5kZWRSb3cuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0ODlCMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJTU0V4cGFuZGVkUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDg5QzE4MTQzQTg4MDBBMDNBMjggLyogWlhBYnN0cmFjdFJTU1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4OUQxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGF0YUNoYXJhY3Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4OUUxODE0M0E4ODAwQTAzQTI4IC8qIFpYUGFpci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4OUYxODE0M0E4ODAwQTAzQTI4IC8qIFpYUlNTMTRSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEEwMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEExMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJTU1V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhBMjE4MTQzQTg4MDBBMDNBMjggLyogWlhDb2RhQmFyUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhBMzE4MTQzQTg4MDBBMDNBMjggLyogWlhDb2RhQmFyV3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhBNDE4MTQzQTg4MDBBMDNBMjggLyogWlhDb2RlMTI4UmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhBNTE4MTQzQTg4MDBBMDNBMjggLyogWlhDb2RlMTI4V3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhBNjE4MTQzQTg4MDBBMDNBMjggLyogWlhDb2RlMzlSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEE3MTgxNDNBODgwMEEwM0EyOCAvKiBaWENvZGUzOVdyaXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4QTgxODE0M0E4ODAwQTAzQTI4IC8qIFpYQ29kZTkzUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhBOTE4MTQzQTg4MDBBMDNBMjggLyogWlhFQU4xM1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4QUExODE0M0E4ODAwQTAzQTI4IC8qIFpYRUFOMTNXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEFCMTgxNDNBODgwMEEwM0EyOCAvKiBaWEVBTjhSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEFDMTgxNDNBODgwMEEwM0EyOCAvKiBaWEVBTjhXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEFEMTgxNDNBODgwMEEwM0EyOCAvKiBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEFFMTgxNDNBODgwMEEwM0EyOCAvKiBaWElURlJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4QUYxODE0M0E4ODAwQTAzQTI4IC8qIFpYSVRGV3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhCMDE4MTQzQTg4MDBBMDNBMjggLyogWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEIxMTgxNDNBODgwMEEwM0EyOCAvKiBaWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhCMjE4MTQzQTg4MDBBMDNBMjggLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEIzMTgxNDNBODgwMEEwM0EyOCAvKiBaWE9uZURSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEI0MTgxNDNBODgwMEEwM0EyOCAvKiBaWFVQQ0FSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEI1MTgxNDNBODgwMEEwM0EyOCAvKiBaWFVQQ0FXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEI2MTgxNDNBODgwMEEwM0EyOCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhCNzE4MTQzQTg4MDBBMDNBMjggLyogWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4QjgxODE0M0E4ODAwQTAzQTI4IC8qIFpYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4QjkxODE0M0E4ODAwQTAzQTI4IC8qIFpYVVBDRUFOUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhCQTE4MTQzQTg4MDBBMDNBMjggLyogWlhVUENFQU5Xcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEJCMTgxNDNBODgwMEEwM0EyOCAvKiBaWFVQQ0VSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEJDMTgxNDNBODgwMEEwM0EyOCAvKiBaWE1vZHVsdXNHRi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4QkQxODE0M0E4ODAwQTAzQTI4IC8qIFpYTW9kdWx1c1BvbHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEJFMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhDMDE4MTQzQTg4MDBBMDNBMjggLyogWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEMxMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0JhcmNvZGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4QzIxODE0M0E4ODAwQTAzQTI4IC8qIFpYUERGNDE3Qm91bmRpbmdCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEMzMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0NvZGV3b3JkLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhDNDE4MTQzQTg4MDBBMDNBMjggLyogWlhQREY0MTdDb2Rld29yZERlY29kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEM1MTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEM2MTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4QzcxODE0M0E4ODAwQTAzQTI4IC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhDODE4MTQzQTg4MDBBMDNBMjggLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEM5MTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN1NjYW5uaW5nRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4Q0ExODE0M0E4ODAwQTAzQTI4IC8qIFpYUERGNDE3RGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OENCMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0RldGVjdG9yUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhDQzE4MTQzQTg4MDBBMDNBMjggLyogWlhCYXJjb2RlTWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhDRDE4MTQzQTg4MDBBMDNBMjggLyogWlhCYXJjb2RlUm93LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhDRTE4MTQzQTg4MDBBMDNBMjggLyogWlhDb21wYWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhDRjE4MTQzQTg4MDBBMDNBMjggLyogWlhEaW1lbnNpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhEMDE4MTQzQTg4MDBBMDNBMjggLyogWlhQREY0MTcuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEQxMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RDIxODE0M0E4ODAwQTAzQTI4IC8qIFpYUERGNDE3SGlnaExldmVsRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RDMxODE0M0E4ODAwQTAzQTI4IC8qIFpYUERGNDE3Q29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhENDE4MTQzQTg4MDBBMDNBMjggLyogWlhQREY0MTdSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEQ1MTgxNDNBODgwMEEwM0EyOCAvKiBaWFBERjQxN1Jlc3VsdE1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhENjE4MTQzQTg4MDBBMDNBMjggLyogWlhQREY0MTdXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEQ3MTgxNDNBODgwMEEwM0EyOCAvKiBaWERhdGFNYXNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhEODE4MTQzQTg4MDBBMDNBMjggLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RDkxODE0M0E4ODAwQTAzQTI4IC8qIFpYRm9ybWF0SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OERBMTgxNDNBODgwMEEwM0EyOCAvKiBaWE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OERCMTgxNDNBODgwMEEwM0EyOCAvKiBaWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4REMxODE0M0E4ODAwQTAzQTI4IC8qIFpYUVJDb2RlRGF0YUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhERDE4MTQzQTg4MDBBMDNBMjggLyogWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhERTE4MTQzQTg4MDBBMDNBMjggLyogWlhRUkNvZGVEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhERjE4MTQzQTg4MDBBMDNBMjggLyogWlhRUkNvZGVWZXJzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhFMDE4MTQzQTg4MDBBMDNBMjggLyogWlhBbGlnbm1lbnRQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhFMTE4MTQzQTg4MDBBMDNBMjggLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhFMjE4MTQzQTg4MDBBMDNBMjggLyogWlhGaW5kZXJQYXR0ZXJuRmluZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhFMzE4MTQzQTg4MDBBMDNBMjggLyogWlhGaW5kZXJQYXR0ZXJuSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RTQxODE0M0E4ODAwQTAzQTI4IC8qIFpYUVJDb2RlRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEU1MTgxNDNBODgwMEEwM0EyOCAvKiBaWFFSQ29kZUZpbmRlclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEU2MTgxNDNBODgwMEEwM0EyOCAvKiBaWEJsb2NrUGFpci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RTcxODE0M0E4ODAwQTAzQTI4IC8qIFpYQnl0ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RTgxODE0M0E4ODAwQTAzQTI4IC8qIFpYRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RTkxODE0M0E4ODAwQTAzQTI4IC8qIFpYTWFza1V0aWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEVBMTgxNDNBODgwMEEwM0EyOCAvKiBaWE1hdHJpeFV0aWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEVCMTgxNDNBODgwMEEwM0EyOCAvKiBaWFFSQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RUMxODE0M0E4ODAwQTAzQTI4IC8qIFpYUVJDb2RlUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhFRDE4MTQzQTg4MDBBMDNBMjggLyogWlhRUkNvZGVXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEVFMTgxNDNBODgwMEEwM0EyOCAvKiBaWEJhcmNvZGVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEVGMTgxNDNBODgwMEEwM0EyOCAvKiBaWEJpbmFyaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RjAxODE0M0E4ODAwQTAzQTI4IC8qIFpYQmluYXJ5Qml0bWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhGMTE4MTQzQTg4MDBBMDNBMjggLyogWlhEZWNvZGVIaW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RjIxODE0M0E4ODAwQTAzQTI4IC8qIFpYRGltZW5zaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhGMzE4MTQzQTg4MDBBMDNBMjggLyogWlhFbmNvZGVIaW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RjQxODE0M0E4ODAwQTAzQTI4IC8qIFpYRXJyb3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhGNTE4MTQzQTg4MDBBMDNBMjggLyogWlhpbmdPYmpDLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhGNjE4MTQzQTg4MDBBMDNBMjggLyogWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RjcxODE0M0E4ODAwQTAzQTI4IC8qIFpYTHVtaW5hbmNlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhGODE4MTQzQTg4MDBBMDNBMjggLyogWlhNdWx0aUZvcm1hdFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RjkxODE0M0E4ODAwQTAzQTI4IC8qIFpYTXVsdGlGb3JtYXRXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEZBMTgxNDNBODgwMEEwM0EyOCAvKiBaWFBsYW5hcllVVkx1bWluYW5jZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RkIxODE0M0E4ODAwQTAzQTI4IC8qIFpYUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNTVFNDhGQzE4MTQzQTg4MDBBMDNBMjggLyogWlhSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEZEMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJlc3VsdE1ldGFkYXRhVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ4RkUxODE0M0E4ODAwQTAzQTI4IC8qIFpYUmVzdWx0UG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OEZGMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJlc3VsdFBvaW50Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTI1NUU0OTAwMTgxNDNBODgwMEEwM0EyOCAvKiBaWFJHQkx1bWluYW5jZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjU1RTQ5MDExODE0M0E4ODAwQTAzQTI4IC8qIFpYV3JpdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisJCTAyNDk1N0VGMTg5ODY0MUIwMDNENEU2QSAvKiBCbGFja2JveCBUZXN0cyBpT1MgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMDI0OTU4NzQxODk4NjQxQjAwM0Q0RTZBIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJCbGFja2JveCBUZXN0cyBpT1MiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMDI0OTU3RjIxODk4NjQxQjAwM0Q0RTZBIC8qIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4NjgxODk4NjQxQjAwM0Q0RTZBIC8qIEZyYW1ld29ya3MgKi8sCisJCQkJMDI0OTU4NzExODk4NjQxQjAwM0Q0RTZBIC8qIFJlc291cmNlcyAqLywKKwkJCQkwMjQ5NTg3MzE4OTg2NDFCMDAzRDRFNkEgLyogU2hlbGxTY3JpcHQgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMDI0OTU3RjAxODk4NjQxQjAwM0Q0RTZBIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkpOworCQkJbmFtZSA9ICJCbGFja2JveCBUZXN0cyBpT1MiOworCQkJcHJvZHVjdE5hbWUgPSBaWGluZ09iakNUZXN0czsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwMjQ5NTg3ODE4OTg2NDFCMDAzRDRFNkEgLyogWlhpbmdPYmpDVGVzdHMtaU9TIGNvcHkub2N0ZXN0ICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5idW5kbGUub2N1bml0LXRlc3QiOworCQl9OworCQkwMkQ4MTM2RjE4OTg2NEM3MDA4MTcyMUQgLyogQmxhY2tib3ggVGVzdHMgT1MgWCAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwMkQ4MTNGMjE4OTg2NEM3MDA4MTcyMUQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkJsYWNrYm94IFRlc3RzIE9TIFgiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMDJEODEzNzIxODk4NjRDNzAwODE3MjFEIC8qIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzRTgxODk4NjRDNzAwODE3MjFEIC8qIEZyYW1ld29ya3MgKi8sCisJCQkJMDJEODEzRUYxODk4NjRDNzAwODE3MjFEIC8qIFJlc291cmNlcyAqLywKKwkJCQkwMkQ4MTNGMTE4OTg2NEM3MDA4MTcyMUQgLyogU2hlbGxTY3JpcHQgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMDJEODEzNzAxODk4NjRDNzAwODE3MjFEIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkpOworCQkJbmFtZSA9ICJCbGFja2JveCBUZXN0cyBPUyBYIjsKKwkJCXByb2R1Y3ROYW1lID0gWlhpbmdPYmpDVGVzdHM7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMDJEODEzRjYxODk4NjRDNzAwODE3MjFEIC8qIFpYaW5nT2JqQ1Rlc3RzLW9zeCBjb3B5Lm9jdGVzdCAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUuYnVuZGxlLm9jdW5pdC10ZXN0IjsKKwkJfTsKKwkJMjU0MDNDQjIxNjZBOTZGQTAwRTEzMzA0IC8qIFpYaW5nT2JqQy1pT1MgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMjU0MDNDRDgxNjZBOTZGQTAwRTEzMzA0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJaWGluZ09iakMtaU9TIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTI1NDAzQ0FGMTY2QTk2RkEwMEUxMzMwNCAvKiBTb3VyY2VzICovLAorCQkJCTI1NDAzQ0IwMTY2QTk2RkEwMEUxMzMwNCAvKiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDAzQ0UyMTY2QTk4QjYwMEUxMzMwNCAvKiBIZWFkZXJzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSAiWlhpbmdPYmpDLWlPUyI7CisJCQlwcm9kdWN0TmFtZSA9IFpYaW5nT2JqQzsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAyNTQwM0NCMzE2NkE5NkZBMDBFMTMzMDQgLyogbGliWlhpbmdPYmpDLWlPUy5hICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CisJCX07CisJCTI1NDAzQ0MzMTY2QTk2RkEwMEUxMzMwNCAvKiBVbml0IFRlc3RzIGlPUyAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAyNTQwM0NEQjE2NkE5NkZBMDBFMTMzMDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIlVuaXQgVGVzdHMgaU9TIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTI1NDAzQ0JGMTY2QTk2RkEwMEUxMzMwNCAvKiBTb3VyY2VzICovLAorCQkJCTI1NDAzQ0MwMTY2QTk2RkEwMEUxMzMwNCAvKiBGcmFtZXdvcmtzICovLAorCQkJCTI1NDAzQ0MxMTY2QTk2RkEwMEUxMzMwNCAvKiBSZXNvdXJjZXMgKi8sCisJCQkJMjU0MDNDQzIxNjZBOTZGQTAwRTEzMzA0IC8qIFNoZWxsU2NyaXB0ICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTI1NDAzQ0NCMTY2QTk2RkEwMEUxMzMwNCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAorCQkJKTsKKwkJCW5hbWUgPSAiVW5pdCBUZXN0cyBpT1MiOworCQkJcHJvZHVjdE5hbWUgPSBaWGluZ09iakNUZXN0czsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAyNTQwM0NDNDE2NkE5NkZBMDBFMTMzMDQgLyogVW5pdCBUZXN0cyBpT1Mub2N0ZXN0ICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5idW5kbGUub2N1bml0LXRlc3QiOworCQl9OworCQkyNTQwNDE2NTE2NkFBREFDMDBFMTMzMDQgLyogWlhpbmdPYmpDLW9zeCAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAyNTQwNDE4NzE2NkFBREFEMDBFMTMzMDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIlpYaW5nT2JqQy1vc3giICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMjU0MDQxNjIxNjZBQURBQzAwRTEzMzA0IC8qIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxNjMxNjZBQURBQzAwRTEzMzA0IC8qIEZyYW1ld29ya3MgKi8sCisJCQkJMjU0MDQxNjQxNjZBQURBQzAwRTEzMzA0IC8qIEhlYWRlcnMgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9ICJaWGluZ09iakMtb3N4IjsKKwkJCXByb2R1Y3ROYW1lID0gWlhpbmdPYmpDOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDI1NDA0MTY2MTY2QUFEQUMwMEUxMzMwNCAvKiBsaWJaWGluZ09iakMtb3N4LmEgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKKwkJfTsKKwkJMjU0MDQxNzcxNjZBQURBQzAwRTEzMzA0IC8qIFVuaXQgVGVzdHMgT1MgWCAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAyNTQwNDE4QTE2NkFBREFEMDBFMTMzMDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIlVuaXQgVGVzdHMgT1MgWCIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQkyNTQwNDE3MzE2NkFBREFDMDBFMTMzMDQgLyogU291cmNlcyAqLywKKwkJCQkyNTQwNDE3NDE2NkFBREFDMDBFMTMzMDQgLyogRnJhbWV3b3JrcyAqLywKKwkJCQkyNTQwNDE3NTE2NkFBREFDMDBFMTMzMDQgLyogUmVzb3VyY2VzICovLAorCQkJCTI1NDA0MTc2MTY2QUFEQUMwMEUxMzMwNCAvKiBTaGVsbFNjcmlwdCAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQkyNTQwNDE3QzE2NkFBREFDMDBFMTMzMDQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKKwkJCSk7CisJCQluYW1lID0gIlVuaXQgVGVzdHMgT1MgWCI7CisJCQlwcm9kdWN0TmFtZSA9IFpYaW5nT2JqQ1Rlc3RzOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDI1NDA0MTc4MTY2QUFEQUMwMEUxMzMwNCAvKiBVbml0IFRlc3RzIE9TIFgub2N0ZXN0ICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5idW5kbGUub2N1bml0LXRlc3QiOworCQl9OworCQkyNTQwNDM5RDE2NkFCQTBBMDBFMTMzMDQgLyogT1MgWCBGcmFtZXdvcmsgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMjU0MDQzQjAxNjZBQkEwQTAwRTEzMzA0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJPUyBYIEZyYW1ld29yayIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQkyNTQwNDM5OTE2NkFCQTBBMDBFMTMzMDQgLyogU291cmNlcyAqLywKKwkJCQkyNTQwNDM5QTE2NkFCQTBBMDBFMTMzMDQgLyogRnJhbWV3b3JrcyAqLywKKwkJCQkyNTQwNDM5QjE2NkFCQTBBMDBFMTMzMDQgLyogSGVhZGVycyAqLywKKwkJCQkyNTQwNDM5QzE2NkFCQTBBMDBFMTMzMDQgLyogUmVzb3VyY2VzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSAiT1MgWCBGcmFtZXdvcmsiOworCQkJcHJvZHVjdE5hbWUgPSBaWGluZ09iakM7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMjU0MDQzOUUxNjZBQkEwQTAwRTEzMzA0IC8qIFpYaW5nT2JqQy5mcmFtZXdvcmsgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmZyYW1ld29yayI7CisJCX07CisvKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCisJCTI1NDAzQ0FBMTY2QTk2RjkwMEUxMzMwNCAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKKwkJCWlzYSA9IFBCWFByb2plY3Q7CisJCQlhdHRyaWJ1dGVzID0geworCQkJCUxhc3RUZXN0aW5nVXBncmFkZUNoZWNrID0gMDUxMDsKKwkJCQlMYXN0VXBncmFkZUNoZWNrID0gMDUxMDsKKwkJCQlPUkdBTklaQVRJT05OQU1FID0genhpbmc7CisJCQl9OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDI1NDAzQ0FEMTY2QTk2RjkwMEUxMzMwNCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIlpYaW5nT2JqQyIgKi87CisJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjIiOworCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOworCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7CisJCQlrbm93blJlZ2lvbnMgPSAoCisJCQkJZW4sCisJCQkpOworCQkJbWFpbkdyb3VwID0gMjU0MDNDQTgxNjZBOTZGOTAwRTEzMzA0OworCQkJcHJvZHVjdFJlZkdyb3VwID0gMjU0MDNDQjQxNjZBOTZGQTAwRTEzMzA0IC8qIFByb2R1Y3RzICovOworCQkJcHJvamVjdERpclBhdGggPSAiIjsKKwkJCXByb2plY3RSb290ID0gIiI7CisJCQl0YXJnZXRzID0gKAorCQkJCTI1NDAzQ0IyMTY2QTk2RkEwMEUxMzMwNCAvKiBaWGluZ09iakMtaU9TICovLAorCQkJCTI1NDAzQ0MzMTY2QTk2RkEwMEUxMzMwNCAvKiBVbml0IFRlc3RzIGlPUyAqLywKKwkJCQkwMjQ5NTdFRjE4OTg2NDFCMDAzRDRFNkEgLyogQmxhY2tib3ggVGVzdHMgaU9TICovLAorCQkJCTI1NDA0MTY1MTY2QUFEQUMwMEUxMzMwNCAvKiBaWGluZ09iakMtb3N4ICovLAorCQkJCTI1NDA0MTc3MTY2QUFEQUMwMEUxMzMwNCAvKiBVbml0IFRlc3RzIE9TIFggKi8sCisJCQkJMDJEODEzNkYxODk4NjRDNzAwODE3MjFEIC8qIEJsYWNrYm94IFRlc3RzIE9TIFggKi8sCisJCQkJMjU0MDQzOUQxNjZBQkEwQTAwRTEzMzA0IC8qIE9TIFggRnJhbWV3b3JrICovLAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTAyNDk1ODcxMTg5ODY0MUIwMDNENEU2QSAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTAyNDk1ODcyMTg5ODY0MUIwMDNENEU2QSAvKiBSZXNvdXJjZXMgaW4gUmVzb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQkwMkQ4MTNFRjE4OTg2NEM3MDA4MTcyMUQgLyogUmVzb3VyY2VzICovID0geworCQkJaXNhID0gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwMkQ4MTNGMDE4OTg2NEM3MDA4MTcyMUQgLyogUmVzb3VyY2VzIGluIFJlc291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMjU0MDNDQzExNjZBOTZGQTAwRTEzMzA0IC8qIFJlc291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFJlc291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMjVGRTVENDUxNkQxOTk3QzAwODI2Q0RCIC8qIFJlc291cmNlcyBpbiBSZXNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCTI1NDA0MTc1MTY2QUFEQUMwMEUxMzMwNCAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTAyQjQ4ODRBMTdGNUYxMDAwMEU2Mjg1RCAvKiBSZXNvdXJjZXMgaW4gUmVzb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQkyNTQwNDM5QzE2NkFCQTBBMDBFMTMzMDQgLyogUmVzb3VyY2VzICovID0geworCQkJaXNhID0gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMDI0OTU4NzMxODk4NjQxQjAwM0Q0RTZBIC8qIFNoZWxsU2NyaXB0ICovID0geworCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkpOworCQkJb3V0cHV0UGF0aHMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCQlzaGVsbFBhdGggPSAvYmluL3NoOworCQkJc2hlbGxTY3JpcHQgPSAiIyBSdW4gdGhlIHVuaXQgdGVzdHMgaW4gdGhpcyB0ZXN0IGJ1bmRsZS5cblwiJHtTWVNURU1fREVWRUxPUEVSX0RJUn0vVG9vbHMvUnVuVW5pdFRlc3RzXCJcbiI7CisJCX07CisJCTAyRDgxM0YxMTg5ODY0QzcwMDgxNzIxRCAvKiBTaGVsbFNjcmlwdCAqLyA9IHsKKwkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlpbnB1dFBhdGhzID0gKAorCQkJKTsKKwkJCW91dHB1dFBhdGhzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gIiMgUnVuIHRoZSB1bml0IHRlc3RzIGluIHRoaXMgdGVzdCBidW5kbGUuXG5cIiR7U1lTVEVNX0RFVkVMT1BFUl9ESVJ9L1Rvb2xzL1J1blVuaXRUZXN0c1wiXG4iOworCQl9OworCQkyNTQwM0NDMjE2NkE5NkZBMDBFMTMzMDQgLyogU2hlbGxTY3JpcHQgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJaW5wdXRQYXRocyA9ICgKKwkJCSk7CisJCQlvdXRwdXRQYXRocyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CisJCQlzaGVsbFNjcmlwdCA9ICIjIFJ1biB0aGUgdW5pdCB0ZXN0cyBpbiB0aGlzIHRlc3QgYnVuZGxlLlxuXCIke1NZU1RFTV9ERVZFTE9QRVJfRElSfS9Ub29scy9SdW5Vbml0VGVzdHNcIlxuIjsKKwkJfTsKKwkJMjU0MDQxNzYxNjZBQURBQzAwRTEzMzA0IC8qIFNoZWxsU2NyaXB0ICovID0geworCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkpOworCQkJb3V0cHV0UGF0aHMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCQlzaGVsbFBhdGggPSAvYmluL3NoOworCQkJc2hlbGxTY3JpcHQgPSAiIyBSdW4gdGhlIHVuaXQgdGVzdHMgaW4gdGhpcyB0ZXN0IGJ1bmRsZS5cblwiJHtTWVNURU1fREVWRUxPUEVSX0RJUn0vVG9vbHMvUnVuVW5pdFRlc3RzXCJcbiI7CisJCX07CisvKiBFbmQgUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwMjQ5NTdGMjE4OTg2NDFCMDAzRDRFNkEgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTAyNDk1N0YzMTg5ODY0MUIwMDNENEU2QSAvKiBBenRlY0JsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTdGNDE4OTg2NDFCMDAzRDRFNkEgLyogQXp0ZWNCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU3RkIxODk4NjQxQjAwM0Q0RTZBIC8qIFBERjQxN0JsYWNrQm94NFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgwMjE4OTg2NDFCMDAzRDRFNkEgLyogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgwMzE4OTg2NDFCMDAzRDRFNkEgLyogQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODA0MTg5ODY0MUIwMDNENEU2QSAvKiBUZXN0UmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgwQjE4OTg2NDFCMDAzRDRFNkEgLyogRGF0YU1hdHJpeEJsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgwQzE4OTg2NDFCMDAzRDRFNkEgLyogRGF0YU1hdHJpeEJsYWNrQm94MlRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgwRTE4OTg2NDFCMDAzRDRFNkEgLyogRmFsc2VQb3NpdGl2ZXMyQmxhY2tCb3hUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4MEYxODk4NjQxQjAwM0Q0RTZBIC8qIEZhbHNlUG9zaXRpdmVzQmxhY2tCb3hUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4MTAxODk4NjQxQjAwM0Q0RTZBIC8qIFBhcnRpYWxCbGFja0JveFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgxMTE4OTg2NDFCMDAzRDRFNkEgLyogVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgxMjE4OTg2NDFCMDAzRDRFNkEgLyogQ29kYWJhckJsYWNrYm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgxMzE4OTg2NDFCMDAzRDRFNkEgLyogUERGNDE3QmxhY2tCb3gzVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODE0MTg5ODY0MUIwMDNENEU2QSAvKiBDb2RlMTI4QmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODE1MTg5ODY0MUIwMDNENEU2QSAvKiBDb2RlMTI4QmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODE2MTg5ODY0MUIwMDNENEU2QSAvKiBDb2RlMTI4QmxhY2tCb3gzVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODE3MTg5ODY0MUIwMDNENEU2QSAvKiBDb2RlMzlCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4MTgxODk4NjQxQjAwM0Q0RTZBIC8qIENvZGUzOUJsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgxOTE4OTg2NDFCMDAzRDRFNkEgLyogQ29kZTM5RXh0ZW5kZWRCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4MUExODk4NjQxQjAwM0Q0RTZBIC8qIENvZGU5M0JsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgxQjE4OTg2NDFCMDAzRDRFNkEgLyogRUFOMTNCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4MUMxODk4NjQxQjAwM0Q0RTZBIC8qIEVBTjEzQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODFEMTg5ODY0MUIwMDNENEU2QSAvKiBFQU4xM0JsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgxRTE4OTg2NDFCMDAzRDRFNkEgLyogRUFOMTNCbGFja0JveDRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4MUYxODk4NjQxQjAwM0Q0RTZBIC8qIEVBTjEzQmxhY2tCb3g1Qmx1cnJ5VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODIwMTg5ODY0MUIwMDNENEU2QSAvKiBFQU44QmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODIxMTg5ODY0MUIwMDNENEU2QSAvKiBJVEZCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4MjIxODk4NjQxQjAwM0Q0RTZBIC8qIElURkJsYWNrQm94MlRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgyOTE4OTg2NDFCMDAzRDRFNkEgLyogUlNTRXhwYW5kZWRCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4MkExODk4NjQxQjAwM0Q0RTZBIC8qIFJTU0V4cGFuZGVkQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODJCMTg5ODY0MUIwMDNENEU2QSAvKiBSU1NFeHBhbmRlZEJsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgyQzE4OTg2NDFCMDAzRDRFNkEgLyogUlNTRXhwYW5kZWRJbWFnZTJiaW5hcnlUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4MkQxODk4NjQxQjAwM0Q0RTZBIC8qIFJTU0V4cGFuZGVkSW1hZ2UycmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODJFMTg5ODY0MUIwMDNENEU2QSAvKiBSU1NFeHBhbmRlZEltYWdlMnN0cmluZ1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgyRjE4OTg2NDFCMDAzRDRFNkEgLyogUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgzNDE4OTg2NDFCMDAzRDRFNkEgLyogUlNTMTRCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4MzUxODk4NjQxQjAwM0Q0RTZBIC8qIFJTUzE0QmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODM2MTg5ODY0MUIwMDNENEU2QSAvKiBVUENBQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODM3MTg5ODY0MUIwMDNENEU2QSAvKiBVUENBQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODM4MTg5ODY0MUIwMDNENEU2QSAvKiBVUENBQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgzOTE4OTg2NDFCMDAzRDRFNkEgLyogVVBDQUJsYWNrQm94NFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgzQTE4OTg2NDFCMDAzRDRFNkEgLyogVVBDQUJsYWNrQm94NVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgzQjE4OTg2NDFCMDAzRDRFNkEgLyogVVBDQUJsYWNrQm94NkJsdXJyeVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTgzQzE4OTg2NDFCMDAzRDRFNkEgLyogVVBDRUFORXh0ZW5zaW9uQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODNEMTg5ODY0MUIwMDNENEU2QSAvKiBVUENFQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODNFMTg5ODY0MUIwMDNENEU2QSAvKiBVUENFQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODNGMTg5ODY0MUIwMDNENEU2QSAvKiBVUENFQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTg0NTE4OTg2NDFCMDAzRDRFNkEgLyogQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4NDcxODk4NjQxQjAwM0Q0RTZBIC8qIFBERjQxN0JsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTg0ODE4OTg2NDFCMDAzRDRFNkEgLyogUERGNDE3QmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODU0MTg5ODY0MUIwMDNENEU2QSAvKiBRUkNvZGVCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4NTUxODk4NjQxQjAwM0Q0RTZBIC8qIFFSQ29kZUJsYWNrQm94MlRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTg1NjE4OTg2NDFCMDAzRDRFNkEgLyogUVJDb2RlQmxhY2tCb3gzVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODU4MTg5ODY0MUIwMDNENEU2QSAvKiBRUkNvZGVCbGFja0JveDRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4NTkxODk4NjQxQjAwM0Q0RTZBIC8qIFFSQ29kZUJsYWNrQm94NVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMjQ5NTg1QTE4OTg2NDFCMDAzRDRFNkEgLyogUVJDb2RlQmxhY2tCb3g2VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyNDk1ODVDMTg5ODY0MUIwMDNENEU2QSAvKiBSU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDI0OTU4NUQxODk4NjQxQjAwM0Q0RTZBIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MlRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMDJEODEzNzIxODk4NjRDNzAwODE3MjFEIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwMkQ4MTM3MzE4OTg2NEM3MDA4MTcyMUQgLyogUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzc0MTg5ODY0QzcwMDgxNzIxRCAvKiBSU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzNzUxODk4NjRDNzAwODE3MjFEIC8qIFJTU0V4cGFuZGVkU3RhY2tlZEludGVybmFsVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzc3MTg5ODY0QzcwMDgxNzIxRCAvKiBBenRlY0JsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTM3ODE4OTg2NEM3MDA4MTcyMUQgLyogQXp0ZWNCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzN0IxODk4NjRDNzAwODE3MjFEIC8qIFBERjQxN0JsYWNrQm94NFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTM4NjE4OTg2NEM3MDA4MTcyMUQgLyogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTM4NzE4OTg2NEM3MDA4MTcyMUQgLyogUERGNDE3QmxhY2tCb3gzVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzg4MTg5ODY0QzcwMDgxNzIxRCAvKiBBYnN0cmFjdE5lZ2F0aXZlQmxhY2tCb3hUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzODkxODk4NjRDNzAwODE3MjFEIC8qIFRlc3RSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzkwMTg5ODY0QzcwMDgxNzIxRCAvKiBEYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzkxMTg5ODY0QzcwMDgxNzIxRCAvKiBEYXRhTWF0cml4QmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzkzMTg5ODY0QzcwMDgxNzIxRCAvKiBGYWxzZVBvc2l0aXZlczJCbGFja0JveFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTM5NDE4OTg2NEM3MDA4MTcyMUQgLyogRmFsc2VQb3NpdGl2ZXNCbGFja0JveFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTM5NTE4OTg2NEM3MDA4MTcyMUQgLyogUGFydGlhbEJsYWNrQm94VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzk2MTg5ODY0QzcwMDgxNzIxRCAvKiBVbnN1cHBvcnRlZEJsYWNrQm94VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzk3MTg5ODY0QzcwMDgxNzIxRCAvKiBDb2RhYmFyQmxhY2tib3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzk4MTg5ODY0QzcwMDgxNzIxRCAvKiBDb2RlMTI4QmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzk5MTg5ODY0QzcwMDgxNzIxRCAvKiBDb2RlMTI4QmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzlBMTg5ODY0QzcwMDgxNzIxRCAvKiBDb2RlMTI4QmxhY2tCb3gzVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxMzlCMTg5ODY0QzcwMDgxNzIxRCAvKiBDb2RlMzlCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzOUMxODk4NjRDNzAwODE3MjFEIC8qIENvZGUzOUJsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTM5RDE4OTg2NEM3MDA4MTcyMUQgLyogQ29kZTM5RXh0ZW5kZWRCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzOUUxODk4NjRDNzAwODE3MjFEIC8qIENvZGU5M0JsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTM5RjE4OTg2NEM3MDA4MTcyMUQgLyogRUFOMTNCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzQTAxODk4NjRDNzAwODE3MjFEIC8qIEVBTjEzQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0ExMTg5ODY0QzcwMDgxNzIxRCAvKiBFQU4xM0JsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNBMjE4OTg2NEM3MDA4MTcyMUQgLyogRUFOMTNCbGFja0JveDRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzQTMxODk4NjRDNzAwODE3MjFEIC8qIEVBTjEzQmxhY2tCb3g1Qmx1cnJ5VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0E0MTg5ODY0QzcwMDgxNzIxRCAvKiBFQU44QmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0E1MTg5ODY0QzcwMDgxNzIxRCAvKiBJVEZCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzQTYxODk4NjRDNzAwODE3MjFEIC8qIElURkJsYWNrQm94MlRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNBRDE4OTg2NEM3MDA4MTcyMUQgLyogUlNTRXhwYW5kZWRCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzQUUxODk4NjRDNzAwODE3MjFEIC8qIFJTU0V4cGFuZGVkQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0FGMTg5ODY0QzcwMDgxNzIxRCAvKiBSU1NFeHBhbmRlZEJsYWNrQm94M1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNCMDE4OTg2NEM3MDA4MTcyMUQgLyogUlNTRXhwYW5kZWRJbWFnZTJiaW5hcnlUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzQjExODk4NjRDNzAwODE3MjFEIC8qIFJTU0V4cGFuZGVkSW1hZ2UycmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0IyMTg5ODY0QzcwMDgxNzIxRCAvKiBSU1NFeHBhbmRlZEltYWdlMnN0cmluZ1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNCMzE4OTg2NEM3MDA4MTcyMUQgLyogUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNCODE4OTg2NEM3MDA4MTcyMUQgLyogUlNTMTRCbGFja0JveDFUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzQjkxODk4NjRDNzAwODE3MjFEIC8qIFJTUzE0QmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0JBMTg5ODY0QzcwMDgxNzIxRCAvKiBVUENBQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0JCMTg5ODY0QzcwMDgxNzIxRCAvKiBVUENBQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0JDMTg5ODY0QzcwMDgxNzIxRCAvKiBVUENBQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNCRDE4OTg2NEM3MDA4MTcyMUQgLyogVVBDQUJsYWNrQm94NFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNCRTE4OTg2NEM3MDA4MTcyMUQgLyogVVBDQUJsYWNrQm94NVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNCRjE4OTg2NEM3MDA4MTcyMUQgLyogVVBDQUJsYWNrQm94NkJsdXJyeVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNDMDE4OTg2NEM3MDA4MTcyMUQgLyogVVBDRUFORXh0ZW5zaW9uQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0MxMTg5ODY0QzcwMDgxNzIxRCAvKiBVUENFQmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0MyMTg5ODY0QzcwMDgxNzIxRCAvKiBVUENFQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0MzMTg5ODY0QzcwMDgxNzIxRCAvKiBVUENFQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNDQjE4OTg2NEM3MDA4MTcyMUQgLyogUERGNDE3QmxhY2tCb3gxVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0NDMTg5ODY0QzcwMDgxNzIxRCAvKiBQREY0MTdCbGFja0JveDJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzRDgxODk4NjRDNzAwODE3MjFEIC8qIFFSQ29kZUJsYWNrQm94MVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNEOTE4OTg2NEM3MDA4MTcyMUQgLyogUVJDb2RlQmxhY2tCb3gyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0RBMTg5ODY0QzcwMDgxNzIxRCAvKiBRUkNvZGVCbGFja0JveDNUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMDJEODEzREMxODk4NjRDNzAwODE3MjFEIC8qIFFSQ29kZUJsYWNrQm94NFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkwMkQ4MTNERDE4OTg2NEM3MDA4MTcyMUQgLyogUVJDb2RlQmxhY2tCb3g1VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTAyRDgxM0RFMTg5ODY0QzcwMDgxNzIxRCAvKiBRUkNvZGVCbGFja0JveDZUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCTI1NDAzQ0FGMTY2QTk2RkEwMEUxMzMwNCAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMjU0MDNDRjgxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTE5QUIzNzE3RkQxRUMwMDBBNzFDNDUgLyogWlhBenRlY1dyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNDRkExNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNDRkMxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3RvclJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNDRkUxNjZBOTk5RDAwRTEzMzA0IC8qIFpYQXp0ZWNSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDUxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Q1MzE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Q1NTE2NkE5QTA4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0RvQ29Nb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNENTcxNjZBOUEwODAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDU5MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDVCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Q1RDE2NkE5QTA4MDBFMTMzMDQgLyogWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNENUYxNjZBOUEwODAwRTEzMzA0IC8qIFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Q2MTE2NkE5QTA4MDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDYzMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Q2NTE2NkE5QTA4MDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDY3MTY2QTlBMDgwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNENjkxNjZBOUEwODAwRTEzMzA0IC8qIFpYR2VvUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Q2QjE2NkE5QTA4MDBFMTMzMDQgLyogWlhHZW9SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDZEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDZGMTY2QTlBMDgwMEUxMzMwNCAvKiBaWElTQk5SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDcxMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNENzQxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNENzYxNjZBOUEwODAwRTEzMzA0IC8qIFpYUHJvZHVjdFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNENzgxNjZBOUEwODAwRTEzMzA0IC8qIFpYUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Q3QTE2NkE5QTA4MDBFMTMzMDQgLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDdDMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFNNU1BhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNEN0UxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01TVE9NTVNUT1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNEODAxNjZBOUEwODAwRTEzMzA0IC8qIFpYU01UUFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNEODIxNjZBOUEwODAwRTEzMzA0IC8qIFpYVGVsUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Q4NDE2NkE5QTA4MDBFMTMzMDQgLyogWlhUZWxSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDg2MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDg4MTY2QTlBMDgwMEUxMzMwNCAvKiBaWFVSSVBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNEOEExNjZBOUEwODAwRTEzMzA0IC8qIFpYVVJJUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Q4QzE2NkE5QTA4MDBFMTMzMDQgLyogWlhVUkxUT1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNEOEUxNjZBOUEwODAwRTEzMzA0IC8qIFpYVkNhcmRSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDkwMTY2QTlBMDgwMEUxMzMwNCAvKiBaWFZFdmVudFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNEOTIxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNEOTQxNjZBOUEwODAwRTEzMzA0IC8qIFpYV2lmaVJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNEOTYxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FwdHVyZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNEOTkxNjZBOUEwODAwRTEzMzA0IC8qIFpYQ2FwdHVyZVZpZXcubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDlCMTY2QTlBMDgwMEUxMzMwNCAvKiBaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRDlEMTY2QTlBMDgwMEUxMzMwNCAvKiBaWEltYWdlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0RDQjE2NkE5QzBFMDBFMTMzMDQgLyogWlhNYXRoVXRpbHMubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRENEMTY2QTlDMEUwMEUxMzMwNCAvKiBaWE1vbm9jaHJvbWVSZWN0YW5nbGVEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNEQ0YxNjZBOUMwRTAwRTEzMzA0IC8qIFpYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNERDExNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2VuZXJpY0dGLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0REMzE2NkE5QzBFMDBFMTMzMDQgLyogWlhHZW5lcmljR0ZQb2x5Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0RENTE2NkE5QzBFMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkRlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzREQ3MTY2QTlDMEUwMEUxMzMwNCAvKiBaWFJlZWRTb2xvbW9uRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNERDkxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0QXJyYXkubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRERCMTY2QTlDMEUwMEUxMzMwNCAvKiBaWEJpdE1hdHJpeC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNEREQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYQml0U291cmNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0RERjE2NkE5QzBFMDBFMTMzMDQgLyogWlhDaGFyYWN0ZXJTZXRFQ0kubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzREUxMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERlY29kZXJSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzREUzMTY2QTlDMEUwMEUxMzMwNCAvKiBaWERlZmF1bHRHcmlkU2FtcGxlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNERTUxNjZBOUMwRTAwRTEzMzA0IC8qIFpYRGV0ZWN0b3JSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzREU3MTY2QTlDMEUwMEUxMzMwNCAvKiBaWEVDSS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNERTkxNjZBOUMwRTAwRTEzMzA0IC8qIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0RFQjE2NkE5QzBFMDBFMTMzMDQgLyogWlhHcmlkU2FtcGxlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNERUQxNjZBOUMwRTAwRTEzMzA0IC8qIFpYSHlicmlkQmluYXJpemVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0RFRjE2NkE5QzBFMDBFMTMzMDQgLyogWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNERjExNjZBOUMwRTAwRTEzMzA0IC8qIFpYU3RyaW5nVXRpbHMubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRTA0MTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1Mzg5Qjg0MTgwMEUzNUIwMDc3MjM5MiAvKiBaWFBERjQxN1NjYW5uaW5nRGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFMDYxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERhdGFCbG9jay5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFMDgxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRTBBMTY2QTlDQ0IwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0UwQzE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4VmVyc2lvbi5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFMEUxNjZBOUNDQjAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERldGVjdG9yLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0UxMDE2NkE5Q0NCMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4UmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0UxQzE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZUJpdE1hdHJpeFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFMUUxNjZBOUQ0QjAwRTEzMzA0IC8qIFpYTWF4aUNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0UyMDE2NkE5RDRCMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRTIyMTY2QTlENEIwMEUxMzMwNCAvKiBaWE1heGlDb2RlUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0UzMjE2NkE5RDhCMDBFMTMzMDQgLyogWlhNdWx0aURldGVjdG9yLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0UzNDE2NkE5RDhCMDBFMTMzMDQgLyogWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1Mzg5QjZDMTdGRkM5ODEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbi5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFMzYxNjZBOUQ4QjAwRTEzMzA0IC8qIFpYUVJDb2RlTXVsdGlSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRTM4MTY2QTlEOEIwMEUxMzMwNCAvKiBaWEJ5UXVhZHJhbnRSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRTNBMTY2QTlEOEIwMEUxMzMwNCAvKiBaWEdlbmVyaWNNdWx0aXBsZUJhcmNvZGVSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUFEMTY2QTlERjQwMEUxMzMwNCAvKiBaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VBRjE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxMzEwM2RlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUIxMTY2QTlERjQwMEUxMzMwNCAvKiBaWEFJMDEzMjB4RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFQjMxNjZBOURGNDAwRTEzMzA0IC8qIFpYQUkwMTM5MnhEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VCNTE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxMzkzeERlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1MTlBQjQ1MTdGRTU1NEQwMEE3MUM0NSAvKiBaWFBERjQxN0NvbW1vbi5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFQjcxNjZBOURGNDAwRTEzMzA0IC8qIFpYQUkwMTN4MHgxeERlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1MTlBQjY5MTdGRTVGMkUwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVWYWx1ZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFQjkxNjZBOURGNDAwRTEzMzA0IC8qIFpYQUkwMTN4MHhEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VCQjE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxQW5kT3RoZXJBSXMubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUJEMTY2QTlERjQwMEUxMzMwNCAvKiBaWEFJMDFkZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VCRjE2NkE5REY0MDBFMTMzMDQgLyogWlhBSTAxd2VpZ2h0RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFQzExNjZBOURGNDAwRTEzMzA0IC8qIFpYQW55QUlEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VDMzE2NkE5REY0MDBFMTMzMDQgLyogWlhCbG9ja1BhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFQzUxNjZBOURGNDAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFQzcxNjZBOURGNDAwRTEzMzA0IC8qIFpYRGVjb2RlZENoYXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUM5MTY2QTlERjQwMEUxMzMwNCAvKiBaWERlY29kZWRJbmZvcm1hdGlvbi5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUxOUFCNzkxN0ZFNjQ5MDAwQTcxQzQ1IC8qIFpYUERGNDE3Q29kZXdvcmQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUNCMTY2QTlERjQwMEUxMzMwNCAvKiBaWERlY29kZWROdW1lcmljLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VDRDE2NkE5REY0MDBFMTMzMDQgLyogWlhEZWNvZGVkT2JqZWN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTM4OUI2MjE3RkZDODQzMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUNGMTY2QTlERjQwMEUxMzMwNCAvKiBaWEZpZWxkUGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VEMTE2NkE5REY0MDBFMTMzMDQgLyogWlhHZW5lcmFsQXBwSWREZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VEMzE2NkE5REY0MDBFMTMzMDQgLyogWlhCaXRBcnJheUJ1aWxkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUQ1MTY2QTlERjQwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUGFpci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFRDcxNjZBOURGNDAwRTEzMzA0IC8qIFpYUlNTRXhwYW5kZWRSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1MTlBQjcxMTdGRTYwRTcwMEE3MUM0NSAvKiBaWFBERjQxN0JvdW5kaW5nQm94Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VEOTE2NkE5REY0MDBFMTMzMDQgLyogWlhBYnN0cmFjdFJTU1JlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFREIxNjZBOURGNDAwRTEzMzA0IC8qIFpYRGF0YUNoYXJhY3Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFREQxNjZBOURGNDAwRTEzMzA0IC8qIFpYUGFpci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFREYxNjZBOURGNDAwRTEzMzA0IC8qIFpYUlNTMTRSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUUxMTY2QTlERjQwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUUzMTY2QTlERjQwMEUxMzMwNCAvKiBaWFJTU1V0aWxzLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VFNTE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RhQmFyUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VFNzE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RhQmFyV3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VFOTE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RlMTI4UmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VFQjE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RlMTI4V3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VFRDE2NkE5REY0MDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUVGMTY2QTlERjQwMEUxMzMwNCAvKiBaWENvZGUzOVdyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFRjExNjZBOURGNDAwRTEzMzA0IC8qIFpYQ29kZTkzUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VGMzE2NkE5REY0MDBFMTMzMDQgLyogWlhFQU4xM1JlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNFRjUxNjZBOURGNDAwRTEzMzA0IC8qIFpYRUFOMTNXcml0ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUY3MTY2QTlERjQwMEUxMzMwNCAvKiBaWEVBTjhSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUY5MTY2QTlERjQwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1Mzg5QjhDMTgwMTBCOUEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdG9yUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VGQjE2NkE5REY0MDBFMTMzMDQgLyogWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0VGRDE2NkE5REY0MDBFMTMzMDQgLyogWlhJVEZSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRUZGMTY2QTlERjQwMEUxMzMwNCAvKiBaWElURldyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGMDExNjZBOURGNDAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRPbmVEUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0YwMzE2NkE5REY0MDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGMDUxNjZBOURGNDAwRTEzMzA0IC8qIFpYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0YwNzE2NkE5REY0MDBFMTMzMDQgLyogWlhPbmVEUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0YwOTE2NkE5REY0MDBFMTMzMDQgLyogWlhVUENBUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0YwQjE2NkE5REY0MDBFMTMzMDQgLyogWlhVUENBV3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0YwRDE2NkE5REY0MDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGMEYxNjZBOURGNDAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRjExMTY2QTlERjQwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRjEzMTY2QTlERjQwMEUxMzMwNCAvKiBaWFVQQ0VBTlJlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGMTUxNjZBOURGNDAwRTEzMzA0IC8qIFpYVVBDRUFOV3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0YxNzE2NkE5REY0MDBFMTMzMDQgLyogWlhVUENFUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0YzRDE2NkE5RUI1MDBFMTMzMDQgLyogWlhNb2R1bHVzR0YubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRjNGMTY2QTlFQjUwMEUxMzMwNCAvKiBaWE1vZHVsdXNQb2x5Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Y0MTE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGNDUxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGNDkxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3RGV0ZWN0b3IubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRjRCMTY2QTlFQjUwMEUxMzMwNCAvKiBaWEJhcmNvZGVNYXRyaXgubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRjREMTY2QTlFQjUwMEUxMzMwNCAvKiBaWEJhcmNvZGVSb3cubSBpbiBTb3VyY2VzICovLAorCQkJCTI1MTlBQjYxMTdGRTVFNEYwMEE3MUM0NSAvKiBaWFBERjQxN0JhcmNvZGVNZXRhZGF0YS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGNTAxNjZBOUVCNTAwRTEzMzA0IC8qIFpYRGltZW5zaW9ucy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGNTIxNjZBOUVCNTAwRTEzMzA0IC8qIFpYUERGNDE3Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Y1NDE2NkE5RUI1MDBFMTMzMDQgLyogWlhQREY0MTdFcnJvckNvcnJlY3Rpb24ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRjU2MTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN0hpZ2hMZXZlbEVuY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRjVBMTY2QTlFQjUwMEUxMzMwNCAvKiBaWFBERjQxN1JlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGOEUxNjZBOUYyRDAwRTEzMzA0IC8qIFpYRGF0YU1hc2subSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRjkwMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEVycm9yQ29ycmVjdGlvbkxldmVsLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Y5MjE2NkE5RjJEMDBFMTMzMDQgLyogWlhGb3JtYXRJbmZvcm1hdGlvbi5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGOTQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTW9kZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGOTYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0Y5ODE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEYXRhQmxvY2subSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRjlBMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRjlDMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZURlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRjlFMTY2QTlGMkQwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb24ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRkEwMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEFsaWdubWVudFBhdHRlcm4ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRkEyMTY2QTlGMkQwMEUxMzMwNCAvKiBaWEFsaWdubWVudFBhdHRlcm5GaW5kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRkE0MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5GaW5kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRkE2MTY2QTlGMkQwMEUxMzMwNCAvKiBaWEZpbmRlclBhdHRlcm5JbmZvLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0ZBODE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGQUExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlRmluZGVyUGF0dGVybi5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGQUMxNjZBOUYyRDAwRTEzMzA0IC8qIFpYQmxvY2tQYWlyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0ZBRTE2NkE5RjJEMDBFMTMzMDQgLyogWlhCeXRlTWF0cml4Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0ZCMDE2NkE5RjJEMDBFMTMzMDQgLyogWlhFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0ZCMjE2NkE5RjJEMDBFMTMzMDQgLyogWlhNYXNrVXRpbC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGQjQxNjZBOUYyRDAwRTEzMzA0IC8qIFpYTWF0cml4VXRpbC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGQjYxNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0ZCODE2NkE5RjJEMDBFMTMzMDQgLyogWlhRUkNvZGVSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1Mzg5Qjc0MTdGRkNBMjcwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGQkExNjZBOUYyRDAwRTEzMzA0IC8qIFpYUVJDb2RlV3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0ZDODE2NkE5RkZDMDBFMTMzMDQgLyogWlhCaW5hcml6ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRkNBMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEJpbmFyeUJpdG1hcC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGQ0MxNjZBOUZGQzAwRTEzMzA0IC8qIFpYRGVjb2RlSGludHMubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRkNFMTY2QTlGRkMwMEUxMzMwNCAvKiBaWEVuY29kZUhpbnRzLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0ZEMDE2NkE5RkZDMDBFMTMzMDQgLyogWlhFcnJvcnMubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRkUwMTY2QUEwMDgwMEUxMzMwNCAvKiBaWEx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDNGRTIxNjZBQTAwODAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRkU0MTY2QUEwMDgwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0V3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwM0ZFNzE2NkFBMDA4MDBFMTMzMDQgLyogWlhSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDAzRkVBMTY2QUEwMDgwMEUxMzMwNCAvKiBaWFJlc3VsdFBvaW50Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTFGQ0RFRDE2Q0M4RjUzMDAwQzI3RTUgLyogWlhSR0JMdW1pbmFuY2VTb3VyY2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1RkU1RDM0MTZEMEFGRUQwMDgyNkNEQiAvKiBaWEV4cGFuZGVkUm93Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTk2RTE2RDMzMzFGMDBENEMwNDUgLyogWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1MTlBQjNGMTdGRDFFRTQwMEE3MUM0NSAvKiBaWFBERjQxN1dyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUxOUFCNDkxN0ZFNUMxRjAwQTcxQzQ1IC8qIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEubSBpbiBTb3VyY2VzICovLAorCQkJCTI1Mzg5QjdDMTgwMERFQzMwMDc3MjM5MiAvKiBaWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5NzYxNkQ0NkU4NTAwRDRDMDQ1IC8qIFpYRGltZW5zaW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTk3RTE2RDQ3MEQ2MDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTk4OTE2RDQ3OEEwMDBENEMwNDUgLyogWlhBU0NJSUVuY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5OTkyMTZENDdCQzAwMEQ0QzA0NSAvKiBaWEJhc2UyNTZFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTk5QzE2RDQ4MkY5MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlBNDE2RDQ4Nzk4MDBENEMwNDUgLyogWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5QUMxNkQ0ODg2MTAwRDRDMDQ1IC8qIFpYRGVmYXVsdFBsYWNlbWVudC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5QjQxNkQ0QTM2NzAwRDRDMDQ1IC8qIFpYRWRpZmFjdEVuY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5OUJDMTZENEE1QUEwMEQ0QzA0NSAvKiBaWEVuY29kZXJDb250ZXh0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlDNDE2RDVCOEU1MDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlDQzE2RDVCRDU0MDBENEMwNDUgLyogWlhIaWdoTGV2ZWxFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlENDE2RDVDOTYxMDBENEMwNDUgLyogWlhTeW1ib2xJbmZvLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlFMDE2RDVEMjRFMDBENEMwNDUgLyogWlhTeW1ib2xTaGFwZUhpbnQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5OUU4MTZENUQ4MUEwMEQ0QzA0NSAvKiBaWFRleHRFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlGMDE2RDVEOTRCMDBENEMwNDUgLyogWlhYMTJFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTA0RDRDNzE2RjY5OEFBMDBERjg4ODIgLyogWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUwNEQ5RDAxNkZGRDJFMjAwREY4ODgyIC8qIFpYQXp0ZWNDb2RlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTA0RDlERDE2RkZENENEMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQkyNTQwM0NCRjE2NkE5NkZBMDBFMTMzMDQgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTI1NDA0MEQ5MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MERBMTY2QUEwRjEwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MERCMTY2QUEwRjEwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDBEQzE2NkFBMEYxMDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQwREQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYR2VvUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MERFMTY2QUEwRjEwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQwREYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUGFyc2VkUmVhZGVyUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MEUwMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQwRTExNjZBQTBGMTAwRTEzMzA0IC8qIFpYU01TTU1TUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MEUyMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFRlbFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDBFMzE2NkFBMEYxMDBFMTMzMDQgLyogWlhVUklQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQwRTQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYV2lmaVBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDBFQzE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaXRBcnJheVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDBFRDE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaXRNYXRyaXhUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQwRUUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0U291cmNlQnVpbGRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQwRUYxNjZBQTBGMTAwRTEzMzA0IC8qIFpYQml0U291cmNlVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MEYwMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MEYxMTY2QUEwRjEwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MEY0MTY2QUEwRjEwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTA5MTY2QUEwRjEwMEUxMzMwNCAvKiBBYnN0cmFjdERlY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDEwQTE2NkFBMEYxMDBFMTMzMDQgLyogQUkwMV8zMTAzX0RlY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDEwQjE2NkFBMEYxMDBFMTMzMDQgLyogQUkwMV8zMjAyXzMyMDNfRGVjb2RlclRlc3QubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTBDMTY2QUEwRjEwMEUxMzMwNCAvKiBBSTAxXzNYMFhfMVhfRGVjb2RlclRlc3QubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTBEMTY2QUEwRjEwMEUxMzMwNCAvKiBBbnlBSURlY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDEwRTE2NkFBMEYxMDBFMTMzMDQgLyogWlhGaWVsZFBhcnNlclRlc3QubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTEyMTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMmJpbmFyeVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDExMzE2NkFBMEYxMDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJyZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxMTQxNjZBQTBGMTAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2Uyc3RyaW5nVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTE1MTY2QUEwRjEwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEludGVybmFsVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTE2MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpbmFyeVV0aWwubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTE3MTY2QUEwRjEwMEUxMzMwNCAvKiBaWEJpbmFyeVV0aWxUZXN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDExODE2NkFBMEYxMDBFMTMzMDQgLyogWlhCaXRBcnJheUJ1aWxkZXJUZXN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDExOTE2NkFBMEYxMDBFMTMzMDQgLyogWlhFeHBhbmRlZEluZm9ybWF0aW9uRGVjb2RlclRlc3QubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTI2MTY2QUEwRjEwMEUxMzMwNCAvKiBaWENvZGFCYXJXcml0ZXJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxMjgxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRUFOMTNXcml0ZXJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxMjkxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRUFOOFdyaXRlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDEyQTE2NkFBMEYxMDBFMTMzMDQgLyogWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0VGVzdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxMkMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYVVBDQVdyaXRlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDEyRDE2NkFBMEYxMDBFMTMzMDQgLyogQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxMkUxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUERGNDE3RUNFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxMzExNjZBQTBGMTAwRTEzMzA0IC8qIFpYRGF0YU1hc2tUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxMzIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxMzMxNjZBQTBGMTAwRTEzMzA0IC8qIFpYRm9ybWF0SW5mb3JtYXRpb25UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxMzQxNjZBQTBGMTAwRTEzMzA0IC8qIFpYTW9kZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDEzNTE2NkFBMEYxMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTM2MTY2QUEwRjEwMEUxMzMwNCAvKiBaWFFSQ29kZVZlcnNpb25UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxMzcxNjZBQTBGMTAwRTEzMzA0IC8qIEJpdFZlY3RvclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDEzODE2NkFBMEYxMDBFMTMzMDQgLyogWlhFbmNvZGVyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTM5MTY2QUEwRjEwMEUxMzMwNCAvKiBaWE1hc2tVdGlsVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTNBMTY2QUEwRjEwMEUxMzMwNCAvKiBaWE1hdHJpeFV0aWxUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxM0IxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1Mzg5Qjk5MTgwMTBEQ0IwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdG9yVGVzdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxNDIxNjZBQTBGMTAwRTEzMzA0IC8qIFpYUVJDb2RlV3JpdGVyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1RkU1RDQwMTZEMEI4NEMwMDgyNkNEQiAvKiBSU1NFeHBhbmRlZFN0YWNrZWRJbnRlcm5hbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNUZFNUQ0MzE2RDBCOEIyMDA4MjZDREIgLyogVGVzdENhc2VVdGlsLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlGQjE2RDVEQ0MwMDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5QTAwMTZENURGRDgwMEQ0QzA0NSAvKiBaWERlYnVnUGxhY2VtZW50Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOUEwNDE2RDVFMEVEMDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5QTA4MTZENUUyMUMwMEQ0QzA0NSAvKiBaWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOUEwQzE2RDVGNEUwMDBENEMwNDUgLyogWlhQbGFjZW1lbnRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MjlBMTAxNkQ1RjY2RDAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mb1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTA0RDlFOTE2RkZGMkE5MDBERjg4ODIgLyogWlhBenRlY0VuY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTA0RDlFQzE3MDAwNUZFMDBERjg4ODIgLyogUmVlZFNvbG9tb25UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCTI1NDA0MTYyMTY2QUFEQUMwMEUxMzMwNCAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMjU0MDQxOEYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQXp0ZWNEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTE5QUIzODE3RkQxRUMwMDBBNzFDNDUgLyogWlhBenRlY1dyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxOTAxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxOTExNjZBQUU2MDAwRTEzMzA0IC8qIFpYQXp0ZWNEZXRlY3RvclJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxOTIxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQXp0ZWNSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTkzMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDE5NDE2NkFBRTYwMDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDE5NTE2NkFBRTYwMDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va0RvQ29Nb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxOTYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTk3MTY2QUFFNjAwMEUxMzMwNCAvKiBaWEJpemNhcmRSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTk4MTY2QUFFNjAwMEUxMzMwNCAvKiBaWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDE5OTE2NkFBRTYwMDBFMTMzMDQgLyogWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxOUExNjZBQUU2MDAwRTEzMzA0IC8qIFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDE5QjE2NkFBRTYwMDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTlDMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDE5RDE2NkFBRTYwMDBFMTMzMDQgLyogWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MTlFMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxOUYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYR2VvUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFBMDE2NkFBRTYwMDBFMTMzMDQgLyogWlhHZW9SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUExMTY2QUFFNjAwMEUxMzMwNCAvKiBaWElTQk5QYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUEyMTY2QUFFNjAwMEUxMzMwNCAvKiBaWElTQk5SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUEzMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQTQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUHJvZHVjdFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQTUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUHJvZHVjdFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQTYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFBNzE2NkFBRTYwMDBFMTMzMDQgLyogWlhTTVNNTVNSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUE4MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFNNU1BhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQTkxNjZBQUU2MDAwRTEzMzA0IC8qIFpYU01TVE9NTVNUT1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQUExNjZBQUU2MDAwRTEzMzA0IC8qIFpYU01UUFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQUIxNjZBQUU2MDAwRTEzMzA0IC8qIFpYVGVsUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFBQzE2NkFBRTYwMDBFMTMzMDQgLyogWlhUZWxSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUFEMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFRleHRQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUFFMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFVSSVBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUxOUFCNEMxN0ZFNUMzMTAwQTcxQzQ1IC8qIFpYUERGNDE3Q29tbW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFBRjE2NkFBRTYwMDBFMTMzMDQgLyogWlhVUklSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUIwMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFVSTFRPUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFCMTE2NkFBRTYwMDBFMTMzMDQgLyogWlhWQ2FyZFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQjIxNjZBQUU2MDAwRTEzMzA0IC8qIFpYVkV2ZW50UmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFCMzE2NkFBRTYwMDBFMTMzMDQgLyogWlhXaWZpUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFCNDE2NkFBRTYwMDBFMTMzMDQgLyogWlhXaWZpUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFCNTE2NkFBRTYwMDBFMTMzMDQgLyogWlhDYXB0dXJlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFCNjE2NkFBRTYwMDBFMTMzMDQgLyogWlhDYXB0dXJlVmlldy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQjcxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQjgxNjZBQUU2MDAwRTEzMzA0IC8qIFpYSW1hZ2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUI5MTY2QUFFNjAwMEUxMzMwNCAvKiBaWE1hdGhVdGlscy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQkExNjZBQUU2MDAwRTEzMzA0IC8qIFpYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFCQjE2NkFBRTYwMDBFMTMzMDQgLyogWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFCQzE2NkFBRTYwMDBFMTMzMDQgLyogWlhHZW5lcmljR0YubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUJEMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRlBvbHkubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUJFMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFJlZWRTb2xvbW9uRGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQkYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25FbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFDMDE2NkFBRTYwMDBFMTMzMDQgLyogWlhCaXRBcnJheS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQzExNjZBQUU2MDAwRTEzMzA0IC8qIFpYQml0TWF0cml4Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFDMjE2NkFBRTYwMDBFMTMzMDQgLyogWlhCaXRTb3VyY2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUMzMTY2QUFFNjAwMEUxMzMwNCAvKiBaWENoYXJhY3RlclNldEVDSS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQzQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGVjb2RlclJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQzUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGVmYXVsdEdyaWRTYW1wbGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFDNjE2NkFBRTYwMDBFMTMzMDQgLyogWlhEZXRlY3RvclJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxQzcxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRUNJLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFDODE2NkFBRTYwMDBFMTMzMDQgLyogWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUM5MTY2QUFFNjAwMEUxMzMwNCAvKiBaWEdyaWRTYW1wbGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFDQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhIeWJyaWRCaW5hcml6ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUNCMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTM4OUI4NTE4MDBFMzVCMDA3NzIzOTIgLyogWlhQREY0MTdTY2FubmluZ0RlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUNDMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFDRDE2NkFBRTYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFDRTE2NkFBRTYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFDRjE2NkFBRTYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRDAxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUQxMTY2QUFFNjAwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhWZXJzaW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFEMjE2NkFBRTYwMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGV0ZWN0b3IubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUQzMTY2QUFFNjAwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUQ0MTY2QUFFNjAwMEUxMzMwNCAvKiBaWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFENTE2NkFBRTYwMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUQ2MTY2QUFFNjAwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRDcxNjZBQUU2MDAwRTEzMzA0IC8qIFpYTWF4aUNvZGVSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1Mzg5QjZEMTdGRkM5ODEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbi5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRDgxNjZBQUU2MDAwRTEzMzA0IC8qIFpYTXVsdGlEZXRlY3Rvci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRDkxNjZBQUU2MDAwRTEzMzA0IC8qIFpYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFEQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhRUkNvZGVNdWx0aVJlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxREIxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQnlRdWFkcmFudFJlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxREMxNjZBQUU2MDAwRTEzMzA0IC8qIFpYR2VuZXJpY011bHRpcGxlQmFyY29kZVJlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxREQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MURFMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEFJMDEzMTAzZGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxREYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQUkwMTMyMHhEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFFMDE2NkFBRTYwMDBFMTMzMDQgLyogWlhBSTAxMzkyeERlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUUxMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEFJMDEzOTN4RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUxOUFCNkExN0ZFNUYyRTAwQTcxQzQ1IC8qIFpYUERGNDE3QmFyY29kZVZhbHVlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFFMjE2NkFBRTYwMDBFMTMzMDQgLyogWlhBSTAxM3gweDF4RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRTMxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQUkwMTN4MHhEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFFNDE2NkFBRTYwMDBFMTMzMDQgLyogWlhBSTAxQW5kT3RoZXJBSXMubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUU1MTY2QUFFNjAwMEUxMzMwNCAvKiBaWEFJMDFkZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFFNjE2NkFBRTYwMDBFMTMzMDQgLyogWlhBSTAxd2VpZ2h0RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRTcxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQW55QUlEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFFODE2NkFBRTYwMDBFMTMzMDQgLyogWlhCbG9ja1BhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRTkxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQ3VycmVudFBhcnNpbmdTdGF0ZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRUExNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGVjb2RlZENoYXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1MTlBQjdBMTdGRTY0OTAwMEE3MUM0NSAvKiBaWFBERjQxN0NvZGV3b3JkLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFFQjE2NkFBRTYwMDBFMTMzMDQgLyogWlhEZWNvZGVkSW5mb3JtYXRpb24ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUVDMTY2QUFFNjAwMEUxMzMwNCAvKiBaWERlY29kZWROdW1lcmljLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTM4OUI2MzE3RkZDODQzMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUVEMTY2QUFFNjAwMEUxMzMwNCAvKiBaWERlY29kZWRPYmplY3QubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUVFMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEZpZWxkUGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFFRjE2NkFBRTYwMDBFMTMzMDQgLyogWlhHZW5lcmFsQXBwSWREZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFGMDE2NkFBRTYwMDBFMTMzMDQgLyogWlhCaXRBcnJheUJ1aWxkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUYxMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUGFpci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUxOUFCNzIxN0ZFNjBFNzAwQTcxQzQ1IC8qIFpYUERGNDE3Qm91bmRpbmdCb3gubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUYyMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFJTU0V4cGFuZGVkUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFGMzE2NkFBRTYwMDBFMTMzMDQgLyogWlhBYnN0cmFjdFJTU1JlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRjQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRGF0YUNoYXJhY3Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRjUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUGFpci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRjYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUlNTMTRSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUY3MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFJTU0ZpbmRlclBhdHRlcm4ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUY4MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFJTU1V0aWxzLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFGOTE2NkFBRTYwMDBFMTMzMDQgLyogWlhDb2RhQmFyUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFGQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhDb2RhQmFyV3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFGQjE2NkFBRTYwMDBFMTMzMDQgLyogWlhDb2RlMTI4UmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFGQzE2NkFBRTYwMDBFMTMzMDQgLyogWlhDb2RlMTI4V3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDFGRDE2NkFBRTYwMDBFMTMzMDQgLyogWlhDb2RlMzlSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MUZFMTY2QUFFNjAwMEUxMzMwNCAvKiBaWENvZGUzOVdyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQxRkYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQ29kZTkzUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIwMDE2NkFBRTYwMDBFMTMzMDQgLyogWlhFQU4xM1JlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMDExNjZBQUU2MDAwRTEzMzA0IC8qIFpYRUFOMTNXcml0ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjAyMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEVBTjhSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjAzMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1Mzg5QjhEMTgwMTBCOUEwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdG9yUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIwNDE2NkFBRTYwMDBFMTMzMDQgLyogWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIwNTE2NkFBRTYwMDBFMTMzMDQgLyogWlhJVEZSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjA2MTY2QUFFNjAwMEUxMzMwNCAvKiBaWElURldyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMDcxNjZBQUU2MDAwRTEzMzA0IC8qIFpYTXVsdGlGb3JtYXRPbmVEUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIwODE2NkFBRTYwMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMDkxNjZBQUU2MDAwRTEzMzA0IC8qIFpYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIwQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhPbmVEUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIwQjE2NkFBRTYwMDBFMTMzMDQgLyogWlhVUENBUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIwQzE2NkFBRTYwMDBFMTMzMDQgLyogWlhVUENBV3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIwRDE2NkFBRTYwMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMEUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjBGMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjEwMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFVQQ0VBTlJlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMTExNjZBQUU2MDAwRTEzMzA0IC8qIFpYVVBDRUFOV3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIxMjE2NkFBRTYwMDBFMTMzMDQgLyogWlhVUENFUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIxMzE2NkFBRTYwMDBFMTMzMDQgLyogWlhNb2R1bHVzR0YubSBpbiBTb3VyY2VzICovLAorCQkJCTI1MTlBQjRCMTdGRTVDMkUwMEE3MUM0NSAvKiBaWFBERjQxN1Jlc3VsdE1ldGFkYXRhLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIxNDE2NkFBRTYwMDBFMTMzMDQgLyogWlhNb2R1bHVzUG9seS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMTUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUERGNDE3RUNFcnJvckNvcnJlY3Rpb24ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjE3MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjE5MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFBERjQxN0RldGVjdG9yLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIxQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhCYXJjb2RlTWF0cml4Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTE5QUI2MjE3RkU1RTRGMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjFCMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEJhcmNvZGVSb3cubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjFDMTY2QUFFNjAwMEUxMzMwNCAvKiBaWERpbWVuc2lvbnMubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjFEMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFBERjQxNy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMUUxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUERGNDE3RXJyb3JDb3JyZWN0aW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIxRjE2NkFBRTYwMDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIyMTE2NkFBRTYwMDBFMTMzMDQgLyogWlhQREY0MTdSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjIyMTY2QUFFNjAwMEUxMzMwNCAvKiBaWERhdGFNYXNrLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIyMzE2NkFBRTYwMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMjQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRm9ybWF0SW5mb3JtYXRpb24ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjI1MTY2QUFFNjAwMEUxMzMwNCAvKiBaWE1vZGUubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjI2MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMjcxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUVJDb2RlRGF0YUJsb2NrLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIyODE2NkFBRTYwMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIyOTE2NkFBRTYwMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIyQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhRUkNvZGVWZXJzaW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIyQjE2NkFBRTYwMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIyQzE2NkFBRTYwMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIyRDE2NkFBRTYwMDBFMTMzMDQgLyogWlhGaW5kZXJQYXR0ZXJuRmluZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIyRTE2NkFBRTYwMDBFMTMzMDQgLyogWlhGaW5kZXJQYXR0ZXJuSW5mby5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMkYxNjZBQUU2MDAwRTEzMzA0IC8qIFpYUVJDb2RlRGV0ZWN0b3IubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjMwMTY2QUFFNjAwMEUxMzMwNCAvKiBaWFFSQ29kZUZpbmRlclBhdHRlcm4ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjMxMTY2QUFFNjAwMEUxMzMwNCAvKiBaWEJsb2NrUGFpci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMzIxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQnl0ZU1hdHJpeC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMzMxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMzQxNjZBQUU2MDAwRTEzMzA0IC8qIFpYTWFza1V0aWwubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjM1MTY2QUFFNjAwMEUxMzMwNCAvKiBaWE1hdHJpeFV0aWwubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjM2MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFFSQ29kZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUzODlCNzUxN0ZGQ0EyNzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIzNzE2NkFBRTYwMDBFMTMzMDQgLyogWlhRUkNvZGVSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjM4MTY2QUFFNjAwMEUxMzMwNCAvKiBaWFFSQ29kZVdyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyMzkxNjZBQUU2MDAwRTEzMzA0IC8qIFpYQmluYXJpemVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIzQTE2NkFBRTYwMDBFMTMzMDQgLyogWlhCaW5hcnlCaXRtYXAubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjNCMTY2QUFFNjAwMEUxMzMwNCAvKiBaWERlY29kZUhpbnRzLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIzQzE2NkFBRTYwMDBFMTMzMDQgLyogWlhFbmNvZGVIaW50cy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyM0QxNjZBQUU2MDAwRTEzMzA0IC8qIFpYRXJyb3JzLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDIzRTE2NkFBRTYwMDBFMTMzMDQgLyogWlhMdW1pbmFuY2VTb3VyY2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MjNGMTY2QUFFNjAwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0UmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDI0MDE2NkFBRTYwMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFdyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQyNDExNjZBQUU2MDAwRTEzMzA0IC8qIFpYUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDI0MjE2NkFBRTYwMDBFMTMzMDQgLyogWlhSZXN1bHRQb2ludC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUxRkNERUUxNkNDOEY1MzAwMEMyN0U1IC8qIFpYUkdCTHVtaW5hbmNlU291cmNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNUZFNUQzNjE2RDBCMDA2MDA4MjZDREIgLyogWlhFeHBhbmRlZFJvdy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5NzExNkQzMzM2MDAwRDRDMDQ1IC8qIFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTE5QUI0MDE3RkQxRUU0MDBBNzFDNDUgLyogWlhQREY0MTdXcml0ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1Mzg5QjdEMTgwMERFQzMwMDc3MjM5MiAvKiBaWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5N0ExNkQ0NkZGMjAwRDRDMDQ1IC8qIFpYRGltZW5zaW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTk4MjE2RDQ3MEY0MDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTk4QTE2RDQ3OEEwMDBENEMwNDUgLyogWlhBU0NJSUVuY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5OTkzMTZENDdCQzAwMEQ0QzA0NSAvKiBaWEJhc2UyNTZFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTk5RDE2RDQ4MkY5MDBENEMwNDUgLyogWlhDNDBFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlBNTE2RDQ4Nzk4MDBENEMwNDUgLyogWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5QUQxNkQ0ODg2MTAwRDRDMDQ1IC8qIFpYRGVmYXVsdFBsYWNlbWVudC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5QjUxNkQ0QTM2NzAwRDRDMDQ1IC8qIFpYRWRpZmFjdEVuY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5OUJEMTZENEE1QUEwMEQ0QzA0NSAvKiBaWEVuY29kZXJDb250ZXh0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlDNTE2RDVCOEU1MDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlDRDE2RDVCRDU0MDBENEMwNDUgLyogWlhIaWdoTGV2ZWxFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlENTE2RDVDOTYxMDBENEMwNDUgLyogWlhTeW1ib2xJbmZvLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlFMTE2RDVEMjRFMDBENEMwNDUgLyogWlhTeW1ib2xTaGFwZUhpbnQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5OUU5MTZENUQ4MUEwMEQ0QzA0NSAvKiBaWFRleHRFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlGMTE2RDVEOTRCMDBENEMwNDUgLyogWlhYMTJFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTA0RDRDQTE2RjY5OEM5MDBERjg4ODIgLyogWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUwNEQ5RDMxNkZGRDNCMzAwREY4ODgyIC8qIFpYQXp0ZWNDb2RlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTA0RDlFMDE2RkZFQjdCMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQkyNTQwNDE3MzE2NkFBREFDMDBFMTMzMDQgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTI1NUU0ODFFMTgxNDNBMzkwMEEwM0EyOCAvKiBSU1NFeHBhbmRlZFN0YWNrZWRJbnRlcm5hbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTVFNDgxRjE4MTQzQTM5MDBBMDNBMjggLyogVGVzdENhc2VVdGlsLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDMxRDE2NkFCOEI4MDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDMxRTE2NkFCOEI4MDBFMTMzMDQgLyogWlhDYWxlbmRhclBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDMxRjE2NkFCOEI4MDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzMjAxNjZBQjhCODAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzIxMTY2QUI4QjgwMEUxMzMwNCAvKiBaWEdlb1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDMyMjE2NkFCOEI4MDBFMTMzMDQgLyogWlhJU0JOUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzIzMTY2QUI4QjgwMEUxMzMwNCAvKiBaWFBhcnNlZFJlYWRlclJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDMyNDE2NkFCOEI4MDBFMTMzMDQgLyogWlhQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzI1MTY2QUI4QjgwMEUxMzMwNCAvKiBaWFNNU01NU1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDMyNjE2NkFCOEI4MDBFMTMzMDQgLyogWlhUZWxQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzMjcxNjZBQjhCODAwRTEzMzA0IC8qIFpYVVJJUGFyc2VkUmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzI4MTY2QUI4QjgwMEUxMzMwNCAvKiBaWFdpZmlQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzMzAxNjZBQjhCODAwRTEzMzA0IC8qIFpYQml0QXJyYXlUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzMzExNjZBQjhCODAwRTEzMzA0IC8qIFpYQml0TWF0cml4VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzMyMTY2QUI4QjgwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZUJ1aWxkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzMzMTY2QUI4QjgwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDMzNDE2NkFCOEI4MDBFMTMzMDQgLyogWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDMzNTE2NkFCOEI4MDBFMTMzMDQgLyogWlhTdHJpbmdVdGlsc1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDMzODE2NkFCOEI4MDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDM0RDE2NkFCOEI4MDBFMTMzMDQgLyogQWJzdHJhY3REZWNvZGVyVGVzdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzNEUxNjZBQjhCODAwRTEzMzA0IC8qIEFJMDFfMzEwM19EZWNvZGVyVGVzdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzNEYxNjZBQjhCODAwRTEzMzA0IC8qIEFJMDFfMzIwMl8zMjAzX0RlY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDM1MDE2NkFCOEI4MDBFMTMzMDQgLyogQUkwMV8zWDBYXzFYX0RlY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDM1MTE2NkFCOEI4MDBFMTMzMDQgLyogQW55QUlEZWNvZGVyVGVzdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzNTIxNjZBQjhCODAwRTEzMzA0IC8qIFpYRmllbGRQYXJzZXJUZXN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDM1NjE2NkFCOEI4MDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbWFnZTJiaW5hcnlUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzNTcxNjZBQjhCODAwRTEzMzA0IC8qIFJTU0V4cGFuZGVkSW1hZ2UycmVzdWx0VGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzU4MTY2QUI4QjgwMEUxMzMwNCAvKiBSU1NFeHBhbmRlZEltYWdlMnN0cmluZ1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDM1OTE2NkFCOEI4MDBFMTMzMDQgLyogUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDM1QTE2NkFCOEI4MDBFMTMzMDQgLyogWlhCaW5hcnlVdGlsLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDM1QjE2NkFCOEI4MDBFMTMzMDQgLyogWlhCaW5hcnlVdGlsVGVzdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzNUMxNjZBQjhCODAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyVGVzdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzNUQxNjZBQjhCODAwRTEzMzA0IC8qIFpYRXhwYW5kZWRJbmZvcm1hdGlvbkRlY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDM2QTE2NkFCOEI4MDBFMTMzMDQgLyogWlhDb2RhQmFyV3JpdGVyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzZDMTY2QUI4QjgwMEUxMzMwNCAvKiBaWEVBTjEzV3JpdGVyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzZEMTY2QUI4QjgwMEUxMzMwNCAvKiBaWEVBTjhXcml0ZXJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzNkUxNjZBQjhCODAwRTEzMzA0IC8qIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydFRlc3QubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzcwMTY2QUI4QjgwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXJUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzNzExNjZBQjhCODAwRTEzMzA0IC8qIEFic3RyYWN0RXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzcyMTY2QUI4QjgwMEUxMzMwNCAvKiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0Mzc1MTY2QUI4QjgwMEUxMzMwNCAvKiBaWERhdGFNYXNrVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0Mzc2MTY2QUI4QjgwMEUxMzMwNCAvKiBaWEVycm9yQ29ycmVjdGlvbkxldmVsVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0Mzc3MTY2QUI4QjgwMEUxMzMwNCAvKiBaWEZvcm1hdEluZm9ybWF0aW9uVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0Mzc4MTY2QUI4QjgwMEUxMzMwNCAvKiBaWE1vZGVUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzNzkxNjZBQjhCODAwRTEzMzA0IC8qIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDM3QTE2NkFCOEI4MDBFMTMzMDQgLyogWlhRUkNvZGVWZXJzaW9uVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzdCMTY2QUI4QjgwMEUxMzMwNCAvKiBCaXRWZWN0b3JUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQzN0MxNjZBQjhCODAwRTEzMzA0IC8qIFpYRW5jb2RlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDM3RDE2NkFCOEI4MDBFMTMzMDQgLyogWlhNYXNrVXRpbFRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDM3RTE2NkFCOEI4MDBFMTMzMDQgLyogWlhNYXRyaXhVdGlsVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0MzdGMTY2QUI4QjgwMEUxMzMwNCAvKiBaWFFSQ29kZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTM4OUI5ODE4MDEwRENCMDA3NzIzOTIgLyogWlhQREY0MTdEZXRlY3RvclRlc3QubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0Mzg2MTY2QUI4QjgwMEUxMzMwNCAvKiBaWFFSQ29kZVdyaXRlclRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlGQzE2RDVEQ0MzMDBENEMwNDUgLyogWlhEYXRhTWF0cml4V3JpdGVyVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5QTAxMTZENURGRDgwMEQ0QzA0NSAvKiBaWERlYnVnUGxhY2VtZW50Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOUEwNTE2RDVFMEVEMDBENEMwNDUgLyogWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5QTA5MTZENUUyMUMwMEQ0QzA0NSAvKiBaWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOUEwRDE2RDVGNEUwMDBENEMwNDUgLyogWlhQbGFjZW1lbnRUZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MjlBMTExNkQ1RjY2RDAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mb1Rlc3RDYXNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTA0RDlFODE2RkZGMjdDMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXJUZXN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTA0RDlFRDE3MDAwNUZFMDBERjg4ODIgLyogUmVlZFNvbG9tb25UZXN0Q2FzZS5tIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCTI1NDA0Mzk5MTY2QUJBMEEwMEUxMzMwNCAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMjU1RTQ4MjAxODE0M0E0QTAwQTAzQTI4IC8qIFpYQzQwRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NDgxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQXp0ZWNEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY0OTE2NkFCQkVEMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY0QTE2NkFCQkVEMDBFMTMzMDQgLyogWlhBenRlY0RldGVjdG9yUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY0QjE2NkFCQkVEMDBFMTMzMDQgLyogWlhBenRlY1JlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NEMxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjREMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rQVVSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjRFMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY0RjE2NkFCQkVEMDBFMTMzMDQgLyogWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NTAxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQml6Y2FyZFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NTExNjZBQkJFRDAwRTEzMzA0IC8qIFpYQm9va21hcmtEb0NvTW9SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjUyMTY2QUJCRUQwMEUxMzMwNCAvKiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY1MzE2NkFCQkVEMDBFMTMzMDQgLyogWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjU0MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEVtYWlsQWRkcmVzc1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NTUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjU2MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NTcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY1ODE2NkFCQkVEMDBFMTMzMDQgLyogWlhHZW9QYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjU5MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEdlb1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NUExNjZBQkJFRDAwRTEzMzA0IC8qIFpYSVNCTlBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NUIxNjZBQkJFRDAwRTEzMzA0IC8qIFpYSVNCTlJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NUMxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY1RDE2NkFCQkVEMDBFMTMzMDQgLyogWlhQcm9kdWN0UGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY1RTE2NkFCQkVEMDBFMTMzMDQgLyogWlhQcm9kdWN0UmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY1RjE2NkFCQkVEMDBFMTMzMDQgLyogWlhSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjYwMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFNNU01NU1Jlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NjExNjZBQkJFRDAwRTEzMzA0IC8qIFpYU01TUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY2MjE2NkFCQkVEMDBFMTMzMDQgLyogWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY2MzE2NkFCQkVEMDBFMTMzMDQgLyogWlhTTVRQUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY2NDE2NkFCQkVEMDBFMTMzMDQgLyogWlhUZWxQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjY1MTY2QUJCRUQwMEUxMzMwNCAvKiBaWFRlbFJlc3VsdFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NjYxNjZBQkJFRDAwRTEzMzA0IC8qIFpYVGV4dFBhcnNlZFJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NjcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYVVJJUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY2ODE2NkFCQkVEMDBFMTMzMDQgLyogWlhVUklSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1Mzg5QjY0MTdGRkM4NDgwMDc3MjM5MiAvKiBaWFBERjQxN0RldGVjdGlvblJlc3VsdC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NjkxNjZBQkJFRDAwRTEzMzA0IC8qIFpYVVJMVE9SZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjZBMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFZDYXJkUmVzdWx0UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY2QjE2NkFCQkVEMDBFMTMzMDQgLyogWlhWRXZlbnRSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjZDMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFdpZmlQYXJzZWRSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjZEMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFdpZmlSZXN1bHRQYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjZFMTY2QUJCRUQwMEUxMzMwNCAvKiBaWENhcHR1cmUubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjZGMTY2QUJCRUQwMEUxMzMwNCAvKiBaWENhcHR1cmVWaWV3Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY3MDE2NkFCQkVEMDBFMTMzMDQgLyogWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY3MTE2NkFCQkVEMDBFMTMzMDQgLyogWlhJbWFnZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NzIxNjZBQkJFRDAwRTEzMzA0IC8qIFpYTWF0aFV0aWxzLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY3MzE2NkFCQkVEMDBFMTMzMDQgLyogWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0Njc0MTY2QUJCRUQwMEUxMzMwNCAvKiBaWFdoaXRlUmVjdGFuZ2xlRGV0ZWN0b3IubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0Njc1MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEdlbmVyaWNHRi5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NzYxNjZBQkJFRDAwRTEzMzA0IC8qIFpYR2VuZXJpY0dGUG9seS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2NzcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUmVlZFNvbG9tb25EZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY3ODE2NkFCQkVEMDBFMTMzMDQgLyogWlhSZWVkU29sb21vbkVuY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0Njc5MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEJpdEFycmF5Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY3QTE2NkFCQkVEMDBFMTMzMDQgLyogWlhCaXRNYXRyaXgubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjdCMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEJpdFNvdXJjZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2N0MxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQ2hhcmFjdGVyU2V0RUNJLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY3RDE2NkFCQkVEMDBFMTMzMDQgLyogWlhEZWNvZGVyUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY3RTE2NkFCQkVEMDBFMTMzMDQgLyogWlhEZWZhdWx0R3JpZFNhbXBsZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjdGMTY2QUJCRUQwMEUxMzMwNCAvKiBaWERldGVjdG9yUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY4MDE2NkFCQkVEMDBFMTMzMDQgLyogWlhFQ0kubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjgxMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2ODIxNjZBQkJFRDAwRTEzMzA0IC8qIFpYR3JpZFNhbXBsZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjgzMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEh5YnJpZEJpbmFyaXplci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2ODQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0Njg1MTY2QUJCRUQwMEUxMzMwNCAvKiBaWFN0cmluZ1V0aWxzLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY4NjE2NkFCQkVEMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY4NzE2NkFCQkVEMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGF0YUJsb2NrLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY4ODE2NkFCQkVEMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2ODkxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRGF0YU1hdHJpeERlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjhBMTY2QUJCRUQwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhWZXJzaW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY4QjE2NkFCQkVEMDBFMTMzMDQgLyogWlhEYXRhTWF0cml4RGV0ZWN0b3IubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjhDMTY2QUJCRUQwMEUxMzMwNCAvKiBaWERhdGFNYXRyaXhSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjhEMTY2QUJCRUQwMEUxMzMwNCAvKiBaWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY4RTE2NkFCQkVEMDBFMTMzMDQgLyogWlhNYXhpQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjhGMTY2QUJCRUQwMEUxMzMwNCAvKiBaWE1heGlDb2RlRGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUxOUFCNzMxN0ZFNjBFNzAwQTcxQzQ1IC8qIFpYUERGNDE3Qm91bmRpbmdCb3gubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjkwMTY2QUJCRUQwMEUxMzMwNCAvKiBaWE1heGlDb2RlUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY5MTE2NkFCQkVEMDBFMTMzMDQgLyogWlhNdWx0aURldGVjdG9yLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY5MjE2NkFCQkVEMDBFMTMzMDQgLyogWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjkzMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFFSQ29kZU11bHRpUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY5NDE2NkFCQkVEMDBFMTMzMDQgLyogWlhCeVF1YWRyYW50UmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY5NTE2NkFCQkVEMDBFMTMzMDQgLyogWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY5NjE2NkFCQkVEMDBFMTMzMDQgLyogWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2OTcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQUkwMTMxMDNkZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY5ODE2NkFCQkVEMDBFMTMzMDQgLyogWlhBSTAxMzIweERlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0Njk5MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEFJMDEzOTJ4RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2OUExNjZBQkJFRDAwRTEzMzA0IC8qIFpYQUkwMTM5M3hEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDY5QjE2NkFCQkVEMDBFMTMzMDQgLyogWlhBSTAxM3gweDF4RGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2OUMxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQUkwMTN4MHhEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTE5QUI2QjE3RkU1RjJFMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlVmFsdWUubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjlEMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEFJMDFBbmRPdGhlckFJcy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2OUUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQUkwMWRlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NjlGMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEFJMDF3ZWlnaHREZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZBMDE2NkFCQkVEMDBFMTMzMDQgLyogWlhBbnlBSURlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkExMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEJsb2NrUGFyc2VkUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZBMjE2NkFCQkVEMDBFMTMzMDQgLyogWlhDdXJyZW50UGFyc2luZ1N0YXRlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZBMzE2NkFCQkVEMDBFMTMzMDQgLyogWlhEZWNvZGVkQ2hhci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QTQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRGVjb2RlZEluZm9ybWF0aW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTE5QUI0MTE3RkQxRUU0MDBBNzFDNDUgLyogWlhQREY0MTdXcml0ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkE1MTY2QUJCRUQwMEUxMzMwNCAvKiBaWERlY29kZWROdW1lcmljLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZBNjE2NkFCQkVEMDBFMTMzMDQgLyogWlhEZWNvZGVkT2JqZWN0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZBNzE2NkFCQkVEMDBFMTMzMDQgLyogWlhGaWVsZFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QTgxNjZBQkJFRDAwRTEzMzA0IC8qIFpYR2VuZXJhbEFwcElkRGVjb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QTkxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQml0QXJyYXlCdWlsZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZBQTE2NkFCQkVEMDBFMTMzMDQgLyogWlhFeHBhbmRlZFBhaXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkFCMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFJTU0V4cGFuZGVkUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZBQzE2NkFCQkVEMDBFMTMzMDQgLyogWlhBYnN0cmFjdFJTU1JlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QUQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRGF0YUNoYXJhY3Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QUUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUGFpci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUzODlCOEUxODAxMEI5QTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkFGMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFJTUzE0UmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZCMDE2NkFCQkVEMDBFMTMzMDQgLyogWlhSU1NGaW5kZXJQYXR0ZXJuLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZCMTE2NkFCQkVEMDBFMTMzMDQgLyogWlhSU1NVdGlscy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QjIxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQ29kYUJhclJlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QjMxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQ29kYUJhcldyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QjQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQ29kZTEyOFJlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QjUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQ29kZTEyOFdyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QjYxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQ29kZTM5UmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZCNzE2NkFCQkVEMDBFMTMzMDQgLyogWlhDb2RlMzlXcml0ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkI4MTY2QUJCRUQwMEUxMzMwNCAvKiBaWENvZGU5M1JlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QjkxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRUFOMTNSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkJBMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEVBTjEzV3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZCQjE2NkFCQkVEMDBFMTMzMDQgLyogWlhFQU44UmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZCQzE2NkFCQkVEMDBFMTMzMDQgLyogWlhFQU44V3JpdGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZCRDE2NkFCQkVEMDBFMTMzMDQgLyogWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZCRTE2NkFCQkVEMDBFMTMzMDQgLyogWlhJVEZSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkJGMTY2QUJCRUQwMEUxMzMwNCAvKiBaWElURldyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUzODlCNzYxN0ZGQ0EyNzAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZDMDE2NkFCQkVEMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkMxMTY2QUJCRUQwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZDMjE2NkFCQkVEMDBFMTMzMDQgLyogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkMzMTY2QUJCRUQwMEUxMzMwNCAvKiBaWE9uZURSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkM0MTY2QUJCRUQwMEUxMzMwNCAvKiBaWFVQQ0FSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkM1MTY2QUJCRUQwMEUxMzMwNCAvKiBaWFVQQ0FXcml0ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkM2MTY2QUJCRUQwMEUxMzMwNCAvKiBaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZDNzE2NkFCQkVEMDBFMTMzMDQgLyogWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2QzgxNjZBQkJFRDAwRTEzMzA0IC8qIFpYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUxOUFCNEQxN0ZFNUMzMTAwQTcxQzQ1IC8qIFpYUERGNDE3Q29tbW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZDOTE2NkFCQkVEMDBFMTMzMDQgLyogWlhVUENFQU5SZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkNBMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFVQQ0VBTldyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2Q0IxNjZBQkJFRDAwRTEzMzA0IC8qIFpYVVBDRVJlYWRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2Q0MxNjZBQkJFRDAwRTEzMzA0IC8qIFpYTW9kdWx1c0dGLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZDRDE2NkFCQkVEMDBFMTMzMDQgLyogWlhNb2R1bHVzUG9seS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2Q0UxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUERGNDE3RUNFcnJvckNvcnJlY3Rpb24ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkQwMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkQyMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFBERjQxN0RldGVjdG9yLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZEMzE2NkFCQkVEMDBFMTMzMDQgLyogWlhCYXJjb2RlTWF0cml4Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTM4OUI3RTE4MDBERUMzMDA3NzIzOTIgLyogWlhQREY0MTdDb2Rld29yZERlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1MTlBQjdCMTdGRTY0OTAwMEE3MUM0NSAvKiBaWFBERjQxN0NvZGV3b3JkLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZENDE2NkFCQkVEMDBFMTMzMDQgLyogWlhCYXJjb2RlUm93Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTE5QUIzOTE3RkQxRUMwMDBBNzFDNDUgLyogWlhBenRlY1dyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RDUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRGltZW5zaW9ucy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RDYxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUERGNDE3Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTE5QUI0QTE3RkU1QzJFMDBBNzFDNDUgLyogWlhQREY0MTdSZXN1bHRNZXRhZGF0YS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RDcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUERGNDE3RXJyb3JDb3JyZWN0aW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZEODE2NkFCQkVEMDBFMTMzMDQgLyogWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZEQTE2NkFCQkVEMDBFMTMzMDQgLyogWlhQREY0MTdSZWFkZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkRCMTY2QUJCRUQwMEUxMzMwNCAvKiBaWERhdGFNYXNrLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZEQzE2NkFCQkVEMDBFMTMzMDQgLyogWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2REQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRm9ybWF0SW5mb3JtYXRpb24ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkRFMTY2QUJCRUQwMEUxMzMwNCAvKiBaWE1vZGUubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkRGMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RTAxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGF0YUJsb2NrLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZFMTE2NkFCQkVEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZFMjE2NkFCQkVEMDBFMTMzMDQgLyogWlhRUkNvZGVEZWNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZFMzE2NkFCQkVEMDBFMTMzMDQgLyogWlhRUkNvZGVWZXJzaW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZFNDE2NkFCQkVEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZFNTE2NkFCQkVEMDBFMTMzMDQgLyogWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZFNjE2NkFCQkVEMDBFMTMzMDQgLyogWlhGaW5kZXJQYXR0ZXJuRmluZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZFNzE2NkFCQkVEMDBFMTMzMDQgLyogWlhGaW5kZXJQYXR0ZXJuSW5mby5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RTgxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUVJDb2RlRGV0ZWN0b3IubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkU5MTY2QUJCRUQwMEUxMzMwNCAvKiBaWFFSQ29kZUZpbmRlclBhdHRlcm4ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkVBMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEJsb2NrUGFpci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RUIxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQnl0ZU1hdHJpeC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RUMxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RUQxNjZBQkJFRDAwRTEzMzA0IC8qIFpYTWFza1V0aWwubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkVFMTY2QUJCRUQwMEUxMzMwNCAvKiBaWE1hdHJpeFV0aWwubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkVGMTY2QUJCRUQwMEUxMzMwNCAvKiBaWFFSQ29kZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RjAxNjZBQkJFRDAwRTEzMzA0IC8qIFpYUVJDb2RlUmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZGMTE2NkFCQkVEMDBFMTMzMDQgLyogWlhRUkNvZGVXcml0ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkYyMTY2QUJCRUQwMEUxMzMwNCAvKiBaWEJpbmFyaXplci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RjMxNjZBQkJFRDAwRTEzMzA0IC8qIFpYQmluYXJ5Qml0bWFwLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZGNDE2NkFCQkVEMDBFMTMzMDQgLyogWlhEZWNvZGVIaW50cy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RjUxNjZBQkJFRDAwRTEzMzA0IC8qIFpYRW5jb2RlSGludHMubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkY2MTY2QUJCRUQwMEUxMzMwNCAvKiBaWEVycm9ycy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RjcxNjZBQkJFRDAwRTEzMzA0IC8qIFpYTHVtaW5hbmNlU291cmNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTM4OUI4NjE4MDBFMzVCMDA3NzIzOTIgLyogWlhQREY0MTdTY2FubmluZ0RlY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDA0NkY4MTY2QUJCRUQwMEUxMzMwNCAvKiBaWE11bHRpRm9ybWF0UmVhZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZGOTE2NkFCQkVEMDBFMTMzMDQgLyogWlhNdWx0aUZvcm1hdFdyaXRlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0MDQ2RkExNjZBQkJFRDAwRTEzMzA0IC8qIFpYUmVzdWx0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQwNDZGQjE2NkFCQkVEMDBFMTMzMDQgLyogWlhSZXN1bHRQb2ludC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUxRkNERjAxNkNDOEY3QzAwMEMyN0U1IC8qIFpYUkdCTHVtaW5hbmNlU291cmNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNUZFNUQzNzE2RDBCMDA3MDA4MjZDREIgLyogWlhFeHBhbmRlZFJvdy5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5NzIxNkQzMzM2MTAwRDRDMDQ1IC8qIFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTk3OTE2RDQ2RkYxMDBENEMwNDUgLyogWlhEaW1lbnNpb24ubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5OTgxMTZENDcwRjMwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhXcml0ZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5OThCMTZENDc4QTAwMEQ0QzA0NSAvKiBaWEFTQ0lJRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5OTQxNkQ0N0JDMDAwRDRDMDQ1IC8qIFpYQmFzZTI1NkVuY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5OUE2MTZENDg3OTgwMEQ0QzA0NSAvKiBaWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTE5QUI2MzE3RkU1RTRGMDBBNzFDNDUgLyogWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5OUFFMTZENDg4NjEwMEQ0QzA0NSAvKiBaWERlZmF1bHRQbGFjZW1lbnQubSBpbiBTb3VyY2VzICovLAorCQkJCTI1NDI5OUI2MTZENEEzNjcwMEQ0QzA0NSAvKiBaWEVkaWZhY3RFbmNvZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlCRTE2RDRBNUFBMDBENEMwNDUgLyogWlhFbmNvZGVyQ29udGV4dC5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5QzYxNkQ1QjhFNTAwRDRDMDQ1IC8qIFpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5Q0UxNkQ1QkQ1NDAwRDRDMDQ1IC8qIFpYSGlnaExldmVsRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5RDYxNkQ1Qzk2MTAwRDRDMDQ1IC8qIFpYU3ltYm9sSW5mby5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5RTIxNkQ1RDI0RTAwRDRDMDQ1IC8qIFpYU3ltYm9sU2hhcGVIaW50Lm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTQyOTlFQTE2RDVEODFBMDBENEMwNDUgLyogWlhUZXh0RW5jb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjU0Mjk5RjIxNkQ1RDk0QjAwRDRDMDQ1IC8qIFpYWDEyRW5jb2Rlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUwNEQ0Q0IxNkY2OThDOTAwREY4ODgyIC8qIFpYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UubSBpbiBTb3VyY2VzICovLAorCQkJCTI1MDREOUQ0MTZGRkQzQjMwMERGODg4MiAvKiBaWEF6dGVjQ29kZS5tIGluIFNvdXJjZXMgKi8sCisJCQkJMjUzODlCNkUxN0ZGQzk4MTAwNzcyMzkyIC8qIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLm0gaW4gU291cmNlcyAqLywKKwkJCQkyNTA0RDlERjE2RkZFQjdBMDBERjg4ODIgLyogWlhBenRlY0VuY29kZXIubSBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCisJCTAyNDk1N0YwMTg5ODY0MUIwMDNENEU2QSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDI1NDAzQ0IyMTY2QTk2RkEwMEUxMzMwNCAvKiBaWGluZ09iakMtaU9TICovOworCQkJdGFyZ2V0UHJveHkgPSAwMjQ5NTdGMTE4OTg2NDFCMDAzRDRFNkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9OworCQkwMkQ4MTM3MDE4OTg2NEM3MDA4MTcyMUQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAyNTQwNDE2NTE2NkFBREFDMDBFMTMzMDQgLyogWlhpbmdPYmpDLW9zeCAqLzsKKwkJCXRhcmdldFByb3h5ID0gMDJEODEzNzExODk4NjRDNzAwODE3MjFEIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKKwkJMjU0MDNDQ0IxNjZBOTZGQTAwRTEzMzA0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gMjU0MDNDQjIxNjZBOTZGQTAwRTEzMzA0IC8qIFpYaW5nT2JqQy1pT1MgKi87CisJCQl0YXJnZXRQcm94eSA9IDI1NDAzQ0NBMTY2QTk2RkEwMEUxMzMwNCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisJCTI1NDA0MTdDMTY2QUFEQUMwMEUxMzMwNCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDI1NDA0MTY1MTY2QUFEQUMwMEUxMzMwNCAvKiBaWGluZ09iakMtb3N4ICovOworCQkJdGFyZ2V0UHJveHkgPSAyNTQwNDE3QjE2NkFBREFDMDBFMTMzMDQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9OworLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisJCTAyNDk1ODc1MTg5ODY0MUIwMDNENEU2QSAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ09NUFJFU1NfUE5HX0ZJTEVTID0gTk87CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIlwiJChTREtST09UKS9EZXZlbG9wZXIvTGlicmFyeS9GcmFtZXdvcmtzXCIiLAorCQkJCQkiXCIkKERFVkVMT1BFUl9MSUJSQVJZX0RJUikvRnJhbWV3b3Jrc1wiIiwKKwkJCQkpOworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAiWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9UZXN0cy1pT1MtUHJlZml4LnBjaCI7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSAiWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9aWGluZ09iakNUZXN0cy1JbmZvLnBsaXN0IjsKKwkJCQlJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVCA9IDUuMDsKKwkJCQlQUk9EVUNUX05BTUUgPSAiWlhpbmdPYmpDVGVzdHMtaU9TIGNvcHkiOworCQkJCVdSQVBQRVJfRVhURU5TSU9OID0gb2N0ZXN0OworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJMDI0OTU4NzYxODk4NjQxQjAwM0Q0RTZBIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNPTVBSRVNTX1BOR19GSUxFUyA9IE5POworCQkJCUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCSJcIiQoU0RLUk9PVCkvRGV2ZWxvcGVyL0xpYnJhcnkvRnJhbWV3b3Jrc1wiIiwKKwkJCQkJIlwiJChERVZFTE9QRVJfTElCUkFSWV9ESVIpL0ZyYW1ld29ya3NcIiIsCisJCQkJKTsKKwkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTOworCQkJCUdDQ19QUkVGSVhfSEVBREVSID0gIlpYaW5nT2JqQ1Rlc3RzL1N1cHBvcnRpbmcgRmlsZXMvVGVzdHMtaU9TLVByZWZpeC5wY2giOworCQkJCUlORk9QTElTVF9GSUxFID0gIlpYaW5nT2JqQ1Rlc3RzL1N1cHBvcnRpbmcgRmlsZXMvWlhpbmdPYmpDVGVzdHMtSW5mby5wbGlzdCI7CisJCQkJSVBIT05FT1NfREVQTE9ZTUVOVF9UQVJHRVQgPSA1LjA7CisJCQkJUFJPRFVDVF9OQU1FID0gIlpYaW5nT2JqQ1Rlc3RzLWlPUyBjb3B5IjsKKwkJCQlXUkFQUEVSX0VYVEVOU0lPTiA9IG9jdGVzdDsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMDI0OTU4NzcxODk4NjQxQjAwM0Q0RTZBIC8qIERpc3RyaWJ1dGlvbiAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ09NUFJFU1NfUE5HX0ZJTEVTID0gTk87CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIlwiJChTREtST09UKS9EZXZlbG9wZXIvTGlicmFyeS9GcmFtZXdvcmtzXCIiLAorCQkJCQkiXCIkKERFVkVMT1BFUl9MSUJSQVJZX0RJUikvRnJhbWV3b3Jrc1wiIiwKKwkJCQkpOworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAiWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9UZXN0cy1pT1MtUHJlZml4LnBjaCI7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSAiWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9aWGluZ09iakNUZXN0cy1JbmZvLnBsaXN0IjsKKwkJCQlJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVCA9IDUuMDsKKwkJCQlQUk9EVUNUX05BTUUgPSAiWlhpbmdPYmpDVGVzdHMtaU9TIGNvcHkiOworCQkJCVdSQVBQRVJfRVhURU5TSU9OID0gb2N0ZXN0OworCQkJfTsKKwkJCW5hbWUgPSBEaXN0cmlidXRpb247CisJCX07CisJCTAyQUYzNDZFMTY3MjUyN0YwMDNCOTI1NSAvKiBEaXN0cmlidXRpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQ09OU1RBTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0VOVU1fQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0lOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fX0RVUExJQ0FURV9NRVRIT0RfTUFUQ0ggPSBZRVM7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IFlFUzsKKwkJCQlGUkFNRVdPUktfVkVSU0lPTiA9IDIuMi4zOworCQkJCUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTk7CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5JTklUSUFMSVpFRF9BVVRPUyA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVM7CisJCQkJSVBIT05FT1NfREVQTE9ZTUVOVF9UQVJHRVQgPSA2LjA7CisJCQkJU0RLUk9PVCA9IGlwaG9uZW9zOworCQkJCVZBTElEQVRFX1BST0RVQ1QgPSBZRVM7CisJCQl9OworCQkJbmFtZSA9IERpc3RyaWJ1dGlvbjsKKwkJfTsKKwkJMDJBRjM0NkYxNjcyNTI3RjAwM0I5MjU1IC8qIERpc3RyaWJ1dGlvbiAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCURFQURfQ09ERV9TVFJJUFBJTkcgPSBOTzsKKwkJCQlEU1RST09UID0gL3RtcC9aWGluZ09iakMuZHN0OworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAiaW9zLVByZWZpeC5wY2giOworCQkJCUlQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUID0gNS4wOworCQkJCU9OTFlfQUNUSVZFX0FSQ0ggPSBOTzsKKwkJCQlPVEhFUl9MREZMQUdTID0gIi1PYmpDIjsKKwkJCQlQUk9EVUNUX05BTUUgPSAiWlhpbmdPYmpDLWlPUyI7CisJCQkJUFVCTElDX0hFQURFUlNfRk9MREVSX1BBVEggPSAiJChQUk9KRUNUX05BTUUpSGVhZGVycyI7CisJCQkJU0tJUF9JTlNUQUxMID0gWUVTOworCQkJCVNUUklQX1NUWUxFID0gIm5vbi1nbG9iYWwiOworCQkJCVRBUkdFVEVEX0RFVklDRV9GQU1JTFkgPSAiMSwyIjsKKwkJCX07CisJCQluYW1lID0gRGlzdHJpYnV0aW9uOworCQl9OworCQkwMkFGMzQ3MDE2NzI1MjdGMDAzQjkyNTUgLyogRGlzdHJpYnV0aW9uICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDT01QUkVTU19QTkdfRklMRVMgPSBOTzsKKwkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiXCIkKFNES1JPT1QpL0RldmVsb3Blci9MaWJyYXJ5L0ZyYW1ld29ya3NcIiIsCisJCQkJCSJcIiQoREVWRUxPUEVSX0xJQlJBUllfRElSKS9GcmFtZXdvcmtzXCIiLAorCQkJCSk7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9ICJaWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL1Rlc3RzLWlPUy1QcmVmaXgucGNoIjsKKwkJCQlJTkZPUExJU1RfRklMRSA9ICJaWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL1pYaW5nT2JqQ1Rlc3RzLUluZm8ucGxpc3QiOworCQkJCUlQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUID0gNS4wOworCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7CisJCQkJV1JBUFBFUl9FWFRFTlNJT04gPSBvY3Rlc3Q7CisJCQl9OworCQkJbmFtZSA9IERpc3RyaWJ1dGlvbjsKKwkJfTsKKwkJMDJBRjM0NzIxNjcyNTI3RjAwM0I5MjU1IC8qIERpc3RyaWJ1dGlvbiAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ09NQklORV9ISURQSV9JTUFHRVMgPSBZRVM7CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3YXJmLXdpdGgtZHN5bSI7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCisJCQkJCSJcIiQoU1lTVEVNX0FQUFNfRElSKS9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL0xpYnJhcnkvRnJhbWV3b3Jrc1wiIiwKKwkJCQkpOworCQkJCUdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVTOworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAib3N4LVByZWZpeC5wY2giOworCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjc7CisJCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKKwkJCQlTREtST09UID0gbWFjb3N4OworCQkJfTsKKwkJCW5hbWUgPSBEaXN0cmlidXRpb247CisJCX07CisJCTAyQUYzNDczMTY3MjUyN0YwMDNCOTI1NSAvKiBEaXN0cmlidXRpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNPTUJJTkVfSElEUElfSU1BR0VTID0gWUVTOworCQkJCURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9ICJkd2FyZi13aXRoLWRzeW0iOworCQkJCUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAiXCIkKERFVkVMT1BFUl9MSUJSQVJZX0RJUikvRnJhbWV3b3Jrc1wiIjsKKwkJCQlHQ0NfRU5BQkxFX09CSkNfRVhDRVBUSU9OUyA9IFlFUzsKKwkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTOworCQkJCUdDQ19QUkVGSVhfSEVBREVSID0gIlpYaW5nT2JqQ1Rlc3RzL1N1cHBvcnRpbmcgRmlsZXMvVGVzdHMtT1NYLVByZWZpeC5wY2giOworCQkJCUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUlORk9QTElTVF9GSUxFID0gIlpYaW5nT2JqQ1Rlc3RzL1N1cHBvcnRpbmcgRmlsZXMvWlhpbmdPYmpDVGVzdHMtSW5mby5wbGlzdCI7CisJCQkJTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gMTAuNzsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJCVNES1JPT1QgPSBtYWNvc3g7CisJCQkJV1JBUFBFUl9FWFRFTlNJT04gPSBvY3Rlc3Q7CisJCQl9OworCQkJbmFtZSA9IERpc3RyaWJ1dGlvbjsKKwkJfTsKKwkJMDJBRjM0NzQxNjcyNTI3RjAwM0I5MjU1IC8qIERpc3RyaWJ1dGlvbiAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ09NQklORV9ISURQSV9JTUFHRVMgPSBZRVM7CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3YXJmLXdpdGgtZHN5bSI7CisJCQkJRFlMSUJfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gMTsKKwkJCQlEWUxJQl9DVVJSRU5UX1ZFUlNJT04gPSAxOworCQkJCUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCSIkKGluaGVyaXRlZCkiLAorCQkJCQkiXCIkKFNZU1RFTV9BUFBTX0RJUikvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9MaWJyYXJ5L0ZyYW1ld29ya3NcIiIsCisJCQkJKTsKKwkJCQlHQ0NfRU5BQkxFX09CSkNfRVhDRVBUSU9OUyA9IFlFUzsKKwkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTOworCQkJCUdDQ19QUkVGSVhfSEVBREVSID0gIm9zeC1QcmVmaXgucGNoIjsKKwkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAxMC43OworCQkJCVBST0RVQ1RfTkFNRSA9IFpYaW5nT2JqQzsKKwkJCQlTREtST09UID0gbWFjb3N4OworCQkJCVdSQVBQRVJfRVhURU5TSU9OID0gZnJhbWV3b3JrOworCQkJfTsKKwkJCW5hbWUgPSBEaXN0cmlidXRpb247CisJCX07CisJCTAyRDgxM0YzMTg5ODY0QzcwMDgxNzIxRCAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ09NQklORV9ISURQSV9JTUFHRVMgPSBZRVM7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICJcIiQoREVWRUxPUEVSX0xJQlJBUllfRElSKS9GcmFtZXdvcmtzXCIiOworCQkJCUdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVTOworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAiWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9UZXN0cy1PU1gtUHJlZml4LnBjaCI7CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSAiWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9aWGluZ09iakNUZXN0cy1JbmZvLnBsaXN0IjsKKwkJCQlNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAxMC43OworCQkJCVBST0RVQ1RfTkFNRSA9ICJaWGluZ09iakNUZXN0cy1vc3ggY29weSI7CisJCQkJU0RLUk9PVCA9IG1hY29zeDsKKwkJCQlXUkFQUEVSX0VYVEVOU0lPTiA9IG9jdGVzdDsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTAyRDgxM0Y0MTg5ODY0QzcwMDgxNzIxRCAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDT01CSU5FX0hJRFBJX0lNQUdFUyA9IFlFUzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKKwkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gIlwiJChERVZFTE9QRVJfTElCUkFSWV9ESVIpL0ZyYW1ld29ya3NcIiI7CisJCQkJR0NDX0VOQUJMRV9PQkpDX0VYQ0VQVElPTlMgPSBZRVM7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9ICJaWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL1Rlc3RzLU9TWC1QcmVmaXgucGNoIjsKKwkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlJTkZPUExJU1RfRklMRSA9ICJaWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL1pYaW5nT2JqQ1Rlc3RzLUluZm8ucGxpc3QiOworCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjc7CisJCQkJUFJPRFVDVF9OQU1FID0gIlpYaW5nT2JqQ1Rlc3RzLW9zeCBjb3B5IjsKKwkJCQlTREtST09UID0gbWFjb3N4OworCQkJCVdSQVBQRVJfRVhURU5TSU9OID0gb2N0ZXN0OworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkwMkQ4MTNGNTE4OTg2NEM3MDA4MTcyMUQgLyogRGlzdHJpYnV0aW9uICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDT01CSU5FX0hJRFBJX0lNQUdFUyA9IFlFUzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKKwkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gIlwiJChERVZFTE9QRVJfTElCUkFSWV9ESVIpL0ZyYW1ld29ya3NcIiI7CisJCQkJR0NDX0VOQUJMRV9PQkpDX0VYQ0VQVElPTlMgPSBZRVM7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9ICJaWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL1Rlc3RzLU9TWC1QcmVmaXgucGNoIjsKKwkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlJTkZPUExJU1RfRklMRSA9ICJaWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL1pYaW5nT2JqQ1Rlc3RzLUluZm8ucGxpc3QiOworCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjc7CisJCQkJUFJPRFVDVF9OQU1FID0gIlpYaW5nT2JqQ1Rlc3RzLW9zeCBjb3B5IjsKKwkJCQlTREtST09UID0gbWFjb3N4OworCQkJCVdSQVBQRVJfRVhURU5TSU9OID0gb2N0ZXN0OworCQkJfTsKKwkJCW5hbWUgPSBEaXN0cmlidXRpb247CisJCX07CisJCTI1NDAzQ0Q2MTY2QTk2RkEwMEUxMzMwNCAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9DT05TVEFOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRU5VTV9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9fRFVQTElDQVRFX01FVEhPRF9NQVRDSCA9IFlFUzsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gTk87CisJCQkJRlJBTUVXT1JLX1ZFUlNJT04gPSAyLjIuMzsKKwkJCQlHQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9IGdudTk5OworCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOworCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSJERUJVRz0xIiwKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCisJCQkJKTsKKwkJCQlHQ0NfU1lNQk9MU19QUklWQVRFX0VYVEVSTiA9IE5POworCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTOworCQkJCUdDQ19XQVJOX1VOSU5JVElBTElaRURfQVVUT1MgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTOworCQkJCUlQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUID0gNi4wOworCQkJCVNES1JPT1QgPSBpcGhvbmVvczsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTI1NDAzQ0Q3MTY2QTk2RkEwMEUxMzMwNCAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0NPTlNUQU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9FTlVNX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9JTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX19EVVBMSUNBVEVfTUVUSE9EX01BVENIID0gWUVTOworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJRlJBTUVXT1JLX1ZFUlNJT04gPSAyLjIuMzsKKwkJCQlHQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9IGdudTk5OworCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTOworCQkJCUdDQ19XQVJOX1VOSU5JVElBTElaRURfQVVUT1MgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTOworCQkJCUlQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUID0gNi4wOworCQkJCVNES1JPT1QgPSBpcGhvbmVvczsKKwkJCQlWQUxJREFURV9QUk9EVUNUID0gWUVTOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkyNTQwM0NEOTE2NkE5NkZBMDBFMTMzMDQgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlERUFEX0NPREVfU1RSSVBQSU5HID0gTk87CisJCQkJRFNUUk9PVCA9IC90bXAvWlhpbmdPYmpDLmRzdDsKKwkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTOworCQkJCUdDQ19QUkVGSVhfSEVBREVSID0gImlvcy1QcmVmaXgucGNoIjsKKwkJCQlJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVCA9IDUuMDsKKwkJCQlPTkxZX0FDVElWRV9BUkNIID0gTk87CisJCQkJT1RIRVJfTERGTEFHUyA9ICItT2JqQyI7CisJCQkJUFJPRFVDVF9OQU1FID0gIlpYaW5nT2JqQy1pT1MiOworCQkJCVBVQkxJQ19IRUFERVJTX0ZPTERFUl9QQVRIID0gIiQoUFJPSkVDVF9OQU1FKUhlYWRlcnMiOworCQkJCVNLSVBfSU5TVEFMTCA9IFlFUzsKKwkJCQlTVFJJUF9TVFlMRSA9ICJub24tZ2xvYmFsIjsKKwkJCQlUQVJHRVRFRF9ERVZJQ0VfRkFNSUxZID0gIjEsMiI7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQkyNTQwM0NEQTE2NkE5NkZBMDBFMTMzMDQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCURFQURfQ09ERV9TVFJJUFBJTkcgPSBOTzsKKwkJCQlEU1RST09UID0gL3RtcC9aWGluZ09iakMuZHN0OworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAiaW9zLVByZWZpeC5wY2giOworCQkJCUlQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUID0gNS4wOworCQkJCU9OTFlfQUNUSVZFX0FSQ0ggPSBOTzsKKwkJCQlPVEhFUl9MREZMQUdTID0gIi1PYmpDIjsKKwkJCQlQUk9EVUNUX05BTUUgPSAiWlhpbmdPYmpDLWlPUyI7CisJCQkJUFVCTElDX0hFQURFUlNfRk9MREVSX1BBVEggPSAiJChQUk9KRUNUX05BTUUpSGVhZGVycyI7CisJCQkJU0tJUF9JTlNUQUxMID0gWUVTOworCQkJCVNUUklQX1NUWUxFID0gIm5vbi1nbG9iYWwiOworCQkJCVRBUkdFVEVEX0RFVklDRV9GQU1JTFkgPSAiMSwyIjsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMjU0MDNDREMxNjZBOTZGQTAwRTEzMzA0IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDT01QUkVTU19QTkdfRklMRVMgPSBOTzsKKwkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiXCIkKFNES1JPT1QpL0RldmVsb3Blci9MaWJyYXJ5L0ZyYW1ld29ya3NcIiIsCisJCQkJCSJcIiQoREVWRUxPUEVSX0xJQlJBUllfRElSKS9GcmFtZXdvcmtzXCIiLAorCQkJCSk7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9ICJaWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL1Rlc3RzLWlPUy1QcmVmaXgucGNoIjsKKwkJCQlJTkZPUExJU1RfRklMRSA9ICJaWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL1pYaW5nT2JqQ1Rlc3RzLUluZm8ucGxpc3QiOworCQkJCUlQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUID0gNS4wOworCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7CisJCQkJV1JBUFBFUl9FWFRFTlNJT04gPSBvY3Rlc3Q7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQkyNTQwM0NERDE2NkE5NkZBMDBFMTMzMDQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ09NUFJFU1NfUE5HX0ZJTEVTID0gTk87CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIlwiJChTREtST09UKS9EZXZlbG9wZXIvTGlicmFyeS9GcmFtZXdvcmtzXCIiLAorCQkJCQkiXCIkKERFVkVMT1BFUl9MSUJSQVJZX0RJUikvRnJhbWV3b3Jrc1wiIiwKKwkJCQkpOworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAiWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9UZXN0cy1pT1MtUHJlZml4LnBjaCI7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSAiWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9aWGluZ09iakNUZXN0cy1JbmZvLnBsaXN0IjsKKwkJCQlJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVCA9IDUuMDsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJCVdSQVBQRVJfRVhURU5TSU9OID0gb2N0ZXN0OworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkyNTQwNDE4ODE2NkFBREFEMDBFMTMzMDQgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNPTUJJTkVfSElEUElfSU1BR0VTID0gWUVTOworCQkJCUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCSIkKGluaGVyaXRlZCkiLAorCQkJCQkiXCIkKFNZU1RFTV9BUFBTX0RJUikvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9MaWJyYXJ5L0ZyYW1ld29ya3NcIiIsCisJCQkJKTsKKwkJCQlHQ0NfRU5BQkxFX09CSkNfRVhDRVBUSU9OUyA9IFlFUzsKKwkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTOworCQkJCUdDQ19QUkVGSVhfSEVBREVSID0gIm9zeC1QcmVmaXgucGNoIjsKKwkJCQlNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAxMC43OworCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7CisJCQkJU0RLUk9PVCA9IG1hY29zeDsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTI1NDA0MTg5MTY2QUFEQUQwMEUxMzMwNCAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDT01CSU5FX0hJRFBJX0lNQUdFUyA9IFlFUzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKKwkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkJIlwiJChTWVNURU1fQVBQU19ESVIpL1hjb2RlLmFwcC9Db250ZW50cy9EZXZlbG9wZXIvTGlicmFyeS9GcmFtZXdvcmtzXCIiLAorCQkJCSk7CisJCQkJR0NDX0VOQUJMRV9PQkpDX0VYQ0VQVElPTlMgPSBZRVM7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9ICJvc3gtUHJlZml4LnBjaCI7CisJCQkJTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gMTAuNzsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJCVNES1JPT1QgPSBtYWNvc3g7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTI1NDA0MThCMTY2QUFEQUQwMEUxMzMwNCAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ09NQklORV9ISURQSV9JTUFHRVMgPSBZRVM7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICJcIiQoREVWRUxPUEVSX0xJQlJBUllfRElSKS9GcmFtZXdvcmtzXCIiOworCQkJCUdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVTOworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAiWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9UZXN0cy1PU1gtUHJlZml4LnBjaCI7CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSAiWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9aWGluZ09iakNUZXN0cy1JbmZvLnBsaXN0IjsKKwkJCQlNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAxMC43OworCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7CisJCQkJU0RLUk9PVCA9IG1hY29zeDsKKwkJCQlXUkFQUEVSX0VYVEVOU0lPTiA9IG9jdGVzdDsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTI1NDA0MThDMTY2QUFEQUQwMEUxMzMwNCAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDT01CSU5FX0hJRFBJX0lNQUdFUyA9IFlFUzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKKwkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gIlwiJChERVZFTE9QRVJfTElCUkFSWV9ESVIpL0ZyYW1ld29ya3NcIiI7CisJCQkJR0NDX0VOQUJMRV9PQkpDX0VYQ0VQVElPTlMgPSBZRVM7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9ICJaWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL1Rlc3RzLU9TWC1QcmVmaXgucGNoIjsKKwkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlJTkZPUExJU1RfRklMRSA9ICJaWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL1pYaW5nT2JqQ1Rlc3RzLUluZm8ucGxpc3QiOworCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjc7CisJCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKKwkJCQlTREtST09UID0gbWFjb3N4OworCQkJCVdSQVBQRVJfRVhURU5TSU9OID0gb2N0ZXN0OworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkyNTQwNDNCMTE2NkFCQTBBMDBFMTMzMDQgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNPTUJJTkVfSElEUElfSU1BR0VTID0gWUVTOworCQkJCURZTElCX0NPTVBBVElCSUxJVFlfVkVSU0lPTiA9IDE7CisJCQkJRFlMSUJfQ1VSUkVOVF9WRVJTSU9OID0gMTsKKwkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkJIlwiJChTWVNURU1fQVBQU19ESVIpL1hjb2RlLmFwcC9Db250ZW50cy9EZXZlbG9wZXIvTGlicmFyeS9GcmFtZXdvcmtzXCIiLAorCQkJCSk7CisJCQkJR0NDX0VOQUJMRV9PQkpDX0VYQ0VQVElPTlMgPSBZRVM7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9ICJvc3gtUHJlZml4LnBjaCI7CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gMTAuNzsKKwkJCQlQUk9EVUNUX05BTUUgPSBaWGluZ09iakM7CisJCQkJU0RLUk9PVCA9IG1hY29zeDsKKwkJCQlXUkFQUEVSX0VYVEVOU0lPTiA9IGZyYW1ld29yazsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTI1NDA0M0IyMTY2QUJBMEEwMEUxMzMwNCAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDT01CSU5FX0hJRFBJX0lNQUdFUyA9IFlFUzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKKwkJCQlEWUxJQl9DT01QQVRJQklMSVRZX1ZFUlNJT04gPSAxOworCQkJCURZTElCX0NVUlJFTlRfVkVSU0lPTiA9IDE7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCisJCQkJCSJcIiQoU1lTVEVNX0FQUFNfRElSKS9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL0xpYnJhcnkvRnJhbWV3b3Jrc1wiIiwKKwkJCQkpOworCQkJCUdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVTOworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAib3N4LVByZWZpeC5wY2giOworCQkJCUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOworCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjc7CisJCQkJUFJPRFVDVF9OQU1FID0gWlhpbmdPYmpDOworCQkJCVNES1JPT1QgPSBtYWNvc3g7CisJCQkJV1JBUFBFUl9FWFRFTlNJT04gPSBmcmFtZXdvcms7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwkJMDI0OTU4NzQxODk4NjQxQjAwM0Q0RTZBIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJCbGFja2JveCBUZXN0cyBpT1MiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMDI0OTU4NzUxODk4NjQxQjAwM0Q0RTZBIC8qIERlYnVnICovLAorCQkJCTAyNDk1ODc2MTg5ODY0MUIwMDNENEU2QSAvKiBSZWxlYXNlICovLAorCQkJCTAyNDk1ODc3MTg5ODY0MUIwMDNENEU2QSAvKiBEaXN0cmlidXRpb24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMDJEODEzRjIxODk4NjRDNzAwODE3MjFEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJCbGFja2JveCBUZXN0cyBPUyBYIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTAyRDgxM0YzMTg5ODY0QzcwMDgxNzIxRCAvKiBEZWJ1ZyAqLywKKwkJCQkwMkQ4MTNGNDE4OTg2NEM3MDA4MTcyMUQgLyogUmVsZWFzZSAqLywKKwkJCQkwMkQ4MTNGNTE4OTg2NEM3MDA4MTcyMUQgLyogRGlzdHJpYnV0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTI1NDAzQ0FEMTY2QTk2RjkwMEUxMzMwNCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIlpYaW5nT2JqQyIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkyNTQwM0NENjE2NkE5NkZBMDBFMTMzMDQgLyogRGVidWcgKi8sCisJCQkJMjU0MDNDRDcxNjZBOTZGQTAwRTEzMzA0IC8qIFJlbGVhc2UgKi8sCisJCQkJMDJBRjM0NkUxNjcyNTI3RjAwM0I5MjU1IC8qIERpc3RyaWJ1dGlvbiAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworCQkyNTQwM0NEODE2NkE5NkZBMDBFMTMzMDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIlpYaW5nT2JqQy1pT1MiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMjU0MDNDRDkxNjZBOTZGQTAwRTEzMzA0IC8qIERlYnVnICovLAorCQkJCTI1NDAzQ0RBMTY2QTk2RkEwMEUxMzMwNCAvKiBSZWxlYXNlICovLAorCQkJCTAyQUYzNDZGMTY3MjUyN0YwMDNCOTI1NSAvKiBEaXN0cmlidXRpb24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMjU0MDNDREIxNjZBOTZGQTAwRTEzMzA0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJVbml0IFRlc3RzIGlPUyIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkyNTQwM0NEQzE2NkE5NkZBMDBFMTMzMDQgLyogRGVidWcgKi8sCisJCQkJMjU0MDNDREQxNjZBOTZGQTAwRTEzMzA0IC8qIFJlbGVhc2UgKi8sCisJCQkJMDJBRjM0NzAxNjcyNTI3RjAwM0I5MjU1IC8qIERpc3RyaWJ1dGlvbiAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworCQkyNTQwNDE4NzE2NkFBREFEMDBFMTMzMDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIlpYaW5nT2JqQy1vc3giICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMjU0MDQxODgxNjZBQURBRDAwRTEzMzA0IC8qIERlYnVnICovLAorCQkJCTI1NDA0MTg5MTY2QUFEQUQwMEUxMzMwNCAvKiBSZWxlYXNlICovLAorCQkJCTAyQUYzNDcyMTY3MjUyN0YwMDNCOTI1NSAvKiBEaXN0cmlidXRpb24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMjU0MDQxOEExNjZBQURBRDAwRTEzMzA0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJVbml0IFRlc3RzIE9TIFgiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMjU0MDQxOEIxNjZBQURBRDAwRTEzMzA0IC8qIERlYnVnICovLAorCQkJCTI1NDA0MThDMTY2QUFEQUQwMEUxMzMwNCAvKiBSZWxlYXNlICovLAorCQkJCTAyQUYzNDczMTY3MjUyN0YwMDNCOTI1NSAvKiBEaXN0cmlidXRpb24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMjU0MDQzQjAxNjZBQkEwQTAwRTEzMzA0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJPUyBYIEZyYW1ld29yayIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkyNTQwNDNCMTE2NkFCQTBBMDBFMTMzMDQgLyogRGVidWcgKi8sCisJCQkJMjU0MDQzQjIxNjZBQkEwQTAwRTEzMzA0IC8qIFJlbGVhc2UgKi8sCisJCQkJMDJBRjM0NzQxNjcyNTI3RjAwM0I5MjU1IC8qIERpc3RyaWJ1dGlvbiAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCX07CisJcm9vdE9iamVjdCA9IDI1NDAzQ0FBMTY2QTk2RjkwMEUxMzMwNCAvKiBQcm9qZWN0IG9iamVjdCAqLzsKK30KZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy54Y29kZXByb2ovcHJvamVjdC54Y3dvcmtzcGFjZS9jb250ZW50cy54Y3dvcmtzcGFjZWRhdGEgYi9aWGluZ09iakMueGNvZGVwcm9qL3Byb2plY3QueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3BhY2VkYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllM2IxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMueGNvZGVwcm9qL3Byb2plY3QueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3BhY2VkYXRhCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXb3Jrc3BhY2UKKyAgIHZlcnNpb24gPSAiMS4wIj4KKyAgIDxGaWxlUmVmCisgICAgICBsb2NhdGlvbiA9ICJzZWxmOlpYaW5nT2JqQy54Y29kZXByb2oiPgorICAgPC9GaWxlUmVmPgorPC9Xb3Jrc3BhY2U+CmRpZmYgLS1naXQgYS9aWGluZ09iakMueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvWlhpbmdPYmpDLWlPUy54Y3NjaGVtZSBiL1pYaW5nT2JqQy54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9aWGluZ09iakMtaU9TLnhjc2NoZW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZGM5YjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvWlhpbmdPYmpDLWlPUy54Y3NjaGVtZQpAQCAtMCwwICsxLDg4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFNjaGVtZQorICAgTGFzdFVwZ3JhZGVWZXJzaW9uID0gIjA1MTAiCisgICB2ZXJzaW9uID0gIjEuMyI+CisgICA8QnVpbGRBY3Rpb24KKyAgICAgIHBhcmFsbGVsaXplQnVpbGRhYmxlcyA9ICJZRVMiCisgICAgICBidWlsZEltcGxpY2l0RGVwZW5kZW5jaWVzID0gIllFUyI+CisgICAgICA8QnVpbGRBY3Rpb25FbnRyaWVzPgorICAgICAgICAgPEJ1aWxkQWN0aW9uRW50cnkKKyAgICAgICAgICAgIGJ1aWxkRm9yVGVzdGluZyA9ICJZRVMiCisgICAgICAgICAgICBidWlsZEZvclJ1bm5pbmcgPSAiWUVTIgorICAgICAgICAgICAgYnVpbGRGb3JQcm9maWxpbmcgPSAiWUVTIgorICAgICAgICAgICAgYnVpbGRGb3JBcmNoaXZpbmcgPSAiWUVTIgorICAgICAgICAgICAgYnVpbGRGb3JBbmFseXppbmcgPSAiWUVTIj4KKyAgICAgICAgICAgIDxCdWlsZGFibGVSZWZlcmVuY2UKKyAgICAgICAgICAgICAgIEJ1aWxkYWJsZUlkZW50aWZpZXIgPSAicHJpbWFyeSIKKyAgICAgICAgICAgICAgIEJsdWVwcmludElkZW50aWZpZXIgPSAiMjU0MDNDQjIxNjZBOTZGQTAwRTEzMzA0IgorICAgICAgICAgICAgICAgQnVpbGRhYmxlTmFtZSA9ICJsaWJaWGluZ09iakMtaU9TLmEiCisgICAgICAgICAgICAgICBCbHVlcHJpbnROYW1lID0gIlpYaW5nT2JqQy1pT1MiCisgICAgICAgICAgICAgICBSZWZlcmVuY2VkQ29udGFpbmVyID0gImNvbnRhaW5lcjpaWGluZ09iakMueGNvZGVwcm9qIj4KKyAgICAgICAgICAgIDwvQnVpbGRhYmxlUmVmZXJlbmNlPgorICAgICAgICAgPC9CdWlsZEFjdGlvbkVudHJ5PgorICAgICAgPC9CdWlsZEFjdGlvbkVudHJpZXM+CisgICA8L0J1aWxkQWN0aW9uPgorICAgPFRlc3RBY3Rpb24KKyAgICAgIHNlbGVjdGVkRGVidWdnZXJJZGVudGlmaWVyID0gIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5EZWJ1Z2dlci5MTERCIgorICAgICAgc2VsZWN0ZWRMYXVuY2hlcklkZW50aWZpZXIgPSAiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9uLkxhdW5jaGVyLkxMREIiCisgICAgICBzaG91bGRVc2VMYXVuY2hTY2hlbWVBcmdzRW52ID0gIllFUyIKKyAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJEZWJ1ZyI+CisgICAgICA8VGVzdGFibGVzPgorICAgICAgICAgPFRlc3RhYmxlUmVmZXJlbmNlCisgICAgICAgICAgICBza2lwcGVkID0gIk5PIj4KKyAgICAgICAgICAgIDxCdWlsZGFibGVSZWZlcmVuY2UKKyAgICAgICAgICAgICAgIEJ1aWxkYWJsZUlkZW50aWZpZXIgPSAicHJpbWFyeSIKKyAgICAgICAgICAgICAgIEJsdWVwcmludElkZW50aWZpZXIgPSAiMjU0MDNDQzMxNjZBOTZGQTAwRTEzMzA0IgorICAgICAgICAgICAgICAgQnVpbGRhYmxlTmFtZSA9ICJVbml0IFRlc3RzIGlPUy5vY3Rlc3QiCisgICAgICAgICAgICAgICBCbHVlcHJpbnROYW1lID0gIlVuaXQgVGVzdHMgaU9TIgorICAgICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6WlhpbmdPYmpDLnhjb2RlcHJvaiI+CisgICAgICAgICAgICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4KKyAgICAgICAgIDwvVGVzdGFibGVSZWZlcmVuY2U+CisgICAgICAgICA8VGVzdGFibGVSZWZlcmVuY2UKKyAgICAgICAgICAgIHNraXBwZWQgPSAiTk8iPgorICAgICAgICAgICAgPEJ1aWxkYWJsZVJlZmVyZW5jZQorICAgICAgICAgICAgICAgQnVpbGRhYmxlSWRlbnRpZmllciA9ICJwcmltYXJ5IgorICAgICAgICAgICAgICAgQmx1ZXByaW50SWRlbnRpZmllciA9ICIwMjQ5NTdFRjE4OTg2NDFCMDAzRDRFNkEiCisgICAgICAgICAgICAgICBCdWlsZGFibGVOYW1lID0gIlpYaW5nT2JqQ1Rlc3RzLWlPUyBjb3B5Lm9jdGVzdCIKKyAgICAgICAgICAgICAgIEJsdWVwcmludE5hbWUgPSAiQmxhY2tib3ggVGVzdHMgaU9TIgorICAgICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6WlhpbmdPYmpDLnhjb2RlcHJvaiI+CisgICAgICAgICAgICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4KKyAgICAgICAgIDwvVGVzdGFibGVSZWZlcmVuY2U+CisgICAgICA8L1Rlc3RhYmxlcz4KKyAgIDwvVGVzdEFjdGlvbj4KKyAgIDxMYXVuY2hBY3Rpb24KKyAgICAgIHNlbGVjdGVkRGVidWdnZXJJZGVudGlmaWVyID0gIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5EZWJ1Z2dlci5MTERCIgorICAgICAgc2VsZWN0ZWRMYXVuY2hlcklkZW50aWZpZXIgPSAiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9uLkxhdW5jaGVyLkxMREIiCisgICAgICBsYXVuY2hTdHlsZSA9ICIwIgorICAgICAgdXNlQ3VzdG9tV29ya2luZ0RpcmVjdG9yeSA9ICJOTyIKKyAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJEZWJ1ZyIKKyAgICAgIGlnbm9yZXNQZXJzaXN0ZW50U3RhdGVPbkxhdW5jaCA9ICJOTyIKKyAgICAgIGRlYnVnRG9jdW1lbnRWZXJzaW9uaW5nID0gIllFUyIKKyAgICAgIGFsbG93TG9jYXRpb25TaW11bGF0aW9uID0gIllFUyI+CisgICAgICA8TWFjcm9FeHBhbnNpb24+CisgICAgICAgICA8QnVpbGRhYmxlUmVmZXJlbmNlCisgICAgICAgICAgICBCdWlsZGFibGVJZGVudGlmaWVyID0gInByaW1hcnkiCisgICAgICAgICAgICBCbHVlcHJpbnRJZGVudGlmaWVyID0gIjI1NDAzQ0IyMTY2QTk2RkEwMEUxMzMwNCIKKyAgICAgICAgICAgIEJ1aWxkYWJsZU5hbWUgPSAibGliWlhpbmdPYmpDLWlPUy5hIgorICAgICAgICAgICAgQmx1ZXByaW50TmFtZSA9ICJaWGluZ09iakMtaU9TIgorICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6WlhpbmdPYmpDLnhjb2RlcHJvaiI+CisgICAgICAgICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4KKyAgICAgIDwvTWFjcm9FeHBhbnNpb24+CisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8L0FkZGl0aW9uYWxPcHRpb25zPgorICAgPC9MYXVuY2hBY3Rpb24+CisgICA8UHJvZmlsZUFjdGlvbgorICAgICAgc2hvdWxkVXNlTGF1bmNoU2NoZW1lQXJnc0VudiA9ICJZRVMiCisgICAgICBzYXZlZFRvb2xJZGVudGlmaWVyID0gIiIKKyAgICAgIHVzZUN1c3RvbVdvcmtpbmdEaXJlY3RvcnkgPSAiTk8iCisgICAgICBidWlsZENvbmZpZ3VyYXRpb24gPSAiUmVsZWFzZSIKKyAgICAgIGRlYnVnRG9jdW1lbnRWZXJzaW9uaW5nID0gIllFUyI+CisgICA8L1Byb2ZpbGVBY3Rpb24+CisgICA8QW5hbHl6ZUFjdGlvbgorICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gIkRlYnVnIj4KKyAgIDwvQW5hbHl6ZUFjdGlvbj4KKyAgIDxBcmNoaXZlQWN0aW9uCisgICAgICBidWlsZENvbmZpZ3VyYXRpb24gPSAiUmVsZWFzZSIKKyAgICAgIHJldmVhbEFyY2hpdmVJbk9yZ2FuaXplciA9ICJZRVMiPgorICAgPC9BcmNoaXZlQWN0aW9uPgorPC9TY2hlbWU+CmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhCYXJjb2RlRm9ybWF0LmggYi9aWGluZ09iakMvWlhCYXJjb2RlRm9ybWF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3NDU5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWEJhcmNvZGVGb3JtYXQuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEVudW1lcmF0ZXMgYmFyY29kZSBmb3JtYXRzIGtub3duIHRvIHRoaXMgcGFja2FnZS4gUGxlYXNlIGtlZXAgYWxwaGFiZXRpemVkLgorICovCit0eXBlZGVmIGVudW0geworICAvKiogQXp0ZWMgMkQgYmFyY29kZSBmb3JtYXQuICovCisgIGtCYXJjb2RlRm9ybWF0QXp0ZWMsCisKKyAgLyoqIENPREFCQVIgMUQgZm9ybWF0LiAqLworICBrQmFyY29kZUZvcm1hdENvZGFiYXIsCisKKyAgLyoqIENvZGUgMzkgMUQgZm9ybWF0LiAqLworICBrQmFyY29kZUZvcm1hdENvZGUzOSwKKworICAvKiogQ29kZSA5MyAxRCBmb3JtYXQuICovCisgIGtCYXJjb2RlRm9ybWF0Q29kZTkzLAorCisgIC8qKiBDb2RlIDEyOCAxRCBmb3JtYXQuICovCisgIGtCYXJjb2RlRm9ybWF0Q29kZTEyOCwKKworICAvKiogRGF0YSBNYXRyaXggMkQgYmFyY29kZSBmb3JtYXQuICovCisgIGtCYXJjb2RlRm9ybWF0RGF0YU1hdHJpeCwKKworICAvKiogRUFOLTggMUQgZm9ybWF0LiAqLworICBrQmFyY29kZUZvcm1hdEVhbjgsCisKKyAgLyoqIEVBTi0xMyAxRCBmb3JtYXQuICovCisgIGtCYXJjb2RlRm9ybWF0RWFuMTMsCisKKyAgLyoqIElURiAoSW50ZXJsZWF2ZWQgVHdvIG9mIEZpdmUpIDFEIGZvcm1hdC4gKi8KKyAga0JhcmNvZGVGb3JtYXRJVEYsCisKKyAgLyoqIE1heGlDb2RlIDJEIGJhcmNvZGUgZm9ybWF0LiAqLworICBrQmFyY29kZUZvcm1hdE1heGlDb2RlLAorCisgIC8qKiBQREY0MTcgZm9ybWF0LiAqLworICBrQmFyY29kZUZvcm1hdFBERjQxNywKKworICAvKiogUVIgQ29kZSAyRCBiYXJjb2RlIGZvcm1hdC4gKi8KKyAga0JhcmNvZGVGb3JtYXRRUkNvZGUsCisKKyAgLyoqIFJTUyAxNCAqLworICBrQmFyY29kZUZvcm1hdFJTUzE0LAorCisgIC8qKiBSU1MgRVhQQU5ERUQgKi8KKyAga0JhcmNvZGVGb3JtYXRSU1NFeHBhbmRlZCwKKworICAvKiogVVBDLUEgMUQgZm9ybWF0LiAqLworICBrQmFyY29kZUZvcm1hdFVQQ0EsCisKKyAgLyoqIFVQQy1FIDFEIGZvcm1hdC4gKi8KKyAga0JhcmNvZGVGb3JtYXRVUENFLAorCisgIC8qKiBVUEMvRUFOIGV4dGVuc2lvbiBmb3JtYXQuIE5vdCBhIHN0YW5kLWFsb25lIGZvcm1hdC4gKi8KKyAga0JhcmNvZGVGb3JtYXRVUENFQU5FeHRlbnNpb24KK30gWlhCYXJjb2RlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYQmluYXJpemVyLmggYi9aWGluZ09iakMvWlhCaW5hcml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODYyZTJmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYQmluYXJpemVyLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmIFRBUkdFVF9PU19FTUJFRERFRCB8fCBUQVJHRVRfSVBIT05FX1NJTVVMQVRPUgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2Vsc2UKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2VuZGlmCisKKyNpbXBvcnQgIlpYQml0QXJyYXkuaCIKKyNpbXBvcnQgIlpYQml0TWF0cml4LmgiCisjaW1wb3J0ICJaWEx1bWluYW5jZVNvdXJjZS5oIgorCisvKioKKyAqIFRoaXMgY2xhc3MgaGllcmFyY2h5IHByb3ZpZGVzIGEgc2V0IG9mIG1ldGhvZHMgdG8gY29udmVydCBsdW1pbmFuY2UgZGF0YSB0byAxIGJpdCBkYXRhLgorICogSXQgYWxsb3dzIHRoZSBhbGdvcml0aG0gdG8gdmFyeSBwb2x5bW9ycGhpY2FsbHksIGZvciBleGFtcGxlIGFsbG93aW5nIGEgdmVyeSBleHBlbnNpdmUKKyAqIHRocmVzaG9sZGluZyB0ZWNobmlxdWUgZm9yIHNlcnZlcnMgYW5kIGEgZmFzdCBvbmUgZm9yIG1vYmlsZS4gSXQgYWxzbyBwZXJtaXRzIHRoZSBpbXBsZW1lbnRhdGlvbgorICogdG8gdmFyeSwgZS5nLiBhIEpOSSB2ZXJzaW9uIGZvciBBbmRyb2lkIGFuZCBhIEphdmEgZmFsbGJhY2sgdmVyc2lvbiBmb3Igb3RoZXIgcGxhdGZvcm1zLgorICovCisKK0BpbnRlcmZhY2UgWlhCaW5hcml6ZXIgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgWlhMdW1pbmFuY2VTb3VyY2UgKmx1bWluYW5jZVNvdXJjZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgd2lkdGg7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGhlaWdodDsKKworLSAoaWQpaW5pdFdpdGhTb3VyY2U6KFpYTHVtaW5hbmNlU291cmNlICopc291cmNlOworKyAoaWQpYmluYXJpemVyV2l0aFNvdXJjZTooWlhMdW1pbmFuY2VTb3VyY2UgKilzb3VyY2U7CistIChaWEJpdE1hdHJpeCAqKWJsYWNrTWF0cml4V2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoWlhCaXRBcnJheSAqKWJsYWNrUm93OihpbnQpeSByb3c6KFpYQml0QXJyYXkgKilyb3cgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CistIChaWEJpbmFyaXplciAqKWNyZWF0ZUJpbmFyaXplcjooWlhMdW1pbmFuY2VTb3VyY2UgKilzb3VyY2U7CistIChDR0ltYWdlUmVmKWNyZWF0ZUltYWdlIENGX1JFVFVSTlNfUkVUQUlORUQ7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9aWEJpbmFyaXplci5tIGIvWlhpbmdPYmpDL1pYQmluYXJpemVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiZTc0NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWEJpbmFyaXplci5tCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpbmFyaXplci5oIgorCisjaWYgVEFSR0VUX09TX0VNQkVEREVEIHx8IFRBUkdFVF9JUEhPTkVfU0lNVUxBVE9SCisjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgorI2RlZmluZSBaWEJsYWNrIFtbVUlDb2xvciBibGFja0NvbG9yXSBDR0NvbG9yXQorI2RlZmluZSBaWFdoaXRlIFtbVUlDb2xvciB3aGl0ZUNvbG9yXSBDR0NvbG9yXQorI2Vsc2UKKyNkZWZpbmUgWlhCbGFjayBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKQorI2RlZmluZSBaWFdoaXRlIENHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yV2hpdGUpCisjZW5kaWYKKworQGltcGxlbWVudGF0aW9uIFpYQmluYXJpemVyCisKKy0gKGlkKWluaXRXaXRoU291cmNlOihaWEx1bWluYW5jZVNvdXJjZSAqKXNvdXJjZSB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2x1bWluYW5jZVNvdXJjZSA9IHNvdXJjZTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aEx1bWluYW5jZVNvdXJjZTooWlhMdW1pbmFuY2VTb3VyY2UgKilzb3VyY2UgeworICByZXR1cm4gW3NlbGYgaW5pdFdpdGhTb3VyY2U6c291cmNlXTsKK30KKworKyAoaWQpYmluYXJpemVyV2l0aFNvdXJjZTooWlhMdW1pbmFuY2VTb3VyY2UgKilzb3VyY2UgeworICByZXR1cm4gW1tzZWxmIGFsbG9jXSBpbml0V2l0aEx1bWluYW5jZVNvdXJjZTpzb3VyY2VdOworfQorCisvKioKKyAqIENvbnZlcnRzIG9uZSByb3cgb2YgbHVtaW5hbmNlIGRhdGEgdG8gMSBiaXQgZGF0YS4gTWF5IGFjdHVhbGx5IGRvIHRoZSBjb252ZXJzaW9uLCBvciByZXR1cm4KKyAqIGNhY2hlZCBkYXRhLiBDYWxsZXJzIHNob3VsZCBhc3N1bWUgdGhpcyBtZXRob2QgaXMgZXhwZW5zaXZlIGFuZCBjYWxsIGl0IGFzIHNlbGRvbSBhcyBwb3NzaWJsZS4KKyAqIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciBkZWNvZGluZyAxRCBiYXJjb2RlcyBhbmQgbWF5IGNob29zZSB0byBhcHBseSBzaGFycGVuaW5nLgorICogRm9yIGNhbGxlcnMgd2hpY2ggb25seSBleGFtaW5lIG9uZSByb3cgb2YgcGl4ZWxzIGF0IGEgdGltZSwgdGhlIHNhbWUgQml0QXJyYXkgc2hvdWxkIGJlIHJldXNlZAorICogYW5kIHBhc3NlZCBpbiB3aXRoIGVhY2ggY2FsbCBmb3IgcGVyZm9ybWFuY2UuIEhvd2V2ZXIgaXQgaXMgbGVnYWwgdG8ga2VlcCBtb3JlIHRoYW4gb25lIHJvdworICogYXQgYSB0aW1lIGlmIG5lZWRlZC4KKyAqLworLSAoWlhCaXRBcnJheSAqKWJsYWNrUm93OihpbnQpeSByb3c6KFpYQml0QXJyYXkgKilyb3cgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJZb3UgbXVzdCBvdmVycmlkZSAlQCBpbiBhIHN1YmNsYXNzIiwgTlNTdHJpbmdGcm9tU2VsZWN0b3IoX2NtZCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKK30KKworCisvKioKKyAqIENvbnZlcnRzIGEgMkQgYXJyYXkgb2YgbHVtaW5hbmNlIGRhdGEgdG8gMSBiaXQgZGF0YS4gQXMgYWJvdmUsIGFzc3VtZSB0aGlzIG1ldGhvZCBpcyBleHBlbnNpdmUKKyAqIGFuZCBkbyBub3QgY2FsbCBpdCByZXBlYXRlZGx5LiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgZGVjb2RpbmcgMkQgYmFyY29kZXMgYW5kIG1heSBvcgorICogbWF5IG5vdCBhcHBseSBzaGFycGVuaW5nLiBUaGVyZWZvcmUsIGEgcm93IGZyb20gdGhpcyBtYXRyaXggbWF5IG5vdCBiZSBpZGVudGljYWwgdG8gb25lCisgKiBmZXRjaGVkIHVzaW5nIGJsYWNrUm93KCksIHNvIGRvbid0IG1peCBhbmQgbWF0Y2ggYmV0d2VlbiB0aGVtLgorICovCistIChaWEJpdE1hdHJpeCAqKWJsYWNrTWF0cml4V2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiWW91IG11c3Qgb3ZlcnJpZGUgJUAgaW4gYSBzdWJjbGFzcyIsIE5TU3RyaW5nRnJvbVNlbGVjdG9yKF9jbWQpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07Cit9CisKKworLyoqCisgKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBzYW1lIHR5cGUgYXMgdGhpcyBCaW5hcml6ZXIgaW1wbGVtZW50YXRpb24sIGJ1dCB3aXRoIHByaXN0aW5lCisgKiBzdGF0ZS4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBCaW5hcml6ZXIgaW1wbGVtZW50YXRpb25zIG1heSBiZSBzdGF0ZWZ1bCwgZS5nLiBrZWVwaW5nIGEgY2FjaGUKKyAqIG9mIDEgYml0IGRhdGEuIFNlZSBFZmZlY3RpdmUgSmF2YSBmb3Igd2h5IHdlIGNhbid0IHVzZSBKYXZhJ3MgY2xvbmUoKSBtZXRob2QuCisgKi8KKy0gKFpYQmluYXJpemVyICopY3JlYXRlQmluYXJpemVyOihaWEx1bWluYW5jZVNvdXJjZSAqKXNvdXJjZSB7CisgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIllvdSBtdXN0IG92ZXJyaWRlICVAIGluIGEgc3ViY2xhc3MiLCBOU1N0cmluZ0Zyb21TZWxlY3RvcihfY21kKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWxdOworfQorCistIChDR0ltYWdlUmVmKWNyZWF0ZUltYWdlIENGX1JFVFVSTlNfUkVUQUlORUQgeworICBaWEJpdE1hdHJpeCAqbWF0cml4ID0gW3NlbGYgYmxhY2tNYXRyaXhXaXRoRXJyb3I6bmlsXTsKKyAgaWYgKCFtYXRyaXgpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIFpYTHVtaW5hbmNlU291cmNlICpzb3VyY2UgPSBbc2VsZiBsdW1pbmFuY2VTb3VyY2VdOworCisgIGludCB3aWR0aCA9IHNvdXJjZS53aWR0aDsKKyAgaW50IGhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7CisKKyAgaW50IGJ5dGVzUGVyUm93ID0gKCh3aWR0aCYweGYpPj40KTw8NDsKKworICBDR0NvbG9yU3BhY2VSZWYgZ3JheSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZUdyYXkoKTsKKyAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgICAgICAvLyBiaXRzIHBlciBjb21wb25lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUGVyUm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0JpdG1hcEFscGhhSW5mb01hc2sgJiBrQ0dJbWFnZUFscGhhTm9uZSk7CisgIENHQ29sb3JTcGFjZVJlbGVhc2UoZ3JheSk7CisKKyAgQ0dSZWN0IHIgPSBDR1JlY3RaZXJvOworICByLnNpemUud2lkdGggPSB3aWR0aDsKKyAgci5zaXplLmhlaWdodCA9IGhlaWdodDsKKyAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRleHQsIFpYQmxhY2spOworICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCByKTsKKworICByLnNpemUud2lkdGggPSAxOworICByLnNpemUuaGVpZ2h0ID0gMTsKKworICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgWlhXaGl0ZSk7CisgIGZvcihpbnQgeT0wOyB5PGhlaWdodDsgeSsrKSB7CisgICAgci5vcmlnaW4ueSA9IGhlaWdodC0xLXk7CisgICAgZm9yKGludCB4PTA7IHg8d2lkdGg7IHgrKykgeworICAgICAgaWYgKCFbbWF0cml4IGdldFg6eCB5OnldKSB7CisgICAgICAgIHIub3JpZ2luLnggPSB4OworICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCByKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBDR0ltYWdlUmVmIGJpbmFyeSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQpOworCisgIENHQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CisKKyAgcmV0dXJuIGJpbmFyeTsKK30KKworLSAoaW50KXdpZHRoIHsKKyAgcmV0dXJuIHNlbGYubHVtaW5hbmNlU291cmNlLndpZHRoOworfQorCistIChpbnQpaGVpZ2h0IHsKKyAgcmV0dXJuIHNlbGYubHVtaW5hbmNlU291cmNlLmhlaWdodDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYQmluYXJ5Qml0bWFwLmggYi9aWGluZ09iakMvWlhCaW5hcnlCaXRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2VmMzVmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYQmluYXJ5Qml0bWFwLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBjb3JlIGJpdG1hcCBjbGFzcyB1c2VkIGJ5IFpYaW5nIHRvIHJlcHJlc2VudCAxIGJpdCBkYXRhLiBSZWFkZXIgb2JqZWN0cworICogYWNjZXB0IGEgQmluYXJ5Qml0bWFwIGFuZCBhdHRlbXB0IHRvIGRlY29kZSBpdC4KKyAqLworCitAY2xhc3MgWlhCaW5hcml6ZXIsIFpYQml0QXJyYXksIFpYQml0TWF0cml4OworCitAaW50ZXJmYWNlIFpYQmluYXJ5Qml0bWFwIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBpbnQgd2lkdGg7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIGludCBoZWlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgY3JvcFN1cHBvcnRlZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCByb3RhdGVTdXBwb3J0ZWQ7CisKKy0gKGlkKWluaXRXaXRoQmluYXJpemVyOihaWEJpbmFyaXplciAqKWJpbmFyaXplcjsKKysgKGlkKWJpbmFyeUJpdG1hcFdpdGhCaW5hcml6ZXI6KFpYQmluYXJpemVyICopYmluYXJpemVyOworLSAoWlhCaXRBcnJheSAqKWJsYWNrUm93OihpbnQpeSByb3c6KFpYQml0QXJyYXkgKilyb3cgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CistIChaWEJpdE1hdHJpeCAqKWJsYWNrTWF0cml4V2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoWlhCaW5hcnlCaXRtYXAgKiljcm9wOihpbnQpbGVmdCB0b3A6KGludCl0b3Agd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQ7CistIChaWEJpbmFyeUJpdG1hcCAqKXJvdGF0ZUNvdW50ZXJDbG9ja3dpc2U7CistIChaWEJpbmFyeUJpdG1hcCAqKXJvdGF0ZUNvdW50ZXJDbG9ja3dpc2U0NTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYQmluYXJ5Qml0bWFwLm0gYi9aWGluZ09iakMvWlhCaW5hcnlCaXRtYXAubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmI0Y2VlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYQmluYXJ5Qml0bWFwLm0KQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQmluYXJpemVyLmgiCisjaW1wb3J0ICJaWEJpbmFyeUJpdG1hcC5oIgorI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKworQGludGVyZmFjZSBaWEJpbmFyeUJpdG1hcCAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWEJpbmFyaXplciAqYmluYXJpemVyOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhCaXRNYXRyaXggKm1hdHJpeDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhCaW5hcnlCaXRtYXAKKworLSAoaWQpaW5pdFdpdGhCaW5hcml6ZXI6KFpYQmluYXJpemVyICopYmluYXJpemVyIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBpZiAoYmluYXJpemVyID09IG5pbCkgeworICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkJpbmFyaXplciBtdXN0IGJlIG5vbi1udWxsLiJdOworICAgIH0KKworICAgIHNlbGYuYmluYXJpemVyID0gYmluYXJpemVyOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKGlkKWJpbmFyeUJpdG1hcFdpdGhCaW5hcml6ZXI6KFpYQmluYXJpemVyICopYmluYXJpemVyIHsKKyAgcmV0dXJuIFtbc2VsZiBhbGxvY10gaW5pdFdpdGhCaW5hcml6ZXI6YmluYXJpemVyXTsKK30KKworLSAoaW50KXdpZHRoIHsKKyAgcmV0dXJuIHNlbGYuYmluYXJpemVyLndpZHRoOworfQorCistIChpbnQpaGVpZ2h0IHsKKyAgcmV0dXJuIHNlbGYuYmluYXJpemVyLmhlaWdodDsKK30KKworLyoqCisgKiBDb252ZXJ0cyBvbmUgcm93IG9mIGx1bWluYW5jZSBkYXRhIHRvIDEgYml0IGRhdGEuIE1heSBhY3R1YWxseSBkbyB0aGUgY29udmVyc2lvbiwgb3IgcmV0dXJuCisgKiBjYWNoZWQgZGF0YS4gQ2FsbGVycyBzaG91bGQgYXNzdW1lIHRoaXMgbWV0aG9kIGlzIGV4cGVuc2l2ZSBhbmQgY2FsbCBpdCBhcyBzZWxkb20gYXMgcG9zc2libGUuCisgKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgZGVjb2RpbmcgMUQgYmFyY29kZXMgYW5kIG1heSBjaG9vc2UgdG8gYXBwbHkgc2hhcnBlbmluZy4KKyAqLworLSAoWlhCaXRBcnJheSAqKWJsYWNrUm93OihpbnQpeSByb3c6KFpYQml0QXJyYXkgKilyb3cgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW3NlbGYuYmluYXJpemVyIGJsYWNrUm93Onkgcm93OnJvdyBlcnJvcjplcnJvcl07Cit9CisKKy8qKgorICogQ29udmVydHMgYSAyRCBhcnJheSBvZiBsdW1pbmFuY2UgZGF0YSB0byAxIGJpdC4gQXMgYWJvdmUsIGFzc3VtZSB0aGlzIG1ldGhvZCBpcyBleHBlbnNpdmUKKyAqIGFuZCBkbyBub3QgY2FsbCBpdCByZXBlYXRlZGx5LiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgZGVjb2RpbmcgMkQgYmFyY29kZXMgYW5kIG1heSBvcgorICogbWF5IG5vdCBhcHBseSBzaGFycGVuaW5nLiBUaGVyZWZvcmUsIGEgcm93IGZyb20gdGhpcyBtYXRyaXggbWF5IG5vdCBiZSBpZGVudGljYWwgdG8gb25lCisgKiBmZXRjaGVkIHVzaW5nIGJsYWNrUm93KCksIHNvIGRvbid0IG1peCBhbmQgbWF0Y2ggYmV0d2VlbiB0aGVtLgorICovCistIChaWEJpdE1hdHJpeCAqKWJsYWNrTWF0cml4V2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKHNlbGYubWF0cml4ID09IG5pbCkgeworICAgIHNlbGYubWF0cml4ID0gW3NlbGYuYmluYXJpemVyIGJsYWNrTWF0cml4V2l0aEVycm9yOmVycm9yXTsKKyAgfQorICByZXR1cm4gc2VsZi5tYXRyaXg7Cit9CisKKy0gKEJPT0wpY3JvcFN1cHBvcnRlZCB7CisgIHJldHVybiBbW3NlbGYuYmluYXJpemVyIGx1bWluYW5jZVNvdXJjZV0gY3JvcFN1cHBvcnRlZF07Cit9CisKKy8qKgorICogUmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBjcm9wcGVkIGltYWdlIGRhdGEuIEltcGxlbWVudGF0aW9ucyBtYXkga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUKKyAqIG9yaWdpbmFsIGRhdGEgcmF0aGVyIHRoYW4gYSBjb3B5LiBPbmx5IGNhbGxhYmxlIGlmIGlzQ3JvcFN1cHBvcnRlZCgpIGlzIHRydWUuCisgKi8KKy0gKFpYQmluYXJ5Qml0bWFwICopY3JvcDooaW50KWxlZnQgdG9wOihpbnQpdG9wIHdpZHRoOihpbnQpYVdpZHRoIGhlaWdodDooaW50KWFIZWlnaHQgeworICBaWEx1bWluYW5jZVNvdXJjZSAqbmV3U291cmNlID0gW1tzZWxmLmJpbmFyaXplciBsdW1pbmFuY2VTb3VyY2VdIGNyb3A6bGVmdCB0b3A6dG9wIHdpZHRoOmFXaWR0aCBoZWlnaHQ6YUhlaWdodF07CisgIHJldHVybiBbW1pYQmluYXJ5Qml0bWFwIGFsbG9jXSBpbml0V2l0aEJpbmFyaXplcjpbc2VsZi5iaW5hcml6ZXIgY3JlYXRlQmluYXJpemVyOm5ld1NvdXJjZV1dOworfQorCistIChCT09MKXJvdGF0ZVN1cHBvcnRlZCB7CisgIHJldHVybiBbW3NlbGYuYmluYXJpemVyIGx1bWluYW5jZVNvdXJjZV0gcm90YXRlU3VwcG9ydGVkXTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIHJvdGF0ZWQgaW1hZ2UgZGF0YSBieSA5MCBkZWdyZWVzIGNvdW50ZXJjbG9ja3dpc2UuCisgKiBPbmx5IGNhbGxhYmxlIGlmIGlzUm90YXRlU3VwcG9ydGVkKCkgaXMgdHJ1ZS4KKyAqLworLSAoWlhCaW5hcnlCaXRtYXAgKilyb3RhdGVDb3VudGVyQ2xvY2t3aXNlIHsKKyAgWlhMdW1pbmFuY2VTb3VyY2UgKm5ld1NvdXJjZSA9IFtbc2VsZi5iaW5hcml6ZXIgbHVtaW5hbmNlU291cmNlXSByb3RhdGVDb3VudGVyQ2xvY2t3aXNlXTsKKyAgcmV0dXJuIFtbWlhCaW5hcnlCaXRtYXAgYWxsb2NdIGluaXRXaXRoQmluYXJpemVyOltzZWxmLmJpbmFyaXplciBjcmVhdGVCaW5hcml6ZXI6bmV3U291cmNlXV07Cit9CisKKy0gKFpYQmluYXJ5Qml0bWFwICopcm90YXRlQ291bnRlckNsb2Nrd2lzZTQ1IHsKKyAgWlhMdW1pbmFuY2VTb3VyY2UgKm5ld1NvdXJjZSA9IFtbc2VsZi5iaW5hcml6ZXIgbHVtaW5hbmNlU291cmNlXSByb3RhdGVDb3VudGVyQ2xvY2t3aXNlNDVdOworICByZXR1cm4gW1taWEJpbmFyeUJpdG1hcCBhbGxvY10gaW5pdFdpdGhCaW5hcml6ZXI6W3NlbGYuYmluYXJpemVyIGNyZWF0ZUJpbmFyaXplcjpuZXdTb3VyY2VdXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYRGVjb2RlSGludHMuaCBiL1pYaW5nT2JqQy9aWERlY29kZUhpbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwNzQxOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWERlY29kZUhpbnRzLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCYXJjb2RlRm9ybWF0LmgiCisKK0Bwcm90b2NvbCBaWFJlc3VsdFBvaW50Q2FsbGJhY2s7CisKKy8qKgorICogRW5jYXBzdWxhdGVzIGhpbnRzIHRoYXQgYSBjYWxsZXIgbWF5IHBhc3MgdG8gYSBiYXJjb2RlIHJlYWRlciB0byBoZWxwIGl0CisgKiBtb3JlIHF1aWNrbHkgb3IgYWNjdXJhdGVseSBkZWNvZGUgaXQuIEl0IGlzIHVwIHRvIGltcGxlbWVudGF0aW9ucyB0byBkZWNpZGUgd2hhdCwKKyAqIGlmIGFueXRoaW5nLCB0byBkbyB3aXRoIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIHN1cHBsaWVkLgorICovCitAaW50ZXJmYWNlIFpYRGVjb2RlSGludHMgOiBOU09iamVjdCA8TlNDb3B5aW5nPgorCisrIChpZCloaW50czsKKworLyoqCisgKiBBc3N1bWUgQ29kZSAzOSBjb2RlcyBlbXBsb3kgYSBjaGVjayBkaWdpdC4gTWFwcyB0byB7QGxpbmsgQm9vbGVhbn0uCisgKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIEJPT0wgYXNzdW1lQ29kZTM5Q2hlY2tEaWdpdDsKKworLyoqCisgKiBBc3N1bWUgdGhlIGJhcmNvZGUgaXMgYmVpbmcgcHJvY2Vzc2VkIGFzIGEgR1MxIGJhcmNvZGUsIGFuZCBtb2RpZnkgYmVoYXZpb3IgYXMgbmVlZGVkLgorICogRm9yIGV4YW1wbGUgdGhpcyBhZmZlY3RzIEZOQzEgaGFuZGxpbmcgZm9yIENvZGUgMTI4IChha2EgR1MxLTEyOCkuCisgKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIEJPT0wgYXNzdW1lR1MxOworCisvKioKKyAqIEFsbG93ZWQgbGVuZ3RocyBvZiBlbmNvZGVkIGRhdGEgLS0gcmVqZWN0IGFueXRoaW5nIGVsc2UuIE1hcHMgdG8gYW4gaW50W10uCisgKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TQXJyYXkgKmFsbG93ZWRMZW5ndGhzOworCisvKioKKyAqIFNwZWNpZmllcyB3aGF0IGNoYXJhY3RlciBlbmNvZGluZyB0byB1c2Ugd2hlbiBkZWNvZGluZywgd2hlcmUgYXBwbGljYWJsZSAodHlwZSBTdHJpbmcpCisgKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nRW5jb2RpbmcgZW5jb2Rpbmc7CisKKy8qKgorICogVW5zcGVjaWZpZWQsIGFwcGxpY2F0aW9uLXNwZWNpZmljIGhpbnQuCisgKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIGlkIG90aGVyOworCisvKioKKyAqIEltYWdlIGlzIGEgcHVyZSBtb25vY2hyb21lIGltYWdlIG9mIGEgYmFyY29kZS4KKyAqLworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgQk9PTCBwdXJlQmFyY29kZTsKKworLyoqCisgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIGJlIG5vdGlmaWVkIHZpYSBjYWxsYmFjayB3aGVuIGEgcG9zc2libGUge0BsaW5rIFJlc3VsdFBvaW50fQorICogaXMgZm91bmQuIE1hcHMgdG8gYSB7QGxpbmsgUmVzdWx0UG9pbnRDYWxsYmFja30uCisgKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIGlkIDxaWFJlc3VsdFBvaW50Q2FsbGJhY2s+IHJlc3VsdFBvaW50Q2FsbGJhY2s7CisKKy8qKgorICogU3BlbmQgbW9yZSB0aW1lIHRvIHRyeSB0byBmaW5kIGEgYmFyY29kZTsgb3B0aW1pemUgZm9yIGFjY3VyYWN5LCBub3Qgc3BlZWQuCisgKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIEJPT0wgdHJ5SGFyZGVyOworCisvKioKKyAqIEltYWdlIGlzIGtub3duIHRvIGJlIG9mIG9uZSBvZiBhIGZldyBwb3NzaWJsZSBmb3JtYXRzLgorICovCistICh2b2lkKWFkZFBvc3NpYmxlRm9ybWF0OihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0OworLSAoQk9PTCljb250YWluc0Zvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdDsKKy0gKGludCludW1iZXJPZlBvc3NpYmxlRm9ybWF0czsKKy0gKHZvaWQpcmVtb3ZlUG9zc2libGVGb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQ7CisKK0BlbmQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhEZWNvZGVIaW50cy5tIGIvWlhpbmdPYmpDL1pYRGVjb2RlSGludHMubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWUwNjVjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYRGVjb2RlSGludHMubQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERlY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWFJlc3VsdFBvaW50Q2FsbGJhY2suaCIKKworQGludGVyZmFjZSBaWERlY29kZUhpbnRzICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TTXV0YWJsZUFycmF5ICpiYXJjb2RlRm9ybWF0czsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhEZWNvZGVIaW50cworCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfYmFyY29kZUZvcm1hdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKGlkKWhpbnRzIHsKKyAgcmV0dXJuIFtbc2VsZiBhbGxvY10gaW5pdF07Cit9CisKKy0gKGlkKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7CisgIFpYRGVjb2RlSGludHMgKnJlc3VsdCA9IFtbW3NlbGYgY2xhc3NdIGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdF07CisgIGlmIChyZXN1bHQpIHsKKyAgICByZXN1bHQuYXNzdW1lQ29kZTM5Q2hlY2tEaWdpdCA9IHNlbGYuYXNzdW1lQ29kZTM5Q2hlY2tEaWdpdDsKKyAgICByZXN1bHQuYWxsb3dlZExlbmd0aHMgPSBbc2VsZi5hbGxvd2VkTGVuZ3RocyBjb3B5XTsKKworICAgIGZvciAoTlNOdW1iZXIgKmZvcm1hdE51bWJlciBpbiBzZWxmLmJhcmNvZGVGb3JtYXRzKSB7CisgICAgICBbcmVzdWx0IGFkZFBvc3NpYmxlRm9ybWF0Oltmb3JtYXROdW1iZXIgaW50VmFsdWVdXTsKKyAgICB9CisKKyAgICByZXN1bHQuZW5jb2RpbmcgPSBzZWxmLmVuY29kaW5nOworICAgIHJlc3VsdC5vdGhlciA9IHNlbGYub3RoZXI7CisgICAgcmVzdWx0LnB1cmVCYXJjb2RlID0gc2VsZi5wdXJlQmFyY29kZTsKKyAgICByZXN1bHQucmVzdWx0UG9pbnRDYWxsYmFjayA9IHNlbGYucmVzdWx0UG9pbnRDYWxsYmFjazsKKyAgICByZXN1bHQudHJ5SGFyZGVyID0gc2VsZi50cnlIYXJkZXI7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lkKWFkZFBvc3NpYmxlRm9ybWF0OihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0IHsKKyAgW3NlbGYuYmFyY29kZUZvcm1hdHMgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OmZvcm1hdF1dOworfQorCistIChCT09MKWNvbnRhaW5zRm9ybWF0OihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0IHsKKyAgcmV0dXJuIFtzZWxmLmJhcmNvZGVGb3JtYXRzIGNvbnRhaW5zT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OmZvcm1hdF1dOworfQorCistIChpbnQpbnVtYmVyT2ZQb3NzaWJsZUZvcm1hdHMgeworICByZXR1cm4gKGludClzZWxmLmJhcmNvZGVGb3JtYXRzLmNvdW50OworfQorCistICh2b2lkKXJlbW92ZVBvc3NpYmxlRm9ybWF0OihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0IHsKKyAgW3NlbGYuYmFyY29kZUZvcm1hdHMgcmVtb3ZlT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OmZvcm1hdF1dOworfQorCitAZW5kClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYRGltZW5zaW9uLmggYi9aWGluZ09iakMvWlhEaW1lbnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWVhZjFhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYRGltZW5zaW9uLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBTaW1wbHkgZW5jYXBzdWxhdGVzIGEgd2lkdGggYW5kIGhlaWdodC4KKyAqLworCitAaW50ZXJmYWNlIFpYRGltZW5zaW9uIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBoZWlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IHdpZHRoOworCistIChpZClpbml0V2l0aFdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0OworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhEaW1lbnNpb24ubSBiL1pYaW5nT2JqQy9aWERpbWVuc2lvbi5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZWQ4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvWlhEaW1lbnNpb24ubQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERpbWVuc2lvbi5oIgorCitAaW1wbGVtZW50YXRpb24gWlhEaW1lbnNpb24KKworLSAoaWQpaW5pdFdpdGhXaWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodCB7CisgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJXaWR0aCBhbmQgaGVpZ2h0IG11c3Qgbm90IGJlIG5lZ2F0aXZlIl07CisgIH0KKworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF93aWR0aCA9IHdpZHRoOworICAgIF9oZWlnaHQgPSBoZWlnaHQ7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoQk9PTClpc0VxdWFsOihpZClvdGhlciB7CisgIGlmIChbb3RoZXIgaXNLaW5kT2ZDbGFzczpbWlhEaW1lbnNpb24gY2xhc3NdXSkgeworICAgIFpYRGltZW5zaW9uICpkID0gKFpYRGltZW5zaW9uICopb3RoZXI7CisgICAgcmV0dXJuIHNlbGYud2lkdGggPT0gZC53aWR0aCAmJiBzZWxmLmhlaWdodCA9PSBkLmhlaWdodDsKKyAgfQorICByZXR1cm4gTk87Cit9CisKKy0gKE5TVUludGVnZXIpaGFzaCB7CisgIHJldHVybiBzZWxmLndpZHRoICogMzI3MTMgKyBzZWxmLmhlaWdodDsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7CisgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkeCVkIiwgc2VsZi53aWR0aCwgc2VsZi5oZWlnaHRdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhFbmNvZGVIaW50cy5oIGIvWlhpbmdPYmpDL1pYRW5jb2RlSGludHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTUzNGEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYRW5jb2RlSGludHMuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWENvbXBhY3Rpb24uaCIKKyNpbXBvcnQgIlpYRGltZW5zaW9ucy5oIgorI2ltcG9ydCAiWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5oIgorI2ltcG9ydCAiWlhTeW1ib2xTaGFwZUhpbnQuaCIKKworLyoqCisgKiBUaGVzZSBhcmUgYSBzZXQgb2YgaGludHMgdGhhdCB5b3UgbWF5IHBhc3MgdG8gV3JpdGVycyB0byBzcGVjaWZ5IHRoZWlyIGJlaGF2aW9yLgorICovCisKK0BjbGFzcyBaWERpbWVuc2lvbiwgWlhTeW1ib2xTaGFwZUhpbnQ7CisKK0BpbnRlcmZhY2UgWlhFbmNvZGVIaW50cyA6IE5TT2JqZWN0CisKKysgKGlkKWhpbnRzOworCisvKioKKyAqIFNwZWNpZmllcyB3aGF0IGNoYXJhY3RlciBlbmNvZGluZyB0byB1c2Ugd2hlcmUgYXBwbGljYWJsZS4KKyAqLworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmdFbmNvZGluZyBlbmNvZGluZzsKKworLyoqCisgKiBTcGVjaWZpZXMgdGhlIG1hdHJpeCBzaGFwZSBmb3IgRGF0YSBNYXRyaXggLgorICovCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWFN5bWJvbFNoYXBlSGludCAqZGF0YU1hdHJpeFNoYXBlOworCisvKioKKyAqIFNwZWNpZmllcyBhIG1pbmltdW0gYmFyY29kZSBzaXplLiBPbmx5IGFwcGxpY2FibGUgdG8gRGF0YSBNYXRyaXggbm93LgorICovCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWERpbWVuc2lvbiAqbWluU2l6ZTsKKworLyoqCisgKiBTcGVjaWZpZXMgYSBtYXhpbXVtIGJhcmNvZGUgc2l6ZS4gT25seSBhcHBsaWNhYmxlIHRvIERhdGEgTWF0cml4IG5vdy4KKyAqLworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhEaW1lbnNpb24gKm1heFNpemU7CisKKy8qKgorICogU3BlY2lmaWVzIHdoYXQgZGVncmVlIG9mIGVycm9yIGNvcnJlY3Rpb24gdG8gdXNlLCBmb3IgZXhhbXBsZSBpbiBRUiBDb2Rlcy4KKyAqIEZvciBBenRlYyBpdCByZXByZXNlbnRzIHRoZSBtaW5pbWFsIHBlcmNlbnRhZ2Ugb2YgZXJyb3IgY29ycmVjdGlvbiB3b3Jkcy4KKyAqIE5vdGU6IGFuIEF6dGVjIHN5bWJvbCBzaG91bGQgaGF2ZSBhIG1pbmltdW0gb2YgMjUlIEVDIHdvcmRzLgorICovCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWEVycm9yQ29ycmVjdGlvbkxldmVsICplcnJvckNvcnJlY3Rpb25MZXZlbDsKKworLyoqCisgKiBTcGVjaWZpZXMgd2hhdCBwZXJjZW50IG9mIGVycm9yIGNvcnJlY3Rpb24gdG8gdXNlLgorICogRm9yIEF6dGVjIGl0IHJlcHJlc2VudHMgdGhlIG1pbmltYWwgcGVyY2VudGFnZSBvZiBlcnJvciBjb3JyZWN0aW9uIHdvcmRzLgorICogTm90ZTogYW4gQXp0ZWMgc3ltYm9sIHNob3VsZCBoYXZlIGEgbWluaW11bSBvZiAyNSUgRUMgd29yZHMuCisgKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TTnVtYmVyICplcnJvckNvcnJlY3Rpb25QZXJjZW50OworCisvKioKKyAqIFNwZWNpZmllcyBtYXJnaW4sIGluIHBpeGVscywgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyB0aGUgYmFyY29kZS4gVGhlIG1lYW5pbmcgY2FuIHZhcnkKKyAqIGJ5IGZvcm1hdDsgZm9yIGV4YW1wbGUgaXQgY29udHJvbHMgbWFyZ2luIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGJhcmNvZGUgaG9yaXpvbnRhbGx5IGZvcgorICogbW9zdCAxRCBmb3JtYXRzLgorICovCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU051bWJlciAqbWFyZ2luOworCisvKioKKyAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSBjb21wYWN0IG1vZGUgZm9yIFBERjQxNy4KKyAqLworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgQk9PTCBwZGY0MTdDb21wYWN0OworCisvKioKKyAqIFNwZWNpZmllcyB3aGF0IGNvbXBhY3Rpb24gbW9kZSB0byB1c2UgZm9yIFBERjQxNy4KKyAqLworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgWlhDb21wYWN0aW9uIHBkZjQxN0NvbXBhY3Rpb247CisKKy8qKgorICogU3BlY2lmaWVzIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zIGZvciBQREY0MTcuCisgKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYRGltZW5zaW9ucyAqcGRmNDE3RGltZW5zaW9uczsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYRW5jb2RlSGludHMubSBiL1pYaW5nT2JqQy9aWEVuY29kZUhpbnRzLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5YTNjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWEVuY29kZUhpbnRzLm0KQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFbmNvZGVIaW50cy5oIgorCitAaW1wbGVtZW50YXRpb24gWlhFbmNvZGVIaW50cworCisrIChpZCloaW50cyB7CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhFcnJvcnMuaCBiL1pYaW5nT2JqQy9aWEVycm9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMDkwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvWlhFcnJvcnMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIFpYRXJyb3JEb21haW4gQCJaWEVycm9yRG9tYWluIgorCitlbnVtIHsKKyAgLyoqCisgICAqIFRocm93biB3aGVuIGEgYmFyY29kZSB3YXMgc3VjY2Vzc2Z1bGx5IGRldGVjdGVkIGFuZCBkZWNvZGVkLCBidXQKKyAgICogd2FzIG5vdCByZXR1cm5lZCBiZWNhdXNlIGl0cyBjaGVja3N1bSBmZWF0dXJlIGZhaWxlZC4KKyAgICovCisgIFpYQ2hlY2tzdW1FcnJvciAgICAgPSAxMDAwLAorCisgIC8qKgorICAgKiBUaHJvd24gd2hlbiBhIGJhcmNvZGUgd2FzIHN1Y2Nlc3NmdWxseSBkZXRlY3RlZCwgYnV0IHNvbWUgYXNwZWN0IG9mCisgICAqIHRoZSBjb250ZW50IGRpZCBub3QgY29uZm9ybSB0byB0aGUgYmFyY29kZSdzIGZvcm1hdCBydWxlcy4gVGhpcyBjb3VsZCBoYXZlCisgICAqIGJlZW4gZHVlIHRvIGEgbWlzLWRldGVjdGlvbi4KKyAgICovCisgIFpYRm9ybWF0RXJyb3IgICAgICAgPSAxMDAxLAorCisgIC8qKgorICAgKiBUaHJvd24gd2hlbiBhIGJhcmNvZGUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgaW1hZ2UuIEl0IG1pZ2h0IGhhdmUgYmVlbgorICAgKiBwYXJ0aWFsbHkgZGV0ZWN0ZWQgYnV0IGNvdWxkIG5vdCBiZSBjb25maXJtZWQuCisgICAqLworICBaWE5vdEZvdW5kRXJyb3IgICAgID0gMTAwMiwKKworICAvKioKKyAgICogVGhyb3duIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBkdXJpbmcgUmVlZC1Tb2xvbW9uIGRlY29kaW5nLCBzdWNoIGFzIHdoZW4KKyAgICogdGhlcmUgYXJlIHRvbyBtYW55IGVycm9ycyB0byBjb3JyZWN0LgorICAgKi8KKyAgWlhSZWVkU29sb21vbkVycm9yICA9IDEwMDMsCisKKyAgLyoqCisgICAqIFRoaXMgZ2VuZXJhbCBlcnJvciBpcyB0aHJvd24gd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgZGVjb2Rpbmcgb2YgYSBiYXJjb2RlLgorICAgKiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGZhaWxpbmcgY2hlY2tzdW1zIC8gZXJyb3IgY29ycmVjdGlvbiBhbGdvcml0aG1zLCBiZWluZworICAgKiB1bmFibGUgdG8gbG9jYXRlIGZpbmRlciB0aW1pbmcgcGF0dGVybnMsIGFuZCBzbyBvbi4KKyAgICovCisgIFpYUmVhZGVyRXJyb3IgICAgICAgPSAxMDA0LAorCisgIC8qKgorICAgKiBDb3ZlcnMgdGhlIHJhbmdlIG9mIGVycm9yIHdoaWNoIG1heSBvY2N1ciB3aGVuIGVuY29kaW5nIGEgYmFyY29kZSB1c2luZyB0aGUgV3JpdGVyIGZyYW1ld29yay4KKyAgICovCisgIFpYV3JpdGVyRXJyb3IgICAgICAgPSAxMDA1Cit9OworCisvLyBIZWxwZXIgbWV0aG9kcyBmb3IgZXJyb3IgaW5zdGFuY2VzCitOU0Vycm9yICpDaGVja3N1bUVycm9ySW5zdGFuY2Uodm9pZCk7CitOU0Vycm9yICpGb3JtYXRFcnJvckluc3RhbmNlKHZvaWQpOworTlNFcnJvciAqTm90Rm91bmRFcnJvckluc3RhbmNlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYRXJyb3JzLm0gYi9aWGluZ09iakMvWlhFcnJvcnMubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDA0MGY5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYRXJyb3JzLm0KQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFcnJvcnMuaCIKKworTlNFcnJvciAqQ2hlY2tzdW1FcnJvckluc3RhbmNlKCkgeworICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAIlRoaXMgYmFyY29kZSBmYWlsZWQgaXRzIGNoZWNrc3VtIn07CisKKyAgcmV0dXJuIFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYQ2hlY2tzdW1FcnJvciB1c2VySW5mbzp1c2VySW5mb107Cit9CisKK05TRXJyb3IgKkZvcm1hdEVycm9ySW5zdGFuY2UoKSB7CisgIE5TRGljdGlvbmFyeSAqdXNlckluZm8gPSBAe05TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk6IEAiVGhpcyBiYXJjb2RlIGRvZXMgbm90IGNvbmZpcm0gdG8gdGhlIGZvcm1hdCdzIHJ1bGVzIn07CisKKyAgcmV0dXJuIFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYRm9ybWF0RXJyb3IgdXNlckluZm86dXNlckluZm9dOworfQorCitOU0Vycm9yICpOb3RGb3VuZEVycm9ySW5zdGFuY2UoKSB7CisgIE5TRGljdGlvbmFyeSAqdXNlckluZm8gPSBAe05TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk6IEAiQSBiYXJjb2RlIHdhcyBub3QgZm91bmQgaW4gdGhpcyBpbWFnZSJ9OworCisgIHJldHVybiBbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlpYRXJyb3JEb21haW4gY29kZTpaWE5vdEZvdW5kRXJyb3IgdXNlckluZm86dXNlckluZm9dOworfQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UuaCBiL1pYaW5nT2JqQy9aWEludmVydGVkTHVtaW5hbmNlU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiNmYyZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWEludmVydGVkTHVtaW5hbmNlU291cmNlLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhMdW1pbmFuY2VTb3VyY2UuaCIKKworLyoqCisgKiBBIHdyYXBwZXIgaW1wbGVtZW50YXRpb24gb2YgWlhMdW1pbmFuY2VTb3VyY2Ugd2hpY2ggaW52ZXJ0cyB0aGUgbHVtaW5hbmNlcyBpdCByZXR1cm5zIC0tIGJsYWNrIGJlY29tZXMKKyAqIHdoaXRlIGFuZCB2aWNlIHZlcnNhLCBhbmQgZWFjaCB2YWx1ZSBiZWNvbWVzICgyNTUtdmFsdWUpLgorICovCitAaW50ZXJmYWNlIFpYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UgOiBaWEx1bWluYW5jZVNvdXJjZQorCistIChpZClpbml0V2l0aERlbGVnYXRlOihaWEx1bWluYW5jZVNvdXJjZSAqKWRlbGVnYXRlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZS5tIGIvWlhpbmdPYmpDL1pYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2M5YjI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UubQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEludmVydGVkTHVtaW5hbmNlU291cmNlLmgiCisKK0BpbnRlcmZhY2UgWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZSAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgWlhMdW1pbmFuY2VTb3VyY2UgKmRlbGVnYXRlOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEludmVydGVkTHVtaW5hbmNlU291cmNlCisKKy0gKGlkKWluaXRXaXRoRGVsZWdhdGU6KFpYTHVtaW5hbmNlU291cmNlICopZGVsZWdhdGUgeworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoV2lkdGg6ZGVsZWdhdGUud2lkdGggaGVpZ2h0OmRlbGVnYXRlLmhlaWdodF07CisgIGlmIChzZWxmKSB7CisgICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoaW50OF90ICopcm93OihpbnQpeSB7CisgIGludDhfdCAqcm93ID0gW3NlbGYuZGVsZWdhdGUgcm93OnldOworICBmb3IgKGludCBpID0gMDsgaSA8IHNlbGYud2lkdGg7IGkrKykgeworICAgIHJvd1tpXSA9IChpbnQ4X3QpICgyNTUgLSAocm93W2ldICYgMHhGRikpOworICB9CisgIHJldHVybiByb3c7Cit9CisKKy0gKGludDhfdCAqKW1hdHJpeCB7CisgIGludDhfdCAqbWF0cml4ID0gW3NlbGYuZGVsZWdhdGUgbWF0cml4XTsKKyAgaW50IGxlbmd0aCA9IHNlbGYud2lkdGggKiBzZWxmLmhlaWdodDsKKyAgaW50OF90ICppbnZlcnRlZE1hdHJpeCA9IChpbnQ4X3QgKiltYWxsb2MobGVuZ3RoICogc2l6ZW9mKGludDhfdCkpOworICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgaW52ZXJ0ZWRNYXRyaXhbaV0gPSAoaW50OF90KSAoMjU1IC0gKG1hdHJpeFtpXSAmIDB4RkYpKTsKKyAgfQorICBmcmVlKG1hdHJpeCk7CisgIHJldHVybiBpbnZlcnRlZE1hdHJpeDsKK30KKworLSAoQk9PTCljcm9wU3VwcG9ydGVkIHsKKyAgcmV0dXJuIHNlbGYuZGVsZWdhdGUuY3JvcFN1cHBvcnRlZDsKK30KKworLSAoWlhMdW1pbmFuY2VTb3VyY2UgKiljcm9wOihpbnQpbGVmdCB0b3A6KGludCl0b3Agd2lkdGg6KGludClhV2lkdGggaGVpZ2h0OihpbnQpYUhlaWdodCB7CisgIHJldHVybiBbW1pYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UgYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6W3NlbGYuZGVsZWdhdGUgY3JvcDpsZWZ0IHRvcDp0b3Agd2lkdGg6YVdpZHRoIGhlaWdodDphSGVpZ2h0XV07Cit9CisKKy0gKEJPT0wpcm90YXRlU3VwcG9ydGVkIHsKKyAgcmV0dXJuIHNlbGYuZGVsZWdhdGUucm90YXRlU3VwcG9ydGVkOworfQorCisvKioKKyAqIFJldHVybnMgb3JpZ2luYWwgZGVsZWdhdGUgWlhMdW1pbmFuY2VTb3VyY2Ugc2luY2UgaW52ZXJ0IHVuZG9lcyBpdHNlbGYKKyAqLworLSAoWlhMdW1pbmFuY2VTb3VyY2UgKilpbnZlcnQgeworICByZXR1cm4gc2VsZi5kZWxlZ2F0ZTsKK30KKworLSAoWlhMdW1pbmFuY2VTb3VyY2UgKilyb3RhdGVDb3VudGVyQ2xvY2t3aXNlIHsKKyAgcmV0dXJuIFtbWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZSBhbGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTpbc2VsZi5kZWxlZ2F0ZSByb3RhdGVDb3VudGVyQ2xvY2t3aXNlXV07Cit9CisKKy0gKFpYTHVtaW5hbmNlU291cmNlICopcm90YXRlQ291bnRlckNsb2Nrd2lzZTQ1IHsKKyAgcmV0dXJuIFtbWlhJbnZlcnRlZEx1bWluYW5jZVNvdXJjZSBhbGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTpbc2VsZi5kZWxlZ2F0ZSByb3RhdGVDb3VudGVyQ2xvY2t3aXNlNDVdXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYTHVtaW5hbmNlU291cmNlLmggYi9aWGluZ09iakMvWlhMdW1pbmFuY2VTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGE2OTEzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYTHVtaW5hbmNlU291cmNlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBUaGUgcHVycG9zZSBvZiB0aGlzIGNsYXNzIGhpZXJhcmNoeSBpcyB0byBhYnN0cmFjdCBkaWZmZXJlbnQgYml0bWFwIGltcGxlbWVudGF0aW9ucyBhY3Jvc3MKKyAqIHBsYXRmb3JtcyBpbnRvIGEgc3RhbmRhcmQgaW50ZXJmYWNlIGZvciByZXF1ZXN0aW5nIGdyZXlzY2FsZSBsdW1pbmFuY2UgdmFsdWVzLiBUaGUgaW50ZXJmYWNlCisgKiBvbmx5IHByb3ZpZGVzIGltbXV0YWJsZSBtZXRob2RzOyB0aGVyZWZvcmUgY3JvcCBhbmQgcm90YXRpb24gY3JlYXRlIGNvcGllcy4gVGhpcyBpcyB0byBlbnN1cmUKKyAqIHRoYXQgb25lIFJlYWRlciBkb2VzIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIGx1bWluYW5jZSBzb3VyY2UgYW5kIGxlYXZlIGl0IGluIGFuIHVua25vd24gc3RhdGUKKyAqIGZvciBvdGhlciBSZWFkZXJzIGluIHRoZSBjaGFpbi4KKyAqLworCitAaW50ZXJmYWNlIFpYTHVtaW5hbmNlU291cmNlIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCB3aWR0aDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgaGVpZ2h0OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIEJPT0wgY3JvcFN1cHBvcnRlZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBCT09MIHJvdGF0ZVN1cHBvcnRlZDsKKworLSAoaWQpaW5pdFdpdGhXaWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodDsKKy0gKGludDhfdCAqKXJvdzooaW50KXk7CistIChpbnQ4X3QgKiltYXRyaXg7CistIChaWEx1bWluYW5jZVNvdXJjZSAqKWNyb3A6KGludClsZWZ0IHRvcDooaW50KXRvcCB3aWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodDsKKy0gKFpYTHVtaW5hbmNlU291cmNlICopaW52ZXJ0OworLSAoWlhMdW1pbmFuY2VTb3VyY2UgKilyb3RhdGVDb3VudGVyQ2xvY2t3aXNlOworLSAoWlhMdW1pbmFuY2VTb3VyY2UgKilyb3RhdGVDb3VudGVyQ2xvY2t3aXNlNDU7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9aWEx1bWluYW5jZVNvdXJjZS5tIGIvWlhpbmdPYmpDL1pYTHVtaW5hbmNlU291cmNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM2OTU0YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWEx1bWluYW5jZVNvdXJjZS5tCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEludmVydGVkTHVtaW5hbmNlU291cmNlLmgiCisjaW1wb3J0ICJaWEx1bWluYW5jZVNvdXJjZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhMdW1pbmFuY2VTb3VyY2UKKworLSAoaWQpaW5pdFdpdGhXaWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3dpZHRoID0gd2lkdGg7CisgICAgX2hlaWdodCA9IGhlaWdodDsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisvKioKKyAqIEZldGNoZXMgb25lIHJvdyBvZiBsdW1pbmFuY2UgZGF0YSBmcm9tIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtJ3MgYml0bWFwLiBWYWx1ZXMgcmFuZ2UgZnJvbQorICogMCAoYmxhY2spIHRvIDI1NSAod2hpdGUpLiBCZWNhdXNlIEphdmEgZG9lcyBub3QgaGF2ZSBhbiB1bnNpZ25lZCBieXRlIHR5cGUsIGNhbGxlcnMgd2lsbCBoYXZlCisgKiB0byBiaXR3aXNlIGFuZCB3aXRoIDB4ZmYgZm9yIGVhY2ggdmFsdWUuIEl0IGlzIHByZWZlcmFibGUgZm9yIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZAorICogdG8gb25seSBmZXRjaCB0aGlzIHJvdyByYXRoZXIgdGhhbiB0aGUgd2hvbGUgaW1hZ2UsIHNpbmNlIG5vIDJEIFJlYWRlcnMgbWF5IGJlIGluc3RhbGxlZCBhbmQKKyAqIGdldE1hdHJpeCgpIG1heSBuZXZlciBiZSBjYWxsZWQuCisgKi8KKy0gKGludDhfdCAqKXJvdzooaW50KXkgeworICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJZb3UgbXVzdCBvdmVycmlkZSAlQCBpbiBhIHN1YmNsYXNzIiwgTlNTdHJpbmdGcm9tU2VsZWN0b3IoX2NtZCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKK30KKworLyoqCisgKiBGZXRjaGVzIGx1bWluYW5jZSBkYXRhIGZvciB0aGUgdW5kZXJseWluZyBiaXRtYXAuIFZhbHVlcyBzaG91bGQgYmUgZmV0Y2hlZCB1c2luZzoKKyAqIGludCBsdW1pbmFuY2UgPSBhcnJheVt5ICogd2lkdGggKyB4XSAmIDB4ZmY7CisgKiAKKyAqIFJldHVybnMgQSByb3ctbWFqb3IgMkQgYXJyYXkgb2YgbHVtaW5hbmNlIHZhbHVlcy4gRG8gbm90IHVzZSByZXN1bHQubGVuZ3RoIGFzIGl0IG1heSBiZQorICogbGFyZ2VyIHRoYW4gd2lkdGggKiBoZWlnaHQgYnl0ZXMgb24gc29tZSBwbGF0Zm9ybXMuIERvIG5vdCBtb2RpZnkgdGhlIGNvbnRlbnRzCisgKiBvZiB0aGUgcmVzdWx0LgorICovCistIChpbnQ4X3QgKiltYXRyaXggeworICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJZb3UgbXVzdCBvdmVycmlkZSAlQCBpbiBhIHN1YmNsYXNzIiwgTlNTdHJpbmdGcm9tU2VsZWN0b3IoX2NtZCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIGNyb3BwZWQgaW1hZ2UgZGF0YS4gSW1wbGVtZW50YXRpb25zIG1heSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZQorICogb3JpZ2luYWwgZGF0YSByYXRoZXIgdGhhbiBhIGNvcHkuIE9ubHkgY2FsbGFibGUgaWYgaXNDcm9wU3VwcG9ydGVkKCkgaXMgdHJ1ZS4KKyAqLworLSAoWlhMdW1pbmFuY2VTb3VyY2UgKiljcm9wOihpbnQpbGVmdCB0b3A6KGludCl0b3Agd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgeworICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246QCJUaGlzIGx1bWluYW5jZSBzb3VyY2UgZG9lcyBub3Qgc3VwcG9ydCBjcm9wcGluZy4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgd3JhcHBlciBvZiB0aGlzIFpYTHVtaW5hbmNlU291cmNlIHdoaWNoIGludmVydHMgdGhlIGx1bWluYW5jZXMgaXQgcmV0dXJucyAtLSBibGFjayBiZWNvbWVzCisgKiB3aGl0ZSBhbmQgdmljZSB2ZXJzYSwgYW5kIGVhY2ggdmFsdWUgYmVjb21lcyAoMjU1LXZhbHVlKS4KKyAqLworLSAoWlhMdW1pbmFuY2VTb3VyY2UgKilpbnZlcnQgeworICByZXR1cm4gW1taWEludmVydGVkTHVtaW5hbmNlU291cmNlIGFsbG9jXSBpbml0V2l0aERlbGVnYXRlOnNlbGZdOworfQorCisvKioKKyAqIFJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggcm90YXRlZCBpbWFnZSBkYXRhIGJ5IDkwIGRlZ3JlZXMgY291bnRlcmNsb2Nrd2lzZS4KKyAqIE9ubHkgY2FsbGFibGUgaWYgaXNSb3RhdGVTdXBwb3J0ZWQoKSBpcyB0cnVlLgorICovCistIChaWEx1bWluYW5jZVNvdXJjZSAqKXJvdGF0ZUNvdW50ZXJDbG9ja3dpc2UgeworICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246QCJUaGlzIGx1bWluYW5jZSBzb3VyY2UgZG9lcyBub3Qgc3VwcG9ydCByb3RhdGlvbiBieSA5MCBkZWdyZWVzLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWxdOworfQorCisvKioKKyAqIFJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggcm90YXRlZCBpbWFnZSBkYXRhIGJ5IDQ1IGRlZ3JlZXMgY291bnRlcmNsb2Nrd2lzZS4KKyAqIE9ubHkgY2FsbGFibGUgaWYgaXNSb3RhdGVTdXBwb3J0ZWQoKSBpcyB0cnVlLgorICovCistIChaWEx1bWluYW5jZVNvdXJjZSAqKXJvdGF0ZUNvdW50ZXJDbG9ja3dpc2U0NSB7CisgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpAIlRoaXMgbHVtaW5hbmNlIHNvdXJjZSBkb2VzIG5vdCBzdXBwb3J0IHJvdGF0aW9uIGJ5IDQ1IGRlZ3JlZXMuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07Cit9CisKKy0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24geworICBpbnQ4X3QgKnJvdyA9IE5VTEw7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6c2VsZi5oZWlnaHQgKiAoc2VsZi53aWR0aCArIDEpXTsKKyAgZm9yIChpbnQgeSA9IDA7IHkgPCBzZWxmLmhlaWdodDsgeSsrKSB7CisgICAgcm93ID0gW3NlbGYgcm93OnldOworICAgIGZvciAoaW50IHggPSAwOyB4IDwgc2VsZi53aWR0aDsgeCsrKSB7CisgICAgICBpbnQgbHVtaW5hbmNlID0gcm93W3hdICYgMHhGRjsKKyAgICAgIHVuaWNoYXIgYzsKKyAgICAgIGlmIChsdW1pbmFuY2UgPCAweDQwKSB7CisgICAgICAgIGMgPSAnIyc7CisgICAgICB9IGVsc2UgaWYgKGx1bWluYW5jZSA8IDB4ODApIHsKKyAgICAgICAgYyA9ICcrJzsKKyAgICAgIH0gZWxzZSBpZiAobHVtaW5hbmNlIDwgMHhDMCkgeworICAgICAgICBjID0gJy4nOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYyA9ICcgJzsKKyAgICAgIH0KKyAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCBjXTsKKyAgICB9CisgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCJcbiJdOworICAgIGZyZWUocm93KTsKKyAgICByb3cgPSBOVUxMOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9aWE11bHRpRm9ybWF0UmVhZGVyLmggYi9aWGluZ09iakMvWlhNdWx0aUZvcm1hdFJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkY2EzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvWlhNdWx0aUZvcm1hdFJlYWRlci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUmVhZGVyLmgiCisKKy8qKgorICogWlhNdWx0aUZvcm1hdFJlYWRlciBpcyBhIGNvbnZlbmllbmNlIGNsYXNzIGFuZCB0aGUgbWFpbiBlbnRyeSBwb2ludCBpbnRvIHRoZSBsaWJyYXJ5IGZvciBtb3N0IHVzZXMuCisgKiBCeSBkZWZhdWx0IGl0IGF0dGVtcHRzIHRvIGRlY29kZSBhbGwgYmFyY29kZSBmb3JtYXRzIHRoYXQgdGhlIGxpYnJhcnkgc3VwcG9ydHMuIE9wdGlvbmFsbHksIHlvdQorICogY2FuIHByb3ZpZGUgYSBoaW50cyBvYmplY3QgdG8gcmVxdWVzdCBkaWZmZXJlbnQgYmVoYXZpb3IsIGZvciBleGFtcGxlIG9ubHkgZGVjb2RpbmcgUVIgY29kZXMuCisgKi8KKworQGNsYXNzIFpYRGVjb2RlSGludHM7CisKK0BpbnRlcmZhY2UgWlhNdWx0aUZvcm1hdFJlYWRlciA6IE5TT2JqZWN0IDxaWFJlYWRlcj4KKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhEZWNvZGVIaW50cyAqaGludHM7CisKKysgKGlkKXJlYWRlcjsKKy0gKFpYUmVzdWx0ICopZGVjb2RlV2l0aFN0YXRlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhNdWx0aUZvcm1hdFJlYWRlci5tIGIvWlhpbmdPYmpDL1pYTXVsdGlGb3JtYXRSZWFkZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjlhNDRhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYTXVsdGlGb3JtYXRSZWFkZXIubQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBenRlY1JlYWRlci5oIgorI2ltcG9ydCAiWlhCaW5hcnlCaXRtYXAuaCIKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeFJlYWRlci5oIgorI2ltcG9ydCAiWlhEZWNvZGVIaW50cy5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYTWF4aUNvZGVSZWFkZXIuaCIKKyNpbXBvcnQgIlpYTXVsdGlGb3JtYXRPbmVEUmVhZGVyLmgiCisjaW1wb3J0ICJaWE11bHRpRm9ybWF0UmVhZGVyLmgiCisjaW1wb3J0ICJaWFBERjQxN1JlYWRlci5oIgorI2ltcG9ydCAiWlhRUkNvZGVSZWFkZXIuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhNdWx0aUZvcm1hdFJlYWRlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU011dGFibGVBcnJheSAqcmVhZGVyczsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhNdWx0aUZvcm1hdFJlYWRlcgorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfcmVhZGVycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworKyAoaWQpcmVhZGVyIHsKKyAgcmV0dXJuIFtbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF07Cit9CisKKy8qKgorICogVGhpcyB2ZXJzaW9uIG9mIGRlY29kZSBob25vcnMgdGhlIGludGVudCBvZiBSZWFkZXIuZGVjb2RlKEJpbmFyeUJpdG1hcCkgaW4gdGhhdCBpdAorICogcGFzc2VzIG51bGwgYXMgYSBoaW50IHRvIHRoZSBkZWNvZGVycy4gSG93ZXZlciwgdGhhdCBtYWtlcyBpdCBpbmVmZmljaWVudCB0byBjYWxsIHJlcGVhdGVkbHkuCisgKiBVc2Ugc2V0SGludHMoKSBmb2xsb3dlZCBieSBkZWNvZGVXaXRoU3RhdGUoKSBmb3IgY29udGludW91cyBzY2FuIGFwcGxpY2F0aW9ucy4KKyAqLworLSAoWlhSZXN1bHQgKilkZWNvZGU6KFpYQmluYXJ5Qml0bWFwICopaW1hZ2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBzZWxmLmhpbnRzID0gbmlsOworICByZXR1cm4gW3NlbGYgZGVjb2RlSW50ZXJuYWw6aW1hZ2UgZXJyb3I6ZXJyb3JdOworfQorCisKKy8qKgorICogRGVjb2RlIGFuIGltYWdlIHVzaW5nIHRoZSBoaW50cyBwcm92aWRlZC4gRG9lcyBub3QgaG9ub3IgZXhpc3Rpbmcgc3RhdGUuCisgKi8KKy0gKFpYUmVzdWx0ICopZGVjb2RlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBzZWxmLmhpbnRzID0gaGludHM7CisgIHJldHVybiBbc2VsZiBkZWNvZGVJbnRlcm5hbDppbWFnZSBlcnJvcjplcnJvcl07Cit9CisKKy8qKgorICogRGVjb2RlIGFuIGltYWdlIHVzaW5nIHRoZSBzdGF0ZSBzZXQgdXAgYnkgY2FsbGluZyBzZXRIaW50cygpIHByZXZpb3VzbHkuIENvbnRpbnVvdXMgc2NhbgorICogY2xpZW50cyB3aWxsIGdldCBhIDxiPmxhcmdlPC9iPiBzcGVlZCBpbmNyZWFzZSBieSB1c2luZyB0aGlzIGluc3RlYWQgb2YgZGVjb2RlKCkuCisgKi8KKy0gKFpYUmVzdWx0ICopZGVjb2RlV2l0aFN0YXRlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKHNlbGYucmVhZGVycyA9PSBuaWwpIHsKKyAgICBzZWxmLmhpbnRzID0gbmlsOworICB9CisgIHJldHVybiBbc2VsZiBkZWNvZGVJbnRlcm5hbDppbWFnZSBlcnJvcjplcnJvcl07Cit9CisKKy8qKgorICogVGhpcyBtZXRob2QgYWRkcyBzdGF0ZSB0byB0aGUgWlhNdWx0aUZvcm1hdFJlYWRlci4gQnkgc2V0dGluZyB0aGUgaGludHMgb25jZSwgc3Vic2VxdWVudCBjYWxscworICogdG8gZGVjb2RlV2l0aFN0YXRlKGltYWdlKSBjYW4gcmV1c2UgdGhlIHNhbWUgc2V0IG9mIHJlYWRlcnMgd2l0aG91dCByZWFsbG9jYXRpbmcgbWVtb3J5LiBUaGlzCisgKiBpcyBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlIGluIGNvbnRpbnVvdXMgc2NhbiBjbGllbnRzLgorICovCistICh2b2lkKXNldEhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgeworICBfaGludHMgPSBoaW50czsKKworICBCT09MIHRyeUhhcmRlciA9IGhpbnRzICE9IG5pbCAmJiBoaW50cy50cnlIYXJkZXI7CisgIFtzZWxmLnJlYWRlcnMgcmVtb3ZlQWxsT2JqZWN0c107CisgIGlmIChoaW50cyAhPSBuaWwpIHsKKyAgICBCT09MIGFkZFpYT25lRFJlYWRlciA9IFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdFVQQ0FdIHx8CisgICAgICBbaGludHMgY29udGFpbnNGb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENFXSB8fAorICAgICAgW2hpbnRzIGNvbnRhaW5zRm9ybWF0OmtCYXJjb2RlRm9ybWF0RWFuMTNdIHx8CisgICAgICBbaGludHMgY29udGFpbnNGb3JtYXQ6a0JhcmNvZGVGb3JtYXRFYW44XSB8fAorICAgICAgW2hpbnRzIGNvbnRhaW5zRm9ybWF0OmtCYXJjb2RlRm9ybWF0Q29kYWJhcl0gfHwKKyAgICAgIFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdENvZGUzOV0gfHwKKyAgICAgIFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdENvZGU5M10gfHwKKyAgICAgIFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdENvZGUxMjhdIHx8CisgICAgICBbaGludHMgY29udGFpbnNGb3JtYXQ6a0JhcmNvZGVGb3JtYXRJVEZdIHx8CisgICAgICBbaGludHMgY29udGFpbnNGb3JtYXQ6a0JhcmNvZGVGb3JtYXRSU1MxNF0gfHwKKyAgICAgIFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdFJTU0V4cGFuZGVkXTsKKyAgICBpZiAoYWRkWlhPbmVEUmVhZGVyICYmICF0cnlIYXJkZXIpIHsKKyAgICAgIFtzZWxmLnJlYWRlcnMgYWRkT2JqZWN0OltbWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIgYWxsb2NdIGluaXRXaXRoSGludHM6aGludHNdXTsKKyAgICB9CisgICAgaWYgKFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZV0pIHsKKyAgICAgIFtzZWxmLnJlYWRlcnMgYWRkT2JqZWN0OltbWlhRUkNvZGVSZWFkZXIgYWxsb2NdIGluaXRdXTsKKyAgICB9CisgICAgaWYgKFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdERhdGFNYXRyaXhdKSB7CisgICAgICBbc2VsZi5yZWFkZXJzIGFkZE9iamVjdDpbW1pYRGF0YU1hdHJpeFJlYWRlciBhbGxvY10gaW5pdF1dOworICAgIH0KKyAgICBpZiAoW2hpbnRzIGNvbnRhaW5zRm9ybWF0OmtCYXJjb2RlRm9ybWF0QXp0ZWNdKSB7CisgICAgICBbc2VsZi5yZWFkZXJzIGFkZE9iamVjdDpbW1pYQXp0ZWNSZWFkZXIgYWxsb2NdIGluaXRdXTsKKyAgICB9CisgICAgaWYgKFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdFBERjQxN10pIHsKKyAgICAgIFtzZWxmLnJlYWRlcnMgYWRkT2JqZWN0OltbWlhQREY0MTdSZWFkZXIgYWxsb2NdIGluaXRdXTsKKyAgICB9CisgICAgaWYgKFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdE1heGlDb2RlXSkgeworICAgICAgW3NlbGYucmVhZGVycyBhZGRPYmplY3Q6W1taWE1heGlDb2RlUmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgfQorICAgIGlmIChhZGRaWE9uZURSZWFkZXIgJiYgdHJ5SGFyZGVyKSB7CisgICAgICBbc2VsZi5yZWFkZXJzIGFkZE9iamVjdDpbW1pYTXVsdGlGb3JtYXRPbmVEUmVhZGVyIGFsbG9jXSBpbml0V2l0aEhpbnRzOmhpbnRzXV07CisgICAgfQorICB9CisgIGlmIChbc2VsZi5yZWFkZXJzIGNvdW50XSA9PSAwKSB7CisgICAgaWYgKCF0cnlIYXJkZXIpIHsKKyAgICAgIFtzZWxmLnJlYWRlcnMgYWRkT2JqZWN0OltbWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIgYWxsb2NdIGluaXRXaXRoSGludHM6aGludHNdXTsKKyAgICB9CisgICAgW3NlbGYucmVhZGVycyBhZGRPYmplY3Q6W1taWFFSQ29kZVJlYWRlciBhbGxvY10gaW5pdF1dOworICAgIFtzZWxmLnJlYWRlcnMgYWRkT2JqZWN0OltbWlhEYXRhTWF0cml4UmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgW3NlbGYucmVhZGVycyBhZGRPYmplY3Q6W1taWEF6dGVjUmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgW3NlbGYucmVhZGVycyBhZGRPYmplY3Q6W1taWFBERjQxN1JlYWRlciBhbGxvY10gaW5pdF1dOworICAgIFtzZWxmLnJlYWRlcnMgYWRkT2JqZWN0OltbWlhNYXhpQ29kZVJlYWRlciBhbGxvY10gaW5pdF1dOworICAgIGlmICh0cnlIYXJkZXIpIHsKKyAgICAgIFtzZWxmLnJlYWRlcnMgYWRkT2JqZWN0OltbWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIgYWxsb2NdIGluaXRXaXRoSGludHM6aGludHNdXTsKKyAgICB9CisgIH0KK30KKworLSAodm9pZClyZXNldCB7CisgIGlmIChzZWxmLnJlYWRlcnMgIT0gbmlsKSB7CisgICAgZm9yIChpZDxaWFJlYWRlcj4gcmVhZGVyIGluIHNlbGYucmVhZGVycykgeworICAgICAgW3JlYWRlciByZXNldF07CisgICAgfQorICB9Cit9CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlSW50ZXJuYWw6KFpYQmluYXJ5Qml0bWFwICopaW1hZ2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoc2VsZi5yZWFkZXJzICE9IG5pbCkgeworICAgIGZvciAoaWQ8WlhSZWFkZXI+IHJlYWRlciBpbiBzZWxmLnJlYWRlcnMpIHsKKyAgICAgIFpYUmVzdWx0ICpyZXN1bHQgPSBbcmVhZGVyIGRlY29kZTppbWFnZSBoaW50czpzZWxmLmhpbnRzIGVycm9yOm5pbF07CisgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgcmV0dXJuIG5pbDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYTXVsdGlGb3JtYXRXcml0ZXIuaCBiL1pYaW5nT2JqQy9aWE11bHRpRm9ybWF0V3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzZjczMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWE11bHRpRm9ybWF0V3JpdGVyLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhXcml0ZXIuaCIKKworLyoqCisgKiBUaGlzIGlzIGEgZmFjdG9yeSBjbGFzcyB3aGljaCBmaW5kcyB0aGUgYXBwcm9wcmlhdGUgV3JpdGVyIHN1YmNsYXNzIGZvciB0aGUgQmFyY29kZUZvcm1hdAorICogcmVxdWVzdGVkIGFuZCBlbmNvZGVzIHRoZSBiYXJjb2RlIHdpdGggdGhlIHN1cHBsaWVkIGNvbnRlbnRzLgorICovCisKK0BpbnRlcmZhY2UgWlhNdWx0aUZvcm1hdFdyaXRlciA6IE5TT2JqZWN0IDxaWFdyaXRlcj4KKworKyAoaWQpd3JpdGVyOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhNdWx0aUZvcm1hdFdyaXRlci5tIGIvWlhpbmdPYmpDL1pYTXVsdGlGb3JtYXRXcml0ZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTlmMDU2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYTXVsdGlGb3JtYXRXcml0ZXIubQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEF6dGVjV3JpdGVyLmgiCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhDb2RhQmFyV3JpdGVyLmgiCisjaW1wb3J0ICJaWENvZGUzOVdyaXRlci5oIgorI2ltcG9ydCAiWlhDb2RlMTI4V3JpdGVyLmgiCisjaW1wb3J0ICJaWERhdGFNYXRyaXhXcml0ZXIuaCIKKyNpbXBvcnQgIlpYRUFOOFdyaXRlci5oIgorI2ltcG9ydCAiWlhFQU4xM1dyaXRlci5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYSVRGV3JpdGVyLmgiCisjaW1wb3J0ICJaWE11bHRpRm9ybWF0V3JpdGVyLmgiCisjaW1wb3J0ICJaWFBERjQxN1dyaXRlci5oIgorI2ltcG9ydCAiWlhRUkNvZGVXcml0ZXIuaCIKKyNpbXBvcnQgIlpYVVBDQVdyaXRlci5oIgorCitAaW1wbGVtZW50YXRpb24gWlhNdWx0aUZvcm1hdFdyaXRlcgorCisrIChpZCl3cml0ZXIgeworICByZXR1cm4gW1taWE11bHRpRm9ybWF0V3JpdGVyIGFsbG9jXSBpbml0XTsKK30KKworLSAoWlhCaXRNYXRyaXggKillbmNvZGU6KE5TU3RyaW5nICopY29udGVudHMgZm9ybWF0OihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0IHdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0IGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtzZWxmIGVuY29kZTpjb250ZW50cyBmb3JtYXQ6Zm9ybWF0IHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHQgaGludHM6bmlsIGVycm9yOmVycm9yXTsKK30KKworLSAoWlhCaXRNYXRyaXggKillbmNvZGU6KE5TU3RyaW5nICopY29udGVudHMgZm9ybWF0OihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0IHdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0IGhpbnRzOihaWEVuY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZDxaWFdyaXRlcj4gd3JpdGVyOworICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2Uga0JhcmNvZGVGb3JtYXRFYW44OgorICAgICAgd3JpdGVyID0gW1taWEVBTjhXcml0ZXIgYWxsb2NdIGluaXRdOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0RWFuMTM6CisgICAgICB3cml0ZXIgPSBbW1pYRUFOMTNXcml0ZXIgYWxsb2NdIGluaXRdOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0VVBDQToKKyAgICAgIHdyaXRlciA9IFtbWlhVUENBV3JpdGVyIGFsbG9jXSBpbml0XTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBrQmFyY29kZUZvcm1hdFFSQ29kZToKKyAgICAgIHdyaXRlciA9IFtbWlhRUkNvZGVXcml0ZXIgYWxsb2NdIGluaXRdOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0Q29kZTM5OgorICAgICAgd3JpdGVyID0gW1taWENvZGUzOVdyaXRlciBhbGxvY10gaW5pdF07CisgICAgICBicmVhazsKKworICAgIGNhc2Uga0JhcmNvZGVGb3JtYXRDb2RlMTI4OgorICAgICAgd3JpdGVyID0gW1taWENvZGUxMjhXcml0ZXIgYWxsb2NdIGluaXRdOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0SVRGOgorICAgICAgd3JpdGVyID0gW1taWElURldyaXRlciBhbGxvY10gaW5pdF07CisgICAgICBicmVhazsKKworICAgIGNhc2Uga0JhcmNvZGVGb3JtYXRQREY0MTc6CisgICAgICB3cml0ZXIgPSBbW1pYUERGNDE3V3JpdGVyIGFsbG9jXSBpbml0XTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBrQmFyY29kZUZvcm1hdENvZGFiYXI6CisgICAgICB3cml0ZXIgPSBbW1pYQ29kYUJhcldyaXRlciBhbGxvY10gaW5pdF07CisgICAgICBicmVhazsKKworICAgIGNhc2Uga0JhcmNvZGVGb3JtYXREYXRhTWF0cml4OgorICAgICAgd3JpdGVyID0gW1taWERhdGFNYXRyaXhXcml0ZXIgYWxsb2NdIGluaXRdOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0QXp0ZWM6CisgICAgICB3cml0ZXIgPSBbW1pYQXp0ZWNXcml0ZXIgYWxsb2NdIGluaXRdOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYV3JpdGVyRXJyb3IgdXNlckluZm86QHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAIk5vIGVuY29kZXIgYXZhaWxhYmxlIGZvciBmb3JtYXQifV07CisgICAgICByZXR1cm4gbmlsOworICB9CisgIHJldHVybiBbd3JpdGVyIGVuY29kZTpjb250ZW50cyBmb3JtYXQ6Zm9ybWF0IHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHQgaGludHM6aGludHMgZXJyb3I6ZXJyb3JdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UuaCBiL1pYaW5nT2JqQy9aWFBsYW5hcllVVkx1bWluYW5jZVNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MGJiY2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEx1bWluYW5jZVNvdXJjZS5oIgorCisvKioKKyAqIFRoaXMgb2JqZWN0IGV4dGVuZHMgTHVtaW5hbmNlU291cmNlIGFyb3VuZCBhbiBhcnJheSBvZiBZVVYgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBjYW1lcmEgZHJpdmVyLAorICogd2l0aCB0aGUgb3B0aW9uIHRvIGNyb3AgdG8gYSByZWN0YW5nbGUgd2l0aGluIHRoZSBmdWxsIGRhdGEuIFRoaXMgY2FuIGJlIHVzZWQgdG8gZXhjbHVkZQorICogc3VwZXJmbHVvdXMgcGl4ZWxzIGFyb3VuZCB0aGUgcGVyaW1ldGVyIGFuZCBzcGVlZCB1cCBkZWNvZGluZy4KKyAqCisgKiBJdCB3b3JrcyBmb3IgYW55IHBpeGVsIGZvcm1hdCB3aGVyZSB0aGUgWSBjaGFubmVsIGlzIHBsYW5hciBhbmQgYXBwZWFycyBmaXJzdCwgaW5jbHVkaW5nCisgKiBZQ2JDcl80MjBfU1AgYW5kIFlDYkNyXzQyMl9TUC4KKyAqLworCitAaW50ZXJmYWNlIFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlIDogWlhMdW1pbmFuY2VTb3VyY2UKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCB0aHVtYm5haWxXaWR0aDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgdGh1bWJuYWlsSGVpZ2h0OworCistIChpZClpbml0V2l0aFl1dkRhdGE6KGludDhfdCAqKXl1dkRhdGEgeXV2RGF0YUxlbjooaW50KXl1dkRhdGFMZW4gZGF0YVdpZHRoOihpbnQpZGF0YVdpZHRoCisgICAgICAgICAgIGRhdGFIZWlnaHQ6KGludClkYXRhSGVpZ2h0IGxlZnQ6KGludClsZWZ0IHRvcDooaW50KXRvcCB3aWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodAorICAgIHJldmVyc2VIb3Jpem9udGFsOihCT09MKXJldmVyc2VIb3Jpem9udGFsOworLSAoaW50ICopcmVuZGVyVGh1bWJuYWlsOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UubSBiL1pYaW5nT2JqQy9aWFBsYW5hcllVVkx1bWluYW5jZVNvdXJjZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MDg1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UubQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQbGFuYXJZVVZMdW1pbmFuY2VTb3VyY2UuaCIKKworY29uc3QgaW50IFRIVU1CTkFJTF9TQ0FMRV9GQUNUT1IgPSAyOworCitAaW50ZXJmYWNlIFpYUGxhbmFyWVVWTHVtaW5hbmNlU291cmNlICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludDhfdCAqeXV2RGF0YTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCB5dXZEYXRhTGVuOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGRhdGFXaWR0aDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBkYXRhSGVpZ2h0OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGxlZnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgdG9wOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWFBsYW5hcllVVkx1bWluYW5jZVNvdXJjZQorCistIChpZClpbml0V2l0aFl1dkRhdGE6KGludDhfdCAqKXl1dkRhdGEgeXV2RGF0YUxlbjooaW50KXl1dkRhdGFMZW4gZGF0YVdpZHRoOihpbnQpZGF0YVdpZHRoCisgICAgICAgICAgIGRhdGFIZWlnaHQ6KGludClkYXRhSGVpZ2h0IGxlZnQ6KGludClsZWZ0IHRvcDooaW50KXRvcCB3aWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodAorICAgIHJldmVyc2VIb3Jpem9udGFsOihCT09MKXJldmVyc2VIb3Jpem9udGFsIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhXaWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0XSkgeworICAgIGlmIChsZWZ0ICsgd2lkdGggPiBkYXRhV2lkdGggfHwgdG9wICsgaGVpZ2h0ID4gZGF0YUhlaWdodCkgeworICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkNyb3AgcmVjdGFuZ2xlIGRvZXMgbm90IGZpdCB3aXRoaW4gaW1hZ2UgZGF0YS4iXTsKKyAgICB9CisKKyAgICBfeXV2RGF0YUxlbiA9IHl1dkRhdGFMZW47CisgICAgX3l1dkRhdGEgPSAoaW50OF90ICopbWFsbG9jKHl1dkRhdGFMZW4gKiBzaXplb2YoaW50OF90KSk7CisgICAgbWVtY3B5KF95dXZEYXRhLCB5dXZEYXRhLCB5dXZEYXRhTGVuKTsKKyAgICBfZGF0YVdpZHRoID0gZGF0YVdpZHRoOworICAgIF9kYXRhSGVpZ2h0ID0gZGF0YUhlaWdodDsKKyAgICBfbGVmdCA9IGxlZnQ7CisgICAgX3RvcCA9IHRvcDsKKyAgICBpZiAocmV2ZXJzZUhvcml6b250YWwpIHsKKyAgICAgIFtzZWxmIHJldmVyc2VIb3Jpem9udGFsOndpZHRoIGhlaWdodDpoZWlnaHRdOworICAgIH0KKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MgeworICBpZiAoX3l1dkRhdGEgIT0gTlVMTCkgeworICAgIGZyZWUoX3l1dkRhdGEpOworICAgIF95dXZEYXRhID0gTlVMTDsKKyAgfQorfQorCistIChpbnQ4X3QgKilyb3c6KGludCl5IHsKKyAgaWYgKHkgPCAwIHx8IHkgPj0gc2VsZi5oZWlnaHQpIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KKyAgICAgICAgICAgICAgICBmb3JtYXQ6QCJSZXF1ZXN0ZWQgcm93IGlzIG91dHNpZGUgdGhlIGltYWdlOiAlZCIsIHldOworICB9CisgIGludDhfdCAqcm93ID0gKGludDhfdCAqKW1hbGxvYyhzZWxmLndpZHRoICogc2l6ZW9mKGludDhfdCkpOworICBpbnQgb2Zmc2V0ID0gKHkgKyBzZWxmLnRvcCkgKiBzZWxmLmRhdGFXaWR0aCArIHNlbGYubGVmdDsKKyAgbWVtY3B5KHJvdywgc2VsZi55dXZEYXRhICsgb2Zmc2V0LCBzZWxmLndpZHRoKTsKKyAgcmV0dXJuIHJvdzsKK30KKworLSAoaW50OF90ICopbWF0cml4IHsKKyAgaW50IGFyZWEgPSBzZWxmLndpZHRoICogc2VsZi5oZWlnaHQ7CisgIGludDhfdCAqbWF0cml4ID0gbWFsbG9jKGFyZWEgKiBzaXplb2YoaW50OF90KSk7CisgIGludCBpbnB1dE9mZnNldCA9IHNlbGYudG9wICogc2VsZi5kYXRhV2lkdGggKyBzZWxmLmxlZnQ7CisKKyAgLy8gSWYgdGhlIHdpZHRoIG1hdGNoZXMgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIHVuZGVybHlpbmcgZGF0YSwgcGVyZm9ybSBhIHNpbmdsZSBjb3B5LgorICBpZiAoc2VsZi53aWR0aCA9PSBzZWxmLmRhdGFXaWR0aCkgeworICAgIG1lbWNweShtYXRyaXgsIHNlbGYueXV2RGF0YSArIGlucHV0T2Zmc2V0LCBhcmVhIC0gaW5wdXRPZmZzZXQpOworICAgIHJldHVybiBtYXRyaXg7CisgIH0KKworICAvLyBPdGhlcndpc2UgY29weSBvbmUgY3JvcHBlZCByb3cgYXQgYSB0aW1lLgorICBmb3IgKGludCB5ID0gMDsgeSA8IHNlbGYuaGVpZ2h0OyB5KyspIHsKKyAgICBpbnQgb3V0cHV0T2Zmc2V0ID0geSAqIHNlbGYud2lkdGg7CisgICAgbWVtY3B5KG1hdHJpeCArIG91dHB1dE9mZnNldCwgc2VsZi55dXZEYXRhICsgaW5wdXRPZmZzZXQsIHNlbGYud2lkdGgpOworICAgIGlucHV0T2Zmc2V0ICs9IHNlbGYuZGF0YVdpZHRoOworICB9CisgIHJldHVybiBtYXRyaXg7Cit9CisKKy0gKEJPT0wpY3JvcFN1cHBvcnRlZCB7CisgIHJldHVybiBZRVM7Cit9CisKKy0gKFpYTHVtaW5hbmNlU291cmNlICopY3JvcDooaW50KWxlZnQgdG9wOihpbnQpdG9wIHdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0IHsKKyAgcmV0dXJuIFtbW3NlbGYgY2xhc3NdIGFsbG9jXSBpbml0V2l0aFl1dkRhdGE6c2VsZi55dXZEYXRhIHl1dkRhdGFMZW46c2VsZi55dXZEYXRhTGVuIGRhdGFXaWR0aDpzZWxmLmRhdGFXaWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUhlaWdodDpzZWxmLmRhdGFIZWlnaHQgbGVmdDpzZWxmLmxlZnQgKyBsZWZ0IHRvcDpzZWxmLnRvcCArIHRvcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0IHJldmVyc2VIb3Jpem9udGFsOk5PXTsKK30KKworLSAoaW50ICopcmVuZGVyVGh1bWJuYWlsIHsKKyAgaW50IHRodW1iV2lkdGggPSBzZWxmLndpZHRoIC8gVEhVTUJOQUlMX1NDQUxFX0ZBQ1RPUjsKKyAgaW50IHRodW1iSGVpZ2h0ID0gc2VsZi5oZWlnaHQgLyBUSFVNQk5BSUxfU0NBTEVfRkFDVE9SOworICBpbnQgKnBpeGVscyA9IChpbnQgKiltYWxsb2ModGh1bWJXaWR0aCAqIHRodW1iSGVpZ2h0ICogc2l6ZW9mKGludCkpOworICBpbnQgaW5wdXRPZmZzZXQgPSBzZWxmLnRvcCAqIHNlbGYuZGF0YVdpZHRoICsgc2VsZi5sZWZ0OworCisgIGZvciAoaW50IHkgPSAwOyB5IDwgc2VsZi5oZWlnaHQ7IHkrKykgeworICAgIGludCBvdXRwdXRPZmZzZXQgPSB5ICogc2VsZi53aWR0aDsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHNlbGYud2lkdGg7IHgrKykgeworICAgICAgaW50IGdyZXkgPSBzZWxmLnl1dkRhdGFbaW5wdXRPZmZzZXQgKyB4ICogVEhVTUJOQUlMX1NDQUxFX0ZBQ1RPUl0gJiAweGZmOworICAgICAgcGl4ZWxzW291dHB1dE9mZnNldCArIHhdID0gMHhGRjAwMDAwMCB8IChncmV5ICogMHgwMDAxMDEwMSk7CisgICAgfQorICAgIGlucHV0T2Zmc2V0ICs9IHNlbGYuZGF0YVdpZHRoICogVEhVTUJOQUlMX1NDQUxFX0ZBQ1RPUjsKKyAgfQorICByZXR1cm4gcGl4ZWxzOworfQorCistIChpbnQpdGh1bWJuYWlsV2lkdGggeworICByZXR1cm4gc2VsZi53aWR0aCAvIFRIVU1CTkFJTF9TQ0FMRV9GQUNUT1I7Cit9CisKKy0gKGludCl0aHVtYm5haWxIZWlnaHQgeworICByZXR1cm4gc2VsZi5oZWlnaHQgLyBUSFVNQk5BSUxfU0NBTEVfRkFDVE9SOworfQorCistICh2b2lkKXJldmVyc2VIb3Jpem9udGFsOihpbnQpX3dpZHRoIGhlaWdodDooaW50KV9oZWlnaHQgeworICBmb3IgKGludCB5ID0gMCwgcm93U3RhcnQgPSBzZWxmLnRvcCAqIHNlbGYuZGF0YVdpZHRoICsgc2VsZi5sZWZ0OyB5IDwgX2hlaWdodDsgeSsrLCByb3dTdGFydCArPSBzZWxmLmRhdGFXaWR0aCkgeworICAgIGludCBtaWRkbGUgPSByb3dTdGFydCArIF93aWR0aCAvIDI7CisgICAgZm9yIChpbnQgeDEgPSByb3dTdGFydCwgeDIgPSByb3dTdGFydCArIF93aWR0aCAtIDE7IHgxIDwgbWlkZGxlOyB4MSsrLCB4Mi0tKSB7CisgICAgICBpbnQ4X3QgdGVtcCA9IHNlbGYueXV2RGF0YVt4MV07CisgICAgICBzZWxmLnl1dkRhdGFbeDFdID0gc2VsZi55dXZEYXRhW3gyXTsKKyAgICAgIHNlbGYueXV2RGF0YVt4Ml0gPSB0ZW1wOworICAgIH0KKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhSR0JMdW1pbmFuY2VTb3VyY2UuaCBiL1pYaW5nT2JqQy9aWFJHQkx1bWluYW5jZVNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTJjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvWlhSR0JMdW1pbmFuY2VTb3VyY2UuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEx1bWluYW5jZVNvdXJjZS5oIgorCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBoZWxwIGRlY29kZSBpbWFnZXMgZnJvbSBmaWxlcyB3aGljaCBhcnJpdmUgYXMgUkdCIGRhdGEgZnJvbQorICogYW4gQVJHQiBwaXhlbCBhcnJheS4gSXQgZG9lcyBub3Qgc3VwcG9ydCByb3RhdGlvbi4KKyAqLworCitAaW50ZXJmYWNlIFpYUkdCTHVtaW5hbmNlU291cmNlIDogWlhMdW1pbmFuY2VTb3VyY2UKKworLSAoaWQpaW5pdFdpdGhXaWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodCBwaXhlbHM6KGludCAqKXBpeGVscyBwaXhlbHNMZW46KGludClwaXhlbHNMZW47CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9aWFJHQkx1bWluYW5jZVNvdXJjZS5tIGIvWlhpbmdPYmpDL1pYUkdCTHVtaW5hbmNlU291cmNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZkYzE5OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWFJHQkx1bWluYW5jZVNvdXJjZS5tCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJHQkx1bWluYW5jZVNvdXJjZS5oIgorCitAaW50ZXJmYWNlIFpYUkdCTHVtaW5hbmNlU291cmNlICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludDhfdCAqbHVtaW5hbmNlczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBsdW1pbmFuY2VzQ291bnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgZGF0YVdpZHRoOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGRhdGFIZWlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbGVmdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCB0b3A7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYUkdCTHVtaW5hbmNlU291cmNlCisKKy0gKGlkKWluaXRXaXRoV2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgcGl4ZWxzOihpbnQgKilwaXhlbHMgcGl4ZWxzTGVuOihpbnQpcGl4ZWxzTGVuIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhXaWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0XSkgeworICAgIF9kYXRhV2lkdGggPSB3aWR0aDsKKyAgICBfZGF0YUhlaWdodCA9IGhlaWdodDsKKyAgICBfbGVmdCA9IDA7CisgICAgX3RvcCA9IDA7CisKKyAgICAvLyBJbiBvcmRlciB0byBtZWFzdXJlIHB1cmUgZGVjb2Rpbmcgc3BlZWQsIHdlIGNvbnZlcnQgdGhlIGVudGlyZSBpbWFnZSB0byBhIGdyZXlzY2FsZSBhcnJheQorICAgIC8vIHVwIGZyb250LCB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgWSBjaGFubmVsIG9mIHRoZSBZVVZMdW1pbmFuY2VTb3VyY2UgaW4gdGhlIHJlYWwgYXBwLgorICAgIF9sdW1pbmFuY2VzQ291bnQgPSB3aWR0aCAqIGhlaWdodDsKKyAgICBfbHVtaW5hbmNlcyA9IChpbnQ4X3QgKiltYWxsb2MoX2x1bWluYW5jZXNDb3VudCAqIHNpemVvZihpbnQ4X3QpKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICBpbnQgb2Zmc2V0ID0geSAqIHdpZHRoOworICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgIGludCBwaXhlbCA9IHBpeGVsc1tvZmZzZXQgKyB4XTsKKyAgICAgICAgaW50IHIgPSAocGl4ZWwgPj4gMTYpICYgMHhmZjsKKyAgICAgICAgaW50IGcgPSAocGl4ZWwgPj4gOCkgJiAweGZmOworICAgICAgICBpbnQgYiA9IHBpeGVsICYgMHhmZjsKKyAgICAgICAgaWYgKHIgPT0gZyAmJiBnID09IGIpIHsKKyAgICAgICAgICAvLyBJbWFnZSBpcyBhbHJlYWR5IGdyZXlzY2FsZSwgc28gcGljayBhbnkgY2hhbm5lbC4KKyAgICAgICAgICBfbHVtaW5hbmNlc1tvZmZzZXQgKyB4XSA9IChjaGFyKSByOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIENhbGN1bGF0ZSBsdW1pbmFuY2UgY2hlYXBseSwgZmF2b3JpbmcgZ3JlZW4uCisgICAgICAgICAgX2x1bWluYW5jZXNbb2Zmc2V0ICsgeF0gPSAoY2hhcikgKChyICsgZyArIGcgKyBiKSA+PiAyKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aFBpeGVsczooaW50OF90ICopcGl4ZWxzIHBpeGVsc0xlbjooaW50KXBpeGVsc0xlbiBkYXRhV2lkdGg6KGludClkYXRhV2lkdGggZGF0YUhlaWdodDooaW50KWRhdGFIZWlnaHQKKyAgICAgICAgICAgICAgICBsZWZ0OihpbnQpbGVmdCB0b3A6KGludCl0b3Agd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0V2l0aFdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHRdKSB7CisgICAgaWYgKGxlZnQgKyBzZWxmLndpZHRoID4gZGF0YVdpZHRoIHx8IHRvcCArIHNlbGYuaGVpZ2h0ID4gZGF0YUhlaWdodCkgeworICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkNyb3AgcmVjdGFuZ2xlIGRvZXMgbm90IGZpdCB3aXRoaW4gaW1hZ2UgZGF0YS4iXTsKKyAgICB9CisKKyAgICBfbHVtaW5hbmNlc0NvdW50ID0gcGl4ZWxzTGVuOworICAgIF9sdW1pbmFuY2VzID0gKGludDhfdCAqKW1hbGxvYyhwaXhlbHNMZW4gKiBzaXplb2YoaW50OF90KSk7CisgICAgbWVtY3B5KF9sdW1pbmFuY2VzLCBwaXhlbHMsIHBpeGVsc0xlbiAqIHNpemVvZihpbnQ4X3QpKTsKKworICAgIF9kYXRhV2lkdGggPSBkYXRhV2lkdGg7CisgICAgX2RhdGFIZWlnaHQgPSBkYXRhSGVpZ2h0OworICAgIF9sZWZ0ID0gbGVmdDsKKyAgICBfdG9wID0gdG9wOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGludDhfdCAqKXJvdzooaW50KXkgeworICBpZiAoeSA8IDAgfHwgeSA+PSBzZWxmLmhlaWdodCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJSZXF1ZXN0ZWQgcm93IGlzIG91dHNpZGUgdGhlIGltYWdlOiAlZCIsIHldOworICB9CisgIGludDhfdCAqcm93ID0gKGludDhfdCAqKW1hbGxvYyhzZWxmLndpZHRoICogc2l6ZW9mKGludDhfdCkpOworCisgIGludCBvZmZzZXQgPSAoeSArIHNlbGYudG9wKSAqIHNlbGYuZGF0YVdpZHRoICsgc2VsZi5sZWZ0OworICBtZW1jcHkocm93LCBzZWxmLmx1bWluYW5jZXMgKyBvZmZzZXQsIHNlbGYud2lkdGgpOworICByZXR1cm4gcm93OworfQorCistIChpbnQ4X3QgKiltYXRyaXggeworICBpbnQgYXJlYSA9IHNlbGYud2lkdGggKiBzZWxmLmhlaWdodDsKKyAgaW50OF90ICptYXRyaXggPSAoaW50OF90ICopbWFsbG9jKGFyZWEgKiBzaXplb2YoaW50OF90KSk7CisgIGludCBpbnB1dE9mZnNldCA9IHNlbGYudG9wICogc2VsZi5kYXRhV2lkdGggKyBzZWxmLmxlZnQ7CisKKyAgLy8gSWYgdGhlIHdpZHRoIG1hdGNoZXMgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIHVuZGVybHlpbmcgZGF0YSwgcGVyZm9ybSBhIHNpbmdsZSBjb3B5LgorICBpZiAoc2VsZi53aWR0aCA9PSBzZWxmLmRhdGFXaWR0aCkgeworICAgIG1lbWNweShtYXRyaXgsIHNlbGYubHVtaW5hbmNlcyArIGlucHV0T2Zmc2V0LCBhcmVhIC0gaW5wdXRPZmZzZXQpOworICAgIHJldHVybiBtYXRyaXg7CisgIH0KKworICAvLyBPdGhlcndpc2UgY29weSBvbmUgY3JvcHBlZCByb3cgYXQgYSB0aW1lLgorICBmb3IgKGludCB5ID0gMDsgeSA8IHNlbGYuaGVpZ2h0OyB5KyspIHsKKyAgICBpbnQgb3V0cHV0T2Zmc2V0ID0geSAqIHNlbGYud2lkdGg7CisgICAgbWVtY3B5KG1hdHJpeCArIG91dHB1dE9mZnNldCwgc2VsZi5sdW1pbmFuY2VzICsgaW5wdXRPZmZzZXQsIHNlbGYud2lkdGgpOworICAgIGlucHV0T2Zmc2V0ICs9IHNlbGYuZGF0YVdpZHRoOworICB9CisgIHJldHVybiBtYXRyaXg7Cit9CisKKy0gKEJPT0wpY3JvcFN1cHBvcnRlZCB7CisgIHJldHVybiBZRVM7Cit9CisKKy0gKFpYTHVtaW5hbmNlU291cmNlICopY3JvcDooaW50KWxlZnQgdG9wOihpbnQpdG9wIHdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0IHsKKyAgcmV0dXJuIFtbW3NlbGYgY2xhc3NdIGFsbG9jXSBpbml0V2l0aFBpeGVsczpzZWxmLmx1bWluYW5jZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc0xlbjpzZWxmLmx1bWluYW5jZXNDb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVdpZHRoOnNlbGYuZGF0YVdpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFIZWlnaHQ6c2VsZi5kYXRhSGVpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6c2VsZi5sZWZ0ICsgbGVmdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOnNlbGYudG9wICsgdG9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6d2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDpoZWlnaHRdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhSZWFkZXIuaCBiL1pYaW5nT2JqQy9aWFJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMjA3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvWlhSZWFkZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGludGVyZmFjZSBjYW4gZGVjb2RlIGFuIGltYWdlIG9mIGEgYmFyY29kZSBpbiBzb21lIGZvcm1hdCBpbnRvCisgKiB0aGUgU3RyaW5nIGl0IGVuY29kZXMuIEZvciBleGFtcGxlLCBaWFFSQ29kZVJlYWRlciBjYW4KKyAqIGRlY29kZSBhIFFSIGNvZGUuIFRoZSBkZWNvZGVyIG1heSBvcHRpb25hbGx5IHJlY2VpdmUgaGludHMgZnJvbSB0aGUgY2FsbGVyIHdoaWNoIG1heSBoZWxwCisgKiBpdCBkZWNvZGUgbW9yZSBxdWlja2x5IG9yIGFjY3VyYXRlbHkuCisgKiAKKyAqIFNlZSBaWE11bHRpRm9ybWF0UmVhZGVyLCB3aGljaCBhdHRlbXB0cyB0byBkZXRlcm1pbmUgd2hhdCBiYXJjb2RlCisgKiBmb3JtYXQgaXMgcHJlc2VudCB3aXRoaW4gdGhlIGltYWdlIGFzIHdlbGwsIGFuZCB0aGVuIGRlY29kZXMgaXQgYWNjb3JkaW5nbHkuCisgKi8KKworQGNsYXNzIFpYQmluYXJ5Qml0bWFwLCBaWERlY29kZUhpbnRzLCBaWFJlc3VsdDsKKworQHByb3RvY29sIFpYUmVhZGVyIDxOU09iamVjdD4KKworLSAoWlhSZXN1bHQgKilkZWNvZGU6KFpYQmluYXJ5Qml0bWFwICopaW1hZ2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CistIChaWFJlc3VsdCAqKWRlY29kZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAodm9pZClyZXNldDsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYUmVzdWx0LmggYi9aWGluZ09iakMvWlhSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzFkMmJjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYUmVzdWx0LmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCYXJjb2RlRm9ybWF0LmgiCisjaW1wb3J0ICJaWFJlc3VsdE1ldGFkYXRhVHlwZS5oIgorCisvKioKKyAqIEVuY2Fwc3VsYXRlcyB0aGUgcmVzdWx0IG9mIGRlY29kaW5nIGEgYmFyY29kZSB3aXRoaW4gYW4gaW1hZ2UuCisgKi8KKworQGludGVyZmFjZSBaWFJlc3VsdCA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKnRleHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50OF90ICpyYXdCeXRlczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgbGVuZ3RoOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIE5TTXV0YWJsZUFycmF5ICpyZXN1bHRQb2ludHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgWlhCYXJjb2RlRm9ybWF0IGJhcmNvZGVGb3JtYXQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgTlNNdXRhYmxlRGljdGlvbmFyeSAqcmVzdWx0TWV0YWRhdGE7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgbG9uZyB0aW1lc3RhbXA7CisKKy0gKGlkKWluaXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHJhd0J5dGVzOihpbnQ4X3QgKilyYXdCeXRlcyBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGggcmVzdWx0UG9pbnRzOihOU0FycmF5ICopcmVzdWx0UG9pbnRzIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdDsKKy0gKGlkKWluaXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHJhd0J5dGVzOihpbnQ4X3QgKilyYXdCeXRlcyBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGggcmVzdWx0UG9pbnRzOihOU0FycmF5ICopcmVzdWx0UG9pbnRzIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdCB0aW1lc3RhbXA6KGxvbmcpdGltZXN0YW1wOworKyAoaWQpcmVzdWx0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCByYXdCeXRlczooaW50OF90ICopcmF3Qnl0ZXMgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIHJlc3VsdFBvaW50czooTlNBcnJheSAqKXJlc3VsdFBvaW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQ7CisrIChpZClyZXN1bHRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHJhd0J5dGVzOihpbnQ4X3QgKilyYXdCeXRlcyBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGggcmVzdWx0UG9pbnRzOihOU0FycmF5ICopcmVzdWx0UG9pbnRzIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdCB0aW1lc3RhbXA6KGxvbmcpdGltZXN0YW1wOworLSAodm9pZClwdXRNZXRhZGF0YTooWlhSZXN1bHRNZXRhZGF0YVR5cGUpdHlwZSB2YWx1ZTooaWQpdmFsdWU7CistICh2b2lkKXB1dEFsbE1ldGFkYXRhOihOU011dGFibGVEaWN0aW9uYXJ5ICopbWV0YWRhdGE7CistICh2b2lkKWFkZFJlc3VsdFBvaW50czooTlNBcnJheSAqKW5ld1BvaW50czsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYUmVzdWx0Lm0gYi9aWGluZ09iakMvWlhSZXN1bHQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmU5YWM1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYUmVzdWx0Lm0KQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhSZXN1bHQuaCIKKworQGludGVyZmFjZSBaWFJlc3VsdCAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU011dGFibGVEaWN0aW9uYXJ5ICpyZXN1bHRNZXRhZGF0YTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TTXV0YWJsZUFycmF5ICpyZXN1bHRQb2ludHM7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYUmVzdWx0CisKKy0gKGlkKWluaXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHJhd0J5dGVzOihpbnQ4X3QgKilyYXdCeXRlcyBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGggcmVzdWx0UG9pbnRzOihOU0FycmF5ICopcmVzdWx0UG9pbnRzIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdCB7CisgIHJldHVybiBbc2VsZiBpbml0V2l0aFRleHQ6dGV4dCByYXdCeXRlczpyYXdCeXRlcyBsZW5ndGg6bGVuZ3RoIHJlc3VsdFBvaW50czpyZXN1bHRQb2ludHMgZm9ybWF0OmZvcm1hdCB0aW1lc3RhbXA6Q0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCldOworfQorCistIChpZClpbml0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCByYXdCeXRlczooaW50OF90ICopcmF3Qnl0ZXMgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIHJlc3VsdFBvaW50czooTlNBcnJheSAqKXJlc3VsdFBvaW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgdGltZXN0YW1wOihsb25nKXRpbWVzdGFtcCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3RleHQgPSB0ZXh0OworICAgIGlmIChyYXdCeXRlcyAhPSBOVUxMICYmIGxlbmd0aCA+IDApIHsKKyAgICAgIF9yYXdCeXRlcyA9IChpbnQ4X3QgKiltYWxsb2MobGVuZ3RoICogc2l6ZW9mKGludDhfdCkpOworICAgICAgbWVtY3B5KF9yYXdCeXRlcywgcmF3Qnl0ZXMsIGxlbmd0aCk7CisgICAgICBfbGVuZ3RoID0gbGVuZ3RoOworICAgIH0gZWxzZSB7CisgICAgICBfcmF3Qnl0ZXMgPSBOVUxMOworICAgICAgX2xlbmd0aCA9IDA7CisgICAgfQorICAgIF9yZXN1bHRQb2ludHMgPSBbcmVzdWx0UG9pbnRzIG11dGFibGVDb3B5XTsKKyAgICBfYmFyY29kZUZvcm1hdCA9IGZvcm1hdDsKKyAgICBfcmVzdWx0TWV0YWRhdGEgPSBuaWw7CisgICAgX3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisrIChpZClyZXN1bHRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHJhd0J5dGVzOihpbnQ4X3QgKilyYXdCeXRlcyBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGggcmVzdWx0UG9pbnRzOihOU0FycmF5ICopcmVzdWx0UG9pbnRzIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdCB7CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoVGV4dDp0ZXh0IHJhd0J5dGVzOnJhd0J5dGVzIGxlbmd0aDpsZW5ndGggcmVzdWx0UG9pbnRzOnJlc3VsdFBvaW50cyBmb3JtYXQ6Zm9ybWF0XTsKK30KKworKyAoaWQpcmVzdWx0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCByYXdCeXRlczooaW50OF90ICopcmF3Qnl0ZXMgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIHJlc3VsdFBvaW50czooTlNBcnJheSAqKXJlc3VsdFBvaW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgdGltZXN0YW1wOihsb25nKXRpbWVzdGFtcCB7CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoVGV4dDp0ZXh0IHJhd0J5dGVzOnJhd0J5dGVzIGxlbmd0aDpsZW5ndGggcmVzdWx0UG9pbnRzOnJlc3VsdFBvaW50cyBmb3JtYXQ6Zm9ybWF0IHRpbWVzdGFtcDp0aW1lc3RhbXBdOworfQorCistICh2b2lkKWRlYWxsb2MgeworICBpZiAoX3Jhd0J5dGVzICE9IE5VTEwpIHsKKyAgICBmcmVlKF9yYXdCeXRlcyk7CisgICAgX3Jhd0J5dGVzID0gTlVMTDsKKyAgfQorfQorCistICh2b2lkKXB1dE1ldGFkYXRhOihaWFJlc3VsdE1ldGFkYXRhVHlwZSl0eXBlIHZhbHVlOihpZCl2YWx1ZSB7CisgIGlmIChzZWxmLnJlc3VsdE1ldGFkYXRhID09IG5pbCkgeworICAgIHNlbGYucmVzdWx0TWV0YWRhdGEgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyAgfQorICBzZWxmLnJlc3VsdE1ldGFkYXRhW0AodHlwZSldID0gdmFsdWU7Cit9CisKKy0gKHZvaWQpcHV0QWxsTWV0YWRhdGE6KE5TTXV0YWJsZURpY3Rpb25hcnkgKiltZXRhZGF0YSB7CisgIGlmIChtZXRhZGF0YSAhPSBuaWwpIHsKKyAgICBpZiAoc2VsZi5yZXN1bHRNZXRhZGF0YSA9PSBuaWwpIHsKKyAgICAgIHNlbGYucmVzdWx0TWV0YWRhdGEgPSBtZXRhZGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgW3NlbGYucmVzdWx0TWV0YWRhdGEgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om1ldGFkYXRhXTsKKyAgICB9CisgIH0KK30KKworLSAodm9pZClhZGRSZXN1bHRQb2ludHM6KE5TQXJyYXkgKiluZXdQb2ludHMgeworICBpZiAoc2VsZi5yZXN1bHRQb2ludHMgPT0gbmlsKSB7CisgICAgc2VsZi5yZXN1bHRQb2ludHMgPSBbbmV3UG9pbnRzIG11dGFibGVDb3B5XTsKKyAgfSBlbHNlIGlmIChuZXdQb2ludHMgIT0gbmlsICYmIFtuZXdQb2ludHMgY291bnRdID4gMCkgeworICAgIFtzZWxmLnJlc3VsdFBvaW50cyBhZGRPYmplY3RzRnJvbUFycmF5Om5ld1BvaW50c107CisgIH0KK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7CisgIHJldHVybiBzZWxmLnRleHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9aWFJlc3VsdE1ldGFkYXRhVHlwZS5oIGIvWlhpbmdPYmpDL1pYUmVzdWx0TWV0YWRhdGFUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwMzFlMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWFJlc3VsdE1ldGFkYXRhVHlwZS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogUmVwcmVzZW50cyBzb21lIHR5cGUgb2YgbWV0YWRhdGEgYWJvdXQgdGhlIHJlc3VsdCBvZiB0aGUgZGVjb2RpbmcgdGhhdCB0aGUgZGVjb2RlcgorICogd2lzaGVzIHRvIGNvbW11bmljYXRlIGJhY2sgdG8gdGhlIGNhbGxlci4KKyAqLworCit0eXBlZGVmIGVudW0geworICAvKioKKyAgICogVW5zcGVjaWZpZWQsIGFwcGxpY2F0aW9uLXNwZWNpZmljIG1ldGFkYXRhLiBNYXBzIHRvIGFuIHVuc3BlY2lmaWVkIE5TT2JqZWN0LgorICAgKi8KKyAga1Jlc3VsdE1ldGFkYXRhVHlwZU90aGVyLAorICAKKyAgLyoqCisgICAqIERlbm90ZXMgdGhlIGxpa2VseSBhcHByb3hpbWF0ZSBvcmllbnRhdGlvbiBvZiB0aGUgYmFyY29kZSBpbiB0aGUgaW1hZ2UuIFRoaXMgdmFsdWUKKyAgICogaXMgZ2l2ZW4gYXMgZGVncmVlcyByb3RhdGVkIGNsb2Nrd2lzZSBmcm9tIHRoZSBub3JtYWwsIHVwcmlnaHQgb3JpZW50YXRpb24uCisgICAqIEZvciBleGFtcGxlIGEgMUQgYmFyY29kZSB3aGljaCB3YXMgZm91bmQgYnkgcmVhZGluZyB0b3AtdG8tYm90dG9tIHdvdWxkIGJlCisgICAqIHNhaWQgdG8gaGF2ZSBvcmllbnRhdGlvbiAiOTAiLiBUaGlzIGtleSBtYXBzIHRvIGFuIGludGVnZXIgd2hvc2UKKyAgICogdmFsdWUgaXMgaW4gdGhlIHJhbmdlIFswLDM2MCkuCisgICAqLworICBrUmVzdWx0TWV0YWRhdGFUeXBlT3JpZW50YXRpb24sCisKKyAgLyoqCisgICAqIDJEIGJhcmNvZGUgZm9ybWF0cyB0eXBpY2FsbHkgZW5jb2RlIHRleHQsIGJ1dCBhbGxvdyBmb3IgYSBzb3J0IG9mICdieXRlIG1vZGUnCisgICAqIHdoaWNoIGlzIHNvbWV0aW1lcyB1c2VkIHRvIGVuY29kZSBiaW5hcnkgZGF0YS4gV2hpbGUge0BsaW5rIFJlc3VsdH0gbWFrZXMgYXZhaWxhYmxlCisgICAqIHRoZSBjb21wbGV0ZSByYXcgYnl0ZXMgaW4gdGhlIGJhcmNvZGUgZm9yIHRoZXNlIGZvcm1hdHMsIGl0IGRvZXMgbm90IG9mZmVyIHRoZSBieXRlcworICAgKiBmcm9tIHRoZSBieXRlIHNlZ21lbnRzIGFsb25lLgorICAgKiAKKyAgICogVGhpcyBtYXBzIHRvIGFuIGFycmF5IG9mIGJ5dGUgYXJyYXlzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAqIHJhdyBieXRlcyBpbiB0aGUgYnl0ZSBzZWdtZW50cyBpbiB0aGUgYmFyY29kZSwgaW4gb3JkZXIuCisgICAqLworICBrUmVzdWx0TWV0YWRhdGFUeXBlQnl0ZVNlZ21lbnRzLAorCisgIC8qKgorICAgKiBFcnJvciBjb3JyZWN0aW9uIGxldmVsIHVzZWQsIGlmIGFwcGxpY2FibGUuIFRoZSB2YWx1ZSB0eXBlIGRlcGVuZHMgb24gdGhlCisgICAqIGZvcm1hdCwgYnV0IGlzIHR5cGljYWxseSBhIFN0cmluZy4KKyAgICovCisgIGtSZXN1bHRNZXRhZGF0YVR5cGVFcnJvckNvcnJlY3Rpb25MZXZlbCwKKworICAvKioKKyAgICogRm9yIHNvbWUgcGVyaW9kaWNhbHMsIGluZGljYXRlcyB0aGUgaXNzdWUgbnVtYmVyIGFzIGFuIGludGVnZXIuCisgICAqLworICBrUmVzdWx0TWV0YWRhdGFUeXBlSXNzdWVOdW1iZXIsCisKKyAgLyoqCisgICAqIEZvciBzb21lIHByb2R1Y3RzLCBpbmRpY2F0ZXMgdGhlIHN1Z2dlc3RlZCByZXRhaWwgcHJpY2UgaW4gdGhlIGJhcmNvZGUgYXMgYQorICAgKiBmb3JtYXR0ZWQgTlNTdHJpbmcuCisgICAqLworICBrUmVzdWx0TWV0YWRhdGFUeXBlU3VnZ2VzdGVkUHJpY2UsCisKKyAgLyoqCisgICAqIEZvciBzb21lIHByb2R1Y3RzLCB0aGUgcG9zc2libGUgY291bnRyeSBvZiBtYW51ZmFjdHVyZSBhcyBOU1N0cmluZyBkZW5vdGluZyB0aGUKKyAgICogSVNPIGNvdW50cnkgY29kZS4gU29tZSBtYXAgdG8gbXVsdGlwbGUgcG9zc2libGUgY291bnRyaWVzLCBsaWtlICJVUy9DQSIuCisgICAqLworICBrUmVzdWx0TWV0YWRhdGFUeXBlUG9zc2libGVDb3VudHJ5LAorCisgIC8qKgorICAgKiBGb3Igc29tZSBwcm9kdWN0cywgdGhlIGV4dGVuc2lvbiB0ZXh0CisgICAqLworICBrUmVzdWx0TWV0YWRhdGFUeXBlVVBDRUFORXh0ZW5zaW9uLAorCisgIC8qKgorICAgKiBQREY0MTctc3BlY2lmaWMgbWV0YWRhdGEKKyAgICovCisgIGtSZXN1bHRNZXRhZGF0YVR5cGVQREY0MTdFeHRyYU1ldGFkYXRhCit9IFpYUmVzdWx0TWV0YWRhdGFUeXBlOwpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYUmVzdWx0UG9pbnQuaCBiL1pYaW5nT2JqQy9aWFJlc3VsdFBvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyNTA0NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWFJlc3VsdFBvaW50LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBFbmNhcHN1bGF0ZXMgYSBwb2ludCBvZiBpbnRlcmVzdCBpbiBhbiBpbWFnZSBjb250YWluaW5nIGEgYmFyY29kZS4gVHlwaWNhbGx5LCB0aGlzCisgKiB3b3VsZCBiZSB0aGUgbG9jYXRpb24gb2YgYSBmaW5kZXIgcGF0dGVybiBvciB0aGUgY29ybmVyIG9mIHRoZSBiYXJjb2RlLCBmb3IgZXhhbXBsZS4KKyAqLworCitAaW50ZXJmYWNlIFpYUmVzdWx0UG9pbnQgOiBOU09iamVjdDxOU0NvcHlpbmc+CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBmbG9hdCB4OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGZsb2F0IHk7CisKKy0gKGlkKWluaXRXaXRoWDooZmxvYXQpeCB5OihmbG9hdCl5OworKyAoaWQpcmVzdWx0UG9pbnRXaXRoWDooZmxvYXQpeCB5OihmbG9hdCl5OworKyAodm9pZClvcmRlckJlc3RQYXR0ZXJuczooTlNNdXRhYmxlQXJyYXkgKilwYXR0ZXJuczsKKysgKGZsb2F0KWRpc3RhbmNlOihaWFJlc3VsdFBvaW50ICopcGF0dGVybjEgcGF0dGVybjI6KFpYUmVzdWx0UG9pbnQgKilwYXR0ZXJuMjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYUmVzdWx0UG9pbnQubSBiL1pYaW5nT2JqQy9aWFJlc3VsdFBvaW50Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhODhjMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWFJlc3VsdFBvaW50Lm0KQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYTWF0aFV0aWxzLmgiCisjaW1wb3J0ICJaWFJlc3VsdFBvaW50LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFJlc3VsdFBvaW50CisKKy0gKGlkKWluaXRXaXRoWDooZmxvYXQpeCB5OihmbG9hdCl5IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfeCA9IHg7CisgICAgX3kgPSB5OworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKGlkKXJlc3VsdFBvaW50V2l0aFg6KGZsb2F0KXggeTooZmxvYXQpeSB7CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoWDp4IHk6eV07Cit9CisKKy0gKGlkKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7CisgIHJldHVybiBbW1pYUmVzdWx0UG9pbnQgYWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0aFg6c2VsZi54IHk6c2VsZi55XTsKK30KKworLSAoQk9PTClpc0VxdWFsOihpZClvdGhlciB7CisgIGlmIChbb3RoZXIgaXNLaW5kT2ZDbGFzczpbWlhSZXN1bHRQb2ludCBjbGFzc11dKSB7CisgICAgWlhSZXN1bHRQb2ludCAqb3RoZXJQb2ludCA9IChaWFJlc3VsdFBvaW50ICopb3RoZXI7CisgICAgcmV0dXJuIHNlbGYueCA9PSBvdGhlclBvaW50LnggJiYgc2VsZi55ID09IG90aGVyUG9pbnQueTsKKyAgfQorICByZXR1cm4gTk87Cit9CisKKy0gKE5TVUludGVnZXIpaGFzaCB7CisgIHJldHVybiAzMSAqICooKGludCAqKSgmX3gpKSArICooKGludCAqKSgmX3kpKTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7CisgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiglZiwlZikiLCBzZWxmLngsIHNlbGYueV07Cit9CisKKy8qKgorICogT3JkZXJzIGFuIGFycmF5IG9mIHRocmVlIFJlc3VsdFBvaW50cyBpbiBhbiBvcmRlciBbQSxCLENdIHN1Y2ggdGhhdCBBQiA8IEFDIGFuZAorICogQkMgPCBBQyBhbmQgdGhlIGFuZ2xlIGJldHdlZW4gQkMgYW5kIEJBIGlzIGxlc3MgdGhhbiAxODAgZGVncmVlcy4KKyAqLworKyAodm9pZClvcmRlckJlc3RQYXR0ZXJuczooTlNNdXRhYmxlQXJyYXkgKilwYXR0ZXJucyB7CisgIGZsb2F0IHplcm9PbmVEaXN0YW5jZSA9IFtzZWxmIGRpc3RhbmNlOnBhdHRlcm5zWzBdIHBhdHRlcm4yOnBhdHRlcm5zWzFdXTsKKyAgZmxvYXQgb25lVHdvRGlzdGFuY2UgPSBbc2VsZiBkaXN0YW5jZTpwYXR0ZXJuc1sxXSBwYXR0ZXJuMjpwYXR0ZXJuc1syXV07CisgIGZsb2F0IHplcm9Ud29EaXN0YW5jZSA9IFtzZWxmIGRpc3RhbmNlOnBhdHRlcm5zWzBdIHBhdHRlcm4yOnBhdHRlcm5zWzJdXTsKKyAgWlhSZXN1bHRQb2ludCAqcG9pbnRBOworICBaWFJlc3VsdFBvaW50ICpwb2ludEI7CisgIFpYUmVzdWx0UG9pbnQgKnBvaW50QzsKKyAgaWYgKG9uZVR3b0Rpc3RhbmNlID49IHplcm9PbmVEaXN0YW5jZSAmJiBvbmVUd29EaXN0YW5jZSA+PSB6ZXJvVHdvRGlzdGFuY2UpIHsKKyAgICBwb2ludEIgPSBwYXR0ZXJuc1swXTsKKyAgICBwb2ludEEgPSBwYXR0ZXJuc1sxXTsKKyAgICBwb2ludEMgPSBwYXR0ZXJuc1syXTsKKyAgfSBlbHNlIGlmICh6ZXJvVHdvRGlzdGFuY2UgPj0gb25lVHdvRGlzdGFuY2UgJiYgemVyb1R3b0Rpc3RhbmNlID49IHplcm9PbmVEaXN0YW5jZSkgeworICAgIHBvaW50QiA9IHBhdHRlcm5zWzFdOworICAgIHBvaW50QSA9IHBhdHRlcm5zWzBdOworICAgIHBvaW50QyA9IHBhdHRlcm5zWzJdOworICB9IGVsc2UgeworICAgIHBvaW50QiA9IHBhdHRlcm5zWzJdOworICAgIHBvaW50QSA9IHBhdHRlcm5zWzBdOworICAgIHBvaW50QyA9IHBhdHRlcm5zWzFdOworICB9CisKKyAgaWYgKFtzZWxmIGNyb3NzUHJvZHVjdFo6cG9pbnRBIHBvaW50Qjpwb2ludEIgcG9pbnRDOnBvaW50Q10gPCAwLjBmKSB7CisgICAgWlhSZXN1bHRQb2ludCAqdGVtcCA9IHBvaW50QTsKKyAgICBwb2ludEEgPSBwb2ludEM7CisgICAgcG9pbnRDID0gdGVtcDsKKyAgfQorICBwYXR0ZXJuc1swXSA9IHBvaW50QTsKKyAgcGF0dGVybnNbMV0gPSBwb2ludEI7CisgIHBhdHRlcm5zWzJdID0gcG9pbnRDOworfQorCisvKioKKyAqIFJldHVybnMgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzCisgKi8KKysgKGZsb2F0KWRpc3RhbmNlOihaWFJlc3VsdFBvaW50ICopcGF0dGVybjEgcGF0dGVybjI6KFpYUmVzdWx0UG9pbnQgKilwYXR0ZXJuMiB7CisgIHJldHVybiBbWlhNYXRoVXRpbHMgZGlzdGFuY2U6cGF0dGVybjEueCBhWTpwYXR0ZXJuMS55IGJYOnBhdHRlcm4yLnggYlk6cGF0dGVybjIueV07Cit9CisKKy8qKgorICogUmV0dXJucyB0aGUgeiBjb21wb25lbnQgb2YgdGhlIGNyb3NzIHByb2R1Y3QgYmV0d2VlbiB2ZWN0b3JzIEJDIGFuZCBCQS4KKyAqLworKyAoZmxvYXQpIGNyb3NzUHJvZHVjdFo6KFpYUmVzdWx0UG9pbnQgKilwb2ludEEgcG9pbnRCOihaWFJlc3VsdFBvaW50ICopcG9pbnRCIHBvaW50QzooWlhSZXN1bHRQb2ludCAqKXBvaW50QyB7CisgIGZsb2F0IGJYID0gcG9pbnRCLng7CisgIGZsb2F0IGJZID0gcG9pbnRCLnk7CisgIHJldHVybiAoKHBvaW50Qy54IC0gYlgpICogKHBvaW50QS55IC0gYlkpKSAtICgocG9pbnRDLnkgLSBiWSkgKiAocG9pbnRBLnggLSBiWCkpOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvWlhSZXN1bHRQb2ludENhbGxiYWNrLmggYi9aWGluZ09iakMvWlhSZXN1bHRQb2ludENhbGxiYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmYTQ1MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9aWFJlc3VsdFBvaW50Q2FsbGJhY2suaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIENhbGxiYWNrIHdoaWNoIGlzIGludm9rZWQgd2hlbiBhIHBvc3NpYmxlIHJlc3VsdCBwb2ludCAoc2lnbmlmaWNhbnQKKyAqIHBvaW50IGluIHRoZSBiYXJjb2RlIGltYWdlIHN1Y2ggYXMgYSBjb3JuZXIpIGlzIGZvdW5kLgorICovCisKK0BjbGFzcyBaWFJlc3VsdFBvaW50OworCitAcHJvdG9jb2wgWlhSZXN1bHRQb2ludENhbGxiYWNrIDxOU09iamVjdD4KKworLSAodm9pZClmb3VuZFBvc3NpYmxlUmVzdWx0UG9pbnQ6KFpYUmVzdWx0UG9pbnQgKilwb2ludDsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYV3JpdGVyLmggYi9aWGluZ09iakMvWlhXcml0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2M5OTAyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL1pYV3JpdGVyLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCYXJjb2RlRm9ybWF0LmgiCisKKy8qKgorICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIHdoaWNoIGVuY29kZS9nZW5lcmF0ZSBhIGJhcmNvZGUgaW1hZ2UuCisgKi8KKworQGNsYXNzIFpYQml0TWF0cml4LCBaWEVuY29kZUhpbnRzOworCitAcHJvdG9jb2wgWlhXcml0ZXIgPE5TT2JqZWN0PgorCistIChaWEJpdE1hdHJpeCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CistIChaWEJpdE1hdHJpeCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgaGludHM6KFpYRW5jb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL1pYaW5nT2JqQy5oIGIvWlhpbmdPYmpDL1pYaW5nT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NDNjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvWlhpbmdPYmpDLmgKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisvLyBaWGluZ09iakMvYXp0ZWMvZGVjb2RlcgorI2ltcG9ydCAiWlhBenRlY0RlY29kZXIuaCIKKworLy8gWlhpbmdPYmpDL2F6dGVjL2RldGVjdG9yCisjaW1wb3J0ICJaWEF6dGVjRGV0ZWN0b3IuaCIKKworLy8gWlhpbmdPYmpDL2F6dGVjL2VuY29kZXIKKyNpbXBvcnQgIlpYQXp0ZWNDb2RlLmgiCisjaW1wb3J0ICJaWEF6dGVjRW5jb2Rlci5oIgorI2ltcG9ydCAiWlhBenRlY1dyaXRlci5oIgorCisvLyBaWGluZ09iakMvYXp0ZWMKKyNpbXBvcnQgIlpYQXp0ZWNEZXRlY3RvclJlc3VsdC5oIgorI2ltcG9ydCAiWlhBenRlY1JlYWRlci5oIgorCisvLyBaWGluZ09iakMvY2xpZW50L3Jlc3VsdAorI2ltcG9ydCAiWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWEJpemNhcmRSZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYQm9va21hcmtEb0NvTW9SZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYQ2FsZW5kYXJQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWEVtYWlsQWRkcmVzc1Jlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWEdlb1BhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhHZW9SZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYSVNCTlBhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhJU0JOUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFBhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhQYXJzZWRSZXN1bHRUeXBlLmgiCisjaW1wb3J0ICJaWFByb2R1Y3RQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUHJvZHVjdFJlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhSZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYU01TTU1TUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFNNU1BhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFNNVFBSZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYVGVsUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWFRlbFJlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhUZXh0UGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWFVSSVBhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhVUklSZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYVVJMVE9SZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYVkNhcmRSZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYVkV2ZW50UmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFdpZmlQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYV2lmaVJlc3VsdFBhcnNlci5oIgorCisvLyBaWGluZ09iakMvY2xpZW50CisjaW1wb3J0ICJaWENhcHR1cmUuaCIKKyNpbXBvcnQgIlpYQ2FwdHVyZURlbGVnYXRlLmgiCisjaW1wb3J0ICJaWENhcHR1cmVWaWV3LmgiCisjaW1wb3J0ICJaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UuaCIKKyNpbXBvcnQgIlpYSW1hZ2UuaCIKKyNpbXBvcnQgIlpYVmlldy5oIgorCisvLyBaWGluZ09iakMvY29tbW9uL2RldGVjdG9yCisjaW1wb3J0ICJaWE1hdGhVdGlscy5oIgorI2ltcG9ydCAiWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IuaCIKKyNpbXBvcnQgIlpYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5oIgorCisvLyBaWGluZ09iakMvY29tbW9uL3JlZWRzb2xvbW9uCisjaW1wb3J0ICJaWEdlbmVyaWNHRi5oIgorI2ltcG9ydCAiWlhHZW5lcmljR0ZQb2x5LmgiCisjaW1wb3J0ICJaWFJlZWRTb2xvbW9uRGVjb2Rlci5oIgorI2ltcG9ydCAiWlhSZWVkU29sb21vbkVuY29kZXIuaCIKKworLy8gWlhpbmdPYmpDL2NvbW1vbgorI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYQml0U291cmNlLmgiCisjaW1wb3J0ICJaWENoYXJhY3RlclNldEVDSS5oIgorI2ltcG9ydCAiWlhEZWNvZGVyUmVzdWx0LmgiCisjaW1wb3J0ICJaWERlZmF1bHRHcmlkU2FtcGxlci5oIgorI2ltcG9ydCAiWlhEZXRlY3RvclJlc3VsdC5oIgorI2ltcG9ydCAiWlhFQ0kuaCIKKyNpbXBvcnQgIlpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLmgiCisjaW1wb3J0ICJaWEdyaWRTYW1wbGVyLmgiCisjaW1wb3J0ICJaWEh5YnJpZEJpbmFyaXplci5oIgorI2ltcG9ydCAiWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5oIgorI2ltcG9ydCAiWlhTdHJpbmdVdGlscy5oIgorCisvLyBaWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyCisjaW1wb3J0ICJaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIuaCIKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeERhdGFCbG9jay5oIgorI2ltcG9ydCAiWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIgorI2ltcG9ydCAiWlhEYXRhTWF0cml4RGVjb2Rlci5oIgorI2ltcG9ydCAiWlhEYXRhTWF0cml4VmVyc2lvbi5oIgorCisvLyBaWGluZ09iakMvZGF0YW1hdHJpeC9kZXRlY3RvcgorI2ltcG9ydCAiWlhEYXRhTWF0cml4RGV0ZWN0b3IuaCIKKworLy8gWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2RlcgorI2ltcG9ydCAiWlhBU0NJSUVuY29kZXIuaCIKKyNpbXBvcnQgIlpYQmFzZTI1NkVuY29kZXIuaCIKKyNpbXBvcnQgIlpYQzQwRW5jb2Rlci5oIgorI2ltcG9ydCAiWlhEYXRhTWF0cml4RW5jb2Rlci5oIgorI2ltcG9ydCAiWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLmgiCisjaW1wb3J0ICJaWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0LmgiCisjaW1wb3J0ICJaWERlZmF1bHRQbGFjZW1lbnQuaCIKKyNpbXBvcnQgIlpYRWRpZmFjdEVuY29kZXIuaCIKKyNpbXBvcnQgIlpYRW5jb2RlckNvbnRleHQuaCIKKyNpbXBvcnQgIlpYSGlnaExldmVsRW5jb2Rlci5oIgorI2ltcG9ydCAiWlhTeW1ib2xJbmZvLmgiCisjaW1wb3J0ICJaWFN5bWJvbFNoYXBlSGludC5oIgorI2ltcG9ydCAiWlhUZXh0RW5jb2Rlci5oIgorI2ltcG9ydCAiWlhYMTJFbmNvZGVyLmgiCisKKy8vIFpYaW5nT2JqQy9kYXRhbWF0cml4CisjaW1wb3J0ICJaWERhdGFNYXRyaXhSZWFkZXIuaCIKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeFdyaXRlci5oIgorCisvLyBaWGluZ09iakMvbWF4aWNvZGUvZGVjb2RlcgorI2ltcG9ydCAiWlhNYXhpQ29kZUJpdE1hdHJpeFBhcnNlci5oIgorI2ltcG9ydCAiWlhNYXhpQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCIKKyNpbXBvcnQgIlpYTWF4aUNvZGVEZWNvZGVyLmgiCisKKy8vIFpYaW5nT2JqQy9tYXhpY29kZQorI2ltcG9ydCAiWlhNYXhpQ29kZVJlYWRlci5oIgorCisvLyBaWGluZ09iakMvbXVsdGkvcXJjb2RlL2RldGVjdG9yCisjaW1wb3J0ICJaWE11bHRpRGV0ZWN0b3IuaCIKKyNpbXBvcnQgIlpYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyLmgiCisKKy8vIFpYaW5nT2JqQy9tdWx0aS9xcmNvZGUKKyNpbXBvcnQgIlpYUVJDb2RlTXVsdGlSZWFkZXIuaCIKKworLy8gWlhpbmdPYmpDL211bHRpCisjaW1wb3J0ICJaWEJ5UXVhZHJhbnRSZWFkZXIuaCIKKyNpbXBvcnQgIlpYR2VuZXJpY011bHRpcGxlQmFyY29kZVJlYWRlci5oIgorI2ltcG9ydCAiWlhNdWx0aXBsZUJhcmNvZGVSZWFkZXIuaCIKKworLy8gWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzCisjaW1wb3J0ICJaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLmgiCisjaW1wb3J0ICJaWEFJMDEzMTAzZGVjb2Rlci5oIgorI2ltcG9ydCAiWlhBSTAxMzIweERlY29kZXIuaCIKKyNpbXBvcnQgIlpYQUkwMTM5MnhEZWNvZGVyLmgiCisjaW1wb3J0ICJaWEFJMDEzOTN4RGVjb2Rlci5oIgorI2ltcG9ydCAiWlhBSTAxM3gweDF4RGVjb2Rlci5oIgorI2ltcG9ydCAiWlhBSTAxM3gweERlY29kZXIuaCIKKyNpbXBvcnQgIlpYQUkwMUFuZE90aGVyQUlzLmgiCisjaW1wb3J0ICJaWEFJMDFkZWNvZGVyLmgiCisjaW1wb3J0ICJaWEFJMDF3ZWlnaHREZWNvZGVyLmgiCisjaW1wb3J0ICJaWEFueUFJRGVjb2Rlci5oIgorI2ltcG9ydCAiWlhCbG9ja1BhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhDdXJyZW50UGFyc2luZ1N0YXRlLmgiCisjaW1wb3J0ICJaWERlY29kZWRDaGFyLmgiCisjaW1wb3J0ICJaWERlY29kZWRJbmZvcm1hdGlvbi5oIgorI2ltcG9ydCAiWlhEZWNvZGVkTnVtZXJpYy5oIgorI2ltcG9ydCAiWlhEZWNvZGVkT2JqZWN0LmgiCisjaW1wb3J0ICJaWEZpZWxkUGFyc2VyLmgiCisjaW1wb3J0ICJaWEdlbmVyYWxBcHBJZERlY29kZXIuaCIKKworLy8gWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkCisjaW1wb3J0ICJaWEJpdEFycmF5QnVpbGRlci5oIgorI2ltcG9ydCAiWlhFeHBhbmRlZFBhaXIuaCIKKyNpbXBvcnQgIlpYRXhwYW5kZWRSb3cuaCIKKyNpbXBvcnQgIlpYUlNTRXhwYW5kZWRSZWFkZXIuaCIKKworLy8gWlhpbmdPYmpDL29uZWQvcnNzCisjaW1wb3J0ICJaWEFic3RyYWN0UlNTUmVhZGVyLmgiCisjaW1wb3J0ICJaWERhdGFDaGFyYWN0ZXIuaCIKKyNpbXBvcnQgIlpYUGFpci5oIgorI2ltcG9ydCAiWlhSU1MxNFJlYWRlci5oIgorI2ltcG9ydCAiWlhSU1NGaW5kZXJQYXR0ZXJuLmgiCisjaW1wb3J0ICJaWFJTU1V0aWxzLmgiCisKKy8vIFpYaW5nT2JqQy9vbmVkCisjaW1wb3J0ICJaWENvZGFCYXJSZWFkZXIuaCIKKyNpbXBvcnQgIlpYQ29kYUJhcldyaXRlci5oIgorI2ltcG9ydCAiWlhDb2RlMTI4UmVhZGVyLmgiCisjaW1wb3J0ICJaWENvZGUxMjhXcml0ZXIuaCIKKyNpbXBvcnQgIlpYQ29kZTM5UmVhZGVyLmgiCisjaW1wb3J0ICJaWENvZGUzOVdyaXRlci5oIgorI2ltcG9ydCAiWlhDb2RlOTNSZWFkZXIuaCIKKyNpbXBvcnQgIlpYRUFOMTNSZWFkZXIuaCIKKyNpbXBvcnQgIlpYRUFOMTNXcml0ZXIuaCIKKyNpbXBvcnQgIlpYRUFOOFJlYWRlci5oIgorI2ltcG9ydCAiWlhFQU44V3JpdGVyLmgiCisjaW1wb3J0ICJaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQuaCIKKyNpbXBvcnQgIlpYSVRGUmVhZGVyLmgiCisjaW1wb3J0ICJaWElURldyaXRlci5oIgorI2ltcG9ydCAiWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIuaCIKKyNpbXBvcnQgIlpYTXVsdGlGb3JtYXRVUENFQU5SZWFkZXIuaCIKKyNpbXBvcnQgIlpYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLmgiCisjaW1wb3J0ICJaWE9uZURSZWFkZXIuaCIKKyNpbXBvcnQgIlpYVVBDQVJlYWRlci5oIgorI2ltcG9ydCAiWlhVUENBV3JpdGVyLmgiCisjaW1wb3J0ICJaWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0LmgiCisjaW1wb3J0ICJaWFVQQ0VBTkV4dGVuc2lvbjVTdXBwb3J0LmgiCisjaW1wb3J0ICJaWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQuaCIKKyNpbXBvcnQgIlpYVVBDRUFOUmVhZGVyLmgiCisjaW1wb3J0ICJaWFVQQ0VBTldyaXRlci5oIgorI2ltcG9ydCAiWlhVUENFUmVhZGVyLmgiCisKKy8vIFpYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9lYworI2ltcG9ydCAiWlhNb2R1bHVzR0YuaCIKKyNpbXBvcnQgIlpYTW9kdWx1c1BvbHkuaCIKKyNpbXBvcnQgIlpYUERGNDE3RUNFcnJvckNvcnJlY3Rpb24uaCIKKworLy8gWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyCisjaW1wb3J0ICJaWFBERjQxN0JhcmNvZGVNZXRhZGF0YS5oIgorI2ltcG9ydCAiWlhQREY0MTdCYXJjb2RlVmFsdWUuaCIKKyNpbXBvcnQgIlpYUERGNDE3Qm91bmRpbmdCb3guaCIKKyNpbXBvcnQgIlpYUERGNDE3Q29kZXdvcmQuaCIKKyNpbXBvcnQgIlpYUERGNDE3Q29kZXdvcmREZWNvZGVyLmgiCisjaW1wb3J0ICJaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCIKKyNpbXBvcnQgIlpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0LmgiCisjaW1wb3J0ICJaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbi5oIgorI2ltcG9ydCAiWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4uaCIKKyNpbXBvcnQgIlpYUERGNDE3U2Nhbm5pbmdEZWNvZGVyLmgiCisKKy8vIFpYaW5nT2JqQy9wZGY0MTcvZGV0ZWN0b3IKKyNpbXBvcnQgIlpYUERGNDE3RGV0ZWN0b3IuaCIKKyNpbXBvcnQgIlpYUERGNDE3RGV0ZWN0b3JSZXN1bHQuaCIKKworLy8gWlhpbmdPYmpDL3BkZjQxNy9lbmNvZGVyCisjaW1wb3J0ICJaWEJhcmNvZGVNYXRyaXguaCIKKyNpbXBvcnQgIlpYQmFyY29kZVJvdy5oIgorI2ltcG9ydCAiWlhDb21wYWN0aW9uLmgiCisjaW1wb3J0ICJaWERpbWVuc2lvbnMuaCIKKyNpbXBvcnQgIlpYUERGNDE3LmgiCisjaW1wb3J0ICJaWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5oIgorI2ltcG9ydCAiWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLmgiCisjaW1wb3J0ICJaWFBERjQxN1dyaXRlci5oIgorCisvLyBaWGluZ09iakMvcGRmNDE3CisjaW1wb3J0ICJaWFBERjQxN0NvbW1vbi5oIgorI2ltcG9ydCAiWlhQREY0MTdSZWFkZXIuaCIKKyNpbXBvcnQgIlpYUERGNDE3UmVzdWx0TWV0YWRhdGEuaCIKKyNpbXBvcnQgIlpYUERGNDE3V3JpdGVyLmgiCisKKy8vIFpYaW5nT2JqQy9xcmNvZGUvZGVjb2RlcgorI2ltcG9ydCAiWlhEYXRhTWFzay5oIgorI2ltcG9ydCAiWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5oIgorI2ltcG9ydCAiWlhGb3JtYXRJbmZvcm1hdGlvbi5oIgorI2ltcG9ydCAiWlhNb2RlLmgiCisjaW1wb3J0ICJaWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5oIgorI2ltcG9ydCAiWlhRUkNvZGVEYXRhQmxvY2suaCIKKyNpbXBvcnQgIlpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIgorI2ltcG9ydCAiWlhRUkNvZGVEZWNvZGVyLmgiCisjaW1wb3J0ICJaWFFSQ29kZVZlcnNpb24uaCIKKworLy8gWlhpbmdPYmpDL3FyY29kZS9kZXRlY3RvcgorI2ltcG9ydCAiWlhBbGlnbm1lbnRQYXR0ZXJuLmgiCisjaW1wb3J0ICJaWEFsaWdubWVudFBhdHRlcm5GaW5kZXIuaCIKKyNpbXBvcnQgIlpYRmluZGVyUGF0dGVybkZpbmRlci5oIgorI2ltcG9ydCAiWlhGaW5kZXJQYXR0ZXJuSW5mby5oIgorI2ltcG9ydCAiWlhRUkNvZGVEZXRlY3Rvci5oIgorI2ltcG9ydCAiWlhRUkNvZGVGaW5kZXJQYXR0ZXJuLmgiCisKKy8vIFpYaW5nT2JqQy9xcmNvZGUvZW5jb2RlcgorI2ltcG9ydCAiWlhCbG9ja1BhaXIuaCIKKyNpbXBvcnQgIlpYQnl0ZU1hdHJpeC5oIgorI2ltcG9ydCAiWlhFbmNvZGVyLmgiCisjaW1wb3J0ICJaWE1hc2tVdGlsLmgiCisjaW1wb3J0ICJaWE1hdHJpeFV0aWwuaCIKKyNpbXBvcnQgIlpYUVJDb2RlLmgiCisKKy8vIFpYaW5nT2JqQy9xcmNvZGUKKyNpbXBvcnQgIlpYUVJDb2RlUmVhZGVyLmgiCisjaW1wb3J0ICJaWFFSQ29kZVdyaXRlci5oIgorCisvLyBaWGluZ09iakMKKyNpbXBvcnQgIlpYQmFyY29kZUZvcm1hdC5oIgorI2ltcG9ydCAiWlhCaW5hcml6ZXIuaCIKKyNpbXBvcnQgIlpYQmluYXJ5Qml0bWFwLmgiCisjaW1wb3J0ICJaWERlY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWERpbWVuc2lvbi5oIgorI2ltcG9ydCAiWlhFbmNvZGVIaW50cy5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYSW52ZXJ0ZWRMdW1pbmFuY2VTb3VyY2UuaCIKKyNpbXBvcnQgIlpYTHVtaW5hbmNlU291cmNlLmgiCisjaW1wb3J0ICJaWE11bHRpRm9ybWF0UmVhZGVyLmgiCisjaW1wb3J0ICJaWE11bHRpRm9ybWF0V3JpdGVyLmgiCisjaW1wb3J0ICJaWFBsYW5hcllVVkx1bWluYW5jZVNvdXJjZS5oIgorI2ltcG9ydCAiWlhSZWFkZXIuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisjaW1wb3J0ICJaWFJlc3VsdE1ldGFkYXRhVHlwZS5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludC5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludENhbGxiYWNrLmgiCisjaW1wb3J0ICJaWFJHQkx1bWluYW5jZVNvdXJjZS5oIgorI2ltcG9ydCAiWlhXcml0ZXIuaCIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9henRlYy9aWEF6dGVjRGV0ZWN0b3JSZXN1bHQuaCBiL1pYaW5nT2JqQy9henRlYy9aWEF6dGVjRGV0ZWN0b3JSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWM3YTE1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2F6dGVjL1pYQXp0ZWNEZXRlY3RvclJlc3VsdC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKyNpbXBvcnQgIlpYQml0TWF0cml4LmgiCisjaW1wb3J0ICJaWERldGVjdG9yUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhBenRlY0RldGVjdG9yUmVzdWx0IDogWlhEZXRlY3RvclJlc3VsdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgY29tcGFjdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgaW50IG5iRGF0YWJsb2NrczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgaW50IG5iTGF5ZXJzOworCistIChpZClpbml0V2l0aEJpdHM6KFpYQml0TWF0cml4ICopYml0cworICAgICAgICAgICAgcG9pbnRzOihOU0FycmF5ICopcG9pbnRzCisgICAgICAgICAgIGNvbXBhY3Q6KEJPT0wpY29tcGFjdAorICAgICAgbmJEYXRhYmxvY2tzOihpbnQpbmJEYXRhYmxvY2tzCisgICAgICAgICAgbmJMYXllcnM6KGludCluYkxheWVyczsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2F6dGVjL1pYQXp0ZWNEZXRlY3RvclJlc3VsdC5tIGIvWlhpbmdPYmpDL2F6dGVjL1pYQXp0ZWNEZXRlY3RvclJlc3VsdC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDI3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvYXp0ZWMvWlhBenRlY0RldGVjdG9yUmVzdWx0Lm0KQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBenRlY0RldGVjdG9yUmVzdWx0LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQKKworLSAoaWQpaW5pdFdpdGhCaXRzOihaWEJpdE1hdHJpeCAqKWJpdHMKKyAgICAgICAgICAgIHBvaW50czooTlNBcnJheSAqKXBvaW50cworICAgICAgICAgICBjb21wYWN0OihCT09MKWNvbXBhY3QKKyAgICAgIG5iRGF0YWJsb2NrczooaW50KW5iRGF0YWJsb2NrcworICAgICAgICAgIG5iTGF5ZXJzOihpbnQpbmJMYXllcnMgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0V2l0aEJpdHM6Yml0cyBwb2ludHM6cG9pbnRzXSkgeworICAgIF9jb21wYWN0ID0gY29tcGFjdDsKKyAgICBfbmJEYXRhYmxvY2tzID0gbmJEYXRhYmxvY2tzOworICAgIF9uYkxheWVycyA9IG5iTGF5ZXJzOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9henRlYy9aWEF6dGVjUmVhZGVyLmggYi9aWGluZ09iakMvYXp0ZWMvWlhBenRlY1JlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YTk1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvYXp0ZWMvWlhBenRlY1JlYWRlci5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUmVhZGVyLmgiCisKK0BjbGFzcyBaWEJpbmFyeUJpdG1hcCwgWlhEZWNvZGVIaW50cywgWlhSZXN1bHQ7CisKKy8qKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gZGV0ZWN0IGFuZCBkZWNvZGUgQXp0ZWMgY29kZXMgaW4gYW4gaW1hZ2UuCisgKi8KK0BpbnRlcmZhY2UgWlhBenRlY1JlYWRlciA6IE5TT2JqZWN0IDxaWFJlYWRlcj4KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2F6dGVjL1pYQXp0ZWNSZWFkZXIubSBiL1pYaW5nT2JqQy9henRlYy9aWEF6dGVjUmVhZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2MmVmNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9henRlYy9aWEF6dGVjUmVhZGVyLm0KQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBenRlY0RlY29kZXIuaCIKKyNpbXBvcnQgIlpYQXp0ZWNEZXRlY3Rvci5oIgorI2ltcG9ydCAiWlhBenRlY0RldGVjdG9yUmVzdWx0LmgiCisjaW1wb3J0ICJaWEF6dGVjUmVhZGVyLmgiCisjaW1wb3J0ICJaWEJpbmFyeUJpdG1hcC5oIgorI2ltcG9ydCAiWlhEZWNvZGVIaW50cy5oIgorI2ltcG9ydCAiWlhEZWNvZGVyUmVzdWx0LmgiCisjaW1wb3J0ICJaWFJlYWRlci5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnRDYWxsYmFjay5oIgorCitAaW1wbGVtZW50YXRpb24gWlhBenRlY1JlYWRlcgorCisvKioKKyAqIExvY2F0ZXMgYW5kIGRlY29kZXMgYSBEYXRhIE1hdHJpeCBjb2RlIGluIGFuIGltYWdlLgorICovCistIChaWFJlc3VsdCAqKWRlY29kZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIHJldHVybiBbc2VsZiBkZWNvZGU6aW1hZ2UgaGludHM6bmlsIGVycm9yOmVycm9yXTsKK30KKworLSAoWlhSZXN1bHQgKilkZWNvZGU6KFpYQmluYXJ5Qml0bWFwICopaW1hZ2UgaGludHM6KFpYRGVjb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIFpYQml0TWF0cml4ICptYXRyaXggPSBbaW1hZ2UgYmxhY2tNYXRyaXhXaXRoRXJyb3I6ZXJyb3JdOworICBpZiAoIW1hdHJpeCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQgKmRldGVjdG9yUmVzdWx0ID0gW1tbWlhBenRlY0RldGVjdG9yIGFsbG9jXSBpbml0V2l0aEltYWdlOm1hdHJpeF0gZGV0ZWN0V2l0aEVycm9yOmVycm9yXTsKKyAgaWYgKCFkZXRlY3RvclJlc3VsdCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNBcnJheSAqcG9pbnRzID0gW2RldGVjdG9yUmVzdWx0IHBvaW50c107CisKKyAgaWYgKGhpbnRzICE9IG5pbCkgeworICAgIGlkIDxaWFJlc3VsdFBvaW50Q2FsbGJhY2s+IHJwY2IgPSBoaW50cy5yZXN1bHRQb2ludENhbGxiYWNrOworICAgIGlmIChycGNiICE9IG5pbCkgeworICAgICAgZm9yIChaWFJlc3VsdFBvaW50ICpwIGluIHBvaW50cykgeworICAgICAgICBbcnBjYiBmb3VuZFBvc3NpYmxlUmVzdWx0UG9pbnQ6cF07CisgICAgICB9CisgICAgfQorICB9CisKKyAgWlhEZWNvZGVyUmVzdWx0ICpkZWNvZGVyUmVzdWx0ID0gW1tbWlhBenRlY0RlY29kZXIgYWxsb2NdIGluaXRdIGRlY29kZTpkZXRlY3RvclJlc3VsdCBlcnJvcjplcnJvcl07CisgIGlmICghZGVjb2RlclJlc3VsdCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgWlhSZXN1bHQgKnJlc3VsdCA9IFtaWFJlc3VsdCByZXN1bHRXaXRoVGV4dDpkZWNvZGVyUmVzdWx0LnRleHQgcmF3Qnl0ZXM6ZGVjb2RlclJlc3VsdC5yYXdCeXRlcyBsZW5ndGg6ZGVjb2RlclJlc3VsdC5sZW5ndGggcmVzdWx0UG9pbnRzOnBvaW50cyBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRBenRlY107CisKKyAgTlNNdXRhYmxlQXJyYXkgKmJ5dGVTZWdtZW50cyA9IGRlY29kZXJSZXN1bHQuYnl0ZVNlZ21lbnRzOworICBpZiAoYnl0ZVNlZ21lbnRzICE9IG5pbCkgeworICAgIFtyZXN1bHQgcHV0TWV0YWRhdGE6a1Jlc3VsdE1ldGFkYXRhVHlwZUJ5dGVTZWdtZW50cyB2YWx1ZTpieXRlU2VnbWVudHNdOworICB9CisgIE5TU3RyaW5nICplY0xldmVsID0gZGVjb2RlclJlc3VsdC5lY0xldmVsOworICBpZiAoZWNMZXZlbCAhPSBuaWwpIHsKKyAgICBbcmVzdWx0IHB1dE1ldGFkYXRhOmtSZXN1bHRNZXRhZGF0YVR5cGVFcnJvckNvcnJlY3Rpb25MZXZlbCB2YWx1ZTplY0xldmVsXTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpcmVzZXQgeworICAvLyBkbyBub3RoaW5nCit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9henRlYy9aWEF6dGVjV3JpdGVyLmggYi9aWGluZ09iakMvYXp0ZWMvWlhBenRlY1dyaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMDMyZTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvYXp0ZWMvWlhBenRlY1dyaXRlci5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYV3JpdGVyLmgiCisKK0BpbnRlcmZhY2UgWlhBenRlY1dyaXRlciA6IE5TT2JqZWN0IDxaWFdyaXRlcj4KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2F6dGVjL1pYQXp0ZWNXcml0ZXIubSBiL1pYaW5nT2JqQy9henRlYy9aWEF6dGVjV3JpdGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIxYmEzNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9henRlYy9aWEF6dGVjV3JpdGVyLm0KQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBenRlY0NvZGUuaCIKKyNpbXBvcnQgIlpYQXp0ZWNFbmNvZGVyLmgiCisjaW1wb3J0ICJaWEF6dGVjV3JpdGVyLmgiCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhFbmNvZGVIaW50cy5oIgorCitjb25zdCBOU1N0cmluZ0VuY29kaW5nIFpYX0RFRkFVTFRfQVpURUNfRU5DT0RJTkcgPSBOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nOworCitAaW1wbGVtZW50YXRpb24gWlhBenRlY1dyaXRlcgorCistIChaWEJpdE1hdHJpeCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW3NlbGYgZW5jb2RlOmNvbnRlbnRzIGZvcm1hdDpmb3JtYXQgd2lkdGg6d2lkdGggaGVpZ2h0OmhlaWdodCBlbmNvZGluZzpaWF9ERUZBVUxUX0FaVEVDX0VOQ09ESU5HIGVjY1BlcmNlbnQ6WlhfREVGQVVMVF9BWlRFQ19FQ19QRVJDRU5UXTsKK30KKworLSAoWlhCaXRNYXRyaXggKillbmNvZGU6KE5TU3RyaW5nICopY29udGVudHMgZm9ybWF0OihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0IHdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0IGhpbnRzOihaWEVuY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBOU1N0cmluZ0VuY29kaW5nIGVuY29kaW5nID0gaGludHMuZW5jb2Rpbmc7CisgIE5TTnVtYmVyICplY2NQZXJjZW50ID0gaGludHMuZXJyb3JDb3JyZWN0aW9uUGVyY2VudDsKKworICByZXR1cm4gW3NlbGYgZW5jb2RlOmNvbnRlbnRzCisgICAgICAgICAgICAgICBmb3JtYXQ6Zm9ybWF0CisgICAgICAgICAgICAgICB3aWR0aDp3aWR0aAorICAgICAgICAgICAgICAgaGVpZ2h0OmhlaWdodAorICAgICAgICAgICAgIGVuY29kaW5nOmVuY29kaW5nID09IDAgPyBaWF9ERUZBVUxUX0FaVEVDX0VOQ09ESU5HIDogZW5jb2RpbmcKKyAgICAgICAgICAgZWNjUGVyY2VudDplY2NQZXJjZW50ID09IG5pbCA/IFpYX0RFRkFVTFRfQVpURUNfRUNfUEVSQ0VOVCA6IFtlY2NQZXJjZW50IGludFZhbHVlXV07Cit9CisKKy0gKFpYQml0TWF0cml4ICopZW5jb2RlOihOU1N0cmluZyAqKWNvbnRlbnRzIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdCB3aWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodCBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZyllbmNvZGluZyBlY2NQZXJjZW50OihpbnQpZWNjUGVyY2VudCB7CisgIGlmIChmb3JtYXQgIT0ga0JhcmNvZGVGb3JtYXRBenRlYykgeworICAgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiQ2FuIG9ubHkgZW5jb2RlIGtCYXJjb2RlRm9ybWF0QXp0ZWMgKCVkKSwgYnV0IGdvdCAlZCIsIGtCYXJjb2RlRm9ybWF0QXp0ZWMsIGZvcm1hdF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgIH0KKyAgTlNEYXRhICpjb250ZW50c0RhdGEgPSBbY29udGVudHMgZGF0YVVzaW5nRW5jb2Rpbmc6ZW5jb2RpbmddOworICBpbnQ4X3QgKmJ5dGVzID0gKGludDhfdCAqKVtjb250ZW50c0RhdGEgYnl0ZXNdOworICBOU1VJbnRlZ2VyIGJ5dGVzTGVuID0gW2NvbnRlbnRzRGF0YSBsZW5ndGhdOworCisgIFpYQXp0ZWNDb2RlICphenRlYyA9IFtaWEF6dGVjRW5jb2RlciBlbmNvZGU6Ynl0ZXMgbGVuOihpbnQpYnl0ZXNMZW4gbWluRUNDUGVyY2VudDplY2NQZXJjZW50XTsKKyAgcmV0dXJuIFtzZWxmIHJlbmRlclJlc3VsdDphenRlYyB3aWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0XTsKK30KKworLSAoWlhCaXRNYXRyaXggKilyZW5kZXJSZXN1bHQ6KFpYQXp0ZWNDb2RlICopYXp0ZWMgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgeworICBaWEJpdE1hdHJpeCAqaW5wdXQgPSBhenRlYy5tYXRyaXg7CisgIGlmICghaW5wdXQpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaW50IGlucHV0V2lkdGggPSBpbnB1dC53aWR0aDsKKyAgaW50IGlucHV0SGVpZ2h0ID0gaW5wdXQuaGVpZ2h0OworICBpbnQgb3V0cHV0V2lkdGggPSBNQVgod2lkdGgsIGlucHV0V2lkdGgpOworICBpbnQgb3V0cHV0SGVpZ2h0ID0gTUFYKGhlaWdodCwgaW5wdXRIZWlnaHQpOworCisgIGludCBtdWx0aXBsZSA9IE1JTihvdXRwdXRXaWR0aCAvIGlucHV0V2lkdGgsIG91dHB1dEhlaWdodCAvIGlucHV0SGVpZ2h0KTsKKyAgaW50IGxlZnRQYWRkaW5nID0gKG91dHB1dFdpZHRoIC0gKGlucHV0V2lkdGggKiBtdWx0aXBsZSkpIC8gMjsKKyAgaW50IHRvcFBhZGRpbmcgPSAob3V0cHV0SGVpZ2h0IC0gKGlucHV0SGVpZ2h0ICogbXVsdGlwbGUpKSAvIDI7CisKKyAgWlhCaXRNYXRyaXggKm91dHB1dCA9IFtbWlhCaXRNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6b3V0cHV0V2lkdGggaGVpZ2h0Om91dHB1dEhlaWdodF07CisKKyAgZm9yIChpbnQgaW5wdXRZID0gMCwgb3V0cHV0WSA9IHRvcFBhZGRpbmc7IGlucHV0WSA8IGlucHV0SGVpZ2h0OyBpbnB1dFkrKywgb3V0cHV0WSArPSBtdWx0aXBsZSkgeworICAgIC8vIFdyaXRlIHRoZSBjb250ZW50cyBvZiB0aGlzIHJvdyBvZiB0aGUgYmFyY29kZQorICAgIGZvciAoaW50IGlucHV0WCA9IDAsIG91dHB1dFggPSBsZWZ0UGFkZGluZzsgaW5wdXRYIDwgaW5wdXRXaWR0aDsgaW5wdXRYKyssIG91dHB1dFggKz0gbXVsdGlwbGUpIHsKKyAgICAgIGlmIChbaW5wdXQgZ2V0WDppbnB1dFggeTppbnB1dFldKSB7CisgICAgICAgIFtvdXRwdXQgc2V0UmVnaW9uQXRMZWZ0Om91dHB1dFggdG9wOm91dHB1dFkgd2lkdGg6bXVsdGlwbGUgaGVpZ2h0Om11bHRpcGxlXTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gb3V0cHV0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvYXp0ZWMvZGVjb2Rlci9aWEF6dGVjRGVjb2Rlci5oIGIvWlhpbmdPYmpDL2F6dGVjL2RlY29kZXIvWlhBenRlY0RlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjU1MGFjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2F6dGVjL2RlY29kZXIvWlhBenRlY0RlY29kZXIuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIFRoZSBtYWluIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgQXp0ZWMgQ29kZSBkZWNvZGluZyAtLSBhcyBvcHBvc2VkIHRvIGxvY2F0aW5nIGFuZCBleHRyYWN0aW5nCisgKiB0aGUgQXp0ZWMgQ29kZSBmcm9tIGFuIGltYWdlLgorICovCisKK0BjbGFzcyBaWEF6dGVjRGV0ZWN0b3JSZXN1bHQsIFpYRGVjb2RlclJlc3VsdDsKKworQGludGVyZmFjZSBaWEF6dGVjRGVjb2RlciA6IE5TT2JqZWN0CisKKy0gKFpYRGVjb2RlclJlc3VsdCAqKWRlY29kZTooWlhBenRlY0RldGVjdG9yUmVzdWx0ICopZGV0ZWN0b3JSZXN1bHQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9henRlYy9kZWNvZGVyL1pYQXp0ZWNEZWNvZGVyLm0gYi9aWGluZ09iakMvYXp0ZWMvZGVjb2Rlci9aWEF6dGVjRGVjb2Rlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMWExNTUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvYXp0ZWMvZGVjb2Rlci9aWEF6dGVjRGVjb2Rlci5tCkBAIC0wLDAgKzEsNDgzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEF6dGVjRGVjb2Rlci5oIgorI2ltcG9ydCAiWlhBenRlY0RldGVjdG9yUmVzdWx0LmgiCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhEZWNvZGVyUmVzdWx0LmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhHZW5lcmljR0YuaCIKKyNpbXBvcnQgIlpYUmVlZFNvbG9tb25EZWNvZGVyLmgiCisKK2VudW0geworICBVUFBFUiA9IDAsCisgIExPV0VSLAorICBNSVhFRCwKKyAgRElHSVQsCisgIFBVTkNULAorICBCSU5BUlkKK307CisKK3N0YXRpYyBpbnQgTkJfQklUU19DT01QQUNUW10gPSB7CisgIDAsIDEwNCwgMjQwLCA0MDgsIDYwOAorfTsKKworc3RhdGljIGludCBOQl9CSVRTW10gPSB7CisgIDAsIDEyOCwgMjg4LCA0ODAsIDcwNCwgOTYwLCAxMjQ4LCAxNTY4LCAxOTIwLCAyMzA0LCAyNzIwLCAzMTY4LCAzNjQ4LCA0MTYwLCA0NzA0LCA1MjgwLCA1ODg4LCA2NTI4LAorICA3MjAwLCA3OTA0LCA4NjQwLCA5NDA4LCAxMDIwOCwgMTEwNDAsIDExOTA0LCAxMjgwMCwgMTM3MjgsIDE0Njg4LCAxNTY4MCwgMTY3MDQsIDE3NzYwLCAxODg0OCwgMTk5NjgKK307CisKK3N0YXRpYyBpbnQgTkJfREFUQUJMT0NLX0NPTVBBQ1RbXSA9IHsKKyAgMCwgMTcsIDQwLCA1MSwgNzYKK307CisKK3N0YXRpYyBpbnQgTkJfREFUQUJMT0NLW10gPSB7CisgIDAsIDIxLCA0OCwgNjAsIDg4LCAxMjAsIDE1NiwgMTk2LCAyNDAsIDIzMCwgMjcyLCAzMTYsIDM2NCwgNDE2LCA0NzAsIDUyOCwgNTg4LCA2NTIsIDcyMCwgNzkwLCA4NjQsCisgIDk0MCwgMTAyMCwgOTIwLCA5OTIsIDEwNjYsIDExNDQsIDEyMjQsIDEzMDYsIDEzOTIsIDE0ODAsIDE1NzAsIDE2NjQKK307CisKK3N0YXRpYyBOU1N0cmluZyAqVVBQRVJfVEFCTEVbXSA9IHsKKyAgQCJDVFJMX1BTIiwgQCIgIiwgQCJBIiwgQCJCIiwgQCJDIiwgQCJEIiwgQCJFIiwgQCJGIiwgQCJHIiwgQCJIIiwgQCJJIiwgQCJKIiwgQCJLIiwgQCJMIiwgQCJNIiwgQCJOIiwgQCJPIiwgQCJQIiwKKyAgQCJRIiwgQCJSIiwgQCJTIiwgQCJUIiwgQCJVIiwgQCJWIiwgQCJXIiwgQCJYIiwgQCJZIiwgQCJaIiwgQCJDVFJMX0xMIiwgQCJDVFJMX01MIiwgQCJDVFJMX0RMIiwgQCJDVFJMX0JTIgorfTsKKworc3RhdGljIE5TU3RyaW5nICpMT1dFUl9UQUJMRVtdID0geworICBAIkNUUkxfUFMiLCBAIiAiLCBAImEiLCBAImIiLCBAImMiLCBAImQiLCBAImUiLCBAImYiLCBAImciLCBAImgiLCBAImkiLCBAImoiLCBAImsiLCBAImwiLCBAIm0iLCBAIm4iLCBAIm8iLCBAInAiLAorICBAInEiLCBAInIiLCBAInMiLCBAInQiLCBAInUiLCBAInYiLCBAInciLCBAIngiLCBAInkiLCBAInoiLCBAIkNUUkxfVVMiLCBAIkNUUkxfTUwiLCBAIkNUUkxfREwiLCBAIkNUUkxfQlMiCit9OworCitzdGF0aWMgTlNTdHJpbmcgKk1JWEVEX1RBQkxFW10gPSB7CisgIEAiQ1RSTF9QUyIsIEAiICIsIEAiXDEiLCBAIlwyIiwgQCJcMyIsIEAiXDQiLCBAIlw1IiwgQCJcNiIsIEAiXDciLCBAIlxiIiwgQCJcdCIsIEAiXG4iLAorICBAIlwxMyIsIEAiXGYiLCBAIlxyIiwgQCJcMzMiLCBAIlwzNCIsIEAiXDM1IiwgQCJcMzYiLCBAIlwzNyIsIEAiQCIsIEAiXFwiLCBAIl4iLCBAIl8iLAorICBAImAiLCBAInwiLCBAIn4iLCBAIlwxNzciLCBAIkNUUkxfTEwiLCBAIkNUUkxfVUwiLCBAIkNUUkxfUEwiLCBAIkNUUkxfQlMiCit9OworCitzdGF0aWMgTlNTdHJpbmcgKlBVTkNUX1RBQkxFW10gPSB7CisgIEAiIiwgQCJcciIsIEAiXHJcbiIsIEAiLiAiLCBAIiwgIiwgQCI6ICIsIEAiISIsIEAiXCIiLCBAIiMiLCBAIiQiLCBAIiUiLCBAIiYiLCBAIiciLCBAIigiLCBAIikiLAorICBAIioiLCBAIisiLCBAIiwiLCBAIi0iLCBAIi4iLCBAIi8iLCBAIjoiLCBAIjsiLCBAIjwiLCBAIj0iLCBAIj4iLCBAIj8iLCBAIlsiLCBAIl0iLCBAInsiLCBAIn0iLCBAIkNUUkxfVUwiCit9OworCitzdGF0aWMgTlNTdHJpbmcgKkRJR0lUX1RBQkxFW10gPSB7CisgIEAiQ1RSTF9QUyIsIEAiICIsIEAiMCIsIEAiMSIsIEAiMiIsIEAiMyIsIEAiNCIsIEAiNSIsIEAiNiIsIEAiNyIsIEAiOCIsIEAiOSIsIEAiLCIsIEAiLiIsIEAiQ1RSTF9VTCIsIEAiQ1RSTF9VUyIKK307CisKK0BpbnRlcmZhY2UgWlhBenRlY0RlY29kZXIgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGV3b3JkU2l6ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYQXp0ZWNEZXRlY3RvclJlc3VsdCAqZGRhdGE7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgaW52ZXJ0ZWRCaXRDb3VudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBudW1Db2Rld29yZHM7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYQXp0ZWNEZWNvZGVyCisKKy0gKFpYRGVjb2RlclJlc3VsdCAqKWRlY29kZTooWlhBenRlY0RldGVjdG9yUmVzdWx0ICopZGV0ZWN0b3JSZXN1bHQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBzZWxmLmRkYXRhID0gZGV0ZWN0b3JSZXN1bHQ7CisgIFpYQml0TWF0cml4ICptYXRyaXggPSBbZGV0ZWN0b3JSZXN1bHQgYml0c107CisgIGlmICghW3NlbGYuZGRhdGEgY29tcGFjdF0pIHsKKyAgICBtYXRyaXggPSBbc2VsZiByZW1vdmVEYXNoZWRMaW5lczpbc2VsZi5kZGF0YSBiaXRzXV07CisgIH0KKworICBCT09MICpyYXdiaXRzOworICBOU1VJbnRlZ2VyIHJhd2JpdHNMZW5ndGggPSBbc2VsZiBleHRyYWN0Qml0czptYXRyaXggcEJpdHM6JnJhd2JpdHNdOworICBpZiAocmF3Yml0c0xlbmd0aCA9PSAwKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBGb3JtYXRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIEJPT0wgKmNvcnJlY3RlZEJpdHM7CisgIE5TVUludGVnZXIgY29ycmVjdGVkQml0c0xlbmd0aCA9IFtzZWxmIGNvcnJlY3RCaXRzOnJhd2JpdHMgYml0c0xlbmd0aDpyYXdiaXRzTGVuZ3RoIHBCaXRzOiZjb3JyZWN0ZWRCaXRzIGVycm9yOmVycm9yXTsKKyAgZnJlZShyYXdiaXRzKTsKKyAgcmF3Yml0cyA9IE5VTEw7CisgIGlmIChjb3JyZWN0ZWRCaXRzTGVuZ3RoID09IDApIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNTdHJpbmcgKnJlc3VsdCA9IFtzZWxmIGVuY29kZWREYXRhOmNvcnJlY3RlZEJpdHMgbGVuZ3RoOmNvcnJlY3RlZEJpdHNMZW5ndGggZXJyb3I6ZXJyb3JdOworCisgIGZyZWUoY29ycmVjdGVkQml0cyk7CisgIGNvcnJlY3RlZEJpdHMgPSBOVUxMOworCisgIGlmICghcmVzdWx0KSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICByZXR1cm4gW1taWERlY29kZXJSZXN1bHQgYWxsb2NdIGluaXRXaXRoUmF3Qnl0ZXM6TlVMTCBsZW5ndGg6MCB0ZXh0OnJlc3VsdCBieXRlU2VnbWVudHM6bmlsIGVjTGV2ZWw6bmlsXTsKK30KKworCisvKioKKyAqIAorICogR2V0cyB0aGUgc3RyaW5nIGVuY29kZWQgaW4gdGhlIGF6dGVjIGNvZGUgYml0cworICovCistIChOU1N0cmluZyAqKWVuY29kZWREYXRhOihCT09MICopY29ycmVjdGVkQml0cyBsZW5ndGg6KE5TVUludGVnZXIpY29ycmVjdGVkQml0c0xlbmd0aCBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGludCBlbmRJbmRleCA9IHNlbGYuY29kZXdvcmRTaXplICogW3NlbGYuZGRhdGEgbmJEYXRhYmxvY2tzXSAtIHNlbGYuaW52ZXJ0ZWRCaXRDb3VudDsKKyAgaWYgKGVuZEluZGV4ID4gY29ycmVjdGVkQml0c0xlbmd0aCkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgaW50IGxhc3RUYWJsZSA9IFVQUEVSOworICBpbnQgdGFibGUgPSBVUFBFUjsKKyAgaW50IHN0YXJ0SW5kZXggPSAwOworICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OjIwXTsKKyAgQk9PTCBlbmQgPSBOTzsKKyAgQk9PTCBzaGlmdCA9IE5POworICBCT09MIHN3aXRjaFNoaWZ0ID0gTk87CisgIEJPT0wgYmluYXJ5U2hpZnQgPSBOTzsKKworICB3aGlsZSAoIWVuZCkgeworICAgIGlmIChzaGlmdCkgeworICAgICAgc3dpdGNoU2hpZnQgPSBZRVM7CisgICAgfSBlbHNlIHsKKyAgICAgIGxhc3RUYWJsZSA9IHRhYmxlOworICAgIH0KKworICAgIGludCBjb2RlOworICAgIGlmIChiaW5hcnlTaGlmdCkgeworICAgICAgaWYgKGVuZEluZGV4IC0gc3RhcnRJbmRleCA8IDUpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGludCBsZW5ndGggPSBbc2VsZiByZWFkQ29kZTpjb3JyZWN0ZWRCaXRzIHN0YXJ0SW5kZXg6c3RhcnRJbmRleCBsZW5ndGg6NV07CisgICAgICBzdGFydEluZGV4ICs9IDU7CisgICAgICBpZiAobGVuZ3RoID09IDApIHsKKyAgICAgICAgaWYgKGVuZEluZGV4IC0gc3RhcnRJbmRleCA8IDExKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBsZW5ndGggPSBbc2VsZiByZWFkQ29kZTpjb3JyZWN0ZWRCaXRzIHN0YXJ0SW5kZXg6c3RhcnRJbmRleCBsZW5ndGg6MTFdICsgMzE7CisgICAgICAgIHN0YXJ0SW5kZXggKz0gMTE7CisgICAgICB9CisgICAgICBmb3IgKGludCBjaGFyQ291bnQgPSAwOyBjaGFyQ291bnQgPCBsZW5ndGg7IGNoYXJDb3VudCsrKSB7CisgICAgICAgIGlmIChlbmRJbmRleCAtIHN0YXJ0SW5kZXggPCA4KSB7CisgICAgICAgICAgZW5kID0gdHJ1ZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNvZGUgPSBbc2VsZiByZWFkQ29kZTpjb3JyZWN0ZWRCaXRzIHN0YXJ0SW5kZXg6c3RhcnRJbmRleCBsZW5ndGg6OF07CisgICAgICAgIHVuaWNoYXIgdUNvZGUgPSAodW5pY2hhciljb2RlOworICAgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6JnVDb2RlIGxlbmd0aDoxXV07CisgICAgICAgIHN0YXJ0SW5kZXggKz0gODsKKyAgICAgIH0KKyAgICAgIGJpbmFyeVNoaWZ0ID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICh0YWJsZSA9PSBCSU5BUlkpIHsKKyAgICAgICAgaWYgKGVuZEluZGV4IC0gc3RhcnRJbmRleCA8IDgpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb2RlID0gW3NlbGYgcmVhZENvZGU6Y29ycmVjdGVkQml0cyBzdGFydEluZGV4OnN0YXJ0SW5kZXggbGVuZ3RoOjhdOworICAgICAgICBzdGFydEluZGV4ICs9IDg7CisKKyAgICAgICAgdW5pY2hhciB1Q29kZSA9ICh1bmljaGFyKWNvZGU7CisgICAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczomdUNvZGUgbGVuZ3RoOjFdXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGludCBzaXplID0gNTsKKworICAgICAgICBpZiAodGFibGUgPT0gRElHSVQpIHsKKyAgICAgICAgICBzaXplID0gNDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbmRJbmRleCAtIHN0YXJ0SW5kZXggPCBzaXplKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjb2RlID0gW3NlbGYgcmVhZENvZGU6Y29ycmVjdGVkQml0cyBzdGFydEluZGV4OnN0YXJ0SW5kZXggbGVuZ3RoOnNpemVdOworICAgICAgICBzdGFydEluZGV4ICs9IHNpemU7CisKKyAgICAgICAgTlNTdHJpbmcgKnN0ciA9IFtzZWxmIGNoYXJhY3Rlcjp0YWJsZSBjb2RlOmNvZGVdOworICAgICAgICBpZiAoW3N0ciBoYXNQcmVmaXg6QCJDVFJMXyJdKSB7CisgICAgICAgICAgLy8gVGFibGUgY2hhbmdlcworICAgICAgICAgIHRhYmxlID0gW3NlbGYgdGFibGU6W3N0ciBjaGFyYWN0ZXJBdEluZGV4OjVdXTsKKworICAgICAgICAgIGlmIChbc3RyIGNoYXJhY3RlckF0SW5kZXg6Nl0gPT0gJ1MnKSB7CisgICAgICAgICAgICBzaGlmdCA9IFlFUzsKKyAgICAgICAgICAgIGlmIChbc3RyIGNoYXJhY3RlckF0SW5kZXg6NV0gPT0gJ0InKSB7CisgICAgICAgICAgICAgIGJpbmFyeVNoaWZ0ID0gWUVTOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpzdHJdOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHN3aXRjaFNoaWZ0KSB7CisgICAgICB0YWJsZSA9IGxhc3RUYWJsZTsKKyAgICAgIHNoaWZ0ID0gTk87CisgICAgICBzd2l0Y2hTaGlmdCA9IE5POworICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBnZXRzIHRoZSB0YWJsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjaGFyIHBhc3NlZAorICovCistIChpbnQpdGFibGU6KHVuaWNoYXIpdCB7CisgIGludCB0YWJsZSA9IFVQUEVSOworCisgIHN3aXRjaCAodCkgeworICBjYXNlICdVJzoKKyAgICB0YWJsZSA9IFVQUEVSOworICAgIGJyZWFrOworICBjYXNlICdMJzoKKyAgICB0YWJsZSA9IExPV0VSOworICAgIGJyZWFrOworICBjYXNlICdQJzoKKyAgICB0YWJsZSA9IFBVTkNUOworICAgIGJyZWFrOworICBjYXNlICdNJzoKKyAgICB0YWJsZSA9IE1JWEVEOworICAgIGJyZWFrOworICBjYXNlICdEJzoKKyAgICB0YWJsZSA9IERJR0lUOworICAgIGJyZWFrOworICBjYXNlICdCJzoKKyAgICB0YWJsZSA9IEJJTkFSWTsKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gdGFibGU7Cit9CisKKworLyoqCisgKiBHZXRzIHRoZSBjaGFyYWN0ZXIgKG9yIHN0cmluZykgY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIGNvZGUgaW4gdGhlIGdpdmVuIHRhYmxlCisgKi8KKy0gKE5TU3RyaW5nICopY2hhcmFjdGVyOihpbnQpdGFibGUgY29kZTooaW50KWNvZGUgeworICBzd2l0Y2ggKHRhYmxlKSB7CisgIGNhc2UgVVBQRVI6CisgICAgcmV0dXJuIFVQUEVSX1RBQkxFW2NvZGVdOworICBjYXNlIExPV0VSOgorICAgIHJldHVybiBMT1dFUl9UQUJMRVtjb2RlXTsKKyAgY2FzZSBNSVhFRDoKKyAgICByZXR1cm4gTUlYRURfVEFCTEVbY29kZV07CisgIGNhc2UgUFVOQ1Q6CisgICAgcmV0dXJuIFBVTkNUX1RBQkxFW2NvZGVdOworICBjYXNlIERJR0lUOgorICAgIHJldHVybiBESUdJVF9UQUJMRVtjb2RlXTsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gQCIiOworICB9Cit9CisKKworLyoqCisgKiBQZXJmb3JtcyBSUyBlcnJvciBjb3JyZWN0aW9uIG9uIGFuIGFycmF5IG9mIGJpdHMKKyAqLworLSAoTlNVSW50ZWdlciljb3JyZWN0Qml0czooQk9PTCAqKXJhd2JpdHMgYml0c0xlbmd0aDooTlNVSW50ZWdlcilyYXdiaXRzTGVuZ3RoIHBCaXRzOihCT09MICoqKXBCaXRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgWlhHZW5lcmljR0YgKmdmOworICBpZiAoW3NlbGYuZGRhdGEgbmJMYXllcnNdIDw9IDIpIHsKKyAgICBzZWxmLmNvZGV3b3JkU2l6ZSA9IDY7CisgICAgZ2YgPSBbWlhHZW5lcmljR0YgQXp0ZWNEYXRhNl07CisgIH0gZWxzZSBpZiAoW3NlbGYuZGRhdGEgbmJMYXllcnNdIDw9IDgpIHsKKyAgICBzZWxmLmNvZGV3b3JkU2l6ZSA9IDg7CisgICAgZ2YgPSBbWlhHZW5lcmljR0YgQXp0ZWNEYXRhOF07CisgIH0gZWxzZSBpZiAoW3NlbGYuZGRhdGEgbmJMYXllcnNdIDw9IDIyKSB7CisgICAgc2VsZi5jb2Rld29yZFNpemUgPSAxMDsKKyAgICBnZiA9IFtaWEdlbmVyaWNHRiBBenRlY0RhdGExMF07CisgIH0gZWxzZSB7CisgICAgc2VsZi5jb2Rld29yZFNpemUgPSAxMjsKKyAgICBnZiA9IFtaWEdlbmVyaWNHRiBBenRlY0RhdGExMl07CisgIH0KKworICBpbnQgbnVtRGF0YUNvZGV3b3JkcyA9IFtzZWxmLmRkYXRhIG5iRGF0YWJsb2Nrc107CisgIGludCBudW1FQ0NvZGV3b3JkczsKKyAgaW50IG9mZnNldDsKKworICBpZiAoW3NlbGYuZGRhdGEgY29tcGFjdF0pIHsKKyAgICBvZmZzZXQgPSBOQl9CSVRTX0NPTVBBQ1RbW3NlbGYuZGRhdGEgbmJMYXllcnNdXSAtIHNlbGYubnVtQ29kZXdvcmRzICogc2VsZi5jb2Rld29yZFNpemU7CisgICAgbnVtRUNDb2Rld29yZHMgPSBOQl9EQVRBQkxPQ0tfQ09NUEFDVFtbc2VsZi5kZGF0YSBuYkxheWVyc11dIC0gbnVtRGF0YUNvZGV3b3JkczsKKyAgfSBlbHNlIHsKKyAgICBvZmZzZXQgPSBOQl9CSVRTW1tzZWxmLmRkYXRhIG5iTGF5ZXJzXV0gLSBzZWxmLm51bUNvZGV3b3JkcyAqIHNlbGYuY29kZXdvcmRTaXplOworICAgIG51bUVDQ29kZXdvcmRzID0gTkJfREFUQUJMT0NLW1tzZWxmLmRkYXRhIG5iTGF5ZXJzXV0gLSBudW1EYXRhQ29kZXdvcmRzOworICB9CisKKyAgaW50IGRhdGFXb3Jkc0xlbiA9IHNlbGYubnVtQ29kZXdvcmRzOworICBpbnQgZGF0YVdvcmRzW2RhdGFXb3Jkc0xlbl07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgZGF0YVdvcmRzTGVuOyBpKyspIHsKKyAgICBkYXRhV29yZHNbaV0gPSAwOworICAgIGludCBmbGFnID0gMTsKKyAgICBmb3IgKGludCBqID0gMTsgaiA8PSBzZWxmLmNvZGV3b3JkU2l6ZTsgaisrKSB7CisgICAgICBpZiAocmF3Yml0c1tzZWxmLmNvZGV3b3JkU2l6ZSAqIGkgKyBzZWxmLmNvZGV3b3JkU2l6ZSAtIGogKyBvZmZzZXRdKSB7CisgICAgICAgIGRhdGFXb3Jkc1tpXSArPSBmbGFnOworICAgICAgfQorICAgICAgZmxhZyA8PD0gMTsKKyAgICB9CisgIH0KKworICBaWFJlZWRTb2xvbW9uRGVjb2RlciAqcnNEZWNvZGVyID0gW1taWFJlZWRTb2xvbW9uRGVjb2RlciBhbGxvY10gaW5pdFdpdGhGaWVsZDpnZl07CisgIE5TRXJyb3IgKmRlY29kZUVycm9yID0gbmlsOworICBpZiAoIVtyc0RlY29kZXIgZGVjb2RlOmRhdGFXb3JkcyByZWNlaXZlZExlbjpkYXRhV29yZHNMZW4gdHdvUzpudW1FQ0NvZGV3b3JkcyBlcnJvcjomZGVjb2RlRXJyb3JdKSB7CisgICAgaWYgKGRlY29kZUVycm9yLmNvZGUgPT0gWlhSZWVkU29sb21vbkVycm9yKSB7CisgICAgICBpZiAoZXJyb3IpICplcnJvciA9IEZvcm1hdEVycm9ySW5zdGFuY2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBkZWNvZGVFcnJvcjsKKyAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KKworICBvZmZzZXQgPSAwOworICBzZWxmLmludmVydGVkQml0Q291bnQgPSAwOworCisgIE5TVUludGVnZXIgY29ycmVjdGVkQml0c0xlbmd0aCA9IG51bURhdGFDb2Rld29yZHMgKiBzZWxmLmNvZGV3b3JkU2l6ZTsKKyAgQk9PTCAqY29ycmVjdGVkQml0cyA9IChCT09MICopbWFsbG9jKGNvcnJlY3RlZEJpdHNMZW5ndGggKiBzaXplb2YoQk9PTCkpOworICBtZW1zZXQoY29ycmVjdGVkQml0cywgTk8sIGNvcnJlY3RlZEJpdHNMZW5ndGggKiBzaXplb2YoQk9PTCkpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRGF0YUNvZGV3b3JkczsgaSsrKSB7CisgICAgQk9PTCBzZXJpZXNDb2xvciA9IE5POworICAgIGludCBzZXJpZXNDb3VudCA9IDA7CisgICAgaW50IGZsYWcgPSAxIDw8IChzZWxmLmNvZGV3b3JkU2l6ZSAtIDEpOworCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzZWxmLmNvZGV3b3JkU2l6ZTsgaisrKSB7CisgICAgICBCT09MIGNvbG9yID0gKGRhdGFXb3Jkc1tpXSAmIGZsYWcpID09IGZsYWc7CisKKyAgICAgIGlmIChzZXJpZXNDb3VudCA9PSBzZWxmLmNvZGV3b3JkU2l6ZSAtIDEpIHsKKyAgICAgICAgaWYgKGNvbG9yID09IHNlcmllc0NvbG9yKSB7CisgICAgICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBGb3JtYXRFcnJvckluc3RhbmNlKCk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgc2VyaWVzQ29sb3IgPSBOTzsKKyAgICAgICAgc2VyaWVzQ291bnQgPSAwOworICAgICAgICBvZmZzZXQrKzsKKyAgICAgICAgc2VsZi5pbnZlcnRlZEJpdENvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoc2VyaWVzQ29sb3IgPT0gY29sb3IpIHsKKyAgICAgICAgICBzZXJpZXNDb3VudCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNlcmllc0NvdW50ID0gMTsKKyAgICAgICAgICBzZXJpZXNDb2xvciA9IGNvbG9yOworICAgICAgICB9CisKKyAgICAgICAgY29ycmVjdGVkQml0c1tpICogc2VsZi5jb2Rld29yZFNpemUgKyBqIC0gb2Zmc2V0XSA9IGNvbG9yOworICAgICAgfQorCisgICAgICBmbGFnID0gKGludCkoKChOU1VJbnRlZ2VyKWZsYWcpID4+IDEpOworICAgIH0KKyAgfQorCisgICpwQml0cyA9IGNvcnJlY3RlZEJpdHM7CisgIHJldHVybiBjb3JyZWN0ZWRCaXRzTGVuZ3RoOworfQorCisKKy8qKgorICogR2V0cyB0aGUgYXJyYXkgb2YgYml0cyBmcm9tIGFuIEF6dGVjIENvZGUgbWF0cml4CisgKi8KKy0gKE5TVUludGVnZXIpZXh0cmFjdEJpdHM6KFpYQml0TWF0cml4ICopbWF0cml4IHBCaXRzOihCT09MICoqKXBCaXRzIHsKKyAgTlNVSW50ZWdlciByYXdCaXRzTGVuZ3RoOworICBpZiAoW3NlbGYuZGRhdGEgY29tcGFjdF0pIHsKKyAgICBpZiAoW3NlbGYuZGRhdGEgbmJMYXllcnNdID4gKHNpemVvZihOQl9CSVRTX0NPTVBBQ1QpIC8gc2l6ZW9mKGludCkpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmF3Qml0c0xlbmd0aCA9IE5CX0JJVFNfQ09NUEFDVFtbc2VsZi5kZGF0YSBuYkxheWVyc11dOworICAgIHNlbGYubnVtQ29kZXdvcmRzID0gTkJfREFUQUJMT0NLX0NPTVBBQ1RbW3NlbGYuZGRhdGEgbmJMYXllcnNdXTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoW3NlbGYuZGRhdGEgbmJMYXllcnNdID4gKHNpemVvZihOQl9CSVRTKSAvIHNpemVvZihpbnQpKSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJhd0JpdHNMZW5ndGggPSBOQl9CSVRTW1tzZWxmLmRkYXRhIG5iTGF5ZXJzXV07CisgICAgc2VsZi5udW1Db2Rld29yZHMgPSBOQl9EQVRBQkxPQ0tbW3NlbGYuZGRhdGEgbmJMYXllcnNdXTsKKyAgfQorCisgIEJPT0wgKnJhd2JpdHMgPSAoQk9PTCAqKW1hbGxvYyhyYXdCaXRzTGVuZ3RoICogc2l6ZW9mKEJPT0wpKTsKKyAgbWVtc2V0KHJhd2JpdHMsIE5PLCByYXdCaXRzTGVuZ3RoICogc2l6ZW9mKEJPT0wpKTsKKworICBpbnQgbGF5ZXIgPSBbc2VsZi5kZGF0YSBuYkxheWVyc107CisgIGludCBzaXplID0gbWF0cml4LmhlaWdodDsKKyAgaW50IHJhd2JpdHNPZmZzZXQgPSAwOworICBpbnQgbWF0cml4T2Zmc2V0ID0gMDsKKworICB3aGlsZSAobGF5ZXIgIT0gMCkgeworICAgIGludCBmbGlwID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMiAqIHNpemUgLSA0OyBpKyspIHsKKyAgICAgIHJhd2JpdHNbcmF3Yml0c09mZnNldCArIGldID0gW21hdHJpeCBnZXRYOm1hdHJpeE9mZnNldCArIGZsaXAgeTptYXRyaXhPZmZzZXQgKyBpIC8gMl07CisKKyAgICAgIHJhd2JpdHNbcmF3Yml0c09mZnNldCArIDIgKiBzaXplIC0gNCArIGldID0gW21hdHJpeCBnZXRYOm1hdHJpeE9mZnNldCArIGkgLyAyIHk6bWF0cml4T2Zmc2V0ICsgc2l6ZSAtIDEgLSBmbGlwXTsKKworICAgICAgZmxpcCA9IChmbGlwICsgMSkgJSAyOworICAgIH0KKworICAgIGZsaXAgPSAwOworICAgIGZvciAoaW50IGkgPSAyICogc2l6ZSArIDE7IGkgPiA1OyBpLS0pIHsKKyAgICAgIHJhd2JpdHNbcmF3Yml0c09mZnNldCArIDQgKiBzaXplIC0gOCArICgyICogc2l6ZSAtIGkpICsgMV0gPQorICAgICAgICBbbWF0cml4IGdldFg6bWF0cml4T2Zmc2V0ICsgc2l6ZSAtIDEgLSBmbGlwIHk6bWF0cml4T2Zmc2V0ICsgaSAvIDIgLSAxXTsKKyAgICAgIHJhd2JpdHNbcmF3Yml0c09mZnNldCArIDYgKiBzaXplIC0gMTIgKyAoMiAqIHNpemUgLSBpKSArIDFdID0KKyAgICAgICAgW21hdHJpeCBnZXRYOm1hdHJpeE9mZnNldCArIGkgLyAyIC0gMSB5Om1hdHJpeE9mZnNldCArIGZsaXBdOworICAgICAgZmxpcCA9IChmbGlwICsgMSkgJSAyOworICAgIH0KKworICAgIG1hdHJpeE9mZnNldCArPSAyOworICAgIHJhd2JpdHNPZmZzZXQgKz0gOCAqIHNpemUgLSAxNjsKKyAgICBsYXllci0tOworICAgIHNpemUgLT0gNDsKKyAgfQorCisgICpwQml0cyA9IHJhd2JpdHM7CisgIHJldHVybiByYXdCaXRzTGVuZ3RoOworfQorCisKKy8qKgorICogVHJhbnNmb3JtcyBhbiBBenRlYyBjb2RlIG1hdHJpeCBieSByZW1vdmluZyB0aGUgY29udHJvbCBkYXNoZWQgbGluZXMKKyAqLworLSAoWlhCaXRNYXRyaXggKilyZW1vdmVEYXNoZWRMaW5lczooWlhCaXRNYXRyaXggKiltYXRyaXggeworICBpbnQgbmJEYXNoZWQgPSAxICsgMiAqICgobWF0cml4LndpZHRoIC0gMSkgLyAyIC8gMTYpOworICBaWEJpdE1hdHJpeCAqbmV3TWF0cml4ID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDptYXRyaXgud2lkdGggLSBuYkRhc2hlZCBoZWlnaHQ6bWF0cml4LmhlaWdodCAtIG5iRGFzaGVkXTsKKyAgaW50IG54ID0gMDsKKworICBmb3IgKGludCB4ID0gMDsgeCA8IG1hdHJpeC53aWR0aDsgeCsrKSB7CisgICAgaWYgKChtYXRyaXgud2lkdGggLyAyIC0geCkgJSAxNiA9PSAwKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaW50IG55ID0gMDsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF0cml4LmhlaWdodDsgeSsrKSB7CisgICAgICBpZiAoKG1hdHJpeC53aWR0aCAvIDIgLSB5KSAlIDE2ID09IDApIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBpZiAoW21hdHJpeCBnZXRYOnggeTp5XSkgeworICAgICAgICBbbmV3TWF0cml4IHNldFg6bnggeTpueV07CisgICAgICB9CisgICAgICBueSsrOworICAgIH0KKworICAgIG54Kys7CisgIH0KKworICByZXR1cm4gbmV3TWF0cml4OworfQorCisKKy8qKgorICogUmVhZHMgYSBjb2RlIG9mIGdpdmVuIGxlbmd0aCBhbmQgYXQgZ2l2ZW4gaW5kZXggaW4gYW4gYXJyYXkgb2YgYml0cworICovCistIChpbnQpcmVhZENvZGU6KEJPT0wgKilyYXdiaXRzIHN0YXJ0SW5kZXg6KGludClzdGFydEluZGV4IGxlbmd0aDooaW50KWxlbmd0aCB7CisgIGludCByZXMgPSAwOworCisgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDwgc3RhcnRJbmRleCArIGxlbmd0aDsgaSsrKSB7CisgICAgcmVzIDw8PSAxOworICAgIGlmIChyYXdiaXRzW2ldKSB7CisgICAgICByZXMrKzsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvYXp0ZWMvZGV0ZWN0b3IvWlhBenRlY0RldGVjdG9yLmggYi9aWGluZ09iakMvYXp0ZWMvZGV0ZWN0b3IvWlhBenRlY0RldGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwNDk1ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9henRlYy9kZXRlY3Rvci9aWEF6dGVjRGV0ZWN0b3IuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEVuY2Fwc3VsYXRlcyBsb2dpYyB0aGF0IGNhbiBkZXRlY3QgYW4gQXp0ZWMgQ29kZSBpbiBhbiBpbWFnZSwgZXZlbiBpZiB0aGUgQXp0ZWMgQ29kZQorICogaXMgcm90YXRlZCBvciBza2V3ZWQsIG9yIHBhcnRpYWxseSBvYnNjdXJlZC4KKyAqLworCitAY2xhc3MgWlhBenRlY0RldGVjdG9yUmVzdWx0LCBaWEJpdE1hdHJpeDsKKworQGludGVyZmFjZSBaWEF6dGVjRGV0ZWN0b3IgOiBOU09iamVjdAorCistIChpZClpbml0V2l0aEltYWdlOihaWEJpdE1hdHJpeCAqKWltYWdlOworLSAoWlhBenRlY0RldGVjdG9yUmVzdWx0ICopZGV0ZWN0V2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvYXp0ZWMvZGV0ZWN0b3IvWlhBenRlY0RldGVjdG9yLm0gYi9aWGluZ09iakMvYXp0ZWMvZGV0ZWN0b3IvWlhBenRlY0RldGVjdG9yLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwMmJjMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9henRlYy9kZXRlY3Rvci9aWEF6dGVjRGV0ZWN0b3IubQpAQCAtMCwwICsxLDY0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBenRlY0RldGVjdG9yLmgiCisjaW1wb3J0ICJaWEF6dGVjRGV0ZWN0b3JSZXN1bHQuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEdlbmVyaWNHRi5oIgorI2ltcG9ydCAiWlhHcmlkU2FtcGxlci5oIgorI2ltcG9ydCAiWlhNYXRoVXRpbHMuaCIKKyNpbXBvcnQgIlpYUmVlZFNvbG9tb25EZWNvZGVyLmgiCisjaW1wb3J0ICJaWFJlc3VsdFBvaW50LmgiCisjaW1wb3J0ICJaWFdoaXRlUmVjdGFuZ2xlRGV0ZWN0b3IuaCIKKworQGludGVyZmFjZSBaWEF6dGVjUG9pbnQgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgeDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCB5OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEF6dGVjUG9pbnQKKworLSAoaWQpaW5pdFdpdGhYOihpbnQpeCB5OihpbnQpeSB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3ggPSB4OworICAgIF95ID0geTsKKyAgfQorICByZXR1cm4gc2VsZjsKK30KKworLSAoWlhSZXN1bHRQb2ludCAqKXRvUmVzdWx0UG9pbnQgeworICByZXR1cm4gW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6c2VsZi54IHk6c2VsZi55XTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFpYQXp0ZWNEZXRlY3RvciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBCT09MIGNvbXBhY3Q7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWEJpdE1hdHJpeCAqaW1hZ2U7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbmJDZW50ZXJMYXllcnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbmJEYXRhQmxvY2tzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IG5iTGF5ZXJzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IHNoaWZ0OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEF6dGVjRGV0ZWN0b3IKKworLSAoaWQpaW5pdFdpdGhJbWFnZTooWlhCaXRNYXRyaXggKilpbWFnZSB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2ltYWdlID0gaW1hZ2U7CisgIH0KKyAgcmV0dXJuIHNlbGY7Cit9CisKKy8qKgorICogRGV0ZWN0cyBhbiBBenRlYyBDb2RlIGluIGFuIGltYWdlLgorICovCistIChaWEF6dGVjRGV0ZWN0b3JSZXN1bHQgKilkZXRlY3RXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICAvLyAxLiBHZXQgdGhlIGNlbnRlciBvZiB0aGUgYXp0ZWMgbWF0cml4CisgIFpYQXp0ZWNQb2ludCAqcENlbnRlciA9IFtzZWxmIG1hdHJpeENlbnRlcldpdGhFcnJvcjplcnJvcl07CisgIGlmICghcENlbnRlcikgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICAvLyAyLiBHZXQgdGhlIGNvcm5lcnMgb2YgdGhlIGNlbnRlciBidWxsJ3MgZXllCisgIE5TQXJyYXkgKmJ1bGxFeWVDb3JuZXJQb2ludHMgPSBbc2VsZiBidWxsRXllQ29ybmVyUG9pbnRzOnBDZW50ZXJdOworICBpZiAoIWJ1bGxFeWVDb3JuZXJQb2ludHMpIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICAvLyAzLiBHZXQgdGhlIHNpemUgb2YgdGhlIG1hdHJpeCBmcm9tIHRoZSBidWxsJ3MgZXllCisgIGlmICghW3NlbGYgZXh0cmFjdFBhcmFtZXRlcnM6YnVsbEV5ZUNvcm5lclBvaW50cyBlcnJvcjplcnJvcl0pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgLy8gNC4gR2V0IHRoZSBjb3JuZXJzIG9mIHRoZSBtYXRyaXgKKyAgTlNBcnJheSAqY29ybmVycyA9IFtzZWxmIG1hdHJpeENvcm5lclBvaW50czpidWxsRXllQ29ybmVyUG9pbnRzXTsKKyAgaWYgKCFjb3JuZXJzKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgLy8gNS4gU2FtcGxlIHRoZSBncmlkCisgIFpYQml0TWF0cml4ICpiaXRzID0gW3NlbGYgc2FtcGxlR3JpZDpzZWxmLmltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGVmdDpjb3JuZXJzW3NlbGYuc2hpZnQgJSA0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbUxlZnQ6Y29ybmVyc1soc2VsZi5zaGlmdCArIDMpICUgNF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbVJpZ2h0OmNvcm5lcnNbKHNlbGYuc2hpZnQgKyAyKSAlIDRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BSaWdodDpjb3JuZXJzWyhzZWxmLnNoaWZ0ICsgMSkgJSA0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ZXJyb3JdOworICBpZiAoIWJpdHMpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgcmV0dXJuIFtbWlhBenRlY0RldGVjdG9yUmVzdWx0IGFsbG9jXSBpbml0V2l0aEJpdHM6Yml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHM6Y29ybmVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhY3Q6c2VsZi5jb21wYWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iRGF0YWJsb2NrczpzZWxmLm5iRGF0YUJsb2NrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJMYXllcnM6c2VsZi5uYkxheWVyc107Cit9CisKKworLyoqCisgKiBFeHRyYWN0cyB0aGUgbnVtYmVyIG9mIGRhdGEgbGF5ZXJzIGFuZCBkYXRhIGJsb2NrcyBmcm9tIHRoZSBsYXllciBhcm91bmQgdGhlIGJ1bGwncyBleWUKKyAqLworLSAoQk9PTClleHRyYWN0UGFyYW1ldGVyczooTlNBcnJheSAqKWJ1bGxFeWVDb3JuZXJQb2ludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWEF6dGVjUG9pbnQgKnAwID0gYnVsbEV5ZUNvcm5lclBvaW50c1swXTsKKyAgWlhBenRlY1BvaW50ICpwMSA9IGJ1bGxFeWVDb3JuZXJQb2ludHNbMV07CisgIFpYQXp0ZWNQb2ludCAqcDIgPSBidWxsRXllQ29ybmVyUG9pbnRzWzJdOworICBaWEF6dGVjUG9pbnQgKnAzID0gYnVsbEV5ZUNvcm5lclBvaW50c1szXTsKKworICBpbnQgdHdvQ2VudGVyTGF5ZXJzID0gMiAqIHNlbGYubmJDZW50ZXJMYXllcnM7CisKKyAgLy8gR2V0IHRoZSBiaXRzIGFyb3VuZCB0aGUgYnVsbCdzIGV5ZQorICBOU0FycmF5ICpyZXNhYiA9IFtzZWxmIHNhbXBsZUxpbmU6cDAgcDI6cDEgc2l6ZTp0d29DZW50ZXJMYXllcnMgKyAxXTsKKyAgTlNBcnJheSAqcmVzYmMgPSBbc2VsZiBzYW1wbGVMaW5lOnAxIHAyOnAyIHNpemU6dHdvQ2VudGVyTGF5ZXJzICsgMV07CisgIE5TQXJyYXkgKnJlc2NkID0gW3NlbGYgc2FtcGxlTGluZTpwMiBwMjpwMyBzaXplOnR3b0NlbnRlckxheWVycyArIDFdOworICBOU0FycmF5ICpyZXNkYSA9IFtzZWxmIHNhbXBsZUxpbmU6cDMgcDI6cDAgc2l6ZTp0d29DZW50ZXJMYXllcnMgKyAxXTsKKworICAvLyBEZXRlcm1pbmUgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBtYXRyaXgKKyAgaWYgKFtyZXNhYlswXSBib29sVmFsdWVdICYmIFtyZXNhYlt0d29DZW50ZXJMYXllcnNdIGJvb2xWYWx1ZV0pIHsKKyAgICBzZWxmLnNoaWZ0ID0gMDsKKyAgfSBlbHNlIGlmIChbcmVzYmNbMF0gYm9vbFZhbHVlXSAmJiBbcmVzYmNbdHdvQ2VudGVyTGF5ZXJzXSBib29sVmFsdWVdKSB7CisgICAgc2VsZi5zaGlmdCA9IDE7CisgIH0gZWxzZSBpZiAoW3Jlc2NkWzBdIGJvb2xWYWx1ZV0gJiYgW3Jlc2NkW3R3b0NlbnRlckxheWVyc10gYm9vbFZhbHVlXSkgeworICAgIHNlbGYuc2hpZnQgPSAyOworICB9IGVsc2UgaWYgKFtyZXNkYVswXSBib29sVmFsdWVdICYmIFtyZXNkYVt0d29DZW50ZXJMYXllcnNdIGJvb2xWYWx1ZV0pIHsKKyAgICBzZWxmLnNoaWZ0ID0gMzsKKyAgfSBlbHNlIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBOTzsKKyAgfQorCisgIE5TTXV0YWJsZUFycmF5ICpwYXJhbWV0ZXJEYXRhID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgTlNNdXRhYmxlQXJyYXkgKnNoaWZ0ZWRQYXJhbWV0ZXJEYXRhID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgaWYgKHNlbGYuY29tcGFjdCkgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjg7IGkrKykgeworICAgICAgW3NoaWZ0ZWRQYXJhbWV0ZXJEYXRhIGFkZE9iamVjdDpATk9dOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNzsgaSsrKSB7CisgICAgICBzaGlmdGVkUGFyYW1ldGVyRGF0YVtpXSA9IHJlc2FiWzIraV07CisgICAgICBzaGlmdGVkUGFyYW1ldGVyRGF0YVtpICsgN10gPSByZXNiY1syK2ldOworICAgICAgc2hpZnRlZFBhcmFtZXRlckRhdGFbaSArIDE0XSA9IHJlc2NkWzIraV07CisgICAgICBzaGlmdGVkUGFyYW1ldGVyRGF0YVtpICsgMjFdID0gcmVzZGFbMitpXTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI4OyBpKyspIHsKKyAgICAgIFtwYXJhbWV0ZXJEYXRhIGFkZE9iamVjdDpzaGlmdGVkUGFyYW1ldGVyRGF0YVsoaSArIHNlbGYuc2hpZnQgKiA3KSAlIDI4XV07CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDA7IGkrKykgeworICAgICAgW3NoaWZ0ZWRQYXJhbWV0ZXJEYXRhIGFkZE9iamVjdDpATk9dOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTE7IGkrKykgeworICAgICAgaWYgKGkgPCA1KSB7CisgICAgICAgIHNoaWZ0ZWRQYXJhbWV0ZXJEYXRhW2ldID0gcmVzYWJbMiArIGldOworICAgICAgICBzaGlmdGVkUGFyYW1ldGVyRGF0YVtpICsgMTBdID0gcmVzYmNbMiArIGldOworICAgICAgICBzaGlmdGVkUGFyYW1ldGVyRGF0YVtpICsgMjBdID0gcmVzY2RbMiArIGldOworICAgICAgICBzaGlmdGVkUGFyYW1ldGVyRGF0YVtpICsgMzBdID0gcmVzZGFbMiArIGldOworICAgICAgfQorICAgICAgaWYgKGkgPiA1KSB7CisgICAgICAgIHNoaWZ0ZWRQYXJhbWV0ZXJEYXRhW2kgLSAxXSA9IHJlc2FiWzIgKyBpXTsKKyAgICAgICAgc2hpZnRlZFBhcmFtZXRlckRhdGFbaSArIDldID0gcmVzYmNbMiArIGldOworICAgICAgICBzaGlmdGVkUGFyYW1ldGVyRGF0YVtpICsgMTldID0gcmVzY2RbMiArIGldOworICAgICAgICBzaGlmdGVkUGFyYW1ldGVyRGF0YVtpICsgMjldID0gcmVzZGFbMiArIGldOworICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDA7IGkrKykgeworICAgICAgW3BhcmFtZXRlckRhdGEgYWRkT2JqZWN0OnNoaWZ0ZWRQYXJhbWV0ZXJEYXRhWyhpICsgc2VsZi5zaGlmdCAqIDEwKSAlIDQwXV07CisgICAgfQorICB9CisKKyAgaWYgKCFbc2VsZiBjb3JyZWN0UGFyYW1ldGVyRGF0YTpwYXJhbWV0ZXJEYXRhIGNvbXBhY3Q6c2VsZi5jb21wYWN0IGVycm9yOmVycm9yXSkgeworICAgIHJldHVybiBOTzsKKyAgfQorICBbc2VsZiBwYXJhbWV0ZXJzOnBhcmFtZXRlckRhdGFdOworICByZXR1cm4gWUVTOworfQorCisKKy8qKgorICogR2V0cyB0aGUgQXp0ZWMgY29kZSBjb3JuZXJzIGZyb20gdGhlIGJ1bGwncyBleWUgY29ybmVycyBhbmQgdGhlIHBhcmFtZXRlcnMKKyAqLworLSAoTlNBcnJheSAqKW1hdHJpeENvcm5lclBvaW50czooTlNBcnJheSAqKWJ1bGxFeWVDb3JuZXJQb2ludHMgeworICBaWEF6dGVjUG9pbnQgKnAwID0gYnVsbEV5ZUNvcm5lclBvaW50c1swXTsKKyAgWlhBenRlY1BvaW50ICpwMSA9IGJ1bGxFeWVDb3JuZXJQb2ludHNbMV07CisgIFpYQXp0ZWNQb2ludCAqcDIgPSBidWxsRXllQ29ybmVyUG9pbnRzWzJdOworICBaWEF6dGVjUG9pbnQgKnAzID0gYnVsbEV5ZUNvcm5lclBvaW50c1szXTsKKworICBmbG9hdCByYXRpbyA9ICgyICogc2VsZi5uYkxheWVycyArIChzZWxmLm5iTGF5ZXJzID4gNCA/IDEgOiAwKSArIChzZWxmLm5iTGF5ZXJzIC0gNCkgLyA4KSAvICgyLjBmICogc2VsZi5uYkNlbnRlckxheWVycyk7CisKKyAgaW50IGR4ID0gcDAueCAtIHAyLng7CisgIGR4ICs9IGR4ID4gMCA/IDEgOiAtMTsKKyAgaW50IGR5ID0gcDAueSAtIHAyLnk7CisgIGR5ICs9IGR5ID4gMCA/IDEgOiAtMTsKKworICBpbnQgdGFyZ2V0Y3ggPSBbWlhNYXRoVXRpbHMgcm91bmQ6cDIueCAtIHJhdGlvICogZHhdOworICBpbnQgdGFyZ2V0Y3kgPSBbWlhNYXRoVXRpbHMgcm91bmQ6cDIueSAtIHJhdGlvICogZHldOworCisgIGludCB0YXJnZXRheCA9IFtaWE1hdGhVdGlscyByb3VuZDpwMC54ICsgcmF0aW8gKiBkeF07CisgIGludCB0YXJnZXRheSA9IFtaWE1hdGhVdGlscyByb3VuZDpwMC55ICsgcmF0aW8gKiBkeV07CisKKyAgZHggPSBwMS54IC0gcDMueDsKKyAgZHggKz0gZHggPiAwID8gMSA6IC0xOworICBkeSA9IHAxLnkgLSBwMy55OworICBkeSArPSBkeSA+IDAgPyAxIDogLTE7CisKKyAgaW50IHRhcmdldGR4ID0gW1pYTWF0aFV0aWxzIHJvdW5kOnAzLnggLSByYXRpbyAqIGR4XTsKKyAgaW50IHRhcmdldGR5ID0gW1pYTWF0aFV0aWxzIHJvdW5kOnAzLnkgLSByYXRpbyAqIGR5XTsKKyAgaW50IHRhcmdldGJ4ID0gW1pYTWF0aFV0aWxzIHJvdW5kOnAxLnggKyByYXRpbyAqIGR4XTsKKyAgaW50IHRhcmdldGJ5ID0gW1pYTWF0aFV0aWxzIHJvdW5kOnAxLnkgKyByYXRpbyAqIGR5XTsKKworICBpZiAoIVtzZWxmIGlzVmFsaWRYOnRhcmdldGF4IHk6dGFyZ2V0YXldIHx8CisgICAgICAhW3NlbGYgaXNWYWxpZFg6dGFyZ2V0YnggeTp0YXJnZXRieV0gfHwKKyAgICAgICFbc2VsZiBpc1ZhbGlkWDp0YXJnZXRjeCB5OnRhcmdldGN5XSB8fAorICAgICAgIVtzZWxmIGlzVmFsaWRYOnRhcmdldGR4IHk6dGFyZ2V0ZHldKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIHJldHVybiBAW1tbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOnRhcmdldGF4IHk6dGFyZ2V0YXldLAorICAgICAgICAgIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOnRhcmdldGJ4IHk6dGFyZ2V0YnldLAorICAgICAgICAgIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOnRhcmdldGN4IHk6dGFyZ2V0Y3ldLAorICAgICAgICAgIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOnRhcmdldGR4IHk6dGFyZ2V0ZHldXTsKK30KKworCisvKioKKyAqIENvcnJlY3RzIHRoZSBwYXJhbWV0ZXIgYml0cyB1c2luZyBSZWVkLVNvbG9tb24gYWxnb3JpdGhtCisgKi8KKy0gKEJPT0wpY29ycmVjdFBhcmFtZXRlckRhdGE6KE5TTXV0YWJsZUFycmF5ICopcGFyYW1ldGVyRGF0YSBjb21wYWN0OihCT09MKWlzQ29tcGFjdCBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGludCBudW1Db2Rld29yZHM7CisgIGludCBudW1EYXRhQ29kZXdvcmRzOworCisgIGlmIChpc0NvbXBhY3QpIHsKKyAgICBudW1Db2Rld29yZHMgPSA3OworICAgIG51bURhdGFDb2Rld29yZHMgPSAyOworICB9IGVsc2UgeworICAgIG51bUNvZGV3b3JkcyA9IDEwOworICAgIG51bURhdGFDb2Rld29yZHMgPSA0OworICB9CisKKyAgaW50IG51bUVDQ29kZXdvcmRzID0gbnVtQ29kZXdvcmRzIC0gbnVtRGF0YUNvZGV3b3JkczsKKyAgaW50IHBhcmFtZXRlcldvcmRzTGVuID0gbnVtQ29kZXdvcmRzOworICBpbnQgcGFyYW1ldGVyV29yZHNbcGFyYW1ldGVyV29yZHNMZW5dOworCisgIGludCBjb2Rld29yZFNpemUgPSA0OworICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlcldvcmRzTGVuOyBpKyspIHsKKyAgICBwYXJhbWV0ZXJXb3Jkc1tpXSA9IDA7CisgICAgaW50IGZsYWcgPSAxOworICAgIGZvciAoaW50IGogPSAxOyBqIDw9IGNvZGV3b3JkU2l6ZTsgaisrKSB7CisgICAgICBpZiAoW3BhcmFtZXRlckRhdGFbY29kZXdvcmRTaXplICogaSArIGNvZGV3b3JkU2l6ZSAtIGpdIGJvb2xWYWx1ZV0pIHsKKyAgICAgICAgcGFyYW1ldGVyV29yZHNbaV0gKz0gZmxhZzsKKyAgICAgIH0KKyAgICAgIGZsYWcgPDw9IDE7CisgICAgfQorICB9CisKKyAgWlhSZWVkU29sb21vbkRlY29kZXIgKnJzRGVjb2RlciA9IFtbWlhSZWVkU29sb21vbkRlY29kZXIgYWxsb2NdIGluaXRXaXRoRmllbGQ6W1pYR2VuZXJpY0dGIEF6dGVjUGFyYW1dXTsKKyAgTlNFcnJvciAqZGVjb2RlRXJyb3IgPSBuaWw7CisgIGlmICghW3JzRGVjb2RlciBkZWNvZGU6cGFyYW1ldGVyV29yZHMgcmVjZWl2ZWRMZW46cGFyYW1ldGVyV29yZHNMZW4gdHdvUzpudW1FQ0NvZGV3b3JkcyBlcnJvcjplcnJvcl0pIHsKKyAgICBpZiAoZGVjb2RlRXJyb3IuY29kZSA9PSBaWFJlZWRTb2xvbW9uRXJyb3IpIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gTk87CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgIH0KKworICBmb3IgKGludCBpID0gMDsgaSA8IG51bURhdGFDb2Rld29yZHM7IGkrKykgeworICAgIGludCBmbGFnID0gMTsKKyAgICBmb3IgKGludCBqID0gMTsgaiA8PSBjb2Rld29yZFNpemU7IGorKykgeworICAgICAgcGFyYW1ldGVyRGF0YVtpICogY29kZXdvcmRTaXplICsgY29kZXdvcmRTaXplIC0gal0gPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6KHBhcmFtZXRlcldvcmRzW2ldICYgZmxhZykgPT0gZmxhZ107CisgICAgICBmbGFnIDw8PSAxOworICAgIH0KKyAgfQorICByZXR1cm4gWUVTOworfQorCisKKy8qKgorICogRmluZHMgdGhlIGNvcm5lcnMgb2YgYSBidWxsLWV5ZSBjZW50ZXJlZCBvbiB0aGUgcGFzc2VkIHBvaW50CisgKi8KKy0gKE5TQXJyYXkgKilidWxsRXllQ29ybmVyUG9pbnRzOihaWEF6dGVjUG9pbnQgKilwQ2VudGVyIHsKKyAgWlhBenRlY1BvaW50ICpwaW5hID0gcENlbnRlcjsKKyAgWlhBenRlY1BvaW50ICpwaW5iID0gcENlbnRlcjsKKyAgWlhBenRlY1BvaW50ICpwaW5jID0gcENlbnRlcjsKKyAgWlhBenRlY1BvaW50ICpwaW5kID0gcENlbnRlcjsKKworICBCT09MIGNvbG9yID0gWUVTOworCisgIGZvciAoc2VsZi5uYkNlbnRlckxheWVycyA9IDE7IHNlbGYubmJDZW50ZXJMYXllcnMgPCA5OyBzZWxmLm5iQ2VudGVyTGF5ZXJzKyspIHsKKyAgICBaWEF6dGVjUG9pbnQgKnBvdXRhID0gW3NlbGYgZmlyc3REaWZmZXJlbnQ6cGluYSBjb2xvcjpjb2xvciBkeDoxIGR5Oi0xXTsKKyAgICBaWEF6dGVjUG9pbnQgKnBvdXRiID0gW3NlbGYgZmlyc3REaWZmZXJlbnQ6cGluYiBjb2xvcjpjb2xvciBkeDoxIGR5OjFdOworICAgIFpYQXp0ZWNQb2ludCAqcG91dGMgPSBbc2VsZiBmaXJzdERpZmZlcmVudDpwaW5jIGNvbG9yOmNvbG9yIGR4Oi0xIGR5OjFdOworICAgIFpYQXp0ZWNQb2ludCAqcG91dGQgPSBbc2VsZiBmaXJzdERpZmZlcmVudDpwaW5kIGNvbG9yOmNvbG9yIGR4Oi0xIGR5Oi0xXTsKKworICAgIGlmIChzZWxmLm5iQ2VudGVyTGF5ZXJzID4gMikgeworICAgICAgZmxvYXQgcSA9IFtzZWxmIGRpc3RhbmNlOnBvdXRkIGI6cG91dGFdICogc2VsZi5uYkNlbnRlckxheWVycyAvIChbc2VsZiBkaXN0YW5jZTpwaW5kIGI6cGluYV0gKiAoc2VsZi5uYkNlbnRlckxheWVycyArIDIpKTsKKyAgICAgIGlmIChxIDwgMC43NSB8fCBxID4gMS4yNSB8fCAhW3NlbGYgaXNXaGl0ZU9yQmxhY2tSZWN0YW5nbGU6cG91dGEgcDI6cG91dGIgcDM6cG91dGMgcDQ6cG91dGRdKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIHBpbmEgPSBwb3V0YTsKKyAgICBwaW5iID0gcG91dGI7CisgICAgcGluYyA9IHBvdXRjOworICAgIHBpbmQgPSBwb3V0ZDsKKworICAgIGNvbG9yID0gIWNvbG9yOworICB9CisKKyAgaWYgKHNlbGYubmJDZW50ZXJMYXllcnMgIT0gNSAmJiBzZWxmLm5iQ2VudGVyTGF5ZXJzICE9IDcpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgc2VsZi5jb21wYWN0ID0gc2VsZi5uYkNlbnRlckxheWVycyA9PSA1OworCisgIGZsb2F0IHJhdGlvID0gMC43NWYgKiAyIC8gKDIgKiBzZWxmLm5iQ2VudGVyTGF5ZXJzIC0gMyk7CisKKyAgaW50IGR4ID0gcGluYS54IC0gcGluYy54OworICBpbnQgZHkgPSBwaW5hLnkgLSBwaW5jLnk7CisgIGludCB0YXJnZXRjeCA9IFtaWE1hdGhVdGlscyByb3VuZDpwaW5jLnggLSByYXRpbyAqIGR4XTsKKyAgaW50IHRhcmdldGN5ID0gW1pYTWF0aFV0aWxzIHJvdW5kOnBpbmMueSAtIHJhdGlvICogZHldOworICBpbnQgdGFyZ2V0YXggPSBbWlhNYXRoVXRpbHMgcm91bmQ6cGluYS54ICsgcmF0aW8gKiBkeF07CisgIGludCB0YXJnZXRheSA9IFtaWE1hdGhVdGlscyByb3VuZDpwaW5hLnkgKyByYXRpbyAqIGR5XTsKKworICBkeCA9IHBpbmIueCAtIHBpbmQueDsKKyAgZHkgPSBwaW5iLnkgLSBwaW5kLnk7CisKKyAgaW50IHRhcmdldGR4ID0gW1pYTWF0aFV0aWxzIHJvdW5kOnBpbmQueCAtIHJhdGlvICogZHhdOworICBpbnQgdGFyZ2V0ZHkgPSBbWlhNYXRoVXRpbHMgcm91bmQ6cGluZC55IC0gcmF0aW8gKiBkeV07CisgIGludCB0YXJnZXRieCA9IFtaWE1hdGhVdGlscyByb3VuZDpwaW5iLnggKyByYXRpbyAqIGR4XTsKKyAgaW50IHRhcmdldGJ5ID0gW1pYTWF0aFV0aWxzIHJvdW5kOnBpbmIueSArIHJhdGlvICogZHldOworCisgIGlmICghW3NlbGYgaXNWYWxpZFg6dGFyZ2V0YXggeTp0YXJnZXRheV0gfHwKKyAgICAgICFbc2VsZiBpc1ZhbGlkWDp0YXJnZXRieCB5OnRhcmdldGJ5XSB8fAorICAgICAgIVtzZWxmIGlzVmFsaWRYOnRhcmdldGN4IHk6dGFyZ2V0Y3ldIHx8CisgICAgICAhW3NlbGYgaXNWYWxpZFg6dGFyZ2V0ZHggeTp0YXJnZXRkeV0pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgWlhBenRlY1BvaW50ICpwYSA9IFtbWlhBenRlY1BvaW50IGFsbG9jXSBpbml0V2l0aFg6dGFyZ2V0YXggeTp0YXJnZXRheV07CisgIFpYQXp0ZWNQb2ludCAqcGIgPSBbW1pYQXp0ZWNQb2ludCBhbGxvY10gaW5pdFdpdGhYOnRhcmdldGJ4IHk6dGFyZ2V0YnldOworICBaWEF6dGVjUG9pbnQgKnBjID0gW1taWEF6dGVjUG9pbnQgYWxsb2NdIGluaXRXaXRoWDp0YXJnZXRjeCB5OnRhcmdldGN5XTsKKyAgWlhBenRlY1BvaW50ICpwZCA9IFtbWlhBenRlY1BvaW50IGFsbG9jXSBpbml0V2l0aFg6dGFyZ2V0ZHggeTp0YXJnZXRkeV07CisKKyAgcmV0dXJuIEBbcGEsIHBiLCBwYywgcGRdOworfQorCisKKy8qKgorICogRmluZHMgYSBjYW5kaWRhdGUgY2VudGVyIHBvaW50IG9mIGFuIEF6dGVjIGNvZGUgZnJvbSBhbiBpbWFnZQorICovCistIChaWEF6dGVjUG9pbnQgKiltYXRyaXhDZW50ZXJXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWFJlc3VsdFBvaW50ICpwb2ludEE7CisgIFpYUmVzdWx0UG9pbnQgKnBvaW50QjsKKyAgWlhSZXN1bHRQb2ludCAqcG9pbnRDOworICBaWFJlc3VsdFBvaW50ICpwb2ludEQ7CisKKyAgTlNFcnJvciAqZGV0ZWN0b3JFcnJvciA9IG5pbDsKKyAgWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yICpkZXRlY3RvciA9IFtbWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yIGFsbG9jXSBpbml0V2l0aEltYWdlOnNlbGYuaW1hZ2UgZXJyb3I6JmRldGVjdG9yRXJyb3JdOworICBOU0FycmF5ICpjb3JuZXJQb2ludHMgPSBuaWw7CisgIGlmIChkZXRlY3RvcikgeworICAgIGNvcm5lclBvaW50cyA9IFtkZXRlY3RvciBkZXRlY3RXaXRoRXJyb3I6JmRldGVjdG9yRXJyb3JdOworICB9CisKKyAgaWYgKGRldGVjdG9yRXJyb3IgJiYgZGV0ZWN0b3JFcnJvci5jb2RlID09IFpYTm90Rm91bmRFcnJvcikgeworICAgIGludCBjeCA9IHNlbGYuaW1hZ2Uud2lkdGggLyAyOworICAgIGludCBjeSA9IHNlbGYuaW1hZ2UuaGVpZ2h0IC8gMjsKKyAgICBwb2ludEEgPSBbW3NlbGYgZmlyc3REaWZmZXJlbnQ6W1taWEF6dGVjUG9pbnQgYWxsb2NdIGluaXRXaXRoWDpjeCArIDcgeTpjeSAtIDddIGNvbG9yOk5PIGR4OjEgZHk6LTFdIHRvUmVzdWx0UG9pbnRdOworICAgIHBvaW50QiA9IFtbc2VsZiBmaXJzdERpZmZlcmVudDpbW1pYQXp0ZWNQb2ludCBhbGxvY10gaW5pdFdpdGhYOmN4ICsgNyB5OmN5ICsgN10gIGNvbG9yOk5PIGR4OjEgZHk6MV0gdG9SZXN1bHRQb2ludF07CisgICAgcG9pbnRDID0gW1tzZWxmIGZpcnN0RGlmZmVyZW50OltbWlhBenRlY1BvaW50IGFsbG9jXSBpbml0V2l0aFg6Y3ggLSA3IHk6Y3kgKyA3XSAgY29sb3I6Tk8gZHg6LTEgZHk6MV0gdG9SZXN1bHRQb2ludF07CisgICAgcG9pbnREID0gW1tzZWxmIGZpcnN0RGlmZmVyZW50OltbWlhBenRlY1BvaW50IGFsbG9jXSBpbml0V2l0aFg6Y3ggLSA3IHk6Y3kgLSA3XSAgY29sb3I6Tk8gZHg6LTEgZHk6LTFdIHRvUmVzdWx0UG9pbnRdOworICB9IGVsc2UgaWYgKGRldGVjdG9yRXJyb3IpIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IGRldGVjdG9yRXJyb3I7CisgICAgcmV0dXJuIG5pbDsKKyAgfSBlbHNlIHsKKyAgICBwb2ludEEgPSBjb3JuZXJQb2ludHNbMF07CisgICAgcG9pbnRCID0gY29ybmVyUG9pbnRzWzFdOworICAgIHBvaW50QyA9IGNvcm5lclBvaW50c1syXTsKKyAgICBwb2ludEQgPSBjb3JuZXJQb2ludHNbM107CisgIH0KKworICBpbnQgY3ggPSBbWlhNYXRoVXRpbHMgcm91bmQ6KFtwb2ludEEgeF0gKyBbcG9pbnREIHhdICsgW3BvaW50QiB4XSArIFtwb2ludEMgeF0pIC8gNC4wZl07CisgIGludCBjeSA9IFtaWE1hdGhVdGlscyByb3VuZDooW3BvaW50QSB5XSArIFtwb2ludEQgeV0gKyBbcG9pbnRCIHldICsgW3BvaW50QyB5XSkgLyA0LjBmXTsKKworICBkZXRlY3RvckVycm9yID0gbmlsOworICBkZXRlY3RvciA9IFtbWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yIGFsbG9jXSBpbml0V2l0aEltYWdlOnNlbGYuaW1hZ2UgaW5pdFNpemU6MTUgeDpjeCB5OmN5IGVycm9yOiZkZXRlY3RvckVycm9yXTsKKyAgaWYgKGRldGVjdG9yKSB7CisgICAgY29ybmVyUG9pbnRzID0gW2RldGVjdG9yIGRldGVjdFdpdGhFcnJvcjomZGV0ZWN0b3JFcnJvcl07CisgIH0KKworICBpZiAoZGV0ZWN0b3JFcnJvciAmJiBkZXRlY3RvckVycm9yLmNvZGUgPT0gWlhOb3RGb3VuZEVycm9yKSB7CisgICAgcG9pbnRBID0gW1tzZWxmIGZpcnN0RGlmZmVyZW50OltbWlhBenRlY1BvaW50IGFsbG9jXSBpbml0V2l0aFg6Y3ggKyA3IHk6Y3kgLSA3XSAgY29sb3I6Tk8gZHg6MSBkeTotMV0gdG9SZXN1bHRQb2ludF07CisgICAgcG9pbnRCID0gW1tzZWxmIGZpcnN0RGlmZmVyZW50OltbWlhBenRlY1BvaW50IGFsbG9jXSBpbml0V2l0aFg6Y3ggKyA3IHk6Y3kgKyA3XSAgY29sb3I6Tk8gZHg6MSBkeToxXSB0b1Jlc3VsdFBvaW50XTsKKyAgICBwb2ludEMgPSBbW3NlbGYgZmlyc3REaWZmZXJlbnQ6W1taWEF6dGVjUG9pbnQgYWxsb2NdIGluaXRXaXRoWDpjeCAtIDcgeTpjeSArIDddICBjb2xvcjpOTyBkeDotMSBkeToxXSB0b1Jlc3VsdFBvaW50XTsKKyAgICBwb2ludEQgPSBbW3NlbGYgZmlyc3REaWZmZXJlbnQ6W1taWEF6dGVjUG9pbnQgYWxsb2NdIGluaXRXaXRoWDpjeCAtIDcgeTpjeSAtIDddIGNvbG9yOk5PIGR4Oi0xIGR5Oi0xXSB0b1Jlc3VsdFBvaW50XTsKKyAgfSBlbHNlIGlmIChkZXRlY3RvckVycm9yKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBkZXRlY3RvckVycm9yOworICAgIHJldHVybiBuaWw7CisgIH0gZWxzZSB7CisgICAgcG9pbnRBID0gY29ybmVyUG9pbnRzWzBdOworICAgIHBvaW50QiA9IGNvcm5lclBvaW50c1sxXTsKKyAgICBwb2ludEMgPSBjb3JuZXJQb2ludHNbMl07CisgICAgcG9pbnREID0gY29ybmVyUG9pbnRzWzNdOworICB9CisKKyAgY3ggPSBbWlhNYXRoVXRpbHMgcm91bmQ6KFtwb2ludEEgeF0gKyBbcG9pbnREIHhdICsgW3BvaW50QiB4XSArIFtwb2ludEMgeF0pIC8gNF07CisgIGN5ID0gW1pYTWF0aFV0aWxzIHJvdW5kOihbcG9pbnRBIHldICsgW3BvaW50RCB5XSArIFtwb2ludEIgeV0gKyBbcG9pbnRDIHldKSAvIDRdOworCisgIHJldHVybiBbW1pYQXp0ZWNQb2ludCBhbGxvY10gaW5pdFdpdGhYOmN4IHk6Y3ldOworfQorCisKKy8qKgorICogU2FtcGxlcyBhbiBBenRlYyBtYXRyaXggZnJvbSBhbiBpbWFnZQorICovCistIChaWEJpdE1hdHJpeCAqKXNhbXBsZUdyaWQ6KFpYQml0TWF0cml4ICopYW5JbWFnZQorICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0OihaWFJlc3VsdFBvaW50ICopdG9wTGVmdAorICAgICAgICAgICAgICAgICBib3R0b21MZWZ0OihaWFJlc3VsdFBvaW50ICopYm90dG9tTGVmdAorICAgICAgICAgICAgICAgIGJvdHRvbVJpZ2h0OihaWFJlc3VsdFBvaW50ICopYm90dG9tUmlnaHQKKyAgICAgICAgICAgICAgICAgICB0b3BSaWdodDooWlhSZXN1bHRQb2ludCAqKXRvcFJpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQgZGltZW5zaW9uOworICBpZiAoc2VsZi5jb21wYWN0KSB7CisgICAgZGltZW5zaW9uID0gNCAqIHNlbGYubmJMYXllcnMgKyAxMTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoc2VsZi5uYkxheWVycyA8PSA0KSB7CisgICAgICBkaW1lbnNpb24gPSA0ICogc2VsZi5uYkxheWVycyArIDE1OworICAgIH0gZWxzZSB7CisgICAgICBkaW1lbnNpb24gPSA0ICogc2VsZi5uYkxheWVycyArIDIgKiAoKHNlbGYubmJMYXllcnMgLSA0KSAvIDggKyAxKSArIDE1OworICAgIH0KKyAgfQorCisgIFpYR3JpZFNhbXBsZXIgKnNhbXBsZXIgPSBbWlhHcmlkU2FtcGxlciBpbnN0YW5jZV07CisKKyAgcmV0dXJuIFtzYW1wbGVyIHNhbXBsZUdyaWQ6YW5JbWFnZQorICAgICAgICAgICAgICAgICAgZGltZW5zaW9uWDpkaW1lbnNpb24KKyAgICAgICAgICAgICAgICAgIGRpbWVuc2lvblk6ZGltZW5zaW9uCisgICAgICAgICAgICAgICAgICAgICAgIHAxVG9YOjAuNWYKKyAgICAgICAgICAgICAgICAgICAgICAgcDFUb1k6MC41ZgorICAgICAgICAgICAgICAgICAgICAgICBwMlRvWDpkaW1lbnNpb24gLSAwLjVmCisgICAgICAgICAgICAgICAgICAgICAgIHAyVG9ZOjAuNWYKKyAgICAgICAgICAgICAgICAgICAgICAgcDNUb1g6ZGltZW5zaW9uIC0gMC41ZgorICAgICAgICAgICAgICAgICAgICAgICBwM1RvWTpkaW1lbnNpb24gLSAwLjVmCisgICAgICAgICAgICAgICAgICAgICAgIHA0VG9YOjAuNWYKKyAgICAgICAgICAgICAgICAgICAgICAgcDRUb1k6ZGltZW5zaW9uIC0gMC41ZgorICAgICAgICAgICAgICAgICAgICAgcDFGcm9tWDp0b3BMZWZ0LngKKyAgICAgICAgICAgICAgICAgICAgIHAxRnJvbVk6dG9wTGVmdC55CisgICAgICAgICAgICAgICAgICAgICBwMkZyb21YOnRvcFJpZ2h0LngKKyAgICAgICAgICAgICAgICAgICAgIHAyRnJvbVk6dG9wUmlnaHQueQorICAgICAgICAgICAgICAgICAgICAgcDNGcm9tWDpib3R0b21SaWdodC54CisgICAgICAgICAgICAgICAgICAgICBwM0Zyb21ZOmJvdHRvbVJpZ2h0LnkKKyAgICAgICAgICAgICAgICAgICAgIHA0RnJvbVg6Ym90dG9tTGVmdC54CisgICAgICAgICAgICAgICAgICAgICBwNEZyb21ZOmJvdHRvbUxlZnQueQorICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjplcnJvcl07Cit9CisKKworLyoqCisgKiBTZXRzIG51bWJlciBvZiBsYXllcnMgYW5kIG51bWJlciBvZiBkYXRhIGJsb2NrcyBmcm9tIHBhcmFtZXRlciBiaXRzCisgKi8KKy0gKHZvaWQpcGFyYW1ldGVyczooTlNBcnJheSAqKXBhcmFtZXRlckRhdGEgeworICBpbnQgbmJCaXRzRm9yTmJMYXllcnM7CisgIGludCBuYkJpdHNGb3JOYkRhdGFibG9ja3M7CisKKyAgaWYgKHNlbGYuY29tcGFjdCkgeworICAgIG5iQml0c0Zvck5iTGF5ZXJzID0gMjsKKyAgICBuYkJpdHNGb3JOYkRhdGFibG9ja3MgPSA2OworICB9IGVsc2UgeworICAgIG5iQml0c0Zvck5iTGF5ZXJzID0gNTsKKyAgICBuYkJpdHNGb3JOYkRhdGFibG9ja3MgPSAxMTsKKyAgfQorCisgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJCaXRzRm9yTmJMYXllcnM7IGkrKykgeworICAgIHNlbGYubmJMYXllcnMgPDw9IDE7CisgICAgaWYgKFtwYXJhbWV0ZXJEYXRhW2ldIGJvb2xWYWx1ZV0pIHsKKyAgICAgIHNlbGYubmJMYXllcnMrKzsKKyAgICB9CisgIH0KKworICBmb3IgKGludCBpID0gbmJCaXRzRm9yTmJMYXllcnM7IGkgPCBuYkJpdHNGb3JOYkxheWVycyArIG5iQml0c0Zvck5iRGF0YWJsb2NrczsgaSsrKSB7CisgICAgc2VsZi5uYkRhdGFCbG9ja3MgPDw9IDE7CisgICAgaWYgKFtwYXJhbWV0ZXJEYXRhW2ldIGJvb2xWYWx1ZV0pIHsKKyAgICAgIHNlbGYubmJEYXRhQmxvY2tzKys7CisgICAgfQorICB9CisKKyAgc2VsZi5uYkxheWVycysrOworICBzZWxmLm5iRGF0YUJsb2NrcysrOworfQorCisKKy8qKgorICogU2FtcGxlcyBhIGxpbmUKKyAqLworLSAoTlNBcnJheSAqKXNhbXBsZUxpbmU6KFpYQXp0ZWNQb2ludCAqKXAxIHAyOihaWEF6dGVjUG9pbnQgKilwMiBzaXplOihpbnQpc2l6ZSB7CisgIE5TTXV0YWJsZUFycmF5ICpyZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6ZV07CisgIGZsb2F0IGQgPSBbc2VsZiBkaXN0YW5jZTpwMSBiOnAyXTsKKyAgZmxvYXQgbW9kdWxlU2l6ZSA9IGQgLyAoc2l6ZSAtIDEpOworICBmbG9hdCBkeCA9IG1vZHVsZVNpemUgKiAocDIueCAtIHAxLngpIC8gZDsKKyAgZmxvYXQgZHkgPSBtb2R1bGVTaXplICogKHAyLnkgLSBwMS55KSAvIGQ7CisKKyAgZmxvYXQgcHggPSBwMS54OworICBmbG9hdCBweSA9IHAxLnk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBbcmVzIGFkZE9iamVjdDpAKFtzZWxmLmltYWdlIGdldFg6W1pYTWF0aFV0aWxzIHJvdW5kOnB4XSB5OltaWE1hdGhVdGlscyByb3VuZDpweV1dKV07CisgICAgcHggKz0gZHg7CisgICAgcHkgKz0gZHk7CisgIH0KKworICByZXR1cm4gcmVzOworfQorCisKKy8qKgorICogcmV0dXJuIHRydWUgaWYgdGhlIGJvcmRlciBvZiB0aGUgcmVjdGFuZ2xlIHBhc3NlZCBpbiBwYXJhbWV0ZXIgaXMgY29tcG91bmQgb2Ygd2hpdGUgcG9pbnRzIG9ubHkKKyAqIG9yIGJsYWNrIHBvaW50cyBvbmx5CisgKi8KKy0gKEJPT0wpaXNXaGl0ZU9yQmxhY2tSZWN0YW5nbGU6KFpYQXp0ZWNQb2ludCAqKXAxIHAyOihaWEF6dGVjUG9pbnQgKilwMiBwMzooWlhBenRlY1BvaW50ICopcDMgcDQ6KFpYQXp0ZWNQb2ludCAqKXA0IHsKKyAgaW50IGNvcnIgPSAzOworCisgIHAxID0gW1taWEF6dGVjUG9pbnQgYWxsb2NdIGluaXRXaXRoWDpwMS54IC0gY29yciB5OnAxLnkgKyBjb3JyXTsKKyAgcDIgPSBbW1pYQXp0ZWNQb2ludCBhbGxvY10gaW5pdFdpdGhYOnAyLnggLSBjb3JyIHk6cDIueSAtIGNvcnJdOworICBwMyA9IFtbWlhBenRlY1BvaW50IGFsbG9jXSBpbml0V2l0aFg6cDMueCArIGNvcnIgeTpwMy55IC0gY29ycl07CisgIHA0ID0gW1taWEF6dGVjUG9pbnQgYWxsb2NdIGluaXRXaXRoWDpwNC54ICsgY29yciB5OnA0LnkgKyBjb3JyXTsKKworICBpbnQgY0luaXQgPSBbc2VsZiBjb2xvcjpwNCBwMjpwMV07CisKKyAgaWYgKGNJbml0ID09IDApIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBpbnQgYyA9IFtzZWxmIGNvbG9yOnAxIHAyOnAyXTsKKworICBpZiAoYyAhPSBjSW5pdCkgeworICAgIHJldHVybiBOTzsKKyAgfQorCisgIGMgPSBbc2VsZiBjb2xvcjpwMiBwMjpwM107CisKKyAgaWYgKGMgIT0gY0luaXQpIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBjID0gW3NlbGYgY29sb3I6cDMgcDI6cDRdOworCisgIHJldHVybiBjID09IGNJbml0OworfQorCisKKy8qKgorICogR2V0cyB0aGUgY29sb3Igb2YgYSBzZWdtZW50CisgKiByZXR1cm4gMSBpZiBzZWdtZW50IG1vcmUgdGhhbiA5MCUgYmxhY2ssIC0xIGlmIHNlZ21lbnQgaXMgbW9yZSB0aGFuIDkwJSB3aGl0ZSwgMCBlbHNlCisgKi8KKy0gKGludCljb2xvcjooWlhBenRlY1BvaW50ICopcDEgcDI6KFpYQXp0ZWNQb2ludCAqKXAyIHsKKyAgZmxvYXQgZCA9IFtzZWxmIGRpc3RhbmNlOnAxIGI6cDJdOworICBmbG9hdCBkeCA9IChwMi54IC0gcDEueCkgLyBkOworICBmbG9hdCBkeSA9IChwMi55IC0gcDEueSkgLyBkOworICBpbnQgZXJyb3IgPSAwOworCisgIGZsb2F0IHB4ID0gcDEueDsKKyAgZmxvYXQgcHkgPSBwMS55OworCisgIEJPT0wgY29sb3JNb2RlbCA9IFtzZWxmLmltYWdlIGdldFg6cDEueCB5OnAxLnldOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgZDsgaSsrKSB7CisgICAgcHggKz0gZHg7CisgICAgcHkgKz0gZHk7CisgICAgaWYgKFtzZWxmLmltYWdlIGdldFg6W1pYTWF0aFV0aWxzIHJvdW5kOnB4XSB5OltaWE1hdGhVdGlscyByb3VuZDpweV1dICE9IGNvbG9yTW9kZWwpIHsKKyAgICAgIGVycm9yKys7CisgICAgfQorICB9CisKKyAgZmxvYXQgZXJyUmF0aW8gPSAoZmxvYXQpZXJyb3IgLyBkOworCisgIGlmIChlcnJSYXRpbyA+IDAuMWYgJiYgZXJyUmF0aW8gPCAwLjlmKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gKGVyclJhdGlvIDw9IDAuMWYpID09IGNvbG9yTW9kZWwgPyAxIDogLTE7Cit9CisKKworLyoqCisgKiBHZXRzIHRoZSBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludCB3aXRoIGEgZGlmZmVyZW50IGNvbG9yIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24KKyAqLworLSAoWlhBenRlY1BvaW50ICopZmlyc3REaWZmZXJlbnQ6KFpYQXp0ZWNQb2ludCAqKWluaXQgY29sb3I6KEJPT0wpY29sb3IgZHg6KGludClkeCBkeTooaW50KWR5IHsKKyAgaW50IHggPSBpbml0LnggKyBkeDsKKyAgaW50IHkgPSBpbml0LnkgKyBkeTsKKworICB3aGlsZSAoW3NlbGYgaXNWYWxpZFg6eCB5OnldICYmIFtzZWxmLmltYWdlIGdldFg6eCB5OnldID09IGNvbG9yKSB7CisgICAgeCArPSBkeDsKKyAgICB5ICs9IGR5OworICB9CisKKyAgeCAtPSBkeDsKKyAgeSAtPSBkeTsKKworICB3aGlsZSAoW3NlbGYgaXNWYWxpZFg6eCB5OnldICYmIFtzZWxmLmltYWdlIGdldFg6eCB5OnldID09IGNvbG9yKSB7CisgICAgeCArPSBkeDsKKyAgfQorICB4IC09IGR4OworCisgIHdoaWxlIChbc2VsZiBpc1ZhbGlkWDp4IHk6eV0gJiYgW3NlbGYuaW1hZ2UgZ2V0WDp4IHk6eV0gPT0gY29sb3IpIHsKKyAgICB5ICs9IGR5OworICB9CisgIHkgLT0gZHk7CisKKyAgcmV0dXJuIFtbWlhBenRlY1BvaW50IGFsbG9jXSBpbml0V2l0aFg6eCB5OnldOworfQorCistIChCT09MKSBpc1ZhbGlkWDooaW50KXggeTooaW50KXkgeworICByZXR1cm4geCA+PSAwICYmIHggPCBzZWxmLmltYWdlLndpZHRoICYmIHkgPiAwICYmIHkgPCBzZWxmLmltYWdlLmhlaWdodDsKK30KKworCistIChmbG9hdClkaXN0YW5jZTooWlhBenRlY1BvaW50ICopYSBiOihaWEF6dGVjUG9pbnQgKiliIHsKKyAgcmV0dXJuIFtaWE1hdGhVdGlscyBkaXN0YW5jZTphLnggYVk6YS55IGJYOmIueCBiWTpiLnldOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvYXp0ZWMvZW5jb2Rlci9aWEF6dGVjQ29kZS5oIGIvWlhpbmdPYmpDL2F6dGVjL2VuY29kZXIvWlhBenRlY0NvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2I2ODFmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2F6dGVjL2VuY29kZXIvWlhBenRlY0NvZGUuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAY2xhc3MgWlhCaXRNYXRyaXg7CisKKy8qKgorICogQXp0ZWMgMkQgY29kZSByZXByZXNlbnRhdGlvbgorICovCitAaW50ZXJmYWNlIFpYQXp0ZWNDb2RlIDogTlNPYmplY3QKKworLyoqCisgKiBOdW1iZXIgb2YgZGF0YSBjb2Rld29yZHMKKyAqLworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGVXb3JkczsKKworLyoqCisgKiBDb21wYWN0IG9yIGZ1bGwgc3ltYm9sIGluZGljYXRvcgorICovCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBCT09MIGNvbXBhY3Q7CisKKy8qKgorICogTnVtYmVyIG9mIGxldmVscworICovCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbGF5ZXJzOworCisvKioKKyAqIFRoZSBzeW1ib2wgaW1hZ2UKKyAqLworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhCaXRNYXRyaXggKm1hdHJpeDsKKworLyoqCisgKiBTaXplIGluIHBpeGVscyAod2lkdGggYW5kIGhlaWdodCkKKyAqLworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IHNpemU7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9henRlYy9lbmNvZGVyL1pYQXp0ZWNDb2RlLm0gYi9aWGluZ09iakMvYXp0ZWMvZW5jb2Rlci9aWEF6dGVjQ29kZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MDU0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvYXp0ZWMvZW5jb2Rlci9aWEF6dGVjQ29kZS5tCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQXp0ZWNDb2RlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEF6dGVjQ29kZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvYXp0ZWMvZW5jb2Rlci9aWEF6dGVjRW5jb2Rlci5oIGIvWlhpbmdPYmpDL2F6dGVjL2VuY29kZXIvWlhBenRlY0VuY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODI1ZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2F6dGVjL2VuY29kZXIvWlhBenRlY0VuY29kZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitleHRlcm4gaW50IFpYX0RFRkFVTFRfQVpURUNfRUNfUEVSQ0VOVDsKKworQGNsYXNzIFpYQXp0ZWNDb2RlLCBaWEJpdEFycmF5LCBaWEdlbmVyaWNHRjsKKworQGludGVyZmFjZSBaWEF6dGVjRW5jb2RlciA6IE5TT2JqZWN0CisKKysgKFpYQXp0ZWNDb2RlICopZW5jb2RlOihpbnQ4X3QgKilkYXRhIGxlbjooaW50KWxlbjsKKysgKFpYQXp0ZWNDb2RlICopZW5jb2RlOihpbnQ4X3QgKilkYXRhIGxlbjooaW50KWxlbiBtaW5FQ0NQZXJjZW50OihpbnQpbWluRUNDUGVyY2VudDsKKysgKHZvaWQpZHJhd0J1bGxzRXllOihaWEJpdE1hdHJpeCAqKW1hdHJpeCBjZW50ZXI6KGludCljZW50ZXIgc2l6ZTooaW50KXNpemU7CisrIChaWEJpdEFycmF5ICopZ2VuZXJhdGVNb2RlTWVzc2FnZUNvbXBhY3Q6KEJPT0wpY29tcGFjdCBsYXllcnM6KGludClsYXllcnMgbWVzc2FnZVNpemVJbldvcmRzOihpbnQpbWVzc2FnZVNpemVJbldvcmRzOworKyAodm9pZClkcmF3TW9kZU1lc3NhZ2U6KFpYQml0TWF0cml4ICopbWF0cml4IGNvbXBhY3Q6KEJPT0wpY29tcGFjdCBtYXRyaXhTaXplOihpbnQpbWF0cml4U2l6ZSBtb2RlTWVzc2FnZTooWlhCaXRBcnJheSAqKW1vZGVNZXNzYWdlOworKyAoWlhCaXRBcnJheSAqKWdlbmVyYXRlQ2hlY2tXb3JkczooWlhCaXRBcnJheSAqKXN0dWZmZWRCaXRzIHRvdGFsU3ltYm9sQml0czooaW50KXRvdGFsU3ltYm9sQml0cyB3b3JkU2l6ZTooaW50KXdvcmRTaXplOworKyAodm9pZCliaXRzVG9Xb3JkczooWlhCaXRBcnJheSAqKXN0dWZmZWRCaXRzIHdvcmRTaXplOihpbnQpd29yZFNpemUgdG90YWxXb3JkczooaW50KXRvdGFsV29yZHMgbWVzc2FnZTooaW50ICopbWVzc2FnZTsKKysgKFpYR2VuZXJpY0dGICopZ2V0R0Y6KGludCl3b3JkU2l6ZTsKKysgKFpYQml0QXJyYXkgKilzdHVmZkJpdHM6KFpYQml0QXJyYXkgKiliaXRzIHdvcmRTaXplOihpbnQpd29yZFNpemU7CisrIChaWEJpdEFycmF5ICopaGlnaExldmVsRW5jb2RlOihpbnQ4X3QgKilkYXRhIGxlbjooaW50KWxlbjsKKysgKHZvaWQpb3V0cHV0V29yZDooWlhCaXRBcnJheSAqKWJpdHMgbW9kZTooaW50KW1vZGUgdmFsdWU6KGludCl2YWx1ZTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2F6dGVjL2VuY29kZXIvWlhBenRlY0VuY29kZXIubSBiL1pYaW5nT2JqQy9henRlYy9lbmNvZGVyL1pYQXp0ZWNFbmNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyNDhkZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9henRlYy9lbmNvZGVyL1pYQXp0ZWNFbmNvZGVyLm0KQEAgLTAsMCArMSw1OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQXp0ZWNDb2RlLmgiCisjaW1wb3J0ICJaWEF6dGVjRW5jb2Rlci5oIgorI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYR2VuZXJpY0dGLmgiCisjaW1wb3J0ICJaWFJlZWRTb2xvbW9uRW5jb2Rlci5oIgorCitpbnQgWlhfREVGQVVMVF9BWlRFQ19FQ19QRVJDRU5UID0gMzM7CisKK2NvbnN0IGludCBUQUJMRV9VUFBFUiAgPSAwOyAvLyA1IGJpdHMKK2NvbnN0IGludCBUQUJMRV9MT1dFUiAgPSAxOyAvLyA1IGJpdHMKK2NvbnN0IGludCBUQUJMRV9ESUdJVCAgPSAyOyAvLyA0IGJpdHMKK2NvbnN0IGludCBUQUJMRV9NSVhFRCAgPSAzOyAvLyA1IGJpdHMKK2NvbnN0IGludCBUQUJMRV9QVU5DVCAgPSA0OyAvLyA1IGJpdHMKK2NvbnN0IGludCBUQUJMRV9CSU5BUlkgPSA1OyAvLyA4IGJpdHMKKworc3RhdGljIGludCBDSEFSX01BUFs1XVsyNTZdOyAvLyByZXZlcnNlIG1hcHBpbmcgQVNDSUkgLT4gdGFibGUgb2Zmc2V0LCBwZXIgdGFibGUKK3N0YXRpYyBpbnQgU0hJRlRfVEFCTEVbNl1bNl07IC8vIG1vZGUgc2hpZnQgY29kZXMsIHBlciB0YWJsZQorc3RhdGljIGludCBMQVRDSF9UQUJMRVs2XVs2XTsgLy8gbW9kZSBsYXRjaCBjb2RlcywgcGVyIHRhYmxlCisKK2NvbnN0IGludCBOQl9CSVRTX0xFTiA9IDMzOworc3RhdGljIGludCBOQl9CSVRTW05CX0JJVFNfTEVOXTsgLy8gdG90YWwgYml0cyBwZXIgY29tcGFjdCBzeW1ib2wgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIGxheWVycworCitjb25zdCBpbnQgTkJfQklUU19DT01QQUNUX0xFTiA9IDU7CitzdGF0aWMgaW50IE5CX0JJVFNfQ09NUEFDVFtOQl9CSVRTX0NPTVBBQ1RfTEVOXTsgLy8gdG90YWwgYml0cyBwZXIgZnVsbCBzeW1ib2wgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIGxheWVycworCitzdGF0aWMgaW50IFdPUkRfU0laRVszM10gPSB7CisgIDQsIDYsIDYsIDgsIDgsIDgsIDgsIDgsIDgsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIKK307CisKK0BpbXBsZW1lbnRhdGlvbiBaWEF6dGVjRW5jb2RlcgorCisrICh2b2lkKWluaXRpYWxpemUgeworICBDSEFSX01BUFtUQUJMRV9VUFBFUl1bJyAnXSA9IDE7CisgIGZvciAoaW50IGMgPSAnQSc7IGMgPD0gJ1onOyBjKyspIHsKKyAgICBDSEFSX01BUFtUQUJMRV9VUFBFUl1bY10gPSBjIC0gJ0EnICsgMjsKKyAgfQorICBDSEFSX01BUFtUQUJMRV9MT1dFUl1bJyAnXSA9IDE7CisgIGZvciAoaW50IGMgPSAnYSc7IGMgPD0gJ3onOyBjKyspIHsKKyAgICBDSEFSX01BUFtUQUJMRV9MT1dFUl1bY10gPSBjIC0gJ2EnICsgMjsKKyAgfQorICBDSEFSX01BUFtUQUJMRV9ESUdJVF1bJyAnXSA9IDE7CisgIGZvciAoaW50IGMgPSAnMCc7IGMgPD0gJzknOyBjKyspIHsKKyAgICBDSEFSX01BUFtUQUJMRV9ESUdJVF1bY10gPSBjIC0gJzAnICsgMjsKKyAgfQorICBDSEFSX01BUFtUQUJMRV9ESUdJVF1bJywnXSA9IDEyOworICBDSEFSX01BUFtUQUJMRV9ESUdJVF1bJy4nXSA9IDEzOworCisgIGNvbnN0IGludCBtaXhlZFRhYmxlTGVuID0gMjg7CisgIGludCBtaXhlZFRhYmxlW21peGVkVGFibGVMZW5dID0geworICAgICdcMCcsICcgJywgJ1wxJywgJ1wyJywgJ1wzJywgJ1w0JywgJ1w1JywgJ1w2JywgJ1w3JywgJ1xiJywgJ1x0JywgJ1xuJywgJ1wxMycsICdcZicsICdccicsCisgICAgJ1wzMycsICdcMzQnLCAnXDM1JywgJ1wzNicsICdcMzcnLCAnQCcsICdcXCcsICdeJywgJ18nLCAnYCcsICd8JywgJ34nLCAnXDE3NycKKyAgfTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAyODsgaSsrKSB7CisgICAgQ0hBUl9NQVBbVEFCTEVfTUlYRURdW21peGVkVGFibGVbaV1dID0gaTsKKyAgfQorICBjb25zdCBpbnQgcHVuY3RUYWJsZUxlbiA9IDMxOworICBpbnQgcHVuY3RUYWJsZVtwdW5jdFRhYmxlTGVuXSA9IHsKKyAgICAnXDAnLCAnXHInLCAnXDAnLCAnXDAnLCAnXDAnLCAnXDAnLCAnIScsICdcJycsICcjJywgJyQnLCAnJScsICcmJywgJ1wnJywgJygnLCAnKScsICcqJywgJysnLAorICAgICcsJywgJy0nLCAnLicsICcvJywgJzonLCAnOycsICc8JywgJz0nLCAnPicsICc/JywgJ1snLCAnXScsICd7JywgJ30nCisgIH07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgcHVuY3RUYWJsZUxlbjsgaSsrKSB7CisgICAgaWYgKHB1bmN0VGFibGVbaV0gPiAwKSB7CisgICAgICBDSEFSX01BUFtUQUJMRV9QVU5DVF1bcHVuY3RUYWJsZVtpXV0gPSBpOworICAgIH0KKyAgfQorICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykgeworICAgIGZvciAoaW50IGogPSAwOyBqIDwgNjsgaisrKSB7CisgICAgICBTSElGVF9UQUJMRVtpXVtqXSA9IC0xOworICAgICAgTEFUQ0hfVEFCTEVbaV1bal0gPSAtMTsKKyAgICB9CisgIH0KKyAgU0hJRlRfVEFCTEVbVEFCTEVfVVBQRVJdW1RBQkxFX1BVTkNUXSA9IDA7CisgIExBVENIX1RBQkxFW1RBQkxFX1VQUEVSXVtUQUJMRV9MT1dFUl0gPSAyODsKKyAgTEFUQ0hfVEFCTEVbVEFCTEVfVVBQRVJdW1RBQkxFX01JWEVEXSA9IDI5OworICBMQVRDSF9UQUJMRVtUQUJMRV9VUFBFUl1bVEFCTEVfRElHSVRdID0gMzA7CisgIFNISUZUX1RBQkxFW1RBQkxFX1VQUEVSXVtUQUJMRV9CSU5BUlldID0gMzE7CisgIFNISUZUX1RBQkxFW1RBQkxFX0xPV0VSXVtUQUJMRV9QVU5DVF0gPSAwOworICBTSElGVF9UQUJMRVtUQUJMRV9MT1dFUl1bVEFCTEVfVVBQRVJdID0gMjg7CisgIExBVENIX1RBQkxFW1RBQkxFX0xPV0VSXVtUQUJMRV9NSVhFRF0gPSAyOTsKKyAgTEFUQ0hfVEFCTEVbVEFCTEVfTE9XRVJdW1RBQkxFX0RJR0lUXSA9IDMwOworICBTSElGVF9UQUJMRVtUQUJMRV9MT1dFUl1bVEFCTEVfQklOQVJZXSA9IDMxOworICBTSElGVF9UQUJMRVtUQUJMRV9NSVhFRF1bVEFCTEVfUFVOQ1RdID0gMDsKKyAgTEFUQ0hfVEFCTEVbVEFCTEVfTUlYRURdW1RBQkxFX0xPV0VSXSA9IDI4OworICBMQVRDSF9UQUJMRVtUQUJMRV9NSVhFRF1bVEFCTEVfVVBQRVJdID0gMjk7CisgIExBVENIX1RBQkxFW1RBQkxFX01JWEVEXVtUQUJMRV9QVU5DVF0gPSAzMDsKKyAgU0hJRlRfVEFCTEVbVEFCTEVfTUlYRURdW1RBQkxFX0JJTkFSWV0gPSAzMTsKKyAgTEFUQ0hfVEFCTEVbVEFCTEVfUFVOQ1RdW1RBQkxFX1VQUEVSXSA9IDMxOworICBTSElGVF9UQUJMRVtUQUJMRV9ESUdJVF1bVEFCTEVfUFVOQ1RdID0gMDsKKyAgTEFUQ0hfVEFCTEVbVEFCTEVfRElHSVRdW1RBQkxFX1VQUEVSXSA9IDMwOworICBTSElGVF9UQUJMRVtUQUJMRV9ESUdJVF1bVEFCTEVfVVBQRVJdID0gMzE7CisgIGZvciAoaW50IGkgPSAxOyBpIDwgTkJfQklUU19DT01QQUNUX0xFTjsgaSsrKSB7CisgICAgTkJfQklUU19DT01QQUNUW2ldID0gKDg4ICsgMTYgKiBpKSAqIGk7CisgIH0KKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBOQl9CSVRTX0xFTjsgaSsrKSB7CisgICAgTkJfQklUU1tpXSA9ICgxMTIgKyAxNiAqIGkpICogaTsKKyAgfQorfQorCisvKioKKyAqIEVuY29kZXMgdGhlIGdpdmVuIGJpbmFyeSBjb250ZW50IGFzIGFuIEF6dGVjIHN5bWJvbAorICovCisrIChaWEF6dGVjQ29kZSAqKWVuY29kZTooaW50OF90ICopZGF0YSBsZW46KGludClsZW4geworICByZXR1cm4gW3NlbGYgZW5jb2RlOmRhdGEgbGVuOmxlbiBtaW5FQ0NQZXJjZW50OlpYX0RFRkFVTFRfQVpURUNfRUNfUEVSQ0VOVF07Cit9CisKKy8qKgorICogRW5jb2RlcyB0aGUgZ2l2ZW4gYmluYXJ5IGNvbnRlbnQgYXMgYW4gQXp0ZWMgc3ltYm9sCisgKi8KKysgKFpYQXp0ZWNDb2RlICopZW5jb2RlOihpbnQ4X3QgKilkYXRhIGxlbjooaW50KWxlbiBtaW5FQ0NQZXJjZW50OihpbnQpbWluRUNDUGVyY2VudCB7CisgIC8vIEhpZ2gtbGV2ZWwgZW5jb2RlCisgIFpYQml0QXJyYXkgKmJpdHMgPSBbc2VsZiBoaWdoTGV2ZWxFbmNvZGU6ZGF0YSBsZW46bGVuXTsKKworICAvLyBzdHVmZiBiaXRzIGFuZCBjaG9vc2Ugc3ltYm9sIHNpemUKKyAgaW50IGVjY0JpdHMgPSBiaXRzLnNpemUgKiBtaW5FQ0NQZXJjZW50IC8gMTAwICsgMTE7CisgIGludCB0b3RhbFNpemVCaXRzID0gYml0cy5zaXplICsgZWNjQml0czsKKyAgaW50IGxheWVyczsKKyAgaW50IHdvcmRTaXplID0gMDsKKyAgaW50IHRvdGFsU3ltYm9sQml0cyA9IDA7CisgIFpYQml0QXJyYXkgKnN0dWZmZWRCaXRzID0gbmlsOworICBmb3IgKGxheWVycyA9IDE7IGxheWVycyA8IE5CX0JJVFNfQ09NUEFDVF9MRU47IGxheWVycysrKSB7CisgICAgaWYgKE5CX0JJVFNfQ09NUEFDVFtsYXllcnNdID49IHRvdGFsU2l6ZUJpdHMpIHsKKyAgICAgIGlmICh3b3JkU2l6ZSAhPSBXT1JEX1NJWkVbbGF5ZXJzXSkgeworICAgICAgICB3b3JkU2l6ZSA9IFdPUkRfU0laRVtsYXllcnNdOworICAgICAgICBzdHVmZmVkQml0cyA9IFtzZWxmIHN0dWZmQml0czpiaXRzIHdvcmRTaXplOndvcmRTaXplXTsKKyAgICAgIH0KKyAgICAgIHRvdGFsU3ltYm9sQml0cyA9IE5CX0JJVFNfQ09NUEFDVFtsYXllcnNdOworICAgICAgaWYgKHN0dWZmZWRCaXRzLnNpemUgKyBlY2NCaXRzIDw9IE5CX0JJVFNfQ09NUEFDVFtsYXllcnNdKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorICBCT09MIGNvbXBhY3QgPSBZRVM7CisgIGlmIChsYXllcnMgPT0gTkJfQklUU19DT01QQUNUX0xFTikgeworICAgIGNvbXBhY3QgPSBmYWxzZTsKKyAgICBmb3IgKGxheWVycyA9IDE7IGxheWVycyA8IE5CX0JJVFNfTEVOOyBsYXllcnMrKykgeworICAgICAgaWYgKE5CX0JJVFNbbGF5ZXJzXSA+PSB0b3RhbFNpemVCaXRzKSB7CisgICAgICAgIGlmICh3b3JkU2l6ZSAhPSBXT1JEX1NJWkVbbGF5ZXJzXSkgeworICAgICAgICAgIHdvcmRTaXplID0gV09SRF9TSVpFW2xheWVyc107CisgICAgICAgICAgc3R1ZmZlZEJpdHMgPSBbc2VsZiBzdHVmZkJpdHM6Yml0cyB3b3JkU2l6ZTp3b3JkU2l6ZV07CisgICAgICAgIH0KKyAgICAgICAgdG90YWxTeW1ib2xCaXRzID0gTkJfQklUU1tsYXllcnNdOworICAgICAgICBpZiAoc3R1ZmZlZEJpdHMuc2l6ZSArIGVjY0JpdHMgPD0gTkJfQklUU1tsYXllcnNdKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKGxheWVycyA9PSBOQl9CSVRTX0xFTiB8fCB3b3JkU2l6ZSA9PSAwKSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkRhdGEgdG9vIGxhcmdlIGZvciBhbiBBenRlYyBjb2RlIl07CisgIH0KKworICAvLyBwYWQgdGhlIGVuZAorICBpbnQgbWVzc2FnZVNpemVJbldvcmRzID0gKHN0dWZmZWRCaXRzLnNpemUgKyB3b3JkU2l6ZSAtIDEpIC8gd29yZFNpemU7CisgIC8vIFRoaXMgc2VlbXMgdG8gYmUgcmVkdW5kYW50PworICAvKgorICBmb3IgKGludCBpID0gbWVzc2FnZVNpemVJbldvcmRzICogd29yZFNpemUgLSBzdHVmZmVkQml0cy5zaXplOyBpID4gMDsgaS0tKSB7CisgICAgW3N0dWZmZWRCaXRzIGFwcGVuZEJpdDpZRVNdOworICB9CisgICovCisKKyAgLy8gZ2VuZXJhdGUgY2hlY2sgd29yZHMKKyAgWlhSZWVkU29sb21vbkVuY29kZXIgKnJzID0gW1taWFJlZWRTb2xvbW9uRW5jb2RlciBhbGxvY10gaW5pdFdpdGhGaWVsZDpbc2VsZiBnZXRHRjp3b3JkU2l6ZV1dOworICBpbnQgdG90YWxTaXplSW5GdWxsV29yZHMgPSB0b3RhbFN5bWJvbEJpdHMgLyB3b3JkU2l6ZTsKKworICBpbnQgbWVzc2FnZVdvcmRzW3RvdGFsU2l6ZUluRnVsbFdvcmRzXTsKKyAgW3NlbGYgYml0c1RvV29yZHM6c3R1ZmZlZEJpdHMgd29yZFNpemU6d29yZFNpemUgdG90YWxXb3Jkczp0b3RhbFNpemVJbkZ1bGxXb3JkcyBtZXNzYWdlOm1lc3NhZ2VXb3Jkc107CisgIFtycyBlbmNvZGU6bWVzc2FnZVdvcmRzIHRvRW5jb2RlTGVuOnRvdGFsU2l6ZUluRnVsbFdvcmRzIGVjQnl0ZXM6dG90YWxTaXplSW5GdWxsV29yZHMgLSBtZXNzYWdlU2l6ZUluV29yZHNdOworCisgIC8vIGNvbnZlcnQgdG8gYml0IGFycmF5IGFuZCBwYWQgaW4gdGhlIGJlZ2lubmluZworICBpbnQgc3RhcnRQYWQgPSB0b3RhbFN5bWJvbEJpdHMgJSB3b3JkU2l6ZTsKKyAgWlhCaXRBcnJheSAqbWVzc2FnZUJpdHMgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbbWVzc2FnZUJpdHMgYXBwZW5kQml0czowIG51bUJpdHM6c3RhcnRQYWRdOworICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsU2l6ZUluRnVsbFdvcmRzOyBpKyspIHsKKyAgICBbbWVzc2FnZUJpdHMgYXBwZW5kQml0czptZXNzYWdlV29yZHNbaV0gbnVtQml0czp3b3JkU2l6ZV07CisgIH0KKworICAvLyBnZW5lcmF0ZSBtb2RlIG1lc3NhZ2UKKyAgWlhCaXRBcnJheSAqbW9kZU1lc3NhZ2UgPSBbc2VsZiBnZW5lcmF0ZU1vZGVNZXNzYWdlQ29tcGFjdDpjb21wYWN0IGxheWVyczpsYXllcnMgbWVzc2FnZVNpemVJbldvcmRzOm1lc3NhZ2VTaXplSW5Xb3Jkc107CisKKyAgLy8gYWxsb2NhdGUgc3ltYm9sCisgIGludCBiYXNlTWF0cml4U2l6ZSA9IGNvbXBhY3QgPyAxMSArIGxheWVycyAqIDQgOiAxNCArIGxheWVycyAqIDQ7IC8vIG5vdCBpbmNsdWRpbmcgYWxpZ25tZW50IGxpbmVzCisgIGludCBhbGlnbm1lbnRNYXBbYmFzZU1hdHJpeFNpemVdOworICBpbnQgbWF0cml4U2l6ZTsKKyAgaWYgKGNvbXBhY3QpIHsKKyAgICAvLyBubyBhbGlnbm1lbnQgbWFya3MgaW4gY29tcGFjdCBtb2RlLCBhbGlnbm1lbnRNYXAgaXMgYSBuby1vcAorICAgIG1hdHJpeFNpemUgPSBiYXNlTWF0cml4U2l6ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJhc2VNYXRyaXhTaXplOyBpKyspIHsKKyAgICAgIGFsaWdubWVudE1hcFtpXSA9IGk7CisgICAgfQorICB9IGVsc2UgeworICAgIG1hdHJpeFNpemUgPSBiYXNlTWF0cml4U2l6ZSArIDEgKyAyICogKChiYXNlTWF0cml4U2l6ZSAvIDIgLSAxKSAvIDE1KTsKKyAgICBpbnQgb3JpZ0NlbnRlciA9IGJhc2VNYXRyaXhTaXplIC8gMjsKKyAgICBpbnQgY2VudGVyID0gbWF0cml4U2l6ZSAvIDI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcmlnQ2VudGVyOyBpKyspIHsKKyAgICAgIGludCBuZXdPZmZzZXQgPSBpICsgaSAvIDE1OworICAgICAgYWxpZ25tZW50TWFwW29yaWdDZW50ZXIgLSBpIC0gMV0gPSBjZW50ZXIgLSBuZXdPZmZzZXQgLSAxOworICAgICAgYWxpZ25tZW50TWFwW29yaWdDZW50ZXIgKyBpXSA9IGNlbnRlciArIG5ld09mZnNldCArIDE7CisgICAgfQorICB9CisgIFpYQml0TWF0cml4ICptYXRyaXggPSBbW1pYQml0TWF0cml4IGFsbG9jXSBpbml0V2l0aERpbWVuc2lvbjptYXRyaXhTaXplXTsKKworICAvLyBkcmF3IG1vZGUgYW5kIGRhdGEgYml0cworICBmb3IgKGludCBpID0gMCwgcm93T2Zmc2V0ID0gMDsgaSA8IGxheWVyczsgaSsrKSB7CisgICAgaW50IHJvd1NpemUgPSBjb21wYWN0ID8gKGxheWVycyAtIGkpICogNCArIDkgOiAobGF5ZXJzIC0gaSkgKiA0ICsgMTI7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dTaXplOyBqKyspIHsKKyAgICAgIGludCBjb2x1bW5PZmZzZXQgPSBqICogMjsKKyAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgMjsgaysrKSB7CisgICAgICAgIGlmIChbbWVzc2FnZUJpdHMgZ2V0OnJvd09mZnNldCArIGNvbHVtbk9mZnNldCArIGtdKSB7CisgICAgICAgICAgW21hdHJpeCBzZXRYOmFsaWdubWVudE1hcFtpICogMiArIGtdIHk6YWxpZ25tZW50TWFwW2kgKiAyICsgal1dOworICAgICAgICB9CisgICAgICAgIGlmIChbbWVzc2FnZUJpdHMgZ2V0OnJvd09mZnNldCArIHJvd1NpemUgKiAyICsgY29sdW1uT2Zmc2V0ICsga10pIHsKKyAgICAgICAgICBbbWF0cml4IHNldFg6YWxpZ25tZW50TWFwW2kgKiAyICsgal0geTphbGlnbm1lbnRNYXBbYmFzZU1hdHJpeFNpemUgLSAxIC0gaSAqIDIgLSBrXV07CisgICAgICAgIH0KKyAgICAgICAgaWYgKFttZXNzYWdlQml0cyBnZXQ6cm93T2Zmc2V0ICsgcm93U2l6ZSAqIDQgKyBjb2x1bW5PZmZzZXQgKyBrXSkgeworICAgICAgICAgIFttYXRyaXggc2V0WDphbGlnbm1lbnRNYXBbYmFzZU1hdHJpeFNpemUgLSAxIC0gaSAqIDIgLSBrXSB5OmFsaWdubWVudE1hcFtiYXNlTWF0cml4U2l6ZSAtIDEgLSBpICogMiAtIGpdXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoW21lc3NhZ2VCaXRzIGdldDpyb3dPZmZzZXQgKyByb3dTaXplICogNiArIGNvbHVtbk9mZnNldCArIGtdKSB7CisgICAgICAgICAgW21hdHJpeCBzZXRYOmFsaWdubWVudE1hcFtiYXNlTWF0cml4U2l6ZSAtIDEgLSBpICogMiAtIGpdIHk6YWxpZ25tZW50TWFwW2kgKiAyICsga11dOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJvd09mZnNldCArPSByb3dTaXplICogODsKKyAgfQorICBbc2VsZiBkcmF3TW9kZU1lc3NhZ2U6bWF0cml4IGNvbXBhY3Q6Y29tcGFjdCBtYXRyaXhTaXplOm1hdHJpeFNpemUgbW9kZU1lc3NhZ2U6bW9kZU1lc3NhZ2VdOworCisgIC8vIGRyYXcgYWxpZ25tZW50IG1hcmtzCisgIGlmIChjb21wYWN0KSB7CisgICAgW3NlbGYgZHJhd0J1bGxzRXllOm1hdHJpeCBjZW50ZXI6bWF0cml4U2l6ZSAvIDIgc2l6ZTo1XTsKKyAgfSBlbHNlIHsKKyAgICBbc2VsZiBkcmF3QnVsbHNFeWU6bWF0cml4IGNlbnRlcjptYXRyaXhTaXplIC8gMiBzaXplOjddOworICAgIGZvciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IGJhc2VNYXRyaXhTaXplIC8gMiAtIDE7IGkgKz0gMTUsIGogKz0gMTYpIHsKKyAgICAgIGZvciAoaW50IGsgPSAobWF0cml4U2l6ZSAvIDIpICYgMTsgayA8IG1hdHJpeFNpemU7IGsgKz0gMikgeworICAgICAgICBbbWF0cml4IHNldFg6bWF0cml4U2l6ZSAvIDIgLSBqIHk6a107CisgICAgICAgIFttYXRyaXggc2V0WDptYXRyaXhTaXplIC8gMiArIGogeTprXTsKKyAgICAgICAgW21hdHJpeCBzZXRYOmsgeTptYXRyaXhTaXplIC8gMiAtIGpdOworICAgICAgICBbbWF0cml4IHNldFg6ayB5Om1hdHJpeFNpemUgLyAyICsgal07CisgICAgICB9CisgICAgfQorICB9CisKKyAgWlhBenRlY0NvZGUgKmF6dGVjID0gW1taWEF6dGVjQ29kZSBhbGxvY10gaW5pdF07CisgIGF6dGVjLmNvbXBhY3QgPSBjb21wYWN0OworICBhenRlYy5zaXplID0gbWF0cml4U2l6ZTsKKyAgYXp0ZWMubGF5ZXJzID0gbGF5ZXJzOworICBhenRlYy5jb2RlV29yZHMgPSBtZXNzYWdlU2l6ZUluV29yZHM7CisgIGF6dGVjLm1hdHJpeCA9IG1hdHJpeDsKKyAgcmV0dXJuIGF6dGVjOworfQorCisrICh2b2lkKWRyYXdCdWxsc0V5ZTooWlhCaXRNYXRyaXggKiltYXRyaXggY2VudGVyOihpbnQpY2VudGVyIHNpemU6KGludClzaXplIHsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICs9IDIpIHsKKyAgICBmb3IgKGludCBqID0gY2VudGVyIC0gaTsgaiA8PSBjZW50ZXIgKyBpOyBqKyspIHsKKyAgICAgIFttYXRyaXggc2V0WDpqIHk6Y2VudGVyIC0gaV07CisgICAgICBbbWF0cml4IHNldFg6aiB5OmNlbnRlciArIGldOworICAgICAgW21hdHJpeCBzZXRYOmNlbnRlciAtIGkgeTpqXTsKKyAgICAgIFttYXRyaXggc2V0WDpjZW50ZXIgKyBpIHk6al07CisgICAgfQorICB9CisgIFttYXRyaXggc2V0WDpjZW50ZXIgLSBzaXplIHk6Y2VudGVyIC0gc2l6ZV07CisgIFttYXRyaXggc2V0WDpjZW50ZXIgLSBzaXplICsgMSB5OmNlbnRlciAtIHNpemVdOworICBbbWF0cml4IHNldFg6Y2VudGVyIC0gc2l6ZSB5OmNlbnRlciAtIHNpemUgKyAxXTsKKyAgW21hdHJpeCBzZXRYOmNlbnRlciArIHNpemUgeTpjZW50ZXIgLSBzaXplXTsKKyAgW21hdHJpeCBzZXRYOmNlbnRlciArIHNpemUgeTpjZW50ZXIgLSBzaXplICsgMV07CisgIFttYXRyaXggc2V0WDpjZW50ZXIgKyBzaXplIHk6Y2VudGVyICsgc2l6ZSAtIDFdOworfQorCisrIChaWEJpdEFycmF5ICopZ2VuZXJhdGVNb2RlTWVzc2FnZUNvbXBhY3Q6KEJPT0wpY29tcGFjdCBsYXllcnM6KGludClsYXllcnMgbWVzc2FnZVNpemVJbldvcmRzOihpbnQpbWVzc2FnZVNpemVJbldvcmRzIHsKKyAgWlhCaXRBcnJheSAqbW9kZU1lc3NhZ2UgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBpZiAoY29tcGFjdCkgeworICAgIFttb2RlTWVzc2FnZSBhcHBlbmRCaXRzOmxheWVycyAtIDEgbnVtQml0czoyXTsKKyAgICBbbW9kZU1lc3NhZ2UgYXBwZW5kQml0czptZXNzYWdlU2l6ZUluV29yZHMgLSAxIG51bUJpdHM6Nl07CisgICAgbW9kZU1lc3NhZ2UgPSBbc2VsZiBnZW5lcmF0ZUNoZWNrV29yZHM6bW9kZU1lc3NhZ2UgdG90YWxTeW1ib2xCaXRzOjI4IHdvcmRTaXplOjRdOworICB9IGVsc2UgeworICAgIFttb2RlTWVzc2FnZSBhcHBlbmRCaXRzOmxheWVycyAtIDEgbnVtQml0czo1XTsKKyAgICBbbW9kZU1lc3NhZ2UgYXBwZW5kQml0czptZXNzYWdlU2l6ZUluV29yZHMgLSAxIG51bUJpdHM6MTFdOworICAgIG1vZGVNZXNzYWdlID0gW3NlbGYgZ2VuZXJhdGVDaGVja1dvcmRzOm1vZGVNZXNzYWdlIHRvdGFsU3ltYm9sQml0czo0MCB3b3JkU2l6ZTo0XTsKKyAgfQorICByZXR1cm4gbW9kZU1lc3NhZ2U7Cit9CisKKysgKHZvaWQpZHJhd01vZGVNZXNzYWdlOihaWEJpdE1hdHJpeCAqKW1hdHJpeCBjb21wYWN0OihCT09MKWNvbXBhY3QgbWF0cml4U2l6ZTooaW50KW1hdHJpeFNpemUgbW9kZU1lc3NhZ2U6KFpYQml0QXJyYXkgKiltb2RlTWVzc2FnZSB7CisgIGlmIChjb21wYWN0KSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA3OyBpKyspIHsKKyAgICAgIGlmIChbbW9kZU1lc3NhZ2UgZ2V0OmldKSB7CisgICAgICAgIFttYXRyaXggc2V0WDptYXRyaXhTaXplIC8gMiAtIDMgKyBpIHk6bWF0cml4U2l6ZSAvIDIgLSA1XTsKKyAgICAgIH0KKyAgICAgIGlmIChbbW9kZU1lc3NhZ2UgZ2V0OmkgKyA3XSkgeworICAgICAgICBbbWF0cml4IHNldFg6bWF0cml4U2l6ZSAvIDIgKyA1IHk6bWF0cml4U2l6ZSAvIDIgLSAzICsgaV07CisgICAgICB9CisgICAgICBpZiAoW21vZGVNZXNzYWdlIGdldDoyMCAtIGldKSB7CisgICAgICAgIFttYXRyaXggc2V0WDptYXRyaXhTaXplIC8gMiAtIDMgKyBpIHk6bWF0cml4U2l6ZSAvIDIgKyA1XTsKKyAgICAgIH0KKyAgICAgIGlmIChbbW9kZU1lc3NhZ2UgZ2V0OjI3IC0gaV0pIHsKKyAgICAgICAgW21hdHJpeCBzZXRYOm1hdHJpeFNpemUgLyAyIC0gNSB5Om1hdHJpeFNpemUgLyAyIC0gMyArIGldOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgIGlmIChbbW9kZU1lc3NhZ2UgZ2V0OmldKSB7CisgICAgICAgIFttYXRyaXggc2V0WDptYXRyaXhTaXplIC8gMiAtIDUgKyBpICsgaSAvIDUgeTptYXRyaXhTaXplIC8gMiAtIDddOworICAgICAgfQorICAgICAgaWYgKFttb2RlTWVzc2FnZSBnZXQ6aSArIDEwXSkgeworICAgICAgICBbbWF0cml4IHNldFg6bWF0cml4U2l6ZSAvIDIgKyA3IHk6bWF0cml4U2l6ZSAvIDIgLSA1ICsgaSArIGkgLyA1XTsKKyAgICAgIH0KKyAgICAgIGlmIChbbW9kZU1lc3NhZ2UgZ2V0OjI5IC0gaV0pIHsKKyAgICAgICAgW21hdHJpeCBzZXRYOm1hdHJpeFNpemUgLyAyIC0gNSArIGkgKyBpIC8gNSB5Om1hdHJpeFNpemUgLyAyICsgN107CisgICAgICB9CisgICAgICBpZiAoW21vZGVNZXNzYWdlIGdldDozOSAtIGldKSB7CisgICAgICAgIFttYXRyaXggc2V0WDptYXRyaXhTaXplIC8gMiAtIDcgeTptYXRyaXhTaXplIC8gMiAtIDUgKyBpICsgaSAvIDVdOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisrIChaWEJpdEFycmF5ICopZ2VuZXJhdGVDaGVja1dvcmRzOihaWEJpdEFycmF5ICopc3R1ZmZlZEJpdHMgdG90YWxTeW1ib2xCaXRzOihpbnQpdG90YWxTeW1ib2xCaXRzIHdvcmRTaXplOihpbnQpd29yZFNpemUgeworICBpbnQgbWVzc2FnZVNpemVJbldvcmRzID0gKHN0dWZmZWRCaXRzLnNpemUgKyB3b3JkU2l6ZSAtIDEpIC8gd29yZFNpemU7CisgIGZvciAoaW50IGkgPSBtZXNzYWdlU2l6ZUluV29yZHMgKiB3b3JkU2l6ZSAtIHN0dWZmZWRCaXRzLnNpemU7IGkgPiAwOyBpLS0pIHsKKyAgICBbc3R1ZmZlZEJpdHMgYXBwZW5kQml0OllFU107CisgIH0KKyAgWlhSZWVkU29sb21vbkVuY29kZXIgKnJzID0gW1taWFJlZWRTb2xvbW9uRW5jb2RlciBhbGxvY10gaW5pdFdpdGhGaWVsZDpbc2VsZiBnZXRHRjp3b3JkU2l6ZV1dOworICBpbnQgdG90YWxTaXplSW5GdWxsV29yZHMgPSB0b3RhbFN5bWJvbEJpdHMgLyB3b3JkU2l6ZTsKKworICBpbnQgbWVzc2FnZVdvcmRzW3RvdGFsU2l6ZUluRnVsbFdvcmRzXTsKKyAgW3NlbGYgYml0c1RvV29yZHM6c3R1ZmZlZEJpdHMgd29yZFNpemU6d29yZFNpemUgdG90YWxXb3Jkczp0b3RhbFNpemVJbkZ1bGxXb3JkcyBtZXNzYWdlOm1lc3NhZ2VXb3Jkc107CisKKyAgW3JzIGVuY29kZTptZXNzYWdlV29yZHMgdG9FbmNvZGVMZW46dG90YWxTaXplSW5GdWxsV29yZHMgZWNCeXRlczp0b3RhbFNpemVJbkZ1bGxXb3JkcyAtIG1lc3NhZ2VTaXplSW5Xb3Jkc107CisgIGludCBzdGFydFBhZCA9IHRvdGFsU3ltYm9sQml0cyAlIHdvcmRTaXplOworICBaWEJpdEFycmF5ICptZXNzYWdlQml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFttZXNzYWdlQml0cyBhcHBlbmRCaXRzOjAgbnVtQml0czpzdGFydFBhZF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxTaXplSW5GdWxsV29yZHM7IGkrKykgeworICAgIFttZXNzYWdlQml0cyBhcHBlbmRCaXRzOm1lc3NhZ2VXb3Jkc1tpXSBudW1CaXRzOndvcmRTaXplXTsKKyAgfQorICByZXR1cm4gbWVzc2FnZUJpdHM7Cit9CisKKysgKHZvaWQpYml0c1RvV29yZHM6KFpYQml0QXJyYXkgKilzdHVmZmVkQml0cyB3b3JkU2l6ZTooaW50KXdvcmRTaXplIHRvdGFsV29yZHM6KGludCl0b3RhbFdvcmRzIG1lc3NhZ2U6KGludCAqKW1lc3NhZ2UgeworICBpbnQgaTsKKyAgaW50IG47CisgIGZvciAoaSA9IDAsIG4gPSBzdHVmZmVkQml0cy5zaXplIC8gd29yZFNpemU7IGkgPCBuOyBpKyspIHsKKyAgICBpbnQgdmFsdWUgPSAwOworICAgIGZvciAoaW50IGogPSAwOyBqIDwgd29yZFNpemU7IGorKykgeworICAgICAgdmFsdWUgfD0gW3N0dWZmZWRCaXRzIGdldDppICogd29yZFNpemUgKyBqXSA/ICgxIDw8ICh3b3JkU2l6ZSAtIGogLSAxKSkgOiAwOworICAgIH0KKyAgICBtZXNzYWdlW2ldID0gdmFsdWU7CisgIH0KK30KKworKyAoWlhHZW5lcmljR0YgKilnZXRHRjooaW50KXdvcmRTaXplIHsKKyAgc3dpdGNoICh3b3JkU2l6ZSkgeworICAgIGNhc2UgNDoKKyAgICAgIHJldHVybiBbWlhHZW5lcmljR0YgQXp0ZWNQYXJhbV07CisgICAgY2FzZSA2OgorICAgICAgcmV0dXJuIFtaWEdlbmVyaWNHRiBBenRlY0RhdGE2XTsKKyAgICBjYXNlIDg6CisgICAgICByZXR1cm4gW1pYR2VuZXJpY0dGIEF6dGVjRGF0YThdOworICAgIGNhc2UgMTA6CisgICAgICByZXR1cm4gW1pYR2VuZXJpY0dGIEF6dGVjRGF0YTEwXTsKKyAgICBjYXNlIDEyOgorICAgICAgcmV0dXJuIFtaWEdlbmVyaWNHRiBBenRlY0RhdGExMl07CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBuaWw7CisgIH0KK30KKworKyAoWlhCaXRBcnJheSAqKXN0dWZmQml0czooWlhCaXRBcnJheSAqKWJpdHMgd29yZFNpemU6KGludCl3b3JkU2l6ZSB7CisgIFpYQml0QXJyYXkgKmFycmF5T3V0ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKworICAvLyAxLiBzdHVmZiB0aGUgYml0cworICBpbnQgbiA9IGJpdHMuc2l6ZTsKKyAgaW50IG1hc2sgPSAoMSA8PCB3b3JkU2l6ZSkgLSAyOworICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKz0gd29yZFNpemUpIHsKKyAgICBpbnQgd29yZCA9IDA7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3b3JkU2l6ZTsgaisrKSB7CisgICAgICBpZiAoaSArIGogPj0gbiB8fCBbYml0cyBnZXQ6aSArIGpdKSB7CisgICAgICAgIHdvcmQgfD0gMSA8PCAod29yZFNpemUgLSAxIC0gaik7CisgICAgICB9CisgICAgfQorICAgIGlmICgod29yZCAmIG1hc2spID09IG1hc2spIHsKKyAgICAgIFthcnJheU91dCBhcHBlbmRCaXRzOndvcmQgJiBtYXNrIG51bUJpdHM6d29yZFNpemVdOworICAgICAgaS0tOworICAgIH0gZWxzZSBpZiAoKHdvcmQgJiBtYXNrKSA9PSAwKSB7CisgICAgICBbYXJyYXlPdXQgYXBwZW5kQml0czp3b3JkIHwgMSBudW1CaXRzOndvcmRTaXplXTsKKyAgICAgIGktLTsKKyAgICB9IGVsc2UgeworICAgICAgW2FycmF5T3V0IGFwcGVuZEJpdHM6d29yZCBudW1CaXRzOndvcmRTaXplXTsKKyAgICB9CisgIH0KKworICAvLyAyLiBwYWQgbGFzdCB3b3JkIHRvIHdvcmRTaXplCisgIC8vIFRoaXMgc2VlbXMgdG8gYmUgcmVkdW5kYW50PworICAvKgorICBuID0gYXJyYXlPdXQuc2l6ZTsKKyAgaW50IHJlbWFpbmRlciA9IG4gJSB3b3JkU2l6ZTsKKyAgaWYgKHJlbWFpbmRlciAhPSAwKSB7CisgICAgaW50IGogPSAxOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVtYWluZGVyOyBpKyspIHsKKyAgICAgIGlmICghW2FycmF5T3V0IGdldDpuIC0gMSAtIGldKSB7CisgICAgICAgIGogPSAwOworICAgICAgfQorICAgIH0KKyAgICBmb3IgKGludCBpID0gcmVtYWluZGVyOyBpIDwgd29yZFNpemUgLSAxOyBpKyspIHsKKyAgICAgIFthcnJheU91dCBhcHBlbmRCaXQ6WUVTXTsKKyAgICB9CisgICAgW2FycmF5T3V0IGFwcGVuZEJpdDpqID09IDBdOworICB9CisgICovCisgIHJldHVybiBhcnJheU91dDsKK30KKworKyAoWlhCaXRBcnJheSAqKWhpZ2hMZXZlbEVuY29kZTooaW50OF90ICopZGF0YSBsZW46KGludClsZW4geworICBaWEJpdEFycmF5ICpiaXRzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgaW50IG1vZGUgPSBUQUJMRV9VUFBFUjsKKyAgaW50IGlkeFs1XSA9IHswLCAwLCAwLCAwLCAwfTsKKyAgaW50IGlkeG5leHRbNV0gPSB7MCwgMCwgMCwgMCwgMH07CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgIGludCBjID0gZGF0YVtpXSAmIDB4RkY7CisgICAgaW50IG5leHQgPSBpIDwgbGVuIC0gMSA/IGRhdGFbaSArIDFdICYgMHhGRiA6IDA7CisgICAgaW50IHB1bmN0V29yZCA9IDA7CisgICAgLy8gc3BlY2lhbCBjYXNlOiBkb3VibGUtY2hhcmFjdGVyIGNvZGVzCisgICAgaWYgKGMgPT0gJ1xyJyAmJiBuZXh0ID09ICdcbicpIHsKKyAgICAgIHB1bmN0V29yZCA9IDI7CisgICAgfSBlbHNlIGlmIChjID09ICcuJyAmJiBuZXh0ID09ICcgJykgeworICAgICAgcHVuY3RXb3JkID0gMzsKKyAgICB9IGVsc2UgaWYgKGMgPT0gJywnICYmIG5leHQgPT0gJyAnKSB7CisgICAgICBwdW5jdFdvcmQgPSA0OworICAgIH0gZWxzZSBpZiAoYyA9PSAnOicgJiYgbmV4dCA9PSAnICcpIHsKKyAgICAgIHB1bmN0V29yZCA9IDU7CisgICAgfQorICAgIGlmIChwdW5jdFdvcmQgPiAwKSB7CisgICAgICBpZiAobW9kZSA9PSBUQUJMRV9QVU5DVCkgeworICAgICAgICBbc2VsZiBvdXRwdXRXb3JkOmJpdHMgbW9kZTpUQUJMRV9QVU5DVCB2YWx1ZTpwdW5jdFdvcmRdOworICAgICAgICBpKys7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfSBlbHNlIGlmIChTSElGVF9UQUJMRVttb2RlXVtUQUJMRV9QVU5DVF0gPj0gMCkgeworICAgICAgICBbc2VsZiBvdXRwdXRXb3JkOmJpdHMgbW9kZTptb2RlIHZhbHVlOlNISUZUX1RBQkxFW21vZGVdW1RBQkxFX1BVTkNUXV07CisgICAgICAgIFtzZWxmIG91dHB1dFdvcmQ6Yml0cyBtb2RlOlRBQkxFX1BVTkNUIHZhbHVlOnB1bmN0V29yZF07CisgICAgICAgIGkrKzsKKyAgICAgICAgY29udGludWU7CisgICAgICB9IGVsc2UgaWYgKExBVENIX1RBQkxFW21vZGVdW1RBQkxFX1BVTkNUXSA+PSAwKSB7CisgICAgICAgIFtzZWxmIG91dHB1dFdvcmQ6Yml0cyBtb2RlOm1vZGUgdmFsdWU6TEFUQ0hfVEFCTEVbbW9kZV1bVEFCTEVfUFVOQ1RdXTsKKyAgICAgICAgW3NlbGYgb3V0cHV0V29yZDpiaXRzIG1vZGU6VEFCTEVfUFVOQ1QgdmFsdWU6cHVuY3RXb3JkXTsKKyAgICAgICAgbW9kZSA9IFRBQkxFX1BVTkNUOworICAgICAgICBpKys7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgIH0KKyAgICAvLyBmaW5kIHRoZSBiZXN0IG1hdGNoaW5nIHRhYmxlLCB0YWtpbmcgY3VycmVudCBtb2RlIGFuZCBuZXh0IGNoYXJhY3RlciBpbnRvIGFjY291bnQKKyAgICBpbnQgZmlyc3RNYXRjaCA9IC0xOworICAgIGludCBzaGlmdE1vZGUgPSAtMTsKKyAgICBpbnQgbGF0Y2hNb2RlID0gLTE7CisgICAgaW50IGo7CisgICAgZm9yIChqID0gMDsgaiA8IFRBQkxFX0JJTkFSWTsgaisrKSB7CisgICAgICBpZHhbal0gPSBDSEFSX01BUFtqXVtjXTsKKyAgICAgIGlmIChpZHhbal0gPiAwICYmIGZpcnN0TWF0Y2ggPCAwKSB7CisgICAgICAgIGZpcnN0TWF0Y2ggPSBqOworICAgICAgfQorICAgICAgaWYgKHNoaWZ0TW9kZSA8IDAgJiYgaWR4W2pdID4gMCAmJiBTSElGVF9UQUJMRVttb2RlXVtqXSA+PSAwKSB7CisgICAgICAgIHNoaWZ0TW9kZSA9IGo7CisgICAgICB9CisgICAgICBpZHhuZXh0W2pdID0gQ0hBUl9NQVBbal1bbmV4dF07CisgICAgICBpZiAobGF0Y2hNb2RlIDwgMCAmJiBpZHhbal0gPiAwICYmIChuZXh0ID09IDAgfHwgaWR4bmV4dFtqXSA+IDApICYmIExBVENIX1RBQkxFW21vZGVdW2pdID49IDApIHsKKyAgICAgICAgbGF0Y2hNb2RlID0gajsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHNoaWZ0TW9kZSA8IDAgJiYgbGF0Y2hNb2RlIDwgMCkgeworICAgICAgZm9yIChqID0gMDsgaiA8IFRBQkxFX0JJTkFSWTsgaisrKSB7CisgICAgICAgIGlmIChpZHhbal0gPiAwICYmIExBVENIX1RBQkxFW21vZGVdW2pdID49IDApIHsKKyAgICAgICAgICBsYXRjaE1vZGUgPSBqOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmIChpZHhbbW9kZV0gPiAwKSB7CisgICAgICAvLyBmb3VuZCBjaGFyYWN0ZXIgaW4gY3VycmVudCB0YWJsZSAtIHN0YXkgaW4gY3VycmVudCB0YWJsZQorICAgICAgW3NlbGYgb3V0cHV0V29yZDpiaXRzIG1vZGU6bW9kZSB2YWx1ZTppZHhbbW9kZV1dOworICAgIH0gZWxzZSB7CisgICAgICBpZiAobGF0Y2hNb2RlID49IDApIHsKKyAgICAgICAgLy8gbGF0Y2ggaW50byBtb2RlIGxhdGNoTW9kZQorICAgICAgICBbc2VsZiBvdXRwdXRXb3JkOmJpdHMgbW9kZTptb2RlIHZhbHVlOkxBVENIX1RBQkxFW21vZGVdW2xhdGNoTW9kZV1dOworICAgICAgICBbc2VsZiBvdXRwdXRXb3JkOmJpdHMgbW9kZTpsYXRjaE1vZGUgdmFsdWU6aWR4W2xhdGNoTW9kZV1dOworICAgICAgICBtb2RlID0gbGF0Y2hNb2RlOworICAgICAgfSBlbHNlIGlmIChzaGlmdE1vZGUgPj0gMCkgeworICAgICAgICAvLyBzaGlmdCBpbnRvIHNoaWZ0TW9kZQorICAgICAgICBbc2VsZiBvdXRwdXRXb3JkOmJpdHMgbW9kZTptb2RlIHZhbHVlOlNISUZUX1RBQkxFW21vZGVdW3NoaWZ0TW9kZV1dOworICAgICAgICBbc2VsZiBvdXRwdXRXb3JkOmJpdHMgbW9kZTpzaGlmdE1vZGUgdmFsdWU6aWR4W3NoaWZ0TW9kZV1dOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGZpcnN0TWF0Y2ggPj0gMCkgeworICAgICAgICAgIC8vIGNhbid0IHN3aXRjaCBpbnRvIHRoaXMgbW9kZSBmcm9tIGN1cnJlbnQgbW9kZSAtIHN3aXRjaCBpbiB0d28gc3RlcHMKKyAgICAgICAgICBpZiAobW9kZSA9PSBUQUJMRV9QVU5DVCkgeworICAgICAgICAgICAgW3NlbGYgb3V0cHV0V29yZDpiaXRzIG1vZGU6VEFCTEVfUFVOQ1QgdmFsdWU6TEFUQ0hfVEFCTEVbVEFCTEVfUFVOQ1RdW1RBQkxFX1VQUEVSXV07CisgICAgICAgICAgICBtb2RlID0gVEFCTEVfVVBQRVI7CisgICAgICAgICAgICBpLS07CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gVEFCTEVfRElHSVQpIHsKKyAgICAgICAgICAgIFtzZWxmIG91dHB1dFdvcmQ6Yml0cyBtb2RlOlRBQkxFX0RJR0lUIHZhbHVlOkxBVENIX1RBQkxFW1RBQkxFX0RJR0lUXVtUQUJMRV9VUFBFUl1dOworICAgICAgICAgICAgbW9kZSA9IFRBQkxFX1VQUEVSOworICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIHVzZSBiaW5hcnkgdGFibGUKKyAgICAgICAgLy8gZmluZCB0aGUgYmluYXJ5IHN0cmluZyBsZW5ndGgKKyAgICAgICAgaW50IGs7CisgICAgICAgIGludCBsb29rYWhlYWQ7CisgICAgICAgIGZvciAoayA9IGkgKyAxLCBsb29rYWhlYWQgPSAwOyBrIDwgbGVuOyBrKyspIHsKKyAgICAgICAgICBuZXh0ID0gZGF0YVtrXSAmIDB4RkY7CisgICAgICAgICAgQk9PTCBiaW5hcnkgPSBZRVM7CisgICAgICAgICAgZm9yIChqID0gMDsgaiA8IFRBQkxFX0JJTkFSWTsgaisrKSB7CisgICAgICAgICAgICBpZiAoQ0hBUl9NQVBbal1bbmV4dF0gPiAwKSB7CisgICAgICAgICAgICAgIGJpbmFyeSA9IE5POworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGJpbmFyeSkgeworICAgICAgICAgICAgbG9va2FoZWFkID0gMDsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gc2tpcCBvdmVyIHNpbmdsZSBjaGFyYWN0ZXIgaW4gYmV0d2VlbiBiaW5hcnkgYnl0ZXMKKyAgICAgICAgICAgIGlmIChsb29rYWhlYWQgPj0gMSkgeworICAgICAgICAgICAgICBrIC09IGxvb2thaGVhZDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb29rYWhlYWQrKzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgayAtPSBpOworICAgICAgICAvLyBzd2l0Y2ggaW50byBiaW5hcnkgdGFibGUKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgICAgY2FzZSBUQUJMRV9VUFBFUjoKKyAgICAgICAgICBjYXNlIFRBQkxFX0xPV0VSOgorICAgICAgICAgIGNhc2UgVEFCTEVfTUlYRUQ6CisgICAgICAgICAgICBbc2VsZiBvdXRwdXRXb3JkOmJpdHMgbW9kZTptb2RlIHZhbHVlOlNISUZUX1RBQkxFW21vZGVdW1RBQkxFX0JJTkFSWV1dOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUQUJMRV9ESUdJVDoKKyAgICAgICAgICAgIFtzZWxmIG91dHB1dFdvcmQ6Yml0cyBtb2RlOm1vZGUgdmFsdWU6TEFUQ0hfVEFCTEVbbW9kZV1bVEFCTEVfVVBQRVJdXTsKKyAgICAgICAgICAgIG1vZGUgPSBUQUJMRV9VUFBFUjsKKyAgICAgICAgICAgIFtzZWxmIG91dHB1dFdvcmQ6Yml0cyBtb2RlOm1vZGUgdmFsdWU6U0hJRlRfVEFCTEVbbW9kZV1bVEFCTEVfQklOQVJZXV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRBQkxFX1BVTkNUOgorICAgICAgICAgICAgW3NlbGYgb3V0cHV0V29yZDpiaXRzIG1vZGU6bW9kZSB2YWx1ZTpMQVRDSF9UQUJMRVttb2RlXVtUQUJMRV9VUFBFUl1dOworICAgICAgICAgICAgbW9kZSA9IFRBQkxFX1VQUEVSOworICAgICAgICAgICAgW3NlbGYgb3V0cHV0V29yZDpiaXRzIG1vZGU6bW9kZSB2YWx1ZTpTSElGVF9UQUJMRVttb2RlXVtUQUJMRV9CSU5BUlldXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChrID49IDMyICYmIGsgPCA2MykgeyAvLyBvcHRpbWl6YXRpb246IHNwbGl0IG9uZSBsb25nIGZvcm0gaW50byB0d28gc2hvcnQgZm9ybXMsIHNhdmVzIDEgYml0CisgICAgICAgICAgayA9IDMxOworICAgICAgICB9CisgICAgICAgIGlmIChrID4gNTQyKSB7IC8vIG1heGltdW0gZW5jb2RhYmxlIGJpbmFyeSBsZW5ndGggaW4gbG9uZyBmb3JtIGlzIDUxMSArIDMxCisgICAgICAgICAgayA9IDU0MjsKKyAgICAgICAgfQorICAgICAgICBpZiAoayA8IDMyKSB7CisgICAgICAgICAgW2JpdHMgYXBwZW5kQml0czprIG51bUJpdHM6NV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgW2JpdHMgYXBwZW5kQml0czprIC0gMzEgbnVtQml0czoxNl07CisgICAgICAgIH0KKyAgICAgICAgZm9yICg7IGsgPiAwOyBrLS0sIGkrKykgeworICAgICAgICAgIFtiaXRzIGFwcGVuZEJpdHM6ZGF0YVtpXSBudW1CaXRzOjhdOworICAgICAgICB9CisgICAgICAgIGktLTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGJpdHM7CisKK30KKworKyAodm9pZClvdXRwdXRXb3JkOihaWEJpdEFycmF5ICopYml0cyBtb2RlOihpbnQpbW9kZSB2YWx1ZTooaW50KXZhbHVlIHsKKyAgaWYgKG1vZGUgPT0gVEFCTEVfRElHSVQpIHsKKyAgICBbYml0cyBhcHBlbmRCaXRzOnZhbHVlIG51bUJpdHM6NF07CisgIH0gZWxzZSBpZiAobW9kZSA8IFRBQkxFX0JJTkFSWSkgeworICAgIFtiaXRzIGFwcGVuZEJpdHM6dmFsdWUgbnVtQml0czo1XTsKKyAgfSBlbHNlIHsKKyAgICBbYml0cyBhcHBlbmRCaXRzOnZhbHVlIG51bUJpdHM6OF07CisgIH0KK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9aWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UuaCBiL1pYaW5nT2JqQy9jbGllbnQvWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyNzQzMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8Q29yZVZpZGVvL0NvcmVWaWRlby5oPgorI2ltcG9ydCAiWlhMdW1pbmFuY2VTb3VyY2UuaCIKKworQGNsYXNzIFpYSW1hZ2U7CisKK0BpbnRlcmZhY2UgWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlIDogWlhMdW1pbmFuY2VTb3VyY2UgeworICBDR0ltYWdlUmVmIF9pbWFnZTsKKyAgaW50OF90ICpfZGF0YTsKKyAgc2l6ZV90IF9sZWZ0OworICBzaXplX3QgX3RvcDsKK30KKworKyAoQ0dJbWFnZVJlZiljcmVhdGVJbWFnZUZyb21CdWZmZXI6KENWSW1hZ2VCdWZmZXJSZWYpYnVmZmVyIENGX1JFVFVSTlNfUkVUQUlORUQ7CisrIChDR0ltYWdlUmVmKWNyZWF0ZUltYWdlRnJvbUJ1ZmZlcjooQ1ZJbWFnZUJ1ZmZlclJlZilidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OihzaXplX3QpbGVmdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6KHNpemVfdCl0b3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOihzaXplX3Qpd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OihzaXplX3QpaGVpZ2h0IENGX1JFVFVSTlNfUkVUQUlORUQ7CisKKy0gKGlkKWluaXRXaXRoWlhJbWFnZTooWlhJbWFnZSAqKWltYWdlCisgICAgICAgICAgICAgICAgIGxlZnQ6KHNpemVfdClsZWZ0CisgICAgICAgICAgICAgICAgICB0b3A6KHNpemVfdCl0b3AKKyAgICAgICAgICAgICAgICB3aWR0aDooc2l6ZV90KXdpZHRoCisgICAgICAgICAgICAgICBoZWlnaHQ6KHNpemVfdCloZWlnaHQ7CisKKy0gKGlkKWluaXRXaXRoWlhJbWFnZTooWlhJbWFnZSAqKWltYWdlOworCistIChpZClpbml0V2l0aENHSW1hZ2U6KENHSW1hZ2VSZWYpaW1hZ2UKKyAgICAgICAgICAgICAgICAgbGVmdDooc2l6ZV90KWxlZnQKKyAgICAgICAgICAgICAgICAgIHRvcDooc2l6ZV90KXRvcAorICAgICAgICAgICAgICAgIHdpZHRoOihzaXplX3Qpd2lkdGgKKyAgICAgICAgICAgICAgIGhlaWdodDooc2l6ZV90KWhlaWdodDsKKworLSAoaWQpaW5pdFdpdGhDR0ltYWdlOihDR0ltYWdlUmVmKWltYWdlOworCistIChpZClpbml0V2l0aEJ1ZmZlcjooQ1ZQaXhlbEJ1ZmZlclJlZilidWZmZXIKKyAgICAgICAgICAgICAgICBsZWZ0OihzaXplX3QpbGVmdAorICAgICAgICAgICAgICAgICB0b3A6KHNpemVfdCl0b3AKKyAgICAgICAgICAgICAgIHdpZHRoOihzaXplX3Qpd2lkdGgKKyAgICAgICAgICAgICAgaGVpZ2h0OihzaXplX3QpaGVpZ2h0OworCistIChpZClpbml0V2l0aEJ1ZmZlcjooQ1ZQaXhlbEJ1ZmZlclJlZilidWZmZXI7CisKKy0gKENHSW1hZ2VSZWYpaW1hZ2U7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlLm0gYi9aWGluZ09iakMvY2xpZW50L1pYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ODAzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L1pYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZS5tCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxDb3JlVmlkZW8vQ29yZVZpZGVvLmg+CisjaW1wb3J0ICJaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UuaCIKKyNpbXBvcnQgIlpYSW1hZ2UuaCIKKworQGltcGxlbWVudGF0aW9uIFpYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZQorCisrIChDR0ltYWdlUmVmKWNyZWF0ZUltYWdlRnJvbUJ1ZmZlcjooQ1ZJbWFnZUJ1ZmZlclJlZilidWZmZXIgQ0ZfUkVUVVJOU19SRVRBSU5FRCB7CisgIHJldHVybiBbc2VsZiBjcmVhdGVJbWFnZUZyb21CdWZmZXI6YnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDpDVlBpeGVsQnVmZmVyR2V0V2lkdGgoYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OkNWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoYnVmZmVyKV07Cit9CisKKysgKENHSW1hZ2VSZWYpY3JlYXRlSW1hZ2VGcm9tQnVmZmVyOihDVkltYWdlQnVmZmVyUmVmKWJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OihzaXplX3QpbGVmdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOihzaXplX3QpdG9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6KHNpemVfdCl3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OihzaXplX3QpaGVpZ2h0IENGX1JFVFVSTlNfUkVUQUlORUQgeworICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJSb3coYnVmZmVyKTsKKyAgc2l6ZV90IGRhdGFXaWR0aCA9IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChidWZmZXIpOworICBzaXplX3QgZGF0YUhlaWdodCA9IENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoYnVmZmVyKTsKKworICBpZiAobGVmdCArIHdpZHRoID4gZGF0YVdpZHRoIHx8CisgICAgICB0b3AgKyBoZWlnaHQgPiBkYXRhSGVpZ2h0KSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkNyb3AgcmVjdGFuZ2xlIGRvZXMgbm90IGZpdCB3aXRoaW4gaW1hZ2UgZGF0YS4iXTsKKyAgfQorCisgIHNpemVfdCBuZXdCeXRlc1BlclJvdyA9ICgod2lkdGgqNCsweGYpPj40KTw8NDsKKworICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKGJ1ZmZlciwwKTsgCisKKyAgaW50OF90ICpiYXNlQWRkcmVzcyA9CisgIChpbnQ4X3QgKilDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MoYnVmZmVyKTsgCisKKyAgc2l6ZV90IHNpemUgPSBuZXdCeXRlc1BlclJvdypoZWlnaHQ7CisgIGludDhfdCAqYnl0ZXMgPSAoaW50OF90ICopbWFsbG9jKHNpemUgKiBzaXplb2YoaW50OF90KSk7CisgIGlmIChuZXdCeXRlc1BlclJvdyA9PSBieXRlc1BlclJvdykgeworICAgIG1lbWNweShieXRlcywgYmFzZUFkZHJlc3MrdG9wKmJ5dGVzUGVyUm93LCBzaXplICogc2l6ZW9mKGludDhfdCkpOworICB9IGVsc2UgeworICAgIGZvcihpbnQgeT0wOyB5PGhlaWdodDsgeSsrKSB7CisgICAgICBtZW1jcHkoYnl0ZXMreSpuZXdCeXRlc1BlclJvdywKKyAgICAgICAgICAgICBiYXNlQWRkcmVzcytsZWZ0KjQrKHRvcCt5KSpieXRlc1BlclJvdywKKyAgICAgICAgICAgICBuZXdCeXRlc1BlclJvdyAqIHNpemVvZihpbnQ4X3QpKTsKKyAgICB9CisgIH0KKyAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKGJ1ZmZlciwgMCk7CisKKyAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsgCisgIENHQ29udGV4dFJlZiBuZXdDb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCeXRlc1BlclJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGV8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0KTsKKyAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKKworICBDR0ltYWdlUmVmIHJlc3VsdCA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKG5ld0NvbnRleHQpOworCisgIENHQ29udGV4dFJlbGVhc2UobmV3Q29udGV4dCk7CisKKyAgZnJlZShieXRlcyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoaWQpaW5pdFdpdGhaWEltYWdlOihaWEltYWdlICopaW1hZ2UKKyAgICAgICAgICAgICAgICAgbGVmdDooc2l6ZV90KWxlZnQKKyAgICAgICAgICAgICAgICAgIHRvcDooc2l6ZV90KXRvcAorICAgICAgICAgICAgICAgIHdpZHRoOihzaXplX3Qpd2lkdGgKKyAgICAgICAgICAgICAgIGhlaWdodDooc2l6ZV90KWhlaWdodCB7CisgIHJldHVybiBbc2VsZiBpbml0V2l0aENHSW1hZ2U6aW1hZ2UuY2dpbWFnZSBsZWZ0OmxlZnQgdG9wOnRvcCB3aWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0XTsKK30KKworLSAoaWQpaW5pdFdpdGhaWEltYWdlOihaWEltYWdlICopaW1hZ2UgeworICByZXR1cm4gW3NlbGYgaW5pdFdpdGhDR0ltYWdlOmltYWdlLmNnaW1hZ2VdOworfQorCistIChpZClpbml0V2l0aENHSW1hZ2U6KENHSW1hZ2VSZWYpaW1hZ2UKKyAgICAgICAgICAgICAgICAgbGVmdDooc2l6ZV90KWxlZnQKKyAgICAgICAgICAgICAgICAgIHRvcDooc2l6ZV90KXRvcAorICAgICAgICAgICAgICAgIHdpZHRoOihzaXplX3Qpd2lkdGgKKyAgICAgICAgICAgICAgIGhlaWdodDooc2l6ZV90KWhlaWdodCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRXaXRoV2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHRdKSB7CisgICAgW3NlbGYgaW5pdGlhbGl6ZVdpdGhJbWFnZTppbWFnZSBsZWZ0OmxlZnQgdG9wOnRvcCB3aWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0XTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aENHSW1hZ2U6KENHSW1hZ2VSZWYpaW1hZ2UgeworICByZXR1cm4gW3NlbGYgaW5pdFdpdGhDR0ltYWdlOmltYWdlIGxlZnQ6MCB0b3A6MCB3aWR0aDpDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpIGhlaWdodDpDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKV07Cit9CisKKy0gKGlkKWluaXRXaXRoQnVmZmVyOihDVlBpeGVsQnVmZmVyUmVmKWJ1ZmZlcgorICAgICAgICAgICAgICAgIGxlZnQ6KHNpemVfdClsZWZ0CisgICAgICAgICAgICAgICAgIHRvcDooc2l6ZV90KXRvcAorICAgICAgICAgICAgICAgd2lkdGg6KHNpemVfdCl3aWR0aAorICAgICAgICAgICAgICBoZWlnaHQ6KHNpemVfdCloZWlnaHQgeworICBDR0ltYWdlUmVmIGltYWdlID0gW1pYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZSBjcmVhdGVJbWFnZUZyb21CdWZmZXI6YnVmZmVyIGxlZnQ6bGVmdCB0b3A6dG9wIHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHRdOworCisgIHNlbGYgPSBbc2VsZiBpbml0V2l0aENHSW1hZ2U6aW1hZ2VdOworCisgIENHSW1hZ2VSZWxlYXNlKGltYWdlKTsKKworICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQpaW5pdFdpdGhCdWZmZXI6KENWUGl4ZWxCdWZmZXJSZWYpYnVmZmVyIHsKKyAgQ0dJbWFnZVJlZiBpbWFnZSA9IFtaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UgY3JlYXRlSW1hZ2VGcm9tQnVmZmVyOmJ1ZmZlcl07CisKKyAgc2VsZiA9IFtzZWxmIGluaXRXaXRoQ0dJbWFnZTppbWFnZV07CisKKyAgQ0dJbWFnZVJlbGVhc2UoaW1hZ2UpOworCisgIHJldHVybiBzZWxmOworfQorCistIChDR0ltYWdlUmVmKWltYWdlIHsKKyAgcmV0dXJuIF9pbWFnZTsKK30KKworLSAodm9pZClkZWFsbG9jIHsgIAorICBpZiAoX2ltYWdlKSB7CisgICAgQ0dJbWFnZVJlbGVhc2UoX2ltYWdlKTsKKyAgfQorICBpZiAoX2RhdGEpIHsKKyAgICBmcmVlKF9kYXRhKTsKKyAgfQorfQorCistIChpbnQ4X3QgKilyb3c6KGludCl5IHsKKyAgaWYgKHkgPCAwIHx8IHkgPj0gc2VsZi5oZWlnaHQpIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiUmVxdWVzdGVkIHJvdyBpcyBvdXRzaWRlIHRoZSBpbWFnZTogJWQiLCB5XTsKKyAgfQorCisgIGludDhfdCAqcm93ID0gKGludDhfdCAqKW1hbGxvYyhzZWxmLndpZHRoICogc2l6ZW9mKGludDhfdCkpOworCisgIGludCBvZmZzZXQgPSB5ICogc2VsZi53aWR0aDsKKyAgbWVtY3B5KHJvdywgX2RhdGEgKyBvZmZzZXQsIHNlbGYud2lkdGgpOworICByZXR1cm4gcm93OworfQorCistIChpbnQ4X3QgKiltYXRyaXggeworICBpbnQgYXJlYSA9IHNlbGYud2lkdGggKiBzZWxmLmhlaWdodDsKKworICBpbnQ4X3QgKnJlc3VsdCA9IChpbnQ4X3QgKiltYWxsb2MoYXJlYSAqIHNpemVvZihpbnQ4X3QpKTsKKyAgbWVtY3B5KHJlc3VsdCwgX2RhdGEsIGFyZWEgKiBzaXplb2YoaW50OF90KSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpaW5pdGlhbGl6ZVdpdGhJbWFnZTooQ0dJbWFnZVJlZiljZ2ltYWdlIGxlZnQ6KHNpemVfdClsZWZ0IHRvcDooc2l6ZV90KXRvcCB3aWR0aDooc2l6ZV90KXdpZHRoIGhlaWdodDooc2l6ZV90KWhlaWdodCB7CisgIF9kYXRhID0gMDsKKyAgX2ltYWdlID0gQ0dJbWFnZVJldGFpbihjZ2ltYWdlKTsKKyAgX2xlZnQgPSBsZWZ0OworICBfdG9wID0gdG9wOworICBzaXplX3Qgc291cmNlV2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dpbWFnZSk7CisgIHNpemVfdCBzb3VyY2VIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGNnaW1hZ2UpOworCisgIGlmIChsZWZ0ICsgc2VsZi53aWR0aCA+IHNvdXJjZVdpZHRoIHx8CisgICAgICB0b3AgKyBzZWxmLmhlaWdodCA+IHNvdXJjZUhlaWdodCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJDcm9wIHJlY3RhbmdsZSBkb2VzIG5vdCBmaXQgd2l0aGluIGltYWdlIGRhdGEuIl07CisgIH0KKworICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBzZWxmLndpZHRoLCBzZWxmLmhlaWdodCwgOCwgc2VsZi53aWR0aCAqIDQsIGNvbG9yU3BhY2UsIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KTsKKyAgQ0dDb250ZXh0U2V0QWxsb3dzQW50aWFsaWFzaW5nKGNvbnRleHQsIEZBTFNFKTsKKyAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwga0NHSW50ZXJwb2xhdGlvbk5vbmUpOworCisgIGlmICh0b3AgfHwgbGVmdCkgeworICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0TWFrZSgwLCAwLCBzZWxmLndpZHRoLCBzZWxmLmhlaWdodCkpOworICB9CisKKyAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoLWxlZnQsIC10b3AsIHNlbGYud2lkdGgsIHNlbGYuaGVpZ2h0KSwgc2VsZi5pbWFnZSk7CisKKyAgdWludDMyX3QgKnBpeGVsRGF0YSA9ICh1aW50MzJfdCAqKSBtYWxsb2Moc2VsZi53aWR0aCAqIHNlbGYuaGVpZ2h0ICogc2l6ZW9mKHVpbnQzMl90KSk7CisgIG1lbWNweShwaXhlbERhdGEsIENHQml0bWFwQ29udGV4dEdldERhdGEoY29udGV4dCksIHNlbGYud2lkdGggKiBzZWxmLmhlaWdodCAqIHNpemVvZih1aW50MzJfdCkpOworICBDR0NvbnRleHRSZWxlYXNlKGNvbnRleHQpOworICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOworCisgIF9kYXRhID0gKGludDhfdCAqKW1hbGxvYyhzZWxmLndpZHRoICogc2VsZi5oZWlnaHQgKiBzaXplb2YoaW50OF90KSk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxmLmhlaWdodCAqIHNlbGYud2lkdGg7IGkrKykgeworICAgIHVpbnQzMl90IHJnYlBpeGVsPXBpeGVsRGF0YVtpXTsKKworICAgIGZsb2F0IHJlZCA9IChyZ2JQaXhlbD4+MjQpJjB4RkY7CisgICAgZmxvYXQgZ3JlZW4gPSAocmdiUGl4ZWw+PjE2KSYweEZGOworICAgIGZsb2F0IGJsdWUgPSAocmdiUGl4ZWw+PjgpJjB4RkY7CisgICAgZmxvYXQgYWxwaGEgPSAoZmxvYXQpKHJnYlBpeGVsICYgMHhGRikgLyAyNTUuMGY7CisKKyAgICAvLyBJbWFnZUlPIHByZW11bHRpcGxpZXMgYWxsIFBOR3MsIHNvIHdlIGhhdmUgdG8gInVuLXByZW11bHRpcGx5IHRoZW0iOgorICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jb2NvczJkLWlwaG9uZS9pc3N1ZXMvZGV0YWlsP2lkPTY5NyNjMjYKKyAgICByZWQgPSByb3VuZCgocmVkIC8gYWxwaGEpIC0gMC4wMDFmKTsKKyAgICBncmVlbiA9IHJvdW5kKChncmVlbiAvIGFscGhhKSAtIDAuMDAxZik7CisgICAgYmx1ZSA9IHJvdW5kKChibHVlIC8gYWxwaGEpIC0gMC4wMDFmKTsKKworICAgIGlmIChyZWQgPT0gZ3JlZW4gJiYgZ3JlZW4gPT0gYmx1ZSkgeworICAgICAgX2RhdGFbaV0gPSByZWQ7CisgICAgfSBlbHNlIHsKKyAgICAgIF9kYXRhW2ldID0gKDMwNiAqIChpbnQpcmVkICsKKyAgICAgICAgICAgICAgICAgNjAxICogKGludClncmVlbiArCisgICAgICAgICAgICAgICAgIDExNyAqIChpbnQpYmx1ZSArCisgICAgICAgICAgICAgICAgKDB4MjAwKSkgPj4gMTA7IC8vIDB4MjAwID0gMTw8OSwgaGFsZiBhbiBsc2Igb2YgdGhlIHJlc3VsdCB0byBmb3JjZSByb3VuZGluZworICAgIH0KKyAgfQorCisgIGZyZWUocGl4ZWxEYXRhKTsKKworICBfdG9wID0gdG9wOworICBfbGVmdCA9IGxlZnQ7Cit9CisKKy0gKEJPT0wpcm90YXRlU3VwcG9ydGVkIHsKKyAgcmV0dXJuIFlFUzsKK30KKworLSAoWlhMdW1pbmFuY2VTb3VyY2UgKilyb3RhdGVDb3VudGVyQ2xvY2t3aXNlIHsKKyAgZG91YmxlIHJhZGlhbnMgPSAyNzAuMGYgKiBNX1BJIC8gMTgwOworCisjaWYgVEFSR0VUX09TX0VNQkVEREVEIHx8IFRBUkdFVF9JUEhPTkVfU0lNVUxBVE9SCisgIHJhZGlhbnMgPSAtMSAqIHJhZGlhbnM7CisjZW5kaWYKKworICBpbnQgc291cmNlV2lkdGggPSBzZWxmLndpZHRoOworICBpbnQgc291cmNlSGVpZ2h0ID0gc2VsZi5oZWlnaHQ7CisKKyAgQ0dSZWN0IGltZ1JlY3QgPSBDR1JlY3RNYWtlKDAsIDAsIHNvdXJjZVdpZHRoLCBzb3VyY2VIZWlnaHQpOworICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VSb3RhdGlvbihyYWRpYW5zKTsKKyAgQ0dSZWN0IHJvdGF0ZWRSZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oaW1nUmVjdCwgdHJhbnNmb3JtKTsKKworICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVkUmVjdC5zaXplLndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVkUmVjdC5zaXplLmhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQoc2VsZi5pbWFnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0JpdG1hcEFscGhhSW5mb01hc2sgJiBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KTsKKyAgQ0dDb250ZXh0U2V0QWxsb3dzQW50aWFsaWFzaW5nKGNvbnRleHQsIEZBTFNFKTsKKyAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwga0NHSW50ZXJwb2xhdGlvbk5vbmUpOworICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOworCisgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgKyhyb3RhdGVkUmVjdC5zaXplLndpZHRoLzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgKyhyb3RhdGVkUmVjdC5zaXplLmhlaWdodC8yKSk7CisgIENHQ29udGV4dFJvdGF0ZUNUTShjb250ZXh0LCByYWRpYW5zKTsKKworICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0TWFrZSgtaW1nUmVjdC5zaXplLndpZHRoLzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1pbWdSZWN0LnNpemUuaGVpZ2h0LzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ1JlY3Quc2l6ZS53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nUmVjdC5zaXplLmhlaWdodCksCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYWdlKTsKKworICBDR0ltYWdlUmVmIHJvdGF0ZWRJbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQpOworCisgIENGUmVsZWFzZShjb250ZXh0KTsKKworICBaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UgKnJlc3VsdCA9IFtbWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6cm90YXRlZEltYWdlIGxlZnQ6X3RvcCB0b3A6c291cmNlV2lkdGggLSAoX2xlZnQgKyBzZWxmLndpZHRoKSB3aWR0aDpzZWxmLmhlaWdodCBoZWlnaHQ6c2VsZi53aWR0aF07CisKKyAgQ0dJbWFnZVJlbGVhc2Uocm90YXRlZEltYWdlKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L1pYQ2FwdHVyZS5oIGIvWlhpbmdPYmpDL2NsaWVudC9aWENhcHR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTUwOTQxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9aWENhcHR1cmUuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCAiWlhDYXB0dXJlRGVsZWdhdGUuaCIKKworQHByb3RvY29sIFpYUmVhZGVyOworQGNsYXNzIFpYRGVjb2RlSGludHM7CisKKyNpZiAhVEFSR0VUX0lQSE9ORV9TSU1VTEFUT1IKKyNpZiBUQVJHRVRfT1NfRU1CRURERUQKKyNpbmNsdWRlIDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+CisjZGVmaW5lIFpYKHgpIHgKKyNkZWZpbmUgWlhBVih4KSB4CisjZGVmaW5lIFpYQVZDKHgpICx4CisjZGVmaW5lIFpYUVQoeCkKKyNkZWZpbmUgWlhDYXB0dXJlU2Vzc2lvbiBBVkNhcHR1cmVTZXNzaW9uCisjZGVmaW5lIFpYQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyIEFWQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyCisjZGVmaW5lIFpYQ2FwdHVyZURldmljZSBBVkNhcHR1cmVEZXZpY2UKKyNkZWZpbmUgWlhDYXB0dXJlRGV2aWNlSW5wdXQgQVZDYXB0dXJlRGV2aWNlSW5wdXQKKyNkZWZpbmUgWlhDYXB0dXJlVmlkZW9PdXRwdXQgQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0CisjZWxzZQorI2ltcG9ydCA8UVRLaXQvUVRLaXQuaD4KKyNkZWZpbmUgWlgoeCkgeAorI2RlZmluZSBaWEFWKHgpCisjZGVmaW5lIFpYQVZDKHgpCisjZGVmaW5lIFpYUVQoeCkgeAorI2RlZmluZSBaWENhcHR1cmVTZXNzaW9uIFFUQ2FwdHVyZVNlc3Npb24KKyNkZWZpbmUgWlhDYXB0dXJlVmlkZW9QcmV2aWV3TGF5ZXIgUVRDYXB0dXJlTGF5ZXIKKyNkZWZpbmUgWlhDYXB0dXJlRGV2aWNlIFFUQ2FwdHVyZURldmljZQorI2RlZmluZSBaWENhcHR1cmVEZXZpY2VJbnB1dCBRVENhcHR1cmVEZXZpY2VJbnB1dAorI2RlZmluZSBaWENhcHR1cmVWaWRlb091dHB1dCBRVENhcHR1cmVEZWNvbXByZXNzZWRWaWRlb091dHB1dAorI2VuZGlmCisKK0BpbnRlcmZhY2UgWlhDYXB0dXJlCisgIDogTlNPYmplY3QKK1pYKDxDQUFjdGlvbiBaWEFWQyhBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXRTYW1wbGVCdWZmZXJEZWxlZ2F0ZSk+KSB7CisgIFpYKAorICAgIFpYQ2FwdHVyZVNlc3Npb24gKnNlc3Npb247CisgICAgWlhDYXB0dXJlVmlkZW9QcmV2aWV3TGF5ZXIgKmxheWVyOworICAgIFpYQ2FwdHVyZURldmljZSAqY2FwdHVyZV9kZXZpY2U7CisgICAgWlhDYXB0dXJlRGV2aWNlSW5wdXQgKmlucHV0OworICAgIFpYQ2FwdHVyZVZpZGVvT3V0cHV0ICpvdXRwdXQ7CisgICAgKQorICAgIAorICBpbnQgb3JkZXJfaW5fc2tpcDsKKyAgaW50IG9yZGVyX291dF9za2lwOworICBCT09MIHJ1bm5pbmc7CisgIEJPT0wgb25fc2NyZWVuOworICBDQUxheWVyICpsdW1pbmFuY2U7CisgIENBTGF5ZXIgKmJpbmFyeTsKKyAgc2l6ZV90IHdpZHRoOworICBzaXplX3QgaGVpZ2h0OworICBzaXplX3QgcmVwb3J0ZWRfd2lkdGg7CisgIHNpemVfdCByZXBvcnRlZF9oZWlnaHQ7CisgIE5TU3RyaW5nICpjYXB0dXJlVG9GaWxlbmFtZTsKKyAgQk9PTCBoYXJkX3N0b3A7CisgIGludCBjYW1lcmE7CisgIEJPT0wgdG9yY2g7CisgIEJPT0wgbWlycm9yOworICBpbnQgY2FwdHVyZV9kZXZpY2VfaW5kZXg7CisgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgQk9PTCBjYW1lcmFJc1JlYWR5OworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQ8WlhDYXB0dXJlRGVsZWdhdGU+IGRlbGVnYXRlOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpjYXB0dXJlVG9GaWxlbmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFpYQ2FwdHVyZVZpZGVvT3V0cHV0ICpvdXRwdXQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENBTGF5ZXIgKmxheWVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgWlhDYXB0dXJlRGV2aWNlICpjYXB0dXJlRGV2aWNlOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgQk9PTCBtaXJyb3I7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgcnVubmluZzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIGlkPFpYUmVhZGVyPiByZWFkZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBaWERlY29kZUhpbnRzICpoaW50czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIENHRmxvYXQgcm90YXRpb247CisKKy0gKGlkKWluaXQ7CistIChDQUxheWVyICopbHVtaW5hbmNlOworLSAodm9pZClzZXRMdW1pbmFuY2U6KEJPT0wpb25fb2ZmOworLSAoQ0FMYXllciAqKWJpbmFyeTsKKy0gKHZvaWQpc2V0QmluYXJ5OihCT09MKW9uX29mZjsKKy0gKHZvaWQpc3RhcnQ7CisKKy8vIE5lc3QgTGFicyBhZGRpdGlvbjoKKy0gKHZvaWQpc3RvcEFuZEZyZWV6ZU91dHB1dDooQk9PTClmcmVlemVPdXRwdXQ7CisKKy0gKHZvaWQpc3RvcDsKKy0gKHZvaWQpaGFyZF9zdG9wOworLSAodm9pZClvcmRlcl9za2lwOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgaGFzRnJvbnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgaGFzQmFjazsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBoYXNUb3JjaDsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBpbnQgZnJvbnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIGludCBiYWNrOworCitAcHJvcGVydHkgKG5vbmF0b21pYykgaW50IGNhbWVyYTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHRvcmNoOworCitAZW5kCisKKyNlbHNlCisKK0BpbnRlcmZhY2UgWlhDYXB0dXJlIDogTlNPYmplY3QgeworICAgIC8vIE5lc3QgTGFicyBhZGRpdGlvbjoKKyAgICAvLyBQcmV2ZW50cyBjb21waWxhdGlvbiBlcnJvcnMgb24gc2ltdWxhdG9yICAgIAorICAgIEJPT0wgcnVubmluZzsKK30KKworQHByb3BlcnR5IChub25hdG9taWMsd2VhaykgaWQ8WlhDYXB0dXJlRGVsZWdhdGU+IGRlbGVnYXRlOworQHByb3BlcnR5IChub25hdG9taWMsY29weSkgTlNTdHJpbmcgKmNhcHR1cmVUb0ZpbGVuYW1lOworQHByb3BlcnR5IChub25hdG9taWMpIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgdm9pZCAqb3V0cHV0OworQHByb3BlcnR5ICh3ZWFrLCBub25hdG9taWMsIHJlYWRvbmx5KSBDQUxheWVyICpsYXllcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIGlkPFpYUmVhZGVyPiByZWFkZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWERlY29kZUhpbnRzICpoaW50czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIENHRmxvYXQgcm90YXRpb247CisKKy0gKGlkKWluaXQ7CistIChDQUxheWVyICopbHVtaW5hbmNlOworLSAodm9pZClzZXRMdW1pbmFuY2U6KEJPT0wpb25fb2ZmOworLSAoQ0FMYXllciAqKWJpbmFyeTsKKy0gKHZvaWQpc2V0QmluYXJ5OihCT09MKW9uX29mZjsKKy0gKHZvaWQpc3RhcnQ7CistICh2b2lkKXN0b3A7CisKKy8vIE5lc3QgTGFicyBhZGRpdGlvbjoKKy0gKHZvaWQpc3RvcEFuZEZyZWV6ZU91dHB1dDooQk9PTClmcmVlemVPdXRwdXQ7CisKKy0gKHZvaWQpaGFyZF9zdG9wOworLSAodm9pZClvcmRlcl9za2lwOworCitAcHJvcGVydHkgKG5vbmF0b21pYyxyZWFkb25seSkgQk9PTCBoYXNGcm9udDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLHJlYWRvbmx5KSBCT09MIGhhc0JhY2s7CitAcHJvcGVydHkgKG5vbmF0b21pYyxyZWFkb25seSkgQk9PTCBoYXNUb3JjaDsKKworQHByb3BlcnR5IChub25hdG9taWMscmVhZG9ubHkpIGludCBmcm9udDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLHJlYWRvbmx5KSBpbnQgYmFjazsKKworQHByb3BlcnR5IChub25hdG9taWMpIGludCBjYW1lcmE7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCB0b3JjaDsKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgQk9PTCBtaXJyb3I7CisKKy8vIE5lc3QgTGFicyBhZGRpdGlvbjoKKy8vIFByZXZlbnRzIGNvbXBpbGF0aW9uIGVycm9ycyBvbiBzaW11bGF0b3IKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBydW5uaW5nOworCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9aWENhcHR1cmUubSBiL1pYaW5nT2JqQy9jbGllbnQvWlhDYXB0dXJlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiNGQ5MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvWlhDYXB0dXJlLm0KQEAgLTAsMCArMSw3NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJaWENhcHR1cmUuaCIKKworI2lmICFUQVJHRVRfSVBIT05FX1NJTVVMQVRPUgorI2luY2x1ZGUgIlpYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZS5oIgorI2luY2x1ZGUgIlpYQmluYXJ5Qml0bWFwLmgiCisjaW5jbHVkZSAiWlhEZWNvZGVIaW50cy5oIgorI2luY2x1ZGUgIlpYSHlicmlkQmluYXJpemVyLmgiCisjaW5jbHVkZSAiWlhNdWx0aUZvcm1hdFJlYWRlci5oIgorI2luY2x1ZGUgIlpYUmVhZGVyLmgiCisjaW5jbHVkZSAiWlhSZXN1bHQuaCIKKworI2lmIFRBUkdFVF9PU19FTUJFRERFRCB8fCBUQVJHRVRfSVBIT05FX1NJTVVMQVRPUgorI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KKyNkZWZpbmUgWlhDYXB0dXJlT3V0cHV0IEFWQ2FwdHVyZU91dHB1dAorI2RlZmluZSBaWE1lZGlhVHlwZVZpZGVvIEFWTWVkaWFUeXBlVmlkZW8KKyNkZWZpbmUgWlhDYXB0dXJlQ29ubmVjdGlvbiBBVkNhcHR1cmVDb25uZWN0aW9uCisjZWxzZQorI2RlZmluZSBaWENhcHR1cmVPdXRwdXQgUVRDYXB0dXJlT3V0cHV0CisjZGVmaW5lIFpYQ2FwdHVyZUNvbm5lY3Rpb24gUVRDYXB0dXJlQ29ubmVjdGlvbgorI2RlZmluZSBaWE1lZGlhVHlwZVZpZGVvIFFUTWVkaWFUeXBlVmlkZW8KKyNlbmRpZgorCisjaWYgWlhBVigxKSswCitzdGF0aWMgYm9vbCBpc0lQYWQoKTsKKyNlbmRpZgorCisjaWYgVEFSR0VUX09TX0lQSE9ORQorIyAgIGlmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgNjAwMDAKKyMgICAgICAgZGVmaW5lIEtTX0RJU1BBVENIX1JFTEVBU0UocSkgKGRpc3BhdGNoX3JlbGVhc2UocSkpCisjICAgZW5kaWYKKyNlbHNlCisjICAgaWYgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDgwCisjICAgICAgIGRlZmluZSBLU19ESVNQQVRDSF9SRUxFQVNFKHEpIChkaXNwYXRjaF9yZWxlYXNlKHEpKQorIyAgIGVuZGlmCisjZW5kaWYKKyNpZm5kZWYgS1NfRElTUEFUQ0hfUkVMRUFTRQorIyAgIGRlZmluZSBLU19ESVNQQVRDSF9SRUxFQVNFKHEpCisjZW5kaWYKKworQGludGVyZmFjZSBaWENhcHR1cmUgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgX19hdHRyaWJ1dGVfXygoTlNPYmplY3QpKSBkaXNwYXRjaF9xdWV1ZV90IGNhcHR1cmVRdWV1ZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhDYXB0dXJlCisKK0BzeW50aGVzaXplIGRlbGVnYXRlOworQHN5bnRoZXNpemUgY2FwdHVyZVRvRmlsZW5hbWU7CitAc3ludGhlc2l6ZSB0cmFuc2Zvcm07CitAc3ludGhlc2l6ZSByb3RhdGlvbjsKK0BzeW50aGVzaXplIGhpbnRzOworCisvLyBBZGFwdGVkIGZyb20gaHR0cDovL2Jsb2cuY29yaW9saXMuY2gvMjAwOS8wOS8wNC9hcmJpdHJhcnktcm90YXRpb24tb2YtYS1jZ2ltYWdlLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL0phblgyL0NyZWF0ZVJvdGF0ZVdyaXRlQ0dJbWFnZQorLSAoQ0dJbWFnZVJlZiljcmVhdGVSb3RhdGVkSW1hZ2U6KENHSW1hZ2VSZWYpb3JpZ2luYWwgZGVncmVlczooZmxvYXQpZGVncmVlcyBDRl9SRVRVUk5TX1JFVEFJTkVEIHsKKyAgaWYgKGRlZ3JlZXMgPT0gMC4wZikgeworICAgIENHSW1hZ2VSZXRhaW4ob3JpZ2luYWwpOworICAgIHJldHVybiBvcmlnaW5hbDsKKyAgfSBlbHNlIHsKKyAgICBkb3VibGUgcmFkaWFucyA9IGRlZ3JlZXMgKiBNX1BJIC8gMTgwOworCisjaWYgVEFSR0VUX09TX0VNQkVEREVEIHx8IFRBUkdFVF9JUEhPTkVfU0lNVUxBVE9SCisgICAgcmFkaWFucyA9IC0xICogcmFkaWFuczsKKyNlbmRpZgorCisgICAgc2l6ZV90IF93aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChvcmlnaW5hbCk7CisgICAgc2l6ZV90IF9oZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KG9yaWdpbmFsKTsKKworICAgIENHUmVjdCBpbWdSZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLCBfd2lkdGgsIF9oZWlnaHQpOworICAgIENHQWZmaW5lVHJhbnNmb3JtIF90cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VSb3RhdGlvbihyYWRpYW5zKTsKKyAgICBDR1JlY3Qgcm90YXRlZFJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShpbWdSZWN0LCBfdHJhbnNmb3JtKTsKKworICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVkUmVjdC5zaXplLndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZWRSZWN0LnNpemUuaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHSW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KG9yaWdpbmFsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHQml0bWFwQWxwaGFJbmZvTWFzayAmIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpOworICAgIENHQ29udGV4dFNldEFsbG93c0FudGlhbGlhc2luZyhjb250ZXh0LCBGQUxTRSk7CisgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwga0NHSW50ZXJwb2xhdGlvbk5vbmUpOworICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7CisKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyhyb3RhdGVkUmVjdC5zaXplLndpZHRoLzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICArKHJvdGF0ZWRSZWN0LnNpemUuaGVpZ2h0LzIpKTsKKyAgICBDR0NvbnRleHRSb3RhdGVDVE0oY29udGV4dCwgcmFkaWFucyk7CisKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0TWFrZSgtaW1nUmVjdC5zaXplLndpZHRoLzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWltZ1JlY3Quc2l6ZS5oZWlnaHQvMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdSZWN0LnNpemUud2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nUmVjdC5zaXplLmhlaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsKTsKKworICAgIENHSW1hZ2VSZWYgcm90YXRlZEltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCk7CisgICAgQ0ZSZWxlYXNlKGNvbnRleHQpOworCisgICAgcmV0dXJuIHJvdGF0ZWRJbWFnZTsKKyAgfQorfQorCistIChaWENhcHR1cmUgKilpbml0IHsKKyAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgeworICAgIG9uX3NjcmVlbiA9IHJ1bm5pbmcgPSBOTzsKKyAgICByZXBvcnRlZF93aWR0aCA9IDA7CisgICAgcmVwb3J0ZWRfaGVpZ2h0ID0gMDsKKyAgICB3aWR0aCA9IDE5MjA7CisgICAgaGVpZ2h0ID0gMTA4MDsKKyAgICBoYXJkX3N0b3AgPSBmYWxzZTsKKyAgICBjYXB0dXJlX2RldmljZSA9IDA7CisgICAgY2FwdHVyZV9kZXZpY2VfaW5kZXggPSAtMTsKKyAgICBvcmRlcl9pbl9za2lwID0gMDsKKyAgICBvcmRlcl9vdXRfc2tpcCA9IDA7CisgICAgdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eTsKKyAgICByb3RhdGlvbiA9IDAuMGY7CisgICAgWlhRVCh7CisgICAgICAgIHRyYW5zZm9ybS5hID0gLTE7CisgICAgICB9KTsKKyAgICBzZWxmLnJlYWRlciA9IFtaWE11bHRpRm9ybWF0UmVhZGVyIHJlYWRlcl07CisgICAgc2VsZi5oaW50cyA9IFtaWERlY29kZUhpbnRzIGhpbnRzXTsKKyAgICBfY2FwdHVyZVF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uenhpbmcuY2FwdHVyZVF1ZXVlIiwgTlVMTCk7CisgIH0KKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJPT0wpcnVubmluZyB7cmV0dXJuIHJ1bm5pbmc7fQorCistIChCT09MKW1pcnJvciB7CisgIHJldHVybiBtaXJyb3I7Cit9CisKKy0gKHZvaWQpc2V0TWlycm9yOihCT09MKW1pcnJvcl8geworICBpZiAobWlycm9yICE9IG1pcnJvcl8pIHsKKyAgICBtaXJyb3IgPSBtaXJyb3JfOworICAgIGlmIChsYXllcikgeworICAgICAgdHJhbnNmb3JtLmEgPSAtdHJhbnNmb3JtLmE7CisgICAgICBbbGF5ZXIgc2V0QWZmaW5lVHJhbnNmb3JtOnRyYW5zZm9ybV07CisgICAgfQorICB9Cit9CisKKy0gKHZvaWQpb3JkZXJfc2tpcCB7CisgIG9yZGVyX291dF9za2lwID0gb3JkZXJfaW5fc2tpcCA9IDE7Cit9CisKKy0gKFpYQ2FwdHVyZURldmljZSAqKWRldmljZSB7CisgIGlmIChjYXB0dXJlX2RldmljZSkgeworICAgIHJldHVybiBjYXB0dXJlX2RldmljZTsKKyAgfQorCisgIFpYQ2FwdHVyZURldmljZSAqenhkID0gbmlsOworCisjaWYgWlhBVigxKSswCisgIE5TQXJyYXkgKmRldmljZXMgPSAKKyAgICBbWlhDYXB0dXJlRGV2aWNlCisgICAgICAgIFpYQVYoZGV2aWNlc1dpdGhNZWRpYVR5cGU6KQorICAgICAgWlhRVChpbnB1dERldmljZXNXaXRoTWVkaWFUeXBlOikgWlhNZWRpYVR5cGVWaWRlb107CisKKyAgaWYgKFtkZXZpY2VzIGNvdW50XSA+IDApIHsKKyAgICBpZiAoY2FwdHVyZV9kZXZpY2VfaW5kZXggPT0gLTEpIHsKKyAgICAgIEFWQ2FwdHVyZURldmljZVBvc2l0aW9uIHBvc2l0aW9uID0gQVZDYXB0dXJlRGV2aWNlUG9zaXRpb25CYWNrOworICAgICAgaWYgKGNhbWVyYSA9PSBzZWxmLmZyb250KSB7CisgICAgICAgIHBvc2l0aW9uID0gQVZDYXB0dXJlRGV2aWNlUG9zaXRpb25Gcm9udDsKKyAgICAgIH0KKworICAgICAgZm9yKHVuc2lnbmVkIGludCBpPTA7IGkgPCBbZGV2aWNlcyBjb3VudF07ICsraSkgeworICAgICAgICBaWENhcHR1cmVEZXZpY2UgKmRldiA9IFtkZXZpY2VzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIGlmIChkZXYucG9zaXRpb24gPT0gcG9zaXRpb24pIHsKKyAgICAgICAgICBjYXB0dXJlX2RldmljZV9pbmRleCA9IGk7CisgICAgICAgICAgenhkID0gZGV2OworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghenhkICYmIGNhcHR1cmVfZGV2aWNlX2luZGV4ICE9IC0xKSB7CisgICAgICB6eGQgPSBbZGV2aWNlcyBvYmplY3RBdEluZGV4OmNhcHR1cmVfZGV2aWNlX2luZGV4XTsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIGlmICghenhkKSB7CisgICAgenhkID0gCisgICAgICBbWlhDYXB0dXJlRGV2aWNlCisgICAgICAgICAgWlhBVihkZWZhdWx0RGV2aWNlV2l0aE1lZGlhVHlwZTopCisgICAgICAgIFpYUVQoZGVmYXVsdElucHV0RGV2aWNlV2l0aE1lZGlhVHlwZTopIFpYTWVkaWFUeXBlVmlkZW9dOworICB9CisKKyAgY2FwdHVyZV9kZXZpY2UgPSB6eGQ7CisKKyAgcmV0dXJuIHp4ZDsKK30KKworLSAoWlhDYXB0dXJlRGV2aWNlICopY2FwdHVyZURldmljZSB7CisgIHJldHVybiBjYXB0dXJlX2RldmljZTsKK30KKworLSAodm9pZClzZXRDYXB0dXJlRGV2aWNlOihaWENhcHR1cmVEZXZpY2UgKilkZXZpY2UgeworICBpZiAoZGV2aWNlID09IGNhcHR1cmVfZGV2aWNlKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYoY2FwdHVyZV9kZXZpY2UpIHsKKyAgICBaWFFUKHsKKyAgICAgIGlmIChbY2FwdHVyZV9kZXZpY2UgaXNPcGVuXSkgeworICAgICAgICBbY2FwdHVyZV9kZXZpY2UgY2xvc2VdOworICAgICAgfX0pOworICB9CisKKyAgY2FwdHVyZV9kZXZpY2UgPSBkZXZpY2U7Cit9CisKKy0gKHZvaWQpcmVwbGFjZUlucHV0IHsKKyAgaWYgKFtzZXNzaW9uIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYmVnaW5Db25maWd1cmF0aW9uKV0pIHsKKyAgICBbc2Vzc2lvbiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGJlZ2luQ29uZmlndXJhdGlvbildOworICB9CisKKyAgaWYgKHNlc3Npb24gJiYgaW5wdXQpIHsKKyAgICBbc2Vzc2lvbiByZW1vdmVJbnB1dDppbnB1dF07CisgICAgaW5wdXQgPSBuaWw7CisgIH0KKworICBaWENhcHR1cmVEZXZpY2UgKnp4ZCA9IFtzZWxmIGRldmljZV07CisgIFpYUVQoW3p4ZCBvcGVuOm5pbF0pOworCisgIGlmICh6eGQpIHsKKyAgICBpbnB1dCA9CisgICAgICBbWlhDYXB0dXJlRGV2aWNlSW5wdXQgZGV2aWNlSW5wdXRXaXRoRGV2aWNlOnp4ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWlhBVihlcnJvcjpuaWwpXTsKKyAgfQorICAKKyAgaWYgKGlucHV0KSB7CisgICAgWlhBVih7CisgICAgICBOU1N0cmluZyAqcHJlc2V0ID0gMDsKKyAgICAgIGlmICghcHJlc2V0ICYmCisgICAgICAgICAgTlNDbGFzc0Zyb21TdHJpbmcoQCJOU09yZGVyZWRTZXQiKSAmJiAvLyBQcm94eSBmb3IgImlzIHRoaXMgaU9TIDUiIC4uLgorICAgICAgICAgIFtVSVNjcmVlbiBtYWluU2NyZWVuXS5zY2FsZSA+IDEgJiYKKyAgICAgICAgICBpc0lQYWQoKSAmJgorICAgICAgICAgICZBVkNhcHR1cmVTZXNzaW9uUHJlc2V0aUZyYW1lOTYweDU0MCAhPSBuaWwgJiYKKyAgICAgICAgICBbenhkIHN1cHBvcnRzQVZDYXB0dXJlU2Vzc2lvblByZXNldDpBVkNhcHR1cmVTZXNzaW9uUHJlc2V0aUZyYW1lOTYweDU0MF0pIHsKKyAgICAgICAgLy8gTlNMb2coQCI5NjAiKTsKKyAgICAgICAgcHJlc2V0ID0gQVZDYXB0dXJlU2Vzc2lvblByZXNldGlGcmFtZTk2MHg1NDA7CisgICAgICB9CisgICAgICBpZiAoIXByZXNldCkgeworICAgICAgICAvLyBOU0xvZyhAIk1FRCIpOworICAgICAgICBwcmVzZXQgPSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TWVkaXVtOworICAgICAgfQorICAgICAgc2Vzc2lvbi5zZXNzaW9uUHJlc2V0ID0gcHJlc2V0OworICAgIH0pOworICAgIFtzZXNzaW9uIGFkZElucHV0OmlucHV0IFpYUVQoZXJyb3I6bmlsKV07CisgIH0KKworICBpZiAoW3Nlc3Npb24gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb21taXRDb25maWd1cmF0aW9uKV0pIHsKKyAgICBbc2Vzc2lvbiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1pdENvbmZpZ3VyYXRpb24pXTsKKyAgfQorfQorCistIChaWENhcHR1cmVTZXNzaW9uICopc2Vzc2lvbiB7CisgIGlmIChzZXNzaW9uID09IDApIHsKKyAgICBzZXNzaW9uID0gW1taWENhcHR1cmVTZXNzaW9uIGFsbG9jXSBpbml0XTsKKyAgICBbc2VsZiByZXBsYWNlSW5wdXRdOworICB9CisgIHJldHVybiBzZXNzaW9uOworfQorCistICh2b2lkKXN0b3BBbmRGcmVlemVPdXRwdXQ6KEJPT0wpZnJlZXplT3V0cHV0IHsKKyAgLy8gTlNMb2coQCJzdG9wIik7CisKKyAgaWYgKCFydW5uaW5nKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKHRydWUgWlhBVigmJiBzZWxmLnNlc3Npb24ucnVubmluZykpIHsKKyAgICAvLyBOU0xvZyhAInN0b3AgcnVubmluZyIpOworICAgICAgaWYgKCFmcmVlemVPdXRwdXQpCisgICAgICAgIFtzZWxmLmxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57CisgICAgICBbc2VsZi5zZXNzaW9uIHN0b3BSdW5uaW5nXTsKKyAgICB9KTsKKyAgfSBlbHNlIHsKKyAgICAvLyBOU0xvZyhAImFscmVhZHkgc3RvcHBlZCIpOworICB9CisgIHJ1bm5pbmcgPSBmYWxzZTsKK30KKworLSAodm9pZClzdG9wIHsKKyAgW3NlbGYgc3RvcEFuZEZyZWV6ZU91dHB1dDpOT107Cit9CisKKy0gKHZvaWQpc2V0T3V0cHV0QXR0cmlidXRlcyB7CisgICAgTlNTdHJpbmcgKmtleSA9IChOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5OworICAgIE5TTnVtYmVyICp2YWx1ZSA9IFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6a0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQV07CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OnZhbHVlIGZvcktleTprZXldOworICAgIFpYUVQoeworICAgICAga2V5ID0gKE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJXaWR0aEtleTsKKyAgICAgIHZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZExvbmc6d2lkdGhdOworICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OnZhbHVlIGZvcktleTprZXldOyAKKyAgICAgIGtleSA9IChOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OworICAgICAgdmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkTG9uZzpoZWlnaHRdOworICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OnZhbHVlIGZvcktleTprZXldOworICAgIH0pOworICAgIFtvdXRwdXQgWlhRVChzZXRQaXhlbEJ1ZmZlckF0dHJpYnV0ZXM6KVpYQVYoc2V0VmlkZW9TZXR0aW5nczopYXR0cmlidXRlc107Cit9CisKKy0gKFpYQ2FwdHVyZVZpZGVvT3V0cHV0ICopb3V0cHV0IHsKKyAgaWYgKCFvdXRwdXQpIHsKKyAgICBvdXRwdXQgPSBbW1pYQ2FwdHVyZVZpZGVvT3V0cHV0IGFsbG9jXSBpbml0XTsKKyAgICBbc2VsZiBzZXRPdXRwdXRBdHRyaWJ1dGVzXTsKKyAgICBbb3V0cHV0IFpYUVQoc2V0QXV0b21hdGljYWxseURyb3BzTGF0ZVZpZGVvRnJhbWVzOikKKyAgICAgICAgICAgICAgICBaWEFWKHNldEFsd2F5c0Rpc2NhcmRzTGF0ZVZpZGVvRnJhbWVzOilZRVNdOworCisgICAgW291dHB1dCBaWFFUKHNldERlbGVnYXRlOilaWEFWKHNldFNhbXBsZUJ1ZmZlckRlbGVnYXRlOilzZWxmCisgICAgICAgICAgICAgICAgICBaWEFWKHF1ZXVlOl9jYXB0dXJlUXVldWUpXTsKKworICAgIFtzZWxmLnNlc3Npb24gYWRkT3V0cHV0Om91dHB1dCBaWFFUKGVycm9yOm5pbCldOworICB9CisgIHJldHVybiBvdXRwdXQ7Cit9CisKKy0gKHZvaWQpc3RhcnQgeworICAvLyBOU0xvZyhAInN0YXJ0ICVAICVkICVAICVAIiwgc2VsZi5zZXNzaW9uLCBydW5uaW5nLCBvdXRwdXQsIGRlbGVnYXRlKTsKKworICBpZiAoaGFyZF9zdG9wKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKGRlbGVnYXRlIHx8IGx1bWluYW5jZSB8fCBiaW5hcnkpIHsKKyAgICAvLyBmb3Igc2lkZSBlZmZlY3RzCisgICAgW3NlbGYgb3V0cHV0XTsKKyAgfQorICAgIAorICBpZiAoZmFsc2UgWlhBVih8fCBzZWxmLnNlc3Npb24ucnVubmluZykpIHsKKyAgICAvLyBOU0xvZyhAImFscmVhZHkgcnVubmluZyIpOworICB9IGVsc2UgeworCisgICAgc3RhdGljIGludCBpID0gMDsKKyAgICBpZiAoKytpID09IC0yKSB7CisgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIC8vIE5TTG9nKEAic3RhcnQgcnVubmluZyIpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57CisgICAgICBbc2VsZi5zZXNzaW9uIHN0YXJ0UnVubmluZ107CisgICAgfSk7CisgIH0KKyAgcnVubmluZyA9IHRydWU7Cit9CisKKy0gKHZvaWQpc3RhcnRfc3RvcCB7CisgIC8vIE5TTG9nKEAic3MgJWQgJUAgJWQgJUAgJUAgJUAiLCBydW5uaW5nLCBkZWxlZ2F0ZSwgb25fc2NyZWVuLCBvdXRwdXQsIGx1bWluYW5jZUxheWVyLCBiaW5hcnkpOworICBpZiAoKCFydW5uaW5nICYmIChkZWxlZ2F0ZSB8fCBvbl9zY3JlZW4pKSB8fAorICAgICAgKCFvdXRwdXQgJiYKKyAgICAgICAoZGVsZWdhdGUgfHwKKyAgICAgICAgKG9uX3NjcmVlbiAmJiAobHVtaW5hbmNlIHx8IGJpbmFyeSkpKSkpIHsKKyAgICBbc2VsZiBzdGFydF07CisgIH0KKyAgaWYgKHJ1bm5pbmcgJiYgIWRlbGVnYXRlICYmICFvbl9zY3JlZW4pIHsKKyAgICBbc2VsZiBzdG9wXTsKKyAgfQorfQorCistICh2b2lkKXNldERlbGVnYXRlOihpZDxaWENhcHR1cmVEZWxlZ2F0ZT4pX2RlbGVnYXRlIHsKKyAgZGVsZWdhdGUgPSBfZGVsZWdhdGU7CisgIGlmIChkZWxlZ2F0ZSkgeworICAgIGhhcmRfc3RvcCA9IGZhbHNlOworICB9CisgIFtzZWxmIHN0YXJ0X3N0b3BdOworfQorCistICh2b2lkKWhhcmRfc3RvcCB7CisgIGhhcmRfc3RvcCA9IHRydWU7CisgIGlmIChydW5uaW5nKSB7CisgICAgW3NlbGYgc3RvcF07CisgIH0KK30KKworLSAodm9pZClzZXRMdW1pbmFuY2U6KEJPT0wpb24geworICBpZiAob24gJiYgIWx1bWluYW5jZSkgeworICAgIGx1bWluYW5jZSA9IFtDQUxheWVyIGxheWVyXTsKKyAgfSBlbHNlIGlmICghb24gJiYgbHVtaW5hbmNlKSB7CisgICAgbHVtaW5hbmNlID0gbmlsOworICB9Cit9CisKKy0gKENBTGF5ZXIgKilsdW1pbmFuY2UgeworICByZXR1cm4gbHVtaW5hbmNlOworfQorCistICh2b2lkKXNldEJpbmFyeTooQk9PTClvbiB7CisgIGlmIChvbiAmJiAhYmluYXJ5KSB7CisgICAgYmluYXJ5ID0gW0NBTGF5ZXIgbGF5ZXJdOworICB9IGVsc2UgaWYgKCFvbiAmJiBiaW5hcnkpIHsKKyAgICBiaW5hcnkgPSBuaWw7CisgIH0KK30KKworLSAoQ0FMYXllciAqKWJpbmFyeSB7CisgIHJldHVybiBiaW5hcnk7Cit9CisKKy0gKENBTGF5ZXIgKilsYXllciB7CisgIGlmICghbGF5ZXIpIHsKKyAgICBsYXllciA9IFtbWlhDYXB0dXJlVmlkZW9QcmV2aWV3TGF5ZXIgYWxsb2NdIGluaXRXaXRoU2Vzc2lvbjpzZWxmLnNlc3Npb25dOworCisgICAgWlhBVihsYXllci52aWRlb0dyYXZpdHkgPSBBVkxheWVyVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KTsKKyAgICBaWEFWKGxheWVyLnZpZGVvR3Jhdml0eSA9IEFWTGF5ZXJWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKTsKKyAgICAKKyAgICBbbGF5ZXIgc2V0QWZmaW5lVHJhbnNmb3JtOnRyYW5zZm9ybV07CisgICAgbGF5ZXIuZGVsZWdhdGUgPSBzZWxmOworCisgICAgWlhRVCh7CisgICAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIHBzbjsKKyAgICAgIEdldEN1cnJlbnRQcm9jZXNzKCZwc24pOworICAgICAgVHJhbnNmb3JtUHJvY2Vzc1R5cGUoJnBzbiwgMSk7CisgICAgfSk7CisgIH0KKyAgcmV0dXJuIGxheWVyOworfQorCistICh2b2lkKXJ1bkFjdGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkKKyAgICAgICAgICAgICAgICAgb2JqZWN0OihpZClhbk9iamVjdAorICAgICAgICAgICAgICBhcmd1bWVudHM6KE5TRGljdGlvbmFyeSAqKWRpY3QgeworICAvLyBOU0xvZyhAIiByQUZLICVAICVAICVAIiwga2V5LCBhbk9iamVjdCwgZGljdCk7IAorICAodm9pZClhbk9iamVjdDsKKyAgKHZvaWQpZGljdDsKKyAgaWYgKFtrZXkgaXNFcXVhbFRvU3RyaW5nOmtDQU9uT3JkZXJJbl0pIHsKKyAgICAKKyAgICBpZiAob3JkZXJfaW5fc2tpcCkgeworICAgICAgLS1vcmRlcl9pbl9za2lwOworICAgICAgLy8gTlNMb2coQCJvcmRlciBpbiBza2lwIik7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gTlNMb2coQCJvcmRlciBpbiIpOworCisgICAgb25fc2NyZWVuID0gdHJ1ZTsKKyAgICBpZiAobHVtaW5hbmNlICYmIGx1bWluYW5jZS5zdXBlcmxheWVyICE9IGxheWVyKSB7CisgICAgICAvLyBbbGF5ZXIgYWRkU3VibGF5ZXI6bHVtaW5hbmNlXTsKKyAgICB9CisgICAgaWYgKGJpbmFyeSAmJiBiaW5hcnkuc3VwZXJsYXllciAhPSBsYXllcikgeworICAgICAgLy8gW2xheWVyIGFkZFN1YmxheWVyOmJpbmFyeV07CisgICAgfQorICAgIFtzZWxmIHN0YXJ0X3N0b3BdOworICB9IGVsc2UgaWYgKFtrZXkgaXNFcXVhbFRvU3RyaW5nOmtDQU9uT3JkZXJPdXRdKSB7CisgICAgaWYgKG9yZGVyX291dF9za2lwKSB7CisgICAgICAtLW9yZGVyX291dF9za2lwOworICAgICAgLy8gTlNMb2coQCJvcmRlciBvdXQgc2tpcCIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG9uX3NjcmVlbiA9IGZhbHNlOworICAgIC8vIE5TTG9nKEAib3JkZXIgb3V0Iik7CisgICAgW3NlbGYgc3RhcnRfc3RvcF07CisgIH0KK30KKworLSAoaWQ8Q0FBY3Rpb24+KWFjdGlvbkZvckxheWVyOihDQUxheWVyICopX2xheWVyIGZvcktleTooTlNTdHJpbmcgKilldmVudCB7CisgICh2b2lkKV9sYXllcjsKKworICAvLyBOU0xvZyhAImxheWVyIGV2ZW50ICVAIiwgZXZlbnQpOworCisgIC8vIG5ldmVyIGFuaW1hdGUKKyAgW0NBVHJhbnNhY3Rpb24gc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDowLjBmXQorICAgICAgICAgICAgICAgICAgIGZvcktleTprQ0FUcmFuc2FjdGlvbkFuaW1hdGlvbkR1cmF0aW9uXTsKKworICAvLyBOU0xvZyhAImFmbCAlQCAlQCIsIF9sYXllciwgZXZlbnQpOworICBpZiAoW2V2ZW50IGlzRXF1YWxUb1N0cmluZzprQ0FPbk9yZGVySW5dCisgICAgICB8fCBbZXZlbnQgaXNFcXVhbFRvU3RyaW5nOmtDQU9uT3JkZXJPdXRdCisgICAgICAvLyB8fCAoW2V2ZW50IGlzRXF1YWxUb1N0cmluZzpAImJvdW5kcyJdICYmIChiaW5hcnkgfHwgbHVtaW5hbmNlKSkKKyAgICAgIC8vIHx8IChbZXZlbnQgaXNFcXVhbFRvU3RyaW5nOkAib25MYXlvdXQiXSAmJiAoYmluYXJ5IHx8IGx1bWluYW5jZSkpCisgICAgKSB7CisgICAgcmV0dXJuIHNlbGY7CisgIH0gZWxzZSBpZiAoW2V2ZW50IGlzRXF1YWxUb1N0cmluZzpAImNvbnRlbnRzIl0gKSB7CisgIH0gZWxzZSBpZiAoW2V2ZW50IGlzRXF1YWxUb1N0cmluZzpAInN1YmxheWVycyJdICkgeworICB9IGVsc2UgaWYgKFtldmVudCBpc0VxdWFsVG9TdHJpbmc6QCJvbkxheW91dCJdICkgeworICB9IGVsc2UgaWYgKFtldmVudCBpc0VxdWFsVG9TdHJpbmc6QCJwb3NpdGlvbiJdICkgeworICB9IGVsc2UgaWYgKFtldmVudCBpc0VxdWFsVG9TdHJpbmc6QCJib3VuZHMiXSApIHsKKyAgfSBlbHNlIGlmIChbZXZlbnQgaXNFcXVhbFRvU3RyaW5nOkAibGF5b3V0TWFuYWdlciJdICkgeworICB9IGVsc2UgaWYgKFtldmVudCBpc0VxdWFsVG9TdHJpbmc6QCJ0cmFuc2Zvcm0iXSApIHsKKyAgfSBlbHNlIHsKKyAgICBOU0xvZyhAImFmbCAlQCAlQCIsIF9sYXllciwgZXZlbnQpOworICB9CisgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpY2FwdHVyZU91dHB1dDooWlhDYXB0dXJlT3V0cHV0ICopY2FwdHVyZU91dHB1dAorWlhRVChkaWRPdXRwdXRWaWRlb0ZyYW1lOihDVkltYWdlQnVmZmVyUmVmKXZpZGVvRnJhbWUKKyAgICAgd2l0aFNhbXBsZUJ1ZmZlcjooUVRTYW1wbGVCdWZmZXIgKilzYW1wbGVCdWZmZXIpCitaWEFWKGRpZE91dHB1dFNhbXBsZUJ1ZmZlcjooQ01TYW1wbGVCdWZmZXJSZWYpc2FtcGxlQnVmZmVyKQorICAgICAgIGZyb21Db25uZWN0aW9uOihaWENhcHR1cmVDb25uZWN0aW9uICopY29ubmVjdGlvbiB7CisgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgIGlmICghY2FtZXJhSXNSZWFkeSkKKyAgICB7CisgICAgICBjYW1lcmFJc1JlYWR5ID0gWUVTOworICAgICAgaWYgKFtzZWxmLmRlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY2FwdHVyZUNhbWVyYUlzUmVhZHk6KV0pCisgICAgICB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgICAgW3NlbGYuZGVsZWdhdGUgY2FwdHVyZUNhbWVyYUlzUmVhZHk6c2VsZl07CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0KKyAgICAgICAgICAgICAKKyAgICBpZiAoIWNhcHR1cmVUb0ZpbGVuYW1lICYmICFsdW1pbmFuY2UgJiYgIWJpbmFyeSAmJiAhZGVsZWdhdGUpIHsKKyAgICAgIC8vIE5TTG9nKEAic2tpcHBpbmcgY2FwdHVyZSIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5TTG9nKEAicmVjZWl2ZWQgZnJhbWUiKTsKKworICAgIFpYQVYoQ1ZJbWFnZUJ1ZmZlclJlZiB2aWRlb0ZyYW1lID0gQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGVCdWZmZXIpKTsKKworICAgIC8vIE5TTG9nKEAiJWxkICVsZCIsIENWUGl4ZWxCdWZmZXJHZXRXaWR0aCh2aWRlb0ZyYW1lKSwgQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodCh2aWRlb0ZyYW1lKSk7CisgICAgLy8gTlNMb2coQCJkZWxlZ2F0ZSAlQCIsIGRlbGVnYXRlKTsKKworICAgIFpYUVQoeworICAgIGlmICghcmVwb3J0ZWRfd2lkdGggfHwgIXJlcG9ydGVkX2hlaWdodCkgeworICAgICAgTlNTaXplIHNpemUgPSAKKyAgICAgICAgW1tbW2lucHV0LmRldmljZS5mb3JtYXREZXNjcmlwdGlvbnMgb2JqZWN0QXRJbmRleDowXQorICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRpb25BdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6QCJ2aWRlb0VuY29kZWRQaXhlbHNTaXplIl0gc2l6ZVZhbHVlXTsKKyAgICAgIHdpZHRoID0gc2l6ZS53aWR0aDsKKyAgICAgIGhlaWdodCA9IHNpemUuaGVpZ2h0OworICAgICAgLy8gTlNMb2coQCJyZXBvcnRlZDogJWYgeCAlZiIsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTsKKyAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpAc2VsZWN0b3Ioc2V0T3V0cHV0QXR0cmlidXRlcykgd2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9uZTpOT107CisgICAgICByZXBvcnRlZF93aWR0aCA9IHNpemUud2lkdGg7CisgICAgICByZXBvcnRlZF9oZWlnaHQgPSBzaXplLmhlaWdodDsKKyAgICAgIGlmIChbZGVsZWdhdGUgIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY2FwdHVyZVNpemU6d2lkdGg6aGVpZ2h0OildKSB7CisgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgICAgICAgW2RlbGVnYXRlIGNhcHR1cmVTaXplOnNlbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2l6ZS53aWR0aF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2l6ZS5oZWlnaHRdXTsKKyAgICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9fSk7CisKKyAgICAodm9pZClzYW1wbGVCdWZmZXI7CisgICAgKHZvaWQpY2FwdHVyZU91dHB1dDsKKyAgICAodm9pZCljb25uZWN0aW9uOworCisjaWYgIVRBUkdFVF9PU19FTUJFRERFRAorICAgIC8vIFRoZSByb3V0aW5lcyBkb24ndCBleGlzdCBpbiBpT1MuIFRoZXJlIGFyZSBhbHRlcm5hdGl2ZXMsIGJ1dCBhIGdvb2QKKyAgICAvLyBzb2x1dGlvbiB3b3VsZCBoYXZlIHRvIGZpZ3VyZSBvdXQgYSByZWFzb25hYmxlIHBhdGggYW5kIG1pZ2h0IGJlCisgICAgLy8gYmV0dGVyIGFzIGEgcG9zdCB0byB1cmwKKworICAgIGlmIChjYXB0dXJlVG9GaWxlbmFtZSkgeworICAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IAorICAgICAgICBbWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlIGNyZWF0ZUltYWdlRnJvbUJ1ZmZlcjp2aWRlb0ZyYW1lXTsKKyAgICAgIE5TVVJMICp1cmwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmNhcHR1cmVUb0ZpbGVuYW1lXTsKKyAgICAgIENHSW1hZ2VEZXN0aW5hdGlvblJlZiBkZXN0ID0KKyAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aFVSTCgoX19icmlkZ2UgQ0ZVUkxSZWYpdXJsLCBrVVRUeXBlUE5HLCAxLCBuaWwpOworICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdCwgaW1hZ2UsIG5pbCk7CisgICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0KTsKKyAgICAgIENHSW1hZ2VSZWxlYXNlKGltYWdlKTsKKyAgICAgIENGUmVsZWFzZShkZXN0KTsKKyAgICAgIHNlbGYuY2FwdHVyZVRvRmlsZW5hbWUgPSBuaWw7CisgICAgfQorI2VuZGlmCisKKyAgICBDR0ltYWdlUmVmIHZpZGVvRnJhbWVJbWFnZSA9IFtaWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UgY3JlYXRlSW1hZ2VGcm9tQnVmZmVyOnZpZGVvRnJhbWVdOworICAgIENHSW1hZ2VSZWYgcm90YXRlZEltYWdlID0gW3NlbGYgY3JlYXRlUm90YXRlZEltYWdlOnZpZGVvRnJhbWVJbWFnZSBkZWdyZWVzOnJvdGF0aW9uXTsKKyAgICBDR0ltYWdlUmVsZWFzZSh2aWRlb0ZyYW1lSW1hZ2UpOworCisgICAgWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlICpzb3VyY2UgPSBbW1pYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOnJvdGF0ZWRJbWFnZV07CisgICAgQ0dJbWFnZVJlbGVhc2Uocm90YXRlZEltYWdlKTsKKworICAgIGlmIChsdW1pbmFuY2UpIHsKKyAgICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBzb3VyY2UuaW1hZ2U7CisgICAgICBDR0ltYWdlUmV0YWluKGltYWdlKTsKKyAgICAgIGRpc3BhdGNoX2FmdGVyKGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIDApLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICAgIGx1bWluYW5jZS5jb250ZW50cyA9IChfX2JyaWRnZSBpZClpbWFnZTsKKyAgICAgICAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGlmIChiaW5hcnkgfHwgZGVsZWdhdGUpIHsKKyAgICAgIFpYSHlicmlkQmluYXJpemVyICpiaW5hcml6ZXIgPSBbW1pYSHlicmlkQmluYXJpemVyIGFsbG9jXSBpbml0V2l0aFNvdXJjZTpzb3VyY2VdOworCisgICAgICBpZiAoYmluYXJ5KSB7CisgICAgICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBbYmluYXJpemVyIGNyZWF0ZUltYWdlXTsKKyAgICAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMCksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgICAgYmluYXJ5LmNvbnRlbnRzID0gKF9fYnJpZGdlIGlkKWltYWdlOworICAgICAgICAgIENHSW1hZ2VSZWxlYXNlKGltYWdlKTsKKyAgICAgICAgfSk7CisgICAgICB9CisKKyAgICAgIGlmIChkZWxlZ2F0ZSkgeworICAgICAgICBaWEJpbmFyeUJpdG1hcCAqYml0bWFwID0gW1taWEJpbmFyeUJpdG1hcCBhbGxvY10gaW5pdFdpdGhCaW5hcml6ZXI6YmluYXJpemVyXTsKKworICAgICAgICBOU0Vycm9yICplcnJvcjsKKyAgICAgICAgWlhSZXN1bHQgKnJlc3VsdCA9IFtzZWxmLnJlYWRlciBkZWNvZGU6Yml0bWFwIGhpbnRzOmhpbnRzIGVycm9yOiZlcnJvcl07CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICAgICAgW2RlbGVnYXRlIGNhcHR1cmVSZXN1bHQ6c2VsZiByZXN1bHQ6cmVzdWx0XTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCistIChCT09MKWhhc0Zyb250IHsKKyAgTlNBcnJheSAqZGV2aWNlcyA9IAorICAgIFtaWENhcHR1cmVEZXZpY2UKKyAgICAgICAgWlhBVihkZXZpY2VzV2l0aE1lZGlhVHlwZTopCisgICAgICBaWFFUKGlucHV0RGV2aWNlc1dpdGhNZWRpYVR5cGU6KSBaWE1lZGlhVHlwZVZpZGVvXTsKKyAgcmV0dXJuIFtkZXZpY2VzIGNvdW50XSA+IDE7Cit9CisKKy0gKEJPT0wpaGFzQmFjayB7CisgIE5TQXJyYXkgKmRldmljZXMgPSAKKyAgICBbWlhDYXB0dXJlRGV2aWNlCisgICAgICAgIFpYQVYoZGV2aWNlc1dpdGhNZWRpYVR5cGU6KQorICAgICAgWlhRVChpbnB1dERldmljZXNXaXRoTWVkaWFUeXBlOikgWlhNZWRpYVR5cGVWaWRlb107CisgIHJldHVybiBbZGV2aWNlcyBjb3VudF0gPiAwOworfQorCistIChCT09MKWhhc1RvcmNoIHsKKyAgaWYgKFtzZWxmIGRldmljZV0pIHsKKyAgICByZXR1cm4gZmFsc2UgWlhBVih8fCBbc2VsZiBkZXZpY2VdLmhhc1RvcmNoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gTk87CisgIH0KK30KKworLSAoaW50KWZyb250IHsKKyAgcmV0dXJuIDA7Cit9CisKKy0gKGludCliYWNrIHsKKyAgcmV0dXJuIDE7Cit9CisKKy0gKGludCljYW1lcmEgeworICByZXR1cm4gY2FtZXJhOworfQorCistIChCT09MKXRvcmNoIHsKKyAgcmV0dXJuIHRvcmNoOworfQorCistICh2b2lkKXNldENhbWVyYTooaW50KWNhbWVyYV8geworICBpZiAoY2FtZXJhICAhPSBjYW1lcmFfKSB7CisgICAgY2FtZXJhID0gY2FtZXJhXzsKKyAgICBjYXB0dXJlX2RldmljZV9pbmRleCA9IC0xOworICAgIGNhcHR1cmVfZGV2aWNlID0gMDsKKyAgICBbc2VsZiByZXBsYWNlSW5wdXRdOworICB9Cit9CisKKy0gKHZvaWQpc2V0VG9yY2g6KEJPT0wpdG9yY2hfIHsKKyAgdG9yY2ggPSB0b3JjaF87CisgIFpYQVYoeworICAgICAgW2lucHV0LmRldmljZSBsb2NrRm9yQ29uZmlndXJhdGlvbjpuaWxdOworICAgICAgaWYgKHRvcmNoKSB7CisgICAgICAgIGlucHV0LmRldmljZS50b3JjaE1vZGUgPSBBVkNhcHR1cmVUb3JjaE1vZGVPbjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlucHV0LmRldmljZS50b3JjaE1vZGUgPSBBVkNhcHR1cmVUb3JjaE1vZGVPZmY7CisgICAgICB9CisgICAgICBbaW5wdXQuZGV2aWNlIHVubG9ja0ZvckNvbmZpZ3VyYXRpb25dOworICAgIH0pOworfQorCistICh2b2lkKXNldFRyYW5zZm9ybTooQ0dBZmZpbmVUcmFuc2Zvcm0pdHJhbnNmb3JtXyB7CisgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybV87CisgIFtsYXllciBzZXRBZmZpbmVUcmFuc2Zvcm06dHJhbnNmb3JtXTsKK30KKworQGVuZAorCisvLyBJZiB5b3UgdHJ5IHRvIGRlZmluZSB0aGlzIGhpZ2hlciwgdGhlcmUgKHNlZW0gdG8gYmUpIGNsYXNoZXMgd2l0aCBzb21ldGhpbmcocykgZGVmaW5lZAorLy8gaW4gdGhlIGluY2x1ZGVzIC4uLgorCisjaWYgWlhBVigxKSswCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorLy8gR3Jvc3MsIEkga25vdywgYnV0IC4uLgorc3RhdGljIGJvb2wgaXNJUGFkKCkgeworICBzdGF0aWMgaW50IGlzX2lwYWQgPSAtMTsKKyAgaWYgKGlzX2lwYWQgPCAwKSB7CisgICAgc2l6ZV90IHNpemU7CisgICAgc3lzY3RsYnluYW1lKCJody5tYWNoaW5lIiwgTlVMTCwgJnNpemUsIE5VTEwsIDApOyAvLyBHZXQgc2l6ZSBvZiBkYXRhIHRvIGJlIHJldHVybmVkLgorICAgIGNoYXIgKm5hbWUgPSAoY2hhciAqKW1hbGxvYyhzaXplKTsKKyAgICBzeXNjdGxieW5hbWUoImh3Lm1hY2hpbmUiLCBuYW1lLCAmc2l6ZSwgTlVMTCwgMCk7CisgICAgTlNTdHJpbmcgKm1hY2hpbmUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6bmFtZSBlbmNvZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2RpbmddOworICAgIGZyZWUobmFtZSk7CisgICAgaXNfaXBhZCA9IFttYWNoaW5lIGhhc1ByZWZpeDpAImlQYWQiXTsKKyAgfQorICByZXR1cm4gISFpc19pcGFkOworfQorI2VuZGlmCisKKyNlbHNlCisKK0BpbXBsZW1lbnRhdGlvbiBaWENhcHR1cmUKKworLSAoaWQpaW5pdCB7CisgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKKworICB9CisgIHJldHVybiAwOworfQorCistIChCT09MKXJ1bm5pbmcge3JldHVybiBOTzt9CisKKy0gKENBTGF5ZXIgKilsYXllciB7CisgIHJldHVybiAwOworfQorCistIChDQUxheWVyICopbHVtaW5hbmNlIHsKKyAgcmV0dXJuIDA7Cit9CisKKy0gKENBTGF5ZXIgKiliaW5hcnkgeworICByZXR1cm4gMDsKK30KKworLSAodm9pZClzZXRMdW1pbmFuY2U6KEJPT0wpb24ge30KKy0gKHZvaWQpc2V0QmluYXJ5OihCT09MKW9uIHt9CisKKy0gKHZvaWQpaGFyZF9zdG9wIHsKK30KKworLSAoQk9PTCloYXNGcm9udCB7CisgIHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpaGFzQmFjayB7CisgIHJldHVybiBOTzsKK30KKworLSAoQk9PTCloYXNUb3JjaCB7CisgIHJldHVybiBOTzsKK30KKworLSAoaW50KWZyb250IHsKKyAgcmV0dXJuIDA7Cit9CisKKy0gKGludCliYWNrIHsKKyAgcmV0dXJuIDE7Cit9CisKKy0gKGludCljYW1lcmEgeworICByZXR1cm4gc2VsZi5mcm9udDsKK30KKworLSAoQk9PTCl0b3JjaCB7CisgIHJldHVybiBOTzsKK30KKworLSAodm9pZClzZXRDYW1lcmE6KGludCljYW1lcmFfIHt9CistICh2b2lkKXNldFRvcmNoOihCT09MKXRvcmNoIHt9CistICh2b2lkKW9yZGVyX3NraXAge30KKy0gKHZvaWQpc3RhcnQge30KKy0gKHZvaWQpc3RvcCB7fQorLSAodm9pZClzdG9wQW5kRnJlZXplT3V0cHV0OihCT09MKWZyZWV6ZU91dHB1dCB7fQorLSAodm9pZCAqKW91dHB1dCB7cmV0dXJuIDA7fQorCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9aWENhcHR1cmVEZWxlZ2F0ZS5oIGIvWlhpbmdPYmpDL2NsaWVudC9aWENhcHR1cmVEZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTdmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L1pYQ2FwdHVyZURlbGVnYXRlLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGNsYXNzIFpYQ2FwdHVyZTsKK0BjbGFzcyBaWFJlc3VsdDsKKworQHByb3RvY29sIFpYQ2FwdHVyZURlbGVnYXRlIDxOU09iamVjdD4KKworLSAodm9pZCljYXB0dXJlUmVzdWx0OihaWENhcHR1cmUgKiljYXB0dXJlIHJlc3VsdDooWlhSZXN1bHQgKilyZXN1bHQ7CisKK0BvcHRpb25hbAorLSAodm9pZCljYXB0dXJlU2l6ZTooWlhDYXB0dXJlICopY2FwdHVyZQorICAgICAgICAgICAgICB3aWR0aDooTlNOdW1iZXIgKil3aWR0aAorICAgICAgICAgICAgIGhlaWdodDooTlNOdW1iZXIgKiloZWlnaHQ7CisKKy0gKHZvaWQpY2FwdHVyZUNhbWVyYUlzUmVhZHk6KFpYQ2FwdHVyZSAqKWNhcHR1cmU7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvWlhDYXB0dXJlVmlldy5oIGIvWlhpbmdPYmpDL2NsaWVudC9aWENhcHR1cmVWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmOTk0NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvWlhDYXB0dXJlVmlldy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJaWFZpZXcuaCIKKworQGludGVyZmFjZSBaWENhcHR1cmVWaWV3IDogWlhWaWV3CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvWlhDYXB0dXJlVmlldy5tIGIvWlhpbmdPYmpDL2NsaWVudC9aWENhcHR1cmVWaWV3Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdmYzNhYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvWlhDYXB0dXJlVmlldy5tCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJaWENhcHR1cmVWaWV3LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWENhcHR1cmVWaWV3CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvWlhJbWFnZS5oIGIvWlhpbmdPYmpDL2NsaWVudC9aWEltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3MGRiZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvWlhJbWFnZS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorCitAY2xhc3MgWlhCaXRNYXRyaXg7CisKK0BpbnRlcmZhY2UgWlhJbWFnZSA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBDR0ltYWdlUmVmIGNnaW1hZ2U7CisKKy0gKFpYSW1hZ2UgKilpbml0V2l0aENHSW1hZ2VSZWY6KENHSW1hZ2VSZWYpaW1hZ2U7CistIChaWEltYWdlICopaW5pdFdpdGhVUkw6KE5TVVJMIGNvbnN0ICopdXJsOworLSAoc2l6ZV90KXdpZHRoOworLSAoc2l6ZV90KWhlaWdodDsKKysgKFpYSW1hZ2UgKilpbWFnZVdpdGhNYXRyaXg6KFpYQml0TWF0cml4ICopbWF0cml4OworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L1pYSW1hZ2UubSBiL1pYaW5nT2JqQy9jbGllbnQvWlhJbWFnZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYWZlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L1pYSW1hZ2UubQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYSW1hZ2UuaCIKKworI2lmIFRBUkdFVF9PU19FTUJFRERFRCB8fCBUQVJHRVRfSVBIT05FX1NJTVVMQVRPUgorI2ltcG9ydCA8SW1hZ2VJTy9JbWFnZUlPLmg+CisjZW5kaWYKKworQGludGVyZmFjZSBaWEltYWdlICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIENHSW1hZ2VSZWYgY2dpbWFnZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhJbWFnZQorCistIChaWEltYWdlICopaW5pdFdpdGhDR0ltYWdlUmVmOihDR0ltYWdlUmVmKWltYWdlIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfY2dpbWFnZSA9IENHSW1hZ2VSZXRhaW4oaW1hZ2UpOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFpYSW1hZ2UgKilpbml0V2l0aFVSTDooTlNVUkwgY29uc3QgKil1cmwgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIENHRGF0YVByb3ZpZGVyUmVmIHByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoVVJMKChfX2JyaWRnZSBDRlVSTFJlZil1cmwpOworCisgICAgaWYgKHByb3ZpZGVyKSB7CisgICAgICBDR0ltYWdlU291cmNlUmVmIHNvdXJjZSA9IENHSW1hZ2VTb3VyY2VDcmVhdGVXaXRoRGF0YVByb3ZpZGVyKHByb3ZpZGVyLCAwKTsKKworICAgICAgaWYgKHNvdXJjZSkgeworICAgICAgICBfY2dpbWFnZSA9IENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgoc291cmNlLCAwLCAwKTsKKyAgICAgICAgQ0ZSZWxlYXNlKHNvdXJjZSk7CisgICAgICB9CisKKyAgICAgIENHRGF0YVByb3ZpZGVyUmVsZWFzZShwcm92aWRlcik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHNpemVfdCl3aWR0aCB7CisgIHJldHVybiBDR0ltYWdlR2V0V2lkdGgoc2VsZi5jZ2ltYWdlKTsKK30KKworLSAoc2l6ZV90KWhlaWdodCB7CisgIHJldHVybiBDR0ltYWdlR2V0SGVpZ2h0KHNlbGYuY2dpbWFnZSk7Cit9CisKKy0gKHZvaWQpZGVhbGxvYyB7CisgIGlmIChfY2dpbWFnZSkgeworICAgIENHSW1hZ2VSZWxlYXNlKF9jZ2ltYWdlKTsKKyAgfQorfQorCisrIChaWEltYWdlICopaW1hZ2VXaXRoTWF0cml4OihaWEJpdE1hdHJpeCAqKW1hdHJpeCB7CisgIGludCB3aWR0aCA9IG1hdHJpeC53aWR0aDsKKyAgaW50IGhlaWdodCA9IG1hdHJpeC5oZWlnaHQ7CisgIGludDhfdCAqYnl0ZXMgPSAoaW50OF90ICopbWFsbG9jKHdpZHRoICogaGVpZ2h0ICogNCk7CisgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICBCT09MIGJpdCA9IFttYXRyaXggZ2V0WDp4IHk6eV07CisgICAgICBpbnQ4X3QgaW50ZW5zaXR5ID0gYml0ID8gMCA6IDI1NTsKKyAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICAgYnl0ZXNbeSAqIHdpZHRoICogNCArIHggKiA0ICsgaV0gPSBpbnRlbnNpdHk7CisgICAgICB9CisgICAgICBieXRlc1t5ICogd2lkdGggKiA0ICsgeCAqIDQgKyAzXSA9IDI1NTsKKyAgICB9CisgIH0KKworICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICBDR0NvbnRleHRSZWYgYyA9IENHQml0bWFwQ29udGV4dENyZWF0ZShieXRlcywgd2lkdGgsIGhlaWdodCwgOCwgNCAqIHdpZHRoLCBjb2xvclNwYWNlLCBrQ0dCaXRtYXBBbHBoYUluZm9NYXNrICYga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KTsKKyAgQ0ZSZWxlYXNlKGNvbG9yU3BhY2UpOworICBDR0ltYWdlUmVmIGltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYyk7CisgIENGUmVsZWFzZShjKTsKKyAgZnJlZShieXRlcyk7CisKKyAgWlhJbWFnZSAqenhJbWFnZSA9IFtbWlhJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlUmVmOmltYWdlXTsKKworICBDRlJlbGVhc2UoaW1hZ2UpOworICByZXR1cm4genhJbWFnZTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9aWFZpZXcuaCBiL1pYaW5nT2JqQy9jbGllbnQvWlhWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhhMDkzZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvWlhWaWV3LmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmIFRBUkdFVF9PU19FTUJFRERFRCB8fCBUQVJHRVRfSVBIT05FX1NJTVVMQVRPUgorI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KKyNkZWZpbmUgWlhWaWV3IFVJVmlldworI2Vsc2UKKyNpbXBvcnQgPENvY29hL0NvY29hLmg+CisjZGVmaW5lIFpYVmlldyBOU1ZpZXcKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZjM1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhSZXN1bHRQYXJzZXIuaCIKKworLyoqCisgKiBTZWUgRG9Db01vJ3MgZG9jdW1lbnRhdGlvbiBodHRwOi8vd3d3Lm50dGRvY29tby5jby5qcC9lbmdsaXNoL3NlcnZpY2UvaW1vZGUvbWFrZS9jb250ZW50L2JhcmNvZGUvYWJvdXQvczIuaHRtbAorICogYWJvdXQgdGhlIHJlc3VsdCB0eXBlcyByZXByZXNlbnRlZCBieSBzdWJjbGFzc2VzIG9mIHRoaXMgY2xhc3MuCisgKi8KKworQGludGVyZmFjZSBaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyIDogWlhSZXN1bHRQYXJzZXIKKworKyAoTlNBcnJheSAqKW1hdGNoRG9Db01vUHJlZml4ZWRGaWVsZDooTlNTdHJpbmcgKilwcmVmaXggcmF3VGV4dDooTlNTdHJpbmcgKilyYXdUZXh0IHRyaW06KEJPT0wpdHJpbTsKKysgKE5TU3RyaW5nICopbWF0Y2hTaW5nbGVEb0NvTW9QcmVmaXhlZEZpZWxkOihOU1N0cmluZyAqKXByZWZpeCByYXdUZXh0OihOU1N0cmluZyAqKXJhd1RleHQgdHJpbTooQk9PTCl0cmltOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkY2QzNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIubQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyCisKKysgKE5TQXJyYXkgKikgbWF0Y2hEb0NvTW9QcmVmaXhlZEZpZWxkOihOU1N0cmluZyAqKXByZWZpeCByYXdUZXh0OihOU1N0cmluZyAqKXJhd1RleHQgdHJpbTooQk9PTCl0cmltIHsKKyAgcmV0dXJuIFtzZWxmIG1hdGNoUHJlZml4ZWRGaWVsZDpwcmVmaXggcmF3VGV4dDpyYXdUZXh0IGVuZENoYXI6JzsnIHRyaW06dHJpbV07Cit9CisKKysgKE5TU3RyaW5nICopIG1hdGNoU2luZ2xlRG9Db01vUHJlZml4ZWRGaWVsZDooTlNTdHJpbmcgKilwcmVmaXggcmF3VGV4dDooTlNTdHJpbmcgKilyYXdUZXh0IHRyaW06KEJPT0wpdHJpbSB7CisgIHJldHVybiBbc2VsZiBtYXRjaFNpbmdsZVByZWZpeGVkRmllbGQ6cHJlZml4IHJhd1RleHQ6cmF3VGV4dCBlbmRDaGFyOic7JyB0cmltOnRyaW1dOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEFkZHJlc3NCb29rQVVSZXN1bHRQYXJzZXIuaCBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQWRkcmVzc0Jvb2tBVVJlc3VsdFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MWY5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEFkZHJlc3NCb29rQVVSZXN1bHRQYXJzZXIuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlc3VsdFBhcnNlci5oIgorCisvKioKKyAqIEltcGxlbWVudHMgS0RESSBBVSdzIGFkZHJlc3MgYm9vayBmb3JtYXQuIFNlZSBodHRwOi8vd3d3LmF1LmtkZGkuY29tL2V6ZmFjdG9yeS90ZWMvdHdvX2RpbWVuc2lvbnMvaW5kZXguaHRtbC4KKyAqIChUaGFua3MgdG8gWXV6byBmb3IgdHJhbnNsYXRpbmchKQorICovCisKK0BpbnRlcmZhY2UgWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyIDogWlhSZXN1bHRQYXJzZXIKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyLm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEFkZHJlc3NCb29rQVVSZXN1bHRQYXJzZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzlmN2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyLm0KQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWFJlc3VsdC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhBZGRyZXNzQm9va0FVUmVzdWx0UGFyc2VyCisKKy0gKFpYUGFyc2VkUmVzdWx0ICopcGFyc2U6KFpYUmVzdWx0ICopcmVzdWx0IHsKKyAgTlNTdHJpbmcgKnJhd1RleHQgPSBbWlhSZXN1bHRQYXJzZXIgbWFzc2FnZWRUZXh0OnJlc3VsdF07CisKKyAgaWYgKFtyYXdUZXh0IHJhbmdlT2ZTdHJpbmc6QCJNRU1PUlkiXS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kIHx8CisgICAgICBbcmF3VGV4dCByYW5nZU9mU3RyaW5nOkAiXHJcbiJdLmxvY2F0aW9uID09IE5TTm90Rm91bmQpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNTdHJpbmcgKm5hbWUgPSBbW3NlbGYgY2xhc3NdIG1hdGNoU2luZ2xlUHJlZml4ZWRGaWVsZDpAIk5BTUUxOiIgcmF3VGV4dDpyYXdUZXh0IGVuZENoYXI6J1xyJyB0cmltOllFU107CisgIE5TU3RyaW5nICpwcm9udW5jaWF0aW9uID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZVByZWZpeGVkRmllbGQ6QCJOQU1FMjoiIHJhd1RleHQ6cmF3VGV4dCBlbmRDaGFyOidccicgdHJpbTpZRVNdOworICBOU0FycmF5ICpwaG9uZU51bWJlcnMgPSBbc2VsZiBtYXRjaE11bHRpcGxlVmFsdWVQcmVmaXg6QCJURUwiIG1heDozIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIE5TQXJyYXkgKmVtYWlscyA9IFtzZWxmIG1hdGNoTXVsdGlwbGVWYWx1ZVByZWZpeDpAIk1BSUwiIG1heDozIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIE5TU3RyaW5nICpub3RlID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZVByZWZpeGVkRmllbGQ6QCJNRU1PUlk6IiByYXdUZXh0OnJhd1RleHQgZW5kQ2hhcjonXHInIHRyaW06Tk9dOworICBOU1N0cmluZyAqYWRkcmVzcyA9IFtbc2VsZiBjbGFzc10gbWF0Y2hTaW5nbGVQcmVmaXhlZEZpZWxkOkAiQUREOiIgcmF3VGV4dDpyYXdUZXh0IGVuZENoYXI6J1xyJyB0cmltOllFU107CisgIE5TQXJyYXkgKmFkZHJlc3NlcyA9IGFkZHJlc3MgPT0gbmlsID8gbmlsIDogQFthZGRyZXNzXTsKKworICByZXR1cm4gW1pYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQgYWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHRXaXRoTmFtZXM6W3NlbGYgbWF5YmVXcmFwOm5hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pY2tuYW1lczpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9udW5jaWF0aW9uOnByb251bmNpYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVOdW1iZXJzOnBob25lTnVtYmVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lVHlwZXM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsczplbWFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbFR5cGVzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbnRNZXNzZW5nZXI6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTpub3RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NlczphZGRyZXNzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1R5cGVzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmc6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXJ0aGRheTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbzpuaWxdOworfQorCistIChOU0FycmF5ICopbWF0Y2hNdWx0aXBsZVZhbHVlUHJlZml4OihOU1N0cmluZyAqKXByZWZpeCBtYXg6KGludCltYXggcmF3VGV4dDooTlNTdHJpbmcgKilyYXdUZXh0IHRyaW06KEJPT0wpdHJpbSB7CisgIE5TTXV0YWJsZUFycmF5ICp2YWx1ZXMgPSBuaWw7CisKKyAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbWF4OyBpKyspIHsKKyAgICBOU1N0cmluZyAqdmFsdWUgPSBbW3NlbGYgY2xhc3NdIG1hdGNoU2luZ2xlUHJlZml4ZWRGaWVsZDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAJWQ6IiwgcHJlZml4LCBpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1RleHQ6cmF3VGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENoYXI6J1xyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaW06dHJpbV07CisgICAgaWYgKHZhbHVlID09IG5pbCkgeworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICh2YWx1ZXMgPT0gbmlsKSB7CisgICAgICB2YWx1ZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om1heF07CisgICAgfQorICAgIFt2YWx1ZXMgYWRkT2JqZWN0OnZhbHVlXTsKKyAgfQorCisgIGlmICh2YWx1ZXMgPT0gbmlsKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICByZXR1cm4gdmFsdWVzOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhNGIyMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFJlc3VsdC5oIgorCisvKioKKyAqIEltcGxlbWVudHMgdGhlICJNRUNBUkQiIGFkZHJlc3MgYm9vayBlbnRyeSBmb3JtYXQuCisgKiAKKyAqIFN1cHBvcnRlZCBrZXlzOiBOLCBTT1VORCwgVEVMLCBFTUFJTCwgTk9URSwgQURSLCBCREFZLCBVUkwsIHBsdXMgT1JHCisgKiBVbnN1cHBvcnRlZCBrZXlzOiBURUwtQVYsIE5JQ0tOQU1FCisgKiAKKyAqIEV4Y2VwdCBmb3IgVEVMLCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXMgYXJlIGFsc28gbm90IHN1cHBvcnRlZDsKKyAqIHRoZSBmaXJzdCBvbmUgZm91bmQgdGFrZXMgcHJlY2VkZW5jZS4KKyAqIAorICogT3VyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIE1FQ0FSRCBmb3JtYXQgaXMgYmFzZWQgb24gdGhpcyBkb2N1bWVudDoKKyAqIAorICogaHR0cDovL3d3dy5tb2JpY29kZS5vcmcudHcvZmlsZXMvT01JQSUyME1vYmlsZSUyMEJhciUyMENvZGUlMjBTdGFuZGFyZCUyMHYzLjIuMS5kb2MgCisgKi8KKworQGludGVyZmFjZSBaWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyIDogWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM3OGY5MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIubQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWFJlc3VsdC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhBZGRyZXNzQm9va0RvQ29Nb1Jlc3VsdFBhcnNlcgorCistIChaWFBhcnNlZFJlc3VsdCAqKXBhcnNlOihaWFJlc3VsdCAqKXJlc3VsdCB7CisgIE5TU3RyaW5nICpyYXdUZXh0ID0gW1pYUmVzdWx0UGFyc2VyIG1hc3NhZ2VkVGV4dDpyZXN1bHRdOworICBpZiAoIVtyYXdUZXh0IGhhc1ByZWZpeDpAIk1FQ0FSRDoiXSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNBcnJheSAqcmF3TmFtZSA9IFtbc2VsZiBjbGFzc10gbWF0Y2hEb0NvTW9QcmVmaXhlZEZpZWxkOkAiTjoiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIGlmIChyYXdOYW1lID09IG5pbCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNTdHJpbmcgKm5hbWUgPSBbc2VsZiBwYXJzZU5hbWU6cmF3TmFtZVswXV07CisgIE5TU3RyaW5nICpwcm9udW5jaWF0aW9uID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZURvQ29Nb1ByZWZpeGVkRmllbGQ6QCJTT1VORDoiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIE5TQXJyYXkgKnBob25lTnVtYmVycyA9IFtbc2VsZiBjbGFzc10gbWF0Y2hEb0NvTW9QcmVmaXhlZEZpZWxkOkAiVEVMOiIgcmF3VGV4dDpyYXdUZXh0IHRyaW06WUVTXTsKKyAgTlNBcnJheSAqZW1haWxzID0gW1tzZWxmIGNsYXNzXSBtYXRjaERvQ29Nb1ByZWZpeGVkRmllbGQ6QCJFTUFJTDoiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIE5TU3RyaW5nICpub3RlID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZURvQ29Nb1ByZWZpeGVkRmllbGQ6QCJOT1RFOiIgcmF3VGV4dDpyYXdUZXh0IHRyaW06Tk9dOworICBOU0FycmF5ICphZGRyZXNzZXMgPSBbW3NlbGYgY2xhc3NdIG1hdGNoRG9Db01vUHJlZml4ZWRGaWVsZDpAIkFEUjoiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIE5TU3RyaW5nICpiaXJ0aGRheSA9IFtbc2VsZiBjbGFzc10gbWF0Y2hTaW5nbGVEb0NvTW9QcmVmaXhlZEZpZWxkOkAiQkRBWToiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIGlmIChiaXJ0aGRheSAhPSBuaWwgJiYgIVtbc2VsZiBjbGFzc10gaXNTdHJpbmdPZkRpZ2l0czpiaXJ0aGRheSBsZW5ndGg6OF0pIHsKKyAgICBiaXJ0aGRheSA9IG5pbDsKKyAgfQorICBOU0FycmF5ICp1cmxzID0gW1tzZWxmIGNsYXNzXSBtYXRjaERvQ29Nb1ByZWZpeGVkRmllbGQ6QCJVUkw6IiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworICBOU1N0cmluZyAqb3JnID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZURvQ29Nb1ByZWZpeGVkRmllbGQ6QCJPUkc6IiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworCisgIHJldHVybiBbWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdCBhZGRyZXNzQm9va1BhcnNlZFJlc3VsdFdpdGhOYW1lczpbc2VsZiBtYXliZVdyYXA6bmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlja25hbWVzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb251bmNpYXRpb246cHJvbnVuY2lhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZU51bWJlcnM6cGhvbmVOdW1iZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVUeXBlczpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxzOmVtYWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsVHlwZXM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFudE1lc3NlbmdlcjpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RlOm5vdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzOmFkZHJlc3NlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzVHlwZXM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZzpvcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpcnRoZGF5OmJpcnRoZGF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOnVybHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvOm5pbF07Cit9CisKKy0gKE5TU3RyaW5nICopcGFyc2VOYW1lOihOU1N0cmluZyAqKW5hbWUgeworICBOU1VJbnRlZ2VyIGNvbW1hID0gW25hbWUgcmFuZ2VPZlN0cmluZzpAIiwiXS5sb2NhdGlvbjsKKyAgaWYgKGNvbW1hICE9IE5TTm90Rm91bmQpIHsKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAlQCIsIFtuYW1lIHN1YnN0cmluZ0Zyb21JbmRleDpjb21tYSArIDFdLCBbbmFtZSBzdWJzdHJpbmdUb0luZGV4OmNvbW1hXV07CisgIH0KKyAgcmV0dXJuIG5hbWU7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQuaCBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E5NGU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdCA6IFpYUGFyc2VkUmVzdWx0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpuYW1lczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpuaWNrbmFtZXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpwcm9udW5jaWF0aW9uOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIE5TQXJyYXkgKnBob25lTnVtYmVyczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpwaG9uZVR5cGVzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIE5TQXJyYXkgKmVtYWlsczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICplbWFpbFR5cGVzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqaW5zdGFudE1lc3NlbmdlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKm5vdGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIHN0cm9uZykgTlNBcnJheSAqYWRkcmVzc2VzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIE5TQXJyYXkgKmFkZHJlc3NUeXBlczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKnRpdGxlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqb3JnOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIE5TQXJyYXkgKnVybHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpiaXJ0aGRheTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpnZW87CisKKy0gKGlkKWluaXRXaXRoTmFtZXM6KE5TQXJyYXkgKiluYW1lcyBwaG9uZU51bWJlcnM6KE5TQXJyYXkgKilwaG9uZU51bWJlcnMKKyAgICAgICAgIHBob25lVHlwZXM6KE5TQXJyYXkgKilwaG9uZVR5cGVzIGVtYWlsczooTlNBcnJheSAqKWVtYWlscyBlbWFpbFR5cGVzOihOU0FycmF5ICopZW1haWxUeXBlcworICAgICAgICAgIGFkZHJlc3NlczooTlNBcnJheSAqKWFkZHJlc3NlcyBhZGRyZXNzVHlwZXM6KE5TQXJyYXkgKilhZGRyZXNzVHlwZXM7CisKKy0gKGlkKWluaXRXaXRoTmFtZXM6KE5TQXJyYXkgKiluYW1lcyBuaWNrbmFtZXM6KE5TQXJyYXkgKiluaWNrbmFtZXMgcHJvbnVuY2lhdGlvbjooTlNTdHJpbmcgKilwcm9udW5jaWF0aW9uCisgICAgICAgcGhvbmVOdW1iZXJzOihOU0FycmF5ICopcGhvbmVOdW1iZXJzIHBob25lVHlwZXM6KE5TQXJyYXkgKilwaG9uZVR5cGVzIGVtYWlsczooTlNBcnJheSAqKWVtYWlscworICAgICAgICAgZW1haWxUeXBlczooTlNBcnJheSAqKWVtYWlsVHlwZXMgaW5zdGFudE1lc3NlbmdlcjooTlNTdHJpbmcgKilpbnN0YW50TWVzc2VuZ2VyIG5vdGU6KE5TU3RyaW5nICopbm90ZQorICAgICAgICAgIGFkZHJlc3NlczooTlNBcnJheSAqKWFkZHJlc3NlcyBhZGRyZXNzVHlwZXM6KE5TQXJyYXkgKilhZGRyZXNzVHlwZXMgb3JnOihOU1N0cmluZyAqKW9yZworICAgICAgICAgICBiaXJ0aGRheTooTlNTdHJpbmcgKiliaXJ0aGRheSB0aXRsZTooTlNTdHJpbmcgKil0aXRsZSB1cmxzOihOU0FycmF5ICopdXJscyBnZW86KE5TQXJyYXkgKilnZW87CisKKysgKGlkKWFkZHJlc3NCb29rUGFyc2VkUmVzdWx0V2l0aE5hbWVzOihOU0FycmF5ICopbmFtZXMgcGhvbmVOdW1iZXJzOihOU0FycmF5ICopcGhvbmVOdW1iZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVUeXBlczooTlNBcnJheSAqKXBob25lVHlwZXMgZW1haWxzOihOU0FycmF5ICopZW1haWxzIGVtYWlsVHlwZXM6KE5TQXJyYXkgKillbWFpbFR5cGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NlczooTlNBcnJheSAqKWFkZHJlc3NlcyBhZGRyZXNzVHlwZXM6KE5TQXJyYXkgKilhZGRyZXNzVHlwZXM7CisKKysgKGlkKWFkZHJlc3NCb29rUGFyc2VkUmVzdWx0V2l0aE5hbWVzOihOU0FycmF5ICopbmFtZXMgbmlja25hbWVzOihOU0FycmF5ICopbmlja25hbWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbnVuY2lhdGlvbjooTlNTdHJpbmcgKilwcm9udW5jaWF0aW9uIHBob25lTnVtYmVyczooTlNBcnJheSAqKXBob25lTnVtYmVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lVHlwZXM6KE5TQXJyYXkgKilwaG9uZVR5cGVzIGVtYWlsczooTlNBcnJheSAqKWVtYWlscyBlbWFpbFR5cGVzOihOU0FycmF5ICopZW1haWxUeXBlcworICAgICAgICAgICAgICAgICAgICAgIGluc3RhbnRNZXNzZW5nZXI6KE5TU3RyaW5nICopaW5zdGFudE1lc3NlbmdlciBub3RlOihOU1N0cmluZyAqKW5vdGUgYWRkcmVzc2VzOihOU0FycmF5ICopYWRkcmVzc2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NUeXBlczooTlNBcnJheSAqKWFkZHJlc3NUeXBlcyBvcmc6KE5TU3RyaW5nICopb3JnIGJpcnRoZGF5OihOU1N0cmluZyAqKWJpcnRoZGF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTooTlNTdHJpbmcgKil0aXRsZSB1cmxzOihOU0FycmF5ICopdXJscyBnZW86KE5TQXJyYXkgKilnZW87CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQubSBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2E1ZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdC5tCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0VHlwZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdAorCistIChpZClpbml0V2l0aE5hbWVzOihOU0FycmF5ICopbmFtZXMgcGhvbmVOdW1iZXJzOihOU0FycmF5ICopcGhvbmVOdW1iZXJzCisgICAgICAgICBwaG9uZVR5cGVzOihOU0FycmF5ICopcGhvbmVUeXBlcyBlbWFpbHM6KE5TQXJyYXkgKillbWFpbHMgZW1haWxUeXBlczooTlNBcnJheSAqKWVtYWlsVHlwZXMKKyAgICAgICAgICBhZGRyZXNzZXM6KE5TQXJyYXkgKilhZGRyZXNzZXMgYWRkcmVzc1R5cGVzOihOU0FycmF5ICopYWRkcmVzc1R5cGVzIHsKKyAgcmV0dXJuIFtzZWxmIGluaXRXaXRoTmFtZXM6bmFtZXMgbmlja25hbWVzOm5pbCBwcm9udW5jaWF0aW9uOm5pbCBwaG9uZU51bWJlcnM6cGhvbmVOdW1iZXJzIHBob25lVHlwZXM6cGhvbmVOdW1iZXJzCisgICAgICAgICAgICAgICAgICAgICAgZW1haWxzOmVtYWlscyBlbWFpbFR5cGVzOl9lbWFpbFR5cGVzIGluc3RhbnRNZXNzZW5nZXI6bmlsIG5vdGU6bmlsIGFkZHJlc3NlczphZGRyZXNzZXMKKyAgICAgICAgICAgICAgICBhZGRyZXNzVHlwZXM6YWRkcmVzc1R5cGVzIG9yZzpuaWwgYmlydGhkYXk6bmlsIHRpdGxlOm5pbCB1cmxzOm5pbCBnZW86bmlsXTsKK30KKworLSAoaWQpaW5pdFdpdGhOYW1lczooTlNBcnJheSAqKW5hbWVzIG5pY2tuYW1lczooTlNBcnJheSAqKW5pY2tuYW1lcyBwcm9udW5jaWF0aW9uOihOU1N0cmluZyAqKXByb251bmNpYXRpb24KKyAgICAgICBwaG9uZU51bWJlcnM6KE5TQXJyYXkgKilwaG9uZU51bWJlcnMgcGhvbmVUeXBlczooTlNBcnJheSAqKXBob25lVHlwZXMgZW1haWxzOihOU0FycmF5ICopZW1haWxzCisgICAgICAgICBlbWFpbFR5cGVzOihOU0FycmF5ICopZW1haWxUeXBlcyBpbnN0YW50TWVzc2VuZ2VyOihOU1N0cmluZyAqKWluc3RhbnRNZXNzZW5nZXIgbm90ZTooTlNTdHJpbmcgKilub3RlCisgICAgICAgICAgYWRkcmVzc2VzOihOU0FycmF5ICopYWRkcmVzc2VzIGFkZHJlc3NUeXBlczooTlNBcnJheSAqKWFkZHJlc3NUeXBlcyBvcmc6KE5TU3RyaW5nICopb3JnCisgICAgICAgICAgIGJpcnRoZGF5OihOU1N0cmluZyAqKWJpcnRoZGF5IHRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHVybHM6KE5TQXJyYXkgKil1cmxzIGdlbzooTlNBcnJheSAqKWdlbyB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRXaXRoVHlwZTprUGFyc2VkUmVzdWx0VHlwZUFkZHJlc3NCb29rXSkgeworICAgIF9uYW1lcyA9IG5hbWVzOworICAgIF9uaWNrbmFtZXMgPSBuaWNrbmFtZXM7CisgICAgX3Byb251bmNpYXRpb24gPSBwcm9udW5jaWF0aW9uOworICAgIF9waG9uZU51bWJlcnMgPSBwaG9uZU51bWJlcnM7CisgICAgX3Bob25lVHlwZXMgPSBwaG9uZVR5cGVzOworICAgIF9lbWFpbHMgPSBlbWFpbHM7CisgICAgX2VtYWlsVHlwZXMgPSBlbWFpbFR5cGVzOworICAgIF9pbnN0YW50TWVzc2VuZ2VyID0gaW5zdGFudE1lc3NlbmdlcjsKKyAgICBfbm90ZSA9IG5vdGU7CisgICAgX2FkZHJlc3NlcyA9IGFkZHJlc3NlczsKKyAgICBfYWRkcmVzc1R5cGVzID0gYWRkcmVzc1R5cGVzOworICAgIF9vcmcgPSBvcmc7CisgICAgX2JpcnRoZGF5ID0gYmlydGhkYXk7CisgICAgX3RpdGxlID0gdGl0bGU7CisgICAgX3VybHMgPSB1cmxzOworICAgIF9nZW8gPSBnZW87CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworKyAoaWQpYWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHRXaXRoTmFtZXM6KE5TQXJyYXkgKiluYW1lcyBwaG9uZU51bWJlcnM6KE5TQXJyYXkgKilwaG9uZU51bWJlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZVR5cGVzOihOU0FycmF5ICopcGhvbmVUeXBlcyBlbWFpbHM6KE5TQXJyYXkgKillbWFpbHMgZW1haWxUeXBlczooTlNBcnJheSAqKWVtYWlsVHlwZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzOihOU0FycmF5ICopYWRkcmVzc2VzIGFkZHJlc3NUeXBlczooTlNBcnJheSAqKWFkZHJlc3NUeXBlcyB7CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoTmFtZXM6bmFtZXMgcGhvbmVOdW1iZXJzOnBob25lTnVtYmVycyBwaG9uZVR5cGVzOnBob25lVHlwZXMgZW1haWxzOmVtYWlscworICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbFR5cGVzOmVtYWlsVHlwZXMgYWRkcmVzc2VzOmFkZHJlc3NlcyBhZGRyZXNzVHlwZXM6YWRkcmVzc1R5cGVzXTsKK30KKworKyAoaWQpYWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHRXaXRoTmFtZXM6KE5TQXJyYXkgKiluYW1lcyBuaWNrbmFtZXM6KE5TQXJyYXkgKiluaWNrbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm9udW5jaWF0aW9uOihOU1N0cmluZyAqKXByb251bmNpYXRpb24gcGhvbmVOdW1iZXJzOihOU0FycmF5ICopcGhvbmVOdW1iZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVUeXBlczooTlNBcnJheSAqKXBob25lVHlwZXMgZW1haWxzOihOU0FycmF5ICopZW1haWxzIGVtYWlsVHlwZXM6KE5TQXJyYXkgKillbWFpbFR5cGVzCisgICAgICAgICAgICAgICAgICAgICAgaW5zdGFudE1lc3NlbmdlcjooTlNTdHJpbmcgKilpbnN0YW50TWVzc2VuZ2VyIG5vdGU6KE5TU3RyaW5nICopbm90ZSBhZGRyZXNzZXM6KE5TQXJyYXkgKilhZGRyZXNzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1R5cGVzOihOU0FycmF5ICopYWRkcmVzc1R5cGVzIG9yZzooTlNTdHJpbmcgKilvcmcgYmlydGhkYXk6KE5TU3RyaW5nICopYmlydGhkYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHVybHM6KE5TQXJyYXkgKil1cmxzIGdlbzooTlNBcnJheSAqKWdlbyB7CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoTmFtZXM6bmFtZXMgbmlja25hbWVzOm5pY2tuYW1lcyBwcm9udW5jaWF0aW9uOnByb251bmNpYXRpb24gcGhvbmVOdW1iZXJzOnBob25lTnVtYmVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVUeXBlczpwaG9uZVR5cGVzIGVtYWlsczplbWFpbHMgZW1haWxUeXBlczplbWFpbFR5cGVzIGluc3RhbnRNZXNzZW5nZXI6aW5zdGFudE1lc3NlbmdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RlOm5vdGUgYWRkcmVzc2VzOmFkZHJlc3NlcyBhZGRyZXNzVHlwZXM6YWRkcmVzc1R5cGVzIG9yZzpvcmcgYmlydGhkYXk6YmlydGhkYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTp0aXRsZSB1cmxzOnVybHMgZ2VvOmdlb107Cit9CisKKy0gKE5TU3RyaW5nICopZGlzcGxheVJlc3VsdCB7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICBbWlhQYXJzZWRSZXN1bHQgbWF5YmVBcHBlbmRBcnJheTpzZWxmLm5hbWVzIHJlc3VsdDpyZXN1bHRdOworICBbWlhQYXJzZWRSZXN1bHQgbWF5YmVBcHBlbmRBcnJheTpzZWxmLm5pY2tuYW1lcyByZXN1bHQ6cmVzdWx0XTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kOnNlbGYucHJvbnVuY2lhdGlvbiByZXN1bHQ6cmVzdWx0XTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kOnNlbGYudGl0bGUgcmVzdWx0OnJlc3VsdF07CisgIFtaWFBhcnNlZFJlc3VsdCBtYXliZUFwcGVuZDpzZWxmLm9yZyByZXN1bHQ6cmVzdWx0XTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kQXJyYXk6c2VsZi5hZGRyZXNzZXMgcmVzdWx0OnJlc3VsdF07CisgIFtaWFBhcnNlZFJlc3VsdCBtYXliZUFwcGVuZEFycmF5OnNlbGYucGhvbmVOdW1iZXJzIHJlc3VsdDpyZXN1bHRdOworICBbWlhQYXJzZWRSZXN1bHQgbWF5YmVBcHBlbmRBcnJheTpzZWxmLmVtYWlscyByZXN1bHQ6cmVzdWx0XTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kOnNlbGYuaW5zdGFudE1lc3NlbmdlciByZXN1bHQ6cmVzdWx0XTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kQXJyYXk6c2VsZi51cmxzIHJlc3VsdDpyZXN1bHRdOworICBbWlhQYXJzZWRSZXN1bHQgbWF5YmVBcHBlbmQ6c2VsZi5iaXJ0aGRheSByZXN1bHQ6cmVzdWx0XTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kQXJyYXk6c2VsZi5nZW8gcmVzdWx0OnJlc3VsdF07CisgIFtaWFBhcnNlZFJlc3VsdCBtYXliZUFwcGVuZDpzZWxmLm5vdGUgcmVzdWx0OnJlc3VsdF07CisgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQml6Y2FyZFJlc3VsdFBhcnNlci5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhCaXpjYXJkUmVzdWx0UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkN2YwYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQml6Y2FyZFJlc3VsdFBhcnNlci5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIuaCIKKworLyoqCisgKiBJbXBsZW1lbnRzIHRoZSAiQklaQ0FSRCIgYWRkcmVzcyBib29rIGVudHJ5IGZvcm1hdCwgdGhvdWdoIHRoaXMgaGFzIGJlZW4KKyAqIGxhcmdlbHkgcmV2ZXJzZS1lbmdpbmVlcmVkIGZyb20gZXhhbXBsZXMgb2JzZXJ2ZWQgaW4gdGhlIHdpbGQgLS0gc3RpbGwKKyAqIGxvb2tpbmcgZm9yIGEgZGVmaW5pdGl2ZSByZWZlcmVuY2UuCisgKi8KKworQGludGVyZmFjZSBaWEJpemNhcmRSZXN1bHRQYXJzZXIgOiBaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQml6Y2FyZFJlc3VsdFBhcnNlci5tIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhCaXpjYXJkUmVzdWx0UGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhMjk3YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQml6Y2FyZFJlc3VsdFBhcnNlci5tCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYQml6Y2FyZFJlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKworQGltcGxlbWVudGF0aW9uIFpYQml6Y2FyZFJlc3VsdFBhcnNlcgorCistIChaWFBhcnNlZFJlc3VsdCAqKXBhcnNlOihaWFJlc3VsdCAqKXJlc3VsdCB7CisgIE5TU3RyaW5nICpyYXdUZXh0ID0gW1pYUmVzdWx0UGFyc2VyIG1hc3NhZ2VkVGV4dDpyZXN1bHRdOworICBpZiAoIVtyYXdUZXh0IGhhc1ByZWZpeDpAIkJJWkNBUkQ6Il0pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TU3RyaW5nICpmaXJzdE5hbWUgPSBbW3NlbGYgY2xhc3NdIG1hdGNoU2luZ2xlRG9Db01vUHJlZml4ZWRGaWVsZDpAIk46IiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworICBOU1N0cmluZyAqbGFzdE5hbWUgPSBbW3NlbGYgY2xhc3NdIG1hdGNoU2luZ2xlRG9Db01vUHJlZml4ZWRGaWVsZDpAIlg6IiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworICBOU1N0cmluZyAqZnVsbE5hbWUgPSBbc2VsZiBidWlsZE5hbWU6Zmlyc3ROYW1lIGxhc3ROYW1lOmxhc3ROYW1lXTsKKyAgTlNTdHJpbmcgKnRpdGxlID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZURvQ29Nb1ByZWZpeGVkRmllbGQ6QCJUOiIgcmF3VGV4dDpyYXdUZXh0IHRyaW06WUVTXTsKKyAgTlNTdHJpbmcgKm9yZyA9IFtbc2VsZiBjbGFzc10gbWF0Y2hTaW5nbGVEb0NvTW9QcmVmaXhlZEZpZWxkOkAiQzoiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIE5TQXJyYXkgKmFkZHJlc3NlcyA9IFtbc2VsZiBjbGFzc10gbWF0Y2hEb0NvTW9QcmVmaXhlZEZpZWxkOkAiQToiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIE5TU3RyaW5nICpwaG9uZU51bWJlcjEgPSBbW3NlbGYgY2xhc3NdIG1hdGNoU2luZ2xlRG9Db01vUHJlZml4ZWRGaWVsZDpAIkI6IiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworICBOU1N0cmluZyAqcGhvbmVOdW1iZXIyID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZURvQ29Nb1ByZWZpeGVkRmllbGQ6QCJNOiIgcmF3VGV4dDpyYXdUZXh0IHRyaW06WUVTXTsKKyAgTlNTdHJpbmcgKnBob25lTnVtYmVyMyA9IFtbc2VsZiBjbGFzc10gbWF0Y2hTaW5nbGVEb0NvTW9QcmVmaXhlZEZpZWxkOkAiRjoiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIE5TU3RyaW5nICplbWFpbCA9IFtbc2VsZiBjbGFzc10gbWF0Y2hTaW5nbGVEb0NvTW9QcmVmaXhlZEZpZWxkOkAiRToiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisKKyAgcmV0dXJuIFtaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0IGFkZHJlc3NCb29rUGFyc2VkUmVzdWx0V2l0aE5hbWVzOltzZWxmIG1heWJlV3JhcDpmdWxsTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlja25hbWVzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb251bmNpYXRpb246bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lTnVtYmVyczpbc2VsZiBidWlsZFBob25lTnVtYmVyczpwaG9uZU51bWJlcjEgbnVtYmVyMjpwaG9uZU51bWJlcjIgbnVtYmVyMzpwaG9uZU51bWJlcjNdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVUeXBlczpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxzOltzZWxmIG1heWJlV3JhcDplbWFpbF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbFR5cGVzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbnRNZXNzZW5nZXI6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzOmFkZHJlc3NlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzVHlwZXM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZzpvcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpcnRoZGF5Om5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6dGl0bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW86bmlsXTsKK30KKworLSAoTlNBcnJheSAqKWJ1aWxkUGhvbmVOdW1iZXJzOihOU1N0cmluZyAqKW51bWJlcjEgbnVtYmVyMjooTlNTdHJpbmcgKiludW1iZXIyIG51bWJlcjM6KE5TU3RyaW5nICopbnVtYmVyMyB7CisgIE5TTXV0YWJsZUFycmF5ICpudW1iZXJzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OjNdOworICBpZiAobnVtYmVyMSAhPSBuaWwpIHsKKyAgICBbbnVtYmVycyBhZGRPYmplY3Q6bnVtYmVyMV07CisgIH0KKyAgaWYgKG51bWJlcjIgIT0gbmlsKSB7CisgICAgW251bWJlcnMgYWRkT2JqZWN0Om51bWJlcjJdOworICB9CisgIGlmIChudW1iZXIzICE9IG5pbCkgeworICAgIFtudW1iZXJzIGFkZE9iamVjdDpudW1iZXIzXTsKKyAgfQorICBOU1VJbnRlZ2VyIHNpemUgPSBbbnVtYmVycyBjb3VudF07CisgIGlmIChzaXplID09IDApIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6ZV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgW3Jlc3VsdCBhZGRPYmplY3Q6bnVtYmVyc1tpXV07CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNTdHJpbmcgKilidWlsZE5hbWU6KE5TU3RyaW5nICopZmlyc3ROYW1lIGxhc3ROYW1lOihOU1N0cmluZyAqKWxhc3ROYW1lIHsKKyAgaWYgKGZpcnN0TmFtZSA9PSBuaWwpIHsKKyAgICByZXR1cm4gbGFzdE5hbWU7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGxhc3ROYW1lID09IG5pbCA/IGZpcnN0TmFtZSA6IFtbZmlyc3ROYW1lIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiICJdIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmxhc3ROYW1lXTsKKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5Y2EyZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQm9va21hcmtEb0NvTW9SZXN1bHRQYXJzZXIuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFic3RyYWN0RG9Db01vUmVzdWx0UGFyc2VyLmgiCisKK0BpbnRlcmZhY2UgWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlciA6IFpYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlci5tIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZjUwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyLm0KQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKyNpbXBvcnQgIlpYVVJJUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWFVSSVJlc3VsdFBhcnNlci5oIgorCitAaW1wbGVtZW50YXRpb24gWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlcgorCistIChaWFBhcnNlZFJlc3VsdCAqKXBhcnNlOihaWFJlc3VsdCAqKXJlc3VsdCB7CisgIE5TU3RyaW5nICpyYXdUZXh0ID0gW3Jlc3VsdCB0ZXh0XTsKKyAgaWYgKCFbcmF3VGV4dCBoYXNQcmVmaXg6QCJNRUJLTToiXSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNTdHJpbmcgKnRpdGxlID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZURvQ29Nb1ByZWZpeGVkRmllbGQ6QCJUSVRMRToiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIE5TQXJyYXkgKnJhd1VyaSA9IFtbc2VsZiBjbGFzc10gbWF0Y2hEb0NvTW9QcmVmaXhlZEZpZWxkOkAiVVJMOiIgcmF3VGV4dDpyYXdUZXh0IHRyaW06WUVTXTsKKyAgaWYgKHJhd1VyaSA9PSBuaWwpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TU3RyaW5nICp1cmkgPSByYXdVcmlbMF07CisgIGlmICghW1pYVVJJUmVzdWx0UGFyc2VyIGlzQmFzaWNhbGx5VmFsaWRVUkk6dXJpXSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgcmV0dXJuIFtaWFVSSVBhcnNlZFJlc3VsdCB1cmlQYXJzZWRSZXN1bHRXaXRoVXJpOnVyaSB0aXRsZTp0aXRsZV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQ2FsZW5kYXJQYXJzZWRSZXN1bHQuaCBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYQ2FsZW5kYXJQYXJzZWRSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGZhMzhiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhDYWxlbmRhclBhcnNlZFJlc3VsdCA6IFpYUGFyc2VkUmVzdWx0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBOU1N0cmluZyAqc3VtbWFyeTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBOU0RhdGUgKnN0YXJ0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHN0YXJ0QWxsRGF5OworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIE5TRGF0ZSAqZW5kOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGVuZEFsbERheTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBOU1N0cmluZyAqbG9jYXRpb247CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgTlNTdHJpbmcgKm9yZ2FuaXplcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBOU0FycmF5ICphdHRlbmRlZXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgTlNTdHJpbmcgKnp4RGVzY3JpcHRpb247CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIGRvdWJsZSBsYXRpdHVkZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgZG91YmxlIGxvbmdpdHVkZTsKKworLSAoaWQpaW5pdFdpdGhTdW1tYXJ5OihOU1N0cmluZyAqKXN1bW1hcnkgc3RhcnRTdHJpbmc6KE5TU3RyaW5nICopc3RhcnRTdHJpbmcgZW5kU3RyaW5nOihOU1N0cmluZyAqKWVuZFN0cmluZworICAgICAgIGR1cmF0aW9uU3RyaW5nOihOU1N0cmluZyAqKWR1cmF0aW9uU3RyaW5nIGxvY2F0aW9uOihOU1N0cmluZyAqKWxvY2F0aW9uIG9yZ2FuaXplcjooTlNTdHJpbmcgKilvcmdhbml6ZXIKKyAgICAgICAgICAgIGF0dGVuZGVlczooTlNBcnJheSAqKWF0dGVuZGVlcyBkZXNjcmlwdGlvbjooTlNTdHJpbmcgKilkZXNjcmlwdGlvbiBsYXRpdHVkZTooZG91YmxlKWxhdGl0dWRlCisgICAgICAgICAgICBsb25naXR1ZGU6KGRvdWJsZSlsb25naXR1ZGU7CisrIChpZCljYWxlbmRhclBhcnNlZFJlc3VsdFdpdGhTdW1tYXJ5OihOU1N0cmluZyAqKXN1bW1hcnkgc3RhcnRTdHJpbmc6KE5TU3RyaW5nICopc3RhcnRTdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRTdHJpbmc6KE5TU3RyaW5nICopZW5kU3RyaW5nIGR1cmF0aW9uU3RyaW5nOihOU1N0cmluZyAqKWR1cmF0aW9uU3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOihOU1N0cmluZyAqKWxvY2F0aW9uIG9yZ2FuaXplcjooTlNTdHJpbmcgKilvcmdhbml6ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbmRlZXM6KE5TQXJyYXkgKilhdHRlbmRlZXMgZGVzY3JpcHRpb246KE5TU3RyaW5nICopZGVzY3JpcHRpb24gbGF0aXR1ZGU6KGRvdWJsZSlsYXRpdHVkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTooZG91YmxlKWxvbmdpdHVkZTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5tIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NzkzODQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWENhbGVuZGFyUGFyc2VkUmVzdWx0Lm0KQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQ2FsZW5kYXJQYXJzZWRSZXN1bHQuaCIKKworc3RhdGljIE5TUmVndWxhckV4cHJlc3Npb24gKkRBVEVfVElNRSA9IG5pbDsKK3N0YXRpYyBOU1JlZ3VsYXJFeHByZXNzaW9uICpSRkMyNDQ1X0RVUkFUSU9OID0gbmlsOworc3RhdGljIE5TRGF0ZUZvcm1hdHRlciAqREFURV9GT1JNQVQgPSBuaWw7CitzdGF0aWMgTlNEYXRlRm9ybWF0dGVyICpEQVRFX1RJTUVfRk9STUFUID0gbmlsOworCitjb25zdCBpbnQgUkZDMjQ0NV9EVVJBVElPTl9GSUVMRF9VTklUU19MRU4gPSA1OworY29uc3QgbG9uZyBSRkMyNDQ1X0RVUkFUSU9OX0ZJRUxEX1VOSVRTW1JGQzI0NDVfRFVSQVRJT05fRklFTERfVU5JVFNfTEVOXSA9IHsKKyAgNyAqIDI0ICogNjAgKiA2MCAqIDEwMDAsIC8vIDEgd2VlaworICAyNCAqIDYwICogNjAgKiAxMDAwLCAvLyAxIGRheQorICA2MCAqIDYwICogMTAwMCwgLy8gMSBob3VyCisgIDYwICogMTAwMCwgLy8gMSBtaW51dGUKKyAgMTAwMCwgLy8gMSBzZWNvbmQKK307CisKK0BpbXBsZW1lbnRhdGlvbiBaWENhbGVuZGFyUGFyc2VkUmVzdWx0CisKKysgKHZvaWQpaW5pdGlhbGl6ZSB7CisgIERBVEVfVElNRSA9IFtbTlNSZWd1bGFyRXhwcmVzc2lvbiBhbGxvY10gaW5pdFdpdGhQYXR0ZXJuOkAiWzAtOV17OH0oVFswLTldezZ9Wj8pPyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjpuaWxdOworCisgIFJGQzI0NDVfRFVSQVRJT04gPSBbW05TUmVndWxhckV4cHJlc3Npb24gYWxsb2NdIGluaXRXaXRoUGF0dGVybjpAIlAoPzooXFxkKylXKT8oPzooXFxkKylEKT8oPzpUKD86KFxcZCspSCk/KD86KFxcZCspTSk/KD86KFxcZCspUyk/KT8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczpOU1JlZ3VsYXJFeHByZXNzaW9uQ2FzZUluc2Vuc2l0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjpuaWxdOworCisgIERBVEVfRk9STUFUID0gW1tOU0RhdGVGb3JtYXR0ZXIgYWxsb2NdIGluaXRdOworICBEQVRFX0ZPUk1BVC5kYXRlRm9ybWF0ID0gQCJ5eXl5TU1kZCI7CisKKyAgREFURV9USU1FX0ZPUk1BVCA9IFtbTlNEYXRlRm9ybWF0dGVyIGFsbG9jXSBpbml0XTsKKyAgREFURV9USU1FX0ZPUk1BVC5kYXRlRm9ybWF0ID0gQCJ5eXl5TU1kZCdUJ0hIbW1zcyI7Cit9CisKKy0gKGlkKWluaXRXaXRoU3VtbWFyeTooTlNTdHJpbmcgKilzdW1tYXJ5IHN0YXJ0U3RyaW5nOihOU1N0cmluZyAqKXN0YXJ0U3RyaW5nIGVuZFN0cmluZzooTlNTdHJpbmcgKillbmRTdHJpbmcKKyAgICAgICBkdXJhdGlvblN0cmluZzooTlNTdHJpbmcgKilkdXJhdGlvblN0cmluZyBsb2NhdGlvbjooTlNTdHJpbmcgKilsb2NhdGlvbiBvcmdhbml6ZXI6KE5TU3RyaW5nICopb3JnYW5pemVyCisgICAgICAgICAgICBhdHRlbmRlZXM6KE5TQXJyYXkgKilhdHRlbmRlZXMgZGVzY3JpcHRpb246KE5TU3RyaW5nICopZGVzY3JpcHRpb24gbGF0aXR1ZGU6KGRvdWJsZSlsYXRpdHVkZQorICAgICAgICAgICAgbG9uZ2l0dWRlOihkb3VibGUpbG9uZ2l0dWRlIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhUeXBlOmtQYXJzZWRSZXN1bHRUeXBlQ2FsZW5kYXJdKSB7CisgICAgX3N1bW1hcnkgPSBzdW1tYXJ5OworICAgIF9zdGFydCA9IFtzZWxmIHBhcnNlRGF0ZTpzdGFydFN0cmluZ107CisKKyAgICBpZiAoZW5kU3RyaW5nID09IG5pbCkgeworICAgICAgbG9uZyBkdXJhdGlvbk1TID0gW3NlbGYgcGFyc2VEdXJhdGlvbk1TOmR1cmF0aW9uU3RyaW5nXTsKKyAgICAgIF9lbmQgPSBkdXJhdGlvbk1TIDwgMCA/IG5pbCA6IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6W19zdGFydCB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdICsgZHVyYXRpb25NUyAvIDEwMDBdOworICAgIH0gZWxzZSB7CisgICAgICBfZW5kID0gW3NlbGYgcGFyc2VEYXRlOmVuZFN0cmluZ107CisgICAgfQorCisgICAgX3N0YXJ0QWxsRGF5ID0gc3RhcnRTdHJpbmcubGVuZ3RoID09IDg7CisgICAgX2VuZEFsbERheSA9IGVuZFN0cmluZyAhPSBuaWwgJiYgZW5kU3RyaW5nLmxlbmd0aCA9PSA4OworCisgICAgX2xvY2F0aW9uID0gbG9jYXRpb247CisgICAgX29yZ2FuaXplciA9IG9yZ2FuaXplcjsKKyAgICBfYXR0ZW5kZWVzID0gYXR0ZW5kZWVzOworICAgIF96eERlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgX2xhdGl0dWRlID0gbGF0aXR1ZGU7CisgICAgX2xvbmdpdHVkZSA9IGxvbmdpdHVkZTsKKyAgfQorICByZXR1cm4gc2VsZjsKK30KKworKyAoaWQpY2FsZW5kYXJQYXJzZWRSZXN1bHRXaXRoU3VtbWFyeTooTlNTdHJpbmcgKilzdW1tYXJ5IHN0YXJ0U3RyaW5nOihOU1N0cmluZyAqKXN0YXJ0U3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3RyaW5nOihOU1N0cmluZyAqKWVuZFN0cmluZyBkdXJhdGlvblN0cmluZzooTlNTdHJpbmcgKilkdXJhdGlvblN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjooTlNTdHJpbmcgKilsb2NhdGlvbiBvcmdhbml6ZXI6KE5TU3RyaW5nICopb3JnYW5pemVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZW5kZWVzOihOU0FycmF5ICopYXR0ZW5kZWVzIGRlc2NyaXB0aW9uOihOU1N0cmluZyAqKWRlc2NyaXB0aW9uIGxhdGl0dWRlOihkb3VibGUpbGF0aXR1ZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25naXR1ZGU6KGRvdWJsZSlsb25naXR1ZGUgeworICByZXR1cm4gW1tzZWxmIGFsbG9jXSBpbml0V2l0aFN1bW1hcnk6c3VtbWFyeSBzdGFydFN0cmluZzpzdGFydFN0cmluZyBlbmRTdHJpbmc6ZW5kU3RyaW5nIGR1cmF0aW9uU3RyaW5nOmR1cmF0aW9uU3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpsb2NhdGlvbiBvcmdhbml6ZXI6b3JnYW5pemVyIGF0dGVuZGVlczphdHRlbmRlZXMgZGVzY3JpcHRpb246ZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGl0dWRlOmxhdGl0dWRlIGxvbmdpdHVkZTpsb25naXR1ZGVdOworfQorCistIChOU1N0cmluZyAqKWRpc3BsYXlSZXN1bHQgeworICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OjEwMF07CisgIFtaWFBhcnNlZFJlc3VsdCBtYXliZUFwcGVuZDpzZWxmLnN1bW1hcnkgcmVzdWx0OnJlc3VsdF07CisgIFtaWFBhcnNlZFJlc3VsdCBtYXliZUFwcGVuZDpbc2VsZiBmb3JtYXQ6c2VsZi5zdGFydEFsbERheSBkYXRlOnNlbGYuc3RhcnRdIHJlc3VsdDpyZXN1bHRdOworICBbWlhQYXJzZWRSZXN1bHQgbWF5YmVBcHBlbmQ6W3NlbGYgZm9ybWF0OnNlbGYuZW5kQWxsRGF5IGRhdGU6c2VsZi5lbmRdIHJlc3VsdDpyZXN1bHRdOworICBbWlhQYXJzZWRSZXN1bHQgbWF5YmVBcHBlbmQ6c2VsZi5sb2NhdGlvbiByZXN1bHQ6cmVzdWx0XTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kOnNlbGYub3JnYW5pemVyIHJlc3VsdDpyZXN1bHRdOworICBbWlhQYXJzZWRSZXN1bHQgbWF5YmVBcHBlbmRBcnJheTpzZWxmLmF0dGVuZGVlcyByZXN1bHQ6cmVzdWx0XTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kOnNlbGYuenhEZXNjcmlwdGlvbiByZXN1bHQ6cmVzdWx0XTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIFBhcnNlcyBhIHN0cmluZyBhcyBhIGRhdGUuIFJGQyAyNDQ1IGFsbG93cyB0aGUgc3RhcnQgYW5kIGVuZCBmaWVsZHMgdG8gYmUgb2YgdHlwZSBEQVRFIChlLmcuIDIwMDgxMDIxKQorICogb3IgREFURS1USU1FIChlLmcuIDIwMDgxMDIxVDEyMzAwMCBmb3IgbG9jYWwgdGltZSwgb3IgMjAwODEwMjFUMTIzMDAwWiBmb3IgVVRDKS4KKyAqLworLSAoTlNEYXRlICopcGFyc2VEYXRlOihOU1N0cmluZyAqKXdoZW4geworICBOU0FycmF5ICptYXRjaGVzID0gW0RBVEVfVElNRSBtYXRjaGVzSW5TdHJpbmc6d2hlbiBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgd2hlbi5sZW5ndGgpXTsKKyAgaWYgKG1hdGNoZXMuY291bnQgPT0gMCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIGZvcm1hdDpAIkludmFsaWQgZGF0ZSJdOworICB9CisgIGlmICh3aGVuLmxlbmd0aCA9PSA4KSB7CisgICAgLy8gU2hvdyBvbmx5IHllYXIvbW9udGgvZGF5CisgICAgcmV0dXJuIFtEQVRFX0ZPUk1BVCBkYXRlRnJvbVN0cmluZzp3aGVuXTsKKyAgfSBlbHNlIHsKKyAgICAvLyBUaGUgd2hlbiBzdHJpbmcgY2FuIGJlIGxvY2FsIHRpbWUsIG9yIFVUQyBpZiBpdCBlbmRzIHdpdGggYSBaCisgICAgaWYgKHdoZW4ubGVuZ3RoID09IDE2ICYmIFt3aGVuIGNoYXJhY3RlckF0SW5kZXg6MTVdID09ICdaJykgeworICAgICAgcmV0dXJuIFtEQVRFX1RJTUVfRk9STUFUIGRhdGVGcm9tU3RyaW5nOlt3aGVuIHN1YnN0cmluZ1RvSW5kZXg6MTVdXTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIFtEQVRFX1RJTUVfRk9STUFUIGRhdGVGcm9tU3RyaW5nOndoZW5dOworICAgIH0KKyAgfQorfQorCistIChOU1N0cmluZyAqKWZvcm1hdDooQk9PTClhbGxEYXkgZGF0ZTooTlNEYXRlICopZGF0ZSB7CisgIGlmIChkYXRlID09IG5pbCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNEYXRlRm9ybWF0dGVyICpmb3JtYXQgPSBbW05TRGF0ZUZvcm1hdHRlciBhbGxvY10gaW5pdF07CisgIGZvcm1hdC5kYXRlRm9ybWF0ID0gYWxsRGF5ID8gQCJNTU0gZCwgeXl5eSIgOiBAIk1NTSBkLCB5eXl5IGhoOm1tOnNzIGEiOworICByZXR1cm4gW2Zvcm1hdCBzdHJpbmdGcm9tRGF0ZTpkYXRlXTsKK30KKworLSAobG9uZylwYXJzZUR1cmF0aW9uTVM6KE5TU3RyaW5nICopZHVyYXRpb25TdHJpbmcgeworICBpZiAoZHVyYXRpb25TdHJpbmcgPT0gbmlsKSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIE5TQXJyYXkgKm0gPSBbUkZDMjQ0NV9EVVJBVElPTiBtYXRjaGVzSW5TdHJpbmc6ZHVyYXRpb25TdHJpbmcgb3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKDAsIGR1cmF0aW9uU3RyaW5nLmxlbmd0aCldOworICBpZiAobS5jb3VudCA9PSAwKSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIGxvbmcgZHVyYXRpb25NUyA9IDA7CisgIE5TVGV4dENoZWNraW5nUmVzdWx0ICptYXRjaCA9IG1bMF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgUkZDMjQ0NV9EVVJBVElPTl9GSUVMRF9VTklUU19MRU47IGkrKykgeworICAgIGlmIChbbWF0Y2ggcmFuZ2VBdEluZGV4OmkgKyAxXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSB7CisgICAgICBOU1N0cmluZyAqZmllbGRWYWx1ZSA9IFtkdXJhdGlvblN0cmluZyBzdWJzdHJpbmdXaXRoUmFuZ2U6W21hdGNoIHJhbmdlQXRJbmRleDppICsgMV1dOworICAgICAgaWYgKGZpZWxkVmFsdWUgIT0gbmlsKSB7CisgICAgICAgIGR1cmF0aW9uTVMgKz0gUkZDMjQ0NV9EVVJBVElPTl9GSUVMRF9VTklUU1tpXSAqIFtmaWVsZFZhbHVlIGludFZhbHVlXTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGR1cmF0aW9uTVM7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0LmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NTAxMGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQgOiBaWFBhcnNlZFJlc3VsdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpib2R5OworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqZW1haWxBZGRyZXNzOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqbWFpbHRvVVJJOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqc3ViamVjdDsKKworLSAoaWQpaW5pdFdpdGhFbWFpbEFkZHJlc3M6KE5TU3RyaW5nICopZW1haWxBZGRyZXNzIHN1YmplY3Q6KE5TU3RyaW5nICopc3ViamVjdCBib2R5OihOU1N0cmluZyAqKWJvZHkKKyAgICAgICAgICAgICAgICAgbWFpbHRvVVJJOihOU1N0cmluZyAqKW1haWx0b1VSSTsKKysgKGlkKWVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdFdpdGhFbWFpbEFkZHJlc3M6KE5TU3RyaW5nICopZW1haWxBZGRyZXNzIHN1YmplY3Q6KE5TU3RyaW5nICopc3ViamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTooTlNTdHJpbmcgKilib2R5IG1haWx0b1VSSTooTlNTdHJpbmcgKiltYWlsdG9VUkk7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0Lm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZmMwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5tCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWFBhcnNlZFJlc3VsdFR5cGUuaCIKKworQGltcGxlbWVudGF0aW9uIFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0CisKKy0gKGlkKWluaXRXaXRoRW1haWxBZGRyZXNzOihOU1N0cmluZyAqKWVtYWlsQWRkcmVzcyBzdWJqZWN0OihOU1N0cmluZyAqKXN1YmplY3QgYm9keTooTlNTdHJpbmcgKilib2R5IG1haWx0b1VSSTooTlNTdHJpbmcgKiltYWlsdG9VUkkgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0V2l0aFR5cGU6a1BhcnNlZFJlc3VsdFR5cGVFbWFpbEFkZHJlc3NdKSB7CisgICAgX2VtYWlsQWRkcmVzcyA9IGVtYWlsQWRkcmVzczsKKyAgICBfc3ViamVjdCA9IHN1YmplY3Q7CisgICAgX2JvZHkgPSBib2R5OworICAgIF9tYWlsdG9VUkkgPSBtYWlsdG9VUkk7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworKyAoaWQpZW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0V2l0aEVtYWlsQWRkcmVzczooTlNTdHJpbmcgKillbWFpbEFkZHJlc3Mgc3ViamVjdDooTlNTdHJpbmcgKilzdWJqZWN0IGJvZHk6KE5TU3RyaW5nICopYm9keSBtYWlsdG9VUkk6KE5TU3RyaW5nICopbWFpbHRvVVJJIHsKKyAgcmV0dXJuIFtbc2VsZiBhbGxvY10gaW5pdFdpdGhFbWFpbEFkZHJlc3M6ZW1haWxBZGRyZXNzIHN1YmplY3Q6c3ViamVjdCBib2R5OmJvZHkgbWFpbHRvVVJJOm1haWx0b1VSSV07Cit9CisKKy0gKE5TU3RyaW5nICopZGlzcGxheVJlc3VsdCB7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6MzBdOworICBbWlhQYXJzZWRSZXN1bHQgbWF5YmVBcHBlbmQ6c2VsZi5lbWFpbEFkZHJlc3MgcmVzdWx0OnJlc3VsdF07CisgIFtaWFBhcnNlZFJlc3VsdCBtYXliZUFwcGVuZDpzZWxmLnN1YmplY3QgcmVzdWx0OnJlc3VsdF07CisgIFtaWFBhcnNlZFJlc3VsdCBtYXliZUFwcGVuZDpzZWxmLmJvZHkgcmVzdWx0OnJlc3VsdF07CisgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyLmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsQWRkcmVzc1Jlc3VsdFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNzY3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsQWRkcmVzc1Jlc3VsdFBhcnNlci5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUmVzdWx0UGFyc2VyLmgiCisKKy8qKgorICogUmVwcmVzZW50cyBhIHJlc3VsdCB0aGF0IGVuY29kZXMgYW4gZS1tYWlsIGFkZHJlc3MsIGVpdGhlciBhcyBhIHBsYWluIGFkZHJlc3MKKyAqIGxpa2UgImpvZUBleGFtcGxlLm9yZyIgb3IgYSBtYWlsdG86IFVSTCBsaWtlICJtYWlsdG86am9lQGV4YW1wbGUub3JnIi4KKyAqLworCitAaW50ZXJmYWNlIFpYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyIDogWlhSZXN1bHRQYXJzZXIKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIubSBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiNWM4MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyLm0KQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFJlc3VsdC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhFbWFpbEFkZHJlc3NSZXN1bHRQYXJzZXIKKworLSAoWlhQYXJzZWRSZXN1bHQgKilwYXJzZTooWlhSZXN1bHQgKilyZXN1bHQgeworICBOU1N0cmluZyAqcmF3VGV4dCA9IFtaWFJlc3VsdFBhcnNlciBtYXNzYWdlZFRleHQ6cmVzdWx0XTsKKyAgTlNTdHJpbmcgKmVtYWlsQWRkcmVzczsKKyAgaWYgKFtyYXdUZXh0IGhhc1ByZWZpeDpAIm1haWx0bzoiXSB8fCBbcmF3VGV4dCBoYXNQcmVmaXg6QCJNQUlMVE86Il0pIHsKKyAgICBlbWFpbEFkZHJlc3MgPSBbcmF3VGV4dCBzdWJzdHJpbmdGcm9tSW5kZXg6N107CisgICAgTlNVSW50ZWdlciBxdWVyeVN0YXJ0ID0gW2VtYWlsQWRkcmVzcyByYW5nZU9mU3RyaW5nOkAiPyJdLmxvY2F0aW9uOworICAgIGlmIChxdWVyeVN0YXJ0ICE9IE5TTm90Rm91bmQpIHsKKyAgICAgIGVtYWlsQWRkcmVzcyA9IFtlbWFpbEFkZHJlc3Mgc3Vic3RyaW5nVG9JbmRleDpxdWVyeVN0YXJ0XTsKKyAgICB9CisgICAgZW1haWxBZGRyZXNzID0gW1tzZWxmIGNsYXNzXSB1cmxEZWNvZGU6ZW1haWxBZGRyZXNzXTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpuYW1lVmFsdWVzID0gW3NlbGYgcGFyc2VOYW1lVmFsdWVQYWlyczpyYXdUZXh0XTsKKyAgICBOU1N0cmluZyAqc3ViamVjdCA9IG5pbDsKKyAgICBOU1N0cmluZyAqYm9keSA9IG5pbDsKKyAgICBpZiAobmFtZVZhbHVlcyAhPSBuaWwpIHsKKyAgICAgIGlmIChbZW1haWxBZGRyZXNzIGxlbmd0aF0gPT0gMCkgeworICAgICAgICBlbWFpbEFkZHJlc3MgPSBuYW1lVmFsdWVzW0AidG8iXTsKKyAgICAgIH0KKyAgICAgIHN1YmplY3QgPSBuYW1lVmFsdWVzW0Aic3ViamVjdCJdOworICAgICAgYm9keSA9IG5hbWVWYWx1ZXNbQCJib2R5Il07CisgICAgfQorICAgIHJldHVybiBbWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQgZW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0V2l0aEVtYWlsQWRkcmVzczplbWFpbEFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3Q6c3ViamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTpib2R5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbHRvVVJJOnJhd1RleHRdOworICB9IGVsc2UgeworICAgIGlmICghW1pYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIgaXNCYXNpY2FsbHlWYWxpZEVtYWlsQWRkcmVzczpyYXdUZXh0XSkgeworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgZW1haWxBZGRyZXNzID0gcmF3VGV4dDsKKyAgICByZXR1cm4gW1pYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0IGVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdFdpdGhFbWFpbEFkZHJlc3M6ZW1haWxBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0Om5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlsdG9VUkk6W0AibWFpbHRvOiIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6ZW1haWxBZGRyZXNzXV07CisgIH0KK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlci5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOGI1NTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBYnN0cmFjdERvQ29Nb1Jlc3VsdFBhcnNlci5oIgorCisvKioKKyAqIEltcGxlbWVudHMgdGhlICJNQVRNU0ciIGVtYWlsIG1lc3NhZ2UgZW50cnkgZm9ybWF0LgorICogCisgKiBTdXBwb3J0ZWQga2V5czogVE8sIFNVQiwgQk9EWQorICovCisKK0BpbnRlcmZhY2UgWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlciA6IFpYQWJzdHJhY3REb0NvTW9SZXN1bHRQYXJzZXIKKworKyAoQk9PTClpc0Jhc2ljYWxseVZhbGlkRW1haWxBZGRyZXNzOihOU1N0cmluZyAqKWVtYWlsOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I1ZTA3ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIubQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhFbWFpbERvQ29Nb1Jlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKworc3RhdGljIE5TUmVndWxhckV4cHJlc3Npb24gKkFURVhUX0FMUEhBTlVNRVJJQyA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFpYRW1haWxEb0NvTW9SZXN1bHRQYXJzZXIKKworKyAodm9pZClpbml0aWFsaXplIHsKKyAgQVRFWFRfQUxQSEFOVU1FUklDID0gW1tOU1JlZ3VsYXJFeHByZXNzaW9uIGFsbG9jXSBpbml0V2l0aFBhdHRlcm46QCJeW2EtekEtWjAtOUAuISMkJSYnKitcXC0vPT9eX2B7fH1+XSskIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczowIGVycm9yOm5pbF07Cit9CisKKy0gKFpYUGFyc2VkUmVzdWx0ICopcGFyc2U6KFpYUmVzdWx0ICopcmVzdWx0IHsKKyAgTlNTdHJpbmcgKnJhd1RleHQgPSBbWlhSZXN1bHRQYXJzZXIgbWFzc2FnZWRUZXh0OnJlc3VsdF07CisgIGlmICghW3Jhd1RleHQgaGFzUHJlZml4OkAiTUFUTVNHOiJdKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU0FycmF5ICpyYXdUbyA9IFtbc2VsZiBjbGFzc10gbWF0Y2hEb0NvTW9QcmVmaXhlZEZpZWxkOkAiVE86IiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworICBpZiAocmF3VG8gPT0gbmlsKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU1N0cmluZyAqdG8gPSByYXdUb1swXTsKKyAgaWYgKCFbW3NlbGYgY2xhc3NdIGlzQmFzaWNhbGx5VmFsaWRFbWFpbEFkZHJlc3M6dG9dKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU1N0cmluZyAqc3ViamVjdCA9IFtbc2VsZiBjbGFzc10gbWF0Y2hTaW5nbGVEb0NvTW9QcmVmaXhlZEZpZWxkOkAiU1VCOiIgcmF3VGV4dDpyYXdUZXh0IHRyaW06Tk9dOworICBOU1N0cmluZyAqYm9keSA9IFtbc2VsZiBjbGFzc10gbWF0Y2hTaW5nbGVEb0NvTW9QcmVmaXhlZEZpZWxkOkAiQk9EWToiIHJhd1RleHQ6cmF3VGV4dCB0cmltOk5PXTsKKworICByZXR1cm4gW1pYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0IGVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdFdpdGhFbWFpbEFkZHJlc3M6dG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0OnN1YmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OmJvZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbHRvVVJJOltAIm1haWx0bzoiIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOnRvXV07Cit9CisKKworLyoqCisgKiBUaGlzIGltcGxlbWVudHMgb25seSB0aGUgbW9zdCBiYXNpYyBjaGVja2luZyBmb3IgYW4gZW1haWwgYWRkcmVzcydzIHZhbGlkaXR5IC0tIHRoYXQgaXQgY29udGFpbnMKKyAqIGFuICdAJyBhbmQgY29udGFpbnMgbm8gY2hhcmFjdGVycyBkaXNhbGxvd2VkIGJ5IFJGQyAyODIyLiBUaGlzIGlzIGFuIG92ZXJseSBsZW5pZW50IGRlZmluaXRpb24gb2YKKyAqIHZhbGlkaXR5LiBXZSB3YW50IHRvIGdlbmVyYWxseSBiZSBsZW5pZW50IGhlcmUgc2luY2UgdGhpcyBjbGFzcyBpcyBvbmx5IGludGVuZGVkIHRvIGVuY2Fwc3VsYXRlIHdoYXQncworICogaW4gYSBiYXJjb2RlLCBub3QgImp1ZGdlIiBpdC4KKyAqLworKyAoQk9PTClpc0Jhc2ljYWxseVZhbGlkRW1haWxBZGRyZXNzOihOU1N0cmluZyAqKWVtYWlsIHsKKyAgcmV0dXJuIGVtYWlsICE9IG5pbCAmJiBbQVRFWFRfQUxQSEFOVU1FUklDIG51bWJlck9mTWF0Y2hlc0luU3RyaW5nOmVtYWlsIG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZSgwLCBlbWFpbC5sZW5ndGgpXSA+IDAgJiYgW2VtYWlsIHJhbmdlT2ZTdHJpbmc6QCJAIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQuaCBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0MWQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQYXJzZWRSZXN1bHQuaCIKKworZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgWlhfS0lMT0dSQU07CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBaWF9QT1VORDsKKworQGludGVyZmFjZSBaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdCA6IFpYUGFyc2VkUmVzdWx0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKnJhd1RleHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpwcm9kdWN0SUQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpzc2NjOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqbG90TnVtYmVyOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqcHJvZHVjdGlvbkRhdGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpwYWNrYWdpbmdEYXRlOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqYmVzdEJlZm9yZURhdGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpleHBpcmF0aW9uRGF0ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKndlaWdodDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKndlaWdodFR5cGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICp3ZWlnaHRJbmNyZW1lbnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpwcmljZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKnByaWNlSW5jcmVtZW50OworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqcHJpY2VDdXJyZW5jeTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBOU011dGFibGVEaWN0aW9uYXJ5ICp1bmNvbW1vbkFJczsKKworLSAoaWQpaW5pdFdpdGhSYXdUZXh0OihOU1N0cmluZyAqKXJhd1RleHQgcHJvZHVjdElEOihOU1N0cmluZyAqKXByb2R1Y3RJRCBzc2NjOihOU1N0cmluZyAqKXNzY2MKKyAgICAgICAgICAgIGxvdE51bWJlcjooTlNTdHJpbmcgKilsb3ROdW1iZXIgcHJvZHVjdGlvbkRhdGU6KE5TU3RyaW5nICopcHJvZHVjdGlvbkRhdGUKKyAgICAgICAgcGFja2FnaW5nRGF0ZTooTlNTdHJpbmcgKilwYWNrYWdpbmdEYXRlIGJlc3RCZWZvcmVEYXRlOihOU1N0cmluZyAqKWJlc3RCZWZvcmVEYXRlCisgICAgICAgZXhwaXJhdGlvbkRhdGU6KE5TU3RyaW5nICopZXhwaXJhdGlvbkRhdGUgd2VpZ2h0OihOU1N0cmluZyAqKXdlaWdodCB3ZWlnaHRUeXBlOihOU1N0cmluZyAqKXdlaWdodFR5cGUKKyAgICAgIHdlaWdodEluY3JlbWVudDooTlNTdHJpbmcgKil3ZWlnaHRJbmNyZW1lbnQgcHJpY2U6KE5TU3RyaW5nICopcHJpY2UgcHJpY2VJbmNyZW1lbnQ6KE5TU3RyaW5nICopcHJpY2VJbmNyZW1lbnQKKyAgICAgICAgcHJpY2VDdXJyZW5jeTooTlNTdHJpbmcgKilwcmljZUN1cnJlbmN5IHVuY29tbW9uQUlzOihOU011dGFibGVEaWN0aW9uYXJ5ICopdW5jb21tb25BSXM7CisrIChpZClleHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHRXaXRoUmF3VGV4dDooTlNTdHJpbmcgKilyYXdUZXh0IHByb2R1Y3RJRDooTlNTdHJpbmcgKilwcm9kdWN0SUQgc3NjYzooTlNTdHJpbmcgKilzc2NjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdE51bWJlcjooTlNTdHJpbmcgKilsb3ROdW1iZXIgcHJvZHVjdGlvbkRhdGU6KE5TU3RyaW5nICopcHJvZHVjdGlvbkRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdpbmdEYXRlOihOU1N0cmluZyAqKXBhY2thZ2luZ0RhdGUgYmVzdEJlZm9yZURhdGU6KE5TU3RyaW5nICopYmVzdEJlZm9yZURhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25EYXRlOihOU1N0cmluZyAqKWV4cGlyYXRpb25EYXRlIHdlaWdodDooTlNTdHJpbmcgKil3ZWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRUeXBlOihOU1N0cmluZyAqKXdlaWdodFR5cGUgd2VpZ2h0SW5jcmVtZW50OihOU1N0cmluZyAqKXdlaWdodEluY3JlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6KE5TU3RyaW5nICopcHJpY2UgcHJpY2VJbmNyZW1lbnQ6KE5TU3RyaW5nICopcHJpY2VJbmNyZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZUN1cnJlbmN5OihOU1N0cmluZyAqKXByaWNlQ3VycmVuY3kgdW5jb21tb25BSXM6KE5TTXV0YWJsZURpY3Rpb25hcnkgKil1bmNvbW1vbkFJczsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQubSBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIxN2RjOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0Lm0KQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0LmgiCisKK05TU3RyaW5nICogY29uc3QgWlhfS0lMT0dSQU0gPSBAIktHIjsKK05TU3RyaW5nICogY29uc3QgWlhfUE9VTkQgPSBAIkxCIjsKKworQGltcGxlbWVudGF0aW9uIFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0CisKKy0gKGlkKWluaXQgeworICByZXR1cm4gW3NlbGYgaW5pdFdpdGhSYXdUZXh0OkAiIiBwcm9kdWN0SUQ6QCIiIHNzY2M6QCIiIGxvdE51bWJlcjpAIiIgcHJvZHVjdGlvbkRhdGU6QCIiIHBhY2thZ2luZ0RhdGU6QCIiCisgICAgICAgICAgICAgICAgYmVzdEJlZm9yZURhdGU6QCIiIGV4cGlyYXRpb25EYXRlOkAiIiB3ZWlnaHQ6QCIiIHdlaWdodFR5cGU6QCIiIHdlaWdodEluY3JlbWVudDpAIiIgcHJpY2U6QCIiCisgICAgICAgICAgICAgICAgcHJpY2VJbmNyZW1lbnQ6QCIiIHByaWNlQ3VycmVuY3k6QCIiIHVuY29tbW9uQUlzOltOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldXTsKK30KKworLSAoaWQpaW5pdFdpdGhSYXdUZXh0OihOU1N0cmluZyAqKXJhd1RleHQgcHJvZHVjdElEOihOU1N0cmluZyAqKXByb2R1Y3RJRCBzc2NjOihOU1N0cmluZyAqKXNzY2MKKyAgICAgICAgICAgIGxvdE51bWJlcjooTlNTdHJpbmcgKilsb3ROdW1iZXIgcHJvZHVjdGlvbkRhdGU6KE5TU3RyaW5nICopcHJvZHVjdGlvbkRhdGUKKyAgICAgICAgcGFja2FnaW5nRGF0ZTooTlNTdHJpbmcgKilwYWNrYWdpbmdEYXRlIGJlc3RCZWZvcmVEYXRlOihOU1N0cmluZyAqKWJlc3RCZWZvcmVEYXRlCisgICAgICAgZXhwaXJhdGlvbkRhdGU6KE5TU3RyaW5nICopZXhwaXJhdGlvbkRhdGUgd2VpZ2h0OihOU1N0cmluZyAqKXdlaWdodCB3ZWlnaHRUeXBlOihOU1N0cmluZyAqKXdlaWdodFR5cGUKKyAgICAgIHdlaWdodEluY3JlbWVudDooTlNTdHJpbmcgKil3ZWlnaHRJbmNyZW1lbnQgcHJpY2U6KE5TU3RyaW5nICopcHJpY2UgcHJpY2VJbmNyZW1lbnQ6KE5TU3RyaW5nICopcHJpY2VJbmNyZW1lbnQKKyAgICAgICAgcHJpY2VDdXJyZW5jeTooTlNTdHJpbmcgKilwcmljZUN1cnJlbmN5IHVuY29tbW9uQUlzOihOU011dGFibGVEaWN0aW9uYXJ5ICopdW5jb21tb25BSXMgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0V2l0aFR5cGU6a1BhcnNlZFJlc3VsdFR5cGVQcm9kdWN0XSkgeworICAgIF9yYXdUZXh0ID0gcmF3VGV4dDsKKyAgICBfcHJvZHVjdElEID0gcHJvZHVjdElEOworICAgIF9zc2NjID0gc3NjYzsKKyAgICBfbG90TnVtYmVyID0gbG90TnVtYmVyOworICAgIF9wcm9kdWN0aW9uRGF0ZSA9IHByb2R1Y3Rpb25EYXRlOworICAgIF9wYWNrYWdpbmdEYXRlID0gcGFja2FnaW5nRGF0ZTsKKyAgICBfYmVzdEJlZm9yZURhdGUgPSBiZXN0QmVmb3JlRGF0ZTsKKyAgICBfZXhwaXJhdGlvbkRhdGUgPSBleHBpcmF0aW9uRGF0ZTsKKyAgICBfd2VpZ2h0ID0gd2VpZ2h0OworICAgIF93ZWlnaHRUeXBlID0gd2VpZ2h0VHlwZTsKKyAgICBfd2VpZ2h0SW5jcmVtZW50ID0gd2VpZ2h0SW5jcmVtZW50OworICAgIF9wcmljZSA9IHByaWNlOworICAgIF9wcmljZUluY3JlbWVudCA9IHByaWNlSW5jcmVtZW50OworICAgIF9wcmljZUN1cnJlbmN5ID0gcHJpY2VDdXJyZW5jeTsKKyAgICBfdW5jb21tb25BSXMgPSB1bmNvbW1vbkFJczsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisrIChpZClleHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHRXaXRoUmF3VGV4dDooTlNTdHJpbmcgKilyYXdUZXh0IHByb2R1Y3RJRDooTlNTdHJpbmcgKilwcm9kdWN0SUQgc3NjYzooTlNTdHJpbmcgKilzc2NjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdE51bWJlcjooTlNTdHJpbmcgKilsb3ROdW1iZXIgcHJvZHVjdGlvbkRhdGU6KE5TU3RyaW5nICopcHJvZHVjdGlvbkRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdpbmdEYXRlOihOU1N0cmluZyAqKXBhY2thZ2luZ0RhdGUgYmVzdEJlZm9yZURhdGU6KE5TU3RyaW5nICopYmVzdEJlZm9yZURhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25EYXRlOihOU1N0cmluZyAqKWV4cGlyYXRpb25EYXRlIHdlaWdodDooTlNTdHJpbmcgKil3ZWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRUeXBlOihOU1N0cmluZyAqKXdlaWdodFR5cGUgd2VpZ2h0SW5jcmVtZW50OihOU1N0cmluZyAqKXdlaWdodEluY3JlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6KE5TU3RyaW5nICopcHJpY2UgcHJpY2VJbmNyZW1lbnQ6KE5TU3RyaW5nICopcHJpY2VJbmNyZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZUN1cnJlbmN5OihOU1N0cmluZyAqKXByaWNlQ3VycmVuY3kgdW5jb21tb25BSXM6KE5TTXV0YWJsZURpY3Rpb25hcnkgKil1bmNvbW1vbkFJcyB7CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoUmF3VGV4dDpyYXdUZXh0IHByb2R1Y3RJRDpwcm9kdWN0SUQgc3NjYzpzc2NjIGxvdE51bWJlcjpsb3ROdW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rpb25EYXRlOnByb2R1Y3Rpb25EYXRlIHBhY2thZ2luZ0RhdGU6cGFja2FnaW5nRGF0ZSBiZXN0QmVmb3JlRGF0ZTpiZXN0QmVmb3JlRGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbkRhdGU6ZXhwaXJhdGlvbkRhdGUgd2VpZ2h0OndlaWdodCB3ZWlnaHRUeXBlOndlaWdodFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0SW5jcmVtZW50OndlaWdodEluY3JlbWVudCBwcmljZTpwcmljZSBwcmljZUluY3JlbWVudDpwcmljZUluY3JlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlQ3VycmVuY3k6cHJpY2VDdXJyZW5jeSB1bmNvbW1vbkFJczp1bmNvbW1vbkFJc107Cit9CisKKy0gKEJPT0wpaXNFcXVhbDooaWQpbyB7CisgIGlmICghW28gaXNLaW5kT2ZDbGFzczpbc2VsZiBjbGFzc11dKSB7CisgICAgcmV0dXJuIE5POworICB9CisKKyAgWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQgKm90aGVyID0gKFpYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0ICopbzsKKworICByZXR1cm4gW3NlbGYgZXF1YWxzT3JOaWw6c2VsZi5wcm9kdWN0SUQgbzI6b3RoZXIucHJvZHVjdElEXQorICAgICYmIFtzZWxmIGVxdWFsc09yTmlsOnNlbGYuc3NjYyBvMjpvdGhlci5zc2NjXQorICAgICYmIFtzZWxmIGVxdWFsc09yTmlsOnNlbGYubG90TnVtYmVyIG8yOm90aGVyLmxvdE51bWJlcl0KKyAgICAmJiBbc2VsZiBlcXVhbHNPck5pbDpzZWxmLnByb2R1Y3Rpb25EYXRlIG8yOm90aGVyLnByb2R1Y3Rpb25EYXRlXQorICAgICYmIFtzZWxmIGVxdWFsc09yTmlsOnNlbGYuYmVzdEJlZm9yZURhdGUgbzI6b3RoZXIuYmVzdEJlZm9yZURhdGVdCisgICAgJiYgW3NlbGYgZXF1YWxzT3JOaWw6c2VsZi5leHBpcmF0aW9uRGF0ZSBvMjpvdGhlci5leHBpcmF0aW9uRGF0ZV0KKyAgICAmJiBbc2VsZiBlcXVhbHNPck5pbDpzZWxmLndlaWdodCBvMjpvdGhlci53ZWlnaHRdCisgICAgJiYgW3NlbGYgZXF1YWxzT3JOaWw6c2VsZi53ZWlnaHRUeXBlIG8yOm90aGVyLndlaWdodFR5cGVdCisgICAgJiYgW3NlbGYgZXF1YWxzT3JOaWw6c2VsZi53ZWlnaHRJbmNyZW1lbnQgbzI6b3RoZXIud2VpZ2h0SW5jcmVtZW50XQorICAgICYmIFtzZWxmIGVxdWFsc09yTmlsOnNlbGYucHJpY2UgbzI6b3RoZXIucHJpY2VdCisgICAgJiYgW3NlbGYgZXF1YWxzT3JOaWw6c2VsZi5wcmljZUluY3JlbWVudCBvMjpvdGhlci5wcmljZUluY3JlbWVudF0KKyAgICAmJiBbc2VsZiBlcXVhbHNPck5pbDpzZWxmLnByaWNlQ3VycmVuY3kgbzI6b3RoZXIucHJpY2VDdXJyZW5jeV0KKyAgICAmJiBbc2VsZiBlcXVhbHNPck5pbDpzZWxmLnVuY29tbW9uQUlzIG8yOm90aGVyLnVuY29tbW9uQUlzXTsKK30KKworLSAoQk9PTCllcXVhbHNPck5pbDooaWQpbzEgbzI6KGlkKW8yIHsKKyAgcmV0dXJuIG8xID09IG5pbCA/IG8yID09IG5pbCA6IFtvMSBpc0VxdWFsOm8yXTsKK30KKworLSAoTlNVSW50ZWdlciloYXNoIHsKKyAgaW50IGhhc2ggPSAwOworICBoYXNoIF49IFtzZWxmLnByb2R1Y3RJRCBoYXNoXTsKKyAgaGFzaCBePSBbc2VsZi5zc2NjIGhhc2hdOworICBoYXNoIF49IFtzZWxmLmxvdE51bWJlciBoYXNoXTsKKyAgaGFzaCBePSBbc2VsZi5wcm9kdWN0aW9uRGF0ZSBoYXNoXTsKKyAgaGFzaCBePSBbc2VsZi5iZXN0QmVmb3JlRGF0ZSBoYXNoXTsKKyAgaGFzaCBePSBbc2VsZi5leHBpcmF0aW9uRGF0ZSBoYXNoXTsKKyAgaGFzaCBePSBbc2VsZi53ZWlnaHQgaGFzaF07CisgIGhhc2ggXj0gW3NlbGYud2VpZ2h0VHlwZSBoYXNoXTsKKyAgaGFzaCBePSBbc2VsZi53ZWlnaHRJbmNyZW1lbnQgaGFzaF07CisgIGhhc2ggXj0gW3NlbGYucHJpY2UgaGFzaF07CisgIGhhc2ggXj0gW3NlbGYucHJpY2VJbmNyZW1lbnQgaGFzaF07CisgIGhhc2ggXj0gW3NlbGYucHJpY2VDdXJyZW5jeSBoYXNoXTsKKyAgaGFzaCBePSBbc2VsZi51bmNvbW1vbkFJcyBoYXNoXTsKKyAgcmV0dXJuIGhhc2g7Cit9CisKKy0gKE5TU3RyaW5nICopZGlzcGxheVJlc3VsdCB7CisgIHJldHVybiBzZWxmLnJhd1RleHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyLmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MDQ5YzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUmVzdWx0UGFyc2VyLmgiCisKKy8qKgorICogUGFyc2VzIHN0cmluZ3Mgb2YgZGlnaXRzIHRoYXQgcmVwcmVzZW50IGEgUlNTIEV4dGVuZGVkIGNvZGUuCisgKi8KKworQGludGVyZmFjZSBaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlciA6IFpYUmVzdWx0UGFyc2VyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyLm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MjJjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5tCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEV4cGFuZGVkUHJvZHVjdFJlc3VsdFBhcnNlcgorCistIChaWFBhcnNlZFJlc3VsdCAqKXBhcnNlOihaWFJlc3VsdCAqKXJlc3VsdCB7CisgIFpYQmFyY29kZUZvcm1hdCBmb3JtYXQgPSBbcmVzdWx0IGJhcmNvZGVGb3JtYXRdOworICBpZiAoa0JhcmNvZGVGb3JtYXRSU1NFeHBhbmRlZCAhPSBmb3JtYXQpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TU3RyaW5nICpyYXdUZXh0ID0gW1pYUmVzdWx0UGFyc2VyIG1hc3NhZ2VkVGV4dDpyZXN1bHRdOworICBpZiAocmF3VGV4dCA9PSBuaWwpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNTdHJpbmcgKnByb2R1Y3RJRCA9IG5pbDsKKyAgTlNTdHJpbmcgKnNzY2MgPSBuaWw7CisgIE5TU3RyaW5nICpsb3ROdW1iZXIgPSBuaWw7CisgIE5TU3RyaW5nICpwcm9kdWN0aW9uRGF0ZSA9IG5pbDsKKyAgTlNTdHJpbmcgKnBhY2thZ2luZ0RhdGUgPSBuaWw7CisgIE5TU3RyaW5nICpiZXN0QmVmb3JlRGF0ZSA9IG5pbDsKKyAgTlNTdHJpbmcgKmV4cGlyYXRpb25EYXRlID0gbmlsOworICBOU1N0cmluZyAqd2VpZ2h0ID0gbmlsOworICBOU1N0cmluZyAqd2VpZ2h0VHlwZSA9IG5pbDsKKyAgTlNTdHJpbmcgKndlaWdodEluY3JlbWVudCA9IG5pbDsKKyAgTlNTdHJpbmcgKnByaWNlID0gbmlsOworICBOU1N0cmluZyAqcHJpY2VJbmNyZW1lbnQgPSBuaWw7CisgIE5TU3RyaW5nICpwcmljZUN1cnJlbmN5ID0gbmlsOworICBOU011dGFibGVEaWN0aW9uYXJ5ICp1bmNvbW1vbkFJcyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworCisgIGludCBpID0gMDsKKworICB3aGlsZSAoaSA8IFtyYXdUZXh0IGxlbmd0aF0pIHsKKyAgICBOU1N0cmluZyAqYWkgPSBbc2VsZiBmaW5kQUl2YWx1ZTppIHJhd1RleHQ6cmF3VGV4dF07CisgICAgaWYgKGFpID09IG5pbCkgeworICAgICAgLy8gRXJyb3IuIENvZGUgZG9lc24ndCBtYXRjaCB3aXRoIFJTUyBleHBhbmRlZCBwYXR0ZXJuCisgICAgICAvLyBFeHRlbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQgTk9UIGNyZWF0ZWQuIE5vdCBtYXRjaCB3aXRoIFJTUyBFeHBhbmRlZCBwYXR0ZXJuCisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBpICs9IFthaSBsZW5ndGhdICsgMjsKKyAgICBOU1N0cmluZyAqdmFsdWUgPSBbc2VsZiBmaW5kVmFsdWU6aSByYXdUZXh0OnJhd1RleHRdOworICAgIGkgKz0gW3ZhbHVlIGxlbmd0aF07CisKKyAgICBpZiAoW0AiMDAiIGlzRXF1YWxUb1N0cmluZzphaV0pIHsKKyAgICAgIHNzY2MgPSB2YWx1ZTsKKyAgICB9IGVsc2UgaWYgKFtAIjAxIiBpc0VxdWFsVG9TdHJpbmc6YWldKSB7CisgICAgICBwcm9kdWN0SUQgPSB2YWx1ZTsKKyAgICB9IGVsc2UgaWYgKFtAIjEwIiBpc0VxdWFsVG9TdHJpbmc6YWldKSB7CisgICAgICBsb3ROdW1iZXIgPSB2YWx1ZTsKKyAgICB9IGVsc2UgaWYgKFtAIjExIiBpc0VxdWFsVG9TdHJpbmc6YWldKSB7CisgICAgICBwcm9kdWN0aW9uRGF0ZSA9IHZhbHVlOworICAgIH0gZWxzZSBpZiAoW0AiMTMiIGlzRXF1YWxUb1N0cmluZzphaV0pIHsKKyAgICAgIHBhY2thZ2luZ0RhdGUgPSB2YWx1ZTsKKyAgICB9IGVsc2UgaWYgKFtAIjE1IiBpc0VxdWFsVG9TdHJpbmc6YWldKSB7CisgICAgICBiZXN0QmVmb3JlRGF0ZSA9IHZhbHVlOworICAgIH0gZWxzZSBpZiAoW0AiMTciIGlzRXF1YWxUb1N0cmluZzphaV0pIHsKKyAgICAgIGV4cGlyYXRpb25EYXRlID0gdmFsdWU7CisgICAgfSBlbHNlIGlmIChbQCIzMTAwIiBpc0VxdWFsVG9TdHJpbmc6YWldIHx8IFtAIjMxMDEiIGlzRXF1YWxUb1N0cmluZzphaV0gfHwgW0AiMzEwMiIgaXNFcXVhbFRvU3RyaW5nOmFpXSB8fCBbQCIzMTAzIiBpc0VxdWFsVG9TdHJpbmc6YWldIHx8IFtAIjMxMDQiIGlzRXF1YWxUb1N0cmluZzphaV0gfHwgW0AiMzEwNSIgaXNFcXVhbFRvU3RyaW5nOmFpXSB8fCBbQCIzMTA2IiBpc0VxdWFsVG9TdHJpbmc6YWldIHx8IFtAIjMxMDciIGlzRXF1YWxUb1N0cmluZzphaV0gfHwgW0AiMzEwOCIgaXNFcXVhbFRvU3RyaW5nOmFpXSB8fCBbQCIzMTA5IiBpc0VxdWFsVG9TdHJpbmc6YWldKSB7CisgICAgICB3ZWlnaHQgPSB2YWx1ZTsKKyAgICAgIHdlaWdodFR5cGUgPSBaWF9LSUxPR1JBTTsKKyAgICAgIHdlaWdodEluY3JlbWVudCA9IFthaSBzdWJzdHJpbmdGcm9tSW5kZXg6M107CisgICAgfSBlbHNlIGlmIChbQCIzMjAwIiBpc0VxdWFsVG9TdHJpbmc6YWldIHx8IFtAIjMyMDEiIGlzRXF1YWxUb1N0cmluZzphaV0gfHwgW0AiMzIwMiIgaXNFcXVhbFRvU3RyaW5nOmFpXSB8fCBbQCIzMjAzIiBpc0VxdWFsVG9TdHJpbmc6YWldIHx8IFtAIjMyMDQiIGlzRXF1YWxUb1N0cmluZzphaV0gfHwgW0AiMzIwNSIgaXNFcXVhbFRvU3RyaW5nOmFpXSB8fCBbQCIzMjA2IiBpc0VxdWFsVG9TdHJpbmc6YWldIHx8IFtAIjMyMDciIGlzRXF1YWxUb1N0cmluZzphaV0gfHwgW0AiMzIwOCIgaXNFcXVhbFRvU3RyaW5nOmFpXSB8fCBbQCIzMjA5IiBpc0VxdWFsVG9TdHJpbmc6YWldKSB7CisgICAgICB3ZWlnaHQgPSB2YWx1ZTsKKyAgICAgIHdlaWdodFR5cGUgPSBaWF9QT1VORDsKKyAgICAgIHdlaWdodEluY3JlbWVudCA9IFthaSBzdWJzdHJpbmdGcm9tSW5kZXg6M107CisgICAgfSBlbHNlIGlmIChbQCIzOTIwIiBpc0VxdWFsVG9TdHJpbmc6YWldIHx8IFtAIjM5MjEiIGlzRXF1YWxUb1N0cmluZzphaV0gfHwgW0AiMzkyMiIgaXNFcXVhbFRvU3RyaW5nOmFpXSB8fCBbQCIzOTIzIiBpc0VxdWFsVG9TdHJpbmc6YWldKSB7CisgICAgICBwcmljZSA9IHZhbHVlOworICAgICAgcHJpY2VJbmNyZW1lbnQgPSBbYWkgc3Vic3RyaW5nRnJvbUluZGV4OjNdOworICAgIH0gZWxzZSBpZiAoW0AiMzkzMCIgaXNFcXVhbFRvU3RyaW5nOmFpXSB8fCBbQCIzOTMxIiBpc0VxdWFsVG9TdHJpbmc6YWldIHx8IFtAIjM5MzIiIGlzRXF1YWxUb1N0cmluZzphaV0gfHwgW0AiMzkzMyIgaXNFcXVhbFRvU3RyaW5nOmFpXSkgeworICAgICAgaWYgKFt2YWx1ZSBsZW5ndGhdIDwgNCkgeworICAgICAgICByZXR1cm4gbmlsOworICAgICAgfQorICAgICAgcHJpY2UgPSBbdmFsdWUgc3Vic3RyaW5nRnJvbUluZGV4OjNdOworICAgICAgcHJpY2VDdXJyZW5jeSA9IFt2YWx1ZSBzdWJzdHJpbmdUb0luZGV4OjNdOworICAgICAgcHJpY2VJbmNyZW1lbnQgPSBbYWkgc3Vic3RyaW5nRnJvbUluZGV4OjNdOworICAgIH0gZWxzZSB7CisgICAgICB1bmNvbW1vbkFJc1thaV0gPSB2YWx1ZTsKKyAgICB9CisgIH0KKworICByZXR1cm4gW1pYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0IGV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdFdpdGhSYXdUZXh0OnJhd1RleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJRDpwcm9kdWN0SUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NjYzpzc2NjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3ROdW1iZXI6bG90TnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdGlvbkRhdGU6cHJvZHVjdGlvbkRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnaW5nRGF0ZTpwYWNrYWdpbmdEYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdEJlZm9yZURhdGU6YmVzdEJlZm9yZURhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZTpleHBpcmF0aW9uRGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OndlaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRUeXBlOndlaWdodFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodEluY3JlbWVudDp3ZWlnaHRJbmNyZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTpwcmljZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlSW5jcmVtZW50OnByaWNlSW5jcmVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlQ3VycmVuY3k6cHJpY2VDdXJyZW5jeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuY29tbW9uQUlzOnVuY29tbW9uQUlzXTsKK30KKworLSAoTlNTdHJpbmcgKilmaW5kQUl2YWx1ZTooaW50KWkgcmF3VGV4dDooTlNTdHJpbmcgKilyYXdUZXh0IHsKKyAgdW5pY2hhciBjID0gW3Jhd1RleHQgY2hhcmFjdGVyQXRJbmRleDppXTsKKyAgaWYgKGMgIT0gJygnKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIE5TU3RyaW5nICpyYXdUZXh0QXV4ID0gW3Jhd1RleHQgc3Vic3RyaW5nRnJvbUluZGV4OmkgKyAxXTsKKworICBOU011dGFibGVTdHJpbmcgKmJ1ZiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IFtyYXdUZXh0QXV4IGxlbmd0aF07IGluZGV4KyspIHsKKyAgICB1bmljaGFyIGN1cnJlbnRDaGFyID0gW3Jhd1RleHRBdXggY2hhcmFjdGVyQXRJbmRleDppbmRleF07CisgICAgaWYgKGN1cnJlbnRDaGFyID09ICcpJykgeworICAgICAgcmV0dXJuIGJ1ZjsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRDaGFyID49ICcwJyAmJiBjdXJyZW50Q2hhciA8PSAnOScpIHsKKyAgICAgIFtidWYgYXBwZW5kRm9ybWF0OkAiJUMiLCBjdXJyZW50Q2hhcl07CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICB9CisgIHJldHVybiBidWY7Cit9CisKKy0gKE5TU3RyaW5nICopZmluZFZhbHVlOihpbnQpaSByYXdUZXh0OihOU1N0cmluZyAqKXJhd1RleHQgeworICBOU011dGFibGVTdHJpbmcgKmJ1ZiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgTlNTdHJpbmcgKnJhd1RleHRBdXggPSBbcmF3VGV4dCBzdWJzdHJpbmdGcm9tSW5kZXg6aV07CisKKyAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IFtyYXdUZXh0QXV4IGxlbmd0aF07IGluZGV4KyspIHsKKyAgICB1bmljaGFyIGMgPSBbcmF3VGV4dEF1eCBjaGFyYWN0ZXJBdEluZGV4OmluZGV4XTsKKyAgICBpZiAoYyA9PSAnKCcpIHsKKyAgICAgIGlmIChbc2VsZiBmaW5kQUl2YWx1ZTppbmRleCByYXdUZXh0OnJhd1RleHRBdXhdID09IG5pbCkgeworICAgICAgICBbYnVmIGFwcGVuZFN0cmluZzpAIigiXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBbYnVmIGFwcGVuZEZvcm1hdDpAIiVDIiwgY107CisgICAgfQorICB9CisKKyAgcmV0dXJuIGJ1ZjsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhHZW9QYXJzZWRSZXN1bHQuaCBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYR2VvUGFyc2VkUmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0NGEwMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYR2VvUGFyc2VkUmVzdWx0LmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQYXJzZWRSZXN1bHQuaCIKKworQGludGVyZmFjZSBaWEdlb1BhcnNlZFJlc3VsdCA6IFpYUGFyc2VkUmVzdWx0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgZG91YmxlIGxhdGl0dWRlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBkb3VibGUgbG9uZ2l0dWRlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBkb3VibGUgYWx0aXR1ZGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpxdWVyeTsKKworLSAoaWQpaW5pdFdpdGhMYXRpdHVkZTooZG91YmxlKWxhdGl0dWRlIGxvbmdpdHVkZTooZG91YmxlKWxvbmdpdHVkZSBhbHRpdHVkZTooZG91YmxlKWFsdGl0dWRlIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworKyAoaWQpZ2VvUGFyc2VkUmVzdWx0V2l0aExhdGl0dWRlOihkb3VibGUpbGF0aXR1ZGUgbG9uZ2l0dWRlOihkb3VibGUpbG9uZ2l0dWRlIGFsdGl0dWRlOihkb3VibGUpYWx0aXR1ZGUgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistIChOU1N0cmluZyAqKWdlb1VSSTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhHZW9QYXJzZWRSZXN1bHQubSBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYR2VvUGFyc2VkUmVzdWx0Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJlYzM4YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYR2VvUGFyc2VkUmVzdWx0Lm0KQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhHZW9QYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0VHlwZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhHZW9QYXJzZWRSZXN1bHQKKworLSAoaWQpaW5pdFdpdGhMYXRpdHVkZTooZG91YmxlKWxhdGl0dWRlIGxvbmdpdHVkZTooZG91YmxlKWxvbmdpdHVkZSBhbHRpdHVkZTooZG91YmxlKWFsdGl0dWRlIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhUeXBlOmtQYXJzZWRSZXN1bHRUeXBlR2VvXSkgeworICAgIF9sYXRpdHVkZSA9IGxhdGl0dWRlOworICAgIF9sb25naXR1ZGUgPSBsb25naXR1ZGU7CisgICAgX2FsdGl0dWRlID0gYWx0aXR1ZGU7CisgICAgX3F1ZXJ5ID0gcXVlcnk7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworKyAoaWQpZ2VvUGFyc2VkUmVzdWx0V2l0aExhdGl0dWRlOihkb3VibGUpbGF0aXR1ZGUgbG9uZ2l0dWRlOihkb3VibGUpbG9uZ2l0dWRlIGFsdGl0dWRlOihkb3VibGUpYWx0aXR1ZGUgcXVlcnk6KE5TU3RyaW5nICopcXVlcnkgeworICByZXR1cm4gW1tzZWxmIGFsbG9jXSBpbml0V2l0aExhdGl0dWRlOmxhdGl0dWRlIGxvbmdpdHVkZTpsb25naXR1ZGUgYWx0aXR1ZGU6YWx0aXR1ZGUgcXVlcnk6cXVlcnldOworfQorCistIChOU1N0cmluZyAqKWdlb1VSSSB7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAImdlbzolZiwlZiIsIHNlbGYubGF0aXR1ZGUsIHNlbGYubG9uZ2l0dWRlXTsKKyAgaWYgKHNlbGYuYWx0aXR1ZGUgPiAwKSB7CisgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIsJWYiLCBzZWxmLmFsdGl0dWRlXTsKKyAgfQorICBpZiAoc2VsZi5xdWVyeSAhPSBuaWwpIHsKKyAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIj8lQCIsIHNlbGYucXVlcnldOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKE5TU3RyaW5nICopZGlzcGxheVJlc3VsdCB7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVmLCAlZiIsIHNlbGYubGF0aXR1ZGUsIHNlbGYubG9uZ2l0dWRlXTsKKyAgaWYgKHNlbGYuYWx0aXR1ZGUgPiAwLjApIHsKKyAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiwgJWYiLCBzZWxmLmFsdGl0dWRlXTsKKyAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIm0iXTsKKyAgfQorICBpZiAoc2VsZi5xdWVyeSAhPSBuaWwpIHsKKyAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiAoJUApIiwgc2VsZi5xdWVyeV07CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhHZW9SZXN1bHRQYXJzZXIuaCBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYR2VvUmVzdWx0UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxODk3YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYR2VvUmVzdWx0UGFyc2VyLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhSZXN1bHRQYXJzZXIuaCIKKworLyoqCisgKiBQYXJzZXMgYSAiZ2VvOiIgVVJJIHJlc3VsdCwgd2hpY2ggc3BlY2lmaWVzIGEgbG9jYXRpb24gb24gdGhlIHN1cmZhY2Ugb2YKKyAqIHRoZSBFYXJ0aCBhcyB3ZWxsIGFzIGFuIG9wdGlvbmFsIGFsdGl0dWRlIGFib3ZlIHRoZSBzdXJmYWNlLiBTZWUKKyAqIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LW1heXJob2Zlci1nZW8tdXJpLTAwLgorICovCisKK0BpbnRlcmZhY2UgWlhHZW9SZXN1bHRQYXJzZXIgOiBaWFJlc3VsdFBhcnNlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWEdlb1Jlc3VsdFBhcnNlci5tIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhHZW9SZXN1bHRQYXJzZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTZhMmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhHZW9SZXN1bHRQYXJzZXIubQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEdlb1BhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhHZW9SZXN1bHRQYXJzZXIuaCIKKworc3RhdGljIE5TUmVndWxhckV4cHJlc3Npb24gKkdFT19VUkxfUEFUVEVSTiA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFpYR2VvUmVzdWx0UGFyc2VyCisKKysgKHZvaWQpaW5pdGlhbGl6ZSB7CisgIEdFT19VUkxfUEFUVEVSTiA9IFtbTlNSZWd1bGFyRXhwcmVzc2lvbiBhbGxvY10gaW5pdFdpdGhQYXR0ZXJuOkAiZ2VvOihbXFwtMC05Ll0rKSwoW1xcLTAtOS5dKykoPzosKFtcXC0wLTkuXSspKT8oPzpcXD8oLiopKT8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6TlNSZWd1bGFyRXhwcmVzc2lvbkNhc2VJbnNlbnNpdGl2ZSBlcnJvcjpuaWxdOworCit9CisKKy0gKFpYUGFyc2VkUmVzdWx0ICopcGFyc2U6KFpYUmVzdWx0ICopcmVzdWx0IHsKKyAgTlNTdHJpbmcgKnJhd1RleHQgPSBbWlhSZXN1bHRQYXJzZXIgbWFzc2FnZWRUZXh0OnJlc3VsdF07CisgIGlmIChyYXdUZXh0ID09IG5pbCB8fCAoIVtyYXdUZXh0IGhhc1ByZWZpeDpAImdlbzoiXSAmJiAhW3Jhd1RleHQgaGFzUHJlZml4OkAiR0VPOiJdKSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBOU0FycmF5ICptYXRjaGVzID0gW0dFT19VUkxfUEFUVEVSTiBtYXRjaGVzSW5TdHJpbmc6cmF3VGV4dCBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgcmF3VGV4dC5sZW5ndGgpXTsKKyAgaWYgKG1hdGNoZXMuY291bnQgPT0gMCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBOU1RleHRDaGVja2luZ1Jlc3VsdCAqbWF0Y2ggPSBtYXRjaGVzWzBdOworICBOU1N0cmluZyAqcXVlcnkgPSBuaWw7CisgIGlmIChbbWF0Y2ggcmFuZ2VBdEluZGV4OjRdLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIHsKKyAgICBxdWVyeSA9IFtyYXdUZXh0IHN1YnN0cmluZ1dpdGhSYW5nZTpbbWF0Y2ggcmFuZ2VBdEluZGV4OjRdXTsKKyAgfQorCisgIGRvdWJsZSBsYXRpdHVkZSA9IFtbcmF3VGV4dCBzdWJzdHJpbmdXaXRoUmFuZ2U6W21hdGNoIHJhbmdlQXRJbmRleDoxXV0gZG91YmxlVmFsdWVdOworICBpZiAobGF0aXR1ZGUgPiA5MC4wIHx8IGxhdGl0dWRlIDwgLTkwLjApIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIGRvdWJsZSBsb25naXR1ZGUgPSBbW3Jhd1RleHQgc3Vic3RyaW5nV2l0aFJhbmdlOlttYXRjaCByYW5nZUF0SW5kZXg6Ml1dIGRvdWJsZVZhbHVlXTsKKyAgaWYgKGxvbmdpdHVkZSA+IDE4MC4wIHx8IGxvbmdpdHVkZSA8IC0xODAuMCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgZG91YmxlIGFsdGl0dWRlOworICBpZiAoW21hdGNoIHJhbmdlQXRJbmRleDozXS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKSB7CisgICAgYWx0aXR1ZGUgPSAwLjA7CisgIH0gZWxzZSB7CisgICAgYWx0aXR1ZGUgPSBbW3Jhd1RleHQgc3Vic3RyaW5nV2l0aFJhbmdlOlttYXRjaCByYW5nZUF0SW5kZXg6M11dIGRvdWJsZVZhbHVlXTsKKyAgICBpZiAoYWx0aXR1ZGUgPCAwLjApIHsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICB9CisKKyAgcmV0dXJuIFtaWEdlb1BhcnNlZFJlc3VsdCBnZW9QYXJzZWRSZXN1bHRXaXRoTGF0aXR1ZGU6bGF0aXR1ZGUgbG9uZ2l0dWRlOmxvbmdpdHVkZSBhbHRpdHVkZTphbHRpdHVkZSBxdWVyeTpxdWVyeV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYSVNCTlBhcnNlZFJlc3VsdC5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhJU0JOUGFyc2VkUmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhZGVjYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYSVNCTlBhcnNlZFJlc3VsdC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhJU0JOUGFyc2VkUmVzdWx0IDogWlhQYXJzZWRSZXN1bHQKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqaXNibjsKKworLSAoaWQpaW5pdFdpdGhJc2JuOihOU1N0cmluZyAqKWlzYm47CisrIChpZClpc2JuUGFyc2VkUmVzdWx0V2l0aElzYm46KE5TU3RyaW5nICopaXNibjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhJU0JOUGFyc2VkUmVzdWx0Lm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWElTQk5QYXJzZWRSZXN1bHQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmYyYWFiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhJU0JOUGFyc2VkUmVzdWx0Lm0KQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhJU0JOUGFyc2VkUmVzdWx0LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWElTQk5QYXJzZWRSZXN1bHQKKworLSAoaWQpaW5pdFdpdGhJc2JuOihOU1N0cmluZyAqKWlzYm4geworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0V2l0aFR5cGU6a1BhcnNlZFJlc3VsdFR5cGVJU0JOXSkgeworICAgIF9pc2JuID0gaXNibjsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisrIChpZClpc2JuUGFyc2VkUmVzdWx0V2l0aElzYm46KE5TU3RyaW5nICopaXNibiB7CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoSXNibjppc2JuXTsKK30KKworLSAoTlNTdHJpbmcgKilkaXNwbGF5UmVzdWx0IHsKKyAgcmV0dXJuIHNlbGYuaXNibjsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhJU0JOUmVzdWx0UGFyc2VyLmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWElTQk5SZXN1bHRQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM3NWVkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhJU0JOUmVzdWx0UGFyc2VyLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhSZXN1bHRQYXJzZXIuaCIKKworLyoqCisgKiBQYXJzZXMgc3RyaW5ncyBvZiBkaWdpdHMgdGhhdCByZXByZXNlbnQgYSBJU0JOLgorICovCisKK0BpbnRlcmZhY2UgWlhJU0JOUmVzdWx0UGFyc2VyIDogWlhSZXN1bHRQYXJzZXIKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhJU0JOUmVzdWx0UGFyc2VyLm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWElTQk5SZXN1bHRQYXJzZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDYxN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhJU0JOUmVzdWx0UGFyc2VyLm0KQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhJU0JOUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWElTQk5SZXN1bHRQYXJzZXIuaCIKKworQGltcGxlbWVudGF0aW9uIFpYSVNCTlJlc3VsdFBhcnNlcgorCistIChaWFBhcnNlZFJlc3VsdCAqKXBhcnNlOihaWFJlc3VsdCAqKXJlc3VsdCB7CisgIFpYQmFyY29kZUZvcm1hdCBmb3JtYXQgPSBbcmVzdWx0IGJhcmNvZGVGb3JtYXRdOworICBpZiAoZm9ybWF0ICE9IGtCYXJjb2RlRm9ybWF0RWFuMTMpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TU3RyaW5nICpyYXdUZXh0ID0gW1pYUmVzdWx0UGFyc2VyIG1hc3NhZ2VkVGV4dDpyZXN1bHRdOworICBOU1VJbnRlZ2VyIGxlbmd0aCA9IFtyYXdUZXh0IGxlbmd0aF07CisgIGlmIChsZW5ndGggIT0gMTMpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIGlmICghW3Jhd1RleHQgaGFzUHJlZml4OkAiOTc4Il0gJiYgIVtyYXdUZXh0IGhhc1ByZWZpeDpAIjk3OSJdKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICByZXR1cm4gW1pYSVNCTlBhcnNlZFJlc3VsdCBpc2JuUGFyc2VkUmVzdWx0V2l0aElzYm46cmF3VGV4dF07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYUGFyc2VkUmVzdWx0LmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFBhcnNlZFJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NjAxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFBhcnNlZFJlc3VsdC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0VHlwZS5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKworLyoqCisgKiBBYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiBkZWNvZGluZyBhIGJhcmNvZGUsIGFzIG1vcmUgdGhhbgorICogYSBTdHJpbmcgLS0gYXMgc29tZSB0eXBlIG9mIHN0cnVjdHVyZWQgZGF0YS4gVGhpcyBtaWdodCBiZSBhIHN1YmNsYXNzIHdoaWNoIHJlcHJlc2VudHMKKyAqIGEgVVJMLCBvciBhbiBlLW1haWwgYWRkcmVzcy4gcGFyc2VSZXN1bHQoKSB3aWxsIHR1cm4gYSByYXcKKyAqIGRlY29kZWQgc3RyaW5nIGludG8gdGhlIG1vc3QgYXBwcm9wcmlhdGUgdHlwZSBvZiBzdHJ1Y3R1cmVkIHJlcHJlc2VudGF0aW9uLgorICogCisgKiBUaGFua3MgdG8gSmVmZiBHcmlmZmluIGZvciBwcm9wb3NpbmcgcmV3cml0ZSBvZiB0aGVzZSBjbGFzc2VzIHRoYXQgcmVsaWVzIGxlc3MKKyAqIG9uIGV4Y2VwdGlvbi1iYXNlZCBtZWNoYW5pc21zIGR1cmluZyBwYXJzaW5nLgorICovCisKK0BpbnRlcmZhY2UgWlhQYXJzZWRSZXN1bHQgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFpYUGFyc2VkUmVzdWx0VHlwZSB0eXBlOworCistIChpZClpbml0V2l0aFR5cGU6KFpYUGFyc2VkUmVzdWx0VHlwZSl0eXBlOworKyAoaWQpcGFyc2VkUmVzdWx0V2l0aFR5cGU6KFpYUGFyc2VkUmVzdWx0VHlwZSl0eXBlOworLSAoTlNTdHJpbmcgKilkaXNwbGF5UmVzdWx0OworKyAodm9pZCltYXliZUFwcGVuZDooTlNTdHJpbmcgKil2YWx1ZSByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdDsKKysgKHZvaWQpbWF5YmVBcHBlbmRBcnJheTooTlNBcnJheSAqKXZhbHVlIHJlc3VsdDooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0OworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFBhcnNlZFJlc3VsdC5tIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhQYXJzZWRSZXN1bHQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWEyODgzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhQYXJzZWRSZXN1bHQubQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFBhcnNlZFJlc3VsdC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhQYXJzZWRSZXN1bHQKKworLSAoaWQpaW5pdFdpdGhUeXBlOihaWFBhcnNlZFJlc3VsdFR5cGUpdHlwZSB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3R5cGUgPSB0eXBlOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKGlkKXBhcnNlZFJlc3VsdFdpdGhUeXBlOihaWFBhcnNlZFJlc3VsdFR5cGUpdHlwZSB7CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoVHlwZTp0eXBlXTsKK30KKworLSAoTlNTdHJpbmcgKilkaXNwbGF5UmVzdWx0IHsKKyAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiWW91IG11c3Qgb3ZlcnJpZGUgJUAgaW4gYSBzdWJjbGFzcyIsIE5TU3RyaW5nRnJvbVNlbGVjdG9yKF9jbWQpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07Cit9CisKKy0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24geworICByZXR1cm4gW3NlbGYgZGlzcGxheVJlc3VsdF07Cit9CisKKysgKHZvaWQpbWF5YmVBcHBlbmQ6KE5TU3RyaW5nICopdmFsdWUgcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQgeworICBpZiAodmFsdWUgIT0gbmlsICYmIChpZCl2YWx1ZSAhPSBbTlNOdWxsIG51bGxdICYmIFt2YWx1ZSBsZW5ndGhdID4gMCkgeworICAgIGlmIChbcmVzdWx0IGxlbmd0aF0gPiAwKSB7CisgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIlxuIl07CisgICAgfQorICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOnZhbHVlXTsKKyAgfQorfQorCisrICh2b2lkKW1heWJlQXBwZW5kQXJyYXk6KE5TQXJyYXkgKil2YWx1ZXMgcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQgeworICBpZiAodmFsdWVzICE9IG5pbCkgeworICAgIGZvciAoTlNTdHJpbmcgKnZhbHVlIGluIHZhbHVlcykgeworICAgICAgW3NlbGYgbWF5YmVBcHBlbmQ6dmFsdWUgcmVzdWx0OnJlc3VsdF07CisgICAgfQorICB9Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYUGFyc2VkUmVzdWx0VHlwZS5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhQYXJzZWRSZXN1bHRUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA5N2MxOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYUGFyc2VkUmVzdWx0VHlwZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogUmVwcmVzZW50cyB0aGUgdHlwZSBvZiBkYXRhIGVuY29kZWQgYnkgYSBiYXJjb2RlIC0tIGZyb20gcGxhaW4gdGV4dCwgdG8gYQorICogVVJJLCB0byBhbiBlLW1haWwgYWRkcmVzcywgZXRjLgorICovCit0eXBlZGVmIGVudW0geworICBrUGFyc2VkUmVzdWx0VHlwZUFkZHJlc3NCb29rLAorICBrUGFyc2VkUmVzdWx0VHlwZUVtYWlsQWRkcmVzcywKKyAga1BhcnNlZFJlc3VsdFR5cGVQcm9kdWN0LAorICBrUGFyc2VkUmVzdWx0VHlwZVVSSSwKKyAga1BhcnNlZFJlc3VsdFR5cGVUZXh0LAorICBrUGFyc2VkUmVzdWx0VHlwZUFuZHJvaWRJbnRlbnQsCisgIGtQYXJzZWRSZXN1bHRUeXBlR2VvLAorICBrUGFyc2VkUmVzdWx0VHlwZVRlbCwKKyAga1BhcnNlZFJlc3VsdFR5cGVTTVMsCisgIGtQYXJzZWRSZXN1bHRUeXBlQ2FsZW5kYXIsCisgIGtQYXJzZWRSZXN1bHRUeXBlV2lmaSwKKyAga1BhcnNlZFJlc3VsdFR5cGVOREVGU01hcnRQb3N0ZXIsCisgIGtQYXJzZWRSZXN1bHRUeXBlTW9iaWxldGFnUmljaFdlYiwKKyAga1BhcnNlZFJlc3VsdFR5cGVJU0JOCit9IFpYUGFyc2VkUmVzdWx0VHlwZTsKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYUHJvZHVjdFBhcnNlZFJlc3VsdC5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhQcm9kdWN0UGFyc2VkUmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIwMzljMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYUHJvZHVjdFBhcnNlZFJlc3VsdC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhQcm9kdWN0UGFyc2VkUmVzdWx0IDogWlhQYXJzZWRSZXN1bHQKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqbm9ybWFsaXplZFByb2R1Y3RJRDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKnByb2R1Y3RJRDsKKworLSAoaWQpaW5pdFdpdGhQcm9kdWN0SUQ6KE5TU3RyaW5nICopcHJvZHVjdElEOworLSAoaWQpaW5pdFdpdGhQcm9kdWN0SUQ6KE5TU3RyaW5nICopcHJvZHVjdElEIG5vcm1hbGl6ZWRQcm9kdWN0SUQ6KE5TU3RyaW5nICopbm9ybWFsaXplZFByb2R1Y3RJRDsKKysgKGlkKXByb2R1Y3RQYXJzZWRSZXN1bHRXaXRoUHJvZHVjdElEOihOU1N0cmluZyAqKXByb2R1Y3RJRDsKKysgKGlkKXByb2R1Y3RQYXJzZWRSZXN1bHRXaXRoUHJvZHVjdElEOihOU1N0cmluZyAqKXByb2R1Y3RJRCBub3JtYWxpemVkUHJvZHVjdElEOihOU1N0cmluZyAqKW5vcm1hbGl6ZWRQcm9kdWN0SUQ7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYUHJvZHVjdFBhcnNlZFJlc3VsdC5tIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhQcm9kdWN0UGFyc2VkUmVzdWx0Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhNTM3MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYUHJvZHVjdFBhcnNlZFJlc3VsdC5tCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUHJvZHVjdFBhcnNlZFJlc3VsdC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhQcm9kdWN0UGFyc2VkUmVzdWx0CisKKy0gKGlkKWluaXRXaXRoUHJvZHVjdElEOihOU1N0cmluZyAqKXByb2R1Y3RJRCB7CisgIHJldHVybiBbc2VsZiBpbml0V2l0aFByb2R1Y3RJRDpwcm9kdWN0SUQgbm9ybWFsaXplZFByb2R1Y3RJRDpwcm9kdWN0SURdOworfQorCistIChpZClpbml0V2l0aFByb2R1Y3RJRDooTlNTdHJpbmcgKilwcm9kdWN0SUQgbm9ybWFsaXplZFByb2R1Y3RJRDooTlNTdHJpbmcgKilub3JtYWxpemVkUHJvZHVjdElEIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhUeXBlOmtQYXJzZWRSZXN1bHRUeXBlUHJvZHVjdF0pIHsKKyAgICBfbm9ybWFsaXplZFByb2R1Y3RJRCA9IG5vcm1hbGl6ZWRQcm9kdWN0SUQ7CisgICAgX3Byb2R1Y3RJRCA9IHByb2R1Y3RJRDsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisrIChpZClwcm9kdWN0UGFyc2VkUmVzdWx0V2l0aFByb2R1Y3RJRDooTlNTdHJpbmcgKilwcm9kdWN0SUQgeworICByZXR1cm4gW1tzZWxmIGFsbG9jXSBpbml0V2l0aFByb2R1Y3RJRDpwcm9kdWN0SURdOworfQorCisrIChpZClwcm9kdWN0UGFyc2VkUmVzdWx0V2l0aFByb2R1Y3RJRDooTlNTdHJpbmcgKilwcm9kdWN0SUQgbm9ybWFsaXplZFByb2R1Y3RJRDooTlNTdHJpbmcgKilub3JtYWxpemVkUHJvZHVjdElEIHsKKyAgcmV0dXJuIFtbc2VsZiBhbGxvY10gaW5pdFdpdGhQcm9kdWN0SUQ6cHJvZHVjdElEIG5vcm1hbGl6ZWRQcm9kdWN0SUQ6bm9ybWFsaXplZFByb2R1Y3RJRF07Cit9CisKKy0gKE5TU3RyaW5nICopZGlzcGxheVJlc3VsdCB7CisgIHJldHVybiBzZWxmLnByb2R1Y3RJRDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhQcm9kdWN0UmVzdWx0UGFyc2VyLmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFByb2R1Y3RSZXN1bHRQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmJiZjgwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhQcm9kdWN0UmVzdWx0UGFyc2VyLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhSZXN1bHRQYXJzZXIuaCIKKworLyoqCisgKiBQYXJzZXMgc3RyaW5ncyBvZiBkaWdpdHMgdGhhdCByZXByZXNlbnQgYSBVUEMgY29kZS4KKyAqLworCitAaW50ZXJmYWNlIFpYUHJvZHVjdFJlc3VsdFBhcnNlciA6IFpYUmVzdWx0UGFyc2VyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYUHJvZHVjdFJlc3VsdFBhcnNlci5tIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhQcm9kdWN0UmVzdWx0UGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhODgyNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYUHJvZHVjdFJlc3VsdFBhcnNlci5tCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQmFyY29kZUZvcm1hdC5oIgorI2ltcG9ydCAiWlhQcm9kdWN0UGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWFByb2R1Y3RSZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYVVBDRVJlYWRlci5oIgorCitAaW1wbGVtZW50YXRpb24gWlhQcm9kdWN0UmVzdWx0UGFyc2VyCisKKy0gKFpYUGFyc2VkUmVzdWx0ICopcGFyc2U6KFpYUmVzdWx0ICopcmVzdWx0IHsKKyAgWlhCYXJjb2RlRm9ybWF0IGZvcm1hdCA9IFtyZXN1bHQgYmFyY29kZUZvcm1hdF07CisgIGlmICghKGZvcm1hdCA9PSBrQmFyY29kZUZvcm1hdFVQQ0EgfHwgZm9ybWF0ID09IGtCYXJjb2RlRm9ybWF0VVBDRSB8fCBmb3JtYXQgPT0ga0JhcmNvZGVGb3JtYXRFYW44IHx8IGZvcm1hdCA9PSBrQmFyY29kZUZvcm1hdEVhbjEzKSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNTdHJpbmcgKnJhd1RleHQgPSBbWlhSZXN1bHRQYXJzZXIgbWFzc2FnZWRUZXh0OnJlc3VsdF07CisgIE5TVUludGVnZXIgbGVuZ3RoID0gW3Jhd1RleHQgbGVuZ3RoXTsKKyAgZm9yIChpbnQgeCA9IDA7IHggPCBsZW5ndGg7IHgrKykgeworICAgIHVuaWNoYXIgYyA9IFtyYXdUZXh0IGNoYXJhY3RlckF0SW5kZXg6eF07CisgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykgeworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgIH0KKworICBOU1N0cmluZyAqbm9ybWFsaXplZFByb2R1Y3RJRDsKKyAgaWYgKGZvcm1hdCA9PSBrQmFyY29kZUZvcm1hdFVQQ0UpIHsKKyAgICBub3JtYWxpemVkUHJvZHVjdElEID0gW1pYVVBDRVJlYWRlciBjb252ZXJ0VVBDRXRvVVBDQTpyYXdUZXh0XTsKKyAgfSBlbHNlIHsKKyAgICBub3JtYWxpemVkUHJvZHVjdElEID0gcmF3VGV4dDsKKyAgfQorICByZXR1cm4gW1pYUHJvZHVjdFBhcnNlZFJlc3VsdCBwcm9kdWN0UGFyc2VkUmVzdWx0V2l0aFByb2R1Y3RJRDpyYXdUZXh0IG5vcm1hbGl6ZWRQcm9kdWN0SUQ6bm9ybWFsaXplZFByb2R1Y3RJRF07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYUmVzdWx0UGFyc2VyLmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFJlc3VsdFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MDE1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFJlc3VsdFBhcnNlci5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgZGVjb2RpbmcgYSBiYXJjb2RlLCBhcyBtb3JlIHRoYW4KKyAqIGEgU3RyaW5nIC0tIGFzIHNvbWUgdHlwZSBvZiBzdHJ1Y3R1cmVkIGRhdGEuIFRoaXMgbWlnaHQgYmUgYSBzdWJjbGFzcyB3aGljaCByZXByZXNlbnRzCisgKiBhIFVSTCwgb3IgYW4gZS1tYWlsIGFkZHJlc3MuIHBhcnNlUmVzdWx0KCkgd2lsbCB0dXJuIGEgcmF3CisgKiBkZWNvZGVkIHN0cmluZyBpbnRvIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHR5cGUgb2Ygc3RydWN0dXJlZCByZXByZXNlbnRhdGlvbi4KKyAqIAorICogVGhhbmtzIHRvIEplZmYgR3JpZmZpbiBmb3IgcHJvcG9zaW5nIHJld3JpdGUgb2YgdGhlc2UgY2xhc3NlcyB0aGF0IHJlbGllcyBsZXNzCisgKiBvbiBleGNlcHRpb24tYmFzZWQgbWVjaGFuaXNtcyBkdXJpbmcgcGFyc2luZy4KKyAqLworCitAY2xhc3MgWlhQYXJzZWRSZXN1bHQsIFpYUmVzdWx0OworCitAaW50ZXJmYWNlIFpYUmVzdWx0UGFyc2VyIDogTlNPYmplY3QKKworKyAoTlNTdHJpbmcgKiltYXNzYWdlZFRleHQ6KFpYUmVzdWx0ICopcmVzdWx0OworLSAoWlhQYXJzZWRSZXN1bHQgKilwYXJzZTooWlhSZXN1bHQgKilyZXN1bHQ7CisrIChaWFBhcnNlZFJlc3VsdCAqKXBhcnNlUmVzdWx0OihaWFJlc3VsdCAqKXRoZVJlc3VsdDsKKy0gKHZvaWQpbWF5YmVBcHBlbmQ6KE5TU3RyaW5nICopdmFsdWUgcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQ7CistICh2b2lkKW1heWJlQXBwZW5kQXJyYXk6KE5TQXJyYXkgKil2YWx1ZSByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdDsKKy0gKE5TQXJyYXkgKiltYXliZVdyYXA6KE5TU3RyaW5nICopdmFsdWU7CisrIChCT09MKWlzU3RyaW5nT2ZEaWdpdHM6KE5TU3RyaW5nICopdmFsdWUgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoOworKyAoQk9PTClpc1N1YnN0cmluZ09mRGlnaXRzOihOU1N0cmluZyAqKXZhbHVlIG9mZnNldDooaW50KW9mZnNldCBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGg7CisrIChCT09MKWlzU3Vic3RyaW5nT2ZBbHBoYU51bWVyaWM6KE5TU3RyaW5nICopdmFsdWUgb2Zmc2V0OihpbnQpb2Zmc2V0IGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aDsKKysgKGludClwYXJzZUhleERpZ2l0Oih1bmljaGFyKWM7CistIChOU011dGFibGVEaWN0aW9uYXJ5ICopcGFyc2VOYW1lVmFsdWVQYWlyczooTlNTdHJpbmcgKil1cmk7CisrIChOU1N0cmluZyAqKXVybERlY29kZTooTlNTdHJpbmcgKillbmNvZGVkOworKyAoTlNBcnJheSAqKW1hdGNoUHJlZml4ZWRGaWVsZDooTlNTdHJpbmcgKilwcmVmaXggcmF3VGV4dDooTlNTdHJpbmcgKilyYXdUZXh0IGVuZENoYXI6KHVuaWNoYXIpZW5kQ2hhciB0cmltOihCT09MKXRyaW07CisrIChOU1N0cmluZyAqKW1hdGNoU2luZ2xlUHJlZml4ZWRGaWVsZDooTlNTdHJpbmcgKilwcmVmaXggcmF3VGV4dDooTlNTdHJpbmcgKilyYXdUZXh0IGVuZENoYXI6KHVuaWNoYXIpZW5kQ2hhciB0cmltOihCT09MKXRyaW07CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYUmVzdWx0UGFyc2VyLm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFJlc3VsdFBhcnNlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDJiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFJlc3VsdFBhcnNlci5tCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFkZHJlc3NCb29rQVVSZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYQWRkcmVzc0Jvb2tEb0NvTW9SZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYQml6Y2FyZFJlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhCb29rbWFya0RvQ29Nb1Jlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhFeHBhbmRlZFByb2R1Y3RSZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYR2VvUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWEdlb1Jlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhJU0JOUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWElTQk5SZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWFByb2R1Y3RQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUHJvZHVjdFJlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFNNU01NU1Jlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhTTVNQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYU01TVE9NTVNUT1Jlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhTTVRQUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFRlbFBhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhUZWxSZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYVGV4dFBhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhVUklQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYVVJJUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFVSTFRPUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFZDYXJkUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFZFdmVudFJlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhXaWZpUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWFdpZmlSZXN1bHRQYXJzZXIuaCIKKworc3RhdGljIE5TQXJyYXkgKlBBUlNFUlMgPSBuaWw7CitzdGF0aWMgTlNSZWd1bGFyRXhwcmVzc2lvbiAqRElHSVRTID0gbmlsOworc3RhdGljIE5TUmVndWxhckV4cHJlc3Npb24gKkFMUEhBTlVNID0gbmlsOworc3RhdGljIE5TU3RyaW5nICpBTVBFUlNBTkQgPSBAIiYiOworc3RhdGljIE5TU3RyaW5nICpFUVVBTFMgPSBAIj0iOworc3RhdGljIHVuaWNoYXIgQllURV9PUkRFUl9NQVJLID0gTCdcdWZlZmYnOworCitAaW1wbGVtZW50YXRpb24gWlhSZXN1bHRQYXJzZXIKKworKyAodm9pZClpbml0aWFsaXplIHsKKyAgUEFSU0VSUyA9IEBbW1taWEJvb2ttYXJrRG9Db01vUmVzdWx0UGFyc2VyIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgW1taWEFkZHJlc3NCb29rRG9Db01vUmVzdWx0UGFyc2VyIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgW1taWEVtYWlsRG9Db01vUmVzdWx0UGFyc2VyIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgW1taWEFkZHJlc3NCb29rQVVSZXN1bHRQYXJzZXIgYWxsb2NdIGluaXRdLAorICAgICAgICAgICAgICBbW1pYVkNhcmRSZXN1bHRQYXJzZXIgYWxsb2NdIGluaXRdLAorICAgICAgICAgICAgICBbW1pYQml6Y2FyZFJlc3VsdFBhcnNlciBhbGxvY10gaW5pdF0sCisgICAgICAgICAgICAgIFtbWlhWRXZlbnRSZXN1bHRQYXJzZXIgYWxsb2NdIGluaXRdLAorICAgICAgICAgICAgICBbW1pYRW1haWxBZGRyZXNzUmVzdWx0UGFyc2VyIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgW1taWFNNVFBSZXN1bHRQYXJzZXIgYWxsb2NdIGluaXRdLAorICAgICAgICAgICAgICBbW1pYVGVsUmVzdWx0UGFyc2VyIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgW1taWFNNU01NU1Jlc3VsdFBhcnNlciBhbGxvY10gaW5pdF0sCisgICAgICAgICAgICAgIFtbWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgW1taWEdlb1Jlc3VsdFBhcnNlciBhbGxvY10gaW5pdF0sCisgICAgICAgICAgICAgIFtbWlhXaWZpUmVzdWx0UGFyc2VyIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgW1taWFVSTFRPUmVzdWx0UGFyc2VyIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgW1taWFVSSVJlc3VsdFBhcnNlciBhbGxvY10gaW5pdF0sCisgICAgICAgICAgICAgIFtbWlhJU0JOUmVzdWx0UGFyc2VyIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgW1taWFByb2R1Y3RSZXN1bHRQYXJzZXIgYWxsb2NdIGluaXRdLAorICAgICAgICAgICAgICBbW1pYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyIGFsbG9jXSBpbml0XV07CisgIERJR0lUUyA9IFtbTlNSZWd1bGFyRXhwcmVzc2lvbiBhbGxvY10gaW5pdFdpdGhQYXR0ZXJuOkAiXlxcZCokIiBvcHRpb25zOjAgZXJyb3I6bmlsXTsKKyAgQUxQSEFOVU0gPSBbW05TUmVndWxhckV4cHJlc3Npb24gYWxsb2NdIGluaXRXaXRoUGF0dGVybjpAIl5bYS16QS1aMC05XSokIiBvcHRpb25zOjAgZXJyb3I6bmlsXTsKK30KKworKyAoTlNTdHJpbmcgKiltYXNzYWdlZFRleHQ6KFpYUmVzdWx0ICopcmVzdWx0IHsKKyAgTlNTdHJpbmcgKnRleHQgPSByZXN1bHQudGV4dDsKKyAgaWYgKHRleHQubGVuZ3RoID4gMCAmJiBbdGV4dCBjaGFyYWN0ZXJBdEluZGV4OjBdID09IEJZVEVfT1JERVJfTUFSSykgeworICAgIHRleHQgPSBbdGV4dCBzdWJzdHJpbmdGcm9tSW5kZXg6MV07CisgIH0KKyAgcmV0dXJuIHRleHQ7Cit9CisKKy0gKFpYUGFyc2VkUmVzdWx0ICopcGFyc2U6KFpYUmVzdWx0ICopcmVzdWx0IHsKKyAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiWW91IG11c3Qgb3ZlcnJpZGUgJUAgaW4gYSBzdWJjbGFzcyIsIE5TU3RyaW5nRnJvbVNlbGVjdG9yKF9jbWQpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07Cit9CisKKysgKFpYUGFyc2VkUmVzdWx0ICopcGFyc2VSZXN1bHQ6KFpYUmVzdWx0ICopdGhlUmVzdWx0IHsKKyAgZm9yIChaWFJlc3VsdFBhcnNlciAqcGFyc2VyIGluIFBBUlNFUlMpIHsKKyAgICBaWFBhcnNlZFJlc3VsdCAqcmVzdWx0ID0gW3BhcnNlciBwYXJzZTp0aGVSZXN1bHRdOworICAgIGlmIChyZXN1bHQgIT0gbmlsKSB7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgfQorICByZXR1cm4gW1pYVGV4dFBhcnNlZFJlc3VsdCB0ZXh0UGFyc2VkUmVzdWx0V2l0aFRleHQ6W3RoZVJlc3VsdCB0ZXh0XSBsYW5ndWFnZTpuaWxdOworfQorCistICh2b2lkKW1heWJlQXBwZW5kOihOU1N0cmluZyAqKXZhbHVlIHJlc3VsdDooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0IHsKKyAgaWYgKHZhbHVlICE9IG5pbCkgeworICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiXG4lQCIsIHZhbHVlXTsKKyAgfQorfQorCistICh2b2lkKW1heWJlQXBwZW5kQXJyYXk6KE5TQXJyYXkgKil2YWx1ZSByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCB7CisgIGlmICh2YWx1ZSAhPSBuaWwpIHsKKyAgICBmb3IgKE5TU3RyaW5nICpzIGluIHZhbHVlKSB7CisgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIlxuJUAiLCBzXTsKKyAgICB9CisgIH0KK30KKworLSAoTlNBcnJheSAqKW1heWJlV3JhcDooTlNTdHJpbmcgKil2YWx1ZSB7CisgIHJldHVybiB2YWx1ZSA9PSBuaWwgPyBuaWwgOiBAW3ZhbHVlXTsKK30KKworKyAoTlNTdHJpbmcgKil1bmVzY2FwZUJhY2tzbGFzaDooTlNTdHJpbmcgKillc2NhcGVkIHsKKyAgTlNVSW50ZWdlciBiYWNrc2xhc2ggPSBbZXNjYXBlZCByYW5nZU9mU3RyaW5nOkAiXFwiXS5sb2NhdGlvbjsKKyAgaWYgKGJhY2tzbGFzaCA9PSBOU05vdEZvdW5kKSB7CisgICAgcmV0dXJuIGVzY2FwZWQ7CisgIH0KKyAgTlNVSW50ZWdlciBtYXggPSBbZXNjYXBlZCBsZW5ndGhdOworICBOU011dGFibGVTdHJpbmcgKnVuZXNjYXBlZCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5Om1heCAtIDFdOworICBbdW5lc2NhcGVkIGFwcGVuZFN0cmluZzpbZXNjYXBlZCBzdWJzdHJpbmdUb0luZGV4OmJhY2tzbGFzaF1dOworICBCT09MIG5leHRJc0VzY2FwZWQgPSBOTzsKKyAgZm9yIChpbnQgaSA9IChpbnQpYmFja3NsYXNoOyBpIDwgbWF4OyBpKyspIHsKKyAgICB1bmljaGFyIGMgPSBbZXNjYXBlZCBjaGFyYWN0ZXJBdEluZGV4OmldOworICAgIGlmIChuZXh0SXNFc2NhcGVkIHx8IGMgIT0gJ1xcJykgeworICAgICAgW3VuZXNjYXBlZCBhcHBlbmRGb3JtYXQ6QCIlQyIsIGNdOworICAgICAgbmV4dElzRXNjYXBlZCA9IE5POworICAgIH0gZWxzZSB7CisgICAgICBuZXh0SXNFc2NhcGVkID0gWUVTOworICAgIH0KKyAgfQorICByZXR1cm4gdW5lc2NhcGVkOworfQorCisrIChpbnQpcGFyc2VIZXhEaWdpdDoodW5pY2hhciljIHsKKyAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7CisgICAgcmV0dXJuIGMgLSAnMCc7CisgIH0KKyAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKSB7CisgICAgcmV0dXJuIDEwICsgKGMgLSAnYScpOworICB9CisgIGlmIChjID49ICdBJyAmJiBjIDw9ICdGJykgeworICAgIHJldHVybiAxMCArIChjIC0gJ0EnKTsKKyAgfQorICByZXR1cm4gLTE7Cit9CisKKysgKEJPT0wpaXNTdHJpbmdPZkRpZ2l0czooTlNTdHJpbmcgKil2YWx1ZSBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGggeworICByZXR1cm4gdmFsdWUgIT0gbmlsICYmIGxlbmd0aCA9PSB2YWx1ZS5sZW5ndGggJiYgW0RJR0lUUyBudW1iZXJPZk1hdGNoZXNJblN0cmluZzp2YWx1ZSBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgdmFsdWUubGVuZ3RoKV0gPiAwOworfQorCistIChOU1N0cmluZyAqKXVybERlY29kZTooTlNTdHJpbmcgKillc2NhcGVkIHsKKyAgaWYgKGVzY2FwZWQgPT0gbmlsKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGludCBmaXJzdCA9IFtzZWxmIGZpbmRGaXJzdEVzY2FwZTplc2NhcGVkXTsKKyAgaWYgKGZpcnN0ID09IC0xKSB7CisgICAgcmV0dXJuIGVzY2FwZWQ7CisgIH0KKworICBOU1VJbnRlZ2VyIG1heCA9IFtlc2NhcGVkIGxlbmd0aF07CisgIE5TTXV0YWJsZVN0cmluZyAqdW5lc2NhcGVkID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6bWF4IC0gMl07CisgIFt1bmVzY2FwZWQgYXBwZW5kU3RyaW5nOltlc2NhcGVkIHN1YnN0cmluZ1RvSW5kZXg6Zmlyc3RdXTsKKworICBmb3IgKGludCBpID0gZmlyc3Q7IGkgPCBtYXg7IGkrKykgeworICAgIHVuaWNoYXIgYyA9IFtlc2NhcGVkIGNoYXJhY3RlckF0SW5kZXg6aV07CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlICcrJzoKKyAgICAgICAgW3VuZXNjYXBlZCBhcHBlbmRTdHJpbmc6QCIgIl07CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnJSc6CisgICAgICAgIGlmIChpID49IG1heCAtIDIpIHsKKyAgICAgICAgICBbdW5lc2NhcGVkIGFwcGVuZFN0cmluZzpAIiUiXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpbnQgZmlyc3REaWdpdFZhbHVlID0gW1tzZWxmIGNsYXNzXSBwYXJzZUhleERpZ2l0Oltlc2NhcGVkIGNoYXJhY3RlckF0SW5kZXg6KytpXV07CisgICAgICAgICAgaW50IHNlY29uZERpZ2l0VmFsdWUgPSBbW3NlbGYgY2xhc3NdIHBhcnNlSGV4RGlnaXQ6W2VzY2FwZWQgY2hhcmFjdGVyQXRJbmRleDorK2ldXTsKKyAgICAgICAgICBpZiAoZmlyc3REaWdpdFZhbHVlIDwgMCB8fCBzZWNvbmREaWdpdFZhbHVlIDwgMCkgeworICAgICAgICAgICAgW3VuZXNjYXBlZCBhcHBlbmRGb3JtYXQ6QCIlJSVDJUMiLCBbZXNjYXBlZCBjaGFyYWN0ZXJBdEluZGV4OmkgLSAxXSwgW2VzY2FwZWQgY2hhcmFjdGVyQXRJbmRleDppXV07CisgICAgICAgICAgfQorICAgICAgICAgIFt1bmVzY2FwZWQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoKGZpcnN0RGlnaXRWYWx1ZSA8PCA0KSArIHNlY29uZERpZ2l0VmFsdWUpXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFt1bmVzY2FwZWQgYXBwZW5kRm9ybWF0OkAiJUMiLCBjXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHVuZXNjYXBlZDsKK30KKworLSAoaW50KWZpbmRGaXJzdEVzY2FwZTooTlNTdHJpbmcgKillc2NhcGVkIHsKKyAgTlNVSW50ZWdlciBtYXggPSBbZXNjYXBlZCBsZW5ndGhdOworICBmb3IgKGludCBpID0gMDsgaSA8IG1heDsgaSsrKSB7CisgICAgdW5pY2hhciBjID0gW2VzY2FwZWQgY2hhcmFjdGVyQXRJbmRleDppXTsKKyAgICBpZiAoYyA9PSAnKycgfHwgYyA9PSAnJScpIHsKKyAgICAgIHJldHVybiBpOworICAgIH0KKyAgfQorCisgIHJldHVybiAtMTsKK30KKworKyAoQk9PTClpc1N1YnN0cmluZ09mRGlnaXRzOihOU1N0cmluZyAqKXZhbHVlIG9mZnNldDooaW50KW9mZnNldCBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGggeworICBpZiAodmFsdWUgPT0gbmlsKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIGludCBtYXggPSBvZmZzZXQgKyBsZW5ndGg7CisgIHJldHVybiB2YWx1ZS5sZW5ndGggPj0gbWF4ICYmIFtESUdJVFMgbnVtYmVyT2ZNYXRjaGVzSW5TdHJpbmc6dmFsdWUgb3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKG9mZnNldCwgbWF4IC0gb2Zmc2V0KV0gPiAwOworfQorCisrIChCT09MKWlzU3Vic3RyaW5nT2ZBbHBoYU51bWVyaWM6KE5TU3RyaW5nICopdmFsdWUgb2Zmc2V0OihpbnQpb2Zmc2V0IGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCB7CisgIGlmICh2YWx1ZSA9PSBuaWwpIHsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgaW50IG1heCA9IG9mZnNldCArIGxlbmd0aDsKKyAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+PSBtYXggJiYgW0FMUEhBTlVNIG51bWJlck9mTWF0Y2hlc0luU3RyaW5nOnZhbHVlIG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZShvZmZzZXQsIG1heCAtIG9mZnNldCldID4gMDsKK30KKworLSAoTlNNdXRhYmxlRGljdGlvbmFyeSAqKXBhcnNlTmFtZVZhbHVlUGFpcnM6KE5TU3RyaW5nICopdXJpIHsKKyAgTlNVSW50ZWdlciBwYXJhbVN0YXJ0ID0gW3VyaSByYW5nZU9mU3RyaW5nOkAiPyJdLmxvY2F0aW9uOworICBpZiAocGFyYW1TdGFydCA9PSBOU05vdEZvdW5kKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU011dGFibGVEaWN0aW9uYXJ5ICpyZXN1bHQgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OjNdOworICBmb3IgKE5TU3RyaW5nICprZXlWYWx1ZSBpbiBbW3VyaSBzdWJzdHJpbmdGcm9tSW5kZXg6cGFyYW1TdGFydCArIDFdIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpBTVBFUlNBTkRdKSB7CisgICAgW3NlbGYgYXBwZW5kS2V5VmFsdWU6a2V5VmFsdWUgcmVzdWx0OnJlc3VsdF07CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAodm9pZClhcHBlbmRLZXlWYWx1ZTooTlNTdHJpbmcgKilrZXlWYWx1ZSByZXN1bHQ6KE5TTXV0YWJsZURpY3Rpb25hcnkgKilyZXN1bHQgeworICBOU1JhbmdlIGVxdWFsc1JhbmdlID0gW2tleVZhbHVlIHJhbmdlT2ZTdHJpbmc6RVFVQUxTXTsKKyAgaWYgKGVxdWFsc1JhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIHsKKyAgICBOU1N0cmluZyAqa2V5ID0gW2tleVZhbHVlIHN1YnN0cmluZ1RvSW5kZXg6ZXF1YWxzUmFuZ2UubG9jYXRpb25dOworICAgIE5TU3RyaW5nICp2YWx1ZSA9IFtrZXlWYWx1ZSBzdWJzdHJpbmdGcm9tSW5kZXg6ZXF1YWxzUmFuZ2UubG9jYXRpb24gKyAxXTsKKyAgICB2YWx1ZSA9IFtzZWxmIHVybERlY29kZTp2YWx1ZV07CisgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTsKKyAgfQorfQorCisrIChOU1N0cmluZyAqKXVybERlY29kZTooTlNTdHJpbmcgKillbmNvZGVkIHsKKyAgTlNTdHJpbmcgKnJlc3VsdCA9IFtlbmNvZGVkIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIisiIHdpdGhTdHJpbmc6QCIgIl07CisgIHJlc3VsdCA9IFtyZXN1bHQgc3RyaW5nQnlSZXBsYWNpbmdQZXJjZW50RXNjYXBlc1VzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICByZXR1cm4gcmVzdWx0OworfQorCisrIChOU0FycmF5ICopbWF0Y2hQcmVmaXhlZEZpZWxkOihOU1N0cmluZyAqKXByZWZpeCByYXdUZXh0OihOU1N0cmluZyAqKXJhd1RleHQgZW5kQ2hhcjoodW5pY2hhcillbmRDaGFyIHRyaW06KEJPT0wpdHJpbSB7CisgIE5TTXV0YWJsZUFycmF5ICptYXRjaGVzID0gbmlsOworICBOU1VJbnRlZ2VyIGkgPSAwOworICBOU1VJbnRlZ2VyIG1heCA9IFtyYXdUZXh0IGxlbmd0aF07CisgIHdoaWxlIChpIDwgbWF4KSB7CisgICAgaSA9IFtyYXdUZXh0IHJhbmdlT2ZTdHJpbmc6cHJlZml4IG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOk5TTWFrZVJhbmdlKGksIFtyYXdUZXh0IGxlbmd0aF0gLSBpIC0gMSldLmxvY2F0aW9uOworICAgIGlmIChpID09IE5TTm90Rm91bmQpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpICs9IFtwcmVmaXggbGVuZ3RoXTsKKyAgICBOU1VJbnRlZ2VyIHN0YXJ0ID0gaTsKKyAgICBCT09MIG1vcmUgPSBZRVM7CisgICAgd2hpbGUgKG1vcmUpIHsKKyAgICAgIGkgPSBbcmF3VGV4dCByYW5nZU9mU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUMiLCBlbmRDaGFyXSBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpOU01ha2VSYW5nZShpLCBbcmF3VGV4dCBsZW5ndGhdIC0gaSldLmxvY2F0aW9uOworICAgICAgaWYgKGkgPT0gTlNOb3RGb3VuZCkgeworICAgICAgICBpID0gW3Jhd1RleHQgbGVuZ3RoXTsKKyAgICAgICAgbW9yZSA9IE5POworICAgICAgfSBlbHNlIGlmIChbcmF3VGV4dCBjaGFyYWN0ZXJBdEluZGV4OmkgLSAxXSA9PSAnXFwnKSB7CisgICAgICAgIGkrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtYXRjaGVzID09IG5pbCkgeworICAgICAgICAgIG1hdGNoZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6M107CisgICAgICAgIH0KKyAgICAgICAgTlNTdHJpbmcgKmVsZW1lbnQgPSBbc2VsZiB1bmVzY2FwZUJhY2tzbGFzaDpbcmF3VGV4dCBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2Uoc3RhcnQsIGkgLSBzdGFydCldXTsKKyAgICAgICAgaWYgKHRyaW0pIHsKKyAgICAgICAgICBlbGVtZW50ID0gW2VsZW1lbnQgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZWxlbWVudC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgW21hdGNoZXMgYWRkT2JqZWN0OmVsZW1lbnRdOworICAgICAgICB9CisgICAgICAgIGkrKzsKKyAgICAgICAgbW9yZSA9IE5POworICAgICAgfQorICAgIH0KKyAgfQorICBpZiAobWF0Y2hlcyA9PSBuaWwgfHwgW21hdGNoZXMgY291bnRdID09IDApIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIHJldHVybiBtYXRjaGVzOworfQorCisrIChOU1N0cmluZyAqKW1hdGNoU2luZ2xlUHJlZml4ZWRGaWVsZDooTlNTdHJpbmcgKilwcmVmaXggcmF3VGV4dDooTlNTdHJpbmcgKilyYXdUZXh0IGVuZENoYXI6KHVuaWNoYXIpZW5kQ2hhciB0cmltOihCT09MKXRyaW0geworICBOU0FycmF5ICptYXRjaGVzID0gW3NlbGYgbWF0Y2hQcmVmaXhlZEZpZWxkOnByZWZpeCByYXdUZXh0OnJhd1RleHQgZW5kQ2hhcjplbmRDaGFyIHRyaW06dHJpbV07CisgIHJldHVybiBtYXRjaGVzID09IG5pbCA/IG5pbCA6IG1hdGNoZXNbMF07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYU01TTU1TUmVzdWx0UGFyc2VyLmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFNNU01NU1Jlc3VsdFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjNmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFNNU01NU1Jlc3VsdFBhcnNlci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUmVzdWx0UGFyc2VyLmgiCisKKy8qKgorICogUGFyc2VzIGFuICJzbXM6IiBVUkkgcmVzdWx0LCB3aGljaCBzcGVjaWZpZXMgYSBudW1iZXIgdG8gU01TLgorICogU2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU3MjQgb24gdGhpcy4KKyAqIAorICogVGhpcyBjbGFzcyBzdXBwb3J0cyAidmlhIiBzeW50YXggZm9yIG51bWJlcnMsIHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoZSBzcGVjLgorICogRm9yIGV4YW1wbGUgIisxMjEyNTU1MTIxMjt2aWE9KzEyMTI0NDQwMTAxIiBtYXkgYXBwZWFyIGFzIGEgbnVtYmVyLgorICogSXQgYWxzbyBzdXBwb3J0cyBhICJzdWJqZWN0IiBxdWVyeSBwYXJhbWV0ZXIsIHdoaWNoIGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIHNwZWMuCisgKiBUaGVzZSBhcmUgaW5jbHVkZWQgc2luY2UgdGhleSB3ZXJlIG1lbnRpb25lZCBpbiBlYXJsaWVyIElFVEYgZHJhZnRzIGFuZCBtaWdodCBiZQorICogdXNlZC4KKyAqIAorICogVGhpcyBhY3R1YWxseSBhbHNvIHBhcnNlcyBVUklzIHN0YXJ0aW5nIHdpdGggIm1tczoiIGFuZCB0cmVhdHMgdGhlbSBhbGwgdGhlIHNhbWUgd2F5LAorICogYW5kIGVmZmVjdGl2ZWx5IGNvbnZlcnRzIHRoZW0gdG8gYW4gInNtczoiIFVSSSBmb3IgcHVycG9zZXMgb2YgZm9yd2FyZGluZyB0byB0aGUgcGxhdGZvcm0uCisgKi8KKworQGludGVyZmFjZSBaWFNNU01NU1Jlc3VsdFBhcnNlciA6IFpYUmVzdWx0UGFyc2VyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYU01TTU1TUmVzdWx0UGFyc2VyLm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFNNU01NU1Jlc3VsdFBhcnNlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZGJhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFNNU01NU1Jlc3VsdFBhcnNlci5tCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisjaW1wb3J0ICJaWFNNU01NU1Jlc3VsdFBhcnNlci5oIgorI2ltcG9ydCAiWlhTTVNQYXJzZWRSZXN1bHQuaCIKKworQGltcGxlbWVudGF0aW9uIFpYU01TTU1TUmVzdWx0UGFyc2VyCisKKy0gKFpYUGFyc2VkUmVzdWx0ICopcGFyc2U6KFpYUmVzdWx0ICopcmVzdWx0IHsKKyAgTlNTdHJpbmcgKnJhd1RleHQgPSBbWlhSZXN1bHRQYXJzZXIgbWFzc2FnZWRUZXh0OnJlc3VsdF07CisgIGlmICghKFtyYXdUZXh0IGhhc1ByZWZpeDpAInNtczoiXSB8fCBbcmF3VGV4dCBoYXNQcmVmaXg6QCJTTVM6Il0gfHwgW3Jhd1RleHQgaGFzUHJlZml4OkAibW1zOiJdIHx8IFtyYXdUZXh0IGhhc1ByZWZpeDpAIk1NUzoiXSkpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNNdXRhYmxlRGljdGlvbmFyeSAqbmFtZVZhbHVlUGFpcnMgPSBbc2VsZiBwYXJzZU5hbWVWYWx1ZVBhaXJzOnJhd1RleHRdOworICBOU1N0cmluZyAqc3ViamVjdCA9IG5pbDsKKyAgTlNTdHJpbmcgKmJvZHkgPSBuaWw7CisgIEJPT0wgcXVlcnlTeW50YXggPSBOTzsKKyAgaWYgKG5hbWVWYWx1ZVBhaXJzICE9IG5pbCAmJiBbbmFtZVZhbHVlUGFpcnMgY291bnRdID4gMCkgeworICAgIHN1YmplY3QgPSBuYW1lVmFsdWVQYWlyc1tAInN1YmplY3QiXTsKKyAgICBib2R5ID0gbmFtZVZhbHVlUGFpcnNbQCJib2R5Il07CisgICAgcXVlcnlTeW50YXggPSBZRVM7CisgIH0KKworICBOU1VJbnRlZ2VyIHF1ZXJ5U3RhcnQgPSBbcmF3VGV4dCByYW5nZU9mU3RyaW5nOkAiPyIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoNCwgW3Jhd1RleHQgbGVuZ3RoXSAtIDQpXS5sb2NhdGlvbjsKKyAgTlNTdHJpbmcgKnNtc1VSSVdpdGhvdXRRdWVyeTsKKyAgaWYgKHF1ZXJ5U3RhcnQgPT0gTlNOb3RGb3VuZCB8fCAhcXVlcnlTeW50YXgpIHsKKyAgICBzbXNVUklXaXRob3V0UXVlcnkgPSBbcmF3VGV4dCBzdWJzdHJpbmdGcm9tSW5kZXg6NF07CisgIH0gZWxzZSB7CisgICAgc21zVVJJV2l0aG91dFF1ZXJ5ID0gW3Jhd1RleHQgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKDQsIHF1ZXJ5U3RhcnQgLSA0KV07CisgIH0KKworICBpbnQgbGFzdENvbW1hID0gLTE7CisgIE5TSW50ZWdlciBjb21tYTsKKyAgTlNNdXRhYmxlQXJyYXkgKm51bWJlcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6MV07CisgIE5TTXV0YWJsZUFycmF5ICp2aWFzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OjFdOworICB3aGlsZSAoKGNvbW1hID0gW3Ntc1VSSVdpdGhvdXRRdWVyeSByYW5nZU9mU3RyaW5nOkAiLCIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UobGFzdENvbW1hICsgMSwgKGludClbc21zVVJJV2l0aG91dFF1ZXJ5IGxlbmd0aF0gLSBsYXN0Q29tbWEgLSAxKV0ubG9jYXRpb24pID4gbGFzdENvbW1hICYmIGNvbW1hICE9IE5TTm90Rm91bmQpIHsKKyAgICBOU1N0cmluZyAqbnVtYmVyUGFydCA9IFtzbXNVUklXaXRob3V0UXVlcnkgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKGxhc3RDb21tYSArIDEsIGNvbW1hIC0gbGFzdENvbW1hIC0gMSldOworICAgIFtzZWxmIGFkZE51bWJlclZpYTpudW1iZXJzIHZpYXM6dmlhcyBudW1iZXJQYXJ0Om51bWJlclBhcnRdOworICAgIGxhc3RDb21tYSA9IChpbnQpY29tbWE7CisgIH0KKyAgW3NlbGYgYWRkTnVtYmVyVmlhOm51bWJlcnMgdmlhczp2aWFzIG51bWJlclBhcnQ6W3Ntc1VSSVdpdGhvdXRRdWVyeSBzdWJzdHJpbmdGcm9tSW5kZXg6bGFzdENvbW1hICsgMV1dOworCisgIHJldHVybiBbWlhTTVNQYXJzZWRSZXN1bHQgc21zUGFyc2VkUmVzdWx0V2l0aE51bWJlcnM6bnVtYmVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWFzOnZpYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdDpzdWJqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6Ym9keV07Cit9CisKKy0gKHZvaWQpYWRkTnVtYmVyVmlhOihOU011dGFibGVBcnJheSAqKW51bWJlcnMgdmlhczooTlNNdXRhYmxlQXJyYXkgKil2aWFzIG51bWJlclBhcnQ6KE5TU3RyaW5nICopbnVtYmVyUGFydCB7CisgIE5TVUludGVnZXIgbnVtYmVyRW5kID0gW251bWJlclBhcnQgcmFuZ2VPZlN0cmluZzpAIjsiXS5sb2NhdGlvbjsKKyAgaWYgKG51bWJlckVuZCA9PSBOU05vdEZvdW5kKSB7CisgICAgW251bWJlcnMgYWRkT2JqZWN0Om51bWJlclBhcnRdOworICAgIFt2aWFzIGFkZE9iamVjdDpbTlNOdWxsIG51bGxdXTsKKyAgfSBlbHNlIHsKKyAgICBbbnVtYmVycyBhZGRPYmplY3Q6W251bWJlclBhcnQgc3Vic3RyaW5nVG9JbmRleDpudW1iZXJFbmRdXTsKKyAgICBOU1N0cmluZyAqbWF5YmVWaWEgPSBbbnVtYmVyUGFydCBzdWJzdHJpbmdGcm9tSW5kZXg6bnVtYmVyRW5kICsgMV07CisgICAgaWYgKFttYXliZVZpYSBoYXNQcmVmaXg6QCJ2aWE9Il0pIHsKKyAgICAgIFt2aWFzIGFkZE9iamVjdDpbbWF5YmVWaWEgc3Vic3RyaW5nRnJvbUluZGV4OjRdXTsKKyAgICB9IGVsc2UgeworICAgICAgW3ZpYXMgYWRkT2JqZWN0OltOU051bGwgbnVsbF1dOworICAgIH0KKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFNNU1BhcnNlZFJlc3VsdC5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhTTVNQYXJzZWRSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjU5NGZmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhTTVNQYXJzZWRSZXN1bHQuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFBhcnNlZFJlc3VsdC5oIgorCitAaW50ZXJmYWNlIFpYU01TUGFyc2VkUmVzdWx0IDogWlhQYXJzZWRSZXN1bHQKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIE5TQXJyYXkgKm51bWJlcnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgTlNBcnJheSAqdmlhczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKnN1YmplY3Q7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpib2R5OworCistIChpZClpbml0V2l0aE51bWJlcjooTlNTdHJpbmcgKiludW1iZXIgdmlhOihOU1N0cmluZyAqKXZpYSBzdWJqZWN0OihOU1N0cmluZyAqKXN1YmplY3QgYm9keTooTlNTdHJpbmcgKilib2R5OworLSAoaWQpaW5pdFdpdGhOdW1iZXJzOihOU0FycmF5ICopbnVtYmVycyB2aWFzOihOU0FycmF5ICopdmlhcyBzdWJqZWN0OihOU1N0cmluZyAqKXN1YmplY3QgYm9keTooTlNTdHJpbmcgKilib2R5OworKyAoaWQpc21zUGFyc2VkUmVzdWx0V2l0aE51bWJlcjooTlNTdHJpbmcgKiludW1iZXIgdmlhOihOU1N0cmluZyAqKXZpYSBzdWJqZWN0OihOU1N0cmluZyAqKXN1YmplY3QgYm9keTooTlNTdHJpbmcgKilib2R5OworKyAoaWQpc21zUGFyc2VkUmVzdWx0V2l0aE51bWJlcnM6KE5TQXJyYXkgKiludW1iZXJzIHZpYXM6KE5TQXJyYXkgKil2aWFzIHN1YmplY3Q6KE5TU3RyaW5nICopc3ViamVjdCBib2R5OihOU1N0cmluZyAqKWJvZHk7CistIChOU1N0cmluZyAqKXNNU1VSSTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhTTVNQYXJzZWRSZXN1bHQubSBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYU01TUGFyc2VkUmVzdWx0Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlZjA2NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYU01TUGFyc2VkUmVzdWx0Lm0KQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhTTVNQYXJzZWRSZXN1bHQuaCIKKworQGltcGxlbWVudGF0aW9uIFpYU01TUGFyc2VkUmVzdWx0CisKKy0gKGlkKWluaXRXaXRoTnVtYmVyOihOU1N0cmluZyAqKW51bWJlciB2aWE6KE5TU3RyaW5nICopdmlhIHN1YmplY3Q6KE5TU3RyaW5nICopc3ViamVjdCBib2R5OihOU1N0cmluZyAqKWJvZHkgeworICBOU0FycmF5ICpudW1iZXJzOworICBpZiAobnVtYmVyKSB7CisgICAgbnVtYmVycyA9IEBbbnVtYmVyXTsKKyAgfQorCisgIE5TQXJyYXkgKnZpYXM7CisgIGlmICh2aWEpIHsKKyAgICB2aWFzID0gQFt2aWFdOworICB9CisgIAorICByZXR1cm4gW3NlbGYgaW5pdFdpdGhOdW1iZXJzOm51bWJlcnMgdmlhczp2aWFzIHN1YmplY3Q6c3ViamVjdCBib2R5OmJvZHldOworfQorCistIChpZClpbml0V2l0aE51bWJlcnM6KE5TQXJyYXkgKiludW1iZXJzIHZpYXM6KE5TQXJyYXkgKil2aWFzIHN1YmplY3Q6KE5TU3RyaW5nICopc3ViamVjdCBib2R5OihOU1N0cmluZyAqKWJvZHkgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0V2l0aFR5cGU6a1BhcnNlZFJlc3VsdFR5cGVTTVNdKSB7CisgICAgX251bWJlcnMgPSBudW1iZXJzOworICAgIF92aWFzID0gdmlhczsKKyAgICBfc3ViamVjdCA9IHN1YmplY3Q7CisgICAgX2JvZHkgPSBib2R5OworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKGlkKXNtc1BhcnNlZFJlc3VsdFdpdGhOdW1iZXI6KE5TU3RyaW5nICopbnVtYmVyIHZpYTooTlNTdHJpbmcgKil2aWEgc3ViamVjdDooTlNTdHJpbmcgKilzdWJqZWN0IGJvZHk6KE5TU3RyaW5nICopYm9keSB7CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoTnVtYmVyOm51bWJlciB2aWE6dmlhIHN1YmplY3Q6c3ViamVjdCBib2R5OmJvZHldOworfQorCisrIChpZClzbXNQYXJzZWRSZXN1bHRXaXRoTnVtYmVyczooTlNBcnJheSAqKW51bWJlcnMgdmlhczooTlNBcnJheSAqKXZpYXMgc3ViamVjdDooTlNTdHJpbmcgKilzdWJqZWN0IGJvZHk6KE5TU3RyaW5nICopYm9keSB7CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoTnVtYmVyczpudW1iZXJzIHZpYXM6dmlhcyBzdWJqZWN0OnN1YmplY3QgYm9keTpib2R5XTsKK30KKworLSAoTlNTdHJpbmcgKilzTVNVUkkgeworICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aFN0cmluZzpAInNtczoiXTsKKyAgQk9PTCBmaXJzdCA9IFlFUzsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxmLm51bWJlcnMuY291bnQ7IGkrKykgeworICAgIGlmIChmaXJzdCkgeworICAgICAgZmlyc3QgPSBOTzsKKyAgICB9IGVsc2UgeworICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIsIl07CisgICAgfQorICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOnNlbGYubnVtYmVyc1tpXV07CisgICAgaWYgKHNlbGYudmlhcyAhPSBuaWwgJiYgc2VsZi52aWFzW2ldICE9IFtOU051bGwgbnVsbF0pIHsKKyAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAiO3ZpYT0iXTsKKyAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOnNlbGYudmlhc1tpXV07CisgICAgfQorICB9CisKKyAgQk9PTCBoYXNCb2R5ID0gc2VsZi5ib2R5ICE9IG5pbDsKKyAgQk9PTCBoYXNTdWJqZWN0ID0gc2VsZi5zdWJqZWN0ICE9IG5pbDsKKyAgaWYgKGhhc0JvZHkgfHwgaGFzU3ViamVjdCkgeworICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAiPyJdOworICAgIGlmIChoYXNCb2R5KSB7CisgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAImJvZHk9Il07CisgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpzZWxmLmJvZHldOworICAgIH0KKyAgICBpZiAoaGFzU3ViamVjdCkgeworICAgICAgaWYgKGhhc0JvZHkpIHsKKyAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCImIl07CisgICAgICB9CisgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAInN1YmplY3Q9Il07CisgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpzZWxmLnN1YmplY3RdOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCistIChOU1N0cmluZyAqKWRpc3BsYXlSZXN1bHQgeworICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OjEwMF07CisgIFtaWFBhcnNlZFJlc3VsdCBtYXliZUFwcGVuZEFycmF5OnNlbGYubnVtYmVycyByZXN1bHQ6cmVzdWx0XTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kOnNlbGYuc3ViamVjdCByZXN1bHQ6cmVzdWx0XTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kOnNlbGYuYm9keSByZXN1bHQ6cmVzdWx0XTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTFiY2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhSZXN1bHRQYXJzZXIuaCIKKworLyoqCisgKiBQYXJzZXMgYW4gInNtc3RvOiIgVVJJIHJlc3VsdCwgd2hvc2UgZm9ybWF0IGlzIG5vdCBzdGFuZGFyZGl6ZWQgYnV0IGFwcGVhcnMgdG8gYmUgbGlrZToKKyAqIHNtc3RvOm51bWJlcig6Ym9keSkuCisgKiAKKyAqIFRoaXMgYWN0dWFsbHkgYWxzbyBwYXJzZXMgVVJJcyBzdGFydGluZyB3aXRoICJzbXN0bzoiLCAibW1zdG86IiwgIlNNU1RPOiIsIGFuZAorICogIk1NU1RPOiIsIGFuZCB0cmVhdHMgdGhlbSBhbGwgdGhlIHNhbWUgd2F5LCBhbmQgZWZmZWN0aXZlbHkgY29udmVydHMgdGhlbSB0byBhbiAic21zOiIgVVJJCisgKiBmb3IgcHVycG9zZXMgb2YgZm9yd2FyZGluZyB0byB0aGUgcGxhdGZvcm0uCisgKi8KKworQGludGVyZmFjZSBaWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIgOiBaWFJlc3VsdFBhcnNlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIubSBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYU01TVE9NTVNUT1Jlc3VsdFBhcnNlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNGI4MDcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFNNU1RPTU1TVE9SZXN1bHRQYXJzZXIubQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlc3VsdC5oIgorI2ltcG9ydCAiWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFNNU1BhcnNlZFJlc3VsdC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhTTVNUT01NU1RPUmVzdWx0UGFyc2VyCisKKy0gKFpYUGFyc2VkUmVzdWx0ICopcGFyc2U6KFpYUmVzdWx0ICopcmVzdWx0IHsKKyAgTlNTdHJpbmcgKnJhd1RleHQgPSBbWlhSZXN1bHRQYXJzZXIgbWFzc2FnZWRUZXh0OnJlc3VsdF07CisgIGlmICghKFtyYXdUZXh0IGhhc1ByZWZpeDpAInNtc3RvOiJdIHx8IFtyYXdUZXh0IGhhc1ByZWZpeDpAIlNNU1RPOiJdIHx8IFtyYXdUZXh0IGhhc1ByZWZpeDpAIm1tc3RvOiJdIHx8IFtyYXdUZXh0IGhhc1ByZWZpeDpAIk1NU1RPOiJdKSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNTdHJpbmcgKm51bWJlciA9IFtyYXdUZXh0IHN1YnN0cmluZ0Zyb21JbmRleDo2XTsKKyAgTlNTdHJpbmcgKmJvZHkgPSBuaWw7CisgIE5TVUludGVnZXIgYm9keVN0YXJ0ID0gW251bWJlciByYW5nZU9mU3RyaW5nOkAiOiJdLmxvY2F0aW9uOworICBpZiAoYm9keVN0YXJ0ICE9IE5TTm90Rm91bmQpIHsKKyAgICBib2R5ID0gW251bWJlciBzdWJzdHJpbmdGcm9tSW5kZXg6Ym9keVN0YXJ0ICsgMV07CisgICAgbnVtYmVyID0gW251bWJlciBzdWJzdHJpbmdUb0luZGV4OmJvZHlTdGFydF07CisgIH0KKyAgcmV0dXJuIFtaWFNNU1BhcnNlZFJlc3VsdCBzbXNQYXJzZWRSZXN1bHRXaXRoTnVtYmVyOm51bWJlciB2aWE6bmlsIHN1YmplY3Q6bmlsIGJvZHk6Ym9keV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYU01UUFJlc3VsdFBhcnNlci5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhTTVRQUmVzdWx0UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzYjVmNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYU01UUFJlc3VsdFBhcnNlci5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUmVzdWx0UGFyc2VyLmgiCisKKy8qKgorICogUGFyc2VzIGFuICJzbXRwOiIgVVJJIHJlc3VsdCwgd2hvc2UgZm9ybWF0IGlzIG5vdCBzdGFuZGFyZGl6ZWQgYnV0IGFwcGVhcnMgdG8gYmUgbGlrZToKKyAqIHNtdHAoOnN1YmplY3QoOmJvZHkpKS4KKyAqIAorICogU2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC96eGluZy9pc3N1ZXMvZGV0YWlsP2lkPTUzNgorICovCisKK0BpbnRlcmZhY2UgWlhTTVRQUmVzdWx0UGFyc2VyIDogWlhSZXN1bHRQYXJzZXIKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhTTVRQUmVzdWx0UGFyc2VyLm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFNNVFBSZXN1bHRQYXJzZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzc1NjZmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhTTVRQUmVzdWx0UGFyc2VyLm0KQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisjaW1wb3J0ICJaWFNNVFBSZXN1bHRQYXJzZXIuaCIKKworQGltcGxlbWVudGF0aW9uIFpYU01UUFJlc3VsdFBhcnNlcgorCistIChaWFBhcnNlZFJlc3VsdCAqKXBhcnNlOihaWFJlc3VsdCAqKXJlc3VsdCB7CisgIE5TU3RyaW5nICpyYXdUZXh0ID0gW1pYUmVzdWx0UGFyc2VyIG1hc3NhZ2VkVGV4dDpyZXN1bHRdOworICBpZiAoIShbcmF3VGV4dCBoYXNQcmVmaXg6QCJzbXRwOiJdIHx8IFtyYXdUZXh0IGhhc1ByZWZpeDpAIlNNVFA6Il0pKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU1N0cmluZyAqZW1haWxBZGRyZXNzID0gW3Jhd1RleHQgc3Vic3RyaW5nRnJvbUluZGV4OjVdOworICBOU1N0cmluZyAqc3ViamVjdCA9IG5pbDsKKyAgTlNTdHJpbmcgKmJvZHkgPSBuaWw7CisgIE5TVUludGVnZXIgY29sb24gPSBbZW1haWxBZGRyZXNzIHJhbmdlT2ZTdHJpbmc6QCI6Il0ubG9jYXRpb247CisgIGlmIChjb2xvbiAhPSBOU05vdEZvdW5kKSB7CisgICAgc3ViamVjdCA9IFtlbWFpbEFkZHJlc3Mgc3Vic3RyaW5nRnJvbUluZGV4OmNvbG9uICsgMV07CisgICAgZW1haWxBZGRyZXNzID0gW2VtYWlsQWRkcmVzcyBzdWJzdHJpbmdUb0luZGV4OmNvbG9uXTsKKyAgICBjb2xvbiA9IFtzdWJqZWN0IHJhbmdlT2ZTdHJpbmc6QCI6Il0ubG9jYXRpb247CisgICAgaWYgKGNvbG9uICE9IE5TTm90Rm91bmQpIHsKKyAgICAgIGJvZHkgPSBbc3ViamVjdCBzdWJzdHJpbmdGcm9tSW5kZXg6Y29sb24gKyAxXTsKKyAgICAgIHN1YmplY3QgPSBbc3ViamVjdCBzdWJzdHJpbmdUb0luZGV4OmNvbG9uXTsKKyAgICB9CisgIH0KKyAgTlNTdHJpbmcgKm1haWx0b1VSSSA9IFtAIm1haWx0bzoiIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmVtYWlsQWRkcmVzc107CisgIHJldHVybiBbWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQgZW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0V2l0aEVtYWlsQWRkcmVzczplbWFpbEFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0OnN1YmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OmJvZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbHRvVVJJOm1haWx0b1VSSV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYVGVsUGFyc2VkUmVzdWx0LmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFRlbFBhcnNlZFJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNWQyZDEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFRlbFBhcnNlZFJlc3VsdC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhUZWxQYXJzZWRSZXN1bHQgOiBaWFBhcnNlZFJlc3VsdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpudW1iZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICp0ZWxVUkk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICp0aXRsZTsKKworLSAoaWQpaW5pdFdpdGhOdW1iZXI6KE5TU3RyaW5nICopbnVtYmVyIHRlbFVSSTooTlNTdHJpbmcgKil0ZWxVUkkgdGl0bGU6KE5TU3RyaW5nICopdGl0bGU7CisrIChpZCl0ZWxQYXJzZWRSZXN1bHRXaXRoTnVtYmVyOihOU1N0cmluZyAqKW51bWJlciB0ZWxVUkk6KE5TU3RyaW5nICopdGVsVVJJIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFRlbFBhcnNlZFJlc3VsdC5tIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhUZWxQYXJzZWRSZXN1bHQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWQxYjI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhUZWxQYXJzZWRSZXN1bHQubQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFRlbFBhcnNlZFJlc3VsdC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhUZWxQYXJzZWRSZXN1bHQKKworLSAoaWQpaW5pdFdpdGhOdW1iZXI6KE5TU3RyaW5nICopbnVtYmVyIHRlbFVSSTooTlNTdHJpbmcgKil0ZWxVUkkgdGl0bGU6KE5TU3RyaW5nICopdGl0bGUgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0V2l0aFR5cGU6a1BhcnNlZFJlc3VsdFR5cGVUZWxdKSB7CisgICAgX251bWJlciA9IG51bWJlcjsKKyAgICBfdGVsVVJJID0gdGVsVVJJOworICAgIF90aXRsZSA9IHRpdGxlOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKGlkKXRlbFBhcnNlZFJlc3VsdFdpdGhOdW1iZXI6KE5TU3RyaW5nICopbnVtYmVyIHRlbFVSSTooTlNTdHJpbmcgKil0ZWxVUkkgdGl0bGU6KE5TU3RyaW5nICopdGl0bGUgeworICByZXR1cm4gW1tzZWxmIGFsbG9jXSBpbml0V2l0aE51bWJlcjpudW1iZXIgdGVsVVJJOnRlbFVSSSB0aXRsZTp0aXRsZV07Cit9CisKKy0gKE5TU3RyaW5nICopZGlzcGxheVJlc3VsdCB7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6MjBdOworICBbWlhQYXJzZWRSZXN1bHQgbWF5YmVBcHBlbmQ6c2VsZi5udW1iZXIgcmVzdWx0OnJlc3VsdF07CisgIFtaWFBhcnNlZFJlc3VsdCBtYXliZUFwcGVuZDpzZWxmLnRpdGxlIHJlc3VsdDpyZXN1bHRdOworICByZXR1cm4gcmVzdWx0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFRlbFJlc3VsdFBhcnNlci5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhUZWxSZXN1bHRQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjQxNzViCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhUZWxSZXN1bHRQYXJzZXIuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlc3VsdFBhcnNlci5oIgorCisvKioKKyAqIFBhcnNlcyBhICJ0ZWw6IiBVUkkgcmVzdWx0LCB3aGljaCBzcGVjaWZpZXMgYSBwaG9uZSBudW1iZXIuCisgKi8KKworQGludGVyZmFjZSBaWFRlbFJlc3VsdFBhcnNlciA6IFpYUmVzdWx0UGFyc2VyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYVGVsUmVzdWx0UGFyc2VyLm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFRlbFJlc3VsdFBhcnNlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZGUzYzQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFRlbFJlc3VsdFBhcnNlci5tCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYVGVsUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWFRlbFJlc3VsdFBhcnNlci5oIgorCitAaW1wbGVtZW50YXRpb24gWlhUZWxSZXN1bHRQYXJzZXIKKworLSAoWlhQYXJzZWRSZXN1bHQgKilwYXJzZTooWlhSZXN1bHQgKilyZXN1bHQgeworICBOU1N0cmluZyAqcmF3VGV4dCA9IFtaWFJlc3VsdFBhcnNlciBtYXNzYWdlZFRleHQ6cmVzdWx0XTsKKyAgaWYgKCFbcmF3VGV4dCBoYXNQcmVmaXg6QCJ0ZWw6Il0gJiYgIVtyYXdUZXh0IGhhc1ByZWZpeDpAIlRFTDoiXSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNTdHJpbmcgKnRlbFVSSSA9IFtyYXdUZXh0IGhhc1ByZWZpeDpAIlRFTDoiXSA/IFtAInRlbDoiIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOltyYXdUZXh0IHN1YnN0cmluZ0Zyb21JbmRleDo0XV0gOiByYXdUZXh0OworICBOU1VJbnRlZ2VyIHF1ZXJ5U3RhcnQgPSBbcmF3VGV4dCByYW5nZU9mU3RyaW5nOkAiPyIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoNCwgW3Jhd1RleHQgbGVuZ3RoXSAtIDQpXS5sb2NhdGlvbjsKKyAgTlNTdHJpbmcgKm51bWJlciA9IHF1ZXJ5U3RhcnQgPT0gTlNOb3RGb3VuZCA/IFtyYXdUZXh0IHN1YnN0cmluZ0Zyb21JbmRleDo0XSA6IFtyYXdUZXh0IHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZSg0LCBbcmF3VGV4dCBsZW5ndGhdIC0gcXVlcnlTdGFydCldOworICByZXR1cm4gW1pYVGVsUGFyc2VkUmVzdWx0IHRlbFBhcnNlZFJlc3VsdFdpdGhOdW1iZXI6bnVtYmVyIHRlbFVSSTp0ZWxVUkkgdGl0bGU6bmlsXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhUZXh0UGFyc2VkUmVzdWx0LmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFRleHRQYXJzZWRSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDFiMjFjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhUZXh0UGFyc2VkUmVzdWx0LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQYXJzZWRSZXN1bHQuaCIKKworLyoqCisgKiBBIHNpbXBsZSByZXN1bHQgdHlwZSBlbmNhcHN1bGF0aW5nIGEgc3RyaW5nIHRoYXQgaGFzIG5vIGZ1cnRoZXIKKyAqIGludGVycHJldGF0aW9uLgorICovCisKK0BpbnRlcmZhY2UgWlhUZXh0UGFyc2VkUmVzdWx0IDogWlhQYXJzZWRSZXN1bHQKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqdGV4dDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKmxhbmd1YWdlOworCistIChpZClpbml0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBsYW5ndWFnZTooTlNTdHJpbmcgKilsYW5ndWFnZTsKKysgKGlkKXRleHRQYXJzZWRSZXN1bHRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGxhbmd1YWdlOihOU1N0cmluZyAqKWxhbmd1YWdlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFRleHRQYXJzZWRSZXN1bHQubSBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYVGV4dFBhcnNlZFJlc3VsdC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OWZhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFRleHRQYXJzZWRSZXN1bHQubQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFBhcnNlZFJlc3VsdFR5cGUuaCIKKyNpbXBvcnQgIlpYVGV4dFBhcnNlZFJlc3VsdC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhUZXh0UGFyc2VkUmVzdWx0CisKKy0gKGlkKWluaXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGxhbmd1YWdlOihOU1N0cmluZyAqKWxhbmd1YWdlIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhUeXBlOmtQYXJzZWRSZXN1bHRUeXBlVGV4dF0pIHsKKyAgICBfdGV4dCA9IHRleHQ7CisgICAgX2xhbmd1YWdlID0gbGFuZ3VhZ2U7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworKyAoaWQpdGV4dFBhcnNlZFJlc3VsdFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgbGFuZ3VhZ2U6KE5TU3RyaW5nICopbGFuZ3VhZ2UgeworICByZXR1cm4gW1tzZWxmIGFsbG9jXSBpbml0V2l0aFRleHQ6dGV4dCBsYW5ndWFnZTpsYW5ndWFnZV07Cit9CisKKy0gKE5TU3RyaW5nICopZGlzcGxheVJlc3VsdCB7CisgIHJldHVybiBzZWxmLnRleHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYVVJJUGFyc2VkUmVzdWx0LmggYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFVSSVBhcnNlZFJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiN2E2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFVSSVBhcnNlZFJlc3VsdC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhVUklQYXJzZWRSZXN1bHQgOiBaWFBhcnNlZFJlc3VsdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICp1cmk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICp0aXRsZTsKKworLSAoaWQpaW5pdFdpdGhVcmk6KE5TU3RyaW5nICopdXJpIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlOworKyAoaWQpdXJpUGFyc2VkUmVzdWx0V2l0aFVyaTooTlNTdHJpbmcgKil1cmkgdGl0bGU6KE5TU3RyaW5nICopdGl0bGU7CistIChCT09MKXBvc3NpYmx5TWFsaWNpb3VzVVJJOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFVSSVBhcnNlZFJlc3VsdC5tIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhVUklQYXJzZWRSZXN1bHQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjEyMzNhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhVUklQYXJzZWRSZXN1bHQubQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFVSSVBhcnNlZFJlc3VsdC5oIgorCitzdGF0aWMgTlNSZWd1bGFyRXhwcmVzc2lvbiAqVVNFUl9JTl9IT1NUID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gWlhVUklQYXJzZWRSZXN1bHQKKworKyAodm9pZClpbml0aWFsaXplIHsKKyAgVVNFUl9JTl9IT1NUID0gW1tOU1JlZ3VsYXJFeHByZXNzaW9uIGFsbG9jXSBpbml0V2l0aFBhdHRlcm46QCI6LyooW14vQF0rKUBbXi9dKyIgb3B0aW9uczowIGVycm9yOm5pbF07Cit9CisKKy0gKGlkKWluaXRXaXRoVXJpOihOU1N0cmluZyAqKXVyaSB0aXRsZTooTlNTdHJpbmcgKil0aXRsZSB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRXaXRoVHlwZTprUGFyc2VkUmVzdWx0VHlwZVVSSV0pIHsKKyAgICBfdXJpID0gW3NlbGYgbWFzc2FnZVVSSTp1cmldOworICAgIF90aXRsZSA9IHRpdGxlOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKGlkKXVyaVBhcnNlZFJlc3VsdFdpdGhVcmk6KE5TU3RyaW5nICopdXJpIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHsKKyAgcmV0dXJuIFtbc2VsZiBhbGxvY10gaW5pdFdpdGhVcmk6dXJpIHRpdGxlOnRpdGxlXTsKK30KKworLyoqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFVSSSBjb250YWlucyBzdXNwaWNpb3VzIHBhdHRlcm5zIHRoYXQgbWF5IHN1Z2dlc3QgaXQgaW50ZW5kcyB0bworICogbWlzbGVhZCB0aGUgdXNlciBhYm91dCBpdHMgdHJ1ZSBuYXR1cmUuIEF0IHRoZSBtb21lbnQgdGhpcyBsb29rcyBmb3IgdGhlIHByZXNlbmNlCisgKiBvZiB1c2VyL3Bhc3N3b3JkIHN5bnRheCBpbiB0aGUgaG9zdC9hdXRob3JpdHkgcG9ydGlvbiBvZiBhIFVSSSB3aGljaCBtYXkgYmUgdXNlZAorICogaW4gYXR0ZW1wdHMgdG8gbWFrZSB0aGUgVVJJJ3MgaG9zdCBhcHBlYXIgdG8gYmUgb3RoZXIgdGhhbiBpdCBpcy4gRXhhbXBsZToKKyAqIGh0dHA6Ly95b3VyYmFuay5jb21AcGhpc2hlci5jb20gIFRoaXMgVVJJIGNvbm5lY3RzIHRvIHBoaXNoZXIuY29tIGJ1dCBtYXkgYXBwZWFyCisgKiB0byBjb25uZWN0IHRvIHlvdXJiYW5rLmNvbSBhdCBmaXJzdCBnbGFuY2UuCisgKi8KKy0gKEJPT0wpcG9zc2libHlNYWxpY2lvdXNVUkkgeworICByZXR1cm4gW1VTRVJfSU5fSE9TVCBudW1iZXJPZk1hdGNoZXNJblN0cmluZzpzZWxmLnVyaSBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgc2VsZi51cmkubGVuZ3RoKV0gPiAwOworfQorCistIChOU1N0cmluZyAqKWRpc3BsYXlSZXN1bHQgeworICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OjMwXTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kOnNlbGYudGl0bGUgcmVzdWx0OnJlc3VsdF07CisgIFtaWFBhcnNlZFJlc3VsdCBtYXliZUFwcGVuZDpzZWxmLnVyaSByZXN1bHQ6cmVzdWx0XTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBUcmFuc2Zvcm1zIGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyBhIFVSSSBpbnRvIHNvbWV0aGluZyBtb3JlIHByb3BlciwgYnkgYWRkaW5nIG9yIGNhbm9uaWNhbGl6aW5nCisgKiB0aGUgcHJvdG9jb2wuCisgKi8KKy0gKE5TU3RyaW5nICopbWFzc2FnZVVSSTooTlNTdHJpbmcgKil1cmkgeworICBOU1N0cmluZyAqbWFzc2FnZWRVcmkgPSBbdXJpIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV07CisgIE5TVUludGVnZXIgcHJvdG9jb2xFbmQgPSBbbWFzc2FnZWRVcmkgcmFuZ2VPZlN0cmluZzpAIjoiXS5sb2NhdGlvbjsKKyAgaWYgKHByb3RvY29sRW5kID09IE5TTm90Rm91bmQpIHsKKyAgICAvLyBObyBwcm90b2NvbCwgYXNzdW1lIGh0dHAKKyAgICBtYXNzYWdlZFVyaSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiaHR0cDovLyVAIiwgbWFzc2FnZWRVcmldOworICB9IGVsc2UgaWYgKFtzZWxmIGlzQ29sb25Gb2xsb3dlZEJ5UG9ydE51bWJlcjptYXNzYWdlZFVyaSBwcm90b2NvbEVuZDooaW50KXByb3RvY29sRW5kXSkgeworICAgIC8vIEZvdW5kIGEgY29sb24sIGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIGFmdGVyIHRoZSBob3N0LCBzbyB0aGUgcHJvdG9jb2wgaXMgc3RpbGwgbWlzc2luZworICAgIG1hc3NhZ2VkVXJpID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJodHRwOi8vJUAiLCBtYXNzYWdlZFVyaV07CisgIH0KKyAgcmV0dXJuIG1hc3NhZ2VkVXJpOworfQorCistIChCT09MKWlzQ29sb25Gb2xsb3dlZEJ5UG9ydE51bWJlcjooTlNTdHJpbmcgKilhVXJpIHByb3RvY29sRW5kOihpbnQpcHJvdG9jb2xFbmQgeworICBOU1VJbnRlZ2VyIG5leHRTbGFzaCA9IFthVXJpIHJhbmdlT2ZTdHJpbmc6QCIvIiBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UocHJvdG9jb2xFbmQgKyAxLCBbYVVyaSBsZW5ndGhdIC0gcHJvdG9jb2xFbmQgLSAxKV0ubG9jYXRpb247CisgIGlmIChuZXh0U2xhc2ggPT0gTlNOb3RGb3VuZCkgeworICAgIG5leHRTbGFzaCA9IFthVXJpIGxlbmd0aF07CisgIH0KKyAgaWYgKG5leHRTbGFzaCA8PSBwcm90b2NvbEVuZCArIDEpIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBmb3IgKGludCB4ID0gcHJvdG9jb2xFbmQgKyAxOyB4IDwgbmV4dFNsYXNoOyB4KyspIHsKKyAgICBpZiAoW2FVcmkgY2hhcmFjdGVyQXRJbmRleDp4XSA8ICcwJyB8fCBbYVVyaSBjaGFyYWN0ZXJBdEluZGV4OnhdID4gJzknKSB7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICB9CisKKyAgcmV0dXJuIFlFUzsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhVUklSZXN1bHRQYXJzZXIuaCBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYVVJJUmVzdWx0UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkZGEyMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYVVJJUmVzdWx0UGFyc2VyLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhSZXN1bHRQYXJzZXIuaCIKKworLyoqCisgKiBUcmllcyB0byBwYXJzZSByZXN1bHRzIHRoYXQgYXJlIGEgVVJJIG9mIHNvbWUga2luZC4KKyAqLworCitAaW50ZXJmYWNlIFpYVVJJUmVzdWx0UGFyc2VyIDogWlhSZXN1bHRQYXJzZXIKKworKyAoQk9PTClpc0Jhc2ljYWxseVZhbGlkVVJJOihOU1N0cmluZyAqKXVyaTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhVUklSZXN1bHRQYXJzZXIubSBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYVVJJUmVzdWx0UGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkYzQzMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYVVJJUmVzdWx0UGFyc2VyLm0KQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhVUklSZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisjaW1wb3J0ICJaWFVSSVBhcnNlZFJlc3VsdC5oIgorCitzdGF0aWMgTlNTdHJpbmcgKkFMUEhBTlVNX1BBUlQgPSBAIlthLXpBLVowLTlcXC1dIjsKK3N0YXRpYyBOU1JlZ3VsYXJFeHByZXNzaW9uICpVUkxfV0lUSF9QUk9UT0NPTF9QQVRURVJOID0gbmlsOworc3RhdGljIE5TUmVndWxhckV4cHJlc3Npb24gKlVSTF9XSVRIT1VUX1BST1RPQ09MX1BBVFRFUk4gPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBaWFVSSVJlc3VsdFBhcnNlcgorCisrICh2b2lkKWluaXRpYWxpemUgeworICBVUkxfV0lUSF9QUk9UT0NPTF9QQVRURVJOID0gW1tOU1JlZ3VsYXJFeHByZXNzaW9uIGFsbG9jXSBpbml0V2l0aFBhdHRlcm46QCJeW2EtekEtWjAtOV17Mix9OiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOm5pbF07CisgIFVSTF9XSVRIT1VUX1BST1RPQ09MX1BBVFRFUk4gPSBbW05TUmVndWxhckV4cHJlc3Npb24gYWxsb2NdIGluaXRXaXRoUGF0dGVybjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiKCVAK1xcLikrJUB7Mix9IiwgQUxQSEFOVU1fUEFSVCwgQUxQSEFOVU1fUEFSVF0gLy8gaG9zdCBuYW1lIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIig6XFxkezEsNX0pPyJdIC8vIG1heWJlIHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIoL3xcXD98JCkiXSAvLyBxdWVyeSwgcGF0aCBvciBub3RoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczowCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjpuaWxdOworfQorCistIChaWFBhcnNlZFJlc3VsdCAqKXBhcnNlOihaWFJlc3VsdCAqKXJlc3VsdCB7CisgIE5TU3RyaW5nICpyYXdUZXh0ID0gW1pYUmVzdWx0UGFyc2VyIG1hc3NhZ2VkVGV4dDpyZXN1bHRdOworICAvLyBXZSBzcGVjaWZpY2FsbHkgaGFuZGxlIHRoZSBvZGQgIlVSTCIgc2NoZW1lIGhlcmUgZm9yIHNpbXBsaWNpdHkgYW5kIGFkZCAiVVJJIiBmb3IgZnVuCisgIC8vIEFzc3VtZSBhbnl0aGluZyBzdGFydGluZyB0aGlzIHdheSByZWFsbHkgbWVhbnMgdG8gYmUgYSBVUkkKKyAgaWYgKFtyYXdUZXh0IGhhc1ByZWZpeDpAIlVSTDoiXSB8fCBbcmF3VGV4dCBoYXNQcmVmaXg6QCJVUkk6Il0pIHsKKyAgICByZXR1cm4gW1taWFVSSVBhcnNlZFJlc3VsdCBhbGxvY10gaW5pdFdpdGhVcmk6W1tyYXdUZXh0IHN1YnN0cmluZ0Zyb21JbmRleDo0XSBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOm5pbF07CisgIH0KKyAgcmF3VGV4dCA9IFtyYXdUZXh0IHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV07CisgIHJldHVybiBbW3NlbGYgY2xhc3NdIGlzQmFzaWNhbGx5VmFsaWRVUkk6cmF3VGV4dF0gPyBbWlhVUklQYXJzZWRSZXN1bHQgdXJpUGFyc2VkUmVzdWx0V2l0aFVyaTpyYXdUZXh0IHRpdGxlOm5pbF0gOiBuaWw7Cit9CisKKworKyAoQk9PTClpc0Jhc2ljYWxseVZhbGlkVVJJOihOU1N0cmluZyAqKXVyaSB7CisgIGlmIChbdXJpIHJhbmdlT2ZTdHJpbmc6QCIgIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgeworICAgIC8vIFF1aWNrIGhhY2sgY2hlY2sgZm9yIGEgY29tbW9uIGNhc2UKKyAgICByZXR1cm4gTk87CisgIH0KKworICBpZiAoW1VSTF9XSVRIX1BST1RPQ09MX1BBVFRFUk4gbnVtYmVyT2ZNYXRjaGVzSW5TdHJpbmc6dXJpIG9wdGlvbnM6TlNNYXRjaGluZ1dpdGhvdXRBbmNob3JpbmdCb3VuZHMgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgdXJpLmxlbmd0aCldID4gMCkgeyAvLyBtYXRjaCBhdCBzdGFydCBvbmx5CisgICAgcmV0dXJuIFlFUzsKKyAgfQorICByZXR1cm4gW1VSTF9XSVRIT1VUX1BST1RPQ09MX1BBVFRFUk4gbnVtYmVyT2ZNYXRjaGVzSW5TdHJpbmc6dXJpIG9wdGlvbnM6TlNNYXRjaGluZ1dpdGhvdXRBbmNob3JpbmdCb3VuZHMgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgdXJpLmxlbmd0aCldID4gMDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhVUkxUT1Jlc3VsdFBhcnNlci5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhVUkxUT1Jlc3VsdFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzhmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFVSTFRPUmVzdWx0UGFyc2VyLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhSZXN1bHRQYXJzZXIuaCIKKworLyoqCisgKiBQYXJzZXMgdGhlICJVUkxUTyIgcmVzdWx0IGZvcm1hdCwgd2hpY2ggaXMgb2YgdGhlIGZvcm0gIlVSTFRPOlt0aXRsZV06W3VybF0iLgorICogVGhpcyBzZWVtcyB0byBiZSB1c2VkIHNvbWV0aW1lcywgYnV0IEkgYW0gbm90IGFibGUgdG8gZmluZCBkb2N1bWVudGF0aW9uCisgKiBvbiBpdHMgb3JpZ2luIG9yIG9mZmljaWFsIGZvcm1hdD8KKyAqLworCitAaW50ZXJmYWNlIFpYVVJMVE9SZXN1bHRQYXJzZXIgOiBaWFJlc3VsdFBhcnNlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFVSTFRPUmVzdWx0UGFyc2VyLm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFVSTFRPUmVzdWx0UGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1Yjg4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYVVJMVE9SZXN1bHRQYXJzZXIubQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlc3VsdC5oIgorI2ltcG9ydCAiWlhVUklQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYVVJMVE9SZXN1bHRQYXJzZXIuaCIKKworQGltcGxlbWVudGF0aW9uIFpYVVJMVE9SZXN1bHRQYXJzZXIKKworLSAoWlhQYXJzZWRSZXN1bHQgKilwYXJzZTooWlhSZXN1bHQgKilyZXN1bHQgeworICBOU1N0cmluZyAqcmF3VGV4dCA9IFtaWFJlc3VsdFBhcnNlciBtYXNzYWdlZFRleHQ6cmVzdWx0XTsKKyAgaWYgKCFbcmF3VGV4dCBoYXNQcmVmaXg6QCJ1cmx0bzoiXSAmJiAhW3Jhd1RleHQgaGFzUHJlZml4OkAiVVJMVE86Il0pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TVUludGVnZXIgdGl0bGVFbmQgPSBbcmF3VGV4dCByYW5nZU9mU3RyaW5nOkAiOiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoNiwgW3Jhd1RleHQgbGVuZ3RoXSAtIDYpXS5sb2NhdGlvbjsKKyAgaWYgKHRpdGxlRW5kID09IE5TTm90Rm91bmQpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TU3RyaW5nICp0aXRsZSA9IHRpdGxlRW5kIDw9IDYgPyBuaWwgOiBbcmF3VGV4dCBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UoNiwgdGl0bGVFbmQgLSA2KV07CisgIE5TU3RyaW5nICp1cmkgPSBbcmF3VGV4dCBzdWJzdHJpbmdGcm9tSW5kZXg6dGl0bGVFbmQgKyAxXTsKKyAgcmV0dXJuIFtaWFVSSVBhcnNlZFJlc3VsdCB1cmlQYXJzZWRSZXN1bHRXaXRoVXJpOnVyaSB0aXRsZTp0aXRsZV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYVkNhcmRSZXN1bHRQYXJzZXIuaCBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYVkNhcmRSZXN1bHRQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGY2Yjg0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhWQ2FyZFJlc3VsdFBhcnNlci5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUmVzdWx0UGFyc2VyLmgiCisKKy8qKgorICogUGFyc2VzIGNvbnRhY3QgaW5mb3JtYXRpb24gZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgVkNhcmQgKDIuMSkgZm9ybWF0LiBUaGlzIGlzIG5vdCBhIGNvbXBsZXRlCisgKiBpbXBsZW1lbnRhdGlvbiBidXQgc2hvdWxkIHBhcnNlIGluZm9ybWF0aW9uIGFzIGNvbW1vbmx5IGVuY29kZWQgaW4gMkQgYmFyY29kZXMuCisgKi8KKworQGludGVyZmFjZSBaWFZDYXJkUmVzdWx0UGFyc2VyIDogWlhSZXN1bHRQYXJzZXIKKworKyAoTlNBcnJheSAqKW1hdGNoU2luZ2xlVkNhcmRQcmVmaXhlZEZpZWxkOihOU1N0cmluZyAqKXByZWZpeCByYXdUZXh0OihOU1N0cmluZyAqKXJhd1RleHQgdHJpbTooQk9PTCl0cmltIHBhcnNlRmllbGREaXZpZGVyOihCT09MKXBhcnNlRmllbGREaXZpZGVyOworKyAoTlNNdXRhYmxlQXJyYXkgKiltYXRjaFZDYXJkUHJlZml4ZWRGaWVsZDooTlNTdHJpbmcgKilwcmVmaXggcmF3VGV4dDooTlNTdHJpbmcgKilyYXdUZXh0IHRyaW06KEJPT0wpdHJpbSBwYXJzZUZpZWxkRGl2aWRlcjooQk9PTClwYXJzZUZpZWxkRGl2aWRlcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhWQ2FyZFJlc3VsdFBhcnNlci5tIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhWQ2FyZFJlc3VsdFBhcnNlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMzA3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFZDYXJkUmVzdWx0UGFyc2VyLm0KQEAgLTAsMCArMSwzNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisjaW1wb3J0ICJaWFZDYXJkUmVzdWx0UGFyc2VyLmgiCisKK3N0YXRpYyBOU1JlZ3VsYXJFeHByZXNzaW9uICpCRUdJTl9WQ0FSRCA9IG5pbDsKK3N0YXRpYyBOU1JlZ3VsYXJFeHByZXNzaW9uICpWQ0FSRF9MSUtFX0RBVEUgPSBuaWw7CitzdGF0aWMgTlNSZWd1bGFyRXhwcmVzc2lvbiAqQ1JfTEZfU1BBQ0VfVEFCID0gbmlsOworc3RhdGljIE5TUmVndWxhckV4cHJlc3Npb24gKk5FV0xJTkVfRVNDQVBFID0gbmlsOworc3RhdGljIE5TUmVndWxhckV4cHJlc3Npb24gKlZDQVJEX0VTQ0FQRVMgPSBuaWw7CitzdGF0aWMgTlNTdHJpbmcgKkVRVUFMUyA9IEAiPSI7CitzdGF0aWMgTlNTdHJpbmcgKlNFTUlDT0xPTiA9IEAiOyI7CitzdGF0aWMgTlNSZWd1bGFyRXhwcmVzc2lvbiAqVU5FU0NBUEVEX1NFTUlDT0xPTlMgPSBuaWw7CitzdGF0aWMgTlNDaGFyYWN0ZXJTZXQgKkNPTU1BID0gbmlsOworc3RhdGljIE5TQ2hhcmFjdGVyU2V0ICpTRU1JQ09MT05fT1JfQ09NTUEgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBaWFZDYXJkUmVzdWx0UGFyc2VyCisKKysgKHZvaWQpaW5pdGlhbGl6ZSB7CisgIEJFR0lOX1ZDQVJEID0gW1tOU1JlZ3VsYXJFeHByZXNzaW9uIGFsbG9jXSBpbml0V2l0aFBhdHRlcm46QCJCRUdJTjpWQ0FSRCIgb3B0aW9uczpOU1JlZ3VsYXJFeHByZXNzaW9uQ2FzZUluc2Vuc2l0aXZlIGVycm9yOm5pbF07CisgIFZDQVJEX0xJS0VfREFURSA9IFtbTlNSZWd1bGFyRXhwcmVzc2lvbiBhbGxvY10gaW5pdFdpdGhQYXR0ZXJuOkAiXFxkezR9LT9cXGR7Mn0tP1xcZHsyfSIgb3B0aW9uczowIGVycm9yOm5pbF07CisgIENSX0xGX1NQQUNFX1RBQiA9IFtbTlNSZWd1bGFyRXhwcmVzc2lvbiBhbGxvY10gaW5pdFdpdGhQYXR0ZXJuOkAiXHJcblsgXHRdIiBvcHRpb25zOjAgZXJyb3I6bmlsXTsKKyAgTkVXTElORV9FU0NBUEUgPSBbW05TUmVndWxhckV4cHJlc3Npb24gYWxsb2NdIGluaXRXaXRoUGF0dGVybjpAIlxcXFxbbk5dIiBvcHRpb25zOjAgZXJyb3I6bmlsXTsKKyAgVkNBUkRfRVNDQVBFUyA9IFtbTlNSZWd1bGFyRXhwcmVzc2lvbiBhbGxvY10gaW5pdFdpdGhQYXR0ZXJuOkAiXFxcXChbLDtcXFxcXSkiIG9wdGlvbnM6MCBlcnJvcjpuaWxdOworICBVTkVTQ0FQRURfU0VNSUNPTE9OUyA9IFtbTlNSZWd1bGFyRXhwcmVzc2lvbiBhbGxvY10gaW5pdFdpdGhQYXR0ZXJuOkAiKD88IVxcXFwpOysiIG9wdGlvbnM6MCBlcnJvcjpuaWxdOworICBDT01NQSA9IFtOU0NoYXJhY3RlclNldCBjaGFyYWN0ZXJTZXRXaXRoQ2hhcmFjdGVyc0luU3RyaW5nOkAiLCJdOworICBTRU1JQ09MT05fT1JfQ09NTUEgPSBbTlNDaGFyYWN0ZXJTZXQgY2hhcmFjdGVyU2V0V2l0aENoYXJhY3RlcnNJblN0cmluZzpAIjssIl07Cit9CisKKy0gKFpYUGFyc2VkUmVzdWx0ICopcGFyc2U6KFpYUmVzdWx0ICopcmVzdWx0IHsKKyAgLy8gQWx0aG91Z2ggd2Ugc2hvdWxkIGluc2lzdCBvbiB0aGUgcmF3IHRleHQgZW5kaW5nIHdpdGggIkVORDpWQ0FSRCIsIHRoZXJlJ3Mgbm8gcmVhc29uCisgIC8vIHRvIHRocm93IG91dCBldmVyeXRoaW5nIGVsc2Ugd2UgcGFyc2VkIGp1c3QgYmVjYXVzZSB0aGlzIHdhcyBvbWl0dGVkLiBJbiBmYWN0LCBFY2xhaXIKKyAgLy8gaXMgZG9pbmcganVzdCB0aGF0LCBhbmQgd2UgY2FuJ3QgcGFyc2UgaXRzIGNvbnRhY3RzIHdpdGhvdXQgdGhpcyBsZW5pZW5jeS4KKyAgTlNTdHJpbmcgKnJhd1RleHQgPSBbWlhSZXN1bHRQYXJzZXIgbWFzc2FnZWRUZXh0OnJlc3VsdF07CisgIGlmIChbQkVHSU5fVkNBUkQgbnVtYmVyT2ZNYXRjaGVzSW5TdHJpbmc6cmF3VGV4dCBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgcmF3VGV4dC5sZW5ndGgpXSA9PSAwKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU011dGFibGVBcnJheSAqbmFtZXMgPSBbW3NlbGYgY2xhc3NdIG1hdGNoVkNhcmRQcmVmaXhlZEZpZWxkOkAiRk4iIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFUyBwYXJzZUZpZWxkRGl2aWRlcjpOT107CisgIGlmIChuYW1lcyA9PSBuaWwpIHsKKyAgICAvLyBJZiBubyBkaXNwbGF5IG5hbWVzIGZvdW5kLCBsb29rIGZvciByZWd1bGFyIG5hbWUgZmllbGRzIGFuZCBmb3JtYXQgdGhlbQorICAgIG5hbWVzID0gW1tzZWxmIGNsYXNzXSBtYXRjaFZDYXJkUHJlZml4ZWRGaWVsZDpAIk4iIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFUyBwYXJzZUZpZWxkRGl2aWRlcjpOT107CisgICAgW3NlbGYgZm9ybWF0TmFtZXM6bmFtZXNdOworICB9CisgIE5TQXJyYXkgKm5pY2tuYW1lU3RyaW5nID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZVZDYXJkUHJlZml4ZWRGaWVsZDpAIk5JQ0tOQU1FIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVMgcGFyc2VGaWVsZERpdmlkZXI6Tk9dOworICBOU0FycmF5ICpuaWNrbmFtZXMgPSBuaWNrbmFtZVN0cmluZyA9PSBuaWwgPyBuaWwgOiBbbmlja25hbWVTdHJpbmdbMF0gY29tcG9uZW50c1NlcGFyYXRlZEJ5Q2hhcmFjdGVyc0luU2V0OkNPTU1BXTsKKyAgTlNBcnJheSAqcGhvbmVOdW1iZXJzID0gW1tzZWxmIGNsYXNzXSBtYXRjaFZDYXJkUHJlZml4ZWRGaWVsZDpAIlRFTCIgcmF3VGV4dDpyYXdUZXh0IHRyaW06WUVTIHBhcnNlRmllbGREaXZpZGVyOk5PXTsKKyAgTlNBcnJheSAqZW1haWxzID0gW1tzZWxmIGNsYXNzXSBtYXRjaFZDYXJkUHJlZml4ZWRGaWVsZDpAIkVNQUlMIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVMgcGFyc2VGaWVsZERpdmlkZXI6Tk9dOworICBOU0FycmF5ICpub3RlID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZVZDYXJkUHJlZml4ZWRGaWVsZDpAIk5PVEUiIHJhd1RleHQ6cmF3VGV4dCB0cmltOk5PIHBhcnNlRmllbGREaXZpZGVyOk5PXTsKKyAgTlNNdXRhYmxlQXJyYXkgKmFkZHJlc3NlcyA9IFtbc2VsZiBjbGFzc10gbWF0Y2hWQ2FyZFByZWZpeGVkRmllbGQ6QCJBRFIiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFUyBwYXJzZUZpZWxkRGl2aWRlcjpZRVNdOworICBOU0FycmF5ICpvcmcgPSBbW3NlbGYgY2xhc3NdIG1hdGNoU2luZ2xlVkNhcmRQcmVmaXhlZEZpZWxkOkAiT1JHIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVMgcGFyc2VGaWVsZERpdmlkZXI6WUVTXTsKKyAgTlNBcnJheSAqYmlydGhkYXkgPSBbW3NlbGYgY2xhc3NdIG1hdGNoU2luZ2xlVkNhcmRQcmVmaXhlZEZpZWxkOkAiQkRBWSIgcmF3VGV4dDpyYXdUZXh0IHRyaW06WUVTIHBhcnNlRmllbGREaXZpZGVyOk5PXTsKKyAgaWYgKGJpcnRoZGF5ICE9IG5pbCAmJiAhW3NlbGYgaXNMaWtlVkNhcmREYXRlOmJpcnRoZGF5WzBdXSkgeworICAgIGJpcnRoZGF5ID0gbmlsOworICB9CisgIE5TQXJyYXkgKnRpdGxlID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZVZDYXJkUHJlZml4ZWRGaWVsZDpAIlRJVExFIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVMgcGFyc2VGaWVsZERpdmlkZXI6Tk9dOworICBOU0FycmF5ICp1cmxzID0gW1tzZWxmIGNsYXNzXSBtYXRjaFZDYXJkUHJlZml4ZWRGaWVsZDpAIlVSTCIgcmF3VGV4dDpyYXdUZXh0IHRyaW06WUVTIHBhcnNlRmllbGREaXZpZGVyOk5PXTsKKyAgTlNBcnJheSAqaW5zdGFudE1lc3NlbmdlciA9IFtbc2VsZiBjbGFzc10gbWF0Y2hTaW5nbGVWQ2FyZFByZWZpeGVkRmllbGQ6QCJJTVBQIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVMgcGFyc2VGaWVsZERpdmlkZXI6Tk9dOworICBOU0FycmF5ICpnZW9TdHJpbmcgPSBbW3NlbGYgY2xhc3NdIG1hdGNoU2luZ2xlVkNhcmRQcmVmaXhlZEZpZWxkOkAiR0VPIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVMgcGFyc2VGaWVsZERpdmlkZXI6Tk9dOworICBOU0FycmF5ICpnZW8gPSBnZW9TdHJpbmcgPT0gbmlsID8gbmlsIDogW2dlb1N0cmluZ1swXSBjb21wb25lbnRzU2VwYXJhdGVkQnlDaGFyYWN0ZXJzSW5TZXQ6U0VNSUNPTE9OX09SX0NPTU1BXTsKKyAgaWYgKGdlbyAhPSBuaWwgJiYgZ2VvLmNvdW50ICE9IDIpIHsKKyAgICBnZW8gPSBuaWw7CisgIH0KKyAgcmV0dXJuIFtaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0IGFkZHJlc3NCb29rUGFyc2VkUmVzdWx0V2l0aE5hbWVzOltzZWxmIHRvUHJpbWFyeVZhbHVlczpuYW1lc10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlja25hbWVzOm5pY2tuYW1lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb251bmNpYXRpb246bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lTnVtYmVyczpbc2VsZiB0b1ByaW1hcnlWYWx1ZXM6cGhvbmVOdW1iZXJzXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lVHlwZXM6W3NlbGYgdG9UeXBlczpwaG9uZU51bWJlcnNdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsczpbc2VsZiB0b1ByaW1hcnlWYWx1ZXM6ZW1haWxzXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsVHlwZXM6W3NlbGYgdG9UeXBlczplbWFpbHNdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFudE1lc3Nlbmdlcjpbc2VsZiB0b1ByaW1hcnlWYWx1ZTppbnN0YW50TWVzc2VuZ2VyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6W3NlbGYgdG9QcmltYXJ5VmFsdWU6bm90ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzOltzZWxmIHRvUHJpbWFyeVZhbHVlczphZGRyZXNzZXNdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NUeXBlczpbc2VsZiB0b1R5cGVzOmFkZHJlc3Nlc10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnOltzZWxmIHRvUHJpbWFyeVZhbHVlOm9yZ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpcnRoZGF5OltzZWxmIHRvUHJpbWFyeVZhbHVlOmJpcnRoZGF5XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6W3NlbGYgdG9QcmltYXJ5VmFsdWU6dGl0bGVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczpbc2VsZiB0b1ByaW1hcnlWYWx1ZXM6dXJsc10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvOmdlb107Cit9CisKKysgKE5TTXV0YWJsZUFycmF5ICopbWF0Y2hWQ2FyZFByZWZpeGVkRmllbGQ6KE5TU3RyaW5nICopcHJlZml4IHJhd1RleHQ6KE5TU3RyaW5nICopcmF3VGV4dCB0cmltOihCT09MKXRyaW0gcGFyc2VGaWVsZERpdmlkZXI6KEJPT0wpcGFyc2VGaWVsZERpdmlkZXIgeworICBOU011dGFibGVBcnJheSAqbWF0Y2hlcyA9IG5pbDsKKyAgTlNVSW50ZWdlciBpID0gMDsKKyAgTlNVSW50ZWdlciBtYXggPSBbcmF3VGV4dCBsZW5ndGhdOworCisgIHdoaWxlIChpIDwgbWF4KSB7CisgICAgLy8gQXQgc3RhcnQgb3IgYWZ0ZXIgbmV3bGluZywgbWF0Y2ggcHJlZml4LCBmb2xsb3dlZCBieSBvcHRpb25hbCBtZXRhZGF0YSAKKyAgICAvLyAobGVkIGJ5IDspIHVsdGltYXRlbHkgZW5kaW5nIGluIGNvbG9uCisgICAgTlNSZWd1bGFyRXhwcmVzc2lvbiAqcmVnZXggPSBbTlNSZWd1bGFyRXhwcmVzc2lvbiByZWd1bGFyRXhwcmVzc2lvbldpdGhQYXR0ZXJuOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiKD86XnxcbiklQCg/OjsoW146XSopKT86IiwgcHJlZml4XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOk5TUmVndWxhckV4cHJlc3Npb25DYXNlSW5zZW5zaXRpdmUgZXJyb3I6bmlsXTsKKyAgICBpZiAoaSA+IDApIHsKKyAgICAgIGktLTsgLy8gRmluZCBmcm9tIGktMSBub3QgaSBzaW5jZSBsb29raW5nIGF0IHRoZSBwcmVjZWRpbmcgY2hhcmFjdGVyCisgICAgfQorICAgIE5TQXJyYXkgKnJlZ2V4TWF0Y2hlcyA9IFtyZWdleCBtYXRjaGVzSW5TdHJpbmc6cmF3VGV4dCBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoaSwgcmF3VGV4dC5sZW5ndGggLSBpKV07CisgICAgaWYgKHJlZ2V4TWF0Y2hlcy5jb3VudCA9PSAwKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgTlNSYW5nZSBtYXRjaFJhbmdlID0gW3JlZ2V4TWF0Y2hlc1swXSByYW5nZV07CisgICAgaSA9IG1hdGNoUmFuZ2UubG9jYXRpb24gKyBtYXRjaFJhbmdlLmxlbmd0aDsKKworICAgIE5TU3RyaW5nICptZXRhZGF0YVN0cmluZyA9IG5pbDsKKyAgICBpZiAoW3JlZ2V4TWF0Y2hlc1swXSByYW5nZUF0SW5kZXg6MV0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgeworICAgICAgbWV0YWRhdGFTdHJpbmcgPSBbcmF3VGV4dCBzdWJzdHJpbmdXaXRoUmFuZ2U6W3JlZ2V4TWF0Y2hlc1swXSByYW5nZUF0SW5kZXg6MV1dOworICAgIH0KKyAgICBOU011dGFibGVBcnJheSAqbWV0YWRhdGEgPSBuaWw7CisgICAgQk9PTCBxdW90ZWRQcmludGFibGUgPSBOTzsKKyAgICBOU1N0cmluZyAqcXVvdGVkUHJpbnRhYmxlQ2hhcnNldCA9IG5pbDsKKyAgICBpZiAobWV0YWRhdGFTdHJpbmcgIT0gbmlsKSB7CisgICAgICBmb3IgKE5TU3RyaW5nICptZXRhZGF0dW0gaW4gW21ldGFkYXRhU3RyaW5nIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpTRU1JQ09MT05dKSB7CisgICAgICAgIGlmIChtZXRhZGF0YSA9PSBuaWwpIHsKKyAgICAgICAgICBtZXRhZGF0YSA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgICAgIH0KKyAgICAgICAgW21ldGFkYXRhIGFkZE9iamVjdDptZXRhZGF0dW1dOworICAgICAgICBOU1VJbnRlZ2VyIGVxdWFscyA9IFttZXRhZGF0dW0gcmFuZ2VPZlN0cmluZzpFUVVBTFNdLmxvY2F0aW9uOworICAgICAgICBpZiAoZXF1YWxzICE9IE5TTm90Rm91bmQpIHsKKyAgICAgICAgICBOU1N0cmluZyAqa2V5ID0gW21ldGFkYXR1bSBzdWJzdHJpbmdUb0luZGV4OmVxdWFsc107CisgICAgICAgICAgTlNTdHJpbmcgKnZhbHVlID0gW21ldGFkYXR1bSBzdWJzdHJpbmdGcm9tSW5kZXg6ZXF1YWxzICsgMV07CisgICAgICAgICAgaWYgKFtAIkVOQ09ESU5HIiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOmtleV0gPT0gTlNPcmRlcmVkU2FtZSAmJgorICAgICAgICAgICAgICBbQCJRVU9URUQtUFJJTlRBQkxFIiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOnZhbHVlXSA9PSBOU09yZGVyZWRTYW1lKSB7CisgICAgICAgICAgICBxdW90ZWRQcmludGFibGUgPSBZRVM7CisgICAgICAgICAgfSBlbHNlIGlmIChbQCJDSEFSU0VUIiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOmtleV0gPT0gTlNPcmRlcmVkU2FtZSkgeworICAgICAgICAgICAgcXVvdGVkUHJpbnRhYmxlQ2hhcnNldCA9IHZhbHVlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIE5TVUludGVnZXIgbWF0Y2hTdGFydCA9IGk7IC8vIEZvdW5kIHRoZSBzdGFydCBvZiBhIG1hdGNoIGhlcmUKKworICAgIHdoaWxlICgoTlNVSW50ZWdlcikoaSA9IFtyYXdUZXh0IHJhbmdlT2ZTdHJpbmc6QCJcbiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoaSwgW3Jhd1RleHQgbGVuZ3RoXSAtIGkpXS5sb2NhdGlvbikgIT0gTlNOb3RGb3VuZCkgeyAvLyBSZWFsbHksIGVuZCBpbiBcclxuCisgICAgICBpZiAoaSA8IFtyYXdUZXh0IGxlbmd0aF0gLSAxICYmICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiBmb2xsb3dlZCBieSB0YWIgb3Igc3BhY2UsCisgICAgICAgICAgKFtyYXdUZXh0IGNoYXJhY3RlckF0SW5kZXg6aSArIDFdID09ICcgJyB8fCAgIC8vIHRoaXMgaXMgb25seSBhIGNvbnRpbnVhdGlvbgorICAgICAgICAgICBbcmF3VGV4dCBjaGFyYWN0ZXJBdEluZGV4OmkgKyAxXSA9PSAnXHQnKSkgeworICAgICAgICBpICs9IDI7IC8vIFNraXAgXG4gYW5kIGNvbnRpbnV0YXRpb24gd2hpdGVzcGFjZQorICAgICAgfSBlbHNlIGlmIChxdW90ZWRQcmludGFibGUgJiYgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHByZWNlZGVkIGJ5ID0gaW4gcXVvdGVkIHByaW50YWJsZQorICAgICAgICAgICAgICAgICAoKGkgPj0gMSAmJiBbcmF3VGV4dCBjaGFyYWN0ZXJBdEluZGV4OmkgLSAxXSA9PSAnPScpIHx8IC8vIHRoaXMgaXMgYSBjb250aW51YXRpb24KKyAgICAgICAgICAgICAgICAgIChpID49IDIgJiYgW3Jhd1RleHQgY2hhcmFjdGVyQXRJbmRleDppIC0gMl0gPT0gJz0nKSkpIHsKKyAgICAgICAgaSsrOyAvLyBTa2lwIFxuCisgICAgICB9IGVsc2UgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaSA9PSBOU05vdEZvdW5kKSB7CisgICAgICAvLyBObyB0ZXJtaW5hdGluZyBlbmQgY2hhcmFjdGVyPyB1aCwgZG9uZS4gU2V0IGkgc3VjaCB0aGF0IGxvb3AgdGVybWluYXRlcyBhbmQgYnJlYWsKKyAgICAgIGkgPSBtYXg7CisgICAgfSBlbHNlIGlmIChpID4gbWF0Y2hTdGFydCkgeworICAgICAgLy8gZm91bmQgYSBtYXRjaAorICAgICAgaWYgKG1hdGNoZXMgPT0gbmlsKSB7CisgICAgICAgIG1hdGNoZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6MV07CisgICAgICB9CisgICAgICBpZiAoaSA+PSAxICYmIFtyYXdUZXh0IGNoYXJhY3RlckF0SW5kZXg6aS0xXSA9PSAnXHInKSB7CisgICAgICAgIGktLTsgLy8gQmFjayB1cCBvdmVyIFxyLCB3aGljaCByZWFsbHkgc2hvdWxkIGJlIHRoZXJlCisgICAgICB9CisgICAgICBOU1N0cmluZyAqZWxlbWVudCA9IFtyYXdUZXh0IHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZShtYXRjaFN0YXJ0LCBpIC0gbWF0Y2hTdGFydCldOworICAgICAgaWYgKHRyaW0pIHsKKyAgICAgICAgZWxlbWVudCA9IFtlbGVtZW50IHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV07CisgICAgICB9CisgICAgICBpZiAocXVvdGVkUHJpbnRhYmxlKSB7CisgICAgICAgIGVsZW1lbnQgPSBbc2VsZiBkZWNvZGVRdW90ZWRQcmludGFibGU6ZWxlbWVudCBjaGFyc2V0OnF1b3RlZFByaW50YWJsZUNoYXJzZXRdOworICAgICAgICBpZiAocGFyc2VGaWVsZERpdmlkZXIpIHsKKyAgICAgICAgICBlbGVtZW50ID0gW1tVTkVTQ0FQRURfU0VNSUNPTE9OUyBzdHJpbmdCeVJlcGxhY2luZ01hdGNoZXNJblN0cmluZzplbGVtZW50IG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZSgwLCBlbGVtZW50Lmxlbmd0aCkgd2l0aFRlbXBsYXRlOkAiXG4iXQorICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHBhcnNlRmllbGREaXZpZGVyKSB7CisgICAgICAgICAgZWxlbWVudCA9IFtbVU5FU0NBUEVEX1NFTUlDT0xPTlMgc3RyaW5nQnlSZXBsYWNpbmdNYXRjaGVzSW5TdHJpbmc6ZWxlbWVudCBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgZWxlbWVudC5sZW5ndGgpIHdpdGhUZW1wbGF0ZTpAIlxuIl0KKyAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV07CisgICAgICAgIH0KKyAgICAgICAgZWxlbWVudCA9IFtDUl9MRl9TUEFDRV9UQUIgc3RyaW5nQnlSZXBsYWNpbmdNYXRjaGVzSW5TdHJpbmc6ZWxlbWVudCBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgZWxlbWVudC5sZW5ndGgpIHdpdGhUZW1wbGF0ZTpAIiJdOworICAgICAgICBlbGVtZW50ID0gW05FV0xJTkVfRVNDQVBFIHN0cmluZ0J5UmVwbGFjaW5nTWF0Y2hlc0luU3RyaW5nOmVsZW1lbnQgb3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKDAsIGVsZW1lbnQubGVuZ3RoKSB3aXRoVGVtcGxhdGU6QCJcbiJdOworICAgICAgICBlbGVtZW50ID0gW1ZDQVJEX0VTQ0FQRVMgc3RyaW5nQnlSZXBsYWNpbmdNYXRjaGVzSW5TdHJpbmc6ZWxlbWVudCBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgZWxlbWVudC5sZW5ndGgpIHdpdGhUZW1wbGF0ZTpAIiQxIl07CisgICAgICB9CisgICAgICBpZiAobWV0YWRhdGEgPT0gbmlsKSB7CisgICAgICAgIE5TTXV0YWJsZUFycmF5ICptYXRjaCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhPYmplY3Q6ZWxlbWVudF07CisgICAgICAgIFttYXRjaCBhZGRPYmplY3Q6ZWxlbWVudF07CisgICAgICAgIFttYXRjaGVzIGFkZE9iamVjdDptYXRjaF07CisgICAgICB9IGVsc2UgeworICAgICAgICBbbWV0YWRhdGEgaW5zZXJ0T2JqZWN0OmVsZW1lbnQgYXRJbmRleDowXTsKKyAgICAgICAgW21hdGNoZXMgYWRkT2JqZWN0Om1ldGFkYXRhXTsKKyAgICAgIH0KKyAgICAgIGkrKzsKKyAgICB9IGVsc2UgeworICAgICAgaSsrOworICAgIH0KKyAgfQorCisgIHJldHVybiBtYXRjaGVzOworfQorCisrIChOU1N0cmluZyAqKWRlY29kZVF1b3RlZFByaW50YWJsZTooTlNTdHJpbmcgKil2YWx1ZSBjaGFyc2V0OihOU1N0cmluZyAqKWNoYXJzZXQgeworICBOU1VJbnRlZ2VyIGxlbmd0aCA9IFt2YWx1ZSBsZW5ndGhdOworICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5Omxlbmd0aF07CisgIE5TTXV0YWJsZURhdGEgKmZyYWdtZW50QnVmZmVyID0gW05TTXV0YWJsZURhdGEgZGF0YV07CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIHVuaWNoYXIgYyA9IFt2YWx1ZSBjaGFyYWN0ZXJBdEluZGV4OmldOworCisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnXHInOgorICAgIGNhc2UgJ1xuJzoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJz0nOgorICAgICAgaWYgKGkgPCBsZW5ndGggLSAyKSB7CisgICAgICAgIHVuaWNoYXIgbmV4dENoYXIgPSBbdmFsdWUgY2hhcmFjdGVyQXRJbmRleDppICsgMV07CisgICAgICAgIGlmIChuZXh0Q2hhciAhPSAnXHInICYmIG5leHRDaGFyICE9ICdcbicpIHsKKyAgICAgICAgICB1bmljaGFyIG5leHROZXh0Q2hhciA9IFt2YWx1ZSBjaGFyYWN0ZXJBdEluZGV4OmkgKyAyXTsKKyAgICAgICAgICBpbnQgZmlyc3REaWdpdCA9IFtzZWxmIHBhcnNlSGV4RGlnaXQ6bmV4dENoYXJdOworICAgICAgICAgIGludCBzZWNvbmREaWdpdCA9IFtzZWxmIHBhcnNlSGV4RGlnaXQ6bmV4dE5leHRDaGFyXTsKKyAgICAgICAgICBpZiAoZmlyc3REaWdpdCA+PSAwICYmIHNlY29uZERpZ2l0ID49IDApIHsKKyAgICAgICAgICAgIGludCBlbmNvZGVkQnl0ZSA9IChmaXJzdERpZ2l0IDw8IDQpICsgc2Vjb25kRGlnaXQ7CisgICAgICAgICAgICBbZnJhZ21lbnRCdWZmZXIgYXBwZW5kQnl0ZXM6JmVuY29kZWRCeXRlIGxlbmd0aDoxXTsKKyAgICAgICAgICB9IC8vIGVsc2UgaWdub3JlIGl0LCBhc3N1bWUgaXQgd2FzIGluY29ycmVjdGx5IGVuY29kZWQKKyAgICAgICAgICBpICs9IDI7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBbc2VsZiBtYXliZUFwcGVuZEZyYWdtZW50OmZyYWdtZW50QnVmZmVyIGNoYXJzZXQ6Y2hhcnNldCByZXN1bHQ6cmVzdWx0XTsKKyAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCBjXTsKKyAgICB9CisgIH0KKworICBbc2VsZiBtYXliZUFwcGVuZEZyYWdtZW50OmZyYWdtZW50QnVmZmVyIGNoYXJzZXQ6Y2hhcnNldCByZXN1bHQ6cmVzdWx0XTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworKyAodm9pZCltYXliZUFwcGVuZEZyYWdtZW50OihOU011dGFibGVEYXRhICopZnJhZ21lbnRCdWZmZXIgY2hhcnNldDooTlNTdHJpbmcgKiljaGFyc2V0IHJlc3VsdDooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0IHsKKyAgaWYgKFtmcmFnbWVudEJ1ZmZlciBsZW5ndGhdID4gMCkgeworICAgIE5TU3RyaW5nICpmcmFnbWVudDsKKyAgICBpZiAoY2hhcnNldCA9PSBuaWwgfHwgQ0ZTdHJpbmdDb252ZXJ0SUFOQUNoYXJTZXROYW1lVG9FbmNvZGluZygoQ0ZTdHJpbmdSZWYpY2hhcnNldCkgPT0ga0NGU3RyaW5nRW5jb2RpbmdJbnZhbGlkSWQpIHsKKyAgICAgIGZyYWdtZW50ID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmZyYWdtZW50QnVmZmVyIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICB9IGVsc2UgeworICAgICAgZnJhZ21lbnQgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6ZnJhZ21lbnRCdWZmZXIgZW5jb2Rpbmc6Q0ZTdHJpbmdDb252ZXJ0RW5jb2RpbmdUb05TU3RyaW5nRW5jb2RpbmcoQ0ZTdHJpbmdDb252ZXJ0SUFOQUNoYXJTZXROYW1lVG9FbmNvZGluZygoQ0ZTdHJpbmdSZWYpY2hhcnNldCkpXTsKKyAgICB9CisgICAgW2ZyYWdtZW50QnVmZmVyIHNldExlbmd0aDowXTsKKyAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpmcmFnbWVudF07CisgIH0KK30KKworKyAoTlNBcnJheSAqKW1hdGNoU2luZ2xlVkNhcmRQcmVmaXhlZEZpZWxkOihOU1N0cmluZyAqKXByZWZpeCByYXdUZXh0OihOU1N0cmluZyAqKXJhd1RleHQgdHJpbTooQk9PTCl0cmltIHBhcnNlRmllbGREaXZpZGVyOihCT09MKXBhcnNlRmllbGREaXZpZGVyIHsKKyAgTlNBcnJheSAqdmFsdWVzID0gW3NlbGYgbWF0Y2hWQ2FyZFByZWZpeGVkRmllbGQ6cHJlZml4IHJhd1RleHQ6cmF3VGV4dCB0cmltOnRyaW0gcGFyc2VGaWVsZERpdmlkZXI6cGFyc2VGaWVsZERpdmlkZXJdOworICByZXR1cm4gdmFsdWVzID09IG5pbCA/IG5pbCA6IHZhbHVlc1swXTsKK30KKworLSAoTlNTdHJpbmcgKil0b1ByaW1hcnlWYWx1ZTooTlNBcnJheSAqKWxpc3QgeworICByZXR1cm4gbGlzdCA9PSBuaWwgfHwgbGlzdC5jb3VudCA9PSAwID8gbmlsIDogbGlzdFswXTsKK30KKworLSAoTlNBcnJheSAqKXRvUHJpbWFyeVZhbHVlczooTlNBcnJheSAqKWxpc3RzIHsKKyAgaWYgKGxpc3RzID09IG5pbCB8fCBsaXN0cy5jb3VudCA9PSAwKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Omxpc3RzLmNvdW50XTsKKyAgZm9yIChOU0FycmF5ICpsaXN0IGluIGxpc3RzKSB7CisgICAgTlNTdHJpbmcgKnZhbHVlID0gbGlzdFswXTsKKyAgICBpZiAodmFsdWUgIT0gbmlsICYmIHZhbHVlLmxlbmd0aCA+IDApIHsKKyAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OnZhbHVlXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNBcnJheSAqKXRvVHlwZXM6KE5TQXJyYXkgKilsaXN0cyB7CisgIGlmIChsaXN0cyA9PSBuaWwgfHwgbGlzdHMuY291bnQgPT0gMCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpsaXN0cy5jb3VudF07CisgIGZvciAoTlNBcnJheSAqbGlzdCBpbiBsaXN0cykgeworICAgIE5TU3RyaW5nICp0eXBlID0gbmlsOworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGlzdC5jb3VudDsgaSsrKSB7CisgICAgICBOU1N0cmluZyAqbWV0YWRhdHVtID0gbGlzdFtpXTsKKyAgICAgIE5TVUludGVnZXIgZXF1YWxzID0gW21ldGFkYXR1bSByYW5nZU9mU3RyaW5nOkAiPSIgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0ubG9jYXRpb247CisgICAgICBpZiAoZXF1YWxzID09IE5TTm90Rm91bmQpIHsKKyAgICAgICAgLy8gdGFrZSB0aGUgd2hvbGUgdGhpbmcgYXMgYSB1c2FibGUgbGFiZWwKKyAgICAgICAgdHlwZSA9IG1ldGFkYXR1bTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoW0AiVFlQRSIgaXNFcXVhbFRvU3RyaW5nOltbbWV0YWRhdHVtIHN1YnN0cmluZ1RvSW5kZXg6ZXF1YWxzXSB1cHBlcmNhc2VTdHJpbmddXSkgeworICAgICAgICB0eXBlID0gW21ldGFkYXR1bSBzdWJzdHJpbmdGcm9tSW5kZXg6ZXF1YWxzICsgMV07CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmICh0eXBlKSB7CisgICAgICBbcmVzdWx0IGFkZE9iamVjdDp0eXBlXTsKKyAgICB9IGVsc2UgeworICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TTnVsbCBudWxsXV07CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKEJPT0wpaXNMaWtlVkNhcmREYXRlOihOU1N0cmluZyAqKXZhbHVlIHsKKyAgcmV0dXJuIHZhbHVlID09IG5pbCB8fCBbVkNBUkRfTElLRV9EQVRFIG51bWJlck9mTWF0Y2hlc0luU3RyaW5nOnZhbHVlIG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZSgwLCB2YWx1ZS5sZW5ndGgpXSA+IDA7Cit9CisKKy8qKgorICogRm9ybWF0cyBuYW1lIGZpZWxkcyBvZiB0aGUgZm9ybSAiUHVibGljO0pvaG47US47UmV2ZXJlbmQ7SUlJIiBpbnRvIGEgZm9ybSBsaWtlCisgKiAiUmV2ZXJlbmQgSm9obiBRLiBQdWJsaWMgSUlJIi4KKyAqLworLSAodm9pZClmb3JtYXROYW1lczooTlNNdXRhYmxlQXJyYXkgKiluYW1lcyB7CisgIGlmIChuYW1lcyAhPSBuaWwpIHsKKyAgICBmb3IgKE5TTXV0YWJsZUFycmF5ICpsaXN0IGluIG5hbWVzKSB7CisgICAgICBOU1N0cmluZyAqbmFtZSA9IGxpc3RbMF07CisgICAgICBOU011dGFibGVBcnJheSAqY29tcG9uZW50cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTo1XTsKKyAgICAgIE5TVUludGVnZXIgc3RhcnQgPSAwOworICAgICAgTlNVSW50ZWdlciBlbmQ7CisgICAgICB3aGlsZSAoKGVuZCA9IFtuYW1lIHJhbmdlT2ZTdHJpbmc6QCI7IiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpOU01ha2VSYW5nZShzdGFydCwgW25hbWUgbGVuZ3RoXSAtIHN0YXJ0KV0ubG9jYXRpb24pICE9IE5TTm90Rm91bmQgJiYgZW5kID4gMCkgeworICAgICAgICBbY29tcG9uZW50cyBhZGRPYmplY3Q6W25hbWUgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKHN0YXJ0LCBbbmFtZSBsZW5ndGhdIC0gZW5kIC0gMSldXTsKKyAgICAgICAgc3RhcnQgPSBlbmQgKyAxOworICAgICAgfQorCisgICAgICBbY29tcG9uZW50cyBhZGRPYmplY3Q6W25hbWUgc3Vic3RyaW5nRnJvbUluZGV4OnN0YXJ0XV07CisgICAgICBOU011dGFibGVTdHJpbmcgKm5ld05hbWUgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhDYXBhY2l0eToxMDBdOworICAgICAgW3NlbGYgbWF5YmVBcHBlbmRDb21wb25lbnQ6Y29tcG9uZW50cyBpOjMgbmV3TmFtZTpuZXdOYW1lXTsKKyAgICAgIFtzZWxmIG1heWJlQXBwZW5kQ29tcG9uZW50OmNvbXBvbmVudHMgaToxIG5ld05hbWU6bmV3TmFtZV07CisgICAgICBbc2VsZiBtYXliZUFwcGVuZENvbXBvbmVudDpjb21wb25lbnRzIGk6MiBuZXdOYW1lOm5ld05hbWVdOworICAgICAgW3NlbGYgbWF5YmVBcHBlbmRDb21wb25lbnQ6Y29tcG9uZW50cyBpOjAgbmV3TmFtZTpuZXdOYW1lXTsKKyAgICAgIFtzZWxmIG1heWJlQXBwZW5kQ29tcG9uZW50OmNvbXBvbmVudHMgaTo0IG5ld05hbWU6bmV3TmFtZV07CisgICAgICBsaXN0WzBdID0gW25ld05hbWUgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsKKyAgICB9CisgIH0KK30KKworLSAodm9pZCltYXliZUFwcGVuZENvbXBvbmVudDooTlNBcnJheSAqKWNvbXBvbmVudHMgaTooaW50KWkgbmV3TmFtZTooTlNNdXRhYmxlU3RyaW5nICopbmV3TmFtZSB7CisgIGlmIChbY29tcG9uZW50cyBjb3VudF0gPiBpICYmIGNvbXBvbmVudHNbaV0pIHsKKyAgICBbbmV3TmFtZSBhcHBlbmRGb3JtYXQ6QCIgJUAiLCBjb21wb25lbnRzW2ldXTsKKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFZFdmVudFJlc3VsdFBhcnNlci5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhWRXZlbnRSZXN1bHRQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzlmNzJmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhWRXZlbnRSZXN1bHRQYXJzZXIuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlc3VsdFBhcnNlci5oIgorCisvKioKKyAqIFBhcnRpYWxseSBpbXBsZW1lbnRzIHRoZSBpQ2FsZW5kYXIgZm9ybWF0J3MgIlZFVkVOVCIgZm9ybWF0IGZvciBzcGVjaWZ5aW5nIGEKKyAqIGNhbGVuZGFyIGV2ZW50LiBTZWUgUkZDIDI0NDUuIFRoaXMgc3VwcG9ydHMgU1VNTUFSWSwgTE9DQVRJT04sIEdFTywgRFRTVEFSVCBhbmQgRFRFTkQgZmllbGRzLgorICovCisKK0BpbnRlcmZhY2UgWlhWRXZlbnRSZXN1bHRQYXJzZXIgOiBaWFJlc3VsdFBhcnNlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFZFdmVudFJlc3VsdFBhcnNlci5tIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhWRXZlbnRSZXN1bHRQYXJzZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmVhYzhkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhWRXZlbnRSZXN1bHRQYXJzZXIubQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhDYWxlbmRhclBhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKyNpbXBvcnQgIlpYVkNhcmRSZXN1bHRQYXJzZXIuaCIKKyNpbXBvcnQgIlpYVkV2ZW50UmVzdWx0UGFyc2VyLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFZFdmVudFJlc3VsdFBhcnNlcgorCistIChaWFBhcnNlZFJlc3VsdCAqKXBhcnNlOihaWFJlc3VsdCAqKXJlc3VsdCB7CisgIE5TU3RyaW5nICpyYXdUZXh0ID0gW1pYUmVzdWx0UGFyc2VyIG1hc3NhZ2VkVGV4dDpyZXN1bHRdOworICBpZiAocmF3VGV4dCA9PSBuaWwpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TVUludGVnZXIgdkV2ZW50U3RhcnQgPSBbcmF3VGV4dCByYW5nZU9mU3RyaW5nOkAiQkVHSU46VkVWRU5UIl0ubG9jYXRpb247CisgIGlmICh2RXZlbnRTdGFydCA9PSBOU05vdEZvdW5kKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIE5TU3RyaW5nICpzdW1tYXJ5ID0gW3NlbGYgbWF0Y2hTaW5nbGVWQ2FyZFByZWZpeGVkRmllbGQ6QCJTVU1NQVJZIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworICBOU1N0cmluZyAqc3RhcnQgPSBbc2VsZiBtYXRjaFNpbmdsZVZDYXJkUHJlZml4ZWRGaWVsZDpAIkRUU1RBUlQiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisgIGlmIChzdGFydCA9PSBuaWwpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TU3RyaW5nICplbmQgPSBbc2VsZiBtYXRjaFNpbmdsZVZDYXJkUHJlZml4ZWRGaWVsZDpAIkRURU5EIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworICBOU1N0cmluZyAqZHVyYXRpb24gPSBbc2VsZiBtYXRjaFNpbmdsZVZDYXJkUHJlZml4ZWRGaWVsZDpAIkRVUkFUSU9OIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworICBOU1N0cmluZyAqbG9jYXRpb24gPSBbc2VsZiBtYXRjaFNpbmdsZVZDYXJkUHJlZml4ZWRGaWVsZDpAIkxPQ0FUSU9OIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworICBOU1N0cmluZyAqb3JnYW5pemVyID0gW3NlbGYgc3RyaXBNYWlsdG86W3NlbGYgbWF0Y2hTaW5nbGVWQ2FyZFByZWZpeGVkRmllbGQ6QCJPUkdBTklaRVIiIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU11dOworCisgIE5TTXV0YWJsZUFycmF5ICphdHRlbmRlZXMgPSBbc2VsZiBtYXRjaFZDYXJkUHJlZml4ZWRGaWVsZDpAIkFUVEVOREVFIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworICBpZiAoYXR0ZW5kZWVzICE9IG5pbCkgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ZW5kZWVzLmNvdW50OyBpKyspIHsKKyAgICAgIGF0dGVuZGVlc1tpXSA9IFtzZWxmIHN0cmlwTWFpbHRvOmF0dGVuZGVlc1tpXV07CisgICAgfQorICB9CisgIE5TU3RyaW5nICpkZXNjcmlwdGlvbiA9IFtzZWxmIG1hdGNoU2luZ2xlVkNhcmRQcmVmaXhlZEZpZWxkOkAiREVTQ1JJUFRJT04iIHJhd1RleHQ6cmF3VGV4dCB0cmltOllFU107CisKKyAgTlNTdHJpbmcgKmdlb1N0cmluZyA9IFtzZWxmIG1hdGNoU2luZ2xlVkNhcmRQcmVmaXhlZEZpZWxkOkAiR0VPIiByYXdUZXh0OnJhd1RleHQgdHJpbTpZRVNdOworICBkb3VibGUgbGF0aXR1ZGU7CisgIGRvdWJsZSBsb25naXR1ZGU7CisgIGlmIChnZW9TdHJpbmcgPT0gbmlsKSB7CisgICAgbGF0aXR1ZGUgPSBOQU47CisgICAgbG9uZ2l0dWRlID0gTkFOOworICB9IGVsc2UgeworICAgIE5TVUludGVnZXIgc2VtaWNvbG9uID0gW2dlb1N0cmluZyByYW5nZU9mU3RyaW5nOkAiOyJdLmxvY2F0aW9uOworICAgIGxhdGl0dWRlID0gW1tnZW9TdHJpbmcgc3Vic3RyaW5nVG9JbmRleDpzZW1pY29sb25dIGRvdWJsZVZhbHVlXTsKKyAgICBsb25naXR1ZGUgPSBbW2dlb1N0cmluZyBzdWJzdHJpbmdGcm9tSW5kZXg6c2VtaWNvbG9uICsgMV0gZG91YmxlVmFsdWVdOworICB9CisKKyAgQHRyeSB7CisgICAgcmV0dXJuIFtaWENhbGVuZGFyUGFyc2VkUmVzdWx0IGNhbGVuZGFyUGFyc2VkUmVzdWx0V2l0aFN1bW1hcnk6c3VtbWFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOnN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRTdHJpbmc6ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25TdHJpbmc6ZHVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpsb2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pemVyOm9yZ2FuaXplcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZW5kZWVzOmF0dGVuZGVlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOmRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6bGF0aXR1ZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTpsb25naXR1ZGVdOworICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmlhZSkgeworICAgIHJldHVybiBuaWw7CisgIH0KK30KKworLSAoTlNTdHJpbmcgKiltYXRjaFNpbmdsZVZDYXJkUHJlZml4ZWRGaWVsZDooTlNTdHJpbmcgKilwcmVmaXggcmF3VGV4dDooTlNTdHJpbmcgKilyYXdUZXh0IHRyaW06KEJPT0wpdHJpbSB7CisgIE5TQXJyYXkgKnZhbHVlcyA9IFtaWFZDYXJkUmVzdWx0UGFyc2VyIG1hdGNoU2luZ2xlVkNhcmRQcmVmaXhlZEZpZWxkOnByZWZpeCByYXdUZXh0OnJhd1RleHQgdHJpbTp0cmltIHBhcnNlRmllbGREaXZpZGVyOk5PXTsKKyAgcmV0dXJuIHZhbHVlcyA9PSBuaWwgfHwgdmFsdWVzLmNvdW50ID09IDAgPyBuaWwgOiB2YWx1ZXNbMF07Cit9CisKKy0gKE5TTXV0YWJsZUFycmF5ICopbWF0Y2hWQ2FyZFByZWZpeGVkRmllbGQ6KE5TU3RyaW5nICopcHJlZml4IHJhd1RleHQ6KE5TU3RyaW5nICopcmF3VGV4dCB0cmltOihCT09MKXRyaW0geworICBOU011dGFibGVBcnJheSAqdmFsdWVzID0gW1pYVkNhcmRSZXN1bHRQYXJzZXIgbWF0Y2hWQ2FyZFByZWZpeGVkRmllbGQ6cHJlZml4IHJhd1RleHQ6cmF3VGV4dCB0cmltOnRyaW0gcGFyc2VGaWVsZERpdmlkZXI6Tk9dOworICBpZiAodmFsdWVzID09IG5pbCB8fCB2YWx1ZXMuY291bnQgPT0gMCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNVSW50ZWdlciBzaXplID0gdmFsdWVzLmNvdW50OworICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnNpemVdOworICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIFtyZXN1bHQgYWRkT2JqZWN0OnZhbHVlc1tpXVswXV07CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpcE1haWx0bzooTlNTdHJpbmcgKilzIHsKKyAgaWYgKHMgIT0gbmlsICYmIChbcyBoYXNQcmVmaXg6QCJtYWlsdG86Il0gfHwgW3MgaGFzUHJlZml4OkAiTUFJTFRPOiJdKSkgeworICAgIHMgPSBbcyBzdWJzdHJpbmdGcm9tSW5kZXg6N107CisgIH0KKyAgcmV0dXJuIHM7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYV2lmaVBhcnNlZFJlc3VsdC5oIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhXaWZpUGFyc2VkUmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4YTFkZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYV2lmaVBhcnNlZFJlc3VsdC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUGFyc2VkUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhXaWZpUGFyc2VkUmVzdWx0IDogWlhQYXJzZWRSZXN1bHQKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqc3NpZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKm5ldHdvcmtFbmNyeXB0aW9uOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqcGFzc3dvcmQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgQk9PTCBoaWRkZW47CisKKy0gKGlkKWluaXRXaXRoTmV0d29ya0VuY3J5cHRpb246KE5TU3RyaW5nICopbmV0d29ya0VuY3J5cHRpb24gc3NpZDooTlNTdHJpbmcgKilzc2lkIHBhc3N3b3JkOihOU1N0cmluZyAqKXBhc3N3b3JkOworLSAoaWQpaW5pdFdpdGhOZXR3b3JrRW5jcnlwdGlvbjooTlNTdHJpbmcgKiluZXR3b3JrRW5jcnlwdGlvbiBzc2lkOihOU1N0cmluZyAqKXNzaWQgcGFzc3dvcmQ6KE5TU3RyaW5nICopcGFzc3dvcmQgaGlkZGVuOihCT09MKWhpZGRlbjsKKysgKGlkKXdpZmlQYXJzZWRSZXN1bHRXaXRoTmV0d29ya0VuY3J5cHRpb246KE5TU3RyaW5nICopbmV0d29ya0VuY3J5cHRpb24gc3NpZDooTlNTdHJpbmcgKilzc2lkIHBhc3N3b3JkOihOU1N0cmluZyAqKXBhc3N3b3JkOworKyAoaWQpd2lmaVBhcnNlZFJlc3VsdFdpdGhOZXR3b3JrRW5jcnlwdGlvbjooTlNTdHJpbmcgKiluZXR3b3JrRW5jcnlwdGlvbiBzc2lkOihOU1N0cmluZyAqKXNzaWQgcGFzc3dvcmQ6KE5TU3RyaW5nICopcGFzc3dvcmQgaGlkZGVuOihCT09MKWhpZGRlbjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhXaWZpUGFyc2VkUmVzdWx0Lm0gYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFdpZmlQYXJzZWRSZXN1bHQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzZlNjU1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NsaWVudC9yZXN1bHQvWlhXaWZpUGFyc2VkUmVzdWx0Lm0KQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQYXJzZWRSZXN1bHRUeXBlLmgiCisjaW1wb3J0ICJaWFdpZmlQYXJzZWRSZXN1bHQuaCIKKworQGltcGxlbWVudGF0aW9uIFpYV2lmaVBhcnNlZFJlc3VsdAorCistIChpZClpbml0V2l0aE5ldHdvcmtFbmNyeXB0aW9uOihOU1N0cmluZyAqKW5ldHdvcmtFbmNyeXB0aW9uIHNzaWQ6KE5TU3RyaW5nICopc3NpZCBwYXNzd29yZDooTlNTdHJpbmcgKilwYXNzd29yZCB7CisgIHJldHVybiBbc2VsZiBpbml0V2l0aE5ldHdvcmtFbmNyeXB0aW9uOm5ldHdvcmtFbmNyeXB0aW9uIHNzaWQ6c3NpZCBwYXNzd29yZDpwYXNzd29yZF07Cit9CisKKy0gKGlkKWluaXRXaXRoTmV0d29ya0VuY3J5cHRpb246KE5TU3RyaW5nICopbmV0d29ya0VuY3J5cHRpb24gc3NpZDooTlNTdHJpbmcgKilzc2lkIHBhc3N3b3JkOihOU1N0cmluZyAqKXBhc3N3b3JkIGhpZGRlbjooQk9PTCloaWRkZW4geworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0V2l0aFR5cGU6a1BhcnNlZFJlc3VsdFR5cGVXaWZpXSkgeworICAgIF9zc2lkID0gc3NpZDsKKyAgICBfbmV0d29ya0VuY3J5cHRpb24gPSBuZXR3b3JrRW5jcnlwdGlvbjsKKyAgICBfcGFzc3dvcmQgPSBwYXNzd29yZDsKKyAgICBfaGlkZGVuID0gaGlkZGVuOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKGlkKXdpZmlQYXJzZWRSZXN1bHRXaXRoTmV0d29ya0VuY3J5cHRpb246KE5TU3RyaW5nICopbmV0d29ya0VuY3J5cHRpb24gc3NpZDooTlNTdHJpbmcgKilzc2lkIHBhc3N3b3JkOihOU1N0cmluZyAqKXBhc3N3b3JkIHsKKyAgcmV0dXJuIFtbc2VsZiBhbGxvY10gaW5pdFdpdGhOZXR3b3JrRW5jcnlwdGlvbjpuZXR3b3JrRW5jcnlwdGlvbiBzc2lkOnNzaWQgcGFzc3dvcmQ6cGFzc3dvcmRdOworfQorCisrIChpZCl3aWZpUGFyc2VkUmVzdWx0V2l0aE5ldHdvcmtFbmNyeXB0aW9uOihOU1N0cmluZyAqKW5ldHdvcmtFbmNyeXB0aW9uIHNzaWQ6KE5TU3RyaW5nICopc3NpZCBwYXNzd29yZDooTlNTdHJpbmcgKilwYXNzd29yZCBoaWRkZW46KEJPT0wpaGlkZGVuIHsKKyAgcmV0dXJuIFtbc2VsZiBhbGxvY10gaW5pdFdpdGhOZXR3b3JrRW5jcnlwdGlvbjpuZXR3b3JrRW5jcnlwdGlvbiBzc2lkOnNzaWQgcGFzc3dvcmQ6cGFzc3dvcmQgaGlkZGVuOmhpZGRlbl07Cit9CisKKy0gKE5TU3RyaW5nICopZGlzcGxheVJlc3VsdCB7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6ODBdOworICBbWlhQYXJzZWRSZXN1bHQgbWF5YmVBcHBlbmQ6c2VsZi5zc2lkIHJlc3VsdDpyZXN1bHRdOworICBbWlhQYXJzZWRSZXN1bHQgbWF5YmVBcHBlbmQ6c2VsZi5uZXR3b3JrRW5jcnlwdGlvbiByZXN1bHQ6cmVzdWx0XTsKKyAgW1pYUGFyc2VkUmVzdWx0IG1heWJlQXBwZW5kOnNlbGYucGFzc3dvcmQgcmVzdWx0OnJlc3VsdF07CisgIFtaWFBhcnNlZFJlc3VsdCBtYXliZUFwcGVuZDpbQChzZWxmLmhpZGRlbikgc3RyaW5nVmFsdWVdIHJlc3VsdDpyZXN1bHRdOworICByZXR1cm4gcmVzdWx0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFdpZmlSZXN1bHRQYXJzZXIuaCBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYV2lmaVJlc3VsdFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MjkzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFdpZmlSZXN1bHRQYXJzZXIuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlc3VsdFBhcnNlci5oIgorCisvKioKKyAqIFBhcnNlcyBhIFdJRkkgY29uZmlndXJhdGlvbiBzdHJpbmcuICBTdHJpbmdzIHdpbGwgYmUgb2YgdGhlIGZvcm06CisgKiBXSUZJOlQ6W25ldHdvcmsgdHlwZV07UzpbU1NJRF07UDpbbmV0d29yayBwYXNzd29yZF07SDpbaGlkZGVuP107OworICogCisgKiBUaGUgZmllbGRzIGNhbiBhcHBlYXIgaW4gYW55IG9yZGVyLiBPbmx5ICJTOiIgaXMgcmVxdWlyZWQuCisgKi8KKworQGludGVyZmFjZSBaWFdpZmlSZXN1bHRQYXJzZXIgOiBaWFJlc3VsdFBhcnNlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFdpZmlSZXN1bHRQYXJzZXIubSBiL1pYaW5nT2JqQy9jbGllbnQvcmVzdWx0L1pYV2lmaVJlc3VsdFBhcnNlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNzBlZDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY2xpZW50L3Jlc3VsdC9aWFdpZmlSZXN1bHRQYXJzZXIubQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlc3VsdC5oIgorI2ltcG9ydCAiWlhXaWZpUmVzdWx0UGFyc2VyLmgiCisjaW1wb3J0ICJaWFdpZmlQYXJzZWRSZXN1bHQuaCIKKworQGltcGxlbWVudGF0aW9uIFpYV2lmaVJlc3VsdFBhcnNlcgorCistIChaWFBhcnNlZFJlc3VsdCAqKXBhcnNlOihaWFJlc3VsdCAqKXJlc3VsdCB7CisgIE5TU3RyaW5nICpyYXdUZXh0ID0gW1pYUmVzdWx0UGFyc2VyIG1hc3NhZ2VkVGV4dDpyZXN1bHRdOworICBpZiAoIVtyYXdUZXh0IGhhc1ByZWZpeDpAIldJRkk6Il0pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TU3RyaW5nICpzc2lkID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZVByZWZpeGVkRmllbGQ6QCJTOiIgcmF3VGV4dDpyYXdUZXh0IGVuZENoYXI6JzsnIHRyaW06Tk9dOworICBpZiAoc3NpZCA9PSBuaWwgfHwgc3NpZC5sZW5ndGggPT0gMCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNTdHJpbmcgKnBhc3MgPSBbW3NlbGYgY2xhc3NdIG1hdGNoU2luZ2xlUHJlZml4ZWRGaWVsZDpAIlA6IiByYXdUZXh0OnJhd1RleHQgZW5kQ2hhcjonOycgdHJpbTpOT107CisgIE5TU3RyaW5nICp0eXBlID0gW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZVByZWZpeGVkRmllbGQ6QCJUOiIgcmF3VGV4dDpyYXdUZXh0IGVuZENoYXI6JzsnIHRyaW06Tk9dOworICBpZiAodHlwZSA9PSBuaWwpIHsKKyAgICB0eXBlID0gQCJub3Bhc3MiOworICB9CisKKyAgQk9PTCBoaWRkZW4gPSBbW1tzZWxmIGNsYXNzXSBtYXRjaFNpbmdsZVByZWZpeGVkRmllbGQ6QCJIOiIgcmF3VGV4dDpyYXdUZXh0IGVuZENoYXI6JzsnIHRyaW06Tk9dIGJvb2xWYWx1ZV07CisgIHJldHVybiBbWlhXaWZpUGFyc2VkUmVzdWx0IHdpZmlQYXJzZWRSZXN1bHRXaXRoTmV0d29ya0VuY3J5cHRpb246dHlwZSBzc2lkOnNzaWQgcGFzc3dvcmQ6cGFzcyBoaWRkZW46aGlkZGVuXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9aWEJpdEFycmF5LmggYi9aWGluZ09iakMvY29tbW9uL1pYQml0QXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2MyMWM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9aWEJpdEFycmF5LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBBIHNpbXBsZSwgZmFzdCBhcnJheSBvZiBiaXRzLCByZXByZXNlbnRlZCBjb21wYWN0bHkgYnkgYW4gYXJyYXkgb2YgaW50cyBpbnRlcm5hbGx5LgorICovCisKK0BpbnRlcmZhY2UgWlhCaXRBcnJheSA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgaW50MzJfdCAqYml0czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgaW50IHNpemU7CisKKy0gKGlkKWluaXRXaXRoU2l6ZTooaW50KXNpemU7CistIChpbnQpc2l6ZUluQnl0ZXM7CistIChCT09MKWdldDooaW50KWk7CistICh2b2lkKXNldDooaW50KWk7CistICh2b2lkKWZsaXA6KGludClpOworLSAoaW50KW5leHRTZXQ6KGludClmcm9tOworLSAoaW50KW5leHRVbnNldDooaW50KWZyb207CistICh2b2lkKXNldEJ1bGs6KGludClpIG5ld0JpdHM6KGludDMyX3QpbmV3Qml0czsKKy0gKHZvaWQpc2V0UmFuZ2U6KGludClzdGFydCBlbmQ6KGludCllbmQ7CistICh2b2lkKWNsZWFyOworLSAoQk9PTClpc1JhbmdlOihpbnQpc3RhcnQgZW5kOihpbnQpZW5kIHZhbHVlOihCT09MKXZhbHVlOworLSAodm9pZClhcHBlbmRCaXQ6KEJPT0wpYml0OworLSAodm9pZClhcHBlbmRCaXRzOihpbnQzMl90KXZhbHVlIG51bUJpdHM6KGludCludW1CaXRzOworLSAodm9pZClhcHBlbmRCaXRBcnJheTooWlhCaXRBcnJheSAqKW90aGVyOworLSAodm9pZCl4b3I6KFpYQml0QXJyYXkgKilvdGhlcjsKKy0gKHZvaWQpdG9CeXRlczooaW50KWJpdE9mZnNldCBhcnJheTooaW50OF90ICopYXJyYXkgb2Zmc2V0OihpbnQpb2Zmc2V0IG51bUJ5dGVzOihpbnQpbnVtQnl0ZXM7CistICh2b2lkKXJldmVyc2U7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vWlhCaXRBcnJheS5tIGIvWlhpbmdPYmpDL2NvbW1vbi9aWEJpdEFycmF5Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVjNjI3MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vWlhCaXRBcnJheS5tCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisKK0BpbnRlcmZhY2UgWlhCaXRBcnJheSAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQzMl90ICpiaXRzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGJpdHNMZW5ndGg7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgc2l6ZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhCaXRBcnJheQorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfc2l6ZSA9IDA7CisgICAgX2JpdHMgPSAoaW50MzJfdCAqKW1hbGxvYygxICogc2l6ZW9mKGludDMyX3QpKTsKKyAgICBfYml0c0xlbmd0aCA9IDE7CisgICAgX2JpdHNbMF0gPSAwOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRXaXRoU2l6ZTooaW50KXNpemUgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9zaXplID0gc2l6ZTsKKyAgICBfYml0c0xlbmd0aCA9IChzaXplICsgMzEpID4+IDU7CisKKyAgICBfYml0cyA9IChpbnQzMl90ICopbWFsbG9jKF9iaXRzTGVuZ3RoICogc2l6ZW9mKGludDMyX3QpKTsKKyAgICBtZW1zZXQoX2JpdHMsIDAsIF9iaXRzTGVuZ3RoICogc2l6ZW9mKGludDMyX3QpKTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisKKy0gKHZvaWQpZGVhbGxvYyB7CisgIGlmIChfYml0cyAhPSBOVUxMKSB7CisgICAgZnJlZShfYml0cyk7CisgICAgX2JpdHMgPSBOVUxMOworICB9Cit9CisKKy0gKGludClzaXplSW5CeXRlcyB7CisgIHJldHVybiAoc2VsZi5zaXplICsgNykgPj4gMzsKK30KKworLSAodm9pZCllbnN1cmVDYXBhY2l0eTooaW50KXNpemUgeworICBpZiAoc2l6ZSA+IHNlbGYuYml0c0xlbmd0aCA8PCA1KSB7CisgICAgaW50IG5ld0JpdHNMZW5ndGggPSAoc2l6ZSArIDMxKSA+PiA1OworICAgIHNlbGYuYml0cyA9IHJlYWxsb2Moc2VsZi5iaXRzLCBuZXdCaXRzTGVuZ3RoICogc2l6ZW9mKGludDMyX3QpKTsKKyAgICBtZW1zZXQoc2VsZi5iaXRzICsgc2VsZi5iaXRzTGVuZ3RoLCAwLCAobmV3Qml0c0xlbmd0aCAtIHNlbGYuYml0c0xlbmd0aCkgKiBzaXplb2YoaW50MzJfdCkpOworCisgICAgc2VsZi5iaXRzTGVuZ3RoID0gbmV3Qml0c0xlbmd0aDsKKyAgfQorfQorCisKKy0gKEJPT0wpZ2V0OihpbnQpaSB7CisgIHJldHVybiAoc2VsZi5iaXRzW2kgPj4gNV0gJiAoMSA8PCAoaSAmIDB4MUYpKSkgIT0gMDsKK30KKworCistICh2b2lkKXNldDooaW50KWkgeworICBzZWxmLmJpdHNbaSA+PiA1XSB8PSAxIDw8IChpICYgMHgxRik7Cit9CisKKy8qKgorICogRmxpcHMgYml0IGkuCisgKi8KKy0gKHZvaWQpZmxpcDooaW50KWkgeworICBzZWxmLmJpdHNbaSA+PiA1XSBePSAxIDw8IChpICYgMHgxRik7Cit9CisKKy0gKGludCluZXh0U2V0OihpbnQpZnJvbSB7CisgIGlmIChmcm9tID49IHNlbGYuc2l6ZSkgeworICAgIHJldHVybiBzZWxmLnNpemU7CisgIH0KKyAgaW50IGJpdHNPZmZzZXQgPSBmcm9tID4+IDU7CisgIGludDMyX3QgY3VycmVudEJpdHMgPSBzZWxmLmJpdHNbYml0c09mZnNldF07CisgIC8vIG1hc2sgb2ZmIGxlc3NlciBiaXRzIGZpcnN0CisgIGN1cnJlbnRCaXRzICY9IH4oKDEgPDwgKGZyb20gJiAweDFGKSkgLSAxKTsKKyAgd2hpbGUgKGN1cnJlbnRCaXRzID09IDApIHsKKyAgICBpZiAoKytiaXRzT2Zmc2V0ID09IHNlbGYuYml0c0xlbmd0aCkgeworICAgICAgcmV0dXJuIHNlbGYuc2l6ZTsKKyAgICB9CisgICAgY3VycmVudEJpdHMgPSBzZWxmLmJpdHNbYml0c09mZnNldF07CisgIH0KKyAgaW50IHJlc3VsdCA9IChiaXRzT2Zmc2V0IDw8IDUpICsgW3NlbGYgbnVtYmVyT2ZUcmFpbGluZ1plcm9zOmN1cnJlbnRCaXRzXTsKKyAgcmV0dXJuIHJlc3VsdCA+IHNlbGYuc2l6ZSA/IHNlbGYuc2l6ZSA6IHJlc3VsdDsKK30KKworLSAoaW50KW5leHRVbnNldDooaW50KWZyb20geworICBpZiAoZnJvbSA+PSBzZWxmLnNpemUpIHsKKyAgICByZXR1cm4gc2VsZi5zaXplOworICB9CisgIGludCBiaXRzT2Zmc2V0ID0gZnJvbSA+PiA1OworICBpbnQzMl90IGN1cnJlbnRCaXRzID0gfnNlbGYuYml0c1tiaXRzT2Zmc2V0XTsKKyAgLy8gbWFzayBvZmYgbGVzc2VyIGJpdHMgZmlyc3QKKyAgY3VycmVudEJpdHMgJj0gfigoMSA8PCAoZnJvbSAmIDB4MUYpKSAtIDEpOworICB3aGlsZSAoY3VycmVudEJpdHMgPT0gMCkgeworICAgIGlmICgrK2JpdHNPZmZzZXQgPT0gc2VsZi5iaXRzTGVuZ3RoKSB7CisgICAgICByZXR1cm4gc2VsZi5zaXplOworICAgIH0KKyAgICBjdXJyZW50Qml0cyA9IH5zZWxmLmJpdHNbYml0c09mZnNldF07CisgIH0KKyAgaW50IHJlc3VsdCA9IChiaXRzT2Zmc2V0IDw8IDUpICsgW3NlbGYgbnVtYmVyT2ZUcmFpbGluZ1plcm9zOmN1cnJlbnRCaXRzXTsKKyAgcmV0dXJuIHJlc3VsdCA+IHNlbGYuc2l6ZSA/IHNlbGYuc2l6ZSA6IHJlc3VsdDsKK30KKworLyoqCisgKiBTZXRzIGEgYmxvY2sgb2YgMzIgYml0cywgc3RhcnRpbmcgYXQgYml0IGkuCisgKiAKKyAqIG5ld0JpdHMgaXMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgbmV4dCAzMiBiaXRzLiBOb3RlIGFnYWluIHRoYXQgdGhlIGxlYXN0LXNpZ25pZmljYW50IGJpdAorICogY29ycmVzcG9uZHMgdG8gYml0IGksIHRoZSBuZXh0LWxlYXN0LXNpZ25pZmljYW50IHRvIGkrMSwgYW5kIHNvIG9uLgorICovCistICh2b2lkKXNldEJ1bGs6KGludClpIG5ld0JpdHM6KGludDMyX3QpbmV3Qml0cyB7CisgIHNlbGYuYml0c1tpID4+IDVdID0gbmV3Qml0czsKK30KKworLyoqCisgKiBTZXRzIGEgcmFuZ2Ugb2YgYml0cy4KKyAqLworLSAodm9pZClzZXRSYW5nZTooaW50KXN0YXJ0IGVuZDooaW50KWVuZCB7CisgIGlmIChlbmQgPCBzdGFydCkgeworICAgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gcmVhc29uOkAiU3RhcnQgZ3JlYXRlciB0aGFuIGVuZCIgdXNlckluZm86bmlsXTsKKyAgfQorICBpZiAoZW5kID09IHN0YXJ0KSB7CisgICAgcmV0dXJuOworICB9CisgIGVuZC0tOyAvLyB3aWxsIGJlIGVhc2llciB0byB0cmVhdCB0aGlzIGFzIHRoZSBsYXN0IGFjdHVhbGx5IHNldCBiaXQgLS0gaW5jbHVzaXZlCisgIGludCBmaXJzdEludCA9IHN0YXJ0ID4+IDU7CisgIGludCBsYXN0SW50ID0gZW5kID4+IDU7CisgIGZvciAoaW50IGkgPSBmaXJzdEludDsgaSA8PSBsYXN0SW50OyBpKyspIHsKKyAgICBpbnQgZmlyc3RCaXQgPSBpID4gZmlyc3RJbnQgPyAwIDogc3RhcnQgJiAweDFGOworICAgIGludCBsYXN0Qml0ID0gaSA8IGxhc3RJbnQgPyAzMSA6IGVuZCAmIDB4MUY7CisgICAgaW50MzJfdCBtYXNrOworICAgIGlmIChmaXJzdEJpdCA9PSAwICYmIGxhc3RCaXQgPT0gMzEpIHsKKyAgICAgIG1hc2sgPSAtMTsKKyAgICB9IGVsc2UgeworICAgICAgbWFzayA9IDA7CisgICAgICBmb3IgKGludCBqID0gZmlyc3RCaXQ7IGogPD0gbGFzdEJpdDsgaisrKSB7CisgICAgICAgIG1hc2sgfD0gMSA8PCBqOworICAgICAgfQorICAgIH0KKyAgICBzZWxmLmJpdHNbaV0gfD0gbWFzazsKKyAgfQorfQorCisvKioKKyAqIENsZWFycyBhbGwgYml0cyAoc2V0cyB0byBmYWxzZSkuCisgKi8KKy0gKHZvaWQpY2xlYXIgeworICBtZW1zZXQoc2VsZi5iaXRzLCAwLCBzZWxmLmJpdHNMZW5ndGggKiBzaXplb2YoaW50MzJfdCkpOworfQorCisvKioKKyAqIEVmZmljaWVudCBtZXRob2QgdG8gY2hlY2sgaWYgYSByYW5nZSBvZiBiaXRzIGlzIHNldCwgb3Igbm90IHNldC4KKyAqLworLSAoQk9PTClpc1JhbmdlOihpbnQpc3RhcnQgZW5kOihpbnQpZW5kIHZhbHVlOihCT09MKXZhbHVlIHsKKyAgaWYgKGVuZCA8IHN0YXJ0KSB7CisgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiByZWFzb246QCJTdGFydCBncmVhdGVyIHRoYW4gZW5kIiB1c2VySW5mbzpuaWxdOworICB9CisgIGlmIChlbmQgPT0gc3RhcnQpIHsKKyAgICByZXR1cm4gWUVTOworICB9CisgIGVuZC0tOworICBpbnQgZmlyc3RJbnQgPSBzdGFydCA+PiA1OworICBpbnQgbGFzdEludCA9IGVuZCA+PiA1OworCisgIGZvciAoaW50IGkgPSBmaXJzdEludDsgaSA8PSBsYXN0SW50OyBpKyspIHsKKyAgICBpbnQgZmlyc3RCaXQgPSBpID4gZmlyc3RJbnQgPyAwIDogc3RhcnQgJiAweDFGOworICAgIGludCBsYXN0Qml0ID0gaSA8IGxhc3RJbnQgPyAzMSA6IGVuZCAmIDB4MUY7CisgICAgaW50MzJfdCBtYXNrOworICAgIGlmIChmaXJzdEJpdCA9PSAwICYmIGxhc3RCaXQgPT0gMzEpIHsKKyAgICAgIG1hc2sgPSAtMTsKKyAgICB9IGVsc2UgeworICAgICAgbWFzayA9IDA7CisKKyAgICAgIGZvciAoaW50IGogPSBmaXJzdEJpdDsgaiA8PSBsYXN0Qml0OyBqKyspIHsKKyAgICAgICAgbWFzayB8PSAxIDw8IGo7CisgICAgICB9CisgICAgfQorICAgIGlmICgoc2VsZi5iaXRzW2ldICYgbWFzaykgIT0gKHZhbHVlID8gbWFzayA6IDApKSB7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICB9CisKKyAgcmV0dXJuIFlFUzsKK30KKworLSAodm9pZClhcHBlbmRCaXQ6KEJPT0wpYml0IHsKKyAgW3NlbGYgZW5zdXJlQ2FwYWNpdHk6c2VsZi5zaXplICsgMV07CisgIGlmIChiaXQpIHsKKyAgICBzZWxmLmJpdHNbc2VsZi5zaXplID4+IDVdIHw9IDEgPDwgKHNlbGYuc2l6ZSAmIDB4MUYpOworICB9CisgIHNlbGYuc2l6ZSsrOworfQorCisvKioKKyAqIEFwcGVuZHMgdGhlIGxlYXN0LXNpZ25pZmljYW50IGJpdHMsIGZyb20gdmFsdWUsIGluIG9yZGVyIGZyb20gbW9zdC1zaWduaWZpY2FudCB0bworICogbGVhc3Qtc2lnbmlmaWNhbnQuIEZvciBleGFtcGxlLCBhcHBlbmRpbmcgNiBiaXRzIGZyb20gMHgwMDAwMDFFIHdpbGwgYXBwZW5kIHRoZSBiaXRzCisgKiAwLCAxLCAxLCAxLCAxLCAwIGluIHRoYXQgb3JkZXIuCisgKi8KKy0gKHZvaWQpYXBwZW5kQml0czooaW50MzJfdCl2YWx1ZSBudW1CaXRzOihpbnQpbnVtQml0cyB7CisgIGlmIChudW1CaXRzIDwgMCB8fCBudW1CaXRzID4gMzIpIHsKKyAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpAIk51bSBiaXRzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgIH0KKyAgW3NlbGYgZW5zdXJlQ2FwYWNpdHk6c2VsZi5zaXplICsgbnVtQml0c107CisgIGZvciAoaW50IG51bUJpdHNMZWZ0ID0gbnVtQml0czsgbnVtQml0c0xlZnQgPiAwOyBudW1CaXRzTGVmdC0tKSB7CisgICAgW3NlbGYgYXBwZW5kQml0OigodmFsdWUgPj4gKG51bUJpdHNMZWZ0IC0gMSkpICYgMHgwMSkgPT0gMV07CisgIH0KK30KKworLSAodm9pZClhcHBlbmRCaXRBcnJheTooWlhCaXRBcnJheSAqKW90aGVyIHsKKyAgaW50IG90aGVyU2l6ZSA9IFtvdGhlciBzaXplXTsKKyAgW3NlbGYgZW5zdXJlQ2FwYWNpdHk6c2VsZi5zaXplICsgb3RoZXJTaXplXTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IG90aGVyU2l6ZTsgaSsrKSB7CisgICAgW3NlbGYgYXBwZW5kQml0OltvdGhlciBnZXQ6aV1dOworICB9Cit9CisKKy0gKHZvaWQpeG9yOihaWEJpdEFycmF5ICopb3RoZXIgeworICBpZiAoc2VsZi5iaXRzTGVuZ3RoICE9IG90aGVyLmJpdHNMZW5ndGgpIHsKKyAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpAIlNpemVzIGRvbid0IG1hdGNoIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKKyAgfQorCisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VsZi5iaXRzTGVuZ3RoOyBpKyspIHsKKyAgICBzZWxmLmJpdHNbaV0gXj0gb3RoZXIuYml0c1tpXTsKKyAgfQorfQorCisKKy0gKHZvaWQpdG9CeXRlczooaW50KWJpdE9mZnNldCBhcnJheTooaW50OF90ICopYXJyYXkgb2Zmc2V0OihpbnQpb2Zmc2V0IG51bUJ5dGVzOihpbnQpbnVtQnl0ZXMgeworICBmb3IgKGludCBpID0gMDsgaSA8IG51bUJ5dGVzOyBpKyspIHsKKyAgICBpbnQzMl90IHRoZUJ5dGUgPSAwOworICAgIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7CisgICAgICBpZiAoW3NlbGYgZ2V0OmJpdE9mZnNldF0pIHsKKyAgICAgICAgdGhlQnl0ZSB8PSAxIDw8ICg3IC0gaik7CisgICAgICB9CisgICAgICBiaXRPZmZzZXQrKzsKKyAgICB9CisgICAgYXJyYXlbb2Zmc2V0ICsgaV0gPSAoaW50OF90KXRoZUJ5dGU7CisgIH0KK30KKworLyoqCisgKiBSZXZlcnNlcyBhbGwgYml0cyBpbiB0aGUgYXJyYXkuCisgKi8KKy0gKHZvaWQpcmV2ZXJzZSB7CisgIGludDMyX3QgKm5ld0JpdHMgPSAoaW50MzJfdCAqKW1hbGxvYyhzZWxmLnNpemUgKiBzaXplb2YoaW50MzJfdCkpOworICBtZW1zZXQobmV3Qml0cywgMCwgc2VsZi5zaXplICogc2l6ZW9mKGludDMyX3QpKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxmLnNpemU7IGkrKykgeworICAgIGlmIChbc2VsZiBnZXQ6c2VsZi5zaXplIC0gaSAtIDFdKSB7CisgICAgICBuZXdCaXRzW2kgPj4gNV0gfD0gMSA8PCAoaSAmIDB4MUYpOworICAgIH0KKyAgfQorCisgIGlmIChzZWxmLmJpdHMgIT0gTlVMTCkgeworICAgIGZyZWUoc2VsZi5iaXRzKTsKKyAgfQorICBzZWxmLmJpdHMgPSBuZXdCaXRzOworfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKKyAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxmLnNpemU7IGkrKykgeworICAgIGlmICgoaSAmIDB4MDcpID09IDApIHsKKyAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAiICJdOworICAgIH0KKyAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpbc2VsZiBnZXQ6aV0gPyBAIlgiIDogQCIuIl07CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvLyBQb3J0ZWQgZnJvbSBPcGVuSkRLIEludGVnZXIubnVtYmVyT2ZUcmFpbGluZ1plcm9zIGltcGxlbWVudGF0aW9uCistIChpbnQzMl90KW51bWJlck9mVHJhaWxpbmdaZXJvczooaW50MzJfdClpIHsKKyAgaW50MzJfdCB5OworICBpZiAoaSA9PSAwKSByZXR1cm4gMzI7CisgIGludDMyX3QgbiA9IDMxOworICB5ID0gaSA8PDE2OyBpZiAoeSAhPSAwKSB7IG4gPSBuIC0xNjsgaSA9IHk7IH0KKyAgeSA9IGkgPDwgODsgaWYgKHkgIT0gMCkgeyBuID0gbiAtIDg7IGkgPSB5OyB9CisgIHkgPSBpIDw8IDQ7IGlmICh5ICE9IDApIHsgbiA9IG4gLSA0OyBpID0geTsgfQorICB5ID0gaSA8PCAyOyBpZiAoeSAhPSAwKSB7IG4gPSBuIC0gMjsgaSA9IHk7IH0KKyAgcmV0dXJuIG4gLSAoaW50MzJfdCkoKHVpbnQzMl90KShpIDw8IDEpID4+IDMxKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9aWEJpdE1hdHJpeC5oIGIvWlhpbmdPYmpDL2NvbW1vbi9aWEJpdE1hdHJpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YzA1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL1pYQml0TWF0cml4LmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBSZXByZXNlbnRzIGEgMkQgbWF0cml4IG9mIGJpdHMuIEluIGZ1bmN0aW9uIGFyZ3VtZW50cyBiZWxvdywgYW5kIHRocm91Z2hvdXQgdGhlIGNvbW1vbgorICogbW9kdWxlLCB4IGlzIHRoZSBjb2x1bW4gcG9zaXRpb24sIGFuZCB5IGlzIHRoZSByb3cgcG9zaXRpb24uIFRoZSBvcmRlcmluZyBpcyBhbHdheXMgeCwgeS4KKyAqIFRoZSBvcmlnaW4gaXMgYXQgdGhlIHRvcC1sZWZ0LgorICogCisgKiBJbnRlcm5hbGx5IHRoZSBiaXRzIGFyZSByZXByZXNlbnRlZCBpbiBhIDEtRCBhcnJheSBvZiAzMi1iaXQgaW50cy4gSG93ZXZlciwgZWFjaCByb3cgYmVnaW5zCisgKiB3aXRoIGEgbmV3IE5TSW50ZWdlci4gVGhpcyBpcyBkb25lIGludGVudGlvbmFsbHkgc28gdGhhdCB3ZSBjYW4gY29weSBvdXQgYSByb3cgaW50byBhIEJpdEFycmF5IHZlcnkKKyAqIGVmZmljaWVudGx5LgorICogCisgKiBUaGUgb3JkZXJpbmcgb2YgYml0cyBpcyByb3ctbWFqb3IuIFdpdGhpbiBlYWNoIE5TSW50ZWdlciwgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgYXJlIHVzZWQgZmlyc3QsCisgKiBtZWFuaW5nIHRoZXkgcmVwcmVzZW50IGxvd2VyIHggdmFsdWVzLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBCaXRBcnJheSdzIGltcGxlbWVudGF0aW9uLgorICovCisKK0BjbGFzcyBaWEJpdEFycmF5OworCitAaW50ZXJmYWNlIFpYQml0TWF0cml4IDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBpbnQgd2lkdGg7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIGludCBoZWlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIGludDMyX3QgKmJpdHM7CisKKysgKFpYQml0TWF0cml4ICopYml0TWF0cml4V2l0aERpbWVuc2lvbjooaW50KWRpbWVuc2lvbjsKKysgKFpYQml0TWF0cml4ICopYml0TWF0cml4V2l0aFdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0OworCistIChpZClpbml0V2l0aERpbWVuc2lvbjooaW50KWRpbWVuc2lvbjsKKy0gKGlkKWluaXRXaXRoV2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQ7CisKKy0gKEJPT0wpZ2V0WDooaW50KXggeTooaW50KXk7CistICh2b2lkKXNldFg6KGludCl4IHk6KGludCl5OworLSAodm9pZClmbGlwWDooaW50KXggeTooaW50KXk7CistICh2b2lkKWNsZWFyOworLSAodm9pZClzZXRSZWdpb25BdExlZnQ6KGludClsZWZ0IHRvcDooaW50KXRvcCB3aWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodDsKKy0gKFpYQml0QXJyYXkgKilyb3dBdFk6KGludCl5IHJvdzooWlhCaXRBcnJheSAqKXJvdzsKKy0gKHZvaWQpc2V0Um93QXRZOihpbnQpeSByb3c6KFpYQml0QXJyYXkgKilyb3c7CistIChOU0FycmF5ICopZW5jbG9zaW5nUmVjdGFuZ2xlOworLSAoTlNBcnJheSAqKXRvcExlZnRPbkJpdDsKKy0gKE5TQXJyYXkgKilib3R0b21SaWdodE9uQml0OworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL1pYQml0TWF0cml4Lm0gYi9aWGluZ09iakMvY29tbW9uL1pYQml0TWF0cml4Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwMmVkNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vWlhCaXRNYXRyaXgubQpAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKworQGludGVyZmFjZSBaWEJpdE1hdHJpeCAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgcm93U2l6ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBiaXRzU2l6ZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhCaXRNYXRyaXgKKworKyAoWlhCaXRNYXRyaXggKiliaXRNYXRyaXhXaXRoRGltZW5zaW9uOihpbnQpZGltZW5zaW9uIHsKKyAgcmV0dXJuIFtbc2VsZiBhbGxvY10gaW5pdFdpdGhEaW1lbnNpb246ZGltZW5zaW9uXTsKK30KKworKyAoWlhCaXRNYXRyaXggKiliaXRNYXRyaXhXaXRoV2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgeworICByZXR1cm4gW1tzZWxmIGFsbG9jXSBpbml0V2l0aFdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHRdOworfQorCistIChpZClpbml0V2l0aERpbWVuc2lvbjooaW50KWRpbWVuc2lvbiB7CisgIHJldHVybiBbc2VsZiBpbml0V2l0aFdpZHRoOmRpbWVuc2lvbiBoZWlnaHQ6ZGltZW5zaW9uXTsKK30KKworLSAoaWQpaW5pdFdpdGhXaWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgaWYgKHdpZHRoIDwgMSB8fCBoZWlnaHQgPCAxKSB7CisgICAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOkAiQm90aCBkaW1lbnNpb25zIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgICAgfQorICAgIF93aWR0aCA9IHdpZHRoOworICAgIF9oZWlnaHQgPSBoZWlnaHQ7CisgICAgX3Jvd1NpemUgPSAoX3dpZHRoICsgMzEpID4+IDU7CisgICAgX2JpdHNTaXplID0gX3Jvd1NpemUgKiBfaGVpZ2h0OworICAgIF9iaXRzID0gKGludDMyX3QgKiltYWxsb2MoX2JpdHNTaXplICogc2l6ZW9mKGludDMyX3QpKTsKKyAgICBbc2VsZiBjbGVhcl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jIHsKKyAgaWYgKF9iaXRzICE9IE5VTEwpIHsKKyAgICBmcmVlKF9iaXRzKTsKKyAgICBfYml0cyA9IE5VTEw7CisgIH0KK30KKworLyoqCisgKiBHZXRzIHRoZSByZXF1ZXN0ZWQgYml0LCB3aGVyZSB0cnVlIG1lYW5zIGJsYWNrLgorICovCistIChCT09MKWdldFg6KGludCl4IHk6KGludCl5IHsKKyAgTlNJbnRlZ2VyIG9mZnNldCA9IHkgKiBzZWxmLnJvd1NpemUgKyAoeCA+PiA1KTsKKyAgcmV0dXJuICgoc2VsZi5iaXRzW29mZnNldF0gPj4gKHggJiAweDFmKSkgJiAxKSAhPSAwOworfQorCisvKioKKyAqIFNldHMgdGhlIGdpdmVuIGJpdCB0byB0cnVlLgorICovCistICh2b2lkKXNldFg6KGludCl4IHk6KGludCl5IHsKKyAgTlNJbnRlZ2VyIG9mZnNldCA9IHkgKiBzZWxmLnJvd1NpemUgKyAoeCA+PiA1KTsKKyAgc2VsZi5iaXRzW29mZnNldF0gfD0gMSA8PCAoeCAmIDB4MWYpOworfQorCisvKioKKyAqIEZsaXBzIHRoZSBnaXZlbiBiaXQuCisgKi8KKy0gKHZvaWQpZmxpcFg6KGludCl4IHk6KGludCl5IHsKKyAgTlNVSW50ZWdlciBvZmZzZXQgPSB5ICogc2VsZi5yb3dTaXplICsgKHggPj4gNSk7CisgIHNlbGYuYml0c1tvZmZzZXRdIF49IDEgPDwgKHggJiAweDFmKTsKK30KKworLyoqCisgKiBDbGVhcnMgYWxsIGJpdHMgKHNldHMgdG8gZmFsc2UpLgorICovCistICh2b2lkKWNsZWFyIHsKKyAgTlNJbnRlZ2VyIG1heCA9IHNlbGYuYml0c1NpemU7CisgIG1lbXNldChzZWxmLmJpdHMsIDAsIG1heCAqIHNpemVvZihpbnQzMl90KSk7Cit9CisKKy8qKgorICogU2V0cyBhIHNxdWFyZSByZWdpb24gb2YgdGhlIGJpdCBtYXRyaXggdG8gdHJ1ZS4KKyAqLworLSAodm9pZClzZXRSZWdpb25BdExlZnQ6KGludClsZWZ0IHRvcDooaW50KXRvcCB3aWR0aDooaW50KWFXaWR0aCBoZWlnaHQ6KGludClhSGVpZ2h0IHsKKyAgaWYgKGFIZWlnaHQgPCAxIHx8IGFXaWR0aCA8IDEpIHsKKyAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpAIkhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBhdCBsZWFzdCAxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKKyAgfQorICBOU1VJbnRlZ2VyIHJpZ2h0ID0gbGVmdCArIGFXaWR0aDsKKyAgTlNVSW50ZWdlciBib3R0b20gPSB0b3AgKyBhSGVpZ2h0OworICBpZiAoYm90dG9tID4gc2VsZi5oZWlnaHQgfHwgcmlnaHQgPiBzZWxmLndpZHRoKSB7CisgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246QCJUaGUgcmVnaW9uIG11c3QgZml0IGluc2lkZSB0aGUgbWF0cml4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKKyAgfQorICBmb3IgKE5TVUludGVnZXIgeSA9IHRvcDsgeSA8IGJvdHRvbTsgeSsrKSB7CisgICAgTlNVSW50ZWdlciBvZmZzZXQgPSB5ICogc2VsZi5yb3dTaXplOworICAgIGZvciAoTlNJbnRlZ2VyIHggPSBsZWZ0OyB4IDwgcmlnaHQ7IHgrKykgeworICAgICAgc2VsZi5iaXRzW29mZnNldCArICh4ID4+IDUpXSB8PSAxIDw8ICh4ICYgMHgxZik7CisgICAgfQorICB9Cit9CisKKy8qKgorICogQSBmYXN0IG1ldGhvZCB0byByZXRyaWV2ZSBvbmUgcm93IG9mIGRhdGEgZnJvbSB0aGUgbWF0cml4IGFzIGEgQml0QXJyYXkuCisgKi8KKy0gKFpYQml0QXJyYXkgKilyb3dBdFk6KGludCl5IHJvdzooWlhCaXRBcnJheSAqKXJvdyB7CisgIGlmIChyb3cgPT0gbmlsIHx8IFtyb3cgc2l6ZV0gPCBzZWxmLndpZHRoKSB7CisgICAgcm93ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6c2VsZi53aWR0aF07CisgIH0KKyAgaW50IG9mZnNldCA9IHkgKiBzZWxmLnJvd1NpemU7CisgIGZvciAoaW50IHggPSAwOyB4IDwgc2VsZi5yb3dTaXplOyB4KyspIHsKKyAgICBbcm93IHNldEJ1bGs6eCA8PCA1IG5ld0JpdHM6c2VsZi5iaXRzW29mZnNldCArIHhdXTsKKyAgfQorCisgIHJldHVybiByb3c7Cit9CisKKy0gKHZvaWQpc2V0Um93QXRZOihpbnQpeSByb3c6KFpYQml0QXJyYXkgKilyb3cgeworICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBzZWxmLnJvd1NpemU7IGkrKykgeworICAgIHNlbGYuYml0c1soeSAqIHNlbGYucm93U2l6ZSkgKyBpXSA9IHJvdy5iaXRzW2ldOworICB9Cit9CisKKy8qKgorICogVGhpcyBpcyB1c2VmdWwgaW4gZGV0ZWN0aW5nIHRoZSBlbmNsb3NpbmcgcmVjdGFuZ2xlIG9mIGEgJ3B1cmUnIGJhcmNvZGUuCisgKgorICogUmV0dXJucyB7bGVmdCx0b3Asd2lkdGgsaGVpZ2h0fSBlbmNsb3NpbmcgcmVjdGFuZ2xlIG9mIGFsbCAxIGJpdHMsIG9yIG51bGwgaWYgaXQgaXMgYWxsIHdoaXRlCisgKi8KKy0gKE5TQXJyYXkgKillbmNsb3NpbmdSZWN0YW5nbGUgeworICBpbnQgbGVmdCA9IHNlbGYud2lkdGg7CisgIGludCB0b3AgPSBzZWxmLmhlaWdodDsKKyAgaW50IHJpZ2h0ID0gLTE7CisgIGludCBib3R0b20gPSAtMTsKKworICBmb3IgKGludCB5ID0gMDsgeSA8IHNlbGYuaGVpZ2h0OyB5KyspIHsKKyAgICBmb3IgKGludCB4MzIgPSAwOyB4MzIgPCBzZWxmLnJvd1NpemU7IHgzMisrKSB7CisgICAgICBpbnQzMl90IHRoZUJpdHMgPSBzZWxmLmJpdHNbeSAqIHNlbGYucm93U2l6ZSArIHgzMl07CisgICAgICBpZiAodGhlQml0cyAhPSAwKSB7CisgICAgICAgIGlmICh5IDwgdG9wKSB7CisgICAgICAgICAgdG9wID0geTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeSA+IGJvdHRvbSkgeworICAgICAgICAgIGJvdHRvbSA9IHk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHgzMiAqIDMyIDwgbGVmdCkgeworICAgICAgICAgIGludDMyX3QgYml0ID0gMDsKKyAgICAgICAgICB3aGlsZSAoKHRoZUJpdHMgPDwgKDMxIC0gYml0KSkgPT0gMCkgeworICAgICAgICAgICAgYml0Kys7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICgoeDMyICogMzIgKyBiaXQpIDwgbGVmdCkgeworICAgICAgICAgICAgbGVmdCA9IHgzMiAqIDMyICsgYml0OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoeDMyICogMzIgKyAzMSA+IHJpZ2h0KSB7CisgICAgICAgICAgaW50IGJpdCA9IDMxOworICAgICAgICAgIHdoaWxlICgodGhlQml0cyA+PiBiaXQpID09IDApIHsKKyAgICAgICAgICAgIGJpdC0tOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoKHgzMiAqIDMyICsgYml0KSA+IHJpZ2h0KSB7CisgICAgICAgICAgICByaWdodCA9IHgzMiAqIDMyICsgYml0OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIE5TSW50ZWdlciB3aWR0aCA9IHJpZ2h0IC0gbGVmdDsKKyAgTlNJbnRlZ2VyIGhlaWdodCA9IGJvdHRvbSAtIHRvcDsKKworICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgcmV0dXJuIEBbQChsZWZ0KSwgQCh0b3ApLCBAKF93aWR0aCksIEAoX2hlaWdodCldOworfQorCisvKioKKyAqIFRoaXMgaXMgdXNlZnVsIGluIGRldGVjdGluZyBhIGNvcm5lciBvZiBhICdwdXJlJyBiYXJjb2RlLgorICogCisgKiBSZXR1cm5zIHt4LHl9IGNvb3JkaW5hdGUgb2YgdG9wLWxlZnQtbW9zdCAxIGJpdCwgb3IgbnVsbCBpZiBpdCBpcyBhbGwgd2hpdGUKKyAqLworLSAoTlNBcnJheSAqKXRvcExlZnRPbkJpdCB7CisgIGludCBiaXRzT2Zmc2V0ID0gMDsKKyAgd2hpbGUgKGJpdHNPZmZzZXQgPCBzZWxmLmJpdHNTaXplICYmIHNlbGYuYml0c1tiaXRzT2Zmc2V0XSA9PSAwKSB7CisgICAgYml0c09mZnNldCsrOworICB9CisgIGlmIChiaXRzT2Zmc2V0ID09IHNlbGYuYml0c1NpemUpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIGludCB5ID0gYml0c09mZnNldCAvIHNlbGYucm93U2l6ZTsKKyAgaW50IHggPSAoYml0c09mZnNldCAlIHNlbGYucm93U2l6ZSkgPDwgNTsKKworICBpbnQzMl90IHRoZUJpdHMgPSBzZWxmLmJpdHNbYml0c09mZnNldF07CisgIGludDMyX3QgYml0ID0gMDsKKyAgd2hpbGUgKCh0aGVCaXRzIDw8ICgzMSAtIGJpdCkpID09IDApIHsKKyAgICBiaXQrKzsKKyAgfQorICB4ICs9IGJpdDsKKyAgcmV0dXJuIEBbQCh4KSwgQCh5KV07Cit9CisKKy0gKE5TQXJyYXkgKilib3R0b21SaWdodE9uQml0IHsKKyAgaW50IGJpdHNPZmZzZXQgPSBzZWxmLmJpdHNTaXplIC0gMTsKKyAgd2hpbGUgKGJpdHNPZmZzZXQgPj0gMCAmJiBzZWxmLmJpdHNbYml0c09mZnNldF0gPT0gMCkgeworICAgIGJpdHNPZmZzZXQtLTsKKyAgfQorICBpZiAoYml0c09mZnNldCA8IDApIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaW50IHkgPSBiaXRzT2Zmc2V0IC8gc2VsZi5yb3dTaXplOworICBpbnQgeCA9IChiaXRzT2Zmc2V0ICUgc2VsZi5yb3dTaXplKSA8PCA1OworCisgIGludDMyX3QgdGhlQml0cyA9IHNlbGYuYml0c1tiaXRzT2Zmc2V0XTsKKyAgaW50MzJfdCBiaXQgPSAzMTsKKyAgd2hpbGUgKCh0aGVCaXRzID4+IGJpdCkgPT0gMCkgeworICAgIGJpdC0tOworICB9CisgIHggKz0gYml0OworCisgIHJldHVybiBAW0AoeCksIEAoeSldOworfQorCistIChCT09MKWlzRXF1YWw6KE5TT2JqZWN0ICopbyB7CisgIGlmICghKFtvIGlzS2luZE9mQ2xhc3M6W1pYQml0TWF0cml4IGNsYXNzXV0pKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIFpYQml0TWF0cml4ICpvdGhlciA9IChaWEJpdE1hdHJpeCAqKW87CisgIGlmIChzZWxmLndpZHRoICE9IG90aGVyLndpZHRoIHx8IHNlbGYuaGVpZ2h0ICE9IG90aGVyLmhlaWdodCB8fCBzZWxmLnJvd1NpemUgIT0gb3RoZXIucm93U2l6ZSB8fCBzZWxmLmJpdHNTaXplICE9IG90aGVyLmJpdHNTaXplKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VsZi5iaXRzU2l6ZTsgaSsrKSB7CisgICAgaWYgKHNlbGYuYml0c1tpXSAhPSBvdGhlci5iaXRzW2ldKSB7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICB9CisgIHJldHVybiBZRVM7Cit9CisKKy0gKE5TVUludGVnZXIpaGFzaCB7CisgIE5TSW50ZWdlciBoYXNoID0gc2VsZi53aWR0aDsKKyAgaGFzaCA9IDMxICogaGFzaCArIHNlbGYud2lkdGg7CisgIGhhc2ggPSAzMSAqIGhhc2ggKyBzZWxmLmhlaWdodDsKKyAgaGFzaCA9IDMxICogaGFzaCArIHNlbGYucm93U2l6ZTsKKyAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgc2VsZi5iaXRzU2l6ZTsgaSsrKSB7CisgICAgaGFzaCA9IDMxICogaGFzaCArIHNlbGYuYml0c1tpXTsKKyAgfQorICByZXR1cm4gaGFzaDsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6c2VsZi5oZWlnaHQgKiAoc2VsZi53aWR0aCArIDEpXTsKKyAgZm9yIChpbnQgeSA9IDA7IHkgPCBzZWxmLmhlaWdodDsgeSsrKSB7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBzZWxmLndpZHRoOyB4KyspIHsKKyAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOltzZWxmIGdldFg6eCB5OnldID8gQCJYICIgOiBAIiAgIl07CisgICAgfQorICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAiXG4iXTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL1pYQml0U291cmNlLmggYi9aWGluZ09iakMvY29tbW9uL1pYQml0U291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5NTU4OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vWlhCaXRTb3VyY2UuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIFRoaXMgcHJvdmlkZXMgYW4gZWFzeSBhYnN0cmFjdGlvbiB0byByZWFkIGJpdHMgYXQgYSB0aW1lIGZyb20gYSBzZXF1ZW5jZSBvZiBieXRlcywgd2hlcmUgdGhlCisgKiBudW1iZXIgb2YgYml0cyByZWFkIGlzIG5vdCBvZnRlbiBhIG11bHRpcGxlIG9mIDguCisgKiAKKyAqIFRoaXMgY2xhc3MgaXMgdGhyZWFkLXNhZmUgYnV0IG5vdCByZWVudHJhbnQgLS0gdW5sZXNzIHRoZSBjYWxsZXIgbW9kaWZpZXMgdGhlIGJ5dGVzIGFycmF5CisgKiBpdCBwYXNzZWQgaW4sIGluIHdoaWNoIGNhc2UgYWxsIGJldHMgYXJlIG9mZi4KKyAqLworCitAaW50ZXJmYWNlIFpYQml0U291cmNlIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBiaXRPZmZzZXQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGJ5dGVPZmZzZXQ7CisKKy0gKGlkKWluaXRXaXRoQnl0ZXM6KGludDhfdCAqKWJ5dGVzIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aDsKKy0gKGludClyZWFkQml0czooaW50KW51bUJpdHM7CistIChpbnQpYXZhaWxhYmxlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL1pYQml0U291cmNlLm0gYi9aWGluZ09iakMvY29tbW9uL1pYQml0U291cmNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwZmJiMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vWlhCaXRTb3VyY2UubQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdFNvdXJjZS5oIgorCitAaW50ZXJmYWNlIFpYQml0U291cmNlICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludDhfdCAqYnl0ZXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgYnl0ZU9mZnNldDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBiaXRPZmZzZXQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbGVuZ3RoOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEJpdFNvdXJjZQorCisvKioKKyAqIGJ5dGVzIGlzIHRoZSBieXRlcyBmcm9tIHdoaWNoIHRoaXMgd2lsbCByZWFkIGJpdHMuIEJpdHMgd2lsbCBiZSByZWFkIGZyb20gdGhlIGZpcnN0IGJ5dGUgZmlyc3QuCisgKiBCaXRzIGFyZSByZWFkIHdpdGhpbiBhIGJ5dGUgZnJvbSBtb3N0LXNpZ25pZmljYW50IHRvIGxlYXN0LXNpZ25pZmljYW50IGJpdC4KKyAqLworLSAoaWQpaW5pdFdpdGhCeXRlczooaW50OF90ICopYnl0ZXMgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfYnl0ZXMgPSBieXRlczsKKyAgICBfbGVuZ3RoID0gbGVuZ3RoOworICB9CisgIHJldHVybiBzZWxmOworfQorCisKKy0gKGludClyZWFkQml0czooaW50KW51bUJpdHMgeworICBpZiAobnVtQml0cyA8IDEgfHwgbnVtQml0cyA+IDMyIHx8IG51bUJpdHMgPiBzZWxmLmF2YWlsYWJsZSkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAKKyAgICAgICAgICAgICAgICBmb3JtYXQ6QCJJbnZhbGlkIG51bWJlciBvZiBiaXRzOiAlZCIsIG51bUJpdHNdOworICB9CisgIGludCByZXN1bHQgPSAwOworICBpZiAoc2VsZi5iaXRPZmZzZXQgPiAwKSB7CisgICAgaW50IGJpdHNMZWZ0ID0gOCAtIHNlbGYuYml0T2Zmc2V0OworICAgIGludCB0b1JlYWQgPSBudW1CaXRzIDwgYml0c0xlZnQgPyBudW1CaXRzIDogYml0c0xlZnQ7CisgICAgaW50IGJpdHNUb05vdFJlYWQgPSBiaXRzTGVmdCAtIHRvUmVhZDsKKyAgICBpbnQgbWFzayA9ICgweEZGID4+ICg4IC0gdG9SZWFkKSkgPDwgYml0c1RvTm90UmVhZDsKKyAgICByZXN1bHQgPSAoc2VsZi5ieXRlc1tzZWxmLmJ5dGVPZmZzZXRdICYgbWFzaykgPj4gYml0c1RvTm90UmVhZDsKKyAgICBudW1CaXRzIC09IHRvUmVhZDsKKyAgICBzZWxmLmJpdE9mZnNldCArPSB0b1JlYWQ7CisgICAgaWYgKHNlbGYuYml0T2Zmc2V0ID09IDgpIHsKKyAgICAgIHNlbGYuYml0T2Zmc2V0ID0gMDsKKyAgICAgIHNlbGYuYnl0ZU9mZnNldCsrOworICAgIH0KKyAgfQorCisgIGlmIChudW1CaXRzID4gMCkgeworICAgIHdoaWxlIChudW1CaXRzID49IDgpIHsKKyAgICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgOCkgfCAoc2VsZi5ieXRlc1tzZWxmLmJ5dGVPZmZzZXRdICYgMHhGRik7CisgICAgICBzZWxmLmJ5dGVPZmZzZXQrKzsKKyAgICAgIG51bUJpdHMgLT0gODsKKyAgICB9CisKKyAgICBpZiAobnVtQml0cyA+IDApIHsKKyAgICAgIGludCBiaXRzVG9Ob3RSZWFkID0gOCAtIG51bUJpdHM7CisgICAgICBpbnQgbWFzayA9ICgweEZGID4+IGJpdHNUb05vdFJlYWQpIDw8IGJpdHNUb05vdFJlYWQ7CisgICAgICByZXN1bHQgPSAocmVzdWx0IDw8IG51bUJpdHMpIHwgKChzZWxmLmJ5dGVzW3NlbGYuYnl0ZU9mZnNldF0gJiBtYXNrKSA+PiBiaXRzVG9Ob3RSZWFkKTsKKyAgICAgIHNlbGYuYml0T2Zmc2V0ICs9IG51bUJpdHM7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKGludClhdmFpbGFibGUgeworICByZXR1cm4gOCAqIChzZWxmLmxlbmd0aCAtIHNlbGYuYnl0ZU9mZnNldCkgLSBzZWxmLmJpdE9mZnNldDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9aWENoYXJhY3RlclNldEVDSS5oIGIvWlhpbmdPYmpDL2NvbW1vbi9aWENoYXJhY3RlclNldEVDSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YTFmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL1pYQ2hhcmFjdGVyU2V0RUNJLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFQ0kuaCIKKworLyoqCisgKiBFbmNhcHN1bGF0ZXMgYSBDaGFyYWN0ZXIgU2V0IEVDSSwgYWNjb3JkaW5nIHRvICJFeHRlbmRlZCBDaGFubmVsIEludGVycHJldGF0aW9ucyIgNS4zLjEuMQorICogb2YgSVNPIDE4MDA0LgorICovCisKK0BpbnRlcmZhY2UgWlhDaGFyYWN0ZXJTZXRFQ0kgOiBaWEVDSQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nRW5jb2RpbmcgZW5jb2Rpbmc7CisKKysgKFpYQ2hhcmFjdGVyU2V0RUNJICopY2hhcmFjdGVyU2V0RUNJQnlWYWx1ZTooaW50KXZhbHVlOworKyAoWlhDaGFyYWN0ZXJTZXRFQ0kgKiljaGFyYWN0ZXJTZXRFQ0lCeUVuY29kaW5nOihOU1N0cmluZ0VuY29kaW5nKWVuY29kaW5nOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL1pYQ2hhcmFjdGVyU2V0RUNJLm0gYi9aWGluZ09iakMvY29tbW9uL1pYQ2hhcmFjdGVyU2V0RUNJLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwMTZiMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vWlhDaGFyYWN0ZXJTZXRFQ0kubQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWENoYXJhY3RlclNldEVDSS5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKworc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKlZBTFVFX1RPX0VDSSA9IG5pbDsKK3N0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5ICpFTkNPRElOR19UT19FQ0kgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBaWENoYXJhY3RlclNldEVDSQorCisrICh2b2lkKWluaXRpYWxpemUgeworICBWQUxVRV9UT19FQ0kgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6MjldOworICBFTkNPRElOR19UT19FQ0kgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6MjldOworICBbc2VsZiBhZGRDaGFyYWN0ZXJTZXQ6MCBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDQwMF07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoxIGVuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddOworICBbc2VsZiBhZGRDaGFyYWN0ZXJTZXQ6MiBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDQwMF07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDozIGVuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddOworICBbc2VsZiBhZGRDaGFyYWN0ZXJTZXQ6NCBlbmNvZGluZzpOU0lTT0xhdGluMlN0cmluZ0VuY29kaW5nXTsKKyAgW3NlbGYgYWRkQ2hhcmFjdGVyU2V0OjUgZW5jb2Rpbmc6KE5TU3RyaW5nRW5jb2RpbmcpIDB4ODAwMDAyMDNdOworICBbc2VsZiBhZGRDaGFyYWN0ZXJTZXQ6NiBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDIwNF07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDo3IGVuY29kaW5nOihOU1N0cmluZ0VuY29kaW5nKSAweDgwMDAwMjA1XTsKKyAgW3NlbGYgYWRkQ2hhcmFjdGVyU2V0OjggZW5jb2Rpbmc6KE5TU3RyaW5nRW5jb2RpbmcpIDB4ODAwMDAyMDZdOworICBbc2VsZiBhZGRDaGFyYWN0ZXJTZXQ6OSBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDIwN107CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoxMCBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDIwOF07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoxMSBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDIwOV07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoxMiBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDIwQV07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoxMyBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDIwQl07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoxNSBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDIwRF07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoxNiBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDIwRV07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoxNyBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDIwRl07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoxOCBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDIxMF07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoyMCBlbmNvZGluZzpOU1NoaWZ0SklTU3RyaW5nRW5jb2RpbmddOworICBbc2VsZiBhZGRDaGFyYWN0ZXJTZXQ6MjEgZW5jb2Rpbmc6TlNXaW5kb3dzQ1AxMjUwU3RyaW5nRW5jb2RpbmddOworICBbc2VsZiBhZGRDaGFyYWN0ZXJTZXQ6MjIgZW5jb2Rpbmc6TlNXaW5kb3dzQ1AxMjUxU3RyaW5nRW5jb2RpbmddOworICBbc2VsZiBhZGRDaGFyYWN0ZXJTZXQ6MjMgZW5jb2Rpbmc6TlNXaW5kb3dzQ1AxMjUyU3RyaW5nRW5jb2RpbmddOworICBbc2VsZiBhZGRDaGFyYWN0ZXJTZXQ6MjQgZW5jb2Rpbmc6KE5TU3RyaW5nRW5jb2RpbmcpIDB4ODAwMDA1MDVdOworICBbc2VsZiBhZGRDaGFyYWN0ZXJTZXQ6MjUgZW5jb2Rpbmc6TlNVVEYxNkJpZ0VuZGlhblN0cmluZ0VuY29kaW5nXTsKKyAgW3NlbGYgYWRkQ2hhcmFjdGVyU2V0OjI2IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgW3NlbGYgYWRkQ2hhcmFjdGVyU2V0OjI3IGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZ107CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoyOCBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMEEwM107CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoyOSBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDYzMl07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDozMCBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDk0MF07CisgIFtzZWxmIGFkZENoYXJhY3RlclNldDoxNzAgZW5jb2Rpbmc6TlNBU0NJSVN0cmluZ0VuY29kaW5nXTsKK30KKworLSAoaWQpaW5pdFdpdGhWYWx1ZTooaW50KXZhbHVlIGVuY29kaW5nOihOU1N0cmluZ0VuY29kaW5nKWVuY29kaW5nIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhWYWx1ZTp2YWx1ZV0pIHsKKyAgICBfZW5jb2RpbmcgPSBlbmNvZGluZzsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisrICh2b2lkKWFkZENoYXJhY3RlclNldDooaW50KXZhbHVlIGVuY29kaW5nOihOU1N0cmluZ0VuY29kaW5nKWVuY29kaW5nIHsKKyAgWlhDaGFyYWN0ZXJTZXRFQ0kgKmVjaSA9IFtbWlhDaGFyYWN0ZXJTZXRFQ0kgYWxsb2NdIGluaXRXaXRoVmFsdWU6dmFsdWUgZW5jb2Rpbmc6ZW5jb2RpbmddOworICBWQUxVRV9UT19FQ0lbQCh2YWx1ZSldID0gZWNpOworICBFTkNPRElOR19UT19FQ0lbQChlbmNvZGluZyldID0gZWNpOworfQorCisrIChaWENoYXJhY3RlclNldEVDSSAqKWNoYXJhY3RlclNldEVDSUJ5VmFsdWU6KGludCl2YWx1ZSB7CisgIGlmIChWQUxVRV9UT19FQ0kgPT0gbmlsKSB7CisgICAgW3NlbGYgaW5pdGlhbGl6ZV07CisgIH0KKyAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSA5MDApIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIHJldHVybiBWQUxVRV9UT19FQ0lbQCh2YWx1ZSldOworfQorCisKKysgKFpYQ2hhcmFjdGVyU2V0RUNJICopY2hhcmFjdGVyU2V0RUNJQnlFbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZyllbmNvZGluZyB7CisgIGlmIChFTkNPRElOR19UT19FQ0kgPT0gbmlsKSB7CisgICAgW3NlbGYgaW5pdGlhbGl6ZV07CisgIH0KKyAgcmV0dXJuIEVOQ09ESU5HX1RPX0VDSVtAKGVuY29kaW5nKV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vWlhEZWNvZGVyUmVzdWx0LmggYi9aWGluZ09iakMvY29tbW9uL1pYRGVjb2RlclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NGU4MWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL1pYRGVjb2RlclJlc3VsdC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogRW5jYXBzdWxhdGVzIHRoZSByZXN1bHQgb2YgZGVjb2RpbmcgYSBtYXRyaXggb2YgYml0cy4gVGhpcyB0eXBpY2FsbHkKKyAqIGFwcGxpZXMgdG8gMkQgYmFyY29kZSBmb3JtYXRzLiBGb3Igbm93IGl0IGNvbnRhaW5zIHRoZSByYXcgYnl0ZXMgb2J0YWluZWQsCisgKiBhcyB3ZWxsIGFzIGEgU3RyaW5nIGludGVycHJldGF0aW9uIG9mIHRob3NlIGJ5dGVzLCBpZiBhcHBsaWNhYmxlLgorICovCisKK0BpbnRlcmZhY2UgWlhEZWNvZGVyUmVzdWx0IDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludDhfdCAqcmF3Qnl0ZXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGxlbmd0aDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKnRleHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgTlNNdXRhYmxlQXJyYXkgKmJ5dGVTZWdtZW50czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKmVjTGV2ZWw7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNOdW1iZXIgKmVycm9yc0NvcnJlY3RlZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU051bWJlciAqZXJhc3VyZXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBpZCBvdGhlcjsKKworLSAoaWQpaW5pdFdpdGhSYXdCeXRlczooaW50OF90ICopcmF3Qnl0ZXMKKyAgICAgICAgICAgICAgICBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGgKKyAgICAgICAgICAgICAgICAgIHRleHQ6KE5TU3RyaW5nICopdGV4dAorICAgICAgICAgIGJ5dGVTZWdtZW50czooTlNNdXRhYmxlQXJyYXkgKilieXRlU2VnbWVudHMKKyAgICAgICAgICAgICAgIGVjTGV2ZWw6KE5TU3RyaW5nICopZWNMZXZlbDsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9aWERlY29kZXJSZXN1bHQubSBiL1pYaW5nT2JqQy9jb21tb24vWlhEZWNvZGVyUmVzdWx0Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjViOTk0ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vWlhEZWNvZGVyUmVzdWx0Lm0KQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhEZWNvZGVyUmVzdWx0LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWERlY29kZXJSZXN1bHQKKworLSAoaWQpaW5pdFdpdGhSYXdCeXRlczooaW50OF90ICopcmF3Qnl0ZXMKKyAgICAgICAgICAgICAgICBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGgKKyAgICAgICAgICAgICAgICAgIHRleHQ6KE5TU3RyaW5nICopdGV4dAorICAgICAgICAgIGJ5dGVTZWdtZW50czooTlNNdXRhYmxlQXJyYXkgKilieXRlU2VnbWVudHMKKyAgICAgICAgICAgICAgIGVjTGV2ZWw6KE5TU3RyaW5nICopZWNMZXZlbCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3Jhd0J5dGVzID0gcmF3Qnl0ZXM7CisgICAgX2xlbmd0aCA9IGxlbmd0aDsKKyAgICBfdGV4dCA9IHRleHQ7CisgICAgX2J5dGVTZWdtZW50cyA9IGJ5dGVTZWdtZW50czsKKyAgICBfZWNMZXZlbCA9IGVjTGV2ZWw7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9aWERlZmF1bHRHcmlkU2FtcGxlci5oIGIvWlhpbmdPYmpDL2NvbW1vbi9aWERlZmF1bHRHcmlkU2FtcGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Nzc2Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL1pYRGVmYXVsdEdyaWRTYW1wbGVyLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhHcmlkU2FtcGxlci5oIgorCitAY2xhc3MgWlhCaXRNYXRyaXgsIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm07CisKK0BpbnRlcmZhY2UgWlhEZWZhdWx0R3JpZFNhbXBsZXIgOiBaWEdyaWRTYW1wbGVyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vWlhEZWZhdWx0R3JpZFNhbXBsZXIubSBiL1pYaW5nT2JqQy9jb21tb24vWlhEZWZhdWx0R3JpZFNhbXBsZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2I0YmJmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9aWERlZmF1bHRHcmlkU2FtcGxlci5tCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0TWF0cml4LmgiCisjaW1wb3J0ICJaWERlZmF1bHRHcmlkU2FtcGxlci5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0uaCIKKworQGltcGxlbWVudGF0aW9uIFpYRGVmYXVsdEdyaWRTYW1wbGVyCisKKy0gKFpYQml0TWF0cml4ICopc2FtcGxlR3JpZDooWlhCaXRNYXRyaXggKilpbWFnZQorICAgICAgICAgICAgICAgICBkaW1lbnNpb25YOihpbnQpZGltZW5zaW9uWAorICAgICAgICAgICAgICAgICBkaW1lbnNpb25ZOihpbnQpZGltZW5zaW9uWQorICAgICAgICAgICAgICAgICAgICAgIHAxVG9YOihmbG9hdClwMVRvWCBwMVRvWTooZmxvYXQpcDFUb1kKKyAgICAgICAgICAgICAgICAgICAgICBwMlRvWDooZmxvYXQpcDJUb1ggcDJUb1k6KGZsb2F0KXAyVG9ZCisgICAgICAgICAgICAgICAgICAgICAgcDNUb1g6KGZsb2F0KXAzVG9YIHAzVG9ZOihmbG9hdClwM1RvWQorICAgICAgICAgICAgICAgICAgICAgIHA0VG9YOihmbG9hdClwNFRvWCBwNFRvWTooZmxvYXQpcDRUb1kKKyAgICAgICAgICAgICAgICAgICAgcDFGcm9tWDooZmxvYXQpcDFGcm9tWCBwMUZyb21ZOihmbG9hdClwMUZyb21ZCisgICAgICAgICAgICAgICAgICAgIHAyRnJvbVg6KGZsb2F0KXAyRnJvbVggcDJGcm9tWTooZmxvYXQpcDJGcm9tWQorICAgICAgICAgICAgICAgICAgICBwM0Zyb21YOihmbG9hdClwM0Zyb21YIHAzRnJvbVk6KGZsb2F0KXAzRnJvbVkKKyAgICAgICAgICAgICAgICAgICAgcDRGcm9tWDooZmxvYXQpcDRGcm9tWCBwNEZyb21ZOihmbG9hdClwNEZyb21ZCisgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtICp0cmFuc2Zvcm0gPQorICAgIFtaWFBlcnNwZWN0aXZlVHJhbnNmb3JtIHF1YWRyaWxhdGVyYWxUb1F1YWRyaWxhdGVyYWw6cDFUb1ggeTA6cDFUb1kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxOnAyVG9YIHkxOnAyVG9ZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjpwM1RvWCB5MjpwM1RvWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDM6cDRUb1ggeTM6cDRUb1kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDBwOnAxRnJvbVggeTBwOnAxRnJvbVkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDFwOnAyRnJvbVggeTFwOnAyRnJvbVkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDJwOnAzRnJvbVggeTJwOnAzRnJvbVkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDNwOnA0RnJvbVggeTNwOnA0RnJvbVldOworICByZXR1cm4gW3NlbGYgc2FtcGxlR3JpZDppbWFnZSBkaW1lbnNpb25YOmRpbWVuc2lvblggZGltZW5zaW9uWTpkaW1lbnNpb25ZIHRyYW5zZm9ybTp0cmFuc2Zvcm0gZXJyb3I6ZXJyb3JdOworfQorCistIChaWEJpdE1hdHJpeCAqKXNhbXBsZUdyaWQ6KFpYQml0TWF0cml4ICopaW1hZ2UKKyAgICAgICAgICAgICAgICAgZGltZW5zaW9uWDooaW50KWRpbWVuc2lvblgKKyAgICAgICAgICAgICAgICAgZGltZW5zaW9uWTooaW50KWRpbWVuc2lvblkKKyAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTooWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSAqKXRyYW5zZm9ybQorICAgICAgICAgICAgICAgICAgICAgIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKGRpbWVuc2lvblggPD0gMCB8fCBkaW1lbnNpb25ZIDw9IDApIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgWlhCaXRNYXRyaXggKmJpdHMgPSBbW1pYQml0TWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOmRpbWVuc2lvblggaGVpZ2h0OmRpbWVuc2lvblldOworICBpbnQgcG9pbnRzTGVuID0gZGltZW5zaW9uWCA8PCAxOworICBmbG9hdCBwb2ludHNmW3BvaW50c0xlbl07CisgIG1lbXNldChwb2ludHNmLCAwLCBwb2ludHNMZW4gKiBzaXplb2YoZmxvYXQpKTsKKworICBmb3IgKGludCB5ID0gMDsgeSA8IGRpbWVuc2lvblk7IHkrKykgeworICAgIGludCBtYXggPSBkaW1lbnNpb25YIDw8IDE7CisgICAgZmxvYXQgaVZhbHVlID0gKGZsb2F0KXkgKyAwLjVmOworICAgIGZvciAoaW50IHggPSAwOyB4IDwgbWF4OyB4ICs9IDIpIHsKKyAgICAgIHBvaW50c2ZbeF0gPSAoZmxvYXQpICh4ID4+IDEpICsgMC41ZjsKKyAgICAgIHBvaW50c2ZbeCArIDFdID0gaVZhbHVlOworICAgIH0KKyAgICBbdHJhbnNmb3JtIHRyYW5zZm9ybVBvaW50czpwb2ludHNmIHBvaW50c0xlbjpwb2ludHNMZW5dOworCisgICAgaWYgKCFbWlhHcmlkU2FtcGxlciBjaGVja0FuZE51ZGdlUG9pbnRzOmltYWdlIHBvaW50czpwb2ludHNmIHBvaW50c0xlbjpwb2ludHNMZW4gZXJyb3I6ZXJyb3JdKSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1heDsgeCArPSAyKSB7CisgICAgICBpbnQgeHggPSAoaW50KXBvaW50c2ZbeF07CisgICAgICBpbnQgeXkgPSAoaW50KXBvaW50c2ZbeCArIDFdOworICAgICAgaWYgKHh4IDwgMCB8fCB5eSA8IDAgfHwgeHggPj0gaW1hZ2Uud2lkdGggfHwgeXkgPj0gaW1hZ2UuaGVpZ2h0KSB7CisgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgICB9CisKKyAgICAgIGlmIChbaW1hZ2UgZ2V0WDp4eCB5Onl5XSkgeworICAgICAgICBbYml0cyBzZXRYOnggPj4gMSB5OnldOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBiaXRzOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL1pYRGV0ZWN0b3JSZXN1bHQuaCBiL1pYaW5nT2JqQy9jb21tb24vWlhEZXRlY3RvclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYTM2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL1pYRGV0ZWN0b3JSZXN1bHQuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEVuY2Fwc3VsYXRlcyB0aGUgcmVzdWx0IG9mIGRldGVjdGluZyBhIGJhcmNvZGUgaW4gYW4gaW1hZ2UuIFRoaXMgaW5jbHVkZXMgdGhlIHJhdworICogbWF0cml4IG9mIGJsYWNrL3doaXRlIHBpeGVscyBjb3JyZXNwb25kaW5nIHRvIHRoZSBiYXJjb2RlLCBhbmQgcG9zc2libHkgcG9pbnRzIG9mIGludGVyZXN0CisgKiBpbiB0aGUgaW1hZ2UsIGxpa2UgdGhlIGxvY2F0aW9uIG9mIGZpbmRlciBwYXR0ZXJucyBvciBjb3JuZXJzIG9mIHRoZSBiYXJjb2RlIGluIHRoZSBpbWFnZS4KKyAqLworCitAY2xhc3MgWlhCaXRNYXRyaXg7CisKK0BpbnRlcmZhY2UgWlhEZXRlY3RvclJlc3VsdCA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBaWEJpdE1hdHJpeCAqYml0czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBOU0FycmF5ICpwb2ludHM7CisKKy0gKGlkKWluaXRXaXRoQml0czooWlhCaXRNYXRyaXggKiliaXRzIHBvaW50czooTlNBcnJheSAqKXBvaW50czsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9aWERldGVjdG9yUmVzdWx0Lm0gYi9aWGluZ09iakMvY29tbW9uL1pYRGV0ZWN0b3JSZXN1bHQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGQ5ZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9aWERldGVjdG9yUmVzdWx0Lm0KQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYRGV0ZWN0b3JSZXN1bHQuaCIKKworQGltcGxlbWVudGF0aW9uIFpYRGV0ZWN0b3JSZXN1bHQKKworLSAoaWQpaW5pdFdpdGhCaXRzOihaWEJpdE1hdHJpeCAqKWJpdHMgcG9pbnRzOihOU0FycmF5ICopcG9pbnRzIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfYml0cyA9IGJpdHM7CisgICAgX3BvaW50cyA9IHBvaW50czsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL1pYRUNJLmggYi9aWGluZ09iakMvY29tbW9uL1pYRUNJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkNTYzYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vWlhFQ0kuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIFN1cGVyY2xhc3Mgb2YgY2xhc3NlcyBlbmNhcHN1bGF0aW5nIHR5cGVzIEVDSXMsIGFjY29yZGluZyB0byAiRXh0ZW5kZWQgQ2hhbm5lbCBJbnRlcnByZXRhdGlvbnMiCisgKiA1LjMgb2YgSVNPIDE4MDA0LgorICovCisKK0BpbnRlcmZhY2UgWlhFQ0kgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIGludCB2YWx1ZTsKKworLSAoaWQpaW5pdFdpdGhWYWx1ZTooaW50KXZhbHVlOworKyAoWlhFQ0kgKillY2lCeVZhbHVlOihpbnQpdmFsdWU7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vWlhFQ0kubSBiL1pYaW5nT2JqQy9jb21tb24vWlhFQ0kubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDRjNjE4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9aWEVDSS5tCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQ2hhcmFjdGVyU2V0RUNJLmgiCisjaW1wb3J0ICJaWEVDSS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhFQ0kKKworLSAoaWQpaW5pdFdpdGhWYWx1ZTooaW50KXZhbHVlIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfdmFsdWUgPSB2YWx1ZTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisrIChaWEVDSSAqKWVjaUJ5VmFsdWU6KGludCl2YWx1ZSB7CisgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA5OTk5OTkpIHsKKyAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkJhZCBFQ0kgdmFsdWU6ICVkIiwgdmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWxdOworICB9CisgIGlmICh2YWx1ZSA8IDkwMCkgeworICAgIHJldHVybiBbWlhDaGFyYWN0ZXJTZXRFQ0kgY2hhcmFjdGVyU2V0RUNJQnlWYWx1ZTp2YWx1ZV07CisgIH0KKyAgcmV0dXJuIG5pbDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9aWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplci5oIGIvWlhpbmdPYmpDL2NvbW1vbi9aWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YjU0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL1pYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaW5hcml6ZXIuaCIKKworLyoqCisgKiBUaGlzIEJpbmFyaXplciBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBvbGQgWlhpbmcgZ2xvYmFsIGhpc3RvZ3JhbSBhcHByb2FjaC4gSXQgaXMgc3VpdGFibGUKKyAqIGZvciBsb3ctZW5kIG1vYmlsZSBkZXZpY2VzIHdoaWNoIGRvbid0IGhhdmUgZW5vdWdoIENQVSBvciBtZW1vcnkgdG8gdXNlIGEgbG9jYWwgdGhyZXNob2xkaW5nCisgKiBhbGdvcml0aG0uIEhvd2V2ZXIsIGJlY2F1c2UgaXQgcGlja3MgYSBnbG9iYWwgYmxhY2sgcG9pbnQsIGl0IGNhbm5vdCBoYW5kbGUgZGlmZmljdWx0IHNoYWRvd3MKKyAqIGFuZCBncmFkaWVudHMuCisgKiAKKyAqIEZhc3RlciBtb2JpbGUgZGV2aWNlcyBhbmQgYWxsIGRlc2t0b3AgYXBwbGljYXRpb25zIHNob3VsZCBwcm9iYWJseSB1c2UgWlhIeWJyaWRCaW5hcml6ZXIgaW5zdGVhZC4KKyAqLworCitAY2xhc3MgWlhCaXRBcnJheSwgWlhCaXRNYXRyaXgsIFpYTHVtaW5hbmNlU291cmNlOworCitAaW50ZXJmYWNlIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyIDogWlhCaW5hcml6ZXIKKworLSAoWlhCaXRBcnJheSAqKWJsYWNrUm93OihpbnQpeSByb3c6KFpYQml0QXJyYXkgKilyb3cgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CistIChaWEJpbmFyaXplciAqKWNyZWF0ZUJpbmFyaXplcjooWlhMdW1pbmFuY2VTb3VyY2UgKilzb3VyY2U7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIubSBiL1pYaW5nT2JqQy9jb21tb24vWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTZlMzc3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9aWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplci5tCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplci5oIgorI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEx1bWluYW5jZVNvdXJjZS5oIgorCitpbnQgY29uc3QgTFVNSU5BTkNFX0JJVFMgPSA1OworaW50IGNvbnN0IExVTUlOQU5DRV9TSElGVCA9IDggLSBMVU1JTkFOQ0VfQklUUzsKK2ludCBjb25zdCBMVU1JTkFOQ0VfQlVDS0VUUyA9IDEgPDwgTFVNSU5BTkNFX0JJVFM7CisKK0BpbnRlcmZhY2UgWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50OF90ICpsdW1pbmFuY2VzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGx1bWluYW5jZXNDb3VudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCAqYnVja2V0czsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIKKworLSAoaWQpaW5pdFdpdGhTb3VyY2U6KFpYTHVtaW5hbmNlU291cmNlICopc291cmNlIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhTb3VyY2U6c291cmNlXSkgeworICAgIF9sdW1pbmFuY2VzID0gTlVMTDsKKyAgICBfbHVtaW5hbmNlc0NvdW50ID0gMDsKKyAgICBfYnVja2V0cyA9IChpbnQgKiltYWxsb2MoTFVNSU5BTkNFX0JVQ0tFVFMgKiBzaXplb2YoaW50KSk7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jIHsKKyAgaWYgKF9sdW1pbmFuY2VzICE9IE5VTEwpIHsKKyAgICBmcmVlKF9sdW1pbmFuY2VzKTsKKyAgICBfbHVtaW5hbmNlcyA9IE5VTEw7CisgIH0KKworICBpZiAoX2J1Y2tldHMgIT0gTlVMTCkgeworICAgIGZyZWUoX2J1Y2tldHMpOworICAgIF9idWNrZXRzID0gTlVMTDsKKyAgfQorfQorCistIChaWEJpdEFycmF5ICopYmxhY2tSb3c6KGludCl5IHJvdzooWlhCaXRBcnJheSAqKXJvdyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIFpYTHVtaW5hbmNlU291cmNlICpzb3VyY2UgPSBzZWxmLmx1bWluYW5jZVNvdXJjZTsKKyAgaW50IHdpZHRoID0gc291cmNlLndpZHRoOworICBpZiAocm93ID09IG5pbCB8fCByb3cuc2l6ZSA8IHdpZHRoKSB7CisgICAgcm93ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6d2lkdGhdOworICB9IGVsc2UgeworICAgIFtyb3cgY2xlYXJdOworICB9CisKKyAgW3NlbGYgaW5pdEFycmF5czp3aWR0aF07CisgIGludDhfdCAqbG9jYWxMdW1pbmFuY2VzID0gW3NvdXJjZSByb3c6eV07CisgIGludCAqbG9jYWxCdWNrZXRzID0gKGludCAqKW1hbGxvYyhMVU1JTkFOQ0VfQlVDS0VUUyAqIHNpemVvZihpbnQpKTsKKyAgbWVtc2V0KGxvY2FsQnVja2V0cywgMCwgTFVNSU5BTkNFX0JVQ0tFVFMgKiBzaXplb2YoaW50KSk7CisgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgIGludCBwaXhlbCA9IGxvY2FsTHVtaW5hbmNlc1t4XSAmIDB4ZmY7CisgICAgbG9jYWxCdWNrZXRzW3BpeGVsID4+IExVTUlOQU5DRV9TSElGVF0rKzsKKyAgfQorICBpbnQgYmxhY2tQb2ludCA9IFtzZWxmIGVzdGltYXRlQmxhY2tQb2ludDpsb2NhbEJ1Y2tldHNdOworICBmcmVlKGxvY2FsQnVja2V0cyk7CisgIGxvY2FsQnVja2V0cyA9IE5VTEw7CisgIGlmIChibGFja1BvaW50ID09IC0xKSB7CisgICAgZnJlZShsb2NhbEx1bWluYW5jZXMpOworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGludCBsZWZ0ID0gbG9jYWxMdW1pbmFuY2VzWzBdICYgMHhmZjsKKyAgaW50IGNlbnRlciA9IGxvY2FsTHVtaW5hbmNlc1sxXSAmIDB4ZmY7CisgIGZvciAoaW50IHggPSAxOyB4IDwgd2lkdGggLSAxOyB4KyspIHsKKyAgICBpbnQgcmlnaHQgPSBsb2NhbEx1bWluYW5jZXNbeCArIDFdICYgMHhmZjsKKyAgICBpbnQgbHVtaW5hbmNlID0gKChjZW50ZXIgPDwgMikgLSBsZWZ0IC0gcmlnaHQpID4+IDE7CisgICAgaWYgKGx1bWluYW5jZSA8IGJsYWNrUG9pbnQpIHsKKyAgICAgIFtyb3cgc2V0OnhdOworICAgIH0KKyAgICBsZWZ0ID0gY2VudGVyOworICAgIGNlbnRlciA9IHJpZ2h0OworICB9CisKKyAgZnJlZShsb2NhbEx1bWluYW5jZXMpOworICByZXR1cm4gcm93OworfQorCistIChaWEJpdE1hdHJpeCAqKWJsYWNrTWF0cml4V2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgWlhMdW1pbmFuY2VTb3VyY2UgKnNvdXJjZSA9IHNlbGYubHVtaW5hbmNlU291cmNlOworICBpbnQgd2lkdGggPSBzb3VyY2Uud2lkdGg7CisgIGludCBoZWlnaHQgPSBzb3VyY2UuaGVpZ2h0OworICBaWEJpdE1hdHJpeCAqbWF0cml4ID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0XTsKKworICBbc2VsZiBpbml0QXJyYXlzOndpZHRoXTsKKworICBpbnQgKmxvY2FsQnVja2V0cyA9IChpbnQgKiltYWxsb2MoTFVNSU5BTkNFX0JVQ0tFVFMgKiBzaXplb2YoaW50KSk7CisgIG1lbXNldChsb2NhbEJ1Y2tldHMsIDAsIExVTUlOQU5DRV9CVUNLRVRTICogc2l6ZW9mKGludCkpOworICBmb3IgKGludCB5ID0gMTsgeSA8IDU7IHkrKykgeworICAgIGludCByb3cgPSBoZWlnaHQgKiB5IC8gNTsKKyAgICBpbnQ4X3QgKmxvY2FsTHVtaW5hbmNlcyA9IFtzb3VyY2Ugcm93OnJvd107CisgICAgaW50IHJpZ2h0ID0gKHdpZHRoIDw8IDIpIC8gNTsKKyAgICBmb3IgKGludCB4ID0gd2lkdGggLyA1OyB4IDwgcmlnaHQ7IHgrKykgeworICAgICAgaW50IHBpeGVsID0gbG9jYWxMdW1pbmFuY2VzW3hdICYgMHhmZjsKKyAgICAgIGxvY2FsQnVja2V0c1twaXhlbCA+PiBMVU1JTkFOQ0VfU0hJRlRdKys7CisgICAgfQorICB9CisgIGludCBibGFja1BvaW50ID0gW3NlbGYgZXN0aW1hdGVCbGFja1BvaW50OmxvY2FsQnVja2V0c107CisgIGZyZWUobG9jYWxCdWNrZXRzKTsKKyAgbG9jYWxCdWNrZXRzID0gTlVMTDsKKworICBpZiAoYmxhY2tQb2ludCA9PSAtMSkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGludDhfdCAqbG9jYWxMdW1pbmFuY2VzID0gc291cmNlLm1hdHJpeDsKKyAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgIGludCBvZmZzZXQgPSB5ICogd2lkdGg7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICBpbnQgcGl4ZWwgPSBsb2NhbEx1bWluYW5jZXNbb2Zmc2V0ICsgeF0gJiAweGZmOworICAgICAgaWYgKHBpeGVsIDwgYmxhY2tQb2ludCkgeworICAgICAgICBbbWF0cml4IHNldFg6eCB5OnldOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBtYXRyaXg7Cit9CisKKy0gKFpYQmluYXJpemVyICopY3JlYXRlQmluYXJpemVyOihaWEx1bWluYW5jZVNvdXJjZSAqKXNvdXJjZSB7CisgIHJldHVybiBbW1pYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyIGFsbG9jXSBpbml0V2l0aFNvdXJjZTpzb3VyY2VdOworfQorCistICh2b2lkKWluaXRBcnJheXM6KGludClsdW1pbmFuY2VTaXplIHsKKyAgaWYgKHNlbGYubHVtaW5hbmNlcyA9PSBOVUxMIHx8IHNlbGYubHVtaW5hbmNlc0NvdW50IDwgbHVtaW5hbmNlU2l6ZSkgeworICAgIGlmIChzZWxmLmx1bWluYW5jZXMgIT0gTlVMTCkgeworICAgICAgZnJlZShzZWxmLmx1bWluYW5jZXMpOworICAgIH0KKyAgICBzZWxmLmx1bWluYW5jZXMgPSAoaW50OF90ICopbWFsbG9jKGx1bWluYW5jZVNpemUgKiBzaXplb2YoaW50OF90KSk7CisgICAgc2VsZi5sdW1pbmFuY2VzQ291bnQgPSBsdW1pbmFuY2VTaXplOworICB9CisKKyAgZm9yIChpbnQgeCA9IDA7IHggPCBMVU1JTkFOQ0VfQlVDS0VUUzsgeCsrKSB7CisgICAgc2VsZi5idWNrZXRzW3hdID0gMDsKKyAgfQorfQorCistIChpbnQpZXN0aW1hdGVCbGFja1BvaW50OihpbnQgKilvdGhlckJ1Y2tldHMgeworICBpbnQgbnVtQnVja2V0cyA9IExVTUlOQU5DRV9CVUNLRVRTOworICBpbnQgbWF4QnVja2V0Q291bnQgPSAwOworICBpbnQgZmlyc3RQZWFrID0gMDsKKyAgaW50IGZpcnN0UGVha1NpemUgPSAwOworCisgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQnVja2V0czsgeCsrKSB7CisgICAgaWYgKG90aGVyQnVja2V0c1t4XSA+IGZpcnN0UGVha1NpemUpIHsKKyAgICAgIGZpcnN0UGVhayA9IHg7CisgICAgICBmaXJzdFBlYWtTaXplID0gb3RoZXJCdWNrZXRzW3hdOworICAgIH0KKyAgICBpZiAob3RoZXJCdWNrZXRzW3hdID4gbWF4QnVja2V0Q291bnQpIHsKKyAgICAgIG1heEJ1Y2tldENvdW50ID0gb3RoZXJCdWNrZXRzW3hdOworICAgIH0KKyAgfQorCisgIGludCBzZWNvbmRQZWFrID0gMDsKKyAgaW50IHNlY29uZFBlYWtTY29yZSA9IDA7CisgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQnVja2V0czsgeCsrKSB7CisgICAgaW50IGRpc3RhbmNlVG9CaWdnZXN0ID0geCAtIGZpcnN0UGVhazsKKyAgICBpbnQgc2NvcmUgPSBvdGhlckJ1Y2tldHNbeF0gKiBkaXN0YW5jZVRvQmlnZ2VzdCAqIGRpc3RhbmNlVG9CaWdnZXN0OworICAgIGlmIChzY29yZSA+IHNlY29uZFBlYWtTY29yZSkgeworICAgICAgc2Vjb25kUGVhayA9IHg7CisgICAgICBzZWNvbmRQZWFrU2NvcmUgPSBzY29yZTsKKyAgICB9CisgIH0KKworICBpZiAoZmlyc3RQZWFrID4gc2Vjb25kUGVhaykgeworICAgIGludCB0ZW1wID0gZmlyc3RQZWFrOworICAgIGZpcnN0UGVhayA9IHNlY29uZFBlYWs7CisgICAgc2Vjb25kUGVhayA9IHRlbXA7CisgIH0KKworICBpZiAoc2Vjb25kUGVhayAtIGZpcnN0UGVhayA8PSBudW1CdWNrZXRzID4+IDQpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpbnQgYmVzdFZhbGxleSA9IHNlY29uZFBlYWsgLSAxOworICBpbnQgYmVzdFZhbGxleVNjb3JlID0gLTE7CisgIGZvciAoaW50IHggPSBzZWNvbmRQZWFrIC0gMTsgeCA+IGZpcnN0UGVhazsgeC0tKSB7CisgICAgaW50IGZyb21GaXJzdCA9IHggLSBmaXJzdFBlYWs7CisgICAgaW50IHNjb3JlID0gZnJvbUZpcnN0ICogZnJvbUZpcnN0ICogKHNlY29uZFBlYWsgLSB4KSAqIChtYXhCdWNrZXRDb3VudCAtIG90aGVyQnVja2V0c1t4XSk7CisgICAgaWYgKHNjb3JlID4gYmVzdFZhbGxleVNjb3JlKSB7CisgICAgICBiZXN0VmFsbGV5ID0geDsKKyAgICAgIGJlc3RWYWxsZXlTY29yZSA9IHNjb3JlOworICAgIH0KKyAgfQorCisgIHJldHVybiBiZXN0VmFsbGV5IDw8IExVTUlOQU5DRV9TSElGVDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9aWEdyaWRTYW1wbGVyLmggYi9aWGluZ09iakMvY29tbW9uL1pYR3JpZFNhbXBsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDMzMWExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9aWEdyaWRTYW1wbGVyLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBJbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBjbGFzcyBjYW4sIGdpdmVuIGxvY2F0aW9ucyBvZiBmaW5kZXIgcGF0dGVybnMgZm9yIGEgUVIgY29kZSBpbiBhbgorICogaW1hZ2UsIHNhbXBsZSB0aGUgcmlnaHQgcG9pbnRzIGluIHRoZSBpbWFnZSB0byByZWNvbnN0cnVjdCB0aGUgUVIgY29kZSwgYWNjb3VudGluZyBmb3IKKyAqIHBlcnNwZWN0aXZlIGRpc3RvcnRpb24uIEl0IGlzIGFic3RyYWN0ZWQgc2luY2UgaXQgaXMgcmVsYXRpdmVseSBleHBlbnNpdmUgYW5kIHNob3VsZCBiZSBhbGxvd2VkCisgKiB0byB0YWtlIGFkdmFudGFnZSBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb25zLCBsaWtlIFN1bidzIEphdmEgQWR2YW5jZWQKKyAqIEltYWdpbmcgbGlicmFyeSwgYnV0IHdoaWNoIG1heSBub3QgYmUgYXZhaWxhYmxlIGluIG90aGVyIGVudmlyb25tZW50cyBzdWNoIGFzIEoyTUUsIGFuZCB2aWNlCisgKiB2ZXJzYS4KKyAqIAorICogVGhlIGltcGxlbWVudGF0aW9uIHVzZWQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgY2FsbGluZyB7QGxpbmsgI3NldEdyaWRTYW1wbGVyKEdyaWRTYW1wbGVyKX0KKyAqIHdpdGggYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlLgorICovCisKK0BjbGFzcyBaWEJpdE1hdHJpeCwgWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybTsKKworQGludGVyZmFjZSBaWEdyaWRTYW1wbGVyIDogTlNPYmplY3QKKworKyAoWlhHcmlkU2FtcGxlciAqKWluc3RhbmNlOworKyAodm9pZClzZXRHcmlkU2FtcGxlcjooWlhHcmlkU2FtcGxlciAqKW5ld0dyaWRTYW1wbGVyOworLSAoWlhCaXRNYXRyaXggKilzYW1wbGVHcmlkOihaWEJpdE1hdHJpeCAqKWltYWdlCisgICAgICAgICAgICAgICAgIGRpbWVuc2lvblg6KGludClkaW1lbnNpb25YCisgICAgICAgICAgICAgICAgIGRpbWVuc2lvblk6KGludClkaW1lbnNpb25ZCisgICAgICAgICAgICAgICAgICAgICAgcDFUb1g6KGZsb2F0KXAxVG9YIHAxVG9ZOihmbG9hdClwMVRvWQorICAgICAgICAgICAgICAgICAgICAgIHAyVG9YOihmbG9hdClwMlRvWCBwMlRvWTooZmxvYXQpcDJUb1kKKyAgICAgICAgICAgICAgICAgICAgICBwM1RvWDooZmxvYXQpcDNUb1ggcDNUb1k6KGZsb2F0KXAzVG9ZCisgICAgICAgICAgICAgICAgICAgICAgcDRUb1g6KGZsb2F0KXA0VG9YIHA0VG9ZOihmbG9hdClwNFRvWQorICAgICAgICAgICAgICAgICAgICBwMUZyb21YOihmbG9hdClwMUZyb21YIHAxRnJvbVk6KGZsb2F0KXAxRnJvbVkKKyAgICAgICAgICAgICAgICAgICAgcDJGcm9tWDooZmxvYXQpcDJGcm9tWCBwMkZyb21ZOihmbG9hdClwMkZyb21ZCisgICAgICAgICAgICAgICAgICAgIHAzRnJvbVg6KGZsb2F0KXAzRnJvbVggcDNGcm9tWTooZmxvYXQpcDNGcm9tWQorICAgICAgICAgICAgICAgICAgICBwNEZyb21YOihmbG9hdClwNEZyb21YIHA0RnJvbVk6KGZsb2F0KXA0RnJvbVkKKyAgICAgICAgICAgICAgICAgICAgICBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKFpYQml0TWF0cml4ICopc2FtcGxlR3JpZDooWlhCaXRNYXRyaXggKilpbWFnZQorICAgICAgICAgICAgICAgICBkaW1lbnNpb25YOihpbnQpZGltZW5zaW9uWAorICAgICAgICAgICAgICAgICBkaW1lbnNpb25ZOihpbnQpZGltZW5zaW9uWQorICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOihaWFBlcnNwZWN0aXZlVHJhbnNmb3JtICopdHJhbnNmb3JtCisgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisrIChCT09MKWNoZWNrQW5kTnVkZ2VQb2ludHM6KFpYQml0TWF0cml4ICopaW1hZ2UgcG9pbnRzOihmbG9hdCAqKXBvaW50cyBwb2ludHNMZW46KGludClwb2ludHNMZW4gZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vWlhHcmlkU2FtcGxlci5tIGIvWlhpbmdPYmpDL2NvbW1vbi9aWEdyaWRTYW1wbGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1ZGJiYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vWlhHcmlkU2FtcGxlci5tCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhEZWZhdWx0R3JpZFNhbXBsZXIuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEdyaWRTYW1wbGVyLmgiCisjaW1wb3J0ICJaWFBlcnNwZWN0aXZlVHJhbnNmb3JtLmgiCisKK3N0YXRpYyBaWEdyaWRTYW1wbGVyICpncmlkU2FtcGxlciA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFpYR3JpZFNhbXBsZXIKKworLyoqCisgKiBTZXRzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmlkU2FtcGxlciB1c2VkIGJ5IHRoZSBsaWJyYXJ5LiBPbmUgZ2xvYmFsCisgKiBpbnN0YW5jZSBpcyBzdG9yZWQsIHdoaWNoIG1heSBzb3VuZCBwcm9ibGVtYXRpYy4gQnV0LCB0aGUgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQKKyAqIG91Z2h0IHRvIGJlIGFwcHJvcHJpYXRlIGZvciB0aGUgZW50aXJlIHBsYXRmb3JtLCBhbmQgYWxsIHVzZXMgb2YgdGhpcyBsaWJyYXJ5CisgKiBpbiB0aGUgd2hvbGUgbGlmZXRpbWUgb2YgdGhlIEpWTS4gRm9yIGluc3RhbmNlLCBhbiBBbmRyb2lkIGFjdGl2aXR5IGNhbiBzd2FwIGluCisgKiBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiBuYXRpdmUgcGxhdGZvcm0gbGlicmFyaWVzLgorICovCisrICh2b2lkKXNldEdyaWRTYW1wbGVyOihaWEdyaWRTYW1wbGVyICopbmV3R3JpZFNhbXBsZXIgeworICBncmlkU2FtcGxlciA9IG5ld0dyaWRTYW1wbGVyOworfQorCisrIChaWEdyaWRTYW1wbGVyICopaW5zdGFuY2UgeworICBpZiAoIWdyaWRTYW1wbGVyKSB7CisgICAgZ3JpZFNhbXBsZXIgPSBbW1pYRGVmYXVsdEdyaWRTYW1wbGVyIGFsbG9jXSBpbml0XTsKKyAgfQorCisgIHJldHVybiBncmlkU2FtcGxlcjsKK30KKworLyoqCisgKiBTYW1wbGVzIGFuIGltYWdlIGZvciBhIHJlY3Rhbmd1bGFyIG1hdHJpeCBvZiBiaXRzIG9mIHRoZSBnaXZlbiBkaW1lbnNpb24uCisgKi8KKy0gKFpYQml0TWF0cml4ICopc2FtcGxlR3JpZDooWlhCaXRNYXRyaXggKilpbWFnZQorICAgICAgICAgICAgICAgICBkaW1lbnNpb25YOihpbnQpZGltZW5zaW9uWAorICAgICAgICAgICAgICAgICBkaW1lbnNpb25ZOihpbnQpZGltZW5zaW9uWQorICAgICAgICAgICAgICAgICAgICAgIHAxVG9YOihmbG9hdClwMVRvWCBwMVRvWTooZmxvYXQpcDFUb1kKKyAgICAgICAgICAgICAgICAgICAgICBwMlRvWDooZmxvYXQpcDJUb1ggcDJUb1k6KGZsb2F0KXAyVG9ZCisgICAgICAgICAgICAgICAgICAgICAgcDNUb1g6KGZsb2F0KXAzVG9YIHAzVG9ZOihmbG9hdClwM1RvWQorICAgICAgICAgICAgICAgICAgICAgIHA0VG9YOihmbG9hdClwNFRvWCBwNFRvWTooZmxvYXQpcDRUb1kKKyAgICAgICAgICAgICAgICAgICAgcDFGcm9tWDooZmxvYXQpcDFGcm9tWCBwMUZyb21ZOihmbG9hdClwMUZyb21ZCisgICAgICAgICAgICAgICAgICAgIHAyRnJvbVg6KGZsb2F0KXAyRnJvbVggcDJGcm9tWTooZmxvYXQpcDJGcm9tWQorICAgICAgICAgICAgICAgICAgICBwM0Zyb21YOihmbG9hdClwM0Zyb21YIHAzRnJvbVk6KGZsb2F0KXAzRnJvbVkKKyAgICAgICAgICAgICAgICAgICAgcDRGcm9tWDooZmxvYXQpcDRGcm9tWCBwNEZyb21ZOihmbG9hdClwNEZyb21ZCisgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJZb3UgbXVzdCBvdmVycmlkZSAlQCBpbiBhIHN1YmNsYXNzIiwgTlNTdHJpbmdGcm9tU2VsZWN0b3IoX2NtZCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKK30KKworLSAoWlhCaXRNYXRyaXggKilzYW1wbGVHcmlkOihaWEJpdE1hdHJpeCAqKWltYWdlCisgICAgICAgICAgICAgICAgIGRpbWVuc2lvblg6KGludClkaW1lbnNpb25YCisgICAgICAgICAgICAgICAgIGRpbWVuc2lvblk6KGludClkaW1lbnNpb25ZCisgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06KFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0gKil0cmFuc2Zvcm0KKyAgICAgICAgICAgICAgICAgICAgICBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIllvdSBtdXN0IG92ZXJyaWRlICVAIGluIGEgc3ViY2xhc3MiLCBOU1N0cmluZ0Zyb21TZWxlY3RvcihfY21kKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWxdOworfQorCisKKy8qKgorICogQ2hlY2tzIGEgc2V0IG9mIHBvaW50cyB0aGF0IGhhdmUgYmVlbiB0cmFuc2Zvcm1lZCB0byBzYW1wbGUgcG9pbnRzIG9uIGFuIGltYWdlIGFnYWluc3QKKyAqIHRoZSBpbWFnZSdzIGRpbWVuc2lvbnMgdG8gc2VlIGlmIHRoZSBwb2ludCBhcmUgZXZlbiB3aXRoaW4gdGhlIGltYWdlLgorICogCisgKiBUaGlzIG1ldGhvZCB3aWxsIGFjdHVhbGx5ICJudWRnZSIgdGhlIGVuZHBvaW50cyBiYWNrIG9udG8gdGhlIGltYWdlIGlmIHRoZXkgYXJlIGZvdW5kIHRvIGJlCisgKiBiYXJlbHkgKGxlc3MgdGhhbiAxIHBpeGVsKSBvZmYgdGhlIGltYWdlLiBUaGlzIGFjY291bnRzIGZvciBpbXBlcmZlY3QgZGV0ZWN0aW9uIG9mIGZpbmRlcgorICogcGF0dGVybnMgaW4gYW4gaW1hZ2Ugd2hlcmUgdGhlIFFSIENvZGUgcnVucyBhbGwgdGhlIHdheSB0byB0aGUgaW1hZ2UgYm9yZGVyLgorICogCisgKiBGb3IgZWZmaWNpZW5jeSwgdGhlIG1ldGhvZCB3aWxsIGNoZWNrIHBvaW50cyBmcm9tIGVpdGhlciBlbmQgb2YgdGhlIGxpbmUgdW50aWwgb25lIGlzIGZvdW5kCisgKiB0byBiZSB3aXRoaW4gdGhlIGltYWdlLiBCZWNhdXNlIHRoZSBzZXQgb2YgcG9pbnRzIGFyZSBhc3N1bWVkIHRvIGJlIGxpbmVhciwgdGhpcyBpcyB2YWxpZC4KKyAqLworKyAoQk9PTCljaGVja0FuZE51ZGdlUG9pbnRzOihaWEJpdE1hdHJpeCAqKWltYWdlIHBvaW50czooZmxvYXQgKilwb2ludHMgcG9pbnRzTGVuOihpbnQpcG9pbnRzTGVuIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaW50IHdpZHRoID0gaW1hZ2Uud2lkdGg7CisgIGludCBoZWlnaHQgPSBpbWFnZS5oZWlnaHQ7CisKKyAgQk9PTCBudWRnZWQgPSBZRVM7CisgIGZvciAoaW50IG9mZnNldCA9IDA7IG9mZnNldCA8IHBvaW50c0xlbiAmJiBudWRnZWQ7IG9mZnNldCArPSAyKSB7CisgICAgaW50IHggPSAoaW50KSBwb2ludHNbb2Zmc2V0XTsKKyAgICBpbnQgeSA9IChpbnQpIHBvaW50c1tvZmZzZXQgKyAxXTsKKyAgICBpZiAoeCA8IC0xIHx8IHggPiB3aWR0aCB8fCB5IDwgLTEgfHwgeSA+IGhlaWdodCkgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgbnVkZ2VkID0gTk87CisgICAgaWYgKHggPT0gLTEpIHsKKyAgICAgIHBvaW50c1tvZmZzZXRdID0gMC4wZjsKKyAgICAgIG51ZGdlZCA9IFlFUzsKKyAgICB9IGVsc2UgaWYgKHggPT0gd2lkdGgpIHsKKyAgICAgIHBvaW50c1tvZmZzZXRdID0gd2lkdGggLSAxOworICAgICAgbnVkZ2VkID0gWUVTOworICAgIH0KKyAgICBpZiAoeSA9PSAtMSkgeworICAgICAgcG9pbnRzW29mZnNldCArIDFdID0gMC4wZjsKKyAgICAgIG51ZGdlZCA9IFlFUzsKKyAgICB9IGVsc2UgaWYgKHkgPT0gaGVpZ2h0KSB7CisgICAgICBwb2ludHNbb2Zmc2V0ICsgMV0gPSBoZWlnaHQgLSAxOworICAgICAgbnVkZ2VkID0gWUVTOworICAgIH0KKyAgfQorCisgIG51ZGdlZCA9IFlFUzsKKyAgZm9yIChpbnQgb2Zmc2V0ID0gcG9pbnRzTGVuIC0gMjsgb2Zmc2V0ID49IDAgJiYgbnVkZ2VkOyBvZmZzZXQgLT0gMikgeworICAgIGludCB4ID0gKGludCkgcG9pbnRzW29mZnNldF07CisgICAgaW50IHkgPSAoaW50KSBwb2ludHNbb2Zmc2V0ICsgMV07CisgICAgaWYgKHggPCAtMSB8fCB4ID4gd2lkdGggfHwgeSA8IC0xIHx8IHkgPiBoZWlnaHQpIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIG51ZGdlZCA9IE5POworICAgIGlmICh4ID09IC0xKSB7CisgICAgICBwb2ludHNbb2Zmc2V0XSA9IDAuMGY7CisgICAgICBudWRnZWQgPSBZRVM7CisgICAgfSBlbHNlIGlmICh4ID09IHdpZHRoKSB7CisgICAgICBwb2ludHNbb2Zmc2V0XSA9IHdpZHRoIC0gMTsKKyAgICAgIG51ZGdlZCA9IFlFUzsKKyAgICB9CisgICAgaWYgKHkgPT0gLTEpIHsKKyAgICAgIHBvaW50c1tvZmZzZXQgKyAxXSA9IDAuMGY7CisgICAgICBudWRnZWQgPSBZRVM7CisgICAgfSBlbHNlIGlmICh5ID09IGhlaWdodCkgeworICAgICAgcG9pbnRzW29mZnNldCArIDFdID0gaGVpZ2h0IC0gMTsKKyAgICAgIG51ZGdlZCA9IFlFUzsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFlFUzsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9aWEh5YnJpZEJpbmFyaXplci5oIGIvWlhpbmdPYmpDL2NvbW1vbi9aWEh5YnJpZEJpbmFyaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNzIzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL1pYSHlicmlkQmluYXJpemVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIuaCIKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBsb2NhbCB0aHJlc2hvbGRpbmcgYWxnb3JpdGhtLCB3aGljaCB3aGlsZSBzbG93ZXIgdGhhbiB0aGUKKyAqIFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyLCBpcyBmYWlybHkgZWZmaWNpZW50IGZvciB3aGF0IGl0IGRvZXMuIEl0IGlzIGRlc2lnbmVkIGZvcgorICogaGlnaCBmcmVxdWVuY3kgaW1hZ2VzIG9mIGJhcmNvZGVzIHdpdGggYmxhY2sgZGF0YSBvbiB3aGl0ZSBiYWNrZ3JvdW5kcy4gRm9yIHRoaXMgYXBwbGljYXRpb24sCisgKiBpdCBkb2VzIGEgbXVjaCBiZXR0ZXIgam9iIHRoYW4gYSBnbG9iYWwgYmxhY2twb2ludCB3aXRoIHNldmVyZSBzaGFkb3dzIGFuZCBncmFkaWVudHMuCisgKiBIb3dldmVyIGl0IHRlbmRzIHRvIHByb2R1Y2UgYXJ0aWZhY3RzIG9uIGxvd2VyIGZyZXF1ZW5jeSBpbWFnZXMgYW5kIGlzIHRoZXJlZm9yZSBub3QKKyAqIGEgZ29vZCBnZW5lcmFsIHB1cnBvc2UgYmluYXJpemVyIGZvciB1c2VzIG91dHNpZGUgWlhpbmcuCisgKiAKKyAqIFRoaXMgY2xhc3MgZXh0ZW5kcyBaWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplciwgdXNpbmcgdGhlIG9sZGVyIGhpc3RvZ3JhbSBhcHByb2FjaCBmb3IgMUQgcmVhZGVycywKKyAqIGFuZCB0aGUgbmV3ZXIgbG9jYWwgYXBwcm9hY2ggZm9yIDJEIHJlYWRlcnMuIDFEIGRlY29kaW5nIHVzaW5nIGEgcGVyLXJvdyBoaXN0b2dyYW0gaXMgYWxyZWFkeQorICogaW5oZXJlbnRseSBsb2NhbCwgYW5kIG9ubHkgZmFpbHMgZm9yIGhvcml6b250YWwgZ3JhZGllbnRzLiBXZSBjYW4gcmV2aXNpdCB0aGF0IHByb2JsZW0gbGF0ZXIsCisgKiBidXQgZm9yIG5vdyBpdCB3YXMgbm90IGEgd2luIHRvIHVzZSBsb2NhbCBibG9ja3MgZm9yIDFELgorICogCisgKiBUaGlzIEJpbmFyaXplciBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlIHVuaXQgdGVzdHMgYW5kIHRoZSByZWNvbW1lbmRlZCBjbGFzcyBmb3IgbGlicmFyeSB1c2Vycy4KKyAqLworCitAY2xhc3MgWlhCaW5hcml6ZXIsIFpYQml0TWF0cml4LCBaWEx1bWluYW5jZVNvdXJjZTsKKworQGludGVyZmFjZSBaWEh5YnJpZEJpbmFyaXplciA6IFpYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vWlhIeWJyaWRCaW5hcml6ZXIubSBiL1pYaW5nT2JqQy9jb21tb24vWlhIeWJyaWRCaW5hcml6ZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTkwZDVlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9aWEh5YnJpZEJpbmFyaXplci5tCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEh5YnJpZEJpbmFyaXplci5oIgorCisvLyBUaGlzIGNsYXNzIHVzZXMgNXg1IGJsb2NrcyB0byBjb21wdXRlIGxvY2FsIGx1bWluYW5jZSwgd2hlcmUgZWFjaCBibG9jayBpcyA4eDggcGl4ZWxzLgorLy8gU28gdGhpcyBpcyB0aGUgc21hbGxlc3QgZGltZW5zaW9uIGluIGVhY2ggYXhpcyB3ZSBjYW4gYWNjZXB0LgorY29uc3QgaW50IEJMT0NLX1NJWkVfUE9XRVIgPSAzOworY29uc3QgaW50IEJMT0NLX1NJWkUgPSAxIDw8IEJMT0NLX1NJWkVfUE9XRVI7IC8vIC4uLjAxMDAuLi4wMAorY29uc3QgaW50IEJMT0NLX1NJWkVfTUFTSyA9IEJMT0NLX1NJWkUgLSAxOyAgIC8vIC4uLjAwMTEuLi4xMQorY29uc3QgaW50IE1JTklNVU1fRElNRU5TSU9OID0gQkxPQ0tfU0laRSAqIDU7Citjb25zdCBpbnQgTUlOX0RZTkFNSUNfUkFOR0UgPSAyNDsKKworQGludGVyZmFjZSBaWEh5YnJpZEJpbmFyaXplciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWEJpdE1hdHJpeCAqbWF0cml4OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEh5YnJpZEJpbmFyaXplcgorCisvKioKKyAqIENhbGN1bGF0ZXMgdGhlIGZpbmFsIEJpdE1hdHJpeCBvbmNlIGZvciBhbGwgcmVxdWVzdHMuIFRoaXMgY291bGQgYmUgY2FsbGVkIG9uY2UgZnJvbSB0aGUKKyAqIGNvbnN0cnVjdG9yIGluc3RlYWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBhZHZhbnRhZ2VzIHRvIGRvaW5nIGl0IGxhemlseSwgc3VjaCBhcyBtYWtpbmcKKyAqIHByb2ZpbGluZyBlYXNpZXIsIGFuZCBub3QgZG9pbmcgaGVhdnkgbGlmdGluZyB3aGVuIGNhbGxlcnMgZG9uJ3QgZXhwZWN0IGl0LgorICovCistIChaWEJpdE1hdHJpeCAqKWJsYWNrTWF0cml4V2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKHNlbGYubWF0cml4ICE9IG5pbCkgeworICAgIHJldHVybiBzZWxmLm1hdHJpeDsKKyAgfQorICBaWEx1bWluYW5jZVNvdXJjZSAqc291cmNlID0gW3NlbGYgbHVtaW5hbmNlU291cmNlXTsKKyAgaW50IHdpZHRoID0gc291cmNlLndpZHRoOworICBpbnQgaGVpZ2h0ID0gc291cmNlLmhlaWdodDsKKyAgaWYgKHdpZHRoID49IE1JTklNVU1fRElNRU5TSU9OICYmIGhlaWdodCA+PSBNSU5JTVVNX0RJTUVOU0lPTikgeworICAgIGludDhfdCAqX2x1bWluYW5jZXMgPSBzb3VyY2UubWF0cml4OworICAgIGludCBzdWJXaWR0aCA9IHdpZHRoID4+IEJMT0NLX1NJWkVfUE9XRVI7CisgICAgaWYgKCh3aWR0aCAmIEJMT0NLX1NJWkVfTUFTSykgIT0gMCkgeworICAgICAgc3ViV2lkdGgrKzsKKyAgICB9CisgICAgaW50IHN1YkhlaWdodCA9IGhlaWdodCA+PiBCTE9DS19TSVpFX1BPV0VSOworICAgIGlmICgoaGVpZ2h0ICYgQkxPQ0tfU0laRV9NQVNLKSAhPSAwKSB7CisgICAgICBzdWJIZWlnaHQrKzsKKyAgICB9CisgICAgaW50ICoqYmxhY2tQb2ludHMgPSBbc2VsZiBjYWxjdWxhdGVCbGFja1BvaW50czpfbHVtaW5hbmNlcyBzdWJXaWR0aDpzdWJXaWR0aCBzdWJIZWlnaHQ6c3ViSGVpZ2h0IHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHRdOworCisgICAgWlhCaXRNYXRyaXggKm5ld01hdHJpeCA9IFtbWlhCaXRNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6d2lkdGggaGVpZ2h0OmhlaWdodF07CisgICAgW3NlbGYgY2FsY3VsYXRlVGhyZXNob2xkRm9yQmxvY2s6X2x1bWluYW5jZXMgc3ViV2lkdGg6c3ViV2lkdGggc3ViSGVpZ2h0OnN1YkhlaWdodCB3aWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0IGJsYWNrUG9pbnRzOmJsYWNrUG9pbnRzIG1hdHJpeDpuZXdNYXRyaXhdOworICAgIHNlbGYubWF0cml4ID0gbmV3TWF0cml4OworCisgICAgZnJlZShfbHVtaW5hbmNlcyk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1YkhlaWdodDsgaSsrKSB7CisgICAgICBmcmVlKGJsYWNrUG9pbnRzW2ldKTsKKyAgICB9CisgICAgZnJlZShibGFja1BvaW50cyk7CisgIH0gZWxzZSB7CisgICAgLy8gSWYgdGhlIGltYWdlIGlzIHRvbyBzbWFsbCwgZmFsbCBiYWNrIHRvIHRoZSBnbG9iYWwgaGlzdG9ncmFtIGFwcHJvYWNoLgorICAgIHNlbGYubWF0cml4ID0gW3N1cGVyIGJsYWNrTWF0cml4V2l0aEVycm9yOmVycm9yXTsKKyAgfQorICByZXR1cm4gc2VsZi5tYXRyaXg7Cit9CisKKy0gKFpYQmluYXJpemVyICopY3JlYXRlQmluYXJpemVyOihaWEx1bWluYW5jZVNvdXJjZSAqKXNvdXJjZSB7CisgIHJldHVybiBbW1pYSHlicmlkQmluYXJpemVyIGFsbG9jXSBpbml0V2l0aFNvdXJjZTpzb3VyY2VdOworfQorCisvKioKKyAqIEZvciBlYWNoIGJsb2NrIGluIHRoZSBpbWFnZSwgY2FsY3VsYXRlIHRoZSBhdmVyYWdlIGJsYWNrIHBvaW50IHVzaW5nIGEgNXg1IGdyaWQKKyAqIG9mIHRoZSBibG9ja3MgYXJvdW5kIGl0LiBBbHNvIGhhbmRsZXMgdGhlIGNvcm5lciBjYXNlcyAoZnJhY3Rpb25hbCBibG9ja3MgYXJlIGNvbXB1dGVkIGJhc2VkCisgKiBvbiB0aGUgbGFzdCBwaXhlbHMgaW4gdGhlIHJvdy9jb2x1bW4gd2hpY2ggYXJlIGFsc28gdXNlZCBpbiB0aGUgcHJldmlvdXMgYmxvY2spLgorICovCistICh2b2lkKWNhbGN1bGF0ZVRocmVzaG9sZEZvckJsb2NrOihpbnQ4X3QgKilsdW1pbmFuY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YldpZHRoOihpbnQpc3ViV2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJIZWlnaHQ6KGludClzdWJIZWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6KGludCl3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDooaW50KWhlaWdodAorICAgICAgICAgICAgICAgICAgICAgICBibGFja1BvaW50czooaW50ICoqKWJsYWNrUG9pbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4OihaWEJpdE1hdHJpeCAqKW1hdHJpeCB7CisgIGZvciAoaW50IHkgPSAwOyB5IDwgc3ViSGVpZ2h0OyB5KyspIHsKKyAgICBpbnQgeW9mZnNldCA9IHkgPDwgQkxPQ0tfU0laRV9QT1dFUjsKKyAgICBpbnQgbWF4WU9mZnNldCA9IGhlaWdodCAtIEJMT0NLX1NJWkU7CisgICAgaWYgKHlvZmZzZXQgPiBtYXhZT2Zmc2V0KSB7CisgICAgICB5b2Zmc2V0ID0gbWF4WU9mZnNldDsKKyAgICB9CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBzdWJXaWR0aDsgeCsrKSB7CisgICAgICBpbnQgeG9mZnNldCA9IHggPDwgQkxPQ0tfU0laRV9QT1dFUjsKKyAgICAgIGludCBtYXhYT2Zmc2V0ID0gd2lkdGggLSBCTE9DS19TSVpFOworICAgICAgaWYgKHhvZmZzZXQgPiBtYXhYT2Zmc2V0KSB7CisgICAgICAgIHhvZmZzZXQgPSBtYXhYT2Zmc2V0OworICAgICAgfQorICAgICAgaW50IGxlZnQgPSBbc2VsZiBjYXA6eCBtaW46MiBtYXg6c3ViV2lkdGggLSAzXTsKKyAgICAgIGludCB0b3AgPSBbc2VsZiBjYXA6eSBtaW46MiBtYXg6c3ViSGVpZ2h0IC0gM107CisgICAgICBpbnQgc3VtID0gMDsKKyAgICAgIGZvciAoaW50IHogPSAtMjsgeiA8PSAyOyB6KyspIHsKKyAgICAgICAgaW50ICpibGFja1JvdyA9IGJsYWNrUG9pbnRzW3RvcCArIHpdOworICAgICAgICBzdW0gKz0gYmxhY2tSb3dbbGVmdCAtIDJdICsgYmxhY2tSb3dbbGVmdCAtIDFdICsgYmxhY2tSb3dbbGVmdF0gKyBibGFja1Jvd1tsZWZ0ICsgMV0gKyBibGFja1Jvd1tsZWZ0ICsgMl07CisgICAgICB9CisgICAgICBpbnQgYXZlcmFnZSA9IHN1bSAvIDI1OworICAgICAgW3NlbGYgdGhyZXNob2xkQmxvY2s6bHVtaW5hbmNlcyB4b2Zmc2V0OnhvZmZzZXQgeW9mZnNldDp5b2Zmc2V0IHRocmVzaG9sZDphdmVyYWdlIHN0cmlkZTp3aWR0aCBtYXRyaXg6bWF0cml4XTsKKyAgICB9CisgIH0KK30KKworLSAoaW50KWNhcDooaW50KXZhbHVlIG1pbjooaW50KW1pbiBtYXg6KGludCltYXggeworICByZXR1cm4gdmFsdWUgPCBtaW4gPyBtaW4gOiB2YWx1ZSA+IG1heCA/IG1heCA6IHZhbHVlOworfQorCisvKioKKyAqIEFwcGxpZXMgYSBzaW5nbGUgdGhyZXNob2xkIHRvIGEgYmxvY2sgb2YgcGl4ZWxzLgorICovCistICh2b2lkKXRocmVzaG9sZEJsb2NrOihpbnQ4X3QgKilsdW1pbmFuY2VzCisgICAgICAgICAgICAgICB4b2Zmc2V0OihpbnQpeG9mZnNldAorICAgICAgICAgICAgICAgeW9mZnNldDooaW50KXlvZmZzZXQKKyAgICAgICAgICAgICB0aHJlc2hvbGQ6KGludCl0aHJlc2hvbGQKKyAgICAgICAgICAgICAgICBzdHJpZGU6KGludClzdHJpZGUKKyAgICAgICAgICAgICAgICBtYXRyaXg6KFpYQml0TWF0cml4ICopbWF0cml4IHsKKyAgZm9yIChpbnQgeSA9IDAsIG9mZnNldCA9IHlvZmZzZXQgKiBzdHJpZGUgKyB4b2Zmc2V0OyB5IDwgQkxPQ0tfU0laRTsgeSsrLCBvZmZzZXQgKz0gc3RyaWRlKSB7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBCTE9DS19TSVpFOyB4KyspIHsKKyAgICAgIC8vIENvbXBhcmlzb24gbmVlZHMgdG8gYmUgPD0gc28gdGhhdCBibGFjayA9PSAwIHBpeGVscyBhcmUgYmxhY2sgZXZlbiBpZiB0aGUgdGhyZXNob2xkIGlzIDAKKyAgICAgIGlmICgobHVtaW5hbmNlc1tvZmZzZXQgKyB4XSAmIDB4RkYpIDw9IHRocmVzaG9sZCkgeworICAgICAgICBbbWF0cml4IHNldFg6eG9mZnNldCArIHggeTp5b2Zmc2V0ICsgeV07CisgICAgICB9CisgICAgfQorICB9Cit9CisKKy8qKgorICogQ2FsY3VsYXRlcyBhIHNpbmdsZSBibGFjayBwb2ludCBmb3IgZWFjaCBibG9jayBvZiBwaXhlbHMgYW5kIHNhdmVzIGl0IGF3YXkuCisgKiBTZWUgdGhlIGZvbGxvd2luZyB0aHJlYWQgZm9yIGEgZGlzY3Vzc2lvbiBvZiB0aGlzIGFsZ29yaXRobToKKyAqICBodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvenhpbmcvYnJvd3NlX3RocmVhZC90aHJlYWQvZDA2ZWZhMmMzNWE3ZGRjMAorICovCistIChpbnQgKiopY2FsY3VsYXRlQmxhY2tQb2ludHM6KGludDhfdCAqKV9sdW1pbmFuY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgc3ViV2lkdGg6KGludClzdWJXaWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgc3ViSGVpZ2h0OihpbnQpc3ViSGVpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6KGludCl3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OihpbnQpaGVpZ2h0IHsKKyAgaW50ICoqYmxhY2tQb2ludHMgPSAoaW50ICoqKW1hbGxvYyhzdWJIZWlnaHQgKiBzaXplb2YoaW50ICopKTsKKyAgZm9yIChpbnQgeSA9IDA7IHkgPCBzdWJIZWlnaHQ7IHkrKykgeworICAgIGJsYWNrUG9pbnRzW3ldID0gKGludCAqKW1hbGxvYyhzdWJXaWR0aCAqIHNpemVvZihpbnQpKTsKKworICAgIGludCB5b2Zmc2V0ID0geSA8PCBCTE9DS19TSVpFX1BPV0VSOworICAgIGludCBtYXhZT2Zmc2V0ID0gaGVpZ2h0IC0gQkxPQ0tfU0laRTsKKyAgICBpZiAoeW9mZnNldCA+IG1heFlPZmZzZXQpIHsKKyAgICAgIHlvZmZzZXQgPSBtYXhZT2Zmc2V0OworICAgIH0KKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHN1YldpZHRoOyB4KyspIHsKKyAgICAgIGludCB4b2Zmc2V0ID0geCA8PCBCTE9DS19TSVpFX1BPV0VSOworICAgICAgaW50IG1heFhPZmZzZXQgPSB3aWR0aCAtIEJMT0NLX1NJWkU7CisgICAgICBpZiAoeG9mZnNldCA+IG1heFhPZmZzZXQpIHsKKyAgICAgICAgeG9mZnNldCA9IG1heFhPZmZzZXQ7CisgICAgICB9CisgICAgICBpbnQgc3VtID0gMDsKKyAgICAgIGludCBtaW4gPSAweEZGOworICAgICAgaW50IG1heCA9IDA7CisgICAgICBmb3IgKGludCB5eSA9IDAsIG9mZnNldCA9IHlvZmZzZXQgKiB3aWR0aCArIHhvZmZzZXQ7IHl5IDwgQkxPQ0tfU0laRTsgeXkrKywgb2Zmc2V0ICs9IHdpZHRoKSB7CisgICAgICAgIGZvciAoaW50IHh4ID0gMDsgeHggPCBCTE9DS19TSVpFOyB4eCsrKSB7CisgICAgICAgICAgaW50IHBpeGVsID0gX2x1bWluYW5jZXNbb2Zmc2V0ICsgeHhdICYgMHhGRjsKKyAgICAgICAgICBzdW0gKz0gcGl4ZWw7CisgICAgICAgICAgLy8gc3RpbGwgbG9va2luZyBmb3IgZ29vZCBjb250cmFzdAorICAgICAgICAgIGlmIChwaXhlbCA8IG1pbikgeworICAgICAgICAgICAgbWluID0gcGl4ZWw7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChwaXhlbCA+IG1heCkgeworICAgICAgICAgICAgbWF4ID0gcGl4ZWw7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIHNob3J0LWNpcmN1aXQgbWluL21heCB0ZXN0cyBvbmNlIGR5bmFtaWMgcmFuZ2UgaXMgbWV0CisgICAgICAgIGlmIChtYXggLSBtaW4gPiBNSU5fRFlOQU1JQ19SQU5HRSkgeworICAgICAgICAgIC8vIGZpbmlzaCB0aGUgcmVzdCBvZiB0aGUgcm93cyBxdWlja2x5CisgICAgICAgICAgZm9yICh5eSsrLCBvZmZzZXQgKz0gd2lkdGg7IHl5IDwgQkxPQ0tfU0laRTsgeXkrKywgb2Zmc2V0ICs9IHdpZHRoKSB7CisgICAgICAgICAgICBmb3IgKGludCB4eCA9IDA7IHh4IDwgQkxPQ0tfU0laRTsgeHgrKykgeworICAgICAgICAgICAgICBzdW0gKz0gX2x1bWluYW5jZXNbb2Zmc2V0ICsgeHhdICYgMHhGRjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLy8gVGhlIGRlZmF1bHQgZXN0aW1hdGUgaXMgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHZhbHVlcyBpbiB0aGUgYmxvY2suCisgICAgICBpbnQgYXZlcmFnZSA9IHN1bSA+PiAoQkxPQ0tfU0laRV9QT1dFUiAqIDIpOworICAgICAgaWYgKG1heCAtIG1pbiA8PSBNSU5fRFlOQU1JQ19SQU5HRSkgeworICAgICAgICAvLyBJZiB2YXJpYXRpb24gd2l0aGluIHRoZSBibG9jayBpcyBsb3csIGFzc3VtZSB0aGlzIGlzIGEgYmxvY2sgd2l0aCBvbmx5IGxpZ2h0IG9yIG9ubHkKKyAgICAgICAgLy8gZGFyayBwaXhlbHMuIEluIHRoYXQgY2FzZSB3ZSBkbyBub3Qgd2FudCB0byB1c2UgdGhlIGF2ZXJhZ2UsIGFzIGl0IHdvdWxkIGRpdmlkZSB0aGlzCisgICAgICAgIC8vIGxvdyBjb250cmFzdCBhcmVhIGludG8gYmxhY2sgYW5kIHdoaXRlIHBpeGVscywgZXNzZW50aWFsbHkgY3JlYXRpbmcgZGF0YSBvdXQgb2Ygbm9pc2UuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBkZWZhdWx0IGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgYmxvY2sgaXMgbGlnaHQvYmFja2dyb3VuZC4gU2luY2Ugbm8gZXN0aW1hdGUgZm9yCisgICAgICAgIC8vIHRoZSBsZXZlbCBvZiBkYXJrIHBpeGVscyBleGlzdHMgbG9jYWxseSwgdXNlIGhhbGYgdGhlIG1pbiBmb3IgdGhlIGJsb2NrLgorICAgICAgICBhdmVyYWdlID0gbWluID4+IDE7CisKKyAgICAgICAgaWYgKHkgPiAwICYmIHggPiAwKSB7CisgICAgICAgICAgLy8gQ29ycmVjdCB0aGUgIndoaXRlIGJhY2tncm91bmQiIGFzc3VtcHRpb24gZm9yIGJsb2NrcyB0aGF0IGhhdmUgbmVpZ2hib3JzIGJ5IGNvbXBhcmluZworICAgICAgICAgIC8vIHRoZSBwaXhlbHMgaW4gdGhpcyBibG9jayB0byB0aGUgcHJldmlvdXNseSBjYWxjdWxhdGVkIGJsYWNrIHBvaW50cy4gVGhpcyBpcyBiYXNlZCBvbgorICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgZGFyayBiYXJjb2RlIHN5bWJvbG9neSBpcyBhbHdheXMgc3Vycm91bmRlZCBieSBzb21lIGFtb3VudCBvZiBsaWdodAorICAgICAgICAgIC8vIGJhY2tncm91bmQgZm9yIHdoaWNoIHJlYXNvbmFibGUgYmxhY2sgcG9pbnQgZXN0aW1hdGVzIHdlcmUgbWFkZS4gVGhlIGJwIGVzdGltYXRlZCBhdAorICAgICAgICAgIC8vIHRoZSBib3VuZGFyaWVzIGlzIHVzZWQgZm9yIHRoZSBpbnRlcmlvci4KKworICAgICAgICAgIC8vIFRoZSAobWluIDwgYnApIGlzIGFyYml0cmFyeSBidXQgd29ya3MgYmV0dGVyIHRoYW4gb3RoZXIgaGV1cmlzdGljcyB0aGF0IHdlcmUgdHJpZWQuCisgICAgICAgICAgaW50IGF2ZXJhZ2VOZWlnaGJvckJsYWNrUG9pbnQgPSAoYmxhY2tQb2ludHNbeSAtIDFdW3hdICsgKDIgKiBibGFja1BvaW50c1t5XVt4IC0gMV0pICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja1BvaW50c1t5IC0gMV1beCAtIDFdKSA+PiAyOworICAgICAgICAgIGlmIChtaW4gPCBhdmVyYWdlTmVpZ2hib3JCbGFja1BvaW50KSB7CisgICAgICAgICAgICBhdmVyYWdlID0gYXZlcmFnZU5laWdoYm9yQmxhY2tQb2ludDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJsYWNrUG9pbnRzW3ldW3hdID0gYXZlcmFnZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGJsYWNrUG9pbnRzOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL1pYUGVyc3BlY3RpdmVUcmFuc2Zvcm0uaCBiL1pYaW5nT2JqQy9jb21tb24vWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZjEyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL1pYUGVyc3BlY3RpdmVUcmFuc2Zvcm0uaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHBlcnNwZWN0aXZlIHRyYW5zZm9ybSBpbiB0d28gZGltZW5zaW9ucy4gR2l2ZW4gZm91ciBzb3VyY2UgYW5kIGZvdXIKKyAqIGRlc3RpbmF0aW9uIHBvaW50cywgaXQgd2lsbCBjb21wdXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiBpbXBsaWVkIGJldHdlZW4gdGhlbS4gVGhlIGNvZGUgaXMgYmFzZWQKKyAqIGRpcmVjdGx5IHVwb24gc2VjdGlvbiAzLjQuMiBvZiBHZW9yZ2UgV29sYmVyZydzICJEaWdpdGFsIEltYWdlIFdhcnBpbmciOyBzZWUgcGFnZXMgNTQtNTYuCisgKi8KKworQGludGVyZmFjZSBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtIDogTlNPYmplY3QKKworKyAoWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSAqKXF1YWRyaWxhdGVyYWxUb1F1YWRyaWxhdGVyYWw6KGZsb2F0KXgwIHkwOihmbG9hdCl5MCB4MTooZmxvYXQpeDEgeTE6KGZsb2F0KXkxIHgyOihmbG9hdCl4MiB5MjooZmxvYXQpeTIgeDM6KGZsb2F0KXgzIHkzOihmbG9hdCl5MyB4MHA6KGZsb2F0KXgwcCB5MHA6KGZsb2F0KXkwcCB4MXA6KGZsb2F0KXgxcCB5MXA6KGZsb2F0KXkxcCB4MnA6KGZsb2F0KXgycCB5MnA6KGZsb2F0KXkycCB4M3A6KGZsb2F0KXgzcCB5M3A6KGZsb2F0KXkzcDsKKy0gKHZvaWQpdHJhbnNmb3JtUG9pbnRzOihmbG9hdCAqKXBvaW50cyBwb2ludHNMZW46KGludClwb2ludHNMZW47CistICh2b2lkKXRyYW5zZm9ybVBvaW50czooZmxvYXQgKil4VmFsdWVzIHlWYWx1ZXM6KGZsb2F0ICopeVZhbHVlcyBwb2ludHNMZW46KGludClwb2ludHNMZW47CisrIChaWFBlcnNwZWN0aXZlVHJhbnNmb3JtICopc3F1YXJlVG9RdWFkcmlsYXRlcmFsOihmbG9hdCl4MCB5MDooZmxvYXQpeTAgeDE6KGZsb2F0KXgxIHkxOihmbG9hdCl5MSB4MjooZmxvYXQpeDIgeTI6KGZsb2F0KXkyIHgzOihmbG9hdCl4MyB5MzooZmxvYXQpeTM7CisrIChaWFBlcnNwZWN0aXZlVHJhbnNmb3JtICopcXVhZHJpbGF0ZXJhbFRvU3F1YXJlOihmbG9hdCl4MCB5MDooZmxvYXQpeTAgeDE6KGZsb2F0KXgxIHkxOihmbG9hdCl5MSB4MjooZmxvYXQpeDIgeTI6KGZsb2F0KXkyIHgzOihmbG9hdCl4MyB5MzooZmxvYXQpeTM7CistIChaWFBlcnNwZWN0aXZlVHJhbnNmb3JtICopYnVpbGRBZGpvaW50OworLSAoWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSAqKXRpbWVzOihaWFBlcnNwZWN0aXZlVHJhbnNmb3JtICopb3RoZXI7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5tIGIvWlhpbmdPYmpDL2NvbW1vbi9aWFBlcnNwZWN0aXZlVHJhbnNmb3JtLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZlZDg5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5tCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFBlcnNwZWN0aXZlVHJhbnNmb3JtLmgiCisKK0BpbnRlcmZhY2UgWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBmbG9hdCBhMTE7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBmbG9hdCBhMTI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBmbG9hdCBhMTM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBmbG9hdCBhMjE7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBmbG9hdCBhMjI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBmbG9hdCBhMjM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBmbG9hdCBhMzE7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBmbG9hdCBhMzI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBmbG9hdCBhMzM7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0KKworLSAoaWQpaW5pdFdpdGhBMTE6KGZsb2F0KWExMSBhMjE6KGZsb2F0KWEyMSBhMzE6KGZsb2F0KWEzMSBhMTI6KGZsb2F0KWExMiBhMjI6KGZsb2F0KWEyMiBhMzI6KGZsb2F0KWEzMiBhMTM6KGZsb2F0KWExMyBhMjM6KGZsb2F0KWEyMyBhMzM6KGZsb2F0KWEzMyB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2ExMSA9IGExMTsKKyAgICBfYTEyID0gYTEyOworICAgIF9hMTMgPSBhMTM7CisgICAgX2EyMSA9IGEyMTsKKyAgICBfYTIyID0gYTIyOworICAgIF9hMjMgPSBhMjM7CisgICAgX2EzMSA9IGEzMTsKKyAgICBfYTMyID0gYTMyOworICAgIF9hMzMgPSBhMzM7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworKyAoWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSAqKXF1YWRyaWxhdGVyYWxUb1F1YWRyaWxhdGVyYWw6KGZsb2F0KXgwIHkwOihmbG9hdCl5MCB4MTooZmxvYXQpeDEgeTE6KGZsb2F0KXkxIHgyOihmbG9hdCl4MiB5MjooZmxvYXQpeTIgeDM6KGZsb2F0KXgzIHkzOihmbG9hdCl5MyB4MHA6KGZsb2F0KXgwcCB5MHA6KGZsb2F0KXkwcCB4MXA6KGZsb2F0KXgxcCB5MXA6KGZsb2F0KXkxcCB4MnA6KGZsb2F0KXgycCB5MnA6KGZsb2F0KXkycCB4M3A6KGZsb2F0KXgzcCB5M3A6KGZsb2F0KXkzcCB7CisgIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0gKnFUb1MgPSBbc2VsZiBxdWFkcmlsYXRlcmFsVG9TcXVhcmU6eDAgeTA6eTAgeDE6eDEgeTE6eTEgeDI6eDIgeTI6eTIgeDM6eDMgeTM6eTNdOworICBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtICpzVG9RID0gW3NlbGYgc3F1YXJlVG9RdWFkcmlsYXRlcmFsOngwcCB5MDp5MHAgeDE6eDFwIHkxOnkxcCB4Mjp4MnAgeTI6eTJwIHgzOngzcCB5Mzp5M3BdOworICByZXR1cm4gW3NUb1EgdGltZXM6cVRvU107Cit9CisKKy0gKHZvaWQpdHJhbnNmb3JtUG9pbnRzOihmbG9hdCAqKXBvaW50cyBwb2ludHNMZW46KGludClwb2ludHNMZW4geworICBpbnQgbWF4ID0gcG9pbnRzTGVuOworICBmb3IgKGludCBpID0gMDsgaSA8IG1heDsgaSArPSAyKSB7CisgICAgZmxvYXQgeCA9IHBvaW50c1tpXTsKKyAgICBmbG9hdCB5ID0gcG9pbnRzW2kgKyAxXTsKKyAgICBmbG9hdCBkZW5vbWluYXRvciA9IHNlbGYuYTEzICogeCArIHNlbGYuYTIzICogeSArIHNlbGYuYTMzOworICAgIHBvaW50c1tpXSA9IChzZWxmLmExMSAqIHggKyBzZWxmLmEyMSAqIHkgKyBzZWxmLmEzMSkgLyBkZW5vbWluYXRvcjsKKyAgICBwb2ludHNbaSArIDFdID0gKHNlbGYuYTEyICogeCArIHNlbGYuYTIyICogeSArIHNlbGYuYTMyKSAvIGRlbm9taW5hdG9yOworICB9Cit9CisKKy8qKgorICogQ29udmVuaWVuY2UgbWV0aG9kLCBub3Qgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZS4KKyAqLworLSAodm9pZCl0cmFuc2Zvcm1Qb2ludHM6KGZsb2F0ICopeFZhbHVlcyB5VmFsdWVzOihmbG9hdCAqKXlWYWx1ZXMgcG9pbnRzTGVuOihpbnQpcG9pbnRzTGVuIHsKKyAgaW50IG4gPSBwb2ludHNMZW47CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArKykgeworICAgIGZsb2F0IHggPSB4VmFsdWVzW2ldOworICAgIGZsb2F0IHkgPSB5VmFsdWVzW2ldOworICAgIGZsb2F0IGRlbm9taW5hdG9yID0gc2VsZi5hMTMgKiB4ICsgc2VsZi5hMjMgKiB5ICsgc2VsZi5hMzM7CisgICAgeFZhbHVlc1tpXSA9IChzZWxmLmExMSAqIHggKyBzZWxmLmEyMSAqIHkgKyBzZWxmLmEzMSkgLyBkZW5vbWluYXRvcjsKKyAgICB5VmFsdWVzW2ldID0gKHNlbGYuYTEyICogeCArIHNlbGYuYTIyICogeSArIHNlbGYuYTMyKSAvIGRlbm9taW5hdG9yOworICB9Cit9CisKKysgKFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0gKilzcXVhcmVUb1F1YWRyaWxhdGVyYWw6KGZsb2F0KXgwIHkwOihmbG9hdCl5MCB4MTooZmxvYXQpeDEgeTE6KGZsb2F0KXkxIHgyOihmbG9hdCl4MiB5MjooZmxvYXQpeTIgeDM6KGZsb2F0KXgzIHkzOihmbG9hdCl5MyB7CisgIGZsb2F0IGR4MyA9IHgwIC0geDEgKyB4MiAtIHgzOworICBmbG9hdCBkeTMgPSB5MCAtIHkxICsgeTIgLSB5MzsKKyAgaWYgKGR4MyA9PSAwLjBmICYmIGR5MyA9PSAwLjBmKSB7CisgICAgLy8gQWZmaW5lCisgICAgcmV0dXJuIFtbWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSBhbGxvY10gaW5pdFdpdGhBMTE6eDEgLSB4MCBhMjE6eDIgLSB4MSBhMzE6eDAgYTEyOnkxIC0geTAgYTIyOnkyIC0geTEgYTMyOnkwIGExMzowLjBmIGEyMzowLjBmIGEzMzoxLjBmXTsKKyAgfSBlbHNlIHsKKyAgICBmbG9hdCBkeDEgPSB4MSAtIHgyOworICAgIGZsb2F0IGR4MiA9IHgzIC0geDI7CisgICAgZmxvYXQgZHkxID0geTEgLSB5MjsKKyAgICBmbG9hdCBkeTIgPSB5MyAtIHkyOworICAgIGZsb2F0IGRlbm9taW5hdG9yID0gZHgxICogZHkyIC0gZHgyICogZHkxOworICAgIGZsb2F0IGExMyA9IChkeDMgKiBkeTIgLSBkeDIgKiBkeTMpIC8gZGVub21pbmF0b3I7CisgICAgZmxvYXQgYTIzID0gKGR4MSAqIGR5MyAtIGR4MyAqIGR5MSkgLyBkZW5vbWluYXRvcjsKKyAgICByZXR1cm4gW1taWFBlcnNwZWN0aXZlVHJhbnNmb3JtIGFsbG9jXSBpbml0V2l0aEExMTp4MSAtIHgwICsgYTEzICogeDEgYTIxOngzIC0geDAgKyBhMjMgKiB4MyBhMzE6eDAgYTEyOnkxIC0geTAgKyBhMTMgKiB5MSBhMjI6eTMgLSB5MCArIGEyMyAqIHkzIGEzMjp5MCBhMTM6YTEzIGEyMzphMjMgYTMzOjEuMGZdOworICB9Cit9CisKKysgKFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0gKilxdWFkcmlsYXRlcmFsVG9TcXVhcmU6KGZsb2F0KXgwIHkwOihmbG9hdCl5MCB4MTooZmxvYXQpeDEgeTE6KGZsb2F0KXkxIHgyOihmbG9hdCl4MiB5MjooZmxvYXQpeTIgeDM6KGZsb2F0KXgzIHkzOihmbG9hdCl5MyB7CisgIHJldHVybiBbW3NlbGYgc3F1YXJlVG9RdWFkcmlsYXRlcmFsOngwIHkwOnkwIHgxOngxIHkxOnkxIHgyOngyIHkyOnkyIHgzOngzIHkzOnkzXSBidWlsZEFkam9pbnRdOworfQorCistIChaWFBlcnNwZWN0aXZlVHJhbnNmb3JtICopYnVpbGRBZGpvaW50IHsKKyAgcmV0dXJuIFtbWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSBhbGxvY10gaW5pdFdpdGhBMTE6c2VsZi5hMjIgKiBzZWxmLmEzMyAtIHNlbGYuYTIzICogc2VsZi5hMzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMjE6c2VsZi5hMjMgKiBzZWxmLmEzMSAtIHNlbGYuYTIxICogc2VsZi5hMzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMzE6c2VsZi5hMjEgKiBzZWxmLmEzMiAtIHNlbGYuYTIyICogc2VsZi5hMzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMTI6c2VsZi5hMTMgKiBzZWxmLmEzMiAtIHNlbGYuYTEyICogc2VsZi5hMzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMjI6c2VsZi5hMTEgKiBzZWxmLmEzMyAtIHNlbGYuYTEzICogc2VsZi5hMzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMzI6c2VsZi5hMTIgKiBzZWxmLmEzMSAtIHNlbGYuYTExICogc2VsZi5hMzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMTM6c2VsZi5hMTIgKiBzZWxmLmEyMyAtIHNlbGYuYTEzICogc2VsZi5hMjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMjM6c2VsZi5hMTMgKiBzZWxmLmEyMSAtIHNlbGYuYTExICogc2VsZi5hMjMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMzM6c2VsZi5hMTEgKiBzZWxmLmEyMiAtIHNlbGYuYTEyICogc2VsZi5hMjFdOworfQorCistIChaWFBlcnNwZWN0aXZlVHJhbnNmb3JtICopdGltZXM6KFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0gKilvdGhlciB7CisgIHJldHVybiBbW1pYUGVyc3BlY3RpdmVUcmFuc2Zvcm0gYWxsb2NdIGluaXRXaXRoQTExOnNlbGYuYTExICogb3RoZXIuYTExICsgc2VsZi5hMjEgKiBvdGhlci5hMTIgKyBzZWxmLmEzMSAqIG90aGVyLmExMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEyMTpzZWxmLmExMSAqIG90aGVyLmEyMSArIHNlbGYuYTIxICogb3RoZXIuYTIyICsgc2VsZi5hMzEgKiBvdGhlci5hMjMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMzE6c2VsZi5hMTEgKiBvdGhlci5hMzEgKyBzZWxmLmEyMSAqIG90aGVyLmEzMiArIHNlbGYuYTMxICogb3RoZXIuYTMzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTEyOnNlbGYuYTEyICogb3RoZXIuYTExICsgc2VsZi5hMjIgKiBvdGhlci5hMTIgKyBzZWxmLmEzMiAqIG90aGVyLmExMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEyMjpzZWxmLmExMiAqIG90aGVyLmEyMSArIHNlbGYuYTIyICogb3RoZXIuYTIyICsgc2VsZi5hMzIgKiBvdGhlci5hMjMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMzI6c2VsZi5hMTIgKiBvdGhlci5hMzEgKyBzZWxmLmEyMiAqIG90aGVyLmEzMiArIHNlbGYuYTMyICogb3RoZXIuYTMzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTEzOnNlbGYuYTEzICogb3RoZXIuYTExICsgc2VsZi5hMjMgKiBvdGhlci5hMTIgKyBzZWxmLmEzMyAqIG90aGVyLmExMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEyMzpzZWxmLmExMyAqIG90aGVyLmEyMSArIHNlbGYuYTIzICogb3RoZXIuYTIyICsgc2VsZi5hMzMgKiBvdGhlci5hMjMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMzM6c2VsZi5hMTMgKiBvdGhlci5hMzEgKyBzZWxmLmEyMyAqIG90aGVyLmEzMiArIHNlbGYuYTMzICogb3RoZXIuYTMzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9aWFN0cmluZ1V0aWxzLmggYi9aWGluZ09iakMvY29tbW9uL1pYU3RyaW5nVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmIwZTgxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9aWFN0cmluZ1V0aWxzLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBDb21tb24gc3RyaW5nLXJlbGF0ZWQgZnVuY3Rpb25zLgorICovCisKK0BjbGFzcyBaWERlY29kZUhpbnRzOworCitAaW50ZXJmYWNlIFpYU3RyaW5nVXRpbHMgOiBOU09iamVjdAorCisrIChOU1N0cmluZ0VuY29kaW5nKWd1ZXNzRW5jb2Rpbmc6KGludDhfdCAqKWJ5dGVzIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL1pYU3RyaW5nVXRpbHMubSBiL1pYaW5nT2JqQy9jb21tb24vWlhTdHJpbmdVdGlscy5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTE1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL1pYU3RyaW5nVXRpbHMubQpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhEZWNvZGVIaW50cy5oIgorI2ltcG9ydCAiWlhTdHJpbmdVdGlscy5oIgorCitAaW1wbGVtZW50YXRpb24gWlhTdHJpbmdVdGlscworCisrIChOU1N0cmluZ0VuY29kaW5nKWd1ZXNzRW5jb2Rpbmc6KGludDhfdCAqKWJ5dGVzIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIHsKKyAgQk9PTCBhc3N1bWVTaGlmdEpJUyA9IENGU3RyaW5nR2V0U3lzdGVtRW5jb2RpbmcoKSA9PSBOU1NoaWZ0SklTU3RyaW5nRW5jb2RpbmcgfHwgQ0ZTdHJpbmdHZXRTeXN0ZW1FbmNvZGluZygpID09IE5TSmFwYW5lc2VFVUNTdHJpbmdFbmNvZGluZzsKKyAgCisgIGlmIChoaW50cyAhPSBuaWwpIHsKKyAgICBOU1N0cmluZ0VuY29kaW5nIGVuY29kaW5nID0gaGludHMuZW5jb2Rpbmc7CisgICAgaWYgKGVuY29kaW5nID4gMCkgeworICAgICAgcmV0dXJuIGVuY29kaW5nOworICAgIH0KKyAgfQorICAvLyBGb3Igbm93LCBtZXJlbHkgdHJpZXMgdG8gZGlzdGluZ3Vpc2ggSVNPLTg4NTktMSwgVVRGLTggYW5kIFNoaWZ0X0pJUywKKyAgLy8gd2hpY2ggc2hvdWxkIGJlIGJ5IGZhciB0aGUgbW9zdCBjb21tb24gZW5jb2RpbmdzLgorICBCT09MIGNhbkJlSVNPODg1OTEgPSBZRVM7CisgIEJPT0wgY2FuQmVTaGlmdEpJUyA9IFlFUzsKKyAgQk9PTCBjYW5CZVVURjggPSBZRVM7CisgIGludCB1dGY4Qnl0ZXNMZWZ0ID0gMDsKKyAgLy9pbnQgdXRmOExvd0NoYXJzID0gMDsKKyAgaW50IHV0ZjJCeXRlc0NoYXJzID0gMDsKKyAgaW50IHV0ZjNCeXRlc0NoYXJzID0gMDsKKyAgaW50IHV0ZjRCeXRlc0NoYXJzID0gMDsKKyAgaW50IHNqaXNCeXRlc0xlZnQgPSAwOworICAvL2ludCBzamlzTG93Q2hhcnMgPSAwOworICBpbnQgc2ppc0thdGFrYW5hQ2hhcnMgPSAwOworICAvL2ludCBzamlzRG91YmxlQnl0ZXNDaGFycyA9IDA7CisgIGludCBzamlzQ3VyS2F0YWthbmFXb3JkTGVuZ3RoID0gMDsKKyAgaW50IHNqaXNDdXJEb3VibGVCeXRlc1dvcmRMZW5ndGggPSAwOworICBpbnQgc2ppc01heEthdGFrYW5hV29yZExlbmd0aCA9IDA7CisgIGludCBzamlzTWF4RG91YmxlQnl0ZXNXb3JkTGVuZ3RoID0gMDsKKyAgLy9pbnQgaXNvTG93Q2hhcnMgPSAwOworICAvL2ludCBpc29IaWdoQ2hhcnMgPSAwOworICBpbnQgaXNvSGlnaE90aGVyID0gMDsKKworICBCT09MIHV0Zjhib20gPSBsZW5ndGggPiAzICYmCisgICAgYnl0ZXNbMF0gPT0gKGludDhfdCkgMHhFRiAmJgorICAgIGJ5dGVzWzFdID09IChpbnQ4X3QpIDB4QkIgJiYKKyAgICBieXRlc1syXSA9PSAoaW50OF90KSAweEJGOworCisgIGZvciAoaW50IGkgPSAwOworICAgICAgIGkgPCBsZW5ndGggJiYgKGNhbkJlSVNPODg1OTEgfHwgY2FuQmVTaGlmdEpJUyB8fCBjYW5CZVVURjgpOworICAgICAgIGkrKykgeworCisgICAgaW50IHZhbHVlID0gYnl0ZXNbaV0gJiAweEZGOworCisgICAgLy8gVVRGLTggc3R1ZmYKKyAgICBpZiAoY2FuQmVVVEY4KSB7CisgICAgICBpZiAodXRmOEJ5dGVzTGVmdCA+IDApIHsKKyAgICAgICAgaWYgKCh2YWx1ZSAmIDB4ODApID09IDApIHsKKyAgICAgICAgICBjYW5CZVVURjggPSBOTzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB1dGY4Qnl0ZXNMZWZ0LS07CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoKHZhbHVlICYgMHg4MCkgIT0gMCkgeworICAgICAgICBpZiAoKHZhbHVlICYgMHg0MCkgPT0gMCkgeworICAgICAgICAgIGNhbkJlVVRGOCA9IE5POworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHV0ZjhCeXRlc0xlZnQrKzsKKyAgICAgICAgICBpZiAoKHZhbHVlICYgMHgyMCkgPT0gMCkgeworICAgICAgICAgICAgdXRmMkJ5dGVzQ2hhcnMrKzsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdXRmOEJ5dGVzTGVmdCsrOworICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIDB4MTApID09IDApIHsKKyAgICAgICAgICAgICAgdXRmM0J5dGVzQ2hhcnMrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHV0ZjhCeXRlc0xlZnQrKzsKKyAgICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIDB4MDgpID09IDApIHsKKyAgICAgICAgICAgICAgICB1dGY0Qnl0ZXNDaGFycysrOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNhbkJlVVRGOCA9IE5POworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IC8vZWxzZSB7CisgICAgICAvL3V0ZjhMb3dDaGFycysrOworICAgICAgLy99CisgICAgfQorCisgICAgLy8gSVNPLTg4NTktMSBzdHVmZgorICAgIGlmIChjYW5CZUlTTzg4NTkxKSB7CisgICAgICBpZiAodmFsdWUgPiAweDdGICYmIHZhbHVlIDwgMHhBMCkgeworICAgICAgICBjYW5CZUlTTzg4NTkxID0gTk87CisgICAgICB9IGVsc2UgaWYgKHZhbHVlID4gMHg5RikgeworICAgICAgICBpZiAodmFsdWUgPCAweEMwIHx8IHZhbHVlID09IDB4RDcgfHwgdmFsdWUgPT0gMHhGNykgeworICAgICAgICAgIGlzb0hpZ2hPdGhlcisrOworICAgICAgICB9IC8vZWxzZSB7CisgICAgICAgIC8vaXNvSGlnaENoYXJzKys7CisgICAgICAgIC8vfQorICAgICAgfSAvL2Vsc2UgeworICAgICAgLy9pc29Mb3dDaGFycysrOworICAgICAgLy99CisgICAgfQorCisgICAgLy8gU2hpZnRfSklTIHN0dWZmCisgICAgaWYgKGNhbkJlU2hpZnRKSVMpIHsKKyAgICAgIGlmIChzamlzQnl0ZXNMZWZ0ID4gMCkgeworICAgICAgICBpZiAodmFsdWUgPCAweDQwIHx8IHZhbHVlID09IDB4N0YgfHwgdmFsdWUgPiAweEZDKSB7CisgICAgICAgICAgY2FuQmVTaGlmdEpJUyA9IE5POworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNqaXNCeXRlc0xlZnQtLTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAweDgwIHx8IHZhbHVlID09IDB4QTAgfHwgdmFsdWUgPiAweEVGKSB7CisgICAgICAgIGNhbkJlU2hpZnRKSVMgPSBOTzsKKyAgICAgIH0gZWxzZSBpZiAodmFsdWUgPiAweEEwICYmIHZhbHVlIDwgMHhFMCkgeworICAgICAgICBzamlzS2F0YWthbmFDaGFycysrOworICAgICAgICBzamlzQ3VyRG91YmxlQnl0ZXNXb3JkTGVuZ3RoID0gMDsKKyAgICAgICAgc2ppc0N1ckthdGFrYW5hV29yZExlbmd0aCsrOworICAgICAgICBpZiAoc2ppc0N1ckthdGFrYW5hV29yZExlbmd0aCA+IHNqaXNNYXhLYXRha2FuYVdvcmRMZW5ndGgpIHsKKyAgICAgICAgICBzamlzTWF4S2F0YWthbmFXb3JkTGVuZ3RoID0gc2ppc0N1ckthdGFrYW5hV29yZExlbmd0aDsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+IDB4N0YpIHsKKyAgICAgICAgc2ppc0J5dGVzTGVmdCsrOworICAgICAgICAvL3NqaXNEb3VibGVCeXRlc0NoYXJzKys7CisgICAgICAgIHNqaXNDdXJLYXRha2FuYVdvcmRMZW5ndGggPSAwOworICAgICAgICBzamlzQ3VyRG91YmxlQnl0ZXNXb3JkTGVuZ3RoKys7CisgICAgICAgIGlmIChzamlzQ3VyRG91YmxlQnl0ZXNXb3JkTGVuZ3RoID4gc2ppc01heERvdWJsZUJ5dGVzV29yZExlbmd0aCkgeworICAgICAgICAgIHNqaXNNYXhEb3VibGVCeXRlc1dvcmRMZW5ndGggPSBzamlzQ3VyRG91YmxlQnl0ZXNXb3JkTGVuZ3RoOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAvL3NqaXNMb3dDaGFycysrOworICAgICAgICBzamlzQ3VyS2F0YWthbmFXb3JkTGVuZ3RoID0gMDsKKyAgICAgICAgc2ppc0N1ckRvdWJsZUJ5dGVzV29yZExlbmd0aCA9IDA7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKGNhbkJlVVRGOCAmJiB1dGY4Qnl0ZXNMZWZ0ID4gMCkgeworICAgIGNhbkJlVVRGOCA9IE5POworICB9CisgIGlmIChjYW5CZVNoaWZ0SklTICYmIHNqaXNCeXRlc0xlZnQgPiAwKSB7CisgICAgY2FuQmVTaGlmdEpJUyA9IE5POworICB9CisKKyAgLy8gRWFzeSAtLSBpZiB0aGVyZSBpcyBCT00gb3IgYXQgbGVhc3QgMSB2YWxpZCBub3Qtc2luZ2xlIGJ5dGUgY2hhcmFjdGVyIChhbmQgbm8gZXZpZGVuY2UgaXQgY2FuJ3QgYmUgVVRGLTgpLCBkb25lCisgIGlmIChjYW5CZVVURjggJiYgKHV0Zjhib20gfHwgdXRmMkJ5dGVzQ2hhcnMgKyB1dGYzQnl0ZXNDaGFycyArIHV0ZjRCeXRlc0NoYXJzID4gMCkpIHsKKyAgICByZXR1cm4gTlNVVEY4U3RyaW5nRW5jb2Rpbmc7CisgIH0KKyAgLy8gRWFzeSAtLSBpZiBhc3N1bWluZyBTaGlmdF9KSVMgb3IgYXQgbGVhc3QgMyB2YWxpZCBjb25zZWN1dGl2ZSBub3QtYXNjaWkgY2hhcmFjdGVycyAoYW5kIG5vIGV2aWRlbmNlIGl0IGNhbid0IGJlKSwgZG9uZQorICBpZiAoY2FuQmVTaGlmdEpJUyAmJiAoYXNzdW1lU2hpZnRKSVMgfHwgc2ppc01heEthdGFrYW5hV29yZExlbmd0aCA+PSAzIHx8IHNqaXNNYXhEb3VibGVCeXRlc1dvcmRMZW5ndGggPj0gMykpIHsKKyAgICByZXR1cm4gTlNTaGlmdEpJU1N0cmluZ0VuY29kaW5nOworICB9CisgIC8vIERpc3Rpbmd1aXNoaW5nIFNoaWZ0X0pJUyBhbmQgSVNPLTg4NTktMSBjYW4gYmUgYSBsaXR0bGUgdG91Z2ggZm9yIHNob3J0IHdvcmRzLiBUaGUgY3J1ZGUgaGV1cmlzdGljIGlzOgorICAvLyAtIElmIHdlIHNhdworICAvLyAgIC0gb25seSB0d28gY29uc2VjdXRpdmUga2F0YWthbmEgY2hhcnMgaW4gdGhlIHdob2xlIHRleHQsIG9yCisgIC8vICAgLSBhdCBsZWFzdCAxMCUgb2YgYnl0ZXMgdGhhdCBjb3VsZCBiZSAidXBwZXIiIG5vdC1hbHBoYW51bWVyaWMgTGF0aW4xLAorICAvLyAtIHRoZW4gd2UgY29uY2x1ZGUgU2hpZnRfSklTLCBlbHNlIElTTy04ODU5LTEKKyAgaWYgKGNhbkJlSVNPODg1OTEgJiYgY2FuQmVTaGlmdEpJUykgeworICAgIHJldHVybiAoc2ppc01heEthdGFrYW5hV29yZExlbmd0aCA9PSAyICYmIHNqaXNLYXRha2FuYUNoYXJzID09IDIpIHx8IGlzb0hpZ2hPdGhlciAqIDEwID49IGxlbmd0aAorICAgID8gTlNTaGlmdEpJU1N0cmluZ0VuY29kaW5nIDogTlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZzsKKyAgfQorCisgIC8vIE90aGVyd2lzZSwgdHJ5IGluIG9yZGVyIElTTy04ODU5LTEsIFNoaWZ0IEpJUywgVVRGLTggYW5kIGZhbGwgYmFjayB0byBkZWZhdWx0IHBsYXRmb3JtIGVuY29kaW5nCisgIGlmIChjYW5CZUlTTzg4NTkxKSB7CisgICAgcmV0dXJuIE5TSVNPTGF0aW4xU3RyaW5nRW5jb2Rpbmc7CisgIH0KKyAgaWYgKGNhbkJlU2hpZnRKSVMpIHsKKyAgICByZXR1cm4gTlNTaGlmdEpJU1N0cmluZ0VuY29kaW5nOworICB9CisgIGlmIChjYW5CZVVURjgpIHsKKyAgICByZXR1cm4gTlNVVEY4U3RyaW5nRW5jb2Rpbmc7CisgIH0KKyAgLy8gT3RoZXJ3aXNlLCB3ZSB0YWtlIGEgd2lsZCBndWVzcyB3aXRoIHBsYXRmb3JtIGVuY29kaW5nCisgIHJldHVybiBDRlN0cmluZ0dldFN5c3RlbUVuY29kaW5nKCk7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vZGV0ZWN0b3IvWlhNYXRoVXRpbHMuaCBiL1pYaW5nT2JqQy9jb21tb24vZGV0ZWN0b3IvWlhNYXRoVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDM4ZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9kZXRlY3Rvci9aWE1hdGhVdGlscy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BpbnRlcmZhY2UgWlhNYXRoVXRpbHMgOiBOU09iamVjdAorCisrIChpbnQpcm91bmQ6KGZsb2F0KWQ7CisrIChmbG9hdClkaXN0YW5jZTooZmxvYXQpYVggYVk6KGZsb2F0KWFZIGJYOihmbG9hdCliWCBiWTooZmxvYXQpYlk7CisrIChmbG9hdClkaXN0YW5jZUludDooaW50KWFYIGFZOihpbnQpYVkgYlg6KGludCliWCBiWTooaW50KWJZOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL2RldGVjdG9yL1pYTWF0aFV0aWxzLm0gYi9aWGluZ09iakMvY29tbW9uL2RldGVjdG9yL1pYTWF0aFV0aWxzLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNhZGJjNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vZGV0ZWN0b3IvWlhNYXRoVXRpbHMubQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWE1hdGhVdGlscy5oIgorCitAaW1wbGVtZW50YXRpb24gWlhNYXRoVXRpbHMKKworKyAoaW50KXJvdW5kOihmbG9hdClkIHsKKyAgcmV0dXJuIChpbnQpKGQgKyAwLjVmKTsKK30KKworKyAoZmxvYXQpZGlzdGFuY2U6KGZsb2F0KWFYIGFZOihmbG9hdClhWSBiWDooZmxvYXQpYlggYlk6KGZsb2F0KWJZIHsKKyAgZmxvYXQgeERpZmYgPSBhWCAtIGJYOworICBmbG9hdCB5RGlmZiA9IGFZIC0gYlk7CisgIHJldHVybiBzcXJ0Zih4RGlmZiAqIHhEaWZmICsgeURpZmYgKiB5RGlmZik7Cit9CisKKysgKGZsb2F0KWRpc3RhbmNlSW50OihpbnQpYVggYVk6KGludClhWSBiWDooaW50KWJYIGJZOihpbnQpYlkgeworICBpbnQgeERpZmYgPSBhWCAtIGJYOworICBpbnQgeURpZmYgPSBhWSAtIGJZOworICByZXR1cm4gc3FydGYoeERpZmYgKiB4RGlmZiArIHlEaWZmICogeURpZmYpOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL2RldGVjdG9yL1pYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yLmggYi9aWGluZ09iakMvY29tbW9uL2RldGVjdG9yL1pYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwMjE4YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vZGV0ZWN0b3IvWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEEgc29tZXdoYXQgZ2VuZXJpYyBkZXRlY3RvciB0aGF0IGxvb2tzIGZvciBhIGJhcmNvZGUtbGlrZSByZWN0YW5ndWxhciByZWdpb24gd2l0aGluIGFuIGltYWdlLgorICogSXQgbG9va3Mgd2l0aGluIGEgbW9zdGx5IHdoaXRlIHJlZ2lvbiBvZiBhbiBpbWFnZSBmb3IgYSByZWdpb24gb2YgYmxhY2sgYW5kIHdoaXRlLCBidXQgbW9zdGx5CisgKiBibGFjay4gSXQgcmV0dXJucyB0aGUgZm91ciBjb3JuZXJzIG9mIHRoZSByZWdpb24sIGFzIGJlc3QgaXQgY2FuIGRldGVybWluZS4KKyAqLworCitAY2xhc3MgWlhCaXRNYXRyaXg7CisKK0BpbnRlcmZhY2UgWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IgOiBOU09iamVjdAorCistIChpZClpbml0V2l0aEltYWdlOihaWEJpdE1hdHJpeCAqKWltYWdlOworLSAoTlNBcnJheSAqKWRldGVjdFdpdGhFcnJvcjooTlNFcnJvciAqKillcnJvcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9kZXRlY3Rvci9aWE1vbm9jaHJvbWVSZWN0YW5nbGVEZXRlY3Rvci5tIGIvWlhpbmdPYmpDL2NvbW1vbi9kZXRlY3Rvci9aWE1vbm9jaHJvbWVSZWN0YW5nbGVEZXRlY3Rvci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZGQzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL2RldGVjdG9yL1pYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yLm0KQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0TWF0cml4LmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhNb25vY2hyb21lUmVjdGFuZ2xlRGV0ZWN0b3IuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKworaW50IGNvbnN0IE1PTk9DSFJPTUVfTUFYX01PRFVMRVMgPSAzMjsKKworQGludGVyZmFjZSBaWE1vbm9jaHJvbWVSZWN0YW5nbGVEZXRlY3RvciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWEJpdE1hdHJpeCAqaW1hZ2U7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYTW9ub2Nocm9tZVJlY3RhbmdsZURldGVjdG9yCisKKy0gKGlkKWluaXRXaXRoSW1hZ2U6KFpYQml0TWF0cml4ICopaW1hZ2UgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9pbWFnZSA9IGltYWdlOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy8qKgorICogRGV0ZWN0cyBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBvZiBibGFjayBhbmQgd2hpdGUgLS0gbW9zdGx5IGJsYWNrIC0tIHdpdGggYSByZWdpb24gb2YgbW9zdGx5CisgKiB3aGl0ZSwgaW4gYW4gaW1hZ2UuCisgKiAKKyAqIFJldHVybnMgYSBSZXN1bHRQb2ludCBOU0FycmF5IGRlc2NyaWJpbmcgdGhlIGNvcm5lcnMgb2YgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbi4gVGhlIGZpcnN0IGFuZAorICogbGFzdCBwb2ludHMgYXJlIG9wcG9zZWQgb24gdGhlIGRpYWdvbmFsLCBhcyBhcmUgdGhlIHNlY29uZCBhbmQgdGhpcmQuIFRoZSBmaXJzdCBwb2ludCB3aWxsIGJlCisgKiB0aGUgdG9wbW9zdCBwb2ludCBhbmQgdGhlIGxhc3QsIHRoZSBib3R0b21tb3N0LiBUaGUgc2Vjb25kIHBvaW50IHdpbGwgYmUgbGVmdG1vc3QgYW5kIHRoZQorICogdGhpcmQsIHRoZSByaWdodG1vc3QKKyAqLworLSAoTlNBcnJheSAqKWRldGVjdFdpdGhFcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGludCBoZWlnaHQgPSBbc2VsZi5pbWFnZSBoZWlnaHRdOworICBpbnQgd2lkdGggPSBbc2VsZi5pbWFnZSB3aWR0aF07CisgIGludCBoYWxmSGVpZ2h0ID0gaGVpZ2h0ID4+IDE7CisgIGludCBoYWxmV2lkdGggPSB3aWR0aCA+PiAxOworICBpbnQgZGVsdGFZID0gTUFYKDEsIGhlaWdodCAvIChNT05PQ0hST01FX01BWF9NT0RVTEVTIDw8IDMpID4gMSk7CisgIGludCBkZWx0YVggPSBNQVgoMSwgd2lkdGggLyAoTU9OT0NIUk9NRV9NQVhfTU9EVUxFUyA8PCAzKSA+IDEpOworCisgIGludCB0b3AgPSAwOworICBpbnQgYm90dG9tID0gaGVpZ2h0OworICBpbnQgbGVmdCA9IDA7CisgIGludCByaWdodCA9IHdpZHRoOworICBaWFJlc3VsdFBvaW50ICpwb2ludEEgPSBbc2VsZiBmaW5kQ29ybmVyRnJvbUNlbnRlcjpoYWxmV2lkdGggZGVsdGFYOjAgbGVmdDpsZWZ0IHJpZ2h0OnJpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyWTpoYWxmSGVpZ2h0IGRlbHRhWTotZGVsdGFZIHRvcDp0b3AgYm90dG9tOmJvdHRvbSBtYXhXaGl0ZVJ1bjpoYWxmV2lkdGggPj4gMV07CisgIGlmICghcG9pbnRBKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisgIHRvcCA9IChpbnQpW3BvaW50QSB5XSAtIDE7CisgIFpYUmVzdWx0UG9pbnQgKnBvaW50QiA9IFtzZWxmIGZpbmRDb3JuZXJGcm9tQ2VudGVyOmhhbGZXaWR0aCBkZWx0YVg6LWRlbHRhWCBsZWZ0OmxlZnQgcmlnaHQ6cmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJZOmhhbGZIZWlnaHQgZGVsdGFZOjAgdG9wOnRvcCBib3R0b206Ym90dG9tIG1heFdoaXRlUnVuOmhhbGZIZWlnaHQgPj4gMV07CisgIGlmICghcG9pbnRCKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisgIGxlZnQgPSAoaW50KVtwb2ludEIgeF0gLSAxOworICBaWFJlc3VsdFBvaW50ICpwb2ludEMgPSBbc2VsZiBmaW5kQ29ybmVyRnJvbUNlbnRlcjpoYWxmV2lkdGggZGVsdGFYOmRlbHRhWCBsZWZ0OmxlZnQgcmlnaHQ6cmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJZOmhhbGZIZWlnaHQgZGVsdGFZOjAgdG9wOnRvcCBib3R0b206Ym90dG9tIG1heFdoaXRlUnVuOmhhbGZIZWlnaHQgPj4gMV07CisgIGlmICghcG9pbnRDKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisgIHJpZ2h0ID0gKGludClbcG9pbnRDIHhdICsgMTsKKyAgWlhSZXN1bHRQb2ludCAqcG9pbnREID0gW3NlbGYgZmluZENvcm5lckZyb21DZW50ZXI6aGFsZldpZHRoIGRlbHRhWDowIGxlZnQ6bGVmdCByaWdodDpyaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlclk6aGFsZkhlaWdodCBkZWx0YVk6ZGVsdGFZIHRvcDp0b3AgYm90dG9tOmJvdHRvbSBtYXhXaGl0ZVJ1bjpoYWxmV2lkdGggPj4gMV07CisgIGlmICghcG9pbnREKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisgIGJvdHRvbSA9IChpbnQpW3BvaW50RCB5XSArIDE7CisKKyAgcG9pbnRBID0gW3NlbGYgZmluZENvcm5lckZyb21DZW50ZXI6aGFsZldpZHRoIGRlbHRhWDowIGxlZnQ6bGVmdCByaWdodDpyaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyWTpoYWxmSGVpZ2h0IGRlbHRhWTotZGVsdGFZIHRvcDp0b3AgYm90dG9tOmJvdHRvbSBtYXhXaGl0ZVJ1bjpoYWxmV2lkdGggPj4gMl07CisgIGlmICghcG9pbnRBKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgcmV0dXJuIEBbcG9pbnRBLCBwb2ludEIsIHBvaW50QywgcG9pbnREXTsKK30KKworCisvKioKKyAqIEF0dGVtcHRzIHRvIGxvY2F0ZSBhIGNvcm5lciBvZiB0aGUgYmFyY29kZSBieSBzY2FubmluZyB1cCwgZG93biwgbGVmdCBvciByaWdodCBmcm9tIGEgY2VudGVyCisgKiBwb2ludCB3aGljaCBzaG91bGQgYmUgd2l0aGluIHRoZSBiYXJjb2RlLgorICogCisgKiBQYXJhbXM6CisgKiBjZW50ZXJYIGNlbnRlcidzIHggY29tcG9uZW50IChob3Jpem9udGFsKQorICogZGVsdGFYIHNhbWUgYXMgZGVsdGFZIGJ1dCBjaGFuZ2UgaW4geCBwZXIgc3RlcCBpbnN0ZWFkCisgKiBsZWZ0IG1pbmltdW0gdmFsdWUgb2YgeAorICogcmlnaHQgbWF4aW11bSB2YWx1ZSBvZiB4CisgKiBjZW50ZXJZIGNlbnRlcidzIHkgY29tcG9uZW50ICh2ZXJ0aWNhbCkKKyAqIGRlbHRhWSBjaGFuZ2UgaW4geSBwZXIgc3RlcC4gSWYgc2Nhbm5pbmcgdXAgdGhpcyBpcyBuZWdhdGl2ZTsgZG93biwgcG9zaXRpdmU7CisgKiBsZWZ0IG9yIHJpZ2h0LCAwCisgKiB0b3AgbWluaW11bSB2YWx1ZSBvZiB5IHRvIHNlYXJjaCB0aHJvdWdoIChtZWFuaW5nbGVzcyB3aGVuIGRpID09IDApCisgKiBib3R0b20gbWF4aW11bSB2YWx1ZSBvZiB5CisgKiBtYXhXaGl0ZVJ1biBtYXhpbXVtIHJ1biBvZiB3aGl0ZSBwaXhlbHMgdGhhdCBjYW4gc3RpbGwgYmUgY29uc2lkZXJlZCB0byBiZSB3aXRoaW4KKyAqIHRoZSBiYXJjb2RlCisgKi8KKy0gKFpYUmVzdWx0UG9pbnQgKilmaW5kQ29ybmVyRnJvbUNlbnRlcjooaW50KWNlbnRlclggZGVsdGFYOihpbnQpZGVsdGFYIGxlZnQ6KGludClsZWZ0IHJpZ2h0OihpbnQpcmlnaHQgY2VudGVyWTooaW50KWNlbnRlclkgZGVsdGFZOihpbnQpZGVsdGFZIHRvcDooaW50KXRvcCBib3R0b206KGludClib3R0b20gbWF4V2hpdGVSdW46KGludCltYXhXaGl0ZVJ1biB7CisgIE5TQXJyYXkgKmxhc3RSYW5nZSA9IG5pbDsKKyAgZm9yIChpbnQgeSA9IGNlbnRlclksIHggPSBjZW50ZXJYOyB5IDwgYm90dG9tICYmIHkgPj0gdG9wICYmIHggPCByaWdodCAmJiB4ID49IGxlZnQ7IHkgKz0gZGVsdGFZLCB4ICs9IGRlbHRhWCkgeworICAgIE5TQXJyYXkgKnJhbmdlOworICAgIGlmIChkZWx0YVggPT0gMCkgeworICAgICAgcmFuZ2UgPSBbc2VsZiBibGFja1doaXRlUmFuZ2U6eSBtYXhXaGl0ZVJ1bjptYXhXaGl0ZVJ1biBtaW5EaW06bGVmdCBtYXhEaW06cmlnaHQgaG9yaXpvbnRhbDpZRVNdOworICAgIH0gZWxzZSB7CisgICAgICByYW5nZSA9IFtzZWxmIGJsYWNrV2hpdGVSYW5nZTp4IG1heFdoaXRlUnVuOm1heFdoaXRlUnVuIG1pbkRpbTp0b3AgbWF4RGltOmJvdHRvbSBob3Jpem9udGFsOk5PXTsKKyAgICB9CisgICAgaWYgKHJhbmdlID09IG5pbCkgeworICAgICAgaWYgKGxhc3RSYW5nZSA9PSBuaWwpIHsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgIH0KKyAgICAgIGlmIChkZWx0YVggPT0gMCkgeworICAgICAgICBpbnQgbGFzdFkgPSB5IC0gZGVsdGFZOworICAgICAgICBpZiAoW2xhc3RSYW5nZVswXSBpbnRWYWx1ZV0gPCBjZW50ZXJYKSB7CisgICAgICAgICAgaWYgKFtsYXN0UmFuZ2VbMF0gaW50VmFsdWVdID4gY2VudGVyWCkgeworICAgICAgICAgICAgcmV0dXJuIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOmRlbHRhWSA+IDAgPyBbbGFzdFJhbmdlWzBdIGludFZhbHVlXSA6IFtsYXN0UmFuZ2VbMV0gaW50VmFsdWVdIHk6bGFzdFldOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6W2xhc3RSYW5nZVswXSBpbnRWYWx1ZV0geTpsYXN0WV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOltsYXN0UmFuZ2VbMV0gaW50VmFsdWVdIHk6bGFzdFldOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpbnQgbGFzdFggPSB4IC0gZGVsdGFYOworICAgICAgICBpZiAoW2xhc3RSYW5nZVswXSBpbnRWYWx1ZV0gPCBjZW50ZXJZKSB7CisgICAgICAgICAgaWYgKFtsYXN0UmFuZ2VbMV0gaW50VmFsdWVdID4gY2VudGVyWSkgeworICAgICAgICAgICAgcmV0dXJuIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOmxhc3RYIHk6ZGVsdGFYIDwgMCA/IFtsYXN0UmFuZ2VbMF0gaW50VmFsdWVdIDogW2xhc3RSYW5nZVsxXSBpbnRWYWx1ZV1dOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6bGFzdFggeTpbbGFzdFJhbmdlWzBdIGludFZhbHVlXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOmxhc3RYIHk6W2xhc3RSYW5nZVsxXSBpbnRWYWx1ZV1dOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGxhc3RSYW5nZSA9IHJhbmdlOworICB9CisKKyAgcmV0dXJuIG5pbDsKK30KKworCisvKioKKyAqIENvbXB1dGVzIHRoZSBzdGFydCBhbmQgZW5kIG9mIGEgcmVnaW9uIG9mIHBpeGVscywgZWl0aGVyIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5LCB0aGF0IGNvdWxkCisgKiBiZSBwYXJ0IG9mIGEgRGF0YSBNYXRyaXggYmFyY29kZS4KKyAqIAorICogUGFyYW1zOgorICogZml4ZWREaW1lbnNpb24gaWYgc2Nhbm5pbmcgaG9yaXpvbnRhbGx5LCB0aGlzIGlzIHRoZSByb3cgKHRoZSBmaXhlZCB2ZXJ0aWNhbCBsb2NhdGlvbikKKyAqIHdoZXJlIHdlIGFyZSBzY2FubmluZy4gSWYgc2Nhbm5pbmcgdmVydGljYWxseSBpdCdzIHRoZSBjb2x1bW4sIHRoZSBmaXhlZCBob3Jpem9udGFsIGxvY2F0aW9uCisgKiBtYXhXaGl0ZVJ1biBsYXJnZXN0IHJ1biBvZiB3aGl0ZSBwaXhlbHMgdGhhdCBjYW4gc3RpbGwgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZQorICogYmFyY29kZSByZWdpb24KKyAqIG1pbkRpbSBtaW5pbXVtIHBpeGVsIGxvY2F0aW9uLCBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseSwgdG8gY29uc2lkZXIKKyAqIG1heERpbSBtYXhpbXVtIHBpeGVsIGxvY2F0aW9uLCBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseSwgdG8gY29uc2lkZXIKKyAqIGhvcml6b250YWwgaWYgdHJ1ZSwgd2UncmUgc2Nhbm5pbmcgbGVmdC1yaWdodCwgaW5zdGVhZCBvZiB1cC1kb3duCisgKi8KKy0gKE5TQXJyYXkgKilibGFja1doaXRlUmFuZ2U6KGludClmaXhlZERpbWVuc2lvbiBtYXhXaGl0ZVJ1bjooaW50KW1heFdoaXRlUnVuIG1pbkRpbTooaW50KW1pbkRpbSBtYXhEaW06KGludCltYXhEaW0gaG9yaXpvbnRhbDooQk9PTClob3Jpem9udGFsIHsKKyAgaW50IGNlbnRlciA9IChtaW5EaW0gKyBtYXhEaW0pID4+IDE7CisgIAorICBpbnQgc3RhcnQgPSBjZW50ZXI7CisgIHdoaWxlIChzdGFydCA+PSBtaW5EaW0pIHsKKyAgICBpZiAoaG9yaXpvbnRhbCA/IFtzZWxmLmltYWdlIGdldFg6c3RhcnQgeTpmaXhlZERpbWVuc2lvbl0gOiBbc2VsZi5pbWFnZSBnZXRYOmZpeGVkRGltZW5zaW9uIHk6c3RhcnRdKSB7CisgICAgICBzdGFydC0tOworICAgIH0gZWxzZSB7CisgICAgICBpbnQgd2hpdGVSdW5TdGFydCA9IHN0YXJ0OworCisgICAgICBkbyB7CisgICAgICAgIHN0YXJ0LS07CisgICAgICB9IHdoaWxlIChzdGFydCA+PSBtaW5EaW0gJiYgIShob3Jpem9udGFsID8gW3NlbGYuaW1hZ2UgZ2V0WDpzdGFydCB5OmZpeGVkRGltZW5zaW9uXSA6IFtzZWxmLmltYWdlIGdldFg6Zml4ZWREaW1lbnNpb24geTpzdGFydF0pKTsKKyAgICAgIGludCB3aGl0ZVJ1blNpemUgPSB3aGl0ZVJ1blN0YXJ0IC0gc3RhcnQ7CisgICAgICBpZiAoc3RhcnQgPCBtaW5EaW0gfHwgd2hpdGVSdW5TaXplID4gbWF4V2hpdGVSdW4pIHsKKyAgICAgICAgc3RhcnQgPSB3aGl0ZVJ1blN0YXJ0OworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBzdGFydCsrOworICBpbnQgZW5kID0gY2VudGVyOworCisgIHdoaWxlIChlbmQgPCBtYXhEaW0pIHsKKyAgICBpZiAoaG9yaXpvbnRhbCA/IFtzZWxmLmltYWdlIGdldFg6ZW5kIHk6Zml4ZWREaW1lbnNpb25dIDogW3NlbGYuaW1hZ2UgZ2V0WDpmaXhlZERpbWVuc2lvbiB5OmVuZF0pIHsKKyAgICAgIGVuZCsrOworICAgIH0gZWxzZSB7CisgICAgICBpbnQgd2hpdGVSdW5TdGFydCA9IGVuZDsKKworICAgICAgZG8geworICAgICAgICBlbmQrKzsKKyAgICAgIH0gd2hpbGUgKGVuZCA8IG1heERpbSAmJiAhKGhvcml6b250YWwgPyBbc2VsZi5pbWFnZSBnZXRYOmVuZCB5OmZpeGVkRGltZW5zaW9uXSA6IFtzZWxmLmltYWdlIGdldFg6Zml4ZWREaW1lbnNpb24geTplbmRdKSk7CisgICAgICBpbnQgd2hpdGVSdW5TaXplID0gZW5kIC0gd2hpdGVSdW5TdGFydDsKKyAgICAgIGlmIChlbmQgPj0gbWF4RGltIHx8IHdoaXRlUnVuU2l6ZSA+IG1heFdoaXRlUnVuKSB7CisgICAgICAgIGVuZCA9IHdoaXRlUnVuU3RhcnQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGVuZC0tOworICByZXR1cm4gZW5kID4gc3RhcnQgPyBAW0Aoc3RhcnQpLCBAKGVuZCldIDogbmlsOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL2RldGVjdG9yL1pYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5oIGIvWlhpbmdPYmpDL2NvbW1vbi9kZXRlY3Rvci9aWFdoaXRlUmVjdGFuZ2xlRGV0ZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGM1YWRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9kZXRlY3Rvci9aWFdoaXRlUmVjdGFuZ2xlRGV0ZWN0b3IuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlc3VsdFBvaW50LmgiCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorCisvKioKKyAqIERldGVjdHMgYSBjYW5kaWRhdGUgYmFyY29kZS1saWtlIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gYW4gaW1hZ2UuIEl0CisgKiBzdGFydHMgYXJvdW5kIHRoZSBjZW50ZXIgb2YgdGhlIGltYWdlLCBpbmNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIGNhbmRpZGF0ZQorICogcmVnaW9uIHVudGlsIGl0IGZpbmRzIGEgd2hpdGUgcmVjdGFuZ3VsYXIgcmVnaW9uLiBCeSBrZWVwaW5nIHRyYWNrIG9mIHRoZQorICogbGFzdCBibGFjayBwb2ludHMgaXQgZW5jb3VudGVyZWQsIGl0IGRldGVybWluZXMgdGhlIGNvcm5lcnMgb2YgdGhlIGJhcmNvZGUuCisgKi8KKworQGludGVyZmFjZSBaWFdoaXRlUmVjdGFuZ2xlRGV0ZWN0b3IgOiBOU09iamVjdCAKKworLSAoaWQpaW5pdFdpdGhJbWFnZTooWlhCaXRNYXRyaXggKilpbWFnZSBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKGlkKWluaXRXaXRoSW1hZ2U6KFpYQml0TWF0cml4ICopaW1hZ2UgaW5pdFNpemU6KGludClpbml0U2l6ZSB4OihpbnQpeCB5OihpbnQpeSBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKE5TQXJyYXkgKilkZXRlY3RXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vZGV0ZWN0b3IvWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yLm0gYi9aWGluZ09iakMvY29tbW9uL2RldGVjdG9yL1pYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYWQyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL2RldGVjdG9yL1pYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5tCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhNYXRoVXRpbHMuaCIKKyNpbXBvcnQgIlpYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5oIgorCitAaW50ZXJmYWNlIFpYV2hpdGVSZWN0YW5nbGVEZXRlY3RvciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWEJpdE1hdHJpeCAqaW1hZ2U7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgaGVpZ2h0OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IHdpZHRoOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGxlZnRJbml0OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IHJpZ2h0SW5pdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBkb3duSW5pdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCB1cEluaXQ7CisKK0BlbmQKKworaW50IGNvbnN0IElOSVRfU0laRSA9IDMwOworaW50IGNvbnN0IENPUlIgPSAxOworCitAaW1wbGVtZW50YXRpb24gWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yCisKKy0gKGlkKWluaXRXaXRoSW1hZ2U6KFpYQml0TWF0cml4ICopaW1hZ2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9pbWFnZSA9IGltYWdlOworICAgIF9oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7CisgICAgX3dpZHRoID0gaW1hZ2Uud2lkdGg7CisgICAgX2xlZnRJbml0ID0gKF93aWR0aCAtIElOSVRfU0laRSkgPj4gMTsKKyAgICBfcmlnaHRJbml0ID0gKF93aWR0aCArIElOSVRfU0laRSkgPj4gMTsKKyAgICBfdXBJbml0ID0gKF9oZWlnaHQgLSBJTklUX1NJWkUpID4+IDE7CisgICAgX2Rvd25Jbml0ID0gKF9oZWlnaHQgKyBJTklUX1NJWkUpID4+IDE7CisgICAgaWYgKF91cEluaXQgPCAwIHx8IF9sZWZ0SW5pdCA8IDAgfHwgX2Rvd25Jbml0ID49IF9oZWlnaHQgfHwgX3JpZ2h0SW5pdCA+PSBfd2lkdGgpIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aEltYWdlOihaWEJpdE1hdHJpeCAqKWltYWdlIGluaXRTaXplOihpbnQpaW5pdFNpemUgeDooaW50KXggeTooaW50KXkgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9pbWFnZSA9IGltYWdlOworICAgIF9oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7CisgICAgX3dpZHRoID0gaW1hZ2Uud2lkdGg7CisgICAgaW50IGhhbGZzaXplID0gaW5pdFNpemUgPj4gMTsKKyAgICBfbGVmdEluaXQgPSB4IC0gaGFsZnNpemU7CisgICAgX3JpZ2h0SW5pdCA9IHggKyBoYWxmc2l6ZTsKKyAgICBfdXBJbml0ID0geSAtIGhhbGZzaXplOworICAgIF9kb3duSW5pdCA9IHkgKyBoYWxmc2l6ZTsKKyAgICBpZiAoX3VwSW5pdCA8IDAgfHwgX2xlZnRJbml0IDwgMCB8fCBfZG93bkluaXQgPj0gX2hlaWdodCB8fCBfcmlnaHRJbml0ID49IF93aWR0aCkgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy8qKgorICogRGV0ZWN0cyBhIGNhbmRpZGF0ZSBiYXJjb2RlLWxpa2UgcmVjdGFuZ3VsYXIgcmVnaW9uIHdpdGhpbiBhbiBpbWFnZS4gSXQKKyAqIHN0YXJ0cyBhcm91bmQgdGhlIGNlbnRlciBvZiB0aGUgaW1hZ2UsIGluY3JlYXNlcyB0aGUgc2l6ZSBvZiB0aGUgY2FuZGlkYXRlCisgKiByZWdpb24gdW50aWwgaXQgZmluZHMgYSB3aGl0ZSByZWN0YW5ndWxhciByZWdpb24uCisgKiAKKyAqIFJldHVybnMgYSBSZXN1bHRQb2ludCBOU0FycmF5IGRlc2NyaWJpbmcgdGhlIGNvcm5lcnMgb2YgdGhlIHJlY3Rhbmd1bGFyCisgKiByZWdpb24uIFRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludHMgYXJlIG9wcG9zZWQgb24gdGhlIGRpYWdvbmFsLCBhcworICogYXJlIHRoZSBzZWNvbmQgYW5kIHRoaXJkLiBUaGUgZmlyc3QgcG9pbnQgd2lsbCBiZSB0aGUgdG9wbW9zdAorICogcG9pbnQgYW5kIHRoZSBsYXN0LCB0aGUgYm90dG9tbW9zdC4gVGhlIHNlY29uZCBwb2ludCB3aWxsIGJlCisgKiBsZWZ0bW9zdCBhbmQgdGhlIHRoaXJkLCB0aGUgcmlnaHRtb3N0CisgKi8KKy0gKE5TQXJyYXkgKilkZXRlY3RXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQgbGVmdCA9IHNlbGYubGVmdEluaXQ7CisgIGludCByaWdodCA9IHNlbGYucmlnaHRJbml0OworICBpbnQgdXAgPSBzZWxmLnVwSW5pdDsKKyAgaW50IGRvd24gPSBzZWxmLmRvd25Jbml0OworICBCT09MIHNpemVFeGNlZWRlZCA9IE5POworICBCT09MIGFCbGFja1BvaW50Rm91bmRPbkJvcmRlciA9IFlFUzsKKyAgQk9PTCBhdExlYXN0T25lQmxhY2tQb2ludEZvdW5kT25Cb3JkZXIgPSBOTzsKKworICB3aGlsZSAoYUJsYWNrUG9pbnRGb3VuZE9uQm9yZGVyKSB7CisgICAgYUJsYWNrUG9pbnRGb3VuZE9uQm9yZGVyID0gTk87CisKKyAgICAvLyAuLi4uLgorICAgIC8vIC4gICB8CisgICAgLy8gLi4uLi4KKyAgICBCT09MIHJpZ2h0Qm9yZGVyTm90V2hpdGUgPSBZRVM7CisgICAgd2hpbGUgKHJpZ2h0Qm9yZGVyTm90V2hpdGUgJiYgcmlnaHQgPCBzZWxmLndpZHRoKSB7CisgICAgICByaWdodEJvcmRlck5vdFdoaXRlID0gW3NlbGYgY29udGFpbnNCbGFja1BvaW50OnVwIGI6ZG93biBmaXhlZDpyaWdodCBob3Jpem9udGFsOk5PXTsKKyAgICAgIGlmIChyaWdodEJvcmRlck5vdFdoaXRlKSB7CisgICAgICAgIHJpZ2h0Kys7CisgICAgICAgIGFCbGFja1BvaW50Rm91bmRPbkJvcmRlciA9IFlFUzsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmlnaHQgPj0gc2VsZi53aWR0aCkgeworICAgICAgc2l6ZUV4Y2VlZGVkID0gWUVTOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gLi4uLi4KKyAgICAvLyAuICAgLgorICAgIC8vIC5fX18uCisgICAgQk9PTCBib3R0b21Cb3JkZXJOb3RXaGl0ZSA9IFlFUzsKKyAgICB3aGlsZSAoYm90dG9tQm9yZGVyTm90V2hpdGUgJiYgZG93biA8IHNlbGYuaGVpZ2h0KSB7CisgICAgICBib3R0b21Cb3JkZXJOb3RXaGl0ZSA9IFtzZWxmIGNvbnRhaW5zQmxhY2tQb2ludDpsZWZ0IGI6cmlnaHQgZml4ZWQ6ZG93biBob3Jpem9udGFsOllFU107CisgICAgICBpZiAoYm90dG9tQm9yZGVyTm90V2hpdGUpIHsKKyAgICAgICAgZG93bisrOworICAgICAgICBhQmxhY2tQb2ludEZvdW5kT25Cb3JkZXIgPSBZRVM7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGRvd24gPj0gc2VsZi5oZWlnaHQpIHsKKyAgICAgIHNpemVFeGNlZWRlZCA9IFlFUzsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIC4uLi4uCisgICAgLy8gfCAgIC4KKyAgICAvLyAuLi4uLgorICAgIEJPT0wgbGVmdEJvcmRlck5vdFdoaXRlID0gWUVTOworICAgIHdoaWxlIChsZWZ0Qm9yZGVyTm90V2hpdGUgJiYgbGVmdCA+PSAwKSB7CisgICAgICBsZWZ0Qm9yZGVyTm90V2hpdGUgPSBbc2VsZiBjb250YWluc0JsYWNrUG9pbnQ6dXAgYjpkb3duIGZpeGVkOmxlZnQgaG9yaXpvbnRhbDpOT107CisgICAgICBpZiAobGVmdEJvcmRlck5vdFdoaXRlKSB7CisgICAgICAgIGxlZnQtLTsKKyAgICAgICAgYUJsYWNrUG9pbnRGb3VuZE9uQm9yZGVyID0gWUVTOworICAgICAgfQorICAgIH0KKworICAgIGlmIChsZWZ0IDwgMCkgeworICAgICAgc2l6ZUV4Y2VlZGVkID0gWUVTOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gLl9fXy4KKyAgICAvLyAuICAgLgorICAgIC8vIC4uLi4uCisgICAgQk9PTCB0b3BCb3JkZXJOb3RXaGl0ZSA9IFlFUzsKKyAgICB3aGlsZSAodG9wQm9yZGVyTm90V2hpdGUgJiYgdXAgPj0gMCkgeworICAgICAgdG9wQm9yZGVyTm90V2hpdGUgPSBbc2VsZiBjb250YWluc0JsYWNrUG9pbnQ6bGVmdCBiOnJpZ2h0IGZpeGVkOnVwIGhvcml6b250YWw6WUVTXTsKKyAgICAgIGlmICh0b3BCb3JkZXJOb3RXaGl0ZSkgeworICAgICAgICB1cC0tOworICAgICAgICBhQmxhY2tQb2ludEZvdW5kT25Cb3JkZXIgPSBZRVM7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHVwIDwgMCkgeworICAgICAgc2l6ZUV4Y2VlZGVkID0gWUVTOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGFCbGFja1BvaW50Rm91bmRPbkJvcmRlcikgeworICAgICAgYXRMZWFzdE9uZUJsYWNrUG9pbnRGb3VuZE9uQm9yZGVyID0gWUVTOworICAgIH0KKyAgfQorCisgIGlmICghc2l6ZUV4Y2VlZGVkICYmIGF0TGVhc3RPbmVCbGFja1BvaW50Rm91bmRPbkJvcmRlcikgeworICAgIGludCBtYXhTaXplID0gcmlnaHQgLSBsZWZ0OworCisgICAgWlhSZXN1bHRQb2ludCAqeiA9IG5pbDsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IG1heFNpemU7IGkrKykgeworICAgICAgeiA9IFtzZWxmIGJsYWNrUG9pbnRPblNlZ21lbnQ6bGVmdCBhWTpkb3duIC0gaSBiWDpsZWZ0ICsgaSBiWTpkb3duXTsKKyAgICAgIGlmICh6ICE9IG5pbCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoeiA9PSBuaWwpIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIFpYUmVzdWx0UG9pbnQgKnQgPSBuaWw7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBtYXhTaXplOyBpKyspIHsKKyAgICAgIHQgPSBbc2VsZiBibGFja1BvaW50T25TZWdtZW50OmxlZnQgYVk6dXAgKyBpIGJYOmxlZnQgKyBpIGJZOnVwXTsKKyAgICAgIGlmICh0ICE9IG5pbCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodCA9PSBuaWwpIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIFpYUmVzdWx0UG9pbnQgKnggPSBuaWw7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBtYXhTaXplOyBpKyspIHsKKyAgICAgIHggPSBbc2VsZiBibGFja1BvaW50T25TZWdtZW50OnJpZ2h0IGFZOnVwICsgaSBiWDpyaWdodCAtIGkgYlk6dXBdOworICAgICAgaWYgKHggIT0gbmlsKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmICh4ID09IG5pbCkgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAgWlhSZXN1bHRQb2ludCAqeSA9IG5pbDsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IG1heFNpemU7IGkrKykgeworICAgICAgeSA9IFtzZWxmIGJsYWNrUG9pbnRPblNlZ21lbnQ6cmlnaHQgYVk6ZG93biAtIGkgYlg6cmlnaHQgLSBpIGJZOmRvd25dOworICAgICAgaWYgKHkgIT0gbmlsKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmICh5ID09IG5pbCkgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIHJldHVybiBbc2VsZiBjZW50ZXJFZGdlczp5IHo6eiB4OnggdDp0XTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KK30KKworCistIChaWFJlc3VsdFBvaW50ICopYmxhY2tQb2ludE9uU2VnbWVudDooZmxvYXQpYVggYVk6KGZsb2F0KWFZIGJYOihmbG9hdCliWCBiWTooZmxvYXQpYlkgeworICBpbnQgZGlzdCA9IFtaWE1hdGhVdGlscyByb3VuZDpbWlhNYXRoVXRpbHMgZGlzdGFuY2U6YVggYVk6YVkgYlg6YlggYlk6YlldXTsKKyAgZmxvYXQgeFN0ZXAgPSAoYlggLSBhWCkgLyBkaXN0OworICBmbG9hdCB5U3RlcCA9IChiWSAtIGFZKSAvIGRpc3Q7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaXN0OyBpKyspIHsKKyAgICBpbnQgeCA9IFtaWE1hdGhVdGlscyByb3VuZDphWCArIGkgKiB4U3RlcF07CisgICAgaW50IHkgPSBbWlhNYXRoVXRpbHMgcm91bmQ6YVkgKyBpICogeVN0ZXBdOworICAgIGlmIChbc2VsZi5pbWFnZSBnZXRYOnggeTp5XSkgeworICAgICAgcmV0dXJuIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOnggeTp5XTsKKyAgICB9CisgIH0KKworICByZXR1cm4gbmlsOworfQorCisvKioKKyAqIHJlY2VudGVycyB0aGUgcG9pbnRzIG9mIGEgY29uc3RhbnQgZGlzdGFuY2UgdG93YXJkcyB0aGUgY2VudGVyCisgKgorICogcmV0dXJucyBhIFJlc3VsdFBvaW50IE5TQXJyYXkgZGVzY3JpYmluZyB0aGUgY29ybmVycyBvZiB0aGUgcmVjdGFuZ3VsYXIKKyAqIHJlZ2lvbi4gVGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50cyBhcmUgb3Bwb3NlZCBvbiB0aGUgZGlhZ29uYWwsIGFzCisgKiBhcmUgdGhlIHNlY29uZCBhbmQgdGhpcmQuIFRoZSBmaXJzdCBwb2ludCB3aWxsIGJlIHRoZSB0b3Btb3N0CisgKiBwb2ludCBhbmQgdGhlIGxhc3QsIHRoZSBib3R0b21tb3N0LiBUaGUgc2Vjb25kIHBvaW50IHdpbGwgYmUKKyAqIGxlZnRtb3N0IGFuZCB0aGUgdGhpcmQsIHRoZSByaWdodG1vc3QKKyAqLworLSAoTlNBcnJheSAqKWNlbnRlckVkZ2VzOihaWFJlc3VsdFBvaW50ICopeSB6OihaWFJlc3VsdFBvaW50ICopeiB4OihaWFJlc3VsdFBvaW50ICopeCB0OihaWFJlc3VsdFBvaW50ICopdCB7CisgIC8vCisgIC8vICAgICAgIHQgICAgICAgICAgICB0CisgIC8vICB6ICAgICAgICAgICAgICAgICAgICAgIHgKKyAgLy8gICAgICAgIHggICAgT1IgICAgegorICAvLyAgIHkgICAgICAgICAgICAgICAgICAgIHkKKyAgLy8KKworICBmbG9hdCB5aSA9IHkueDsKKyAgZmxvYXQgeWogPSB5Lnk7CisgIGZsb2F0IHppID0gei54OworICBmbG9hdCB6aiA9IHoueTsKKyAgZmxvYXQgeGkgPSB4Lng7CisgIGZsb2F0IHhqID0geC55OworICBmbG9hdCB0aSA9IHQueDsKKyAgZmxvYXQgdGogPSB0Lnk7CisKKyAgaWYgKHlpIDwgc2VsZi53aWR0aCAvIDIuMGYpIHsKKyAgICByZXR1cm4gQFtbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDp0aSAtIENPUlIgeTp0aiArIENPUlJdLAorICAgICAgICAgICAgIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOnppICsgQ09SUiB5OnpqICsgQ09SUl0sCisgICAgICAgICAgICAgW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6eGkgLSBDT1JSIHk6eGogLSBDT1JSXSwKKyAgICAgICAgICAgICBbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDp5aSArIENPUlIgeTp5aiAtIENPUlJdXTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gQFtbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDp0aSArIENPUlIgeTp0aiArIENPUlJdLAorICAgICAgICAgICAgIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOnppICsgQ09SUiB5OnpqIC0gQ09SUl0sCisgICAgICAgICAgICAgW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6eGkgLSBDT1JSIHk6eGogKyBDT1JSXSwKKyAgICAgICAgICAgICBbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDp5aSAtIENPUlIgeTp5aiAtIENPUlJdXTsKKyAgfQorfQorCisKKy8qKgorICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc2VnbWVudCBjb250YWlucyBhIGJsYWNrIHBvaW50CisgKi8KKy0gKEJPT0wpY29udGFpbnNCbGFja1BvaW50OihpbnQpYSBiOihpbnQpYiBmaXhlZDooaW50KWZpeGVkIGhvcml6b250YWw6KEJPT0wpaG9yaXpvbnRhbCB7CisgIGlmIChob3Jpem9udGFsKSB7CisgICAgZm9yIChpbnQgeCA9IGE7IHggPD0gYjsgeCsrKSB7CisgICAgICBpZiAoW3NlbGYuaW1hZ2UgZ2V0WDp4IHk6Zml4ZWRdKSB7CisgICAgICAgIHJldHVybiBZRVM7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoaW50IHkgPSBhOyB5IDw9IGI7IHkrKykgeworICAgICAgaWYgKFtzZWxmLmltYWdlIGdldFg6Zml4ZWQgeTp5XSkgeworICAgICAgICByZXR1cm4gWUVTOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBOTzsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9yZWVkc29sb21vbi9aWEdlbmVyaWNHRi5oIGIvWlhpbmdPYmpDL2NvbW1vbi9yZWVkc29sb21vbi9aWEdlbmVyaWNHRi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MDZmNzYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL3JlZWRzb2xvbW9uL1pYR2VuZXJpY0dGLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHV0aWxpdHkgbWV0aG9kcyBmb3IgcGVyZm9ybWluZyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucyBvdmVyCisgKiB0aGUgR2Fsb2lzIEZpZWxkcy4gT3BlcmF0aW9ucyB1c2UgYSBnaXZlbiBwcmltaXRpdmUgcG9seW5vbWlhbCBpbiBjYWxjdWxhdGlvbnMuCisgKiAKKyAqIFRocm91Z2hvdXQgdGhpcyBwYWNrYWdlLCBlbGVtZW50cyBvZiB0aGUgR0YgYXJlIHJlcHJlc2VudGVkIGFzIGFuIGludAorICogZm9yIGNvbnZlbmllbmNlIGFuZCBzcGVlZCAoYnV0IGF0IHRoZSBjb3N0IG9mIG1lbW9yeSkuCisgKi8KKworQGNsYXNzIFpYR2VuZXJpY0dGUG9seTsKKworQGludGVyZmFjZSBaWEdlbmVyaWNHRiA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBaWEdlbmVyaWNHRlBvbHkgKnplcm87CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgWlhHZW5lcmljR0ZQb2x5ICpvbmU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IHNpemU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGdlbmVyYXRvckJhc2U7CisKKysgKFpYR2VuZXJpY0dGICopQXp0ZWNEYXRhMTI7CisrIChaWEdlbmVyaWNHRiAqKUF6dGVjRGF0YTEwOworKyAoWlhHZW5lcmljR0YgKilBenRlY0RhdGE2OworKyAoWlhHZW5lcmljR0YgKilBenRlY1BhcmFtOworKyAoWlhHZW5lcmljR0YgKilRckNvZGVGaWVsZDI1NjsKKysgKFpYR2VuZXJpY0dGICopRGF0YU1hdHJpeEZpZWxkMjU2OworKyAoWlhHZW5lcmljR0YgKilBenRlY0RhdGE4OworKyAoWlhHZW5lcmljR0YgKilNYXhpQ29kZUZpZWxkNjQ7CisKKy0gKGlkKWluaXRXaXRoUHJpbWl0aXZlOihpbnQpcHJpbWl0aXZlIHNpemU6KGludClzaXplIGI6KGludCliOworLSAoWlhHZW5lcmljR0ZQb2x5ICopYnVpbGRNb25vbWlhbDooaW50KWRlZ3JlZSBjb2VmZmljaWVudDooaW50KWNvZWZmaWNpZW50OworKyAoaW50KWFkZE9yU3VidHJhY3Q6KGludClhIGI6KGludCliOworLSAoaW50KWV4cDooaW50KWE7CistIChpbnQpbG9nOihpbnQpYTsKKy0gKGludClpbnZlcnNlOihpbnQpYTsKKy0gKGludCltdWx0aXBseTooaW50KWEgYjooaW50KWI7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vcmVlZHNvbG9tb24vWlhHZW5lcmljR0YubSBiL1pYaW5nT2JqQy9jb21tb24vcmVlZHNvbG9tb24vWlhHZW5lcmljR0YubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTJlNTk4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9yZWVkc29sb21vbi9aWEdlbmVyaWNHRi5tCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEdlbmVyaWNHRi5oIgorI2ltcG9ydCAiWlhHZW5lcmljR0ZQb2x5LmgiCisKK0BpbnRlcmZhY2UgWlhHZW5lcmljR0YgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50ICpleHBUYWJsZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCAqbG9nVGFibGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgcHJpbWl0aXZlOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgQk9PTCBpbml0aWFsaXplZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhHZW5lcmljR0YgeworICBaWEdlbmVyaWNHRlBvbHkgKl9vbmU7CisgIFpYR2VuZXJpY0dGUG9seSAqX3plcm87Cit9CisKKy8qKgorICogQ3JlYXRlIGEgcmVwcmVzZW50YXRpb24gb2YgR0Yoc2l6ZSkgdXNpbmcgdGhlIGdpdmVuIHByaW1pdGl2ZSBwb2x5bm9taWFsLgorICovCistIChpZClpbml0V2l0aFByaW1pdGl2ZTooaW50KXByaW1pdGl2ZSBzaXplOihpbnQpc2l6ZSBiOihpbnQpYiB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3ByaW1pdGl2ZSA9IHByaW1pdGl2ZTsKKyAgICBfc2l6ZSA9IHNpemU7CisgICAgX2dlbmVyYXRvckJhc2UgPSBiOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpaW5pdGlhbGl6ZSB7CisgIF9leHBUYWJsZSA9IChpbnQgKiltYWxsb2Moc2VsZi5zaXplICogc2l6ZW9mKGludCkpOworICBfbG9nVGFibGUgPSAoaW50ICopbWFsbG9jKHNlbGYuc2l6ZSAqIHNpemVvZihpbnQpKTsKKyAgaW50IHggPSAxOworICBmb3IgKGludCBpID0gMDsgaSA8IHNlbGYuc2l6ZTsgaSsrKSB7CisgICAgX2V4cFRhYmxlW2ldID0geDsKKyAgICB4IDw8PSAxOyAvLyB4ID0geCAqIDI7IHdlJ3JlIGFzc3VtaW5nIHRoZSBnZW5lcmF0b3IgYWxwaGEgaXMgMgorICAgIGlmICh4ID49IHNlbGYuc2l6ZSkgeworICAgICAgeCBePSBzZWxmLnByaW1pdGl2ZTsKKyAgICAgIHggJj0gc2VsZi5zaXplIC0gMTsKKyAgICB9CisgIH0KKworICBmb3IgKGludCBpID0gMDsgaSA8IHNlbGYuc2l6ZS0xOyBpKyspIHsKKyAgICBfbG9nVGFibGVbX2V4cFRhYmxlW2ldXSA9IGk7CisgIH0KKyAgLy8gbG9nVGFibGVbMF0gPT0gMCBidXQgdGhpcyBzaG91bGQgbmV2ZXIgYmUgdXNlZAorICBfemVybyA9IFtbWlhHZW5lcmljR0ZQb2x5IGFsbG9jXSBpbml0V2l0aEZpZWxkOnNlbGYgY29lZmZpY2llbnRzOk5VTEwgY29lZmZpY2llbnRzTGVuOjBdOworICBpbnQgb25lSW50ID0gMTsKKyAgX29uZSA9IFtbWlhHZW5lcmljR0ZQb2x5IGFsbG9jXSBpbml0V2l0aEZpZWxkOnNlbGYgY29lZmZpY2llbnRzOiZvbmVJbnQgY29lZmZpY2llbnRzTGVuOjFdOworICBzZWxmLmluaXRpYWxpemVkID0gWUVTOworfQorCistICh2b2lkKWNoZWNrSW5pdCB7CisgIGlmICghc2VsZi5pbml0aWFsaXplZCkgeworICAgIFtzZWxmIGluaXRpYWxpemVdOworICB9Cit9CisKKy0gKFpYR2VuZXJpY0dGUG9seSAqKXplcm8geworICBbc2VsZiBjaGVja0luaXRdOworCisgIHJldHVybiBfemVybzsKK30KKworLSAoWlhHZW5lcmljR0ZQb2x5ICopb25lIHsKKyAgW3NlbGYgY2hlY2tJbml0XTsKKworICByZXR1cm4gX29uZTsKK30KKworKyAoWlhHZW5lcmljR0YgKilBenRlY0RhdGExMiB7CisgIHN0YXRpYyBaWEdlbmVyaWNHRiAqQXp0ZWNEYXRhMTIgPSBuaWw7CisgIGlmICghQXp0ZWNEYXRhMTIpIHsKKyAgICBBenRlY0RhdGExMiA9IFtbWlhHZW5lcmljR0YgYWxsb2NdIGluaXRXaXRoUHJpbWl0aXZlOjB4MTA2OSBzaXplOjQwOTYgYjoxXTsgLy8geF4xMiArIHheNiArIHheNSArIHheMyArIDEKKyAgfQorICByZXR1cm4gQXp0ZWNEYXRhMTI7Cit9CisKKysgKFpYR2VuZXJpY0dGICopQXp0ZWNEYXRhMTAgeworICBzdGF0aWMgWlhHZW5lcmljR0YgKkF6dGVjRGF0YTEwID0gbmlsOworICBpZiAoIUF6dGVjRGF0YTEwKSB7CisgICAgQXp0ZWNEYXRhMTAgPSBbW1pYR2VuZXJpY0dGIGFsbG9jXSBpbml0V2l0aFByaW1pdGl2ZToweDQwOSBzaXplOjEwMjQgYjoxXTsgLy8geF4xMCArIHheMyArIDEKKyAgfQorICByZXR1cm4gQXp0ZWNEYXRhMTA7Cit9CisKKysgKFpYR2VuZXJpY0dGICopQXp0ZWNEYXRhNiB7CisgIHN0YXRpYyBaWEdlbmVyaWNHRiAqQXp0ZWNEYXRhNiA9IG5pbDsKKyAgaWYgKCFBenRlY0RhdGE2KSB7CisgICAgQXp0ZWNEYXRhNiA9IFtbWlhHZW5lcmljR0YgYWxsb2NdIGluaXRXaXRoUHJpbWl0aXZlOjB4NDMgc2l6ZTo2NCBiOjFdOyAvLyB4XjYgKyB4ICsgMQorICB9CisgIHJldHVybiBBenRlY0RhdGE2OworfQorCisrIChaWEdlbmVyaWNHRiAqKUF6dGVjUGFyYW0geworICBzdGF0aWMgWlhHZW5lcmljR0YgKkF6dGVjUGFyYW0gPSBuaWw7CisgIGlmICghQXp0ZWNQYXJhbSkgeworICAgIEF6dGVjUGFyYW0gPSBbW1pYR2VuZXJpY0dGIGFsbG9jXSBpbml0V2l0aFByaW1pdGl2ZToweDEzIHNpemU6MTYgYjoxXTsgLy8geF40ICsgeCArIDEKKyAgfQorICByZXR1cm4gQXp0ZWNQYXJhbTsKK30KKworKyAoWlhHZW5lcmljR0YgKilRckNvZGVGaWVsZDI1NiB7CisgIHN0YXRpYyBaWEdlbmVyaWNHRiAqUXJDb2RlRmllbGQyNTYgPSBuaWw7CisgIGlmICghUXJDb2RlRmllbGQyNTYpIHsKKyAgICBRckNvZGVGaWVsZDI1NiA9IFtbWlhHZW5lcmljR0YgYWxsb2NdIGluaXRXaXRoUHJpbWl0aXZlOjB4MDExRCBzaXplOjI1NiBiOjBdOyAvLyB4XjggKyB4XjQgKyB4XjMgKyB4XjIgKyAxCisgIH0KKyAgcmV0dXJuIFFyQ29kZUZpZWxkMjU2OworfQorCisrIChaWEdlbmVyaWNHRiAqKURhdGFNYXRyaXhGaWVsZDI1NiB7CisgIHN0YXRpYyBaWEdlbmVyaWNHRiAqRGF0YU1hdHJpeEZpZWxkMjU2ID0gbmlsOworICBpZiAoIURhdGFNYXRyaXhGaWVsZDI1NikgeworICAgIERhdGFNYXRyaXhGaWVsZDI1NiA9IFtbWlhHZW5lcmljR0YgYWxsb2NdIGluaXRXaXRoUHJpbWl0aXZlOjB4MDEyRCBzaXplOjI1NiBiOjFdOyAvLyB4XjggKyB4XjUgKyB4XjMgKyB4XjIgKyAxCisgIH0KKyAgcmV0dXJuIERhdGFNYXRyaXhGaWVsZDI1NjsKK30KKworKyAoWlhHZW5lcmljR0YgKilBenRlY0RhdGE4IHsKKyAgcmV0dXJuIFtzZWxmIERhdGFNYXRyaXhGaWVsZDI1Nl07Cit9CisKKysgKFpYR2VuZXJpY0dGICopTWF4aUNvZGVGaWVsZDY0IHsKKyAgcmV0dXJuIFtzZWxmIEF6dGVjRGF0YTZdOworfQorCistIChaWEdlbmVyaWNHRlBvbHkgKilidWlsZE1vbm9taWFsOihpbnQpZGVncmVlIGNvZWZmaWNpZW50OihpbnQpY29lZmZpY2llbnQgeworICBbc2VsZiBjaGVja0luaXRdOworCisgIGlmIChkZWdyZWUgPCAwKSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkRlZ3JlZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiJdOworICB9CisgIGlmIChjb2VmZmljaWVudCA9PSAwKSB7CisgICAgcmV0dXJuIHNlbGYuemVybzsKKyAgfQorCisgIGludCBjb2VmZmljaWVudHNMZW4gPSBkZWdyZWUgKyAxOworICBpbnQgY29lZmZpY2llbnRzW2NvZWZmaWNpZW50c0xlbl07CisgIGNvZWZmaWNpZW50c1swXSA9IGNvZWZmaWNpZW50OworICBmb3IgKGludCBpID0gMTsgaSA8IGNvZWZmaWNpZW50c0xlbjsgaSsrKSB7CisgICAgY29lZmZpY2llbnRzW2ldID0gMDsKKyAgfQorICByZXR1cm4gW1taWEdlbmVyaWNHRlBvbHkgYWxsb2NdIGluaXRXaXRoRmllbGQ6c2VsZiBjb2VmZmljaWVudHM6Y29lZmZpY2llbnRzIGNvZWZmaWNpZW50c0xlbjpjb2VmZmljaWVudHNMZW5dOworfQorCisvKioKKyAqIEltcGxlbWVudHMgYm90aCBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gLS0gdGhleSBhcmUgdGhlIHNhbWUgaW4gR0Yoc2l6ZSkuCisgKi8KKysgKGludClhZGRPclN1YnRyYWN0OihpbnQpYSBiOihpbnQpYiB7CisgIHJldHVybiBhIF4gYjsKK30KKworLSAoaW50KWV4cDooaW50KWEgeworICBbc2VsZiBjaGVja0luaXRdOworCisgIHJldHVybiBzZWxmLmV4cFRhYmxlW2FdOworfQorCistIChpbnQpbG9nOihpbnQpYSB7CisgIFtzZWxmIGNoZWNrSW5pdF07CisKKyAgaWYgKGEgPT0gMCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJBcmd1bWVudCBtdXN0IGJlIG5vbi16ZXJvLiJdOworICB9CisgIHJldHVybiBzZWxmLmxvZ1RhYmxlW2FdOworfQorCistIChpbnQpaW52ZXJzZTooaW50KWEgeworICBbc2VsZiBjaGVja0luaXRdOworCisgIGlmIChhID09IDApIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiQXJndW1lbnQgbXVzdCBiZSBub24temVyby4iXTsKKyAgfQorICByZXR1cm4gc2VsZi5leHBUYWJsZVtzZWxmLnNpemUgLSBzZWxmLmxvZ1RhYmxlW2FdIC0gMV07Cit9CisKKy0gKGludCltdWx0aXBseTooaW50KWEgYjooaW50KWIgeworICBbc2VsZiBjaGVja0luaXRdOworCisgIGlmIChhID09IDAgfHwgYiA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gc2VsZi5leHBUYWJsZVsoc2VsZi5sb2dUYWJsZVthXSArIHNlbGYubG9nVGFibGVbYl0pICUgKHNlbGYuc2l6ZSAtIDEpXTsKK30KKworLSAoQk9PTClpc0VxdWFsOihaWEdlbmVyaWNHRiAqKW9iamVjdCB7CisgIHJldHVybiBzZWxmLnByaW1pdGl2ZSA9PSBvYmplY3QucHJpbWl0aXZlICYmIHNlbGYuc2l6ZSA9PSBvYmplY3Quc2l6ZTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7CisgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkdGKDB4JVgsJWQpIiwgc2VsZi5wcmltaXRpdmUsIHNlbGYuc2l6ZV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vcmVlZHNvbG9tb24vWlhHZW5lcmljR0ZQb2x5LmggYi9aWGluZ09iakMvY29tbW9uL3JlZWRzb2xvbW9uL1pYR2VuZXJpY0dGUG9seS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhY2E3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL3JlZWRzb2xvbW9uL1pYR2VuZXJpY0dGUG9seS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogUmVwcmVzZW50cyBhIHBvbHlub21pYWwgd2hvc2UgY29lZmZpY2llbnRzIGFyZSBlbGVtZW50cyBvZiBhIEdGLgorICogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGltbXV0YWJsZS4KKyAqIAorICogTXVjaCBjcmVkaXQgaXMgZHVlIHRvIFdpbGxpYW0gUnVja2xpZGdlIHNpbmNlIHBvcnRpb25zIG9mIHRoaXMgY29kZSBhcmUgYW4gaW5kaXJlY3QKKyAqIHBvcnQgb2YgaGlzIEMrKyBSZWVkLVNvbG9tb24gaW1wbGVtZW50YXRpb24uCisgKi8KKworQGNsYXNzIFpYR2VuZXJpY0dGOworCitAaW50ZXJmYWNlIFpYR2VuZXJpY0dGUG9seSA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgKmNvZWZmaWNpZW50czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgY29lZmZpY2llbnRzTGVuOworCistIChpZClpbml0V2l0aEZpZWxkOihaWEdlbmVyaWNHRiAqKWZpZWxkIGNvZWZmaWNpZW50czooaW50ICopY29lZmZpY2llbnRzIGNvZWZmaWNpZW50c0xlbjooaW50KWNvZWZmaWNpZW50c0xlbjsKKy0gKGludClkZWdyZWU7CistIChCT09MKXplcm87CistIChpbnQpY29lZmZpY2llbnQ6KGludClkZWdyZWU7CistIChpbnQpZXZhbHVhdGVBdDooaW50KWE7CistIChaWEdlbmVyaWNHRlBvbHkgKilhZGRPclN1YnRyYWN0OihaWEdlbmVyaWNHRlBvbHkgKilvdGhlcjsKKy0gKFpYR2VuZXJpY0dGUG9seSAqKW11bHRpcGx5OihaWEdlbmVyaWNHRlBvbHkgKilvdGhlcjsKKy0gKFpYR2VuZXJpY0dGUG9seSAqKW11bHRpcGx5U2NhbGFyOihpbnQpc2NhbGFyOworLSAoWlhHZW5lcmljR0ZQb2x5ICopbXVsdGlwbHlCeU1vbm9taWFsOihpbnQpZGVncmVlIGNvZWZmaWNpZW50OihpbnQpY29lZmZpY2llbnQ7CistIChOU0FycmF5ICopZGl2aWRlOihaWEdlbmVyaWNHRlBvbHkgKilvdGhlcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9yZWVkc29sb21vbi9aWEdlbmVyaWNHRlBvbHkubSBiL1pYaW5nT2JqQy9jb21tb24vcmVlZHNvbG9tb24vWlhHZW5lcmljR0ZQb2x5Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc4ZGQ3OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vcmVlZHNvbG9tb24vWlhHZW5lcmljR0ZQb2x5Lm0KQEAgLTAsMCArMSwyNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYR2VuZXJpY0dGLmgiCisjaW1wb3J0ICJaWEdlbmVyaWNHRlBvbHkuaCIKKworQGludGVyZmFjZSBaWEdlbmVyaWNHRlBvbHkgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhHZW5lcmljR0YgKmZpZWxkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEdlbmVyaWNHRlBvbHkKKworLSAoaWQpaW5pdFdpdGhGaWVsZDooWlhHZW5lcmljR0YgKilmaWVsZCBjb2VmZmljaWVudHM6KGludCAqKWNvZWZmaWNpZW50cyBjb2VmZmljaWVudHNMZW46KGludCljb2VmZmljaWVudHNMZW4geworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9maWVsZCA9IGZpZWxkOworICAgIGlmIChjb2VmZmljaWVudHNMZW4gPiAxICYmIGNvZWZmaWNpZW50c1swXSA9PSAwKSB7CisgICAgICBpbnQgZmlyc3ROb25aZXJvID0gMTsKKyAgICAgIHdoaWxlIChmaXJzdE5vblplcm8gPCBjb2VmZmljaWVudHNMZW4gJiYgY29lZmZpY2llbnRzW2ZpcnN0Tm9uWmVyb10gPT0gMCkgeworICAgICAgICBmaXJzdE5vblplcm8rKzsKKyAgICAgIH0KKyAgICAgIGlmIChmaXJzdE5vblplcm8gPT0gY29lZmZpY2llbnRzTGVuKSB7CisgICAgICAgIFpYR2VuZXJpY0dGUG9seSAqemVybyA9IFtmaWVsZCB6ZXJvXTsKKyAgICAgICAgX2NvZWZmaWNpZW50cyA9IChpbnQgKiltYWxsb2MoemVyby5jb2VmZmljaWVudHNMZW4gKiBzaXplb2YoaW50KSk7CisgICAgICAgIG1lbWNweShfY29lZmZpY2llbnRzLCB6ZXJvLmNvZWZmaWNpZW50cywgemVyby5jb2VmZmljaWVudHNMZW4gKiBzaXplb2YoaW50KSk7CisgICAgICAgIF9jb2VmZmljaWVudHNMZW4gPSB6ZXJvLmNvZWZmaWNpZW50c0xlbjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIF9jb2VmZmljaWVudHNMZW4gPSAoY29lZmZpY2llbnRzTGVuIC0gZmlyc3ROb25aZXJvKTsKKyAgICAgICAgX2NvZWZmaWNpZW50cyA9IChpbnQgKiltYWxsb2MoX2NvZWZmaWNpZW50c0xlbiAqIHNpemVvZihpbnQpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfY29lZmZpY2llbnRzTGVuOyBpKyspIHsKKyAgICAgICAgICBfY29lZmZpY2llbnRzW2ldID0gY29lZmZpY2llbnRzW2ZpcnN0Tm9uWmVybyArIGldOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIF9jb2VmZmljaWVudHMgPSAoaW50ICopbWFsbG9jKGNvZWZmaWNpZW50c0xlbiAqIHNpemVvZihpbnQpKTsKKyAgICAgIG1lbWNweShfY29lZmZpY2llbnRzLCBjb2VmZmljaWVudHMsIGNvZWZmaWNpZW50c0xlbiAqIHNpemVvZihpbnQpKTsKKyAgICAgIF9jb2VmZmljaWVudHNMZW4gPSBjb2VmZmljaWVudHNMZW47CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYyB7CisgIGlmIChfY29lZmZpY2llbnRzICE9IE5VTEwpIHsKKyAgICBmcmVlKF9jb2VmZmljaWVudHMpOworICAgIF9jb2VmZmljaWVudHMgPSBOVUxMOworICB9Cit9CisKKy0gKGludClkZWdyZWUgeworICByZXR1cm4gc2VsZi5jb2VmZmljaWVudHNMZW4gLSAxOworfQorCistIChCT09MKXplcm8geworICByZXR1cm4gc2VsZi5jb2VmZmljaWVudHNbMF0gPT0gMDsKK30KKworLSAoaW50KWNvZWZmaWNpZW50OihpbnQpZGVncmVlIHsKKyAgcmV0dXJuIHNlbGYuY29lZmZpY2llbnRzW3NlbGYuY29lZmZpY2llbnRzTGVuIC0gMSAtIGRlZ3JlZV07Cit9CisKKy0gKGludClldmFsdWF0ZUF0OihpbnQpYSB7CisgIGlmIChhID09IDApIHsKKyAgICByZXR1cm4gW3NlbGYgY29lZmZpY2llbnQ6MF07CisgIH0KKyAgaW50IHNpemUgPSBzZWxmLmNvZWZmaWNpZW50c0xlbjsKKyAgaWYgKGEgPT0gMSkgeworICAgIGludCByZXN1bHQgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICByZXN1bHQgPSBbWlhHZW5lcmljR0YgYWRkT3JTdWJ0cmFjdDpyZXN1bHQgYjpzZWxmLmNvZWZmaWNpZW50c1tpXV07CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgaW50IHJlc3VsdCA9IHNlbGYuY29lZmZpY2llbnRzWzBdOworICBmb3IgKGludCBpID0gMTsgaSA8IHNpemU7IGkrKykgeworICAgIHJlc3VsdCA9IFtaWEdlbmVyaWNHRiBhZGRPclN1YnRyYWN0OltzZWxmLmZpZWxkIG11bHRpcGx5OmEgYjpyZXN1bHRdIGI6c2VsZi5jb2VmZmljaWVudHNbaV1dOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKFpYR2VuZXJpY0dGUG9seSAqKWFkZE9yU3VidHJhY3Q6KFpYR2VuZXJpY0dGUG9seSAqKW90aGVyIHsKKyAgaWYgKCFbc2VsZi5maWVsZCBpc0VxdWFsOm90aGVyLmZpZWxkXSkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJaWEdlbmVyaWNHRlBvbHlzIGRvIG5vdCBoYXZlIHNhbWUgWlhHZW5lcmljR0YgZmllbGQiXTsKKyAgfQorICBpZiAoc2VsZi56ZXJvKSB7CisgICAgcmV0dXJuIG90aGVyOworICB9CisgIGlmIChvdGhlci56ZXJvKSB7CisgICAgcmV0dXJuIHNlbGY7CisgIH0KKworICBpbnQgKnNtYWxsZXJDb2VmZmljaWVudHMgPSBzZWxmLmNvZWZmaWNpZW50czsKKyAgaW50IHNtYWxsZXJDb2VmZmljaWVudHNMZW4gPSBzZWxmLmNvZWZmaWNpZW50c0xlbjsKKyAgaW50ICpsYXJnZXJDb2VmZmljaWVudHMgPSBvdGhlci5jb2VmZmljaWVudHM7CisgIGludCBsYXJnZXJDb2VmZmljaWVudHNMZW4gPSBvdGhlci5jb2VmZmljaWVudHNMZW47CisgIGlmIChzbWFsbGVyQ29lZmZpY2llbnRzTGVuID4gbGFyZ2VyQ29lZmZpY2llbnRzTGVuKSB7CisgICAgaW50ICp0ZW1wID0gc21hbGxlckNvZWZmaWNpZW50czsKKyAgICBpbnQgdGVtcExlbiA9IHNtYWxsZXJDb2VmZmljaWVudHNMZW47CisgICAgc21hbGxlckNvZWZmaWNpZW50cyA9IGxhcmdlckNvZWZmaWNpZW50czsKKyAgICBzbWFsbGVyQ29lZmZpY2llbnRzTGVuID0gbGFyZ2VyQ29lZmZpY2llbnRzTGVuOworICAgIGxhcmdlckNvZWZmaWNpZW50cyA9IHRlbXA7CisgICAgbGFyZ2VyQ29lZmZpY2llbnRzTGVuID0gdGVtcExlbjsKKyAgfQorICBpbnQgc3VtRGlmZltsYXJnZXJDb2VmZmljaWVudHNMZW5dOworICBtZW1zZXQoc3VtRGlmZiwgMCwgbGFyZ2VyQ29lZmZpY2llbnRzTGVuICogc2l6ZW9mKGludCkpOworICBpbnQgbGVuZ3RoRGlmZiA9IGxhcmdlckNvZWZmaWNpZW50c0xlbiAtIHNtYWxsZXJDb2VmZmljaWVudHNMZW47CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoRGlmZjsgaSsrKSB7CisgICAgc3VtRGlmZltpXSA9IGxhcmdlckNvZWZmaWNpZW50c1tpXTsKKyAgfQorICBmb3IgKGludCBpID0gbGVuZ3RoRGlmZjsgaSA8IGxhcmdlckNvZWZmaWNpZW50c0xlbjsgaSsrKSB7CisgICAgc3VtRGlmZltpXSA9IFtaWEdlbmVyaWNHRiBhZGRPclN1YnRyYWN0OnNtYWxsZXJDb2VmZmljaWVudHNbaSAtIGxlbmd0aERpZmZdIGI6bGFyZ2VyQ29lZmZpY2llbnRzW2ldXTsKKyAgfQorCisgIHJldHVybiBbW1pYR2VuZXJpY0dGUG9seSBhbGxvY10gaW5pdFdpdGhGaWVsZDpzZWxmLmZpZWxkIGNvZWZmaWNpZW50czpzdW1EaWZmIGNvZWZmaWNpZW50c0xlbjpsYXJnZXJDb2VmZmljaWVudHNMZW5dOworfQorCistIChaWEdlbmVyaWNHRlBvbHkgKikgbXVsdGlwbHk6KFpYR2VuZXJpY0dGUG9seSAqKW90aGVyIHsKKyAgaWYgKCFbc2VsZi5maWVsZCBpc0VxdWFsOm90aGVyLmZpZWxkXSkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJaWEdlbmVyaWNHRlBvbHlzIGRvIG5vdCBoYXZlIHNhbWUgR2VuZXJpY0dGIGZpZWxkIl07CisgIH0KKyAgaWYgKHNlbGYuemVybyB8fCBvdGhlci56ZXJvKSB7CisgICAgcmV0dXJuIHNlbGYuZmllbGQuemVybzsKKyAgfQorICBpbnQgKmFDb2VmZmljaWVudHMgPSBzZWxmLmNvZWZmaWNpZW50czsKKyAgaW50IGFMZW5ndGggPSBzZWxmLmNvZWZmaWNpZW50c0xlbjsKKyAgaW50ICpiQ29lZmZpY2llbnRzID0gb3RoZXIuY29lZmZpY2llbnRzOworICBpbnQgYkxlbmd0aCA9IG90aGVyLmNvZWZmaWNpZW50c0xlbjsKKyAgaW50IHByb2R1Y3RMZW4gPSBhTGVuZ3RoICsgYkxlbmd0aCAtIDE7CisgIGludCBwcm9kdWN0W3Byb2R1Y3RMZW5dOworICBtZW1zZXQocHJvZHVjdCwgMCwgcHJvZHVjdExlbiAqIHNpemVvZihpbnQpKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGFMZW5ndGg7IGkrKykgeworICAgIGludCBhQ29lZmYgPSBhQ29lZmZpY2llbnRzW2ldOworICAgIGZvciAoaW50IGogPSAwOyBqIDwgYkxlbmd0aDsgaisrKSB7CisgICAgICBwcm9kdWN0W2kgKyBqXSA9IFtaWEdlbmVyaWNHRiBhZGRPclN1YnRyYWN0OnByb2R1Y3RbaSArIGpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOltzZWxmLmZpZWxkIG11bHRpcGx5OmFDb2VmZiBiOmJDb2VmZmljaWVudHNbal1dXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFtbWlhHZW5lcmljR0ZQb2x5IGFsbG9jXSBpbml0V2l0aEZpZWxkOnNlbGYuZmllbGQgY29lZmZpY2llbnRzOnByb2R1Y3QgY29lZmZpY2llbnRzTGVuOnByb2R1Y3RMZW5dOworfQorCistIChaWEdlbmVyaWNHRlBvbHkgKiltdWx0aXBseVNjYWxhcjooaW50KXNjYWxhciB7CisgIGlmIChzY2FsYXIgPT0gMCkgeworICAgIHJldHVybiBzZWxmLmZpZWxkLnplcm87CisgIH0KKyAgaWYgKHNjYWxhciA9PSAxKSB7CisgICAgcmV0dXJuIHNlbGY7CisgIH0KKyAgaW50IHNpemUgPSBzZWxmLmNvZWZmaWNpZW50c0xlbjsKKyAgaW50IHByb2R1Y3Rbc2l6ZV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgcHJvZHVjdFtpXSA9IFtzZWxmLmZpZWxkIG11bHRpcGx5OnNlbGYuY29lZmZpY2llbnRzW2ldIGI6c2NhbGFyXTsKKyAgfQorICByZXR1cm4gW1taWEdlbmVyaWNHRlBvbHkgYWxsb2NdIGluaXRXaXRoRmllbGQ6c2VsZi5maWVsZCBjb2VmZmljaWVudHM6cHJvZHVjdCBjb2VmZmljaWVudHNMZW46c2l6ZV07Cit9CisKKy0gKFpYR2VuZXJpY0dGUG9seSAqKW11bHRpcGx5QnlNb25vbWlhbDooaW50KWRlZ3JlZSBjb2VmZmljaWVudDooaW50KWNvZWZmaWNpZW50IHsKKyAgaWYgKGRlZ3JlZSA8IDApIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiRGVncmVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIl07CisgIH0KKyAgaWYgKGNvZWZmaWNpZW50ID09IDApIHsKKyAgICByZXR1cm4gc2VsZi5maWVsZC56ZXJvOworICB9CisgIGludCBzaXplID0gc2VsZi5jb2VmZmljaWVudHNMZW47CisgIGludCBwcm9kdWN0W3NpemUgKyBkZWdyZWVdOworICBmb3IgKGludCBpID0gMDsgaSA8IHNpemUgKyBkZWdyZWU7IGkrKykgeworICAgIGlmIChpIDwgc2l6ZSkgeworICAgICAgcHJvZHVjdFtpXSA9IFtzZWxmLmZpZWxkIG11bHRpcGx5OnNlbGYuY29lZmZpY2llbnRzW2ldIGI6Y29lZmZpY2llbnRdOworICAgIH0gZWxzZSB7CisgICAgICBwcm9kdWN0W2ldID0gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gW1taWEdlbmVyaWNHRlBvbHkgYWxsb2NdIGluaXRXaXRoRmllbGQ6c2VsZi5maWVsZCBjb2VmZmljaWVudHM6cHJvZHVjdCBjb2VmZmljaWVudHNMZW46c2l6ZSArIGRlZ3JlZV07Cit9CisKKy0gKE5TQXJyYXkgKilkaXZpZGU6KFpYR2VuZXJpY0dGUG9seSAqKW90aGVyIHsKKyAgaWYgKCFbc2VsZi5maWVsZCBpc0VxdWFsOm90aGVyLmZpZWxkXSkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJaWEdlbmVyaWNHRlBvbHlzIGRvIG5vdCBoYXZlIHNhbWUgWlhHZW5lcmljR0YgZmllbGQiXTsKKyAgfQorICBpZiAob3RoZXIuemVybykgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJEaXZpZGUgYnkgMCJdOworICB9CisKKyAgWlhHZW5lcmljR0ZQb2x5ICpxdW90aWVudCA9IHNlbGYuZmllbGQuemVybzsKKyAgWlhHZW5lcmljR0ZQb2x5ICpyZW1haW5kZXIgPSBzZWxmOworCisgIGludCBkZW5vbWluYXRvckxlYWRpbmdUZXJtID0gW290aGVyIGNvZWZmaWNpZW50Om90aGVyLmRlZ3JlZV07CisgIGludCBpbnZlcnNlRGVub21pbmF0b3JMZWFkaW5nVGVybSA9IFtzZWxmLmZpZWxkIGludmVyc2U6ZGVub21pbmF0b3JMZWFkaW5nVGVybV07CisKKyAgd2hpbGUgKFtyZW1haW5kZXIgZGVncmVlXSA+PSBvdGhlci5kZWdyZWUgJiYgIXJlbWFpbmRlci56ZXJvKSB7CisgICAgaW50IGRlZ3JlZURpZmZlcmVuY2UgPSByZW1haW5kZXIuZGVncmVlIC0gb3RoZXIuZGVncmVlOworICAgIGludCBzY2FsZSA9IFtzZWxmLmZpZWxkIG11bHRpcGx5OltyZW1haW5kZXIgY29lZmZpY2llbnQ6cmVtYWluZGVyLmRlZ3JlZV0gYjppbnZlcnNlRGVub21pbmF0b3JMZWFkaW5nVGVybV07CisgICAgWlhHZW5lcmljR0ZQb2x5ICp0ZXJtID0gW290aGVyIG11bHRpcGx5QnlNb25vbWlhbDpkZWdyZWVEaWZmZXJlbmNlIGNvZWZmaWNpZW50OnNjYWxlXTsKKyAgICBaWEdlbmVyaWNHRlBvbHkgKml0ZXJhdGlvblF1b3RpZW50ID0gW3NlbGYuZmllbGQgYnVpbGRNb25vbWlhbDpkZWdyZWVEaWZmZXJlbmNlIGNvZWZmaWNpZW50OnNjYWxlXTsKKyAgICBxdW90aWVudCA9IFtxdW90aWVudCBhZGRPclN1YnRyYWN0Oml0ZXJhdGlvblF1b3RpZW50XTsKKyAgICByZW1haW5kZXIgPSBbcmVtYWluZGVyIGFkZE9yU3VidHJhY3Q6dGVybV07CisgIH0KKworICByZXR1cm4gQFtxdW90aWVudCwgcmVtYWluZGVyXTsKK30KKworLSAoTlNTdHJpbmcgKikgZGVzY3JpcHRpb24geworICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OjggKiBbc2VsZiBkZWdyZWVdXTsKKyAgZm9yIChpbnQgZGVncmVlID0gW3NlbGYgZGVncmVlXTsgZGVncmVlID49IDA7IGRlZ3JlZS0tKSB7CisgICAgaW50IGNvZWZmaWNpZW50ID0gW3NlbGYgY29lZmZpY2llbnQ6ZGVncmVlXTsKKyAgICBpZiAoY29lZmZpY2llbnQgIT0gMCkgeworICAgICAgaWYgKGNvZWZmaWNpZW50IDwgMCkgeworICAgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIiAtICJdOworICAgICAgICBjb2VmZmljaWVudCA9IC1jb2VmZmljaWVudDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChbcmVzdWx0IGxlbmd0aF0gPiAwKSB7CisgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIgKyAiXTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKGRlZ3JlZSA9PSAwIHx8IGNvZWZmaWNpZW50ICE9IDEpIHsKKyAgICAgICAgaW50IGFscGhhUG93ZXIgPSBbc2VsZi5maWVsZCBsb2c6Y29lZmZpY2llbnRdOworICAgICAgICBpZiAoYWxwaGFQb3dlciA9PSAwKSB7CisgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIxIl07CisgICAgICAgIH0gZWxzZSBpZiAoYWxwaGFQb3dlciA9PSAxKSB7CisgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCJhIl07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCJhXiJdOworICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJWQiLCBhbHBoYVBvd2VyXTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKGRlZ3JlZSAhPSAwKSB7CisgICAgICAgIGlmIChkZWdyZWUgPT0gMSkgeworICAgICAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAieCJdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAieF4iXTsKKyAgICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVkIiwgZGVncmVlXTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vcmVlZHNvbG9tb24vWlhSZWVkU29sb21vbkRlY29kZXIuaCBiL1pYaW5nT2JqQy9jb21tb24vcmVlZHNvbG9tb24vWlhSZWVkU29sb21vbkRlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjU2YTRiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9yZWVkc29sb21vbi9aWFJlZWRTb2xvbW9uRGVjb2Rlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogSW1wbGVtZW50cyBSZWVkLVNvbG9tb24gZGVjb2RpbmcsIGFzIHRoZSBuYW1lIGltcGxpZXMuCisgKiAKKyAqIFRoZSBhbGdvcml0aG0gd2lsbCBub3QgYmUgZXhwbGFpbmVkIGhlcmUsIGJ1dCB0aGUgZm9sbG93aW5nIHJlZmVyZW5jZXMgd2VyZSBoZWxwZnVsCisgKiBpbiBjcmVhdGluZyB0aGlzIGltcGxlbWVudGF0aW9uOgorICogCisgKiBCcnVjZSBNYWdncy4KKyAqIGh0dHA6Ly93d3cuY3MuY211LmVkdS9hZnMvY3MuY211LmVkdS9wcm9qZWN0L3BzY2ljby1ndXliL3JlYWx3b3JsZC93d3cvcnNfZGVjb2RlLnBzCisgKiAiRGVjb2RpbmcgUmVlZC1Tb2xvbW9uIENvZGVzIiAoc2VlIGRpc2N1c3Npb24gb2YgRm9ybmV5J3MgRm9ybXVsYSkKKyAqCisgKiBKLkkuIEhhbGwuIHd3dy5tdGgubXN1LmVkdS9+amhhbGwvY2xhc3Nlcy9jb2Rlbm90ZXMvR1JTLnBkZgorICogIkNoYXB0ZXIgNS4gR2VuZXJhbGl6ZWQgUmVlZC1Tb2xvbW9uIENvZGVzIgorICogKHNlZSBkaXNjdXNzaW9uIG9mIEV1Y2xpZGVhbiBhbGdvcml0aG0pCisgKiAKKyAqIE11Y2ggY3JlZGl0IGlzIGR1ZSB0byBXaWxsaWFtIFJ1Y2tsaWRnZSBzaW5jZSBwb3J0aW9ucyBvZiB0aGlzIGNvZGUgYXJlIGFuIGluZGlyZWN0CisgKiBwb3J0IG9mIGhpcyBDKysgUmVlZC1Tb2xvbW9uIGltcGxlbWVudGF0aW9uLgorICovCisKK0BjbGFzcyBaWEdlbmVyaWNHRjsKKworQGludGVyZmFjZSBaWFJlZWRTb2xvbW9uRGVjb2RlciA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoRmllbGQ6KFpYR2VuZXJpY0dGICopZmllbGQ7CistIChCT09MKWRlY29kZTooaW50ICopcmVjZWl2ZWQgcmVjZWl2ZWRMZW46KGludClyZWNlaXZlZExlbiB0d29TOihpbnQpdHdvUyBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2NvbW1vbi9yZWVkc29sb21vbi9aWFJlZWRTb2xvbW9uRGVjb2Rlci5tIGIvWlhpbmdPYmpDL2NvbW1vbi9yZWVkc29sb21vbi9aWFJlZWRTb2xvbW9uRGVjb2Rlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOWJkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvY29tbW9uL3JlZWRzb2xvbW9uL1pYUmVlZFNvbG9tb25EZWNvZGVyLm0KQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEdlbmVyaWNHRi5oIgorI2ltcG9ydCAiWlhHZW5lcmljR0ZQb2x5LmgiCisjaW1wb3J0ICJaWFJlZWRTb2xvbW9uRGVjb2Rlci5oIgorCitAaW50ZXJmYWNlIFpYUmVlZFNvbG9tb25EZWNvZGVyICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYR2VuZXJpY0dGICpmaWVsZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhSZWVkU29sb21vbkRlY29kZXIKKworLSAoaWQpaW5pdFdpdGhGaWVsZDooWlhHZW5lcmljR0YgKilmaWVsZCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2ZpZWxkID0gZmllbGQ7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLyoqCisgKiBEZWNvZGVzIGdpdmVuIHNldCBvZiByZWNlaXZlZCBjb2Rld29yZHMsIHdoaWNoIGluY2x1ZGUgYm90aCBkYXRhIGFuZCBlcnJvci1jb3JyZWN0aW9uCisgKiBjb2Rld29yZHMuIFJlYWxseSwgdGhpcyBtZWFucyBpdCB1c2VzIFJlZWQtU29sb21vbiB0byBkZXRlY3QgYW5kIGNvcnJlY3QgZXJyb3JzLCBpbi1wbGFjZSwKKyAqIGluIHRoZSBpbnB1dC4KKyAqLworLSAoQk9PTClkZWNvZGU6KGludCAqKXJlY2VpdmVkIHJlY2VpdmVkTGVuOihpbnQpcmVjZWl2ZWRMZW4gdHdvUzooaW50KXR3b1MgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWEdlbmVyaWNHRlBvbHkgKnBvbHkgPSBbW1pYR2VuZXJpY0dGUG9seSBhbGxvY10gaW5pdFdpdGhGaWVsZDpzZWxmLmZpZWxkIGNvZWZmaWNpZW50czpyZWNlaXZlZCBjb2VmZmljaWVudHNMZW46cmVjZWl2ZWRMZW5dOworICBpbnQgc3luZHJvbWVDb2VmZmljaWVudHNMZW4gPSB0d29TOworICBpbnQgc3luZHJvbWVDb2VmZmljaWVudHNbc3luZHJvbWVDb2VmZmljaWVudHNMZW5dOworICBCT09MIG5vRXJyb3IgPSBZRVM7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCB0d29TOyBpKyspIHsKKyAgICBpbnQgZXZhbCA9IFtwb2x5IGV2YWx1YXRlQXQ6W3NlbGYuZmllbGQgZXhwOmkgKyBzZWxmLmZpZWxkLmdlbmVyYXRvckJhc2VdXTsKKyAgICBzeW5kcm9tZUNvZWZmaWNpZW50c1tzeW5kcm9tZUNvZWZmaWNpZW50c0xlbiAtIDEgLSBpXSA9IGV2YWw7CisgICAgaWYgKGV2YWwgIT0gMCkgeworICAgICAgbm9FcnJvciA9IE5POworICAgIH0KKyAgfQorICBpZiAobm9FcnJvcikgeworICAgIHJldHVybiBZRVM7CisgIH0KKyAgWlhHZW5lcmljR0ZQb2x5ICpzeW5kcm9tZSA9IFtbWlhHZW5lcmljR0ZQb2x5IGFsbG9jXSBpbml0V2l0aEZpZWxkOnNlbGYuZmllbGQgY29lZmZpY2llbnRzOnN5bmRyb21lQ29lZmZpY2llbnRzIGNvZWZmaWNpZW50c0xlbjpzeW5kcm9tZUNvZWZmaWNpZW50c0xlbl07CisgIE5TQXJyYXkgKnNpZ21hT21lZ2EgPSBbc2VsZiBydW5FdWNsaWRlYW5BbGdvcml0aG06W3NlbGYuZmllbGQgYnVpbGRNb25vbWlhbDp0d29TIGNvZWZmaWNpZW50OjFdIGI6c3luZHJvbWUgUjp0d29TIGVycm9yOmVycm9yXTsKKyAgaWYgKCFzaWdtYU9tZWdhKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIFpYR2VuZXJpY0dGUG9seSAqc2lnbWEgPSBzaWdtYU9tZWdhWzBdOworICBaWEdlbmVyaWNHRlBvbHkgKm9tZWdhID0gc2lnbWFPbWVnYVsxXTsKKyAgTlNBcnJheSAqZXJyb3JMb2NhdGlvbnMgPSBbc2VsZiBmaW5kRXJyb3JMb2NhdGlvbnM6c2lnbWEgZXJyb3I6ZXJyb3JdOworICBpZiAoIWVycm9yTG9jYXRpb25zKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIE5TQXJyYXkgKmVycm9yTWFnbml0dWRlcyA9IFtzZWxmIGZpbmRFcnJvck1hZ25pdHVkZXM6b21lZ2EgZXJyb3JMb2NhdGlvbnM6ZXJyb3JMb2NhdGlvbnNdOworICBmb3IgKGludCBpID0gMDsgaSA8IFtlcnJvckxvY2F0aW9ucyBjb3VudF07IGkrKykgeworICAgIGludCBwb3NpdGlvbiA9IHJlY2VpdmVkTGVuIC0gMSAtIFtzZWxmLmZpZWxkIGxvZzpbZXJyb3JMb2NhdGlvbnNbaV0gaW50VmFsdWVdXTsKKyAgICBpZiAocG9zaXRpb24gPCAwKSB7CisgICAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAIkJhZCBlcnJvciBsb2NhdGlvbiJ9OworICAgICAgCisgICAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYUmVlZFNvbG9tb25FcnJvciB1c2VySW5mbzp1c2VySW5mb107CisgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIHJlY2VpdmVkW3Bvc2l0aW9uXSA9IFtaWEdlbmVyaWNHRiBhZGRPclN1YnRyYWN0OnJlY2VpdmVkW3Bvc2l0aW9uXSBiOltlcnJvck1hZ25pdHVkZXNbaV0gaW50VmFsdWVdXTsKKyAgfQorICByZXR1cm4gWUVTOworfQorCistIChOU0FycmF5ICopcnVuRXVjbGlkZWFuQWxnb3JpdGhtOihaWEdlbmVyaWNHRlBvbHkgKilhIGI6KFpYR2VuZXJpY0dGUG9seSAqKWIgUjooaW50KVIgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoYS5kZWdyZWUgPCBiLmRlZ3JlZSkgeworICAgIFpYR2VuZXJpY0dGUG9seSAqdGVtcCA9IGE7CisgICAgYSA9IGI7CisgICAgYiA9IHRlbXA7CisgIH0KKworICBaWEdlbmVyaWNHRlBvbHkgKnJMYXN0ID0gYTsKKyAgWlhHZW5lcmljR0ZQb2x5ICpyID0gYjsKKyAgWlhHZW5lcmljR0ZQb2x5ICp0TGFzdCA9IHNlbGYuZmllbGQuemVybzsKKyAgWlhHZW5lcmljR0ZQb2x5ICp0ID0gc2VsZi5maWVsZC5vbmU7CisKKyAgd2hpbGUgKFtyIGRlZ3JlZV0gPj0gUiAvIDIpIHsKKyAgICBaWEdlbmVyaWNHRlBvbHkgKnJMYXN0TGFzdCA9IHJMYXN0OworICAgIFpYR2VuZXJpY0dGUG9seSAqdExhc3RMYXN0ID0gdExhc3Q7CisgICAgckxhc3QgPSByOworICAgIHRMYXN0ID0gdDsKKworICAgIGlmIChbckxhc3QgemVyb10pIHsKKyAgICAgIE5TRGljdGlvbmFyeSAqdXNlckluZm8gPSBAe05TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk6IEAicl97aS0xfSB3YXMgemVybyJ9OworCisgICAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYUmVlZFNvbG9tb25FcnJvciB1c2VySW5mbzp1c2VySW5mb107CisgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIHIgPSByTGFzdExhc3Q7CisgICAgWlhHZW5lcmljR0ZQb2x5ICpxID0gW3NlbGYuZmllbGQgemVyb107CisgICAgaW50IGRlbm9taW5hdG9yTGVhZGluZ1Rlcm0gPSBbckxhc3QgY29lZmZpY2llbnQ6W3JMYXN0IGRlZ3JlZV1dOworICAgIGludCBkbHRJbnZlcnNlID0gW3NlbGYuZmllbGQgaW52ZXJzZTpkZW5vbWluYXRvckxlYWRpbmdUZXJtXTsKKworICAgIHdoaWxlIChbciBkZWdyZWVdID49IFtyTGFzdCBkZWdyZWVdICYmICFbciB6ZXJvXSkgeworICAgICAgaW50IGRlZ3JlZURpZmYgPSBbciBkZWdyZWVdIC0gW3JMYXN0IGRlZ3JlZV07CisgICAgICBpbnQgc2NhbGUgPSBbc2VsZi5maWVsZCBtdWx0aXBseTpbciBjb2VmZmljaWVudDpbciBkZWdyZWVdXSBiOmRsdEludmVyc2VdOworICAgICAgcSA9IFtxIGFkZE9yU3VidHJhY3Q6W3NlbGYuZmllbGQgYnVpbGRNb25vbWlhbDpkZWdyZWVEaWZmIGNvZWZmaWNpZW50OnNjYWxlXV07CisgICAgICByID0gW3IgYWRkT3JTdWJ0cmFjdDpbckxhc3QgbXVsdGlwbHlCeU1vbm9taWFsOmRlZ3JlZURpZmYgY29lZmZpY2llbnQ6c2NhbGVdXTsKKyAgICB9CisKKyAgICB0ID0gW1txIG11bHRpcGx5OnRMYXN0XSBhZGRPclN1YnRyYWN0OnRMYXN0TGFzdF07CisKKyAgICBpZiAoci5kZWdyZWUgPj0gckxhc3QuZGVncmVlKSB7CisgICAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOkAiSWxsZWdhbFN0YXRlRXhjZXB0aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpAIkRpdmlzaW9uIGFsZ29yaXRobSBmYWlsZWQgdG8gcmVkdWNlIHBvbHlub21pYWw/IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWxdOworICAgIH0KKyAgfQorCisgIGludCBzaWdtYVRpbGRlQXRaZXJvID0gW3QgY29lZmZpY2llbnQ6MF07CisgIGlmIChzaWdtYVRpbGRlQXRaZXJvID09IDApIHsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAInNpZ21hVGlsZGUoMCkgd2FzIHplcm8ifTsKKworICAgIGlmIChlcnJvcikgKmVycm9yID0gW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpaWEVycm9yRG9tYWluIGNvZGU6WlhSZWVkU29sb21vbkVycm9yIHVzZXJJbmZvOnVzZXJJbmZvXTsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBpbnQgaW52ZXJzZSA9IFtzZWxmLmZpZWxkIGludmVyc2U6c2lnbWFUaWxkZUF0WmVyb107CisgIFpYR2VuZXJpY0dGUG9seSAqc2lnbWEgPSBbdCBtdWx0aXBseVNjYWxhcjppbnZlcnNlXTsKKyAgWlhHZW5lcmljR0ZQb2x5ICpvbWVnYSA9IFtyIG11bHRpcGx5U2NhbGFyOmludmVyc2VdOworICByZXR1cm4gQFtzaWdtYSwgb21lZ2FdOworfQorCistIChOU0FycmF5ICopZmluZEVycm9yTG9jYXRpb25zOihaWEdlbmVyaWNHRlBvbHkgKillcnJvckxvY2F0b3IgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQgbnVtRXJyb3JzID0gW2Vycm9yTG9jYXRvciBkZWdyZWVdOworICBpZiAobnVtRXJyb3JzID09IDEpIHsKKyAgICByZXR1cm4gQFtAKFtlcnJvckxvY2F0b3IgY29lZmZpY2llbnQ6MV0pXTsKKyAgfQorICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Om51bUVycm9yc107CisgIGludCBlID0gMDsKKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBbc2VsZi5maWVsZCBzaXplXSAmJiBlIDwgbnVtRXJyb3JzOyBpKyspIHsKKyAgICBpZiAoW2Vycm9yTG9jYXRvciBldmFsdWF0ZUF0OmldID09IDApIHsKKyAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OkAoW3NlbGYuZmllbGQgaW52ZXJzZTppXSldOworICAgICAgZSsrOworICAgIH0KKyAgfQorCisgIGlmIChlICE9IG51bUVycm9ycykgeworICAgIE5TRGljdGlvbmFyeSAqdXNlckluZm8gPSBAe05TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk6IEAiRXJyb3IgbG9jYXRvciBkZWdyZWUgZG9lcyBub3QgbWF0Y2ggbnVtYmVyIG9mIHJvb3RzIn07CisgICAgCisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlpYRXJyb3JEb21haW4gY29kZTpaWFJlZWRTb2xvbW9uRXJyb3IgdXNlckluZm86dXNlckluZm9dOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNBcnJheSAqKWZpbmRFcnJvck1hZ25pdHVkZXM6KFpYR2VuZXJpY0dGUG9seSAqKWVycm9yRXZhbHVhdG9yIGVycm9yTG9jYXRpb25zOihOU0FycmF5ICopZXJyb3JMb2NhdGlvbnMgeworICBOU1VJbnRlZ2VyIHMgPSBbZXJyb3JMb2NhdGlvbnMgY291bnRdOworICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzOyBpKyspIHsKKyAgICBpbnQgeGlJbnZlcnNlID0gW3NlbGYuZmllbGQgaW52ZXJzZTpbZXJyb3JMb2NhdGlvbnNbaV0gaW50VmFsdWVdXTsKKyAgICBpbnQgZGVub21pbmF0b3IgPSAxOworICAgIGZvciAoaW50IGogPSAwOyBqIDwgczsgaisrKSB7CisgICAgICBpZiAoaSAhPSBqKSB7CisgICAgICAgIGludCB0ZXJtID0gW3NlbGYuZmllbGQgbXVsdGlwbHk6W2Vycm9yTG9jYXRpb25zW2pdIGludFZhbHVlXSBiOnhpSW52ZXJzZV07CisgICAgICAgIGludCB0ZXJtUGx1czEgPSAodGVybSAmIDB4MSkgPT0gMCA/IHRlcm0gfCAxIDogdGVybSAmIH4xOworICAgICAgICBkZW5vbWluYXRvciA9IFtzZWxmLmZpZWxkIG11bHRpcGx5OmRlbm9taW5hdG9yIGI6dGVybVBsdXMxXTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBbcmVzdWx0IGFkZE9iamVjdDpAKFtzZWxmLmZpZWxkIG11bHRpcGx5OltlcnJvckV2YWx1YXRvciBldmFsdWF0ZUF0OnhpSW52ZXJzZV0gYjpbc2VsZi5maWVsZCBpbnZlcnNlOmRlbm9taW5hdG9yXV0pXTsKKyAgICBpZiAoc2VsZi5maWVsZC5nZW5lcmF0b3JCYXNlICE9IDApIHsKKyAgICAgIHJlc3VsdFtpXSA9IEAoW3NlbGYuZmllbGQgbXVsdGlwbHk6W3Jlc3VsdFtpXSBpbnRWYWx1ZV0gYjp4aUludmVyc2VdKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvY29tbW9uL3JlZWRzb2xvbW9uL1pYUmVlZFNvbG9tb25FbmNvZGVyLmggYi9aWGluZ09iakMvY29tbW9uL3JlZWRzb2xvbW9uL1pYUmVlZFNvbG9tb25FbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA3MzcyMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9jb21tb24vcmVlZHNvbG9tb24vWlhSZWVkU29sb21vbkVuY29kZXIuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEltcGxlbWVudHMgUmVlZC1Tb2xvbW9uIGVuYmNvZGluZywgYXMgdGhlIG5hbWUgaW1wbGllcy4KKyAqLworCitAY2xhc3MgWlhHZW5lcmljR0Y7CisKK0BpbnRlcmZhY2UgWlhSZWVkU29sb21vbkVuY29kZXIgOiBOU09iamVjdAorCistIChpZClpbml0V2l0aEZpZWxkOihaWEdlbmVyaWNHRiAqKWZpZWxkOworLSAodm9pZCllbmNvZGU6KGludCAqKXRvRW5jb2RlIHRvRW5jb2RlTGVuOihpbnQpdG9FbmNvZGVMZW4gZWNCeXRlczooaW50KWVjQnl0ZXM7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9jb21tb24vcmVlZHNvbG9tb24vWlhSZWVkU29sb21vbkVuY29kZXIubSBiL1pYaW5nT2JqQy9jb21tb24vcmVlZHNvbG9tb24vWlhSZWVkU29sb21vbkVuY29kZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmZhYzhmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2NvbW1vbi9yZWVkc29sb21vbi9aWFJlZWRTb2xvbW9uRW5jb2Rlci5tCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYR2VuZXJpY0dGLmgiCisjaW1wb3J0ICJaWEdlbmVyaWNHRlBvbHkuaCIKKyNpbXBvcnQgIlpYUmVlZFNvbG9tb25FbmNvZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhSZWVkU29sb21vbkVuY29kZXIgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlQXJyYXkgKmNhY2hlZEdlbmVyYXRvcnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWEdlbmVyaWNHRiAqZmllbGQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYUmVlZFNvbG9tb25FbmNvZGVyCisKKy0gKGlkKWluaXRXaXRoRmllbGQ6KFpYR2VuZXJpY0dGICopZmllbGQgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9maWVsZCA9IGZpZWxkOworICAgIGludCBvbmUgPSAxOworICAgIF9jYWNoZWRHZW5lcmF0b3JzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aE9iamVjdDpbW1pYR2VuZXJpY0dGUG9seSBhbGxvY10gaW5pdFdpdGhGaWVsZDpmaWVsZCBjb2VmZmljaWVudHM6Jm9uZSBjb2VmZmljaWVudHNMZW46MV1dOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFpYR2VuZXJpY0dGUG9seSAqKWJ1aWxkR2VuZXJhdG9yOihpbnQpZGVncmVlIHsKKyAgaWYgKGRlZ3JlZSA+PSBzZWxmLmNhY2hlZEdlbmVyYXRvcnMuY291bnQpIHsKKyAgICBaWEdlbmVyaWNHRlBvbHkgKmxhc3RHZW5lcmF0b3IgPSBzZWxmLmNhY2hlZEdlbmVyYXRvcnNbW3NlbGYuY2FjaGVkR2VuZXJhdG9ycyBjb3VudF0gLSAxXTsKKyAgICBmb3IgKE5TVUludGVnZXIgZCA9IFtzZWxmLmNhY2hlZEdlbmVyYXRvcnMgY291bnRdOyBkIDw9IGRlZ3JlZTsgZCsrKSB7CisgICAgICBpbnQgbmV4dFsyXSA9IHsgMSwgW3NlbGYuZmllbGQgZXhwOihpbnQpZCAtIDEgKyBzZWxmLmZpZWxkLmdlbmVyYXRvckJhc2VdIH07CisgICAgICBaWEdlbmVyaWNHRlBvbHkgKm5leHRHZW5lcmF0b3IgPSBbbGFzdEdlbmVyYXRvciBtdWx0aXBseTpbW1pYR2VuZXJpY0dGUG9seSBhbGxvY10gaW5pdFdpdGhGaWVsZDpzZWxmLmZpZWxkIGNvZWZmaWNpZW50czpuZXh0IGNvZWZmaWNpZW50c0xlbjoyXV07CisgICAgICBbc2VsZi5jYWNoZWRHZW5lcmF0b3JzIGFkZE9iamVjdDpuZXh0R2VuZXJhdG9yXTsKKyAgICAgIGxhc3RHZW5lcmF0b3IgPSBuZXh0R2VuZXJhdG9yOworICAgIH0KKyAgfQorCisgIHJldHVybiAoWlhHZW5lcmljR0ZQb2x5ICopc2VsZi5jYWNoZWRHZW5lcmF0b3JzW2RlZ3JlZV07Cit9CisKKy0gKHZvaWQpZW5jb2RlOihpbnQgKil0b0VuY29kZSB0b0VuY29kZUxlbjooaW50KXRvRW5jb2RlTGVuIGVjQnl0ZXM6KGludCllY0J5dGVzIHsKKyAgaWYgKGVjQnl0ZXMgPT0gMCkgeworICAgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOkAiTm8gZXJyb3IgY29ycmVjdGlvbiBieXRlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgIH0KKyAgaW50IGRhdGFCeXRlcyA9IHRvRW5jb2RlTGVuIC0gZWNCeXRlczsKKyAgaWYgKGRhdGFCeXRlcyA8PSAwKSB7CisgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246QCJObyBkYXRhIGJ5dGVzIHByb3ZpZGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKKyAgfQorICBaWEdlbmVyaWNHRlBvbHkgKmdlbmVyYXRvciA9IFtzZWxmIGJ1aWxkR2VuZXJhdG9yOmVjQnl0ZXNdOworICBpbnQgaW5mb0NvZWZmaWNpZW50c1tkYXRhQnl0ZXNdOworICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGFCeXRlczsgaSsrKSB7CisgICAgaW5mb0NvZWZmaWNpZW50c1tpXSA9IHRvRW5jb2RlW2ldOworICB9CisgIFpYR2VuZXJpY0dGUG9seSAqaW5mbyA9IFtbWlhHZW5lcmljR0ZQb2x5IGFsbG9jXSBpbml0V2l0aEZpZWxkOnNlbGYuZmllbGQgY29lZmZpY2llbnRzOmluZm9Db2VmZmljaWVudHMgY29lZmZpY2llbnRzTGVuOmRhdGFCeXRlc107CisgIGluZm8gPSBbaW5mbyBtdWx0aXBseUJ5TW9ub21pYWw6ZWNCeXRlcyBjb2VmZmljaWVudDoxXTsKKyAgWlhHZW5lcmljR0ZQb2x5ICpyZW1haW5kZXIgPSBbaW5mbyBkaXZpZGU6Z2VuZXJhdG9yXVsxXTsKKyAgaW50ICpjb2VmZmljaWVudHMgPSByZW1haW5kZXIuY29lZmZpY2llbnRzOworICBpbnQgY29lZmZpY2llbnRzTGVuID0gcmVtYWluZGVyLmNvZWZmaWNpZW50c0xlbjsKKyAgaW50IG51bVplcm9Db2VmZmljaWVudHMgPSBlY0J5dGVzIC0gY29lZmZpY2llbnRzTGVuOworICBmb3IgKGludCBpID0gMDsgaSA8IG51bVplcm9Db2VmZmljaWVudHM7IGkrKykgeworICAgIHRvRW5jb2RlW2RhdGFCeXRlcyArIGldID0gMDsKKyAgfQorICBmb3IgKGludCBpID0gMDsgaSA8IGNvZWZmaWNpZW50c0xlbjsgaSsrKSB7CisgICAgdG9FbmNvZGVbZGF0YUJ5dGVzICsgbnVtWmVyb0NvZWZmaWNpZW50cyArIGldID0gY29lZmZpY2llbnRzW2ldOworICB9Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L1pYRGF0YU1hdHJpeFJlYWRlci5oIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvWlhEYXRhTWF0cml4UmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkNzM1OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L1pYRGF0YU1hdHJpeFJlYWRlci5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUmVhZGVyLmgiCisKKy8qKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gZGV0ZWN0IGFuZCBkZWNvZGUgRGF0YSBNYXRyaXggY29kZXMgaW4gYW4gaW1hZ2UuCisgKi8KKworQGNsYXNzIFpYQmluYXJ5Qml0bWFwLCBaWERlY29kZUhpbnRzLCBaWFJlc3VsdDsKKworQGludGVyZmFjZSBaWERhdGFNYXRyaXhSZWFkZXIgOiBOU09iamVjdCA8WlhSZWFkZXI+CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L1pYRGF0YU1hdHJpeFJlYWRlci5tIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvWlhEYXRhTWF0cml4UmVhZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkM2RmNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L1pYRGF0YU1hdHJpeFJlYWRlci5tCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpbmFyeUJpdG1hcC5oIgorI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeERlY29kZXIuaCIKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeFJlYWRlci5oIgorI2ltcG9ydCAiWlhEYXRhTWF0cml4RGV0ZWN0b3IuaCIKKyNpbXBvcnQgIlpYRGVjb2RlSGludHMuaCIKKyNpbXBvcnQgIlpYRGVjb2RlclJlc3VsdC5oIgorI2ltcG9ydCAiWlhEZXRlY3RvclJlc3VsdC5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhEYXRhTWF0cml4UmVhZGVyICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYRGF0YU1hdHJpeERlY29kZXIgKmRlY29kZXI7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYRGF0YU1hdHJpeFJlYWRlcgorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfZGVjb2RlciA9IFtbWlhEYXRhTWF0cml4RGVjb2RlciBhbGxvY10gaW5pdF07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLyoqCisgKiBMb2NhdGVzIGFuZCBkZWNvZGVzIGEgRGF0YSBNYXRyaXggY29kZSBpbiBhbiBpbWFnZS4KKyAqLworLSAoWlhSZXN1bHQgKilkZWNvZGU6KFpYQmluYXJ5Qml0bWFwICopaW1hZ2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW3NlbGYgZGVjb2RlOmltYWdlIGhpbnRzOm5pbCBlcnJvcjplcnJvcl07Cit9CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWERlY29kZXJSZXN1bHQgKmRlY29kZXJSZXN1bHQ7CisgIE5TQXJyYXkgKnBvaW50czsKKyAgaWYgKGhpbnRzICE9IG5pbCAmJiBoaW50cy5wdXJlQmFyY29kZSkgeworICAgIFpYQml0TWF0cml4ICptYXRyaXggPSBbaW1hZ2UgYmxhY2tNYXRyaXhXaXRoRXJyb3I6ZXJyb3JdOworICAgIGlmICghbWF0cml4KSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBaWEJpdE1hdHJpeCAqYml0cyA9IFtzZWxmIGV4dHJhY3RQdXJlQml0czptYXRyaXhdOworICAgIGlmICghYml0cykgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIGRlY29kZXJSZXN1bHQgPSBbc2VsZi5kZWNvZGVyIGRlY29kZU1hdHJpeDpiaXRzIGVycm9yOmVycm9yXTsKKyAgICBpZiAoIWRlY29kZXJSZXN1bHQpIHsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIHBvaW50cyA9IEBbXTsKKyAgfSBlbHNlIHsKKyAgICBaWEJpdE1hdHJpeCAqbWF0cml4ID0gW2ltYWdlIGJsYWNrTWF0cml4V2l0aEVycm9yOmVycm9yXTsKKyAgICBpZiAoIW1hdHJpeCkgeworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgWlhEYXRhTWF0cml4RGV0ZWN0b3IgKmRldGVjdG9yID0gW1taWERhdGFNYXRyaXhEZXRlY3RvciBhbGxvY10gaW5pdFdpdGhJbWFnZTptYXRyaXggZXJyb3I6ZXJyb3JdOworICAgIGlmICghZGV0ZWN0b3IpIHsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIFpYRGV0ZWN0b3JSZXN1bHQgKmRldGVjdG9yUmVzdWx0ID0gW2RldGVjdG9yIGRldGVjdFdpdGhFcnJvcjplcnJvcl07CisgICAgaWYgKCFkZXRlY3RvclJlc3VsdCkgeworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgZGVjb2RlclJlc3VsdCA9IFtzZWxmLmRlY29kZXIgZGVjb2RlTWF0cml4OmRldGVjdG9yUmVzdWx0LmJpdHMgZXJyb3I6ZXJyb3JdOworICAgIGlmICghZGVjb2RlclJlc3VsdCkgeworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgcG9pbnRzID0gZGV0ZWN0b3JSZXN1bHQucG9pbnRzOworICB9CisgIFpYUmVzdWx0ICpyZXN1bHQgPSBbWlhSZXN1bHQgcmVzdWx0V2l0aFRleHQ6ZGVjb2RlclJlc3VsdC50ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Qnl0ZXM6ZGVjb2RlclJlc3VsdC5yYXdCeXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOmRlY29kZXJSZXN1bHQubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRQb2ludHM6cG9pbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6a0JhcmNvZGVGb3JtYXREYXRhTWF0cml4XTsKKyAgaWYgKGRlY29kZXJSZXN1bHQuYnl0ZVNlZ21lbnRzICE9IG5pbCkgeworICAgIFtyZXN1bHQgcHV0TWV0YWRhdGE6a1Jlc3VsdE1ldGFkYXRhVHlwZUJ5dGVTZWdtZW50cyB2YWx1ZTpkZWNvZGVyUmVzdWx0LmJ5dGVTZWdtZW50c107CisgIH0KKyAgaWYgKGRlY29kZXJSZXN1bHQuZWNMZXZlbCAhPSBuaWwpIHsKKyAgICBbcmVzdWx0IHB1dE1ldGFkYXRhOmtSZXN1bHRNZXRhZGF0YVR5cGVFcnJvckNvcnJlY3Rpb25MZXZlbCB2YWx1ZTpkZWNvZGVyUmVzdWx0LmVjTGV2ZWxdOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpIHJlc2V0IHsKKyAgLy8gZG8gbm90aGluZworfQorCisKKy8qKgorICogVGhpcyBtZXRob2QgZGV0ZWN0cyBhIGNvZGUgaW4gYSAicHVyZSIgaW1hZ2UgLS0gdGhhdCBpcywgcHVyZSBtb25vY2hyb21lIGltYWdlCisgKiB3aGljaCBjb250YWlucyBvbmx5IGFuIHVucm90YXRlZCwgdW5za2V3ZWQsIGltYWdlIG9mIGEgY29kZSwgd2l0aCBzb21lIHdoaXRlIGJvcmRlcgorICogYXJvdW5kIGl0LiBUaGlzIGlzIGEgc3BlY2lhbGl6ZWQgbWV0aG9kIHRoYXQgd29ya3MgZXhjZXB0aW9uYWxseSBmYXN0IGluIHRoaXMgc3BlY2lhbAorICogY2FzZS4KKyAqLworLSAoWlhCaXRNYXRyaXggKilleHRyYWN0UHVyZUJpdHM6KFpYQml0TWF0cml4ICopaW1hZ2UgeworICBOU0FycmF5ICpsZWZ0VG9wQmxhY2sgPSBpbWFnZS50b3BMZWZ0T25CaXQ7CisgIE5TQXJyYXkgKnJpZ2h0Qm90dG9tQmxhY2sgPSBpbWFnZS5ib3R0b21SaWdodE9uQml0OworICBpZiAobGVmdFRvcEJsYWNrID09IG5pbCB8fCByaWdodEJvdHRvbUJsYWNrID09IG5pbCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpbnQgbW9kdWxlU2l6ZSA9IFtzZWxmIG1vZHVsZVNpemU6bGVmdFRvcEJsYWNrIGltYWdlOmltYWdlXTsKKyAgaWYgKG1vZHVsZVNpemUgPT0gLTEpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaW50IHRvcCA9IFtsZWZ0VG9wQmxhY2tbMV0gaW50VmFsdWVdOworICBpbnQgYm90dG9tID0gW3JpZ2h0Qm90dG9tQmxhY2tbMV0gaW50VmFsdWVdOworICBpbnQgbGVmdCA9IFtsZWZ0VG9wQmxhY2tbMF0gaW50VmFsdWVdOworICBpbnQgcmlnaHQgPSBbcmlnaHRCb3R0b21CbGFja1swXSBpbnRWYWx1ZV07CisKKyAgaW50IG1hdHJpeFdpZHRoID0gKHJpZ2h0IC0gbGVmdCArIDEpIC8gbW9kdWxlU2l6ZTsKKyAgaW50IG1hdHJpeEhlaWdodCA9IChib3R0b20gLSB0b3AgKyAxKSAvIG1vZHVsZVNpemU7CisgIGlmIChtYXRyaXhXaWR0aCA8PSAwIHx8IG1hdHJpeEhlaWdodCA8PSAwKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGludCBudWRnZSA9IG1vZHVsZVNpemUgPj4gMTsKKyAgdG9wICs9IG51ZGdlOworICBsZWZ0ICs9IG51ZGdlOworCisgIFpYQml0TWF0cml4ICpiaXRzID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDptYXRyaXhXaWR0aCBoZWlnaHQ6bWF0cml4SGVpZ2h0XTsKKyAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXRyaXhIZWlnaHQ7IHkrKykgeworICAgIGludCBpT2Zmc2V0ID0gdG9wICsgeSAqIG1vZHVsZVNpemU7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtYXRyaXhXaWR0aDsgeCsrKSB7CisgICAgICBpZiAoW2ltYWdlIGdldFg6bGVmdCArIHggKiBtb2R1bGVTaXplIHk6aU9mZnNldF0pIHsKKyAgICAgICAgW2JpdHMgc2V0WDp4IHk6eV07CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIGJpdHM7Cit9CisKKy0gKGludCltb2R1bGVTaXplOihOU0FycmF5ICopbGVmdFRvcEJsYWNrIGltYWdlOihaWEJpdE1hdHJpeCAqKWltYWdlIHsKKyAgaW50IHdpZHRoID0gaW1hZ2Uud2lkdGg7CisgIGludCB4ID0gW2xlZnRUb3BCbGFja1swXSBpbnRWYWx1ZV07CisgIGludCB5ID0gW2xlZnRUb3BCbGFja1sxXSBpbnRWYWx1ZV07CisgIHdoaWxlICh4IDwgd2lkdGggJiYgW2ltYWdlIGdldFg6eCB5OnldKSB7CisgICAgeCsrOworICB9CisgIGlmICh4ID09IHdpZHRoKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaW50IG1vZHVsZVNpemUgPSB4IC0gW2xlZnRUb3BCbGFja1swXSBpbnRWYWx1ZV07CisgIGlmIChtb2R1bGVTaXplID09IDApIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuIG1vZHVsZVNpemU7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L1pYRGF0YU1hdHJpeFdyaXRlci5oIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvWlhEYXRhTWF0cml4V3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2MmNkNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L1pYRGF0YU1hdHJpeFdyaXRlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYV3JpdGVyLmgiCisKKy8qKgorICogVGhpcyBvYmplY3QgcmVuZGVycyBhIERhdGEgTWF0cml4IGNvZGUgYXMgYSBCaXRNYXRyaXggMkQgYXJyYXkgb2YgZ3JleXNjYWxlIHZhbHVlcy4KKyAqLworCitAaW50ZXJmYWNlIFpYRGF0YU1hdHJpeFdyaXRlciA6IE5TT2JqZWN0IDxaWFdyaXRlcj4KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvWlhEYXRhTWF0cml4V3JpdGVyLm0gYi9aWGluZ09iakMvZGF0YW1hdHJpeC9aWERhdGFNYXRyaXhXcml0ZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2FhZTljCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvWlhEYXRhTWF0cml4V3JpdGVyLm0KQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0TWF0cml4LmgiCisjaW1wb3J0ICJaWEJ5dGVNYXRyaXguaCIKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5oIgorI2ltcG9ydCAiWlhEYXRhTWF0cml4V3JpdGVyLmgiCisjaW1wb3J0ICJaWERlZmF1bHRQbGFjZW1lbnQuaCIKKyNpbXBvcnQgIlpYRGltZW5zaW9uLmgiCisjaW1wb3J0ICJaWEVuY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWEhpZ2hMZXZlbEVuY29kZXIuaCIKKyNpbXBvcnQgIlpYU3ltYm9sSW5mby5oIgorI2ltcG9ydCAiWlhTeW1ib2xTaGFwZUhpbnQuaCIKKworQGltcGxlbWVudGF0aW9uIFpYRGF0YU1hdHJpeFdyaXRlcgorCistIChaWEJpdE1hdHJpeCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW3NlbGYgZW5jb2RlOmNvbnRlbnRzIGZvcm1hdDpmb3JtYXQgd2lkdGg6d2lkdGggaGVpZ2h0OmhlaWdodCBoaW50czpuaWwgZXJyb3I6ZXJyb3JdOworfQorCistIChaWEJpdE1hdHJpeCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgaGludHM6KFpYRW5jb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGlmIChjb250ZW50cy5sZW5ndGggPT0gMCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJGb3VuZCBlbXB0eSBjb250ZW50cyJdOworICB9CisKKyAgaWYgKGZvcm1hdCAhPSBrQmFyY29kZUZvcm1hdERhdGFNYXRyaXgpIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiQ2FuIG9ubHkgZW5jb2RlIGtCYXJjb2RlRm9ybWF0RGF0YU1hdHJpeCJdOworICB9CisKKyAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgZm9ybWF0OkAiUmVxdWVzdGVkIGRpbWVuc2lvbnMgYXJlIHRvbyBzbWFsbDogJWR4JWQiLCB3aWR0aCwgaGVpZ2h0XTsKKyAgfQorCisgIC8vIFRyeSB0byBnZXQgZm9yY2Ugc2hhcGUgJiBtaW4gLyBtYXggc2l6ZQorICBaWFN5bWJvbFNoYXBlSGludCAqc2hhcGUgPSBbWlhTeW1ib2xTaGFwZUhpbnQgZm9yY2VOb25lXTsKKyAgWlhEaW1lbnNpb24gKm1pblNpemUgPSBuaWw7CisgIFpYRGltZW5zaW9uICptYXhTaXplID0gbmlsOworICBpZiAoaGludHMgIT0gbmlsKSB7CisgICAgWlhTeW1ib2xTaGFwZUhpbnQgKnJlcXVlc3RlZFNoYXBlID0gaGludHMuZGF0YU1hdHJpeFNoYXBlOworICAgIGlmIChyZXF1ZXN0ZWRTaGFwZSAhPSBuaWwpIHsKKyAgICAgIHNoYXBlID0gcmVxdWVzdGVkU2hhcGU7CisgICAgfQorICAgIFpYRGltZW5zaW9uICpyZXF1ZXN0ZWRNaW5TaXplID0gaGludHMubWluU2l6ZTsKKyAgICBpZiAocmVxdWVzdGVkTWluU2l6ZSAhPSBuaWwpIHsKKyAgICAgIG1pblNpemUgPSByZXF1ZXN0ZWRNaW5TaXplOworICAgIH0KKyAgICBaWERpbWVuc2lvbiAqcmVxdWVzdGVkTWF4U2l6ZSA9IGhpbnRzLm1heFNpemU7CisgICAgaWYgKHJlcXVlc3RlZE1heFNpemUgIT0gbmlsKSB7CisgICAgICBtYXhTaXplID0gcmVxdWVzdGVkTWF4U2l6ZTsKKyAgICB9CisgIH0KKworICAvLzEuIHN0ZXA6IERhdGEgZW5jb2RhdGlvbgorICBOU1N0cmluZyAqZW5jb2RlZCA9IFtaWEhpZ2hMZXZlbEVuY29kZXIgZW5jb2RlSGlnaExldmVsOmNvbnRlbnRzIHNoYXBlOnNoYXBlIG1pblNpemU6bWluU2l6ZSBtYXhTaXplOm1heFNpemVdOworCisgIFpYU3ltYm9sSW5mbyAqc3ltYm9sSW5mbyA9IFtaWFN5bWJvbEluZm8gbG9va3VwOihpbnQpZW5jb2RlZC5sZW5ndGggc2hhcGU6c2hhcGUgbWluU2l6ZTptaW5TaXplIG1heFNpemU6bWF4U2l6ZSBmYWlsOllFU107CisKKyAgLy8yLiBzdGVwOiBFQ0MgZ2VuZXJhdGlvbgorICBOU1N0cmluZyAqY29kZXdvcmRzID0gW1pYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbiBlbmNvZGVFQ0MyMDA6ZW5jb2RlZCBzeW1ib2xJbmZvOnN5bWJvbEluZm9dOworCisgIC8vMy4gc3RlcDogTW9kdWxlIHBsYWNlbWVudCBpbiBNYXRyaXgKKyAgWlhEZWZhdWx0UGxhY2VtZW50ICpwbGFjZW1lbnQgPSBbW1pYRGVmYXVsdFBsYWNlbWVudCBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6Y29kZXdvcmRzIG51bWNvbHM6c3ltYm9sSW5mby5zeW1ib2xEYXRhV2lkdGggbnVtcm93czpzeW1ib2xJbmZvLnN5bWJvbERhdGFIZWlnaHRdOworICBbcGxhY2VtZW50IHBsYWNlXTsKKworICAvLzQuIHN0ZXA6IGxvdy1sZXZlbCBlbmNvZGluZworICByZXR1cm4gW3NlbGYgZW5jb2RlTG93TGV2ZWw6cGxhY2VtZW50IHN5bWJvbEluZm86c3ltYm9sSW5mb107Cit9CisKKy8qKgorICogRW5jb2RlIHRoZSBnaXZlbiBzeW1ib2wgaW5mbyB0byBhIGJpdCBtYXRyaXguCisgKi8KKy0gKFpYQml0TWF0cml4ICopZW5jb2RlTG93TGV2ZWw6KFpYRGVmYXVsdFBsYWNlbWVudCAqKXBsYWNlbWVudCBzeW1ib2xJbmZvOihaWFN5bWJvbEluZm8gKilzeW1ib2xJbmZvIHsKKyAgaW50IHN5bWJvbFdpZHRoID0gc3ltYm9sSW5mby5zeW1ib2xEYXRhV2lkdGg7CisgIGludCBzeW1ib2xIZWlnaHQgPSBzeW1ib2xJbmZvLnN5bWJvbERhdGFIZWlnaHQ7CisKKyAgWlhCeXRlTWF0cml4ICptYXRyaXggPSBbW1pYQnl0ZU1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDpzeW1ib2xJbmZvLnN5bWJvbFdpZHRoIGhlaWdodDpzeW1ib2xJbmZvLnN5bWJvbEhlaWdodF07CisKKyAgaW50IG1hdHJpeFkgPSAwOworCisgIGZvciAoaW50IHkgPSAwOyB5IDwgc3ltYm9sSGVpZ2h0OyB5KyspIHsKKyAgICAvLyBGaWxsIHRoZSB0b3AgZWRnZSB3aXRoIGFsdGVybmF0ZSAwIC8gMQorICAgIGludCBtYXRyaXhYOworICAgIGlmICgoeSAlIHN5bWJvbEluZm8ubWF0cml4SGVpZ2h0KSA9PSAwKSB7CisgICAgICBtYXRyaXhYID0gMDsKKyAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgc3ltYm9sSW5mby5zeW1ib2xXaWR0aDsgeCsrKSB7CisgICAgICAgIFttYXRyaXggc2V0WDptYXRyaXhYIHk6bWF0cml4WSBib29sVmFsdWU6KHggJSAyKSA9PSAwXTsKKyAgICAgICAgbWF0cml4WCsrOworICAgICAgfQorICAgICAgbWF0cml4WSsrOworICAgIH0KKyAgICBtYXRyaXhYID0gMDsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHN5bWJvbFdpZHRoOyB4KyspIHsKKyAgICAgIC8vIEZpbGwgdGhlIHJpZ2h0IGVkZ2Ugd2l0aCBmdWxsIDEKKyAgICAgIGlmICgoeCAlIHN5bWJvbEluZm8ubWF0cml4V2lkdGgpID09IDApIHsKKyAgICAgICAgW21hdHJpeCBzZXRYOm1hdHJpeFggeTptYXRyaXhZIGJvb2xWYWx1ZTpZRVNdOworICAgICAgICBtYXRyaXhYKys7CisgICAgICB9CisgICAgICBbbWF0cml4IHNldFg6bWF0cml4WCB5Om1hdHJpeFkgYm9vbFZhbHVlOltwbGFjZW1lbnQgYml0QXRDb2w6eCByb3c6eV1dOworICAgICAgbWF0cml4WCsrOworICAgICAgLy8gRmlsbCB0aGUgcmlnaHQgZWRnZSB3aXRoIGFsdGVybmF0ZSAwIC8gMQorICAgICAgaWYgKCh4ICUgc3ltYm9sSW5mby5tYXRyaXhXaWR0aCkgPT0gc3ltYm9sSW5mby5tYXRyaXhXaWR0aCAtIDEpIHsKKyAgICAgICAgW21hdHJpeCBzZXRYOm1hdHJpeFggeTptYXRyaXhZIGJvb2xWYWx1ZTooeSAlIDIpID09IDBdOworICAgICAgICBtYXRyaXhYKys7CisgICAgICB9CisgICAgfQorICAgIG1hdHJpeFkrKzsKKyAgICAvLyBGaWxsIHRoZSBib3R0b20gZWRnZSB3aXRoIGZ1bGwgMQorICAgIGlmICgoeSAlIHN5bWJvbEluZm8ubWF0cml4SGVpZ2h0KSA9PSBzeW1ib2xJbmZvLm1hdHJpeEhlaWdodCAtIDEpIHsKKyAgICAgIG1hdHJpeFggPSAwOworICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBzeW1ib2xJbmZvLnN5bWJvbFdpZHRoOyB4KyspIHsKKyAgICAgICAgW21hdHJpeCBzZXRYOm1hdHJpeFggeTptYXRyaXhZIGJvb2xWYWx1ZTpZRVNdOworICAgICAgICBtYXRyaXhYKys7CisgICAgICB9CisgICAgICBtYXRyaXhZKys7CisgICAgfQorICB9CisKKyAgcmV0dXJuIFtzZWxmIGNvbnZlcnRCeXRlTWF0cml4VG9CaXRNYXRyaXg6bWF0cml4XTsKK30KKworLyoqCisgKiBDb252ZXJ0IHRoZSBCeXRlTWF0cml4IHRvIEJpdE1hdHJpeC4KKyAqLworLSAoWlhCaXRNYXRyaXggKiljb252ZXJ0Qnl0ZU1hdHJpeFRvQml0TWF0cml4OihaWEJ5dGVNYXRyaXggKiltYXRyaXggeworICBpbnQgbWF0cml4V2lkZ3RoID0gbWF0cml4LndpZHRoOworICBpbnQgbWF0cml4SGVpZ2h0ID0gbWF0cml4LmhlaWdodDsKKworICBaWEJpdE1hdHJpeCAqb3V0cHV0ID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDptYXRyaXhXaWRndGggaGVpZ2h0Om1hdHJpeEhlaWdodF07CisgIFtvdXRwdXQgY2xlYXJdOworICBmb3IgKGludCBpID0gMDsgaSA8IG1hdHJpeFdpZGd0aDsgaSsrKSB7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtYXRyaXhIZWlnaHQ7IGorKykgeworICAgICAgLy8gWmVybyBpcyB3aGl0ZSBpbiB0aGUgYnl0ZW1hdHJpeAorICAgICAgaWYgKFttYXRyaXggZ2V0WDppIHk6al0gPT0gMSkgeworICAgICAgICBbb3V0cHV0IHNldFg6aSB5OmpdOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBvdXRwdXQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyLmggYi9aWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyL1pYRGF0YU1hdHJpeEJpdE1hdHJpeFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZDBiMDkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyL1pYRGF0YU1hdHJpeEJpdE1hdHJpeFBhcnNlci5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BjbGFzcyBaWEJpdE1hdHJpeCwgWlhEYXRhTWF0cml4VmVyc2lvbjsKKworQGludGVyZmFjZSBaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgWlhEYXRhTWF0cml4VmVyc2lvbiAqdmVyc2lvbjsKKworLSAoaWQpaW5pdFdpdGhCaXRNYXRyaXg6KFpYQml0TWF0cml4ICopYml0TWF0cml4IGVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoTlNBcnJheSAqKXJlYWRDb2Rld29yZHM7CistIChCT09MKXJlYWRNb2R1bGU6KGludClyb3cgY29sdW1uOihpbnQpY29sdW1uIG51bVJvd3M6KGludCludW1Sb3dzIG51bUNvbHVtbnM6KGludCludW1Db2x1bW5zOworLSAoaW50KXJlYWRVdGFoOihpbnQpcm93IGNvbHVtbjooaW50KWNvbHVtbiBudW1Sb3dzOihpbnQpbnVtUm93cyBudW1Db2x1bW5zOihpbnQpbnVtQ29sdW1uczsKKy0gKGludClyZWFkQ29ybmVyMTooaW50KW51bVJvd3MgbnVtQ29sdW1uczooaW50KW51bUNvbHVtbnM7CistIChpbnQpcmVhZENvcm5lcjI6KGludCludW1Sb3dzIG51bUNvbHVtbnM6KGludCludW1Db2x1bW5zOworLSAoaW50KXJlYWRDb3JuZXIzOihpbnQpbnVtUm93cyBudW1Db2x1bW5zOihpbnQpbnVtQ29sdW1uczsKKy0gKGludClyZWFkQ29ybmVyNDooaW50KW51bVJvd3MgbnVtQ29sdW1uczooaW50KW51bUNvbHVtbnM7CistIChaWEJpdE1hdHJpeCAqKWV4dHJhY3REYXRhUmVnaW9uOihaWEJpdE1hdHJpeCAqKWJpdE1hdHJpeDsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZGVjb2Rlci9aWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIubSBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5ZDZjMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyLm0KQEAgLTAsMCArMSw0MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0TWF0cml4LmgiCisjaW1wb3J0ICJaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIuaCIKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeFZlcnNpb24uaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisKK0BpbnRlcmZhY2UgWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYQml0TWF0cml4ICptYXBwaW5nQml0TWF0cml4OworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhCaXRNYXRyaXggKnJlYWRNYXBwaW5nTWF0cml4OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIKKworLSAoaWQpaW5pdFdpdGhCaXRNYXRyaXg6KFpYQml0TWF0cml4ICopYml0TWF0cml4IGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBpbnQgZGltZW5zaW9uID0gYml0TWF0cml4LmhlaWdodDsKKyAgICBpZiAoZGltZW5zaW9uIDwgOCB8fCBkaW1lbnNpb24gPiAxNDQgfHwgKGRpbWVuc2lvbiAmIDB4MDEpICE9IDApIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgX3ZlcnNpb24gPSBbc2VsZiByZWFkVmVyc2lvbjpiaXRNYXRyaXhdOworICAgIGlmICghX3ZlcnNpb24pIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgX21hcHBpbmdCaXRNYXRyaXggPSBbc2VsZiBleHRyYWN0RGF0YVJlZ2lvbjpiaXRNYXRyaXhdOworICAgIF9yZWFkTWFwcGluZ01hdHJpeCA9IFtbWlhCaXRNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6X21hcHBpbmdCaXRNYXRyaXgud2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Ol9tYXBwaW5nQml0TWF0cml4LmhlaWdodF07CisgIH0KKyAgCisgIHJldHVybiBzZWxmOworfQorCisvKioKKyAqIENyZWF0ZXMgdGhlIHZlcnNpb24gb2JqZWN0IGJhc2VkIG9uIHRoZSBkaW1lbnNpb24gb2YgdGhlIG9yaWdpbmFsIGJpdCBtYXRyaXggZnJvbSAKKyAqIHRoZSBkYXRhbWF0cml4IGNvZGUuCisgKiAKKyAqIFNlZSBJU08gMTYwMjI6MjAwNiBUYWJsZSA3IC0gRUNDIDIwMCBzeW1ib2wgYXR0cmlidXRlcworICovCistIChaWERhdGFNYXRyaXhWZXJzaW9uICopcmVhZFZlcnNpb246KFpYQml0TWF0cml4ICopYml0TWF0cml4IHsKKyAgaW50IG51bVJvd3MgPSBiaXRNYXRyaXguaGVpZ2h0OworICBpbnQgbnVtQ29sdW1ucyA9IGJpdE1hdHJpeC53aWR0aDsKKyAgcmV0dXJuIFtaWERhdGFNYXRyaXhWZXJzaW9uIHZlcnNpb25Gb3JEaW1lbnNpb25zOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXTsKK30KKworCisvKioKKyAqIFJlYWRzIHRoZSBiaXRzIGluIHRoZSB7QGxpbmsgQml0TWF0cml4fSByZXByZXNlbnRpbmcgdGhlIG1hcHBpbmcgbWF0cml4IChObyBhbGlnbm1lbnQgcGF0dGVybnMpCisgKiBpbiB0aGUgY29ycmVjdCBvcmRlciBpbiBvcmRlciB0byByZWNvbnN0aXR1dGUgdGhlIGNvZGV3b3JkcyBieXRlcyBjb250YWluZWQgd2l0aGluIHRoZQorICogRGF0YSBNYXRyaXggQ29kZS4KKyAqLworLSAoTlNBcnJheSAqKXJlYWRDb2Rld29yZHMgeworICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnNlbGYudmVyc2lvbi50b3RhbENvZGV3b3Jkc107CisgIAorICBpbnQgcm93ID0gNDsKKyAgaW50IGNvbHVtbiA9IDA7CisgIAorICBpbnQgbnVtUm93cyA9IHNlbGYubWFwcGluZ0JpdE1hdHJpeC5oZWlnaHQ7CisgIGludCBudW1Db2x1bW5zID0gc2VsZi5tYXBwaW5nQml0TWF0cml4LndpZHRoOworICAKKyAgQk9PTCBjb3JuZXIxUmVhZCA9IE5POworICBCT09MIGNvcm5lcjJSZWFkID0gTk87CisgIEJPT0wgY29ybmVyM1JlYWQgPSBOTzsKKyAgQk9PTCBjb3JuZXI0UmVhZCA9IE5POworICAKKyAgZG8geworICAgIGlmICgocm93ID09IG51bVJvd3MpICYmIChjb2x1bW4gPT0gMCkgJiYgIWNvcm5lcjFSZWFkKSB7CisgICAgICBbcmVzdWx0IGFkZE9iamVjdDpAKFtzZWxmIHJlYWRDb3JuZXIxOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSldOworICAgICAgcm93IC09IDI7CisgICAgICBjb2x1bW4gKz0gMjsKKyAgICAgIGNvcm5lcjFSZWFkID0gWUVTOworICAgIH0gZWxzZSBpZiAoKHJvdyA9PSBudW1Sb3dzIC0gMikgJiYgKGNvbHVtbiA9PSAwKSAmJiAoKG51bUNvbHVtbnMgJiAweDAzKSAhPSAwKSAmJiAhY29ybmVyMlJlYWQpIHsKKyAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OkAoW3NlbGYgcmVhZENvcm5lcjI6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKV07CisgICAgICByb3cgLT0gMjsKKyAgICAgIGNvbHVtbiArPSAyOworICAgICAgY29ybmVyMlJlYWQgPSBZRVM7CisgICAgfSBlbHNlIGlmICgocm93ID09IG51bVJvd3MgKyA0KSAmJiAoY29sdW1uID09IDIpICYmICgobnVtQ29sdW1ucyAmIDB4MDcpID09IDApICYmICFjb3JuZXIzUmVhZCkgeworICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6QChbc2VsZiByZWFkQ29ybmVyMzpudW1Sb3dzIG51bUNvbHVtbnM6bnVtQ29sdW1uc10pXTsKKyAgICAgIHJvdyAtPSAyOworICAgICAgY29sdW1uICs9IDI7CisgICAgICBjb3JuZXIzUmVhZCA9IFlFUzsKKyAgICB9IGVsc2UgaWYgKChyb3cgPT0gbnVtUm93cyAtIDIpICYmIChjb2x1bW4gPT0gMCkgJiYgKChudW1Db2x1bW5zICYgMHgwNykgPT0gNCkgJiYgIWNvcm5lcjRSZWFkKSB7CisgICAgICBbcmVzdWx0IGFkZE9iamVjdDpAKFtzZWxmIHJlYWRDb3JuZXI0Om51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSldOworICAgICAgcm93IC09IDI7CisgICAgICBjb2x1bW4gKz0gMjsKKyAgICAgIGNvcm5lcjRSZWFkID0gWUVTOworICAgIH0gZWxzZSB7CisgICAgICBkbyB7CisgICAgICAgIGlmICgocm93IDwgbnVtUm93cykgJiYgKGNvbHVtbiA+PSAwKSAmJiAhW3NlbGYucmVhZE1hcHBpbmdNYXRyaXggZ2V0WDpjb2x1bW4geTpyb3ddKSB7CisgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6QChbc2VsZiByZWFkVXRhaDpyb3cgY29sdW1uOmNvbHVtbiBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSldOworICAgICAgICB9CisgICAgICAgIHJvdyAtPSAyOworICAgICAgICBjb2x1bW4gKz0gMjsKKyAgICAgIH0gd2hpbGUgKChyb3cgPj0gMCkgJiYgKGNvbHVtbiA8IG51bUNvbHVtbnMpKTsKKyAgICAgIHJvdyArPSAxOworICAgICAgY29sdW1uICs9IDM7CisgICAgICAKKyAgICAgIGRvIHsKKyAgICAgICAgaWYgKChyb3cgPj0gMCkgJiYgKGNvbHVtbiA8IG51bUNvbHVtbnMpICYmICFbc2VsZi5yZWFkTWFwcGluZ01hdHJpeCBnZXRYOmNvbHVtbiB5OnJvd10pIHsKKyAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpAKFtzZWxmIHJlYWRVdGFoOnJvdyBjb2x1bW46Y29sdW1uIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKV07CisgICAgICAgIH0KKyAgICAgICAgcm93ICs9IDI7CisgICAgICAgIGNvbHVtbiAtPSAyOworICAgICAgfSB3aGlsZSAoKHJvdyA8IG51bVJvd3MpICYmIChjb2x1bW4gPj0gMCkpOworICAgICAgcm93ICs9IDM7CisgICAgICBjb2x1bW4gKz0gMTsKKyAgICB9CisgIH0gd2hpbGUgKChyb3cgPCBudW1Sb3dzKSB8fCAoY29sdW1uIDwgbnVtQ29sdW1ucykpOworICAKKyAgaWYgKFtyZXN1bHQgY291bnRdICE9IHNlbGYudmVyc2lvbi50b3RhbENvZGV3b3JkcykgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIFJlYWRzIGEgYml0IG9mIHRoZSBtYXBwaW5nIG1hdHJpeCBhY2NvdW50aW5nIGZvciBib3VuZGFyeSB3cmFwcGluZy4KKyAqLworLSAoQk9PTClyZWFkTW9kdWxlOihpbnQpcm93IGNvbHVtbjooaW50KWNvbHVtbiBudW1Sb3dzOihpbnQpbnVtUm93cyBudW1Db2x1bW5zOihpbnQpbnVtQ29sdW1ucyB7CisgIGlmIChyb3cgPCAwKSB7CisgICAgcm93ICs9IG51bVJvd3M7CisgICAgY29sdW1uICs9IDQgLSAoKG51bVJvd3MgKyA0KSAmIDB4MDcpOworICB9CisgIGlmIChjb2x1bW4gPCAwKSB7CisgICAgY29sdW1uICs9IG51bUNvbHVtbnM7CisgICAgcm93ICs9IDQgLSAoKG51bUNvbHVtbnMgKyA0KSAmIDB4MDcpOworICB9CisgIFtzZWxmLnJlYWRNYXBwaW5nTWF0cml4IHNldFg6Y29sdW1uIHk6cm93XTsKKyAgcmV0dXJuIFtzZWxmLm1hcHBpbmdCaXRNYXRyaXggZ2V0WDpjb2x1bW4geTpyb3ddOworfQorCisKKy8qKgorICogUmVhZHMgdGhlIDggYml0cyBvZiB0aGUgc3RhbmRhcmQgVXRhaC1zaGFwZWQgcGF0dGVybi4KKyAqIAorICogU2VlIElTTyAxNjAyMjoyMDA2LCA1LjguMSBGaWd1cmUgNgorICovCistIChpbnQpcmVhZFV0YWg6KGludClyb3cgY29sdW1uOihpbnQpY29sdW1uIG51bVJvd3M6KGludCludW1Sb3dzIG51bUNvbHVtbnM6KGludCludW1Db2x1bW5zIHsKKyAgaW50IGN1cnJlbnRCeXRlID0gMDsKKyAgaWYgKFtzZWxmIHJlYWRNb2R1bGU6cm93IC0gMiBjb2x1bW46Y29sdW1uIC0gMiBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOnJvdyAtIDIgY29sdW1uOmNvbHVtbiAtIDEgbnVtUm93czpudW1Sb3dzIG51bUNvbHVtbnM6bnVtQ29sdW1uc10pIHsKKyAgICBjdXJyZW50Qnl0ZSB8PSAxOworICB9CisgIGN1cnJlbnRCeXRlIDw8PSAxOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZTpyb3cgLSAxIGNvbHVtbjpjb2x1bW4gLSAyIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICBjdXJyZW50Qnl0ZSA8PD0gMTsKKyAgaWYgKFtzZWxmIHJlYWRNb2R1bGU6cm93IC0gMSBjb2x1bW46Y29sdW1uIC0gMSBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOnJvdyAtIDEgY29sdW1uOmNvbHVtbiBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOnJvdyBjb2x1bW46Y29sdW1uIC0gMiBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOnJvdyBjb2x1bW46Y29sdW1uIC0gMSBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOnJvdyBjb2x1bW46Y29sdW1uIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICByZXR1cm4gY3VycmVudEJ5dGU7Cit9CisKKworLyoqCisgKiBSZWFkcyB0aGUgOCBiaXRzIG9mIHRoZSBzcGVjaWFsIGNvcm5lciBjb25kaXRpb24gMS4KKyAqIAorICogU2VlIElTTyAxNjAyMjoyMDA2LCBGaWd1cmUgRi4zCisgKi8KKy0gKGludClyZWFkQ29ybmVyMTooaW50KW51bVJvd3MgbnVtQ29sdW1uczooaW50KW51bUNvbHVtbnMgeworICBpbnQgY3VycmVudEJ5dGUgPSAwOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZTpudW1Sb3dzIC0gMSBjb2x1bW46MCBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOm51bVJvd3MgLSAxIGNvbHVtbjoxIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICBjdXJyZW50Qnl0ZSA8PD0gMTsKKyAgaWYgKFtzZWxmIHJlYWRNb2R1bGU6bnVtUm93cyAtIDEgY29sdW1uOjIgbnVtUm93czpudW1Sb3dzIG51bUNvbHVtbnM6bnVtQ29sdW1uc10pIHsKKyAgICBjdXJyZW50Qnl0ZSB8PSAxOworICB9CisgIGN1cnJlbnRCeXRlIDw8PSAxOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZTowIGNvbHVtbjpudW1Db2x1bW5zIC0gMiBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOjAgY29sdW1uOm51bUNvbHVtbnMgLSAxIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICBjdXJyZW50Qnl0ZSA8PD0gMTsKKyAgaWYgKFtzZWxmIHJlYWRNb2R1bGU6MSBjb2x1bW46bnVtQ29sdW1ucyAtIDEgbnVtUm93czpudW1Sb3dzIG51bUNvbHVtbnM6bnVtQ29sdW1uc10pIHsKKyAgICBjdXJyZW50Qnl0ZSB8PSAxOworICB9CisgIGN1cnJlbnRCeXRlIDw8PSAxOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZToyIGNvbHVtbjpudW1Db2x1bW5zIC0gMSBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOjMgY29sdW1uOm51bUNvbHVtbnMgLSAxIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICByZXR1cm4gY3VycmVudEJ5dGU7Cit9CisKKworLyoqCisgKiBSZWFkcyB0aGUgOCBiaXRzIG9mIHRoZSBzcGVjaWFsIGNvcm5lciBjb25kaXRpb24gMi4KKyAqIAorICogU2VlIElTTyAxNjAyMjoyMDA2LCBGaWd1cmUgRi40CisgKi8KKy0gKGludClyZWFkQ29ybmVyMjooaW50KW51bVJvd3MgbnVtQ29sdW1uczooaW50KW51bUNvbHVtbnMgeworICBpbnQgY3VycmVudEJ5dGUgPSAwOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZTpudW1Sb3dzIC0gMyBjb2x1bW46MCBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOm51bVJvd3MgLSAyIGNvbHVtbjowIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICBjdXJyZW50Qnl0ZSA8PD0gMTsKKyAgaWYgKFtzZWxmIHJlYWRNb2R1bGU6bnVtUm93cyAtIDEgY29sdW1uOjAgbnVtUm93czpudW1Sb3dzIG51bUNvbHVtbnM6bnVtQ29sdW1uc10pIHsKKyAgICBjdXJyZW50Qnl0ZSB8PSAxOworICB9CisgIGN1cnJlbnRCeXRlIDw8PSAxOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZTowIGNvbHVtbjpudW1Db2x1bW5zIC0gNCBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOjAgY29sdW1uOm51bUNvbHVtbnMgLSAzIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICBjdXJyZW50Qnl0ZSA8PD0gMTsKKyAgaWYgKFtzZWxmIHJlYWRNb2R1bGU6MCBjb2x1bW46bnVtQ29sdW1ucyAtIDIgbnVtUm93czpudW1Sb3dzIG51bUNvbHVtbnM6bnVtQ29sdW1uc10pIHsKKyAgICBjdXJyZW50Qnl0ZSB8PSAxOworICB9CisgIGN1cnJlbnRCeXRlIDw8PSAxOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZTowIGNvbHVtbjpudW1Db2x1bW5zIC0gMSBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOjEgY29sdW1uOm51bUNvbHVtbnMgLSAxIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICByZXR1cm4gY3VycmVudEJ5dGU7Cit9CisKKworLyoqCisgKiBSZWFkcyB0aGUgOCBiaXRzIG9mIHRoZSBzcGVjaWFsIGNvcm5lciBjb25kaXRpb24gMy4KKyAqIAorICogU2VlIElTTyAxNjAyMjoyMDA2LCBGaWd1cmUgRi41CisgKi8KKy0gKGludClyZWFkQ29ybmVyMzooaW50KW51bVJvd3MgbnVtQ29sdW1uczooaW50KW51bUNvbHVtbnMgeworICBpbnQgY3VycmVudEJ5dGUgPSAwOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZTpudW1Sb3dzIC0gMSBjb2x1bW46MCBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOm51bVJvd3MgLSAxIGNvbHVtbjpudW1Db2x1bW5zIC0gMSBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOjAgY29sdW1uOm51bUNvbHVtbnMgLSAzIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICBjdXJyZW50Qnl0ZSA8PD0gMTsKKyAgaWYgKFtzZWxmIHJlYWRNb2R1bGU6MCBjb2x1bW46bnVtQ29sdW1ucyAtIDIgbnVtUm93czpudW1Sb3dzIG51bUNvbHVtbnM6bnVtQ29sdW1uc10pIHsKKyAgICBjdXJyZW50Qnl0ZSB8PSAxOworICB9CisgIGN1cnJlbnRCeXRlIDw8PSAxOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZTowIGNvbHVtbjpudW1Db2x1bW5zIC0gMSBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOjEgY29sdW1uOm51bUNvbHVtbnMgLSAzIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICBjdXJyZW50Qnl0ZSA8PD0gMTsKKyAgaWYgKFtzZWxmIHJlYWRNb2R1bGU6MSBjb2x1bW46bnVtQ29sdW1ucyAtIDIgbnVtUm93czpudW1Sb3dzIG51bUNvbHVtbnM6bnVtQ29sdW1uc10pIHsKKyAgICBjdXJyZW50Qnl0ZSB8PSAxOworICB9CisgIGN1cnJlbnRCeXRlIDw8PSAxOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZToxIGNvbHVtbjpudW1Db2x1bW5zIC0gMSBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgcmV0dXJuIGN1cnJlbnRCeXRlOworfQorCisKKy8qKgorICogUmVhZHMgdGhlIDggYml0cyBvZiB0aGUgc3BlY2lhbCBjb3JuZXIgY29uZGl0aW9uIDQuCisgKiAKKyAqIFNlZSBJU08gMTYwMjI6MjAwNiwgRmlndXJlIEYuNgorICovCistIChpbnQpcmVhZENvcm5lcjQ6KGludCludW1Sb3dzIG51bUNvbHVtbnM6KGludCludW1Db2x1bW5zIHsKKyAgaW50IGN1cnJlbnRCeXRlID0gMDsKKyAgaWYgKFtzZWxmIHJlYWRNb2R1bGU6bnVtUm93cyAtIDMgY29sdW1uOjAgbnVtUm93czpudW1Sb3dzIG51bUNvbHVtbnM6bnVtQ29sdW1uc10pIHsKKyAgICBjdXJyZW50Qnl0ZSB8PSAxOworICB9CisgIGN1cnJlbnRCeXRlIDw8PSAxOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZTpudW1Sb3dzIC0gMiBjb2x1bW46MCBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOm51bVJvd3MgLSAxIGNvbHVtbjowIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICBjdXJyZW50Qnl0ZSA8PD0gMTsKKyAgaWYgKFtzZWxmIHJlYWRNb2R1bGU6MCBjb2x1bW46bnVtQ29sdW1ucyAtIDIgbnVtUm93czpudW1Sb3dzIG51bUNvbHVtbnM6bnVtQ29sdW1uc10pIHsKKyAgICBjdXJyZW50Qnl0ZSB8PSAxOworICB9CisgIGN1cnJlbnRCeXRlIDw8PSAxOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZTowIGNvbHVtbjpudW1Db2x1bW5zIC0gMSBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgY3VycmVudEJ5dGUgPDw9IDE7CisgIGlmIChbc2VsZiByZWFkTW9kdWxlOjEgY29sdW1uOm51bUNvbHVtbnMgLSAxIG51bVJvd3M6bnVtUm93cyBudW1Db2x1bW5zOm51bUNvbHVtbnNdKSB7CisgICAgY3VycmVudEJ5dGUgfD0gMTsKKyAgfQorICBjdXJyZW50Qnl0ZSA8PD0gMTsKKyAgaWYgKFtzZWxmIHJlYWRNb2R1bGU6MiBjb2x1bW46bnVtQ29sdW1ucyAtIDEgbnVtUm93czpudW1Sb3dzIG51bUNvbHVtbnM6bnVtQ29sdW1uc10pIHsKKyAgICBjdXJyZW50Qnl0ZSB8PSAxOworICB9CisgIGN1cnJlbnRCeXRlIDw8PSAxOworICBpZiAoW3NlbGYgcmVhZE1vZHVsZTozIGNvbHVtbjpudW1Db2x1bW5zIC0gMSBudW1Sb3dzOm51bVJvd3MgbnVtQ29sdW1uczpudW1Db2x1bW5zXSkgeworICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgIH0KKyAgcmV0dXJuIGN1cnJlbnRCeXRlOworfQorCisKKy8qKgorICogRXh0cmFjdHMgdGhlIGRhdGEgcmVnaW9uIGZyb20gYSB7QGxpbmsgQml0TWF0cml4fSB0aGF0IGNvbnRhaW5zCisgKiBhbGlnbm1lbnQgcGF0dGVybnMuCisgKi8KKy0gKFpYQml0TWF0cml4ICopZXh0cmFjdERhdGFSZWdpb246KFpYQml0TWF0cml4ICopYml0TWF0cml4IHsKKyAgaW50IHN5bWJvbFNpemVSb3dzID0gc2VsZi52ZXJzaW9uLnN5bWJvbFNpemVSb3dzOworICBpbnQgc3ltYm9sU2l6ZUNvbHVtbnMgPSBzZWxmLnZlcnNpb24uc3ltYm9sU2l6ZUNvbHVtbnM7CisgIAorICBpZiAoYml0TWF0cml4LmhlaWdodCAhPSBzeW1ib2xTaXplUm93cykgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJEaW1lbnNpb24gb2YgYml0TWF0cml4IG11c3QgbWF0Y2ggdGhlIHZlcnNpb24gc2l6ZSJdOworICB9CisgIAorICBpbnQgZGF0YVJlZ2lvblNpemVSb3dzID0gc2VsZi52ZXJzaW9uLmRhdGFSZWdpb25TaXplUm93czsKKyAgaW50IGRhdGFSZWdpb25TaXplQ29sdW1ucyA9IHNlbGYudmVyc2lvbi5kYXRhUmVnaW9uU2l6ZUNvbHVtbnM7CisgIAorICBpbnQgbnVtRGF0YVJlZ2lvbnNSb3cgPSBzeW1ib2xTaXplUm93cyAvIGRhdGFSZWdpb25TaXplUm93czsKKyAgaW50IG51bURhdGFSZWdpb25zQ29sdW1uID0gc3ltYm9sU2l6ZUNvbHVtbnMgLyBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM7CisgIAorICBpbnQgc2l6ZURhdGFSZWdpb25Sb3cgPSBudW1EYXRhUmVnaW9uc1JvdyAqIGRhdGFSZWdpb25TaXplUm93czsKKyAgaW50IHNpemVEYXRhUmVnaW9uQ29sdW1uID0gbnVtRGF0YVJlZ2lvbnNDb2x1bW4gKiBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM7CisgIAorICBaWEJpdE1hdHJpeCAqYml0TWF0cml4V2l0aG91dEFsaWdubWVudCA9IFtbWlhCaXRNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6c2l6ZURhdGFSZWdpb25Db2x1bW4gaGVpZ2h0OnNpemVEYXRhUmVnaW9uUm93XTsKKyAgZm9yIChpbnQgZGF0YVJlZ2lvblJvdyA9IDA7IGRhdGFSZWdpb25Sb3cgPCBudW1EYXRhUmVnaW9uc1JvdzsgKytkYXRhUmVnaW9uUm93KSB7CisgICAgaW50IGRhdGFSZWdpb25Sb3dPZmZzZXQgPSBkYXRhUmVnaW9uUm93ICogZGF0YVJlZ2lvblNpemVSb3dzOworICAgIGZvciAoaW50IGRhdGFSZWdpb25Db2x1bW4gPSAwOyBkYXRhUmVnaW9uQ29sdW1uIDwgbnVtRGF0YVJlZ2lvbnNDb2x1bW47ICsrZGF0YVJlZ2lvbkNvbHVtbikgeworICAgICAgaW50IGRhdGFSZWdpb25Db2x1bW5PZmZzZXQgPSBkYXRhUmVnaW9uQ29sdW1uICogZGF0YVJlZ2lvblNpemVDb2x1bW5zOworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhUmVnaW9uU2l6ZVJvd3M7ICsraSkgeworICAgICAgICBpbnQgcmVhZFJvd09mZnNldCA9IGRhdGFSZWdpb25Sb3cgKiAoZGF0YVJlZ2lvblNpemVSb3dzICsgMikgKyAxICsgaTsKKyAgICAgICAgaW50IHdyaXRlUm93T2Zmc2V0ID0gZGF0YVJlZ2lvblJvd09mZnNldCArIGk7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGF0YVJlZ2lvblNpemVDb2x1bW5zOyArK2opIHsKKyAgICAgICAgICBpbnQgcmVhZENvbHVtbk9mZnNldCA9IGRhdGFSZWdpb25Db2x1bW4gKiAoZGF0YVJlZ2lvblNpemVDb2x1bW5zICsgMikgKyAxICsgajsKKyAgICAgICAgICBpZiAoW2JpdE1hdHJpeCBnZXRYOnJlYWRDb2x1bW5PZmZzZXQgeTpyZWFkUm93T2Zmc2V0XSkgeworICAgICAgICAgICAgaW50IHdyaXRlQ29sdW1uT2Zmc2V0ID0gZGF0YVJlZ2lvbkNvbHVtbk9mZnNldCArIGo7CisgICAgICAgICAgICBbYml0TWF0cml4V2l0aG91dEFsaWdubWVudCBzZXRYOndyaXRlQ29sdW1uT2Zmc2V0IHk6d3JpdGVSb3dPZmZzZXRdOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICAKKyAgcmV0dXJuIGJpdE1hdHJpeFdpdGhvdXRBbGlnbm1lbnQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGF0YUJsb2NrLmggYi9aWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyL1pYRGF0YU1hdHJpeERhdGFCbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMDkxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyL1pYRGF0YU1hdHJpeERhdGFCbG9jay5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogRW5jYXBzdWxhdGVzIGEgYmxvY2sgb2YgZGF0YSB3aXRoaW4gYSBEYXRhIE1hdHJpeCBDb2RlLiBEYXRhIE1hdHJpeCBDb2RlcyBtYXkgc3BsaXQgdGhlaXIgZGF0YSBpbnRvCisgKiBtdWx0aXBsZSBibG9ja3MsIGVhY2ggb2Ygd2hpY2ggaXMgYSB1bml0IG9mIGRhdGEgYW5kIGVycm9yLWNvcnJlY3Rpb24gY29kZXdvcmRzLiBFYWNoCisgKiBpcyByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgorICovCisKK0BjbGFzcyBaWERhdGFNYXRyaXhWZXJzaW9uOworCitAaW50ZXJmYWNlIFpYRGF0YU1hdHJpeERhdGFCbG9jayA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgbnVtRGF0YUNvZGV3b3JkczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBOU011dGFibGVBcnJheSAqY29kZXdvcmRzOworCisrIChOU0FycmF5ICopZGF0YUJsb2NrczooTlNBcnJheSAqKXJhd0NvZGV3b3JkcyB2ZXJzaW9uOihaWERhdGFNYXRyaXhWZXJzaW9uICopdmVyc2lvbjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZGVjb2Rlci9aWERhdGFNYXRyaXhEYXRhQmxvY2subSBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGF0YUJsb2NrLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0NDk5ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGF0YUJsb2NrLm0KQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhEYXRhTWF0cml4RGF0YUJsb2NrLmgiCisjaW1wb3J0ICJaWERhdGFNYXRyaXhWZXJzaW9uLmgiCisjaW1wb3J0ICJaWFFSQ29kZVZlcnNpb24uaCIKKworQGltcGxlbWVudGF0aW9uIFpYRGF0YU1hdHJpeERhdGFCbG9jaworCistIChpZClpbml0V2l0aE51bURhdGFDb2Rld29yZHM6KGludCludW1EYXRhQ29kZXdvcmRzIGNvZGV3b3JkczooTlNNdXRhYmxlQXJyYXkgKiljb2Rld29yZHMgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9udW1EYXRhQ29kZXdvcmRzID0gbnVtRGF0YUNvZGV3b3JkczsKKyAgICBfY29kZXdvcmRzID0gY29kZXdvcmRzOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy8qKgorICogV2hlbiBEYXRhIE1hdHJpeCBDb2RlcyB1c2UgbXVsdGlwbGUgZGF0YSBibG9ja3MsIHRoZXkgYWN0dWFsbHkgaW50ZXJsZWF2ZSB0aGUgYnl0ZXMgb2YgZWFjaCBvZiB0aGVtLgorICogVGhhdCBpcywgdGhlIGZpcnN0IGJ5dGUgb2YgZGF0YSBibG9jayAxIHRvIG4gaXMgd3JpdHRlbiwgdGhlbiB0aGUgc2Vjb25kIGJ5dGVzLCBhbmQgc28gb24uIFRoaXMKKyAqIG1ldGhvZCB3aWxsIHNlcGFyYXRlIHRoZSBkYXRhIGludG8gb3JpZ2luYWwgYmxvY2tzLgorICovCisrIChOU0FycmF5ICopZGF0YUJsb2NrczooTlNBcnJheSAqKXJhd0NvZGV3b3JkcyB2ZXJzaW9uOihaWERhdGFNYXRyaXhWZXJzaW9uICopdmVyc2lvbiB7CisgIFpYRGF0YU1hdHJpeEVDQmxvY2tzICplY0Jsb2NrcyA9IHZlcnNpb24uZWNCbG9ja3M7CisKKyAgaW50IHRvdGFsQmxvY2tzID0gMDsKKyAgTlNBcnJheSAqZWNCbG9ja0FycmF5ID0gZWNCbG9ja3MuZWNCbG9ja3M7CisgIGZvciAoWlhEYXRhTWF0cml4RUNCICplY0Jsb2NrIGluIGVjQmxvY2tBcnJheSkgeworICAgIHRvdGFsQmxvY2tzICs9IGVjQmxvY2suY291bnQ7CisgIH0KKworICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnRvdGFsQmxvY2tzXTsKKyAgaW50IG51bVJlc3VsdEJsb2NrcyA9IDA7CisgIGZvciAoWlhEYXRhTWF0cml4RUNCICplY0Jsb2NrIGluIGVjQmxvY2tBcnJheSkgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWNCbG9jay5jb3VudDsgaSsrKSB7CisgICAgICBpbnQgbnVtRGF0YUNvZGV3b3JkcyA9IGVjQmxvY2suZGF0YUNvZGV3b3JkczsKKyAgICAgIGludCBudW1CbG9ja0NvZGV3b3JkcyA9IGVjQmxvY2tzLmVjQ29kZXdvcmRzICsgbnVtRGF0YUNvZGV3b3JkczsKKyAgICAgIE5TTXV0YWJsZUFycmF5ICp0ZW1wQ29kZXdvcmRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Om51bUJsb2NrQ29kZXdvcmRzXTsKKyAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtQmxvY2tDb2Rld29yZHM7IGorKykgeworICAgICAgICBbdGVtcENvZGV3b3JkcyBhZGRPYmplY3Q6QDBdOworICAgICAgfQorICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W1taWERhdGFNYXRyaXhEYXRhQmxvY2sgYWxsb2NdIGluaXRXaXRoTnVtRGF0YUNvZGV3b3JkczpudW1EYXRhQ29kZXdvcmRzIGNvZGV3b3Jkczp0ZW1wQ29kZXdvcmRzXV07CisgICAgICBudW1SZXN1bHRCbG9ja3MrKzsKKyAgICB9CisgIH0KKworICBpbnQgbG9uZ2VyQmxvY2tzVG90YWxDb2Rld29yZHMgPSAoaW50KVtbcmVzdWx0WzBdIGNvZGV3b3Jkc10gY291bnRdOworICBpbnQgbG9uZ2VyQmxvY2tzTnVtRGF0YUNvZGV3b3JkcyA9IGxvbmdlckJsb2Nrc1RvdGFsQ29kZXdvcmRzIC0gZWNCbG9ja3MuZWNDb2Rld29yZHM7CisgIGludCBzaG9ydGVyQmxvY2tzTnVtRGF0YUNvZGV3b3JkcyA9IGxvbmdlckJsb2Nrc051bURhdGFDb2Rld29yZHMgLSAxOworICBpbnQgcmF3Q29kZXdvcmRzT2Zmc2V0ID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaG9ydGVyQmxvY2tzTnVtRGF0YUNvZGV3b3JkczsgaSsrKSB7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1SZXN1bHRCbG9ja3M7IGorKykgeworICAgICAgW3Jlc3VsdFtqXSBjb2Rld29yZHNdW2ldID0gcmF3Q29kZXdvcmRzW3Jhd0NvZGV3b3Jkc09mZnNldCsrXTsKKyAgICB9CisgIH0KKworICBCT09MIHNwZWNpYWxWZXJzaW9uID0gdmVyc2lvbi52ZXJzaW9uTnVtYmVyID09IDI0OworICBpbnQgbnVtTG9uZ2VyQmxvY2tzID0gc3BlY2lhbFZlcnNpb24gPyA4IDogbnVtUmVzdWx0QmxvY2tzOworICBmb3IgKGludCBqID0gMDsgaiA8IG51bUxvbmdlckJsb2NrczsgaisrKSB7CisgICAgW3Jlc3VsdFtqXSBjb2Rld29yZHNdW2xvbmdlckJsb2Nrc051bURhdGFDb2Rld29yZHMgLSAxXSA9IHJhd0NvZGV3b3Jkc1tyYXdDb2Rld29yZHNPZmZzZXQrK107CisgIH0KKworICBOU1VJbnRlZ2VyIG1heCA9IFtbcmVzdWx0WzBdIGNvZGV3b3Jkc10gY291bnRdOworICBmb3IgKGludCBpID0gbG9uZ2VyQmxvY2tzTnVtRGF0YUNvZGV3b3JkczsgaSA8IG1heDsgaSsrKSB7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1SZXN1bHRCbG9ja3M7IGorKykgeworICAgICAgaW50IGlPZmZzZXQgPSBzcGVjaWFsVmVyc2lvbiAmJiBqID4gNyA/IGkgLSAxIDogaTsKKyAgICAgIFtyZXN1bHRbal0gY29kZXdvcmRzXVtpT2Zmc2V0XSA9IHJhd0NvZGV3b3Jkc1tyYXdDb2Rld29yZHNPZmZzZXQrK107CisgICAgfQorICB9CisKKyAgaWYgKHJhd0NvZGV3b3Jkc09mZnNldCAhPSBbcmF3Q29kZXdvcmRzIGNvdW50XSkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJDb2Rld29yZHMgc2l6ZSBtaXNtYXRjaCJdOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZGVjb2Rlci9aWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwY2I1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogRGF0YSBNYXRyaXggQ29kZXMgY2FuIGVuY29kZSB0ZXh0IGFzIGJpdHMgaW4gb25lIG9mIHNldmVyYWwgbW9kZXMsIGFuZCBjYW4gdXNlIG11bHRpcGxlIG1vZGVzCisgKiBpbiBvbmUgRGF0YSBNYXRyaXggQ29kZS4gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBiaXRzIGJhY2sgaW50byB0ZXh0LgorICogCisgKiBTZWUgSVNPIDE2MDIyOjIwMDYsIDUuMi4xIC0gNS4yLjkuMgorICovCisKK0BjbGFzcyBaWERlY29kZXJSZXN1bHQ7CisKK0BpbnRlcmZhY2UgWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlciA6IE5TT2JqZWN0CisKKysgKFpYRGVjb2RlclJlc3VsdCAqKWRlY29kZTooaW50OF90ICopYnl0ZXMgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyL1pYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYzIxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyL1pYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIubQpAQCAtMCwwICsxLDQ5NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRTb3VyY2UuaCIKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCIKKyNpbXBvcnQgIlpYRGVjb2RlclJlc3VsdC5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKworLyoqCisgKiBTZWUgSVNPIDE2MDIyOjIwMDYsIEFubmV4IEMgVGFibGUgQy4xCisgKiBUaGUgQzQwIEJhc2ljIENoYXJhY3RlciBTZXQgKConcyB1c2VkIGZvciBwbGFjZWhvbGRlcnMgZm9yIHRoZSBzaGlmdCB2YWx1ZXMpCisgKi8KK2NvbnN0IGNoYXIgQzQwX0JBU0lDX1NFVF9DSEFSU1s0MF0gPSB7CisgICcqJywgJyonLCAnKicsICcgJywgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAorICAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnSicsICdLJywgJ0wnLCAnTScsICdOJywKKyAgJ08nLCAnUCcsICdRJywgJ1InLCAnUycsICdUJywgJ1UnLCAnVicsICdXJywgJ1gnLCAnWScsICdaJworfTsKKworY29uc3QgY2hhciBDNDBfU0hJRlQyX1NFVF9DSEFSU1s0MF0gPSB7CisgICchJywgJyInLCAnIycsICckJywgJyUnLCAnJicsICdcJycsICcoJywgJyknLCAnKicsICAnKycsICcsJywgJy0nLCAnLicsCisgICcvJywgJzonLCAnOycsICc8JywgJz0nLCAnPicsICc/JywgICdAJywgJ1snLCAnXFwnLCAnXScsICdeJywgJ18nCit9OworCisvKioKKyAqIFNlZSBJU08gMTYwMjI6MjAwNiwgQW5uZXggQyBUYWJsZSBDLjIKKyAqIFRoZSBUZXh0IEJhc2ljIENoYXJhY3RlciBTZXQgKConcyB1c2VkIGZvciBwbGFjZWhvbGRlcnMgZm9yIHRoZSBzaGlmdCB2YWx1ZXMpCisgKi8KK2NvbnN0IGNoYXIgVEVYVF9CQVNJQ19TRVRfQ0hBUlNbNDBdID0geworICAnKicsICcqJywgJyonLCAnICcsICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKKyAgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsCisgICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicKK307CisKK2NvbnN0IGNoYXIgVEVYVF9TSElGVDNfU0VUX0NIQVJTWzMyXSA9IHsKKyAgJ1wnJywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsCisgICdPJywgICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLCAnVScsICdWJywgJ1cnLCAnWCcsICdZJywgJ1onLCAneycsICd8JywgJ30nLCAnficsIChjaGFyKSAxMjcKK307CisKK2VudW0geworICBQQURfRU5DT0RFID0gMCwgLy8gTm90IHJlYWxseSBhIG1vZGUKKyAgQVNDSUlfRU5DT0RFLAorICBDNDBfRU5DT0RFLAorICBURVhUX0VOQ09ERSwKKyAgQU5TSVgxMl9FTkNPREUsCisgIEVESUZBQ1RfRU5DT0RFLAorICBCQVNFMjU2X0VOQ09ERQorfTsKKworQGltcGxlbWVudGF0aW9uIFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIKKworKyAoWlhEZWNvZGVyUmVzdWx0ICopZGVjb2RlOihpbnQ4X3QgKilieXRlcyBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGggZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWEJpdFNvdXJjZSAqYml0cyA9IFtbWlhCaXRTb3VyY2UgYWxsb2NdIGluaXRXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmxlbmd0aF07CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6MTAwXTsKKyAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHRUcmFpbGVyID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICBOU011dGFibGVBcnJheSAqYnl0ZVNlZ21lbnRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OjFdOworICBpbnQgbW9kZSA9IEFTQ0lJX0VOQ09ERTsKKyAgZG8geworICAgIGlmIChtb2RlID09IEFTQ0lJX0VOQ09ERSkgeworICAgICAgbW9kZSA9IFtzZWxmIGRlY29kZUFzY2lpU2VnbWVudDpiaXRzIHJlc3VsdDpyZXN1bHQgcmVzdWx0VHJhaWxlcjpyZXN1bHRUcmFpbGVyXTsKKyAgICAgIGlmIChtb2RlID09IC0xKSB7CisgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgICByZXR1cm4gbmlsOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgIGNhc2UgQzQwX0VOQ09ERToKKyAgICAgICAgaWYgKCFbc2VsZiBkZWNvZGVDNDBTZWdtZW50OmJpdHMgcmVzdWx0OnJlc3VsdF0pIHsKKyAgICAgICAgICBpZiAoZXJyb3IpICplcnJvciA9IEZvcm1hdEVycm9ySW5zdGFuY2UoKTsKKyAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBURVhUX0VOQ09ERToKKyAgICAgICAgaWYgKCFbc2VsZiBkZWNvZGVUZXh0U2VnbWVudDpiaXRzIHJlc3VsdDpyZXN1bHRdKSB7CisgICAgICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBGb3JtYXRFcnJvckluc3RhbmNlKCk7CisgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQU5TSVgxMl9FTkNPREU6CisgICAgICAgIGlmICghW3NlbGYgZGVjb2RlQW5zaVgxMlNlZ21lbnQ6Yml0cyByZXN1bHQ6cmVzdWx0XSkgeworICAgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVESUZBQ1RfRU5DT0RFOgorICAgICAgICBbc2VsZiBkZWNvZGVFZGlmYWN0U2VnbWVudDpiaXRzIHJlc3VsdDpyZXN1bHRdOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQkFTRTI1Nl9FTkNPREU6CisgICAgICAgIGlmICghW3NlbGYgZGVjb2RlQmFzZTI1NlNlZ21lbnQ6Yml0cyByZXN1bHQ6cmVzdWx0IGJ5dGVTZWdtZW50czpieXRlU2VnbWVudHNdKSB7CisgICAgICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBGb3JtYXRFcnJvckluc3RhbmNlKCk7CisgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgICByZXR1cm4gbmlsOworICAgICAgfQorICAgICAgbW9kZSA9IEFTQ0lJX0VOQ09ERTsKKyAgICB9CisgIH0gd2hpbGUgKG1vZGUgIT0gUEFEX0VOQ09ERSAmJiBiaXRzLmF2YWlsYWJsZSA+IDApOworICBpZiAoW3Jlc3VsdFRyYWlsZXIgbGVuZ3RoXSA+IDApIHsKKyAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpyZXN1bHRUcmFpbGVyXTsKKyAgfQorICByZXR1cm4gW1taWERlY29kZXJSZXN1bHQgYWxsb2NdIGluaXRXaXRoUmF3Qnl0ZXM6Ynl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6cmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVTZWdtZW50czpbYnl0ZVNlZ21lbnRzIGNvdW50XSA9PSAwID8gbmlsIDogYnl0ZVNlZ21lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNMZXZlbDpuaWxdOworfQorCisvKioKKyAqIFNlZSBJU08gMTYwMjI6MjAwNiwgNS4yLjMgYW5kIEFubmV4IEMsIFRhYmxlIEMuMgorICovCisrIChpbnQpZGVjb2RlQXNjaWlTZWdtZW50OihaWEJpdFNvdXJjZSAqKWJpdHMgcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQgcmVzdWx0VHJhaWxlcjooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0VHJhaWxlciB7CisgIEJPT0wgdXBwZXJTaGlmdCA9IE5POworICBkbyB7CisgICAgaW50IG9uZUJ5dGUgPSBbYml0cyByZWFkQml0czo4XTsKKyAgICBpZiAob25lQnl0ZSA9PSAwKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlmIChvbmVCeXRlIDw9IDEyOCkgeyAgLy8gQVNDSUkgZGF0YSAoQVNDSUkgdmFsdWUgKyAxKQorICAgICAgaWYgKHVwcGVyU2hpZnQpIHsKKyAgICAgICAgb25lQnl0ZSArPSAxMjg7CisgICAgICAgIC8vdXBwZXJTaGlmdCA9IE5POworICAgICAgfQorICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKShvbmVCeXRlIC0gMSldOworICAgICAgcmV0dXJuIEFTQ0lJX0VOQ09ERTsKKyAgICB9IGVsc2UgaWYgKG9uZUJ5dGUgPT0gMTI5KSB7ICAvLyBQYWQKKyAgICAgIHJldHVybiBQQURfRU5DT0RFOworICAgIH0gZWxzZSBpZiAob25lQnl0ZSA8PSAyMjkpIHsgIC8vIDItZGlnaXQgZGF0YSAwMC05OSAoTnVtZXJpYyBWYWx1ZSArIDEzMCkKKyAgICAgIGludCB2YWx1ZSA9IG9uZUJ5dGUgLSAxMzA7CisgICAgICBpZiAodmFsdWUgPCAxMCkgeyAvLyBwYWRkIHdpdGggJzAnIGZvciBzaW5nbGUgZGlnaXQgdmFsdWVzCisgICAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAiMCJdOworICAgICAgfQorICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlZCIsIHZhbHVlXTsKKyAgICB9IGVsc2UgaWYgKG9uZUJ5dGUgPT0gMjMwKSB7ICAvLyBMYXRjaCB0byBDNDAgZW5jb2RhdGlvbgorICAgICAgcmV0dXJuIEM0MF9FTkNPREU7CisgICAgfSBlbHNlIGlmIChvbmVCeXRlID09IDIzMSkgeyAgLy8gTGF0Y2ggdG8gQmFzZSAyNTYgZW5jb2RhdGlvbgorICAgICAgcmV0dXJuIEJBU0UyNTZfRU5DT0RFOworICAgIH0gZWxzZSBpZiAob25lQnl0ZSA9PSAyMzIpIHsKKyAgICAgIC8vIEZOQzEKKyAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikyOV07IC8vIHRyYW5zbGF0ZSBhcyBBU0NJSSAyOQorICAgIH0gZWxzZSBpZiAob25lQnl0ZSA9PSAyMzMgfHwgb25lQnl0ZSA9PSAyMzQpIHsKKyAgICAgIC8vIFN0cnVjdHVyZWQgQXBwZW5kLCBSZWFkZXIgUHJvZ3JhbW1pbmcKKyAgICAgIC8vIElnbm9yZSB0aGVzZSBzeW1ib2xzIGZvciBub3cKKyAgICAgIC8vcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZiAob25lQnl0ZSA9PSAyMzUpIHsgIC8vIFVwcGVyIFNoaWZ0IChzaGlmdCB0byBFeHRlbmRlZCBBU0NJSSkKKyAgICAgIHVwcGVyU2hpZnQgPSBZRVM7CisgICAgfSBlbHNlIGlmIChvbmVCeXRlID09IDIzNikgeyAgLy8gMDUgTWFjcm8KKyAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiWyk+JUMlQyIsICh1bmljaGFyKTB4MDAxRTA1LCAodW5pY2hhcikweDAwMURdOworICAgICAgW3Jlc3VsdFRyYWlsZXIgaW5zZXJ0U3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUMlQyIsICh1bmljaGFyKTB4MDAxRSwgKHVuaWNoYXIpMHgwMDA0XSBhdEluZGV4OjBdOworICAgIH0gZWxzZSBpZiAob25lQnl0ZSA9PSAyMzcpIHsgIC8vIDA2IE1hY3JvCisgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIlspPiVDJUMiLCAodW5pY2hhcikweDAwMUUwNiwgKHVuaWNoYXIpMHgwMDFEXTsKKyAgICAgIFtyZXN1bHRUcmFpbGVyIGluc2VydFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVDJUMiLCAodW5pY2hhcikweDAwMUUsICh1bmljaGFyKTB4MDAwNF0gYXRJbmRleDowXTsKKyAgICB9IGVsc2UgaWYgKG9uZUJ5dGUgPT0gMjM4KSB7ICAvLyBMYXRjaCB0byBBTlNJIFgxMiBlbmNvZGF0aW9uCisgICAgICByZXR1cm4gQU5TSVgxMl9FTkNPREU7CisgICAgfSBlbHNlIGlmIChvbmVCeXRlID09IDIzOSkgeyAgLy8gTGF0Y2ggdG8gVGV4dCBlbmNvZGF0aW9uCisgICAgICByZXR1cm4gVEVYVF9FTkNPREU7CisgICAgfSBlbHNlIGlmIChvbmVCeXRlID09IDI0MCkgeyAgLy8gTGF0Y2ggdG8gRURJRkFDVCBlbmNvZGF0aW9uCisgICAgICByZXR1cm4gRURJRkFDVF9FTkNPREU7CisgICAgfSBlbHNlIGlmIChvbmVCeXRlID09IDI0MSkgeyAgLy8gRUNJIENoYXJhY3RlcgorICAgICAgLy8gVE9ETyhiYnJvd24pOiBJIHRoaW5rIHdlIG5lZWQgdG8gc3VwcG9ydCBFQ0kKKyAgICAgIC8vIElnbm9yZSB0aGlzIHN5bWJvbCBmb3Igbm93CisgICAgfSBlbHNlIGlmIChvbmVCeXRlID49IDI0MikgeyAgLy8gTm90IHRvIGJlIHVzZWQgaW4gQVNDSUkgZW5jb2RhdGlvbgorICAgICAgLy8gLi4uIGJ1dCB3b3JrIGFyb3VuZCBlbmNvZGVycyB0aGF0IGVuZCB3aXRoIDI1NCwgbGF0Y2ggYmFjayB0byBBU0NJSQorICAgICAgaWYgKG9uZUJ5dGUgIT0gMjU0IHx8IGJpdHMuYXZhaWxhYmxlICE9IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorICAgIH0KKyAgfSB3aGlsZSAoYml0cy5hdmFpbGFibGUgPiAwKTsKKyAgcmV0dXJuIEFTQ0lJX0VOQ09ERTsKK30KKworCisvKioKKyAqIFNlZSBJU08gMTYwMjI6MjAwNiwgNS4yLjUgYW5kIEFubmV4IEMsIFRhYmxlIEMuMQorICovCisrIChCT09MKWRlY29kZUM0MFNlZ21lbnQ6KFpYQml0U291cmNlICopYml0cyByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCB7CisgIC8vIFRocmVlIEM0MCB2YWx1ZXMgYXJlIGVuY29kZWQgaW4gYSAxNi1iaXQgdmFsdWUgYXMKKyAgLy8gKDE2MDAgKiBDMSkgKyAoNDAgKiBDMikgKyBDMyArIDEKKyAgLy8gVE9ETyhiYnJvd24pOiBUaGUgVXBwZXIgU2hpZnQgd2l0aCBDNDAgZG9lc24ndCB3b3JrIGluIHRoZSA0IHZhbHVlIHNjZW5hcmlvIGFsbCB0aGUgdGltZQorICBCT09MIHVwcGVyU2hpZnQgPSBOTzsKKworICBpbnQgY1ZhbHVlc1szXSA9IHswfTsKKyAgaW50IHNoaWZ0ID0gMDsKKworICBkbyB7CisgICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgYnl0ZSBsZWZ0IHRoZW4gaXQgd2lsbCBiZSBlbmNvZGVkIGFzIEFTQ0lJCisgICAgaWYgKFtiaXRzIGF2YWlsYWJsZV0gPT0gOCkgeworICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgaW50IGZpcnN0Qnl0ZSA9IFtiaXRzIHJlYWRCaXRzOjhdOworICAgIGlmIChmaXJzdEJ5dGUgPT0gMjU0KSB7ICAvLyBVbmxhdGNoIGNvZGV3b3JkCisgICAgICByZXR1cm4gWUVTOworICAgIH0KKworICAgIFtzZWxmIHBhcnNlVHdvQnl0ZXM6Zmlyc3RCeXRlIHNlY29uZEJ5dGU6W2JpdHMgcmVhZEJpdHM6OF0gcmVzdWx0OmNWYWx1ZXNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgIGludCBjVmFsdWUgPSBjVmFsdWVzW2ldOworICAgICAgc3dpdGNoIChzaGlmdCkgeworICAgICAgY2FzZSAwOgorICAgICAgICBpZiAoY1ZhbHVlIDwgMykgeworICAgICAgICAgIHNoaWZ0ID0gY1ZhbHVlICsgMTsKKyAgICAgICAgfSBlbHNlIGlmIChjVmFsdWUgPCBzaXplb2YoQzQwX0JBU0lDX1NFVF9DSEFSUykgLyBzaXplb2YoY2hhcikpIHsKKyAgICAgICAgICB1bmljaGFyIGM0MGNoYXIgPSBDNDBfQkFTSUNfU0VUX0NIQVJTW2NWYWx1ZV07CisgICAgICAgICAgaWYgKHVwcGVyU2hpZnQpIHsKKyAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoYzQwY2hhciArIDEyOCldOworICAgICAgICAgICAgdXBwZXJTaGlmdCA9IE5POworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgYzQwY2hhcl07CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBOTzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMToKKyAgICAgICAgaWYgKHVwcGVyU2hpZnQpIHsKKyAgICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpKGNWYWx1ZSArIDEyOCldOworICAgICAgICAgIHVwcGVyU2hpZnQgPSBOTzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpY1ZhbHVlXTsKKyAgICAgICAgfQorICAgICAgICBzaGlmdCA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAyOgorICAgICAgICBpZiAoY1ZhbHVlIDwgc2l6ZW9mKEM0MF9TSElGVDJfU0VUX0NIQVJTKSAvIHNpemVvZihjaGFyKSkgeworICAgICAgICAgIHVuaWNoYXIgYzQwY2hhciA9IEM0MF9TSElGVDJfU0VUX0NIQVJTW2NWYWx1ZV07CisgICAgICAgICAgaWYgKHVwcGVyU2hpZnQpIHsKKyAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoYzQwY2hhciArIDEyOCldOworICAgICAgICAgICAgdXBwZXJTaGlmdCA9IE5POworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgYzQwY2hhcl07CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNWYWx1ZSA9PSAyNykgeyAgLy8gRk5DMQorICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikyOV07IC8vIHRyYW5zbGF0ZSBhcyBBU0NJSSAyOQorICAgICAgICB9IGVsc2UgaWYgKGNWYWx1ZSA9PSAzMCkgeyAgLy8gVXBwZXIgU2hpZnQKKyAgICAgICAgICB1cHBlclNoaWZ0ID0gWUVTOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBOTzsKKyAgICAgICAgfQorICAgICAgICBzaGlmdCA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAzOgorICAgICAgICBpZiAodXBwZXJTaGlmdCkgeworICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoY1ZhbHVlICsgMjI0KV07CisgICAgICAgICAgdXBwZXJTaGlmdCA9IE5POworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoY1ZhbHVlICsgOTYpXTsKKyAgICAgICAgfQorICAgICAgICBzaGlmdCA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgfQorICAgIH0KKyAgfSB3aGlsZSAoYml0cy5hdmFpbGFibGUgPiAwKTsKKworICByZXR1cm4gWUVTOworfQorCisKKy8qKgorICogU2VlIElTTyAxNjAyMjoyMDA2LCA1LjIuNiBhbmQgQW5uZXggQywgVGFibGUgQy4yCisgKi8KKysgKEJPT0wpZGVjb2RlVGV4dFNlZ21lbnQ6KFpYQml0U291cmNlICopYml0cyByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCB7CisgIC8vIFRocmVlIFRleHQgdmFsdWVzIGFyZSBlbmNvZGVkIGluIGEgMTYtYml0IHZhbHVlIGFzCisgIC8vICgxNjAwICogQzEpICsgKDQwICogQzIpICsgQzMgKyAxCisgIC8vIFRPRE8oYmJyb3duKTogVGhlIFVwcGVyIFNoaWZ0IHdpdGggVGV4dCBkb2Vzbid0IHdvcmsgaW4gdGhlIDQgdmFsdWUgc2NlbmFyaW8gYWxsIHRoZSB0aW1lCisgIEJPT0wgdXBwZXJTaGlmdCA9IE5POworCisgIGludCBjVmFsdWVzWzNdID0gezB9OworCisgIGludCBzaGlmdCA9IDA7CisgIGRvIHsKKyAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBieXRlIGxlZnQgdGhlbiBpdCB3aWxsIGJlIGVuY29kZWQgYXMgQVNDSUkKKyAgICBpZiAoYml0cy5hdmFpbGFibGUgPT0gOCkgeworICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgaW50IGZpcnN0Qnl0ZSA9IFtiaXRzIHJlYWRCaXRzOjhdOworICAgIGlmIChmaXJzdEJ5dGUgPT0gMjU0KSB7ICAvLyBVbmxhdGNoIGNvZGV3b3JkCisgICAgICByZXR1cm4gWUVTOworICAgIH0KKworICAgIFtzZWxmIHBhcnNlVHdvQnl0ZXM6Zmlyc3RCeXRlIHNlY29uZEJ5dGU6W2JpdHMgcmVhZEJpdHM6OF0gcmVzdWx0OmNWYWx1ZXNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgIGludCBjVmFsdWUgPSBjVmFsdWVzW2ldOworICAgICAgc3dpdGNoIChzaGlmdCkgeworICAgICAgY2FzZSAwOgorICAgICAgICBpZiAoY1ZhbHVlIDwgMykgeworICAgICAgICAgIHNoaWZ0ID0gY1ZhbHVlICsgMTsKKyAgICAgICAgfSBlbHNlIGlmIChjVmFsdWUgPCBzaXplb2YoVEVYVF9CQVNJQ19TRVRfQ0hBUlMpIC8gc2l6ZW9mKGNoYXIpKSB7CisgICAgICAgICAgdW5pY2hhciB0ZXh0Q2hhciA9IFRFWFRfQkFTSUNfU0VUX0NIQVJTW2NWYWx1ZV07CisgICAgICAgICAgaWYgKHVwcGVyU2hpZnQpIHsKKyAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikodGV4dENoYXIgKyAxMjgpXTsKKyAgICAgICAgICAgIHVwcGVyU2hpZnQgPSBOTzsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsIHRleHRDaGFyXTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxOgorICAgICAgICBpZiAodXBwZXJTaGlmdCkgeworICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoY1ZhbHVlICsgMTI4KV07CisgICAgICAgICAgdXBwZXJTaGlmdCA9IE5POworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhciljVmFsdWVdOworICAgICAgICB9CisgICAgICAgIHNoaWZ0ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDI6CisgICAgICAgICAgLy8gU2hpZnQgMiBmb3IgVGV4dCBpcyB0aGUgc2FtZSBlbmNvZGluZyBhcyBDNDAKKyAgICAgICAgaWYgKGNWYWx1ZSA8IHNpemVvZihDNDBfU0hJRlQyX1NFVF9DSEFSUykgLyBzaXplb2YoY2hhcikpIHsKKyAgICAgICAgICB1bmljaGFyIGM0MGNoYXIgPSBDNDBfU0hJRlQyX1NFVF9DSEFSU1tjVmFsdWVdOworICAgICAgICAgIGlmICh1cHBlclNoaWZ0KSB7CisgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpKGM0MGNoYXIgKyAxMjgpXTsKKyAgICAgICAgICAgIHVwcGVyU2hpZnQgPSBOTzsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsIGM0MGNoYXJdOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjVmFsdWUgPT0gMjcpIHsKKyAgICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpMjldOyAvLyB0cmFuc2xhdGUgYXMgQVNDSUkgMjkKKyAgICAgICAgfSBlbHNlIGlmIChjVmFsdWUgPT0gMzApIHsgIC8vIFVwcGVyIFNoaWZ0CisgICAgICAgICAgdXBwZXJTaGlmdCA9IFlFUzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIH0KKyAgICAgICAgc2hpZnQgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMzoKKyAgICAgICAgaWYgKGNWYWx1ZSA8IHNpemVvZihURVhUX1NISUZUM19TRVRfQ0hBUlMpIC8gc2l6ZW9mKGNoYXIpKSB7CisgICAgICAgICAgdW5pY2hhciB0ZXh0Q2hhciA9IFRFWFRfU0hJRlQzX1NFVF9DSEFSU1tjVmFsdWVdOworICAgICAgICAgIGlmICh1cHBlclNoaWZ0KSB7CisgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpKHRleHRDaGFyICsgMTI4KV07CisgICAgICAgICAgICB1cHBlclNoaWZ0ID0gTk87CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCB0ZXh0Q2hhcl07CisgICAgICAgICAgfQorICAgICAgICAgIHNoaWZ0ID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTk87CisgICAgICB9CisgICAgfQorICB9IHdoaWxlIChiaXRzLmF2YWlsYWJsZSA+IDApOworICByZXR1cm4gWUVTOworfQorCisKKy8qKgorICogU2VlIElTTyAxNjAyMjoyMDA2LCA1LjIuNworICovCisrIChCT09MKWRlY29kZUFuc2lYMTJTZWdtZW50OihaWEJpdFNvdXJjZSAqKWJpdHMgcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQgeworICAvLyBUaHJlZSBBTlNJIFgxMiB2YWx1ZXMgYXJlIGVuY29kZWQgaW4gYSAxNi1iaXQgdmFsdWUgYXMKKyAgLy8gKDE2MDAgKiBDMSkgKyAoNDAgKiBDMikgKyBDMyArIDEKKworICBpbnQgY1ZhbHVlc1szXSA9IHswfTsKKyAgZG8geworICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIGJ5dGUgbGVmdCB0aGVuIGl0IHdpbGwgYmUgZW5jb2RlZCBhcyBBU0NJSQorICAgIGlmIChiaXRzLmF2YWlsYWJsZSA9PSA4KSB7CisgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICBpbnQgZmlyc3RCeXRlID0gW2JpdHMgcmVhZEJpdHM6OF07CisgICAgaWYgKGZpcnN0Qnl0ZSA9PSAyNTQpIHsgIC8vIFVubGF0Y2ggY29kZXdvcmQKKyAgICAgIHJldHVybiBZRVM7CisgICAgfQorCisgICAgW3NlbGYgcGFyc2VUd29CeXRlczpmaXJzdEJ5dGUgc2Vjb25kQnl0ZTpbYml0cyByZWFkQml0czo4XSByZXN1bHQ6Y1ZhbHVlc107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgaW50IGNWYWx1ZSA9IGNWYWx1ZXNbaV07CisgICAgICBpZiAoY1ZhbHVlID09IDApIHsgIC8vIFgxMiBzZWdtZW50IHRlcm1pbmF0b3IgPENSPgorICAgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIlxyIl07CisgICAgICB9IGVsc2UgaWYgKGNWYWx1ZSA9PSAxKSB7ICAvLyBYMTIgc2VnbWVudCBzZXBhcmF0b3IgKgorICAgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIioiXTsKKyAgICAgIH0gZWxzZSBpZiAoY1ZhbHVlID09IDIpIHsgIC8vIFgxMiBzdWItZWxlbWVudCBzZXBhcmF0b3IgPgorICAgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIj4iXTsKKyAgICAgIH0gZWxzZSBpZiAoY1ZhbHVlID09IDMpIHsgIC8vIHNwYWNlCisgICAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAiICJdOworICAgICAgfSBlbHNlIGlmIChjVmFsdWUgPCAxNCkgeyAgLy8gMCAtIDkKKyAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKShjVmFsdWUgKyA0NCldOworICAgICAgfSBlbHNlIGlmIChjVmFsdWUgPCA0MCkgeyAgLy8gQSAtIFoKKyAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKShjVmFsdWUgKyA1MSldOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgfQorICAgIH0KKyAgfSB3aGlsZSAoYml0cy5hdmFpbGFibGUgPiAwKTsKKyAgcmV0dXJuIFlFUzsKK30KKworKyAodm9pZClwYXJzZVR3b0J5dGVzOihpbnQpZmlyc3RCeXRlIHNlY29uZEJ5dGU6KGludClzZWNvbmRCeXRlIHJlc3VsdDooaW50W10pcmVzdWx0IHsKKyAgaW50IGZ1bGxCaXRWYWx1ZSA9IChmaXJzdEJ5dGUgPDwgOCkgKyBzZWNvbmRCeXRlIC0gMTsKKyAgaW50IHRlbXAgPSBmdWxsQml0VmFsdWUgLyAxNjAwOworICByZXN1bHRbMF0gPSB0ZW1wOworICBmdWxsQml0VmFsdWUgLT0gdGVtcCAqIDE2MDA7CisgIHRlbXAgPSBmdWxsQml0VmFsdWUgLyA0MDsKKyAgcmVzdWx0WzFdID0gdGVtcDsKKyAgcmVzdWx0WzJdID0gZnVsbEJpdFZhbHVlIC0gdGVtcCAqIDQwOworfQorCisKKy8qKgorICogU2VlIElTTyAxNjAyMjoyMDA2LCA1LjIuOCBhbmQgQW5uZXggQyBUYWJsZSBDLjMKKyAqLworKyAodm9pZClkZWNvZGVFZGlmYWN0U2VnbWVudDooWlhCaXRTb3VyY2UgKiliaXRzIHJlc3VsdDooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0IHsKKyAgZG8geworICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgdHdvIG9yIGxlc3MgYnl0ZXMgbGVmdCB0aGVuIGl0IHdpbGwgYmUgZW5jb2RlZCBhcyBBU0NJSQorICAgIGlmIChiaXRzLmF2YWlsYWJsZSA8PSAxNikgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICBpbnQgZWRpZmFjdFZhbHVlID0gW2JpdHMgcmVhZEJpdHM6Nl07CisKKyAgICAgIC8vIENoZWNrIGZvciB0aGUgdW5sYXRjaCBjaGFyYWN0ZXIKKyAgICAgIGlmIChlZGlmYWN0VmFsdWUgPT0gMHgxRikgeyAgLy8gMDExMTExCisgICAgICAgIC8vIFJlYWQgcmVzdCBvZiBieXRlLCB3aGljaCBzaG91bGQgYmUgMCwgYW5kIHN0b3AKKyAgICAgICAgaW50IGJpdHNMZWZ0ID0gOCAtIGJpdHMuYml0T2Zmc2V0OworICAgICAgICBpZiAoYml0c0xlZnQgIT0gOCkgeworICAgICAgICAgIFtiaXRzIHJlYWRCaXRzOmJpdHNMZWZ0XTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIGlmICgoZWRpZmFjdFZhbHVlICYgMHgyMCkgPT0gMCkgeyAgLy8gbm8gMSBpbiB0aGUgbGVhZGluZyAoNnRoKSBiaXQKKyAgICAgICAgZWRpZmFjdFZhbHVlIHw9IDB4NDA7ICAvLyBBZGQgYSBsZWFkaW5nIDAxIHRvIHRoZSA2IGJpdCBiaW5hcnkgdmFsdWUKKyAgICAgIH0KKyAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJWMiLCAoY2hhcillZGlmYWN0VmFsdWVdOworICAgIH0KKyAgfSB3aGlsZSAoYml0cy5hdmFpbGFibGUgPiAwKTsKK30KKworCisvKioKKyAqIFNlZSBJU08gMTYwMjI6MjAwNiwgNS4yLjkgYW5kIEFubmV4IEIsIEIuMgorICovCisrIChCT09MKWRlY29kZUJhc2UyNTZTZWdtZW50OihaWEJpdFNvdXJjZSAqKWJpdHMgcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQgYnl0ZVNlZ21lbnRzOihOU011dGFibGVBcnJheSAqKWJ5dGVTZWdtZW50cyB7CisgIGludCBjb2Rld29yZFBvc2l0aW9uID0gMSArIGJpdHMuYnl0ZU9mZnNldDsgLy8gcG9zaXRpb24gaXMgMS1pbmRleGVkCisgIGludCBkMSA9IFtzZWxmIHVucmFuZG9taXplMjU1U3RhdGU6W2JpdHMgcmVhZEJpdHM6OF0gYmFzZTI1NkNvZGV3b3JkUG9zaXRpb246Y29kZXdvcmRQb3NpdGlvbisrXTsKKyAgaW50IGNvdW50OworICBpZiAoZDEgPT0gMCkgeworICAgIGNvdW50ID0gW2JpdHMgYXZhaWxhYmxlXSAvIDg7CisgIH0gZWxzZSBpZiAoZDEgPCAyNTApIHsKKyAgICBjb3VudCA9IGQxOworICB9IGVsc2UgeworICAgIGNvdW50ID0gMjUwICogKGQxIC0gMjQ5KSArIFtzZWxmIHVucmFuZG9taXplMjU1U3RhdGU6W2JpdHMgcmVhZEJpdHM6OF0gYmFzZTI1NkNvZGV3b3JkUG9zaXRpb246Y29kZXdvcmRQb3NpdGlvbisrXTsKKyAgfQorCisgIGlmIChjb3VudCA8IDApIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBOU011dGFibGVBcnJheSAqYnl0ZXNBcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjb3VudF07CisgIGludDhfdCBieXRlc1tjb3VudF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgIGlmIChbYml0cyBhdmFpbGFibGVdIDwgOCkgeworICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgICBpbnQ4X3QgYnl0ZSA9IChpbnQ4X3QpW3NlbGYgdW5yYW5kb21pemUyNTVTdGF0ZTpbYml0cyByZWFkQml0czo4XSBiYXNlMjU2Q29kZXdvcmRQb3NpdGlvbjpjb2Rld29yZFBvc2l0aW9uKytdOworICAgIGJ5dGVzW2ldID0gYnl0ZTsKKyAgICBbYnl0ZXNBcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhDaGFyOmJ5dGVdXTsKKyAgfQorICBbYnl0ZVNlZ21lbnRzIGFkZE9iamVjdDpieXRlc0FycmF5XTsKKworICBbcmVzdWx0IGFwcGVuZFN0cmluZzpbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDpjb3VudCBlbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXV07CisgIHJldHVybiBZRVM7Cit9CisKKworLyoqCisgKiBTZWUgSVNPIDE2MDIyOjIwMDYsIEFubmV4IEIsIEIuMgorICovCisrIChpbnQpdW5yYW5kb21pemUyNTVTdGF0ZTooaW50KXJhbmRvbWl6ZWRCYXNlMjU2Q29kZXdvcmQgYmFzZTI1NkNvZGV3b3JkUG9zaXRpb246KGludCliYXNlMjU2Q29kZXdvcmRQb3NpdGlvbiB7CisgIGludCBwc2V1ZG9SYW5kb21OdW1iZXIgPSAoKDE0OSAqIGJhc2UyNTZDb2Rld29yZFBvc2l0aW9uKSAlIDI1NSkgKyAxOworICBpbnQgdGVtcFZhcmlhYmxlID0gcmFuZG9taXplZEJhc2UyNTZDb2Rld29yZCAtIHBzZXVkb1JhbmRvbU51bWJlcjsKKyAgcmV0dXJuIHRlbXBWYXJpYWJsZSA+PSAwID8gdGVtcFZhcmlhYmxlIDogdGVtcFZhcmlhYmxlICsgMjU2OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyL1pYRGF0YU1hdHJpeERlY29kZXIuaCBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNTA2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyL1pYRGF0YU1hdHJpeERlY29kZXIuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIFRoZSBtYWluIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgRGF0YSBNYXRyaXggQ29kZSBkZWNvZGluZyAtLSBhcyBvcHBvc2VkIHRvIGxvY2F0aW5nIGFuZCBleHRyYWN0aW5nCisgKiB0aGUgRGF0YSBNYXRyaXggQ29kZSBmcm9tIGFuIGltYWdlLgorICovCisKK0BjbGFzcyBaWEJpdE1hdHJpeCwgWlhEZWNvZGVyUmVzdWx0LCBaWFJlZWRTb2xvbW9uRGVjb2RlcjsKKworQGludGVyZmFjZSBaWERhdGFNYXRyaXhEZWNvZGVyIDogTlNPYmplY3QKKworLSAoWlhEZWNvZGVyUmVzdWx0ICopZGVjb2RlOihCT09MICoqKWltYWdlIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKFpYRGVjb2RlclJlc3VsdCAqKWRlY29kZU1hdHJpeDooWlhCaXRNYXRyaXggKiliaXRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyL1pYRGF0YU1hdHJpeERlY29kZXIubSBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGVjb2Rlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5M2Q2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyL1pYRGF0YU1hdHJpeERlY29kZXIubQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeEJpdE1hdHJpeFBhcnNlci5oIgorI2ltcG9ydCAiWlhEYXRhTWF0cml4RGF0YUJsb2NrLmgiCisjaW1wb3J0ICJaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmgiCisjaW1wb3J0ICJaWERhdGFNYXRyaXhEZWNvZGVyLmgiCisjaW1wb3J0ICJaWERhdGFNYXRyaXhWZXJzaW9uLmgiCisjaW1wb3J0ICJaWERlY29kZXJSZXN1bHQuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEdlbmVyaWNHRi5oIgorI2ltcG9ydCAiWlhSZWVkU29sb21vbkRlY29kZXIuaCIKKworQGludGVyZmFjZSBaWERhdGFNYXRyaXhEZWNvZGVyICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYUmVlZFNvbG9tb25EZWNvZGVyICpyc0RlY29kZXI7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYRGF0YU1hdHJpeERlY29kZXIKKworLSAoaWQpaW5pdCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3JzRGVjb2RlciA9IFtbWlhSZWVkU29sb21vbkRlY29kZXIgYWxsb2NdIGluaXRXaXRoRmllbGQ6W1pYR2VuZXJpY0dGIERhdGFNYXRyaXhGaWVsZDI1Nl1dOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy8qKgorICogQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY2FuIGRlY29kZSBhIERhdGEgTWF0cml4IENvZGUgcmVwcmVzZW50ZWQgYXMgYSAyRCBhcnJheSBvZiBib29sZWFucy4KKyAqICJ0cnVlIiBpcyB0YWtlbiB0byBtZWFuIGEgYmxhY2sgbW9kdWxlLgorICovCistIChaWERlY29kZXJSZXN1bHQgKilkZWNvZGU6KEJPT0wgKiopaW1hZ2UgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaW50IGRpbWVuc2lvbiA9IGxlbmd0aDsKKyAgWlhCaXRNYXRyaXggKmJpdHMgPSBbW1pYQml0TWF0cml4IGFsbG9jXSBpbml0V2l0aERpbWVuc2lvbjpkaW1lbnNpb25dOworICBmb3IgKGludCBpID0gMDsgaSA8IGRpbWVuc2lvbjsgaSsrKSB7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBkaW1lbnNpb247IGorKykgeworICAgICAgaWYgKGltYWdlW2ldW2pdKSB7CisgICAgICAgIFtiaXRzIHNldFg6aiB5OmldOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBbc2VsZiBkZWNvZGVNYXRyaXg6Yml0cyBlcnJvcjplcnJvcl07Cit9CisKKworLyoqCisgKiBEZWNvZGVzIGEgRGF0YSBNYXRyaXggQ29kZSByZXByZXNlbnRlZCBhcyBhIEJpdE1hdHJpeC4gQSAxIG9yICJ0cnVlIiBpcyB0YWtlbgorICogdG8gbWVhbiBhIGJsYWNrIG1vZHVsZS4KKyAqLworLSAoWlhEZWNvZGVyUmVzdWx0ICopZGVjb2RlTWF0cml4OihaWEJpdE1hdHJpeCAqKWJpdHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWERhdGFNYXRyaXhCaXRNYXRyaXhQYXJzZXIgKnBhcnNlciA9IFtbWlhEYXRhTWF0cml4Qml0TWF0cml4UGFyc2VyIGFsbG9jXSBpbml0V2l0aEJpdE1hdHJpeDpiaXRzIGVycm9yOmVycm9yXTsKKyAgaWYgKCFwYXJzZXIpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIFpYRGF0YU1hdHJpeFZlcnNpb24gKnZlcnNpb24gPSBbcGFyc2VyIHZlcnNpb25dOworCisgIE5TQXJyYXkgKmNvZGV3b3JkcyA9IFtwYXJzZXIgcmVhZENvZGV3b3Jkc107CisgIE5TQXJyYXkgKmRhdGFCbG9ja3MgPSBbWlhEYXRhTWF0cml4RGF0YUJsb2NrIGRhdGFCbG9ja3M6Y29kZXdvcmRzIHZlcnNpb246dmVyc2lvbl07CisKKyAgTlNVSW50ZWdlciBkYXRhQmxvY2tzQ291bnQgPSBbZGF0YUJsb2NrcyBjb3VudF07CisKKyAgaW50IHRvdGFsQnl0ZXMgPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGFCbG9ja3NDb3VudDsgaSsrKSB7CisgICAgdG90YWxCeXRlcyArPSBbZGF0YUJsb2Nrc1tpXSBudW1EYXRhQ29kZXdvcmRzXTsKKyAgfQorCisgIGlmICh0b3RhbEJ5dGVzID09IDApIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaW50OF90IHJlc3VsdEJ5dGVzW3RvdGFsQnl0ZXNdOworCisgIGZvciAoaW50IGogPSAwOyBqIDwgZGF0YUJsb2Nrc0NvdW50OyBqKyspIHsKKyAgICBaWERhdGFNYXRyaXhEYXRhQmxvY2sgKmRhdGFCbG9jayA9IGRhdGFCbG9ja3Nbal07CisgICAgTlNNdXRhYmxlQXJyYXkgKmNvZGV3b3JkQnl0ZXMgPSBkYXRhQmxvY2suY29kZXdvcmRzOworICAgIGludCBudW1EYXRhQ29kZXdvcmRzID0gW2RhdGFCbG9jayBudW1EYXRhQ29kZXdvcmRzXTsKKyAgICBpZiAoIVtzZWxmIGNvcnJlY3RFcnJvcnM6Y29kZXdvcmRCeXRlcyBudW1EYXRhQ29kZXdvcmRzOm51bURhdGFDb2Rld29yZHMgZXJyb3I6ZXJyb3JdKSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bURhdGFDb2Rld29yZHM7IGkrKykgeworICAgICAgcmVzdWx0Qnl0ZXNbaSAqIGRhdGFCbG9ja3NDb3VudCArIGpdID0gW2NvZGV3b3JkQnl0ZXNbaV0gY2hhclZhbHVlXTsKKyAgICB9CisgIH0KKworICByZXR1cm4gW1pYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXIgZGVjb2RlOnJlc3VsdEJ5dGVzIGxlbmd0aDp0b3RhbEJ5dGVzIGVycm9yOmVycm9yXTsKK30KKworCisvKioKKyAqIEdpdmVuIGRhdGEgYW5kIGVycm9yLWNvcnJlY3Rpb24gY29kZXdvcmRzIHJlY2VpdmVkLCBwb3NzaWJseSBjb3JydXB0ZWQgYnkgZXJyb3JzLCBhdHRlbXB0cyB0bworICogY29ycmVjdCB0aGUgZXJyb3JzIGluLXBsYWNlIHVzaW5nIFJlZWQtU29sb21vbiBlcnJvciBjb3JyZWN0aW9uLgorICovCistIChCT09MKWNvcnJlY3RFcnJvcnM6KE5TTXV0YWJsZUFycmF5ICopY29kZXdvcmRCeXRlcyBudW1EYXRhQ29kZXdvcmRzOihpbnQpbnVtRGF0YUNvZGV3b3JkcyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGludCBudW1Db2Rld29yZHMgPSAoaW50KVtjb2Rld29yZEJ5dGVzIGNvdW50XTsKKyAgaW50IGNvZGV3b3Jkc0ludHNbbnVtQ29kZXdvcmRzXTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db2Rld29yZHM7IGkrKykgeworICAgIGNvZGV3b3Jkc0ludHNbaV0gPSBbY29kZXdvcmRCeXRlc1tpXSBjaGFyVmFsdWVdICYgMHhGRjsKKyAgfQorICBpbnQgbnVtRUNDb2Rld29yZHMgPSAoaW50KVtjb2Rld29yZEJ5dGVzIGNvdW50XSAtIG51bURhdGFDb2Rld29yZHM7CisKKyAgTlNFcnJvciAqZGVjb2RlRXJyb3IgPSBuaWw7CisgIGlmICghW3NlbGYucnNEZWNvZGVyIGRlY29kZTpjb2Rld29yZHNJbnRzIHJlY2VpdmVkTGVuOm51bUNvZGV3b3JkcyB0d29TOm51bUVDQ29kZXdvcmRzIGVycm9yOiZkZWNvZGVFcnJvcl0pIHsKKyAgICBpZiAoZGVjb2RlRXJyb3IuY29kZSA9PSBaWFJlZWRTb2xvbW9uRXJyb3IpIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gQ2hlY2tzdW1FcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gTk87CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gZGVjb2RlRXJyb3I7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICB9CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1EYXRhQ29kZXdvcmRzOyBpKyspIHsKKyAgICBjb2Rld29yZEJ5dGVzW2ldID0gW05TTnVtYmVyIG51bWJlcldpdGhDaGFyOmNvZGV3b3Jkc0ludHNbaV1dOworICB9CisgIHJldHVybiBZRVM7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4VmVyc2lvbi5oIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZGVjb2Rlci9aWERhdGFNYXRyaXhWZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdiNGRmNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4VmVyc2lvbi5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogRW5jYXBzdWxhdGVzIGEgc2V0IG9mIGVycm9yLWNvcnJlY3Rpb24gYmxvY2tzIGluIG9uZSBzeW1ib2wgdmVyc2lvbi4gTW9zdCB2ZXJzaW9ucyB3aWxsCisgKiB1c2UgYmxvY2tzIG9mIGRpZmZlcmluZyBzaXplcyB3aXRoaW4gb25lIHZlcnNpb24sIHNvLCB0aGlzIGVuY2Fwc3VsYXRlcyB0aGUgcGFyYW1ldGVycyBmb3IKKyAqIGVhY2ggc2V0IG9mIGJsb2Nrcy4gSXQgYWxzbyBob2xkcyB0aGUgbnVtYmVyIG9mIGVycm9yLWNvcnJlY3Rpb24gY29kZXdvcmRzIHBlciBibG9jayBzaW5jZSBpdAorICogd2lsbCBiZSB0aGUgc2FtZSBhY3Jvc3MgYWxsIGJsb2NrcyB3aXRoaW4gb25lIHZlcnNpb24uCisgKi8KKworQGludGVyZmFjZSBaWERhdGFNYXRyaXhFQ0Jsb2NrcyA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBOU0FycmF5ICplY0Jsb2NrczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgZWNDb2Rld29yZHM7CisKK0BlbmQKKworLyoqCisgKiBFbmNhcHN1YWx0ZXMgdGhlIHBhcmFtZXRlcnMgZm9yIG9uZSBlcnJvci1jb3JyZWN0aW9uIGJsb2NrIGluIG9uZSBzeW1ib2wgdmVyc2lvbi4KKyAqIFRoaXMgaW5jbHVkZXMgdGhlIG51bWJlciBvZiBkYXRhIGNvZGV3b3JkcywgYW5kIHRoZSBudW1iZXIgb2YgdGltZXMgYSBibG9jayB3aXRoIHRoZXNlCisgKiBwYXJhbWV0ZXJzIGlzIHVzZWQgY29uc2VjdXRpdmVseSBpbiB0aGUgRGF0YSBNYXRyaXggY29kZSB2ZXJzaW9uJ3MgZm9ybWF0LgorICovCisKK0BpbnRlcmZhY2UgWlhEYXRhTWF0cml4RUNCIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBjb3VudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgZGF0YUNvZGV3b3JkczsKKworQGVuZAorCisvKioKKyAqIFRoZSBWZXJzaW9uIG9iamVjdCBlbmNhcHN1bGF0ZXMgYXR0cmlidXRlcyBhYm91dCBhIHBhcnRpY3VsYXIKKyAqIHNpemUgRGF0YSBNYXRyaXggQ29kZS4KKyAqLworCitAaW50ZXJmYWNlIFpYRGF0YU1hdHJpeFZlcnNpb24gOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgWlhEYXRhTWF0cml4RUNCbG9ja3MgKmVjQmxvY2tzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGRhdGFSZWdpb25TaXplUm93czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgc3ltYm9sU2l6ZUNvbHVtbnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IHN5bWJvbFNpemVSb3dzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCB0b3RhbENvZGV3b3JkczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgdmVyc2lvbk51bWJlcjsKKworKyAoWlhEYXRhTWF0cml4VmVyc2lvbiAqKXZlcnNpb25Gb3JEaW1lbnNpb25zOihpbnQpbnVtUm93cyBudW1Db2x1bW5zOihpbnQpbnVtQ29sdW1uczsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZGVjb2Rlci9aWERhdGFNYXRyaXhWZXJzaW9uLm0gYi9aWGluZ09iakMvZGF0YW1hdHJpeC9kZWNvZGVyL1pYRGF0YU1hdHJpeFZlcnNpb24ubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDVmZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZGVjb2Rlci9aWERhdGFNYXRyaXhWZXJzaW9uLm0KQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeFZlcnNpb24uaCIKKworQGltcGxlbWVudGF0aW9uIFpYRGF0YU1hdHJpeEVDQmxvY2tzCisKKy0gKGlkKWluaXRXaXRoQ29kZXdvcmRzOihpbnQpZWNDb2Rld29yZHMgZWNCbG9ja3M6KFpYRGF0YU1hdHJpeEVDQiAqKWVjQmxvY2tzIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfZWNDb2Rld29yZHMgPSBlY0NvZGV3b3JkczsKKyAgICBfZWNCbG9ja3MgPSBAW2VjQmxvY2tzXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aENvZGV3b3JkczooaW50KWVjQ29kZXdvcmRzIGVjQmxvY2tzMTooWlhEYXRhTWF0cml4RUNCICopZWNCbG9ja3MxIGVjQmxvY2tzMjooWlhEYXRhTWF0cml4RUNCICopZWNCbG9ja3MyIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfZWNDb2Rld29yZHMgPSBlY0NvZGV3b3JkczsKKyAgICBfZWNCbG9ja3MgPSBAW2VjQmxvY2tzMSwgZWNCbG9ja3MyXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKKworQGltcGxlbWVudGF0aW9uIFpYRGF0YU1hdHJpeEVDQgorCistIChpZClpbml0V2l0aENvdW50OihpbnQpY291bnQgZGF0YUNvZGV3b3JkczooaW50KWRhdGFDb2Rld29yZHMgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9jb3VudCA9IGNvdW50OworICAgIF9kYXRhQ29kZXdvcmRzID0gZGF0YUNvZGV3b3JkczsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKKworc3RhdGljIE5TQXJyYXkgKlZFUlNJT05TID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gWlhEYXRhTWF0cml4VmVyc2lvbgorCistIChpZClpbml0V2l0aFZlcnNpb25OdW1iZXI6KGludCl2ZXJzaW9uTnVtYmVyIHN5bWJvbFNpemVSb3dzOihpbnQpc3ltYm9sU2l6ZVJvd3Mgc3ltYm9sU2l6ZUNvbHVtbnM6KGludClzeW1ib2xTaXplQ29sdW1ucworICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOihpbnQpZGF0YVJlZ2lvblNpemVSb3dzIGRhdGFSZWdpb25TaXplQ29sdW1uczooaW50KWRhdGFSZWdpb25TaXplQ29sdW1ucyBlY0Jsb2NrczooWlhEYXRhTWF0cml4RUNCbG9ja3MgKillY0Jsb2NrcyB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3ZlcnNpb25OdW1iZXIgPSB2ZXJzaW9uTnVtYmVyOworICAgIF9zeW1ib2xTaXplUm93cyA9IHN5bWJvbFNpemVSb3dzOworICAgIF9zeW1ib2xTaXplQ29sdW1ucyA9IHN5bWJvbFNpemVDb2x1bW5zOworICAgIF9kYXRhUmVnaW9uU2l6ZVJvd3MgPSBkYXRhUmVnaW9uU2l6ZVJvd3M7CisgICAgX2RhdGFSZWdpb25TaXplQ29sdW1ucyA9IGRhdGFSZWdpb25TaXplQ29sdW1uczsKKyAgICBfZWNCbG9ja3MgPSBlY0Jsb2NrczsKKworICAgIGludCB0b3RhbCA9IDA7CisgICAgaW50IGVjQ29kZXdvcmRzID0gZWNCbG9ja3MuZWNDb2Rld29yZHM7CisgICAgTlNBcnJheSAqZWNiQXJyYXkgPSBlY0Jsb2Nrcy5lY0Jsb2NrczsKKyAgICBmb3IgKFpYRGF0YU1hdHJpeEVDQiAqZWNCbG9jayBpbiBlY2JBcnJheSkgeworICAgICAgdG90YWwgKz0gZWNCbG9jay5jb3VudCAqIChlY0Jsb2NrLmRhdGFDb2Rld29yZHMgKyBlY0NvZGV3b3Jkcyk7CisgICAgfQorICAgIF90b3RhbENvZGV3b3JkcyA9IHRvdGFsOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy8qKgorICogRGVkdWNlcyB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb20gRGF0YSBNYXRyaXggZGltZW5zaW9ucy4KKyAqLworKyAoWlhEYXRhTWF0cml4VmVyc2lvbiAqKXZlcnNpb25Gb3JEaW1lbnNpb25zOihpbnQpbnVtUm93cyBudW1Db2x1bW5zOihpbnQpbnVtQ29sdW1ucyB7CisgIGlmICgobnVtUm93cyAmIDB4MDEpICE9IDAgfHwgKG51bUNvbHVtbnMgJiAweDAxKSAhPSAwKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGZvciAoWlhEYXRhTWF0cml4VmVyc2lvbiAqdmVyc2lvbiBpbiBWRVJTSU9OUykgeworICAgIGlmICh2ZXJzaW9uLnN5bWJvbFNpemVSb3dzID09IG51bVJvd3MgJiYgdmVyc2lvbi5zeW1ib2xTaXplQ29sdW1ucyA9PSBudW1Db2x1bW5zKSB7CisgICAgICByZXR1cm4gdmVyc2lvbjsKKyAgICB9CisgIH0KKworICByZXR1cm4gbmlsOworfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKKyAgcmV0dXJuIFtAKHNlbGYudmVyc2lvbk51bWJlcikgc3RyaW5nVmFsdWVdOworfQorCisKKy8qKgorICogU2VlIElTTyAxNjAyMjoyMDA2IDUuNS4xIFRhYmxlIDcKKyAqLworKyAodm9pZClpbml0aWFsaXplIHsKKyAgVkVSU0lPTlMgPSBAW1tbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplQ29sdW1uczoxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZVJvd3M6OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM6OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6NQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjNdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjEyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplQ29sdW1uczoxMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZVJvd3M6MTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVDb2x1bW5zOjEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQmxvY2tzIGFsbG9jXSBpbml0V2l0aENvZGV3b3Jkczo3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQiBhbGxvY10gaW5pdFdpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6NV1dXSwKKworICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhWZXJzaW9uIGFsbG9jXSBpbml0V2l0aFZlcnNpb25OdW1iZXI6MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZVJvd3M6MTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVDb2x1bW5zOjE0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplUm93czoxMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM6MTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCbG9ja3MgYWxsb2NdIGluaXRXaXRoQ29kZXdvcmRzOjEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQiBhbGxvY10gaW5pdFdpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6OF1dXSwKKworICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhWZXJzaW9uIGFsbG9jXSBpbml0V2l0aFZlcnNpb25OdW1iZXI6NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZVJvd3M6MTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVDb2x1bW5zOjE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplUm93czoxNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM6MTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCbG9ja3MgYWxsb2NdIGluaXRXaXRoQ29kZXdvcmRzOjEyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQiBhbGxvY10gaW5pdFdpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6MTJdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjE4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplQ29sdW1uczoxOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZVJvd3M6MTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVDb2x1bW5zOjE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQmxvY2tzIGFsbG9jXSBpbml0V2l0aENvZGV3b3JkczoxNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjE4XV1dLAorCisgICAgICAgICAgICAgICBbW1pYRGF0YU1hdHJpeFZlcnNpb24gYWxsb2NdIGluaXRXaXRoVmVyc2lvbk51bWJlcjo2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czoyMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6MjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOjE4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoxOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6MTgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCIGFsbG9jXSBpbml0V2l0aENvdW50OjEgZGF0YUNvZGV3b3JkczoyMl1dXSwKKworICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhWZXJzaW9uIGFsbG9jXSBpbml0V2l0aFZlcnNpb25OdW1iZXI6NworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZVJvd3M6MjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVDb2x1bW5zOjIyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplUm93czoyMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM6MjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCbG9ja3MgYWxsb2NdIGluaXRXaXRoQ29kZXdvcmRzOjIwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQiBhbGxvY10gaW5pdFdpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6MzBdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplQ29sdW1uczoyNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZVJvd3M6MjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVDb2x1bW5zOjIyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQmxvY2tzIGFsbG9jXSBpbml0V2l0aENvZGV3b3JkczoyNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjM2XV1dLAorCisgICAgICAgICAgICAgICBbW1pYRGF0YU1hdHJpeFZlcnNpb24gYWxsb2NdIGluaXRXaXRoVmVyc2lvbk51bWJlcjo5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czoyNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6MjYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOjI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoyNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6MjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCIGFsbG9jXSBpbml0V2l0aENvdW50OjEgZGF0YUNvZGV3b3Jkczo0NF1dXSwKKworICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhWZXJzaW9uIGFsbG9jXSBpbml0V2l0aFZlcnNpb25OdW1iZXI6MTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplQ29sdW1uczozMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZVJvd3M6MTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVDb2x1bW5zOjE0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQmxvY2tzIGFsbG9jXSBpbml0V2l0aENvZGV3b3JkczozNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjYyXV1dLAorCisgICAgICAgICAgICAgICBbW1pYRGF0YU1hdHJpeFZlcnNpb24gYWxsb2NdIGluaXRXaXRoVmVyc2lvbk51bWJlcjoxMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZVJvd3M6MzYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVDb2x1bW5zOjM2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplUm93czoxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM6MTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCbG9ja3MgYWxsb2NdIGluaXRXaXRoQ29kZXdvcmRzOjQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQiBhbGxvY10gaW5pdFdpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6ODZdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjEyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czo0MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6NDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOjE4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoxOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6NDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCIGFsbG9jXSBpbml0V2l0aENvdW50OjEgZGF0YUNvZGV3b3JkczoxMTRdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjEzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czo0NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6NDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOjIwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoyMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6NTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCIGFsbG9jXSBpbml0V2l0aENvdW50OjEgZGF0YUNvZGV3b3JkczoxNDRdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjE0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czo0OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6NDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOjIyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6NjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCIGFsbG9jXSBpbml0V2l0aENvdW50OjEgZGF0YUNvZGV3b3JkczoxNzRdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjE1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czo1MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6NTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOjI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoyNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6NDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCIGFsbG9jXSBpbml0V2l0aENvdW50OjIgZGF0YUNvZGV3b3JkczoxMDJdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czo2NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6NjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOjE0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoxNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6NTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCIGFsbG9jXSBpbml0V2l0aENvdW50OjIgZGF0YUNvZGV3b3JkczoxNDBdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjE3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czo3MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6NzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOjE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6MzYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCIGFsbG9jXSBpbml0V2l0aENvdW50OjQgZGF0YUNvZGV3b3Jkczo5Ml1dXSwKKworICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhWZXJzaW9uIGFsbG9jXSBpbml0V2l0aFZlcnNpb25OdW1iZXI6MTgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjgwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplQ29sdW1uczo4MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZVJvd3M6MTgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVDb2x1bW5zOjE4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQmxvY2tzIGFsbG9jXSBpbml0V2l0aENvZGV3b3Jkczo0OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjExNF1dXSwKKworICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhWZXJzaW9uIGFsbG9jXSBpbml0V2l0aFZlcnNpb25OdW1iZXI6MTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjg4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplQ29sdW1uczo4OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZVJvd3M6MjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVDb2x1bW5zOjIwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQmxvY2tzIGFsbG9jXSBpbml0V2l0aENvZGV3b3Jkczo1NgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjE0NF1dXSwKKworICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhWZXJzaW9uIGFsbG9jXSBpbml0V2l0aFZlcnNpb25OdW1iZXI6MjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjk2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplQ29sdW1uczo5NgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZVJvd3M6MjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVDb2x1bW5zOjIyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQmxvY2tzIGFsbG9jXSBpbml0V2l0aENvZGV3b3Jkczo2OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjE3NF1dXSwKKworICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhWZXJzaW9uIGFsbG9jXSBpbml0V2l0aFZlcnNpb25OdW1iZXI6MjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjEwNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6MTA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplUm93czoyNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM6MjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCbG9ja3MgYWxsb2NdIGluaXRXaXRoQ29kZXdvcmRzOjU2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQiBhbGxvY10gaW5pdFdpdGhDb3VudDo2IGRhdGFDb2Rld29yZHM6MTM2XV1dLAorCisgICAgICAgICAgICAgICBbW1pYRGF0YU1hdHJpeFZlcnNpb24gYWxsb2NdIGluaXRXaXRoVmVyc2lvbk51bWJlcjoyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZVJvd3M6MTIwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplQ29sdW1uczoxMjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOjE4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoxOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6NjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCIGFsbG9jXSBpbml0V2l0aENvdW50OjYgZGF0YUNvZGV3b3JkczoxNzVdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjIzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czoxMzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVDb2x1bW5zOjEzMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZVJvd3M6MjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVDb2x1bW5zOjIwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQmxvY2tzIGFsbG9jXSBpbml0V2l0aENvZGV3b3Jkczo2MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6OCBkYXRhQ29kZXdvcmRzOjE2M11dXSwKKworICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhWZXJzaW9uIGFsbG9jXSBpbml0V2l0aFZlcnNpb25OdW1iZXI6MjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjE0NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6MTQ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplUm93czoyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM6MjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCbG9ja3MgYWxsb2NdIGluaXRXaXRoQ29kZXdvcmRzOjYyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbW1pYRGF0YU1hdHJpeEVDQiBhbGxvY10gaW5pdFdpdGhDb3VudDo4IGRhdGFDb2Rld29yZHM6MTU2XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1taWERhdGFNYXRyaXhFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjE1NV1dXSwKKworICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhWZXJzaW9uIGFsbG9jXSBpbml0V2l0aFZlcnNpb25OdW1iZXI6MjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVDb2x1bW5zOjE4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplUm93czo2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6NworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjVdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjI2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czo4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplQ29sdW1uczozMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZVJvd3M6NgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM6MTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCbG9ja3MgYWxsb2NdIGluaXRXaXRoQ29kZXdvcmRzOjExCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQiBhbGxvY10gaW5pdFdpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6MTBdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czoxMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6MjYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOjEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoyNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6MTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCIGFsbG9jXSBpbml0V2l0aENvdW50OjEgZGF0YUNvZGV3b3JkczoxNl1dXSwKKworICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhWZXJzaW9uIGFsbG9jXSBpbml0V2l0aFZlcnNpb25OdW1iZXI6MjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVSb3dzOjEyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplQ29sdW1uczozNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZVJvd3M6MTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVDb2x1bW5zOjE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQmxvY2tzIGFsbG9jXSBpbml0V2l0aENvZGV3b3JkczoxOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjIyXV1dLAorCisgICAgICAgICAgICAgICBbW1pYRGF0YU1hdHJpeFZlcnNpb24gYWxsb2NdIGluaXRXaXRoVmVyc2lvbk51bWJlcjoyOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZVJvd3M6MTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFNpemVDb2x1bW5zOjM2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplUm93czoxNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVnaW9uU2l6ZUNvbHVtbnM6MTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCbG9ja3MgYWxsb2NdIGluaXRXaXRoQ29kZXdvcmRzOjI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczpbW1pYRGF0YU1hdHJpeEVDQiBhbGxvY10gaW5pdFdpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6MzJdXV0sCisKKyAgICAgICAgICAgICAgIFtbWlhEYXRhTWF0cml4VmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOjMwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xTaXplUm93czoxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU2l6ZUNvbHVtbnM6NDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlZ2lvblNpemVSb3dzOjE0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWdpb25TaXplQ29sdW1uczoyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M6W1taWERhdGFNYXRyaXhFQ0Jsb2NrcyBhbGxvY10gaW5pdFdpdGhDb2Rld29yZHM6MjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzOltbWlhEYXRhTWF0cml4RUNCIGFsbG9jXSBpbml0V2l0aENvdW50OjEgZGF0YUNvZGV3b3Jkczo0OV1dXV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RldGVjdG9yL1pYRGF0YU1hdHJpeERldGVjdG9yLmggYi9aWGluZ09iakMvZGF0YW1hdHJpeC9kZXRlY3Rvci9aWERhdGFNYXRyaXhEZXRlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNWY0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9kZXRlY3Rvci9aWERhdGFNYXRyaXhEZXRlY3Rvci5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogRW5jYXBzdWxhdGVzIGxvZ2ljIHRoYXQgY2FuIGRldGVjdCBhIERhdGEgTWF0cml4IENvZGUgaW4gYW4gaW1hZ2UsIGV2ZW4gaWYgdGhlIERhdGEgTWF0cml4IENvZGUKKyAqIGlzIHJvdGF0ZWQgb3Igc2tld2VkLCBvciBwYXJ0aWFsbHkgb2JzY3VyZWQuCisgKi8KKworQGNsYXNzIFpYQml0TWF0cml4LCBaWERldGVjdG9yUmVzdWx0LCBaWFdoaXRlUmVjdGFuZ2xlRGV0ZWN0b3I7CisKK0BpbnRlcmZhY2UgWlhEYXRhTWF0cml4RGV0ZWN0b3IgOiBOU09iamVjdAorCistIChpZClpbml0V2l0aEltYWdlOihaWEJpdE1hdHJpeCAqKWltYWdlIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoWlhEZXRlY3RvclJlc3VsdCAqKWRldGVjdFdpdGhFcnJvcjooTlNFcnJvciAqKillcnJvcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZGV0ZWN0b3IvWlhEYXRhTWF0cml4RGV0ZWN0b3IubSBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RldGVjdG9yL1pYRGF0YU1hdHJpeERldGVjdG9yLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RiMTcyNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2RldGVjdG9yL1pYRGF0YU1hdHJpeERldGVjdG9yLm0KQEAgLTAsMCArMSwzNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeERldGVjdG9yLmgiCisjaW1wb3J0ICJaWERldGVjdG9yUmVzdWx0LmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhHcmlkU2FtcGxlci5oIgorI2ltcG9ydCAiWlhNYXRoVXRpbHMuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKyNpbXBvcnQgIlpYV2hpdGVSZWN0YW5nbGVEZXRlY3Rvci5oIgorCisvKioKKyAqIFNpbXBseSBlbmNhcHN1bGF0ZXMgdHdvIHBvaW50cyBhbmQgYSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgYmV0d2VlbiB0aGVtLgorICovCisKK0BpbnRlcmZhY2UgUmVzdWx0UG9pbnRzQW5kVHJhbnNpdGlvbnMgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWFJlc3VsdFBvaW50ICpmcm9tOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhSZXN1bHRQb2ludCAqdG87CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgdHJhbnNpdGlvbnM7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFJlc3VsdFBvaW50c0FuZFRyYW5zaXRpb25zCisKKy0gKGlkKWluaXRXaXRoRnJvbTooWlhSZXN1bHRQb2ludCAqKWZyb20gdG86KFpYUmVzdWx0UG9pbnQgKil0byB0cmFuc2l0aW9uczooaW50KXRyYW5zaXRpb25zIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfZnJvbSA9IGZyb207CisgICAgX3RvID0gdG87CisgICAgX3RyYW5zaXRpb25zID0gdHJhbnNpdGlvbnM7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7CisgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVALyVALyVkIiwgc2VsZi5mcm9tLCBzZWxmLnRvLCBzZWxmLnRyYW5zaXRpb25zXTsKK30KKworLSAoTlNDb21wYXJpc29uUmVzdWx0KWNvbXBhcmU6KFJlc3VsdFBvaW50c0FuZFRyYW5zaXRpb25zICopb3RoZXJPYmplY3QgeworICByZXR1cm4gW0Aoc2VsZi50cmFuc2l0aW9ucykgY29tcGFyZTpAKG90aGVyT2JqZWN0LnRyYW5zaXRpb25zKV07Cit9CisKK0BlbmQKKworCitAaW50ZXJmYWNlIFpYRGF0YU1hdHJpeERldGVjdG9yICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYQml0TWF0cml4ICppbWFnZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYV2hpdGVSZWN0YW5nbGVEZXRlY3RvciAqcmVjdGFuZ2xlRGV0ZWN0b3I7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYRGF0YU1hdHJpeERldGVjdG9yCisKKy0gKGlkKWluaXRXaXRoSW1hZ2U6KFpYQml0TWF0cml4ICopaW1hZ2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9pbWFnZSA9IGltYWdlOworICAgIF9yZWN0YW5nbGVEZXRlY3RvciA9IFtbWlhXaGl0ZVJlY3RhbmdsZURldGVjdG9yIGFsbG9jXSBpbml0V2l0aEltYWdlOl9pbWFnZSBlcnJvcjplcnJvcl07CisgICAgaWYgKCFfcmVjdGFuZ2xlRGV0ZWN0b3IpIHsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy8qKgorICogRGV0ZWN0cyBhIERhdGEgTWF0cml4IENvZGUgaW4gYW4gaW1hZ2UuCisgKi8KKy0gKFpYRGV0ZWN0b3JSZXN1bHQgKilkZXRlY3RXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBOU0FycmF5ICpjb3JuZXJQb2ludHMgPSBbc2VsZi5yZWN0YW5nbGVEZXRlY3RvciBkZXRlY3RXaXRoRXJyb3I6ZXJyb3JdOworICBpZiAoIWNvcm5lclBvaW50cykgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgWlhSZXN1bHRQb2ludCAqcG9pbnRBID0gY29ybmVyUG9pbnRzWzBdOworICBaWFJlc3VsdFBvaW50ICpwb2ludEIgPSBjb3JuZXJQb2ludHNbMV07CisgIFpYUmVzdWx0UG9pbnQgKnBvaW50QyA9IGNvcm5lclBvaW50c1syXTsKKyAgWlhSZXN1bHRQb2ludCAqcG9pbnREID0gY29ybmVyUG9pbnRzWzNdOworCisgIE5TTXV0YWJsZUFycmF5ICp0cmFuc2l0aW9ucyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTo0XTsKKyAgW3RyYW5zaXRpb25zIGFkZE9iamVjdDpbc2VsZiB0cmFuc2l0aW9uc0JldHdlZW46cG9pbnRBIHRvOnBvaW50Ql1dOworICBbdHJhbnNpdGlvbnMgYWRkT2JqZWN0OltzZWxmIHRyYW5zaXRpb25zQmV0d2Vlbjpwb2ludEEgdG86cG9pbnRDXV07CisgIFt0cmFuc2l0aW9ucyBhZGRPYmplY3Q6W3NlbGYgdHJhbnNpdGlvbnNCZXR3ZWVuOnBvaW50QiB0bzpwb2ludERdXTsKKyAgW3RyYW5zaXRpb25zIGFkZE9iamVjdDpbc2VsZiB0cmFuc2l0aW9uc0JldHdlZW46cG9pbnRDIHRvOnBvaW50RF1dOworICBbdHJhbnNpdGlvbnMgc29ydFVzaW5nU2VsZWN0b3I6QHNlbGVjdG9yKGNvbXBhcmU6KV07CisKKyAgUmVzdWx0UG9pbnRzQW5kVHJhbnNpdGlvbnMgKmxTaWRlT25lID0gKFJlc3VsdFBvaW50c0FuZFRyYW5zaXRpb25zICopdHJhbnNpdGlvbnNbMF07CisgIFJlc3VsdFBvaW50c0FuZFRyYW5zaXRpb25zICpsU2lkZVR3byA9IChSZXN1bHRQb2ludHNBbmRUcmFuc2l0aW9ucyAqKXRyYW5zaXRpb25zWzFdOworCisgIE5TTXV0YWJsZURpY3Rpb25hcnkgKnBvaW50Q291bnQgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyAgW3NlbGYgaW5jcmVtZW50OnBvaW50Q291bnQga2V5OltsU2lkZU9uZSBmcm9tXV07CisgIFtzZWxmIGluY3JlbWVudDpwb2ludENvdW50IGtleTpbbFNpZGVPbmUgdG9dXTsKKyAgW3NlbGYgaW5jcmVtZW50OnBvaW50Q291bnQga2V5OltsU2lkZVR3byBmcm9tXV07CisgIFtzZWxmIGluY3JlbWVudDpwb2ludENvdW50IGtleTpbbFNpZGVUd28gdG9dXTsKKworICBaWFJlc3VsdFBvaW50ICptYXliZVRvcExlZnQgPSBuaWw7CisgIFpYUmVzdWx0UG9pbnQgKmJvdHRvbUxlZnQgPSBuaWw7CisgIFpYUmVzdWx0UG9pbnQgKm1heWJlQm90dG9tUmlnaHQgPSBuaWw7CisgIGZvciAoWlhSZXN1bHRQb2ludCAqcG9pbnQgaW4gW3BvaW50Q291bnQgYWxsS2V5c10pIHsKKyAgICBOU051bWJlciAqdmFsdWUgPSBwb2ludENvdW50W3BvaW50XTsKKyAgICBpZiAoW3ZhbHVlIGludFZhbHVlXSA9PSAyKSB7CisgICAgICBib3R0b21MZWZ0ID0gcG9pbnQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChtYXliZVRvcExlZnQgPT0gbmlsKSB7CisgICAgICAgIG1heWJlVG9wTGVmdCA9IHBvaW50OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbWF5YmVCb3R0b21SaWdodCA9IHBvaW50OworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChtYXliZVRvcExlZnQgPT0gbmlsIHx8IGJvdHRvbUxlZnQgPT0gbmlsIHx8IG1heWJlQm90dG9tUmlnaHQgPT0gbmlsKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNNdXRhYmxlQXJyYXkgKmNvcm5lcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoT2JqZWN0czptYXliZVRvcExlZnQsIGJvdHRvbUxlZnQsIG1heWJlQm90dG9tUmlnaHQsIG5pbF07CisgIFtaWFJlc3VsdFBvaW50IG9yZGVyQmVzdFBhdHRlcm5zOmNvcm5lcnNdOworCisgIFpYUmVzdWx0UG9pbnQgKmJvdHRvbVJpZ2h0ID0gY29ybmVyc1swXTsKKyAgYm90dG9tTGVmdCA9IGNvcm5lcnNbMV07CisgIFpYUmVzdWx0UG9pbnQgKnRvcExlZnQgPSBjb3JuZXJzWzJdOworCisgIFpYUmVzdWx0UG9pbnQgKnRvcFJpZ2h0OworICBpZiAoIXBvaW50Q291bnRbcG9pbnRBXSkgeworICAgIHRvcFJpZ2h0ID0gcG9pbnRBOworICB9IGVsc2UgaWYgKCFwb2ludENvdW50W3BvaW50Ql0pIHsKKyAgICB0b3BSaWdodCA9IHBvaW50QjsKKyAgfSBlbHNlIGlmICghcG9pbnRDb3VudFtwb2ludENdKSB7CisgICAgdG9wUmlnaHQgPSBwb2ludEM7CisgIH0gZWxzZSB7CisgICAgdG9wUmlnaHQgPSBwb2ludEQ7CisgIH0KKworICBpbnQgZGltZW5zaW9uVG9wID0gW1tzZWxmIHRyYW5zaXRpb25zQmV0d2Vlbjp0b3BMZWZ0IHRvOnRvcFJpZ2h0XSB0cmFuc2l0aW9uc107CisgIGludCBkaW1lbnNpb25SaWdodCA9IFtbc2VsZiB0cmFuc2l0aW9uc0JldHdlZW46Ym90dG9tUmlnaHQgdG86dG9wUmlnaHRdIHRyYW5zaXRpb25zXTsKKworICBpZiAoKGRpbWVuc2lvblRvcCAmIDB4MDEpID09IDEpIHsKKyAgICBkaW1lbnNpb25Ub3ArKzsKKyAgfQorICBkaW1lbnNpb25Ub3AgKz0gMjsKKworICBpZiAoKGRpbWVuc2lvblJpZ2h0ICYgMHgwMSkgPT0gMSkgeworICAgIGRpbWVuc2lvblJpZ2h0Kys7CisgIH0KKyAgZGltZW5zaW9uUmlnaHQgKz0gMjsKKworICBaWEJpdE1hdHJpeCAqYml0czsKKyAgWlhSZXN1bHRQb2ludCAqY29ycmVjdGVkVG9wUmlnaHQ7CisKKyAgaWYgKDQgKiBkaW1lbnNpb25Ub3AgPj0gNyAqIGRpbWVuc2lvblJpZ2h0IHx8IDQgKiBkaW1lbnNpb25SaWdodCA+PSA3ICogZGltZW5zaW9uVG9wKSB7CisgICAgY29ycmVjdGVkVG9wUmlnaHQgPSBbc2VsZiBjb3JyZWN0VG9wUmlnaHRSZWN0YW5ndWxhcjpib3R0b21MZWZ0IGJvdHRvbVJpZ2h0OmJvdHRvbVJpZ2h0IHRvcExlZnQ6dG9wTGVmdCB0b3BSaWdodDp0b3BSaWdodCBkaW1lbnNpb25Ub3A6ZGltZW5zaW9uVG9wIGRpbWVuc2lvblJpZ2h0OmRpbWVuc2lvblJpZ2h0XTsKKyAgICBpZiAoY29ycmVjdGVkVG9wUmlnaHQgPT0gbmlsKSB7CisgICAgICBjb3JyZWN0ZWRUb3BSaWdodCA9IHRvcFJpZ2h0OworICAgIH0KKworICAgIGRpbWVuc2lvblRvcCA9IFtbc2VsZiB0cmFuc2l0aW9uc0JldHdlZW46dG9wTGVmdCB0bzpjb3JyZWN0ZWRUb3BSaWdodF0gdHJhbnNpdGlvbnNdOworICAgIGRpbWVuc2lvblJpZ2h0ID0gW1tzZWxmIHRyYW5zaXRpb25zQmV0d2Vlbjpib3R0b21SaWdodCB0bzpjb3JyZWN0ZWRUb3BSaWdodF0gdHJhbnNpdGlvbnNdOworCisgICAgaWYgKChkaW1lbnNpb25Ub3AgJiAweDAxKSA9PSAxKSB7CisgICAgICBkaW1lbnNpb25Ub3ArKzsKKyAgICB9CisKKyAgICBpZiAoKGRpbWVuc2lvblJpZ2h0ICYgMHgwMSkgPT0gMSkgeworICAgICAgZGltZW5zaW9uUmlnaHQrKzsKKyAgICB9CisKKyAgICBiaXRzID0gW3NlbGYgc2FtcGxlR3JpZDpzZWxmLmltYWdlIHRvcExlZnQ6dG9wTGVmdCBib3R0b21MZWZ0OmJvdHRvbUxlZnQgYm90dG9tUmlnaHQ6Ym90dG9tUmlnaHQgdG9wUmlnaHQ6Y29ycmVjdGVkVG9wUmlnaHQgZGltZW5zaW9uWDpkaW1lbnNpb25Ub3AgZGltZW5zaW9uWTpkaW1lbnNpb25SaWdodCBlcnJvcjplcnJvcl07CisgICAgaWYgKCFiaXRzKSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpbnQgZGltZW5zaW9uID0gTUlOKGRpbWVuc2lvblJpZ2h0LCBkaW1lbnNpb25Ub3ApOworICAgIGNvcnJlY3RlZFRvcFJpZ2h0ID0gW3NlbGYgY29ycmVjdFRvcFJpZ2h0OmJvdHRvbUxlZnQgYm90dG9tUmlnaHQ6Ym90dG9tUmlnaHQgdG9wTGVmdDp0b3BMZWZ0IHRvcFJpZ2h0OnRvcFJpZ2h0IGRpbWVuc2lvbjpkaW1lbnNpb25dOworICAgIGlmIChjb3JyZWN0ZWRUb3BSaWdodCA9PSBuaWwpIHsKKyAgICAgIGNvcnJlY3RlZFRvcFJpZ2h0ID0gdG9wUmlnaHQ7CisgICAgfQorCisgICAgaW50IGRpbWVuc2lvbkNvcnJlY3RlZCA9IE1BWChbW3NlbGYgdHJhbnNpdGlvbnNCZXR3ZWVuOnRvcExlZnQgdG86Y29ycmVjdGVkVG9wUmlnaHRdIHRyYW5zaXRpb25zXSwgW1tzZWxmIHRyYW5zaXRpb25zQmV0d2Vlbjpib3R0b21SaWdodCB0bzpjb3JyZWN0ZWRUb3BSaWdodF0gdHJhbnNpdGlvbnNdKTsKKyAgICBkaW1lbnNpb25Db3JyZWN0ZWQrKzsKKyAgICBpZiAoKGRpbWVuc2lvbkNvcnJlY3RlZCAmIDB4MDEpID09IDEpIHsKKyAgICAgIGRpbWVuc2lvbkNvcnJlY3RlZCsrOworICAgIH0KKworICAgIGJpdHMgPSBbc2VsZiBzYW1wbGVHcmlkOnNlbGYuaW1hZ2UgdG9wTGVmdDp0b3BMZWZ0IGJvdHRvbUxlZnQ6Ym90dG9tTGVmdCBib3R0b21SaWdodDpib3R0b21SaWdodCB0b3BSaWdodDpjb3JyZWN0ZWRUb3BSaWdodCBkaW1lbnNpb25YOmRpbWVuc2lvbkNvcnJlY3RlZCBkaW1lbnNpb25ZOmRpbWVuc2lvbkNvcnJlY3RlZCBlcnJvcjplcnJvcl07CisgICAgaWYgKCFiaXRzKSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgfQorICByZXR1cm4gW1taWERldGVjdG9yUmVzdWx0IGFsbG9jXSBpbml0V2l0aEJpdHM6Yml0cyBwb2ludHM6QFt0b3BMZWZ0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCwgY29ycmVjdGVkVG9wUmlnaHRdXTsKK30KKworCisvKioKKyAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB3aGl0ZSB0b3AgcmlnaHQgbW9kdWxlIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJlY3RhbmdsZSBkZXRlY3RvcgorICogZm9yIGEgcmVjdGFuZ3VsYXIgbWF0cml4CisgKi8KKy0gKFpYUmVzdWx0UG9pbnQgKiljb3JyZWN0VG9wUmlnaHRSZWN0YW5ndWxhcjooWlhSZXN1bHRQb2ludCAqKWJvdHRvbUxlZnQgYm90dG9tUmlnaHQ6KFpYUmVzdWx0UG9pbnQgKilib3R0b21SaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0OihaWFJlc3VsdFBvaW50ICopdG9wTGVmdCB0b3BSaWdodDooWlhSZXN1bHRQb2ludCAqKXRvcFJpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1lbnNpb25Ub3A6KGludClkaW1lbnNpb25Ub3AgZGltZW5zaW9uUmlnaHQ6KGludClkaW1lbnNpb25SaWdodCB7CisgIGZsb2F0IGNvcnIgPSBbc2VsZiBkaXN0YW5jZTpib3R0b21MZWZ0IGI6Ym90dG9tUmlnaHRdIC8gKGZsb2F0KWRpbWVuc2lvblRvcDsKKyAgaW50IG5vcm0gPSBbc2VsZiBkaXN0YW5jZTp0b3BMZWZ0IGI6dG9wUmlnaHRdOworICBmbG9hdCBjb3MgPSAoW3RvcFJpZ2h0IHhdIC0gW3RvcExlZnQgeF0pIC8gbm9ybTsKKyAgZmxvYXQgc2luID0gKFt0b3BSaWdodCB5XSAtIFt0b3BMZWZ0IHldKSAvIG5vcm07CisKKyAgWlhSZXN1bHRQb2ludCAqYzEgPSBbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDpbdG9wUmlnaHQgeF0gKyBjb3JyICogY29zIHk6W3RvcFJpZ2h0IHldICsgY29yciAqIHNpbl07CisKKyAgY29yciA9IFtzZWxmIGRpc3RhbmNlOmJvdHRvbUxlZnQgYjp0b3BMZWZ0XSAvIChmbG9hdClkaW1lbnNpb25SaWdodDsKKyAgbm9ybSA9IFtzZWxmIGRpc3RhbmNlOmJvdHRvbVJpZ2h0IGI6dG9wUmlnaHRdOworICBjb3MgPSAoW3RvcFJpZ2h0IHhdIC0gW2JvdHRvbVJpZ2h0IHhdKSAvIG5vcm07CisgIHNpbiA9IChbdG9wUmlnaHQgeV0gLSBbYm90dG9tUmlnaHQgeV0pIC8gbm9ybTsKKworICBaWFJlc3VsdFBvaW50ICpjMiA9IFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOlt0b3BSaWdodCB4XSArIGNvcnIgKiBjb3MgeTpbdG9wUmlnaHQgeV0gKyBjb3JyICogc2luXTsKKworICBpZiAoIVtzZWxmIGlzVmFsaWQ6YzFdKSB7CisgICAgaWYgKFtzZWxmIGlzVmFsaWQ6YzJdKSB7CisgICAgICByZXR1cm4gYzI7CisgICAgfQorICAgIHJldHVybiBuaWw7CisgIH0gZWxzZSBpZiAoIVtzZWxmIGlzVmFsaWQ6YzJdKSB7CisgICAgcmV0dXJuIGMxOworICB9CisKKyAgaW50IGwxID0gYWJzKGRpbWVuc2lvblRvcCAtIFtbc2VsZiB0cmFuc2l0aW9uc0JldHdlZW46dG9wTGVmdCB0bzpjMV0gdHJhbnNpdGlvbnNdKSArIGFicyhkaW1lbnNpb25SaWdodCAtIFtbc2VsZiB0cmFuc2l0aW9uc0JldHdlZW46Ym90dG9tUmlnaHQgdG86YzFdIHRyYW5zaXRpb25zXSk7CisgIGludCBsMiA9IGFicyhkaW1lbnNpb25Ub3AgLSBbW3NlbGYgdHJhbnNpdGlvbnNCZXR3ZWVuOnRvcExlZnQgdG86YzJdIHRyYW5zaXRpb25zXSkgKyBhYnMoZGltZW5zaW9uUmlnaHQgLSBbW3NlbGYgdHJhbnNpdGlvbnNCZXR3ZWVuOmJvdHRvbVJpZ2h0IHRvOmMyXSB0cmFuc2l0aW9uc10pOworCisgIGlmIChsMSA8PSBsMikgeworICAgIHJldHVybiBjMTsKKyAgfQorCisgIHJldHVybiBjMjsKK30KKworCisvKioKKyAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB3aGl0ZSB0b3AgcmlnaHQgbW9kdWxlIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJlY3RhbmdsZSBkZXRlY3RvcgorICogZm9yIGEgc3F1YXJlIG1hdHJpeAorICovCistIChaWFJlc3VsdFBvaW50ICopY29ycmVjdFRvcFJpZ2h0OihaWFJlc3VsdFBvaW50ICopYm90dG9tTGVmdCBib3R0b21SaWdodDooWlhSZXN1bHRQb2ludCAqKWJvdHRvbVJpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0OihaWFJlc3VsdFBvaW50ICopdG9wTGVmdCB0b3BSaWdodDooWlhSZXN1bHRQb2ludCAqKXRvcFJpZ2h0IGRpbWVuc2lvbjooaW50KWRpbWVuc2lvbiB7CisgIGZsb2F0IGNvcnIgPSBbc2VsZiBkaXN0YW5jZTpib3R0b21MZWZ0IGI6Ym90dG9tUmlnaHRdIC8gKGZsb2F0KWRpbWVuc2lvbjsKKyAgaW50IG5vcm0gPSBbc2VsZiBkaXN0YW5jZTp0b3BMZWZ0IGI6dG9wUmlnaHRdOworICBmbG9hdCBjb3MgPSAoW3RvcFJpZ2h0IHhdIC0gW3RvcExlZnQgeF0pIC8gbm9ybTsKKyAgZmxvYXQgc2luID0gKFt0b3BSaWdodCB5XSAtIFt0b3BMZWZ0IHldKSAvIG5vcm07CisKKyAgWlhSZXN1bHRQb2ludCAqYzEgPSBbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDpbdG9wUmlnaHQgeF0gKyBjb3JyICogY29zIHk6W3RvcFJpZ2h0IHldICsgY29yciAqIHNpbl07CisKKyAgY29yciA9IFtzZWxmIGRpc3RhbmNlOmJvdHRvbUxlZnQgYjp0b3BMZWZ0XSAvIChmbG9hdClkaW1lbnNpb247CisgIG5vcm0gPSBbc2VsZiBkaXN0YW5jZTpib3R0b21SaWdodCBiOnRvcFJpZ2h0XTsKKyAgY29zID0gKFt0b3BSaWdodCB4XSAtIFtib3R0b21SaWdodCB4XSkgLyBub3JtOworICBzaW4gPSAoW3RvcFJpZ2h0IHldIC0gW2JvdHRvbVJpZ2h0IHldKSAvIG5vcm07CisKKyAgWlhSZXN1bHRQb2ludCAqYzIgPSBbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDpbdG9wUmlnaHQgeF0gKyBjb3JyICogY29zIHk6W3RvcFJpZ2h0IHldICsgY29yciAqIHNpbl07CisKKyAgaWYgKCFbc2VsZiBpc1ZhbGlkOmMxXSkgeworICAgIGlmIChbc2VsZiBpc1ZhbGlkOmMyXSkgeworICAgICAgcmV0dXJuIGMyOworICAgIH0KKyAgICByZXR1cm4gbmlsOworICB9IGVsc2UgaWYgKCFbc2VsZiBpc1ZhbGlkOmMyXSkgeworICAgIHJldHVybiBjMTsKKyAgfQorCisgIGludCBsMSA9IGFicyhbW3NlbGYgdHJhbnNpdGlvbnNCZXR3ZWVuOnRvcExlZnQgdG86YzFdIHRyYW5zaXRpb25zXSAtIFtbc2VsZiB0cmFuc2l0aW9uc0JldHdlZW46Ym90dG9tUmlnaHQgdG86YzFdIHRyYW5zaXRpb25zXSk7CisgIGludCBsMiA9IGFicyhbW3NlbGYgdHJhbnNpdGlvbnNCZXR3ZWVuOnRvcExlZnQgdG86YzJdIHRyYW5zaXRpb25zXSAtIFtbc2VsZiB0cmFuc2l0aW9uc0JldHdlZW46Ym90dG9tUmlnaHQgdG86YzJdIHRyYW5zaXRpb25zXSk7CisKKyAgcmV0dXJuIGwxIDw9IGwyID8gYzEgOiBjMjsKK30KKworLSAoQk9PTCkgaXNWYWxpZDooWlhSZXN1bHRQb2ludCAqKXAgeworICByZXR1cm4gW3AgeF0gPj0gMCAmJiBbcCB4XSA8IHNlbGYuaW1hZ2Uud2lkdGggJiYgW3AgeV0gPiAwICYmIFtwIHldIDwgc2VsZi5pbWFnZS5oZWlnaHQ7Cit9CisKKy0gKGludClkaXN0YW5jZTooWlhSZXN1bHRQb2ludCAqKWEgYjooWlhSZXN1bHRQb2ludCAqKWIgeworICByZXR1cm4gW1pYTWF0aFV0aWxzIHJvdW5kOltaWFJlc3VsdFBvaW50IGRpc3RhbmNlOmEgcGF0dGVybjI6Yl1dOworfQorCisKKy8qKgorICogSW5jcmVtZW50cyB0aGUgSW50ZWdlciBhc3NvY2lhdGVkIHdpdGggYSBrZXkgYnkgb25lLgorICovCistICh2b2lkKWluY3JlbWVudDooTlNNdXRhYmxlRGljdGlvbmFyeSAqKXRhYmxlIGtleTooWlhSZXN1bHRQb2ludCAqKWtleSB7CisgIE5TTnVtYmVyICp2YWx1ZSA9IHRhYmxlW2tleV07CisgIHRhYmxlW2tleV0gPSB2YWx1ZSA9PSBuaWwgPyBAMSA6IEAoW3ZhbHVlIGludFZhbHVlXSArIDEpOworfQorCistIChaWEJpdE1hdHJpeCAqKXNhbXBsZUdyaWQ6KFpYQml0TWF0cml4ICopaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgdG9wTGVmdDooWlhSZXN1bHRQb2ludCAqKXRvcExlZnQKKyAgICAgICAgICAgICAgICAgYm90dG9tTGVmdDooWlhSZXN1bHRQb2ludCAqKWJvdHRvbUxlZnQKKyAgICAgICAgICAgICAgICBib3R0b21SaWdodDooWlhSZXN1bHRQb2ludCAqKWJvdHRvbVJpZ2h0CisgICAgICAgICAgICAgICAgICAgdG9wUmlnaHQ6KFpYUmVzdWx0UG9pbnQgKil0b3BSaWdodAorICAgICAgICAgICAgICAgICBkaW1lbnNpb25YOihpbnQpZGltZW5zaW9uWAorICAgICAgICAgICAgICAgICBkaW1lbnNpb25ZOihpbnQpZGltZW5zaW9uWQorICAgICAgICAgICAgICAgICAgICAgIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgWlhHcmlkU2FtcGxlciAqc2FtcGxlciA9IFtaWEdyaWRTYW1wbGVyIGluc3RhbmNlXTsKKyAgcmV0dXJuIFtzYW1wbGVyIHNhbXBsZUdyaWQ6aW1hZ2UKKyAgICAgICAgICAgICAgICAgIGRpbWVuc2lvblg6ZGltZW5zaW9uWCBkaW1lbnNpb25ZOmRpbWVuc2lvblkKKyAgICAgICAgICAgICAgICAgICAgICAgcDFUb1g6MC41ZiBwMVRvWTowLjVmCisgICAgICAgICAgICAgICAgICAgICAgIHAyVG9YOmRpbWVuc2lvblggLSAwLjVmIHAyVG9ZOjAuNWYKKyAgICAgICAgICAgICAgICAgICAgICAgcDNUb1g6ZGltZW5zaW9uWCAtIDAuNWYgcDNUb1k6ZGltZW5zaW9uWSAtIDAuNWYKKyAgICAgICAgICAgICAgICAgICAgICAgcDRUb1g6MC41ZiBwNFRvWTpkaW1lbnNpb25ZIC0gMC41ZgorICAgICAgICAgICAgICAgICAgICAgcDFGcm9tWDpbdG9wTGVmdCB4XSBwMUZyb21ZOlt0b3BMZWZ0IHldCisgICAgICAgICAgICAgICAgICAgICBwMkZyb21YOlt0b3BSaWdodCB4XSBwMkZyb21ZOlt0b3BSaWdodCB5XQorICAgICAgICAgICAgICAgICAgICAgcDNGcm9tWDpbYm90dG9tUmlnaHQgeF0gcDNGcm9tWTpbYm90dG9tUmlnaHQgeV0KKyAgICAgICAgICAgICAgICAgICAgIHA0RnJvbVg6W2JvdHRvbUxlZnQgeF0gcDRGcm9tWTpbYm90dG9tTGVmdCB5XQorICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjplcnJvcl07Cit9CisKKworLyoqCisgKiBDb3VudHMgdGhlIG51bWJlciBvZiBibGFjay93aGl0ZSB0cmFuc2l0aW9ucyBiZXR3ZWVuIHR3byBwb2ludHMsIHVzaW5nIHNvbWV0aGluZyBsaWtlIEJyZXNlbmhhbSdzIGFsZ29yaXRobS4KKyAqLworLSAoUmVzdWx0UG9pbnRzQW5kVHJhbnNpdGlvbnMgKil0cmFuc2l0aW9uc0JldHdlZW46KFpYUmVzdWx0UG9pbnQgKilmcm9tIHRvOihaWFJlc3VsdFBvaW50ICopdG8geworICBpbnQgZnJvbVggPSAoaW50KVtmcm9tIHhdOworICBpbnQgZnJvbVkgPSAoaW50KVtmcm9tIHldOworICBpbnQgdG9YID0gKGludClbdG8geF07CisgIGludCB0b1kgPSAoaW50KVt0byB5XTsKKyAgQk9PTCBzdGVlcCA9IGFicyh0b1kgLSBmcm9tWSkgPiBhYnModG9YIC0gZnJvbVgpOworICBpZiAoc3RlZXApIHsKKyAgICBpbnQgdGVtcCA9IGZyb21YOworICAgIGZyb21YID0gZnJvbVk7CisgICAgZnJvbVkgPSB0ZW1wOworICAgIHRlbXAgPSB0b1g7CisgICAgdG9YID0gdG9ZOworICAgIHRvWSA9IHRlbXA7CisgIH0KKworICBpbnQgZHggPSBhYnModG9YIC0gZnJvbVgpOworICBpbnQgZHkgPSBhYnModG9ZIC0gZnJvbVkpOworICBpbnQgZXJyb3IgPSAtZHggPj4gMTsKKyAgaW50IHlzdGVwID0gZnJvbVkgPCB0b1kgPyAxIDogLTE7CisgIGludCB4c3RlcCA9IGZyb21YIDwgdG9YID8gMSA6IC0xOworICBpbnQgdHJhbnNpdGlvbnMgPSAwOworICBCT09MIGluQmxhY2sgPSBbc2VsZi5pbWFnZSBnZXRYOnN0ZWVwID8gZnJvbVkgOiBmcm9tWCB5OnN0ZWVwID8gZnJvbVggOiBmcm9tWV07CisgIGZvciAoaW50IHggPSBmcm9tWCwgeSA9IGZyb21ZOyB4ICE9IHRvWDsgeCArPSB4c3RlcCkgeworICAgIEJPT0wgaXNCbGFjayA9IFtzZWxmLmltYWdlIGdldFg6c3RlZXAgPyB5IDogeCB5OnN0ZWVwID8geCA6IHldOworICAgIGlmIChpc0JsYWNrICE9IGluQmxhY2spIHsKKyAgICAgIHRyYW5zaXRpb25zKys7CisgICAgICBpbkJsYWNrID0gaXNCbGFjazsKKyAgICB9CisgICAgZXJyb3IgKz0gZHk7CisgICAgaWYgKGVycm9yID4gMCkgeworICAgICAgaWYgKHkgPT0gdG9ZKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgeSArPSB5c3RlcDsKKyAgICAgIGVycm9yIC09IGR4OworICAgIH0KKyAgfQorICByZXR1cm4gW1tSZXN1bHRQb2ludHNBbmRUcmFuc2l0aW9ucyBhbGxvY10gaW5pdFdpdGhGcm9tOmZyb20gdG86dG8gdHJhbnNpdGlvbnM6dHJhbnNpdGlvbnNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYQVNDSUlFbmNvZGVyLmggYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYQVNDSUlFbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlMmIxMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhBU0NJSUVuY29kZXIuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERhdGFNYXRyaXhFbmNvZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhBU0NJSUVuY29kZXIgOiBOU09iamVjdCA8WlhEYXRhTWF0cml4RW5jb2Rlcj4KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEFTQ0lJRW5jb2Rlci5tIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEFTQ0lJRW5jb2Rlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODJkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYQVNDSUlFbmNvZGVyLm0KQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBU0NJSUVuY29kZXIuaCIKKyNpbXBvcnQgIlpYRW5jb2RlckNvbnRleHQuaCIKKyNpbXBvcnQgIlpYSGlnaExldmVsRW5jb2Rlci5oIgorCitAaW1wbGVtZW50YXRpb24gWlhBU0NJSUVuY29kZXIKKworLSAoaW50KWVuY29kaW5nTW9kZSB7CisgIHJldHVybiBbWlhIaWdoTGV2ZWxFbmNvZGVyIGFzY2lpRW5jb2RhdGlvbl07Cit9CisKKy0gKHZvaWQpZW5jb2RlOihaWEVuY29kZXJDb250ZXh0ICopY29udGV4dCB7CisgIC8vc3RlcCBCCisgIGludCBuID0gW1pYSGlnaExldmVsRW5jb2RlciBkZXRlcm1pbmVDb25zZWN1dGl2ZURpZ2l0Q291bnQ6Y29udGV4dC5tZXNzYWdlIHN0YXJ0cG9zOmNvbnRleHQucG9zXTsKKyAgaWYgKG4gPj0gMikgeworICAgIFtjb250ZXh0IHdyaXRlQ29kZXdvcmQ6W3NlbGYgZW5jb2RlQVNDSUlEaWdpdHM6W2NvbnRleHQubWVzc2FnZSBjaGFyYWN0ZXJBdEluZGV4OmNvbnRleHQucG9zXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdDI6W2NvbnRleHQubWVzc2FnZSBjaGFyYWN0ZXJBdEluZGV4OmNvbnRleHQucG9zICsgMV1dXTsKKyAgICBjb250ZXh0LnBvcyArPSAyOworICB9IGVsc2UgeworICAgIHVuaWNoYXIgYyA9IFtjb250ZXh0IGN1cnJlbnRDaGFyXTsKKyAgICBpbnQgbmV3TW9kZSA9IFtaWEhpZ2hMZXZlbEVuY29kZXIgbG9va0FoZWFkVGVzdDpjb250ZXh0Lm1lc3NhZ2Ugc3RhcnRwb3M6Y29udGV4dC5wb3MgY3VycmVudE1vZGU6W3NlbGYgZW5jb2RpbmdNb2RlXV07CisgICAgaWYgKG5ld01vZGUgIT0gW3NlbGYgZW5jb2RpbmdNb2RlXSkgeworICAgICAgaWYgKG5ld01vZGUgPT0gW1pYSGlnaExldmVsRW5jb2RlciBiYXNlMjU2RW5jb2RhdGlvbl0pIHsKKyAgICAgICAgW2NvbnRleHQgd3JpdGVDb2Rld29yZDpbWlhIaWdoTGV2ZWxFbmNvZGVyIGxhdGNoVG9CYXNlMjU2XV07CisgICAgICAgIFtjb250ZXh0IHNpZ25hbEVuY29kZXJDaGFuZ2U6W1pYSGlnaExldmVsRW5jb2RlciBiYXNlMjU2RW5jb2RhdGlvbl1dOworICAgICAgICByZXR1cm47CisgICAgICB9IGVsc2UgaWYgKG5ld01vZGUgPT0gW1pYSGlnaExldmVsRW5jb2RlciBjNDBFbmNvZGF0aW9uXSkgeworICAgICAgICBbY29udGV4dCB3cml0ZUNvZGV3b3JkOltaWEhpZ2hMZXZlbEVuY29kZXIgbGF0Y2hUb0M0MF1dOworICAgICAgICBbY29udGV4dCBzaWduYWxFbmNvZGVyQ2hhbmdlOltaWEhpZ2hMZXZlbEVuY29kZXIgYzQwRW5jb2RhdGlvbl1dOworICAgICAgICByZXR1cm47CisgICAgICB9IGVsc2UgaWYgKG5ld01vZGUgPT0gW1pYSGlnaExldmVsRW5jb2RlciB4MTJFbmNvZGF0aW9uXSkgeworICAgICAgICBbY29udGV4dCB3cml0ZUNvZGV3b3JkOltaWEhpZ2hMZXZlbEVuY29kZXIgbGF0Y2hUb0Fuc2lYMTJdXTsKKyAgICAgICAgW2NvbnRleHQgc2lnbmFsRW5jb2RlckNoYW5nZTpbWlhIaWdoTGV2ZWxFbmNvZGVyIHgxMkVuY29kYXRpb25dXTsKKyAgICAgIH0gZWxzZSBpZiAobmV3TW9kZSA9PSBbWlhIaWdoTGV2ZWxFbmNvZGVyIHRleHRFbmNvZGF0aW9uXSkgeworICAgICAgICBbY29udGV4dCB3cml0ZUNvZGV3b3JkOltaWEhpZ2hMZXZlbEVuY29kZXIgbGF0Y2hUb1RleHRdXTsKKyAgICAgICAgW2NvbnRleHQgc2lnbmFsRW5jb2RlckNoYW5nZTpbWlhIaWdoTGV2ZWxFbmNvZGVyIHRleHRFbmNvZGF0aW9uXV07CisgICAgICB9IGVsc2UgaWYgKG5ld01vZGUgPT0gW1pYSGlnaExldmVsRW5jb2RlciBlZGlmYWN0RW5jb2RhdGlvbl0pIHsKKyAgICAgICAgW2NvbnRleHQgd3JpdGVDb2Rld29yZDpbWlhIaWdoTGV2ZWxFbmNvZGVyIGxhdGNoVG9FZGlmYWN0XV07CisgICAgICAgIFtjb250ZXh0IHNpZ25hbEVuY29kZXJDaGFuZ2U6W1pYSGlnaExldmVsRW5jb2RlciBlZGlmYWN0RW5jb2RhdGlvbl1dOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpAIklsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIgcmVhc29uOkAiSWxsZWdhbCBtb2RlIiB1c2VySW5mbzpuaWxdOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoW1pYSGlnaExldmVsRW5jb2RlciBpc0V4dGVuZGVkQVNDSUk6Y10pIHsKKyAgICAgIFtjb250ZXh0IHdyaXRlQ29kZXdvcmQ6W1pYSGlnaExldmVsRW5jb2RlciB1cHBlclNoaWZ0XV07CisgICAgICBbY29udGV4dCB3cml0ZUNvZGV3b3JkOih1bmljaGFyKShjIC0gMTI4ICsgMSldOworICAgICAgY29udGV4dC5wb3MrKzsKKyAgICB9IGVsc2UgeworICAgICAgW2NvbnRleHQgd3JpdGVDb2Rld29yZDoodW5pY2hhcikoYyArIDEpXTsKKyAgICAgIGNvbnRleHQucG9zKys7CisgICAgfQorICB9Cit9CisKKy0gKHVuaWNoYXIpZW5jb2RlQVNDSUlEaWdpdHM6KHVuaWNoYXIpZGlnaXQxIGRpZ2l0MjoodW5pY2hhcilkaWdpdDIgeworICBpZiAoW1pYSGlnaExldmVsRW5jb2RlciBpc0RpZ2l0OmRpZ2l0MV0gJiYgW1pYSGlnaExldmVsRW5jb2RlciBpc0RpZ2l0OmRpZ2l0Ml0pIHsKKyAgICBpbnQgbnVtID0gKGRpZ2l0MSAtIDQ4KSAqIDEwICsgKGRpZ2l0MiAtIDQ4KTsKKyAgICByZXR1cm4gKHVuaWNoYXIpIChudW0gKyAxMzApOworICB9CisgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIm5vdCBkaWdpdHM6ICVDICVDIiwgZGlnaXQxLCBkaWdpdDJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEJhc2UyNTZFbmNvZGVyLmggYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYQmFzZTI1NkVuY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTQyMjY2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEJhc2UyNTZFbmNvZGVyLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhEYXRhTWF0cml4RW5jb2Rlci5oIgorCitAaW50ZXJmYWNlIFpYQmFzZTI1NkVuY29kZXIgOiBOU09iamVjdCA8WlhEYXRhTWF0cml4RW5jb2Rlcj4KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEJhc2UyNTZFbmNvZGVyLm0gYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYQmFzZTI1NkVuY29kZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDJjNGM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEJhc2UyNTZFbmNvZGVyLm0KQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCYXNlMjU2RW5jb2Rlci5oIgorI2ltcG9ydCAiWlhFbmNvZGVyQ29udGV4dC5oIgorI2ltcG9ydCAiWlhIaWdoTGV2ZWxFbmNvZGVyLmgiCisjaW1wb3J0ICJaWFN5bWJvbEluZm8uaCIKKworQGltcGxlbWVudGF0aW9uIFpYQmFzZTI1NkVuY29kZXIKKworLSAoaW50KWVuY29kaW5nTW9kZSB7CisgIHJldHVybiBbWlhIaWdoTGV2ZWxFbmNvZGVyIGJhc2UyNTZFbmNvZGF0aW9uXTsKK30KKworLSAodm9pZCllbmNvZGU6KFpYRW5jb2RlckNvbnRleHQgKiljb250ZXh0IHsKKyAgTlNNdXRhYmxlU3RyaW5nICpidWZmZXIgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgIFtidWZmZXIgYXBwZW5kU3RyaW5nOkAiXDAiXTsgLy9Jbml0aWFsaXplIGxlbmd0aCBmaWVsZAorICB3aGlsZSAoW2NvbnRleHQgaGFzTW9yZUNoYXJhY3RlcnNdKSB7CisgICAgdW5pY2hhciBjID0gW2NvbnRleHQgY3VycmVudENoYXJdOworICAgIFtidWZmZXIgYXBwZW5kRm9ybWF0OkAiJUMiLCBjXTsKKworICAgIGNvbnRleHQucG9zKys7CisKKyAgICBpbnQgbmV3TW9kZSA9IFtaWEhpZ2hMZXZlbEVuY29kZXIgbG9va0FoZWFkVGVzdDpjb250ZXh0Lm1lc3NhZ2Ugc3RhcnRwb3M6Y29udGV4dC5wb3MgY3VycmVudE1vZGU6W3NlbGYgZW5jb2RpbmdNb2RlXV07CisgICAgaWYgKG5ld01vZGUgIT0gW3NlbGYgZW5jb2RpbmdNb2RlXSkgeworICAgICAgW2NvbnRleHQgc2lnbmFsRW5jb2RlckNoYW5nZTpuZXdNb2RlXTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpbnQgZGF0YUNvdW50ID0gKGludClidWZmZXIubGVuZ3RoIC0gMTsKKyAgaW50IGxlbmd0aEZpZWxkU2l6ZSA9IDE7CisgIGludCBjdXJyZW50U2l6ZSA9IFtjb250ZXh0IGNvZGV3b3JkQ291bnRdICsgZGF0YUNvdW50ICsgbGVuZ3RoRmllbGRTaXplOworICBbY29udGV4dCB1cGRhdGVTeW1ib2xJbmZvV2l0aExlbmd0aDpjdXJyZW50U2l6ZV07CisgIEJPT0wgbXVzdFBhZCA9IChjb250ZXh0LnN5bWJvbEluZm8uZGF0YUNhcGFjaXR5IC0gY3VycmVudFNpemUpID4gMDsKKyAgaWYgKFtjb250ZXh0IGhhc01vcmVDaGFyYWN0ZXJzXSB8fCBtdXN0UGFkKSB7CisgICAgaWYgKGRhdGFDb3VudCA8PSAyNDkpIHsKKyAgICAgIFtidWZmZXIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIGRhdGFDb3VudF1dOworICAgIH0gZWxzZSBpZiAoZGF0YUNvdW50ID4gMjQ5ICYmIGRhdGFDb3VudCA8PSAxNTU1KSB7CisgICAgICBbYnVmZmVyIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSAoKGRhdGFDb3VudCAvIDI1MCkgKyAyNDkpXV07CisgICAgICBbYnVmZmVyIGluc2VydFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChkYXRhQ291bnQgJSAyNTApXQorICAgICAgICAgICAgICAgICAgIGF0SW5kZXg6MV07CisgICAgfSBlbHNlIHsKKyAgICAgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6QCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiTWVzc2FnZSBsZW5ndGggbm90IGluIHZhbGlkIHJhbmdlczogJWQiLCBkYXRhQ291bnRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgICAgfQorICB9CisgIGZvciAoaW50IGkgPSAwLCBjID0gKGludClidWZmZXIubGVuZ3RoOyBpIDwgYzsgaSsrKSB7CisgICAgW2NvbnRleHQgd3JpdGVDb2Rld29yZDpbc2VsZiByYW5kb21pemUyNTVTdGF0ZTpbYnVmZmVyIGNoYXJhY3RlckF0SW5kZXg6aV0gY29kZXdvcmRQb3NpdGlvbjpjb250ZXh0LmNvZGV3b3JkQ291bnQgKyAxXV07CisgIH0KK30KKworLSAodW5pY2hhcilyYW5kb21pemUyNTVTdGF0ZToodW5pY2hhciljaCBjb2Rld29yZFBvc2l0aW9uOihpbnQpY29kZXdvcmRQb3NpdGlvbiB7CisgIGludCBwc2V1ZG9SYW5kb20gPSAoKDE0OSAqIGNvZGV3b3JkUG9zaXRpb24pICUgMjU1KSArIDE7CisgIGludCB0ZW1wVmFyaWFibGUgPSBjaCArIHBzZXVkb1JhbmRvbTsKKyAgaWYgKHRlbXBWYXJpYWJsZSA8PSAyNTUpIHsKKyAgICByZXR1cm4gKHVuaWNoYXIpIHRlbXBWYXJpYWJsZTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gKHVuaWNoYXIpICh0ZW1wVmFyaWFibGUgLSAyNTYpOworICB9Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhDNDBFbmNvZGVyLmggYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYQzQwRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwY2NhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYQzQwRW5jb2Rlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeEVuY29kZXIuaCIKKworQGludGVyZmFjZSBaWEM0MEVuY29kZXIgOiBOU09iamVjdCA8WlhEYXRhTWF0cml4RW5jb2Rlcj4KKworLSAoaW50KWVuY29kZUNoYXI6KHVuaWNoYXIpYyBidWZmZXI6KE5TTXV0YWJsZVN0cmluZyAqKXNiOworLSAodm9pZCl3cml0ZU5leHRUcmlwbGV0OihaWEVuY29kZXJDb250ZXh0ICopY29udGV4dCBidWZmZXI6KE5TTXV0YWJsZVN0cmluZyAqKWJ1ZmZlcjsKKy0gKHZvaWQpaGFuZGxlRU9EOihaWEVuY29kZXJDb250ZXh0ICopY29udGV4dCBidWZmZXI6KE5TTXV0YWJsZVN0cmluZyAqKWJ1ZmZlcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEM0MEVuY29kZXIubSBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhDNDBFbmNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4YmZlOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhDNDBFbmNvZGVyLm0KQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyA5IGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhDNDBFbmNvZGVyLmgiCisjaW1wb3J0ICJaWEVuY29kZXJDb250ZXh0LmgiCisjaW1wb3J0ICJaWEhpZ2hMZXZlbEVuY29kZXIuaCIKKyNpbXBvcnQgIlpYU3ltYm9sSW5mby5oIgorCitAaW1wbGVtZW50YXRpb24gWlhDNDBFbmNvZGVyCisKKy0gKGludCllbmNvZGluZ01vZGUgeworICByZXR1cm4gW1pYSGlnaExldmVsRW5jb2RlciBjNDBFbmNvZGF0aW9uXTsKK30KKworLSAodm9pZCllbmNvZGU6KFpYRW5jb2RlckNvbnRleHQgKiljb250ZXh0IHsKKyAgLy9zdGVwIEMKKyAgTlNNdXRhYmxlU3RyaW5nICpidWZmZXIgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgIHdoaWxlIChbY29udGV4dCBoYXNNb3JlQ2hhcmFjdGVyc10pIHsKKyAgICB1bmljaGFyIGMgPSBbY29udGV4dCBjdXJyZW50Q2hhcl07CisgICAgY29udGV4dC5wb3MrKzsKKworICAgIGludCBsYXN0Q2hhclNpemUgPSBbc2VsZiBlbmNvZGVDaGFyOmMgYnVmZmVyOmJ1ZmZlcl07CisKKyAgICBpbnQgdW53cml0dGVuID0gKChpbnQpYnVmZmVyLmxlbmd0aCAvIDMpICogMjsKKworICAgIGludCBjdXJDb2Rld29yZENvdW50ID0gY29udGV4dC5jb2Rld29yZENvdW50ICsgdW53cml0dGVuOworICAgIFtjb250ZXh0IHVwZGF0ZVN5bWJvbEluZm9XaXRoTGVuZ3RoOmN1ckNvZGV3b3JkQ291bnRdOworICAgIGludCBhdmFpbGFibGUgPSBjb250ZXh0LnN5bWJvbEluZm8uZGF0YUNhcGFjaXR5IC0gY3VyQ29kZXdvcmRDb3VudDsKKworICAgIGlmICghW2NvbnRleHQgaGFzTW9yZUNoYXJhY3RlcnNdKSB7CisgICAgICAvL0F2b2lkIGhhdmluZyBhIHNpbmdsZSBDNDAgdmFsdWUgaW4gdGhlIGxhc3QgdHJpcGxldAorICAgICAgTlNNdXRhYmxlU3RyaW5nICpyZW1vdmVkID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICAgICAgaWYgKChidWZmZXIubGVuZ3RoICUgMykgPT0gMikgeworICAgICAgICBpZiAoYXZhaWxhYmxlIDwgMiB8fCBhdmFpbGFibGUgPiAyKSB7CisgICAgICAgICAgbGFzdENoYXJTaXplID0gW3NlbGYgYmFja3RyYWNrT25lQ2hhcmFjdGVyOmNvbnRleHQgYnVmZmVyOmJ1ZmZlciByZW1vdmVkOnJlbW92ZWQgbGFzdENoYXJTaXplOmxhc3RDaGFyU2l6ZV07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHdoaWxlICgoYnVmZmVyLmxlbmd0aCAlIDMpID09IDEKKyAgICAgICAgICAgICAmJiAoKGxhc3RDaGFyU2l6ZSA8PSAzICYmIGF2YWlsYWJsZSAhPSAxKSB8fCBsYXN0Q2hhclNpemUgPiAzKSkgeworICAgICAgICBsYXN0Q2hhclNpemUgPSBbc2VsZiBiYWNrdHJhY2tPbmVDaGFyYWN0ZXI6Y29udGV4dCBidWZmZXI6YnVmZmVyIHJlbW92ZWQ6cmVtb3ZlZCBsYXN0Q2hhclNpemU6bGFzdENoYXJTaXplXTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIE5TVUludGVnZXIgY291bnQgPSBidWZmZXIubGVuZ3RoOworICAgIGlmICgoY291bnQgJSAzKSA9PSAwKSB7CisgICAgICBpbnQgbmV3TW9kZSA9IFtaWEhpZ2hMZXZlbEVuY29kZXIgbG9va0FoZWFkVGVzdDpjb250ZXh0Lm1lc3NhZ2Ugc3RhcnRwb3M6Y29udGV4dC5wb3MgY3VycmVudE1vZGU6W3NlbGYgZW5jb2RpbmdNb2RlXV07CisgICAgICBpZiAobmV3TW9kZSAhPSBbc2VsZiBlbmNvZGluZ01vZGVdKSB7CisgICAgICAgIFtjb250ZXh0IHNpZ25hbEVuY29kZXJDaGFuZ2U6bmV3TW9kZV07CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorICBbc2VsZiBoYW5kbGVFT0Q6Y29udGV4dCBidWZmZXI6YnVmZmVyXTsKK30KKworLSAoaW50KWJhY2t0cmFja09uZUNoYXJhY3RlcjooWlhFbmNvZGVyQ29udGV4dCAqKWNvbnRleHQgYnVmZmVyOihOU011dGFibGVTdHJpbmcgKilidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlbW92ZWQgbGFzdENoYXJTaXplOihpbnQpbGFzdENoYXJTaXplIHsKKyAgTlNVSW50ZWdlciBjb3VudCA9IGJ1ZmZlci5sZW5ndGg7CisgIFtidWZmZXIgZGVsZXRlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UoY291bnQgLSBsYXN0Q2hhclNpemUsIGxhc3RDaGFyU2l6ZSldOworICBjb250ZXh0LnBvcy0tOworICB1bmljaGFyIGMgPSBjb250ZXh0LmN1cnJlbnRDaGFyOworICBsYXN0Q2hhclNpemUgPSBbc2VsZiBlbmNvZGVDaGFyOmMgYnVmZmVyOnJlbW92ZWRdOworICBbY29udGV4dCByZXNldFN5bWJvbEluZm9dOyAvL0RlYWwgd2l0aCBwb3NzaWJsZSByZWR1Y3Rpb24gaW4gc3ltYm9sIHNpemUKKyAgcmV0dXJuIGxhc3RDaGFyU2l6ZTsKK30KKworLSAodm9pZCl3cml0ZU5leHRUcmlwbGV0OihaWEVuY29kZXJDb250ZXh0ICopY29udGV4dCBidWZmZXI6KE5TTXV0YWJsZVN0cmluZyAqKWJ1ZmZlciB7CisgIFtjb250ZXh0IHdyaXRlQ29kZXdvcmRzOltzZWxmIGVuY29kZVRvQ29kZXdvcmRzOmJ1ZmZlciBzdGFydHBvczowXV07CisgIFtidWZmZXIgZGVsZXRlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMyldOworfQorCisvKioKKyAqIEhhbmRsZSAiZW5kIG9mIGRhdGEiIHNpdHVhdGlvbnMKKyAqLworLSAodm9pZCloYW5kbGVFT0Q6KFpYRW5jb2RlckNvbnRleHQgKiljb250ZXh0IGJ1ZmZlcjooTlNNdXRhYmxlU3RyaW5nICopYnVmZmVyIHsKKyAgaW50IHVud3JpdHRlbiA9ICgoaW50KWJ1ZmZlci5sZW5ndGggLyAzKSAqIDI7CisgIGludCByZXN0ID0gYnVmZmVyLmxlbmd0aCAlIDM7CisKKyAgaW50IGN1ckNvZGV3b3JkQ291bnQgPSBjb250ZXh0LmNvZGV3b3JkQ291bnQgKyB1bndyaXR0ZW47CisgIFtjb250ZXh0IHVwZGF0ZVN5bWJvbEluZm9XaXRoTGVuZ3RoOmN1ckNvZGV3b3JkQ291bnRdOworICBpbnQgYXZhaWxhYmxlID0gY29udGV4dC5zeW1ib2xJbmZvLmRhdGFDYXBhY2l0eSAtIGN1ckNvZGV3b3JkQ291bnQ7CisKKyAgaWYgKHJlc3QgPT0gMikgeworICAgIFtidWZmZXIgYXBwZW5kU3RyaW5nOkAiXDAiXTsgLy9TaGlmdCAxCisgICAgd2hpbGUgKGJ1ZmZlci5sZW5ndGggPj0gMykgeworICAgICAgW3NlbGYgd3JpdGVOZXh0VHJpcGxldDpjb250ZXh0IGJ1ZmZlcjpidWZmZXJdOworICAgIH0KKyAgICBpZiAoW2NvbnRleHQgaGFzTW9yZUNoYXJhY3RlcnNdKSB7CisgICAgICBbY29udGV4dCB3cml0ZUNvZGV3b3JkOltaWEhpZ2hMZXZlbEVuY29kZXIgYzQwVW5sYXRjaF1dOworICAgIH0KKyAgfSBlbHNlIGlmIChhdmFpbGFibGUgPT0gMSAmJiByZXN0ID09IDEpIHsKKyAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCA+PSAzKSB7CisgICAgICBbc2VsZiB3cml0ZU5leHRUcmlwbGV0OmNvbnRleHQgYnVmZmVyOmJ1ZmZlcl07CisgICAgfQorICAgIGlmIChbY29udGV4dCBoYXNNb3JlQ2hhcmFjdGVyc10pIHsKKyAgICAgIFtjb250ZXh0IHdyaXRlQ29kZXdvcmQ6W1pYSGlnaExldmVsRW5jb2RlciBjNDBVbmxhdGNoXV07CisgICAgfQorICAgIC8vIGVsc2Ugbm8gbGF0Y2gKKyAgICBjb250ZXh0LnBvcy0tOworICB9IGVsc2UgaWYgKHJlc3QgPT0gMCkgeworICAgIHdoaWxlIChidWZmZXIubGVuZ3RoID49IDMpIHsKKyAgICAgIFtzZWxmIHdyaXRlTmV4dFRyaXBsZXQ6Y29udGV4dCBidWZmZXI6YnVmZmVyXTsKKyAgICB9CisgICAgaWYgKGF2YWlsYWJsZSA+IDAgfHwgW2NvbnRleHQgaGFzTW9yZUNoYXJhY3RlcnNdKSB7CisgICAgICBbY29udGV4dCB3cml0ZUNvZGV3b3JkOltaWEhpZ2hMZXZlbEVuY29kZXIgYzQwVW5sYXRjaF1dOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOkAiSWxsZWdhbFN0YXRlRXhjZXB0aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246QCJVbmV4cGVjdGVkIGNhc2UuIFBsZWFzZSByZXBvcnQhIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKKyAgfQorICBbY29udGV4dCBzaWduYWxFbmNvZGVyQ2hhbmdlOltaWEhpZ2hMZXZlbEVuY29kZXIgYXNjaWlFbmNvZGF0aW9uXV07Cit9CisKKy0gKGludCllbmNvZGVDaGFyOih1bmljaGFyKWMgYnVmZmVyOihOU011dGFibGVTdHJpbmcgKilzYiB7CisgIGlmIChjID09ICcgJykgeworICAgIFtzYiBhcHBlbmRTdHJpbmc6QCJcMyJdOworICAgIHJldHVybiAxOworICB9IGVsc2UgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChjIC0gNDggKyA0KV07CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHsKKyAgICBbc2IgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgKGMgLSA2NSArIDE0KV07CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSBpZiAoYyA+PSAnXDAnICYmIGMgPD0gKHVuaWNoYXIpMHgwMDFmKSB7CisgICAgW3NiIGFwcGVuZFN0cmluZzpAIlwwIl07IC8vU2hpZnQgMSBTZXQKKyAgICBbc2IgYXBwZW5kRm9ybWF0OkAiJUMiLCBjXTsKKyAgICByZXR1cm4gMjsKKyAgfSBlbHNlIGlmIChjID49ICchJyAmJiBjIDw9ICcvJykgeworICAgIFtzYiBhcHBlbmRTdHJpbmc6QCJcMSJdOyAvL1NoaWZ0IDIgU2V0CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChjIC0gMzMpXTsKKyAgICByZXR1cm4gMjsKKyAgfSBlbHNlIGlmIChjID49ICc6JyAmJiBjIDw9ICdAJykgeworICAgIFtzYiBhcHBlbmRTdHJpbmc6QCJcMSJdOyAvL1NoaWZ0IDIgU2V0CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChjIC0gNTggKyAxNSldOworICAgIHJldHVybiAyOworICB9IGVsc2UgaWYgKGMgPj0gJ1snICYmIGMgPD0gJ18nKSB7CisgICAgW3NiIGFwcGVuZFN0cmluZzpAIlwxIl07IC8vU2hpZnQgMiBTZXQKKyAgICBbc2IgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgKGMgLSA5MSArIDIyKV07CisgICAgcmV0dXJuIDI7CisgIH0gZWxzZSBpZiAoYyA+PSAnXHUwMDYwJyAmJiBjIDw9IChjaGFyKTB4MDA3ZikgeworICAgIFtzYiBhcHBlbmRTdHJpbmc6QCJcMiJdOyAvL1NoaWZ0IDMgU2V0CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChjIC0gOTYpXTsKKyAgICByZXR1cm4gMjsKKyAgfSBlbHNlIGlmIChjID49ICh1bmljaGFyKTB4MDA4MCkgeworICAgIFtzYiBhcHBlbmRGb3JtYXQ6QCJcMSVDIiwgKHVuaWNoYXIpMHgwMDFlXTsgLy9TaGlmdCAyLCBVcHBlciBTaGlmdAorICAgIGludCBsZW4gPSAyOworICAgIGxlbiArPSBbc2VsZiBlbmNvZGVDaGFyOih1bmljaGFyKSAoYyAtIDEyOCkgYnVmZmVyOnNiXTsKKyAgICByZXR1cm4gbGVuOworICB9IGVsc2UgeworICAgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6QCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIklsbGVnYWwgY2hhcmFjdGVyOiAlQyIsIGNdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWxdOworICB9Cit9CisKKy0gKE5TU3RyaW5nICopZW5jb2RlVG9Db2Rld29yZHM6KE5TU3RyaW5nICopc2Igc3RhcnRwb3M6KGludClzdGFydFBvcyB7CisgIHVuaWNoYXIgYzEgPSBbc2IgY2hhcmFjdGVyQXRJbmRleDpzdGFydFBvc107CisgIHVuaWNoYXIgYzIgPSBbc2IgY2hhcmFjdGVyQXRJbmRleDpzdGFydFBvcyArIDFdOworICB1bmljaGFyIGMzID0gW3NiIGNoYXJhY3RlckF0SW5kZXg6c3RhcnRQb3MgKyAyXTsKKyAgaW50IHYgPSAoMTYwMCAqIGMxKSArICg0MCAqIGMyKSArIGMzICsgMTsKKyAgdW5pY2hhciBjdzEgPSAodW5pY2hhcikgKHYgLyAyNTYpOworICB1bmljaGFyIGN3MiA9ICh1bmljaGFyKSAodiAlIDI1Nik7CisgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVDJUMiLCBjdzEsIGN3Ml07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhEYXRhTWF0cml4RW5jb2Rlci5oIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERhdGFNYXRyaXhFbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFiOWU1OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhEYXRhTWF0cml4RW5jb2Rlci5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BjbGFzcyBaWEVuY29kZXJDb250ZXh0OworCitAcHJvdG9jb2wgWlhEYXRhTWF0cml4RW5jb2RlciA8TlNPYmplY3Q+CisKKy0gKGludCllbmNvZGluZ01vZGU7CistICh2b2lkKWVuY29kZTooWlhFbmNvZGVyQ29udGV4dCAqKWNvbnRleHQ7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLmggYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlN2M1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogRXJyb3IgQ29ycmVjdGlvbiBDb2RlIGZvciBFQ0MyMDAuCisgKi8KKworQGNsYXNzIFpYU3ltYm9sSW5mbzsKKworQGludGVyZmFjZSBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb24gOiBOU09iamVjdAorCisrIChOU1N0cmluZyAqKWVuY29kZUVDQzIwMDooTlNTdHJpbmcgKiljb2Rld29yZHMgc3ltYm9sSW5mbzooWlhTeW1ib2xJbmZvICopc3ltYm9sSW5mbzsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb24ubSBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiOWJjYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uLm0KQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbi5oIgorI2ltcG9ydCAiWlhTeW1ib2xJbmZvLmgiCisKKy8qKgorICogTG9va3VwIHRhYmxlIHdoaWNoIGZhY3RvcnMgdG8gdXNlIGZvciB3aGljaCBudW1iZXIgb2YgZXJyb3IgY29ycmVjdGlvbiBjb2Rld29yZHMuCisgKiBTZWUgRkFDVE9SUy4KKyAqLworY29uc3QgaW50IEZBQ1RPUl9TRVRTX0xFTiA9IDE2OworY29uc3QgaW50IEZBQ1RPUl9TRVRTW0ZBQ1RPUl9TRVRTX0xFTl0gPSB7NSwgNywgMTAsIDExLCAxMiwgMTQsIDE4LCAyMCwgMjQsIDI4LCAzNiwgNDIsIDQ4LCA1NiwgNjIsIDY4fTsKKworLyoqCisgKiBQcmVjb21wdXRlZCBwb2x5bm9taWFsIGZhY3RvcnMgZm9yIEVDQyAyMDAuCisgKi8KK2NvbnN0IGludCBGQUNUT1JTWzE2XVs2OF0gPSB7CisgIHsyMjgsIDQ4LCAxNSwgMTExLCA2Mn0sCisgIHsyMywgNjgsIDE0NCwgMTM0LCAyNDAsIDkyLCAyNTR9LAorICB7MjgsIDI0LCAxODUsIDE2NiwgMjIzLCAyNDgsIDExNiwgMjU1LCAxMTAsIDYxfSwKKyAgezE3NSwgMTM4LCAyMDUsIDEyLCAxOTQsIDE2OCwgMzksIDI0NSwgNjAsIDk3LCAxMjB9LAorICB7NDEsIDE1MywgMTU4LCA5MSwgNjEsIDQyLCAxNDIsIDIxMywgOTcsIDE3OCwgMTAwLCAyNDJ9LAorICB7MTU2LCA5NywgMTkyLCAyNTIsIDk1LCA5LCAxNTcsIDExOSwgMTM4LCA0NSwgMTgsIDE4NiwgODMsIDE4NX0sCisgIHs4MywgMTk1LCAxMDAsIDM5LCAxODgsIDc1LCA2NiwgNjEsIDI0MSwgMjEzLCAxMDksIDEyOSwgOTQsIDI1NCwgMjI1LCA0OCwgOTAsIDE4OH0sCisgIHsxNSwgMTk1LCAyNDQsIDksIDIzMywgNzEsIDE2OCwgMiwgMTg4LCAxNjAsIDE1MywgMTQ1LCAyNTMsIDc5LCAxMDgsIDgyLCAyNywgMTc0LCAxODYsIDE3Mn0sCisgIHs1MiwgMTkwLCA4OCwgMjA1LCAxMDksIDM5LCAxNzYsIDIxLCAxNTUsIDE5NywgMjUxLCAyMjMsIDE1NSwgMjEsIDUsIDE3MiwKKyAgICAyNTQsIDEyNCwgMTIsIDE4MSwgMTg0LCA5NiwgNTAsIDE5M30sCisgIHsyMTEsIDIzMSwgNDMsIDk3LCA3MSwgOTYsIDEwMywgMTc0LCAzNywgMTUxLCAxNzAsIDUzLCA3NSwgMzQsIDI0OSwgMTIxLAorICAgIDE3LCAxMzgsIDExMCwgMjEzLCAxNDEsIDEzNiwgMTIwLCAxNTEsIDIzMywgMTY4LCA5MywgMjU1fSwKKyAgezI0NSwgMTI3LCAyNDIsIDIxOCwgMTMwLCAyNTAsIDE2MiwgMTgxLCAxMDIsIDEyMCwgODQsIDE3OSwgMjIwLCAyNTEsIDgwLCAxODIsCisgICAgMjI5LCAxOCwgMiwgNCwgNjgsIDMzLCAxMDEsIDEzNywgOTUsIDExOSwgMTE1LCA0NCwgMTc1LCAxODQsIDU5LCAyNSwKKyAgICAyMjUsIDk4LCA4MSwgMTEyfSwKKyAgezc3LCAxOTMsIDEzNywgMzEsIDE5LCAzOCwgMjIsIDE1MywgMjQ3LCAxMDUsIDEyMiwgMiwgMjQ1LCAxMzMsIDI0MiwgOCwKKyAgICAxNzUsIDk1LCAxMDAsIDksIDE2NywgMTA1LCAyMTQsIDExMSwgNTcsIDEyMSwgMjEsIDEsIDI1MywgNTcsIDU0LCAxMDEsCisgICAgMjQ4LCAyMDIsIDY5LCA1MCwgMTUwLCAxNzcsIDIyNiwgNSwgOSwgNX0sCisgIHsyNDUsIDEzMiwgMTcyLCAyMjMsIDk2LCAzMiwgMTE3LCAyMiwgMjM4LCAxMzMsIDIzOCwgMjMxLCAyMDUsIDE4OCwgMjM3LCA4NywKKyAgICAxOTEsIDEwNiwgMTYsIDE0NywgMTE4LCAyMywgMzcsIDkwLCAxNzAsIDIwNSwgMTMxLCA4OCwgMTIwLCAxMDAsIDY2LCAxMzgsCisgICAgMTg2LCAyNDAsIDgyLCA0NCwgMTc2LCA4NywgMTg3LCAxNDcsIDE2MCwgMTc1LCA2OSwgMjEzLCA5MiwgMjUzLCAyMjUsIDE5fSwKKyAgezE3NSwgOSwgMjIzLCAyMzgsIDEyLCAxNywgMjIwLCAyMDgsIDEwMCwgMjksIDE3NSwgMTcwLCAyMzAsIDE5MiwgMjE1LCAyMzUsCisgICAgMTUwLCAxNTksIDM2LCAyMjMsIDM4LCAyMDAsIDEzMiwgNTQsIDIyOCwgMTQ2LCAyMTgsIDIzNCwgMTE3LCAyMDMsIDI5LCAyMzIsCisgICAgMTQ0LCAyMzgsIDIyLCAxNTAsIDIwMSwgMTE3LCA2MiwgMjA3LCAxNjQsIDEzLCAxMzcsIDI0NSwgMTI3LCA2NywgMjQ3LCAyOCwKKyAgICAxNTUsIDQzLCAyMDMsIDEwNywgMjMzLCA1MywgMTQzLCA0Nn0sCisgIHsyNDIsIDkzLCAxNjksIDUwLCAxNDQsIDIxMCwgMzksIDExOCwgMjAyLCAxODgsIDIwMSwgMTg5LCAxNDMsIDEwOCwgMTk2LCAzNywKKyAgICAxODUsIDExMiwgMTM0LCAyMzAsIDI0NSwgNjMsIDE5NywgMTkwLCAyNTAsIDEwNiwgMTg1LCAyMjEsIDE3NSwgNjQsIDExNCwgNzEsCisgICAgMTYxLCA0NCwgMTQ3LCA2LCAyNywgMjE4LCA1MSwgNjMsIDg3LCAxMCwgNDAsIDEzMCwgMTg4LCAxNywgMTYzLCAzMSwKKyAgICAxNzYsIDE3MCwgNCwgMTA3LCAyMzIsIDcsIDk0LCAxNjYsIDIyNCwgMTI0LCA4NiwgNDcsIDExLCAyMDR9LAorICB7MjIwLCAyMjgsIDE3MywgODksIDI1MSwgMTQ5LCAxNTksIDU2LCA4OSwgMzMsIDE0NywgMjQ0LCAxNTQsIDM2LCA3MywgMTI3LAorICAgIDIxMywgMTM2LCAyNDgsIDE4MCwgMjM0LCAxOTcsIDE1OCwgMTc3LCA2OCwgMTIyLCA5MywgMjEzLCAxNSwgMTYwLCAyMjcsIDIzNiwKKyAgICA2NiwgMTM5LCAxNTMsIDE4NSwgMjAyLCAxNjcsIDE3OSwgMjUsIDIyMCwgMjMyLCA5NiwgMjEwLCAyMzEsIDEzNiwgMjIzLCAyMzksCisgICAgMTgxLCAyNDEsIDU5LCA1MiwgMTcyLCAyNSwgNDksIDIzMiwgMjExLCAxODksIDY0LCA1NCwgMTA4LCAxNTMsIDEzMiwgNjMsCisgICAgOTYsIDEwMywgODIsIDE4Nn19OworCitjb25zdCBpbnQgTU9EVUxPX1ZBTFVFID0gMHgxMkQ7CisKK3N0YXRpYyBpbnQgTE9HWzI1Nl0sIEFMT0dbMjU2XTsKKworQGltcGxlbWVudGF0aW9uIFpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvbgorCisrICh2b2lkKWluaXRpYWxpemUgeworICAvL0NyZWF0ZSBsb2cgYW5kIGFudGlsb2cgdGFibGUKKyAgaW50IHAgPSAxOworICBmb3IgKGludCBpID0gMDsgaSA8IDI1NTsgaSsrKSB7CisgICAgQUxPR1tpXSA9IHA7CisgICAgTE9HW3BdID0gaTsKKyAgICBwIDw8PSAxOworICAgIGlmIChwID49IDI1NikgeworICAgICAgcCBePSBNT0RVTE9fVkFMVUU7CisgICAgfQorICB9Cit9CisKKysgKE5TU3RyaW5nICopZW5jb2RlRUNDMjAwOihOU1N0cmluZyAqKWNvZGV3b3JkcyBzeW1ib2xJbmZvOihaWFN5bWJvbEluZm8gKilzeW1ib2xJbmZvIHsKKyAgaWYgKGNvZGV3b3Jkcy5sZW5ndGggIT0gc3ltYm9sSW5mby5kYXRhQ2FwYWNpdHkpIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiVGhlIG51bWJlciBvZiBjb2Rld29yZHMgZG9lcyBub3QgbWF0Y2ggdGhlIHNlbGVjdGVkIHN5bWJvbCJdOworICB9CisgIE5TVUludGVnZXIgY2FwYWNpdHkgPSBzeW1ib2xJbmZvLmRhdGFDYXBhY2l0eSArIHN5bWJvbEluZm8uZXJyb3JDb2Rld29yZHM7CisgIE5TTXV0YWJsZVN0cmluZyAqc2IgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhDYXBhY2l0eTpjYXBhY2l0eV07CisgIFtzYiBhcHBlbmRTdHJpbmc6Y29kZXdvcmRzXTsKKyAgaW50IGJsb2NrQ291bnQgPSBzeW1ib2xJbmZvLmludGVybGVhdmVkQmxvY2tDb3VudDsKKyAgaWYgKGJsb2NrQ291bnQgPT0gMSkgeworICAgIE5TU3RyaW5nICplY2MgPSBbc2VsZiBjcmVhdGVFQ0NCbG9jazpjb2Rld29yZHMgbnVtRUNXb3JkczpzeW1ib2xJbmZvLmVycm9yQ29kZXdvcmRzXTsKKyAgICBbc2IgYXBwZW5kU3RyaW5nOmVjY107CisgIH0gZWxzZSB7CisgICAgaWYgKHNiLmxlbmd0aCA+IGNhcGFjaXR5KSB7CisgICAgICBbc2IgZGVsZXRlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UoY2FwYWNpdHksIHNiLmxlbmd0aCAtIGNhcGFjaXR5KV07CisgICAgfQorICAgIGludCBkYXRhU2l6ZXNbYmxvY2tDb3VudF07CisgICAgaW50IGVycm9yU2l6ZXNbYmxvY2tDb3VudF07CisgICAgaW50IHN0YXJ0UG9zW2Jsb2NrQ291bnRdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tDb3VudDsgaSsrKSB7CisgICAgICBkYXRhU2l6ZXNbaV0gPSBbc3ltYm9sSW5mbyBkYXRhTGVuZ3RoRm9ySW50ZXJsZWF2ZWRCbG9jazppICsgMV07CisgICAgICBlcnJvclNpemVzW2ldID0gW3N5bWJvbEluZm8gZXJyb3JMZW5ndGhGb3JJbnRlcmxlYXZlZEJsb2NrOmkgKyAxXTsKKyAgICAgIHN0YXJ0UG9zW2ldID0gMDsKKyAgICAgIGlmIChpID4gMCkgeworICAgICAgICBzdGFydFBvc1tpXSA9IHN0YXJ0UG9zW2kgLSAxXSArIGRhdGFTaXplc1tpXTsKKyAgICAgIH0KKyAgICB9CisgICAgZm9yIChpbnQgYmxvY2sgPSAwOyBibG9jayA8IGJsb2NrQ291bnQ7IGJsb2NrKyspIHsKKyAgICAgIE5TTXV0YWJsZVN0cmluZyAqdGVtcCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OmRhdGFTaXplc1tibG9ja11dOworICAgICAgZm9yIChpbnQgZCA9IGJsb2NrOyBkIDwgc3ltYm9sSW5mby5kYXRhQ2FwYWNpdHk7IGQgKz0gYmxvY2tDb3VudCkgeworICAgICAgICBbdGVtcCBhcHBlbmRGb3JtYXQ6QCIlYyIsIFtjb2Rld29yZHMgY2hhcmFjdGVyQXRJbmRleDpkXV07CisgICAgICB9CisgICAgICBOU1N0cmluZyAqZWNjID0gW3NlbGYgY3JlYXRlRUNDQmxvY2s6dGVtcCBudW1FQ1dvcmRzOmVycm9yU2l6ZXNbYmxvY2tdXTsKKyAgICAgIGludCBwb3MgPSAwOworICAgICAgZm9yIChpbnQgZSA9IGJsb2NrOyBlIDwgZXJyb3JTaXplc1tibG9ja10gKiBibG9ja0NvdW50OyBlICs9IGJsb2NrQ291bnQpIHsKKyAgICAgICAgW3NiIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShzeW1ib2xJbmZvLmRhdGFDYXBhY2l0eSArIGUsIDEpIHdpdGhTdHJpbmc6W2VjYyBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UocG9zKyssIDEpXV07CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aFN0cmluZzpzYl07Cit9CisKKysgKE5TU3RyaW5nICopY3JlYXRlRUNDQmxvY2s6KE5TU3RyaW5nICopY29kZXdvcmRzIG51bUVDV29yZHM6KGludCludW1FQ1dvcmRzIHsKKyAgcmV0dXJuIFtzZWxmIGNyZWF0ZUVDQ0Jsb2NrOmNvZGV3b3JkcyBzdGFydDowIGxlbjooaW50KWNvZGV3b3Jkcy5sZW5ndGggbnVtRUNXb3JkczpudW1FQ1dvcmRzXTsKK30KKworKyAoTlNTdHJpbmcgKiljcmVhdGVFQ0NCbG9jazooTlNTdHJpbmcgKiljb2Rld29yZHMgc3RhcnQ6KGludClzdGFydCBsZW46KGludClsZW4gbnVtRUNXb3JkczooaW50KW51bUVDV29yZHMgeworICBpbnQgdGFibGUgPSAtMTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBGQUNUT1JfU0VUU19MRU47IGkrKykgeworICAgIGlmIChGQUNUT1JfU0VUU1tpXSA9PSBudW1FQ1dvcmRzKSB7CisgICAgICB0YWJsZSA9IGk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYgKHRhYmxlIDwgMCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJJbGxlZ2FsIG51bWJlciBvZiBlcnJvciBjb3JyZWN0aW9uIGNvZGV3b3JkcyBzcGVjaWZpZWQ6ICVkIiwgbnVtRUNXb3Jkc107CisgIH0KKyAgaW50ICpwb2x5ID0gKGludCAqKUZBQ1RPUlNbdGFibGVdOworICB1bmljaGFyIGVjY1tudW1FQ1dvcmRzXTsKKyAgbWVtc2V0KGVjYywgMCwgbnVtRUNXb3JkcyAqIHNpemVvZih1bmljaGFyKSk7CisgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgbGVuOyBpKyspIHsKKyAgICBpbnQgbSA9IGVjY1tudW1FQ1dvcmRzIC0gMV0gXiBbY29kZXdvcmRzIGNoYXJhY3RlckF0SW5kZXg6aV07CisgICAgZm9yIChpbnQgayA9IG51bUVDV29yZHMgLSAxOyBrID4gMDsgay0tKSB7CisgICAgICBpZiAobSAhPSAwICYmIHBvbHlba10gIT0gMCkgeworICAgICAgICBlY2Nba10gPSAodW5pY2hhcikgKGVjY1trIC0gMV0gXiBBTE9HWyhMT0dbbV0gKyBMT0dbcG9seVtrXV0pICUgMjU1XSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBlY2Nba10gPSBlY2NbayAtIDFdOworICAgICAgfQorICAgIH0KKyAgICBpZiAobSAhPSAwICYmIHBvbHlbMF0gIT0gMCkgeworICAgICAgZWNjWzBdID0gKHVuaWNoYXIpIEFMT0dbKExPR1ttXSArIExPR1twb2x5WzBdXSkgJSAyNTVdOworICAgIH0gZWxzZSB7CisgICAgICBlY2NbMF0gPSAwOworICAgIH0KKyAgfQorICB1bmljaGFyIGVjY1JldmVyc2VkW251bUVDV29yZHNdOworICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVDV29yZHM7IGkrKykgeworICAgIGVjY1JldmVyc2VkW2ldID0gZWNjW251bUVDV29yZHMgLSBpIC0gMV07CisgIH0KKyAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczplY2NSZXZlcnNlZCBsZW5ndGg6bnVtRUNXb3Jkc107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5oIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhlM2E5ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYU3ltYm9sSW5mby5oIgorCitAaW50ZXJmYWNlIFpYRGF0YU1hdHJpeFN5bWJvbEluZm8xNDQgOiBaWFN5bWJvbEluZm8KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0Lm0gYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYRGF0YU1hdHJpeFN5bWJvbEluZm8xNDQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2E4ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0Lm0KQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhEYXRhTWF0cml4U3ltYm9sSW5mbzE0NAorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhSZWN0YW5ndWxhcjpOTyBkYXRhQ2FwYWNpdHk6MTU1OCBlcnJvckNvZGV3b3Jkczo2MjAgbWF0cml4V2lkdGg6MjIgbWF0cml4SGVpZ2h0OjIyIGRhdGFSZWdpb25zOjM2XSkgeworICAgIHNlbGYucnNCbG9ja0RhdGEgPSAtMTsgLy9zcGVjaWFsISBzZWUgYmVsb3cKKyAgICBzZWxmLnJzQmxvY2tFcnJvciA9IDYyOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGludClpbnRlcmxlYXZlZEJsb2NrQ291bnQgeworICByZXR1cm4gMTA7Cit9CisKKy0gKGludClkYXRhTGVuZ3RoRm9ySW50ZXJsZWF2ZWRCbG9jazooaW50KWluZGV4IHsKKyAgcmV0dXJuIChpbmRleCA8PSA4KSA/IDE1NiA6IDE1NTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERlZmF1bHRQbGFjZW1lbnQuaCBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhEZWZhdWx0UGxhY2VtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkMjY5NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhEZWZhdWx0UGxhY2VtZW50LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBTeW1ib2wgQ2hhcmFjdGVyIFBsYWNlbWVudCBQcm9ncmFtLiBBZGFwdGVkIGZyb20gQW5uZXggTS4xIGluIElTTy9JRUMgMTYwMjI6MjAwMChFKS4KKyAqLworCitAaW50ZXJmYWNlIFpYRGVmYXVsdFBsYWNlbWVudCA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKmNvZGV3b3JkczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgbnVtcm93czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgbnVtY29sczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQ4X3QgKmJpdHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGJpdHNMZW47CisKKy0gKGlkKWluaXRXaXRoQ29kZXdvcmRzOihOU1N0cmluZyAqKWNvZGV3b3JkcyBudW1jb2xzOihpbnQpbnVtY29scyBudW1yb3dzOihpbnQpbnVtcm93czsKKy0gKEJPT0wpYml0QXRDb2w6KGludCljb2wgcm93OihpbnQpcm93OworLSAodm9pZClzZXRCaXRBdENvbDooaW50KWNvbCByb3c6KGludClyb3cgYml0OihCT09MKWJpdDsKKy0gKEJPT0wpaGFzQml0QXRDb2w6KGludCljb2wgcm93OihpbnQpcm93OworLSAodm9pZClwbGFjZTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERlZmF1bHRQbGFjZW1lbnQubSBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhEZWZhdWx0UGxhY2VtZW50Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4ZWM2NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhEZWZhdWx0UGxhY2VtZW50Lm0KQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRGVmYXVsdFBsYWNlbWVudC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhEZWZhdWx0UGxhY2VtZW50CisKKy0gKGlkKWluaXRXaXRoQ29kZXdvcmRzOihOU1N0cmluZyAqKWNvZGV3b3JkcyBudW1jb2xzOihpbnQpbnVtY29scyBudW1yb3dzOihpbnQpbnVtcm93cyB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2NvZGV3b3JkcyA9IFtjb2Rld29yZHMgY29weV07CisgICAgX251bWNvbHMgPSBudW1jb2xzOworICAgIF9udW1yb3dzID0gbnVtcm93czsKKyAgICBfYml0c0xlbiA9IG51bWNvbHMgKiBudW1yb3dzOworICAgIF9iaXRzID0gKGludDhfdCAqKW1hbGxvYyhfYml0c0xlbiAqIHNpemVvZihpbnQ4X3QpKTsKKyAgICBtZW1zZXQoX2JpdHMsIC0xLCBfYml0c0xlbik7IC8vSW5pdGlhbGl6ZSB3aXRoICJub3Qgc2V0IiB2YWx1ZQorICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYyB7CisgIGlmIChfYml0cyAhPSBOVUxMKSB7CisgICAgZnJlZShfYml0cyk7CisgICAgX2JpdHMgPSBOVUxMOworICB9Cit9CisKKy0gKEJPT0wpYml0QXRDb2w6KGludCljb2wgcm93OihpbnQpcm93IHsKKyAgcmV0dXJuIHNlbGYuYml0c1tyb3cgKiBzZWxmLm51bWNvbHMgKyBjb2xdID09IDE7Cit9CisKKy0gKHZvaWQpc2V0Qml0QXRDb2w6KGludCljb2wgcm93OihpbnQpcm93IGJpdDooQk9PTCliaXQgeworICBzZWxmLmJpdHNbcm93ICogc2VsZi5udW1jb2xzICsgY29sXSA9IGJpdCA/IChpbnQ4X3QpIDEgOiAoaW50OF90KSAwOworfQorCistIChCT09MKWhhc0JpdEF0Q29sOihpbnQpY29sIHJvdzooaW50KXJvdyB7CisgIHJldHVybiBzZWxmLmJpdHNbcm93ICogc2VsZi5udW1jb2xzICsgY29sXSA+PSAwOworfQorCistICh2b2lkKXBsYWNlIHsKKyAgaW50IHBvcyA9IDA7CisgIGludCByb3cgPSA0OworICBpbnQgY29sID0gMDsKKworICBkbyB7CisgICAgLyogcmVwZWF0ZWRseSBmaXJzdCBjaGVjayBmb3Igb25lIG9mIHRoZSBzcGVjaWFsIGNvcm5lciBjYXNlcywgdGhlbi4uLiAqLworICAgIGlmICgocm93ID09IHNlbGYubnVtcm93cykgJiYgKGNvbCA9PSAwKSkgeworICAgICAgW3NlbGYgY29ybmVyMTpwb3MrK107CisgICAgfQorICAgIGlmICgocm93ID09IHNlbGYubnVtcm93cyAtIDIpICYmIChjb2wgPT0gMCkgJiYgKChzZWxmLm51bWNvbHMgJSA0KSAhPSAwKSkgeworICAgICAgW3NlbGYgY29ybmVyMjpwb3MrK107CisgICAgfQorICAgIGlmICgocm93ID09IHNlbGYubnVtcm93cyAtIDIpICYmIChjb2wgPT0gMCkgJiYgKHNlbGYubnVtY29scyAlIDggPT0gNCkpIHsKKyAgICAgIFtzZWxmIGNvcm5lcjM6cG9zKytdOworICAgIH0KKyAgICBpZiAoKHJvdyA9PSBzZWxmLm51bXJvd3MgKyA0KSAmJiAoY29sID09IDIpICYmICgoc2VsZi5udW1jb2xzICUgOCkgPT0gMCkpIHsKKyAgICAgIFtzZWxmIGNvcm5lcjQ6cG9zKytdOworICAgIH0KKyAgICAvKiBzd2VlcCB1cHdhcmQgZGlhZ29uYWxseSwgaW5zZXJ0aW5nIHN1Y2Nlc3NpdmUgY2hhcmFjdGVycy4uLiAqLworICAgIGRvIHsKKyAgICAgIGlmICgocm93IDwgc2VsZi5udW1yb3dzKSAmJiAoY29sID49IDApICYmICFbc2VsZiBoYXNCaXRBdENvbDpjb2wgcm93OnJvd10pIHsKKyAgICAgICAgW3NlbGYgdXRhaEF0Um93OnJvdyBjb2w6Y29sIHBvczpwb3MrK107CisgICAgICB9CisgICAgICByb3cgLT0gMjsKKyAgICAgIGNvbCArPSAyOworICAgIH0gd2hpbGUgKHJvdyA+PSAwICYmIChjb2wgPCBzZWxmLm51bWNvbHMpKTsKKyAgICByb3crKzsKKyAgICBjb2wgKz0gMzsKKworICAgIC8qIGFuZCB0aGVuIHN3ZWVwIGRvd253YXJkIGRpYWdvbmFsbHksIGluc2VydGluZyBzdWNjZXNzaXZlIGNoYXJhY3RlcnMsIC4uLiAqLworICAgIGRvIHsKKyAgICAgIGlmICgocm93ID49IDApICYmIChjb2wgPCBzZWxmLm51bWNvbHMpICYmICFbc2VsZiBoYXNCaXRBdENvbDpjb2wgcm93OnJvd10pIHsKKyAgICAgICAgW3NlbGYgdXRhaEF0Um93OnJvdyBjb2w6Y29sIHBvczpwb3MrK107CisgICAgICB9CisgICAgICByb3cgKz0gMjsKKyAgICAgIGNvbCAtPSAyOworICAgIH0gd2hpbGUgKChyb3cgPCBzZWxmLm51bXJvd3MpICYmIChjb2wgPj0gMCkpOworICAgIHJvdyArPSAzOworICAgIGNvbCsrOworCisgICAgLyogLi4udW50aWwgdGhlIGVudGlyZSBhcnJheSBpcyBzY2FubmVkICovCisgIH0gd2hpbGUgKChyb3cgPCBzZWxmLm51bXJvd3MpIHx8IChjb2wgPCBzZWxmLm51bWNvbHMpKTsKKworICAvKiBMYXN0bHksIGlmIHRoZSBsb3dlciByaWdodGhhbmQgY29ybmVyIGlzIHVudG91Y2hlZCwgZmlsbCBpbiBmaXhlZCBwYXR0ZXJuICovCisgIGlmICghW3NlbGYgaGFzQml0QXRDb2w6c2VsZi5udW1jb2xzIC0gMSByb3c6c2VsZi5udW1yb3dzIC0gMV0pIHsKKyAgICBbc2VsZiBzZXRCaXRBdENvbDpzZWxmLm51bWNvbHMgLSAxIHJvdzpzZWxmLm51bXJvd3MgLSAxIGJpdDpZRVNdOworICAgIFtzZWxmIHNldEJpdEF0Q29sOnNlbGYubnVtY29scyAtIDIgcm93OnNlbGYubnVtcm93cyAtIDIgYml0OllFU107CisgIH0KK30KKworLSAodm9pZCltb2R1bGVBdFJvdzooaW50KXJvdyBjb2w6KGludCljb2wgcG9zOihpbnQpcG9zIGJpdDooaW50KWJpdCB7CisgIGlmIChyb3cgPCAwKSB7CisgICAgcm93ICs9IHNlbGYubnVtcm93czsKKyAgICBjb2wgKz0gNCAtICgoc2VsZi5udW1yb3dzICsgNCkgJSA4KTsKKyAgfQorICBpZiAoY29sIDwgMCkgeworICAgIGNvbCArPSBzZWxmLm51bWNvbHM7CisgICAgcm93ICs9IDQgLSAoKHNlbGYubnVtY29scyArIDQpICUgOCk7CisgIH0KKyAgLy8gTm90ZSB0aGUgY29udmVyc2lvbjoKKyAgaW50IHYgPSBbc2VsZi5jb2Rld29yZHMgY2hhcmFjdGVyQXRJbmRleDpwb3NdOworICB2ICY9IDEgPDwgKDggLSBiaXQpOworICBbc2VsZiBzZXRCaXRBdENvbDpjb2wgcm93OnJvdyBiaXQ6diAhPSAwXTsKK30KKworLyoqCisgKiBQbGFjZXMgdGhlIDggYml0cyBvZiBhIHV0YWgtc2hhcGVkIHN5bWJvbCBjaGFyYWN0ZXIgaW4gRUNDMjAwLgorICovCistICh2b2lkKXV0YWhBdFJvdzooaW50KXJvdyBjb2w6KGludCljb2wgcG9zOihpbnQpcG9zIHsKKyAgW3NlbGYgbW9kdWxlQXRSb3c6cm93IC0gMiBjb2w6Y29sIC0gMiBwb3M6cG9zIGJpdDoxXTsKKyAgW3NlbGYgbW9kdWxlQXRSb3c6cm93IC0gMiBjb2w6Y29sIC0gMSBwb3M6cG9zIGJpdDoyXTsKKyAgW3NlbGYgbW9kdWxlQXRSb3c6cm93IC0gMSBjb2w6Y29sIC0gMiBwb3M6cG9zIGJpdDozXTsKKyAgW3NlbGYgbW9kdWxlQXRSb3c6cm93IC0gMSBjb2w6Y29sIC0gMSBwb3M6cG9zIGJpdDo0XTsKKyAgW3NlbGYgbW9kdWxlQXRSb3c6cm93IC0gMSBjb2w6Y29sIHBvczpwb3MgYml0OjVdOworICBbc2VsZiBtb2R1bGVBdFJvdzpyb3cgY29sOmNvbCAtIDIgcG9zOnBvcyBiaXQ6Nl07CisgIFtzZWxmIG1vZHVsZUF0Um93OnJvdyBjb2w6Y29sIC0gMSBwb3M6cG9zIGJpdDo3XTsKKyAgW3NlbGYgbW9kdWxlQXRSb3c6cm93IGNvbDpjb2wgcG9zOnBvcyBiaXQ6OF07Cit9CisKKy0gKHZvaWQpY29ybmVyMTooaW50KXBvcyB7CisgIFtzZWxmIG1vZHVsZUF0Um93OnNlbGYubnVtcm93cyAtIDEgY29sOjAgcG9zOnBvcyBiaXQ6MV07CisgIFtzZWxmIG1vZHVsZUF0Um93OnNlbGYubnVtcm93cyAtIDEgY29sOjEgcG9zOnBvcyBiaXQ6Ml07CisgIFtzZWxmIG1vZHVsZUF0Um93OnNlbGYubnVtcm93cyAtIDEgY29sOjIgcG9zOnBvcyBiaXQ6M107CisgIFtzZWxmIG1vZHVsZUF0Um93OjAgY29sOnNlbGYubnVtY29scyAtIDIgcG9zOnBvcyBiaXQ6NF07CisgIFtzZWxmIG1vZHVsZUF0Um93OjAgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6NV07CisgIFtzZWxmIG1vZHVsZUF0Um93OjEgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6Nl07CisgIFtzZWxmIG1vZHVsZUF0Um93OjIgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6N107CisgIFtzZWxmIG1vZHVsZUF0Um93OjMgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6OF07Cit9CisKKy0gKHZvaWQpY29ybmVyMjooaW50KXBvcyB7CisgIFtzZWxmIG1vZHVsZUF0Um93OnNlbGYubnVtcm93cyAtIDMgY29sOjAgcG9zOnBvcyBiaXQ6MV07CisgIFtzZWxmIG1vZHVsZUF0Um93OnNlbGYubnVtcm93cyAtIDIgY29sOjAgcG9zOnBvcyBiaXQ6Ml07CisgIFtzZWxmIG1vZHVsZUF0Um93OnNlbGYubnVtcm93cyAtIDEgY29sOjAgcG9zOnBvcyBiaXQ6M107CisgIFtzZWxmIG1vZHVsZUF0Um93OjAgY29sOnNlbGYubnVtY29scyAtIDQgcG9zOnBvcyBiaXQ6NF07CisgIFtzZWxmIG1vZHVsZUF0Um93OjAgY29sOnNlbGYubnVtY29scyAtIDMgcG9zOnBvcyBiaXQ6NV07CisgIFtzZWxmIG1vZHVsZUF0Um93OjAgY29sOnNlbGYubnVtY29scyAtIDIgcG9zOnBvcyBiaXQ6Nl07CisgIFtzZWxmIG1vZHVsZUF0Um93OjAgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6N107CisgIFtzZWxmIG1vZHVsZUF0Um93OjEgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6OF07Cit9CisKKy0gKHZvaWQpY29ybmVyMzooaW50KXBvcyB7CisgIFtzZWxmIG1vZHVsZUF0Um93OnNlbGYubnVtcm93cyAtIDMgY29sOjAgcG9zOnBvcyBiaXQ6MV07CisgIFtzZWxmIG1vZHVsZUF0Um93OnNlbGYubnVtcm93cyAtIDIgY29sOjAgcG9zOnBvcyBiaXQ6Ml07CisgIFtzZWxmIG1vZHVsZUF0Um93OnNlbGYubnVtcm93cyAtIDEgY29sOjAgcG9zOnBvcyBiaXQ6M107CisgIFtzZWxmIG1vZHVsZUF0Um93OjAgY29sOnNlbGYubnVtY29scyAtIDIgcG9zOnBvcyBiaXQ6NF07CisgIFtzZWxmIG1vZHVsZUF0Um93OjAgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6NV07CisgIFtzZWxmIG1vZHVsZUF0Um93OjEgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6Nl07CisgIFtzZWxmIG1vZHVsZUF0Um93OjIgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6N107CisgIFtzZWxmIG1vZHVsZUF0Um93OjMgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6OF07Cit9CisKKy0gKHZvaWQpY29ybmVyNDooaW50KXBvcyB7CisgIFtzZWxmIG1vZHVsZUF0Um93OnNlbGYubnVtcm93cyAtIDEgY29sOjAgcG9zOnBvcyBiaXQ6MV07CisgIFtzZWxmIG1vZHVsZUF0Um93OnNlbGYubnVtcm93cyAtIDEgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6Ml07CisgIFtzZWxmIG1vZHVsZUF0Um93OjAgY29sOnNlbGYubnVtY29scyAtIDMgcG9zOnBvcyBiaXQ6M107CisgIFtzZWxmIG1vZHVsZUF0Um93OjAgY29sOnNlbGYubnVtY29scyAtIDIgcG9zOnBvcyBiaXQ6NF07CisgIFtzZWxmIG1vZHVsZUF0Um93OjAgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6NV07CisgIFtzZWxmIG1vZHVsZUF0Um93OjEgY29sOnNlbGYubnVtY29scyAtIDMgcG9zOnBvcyBiaXQ6Nl07CisgIFtzZWxmIG1vZHVsZUF0Um93OjEgY29sOnNlbGYubnVtY29scyAtIDIgcG9zOnBvcyBiaXQ6N107CisgIFtzZWxmIG1vZHVsZUF0Um93OjEgY29sOnNlbGYubnVtY29scyAtIDEgcG9zOnBvcyBiaXQ6OF07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhFZGlmYWN0RW5jb2Rlci5oIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEVkaWZhY3RFbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5Y2ViOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhFZGlmYWN0RW5jb2Rlci5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeEVuY29kZXIuaCIKKworQGludGVyZmFjZSBaWEVkaWZhY3RFbmNvZGVyIDogTlNPYmplY3QgPFpYRGF0YU1hdHJpeEVuY29kZXI+CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhFZGlmYWN0RW5jb2Rlci5tIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEVkaWZhY3RFbmNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwMjc3MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhFZGlmYWN0RW5jb2Rlci5tCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEVkaWZhY3RFbmNvZGVyLmgiCisjaW1wb3J0ICJaWEVuY29kZXJDb250ZXh0LmgiCisjaW1wb3J0ICJaWEhpZ2hMZXZlbEVuY29kZXIuaCIKKyNpbXBvcnQgIlpYU3ltYm9sSW5mby5oIgorCitAaW1wbGVtZW50YXRpb24gWlhFZGlmYWN0RW5jb2RlcgorCistIChpbnQpZW5jb2RpbmdNb2RlIHsKKyAgcmV0dXJuIFtaWEhpZ2hMZXZlbEVuY29kZXIgZWRpZmFjdEVuY29kYXRpb25dOworfQorCistICh2b2lkKWVuY29kZTooWlhFbmNvZGVyQ29udGV4dCAqKWNvbnRleHQgeworICAvL3N0ZXAgRgorICBOU011dGFibGVTdHJpbmcgKmJ1ZmZlciA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgd2hpbGUgKFtjb250ZXh0IGhhc01vcmVDaGFyYWN0ZXJzXSkgeworICAgIHVuaWNoYXIgYyA9IFtjb250ZXh0IGN1cnJlbnRDaGFyXTsKKyAgICBbc2VsZiBlbmNvZGVDaGFyOmMgYnVmZmVyOmJ1ZmZlcl07CisgICAgY29udGV4dC5wb3MrKzsKKworICAgIE5TVUludGVnZXIgY291bnQgPSBidWZmZXIubGVuZ3RoOworICAgIGlmIChjb3VudCA+PSA0KSB7CisgICAgICBbY29udGV4dCB3cml0ZUNvZGV3b3Jkczpbc2VsZiBlbmNvZGVUb0NvZGV3b3JkczpidWZmZXIgc3RhcnRwb3M6MF1dOworICAgICAgW2J1ZmZlciBkZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCA0KV07CisKKyAgICAgIGludCBuZXdNb2RlID0gW1pYSGlnaExldmVsRW5jb2RlciBsb29rQWhlYWRUZXN0OmNvbnRleHQubWVzc2FnZSBzdGFydHBvczpjb250ZXh0LnBvcyBjdXJyZW50TW9kZTpbc2VsZiBlbmNvZGluZ01vZGVdXTsKKyAgICAgIGlmIChuZXdNb2RlICE9IFtzZWxmIGVuY29kaW5nTW9kZV0pIHsKKyAgICAgICAgW2NvbnRleHQgc2lnbmFsRW5jb2RlckNoYW5nZTpbWlhIaWdoTGV2ZWxFbmNvZGVyIGFzY2lpRW5jb2RhdGlvbl1dOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgW2J1ZmZlciBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSAzMV07IC8vVW5sYXRjaAorICBbc2VsZiBoYW5kbGVFT0Q6Y29udGV4dCBidWZmZXI6YnVmZmVyXTsKK30KKworLyoqCisgKiBIYW5kbGUgImVuZCBvZiBkYXRhIiBzaXR1YXRpb25zCisgKi8KKy0gKHZvaWQpaGFuZGxlRU9EOihaWEVuY29kZXJDb250ZXh0ICopY29udGV4dCBidWZmZXI6KE5TTXV0YWJsZVN0cmluZyAqKWJ1ZmZlciB7CisgIEB0cnkgeworICAgIE5TVUludGVnZXIgY291bnQgPSBidWZmZXIubGVuZ3RoOworICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICByZXR1cm47IC8vQWxyZWFkeSBmaW5pc2hlZAorICAgIH0KKyAgICBpZiAoY291bnQgPT0gMSkgeworICAgICAgLy9Pbmx5IGFuIHVubGF0Y2ggYXQgdGhlIGVuZAorICAgICAgW2NvbnRleHQgdXBkYXRlU3ltYm9sSW5mb107CisgICAgICBpbnQgYXZhaWxhYmxlID0gY29udGV4dC5zeW1ib2xJbmZvLmRhdGFDYXBhY2l0eSAtIGNvbnRleHQuY29kZXdvcmRDb3VudDsKKyAgICAgIGludCByZW1haW5pbmcgPSBbY29udGV4dCByZW1haW5pbmdDaGFyYWN0ZXJzXTsKKyAgICAgIGlmIChyZW1haW5pbmcgPT0gMCAmJiBhdmFpbGFibGUgPD0gMikgeworICAgICAgICByZXR1cm47IC8vTm8gdW5sYXRjaAorICAgICAgfQorICAgIH0KKworICAgIGlmIChjb3VudCA+IDQpIHsKKyAgICAgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6QCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOkAiQ291bnQgbXVzdCBub3QgZXhjZWVkIDQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgICAgfQorICAgIGludCByZXN0Q2hhcnMgPSAoaW50KWNvdW50IC0gMTsKKyAgICBOU1N0cmluZyAqZW5jb2RlZCA9IFtzZWxmIGVuY29kZVRvQ29kZXdvcmRzOmJ1ZmZlciBzdGFydHBvczowXTsKKyAgICBCT09MIGVuZE9mU3ltYm9sUmVhY2hlZCA9ICFbY29udGV4dCBoYXNNb3JlQ2hhcmFjdGVyc107CisgICAgQk9PTCByZXN0SW5Bc2NpaSA9IGVuZE9mU3ltYm9sUmVhY2hlZCAmJiByZXN0Q2hhcnMgPD0gMjsKKworICAgIGlmIChyZXN0Q2hhcnMgPD0gMikgeworICAgICAgW2NvbnRleHQgdXBkYXRlU3ltYm9sSW5mb1dpdGhMZW5ndGg6Y29udGV4dC5jb2Rld29yZENvdW50ICsgcmVzdENoYXJzXTsKKyAgICAgIGludCBhdmFpbGFibGUgPSBjb250ZXh0LnN5bWJvbEluZm8uZGF0YUNhcGFjaXR5IC0gY29udGV4dC5jb2Rld29yZENvdW50OworICAgICAgaWYgKGF2YWlsYWJsZSA+PSAzKSB7CisgICAgICAgIHJlc3RJbkFzY2lpID0gTk87CisgICAgICAgIFtjb250ZXh0IHVwZGF0ZVN5bWJvbEluZm9XaXRoTGVuZ3RoOmNvbnRleHQuY29kZXdvcmRDb3VudCArIChpbnQpZW5jb2RlZC5sZW5ndGhdOworICAgICAgICAvL2F2YWlsYWJsZSA9IGNvbnRleHQuc3ltYm9sSW5mby5kYXRhQ2FwYWNpdHkgLSBjb250ZXh0LmNvZGV3b3JkQ291bnQ7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlc3RJbkFzY2lpKSB7CisgICAgICBbY29udGV4dCByZXNldFN5bWJvbEluZm9dOworICAgICAgY29udGV4dC5wb3MgLT0gcmVzdENoYXJzOworICAgIH0gZWxzZSB7CisgICAgICBbY29udGV4dCB3cml0ZUNvZGV3b3JkczplbmNvZGVkXTsKKyAgICB9CisgIH0gQGZpbmFsbHkgeworICAgIFtjb250ZXh0IHNpZ25hbEVuY29kZXJDaGFuZ2U6W1pYSGlnaExldmVsRW5jb2RlciBhc2NpaUVuY29kYXRpb25dXTsKKyAgfQorfQorCistICh2b2lkKWVuY29kZUNoYXI6KHVuaWNoYXIpYyBidWZmZXI6KE5TTXV0YWJsZVN0cmluZyAqKXNiIHsKKyAgaWYgKGMgPj0gJyAnICYmIGMgPD0gJz8nKSB7CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgY107CisgIH0gZWxzZSBpZiAoYyA+PSAnQCcgJiYgYyA8PSAnXicpIHsKKyAgICBbc2IgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgKGMgLSA2NCldOworICB9IGVsc2UgeworICAgIFtaWEhpZ2hMZXZlbEVuY29kZXIgaWxsZWdhbENoYXJhY3RlcjpjXTsKKyAgfQorfQorCistIChOU1N0cmluZyAqKWVuY29kZVRvQ29kZXdvcmRzOihOU011dGFibGVTdHJpbmcgKilzYiBzdGFydHBvczooaW50KXN0YXJ0UG9zIHsKKyAgaW50IGxlbiA9IChpbnQpc2IubGVuZ3RoIC0gc3RhcnRQb3M7CisgIGlmIChsZW4gPT0gMCkgeworICAgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6QCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpAIkJ1ZmZlciBtdXN0IG5vdCBiZSBlbXB0eSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgIH0KKyAgdW5pY2hhciBjMSA9IFtzYiBjaGFyYWN0ZXJBdEluZGV4OnN0YXJ0UG9zXTsKKyAgdW5pY2hhciBjMiA9IGxlbiA+PSAyID8gW3NiIGNoYXJhY3RlckF0SW5kZXg6c3RhcnRQb3MgKyAxXSA6IDA7CisgIHVuaWNoYXIgYzMgPSBsZW4gPj0gMyA/IFtzYiBjaGFyYWN0ZXJBdEluZGV4OnN0YXJ0UG9zICsgMl0gOiAwOworICB1bmljaGFyIGM0ID0gbGVuID49IDQgPyBbc2IgY2hhcmFjdGVyQXRJbmRleDpzdGFydFBvcyArIDNdIDogMDsKKworICBpbnQgdiA9IChjMSA8PCAxOCkgKyAoYzIgPDwgMTIpICsgKGMzIDw8IDYpICsgYzQ7CisgIHVuaWNoYXIgY3cxID0gKHVuaWNoYXIpICgodiA+PiAxNikgJiAyNTUpOworICB1bmljaGFyIGN3MiA9ICh1bmljaGFyKSAoKHYgPj4gOCkgJiAyNTUpOworICB1bmljaGFyIGN3MyA9ICh1bmljaGFyKSAodiAmIDI1NSk7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6M107CisgIFtyZXMgYXBwZW5kRm9ybWF0OkAiJUMiLCBjdzFdOworICBpZiAobGVuID49IDIpIHsKKyAgICBbcmVzIGFwcGVuZEZvcm1hdDpAIiVDIiwgY3cyXTsKKyAgfQorICBpZiAobGVuID49IDMpIHsKKyAgICBbcmVzIGFwcGVuZEZvcm1hdDpAIiVDIiwgY3czXTsKKyAgfQorICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhTdHJpbmc6cmVzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEVuY29kZXJDb250ZXh0LmggYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYRW5jb2RlckNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODM5ODM5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEVuY29kZXJDb250ZXh0LmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGNsYXNzIFpYRGltZW5zaW9uLCBaWFN5bWJvbEluZm8sIFpYU3ltYm9sU2hhcGVIaW50OworCitAaW50ZXJmYWNlIFpYRW5jb2RlckNvbnRleHQgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNNdXRhYmxlU3RyaW5nICpjb2Rld29yZHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbmV3RW5jb2Rpbmc7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgcG9zOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IHNraXBBdEVuZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYU3ltYm9sU2hhcGVIaW50ICpzeW1ib2xTaGFwZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYU3ltYm9sSW5mbyAqc3ltYm9sSW5mbzsKKworLSAoaWQpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1zZzsKKy0gKHZvaWQpc2V0U2l6ZUNvbnN0cmFpbnRzOihaWERpbWVuc2lvbiAqKW1pblNpemUgbWF4U2l6ZTooWlhEaW1lbnNpb24gKiltYXhTaXplOworLSAodm9pZClzZXRTa2lwQXRFbmQ6KGludCljb3VudDsKKy0gKHVuaWNoYXIpY3VycmVudENoYXI7CistICh1bmljaGFyKWN1cnJlbnQ7CistICh2b2lkKXdyaXRlQ29kZXdvcmRzOihOU1N0cmluZyAqKWNvZGV3b3JkczsKKy0gKHZvaWQpd3JpdGVDb2Rld29yZDoodW5pY2hhciljb2Rld29yZDsKKy0gKGludCljb2Rld29yZENvdW50OworLSAodm9pZClzaWduYWxFbmNvZGVyQ2hhbmdlOihpbnQpZW5jb2Rpbmc7CistICh2b2lkKXJlc2V0RW5jb2RlclNpZ25hbDsKKy0gKEJPT0wpaGFzTW9yZUNoYXJhY3RlcnM7CistIChpbnQpdG90YWxNZXNzYWdlQ2hhckNvdW50OworLSAoaW50KXJlbWFpbmluZ0NoYXJhY3RlcnM7CistICh2b2lkKXVwZGF0ZVN5bWJvbEluZm87CistICh2b2lkKXVwZGF0ZVN5bWJvbEluZm9XaXRoTGVuZ3RoOihpbnQpbGVuOworLSAodm9pZClyZXNldFN5bWJvbEluZm87CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhFbmNvZGVyQ29udGV4dC5tIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEVuY29kZXJDb250ZXh0Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJiYWM2OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhFbmNvZGVyQ29udGV4dC5tCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEVuY29kZXJDb250ZXh0LmgiCisjaW1wb3J0ICJaWFN5bWJvbEluZm8uaCIKKyNpbXBvcnQgIlpYU3ltYm9sU2hhcGVIaW50LmgiCisKK0BpbnRlcmZhY2UgWlhFbmNvZGVyQ29udGV4dCAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWERpbWVuc2lvbiAqbWF4U2l6ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYRGltZW5zaW9uICptaW5TaXplOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEVuY29kZXJDb250ZXh0CisKKy0gKGlkKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltc2cgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIC8vRnJvbSB0aGlzIHBvaW50IG9uIFN0cmluZ3MgYXJlIG5vdCBVbmljb2RlIGFueW1vcmUhCisgICAgTlNEYXRhICptc2dEYXRhID0gW21zZyBkYXRhVXNpbmdFbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXTsKKyAgICBpZiAoIW1zZ0RhdGEpIHsKKyAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJNZXNzYWdlIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSBJU08tODg1OS0xIGVuY29kaW5nLiJdOworICAgIH0KKyAgICBjb25zdCBjaGFyICptc2dCaW5hcnkgPSBbbXNnRGF0YSBieXRlc107CisgICAgTlNNdXRhYmxlU3RyaW5nICpzYiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgICBmb3IgKGludCBpID0gMCwgYyA9IChpbnQpbXNnLmxlbmd0aDsgaSA8IGM7IGkrKykgeworICAgICAgdW5pY2hhciBjaCA9ICh1bmljaGFyKSAobXNnQmluYXJ5W2ldICYgMHhmZik7CisgICAgICBbc2IgYXBwZW5kRm9ybWF0OkAiJUMiLCBjaF07CisgICAgfQorCisgICAgX21lc3NhZ2UgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpzYl07CisgICAgX3N5bWJvbFNoYXBlID0gW1pYU3ltYm9sU2hhcGVIaW50IGZvcmNlTm9uZV07CisgICAgX2NvZGV3b3JkcyA9IFtbTlNNdXRhYmxlU3RyaW5nIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om1zZy5sZW5ndGhdOworICAgIF9uZXdFbmNvZGluZyA9IC0xOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0U2l6ZUNvbnN0cmFpbnRzOihaWERpbWVuc2lvbiAqKW1pblNpemUgbWF4U2l6ZTooWlhEaW1lbnNpb24gKiltYXhTaXplIHsKKyAgc2VsZi5taW5TaXplID0gbWluU2l6ZTsKKyAgc2VsZi5tYXhTaXplID0gbWF4U2l6ZTsKK30KKworLSAodW5pY2hhciljdXJyZW50Q2hhciB7CisgIHJldHVybiBbc2VsZi5tZXNzYWdlIGNoYXJhY3RlckF0SW5kZXg6c2VsZi5wb3NdOworfQorCistICh1bmljaGFyKWN1cnJlbnQgeworICByZXR1cm4gW3NlbGYubWVzc2FnZSBjaGFyYWN0ZXJBdEluZGV4OnNlbGYucG9zXTsKK30KKworLSAodm9pZCl3cml0ZUNvZGV3b3JkczooTlNTdHJpbmcgKiljb2Rld29yZHMgeworICBbc2VsZi5jb2Rld29yZHMgYXBwZW5kU3RyaW5nOmNvZGV3b3Jkc107Cit9CisKKy0gKHZvaWQpd3JpdGVDb2Rld29yZDoodW5pY2hhciljb2Rld29yZCB7CisgIFtzZWxmLmNvZGV3b3JkcyBhcHBlbmRGb3JtYXQ6QCIlQyIsIGNvZGV3b3JkXTsKK30KKworLSAoaW50KWNvZGV3b3JkQ291bnQgeworICByZXR1cm4gKGludClzZWxmLmNvZGV3b3Jkcy5sZW5ndGg7Cit9CisKKy0gKHZvaWQpc2lnbmFsRW5jb2RlckNoYW5nZTooaW50KWVuY29kaW5nIHsKKyAgc2VsZi5uZXdFbmNvZGluZyA9IGVuY29kaW5nOworfQorCistICh2b2lkKXJlc2V0RW5jb2RlclNpZ25hbCB7CisgIHNlbGYubmV3RW5jb2RpbmcgPSAtMTsKK30KKworLSAoQk9PTCloYXNNb3JlQ2hhcmFjdGVycyB7CisgIHJldHVybiBzZWxmLnBvcyA8IFtzZWxmIHRvdGFsTWVzc2FnZUNoYXJDb3VudF07Cit9CisKKy0gKGludCl0b3RhbE1lc3NhZ2VDaGFyQ291bnQgeworICByZXR1cm4gKGludClzZWxmLm1lc3NhZ2UubGVuZ3RoIC0gc2VsZi5za2lwQXRFbmQ7Cit9CisKKy0gKGludClyZW1haW5pbmdDaGFyYWN0ZXJzIHsKKyAgcmV0dXJuIFtzZWxmIHRvdGFsTWVzc2FnZUNoYXJDb3VudF0gLSBzZWxmLnBvczsKK30KKworLSAodm9pZCl1cGRhdGVTeW1ib2xJbmZvIHsKKyAgW3NlbGYgdXBkYXRlU3ltYm9sSW5mb1dpdGhMZW5ndGg6W3NlbGYgY29kZXdvcmRDb3VudF1dOworfQorCistICh2b2lkKXVwZGF0ZVN5bWJvbEluZm9XaXRoTGVuZ3RoOihpbnQpbGVuIHsKKyAgaWYgKHNlbGYuc3ltYm9sSW5mbyA9PSBuaWwgfHwgbGVuID4gc2VsZi5zeW1ib2xJbmZvLmRhdGFDYXBhY2l0eSkgeworICAgIHNlbGYuc3ltYm9sSW5mbyA9IFtaWFN5bWJvbEluZm8gbG9va3VwOmxlbiBzaGFwZTpzZWxmLnN5bWJvbFNoYXBlIG1pblNpemU6c2VsZi5taW5TaXplIG1heFNpemU6c2VsZi5tYXhTaXplIGZhaWw6WUVTXTsKKyAgfQorfQorCistICh2b2lkKXJlc2V0U3ltYm9sSW5mbyB7CisgIHNlbGYuc3ltYm9sSW5mbyA9IG5pbDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEhpZ2hMZXZlbEVuY29kZXIuaCBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhIaWdoTGV2ZWxFbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJjMzNlMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhIaWdoTGV2ZWxFbmNvZGVyLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogRGF0YU1hdHJpeCBFQ0MgMjAwIGRhdGEgZW5jb2RlciBmb2xsb3dpbmcgdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgaW4gSVNPL0lFQyAxNjAyMjoyMDAoRSkgaW4KKyAqIGFubmV4IFMuCisgKi8KKworQGNsYXNzIFpYRGltZW5zaW9uLCBaWFN5bWJvbFNoYXBlSGludDsKKworQGludGVyZmFjZSBaWEhpZ2hMZXZlbEVuY29kZXIgOiBOU09iamVjdAorCisvKioKKyAqIG1vZGUgbGF0Y2ggdG8gQzQwIGVuY29kYXRpb24gbW9kZQorICovCisrICh1bmljaGFyKWxhdGNoVG9DNDA7CisKKy8qKgorICogbW9kZSBsYXRjaCB0byBCYXNlIDI1NiBlbmNvZGF0aW9uIG1vZGUKKyAqLworKyAodW5pY2hhcilsYXRjaFRvQmFzZTI1NjsKKworLyoqCisgKiBVcHBlciBTaGlmdAorICovCisrICh1bmljaGFyKXVwcGVyU2hpZnQ7CisKKy8qKgorICogMDUgTWFjcm8KKyAqLworKyAodW5pY2hhciltYWNybzA1OworCisvKioKKyAqIDA2IE1hY3JvCisgKi8KKysgKHVuaWNoYXIpbWFjcm8wNjsKKworLyoqCisgKiBtb2RlIGxhdGNoIHRvIEFOU0kgWC4xMiBlbmNvZGF0aW9uIG1vZGUKKyAqLworKyAodW5pY2hhcilsYXRjaFRvQW5zaVgxMjsKKworLyoqCisgKiBtb2RlIGxhdGNoIHRvIFRleHQgZW5jb2RhdGlvbiBtb2RlCisgKi8KKworKyAodW5pY2hhcilsYXRjaFRvVGV4dDsKKworLyoqCisgKiBtb2RlIGxhdGNoIHRvIEVESUZBQ1QgZW5jb2RhdGlvbiBtb2RlCisgKi8KKysgKHVuaWNoYXIpbGF0Y2hUb0VkaWZhY3Q7CisKKy8qKgorICogVW5sYXRjaCBmcm9tIEM0MCBlbmNvZGF0aW9uCisgKi8KKysgKHVuaWNoYXIpYzQwVW5sYXRjaDsKKworLyoqCisgKiBVbmxhdGNoIGZyb20gWDEyIGVuY29kYXRpb24KKyAqLworKyAodW5pY2hhcil4MTJVbmxhdGNoOworCisrIChpbnQpYXNjaWlFbmNvZGF0aW9uOworKyAoaW50KWM0MEVuY29kYXRpb247CisrIChpbnQpdGV4dEVuY29kYXRpb247CisrIChpbnQpeDEyRW5jb2RhdGlvbjsKKysgKGludCllZGlmYWN0RW5jb2RhdGlvbjsKKysgKGludCliYXNlMjU2RW5jb2RhdGlvbjsKKworLyoqCisgKiBDb252ZXJ0cyB0aGUgbWVzc2FnZSB0byBhIGJ5dGUgYXJyYXkgdXNpbmcgdGhlIGRlZmF1bHQgZW5jb2RpbmcgKGNwNDM3KSBhcyBkZWZpbmVkIGJ5IHRoZQorICogc3BlY2lmaWNhdGlvbgorICovCisrIChpbnQ4X3QgKilieXRlc0Zvck1lc3NhZ2U6KE5TU3RyaW5nICopbXNnOworCisvKioKKyAqIFBlcmZvcm1zIG1lc3NhZ2UgZW5jb2Rpbmcgb2YgYSBEYXRhTWF0cml4IG1lc3NhZ2UgdXNpbmcgdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgaW4gYW5uZXggUAorICogb2YgSVNPL0lFQyAxNjAyMjoyMDAwKEUpLgorICovCisrIChOU1N0cmluZyAqKWVuY29kZUhpZ2hMZXZlbDooTlNTdHJpbmcgKiltc2c7CisKKy8qKgorICogUGVyZm9ybXMgbWVzc2FnZSBlbmNvZGluZyBvZiBhIERhdGFNYXRyaXggbWVzc2FnZSB1c2luZyB0aGUgYWxnb3JpdGhtIGRlc2NyaWJlZCBpbiBhbm5leCBQCisgKiBvZiBJU08vSUVDIDE2MDIyOjIwMDAoRSkuCisgKi8KKysgKE5TU3RyaW5nICopZW5jb2RlSGlnaExldmVsOihOU1N0cmluZyAqKW1zZyBzaGFwZTooWlhTeW1ib2xTaGFwZUhpbnQgKilzaGFwZQorICAgICAgICAgICAgICAgICAgICAgIG1pblNpemU6KFpYRGltZW5zaW9uICopbWluU2l6ZSBtYXhTaXplOihaWERpbWVuc2lvbiAqKW1heFNpemU7CisKKysgKGludClsb29rQWhlYWRUZXN0OihOU1N0cmluZyAqKW1zZyBzdGFydHBvczooaW50KXN0YXJ0cG9zIGN1cnJlbnRNb2RlOihpbnQpY3VycmVudE1vZGU7CisKKy8qKgorICogRGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGNoYXJhY3RlcnMgdGhhdCBhcmUgZW5jb2RhYmxlIHVzaW5nIG51bWVyaWMgY29tcGFjdGlvbi4KKyAqLworKyAoaW50KWRldGVybWluZUNvbnNlY3V0aXZlRGlnaXRDb3VudDooTlNTdHJpbmcgKiltc2cgc3RhcnRwb3M6KGludClzdGFydHBvczsKKworKyAoQk9PTClpc0RpZ2l0Oih1bmljaGFyKWNoOworKyAoQk9PTClpc0V4dGVuZGVkQVNDSUk6KHVuaWNoYXIpY2g7CisKKysgKHZvaWQpaWxsZWdhbENoYXJhY3RlcjoodW5pY2hhciljOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYSGlnaExldmVsRW5jb2Rlci5tIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEhpZ2hMZXZlbEVuY29kZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjkxODNkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEhpZ2hMZXZlbEVuY29kZXIubQpAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBU0NJSUVuY29kZXIuaCIKKyNpbXBvcnQgIlpYQmFzZTI1NkVuY29kZXIuaCIKKyNpbXBvcnQgIlpYQzQwRW5jb2Rlci5oIgorI2ltcG9ydCAiWlhFZGlmYWN0RW5jb2Rlci5oIgorI2ltcG9ydCAiWlhFbmNvZGVyQ29udGV4dC5oIgorI2ltcG9ydCAiWlhIaWdoTGV2ZWxFbmNvZGVyLmgiCisjaW1wb3J0ICJaWFN5bWJvbEluZm8uaCIKKyNpbXBvcnQgIlpYU3ltYm9sU2hhcGVIaW50LmgiCisjaW1wb3J0ICJaWFRleHRFbmNvZGVyLmgiCisjaW1wb3J0ICJaWFgxMkVuY29kZXIuaCIKKworLyoqCisgKiBQYWRkaW5nIGNoYXJhY3RlcgorICovCitjb25zdCB1bmljaGFyIFBBRF9DSEFSID0gMTI5OworCisvKioKKyAqIDA1IE1hY3JvIGhlYWRlcgorICovCitzdGF0aWMgTlNTdHJpbmcgKk1BQ1JPXzA1X0hFQURFUiA9IG5pbDsKKworLyoqCisgKiAwNiBNYWNybyBoZWFkZXIKKyAqLworc3RhdGljIE5TU3RyaW5nICpNQUNST18wNl9IRUFERVIgPSBuaWw7CisKKy8qKgorICogTWFjcm8gdHJhaWxlcgorICovCitzdGF0aWMgTlNTdHJpbmcgKk1BQ1JPX1RSQUlMRVIgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBaWEhpZ2hMZXZlbEVuY29kZXIKKworKyAodm9pZClpbml0aWFsaXplIHsKKyAgTUFDUk9fMDVfSEVBREVSID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhGb3JtYXQ6QCJbKT4lQzA1JUMiLCAodW5pY2hhcikweDAwMUUsICh1bmljaGFyKTB4MDAxRF07CisgIE1BQ1JPXzA2X0hFQURFUiA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRm9ybWF0OkAiWyk+JUMwNiVDIiwgKHVuaWNoYXIpMHgwMDFFLCAodW5pY2hhcikweDAwMURdOworICBNQUNST19UUkFJTEVSID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhGb3JtYXQ6QCIlQyVDIiwgKHVuaWNoYXIpMHgwMDFFLCAodW5pY2hhcikweDAwMDRdOworfQorCisrICh1bmljaGFyKWxhdGNoVG9DNDAgeworICByZXR1cm4gMjMwOworfQorCisrICh1bmljaGFyKWxhdGNoVG9CYXNlMjU2IHsKKyAgcmV0dXJuIDIzMTsKK30KKworKyAodW5pY2hhcil1cHBlclNoaWZ0IHsKKyAgcmV0dXJuIDIzNTsKK30KKworKyAodW5pY2hhciltYWNybzA1IHsKKyAgcmV0dXJuIDIzNjsKK30KKworKyAodW5pY2hhciltYWNybzA2IHsKKyAgcmV0dXJuIDIzNzsKK30KKworKyAodW5pY2hhcilsYXRjaFRvQW5zaVgxMiB7CisgIHJldHVybiAyMzg7Cit9CisKKysgKHVuaWNoYXIpbGF0Y2hUb1RleHQgeworICByZXR1cm4gMjM5OworfQorCisrICh1bmljaGFyKWxhdGNoVG9FZGlmYWN0IHsKKyAgcmV0dXJuIDI0MDsKK30KKworKyAodW5pY2hhciljNDBVbmxhdGNoIHsKKyAgcmV0dXJuIDI1NDsKK30KKworKyAodW5pY2hhcil4MTJVbmxhdGNoIHsKKyAgcmV0dXJuIDI1NDsKK30KKworKyAoaW50KWFzY2lpRW5jb2RhdGlvbiB7CisgIHJldHVybiAwOworfQorCisrIChpbnQpYzQwRW5jb2RhdGlvbiB7CisgIHJldHVybiAxOworfQorCisrIChpbnQpdGV4dEVuY29kYXRpb24geworICByZXR1cm4gMjsKK30KKworKyAoaW50KXgxMkVuY29kYXRpb24geworICByZXR1cm4gMzsKK30KKworKyAoaW50KWVkaWZhY3RFbmNvZGF0aW9uIHsKKyAgcmV0dXJuIDQ7Cit9CisKKysgKGludCliYXNlMjU2RW5jb2RhdGlvbiB7CisgIHJldHVybiA1OworfQorCisrIChpbnQ4X3QgKilieXRlc0Zvck1lc3NhZ2U6KE5TU3RyaW5nICopbXNnIHsKKyAgcmV0dXJuIChpbnQ4X3QgKilbW21zZyBkYXRhVXNpbmdFbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZykgMHg4MDAwMDQwMF0gYnl0ZXNdOyAvL1NlZSA0LjQuMyBhbmQgYW5uZXggQiBvZiBJU08vSUVDIDE1NDM4OjIwMDEoRSkKK30KKworKyAodW5pY2hhcilyYW5kb21pemUyNTNTdGF0ZToodW5pY2hhciljaCBjb2Rld29yZFBvc2l0aW9uOihpbnQpY29kZXdvcmRQb3NpdGlvbiB7CisgIGludCBwc2V1ZG9SYW5kb20gPSAoKDE0OSAqIGNvZGV3b3JkUG9zaXRpb24pICUgMjUzKSArIDE7CisgIGludCB0ZW1wVmFyaWFibGUgPSBjaCArIHBzZXVkb1JhbmRvbTsKKyAgcmV0dXJuIHRlbXBWYXJpYWJsZSA8PSAyNTQgPyAodW5pY2hhcikgdGVtcFZhcmlhYmxlIDogKHVuaWNoYXIpICh0ZW1wVmFyaWFibGUgLSAyNTQpOworfQorCisrIChOU1N0cmluZyAqKWVuY29kZUhpZ2hMZXZlbDooTlNTdHJpbmcgKiltc2cgeworICByZXR1cm4gW3NlbGYgZW5jb2RlSGlnaExldmVsOm1zZyBzaGFwZTpbWlhTeW1ib2xTaGFwZUhpbnQgZm9yY2VOb25lXSBtaW5TaXplOm5pbCBtYXhTaXplOm5pbF07Cit9CisKKysgKE5TU3RyaW5nICopZW5jb2RlSGlnaExldmVsOihOU1N0cmluZyAqKW1zZyBzaGFwZTooWlhTeW1ib2xTaGFwZUhpbnQgKilzaGFwZQorICAgICAgICAgICAgICAgICAgICAgIG1pblNpemU6KFpYRGltZW5zaW9uICopbWluU2l6ZSBtYXhTaXplOihaWERpbWVuc2lvbiAqKW1heFNpemUgeworICAvL3RoZSBjb2Rld29yZHMgMC4uMjU1IGFyZSBlbmNvZGVkIGFzIFVuaWNvZGUgY2hhcmFjdGVycworICBOU0FycmF5ICplbmNvZGVycyA9IEBbW1taWEFTQ0lJRW5jb2RlciBhbGxvY10gaW5pdF0sCisgICAgICAgICAgICAgICAgICAgICAgICBbW1pYQzQwRW5jb2RlciBhbGxvY10gaW5pdF0sCisgICAgICAgICAgICAgICAgICAgICAgICBbW1pYVGV4dEVuY29kZXIgYWxsb2NdIGluaXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgW1taWFgxMkVuY29kZXIgYWxsb2NdIGluaXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgW1taWEVkaWZhY3RFbmNvZGVyIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFtbWlhCYXNlMjU2RW5jb2RlciBhbGxvY10gaW5pdF1dOworCisgIFpYRW5jb2RlckNvbnRleHQgKmNvbnRleHQgPSBbW1pYRW5jb2RlckNvbnRleHQgYWxsb2NdIGluaXRXaXRoTWVzc2FnZTptc2ddOworICBjb250ZXh0LnN5bWJvbFNoYXBlID0gc2hhcGU7CisgIFtjb250ZXh0IHNldFNpemVDb25zdHJhaW50czptaW5TaXplIG1heFNpemU6bWF4U2l6ZV07CisKKyAgaWYgKFttc2cgaGFzUHJlZml4Ok1BQ1JPXzA1X0hFQURFUl0gJiYgW21zZyBoYXNTdWZmaXg6TUFDUk9fVFJBSUxFUl0pIHsKKyAgICBbY29udGV4dCB3cml0ZUNvZGV3b3JkOltzZWxmIG1hY3JvMDVdXTsKKyAgICBbY29udGV4dCBzZXRTa2lwQXRFbmQ6Ml07CisgICAgY29udGV4dC5wb3MgKz0gTUFDUk9fMDVfSEVBREVSLmxlbmd0aDsKKyAgfSBlbHNlIGlmIChbbXNnIGhhc1ByZWZpeDpNQUNST18wNl9IRUFERVJdICYmIFttc2cgaGFzU3VmZml4Ok1BQ1JPX1RSQUlMRVJdKSB7CisgICAgW2NvbnRleHQgd3JpdGVDb2Rld29yZDpbc2VsZiBtYWNybzA2XV07CisgICAgW2NvbnRleHQgc2V0U2tpcEF0RW5kOjJdOworICAgIGNvbnRleHQucG9zICs9IE1BQ1JPXzA2X0hFQURFUi5sZW5ndGg7CisgIH0KKworICBpbnQgZW5jb2RpbmdNb2RlID0gW3NlbGYgYXNjaWlFbmNvZGF0aW9uXTsgLy9EZWZhdWx0IG1vZGUKKyAgd2hpbGUgKFtjb250ZXh0IGhhc01vcmVDaGFyYWN0ZXJzXSkgeworICAgIFtlbmNvZGVyc1tlbmNvZGluZ01vZGVdIGVuY29kZTpjb250ZXh0XTsKKyAgICBpZiAoY29udGV4dC5uZXdFbmNvZGluZyA+PSAwKSB7CisgICAgICBlbmNvZGluZ01vZGUgPSBjb250ZXh0Lm5ld0VuY29kaW5nOworICAgICAgW2NvbnRleHQgcmVzZXRFbmNvZGVyU2lnbmFsXTsKKyAgICB9CisgIH0KKyAgTlNVSW50ZWdlciBsZW4gPSBjb250ZXh0LmNvZGV3b3Jkcy5sZW5ndGg7CisgIFtjb250ZXh0IHVwZGF0ZVN5bWJvbEluZm9dOworICBpbnQgY2FwYWNpdHkgPSBjb250ZXh0LnN5bWJvbEluZm8uZGF0YUNhcGFjaXR5OworICBpZiAobGVuIDwgY2FwYWNpdHkpIHsKKyAgICBpZiAoZW5jb2RpbmdNb2RlICE9IFtzZWxmIGFzY2lpRW5jb2RhdGlvbl0gJiYgZW5jb2RpbmdNb2RlICE9IFtzZWxmIGJhc2UyNTZFbmNvZGF0aW9uXSkgeworICAgICAgW2NvbnRleHQgd3JpdGVDb2Rld29yZDoodW5pY2hhcikweDAwZmVdOyAvL1VubGF0Y2ggKDI1NCkKKyAgICB9CisgIH0KKyAgLy9QYWRkaW5nCisgIE5TTXV0YWJsZVN0cmluZyAqY29kZXdvcmRzID0gY29udGV4dC5jb2Rld29yZHM7CisgIGlmIChjb2Rld29yZHMubGVuZ3RoIDwgY2FwYWNpdHkpIHsKKyAgICBbY29kZXdvcmRzIGFwcGVuZEZvcm1hdDpAIiVDIiwgUEFEX0NIQVJdOworICB9CisgIHdoaWxlIChjb2Rld29yZHMubGVuZ3RoIDwgY2FwYWNpdHkpIHsKKyAgICBbY29kZXdvcmRzIGFwcGVuZEZvcm1hdDpAIiVDIiwgW3NlbGYgcmFuZG9taXplMjUzU3RhdGU6UEFEX0NIQVIgY29kZXdvcmRQb3NpdGlvbjooaW50KWNvZGV3b3Jkcy5sZW5ndGggKyAxXV07CisgIH0KKworICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhTdHJpbmc6Y29udGV4dC5jb2Rld29yZHNdOworfQorCisrIChpbnQpbG9va0FoZWFkVGVzdDooTlNTdHJpbmcgKiltc2cgc3RhcnRwb3M6KGludClzdGFydHBvcyBjdXJyZW50TW9kZTooaW50KWN1cnJlbnRNb2RlIHsKKyAgaWYgKHN0YXJ0cG9zID49IG1zZy5sZW5ndGgpIHsKKyAgICByZXR1cm4gY3VycmVudE1vZGU7CisgIH0KKyAgZmxvYXQgY2hhckNvdW50c1s2XTsKKyAgLy9zdGVwIEoKKyAgaWYgKGN1cnJlbnRNb2RlID09IFtzZWxmIGFzY2lpRW5jb2RhdGlvbl0pIHsKKyAgICBjaGFyQ291bnRzWzBdID0gMDsKKyAgICBjaGFyQ291bnRzWzFdID0gMTsKKyAgICBjaGFyQ291bnRzWzJdID0gMTsKKyAgICBjaGFyQ291bnRzWzNdID0gMTsKKyAgICBjaGFyQ291bnRzWzRdID0gMTsKKyAgICBjaGFyQ291bnRzWzVdID0gMS4yNWY7CisgIH0gZWxzZSB7CisgICAgY2hhckNvdW50c1swXSA9IDE7CisgICAgY2hhckNvdW50c1sxXSA9IDI7CisgICAgY2hhckNvdW50c1syXSA9IDI7CisgICAgY2hhckNvdW50c1szXSA9IDI7CisgICAgY2hhckNvdW50c1s0XSA9IDI7CisgICAgY2hhckNvdW50c1s1XSA9IDIuMjVmOworICAgIGNoYXJDb3VudHNbY3VycmVudE1vZGVdID0gMDsKKyAgfQorCisgIGludCBjaGFyc1Byb2Nlc3NlZCA9IDA7CisgIHdoaWxlIChZRVMpIHsKKyAgICAvL3N0ZXAgSworICAgIGlmICgoc3RhcnRwb3MgKyBjaGFyc1Byb2Nlc3NlZCkgPT0gbXNnLmxlbmd0aCkgeworICAgICAgaW50IG1pbiA9IElOVF9NQVg7CisgICAgICBpbnQ4X3QgbWluc1s2XTsKKyAgICAgIGludCBpbnRDaGFyQ291bnRzWzZdOworICAgICAgbWluID0gW3NlbGYgZmluZE1pbmltdW1zOmNoYXJDb3VudHMgaW50Q2hhckNvdW50czppbnRDaGFyQ291bnRzIG1pbjptaW4gbWluczptaW5zXTsKKyAgICAgIGludCBtaW5Db3VudCA9IFtzZWxmIG1pbmltdW1Db3VudDptaW5zXTsKKworICAgICAgaWYgKGludENoYXJDb3VudHNbW3NlbGYgYXNjaWlFbmNvZGF0aW9uXV0gPT0gbWluKSB7CisgICAgICAgIHJldHVybiBbc2VsZiBhc2NpaUVuY29kYXRpb25dOworICAgICAgfQorICAgICAgaWYgKG1pbkNvdW50ID09IDEgJiYgbWluc1tbc2VsZiBiYXNlMjU2RW5jb2RhdGlvbl1dID4gMCkgeworICAgICAgICByZXR1cm4gW3NlbGYgYmFzZTI1NkVuY29kYXRpb25dOworICAgICAgfQorICAgICAgaWYgKG1pbkNvdW50ID09IDEgJiYgbWluc1tbc2VsZiBlZGlmYWN0RW5jb2RhdGlvbl1dID4gMCkgeworICAgICAgICByZXR1cm4gW3NlbGYgZWRpZmFjdEVuY29kYXRpb25dOworICAgICAgfQorICAgICAgaWYgKG1pbkNvdW50ID09IDEgJiYgbWluc1tbc2VsZiB0ZXh0RW5jb2RhdGlvbl1dID4gMCkgeworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dEVuY29kYXRpb25dOworICAgICAgfQorICAgICAgaWYgKG1pbkNvdW50ID09IDEgJiYgbWluc1tbc2VsZiB4MTJFbmNvZGF0aW9uXV0gPiAwKSB7CisgICAgICAgIHJldHVybiBbc2VsZiB4MTJFbmNvZGF0aW9uXTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBbc2VsZiBjNDBFbmNvZGF0aW9uXTsKKyAgICB9CisKKyAgICB1bmljaGFyIGMgPSBbbXNnIGNoYXJhY3RlckF0SW5kZXg6c3RhcnRwb3MgKyBjaGFyc1Byb2Nlc3NlZF07CisgICAgY2hhcnNQcm9jZXNzZWQrKzsKKworICAgIC8vc3RlcCBMCisgICAgaWYgKFtzZWxmIGlzRGlnaXQ6Y10pIHsKKyAgICAgIGNoYXJDb3VudHNbW3NlbGYgYXNjaWlFbmNvZGF0aW9uXV0gKz0gMC41OworICAgIH0gZWxzZSBpZiAoW3NlbGYgaXNFeHRlbmRlZEFTQ0lJOmNdKSB7CisgICAgICBjaGFyQ291bnRzW1tzZWxmIGFzY2lpRW5jb2RhdGlvbl1dID0gKGludCkgY2VpbChjaGFyQ291bnRzW1tzZWxmIGFzY2lpRW5jb2RhdGlvbl1dKTsKKyAgICAgIGNoYXJDb3VudHNbW3NlbGYgYXNjaWlFbmNvZGF0aW9uXV0gKz0gMjsKKyAgICB9IGVsc2UgeworICAgICAgY2hhckNvdW50c1tbc2VsZiBhc2NpaUVuY29kYXRpb25dXSA9IChpbnQpIGNlaWwoY2hhckNvdW50c1tbc2VsZiBhc2NpaUVuY29kYXRpb25dXSk7CisgICAgICBjaGFyQ291bnRzW1tzZWxmIGFzY2lpRW5jb2RhdGlvbl1dKys7CisgICAgfQorCisgICAgLy9zdGVwIE0KKyAgICBpZiAoW3NlbGYgaXNOYXRpdmVDNDA6Y10pIHsKKyAgICAgIGNoYXJDb3VudHNbW3NlbGYgYzQwRW5jb2RhdGlvbl1dICs9IDIuMGYgLyAzLjBmOworICAgIH0gZWxzZSBpZiAoW3NlbGYgaXNFeHRlbmRlZEFTQ0lJOmNdKSB7CisgICAgICBjaGFyQ291bnRzW1tzZWxmIGM0MEVuY29kYXRpb25dXSArPSA4LjBmIC8gMy4wZjsKKyAgICB9IGVsc2UgeworICAgICAgY2hhckNvdW50c1tbc2VsZiBjNDBFbmNvZGF0aW9uXV0gKz0gNC4wZiAvIDMuMGY7CisgICAgfQorCisgICAgLy9zdGVwIE4KKyAgICBpZiAoW3NlbGYgaXNOYXRpdmVUZXh0OmNdKSB7CisgICAgICBjaGFyQ291bnRzW1tzZWxmIHRleHRFbmNvZGF0aW9uXV0gKz0gMi4wZiAvIDMuMGY7CisgICAgfSBlbHNlIGlmIChbc2VsZiBpc0V4dGVuZGVkQVNDSUk6Y10pIHsKKyAgICAgIGNoYXJDb3VudHNbW3NlbGYgdGV4dEVuY29kYXRpb25dXSArPSA4LjBmIC8gMy4wZjsKKyAgICB9IGVsc2UgeworICAgICAgY2hhckNvdW50c1tbc2VsZiB0ZXh0RW5jb2RhdGlvbl1dICs9IDQuMGYgLyAzLjBmOworICAgIH0KKworICAgIC8vc3RlcCBPCisgICAgaWYgKFtzZWxmIGlzTmF0aXZlWDEyOmNdKSB7CisgICAgICBjaGFyQ291bnRzW1tzZWxmIHgxMkVuY29kYXRpb25dXSArPSAyLjBmIC8gMy4wZjsKKyAgICB9IGVsc2UgaWYgKFtzZWxmIGlzRXh0ZW5kZWRBU0NJSTpjXSkgeworICAgICAgY2hhckNvdW50c1tbc2VsZiB4MTJFbmNvZGF0aW9uXV0gKz0gMTMuMGYgLyAzLjBmOworICAgIH0gZWxzZSB7CisgICAgICBjaGFyQ291bnRzW1tzZWxmIHgxMkVuY29kYXRpb25dXSArPSAxMC4wZiAvIDMuMGY7CisgICAgfQorCisgICAgLy9zdGVwIFAKKyAgICBpZiAoW3NlbGYgaXNOYXRpdmVFRElGQUNUOmNdKSB7CisgICAgICBjaGFyQ291bnRzW1tzZWxmIGVkaWZhY3RFbmNvZGF0aW9uXV0gKz0gMy4wZiAvIDQuMGY7CisgICAgfSBlbHNlIGlmIChbc2VsZiBpc0V4dGVuZGVkQVNDSUk6Y10pIHsKKyAgICAgIGNoYXJDb3VudHNbW3NlbGYgZWRpZmFjdEVuY29kYXRpb25dXSArPSAxNy4wZiAvIDQuMGY7CisgICAgfSBlbHNlIHsKKyAgICAgIGNoYXJDb3VudHNbW3NlbGYgZWRpZmFjdEVuY29kYXRpb25dXSArPSAxMy4wZiAvIDQuMGY7CisgICAgfQorCisgICAgLy8gc3RlcCBRCisgICAgaWYgKFtzZWxmIGlzU3BlY2lhbEIyNTY6Y10pIHsKKyAgICAgIGNoYXJDb3VudHNbW3NlbGYgYmFzZTI1NkVuY29kYXRpb25dXSArPSA0OworICAgIH0gZWxzZSB7CisgICAgICBjaGFyQ291bnRzW1tzZWxmIGJhc2UyNTZFbmNvZGF0aW9uXV0rKzsKKyAgICB9CisKKyAgICAvL3N0ZXAgUgorICAgIGlmIChjaGFyc1Byb2Nlc3NlZCA+PSA0KSB7CisgICAgICBpbnQgaW50Q2hhckNvdW50c1s2XTsKKyAgICAgIGludDhfdCBtaW5zWzZdOworICAgICAgW3NlbGYgZmluZE1pbmltdW1zOmNoYXJDb3VudHMgaW50Q2hhckNvdW50czppbnRDaGFyQ291bnRzIG1pbjpJTlRfTUFYIG1pbnM6bWluc107CisgICAgICBpbnQgbWluQ291bnQgPSBbc2VsZiBtaW5pbXVtQ291bnQ6bWluc107CisKKyAgICAgIGlmIChpbnRDaGFyQ291bnRzW1tzZWxmIGFzY2lpRW5jb2RhdGlvbl1dIDwgaW50Q2hhckNvdW50c1tbc2VsZiBiYXNlMjU2RW5jb2RhdGlvbl1dCisgICAgICAgICAgJiYgaW50Q2hhckNvdW50c1tbc2VsZiBhc2NpaUVuY29kYXRpb25dXSA8IGludENoYXJDb3VudHNbW3NlbGYgYzQwRW5jb2RhdGlvbl1dCisgICAgICAgICAgJiYgaW50Q2hhckNvdW50c1tbc2VsZiBhc2NpaUVuY29kYXRpb25dXSA8IGludENoYXJDb3VudHNbW3NlbGYgdGV4dEVuY29kYXRpb25dXQorICAgICAgICAgICYmIGludENoYXJDb3VudHNbW3NlbGYgYXNjaWlFbmNvZGF0aW9uXV0gPCBpbnRDaGFyQ291bnRzW1tzZWxmIHgxMkVuY29kYXRpb25dXQorICAgICAgICAgICYmIGludENoYXJDb3VudHNbW3NlbGYgYXNjaWlFbmNvZGF0aW9uXV0gPCBpbnRDaGFyQ291bnRzW1tzZWxmIGVkaWZhY3RFbmNvZGF0aW9uXV0pIHsKKyAgICAgICAgcmV0dXJuIFtzZWxmIGFzY2lpRW5jb2RhdGlvbl07CisgICAgICB9CisgICAgICBpZiAoaW50Q2hhckNvdW50c1tbc2VsZiBiYXNlMjU2RW5jb2RhdGlvbl1dIDwgaW50Q2hhckNvdW50c1tbc2VsZiBhc2NpaUVuY29kYXRpb25dXQorICAgICAgICAgIHx8IChtaW5zW1tzZWxmIGM0MEVuY29kYXRpb25dXSArIG1pbnNbW3NlbGYgdGV4dEVuY29kYXRpb25dXSArIG1pbnNbW3NlbGYgeDEyRW5jb2RhdGlvbl1dICsgbWluc1tbc2VsZiBlZGlmYWN0RW5jb2RhdGlvbl1dKSA9PSAwKSB7CisgICAgICAgIHJldHVybiBbc2VsZiBiYXNlMjU2RW5jb2RhdGlvbl07CisgICAgICB9CisgICAgICBpZiAobWluQ291bnQgPT0gMSAmJiBtaW5zW1tzZWxmIGVkaWZhY3RFbmNvZGF0aW9uXV0gPiAwKSB7CisgICAgICAgIHJldHVybiBbc2VsZiBlZGlmYWN0RW5jb2RhdGlvbl07CisgICAgICB9CisgICAgICBpZiAobWluQ291bnQgPT0gMSAmJiBtaW5zW1tzZWxmIHRleHRFbmNvZGF0aW9uXV0gPiAwKSB7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0RW5jb2RhdGlvbl07CisgICAgICB9CisgICAgICBpZiAobWluQ291bnQgPT0gMSAmJiBtaW5zW1tzZWxmIHgxMkVuY29kYXRpb25dXSA+IDApIHsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHgxMkVuY29kYXRpb25dOworICAgICAgfQorICAgICAgaWYgKGludENoYXJDb3VudHNbW3NlbGYgYzQwRW5jb2RhdGlvbl1dICsgMSA8IGludENoYXJDb3VudHNbW3NlbGYgYXNjaWlFbmNvZGF0aW9uXV0KKyAgICAgICAgICAmJiBpbnRDaGFyQ291bnRzW1tzZWxmIGM0MEVuY29kYXRpb25dXSArIDEgPCBpbnRDaGFyQ291bnRzW1tzZWxmIGJhc2UyNTZFbmNvZGF0aW9uXV0KKyAgICAgICAgICAmJiBpbnRDaGFyQ291bnRzW1tzZWxmIGM0MEVuY29kYXRpb25dXSArIDEgPCBpbnRDaGFyQ291bnRzW1tzZWxmIGVkaWZhY3RFbmNvZGF0aW9uXV0KKyAgICAgICAgICAmJiBpbnRDaGFyQ291bnRzW1tzZWxmIGM0MEVuY29kYXRpb25dXSArIDEgPCBpbnRDaGFyQ291bnRzW1tzZWxmIHRleHRFbmNvZGF0aW9uXV0pIHsKKyAgICAgICAgaWYgKGludENoYXJDb3VudHNbW3NlbGYgYzQwRW5jb2RhdGlvbl1dIDwgaW50Q2hhckNvdW50c1tbc2VsZiB4MTJFbmNvZGF0aW9uXV0pIHsKKyAgICAgICAgICByZXR1cm4gW3NlbGYgYzQwRW5jb2RhdGlvbl07CisgICAgICAgIH0KKyAgICAgICAgaWYgKGludENoYXJDb3VudHNbW3NlbGYgYzQwRW5jb2RhdGlvbl1dID09IGludENoYXJDb3VudHNbW3NlbGYgeDEyRW5jb2RhdGlvbl1dKSB7CisgICAgICAgICAgaW50IHAgPSBzdGFydHBvcyArIGNoYXJzUHJvY2Vzc2VkICsgMTsKKyAgICAgICAgICB3aGlsZSAocCA8IG1zZy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGNoYXIgdGMgPSBbbXNnIGNoYXJhY3RlckF0SW5kZXg6cF07CisgICAgICAgICAgICBpZiAoW3NlbGYgaXNYMTJUZXJtU2VwOnRjXSkgeworICAgICAgICAgICAgICByZXR1cm4gW3NlbGYgeDEyRW5jb2RhdGlvbl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIVtzZWxmIGlzTmF0aXZlWDEyOnRjXSkgeworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIFtzZWxmIGM0MEVuY29kYXRpb25dOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKKysgKGludClmaW5kTWluaW11bXM6KGZsb2F0ICopY2hhckNvdW50cyBpbnRDaGFyQ291bnRzOihpbnQgKilpbnRDaGFyQ291bnRzIG1pbjooaW50KW1pbiBtaW5zOihpbnQ4X3QgKiltaW5zIHsKKyAgbWVtc2V0KG1pbnMsIDAsIDYpOworICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykgeworICAgIGludENoYXJDb3VudHNbaV0gPSAoaW50KSBjZWlsKGNoYXJDb3VudHNbaV0pOworICAgIGludCBjdXJyZW50ID0gaW50Q2hhckNvdW50c1tpXTsKKyAgICBpZiAobWluID4gY3VycmVudCkgeworICAgICAgbWluID0gY3VycmVudDsKKyAgICAgIG1lbXNldChtaW5zLCAwLCA2KTsKKyAgICB9CisgICAgaWYgKG1pbiA9PSBjdXJyZW50KSB7CisgICAgICBtaW5zW2ldKys7CisgICAgfQorICB9CisgIHJldHVybiBtaW47Cit9CisKKysgKGludCltaW5pbXVtQ291bnQ6KGludDhfdCAqKW1pbnMgeworICBpbnQgbWluQ291bnQgPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykgeworICAgIG1pbkNvdW50ICs9IG1pbnNbaV07CisgIH0KKyAgcmV0dXJuIG1pbkNvdW50OworfQorCisrIChCT09MKWlzRGlnaXQ6KHVuaWNoYXIpY2ggeworICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JzsKK30KKworKyAoQk9PTClpc0V4dGVuZGVkQVNDSUk6KHVuaWNoYXIpY2ggeworICByZXR1cm4gY2ggPj0gMTI4ICYmIGNoIDw9IDI1NTsKK30KKworKyAoQk9PTClpc05hdGl2ZUM0MDoodW5pY2hhciljaCB7CisgIHJldHVybiAoY2ggPT0gJyAnKSB8fCAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpOworfQorCisrIChCT09MKWlzTmF0aXZlVGV4dDoodW5pY2hhciljaCB7CisgIHJldHVybiAoY2ggPT0gJyAnKSB8fCAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwgKGNoID49ICdhJyAmJiBjaCA8PSAneicpOworfQorCisrIChCT09MKWlzTmF0aXZlWDEyOih1bmljaGFyKWNoIHsKKyAgcmV0dXJuIFtzZWxmIGlzWDEyVGVybVNlcDpjaF0gfHwgKGNoID09ICcgJykgfHwgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8IChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKTsKK30KKworKyAoQk9PTClpc1gxMlRlcm1TZXA6KHVuaWNoYXIpY2ggeworICByZXR1cm4gKGNoID09ICdccicpIC8vQ1IKKyAgICB8fCAoY2ggPT0gJyonKQorICAgIHx8IChjaCA9PSAnPicpOworfQorCisrIChCT09MKWlzTmF0aXZlRURJRkFDVDoodW5pY2hhciljaCB7CisgIHJldHVybiBjaCA+PSAnICcgJiYgY2ggPD0gJ14nOworfQorCisrIChCT09MKWlzU3BlY2lhbEIyNTY6KHVuaWNoYXIpY2ggeworICByZXR1cm4gTk87IC8vVE9ETyBOT1QgSU1QTEVNRU5URUQgWUVUISEhCit9CisKKysgKGludClkZXRlcm1pbmVDb25zZWN1dGl2ZURpZ2l0Q291bnQ6KE5TU3RyaW5nICopbXNnIHN0YXJ0cG9zOihpbnQpc3RhcnRwb3MgeworICBpbnQgY291bnQgPSAwOworICBOU1VJbnRlZ2VyIGxlbiA9IG1zZy5sZW5ndGg7CisgIGludCBpZHggPSBzdGFydHBvczsKKyAgaWYgKGlkeCA8IGxlbikgeworICAgIHVuaWNoYXIgY2ggPSBbbXNnIGNoYXJhY3RlckF0SW5kZXg6aWR4XTsKKyAgICB3aGlsZSAoW3NlbGYgaXNEaWdpdDpjaF0gJiYgaWR4IDwgbGVuKSB7CisgICAgICBjb3VudCsrOworICAgICAgaWR4Kys7CisgICAgICBpZiAoaWR4IDwgbGVuKSB7CisgICAgICAgIGNoID0gW21zZyBjaGFyYWN0ZXJBdEluZGV4OmlkeF07CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBjb3VudDsKK30KKworKyAodm9pZClpbGxlZ2FsQ2hhcmFjdGVyOih1bmljaGFyKWMgeworICBOU1N0cmluZyAqaGV4ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIleCIsIGNdOworICBoZXggPSBbW0AiMDAwMCIgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAsIGhleC5sZW5ndGgpXSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpoZXhdOworICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiSWxsZWdhbCBjaGFyYWN0ZXI6ICVDICgweCVAKSIsIGMsIGhleF07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhTeW1ib2xJbmZvLmggYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYU3ltYm9sSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NzU1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYU3ltYm9sSW5mby5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogU3ltYm9sIGluZm8gdGFibGUgZm9yIERhdGFNYXRyaXguCisgKi8KKworQGNsYXNzIFpYRGltZW5zaW9uLCBaWFN5bWJvbFNoYXBlSGludDsKKworQGludGVyZmFjZSBaWFN5bWJvbEluZm8gOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBCT09MIHJlY3Rhbmd1bGFyOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGVycm9yQ29kZXdvcmRzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGRhdGFDYXBhY2l0eTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBkYXRhUmVnaW9uczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBtYXRyaXhXaWR0aDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBtYXRyaXhIZWlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgcnNCbG9ja0RhdGE7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgcnNCbG9ja0Vycm9yOworCisvKioKKyAqIE92ZXJyaWRlcyB0aGUgc3ltYm9sIGluZm8gc2V0IHVzZWQgYnkgdGhpcyBjbGFzcy4gVXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAqLworKyAodm9pZClvdmVycmlkZVN5bWJvbFNldDooTlNBcnJheSAqKW92ZXJyaWRlOworKyAoTlNBcnJheSAqKXByb2RTeW1ib2xzOworLSAoaWQpaW5pdFdpdGhSZWN0YW5ndWxhcjooQk9PTClyZWN0YW5ndWxhciBkYXRhQ2FwYWNpdHk6KGludClkYXRhQ2FwYWNpdHkgZXJyb3JDb2Rld29yZHM6KGludCllcnJvckNvZGV3b3JkcworICAgICAgICAgICAgICBtYXRyaXhXaWR0aDooaW50KW1hdHJpeFdpZHRoIG1hdHJpeEhlaWdodDooaW50KW1hdHJpeEhlaWdodCBkYXRhUmVnaW9uczooaW50KWRhdGFSZWdpb25zOworLSAoaWQpaW5pdFdpdGhSZWN0YW5ndWxhcjooQk9PTClyZWN0YW5ndWxhciBkYXRhQ2FwYWNpdHk6KGludClkYXRhQ2FwYWNpdHkgZXJyb3JDb2Rld29yZHM6KGludCllcnJvckNvZGV3b3JkcworICAgICAgICAgICAgICBtYXRyaXhXaWR0aDooaW50KW1hdHJpeFdpZHRoIG1hdHJpeEhlaWdodDooaW50KW1hdHJpeEhlaWdodCBkYXRhUmVnaW9uczooaW50KWRhdGFSZWdpb25zCisgICAgICAgICAgICAgIHJzQmxvY2tEYXRhOihpbnQpcnNCbG9ja0RhdGEgcnNCbG9ja0Vycm9yOihpbnQpcnNCbG9ja0Vycm9yOworKyAoWlhTeW1ib2xJbmZvICopbG9va3VwOihpbnQpZGF0YUNvZGV3b3JkczsKKysgKFpYU3ltYm9sSW5mbyAqKWxvb2t1cDooaW50KWRhdGFDb2Rld29yZHMgc2hhcGU6KFpYU3ltYm9sU2hhcGVIaW50ICopc2hhcGU7CisrIChaWFN5bWJvbEluZm8gKilsb29rdXA6KGludClkYXRhQ29kZXdvcmRzIGFsbG93UmVjdGFuZ3VsYXI6KEJPT0wpYWxsb3dSZWN0YW5ndWxhciBmYWlsOihCT09MKWZhaWw7CisrIChaWFN5bWJvbEluZm8gKilsb29rdXA6KGludClkYXRhQ29kZXdvcmRzIHNoYXBlOihaWFN5bWJvbFNoYXBlSGludCAqKXNoYXBlIGZhaWw6KEJPT0wpZmFpbDsKKysgKFpYU3ltYm9sSW5mbyAqKWxvb2t1cDooaW50KWRhdGFDb2Rld29yZHMgc2hhcGU6KFpYU3ltYm9sU2hhcGVIaW50ICopc2hhcGUgbWluU2l6ZTooWlhEaW1lbnNpb24gKiltaW5TaXplCisgICAgICAgICAgICAgICAgIG1heFNpemU6KFpYRGltZW5zaW9uICopbWF4U2l6ZSBmYWlsOihCT09MKWZhaWw7CistIChpbnQpaG9yaXpvbnRhbERhdGFSZWdpb25zOworLSAoaW50KXZlcnRpY2FsRGF0YVJlZ2lvbnM7CistIChpbnQpc3ltYm9sRGF0YVdpZHRoOworLSAoaW50KXN5bWJvbERhdGFIZWlnaHQ7CistIChpbnQpc3ltYm9sV2lkdGg7CistIChpbnQpc3ltYm9sSGVpZ2h0OworLSAoaW50KWNvZGV3b3JkQ291bnQ7CistIChpbnQpaW50ZXJsZWF2ZWRCbG9ja0NvdW50OworLSAoaW50KWRhdGFMZW5ndGhGb3JJbnRlcmxlYXZlZEJsb2NrOihpbnQpaW5kZXg7CistIChpbnQpZXJyb3JMZW5ndGhGb3JJbnRlcmxlYXZlZEJsb2NrOihpbnQpaW5kZXg7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhTeW1ib2xJbmZvLm0gYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYU3ltYm9sSW5mby5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzJkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYU3ltYm9sSW5mby5tCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0LmgiCisjaW1wb3J0ICJaWERpbWVuc2lvbi5oIgorI2ltcG9ydCAiWlhTeW1ib2xJbmZvLmgiCisjaW1wb3J0ICJaWFN5bWJvbFNoYXBlSGludC5oIgorCitzdGF0aWMgTlNBcnJheSAqUFJPRF9TWU1CT0xTID0gbmlsOworc3RhdGljIE5TQXJyYXkgKnN5bWJvbHMgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBaWFN5bWJvbEluZm8KKworKyAodm9pZClpbml0aWFsaXplIHsKKyAgUFJPRF9TWU1CT0xTID0gQFtbW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpOTyBkYXRhQ2FwYWNpdHk6MyBlcnJvckNvZGV3b3Jkczo1IG1hdHJpeFdpZHRoOjggbWF0cml4SGVpZ2h0OjggZGF0YVJlZ2lvbnM6MV0sCisgICAgICAgICAgICAgICAgICAgW1taWFN5bWJvbEluZm8gYWxsb2NdIGluaXRXaXRoUmVjdGFuZ3VsYXI6Tk8gZGF0YUNhcGFjaXR5OjUgZXJyb3JDb2Rld29yZHM6NyBtYXRyaXhXaWR0aDoxMCBtYXRyaXhIZWlnaHQ6MTAgZGF0YVJlZ2lvbnM6MV0sCisgICAgICAgICAgICAgICAgICAgLypyZWN0Ki9bW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpZRVMgZGF0YUNhcGFjaXR5OjUgZXJyb3JDb2Rld29yZHM6NyBtYXRyaXhXaWR0aDoxNiBtYXRyaXhIZWlnaHQ6NiBkYXRhUmVnaW9uczoxXSwKKyAgICAgICAgICAgICAgICAgICBbW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpOTyBkYXRhQ2FwYWNpdHk6OCBlcnJvckNvZGV3b3JkczoxMCBtYXRyaXhXaWR0aDoxMiBtYXRyaXhIZWlnaHQ6MTIgZGF0YVJlZ2lvbnM6MV0sCisgICAgICAgICAgICAgICAgICAgLypyZWN0Ki9bW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpZRVMgZGF0YUNhcGFjaXR5OjEwIGVycm9yQ29kZXdvcmRzOjExIG1hdHJpeFdpZHRoOjE0IG1hdHJpeEhlaWdodDo2IGRhdGFSZWdpb25zOjJdLAorICAgICAgICAgICAgICAgICAgIFtbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOk5PIGRhdGFDYXBhY2l0eToxMiBlcnJvckNvZGV3b3JkczoxMiBtYXRyaXhXaWR0aDoxNCBtYXRyaXhIZWlnaHQ6MTQgZGF0YVJlZ2lvbnM6MV0sCisgICAgICAgICAgICAgICAgICAgLypyZWN0Ki9bW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpZRVMgZGF0YUNhcGFjaXR5OjE2IGVycm9yQ29kZXdvcmRzOjE0IG1hdHJpeFdpZHRoOjI0IG1hdHJpeEhlaWdodDoxMCBkYXRhUmVnaW9uczoxXSwKKworICAgICAgICAgICAgICAgICAgIFtbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOk5PIGRhdGFDYXBhY2l0eToxOCBlcnJvckNvZGV3b3JkczoxNCBtYXRyaXhXaWR0aDoxNiBtYXRyaXhIZWlnaHQ6MTYgZGF0YVJlZ2lvbnM6MV0sCisgICAgICAgICAgICAgICAgICAgW1taWFN5bWJvbEluZm8gYWxsb2NdIGluaXRXaXRoUmVjdGFuZ3VsYXI6Tk8gZGF0YUNhcGFjaXR5OjIyIGVycm9yQ29kZXdvcmRzOjE4IG1hdHJpeFdpZHRoOjE4IG1hdHJpeEhlaWdodDoxOCBkYXRhUmVnaW9uczoxXSwKKyAgICAgICAgICAgICAgICAgICAvKnJlY3QqL1tbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOllFUyBkYXRhQ2FwYWNpdHk6MjIgZXJyb3JDb2Rld29yZHM6MTggbWF0cml4V2lkdGg6MTYgbWF0cml4SGVpZ2h0OjEwIGRhdGFSZWdpb25zOjJdLAorICAgICAgICAgICAgICAgICAgIFtbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOk5PIGRhdGFDYXBhY2l0eTozMCBlcnJvckNvZGV3b3JkczoyMCBtYXRyaXhXaWR0aDoyMCBtYXRyaXhIZWlnaHQ6MjAgZGF0YVJlZ2lvbnM6MV0sCisgICAgICAgICAgICAgICAgICAgLypyZWN0Ki9bW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpZRVMgZGF0YUNhcGFjaXR5OjMyIGVycm9yQ29kZXdvcmRzOjI0IG1hdHJpeFdpZHRoOjE2IG1hdHJpeEhlaWdodDoxNCBkYXRhUmVnaW9uczoyXSwKKyAgICAgICAgICAgICAgICAgICBbW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpOTyBkYXRhQ2FwYWNpdHk6MzYgZXJyb3JDb2Rld29yZHM6MjQgbWF0cml4V2lkdGg6MjIgbWF0cml4SGVpZ2h0OjIyIGRhdGFSZWdpb25zOjFdLAorICAgICAgICAgICAgICAgICAgIFtbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOk5PIGRhdGFDYXBhY2l0eTo0NCBlcnJvckNvZGV3b3JkczoyOCBtYXRyaXhXaWR0aDoyNCBtYXRyaXhIZWlnaHQ6MjQgZGF0YVJlZ2lvbnM6MV0sCisgICAgICAgICAgICAgICAgICAgLypyZWN0Ki9bW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpZRVMgZGF0YUNhcGFjaXR5OjQ5IGVycm9yQ29kZXdvcmRzOjI4IG1hdHJpeFdpZHRoOjIyIG1hdHJpeEhlaWdodDoxNCBkYXRhUmVnaW9uczoyXSwKKworICAgICAgICAgICAgICAgICAgIFtbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOk5PIGRhdGFDYXBhY2l0eTo2MiBlcnJvckNvZGV3b3JkczozNiBtYXRyaXhXaWR0aDoxNCBtYXRyaXhIZWlnaHQ6MTQgZGF0YVJlZ2lvbnM6NF0sCisgICAgICAgICAgICAgICAgICAgW1taWFN5bWJvbEluZm8gYWxsb2NdIGluaXRXaXRoUmVjdGFuZ3VsYXI6Tk8gZGF0YUNhcGFjaXR5Ojg2IGVycm9yQ29kZXdvcmRzOjQyIG1hdHJpeFdpZHRoOjE2IG1hdHJpeEhlaWdodDoxNiBkYXRhUmVnaW9uczo0XSwKKyAgICAgICAgICAgICAgICAgICBbW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpOTyBkYXRhQ2FwYWNpdHk6MTE0IGVycm9yQ29kZXdvcmRzOjQ4IG1hdHJpeFdpZHRoOjE4IG1hdHJpeEhlaWdodDoxOCBkYXRhUmVnaW9uczo0XSwKKyAgICAgICAgICAgICAgICAgICBbW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpOTyBkYXRhQ2FwYWNpdHk6MTQ0IGVycm9yQ29kZXdvcmRzOjU2IG1hdHJpeFdpZHRoOjIwIG1hdHJpeEhlaWdodDoyMCBkYXRhUmVnaW9uczo0XSwKKyAgICAgICAgICAgICAgICAgICBbW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpOTyBkYXRhQ2FwYWNpdHk6MTc0IGVycm9yQ29kZXdvcmRzOjY4IG1hdHJpeFdpZHRoOjIyIG1hdHJpeEhlaWdodDoyMiBkYXRhUmVnaW9uczo0XSwKKworICAgICAgICAgICAgICAgICAgIFtbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOk5PIGRhdGFDYXBhY2l0eToyMDQgZXJyb3JDb2Rld29yZHM6ODQgbWF0cml4V2lkdGg6MjQgbWF0cml4SGVpZ2h0OjI0IGRhdGFSZWdpb25zOjQgcnNCbG9ja0RhdGE6MTAyIHJzQmxvY2tFcnJvcjo0Ml0sCisgICAgICAgICAgICAgICAgICAgW1taWFN5bWJvbEluZm8gYWxsb2NdIGluaXRXaXRoUmVjdGFuZ3VsYXI6Tk8gZGF0YUNhcGFjaXR5OjI4MCBlcnJvckNvZGV3b3JkczoxMTIgbWF0cml4V2lkdGg6MTQgbWF0cml4SGVpZ2h0OjE0IGRhdGFSZWdpb25zOjE2IHJzQmxvY2tEYXRhOjE0MCByc0Jsb2NrRXJyb3I6NTZdLAorICAgICAgICAgICAgICAgICAgIFtbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOk5PIGRhdGFDYXBhY2l0eTozNjggZXJyb3JDb2Rld29yZHM6MTQ0IG1hdHJpeFdpZHRoOjE2IG1hdHJpeEhlaWdodDoxNiBkYXRhUmVnaW9uczoxNiByc0Jsb2NrRGF0YTo5MiByc0Jsb2NrRXJyb3I6MzZdLAorICAgICAgICAgICAgICAgICAgIFtbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOk5PIGRhdGFDYXBhY2l0eTo0NTYgZXJyb3JDb2Rld29yZHM6MTkyIG1hdHJpeFdpZHRoOjE4IG1hdHJpeEhlaWdodDoxOCBkYXRhUmVnaW9uczoxNiByc0Jsb2NrRGF0YToxMTQgcnNCbG9ja0Vycm9yOjQ4XSwKKyAgICAgICAgICAgICAgICAgICBbW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpOTyBkYXRhQ2FwYWNpdHk6NTc2IGVycm9yQ29kZXdvcmRzOjIyNCBtYXRyaXhXaWR0aDoyMCBtYXRyaXhIZWlnaHQ6MjAgZGF0YVJlZ2lvbnM6MTYgcnNCbG9ja0RhdGE6MTQ0IHJzQmxvY2tFcnJvcjo1Nl0sCisgICAgICAgICAgICAgICAgICAgW1taWFN5bWJvbEluZm8gYWxsb2NdIGluaXRXaXRoUmVjdGFuZ3VsYXI6Tk8gZGF0YUNhcGFjaXR5OjY5NiBlcnJvckNvZGV3b3JkczoyNzIgbWF0cml4V2lkdGg6MjIgbWF0cml4SGVpZ2h0OjIyIGRhdGFSZWdpb25zOjE2IHJzQmxvY2tEYXRhOjE3NCByc0Jsb2NrRXJyb3I6NjhdLAorICAgICAgICAgICAgICAgICAgIFtbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOk5PIGRhdGFDYXBhY2l0eTo4MTYgZXJyb3JDb2Rld29yZHM6MzM2IG1hdHJpeFdpZHRoOjI0IG1hdHJpeEhlaWdodDoyNCBkYXRhUmVnaW9uczoxNiByc0Jsb2NrRGF0YToxMzYgcnNCbG9ja0Vycm9yOjU2XSwKKyAgICAgICAgICAgICAgICAgICBbW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpOTyBkYXRhQ2FwYWNpdHk6MTA1MCBlcnJvckNvZGV3b3Jkczo0MDggbWF0cml4V2lkdGg6MTggbWF0cml4SGVpZ2h0OjE4IGRhdGFSZWdpb25zOjM2IHJzQmxvY2tEYXRhOjE3NSByc0Jsb2NrRXJyb3I6NjhdLAorICAgICAgICAgICAgICAgICAgIFtbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOk5PIGRhdGFDYXBhY2l0eToxMzA0IGVycm9yQ29kZXdvcmRzOjQ5NiBtYXRyaXhXaWR0aDoyMCBtYXRyaXhIZWlnaHQ6MjAgZGF0YVJlZ2lvbnM6MzYgcnNCbG9ja0RhdGE6MTYzIHJzQmxvY2tFcnJvcjo2Ml0sCisgICAgICAgICAgICAgICAgICAgW1taWERhdGFNYXRyaXhTeW1ib2xJbmZvMTQ0IGFsbG9jXSBpbml0XV07CisgIHN5bWJvbHMgPSBQUk9EX1NZTUJPTFM7Cit9CisKKysgKE5TQXJyYXkgKilwcm9kU3ltYm9scyB7CisgIHJldHVybiBQUk9EX1NZTUJPTFM7Cit9CisKKysgKHZvaWQpb3ZlcnJpZGVTeW1ib2xTZXQ6KE5TQXJyYXkgKilvdmVycmlkZSB7CisgIHN5bWJvbHMgPSBvdmVycmlkZTsKK30KKworLSAoaWQpaW5pdFdpdGhSZWN0YW5ndWxhcjooQk9PTClyZWN0YW5ndWxhciBkYXRhQ2FwYWNpdHk6KGludClkYXRhQ2FwYWNpdHkgZXJyb3JDb2Rld29yZHM6KGludCllcnJvckNvZGV3b3JkcworICAgICAgICAgICAgICBtYXRyaXhXaWR0aDooaW50KW1hdHJpeFdpZHRoIG1hdHJpeEhlaWdodDooaW50KW1hdHJpeEhlaWdodCBkYXRhUmVnaW9uczooaW50KWRhdGFSZWdpb25zIHsKKyAgcmV0dXJuIFtzZWxmIGluaXRXaXRoUmVjdGFuZ3VsYXI6cmVjdGFuZ3VsYXIgZGF0YUNhcGFjaXR5OmRhdGFDYXBhY2l0eSBlcnJvckNvZGV3b3JkczplcnJvckNvZGV3b3JkcworICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhXaWR0aDptYXRyaXhXaWR0aCBtYXRyaXhIZWlnaHQ6bWF0cml4SGVpZ2h0IGRhdGFSZWdpb25zOmRhdGFSZWdpb25zCisgICAgICAgICAgICAgICAgICAgICAgIHJzQmxvY2tEYXRhOmRhdGFDYXBhY2l0eSByc0Jsb2NrRXJyb3I6ZXJyb3JDb2Rld29yZHNdOworfQorCistIChpZClpbml0V2l0aFJlY3Rhbmd1bGFyOihCT09MKXJlY3Rhbmd1bGFyIGRhdGFDYXBhY2l0eTooaW50KWRhdGFDYXBhY2l0eSBlcnJvckNvZGV3b3JkczooaW50KWVycm9yQ29kZXdvcmRzCisgICAgICAgICAgICAgIG1hdHJpeFdpZHRoOihpbnQpbWF0cml4V2lkdGggbWF0cml4SGVpZ2h0OihpbnQpbWF0cml4SGVpZ2h0IGRhdGFSZWdpb25zOihpbnQpZGF0YVJlZ2lvbnMKKyAgICAgICAgICAgICAgcnNCbG9ja0RhdGE6KGludClyc0Jsb2NrRGF0YSByc0Jsb2NrRXJyb3I6KGludClyc0Jsb2NrRXJyb3IgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9yZWN0YW5ndWxhciA9IHJlY3Rhbmd1bGFyOworICAgIF9kYXRhQ2FwYWNpdHkgPSBkYXRhQ2FwYWNpdHk7CisgICAgX2Vycm9yQ29kZXdvcmRzID0gZXJyb3JDb2Rld29yZHM7CisgICAgX21hdHJpeFdpZHRoID0gbWF0cml4V2lkdGg7CisgICAgX21hdHJpeEhlaWdodCA9IG1hdHJpeEhlaWdodDsKKyAgICBfZGF0YVJlZ2lvbnMgPSBkYXRhUmVnaW9uczsKKyAgICBfcnNCbG9ja0RhdGEgPSByc0Jsb2NrRGF0YTsKKyAgICBfcnNCbG9ja0Vycm9yID0gcnNCbG9ja0Vycm9yOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKFpYU3ltYm9sSW5mbyAqKWxvb2t1cDooaW50KWRhdGFDb2Rld29yZHMgeworICByZXR1cm4gW3NlbGYgbG9va3VwOmRhdGFDb2Rld29yZHMgc2hhcGU6W1pYU3ltYm9sU2hhcGVIaW50IGZvcmNlTm9uZV0gZmFpbDpZRVNdOworfQorCisrIChaWFN5bWJvbEluZm8gKilsb29rdXA6KGludClkYXRhQ29kZXdvcmRzIHNoYXBlOihaWFN5bWJvbFNoYXBlSGludCAqKXNoYXBlIHsKKyAgcmV0dXJuIFtzZWxmIGxvb2t1cDpkYXRhQ29kZXdvcmRzIHNoYXBlOnNoYXBlIGZhaWw6WUVTXTsKK30KKworKyAoWlhTeW1ib2xJbmZvICopbG9va3VwOihpbnQpZGF0YUNvZGV3b3JkcyBhbGxvd1JlY3Rhbmd1bGFyOihCT09MKWFsbG93UmVjdGFuZ3VsYXIgZmFpbDooQk9PTClmYWlsIHsKKyAgWlhTeW1ib2xTaGFwZUhpbnQgKnNoYXBlID0gYWxsb3dSZWN0YW5ndWxhcgorICAgID8gW1pYU3ltYm9sU2hhcGVIaW50IGZvcmNlTm9uZV0gOiBbWlhTeW1ib2xTaGFwZUhpbnQgZm9yY2VTcXVhcmVdOworICByZXR1cm4gW3NlbGYgbG9va3VwOmRhdGFDb2Rld29yZHMgc2hhcGU6c2hhcGUgZmFpbDpmYWlsXTsKK30KKworKyAoWlhTeW1ib2xJbmZvICopbG9va3VwOihpbnQpZGF0YUNvZGV3b3JkcyBzaGFwZTooWlhTeW1ib2xTaGFwZUhpbnQgKilzaGFwZSBmYWlsOihCT09MKWZhaWwgeworICByZXR1cm4gW3NlbGYgbG9va3VwOmRhdGFDb2Rld29yZHMgc2hhcGU6c2hhcGUgbWluU2l6ZTpuaWwgbWF4U2l6ZTpuaWwgZmFpbDpmYWlsXTsKK30KKworKyAoWlhTeW1ib2xJbmZvICopbG9va3VwOihpbnQpZGF0YUNvZGV3b3JkcyBzaGFwZTooWlhTeW1ib2xTaGFwZUhpbnQgKilzaGFwZSBtaW5TaXplOihaWERpbWVuc2lvbiAqKW1pblNpemUKKyAgICAgICAgICAgICAgICAgbWF4U2l6ZTooWlhEaW1lbnNpb24gKiltYXhTaXplIGZhaWw6KEJPT0wpZmFpbCB7CisgIGZvciAoWlhTeW1ib2xJbmZvICpzeW1ib2wgaW4gc3ltYm9scykgeworICAgIGlmIChzaGFwZSA9PSBbWlhTeW1ib2xTaGFwZUhpbnQgZm9yY2VTcXVhcmVdICYmIHN5bWJvbC5yZWN0YW5ndWxhcikgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmIChzaGFwZSA9PSBbWlhTeW1ib2xTaGFwZUhpbnQgZm9yY2VSZWN0YW5nbGVdICYmICFzeW1ib2wucmVjdGFuZ3VsYXIpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAobWluU2l6ZSAhPSBuaWwKKyAgICAgICAgJiYgKFtzeW1ib2wgc3ltYm9sV2lkdGhdIDwgbWluU2l6ZS53aWR0aAorICAgICAgICAgICAgfHwgW3N5bWJvbCBzeW1ib2xIZWlnaHRdIDwgbWluU2l6ZS5oZWlnaHQpKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICBpZiAobWF4U2l6ZSAhPSBuaWwKKyAgICAgICAgJiYgKFtzeW1ib2wgc3ltYm9sV2lkdGhdID4gbWF4U2l6ZS53aWR0aAorICAgICAgICAgICAgfHwgW3N5bWJvbCBzeW1ib2xIZWlnaHRdID4gbWF4U2l6ZS5oZWlnaHQpKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICBpZiAoZGF0YUNvZGV3b3JkcyA8PSBzeW1ib2wuZGF0YUNhcGFjaXR5KSB7CisgICAgICByZXR1cm4gc3ltYm9sOworICAgIH0KKyAgfQorICBpZiAoZmFpbCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJDYW4ndCBmaW5kIGEgc3ltYm9sIGFycmFuZ2VtZW50IHRoYXQgbWF0Y2hlcyB0aGUgbWVzc2FnZS4gRGF0YSBjb2Rld29yZHM6ICVkIiwgZGF0YUNvZGV3b3Jkc107CisgIH0KKyAgcmV0dXJuIG5pbDsKK30KKworLSAoaW50KWhvcml6b250YWxEYXRhUmVnaW9ucyB7CisgIHN3aXRjaCAoX2RhdGFSZWdpb25zKSB7CisgICAgY2FzZSAxOgorICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSAyOgorICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSA0OgorICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSAxNjoKKyAgICAgIHJldHVybiA0OworICAgIGNhc2UgMzY6CisgICAgICByZXR1cm4gNjsKKyAgICBkZWZhdWx0OgorICAgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiByZWFzb246QCJDYW5ub3QgaGFuZGxlIHRoaXMgbnVtYmVyIG9mIGRhdGEgcmVnaW9ucyIgdXNlckluZm86bmlsXTsKKyAgfQorfQorCistIChpbnQpdmVydGljYWxEYXRhUmVnaW9ucyB7CisgIHN3aXRjaCAoX2RhdGFSZWdpb25zKSB7CisgICAgY2FzZSAxOgorICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSAyOgorICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSA0OgorICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSAxNjoKKyAgICAgIHJldHVybiA0OworICAgIGNhc2UgMzY6CisgICAgICByZXR1cm4gNjsKKyAgICBkZWZhdWx0OgorICAgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiByZWFzb246QCJDYW5ub3QgaGFuZGxlIHRoaXMgbnVtYmVyIG9mIGRhdGEgcmVnaW9ucyIgdXNlckluZm86bmlsXTsKKyAgfQorfQorCistIChpbnQpc3ltYm9sRGF0YVdpZHRoIHsKKyAgcmV0dXJuIFtzZWxmIGhvcml6b250YWxEYXRhUmVnaW9uc10gKiBfbWF0cml4V2lkdGg7Cit9CisKKy0gKGludClzeW1ib2xEYXRhSGVpZ2h0IHsKKyAgcmV0dXJuIFtzZWxmIHZlcnRpY2FsRGF0YVJlZ2lvbnNdICogX21hdHJpeEhlaWdodDsKK30KKworLSAoaW50KXN5bWJvbFdpZHRoIHsKKyAgcmV0dXJuIFtzZWxmIHN5bWJvbERhdGFXaWR0aF0gKyAoW3NlbGYgaG9yaXpvbnRhbERhdGFSZWdpb25zXSAqIDIpOworfQorCistIChpbnQpc3ltYm9sSGVpZ2h0IHsKKyAgcmV0dXJuIFtzZWxmIHN5bWJvbERhdGFIZWlnaHRdICsgKFtzZWxmIHZlcnRpY2FsRGF0YVJlZ2lvbnNdICogMik7Cit9CisKKy0gKGludCljb2Rld29yZENvdW50IHsKKyAgcmV0dXJuIF9kYXRhQ2FwYWNpdHkgKyBfZXJyb3JDb2Rld29yZHM7Cit9CisKKy0gKGludClpbnRlcmxlYXZlZEJsb2NrQ291bnQgeworICByZXR1cm4gX2RhdGFDYXBhY2l0eSAvIF9yc0Jsb2NrRGF0YTsKK30KKworLSAoaW50KWRhdGFMZW5ndGhGb3JJbnRlcmxlYXZlZEJsb2NrOihpbnQpaW5kZXggeworICByZXR1cm4gX3JzQmxvY2tEYXRhOworfQorCistIChpbnQpZXJyb3JMZW5ndGhGb3JJbnRlcmxlYXZlZEJsb2NrOihpbnQpaW5kZXggeworICByZXR1cm4gX3JzQmxvY2tFcnJvcjsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7CisgIE5TTXV0YWJsZVN0cmluZyAqc2IgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgIFtzYiBhcHBlbmRTdHJpbmc6X3JlY3Rhbmd1bGFyID8gQCJSZWN0YW5ndWxhciBTeW1ib2w6IiA6IEAiU3F1YXJlIFN5bWJvbDoiXTsKKyAgW3NiIGFwcGVuZEZvcm1hdDpAIiBkYXRhIHJlZ2lvbiAlZHglZCIsIF9tYXRyaXhXaWR0aCwgX21hdHJpeEhlaWdodF07CisgIFtzYiBhcHBlbmRGb3JtYXQ6QCIsIHN5bWJvbCBzaXplICVkeCVkIiwgW3NlbGYgc3ltYm9sV2lkdGhdLCBbc2VsZiBzeW1ib2xIZWlnaHRdXTsKKyAgW3NiIGFwcGVuZEZvcm1hdDpAIiwgc3ltYm9sIGRhdGEgc2l6ZSAlZHglZCIsIFtzZWxmIHN5bWJvbERhdGFXaWR0aF0sIFtzZWxmIHN5bWJvbERhdGFIZWlnaHRdXTsKKyAgW3NiIGFwcGVuZEZvcm1hdDpAIiwgY29kZXdvcmRzICVkKyVkIiwgX2RhdGFDYXBhY2l0eSwgX2Vycm9yQ29kZXdvcmRzXTsKKyAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoU3RyaW5nOnNiXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWFN5bWJvbFNoYXBlSGludC5oIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWFN5bWJvbFNoYXBlSGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2Y2N2UKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYU3ltYm9sU2hhcGVIaW50LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBFbnVtZXJhdGlvbiBmb3IgRGF0YU1hdHJpeCBzeW1ib2wgc2hhcGUgaGludC4gSXQgY2FuIGJlIHVzZWQgdG8gZm9yY2Ugc3F1YXJlIG9yIHJlY3Rhbmd1bGFyCisgKiBzeW1ib2xzLgorICovCisKK0BpbnRlcmZhY2UgWlhTeW1ib2xTaGFwZUhpbnQgOiBOU09iamVjdAorCisrIChaWFN5bWJvbFNoYXBlSGludCAqKWZvcmNlTm9uZTsKKysgKFpYU3ltYm9sU2hhcGVIaW50ICopZm9yY2VTcXVhcmU7CisrIChaWFN5bWJvbFNoYXBlSGludCAqKWZvcmNlUmVjdGFuZ2xlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYU3ltYm9sU2hhcGVIaW50Lm0gYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYU3ltYm9sU2hhcGVIaW50Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2NDlkMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhTeW1ib2xTaGFwZUhpbnQubQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFN5bWJvbFNoYXBlSGludC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhTeW1ib2xTaGFwZUhpbnQKKworKyAoWlhTeW1ib2xTaGFwZUhpbnQgKilmb3JjZU5vbmUgeworICBzdGF0aWMgWlhTeW1ib2xTaGFwZUhpbnQgKl9mb3JjZU5vbmUgPSBuaWw7CisKKyAgaWYgKCFfZm9yY2VOb25lKSB7CisgICAgX2ZvcmNlTm9uZSA9IFtbWlhTeW1ib2xTaGFwZUhpbnQgYWxsb2NdIGluaXRdOworICB9CisKKyAgcmV0dXJuIF9mb3JjZU5vbmU7Cit9CisKKysgKFpYU3ltYm9sU2hhcGVIaW50ICopZm9yY2VTcXVhcmUgeworICBzdGF0aWMgWlhTeW1ib2xTaGFwZUhpbnQgKl9mb3JjZVNxdWFyZSA9IG5pbDsKKworICBpZiAoIV9mb3JjZVNxdWFyZSkgeworICAgIF9mb3JjZVNxdWFyZSA9IFtbWlhTeW1ib2xTaGFwZUhpbnQgYWxsb2NdIGluaXRdOworICB9CisKKyAgcmV0dXJuIF9mb3JjZVNxdWFyZTsKK30KKworKyAoWlhTeW1ib2xTaGFwZUhpbnQgKilmb3JjZVJlY3RhbmdsZSB7CisgIHN0YXRpYyBaWFN5bWJvbFNoYXBlSGludCAqX2ZvcmNlUmVjdGFuZ2xlID0gbmlsOworCisgIGlmICghX2ZvcmNlUmVjdGFuZ2xlKSB7CisgICAgX2ZvcmNlUmVjdGFuZ2xlID0gW1taWFN5bWJvbFNoYXBlSGludCBhbGxvY10gaW5pdF07CisgIH0KKworICByZXR1cm4gX2ZvcmNlUmVjdGFuZ2xlOworfQorCitAZW5kClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWFRleHRFbmNvZGVyLmggYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYVGV4dEVuY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjE1OTM0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWFRleHRFbmNvZGVyLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhDNDBFbmNvZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhUZXh0RW5jb2RlciA6IFpYQzQwRW5jb2RlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYVGV4dEVuY29kZXIubSBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhUZXh0RW5jb2Rlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MTJjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYVGV4dEVuY29kZXIubQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEhpZ2hMZXZlbEVuY29kZXIuaCIKKyNpbXBvcnQgIlpYVGV4dEVuY29kZXIuaCIKKworQGltcGxlbWVudGF0aW9uIFpYVGV4dEVuY29kZXIKKworLSAoaW50KWVuY29kaW5nTW9kZSB7CisgIHJldHVybiBbWlhIaWdoTGV2ZWxFbmNvZGVyIHRleHRFbmNvZGF0aW9uXTsKK30KKworLSAoaW50KWVuY29kZUNoYXI6KHVuaWNoYXIpYyBidWZmZXI6KE5TTXV0YWJsZVN0cmluZyAqKXNiIHsKKyAgaWYgKGMgPT0gJyAnKSB7CisgICAgW3NiIGFwcGVuZFN0cmluZzpAIlwzIl07CisgICAgcmV0dXJuIDE7CisgIH0KKyAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChjIC0gNDggKyA0KV07CisgICAgcmV0dXJuIDE7CisgIH0KKyAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB7CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChjIC0gOTcgKyAxNCldOworICAgIHJldHVybiAxOworICB9CisgIGlmIChjID49ICdcMCcgJiYgYyA8PSAoY2hhcikweDAwMWYpIHsKKyAgICBbc2IgYXBwZW5kU3RyaW5nOkAiXDAiXTsgLy9TaGlmdCAxIFNldAorICAgIFtzYiBhcHBlbmRGb3JtYXQ6QCIlQyIsIGNdOworICAgIHJldHVybiAyOworICB9CisgIGlmIChjID49ICchJyAmJiBjIDw9ICcvJykgeworICAgIFtzYiBhcHBlbmRTdHJpbmc6QCJcMSJdOyAvL1NoaWZ0IDIgU2V0CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChjIC0gMzMpXTsKKyAgICByZXR1cm4gMjsKKyAgfQorICBpZiAoYyA+PSAnOicgJiYgYyA8PSAnQCcpIHsKKyAgICBbc2IgYXBwZW5kU3RyaW5nOkAiXDEiXTsgLy9TaGlmdCAyIFNldAorICAgIFtzYiBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSAoYyAtIDU4ICsgMTUpXTsKKyAgICByZXR1cm4gMjsKKyAgfQorICBpZiAoYyA+PSAnWycgJiYgYyA8PSAnXycpIHsKKyAgICBbc2IgYXBwZW5kU3RyaW5nOkAiXDEiXTsgLy9TaGlmdCAyIFNldAorICAgIFtzYiBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSAoYyAtIDkxICsgMjIpXTsKKyAgICByZXR1cm4gMjsKKyAgfQorICBpZiAoYyA9PSAnXHUwMDYwJykgeworICAgIFtzYiBhcHBlbmRTdHJpbmc6QCJcMiJdOyAvL1NoaWZ0IDMgU2V0CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChjIC0gOTYpXTsKKyAgICByZXR1cm4gMjsKKyAgfQorICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHsKKyAgICBbc2IgYXBwZW5kU3RyaW5nOkAiXDIiXTsgLy9TaGlmdCAzIFNldAorICAgIFtzYiBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSAoYyAtIDY1ICsgMSldOworICAgIHJldHVybiAyOworICB9CisgIGlmIChjID49ICd7JyAmJiBjIDw9IChjaGFyKTB4MDA3ZikgeworICAgIFtzYiBhcHBlbmRTdHJpbmc6QCJcMiJdOyAvL1NoaWZ0IDMgU2V0CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChjIC0gMTIzICsgMjcpXTsKKyAgICByZXR1cm4gMjsKKyAgfQorICBpZiAoYyA+PSAodW5pY2hhcikweDAwODApIHsKKyAgICBbc2IgYXBwZW5kRm9ybWF0OkAiXDElQyIsICh1bmljaGFyKTB4MDAxZV07IC8vU2hpZnQgMiwgVXBwZXIgU2hpZnQKKyAgICBpbnQgbGVuID0gMjsKKyAgICBsZW4gKz0gW3NlbGYgZW5jb2RlQ2hhcjoodW5pY2hhcikgKGMgLSAxMjgpIGJ1ZmZlcjpzYl07CisgICAgcmV0dXJuIGxlbjsKKyAgfQorICBbWlhIaWdoTGV2ZWxFbmNvZGVyIGlsbGVnYWxDaGFyYWN0ZXI6Y107CisgIHJldHVybiAtMTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL2RhdGFtYXRyaXgvZW5jb2Rlci9aWFgxMkVuY29kZXIuaCBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhYMTJFbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2NGE4MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhYMTJFbmNvZGVyLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhDNDBFbmNvZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhYMTJFbmNvZGVyIDogWlhDNDBFbmNvZGVyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9kYXRhbWF0cml4L2VuY29kZXIvWlhYMTJFbmNvZGVyLm0gYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYWDEyRW5jb2Rlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjE3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYWDEyRW5jb2Rlci5tCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRW5jb2RlckNvbnRleHQuaCIKKyNpbXBvcnQgIlpYSGlnaExldmVsRW5jb2Rlci5oIgorI2ltcG9ydCAiWlhTeW1ib2xJbmZvLmgiCisjaW1wb3J0ICJaWFgxMkVuY29kZXIuaCIKKworQGltcGxlbWVudGF0aW9uIFpYWDEyRW5jb2RlcgorCistIChpbnQpZW5jb2RpbmdNb2RlIHsKKyAgcmV0dXJuIFtaWEhpZ2hMZXZlbEVuY29kZXIgeDEyRW5jb2RhdGlvbl07Cit9CisKKy0gKHZvaWQpZW5jb2RlOihaWEVuY29kZXJDb250ZXh0ICopY29udGV4dCB7CisgIC8vc3RlcCBDCisgIE5TTXV0YWJsZVN0cmluZyAqYnVmZmVyID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICB3aGlsZSAoW2NvbnRleHQgaGFzTW9yZUNoYXJhY3RlcnNdKSB7CisgICAgdW5pY2hhciBjID0gW2NvbnRleHQgY3VycmVudENoYXJdOworICAgIGNvbnRleHQucG9zKys7CisKKyAgICBbc2VsZiBlbmNvZGVDaGFyOmMgYnVmZmVyOmJ1ZmZlcl07CisKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gYnVmZmVyLmxlbmd0aDsKKyAgICBpZiAoKGNvdW50ICUgMykgPT0gMCkgeworICAgICAgW3NlbGYgd3JpdGVOZXh0VHJpcGxldDpjb250ZXh0IGJ1ZmZlcjpidWZmZXJdOworCisgICAgICBpbnQgbmV3TW9kZSA9IFtaWEhpZ2hMZXZlbEVuY29kZXIgbG9va0FoZWFkVGVzdDpjb250ZXh0Lm1lc3NhZ2Ugc3RhcnRwb3M6Y29udGV4dC5wb3MgY3VycmVudE1vZGU6W3NlbGYgZW5jb2RpbmdNb2RlXV07CisgICAgICBpZiAobmV3TW9kZSAhPSBbc2VsZiBlbmNvZGluZ01vZGVdKSB7CisgICAgICAgIFtjb250ZXh0IHNpZ25hbEVuY29kZXJDaGFuZ2U6bmV3TW9kZV07CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorICBbc2VsZiBoYW5kbGVFT0Q6Y29udGV4dCBidWZmZXI6YnVmZmVyXTsKK30KKworLSAoaW50KWVuY29kZUNoYXI6KHVuaWNoYXIpYyBidWZmZXI6KE5TTXV0YWJsZVN0cmluZyAqKXNiIHsKKyAgaWYgKGMgPT0gJ1xyJykgeworICAgIFtzYiBhcHBlbmRTdHJpbmc6QCJcMCJdOworICB9IGVsc2UgaWYgKGMgPT0gJyonKSB7CisgICAgW3NiIGFwcGVuZFN0cmluZzpAIlwxIl07CisgIH0gZWxzZSBpZiAoYyA9PSAnPicpIHsKKyAgICBbc2IgYXBwZW5kU3RyaW5nOkAiXDIiXTsKKyAgfSBlbHNlIGlmIChjID09ICcgJykgeworICAgIFtzYiBhcHBlbmRTdHJpbmc6QCJcMyJdOworICB9IGVsc2UgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChjIC0gNDggKyA0KV07CisgIH0gZWxzZSBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHsKKyAgICBbc2IgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgKGMgLSA2NSArIDE0KV07CisgIH0gZWxzZSB7CisgICAgW1pYSGlnaExldmVsRW5jb2RlciBpbGxlZ2FsQ2hhcmFjdGVyOmNdOworICB9CisgIHJldHVybiAxOworfQorCistICh2b2lkKWhhbmRsZUVPRDooWlhFbmNvZGVyQ29udGV4dCAqKWNvbnRleHQgYnVmZmVyOihOU011dGFibGVTdHJpbmcgKilidWZmZXIgeworICBbY29udGV4dCB1cGRhdGVTeW1ib2xJbmZvXTsKKyAgaW50IGF2YWlsYWJsZSA9IGNvbnRleHQuc3ltYm9sSW5mby5kYXRhQ2FwYWNpdHkgLSBbY29udGV4dCBjb2Rld29yZENvdW50XTsKKyAgTlNVSW50ZWdlciBjb3VudCA9IGJ1ZmZlci5sZW5ndGg7CisgIGlmIChjb3VudCA9PSAyKSB7CisgICAgW2NvbnRleHQgd3JpdGVDb2Rld29yZDpbWlhIaWdoTGV2ZWxFbmNvZGVyIHgxMlVubGF0Y2hdXTsKKyAgICBjb250ZXh0LnBvcyAtPSAyOworICAgIFtjb250ZXh0IHNpZ25hbEVuY29kZXJDaGFuZ2U6W1pYSGlnaExldmVsRW5jb2RlciBhc2NpaUVuY29kYXRpb25dXTsKKyAgfSBlbHNlIGlmIChjb3VudCA9PSAxKSB7CisgICAgY29udGV4dC5wb3MtLTsKKyAgICBpZiAoYXZhaWxhYmxlID4gMSkgeworICAgICAgW2NvbnRleHQgd3JpdGVDb2Rld29yZDpbWlhIaWdoTGV2ZWxFbmNvZGVyIHgxMlVubGF0Y2hdXTsKKyAgICB9CisgICAgLy9OT1AgLSBObyB1bmxhdGNoIG5lY2Vzc2FyeQorICAgIFtjb250ZXh0IHNpZ25hbEVuY29kZXJDaGFuZ2U6W1pYSGlnaExldmVsRW5jb2RlciBhc2NpaUVuY29kYXRpb25dXTsKKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvbWF4aWNvZGUvWlhNYXhpQ29kZVJlYWRlci5oIGIvWlhpbmdPYmpDL21heGljb2RlL1pYTWF4aUNvZGVSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Y0MmIwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL21heGljb2RlL1pYTWF4aUNvZGVSZWFkZXIuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlYWRlci5oIgorCitAY2xhc3MgWlhCaW5hcnlCaXRtYXAsIFpYRGVjb2RlSGludHMsIFpYUmVzdWx0OworCisvKioKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGRldGVjdCBhbmQgZGVjb2RlIGEgTWF4aUNvZGUgaW4gYW4gaW1hZ2UuCisgKi8KK0BpbnRlcmZhY2UgWlhNYXhpQ29kZVJlYWRlciA6IE5TT2JqZWN0IDxaWFJlYWRlcj4KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL21heGljb2RlL1pYTWF4aUNvZGVSZWFkZXIubSBiL1pYaW5nT2JqQy9tYXhpY29kZS9aWE1heGlDb2RlUmVhZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmZTIxNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9tYXhpY29kZS9aWE1heGlDb2RlUmVhZGVyLm0KQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQmluYXJ5Qml0bWFwLmgiCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhEZWNvZGVIaW50cy5oIgorI2ltcG9ydCAiWlhEZWNvZGVyUmVzdWx0LmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhNYXhpQ29kZURlY29kZXIuaCIKKyNpbXBvcnQgIlpYTWF4aUNvZGVSZWFkZXIuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisKK2NvbnN0IGludCBNQVRSSVhfV0lEVEggPSAzMDsKK2NvbnN0IGludCBNQVRSSVhfSEVJR0hUID0gMzM7CisKK0BpbnRlcmZhY2UgWlhNYXhpQ29kZVJlYWRlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWE1heGlDb2RlRGVjb2RlciAqZGVjb2RlcjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhNYXhpQ29kZVJlYWRlcgorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfZGVjb2RlciA9IFtbWlhNYXhpQ29kZURlY29kZXIgYWxsb2NdIGluaXRdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy8qKgorICogTG9jYXRlcyBhbmQgZGVjb2RlcyBhIE1heGlDb2RlIGNvZGUgaW4gYW4gaW1hZ2UuCisgKi8KKy0gKFpYUmVzdWx0ICopZGVjb2RlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtzZWxmIGRlY29kZTppbWFnZSBoaW50czpuaWwgZXJyb3I6ZXJyb3JdOworfQorCistIChaWFJlc3VsdCAqKWRlY29kZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgWlhEZWNvZGVyUmVzdWx0ICpkZWNvZGVyUmVzdWx0OworICBpZiAoaGludHMgIT0gbmlsICYmIGhpbnRzLnB1cmVCYXJjb2RlKSB7CisgICAgWlhCaXRNYXRyaXggKm1hdHJpeCA9IFtpbWFnZSBibGFja01hdHJpeFdpdGhFcnJvcjplcnJvcl07CisgICAgaWYgKCFtYXRyaXgpIHsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIFpYQml0TWF0cml4ICpiaXRzID0gW3NlbGYgZXh0cmFjdFB1cmVCaXRzOm1hdHJpeF07CisgICAgaWYgKCFiaXRzKSB7CisgICAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgZGVjb2RlclJlc3VsdCA9IFtzZWxmLmRlY29kZXIgZGVjb2RlOmJpdHMgaGludHM6aGludHMgZXJyb3I6ZXJyb3JdOworICAgIGlmICghZGVjb2RlclJlc3VsdCkgeworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNBcnJheSAqcG9pbnRzID0gQFtdOworICBaWFJlc3VsdCAqcmVzdWx0ID0gW1pYUmVzdWx0IHJlc3VsdFdpdGhUZXh0OmRlY29kZXJSZXN1bHQudGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdCeXRlczpkZWNvZGVyUmVzdWx0LnJhd0J5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOmRlY29kZXJSZXN1bHQubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UG9pbnRzOnBvaW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDprQmFyY29kZUZvcm1hdE1heGlDb2RlXTsKKworICBOU1N0cmluZyAqZWNMZXZlbCA9IGRlY29kZXJSZXN1bHQuZWNMZXZlbDsKKyAgaWYgKGVjTGV2ZWwgIT0gbmlsKSB7CisgICAgW3Jlc3VsdCBwdXRNZXRhZGF0YTprUmVzdWx0TWV0YWRhdGFUeXBlRXJyb3JDb3JyZWN0aW9uTGV2ZWwgdmFsdWU6ZWNMZXZlbF07CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAodm9pZClyZXNldCB7CisgIC8vIGRvIG5vdGhpbmcKK30KKworLyoqCisgKiBUaGlzIG1ldGhvZCBkZXRlY3RzIGEgY29kZSBpbiBhICJwdXJlIiBpbWFnZSAtLSB0aGF0IGlzLCBwdXJlIG1vbm9jaHJvbWUgaW1hZ2UKKyAqIHdoaWNoIGNvbnRhaW5zIG9ubHkgYW4gdW5yb3RhdGVkLCB1bnNrZXdlZCwgaW1hZ2Ugb2YgYSBjb2RlLCB3aXRoIHNvbWUgd2hpdGUgYm9yZGVyCisgKiBhcm91bmQgaXQuIFRoaXMgaXMgYSBzcGVjaWFsaXplZCBtZXRob2QgdGhhdCB3b3JrcyBleGNlcHRpb25hbGx5IGZhc3QgaW4gdGhpcyBzcGVjaWFsCisgKiBjYXNlLgorICovCistIChaWEJpdE1hdHJpeCAqKWV4dHJhY3RQdXJlQml0czooWlhCaXRNYXRyaXggKilpbWFnZSB7CisgIE5TQXJyYXkgKmVuY2xvc2luZ1JlY3RhbmdsZSA9IGltYWdlLmVuY2xvc2luZ1JlY3RhbmdsZTsKKyAgaWYgKGVuY2xvc2luZ1JlY3RhbmdsZSA9PSBuaWwpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaW50IGxlZnQgPSBbZW5jbG9zaW5nUmVjdGFuZ2xlWzBdIGludFZhbHVlXTsKKyAgaW50IHRvcCA9IFtlbmNsb3NpbmdSZWN0YW5nbGVbMV0gaW50VmFsdWVdOworICBpbnQgd2lkdGggPSBbZW5jbG9zaW5nUmVjdGFuZ2xlWzJdIGludFZhbHVlXTsKKyAgaW50IGhlaWdodCA9IFtlbmNsb3NpbmdSZWN0YW5nbGVbM10gaW50VmFsdWVdOworCisgIC8vIE5vdyBqdXN0IHJlYWQgb2ZmIHRoZSBiaXRzCisgIFpYQml0TWF0cml4ICpiaXRzID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDpNQVRSSVhfV0lEVEggaGVpZ2h0Ok1BVFJJWF9IRUlHSFRdOworICBmb3IgKGludCB5ID0gMDsgeSA8IE1BVFJJWF9IRUlHSFQ7IHkrKykgeworICAgIGludCBpeSA9IHRvcCArICh5ICogaGVpZ2h0ICsgaGVpZ2h0IC8gMikgLyBNQVRSSVhfSEVJR0hUOworICAgIGZvciAoaW50IHggPSAwOyB4IDwgTUFUUklYX1dJRFRIOyB4KyspIHsKKyAgICAgIGludCBpeCA9IGxlZnQgKyAoeCAqIHdpZHRoICsgd2lkdGggLyAyICsgKHkgJiAweDAxKSAqICB3aWR0aCAvIDIpIC8gTUFUUklYX1dJRFRIOworICAgICAgaWYgKFtpbWFnZSBnZXRYOml4IHk6aXldKSB7CisgICAgICAgIFtiaXRzIHNldFg6eCB5OnldOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBiaXRzOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvbWF4aWNvZGUvZGVjb2Rlci9aWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLmggYi9aWGluZ09iakMvbWF4aWNvZGUvZGVjb2Rlci9aWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxOGE5NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9tYXhpY29kZS9kZWNvZGVyL1pYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAY2xhc3MgWlhCaXRNYXRyaXg7CisKK0BpbnRlcmZhY2UgWlhNYXhpQ29kZUJpdE1hdHJpeFBhcnNlciA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoQml0TWF0cml4OihaWEJpdE1hdHJpeCAqKWJpdE1hdHJpeCBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKE5TQXJyYXkgKilyZWFkQ29kZXdvcmRzOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvbWF4aWNvZGUvZGVjb2Rlci9aWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLm0gYi9aWGluZ09iakMvbWF4aWNvZGUvZGVjb2Rlci9aWE1heGlDb2RlQml0TWF0cml4UGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyZjdhZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9tYXhpY29kZS9kZWNvZGVyL1pYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIubQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIuaCIKKworY29uc3QgaW50IEJJVE5SWzMzXVszMF0gPSB7CisgIHsxMjEsMTIwLDEyNywxMjYsMTMzLDEzMiwxMzksMTM4LDE0NSwxNDQsMTUxLDE1MCwxNTcsMTU2LDE2MywxNjIsMTY5LDE2OCwxNzUsMTc0LDE4MSwxODAsMTg3LDE4NiwxOTMsMTkyLDE5OSwxOTgsIC0yLCAtMn0sCisgIHsxMjMsMTIyLDEyOSwxMjgsMTM1LDEzNCwxNDEsMTQwLDE0NywxNDYsMTUzLDE1MiwxNTksMTU4LDE2NSwxNjQsMTcxLDE3MCwxNzcsMTc2LDE4MywxODIsMTg5LDE4OCwxOTUsMTk0LDIwMSwyMDAsODE2LCAtM30sCisgIHsxMjUsMTI0LDEzMSwxMzAsMTM3LDEzNiwxNDMsMTQyLDE0OSwxNDgsMTU1LDE1NCwxNjEsMTYwLDE2NywxNjYsMTczLDE3MiwxNzksMTc4LDE4NSwxODQsMTkxLDE5MCwxOTcsMTk2LDIwMywyMDIsODE4LDgxN30sCisgIHsyODMsMjgyLDI3NywyNzYsMjcxLDI3MCwyNjUsMjY0LDI1OSwyNTgsMjUzLDI1MiwyNDcsMjQ2LDI0MSwyNDAsMjM1LDIzNCwyMjksMjI4LDIyMywyMjIsMjE3LDIxNiwyMTEsMjEwLDIwNSwyMDQsODE5LCAtM30sCisgIHsyODUsMjg0LDI3OSwyNzgsMjczLDI3MiwyNjcsMjY2LDI2MSwyNjAsMjU1LDI1NCwyNDksMjQ4LDI0MywyNDIsMjM3LDIzNiwyMzEsMjMwLDIyNSwyMjQsMjE5LDIxOCwyMTMsMjEyLDIwNywyMDYsODIxLDgyMH0sCisgIHsyODcsMjg2LDI4MSwyODAsMjc1LDI3NCwyNjksMjY4LDI2MywyNjIsMjU3LDI1NiwyNTEsMjUwLDI0NSwyNDQsMjM5LDIzOCwyMzMsMjMyLDIyNywyMjYsMjIxLDIyMCwyMTUsMjE0LDIwOSwyMDgsODIyLCAtM30sCisgIHsyODksMjg4LDI5NSwyOTQsMzAxLDMwMCwzMDcsMzA2LDMxMywzMTIsMzE5LDMxOCwzMjUsMzI0LDMzMSwzMzAsMzM3LDMzNiwzNDMsMzQyLDM0OSwzNDgsMzU1LDM1NCwzNjEsMzYwLDM2NywzNjYsODI0LDgyM30sCisgIHsyOTEsMjkwLDI5NywyOTYsMzAzLDMwMiwzMDksMzA4LDMxNSwzMTQsMzIxLDMyMCwzMjcsMzI2LDMzMywzMzIsMzM5LDMzOCwzNDUsMzQ0LDM1MSwzNTAsMzU3LDM1NiwzNjMsMzYyLDM2OSwzNjgsODI1LCAtM30sCisgIHsyOTMsMjkyLDI5OSwyOTgsMzA1LDMwNCwzMTEsMzEwLDMxNywzMTYsMzIzLDMyMiwzMjksMzI4LDMzNSwzMzQsMzQxLDM0MCwzNDcsMzQ2LDM1MywzNTIsMzU5LDM1OCwzNjUsMzY0LDM3MSwzNzAsODI3LDgyNn0sCisgIHs0MDksNDA4LDQwMyw0MDIsMzk3LDM5NiwzOTEsMzkwLCA3OSwgNzgsIC0yLCAtMiwgMTMsIDEyLCAzNywgMzYsICAyLCAtMSwgNDQsIDQzLDEwOSwxMDgsMzg1LDM4NCwzNzksMzc4LDM3MywzNzIsODI4LCAtM30sCisgIHs0MTEsNDEwLDQwNSw0MDQsMzk5LDM5OCwzOTMsMzkyLCA4MSwgODAsIDQwLCAtMiwgMTUsIDE0LCAzOSwgMzgsICAzLCAtMSwgLTEsIDQ1LDExMSwxMTAsMzg3LDM4NiwzODEsMzgwLDM3NSwzNzQsODMwLDgyOX0sCisgIHs0MTMsNDEyLDQwNyw0MDYsNDAxLDQwMCwzOTUsMzk0LCA4MywgODIsIDQxLCAtMywgLTMsIC0zLCAtMywgLTMsICA1LCAgNCwgNDcsIDQ2LDExMywxMTIsMzg5LDM4OCwzODMsMzgyLDM3NywzNzYsODMxLCAtM30sCisgIHs0MTUsNDE0LDQyMSw0MjAsNDI3LDQyNiwxMDMsMTAyLCA1NSwgNTQsIDE2LCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgMjAsIDE5LCA4NSwgODQsNDMzLDQzMiw0MzksNDM4LDQ0NSw0NDQsODMzLDgzMn0sCisgIHs0MTcsNDE2LDQyMyw0MjIsNDI5LDQyOCwxMDUsMTA0LCA1NywgNTYsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgMjIsIDIxLCA4NywgODYsNDM1LDQzNCw0NDEsNDQwLDQ0Nyw0NDYsODM0LCAtM30sCisgIHs0MTksNDE4LDQyNSw0MjQsNDMxLDQzMCwxMDcsMTA2LCA1OSwgNTgsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIDIzLCA4OSwgODgsNDM3LDQzNiw0NDMsNDQyLDQ0OSw0NDgsODM2LDgzNX0sCisgIHs0ODEsNDgwLDQ3NSw0NzQsNDY5LDQ2OCwgNDgsIC0yLCAzMCwgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsICAwLCA1MywgNTIsNDYzLDQ2Miw0NTcsNDU2LDQ1MSw0NTAsODM3LCAtM30sCisgIHs0ODMsNDgyLDQ3Nyw0NzYsNDcxLDQ3MCwgNDksIC0xLCAtMiwgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMiwgLTEsNDY1LDQ2NCw0NTksNDU4LDQ1Myw0NTIsODM5LDgzOH0sCisgIHs0ODUsNDg0LDQ3OSw0NzgsNDczLDQ3MiwgNTEsIDUwLCAzMSwgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsICAxLCAtMiwgNDIsNDY3LDQ2Niw0NjEsNDYwLDQ1NSw0NTQsODQwLCAtM30sCisgIHs0ODcsNDg2LDQ5Myw0OTIsNDk5LDQ5OCwgOTcsIDk2LCA2MSwgNjAsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIDI2LCA5MSwgOTAsNTA1LDUwNCw1MTEsNTEwLDUxNyw1MTYsODQyLDg0MX0sCisgIHs0ODksNDg4LDQ5NSw0OTQsNTAxLDUwMCwgOTksIDk4LCA2MywgNjIsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgMjgsIDI3LCA5MywgOTIsNTA3LDUwNiw1MTMsNTEyLDUxOSw1MTgsODQzLCAtM30sCisgIHs0OTEsNDkwLDQ5Nyw0OTYsNTAzLDUwMiwxMDEsMTAwLCA2NSwgNjQsIDE3LCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgMTgsIDI5LCA5NSwgOTQsNTA5LDUwOCw1MTUsNTE0LDUyMSw1MjAsODQ1LDg0NH0sCisgIHs1NTksNTU4LDU1Myw1NTIsNTQ3LDU0Niw1NDEsNTQwLCA3MywgNzIsIDMyLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAxMCwgNjcsIDY2LDExNSwxMTQsNTM1LDUzNCw1MjksNTI4LDUyMyw1MjIsODQ2LCAtM30sCisgIHs1NjEsNTYwLDU1NSw1NTQsNTQ5LDU0OCw1NDMsNTQyLCA3NSwgNzQsIC0yLCAtMSwgIDcsICA2LCAzNSwgMzQsIDExLCAtMiwgNjksIDY4LDExNywxMTYsNTM3LDUzNiw1MzEsNTMwLDUyNSw1MjQsODQ4LDg0N30sCisgIHs1NjMsNTYyLDU1Nyw1NTYsNTUxLDU1MCw1NDUsNTQ0LCA3NywgNzYsIC0yLCAzMywgIDksICA4LCAyNSwgMjQsIC0xLCAtMiwgNzEsIDcwLDExOSwxMTgsNTM5LDUzOCw1MzMsNTMyLDUyNyw1MjYsODQ5LCAtM30sCisgIHs1NjUsNTY0LDU3MSw1NzAsNTc3LDU3Niw1ODMsNTgyLDU4OSw1ODgsNTk1LDU5NCw2MDEsNjAwLDYwNyw2MDYsNjEzLDYxMiw2MTksNjE4LDYyNSw2MjQsNjMxLDYzMCw2MzcsNjM2LDY0Myw2NDIsODUxLDg1MH0sCisgIHs1NjcsNTY2LDU3Myw1NzIsNTc5LDU3OCw1ODUsNTg0LDU5MSw1OTAsNTk3LDU5Niw2MDMsNjAyLDYwOSw2MDgsNjE1LDYxNCw2MjEsNjIwLDYyNyw2MjYsNjMzLDYzMiw2MzksNjM4LDY0NSw2NDQsODUyLCAtM30sCisgIHs1NjksNTY4LDU3NSw1NzQsNTgxLDU4MCw1ODcsNTg2LDU5Myw1OTIsNTk5LDU5OCw2MDUsNjA0LDYxMSw2MTAsNjE3LDYxNiw2MjMsNjIyLDYyOSw2MjgsNjM1LDYzNCw2NDEsNjQwLDY0Nyw2NDYsODU0LDg1M30sCisgIHs3MjcsNzI2LDcyMSw3MjAsNzE1LDcxNCw3MDksNzA4LDcwMyw3MDIsNjk3LDY5Niw2OTEsNjkwLDY4NSw2ODQsNjc5LDY3OCw2NzMsNjcyLDY2Nyw2NjYsNjYxLDY2MCw2NTUsNjU0LDY0OSw2NDgsODU1LCAtM30sCisgIHs3MjksNzI4LDcyMyw3MjIsNzE3LDcxNiw3MTEsNzEwLDcwNSw3MDQsNjk5LDY5OCw2OTMsNjkyLDY4Nyw2ODYsNjgxLDY4MCw2NzUsNjc0LDY2OSw2NjgsNjYzLDY2Miw2NTcsNjU2LDY1MSw2NTAsODU3LDg1Nn0sCisgIHs3MzEsNzMwLDcyNSw3MjQsNzE5LDcxOCw3MTMsNzEyLDcwNyw3MDYsNzAxLDcwMCw2OTUsNjk0LDY4OSw2ODgsNjgzLDY4Miw2NzcsNjc2LDY3MSw2NzAsNjY1LDY2NCw2NTksNjU4LDY1Myw2NTIsODU4LCAtM30sCisgIHs3MzMsNzMyLDczOSw3MzgsNzQ1LDc0NCw3NTEsNzUwLDc1Nyw3NTYsNzYzLDc2Miw3NjksNzY4LDc3NSw3NzQsNzgxLDc4MCw3ODcsNzg2LDc5Myw3OTIsNzk5LDc5OCw4MDUsODA0LDgxMSw4MTAsODYwLDg1OX0sCisgIHs3MzUsNzM0LDc0MSw3NDAsNzQ3LDc0Niw3NTMsNzUyLDc1OSw3NTgsNzY1LDc2NCw3NzEsNzcwLDc3Nyw3NzYsNzgzLDc4Miw3ODksNzg4LDc5NSw3OTQsODAxLDgwMCw4MDcsODA2LDgxMyw4MTIsODYxLCAtM30sCisgIHs3MzcsNzM2LDc0Myw3NDIsNzQ5LDc0OCw3NTUsNzU0LDc2MSw3NjAsNzY3LDc2Niw3NzMsNzcyLDc3OSw3NzgsNzg1LDc4NCw3OTEsNzkwLDc5Nyw3OTYsODAzLDgwMiw4MDksODA4LDgxNSw4MTQsODYzLDg2Mn0KK307CisKK0BpbnRlcmZhY2UgWlhNYXhpQ29kZUJpdE1hdHJpeFBhcnNlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWEJpdE1hdHJpeCAqYml0TWF0cml4OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWE1heGlDb2RlQml0TWF0cml4UGFyc2VyCisKKy0gKGlkKWluaXRXaXRoQml0TWF0cml4OihaWEJpdE1hdHJpeCAqKWJpdE1hdHJpeCBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2JpdE1hdHJpeCA9IGJpdE1hdHJpeDsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChOU0FycmF5ICopcmVhZENvZGV3b3JkcyB7CisgIGNvbnN0IGludCByZXN1bHRMZW5ndGggPSAxNDQ7CisgIGludDhfdCByZXN1bHRbcmVzdWx0TGVuZ3RoXTsKKyAgbWVtc2V0KHJlc3VsdCwgMCwgcmVzdWx0TGVuZ3RoICogc2l6ZW9mKGludDhfdCkpOworCisgIGludCBoZWlnaHQgPSBzZWxmLmJpdE1hdHJpeC5oZWlnaHQ7CisgIGludCB3aWR0aCA9IHNlbGYuYml0TWF0cml4LndpZHRoOworICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgaW50ICpiaXRuclJvdyA9IChpbnQgKilCSVROUlt5XTsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgIGludCBiaXQgPSBiaXRuclJvd1t4XTsKKyAgICAgIGlmIChiaXQgPj0gMCAmJiBbc2VsZi5iaXRNYXRyaXggZ2V0WDp4IHk6eV0pIHsKKyAgICAgICAgcmVzdWx0W2JpdCAvIDZdIHw9IChpbnQ4X3QpICgxIDw8ICg1IC0gKGJpdCAlIDYpKSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdEFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnJlc3VsdExlbmd0aF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0TGVuZ3RoOyBpKyspIHsKKyAgICBbcmVzdWx0QXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQ2hhcjpyZXN1bHRbaV1dXTsKKyAgfQorCisgIHJldHVybiByZXN1bHRBcnJheTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL21heGljb2RlL2RlY29kZXIvWlhNYXhpQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCBiL1pYaW5nT2JqQy9tYXhpY29kZS9kZWNvZGVyL1pYTWF4aUNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwMTczZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9tYXhpY29kZS9kZWNvZGVyL1pYTWF4aUNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBNYXhpQ29kZXMgY2FuIGVuY29kZSB0ZXh0IG9yIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gYXMgYml0cyBpbiBvbmUgb2Ygc2V2ZXJhbCBtb2RlcywKKyAqIHdpdGggbXVsdGlwbGUgY2hhcmFjdGVyIHNldHMgaW4gb25lIGNvZGUuIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgYml0cyBiYWNrIGludG8gdGV4dC4KKyAqLworCitAY2xhc3MgWlhEZWNvZGVyUmVzdWx0OworCitAaW50ZXJmYWNlIFpYTWF4aUNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyIDogTlNPYmplY3QKKworKyAoWlhEZWNvZGVyUmVzdWx0ICopZGVjb2RlOihpbnQ4X3QgKilieXRlcyBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGggbW9kZTooaW50KW1vZGU7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9tYXhpY29kZS9kZWNvZGVyL1pYTWF4aUNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLm0gYi9aWGluZ09iakMvbWF4aWNvZGUvZGVjb2Rlci9aWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMDVlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvbWF4aWNvZGUvZGVjb2Rlci9aWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERlY29kZXJSZXN1bHQuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIgorCitjb25zdCB1bmljaGFyIFNISUZUQSA9IDB4RkZGMDsKK2NvbnN0IHVuaWNoYXIgU0hJRlRCID0gMHhGRkYxOworY29uc3QgdW5pY2hhciBTSElGVEMgPSAweEZGRjI7Citjb25zdCB1bmljaGFyIFNISUZURCA9IDB4RkZGMzsKK2NvbnN0IHVuaWNoYXIgU0hJRlRFID0gMHhGRkY0OworY29uc3QgdW5pY2hhciBUV09TSElGVEEgPSAweEZGRjU7Citjb25zdCB1bmljaGFyIFRIUkVFU0hJRlRBID0gMHhGRkY2OworY29uc3QgdW5pY2hhciBMQVRDSEEgPSAweEZGRjc7Citjb25zdCB1bmljaGFyIExBVENIQiA9IDB4RkZGODsKK2NvbnN0IHVuaWNoYXIgTE9DSyA9IDB4RkZGOTsKK2NvbnN0IHVuaWNoYXIgRUNJID0gMHhGRkZBOworY29uc3QgdW5pY2hhciBOUyA9IDB4RkZGQjsKK2NvbnN0IHVuaWNoYXIgUEFEID0gMHhGRkZDOworY29uc3QgdW5pY2hhciBGUyA9IDB4MDAxQzsKK2NvbnN0IHVuaWNoYXIgR1MgPSAweDAwMUQ7Citjb25zdCB1bmljaGFyIFJTID0gMHgwMDFFOworCitjb25zdCB1bmljaGFyIFNFVFNbMV1bMzgzXSA9IHsKKyAgJ1xuJywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsICdVJywgJ1YnLCAnVycsCisgICdYJywgJ1knLCAnWicsIEVDSSwgRlMsIEdTLCBSUywgTlMsICcgJywgUEFELCAnIicsICcjJywgJyQnLCAnJScsICcmJywgJ1wnJywgJygnLCAnKScsICcqJywgJysnLCAnLCcsICctJywgJy4nLCAnLycsICcwJywKKyAgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJzonLCBTSElGVEIsIFNISUZUQywgU0hJRlRELCBTSElGVEUsIExBVENIQiwKKyAgJ2AnLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICdoJywgJ2knLCAnaicsICdrJywgJ2wnLCAnbScsICduJywgJ28nLCAncCcgLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsCisgICd4JywgJ3knLCAneicsIEVDSSwgRlMsIEdTLCBSUywgTlMsICd7JywgUEFELCAnfScsICd+JywgMHgwMDdGLCAnOycsICc8JywgJz0nLCAnPicsICc/JywgJ1snLCAnXFwnLCAnXScsICdeJywgJ18nLCAnICcsCisgICcsJywgJy4nLCAnLycsICc6JywgJ0AnLCAnIScsICd8JywgUEFELCBUV09TSElGVEEsIFRIUkVFU0hJRlRBLCBQQUQsIFNISUZUQSwgU0hJRlRDLCBTSElGVEQsIFNISUZURSwgTEFUQ0hBLAorICAweDAwQzAsIDB4MDBDMSwgMHgwMEMyLCAweDAwQzMsIDB4MDBDNCwgMHgwMEM1LCAweDAwQzYsIDB4MDBDNywgMHgwMEM4LCAweDAwQzksIDB4MDBDQSwgMHgwMENCLCAweDAwQ0MsIDB4MDBDRCwgMHgwMENFLAorICAweDAwQ0YsIDB4MDBEMCwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0LCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LCAweDAwRDgsIDB4MDBEOSwgMHgwMERBLCBFQ0ksIEZTLCBHUywgUlMsIDB4MDBEQiwKKyAgMHgwMERDLCAweDAwREQsIDB4MDBERSwgMHgwMERGLCAweDAwQUEsIDB4MDBBQywgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMEI1LCAweDAwQjksIDB4MDBCQSwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwKKyAgMHgwMDgwLCAweDAwODEsIDB4MDA4MiwgMHgwMDgzLCAweDAwODQsIDB4MDA4NSwgMHgwMDg2LCAweDAwODcsIDB4MDA4OCwgMHgwMDg5LCBMQVRDSEEsICcgJywgTE9DSywgU0hJRlRELCBTSElGVEUsIExBVENIQiwKKyAgMHgwMEUwLCAweDAwRTEsIDB4MDBFMiwgMHgwMEUzLCAweDAwRTQsIDB4MDBFNSwgMHgwMEU2LCAweDAwRTcsIDB4MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwKKyAgMHgwMEVGLCAweDAwRjAsIDB4MDBGMSwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNCwgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywgMHgwMEY4LCAweDAwRjksIDB4MDBGQSwgRUNJLCBGUywgR1MsIFJTLCBOUywKKyAgMHgwMEZCLCAweDAwRkMsIDB4MDBGRCwgMHgwMEZFLCAweDAwRkYsIDB4MDBBMSwgMHgwMEE4LCAweDAwQUIsIDB4MDBBRiwgMHgwMEIwLCAweDAwQjQsIDB4MDBCNywgMHgwMEI4LCAweDAwQkIsIDB4MDBCRiwKKyAgMHgwMDhBLCAweDAwOEIsIDB4MDA4QywgMHgwMDhELCAweDAwOEUsIDB4MDA4RiwgMHgwMDkwLCAweDAwOTEsIDB4MDA5MiwgMHgwMDkzLCAweDAwOTQsIExBVENIQSwgJyAnLCBTSElGVEMsIExPQ0ssIFNISUZURSwKKyAgTEFUQ0hCLCAweDAwMDAsIDB4MDAwMSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNCwgMHgwMDA1LCAweDAwMDYsIDB4MDAwNywgMHgwMDA4LCAweDAwMDksICdcbicsIDB4MDAwQiwgMHgwMDBDLCAnXHInLAorICAweDAwMEUsIDB4MDAwRiwgMHgwMDEwLCAweDAwMTEsIDB4MDAxMiwgMHgwMDEzLCAweDAwMTQsIDB4MDAxNSwgMHgwMDE2LCAweDAwMTcsIDB4MDAxOCwgMHgwMDE5LCAweDAwMUEsIEVDSSwgUEFELCBQQUQsCisgIDB4MDAxQiwgTlMsIEZTLCBHUywgUlMsIDB4MDAxRiwgMHgwMDlGLCAweDAwQTAsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTQsIDB4MDBBNSwgMHgwMEE2LCAweDAwQTcsIDB4MDBBOSwgMHgwMEFELCAweDAwQUUsCisgIDB4MDBCNiwgMHgwMDk1LCAweDAwOTYsIDB4MDA5NywgMHgwMDk4LCAweDAwOTksIDB4MDA5QSwgMHgwMDlCLCAweDAwOUMsIDB4MDA5RCwgMHgwMDlFLCBMQVRDSEEsICcgJywgU0hJRlRDLCBTSElGVEQsIExPQ0ssCisgIExBVENIQiwgMHgwMDAwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDAzLCAweDAwMDQsIDB4MDAwNSwgMHgwMDA2LCAweDAwMDcsIDB4MDAwOCwgMHgwMDA5LCAnXG4nLCAweDAwMEIsIDB4MDAwQywgJ1xyJywKKyAgMHgwMDBFLCAweDAwMEYsIDB4MDAxMCwgMHgwMDExLCAweDAwMTIsIDB4MDAxMywgMHgwMDE0LCAweDAwMTUsIDB4MDAxNiwgMHgwMDE3LCAweDAwMTgsIDB4MDAxOSwgMHgwMDFBLCAweDAwMUIsIDB4MDAxQywKKyAgMHgwMDFELCAweDAwMUUsIDB4MDAxRiwgMHgwMDIwLCAweDAwMjEsICciJywgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsIDB4MDAyOCwgMHgwMDI5LCAweDAwMkEsIDB4MDAyQiwKKyAgMHgwMDJDLCAweDAwMkQsIDB4MDAyRSwgMHgwMDJGLCAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDAzQSwKKyAgMHgwMDNCLCAweDAwM0MsIDB4MDAzRCwgMHgwMDNFLCAweDAwM0YKK307CisKK0BpbXBsZW1lbnRhdGlvbiBaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlcgorCisrIChaWERlY29kZXJSZXN1bHQgKilkZWNvZGU6KGludDhfdCAqKWJ5dGVzIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCBtb2RlOihpbnQpbW9kZSB7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6MTQ0XTsKKyAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzogeworICAgICAgTlNTdHJpbmcgKnBvc3Rjb2RlOworICAgICAgaWYgKG1vZGUgPT0gMikgeworICAgICAgICBpbnQgcGMgPSBbc2VsZiBwb3N0Q29kZTI6Ynl0ZXMgbGVuZ3RoOmxlbmd0aF07CisgICAgICAgIHBvc3Rjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlOWQiLCBwY107CisgICAgICB9IGVsc2UgeworICAgICAgICBwb3N0Y29kZSA9IFtzZWxmIHBvc3RDb2RlMzpieXRlcyBsZW5ndGg6bGVuZ3RoXTsKKyAgICAgIH0KKyAgICAgIE5TU3RyaW5nICpjb3VudHJ5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlM2QiLCBbc2VsZiBjb3VudHJ5OmJ5dGVzIGxlbmd0aDpsZW5ndGhdXTsKKyAgICAgIE5TU3RyaW5nICpzZXJ2aWNlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlM2QiLCBbc2VsZiBzZXJ2aWNlQ2xhc3M6Ynl0ZXMgbGVuZ3RoOmxlbmd0aF1dOworICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6W3NlbGYgbWVzc2FnZTpieXRlcyBsZW5ndGg6bGVuZ3RoIHN0YXJ0OjEwIGxlbjo4NF1dOworICAgICAgaWYgKFtyZXN1bHQgaGFzUHJlZml4OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiWyk+JUMwMSVDIiwgUlMsIEdTXV0pIHsKKyAgICAgICAgW3Jlc3VsdCBpbnNlcnRTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVDJUAlQyVAJUMiLCBwb3N0Y29kZSwgR1MsIGNvdW50cnksIEdTLCBzZXJ2aWNlLCBHU10gYXRJbmRleDo5XTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIFtyZXN1bHQgaW5zZXJ0U3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQyVAJUMlQCVDIiwgcG9zdGNvZGUsIEdTLCBjb3VudHJ5LCBHUywgc2VydmljZSwgR1NdIGF0SW5kZXg6MF07CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSA0OgorICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6W3NlbGYgbWVzc2FnZTpieXRlcyBsZW5ndGg6bGVuZ3RoIHN0YXJ0OjEgbGVuOjkzXV07CisgICAgICBicmVhazsKKyAgICBjYXNlIDU6CisgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpbc2VsZiBtZXNzYWdlOmJ5dGVzIGxlbmd0aDpsZW5ndGggc3RhcnQ6MSBsZW46NzddXTsKKyAgICAgIGJyZWFrOworICB9CisgIHJldHVybiBbW1pYRGVjb2RlclJlc3VsdCBhbGxvY10gaW5pdFdpdGhSYXdCeXRlczpieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OnJlc3VsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVNlZ21lbnRzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0xldmVsOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCBtb2RlXV07Cit9CisKKysgKGludCliaXQ6KGludCliaXQgYnl0ZXM6KGludDhfdCAqKWJ5dGVzIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCB7CisgIGJpdC0tOworICByZXR1cm4gKGJ5dGVzW2JpdCAvIDZdICYgKDEgPDwgKDUgLSAoYml0ICUgNikpKSkgPT0gMCA/IDAgOiAxOworfQorCisrIChpbnQpaW50ZWdlcjooaW50OF90ICopYnl0ZXMgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIHg6KGludDhfdCAqKXggeExlbmd0aDoodW5zaWduZWQgaW50KXhMZW5ndGggeworICBpbnQgdmFsID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCB4TGVuZ3RoOyBpKyspIHsKKyAgICB2YWwgKz0gW3NlbGYgYml0OnhbaV0gYnl0ZXM6Ynl0ZXMgbGVuZ3RoOmxlbmd0aF0gPDwgKHhMZW5ndGggLSBpIC0gMSk7CisgIH0KKyAgcmV0dXJuIHZhbDsKK30KKworI2RlZmluZSBDT1VOVFJZX0FSUkFZX0xFTiAxMAorKyAoaW50KWNvdW50cnk6KGludDhfdCAqKWJ5dGVzIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCB7CisgIGludDhfdCBhcnJheVtDT1VOVFJZX0FSUkFZX0xFTl0gPSB7NTMsIDU0LCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCAzNywgMzh9OworCisgIHJldHVybiBbc2VsZiBpbnRlZ2VyOmJ5dGVzIGxlbmd0aDpsZW5ndGggeDphcnJheSB4TGVuZ3RoOkNPVU5UUllfQVJSQVlfTEVOXTsKK30KKworI2RlZmluZSBTRVJWSUNFX0FSUkFZX0xFTiAxMAorKyAoaW50KXNlcnZpY2VDbGFzczooaW50OF90ICopYnl0ZXMgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIHsKKyAgaW50OF90IGFycmF5W1NFUlZJQ0VfQVJSQVlfTEVOXSA9IHs1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA0OSwgNTAsIDUxLCA1Mn07CisKKyAgcmV0dXJuIFtzZWxmIGludGVnZXI6Ynl0ZXMgbGVuZ3RoOmxlbmd0aCB4OmFycmF5IHhMZW5ndGg6U0VSVklDRV9BUlJBWV9MRU5dOworfQorCisjZGVmaW5lIFBPU1RfQ09ERTJfTEVOR1RIX0xFTiAxMAorKyAoaW50KXBvc3RDb2RlMkxlbmd0aDooaW50OF90ICopYnl0ZXMgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIHsKKyAgaW50OF90IGFycmF5W1BPU1RfQ09ERTJfTEVOR1RIX0xFTl0gPSB7MzksIDQwLCA0MSwgNDIsIDMxLCAzMn07CisKKyAgcmV0dXJuIFtzZWxmIGludGVnZXI6Ynl0ZXMgbGVuZ3RoOmxlbmd0aCB4OmFycmF5IHhMZW5ndGg6UE9TVF9DT0RFMl9MRU5HVEhfTEVOXTsKK30KKworI2RlZmluZSBQT1NUX0NPREUyX0xFTiAzMAorKyAoaW50KXBvc3RDb2RlMjooaW50OF90ICopYnl0ZXMgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIHsKKyAgaW50OF90IGFycmF5W1BPU1RfQ09ERTJfTEVOXSA9IHszMywgMzQsIDM1LCAzNiwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMTksCisgICAgMjAsIDIxLCAyMiwgMjMsIDI0LCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxLCAyfTsKKworICByZXR1cm4gW3NlbGYgaW50ZWdlcjpieXRlcyBsZW5ndGg6bGVuZ3RoIHg6YXJyYXkgeExlbmd0aDpQT1NUX0NPREUyX0xFTl07Cit9CisKKyNkZWZpbmUgUE9TVF9DT0RFM19MRU4gNgorKyAoTlNTdHJpbmcgKilwb3N0Q29kZTM6KGludDhfdCAqKWJ5dGVzIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCB7CisgIGludDhfdCBhcnJheVtQT1NUX0NPREUzX0xFTl1bUE9TVF9DT0RFM19MRU5dID0geworICAgIHszOSwgNDAsIDQxLCA0MiwgMzEsIDMyfSwKKyAgICB7MzMsIDM0LCAzNSwgMzYsIDI1LCAyNn0sCisgICAgezI3LCAyOCwgMjksIDMwLCAxOSwgMjB9LAorICAgIHsyMSwgMjIsIDIzLCAyNCwgMTMsIDE0fSwKKyAgICB7MTUsIDE2LCAxNywgMTgsICA3LCAgOH0sCisgICAgeyA5LCAxMCwgMTEsIDEyLCAgMSwgIDJ9CisgIH07CisKKyAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUMlQyVDJUMlQyVDIiwKKyAgICAgICAgICBTRVRTWzBdW1tzZWxmIGludGVnZXI6Ynl0ZXMgbGVuZ3RoOmxlbmd0aCB4OmFycmF5WzBdIHhMZW5ndGg6UE9TVF9DT0RFM19MRU5dXSwKKyAgICAgICAgICBTRVRTWzBdW1tzZWxmIGludGVnZXI6Ynl0ZXMgbGVuZ3RoOmxlbmd0aCB4OmFycmF5WzFdIHhMZW5ndGg6UE9TVF9DT0RFM19MRU5dXSwKKyAgICAgICAgICBTRVRTWzBdW1tzZWxmIGludGVnZXI6Ynl0ZXMgbGVuZ3RoOmxlbmd0aCB4OmFycmF5WzJdIHhMZW5ndGg6UE9TVF9DT0RFM19MRU5dXSwKKyAgICAgICAgICBTRVRTWzBdW1tzZWxmIGludGVnZXI6Ynl0ZXMgbGVuZ3RoOmxlbmd0aCB4OmFycmF5WzNdIHhMZW5ndGg6UE9TVF9DT0RFM19MRU5dXSwKKyAgICAgICAgICBTRVRTWzBdW1tzZWxmIGludGVnZXI6Ynl0ZXMgbGVuZ3RoOmxlbmd0aCB4OmFycmF5WzRdIHhMZW5ndGg6UE9TVF9DT0RFM19MRU5dXSwKKyAgICAgICAgICBTRVRTWzBdW1tzZWxmIGludGVnZXI6Ynl0ZXMgbGVuZ3RoOmxlbmd0aCB4OmFycmF5WzVdIHhMZW5ndGg6UE9TVF9DT0RFM19MRU5dXV07Cit9CisKKysgKE5TU3RyaW5nICopbWVzc2FnZTooaW50OF90ICopYnl0ZXMgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIHN0YXJ0OihpbnQpc3RhcnQgbGVuOihpbnQpbGVuIHsKKyAgTlNNdXRhYmxlU3RyaW5nICpzYiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgaW50IHNoaWZ0ID0gLTE7CisgIGludCBzZXQgPSAwOworICBpbnQgbGFzdHNldCA9IDA7CisgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgbGVuOyBpKyspIHsKKyAgICB1bmljaGFyIGMgPSBTRVRTW3NldF1bYnl0ZXNbaV1dOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSBMQVRDSEE6CisgICAgICAgIHNldCA9IDA7CisgICAgICAgIHNoaWZ0ID0gLTE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMQVRDSEI6CisgICAgICAgIHNldCA9IDE7CisgICAgICAgIHNoaWZ0ID0gLTE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTSElGVEE6CisgICAgICBjYXNlIFNISUZUQjoKKyAgICAgIGNhc2UgU0hJRlRDOgorICAgICAgY2FzZSBTSElGVEQ6CisgICAgICBjYXNlIFNISUZURToKKyAgICAgICAgbGFzdHNldCA9IHNldDsKKyAgICAgICAgc2V0ID0gYyAtIFNISUZUQTsKKyAgICAgICAgc2hpZnQgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVFdPU0hJRlRBOgorICAgICAgICBsYXN0c2V0ID0gc2V0OworICAgICAgICBzZXQgPSAwOworICAgICAgICBzaGlmdCA9IDI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUSFJFRVNISUZUQToKKyAgICAgICAgbGFzdHNldCA9IHNldDsKKyAgICAgICAgc2V0ID0gMDsKKyAgICAgICAgc2hpZnQgPSAzOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTlM6IHsKKyAgICAgICAgaW50IG5zdmFsMSA9IGJ5dGVzWysraV0gPDwgMjQ7CisgICAgICAgIGludCBuc3ZhbDIgPSBieXRlc1srK2ldIDw8IDE4OworICAgICAgICBpbnQgbnN2YWwzID0gYnl0ZXNbKytpXSA8PCAxMjsKKyAgICAgICAgaW50IG5zdmFsNCA9IGJ5dGVzWysraV0gPDwgNjsKKyAgICAgICAgaW50IG5zdmFsNSA9IGJ5dGVzWysraV07CisgICAgICAgIGludCBuc3ZhbCA9IG5zdmFsMSArIG5zdmFsMiArIG5zdmFsMyArIG5zdmFsNCArIG5zdmFsNTsKKyAgICAgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiU5ZCIsIG5zdmFsXTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIExPQ0s6CisgICAgICAgIHNoaWZ0ID0gLTE7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgY107CisgICAgfQorICAgIGlmIChzaGlmdC0tID09IDApIHsKKyAgICAgIHNldCA9IGxhc3RzZXQ7CisgICAgfQorICB9CisgIHdoaWxlIChzYi5sZW5ndGggPiAwICYmIFtzYiBjaGFyYWN0ZXJBdEluZGV4OnNiLmxlbmd0aCAtIDFdID09IFBBRCkgeworICAgIFtzYiBkZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShzYi5sZW5ndGggLSAxLCAxKV07CisgIH0KKyAgcmV0dXJuIHNiOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvbWF4aWNvZGUvZGVjb2Rlci9aWE1heGlDb2RlRGVjb2Rlci5oIGIvWlhpbmdPYmpDL21heGljb2RlL2RlY29kZXIvWlhNYXhpQ29kZURlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGNiOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL21heGljb2RlL2RlY29kZXIvWlhNYXhpQ29kZURlY29kZXIuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIFRoZSBtYWluIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgTWF4aUNvZGUgZGVjb2RpbmcgLS0gYXMgb3Bwb3NlZCB0byBsb2NhdGluZyBhbmQgZXh0cmFjdGluZworICogdGhlIE1heGlDb2RlIGZyb20gYW4gaW1hZ2UuCisgKi8KKworQGNsYXNzIFpYQml0TWF0cml4LCBaWERlY29kZUhpbnRzLCBaWERlY29kZXJSZXN1bHQ7CisKK0BpbnRlcmZhY2UgWlhNYXhpQ29kZURlY29kZXIgOiBOU09iamVjdAorCistIChaWERlY29kZXJSZXN1bHQgKilkZWNvZGU6KFpYQml0TWF0cml4ICopYml0cyBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKFpYRGVjb2RlclJlc3VsdCAqKWRlY29kZTooWlhCaXRNYXRyaXggKiliaXRzIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9tYXhpY29kZS9kZWNvZGVyL1pYTWF4aUNvZGVEZWNvZGVyLm0gYi9aWGluZ09iakMvbWF4aWNvZGUvZGVjb2Rlci9aWE1heGlDb2RlRGVjb2Rlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMTE1MjcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvbWF4aWNvZGUvZGVjb2Rlci9aWE1heGlDb2RlRGVjb2Rlci5tCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhEZWNvZGVIaW50cy5oIgorI2ltcG9ydCAiWlhEZWNvZGVyUmVzdWx0LmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhHZW5lcmljR0YuaCIKKyNpbXBvcnQgIlpYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIuaCIKKyNpbXBvcnQgIlpYTWF4aUNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmgiCisjaW1wb3J0ICJaWE1heGlDb2RlRGVjb2Rlci5oIgorI2ltcG9ydCAiWlhSZWVkU29sb21vbkRlY29kZXIuaCIKKworY29uc3QgaW50IEFMTCA9IDA7Citjb25zdCBpbnQgRVZFTiA9IDE7Citjb25zdCBpbnQgT0REID0gMjsKKworQGludGVyZmFjZSBaWE1heGlDb2RlRGVjb2RlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWFJlZWRTb2xvbW9uRGVjb2RlciAqcnNEZWNvZGVyOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWE1heGlDb2RlRGVjb2RlcgorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfcnNEZWNvZGVyID0gW1taWFJlZWRTb2xvbW9uRGVjb2RlciBhbGxvY10gaW5pdFdpdGhGaWVsZDpbWlhHZW5lcmljR0YgTWF4aUNvZGVGaWVsZDY0XV07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoWlhEZWNvZGVyUmVzdWx0ICopZGVjb2RlOihaWEJpdE1hdHJpeCAqKWJpdHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW3NlbGYgZGVjb2RlOmJpdHMgaGludHM6bmlsIGVycm9yOmVycm9yXTsKK30KKworLSAoWlhEZWNvZGVyUmVzdWx0ICopZGVjb2RlOihaWEJpdE1hdHJpeCAqKWJpdHMgaGludHM6KFpYRGVjb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIFpYTWF4aUNvZGVCaXRNYXRyaXhQYXJzZXIgKnBhcnNlciA9IFtbWlhNYXhpQ29kZUJpdE1hdHJpeFBhcnNlciBhbGxvY10gaW5pdFdpdGhCaXRNYXRyaXg6Yml0cyBlcnJvcjplcnJvcl07CisgIGlmICghcGFyc2VyKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU011dGFibGVBcnJheSAqY29kZXdvcmRzID0gW1twYXJzZXIgcmVhZENvZGV3b3Jkc10gbXV0YWJsZUNvcHldOworCisgIGlmICghW3NlbGYgY29ycmVjdEVycm9yczpjb2Rld29yZHMgc3RhcnQ6MCBkYXRhQ29kZXdvcmRzOjEwIGVjQ29kZXdvcmRzOjEwIG1vZGU6QUxMIGVycm9yOmVycm9yXSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgaW50IG1vZGUgPSBbY29kZXdvcmRzWzBdIGNoYXJWYWx1ZV0gJiAweDBGOworICBpbnQgZGF0YXdvcmRzTGVuOworICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIDI6CisgICAgY2FzZSAzOgorICAgIGNhc2UgNDoKKyAgICAgIGlmICghW3NlbGYgY29ycmVjdEVycm9yczpjb2Rld29yZHMgc3RhcnQ6MjAgZGF0YUNvZGV3b3Jkczo4NCBlY0NvZGV3b3Jkczo0MCBtb2RlOkVWRU4gZXJyb3I6ZXJyb3JdKSB7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgICB9CisgICAgICBpZiAoIVtzZWxmIGNvcnJlY3RFcnJvcnM6Y29kZXdvcmRzIHN0YXJ0OjIwIGRhdGFDb2Rld29yZHM6ODQgZWNDb2Rld29yZHM6NDAgbW9kZTpPREQgZXJyb3I6ZXJyb3JdKSB7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgICB9CisgICAgICBkYXRhd29yZHNMZW4gPSA5NDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNToKKyAgICAgIGlmICghW3NlbGYgY29ycmVjdEVycm9yczpjb2Rld29yZHMgc3RhcnQ6MjAgZGF0YUNvZGV3b3Jkczo2OCBlY0NvZGV3b3Jkczo1NiBtb2RlOkVWRU4gZXJyb3I6ZXJyb3JdKSB7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgICB9CisgICAgICBpZiAoIVtzZWxmIGNvcnJlY3RFcnJvcnM6Y29kZXdvcmRzIHN0YXJ0OjIwIGRhdGFDb2Rld29yZHM6NjggZWNDb2Rld29yZHM6NTYgbW9kZTpPREQgZXJyb3I6ZXJyb3JdKSB7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgICB9CisgICAgICBkYXRhd29yZHNMZW4gPSA3ODsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGludDhfdCAqZGF0YXdvcmRzID0gKGludDhfdCAqKW1hbGxvYyhkYXRhd29yZHNMZW4gKiBzaXplb2YoaW50OF90KSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgIGRhdGF3b3Jkc1tpXSA9IFtjb2Rld29yZHNbaV0gY2hhclZhbHVlXTsKKyAgfQorICBmb3IgKGludCBpID0gMjA7IGkgPCBkYXRhd29yZHNMZW4gKyAxMDsgaSsrKSB7CisgICAgZGF0YXdvcmRzW2kgLSAxMF0gPSBbY29kZXdvcmRzW2ldIGNoYXJWYWx1ZV07CisgIH0KKworICBaWERlY29kZXJSZXN1bHQgKnJlc3VsdCA9IFtaWE1heGlDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlciBkZWNvZGU6ZGF0YXdvcmRzIGxlbmd0aDpkYXRhd29yZHNMZW4gbW9kZTptb2RlXTsKKyAgZnJlZShkYXRhd29yZHMpOworICByZXR1cm4gcmVzdWx0OworfQorCistIChCT09MKWNvcnJlY3RFcnJvcnM6KE5TTXV0YWJsZUFycmF5ICopY29kZXdvcmRCeXRlcyBzdGFydDooaW50KXN0YXJ0IGRhdGFDb2Rld29yZHM6KGludClkYXRhQ29kZXdvcmRzCisgICAgICAgICAgZWNDb2Rld29yZHM6KGludCllY0NvZGV3b3JkcyBtb2RlOihpbnQpbW9kZSBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGludCBjb2Rld29yZHMgPSBkYXRhQ29kZXdvcmRzICsgZWNDb2Rld29yZHM7CisKKyAgLy8gaW4gRVZFTiBvciBPREQgbW9kZSBvbmx5IGhhbGYgdGhlIGNvZGV3b3JkcworICBpbnQgZGl2aXNvciA9IG1vZGUgPT0gQUxMID8gMSA6IDI7CisKKyAgLy8gRmlyc3QgcmVhZCBpbnRvIGFuIGFycmF5IG9mIGludHMKKyAgaW50IGNvZGV3b3Jkc0ludHNMZW4gPSBjb2Rld29yZHMgLyBkaXZpc29yOworICBpbnQgKmNvZGV3b3Jkc0ludHMgPSAoaW50ICopbWFsbG9jKGNvZGV3b3Jkc0ludHNMZW4gKiBzaXplb2YoaW50KSk7CisgIG1lbXNldChjb2Rld29yZHNJbnRzLCAwLCBjb2Rld29yZHNJbnRzTGVuICogc2l6ZW9mKGludCkpOworICBmb3IgKGludCBpID0gMDsgaSA8IGNvZGV3b3JkczsgaSsrKSB7CisgICAgaWYgKChtb2RlID09IEFMTCkgfHwgKGkgJSAyID09IChtb2RlIC0gMSkpKSB7CisgICAgICBjb2Rld29yZHNJbnRzW2kgLyBkaXZpc29yXSA9IFtjb2Rld29yZEJ5dGVzW2kgKyBzdGFydF0gY2hhclZhbHVlXSAmIDB4RkY7CisgICAgfQorICB9CisKKyAgTlNFcnJvciAqZGVjb2RlRXJyb3IgPSBuaWw7CisgIGlmICghW3NlbGYucnNEZWNvZGVyIGRlY29kZTpjb2Rld29yZHNJbnRzIHJlY2VpdmVkTGVuOmNvZGV3b3Jkc0ludHNMZW4gdHdvUzplY0NvZGV3b3JkcyAvIGRpdmlzb3IgZXJyb3I6JmRlY29kZUVycm9yXSkgeworICAgIGlmIChkZWNvZGVFcnJvci5jb2RlID09IFpYUmVlZFNvbG9tb25FcnJvciAmJiBlcnJvcikgeworICAgICAgKmVycm9yID0gQ2hlY2tzdW1FcnJvckluc3RhbmNlKCk7CisgICAgfQorICAgIHJldHVybiBOTzsKKyAgfQorICAvLyBDb3B5IGJhY2sgaW50byBhcnJheSBvZiBieXRlcyAtLSBvbmx5IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIGJ5dGVzIHRoYXQgd2VyZSBkYXRhCisgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgZXJyb3JzIGluIHRoZSBlcnJvci1jb3JyZWN0aW9uIGNvZGV3b3JkcworICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGFDb2Rld29yZHM7IGkrKykgeworICAgIGlmICgobW9kZSA9PSBBTEwpIHx8IChpICUgMiA9PSAobW9kZSAtIDEpKSkgeworICAgICAgY29kZXdvcmRCeXRlc1tpICsgc3RhcnRdID0gW05TTnVtYmVyIG51bWJlcldpdGhDaGFyOmNvZGV3b3Jkc0ludHNbaSAvIGRpdmlzb3JdXTsKKyAgICB9CisgIH0KKworICByZXR1cm4gWUVTOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvbXVsdGkvWlhCeVF1YWRyYW50UmVhZGVyLmggYi9aWGluZ09iakMvbXVsdGkvWlhCeVF1YWRyYW50UmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhYWIwOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9tdWx0aS9aWEJ5UXVhZHJhbnRSZWFkZXIuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlYWRlci5oIgorCisvKioKKyAqIFRoaXMgY2xhc3MgYXR0ZW1wdHMgdG8gZGVjb2RlIGEgYmFyY29kZSBmcm9tIGFuIGltYWdlLCBub3QgYnkgc2Nhbm5pbmcgdGhlIHdob2xlIGltYWdlLAorICogYnV0IGJ5IHNjYW5uaW5nIHN1YnNldHMgb2YgdGhlIGltYWdlLiBUaGlzIGlzIGltcG9ydGFudCB3aGVuIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBiYXJjb2RlcyBpbgorICogYW4gaW1hZ2UsIGFuZCBkZXRlY3RpbmcgYSBiYXJjb2RlIG1heSBmaW5kIHBhcnRzIG9mIG11bHRpcGxlIGJhcmNvZGUgYW5kIGZhaWwgdG8gZGVjb2RlCisgKiAoZS5nLiBRUiBDb2RlcykuIEluc3RlYWQgdGhpcyBzY2FucyB0aGUgZm91ciBxdWFkcmFudHMgb2YgdGhlIGltYWdlIC0tIGFuZCBhbHNvIHRoZSBjZW50ZXIKKyAqICdxdWFkcmFudCcgdG8gY292ZXIgdGhlIGNhc2Ugd2hlcmUgYSBiYXJjb2RlIGlzIGZvdW5kIGluIHRoZSBjZW50ZXIuCisgKi8KKworQGludGVyZmFjZSBaWEJ5UXVhZHJhbnRSZWFkZXIgOiBOU09iamVjdCA8WlhSZWFkZXI+CisKKy0gKGlkKWluaXRXaXRoRGVsZWdhdGU6KGlkPFpYUmVhZGVyPilkZWxlZ2F0ZTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL211bHRpL1pYQnlRdWFkcmFudFJlYWRlci5tIGIvWlhpbmdPYmpDL211bHRpL1pYQnlRdWFkcmFudFJlYWRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOGY0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvbXVsdGkvWlhCeVF1YWRyYW50UmVhZGVyLm0KQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaW5hcnlCaXRtYXAuaCIKKyNpbXBvcnQgIlpYQnlRdWFkcmFudFJlYWRlci5oIgorI2ltcG9ydCAiWlhEZWNvZGVIaW50cy5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisKK0BpbnRlcmZhY2UgWlhCeVF1YWRyYW50UmVhZGVyICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZDxaWFJlYWRlcj4gZGVsZWdhdGU7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYQnlRdWFkcmFudFJlYWRlcgorCistIChpZClpbml0V2l0aERlbGVnYXRlOihpZDxaWFJlYWRlcj4pZGVsZWdhdGUgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtzZWxmIGRlY29kZTppbWFnZSBoaW50czpuaWwgZXJyb3I6ZXJyb3JdOworfQorCistIChaWFJlc3VsdCAqKWRlY29kZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaW50IHdpZHRoID0gaW1hZ2Uud2lkdGg7CisgIGludCBoZWlnaHQgPSBpbWFnZS5oZWlnaHQ7CisgIGludCBoYWxmV2lkdGggPSB3aWR0aCAvIDI7CisgIGludCBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjsKKworICBaWEJpbmFyeUJpdG1hcCAqdG9wTGVmdCA9IFtpbWFnZSBjcm9wOjAgdG9wOjAgd2lkdGg6aGFsZldpZHRoIGhlaWdodDpoYWxmSGVpZ2h0XTsKKyAgTlNFcnJvciAqZGVjb2RlRXJyb3IgPSBuaWw7CisgIFpYUmVzdWx0ICpyZXN1bHQgPSBbc2VsZi5kZWxlZ2F0ZSBkZWNvZGU6dG9wTGVmdCBoaW50czpoaW50cyBlcnJvcjomZGVjb2RlRXJyb3JdOworICBpZiAocmVzdWx0KSB7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfSBlbHNlIGlmIChkZWNvZGVFcnJvci5jb2RlICE9IFpYTm90Rm91bmRFcnJvcikgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gZGVjb2RlRXJyb3I7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIFpYQmluYXJ5Qml0bWFwICp0b3BSaWdodCA9IFtpbWFnZSBjcm9wOmhhbGZXaWR0aCB0b3A6MCB3aWR0aDpoYWxmV2lkdGggaGVpZ2h0OmhhbGZIZWlnaHRdOworICBkZWNvZGVFcnJvciA9IG5pbDsKKyAgcmVzdWx0ID0gW3NlbGYuZGVsZWdhdGUgZGVjb2RlOnRvcFJpZ2h0IGhpbnRzOmhpbnRzIGVycm9yOiZkZWNvZGVFcnJvcl07CisgIGlmIChyZXN1bHQpIHsKKyAgICByZXR1cm4gcmVzdWx0OworICB9IGVsc2UgaWYgKGRlY29kZUVycm9yLmNvZGUgIT0gWlhOb3RGb3VuZEVycm9yKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBkZWNvZGVFcnJvcjsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgWlhCaW5hcnlCaXRtYXAgKmJvdHRvbUxlZnQgPSBbaW1hZ2UgY3JvcDowIHRvcDpoYWxmSGVpZ2h0IHdpZHRoOmhhbGZXaWR0aCBoZWlnaHQ6aGFsZkhlaWdodF07CisgIGRlY29kZUVycm9yID0gbmlsOworICByZXN1bHQgPSBbc2VsZi5kZWxlZ2F0ZSBkZWNvZGU6Ym90dG9tTGVmdCBoaW50czpoaW50cyBlcnJvcjomZGVjb2RlRXJyb3JdOworICBpZiAocmVzdWx0KSB7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfSBlbHNlIGlmIChkZWNvZGVFcnJvci5jb2RlICE9IFpYTm90Rm91bmRFcnJvcikgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gZGVjb2RlRXJyb3I7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIFpYQmluYXJ5Qml0bWFwICpib3R0b21SaWdodCA9IFtpbWFnZSBjcm9wOmhhbGZXaWR0aCB0b3A6aGFsZkhlaWdodCB3aWR0aDpoYWxmV2lkdGggaGVpZ2h0OmhhbGZIZWlnaHRdOworICBkZWNvZGVFcnJvciA9IG5pbDsKKyAgcmVzdWx0ID0gW3NlbGYuZGVsZWdhdGUgZGVjb2RlOmJvdHRvbVJpZ2h0IGhpbnRzOmhpbnRzIGVycm9yOiZkZWNvZGVFcnJvcl07CisgIGlmIChyZXN1bHQpIHsKKyAgICByZXR1cm4gcmVzdWx0OworICB9IGVsc2UgaWYgKGRlY29kZUVycm9yLmNvZGUgIT0gWlhOb3RGb3VuZEVycm9yKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBkZWNvZGVFcnJvcjsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaW50IHF1YXJ0ZXJXaWR0aCA9IGhhbGZXaWR0aCAvIDI7CisgIGludCBxdWFydGVySGVpZ2h0ID0gaGFsZkhlaWdodCAvIDI7CisgIFpYQmluYXJ5Qml0bWFwICpjZW50ZXIgPSBbaW1hZ2UgY3JvcDpxdWFydGVyV2lkdGggdG9wOnF1YXJ0ZXJIZWlnaHQgd2lkdGg6aGFsZldpZHRoIGhlaWdodDpoYWxmSGVpZ2h0XTsKKyAgcmV0dXJuIFtzZWxmLmRlbGVnYXRlIGRlY29kZTpjZW50ZXIgaGludHM6aGludHMgZXJyb3I6ZXJyb3JdOworfQorCistICh2b2lkKXJlc2V0IHsKKyAgW3NlbGYuZGVsZWdhdGUgcmVzZXRdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvbXVsdGkvWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmggYi9aWGluZ09iakMvbXVsdGkvWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRmOGExNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9tdWx0aS9aWEdlbmVyaWNNdWx0aXBsZUJhcmNvZGVSZWFkZXIuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWE11bHRpcGxlQmFyY29kZVJlYWRlci5oIgorCisvKioKKyAqIEF0dGVtcHRzIHRvIGxvY2F0ZSBtdWx0aXBsZSBiYXJjb2RlcyBpbiBhbiBpbWFnZSBieSByZXBlYXRlZGx5IGRlY29kaW5nIHBvcnRpb24gb2YgdGhlIGltYWdlLgorICogQWZ0ZXIgb25lIGJhcmNvZGUgaXMgZm91bmQsIHRoZSBhcmVhcyBsZWZ0LCBhYm92ZSwgcmlnaHQgYW5kIGJlbG93IHRoZSBiYXJjb2RlJ3MKKyAqIFpYUmVzdWx0UG9pbnRzIGFyZSBzY2FubmVkLCByZWN1cnNpdmVseS4KKyAqIAorICogQSBjYWxsZXIgbWF5IHdhbnQgdG8gYWxzbyBlbXBsb3kgWlhCeVF1YWRyYW50UmVhZGVyIHdoZW4gYXR0ZW1wdGluZyB0byBmaW5kIG11bHRpcGxlCisgKiAyRCBiYXJjb2RlcywgbGlrZSBRUiBDb2RlcywgaW4gYW4gaW1hZ2UsIHdoZXJlIHRoZSBwcmVzZW5jZSBvZiBtdWx0aXBsZSBiYXJjb2RlcyBtaWdodCBwcmV2ZW50CisgKiBkZXRlY3RpbmcgYW55IG9uZSBvZiB0aGVtLgorICogCisgKiBUaGF0IGlzLCBpbnN0ZWFkIG9mIHBhc3NpbmcgYW4gWlhSZWFkZXIgYSBjYWxsZXIgbWlnaHQgcGFzcworICogW1taWEJ5UXVhZHJhbnRSZWFkZXIgYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6cmVhZGVyXTwvY29kZT4uCisgKi8KKworQHByb3RvY29sIFpYUmVhZGVyOworCitAaW50ZXJmYWNlIFpYR2VuZXJpY011bHRpcGxlQmFyY29kZVJlYWRlciA6IE5TT2JqZWN0IDxaWE11bHRpcGxlQmFyY29kZVJlYWRlcj4KKworLSAoaWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQ8WlhSZWFkZXI+KWRlbGVnYXRlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvbXVsdGkvWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLm0gYi9aWGluZ09iakMvbXVsdGkvWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MTIyNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9tdWx0aS9aWEdlbmVyaWNNdWx0aXBsZUJhcmNvZGVSZWFkZXIubQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYR2VuZXJpY011bHRpcGxlQmFyY29kZVJlYWRlci5oIgorI2ltcG9ydCAiWlhSZWFkZXIuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKworaW50IGNvbnN0IE1JTl9ESU1FTlNJT05fVE9fUkVDVVIgPSAxMDA7CitpbnQgY29uc3QgTUFYX0RFUFRIID0gNDsKKworQGludGVyZmFjZSBaWEdlbmVyaWNNdWx0aXBsZUJhcmNvZGVSZWFkZXIgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHdlYWspIGlkPFpYUmVhZGVyPiBkZWxlZ2F0ZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhHZW5lcmljTXVsdGlwbGVCYXJjb2RlUmVhZGVyCisKKy0gKGlkKWluaXRXaXRoRGVsZWdhdGU6KGlkPFpYUmVhZGVyPilkZWxlZ2F0ZSB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNBcnJheSAqKWRlY29kZU11bHRpcGxlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtzZWxmIGRlY29kZU11bHRpcGxlOmltYWdlIGhpbnRzOm5pbCBlcnJvcjplcnJvcl07Cit9CisKKy0gKE5TQXJyYXkgKilkZWNvZGVNdWx0aXBsZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICBpZiAoIVtzZWxmIGRvRGVjb2RlTXVsdGlwbGU6aW1hZ2UgaGludHM6aGludHMgcmVzdWx0czpyZXN1bHRzIHhPZmZzZXQ6MCB5T2Zmc2V0OjAgY3VycmVudERlcHRoOjAgZXJyb3I6ZXJyb3JdKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfSBlbHNlIGlmIChyZXN1bHRzLmNvdW50ID09IDApIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgcmV0dXJuIHJlc3VsdHM7Cit9CisKKy0gKEJPT0wpZG9EZWNvZGVNdWx0aXBsZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIHJlc3VsdHM6KE5TTXV0YWJsZUFycmF5ICopcmVzdWx0cworICAgICAgICAgICAgICAgICB4T2Zmc2V0OihpbnQpeE9mZnNldCB5T2Zmc2V0OihpbnQpeU9mZnNldCBjdXJyZW50RGVwdGg6KGludCljdXJyZW50RGVwdGggZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoY3VycmVudERlcHRoID4gTUFYX0RFUFRIKSB7CisgICAgcmV0dXJuIFlFUzsKKyAgfQorCisgIFpYUmVzdWx0ICpyZXN1bHQgPSBbc2VsZi5kZWxlZ2F0ZSBkZWNvZGU6aW1hZ2UgaGludHM6aGludHMgZXJyb3I6ZXJyb3JdOworICBpZiAoIXJlc3VsdCkgeworICAgIHJldHVybiBOTzsKKyAgfQorCisgIEJPT0wgYWxyZWFkeUZvdW5kID0gTk87CisgIGZvciAoWlhSZXN1bHQgKmV4aXN0aW5nUmVzdWx0IGluIHJlc3VsdHMpIHsKKyAgICBpZiAoW1tleGlzdGluZ1Jlc3VsdCB0ZXh0XSBpc0VxdWFsVG9TdHJpbmc6W3Jlc3VsdCB0ZXh0XV0pIHsKKyAgICAgIGFscmVhZHlGb3VuZCA9IFlFUzsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZiAoIWFscmVhZHlGb3VuZCkgeworICAgIFtyZXN1bHRzIGFkZE9iamVjdDpbc2VsZiB0cmFuc2xhdGVSZXN1bHRQb2ludHM6cmVzdWx0IHhPZmZzZXQ6eE9mZnNldCB5T2Zmc2V0OnlPZmZzZXRdXTsKKyAgfQorICBOU011dGFibGVBcnJheSAqcmVzdWx0UG9pbnRzID0gW3Jlc3VsdCByZXN1bHRQb2ludHNdOworICBpZiAocmVzdWx0UG9pbnRzID09IG5pbCB8fCBbcmVzdWx0UG9pbnRzIGNvdW50XSA9PSAwKSB7CisgICAgcmV0dXJuIFlFUzsKKyAgfQorICBpbnQgd2lkdGggPSBbaW1hZ2Ugd2lkdGhdOworICBpbnQgaGVpZ2h0ID0gW2ltYWdlIGhlaWdodF07CisgIGZsb2F0IG1pblggPSB3aWR0aDsKKyAgZmxvYXQgbWluWSA9IGhlaWdodDsKKyAgZmxvYXQgbWF4WCA9IDAuMGY7CisgIGZsb2F0IG1heFkgPSAwLjBmOworICBmb3IgKFpYUmVzdWx0UG9pbnQgKnBvaW50IGluIHJlc3VsdFBvaW50cykgeworICAgIGZsb2F0IHggPSBbcG9pbnQgeF07CisgICAgZmxvYXQgeSA9IFtwb2ludCB5XTsKKyAgICBpZiAoeCA8IG1pblgpIHsKKyAgICAgIG1pblggPSB4OworICAgIH0KKyAgICBpZiAoeSA8IG1pblkpIHsKKyAgICAgIG1pblkgPSB5OworICAgIH0KKyAgICBpZiAoeCA+IG1heFgpIHsKKyAgICAgIG1heFggPSB4OworICAgIH0KKyAgICBpZiAoeSA+IG1heFkpIHsKKyAgICAgIG1heFkgPSB5OworICAgIH0KKyAgfQorCisgIGlmIChtaW5YID4gTUlOX0RJTUVOU0lPTl9UT19SRUNVUikgeworICAgIHJldHVybiBbc2VsZiBkb0RlY29kZU11bHRpcGxlOltpbWFnZSBjcm9wOjAgdG9wOjAgd2lkdGg6KGludCltaW5YIGhlaWdodDpoZWlnaHRdIGhpbnRzOmhpbnRzIHJlc3VsdHM6cmVzdWx0cyB4T2Zmc2V0OnhPZmZzZXQgeU9mZnNldDp5T2Zmc2V0IGN1cnJlbnREZXB0aDpjdXJyZW50RGVwdGggKyAxIGVycm9yOmVycm9yXTsKKyAgfQorICBpZiAobWluWSA+IE1JTl9ESU1FTlNJT05fVE9fUkVDVVIpIHsKKyAgICByZXR1cm4gW3NlbGYgZG9EZWNvZGVNdWx0aXBsZTpbaW1hZ2UgY3JvcDowIHRvcDowIHdpZHRoOndpZHRoIGhlaWdodDooaW50KW1pblldIGhpbnRzOmhpbnRzIHJlc3VsdHM6cmVzdWx0cyB4T2Zmc2V0OnhPZmZzZXQgeU9mZnNldDp5T2Zmc2V0IGN1cnJlbnREZXB0aDpjdXJyZW50RGVwdGggKyAxIGVycm9yOmVycm9yXTsKKyAgfQorICBpZiAobWF4WCA8IHdpZHRoIC0gTUlOX0RJTUVOU0lPTl9UT19SRUNVUikgeworICAgIHJldHVybiBbc2VsZiBkb0RlY29kZU11bHRpcGxlOltpbWFnZSBjcm9wOihpbnQpbWF4WCB0b3A6MCB3aWR0aDp3aWR0aCAtIChpbnQpbWF4WCBoZWlnaHQ6aGVpZ2h0XSBoaW50czpoaW50cyByZXN1bHRzOnJlc3VsdHMgeE9mZnNldDp4T2Zmc2V0ICsgKGludCltYXhYIHlPZmZzZXQ6eU9mZnNldCBjdXJyZW50RGVwdGg6Y3VycmVudERlcHRoICsgMSBlcnJvcjplcnJvcl07CisgIH0KKyAgaWYgKG1heFkgPCBoZWlnaHQgLSBNSU5fRElNRU5TSU9OX1RPX1JFQ1VSKSB7CisgICAgcmV0dXJuIFtzZWxmIGRvRGVjb2RlTXVsdGlwbGU6W2ltYWdlIGNyb3A6MCB0b3A6KGludCltYXhZIHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHQgLSAoaW50KW1heFldIGhpbnRzOmhpbnRzIHJlc3VsdHM6cmVzdWx0cyB4T2Zmc2V0OnhPZmZzZXQgeU9mZnNldDp5T2Zmc2V0ICsgKGludCltYXhZIGN1cnJlbnREZXB0aDpjdXJyZW50RGVwdGggKyAxIGVycm9yOmVycm9yXTsKKyAgfQorCisgIHJldHVybiBZRVM7Cit9CisKKy0gKFpYUmVzdWx0ICopdHJhbnNsYXRlUmVzdWx0UG9pbnRzOihaWFJlc3VsdCAqKXJlc3VsdCB4T2Zmc2V0OihpbnQpeE9mZnNldCB5T2Zmc2V0OihpbnQpeU9mZnNldCB7CisgIE5TQXJyYXkgKm9sZFJlc3VsdFBvaW50cyA9IFtyZXN1bHQgcmVzdWx0UG9pbnRzXTsKKyAgaWYgKG9sZFJlc3VsdFBvaW50cyA9PSBuaWwpIHsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIE5TTXV0YWJsZUFycmF5ICpuZXdSZXN1bHRQb2ludHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6W29sZFJlc3VsdFBvaW50cyBjb3VudF1dOworICBmb3IgKFpYUmVzdWx0UG9pbnQgKm9sZFBvaW50IGluIG9sZFJlc3VsdFBvaW50cykgeworICAgIFtuZXdSZXN1bHRQb2ludHMgYWRkT2JqZWN0OltbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOltvbGRQb2ludCB4XSArIHhPZmZzZXQgeTpbb2xkUG9pbnQgeV0gKyB5T2Zmc2V0XV07CisgIH0KKworICBaWFJlc3VsdCAqbmV3UmVzdWx0ID0gW1pYUmVzdWx0IHJlc3VsdFdpdGhUZXh0OnJlc3VsdC50ZXh0IHJhd0J5dGVzOnJlc3VsdC5yYXdCeXRlcyBsZW5ndGg6cmVzdWx0Lmxlbmd0aCByZXN1bHRQb2ludHM6bmV3UmVzdWx0UG9pbnRzIGZvcm1hdDpyZXN1bHQuYmFyY29kZUZvcm1hdF07CisgIFtuZXdSZXN1bHQgcHV0QWxsTWV0YWRhdGE6cmVzdWx0LnJlc3VsdE1ldGFkYXRhXTsKKyAgcmV0dXJuIG5ld1Jlc3VsdDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL211bHRpL1pYTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmggYi9aWGluZ09iakMvbXVsdGkvWlhNdWx0aXBsZUJhcmNvZGVSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmZkNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL211bHRpL1pYTXVsdGlwbGVCYXJjb2RlUmVhZGVyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaW5hcnlCaXRtYXAuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisKKy8qKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhpcyBpbnRlcmZhY2UgYXR0ZW1wdCB0byByZWFkIHNldmVyYWwgYmFyY29kZXMgZnJvbSBvbmUgaW1hZ2UuCisgKi8KKworQGNsYXNzIFpYRGVjb2RlSGludHM7CisKK0Bwcm90b2NvbCBaWE11bHRpcGxlQmFyY29kZVJlYWRlciA8TlNPYmplY3Q+CisKKy0gKE5TQXJyYXkgKilkZWNvZGVNdWx0aXBsZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKE5TQXJyYXkgKilkZWNvZGVNdWx0aXBsZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvbXVsdGkvcXJjb2RlL1pYUVJDb2RlTXVsdGlSZWFkZXIuaCBiL1pYaW5nT2JqQy9tdWx0aS9xcmNvZGUvWlhRUkNvZGVNdWx0aVJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZDgwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvbXVsdGkvcXJjb2RlL1pYUVJDb2RlTXVsdGlSZWFkZXIuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWE11bHRpcGxlQmFyY29kZVJlYWRlci5oIgorI2ltcG9ydCAiWlhRUkNvZGVSZWFkZXIuaCIKKworLyoqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGNhbiBkZXRlY3QgYW5kIGRlY29kZSBtdWx0aXBsZSBRUiBDb2RlcyBpbiBhbiBpbWFnZS4KKyAqLworCitAaW50ZXJmYWNlIFpYUVJDb2RlTXVsdGlSZWFkZXIgOiBaWFFSQ29kZVJlYWRlciA8WlhNdWx0aXBsZUJhcmNvZGVSZWFkZXI+CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9tdWx0aS9xcmNvZGUvWlhRUkNvZGVNdWx0aVJlYWRlci5tIGIvWlhpbmdPYmpDL211bHRpL3FyY29kZS9aWFFSQ29kZU11bHRpUmVhZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2MmY5MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9tdWx0aS9xcmNvZGUvWlhRUkNvZGVNdWx0aVJlYWRlci5tCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRGVjb2RlclJlc3VsdC5oIgorI2ltcG9ydCAiWlhEZXRlY3RvclJlc3VsdC5oIgorI2ltcG9ydCAiWlhNdWx0aURldGVjdG9yLmgiCisjaW1wb3J0ICJaWFFSQ29kZURlY29kZXIuaCIKKyNpbXBvcnQgIlpYUVJDb2RlTXVsdGlSZWFkZXIuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFFSQ29kZU11bHRpUmVhZGVyCisKKy0gKE5TQXJyYXkgKilkZWNvZGVNdWx0aXBsZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIHJldHVybiBbc2VsZiBkZWNvZGVNdWx0aXBsZTppbWFnZSBoaW50czpuaWwgZXJyb3I6ZXJyb3JdOworfQorCistIChOU0FycmF5ICopZGVjb2RlTXVsdGlwbGU6KFpYQmluYXJ5Qml0bWFwICopaW1hZ2UgaGludHM6KFpYRGVjb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIFpYQml0TWF0cml4ICptYXRyaXggPSBbaW1hZ2UgYmxhY2tNYXRyaXhXaXRoRXJyb3I6ZXJyb3JdOworICBpZiAoIW1hdHJpeCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICBOU0FycmF5ICpkZXRlY3RvclJlc3VsdCA9IFtbW1pYTXVsdGlEZXRlY3RvciBhbGxvY10gaW5pdFdpdGhJbWFnZTptYXRyaXhdIGRldGVjdE11bHRpOmhpbnRzIGVycm9yOmVycm9yXTsKKyAgaWYgKCFkZXRlY3RvclJlc3VsdCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBbZGV0ZWN0b3JSZXN1bHQgY291bnRdOyBpKyspIHsKKyAgICBaWERlY29kZXJSZXN1bHQgKmRlY29kZXJSZXN1bHQgPSBbW3NlbGYgZGVjb2Rlcl0gZGVjb2RlTWF0cml4OlsoWlhEZXRlY3RvclJlc3VsdCAqKWRldGVjdG9yUmVzdWx0W2ldIGJpdHNdIGhpbnRzOmhpbnRzIGVycm9yOm5pbF07CisgICAgaWYgKGRlY29kZXJSZXN1bHQpIHsKKyAgICAgIE5TQXJyYXkgKnBvaW50cyA9IFsoWlhEZXRlY3RvclJlc3VsdCAqKWRldGVjdG9yUmVzdWx0W2ldIHBvaW50c107CisgICAgICBaWFJlc3VsdCAqcmVzdWx0ID0gW1pYUmVzdWx0IHJlc3VsdFdpdGhUZXh0OmRlY29kZXJSZXN1bHQudGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Qnl0ZXM6ZGVjb2RlclJlc3VsdC5yYXdCeXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6ZGVjb2RlclJlc3VsdC5sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UG9pbnRzOnBvaW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRRUkNvZGVdOworICAgICAgTlNNdXRhYmxlQXJyYXkgKmJ5dGVTZWdtZW50cyA9IGRlY29kZXJSZXN1bHQuYnl0ZVNlZ21lbnRzOworICAgICAgaWYgKGJ5dGVTZWdtZW50cyAhPSBuaWwpIHsKKyAgICAgICAgW3Jlc3VsdCBwdXRNZXRhZGF0YTprUmVzdWx0TWV0YWRhdGFUeXBlQnl0ZVNlZ21lbnRzIHZhbHVlOmJ5dGVTZWdtZW50c107CisgICAgICB9CisgICAgICBOU1N0cmluZyAqZWNMZXZlbCA9IGRlY29kZXJSZXN1bHQuZWNMZXZlbDsKKyAgICAgIGlmIChlY0xldmVsICE9IG5pbCkgeworICAgICAgICBbcmVzdWx0IHB1dE1ldGFkYXRhOmtSZXN1bHRNZXRhZGF0YVR5cGVFcnJvckNvcnJlY3Rpb25MZXZlbCB2YWx1ZTplY0xldmVsXTsKKyAgICAgIH0KKyAgICAgIFtyZXN1bHRzIGFkZE9iamVjdDpyZXN1bHRdOworICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHRzOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvbXVsdGkvcXJjb2RlL2RldGVjdG9yL1pYTXVsdGlEZXRlY3Rvci5oIGIvWlhpbmdPYmpDL211bHRpL3FyY29kZS9kZXRlY3Rvci9aWE11bHRpRGV0ZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDhiNzY4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL211bHRpL3FyY29kZS9kZXRlY3Rvci9aWE11bHRpRGV0ZWN0b3IuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFFSQ29kZURldGVjdG9yLmgiCisKKy8qKgorICogRW5jYXBzdWxhdGVzIGxvZ2ljIHRoYXQgY2FuIGRldGVjdCBvbmUgb3IgbW9yZSBRUiBDb2RlcyBpbiBhbiBpbWFnZSwgZXZlbiBpZiB0aGUgUVIgQ29kZQorICogaXMgcm90YXRlZCBvciBza2V3ZWQsIG9yIHBhcnRpYWxseSBvYnNjdXJlZC4KKyAqLworCitAY2xhc3MgWlhEZWNvZGVIaW50czsKKworQGludGVyZmFjZSBaWE11bHRpRGV0ZWN0b3IgOiBaWFFSQ29kZURldGVjdG9yCisKKy0gKE5TQXJyYXkgKilkZXRlY3RNdWx0aTooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvbXVsdGkvcXJjb2RlL2RldGVjdG9yL1pYTXVsdGlEZXRlY3Rvci5tIGIvWlhpbmdPYmpDL211bHRpL3FyY29kZS9kZXRlY3Rvci9aWE11bHRpRGV0ZWN0b3IubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2E3YmFhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL211bHRpL3FyY29kZS9kZXRlY3Rvci9aWE11bHRpRGV0ZWN0b3IubQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERlY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhNdWx0aURldGVjdG9yLmgiCisjaW1wb3J0ICJaWE11bHRpRmluZGVyUGF0dGVybkZpbmRlci5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludENhbGxiYWNrLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWE11bHRpRGV0ZWN0b3IKKworLSAoTlNBcnJheSAqKWRldGVjdE11bHRpOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZDxaWFJlc3VsdFBvaW50Q2FsbGJhY2s+IHJlc3VsdFBvaW50Q2FsbGJhY2sgPSBoaW50cyA9PSBuaWwgPyBuaWwgOiBoaW50cy5yZXN1bHRQb2ludENhbGxiYWNrOworICBaWE11bHRpRmluZGVyUGF0dGVybkZpbmRlciAqZmluZGVyID0gW1taWE11bHRpRmluZGVyUGF0dGVybkZpbmRlciBhbGxvY10gaW5pdFdpdGhJbWFnZTpzZWxmLmltYWdlIHJlc3VsdFBvaW50Q2FsbGJhY2s6cmVzdWx0UG9pbnRDYWxsYmFja107CisgIE5TQXJyYXkgKmluZm8gPSBbZmluZGVyIGZpbmRNdWx0aTpoaW50cyBlcnJvcjplcnJvcl07CisgIGlmIChbaW5mbyBjb3VudF0gPT0gMCkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICBmb3IgKGludCBpID0gMDsgaSA8IFtpbmZvIGNvdW50XTsgaSsrKSB7CisgICAgWlhEZXRlY3RvclJlc3VsdCAqcGF0dGVybkluZm8gPSBbc2VsZiBwcm9jZXNzRmluZGVyUGF0dGVybkluZm86aW5mb1tpXSBlcnJvcjpuaWxdOworICAgIGlmIChwYXR0ZXJuSW5mbykgeworICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6cGF0dGVybkluZm9dOworICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9tdWx0aS9xcmNvZGUvZGV0ZWN0b3IvWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIuaCBiL1pYaW5nT2JqQy9tdWx0aS9xcmNvZGUvZGV0ZWN0b3IvWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmFmODBkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL211bHRpL3FyY29kZS9kZXRlY3Rvci9aWE11bHRpRmluZGVyUGF0dGVybkZpbmRlci5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRmluZGVyUGF0dGVybkZpbmRlci5oIgorCisvKioKKyAqIFRoaXMgY2xhc3MgYXR0ZW1wdHMgdG8gZmluZCBmaW5kZXIgcGF0dGVybnMgaW4gYSBRUiBDb2RlLiBGaW5kZXIgcGF0dGVybnMgYXJlIHRoZSBzcXVhcmUKKyAqIG1hcmtlcnMgYXQgdGhyZWUgY29ybmVycyBvZiBhIFFSIENvZGUuCisgKiAKKyAqIFRoaXMgY2xhc3MgaXMgdGhyZWFkLXNhZmUgYnV0IG5vdCByZWVudHJhbnQuIEVhY2ggdGhyZWFkIG11c3QgYWxsb2NhdGUgaXRzIG93biBvYmplY3QuCisgKiAKKyAqIEluIGNvbnRyYXN0IHRvIFpYRmluZGVyUGF0dGVybkZpbmRlciwgdGhpcyBjbGFzcyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBhbGwgcG9zc2libGUKKyAqIFFSIGNvZGUgbG9jYXRpb25zIGluIHRoZSBpbWFnZS4KKyAqIAorICogVXNlIHRoZSB0cnlIYXJkZXIgaGludCB0byBhc2sgZm9yIGEgbW9yZSB0aG9yb3VnaCBkZXRlY3Rpb24uCisgKi8KKworQGNsYXNzIFpYRGVjb2RlSGludHM7CisKK0BpbnRlcmZhY2UgWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIgOiBaWEZpbmRlclBhdHRlcm5GaW5kZXIKKworLSAoTlNBcnJheSAqKWZpbmRNdWx0aTooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvbXVsdGkvcXJjb2RlL2RldGVjdG9yL1pYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyLm0gYi9aWGluZ09iakMvbXVsdGkvcXJjb2RlL2RldGVjdG9yL1pYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0YTk0YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9tdWx0aS9xcmNvZGUvZGV0ZWN0b3IvWlhNdWx0aUZpbmRlclBhdHRlcm5GaW5kZXIubQpAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYRGVjb2RlSGludHMuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEZpbmRlclBhdHRlcm5JbmZvLmgiCisjaW1wb3J0ICJaWE11bHRpRmluZGVyUGF0dGVybkZpbmRlci5oIgorI2ltcG9ydCAiWlhRUkNvZGVGaW5kZXJQYXR0ZXJuLmgiCisKKy8vIFRPRE8gTUlOX01PRFVMRV9DT1VOVCBhbmQgTUFYX01PRFVMRV9DT1VOVCB3b3VsZCBiZSBncmVhdCBoaW50cyB0byBhc2sgdGhlIHVzZXIgZm9yCisvLyBzaW5jZSBpdCBsaW1pdHMgdGhlIG51bWJlciBvZiByZWdpb25zIHRvIGRlY29kZQorCisvLyBtYXguIGxlZ2FsIGNvdW50IG9mIG1vZHVsZXMgcGVyIFFSIGNvZGUgZWRnZSAoMTc3KQorZmxvYXQgY29uc3QgTUFYX01PRFVMRV9DT1VOVF9QRVJfRURHRSA9IDE4MDsKKy8vIG1pbi4gbGVnYWwgY291bnQgcGVyIG1vZHVsZXMgcGVyIFFSIGNvZGUgZWRnZSAoMTEpCitmbG9hdCBjb25zdCBNSU5fTU9EVUxFX0NPVU5UX1BFUl9FREdFID0gOTsKKworLyoqCisgKiBNb3JlIG9yIGxlc3MgYXJiaXRyYXJ5IGN1dG9mZiBwb2ludCBmb3IgZGV0ZXJtaW5pbmcgaWYgdHdvIGZpbmRlciBwYXR0ZXJucyBtaWdodCBiZWxvbmcKKyAqIHRvIHRoZSBzYW1lIGNvZGUgaWYgdGhleSBkaWZmZXIgbGVzcyB0aGFuIERJRkZfTU9EU0laRV9DVVRPRkZfUEVSQ0VOVCBwZXJjZW50IGluIHRoZWlyCisgKiBlc3RpbWF0ZWQgbW9kdWxlcyBzaXplcy4KKyAqLworZmxvYXQgY29uc3QgRElGRl9NT0RTSVpFX0NVVE9GRl9QRVJDRU5UID0gMC4wNWY7CisKKy8qKgorICogTW9yZSBvciBsZXNzIGFyYml0cmFyeSBjdXRvZmYgcG9pbnQgZm9yIGRldGVybWluaW5nIGlmIHR3byBmaW5kZXIgcGF0dGVybnMgbWlnaHQgYmVsb25nCisgKiB0byB0aGUgc2FtZSBjb2RlIGlmIHRoZXkgZGlmZmVyIGxlc3MgdGhhbiBESUZGX01PRFNJWkVfQ1VUT0ZGIHBpeGVscy9tb2R1bGUgaW4gdGhlaXIKKyAqIGVzdGltYXRlZCBtb2R1bGVzIHNpemVzLgorICovCitmbG9hdCBjb25zdCBESUZGX01PRFNJWkVfQ1VUT0ZGID0gMC41ZjsKKworQGltcGxlbWVudGF0aW9uIFpYTXVsdGlGaW5kZXJQYXR0ZXJuRmluZGVyCisKKy8qKgorICogUmV0dXJucyB0aGUgMyBiZXN0IHtAbGluayBGaW5kZXJQYXR0ZXJufXMgZnJvbSBvdXIgbGlzdCBvZiBjYW5kaWRhdGVzLiBUaGUgImJlc3QiIGFyZQorICogdGhvc2UgdGhhdCBoYXZlIGJlZW4gZGV0ZWN0ZWQgYXQgbGVhc3Qge0BsaW5rICNDRU5URVJfUVVPUlVNfSB0aW1lcywgYW5kIHdob3NlIG1vZHVsZQorICogc2l6ZSBkaWZmZXJzIGZyb20gdGhlIGF2ZXJhZ2UgYW1vbmcgdGhvc2UgcGF0dGVybnMgdGhlIGxlYXN0CisgKi8KKy0gKE5TQXJyYXkgKilzZWxlY3RCZXN0UGF0dGVybnNXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBOU011dGFibGVBcnJheSAqX3Bvc3NpYmxlQ2VudGVycyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhBcnJheTpbc2VsZiBwb3NzaWJsZUNlbnRlcnNdXTsKKyAgTlNVSW50ZWdlciBzaXplID0gW19wb3NzaWJsZUNlbnRlcnMgY291bnRdOworCisgIGlmIChzaXplIDwgMykgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIC8qCisgICAqIEJlZ2luIEhFIG1vZGlmaWNhdGlvbnMgdG8gc2FmZWx5IGRldGVjdCBtdWx0aXBsZSBjb2RlcyBvZiBlcXVhbCBzaXplCisgICAqLworICBpZiAoc2l6ZSA9PSAzKSB7CisgICAgcmV0dXJuIEBbQFtfcG9zc2libGVDZW50ZXJzWzBdLCBfcG9zc2libGVDZW50ZXJzWzFdLCBfcG9zc2libGVDZW50ZXJzWzJdXV07CisgIH0KKworICBbX3Bvc3NpYmxlQ2VudGVycyBzb3J0VXNpbmdGdW5jdGlvbjptb2R1bGVTaXplQ29tcGFyZSBjb250ZXh0Om5pbF07CisKKyAgLyoKKyAgICogTm93IGxldHMgc3RhcnQ6IGJ1aWxkIGEgbGlzdCBvZiB0dXBsZXMgb2YgdGhyZWUgZmluZGVyIGxvY2F0aW9ucyB0aGF0CisgICAqICAtIGZlYXR1cmUgc2ltaWxhciBtb2R1bGUgc2l6ZXMKKyAgICogIC0gYXJlIHBsYWNlZCBpbiBhIGRpc3RhbmNlIHNvIHRoZSBlc3RpbWF0ZWQgbW9kdWxlIGNvdW50IGlzIHdpdGhpbiB0aGUgUVIgc3BlY2lmaWNhdGlvbgorICAgKiAgLSBoYXZlIHNpbWlsYXIgZGlzdGFuY2UgYmV0d2VlbiB1cHBlciBsZWZ0L3JpZ2h0IGFuZCBsZWZ0IHRvcC9ib3R0b20gZmluZGVyIHBhdHRlcm5zCisgICAqICAtIGZvcm0gYSB0cmlhbmdsZSB3aXRoIDkwwrAgYW5nbGUgKGNoZWNrZWQgYnkgY29tcGFyaW5nIHRvcCByaWdodC9ib3R0b20gbGVmdCBkaXN0YW5jZQorICAgKiAgICB3aXRoIHB5dGhhZ29yYXMpCisgICAqCisgICAqIE5vdGU6IHdlIGFsbG93IGVhY2ggcG9pbnQgdG8gYmUgdXNlZCBmb3IgbW9yZSB0aGFuIG9uZSBjb2RlIHJlZ2lvbjogdGhpcyBtaWdodCBzZWVtCisgICAqIGNvdW50ZXJpbnR1aXRpdmUgYXQgZmlyc3QsIGJ1dCB0aGUgcGVyZm9ybWFuY2UgcGVuYWx0eSBpcyBub3QgdGhhdCBiaWcuIEF0IHRoaXMgcG9pbnQsCisgICAqIHdlIGNhbm5vdCBtYWtlIGEgZ29vZCBxdWFsaXR5IGRlY2lzaW9uIHdoZXRoZXIgdGhlIHRocmVlIGZpbmRlcnMgYWN0dWFsbHkgcmVwcmVzZW50CisgICAqIGEgUVIgY29kZSwgb3IgYXJlIGp1c3QgYnkgY2hhbmNlIGxheW91dGVkIHNvIGl0IGxvb2tzIGxpa2UgdGhlcmUgbWlnaHQgYmUgYSBRUiBjb2RlIHRoZXJlLgorICAgKiBTbywgaWYgdGhlIGxheW91dCBzZWVtcyByaWdodCwgbGV0cyBoYXZlIHRoZSBkZWNvZGVyIHRyeSB0byBkZWNvZGUuICAgICAKKyAgICovCisKKyAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworCisgIGZvciAoaW50IGkxID0gMDsgaTEgPCAoc2l6ZSAtIDIpOyBpMSsrKSB7CisgICAgWlhRUkNvZGVGaW5kZXJQYXR0ZXJuICpwMSA9IHNlbGYucG9zc2libGVDZW50ZXJzW2kxXTsKKyAgICBpZiAocDEgPT0gbmlsKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpMiA9IGkxICsgMTsgaTIgPCAoc2l6ZSAtIDEpOyBpMisrKSB7CisgICAgICBaWFFSQ29kZUZpbmRlclBhdHRlcm4gKnAyID0gc2VsZi5wb3NzaWJsZUNlbnRlcnNbaTJdOworICAgICAgaWYgKHAyID09IG5pbCkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgZmxvYXQgdk1vZFNpemUxMiA9IChbcDEgZXN0aW1hdGVkTW9kdWxlU2l6ZV0gLSBbcDIgZXN0aW1hdGVkTW9kdWxlU2l6ZV0pIC8gTUlOKFtwMSBlc3RpbWF0ZWRNb2R1bGVTaXplXSwgW3AyIGVzdGltYXRlZE1vZHVsZVNpemVdKTsKKyAgICAgIGZsb2F0IHZNb2RTaXplMTJBID0gZmFic2YoW3AxIGVzdGltYXRlZE1vZHVsZVNpemVdIC0gW3AyIGVzdGltYXRlZE1vZHVsZVNpemVdKTsKKyAgICAgIGlmICh2TW9kU2l6ZTEyQSA+IERJRkZfTU9EU0laRV9DVVRPRkYgJiYgdk1vZFNpemUxMiA+PSBESUZGX01PRFNJWkVfQ1VUT0ZGX1BFUkNFTlQpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGZvciAoaW50IGkzID0gaTIgKyAxOyBpMyA8IHNpemU7IGkzKyspIHsKKyAgICAgICAgWlhRUkNvZGVGaW5kZXJQYXR0ZXJuICpwMyA9IHNlbGYucG9zc2libGVDZW50ZXJzW2kzXTsKKyAgICAgICAgaWYgKHAzID09IG5pbCkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgdk1vZFNpemUyMyA9IChbcDIgZXN0aW1hdGVkTW9kdWxlU2l6ZV0gLSBbcDMgZXN0aW1hdGVkTW9kdWxlU2l6ZV0pIC8gTUlOKFtwMiBlc3RpbWF0ZWRNb2R1bGVTaXplXSwgW3AzIGVzdGltYXRlZE1vZHVsZVNpemVdKTsKKyAgICAgICAgZmxvYXQgdk1vZFNpemUyM0EgPSBmYWJzZihbcDIgZXN0aW1hdGVkTW9kdWxlU2l6ZV0gLSBbcDMgZXN0aW1hdGVkTW9kdWxlU2l6ZV0pOworICAgICAgICBpZiAodk1vZFNpemUyM0EgPiBESUZGX01PRFNJWkVfQ1VUT0ZGICYmIHZNb2RTaXplMjMgPj0gRElGRl9NT0RTSVpFX0NVVE9GRl9QRVJDRU5UKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBOU011dGFibGVBcnJheSAqdGVzdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhPYmplY3RzOnAxLCBwMiwgcDMsIG5pbF07CisgICAgICAgIFtaWFJlc3VsdFBvaW50IG9yZGVyQmVzdFBhdHRlcm5zOnRlc3RdOworCisgICAgICAgIFpYRmluZGVyUGF0dGVybkluZm8gKmluZm8gPSBbW1pYRmluZGVyUGF0dGVybkluZm8gYWxsb2NdIGluaXRXaXRoUGF0dGVybkNlbnRlcnM6dGVzdF07CisgICAgICAgIGZsb2F0IGRBID0gW1pYUmVzdWx0UG9pbnQgZGlzdGFuY2U6W2luZm8gdG9wTGVmdF0gcGF0dGVybjI6W2luZm8gYm90dG9tTGVmdF1dOworICAgICAgICBmbG9hdCBkQyA9IFtaWFJlc3VsdFBvaW50IGRpc3RhbmNlOltpbmZvIHRvcFJpZ2h0XSBwYXR0ZXJuMjpbaW5mbyBib3R0b21MZWZ0XV07CisgICAgICAgIGZsb2F0IGRCID0gW1pYUmVzdWx0UG9pbnQgZGlzdGFuY2U6W2luZm8gdG9wTGVmdF0gcGF0dGVybjI6W2luZm8gdG9wUmlnaHRdXTsKKworICAgICAgICBmbG9hdCBlc3RpbWF0ZWRNb2R1bGVDb3VudCA9IChkQSArIGRCKSAvIChbcDEgZXN0aW1hdGVkTW9kdWxlU2l6ZV0gKiAyLjBmKTsKKyAgICAgICAgaWYgKGVzdGltYXRlZE1vZHVsZUNvdW50ID4gTUFYX01PRFVMRV9DT1VOVF9QRVJfRURHRSB8fCBlc3RpbWF0ZWRNb2R1bGVDb3VudCA8IE1JTl9NT0RVTEVfQ09VTlRfUEVSX0VER0UpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IHZBQkJDID0gZmFic2YoKGRBIC0gZEIpIC8gTUlOKGRBLCBkQikpOworICAgICAgICBpZiAodkFCQkMgPj0gMC4xZikgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgZENweSA9IChmbG9hdClzcXJ0KGRBICogZEEgKyBkQiAqIGRCKTsKKyAgICAgICAgZmxvYXQgdlB5QyA9IGZhYnNmKChkQyAtIGRDcHkpIC8gTUlOKGRDLCBkQ3B5KSk7CisKKyAgICAgICAgaWYgKHZQeUMgPj0gMC4xZikgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgW3Jlc3VsdHMgYWRkT2JqZWN0OnRlc3RdOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChbcmVzdWx0cyBjb3VudF0gPiAwKSB7CisgICAgcmV0dXJuIHJlc3VsdHM7CisgIH0KKworICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICByZXR1cm4gbmlsOworfQorCistIChOU0FycmF5ICopZmluZE11bHRpOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBCT09MIHRyeUhhcmRlciA9IGhpbnRzICE9IG5pbCAmJiBoaW50cy50cnlIYXJkZXI7CisgIGludCBtYXhJID0gc2VsZi5pbWFnZS5oZWlnaHQ7CisgIGludCBtYXhKID0gc2VsZi5pbWFnZS53aWR0aDsKKyAgLy8gV2UgYXJlIGxvb2tpbmcgZm9yIGJsYWNrL3doaXRlL2JsYWNrL3doaXRlL2JsYWNrIG1vZHVsZXMgaW4KKyAgLy8gMToxOjM6MToxIHJhdGlvOyB0aGlzIHRyYWNrcyB0aGUgbnVtYmVyIG9mIHN1Y2ggbW9kdWxlcyBzZWVuIHNvIGZhcgorICAKKyAgLy8gTGV0J3MgYXNzdW1lIHRoYXQgdGhlIG1heGltdW0gdmVyc2lvbiBRUiBDb2RlIHdlIHN1cHBvcnQgdGFrZXMgdXAgMS80IHRoZSBoZWlnaHQgb2YgdGhlCisgIC8vIGltYWdlLCBhbmQgdGhlbiBhY2NvdW50IGZvciB0aGUgY2VudGVyIGJlaW5nIDMgbW9kdWxlcyBpbiBzaXplLiBUaGlzIGdpdmVzIHRoZSBzbWFsbGVzdAorICAvLyBudW1iZXIgb2YgcGl4ZWxzIHRoZSBjZW50ZXIgY291bGQgYmUsIHNvIHNraXAgdGhpcyBvZnRlbi4gV2hlbiB0cnlpbmcgaGFyZGVyLCBsb29rIGZvciBhbGwKKyAgLy8gUVIgdmVyc2lvbnMgcmVnYXJkbGVzcyBvZiBob3cgZGVuc2UgdGhleSBhcmUuCisgIGludCBpU2tpcCA9IChpbnQpKG1heEkgLyAoRklOREVSX1BBVFRFUk5fTUFYX01PRFVMRVMgKiA0LjBmKSAqIDMpOworICBpZiAoaVNraXAgPCBGSU5ERVJfUEFUVEVSTl9NSU5fU0tJUCB8fCB0cnlIYXJkZXIpIHsKKyAgICBpU2tpcCA9IEZJTkRFUl9QQVRURVJOX01JTl9TS0lQOworICB9CisKKyAgaW50IHN0YXRlQ291bnRbNV07CisgIGZvciAoaW50IGkgPSBpU2tpcCAtIDE7IGkgPCBtYXhJOyBpICs9IGlTa2lwKSB7CisgICAgc3RhdGVDb3VudFswXSA9IDA7CisgICAgc3RhdGVDb3VudFsxXSA9IDA7CisgICAgc3RhdGVDb3VudFsyXSA9IDA7CisgICAgc3RhdGVDb3VudFszXSA9IDA7CisgICAgc3RhdGVDb3VudFs0XSA9IDA7CisgICAgaW50IGN1cnJlbnRTdGF0ZSA9IDA7CisKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IG1heEo7IGorKykgeworICAgICAgaWYgKFtzZWxmLmltYWdlIGdldFg6aiB5OmldKSB7CisgICAgICAgIGlmICgoY3VycmVudFN0YXRlICYgMSkgPT0gMSkgeworICAgICAgICAgIGN1cnJlbnRTdGF0ZSsrOworICAgICAgICB9CisgICAgICAgIHN0YXRlQ291bnRbY3VycmVudFN0YXRlXSsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKChjdXJyZW50U3RhdGUgJiAxKSA9PSAwKSB7CisgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgICBpZiAoW1pYRmluZGVyUGF0dGVybkZpbmRlciBmb3VuZFBhdHRlcm5Dcm9zczpzdGF0ZUNvdW50XSAmJiBbc2VsZiBoYW5kbGVQb3NzaWJsZUNlbnRlcjpzdGF0ZUNvdW50IGk6aSBqOmpdKSB7CisgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IDA7CisgICAgICAgICAgICAgIHN0YXRlQ291bnRbMF0gPSAwOworICAgICAgICAgICAgICBzdGF0ZUNvdW50WzFdID0gMDsKKyAgICAgICAgICAgICAgc3RhdGVDb3VudFsyXSA9IDA7CisgICAgICAgICAgICAgIHN0YXRlQ291bnRbM10gPSAwOworICAgICAgICAgICAgICBzdGF0ZUNvdW50WzRdID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHN0YXRlQ291bnRbMF0gPSBzdGF0ZUNvdW50WzJdOworICAgICAgICAgICAgICBzdGF0ZUNvdW50WzFdID0gc3RhdGVDb3VudFszXTsKKyAgICAgICAgICAgICAgc3RhdGVDb3VudFsyXSA9IHN0YXRlQ291bnRbNF07CisgICAgICAgICAgICAgIHN0YXRlQ291bnRbM10gPSAxOworICAgICAgICAgICAgICBzdGF0ZUNvdW50WzRdID0gMDsKKyAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdGVDb3VudFsrK2N1cnJlbnRTdGF0ZV0rKzsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc3RhdGVDb3VudFtjdXJyZW50U3RhdGVdKys7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoW1pYRmluZGVyUGF0dGVybkZpbmRlciBmb3VuZFBhdHRlcm5Dcm9zczpzdGF0ZUNvdW50XSkgeworICAgICAgW3NlbGYgaGFuZGxlUG9zc2libGVDZW50ZXI6c3RhdGVDb3VudCBpOmkgajptYXhKXTsKKyAgICB9CisgIH0KKyAgTlNBcnJheSAqcGF0dGVybkluZm8gPSBbc2VsZiBzZWxlY3RCZXN0UGF0dGVybnNXaXRoRXJyb3I6ZXJyb3JdOworICBpZiAoIXBhdHRlcm5JbmZvKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgZm9yIChOU011dGFibGVBcnJheSAqcGF0dGVybiBpbiBwYXR0ZXJuSW5mbykgeworICAgIFtaWFJlc3VsdFBvaW50IG9yZGVyQmVzdFBhdHRlcm5zOnBhdHRlcm5dOworICAgIFtyZXN1bHQgYWRkT2JqZWN0OltbWlhGaW5kZXJQYXR0ZXJuSW5mbyBhbGxvY10gaW5pdFdpdGhQYXR0ZXJuQ2VudGVyczpwYXR0ZXJuXV07CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIEEgY29tcGFyYXRvciB0aGF0IG9yZGVycyBGaW5kZXJQYXR0ZXJucyBieSB0aGVpciBlc3RpbWF0ZWQgbW9kdWxlIHNpemUuCisgKi8KK05TSW50ZWdlciBtb2R1bGVTaXplQ29tcGFyZShpZCBjZW50ZXIxLCBpZCBjZW50ZXIyLCB2b2lkICpjb250ZXh0KSB7CisgIGZsb2F0IHZhbHVlID0gWygoWlhRUkNvZGVGaW5kZXJQYXR0ZXJuICopY2VudGVyMikgZXN0aW1hdGVkTW9kdWxlU2l6ZV0gLSBbKChaWFFSQ29kZUZpbmRlclBhdHRlcm4gKiljZW50ZXIxKSBlc3RpbWF0ZWRNb2R1bGVTaXplXTsKKyAgcmV0dXJuIHZhbHVlIDwgMC4wID8gLTEgOiB2YWx1ZSA+IDAuMCA/IDEgOiAwOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWENvZGFCYXJSZWFkZXIuaCBiL1pYaW5nT2JqQy9vbmVkL1pYQ29kYUJhclJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NTBkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWENvZGFCYXJSZWFkZXIuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWE9uZURSZWFkZXIuaCIKKworZXh0ZXJuIGNvbnN0IGludCBDT0RBX0FMUEhBQkVUX0xFTjsKK2V4dGVybiBjb25zdCBjaGFyIENPREFfQUxQSEFCRVRbXTsKK2V4dGVybiBjb25zdCBpbnQgQ09EQV9DSEFSQUNURVJfRU5DT0RJTkdTW107CisKK0BjbGFzcyBaWEJpdEFycmF5LCBaWERlY29kZUhpbnRzLCBaWFJlc3VsdDsKKworLyoqCisgKiBEZWNvZGVzIENvZGFiYXIgYmFyY29kZXMuCisgKi8KK0BpbnRlcmZhY2UgWlhDb2RhQmFyUmVhZGVyIDogWlhPbmVEUmVhZGVyCisKKysgKEJPT0wpYXJyYXlDb250YWluczooY2hhciAqKWFycmF5IGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCBrZXk6KHVuaWNoYXIpa2V5OworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWENvZGFCYXJSZWFkZXIubSBiL1pYaW5nT2JqQy9vbmVkL1pYQ29kYUJhclJlYWRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OGIxYTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWENvZGFCYXJSZWFkZXIubQpAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhDb2RhQmFyUmVhZGVyLmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKworLy8gVGhlc2UgdmFsdWVzIGFyZSBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgaG93IHBlcm1pc3NpdmUgdGhlIGRlY29kaW5nCisvLyB3aWxsIGJlLiBBbGwgc3RyaXBlIHNpemVzIG11c3QgYmUgd2l0aGluIHRoZSB3aW5kb3cgdGhlc2UgZGVmaW5lLCBhcworLy8gY29tcGFyZWQgdG8gdGhlIGF2ZXJhZ2Ugc3RyaXBlIHNpemUuCitzdGF0aWMgaW50IE1BWF9BQ0NFUFRBQkxFOworc3RhdGljIGludCBQQURESU5HOworCitjb25zdCBpbnQgQ09EQV9BTFBIQUJFVF9MRU4gPSAyMjsKK2NvbnN0IGNoYXIgQ09EQV9BTFBIQUJFVFtDT0RBX0FMUEhBQkVUX0xFTl0gPSAiMDEyMzQ1Njc4OS0kOi8uK0FCQ0RUTiI7CisKKy8qKgorICogVGhlc2UgcmVwcmVzZW50IHRoZSBlbmNvZGluZ3Mgb2YgY2hhcmFjdGVycywgYXMgcGF0dGVybnMgb2Ygd2lkZSBhbmQgbmFycm93IGJhcnMuIFRoZSA3IGxlYXN0LXNpZ25pZmljYW50IGJpdHMgb2YKKyAqIGVhY2ggaW50IGNvcnJlc3BvbmQgdG8gdGhlIHBhdHRlcm4gb2Ygd2lkZSBhbmQgbmFycm93LCB3aXRoIDFzIHJlcHJlc2VudGluZyAid2lkZSIgYW5kIDBzIHJlcHJlc2VudGluZyBuYXJyb3cuCisgKi8KK2NvbnN0IGludCBDT0RBX0NIQVJBQ1RFUl9FTkNPRElOR1NfTEVOID0gMjA7Citjb25zdCBpbnQgQ09EQV9DSEFSQUNURVJfRU5DT0RJTkdTW0NPREFfQ0hBUkFDVEVSX0VOQ09ESU5HU19MRU5dID0geworICAweDAwMywgMHgwMDYsIDB4MDA5LCAweDA2MCwgMHgwMTIsIDB4MDQyLCAweDAyMSwgMHgwMjQsIDB4MDMwLCAweDA0OCwgLy8gMC05CisgIDB4MDBjLCAweDAxOCwgMHgwNDUsIDB4MDUxLCAweDA1NCwgMHgwMTUsIDB4MDFBLCAweDAyOSwgMHgwMEIsIDB4MDBFLCAvLyAtJDovLitBQkNECit9OworCisvLyBtaW5pbWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIGJlIHByZXNlbnQgKGluY2x1c2luZyBzdGFydCBhbmQgc3RvcCBjaGFyYWN0ZXJzKQorLy8gdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMgdGhpcyBzaG91bGQgYmUgc2V0IHRvIDMsIGJ1dCBjYW4gYmUgc2V0IGhpZ2hlcgorLy8gYXMgYSBsYXN0LWRpdGNoIGF0dGVtcHQgdG8gcmVkdWNlIGZhbHNlIHBvc2l0aXZlcy4KK2NvbnN0IGludCBNSU5fQ0hBUkFDVEVSX0xFTkdUSCA9IDM7CisKKy8vIG9mZmljaWFsIHN0YXJ0IGFuZCBlbmQgcGF0dGVybnMKK2NvbnN0IGludCBTVEFSVEVORF9FTkNPRElOR19MRU4gPSA0OworY29uc3QgY2hhciBTVEFSVEVORF9FTkNPRElOR1tTVEFSVEVORF9FTkNPRElOR19MRU5dICA9IHsnQScsICdCJywgJ0MnLCAnRCd9OworCisvLyBzb21lIGNvZGFiYXIgZ2VuZXJhdG9yIGFsbG93IHRoZSBjb2RhYmFyIHN0cmluZyB0byBiZSBjbG9zZWQgYnkgZXZlcnkKKy8vIGNoYXJhY3Rlci4gVGhpcyB3aWxsIGNhdXNlIGxvdHMgb2YgZmFsc2UgcG9zaXRpdmVzIQorCisvLyBzb21lIGluZHVzdHJpZXMgdXNlIGEgY2hlY2tzdW0gc3RhbmRhcmQgYnV0IHRoaXMgaXMgbm90IHBhcnQgb2YgdGhlIG9yaWdpbmFsIGNvZGFiYXIgc3RhbmRhcmQKKy8vIGZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSA6IGh0dHA6Ly93d3cubWVjc3cuY29tL3NwZWNzL2NvZGFiYXIuaHRtbAorCitAaW50ZXJmYWNlIFpYQ29kYUJhclJlYWRlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU011dGFibGVTdHJpbmcgKmRlY29kZVJvd1Jlc3VsdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCAqY291bnRlcnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY291bnRlcnNMZW47CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY291bnRlckxlbmd0aDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhDb2RhQmFyUmVhZGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZSB7CisgIE1BWF9BQ0NFUFRBQkxFID0gKGludCkgKFBBVFRFUk5fTUFUQ0hfUkVTVUxUX1NDQUxFX0ZBQ1RPUiAqIDIuMGYpOworICBQQURESU5HID0gKGludCkgKFBBVFRFUk5fTUFUQ0hfUkVTVUxUX1NDQUxFX0ZBQ1RPUiAqIDEuNWYpOworfQorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfZGVjb2RlUm93UmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6MjBdOworICAgIF9jb3VudGVyc0xlbiA9IDgwOworICAgIF9jb3VudGVycyA9IChpbnQgKiltYWxsb2MoX2NvdW50ZXJzTGVuICogc2l6ZW9mKGludCkpOworICAgIG1lbXNldChfY291bnRlcnMsIDAsIF9jb3VudGVyc0xlbiAqIHNpemVvZihpbnQpKTsKKyAgICBfY291bnRlckxlbmd0aCA9IDA7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jIHsKKyAgaWYgKF9jb3VudGVycyAhPSBOVUxMKSB7CisgICAgZnJlZShfY291bnRlcnMpOworICAgIF9jb3VudGVycyA9IE5VTEw7CisgIH0KK30KKworLSAoWlhSZXN1bHQgKilkZWNvZGVSb3c6KGludClyb3dOdW1iZXIgcm93OihaWEJpdEFycmF5ICopcm93IGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoIVtzZWxmIHNldENvdW50ZXJzV2l0aFJvdzpyb3ddKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaW50IHN0YXJ0T2Zmc2V0ID0gW3NlbGYgZmluZFN0YXJ0UGF0dGVybl07CisgIGlmIChzdGFydE9mZnNldCA9PSAtMSkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGludCBuZXh0U3RhcnQgPSBzdGFydE9mZnNldDsKKworICBzZWxmLmRlY29kZVJvd1Jlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgZG8geworICAgIGludCBjaGFyT2Zmc2V0ID0gW3NlbGYgdG9OYXJyb3dXaWRlUGF0dGVybjpuZXh0U3RhcnRdOworICAgIGlmIChjaGFyT2Zmc2V0ID09IC0xKSB7CisgICAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgLy8gSGFjazogV2Ugc3RvcmUgdGhlIHBvc2l0aW9uIGluIHRoZSBhbHBoYWJldCB0YWJsZSBpbnRvIGEKKyAgICAvLyBOU011dGFibGVTdHJpbmcsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGUgZGVjb2RlZCBwYXR0ZXJucyBpbgorICAgIC8vIHZhbGlkYXRlUGF0dGVybi4gV2UnbGwgdHJhbnNsYXRlIHRvIHRoZSBhY3R1YWwgY2hhcmFjdGVycyBsYXRlci4KKyAgICBbc2VsZi5kZWNvZGVSb3dSZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhciljaGFyT2Zmc2V0XTsKKyAgICBuZXh0U3RhcnQgKz0gODsKKyAgICAvLyBTdG9wIGFzIHNvb24gYXMgd2Ugc2VlIHRoZSBlbmQgY2hhcmFjdGVyLgorICAgIGlmIChzZWxmLmRlY29kZVJvd1Jlc3VsdC5sZW5ndGggPiAxICYmCisgICAgICAgIFtaWENvZGFCYXJSZWFkZXIgYXJyYXlDb250YWluczooY2hhciAqKVNUQVJURU5EX0VOQ09ESU5HIGxlbmd0aDpTVEFSVEVORF9FTkNPRElOR19MRU4ga2V5OkNPREFfQUxQSEFCRVRbY2hhck9mZnNldF1dKSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0gd2hpbGUgKG5leHRTdGFydCA8IHNlbGYuY291bnRlckxlbmd0aCk7IC8vIG5vIGZpeGVkIGVuZCBwYXR0ZXJuIHNvIGtlZXAgb24gcmVhZGluZyB3aGlsZSBkYXRhIGlzIGF2YWlsYWJsZQorCisgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2UgYWZ0ZXIgcGF0dGVybjoKKyAgaW50IHRyYWlsaW5nV2hpdGVzcGFjZSA9IHNlbGYuY291bnRlcnNbbmV4dFN0YXJ0IC0gMV07CisgIGludCBsYXN0UGF0dGVyblNpemUgPSAwOworICBmb3IgKGludCBpID0gLTg7IGkgPCAtMTsgaSsrKSB7CisgICAgbGFzdFBhdHRlcm5TaXplICs9IHNlbGYuY291bnRlcnNbbmV4dFN0YXJ0ICsgaV07CisgIH0KKworICAvLyBXZSBuZWVkIHRvIHNlZSB3aGl0ZXNwYWNlIGVxdWFsIHRvIDUwJSBvZiB0aGUgbGFzdCBwYXR0ZXJuIHNpemUsCisgIC8vIG90aGVyd2lzZSB0aGlzIGlzIHByb2JhYmx5IGEgZmFsc2UgcG9zaXRpdmUuIFRoZSBleGNlcHRpb24gaXMgaWYgd2UgYXJlCisgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIHJvdy4gKEkuZS4gdGhlIGJhcmNvZGUgYmFyZWx5IGZpdHMuKQorICBpZiAobmV4dFN0YXJ0IDwgc2VsZi5jb3VudGVyTGVuZ3RoICYmIHRyYWlsaW5nV2hpdGVzcGFjZSA8IGxhc3RQYXR0ZXJuU2l6ZSAvIDIpIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpZiAoIVtzZWxmIHZhbGlkYXRlUGF0dGVybjpzdGFydE9mZnNldF0pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICAvLyBUcmFuc2xhdGUgY2hhcmFjdGVyIHRhYmxlIG9mZnNldHMgdG8gYWN0dWFsIGNoYXJhY3RlcnMuCisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VsZi5kZWNvZGVSb3dSZXN1bHQubGVuZ3RoOyBpKyspIHsKKyAgICBbc2VsZi5kZWNvZGVSb3dSZXN1bHQgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKGksIDEpIHdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlYyIsIENPREFfQUxQSEFCRVRbW3NlbGYuZGVjb2RlUm93UmVzdWx0IGNoYXJhY3RlckF0SW5kZXg6aV1dXV07CisgIH0KKyAgLy8gRW5zdXJlIGEgdmFsaWQgc3RhcnQgYW5kIGVuZCBjaGFyYWN0ZXIKKyAgdW5pY2hhciBzdGFydGNoYXIgPSBbc2VsZi5kZWNvZGVSb3dSZXN1bHQgY2hhcmFjdGVyQXRJbmRleDowXTsKKyAgaWYgKCFbWlhDb2RhQmFyUmVhZGVyIGFycmF5Q29udGFpbnM6KGNoYXIgKilTVEFSVEVORF9FTkNPRElORyBsZW5ndGg6U1RBUlRFTkRfRU5DT0RJTkdfTEVOIGtleTpzdGFydGNoYXJdKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisgIHVuaWNoYXIgZW5kY2hhciA9IFtzZWxmLmRlY29kZVJvd1Jlc3VsdCBjaGFyYWN0ZXJBdEluZGV4OnNlbGYuZGVjb2RlUm93UmVzdWx0Lmxlbmd0aCAtIDFdOworICBpZiAoIVtaWENvZGFCYXJSZWFkZXIgYXJyYXlDb250YWluczooY2hhciAqKVNUQVJURU5EX0VOQ09ESU5HIGxlbmd0aDpTVEFSVEVORF9FTkNPRElOR19MRU4ga2V5OmVuZGNoYXJdKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgLy8gcmVtb3ZlIHN0b3Avc3RhcnQgY2hhcmFjdGVycyBjaGFyYWN0ZXIgYW5kIGNoZWNrIGlmIGEgbG9uZyBlbm91Z2ggc3RyaW5nIGlzIGNvbnRhaW5lZAorICBpZiAoc2VsZi5kZWNvZGVSb3dSZXN1bHQubGVuZ3RoIDw9IE1JTl9DSEFSQUNURVJfTEVOR1RIKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgW3NlbGYuZGVjb2RlUm93UmVzdWx0IGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKHNlbGYuZGVjb2RlUm93UmVzdWx0Lmxlbmd0aCAtIDEsIDEpXTsKKyAgW3NlbGYuZGVjb2RlUm93UmVzdWx0IGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIDEpXTsKKworICBpbnQgcnVubmluZ0NvdW50ID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGFydE9mZnNldDsgaSsrKSB7CisgICAgcnVubmluZ0NvdW50ICs9IHNlbGYuY291bnRlcnNbaV07CisgIH0KKyAgZmxvYXQgbGVmdCA9IChmbG9hdCkgcnVubmluZ0NvdW50OworICBmb3IgKGludCBpID0gc3RhcnRPZmZzZXQ7IGkgPCBuZXh0U3RhcnQgLSAxOyBpKyspIHsKKyAgICBydW5uaW5nQ291bnQgKz0gc2VsZi5jb3VudGVyc1tpXTsKKyAgfQorICBmbG9hdCByaWdodCA9IChmbG9hdCkgcnVubmluZ0NvdW50OworICByZXR1cm4gW1pYUmVzdWx0IHJlc3VsdFdpdGhUZXh0OnNlbGYuZGVjb2RlUm93UmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Qnl0ZXM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6MAorICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UG9pbnRzOkBbW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6bGVmdCB5OihmbG9hdClyb3dOdW1iZXJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6cmlnaHQgeTooZmxvYXQpcm93TnVtYmVyXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDprQmFyY29kZUZvcm1hdENvZGFiYXJdOworfQorCistIChCT09MKXZhbGlkYXRlUGF0dGVybjooaW50KXN0YXJ0IHsKKyAgLy8gRmlyc3QsIHN1bSB1cCB0aGUgdG90YWwgc2l6ZSBvZiBvdXIgZm91ciBjYXRlZ29yaWVzIG9mIHN0cmlwZSBzaXplczsKKyAgaW50IHNpemVzWzRdID0gezAsIDAsIDAsIDB9OworICBpbnQgY291bnRzWzRdID0gezAsIDAsIDAsIDB9OworICBpbnQgZW5kID0gKGludClzZWxmLmRlY29kZVJvd1Jlc3VsdC5sZW5ndGggLSAxOworCisgIC8vIFdlIGJyZWFrIG91dCBvZiB0aGlzIGxvb3AgaW4gdGhlIG1pZGRsZSwgaW4gb3JkZXIgdG8gaGFuZGxlCisgIC8vIGludGVyLWNoYXJhY3RlciBzcGFjZXMgcHJvcGVybHkuCisgIGludCBwb3MgPSBzdGFydDsKKyAgZm9yIChpbnQgaSA9IDA7IHRydWU7IGkrKykgeworICAgIGludCBwYXR0ZXJuID0gQ09EQV9DSEFSQUNURVJfRU5DT0RJTkdTW1tzZWxmLmRlY29kZVJvd1Jlc3VsdCBjaGFyYWN0ZXJBdEluZGV4OmldXTsKKyAgICBmb3IgKGludCBqID0gNjsgaiA+PSAwOyBqLS0pIHsKKyAgICAgIC8vIEV2ZW4gaiA9IGJhcnMsIHdoaWxlIG9kZCBqID0gc3BhY2VzLiBDYXRlZ29yaWVzIDIgYW5kIDMgYXJlIGZvcgorICAgICAgLy8gbG9uZyBzdHJpcGVzLCB3aGlsZSAwIGFuZCAxIGFyZSBmb3Igc2hvcnQgc3RyaXBlcy4KKyAgICAgIGludCBjYXRlZ29yeSA9IChqICYgMSkgKyAocGF0dGVybiAmIDEpICogMjsKKyAgICAgIHNpemVzW2NhdGVnb3J5XSArPSBzZWxmLmNvdW50ZXJzW3BvcyArIGpdOworICAgICAgY291bnRzW2NhdGVnb3J5XSsrOworICAgICAgcGF0dGVybiA+Pj0gMTsKKyAgICB9CisgICAgaWYgKGkgPj0gZW5kKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gV2UgaWdub3JlIHRoZSBpbnRlci1jaGFyYWN0ZXIgc3BhY2UgLSBpdCBjb3VsZCBiZSBvZiBhbnkgc2l6ZS4KKyAgICBwb3MgKz0gODsKKyAgfQorCisgIC8vIENhbGN1bGF0ZSBvdXIgYWxsb3dhYmxlIHNpemUgdGhyZXNob2xkcyB1c2luZyBmaXhlZC1wb2ludCBtYXRoLgorICBpbnQgbWF4ZXNbNF0gPSB7MH07CisgIGludCBtaW5zWzRdID0gezB9OworICAvLyBEZWZpbmUgdGhlIHRocmVzaG9sZCBvZiBhY2NlcHRhYmlsaXR5IHRvIGJlIHRoZSBtaWRwb2ludCBiZXR3ZWVuIHRoZQorICAvLyBhdmVyYWdlIHNtYWxsIHN0cmlwZSBhbmQgdGhlIGF2ZXJhZ2UgbGFyZ2Ugc3RyaXBlLiBObyBzdHJpcGUgbGVuZ3RocworICAvLyBzaG91bGQgYmUgb24gdGhlICJ3cm9uZyIgc2lkZSBvZiB0aGF0IGxpbmUuCisgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgbWluc1tpXSA9IDA7ICAvLyBBY2NlcHQgYXJiaXRyYXJpbHkgc21hbGwgInNob3J0IiBzdHJpcGVzLgorICAgIG1pbnNbaSArIDJdID0gKChzaXplc1tpXSA8PCBJTlRFR0VSX01BVEhfU0hJRlQpIC8gY291bnRzW2ldICsKKyAgICAgICAgICAgICAgICAgICAoc2l6ZXNbaSArIDJdIDw8IElOVEVHRVJfTUFUSF9TSElGVCkgLyBjb3VudHNbaSArIDJdKSA+PiAxOworICAgIG1heGVzW2ldID0gbWluc1tpICsgMl07CisgICAgbWF4ZXNbaSArIDJdID0gKHNpemVzW2kgKyAyXSAqIE1BWF9BQ0NFUFRBQkxFICsgUEFERElORykgLyBjb3VudHNbaSArIDJdOworICB9CisKKyAgLy8gTm93IHZlcmlmeSB0aGF0IGFsbCBvZiB0aGUgc3RyaXBlcyBhcmUgd2l0aGluIHRoZSB0aHJlc2hvbGRzLgorICBwb3MgPSBzdGFydDsKKyAgZm9yIChpbnQgaSA9IDA7IHRydWU7IGkrKykgeworICAgIGludCBwYXR0ZXJuID0gQ09EQV9DSEFSQUNURVJfRU5DT0RJTkdTW1tzZWxmLmRlY29kZVJvd1Jlc3VsdCBjaGFyYWN0ZXJBdEluZGV4OmldXTsKKyAgICBmb3IgKGludCBqID0gNjsgaiA+PSAwOyBqLS0pIHsKKyAgICAgIC8vIEV2ZW4gaiA9IGJhcnMsIHdoaWxlIG9kZCBqID0gc3BhY2VzLiBDYXRlZ29yaWVzIDIgYW5kIDMgYXJlIGZvcgorICAgICAgLy8gbG9uZyBzdHJpcGVzLCB3aGlsZSAwIGFuZCAxIGFyZSBmb3Igc2hvcnQgc3RyaXBlcy4KKyAgICAgIGludCBjYXRlZ29yeSA9IChqICYgMSkgKyAocGF0dGVybiAmIDEpICogMjsKKyAgICAgIGludCBzaXplID0gc2VsZi5jb3VudGVyc1twb3MgKyBqXSA8PCBJTlRFR0VSX01BVEhfU0hJRlQ7CisgICAgICBpZiAoc2l6ZSA8IG1pbnNbY2F0ZWdvcnldIHx8IHNpemUgPiBtYXhlc1tjYXRlZ29yeV0pIHsKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgfQorICAgICAgcGF0dGVybiA+Pj0gMTsKKyAgICB9CisgICAgaWYgKGkgPj0gZW5kKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgcG9zICs9IDg7CisgIH0KKworICByZXR1cm4gWUVTOworfQorCisvKioKKyAqIFJlY29yZHMgdGhlIHNpemUgb2YgYWxsIHJ1bnMgb2Ygd2hpdGUgYW5kIGJsYWNrIHBpeGVscywgc3RhcnRpbmcgd2l0aCB3aGl0ZS4KKyAqIFRoaXMgaXMganVzdCBsaWtlIHJlY29yZFBhdHRlcm4sIGV4Y2VwdCBpdCByZWNvcmRzIGFsbCB0aGUgY291bnRlcnMsIGFuZAorICogdXNlcyBvdXIgYnVpbHRpbiAiY291bnRlcnMiIG1lbWJlciBmb3Igc3RvcmFnZS4KKyAqLworLSAoQk9PTClzZXRDb3VudGVyc1dpdGhSb3c6KFpYQml0QXJyYXkgKilyb3cgeworICBzZWxmLmNvdW50ZXJMZW5ndGggPSAwOworICAvLyBTdGFydCBmcm9tIHRoZSBmaXJzdCB3aGl0ZSBiaXQuCisgIGludCBpID0gW3JvdyBuZXh0VW5zZXQ6MF07CisgIGludCBlbmQgPSByb3cuc2l6ZTsKKyAgaWYgKGkgPj0gZW5kKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIEJPT0wgaXNXaGl0ZSA9IFlFUzsKKyAgaW50IGNvdW50ID0gMDsKKyAgZm9yICg7IGkgPCBlbmQ7IGkrKykgeworICAgIGlmIChbcm93IGdldDppXSBeIGlzV2hpdGUpIHsgLy8gdGhhdCBpcywgZXhhY3RseSBvbmUgaXMgdHJ1ZQorICAgICAgY291bnQrKzsKKyAgICB9IGVsc2UgeworICAgICAgW3NlbGYgY291bnRlckFwcGVuZDpjb3VudF07CisgICAgICBjb3VudCA9IDE7CisgICAgICBpc1doaXRlID0gIWlzV2hpdGU7CisgICAgfQorICB9CisgIFtzZWxmIGNvdW50ZXJBcHBlbmQ6Y291bnRdOworICByZXR1cm4gWUVTOworfQorCistICh2b2lkKWNvdW50ZXJBcHBlbmQ6KGludCllIHsKKyAgc2VsZi5jb3VudGVyc1tzZWxmLmNvdW50ZXJMZW5ndGhdID0gZTsKKyAgc2VsZi5jb3VudGVyTGVuZ3RoKys7CisgIGlmIChzZWxmLmNvdW50ZXJMZW5ndGggPj0gc2VsZi5jb3VudGVyc0xlbikgeworICAgIGludCAqdGVtcCA9IChpbnQgKiltYWxsb2MoMiAqIHNlbGYuY291bnRlckxlbmd0aCAqIHNpemVvZihpbnQpKTsKKyAgICBtZW1jcHkodGVtcCwgc2VsZi5jb3VudGVycywgc2VsZi5jb3VudGVyc0xlbiAqIHNpemVvZihpbnQpKTsKKyAgICBzZWxmLmNvdW50ZXJzID0gdGVtcDsKKyAgICBtZW1zZXQoc2VsZi5jb3VudGVycywgMCwgMiAqIHNlbGYuY291bnRlckxlbmd0aCAqIHNpemVvZihpbnQpKTsKKyAgICBzZWxmLmNvdW50ZXJzTGVuID0gMiAqIHNlbGYuY291bnRlckxlbmd0aDsKKyAgfQorfQorCistIChpbnQpZmluZFN0YXJ0UGF0dGVybiB7CisgIGZvciAoaW50IGkgPSAxOyBpIDwgc2VsZi5jb3VudGVyTGVuZ3RoOyBpICs9IDIpIHsKKyAgICBpbnQgY2hhck9mZnNldCA9IFtzZWxmIHRvTmFycm93V2lkZVBhdHRlcm46aV07CisgICAgaWYgKGNoYXJPZmZzZXQgIT0gLTEgJiYgW1tzZWxmIGNsYXNzXSBhcnJheUNvbnRhaW5zOihjaGFyICopU1RBUlRFTkRfRU5DT0RJTkcgbGVuZ3RoOlNUQVJURU5EX0VOQ09ESU5HX0xFTiBrZXk6Q09EQV9BTFBIQUJFVFtjaGFyT2Zmc2V0XV0pIHsKKyAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2UgYmVmb3JlIHN0YXJ0IHBhdHRlcm4sID49IDUwJSBvZiB3aWR0aCBvZiBzdGFydCBwYXR0ZXJuCisgICAgICAvLyBXZSBtYWtlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgd2hpdGVzcGFjZSBpcyB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICAgIGludCBwYXR0ZXJuU2l6ZSA9IDA7CisgICAgICBmb3IgKGludCBqID0gaTsgaiA8IGkgKyA3OyBqKyspIHsKKyAgICAgICAgcGF0dGVyblNpemUgKz0gc2VsZi5jb3VudGVyc1tqXTsKKyAgICAgIH0KKyAgICAgIGlmIChpID09IDEgfHwgc2VsZi5jb3VudGVyc1tpLTFdID49IHBhdHRlcm5TaXplIC8gMikgeworICAgICAgICByZXR1cm4gaTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gLTE7Cit9CisKKysgKEJPT0wpYXJyYXlDb250YWluczooY2hhciAqKWFycmF5IGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCBrZXk6KHVuaWNoYXIpa2V5IHsKKyAgaWYgKGFycmF5ICE9IG5pbCkgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmIChhcnJheVtpXSA9PSBrZXkpIHsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIE5POworfQorCisvLyBBc3N1bWVzIHRoYXQgY291bnRlcnNbcG9zaXRpb25dIGlzIGEgYmFyLgorLSAoaW50KXRvTmFycm93V2lkZVBhdHRlcm46KGludClwb3NpdGlvbiB7CisgIGludCBlbmQgPSBwb3NpdGlvbiArIDc7CisgIGlmIChlbmQgPj0gc2VsZi5jb3VudGVyTGVuZ3RoKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaW50IG1heEJhciA9IDA7CisgIGludCBtaW5CYXIgPSBJTlRfTUFYOworICBmb3IgKGludCBqID0gcG9zaXRpb247IGogPCBlbmQ7IGogKz0gMikgeworICAgIGludCBjdXJyZW50Q291bnRlciA9IHNlbGYuY291bnRlcnNbal07CisgICAgaWYgKGN1cnJlbnRDb3VudGVyIDwgbWluQmFyKSB7CisgICAgICBtaW5CYXIgPSBjdXJyZW50Q291bnRlcjsKKyAgICB9CisgICAgaWYgKGN1cnJlbnRDb3VudGVyID4gbWF4QmFyKSB7CisgICAgICBtYXhCYXIgPSBjdXJyZW50Q291bnRlcjsKKyAgICB9CisgIH0KKyAgaW50IHRocmVzaG9sZEJhciA9IChtaW5CYXIgKyBtYXhCYXIpIC8gMjsKKworICBpbnQgbWF4U3BhY2UgPSAwOworICBpbnQgbWluU3BhY2UgPSBJTlRfTUFYOworICBmb3IgKGludCBqID0gcG9zaXRpb24gKyAxOyBqIDwgZW5kOyBqICs9IDIpIHsKKyAgICBpbnQgY3VycmVudENvdW50ZXIgPSBzZWxmLmNvdW50ZXJzW2pdOworICAgIGlmIChjdXJyZW50Q291bnRlciA8IG1pblNwYWNlKSB7CisgICAgICBtaW5TcGFjZSA9IGN1cnJlbnRDb3VudGVyOworICAgIH0KKyAgICBpZiAoY3VycmVudENvdW50ZXIgPiBtYXhTcGFjZSkgeworICAgICAgbWF4U3BhY2UgPSBjdXJyZW50Q291bnRlcjsKKyAgICB9CisgIH0KKyAgaW50IHRocmVzaG9sZFNwYWNlID0gKG1pblNwYWNlICsgbWF4U3BhY2UpIC8gMjsKKworICBpbnQgYml0bWFzayA9IDEgPDwgNzsKKyAgaW50IHBhdHRlcm4gPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IDc7IGkrKykgeworICAgIGludCB0aHJlc2hvbGQgPSAoaSAmIDEpID09IDAgPyB0aHJlc2hvbGRCYXIgOiB0aHJlc2hvbGRTcGFjZTsKKyAgICBiaXRtYXNrID4+PSAxOworICAgIGlmIChzZWxmLmNvdW50ZXJzW3Bvc2l0aW9uICsgaV0gPiB0aHJlc2hvbGQpIHsKKyAgICAgIHBhdHRlcm4gfD0gYml0bWFzazsKKyAgICB9CisgIH0KKworICBmb3IgKGludCBpID0gMDsgaSA8IENPREFfQ0hBUkFDVEVSX0VOQ09ESU5HU19MRU47IGkrKykgeworICAgIGlmIChDT0RBX0NIQVJBQ1RFUl9FTkNPRElOR1NbaV0gPT0gcGF0dGVybikgeworICAgICAgcmV0dXJuIGk7CisgICAgfQorICB9CisgIHJldHVybiAtMTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhDb2RhQmFyV3JpdGVyLmggYi9aWGluZ09iakMvb25lZC9aWENvZGFCYXJXcml0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDc2NDhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RhQmFyV3JpdGVyLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIuaCIKKworQGludGVyZmFjZSBaWENvZGFCYXJXcml0ZXIgOiBaWE9uZURpbWVuc2lvbmFsQ29kZVdyaXRlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWENvZGFCYXJXcml0ZXIubSBiL1pYaW5nT2JqQy9vbmVkL1pYQ29kYUJhcldyaXRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NTVlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWENvZGFCYXJXcml0ZXIubQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhDb2RhQmFyUmVhZGVyLmgiCisjaW1wb3J0ICJaWENvZGFCYXJXcml0ZXIuaCIKKworY29uc3QgaW50IFNUQVJUX0NIQVJTX0xFTiA9IDQ7Citjb25zdCBjaGFyIFNUQVJUX0NIQVJTW1NUQVJUX0NIQVJTX0xFTl0gPSAiQUJDRCI7CisKK2NvbnN0IGludCBFTkRfQ0hBUlNfTEVOID0gNDsKK2NvbnN0IGNoYXIgRU5EX0NIQVJTW0VORF9DSEFSU19MRU5dID0gIlROKkUiOworCitAaW1wbGVtZW50YXRpb24gWlhDb2RhQmFyV3JpdGVyCisKKy0gKEJPT0wgKillbmNvZGU6KE5TU3RyaW5nICopY29udGVudHMgbGVuZ3RoOihpbnQgKilwTGVuZ3RoIHsKKyAgLy8gVmVyaWZ5IGlucHV0IGFuZCBjYWxjdWxhdGUgZGVjb2RlZCBsZW5ndGguCisgIGlmICghW1pYQ29kYUJhclJlYWRlciBhcnJheUNvbnRhaW5zOihjaGFyICopU1RBUlRfQ0hBUlMgbGVuZ3RoOlNUQVJUX0NIQVJTX0xFTiBrZXk6W1tjb250ZW50cyB1cHBlcmNhc2VTdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6MF1dKSB7CisgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJDb2RhYmFyIHNob3VsZCBzdGFydCB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nOiAlQCIsIFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpTVEFSVF9DSEFSUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWxdOworICB9CisgIGlmICghW1pYQ29kYUJhclJlYWRlciBhcnJheUNvbnRhaW5zOihjaGFyICopRU5EX0NIQVJTIGxlbmd0aDpFTkRfQ0hBUlNfTEVOIGtleTpbW2NvbnRlbnRzIHVwcGVyY2FzZVN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDpjb250ZW50cy5sZW5ndGggLSAxXV0pIHsKKyAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkNvZGFiYXIgc2hvdWxkIGVuZCB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nOiAlQCIsIFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpFTkRfQ0hBUlMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKKyAgfQorICAvLyBUaGUgc3RhcnQgY2hhcmFjdGVyIGFuZCB0aGUgZW5kIGNoYXJhY3RlciBhcmUgZGVjb2RlZCB0byAxMCBsZW5ndGggZWFjaC4KKyAgaW50IHJlc3VsdExlbmd0aCA9IDIwOworICBjaGFyIGNoYXJzV2hpY2hBcmVUZW5MZW5ndGhFYWNoQWZ0ZXJEZWNvZGVkWzRdID0geycvJywgJzonLCAnKycsICcuJ307CisgIGZvciAoaW50IGkgPSAxOyBpIDwgY29udGVudHMubGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKChbY29udGVudHMgY2hhcmFjdGVyQXRJbmRleDppXSA+PSAnMCcgJiYgW2NvbnRlbnRzIGNoYXJhY3RlckF0SW5kZXg6aV0gPD0gJzknKSB8fAorICAgICAgICBbY29udGVudHMgY2hhcmFjdGVyQXRJbmRleDppXSA9PSAnLScgfHwgW2NvbnRlbnRzIGNoYXJhY3RlckF0SW5kZXg6aV0gPT0gJyQnKSB7CisgICAgICByZXN1bHRMZW5ndGggKz0gOTsKKyAgICB9IGVsc2UgaWYgKFtaWENvZGFCYXJSZWFkZXIgYXJyYXlDb250YWluczpjaGFyc1doaWNoQXJlVGVuTGVuZ3RoRWFjaEFmdGVyRGVjb2RlZCBsZW5ndGg6NCBrZXk6W2NvbnRlbnRzIGNoYXJhY3RlckF0SW5kZXg6aV1dKSB7CisgICAgICByZXN1bHRMZW5ndGggKz0gMTA7CisgICAgfSBlbHNlIHsKKyAgICAgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJDYW5ub3QgZW5jb2RlIDogJyVDJyIsIFtjb250ZW50cyBjaGFyYWN0ZXJBdEluZGV4OmldXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWxdOworICAgIH0KKyAgfQorICAvLyBBIGJsYW5rIGlzIHBsYWNlZCBiZXR3ZWVuIGVhY2ggY2hhcmFjdGVyLgorICByZXN1bHRMZW5ndGggKz0gY29udGVudHMubGVuZ3RoIC0gMTsKKworICBpZiAocExlbmd0aCkgKnBMZW5ndGggPSByZXN1bHRMZW5ndGg7CisgIEJPT0wgKnJlc3VsdCA9IChCT09MICopbWFsbG9jKHJlc3VsdExlbmd0aCAqIHNpemVvZihCT09MKSk7CisgIGludCBwb3NpdGlvbiA9IDA7CisgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjb250ZW50cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICB1bmljaGFyIGMgPSBbW2NvbnRlbnRzIHVwcGVyY2FzZVN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDppbmRleF07CisgICAgaWYgKGluZGV4ID09IGNvbnRlbnRzLmxlbmd0aCAtIDEpIHsKKyAgICAgIC8vIFRoZSBlbmQgY2hhcnMgYXJlIG5vdCBpbiB0aGUgQ29kYUJhclJlYWRlci5BTFBIQUJFVC4KKyAgICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlICdUJzoKKyAgICAgICAgICBjID0gJ0EnOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdOJzoKKyAgICAgICAgICBjID0gJ0InOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICBjID0gJ0MnOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdFJzoKKyAgICAgICAgICBjID0gJ0QnOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBpbnQgY29kZSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBDT0RBX0FMUEhBQkVUX0xFTjsgaSsrKSB7CisgICAgICAvLyBGb3VuZCBhbnksIGJlY2F1c2UgSSBjaGVja2VkIGFib3ZlLgorICAgICAgaWYgKGMgPT0gQ09EQV9BTFBIQUJFVFtpXSkgeworICAgICAgICBjb2RlID0gQ09EQV9DSEFSQUNURVJfRU5DT0RJTkdTW2ldOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgQk9PTCBjb2xvciA9IFlFUzsKKyAgICBpbnQgY291bnRlciA9IDA7CisgICAgaW50IGJpdCA9IDA7CisgICAgd2hpbGUgKGJpdCA8IDcpIHsgLy8gQSBjaGFyYWN0ZXIgY29uc2lzdHMgb2YgNyBkaWdpdC4KKyAgICAgIHJlc3VsdFtwb3NpdGlvbl0gPSBjb2xvcjsKKyAgICAgIHBvc2l0aW9uKys7CisgICAgICBpZiAoKChjb2RlID4+ICg2IC0gYml0KSkgJiAxKSA9PSAwIHx8IGNvdW50ZXIgPT0gMSkgeworICAgICAgICBjb2xvciA9ICFjb2xvcjsgLy8gRmxpcCB0aGUgY29sb3IuCisgICAgICAgIGJpdCsrOworICAgICAgICBjb3VudGVyID0gMDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNvdW50ZXIrKzsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGluZGV4IDwgY29udGVudHMubGVuZ3RoIC0gMSkgeworICAgICAgcmVzdWx0W3Bvc2l0aW9uXSA9IE5POworICAgICAgcG9zaXRpb24rKzsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhDb2RlMTI4UmVhZGVyLmggYi9aWGluZ09iakMvb25lZC9aWENvZGUxMjhSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNhYzQwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RlMTI4UmVhZGVyLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhPbmVEUmVhZGVyLmgiCisKKy8qKgorICogRGVjb2RlcyBDb2RlIDEyOCBiYXJjb2Rlcy4KKyAqLworCitleHRlcm4gY29uc3QgaW50IENPREVfUEFUVEVSTlNbXVs3XTsKKworZXh0ZXJuIGNvbnN0IGludCBDT0RFX1NUQVJUX0I7CitleHRlcm4gY29uc3QgaW50IENPREVfU1RBUlRfQzsKK2V4dGVybiBjb25zdCBpbnQgQ09ERV9DT0RFX0I7CitleHRlcm4gY29uc3QgaW50IENPREVfQ09ERV9DOworZXh0ZXJuIGNvbnN0IGludCBDT0RFX1NUT1A7CisKK2V4dGVybiBpbnQgY29uc3QgQ09ERV9GTkNfMTsKK2V4dGVybiBpbnQgY29uc3QgQ09ERV9GTkNfMjsKK2V4dGVybiBpbnQgY29uc3QgQ09ERV9GTkNfMzsKK2V4dGVybiBpbnQgY29uc3QgQ09ERV9GTkNfNF9BOworZXh0ZXJuIGludCBjb25zdCBDT0RFX0ZOQ180X0I7CisKK0BjbGFzcyBaWERlY29kZUhpbnRzLCBaWFJlc3VsdDsKKworQGludGVyZmFjZSBaWENvZGUxMjhSZWFkZXIgOiBaWE9uZURSZWFkZXIKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhDb2RlMTI4UmVhZGVyLm0gYi9aWGluZ09iakMvb25lZC9aWENvZGUxMjhSZWFkZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjdhNWYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RlMTI4UmVhZGVyLm0KQEAgLTAsMCArMSw1MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0QXJyYXkuaCIKKyNpbXBvcnQgIlpYQ29kZTEyOFJlYWRlci5oIgorI2ltcG9ydCAiWlhEZWNvZGVIaW50cy5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYT25lRFJlYWRlci5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKworI2RlZmluZSBDT0RFX1BBVFRFUk5TX0xFTkdUSCAxMDcKKyNkZWZpbmUgY291bnRlcnNMZW5ndGggNworCitjb25zdCBpbnQgQ09ERV9QQVRURVJOU1tDT0RFX1BBVFRFUk5TX0xFTkdUSF1bY291bnRlcnNMZW5ndGhdID0geworICB7MiwgMSwgMiwgMiwgMiwgMn0sIC8vIDAKKyAgezIsIDIsIDIsIDEsIDIsIDJ9LAorICB7MiwgMiwgMiwgMiwgMiwgMX0sCisgIHsxLCAyLCAxLCAyLCAyLCAzfSwKKyAgezEsIDIsIDEsIDMsIDIsIDJ9LAorICB7MSwgMywgMSwgMiwgMiwgMn0sIC8vIDUKKyAgezEsIDIsIDIsIDIsIDEsIDN9LAorICB7MSwgMiwgMiwgMywgMSwgMn0sCisgIHsxLCAzLCAyLCAyLCAxLCAyfSwKKyAgezIsIDIsIDEsIDIsIDEsIDN9LAorICB7MiwgMiwgMSwgMywgMSwgMn0sIC8vIDEwCisgIHsyLCAzLCAxLCAyLCAxLCAyfSwKKyAgezEsIDEsIDIsIDIsIDMsIDJ9LAorICB7MSwgMiwgMiwgMSwgMywgMn0sCisgIHsxLCAyLCAyLCAyLCAzLCAxfSwKKyAgezEsIDEsIDMsIDIsIDIsIDJ9LCAvLyAxNQorICB7MSwgMiwgMywgMSwgMiwgMn0sCisgIHsxLCAyLCAzLCAyLCAyLCAxfSwKKyAgezIsIDIsIDMsIDIsIDEsIDF9LAorICB7MiwgMiwgMSwgMSwgMywgMn0sCisgIHsyLCAyLCAxLCAyLCAzLCAxfSwgLy8gMjAKKyAgezIsIDEsIDMsIDIsIDEsIDJ9LAorICB7MiwgMiwgMywgMSwgMSwgMn0sCisgIHszLCAxLCAyLCAxLCAzLCAxfSwKKyAgezMsIDEsIDEsIDIsIDIsIDJ9LAorICB7MywgMiwgMSwgMSwgMiwgMn0sIC8vIDI1CisgIHszLCAyLCAxLCAyLCAyLCAxfSwKKyAgezMsIDEsIDIsIDIsIDEsIDJ9LAorICB7MywgMiwgMiwgMSwgMSwgMn0sCisgIHszLCAyLCAyLCAyLCAxLCAxfSwKKyAgezIsIDEsIDIsIDEsIDIsIDN9LCAvLyAzMAorICB7MiwgMSwgMiwgMywgMiwgMX0sCisgIHsyLCAzLCAyLCAxLCAyLCAxfSwKKyAgezEsIDEsIDEsIDMsIDIsIDN9LAorICB7MSwgMywgMSwgMSwgMiwgM30sCisgIHsxLCAzLCAxLCAzLCAyLCAxfSwgLy8gMzUKKyAgezEsIDEsIDIsIDMsIDEsIDN9LAorICB7MSwgMywgMiwgMSwgMSwgM30sCisgIHsxLCAzLCAyLCAzLCAxLCAxfSwKKyAgezIsIDEsIDEsIDMsIDEsIDN9LAorICB7MiwgMywgMSwgMSwgMSwgM30sIC8vIDQwCisgIHsyLCAzLCAxLCAzLCAxLCAxfSwKKyAgezEsIDEsIDIsIDEsIDMsIDN9LAorICB7MSwgMSwgMiwgMywgMywgMX0sCisgIHsxLCAzLCAyLCAxLCAzLCAxfSwKKyAgezEsIDEsIDMsIDEsIDIsIDN9LCAvLyA0NQorICB7MSwgMSwgMywgMywgMiwgMX0sCisgIHsxLCAzLCAzLCAxLCAyLCAxfSwKKyAgezMsIDEsIDMsIDEsIDIsIDF9LAorICB7MiwgMSwgMSwgMywgMywgMX0sCisgIHsyLCAzLCAxLCAxLCAzLCAxfSwgLy8gNTAKKyAgezIsIDEsIDMsIDEsIDEsIDN9LAorICB7MiwgMSwgMywgMywgMSwgMX0sCisgIHsyLCAxLCAzLCAxLCAzLCAxfSwKKyAgezMsIDEsIDEsIDEsIDIsIDN9LAorICB7MywgMSwgMSwgMywgMiwgMX0sIC8vIDU1CisgIHszLCAzLCAxLCAxLCAyLCAxfSwKKyAgezMsIDEsIDIsIDEsIDEsIDN9LAorICB7MywgMSwgMiwgMywgMSwgMX0sCisgIHszLCAzLCAyLCAxLCAxLCAxfSwKKyAgezMsIDEsIDQsIDEsIDEsIDF9LCAvLyA2MAorICB7MiwgMiwgMSwgNCwgMSwgMX0sCisgIHs0LCAzLCAxLCAxLCAxLCAxfSwKKyAgezEsIDEsIDEsIDIsIDIsIDR9LAorICB7MSwgMSwgMSwgNCwgMiwgMn0sCisgIHsxLCAyLCAxLCAxLCAyLCA0fSwgLy8gNjUKKyAgezEsIDIsIDEsIDQsIDIsIDF9LAorICB7MSwgNCwgMSwgMSwgMiwgMn0sCisgIHsxLCA0LCAxLCAyLCAyLCAxfSwKKyAgezEsIDEsIDIsIDIsIDEsIDR9LAorICB7MSwgMSwgMiwgNCwgMSwgMn0sIC8vIDcwCisgIHsxLCAyLCAyLCAxLCAxLCA0fSwKKyAgezEsIDIsIDIsIDQsIDEsIDF9LAorICB7MSwgNCwgMiwgMSwgMSwgMn0sCisgIHsxLCA0LCAyLCAyLCAxLCAxfSwKKyAgezIsIDQsIDEsIDIsIDEsIDF9LCAvLyA3NQorICB7MiwgMiwgMSwgMSwgMSwgNH0sCisgIHs0LCAxLCAzLCAxLCAxLCAxfSwKKyAgezIsIDQsIDEsIDEsIDEsIDJ9LAorICB7MSwgMywgNCwgMSwgMSwgMX0sCisgIHsxLCAxLCAxLCAyLCA0LCAyfSwgLy8gODAKKyAgezEsIDIsIDEsIDEsIDQsIDJ9LAorICB7MSwgMiwgMSwgMiwgNCwgMX0sCisgIHsxLCAxLCA0LCAyLCAxLCAyfSwKKyAgezEsIDIsIDQsIDEsIDEsIDJ9LAorICB7MSwgMiwgNCwgMiwgMSwgMX0sIC8vIDg1CisgIHs0LCAxLCAxLCAyLCAxLCAyfSwKKyAgezQsIDIsIDEsIDEsIDEsIDJ9LAorICB7NCwgMiwgMSwgMiwgMSwgMX0sCisgIHsyLCAxLCAyLCAxLCA0LCAxfSwKKyAgezIsIDEsIDQsIDEsIDIsIDF9LCAvLyA5MAorICB7NCwgMSwgMiwgMSwgMiwgMX0sCisgIHsxLCAxLCAxLCAxLCA0LCAzfSwKKyAgezEsIDEsIDEsIDMsIDQsIDF9LAorICB7MSwgMywgMSwgMSwgNCwgMX0sCisgIHsxLCAxLCA0LCAxLCAxLCAzfSwgLy8gOTUKKyAgezEsIDEsIDQsIDMsIDEsIDF9LAorICB7NCwgMSwgMSwgMSwgMSwgM30sCisgIHs0LCAxLCAxLCAzLCAxLCAxfSwKKyAgezEsIDEsIDMsIDEsIDQsIDF9LAorICB7MSwgMSwgNCwgMSwgMywgMX0sIC8vIDEwMAorICB7MywgMSwgMSwgMSwgNCwgMX0sCisgIHs0LCAxLCAxLCAxLCAzLCAxfSwKKyAgezIsIDEsIDEsIDQsIDEsIDJ9LAorICB7MiwgMSwgMSwgMiwgMSwgNH0sCisgIHsyLCAxLCAxLCAyLCAzLCAyfSwgLy8gMTA1CisgIHsyLCAzLCAzLCAxLCAxLCAxLCAyfQorfTsKKworc3RhdGljIGludCBNQVhfQVZHX1ZBUklBTkNFID0gLTE7CitzdGF0aWMgaW50IE1BWF9JTkRJVklEVUFMX1ZBUklBTkNFID0gLTE7CisKK2ludCBjb25zdCBDT0RFX1NISUZUID0gOTg7CitpbnQgY29uc3QgQ09ERV9DT0RFX0MgPSA5OTsKK2ludCBjb25zdCBDT0RFX0NPREVfQiA9IDEwMDsKK2ludCBjb25zdCBDT0RFX0NPREVfQSA9IDEwMTsKK2ludCBjb25zdCBDT0RFX0ZOQ18xID0gMTAyOworaW50IGNvbnN0IENPREVfRk5DXzIgPSA5NzsKK2ludCBjb25zdCBDT0RFX0ZOQ18zID0gOTY7CitpbnQgY29uc3QgQ09ERV9GTkNfNF9BID0gMTAxOworaW50IGNvbnN0IENPREVfRk5DXzRfQiA9IDEwMDsKK2ludCBjb25zdCBDT0RFX1NUQVJUX0EgPSAxMDM7CitpbnQgY29uc3QgQ09ERV9TVEFSVF9CID0gMTA0OworaW50IGNvbnN0IENPREVfU1RBUlRfQyA9IDEwNTsKK2ludCBjb25zdCBDT0RFX1NUT1AgPSAxMDY7CisKK0BpbXBsZW1lbnRhdGlvbiBaWENvZGUxMjhSZWFkZXIKKworKyAodm9pZClpbml0aWFsaXplIHsKKyAgaWYgKE1BWF9BVkdfVkFSSUFOQ0UgPT0gLTEpIHsKKyAgICBNQVhfQVZHX1ZBUklBTkNFID0gKGludCkoUEFUVEVSTl9NQVRDSF9SRVNVTFRfU0NBTEVfRkFDVE9SICogMC4yNWYpOworICB9CisKKyAgaWYgKE1BWF9JTkRJVklEVUFMX1ZBUklBTkNFID09IC0xKSB7CisgICAgTUFYX0lORElWSURVQUxfVkFSSUFOQ0UgPSAoaW50KShQQVRURVJOX01BVENIX1JFU1VMVF9TQ0FMRV9GQUNUT1IgKiAwLjdmKTsKKyAgfQorfQorCistIChOU0FycmF5ICopZmluZFN0YXJ0UGF0dGVybjooWlhCaXRBcnJheSAqKXJvdyB7CisgIGludCB3aWR0aCA9IHJvdy5zaXplOworICBpbnQgcm93T2Zmc2V0ID0gW3JvdyBuZXh0U2V0OjBdOworCisgIGludCBjb3VudGVyUG9zaXRpb24gPSAwOworCisgIGNvbnN0IGludCBwYXR0ZXJuTGVuZ3RoID0gNjsKKyAgaW50IGNvdW50ZXJzW3BhdHRlcm5MZW5ndGhdOworICBtZW1zZXQoY291bnRlcnMsIDAsIHBhdHRlcm5MZW5ndGggKiBzaXplb2YoaW50KSk7CisKKyAgaW50IHBhdHRlcm5TdGFydCA9IHJvd09mZnNldDsKKyAgQk9PTCBpc1doaXRlID0gTk87CisKKyAgZm9yIChpbnQgaSA9IHJvd09mZnNldDsgaSA8IHdpZHRoOyBpKyspIHsKKyAgICBpZiAoW3JvdyBnZXQ6aV0gXiBpc1doaXRlKSB7CisgICAgICBjb3VudGVyc1tjb3VudGVyUG9zaXRpb25dKys7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChjb3VudGVyUG9zaXRpb24gPT0gcGF0dGVybkxlbmd0aCAtIDEpIHsKKyAgICAgICAgaW50IGJlc3RWYXJpYW5jZSA9IE1BWF9BVkdfVkFSSUFOQ0U7CisgICAgICAgIGludCBiZXN0TWF0Y2ggPSAtMTsKKyAgICAgICAgZm9yIChpbnQgc3RhcnRDb2RlID0gQ09ERV9TVEFSVF9BOyBzdGFydENvZGUgPD0gQ09ERV9TVEFSVF9DOyBzdGFydENvZGUrKykgeworICAgICAgICAgIGludCB2YXJpYW5jZSA9IFtaWE9uZURSZWFkZXIgcGF0dGVybk1hdGNoVmFyaWFuY2U6Y291bnRlcnMgY291bnRlcnNTaXplOnBhdHRlcm5MZW5ndGggcGF0dGVybjooaW50ICopQ09ERV9QQVRURVJOU1tzdGFydENvZGVdIG1heEluZGl2aWR1YWxWYXJpYW5jZTpNQVhfSU5ESVZJRFVBTF9WQVJJQU5DRV07CisgICAgICAgICAgaWYgKHZhcmlhbmNlIDwgYmVzdFZhcmlhbmNlKSB7CisgICAgICAgICAgICBiZXN0VmFyaWFuY2UgPSB2YXJpYW5jZTsKKyAgICAgICAgICAgIGJlc3RNYXRjaCA9IHN0YXJ0Q29kZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBiZWZvcmUgc3RhcnQgcGF0dGVybiwgPj0gNTAlIG9mIHdpZHRoIG9mIHN0YXJ0IHBhdHRlcm4KKyAgICAgICAgaWYgKGJlc3RNYXRjaCA+PSAwICYmCisgICAgICAgICAgICBbcm93IGlzUmFuZ2U6TUFYKDAsIHBhdHRlcm5TdGFydCAtIChpIC0gcGF0dGVyblN0YXJ0KSAvIDIpIGVuZDpwYXR0ZXJuU3RhcnQgdmFsdWU6Tk9dKSB7CisgICAgICAgICAgcmV0dXJuIEBbQChwYXR0ZXJuU3RhcnQpLCBAKGkpLCBAKGJlc3RNYXRjaCldOworICAgICAgICB9CisgICAgICAgIHBhdHRlcm5TdGFydCArPSBjb3VudGVyc1swXSArIGNvdW50ZXJzWzFdOworICAgICAgICBmb3IgKGludCB5ID0gMjsgeSA8IHBhdHRlcm5MZW5ndGg7IHkrKykgeworICAgICAgICAgIGNvdW50ZXJzW3kgLSAyXSA9IGNvdW50ZXJzW3ldOworICAgICAgICB9CisgICAgICAgIGNvdW50ZXJzW3BhdHRlcm5MZW5ndGggLSAyXSA9IDA7CisgICAgICAgIGNvdW50ZXJzW3BhdHRlcm5MZW5ndGggLSAxXSA9IDA7CisgICAgICAgIGNvdW50ZXJQb3NpdGlvbi0tOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY291bnRlclBvc2l0aW9uKys7CisgICAgICB9CisgICAgICBjb3VudGVyc1tjb3VudGVyUG9zaXRpb25dID0gMTsKKyAgICAgIGlzV2hpdGUgPSAhaXNXaGl0ZTsKKyAgICB9CisgIH0KKworICByZXR1cm4gbmlsOworfQorCistIChpbnQpZGVjb2RlQ29kZTooWlhCaXRBcnJheSAqKXJvdyBjb3VudGVyczooaW50W10pY291bnRlcnMgY291bnRlcnNDb3VudDooaW50KWNvdW50ZXJzQ291bnQgcm93T2Zmc2V0OihpbnQpcm93T2Zmc2V0IHsKKyAgaWYgKCFbWlhPbmVEUmVhZGVyIHJlY29yZFBhdHRlcm46cm93IHN0YXJ0OnJvd09mZnNldCBjb3VudGVyczpjb3VudGVycyBjb3VudGVyc1NpemU6Y291bnRlcnNDb3VudF0pIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgaW50IGJlc3RWYXJpYW5jZSA9IE1BWF9BVkdfVkFSSUFOQ0U7CisgIGludCBiZXN0TWF0Y2ggPSAtMTsKKworICBmb3IgKGludCBkID0gMDsgZCA8IENPREVfUEFUVEVSTlNfTEVOR1RIOyBkKyspIHsKKyAgICBpbnQgKnBhdHRlcm4gPSAoaW50ICopQ09ERV9QQVRURVJOU1tkXTsKKyAgICBpbnQgdmFyaWFuY2UgPSBbWlhPbmVEUmVhZGVyIHBhdHRlcm5NYXRjaFZhcmlhbmNlOmNvdW50ZXJzIGNvdW50ZXJzU2l6ZTpjb3VudGVyc0NvdW50IHBhdHRlcm46cGF0dGVybiBtYXhJbmRpdmlkdWFsVmFyaWFuY2U6TUFYX0lORElWSURVQUxfVkFSSUFOQ0VdOworICAgIGlmICh2YXJpYW5jZSA8IGJlc3RWYXJpYW5jZSkgeworICAgICAgYmVzdFZhcmlhbmNlID0gdmFyaWFuY2U7CisgICAgICBiZXN0TWF0Y2ggPSBkOworICAgIH0KKyAgfQorCisgIGlmIChiZXN0TWF0Y2ggPj0gMCkgeworICAgIHJldHVybiBiZXN0TWF0Y2g7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIC0xOworICB9Cit9CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlUm93OihpbnQpcm93TnVtYmVyIHJvdzooWlhCaXRBcnJheSAqKXJvdyBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgQk9PTCBjb252ZXJ0Rk5DMSA9IGhpbnRzICYmIGhpbnRzLmFzc3VtZUdTMTsKKworICBOU0FycmF5ICpzdGFydFBhdHRlcm5JbmZvID0gW3NlbGYgZmluZFN0YXJ0UGF0dGVybjpyb3ddOworICBpZiAoIXN0YXJ0UGF0dGVybkluZm8pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpbnQgc3RhcnRDb2RlID0gW3N0YXJ0UGF0dGVybkluZm9bMl0gaW50VmFsdWVdOworICBpbnQgY29kZVNldDsKKworICBzd2l0Y2ggKHN0YXJ0Q29kZSkgeworICBjYXNlIENPREVfU1RBUlRfQToKKyAgICBjb2RlU2V0ID0gQ09ERV9DT0RFX0E7CisgICAgYnJlYWs7CisgIGNhc2UgQ09ERV9TVEFSVF9COgorICAgIGNvZGVTZXQgPSBDT0RFX0NPREVfQjsKKyAgICBicmVhazsKKyAgY2FzZSBDT0RFX1NUQVJUX0M6CisgICAgY29kZVNldCA9IENPREVfQ09ERV9DOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICBCT09MIGRvbmUgPSBOTzsKKyAgQk9PTCBpc05leHRTaGlmdGVkID0gTk87CisKKyAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhDYXBhY2l0eToyMF07CisgIE5TTXV0YWJsZUFycmF5ICpyYXdDb2RlcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eToyMF07CisKKyAgaW50IGxhc3RTdGFydCA9IFtzdGFydFBhdHRlcm5JbmZvWzBdIGludFZhbHVlXTsKKyAgaW50IG5leHRTdGFydCA9IFtzdGFydFBhdHRlcm5JbmZvWzFdIGludFZhbHVlXTsKKworICBjb25zdCBpbnQgY291bnRlcnNMZW4gPSA2OworICBpbnQgY291bnRlcnNbY291bnRlcnNMZW5dOworICBtZW1zZXQoY291bnRlcnMsIDAsIGNvdW50ZXJzTGVuICogc2l6ZW9mKGludCkpOworCisgIGludCBsYXN0Q29kZSA9IDA7CisgIGludCBjb2RlID0gMDsKKyAgaW50IGNoZWNrc3VtVG90YWwgPSBzdGFydENvZGU7CisgIGludCBtdWx0aXBsaWVyID0gMDsKKyAgQk9PTCBsYXN0Q2hhcmFjdGVyV2FzUHJpbnRhYmxlID0gWUVTOworCisgIHdoaWxlICghZG9uZSkgeworICAgIEJPT0wgdW5zaGlmdCA9IGlzTmV4dFNoaWZ0ZWQ7CisgICAgaXNOZXh0U2hpZnRlZCA9IE5POworCisgICAgLy8gU2F2ZSBvZmYgbGFzdCBjb2RlCisgICAgbGFzdENvZGUgPSBjb2RlOworCisgICAgLy8gRGVjb2RlIGFub3RoZXIgY29kZSBmcm9tIGltYWdlCisgICAgY29kZSA9IFtzZWxmIGRlY29kZUNvZGU6cm93IGNvdW50ZXJzOmNvdW50ZXJzIGNvdW50ZXJzQ291bnQ6Y291bnRlcnNMZW4gcm93T2Zmc2V0Om5leHRTdGFydF07CisgICAgaWYgKGNvZGUgPT0gLTEpIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIFtyYXdDb2RlcyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhDaGFyOihpbnQ4X3QpY29kZV1dOworCisgICAgLy8gUmVtZW1iZXIgd2hldGhlciB0aGUgbGFzdCBjb2RlIHdhcyBwcmludGFibGUgb3Igbm90IChleGNsdWRpbmcgQ09ERV9TVE9QKQorICAgIGlmIChjb2RlICE9IENPREVfU1RPUCkgeworICAgICAgbGFzdENoYXJhY3Rlcldhc1ByaW50YWJsZSA9IFlFUzsKKyAgICB9CisKKyAgICAvLyBBZGQgdG8gY2hlY2tzdW0gY29tcHV0YXRpb24gKGlmIG5vdCBDT0RFX1NUT1Agb2YgY291cnNlKQorICAgIGlmIChjb2RlICE9IENPREVfU1RPUCkgeworICAgICAgbXVsdGlwbGllcisrOworICAgICAgY2hlY2tzdW1Ub3RhbCArPSBtdWx0aXBsaWVyICogY29kZTsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHdoZXJlIHRoZSBuZXh0IGNvZGUgd2lsbCB0byBzdGFydAorICAgIGxhc3RTdGFydCA9IG5leHRTdGFydDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ZXJzTGVuOyBpKyspIHsKKyAgICAgIG5leHRTdGFydCArPSBjb3VudGVyc1tpXTsKKyAgICB9CisKKyAgICAvLyBUYWtlIGNhcmUgb2YgaWxsZWdhbCBzdGFydCBjb2RlcworICAgIHN3aXRjaCAoY29kZSkgeworICAgIGNhc2UgQ09ERV9TVEFSVF9BOgorICAgIGNhc2UgQ09ERV9TVEFSVF9COgorICAgIGNhc2UgQ09ERV9TVEFSVF9DOgorICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBGb3JtYXRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIHN3aXRjaCAoY29kZVNldCkgeworICAgIGNhc2UgQ09ERV9DT0RFX0E6CisgICAgICBpZiAoY29kZSA8IDY0KSB7CisgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoJyAnICsgY29kZSldOworICAgICAgfSBlbHNlIGlmIChjb2RlIDwgOTYpIHsKKyAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKShjb2RlIC0gNjQpXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIERvbid0IGxldCBDT0RFX1NUT1AsIHdoaWNoIGFsd2F5cyBhcHBlYXJzLCBhZmZlY3Qgd2hldGhlciB3aGV0aGVyIHdlIHRoaW5rIHRoZSBsYXN0CisgICAgICAgIC8vIGNvZGUgd2FzIHByaW50YWJsZSBvciBub3QuCisgICAgICAgIGlmIChjb2RlICE9IENPREVfU1RPUCkgeworICAgICAgICAgIGxhc3RDaGFyYWN0ZXJXYXNQcmludGFibGUgPSBOTzsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICBjYXNlIENPREVfRk5DXzE6CisgICAgICAgICAgICBpZiAoY29udmVydEZOQzEpIHsKKyAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIEdTMSBzcGVjaWZpY2F0aW9uIDUuNC4zLjcuIGFuZCA1LjQuNi40LiBJZiB0aGUgZmlyc3QgY2hhciBhZnRlciB0aGUgc3RhcnQgY29kZQorICAgICAgICAgICAgICAgIC8vIGlzIEZOQzEgdGhlbiB0aGlzIGlzIEdTMS0xMjguIFdlIGFkZCB0aGUgc3ltYm9sb2d5IGlkZW50aWZpZXIuCisgICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCJdQzEiXTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBHUzEgc3BlY2lmaWNhdGlvbiA1LjQuNy41LiBFdmVyeSBzdWJzZXF1ZW50IEZOQzEgaXMgcmV0dXJuZWQgYXMgQVNDSUkgMjkgKEdTKQorICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJWMiLCAoY2hhcikgMjldOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDT0RFX0ZOQ18yOgorICAgICAgICBjYXNlIENPREVfRk5DXzM6CisgICAgICAgIGNhc2UgQ09ERV9GTkNfNF9BOgorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENPREVfU0hJRlQ6CisgICAgICAgICAgaXNOZXh0U2hpZnRlZCA9IFlFUzsKKyAgICAgICAgICBjb2RlU2V0ID0gQ09ERV9DT0RFX0I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09ERV9DT0RFX0I6CisgICAgICAgICAgY29kZVNldCA9IENPREVfQ09ERV9COworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENPREVfQ09ERV9DOgorICAgICAgICAgIGNvZGVTZXQgPSBDT0RFX0NPREVfQzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDT0RFX1NUT1A6CisgICAgICAgICAgZG9uZSA9IFlFUzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBDT0RFX0NPREVfQjoKKyAgICAgIGlmIChjb2RlIDwgOTYpIHsKKyAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSgnICcgKyBjb2RlKV07CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoY29kZSAhPSBDT0RFX1NUT1ApIHsKKyAgICAgICAgICBsYXN0Q2hhcmFjdGVyV2FzUHJpbnRhYmxlID0gTk87CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICAgICAgY2FzZSBDT0RFX0ZOQ18xOgorICAgICAgICAgICAgaWYgKGNvbnZlcnRGTkMxKSB7CisgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBHUzEgc3BlY2lmaWNhdGlvbiA1LjQuMy43LiBhbmQgNS40LjYuNC4gSWYgdGhlIGZpcnN0IGNoYXIgYWZ0ZXIgdGhlIHN0YXJ0IGNvZGUKKyAgICAgICAgICAgICAgICAvLyBpcyBGTkMxIHRoZW4gdGhpcyBpcyBHUzEtMTI4LiBXZSBhZGQgdGhlIHN5bWJvbG9neSBpZGVudGlmaWVyLgorICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAiXUMxIl07CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gR1MxIHNwZWNpZmljYXRpb24gNS40LjcuNS4gRXZlcnkgc3Vic2VxdWVudCBGTkMxIGlzIHJldHVybmVkIGFzIEFTQ0lJIDI5IChHUykKKyAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVjIiwgKGNoYXIpIDI5XTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09ERV9GTkNfMjoKKyAgICAgICAgY2FzZSBDT0RFX0ZOQ18zOgorICAgICAgICBjYXNlIENPREVfRk5DXzRfQjoKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDT0RFX1NISUZUOgorICAgICAgICAgIGlzTmV4dFNoaWZ0ZWQgPSBZRVM7CisgICAgICAgICAgY29kZVNldCA9IENPREVfQ09ERV9BOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENPREVfQ09ERV9BOgorICAgICAgICAgIGNvZGVTZXQgPSBDT0RFX0NPREVfQTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDT0RFX0NPREVfQzoKKyAgICAgICAgICBjb2RlU2V0ID0gQ09ERV9DT0RFX0M7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09ERV9TVE9QOgorICAgICAgICAgIGRvbmUgPSBZRVM7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ09ERV9DT0RFX0M6CisgICAgICBpZiAoY29kZSA8IDEwMCkgeworICAgICAgICBpZiAoY29kZSA8IDEwKSB7CisgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIwIl07CisgICAgICAgIH0KKyAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlZCIsIGNvZGVdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGNvZGUgIT0gQ09ERV9TVE9QKSB7CisgICAgICAgICAgbGFzdENoYXJhY3Rlcldhc1ByaW50YWJsZSA9IE5POworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgIGNhc2UgQ09ERV9GTkNfMToKKyAgICAgICAgICAgIGlmIChjb252ZXJ0Rk5DMSkgeworICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gR1MxIHNwZWNpZmljYXRpb24gNS40LjMuNy4gYW5kIDUuNC42LjQuIElmIHRoZSBmaXJzdCBjaGFyIGFmdGVyIHRoZSBzdGFydCBjb2RlCisgICAgICAgICAgICAgICAgLy8gaXMgRk5DMSB0aGVuIHRoaXMgaXMgR1MxLTEyOC4gV2UgYWRkIHRoZSBzeW1ib2xvZ3kgaWRlbnRpZmllci4KKyAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIl1DMSJdOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEdTMSBzcGVjaWZpY2F0aW9uIDUuNC43LjUuIEV2ZXJ5IHN1YnNlcXVlbnQgRk5DMSBpcyByZXR1cm5lZCBhcyBBU0NJSSAyOSAoR1MpCisgICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlYyIsIChjaGFyKSAyOV07CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENPREVfQ09ERV9BOgorICAgICAgICAgIGNvZGVTZXQgPSBDT0RFX0NPREVfQTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDT0RFX0NPREVfQjoKKyAgICAgICAgICBjb2RlU2V0ID0gQ09ERV9DT0RFX0I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09ERV9TVE9QOgorICAgICAgICAgIGRvbmUgPSBZRVM7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIFVuc2hpZnQgYmFjayB0byBhbm90aGVyIGNvZGUgc2V0IGlmIHdlIHdlcmUgc2hpZnRlZAorICAgIGlmICh1bnNoaWZ0KSB7CisgICAgICBjb2RlU2V0ID0gY29kZVNldCA9PSBDT0RFX0NPREVfQSA/IENPREVfQ09ERV9CIDogQ09ERV9DT0RFX0E7CisgICAgfQorICB9CisKKyAgLy8gQ2hlY2sgZm9yIGFtcGxlIHdoaXRlc3BhY2UgZm9sbG93aW5nIHBhdHRlcm4sIGJ1dCwgdG8gZG8gdGhpcyB3ZSBmaXJzdCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQKKyAgLy8gd2UgZnVkZ2VkIGRlY29kaW5nIENPREVfU1RPUCBzaW5jZSBpdCBhY3R1YWxseSBoYXMgNyBiYXJzLCBub3QgNi4gVGhlcmUgaXMgYSBibGFjayBiYXIgbGVmdAorICAvLyB0byByZWFkIG9mZi4gV291bGQgYmUgc2xpZ2h0bHkgYmV0dGVyIHRvIHByb3Blcmx5IHJlYWQuIEhlcmUgd2UganVzdCBza2lwIGl0OgorICBuZXh0U3RhcnQgPSBbcm93IG5leHRVbnNldDpuZXh0U3RhcnRdOworICBpZiAoIVtyb3cgaXNSYW5nZTpuZXh0U3RhcnQgZW5kOk1JTihyb3cuc2l6ZSwgbmV4dFN0YXJ0ICsgKG5leHRTdGFydCAtIGxhc3RTdGFydCkgLyAyKSB2YWx1ZTpOT10pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICAvLyBQdWxsIG91dCBmcm9tIHN1bSB0aGUgdmFsdWUgb2YgdGhlIHBlbnVsdGltYXRlIGNoZWNrIGNvZGUKKyAgY2hlY2tzdW1Ub3RhbCAtPSBtdWx0aXBsaWVyICogbGFzdENvZGU7CisgIC8vIGxhc3RDb2RlIGlzIHRoZSBjaGVja3N1bSB0aGVuOgorICBpZiAoY2hlY2tzdW1Ub3RhbCAlIDEwMyAhPSBsYXN0Q29kZSkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gQ2hlY2tzdW1FcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIC8vIE5lZWQgdG8gcHVsbCBvdXQgdGhlIGNoZWNrIGRpZ2l0cyBmcm9tIHN0cmluZworICBOU1VJbnRlZ2VyIHJlc3VsdExlbmd0aCA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgaWYgKHJlc3VsdExlbmd0aCA9PSAwKSB7CisgICAgLy8gZmFsc2UgcG9zaXRpdmUKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICAvLyBPbmx5IGJvdGhlciBpZiB0aGUgcmVzdWx0IGhhZCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBhbmQgaWYgdGhlIGNoZWNrc3VtIGRpZ2l0IGhhcHBlbmVkIHRvCisgIC8vIGJlIGEgcHJpbnRhYmxlIGNoYXJhY3Rlci4gSWYgaXQgd2FzIGp1c3QgaW50ZXJwcmV0ZWQgYXMgYSBjb250cm9sIGNvZGUsIG5vdGhpbmcgdG8gcmVtb3ZlLgorICBpZiAocmVzdWx0TGVuZ3RoID4gMCAmJiBsYXN0Q2hhcmFjdGVyV2FzUHJpbnRhYmxlKSB7CisgICAgaWYgKGNvZGVTZXQgPT0gQ09ERV9DT0RFX0MpIHsKKyAgICAgIFtyZXN1bHQgZGVsZXRlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UocmVzdWx0TGVuZ3RoIC0gMiwgMildOworICAgIH0gZWxzZSB7CisgICAgICBbcmVzdWx0IGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKHJlc3VsdExlbmd0aCAtIDEsIDEpXTsKKyAgICB9CisgIH0KKworICBmbG9hdCBsZWZ0ID0gKGZsb2F0KShbc3RhcnRQYXR0ZXJuSW5mb1sxXSBpbnRWYWx1ZV0gKyBbc3RhcnRQYXR0ZXJuSW5mb1swXSBpbnRWYWx1ZV0pIC8gMi4wZjsKKyAgZmxvYXQgcmlnaHQgPSAoZmxvYXQpKG5leHRTdGFydCArIGxhc3RTdGFydCkgLyAyLjBmOworCisgIE5TVUludGVnZXIgcmF3Q29kZXNTaXplID0gW3Jhd0NvZGVzIGNvdW50XTsKKyAgaW50OF90IHJhd0J5dGVzW3Jhd0NvZGVzU2l6ZV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgcmF3Q29kZXNTaXplOyBpKyspIHsKKyAgICByYXdCeXRlc1tpXSA9IFtyYXdDb2Rlc1tpXSBjaGFyVmFsdWVdOworICB9CisKKyAgcmV0dXJuIFtaWFJlc3VsdCByZXN1bHRXaXRoVGV4dDpyZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICByYXdCeXRlczpyYXdCeXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOihpbnQpcmF3Q29kZXNTaXplCisgICAgICAgICAgICAgICAgICAgICByZXN1bHRQb2ludHM6QFtbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDpsZWZ0IHk6KGZsb2F0KXJvd051bWJlcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOnJpZ2h0IHk6KGZsb2F0KXJvd051bWJlcl1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRDb2RlMTI4XTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhDb2RlMTI4V3JpdGVyLmggYi9aWGluZ09iakMvb25lZC9aWENvZGUxMjhXcml0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWZlMDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RlMTI4V3JpdGVyLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIuaCIKKworLyoqCisgKiBUaGlzIG9iamVjdCByZW5kZXJzIGEgQ09ERTEyOCBjb2RlIGFzIGEgWlhCaXRNYXRyaXguCisgKi8KKworQGludGVyZmFjZSBaWENvZGUxMjhXcml0ZXIgOiBaWE9uZURpbWVuc2lvbmFsQ29kZVdyaXRlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWENvZGUxMjhXcml0ZXIubSBiL1pYaW5nT2JqQy9vbmVkL1pYQ29kZTEyOFdyaXRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMDI1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWENvZGUxMjhXcml0ZXIubQpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhDb2RlMTI4UmVhZGVyLmgiCisjaW1wb3J0ICJaWENvZGUxMjhXcml0ZXIuaCIKKworLy8gRHVtbXkgY2hhcmFjdGVycyB1c2VkIHRvIHNwZWNpZnkgY29udHJvbCBjaGFyYWN0ZXJzIGluIGlucHV0Citjb25zdCB1bmljaGFyIEVTQ0FQRV9GTkNfMSA9IEwnXHUwMGYxJzsKK2NvbnN0IHVuaWNoYXIgRVNDQVBFX0ZOQ18yID0gTCdcdTAwZjInOworY29uc3QgdW5pY2hhciBFU0NBUEVfRk5DXzMgPSBMJ1x1MDBmMyc7Citjb25zdCB1bmljaGFyIEVTQ0FQRV9GTkNfNCA9IEwnXHUwMGY0JzsKKworQGltcGxlbWVudGF0aW9uIFpYQ29kZTEyOFdyaXRlcgorCistIChaWEJpdE1hdHJpeCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgaGludHM6KFpYRW5jb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGlmIChmb3JtYXQgIT0ga0JhcmNvZGVGb3JtYXRDb2RlMTI4KSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkNhbiBvbmx5IGVuY29kZSBDT0RFXzEyOCJdOworICB9CisgIHJldHVybiBbc3VwZXIgZW5jb2RlOmNvbnRlbnRzIGZvcm1hdDpmb3JtYXQgd2lkdGg6d2lkdGggaGVpZ2h0OmhlaWdodCBoaW50czpoaW50cyBlcnJvcjplcnJvcl07Cit9CisKKy0gKEJPT0wgKillbmNvZGU6KE5TU3RyaW5nICopY29udGVudHMgbGVuZ3RoOihpbnQgKilwTGVuZ3RoIHsKKyAgaW50IGxlbmd0aCA9IChpbnQpW2NvbnRlbnRzIGxlbmd0aF07CisgIC8vIENoZWNrIGxlbmd0aAorICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiA4MCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJDb250ZW50cyBsZW5ndGggc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgODAgY2hhcmFjdGVycywgYnV0IGdvdCAlZCIsIGxlbmd0aF07CisgIH0KKyAgLy8gQ2hlY2sgY29udGVudAorICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgdW5pY2hhciBjID0gW2NvbnRlbnRzIGNoYXJhY3RlckF0SW5kZXg6aV07CisgICAgaWYgKGMgPCAnICcgfHwgYyA+ICd+JykgeworICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgRVNDQVBFX0ZOQ18xOgorICAgICAgICBjYXNlIEVTQ0FQRV9GTkNfMjoKKyAgICAgICAgY2FzZSBFU0NBUEVfRk5DXzM6CisgICAgICAgIGNhc2UgRVNDQVBFX0ZOQ180OgorICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJCYWQgY2hhcmFjdGVyIGluIGlucHV0OiAlQyIsIGNdOworICAgICAgfQorICAgIH0KKyAgfQorCisgIE5TTXV0YWJsZUFycmF5ICpwYXR0ZXJucyA9IFtOU011dGFibGVBcnJheSBhcnJheV07IC8vIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBwYXR0ZXJucworICBpbnQgY2hlY2tTdW0gPSAwOworICBpbnQgY2hlY2tXZWlnaHQgPSAxOworICBpbnQgY29kZVNldCA9IDA7IC8vIHNlbGVjdGVkIGNvZGUgKENPREVfQ09ERV9CIG9yIENPREVfQ09ERV9DKQorICBpbnQgcG9zaXRpb24gPSAwOyAvLyBwb3NpdGlvbiBpbiBjb250ZW50cworCisgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgeworICAgIC8vU2VsZWN0IGNvZGUgdG8gdXNlCisgICAgaW50IHJlcXVpcmVkRGlnaXRDb3VudCA9IGNvZGVTZXQgPT0gQ09ERV9DT0RFX0MgPyAyIDogNDsKKyAgICBpbnQgbmV3Q29kZVNldDsKKyAgICBpZiAoW3NlbGYgaXNEaWdpdHM6Y29udGVudHMgc3RhcnQ6cG9zaXRpb24gbGVuZ3RoOnJlcXVpcmVkRGlnaXRDb3VudF0pIHsKKyAgICAgIG5ld0NvZGVTZXQgPSBDT0RFX0NPREVfQzsKKyAgICB9IGVsc2UgeworICAgICAgbmV3Q29kZVNldCA9IENPREVfQ09ERV9COworICAgIH0KKworICAgIC8vR2V0IHRoZSBwYXR0ZXJuIGluZGV4CisgICAgaW50IHBhdHRlcm5JbmRleDsKKyAgICBpZiAobmV3Q29kZVNldCA9PSBjb2RlU2V0KSB7CisgICAgICAvLyBFbmNvZGUgdGhlIGN1cnJlbnQgY2hhcmFjdGVyCisgICAgICBpZiAoY29kZVNldCA9PSBDT0RFX0NPREVfQikgeworICAgICAgICBwYXR0ZXJuSW5kZXggPSBbY29udGVudHMgY2hhcmFjdGVyQXRJbmRleDpwb3NpdGlvbl0gLSAnICc7CisgICAgICAgIHBvc2l0aW9uICs9IDE7CisgICAgICB9IGVsc2UgeyAvLyBDT0RFX0NPREVfQworICAgICAgICBzd2l0Y2ggKFtjb250ZW50cyBjaGFyYWN0ZXJBdEluZGV4OnBvc2l0aW9uXSkgeworICAgICAgICAgIGNhc2UgRVNDQVBFX0ZOQ18xOgorICAgICAgICAgICAgcGF0dGVybkluZGV4ID0gQ09ERV9GTkNfMTsKKyAgICAgICAgICAgIHBvc2l0aW9uKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVTQ0FQRV9GTkNfMjoKKyAgICAgICAgICAgIHBhdHRlcm5JbmRleCA9IENPREVfRk5DXzI7CisgICAgICAgICAgICBwb3NpdGlvbisrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFU0NBUEVfRk5DXzM6CisgICAgICAgICAgICBwYXR0ZXJuSW5kZXggPSBDT0RFX0ZOQ18zOworICAgICAgICAgICAgcG9zaXRpb24rKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRVNDQVBFX0ZOQ180OgorICAgICAgICAgICAgcGF0dGVybkluZGV4ID0gQ09ERV9GTkNfNF9COyAvLyBGSVhNRSBpZiB0aGlzIGV2ZXIgb3V0cHV0cyBDb2RlIEEKKyAgICAgICAgICAgIHBvc2l0aW9uKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcGF0dGVybkluZGV4ID0gW1tjb250ZW50cyBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UocG9zaXRpb24sIDIpXSBpbnRWYWx1ZV07CisgICAgICAgICAgICBwb3NpdGlvbiArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8gU2hvdWxkIHdlIGNoYW5nZSB0aGUgY3VycmVudCBjb2RlPworICAgICAgLy8gRG8gd2UgaGF2ZSBhIGNvZGUgc2V0PworICAgICAgaWYgKGNvZGVTZXQgPT0gMCkgeworICAgICAgICAvLyBObywgd2UgZG9uJ3QgaGF2ZSBhIGNvZGUgc2V0CisgICAgICAgIGlmIChuZXdDb2RlU2V0ID09IENPREVfQ09ERV9CKSB7CisgICAgICAgICAgcGF0dGVybkluZGV4ID0gQ09ERV9TVEFSVF9COworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIENPREVfQ09ERV9DCisgICAgICAgICAgcGF0dGVybkluZGV4ID0gQ09ERV9TVEFSVF9DOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBZZXMsIHdlIGhhdmUgYSBjb2RlIHNldAorICAgICAgICBwYXR0ZXJuSW5kZXggPSBuZXdDb2RlU2V0OworICAgICAgfQorICAgICAgY29kZVNldCA9IG5ld0NvZGVTZXQ7CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBwYXR0ZXJuCisgICAgTlNNdXRhYmxlQXJyYXkgKnBhdHRlcm4gPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKENPREVfUEFUVEVSTlNbcGF0dGVybkluZGV4XSkgLyBzaXplb2YoaW50KTsgaSsrKSB7CisgICAgICBbcGF0dGVybiBhZGRPYmplY3Q6QChDT0RFX1BBVFRFUk5TW3BhdHRlcm5JbmRleF1baV0pXTsKKyAgICB9CisgICAgW3BhdHRlcm5zIGFkZE9iamVjdDpwYXR0ZXJuXTsKKworICAgIC8vIENvbXB1dGUgY2hlY2tzdW0KKyAgICBjaGVja1N1bSArPSBwYXR0ZXJuSW5kZXggKiBjaGVja1dlaWdodDsKKyAgICBpZiAocG9zaXRpb24gIT0gMCkgeworICAgICAgY2hlY2tXZWlnaHQrKzsKKyAgICB9CisgIH0KKworICAvLyBDb21wdXRlIGFuZCBhcHBlbmQgY2hlY2tzdW0KKyAgY2hlY2tTdW0gJT0gMTAzOworICBOU011dGFibGVBcnJheSAqcGF0dGVybiA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKENPREVfUEFUVEVSTlNbY2hlY2tTdW1dKSAvIHNpemVvZihpbnQpOyBpKyspIHsKKyAgICBbcGF0dGVybiBhZGRPYmplY3Q6QChDT0RFX1BBVFRFUk5TW2NoZWNrU3VtXVtpXSldOworICB9CisgIFtwYXR0ZXJucyBhZGRPYmplY3Q6cGF0dGVybl07CisKKyAgLy8gQXBwZW5kIHN0b3AgY29kZQorICBwYXR0ZXJuID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YoQ09ERV9QQVRURVJOU1tDT0RFX1NUT1BdKSAvIHNpemVvZihpbnQpOyBpKyspIHsKKyAgICBbcGF0dGVybiBhZGRPYmplY3Q6QChDT0RFX1BBVFRFUk5TW0NPREVfU1RPUF1baV0pXTsKKyAgfQorICBbcGF0dGVybnMgYWRkT2JqZWN0OnBhdHRlcm5dOworCisgIC8vIENvbXB1dGUgY29kZSB3aWR0aAorICBpbnQgY29kZVdpZHRoID0gMDsKKyAgZm9yIChwYXR0ZXJuIGluIHBhdHRlcm5zKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXR0ZXJuLmNvdW50OyBpKyspIHsKKyAgICAgIGNvZGVXaWR0aCArPSBbcGF0dGVybltpXSBpbnRWYWx1ZV07CisgICAgfQorICB9CisKKyAgLy8gQ29tcHV0ZSByZXN1bHQKKyAgaWYgKHBMZW5ndGgpICpwTGVuZ3RoID0gY29kZVdpZHRoOworICBCT09MICpyZXN1bHQgPSAoQk9PTCAqKW1hbGxvYyhjb2RlV2lkdGggKiBzaXplb2YoQk9PTCkpOworICBpbnQgcG9zID0gMDsKKyAgZm9yIChOU0FycmF5ICpwYXR0ZXJuQXJyYXkgaW4gcGF0dGVybnMpIHsKKyAgICBpbnQgcGF0dGVybkxlbiA9IChpbnQpW3BhdHRlcm5BcnJheSBjb3VudF07CisgICAgaW50IHBhdHRlcm5bcGF0dGVybkxlbl07CisgICAgZm9yKGludCBpID0gMDsgaSA8IHBhdHRlcm5MZW47IGkrKykgeworICAgICAgcGF0dGVybltpXSA9IFtwYXR0ZXJuQXJyYXlbaV0gaW50VmFsdWVdOworICAgIH0KKworICAgIHBvcyArPSBbc3VwZXIgYXBwZW5kUGF0dGVybjpyZXN1bHQgcG9zOnBvcyBwYXR0ZXJuOnBhdHRlcm4gcGF0dGVybkxlbjpwYXR0ZXJuTGVuIHN0YXJ0Q29sb3I6VFJVRV07CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCistIChCT09MKWlzRGlnaXRzOihOU1N0cmluZyAqKXZhbHVlIHN0YXJ0OihpbnQpc3RhcnQgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIHsKKyAgaW50IGVuZCA9IHN0YXJ0ICsgbGVuZ3RoOworICBpbnQgbGFzdCA9IChpbnQpW3ZhbHVlIGxlbmd0aF07CisgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZCAmJiBpIDwgbGFzdDsgaSsrKSB7CisgICAgdW5pY2hhciBjID0gW3ZhbHVlIGNoYXJhY3RlckF0SW5kZXg6aV07CisgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykgeworICAgICAgaWYgKGMgIT0gRVNDQVBFX0ZOQ18xKSB7CisgICAgICAgIHJldHVybiBOTzsKKyAgICAgIH0KKyAgICAgIGVuZCsrOyAvLyBpZ25vcmUgRk5DXzEKKyAgICB9CisgIH0KKyAgcmV0dXJuIGVuZCA8PSBsYXN0OyAvLyBlbmQgPiBsYXN0IGlmIHdlJ3ZlIHJ1biBvdXQgb2Ygc3RyaW5nCit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYQ29kZTM5UmVhZGVyLmggYi9aWGluZ09iakMvb25lZC9aWENvZGUzOVJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNWNmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWENvZGUzOVJlYWRlci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYT25lRFJlYWRlci5oIgorCisvKioKKyAqIERlY29kZXMgQ29kZSAzOSBiYXJjb2Rlcy4gVGhpcyBkb2VzIG5vdCBzdXBwb3J0ICJGdWxsIEFTQ0lJIENvZGUgMzkiIHlldC4KKyAqLworCitleHRlcm4gY2hhciBDT0RFMzlfQUxQSEFCRVRbXTsKK2V4dGVybiBOU1N0cmluZyAqQ09ERTM5X0FMUEhBQkVUX1NUUklORzsKK2V4dGVybiBpbnQgQ09ERTM5X0NIQVJBQ1RFUl9FTkNPRElOR1NbXTsKKworQGNsYXNzIFpYRGVjb2RlSGludHMsIFpYUmVzdWx0OworCitAaW50ZXJmYWNlIFpYQ29kZTM5UmVhZGVyIDogWlhPbmVEUmVhZGVyCisKKy0gKGlkKWluaXRVc2luZ0NoZWNrRGlnaXQ6KEJPT0wpdXNpbmdDaGVja0RpZ2l0OworLSAoaWQpaW5pdFVzaW5nQ2hlY2tEaWdpdDooQk9PTCl1c2luZ0NoZWNrRGlnaXQgZXh0ZW5kZWRNb2RlOihCT09MKWV4dGVuZGVkTW9kZTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhDb2RlMzlSZWFkZXIubSBiL1pYaW5nT2JqQy9vbmVkL1pYQ29kZTM5UmVhZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmMzQzZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYQ29kZTM5UmVhZGVyLm0KQEAgLTAsMCArMSwzMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0QXJyYXkuaCIKKyNpbXBvcnQgIlpYQ29kZTM5UmVhZGVyLmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKworY2hhciBDT0RFMzlfQUxQSEFCRVRbXSA9ICIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotLiAqJC8rJSI7CitOU1N0cmluZyAqQ09ERTM5X0FMUEhBQkVUX1NUUklORyA9IEAiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLS4gKiQvKyUiOworCisvKioKKyAqIFRoZXNlIHJlcHJlc2VudCB0aGUgZW5jb2RpbmdzIG9mIGNoYXJhY3RlcnMsIGFzIHBhdHRlcm5zIG9mIHdpZGUgYW5kIG5hcnJvdyBiYXJzLgorICogVGhlIDkgbGVhc3Qtc2lnbmlmaWNhbnQgYml0cyBvZiBlYWNoIGludCBjb3JyZXNwb25kIHRvIHRoZSBwYXR0ZXJuIG9mIHdpZGUgYW5kIG5hcnJvdywKKyAqIHdpdGggMXMgcmVwcmVzZW50aW5nICJ3aWRlIiBhbmQgMHMgcmVwcmVzZW50aW5nIG5hcnJvdy4KKyAqLworaW50IENPREUzOV9DSEFSQUNURVJfRU5DT0RJTkdTWzQ0XSA9IHsKKyAgMHgwMzQsIDB4MTIxLCAweDA2MSwgMHgxNjAsIDB4MDMxLCAweDEzMCwgMHgwNzAsIDB4MDI1LCAweDEyNCwgMHgwNjQsIC8vIDAtOQorICAweDEwOSwgMHgwNDksIDB4MTQ4LCAweDAxOSwgMHgxMTgsIDB4MDU4LCAweDAwRCwgMHgxMEMsIDB4MDRDLCAweDAxQywgLy8gQS1KCisgIDB4MTAzLCAweDA0MywgMHgxNDIsIDB4MDEzLCAweDExMiwgMHgwNTIsIDB4MDA3LCAweDEwNiwgMHgwNDYsIDB4MDE2LCAvLyBLLVQKKyAgMHgxODEsIDB4MEMxLCAweDFDMCwgMHgwOTEsIDB4MTkwLCAweDBEMCwgMHgwODUsIDB4MTg0LCAweDBDNCwgMHgwOTQsIC8vIFUtKgorICAweDBBOCwgMHgwQTIsIDB4MDhBLCAweDAyQSAvLyAkLSUKK307CisKK2ludCBjb25zdCBDT0RFMzlfQVNURVJJU0tfRU5DT0RJTkcgPSAweDA5NDsKKworQGludGVyZmFjZSBaWENvZGUzOVJlYWRlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBCT09MIGV4dGVuZGVkTW9kZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIEJPT0wgdXNpbmdDaGVja0RpZ2l0OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWENvZGUzOVJlYWRlcgorCisvKioKKyAqIENyZWF0ZXMgYSByZWFkZXIgdGhhdCBhc3N1bWVzIGFsbCBlbmNvZGVkIGRhdGEgaXMgZGF0YSwgYW5kIGRvZXMgbm90IHRyZWF0IHRoZSBmaW5hbAorICogY2hhcmFjdGVyIGFzIGEgY2hlY2sgZGlnaXQuIEl0IHdpbGwgbm90IGRlY29kZWQgImV4dGVuZGVkIENvZGUgMzkiIHNlcXVlbmNlcy4KKyAqLworLSAoaWQpaW5pdCB7CisgIHJldHVybiBbc2VsZiBpbml0VXNpbmdDaGVja0RpZ2l0Ok5PIGV4dGVuZGVkTW9kZTpOT107Cit9CisKKworLyoqCisgKiBDcmVhdGVzIGEgcmVhZGVyIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gY2hlY2sgdGhlIGxhc3QgY2hhcmFjdGVyIGFzIGEgY2hlY2sgZGlnaXQuCisgKiBJdCB3aWxsIG5vdCBkZWNvZGVkICJleHRlbmRlZCBDb2RlIDM5IiBzZXF1ZW5jZXMuCisgKi8KKy0gKGlkKWluaXRVc2luZ0NoZWNrRGlnaXQ6KEJPT0wpaXNVc2luZ0NoZWNrRGlnaXQgeyAgCisgIHJldHVybiBbc2VsZiBpbml0VXNpbmdDaGVja0RpZ2l0OmlzVXNpbmdDaGVja0RpZ2l0IGV4dGVuZGVkTW9kZTpOT107Cit9CisKKworLyoqCisgKiBDcmVhdGVzIGEgcmVhZGVyIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gY2hlY2sgdGhlIGxhc3QgY2hhcmFjdGVyIGFzIGEgY2hlY2sgZGlnaXQsCisgKiBvciBvcHRpb25hbGx5IGF0dGVtcHQgdG8gZGVjb2RlICJleHRlbmRlZCBDb2RlIDM5IiBzZXF1ZW5jZXMgdGhhdCBhcmUgdXNlZCB0byBlbmNvZGUKKyAqIHRoZSBmdWxsIEFTQ0lJIGNoYXJhY3RlciBzZXQuCisgKi8KKy0gKGlkKWluaXRVc2luZ0NoZWNrRGlnaXQ6KEJPT0wpdXNpbmdDaGVja0RpZ2l0IGV4dGVuZGVkTW9kZTooQk9PTClleHRlbmRlZE1vZGUgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF91c2luZ0NoZWNrRGlnaXQgPSB1c2luZ0NoZWNrRGlnaXQ7CisgICAgX2V4dGVuZGVkTW9kZSA9IGV4dGVuZGVkTW9kZTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChaWFJlc3VsdCAqKWRlY29kZVJvdzooaW50KXJvd051bWJlciByb3c6KFpYQml0QXJyYXkgKilyb3cgaGludHM6KFpYRGVjb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGNvbnN0IGludCBjb3VudGVyc0xlbiA9IDk7CisgIGludCBjb3VudGVyc1tjb3VudGVyc0xlbl07CisgIG1lbXNldChjb3VudGVycywgMCwgY291bnRlcnNMZW4gKiBzaXplb2YoaW50KSk7CisKKyAgaW50IHN0YXJ0WzJdID0gezB9OworICBpZiAoIVtzZWxmIGZpbmRBc3Rlcmlza1BhdHRlcm46cm93IGE6JnN0YXJ0WzBdIGI6JnN0YXJ0WzFdIGNvdW50ZXJzOmNvdW50ZXJzIGNvdW50ZXJzTGVuOmNvdW50ZXJzTGVuXSkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICAvLyBSZWFkIG9mZiB3aGl0ZSBzcGFjZQorICBpbnQgbmV4dFN0YXJ0ID0gW3JvdyBuZXh0U2V0OnN0YXJ0WzFdXTsKKyAgaW50IGVuZCA9IFtyb3cgc2l6ZV07CisKKyAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhDYXBhY2l0eToyMF07CisgIHVuaWNoYXIgZGVjb2RlZENoYXI7CisgIGludCBsYXN0U3RhcnQ7CisgIGRvIHsKKyAgICBpZiAoIVtaWE9uZURSZWFkZXIgcmVjb3JkUGF0dGVybjpyb3cgc3RhcnQ6bmV4dFN0YXJ0IGNvdW50ZXJzOmNvdW50ZXJzIGNvdW50ZXJzU2l6ZTpjb3VudGVyc0xlbl0pIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBpbnQgcGF0dGVybiA9IFtzZWxmIHRvTmFycm93V2lkZVBhdHRlcm46KGludCAqKWNvdW50ZXJzIGNvdW50ZXJzTGVuOmNvdW50ZXJzTGVuXTsKKyAgICBpZiAocGF0dGVybiA8IDApIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBkZWNvZGVkQ2hhciA9IFtzZWxmIHBhdHRlcm5Ub0NoYXI6cGF0dGVybl07CisgICAgaWYgKGRlY29kZWRDaGFyID09IDApIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgZGVjb2RlZENoYXJdOworICAgIGxhc3RTdGFydCA9IG5leHRTdGFydDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZihjb3VudGVycykgLyBzaXplb2YoaW50KTsgaSsrKSB7CisgICAgICBuZXh0U3RhcnQgKz0gY291bnRlcnNbaV07CisgICAgfQorICAgIC8vIFJlYWQgb2ZmIHdoaXRlIHNwYWNlCisgICAgbmV4dFN0YXJ0ID0gW3JvdyBuZXh0U2V0Om5leHRTdGFydF07CisgIH0gd2hpbGUgKGRlY29kZWRDaGFyICE9ICcqJyk7CisgIFtyZXN1bHQgZGVsZXRlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UoW3Jlc3VsdCBsZW5ndGhdIC0gMSwgMSldOworCisgIGludCBsYXN0UGF0dGVyblNpemUgPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZihjb3VudGVycykgLyBzaXplb2YoaW50KTsgaSsrKSB7CisgICAgbGFzdFBhdHRlcm5TaXplICs9IGNvdW50ZXJzW2ldOworICB9CisgIGludCB3aGl0ZVNwYWNlQWZ0ZXJFbmQgPSBuZXh0U3RhcnQgLSBsYXN0U3RhcnQgLSBsYXN0UGF0dGVyblNpemU7CisgIGlmIChuZXh0U3RhcnQgIT0gZW5kICYmICh3aGl0ZVNwYWNlQWZ0ZXJFbmQgPj4gMSkgPCBsYXN0UGF0dGVyblNpemUpIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpZiAoc2VsZi51c2luZ0NoZWNrRGlnaXQpIHsKKyAgICBpbnQgbWF4ID0gKGludClbcmVzdWx0IGxlbmd0aF0gLSAxOworICAgIGludCB0b3RhbCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXg7IGkrKykgeworICAgICAgdG90YWwgKz0gW0NPREUzOV9BTFBIQUJFVF9TVFJJTkcgcmFuZ2VPZlN0cmluZzpbcmVzdWx0IHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZShpLCAxKV1dLmxvY2F0aW9uOworICAgIH0KKyAgICBpZiAoW3Jlc3VsdCBjaGFyYWN0ZXJBdEluZGV4Om1heF0gIT0gQ09ERTM5X0FMUEhBQkVUW3RvdGFsICUgNDNdKSB7CisgICAgICBpZiAoZXJyb3IpICplcnJvciA9IENoZWNrc3VtRXJyb3JJbnN0YW5jZSgpOworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgW3Jlc3VsdCBkZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShtYXgsIDEpXTsKKyAgfQorCisgIGlmIChbcmVzdWx0IGxlbmd0aF0gPT0gMCkgeworICAgIC8vIGZhbHNlIHBvc2l0aXZlCisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNTdHJpbmcgKnJlc3VsdFN0cmluZzsKKyAgaWYgKHNlbGYuZXh0ZW5kZWRNb2RlKSB7CisgICAgcmVzdWx0U3RyaW5nID0gW3NlbGYgZGVjb2RlRXh0ZW5kZWQ6cmVzdWx0XTsKKyAgICBpZiAoIXJlc3VsdFN0cmluZykgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBGb3JtYXRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICByZXN1bHRTdHJpbmcgPSByZXN1bHQ7CisgIH0KKworICBmbG9hdCBsZWZ0ID0gKGZsb2F0KSAoc3RhcnRbMV0gKyBzdGFydFswXSkgLyAyLjBmOworICBmbG9hdCByaWdodCA9IChmbG9hdCkobmV4dFN0YXJ0ICsgbGFzdFN0YXJ0KSAvIDIuMGY7CisKKyAgcmV0dXJuIFtaWFJlc3VsdCByZXN1bHRXaXRoVGV4dDpyZXN1bHRTdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICByYXdCeXRlczpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDowCisgICAgICAgICAgICAgICAgICAgICByZXN1bHRQb2ludHM6QFtbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDpsZWZ0IHk6KGZsb2F0KXJvd051bWJlcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOnJpZ2h0IHk6KGZsb2F0KXJvd051bWJlcl1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRDb2RlMzldOworfQorCistIChCT09MKWZpbmRBc3Rlcmlza1BhdHRlcm46KFpYQml0QXJyYXkgKilyb3cgYTooaW50ICopYSBiOihpbnQgKiliIGNvdW50ZXJzOihpbnQgKiljb3VudGVycyBjb3VudGVyc0xlbjooaW50KWNvdW50ZXJzTGVuIHsKKyAgaW50IHdpZHRoID0gcm93LnNpemU7CisgIGludCByb3dPZmZzZXQgPSBbcm93IG5leHRTZXQ6MF07CisKKyAgaW50IGNvdW50ZXJQb3NpdGlvbiA9IDA7CisgIGludCBwYXR0ZXJuU3RhcnQgPSByb3dPZmZzZXQ7CisgIEJPT0wgaXNXaGl0ZSA9IE5POworCisgIGZvciAoaW50IGkgPSByb3dPZmZzZXQ7IGkgPCB3aWR0aDsgaSsrKSB7CisgICAgaWYgKFtyb3cgZ2V0OmldIF4gaXNXaGl0ZSkgeworICAgICAgY291bnRlcnNbY291bnRlclBvc2l0aW9uXSsrOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoY291bnRlclBvc2l0aW9uID09IGNvdW50ZXJzTGVuIC0gMSkgeworICAgICAgICBpZiAoW3NlbGYgdG9OYXJyb3dXaWRlUGF0dGVybjpjb3VudGVycyBjb3VudGVyc0xlbjpjb3VudGVyc0xlbl0gPT0gQ09ERTM5X0FTVEVSSVNLX0VOQ09ESU5HICYmCisgICAgICAgICAgICBbcm93IGlzUmFuZ2U6TUFYKDAsIHBhdHRlcm5TdGFydCAtICgoaSAtIHBhdHRlcm5TdGFydCkgPj4gMSkpIGVuZDpwYXR0ZXJuU3RhcnQgdmFsdWU6Tk9dKSB7CisgICAgICAgICAgaWYgKGEpICphID0gcGF0dGVyblN0YXJ0OworICAgICAgICAgIGlmIChiKSAqYiA9IGk7CisgICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAgICAgfQorICAgICAgICBwYXR0ZXJuU3RhcnQgKz0gY291bnRlcnNbMF0gKyBjb3VudGVyc1sxXTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDI7IHkgPCBjb3VudGVyc0xlbjsgeSsrKSB7CisgICAgICAgICAgY291bnRlcnNbeSAtIDJdID0gY291bnRlcnNbeV07CisgICAgICAgIH0KKyAgICAgICAgY291bnRlcnNbY291bnRlcnNMZW4gLSAyXSA9IDA7CisgICAgICAgIGNvdW50ZXJzW2NvdW50ZXJzTGVuIC0gMV0gPSAwOworICAgICAgICBjb3VudGVyUG9zaXRpb24tLTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNvdW50ZXJQb3NpdGlvbisrOworICAgICAgfQorICAgICAgY291bnRlcnNbY291bnRlclBvc2l0aW9uXSA9IDE7CisgICAgICBpc1doaXRlID0gIWlzV2hpdGU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5POworfQorCistIChpbnQpdG9OYXJyb3dXaWRlUGF0dGVybjooaW50ICopY291bnRlcnMgY291bnRlcnNMZW46KHVuc2lnbmVkIGludCljb3VudGVyc0xlbiB7CisgIGludCBudW1Db3VudGVycyA9IGNvdW50ZXJzTGVuOworICBpbnQgbWF4TmFycm93Q291bnRlciA9IDA7CisgIGludCB3aWRlQ291bnRlcnM7CisgIGRvIHsKKyAgICBpbnQgbWluQ291bnRlciA9IElOVF9NQVg7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db3VudGVyczsgaSsrKSB7CisgICAgICBpbnQgY291bnRlciA9IGNvdW50ZXJzW2ldOworICAgICAgaWYgKGNvdW50ZXIgPCBtaW5Db3VudGVyICYmIGNvdW50ZXIgPiBtYXhOYXJyb3dDb3VudGVyKSB7CisgICAgICAgIG1pbkNvdW50ZXIgPSBjb3VudGVyOworICAgICAgfQorICAgIH0KKyAgICBtYXhOYXJyb3dDb3VudGVyID0gbWluQ291bnRlcjsKKyAgICB3aWRlQ291bnRlcnMgPSAwOworICAgIGludCB0b3RhbFdpZGVDb3VudGVyc1dpZHRoID0gMDsKKyAgICBpbnQgcGF0dGVybiA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db3VudGVyczsgaSsrKSB7CisgICAgICBpbnQgY291bnRlciA9IGNvdW50ZXJzW2ldOworICAgICAgaWYgKGNvdW50ZXJzW2ldID4gbWF4TmFycm93Q291bnRlcikgeworICAgICAgICBwYXR0ZXJuIHw9IDEgPDwgKG51bUNvdW50ZXJzIC0gMSAtIGkpOworICAgICAgICB3aWRlQ291bnRlcnMrKzsKKyAgICAgICAgdG90YWxXaWRlQ291bnRlcnNXaWR0aCArPSBjb3VudGVyOworICAgICAgfQorICAgIH0KKyAgICBpZiAod2lkZUNvdW50ZXJzID09IDMpIHsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ291bnRlcnMgJiYgd2lkZUNvdW50ZXJzID4gMDsgaSsrKSB7CisgICAgICAgIGludCBjb3VudGVyID0gY291bnRlcnNbaV07CisgICAgICAgIGlmIChjb3VudGVyc1tpXSA+IG1heE5hcnJvd0NvdW50ZXIpIHsKKyAgICAgICAgICB3aWRlQ291bnRlcnMtLTsKKyAgICAgICAgICBpZiAoKGNvdW50ZXIgPDwgMSkgPj0gdG90YWxXaWRlQ291bnRlcnNXaWR0aCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIHBhdHRlcm47CisgICAgfQorICB9IHdoaWxlICh3aWRlQ291bnRlcnMgPiAzKTsKKyAgcmV0dXJuIC0xOworfQorCistICh1bmljaGFyKXBhdHRlcm5Ub0NoYXI6KGludClwYXR0ZXJuIHsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YoQ09ERTM5X0NIQVJBQ1RFUl9FTkNPRElOR1MpIC8gc2l6ZW9mKGludCk7IGkrKykgeworICAgIGlmIChDT0RFMzlfQ0hBUkFDVEVSX0VOQ09ESU5HU1tpXSA9PSBwYXR0ZXJuKSB7CisgICAgICByZXR1cm4gQ09ERTM5X0FMUEhBQkVUW2ldOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLSAoTlNTdHJpbmcgKilkZWNvZGVFeHRlbmRlZDooTlNNdXRhYmxlU3RyaW5nICopZW5jb2RlZCB7CisgIE5TVUludGVnZXIgbGVuZ3RoID0gW2VuY29kZWQgbGVuZ3RoXTsKKyAgTlNNdXRhYmxlU3RyaW5nICpkZWNvZGVkID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6bGVuZ3RoXTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgdW5pY2hhciBjID0gW2VuY29kZWQgY2hhcmFjdGVyQXRJbmRleDppXTsKKyAgICBpZiAoYyA9PSAnKycgfHwgYyA9PSAnJCcgfHwgYyA9PSAnJScgfHwgYyA9PSAnLycpIHsKKyAgICAgIHVuaWNoYXIgbmV4dCA9IFtlbmNvZGVkIGNoYXJhY3RlckF0SW5kZXg6aSArIDFdOworICAgICAgdW5pY2hhciBkZWNvZGVkQ2hhciA9ICdcMCc7CisKKyAgICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAnKyc6CisgICAgICAgIGlmIChuZXh0ID49ICdBJyAmJiBuZXh0IDw9ICdaJykgeworICAgICAgICAgIGRlY29kZWRDaGFyID0gKHVuaWNoYXIpKG5leHQgKyAzMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJyQnOgorICAgICAgICBpZiAobmV4dCA+PSAnQScgJiYgbmV4dCA8PSAnWicpIHsKKyAgICAgICAgICBkZWNvZGVkQ2hhciA9ICh1bmljaGFyKShuZXh0IC0gNjQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICclJzoKKyAgICAgICAgaWYgKG5leHQgPj0gJ0EnICYmIG5leHQgPD0gJ0UnKSB7CisgICAgICAgICAgZGVjb2RlZENoYXIgPSAodW5pY2hhcikobmV4dCAtIDM4KTsKKyAgICAgICAgfSBlbHNlIGlmIChuZXh0ID49ICdGJyAmJiBuZXh0IDw9ICdXJykgeworICAgICAgICAgIGRlY29kZWRDaGFyID0gKHVuaWNoYXIpKG5leHQgLSAxMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJy8nOgorICAgICAgICBpZiAobmV4dCA+PSAnQScgJiYgbmV4dCA8PSAnTycpIHsKKyAgICAgICAgICBkZWNvZGVkQ2hhciA9ICh1bmljaGFyKShuZXh0IC0gMzIpOworICAgICAgICB9IGVsc2UgaWYgKG5leHQgPT0gJ1onKSB7CisgICAgICAgICAgZGVjb2RlZENoYXIgPSAnOic7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIFtkZWNvZGVkIGFwcGVuZEZvcm1hdDpAIiVDIiwgZGVjb2RlZENoYXJdOworICAgICAgaSsrOworICAgIH0gZWxzZSB7CisgICAgICBbZGVjb2RlZCBhcHBlbmRGb3JtYXQ6QCIlQyIsIGNdOworICAgIH0KKyAgfQorCisgIHJldHVybiBkZWNvZGVkOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWENvZGUzOVdyaXRlci5oIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RlMzlXcml0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjY1YmE0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RlMzlXcml0ZXIuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWE9uZURpbWVuc2lvbmFsQ29kZVdyaXRlci5oIgorCisvKioKKyAqIFRoaXMgb2JqZWN0IHJlbmRlcnMgYSBDT0RFMzkgY29kZSBhcyBhIHtAbGluayBCaXRNYXRyaXh9LgorICovCisKK0BpbnRlcmZhY2UgWlhDb2RlMzlXcml0ZXIgOiBaWE9uZURpbWVuc2lvbmFsQ29kZVdyaXRlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWENvZGUzOVdyaXRlci5tIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RlMzlXcml0ZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODY5NGRjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RlMzlXcml0ZXIubQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhDb2RlMzlSZWFkZXIuaCIKKyNpbXBvcnQgIlpYQ29kZTM5V3JpdGVyLmgiCisKKyNkZWZpbmUgWlhfQ09ERTM5X1dISVRFTEVOIDEKKworQGltcGxlbWVudGF0aW9uIFpYQ29kZTM5V3JpdGVyCisKKy0gKFpYQml0TWF0cml4ICopZW5jb2RlOihOU1N0cmluZyAqKWNvbnRlbnRzIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdCB3aWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodCBoaW50czooWlhFbmNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKGZvcm1hdCAhPSBrQmFyY29kZUZvcm1hdENvZGUzOSkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAKKyAgICAgICAgICAgICAgICBmb3JtYXQ6QCJDYW4gb25seSBlbmNvZGUgQ09ERV8zOS4iXTsKKyAgfQorICByZXR1cm4gW3N1cGVyIGVuY29kZTpjb250ZW50cyBmb3JtYXQ6Zm9ybWF0IHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHQgaGludHM6aGludHMgZXJyb3I6ZXJyb3JdOworfQorCistIChCT09MICopZW5jb2RlOihOU1N0cmluZyAqKWNvbnRlbnRzIGxlbmd0aDooaW50ICopcExlbmd0aCB7CisgIE5TVUludGVnZXIgbGVuZ3RoID0gW2NvbnRlbnRzIGxlbmd0aF07CisgIGlmIChsZW5ndGggPiA4MCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAKKyAgICAgICAgICAgICAgICBmb3JtYXQ6QCJSZXF1ZXN0ZWQgY29udGVudHMgc2hvdWxkIGJlIGxlc3MgdGhhbiA4MCBkaWdpdHMgbG9uZywgYnV0IGdvdCAlbGQiLCAodW5zaWduZWQgbG9uZylsZW5ndGhdOworICB9CisKKyAgY29uc3QgaW50IHdpZHRoc0xlbmdoID0gOTsKKyAgaW50IHdpZHRoc1t3aWR0aHNMZW5naF07CisgIG1lbXNldCh3aWR0aHMsIDAsIHdpZHRoc0xlbmdoICogc2l6ZW9mKGludCkpOworCisgIGludCBjb2RlV2lkdGggPSAyNCArIDEgKyAoaW50KWxlbmd0aDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIE5TVUludGVnZXIgaW5kZXhJblN0cmluZyA9IFtDT0RFMzlfQUxQSEFCRVRfU1RSSU5HIHJhbmdlT2ZTdHJpbmc6W2NvbnRlbnRzIHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZShpLCAxKV1dLmxvY2F0aW9uOworICAgIFtzZWxmIHRvSW50QXJyYXk6Q09ERTM5X0NIQVJBQ1RFUl9FTkNPRElOR1NbaW5kZXhJblN0cmluZ10gdG9SZXR1cm46d2lkdGhzXTsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IHdpZHRoc0xlbmdoOyBqKyspIHsKKyAgICAgIGNvZGVXaWR0aCArPSB3aWR0aHNbal07CisgICAgfQorICB9CisKKyAgaWYgKHBMZW5ndGgpICpwTGVuZ3RoID0gY29kZVdpZHRoOworICBCT09MICpyZXN1bHQgPSAoQk9PTCAqKW1hbGxvYyhjb2RlV2lkdGggKiBzaXplb2YoQk9PTCkpOworICBbc2VsZiB0b0ludEFycmF5OkNPREUzOV9DSEFSQUNURVJfRU5DT0RJTkdTWzM5XSB0b1JldHVybjp3aWR0aHNdOworICBpbnQgcG9zID0gW3N1cGVyIGFwcGVuZFBhdHRlcm46cmVzdWx0IHBvczowIHBhdHRlcm46d2lkdGhzIHBhdHRlcm5MZW46d2lkdGhzTGVuZ2ggc3RhcnRDb2xvcjpUUlVFXTsKKworICBjb25zdCBpbnQgbmFycm93V2hpdGVMZW4gPSBaWF9DT0RFMzlfV0hJVEVMRU47CisgIGludCBuYXJyb3dXaGl0ZVtaWF9DT0RFMzlfV0hJVEVMRU5dID0gezF9OworCisgIHBvcyArPSBbc3VwZXIgYXBwZW5kUGF0dGVybjpyZXN1bHQgcG9zOnBvcyBwYXR0ZXJuOm5hcnJvd1doaXRlIHBhdHRlcm5MZW46bmFycm93V2hpdGVMZW4gc3RhcnRDb2xvcjpGQUxTRV07CisKKyAgZm9yIChpbnQgaSA9IChpbnQpbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICBOU1VJbnRlZ2VyIGluZGV4SW5TdHJpbmcgPSBbQ09ERTM5X0FMUEhBQkVUX1NUUklORyByYW5nZU9mU3RyaW5nOltjb250ZW50cyBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UoaSwgMSldXS5sb2NhdGlvbjsKKyAgICBbc2VsZiB0b0ludEFycmF5OkNPREUzOV9DSEFSQUNURVJfRU5DT0RJTkdTW2luZGV4SW5TdHJpbmddIHRvUmV0dXJuOndpZHRoc107CisgICAgcG9zICs9IFtzdXBlciBhcHBlbmRQYXR0ZXJuOnJlc3VsdCBwb3M6cG9zIHBhdHRlcm46d2lkdGhzIHBhdHRlcm5MZW46d2lkdGhzTGVuZ2ggc3RhcnRDb2xvcjpUUlVFXTsKKyAgICBwb3MgKz0gW3N1cGVyIGFwcGVuZFBhdHRlcm46cmVzdWx0IHBvczpwb3MgcGF0dGVybjpuYXJyb3dXaGl0ZSBwYXR0ZXJuTGVuOm5hcnJvd1doaXRlTGVuIHN0YXJ0Q29sb3I6RkFMU0VdOworICB9CisKKyAgW3NlbGYgdG9JbnRBcnJheTpDT0RFMzlfQ0hBUkFDVEVSX0VOQ09ESU5HU1szOV0gdG9SZXR1cm46d2lkdGhzXTsKKyAgW3N1cGVyIGFwcGVuZFBhdHRlcm46cmVzdWx0IHBvczpwb3MgcGF0dGVybjp3aWR0aHMgcGF0dGVybkxlbjp3aWR0aHNMZW5naCBzdGFydENvbG9yOlRSVUVdOworICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lkKXRvSW50QXJyYXk6KGludClhIHRvUmV0dXJuOihpbnRbXSl0b1JldHVybiB7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7CisgICAgaW50IHRlbXAgPSBhICYgKDEgPDwgaSk7CisgICAgdG9SZXR1cm5baV0gPSB0ZW1wID09IDAgPyAxIDogMjsKKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWENvZGU5M1JlYWRlci5oIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RlOTNSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjMxY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RlOTNSZWFkZXIuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWE9uZURSZWFkZXIuaCIKKworLyoqCisgKiBEZWNvZGVzIENvZGUgOTMgYmFyY29kZXMuCisgKi8KKworQGludGVyZmFjZSBaWENvZGU5M1JlYWRlciA6IFpYT25lRFJlYWRlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWENvZGU5M1JlYWRlci5tIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RlOTNSZWFkZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmIwMjNjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhDb2RlOTNSZWFkZXIubQpAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhDb2RlOTNSZWFkZXIuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWFJlc3VsdC5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludC5oIgorCitjb25zdCBOU1N0cmluZyAqQ09ERTkzX0FMUEhBQkVUX1NUUklORyA9IEAiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLS4gJC8rJWFiY2QqIjsKK2NvbnN0IGNoYXIgQ09ERTkzX0FMUEhBQkVUW10gPSAiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLS4gJC8rJWFiY2QqIjsKKworLyoqCisgKiBUaGVzZSByZXByZXNlbnQgdGhlIGVuY29kaW5ncyBvZiBjaGFyYWN0ZXJzLCBhcyBwYXR0ZXJucyBvZiB3aWRlIGFuZCBuYXJyb3cgYmFycy4KKyAqIFRoZSA5IGxlYXN0LXNpZ25pZmljYW50IGJpdHMgb2YgZWFjaCBpbnQgY29ycmVzcG9uZCB0byB0aGUgcGF0dGVybiBvZiB3aWRlIGFuZCBuYXJyb3cuCisgKi8KK2NvbnN0IGludCBDT0RFOTNfQ0hBUkFDVEVSX0VOQ09ESU5HU1s0OF0gPSB7CisgIDB4MTE0LCAweDE0OCwgMHgxNDQsIDB4MTQyLCAweDEyOCwgMHgxMjQsIDB4MTIyLCAweDE1MCwgMHgxMTIsIDB4MTBBLCAvLyAwLTkKKyAgMHgxQTgsIDB4MUE0LCAweDFBMiwgMHgxOTQsIDB4MTkyLCAweDE4QSwgMHgxNjgsIDB4MTY0LCAweDE2MiwgMHgxMzQsIC8vIEEtSgorICAweDExQSwgMHgxNTgsIDB4MTRDLCAweDE0NiwgMHgxMkMsIDB4MTE2LCAweDFCNCwgMHgxQjIsIDB4MUFDLCAweDFBNiwgLy8gSy1UCisgIDB4MTk2LCAweDE5QSwgMHgxNkMsIDB4MTY2LCAweDEzNiwgMHgxM0EsIC8vIFUtWgorICAweDEyRSwgMHgxRDQsIDB4MUQyLCAweDFDQSwgMHgxNkUsIDB4MTc2LCAweDFBRSwgLy8gLSAtICUKKyAgMHgxMjYsIDB4MURBLCAweDFENiwgMHgxMzIsIDB4MTVFLCAvLyBDb250cm9sIGNoYXJzPyAkLSoKK307CisKK2NvbnN0IGludCBDT0RFOTNfQVNURVJJU0tfRU5DT0RJTkcgPSAweDE1RTsKKworQGludGVyZmFjZSBaWENvZGU5M1JlYWRlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU011dGFibGVTdHJpbmcgKmRlY29kZVJvd1Jlc3VsdDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhDb2RlOTNSZWFkZXIKKworLSAoaWQpaW5pdCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2RlY29kZVJvd1Jlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OjIwXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChaWFJlc3VsdCAqKWRlY29kZVJvdzooaW50KXJvd051bWJlciByb3c6KFpYQml0QXJyYXkgKilyb3cgaGludHM6KFpYRGVjb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGNvbnN0IGludCBjb3VudGVyc0xlbiA9IDY7CisgIGludCBjb3VudGVyc1tjb3VudGVyc0xlbl07CisgIG1lbXNldChjb3VudGVycywgMCwgY291bnRlcnNMZW4gKiBzaXplb2YoaW50KSk7CisKKyAgW3NlbGYuZGVjb2RlUm93UmVzdWx0IHNldFN0cmluZzpAIiJdOworCisgIGludCBzdGFydFsyXSA9IHswfTsKKyAgaWYgKCFbc2VsZiBmaW5kQXN0ZXJpc2tQYXR0ZXJuOnJvdyBhOiZzdGFydFswXSBiOiZzdGFydFsxXV0pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgLy8gUmVhZCBvZmYgd2hpdGUgc3BhY2UKKyAgaW50IG5leHRTdGFydCA9IFtyb3cgbmV4dFNldDpzdGFydFsxXV07CisgIGludCBlbmQgPSByb3cuc2l6ZTsKKworICB1bmljaGFyIGRlY29kZWRDaGFyOworICBpbnQgbGFzdFN0YXJ0OworICBkbyB7CisgICAgaWYgKCFbWlhPbmVEUmVhZGVyIHJlY29yZFBhdHRlcm46cm93IHN0YXJ0Om5leHRTdGFydCBjb3VudGVyczpjb3VudGVycyBjb3VudGVyc1NpemU6Y291bnRlcnNMZW5dKSB7CisgICAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgaW50IHBhdHRlcm4gPSBbc2VsZiB0b1BhdHRlcm46Y291bnRlcnMgY291bnRlcnNMZW46Y291bnRlcnNMZW5dOworICAgIGlmIChwYXR0ZXJuIDwgMCkgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIGRlY29kZWRDaGFyID0gW3NlbGYgcGF0dGVyblRvQ2hhcjpwYXR0ZXJuXTsKKyAgICBpZiAoZGVjb2RlZENoYXIgPT0gMCkgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIFtzZWxmLmRlY29kZVJvd1Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsIGRlY29kZWRDaGFyXTsKKyAgICBsYXN0U3RhcnQgPSBuZXh0U3RhcnQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudGVyc0xlbjsgaSsrKSB7CisgICAgICBuZXh0U3RhcnQgKz0gY291bnRlcnNbaV07CisgICAgfQorICAgIC8vIFJlYWQgb2ZmIHdoaXRlIHNwYWNlCisgICAgbmV4dFN0YXJ0ID0gW3JvdyBuZXh0U2V0Om5leHRTdGFydF07CisgIH0gd2hpbGUgKGRlY29kZWRDaGFyICE9ICcqJyk7CisgIFtzZWxmLmRlY29kZVJvd1Jlc3VsdCBkZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShbc2VsZi5kZWNvZGVSb3dSZXN1bHQgbGVuZ3RoXSAtIDEsIDEpXTsKKworICBpZiAobmV4dFN0YXJ0ID09IGVuZCB8fCAhW3JvdyBnZXQ6bmV4dFN0YXJ0XSkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGlmIChbc2VsZi5kZWNvZGVSb3dSZXN1bHQgbGVuZ3RoXSA8IDIpIHsKKyAgICAvLyBmYWxzZSBwb3NpdGl2ZSAtLSBuZWVkIGF0IGxlYXN0IDIgY2hlY2tzdW0gZGlnaXRzCisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaWYgKCFbc2VsZiBjaGVja0NoZWNrc3VtczpzZWxmLmRlY29kZVJvd1Jlc3VsdCBlcnJvcjplcnJvcl0pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIFtzZWxmLmRlY29kZVJvd1Jlc3VsdCBkZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShbc2VsZi5kZWNvZGVSb3dSZXN1bHQgbGVuZ3RoXSAtIDIsIDIpXTsKKworICBOU1N0cmluZyAqcmVzdWx0U3RyaW5nID0gW3NlbGYgZGVjb2RlRXh0ZW5kZWQ6c2VsZi5kZWNvZGVSb3dSZXN1bHRdOworICBpZiAoIXJlc3VsdFN0cmluZykgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICBmbG9hdCBsZWZ0ID0gKGZsb2F0KSAoc3RhcnRbMV0gKyBzdGFydFswXSkgLyAyLjBmOworICBmbG9hdCByaWdodCA9IChmbG9hdCkgKG5leHRTdGFydCArIGxhc3RTdGFydCkgLyAyLjBmOworICByZXR1cm4gW1pYUmVzdWx0IHJlc3VsdFdpdGhUZXh0OnJlc3VsdFN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgIHJhd0J5dGVzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOjAKKyAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBvaW50czpAW1tbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOmxlZnQgeTooZmxvYXQpcm93TnVtYmVyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOnJpZ2h0IHk6KGZsb2F0KXJvd051bWJlcl1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRDb2RlOTNdOworfQorCistIChCT09MKWZpbmRBc3Rlcmlza1BhdHRlcm46KFpYQml0QXJyYXkgKilyb3cgYTooaW50ICopYSBiOihpbnQgKiliIHsKKyAgaW50IHdpZHRoID0gcm93LnNpemU7CisgIGludCByb3dPZmZzZXQgPSBbcm93IG5leHRTZXQ6MF07CisKKyAgaW50IGNvdW50ZXJQb3NpdGlvbiA9IDA7CisKKyAgY29uc3QgaW50IHBhdHRlcm5MZW5ndGggPSA2OworICBpbnQgY291bnRlcnNbcGF0dGVybkxlbmd0aF07CisgIG1lbXNldChjb3VudGVycywgMCwgcGF0dGVybkxlbmd0aCAqIHNpemVvZihpbnQpKTsKKworICBpbnQgcGF0dGVyblN0YXJ0ID0gcm93T2Zmc2V0OworICBCT09MIGlzV2hpdGUgPSBOTzsKKworICBmb3IgKGludCBpID0gcm93T2Zmc2V0OyBpIDwgd2lkdGg7IGkrKykgeworICAgIGlmIChbcm93IGdldDppXSBeIGlzV2hpdGUpIHsKKyAgICAgIGNvdW50ZXJzW2NvdW50ZXJQb3NpdGlvbl0rKzsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKGNvdW50ZXJQb3NpdGlvbiA9PSBwYXR0ZXJuTGVuZ3RoIC0gMSkgeworICAgICAgICBpZiAoW3NlbGYgdG9QYXR0ZXJuOmNvdW50ZXJzIGNvdW50ZXJzTGVuOnBhdHRlcm5MZW5ndGhdID09IENPREU5M19BU1RFUklTS19FTkNPRElORykgeworICAgICAgICAgIGlmIChhKSAqYSA9IHBhdHRlcm5TdGFydDsKKyAgICAgICAgICBpZiAoYikgKmIgPSBpOworICAgICAgICAgIHJldHVybiBZRVM7CisgICAgICAgIH0KKyAgICAgICAgcGF0dGVyblN0YXJ0ICs9IGNvdW50ZXJzWzBdICsgY291bnRlcnNbMV07CisgICAgICAgIGZvciAoaW50IHkgPSAyOyB5IDwgcGF0dGVybkxlbmd0aDsgeSsrKSB7CisgICAgICAgICAgY291bnRlcnNbeSAtIDJdID0gY291bnRlcnNbeV07CisgICAgICAgIH0KKyAgICAgICAgY291bnRlcnNbcGF0dGVybkxlbmd0aCAtIDJdID0gMDsKKyAgICAgICAgY291bnRlcnNbcGF0dGVybkxlbmd0aCAtIDFdID0gMDsKKyAgICAgICAgY291bnRlclBvc2l0aW9uLS07CisgICAgICB9IGVsc2UgeworICAgICAgICBjb3VudGVyUG9zaXRpb24rKzsKKyAgICAgIH0KKyAgICAgIGNvdW50ZXJzW2NvdW50ZXJQb3NpdGlvbl0gPSAxOworICAgICAgaXNXaGl0ZSA9ICFpc1doaXRlOworICAgIH0KKyAgfQorCisgIHJldHVybiBOTzsKK30KKworLSAoaW50KXRvUGF0dGVybjooaW50ICopY291bnRlcnMgY291bnRlcnNMZW46KHVuc2lnbmVkIGludCljb3VudGVyc0xlbiB7CisgIGludCBtYXggPSBjb3VudGVyc0xlbjsKKyAgaW50IHN1bSA9IDA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKKyAgICBzdW0gKz0gY291bnRlcnNbaV07CisgIH0KKyAgaW50IHBhdHRlcm4gPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IG1heDsgaSsrKSB7CisgICAgaW50IHNjYWxlZFNoaWZ0ZWQgPSAoY291bnRlcnNbaV0gPDwgSU5URUdFUl9NQVRIX1NISUZUKSAqIDkgLyBzdW07CisgICAgaW50IHNjYWxlZFVuc2hpZnRlZCA9IHNjYWxlZFNoaWZ0ZWQgPj4gSU5URUdFUl9NQVRIX1NISUZUOworICAgIGlmICgoc2NhbGVkU2hpZnRlZCAmIDB4RkYpID4gMHg3RikgeworICAgICAgc2NhbGVkVW5zaGlmdGVkKys7CisgICAgfQorICAgIGlmIChzY2FsZWRVbnNoaWZ0ZWQgPCAxIHx8IHNjYWxlZFVuc2hpZnRlZCA+IDQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKChpICYgMHgwMSkgPT0gMCkgeworICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzY2FsZWRVbnNoaWZ0ZWQ7IGorKykgeworICAgICAgICBwYXR0ZXJuID0gKHBhdHRlcm4gPDwgMSkgfCAweDAxOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBwYXR0ZXJuIDw8PSBzY2FsZWRVbnNoaWZ0ZWQ7CisgICAgfQorICB9CisgIHJldHVybiBwYXR0ZXJuOworfQorCistICh1bmljaGFyKXBhdHRlcm5Ub0NoYXI6KGludClwYXR0ZXJuIHsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YoQ09ERTkzX0NIQVJBQ1RFUl9FTkNPRElOR1MpIC8gc2l6ZW9mKGludCk7IGkrKykgeworICAgIGlmIChDT0RFOTNfQ0hBUkFDVEVSX0VOQ09ESU5HU1tpXSA9PSBwYXR0ZXJuKSB7CisgICAgICByZXR1cm4gQ09ERTkzX0FMUEhBQkVUW2ldOworICAgIH0KKyAgfQorCisgIHJldHVybiAtMTsKK30KKworLSAoTlNTdHJpbmcgKilkZWNvZGVFeHRlbmRlZDooTlNNdXRhYmxlU3RyaW5nICopZW5jb2RlZCB7CisgIE5TVUludGVnZXIgbGVuZ3RoID0gW2VuY29kZWQgbGVuZ3RoXTsKKyAgTlNNdXRhYmxlU3RyaW5nICpkZWNvZGVkID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6bGVuZ3RoXTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIHVuaWNoYXIgYyA9IFtlbmNvZGVkIGNoYXJhY3RlckF0SW5kZXg6aV07CisgICAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2QnKSB7CisgICAgICBpZiAoaSA+PSBsZW5ndGggLSAxKSB7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgICB9CisgICAgICB1bmljaGFyIG5leHQgPSBbZW5jb2RlZCBjaGFyYWN0ZXJBdEluZGV4OmkgKyAxXTsKKyAgICAgIHVuaWNoYXIgZGVjb2RlZENoYXIgPSAnXDAnOworICAgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlICdkJzoKKyAgICAgICAgaWYgKG5leHQgPj0gJ0EnICYmIG5leHQgPD0gJ1onKSB7CisgICAgICAgICAgZGVjb2RlZENoYXIgPSAodW5pY2hhcikobmV4dCArIDMyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnYSc6CisgICAgICAgIGlmIChuZXh0ID49ICdBJyAmJiBuZXh0IDw9ICdaJykgeworICAgICAgICAgIGRlY29kZWRDaGFyID0gKHVuaWNoYXIpKG5leHQgLSA2NCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2InOgorICAgICAgICBpZiAobmV4dCA+PSAnQScgJiYgbmV4dCA8PSAnRScpIHsKKyAgICAgICAgICBkZWNvZGVkQ2hhciA9ICh1bmljaGFyKShuZXh0IC0gMzgpOworICAgICAgICB9IGVsc2UgaWYgKG5leHQgPj0gJ0YnICYmIG5leHQgPD0gJ1cnKSB7CisgICAgICAgICAgZGVjb2RlZENoYXIgPSAodW5pY2hhcikobmV4dCAtIDExKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnYyc6CisgICAgICAgIGlmIChuZXh0ID49ICdBJyAmJiBuZXh0IDw9ICdPJykgeworICAgICAgICAgIGRlY29kZWRDaGFyID0gKHVuaWNoYXIpKG5leHQgLSAzMik7CisgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSAnWicpIHsKKyAgICAgICAgICBkZWNvZGVkQ2hhciA9ICc6JzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgW2RlY29kZWQgYXBwZW5kRm9ybWF0OkAiJUMiLCBkZWNvZGVkQ2hhcl07CisgICAgICBpKys7CisgICAgfSBlbHNlIHsKKyAgICAgIFtkZWNvZGVkIGFwcGVuZEZvcm1hdDpAIiVDIiwgY107CisgICAgfQorICB9CisKKyAgcmV0dXJuIGRlY29kZWQ7Cit9CisKKy0gKEJPT0wpY2hlY2tDaGVja3N1bXM6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIE5TVUludGVnZXIgbGVuZ3RoID0gW3Jlc3VsdCBsZW5ndGhdOworICBpZiAoIVtzZWxmIGNoZWNrT25lQ2hlY2tzdW06cmVzdWx0IGNoZWNrUG9zaXRpb246KGludClsZW5ndGggLSAyIHdlaWdodE1heDoyMCBlcnJvcjplcnJvcl0pIHsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgcmV0dXJuIFtzZWxmIGNoZWNrT25lQ2hlY2tzdW06cmVzdWx0IGNoZWNrUG9zaXRpb246KGludClsZW5ndGggLSAxIHdlaWdodE1heDoxNSBlcnJvcjplcnJvcl07Cit9CisKKy0gKEJPT0wpY2hlY2tPbmVDaGVja3N1bTooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0IGNoZWNrUG9zaXRpb246KGludCljaGVja1Bvc2l0aW9uIHdlaWdodE1heDooaW50KXdlaWdodE1heCBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGludCB3ZWlnaHQgPSAxOworICBpbnQgdG90YWwgPSAwOworCisgIGZvciAoaW50IGkgPSBjaGVja1Bvc2l0aW9uIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICB0b3RhbCArPSB3ZWlnaHQgKiBbQ09ERTkzX0FMUEhBQkVUX1NUUklORyByYW5nZU9mU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUMiLCBbcmVzdWx0IGNoYXJhY3RlckF0SW5kZXg6aV1dXS5sb2NhdGlvbjsKKyAgICBpZiAoKyt3ZWlnaHQgPiB3ZWlnaHRNYXgpIHsKKyAgICAgIHdlaWdodCA9IDE7CisgICAgfQorICB9CisKKyAgaWYgKFtyZXN1bHQgY2hhcmFjdGVyQXRJbmRleDpjaGVja1Bvc2l0aW9uXSAhPSBDT0RFOTNfQUxQSEFCRVRbdG90YWwgJSA0N10pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IENoZWNrc3VtRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBOTzsKKyAgfQorICByZXR1cm4gWUVTOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWEVBTjEzUmVhZGVyLmggYi9aWGluZ09iakMvb25lZC9aWEVBTjEzUmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjNjRkMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYRUFOMTNSZWFkZXIuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFVQQ0VBTlJlYWRlci5oIgorCisvKioKKyAqIEltcGxlbWVudHMgZGVjb2Rpbmcgb2YgdGhlIEVBTi0xMyBmb3JtYXQuCisgKi8KKworZXh0ZXJuIGludCBGSVJTVF9ESUdJVF9FTkNPRElOR1NbMTBdOworCitAaW50ZXJmYWNlIFpYRUFOMTNSZWFkZXIgOiBaWFVQQ0VBTlJlYWRlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWEVBTjEzUmVhZGVyLm0gYi9aWGluZ09iakMvb25lZC9aWEVBTjEzUmVhZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxY2FiNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYRUFOMTNSZWFkZXIubQpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhFQU4xM1JlYWRlci5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKworLy8gRm9yIGFuIEVBTi0xMyBiYXJjb2RlLCB0aGUgZmlyc3QgZGlnaXQgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHBhcml0aWVzIHVzZWQKKy8vIHRvIGVuY29kZSB0aGUgbmV4dCBzaXggZGlnaXRzLCBhY2NvcmRpbmcgdG8gdGhlIHRhYmxlIGJlbG93LiBGb3IgZXhhbXBsZSwKKy8vIGlmIHRoZSBiYXJjb2RlIGlzIDUgMTIzNDU2IDc4OTAxMiB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZGlnaXQgaXMKKy8vIHNpZ25pZmllZCBieSB1c2luZyBvZGQgZm9yICcxJywgZXZlbiBmb3IgJzInLCBldmVuIGZvciAnMycsIG9kZCBmb3IgJzQnLAorLy8gb2RkIGZvciAnNScsIGFuZCBldmVuIGZvciAnNicuIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VBTi0xMworLy8KKy8vICAgICAgICAgICAgICAgIFBhcml0eSBvZiBuZXh0IDYgZGlnaXRzCisvLyAgICBEaWdpdCAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUKKy8vICAgICAgIDAgICAgT2RkICAgT2RkICAgT2RkICAgT2RkICAgT2RkICAgT2RkCisvLyAgICAgICAxICAgIE9kZCAgIE9kZCAgIEV2ZW4gIE9kZCAgIEV2ZW4gIEV2ZW4KKy8vICAgICAgIDIgICAgT2RkICAgT2RkICAgRXZlbiAgRXZlbiAgT2RkICAgRXZlbgorLy8gICAgICAgMyAgICBPZGQgICBPZGQgICBFdmVuICBFdmVuICBFdmVuICBPZGQKKy8vICAgICAgIDQgICAgT2RkICAgRXZlbiAgT2RkICAgT2RkICAgRXZlbiAgRXZlbgorLy8gICAgICAgNSAgICBPZGQgICBFdmVuICBFdmVuICBPZGQgICBPZGQgICBFdmVuCisvLyAgICAgICA2ICAgIE9kZCAgIEV2ZW4gIEV2ZW4gIEV2ZW4gIE9kZCAgIE9kZAorLy8gICAgICAgNyAgICBPZGQgICBFdmVuICBPZGQgICBFdmVuICBPZGQgICBFdmVuCisvLyAgICAgICA4ICAgIE9kZCAgIEV2ZW4gIE9kZCAgIEV2ZW4gIEV2ZW4gIE9kZAorLy8gICAgICAgOSAgICBPZGQgICBFdmVuICBFdmVuICBPZGQgICBFdmVuICBPZGQKKy8vCisvLyBOb3RlIHRoYXQgdGhlIGVuY29kaW5nIGZvciAnMCcgdXNlcyB0aGUgc2FtZSBwYXJpdHkgYXMgYSBVUEMgYmFyY29kZS4gSGVuY2UKKy8vIGEgVVBDIGJhcmNvZGUgY2FuIGJlIGNvbnZlcnRlZCB0byBhbiBFQU4tMTMgYmFyY29kZSBieSBwcmVwZW5kaW5nIGEgMC4KKy8vCisvLyBUaGUgZW5jb2RpbmcgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIGZvbGxvd2luZyBhcnJheSwgd2hpY2ggaXMgYSBiaXQgcGF0dGVybgorLy8gdXNpbmcgT2RkID0gMCBhbmQgRXZlbiA9IDEuIEZvciBleGFtcGxlLCA1IGlzIHJlcHJlc2VudGVkIGJ5OgorLy8KKy8vICAgICAgICAgICAgICBPZGQgRXZlbiBFdmVuIE9kZCBPZGQgRXZlbgorLy8gaW4gYmluYXJ5OgorLy8gICAgICAgICAgICAgICAgMCAgICAxICAgIDEgICAwICAgMCAgICAxICAgPT0gMHgxOQorLy8KK2ludCBGSVJTVF9ESUdJVF9FTkNPRElOR1NbMTBdID0geworICAweDAwLCAweDBCLCAweDBELCAweEUsIDB4MTMsIDB4MTksIDB4MUMsIDB4MTUsIDB4MTYsIDB4MUEKK307CisKK0BpbnRlcmZhY2UgWlhFQU4xM1JlYWRlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgKmRlY29kZU1pZGRsZUNvdW50ZXJzOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEVBTjEzUmVhZGVyCisKKy0gKGlkKWluaXQgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9kZWNvZGVNaWRkbGVDb3VudGVycyA9IChpbnQgKiltYWxsb2Moc2l6ZW9mKDQpICogc2l6ZW9mKGludCkpOworICAgIF9kZWNvZGVNaWRkbGVDb3VudGVyc1swXSA9IDA7CisgICAgX2RlY29kZU1pZGRsZUNvdW50ZXJzWzFdID0gMDsKKyAgICBfZGVjb2RlTWlkZGxlQ291bnRlcnNbMl0gPSAwOworICAgIF9kZWNvZGVNaWRkbGVDb3VudGVyc1szXSA9IDA7CisgIH0KKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYyB7CisgIGlmIChfZGVjb2RlTWlkZGxlQ291bnRlcnMgIT0gTlVMTCkgeworICAgIGZyZWUoX2RlY29kZU1pZGRsZUNvdW50ZXJzKTsKKyAgICBfZGVjb2RlTWlkZGxlQ291bnRlcnMgPSBOVUxMOworICB9Cit9CisKKy0gKGludClkZWNvZGVNaWRkbGU6KFpYQml0QXJyYXkgKilyb3cgc3RhcnRSYW5nZTooTlNSYW5nZSlzdGFydFJhbmdlIHJlc3VsdDooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0IGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaW50ICpjb3VudGVycyA9IHNlbGYuZGVjb2RlTWlkZGxlQ291bnRlcnM7CisgIGNvdW50ZXJzWzBdID0gMDsKKyAgY291bnRlcnNbMV0gPSAwOworICBjb3VudGVyc1syXSA9IDA7CisgIGNvdW50ZXJzWzNdID0gMDsKKyAgY29uc3QgaW50IGNvdW50ZXJzTGVuID0gNDsKKyAgaW50IGVuZCA9IHJvdy5zaXplOworICBpbnQgcm93T2Zmc2V0ID0gKGludClOU01heFJhbmdlKHN0YXJ0UmFuZ2UpOworCisgIGludCBsZ1BhdHRlcm5Gb3VuZCA9IDA7CisKKyAgZm9yIChpbnQgeCA9IDA7IHggPCA2ICYmIHJvd09mZnNldCA8IGVuZDsgeCsrKSB7CisgICAgaW50IGJlc3RNYXRjaCA9IFtaWFVQQ0VBTlJlYWRlciBkZWNvZGVEaWdpdDpyb3cgY291bnRlcnM6Y291bnRlcnMgY291bnRlcnNMZW46Y291bnRlcnNMZW4gcm93T2Zmc2V0OnJvd09mZnNldCBwYXR0ZXJuVHlwZTpVUENfRUFOX1BBVFRFUk5TX0xfQU5EX0dfUEFUVEVSTlMgZXJyb3I6ZXJyb3JdOworICAgIGlmIChiZXN0TWF0Y2ggPT0gLTEpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSgnMCcgKyBiZXN0TWF0Y2ggJSAxMCldOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnRlcnNMZW47IGkrKykgeworICAgICAgcm93T2Zmc2V0ICs9IGNvdW50ZXJzW2ldOworICAgIH0KKyAgICBpZiAoYmVzdE1hdGNoID49IDEwKSB7CisgICAgICBsZ1BhdHRlcm5Gb3VuZCB8PSAxIDw8ICg1IC0geCk7CisgICAgfQorICB9CisKKyAgaWYgKCFbc2VsZiBkZXRlcm1pbmVGaXJzdERpZ2l0OnJlc3VsdCBsZ1BhdHRlcm5Gb3VuZDpsZ1BhdHRlcm5Gb3VuZF0pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIE5TUmFuZ2UgbWlkZGxlUmFuZ2UgPSBbW3NlbGYgY2xhc3NdIGZpbmRHdWFyZFBhdHRlcm46cm93IHJvd09mZnNldDpyb3dPZmZzZXQgd2hpdGVGaXJzdDpZRVMgcGF0dGVybjooaW50ICopTUlERExFX1BBVFRFUk4gcGF0dGVybkxlbjpNSURETEVfUEFUVEVSTl9MRU4gZXJyb3I6ZXJyb3JdOworICBpZiAobWlkZGxlUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgeworICAgIHJldHVybiAtMTsKKyAgfQorICByb3dPZmZzZXQgPSAoaW50KU5TTWF4UmFuZ2UobWlkZGxlUmFuZ2UpOworCisgIGZvciAoaW50IHggPSAwOyB4IDwgNiAmJiByb3dPZmZzZXQgPCBlbmQ7IHgrKykgeworICAgIGludCBiZXN0TWF0Y2ggPSBbWlhVUENFQU5SZWFkZXIgZGVjb2RlRGlnaXQ6cm93IGNvdW50ZXJzOmNvdW50ZXJzIGNvdW50ZXJzTGVuOmNvdW50ZXJzTGVuIHJvd09mZnNldDpyb3dPZmZzZXQgcGF0dGVyblR5cGU6VVBDX0VBTl9QQVRURVJOU19MX1BBVFRFUk5TIGVycm9yOmVycm9yXTsKKyAgICBpZiAoYmVzdE1hdGNoID09IC0xKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoJzAnICsgYmVzdE1hdGNoKV07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudGVyc0xlbjsgaSsrKSB7CisgICAgICByb3dPZmZzZXQgKz0gY291bnRlcnNbaV07CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJvd09mZnNldDsKK30KKworLSAoWlhCYXJjb2RlRm9ybWF0KWJhcmNvZGVGb3JtYXQgeworICByZXR1cm4ga0JhcmNvZGVGb3JtYXRFYW4xMzsKK30KKworLyoqCisgKiBCYXNlZCBvbiBwYXR0ZXJuIG9mIG9kZC1ldmVuICgnTCcgYW5kICdHJykgcGF0dGVybnMgdXNlZCB0byBlbmNvZGVkIHRoZSBleHBsaWNpdGx5LWVuY29kZWQKKyAqIGRpZ2l0cyBpbiBhIGJhcmNvZGUsIGRldGVybWluZXMgdGhlIGltcGxpY2l0bHkgZW5jb2RlZCBmaXJzdCBkaWdpdCBhbmQgYWRkcyBpdCB0byB0aGUKKyAqIHJlc3VsdCBzdHJpbmcuCisgKi8KKy0gKEJPT0wpZGV0ZXJtaW5lRmlyc3REaWdpdDooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0U3RyaW5nIGxnUGF0dGVybkZvdW5kOihpbnQpbGdQYXR0ZXJuRm91bmQgeworICBmb3IgKGludCBkID0gMDsgZCA8IDEwOyBkKyspIHsKKyAgICBpZiAobGdQYXR0ZXJuRm91bmQgPT0gRklSU1RfRElHSVRfRU5DT0RJTkdTW2RdKSB7CisgICAgICBbcmVzdWx0U3RyaW5nIGluc2VydFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpKCcwJyArIGQpXSBhdEluZGV4OjBdOworICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgIH0KKyAgcmV0dXJuIE5POworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWEVBTjEzV3JpdGVyLmggYi9aWGluZ09iakMvb25lZC9aWEVBTjEzV3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4MzEwMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYRUFOMTNXcml0ZXIuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFVQQ0VBTldyaXRlci5oIgorCisvKioKKyAqIFRoaXMgb2JqZWN0IHJlbmRlcnMgYW4gRUFOMTMgY29kZSBhcyBhIHtAbGluayBCaXRNYXRyaXh9LgorICovCisKK0BpbnRlcmZhY2UgWlhFQU4xM1dyaXRlciA6IFpYVVBDRUFOV3JpdGVyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYRUFOMTNXcml0ZXIubSBiL1pYaW5nT2JqQy9vbmVkL1pYRUFOMTNXcml0ZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjc2N2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhFQU4xM1dyaXRlci5tCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQmFyY29kZUZvcm1hdC5oIgorI2ltcG9ydCAiWlhFQU4xM1JlYWRlci5oIgorI2ltcG9ydCAiWlhFQU4xM1dyaXRlci5oIgorI2ltcG9ydCAiWlhVUENFQU5SZWFkZXIuaCIKKworY29uc3QgaW50IEVBTjEzX0NPREVfV0lEVEggPSAzICsgLy8gc3RhcnQgZ3VhcmQKKyAgKDcgKiA2KSArIC8vIGxlZnQgYmFycworICA1ICsgLy8gbWlkZGxlIGd1YXJkCisgICg3ICogNikgKyAvLyByaWdodCBiYXJzCisgIDM7IC8vIGVuZCBndWFyZAorCitAaW1wbGVtZW50YXRpb24gWlhFQU4xM1dyaXRlcgorCistIChaWEJpdE1hdHJpeCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgaGludHM6KFpYRW5jb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGlmIChmb3JtYXQgIT0ga0JhcmNvZGVGb3JtYXRFYW4xMykgeworICAgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiQ2FuIG9ubHkgZW5jb2RlIEVBTl8xMywgYnV0IGdvdCAlZCIsIGZvcm1hdF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgIH0KKworICByZXR1cm4gW3N1cGVyIGVuY29kZTpjb250ZW50cyBmb3JtYXQ6Zm9ybWF0IHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHQgaGludHM6aGludHMgZXJyb3I6ZXJyb3JdOworfQorCistIChCT09MICopZW5jb2RlOihOU1N0cmluZyAqKWNvbnRlbnRzIGxlbmd0aDooaW50ICopcExlbmd0aCB7CisgIGlmIChbY29udGVudHMgbGVuZ3RoXSAhPSAxMykgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIGZvcm1hdDpAIlJlcXVlc3RlZCBjb250ZW50cyBzaG91bGQgYmUgMTMgZGlnaXRzIGxvbmcsIGJ1dCBnb3QgJWQiLCAoaW50KVtjb250ZW50cyBsZW5ndGhdXTsKKyAgfQorCisgIGlmICghW1pYVVBDRUFOUmVhZGVyIGNoZWNrU3RhbmRhcmRVUENFQU5DaGVja3N1bTpjb250ZW50c10pIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KKyAgICAgICAgICAgICAgICBmb3JtYXQ6QCJDb250ZW50cyBkbyBub3QgcGFzcyBjaGVja3N1bSJdOworICB9CisKKyAgaW50IGZpcnN0RGlnaXQgPSBbW2NvbnRlbnRzIHN1YnN0cmluZ1RvSW5kZXg6MV0gaW50VmFsdWVdOworICBpbnQgcGFyaXRpZXMgPSBGSVJTVF9ESUdJVF9FTkNPRElOR1NbZmlyc3REaWdpdF07CisgIGlmIChwTGVuZ3RoKSAqcExlbmd0aCA9IEVBTjEzX0NPREVfV0lEVEg7CisgIEJPT0wgKnJlc3VsdCA9IChCT09MICopbWFsbG9jKEVBTjEzX0NPREVfV0lEVEggKiBzaXplb2YoQk9PTCkpOworICBtZW1zZXQocmVzdWx0LCAwLCBFQU4xM19DT0RFX1dJRFRIICogc2l6ZW9mKGludDhfdCkpOworICBpbnQgcG9zID0gMDsKKworICBwb3MgKz0gW3N1cGVyIGFwcGVuZFBhdHRlcm46cmVzdWx0IHBvczpwb3MgcGF0dGVybjooaW50ICopU1RBUlRfRU5EX1BBVFRFUk4gcGF0dGVybkxlbjpTVEFSVF9FTkRfUEFUVEVSTl9MRU4gc3RhcnRDb2xvcjpUUlVFXTsKKworICBmb3IgKGludCBpID0gMTsgaSA8PSA2OyBpKyspIHsKKyAgICBpbnQgZGlnaXQgPSBbW2NvbnRlbnRzIHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZShpLCAxKV0gaW50VmFsdWVdOworICAgIGlmICgocGFyaXRpZXMgPj4gKDYgLSBpKSAmIDEpID09IDEpIHsKKyAgICAgIGRpZ2l0ICs9IDEwOworICAgIH0KKyAgICBwb3MgKz0gW3N1cGVyIGFwcGVuZFBhdHRlcm46cmVzdWx0IHBvczpwb3MgcGF0dGVybjooaW50ICopTF9BTkRfR19QQVRURVJOU1tkaWdpdF0gcGF0dGVybkxlbjpMX1BBVFRFUk5TX1NVQl9MRU4gc3RhcnRDb2xvcjpGQUxTRV07CisgIH0KKworICBwb3MgKz0gW3N1cGVyIGFwcGVuZFBhdHRlcm46cmVzdWx0IHBvczpwb3MgcGF0dGVybjooaW50ICopTUlERExFX1BBVFRFUk4gcGF0dGVybkxlbjpNSURETEVfUEFUVEVSTl9MRU4gc3RhcnRDb2xvcjpGQUxTRV07CisKKyAgZm9yIChpbnQgaSA9IDc7IGkgPD0gMTI7IGkrKykgeworICAgIGludCBkaWdpdCA9IFtbY29udGVudHMgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKGksIDEpXSBpbnRWYWx1ZV07CisgICAgcG9zICs9IFtzdXBlciBhcHBlbmRQYXR0ZXJuOnJlc3VsdCBwb3M6cG9zIHBhdHRlcm46KGludCAqKUxfUEFUVEVSTlNbZGlnaXRdIHBhdHRlcm5MZW46TF9QQVRURVJOU19TVUJfTEVOIHN0YXJ0Q29sb3I6VFJVRV07CisgIH0KKyAgW3N1cGVyIGFwcGVuZFBhdHRlcm46cmVzdWx0IHBvczpwb3MgcGF0dGVybjooaW50ICopU1RBUlRfRU5EX1BBVFRFUk4gcGF0dGVybkxlbjpTVEFSVF9FTkRfUEFUVEVSTl9MRU4gc3RhcnRDb2xvcjpUUlVFXTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWEVBTjhSZWFkZXIuaCBiL1pYaW5nT2JqQy9vbmVkL1pYRUFOOFJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOGFjYmEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWEVBTjhSZWFkZXIuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFVQQ0VBTlJlYWRlci5oIgorCisvKioKKyAqIEltcGxlbWVudHMgZGVjb2Rpbmcgb2YgdGhlIEVBTi04IGZvcm1hdC4KKyAqLworCitAaW50ZXJmYWNlIFpYRUFOOFJlYWRlciA6IFpYVVBDRUFOUmVhZGVyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYRUFOOFJlYWRlci5tIGIvWlhpbmdPYmpDL29uZWQvWlhFQU44UmVhZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFlMTY5NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYRUFOOFJlYWRlci5tCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0QXJyYXkuaCIKKyNpbXBvcnQgIlpYRUFOOFJlYWRlci5oIgorCitAaW50ZXJmYWNlIFpYRUFOOFJlYWRlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgKmRlY29kZU1pZGRsZUNvdW50ZXJzOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEVBTjhSZWFkZXIKKworLSAoaWQpaW5pdCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2RlY29kZU1pZGRsZUNvdW50ZXJzID0gKGludCAqKW1hbGxvYyhzaXplb2YoNCkgKiBzaXplb2YoaW50KSk7CisgICAgX2RlY29kZU1pZGRsZUNvdW50ZXJzWzBdID0gMDsKKyAgICBfZGVjb2RlTWlkZGxlQ291bnRlcnNbMV0gPSAwOworICAgIF9kZWNvZGVNaWRkbGVDb3VudGVyc1syXSA9IDA7CisgICAgX2RlY29kZU1pZGRsZUNvdW50ZXJzWzNdID0gMDsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MgeworICBpZiAoX2RlY29kZU1pZGRsZUNvdW50ZXJzICE9IE5VTEwpIHsKKyAgICBmcmVlKF9kZWNvZGVNaWRkbGVDb3VudGVycyk7CisgICAgX2RlY29kZU1pZGRsZUNvdW50ZXJzID0gTlVMTDsKKyAgfQorfQorCistIChpbnQpZGVjb2RlTWlkZGxlOihaWEJpdEFycmF5ICopcm93IHN0YXJ0UmFuZ2U6KE5TUmFuZ2Upc3RhcnRSYW5nZSByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGNvbnN0IGludCBjb3VudGVyc0xlbiA9IDQ7CisgIGludCBjb3VudGVyc1tjb3VudGVyc0xlbl07CisgIG1lbXNldChjb3VudGVycywgMCwgY291bnRlcnNMZW4gKiBzaXplb2YoaW50KSk7CisKKyAgaW50IGVuZCA9IHJvdy5zaXplOworICBpbnQgcm93T2Zmc2V0ID0gKGludClOU01heFJhbmdlKHN0YXJ0UmFuZ2UpOworCisgIGZvciAoaW50IHggPSAwOyB4IDwgNCAmJiByb3dPZmZzZXQgPCBlbmQ7IHgrKykgeworICAgIGludCBiZXN0TWF0Y2ggPSBbWlhVUENFQU5SZWFkZXIgZGVjb2RlRGlnaXQ6cm93IGNvdW50ZXJzOmNvdW50ZXJzIGNvdW50ZXJzTGVuOmNvdW50ZXJzTGVuIHJvd09mZnNldDpyb3dPZmZzZXQgcGF0dGVyblR5cGU6VVBDX0VBTl9QQVRURVJOU19MX1BBVFRFUk5TIGVycm9yOmVycm9yXTsKKyAgICBpZiAoYmVzdE1hdGNoID09IC0xKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoJzAnICsgYmVzdE1hdGNoKV07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudGVyc0xlbjsgaSsrKSB7CisgICAgICByb3dPZmZzZXQgKz0gY291bnRlcnNbaV07CisgICAgfQorICB9CisKKyAgTlNSYW5nZSBtaWRkbGVSYW5nZSA9IFtbc2VsZiBjbGFzc10gZmluZEd1YXJkUGF0dGVybjpyb3cgcm93T2Zmc2V0OnJvd09mZnNldCB3aGl0ZUZpcnN0OllFUyBwYXR0ZXJuOihpbnQgKilNSURETEVfUEFUVEVSTiBwYXR0ZXJuTGVuOk1JRERMRV9QQVRURVJOX0xFTiBlcnJvcjplcnJvcl07CisgIGlmIChtaWRkbGVSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJvd09mZnNldCA9IChpbnQpTlNNYXhSYW5nZShtaWRkbGVSYW5nZSk7CisKKyAgZm9yIChpbnQgeCA9IDA7IHggPCA0ICYmIHJvd09mZnNldCA8IGVuZDsgeCsrKSB7CisgICAgaW50IGJlc3RNYXRjaCA9IFtaWFVQQ0VBTlJlYWRlciBkZWNvZGVEaWdpdDpyb3cgY291bnRlcnM6Y291bnRlcnMgY291bnRlcnNMZW46Y291bnRlcnNMZW4gcm93T2Zmc2V0OnJvd09mZnNldCBwYXR0ZXJuVHlwZTpVUENfRUFOX1BBVFRFUk5TX0xfUEFUVEVSTlMgZXJyb3I6ZXJyb3JdOworICAgIGlmIChiZXN0TWF0Y2ggPT0gLTEpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSgnMCcgKyBiZXN0TWF0Y2gpXTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ZXJzTGVuOyBpKyspIHsKKyAgICAgIHJvd09mZnNldCArPSBjb3VudGVyc1tpXTsKKyAgICB9CisgIH0KKworICByZXR1cm4gcm93T2Zmc2V0OworfQorCistIChaWEJhcmNvZGVGb3JtYXQpYmFyY29kZUZvcm1hdCB7CisgIHJldHVybiBrQmFyY29kZUZvcm1hdEVhbjg7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYRUFOOFdyaXRlci5oIGIvWlhpbmdPYmpDL29uZWQvWlhFQU44V3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QyMzY2MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYRUFOOFdyaXRlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYVVBDRUFOV3JpdGVyLmgiCisKKy8qKgorICogVGhpcyBvYmplY3QgcmVuZGVycyBhbiBFQU44IGNvZGUgYXMgYSBaWEJpdE1hdHJpeC4KKyAqLworCitAaW50ZXJmYWNlIFpYRUFOOFdyaXRlciA6IFpYVVBDRUFOV3JpdGVyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYRUFOOFdyaXRlci5tIGIvWlhpbmdPYmpDL29uZWQvWlhFQU44V3JpdGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4OTk0YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYRUFOOFdyaXRlci5tCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQmFyY29kZUZvcm1hdC5oIgorI2ltcG9ydCAiWlhFQU44V3JpdGVyLmgiCisjaW1wb3J0ICJaWFVQQ0VBTlJlYWRlci5oIgorCitpbnQgY29uc3QgRUFOOGNvZGVXaWR0aCA9IDMgKyAoNyAqIDQpICsgNSArICg3ICogNCkgKyAzOworCitAaW1wbGVtZW50YXRpb24gWlhFQU44V3JpdGVyCisKKy0gKFpYQml0TWF0cml4ICopZW5jb2RlOihOU1N0cmluZyAqKWNvbnRlbnRzIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdCB3aWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodCBoaW50czooWlhFbmNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKGZvcm1hdCAhPSBrQmFyY29kZUZvcm1hdEVhbjgpIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiQ2FuIG9ubHkgZW5jb2RlIEVBTl84Il07CisgIH0KKyAgcmV0dXJuIFtzdXBlciBlbmNvZGU6Y29udGVudHMgZm9ybWF0OmZvcm1hdCB3aWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0IGhpbnRzOmhpbnRzIGVycm9yOmVycm9yXTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgYnl0ZSBhcnJheSBvZiBob3Jpem9udGFsIHBpeGVscyAoRkFMU0UgPSB3aGl0ZSwgVFJVRSA9IGJsYWNrKQorICovCistIChCT09MICopZW5jb2RlOihOU1N0cmluZyAqKWNvbnRlbnRzIGxlbmd0aDooaW50ICopcExlbmd0aCB7CisgIGlmIChbY29udGVudHMgbGVuZ3RoXSAhPSA4KSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIlJlcXVlc3RlZCBjb250ZW50cyBzaG91bGQgYmUgOCBkaWdpdHMgbG9uZywgYnV0IGdvdCAlZCIsIChpbnQpW2NvbnRlbnRzIGxlbmd0aF1dOworICB9CisKKyAgaWYgKHBMZW5ndGgpICpwTGVuZ3RoID0gRUFOOGNvZGVXaWR0aDsKKyAgQk9PTCAqcmVzdWx0ID0gKEJPT0wgKiltYWxsb2MoRUFOOGNvZGVXaWR0aCAqIHNpemVvZihCT09MKSk7CisgIG1lbXNldChyZXN1bHQsIDAsIEVBTjhjb2RlV2lkdGggKiBzaXplb2YoaW50OF90KSk7CisgIGludCBwb3MgPSAwOworCisgIHBvcyArPSBbc3VwZXIgYXBwZW5kUGF0dGVybjpyZXN1bHQgcG9zOnBvcyBwYXR0ZXJuOihpbnQgKilTVEFSVF9FTkRfUEFUVEVSTiBwYXR0ZXJuTGVuOlNUQVJUX0VORF9QQVRURVJOX0xFTiBzdGFydENvbG9yOlRSVUVdOworCisgIGZvciAoaW50IGkgPSAwOyBpIDw9IDM7IGkrKykgeworICAgIGludCBkaWdpdCA9IFtbY29udGVudHMgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKGksIDEpXSBpbnRWYWx1ZV07CisgICAgcG9zICs9IFtzdXBlciBhcHBlbmRQYXR0ZXJuOnJlc3VsdCBwb3M6cG9zIHBhdHRlcm46KGludCAqKUxfUEFUVEVSTlNbZGlnaXRdIHBhdHRlcm5MZW46TF9QQVRURVJOU19TVUJfTEVOIHN0YXJ0Q29sb3I6RkFMU0VdOworICB9CisKKyAgcG9zICs9IFtzdXBlciBhcHBlbmRQYXR0ZXJuOnJlc3VsdCBwb3M6cG9zIHBhdHRlcm46KGludCAqKU1JRERMRV9QQVRURVJOIHBhdHRlcm5MZW46TUlERExFX1BBVFRFUk5fTEVOIHN0YXJ0Q29sb3I6RkFMU0VdOworCisgIGZvciAoaW50IGkgPSA0OyBpIDw9IDc7IGkrKykgeworICAgIGludCBkaWdpdCA9IFtbY29udGVudHMgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKGksIDEpXSBpbnRWYWx1ZV07CisgICAgcG9zICs9IFtzdXBlciBhcHBlbmRQYXR0ZXJuOnJlc3VsdCBwb3M6cG9zIHBhdHRlcm46KGludCAqKUxfUEFUVEVSTlNbZGlnaXRdIHBhdHRlcm5MZW46TF9QQVRURVJOU19TVUJfTEVOIHN0YXJ0Q29sb3I6VFJVRV07CisgIH0KKworICBbc3VwZXIgYXBwZW5kUGF0dGVybjpyZXN1bHQgcG9zOnBvcyBwYXR0ZXJuOihpbnQgKilTVEFSVF9FTkRfUEFUVEVSTiBwYXR0ZXJuTGVuOlNUQVJUX0VORF9QQVRURVJOX0xFTiBzdGFydENvbG9yOlRSVUVdOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5oIGIvWlhpbmdPYmpDL29uZWQvWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3MGRmYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogUmVjb3JkcyBFQU4gcHJlZml4IHRvIEdTMSBNZW1iZXIgT3JnYW5pemF0aW9uLCB3aGVyZSB0aGUgbWVtYmVyIG9yZ2FuaXphdGlvbgorICogY29ycmVsYXRlcyBzdHJvbmdseSB3aXRoIGEgY291bnRyeS4gVGhpcyBpcyBhbiBpbXBlcmZlY3QgbWVhbnMgb2YgaWRlbnRpZnlpbmcKKyAqIGEgY291bnRyeSBvZiBvcmlnaW4gYnkgRUFOLTEzIGJhcmNvZGUgdmFsdWUuIFNlZQorICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX0dTMV9jb3VudHJ5X2NvZGVzCisgKi8KKworQGludGVyZmFjZSBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQgOiBOU09iamVjdAorCistIChOU1N0cmluZyAqKWxvb2t1cENvdW50cnlJZGVudGlmaWVyOihOU1N0cmluZyAqKXByb2R1Y3RDb2RlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQubSBiL1pYaW5nT2JqQy9vbmVkL1pYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjM2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQubQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0LmgiCisKK0BpbnRlcmZhY2UgWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0ICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TTXV0YWJsZUFycmF5ICpjb3VudHJ5SWRlbnRpZmllcnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU011dGFibGVBcnJheSAqcmFuZ2VzOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQKKworLSAoaWQpaW5pdCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3JhbmdlcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgX2NvdW50cnlJZGVudGlmaWVycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNTdHJpbmcgKilsb29rdXBDb3VudHJ5SWRlbnRpZmllcjooTlNTdHJpbmcgKilwcm9kdWN0Q29kZSB7CisgIFtzZWxmIGluaXRJZk5lZWRlZF07CisgIAorICBpbnQgcHJlZml4ID0gW1twcm9kdWN0Q29kZSBzdWJzdHJpbmdUb0luZGV4OjNdIGludFZhbHVlXTsKKyAgTlNVSW50ZWdlciBtYXggPSBzZWxmLnJhbmdlcy5jb3VudDsKKworICBmb3IgKGludCBpID0gMDsgaSA8IG1heDsgaSsrKSB7CisgICAgTlNBcnJheSAqcmFuZ2UgPSBzZWxmLnJhbmdlc1tpXTsKKyAgICBpbnQgc3RhcnQgPSBbcmFuZ2VbMF0gaW50VmFsdWVdOworICAgIGlmIChwcmVmaXggPCBzdGFydCkgeworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgaW50IGVuZCA9IFtyYW5nZSBjb3VudF0gPT0gMSA/IHN0YXJ0IDogW3JhbmdlWzFdIGludFZhbHVlXTsKKyAgICBpZiAocHJlZml4IDw9IGVuZCkgeworICAgICAgcmV0dXJuIHNlbGYuY291bnRyeUlkZW50aWZpZXJzW2ldOworICAgIH0KKyAgfQorCisgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpYWRkOihOU0FycmF5ICopcmFuZ2UgaWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIHsKKyAgW3NlbGYucmFuZ2VzIGFkZE9iamVjdDpyYW5nZV07CisgIFtzZWxmLmNvdW50cnlJZGVudGlmaWVycyBhZGRPYmplY3Q6aWRlbnRpZmllcl07Cit9CisKKy0gKHZvaWQpaW5pdElmTmVlZGVkIHsKKyAgQHN5bmNocm9uaXplZChzZWxmLnJhbmdlcykgeworICAgIGlmIChbc2VsZi5yYW5nZXMgY291bnRdID4gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFtzZWxmIGFkZDpAW0AwLCBAMTldIGlkZW50aWZpZXI6QCJVUy9DQSJdOworICAgIFtzZWxmIGFkZDpAW0AzMCwgQDM5XSBpZGVudGlmaWVyOkAiVVMiXTsKKyAgICBbc2VsZiBhZGQ6QFtANjAsIEAxMzldIGlkZW50aWZpZXI6QCJVUy9DQSJdOworICAgIFtzZWxmIGFkZDpAW0AzMDAsIEAzNzldIGlkZW50aWZpZXI6QCJGUiJdOworICAgIFtzZWxmIGFkZDpAW0AzODBdIGlkZW50aWZpZXI6QCJCRyJdOworICAgIFtzZWxmIGFkZDpAW0AzODNdIGlkZW50aWZpZXI6QCJTSSJdOworICAgIFtzZWxmIGFkZDpAW0AzODVdIGlkZW50aWZpZXI6QCJIUiJdOworICAgIFtzZWxmIGFkZDpAW0AzODddIGlkZW50aWZpZXI6QCJCQSJdOworICAgIFtzZWxmIGFkZDpAW0A0MDAsIEA0NDBdIGlkZW50aWZpZXI6QCJERSJdOworICAgIFtzZWxmIGFkZDpAW0A0NTAsIEA0NTldIGlkZW50aWZpZXI6QCJKUCJdOworICAgIFtzZWxmIGFkZDpAW0A0NjAsIEA0NjldIGlkZW50aWZpZXI6QCJSVSJdOworICAgIFtzZWxmIGFkZDpAW0A0NzFdIGlkZW50aWZpZXI6QCJUVyJdOworICAgIFtzZWxmIGFkZDpAW0A0NzRdIGlkZW50aWZpZXI6QCJFRSJdOworICAgIFtzZWxmIGFkZDpAW0A0NzVdIGlkZW50aWZpZXI6QCJMViJdOworICAgIFtzZWxmIGFkZDpAW0A0NzZdIGlkZW50aWZpZXI6QCJBWiJdOworICAgIFtzZWxmIGFkZDpAW0A0NzddIGlkZW50aWZpZXI6QCJMVCJdOworICAgIFtzZWxmIGFkZDpAW0A0NzhdIGlkZW50aWZpZXI6QCJVWiJdOworICAgIFtzZWxmIGFkZDpAW0A0NzldIGlkZW50aWZpZXI6QCJMSyJdOworICAgIFtzZWxmIGFkZDpAW0A0ODBdIGlkZW50aWZpZXI6QCJQSCJdOworICAgIFtzZWxmIGFkZDpAW0A0ODFdIGlkZW50aWZpZXI6QCJCWSJdOworICAgIFtzZWxmIGFkZDpAW0A0ODJdIGlkZW50aWZpZXI6QCJVQSJdOworICAgIFtzZWxmIGFkZDpAW0A0ODRdIGlkZW50aWZpZXI6QCJNRCJdOworICAgIFtzZWxmIGFkZDpAW0A0ODVdIGlkZW50aWZpZXI6QCJBTSJdOworICAgIFtzZWxmIGFkZDpAW0A0ODZdIGlkZW50aWZpZXI6QCJHRSJdOworICAgIFtzZWxmIGFkZDpAW0A0ODddIGlkZW50aWZpZXI6QCJLWiJdOworICAgIFtzZWxmIGFkZDpAW0A0ODldIGlkZW50aWZpZXI6QCJISyJdOworICAgIFtzZWxmIGFkZDpAW0A0OTAsIEA0OTldIGlkZW50aWZpZXI6QCJKUCJdOworICAgIFtzZWxmIGFkZDpAW0A1MDAsIEA1MDldIGlkZW50aWZpZXI6QCJHQiJdOworICAgIFtzZWxmIGFkZDpAW0A1MjBdIGlkZW50aWZpZXI6QCJHUiJdOworICAgIFtzZWxmIGFkZDpAW0A1MjhdIGlkZW50aWZpZXI6QCJMQiJdOworICAgIFtzZWxmIGFkZDpAW0A1MjldIGlkZW50aWZpZXI6QCJDWSJdOworICAgIFtzZWxmIGFkZDpAW0A1MzFdIGlkZW50aWZpZXI6QCJNSyJdOworICAgIFtzZWxmIGFkZDpAW0A1MzVdIGlkZW50aWZpZXI6QCJNVCJdOworICAgIFtzZWxmIGFkZDpAW0A1MzldIGlkZW50aWZpZXI6QCJJRSJdOworICAgIFtzZWxmIGFkZDpAW0A1NDAsIEA1NDldIGlkZW50aWZpZXI6QCJCRS9MVSJdOworICAgIFtzZWxmIGFkZDpAW0A1NjBdIGlkZW50aWZpZXI6QCJQVCJdOworICAgIFtzZWxmIGFkZDpAW0A1NjldIGlkZW50aWZpZXI6QCJJUyJdOworICAgIFtzZWxmIGFkZDpAW0A1NzAsIEA1NzldIGlkZW50aWZpZXI6QCJESyJdOworICAgIFtzZWxmIGFkZDpAW0A1OTBdIGlkZW50aWZpZXI6QCJQTCJdOworICAgIFtzZWxmIGFkZDpAW0A1OTRdIGlkZW50aWZpZXI6QCJSTyJdOworICAgIFtzZWxmIGFkZDpAW0A1OTldIGlkZW50aWZpZXI6QCJIVSJdOworICAgIFtzZWxmIGFkZDpAW0A2MDAsIEA2MDFdIGlkZW50aWZpZXI6QCJaQSJdOworICAgIFtzZWxmIGFkZDpAW0A2MDNdIGlkZW50aWZpZXI6QCJHSCJdOworICAgIFtzZWxmIGFkZDpAW0A2MDhdIGlkZW50aWZpZXI6QCJCSCJdOworICAgIFtzZWxmIGFkZDpAW0A2MDldIGlkZW50aWZpZXI6QCJNVSJdOworICAgIFtzZWxmIGFkZDpAW0A2MTFdIGlkZW50aWZpZXI6QCJNQSJdOworICAgIFtzZWxmIGFkZDpAW0A2MTNdIGlkZW50aWZpZXI6QCJEWiJdOworICAgIFtzZWxmIGFkZDpAW0A2MTZdIGlkZW50aWZpZXI6QCJLRSJdOworICAgIFtzZWxmIGFkZDpAW0A2MThdIGlkZW50aWZpZXI6QCJDSSJdOworICAgIFtzZWxmIGFkZDpAW0A2MTldIGlkZW50aWZpZXI6QCJUTiJdOworICAgIFtzZWxmIGFkZDpAW0A2MjFdIGlkZW50aWZpZXI6QCJTWSJdOworICAgIFtzZWxmIGFkZDpAW0A2MjJdIGlkZW50aWZpZXI6QCJFRyJdOworICAgIFtzZWxmIGFkZDpAW0A2MjRdIGlkZW50aWZpZXI6QCJMWSJdOworICAgIFtzZWxmIGFkZDpAW0A2MjVdIGlkZW50aWZpZXI6QCJKTyJdOworICAgIFtzZWxmIGFkZDpAW0A2MjZdIGlkZW50aWZpZXI6QCJJUiJdOworICAgIFtzZWxmIGFkZDpAW0A2MjddIGlkZW50aWZpZXI6QCJLVyJdOworICAgIFtzZWxmIGFkZDpAW0A2MjhdIGlkZW50aWZpZXI6QCJTQSJdOworICAgIFtzZWxmIGFkZDpAW0A2MjldIGlkZW50aWZpZXI6QCJBRSJdOworICAgIFtzZWxmIGFkZDpAW0A2NDAsIEA2NDldIGlkZW50aWZpZXI6QCJGSSJdOworICAgIFtzZWxmIGFkZDpAW0A2OTAsIEA2OTVdIGlkZW50aWZpZXI6QCJDTiJdOworICAgIFtzZWxmIGFkZDpAW0A3MDAsIEA3MDldIGlkZW50aWZpZXI6QCJOTyJdOworICAgIFtzZWxmIGFkZDpAW0A3MjldIGlkZW50aWZpZXI6QCJJTCJdOworICAgIFtzZWxmIGFkZDpAW0A3MzAsIEA3MzldIGlkZW50aWZpZXI6QCJTRSJdOworICAgIFtzZWxmIGFkZDpAW0A3NDBdIGlkZW50aWZpZXI6QCJHVCJdOworICAgIFtzZWxmIGFkZDpAW0A3NDFdIGlkZW50aWZpZXI6QCJTViJdOworICAgIFtzZWxmIGFkZDpAW0A3NDJdIGlkZW50aWZpZXI6QCJITiJdOworICAgIFtzZWxmIGFkZDpAW0A3NDNdIGlkZW50aWZpZXI6QCJOSSJdOworICAgIFtzZWxmIGFkZDpAW0A3NDRdIGlkZW50aWZpZXI6QCJDUiJdOworICAgIFtzZWxmIGFkZDpAW0A3NDVdIGlkZW50aWZpZXI6QCJQQSJdOworICAgIFtzZWxmIGFkZDpAW0A3NDZdIGlkZW50aWZpZXI6QCJETyJdOworICAgIFtzZWxmIGFkZDpAW0A3NTBdIGlkZW50aWZpZXI6QCJNWCJdOworICAgIFtzZWxmIGFkZDpAW0A3NTQsIEA3NTVdIGlkZW50aWZpZXI6QCJDQSJdOworICAgIFtzZWxmIGFkZDpAW0A3NTldIGlkZW50aWZpZXI6QCJWRSJdOworICAgIFtzZWxmIGFkZDpAW0A3NjAsIEA3NjldIGlkZW50aWZpZXI6QCJDSCJdOworICAgIFtzZWxmIGFkZDpAW0A3NzBdIGlkZW50aWZpZXI6QCJDTyJdOworICAgIFtzZWxmIGFkZDpAW0A3NzNdIGlkZW50aWZpZXI6QCJVWSJdOworICAgIFtzZWxmIGFkZDpAW0A3NzVdIGlkZW50aWZpZXI6QCJQRSJdOworICAgIFtzZWxmIGFkZDpAW0A3NzddIGlkZW50aWZpZXI6QCJCTyJdOworICAgIFtzZWxmIGFkZDpAW0A3NzldIGlkZW50aWZpZXI6QCJBUiJdOworICAgIFtzZWxmIGFkZDpAW0A3ODBdIGlkZW50aWZpZXI6QCJDTCJdOworICAgIFtzZWxmIGFkZDpAW0A3ODRdIGlkZW50aWZpZXI6QCJQWSJdOworICAgIFtzZWxmIGFkZDpAW0A3ODVdIGlkZW50aWZpZXI6QCJQRSJdOworICAgIFtzZWxmIGFkZDpAW0A3ODZdIGlkZW50aWZpZXI6QCJFQyJdOworICAgIFtzZWxmIGFkZDpAW0A3ODksIEA3OTBdIGlkZW50aWZpZXI6QCJCUiJdOworICAgIFtzZWxmIGFkZDpAW0A4MDAsIEA4MzldIGlkZW50aWZpZXI6QCJJVCJdOworICAgIFtzZWxmIGFkZDpAW0A4NDAsIEA4NDldIGlkZW50aWZpZXI6QCJFUyJdOworICAgIFtzZWxmIGFkZDpAW0A4NTBdIGlkZW50aWZpZXI6QCJDVSJdOworICAgIFtzZWxmIGFkZDpAW0A4NThdIGlkZW50aWZpZXI6QCJTSyJdOworICAgIFtzZWxmIGFkZDpAW0A4NTldIGlkZW50aWZpZXI6QCJDWiJdOworICAgIFtzZWxmIGFkZDpAW0A4NjBdIGlkZW50aWZpZXI6QCJZVSJdOworICAgIFtzZWxmIGFkZDpAW0A4NjVdIGlkZW50aWZpZXI6QCJNTiJdOworICAgIFtzZWxmIGFkZDpAW0A4NjddIGlkZW50aWZpZXI6QCJLUCJdOworICAgIFtzZWxmIGFkZDpAW0A4NjgsIEA4NjldIGlkZW50aWZpZXI6QCJUUiJdOworICAgIFtzZWxmIGFkZDpAW0A4NzAsIEA4NzldIGlkZW50aWZpZXI6QCJOTCJdOworICAgIFtzZWxmIGFkZDpAW0A4ODBdIGlkZW50aWZpZXI6QCJLUiJdOworICAgIFtzZWxmIGFkZDpAW0A4ODVdIGlkZW50aWZpZXI6QCJUSCJdOworICAgIFtzZWxmIGFkZDpAW0A4ODhdIGlkZW50aWZpZXI6QCJTRyJdOworICAgIFtzZWxmIGFkZDpAW0A4OTBdIGlkZW50aWZpZXI6QCJJTiJdOworICAgIFtzZWxmIGFkZDpAW0A4OTNdIGlkZW50aWZpZXI6QCJWTiJdOworICAgIFtzZWxmIGFkZDpAW0A4OTZdIGlkZW50aWZpZXI6QCJQSyJdOworICAgIFtzZWxmIGFkZDpAW0A4OTldIGlkZW50aWZpZXI6QCJJRCJdOworICAgIFtzZWxmIGFkZDpAW0A5MDAsIEA5MTldIGlkZW50aWZpZXI6QCJBVCJdOworICAgIFtzZWxmIGFkZDpAW0A5MzAsIEA5MzldIGlkZW50aWZpZXI6QCJBVSJdOworICAgIFtzZWxmIGFkZDpAW0A5NDAsIEA5NDldIGlkZW50aWZpZXI6QCJBWiJdOworICAgIFtzZWxmIGFkZDpAW0A5NTVdIGlkZW50aWZpZXI6QCJNWSJdOworICAgIFtzZWxmIGFkZDpAW0A5NThdIGlkZW50aWZpZXI6QCJNTyJdOworICB9Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYSVRGUmVhZGVyLmggYi9aWGluZ09iakMvb25lZC9aWElURlJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYTkwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWElURlJlYWRlci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYT25lRFJlYWRlci5oIgorCisvKioKKyAqIEltcGxlbWVudHMgZGVjb2Rpbmcgb2YgdGhlIElURiBmb3JtYXQsIG9yIEludGVybGVhdmVkIFR3byBvZiBGaXZlLgorICogCisgKiBUaGlzIFJlYWRlciB3aWxsIHNjYW4gSVRGIGJhcmNvZGVzIG9mIGNlcnRhaW4gbGVuZ3RocyBvbmx5LgorICogQXQgdGhlIG1vbWVudCBpdCByZWFkcyBsZW5ndGggNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjQsIGFuZCA0NCBhcyB0aGVzZSBoYXZlIGFwcGVhcmVkICJpbiB0aGUgd2lsZCIuIE5vdCBhbGwKKyAqIGxlbmd0aHMgYXJlIHNjYW5uZWQsIGVzcGVjaWFsbHkgc2hvcnRlciBvbmVzLCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMuIFRoaXMgaW4gdHVybiBpcyBkdWUgdG8gYSBsYWNrIG9mCisgKiByZXF1aXJlZCBjaGVja3N1bSBmdW5jdGlvbi4KKyAqIAorICogVGhlIGNoZWNrc3VtIGlzIG9wdGlvbmFsIGFuZCBpcyBub3QgYXBwbGllZCBieSB0aGlzIFJlYWRlci4gVGhlIGNvbnN1bWVyIG9mIHRoZSBkZWNvZGVkCisgKiB2YWx1ZSB3aWxsIGhhdmUgdG8gYXBwbHkgYSBjaGVja3N1bSBpZiByZXF1aXJlZC4KKyAqIAorICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JbnRlcmxlYXZlZF8yX29mXzUgaXMgYSBncmVhdCByZWZlcmVuY2UgZm9yIEludGVybGVhdmVkIDIgb2YgNSBpbmZvcm1hdGlvbi4KKyAqLworCitleHRlcm4gY29uc3QgaW50IFBBVFRFUk5TX0xFTjsKK2V4dGVybiBjb25zdCBpbnQgUEFUVEVSTlNbXVs1XTsKKworQGNsYXNzIFpYUmVzdWx0OworCitAaW50ZXJmYWNlIFpYSVRGUmVhZGVyIDogWlhPbmVEUmVhZGVyCisKKy0gKE5TQXJyYXkgKilkZWNvZGVTdGFydDooWlhCaXRBcnJheSAqKXJvdzsKKy0gKE5TQXJyYXkgKilkZWNvZGVFbmQ6KFpYQml0QXJyYXkgKilyb3c7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYSVRGUmVhZGVyLm0gYi9aWGluZ09iakMvb25lZC9aWElURlJlYWRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOGQ2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWElURlJlYWRlci5tCkBAIC0wLDAgKzEsMzE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisjaW1wb3J0ICJaWERlY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhJVEZSZWFkZXIuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisjaW1wb3J0ICJaWFJlc3VsdFBvaW50LmgiCisKK3N0YXRpYyBpbnQgTUFYX0FWR19WQVJJQU5DRTsKK3N0YXRpYyBpbnQgTUFYX0lORElWSURVQUxfVkFSSUFOQ0U7CisKK3N0YXRpYyBjb25zdCBpbnQgVyA9IDM7IC8vIFBpeGVsIHdpZHRoIG9mIGEgd2lkZSBsaW5lCitzdGF0aWMgY29uc3QgaW50IE4gPSAxOyAvLyBQaXhlbCB3aWR0aCBvZiBhIG5hcnJvdyBsaW5lCisKK2ludCBjb25zdCBERUZBVUxUX0FMTE9XRURfTEVOR1RIU1sxMV0gPSB7IDQ4LCA0NCwgMjQsIDIwLCAxOCwgMTYsIDE0LCAxMiwgMTAsIDgsIDYgfTsKKworLyoqCisgKiBTdGFydC9lbmQgZ3VhcmQgcGF0dGVybi4KKyAqIAorICogTm90ZTogVGhlIGVuZCBwYXR0ZXJuIGlzIHJldmVyc2VkIGJlY2F1c2UgdGhlIHJvdyBpcyByZXZlcnNlZCBiZWZvcmUKKyAqIHNlYXJjaGluZyBmb3IgdGhlIEVORF9QQVRURVJOCisgKi8KK2ludCBjb25zdCBJVEZfU1RBUlRfUEFUVEVSTls0XSA9IHtOLCBOLCBOLCBOfTsKK2ludCBjb25zdCBFTkRfUEFUVEVSTl9SRVZFUlNFRFszXSA9IHtOLCBOLCBXfTsKKworLyoqCisgKiBQYXR0ZXJucyBvZiBXaWRlIC8gTmFycm93IGxpbmVzIHRvIGluZGljYXRlIGVhY2ggZGlnaXQKKyAqLworY29uc3QgaW50IFBBVFRFUk5TX0xFTiA9IDEwOworY29uc3QgaW50IFBBVFRFUk5TW1BBVFRFUk5TX0xFTl1bNV0gPSB7CisgIHtOLCBOLCBXLCBXLCBOfSwgLy8gMAorICB7VywgTiwgTiwgTiwgV30sIC8vIDEKKyAge04sIFcsIE4sIE4sIFd9LCAvLyAyCisgIHtXLCBXLCBOLCBOLCBOfSwgLy8gMworICB7TiwgTiwgVywgTiwgV30sIC8vIDQKKyAge1csIE4sIFcsIE4sIE59LCAvLyA1CisgIHtOLCBXLCBXLCBOLCBOfSwgLy8gNgorICB7TiwgTiwgTiwgVywgV30sIC8vIDcKKyAge1csIE4sIE4sIFcsIE59LCAvLyA4CisgIHtOLCBXLCBOLCBXLCBOfSAgLy8gOQorfTsKKworQGludGVyZmFjZSBaWElURlJlYWRlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbmFycm93TGluZVdpZHRoOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWElURlJlYWRlcgorCisrICh2b2lkKWluaXRpYWxpemUgeworICBNQVhfQVZHX1ZBUklBTkNFID0gKGludCkoUEFUVEVSTl9NQVRDSF9SRVNVTFRfU0NBTEVfRkFDVE9SICogMC40MmYpOworICBNQVhfSU5ESVZJRFVBTF9WQVJJQU5DRSA9IChpbnQpKFBBVFRFUk5fTUFUQ0hfUkVTVUxUX1NDQUxFX0ZBQ1RPUiAqIDAuOGYpOworfQorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfbmFycm93TGluZVdpZHRoID0gLTE7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoWlhSZXN1bHQgKilkZWNvZGVSb3c6KGludClyb3dOdW1iZXIgcm93OihaWEJpdEFycmF5ICopcm93IGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBOU0FycmF5ICpzdGFydFJhbmdlID0gW3NlbGYgZGVjb2RlU3RhcnQ6cm93XTsKKyAgTlNBcnJheSAqZW5kUmFuZ2UgPSBbc2VsZiBkZWNvZGVFbmQ6cm93XTsKKyAgaWYgKCFzdGFydFJhbmdlIHx8ICFlbmRSYW5nZSkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0U3RyaW5nID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6MjBdOworICBpZiAoIVtzZWxmIGRlY29kZU1pZGRsZTpyb3cgcGF5bG9hZFN0YXJ0OltzdGFydFJhbmdlWzFdIGludFZhbHVlXSBwYXlsb2FkRW5kOltlbmRSYW5nZVswXSBpbnRWYWx1ZV0gcmVzdWx0U3RyaW5nOnJlc3VsdFN0cmluZ10pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICBOU0FycmF5ICphbGxvd2VkTGVuZ3RocyA9IG5pbDsKKyAgaWYgKGhpbnRzICE9IG5pbCkgeworICAgIGFsbG93ZWRMZW5ndGhzID0gaGludHMuYWxsb3dlZExlbmd0aHM7CisgIH0KKyAgaWYgKGFsbG93ZWRMZW5ndGhzID09IG5pbCkgeworICAgIE5TTXV0YWJsZUFycmF5ICp0ZW1wID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZihERUZBVUxUX0FMTE9XRURfTEVOR1RIUykgLyBzaXplb2YoaW50KTsgaSsrKSB7CisgICAgICBbdGVtcCBhZGRPYmplY3Q6QChERUZBVUxUX0FMTE9XRURfTEVOR1RIU1tpXSldOworICAgIH0KKyAgICBhbGxvd2VkTGVuZ3RocyA9IFtOU0FycmF5IGFycmF5V2l0aEFycmF5OnRlbXBdOworICB9CisKKyAgTlNVSW50ZWdlciBsZW5ndGggPSBbcmVzdWx0U3RyaW5nIGxlbmd0aF07CisgIEJPT0wgbGVuZ3RoT0sgPSBOTzsKKyAgZm9yIChOU051bWJlciAqaSBpbiBhbGxvd2VkTGVuZ3RocykgeworICAgIGlmIChsZW5ndGggPT0gW2kgaW50VmFsdWVdKSB7CisgICAgICBsZW5ndGhPSyA9IFlFUzsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZiAoIWxlbmd0aE9LKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBGb3JtYXRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIHJldHVybiBbWlhSZXN1bHQgcmVzdWx0V2l0aFRleHQ6cmVzdWx0U3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Qnl0ZXM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6MAorICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UG9pbnRzOkBbW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6W3N0YXJ0UmFuZ2VbMV0gZmxvYXRWYWx1ZV0geTooZmxvYXQpcm93TnVtYmVyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOltlbmRSYW5nZVswXSBmbG9hdFZhbHVlXSB5OihmbG9hdClyb3dOdW1iZXJdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OmtCYXJjb2RlRm9ybWF0SVRGXTsKK30KKworCistIChCT09MKWRlY29kZU1pZGRsZTooWlhCaXRBcnJheSAqKXJvdyBwYXlsb2FkU3RhcnQ6KGludClwYXlsb2FkU3RhcnQgcGF5bG9hZEVuZDooaW50KXBheWxvYWRFbmQgcmVzdWx0U3RyaW5nOihOU011dGFibGVTdHJpbmcgKilyZXN1bHRTdHJpbmcgeworICBjb25zdCBpbnQgY291bnRlckRpZ2l0UGFpckxlbiA9IDEwOworICBpbnQgY291bnRlckRpZ2l0UGFpcltjb3VudGVyRGlnaXRQYWlyTGVuXTsKKyAgbWVtc2V0KGNvdW50ZXJEaWdpdFBhaXIsIDAsIGNvdW50ZXJEaWdpdFBhaXJMZW4gKiBzaXplb2YoaW50KSk7CisKKyAgY29uc3QgaW50IGNvdW50ZXJCbGFja0xlbiA9IDU7CisgIGludCBjb3VudGVyQmxhY2tbY291bnRlckJsYWNrTGVuXTsKKyAgbWVtc2V0KGNvdW50ZXJCbGFjaywgMCwgY291bnRlckJsYWNrTGVuICogc2l6ZW9mKGludCkpOworCisgIGNvbnN0IGludCBjb3VudGVyV2hpdGVMZW4gPSA1OworICBpbnQgY291bnRlcldoaXRlW2NvdW50ZXJXaGl0ZUxlbl07CisgIG1lbXNldChjb3VudGVyV2hpdGUsIDAsIGNvdW50ZXJXaGl0ZUxlbiAqIHNpemVvZihpbnQpKTsKKworICB3aGlsZSAocGF5bG9hZFN0YXJ0IDwgcGF5bG9hZEVuZCkgeworICAgIGlmICghW1pYT25lRFJlYWRlciByZWNvcmRQYXR0ZXJuOnJvdyBzdGFydDpwYXlsb2FkU3RhcnQgY291bnRlcnM6Y291bnRlckRpZ2l0UGFpciBjb3VudGVyc1NpemU6Y291bnRlckRpZ2l0UGFpckxlbl0pIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICBmb3IgKGludCBrID0gMDsgayA8IDU7IGsrKykgeworICAgICAgaW50IHR3b0sgPSBrIDw8IDE7CisgICAgICBjb3VudGVyQmxhY2tba10gPSBjb3VudGVyRGlnaXRQYWlyW3R3b0tdOworICAgICAgY291bnRlcldoaXRlW2tdID0gY291bnRlckRpZ2l0UGFpclt0d29LICsgMV07CisgICAgfQorCisgICAgaW50IGJlc3RNYXRjaCA9IFtzZWxmIGRlY29kZURpZ2l0OmNvdW50ZXJCbGFjayBjb3VudGVyc1NpemU6Y291bnRlckJsYWNrTGVuXTsKKyAgICBpZiAoYmVzdE1hdGNoID09IC0xKSB7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIFtyZXN1bHRTdHJpbmcgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoJzAnICsgYmVzdE1hdGNoKV07CisgICAgYmVzdE1hdGNoID0gW3NlbGYgZGVjb2RlRGlnaXQ6Y291bnRlcldoaXRlIGNvdW50ZXJzU2l6ZTpjb3VudGVyV2hpdGVMZW5dOworICAgIGlmIChiZXN0TWF0Y2ggPT0gLTEpIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgW3Jlc3VsdFN0cmluZyBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSgnMCcgKyBiZXN0TWF0Y2gpXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnRlckRpZ2l0UGFpckxlbjsgaSsrKSB7CisgICAgICBwYXlsb2FkU3RhcnQgKz0gY291bnRlckRpZ2l0UGFpcltpXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFlFUzsKK30KKworCisvKioKKyAqIElkZW50aWZ5IHdoZXJlIHRoZSBzdGFydCBvZiB0aGUgbWlkZGxlIC8gcGF5bG9hZCBzZWN0aW9uIHN0YXJ0cy4KKyAqLworLSAoTlNBcnJheSAqKWRlY29kZVN0YXJ0OihaWEJpdEFycmF5ICopcm93IHsKKyAgaW50IGVuZFN0YXJ0ID0gW3NlbGYgc2tpcFdoaXRlU3BhY2U6cm93XTsKKyAgaWYgKGVuZFN0YXJ0ID09IC0xKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU0FycmF5ICpzdGFydFBhdHRlcm4gPSBbc2VsZiBmaW5kR3VhcmRQYXR0ZXJuOnJvdyByb3dPZmZzZXQ6ZW5kU3RhcnQgcGF0dGVybjooaW50ICopSVRGX1NUQVJUX1BBVFRFUk4gcGF0dGVybkxlbjpzaXplb2YoSVRGX1NUQVJUX1BBVFRFUk4pL3NpemVvZihpbnQpXTsKKyAgaWYgKCFzdGFydFBhdHRlcm4pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgc2VsZi5uYXJyb3dMaW5lV2lkdGggPSAoW3N0YXJ0UGF0dGVyblsxXSBpbnRWYWx1ZV0gLSBbc3RhcnRQYXR0ZXJuWzBdIGludFZhbHVlXSkgPj4gMjsKKworICBpZiAoIVtzZWxmIHZhbGlkYXRlUXVpZXRab25lOnJvdyBzdGFydFBhdHRlcm46W3N0YXJ0UGF0dGVyblswXSBpbnRWYWx1ZV1dKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIHJldHVybiBzdGFydFBhdHRlcm47Cit9CisKKworLyoqCisgKiBUaGUgc3RhcnQgJiBlbmQgcGF0dGVybnMgbXVzdCBiZSBwcmUvcG9zdCBmaXhlZCBieSBhIHF1aWV0IHpvbmUuIFRoaXMKKyAqIHpvbmUgbXVzdCBiZSBhdCBsZWFzdCAxMCB0aW1lcyB0aGUgd2lkdGggb2YgYSBuYXJyb3cgbGluZS4gIFNjYW4gYmFjayB1bnRpbAorICogd2UgZWl0aGVyIGdldCB0byB0aGUgc3RhcnQgb2YgdGhlIGJhcmNvZGUgb3IgbWF0Y2ggdGhlIG5lY2Vzc2FyeSBudW1iZXIgb2YKKyAqIHF1aWV0IHpvbmUgcGl4ZWxzLgorICogCisgKiBOb3RlOiBJdHMgYXNzdW1lZCB0aGUgcm93IGlzIHJldmVyc2VkIHdoZW4gdXNpbmcgdGhpcyBtZXRob2QgdG8gZmluZAorICogcXVpZXQgem9uZSBhZnRlciB0aGUgZW5kIHBhdHRlcm4uCisgKiAKKyAqIHJlZjogaHR0cDovL3d3dy5iYXJjb2RlLTEubmV0L2kyNWNvZGUuaHRtbAorICovCistIChCT09MKXZhbGlkYXRlUXVpZXRab25lOihaWEJpdEFycmF5ICopcm93IHN0YXJ0UGF0dGVybjooaW50KXN0YXJ0UGF0dGVybiB7CisgIGludCBxdWlldENvdW50ID0gc2VsZi5uYXJyb3dMaW5lV2lkdGggKiAxMDsKKworICBmb3IgKGludCBpID0gc3RhcnRQYXR0ZXJuIC0gMTsgcXVpZXRDb3VudCA+IDAgJiYgaSA+PSAwOyBpLS0pIHsKKyAgICBpZiAoW3JvdyBnZXQ6aV0pIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBxdWlldENvdW50LS07CisgIH0KKyAgaWYgKHF1aWV0Q291bnQgIT0gMCkgeworICAgIHJldHVybiBOTzsKKyAgfQorICByZXR1cm4gWUVTOworfQorCisKKy8qKgorICogU2tpcCBhbGwgd2hpdGVzcGFjZSB1bnRpbCB3ZSBnZXQgdG8gdGhlIGZpcnN0IGJsYWNrIGxpbmUuCisgKi8KKy0gKGludClza2lwV2hpdGVTcGFjZTooWlhCaXRBcnJheSAqKXJvdyB7CisgIGludCB3aWR0aCA9IFtyb3cgc2l6ZV07CisgIGludCBlbmRTdGFydCA9IFtyb3cgbmV4dFNldDowXTsKKyAgaWYgKGVuZFN0YXJ0ID09IHdpZHRoKSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiBlbmRTdGFydDsKK30KKworCisvKioKKyAqIElkZW50aWZ5IHdoZXJlIHRoZSBlbmQgb2YgdGhlIG1pZGRsZSAvIHBheWxvYWQgc2VjdGlvbiBlbmRzLgorICovCistIChOU0FycmF5ICopZGVjb2RlRW5kOihaWEJpdEFycmF5ICopcm93IHsKKyAgW3JvdyByZXZlcnNlXTsKKworICBpbnQgZW5kU3RhcnQgPSBbc2VsZiBza2lwV2hpdGVTcGFjZTpyb3ddOworICBpZiAoZW5kU3RhcnQgPT0gLTEpIHsKKyAgICBbcm93IHJldmVyc2VdOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNNdXRhYmxlQXJyYXkgKmVuZFBhdHRlcm4gPSBbW3NlbGYgZmluZEd1YXJkUGF0dGVybjpyb3cgcm93T2Zmc2V0OmVuZFN0YXJ0IHBhdHRlcm46KGludCAqKUVORF9QQVRURVJOX1JFVkVSU0VEIHBhdHRlcm5MZW46c2l6ZW9mKEVORF9QQVRURVJOX1JFVkVSU0VEKS9zaXplb2YoaW50KV0gbXV0YWJsZUNvcHldOworICBpZiAoIWVuZFBhdHRlcm4pIHsKKyAgICBbcm93IHJldmVyc2VdOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgW3NlbGYgdmFsaWRhdGVRdWlldFpvbmU6cm93IHN0YXJ0UGF0dGVybjpbZW5kUGF0dGVyblswXSBpbnRWYWx1ZV1dOworICBpbnQgdGVtcCA9IFtlbmRQYXR0ZXJuWzBdIGludFZhbHVlXTsKKyAgZW5kUGF0dGVyblswXSA9IEAoW3JvdyBzaXplXSAtIFtlbmRQYXR0ZXJuWzFdIGludFZhbHVlXSk7CisgIGVuZFBhdHRlcm5bMV0gPSBAKFtyb3cgc2l6ZV0gLSB0ZW1wKTsKKyAgW3JvdyByZXZlcnNlXTsKKyAgcmV0dXJuIGVuZFBhdHRlcm47Cit9CisKKy0gKE5TQXJyYXkgKilmaW5kR3VhcmRQYXR0ZXJuOihaWEJpdEFycmF5ICopcm93IHJvd09mZnNldDooaW50KXJvd09mZnNldCBwYXR0ZXJuOihpbnRbXSlwYXR0ZXJuIHBhdHRlcm5MZW46KGludClwYXR0ZXJuTGVuIHsKKyAgaW50IHBhdHRlcm5MZW5ndGggPSBwYXR0ZXJuTGVuOworICBpbnQgY291bnRlcnNbcGF0dGVybkxlbmd0aF07CisgIG1lbXNldChjb3VudGVycywgMCwgcGF0dGVybkxlbmd0aCAqIHNpemVvZihpbnQpKTsKKyAgaW50IHdpZHRoID0gcm93LnNpemU7CisgIEJPT0wgaXNXaGl0ZSA9IE5POworCisgIGludCBjb3VudGVyUG9zaXRpb24gPSAwOworICBpbnQgcGF0dGVyblN0YXJ0ID0gcm93T2Zmc2V0OworICBmb3IgKGludCB4ID0gcm93T2Zmc2V0OyB4IDwgd2lkdGg7IHgrKykgeworICAgIGlmIChbcm93IGdldDp4XSBeIGlzV2hpdGUpIHsKKyAgICAgIGNvdW50ZXJzW2NvdW50ZXJQb3NpdGlvbl0rKzsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKGNvdW50ZXJQb3NpdGlvbiA9PSBwYXR0ZXJuTGVuZ3RoIC0gMSkgeworICAgICAgICBpZiAoW1pYT25lRFJlYWRlciBwYXR0ZXJuTWF0Y2hWYXJpYW5jZTpjb3VudGVycyBjb3VudGVyc1NpemU6cGF0dGVybkxlbmd0aCBwYXR0ZXJuOnBhdHRlcm4gbWF4SW5kaXZpZHVhbFZhcmlhbmNlOk1BWF9JTkRJVklEVUFMX1ZBUklBTkNFXSA8IE1BWF9BVkdfVkFSSUFOQ0UpIHsKKyAgICAgICAgICByZXR1cm4gQFtAKHBhdHRlcm5TdGFydCksIEAoeCldOworICAgICAgICB9CisgICAgICAgIHBhdHRlcm5TdGFydCArPSBjb3VudGVyc1swXSArIGNvdW50ZXJzWzFdOworICAgICAgICBmb3IgKGludCB5ID0gMjsgeSA8IHBhdHRlcm5MZW5ndGg7IHkrKykgeworICAgICAgICAgIGNvdW50ZXJzW3kgLSAyXSA9IGNvdW50ZXJzW3ldOworICAgICAgICB9CisgICAgICAgIGNvdW50ZXJzW3BhdHRlcm5MZW5ndGggLSAyXSA9IDA7CisgICAgICAgIGNvdW50ZXJzW3BhdHRlcm5MZW5ndGggLSAxXSA9IDA7CisgICAgICAgIGNvdW50ZXJQb3NpdGlvbi0tOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY291bnRlclBvc2l0aW9uKys7CisgICAgICB9CisgICAgICBjb3VudGVyc1tjb3VudGVyUG9zaXRpb25dID0gMTsKKyAgICAgIGlzV2hpdGUgPSAhaXNXaGl0ZTsKKyAgICB9CisgIH0KKworICByZXR1cm4gbmlsOworfQorCisvKioKKyAqIEF0dGVtcHRzIHRvIGRlY29kZSBhIHNlcXVlbmNlIG9mIElURiBibGFjay93aGl0ZSBsaW5lcyBpbnRvIHNpbmdsZQorICogZGlnaXQuCisgKi8KKy0gKGludClkZWNvZGVEaWdpdDooaW50W10pY291bnRlcnMgY291bnRlcnNTaXplOihpbnQpY291bnRlcnNTaXplIHsKKyAgaW50IGJlc3RWYXJpYW5jZSA9IE1BWF9BVkdfVkFSSUFOQ0U7CisgIGludCBiZXN0TWF0Y2ggPSAtMTsKKyAgaW50IG1heCA9IFBBVFRFUk5TX0xFTjsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXg7IGkrKykgeworICAgIGludCBwYXR0ZXJuW2NvdW50ZXJzU2l6ZV07CisgICAgZm9yKGludCBpbmQgPSAwOyBpbmQ8Y291bnRlcnNTaXplOyBpbmQrKyl7CisgICAgICBwYXR0ZXJuW2luZF0gPSBQQVRURVJOU1tpXVtpbmRdOworICAgIH0KKyAgICBpbnQgdmFyaWFuY2UgPSBbWlhPbmVEUmVhZGVyIHBhdHRlcm5NYXRjaFZhcmlhbmNlOmNvdW50ZXJzIGNvdW50ZXJzU2l6ZTpjb3VudGVyc1NpemUgcGF0dGVybjpwYXR0ZXJuIG1heEluZGl2aWR1YWxWYXJpYW5jZTpNQVhfSU5ESVZJRFVBTF9WQVJJQU5DRV07CisgICAgaWYgKHZhcmlhbmNlIDwgYmVzdFZhcmlhbmNlKSB7CisgICAgICBiZXN0VmFyaWFuY2UgPSB2YXJpYW5jZTsKKyAgICAgIGJlc3RNYXRjaCA9IGk7CisgICAgfQorICB9CisgIGlmIChiZXN0TWF0Y2ggPj0gMCkgeworICAgIHJldHVybiBiZXN0TWF0Y2g7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIC0xOworICB9Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYSVRGV3JpdGVyLmggYi9aWGluZ09iakMvb25lZC9aWElURldyaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZGIzMzAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWElURldyaXRlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLmgiCisKKy8qKgorICogVGhpcyBvYmplY3QgcmVuZGVycyBhIElURiBjb2RlIGFzIGEge0BsaW5rIEJpdE1hdHJpeH0uCisgKi8KKworQGludGVyZmFjZSBaWElURldyaXRlciA6IFpYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYSVRGV3JpdGVyLm0gYi9aWGluZ09iakMvb25lZC9aWElURldyaXRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMGE4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWElURldyaXRlci5tCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYSVRGUmVhZGVyLmgiCisjaW1wb3J0ICJaWElURldyaXRlci5oIgorCitjb25zdCBpbnQgSVRGX1dSSVRFUl9TVEFSVF9QQVRURVJOX0xFTiA9IDQ7Citjb25zdCBpbnQgSVRGX1dSSVRFUl9TVEFSVF9QQVRURVJOW0lURl9XUklURVJfU1RBUlRfUEFUVEVSTl9MRU5dID0gezEsIDEsIDEsIDF9OworCitjb25zdCBpbnQgSVRGX1dSSVRFUl9FTkRfUEFUVEVSTl9MRU4gPSAzOworY29uc3QgaW50IElURl9XUklURVJfRU5EX1BBVFRFUk5bSVRGX1dSSVRFUl9FTkRfUEFUVEVSTl9MRU5dID0gezMsIDEsIDF9OworCitAaW1wbGVtZW50YXRpb24gWlhJVEZXcml0ZXIKKworLSAoWlhCaXRNYXRyaXggKillbmNvZGU6KE5TU3RyaW5nICopY29udGVudHMgZm9ybWF0OihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0IHdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0IGhpbnRzOihaWEVuY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoZm9ybWF0ICE9IGtCYXJjb2RlRm9ybWF0SVRGKSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkNhbiBvbmx5IGVuY29kZSBJVEYiXTsKKyAgfQorCisgIHJldHVybiBbc3VwZXIgZW5jb2RlOmNvbnRlbnRzIGZvcm1hdDpmb3JtYXQgd2lkdGg6d2lkdGggaGVpZ2h0OmhlaWdodCBoaW50czpoaW50cyBlcnJvcjplcnJvcl07Cit9CisKKy0gKEJPT0wgKillbmNvZGU6KE5TU3RyaW5nICopY29udGVudHMgbGVuZ3RoOihpbnQgKilwTGVuZ3RoIHsKKyAgTlNVSW50ZWdlciBsZW5ndGggPSBbY29udGVudHMgbGVuZ3RoXTsKKyAgaWYgKGxlbmd0aCAlIDIgIT0gMCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBzaG91bGQgYmUgZXZlbiJdOworICB9CisgIGlmIChsZW5ndGggPiA4MCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJSZXF1ZXN0ZWQgY29udGVudHMgc2hvdWxkIGJlIGxlc3MgdGhhbiA4MCBkaWdpdHMgbG9uZywgYnV0IGdvdCAlbGQiLCAodW5zaWduZWQgbG9uZylsZW5ndGhdOworICB9CisKKyAgTlNVSW50ZWdlciByZXN1bHRMZW4gPSA5ICsgOSAqIGxlbmd0aDsKKyAgaWYgKHBMZW5ndGgpICpwTGVuZ3RoID0gKGludClyZXN1bHRMZW47CisgIEJPT0wgKnJlc3VsdCA9IChCT09MICopbWFsbG9jKHJlc3VsdExlbiAqIHNpemVvZihCT09MKSk7CisgIGludCBwb3MgPSBbc3VwZXIgYXBwZW5kUGF0dGVybjpyZXN1bHQgcG9zOjAgcGF0dGVybjooaW50ICopSVRGX1dSSVRFUl9TVEFSVF9QQVRURVJOIHBhdHRlcm5MZW46SVRGX1dSSVRFUl9TVEFSVF9QQVRURVJOX0xFTiBzdGFydENvbG9yOlRSVUVdOworICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAyKSB7CisgICAgaW50IG9uZSA9IFtbY29udGVudHMgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKGksIDEpXSBpbnRWYWx1ZV07CisgICAgaW50IHR3byA9IFtbY29udGVudHMgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKGkgKyAxLCAxKV0gaW50VmFsdWVdOworICAgIGNvbnN0IGludCBlbmNvZGluZ0xlbiA9IDE4OworICAgIGludCBlbmNvZGluZ1tlbmNvZGluZ0xlbl07CisgICAgbWVtc2V0KGVuY29kaW5nLCAwLCBlbmNvZGluZ0xlbiAqIHNpemVvZihpbnQpKTsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IDU7IGorKykgeworICAgICAgZW5jb2RpbmdbaiA8PCAxXSA9IFBBVFRFUk5TW29uZV1bal07CisgICAgICBlbmNvZGluZ1soaiA8PCAxKSArIDFdID0gUEFUVEVSTlNbdHdvXVtqXTsKKyAgICB9CisgICAgcG9zICs9IFtzdXBlciBhcHBlbmRQYXR0ZXJuOnJlc3VsdCBwb3M6cG9zIHBhdHRlcm46ZW5jb2RpbmcgcGF0dGVybkxlbjplbmNvZGluZ0xlbiBzdGFydENvbG9yOlRSVUVdOworICB9CisgIFtzdXBlciBhcHBlbmRQYXR0ZXJuOnJlc3VsdCBwb3M6cG9zIHBhdHRlcm46KGludCAqKUlURl9XUklURVJfRU5EX1BBVFRFUk4gcGF0dGVybkxlbjpJVEZfV1JJVEVSX0VORF9QQVRURVJOX0xFTiBzdGFydENvbG9yOlRSVUVdOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYTXVsdGlGb3JtYXRPbmVEUmVhZGVyLmggYi9aWGluZ09iakMvb25lZC9aWE11bHRpRm9ybWF0T25lRFJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYTRlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWE11bHRpRm9ybWF0T25lRFJlYWRlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYT25lRFJlYWRlci5oIgorCitAY2xhc3MgWlhEZWNvZGVIaW50czsKKworQGludGVyZmFjZSBaWE11bHRpRm9ybWF0T25lRFJlYWRlciA6IFpYT25lRFJlYWRlcgorCistIChpZClpbml0V2l0aEhpbnRzOihaWERlY29kZUhpbnRzICopaGludHM7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYTXVsdGlGb3JtYXRPbmVEUmVhZGVyLm0gYi9aWGluZ09iakMvb25lZC9aWE11bHRpRm9ybWF0T25lRFJlYWRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZjU5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWE11bHRpRm9ybWF0T25lRFJlYWRlci5tCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWENvZGFCYXJSZWFkZXIuaCIKKyNpbXBvcnQgIlpYQ29kZTEyOFJlYWRlci5oIgorI2ltcG9ydCAiWlhDb2RlMzlSZWFkZXIuaCIKKyNpbXBvcnQgIlpYQ29kZTkzUmVhZGVyLmgiCisjaW1wb3J0ICJaWERlY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhJVEZSZWFkZXIuaCIKKyNpbXBvcnQgIlpYTXVsdGlGb3JtYXRPbmVEUmVhZGVyLmgiCisjaW1wb3J0ICJaWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLmgiCisjaW1wb3J0ICJaWFJTUzE0UmVhZGVyLmgiCisjaW1wb3J0ICJaWFJTU0V4cGFuZGVkUmVhZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhNdWx0aUZvcm1hdE9uZURSZWFkZXIgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlQXJyYXkgKnJlYWRlcnM7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYTXVsdGlGb3JtYXRPbmVEUmVhZGVyCisKKy0gKGlkKWluaXRXaXRoSGludHM6KFpYRGVjb2RlSGludHMgKiloaW50cyB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgQk9PTCB1c2VDb2RlMzlDaGVja0RpZ2l0ID0gaGludHMgIT0gbmlsICYmIGhpbnRzLmFzc3VtZUNvZGUzOUNoZWNrRGlnaXQ7CisgICAgX3JlYWRlcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgIGlmIChoaW50cyAhPSBuaWwpIHsKKyAgICAgIGlmIChbaGludHMgY29udGFpbnNGb3JtYXQ6a0JhcmNvZGVGb3JtYXRFYW4xM10gfHwKKyAgICAgICAgICBbaGludHMgY29udGFpbnNGb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENBXSB8fAorICAgICAgICAgIFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdEVhbjhdIHx8CisgICAgICAgICAgW2hpbnRzIGNvbnRhaW5zRm9ybWF0OmtCYXJjb2RlRm9ybWF0VVBDRV0pIHsKKyAgICAgICAgW19yZWFkZXJzIGFkZE9iamVjdDpbW1pYTXVsdGlGb3JtYXRVUENFQU5SZWFkZXIgYWxsb2NdIGluaXRXaXRoSGludHM6aGludHNdXTsKKyAgICAgIH0KKworICAgICAgaWYgKFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdENvZGUzOV0pIHsKKyAgICAgICAgW19yZWFkZXJzIGFkZE9iamVjdDpbW1pYQ29kZTM5UmVhZGVyIGFsbG9jXSBpbml0VXNpbmdDaGVja0RpZ2l0OnVzZUNvZGUzOUNoZWNrRGlnaXRdXTsKKyAgICAgIH0KKworICAgICAgaWYgKFtoaW50cyBjb250YWluc0Zvcm1hdDprQmFyY29kZUZvcm1hdENvZGU5M10pIHsKKyAgICAgICAgW19yZWFkZXJzIGFkZE9iamVjdDpbW1pYQ29kZTkzUmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgICB9CisKKyAgICAgIGlmIChbaGludHMgY29udGFpbnNGb3JtYXQ6a0JhcmNvZGVGb3JtYXRDb2RlMTI4XSkgeworICAgICAgICBbX3JlYWRlcnMgYWRkT2JqZWN0OltbWlhDb2RlMTI4UmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgICB9CisKKyAgICAgIGlmIChbaGludHMgY29udGFpbnNGb3JtYXQ6a0JhcmNvZGVGb3JtYXRJVEZdKSB7CisgICAgICAgIFtfcmVhZGVycyBhZGRPYmplY3Q6W1taWElURlJlYWRlciBhbGxvY10gaW5pdF1dOworICAgICAgfQorCisgICAgICBpZiAoW2hpbnRzIGNvbnRhaW5zRm9ybWF0OmtCYXJjb2RlRm9ybWF0Q29kYWJhcl0pIHsKKyAgICAgICAgW19yZWFkZXJzIGFkZE9iamVjdDpbW1pYQ29kYUJhclJlYWRlciBhbGxvY10gaW5pdF1dOworICAgICAgfQorCisgICAgICBpZiAoW2hpbnRzIGNvbnRhaW5zRm9ybWF0OmtCYXJjb2RlRm9ybWF0UlNTMTRdKSB7CisgICAgICAgIFtfcmVhZGVycyBhZGRPYmplY3Q6W1taWFJTUzE0UmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgICB9CisKKyAgICAgIGlmIChbaGludHMgY29udGFpbnNGb3JtYXQ6a0JhcmNvZGVGb3JtYXRSU1NFeHBhbmRlZF0pIHsKKyAgICAgICAgW19yZWFkZXJzIGFkZE9iamVjdDpbW1pYUlNTRXhwYW5kZWRSZWFkZXIgYWxsb2NdIGluaXRdXTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoW19yZWFkZXJzIGNvdW50XSA9PSAwKSB7CisgICAgICBbX3JlYWRlcnMgYWRkT2JqZWN0OltbWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlciBhbGxvY10gaW5pdFdpdGhIaW50czpoaW50c11dOworICAgICAgW19yZWFkZXJzIGFkZE9iamVjdDpbW1pYQ29kZTM5UmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgICBbX3JlYWRlcnMgYWRkT2JqZWN0OltbWlhDb2RhQmFyUmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgICBbX3JlYWRlcnMgYWRkT2JqZWN0OltbWlhDb2RlOTNSZWFkZXIgYWxsb2NdIGluaXRdXTsKKyAgICAgIFtfcmVhZGVycyBhZGRPYmplY3Q6W1taWENvZGUxMjhSZWFkZXIgYWxsb2NdIGluaXRdXTsKKyAgICAgIFtfcmVhZGVycyBhZGRPYmplY3Q6W1taWElURlJlYWRlciBhbGxvY10gaW5pdF1dOworICAgICAgW19yZWFkZXJzIGFkZE9iamVjdDpbW1pYUlNTMTRSZWFkZXIgYWxsb2NdIGluaXRdXTsKKyAgICAgIFtfcmVhZGVycyBhZGRPYmplY3Q6W1taWFJTU0V4cGFuZGVkUmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlUm93OihpbnQpcm93TnVtYmVyIHJvdzooWlhCaXRBcnJheSAqKXJvdyBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgZm9yIChaWE9uZURSZWFkZXIgKnJlYWRlciBpbiBzZWxmLnJlYWRlcnMpIHsKKyAgICBaWFJlc3VsdCAqcmVzdWx0ID0gW3JlYWRlciBkZWNvZGVSb3c6cm93TnVtYmVyIHJvdzpyb3cgaGludHM6aGludHMgZXJyb3I6ZXJyb3JdOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9CisKKyAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClyZXNldCB7CisgIGZvciAoaWQ8WlhSZWFkZXI+IHJlYWRlciBpbiBzZWxmLnJlYWRlcnMpIHsKKyAgICBbcmVhZGVyIHJlc2V0XTsKKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLmggYi9aWGluZ09iakMvb25lZC9aWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzODVlNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYTXVsdGlGb3JtYXRVUENFQU5SZWFkZXIuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWE9uZURSZWFkZXIuaCIKKworLyoqCisgKiBBIHJlYWRlciB0aGF0IGNhbiByZWFkIGFsbCBhdmFpbGFibGUgVVBDL0VBTiBmb3JtYXRzLiBJZiBhIGNhbGxlciB3YW50cyB0byB0cnkgdG8KKyAqIHJlYWQgYWxsIHN1Y2ggZm9ybWF0cywgaXQgaXMgbW9zdCBlZmZpY2llbnQgdG8gdXNlIHRoaXMgaW1wbGVtZW50YXRpb24gcmF0aGVyIHRoYW4gaW52b2tlCisgKiBpbmRpdmlkdWFsIHJlYWRlcnMuCisgKi8KKworQGNsYXNzIFpYRGVjb2RlSGludHM7CisKK0BpbnRlcmZhY2UgWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlciA6IFpYT25lRFJlYWRlcgorCistIChpZClpbml0V2l0aEhpbnRzOihaWERlY29kZUhpbnRzICopaGludHM7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYTXVsdGlGb3JtYXRVUENFQU5SZWFkZXIubSBiL1pYaW5nT2JqQy9vbmVkL1pYTXVsdGlGb3JtYXRVUENFQU5SZWFkZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDJkNjMyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlci5tCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERlY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWEVBTjhSZWFkZXIuaCIKKyNpbXBvcnQgIlpYRUFOMTNSZWFkZXIuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWE11bHRpRm9ybWF0VVBDRUFOUmVhZGVyLmgiCisjaW1wb3J0ICJaWFJlYWRlci5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKyNpbXBvcnQgIlpYVVBDQVJlYWRlci5oIgorI2ltcG9ydCAiWlhVUENFUmVhZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU011dGFibGVBcnJheSAqcmVhZGVyczsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhNdWx0aUZvcm1hdFVQQ0VBTlJlYWRlcgorCistIChpZClpbml0V2l0aEhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9yZWFkZXJzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKworICAgIGlmIChoaW50cyAhPSBuaWwpIHsKKyAgICAgIGlmIChbaGludHMgY29udGFpbnNGb3JtYXQ6a0JhcmNvZGVGb3JtYXRFYW4xM10pIHsKKyAgICAgICAgW19yZWFkZXJzIGFkZE9iamVjdDpbW1pYRUFOMTNSZWFkZXIgYWxsb2NdIGluaXRdXTsKKyAgICAgIH0gZWxzZSBpZiAoW2hpbnRzIGNvbnRhaW5zRm9ybWF0OmtCYXJjb2RlRm9ybWF0VVBDQV0pIHsKKyAgICAgICAgW19yZWFkZXJzIGFkZE9iamVjdDpbW1pYVVBDQVJlYWRlciBhbGxvY10gaW5pdF1dOworICAgICAgfQorCisgICAgICBpZiAoW2hpbnRzIGNvbnRhaW5zRm9ybWF0OmtCYXJjb2RlRm9ybWF0RWFuOF0pIHsKKyAgICAgICAgW19yZWFkZXJzIGFkZE9iamVjdDpbW1pYRUFOOFJlYWRlciBhbGxvY10gaW5pdF1dOworICAgICAgfQorCisgICAgICBpZiAoW2hpbnRzIGNvbnRhaW5zRm9ybWF0OmtCYXJjb2RlRm9ybWF0VVBDRV0pIHsKKyAgICAgICAgW19yZWFkZXJzIGFkZE9iamVjdDpbW1pYVVBDRVJlYWRlciBhbGxvY10gaW5pdF1dOworICAgICAgfQorICAgIH0KKworICAgIGlmIChbX3JlYWRlcnMgY291bnRdID09IDApIHsKKyAgICAgIFtfcmVhZGVycyBhZGRPYmplY3Q6W1taWEVBTjEzUmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgICBbX3JlYWRlcnMgYWRkT2JqZWN0OltbWlhFQU44UmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgICBbX3JlYWRlcnMgYWRkT2JqZWN0OltbWlhVUENFUmVhZGVyIGFsbG9jXSBpbml0XV07CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlUm93OihpbnQpcm93TnVtYmVyIHJvdzooWlhCaXRBcnJheSAqKXJvdyBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgTlNSYW5nZSBzdGFydEd1YXJkUGF0dGVybiA9IFtaWFVQQ0VBTlJlYWRlciBmaW5kU3RhcnRHdWFyZFBhdHRlcm46cm93IGVycm9yOmVycm9yXTsKKyAgaWYgKHN0YXJ0R3VhcmRQYXR0ZXJuLmxvY2F0aW9uID09IE5TTm90Rm91bmQpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIGZvciAoWlhVUENFQU5SZWFkZXIgKnJlYWRlciBpbiBzZWxmLnJlYWRlcnMpIHsKKyAgICBaWFJlc3VsdCAqcmVzdWx0ID0gW3JlYWRlciBkZWNvZGVSb3c6cm93TnVtYmVyIHJvdzpyb3cgc3RhcnRHdWFyZFJhbmdlOnN0YXJ0R3VhcmRQYXR0ZXJuIGhpbnRzOmhpbnRzIGVycm9yOmVycm9yXTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLy8gU3BlY2lhbCBjYXNlOiBhIDEyLWRpZ2l0IGNvZGUgZW5jb2RlZCBpbiBVUEMtQSBpcyBpZGVudGljYWwgdG8gYSAiMCIKKyAgICAvLyBmb2xsb3dlZCBieSB0aG9zZSAxMiBkaWdpdHMgZW5jb2RlZCBhcyBFQU4tMTMuIEVhY2ggd2lsbCByZWNvZ25pemUgc3VjaCBhIGNvZGUsCisgICAgLy8gVVBDLUEgYXMgYSAxMi1kaWdpdCBzdHJpbmcgYW5kIEVBTi0xMyBhcyBhIDEzLWRpZ2l0IHN0cmluZyBzdGFydGluZyB3aXRoICIwIi4KKyAgICAvLyBJbmRpdmlkdWFsbHkgdGhlc2UgYXJlIGNvcnJlY3QgYW5kIHRoZWlyIHJlYWRlcnMgd2lsbCBib3RoIHJlYWQgc3VjaCBhIGNvZGUKKyAgICAvLyBhbmQgY29ycmVjdGx5IGNhbGwgaXQgRUFOLTEzLCBvciBVUEMtQSwgcmVzcGVjdGl2ZWx5LgorICAgIC8vCisgICAgLy8gSW4gdGhpcyBjYXNlLCBpZiB3ZSd2ZSBiZWVuIGxvb2tpbmcgZm9yIGJvdGggdHlwZXMsIHdlJ2QgbGlrZSB0byBjYWxsIGl0CisgICAgLy8gYSBVUEMtQSBjb2RlLiBCdXQgZm9yIGVmZmljaWVuY3kgd2Ugb25seSBydW4gdGhlIEVBTi0xMyBkZWNvZGVyIHRvIGFsc28gcmVhZAorICAgIC8vIFVQQy1BLiBTbyB3ZSBzcGVjaWFsIGNhc2UgaXQgaGVyZSwgYW5kIGNvbnZlcnQgYW4gRUFOLTEzIHJlc3VsdCB0byBhIFVQQy1BCisgICAgLy8gcmVzdWx0IGlmIGFwcHJvcHJpYXRlLgorICAgIC8vCisgICAgLy8gQnV0LCBkb24ndCByZXR1cm4gVVBDLUEgaWYgVVBDLUEgd2FzIG5vdCBhIHJlcXVlc3RlZCBmb3JtYXQhCisgICAgQk9PTCBlYW4xM01heUJlVVBDQSA9IGtCYXJjb2RlRm9ybWF0RWFuMTMgPT0gcmVzdWx0LmJhcmNvZGVGb3JtYXQgJiYgW3Jlc3VsdC50ZXh0IGNoYXJhY3RlckF0SW5kZXg6MF0gPT0gJzAnOworICAgIEJPT0wgY2FuUmV0dXJuVVBDQSA9IGhpbnRzID09IG5pbCB8fCBbaGludHMgbnVtYmVyT2ZQb3NzaWJsZUZvcm1hdHNdID09IDAgfHwgW2hpbnRzIGNvbnRhaW5zRm9ybWF0OmtCYXJjb2RlRm9ybWF0VVBDQV07CisgICAgaWYgKGVhbjEzTWF5QmVVUENBICYmIGNhblJldHVyblVQQ0EpIHsKKyAgICAgIC8vIFRyYW5zZmVyIHRoZSBtZXRkYXRhIGFjcm9zcworICAgICAgWlhSZXN1bHQgKnJlc3VsdFVQQ0EgPSBbWlhSZXN1bHQgcmVzdWx0V2l0aFRleHQ6W3Jlc3VsdC50ZXh0IHN1YnN0cmluZ0Zyb21JbmRleDoxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Qnl0ZXM6cmVzdWx0LnJhd0J5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDpyZXN1bHQubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBvaW50czpyZXN1bHQucmVzdWx0UG9pbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDprQmFyY29kZUZvcm1hdFVQQ0FdOworICAgICAgW3Jlc3VsdFVQQ0EgcHV0QWxsTWV0YWRhdGE6cmVzdWx0LnJlc3VsdE1ldGFkYXRhXTsKKyAgICAgIHJldHVybiByZXN1bHRVUENBOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClyZXNldCB7CisgIGZvciAoaWQ8WlhSZWFkZXI+IHJlYWRlciBpbiBzZWxmLnJlYWRlcnMpIHsKKyAgICBbcmVhZGVyIHJlc2V0XTsKKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWE9uZURSZWFkZXIuaCBiL1pYaW5nT2JqQy9vbmVkL1pYT25lRFJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NTJlZWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWE9uZURSZWFkZXIuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlYWRlci5oIgorCisvKioKKyAqIEVuY2Fwc3VsYXRlcyBmdW5jdGlvbmFsaXR5IGFuZCBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIGNvbW1vbiB0byBhbGwgZmFtaWxpZXMKKyAqIG9mIG9uZS1kaW1lbnNpb25hbCBiYXJjb2Rlcy4KKyAqLworCitleHRlcm4gaW50IGNvbnN0IElOVEVHRVJfTUFUSF9TSElGVDsKK2V4dGVybiBpbnQgY29uc3QgUEFUVEVSTl9NQVRDSF9SRVNVTFRfU0NBTEVfRkFDVE9SOworCitAY2xhc3MgWlhCaXRBcnJheSwgWlhEZWNvZGVIaW50cywgWlhSZXN1bHQ7CisKK0BpbnRlcmZhY2UgWlhPbmVEUmVhZGVyIDogTlNPYmplY3QgPFpYUmVhZGVyPgorCisrIChCT09MKXJlY29yZFBhdHRlcm46KFpYQml0QXJyYXkgKilyb3cgc3RhcnQ6KGludClzdGFydCBjb3VudGVyczooaW50W10pY291bnRlcnMgY291bnRlcnNTaXplOihpbnQpY291bnRlcnNTaXplOworKyAoQk9PTClyZWNvcmRQYXR0ZXJuSW5SZXZlcnNlOihaWEJpdEFycmF5ICopcm93IHN0YXJ0OihpbnQpc3RhcnQgY291bnRlcnM6KGludFtdKWNvdW50ZXJzIGNvdW50ZXJzU2l6ZTooaW50KWNvdW50ZXJzU2l6ZTsKKysgKGludClwYXR0ZXJuTWF0Y2hWYXJpYW5jZTooaW50W10pY291bnRlcnMgY291bnRlcnNTaXplOihpbnQpY291bnRlcnNTaXplIHBhdHRlcm46KGludFtdKXBhdHRlcm4gbWF4SW5kaXZpZHVhbFZhcmlhbmNlOihpbnQpbWF4SW5kaXZpZHVhbFZhcmlhbmNlOworLSAoWlhSZXN1bHQgKilkZWNvZGVSb3c6KGludClyb3dOdW1iZXIgcm93OihaWEJpdEFycmF5ICopcm93IGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYT25lRFJlYWRlci5tIGIvWlhpbmdPYmpDL29uZWQvWlhPbmVEUmVhZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUzYmI5NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYT25lRFJlYWRlci5tCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpbmFyeUJpdG1hcC5oIgorI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhEZWNvZGVIaW50cy5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYT25lRFJlYWRlci5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKworaW50IGNvbnN0IElOVEVHRVJfTUFUSF9TSElGVCA9IDg7CitpbnQgY29uc3QgUEFUVEVSTl9NQVRDSF9SRVNVTFRfU0NBTEVfRkFDVE9SID0gMSA8PCBJTlRFR0VSX01BVEhfU0hJRlQ7CisKK0BpbXBsZW1lbnRhdGlvbiBaWE9uZURSZWFkZXIKKworLSAoWlhSZXN1bHQgKilkZWNvZGU6KFpYQmluYXJ5Qml0bWFwICopaW1hZ2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW3NlbGYgZGVjb2RlOmltYWdlIGhpbnRzOm5pbCBlcnJvcjplcnJvcl07Cit9CisKKy8vIE5vdGUgdGhhdCB3ZSBkb24ndCB0cnkgcm90YXRpb24gd2l0aG91dCB0aGUgdHJ5IGhhcmRlciBmbGFnLCBldmVuIGlmIHJvdGF0aW9uIHdhcyBzdXBwb3J0ZWQuCistIChaWFJlc3VsdCAqKWRlY29kZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgTlNFcnJvciAqZGVjb2RlRXJyb3IgPSBuaWw7CisgIFpYUmVzdWx0ICpyZXN1bHQgPSBbc2VsZiBkb0RlY29kZTppbWFnZSBoaW50czpoaW50cyBlcnJvcjomZGVjb2RlRXJyb3JdOworICBpZiAocmVzdWx0KSB7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfSBlbHNlIGlmIChkZWNvZGVFcnJvci5jb2RlID09IFpYTm90Rm91bmRFcnJvcikgeworICAgIEJPT0wgdHJ5SGFyZGVyID0gaGludHMgIT0gbmlsICYmIGhpbnRzLnRyeUhhcmRlcjsKKyAgICBpZiAodHJ5SGFyZGVyICYmIFtpbWFnZSByb3RhdGVTdXBwb3J0ZWRdKSB7CisgICAgICBaWEJpbmFyeUJpdG1hcCAqcm90YXRlZEltYWdlID0gW2ltYWdlIHJvdGF0ZUNvdW50ZXJDbG9ja3dpc2VdOworICAgICAgWlhSZXN1bHQgKnJlc3VsdCA9IFtzZWxmIGRvRGVjb2RlOnJvdGF0ZWRJbWFnZSBoaW50czpoaW50cyBlcnJvcjplcnJvcl07CisgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICByZXR1cm4gbmlsOworICAgICAgfQorICAgICAgLy8gUmVjb3JkIHRoYXQgd2UgZm91bmQgaXQgcm90YXRlZCA5MCBkZWdyZWVzIENDVyAvIDI3MCBkZWdyZWVzIENXCisgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICptZXRhZGF0YSA9IFtyZXN1bHQgcmVzdWx0TWV0YWRhdGFdOworICAgICAgaW50IG9yaWVudGF0aW9uID0gMjcwOworICAgICAgaWYgKG1ldGFkYXRhICE9IG5pbCAmJiBtZXRhZGF0YVtAKGtSZXN1bHRNZXRhZGF0YVR5cGVPcmllbnRhdGlvbildKSB7CisgICAgICAgIC8vIEJ1dCBpZiB3ZSBmb3VuZCBpdCByZXZlcnNlZCBpbiBkb0RlY29kZSgpLCBhZGQgaW4gdGhhdCByZXN1bHQgaGVyZToKKyAgICAgICAgb3JpZW50YXRpb24gPSAob3JpZW50YXRpb24gKyBbKChOU051bWJlciAqKW1ldGFkYXRhW0Aoa1Jlc3VsdE1ldGFkYXRhVHlwZU9yaWVudGF0aW9uKV0pIGludFZhbHVlXSkgJSAzNjA7CisgICAgICB9CisgICAgICBbcmVzdWx0IHB1dE1ldGFkYXRhOmtSZXN1bHRNZXRhZGF0YVR5cGVPcmllbnRhdGlvbiB2YWx1ZTpAKG9yaWVudGF0aW9uKV07CisgICAgICAvLyBVcGRhdGUgcmVzdWx0IHBvaW50cworICAgICAgTlNNdXRhYmxlQXJyYXkgKnBvaW50cyA9IFtyZXN1bHQgcmVzdWx0UG9pbnRzXTsKKyAgICAgIGlmIChwb2ludHMgIT0gbmlsKSB7CisgICAgICAgIGludCBoZWlnaHQgPSBbcm90YXRlZEltYWdlIGhlaWdodF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgW3BvaW50cyBjb3VudF07IGkrKykgeworICAgICAgICAgIHBvaW50c1tpXSA9IFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOmhlaWdodCAtIFsoWlhSZXN1bHRQb2ludCAqKXBvaW50c1tpXSB5XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OlsoWlhSZXN1bHRQb2ludCAqKXBvaW50c1tpXSB4XV07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9CisKKyAgaWYgKGVycm9yKSAqZXJyb3IgPSBkZWNvZGVFcnJvcjsKKyAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClyZXNldCB7CisgIAorfQorCisKKy8qKgorICogV2UncmUgZ29pbmcgdG8gZXhhbWluZSByb3dzIGZyb20gdGhlIG1pZGRsZSBvdXR3YXJkLCBzZWFyY2hpbmcgYWx0ZXJuYXRlbHkgYWJvdmUgYW5kIGJlbG93IHRoZQorICogbWlkZGxlLCBhbmQgZmFydGhlciBvdXQgZWFjaCB0aW1lLiByb3dTdGVwIGlzIHRoZSBudW1iZXIgb2Ygcm93cyBiZXR3ZWVuIGVhY2ggc3VjY2Vzc2l2ZQorICogYXR0ZW1wdCBhYm92ZSBhbmQgYmVsb3cgdGhlIG1pZGRsZS4gU28gd2UnZCBzY2FuIHJvdyBtaWRkbGUsIHRoZW4gbWlkZGxlIC0gcm93U3RlcCwgdGhlbgorICogbWlkZGxlICsgcm93U3RlcCwgdGhlbiBtaWRkbGUgLSAoMiAqIHJvd1N0ZXApLCBldGMuCisgKiByb3dTdGVwIGlzIGJpZ2dlciBhcyB0aGUgaW1hZ2UgaXMgdGFsbGVyLCBidXQgaXMgYWx3YXlzIGF0IGxlYXN0IDEuIFdlJ3ZlIHNvbWV3aGF0IGFyYml0cmFyaWx5CisgKiBkZWNpZGVkIHRoYXQgbW92aW5nIHVwIGFuZCBkb3duIGJ5IGFib3V0IDEvMTYgb2YgdGhlIGltYWdlIGlzIHByZXR0eSBnb29kOyB3ZSB0cnkgbW9yZSBvZiB0aGUKKyAqIGltYWdlIGlmICJ0cnlpbmcgaGFyZGVyIi4KKyAqLworLSAoWlhSZXN1bHQgKilkb0RlY29kZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaW50IHdpZHRoID0gaW1hZ2Uud2lkdGg7CisgIGludCBoZWlnaHQgPSBpbWFnZS5oZWlnaHQ7CisgIFpYQml0QXJyYXkgKnJvdyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdFdpdGhTaXplOndpZHRoXTsKKyAgaW50IG1pZGRsZSA9IGhlaWdodCA+PiAxOworICBCT09MIHRyeUhhcmRlciA9IGhpbnRzICE9IG5pbCAmJiBoaW50cy50cnlIYXJkZXI7CisgIGludCByb3dTdGVwID0gTUFYKDEsIGhlaWdodCA+PiAodHJ5SGFyZGVyID8gOCA6IDUpKTsKKyAgaW50IG1heExpbmVzOworICBpZiAodHJ5SGFyZGVyKSB7CisgICAgbWF4TGluZXMgPSBoZWlnaHQ7CisgIH0gZWxzZSB7CisgICAgbWF4TGluZXMgPSAxNTsKKyAgfQorCisgIGZvciAoaW50IHggPSAwOyB4IDwgbWF4TGluZXM7IHgrKykgeworICAgIGludCByb3dTdGVwc0Fib3ZlT3JCZWxvdyA9ICh4ICsgMSkgPj4gMTsKKyAgICBCT09MIGlzQWJvdmUgPSAoeCAmIDB4MDEpID09IDA7CisgICAgaW50IHJvd051bWJlciA9IG1pZGRsZSArIHJvd1N0ZXAgKiAoaXNBYm92ZSA/IHJvd1N0ZXBzQWJvdmVPckJlbG93IDogLXJvd1N0ZXBzQWJvdmVPckJlbG93KTsKKyAgICBpZiAocm93TnVtYmVyIDwgMCB8fCByb3dOdW1iZXIgPj0gaGVpZ2h0KSB7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBOU0Vycm9yICpyb3dFcnJvciA9IG5pbDsKKyAgICByb3cgPSBbaW1hZ2UgYmxhY2tSb3c6cm93TnVtYmVyIHJvdzpyb3cgZXJyb3I6JnJvd0Vycm9yXTsKKyAgICBpZiAoIXJvdyAmJiByb3dFcnJvci5jb2RlID09IFpYTm90Rm91bmRFcnJvcikgeworICAgICAgY29udGludWU7CisgICAgfSBlbHNlIGlmICghcm93KSB7CisgICAgICBpZiAoZXJyb3IpICplcnJvciA9IHJvd0Vycm9yOworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDI7IGF0dGVtcHQrKykgeworICAgICAgaWYgKGF0dGVtcHQgPT0gMSkgeworICAgICAgICBbcm93IHJldmVyc2VdOworICAgICAgICBpZiAoaGludHMgIT0gbmlsICYmIGhpbnRzLnJlc3VsdFBvaW50Q2FsbGJhY2spIHsKKyAgICAgICAgICBoaW50cyA9IFtoaW50cyBjb3B5XTsKKyAgICAgICAgICBoaW50cy5yZXN1bHRQb2ludENhbGxiYWNrID0gbmlsOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIFpYUmVzdWx0ICpyZXN1bHQgPSBbc2VsZiBkZWNvZGVSb3c6cm93TnVtYmVyIHJvdzpyb3cgaGludHM6aGludHMgZXJyb3I6bmlsXTsKKyAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgaWYgKGF0dGVtcHQgPT0gMSkgeworICAgICAgICAgIFtyZXN1bHQgcHV0TWV0YWRhdGE6a1Jlc3VsdE1ldGFkYXRhVHlwZU9yaWVudGF0aW9uIHZhbHVlOkAxODBdOworICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICpwb2ludHMgPSBbcmVzdWx0IHJlc3VsdFBvaW50c107CisgICAgICAgICAgaWYgKHBvaW50cyAhPSBuaWwpIHsKKyAgICAgICAgICAgIHBvaW50c1swXSA9IFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOndpZHRoIC0gWyhaWFJlc3VsdFBvaW50ICopcG9pbnRzWzBdIHhdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTpbKFpYUmVzdWx0UG9pbnQgKilwb2ludHNbMF0geV1dOworICAgICAgICAgICAgcG9pbnRzWzFdID0gW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6d2lkdGggLSBbKFpYUmVzdWx0UG9pbnQgKilwb2ludHNbMV0geF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OlsoWlhSZXN1bHRQb2ludCAqKXBvaW50c1sxXSB5XV07CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgcmV0dXJuIG5pbDsKK30KKworCisvKioKKyAqIFJlY29yZHMgdGhlIHNpemUgb2Ygc3VjY2Vzc2l2ZSBydW5zIG9mIHdoaXRlIGFuZCBibGFjayBwaXhlbHMgaW4gYSByb3csIHN0YXJ0aW5nIGF0IGEgZ2l2ZW4gcG9pbnQuCisgKiBUaGUgdmFsdWVzIGFyZSByZWNvcmRlZCBpbiB0aGUgZ2l2ZW4gYXJyYXksIGFuZCB0aGUgbnVtYmVyIG9mIHJ1bnMgcmVjb3JkZWQgaXMgZXF1YWwgdG8gdGhlIHNpemUKKyAqIG9mIHRoZSBhcnJheS4gSWYgdGhlIHJvdyBzdGFydHMgb24gYSB3aGl0ZSBwaXhlbCBhdCB0aGUgZ2l2ZW4gc3RhcnQgcG9pbnQsIHRoZW4gdGhlIGZpcnN0IGNvdW50CisgKiByZWNvcmRlZCBpcyB0aGUgcnVuIG9mIHdoaXRlIHBpeGVscyBzdGFydGluZyBmcm9tIHRoYXQgcG9pbnQ7IGxpa2V3aXNlIGl0IGlzIHRoZSBjb3VudCBvZiBhIHJ1bgorICogb2YgYmxhY2sgcGl4ZWxzIGlmIHRoZSByb3cgYmVnaW4gb24gYSBibGFjayBwaXhlbHMgYXQgdGhhdCBwb2ludC4KKyAqLworKyAoQk9PTClyZWNvcmRQYXR0ZXJuOihaWEJpdEFycmF5ICopcm93IHN0YXJ0OihpbnQpc3RhcnQgY291bnRlcnM6KGludFtdKWNvdW50ZXJzIGNvdW50ZXJzU2l6ZTooaW50KWNvdW50ZXJzU2l6ZSB7CisgIGludCBudW1Db3VudGVycyA9IGNvdW50ZXJzU2l6ZTsKKworICBtZW1zZXQoY291bnRlcnMsIDAsIG51bUNvdW50ZXJzICogc2l6ZW9mKGludCkpOworCisgIGludCBlbmQgPSByb3cuc2l6ZTsKKyAgaWYgKHN0YXJ0ID49IGVuZCkgeworICAgIHJldHVybiBOTzsKKyAgfQorICBCT09MIGlzV2hpdGUgPSAhW3JvdyBnZXQ6c3RhcnRdOworICBpbnQgY291bnRlclBvc2l0aW9uID0gMDsKKyAgaW50IGkgPSBzdGFydDsKKworICB3aGlsZSAoaSA8IGVuZCkgeworICAgIGlmIChbcm93IGdldDppXSBeIGlzV2hpdGUpIHsKKyAgICAgIGNvdW50ZXJzW2NvdW50ZXJQb3NpdGlvbl0rKzsKKyAgICB9IGVsc2UgeworICAgICAgY291bnRlclBvc2l0aW9uKys7CisgICAgICBpZiAoY291bnRlclBvc2l0aW9uID09IG51bUNvdW50ZXJzKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY291bnRlcnNbY291bnRlclBvc2l0aW9uXSA9IDE7CisgICAgICAgIGlzV2hpdGUgPSAhaXNXaGl0ZTsKKyAgICAgIH0KKyAgICB9CisgICAgaSsrOworICB9CisKKyAgaWYgKCEoY291bnRlclBvc2l0aW9uID09IG51bUNvdW50ZXJzIHx8IChjb3VudGVyUG9zaXRpb24gPT0gbnVtQ291bnRlcnMgLSAxICYmIGkgPT0gZW5kKSkpIHsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgcmV0dXJuIFlFUzsKK30KKworKyAoQk9PTClyZWNvcmRQYXR0ZXJuSW5SZXZlcnNlOihaWEJpdEFycmF5ICopcm93IHN0YXJ0OihpbnQpc3RhcnQgY291bnRlcnM6KGludFtdKWNvdW50ZXJzIGNvdW50ZXJzU2l6ZTooaW50KWNvdW50ZXJzU2l6ZSB7CisgIGludCBudW1UcmFuc2l0aW9uc0xlZnQgPSBjb3VudGVyc1NpemU7CisgIEJPT0wgbGFzdCA9IFtyb3cgZ2V0OnN0YXJ0XTsKKworICB3aGlsZSAoc3RhcnQgPiAwICYmIG51bVRyYW5zaXRpb25zTGVmdCA+PSAwKSB7CisgICAgaWYgKFtyb3cgZ2V0Oi0tc3RhcnRdICE9IGxhc3QpIHsKKyAgICAgIG51bVRyYW5zaXRpb25zTGVmdC0tOworICAgICAgbGFzdCA9ICFsYXN0OworICAgIH0KKyAgfQorCisgIGlmIChudW1UcmFuc2l0aW9uc0xlZnQgPj0gMCB8fCAhW3NlbGYgcmVjb3JkUGF0dGVybjpyb3cgc3RhcnQ6c3RhcnQgKyAxIGNvdW50ZXJzOmNvdW50ZXJzIGNvdW50ZXJzU2l6ZTpjb3VudGVyc1NpemVdKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIHJldHVybiBZRVM7Cit9CisKKworLyoqCisgKiBEZXRlcm1pbmVzIGhvdyBjbG9zZWx5IGEgc2V0IG9mIG9ic2VydmVkIGNvdW50cyBvZiBydW5zIG9mIGJsYWNrL3doaXRlIHZhbHVlcyBtYXRjaGVzIGEgZ2l2ZW4KKyAqIHRhcmdldCBwYXR0ZXJuLiBUaGlzIGlzIHJlcG9ydGVkIGFzIHRoZSByYXRpbyBvZiB0aGUgdG90YWwgdmFyaWFuY2UgZnJvbSB0aGUgZXhwZWN0ZWQgcGF0dGVybgorICogcHJvcG9ydGlvbnMgYWNyb3NzIGFsbCBwYXR0ZXJuIGVsZW1lbnRzLCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLgorICogCisgKiBSZXR1cm5zIHJhdGlvIG9mIHRvdGFsIHZhcmlhbmNlIGJldHdlZW4gY291bnRlcnMgYW5kIHBhdHRlcm4gY29tcGFyZWQgdG8gdG90YWwgcGF0dGVybiBzaXplLAorICogd2hlcmUgdGhlIHJhdGlvIGhhcyBiZWVuIG11bHRpcGxpZWQgYnkgMjU2LiBTbywgMCBtZWFucyBubyB2YXJpYW5jZSAocGVyZmVjdCBtYXRjaCk7IDI1NiBtZWFucworICogdGhlIHRvdGFsIHZhcmlhbmNlIGJldHdlZW4gY291bnRlcnMgYW5kIHBhdHRlcm5zIGVxdWFscyB0aGUgcGF0dGVybiBsZW5ndGgsIGhpZ2hlciB2YWx1ZXMgbWVhbgorICogZXZlbiBtb3JlIHZhcmlhbmNlCisgKi8KKysgKGludClwYXR0ZXJuTWF0Y2hWYXJpYW5jZTooaW50W10pY291bnRlcnMgY291bnRlcnNTaXplOihpbnQpY291bnRlcnNTaXplIHBhdHRlcm46KGludFtdKXBhdHRlcm4gbWF4SW5kaXZpZHVhbFZhcmlhbmNlOihpbnQpbWF4SW5kaXZpZHVhbFZhcmlhbmNlIHsKKyAgaW50IG51bUNvdW50ZXJzID0gY291bnRlcnNTaXplOworICBpbnQgdG90YWwgPSAwOworICBpbnQgcGF0dGVybkxlbmd0aCA9IDA7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db3VudGVyczsgaSsrKSB7CisgICAgdG90YWwgKz0gY291bnRlcnNbaV07CisgICAgcGF0dGVybkxlbmd0aCArPSBwYXR0ZXJuW2ldOworICB9CisKKyAgaWYgKHRvdGFsIDwgcGF0dGVybkxlbmd0aCB8fCBwYXR0ZXJuTGVuZ3RoID09IDApIHsKKyAgICByZXR1cm4gSU5UX01BWDsKKyAgfQorICBpbnQgdW5pdEJhcldpZHRoID0gKHRvdGFsIDw8IElOVEVHRVJfTUFUSF9TSElGVCkgLyBwYXR0ZXJuTGVuZ3RoOworICBtYXhJbmRpdmlkdWFsVmFyaWFuY2UgPSAobWF4SW5kaXZpZHVhbFZhcmlhbmNlICogdW5pdEJhcldpZHRoKSA+PiBJTlRFR0VSX01BVEhfU0hJRlQ7CisgIGludCB0b3RhbFZhcmlhbmNlID0gMDsKKworICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvdW50ZXJzOyB4KyspIHsKKyAgICBpbnQgY291bnRlciA9IGNvdW50ZXJzW3hdIDw8IElOVEVHRVJfTUFUSF9TSElGVDsKKyAgICBpbnQgc2NhbGVkUGF0dGVybiA9IHBhdHRlcm5beF0gKiB1bml0QmFyV2lkdGg7CisgICAgaW50IHZhcmlhbmNlID0gY291bnRlciA+IHNjYWxlZFBhdHRlcm4gPyBjb3VudGVyIC0gc2NhbGVkUGF0dGVybiA6IHNjYWxlZFBhdHRlcm4gLSBjb3VudGVyOworICAgIGlmICh2YXJpYW5jZSA+IG1heEluZGl2aWR1YWxWYXJpYW5jZSkgeworICAgICAgcmV0dXJuIElOVF9NQVg7CisgICAgfQorICAgIHRvdGFsVmFyaWFuY2UgKz0gdmFyaWFuY2U7CisgIH0KKworICByZXR1cm4gdG90YWxWYXJpYW5jZSAvIHRvdGFsOworfQorCisKKy8qKgorICogQXR0ZW1wdHMgdG8gZGVjb2RlIGEgb25lLWRpbWVuc2lvbmFsIGJhcmNvZGUgZm9ybWF0IGdpdmVuIGEgc2luZ2xlIHJvdyBvZgorICogYW4gaW1hZ2UuCisgKi8KKy0gKFpYUmVzdWx0ICopZGVjb2RlUm93OihpbnQpcm93TnVtYmVyIHJvdzooWlhCaXRBcnJheSAqKXJvdyBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiWW91IG11c3Qgb3ZlcnJpZGUgJUAgaW4gYSBzdWJjbGFzcyIsIE5TU3RyaW5nRnJvbVNlbGVjdG9yKF9jbWQpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLmggYi9aWGluZ09iakMvb25lZC9aWE9uZURpbWVuc2lvbmFsQ29kZVdyaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NzM0YWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWE9uZURpbWVuc2lvbmFsQ29kZVdyaXRlci5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYV3JpdGVyLmgiCisKKy8qKgorICogRW5jYXBzdWxhdGVzIGZ1bmN0aW9uYWxpdHkgYW5kIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgY29tbW9uIHRvIG9uZS1kaW1lbnNpb25hbCBiYXJjb2Rlcy4KKyAqLworQGludGVyZmFjZSBaWE9uZURpbWVuc2lvbmFsQ29kZVdyaXRlciA6IE5TT2JqZWN0IDxaWFdyaXRlcj4KKworLSAoQk9PTCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBsZW5ndGg6KGludCAqKXBMZW5ndGg7CistIChpbnQpYXBwZW5kUGF0dGVybjooQk9PTCAqKXRhcmdldCBwb3M6KGludClwb3MgcGF0dGVybjooaW50ICopcGF0dGVybiBwYXR0ZXJuTGVuOihpbnQpcGF0dGVybkxlbiBzdGFydENvbG9yOihCT09MKXN0YXJ0Q29sb3I7CistIChpbnQpZGVmYXVsdE1hcmdpbjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIubSBiL1pYaW5nT2JqQy9vbmVkL1pYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgwMjY5ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYT25lRGltZW5zaW9uYWxDb2RlV3JpdGVyLm0KQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0TWF0cml4LmgiCisjaW1wb3J0ICJaWEVuY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWE9uZURpbWVuc2lvbmFsQ29kZVdyaXRlci5oIgorCitAaW1wbGVtZW50YXRpb24gWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIKKworLSAoWlhCaXRNYXRyaXggKillbmNvZGU6KE5TU3RyaW5nICopY29udGVudHMgZm9ybWF0OihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0IHdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0IGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtzZWxmIGVuY29kZTpjb250ZW50cyBmb3JtYXQ6Zm9ybWF0IHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHQgaGludHM6bmlsIGVycm9yOmVycm9yXTsKK30KKworLSAoWlhCaXRNYXRyaXggKillbmNvZGU6KE5TU3RyaW5nICopY29udGVudHMgZm9ybWF0OihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0IHdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0CisgICAgICAgICAgICAgICAgIGhpbnRzOihaWEVuY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoY29udGVudHMubGVuZ3RoID09IDApIHsKKyAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIHJlYXNvbjpAIkZvdW5kIGVtcHR5IGNvbnRlbnRzIiB1c2VySW5mbzpuaWxdOworICB9CisKKyAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJOZWdhdGl2ZSBzaXplIGlzIG5vdCBhbGxvd2VkLiBJbnB1dDogJWR4JWQiLCB3aWR0aCwgaGVpZ2h0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKKyAgfQorCisgIGludCBzaWRlc01hcmdpbiA9IFtzZWxmIGRlZmF1bHRNYXJnaW5dOworICBpZiAoaGludHMgJiYgaGludHMubWFyZ2luKSB7CisgICAgc2lkZXNNYXJnaW4gPSBoaW50cy5tYXJnaW4uaW50VmFsdWU7CisgIH0KKworICBpbnQgbGVuZ3RoOworICBCT09MICpjb2RlID0gW3NlbGYgZW5jb2RlOmNvbnRlbnRzIGxlbmd0aDombGVuZ3RoXTsKKyAgWlhCaXRNYXRyaXggKnJlc3VsdCA9IFtzZWxmIHJlbmRlclJlc3VsdDpjb2RlIGxlbmd0aDpsZW5ndGggd2lkdGg6d2lkdGggaGVpZ2h0OmhlaWdodCBzaWRlc01hcmdpbjpzaWRlc01hcmdpbl07CisgIGZyZWUoY29kZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKFpYQml0TWF0cml4ICopcmVuZGVyUmVzdWx0OihCT09MICopY29kZSBsZW5ndGg6KGludClsZW5ndGggd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgc2lkZXNNYXJnaW46KGludClzaWRlc01hcmdpbiB7CisgIGludCBpbnB1dFdpZHRoID0gbGVuZ3RoOworICAvLyBBZGQgcXVpZXQgem9uZSBvbiBib3RoIHNpZGVzLgorICBpbnQgZnVsbFdpZHRoID0gaW5wdXRXaWR0aCArIHNpZGVzTWFyZ2luOworICBpbnQgb3V0cHV0V2lkdGggPSBNQVgod2lkdGgsIGZ1bGxXaWR0aCk7CisgIGludCBvdXRwdXRIZWlnaHQgPSBNQVgoMSwgaGVpZ2h0KTsKKworICBpbnQgbXVsdGlwbGUgPSBvdXRwdXRXaWR0aCAvIGZ1bGxXaWR0aDsKKyAgaW50IGxlZnRQYWRkaW5nID0gKG91dHB1dFdpZHRoIC0gKGlucHV0V2lkdGggKiBtdWx0aXBsZSkpIC8gMjsKKworICBaWEJpdE1hdHJpeCAqb3V0cHV0ID0gW1pYQml0TWF0cml4IGJpdE1hdHJpeFdpdGhXaWR0aDpvdXRwdXRXaWR0aCBoZWlnaHQ6b3V0cHV0SGVpZ2h0XTsKKyAgZm9yIChpbnQgaW5wdXRYID0gMCwgb3V0cHV0WCA9IGxlZnRQYWRkaW5nOyBpbnB1dFggPCBpbnB1dFdpZHRoOyBpbnB1dFgrKywgb3V0cHV0WCArPSBtdWx0aXBsZSkgeworICAgIGlmIChjb2RlW2lucHV0WF0pIHsKKyAgICAgIFtvdXRwdXQgc2V0UmVnaW9uQXRMZWZ0Om91dHB1dFggdG9wOjAgd2lkdGg6bXVsdGlwbGUgaGVpZ2h0Om91dHB1dEhlaWdodF07CisgICAgfQorICB9CisgIHJldHVybiBvdXRwdXQ7Cit9CisKKy8qKgorICogQXBwZW5kcyB0aGUgZ2l2ZW4gcGF0dGVybiB0byB0aGUgdGFyZ2V0IGFycmF5IHN0YXJ0aW5nIGF0IHBvcy4KKyAqLworLSAoaW50KWFwcGVuZFBhdHRlcm46KEJPT0wgKil0YXJnZXQgcG9zOihpbnQpcG9zIHBhdHRlcm46KGludCAqKXBhdHRlcm4gcGF0dGVybkxlbjooaW50KXBhdHRlcm5MZW4gc3RhcnRDb2xvcjooQk9PTClzdGFydENvbG9yIHsKKyAgQk9PTCBjb2xvciA9IHN0YXJ0Q29sb3I7CisgIGludCBudW1BZGRlZCA9IDA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0dGVybkxlbjsgaSsrKSB7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwYXR0ZXJuW2ldOyBqKyspIHsKKyAgICAgIHRhcmdldFtwb3MrK10gPSBjb2xvcjsKKyAgICB9CisgICAgbnVtQWRkZWQgKz0gcGF0dGVybltpXTsKKyAgICBjb2xvciA9ICFjb2xvcjsgLy8gZmxpcCBjb2xvciBhZnRlciBlYWNoIHNlZ21lbnQKKyAgfQorICByZXR1cm4gbnVtQWRkZWQ7Cit9CisKKy0gKGludClkZWZhdWx0TWFyZ2luIHsKKyAgLy8gQ29kYUJhciBzcGVjIHJlcXVpcmVzIGEgc2lkZSBtYXJnaW4gdG8gYmUgbW9yZSB0aGFuIHRlbiB0aW1lcyB3aWRlciB0aGFuIG5hcnJvdyBzcGFjZS4KKyAgLy8gVGhpcyBzZWVtcyBsaWtlIGEgZGVjZW50IGlkZWEgZm9yIGEgZGVmYXVsdCBmb3IgYWxsIGZvcm1hdHMuCisgIHJldHVybiAxMDsKK30KKworLyoqCisgKiBFbmNvZGUgdGhlIGNvbnRlbnRzIHRvIGJvb2xlYW4gYXJyYXkgZXhwcmVzc2lvbiBvZiBvbmUtZGltZW5zaW9uYWwgYmFyY29kZS4KKyAqIFN0YXJ0IGNvZGUgYW5kIGVuZCBjb2RlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiByZXN1bHQsIGFuZCBzaWRlIG1hcmdpbnMgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZC4KKyAqLworLSAoQk9PTCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBsZW5ndGg6KGludCAqKXBMZW5ndGggeworICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJZb3UgbXVzdCBvdmVycmlkZSAlQCBpbiBhIHN1YmNsYXNzIiwgTlNTdHJpbmdGcm9tU2VsZWN0b3IoX2NtZCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhVUENBUmVhZGVyLmggYi9aWGluZ09iakMvb25lZC9aWFVQQ0FSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQzMjI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhVUENBUmVhZGVyLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhVUENFQU5SZWFkZXIuaCIKKworLyoqCisgKiBJbXBsZW1lbnRzIGRlY29kaW5nIG9mIHRoZSBVUEMtQSBmb3JtYXQuCisgKi8KKworQGludGVyZmFjZSBaWFVQQ0FSZWFkZXIgOiBaWFVQQ0VBTlJlYWRlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWFVQQ0FSZWFkZXIubSBiL1pYaW5nT2JqQy9vbmVkL1pYVVBDQVJlYWRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOGFlZjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWFVQQ0FSZWFkZXIubQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFQU4xM1JlYWRlci5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisjaW1wb3J0ICJaWFVQQ0FSZWFkZXIuaCIKKworQGludGVyZmFjZSBaWFVQQ0FSZWFkZXIgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhVUENFQU5SZWFkZXIgKmVhbjEzUmVhZGVyOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWFVQQ0FSZWFkZXIKKworLSAoaWQpaW5pdCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2VhbjEzUmVhZGVyID0gW1taWEVBTjEzUmVhZGVyIGFsbG9jXSBpbml0XTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChaWFJlc3VsdCAqKWRlY29kZVJvdzooaW50KXJvd051bWJlciByb3c6KFpYQml0QXJyYXkgKilyb3cgc3RhcnRHdWFyZFJhbmdlOihOU1JhbmdlKXN0YXJ0R3VhcmRSYW5nZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgWlhSZXN1bHQgKnJlc3VsdCA9IFtzZWxmLmVhbjEzUmVhZGVyIGRlY29kZVJvdzpyb3dOdW1iZXIgcm93OnJvdyBzdGFydEd1YXJkUmFuZ2U6c3RhcnRHdWFyZFJhbmdlIGhpbnRzOmhpbnRzIGVycm9yOmVycm9yXTsKKyAgaWYgKHJlc3VsdCkgeworICAgIHJlc3VsdCA9IFtzZWxmIG1heWJlUmV0dXJuUmVzdWx0OnJlc3VsdF07CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbmlsOworICB9Cit9CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlUm93OihpbnQpcm93TnVtYmVyIHJvdzooWlhCaXRBcnJheSAqKXJvdyBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgWlhSZXN1bHQgKnJlc3VsdCA9IFtzZWxmLmVhbjEzUmVhZGVyIGRlY29kZVJvdzpyb3dOdW1iZXIgcm93OnJvdyBoaW50czpoaW50cyBlcnJvcjplcnJvcl07CisgIGlmIChyZXN1bHQpIHsKKyAgICByZXN1bHQgPSBbc2VsZiBtYXliZVJldHVyblJlc3VsdDpyZXN1bHRdOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICBpZiAoZXJyb3IpICplcnJvciA9IEZvcm1hdEVycm9ySW5zdGFuY2UoKTsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorfQorCistIChaWFJlc3VsdCAqKWRlY29kZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIFpYUmVzdWx0ICpyZXN1bHQgPSBbc2VsZi5lYW4xM1JlYWRlciBkZWNvZGU6aW1hZ2UgZXJyb3I6ZXJyb3JdOworICBpZiAocmVzdWx0KSB7CisgICAgcmVzdWx0ID0gW3NlbGYgbWF5YmVSZXR1cm5SZXN1bHQ6cmVzdWx0XTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBGb3JtYXRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9IGVsc2UgeworICAgIHJldHVybiBuaWw7CisgIH0KK30KKworLSAoWlhSZXN1bHQgKilkZWNvZGU6KFpYQmluYXJ5Qml0bWFwICopaW1hZ2UgaGludHM6KFpYRGVjb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIFpYUmVzdWx0ICpyZXN1bHQgPSBbc2VsZi5lYW4xM1JlYWRlciBkZWNvZGU6aW1hZ2UgaGludHM6aGludHMgZXJyb3I6ZXJyb3JdOworICBpZiAocmVzdWx0KSB7CisgICAgcmVzdWx0ID0gW3NlbGYgbWF5YmVSZXR1cm5SZXN1bHQ6cmVzdWx0XTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBGb3JtYXRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9IGVsc2UgeworICAgIHJldHVybiBuaWw7CisgIH0KK30KKworLSAoWlhCYXJjb2RlRm9ybWF0KWJhcmNvZGVGb3JtYXQgeworICByZXR1cm4ga0JhcmNvZGVGb3JtYXRVUENBOworfQorCistIChpbnQpZGVjb2RlTWlkZGxlOihaWEJpdEFycmF5ICopcm93IHN0YXJ0UmFuZ2U6KE5TUmFuZ2Upc3RhcnRSYW5nZSByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIHJldHVybiBbc2VsZi5lYW4xM1JlYWRlciBkZWNvZGVNaWRkbGU6cm93IHN0YXJ0UmFuZ2U6c3RhcnRSYW5nZSByZXN1bHQ6cmVzdWx0IGVycm9yOmVycm9yXTsKK30KKworLSAoWlhSZXN1bHQgKiltYXliZVJldHVyblJlc3VsdDooWlhSZXN1bHQgKilyZXN1bHQgeworICBOU1N0cmluZyAqdGV4dCA9IHJlc3VsdC50ZXh0OworICBpZiAoW3RleHQgY2hhcmFjdGVyQXRJbmRleDowXSA9PSAnMCcpIHsKKyAgICByZXR1cm4gW1pYUmVzdWx0IHJlc3VsdFdpdGhUZXh0Olt0ZXh0IHN1YnN0cmluZ0Zyb21JbmRleDoxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Qnl0ZXM6TlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6MAorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRQb2ludHM6cmVzdWx0LnJlc3VsdFBvaW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENBXTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbmlsOworICB9Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYVVBDQVdyaXRlci5oIGIvWlhpbmdPYmpDL29uZWQvWlhVUENBV3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmZjJjYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYVVBDQVdyaXRlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYV3JpdGVyLmgiCisKKy8qKgorICogVGhpcyBvYmplY3QgcmVuZGVycyBhIFVQQy1BIGNvZGUgYXMgYSBaWEJpdE1hdHJpeC4KKyAqLworCitAaW50ZXJmYWNlIFpYVVBDQVdyaXRlciA6IE5TT2JqZWN0IDxaWFdyaXRlcj4KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhVUENBV3JpdGVyLm0gYi9aWGluZ09iakMvb25lZC9aWFVQQ0FXcml0ZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODhlYmMzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhVUENBV3JpdGVyLm0KQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFQU4xM1dyaXRlci5oIgorI2ltcG9ydCAiWlhVUENBV3JpdGVyLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFVQQ0FXcml0ZXIKKworLSAoWlhFQU4xM1dyaXRlciAqKXN1YldyaXRlciB7CisgIHN0YXRpYyBaWEVBTjEzV3JpdGVyICpzdWJXcml0ZXIgPSBuaWw7CisgIGlmICghc3ViV3JpdGVyKSB7CisgICAgc3ViV3JpdGVyID0gW1taWEVBTjEzV3JpdGVyIGFsbG9jXSBpbml0XTsKKyAgfQorCisgIHJldHVybiBzdWJXcml0ZXI7Cit9CisKKy0gKFpYQml0TWF0cml4ICopZW5jb2RlOihOU1N0cmluZyAqKWNvbnRlbnRzIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdCB3aWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodCBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIHJldHVybiBbc2VsZiBlbmNvZGU6Y29udGVudHMgZm9ybWF0OmZvcm1hdCB3aWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0IGhpbnRzOm5pbCBlcnJvcjplcnJvcl07Cit9CisKKy0gKFpYQml0TWF0cml4ICopZW5jb2RlOihOU1N0cmluZyAqKWNvbnRlbnRzIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdCB3aWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodCBoaW50czooWlhFbmNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKGZvcm1hdCAhPSBrQmFyY29kZUZvcm1hdFVQQ0EpIHsKKyAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkNhbiBvbmx5IGVuY29kZSBVUEMtQSwgYnV0IGdvdCAlZCIsIGZvcm1hdF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgIH0KKyAgcmV0dXJuIFtzZWxmLnN1YldyaXRlciBlbmNvZGU6W3NlbGYgcHJlZW5jb2RlOmNvbnRlbnRzXSBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRFYW4xMyB3aWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0IGhpbnRzOmhpbnRzIGVycm9yOmVycm9yXTsKK30KKworLyoqCisgKiBUcmFuc2Zvcm0gYSBVUEMtQSBjb2RlIGludG8gdGhlIGVxdWl2YWxlbnQgRUFOLTEzIGNvZGUsIGFuZCBhZGQgYSBjaGVjayBkaWdpdCBpZiBpdCBpcyBub3QKKyAqIGFscmVhZHkgcHJlc2VudC4KKyAqLworLSAoTlNTdHJpbmcgKilwcmVlbmNvZGU6KE5TU3RyaW5nICopY29udGVudHMgeworICBOU1VJbnRlZ2VyIGxlbmd0aCA9IFtjb250ZW50cyBsZW5ndGhdOworICBpZiAobGVuZ3RoID09IDExKSB7CisgICAgaW50IHN1bSA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDExOyArK2kpIHsKKyAgICAgIHN1bSArPSAoW2NvbnRlbnRzIGNoYXJhY3RlckF0SW5kZXg6aV0gLSAnMCcpICogKGkgJSAyID09IDAgPyAzIDogMSk7CisgICAgfQorCisgICAgY29udGVudHMgPSBbY29udGVudHMgc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCIlZCIsICgxMDAwIC0gc3VtKSAlIDEwXTsKKyAgfSBlbHNlIGlmIChsZW5ndGggIT0gMTIpIHsKKyAgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiUmVxdWVzdGVkIGNvbnRlbnRzIHNob3VsZCBiZSAxMSBvciAxMiBkaWdpdHMgbG9uZywgYnV0IGdvdCAlbGQiLCAodW5zaWduZWQgbG9uZylbY29udGVudHMgbGVuZ3RoXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWxdOworICB9CisgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjAlQCIsIGNvbnRlbnRzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5oIGIvWlhpbmdPYmpDL29uZWQvWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzODA3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWFVQQ0VBTkV4dGVuc2lvbjJTdXBwb3J0LmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGNsYXNzIFpYQml0QXJyYXksIFpYUmVzdWx0OworCitAaW50ZXJmYWNlIFpYVVBDRUFORXh0ZW5zaW9uMlN1cHBvcnQgOiBOU09iamVjdAorCistIChaWFJlc3VsdCAqKWRlY29kZVJvdzooaW50KXJvd051bWJlciByb3c6KFpYQml0QXJyYXkgKilyb3cgZXh0ZW5zaW9uU3RhcnRSYW5nZTooTlNSYW5nZSlleHRlbnNpb25TdGFydFJhbmdlIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoaW50KWRlY29kZU1pZGRsZTooWlhCaXRBcnJheSAqKXJvdyBzdGFydFJhbmdlOihOU1JhbmdlKXN0YXJ0UmFuZ2UgcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYVVBDRUFORXh0ZW5zaW9uMlN1cHBvcnQubSBiL1pYaW5nT2JqQy9vbmVkL1pYVVBDRUFORXh0ZW5zaW9uMlN1cHBvcnQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjkxMDYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5tCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQmFyY29kZUZvcm1hdC5oIgorI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisjaW1wb3J0ICJaWFJlc3VsdE1ldGFkYXRhVHlwZS5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludC5oIgorI2ltcG9ydCAiWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydC5oIgorI2ltcG9ydCAiWlhVUENFQU5SZWFkZXIuaCIKKworQGltcGxlbWVudGF0aW9uIFpYVVBDRUFORXh0ZW5zaW9uMlN1cHBvcnQKKworLSAoWlhSZXN1bHQgKilkZWNvZGVSb3c6KGludClyb3dOdW1iZXIgcm93OihaWEJpdEFycmF5ICopcm93IGV4dGVuc2lvblN0YXJ0UmFuZ2U6KE5TUmFuZ2UpZXh0ZW5zaW9uU3RhcnRSYW5nZSBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0U3RyaW5nID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICBpbnQgZW5kID0gW3NlbGYgZGVjb2RlTWlkZGxlOnJvdyBzdGFydFJhbmdlOmV4dGVuc2lvblN0YXJ0UmFuZ2UgcmVzdWx0OnJlc3VsdFN0cmluZyBlcnJvcjplcnJvcl07CisgIGlmIChlbmQgPT0gLTEpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNNdXRhYmxlRGljdGlvbmFyeSAqZXh0ZW5zaW9uRGF0YSA9IFtzZWxmIHBhcnNlRXh0ZW5zaW9uU3RyaW5nOnJlc3VsdFN0cmluZ107CisKKyAgWlhSZXN1bHQgKmV4dGVuc2lvblJlc3VsdCA9IFtbWlhSZXN1bHQgYWxsb2NdIGluaXRXaXRoVGV4dDpyZXN1bHRTdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Qnl0ZXM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRQb2ludHM6QFtbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDooZXh0ZW5zaW9uU3RhcnRSYW5nZS5sb2NhdGlvbiArIE5TTWF4UmFuZ2UoZXh0ZW5zaW9uU3RhcnRSYW5nZSkpIC8gMi4wZiB5OnJvd051bWJlcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6ZW5kIHk6cm93TnVtYmVyXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENFQU5FeHRlbnNpb25dOworICBpZiAoZXh0ZW5zaW9uRGF0YSAhPSBuaWwpIHsKKyAgICBbZXh0ZW5zaW9uUmVzdWx0IHB1dEFsbE1ldGFkYXRhOmV4dGVuc2lvbkRhdGFdOworICB9CisgIHJldHVybiBleHRlbnNpb25SZXN1bHQ7Cit9CisKKy0gKGludClkZWNvZGVNaWRkbGU6KFpYQml0QXJyYXkgKilyb3cgc3RhcnRSYW5nZTooTlNSYW5nZSlzdGFydFJhbmdlIHJlc3VsdDooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0IGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgY29uc3QgaW50IGNvdW50ZXJzTGVuID0gNDsKKyAgaW50IGNvdW50ZXJzW2NvdW50ZXJzTGVuXTsKKyAgbWVtc2V0KGNvdW50ZXJzLCAwLCBjb3VudGVyc0xlbiAqIHNpemVvZihpbnQpKTsKKworICBpbnQgZW5kID0gW3JvdyBzaXplXTsKKyAgaW50IHJvd09mZnNldCA9IChpbnQpTlNNYXhSYW5nZShzdGFydFJhbmdlKTsKKworICBpbnQgY2hlY2tQYXJpdHkgPSAwOworCisgIGZvciAoaW50IHggPSAwOyB4IDwgMiAmJiByb3dPZmZzZXQgPCBlbmQ7IHgrKykgeworICAgIGludCBiZXN0TWF0Y2ggPSBbWlhVUENFQU5SZWFkZXIgZGVjb2RlRGlnaXQ6cm93IGNvdW50ZXJzOmNvdW50ZXJzIGNvdW50ZXJzTGVuOmNvdW50ZXJzTGVuIHJvd09mZnNldDpyb3dPZmZzZXQgcGF0dGVyblR5cGU6VVBDX0VBTl9QQVRURVJOU19MX0FORF9HX1BBVFRFUk5TIGVycm9yOmVycm9yXTsKKyAgICBpZiAoYmVzdE1hdGNoID09IC0xKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoJzAnICsgYmVzdE1hdGNoICUgMTApXTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ZXJzTGVuOyBpKyspIHsKKyAgICAgIHJvd09mZnNldCArPSBjb3VudGVyc1tpXTsKKyAgICB9CisgICAgaWYgKGJlc3RNYXRjaCA+PSAxMCkgeworICAgICAgY2hlY2tQYXJpdHkgfD0gMSA8PCAoMSAtIHgpOworICAgIH0KKyAgICBpZiAoeCAhPSAxKSB7CisgICAgICAvLyBSZWFkIG9mZiBzZXBhcmF0b3IgaWYgbm90IGxhc3QKKyAgICAgIHJvd09mZnNldCA9IFtyb3cgbmV4dFNldDpyb3dPZmZzZXRdOworICAgICAgcm93T2Zmc2V0ID0gW3JvdyBuZXh0VW5zZXQ6cm93T2Zmc2V0XTsKKyAgICB9CisgIH0KKworICBpZiAocmVzdWx0Lmxlbmd0aCAhPSAyKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAoW3Jlc3VsdCBpbnRWYWx1ZV0gJSA0ICE9IGNoZWNrUGFyaXR5KSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gcm93T2Zmc2V0OworfQorCistIChOU011dGFibGVEaWN0aW9uYXJ5ICopcGFyc2VFeHRlbnNpb25TdHJpbmc6KE5TU3RyaW5nICopcmF3IHsKKyAgaWYgKHJhdy5sZW5ndGggIT0gMikgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgcmV0dXJuIFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OkAoW3JhdyBpbnRWYWx1ZV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTpAKGtSZXN1bHRNZXRhZGF0YVR5cGVJc3N1ZU51bWJlcildOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWFVQQ0VBTkV4dGVuc2lvbjVTdXBwb3J0LmggYi9aWGluZ09iakMvb25lZC9aWFVQQ0VBTkV4dGVuc2lvbjVTdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkMWExNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAY2xhc3MgWlhCaXRBcnJheSwgWlhSZXN1bHQ7CisKK0BpbnRlcmZhY2UgWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydCA6IE5TT2JqZWN0CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlUm93OihpbnQpcm93TnVtYmVyIHJvdzooWlhCaXRBcnJheSAqKXJvdyBleHRlbnNpb25TdGFydFJhbmdlOihOU1JhbmdlKWV4dGVuc2lvblN0YXJ0UmFuZ2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CistIChpbnQpZGVjb2RlTWlkZGxlOihaWEJpdEFycmF5ICopcm93IHN0YXJ0UmFuZ2U6KE5TUmFuZ2Upc3RhcnRSYW5nZSByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5tIGIvWlhpbmdPYmpDL29uZWQvWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZWI5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWFVQQ0VBTkV4dGVuc2lvbjVTdXBwb3J0Lm0KQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQmFyY29kZUZvcm1hdC5oIgorI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYUmVzdWx0LmgiCisjaW1wb3J0ICJaWFJlc3VsdE1ldGFkYXRhVHlwZS5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludC5oIgorI2ltcG9ydCAiWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydC5oIgorI2ltcG9ydCAiWlhVUENFQU5SZWFkZXIuaCIKKworY29uc3QgaW50IENIRUNLX0RJR0lUX0VOQ09ESU5HU1sxMF0gPSB7CisgIDB4MTgsIDB4MTQsIDB4MTIsIDB4MTEsIDB4MEMsIDB4MDYsIDB4MDMsIDB4MEEsIDB4MDksIDB4MDUKK307CisKK0BpbXBsZW1lbnRhdGlvbiBaWFVQQ0VBTkV4dGVuc2lvbjVTdXBwb3J0CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlUm93OihpbnQpcm93TnVtYmVyIHJvdzooWlhCaXRBcnJheSAqKXJvdyBleHRlbnNpb25TdGFydFJhbmdlOihOU1JhbmdlKWV4dGVuc2lvblN0YXJ0UmFuZ2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBOU011dGFibGVTdHJpbmcgKnJlc3VsdFN0cmluZyA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgaW50IGVuZCA9IFtzZWxmIGRlY29kZU1pZGRsZTpyb3cgc3RhcnRSYW5nZTpleHRlbnNpb25TdGFydFJhbmdlIHJlc3VsdDpyZXN1bHRTdHJpbmcgZXJyb3I6ZXJyb3JdOworICBpZiAoZW5kID09IC0xKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmV4dGVuc2lvbkRhdGEgPSBbc2VsZiBwYXJzZUV4dGVuc2lvblN0cmluZzpyZXN1bHRTdHJpbmddOworCisgIFpYUmVzdWx0ICpleHRlbnNpb25SZXN1bHQgPSBbW1pYUmVzdWx0IGFsbG9jXSBpbml0V2l0aFRleHQ6cmVzdWx0U3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd0J5dGVzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDowCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UG9pbnRzOkBbW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6KGV4dGVuc2lvblN0YXJ0UmFuZ2UubG9jYXRpb24gKyBOU01heFJhbmdlKGV4dGVuc2lvblN0YXJ0UmFuZ2UpKSAvIDIuMGYgeTpyb3dOdW1iZXJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOmVuZCB5OnJvd051bWJlcl1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OmtCYXJjb2RlRm9ybWF0VVBDRUFORXh0ZW5zaW9uXTsKKyAgaWYgKGV4dGVuc2lvbkRhdGEgIT0gbmlsKSB7CisgICAgW2V4dGVuc2lvblJlc3VsdCBwdXRBbGxNZXRhZGF0YTpleHRlbnNpb25EYXRhXTsKKyAgfQorICByZXR1cm4gZXh0ZW5zaW9uUmVzdWx0OworfQorCistIChpbnQpZGVjb2RlTWlkZGxlOihaWEJpdEFycmF5ICopcm93IHN0YXJ0UmFuZ2U6KE5TUmFuZ2Upc3RhcnRSYW5nZSByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGNvbnN0IGludCBjb3VudGVyc0xlbiA9IDQ7CisgIGludCBjb3VudGVyc1tjb3VudGVyc0xlbl07CisgIG1lbXNldChjb3VudGVycywgMCwgY291bnRlcnNMZW4gKiBzaXplb2YoaW50KSk7CisKKyAgaW50IGVuZCA9IFtyb3cgc2l6ZV07CisgIGludCByb3dPZmZzZXQgPSAoaW50KU5TTWF4UmFuZ2Uoc3RhcnRSYW5nZSk7CisKKyAgaW50IGxnUGF0dGVybkZvdW5kID0gMDsKKworICBmb3IgKGludCB4ID0gMDsgeCA8IDUgJiYgcm93T2Zmc2V0IDwgZW5kOyB4KyspIHsKKyAgICBpbnQgYmVzdE1hdGNoID0gW1pYVVBDRUFOUmVhZGVyIGRlY29kZURpZ2l0OnJvdyBjb3VudGVyczpjb3VudGVycyBjb3VudGVyc0xlbjpjb3VudGVyc0xlbiByb3dPZmZzZXQ6cm93T2Zmc2V0IHBhdHRlcm5UeXBlOlVQQ19FQU5fUEFUVEVSTlNfTF9BTkRfR19QQVRURVJOUyBlcnJvcjplcnJvcl07CisgICAgaWYgKGJlc3RNYXRjaCA9PSAtMSkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpKCcwJyArIGJlc3RNYXRjaCAlIDEwKV07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudGVyc0xlbjsgaSsrKSB7CisgICAgICByb3dPZmZzZXQgKz0gY291bnRlcnNbaV07CisgICAgfQorICAgIGlmIChiZXN0TWF0Y2ggPj0gMTApIHsKKyAgICAgIGxnUGF0dGVybkZvdW5kIHw9IDEgPDwgKDQgLSB4KTsKKyAgICB9CisgICAgaWYgKHggIT0gNCkgeworICAgICAgcm93T2Zmc2V0ID0gW3JvdyBuZXh0U2V0OnJvd09mZnNldF07CisgICAgICByb3dPZmZzZXQgPSBbcm93IG5leHRVbnNldDpyb3dPZmZzZXRdOworICAgIH0KKyAgfQorCisgIGlmIChyZXN1bHQubGVuZ3RoICE9IDUpIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGludCBjaGVja0RpZ2l0ID0gW3NlbGYgZGV0ZXJtaW5lQ2hlY2tEaWdpdDpsZ1BhdHRlcm5Gb3VuZF07CisgIGlmIChjaGVja0RpZ2l0ID09IC0xKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gLTE7CisgIH0gZWxzZSBpZiAoW3NlbGYgZXh0ZW5zaW9uQ2hlY2tzdW06cmVzdWx0XSAhPSBjaGVja0RpZ2l0KSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gcm93T2Zmc2V0OworfQorCistIChpbnQpZXh0ZW5zaW9uQ2hlY2tzdW06KE5TU3RyaW5nICopcyB7CisgIGludCBsZW5ndGggPSAoaW50KVtzIGxlbmd0aF07CisgIGludCBzdW0gPSAwOworICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMjsgaSA+PSAwOyBpIC09IDIpIHsKKyAgICBzdW0gKz0gKGludClbcyBjaGFyYWN0ZXJBdEluZGV4OmldIC0gKGludCknMCc7CisgIH0KKyAgc3VtICo9IDM7CisgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMikgeworICAgIHN1bSArPSAoaW50KVtzIGNoYXJhY3RlckF0SW5kZXg6aV0gLSAoaW50KScwJzsKKyAgfQorICBzdW0gKj0gMzsKKyAgcmV0dXJuIHN1bSAlIDEwOworfQorCistIChpbnQpZGV0ZXJtaW5lQ2hlY2tEaWdpdDooaW50KWxnUGF0dGVybkZvdW5kIHsKKyAgZm9yIChpbnQgZCA9IDA7IGQgPCAxMDsgZCsrKSB7CisgICAgaWYgKGxnUGF0dGVybkZvdW5kID09IENIRUNLX0RJR0lUX0VOQ09ESU5HU1tkXSkgeworICAgICAgcmV0dXJuIGQ7CisgICAgfQorICB9CisgIHJldHVybiAtMTsKK30KKworLSAoTlNNdXRhYmxlRGljdGlvbmFyeSAqKXBhcnNlRXh0ZW5zaW9uU3RyaW5nOihOU1N0cmluZyAqKXJhdyB7CisgIGlmIChyYXcubGVuZ3RoICE9IDUpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIGlkIHZhbHVlID0gW3NlbGYgcGFyc2VFeHRlbnNpb241U3RyaW5nOnJhd107CisgIGlmICh2YWx1ZSkgeworICAgIHJldHVybiBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDp2YWx1ZSBmb3JLZXk6QChrUmVzdWx0TWV0YWRhdGFUeXBlU3VnZ2VzdGVkUHJpY2UpXTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbmlsOworICB9Cit9CisKKy0gKE5TU3RyaW5nICopcGFyc2VFeHRlbnNpb241U3RyaW5nOihOU1N0cmluZyAqKXJhdyB7CisgIE5TU3RyaW5nICpjdXJyZW5jeTsKKyAgc3dpdGNoIChbcmF3IGNoYXJhY3RlckF0SW5kZXg6MF0pIHsKKyAgICBjYXNlICcwJzoKKyAgICAgIGN1cnJlbmN5ID0gQCLCoyI7CisgICAgICBicmVhazsKKyAgICBjYXNlICc1JzoKKyAgICAgIGN1cnJlbmN5ID0gQCIkIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJzknOgorICAgICAgaWYgKFtAIjkwMDAwIiBpc0VxdWFsVG9TdHJpbmc6cmF3XSkgeworICAgICAgICByZXR1cm4gbmlsOworICAgICAgfQorICAgICAgaWYgKFtAIjk5OTkxIiBpc0VxdWFsVG9TdHJpbmc6cmF3XSkgeworICAgICAgICByZXR1cm4gQCIwLjAwIjsKKyAgICAgIH0KKyAgICAgIGlmIChbQCI5OTk5MCIgaXNFcXVhbFRvU3RyaW5nOnJhd10pIHsKKyAgICAgICAgcmV0dXJuIEAiVXNlZCI7CisgICAgICB9CisgICAgICBjdXJyZW5jeSA9IEAiIjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBjdXJyZW5jeSA9IEAiIjsKKyAgICAgIGJyZWFrOworICB9CisgIGludCByYXdBbW91bnQgPSBbW3JhdyBzdWJzdHJpbmdGcm9tSW5kZXg6MV0gaW50VmFsdWVdOworICBOU1N0cmluZyAqdW5pdHNTdHJpbmcgPSBbQChyYXdBbW91bnQgLyAxMDApIHN0cmluZ1ZhbHVlXTsKKyAgaW50IGh1bmRyZWR0aHMgPSByYXdBbW91bnQgJSAxMDA7CisgIE5TU3RyaW5nICpodW5kcmVkdGhzU3RyaW5nID0gaHVuZHJlZHRocyA8IDEwID8KKyAgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIwJWQiLCBodW5kcmVkdGhzXSA6IFtAKGh1bmRyZWR0aHMpIHN0cmluZ1ZhbHVlXTsKKyAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQC4lQCIsIGN1cnJlbmN5LCB1bml0c1N0cmluZywgaHVuZHJlZHRoc1N0cmluZ107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5oIGIvWlhpbmdPYmpDL29uZWQvWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0MTAxYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BjbGFzcyBaWEJpdEFycmF5LCBaWFJlc3VsdDsKKworQGludGVyZmFjZSBaWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQgOiBOU09iamVjdAorCistIChaWFJlc3VsdCAqKWRlY29kZVJvdzooaW50KXJvd051bWJlciByb3c6KFpYQml0QXJyYXkgKilyb3cgcm93T2Zmc2V0OihpbnQpcm93T2Zmc2V0IGVycm9yOihOU0Vycm9yICoqKWVycm9yOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQubSBiL1pYaW5nT2JqQy9vbmVkL1pYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NTQ0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQubQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQuaCIKKyNpbXBvcnQgIlpYVVBDRUFORXh0ZW5zaW9uMlN1cHBvcnQuaCIKKyNpbXBvcnQgIlpYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQuaCIKKyNpbXBvcnQgIlpYVVBDRUFOUmVhZGVyLmgiCisKKyNkZWZpbmUgRVhURU5TSU9OX1NUQVJUX1BBVFRFUk5fTEVOIDMKK2NvbnN0IGludCBFWFRFTlNJT05fU1RBUlRfUEFUVEVSTltFWFRFTlNJT05fU1RBUlRfUEFUVEVSTl9MRU5dID0gezEsMSwyfTsKKworQGludGVyZmFjZSBaWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhVUENFQU5FeHRlbnNpb24yU3VwcG9ydCAqdHdvU3VwcG9ydDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYVVBDRUFORXh0ZW5zaW9uNVN1cHBvcnQgKmZpdmVTdXBwb3J0OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQKKworLSAoaWQpaW5pdCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3R3b1N1cHBvcnQgPSBbW1pYVVBDRUFORXh0ZW5zaW9uMlN1cHBvcnQgYWxsb2NdIGluaXRdOworICAgIF9maXZlU3VwcG9ydCA9IFtbWlhVUENFQU5FeHRlbnNpb241U3VwcG9ydCBhbGxvY10gaW5pdF07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoWlhSZXN1bHQgKilkZWNvZGVSb3c6KGludClyb3dOdW1iZXIgcm93OihaWEJpdEFycmF5ICopcm93IHJvd09mZnNldDooaW50KXJvd09mZnNldCBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIE5TUmFuZ2UgZXh0ZW5zaW9uU3RhcnRSYW5nZSA9IFtaWFVQQ0VBTlJlYWRlciBmaW5kR3VhcmRQYXR0ZXJuOnJvdyByb3dPZmZzZXQ6cm93T2Zmc2V0IHdoaXRlRmlyc3Q6Tk8gcGF0dGVybjooaW50ICopRVhURU5TSU9OX1NUQVJUX1BBVFRFUk4gcGF0dGVybkxlbjpFWFRFTlNJT05fU1RBUlRfUEFUVEVSTl9MRU4gZXJyb3I6ZXJyb3JdOworCisgIGlmIChleHRlbnNpb25TdGFydFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgWlhSZXN1bHQgKnJlc3VsdCA9IFtzZWxmLmZpdmVTdXBwb3J0IGRlY29kZVJvdzpyb3dOdW1iZXIgcm93OnJvdyBleHRlbnNpb25TdGFydFJhbmdlOmV4dGVuc2lvblN0YXJ0UmFuZ2UgZXJyb3I6ZXJyb3JdOworICBpZiAoIXJlc3VsdCkgeworICAgIHJlc3VsdCA9IFtzZWxmLnR3b1N1cHBvcnQgZGVjb2RlUm93OnJvd051bWJlciByb3c6cm93IGV4dGVuc2lvblN0YXJ0UmFuZ2U6ZXh0ZW5zaW9uU3RhcnRSYW5nZSBlcnJvcjplcnJvcl07CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9aWFVQQ0VBTlJlYWRlci5oIGIvWlhpbmdPYmpDL29uZWQvWlhVUENFQU5SZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjUyMTBjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhVUENFQU5SZWFkZXIuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJhcmNvZGVGb3JtYXQuaCIKKyNpbXBvcnQgIlpYT25lRFJlYWRlci5oIgorCisvKioKKyAqIEVuY2Fwc3VsYXRlcyBmdW5jdGlvbmFsaXR5IGFuZCBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIGNvbW1vbiB0byBVUEMgYW5kIEVBTiBmYW1pbGllcworICogb2Ygb25lLWRpbWVuc2lvbmFsIGJhcmNvZGVzLgorICovCisKK3R5cGVkZWYgZW51bSB7CisJVVBDX0VBTl9QQVRURVJOU19MX1BBVFRFUk5TID0gMCwKKwlVUENfRUFOX1BBVFRFUk5TX0xfQU5EX0dfUEFUVEVSTlMKK30gVVBDX0VBTl9QQVRURVJOUzsKKworI2RlZmluZSBTVEFSVF9FTkRfUEFUVEVSTl9MRU4gMworZXh0ZXJuIGNvbnN0IGludCBTVEFSVF9FTkRfUEFUVEVSTltdOworI2RlZmluZSBNSURETEVfUEFUVEVSTl9MRU4gNQorZXh0ZXJuIGNvbnN0IGludCBNSURETEVfUEFUVEVSTltdOworI2RlZmluZSBMX1BBVFRFUk5TX0xFTiAxMAorI2RlZmluZSBMX1BBVFRFUk5TX1NVQl9MRU4gNAorZXh0ZXJuIGNvbnN0IGludCBMX1BBVFRFUk5TW11bNF07CitleHRlcm4gY29uc3QgaW50IExfQU5EX0dfUEFUVEVSTlNbXVs0XTsKKworQGNsYXNzIFpYRGVjb2RlSGludHMsIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydCwgWlhSZXN1bHQsIFpYVVBDRUFORXh0ZW5zaW9uU3VwcG9ydDsKKworQGludGVyZmFjZSBaWFVQQ0VBTlJlYWRlciA6IFpYT25lRFJlYWRlcgorCisrIChOU1JhbmdlKWZpbmRTdGFydEd1YXJkUGF0dGVybjooWlhCaXRBcnJheSAqKXJvdyBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKFpYQmFyY29kZUZvcm1hdCliYXJjb2RlRm9ybWF0OworLSAoQk9PTCljaGVja0NoZWNrc3VtOihOU1N0cmluZyAqKXMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisrIChCT09MKWNoZWNrU3RhbmRhcmRVUENFQU5DaGVja3N1bTooTlNTdHJpbmcgKilzOworKyAoaW50KWRlY29kZURpZ2l0OihaWEJpdEFycmF5ICopcm93IGNvdW50ZXJzOihpbnRbXSljb3VudGVycyBjb3VudGVyc0xlbjooaW50KWNvdW50ZXJzTGVuIHJvd09mZnNldDooaW50KXJvd09mZnNldCBwYXR0ZXJuVHlwZTooVVBDX0VBTl9QQVRURVJOUylwYXR0ZXJuVHlwZSBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKE5TUmFuZ2UpZGVjb2RlRW5kOihaWEJpdEFycmF5ICopcm93IGVuZFN0YXJ0OihpbnQpZW5kU3RhcnQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CistIChpbnQpZGVjb2RlTWlkZGxlOihaWEJpdEFycmF5ICopcm93IHN0YXJ0UmFuZ2U6KE5TUmFuZ2Upc3RhcnRSYW5nZSByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKFpYUmVzdWx0ICopZGVjb2RlUm93OihpbnQpcm93TnVtYmVyIHJvdzooWlhCaXRBcnJheSAqKXJvdyBzdGFydEd1YXJkUmFuZ2U6KE5TUmFuZ2Upc3RhcnRHdWFyZFJhbmdlIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisrIChOU1JhbmdlKWZpbmRHdWFyZFBhdHRlcm46KFpYQml0QXJyYXkgKilyb3cgcm93T2Zmc2V0OihpbnQpcm93T2Zmc2V0IHdoaXRlRmlyc3Q6KEJPT0wpd2hpdGVGaXJzdCBwYXR0ZXJuOihpbnQgKilwYXR0ZXJuIHBhdHRlcm5MZW46KGludClwYXR0ZXJuTGVuIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworKyAoTlNSYW5nZSlmaW5kR3VhcmRQYXR0ZXJuOihaWEJpdEFycmF5ICopcm93IHJvd09mZnNldDooaW50KXJvd09mZnNldCB3aGl0ZUZpcnN0OihCT09MKXdoaXRlRmlyc3QgcGF0dGVybjooaW50ICopcGF0dGVybiBwYXR0ZXJuTGVuOihpbnQpcGF0dGVybkxlbiBjb3VudGVyczooaW50ICopY291bnRlcnMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL1pYVVBDRUFOUmVhZGVyLm0gYi9aWGluZ09iakMvb25lZC9aWFVQQ0VBTlJlYWRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhY2MyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9aWFVQQ0VBTlJlYWRlci5tCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisjaW1wb3J0ICJaWERlY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWFJlc3VsdC5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludC5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludENhbGxiYWNrLmgiCisjaW1wb3J0ICJaWFVQQ0VBTlJlYWRlci5oIgorI2ltcG9ydCAiWlhVUENFQU5FeHRlbnNpb25TdXBwb3J0LmgiCisKKyNkZWZpbmUgTUFYX0FWR19WQVJJQU5DRSAoaW50KShQQVRURVJOX01BVENIX1JFU1VMVF9TQ0FMRV9GQUNUT1IgKiAwLjQ4ZikKKyNkZWZpbmUgTUFYX0lORElWSURVQUxfVkFSSUFOQ0UgKGludCkoUEFUVEVSTl9NQVRDSF9SRVNVTFRfU0NBTEVfRkFDVE9SICogMC43ZikKKworLyoqCisgKiBTdGFydC9lbmQgZ3VhcmQgcGF0dGVybi4KKyAqLworY29uc3QgaW50IFNUQVJUX0VORF9QQVRURVJOW1NUQVJUX0VORF9QQVRURVJOX0xFTl0gPSB7MSwgMSwgMX07CisKKy8qKgorICogUGF0dGVybiBtYXJraW5nIHRoZSBtaWRkbGUgb2YgYSBVUEMvRUFOIHBhdHRlcm4sIHNlcGFyYXRpbmcgdGhlIHR3byBoYWx2ZXMuCisgKi8KK2NvbnN0IGludCBNSURETEVfUEFUVEVSTltNSURETEVfUEFUVEVSTl9MRU5dID0gezEsIDEsIDEsIDEsIDF9OworCisvKioKKyAqICJPZGQiLCBvciAiTCIgcGF0dGVybnMgdXNlZCB0byBlbmNvZGUgVVBDL0VBTiBkaWdpdHMuCisgKi8KK2NvbnN0IGludCBMX1BBVFRFUk5TW0xfUEFUVEVSTlNfTEVOXVtMX1BBVFRFUk5TX1NVQl9MRU5dID0geworICB7MywgMiwgMSwgMX0sIC8vIDAKKyAgezIsIDIsIDIsIDF9LCAvLyAxCisgIHsyLCAxLCAyLCAyfSwgLy8gMgorICB7MSwgNCwgMSwgMX0sIC8vIDMKKyAgezEsIDEsIDMsIDJ9LCAvLyA0CisgIHsxLCAyLCAzLCAxfSwgLy8gNQorICB7MSwgMSwgMSwgNH0sIC8vIDYKKyAgezEsIDMsIDEsIDJ9LCAvLyA3CisgIHsxLCAyLCAxLCAzfSwgLy8gOAorICB7MywgMSwgMSwgMn0gIC8vIDkKK307CisKKy8qKgorICogQXMgYWJvdmUgYnV0IGFsc28gaW5jbHVkaW5nIHRoZSAiZXZlbiIsIG9yICJHIiBwYXR0ZXJucyB1c2VkIHRvIGVuY29kZSBVUEMvRUFOIGRpZ2l0cy4KKyAqLworI2RlZmluZSBMX0FORF9HX1BBVFRFUk5TX0xFTiAyMAorI2RlZmluZSBMX0FORF9HX1BBVFRFUk5TX1NVQl9MRU4gNAorY29uc3QgaW50IExfQU5EX0dfUEFUVEVSTlNbTF9BTkRfR19QQVRURVJOU19MRU5dW0xfQU5EX0dfUEFUVEVSTlNfU1VCX0xFTl0gPSB7CisgIHszLCAyLCAxLCAxfSwgLy8gMAorICB7MiwgMiwgMiwgMX0sIC8vIDEKKyAgezIsIDEsIDIsIDJ9LCAvLyAyCisgIHsxLCA0LCAxLCAxfSwgLy8gMworICB7MSwgMSwgMywgMn0sIC8vIDQKKyAgezEsIDIsIDMsIDF9LCAvLyA1CisgIHsxLCAxLCAxLCA0fSwgLy8gNgorICB7MSwgMywgMSwgMn0sIC8vIDcKKyAgezEsIDIsIDEsIDN9LCAvLyA4CisgIHszLCAxLCAxLCAyfSwgLy8gOQorICB7MSwgMSwgMiwgM30sIC8vIDEwIHJldmVyc2VkIDAKKyAgezEsIDIsIDIsIDJ9LCAvLyAxMSByZXZlcnNlZCAxCisgIHsyLCAyLCAxLCAyfSwgLy8gMTIgcmV2ZXJzZWQgMgorICB7MSwgMSwgNCwgMX0sIC8vIDEzIHJldmVyc2VkIDMKKyAgezIsIDMsIDEsIDF9LCAvLyAxNCByZXZlcnNlZCA0CisgIHsxLCAzLCAyLCAxfSwgLy8gMTUgcmV2ZXJzZWQgNQorICB7NCwgMSwgMSwgMX0sIC8vIDE2IHJldmVyc2VkIDYKKyAgezIsIDEsIDMsIDF9LCAvLyAxNyByZXZlcnNlZCA3CisgIHszLCAxLCAyLCAxfSwgLy8gMTggcmV2ZXJzZWQgOAorICB7MiwgMSwgMSwgM30gIC8vIDE5IHJldmVyc2VkIDkKK307CisKK0BpbnRlcmZhY2UgWlhVUENFQU5SZWFkZXIgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlU3RyaW5nICpkZWNvZGVSb3dOU011dGFibGVTdHJpbmc7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQgKmV4dGVuc2lvblJlYWRlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydCAqZWFuTWFuU3VwcG9ydDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhVUENFQU5SZWFkZXIKKworLSAoaWQpaW5pdCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2RlY29kZVJvd05TTXV0YWJsZVN0cmluZyA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OjIwXTsKKyAgICBfZXh0ZW5zaW9uUmVhZGVyID0gW1taWFVQQ0VBTkV4dGVuc2lvblN1cHBvcnQgYWxsb2NdIGluaXRdOworICAgIF9lYW5NYW5TdXBwb3J0ID0gW1taWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQgYWxsb2NdIGluaXRdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKE5TUmFuZ2UpZmluZFN0YXJ0R3VhcmRQYXR0ZXJuOihaWEJpdEFycmF5ICopcm93IGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgQk9PTCBmb3VuZFN0YXJ0ID0gTk87CisgIE5TUmFuZ2Ugc3RhcnRSYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworICBpbnQgbmV4dFN0YXJ0ID0gMDsKKyAgaW50IGNvdW50ZXJzW1NUQVJUX0VORF9QQVRURVJOX0xFTl07CisKKyAgd2hpbGUgKCFmb3VuZFN0YXJ0KSB7CisgICAgc3RhcnRSYW5nZSA9IFtzZWxmIGZpbmRHdWFyZFBhdHRlcm46cm93IHJvd09mZnNldDpuZXh0U3RhcnQgd2hpdGVGaXJzdDpOTyBwYXR0ZXJuOihpbnQgKilTVEFSVF9FTkRfUEFUVEVSTiBwYXR0ZXJuTGVuOlNUQVJUX0VORF9QQVRURVJOX0xFTiBjb3VudGVyczpjb3VudGVycyBlcnJvcjplcnJvcl07CisgICAgaWYgKHN0YXJ0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgeworICAgICAgcmV0dXJuIHN0YXJ0UmFuZ2U7CisgICAgfQorICAgIGludCBzdGFydCA9IChpbnQpc3RhcnRSYW5nZS5sb2NhdGlvbjsKKyAgICBuZXh0U3RhcnQgPSAoaW50KU5TTWF4UmFuZ2Uoc3RhcnRSYW5nZSk7CisgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGEgcXVpZXQgem9uZSBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIHN0YXJ0IHBhdHRlcm4gYmVmb3JlIHRoZSBiYXJjb2RlLgorICAgIC8vIElmIHRoaXMgY2hlY2sgd291bGQgcnVuIG9mZiB0aGUgbGVmdCBlZGdlIG9mIHRoZSBpbWFnZSwgZG8gbm90IGFjY2VwdCB0aGlzIGJhcmNvZGUsCisgICAgLy8gYXMgaXQgaXMgdmVyeSBsaWtlbHkgdG8gYmUgYSBmYWxzZSBwb3NpdGl2ZS4KKyAgICBpbnQgcXVpZXRTdGFydCA9IHN0YXJ0IC0gKG5leHRTdGFydCAtIHN0YXJ0KTsKKyAgICBpZiAocXVpZXRTdGFydCA+PSAwKSB7CisgICAgICBmb3VuZFN0YXJ0ID0gW3JvdyBpc1JhbmdlOnF1aWV0U3RhcnQgZW5kOnN0YXJ0IHZhbHVlOk5PXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHN0YXJ0UmFuZ2U7Cit9CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlUm93OihpbnQpcm93TnVtYmVyIHJvdzooWlhCaXRBcnJheSAqKXJvdyBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtzZWxmIGRlY29kZVJvdzpyb3dOdW1iZXIgcm93OnJvdyBzdGFydEd1YXJkUmFuZ2U6W1tzZWxmIGNsYXNzXSBmaW5kU3RhcnRHdWFyZFBhdHRlcm46cm93IGVycm9yOmVycm9yXSBoaW50czpoaW50cyBlcnJvcjplcnJvcl07Cit9CisKKy8qKgorICogTGlrZSBkZWNvZGVSb3c6cm93OmhpbnRzOiwgYnV0IGFsbG93cyBjYWxsZXIgdG8gaW5mb3JtIG1ldGhvZCBhYm91dCB3aGVyZSB0aGUgVVBDL0VBTiBzdGFydCBwYXR0ZXJuIGlzCisgKiBmb3VuZC4gVGhpcyBhbGxvd3MgdGhpcyB0byBiZSBjb21wdXRlZCBvbmNlIGFuZCByZXVzZWQgYWNyb3NzIG1hbnkgaW1wbGVtZW50YXRpb25zLgorICovCistIChaWFJlc3VsdCAqKWRlY29kZVJvdzooaW50KXJvd051bWJlciByb3c6KFpYQml0QXJyYXkgKilyb3cgc3RhcnRHdWFyZFJhbmdlOihOU1JhbmdlKXN0YXJ0R3VhcmRSYW5nZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWQ8WlhSZXN1bHRQb2ludENhbGxiYWNrPiByZXN1bHRQb2ludENhbGxiYWNrID0gaGludHMgPT0gbmlsID8gbmlsIDogaGludHMucmVzdWx0UG9pbnRDYWxsYmFjazsKKworICBpZiAocmVzdWx0UG9pbnRDYWxsYmFjayAhPSBuaWwpIHsKKyAgICBbcmVzdWx0UG9pbnRDYWxsYmFjayBmb3VuZFBvc3NpYmxlUmVzdWx0UG9pbnQ6W1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6KHN0YXJ0R3VhcmRSYW5nZS5sb2NhdGlvbiArIE5TTWF4UmFuZ2Uoc3RhcnRHdWFyZFJhbmdlKSkgLyAyLjBmIHk6cm93TnVtYmVyXV07CisgIH0KKworICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgaW50IGVuZFN0YXJ0ID0gW3NlbGYgZGVjb2RlTWlkZGxlOnJvdyBzdGFydFJhbmdlOnN0YXJ0R3VhcmRSYW5nZSByZXN1bHQ6cmVzdWx0IGVycm9yOmVycm9yXTsKKyAgaWYgKGVuZFN0YXJ0ID09IC0xKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGlmIChyZXN1bHRQb2ludENhbGxiYWNrICE9IG5pbCkgeworICAgIFtyZXN1bHRQb2ludENhbGxiYWNrIGZvdW5kUG9zc2libGVSZXN1bHRQb2ludDpbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDplbmRTdGFydCB5OnJvd051bWJlcl1dOworICB9CisKKyAgTlNSYW5nZSBlbmRSYW5nZSA9IFtzZWxmIGRlY29kZUVuZDpyb3cgZW5kU3RhcnQ6ZW5kU3RhcnQgZXJyb3I6ZXJyb3JdOworICBpZiAoZW5kUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpZiAocmVzdWx0UG9pbnRDYWxsYmFjayAhPSBuaWwpIHsKKyAgICBbcmVzdWx0UG9pbnRDYWxsYmFjayBmb3VuZFBvc3NpYmxlUmVzdWx0UG9pbnQ6W1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6KGVuZFJhbmdlLmxvY2F0aW9uICsgTlNNYXhSYW5nZShlbmRSYW5nZSkpIC8gMi4wZiB5OnJvd051bWJlcl1dOworICB9CisKKyAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGEgcXVpZXQgem9uZSBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIGVuZCBwYXR0ZXJuIGFmdGVyIHRoZSBiYXJjb2RlLiBUaGUKKyAgLy8gc3BlYyBtaWdodCB3YW50IG1vcmUgd2hpdGVzcGFjZSwgYnV0IGluIHByYWN0aWNlIHRoaXMgaXMgdGhlIG1heGltdW0gd2UgY2FuIGNvdW50IG9uLgorICBpbnQgZW5kID0gKGludClOU01heFJhbmdlKGVuZFJhbmdlKTsKKyAgaW50IHF1aWV0RW5kID0gZW5kICsgKGVuZCAtIChpbnQpZW5kUmFuZ2UubG9jYXRpb24pOworICBpZiAocXVpZXRFbmQgPj0gW3JvdyBzaXplXSB8fCAhW3JvdyBpc1JhbmdlOmVuZCBlbmQ6cXVpZXRFbmQgdmFsdWU6Tk9dKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNTdHJpbmcgKnJlc3VsdFN0cmluZyA9IFtyZXN1bHQgZGVzY3JpcHRpb25dOworICBpZiAoIVtzZWxmIGNoZWNrQ2hlY2tzdW06cmVzdWx0U3RyaW5nIGVycm9yOmVycm9yXSkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gQ2hlY2tzdW1FcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGZsb2F0IGxlZnQgPSAoZmxvYXQpKE5TTWF4UmFuZ2Uoc3RhcnRHdWFyZFJhbmdlKSArIHN0YXJ0R3VhcmRSYW5nZS5sb2NhdGlvbikgLyAyLjBmOworICBmbG9hdCByaWdodCA9IChmbG9hdCkoTlNNYXhSYW5nZShlbmRSYW5nZSkgKyBlbmRSYW5nZS5sb2NhdGlvbikgLyAyLjBmOworICBaWEJhcmNvZGVGb3JtYXQgZm9ybWF0ID0gW3NlbGYgYmFyY29kZUZvcm1hdF07CisKKyAgWlhSZXN1bHQgKmRlY29kZVJlc3VsdCA9IFtaWFJlc3VsdCByZXN1bHRXaXRoVGV4dDpyZXN1bHRTdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdCeXRlczpOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UG9pbnRzOkBbW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6bGVmdCB5OihmbG9hdClyb3dOdW1iZXJdLCBbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDpyaWdodCB5OihmbG9hdClyb3dOdW1iZXJdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OmZvcm1hdF07CisKKyAgWlhSZXN1bHQgKmV4dGVuc2lvblJlc3VsdCA9IFtzZWxmLmV4dGVuc2lvblJlYWRlciBkZWNvZGVSb3c6cm93TnVtYmVyIHJvdzpyb3cgcm93T2Zmc2V0OihpbnQpTlNNYXhSYW5nZShlbmRSYW5nZSkgZXJyb3I6ZXJyb3JdOworICBpZiAoZXh0ZW5zaW9uUmVzdWx0KSB7CisgICAgW2RlY29kZVJlc3VsdCBwdXRNZXRhZGF0YTprUmVzdWx0TWV0YWRhdGFUeXBlVVBDRUFORXh0ZW5zaW9uIHZhbHVlOmV4dGVuc2lvblJlc3VsdC50ZXh0XTsKKyAgICBbZGVjb2RlUmVzdWx0IHB1dEFsbE1ldGFkYXRhOltleHRlbnNpb25SZXN1bHQgcmVzdWx0TWV0YWRhdGFdXTsKKyAgICBbZGVjb2RlUmVzdWx0IGFkZFJlc3VsdFBvaW50czpbZXh0ZW5zaW9uUmVzdWx0IHJlc3VsdFBvaW50c11dOworICB9CisKKyAgaWYgKGZvcm1hdCA9PSBrQmFyY29kZUZvcm1hdEVhbjEzIHx8IGZvcm1hdCA9PSBrQmFyY29kZUZvcm1hdFVQQ0EpIHsKKyAgICBOU1N0cmluZyAqY291bnRyeUlEID0gW3NlbGYuZWFuTWFuU3VwcG9ydCBsb29rdXBDb3VudHJ5SWRlbnRpZmllcjpyZXN1bHRTdHJpbmddOworICAgIGlmIChjb3VudHJ5SUQgIT0gbmlsKSB7CisgICAgICBbZGVjb2RlUmVzdWx0IHB1dE1ldGFkYXRhOmtSZXN1bHRNZXRhZGF0YVR5cGVQb3NzaWJsZUNvdW50cnkgdmFsdWU6Y291bnRyeUlEXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGRlY29kZVJlc3VsdDsKK30KKworLSAoQk9PTCljaGVja0NoZWNrc3VtOihOU1N0cmluZyAqKXMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoW1tzZWxmIGNsYXNzXSBjaGVja1N0YW5kYXJkVVBDRUFOQ2hlY2tzdW06c10pIHsKKyAgICByZXR1cm4gWUVTOworICB9IGVsc2UgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBOTzsKKyAgfQorfQorCisKKy8qKgorICogQ29tcHV0ZXMgdGhlIFVQQy9FQU4gY2hlY2tzdW0gb24gYSBzdHJpbmcgb2YgZGlnaXRzLCBhbmQgcmVwb3J0cworICogd2hldGhlciB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCBvciBub3QuCisgKi8KKysgKEJPT0wpY2hlY2tTdGFuZGFyZFVQQ0VBTkNoZWNrc3VtOihOU1N0cmluZyAqKXMgeworICBpbnQgbGVuZ3RoID0gKGludClbcyBsZW5ndGhdOworICBpZiAobGVuZ3RoID09IDApIHsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgaW50IHN1bSA9IDA7CisKKyAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDI7IGkgPj0gMDsgaSAtPSAyKSB7CisgICAgaW50IGRpZ2l0ID0gKGludClbcyBjaGFyYWN0ZXJBdEluZGV4OmldIC0gKGludCknMCc7CisgICAgaWYgKGRpZ2l0IDwgMCB8fCBkaWdpdCA+IDkpIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgc3VtICs9IGRpZ2l0OworICB9CisKKyAgc3VtICo9IDM7CisKKyAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAyKSB7CisgICAgaW50IGRpZ2l0ID0gKGludClbcyBjaGFyYWN0ZXJBdEluZGV4OmldIC0gKGludCknMCc7CisgICAgaWYgKGRpZ2l0IDwgMCB8fCBkaWdpdCA+IDkpIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgc3VtICs9IGRpZ2l0OworICB9CisKKyAgcmV0dXJuIHN1bSAlIDEwID09IDA7Cit9CisKKy0gKE5TUmFuZ2UpZGVjb2RlRW5kOihaWEJpdEFycmF5ICopcm93IGVuZFN0YXJ0OihpbnQpZW5kU3RhcnQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW1tzZWxmIGNsYXNzXSBmaW5kR3VhcmRQYXR0ZXJuOnJvdyByb3dPZmZzZXQ6ZW5kU3RhcnQgd2hpdGVGaXJzdDpOTyBwYXR0ZXJuOihpbnQgKilTVEFSVF9FTkRfUEFUVEVSTiBwYXR0ZXJuTGVuOlNUQVJUX0VORF9QQVRURVJOX0xFTiBlcnJvcjplcnJvcl07Cit9CisKKysgKE5TUmFuZ2UpZmluZEd1YXJkUGF0dGVybjooWlhCaXRBcnJheSAqKXJvdyByb3dPZmZzZXQ6KGludClyb3dPZmZzZXQgd2hpdGVGaXJzdDooQk9PTCl3aGl0ZUZpcnN0IHBhdHRlcm46KGludCAqKXBhdHRlcm4gcGF0dGVybkxlbjooaW50KXBhdHRlcm5MZW4gZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQgY291bnRlcnNbcGF0dGVybkxlbl07CisgIHJldHVybiBbc2VsZiBmaW5kR3VhcmRQYXR0ZXJuOnJvdyByb3dPZmZzZXQ6cm93T2Zmc2V0IHdoaXRlRmlyc3Q6d2hpdGVGaXJzdCBwYXR0ZXJuOnBhdHRlcm4gcGF0dGVybkxlbjpwYXR0ZXJuTGVuIGNvdW50ZXJzOmNvdW50ZXJzIGVycm9yOmVycm9yXTsKK30KKworKyAoTlNSYW5nZSlmaW5kR3VhcmRQYXR0ZXJuOihaWEJpdEFycmF5ICopcm93IHJvd09mZnNldDooaW50KXJvd09mZnNldCB3aGl0ZUZpcnN0OihCT09MKXdoaXRlRmlyc3QgcGF0dGVybjooaW50ICopcGF0dGVybiBwYXR0ZXJuTGVuOihpbnQpcGF0dGVybkxlbiBjb3VudGVyczooaW50ICopY291bnRlcnMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm5MZW47CisgIG1lbXNldChjb3VudGVycywgMCwgcGF0dGVybkxlbmd0aCAqIHNpemVvZihpbnQpKTsKKyAgaW50IHdpZHRoID0gcm93LnNpemU7CisKKyAgQk9PTCBpc1doaXRlID0gd2hpdGVGaXJzdDsKKyAgcm93T2Zmc2V0ID0gd2hpdGVGaXJzdCA/IFtyb3cgbmV4dFVuc2V0OnJvd09mZnNldF0gOiBbcm93IG5leHRTZXQ6cm93T2Zmc2V0XTsKKyAgaW50IGNvdW50ZXJQb3NpdGlvbiA9IDA7CisgIGludCBwYXR0ZXJuU3RhcnQgPSByb3dPZmZzZXQ7CisKKyAgZm9yIChpbnQgeCA9IHJvd09mZnNldDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICBpZiAoW3JvdyBnZXQ6eF0gXiBpc1doaXRlKSB7CisgICAgICBjb3VudGVyc1tjb3VudGVyUG9zaXRpb25dKys7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChjb3VudGVyUG9zaXRpb24gPT0gcGF0dGVybkxlbmd0aCAtIDEpIHsKKyAgICAgICAgaWYgKFtzZWxmIHBhdHRlcm5NYXRjaFZhcmlhbmNlOmNvdW50ZXJzIGNvdW50ZXJzU2l6ZTpwYXR0ZXJuTGVuZ3RoIHBhdHRlcm46cGF0dGVybiBtYXhJbmRpdmlkdWFsVmFyaWFuY2U6TUFYX0lORElWSURVQUxfVkFSSUFOQ0VdIDwgTUFYX0FWR19WQVJJQU5DRSkgeworICAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShwYXR0ZXJuU3RhcnQsIHggLSBwYXR0ZXJuU3RhcnQpOworICAgICAgICB9CisgICAgICAgIHBhdHRlcm5TdGFydCArPSBjb3VudGVyc1swXSArIGNvdW50ZXJzWzFdOworCisgICAgICAgIGZvciAoaW50IHkgPSAyOyB5IDwgcGF0dGVybkxlbmd0aDsgeSsrKSB7CisgICAgICAgICAgY291bnRlcnNbeSAtIDJdID0gY291bnRlcnNbeV07CisgICAgICAgIH0KKworICAgICAgICBjb3VudGVyc1twYXR0ZXJuTGVuZ3RoIC0gMl0gPSAwOworICAgICAgICBjb3VudGVyc1twYXR0ZXJuTGVuZ3RoIC0gMV0gPSAwOworICAgICAgICBjb3VudGVyUG9zaXRpb24tLTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNvdW50ZXJQb3NpdGlvbisrOworICAgICAgfQorICAgICAgY291bnRlcnNbY291bnRlclBvc2l0aW9uXSA9IDE7CisgICAgICBpc1doaXRlID0gIWlzV2hpdGU7CisgICAgfQorICB9CisKKyAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworfQorCisKKy8qKgorICogQXR0ZW1wdHMgdG8gZGVjb2RlIGEgc2luZ2xlIFVQQy9FQU4tZW5jb2RlZCBkaWdpdC4KKyAqLworKyAoaW50KWRlY29kZURpZ2l0OihaWEJpdEFycmF5ICopcm93IGNvdW50ZXJzOihpbnRbXSljb3VudGVycyBjb3VudGVyc0xlbjooaW50KWNvdW50ZXJzTGVuIHJvd09mZnNldDooaW50KXJvd09mZnNldCBwYXR0ZXJuVHlwZTooVVBDX0VBTl9QQVRURVJOUylwYXR0ZXJuVHlwZSBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGlmICghW3NlbGYgcmVjb3JkUGF0dGVybjpyb3cgc3RhcnQ6cm93T2Zmc2V0IGNvdW50ZXJzOmNvdW50ZXJzIGNvdW50ZXJzU2l6ZTpjb3VudGVyc0xlbl0pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiAtMTsKKyAgfQorICBpbnQgYmVzdFZhcmlhbmNlID0gTUFYX0FWR19WQVJJQU5DRTsKKyAgaW50IGJlc3RNYXRjaCA9IC0xOworICBpbnQgbWF4ID0gMDsKKyAgc3dpdGNoIChwYXR0ZXJuVHlwZSkgeworICAgIGNhc2UgVVBDX0VBTl9QQVRURVJOU19MX1BBVFRFUk5TOgorICAgICAgbWF4ID0gTF9QQVRURVJOU19MRU47CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heDsgaSsrKSB7CisgICAgICAgIGludCBwYXR0ZXJuW2NvdW50ZXJzTGVuXTsKKyAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IGNvdW50ZXJzTGVuOyBqKyspeworICAgICAgICAgIHBhdHRlcm5bal0gPSBMX1BBVFRFUk5TW2ldW2pdOworICAgICAgICB9CisKKyAgICAgICAgaW50IHZhcmlhbmNlID0gW3NlbGYgcGF0dGVybk1hdGNoVmFyaWFuY2U6Y291bnRlcnMgY291bnRlcnNTaXplOmNvdW50ZXJzTGVuIHBhdHRlcm46cGF0dGVybiBtYXhJbmRpdmlkdWFsVmFyaWFuY2U6TUFYX0lORElWSURVQUxfVkFSSUFOQ0VdOworICAgICAgICBpZiAodmFyaWFuY2UgPCBiZXN0VmFyaWFuY2UpIHsKKyAgICAgICAgICBiZXN0VmFyaWFuY2UgPSB2YXJpYW5jZTsKKyAgICAgICAgICBiZXN0TWF0Y2ggPSBpOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFVQQ19FQU5fUEFUVEVSTlNfTF9BTkRfR19QQVRURVJOUzoKKyAgICAgIG1heCA9IExfQU5EX0dfUEFUVEVSTlNfTEVOOworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXg7IGkrKykgeworICAgICAgICBpbnQgcGF0dGVybltjb3VudGVyc0xlbl07CisgICAgICAgIGZvcihpbnQgaiA9IDA7IGo8IGNvdW50ZXJzTGVuOyBqKyspeworICAgICAgICAgIHBhdHRlcm5bal0gPSBMX0FORF9HX1BBVFRFUk5TW2ldW2pdOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgdmFyaWFuY2UgPSBbc2VsZiBwYXR0ZXJuTWF0Y2hWYXJpYW5jZTpjb3VudGVycyBjb3VudGVyc1NpemU6Y291bnRlcnNMZW4gcGF0dGVybjpwYXR0ZXJuIG1heEluZGl2aWR1YWxWYXJpYW5jZTpNQVhfSU5ESVZJRFVBTF9WQVJJQU5DRV07CisgICAgICAgIGlmICh2YXJpYW5jZSA8IGJlc3RWYXJpYW5jZSkgeworICAgICAgICAgIGJlc3RWYXJpYW5jZSA9IHZhcmlhbmNlOworICAgICAgICAgIGJlc3RNYXRjaCA9IGk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIGlmIChiZXN0TWF0Y2ggPj0gMCkgeworICAgIHJldHVybiBiZXN0TWF0Y2g7CisgIH0gZWxzZSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gLTE7CisgIH0KK30KKworLyoqCisgKiBHZXQgdGhlIGZvcm1hdCBvZiB0aGlzIGRlY29kZXIuCisgKi8KKy0gKFpYQmFyY29kZUZvcm1hdCliYXJjb2RlRm9ybWF0IHsKKyAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiWW91IG11c3Qgb3ZlcnJpZGUgJUAgaW4gYSBzdWJjbGFzcyIsIE5TU3RyaW5nRnJvbVNlbGVjdG9yKF9jbWQpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07Cit9CisKKworLyoqCisgKiBTdWJjbGFzc2VzIG92ZXJyaWRlIHRoaXMgdG8gZGVjb2RlIHRoZSBwb3J0aW9uIG9mIGEgYmFyY29kZSBiZXR3ZWVuIHRoZSBzdGFydAorICogYW5kIGVuZCBndWFyZCBwYXR0ZXJucy4KKyAqLworLSAoaW50KWRlY29kZU1pZGRsZTooWlhCaXRBcnJheSAqKXJvdyBzdGFydFJhbmdlOihOU1JhbmdlKXN0YXJ0UmFuZ2UgcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJZb3UgbXVzdCBvdmVycmlkZSAlQCBpbiBhIHN1YmNsYXNzIiwgTlNTdHJpbmdGcm9tU2VsZWN0b3IoX2NtZCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhVUENFQU5Xcml0ZXIuaCBiL1pYaW5nT2JqQy9vbmVkL1pYVVBDRUFOV3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzNjE5MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYVVBDRUFOV3JpdGVyLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIuaCIKKworLyoqCisgKiBFbmNhcHN1bGF0ZXMgZnVuY3Rpb25hbGl0eSBhbmQgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBjb21tb24gdG8gVVBDIGFuZCBFQU4gZmFtaWxpZXMKKyAqIG9mIG9uZS1kaW1lbnNpb25hbCBiYXJjb2Rlcy4KKyAqLworCitAaW50ZXJmYWNlIFpYVVBDRUFOV3JpdGVyIDogWlhPbmVEaW1lbnNpb25hbENvZGVXcml0ZXIKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhVUENFQU5Xcml0ZXIubSBiL1pYaW5nT2JqQy9vbmVkL1pYVVBDRUFOV3JpdGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiMWIzYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL1pYVVBDRUFOV3JpdGVyLm0KQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCYXJjb2RlRm9ybWF0LmgiCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhVUENFQU5SZWFkZXIuaCIKKyNpbXBvcnQgIlpYVVBDRUFOV3JpdGVyLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFVQQ0VBTldyaXRlcgorCistIChpbnQpZGVmYXVsdE1hcmdpbiB7CisgIC8vIFVzZSBhIGRpZmZlcmVudCBkZWZhdWx0IG1vcmUgYXBwcm9wcmlhdGUgZm9yIFVQQy9FQU4KKyAgcmV0dXJuIFNUQVJUX0VORF9QQVRURVJOX0xFTjsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhVUENFUmVhZGVyLmggYi9aWGluZ09iakMvb25lZC9aWFVQQ0VSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjRjNTZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhVUENFUmVhZGVyLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCYXJjb2RlRm9ybWF0LmgiCisjaW1wb3J0ICJaWFVQQ0VBTlJlYWRlci5oIgorCisvKioKKyAqIEltcGxlbWVudHMgZGVjb2Rpbmcgb2YgdGhlIFVQQy1FIGZvcm1hdC4KKyAqIAorICogaHR0cDovL3d3dy5iYXJjb2RlaXNsYW5kLmNvbS91cGNlLnBodG1sIGlzIGEgZ3JlYXQgcmVmZXJlbmNlIGZvciBVUEMtRSBpbmZvcm1hdGlvbi4KKyAqLworCitAaW50ZXJmYWNlIFpYVVBDRVJlYWRlciA6IFpYVVBDRUFOUmVhZGVyCisKKysgKE5TU3RyaW5nICopY29udmVydFVQQ0V0b1VQQ0E6KE5TU3RyaW5nICopdXBjZTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvWlhVUENFUmVhZGVyLm0gYi9aWGluZ09iakMvb25lZC9aWFVQQ0VSZWFkZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTBlOWUwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvWlhVUENFUmVhZGVyLm0KQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0QXJyYXkuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWFVQQ0VSZWFkZXIuaCIKKworLyoqCisgKiBUaGUgcGF0dGVybiB0aGF0IG1hcmtzIHRoZSBtaWRkbGUsIGFuZCBlbmQsIG9mIGEgVVBDLUUgcGF0dGVybi4KKyAqIFRoZXJlIGlzIG5vICJzZWNvbmQgaGFsZiIgdG8gYSBVUEMtRSBiYXJjb2RlLgorICovCisjZGVmaW5lIE1JRERMRV9FTkRfUEFUVEVSTl9MRU4gNgorY29uc3QgaW50IE1JRERMRV9FTkRfUEFUVEVSTltNSURETEVfRU5EX1BBVFRFUk5fTEVOXSA9IHsxLCAxLCAxLCAxLCAxLCAxfTsKKworLyoqCisgKiBTZWUge0BsaW5rICNMX0FORF9HX1BBVFRFUk5TfTsgdGhlc2UgdmFsdWVzIHNpbWlsYXJseSByZXByZXNlbnQgcGF0dGVybnMgb2YKKyAqIGV2ZW4tb2RkIHBhcml0eSBlbmNvZGluZ3Mgb2YgZGlnaXRzIHRoYXQgaW1wbHkgYm90aCB0aGUgbnVtYmVyIHN5c3RlbSAoMCBvciAxKQorICogdXNlZCwgYW5kIHRoZSBjaGVjayBkaWdpdC4KKyAqLworY29uc3QgaW50IE5VTVNZU19BTkRfQ0hFQ0tfRElHSVRfUEFUVEVSTlNbMl1bMTBdID0geworICB7MHgzOCwgMHgzNCwgMHgzMiwgMHgzMSwgMHgyQywgMHgyNiwgMHgyMywgMHgyQSwgMHgyOSwgMHgyNX0sCisgIHsweDA3LCAweDBCLCAweDBELCAweDBFLCAweDEzLCAweDE5LCAweDFDLCAweDE1LCAweDE2LCAweDFBfQorfTsKKworQGludGVyZmFjZSBaWFVQQ0VSZWFkZXIgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50ICpkZWNvZGVNaWRkbGVDb3VudGVyczsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhVUENFUmVhZGVyCisKKy0gKGlkKWluaXQgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9kZWNvZGVNaWRkbGVDb3VudGVycyA9IChpbnQgKiltYWxsb2Moc2l6ZW9mKDQpICogc2l6ZW9mKGludCkpOworICAgIF9kZWNvZGVNaWRkbGVDb3VudGVyc1swXSA9IDA7CisgICAgX2RlY29kZU1pZGRsZUNvdW50ZXJzWzFdID0gMDsKKyAgICBfZGVjb2RlTWlkZGxlQ291bnRlcnNbMl0gPSAwOworICAgIF9kZWNvZGVNaWRkbGVDb3VudGVyc1szXSA9IDA7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jIHsKKyAgaWYgKF9kZWNvZGVNaWRkbGVDb3VudGVycyAhPSBOVUxMKSB7CisgICAgZnJlZShfZGVjb2RlTWlkZGxlQ291bnRlcnMpOworICAgIF9kZWNvZGVNaWRkbGVDb3VudGVycyA9IE5VTEw7CisgIH0KK30KKworLSAoaW50KWRlY29kZU1pZGRsZTooWlhCaXRBcnJheSAqKXJvdyBzdGFydFJhbmdlOihOU1JhbmdlKXN0YXJ0UmFuZ2UgcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBjb25zdCBpbnQgY291bnRlcnNMZW4gPSA0OworICBpbnQgY291bnRlcnNbY291bnRlcnNMZW5dOworICBtZW1zZXQoY291bnRlcnMsIDAsIGNvdW50ZXJzTGVuICogc2l6ZW9mKGludCkpOworCisgIGludCBlbmQgPSBbcm93IHNpemVdOworICBpbnQgcm93T2Zmc2V0ID0gKGludClOU01heFJhbmdlKHN0YXJ0UmFuZ2UpOworICBpbnQgbGdQYXR0ZXJuRm91bmQgPSAwOworCisgIGZvciAoaW50IHggPSAwOyB4IDwgNiAmJiByb3dPZmZzZXQgPCBlbmQ7IHgrKykgeworICAgIGludCBiZXN0TWF0Y2ggPSBbWlhVUENFQU5SZWFkZXIgZGVjb2RlRGlnaXQ6cm93IGNvdW50ZXJzOmNvdW50ZXJzIGNvdW50ZXJzTGVuOmNvdW50ZXJzTGVuIHJvd09mZnNldDpyb3dPZmZzZXQgcGF0dGVyblR5cGU6VVBDX0VBTl9QQVRURVJOU19MX0FORF9HX1BBVFRFUk5TIGVycm9yOmVycm9yXTsKKyAgICBpZiAoYmVzdE1hdGNoID09IC0xKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoJzAnICsgYmVzdE1hdGNoICUgMTApXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKGNvdW50ZXJzKSAvIHNpemVvZihpbnQpOyBpKyspIHsKKyAgICAgIHJvd09mZnNldCArPSBjb3VudGVyc1tpXTsKKyAgICB9CisKKyAgICBpZiAoYmVzdE1hdGNoID49IDEwKSB7CisgICAgICBsZ1BhdHRlcm5Gb3VuZCB8PSAxIDw8ICg1IC0geCk7CisgICAgfQorICB9CisKKyAgaWYgKCFbc2VsZiBkZXRlcm1pbmVOdW1TeXNBbmRDaGVja0RpZ2l0OnJlc3VsdCBsZ1BhdHRlcm5Gb3VuZDpsZ1BhdHRlcm5Gb3VuZF0pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gcm93T2Zmc2V0OworfQorCistIChOU1JhbmdlKWRlY29kZUVuZDooWlhCaXRBcnJheSAqKXJvdyBlbmRTdGFydDooaW50KWVuZFN0YXJ0IGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtaWFVQQ0VBTlJlYWRlciBmaW5kR3VhcmRQYXR0ZXJuOnJvdyByb3dPZmZzZXQ6ZW5kU3RhcnQgd2hpdGVGaXJzdDpZRVMgcGF0dGVybjooaW50ICopTUlERExFX0VORF9QQVRURVJOIHBhdHRlcm5MZW46TUlERExFX0VORF9QQVRURVJOX0xFTiBlcnJvcjplcnJvcl07Cit9CisKKy0gKEJPT0wpY2hlY2tDaGVja3N1bTooTlNTdHJpbmcgKilzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtzdXBlciBjaGVja0NoZWNrc3VtOltaWFVQQ0VSZWFkZXIgY29udmVydFVQQ0V0b1VQQ0E6c10gZXJyb3I6ZXJyb3JdOworfQorCistIChCT09MKWRldGVybWluZU51bVN5c0FuZENoZWNrRGlnaXQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdFN0cmluZyBsZ1BhdHRlcm5Gb3VuZDooaW50KWxnUGF0dGVybkZvdW5kIHsKKyAgZm9yIChpbnQgbnVtU3lzID0gMDsgbnVtU3lzIDw9IDE7IG51bVN5cysrKSB7CisgICAgZm9yIChpbnQgZCA9IDA7IGQgPCAxMDsgZCsrKSB7CisgICAgICBpZiAobGdQYXR0ZXJuRm91bmQgPT0gTlVNU1lTX0FORF9DSEVDS19ESUdJVF9QQVRURVJOU1tudW1TeXNdW2RdKSB7CisgICAgICAgIFtyZXN1bHRTdHJpbmcgaW5zZXJ0U3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUMiLCAodW5pY2hhcikoJzAnICsgbnVtU3lzKV0gYXRJbmRleDowXTsKKyAgICAgICAgW3Jlc3VsdFN0cmluZyBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSgnMCcgKyBkKV07CisgICAgICAgIHJldHVybiBZRVM7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5POworfQorCistIChaWEJhcmNvZGVGb3JtYXQpYmFyY29kZUZvcm1hdCB7CisgIHJldHVybiBrQmFyY29kZUZvcm1hdFVQQ0U7Cit9CisKKy8qKgorICogRXhwYW5kcyBhIFVQQy1FIHZhbHVlIGJhY2sgaW50byBpdHMgZnVsbCwgZXF1aXZhbGVudCBVUEMtQSBjb2RlIHZhbHVlLgorICovCisrIChOU1N0cmluZyAqKWNvbnZlcnRVUENFdG9VUENBOihOU1N0cmluZyAqKXVwY2UgeworICBOU1N0cmluZyAqdXBjZUNoYXJzID0gW3VwY2Ugc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKDEsIDYpXTsKKyAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhDYXBhY2l0eToxMl07CisgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCBbdXBjZSBjaGFyYWN0ZXJBdEluZGV4OjBdXTsKKyAgdW5pY2hhciBsYXN0Q2hhciA9IFt1cGNlQ2hhcnMgY2hhcmFjdGVyQXRJbmRleDo1XTsKKyAgc3dpdGNoIChsYXN0Q2hhcikgeworICAgIGNhc2UgJzAnOgorICAgIGNhc2UgJzEnOgorICAgIGNhc2UgJzInOgorICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6W3VwY2VDaGFycyBzdWJzdHJpbmdUb0luZGV4OjJdXTsKKyAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCBsYXN0Q2hhcl07CisgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIjAwMDAiXTsKKyAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOlt1cGNlQ2hhcnMgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKDIsIDMpXV07CisgICAgICBicmVhazsKKyAgICBjYXNlICczJzoKKyAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOlt1cGNlQ2hhcnMgc3Vic3RyaW5nVG9JbmRleDozXV07CisgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIjAwMDAwIl07CisgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpbdXBjZUNoYXJzIHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZSgzLCAyKV1dOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnNCc6CisgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpbdXBjZUNoYXJzIHN1YnN0cmluZ1RvSW5kZXg6NF1dOworICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIwMDAwMCJdOworICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6W3VwY2VDaGFycyBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UoNCwgMSldXTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpbdXBjZUNoYXJzIHN1YnN0cmluZ1RvSW5kZXg6NV1dOworICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIwMDAwIl07CisgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgbGFzdENoYXJdOworICAgICAgYnJlYWs7CisgIH0KKyAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsIFt1cGNlIGNoYXJhY3RlckF0SW5kZXg6N11dOworICByZXR1cm4gcmVzdWx0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvWlhBYnN0cmFjdFJTU1JlYWRlci5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL1pYQWJzdHJhY3RSU1NSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzM3YmExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL1pYQWJzdHJhY3RSU1NSZWFkZXIuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWE9uZURSZWFkZXIuaCIKKwordHlwZWRlZiBlbnVtIHsKKwlSU1NfUEFUVEVSTlNfUlNTMTRfUEFUVEVSTlMgPSAwLAorCVJTU19QQVRURVJOU19SU1NfRVhQQU5ERURfUEFUVEVSTlMKK30gUlNTX1BBVFRFUk5TOworCitAaW50ZXJmYWNlIFpYQWJzdHJhY3RSU1NSZWFkZXIgOiBaWE9uZURSZWFkZXIKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCAqZGVjb2RlRmluZGVyQ291bnRlcnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgdW5zaWduZWQgaW50IGRlY29kZUZpbmRlckNvdW50ZXJzTGVuOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCAqZGF0YUNoYXJhY3RlckNvdW50ZXJzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIHVuc2lnbmVkIGludCBkYXRhQ2hhcmFjdGVyQ291bnRlcnNMZW47CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgZmxvYXQgKm9kZFJvdW5kaW5nRXJyb3JzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIHVuc2lnbmVkIGludCBvZGRSb3VuZGluZ0Vycm9yc0xlbjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBmbG9hdCAqZXZlblJvdW5kaW5nRXJyb3JzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIHVuc2lnbmVkIGludCBldmVuUm91bmRpbmdFcnJvcnNMZW47CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50ICpvZGRDb3VudHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgdW5zaWduZWQgaW50IG9kZENvdW50c0xlbjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgKmV2ZW5Db3VudHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgdW5zaWduZWQgaW50IGV2ZW5Db3VudHNMZW47CisKKysgKGludClwYXJzZUZpbmRlclZhbHVlOihpbnQgKiljb3VudGVycyBjb3VudGVyc1NpemU6KHVuc2lnbmVkIGludCljb3VudGVyc1NpemUgZmluZGVyUGF0dGVyblR5cGU6KFJTU19QQVRURVJOUylmaW5kZXJQYXR0ZXJuVHlwZTsKKysgKGludCljb3VudDooaW50ICopYXJyYXkgYXJyYXlMZW46KHVuc2lnbmVkIGludClhcnJheUxlbjsKKysgKHZvaWQpaW5jcmVtZW50OihpbnQgKilhcnJheSBhcnJheUxlbjoodW5zaWduZWQgaW50KWFycmF5TGVuIGVycm9yczooZmxvYXQgKillcnJvcnM7CisrICh2b2lkKWRlY3JlbWVudDooaW50ICopYXJyYXkgYXJyYXlMZW46KHVuc2lnbmVkIGludClhcnJheUxlbiBlcnJvcnM6KGZsb2F0ICopZXJyb3JzOworKyAoQk9PTClpc0ZpbmRlclBhdHRlcm46KGludCAqKWNvdW50ZXJzIGNvdW50ZXJzTGVuOih1bnNpZ25lZCBpbnQpY291bnRlcnNMZW47CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWEFic3RyYWN0UlNTUmVhZGVyLm0gYi9aWGluZ09iakMvb25lZC9yc3MvWlhBYnN0cmFjdFJTU1JlYWRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMzk5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvWlhBYnN0cmFjdFJTU1JlYWRlci5tCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFic3RyYWN0UlNTUmVhZGVyLmgiCisKK3N0YXRpYyBpbnQgTUFYX0FWR19WQVJJQU5DRTsKK3N0YXRpYyBpbnQgTUFYX0lORElWSURVQUxfVkFSSUFOQ0U7CisKK2Zsb2F0IGNvbnN0IE1JTl9GSU5ERVJfUEFUVEVSTl9SQVRJTyA9IDkuNWYgLyAxMi4wZjsKK2Zsb2F0IGNvbnN0IE1BWF9GSU5ERVJfUEFUVEVSTl9SQVRJTyA9IDEyLjVmIC8gMTQuMGY7CisKKyNkZWZpbmUgUlNTMTRfRklOREVSX1BBVFRFUk5TX0xFTiA5CisjZGVmaW5lIFJTUzE0X0ZJTkRFUl9QQVRURVJOU19TVUJfTEVOIDQKK2NvbnN0IGludCBSU1MxNF9GSU5ERVJfUEFUVEVSTlNbUlNTMTRfRklOREVSX1BBVFRFUk5TX0xFTl1bUlNTMTRfRklOREVSX1BBVFRFUk5TX1NVQl9MRU5dID0geworICB7Myw4LDIsMX0sCisgIHszLDUsNSwxfSwKKyAgezMsMyw3LDF9LAorICB7MywxLDksMX0sCisgIHsyLDcsNCwxfSwKKyAgezIsNSw2LDF9LAorICB7MiwzLDgsMX0sCisgIHsxLDUsNywxfSwKKyAgezEsMyw5LDF9LAorfTsKKworI2RlZmluZSBSU1NfRVhQQU5ERURfRklOREVSX1BBVFRFUk5TX0xFTiA2CisjZGVmaW5lIFJTU19FWFBBTkRFRF9GSU5ERVJfUEFUVEVSTlNfU1VCX0xFTiA0Citjb25zdCBpbnQgUlNTX0VYUEFOREVEX0ZJTkRFUl9QQVRURVJOU1tSU1NfRVhQQU5ERURfRklOREVSX1BBVFRFUk5TX0xFTl1bUlNTX0VYUEFOREVEX0ZJTkRFUl9QQVRURVJOU19TVUJfTEVOXSA9IHsKKyAgezEsOCw0LDF9LCAvLyBBCisgIHszLDYsNCwxfSwgLy8gQgorICB7Myw0LDYsMX0sIC8vIEMKKyAgezMsMiw4LDF9LCAvLyBECisgIHsyLDYsNSwxfSwgLy8gRQorICB7MiwyLDksMX0gIC8vIEYKK307CisKK0BpbXBsZW1lbnRhdGlvbiBaWEFic3RyYWN0UlNTUmVhZGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZSB7CisgIE1BWF9BVkdfVkFSSUFOQ0UgPSAoaW50KShQQVRURVJOX01BVENIX1JFU1VMVF9TQ0FMRV9GQUNUT1IgKiAwLjJmKTsKKyAgTUFYX0lORElWSURVQUxfVkFSSUFOQ0UgPSAoaW50KShQQVRURVJOX01BVENIX1JFU1VMVF9TQ0FMRV9GQUNUT1IgKiAwLjQ1Zik7Cit9CisKKy0gKGlkKWluaXQgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9kZWNvZGVGaW5kZXJDb3VudGVyc0xlbiA9IDQ7CisgICAgX2RlY29kZUZpbmRlckNvdW50ZXJzID0gKGludCAqKW1hbGxvYyhfZGVjb2RlRmluZGVyQ291bnRlcnNMZW4gKiBzaXplb2YoaW50KSk7CisgICAgbWVtc2V0KHNlbGYuZGVjb2RlRmluZGVyQ291bnRlcnMsIDAsIHNlbGYuZGVjb2RlRmluZGVyQ291bnRlcnNMZW4gKiBzaXplb2YoaW50KSk7CisKKyAgICBfZGF0YUNoYXJhY3RlckNvdW50ZXJzTGVuID0gODsKKyAgICBfZGF0YUNoYXJhY3RlckNvdW50ZXJzID0gKGludCAqKW1hbGxvYyhfZGF0YUNoYXJhY3RlckNvdW50ZXJzTGVuICogc2l6ZW9mKGludCkpOworICAgIG1lbXNldChzZWxmLmRhdGFDaGFyYWN0ZXJDb3VudGVycywgMCwgc2VsZi5kYXRhQ2hhcmFjdGVyQ291bnRlcnNMZW4gKiBzaXplb2YoaW50KSk7CisKKyAgICBfb2RkUm91bmRpbmdFcnJvcnNMZW4gPSA0OworICAgIF9vZGRSb3VuZGluZ0Vycm9ycyA9IChmbG9hdCAqKW1hbGxvYyhfb2RkUm91bmRpbmdFcnJvcnNMZW4gKiBzaXplb2YoZmxvYXQpKTsKKyAgICBtZW1zZXQoX29kZFJvdW5kaW5nRXJyb3JzLCAwLCBfb2RkUm91bmRpbmdFcnJvcnNMZW4gKiBzaXplb2YoZmxvYXQpKTsKKworICAgIF9ldmVuUm91bmRpbmdFcnJvcnNMZW4gPSA0OworICAgIF9ldmVuUm91bmRpbmdFcnJvcnMgPSAoZmxvYXQgKiltYWxsb2MoX2V2ZW5Sb3VuZGluZ0Vycm9yc0xlbiAqIHNpemVvZihmbG9hdCkpOworICAgIG1lbXNldChfZXZlblJvdW5kaW5nRXJyb3JzLCAwLCBfZXZlblJvdW5kaW5nRXJyb3JzTGVuICogc2l6ZW9mKGZsb2F0KSk7CisKKyAgICBfb2RkQ291bnRzTGVuID0gX2RhdGFDaGFyYWN0ZXJDb3VudGVyc0xlbiAvIDI7CisgICAgX29kZENvdW50cyA9IChpbnQgKiltYWxsb2MoX29kZENvdW50c0xlbiAqIHNpemVvZihpbnQpKTsKKyAgICBtZW1zZXQoX29kZENvdW50cywgMCwgX29kZENvdW50c0xlbiAqIHNpemVvZihpbnQpKTsKKworICAgIF9ldmVuQ291bnRzTGVuID0gX2RhdGFDaGFyYWN0ZXJDb3VudGVyc0xlbiAvIDI7CisgICAgX2V2ZW5Db3VudHMgPSAoaW50ICopbWFsbG9jKF9ldmVuQ291bnRzTGVuICogc2l6ZW9mKGludCkpOworICAgIG1lbXNldChfZXZlbkNvdW50cywgMCwgX2V2ZW5Db3VudHNMZW4gKiBzaXplb2YoaW50KSk7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jIHsKKyAgaWYgKF9kZWNvZGVGaW5kZXJDb3VudGVycyAhPSBOVUxMKSB7CisgICAgZnJlZShfZGVjb2RlRmluZGVyQ291bnRlcnMpOworICAgIF9kZWNvZGVGaW5kZXJDb3VudGVycyA9IE5VTEw7CisgIH0KKworICBpZiAoX2RhdGFDaGFyYWN0ZXJDb3VudGVycyAhPSBOVUxMKSB7CisgICAgZnJlZShfZGF0YUNoYXJhY3RlckNvdW50ZXJzKTsKKyAgICBfZGF0YUNoYXJhY3RlckNvdW50ZXJzID0gTlVMTDsKKyAgfQorCisgIGlmIChfb2RkUm91bmRpbmdFcnJvcnMgIT0gTlVMTCkgeworICAgIGZyZWUoX29kZFJvdW5kaW5nRXJyb3JzKTsKKyAgICBfb2RkUm91bmRpbmdFcnJvcnMgPSBOVUxMOworICB9CisKKyAgaWYgKF9ldmVuUm91bmRpbmdFcnJvcnMgIT0gTlVMTCkgeworICAgIGZyZWUoX2V2ZW5Sb3VuZGluZ0Vycm9ycyk7CisgICAgX2V2ZW5Sb3VuZGluZ0Vycm9ycyA9IE5VTEw7CisgIH0KKworICBpZiAoX29kZENvdW50cyAhPSBOVUxMKSB7CisgICAgZnJlZShfb2RkQ291bnRzKTsKKyAgICBfb2RkQ291bnRzID0gTlVMTDsKKyAgfQorCisgIGlmIChfZXZlbkNvdW50cyAhPSBOVUxMKSB7CisgICAgZnJlZShfZXZlbkNvdW50cyk7CisgICAgX2V2ZW5Db3VudHMgPSBOVUxMOworICB9Cit9CisKKysgKGludClwYXJzZUZpbmRlclZhbHVlOihpbnQgKiljb3VudGVycyBjb3VudGVyc1NpemU6KHVuc2lnbmVkIGludCljb3VudGVyc1NpemUgZmluZGVyUGF0dGVyblR5cGU6KFJTU19QQVRURVJOUylmaW5kZXJQYXR0ZXJuVHlwZSB7CisgIHN3aXRjaCAoZmluZGVyUGF0dGVyblR5cGUpIHsKKyAgICBjYXNlIFJTU19QQVRURVJOU19SU1MxNF9QQVRURVJOUzoKKyAgICAgIGZvciAoaW50IHZhbHVlID0gMDsgdmFsdWUgPCBSU1MxNF9GSU5ERVJfUEFUVEVSTlNfTEVOOyB2YWx1ZSsrKSB7CisgICAgICAgIGlmIChbc2VsZiBwYXR0ZXJuTWF0Y2hWYXJpYW5jZTpjb3VudGVycyBjb3VudGVyc1NpemU6Y291bnRlcnNTaXplIHBhdHRlcm46KGludCAqKVJTUzE0X0ZJTkRFUl9QQVRURVJOU1t2YWx1ZV0gbWF4SW5kaXZpZHVhbFZhcmlhbmNlOk1BWF9JTkRJVklEVUFMX1ZBUklBTkNFXSA8IE1BWF9BVkdfVkFSSUFOQ0UpIHsKKyAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBSU1NfUEFUVEVSTlNfUlNTX0VYUEFOREVEX1BBVFRFUk5TOgorICAgICAgZm9yIChpbnQgdmFsdWUgPSAwOyB2YWx1ZSA8IFJTU19FWFBBTkRFRF9GSU5ERVJfUEFUVEVSTlNfTEVOOyB2YWx1ZSsrKSB7CisgICAgICAgIGlmIChbc2VsZiBwYXR0ZXJuTWF0Y2hWYXJpYW5jZTpjb3VudGVycyBjb3VudGVyc1NpemU6Y291bnRlcnNTaXplIHBhdHRlcm46KGludCAqKVJTU19FWFBBTkRFRF9GSU5ERVJfUEFUVEVSTlNbdmFsdWVdIG1heEluZGl2aWR1YWxWYXJpYW5jZTpNQVhfSU5ESVZJRFVBTF9WQVJJQU5DRV0gPCBNQVhfQVZHX1ZBUklBTkNFKSB7CisgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiAtMTsKK30KKworKyAoaW50KWNvdW50OihpbnQgKilhcnJheSBhcnJheUxlbjoodW5zaWduZWQgaW50KWFycmF5TGVuIHsKKyAgaW50IGNvdW50ID0gMDsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5TGVuOyBpKyspIHsKKyAgICBjb3VudCArPSBhcnJheVtpXTsKKyAgfQorCisgIHJldHVybiBjb3VudDsKK30KKworKyAodm9pZClpbmNyZW1lbnQ6KGludCAqKWFycmF5IGFycmF5TGVuOih1bnNpZ25lZCBpbnQpYXJyYXlMZW4gZXJyb3JzOihmbG9hdCAqKWVycm9ycyB7CisgIGludCBpbmRleCA9IDA7CisgIGZsb2F0IGJpZ2dlc3RFcnJvciA9IGVycm9yc1swXTsKKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcnJheUxlbjsgaSsrKSB7CisgICAgaWYgKGVycm9yc1tpXSA+IGJpZ2dlc3RFcnJvcikgeworICAgICAgYmlnZ2VzdEVycm9yID0gZXJyb3JzW2ldOworICAgICAgaW5kZXggPSBpOworICAgIH0KKyAgfQorICBhcnJheVtpbmRleF0rKzsKK30KKworKyAodm9pZClkZWNyZW1lbnQ6KGludCAqKWFycmF5IGFycmF5TGVuOih1bnNpZ25lZCBpbnQpYXJyYXlMZW4gZXJyb3JzOihmbG9hdCAqKWVycm9ycyB7CisgIGludCBpbmRleCA9IDA7CisgIGZsb2F0IGJpZ2dlc3RFcnJvciA9IGVycm9yc1swXTsKKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcnJheUxlbjsgaSsrKSB7CisgICAgaWYgKGVycm9yc1tpXSA8IGJpZ2dlc3RFcnJvcikgeworICAgICAgYmlnZ2VzdEVycm9yID0gZXJyb3JzW2ldOworICAgICAgaW5kZXggPSBpOworICAgIH0KKyAgfQorICBhcnJheVtpbmRleF0tLTsKK30KKworKyAoQk9PTClpc0ZpbmRlclBhdHRlcm46KGludCAqKWNvdW50ZXJzIGNvdW50ZXJzTGVuOih1bnNpZ25lZCBpbnQpY291bnRlcnNMZW4geworICBpbnQgZmlyc3RUd29TdW0gPSBjb3VudGVyc1swXSArIGNvdW50ZXJzWzFdOworICBpbnQgc3VtID0gZmlyc3RUd29TdW0gKyBjb3VudGVyc1syXSArIGNvdW50ZXJzWzNdOworICBmbG9hdCByYXRpbyA9IChmbG9hdClmaXJzdFR3b1N1bSAvIChmbG9hdClzdW07CisgIGlmIChyYXRpbyA+PSBNSU5fRklOREVSX1BBVFRFUk5fUkFUSU8gJiYgcmF0aW8gPD0gTUFYX0ZJTkRFUl9QQVRURVJOX1JBVElPKSB7CisgICAgaW50IG1pbkNvdW50ZXIgPSBJTlRfTUFYOworICAgIGludCBtYXhDb3VudGVyID0gSU5UX01JTjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ZXJzTGVuOyBpKyspIHsKKyAgICAgIGludCBjb3VudGVyID0gY291bnRlcnNbaV07CisgICAgICBpZiAoY291bnRlciA+IG1heENvdW50ZXIpIHsKKyAgICAgICAgbWF4Q291bnRlciA9IGNvdW50ZXI7CisgICAgICB9CisgICAgICBpZiAoY291bnRlciA8IG1pbkNvdW50ZXIpIHsKKyAgICAgICAgbWluQ291bnRlciA9IGNvdW50ZXI7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1heENvdW50ZXIgPCAxMCAqIG1pbkNvdW50ZXI7CisgIH0KKyAgcmV0dXJuIE5POworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvWlhEYXRhQ2hhcmFjdGVyLmggYi9aWGluZ09iakMvb25lZC9yc3MvWlhEYXRhQ2hhcmFjdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiYjI1OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWERhdGFDaGFyYWN0ZXIuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAaW50ZXJmYWNlIFpYRGF0YUNoYXJhY3RlciA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgdmFsdWU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGNoZWNrc3VtUG9ydGlvbjsKKworLSAoaWQpaW5pdFdpdGhWYWx1ZTooaW50KXZhbHVlIGNoZWNrc3VtUG9ydGlvbjooaW50KWNoZWNrc3VtUG9ydGlvbjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL1pYRGF0YUNoYXJhY3Rlci5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL1pYRGF0YUNoYXJhY3Rlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOGZmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvWlhEYXRhQ2hhcmFjdGVyLm0KQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhEYXRhQ2hhcmFjdGVyLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWERhdGFDaGFyYWN0ZXIKKworLSAoaWQpaW5pdFdpdGhWYWx1ZTooaW50KXZhbHVlIGNoZWNrc3VtUG9ydGlvbjooaW50KWNoZWNrc3VtUG9ydGlvbiB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3ZhbHVlID0gdmFsdWU7CisgICAgX2NoZWNrc3VtUG9ydGlvbiA9IGNoZWNrc3VtUG9ydGlvbjsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKKyAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQoJWQpIiwgc2VsZi52YWx1ZSwgc2VsZi5jaGVja3N1bVBvcnRpb25dOworfQorCistIChCT09MKWlzRXF1YWw6KGlkKW9iamVjdCB7CisgIGlmICghW29iamVjdCBpc0tpbmRPZkNsYXNzOltaWERhdGFDaGFyYWN0ZXIgY2xhc3NdXSkgeworICAgIHJldHVybiBOTzsKKyAgfQorCisgIFpYRGF0YUNoYXJhY3RlciAqdGhhdCA9IChaWERhdGFDaGFyYWN0ZXIgKilvYmplY3Q7CisgIHJldHVybiAoc2VsZi52YWx1ZSA9PSB0aGF0LnZhbHVlKSAmJiAoc2VsZi5jaGVja3N1bVBvcnRpb24gPT0gdGhhdC5jaGVja3N1bVBvcnRpb24pOworfQorCistIChOU1VJbnRlZ2VyKWhhc2ggeworICByZXR1cm4gc2VsZi52YWx1ZSBeIHNlbGYuY2hlY2tzdW1Qb3J0aW9uOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvWlhQYWlyLmggYi9aWGluZ09iakMvb25lZC9yc3MvWlhQYWlyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxNTBiMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWFBhaXIuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERhdGFDaGFyYWN0ZXIuaCIKKworQGNsYXNzIFpYUlNTRmluZGVyUGF0dGVybjsKKworQGludGVyZmFjZSBaWFBhaXIgOiBaWERhdGFDaGFyYWN0ZXIKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBjb3VudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBaWFJTU0ZpbmRlclBhdHRlcm4gKmZpbmRlclBhdHRlcm47CisKKy0gKGlkKWluaXRXaXRoVmFsdWU6KGludCl2YWx1ZSBjaGVja3N1bVBvcnRpb246KGludCljaGVja3N1bVBvcnRpb24gZmluZGVyUGF0dGVybjooWlhSU1NGaW5kZXJQYXR0ZXJuICopZmluZGVyUGF0dGVybjsKKy0gKHZvaWQpaW5jcmVtZW50Q291bnQ7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWFBhaXIubSBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWFBhaXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjA4YTlkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL1pYUGFpci5tCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUlNTRmluZGVyUGF0dGVybi5oIgorI2ltcG9ydCAiWlhQYWlyLmgiCisKK0BpbnRlcmZhY2UgWlhQYWlyICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb3VudDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhQYWlyCisKKy0gKGlkKWluaXRXaXRoVmFsdWU6KGludCl2YWx1ZSBjaGVja3N1bVBvcnRpb246KGludCljaGVja3N1bVBvcnRpb24gZmluZGVyUGF0dGVybjooWlhSU1NGaW5kZXJQYXR0ZXJuICopZmluZGVyUGF0dGVybiB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRXaXRoVmFsdWU6dmFsdWUgY2hlY2tzdW1Qb3J0aW9uOmNoZWNrc3VtUG9ydGlvbl0pIHsKKyAgICBfZmluZGVyUGF0dGVybiA9IGZpbmRlclBhdHRlcm47CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClpbmNyZW1lbnRDb3VudCB7CisgIHNlbGYuY291bnQrKzsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL1pYUlNTMTRSZWFkZXIuaCBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWFJTUzE0UmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QxYjYwZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWFJTUzE0UmVhZGVyLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBYnN0cmFjdFJTU1JlYWRlci5oIgorCisvKioKKyAqIERlY29kZXMgUlNTLTE0LCBpbmNsdWRpbmcgdHJ1bmNhdGVkIGFuZCBzdGFja2VkIHZhcmlhbnRzLiBTZWUgSVNPL0lFQyAyNDcyNDoyMDA2LgorICovCisKK0BjbGFzcyBaWERlY29kZUhpbnRzLCBaWFJlc3VsdDsKKworQGludGVyZmFjZSBaWFJTUzE0UmVhZGVyIDogWlhBYnN0cmFjdFJTU1JlYWRlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvWlhSU1MxNFJlYWRlci5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL1pYUlNTMTRSZWFkZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzc2MTc4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL1pYUlNTMTRSZWFkZXIubQpAQCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhCYXJjb2RlRm9ybWF0LmgiCisjaW1wb3J0ICJaWERlY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhQYWlyLmgiCisjaW1wb3J0ICJaWFJlc3VsdC5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludENhbGxiYWNrLmgiCisjaW1wb3J0ICJaWFJTUzE0UmVhZGVyLmgiCisjaW1wb3J0ICJaWFJTU0ZpbmRlclBhdHRlcm4uaCIKKyNpbXBvcnQgIlpYUlNTVXRpbHMuaCIKKworY29uc3QgaW50IE9VVFNJREVfRVZFTl9UT1RBTF9TVUJTRVRbNV0gPSB7MSwxMCwzNCw3MCwxMjZ9OworY29uc3QgaW50IElOU0lERV9PRERfVE9UQUxfU1VCU0VUWzRdID0gezQsMjAsNDgsODF9OworY29uc3QgaW50IE9VVFNJREVfR1NVTVs1XSA9IHswLDE2MSw5NjEsMjAxNSwyNzE1fTsKK2NvbnN0IGludCBJTlNJREVfR1NVTVs0XSA9IHswLDMzNiwxMDM2LDE1MTZ9OworY29uc3QgaW50IE9VVFNJREVfT0REX1dJREVTVFs1XSA9IHs4LDYsNCwzLDF9OworY29uc3QgaW50IElOU0lERV9PRERfV0lERVNUWzRdID0gezIsNCw2LDh9OworCitAaW50ZXJmYWNlIFpYUlNTMTRSZWFkZXIgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlQXJyYXkgKnBvc3NpYmxlTGVmdFBhaXJzOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlQXJyYXkgKnBvc3NpYmxlUmlnaHRQYWlyczsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhSU1MxNFJlYWRlcgorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfcG9zc2libGVMZWZ0UGFpcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgIF9wb3NzaWJsZVJpZ2h0UGFpcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlUm93OihpbnQpcm93TnVtYmVyIHJvdzooWlhCaXRBcnJheSAqKXJvdyBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgWlhQYWlyICpsZWZ0UGFpciA9IFtzZWxmIGRlY29kZVBhaXI6cm93IHJpZ2h0Ok5PIHJvd051bWJlcjpyb3dOdW1iZXIgaGludHM6aGludHNdOworICBbc2VsZiBhZGRPclRhbGx5OnNlbGYucG9zc2libGVMZWZ0UGFpcnMgcGFpcjpsZWZ0UGFpcl07CisgIFtyb3cgcmV2ZXJzZV07CisgIFpYUGFpciAqcmlnaHRQYWlyID0gW3NlbGYgZGVjb2RlUGFpcjpyb3cgcmlnaHQ6WUVTIHJvd051bWJlcjpyb3dOdW1iZXIgaGludHM6aGludHNdOworICBbc2VsZiBhZGRPclRhbGx5OnNlbGYucG9zc2libGVSaWdodFBhaXJzIHBhaXI6cmlnaHRQYWlyXTsKKyAgW3JvdyByZXZlcnNlXTsKKworICBmb3IgKFpYUGFpciAqbGVmdCBpbiBzZWxmLnBvc3NpYmxlTGVmdFBhaXJzKSB7CisgICAgaWYgKFtsZWZ0IGNvdW50XSA+IDEpIHsKKyAgICAgIGZvciAoWlhQYWlyICpyaWdodCBpbiBzZWxmLnBvc3NpYmxlUmlnaHRQYWlycykgeworICAgICAgICBpZiAoW3JpZ2h0IGNvdW50XSA+IDEpIHsKKyAgICAgICAgICBpZiAoW3NlbGYgY2hlY2tDaGVja3N1bTpsZWZ0IHJpZ2h0UGFpcjpyaWdodF0pIHsKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiBjb25zdHJ1Y3RSZXN1bHQ6bGVmdCByaWdodFBhaXI6cmlnaHRdOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpYWRkT3JUYWxseTooTlNNdXRhYmxlQXJyYXkgKilwb3NzaWJsZVBhaXJzIHBhaXI6KFpYUGFpciAqKXBhaXIgeworICBpZiAocGFpciA9PSBuaWwpIHsKKyAgICByZXR1cm47CisgIH0KKyAgQk9PTCBmb3VuZCA9IE5POworICBmb3IgKFpYUGFpciAqb3RoZXIgaW4gcG9zc2libGVQYWlycykgeworICAgIGlmIChvdGhlci52YWx1ZSA9PSBwYWlyLnZhbHVlKSB7CisgICAgICBbb3RoZXIgaW5jcmVtZW50Q291bnRdOworICAgICAgZm91bmQgPSBZRVM7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBpZiAoIWZvdW5kKSB7CisgICAgW3Bvc3NpYmxlUGFpcnMgYWRkT2JqZWN0OnBhaXJdOworICB9Cit9CisKKy0gKHZvaWQpcmVzZXQgeworICBbc2VsZi5wb3NzaWJsZUxlZnRQYWlycyByZW1vdmVBbGxPYmplY3RzXTsKKyAgW3NlbGYucG9zc2libGVSaWdodFBhaXJzIHJlbW92ZUFsbE9iamVjdHNdOworfQorCistIChaWFJlc3VsdCAqKWNvbnN0cnVjdFJlc3VsdDooWlhQYWlyICopbGVmdFBhaXIgcmlnaHRQYWlyOihaWFBhaXIgKilyaWdodFBhaXIgeworICBsb25nIGxvbmcgc3ltYm9sVmFsdWUgPSA0NTM3MDc3TEwgKiBsZWZ0UGFpci52YWx1ZSArIHJpZ2h0UGFpci52YWx1ZTsKKyAgTlNTdHJpbmcgKnRleHQgPSBbQChzeW1ib2xWYWx1ZSkgc3RyaW5nVmFsdWVdOworICBOU011dGFibGVTdHJpbmcgKmJ1ZmZlciA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OjE0XTsKKworICBmb3IgKGludCBpID0gMTMgLSAoaW50KVt0ZXh0IGxlbmd0aF07IGkgPiAwOyBpLS0pIHsKKyAgICBbYnVmZmVyIGFwcGVuZFN0cmluZzpAIjAiXTsKKyAgfQorCisgIFtidWZmZXIgYXBwZW5kU3RyaW5nOnRleHRdOworICBpbnQgY2hlY2tEaWdpdCA9IDA7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMzsgaSsrKSB7CisgICAgaW50IGRpZ2l0ID0gW2J1ZmZlciBjaGFyYWN0ZXJBdEluZGV4OmldIC0gJzAnOworICAgIGNoZWNrRGlnaXQgKz0gKGkgJiAweDAxKSA9PSAwID8gMyAqIGRpZ2l0IDogZGlnaXQ7CisgIH0KKworICBjaGVja0RpZ2l0ID0gMTAgLSAoY2hlY2tEaWdpdCAlIDEwKTsKKyAgaWYgKGNoZWNrRGlnaXQgPT0gMTApIHsKKyAgICBjaGVja0RpZ2l0ID0gMDsKKyAgfQorICBbYnVmZmVyIGFwcGVuZEZvcm1hdDpAIiVkIiwgY2hlY2tEaWdpdF07CisgIE5TQXJyYXkgKmxlZnRQb2ludHMgPSBbW2xlZnRQYWlyIGZpbmRlclBhdHRlcm5dIHJlc3VsdFBvaW50c107CisgIE5TQXJyYXkgKnJpZ2h0UG9pbnRzID0gW1tyaWdodFBhaXIgZmluZGVyUGF0dGVybl0gcmVzdWx0UG9pbnRzXTsKKyAgcmV0dXJuIFtaWFJlc3VsdCByZXN1bHRXaXRoVGV4dDpidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICByYXdCeXRlczpOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6MAorICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UG9pbnRzOkBbbGVmdFBvaW50c1swXSwgbGVmdFBvaW50c1sxXSwgcmlnaHRQb2ludHNbMF0sIHJpZ2h0UG9pbnRzWzFdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OmtCYXJjb2RlRm9ybWF0UlNTMTRdOworfQorCistIChCT09MKWNoZWNrQ2hlY2tzdW06KFpYUGFpciAqKWxlZnRQYWlyIHJpZ2h0UGFpcjooWlhQYWlyICopcmlnaHRQYWlyIHsKKy8vICBpbnQgbGVmdEZQVmFsdWUgPSBsZWZ0UGFpci5maW5kZXJQYXR0ZXJuLnZhbHVlOworLy8gIGludCByaWdodEZQVmFsdWUgPSByaWdodFBhaXIuZmluZGVyUGF0dGVybi52YWx1ZTsKKy8vICBpZiAoKGxlZnRGUFZhbHVlID09IDAgJiYgcmlnaHRGUFZhbHVlID09IDgpIHx8IChsZWZ0RlBWYWx1ZSA9PSA4ICYmIHJpZ2h0RlBWYWx1ZSA9PSAwKSkgeworLy8gIH0KKyAgaW50IGNoZWNrVmFsdWUgPSAobGVmdFBhaXIuY2hlY2tzdW1Qb3J0aW9uICsgMTYgKiByaWdodFBhaXIuY2hlY2tzdW1Qb3J0aW9uKSAlIDc5OworICBpbnQgdGFyZ2V0Q2hlY2tWYWx1ZSA9IDkgKiBsZWZ0UGFpci5maW5kZXJQYXR0ZXJuLnZhbHVlICsgcmlnaHRQYWlyLmZpbmRlclBhdHRlcm4udmFsdWU7CisgIGlmICh0YXJnZXRDaGVja1ZhbHVlID4gNzIpIHsKKyAgICB0YXJnZXRDaGVja1ZhbHVlLS07CisgIH0KKyAgaWYgKHRhcmdldENoZWNrVmFsdWUgPiA4KSB7CisgICAgdGFyZ2V0Q2hlY2tWYWx1ZS0tOworICB9CisgIHJldHVybiBjaGVja1ZhbHVlID09IHRhcmdldENoZWNrVmFsdWU7Cit9CisKKy0gKFpYUGFpciAqKWRlY29kZVBhaXI6KFpYQml0QXJyYXkgKilyb3cgcmlnaHQ6KEJPT0wpcmlnaHQgcm93TnVtYmVyOihpbnQpcm93TnVtYmVyIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgeworICBOU0FycmF5ICpzdGFydEVuZCA9IFtzZWxmIGZpbmRGaW5kZXJQYXR0ZXJuOnJvdyByb3dPZmZzZXQ6MCByaWdodEZpbmRlclBhdHRlcm46cmlnaHRdOworICBpZiAoIXN0YXJ0RW5kKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBaWFJTU0ZpbmRlclBhdHRlcm4gKnBhdHRlcm4gPSBbc2VsZiBwYXJzZUZvdW5kRmluZGVyUGF0dGVybjpyb3cgcm93TnVtYmVyOnJvd051bWJlciByaWdodDpyaWdodCBzdGFydEVuZDpzdGFydEVuZF07CisgIGlmICghcGF0dGVybikgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgaWQ8WlhSZXN1bHRQb2ludENhbGxiYWNrPiByZXN1bHRQb2ludENhbGxiYWNrID0gaGludHMgPT0gbmlsID8gbmlsIDogaGludHMucmVzdWx0UG9pbnRDYWxsYmFjazsKKyAgaWYgKHJlc3VsdFBvaW50Q2FsbGJhY2sgIT0gbmlsKSB7CisgICAgZmxvYXQgY2VudGVyID0gKFtzdGFydEVuZFswXSBpbnRWYWx1ZV0gKyBbc3RhcnRFbmRbMV0gaW50VmFsdWVdKSAvIDIuMGY7CisgICAgaWYgKHJpZ2h0KSB7CisgICAgICBjZW50ZXIgPSBbcm93IHNpemVdIC0gMSAtIGNlbnRlcjsKKyAgICB9CisgICAgW3Jlc3VsdFBvaW50Q2FsbGJhY2sgZm91bmRQb3NzaWJsZVJlc3VsdFBvaW50OltbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOmNlbnRlciB5OnJvd051bWJlcl1dOworICB9CisgIFpYRGF0YUNoYXJhY3RlciAqb3V0c2lkZSA9IFtzZWxmIGRlY29kZURhdGFDaGFyYWN0ZXI6cm93IHBhdHRlcm46cGF0dGVybiBvdXRzaWRlQ2hhcjpZRVNdOworICBaWERhdGFDaGFyYWN0ZXIgKmluc2lkZSA9IFtzZWxmIGRlY29kZURhdGFDaGFyYWN0ZXI6cm93IHBhdHRlcm46cGF0dGVybiBvdXRzaWRlQ2hhcjpOT107CisgIGlmICghb3V0c2lkZSB8fCAhaW5zaWRlKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICByZXR1cm4gW1taWFBhaXIgYWxsb2NdIGluaXRXaXRoVmFsdWU6MTU5NyAqIG91dHNpZGUudmFsdWUgKyBpbnNpZGUudmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtUG9ydGlvbjpvdXRzaWRlLmNoZWNrc3VtUG9ydGlvbiArIDQgKiBpbnNpZGUuY2hlY2tzdW1Qb3J0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRlclBhdHRlcm46cGF0dGVybl07Cit9CisKKy0gKFpYRGF0YUNoYXJhY3RlciAqKWRlY29kZURhdGFDaGFyYWN0ZXI6KFpYQml0QXJyYXkgKilyb3cgcGF0dGVybjooWlhSU1NGaW5kZXJQYXR0ZXJuICopcGF0dGVybiBvdXRzaWRlQ2hhcjooQk9PTClvdXRzaWRlQ2hhciB7CisgIGludCBjb3VudGVyc0xlbiA9IHNlbGYuZGF0YUNoYXJhY3RlckNvdW50ZXJzTGVuOworICBpbnQgKmNvdW50ZXJzID0gc2VsZi5kYXRhQ2hhcmFjdGVyQ291bnRlcnM7CisgIGNvdW50ZXJzWzBdID0gMDsKKyAgY291bnRlcnNbMV0gPSAwOworICBjb3VudGVyc1syXSA9IDA7CisgIGNvdW50ZXJzWzNdID0gMDsKKyAgY291bnRlcnNbNF0gPSAwOworICBjb3VudGVyc1s1XSA9IDA7CisgIGNvdW50ZXJzWzZdID0gMDsKKyAgY291bnRlcnNbN10gPSAwOworCisgIGlmIChvdXRzaWRlQ2hhcikgeworICAgIGlmICghW1pYT25lRFJlYWRlciByZWNvcmRQYXR0ZXJuSW5SZXZlcnNlOnJvdyBzdGFydDpbW3BhdHRlcm4gc3RhcnRFbmRdWzBdIGludFZhbHVlXSBjb3VudGVyczpjb3VudGVycyBjb3VudGVyc1NpemU6Y291bnRlcnNMZW5dKSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoIVtaWE9uZURSZWFkZXIgcmVjb3JkUGF0dGVybjpyb3cgc3RhcnQ6W1twYXR0ZXJuIHN0YXJ0RW5kXVsxXSBpbnRWYWx1ZV0gY291bnRlcnM6Y291bnRlcnMgY291bnRlcnNTaXplOmNvdW50ZXJzTGVuXSkgeworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMCwgaiA9IGNvdW50ZXJzTGVuIC0gMTsgaSA8IGo7IGkrKywgai0tKSB7CisgICAgICBpbnQgdGVtcCA9IGNvdW50ZXJzW2ldOworICAgICAgY291bnRlcnNbaV0gPSBjb3VudGVyc1tqXTsKKyAgICAgIGNvdW50ZXJzW2pdID0gdGVtcDsKKyAgICB9CisgIH0KKworICBpbnQgbnVtTW9kdWxlcyA9IG91dHNpZGVDaGFyID8gMTYgOiAxNTsKKyAgZmxvYXQgZWxlbWVudFdpZHRoID0gKGZsb2F0KVtaWEFic3RyYWN0UlNTUmVhZGVyIGNvdW50OmNvdW50ZXJzIGFycmF5TGVuOmNvdW50ZXJzTGVuXSAvIChmbG9hdCludW1Nb2R1bGVzOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnRlcnNMZW47IGkrKykgeworICAgIGZsb2F0IHZhbHVlID0gKGZsb2F0KSBjb3VudGVyc1tpXSAvIGVsZW1lbnRXaWR0aDsKKyAgICBpbnQgY291bnQgPSAoaW50KSh2YWx1ZSArIDAuNWYpOworICAgIGlmIChjb3VudCA8IDEpIHsKKyAgICAgIGNvdW50ID0gMTsKKyAgICB9IGVsc2UgaWYgKGNvdW50ID4gOCkgeworICAgICAgY291bnQgPSA4OworICAgIH0KKyAgICBpbnQgb2Zmc2V0ID0gaSA+PiAxOworICAgIGlmICgoaSAmIDB4MDEpID09IDApIHsKKyAgICAgIHNlbGYub2RkQ291bnRzW29mZnNldF0gPSBjb3VudDsKKyAgICAgIHNlbGYub2RkUm91bmRpbmdFcnJvcnNbb2Zmc2V0XSA9IHZhbHVlIC0gY291bnQ7CisgICAgfSBlbHNlIHsKKyAgICAgIHNlbGYuZXZlbkNvdW50c1tvZmZzZXRdID0gY291bnQ7CisgICAgICBzZWxmLmV2ZW5Sb3VuZGluZ0Vycm9yc1tvZmZzZXRdID0gdmFsdWUgLSBjb3VudDsKKyAgICB9CisgIH0KKworICBpZiAoIVtzZWxmIGFkanVzdE9kZEV2ZW5Db3VudHM6b3V0c2lkZUNoYXIgbnVtTW9kdWxlczpudW1Nb2R1bGVzXSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpbnQgb2RkU3VtID0gMDsKKyAgaW50IG9kZENoZWNrc3VtUG9ydGlvbiA9IDA7CisgIGZvciAoaW50IGkgPSBzZWxmLm9kZENvdW50c0xlbiAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgb2RkQ2hlY2tzdW1Qb3J0aW9uICo9IDk7CisgICAgb2RkQ2hlY2tzdW1Qb3J0aW9uICs9IHNlbGYub2RkQ291bnRzW2ldOworICAgIG9kZFN1bSArPSBzZWxmLm9kZENvdW50c1tpXTsKKyAgfQorICBpbnQgZXZlbkNoZWNrc3VtUG9ydGlvbiA9IDA7CisgIGludCBldmVuU3VtID0gMDsKKyAgZm9yIChpbnQgaSA9IHNlbGYuZXZlbkNvdW50c0xlbiAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgZXZlbkNoZWNrc3VtUG9ydGlvbiAqPSA5OworICAgIGV2ZW5DaGVja3N1bVBvcnRpb24gKz0gc2VsZi5ldmVuQ291bnRzW2ldOworICAgIGV2ZW5TdW0gKz0gc2VsZi5ldmVuQ291bnRzW2ldOworICB9CisgIGludCBjaGVja3N1bVBvcnRpb24gPSBvZGRDaGVja3N1bVBvcnRpb24gKyAzICogZXZlbkNoZWNrc3VtUG9ydGlvbjsKKworICBpZiAob3V0c2lkZUNoYXIpIHsKKyAgICBpZiAoKG9kZFN1bSAmIDB4MDEpICE9IDAgfHwgb2RkU3VtID4gMTIgfHwgb2RkU3VtIDwgNCkgeworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgaW50IGdyb3VwID0gKDEyIC0gb2RkU3VtKSAvIDI7CisgICAgaW50IG9kZFdpZGVzdCA9IE9VVFNJREVfT0REX1dJREVTVFtncm91cF07CisgICAgaW50IGV2ZW5XaWRlc3QgPSA5IC0gb2RkV2lkZXN0OworICAgIGludCB2T2RkID0gW1pYUlNTVXRpbHMgcnNzVmFsdWU6c2VsZi5vZGRDb3VudHMgd2lkdGhzTGVuOnNlbGYub2RkQ291bnRzTGVuIG1heFdpZHRoOm9kZFdpZGVzdCBub05hcnJvdzpOT107CisgICAgaW50IHZFdmVuID0gW1pYUlNTVXRpbHMgcnNzVmFsdWU6c2VsZi5ldmVuQ291bnRzIHdpZHRoc0xlbjpzZWxmLmV2ZW5Db3VudHNMZW4gbWF4V2lkdGg6ZXZlbldpZGVzdCBub05hcnJvdzpZRVNdOworICAgIGludCB0RXZlbiA9IE9VVFNJREVfRVZFTl9UT1RBTF9TVUJTRVRbZ3JvdXBdOworICAgIGludCBnU3VtID0gT1VUU0lERV9HU1VNW2dyb3VwXTsKKyAgICByZXR1cm4gW1taWERhdGFDaGFyYWN0ZXIgYWxsb2NdIGluaXRXaXRoVmFsdWU6dk9kZCAqIHRFdmVuICsgdkV2ZW4gKyBnU3VtIGNoZWNrc3VtUG9ydGlvbjpjaGVja3N1bVBvcnRpb25dOworICB9IGVsc2UgeworICAgIGlmICgoZXZlblN1bSAmIDB4MDEpICE9IDAgfHwgZXZlblN1bSA+IDEwIHx8IGV2ZW5TdW0gPCA0KSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBpbnQgZ3JvdXAgPSAoMTAgLSBldmVuU3VtKSAvIDI7CisgICAgaW50IG9kZFdpZGVzdCA9IElOU0lERV9PRERfV0lERVNUW2dyb3VwXTsKKyAgICBpbnQgZXZlbldpZGVzdCA9IDkgLSBvZGRXaWRlc3Q7CisgICAgaW50IHZPZGQgPSBbWlhSU1NVdGlscyByc3NWYWx1ZTpzZWxmLm9kZENvdW50cyB3aWR0aHNMZW46c2VsZi5vZGRDb3VudHNMZW4gbWF4V2lkdGg6b2RkV2lkZXN0IG5vTmFycm93OllFU107CisgICAgaW50IHZFdmVuID0gW1pYUlNTVXRpbHMgcnNzVmFsdWU6c2VsZi5ldmVuQ291bnRzIHdpZHRoc0xlbjpzZWxmLmV2ZW5Db3VudHNMZW4gbWF4V2lkdGg6ZXZlbldpZGVzdCBub05hcnJvdzpOT107CisgICAgaW50IHRPZGQgPSBJTlNJREVfT0REX1RPVEFMX1NVQlNFVFtncm91cF07CisgICAgaW50IGdTdW0gPSBJTlNJREVfR1NVTVtncm91cF07CisgICAgcmV0dXJuIFtbWlhEYXRhQ2hhcmFjdGVyIGFsbG9jXSBpbml0V2l0aFZhbHVlOnZFdmVuICogdE9kZCArIHZPZGQgKyBnU3VtIGNoZWNrc3VtUG9ydGlvbjpjaGVja3N1bVBvcnRpb25dOworICB9Cit9CisKKy0gKE5TQXJyYXkgKilmaW5kRmluZGVyUGF0dGVybjooWlhCaXRBcnJheSAqKXJvdyByb3dPZmZzZXQ6KGludClyb3dPZmZzZXQgcmlnaHRGaW5kZXJQYXR0ZXJuOihCT09MKXJpZ2h0RmluZGVyUGF0dGVybiB7CisgIGludCBjb3VudGVyc0xlbiA9IHNlbGYuZGVjb2RlRmluZGVyQ291bnRlcnNMZW47CisgIGludCAqY291bnRlcnMgPSBzZWxmLmRlY29kZUZpbmRlckNvdW50ZXJzOworICBjb3VudGVyc1swXSA9IDA7CisgIGNvdW50ZXJzWzFdID0gMDsKKyAgY291bnRlcnNbMl0gPSAwOworICBjb3VudGVyc1szXSA9IDA7CisKKyAgaW50IHdpZHRoID0gcm93LnNpemU7CisgIEJPT0wgaXNXaGl0ZSA9IE5POworICB3aGlsZSAocm93T2Zmc2V0IDwgd2lkdGgpIHsKKyAgICBpc1doaXRlID0gIVtyb3cgZ2V0OnJvd09mZnNldF07CisgICAgaWYgKHJpZ2h0RmluZGVyUGF0dGVybiA9PSBpc1doaXRlKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgcm93T2Zmc2V0Kys7CisgIH0KKworICBpbnQgY291bnRlclBvc2l0aW9uID0gMDsKKyAgaW50IHBhdHRlcm5TdGFydCA9IHJvd09mZnNldDsKKyAgZm9yIChpbnQgeCA9IHJvd09mZnNldDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICBpZiAoW3JvdyBnZXQ6eF0gXiBpc1doaXRlKSB7CisgICAgICBjb3VudGVyc1tjb3VudGVyUG9zaXRpb25dKys7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChjb3VudGVyUG9zaXRpb24gPT0gMykgeworICAgICAgICBpZiAoW1pYQWJzdHJhY3RSU1NSZWFkZXIgaXNGaW5kZXJQYXR0ZXJuOmNvdW50ZXJzIGNvdW50ZXJzTGVuOmNvdW50ZXJzTGVuXSkgeworICAgICAgICAgIHJldHVybiBAW0AocGF0dGVyblN0YXJ0KSwgQCh4KV07CisgICAgICAgIH0KKyAgICAgICAgcGF0dGVyblN0YXJ0ICs9IGNvdW50ZXJzWzBdICsgY291bnRlcnNbMV07CisgICAgICAgIGNvdW50ZXJzWzBdID0gY291bnRlcnNbMl07CisgICAgICAgIGNvdW50ZXJzWzFdID0gY291bnRlcnNbM107CisgICAgICAgIGNvdW50ZXJzWzJdID0gMDsKKyAgICAgICAgY291bnRlcnNbM10gPSAwOworICAgICAgICBjb3VudGVyUG9zaXRpb24tLTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNvdW50ZXJQb3NpdGlvbisrOworICAgICAgfQorICAgICAgY291bnRlcnNbY291bnRlclBvc2l0aW9uXSA9IDE7CisgICAgICBpc1doaXRlID0gIWlzV2hpdGU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIG5pbDsKK30KKworLSAoWlhSU1NGaW5kZXJQYXR0ZXJuICopcGFyc2VGb3VuZEZpbmRlclBhdHRlcm46KFpYQml0QXJyYXkgKilyb3cgcm93TnVtYmVyOihpbnQpcm93TnVtYmVyIHJpZ2h0OihCT09MKXJpZ2h0IHN0YXJ0RW5kOihOU0FycmF5ICopc3RhcnRFbmQgeworICBCT09MIGZpcnN0SXNCbGFjayA9IFtyb3cgZ2V0OltzdGFydEVuZFswXSBpbnRWYWx1ZV1dOworICBpbnQgZmlyc3RFbGVtZW50U3RhcnQgPSBbc3RhcnRFbmRbMF0gaW50VmFsdWVdIC0gMTsKKworICB3aGlsZSAoZmlyc3RFbGVtZW50U3RhcnQgPj0gMCAmJiBmaXJzdElzQmxhY2sgXiBbcm93IGdldDpmaXJzdEVsZW1lbnRTdGFydF0pIHsKKyAgICBmaXJzdEVsZW1lbnRTdGFydC0tOworICB9CisKKyAgZmlyc3RFbGVtZW50U3RhcnQrKzsKKyAgaW50IGZpcnN0Q291bnRlciA9IFtzdGFydEVuZFswXSBpbnRWYWx1ZV0gLSBmaXJzdEVsZW1lbnRTdGFydDsKKworICBpbnQgY291bnRlcnNMZW4gPSBzZWxmLmRlY29kZUZpbmRlckNvdW50ZXJzTGVuOworICBpbnQgKmNvdW50ZXJzID0gc2VsZi5kZWNvZGVGaW5kZXJDb3VudGVyczsKKyAgZm9yIChpbnQgaSA9IGNvdW50ZXJzTGVuIC0gMTsgaSA+IDA7IGktLSkgeworICAgIGNvdW50ZXJzW2ldID0gY291bnRlcnNbaS0xXTsKKyAgfQorICBjb3VudGVyc1swXSA9IGZpcnN0Q291bnRlcjsKKyAgaW50IHZhbHVlID0gW1pYQWJzdHJhY3RSU1NSZWFkZXIgcGFyc2VGaW5kZXJWYWx1ZTpjb3VudGVycyBjb3VudGVyc1NpemU6Y291bnRlcnNMZW4gZmluZGVyUGF0dGVyblR5cGU6UlNTX1BBVFRFUk5TX1JTUzE0X1BBVFRFUk5TXTsKKyAgaWYgKHZhbHVlID09IC0xKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBpbnQgc3RhcnQgPSBmaXJzdEVsZW1lbnRTdGFydDsKKyAgaW50IGVuZCA9IFtzdGFydEVuZFsxXSBpbnRWYWx1ZV07CisgIGlmIChyaWdodCkgeworICAgIHN0YXJ0ID0gW3JvdyBzaXplXSAtIDEgLSBzdGFydDsKKyAgICBlbmQgPSBbcm93IHNpemVdIC0gMSAtIGVuZDsKKyAgfQorICByZXR1cm4gW1taWFJTU0ZpbmRlclBhdHRlcm4gYWxsb2NdIGluaXRXaXRoVmFsdWU6dmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEVuZDpbQFtAKGZpcnN0RWxlbWVudFN0YXJ0KSwgc3RhcnRFbmRbMV1dIG11dGFibGVDb3B5XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OnN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dOdW1iZXI6cm93TnVtYmVyXTsKK30KKworLSAoQk9PTClhZGp1c3RPZGRFdmVuQ291bnRzOihCT09MKW91dHNpZGVDaGFyIG51bU1vZHVsZXM6KGludCludW1Nb2R1bGVzIHsKKyAgaW50IG9kZFN1bSA9IFtaWEFic3RyYWN0UlNTUmVhZGVyIGNvdW50OnNlbGYub2RkQ291bnRzIGFycmF5TGVuOnNlbGYub2RkQ291bnRzTGVuXTsKKyAgaW50IGV2ZW5TdW0gPSBbWlhBYnN0cmFjdFJTU1JlYWRlciBjb3VudDpzZWxmLmV2ZW5Db3VudHMgYXJyYXlMZW46c2VsZi5ldmVuQ291bnRzTGVuXTsKKyAgaW50IG1pc21hdGNoID0gb2RkU3VtICsgZXZlblN1bSAtIG51bU1vZHVsZXM7CisgIEJPT0wgb2RkUGFyaXR5QmFkID0gKG9kZFN1bSAmIDB4MDEpID09IChvdXRzaWRlQ2hhciA/IDEgOiAwKTsKKyAgQk9PTCBldmVuUGFyaXR5QmFkID0gKGV2ZW5TdW0gJiAweDAxKSA9PSAxOworCisgIEJPT0wgaW5jcmVtZW50T2RkID0gTk87CisgIEJPT0wgZGVjcmVtZW50T2RkID0gTk87CisgIEJPT0wgaW5jcmVtZW50RXZlbiA9IE5POworICBCT09MIGRlY3JlbWVudEV2ZW4gPSBOTzsKKworICBpZiAob3V0c2lkZUNoYXIpIHsKKyAgICBpZiAob2RkU3VtID4gMTIpIHsKKyAgICAgIGRlY3JlbWVudE9kZCA9IFlFUzsKKyAgICB9IGVsc2UgaWYgKG9kZFN1bSA8IDQpIHsKKyAgICAgIGluY3JlbWVudE9kZCA9IFlFUzsKKyAgICB9CisgICAgaWYgKGV2ZW5TdW0gPiAxMikgeworICAgICAgZGVjcmVtZW50RXZlbiA9IFlFUzsKKyAgICB9IGVsc2UgaWYgKGV2ZW5TdW0gPCA0KSB7CisgICAgICBpbmNyZW1lbnRFdmVuID0gWUVTOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAob2RkU3VtID4gMTEpIHsKKyAgICAgIGRlY3JlbWVudE9kZCA9IFlFUzsKKyAgICB9IGVsc2UgaWYgKG9kZFN1bSA8IDUpIHsKKyAgICAgIGluY3JlbWVudE9kZCA9IFlFUzsKKyAgICB9CisgICAgaWYgKGV2ZW5TdW0gPiAxMCkgeworICAgICAgZGVjcmVtZW50RXZlbiA9IFlFUzsKKyAgICB9IGVsc2UgaWYgKGV2ZW5TdW0gPCA0KSB7CisgICAgICBpbmNyZW1lbnRFdmVuID0gWUVTOworICAgIH0KKyAgfQorCisgIGlmIChtaXNtYXRjaCA9PSAxKSB7CisgICAgaWYgKG9kZFBhcml0eUJhZCkgeworICAgICAgaWYgKGV2ZW5QYXJpdHlCYWQpIHsKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgfQorICAgICAgZGVjcmVtZW50T2RkID0gWUVTOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoIWV2ZW5QYXJpdHlCYWQpIHsKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgfQorICAgICAgZGVjcmVtZW50RXZlbiA9IFlFUzsKKyAgICB9CisgIH0gZWxzZSBpZiAobWlzbWF0Y2ggPT0gLTEpIHsKKyAgICBpZiAob2RkUGFyaXR5QmFkKSB7CisgICAgICBpZiAoZXZlblBhcml0eUJhZCkgeworICAgICAgICByZXR1cm4gTk87CisgICAgICB9CisgICAgICBpbmNyZW1lbnRPZGQgPSBZRVM7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghZXZlblBhcml0eUJhZCkgeworICAgICAgICByZXR1cm4gTk87CisgICAgICB9CisgICAgICBpbmNyZW1lbnRFdmVuID0gWUVTOworICAgIH0KKyAgfSBlbHNlIGlmIChtaXNtYXRjaCA9PSAwKSB7CisgICAgaWYgKG9kZFBhcml0eUJhZCkgeworICAgICAgaWYgKCFldmVuUGFyaXR5QmFkKSB7CisgICAgICAgIHJldHVybiBOTzsKKyAgICAgIH0KKyAgICAgIGlmIChvZGRTdW0gPCBldmVuU3VtKSB7CisgICAgICAgIGluY3JlbWVudE9kZCA9IFlFUzsKKyAgICAgICAgZGVjcmVtZW50RXZlbiA9IFlFUzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRlY3JlbWVudE9kZCA9IFlFUzsKKyAgICAgICAgaW5jcmVtZW50RXZlbiA9IFlFUzsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKGV2ZW5QYXJpdHlCYWQpIHsKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgaWYgKGluY3JlbWVudE9kZCkgeworICAgIGlmIChkZWNyZW1lbnRPZGQpIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgW1pYQWJzdHJhY3RSU1NSZWFkZXIgaW5jcmVtZW50OnNlbGYub2RkQ291bnRzIGFycmF5TGVuOnNlbGYub2RkQ291bnRzTGVuIGVycm9yczpzZWxmLm9kZFJvdW5kaW5nRXJyb3JzXTsKKyAgfQorICBpZiAoZGVjcmVtZW50T2RkKSB7CisgICAgW1pYQWJzdHJhY3RSU1NSZWFkZXIgZGVjcmVtZW50OnNlbGYub2RkQ291bnRzIGFycmF5TGVuOnNlbGYub2RkQ291bnRzTGVuIGVycm9yczpzZWxmLm9kZFJvdW5kaW5nRXJyb3JzXTsKKyAgfQorICBpZiAoaW5jcmVtZW50RXZlbikgeworICAgIGlmIChkZWNyZW1lbnRFdmVuKSB7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIFtaWEFic3RyYWN0UlNTUmVhZGVyIGluY3JlbWVudDpzZWxmLmV2ZW5Db3VudHMgYXJyYXlMZW46c2VsZi5ldmVuQ291bnRzTGVuIGVycm9yczpzZWxmLm9kZFJvdW5kaW5nRXJyb3JzXTsKKyAgfQorICBpZiAoZGVjcmVtZW50RXZlbikgeworICAgIFtaWEFic3RyYWN0UlNTUmVhZGVyIGRlY3JlbWVudDpzZWxmLmV2ZW5Db3VudHMgYXJyYXlMZW46c2VsZi5ldmVuQ291bnRzTGVuIGVycm9yczpzZWxmLmV2ZW5Sb3VuZGluZ0Vycm9yc107CisgIH0KKyAgcmV0dXJuIFlFUzsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL1pYUlNTRmluZGVyUGF0dGVybi5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL1pYUlNTRmluZGVyUGF0dGVybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOGI5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvWlhSU1NGaW5kZXJQYXR0ZXJuLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhSZXN1bHRQb2ludC5oIgorCitAaW50ZXJmYWNlIFpYUlNTRmluZGVyUGF0dGVybiA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgdmFsdWU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgTlNNdXRhYmxlQXJyYXkgKnN0YXJ0RW5kOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIE5TTXV0YWJsZUFycmF5ICpyZXN1bHRQb2ludHM7CisKKy0gKGlkKWluaXRXaXRoVmFsdWU6KGludCl2YWx1ZSBzdGFydEVuZDooTlNNdXRhYmxlQXJyYXkgKilzdGFydEVuZCBzdGFydDooaW50KXN0YXJ0IGVuZDooaW50KWVuZCByb3dOdW1iZXI6KGludClyb3dOdW1iZXI7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWFJTU0ZpbmRlclBhdHRlcm4ubSBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWFJTU0ZpbmRlclBhdHRlcm4ubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjBiYmJiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL1pYUlNTRmluZGVyUGF0dGVybi5tCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUlNTRmluZGVyUGF0dGVybi5oIgorCitAaW1wbGVtZW50YXRpb24gWlhSU1NGaW5kZXJQYXR0ZXJuCisKKy0gKGlkKWluaXRXaXRoVmFsdWU6KGludCl2YWx1ZSBzdGFydEVuZDooTlNNdXRhYmxlQXJyYXkgKilzdGFydEVuZCBzdGFydDooaW50KXN0YXJ0IGVuZDooaW50KWVuZCByb3dOdW1iZXI6KGludClyb3dOdW1iZXIgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF92YWx1ZSA9IHZhbHVlOworICAgIF9zdGFydEVuZCA9IHN0YXJ0RW5kOworICAgIF9yZXN1bHRQb2ludHMgPSBbQFtbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDooZmxvYXQpc3RhcnQgeTooZmxvYXQpcm93TnVtYmVyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6KGZsb2F0KWVuZCB5OihmbG9hdClyb3dOdW1iZXJdXSBtdXRhYmxlQ29weV07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoQk9PTClpc0VxdWFsOihpZClvYmplY3QgeworICBpZiAoIVtvYmplY3QgaXNLaW5kT2ZDbGFzczpbWlhSU1NGaW5kZXJQYXR0ZXJuIGNsYXNzXV0pIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBaWFJTU0ZpbmRlclBhdHRlcm4gKnRoYXQgPSAoWlhSU1NGaW5kZXJQYXR0ZXJuICopb2JqZWN0OworICByZXR1cm4gc2VsZi52YWx1ZSA9PSB0aGF0LnZhbHVlOworfQorCistIChOU1VJbnRlZ2VyKWhhc2ggeworICByZXR1cm4gc2VsZi52YWx1ZTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL1pYUlNTVXRpbHMuaCBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWFJTU1V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxM2JiNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWFJTU1V0aWxzLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBBZGFwdGVkIGZyb20gbGlzdGluZ3MgaW4gSVNPL0lFQyAyNDcyNCBBcHBlbmRpeCBCIGFuZCBBcHBlbmRpeCBHLgorICovCisKK0BpbnRlcmZhY2UgWlhSU1NVdGlscyA6IE5TT2JqZWN0CisKKysgKE5TQXJyYXkgKilyc3NXaWR0aHM6KGludCl2YWwgbjooaW50KW4gZWxlbWVudHM6KGludCllbGVtZW50cyBtYXhXaWR0aDooaW50KW1heFdpZHRoIG5vTmFycm93OihCT09MKW5vTmFycm93OworKyAoaW50KXJzc1ZhbHVlOihpbnQgKil3aWR0aHMgd2lkdGhzTGVuOih1bnNpZ25lZCBpbnQpd2lkdGhzTGVuIG1heFdpZHRoOihpbnQpbWF4V2lkdGggbm9OYXJyb3c6KEJPT0wpbm9OYXJyb3c7CisrIChOU0FycmF5ICopZWxlbWVudHM6KE5TQXJyYXkgKillRGlzdCBOOihpbnQpTiBLOihpbnQpSzsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL1pYUlNTVXRpbHMubSBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWFJTU1V0aWxzLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2OTQzMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9aWFJTU1V0aWxzLm0KQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUlNTVXRpbHMuaCIKKworQGltcGxlbWVudGF0aW9uIFpYUlNTVXRpbHMKKworKyAoTlNBcnJheSAqKXJzc1dpZHRoczooaW50KXZhbCBuOihpbnQpbiBlbGVtZW50czooaW50KWVsZW1lbnRzIG1heFdpZHRoOihpbnQpbWF4V2lkdGggbm9OYXJyb3c6KEJPT0wpbm9OYXJyb3cgeworICBOU011dGFibGVBcnJheSAqd2lkdGhzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmVsZW1lbnRzXTsKKyAgaW50IGJhcjsKKyAgaW50IG5hcnJvd01hc2sgPSAwOworICBmb3IgKGJhciA9IDA7IGJhciA8IGVsZW1lbnRzIC0gMTsgYmFyKyspIHsKKyAgICBuYXJyb3dNYXNrIHw9IDEgPDwgYmFyOworICAgIGludCBlbG1XaWR0aCA9IDE7CisgICAgaW50IHN1YlZhbDsKKyAgICB3aGlsZSAoWUVTKSB7CisgICAgICBzdWJWYWwgPSBbc2VsZiBjb21iaW5zOm4gLSBlbG1XaWR0aCAtIDEgcjplbGVtZW50cyAtIGJhciAtIDJdOworICAgICAgaWYgKG5vTmFycm93ICYmIChuYXJyb3dNYXNrID09IDApICYmIChuIC0gZWxtV2lkdGggLSAoZWxlbWVudHMgLSBiYXIgLSAxKSA+PSBlbGVtZW50cyAtIGJhciAtIDEpKSB7CisgICAgICAgIHN1YlZhbCAtPSBbc2VsZiBjb21iaW5zOm4gLSBlbG1XaWR0aCAtIChlbGVtZW50cyAtIGJhcikgcjplbGVtZW50cyAtIGJhciAtIDJdOworICAgICAgfQorICAgICAgaWYgKGVsZW1lbnRzIC0gYmFyIC0gMSA+IDEpIHsKKyAgICAgICAgaW50IGxlc3NWYWwgPSAwOworICAgICAgICBmb3IgKGludCBteHdFbGVtZW50ID0gbiAtIGVsbVdpZHRoIC0gKGVsZW1lbnRzIC0gYmFyIC0gMik7IG14d0VsZW1lbnQgPiBtYXhXaWR0aDsgbXh3RWxlbWVudC0tKSB7CisgICAgICAgICAgbGVzc1ZhbCArPSBbc2VsZiBjb21iaW5zOm4gLSBlbG1XaWR0aCAtIG14d0VsZW1lbnQgLSAxIHI6ZWxlbWVudHMgLSBiYXIgLSAzXTsKKyAgICAgICAgfQorICAgICAgICBzdWJWYWwgLT0gbGVzc1ZhbCAqIChlbGVtZW50cyAtIDEgLSBiYXIpOworICAgICAgfSBlbHNlIGlmIChuIC0gZWxtV2lkdGggPiBtYXhXaWR0aCkgeworICAgICAgICBzdWJWYWwtLTsKKyAgICAgIH0KKyAgICAgIHZhbCAtPSBzdWJWYWw7CisgICAgICBpZiAodmFsIDwgMCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsbVdpZHRoKys7CisgICAgICBuYXJyb3dNYXNrICY9IH4oMSA8PCBiYXIpOworICAgIH0KKyAgICB2YWwgKz0gc3ViVmFsOworICAgIG4gLT0gZWxtV2lkdGg7CisgICAgW3dpZHRocyBhZGRPYmplY3Q6QChlbG1XaWR0aCldOworICB9CisKKyAgW3dpZHRocyBhZGRPYmplY3Q6QChuKV07CisgIHJldHVybiB3aWR0aHM7Cit9CisKKysgKGludClyc3NWYWx1ZTooaW50ICopd2lkdGhzIHdpZHRoc0xlbjoodW5zaWduZWQgaW50KXdpZHRoc0xlbiBtYXhXaWR0aDooaW50KW1heFdpZHRoIG5vTmFycm93OihCT09MKW5vTmFycm93IHsKKyAgaW50IGVsZW1lbnRzID0gd2lkdGhzTGVuOworICBpbnQgbiA9IDA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHM7IGkrKykgeworICAgIG4gKz0gd2lkdGhzW2ldOworICB9CisgIGludCB2YWwgPSAwOworICBpbnQgbmFycm93TWFzayA9IDA7CisgIGZvciAoaW50IGJhciA9IDA7IGJhciA8IGVsZW1lbnRzIC0gMTsgYmFyKyspIHsKKyAgICBpbnQgZWxtV2lkdGg7CisgICAgZm9yIChlbG1XaWR0aCA9IDEsIG5hcnJvd01hc2sgfD0gMSA8PCBiYXI7CisgICAgICAgICBlbG1XaWR0aCA8IHdpZHRoc1tiYXJdOworICAgICAgICAgZWxtV2lkdGgrKywgbmFycm93TWFzayAmPSB+KDEgPDwgYmFyKSkgeworICAgICAgaW50IHN1YlZhbCA9IFtzZWxmIGNvbWJpbnM6biAtIGVsbVdpZHRoIC0gMSByOmVsZW1lbnRzIC0gYmFyIC0gMl07CisgICAgICBpZiAobm9OYXJyb3cgJiYgKG5hcnJvd01hc2sgPT0gMCkgJiYKKyAgICAgICAgICAobiAtIGVsbVdpZHRoIC0gKGVsZW1lbnRzIC0gYmFyIC0gMSkgPj0gZWxlbWVudHMgLSBiYXIgLSAxKSkgeworICAgICAgICBzdWJWYWwgLT0gW3NlbGYgY29tYmluczpuIC0gZWxtV2lkdGggLSAoZWxlbWVudHMgLSBiYXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByOmVsZW1lbnRzIC0gYmFyIC0gMl07CisgICAgICB9CisgICAgICBpZiAoZWxlbWVudHMgLSBiYXIgLSAxID4gMSkgeworICAgICAgICBpbnQgbGVzc1ZhbCA9IDA7CisgICAgICAgIGZvciAoaW50IG14d0VsZW1lbnQgPSBuIC0gZWxtV2lkdGggLSAoZWxlbWVudHMgLSBiYXIgLSAyKTsKKyAgICAgICAgICAgICBteHdFbGVtZW50ID4gbWF4V2lkdGg7IG14d0VsZW1lbnQtLSkgeworICAgICAgICAgIGxlc3NWYWwgKz0gW3NlbGYgY29tYmluczpuIC0gZWxtV2lkdGggLSBteHdFbGVtZW50IC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcjplbGVtZW50cyAtIGJhciAtIDNdOworICAgICAgICB9CisgICAgICAgIHN1YlZhbCAtPSBsZXNzVmFsICogKGVsZW1lbnRzIC0gMSAtIGJhcik7CisgICAgICB9IGVsc2UgaWYgKG4gLSBlbG1XaWR0aCA+IG1heFdpZHRoKSB7CisgICAgICAgIHN1YlZhbC0tOworICAgICAgfQorICAgICAgdmFsICs9IHN1YlZhbDsKKyAgICB9CisgICAgbiAtPSBlbG1XaWR0aDsKKyAgfQorICByZXR1cm4gdmFsOworfQorCisrIChpbnQpY29tYmluczooaW50KW4gcjooaW50KXIgeworICBpbnQgbWF4RGVub207CisgIGludCBtaW5EZW5vbTsKKyAgaWYgKG4gLSByID4gcikgeworICAgIG1pbkRlbm9tID0gcjsKKyAgICBtYXhEZW5vbSA9IG4gLSByOworICB9IGVsc2UgeworICAgIG1pbkRlbm9tID0gbiAtIHI7CisgICAgbWF4RGVub20gPSByOworICB9CisgIGludCB2YWwgPSAxOworICBpbnQgaiA9IDE7CisgIGZvciAoaW50IGkgPSBuOyBpID4gbWF4RGVub207IGktLSkgeworICAgIHZhbCAqPSBpOworICAgIGlmIChqIDw9IG1pbkRlbm9tKSB7CisgICAgICB2YWwgLz0gajsKKyAgICAgIGorKzsKKyAgICB9CisgIH0KKyAgd2hpbGUgKGogPD0gbWluRGVub20pIHsKKyAgICB2YWwgLz0gajsKKyAgICBqKys7CisgIH0KKyAgcmV0dXJuIHZhbDsKK30KKworKyAoTlNBcnJheSAqKWVsZW1lbnRzOihOU0FycmF5ICopZURpc3QgTjooaW50KU4gSzooaW50KUsgeworICBOU011dGFibGVBcnJheSAqd2lkdGhzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OltlRGlzdCBjb3VudF0gKyAyXTsKKyAgaW50IHR3b0sgPSBLIDw8IDE7CisgIFt3aWR0aHMgYWRkT2JqZWN0OkAxXTsKKyAgaW50IGk7CisgIGludCBtaW5FdmVuID0gMTA7CisgIGludCBiYXJTdW0gPSAxOworICBmb3IgKGkgPSAxOyBpIDwgdHdvSyAtIDI7IGkgKz0gMikgeworICAgIFt3aWR0aHMgYWRkT2JqZWN0OkAoW2VEaXN0W2kgLSAxXSBpbnRWYWx1ZV0gLSBbd2lkdGhzW2kgLSAxXSBpbnRWYWx1ZV0pXTsKKyAgICBbd2lkdGhzIGFkZE9iamVjdDpAKFtlRGlzdFtpXSBpbnRWYWx1ZV0gLSBbd2lkdGhzW2ldIGludFZhbHVlXSldOyAgICAKKyAgICBiYXJTdW0gKz0gW3dpZHRoc1tpXSBpbnRWYWx1ZV0gKyBbd2lkdGhzW2kgKyAxXSBpbnRWYWx1ZV07CisgICAgaWYgKFt3aWR0aHNbaV0gaW50VmFsdWVdIDwgbWluRXZlbikgeworICAgICAgbWluRXZlbiA9IFt3aWR0aHNbaV0gaW50VmFsdWVdOworICAgIH0KKyAgfQorCisgIFt3aWR0aHMgYWRkT2JqZWN0OkAoTiAtIGJhclN1bSldOworICBpZiAoW3dpZHRoc1t0d29LIC0gMV0gaW50VmFsdWVdIDwgbWluRXZlbikgeworICAgIG1pbkV2ZW4gPSBbd2lkdGhzW3R3b0sgLSAxXSBpbnRWYWx1ZV07CisgIH0KKyAgaWYgKG1pbkV2ZW4gPiAxKSB7CisgICAgZm9yIChpID0gMDsgaSA8IHR3b0s7IGkgKz0gMikgeworICAgICAgd2lkdGhzW2ldID0gQChbd2lkdGhzW2ldIGludFZhbHVlXSArIG1pbkV2ZW4gLSAxKTsKKyAgICAgIHdpZHRoc1tpICsgMV0gPSBAKFt3aWR0aHNbaSArIDFdIGludFZhbHVlXSAtIG1pbkV2ZW4gLSAxKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHdpZHRoczsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL1pYQml0QXJyYXlCdWlsZGVyLmggYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvWlhCaXRBcnJheUJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNThiN2NiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL1pYQml0QXJyYXlCdWlsZGVyLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGNsYXNzIFpYQml0QXJyYXk7CisKK0BpbnRlcmZhY2UgWlhCaXRBcnJheUJ1aWxkZXIgOiBOU09iamVjdAorCisrIChaWEJpdEFycmF5ICopYnVpbGRCaXRBcnJheTooTlNBcnJheSAqKXBhaXJzOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvWlhCaXRBcnJheUJ1aWxkZXIubSBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9aWEJpdEFycmF5QnVpbGRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMWFmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvWlhCaXRBcnJheUJ1aWxkZXIubQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisjaW1wb3J0ICJaWEJpdEFycmF5QnVpbGRlci5oIgorI2ltcG9ydCAiWlhEYXRhQ2hhcmFjdGVyLmgiCisjaW1wb3J0ICJaWEV4cGFuZGVkUGFpci5oIgorCitAaW1wbGVtZW50YXRpb24gWlhCaXRBcnJheUJ1aWxkZXIKKworKyAoWlhCaXRBcnJheSAqKWJ1aWxkQml0QXJyYXk6KE5TQXJyYXkgKilwYWlycyB7CisgIGludCBjaGFyTnVtYmVyID0gKChpbnQpW3BhaXJzIGNvdW50XSA8PCAxKSAtIDE7CisgIGlmIChbcGFpcnNbcGFpcnMuY291bnQgLSAxXSByaWdodENoYXJdID09IG5pbCkgeworICAgIGNoYXJOdW1iZXIgLT0gMTsKKyAgfQorCisgIGludCBzaXplID0gMTIgKiBjaGFyTnVtYmVyOworCisgIFpYQml0QXJyYXkgKmJpbmFyeSA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdFdpdGhTaXplOnNpemVdOworICBpbnQgYWNjUG9zID0gMDsKKworICBaWEV4cGFuZGVkUGFpciAqZmlyc3RQYWlyID0gcGFpcnNbMF07CisgIGludCBmaXJzdFZhbHVlID0gW1tmaXJzdFBhaXIgcmlnaHRDaGFyXSB2YWx1ZV07CisgIGZvciAoaW50IGkgPSAxMTsgaSA+PSAwOyAtLWkpIHsKKyAgICBpZiAoKGZpcnN0VmFsdWUgJiAoMSA8PCBpKSkgIT0gMCkgeworICAgICAgW2JpbmFyeSBzZXQ6YWNjUG9zXTsKKyAgICB9CisgICAgYWNjUG9zKys7CisgIH0KKworICBmb3IgKGludCBpID0gMTsgaSA8IFtwYWlycyBjb3VudF07ICsraSkgeworICAgIFpYRXhwYW5kZWRQYWlyICpjdXJyZW50UGFpciA9IHBhaXJzW2ldOworICAgIGludCBsZWZ0VmFsdWUgPSBbW2N1cnJlbnRQYWlyIGxlZnRDaGFyXSB2YWx1ZV07CisKKyAgICBmb3IgKGludCBqID0gMTE7IGogPj0gMDsgLS1qKSB7CisgICAgICBpZiAoKGxlZnRWYWx1ZSAmICgxIDw8IGopKSAhPSAwKSB7CisgICAgICAgIFtiaW5hcnkgc2V0OmFjY1Bvc107CisgICAgICB9CisgICAgICBhY2NQb3MrKzsKKyAgICB9CisKKyAgICBpZiAoW2N1cnJlbnRQYWlyIHJpZ2h0Q2hhcl0gIT0gbmlsKSB7CisgICAgICBpbnQgcmlnaHRWYWx1ZSA9IFtbY3VycmVudFBhaXIgcmlnaHRDaGFyXSB2YWx1ZV07CisKKyAgICAgIGZvciAoaW50IGogPSAxMTsgaiA+PSAwOyAtLWopIHsKKyAgICAgICAgaWYgKChyaWdodFZhbHVlICYgKDEgPDwgaikpICE9IDApIHsKKyAgICAgICAgICBbYmluYXJ5IHNldDphY2NQb3NdOworICAgICAgICB9CisgICAgICAgIGFjY1BvcysrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBiaW5hcnk7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9aWEV4cGFuZGVkUGFpci5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL1pYRXhwYW5kZWRQYWlyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5ZmM1MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9aWEV4cGFuZGVkUGFpci5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BjbGFzcyBaWERhdGFDaGFyYWN0ZXIsIFpYUlNTRmluZGVyUGF0dGVybjsKKworQGludGVyZmFjZSBaWEV4cGFuZGVkUGFpciA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBaWERhdGFDaGFyYWN0ZXIgKmxlZnRDaGFyOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIFpYRGF0YUNoYXJhY3RlciAqcmlnaHRDaGFyOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIFpYUlNTRmluZGVyUGF0dGVybiAqZmluZGVyUGF0dGVybjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBCT09MIG1heUJlTGFzdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBCT09MIG11c3RCZUxhc3Q7CisKKy0gKGlkKWluaXRXaXRoTGVmdENoYXI6KFpYRGF0YUNoYXJhY3RlciAqKWxlZnRDaGFyIHJpZ2h0Q2hhcjooWlhEYXRhQ2hhcmFjdGVyICopcmlnaHRDaGFyIGZpbmRlclBhdHRlcm46KFpYUlNTRmluZGVyUGF0dGVybiAqKWZpbmRlclBhdHRlcm4gbWF5QmVMYXN0OihCT09MKW1heUJlTGFzdDsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL1pYRXhwYW5kZWRQYWlyLm0gYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvWlhFeHBhbmRlZFBhaXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDc2MGMyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL1pYRXhwYW5kZWRQYWlyLm0KQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFeHBhbmRlZFBhaXIuaCIKKyNpbXBvcnQgIlpYRGF0YUNoYXJhY3Rlci5oIgorI2ltcG9ydCAiWlhSU1NGaW5kZXJQYXR0ZXJuLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEV4cGFuZGVkUGFpcgorCistIChpZClpbml0V2l0aExlZnRDaGFyOihaWERhdGFDaGFyYWN0ZXIgKilsZWZ0Q2hhciByaWdodENoYXI6KFpYRGF0YUNoYXJhY3RlciAqKXJpZ2h0Q2hhcgorICAgICAgICAgZmluZGVyUGF0dGVybjooWlhSU1NGaW5kZXJQYXR0ZXJuICopZmluZGVyUGF0dGVybiBtYXlCZUxhc3Q6KEJPT0wpbWF5QmVMYXN0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfbGVmdENoYXIgPSBsZWZ0Q2hhcjsKKyAgICBfcmlnaHRDaGFyID0gcmlnaHRDaGFyOworICAgIF9maW5kZXJQYXR0ZXJuID0gZmluZGVyUGF0dGVybjsKKyAgICBfbWF5QmVMYXN0ID0gbWF5QmVMYXN0OworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJPT0wpbXVzdEJlTGFzdCB7CisgIHJldHVybiBzZWxmLnJpZ2h0Q2hhciA9PSBuaWw7Cit9CisKKy0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24geworICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJbICVALCAlQCA6ICVAIF0iLAorICAgICAgICAgIHNlbGYubGVmdENoYXIsIHNlbGYucmlnaHRDaGFyLAorICAgICAgICAgIHNlbGYuZmluZGVyUGF0dGVybiA9PSBuaWwgPyBAIm51bGwiIDogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIHNlbGYuZmluZGVyUGF0dGVybi52YWx1ZV1dOworfQorCistIChCT09MKWlzRXF1YWw6KGlkKW9iamVjdCB7CisgIGlmICghW29iamVjdCBpc0tpbmRPZkNsYXNzOltaWEV4cGFuZGVkUGFpciBjbGFzc11dKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIFpYRXhwYW5kZWRQYWlyICp0aGF0ID0gKFpYRXhwYW5kZWRQYWlyICopb2JqZWN0OworICByZXR1cm4gW1pYRXhwYW5kZWRQYWlyIGlzRXF1YWxPck5pbDpzZWxmLmxlZnRDaGFyIHRvT2JqZWN0OnRoYXQubGVmdENoYXJdICYmCisgICAgW1pYRXhwYW5kZWRQYWlyIGlzRXF1YWxPck5pbDpzZWxmLnJpZ2h0Q2hhciB0b09iamVjdDp0aGF0LnJpZ2h0Q2hhcl0gJiYKKyAgICBbWlhFeHBhbmRlZFBhaXIgaXNFcXVhbE9yTmlsOnNlbGYuZmluZGVyUGF0dGVybiB0b09iamVjdDp0aGF0LmZpbmRlclBhdHRlcm5dOworfQorCisrIChCT09MKWlzRXF1YWxPck5pbDooaWQpbzEgdG9PYmplY3Q6KGlkKW8yIHsKKyAgcmV0dXJuIG8xID09IG5pbCA/IG8yID09IG5pbCA6IFtvMSBpc0VxdWFsOm8yXTsKK30KKworLSAoTlNVSW50ZWdlciloYXNoIHsKKyAgcmV0dXJuIFtzZWxmIGhhc2hOb3ROaWw6c2VsZi5sZWZ0Q2hhcl0gXiBbc2VsZiBoYXNoTm90TmlsOnNlbGYucmlnaHRDaGFyXSBeIFtzZWxmIGhhc2hOb3ROaWw6c2VsZi5maW5kZXJQYXR0ZXJuXTsKK30KKworLSAoTlNVSW50ZWdlciloYXNoTm90TmlsOihOU09iamVjdCAqKW8geworICByZXR1cm4gbyA9PSBuaWwgPyAwIDogby5oYXNoOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvWlhFeHBhbmRlZFJvdy5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL1pYRXhwYW5kZWRSb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTU3MTk2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL1pYRXhwYW5kZWRSb3cuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIE9uZSByb3cgb2YgYW4gUlNTIEV4cGFuZGVkIFN0YWNrZWQgc3ltYm9sLCBjb25zaXN0aW5nIG9mIDErIGV4cGFuZGVkIHBhaXJzLgorICovCitAaW50ZXJmYWNlIFpYRXhwYW5kZWRSb3cgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgTlNBcnJheSAqcGFpcnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IHJvd051bWJlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBCT09MIHdhc1JldmVyc2VkOworCistIChpZClpbml0V2l0aFBhaXJzOihOU0FycmF5ICopcGFpcnMgcm93TnVtYmVyOihpbnQpcm93TnVtYmVyIHdhc1JldmVyc2VkOihCT09MKXdhc1JldmVyc2VkOworLSAoQk9PTClpc1JldmVyc2VkOworLSAoQk9PTClpc0VxdWl2YWxlbnQ6KE5TQXJyYXkgKilvdGhlclBhaXJzOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvWlhFeHBhbmRlZFJvdy5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL1pYRXhwYW5kZWRSb3cubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjI1MWU1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL1pYRXhwYW5kZWRSb3cubQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEV4cGFuZGVkUm93LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEV4cGFuZGVkUm93CisKKy0gKGlkKWluaXRXaXRoUGFpcnM6KE5TQXJyYXkgKilwYWlycyByb3dOdW1iZXI6KGludClyb3dOdW1iZXIgd2FzUmV2ZXJzZWQ6KEJPT0wpd2FzUmV2ZXJzZWQgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9wYWlycyA9IFtOU0FycmF5IGFycmF5V2l0aEFycmF5OnBhaXJzXTsKKyAgICBfcm93TnVtYmVyID0gcm93TnVtYmVyOworICAgIF93YXNSZXZlcnNlZCA9IHdhc1JldmVyc2VkOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJPT0wpaXNSZXZlcnNlZCB7CisgIHJldHVybiBzZWxmLndhc1JldmVyc2VkOworfQorCistIChCT09MKWlzRXF1aXZhbGVudDooTlNBcnJheSAqKW90aGVyUGFpcnMgeworICByZXR1cm4gW3NlbGYucGFpcnMgaXNFcXVhbFRvQXJyYXk6b3RoZXJQYWlyc107Cit9CisKKy0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24geworICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ7JUB9Iiwgc2VsZi5wYWlyc107Cit9CisKKy8qKgorICogVHdvIHJvd3MgYXJlIGVxdWFsIGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZSBwYWlycyBpbiB0aGUgc2FtZSBvcmRlci4KKyAqLworLSAoQk9PTClpc0VxdWFsOihpZClvYmplY3QgeworICBpZiAoIVtvYmplY3QgaXNLaW5kT2ZDbGFzczpbWlhFeHBhbmRlZFJvdyBjbGFzc11dKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIFpYRXhwYW5kZWRSb3cgKnRoYXQgPSAoWlhFeHBhbmRlZFJvdyAqKW9iamVjdDsKKyAgcmV0dXJuIFtzZWxmLnBhaXJzIGlzRXF1YWw6dGhhdC5wYWlyc10gJiYgKHNlbGYud2FzUmV2ZXJzZWQgPT0gdGhhdC53YXNSZXZlcnNlZCk7Cit9CisKKy0gKE5TVUludGVnZXIpaGFzaCB7CisgIHJldHVybiBzZWxmLnBhaXJzLmhhc2ggXiBAKHNlbGYud2FzUmV2ZXJzZWQpLmhhc2g7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9aWFJTU0V4cGFuZGVkUmVhZGVyLmggYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvWlhSU1NFeHBhbmRlZFJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NmIxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvWlhSU1NFeHBhbmRlZFJlYWRlci5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQWJzdHJhY3RSU1NSZWFkZXIuaCIKKworQGNsYXNzIFpYRGF0YUNoYXJhY3RlciwgWlhFeHBhbmRlZFBhaXIsIFpYUmVzdWx0LCBaWFJTU0ZpbmRlclBhdHRlcm47CisKK0BpbnRlcmZhY2UgWlhSU1NFeHBhbmRlZFJlYWRlciA6IFpYQWJzdHJhY3RSU1NSZWFkZXIKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIE5TTXV0YWJsZUFycmF5ICpyb3dzOworCistIChaWERhdGFDaGFyYWN0ZXIgKilkZWNvZGVEYXRhQ2hhcmFjdGVyOihaWEJpdEFycmF5ICopcm93IHBhdHRlcm46KFpYUlNTRmluZGVyUGF0dGVybiAqKXBhdHRlcm4gaXNPZGRQYXR0ZXJuOihCT09MKWlzT2RkUGF0dGVybiBsZWZ0Q2hhcjooQk9PTClsZWZ0Q2hhcjsKKworLy8gZm9yIHRlc3RzCistIChOU011dGFibGVBcnJheSAqKWRlY29kZVJvdzJwYWlyczooaW50KXJvd051bWJlciByb3c6KFpYQml0QXJyYXkgKilyb3c7CistIChaWFJlc3VsdCAqKWNvbnN0cnVjdFJlc3VsdDooTlNNdXRhYmxlQXJyYXkgKilwYWlycyBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKFpYRXhwYW5kZWRQYWlyICopcmV0cmlldmVOZXh0UGFpcjooWlhCaXRBcnJheSAqKXJvdyBwcmV2aW91c1BhaXJzOihOU011dGFibGVBcnJheSAqKXByZXZpb3VzUGFpcnMgcm93TnVtYmVyOihpbnQpcm93TnVtYmVyOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvWlhSU1NFeHBhbmRlZFJlYWRlci5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL1pYUlNTRXhwYW5kZWRSZWFkZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTdmZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL1pYUlNTRXhwYW5kZWRSZWFkZXIubQpAQCAtMCwwICsxLDc1NiBAQAorIC8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIuaCIKKyNpbXBvcnQgIlpYQml0QXJyYXkuaCIKKyNpbXBvcnQgIlpYQml0QXJyYXlCdWlsZGVyLmgiCisjaW1wb3J0ICJaWERhdGFDaGFyYWN0ZXIuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEV4cGFuZGVkUGFpci5oIgorI2ltcG9ydCAiWlhFeHBhbmRlZFJvdy5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUlNTRXhwYW5kZWRSZWFkZXIuaCIKKyNpbXBvcnQgIlpYUlNTRmluZGVyUGF0dGVybi5oIgorI2ltcG9ydCAiWlhSU1NVdGlscy5oIgorCitjb25zdCBpbnQgU1lNQk9MX1dJREVTVFs1XSA9IHs3LCA1LCA0LCAzLCAxfTsKK2NvbnN0IGludCBFVkVOX1RPVEFMX1NVQlNFVFs1XSA9IHs0LCAyMCwgNTIsIDEwNCwgMjA0fTsKK2NvbnN0IGludCBHU1VNWzVdID0gezAsIDM0OCwgMTM4OCwgMjk0OCwgMzk4OH07CisKK2NvbnN0IGludCBXRUlHSFRTWzIzXVs4XSA9IHsKKyAgeyAgMSwgICAzLCAgIDksICAyNywgIDgxLCAgMzIsICA5NiwgIDc3fSwKKyAgeyAyMCwgIDYwLCAxODAsIDExOCwgMTQzLCAgIDcsICAyMSwgIDYzfSwKKyAgezE4OSwgMTQ1LCAgMTMsICAzOSwgMTE3LCAxNDAsIDIwOSwgMjA1fSwKKyAgezE5MywgMTU3LCAgNDksIDE0NywgIDE5LCAgNTcsIDE3MSwgIDkxfSwKKyAgeyA2MiwgMTg2LCAxMzYsIDE5NywgMTY5LCAgODUsICA0NCwgMTMyfSwKKyAgezE4NSwgMTMzLCAxODgsIDE0MiwgICA0LCAgMTIsICAzNiwgMTA4fSwKKyAgezExMywgMTI4LCAxNzMsICA5NywgIDgwLCAgMjksICA4NywgIDUwfSwKKyAgezE1MCwgIDI4LCAgODQsICA0MSwgMTIzLCAxNTgsICA1MiwgMTU2fSwKKyAgeyA0NiwgMTM4LCAyMDMsIDE4NywgMTM5LCAyMDYsIDE5NiwgMTY2fSwKKyAgeyA3NiwgIDE3LCAgNTEsIDE1MywgIDM3LCAxMTEsIDEyMiwgMTU1fSwKKyAgeyA0MywgMTI5LCAxNzYsIDEwNiwgMTA3LCAxMTAsIDExOSwgMTQ2fSwKKyAgeyAxNiwgIDQ4LCAxNDQsICAxMCwgIDMwLCAgOTAsICA1OSwgMTc3fSwKKyAgezEwOSwgMTE2LCAxMzcsIDIwMCwgMTc4LCAxMTIsIDEyNSwgMTY0fSwKKyAgeyA3MCwgMjEwLCAyMDgsIDIwMiwgMTg0LCAxMzAsIDE3OSwgMTE1fSwKKyAgezEzNCwgMTkxLCAxNTEsICAzMSwgIDkzLCAgNjgsIDIwNCwgMTkwfSwKKyAgezE0OCwgIDIyLCAgNjYsIDE5OCwgMTcyLCAgIDk0LCA3MSwgICAyfSwKKyAgeyAgNiwgIDE4LCAgNTQsIDE2MiwgIDY0LCAgMTkyLDE1NCwgIDQwfSwKKyAgezEyMCwgMTQ5LCAgMjUsICA3NSwgIDE0LCAgIDQyLDEyNiwgMTY3fSwKKyAgeyA3OSwgIDI2LCAgNzgsICAyMywgIDY5LCAgMjA3LDE5OSwgMTc1fSwKKyAgezEwMywgIDk4LCAgODMsICAzOCwgMTE0LCAxMzEsIDE4MiwgMTI0fSwKKyAgezE2MSwgIDYxLCAxODMsIDEyNywgMTcwLCAgODgsICA1MywgMTU5fSwKKyAgeyA1NSwgMTY1LCAgNzMsICAgOCwgIDI0LCAgNzIsICAgNSwgIDE1fSwKKyAgeyA0NSwgMTM1LCAxOTQsIDE2MCwgIDU4LCAxNzQsIDEwMCwgIDg5fQorfTsKKworY29uc3QgaW50IEZJTkRFUl9QQVRfQSA9IDA7Citjb25zdCBpbnQgRklOREVSX1BBVF9CID0gMTsKK2NvbnN0IGludCBGSU5ERVJfUEFUX0MgPSAyOworY29uc3QgaW50IEZJTkRFUl9QQVRfRCA9IDM7Citjb25zdCBpbnQgRklOREVSX1BBVF9FID0gNDsKK2NvbnN0IGludCBGSU5ERVJfUEFUX0YgPSA1OworCisjZGVmaW5lIEZJTkRFUl9QQVRURVJOX1NFUVVFTkNFU19MRU4gMTAKKyNkZWZpbmUgRklOREVSX1BBVFRFUk5fU0VRVUVOQ0VTX1NVQkxFTiAxMQorY29uc3QgaW50IEZJTkRFUl9QQVRURVJOX1NFUVVFTkNFU1tGSU5ERVJfUEFUVEVSTl9TRVFVRU5DRVNfTEVOXVtGSU5ERVJfUEFUVEVSTl9TRVFVRU5DRVNfU1VCTEVOXSA9IHsKKyAgeyBGSU5ERVJfUEFUX0EsIEZJTkRFUl9QQVRfQSB9LAorICB7IEZJTkRFUl9QQVRfQSwgRklOREVSX1BBVF9CLCBGSU5ERVJfUEFUX0IgfSwKKyAgeyBGSU5ERVJfUEFUX0EsIEZJTkRFUl9QQVRfQywgRklOREVSX1BBVF9CLCBGSU5ERVJfUEFUX0QgfSwKKyAgeyBGSU5ERVJfUEFUX0EsIEZJTkRFUl9QQVRfRSwgRklOREVSX1BBVF9CLCBGSU5ERVJfUEFUX0QsIEZJTkRFUl9QQVRfQyB9LAorICB7IEZJTkRFUl9QQVRfQSwgRklOREVSX1BBVF9FLCBGSU5ERVJfUEFUX0IsIEZJTkRFUl9QQVRfRCwgRklOREVSX1BBVF9ELCBGSU5ERVJfUEFUX0YgfSwKKyAgeyBGSU5ERVJfUEFUX0EsIEZJTkRFUl9QQVRfRSwgRklOREVSX1BBVF9CLCBGSU5ERVJfUEFUX0QsIEZJTkRFUl9QQVRfRSwgRklOREVSX1BBVF9GLCBGSU5ERVJfUEFUX0YgfSwKKyAgeyBGSU5ERVJfUEFUX0EsIEZJTkRFUl9QQVRfQSwgRklOREVSX1BBVF9CLCBGSU5ERVJfUEFUX0IsIEZJTkRFUl9QQVRfQywgRklOREVSX1BBVF9DLCBGSU5ERVJfUEFUX0QsIEZJTkRFUl9QQVRfRCB9LAorICB7IEZJTkRFUl9QQVRfQSwgRklOREVSX1BBVF9BLCBGSU5ERVJfUEFUX0IsIEZJTkRFUl9QQVRfQiwgRklOREVSX1BBVF9DLCBGSU5ERVJfUEFUX0MsIEZJTkRFUl9QQVRfRCwgRklOREVSX1BBVF9FLCBGSU5ERVJfUEFUX0UgfSwKKyAgeyBGSU5ERVJfUEFUX0EsIEZJTkRFUl9QQVRfQSwgRklOREVSX1BBVF9CLCBGSU5ERVJfUEFUX0IsIEZJTkRFUl9QQVRfQywgRklOREVSX1BBVF9DLCBGSU5ERVJfUEFUX0QsIEZJTkRFUl9QQVRfRSwgRklOREVSX1BBVF9GLCBGSU5ERVJfUEFUX0YgfSwKKyAgeyBGSU5ERVJfUEFUX0EsIEZJTkRFUl9QQVRfQSwgRklOREVSX1BBVF9CLCBGSU5ERVJfUEFUX0IsIEZJTkRFUl9QQVRfQywgRklOREVSX1BBVF9ELCBGSU5ERVJfUEFUX0QsIEZJTkRFUl9QQVRfRSwgRklOREVSX1BBVF9FLCBGSU5ERVJfUEFUX0YsIEZJTkRFUl9QQVRfRiB9LAorfTsKKworLy8jZGVmaW5lIExPTkdFU1RfU0VRVUVOQ0VfU0laRSBGSU5ERVJfUEFUVEVSTl9TRVFVRU5DRVNfU1VCTEVOCisKK2NvbnN0IGludCBNQVhfUEFJUlMgPSAxMTsKKworQGludGVyZmFjZSBaWFJTU0V4cGFuZGVkUmVhZGVyICgpIHsKKyAgaW50IHN0YXJ0RW5kWzJdOworLy8gIGludCBjdXJyZW50U2VxdWVuY2VbTE9OR0VTVF9TRVFVRU5DRV9TSVpFXTsKKyAgQk9PTCBzdGFydEZyb21FdmVuOworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU011dGFibGVBcnJheSAqcGFpcnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU011dGFibGVBcnJheSAqcm93czsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhSU1NFeHBhbmRlZFJlYWRlcgorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfcGFpcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgIF9yb3dzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICBzdGFydEZyb21FdmVuID0gTk87CisgICAgc3RhcnRFbmRbMF0gPSAwOworICAgIHN0YXJ0RW5kWzFdID0gMDsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChaWFJlc3VsdCAqKWRlY29kZVJvdzooaW50KXJvd051bWJlciByb3c6KFpYQml0QXJyYXkgKilyb3cgaGludHM6KFpYRGVjb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIC8vIFJvd3MgY2FuIHN0YXJ0IHdpdGggZXZlbiBwYXR0ZXJuIGluIGNhc2UgaW4gcHJldiByb3dzIHRoZXJlIHdoZXJlIG9kZCBudW1iZXIgb2YgcGF0dGVycy4KKyAgLy8gU28gbGV0cyB0cnkgdHdpY2UKKyAgW3NlbGYucGFpcnMgcmVtb3ZlQWxsT2JqZWN0c107CisgIHN0YXJ0RnJvbUV2ZW4gPSBOTzsKKyAgTlNNdXRhYmxlQXJyYXkqIHBhaXJzID0gW3NlbGYgZGVjb2RlUm93MnBhaXJzOnJvd051bWJlciByb3c6cm93XTsKKyAgaWYgKHBhaXJzKSB7CisgICAgWlhSZXN1bHQgKnJlc3VsdCA9IFtzZWxmIGNvbnN0cnVjdFJlc3VsdDpwYWlycyBlcnJvcjplcnJvcl07CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgIH0KKworICBbc2VsZi5wYWlycyByZW1vdmVBbGxPYmplY3RzXTsKKyAgc3RhcnRGcm9tRXZlbiA9IFlFUzsKKyAgcGFpcnMgPSBbc2VsZiBkZWNvZGVSb3cycGFpcnM6cm93TnVtYmVyIHJvdzpyb3ddOworICBpZiAoIXBhaXJzKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgcmV0dXJuIFtzZWxmIGNvbnN0cnVjdFJlc3VsdDpwYWlycyBlcnJvcjplcnJvcl07Cit9CisKKy0gKHZvaWQpcmVzZXQgeworICBbc2VsZi5wYWlycyByZW1vdmVBbGxPYmplY3RzXTsKKyAgW3NlbGYucm93cyByZW1vdmVBbGxPYmplY3RzXTsKK30KKworLSAoTlNNdXRhYmxlQXJyYXkgKilkZWNvZGVSb3cycGFpcnM6KGludClyb3dOdW1iZXIgcm93OihaWEJpdEFycmF5ICopcm93IHsKKyAgd2hpbGUgKFlFUykgeworICAgIFpYRXhwYW5kZWRQYWlyICpuZXh0UGFpciA9IFtzZWxmIHJldHJpZXZlTmV4dFBhaXI6cm93IHByZXZpb3VzUGFpcnM6c2VsZi5wYWlycyByb3dOdW1iZXI6cm93TnVtYmVyXTsKKyAgICBpZiAoIW5leHRQYWlyKSB7CisgICAgICBpZiAoW3NlbGYucGFpcnMgY291bnRdID09IDApIHsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBbc2VsZi5wYWlycyBhZGRPYmplY3Q6bmV4dFBhaXJdOworICB9CisKKyAgLy8gVE9ETzogdmVyaWZ5IHNlcXVlbmNlIG9mIGZpbmRlciBwYXR0ZXJucyBhcyBpbiBjaGVja1BhaXJTZXF1ZW5jZSgpCisgIGlmIChbc2VsZiBjaGVja0NoZWNrc3VtXSkgeworICAgIHJldHVybiBzZWxmLnBhaXJzOworICB9CisKKyAgQk9PTCB0cnlTdGFja2VkRGVjb2RlID0gW3NlbGYucm93cyBjb3VudF0gPiAwOworICBCT09MIHdhc1JldmVyc2VkID0gTk87IC8vIFRPRE86IGRlYWwgd2l0aCByZXZlcnNlZCByb3dzCisgIFtzZWxmIHN0b3JlUm93OnJvd051bWJlciB3YXNSZXZlcnNlZDp3YXNSZXZlcnNlZF07CisgIGlmICh0cnlTdGFja2VkRGVjb2RlKSB7CisgICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgMTgwLXJvdGF0ZWQsIHRoZW4gcm93cyBhcmUgc29ydGVkIGluIHdyb25nIGRpcnJlY3Rpb24uCisgICAgLy8gVHJ5IHR3aWNlIHdpdGggYm90aCB0aGUgZGlyZWN0aW9ucy4KKyAgICBOU011dGFibGVBcnJheSAqcHMgPSBbc2VsZiBjaGVja1Jvd3M6Tk9dOworICAgIGlmIChwcykgeworICAgICAgcmV0dXJuIHBzOworICAgIH0KKyAgICBwcyA9IFtzZWxmIGNoZWNrUm93czpZRVNdOworICAgIGlmIChwcykgeworICAgICAgcmV0dXJuIHBzOworICAgIH0KKyAgfQorCisgIHJldHVybiBuaWw7Cit9CisKKy0gKE5TTXV0YWJsZUFycmF5ICopY2hlY2tSb3dzOihCT09MKXJldmVyc2UgeworICAvLyBMaW1pdCBudW1iZXIgb2Ygcm93cyB3ZSBhcmUgY2hlY2tpbmcKKyAgLy8gV2UgdXNlIHJlY3Vyc2l2ZSBhbGdvcml0aG0gd2l0aCBwdXJlIGNvbXBsZXhpdHkgYW5kIGRvbid0IHdhbnQgaXQgdG8gdGFrZSBmb3JldmVyCisgIC8vIFN0YWNrZWQgYmFyY29kZSBjYW4gaGF2ZSB1cCB0byAxMSByb3dzLCBzbyAyNSBzZWVtcyByZXNvbmFibGUgZW5vdWdoCisgIGlmIChzZWxmLnJvd3MuY291bnQgPiAyNSkgeworICAgIFtzZWxmLnJvd3MgcmVtb3ZlQWxsT2JqZWN0c107CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisJW3NlbGYucGFpcnMgcmVtb3ZlQWxsT2JqZWN0c107CisgIGlmIChyZXZlcnNlKSB7CisgICAgc2VsZi5yb3dzID0gW1tbc2VsZi5yb3dzIHJldmVyc2VPYmplY3RFbnVtZXJhdG9yXSBhbGxPYmplY3RzXSBtdXRhYmxlQ29weV07CisgIH0KKworICBOU011dGFibGVBcnJheSAqcHMgPSBbc2VsZiBjaGVja1Jvd3M6W05TTXV0YWJsZUFycmF5IGFycmF5XSBjdXJyZW50OjBdOworCisgIGlmIChyZXZlcnNlKSB7CisgICAgc2VsZi5yb3dzID0gW1tbc2VsZi5yb3dzIHJldmVyc2VPYmplY3RFbnVtZXJhdG9yXSBhbGxPYmplY3RzXSBtdXRhYmxlQ29weV07CisgIH0KKworICByZXR1cm4gcHM7Cit9CisKKy8vIFRyeSB0byBjb25zdHJ1Y3QgYSB2YWxpZCByb3dzIHNlcXVlbmNlCisvLyBSZWN1cnNpb24gaXMgdXNlZCB0byBpbXBsZW1lbnQgYmFja3RyYWNraW5nCistIChOU011dGFibGVBcnJheSAqKWNoZWNrUm93czooTlNNdXRhYmxlQXJyYXkgKiljb2xsZWN0ZWRSb3dzIGN1cnJlbnQ6KGludCljdXJyZW50Um93IHsKKyAgZm9yIChpbnQgaSA9IGN1cnJlbnRSb3c7IGkgPCBbc2VsZi5yb3dzIGNvdW50XTsgaSsrKSB7CisgICAgWlhFeHBhbmRlZFJvdyAqcm93ID0gc2VsZi5yb3dzW2ldOworICAgIFtzZWxmLnBhaXJzIHJlbW92ZUFsbE9iamVjdHNdOworICAgIE5TVUludGVnZXIgc2l6ZSA9IFtjb2xsZWN0ZWRSb3dzIGNvdW50XTsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgW3NlbGYucGFpcnMgYWRkT2JqZWN0c0Zyb21BcnJheTpbY29sbGVjdGVkUm93c1tqXSBwYWlyc11dOworICAgIH0KKyAgICBbc2VsZi5wYWlycyBhZGRPYmplY3RzRnJvbUFycmF5OnJvdy5wYWlyc107CisKKyAgICBpZiAoIVtzZWxmIGlzVmFsaWRTZXF1ZW5jZTpzZWxmLnBhaXJzXSkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgaWYgKFtzZWxmIGNoZWNrQ2hlY2tzdW1dKSB7CisgICAgICByZXR1cm4gc2VsZi5wYWlyczsKKyAgICB9CisKKyAgICBOU011dGFibGVBcnJheSAqcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgIFtycyBhZGRPYmplY3RzRnJvbUFycmF5OmNvbGxlY3RlZFJvd3NdOworICAgIFtycyBhZGRPYmplY3Q6cm93XTsKKyAgICBOU011dGFibGVBcnJheSAqcHMgPSBbc2VsZiBjaGVja1Jvd3M6cnMgY3VycmVudDppICsgMV07CisgICAgaWYgKHBzKSB7CisgICAgICByZXR1cm4gcHM7CisgICAgfQorICB9CisgIHJldHVybiBuaWw7Cit9CisKKy8vIFdoZXRoZXIgdGhlIHBhaXJzIGZvcm0gYSB2YWxpZCBmaW5kIHBhdHRlcm4gc2VxaWVuY2UsCisvLyBlaXRoZXIgY29tcGxldGUgb3IgYSBwcmVmaXgKKy0gKEJPT0wpaXNWYWxpZFNlcXVlbmNlOihOU0FycmF5ICopcGFpcnMgeworICBmb3IgKGludCBpID0gMCwgc3ogPSAyOyBpIDwgRklOREVSX1BBVFRFUk5fU0VRVUVOQ0VTX0xFTjsgaSsrLCBzeisrKSB7CisgICAgaWYgKFtzZWxmLnBhaXJzIGNvdW50XSA+IHN6KSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBCT09MIHN0b3AgPSBZRVM7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBbc2VsZi5wYWlycyBjb3VudF07IGorKykgeworICAgICAgaWYgKFtbc2VsZi5wYWlyc1tqXSBmaW5kZXJQYXR0ZXJuXSB2YWx1ZV0gIT0gRklOREVSX1BBVFRFUk5fU0VRVUVOQ0VTW2ldW2pdKSB7CisgICAgICAgIHN0b3AgPSBOTzsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0b3ApIHsKKyAgICAgIHJldHVybiBZRVM7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5POworfQorCistICh2b2lkKXN0b3JlUm93OihpbnQpcm93TnVtYmVyIHdhc1JldmVyc2VkOihCT09MKXdhc1JldmVyc2VkIHsKKyAgLy8gRGlzY2FyZCBpZiBkdXBsaWNhdGUgYWJvdmUgb3IgYmVsb3c7IG90aGVyd2lzZSBpbnNlcnQgaW4gb3JkZXIgYnkgcm93IG51bWJlci4KKyAgaW50IGluc2VydFBvcyA9IDA7CisgIEJPT0wgcHJldklzU2FtZSA9IE5POworICBCT09MIG5leHRJc1NhbWUgPSBOTzsKKyAgd2hpbGUgKGluc2VydFBvcyA8IFtzZWxmLnJvd3MgY291bnRdKSB7CisgICAgWlhFeHBhbmRlZFJvdyAqZXJvdyA9IHNlbGYucm93c1tpbnNlcnRQb3NdOworICAgIGlmIChlcm93LnJvd051bWJlciA+IHJvd051bWJlcikgeworICAgICAgbmV4dElzU2FtZSA9IFtlcm93IGlzRXF1aXZhbGVudDpzZWxmLnBhaXJzXTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBwcmV2SXNTYW1lID0gW2Vyb3cgaXNFcXVpdmFsZW50OnNlbGYucGFpcnNdOworICAgIGluc2VydFBvcysrOworICB9CisgIGlmIChuZXh0SXNTYW1lIHx8IHByZXZJc1NhbWUpIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBXaGVuIHRoZSByb3cgd2FzIHBhcnRpYWxseSBkZWNvZGVkIChlLmcuIDIgcGFpcnMgZm91bmQgaW5zdGVhZCBvZiAzKSwKKyAgLy8gaXQgd2lsbCBwcmV2ZW50IHVzIGZyb20gZGV0ZWN0aW5nIHRoZSBiYXJjb2RlLgorICAvLyBUcnkgdG8gbWVyZ2UgcGFydGlhbCByb3dzCisKKyAgLy8gQ2hlY2sgd2hldGhlciB0aGUgcm93IGlzIHBhcnQgb2YgYW4gYWxscmVhZHkgZGV0ZWN0ZWQgcm93CisgIGlmIChbc2VsZiBpc1BhcnRpYWxSb3c6c2VsZi5wYWlycyBvZjpzZWxmLnJvd3NdKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgW3NlbGYucm93cyBpbnNlcnRPYmplY3Q6W1taWEV4cGFuZGVkUm93IGFsbG9jXSBpbml0V2l0aFBhaXJzOnNlbGYucGFpcnMgcm93TnVtYmVyOnJvd051bWJlciB3YXNSZXZlcnNlZDp3YXNSZXZlcnNlZF0gYXRJbmRleDppbnNlcnRQb3NdOworCisgIFtzZWxmIHJlbW92ZVBhcnRpYWxSb3dzOnNlbGYucGFpcnMgZnJvbTpzZWxmLnJvd3NdOworfQorCisvLyBSZW1vdmUgYWxsIHRoZSByb3dzIHRoYXQgY29udGFpbnMgb25seSBzcGVjaWZpZWQgcGFpcnMKKy0gKHZvaWQpcmVtb3ZlUGFydGlhbFJvd3M6KE5TQXJyYXkgKilwYWlycyBmcm9tOihOU011dGFibGVBcnJheSAqKXJvd3MgeworICBOU011dGFibGVBcnJheSAqdG9SZW1vdmUgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICBmb3IgKFpYRXhwYW5kZWRSb3cgKnIgaW4gcm93cykgeworICAgIGlmIChbci5wYWlycyBjb3VudF0gPT0gW3BhaXJzIGNvdW50XSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIEJPT0wgYWxsRm91bmQgPSBZRVM7CisgICAgZm9yIChaWEV4cGFuZGVkUGFpciAqcCBpbiByLnBhaXJzKSB7CisgICAgICBCT09MIGZvdW5kID0gTk87CisgICAgICBmb3IgKFpYRXhwYW5kZWRQYWlyICpwcCBpbiBwYWlycykgeworICAgICAgICBpZiAoW3AgaXNFcXVhbDpwcF0pIHsKKyAgICAgICAgICBmb3VuZCA9IFlFUzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICBhbGxGb3VuZCA9IE5POworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGFsbEZvdW5kKSB7CisgICAgICBbdG9SZW1vdmUgYWRkT2JqZWN0OnJdOworICAgIH0KKyAgfQorCisgIGZvciAoWlhFeHBhbmRlZFJvdyAqciBpbiB0b1JlbW92ZSkgeworICAgIFtyb3dzIHJlbW92ZU9iamVjdDpyXTsKKyAgfQorfQorCistIChCT09MKWlzUGFydGlhbFJvdzooTlNBcnJheSAqKXBhaXJzIG9mOihOU0FycmF5ICopcm93cyB7CisgIGZvciAoWlhFeHBhbmRlZFJvdyAqciBpbiByb3dzKSB7CisJCUJPT0wgYWxsRm91bmQgPSBZRVM7CisgICAgZm9yIChaWEV4cGFuZGVkUGFpciAqcCBpbiBwYWlycykgeworICAgICAgQk9PTCBmb3VuZCA9IE5POworICAgICAgZm9yIChaWEV4cGFuZGVkUGFpciAqcHAgaW4gci5wYWlycykgeworICAgICAgICBpZiAoW3AgaXNFcXVhbDpwcF0pIHsKKyAgICAgICAgICBmb3VuZCA9IFlFUzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICBhbGxGb3VuZCA9IE5POworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGFsbEZvdW5kKSB7CisgICAgICAvLyB0aGUgcm93ICdyJyBjb250YWluIGFsbCB0aGUgcGFpcnMgZnJvbSAncGFpcnMnCisgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgfQorICByZXR1cm4gTk87Cit9CisKKy0gKFpYUmVzdWx0ICopY29uc3RydWN0UmVzdWx0OihOU011dGFibGVBcnJheSAqKXBhaXJzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgWlhCaXRBcnJheSAqYmluYXJ5ID0gW1pYQml0QXJyYXlCdWlsZGVyIGJ1aWxkQml0QXJyYXk6cGFpcnNdOworCisgIFpYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIgKmRlY29kZXIgPSBbWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2RlciBjcmVhdGVEZWNvZGVyOmJpbmFyeV07CisgIE5TU3RyaW5nICpyZXN1bHRpbmdTdHJpbmcgPSBbZGVjb2RlciBwYXJzZUluZm9ybWF0aW9uV2l0aEVycm9yOmVycm9yXTsKKyAgaWYgKCFyZXN1bHRpbmdTdHJpbmcpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNBcnJheSAqZmlyc3RQb2ludHMgPSBbWygoWlhFeHBhbmRlZFBhaXIgKilfcGFpcnNbMF0pIGZpbmRlclBhdHRlcm5dIHJlc3VsdFBvaW50c107CisgIE5TQXJyYXkgKmxhc3RQb2ludHMgPSBbWygoWlhFeHBhbmRlZFBhaXIgKilbX3BhaXJzIGxhc3RPYmplY3RdKSBmaW5kZXJQYXR0ZXJuXSByZXN1bHRQb2ludHNdOworCisgIHJldHVybiBbWlhSZXN1bHQgcmVzdWx0V2l0aFRleHQ6cmVzdWx0aW5nU3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Qnl0ZXM6TlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOjAKKyAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBvaW50czpAW2ZpcnN0UG9pbnRzWzBdLCBmaXJzdFBvaW50c1sxXSwgbGFzdFBvaW50c1swXSwgbGFzdFBvaW50c1sxXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDprQmFyY29kZUZvcm1hdFJTU0V4cGFuZGVkXTsKK30KKworLSAoQk9PTCljaGVja0NoZWNrc3VtIHsKKyAgWlhFeHBhbmRlZFBhaXIgKmZpcnN0UGFpciA9IHNlbGYucGFpcnNbMF07CisgIFpYRGF0YUNoYXJhY3RlciAqY2hlY2tDaGFyYWN0ZXIgPSBmaXJzdFBhaXIubGVmdENoYXI7CisgIFpYRGF0YUNoYXJhY3RlciAqZmlyc3RDaGFyYWN0ZXIgPSBmaXJzdFBhaXIucmlnaHRDaGFyOworCisgIGlmICghZmlyc3RDaGFyYWN0ZXIpIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBpbnQgY2hlY2tzdW0gPSBbZmlyc3RDaGFyYWN0ZXIgY2hlY2tzdW1Qb3J0aW9uXTsKKyAgaW50IHMgPSAyOworCisgIGZvciAoaW50IGkgPSAxOyBpIDwgc2VsZi5wYWlycy5jb3VudDsgKytpKSB7CisgICAgWlhFeHBhbmRlZFBhaXIgKmN1cnJlbnRQYWlyID0gc2VsZi5wYWlyc1tpXTsKKyAgICBjaGVja3N1bSArPSBjdXJyZW50UGFpci5sZWZ0Q2hhci5jaGVja3N1bVBvcnRpb247CisgICAgcysrOworICAgIFpYRGF0YUNoYXJhY3RlciAqY3VycmVudFJpZ2h0Q2hhciA9IGN1cnJlbnRQYWlyLnJpZ2h0Q2hhcjsKKyAgICBpZiAoY3VycmVudFJpZ2h0Q2hhciAhPSBuaWwpIHsKKyAgICAgIGNoZWNrc3VtICs9IGN1cnJlbnRSaWdodENoYXIuY2hlY2tzdW1Qb3J0aW9uOworICAgICAgcysrOworICAgIH0KKyAgfQorCisgIGNoZWNrc3VtICU9IDIxMTsKKworICBpbnQgY2hlY2tDaGFyYWN0ZXJWYWx1ZSA9IDIxMSAqIChzIC0gNCkgKyBjaGVja3N1bTsKKworICByZXR1cm4gY2hlY2tDaGFyYWN0ZXJWYWx1ZSA9PSBjaGVja0NoYXJhY3Rlci52YWx1ZTsKK30KKworLSAoaW50KW5leHRTZWNvbmRCYXI6KFpYQml0QXJyYXkgKilyb3cgaW5pdGlhbFBvczooaW50KWluaXRpYWxQb3MgeworICBpbnQgY3VycmVudFBvczsKKyAgaWYgKFtyb3cgZ2V0OmluaXRpYWxQb3NdKSB7CisgICAgY3VycmVudFBvcyA9IFtyb3cgbmV4dFVuc2V0OmluaXRpYWxQb3NdOworICAgIGN1cnJlbnRQb3MgPSBbcm93IG5leHRTZXQ6Y3VycmVudFBvc107CisgIH0gZWxzZSB7CisgICAgY3VycmVudFBvcyA9IFtyb3cgbmV4dFNldDppbml0aWFsUG9zXTsKKyAgICBjdXJyZW50UG9zID0gW3JvdyBuZXh0VW5zZXQ6Y3VycmVudFBvc107CisgIH0KKyAgcmV0dXJuIGN1cnJlbnRQb3M7Cit9CisKKy0gKFpYRXhwYW5kZWRQYWlyICopcmV0cmlldmVOZXh0UGFpcjooWlhCaXRBcnJheSAqKXJvdyBwcmV2aW91c1BhaXJzOihOU011dGFibGVBcnJheSAqKXByZXZpb3VzUGFpcnMgcm93TnVtYmVyOihpbnQpcm93TnVtYmVyIHsKKyAgQk9PTCBpc09kZFBhdHRlcm4gPSBbcHJldmlvdXNQYWlycyBjb3VudF0gJSAyID09IDA7CisgIGlmIChzdGFydEZyb21FdmVuKSB7CisgICAgaXNPZGRQYXR0ZXJuID0gIWlzT2RkUGF0dGVybjsKKyAgfQorCisgIFpYUlNTRmluZGVyUGF0dGVybiAqcGF0dGVybjsKKworICBCT09MIGtlZXBGaW5kaW5nID0gWUVTOworICBpbnQgZm9yY2VkT2Zmc2V0ID0gLTE7CisgIGRvIHsKKyAgICBpZiAoIVtzZWxmIGZpbmROZXh0UGFpcjpyb3cgcHJldmlvdXNQYWlyczpwcmV2aW91c1BhaXJzIGZvcmNlZE9mZnNldDpmb3JjZWRPZmZzZXRdKSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBwYXR0ZXJuID0gW3NlbGYgcGFyc2VGb3VuZEZpbmRlclBhdHRlcm46cm93IHJvd051bWJlcjpyb3dOdW1iZXIgb2RkUGF0dGVybjppc09kZFBhdHRlcm5dOworICAgIGlmIChwYXR0ZXJuID09IG5pbCkgeworICAgICAgZm9yY2VkT2Zmc2V0ID0gW3NlbGYgbmV4dFNlY29uZEJhcjpyb3cgaW5pdGlhbFBvczpzdGFydEVuZFswXV07CisgICAgfSBlbHNlIHsKKyAgICAgIGtlZXBGaW5kaW5nID0gTk87CisgICAgfQorICB9IHdoaWxlIChrZWVwRmluZGluZyk7CisKKyAgLy8gV2hlbiBzdGFja2VkIHN5bWJvbCBpcyBzcGxpdCBvdmVyIG11bHRpcGxlIHJvd3MsIHRoZXJlJ3Mgbm8gd2F5IHRvIGd1ZXNzIGlmIHRoaXMgcGFpciBjYW4gYmUgbGFzdCBvciBub3QuCisgIC8vIGJvb2xlYW4gbWF5QmVMYXN0ID0gY2hlY2tQYWlyU2VxdWVuY2UocHJldmlvdXNQYWlycywgcGF0dGVybik7CisKKyAgWlhEYXRhQ2hhcmFjdGVyICpsZWZ0Q2hhciA9IFtzZWxmIGRlY29kZURhdGFDaGFyYWN0ZXI6cm93IHBhdHRlcm46cGF0dGVybiBpc09kZFBhdHRlcm46aXNPZGRQYXR0ZXJuIGxlZnRDaGFyOllFU107CisgIGlmICghbGVmdENoYXIpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaWYgKHByZXZpb3VzUGFpcnMuY291bnQgPiAwICYmIFtbcHJldmlvdXNQYWlycyBsYXN0T2JqZWN0XSBtdXN0QmVMYXN0XSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBaWERhdGFDaGFyYWN0ZXIgKnJpZ2h0Q2hhciA9IFtzZWxmIGRlY29kZURhdGFDaGFyYWN0ZXI6cm93IHBhdHRlcm46cGF0dGVybiBpc09kZFBhdHRlcm46aXNPZGRQYXR0ZXJuIGxlZnRDaGFyOk5PXTsKKyAgQk9PTCBtYXlCZUxhc3QgPSBZRVM7CisgIHJldHVybiBbW1pYRXhwYW5kZWRQYWlyIGFsbG9jXSBpbml0V2l0aExlZnRDaGFyOmxlZnRDaGFyIHJpZ2h0Q2hhcjpyaWdodENoYXIgZmluZGVyUGF0dGVybjpwYXR0ZXJuIG1heUJlTGFzdDptYXlCZUxhc3RdOworfQorCistIChCT09MKWZpbmROZXh0UGFpcjooWlhCaXRBcnJheSAqKXJvdyBwcmV2aW91c1BhaXJzOihOU011dGFibGVBcnJheSAqKXByZXZpb3VzUGFpcnMgZm9yY2VkT2Zmc2V0OihpbnQpZm9yY2VkT2Zmc2V0IHsKKyAgY29uc3QgaW50IGNvdW50ZXJzTGVuID0gc2VsZi5kZWNvZGVGaW5kZXJDb3VudGVyc0xlbjsKKyAgaW50ICpjb3VudGVycyA9IHNlbGYuZGVjb2RlRmluZGVyQ291bnRlcnM7CisgIGNvdW50ZXJzWzBdID0gMDsKKyAgY291bnRlcnNbMV0gPSAwOworICBjb3VudGVyc1syXSA9IDA7CisgIGNvdW50ZXJzWzNdID0gMDsKKworICBpbnQgd2lkdGggPSByb3cuc2l6ZTsKKworICBpbnQgcm93T2Zmc2V0OworICBpZiAoZm9yY2VkT2Zmc2V0ID49IDApIHsKKyAgICByb3dPZmZzZXQgPSBmb3JjZWRPZmZzZXQ7CisgIH0gZWxzZSBpZiAoW3ByZXZpb3VzUGFpcnMgY291bnRdID09IDApIHsKKyAgICByb3dPZmZzZXQgPSAwOworICB9IGVsc2UgeworICAgIFpYRXhwYW5kZWRQYWlyICpsYXN0UGFpciA9IFtwcmV2aW91c1BhaXJzIGxhc3RPYmplY3RdOworICAgIHJvd09mZnNldCA9IFtbW2xhc3RQYWlyIGZpbmRlclBhdHRlcm5dIHN0YXJ0RW5kXVsxXSBpbnRWYWx1ZV07CisgIH0KKyAgQk9PTCBzZWFyY2hpbmdFdmVuUGFpciA9IFtwcmV2aW91c1BhaXJzIGNvdW50XSAlIDIgIT0gMDsKKyAgaWYgKHN0YXJ0RnJvbUV2ZW4pIHsKKyAgICBzZWFyY2hpbmdFdmVuUGFpciA9ICFzZWFyY2hpbmdFdmVuUGFpcjsKKyAgfQorCisgIEJPT0wgaXNXaGl0ZSA9IE5POworICB3aGlsZSAocm93T2Zmc2V0IDwgd2lkdGgpIHsKKyAgICBpc1doaXRlID0gIVtyb3cgZ2V0OnJvd09mZnNldF07CisgICAgaWYgKCFpc1doaXRlKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgcm93T2Zmc2V0Kys7CisgIH0KKworICBpbnQgY291bnRlclBvc2l0aW9uID0gMDsKKyAgaW50IHBhdHRlcm5TdGFydCA9IHJvd09mZnNldDsKKyAgZm9yIChpbnQgeCA9IHJvd09mZnNldDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICBpZiAoW3JvdyBnZXQ6eF0gXiBpc1doaXRlKSB7CisgICAgICBjb3VudGVyc1tjb3VudGVyUG9zaXRpb25dKys7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChjb3VudGVyUG9zaXRpb24gPT0gMykgeworICAgICAgICBpZiAoc2VhcmNoaW5nRXZlblBhaXIpIHsKKyAgICAgICAgICBbc2VsZiByZXZlcnNlQ291bnRlcnM6Y291bnRlcnMgbGVuZ3RoOmNvdW50ZXJzTGVuXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbWlhBYnN0cmFjdFJTU1JlYWRlciBpc0ZpbmRlclBhdHRlcm46Y291bnRlcnMgY291bnRlcnNMZW46Y291bnRlcnNMZW5dKSB7CisgICAgICAgICAgc3RhcnRFbmRbMF0gPSBwYXR0ZXJuU3RhcnQ7CisgICAgICAgICAgc3RhcnRFbmRbMV0gPSB4OworICAgICAgICAgIHJldHVybiBZRVM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2VhcmNoaW5nRXZlblBhaXIpIHsKKyAgICAgICAgICBbc2VsZiByZXZlcnNlQ291bnRlcnM6Y291bnRlcnMgbGVuZ3RoOmNvdW50ZXJzTGVuXTsKKyAgICAgICAgfQorCisgICAgICAgIHBhdHRlcm5TdGFydCArPSBjb3VudGVyc1swXSArIGNvdW50ZXJzWzFdOworICAgICAgICBjb3VudGVyc1swXSA9IGNvdW50ZXJzWzJdOworICAgICAgICBjb3VudGVyc1sxXSA9IGNvdW50ZXJzWzNdOworICAgICAgICBjb3VudGVyc1syXSA9IDA7CisgICAgICAgIGNvdW50ZXJzWzNdID0gMDsKKyAgICAgICAgY291bnRlclBvc2l0aW9uLS07CisgICAgICB9IGVsc2UgeworICAgICAgICBjb3VudGVyUG9zaXRpb24rKzsKKyAgICAgIH0KKyAgICAgIGNvdW50ZXJzW2NvdW50ZXJQb3NpdGlvbl0gPSAxOworICAgICAgaXNXaGl0ZSA9ICFpc1doaXRlOworICAgIH0KKyAgfQorICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpcmV2ZXJzZUNvdW50ZXJzOihpbnQgKiljb3VudGVycyBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGggeworICBmb3IoaW50IGkgPSAwOyBpIDwgbGVuZ3RoIC8gMjsgKytpKXsKKyAgICBpbnQgdG1wID0gY291bnRlcnNbaV07CisgICAgY291bnRlcnNbaV0gPSBjb3VudGVyc1tsZW5ndGggLSBpIC0gMV07CisgICAgY291bnRlcnNbbGVuZ3RoIC0gaSAtIDFdID0gdG1wOworICB9Cit9CisKKy0gKFpYUlNTRmluZGVyUGF0dGVybiAqKXBhcnNlRm91bmRGaW5kZXJQYXR0ZXJuOihaWEJpdEFycmF5ICopcm93IHJvd051bWJlcjooaW50KXJvd051bWJlciBvZGRQYXR0ZXJuOihCT09MKW9kZFBhdHRlcm4geworICAvLyBBY3R1YWxseSB3ZSBmb3VuZCBlbGVtZW50cyAyLTUuCisgIGludCBmaXJzdENvdW50ZXI7CisgIGludCBzdGFydDsKKyAgaW50IGVuZDsKKworICBpZiAob2RkUGF0dGVybikgeworICAgIC8vIElmIHBhdHRlcm4gbnVtYmVyIGlzIG9kZCwgd2UgbmVlZCB0byBsb2NhdGUgZWxlbWVudCAxICpiZWZvcmUgKnRoZSBjdXJyZW50IGJsb2NrLgorCisgICAgaW50IGZpcnN0RWxlbWVudFN0YXJ0ID0gc3RhcnRFbmRbMF0gLSAxOworICAgIC8vIExvY2F0ZSBlbGVtZW50IDEKKyAgICB3aGlsZSAoZmlyc3RFbGVtZW50U3RhcnQgPj0gMCAmJiAhW3JvdyBnZXQ6Zmlyc3RFbGVtZW50U3RhcnRdKSB7CisgICAgICBmaXJzdEVsZW1lbnRTdGFydC0tOworICAgIH0KKworICAgIGZpcnN0RWxlbWVudFN0YXJ0Kys7CisgICAgZmlyc3RDb3VudGVyID0gc3RhcnRFbmRbMF0gLSBmaXJzdEVsZW1lbnRTdGFydDsKKyAgICBzdGFydCA9IGZpcnN0RWxlbWVudFN0YXJ0OworICAgIGVuZCA9IHN0YXJ0RW5kWzFdOworICB9IGVsc2UgeworICAgIC8vIElmIHBhdHRlcm4gbnVtYmVyIGlzIGV2ZW4sIHRoZSBwYXR0ZXJuIGlzIHJldmVyc2VkLCBzbyB3ZSBuZWVkIHRvIGxvY2F0ZSBlbGVtZW50IDEgKmFmdGVyICp0aGUgY3VycmVudCBibG9jay4KKworICAgIHN0YXJ0ID0gc3RhcnRFbmRbMF07CisKKyAgICBlbmQgPSBbcm93IG5leHRVbnNldDpzdGFydEVuZFsxXSArIDFdOworICAgIGZpcnN0Q291bnRlciA9IGVuZCAtIHN0YXJ0RW5kWzFdOworICB9CisKKyAgLy8gTWFrZSAnY291bnRlcnMnIGhvbGQgMS00CisgIGludCBjb3VudGVyc0xlbiA9IHNlbGYuZGVjb2RlRmluZGVyQ291bnRlcnNMZW47CisgIGludCBjb3VudGVyc1tjb3VudGVyc0xlbl07CisgIGNvdW50ZXJzWzBdID0gc2VsZi5kZWNvZGVGaW5kZXJDb3VudGVyc1swXTsKKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBjb3VudGVyc0xlbjsgaSsrKSB7CisgICAgY291bnRlcnNbaV0gPSBzZWxmLmRlY29kZUZpbmRlckNvdW50ZXJzW2kgLSAxXTsKKyAgfQorCisgIGNvdW50ZXJzWzBdID0gZmlyc3RDb3VudGVyOworICBpbnQgdmFsdWUgPSBbWlhBYnN0cmFjdFJTU1JlYWRlciBwYXJzZUZpbmRlclZhbHVlOmNvdW50ZXJzIGNvdW50ZXJzU2l6ZTpjb3VudGVyc0xlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRlclBhdHRlcm5UeXBlOlJTU19QQVRURVJOU19SU1NfRVhQQU5ERURfUEFUVEVSTlNdOworICBpZiAodmFsdWUgPT0gLTEpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIHJldHVybiBbW1pYUlNTRmluZGVyUGF0dGVybiBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZSBzdGFydEVuZDpbQFtAKHN0YXJ0KSwgQChlbmQpXSBtdXRhYmxlQ29weV0gc3RhcnQ6c3RhcnQgZW5kOmVuZCByb3dOdW1iZXI6cm93TnVtYmVyXTsKK30KKworLSAoWlhEYXRhQ2hhcmFjdGVyICopZGVjb2RlRGF0YUNoYXJhY3RlcjooWlhCaXRBcnJheSAqKXJvdyBwYXR0ZXJuOihaWFJTU0ZpbmRlclBhdHRlcm4gKilwYXR0ZXJuIGlzT2RkUGF0dGVybjooQk9PTClpc09kZFBhdHRlcm4gbGVmdENoYXI6KEJPT0wpbGVmdENoYXIgeworICBpbnQgY291bnRlcnNMZW4gPSBzZWxmLmRhdGFDaGFyYWN0ZXJDb3VudGVyc0xlbjsKKyAgaW50ICpjb3VudGVycyA9IHNlbGYuZGF0YUNoYXJhY3RlckNvdW50ZXJzOworICBjb3VudGVyc1swXSA9IDA7CisgIGNvdW50ZXJzWzFdID0gMDsKKyAgY291bnRlcnNbMl0gPSAwOworICBjb3VudGVyc1szXSA9IDA7CisgIGNvdW50ZXJzWzRdID0gMDsKKyAgY291bnRlcnNbNV0gPSAwOworICBjb3VudGVyc1s2XSA9IDA7CisgIGNvdW50ZXJzWzddID0gMDsKKworICBpZiAobGVmdENoYXIpIHsKKyAgICBpZiAoIVtaWE9uZURSZWFkZXIgcmVjb3JkUGF0dGVybkluUmV2ZXJzZTpyb3cgc3RhcnQ6W1twYXR0ZXJuIHN0YXJ0RW5kXVswXSBpbnRWYWx1ZV0gY291bnRlcnM6Y291bnRlcnMgY291bnRlcnNTaXplOmNvdW50ZXJzTGVuXSkgeworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKCFbWlhPbmVEUmVhZGVyIHJlY29yZFBhdHRlcm46cm93IHN0YXJ0OltbcGF0dGVybiBzdGFydEVuZF1bMV0gaW50VmFsdWVdIGNvdW50ZXJzOmNvdW50ZXJzIGNvdW50ZXJzU2l6ZTpjb3VudGVyc0xlbl0pIHsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIC8vIHJldmVyc2UgaXQKKyAgICBmb3IgKGludCBpID0gMCwgaiA9IGNvdW50ZXJzTGVuIC0gMTsgaSA8IGo7IGkrKywgai0tKSB7CisgICAgICBpbnQgdGVtcCA9IGNvdW50ZXJzW2ldOworICAgICAgY291bnRlcnNbaV0gPSBjb3VudGVyc1tqXTsKKyAgICAgIGNvdW50ZXJzW2pdID0gdGVtcDsKKyAgICB9CisgIH0vL2NvdW50ZXJzW10gaGFzIHRoZSBwaXhlbHMgb2YgdGhlIG1vZHVsZQorCisgIGludCBudW1Nb2R1bGVzID0gMTc7IC8vbGVmdCBhbmQgcmlnaHQgZGF0YSBjaGFyYWN0ZXJzIGhhdmUgYWxsIHRoZSBzYW1lIGxlbmd0aAorICBmbG9hdCBlbGVtZW50V2lkdGggPSAoZmxvYXQpW1pYQWJzdHJhY3RSU1NSZWFkZXIgY291bnQ6Y291bnRlcnMgYXJyYXlMZW46Y291bnRlcnNMZW5dIC8gKGZsb2F0KW51bU1vZHVsZXM7CisKKyAgLy8gU2FuaXR5IGNoZWNrOiBlbGVtZW50IHdpZHRoIGZvciBwYXR0ZXJuIGFuZCB0aGUgY2hhcmFjdGVyIHNob3VsZCBtYXRjaAorICBmbG9hdCBleHBlY3RlZEVsZW1lbnRXaWR0aCA9IChbcGF0dGVybi5zdGFydEVuZFsxXSBpbnRWYWx1ZV0gLSBbcGF0dGVybi5zdGFydEVuZFswXSBpbnRWYWx1ZV0pIC8gMTUuMGY7CisgIGlmIChmYWJzZihlbGVtZW50V2lkdGggLSBleHBlY3RlZEVsZW1lbnRXaWR0aCkgLyBleHBlY3RlZEVsZW1lbnRXaWR0aCA+IDAuM2YpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudGVyc0xlbjsgaSsrKSB7CisgICAgZmxvYXQgdmFsdWUgPSAxLjBmICogY291bnRlcnNbaV0gLyBlbGVtZW50V2lkdGg7CisgICAgaW50IGNvdW50ID0gKGludCkodmFsdWUgKyAwLjVmKTsKKyAgICBpZiAoY291bnQgPCAxKSB7CisgICAgICBpZiAodmFsdWUgPCAwLjNmKSB7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgICB9CisgICAgICBjb3VudCA9IDE7CisgICAgfSBlbHNlIGlmIChjb3VudCA+IDgpIHsKKyAgICAgIGlmICh2YWx1ZSA+IDguN2YpIHsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgIH0KKyAgICAgIGNvdW50ID0gODsKKyAgICB9CisgICAgaW50IG9mZnNldCA9IGkgPj4gMTsKKyAgICBpZiAoKGkgJiAweDAxKSA9PSAwKSB7CisgICAgICBzZWxmLm9kZENvdW50c1tvZmZzZXRdID0gY291bnQ7CisgICAgICBzZWxmLm9kZFJvdW5kaW5nRXJyb3JzW29mZnNldF0gPSB2YWx1ZSAtIGNvdW50OworICAgIH0gZWxzZSB7CisgICAgICBzZWxmLmV2ZW5Db3VudHNbb2Zmc2V0XSA9IGNvdW50OworICAgICAgc2VsZi5ldmVuUm91bmRpbmdFcnJvcnNbb2Zmc2V0XSA9IHZhbHVlIC0gY291bnQ7CisgICAgfQorICB9CisKKyAgaWYgKCFbc2VsZiBhZGp1c3RPZGRFdmVuQ291bnRzOm51bU1vZHVsZXNdKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGludCB3ZWlnaHRSb3dOdW1iZXIgPSA0ICogcGF0dGVybi52YWx1ZSArIChpc09kZFBhdHRlcm4gPyAwIDogMikgKyAobGVmdENoYXIgPyAwIDogMSkgLSAxOworCisgIGludCBvZGRTdW0gPSAwOworICBpbnQgb2RkQ2hlY2tzdW1Qb3J0aW9uID0gMDsKKyAgZm9yIChpbnQgaSA9IHNlbGYub2RkQ291bnRzTGVuIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICBpZiAoW3NlbGYgaXNOb3RBMWxlZnQ6cGF0dGVybiBpc09kZFBhdHRlcm46aXNPZGRQYXR0ZXJuIGxlZnRDaGFyOmxlZnRDaGFyXSkgeworICAgICAgaW50IHdlaWdodCA9IFdFSUdIVFNbd2VpZ2h0Um93TnVtYmVyXVsyICogaV07CisgICAgICBvZGRDaGVja3N1bVBvcnRpb24gKz0gc2VsZi5vZGRDb3VudHNbaV0gKiB3ZWlnaHQ7CisgICAgfQorICAgIG9kZFN1bSArPSBzZWxmLm9kZENvdW50c1tpXTsKKyAgfQorICBpbnQgZXZlbkNoZWNrc3VtUG9ydGlvbiA9IDA7CisgIC8vaW50IGV2ZW5TdW0gPSAwOworICBmb3IgKGludCBpID0gc2VsZi5ldmVuQ291bnRzTGVuIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICBpZiAoW3NlbGYgaXNOb3RBMWxlZnQ6cGF0dGVybiBpc09kZFBhdHRlcm46aXNPZGRQYXR0ZXJuIGxlZnRDaGFyOmxlZnRDaGFyXSkgeworICAgICAgaW50IHdlaWdodCA9IFdFSUdIVFNbd2VpZ2h0Um93TnVtYmVyXVsyICogaSArIDFdOworICAgICAgZXZlbkNoZWNrc3VtUG9ydGlvbiArPSBzZWxmLmV2ZW5Db3VudHNbaV0gKiB3ZWlnaHQ7CisgICAgfQorICAgIC8vZXZlblN1bSArPSBzZWxmLmV2ZW5Db3VudHNbaV07CisgIH0KKyAgaW50IGNoZWNrc3VtUG9ydGlvbiA9IG9kZENoZWNrc3VtUG9ydGlvbiArIGV2ZW5DaGVja3N1bVBvcnRpb247CisKKyAgaWYgKChvZGRTdW0gJiAweDAxKSAhPSAwIHx8IG9kZFN1bSA+IDEzIHx8IG9kZFN1bSA8IDQpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaW50IGdyb3VwID0gKDEzIC0gb2RkU3VtKSAvIDI7CisgIGludCBvZGRXaWRlc3QgPSBTWU1CT0xfV0lERVNUW2dyb3VwXTsKKyAgaW50IGV2ZW5XaWRlc3QgPSA5IC0gb2RkV2lkZXN0OworICBpbnQgdk9kZCA9IFtaWFJTU1V0aWxzIHJzc1ZhbHVlOnNlbGYub2RkQ291bnRzIHdpZHRoc0xlbjpzZWxmLm9kZENvdW50c0xlbiBtYXhXaWR0aDpvZGRXaWRlc3Qgbm9OYXJyb3c6WUVTXTsKKyAgaW50IHZFdmVuID0gW1pYUlNTVXRpbHMgcnNzVmFsdWU6c2VsZi5ldmVuQ291bnRzIHdpZHRoc0xlbjpzZWxmLmV2ZW5Db3VudHNMZW4gbWF4V2lkdGg6ZXZlbldpZGVzdCBub05hcnJvdzpOT107CisgIGludCB0RXZlbiA9IEVWRU5fVE9UQUxfU1VCU0VUW2dyb3VwXTsKKyAgaW50IGdTdW0gPSBHU1VNW2dyb3VwXTsKKyAgaW50IHZhbHVlID0gdk9kZCAqIHRFdmVuICsgdkV2ZW4gKyBnU3VtOworICByZXR1cm4gW1taWERhdGFDaGFyYWN0ZXIgYWxsb2NdIGluaXRXaXRoVmFsdWU6dmFsdWUgY2hlY2tzdW1Qb3J0aW9uOmNoZWNrc3VtUG9ydGlvbl07Cit9CisKKy0gKEJPT0wpaXNOb3RBMWxlZnQ6KFpYUlNTRmluZGVyUGF0dGVybiAqKXBhdHRlcm4gaXNPZGRQYXR0ZXJuOihCT09MKWlzT2RkUGF0dGVybiBsZWZ0Q2hhcjooQk9PTClsZWZ0Q2hhciB7CisgIHJldHVybiAhKFtwYXR0ZXJuIHZhbHVlXSA9PSAwICYmIGlzT2RkUGF0dGVybiAmJiBsZWZ0Q2hhcik7Cit9CisKKy0gKEJPT0wpYWRqdXN0T2RkRXZlbkNvdW50czooaW50KW51bU1vZHVsZXMgeworICBpbnQgb2RkU3VtID0gW1pYQWJzdHJhY3RSU1NSZWFkZXIgY291bnQ6c2VsZi5vZGRDb3VudHMgYXJyYXlMZW46c2VsZi5vZGRDb3VudHNMZW5dOworICBpbnQgZXZlblN1bSA9IFtaWEFic3RyYWN0UlNTUmVhZGVyIGNvdW50OnNlbGYuZXZlbkNvdW50cyBhcnJheUxlbjpzZWxmLmV2ZW5Db3VudHNMZW5dOworICBpbnQgbWlzbWF0Y2ggPSBvZGRTdW0gKyBldmVuU3VtIC0gbnVtTW9kdWxlczsKKyAgQk9PTCBvZGRQYXJpdHlCYWQgPSAob2RkU3VtICYgMHgwMSkgPT0gMTsKKyAgQk9PTCBldmVuUGFyaXR5QmFkID0gKGV2ZW5TdW0gJiAweDAxKSA9PSAwOworICBCT09MIGluY3JlbWVudE9kZCA9IE5POworICBCT09MIGRlY3JlbWVudE9kZCA9IE5POworICBpZiAob2RkU3VtID4gMTMpIHsKKyAgICBkZWNyZW1lbnRPZGQgPSBZRVM7CisgIH0gZWxzZSBpZiAob2RkU3VtIDwgNCkgeworICAgIGluY3JlbWVudE9kZCA9IFlFUzsKKyAgfQorICBCT09MIGluY3JlbWVudEV2ZW4gPSBOTzsKKyAgQk9PTCBkZWNyZW1lbnRFdmVuID0gTk87CisgIGlmIChldmVuU3VtID4gMTMpIHsKKyAgICBkZWNyZW1lbnRFdmVuID0gWUVTOworICB9IGVsc2UgaWYgKGV2ZW5TdW0gPCA0KSB7CisgICAgaW5jcmVtZW50RXZlbiA9IFlFUzsKKyAgfQorICAKKyAgaWYgKG1pc21hdGNoID09IDEpIHsKKyAgICBpZiAob2RkUGFyaXR5QmFkKSB7CisgICAgICBpZiAoZXZlblBhcml0eUJhZCkgeworICAgICAgICByZXR1cm4gTk87CisgICAgICB9CisgICAgICBkZWNyZW1lbnRPZGQgPSBZRVM7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghZXZlblBhcml0eUJhZCkgeworICAgICAgICByZXR1cm4gTk87CisgICAgICB9CisgICAgICBkZWNyZW1lbnRFdmVuID0gWUVTOworICAgIH0KKyAgfSBlbHNlIGlmIChtaXNtYXRjaCA9PSAtMSkgeworICAgIGlmIChvZGRQYXJpdHlCYWQpIHsKKyAgICAgIGlmIChldmVuUGFyaXR5QmFkKSB7CisgICAgICAgIHJldHVybiBOTzsKKyAgICAgIH0KKyAgICAgIGluY3JlbWVudE9kZCA9IFlFUzsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKCFldmVuUGFyaXR5QmFkKSB7CisgICAgICAgIHJldHVybiBOTzsKKyAgICAgIH0KKyAgICAgIGluY3JlbWVudEV2ZW4gPSBZRVM7CisgICAgfQorICB9IGVsc2UgaWYgKG1pc21hdGNoID09IDApIHsKKyAgICBpZiAob2RkUGFyaXR5QmFkKSB7CisgICAgICBpZiAoIWV2ZW5QYXJpdHlCYWQpIHsKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgfQorICAgICAgaWYgKG9kZFN1bSA8IGV2ZW5TdW0pIHsKKyAgICAgICAgaW5jcmVtZW50T2RkID0gWUVTOworICAgICAgICBkZWNyZW1lbnRFdmVuID0gWUVTOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGVjcmVtZW50T2RkID0gWUVTOworICAgICAgICBpbmNyZW1lbnRFdmVuID0gWUVTOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZiAoZXZlblBhcml0eUJhZCkgeworICAgICAgICByZXR1cm4gTk87CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIHJldHVybiBOTzsKKyAgfQorCisgIGlmIChpbmNyZW1lbnRPZGQpIHsKKyAgICBpZiAoZGVjcmVtZW50T2RkKSB7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIFtaWEFic3RyYWN0UlNTUmVhZGVyIGluY3JlbWVudDpzZWxmLm9kZENvdW50cyBhcnJheUxlbjpzZWxmLm9kZENvdW50c0xlbiBlcnJvcnM6c2VsZi5vZGRSb3VuZGluZ0Vycm9yc107CisgIH0KKyAgaWYgKGRlY3JlbWVudE9kZCkgeworICAgIFtaWEFic3RyYWN0UlNTUmVhZGVyIGRlY3JlbWVudDpzZWxmLm9kZENvdW50cyBhcnJheUxlbjpzZWxmLm9kZENvdW50c0xlbiBlcnJvcnM6c2VsZi5vZGRSb3VuZGluZ0Vycm9yc107CisgIH0KKyAgaWYgKGluY3JlbWVudEV2ZW4pIHsKKyAgICBpZiAoZGVjcmVtZW50RXZlbikgeworICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgICBbWlhBYnN0cmFjdFJTU1JlYWRlciBpbmNyZW1lbnQ6c2VsZi5ldmVuQ291bnRzIGFycmF5TGVuOnNlbGYuZXZlbkNvdW50c0xlbiBlcnJvcnM6c2VsZi5vZGRSb3VuZGluZ0Vycm9yc107CisgIH0KKyAgaWYgKGRlY3JlbWVudEV2ZW4pIHsKKyAgICBbWlhBYnN0cmFjdFJTU1JlYWRlciBkZWNyZW1lbnQ6c2VsZi5ldmVuQ291bnRzIGFycmF5TGVuOnNlbGYuZXZlbkNvdW50c0xlbiBlcnJvcnM6c2VsZi5ldmVuUm91bmRpbmdFcnJvcnNdOworICB9CisgIHJldHVybiBZRVM7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzMTAzZGVjb2Rlci5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMTMxMDNkZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhZWI5MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzMTAzZGVjb2Rlci5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQUkwMTN4MHhEZWNvZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhBSTAxMzEwM2RlY29kZXIgOiBaWEFJMDEzeDB4RGVjb2RlcgorCistICh2b2lkKWFkZFdlaWdodENvZGU6KE5TTXV0YWJsZVN0cmluZyAqKWJ1ZiB3ZWlnaHQ6KGludCl3ZWlnaHQ7CistIChpbnQpY2hlY2tXZWlnaHQ6KGludCl3ZWlnaHQ7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzMTAzZGVjb2Rlci5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMTMxMDNkZWNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjZThkMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzMTAzZGVjb2Rlci5tCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQUkwMTMxMDNkZWNvZGVyLmgiCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEFJMDEzMTAzZGVjb2RlcgorCistICh2b2lkKWFkZFdlaWdodENvZGU6KE5TTXV0YWJsZVN0cmluZyAqKWJ1ZiB3ZWlnaHQ6KGludCl3ZWlnaHQgeworICBbYnVmIGFwcGVuZFN0cmluZzpAIigzMTAzKSJdOworfQorCistIChpbnQpY2hlY2tXZWlnaHQ6KGludCl3ZWlnaHQgeworICByZXR1cm4gd2VpZ2h0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxMzIweERlY29kZXIuaCBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzMjB4RGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMWQzMzkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxMzIweERlY29kZXIuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFJMDEzeDB4RGVjb2Rlci5oIgorCitAaW50ZXJmYWNlIFpYQUkwMTMyMHhEZWNvZGVyIDogWlhBSTAxM3gweERlY29kZXIKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMTMyMHhEZWNvZGVyLm0gYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxMzIweERlY29kZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTQzMzFjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMTMyMHhEZWNvZGVyLm0KQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBSTAxMzIweERlY29kZXIuaCIKKworQGltcGxlbWVudGF0aW9uIFpYQUkwMTMyMHhEZWNvZGVyCisKKy0gKHZvaWQpYWRkV2VpZ2h0Q29kZTooTlNNdXRhYmxlU3RyaW5nICopYnVmIHdlaWdodDooaW50KXdlaWdodCB7CisgIGlmICh3ZWlnaHQgPCAxMDAwMCkgeworICAgIFtidWYgYXBwZW5kU3RyaW5nOkAiKDMyMDIpIl07CisgIH0gZWxzZSB7CisgICAgW2J1ZiBhcHBlbmRTdHJpbmc6QCIoMzIwMykiXTsKKyAgfQorfQorCistIChpbnQpY2hlY2tXZWlnaHQ6KGludCl3ZWlnaHQgeworICBpZiAod2VpZ2h0IDwgMTAwMDApIHsKKyAgICByZXR1cm4gd2VpZ2h0OworICB9CisgIHJldHVybiB3ZWlnaHQgLSAxMDAwMDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMTM5MnhEZWNvZGVyLmggYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxMzkyeERlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWUwMmNjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMTM5MnhEZWNvZGVyLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBSTAxZGVjb2Rlci5oIgorCitAaW50ZXJmYWNlIFpYQUkwMTM5MnhEZWNvZGVyIDogWlhBSTAxZGVjb2RlcgorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxMzkyeERlY29kZXIubSBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzOTJ4RGVjb2Rlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOWUyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxMzkyeERlY29kZXIubQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFJMDEzOTJ4RGVjb2Rlci5oIgorI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhEZWNvZGVkSW5mb3JtYXRpb24uaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEdlbmVyYWxBcHBJZERlY29kZXIuaCIKKworaW50IGNvbnN0IEFJMDEzOTJ4X0hFQURFUl9TSVpFID0gNSArIDEgKyAyOworaW50IGNvbnN0IEFJMDEzOTJ4X0xBU1RfRElHSVRfU0laRSA9IDI7CisKK0BpbXBsZW1lbnRhdGlvbiBaWEFJMDEzOTJ4RGVjb2RlcgorCistIChOU1N0cmluZyAqKXBhcnNlSW5mb3JtYXRpb25XaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoc2VsZi5pbmZvcm1hdGlvbi5zaXplIDwgQUkwMTM5MnhfSEVBREVSX1NJWkUgKyBHVElOX1NJWkUpIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNNdXRhYmxlU3RyaW5nICpidWYgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgIFtzZWxmIGVuY29kZUNvbXByZXNzZWRHdGluOmJ1ZiBjdXJyZW50UG9zOkFJMDEzOTJ4X0hFQURFUl9TSVpFXTsKKyAgaW50IGxhc3RBSWRpZ2l0ID0gW3NlbGYuZ2VuZXJhbERlY29kZXIgZXh0cmFjdE51bWVyaWNWYWx1ZUZyb21CaXRBcnJheTpBSTAxMzkyeF9IRUFERVJfU0laRSArIEdUSU5fU0laRSBiaXRzOkFJMDEzOTJ4X0xBU1RfRElHSVRfU0laRV07CisgIFtidWYgYXBwZW5kRm9ybWF0OkAiKDM5MiVkKSIsIGxhc3RBSWRpZ2l0XTsKKyAgWlhEZWNvZGVkSW5mb3JtYXRpb24gKmRlY29kZWRJbmZvcm1hdGlvbiA9IFtzZWxmLmdlbmVyYWxEZWNvZGVyIGRlY29kZUdlbmVyYWxQdXJwb3NlRmllbGQ6QUkwMTM5MnhfSEVBREVSX1NJWkUgKyBHVElOX1NJWkUgKyBBSTAxMzkyeF9MQVNUX0RJR0lUX1NJWkUgcmVtYWluaW5nOm5pbF07CisgIFtidWYgYXBwZW5kU3RyaW5nOmRlY29kZWRJbmZvcm1hdGlvbi50aGVOZXdTdHJpbmddOworICByZXR1cm4gYnVmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxMzkzeERlY29kZXIuaCBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzOTN4RGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYWMxMzQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxMzkzeERlY29kZXIuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFJMDFkZWNvZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhBSTAxMzkzeERlY29kZXIgOiBaWEFJMDFkZWNvZGVyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzOTN4RGVjb2Rlci5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMTM5M3hEZWNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0M2RiYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzOTN4RGVjb2Rlci5tCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQUkwMTM5M3hEZWNvZGVyLmgiCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisjaW1wb3J0ICJaWERlY29kZWRJbmZvcm1hdGlvbi5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYR2VuZXJhbEFwcElkRGVjb2Rlci5oIgorCitAaW1wbGVtZW50YXRpb24gWlhBSTAxMzkzeERlY29kZXIKKworaW50IGNvbnN0IEFJMDEzOTN4RGVjb2Rlcl9IRUFERVJfU0laRSA9IDUgKyAxICsgMjsKK2ludCBjb25zdCBBSTAxMzkzeERlY29kZXJfTEFTVF9ESUdJVF9TSVpFID0gMjsKK2ludCBjb25zdCBBSTAxMzkzeERlY29kZXJfRklSU1RfVEhSRUVfRElHSVRTX1NJWkUgPSAxMDsKKworLSAoTlNTdHJpbmcgKilwYXJzZUluZm9ybWF0aW9uV2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKHNlbGYuaW5mb3JtYXRpb24uc2l6ZSA8IEFJMDEzOTN4RGVjb2Rlcl9IRUFERVJfU0laRSArIEdUSU5fU0laRSkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIE5TTXV0YWJsZVN0cmluZyAqYnVmID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworCisgIFtzZWxmIGVuY29kZUNvbXByZXNzZWRHdGluOmJ1ZiBjdXJyZW50UG9zOkFJMDEzOTN4RGVjb2Rlcl9IRUFERVJfU0laRV07CisKKyAgaW50IGxhc3RBSWRpZ2l0ID0gW3NlbGYuZ2VuZXJhbERlY29kZXIgZXh0cmFjdE51bWVyaWNWYWx1ZUZyb21CaXRBcnJheTpBSTAxMzkzeERlY29kZXJfSEVBREVSX1NJWkUgKyBHVElOX1NJWkUgYml0czpBSTAxMzkzeERlY29kZXJfTEFTVF9ESUdJVF9TSVpFXTsKKworICBbYnVmIGFwcGVuZEZvcm1hdDpAIigzOTMlZCkiLCBsYXN0QUlkaWdpdF07CisKKyAgaW50IGZpcnN0VGhyZWVEaWdpdHMgPSBbc2VsZi5nZW5lcmFsRGVjb2RlciBleHRyYWN0TnVtZXJpY1ZhbHVlRnJvbUJpdEFycmF5OkFJMDEzOTN4RGVjb2Rlcl9IRUFERVJfU0laRSArIEdUSU5fU0laRSArIEFJMDEzOTN4RGVjb2Rlcl9MQVNUX0RJR0lUX1NJWkUgYml0czpBSTAxMzkzeERlY29kZXJfRklSU1RfVEhSRUVfRElHSVRTX1NJWkVdOworICBpZiAoZmlyc3RUaHJlZURpZ2l0cyAvIDEwMCA9PSAwKSB7CisgICAgW2J1ZiBhcHBlbmRTdHJpbmc6QCIwIl07CisgIH0KKyAgaWYgKGZpcnN0VGhyZWVEaWdpdHMgLyAxMCA9PSAwKSB7CisgICAgW2J1ZiBhcHBlbmRTdHJpbmc6QCIwIl07CisgIH0KKyAgW2J1ZiBhcHBlbmRGb3JtYXQ6QCIlZCIsIGZpcnN0VGhyZWVEaWdpdHNdOworCisgIFpYRGVjb2RlZEluZm9ybWF0aW9uICpnZW5lcmFsSW5mb3JtYXRpb24gPSBbc2VsZi5nZW5lcmFsRGVjb2RlciBkZWNvZGVHZW5lcmFsUHVycG9zZUZpZWxkOkFJMDEzOTN4RGVjb2Rlcl9IRUFERVJfU0laRSArIEdUSU5fU0laRSArIEFJMDEzOTN4RGVjb2Rlcl9MQVNUX0RJR0lUX1NJWkUgKyBBSTAxMzkzeERlY29kZXJfRklSU1RfVEhSRUVfRElHSVRTX1NJWkUgcmVtYWluaW5nOm5pbF07CisgIFtidWYgYXBwZW5kU3RyaW5nOmdlbmVyYWxJbmZvcm1hdGlvbi50aGVOZXdTdHJpbmddOworCisgIHJldHVybiBidWY7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzeDB4MXhEZWNvZGVyLmggYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxM3gweDF4RGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMjIxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxM3gweDF4RGVjb2Rlci5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQUkwMXdlaWdodERlY29kZXIuaCIKKworQGludGVyZmFjZSBaWEFJMDEzeDB4MXhEZWNvZGVyIDogWlhBSTAxd2VpZ2h0RGVjb2RlcgorCistIChpZClpbml0V2l0aEluZm9ybWF0aW9uOihaWEJpdEFycmF5ICopaW5mb3JtYXRpb24gZmlyc3RBSWRpZ2l0czooTlNTdHJpbmcgKilmaXJzdEFJZGlnaXRzIGRhdGVDb2RlOihOU1N0cmluZyAqKWRhdGVDb2RlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxM3gweDF4RGVjb2Rlci5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMTN4MHgxeERlY29kZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmI3OWMyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMTN4MHgxeERlY29kZXIubQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFJMDEzeDB4MXhEZWNvZGVyLmgiCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhHZW5lcmFsQXBwSWREZWNvZGVyLmgiCisKK2ludCBjb25zdCBBSTAxM3gweDF4X0hFQURFUl9TSVpFID0gNyArIDE7CitpbnQgY29uc3QgQUkwMTN4MHgxeF9XRUlHSFRfU0laRSA9IDIwOworaW50IGNvbnN0IEFJMDEzeDB4MXhfREFURV9TSVpFID0gMTY7CisKK0BpbnRlcmZhY2UgWlhBSTAxM3gweDF4RGVjb2RlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmRhdGVDb2RlOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpmaXJzdEFJZGlnaXRzOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEFJMDEzeDB4MXhEZWNvZGVyCisKKy0gKGlkKWluaXRXaXRoSW5mb3JtYXRpb246KFpYQml0QXJyYXkgKilpbmZvcm1hdGlvbiBmaXJzdEFJZGlnaXRzOihOU1N0cmluZyAqKWZpcnN0QUlkaWdpdHMgZGF0ZUNvZGU6KE5TU3RyaW5nICopZGF0ZUNvZGUgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uXSkgeworICAgIF9kYXRlQ29kZSA9IGRhdGVDb2RlOworICAgIF9maXJzdEFJZGlnaXRzID0gZmlyc3RBSWRpZ2l0czsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChOU1N0cmluZyAqKXBhcnNlSW5mb3JtYXRpb25XaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoc2VsZi5pbmZvcm1hdGlvbi5zaXplICE9IEFJMDEzeDB4MXhfSEVBREVSX1NJWkUgKyBHVElOX1NJWkUgKyBBSTAxM3gweDF4X1dFSUdIVF9TSVpFICsgQUkwMTN4MHgxeF9EQVRFX1NJWkUpIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNNdXRhYmxlU3RyaW5nICpidWYgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgIFtzZWxmIGVuY29kZUNvbXByZXNzZWRHdGluOmJ1ZiBjdXJyZW50UG9zOkFJMDEzeDB4MXhfSEVBREVSX1NJWkVdOworICBbc2VsZiBlbmNvZGVDb21wcmVzc2VkV2VpZ2h0OmJ1ZiBjdXJyZW50UG9zOkFJMDEzeDB4MXhfSEVBREVSX1NJWkUgKyBHVElOX1NJWkUgd2VpZ2h0U2l6ZTpBSTAxM3gweDF4X1dFSUdIVF9TSVpFXTsKKyAgW3NlbGYgZW5jb2RlQ29tcHJlc3NlZERhdGU6YnVmIGN1cnJlbnRQb3M6QUkwMTN4MHgxeF9IRUFERVJfU0laRSArIEdUSU5fU0laRSArIEFJMDEzeDB4MXhfV0VJR0hUX1NJWkVdOworICByZXR1cm4gYnVmOworfQorCistICh2b2lkKWVuY29kZUNvbXByZXNzZWREYXRlOihOU011dGFibGVTdHJpbmcgKilidWYgY3VycmVudFBvczooaW50KWN1cnJlbnRQb3MgeworICBpbnQgbnVtZXJpY0RhdGUgPSBbc2VsZi5nZW5lcmFsRGVjb2RlciBleHRyYWN0TnVtZXJpY1ZhbHVlRnJvbUJpdEFycmF5OmN1cnJlbnRQb3MgYml0czpBSTAxM3gweDF4X0RBVEVfU0laRV07CisgIGlmIChudW1lcmljRGF0ZSA9PSAzODQwMCkgeworICAgIHJldHVybjsKKyAgfQorICBbYnVmIGFwcGVuZEZvcm1hdDpAIiglQCkiLCBzZWxmLmRhdGVDb2RlXTsKKyAgaW50IGRheSA9IG51bWVyaWNEYXRlICUgMzI7CisgIG51bWVyaWNEYXRlIC89IDMyOworICBpbnQgbW9udGggPSBudW1lcmljRGF0ZSAlIDEyICsgMTsKKyAgbnVtZXJpY0RhdGUgLz0gMTI7CisgIGludCB5ZWFyID0gbnVtZXJpY0RhdGU7CisgIGlmICh5ZWFyIC8gMTAgPT0gMCkgeworICAgIFtidWYgYXBwZW5kU3RyaW5nOkAiMCJdOworICB9CisgIFtidWYgYXBwZW5kRm9ybWF0OkAiJWQiLCB5ZWFyXTsKKyAgaWYgKG1vbnRoIC8gMTAgPT0gMCkgeworICAgIFtidWYgYXBwZW5kU3RyaW5nOkAiMCJdOworICB9CisgIFtidWYgYXBwZW5kRm9ybWF0OkAiJWQiLCBtb250aF07CisgIGlmIChkYXkgLyAxMCA9PSAwKSB7CisgICAgW2J1ZiBhcHBlbmRTdHJpbmc6QCIwIl07CisgIH0KKyAgW2J1ZiBhcHBlbmRGb3JtYXQ6QCIlZCIsIGRheV07Cit9CisKKy0gKHZvaWQpYWRkV2VpZ2h0Q29kZTooTlNNdXRhYmxlU3RyaW5nICopYnVmIHdlaWdodDooaW50KXdlaWdodCB7CisgIGludCBsYXN0QUkgPSB3ZWlnaHQgLyAxMDAwMDA7CisgIFtidWYgYXBwZW5kRm9ybWF0OkAiKCVAJWQpIiwgc2VsZi5maXJzdEFJZGlnaXRzLCBsYXN0QUldOworfQorCistIChpbnQpY2hlY2tXZWlnaHQ6KGludCl3ZWlnaHQgeworICByZXR1cm4gd2VpZ2h0ICUgMTAwMDAwOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxM3gweERlY29kZXIuaCBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzeDB4RGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDJkNmMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxM3gweERlY29kZXIuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFJMDF3ZWlnaHREZWNvZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhBSTAxM3gweERlY29kZXIgOiBaWEFJMDF3ZWlnaHREZWNvZGVyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzeDB4RGVjb2Rlci5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMTN4MHhEZWNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxNjNjOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDEzeDB4RGVjb2Rlci5tCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQUkwMTN4MHhEZWNvZGVyLmgiCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorCitpbnQgY29uc3QgQUkwMTN4MHhfSEVBREVSX1NJWkUgPSA0ICsgMTsKK2ludCBjb25zdCBBSTAxM3gweF9XRUlHSFRfU0laRSA9IDE1OworCitAaW1wbGVtZW50YXRpb24gWlhBSTAxM3gweERlY29kZXIKKworLSAoTlNTdHJpbmcgKilwYXJzZUluZm9ybWF0aW9uV2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKHNlbGYuaW5mb3JtYXRpb24uc2l6ZSAhPSBBSTAxM3gweF9IRUFERVJfU0laRSArIEdUSU5fU0laRSArIEFJMDEzeDB4X1dFSUdIVF9TSVpFKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNNdXRhYmxlU3RyaW5nICpidWYgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisKKyAgW3NlbGYgZW5jb2RlQ29tcHJlc3NlZEd0aW46YnVmIGN1cnJlbnRQb3M6QUkwMTN4MHhfSEVBREVSX1NJWkVdOworICBbc2VsZiBlbmNvZGVDb21wcmVzc2VkV2VpZ2h0OmJ1ZiBjdXJyZW50UG9zOkFJMDEzeDB4X0hFQURFUl9TSVpFICsgR1RJTl9TSVpFIHdlaWdodFNpemU6QUkwMTN4MHhfV0VJR0hUX1NJWkVdOworCisgIHJldHVybiBidWY7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDFBbmRPdGhlckFJcy5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMUFuZE90aGVyQUlzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5OTU4MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDFBbmRPdGhlckFJcy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQUkwMWRlY29kZXIuaCIKKworQGludGVyZmFjZSBaWEFJMDFBbmRPdGhlckFJcyA6IFpYQUkwMWRlY29kZXIKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMUFuZE90aGVyQUlzLm0gYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxQW5kT3RoZXJBSXMubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDFhYzc3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMUFuZE90aGVyQUlzLm0KQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBSTAxQW5kT3RoZXJBSXMuaCIKKyNpbXBvcnQgIlpYR2VuZXJhbEFwcElkRGVjb2Rlci5oIgorCitpbnQgY29uc3QgQUkwMV9IRUFERVJfU0laRSA9IDEgKyAxICsgMjsKKworQGltcGxlbWVudGF0aW9uIFpYQUkwMUFuZE90aGVyQUlzCisKKy0gKE5TU3RyaW5nICopcGFyc2VJbmZvcm1hdGlvbldpdGhFcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIE5TTXV0YWJsZVN0cmluZyAqYnVmZiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKworICBbYnVmZiBhcHBlbmRTdHJpbmc6QCIoMDEpIl07CisgIGludCBpbml0aWFsR3RpblBvc2l0aW9uID0gKGludClbYnVmZiBsZW5ndGhdOworICBpbnQgZmlyc3RHdGluRGlnaXQgPSBbc2VsZi5nZW5lcmFsRGVjb2RlciBleHRyYWN0TnVtZXJpY1ZhbHVlRnJvbUJpdEFycmF5OkFJMDFfSEVBREVSX1NJWkUgYml0czo0XTsKKyAgW2J1ZmYgYXBwZW5kRm9ybWF0OkAiJWQiLCBmaXJzdEd0aW5EaWdpdF07CisKKyAgW3NlbGYgZW5jb2RlQ29tcHJlc3NlZEd0aW5XaXRob3V0QUk6YnVmZiBjdXJyZW50UG9zOkFJMDFfSEVBREVSX1NJWkUgKyA0IGluaXRpYWxCdWZmZXJQb3NpdGlvbjppbml0aWFsR3RpblBvc2l0aW9uXTsKKworICByZXR1cm4gW3NlbGYuZ2VuZXJhbERlY29kZXIgZGVjb2RlQWxsQ29kZXM6YnVmZiBpbml0aWFsUG9zaXRpb246QUkwMV9IRUFERVJfU0laRSArIDQ0IGVycm9yOmVycm9yXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMWRlY29kZXIuaCBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDFkZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2MmZmYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDFkZWNvZGVyLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5oIgorCitleHRlcm4gY29uc3QgaW50IEdUSU5fU0laRTsKKworQGludGVyZmFjZSBaWEFJMDFkZWNvZGVyIDogWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2RlcgorCistICh2b2lkKWVuY29kZUNvbXByZXNzZWRHdGluOihOU011dGFibGVTdHJpbmcgKilidWYgY3VycmVudFBvczooaW50KWN1cnJlbnRQb3M7CistICh2b2lkKWVuY29kZUNvbXByZXNzZWRHdGluV2l0aG91dEFJOihOU011dGFibGVTdHJpbmcgKilidWYgY3VycmVudFBvczooaW50KWN1cnJlbnRQb3MgaW5pdGlhbEJ1ZmZlclBvc2l0aW9uOihpbnQpaW5pdGlhbEJ1ZmZlclBvc2l0aW9uOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBSTAxZGVjb2Rlci5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMWRlY29kZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGIxMGZkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMWRlY29kZXIubQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFJMDFkZWNvZGVyLmgiCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisjaW1wb3J0ICJaWEdlbmVyYWxBcHBJZERlY29kZXIuaCIKKworaW50IGNvbnN0IEdUSU5fU0laRSA9IDQwOworCitAaW1wbGVtZW50YXRpb24gWlhBSTAxZGVjb2RlcgorCistICh2b2lkKWVuY29kZUNvbXByZXNzZWRHdGluOihOU011dGFibGVTdHJpbmcgKilidWYgY3VycmVudFBvczooaW50KWN1cnJlbnRQb3MgeworICBbYnVmIGFwcGVuZFN0cmluZzpAIigwMSkiXTsKKyAgaW50IGluaXRpYWxQb3NpdGlvbiA9IChpbnQpW2J1ZiBsZW5ndGhdOworICBbYnVmIGFwcGVuZFN0cmluZzpAIjkiXTsKKworICBbc2VsZiBlbmNvZGVDb21wcmVzc2VkR3RpbldpdGhvdXRBSTpidWYgY3VycmVudFBvczpjdXJyZW50UG9zIGluaXRpYWxCdWZmZXJQb3NpdGlvbjppbml0aWFsUG9zaXRpb25dOworfQorCistICh2b2lkKWVuY29kZUNvbXByZXNzZWRHdGluV2l0aG91dEFJOihOU011dGFibGVTdHJpbmcgKilidWYgY3VycmVudFBvczooaW50KWN1cnJlbnRQb3MgaW5pdGlhbEJ1ZmZlclBvc2l0aW9uOihpbnQpaW5pdGlhbEJ1ZmZlclBvc2l0aW9uIHsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICBpbnQgY3VycmVudEJsb2NrID0gW3NlbGYuZ2VuZXJhbERlY29kZXIgZXh0cmFjdE51bWVyaWNWYWx1ZUZyb21CaXRBcnJheTpjdXJyZW50UG9zICsgMTAgKiBpIGJpdHM6MTBdOworICAgIGlmIChjdXJyZW50QmxvY2sgLyAxMDAgPT0gMCkgeworICAgICAgW2J1ZiBhcHBlbmRTdHJpbmc6QCIwIl07CisgICAgfQorICAgIGlmIChjdXJyZW50QmxvY2sgLyAxMCA9PSAwKSB7CisgICAgICBbYnVmIGFwcGVuZFN0cmluZzpAIjAiXTsKKyAgICB9CisgICAgW2J1ZiBhcHBlbmRGb3JtYXQ6QCIlZCIsIGN1cnJlbnRCbG9ja107CisgIH0KKworICBbc2VsZiBhcHBlbmRDaGVja0RpZ2l0OmJ1ZiBjdXJyZW50UG9zOmluaXRpYWxCdWZmZXJQb3NpdGlvbl07Cit9CisKKy0gKHZvaWQpYXBwZW5kQ2hlY2tEaWdpdDooTlNNdXRhYmxlU3RyaW5nICopYnVmIGN1cnJlbnRQb3M6KGludCljdXJyZW50UG9zIHsKKyAgaW50IGNoZWNrRGlnaXQgPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IDEzOyBpKyspIHsKKyAgICBpbnQgZGlnaXQgPSBbYnVmIGNoYXJhY3RlckF0SW5kZXg6aSArIGN1cnJlbnRQb3NdIC0gJzAnOworICAgIGNoZWNrRGlnaXQgKz0gKGkgJiAweDAxKSA9PSAwID8gMyAqIGRpZ2l0IDogZGlnaXQ7CisgIH0KKworICBjaGVja0RpZ2l0ID0gMTAgLSAoY2hlY2tEaWdpdCAlIDEwKTsKKyAgaWYgKGNoZWNrRGlnaXQgPT0gMTApIHsKKyAgICBjaGVja0RpZ2l0ID0gMDsKKyAgfQorCisgIFtidWYgYXBwZW5kRm9ybWF0OkAiJWQiLCBjaGVja0RpZ2l0XTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMXdlaWdodERlY29kZXIuaCBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDF3ZWlnaHREZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3NTBhMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDF3ZWlnaHREZWNvZGVyLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBSTAxZGVjb2Rlci5oIgorCitAY2xhc3MgWlhCaXRBcnJheTsKKworQGludGVyZmFjZSBaWEFJMDF3ZWlnaHREZWNvZGVyIDogWlhBSTAxZGVjb2RlcgorCistICh2b2lkKWVuY29kZUNvbXByZXNzZWRXZWlnaHQ6KE5TTXV0YWJsZVN0cmluZyAqKWJ1ZiBjdXJyZW50UG9zOihpbnQpY3VycmVudFBvcyB3ZWlnaHRTaXplOihpbnQpd2VpZ2h0U2l6ZTsKKy0gKHZvaWQpYWRkV2VpZ2h0Q29kZTooTlNNdXRhYmxlU3RyaW5nICopYnVmIHdlaWdodDooaW50KXdlaWdodDsKKy0gKGludCljaGVja1dlaWdodDooaW50KXdlaWdodDsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQUkwMXdlaWdodERlY29kZXIubSBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDF3ZWlnaHREZWNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3MWNiOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFJMDF3ZWlnaHREZWNvZGVyLm0KQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBSTAxd2VpZ2h0RGVjb2Rlci5oIgorI2ltcG9ydCAiWlhHZW5lcmFsQXBwSWREZWNvZGVyLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEFJMDF3ZWlnaHREZWNvZGVyCisKKy0gKHZvaWQpZW5jb2RlQ29tcHJlc3NlZFdlaWdodDooTlNNdXRhYmxlU3RyaW5nICopYnVmIGN1cnJlbnRQb3M6KGludCljdXJyZW50UG9zIHdlaWdodFNpemU6KGludCl3ZWlnaHRTaXplIHsKKyAgaW50IG9yaWdpbmFsV2VpZ2h0TnVtZXJpYyA9IFtzZWxmLmdlbmVyYWxEZWNvZGVyIGV4dHJhY3ROdW1lcmljVmFsdWVGcm9tQml0QXJyYXk6Y3VycmVudFBvcyBiaXRzOndlaWdodFNpemVdOworICBbc2VsZiBhZGRXZWlnaHRDb2RlOmJ1ZiB3ZWlnaHQ6b3JpZ2luYWxXZWlnaHROdW1lcmljXTsKKworICBpbnQgd2VpZ2h0TnVtZXJpYyA9IFtzZWxmIGNoZWNrV2VpZ2h0Om9yaWdpbmFsV2VpZ2h0TnVtZXJpY107CisKKyAgaW50IGN1cnJlbnREaXZpc29yID0gMTAwMDAwOworICBmb3IgKGludCBpID0gMDsgaSA8IDU7ICsraSkgeworICAgIGlmICh3ZWlnaHROdW1lcmljIC8gY3VycmVudERpdmlzb3IgPT0gMCkgeworICAgICAgW2J1ZiBhcHBlbmRTdHJpbmc6QCIwIl07CisgICAgfQorICAgIGN1cnJlbnREaXZpc29yIC89IDEwOworICB9CisKKyAgW2J1ZiBhcHBlbmRGb3JtYXQ6QCIlZCIsIHdlaWdodE51bWVyaWNdOworfQorCistICh2b2lkKWFkZFdlaWdodENvZGU6KE5TTXV0YWJsZVN0cmluZyAqKWJ1ZiB3ZWlnaHQ6KGludCl3ZWlnaHQgeworICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJZb3UgbXVzdCBvdmVycmlkZSAlQCBpbiBhIHN1YmNsYXNzIiwgTlNTdHJpbmdGcm9tU2VsZWN0b3IoX2NtZCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKK30KKworLSAoaW50KWNoZWNrV2VpZ2h0OihpbnQpd2VpZ2h0IHsKKyAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiWW91IG11c3Qgb3ZlcnJpZGUgJUAgaW4gYSBzdWJjbGFzcyIsIE5TU3RyaW5nRnJvbVNlbGVjdG9yKF9jbWQpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLmggYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiY2M1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BjbGFzcyBaWEJpdEFycmF5LCBaWEdlbmVyYWxBcHBJZERlY29kZXI7CisKK0BpbnRlcmZhY2UgWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2RlciA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBaWEdlbmVyYWxBcHBJZERlY29kZXIgKmdlbmVyYWxEZWNvZGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIFpYQml0QXJyYXkgKmluZm9ybWF0aW9uOworCistIChpZClpbml0V2l0aEluZm9ybWF0aW9uOihaWEJpdEFycmF5ICopaW5mb3JtYXRpb247CistIChOU1N0cmluZyAqKXBhcnNlSW5mb3JtYXRpb25XaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisrIChaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyICopY3JlYXRlRGVjb2RlcjooWlhCaXRBcnJheSAqKWluZm9ybWF0aW9uOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2Rlci5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWU4YzgzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIubQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLmgiCisjaW1wb3J0ICJaWEFJMDEzMTAzZGVjb2Rlci5oIgorI2ltcG9ydCAiWlhBSTAxMzIweERlY29kZXIuaCIKKyNpbXBvcnQgIlpYQUkwMTM5MnhEZWNvZGVyLmgiCisjaW1wb3J0ICJaWEFJMDEzOTN4RGVjb2Rlci5oIgorI2ltcG9ydCAiWlhBSTAxM3gweDF4RGVjb2Rlci5oIgorI2ltcG9ydCAiWlhBSTAxQW5kT3RoZXJBSXMuaCIKKyNpbXBvcnQgIlpYQW55QUlEZWNvZGVyLmgiCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisjaW1wb3J0ICJaWEdlbmVyYWxBcHBJZERlY29kZXIuaCIKKworQGltcGxlbWVudGF0aW9uIFpYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIKKworLSAoaWQpaW5pdFdpdGhJbmZvcm1hdGlvbjooWlhCaXRBcnJheSAqKWluZm9ybWF0aW9uIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfaW5mb3JtYXRpb24gPSBpbmZvcm1hdGlvbjsKKyAgICBfZ2VuZXJhbERlY29kZXIgPSBbW1pYR2VuZXJhbEFwcElkRGVjb2RlciBhbGxvY10gaW5pdFdpdGhJbmZvcm1hdGlvbjppbmZvcm1hdGlvbl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNTdHJpbmcgKilwYXJzZUluZm9ybWF0aW9uV2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiWW91IG11c3Qgb3ZlcnJpZGUgJUAgaW4gYSBzdWJjbGFzcyIsIE5TU3RyaW5nRnJvbVNlbGVjdG9yKF9jbWQpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07Cit9CisKKysgKFpYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIgKiljcmVhdGVEZWNvZGVyOihaWEJpdEFycmF5ICopaW5mb3JtYXRpb24geworICBpZiAoW2luZm9ybWF0aW9uIGdldDoxXSkgeworICAgIHJldHVybiBbW1pYQUkwMUFuZE90aGVyQUlzIGFsbG9jXSBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uXTsKKyAgfQorICBpZiAoIVtpbmZvcm1hdGlvbiBnZXQ6Ml0pIHsKKyAgICByZXR1cm4gW1taWEFueUFJRGVjb2RlciBhbGxvY10gaW5pdFdpdGhJbmZvcm1hdGlvbjppbmZvcm1hdGlvbl07CisgIH0KKworICBpbnQgZm91ckJpdEVuY29kYXRpb25NZXRob2QgPSBbWlhHZW5lcmFsQXBwSWREZWNvZGVyIGV4dHJhY3ROdW1lcmljVmFsdWVGcm9tQml0QXJyYXk6aW5mb3JtYXRpb24gcG9zOjEgYml0czo0XTsKKworICBzd2l0Y2ggKGZvdXJCaXRFbmNvZGF0aW9uTWV0aG9kKSB7CisgIGNhc2UgNDoKKyAgICByZXR1cm4gW1taWEFJMDEzMTAzZGVjb2RlciBhbGxvY10gaW5pdFdpdGhJbmZvcm1hdGlvbjppbmZvcm1hdGlvbl07CisgIGNhc2UgNToKKyAgICByZXR1cm4gW1taWEFJMDEzMjB4RGVjb2RlciBhbGxvY10gaW5pdFdpdGhJbmZvcm1hdGlvbjppbmZvcm1hdGlvbl07CisgIH0KKworICBpbnQgZml2ZUJpdEVuY29kYXRpb25NZXRob2QgPSBbWlhHZW5lcmFsQXBwSWREZWNvZGVyIGV4dHJhY3ROdW1lcmljVmFsdWVGcm9tQml0QXJyYXk6aW5mb3JtYXRpb24gcG9zOjEgYml0czo1XTsKKyAgc3dpdGNoIChmaXZlQml0RW5jb2RhdGlvbk1ldGhvZCkgeworICBjYXNlIDEyOgorICAgIHJldHVybiBbW1pYQUkwMTM5MnhEZWNvZGVyIGFsbG9jXSBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uXTsKKyAgY2FzZSAxMzoKKyAgICByZXR1cm4gW1taWEFJMDEzOTN4RGVjb2RlciBhbGxvY10gaW5pdFdpdGhJbmZvcm1hdGlvbjppbmZvcm1hdGlvbl07CisgIH0KKyAgCisgIGludCBzZXZlbkJpdEVuY29kYXRpb25NZXRob2QgPSBbWlhHZW5lcmFsQXBwSWREZWNvZGVyIGV4dHJhY3ROdW1lcmljVmFsdWVGcm9tQml0QXJyYXk6aW5mb3JtYXRpb24gcG9zOjEgYml0czo3XTsKKyAgc3dpdGNoIChzZXZlbkJpdEVuY29kYXRpb25NZXRob2QpIHsKKyAgY2FzZSA1NjoKKyAgICByZXR1cm4gW1taWEFJMDEzeDB4MXhEZWNvZGVyIGFsbG9jXSBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uIGZpcnN0QUlkaWdpdHM6QCIzMTAiIGRhdGVDb2RlOkAiMTEiXTsKKyAgY2FzZSA1NzoKKyAgICByZXR1cm4gW1taWEFJMDEzeDB4MXhEZWNvZGVyIGFsbG9jXSBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uIGZpcnN0QUlkaWdpdHM6QCIzMjAiIGRhdGVDb2RlOkAiMTEiXTsKKyAgY2FzZSA1ODoKKyAgICByZXR1cm4gW1taWEFJMDEzeDB4MXhEZWNvZGVyIGFsbG9jXSBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uIGZpcnN0QUlkaWdpdHM6QCIzMTAiIGRhdGVDb2RlOkAiMTMiXTsKKyAgY2FzZSA1OToKKyAgICByZXR1cm4gW1taWEFJMDEzeDB4MXhEZWNvZGVyIGFsbG9jXSBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uIGZpcnN0QUlkaWdpdHM6QCIzMjAiIGRhdGVDb2RlOkAiMTMiXTsKKyAgY2FzZSA2MDoKKyAgICByZXR1cm4gW1taWEFJMDEzeDB4MXhEZWNvZGVyIGFsbG9jXSBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uIGZpcnN0QUlkaWdpdHM6QCIzMTAiIGRhdGVDb2RlOkAiMTUiXTsKKyAgY2FzZSA2MToKKyAgICByZXR1cm4gW1taWEFJMDEzeDB4MXhEZWNvZGVyIGFsbG9jXSBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uIGZpcnN0QUlkaWdpdHM6QCIzMjAiIGRhdGVDb2RlOkAiMTUiXTsKKyAgY2FzZSA2MjoKKyAgICByZXR1cm4gW1taWEFJMDEzeDB4MXhEZWNvZGVyIGFsbG9jXSBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uIGZpcnN0QUlkaWdpdHM6QCIzMTAiIGRhdGVDb2RlOkAiMTciXTsKKyAgY2FzZSA2MzoKKyAgICByZXR1cm4gW1taWEFJMDEzeDB4MXhEZWNvZGVyIGFsbG9jXSBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uIGZpcnN0QUlkaWdpdHM6QCIzMjAiIGRhdGVDb2RlOkAiMTciXTsKKyAgfQorCisgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInVua25vd24gZGVjb2RlcjogJUAiLCBpbmZvcm1hdGlvbl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWxdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBbnlBSURlY29kZXIuaCBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFueUFJRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmRhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhBbnlBSURlY29kZXIuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhBbnlBSURlY29kZXIgOiBaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFueUFJRGVjb2Rlci5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQW55QUlEZWNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyODMzMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEFueUFJRGVjb2Rlci5tCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQW55QUlEZWNvZGVyLmgiCisjaW1wb3J0ICJaWEdlbmVyYWxBcHBJZERlY29kZXIuaCIKKworaW50IGNvbnN0IEFOWV9BSV9IRUFERVJfU0laRSA9IDIgKyAxICsgMjsKKworQGltcGxlbWVudGF0aW9uIFpYQW55QUlEZWNvZGVyCisKKy0gKE5TU3RyaW5nICopcGFyc2VJbmZvcm1hdGlvbldpdGhFcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIE5TTXV0YWJsZVN0cmluZyAqYnVmID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICByZXR1cm4gW3NlbGYuZ2VuZXJhbERlY29kZXIgZGVjb2RlQWxsQ29kZXM6YnVmIGluaXRpYWxQb3NpdGlvbjpBTllfQUlfSEVBREVSX1NJWkUgZXJyb3I6ZXJyb3JdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhCbG9ja1BhcnNlZFJlc3VsdC5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQmxvY2tQYXJzZWRSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTQ5YTAxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQmxvY2tQYXJzZWRSZXN1bHQuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAY2xhc3MgWlhEZWNvZGVkSW5mb3JtYXRpb247CisKK0BpbnRlcmZhY2UgWlhCbG9ja1BhcnNlZFJlc3VsdCA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBaWERlY29kZWRJbmZvcm1hdGlvbiAqZGVjb2RlZEluZm9ybWF0aW9uOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIEJPT0wgZmluaXNoZWQ7CisKKy0gKGlkKWluaXRXaXRoRmluaXNoZWQ6KEJPT0wpZmluaXNoZWQ7CistIChpZClpbml0V2l0aEluZm9ybWF0aW9uOihaWERlY29kZWRJbmZvcm1hdGlvbiAqKWluZm9ybWF0aW9uIGZpbmlzaGVkOihCT09MKWZpbmlzaGVkOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhCbG9ja1BhcnNlZFJlc3VsdC5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQmxvY2tQYXJzZWRSZXN1bHQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQzODY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQmxvY2tQYXJzZWRSZXN1bHQubQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJsb2NrUGFyc2VkUmVzdWx0LmgiCisjaW1wb3J0ICJaWERlY29kZWRJbmZvcm1hdGlvbi5oIgorCitAaW1wbGVtZW50YXRpb24gWlhCbG9ja1BhcnNlZFJlc3VsdAorCistIChpZClpbml0V2l0aEZpbmlzaGVkOihCT09MKWZpbmlzaGVkIHsKKyAgcmV0dXJuIFtzZWxmIGluaXRXaXRoSW5mb3JtYXRpb246bmlsIGZpbmlzaGVkOmZpbmlzaGVkXTsKK30KKworLSAoaWQpaW5pdFdpdGhJbmZvcm1hdGlvbjooWlhEZWNvZGVkSW5mb3JtYXRpb24gKilpbmZvcm1hdGlvbiBmaW5pc2hlZDooQk9PTClmaW5pc2hlZCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2RlY29kZWRJbmZvcm1hdGlvbiA9IGluZm9ybWF0aW9uOworICAgIF9maW5pc2hlZCA9IGZpbmlzaGVkOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEN1cnJlbnRQYXJzaW5nU3RhdGUuaCBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEN1cnJlbnRQYXJzaW5nU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTIwOTM1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQ3VycmVudFBhcnNpbmdTdGF0ZS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BpbnRlcmZhY2UgWlhDdXJyZW50UGFyc2luZ1N0YXRlIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IHBvc2l0aW9uOworCistIChCT09MKWFscGhhOworLSAoQk9PTCludW1lcmljOworLSAoQk9PTClpc29JZWM2NDY7CistICh2b2lkKXNldE51bWVyaWM7CistICh2b2lkKXNldEFscGhhOworLSAodm9pZClzZXRJc29JZWM2NDY7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEN1cnJlbnRQYXJzaW5nU3RhdGUubSBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEN1cnJlbnRQYXJzaW5nU3RhdGUubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGY0YzY5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYQ3VycmVudFBhcnNpbmdTdGF0ZS5tCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQ3VycmVudFBhcnNpbmdTdGF0ZS5oIgorCitlbnVtIHsKKyAgTlVNRVJJQ19TVEFURSwKKyAgQUxQSEFfU1RBVEUsCisgIElTT19JRUNfNjQ2X1NUQVRFCit9OworCitAaW50ZXJmYWNlIFpYQ3VycmVudFBhcnNpbmdTdGF0ZSAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgZW5jb2Rpbmc7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYQ3VycmVudFBhcnNpbmdTdGF0ZQorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfcG9zaXRpb24gPSAwOworICAgIF9lbmNvZGluZyA9IE5VTUVSSUNfU1RBVEU7CisgIH0KKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJPT0wpYWxwaGEgeworICByZXR1cm4gc2VsZi5lbmNvZGluZyA9PSBBTFBIQV9TVEFURTsKK30KKworLSAoQk9PTCludW1lcmljIHsKKyAgcmV0dXJuIHNlbGYuZW5jb2RpbmcgPT0gTlVNRVJJQ19TVEFURTsKK30KKworLSAoQk9PTClpc29JZWM2NDYgeworICByZXR1cm4gc2VsZi5lbmNvZGluZyA9PSBJU09fSUVDXzY0Nl9TVEFURTsKK30KKworLSAodm9pZClzZXROdW1lcmljIHsKKyAgc2VsZi5lbmNvZGluZyA9IE5VTUVSSUNfU1RBVEU7Cit9CisKKy0gKHZvaWQpc2V0QWxwaGEgeworICBzZWxmLmVuY29kaW5nID0gQUxQSEFfU1RBVEU7Cit9CisKKy0gKHZvaWQpc2V0SXNvSWVjNjQ2IHsKKyAgc2VsZi5lbmNvZGluZyA9IElTT19JRUNfNjQ2X1NUQVRFOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhEZWNvZGVkQ2hhci5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZENoYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTg5NDEzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZENoYXIuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERlY29kZWRPYmplY3QuaCIKKworZXh0ZXJuIHVuaWNoYXIgY29uc3QgRk5DMWNoYXI7CisKK0BpbnRlcmZhY2UgWlhEZWNvZGVkQ2hhciA6IFpYRGVjb2RlZE9iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgdW5pY2hhciB2YWx1ZTsKKworLSAoaWQpaW5pdFdpdGhOZXdQb3NpdGlvbjooaW50KW5ld1Bvc2l0aW9uIHZhbHVlOih1bmljaGFyKXZhbHVlOworLSAoQk9PTClmbmMxOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhEZWNvZGVkQ2hhci5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZENoYXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzJkMDA5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZENoYXIubQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERlY29kZWRDaGFyLmgiCisKK3VuaWNoYXIgY29uc3QgRk5DMWNoYXIgPSAnJCc7CisKK0BpbXBsZW1lbnRhdGlvbiBaWERlY29kZWRDaGFyCisKKy0gKGlkKWluaXRXaXRoTmV3UG9zaXRpb246KGludCluZXdQb3NpdGlvbiB2YWx1ZToodW5pY2hhcil2YWx1ZSB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRXaXRoTmV3UG9zaXRpb246bmV3UG9zaXRpb25dKSB7CisgICAgX3ZhbHVlID0gdmFsdWU7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoQk9PTClmbmMxIHsKKyAgcmV0dXJuIHNlbGYudmFsdWUgPT0gRk5DMWNoYXI7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWERlY29kZWRJbmZvcm1hdGlvbi5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZEluZm9ybWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1MzFhOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWERlY29kZWRJbmZvcm1hdGlvbi5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRGVjb2RlZE9iamVjdC5oIgorCitAaW50ZXJmYWNlIFpYRGVjb2RlZEluZm9ybWF0aW9uIDogWlhEZWNvZGVkT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCByZWFkb25seSkgTlNTdHJpbmcgKnRoZU5ld1N0cmluZzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgcmVtYWluaW5nVmFsdWU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgQk9PTCByZW1haW5pbmc7CisKKy0gKGlkKWluaXRXaXRoTmV3UG9zaXRpb246KGludCluZXdQb3NpdGlvbiBuZXdTdHJpbmc6KE5TU3RyaW5nICopbmV3U3RyaW5nOworLSAoaWQpaW5pdFdpdGhOZXdQb3NpdGlvbjooaW50KW5ld1Bvc2l0aW9uIG5ld1N0cmluZzooTlNTdHJpbmcgKiluZXdTdHJpbmcgcmVtYWluaW5nVmFsdWU6KGludClyZW1haW5pbmdWYWx1ZTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZEluZm9ybWF0aW9uLm0gYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhEZWNvZGVkSW5mb3JtYXRpb24ubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzAyYzAyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZEluZm9ybWF0aW9uLm0KQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhEZWNvZGVkSW5mb3JtYXRpb24uaCIKKworQGltcGxlbWVudGF0aW9uIFpYRGVjb2RlZEluZm9ybWF0aW9uCisKKy0gKGlkKWluaXRXaXRoTmV3UG9zaXRpb246KGludCluZXdQb3NpdGlvbiBuZXdTdHJpbmc6KE5TU3RyaW5nICopbmV3U3RyaW5nIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhOZXdQb3NpdGlvbjpuZXdQb3NpdGlvbl0pIHsKKyAgICBfcmVtYWluaW5nID0gTk87CisgICAgX3JlbWFpbmluZ1ZhbHVlID0gMDsKKyAgICBfdGhlTmV3U3RyaW5nID0gbmV3U3RyaW5nOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRXaXRoTmV3UG9zaXRpb246KGludCluZXdQb3NpdGlvbiBuZXdTdHJpbmc6KE5TU3RyaW5nICopbmV3U3RyaW5nIHJlbWFpbmluZ1ZhbHVlOihpbnQpcmVtYWluaW5nVmFsdWUgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0V2l0aE5ld1Bvc2l0aW9uOm5ld1Bvc2l0aW9uXSkgeworICAgIF9yZW1haW5pbmcgPSBZRVM7CisgICAgX3JlbWFpbmluZ1ZhbHVlID0gcmVtYWluaW5nVmFsdWU7CisgICAgX3RoZU5ld1N0cmluZyA9IG5ld1N0cmluZzsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhEZWNvZGVkTnVtZXJpYy5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZE51bWVyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTgzZjRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZE51bWVyaWMuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERlY29kZWRPYmplY3QuaCIKKworZXh0ZXJuIGNvbnN0IGludCBGTkMxOworCitAaW50ZXJmYWNlIFpYRGVjb2RlZE51bWVyaWMgOiBaWERlY29kZWRPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBmaXJzdERpZ2l0OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBzZWNvbmREaWdpdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgdmFsdWU7CisKKy0gKGlkKWluaXRXaXRoTmV3UG9zaXRpb246KGludCluZXdQb3NpdGlvbiBmaXJzdERpZ2l0OihpbnQpZmlyc3REaWdpdCBzZWNvbmREaWdpdDooaW50KXNlY29uZERpZ2l0OworLSAoQk9PTClmaXJzdERpZ2l0Rk5DMTsKKy0gKEJPT0wpc2Vjb25kRGlnaXRGTkMxOworLSAoQk9PTClhbnlGTkMxOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhEZWNvZGVkTnVtZXJpYy5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZE51bWVyaWMubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGE5ZjkzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZE51bWVyaWMubQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERlY29kZWROdW1lcmljLmgiCisKK2NvbnN0IGludCBGTkMxID0gMTA7CisKK0BpbXBsZW1lbnRhdGlvbiBaWERlY29kZWROdW1lcmljCisKKy0gKGlkKWluaXRXaXRoTmV3UG9zaXRpb246KGludCluZXdQb3NpdGlvbiBmaXJzdERpZ2l0OihpbnQpYUZpcnN0RGlnaXQgc2Vjb25kRGlnaXQ6KGludClhU2Vjb25kRGlnaXQgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0V2l0aE5ld1Bvc2l0aW9uOm5ld1Bvc2l0aW9uXSkgeworICAgIF9maXJzdERpZ2l0ID0gYUZpcnN0RGlnaXQ7CisgICAgX3NlY29uZERpZ2l0ID0gYVNlY29uZERpZ2l0OworCisgICAgaWYgKF9maXJzdERpZ2l0IDwgMCB8fCBfZmlyc3REaWdpdCA+IDEwKSB7CisgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiSW52YWxpZCBmaXJzdERpZ2l0OiAlZCIsIF9maXJzdERpZ2l0XTsKKyAgICB9CisKKyAgICBpZiAoX3NlY29uZERpZ2l0IDwgMCB8fCBfc2Vjb25kRGlnaXQgPiAxMCkgeworICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkludmFsaWQgc2Vjb25kRGlnaXQ6ICVkIiwgX3NlY29uZERpZ2l0XTsKKyAgICB9CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoaW50KXZhbHVlIHsKKyAgcmV0dXJuIHNlbGYuZmlyc3REaWdpdCAqIDEwICsgc2VsZi5zZWNvbmREaWdpdDsKK30KKworLSAoQk9PTClmaXJzdERpZ2l0Rk5DMSB7CisgIHJldHVybiBzZWxmLmZpcnN0RGlnaXQgPT0gRk5DMTsKK30KKworLSAoQk9PTClzZWNvbmREaWdpdEZOQzEgeworICByZXR1cm4gc2VsZi5zZWNvbmREaWdpdCA9PSBGTkMxOworfQorCistIChCT09MKWFueUZOQzEgeworICByZXR1cm4gc2VsZi5maXJzdERpZ2l0ID09IEZOQzEgfHwgc2VsZi5zZWNvbmREaWdpdCA9PSBGTkMxOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhEZWNvZGVkT2JqZWN0LmggYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhEZWNvZGVkT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2ODI3MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWERlY29kZWRPYmplY3QuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAaW50ZXJmYWNlIFpYRGVjb2RlZE9iamVjdCA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgdGhlTmV3UG9zaXRpb247CisKKy0gKGlkKWluaXRXaXRoTmV3UG9zaXRpb246KGludCluZXdQb3NpdGlvbjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZE9iamVjdC5tIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRGVjb2RlZE9iamVjdC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYmJmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhEZWNvZGVkT2JqZWN0Lm0KQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhEZWNvZGVkT2JqZWN0LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWERlY29kZWRPYmplY3QKKworLSAoaWQpaW5pdFdpdGhOZXdQb3NpdGlvbjooaW50KW5ld1Bvc2l0aW9uIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfdGhlTmV3UG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhGaWVsZFBhcnNlci5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRmllbGRQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWI5MTY4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRmllbGRQYXJzZXIuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAaW50ZXJmYWNlIFpYRmllbGRQYXJzZXIgOiBOU09iamVjdAorCisrIChOU1N0cmluZyAqKXBhcnNlRmllbGRzSW5HZW5lcmFsUHVycG9zZTooTlNTdHJpbmcgKilyYXdJbmZvcm1hdGlvbiBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRmllbGRQYXJzZXIubSBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEZpZWxkUGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEzNzdiNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEZpZWxkUGFyc2VyLm0KQEAgLTAsMCArMSwzMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEZpZWxkUGFyc2VyLmgiCisKK3N0YXRpYyBOU09iamVjdCAqVkFSSUFCTEVfTEVOR1RIID0gbmlsOworc3RhdGljIE5TQXJyYXkgKlRXT19ESUdJVF9EQVRBX0xFTkdUSCA9IG5pbDsKK3N0YXRpYyBOU0FycmF5ICpUSFJFRV9ESUdJVF9EQVRBX0xFTkdUSCA9IG5pbDsKK3N0YXRpYyBOU0FycmF5ICpUSFJFRV9ESUdJVF9QTFVTX0RJR0lUX0RBVEFfTEVOR1RIID0gbmlsOworc3RhdGljIE5TQXJyYXkgKkZPVVJfRElHSVRfREFUQV9MRU5HVEggPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBaWEZpZWxkUGFyc2VyCisKKysgKHZvaWQpaW5pdGlhbGl6ZSB7CisgIGlmIChWQVJJQUJMRV9MRU5HVEggPT0gbmlsKSB7CisgICAgVkFSSUFCTEVfTEVOR1RIID0gW1tOU09iamVjdCBhbGxvY10gaW5pdF07CisgIH0KKworICBpZiAoVFdPX0RJR0lUX0RBVEFfTEVOR1RIID09IG5pbCkgeworICAgIFRXT19ESUdJVF9EQVRBX0xFTkdUSCA9IEBbQFtAIjAwIiwgQDE4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjAxIiwgQDE0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjAyIiwgQDE0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIxMCIsIFZBUklBQkxFX0xFTkdUSCwgQDIwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjExIiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMTIiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIxMyIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjE1IiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMTciLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMjAiLCBAMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIyMSIsIFZBUklBQkxFX0xFTkdUSCwgQDIwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjIyIiwgVkFSSUFCTEVfTEVOR1RILCBAMjldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjMwIiwgVkFSSUFCTEVfTEVOR1RILCBAOF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzNyIsIFZBUklBQkxFX0xFTkdUSCwgQDhdLAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaW50ZXJuYWwgY29tcGFueSBjb2RlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiOTAiLCBWQVJJQUJMRV9MRU5HVEgsIEAzMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI5MSIsIFZBUklBQkxFX0xFTkdUSCwgQDMwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjkyIiwgVkFSSUFCTEVfTEVOR1RILCBAMzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiOTMiLCBWQVJJQUJMRV9MRU5HVEgsIEAzMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI5NCIsIFZBUklBQkxFX0xFTkdUSCwgQDMwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjk1IiwgVkFSSUFCTEVfTEVOR1RILCBAMzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiOTYiLCBWQVJJQUJMRV9MRU5HVEgsIEAzMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI5NyIsIFZBUklBQkxFX0xFTkdUSCwgQDMwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjk4IiwgVkFSSUFCTEVfTEVOR1RILCBAMzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiOTkiLCBWQVJJQUJMRV9MRU5HVEgsIEAzMF1dOworICB9CisKKyAgaWYgKFRIUkVFX0RJR0lUX0RBVEFfTEVOR1RIID09IG5pbCkgeworICAgIFRIUkVFX0RJR0lUX0RBVEFfTEVOR1RIID0gQFtAW0AiMjQwIiwgVkFSSUFCTEVfTEVOR1RILCBAMzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIyNDEiLCBWQVJJQUJMRV9MRU5HVEgsIEAzMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjI0MiIsIFZBUklBQkxFX0xFTkdUSCwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIyNTAiLCBWQVJJQUJMRV9MRU5HVEgsIEAzMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjI1MSIsIFZBUklBQkxFX0xFTkdUSCwgQDMwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMjUzIiwgVkFSSUFCTEVfTEVOR1RILCBAMTddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIyNTQiLCBWQVJJQUJMRV9MRU5HVEgsIEAyMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjQwMCIsIFZBUklBQkxFX0xFTkdUSCwgQDMwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiNDAxIiwgVkFSSUFCTEVfTEVOR1RILCBAMzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI0MDIiLCBAMTddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI0MDMiLCBWQVJJQUJMRV9MRU5HVEgsIEAzMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjQxMCIsIEAxM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjQxMSIsIEAxM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjQxMiIsIEAxM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjQxMyIsIEAxM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjQxNCIsIEAxM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjQyMCIsIFZBUklBQkxFX0xFTkdUSCwgQDIwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiNDIxIiwgVkFSSUFCTEVfTEVOR1RILCBAMTVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI0MjIiLCBAM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjQyMyIsIFZBUklBQkxFX0xFTkdUSCwgQDE1XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiNDI0IiwgQDNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI0MjUiLCBAM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjQyNiIsIEAzXV07CisKKyAgfQorCisgIGlmIChUSFJFRV9ESUdJVF9QTFVTX0RJR0lUX0RBVEFfTEVOR1RIID09IG5pbCkgeworICAgIFRIUkVFX0RJR0lUX1BMVVNfRElHSVRfREFUQV9MRU5HVEggPSBAW0BbQCIzMTAiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzExIiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjMxMiIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzMTMiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzE0IiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjMxNSIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzMTYiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzIwIiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjMyMSIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzMjIiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzIzIiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjMyNCIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzMjUiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzI2IiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjMyNyIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzMjgiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzI5IiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjMzMCIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzMzEiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzMyIiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjMzMyIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzMzQiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzM1IiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjMzNiIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzNDAiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzQxIiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjM0MiIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzNDMiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzQ0IiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjM0NSIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzNDYiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzQ3IiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjM0OCIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzNDkiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzUwIiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjM1MSIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzNTIiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzUzIiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjM1NCIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzNTUiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzU2IiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjM1NyIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzNjAiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzYxIiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjM2MiIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzNjMiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzY0IiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjM2NSIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzNjYiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzY3IiwgQDZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjM2OCIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzNjkiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzkwIiwgVkFSSUFCTEVfTEVOR1RILCBAMTVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjM5MSIsIFZBUklBQkxFX0xFTkdUSCwgQDE4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCIzOTIiLCBWQVJJQUJMRV9MRU5HVEgsIEAxNV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiMzkzIiwgVkFSSUFCTEVfTEVOR1RILCBAMThdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjcwMyIsIFZBUklBQkxFX0xFTkdUSCwgQDMwXV07CisgIH0KKworICBpZiAoRk9VUl9ESUdJVF9EQVRBX0xFTkdUSCA9PSBuaWwpIHsKKyAgICBGT1VSX0RJR0lUX0RBVEFfTEVOR1RIID0gQFtAW0AiNzAwMSIsIEAxM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiNzAwMiIsIFZBUklBQkxFX0xFTkdUSCwgQDMwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI3MDAzIiwgQDEwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjgwMDEiLCBAMTRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjgwMDIiLCBWQVJJQUJMRV9MRU5HVEgsIEAyMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiODAwMyIsIFZBUklBQkxFX0xFTkdUSCwgQDMwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI4MDA0IiwgVkFSSUFCTEVfTEVOR1RILCBAMzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjgwMDUiLCBANl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiODAwNiIsIEAxOF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiODAwNyIsIFZBUklBQkxFX0xFTkdUSCwgQDMwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI4MDA4IiwgVkFSSUFCTEVfTEVOR1RILCBAMTJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjgwMTgiLCBAMThdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjgwMjAiLCBWQVJJQUJMRV9MRU5HVEgsIEAyNV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiODEwMCIsIEA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI4MTAxIiwgQDEwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBbQCI4MTAyIiwgQDJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFtAIjgxMTAiLCBWQVJJQUJMRV9MRU5HVEgsIEA3MF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAW0AiODIwMCIsIFZBUklBQkxFX0xFTkdUSCwgQDcwXV07CisgIH0KK30KKworKyAoTlNTdHJpbmcgKilwYXJzZUZpZWxkc0luR2VuZXJhbFB1cnBvc2U6KE5TU3RyaW5nICopcmF3SW5mb3JtYXRpb24gZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoW3Jhd0luZm9ybWF0aW9uIGxlbmd0aF0gPT0gMCkgeworICAgIHJldHVybiBAIiI7CisgIH0KKyAgaWYgKFtyYXdJbmZvcm1hdGlvbiBsZW5ndGhdIDwgMikgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU1N0cmluZyAqZmlyc3RUd29EaWdpdHMgPSBbcmF3SW5mb3JtYXRpb24gc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAsIDIpXTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IFtUV09fRElHSVRfREFUQV9MRU5HVEggY291bnRdOyArK2kpIHsKKyAgICBpZiAoW1RXT19ESUdJVF9EQVRBX0xFTkdUSFtpXVswXSBpc0VxdWFsVG9TdHJpbmc6Zmlyc3RUd29EaWdpdHNdKSB7CisgICAgICBpZiAoW1RXT19ESUdJVF9EQVRBX0xFTkdUSFtpXVsxXSBpc0VxdWFsOlZBUklBQkxFX0xFTkdUSF0pIHsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHByb2Nlc3NWYXJpYWJsZUFJOjIKKyAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlRmllbGRTaXplOltUV09fRElHSVRfREFUQV9MRU5HVEhbaV1bMl0gaW50VmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICByYXdJbmZvcm1hdGlvbjpyYXdJbmZvcm1hdGlvbl07CisgICAgICB9CisgICAgICBOU1N0cmluZyAqcmVzdWx0ID0gW3NlbGYgcHJvY2Vzc0ZpeGVkQUk6MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRTaXplOltUV09fRElHSVRfREFUQV9MRU5HVEhbaV1bMV0gaW50VmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3SW5mb3JtYXRpb246cmF3SW5mb3JtYXRpb25dOworICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9CisKKyAgaWYgKFtyYXdJbmZvcm1hdGlvbiBsZW5ndGhdIDwgMykgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU1N0cmluZyAqZmlyc3RUaHJlZURpZ2l0cyA9IFtyYXdJbmZvcm1hdGlvbiBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMyldOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgW1RIUkVFX0RJR0lUX0RBVEFfTEVOR1RIIGNvdW50XTsgKytpKSB7CisgICAgaWYgKFtUSFJFRV9ESUdJVF9EQVRBX0xFTkdUSFtpXVswXSBpc0VxdWFsVG9TdHJpbmc6Zmlyc3RUaHJlZURpZ2l0c10pIHsKKyAgICAgIGlmIChbVEhSRUVfRElHSVRfREFUQV9MRU5HVEhbaV1bMV0gaXNFcXVhbDpWQVJJQUJMRV9MRU5HVEhdKSB7CisgICAgICAgIHJldHVybiBbc2VsZiBwcm9jZXNzVmFyaWFibGVBSTozCisgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUZpZWxkU2l6ZTpbVEhSRUVfRElHSVRfREFUQV9MRU5HVEhbaV1bMl0gaW50VmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICByYXdJbmZvcm1hdGlvbjpyYXdJbmZvcm1hdGlvbl07CisgICAgICB9CisgICAgICBOU1N0cmluZyAqcmVzdWx0ID0gW3NlbGYgcHJvY2Vzc0ZpeGVkQUk6MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRTaXplOltUSFJFRV9ESUdJVF9EQVRBX0xFTkdUSFtpXVsxXSBpbnRWYWx1ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdJbmZvcm1hdGlvbjpyYXdJbmZvcm1hdGlvbl07CisgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgICAgICByZXR1cm4gbmlsOworICAgICAgfQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgIH0KKworICBmb3IgKGludCBpID0gMDsgaSA8IFtUSFJFRV9ESUdJVF9QTFVTX0RJR0lUX0RBVEFfTEVOR1RIIGNvdW50XTsgKytpKSB7CisgICAgaWYgKFtUSFJFRV9ESUdJVF9QTFVTX0RJR0lUX0RBVEFfTEVOR1RIW2ldWzBdIGlzRXF1YWxUb1N0cmluZzpmaXJzdFRocmVlRGlnaXRzXSkgeworICAgICAgaWYgKFtUSFJFRV9ESUdJVF9QTFVTX0RJR0lUX0RBVEFfTEVOR1RIW2ldWzFdIGlzRXF1YWw6VkFSSUFCTEVfTEVOR1RIXSkgeworICAgICAgICByZXR1cm4gW3NlbGYgcHJvY2Vzc1ZhcmlhYmxlQUk6NAorICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVGaWVsZFNpemU6W1RIUkVFX0RJR0lUX1BMVVNfRElHSVRfREFUQV9MRU5HVEhbaV1bMl0gaW50VmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICByYXdJbmZvcm1hdGlvbjpyYXdJbmZvcm1hdGlvbl07CisgICAgICB9CisgICAgICBOU1N0cmluZyAqcmVzdWx0ID0gW3NlbGYgcHJvY2Vzc0ZpeGVkQUk6NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRTaXplOltUSFJFRV9ESUdJVF9QTFVTX0RJR0lUX0RBVEFfTEVOR1RIW2ldWzFdIGludFZhbHVlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd0luZm9ybWF0aW9uOnJhd0luZm9ybWF0aW9uXTsKKyAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgICB9CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgfQorCisgIGlmIChbcmF3SW5mb3JtYXRpb24gbGVuZ3RoXSA8IDQpIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNTdHJpbmcgKmZpcnN0Rm91ckRpZ2l0cyA9IFtyYXdJbmZvcm1hdGlvbiBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgNCldOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgW0ZPVVJfRElHSVRfREFUQV9MRU5HVEggY291bnRdOyArK2kpIHsKKyAgICBpZiAoW0ZPVVJfRElHSVRfREFUQV9MRU5HVEhbaV1bMF0gaXNFcXVhbFRvU3RyaW5nOmZpcnN0Rm91ckRpZ2l0c10pIHsKKyAgICAgIGlmIChbRk9VUl9ESUdJVF9EQVRBX0xFTkdUSFtpXVsxXSBpc0VxdWFsOlZBUklBQkxFX0xFTkdUSF0pIHsKKyAgICAgICAgTlNTdHJpbmcgKnJlc3VsdCA9IFtzZWxmIHByb2Nlc3NWYXJpYWJsZUFJOjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlRmllbGRTaXplOltGT1VSX0RJR0lUX0RBVEFfTEVOR1RIW2ldWzJdIGludFZhbHVlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3SW5mb3JtYXRpb246cmF3SW5mb3JtYXRpb25dOworICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorICAgICAgTlNTdHJpbmcgKnJlc3VsdCA9IFtzZWxmIHByb2Nlc3NGaXhlZEFJOjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkU2l6ZTpbRk9VUl9ESUdJVF9EQVRBX0xFTkdUSFtpXVsxXSBpbnRWYWx1ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdJbmZvcm1hdGlvbjpyYXdJbmZvcm1hdGlvbl07CisgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgICAgICByZXR1cm4gbmlsOworICAgICAgfQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgIH0KKworICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICByZXR1cm4gbmlsOworfQorCisrIChOU1N0cmluZyAqKXByb2Nlc3NGaXhlZEFJOihpbnQpYWlTaXplIGZpZWxkU2l6ZTooaW50KWZpZWxkU2l6ZSByYXdJbmZvcm1hdGlvbjooTlNTdHJpbmcgKilyYXdJbmZvcm1hdGlvbiB7CisgIGlmIChbcmF3SW5mb3JtYXRpb24gbGVuZ3RoXSA8IGFpU2l6ZSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBOU1N0cmluZyAqYWkgPSBbcmF3SW5mb3JtYXRpb24gc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAsIGFpU2l6ZSldOworICBpZiAoW3Jhd0luZm9ybWF0aW9uIGxlbmd0aF0gPCBhaVNpemUgKyBmaWVsZFNpemUpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgTlNTdHJpbmcgKmZpZWxkID0gW3Jhd0luZm9ybWF0aW9uIHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZShhaVNpemUsIGZpZWxkU2l6ZSldOworICBOU1N0cmluZyAqcmVtYWluaW5nOworICBpZiAoYWlTaXplICsgZmllbGRTaXplID09IHJhd0luZm9ybWF0aW9uLmxlbmd0aCkgeworICAgIHJlbWFpbmluZyA9IEAiIjsKKyAgfSBlbHNlIHsKKyAgICByZW1haW5pbmcgPSBbcmF3SW5mb3JtYXRpb24gc3Vic3RyaW5nRnJvbUluZGV4OmFpU2l6ZSArIGZpZWxkU2l6ZV07CisgIH0KKworICBOU1N0cmluZyAqcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIoJUApJUAiLCBhaSwgZmllbGRdOworICBOU1N0cmluZyAqcGFyc2VkQUkgPSBbc2VsZiBwYXJzZUZpZWxkc0luR2VuZXJhbFB1cnBvc2U6cmVtYWluaW5nIGVycm9yOm5pbF07CisgIHJldHVybiBwYXJzZWRBSSA9PSBuaWwgPyByZXN1bHQgOiBbcmVzdWx0IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOnBhcnNlZEFJXTsKK30KKworKyAoTlNTdHJpbmcgKilwcm9jZXNzVmFyaWFibGVBSTooaW50KWFpU2l6ZSB2YXJpYWJsZUZpZWxkU2l6ZTooaW50KXZhcmlhYmxlRmllbGRTaXplIHJhd0luZm9ybWF0aW9uOihOU1N0cmluZyAqKXJhd0luZm9ybWF0aW9uIHsKKyAgTlNTdHJpbmcgKmFpID0gW3Jhd0luZm9ybWF0aW9uIHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZSgwLCBhaVNpemUpXTsKKyAgaW50IG1heFNpemU7CisgIGlmIChbcmF3SW5mb3JtYXRpb24gbGVuZ3RoXSA8IGFpU2l6ZSArIHZhcmlhYmxlRmllbGRTaXplKSB7CisgICAgbWF4U2l6ZSA9IChpbnQpW3Jhd0luZm9ybWF0aW9uIGxlbmd0aF07CisgIH0gZWxzZSB7CisgICAgbWF4U2l6ZSA9IGFpU2l6ZSArIHZhcmlhYmxlRmllbGRTaXplOworICB9CisgIE5TU3RyaW5nICpmaWVsZCA9IFtyYXdJbmZvcm1hdGlvbiBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UoYWlTaXplLCBtYXhTaXplIC0gYWlTaXplKV07CisgIE5TU3RyaW5nICpyZW1haW5pbmcgPSBbcmF3SW5mb3JtYXRpb24gc3Vic3RyaW5nRnJvbUluZGV4Om1heFNpemVdOworICBOU1N0cmluZyAqcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIoJUApJUAiLCBhaSwgZmllbGRdOworICBOU1N0cmluZyAqcGFyc2VkQUkgPSBbc2VsZiBwYXJzZUZpZWxkc0luR2VuZXJhbFB1cnBvc2U6cmVtYWluaW5nIGVycm9yOm5pbF07CisgIHJldHVybiBwYXJzZWRBSSA9PSBuaWwgPyByZXN1bHQgOiBbcmVzdWx0IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOnBhcnNlZEFJXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYR2VuZXJhbEFwcElkRGVjb2Rlci5oIGIvWlhpbmdPYmpDL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYR2VuZXJhbEFwcElkRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTNhODAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhHZW5lcmFsQXBwSWREZWNvZGVyLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGNsYXNzIFpYQml0QXJyYXksIFpYRGVjb2RlZEluZm9ybWF0aW9uOworCitAaW50ZXJmYWNlIFpYR2VuZXJhbEFwcElkRGVjb2RlciA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoSW5mb3JtYXRpb246KFpYQml0QXJyYXkgKilpbmZvcm1hdGlvbjsKKy0gKE5TU3RyaW5nICopZGVjb2RlQWxsQ29kZXM6KE5TTXV0YWJsZVN0cmluZyAqKWJ1ZmYgaW5pdGlhbFBvc2l0aW9uOihpbnQpaW5pdGlhbFBvc2l0aW9uIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoaW50KWV4dHJhY3ROdW1lcmljVmFsdWVGcm9tQml0QXJyYXk6KGludClwb3MgYml0czooaW50KWJpdHM7CisrIChpbnQpZXh0cmFjdE51bWVyaWNWYWx1ZUZyb21CaXRBcnJheTooWlhCaXRBcnJheSAqKWluZm9ybWF0aW9uIHBvczooaW50KXBvcyBiaXRzOihpbnQpYml0czsKKy0gKFpYRGVjb2RlZEluZm9ybWF0aW9uICopZGVjb2RlR2VuZXJhbFB1cnBvc2VGaWVsZDooaW50KXBvcyByZW1haW5pbmc6KE5TU3RyaW5nICopcmVtYWluaW5nOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhHZW5lcmFsQXBwSWREZWNvZGVyLm0gYi9aWGluZ09iakMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhHZW5lcmFsQXBwSWREZWNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjZmYxYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEdlbmVyYWxBcHBJZERlY29kZXIubQpAQCAtMCwwICsxLDQ4OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhCbG9ja1BhcnNlZFJlc3VsdC5oIgorI2ltcG9ydCAiWlhDdXJyZW50UGFyc2luZ1N0YXRlLmgiCisjaW1wb3J0ICJaWERlY29kZWRDaGFyLmgiCisjaW1wb3J0ICJaWERlY29kZWRJbmZvcm1hdGlvbi5oIgorI2ltcG9ydCAiWlhEZWNvZGVkTnVtZXJpYy5oIgorI2ltcG9ydCAiWlhGaWVsZFBhcnNlci5oIgorI2ltcG9ydCAiWlhHZW5lcmFsQXBwSWREZWNvZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhHZW5lcmFsQXBwSWREZWNvZGVyICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYQml0QXJyYXkgKmluZm9ybWF0aW9uOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhDdXJyZW50UGFyc2luZ1N0YXRlICpjdXJyZW50OworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlU3RyaW5nICpidWZmZXI7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYR2VuZXJhbEFwcElkRGVjb2RlcgorCistIChpZClpbml0V2l0aEluZm9ybWF0aW9uOihaWEJpdEFycmF5ICopaW5mb3JtYXRpb24geworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9jdXJyZW50ID0gW1taWEN1cnJlbnRQYXJzaW5nU3RhdGUgYWxsb2NdIGluaXRdOworICAgIF9idWZmZXIgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgICAgX2luZm9ybWF0aW9uID0gaW5mb3JtYXRpb247CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNTdHJpbmcgKilkZWNvZGVBbGxDb2RlczooTlNNdXRhYmxlU3RyaW5nICopYnVmZiBpbml0aWFsUG9zaXRpb246KGludClpbml0aWFsUG9zaXRpb24gZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQgY3VycmVudFBvc2l0aW9uID0gaW5pdGlhbFBvc2l0aW9uOworICBOU1N0cmluZyAqcmVtYWluaW5nID0gbmlsOworICBkbyB7CisgICAgWlhEZWNvZGVkSW5mb3JtYXRpb24gKmluZm8gPSBbc2VsZiBkZWNvZGVHZW5lcmFsUHVycG9zZUZpZWxkOmN1cnJlbnRQb3NpdGlvbiByZW1haW5pbmc6cmVtYWluaW5nXTsKKyAgICBOU1N0cmluZyAqcGFyc2VkRmllbGRzID0gW1pYRmllbGRQYXJzZXIgcGFyc2VGaWVsZHNJbkdlbmVyYWxQdXJwb3NlOltpbmZvIHRoZU5ld1N0cmluZ10gZXJyb3I6ZXJyb3JdOworICAgIGlmICghcGFyc2VkRmllbGRzKSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0gZWxzZSBpZiAocGFyc2VkRmllbGRzLmxlbmd0aCA+IDApIHsKKyAgICAgIFtidWZmIGFwcGVuZFN0cmluZzpwYXJzZWRGaWVsZHNdOworICAgIH0KKworICAgIGlmIChbaW5mbyByZW1haW5pbmddKSB7CisgICAgICByZW1haW5pbmcgPSBbQChbaW5mbyByZW1haW5pbmdWYWx1ZV0pIHN0cmluZ1ZhbHVlXTsKKyAgICB9IGVsc2UgeworICAgICAgcmVtYWluaW5nID0gbmlsOworICAgIH0KKworICAgIGlmIChjdXJyZW50UG9zaXRpb24gPT0gW2luZm8gdGhlTmV3UG9zaXRpb25dKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY3VycmVudFBvc2l0aW9uID0gW2luZm8gdGhlTmV3UG9zaXRpb25dOworICB9IHdoaWxlIChZRVMpOworCisgIHJldHVybiBidWZmOworfQorCistIChCT09MKWlzU3RpbGxOdW1lcmljOihpbnQpcG9zIHsKKyAgaWYgKHBvcyArIDcgPiBzZWxmLmluZm9ybWF0aW9uLnNpemUpIHsKKyAgICByZXR1cm4gcG9zICsgNCA8PSBzZWxmLmluZm9ybWF0aW9uLnNpemU7CisgIH0KKworICBmb3IgKGludCBpID0gcG9zOyBpIDwgcG9zICsgMzsgKytpKSB7CisgICAgaWYgKFtzZWxmLmluZm9ybWF0aW9uIGdldDppXSkgeworICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgIH0KKworICByZXR1cm4gW3NlbGYuaW5mb3JtYXRpb24gZ2V0OnBvcyArIDNdOworfQorCistIChaWERlY29kZWROdW1lcmljICopZGVjb2RlTnVtZXJpYzooaW50KXBvcyB7CisgIGlmIChwb3MgKyA3ID4gc2VsZi5pbmZvcm1hdGlvbi5zaXplKSB7CisgICAgaW50IG51bWVyaWMgPSBbc2VsZiBleHRyYWN0TnVtZXJpY1ZhbHVlRnJvbUJpdEFycmF5OnBvcyBiaXRzOjRdOworICAgIGlmIChudW1lcmljID09IDApIHsKKyAgICAgIHJldHVybiBbW1pYRGVjb2RlZE51bWVyaWMgYWxsb2NdIGluaXRXaXRoTmV3UG9zaXRpb246c2VsZi5pbmZvcm1hdGlvbi5zaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3REaWdpdDpGTkMxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmREaWdpdDpGTkMxXTsKKyAgICB9CisgICAgcmV0dXJuIFtbWlhEZWNvZGVkTnVtZXJpYyBhbGxvY10gaW5pdFdpdGhOZXdQb3NpdGlvbjpzZWxmLmluZm9ybWF0aW9uLnNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3REaWdpdDpudW1lcmljIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZERpZ2l0OkZOQzFdOworICB9CisgIGludCBudW1lcmljID0gW3NlbGYgZXh0cmFjdE51bWVyaWNWYWx1ZUZyb21CaXRBcnJheTpwb3MgYml0czo3XTsKKworICBpbnQgZGlnaXQxID0gKG51bWVyaWMgLSA4KSAvIDExOworICBpbnQgZGlnaXQyID0gKG51bWVyaWMgLSA4KSAlIDExOworCisgIHJldHVybiBbW1pYRGVjb2RlZE51bWVyaWMgYWxsb2NdIGluaXRXaXRoTmV3UG9zaXRpb246cG9zICsgNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3REaWdpdDpkaWdpdDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kRGlnaXQ6ZGlnaXQyXTsKK30KKworLSAoaW50KWV4dHJhY3ROdW1lcmljVmFsdWVGcm9tQml0QXJyYXk6KGludClwb3MgYml0czooaW50KWJpdHMgeworICByZXR1cm4gW1pYR2VuZXJhbEFwcElkRGVjb2RlciBleHRyYWN0TnVtZXJpY1ZhbHVlRnJvbUJpdEFycmF5OnNlbGYuaW5mb3JtYXRpb24gcG9zOnBvcyBiaXRzOmJpdHNdOworfQorCisrIChpbnQpZXh0cmFjdE51bWVyaWNWYWx1ZUZyb21CaXRBcnJheTooWlhCaXRBcnJheSAqKWluZm9ybWF0aW9uIHBvczooaW50KXBvcyBiaXRzOihpbnQpYml0cyB7CisgIGlmIChiaXRzID4gMzIpIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiZXh0cmFjdE51bWJlclZhbHVlRnJvbUJpdEFycmF5IGNhbid0IGhhbmRsZSBtb3JlIHRoYW4gMzIgYml0cyJdOworICB9CisKKyAgaW50IHZhbHVlID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaXRzOyArK2kpIHsKKyAgICBpZiAoW2luZm9ybWF0aW9uIGdldDpwb3MgKyBpXSkgeworICAgICAgdmFsdWUgfD0gMSA8PCAoYml0cyAtIGkgLSAxKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gdmFsdWU7Cit9CisKKy0gKFpYRGVjb2RlZEluZm9ybWF0aW9uICopZGVjb2RlR2VuZXJhbFB1cnBvc2VGaWVsZDooaW50KXBvcyByZW1haW5pbmc6KE5TU3RyaW5nICopcmVtYWluaW5nIHsKKyAgW3NlbGYuYnVmZmVyIHNldFN0cmluZzpAIiJdOworCisgIGlmIChyZW1haW5pbmcgIT0gbmlsKSB7CisgICAgW3NlbGYuYnVmZmVyIGFwcGVuZFN0cmluZzpyZW1haW5pbmddOworICB9CisKKyAgc2VsZi5jdXJyZW50LnBvc2l0aW9uID0gcG9zOworCisgIFpYRGVjb2RlZEluZm9ybWF0aW9uICpsYXN0RGVjb2RlZCA9IFtzZWxmIHBhcnNlQmxvY2tzXTsKKyAgaWYgKGxhc3REZWNvZGVkICE9IG5pbCAmJiBbbGFzdERlY29kZWQgcmVtYWluaW5nXSkgeworICAgIHJldHVybiBbW1pYRGVjb2RlZEluZm9ybWF0aW9uIGFsbG9jXSBpbml0V2l0aE5ld1Bvc2l0aW9uOnNlbGYuY3VycmVudC5wb3NpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0cmluZzpzZWxmLmJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdWYWx1ZTpsYXN0RGVjb2RlZC5yZW1haW5pbmdWYWx1ZV07CisgIH0KKyAgcmV0dXJuIFtbWlhEZWNvZGVkSW5mb3JtYXRpb24gYWxsb2NdIGluaXRXaXRoTmV3UG9zaXRpb246c2VsZi5jdXJyZW50LnBvc2l0aW9uIG5ld1N0cmluZzpzZWxmLmJ1ZmZlcl07Cit9CisKKy0gKFpYRGVjb2RlZEluZm9ybWF0aW9uICopcGFyc2VCbG9ja3MgeworICBCT09MIGlzRmluaXNoZWQ7CisgIFpYQmxvY2tQYXJzZWRSZXN1bHQgKnJlc3VsdDsKKyAgZG8geworICAgIGludCBpbml0aWFsUG9zaXRpb24gPSBzZWxmLmN1cnJlbnQucG9zaXRpb247CisKKyAgICBpZiAoc2VsZi5jdXJyZW50LmFscGhhKSB7CisgICAgICByZXN1bHQgPSBbc2VsZiBwYXJzZUFscGhhQmxvY2tdOworICAgICAgaXNGaW5pc2hlZCA9IHJlc3VsdC5maW5pc2hlZDsKKyAgICB9IGVsc2UgaWYgKHNlbGYuY3VycmVudC5pc29JZWM2NDYpIHsKKyAgICAgIHJlc3VsdCA9IFtzZWxmIHBhcnNlSXNvSWVjNjQ2QmxvY2tdOworICAgICAgaXNGaW5pc2hlZCA9IHJlc3VsdC5maW5pc2hlZDsKKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0ID0gW3NlbGYgcGFyc2VOdW1lcmljQmxvY2tdOworICAgICAgaXNGaW5pc2hlZCA9IHJlc3VsdC5maW5pc2hlZDsKKyAgICB9CisKKyAgICBCT09MIHBvc2l0aW9uQ2hhbmdlZCA9IGluaXRpYWxQb3NpdGlvbiAhPSBzZWxmLmN1cnJlbnQucG9zaXRpb247CisgICAgaWYgKCFwb3NpdGlvbkNoYW5nZWQgJiYgIWlzRmluaXNoZWQpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfSB3aGlsZSAoIWlzRmluaXNoZWQpOworICByZXR1cm4gcmVzdWx0LmRlY29kZWRJbmZvcm1hdGlvbjsKK30KKworLSAoWlhCbG9ja1BhcnNlZFJlc3VsdCAqKXBhcnNlTnVtZXJpY0Jsb2NrIHsKKyAgd2hpbGUgKFtzZWxmIGlzU3RpbGxOdW1lcmljOnNlbGYuY3VycmVudC5wb3NpdGlvbl0pIHsKKyAgICBaWERlY29kZWROdW1lcmljICpudW1lcmljID0gW3NlbGYgZGVjb2RlTnVtZXJpYzpzZWxmLmN1cnJlbnQucG9zaXRpb25dOworICAgIHNlbGYuY3VycmVudC5wb3NpdGlvbiA9IG51bWVyaWMudGhlTmV3UG9zaXRpb247CisKKyAgICBpZiAoW251bWVyaWMgZmlyc3REaWdpdEZOQzFdKSB7CisgICAgICBaWERlY29kZWRJbmZvcm1hdGlvbiAqaW5mb3JtYXRpb247CisgICAgICBpZiAoW251bWVyaWMgc2Vjb25kRGlnaXRGTkMxXSkgeworICAgICAgICBpbmZvcm1hdGlvbiA9IFtbWlhEZWNvZGVkSW5mb3JtYXRpb24gYWxsb2NdIGluaXRXaXRoTmV3UG9zaXRpb246c2VsZi5jdXJyZW50LnBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0cmluZzpzZWxmLmJ1ZmZlcl07CisgICAgICB9IGVsc2UgeworICAgICAgICBpbmZvcm1hdGlvbiA9IFtbWlhEZWNvZGVkSW5mb3JtYXRpb24gYWxsb2NdIGluaXRXaXRoTmV3UG9zaXRpb246c2VsZi5jdXJyZW50LnBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0cmluZzpzZWxmLmJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nVmFsdWU6bnVtZXJpYy5zZWNvbmREaWdpdF07CisgICAgICB9CisgICAgICByZXR1cm4gW1taWEJsb2NrUGFyc2VkUmVzdWx0IGFsbG9jXSBpbml0V2l0aEluZm9ybWF0aW9uOmluZm9ybWF0aW9uIGZpbmlzaGVkOllFU107CisgICAgfQorICAgIFtzZWxmLmJ1ZmZlciBhcHBlbmRGb3JtYXQ6QCIlZCIsIG51bWVyaWMuZmlyc3REaWdpdF07CisKKyAgICBpZiAobnVtZXJpYy5zZWNvbmREaWdpdEZOQzEpIHsKKyAgICAgIFpYRGVjb2RlZEluZm9ybWF0aW9uICppbmZvcm1hdGlvbiA9IFtbWlhEZWNvZGVkSW5mb3JtYXRpb24gYWxsb2NdIGluaXRXaXRoTmV3UG9zaXRpb246c2VsZi5jdXJyZW50LnBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RyaW5nOnNlbGYuYnVmZmVyXTsKKyAgICAgIHJldHVybiBbW1pYQmxvY2tQYXJzZWRSZXN1bHQgYWxsb2NdIGluaXRXaXRoSW5mb3JtYXRpb246aW5mb3JtYXRpb24gZmluaXNoZWQ6WUVTXTsKKyAgICB9CisgICAgW3NlbGYuYnVmZmVyIGFwcGVuZEZvcm1hdDpAIiVkIiwgbnVtZXJpYy5zZWNvbmREaWdpdF07CisgIH0KKworICBpZiAoW3NlbGYgaXNOdW1lcmljVG9BbHBoYU51bWVyaWNMYXRjaDpzZWxmLmN1cnJlbnQucG9zaXRpb25dKSB7CisgICAgW3NlbGYuY3VycmVudCBzZXRBbHBoYV07CisgICAgc2VsZi5jdXJyZW50LnBvc2l0aW9uICs9IDQ7CisgIH0KKyAgcmV0dXJuIFtbWlhCbG9ja1BhcnNlZFJlc3VsdCBhbGxvY10gaW5pdFdpdGhGaW5pc2hlZDpOT107Cit9CisKKy0gKFpYQmxvY2tQYXJzZWRSZXN1bHQgKilwYXJzZUlzb0llYzY0NkJsb2NrIHsKKyAgd2hpbGUgKFtzZWxmIGlzU3RpbGxJc29JZWM2NDY6c2VsZi5jdXJyZW50LnBvc2l0aW9uXSkgeworICAgIFpYRGVjb2RlZENoYXIgKmlzbyA9IFtzZWxmIGRlY29kZUlzb0llYzY0NjpzZWxmLmN1cnJlbnQucG9zaXRpb25dOworICAgIHNlbGYuY3VycmVudC5wb3NpdGlvbiA9IGlzby50aGVOZXdQb3NpdGlvbjsKKworICAgIGlmIChpc28uZm5jMSkgeworICAgICAgWlhEZWNvZGVkSW5mb3JtYXRpb24gKmluZm9ybWF0aW9uID0gW1taWERlY29kZWRJbmZvcm1hdGlvbiBhbGxvY10gaW5pdFdpdGhOZXdQb3NpdGlvbjpzZWxmLmN1cnJlbnQucG9zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHJpbmc6c2VsZi5idWZmZXJdOworICAgICAgcmV0dXJuIFtbWlhCbG9ja1BhcnNlZFJlc3VsdCBhbGxvY10gaW5pdFdpdGhJbmZvcm1hdGlvbjppbmZvcm1hdGlvbiBmaW5pc2hlZDpZRVNdOworICAgIH0KKyAgICBbc2VsZi5idWZmZXIgYXBwZW5kRm9ybWF0OkAiJUMiLCBpc28udmFsdWVdOworICB9CisKKyAgaWYgKFtzZWxmIGlzQWxwaGFPcjY0NlRvTnVtZXJpY0xhdGNoOnNlbGYuY3VycmVudC5wb3NpdGlvbl0pIHsKKyAgICBzZWxmLmN1cnJlbnQucG9zaXRpb24gKz0gMzsKKyAgICBbc2VsZi5jdXJyZW50IHNldE51bWVyaWNdOworICB9IGVsc2UgaWYgKFtzZWxmIGlzQWxwaGFUbzY0NlRvQWxwaGFMYXRjaDpzZWxmLmN1cnJlbnQucG9zaXRpb25dKSB7CisgICAgaWYgKHNlbGYuY3VycmVudC5wb3NpdGlvbiArIDUgPCBzZWxmLmluZm9ybWF0aW9uLnNpemUpIHsKKyAgICAgIHNlbGYuY3VycmVudC5wb3NpdGlvbiArPSA1OworICAgIH0gZWxzZSB7CisgICAgICBzZWxmLmN1cnJlbnQucG9zaXRpb24gPSBzZWxmLmluZm9ybWF0aW9uLnNpemU7CisgICAgfQorCisgICAgW3NlbGYuY3VycmVudCBzZXRBbHBoYV07CisgIH0KKyAgcmV0dXJuIFtbWlhCbG9ja1BhcnNlZFJlc3VsdCBhbGxvY10gaW5pdFdpdGhGaW5pc2hlZDpOT107Cit9CisKKy0gKFpYQmxvY2tQYXJzZWRSZXN1bHQgKilwYXJzZUFscGhhQmxvY2sgeworICB3aGlsZSAoW3NlbGYgaXNTdGlsbEFscGhhOnNlbGYuY3VycmVudC5wb3NpdGlvbl0pIHsKKyAgICBaWERlY29kZWRDaGFyICphbHBoYSA9IFtzZWxmIGRlY29kZUFscGhhbnVtZXJpYzpzZWxmLmN1cnJlbnQucG9zaXRpb25dOworICAgIHNlbGYuY3VycmVudC5wb3NpdGlvbiA9IGFscGhhLnRoZU5ld1Bvc2l0aW9uOworCisgICAgaWYgKGFscGhhLmZuYzEpIHsKKyAgICAgIFpYRGVjb2RlZEluZm9ybWF0aW9uICppbmZvcm1hdGlvbiA9IFtbWlhEZWNvZGVkSW5mb3JtYXRpb24gYWxsb2NdIGluaXRXaXRoTmV3UG9zaXRpb246c2VsZi5jdXJyZW50LnBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RyaW5nOnNlbGYuYnVmZmVyXTsKKyAgICAgIHJldHVybiBbW1pYQmxvY2tQYXJzZWRSZXN1bHQgYWxsb2NdIGluaXRXaXRoSW5mb3JtYXRpb246aW5mb3JtYXRpb24gZmluaXNoZWQ6WUVTXTsKKyAgICB9CisKKyAgICBbc2VsZi5idWZmZXIgYXBwZW5kRm9ybWF0OkAiJUMiLCBhbHBoYS52YWx1ZV07CisgIH0KKworICBpZiAoW3NlbGYgaXNBbHBoYU9yNjQ2VG9OdW1lcmljTGF0Y2g6c2VsZi5jdXJyZW50LnBvc2l0aW9uXSkgeworICAgIHNlbGYuY3VycmVudC5wb3NpdGlvbiArPSAzOworICAgIFtzZWxmLmN1cnJlbnQgc2V0TnVtZXJpY107CisgIH0gZWxzZSBpZiAoW3NlbGYgaXNBbHBoYVRvNjQ2VG9BbHBoYUxhdGNoOnNlbGYuY3VycmVudC5wb3NpdGlvbl0pIHsKKyAgICBpZiAoc2VsZi5jdXJyZW50LnBvc2l0aW9uICsgNSA8IHNlbGYuaW5mb3JtYXRpb24uc2l6ZSkgeworICAgICAgc2VsZi5jdXJyZW50LnBvc2l0aW9uICs9IDU7CisgICAgfSBlbHNlIHsKKyAgICAgIHNlbGYuY3VycmVudC5wb3NpdGlvbiA9IHNlbGYuaW5mb3JtYXRpb24uc2l6ZTsKKyAgICB9CisKKyAgICBbc2VsZi5jdXJyZW50IHNldElzb0llYzY0Nl07CisgIH0KKyAgcmV0dXJuIFtbWlhCbG9ja1BhcnNlZFJlc3VsdCBhbGxvY10gaW5pdFdpdGhGaW5pc2hlZDpOT107Cit9CisKKy0gKEJPT0wpaXNTdGlsbElzb0llYzY0NjooaW50KXBvcyB7CisgIGlmIChwb3MgKyA1ID4gc2VsZi5pbmZvcm1hdGlvbi5zaXplKSB7CisgICAgcmV0dXJuIE5POworICB9CisKKyAgaW50IGZpdmVCaXRWYWx1ZSA9IFtzZWxmIGV4dHJhY3ROdW1lcmljVmFsdWVGcm9tQml0QXJyYXk6cG9zIGJpdHM6NV07CisgIGlmIChmaXZlQml0VmFsdWUgPj0gNSAmJiBmaXZlQml0VmFsdWUgPCAxNikgeworICAgIHJldHVybiBZRVM7CisgIH0KKworICBpZiAocG9zICsgNyA+IHNlbGYuaW5mb3JtYXRpb24uc2l6ZSkgeworICAgIHJldHVybiBOTzsKKyAgfQorCisgIGludCBzZXZlbkJpdFZhbHVlID0gW3NlbGYgZXh0cmFjdE51bWVyaWNWYWx1ZUZyb21CaXRBcnJheTpwb3MgYml0czo3XTsKKyAgaWYgKHNldmVuQml0VmFsdWUgPj0gNjQgJiYgc2V2ZW5CaXRWYWx1ZSA8IDExNikgeworICAgIHJldHVybiBZRVM7CisgIH0KKworICBpZiAocG9zICsgOCA+IHNlbGYuaW5mb3JtYXRpb24uc2l6ZSkgeworICAgIHJldHVybiBOTzsKKyAgfQorCisgIGludCBlaWdodEJpdFZhbHVlID0gW3NlbGYgZXh0cmFjdE51bWVyaWNWYWx1ZUZyb21CaXRBcnJheTpwb3MgYml0czo4XTsKKyAgcmV0dXJuIGVpZ2h0Qml0VmFsdWUgPj0gMjMyICYmIGVpZ2h0Qml0VmFsdWUgPCAyNTM7Cit9CisKKy0gKFpYRGVjb2RlZENoYXIgKilkZWNvZGVJc29JZWM2NDY6KGludClwb3MgeworICBpbnQgZml2ZUJpdFZhbHVlID0gW3NlbGYgZXh0cmFjdE51bWVyaWNWYWx1ZUZyb21CaXRBcnJheTpwb3MgYml0czo1XTsKKyAgaWYgKGZpdmVCaXRWYWx1ZSA9PSAxNSkgeworICAgIHJldHVybiBbW1pYRGVjb2RlZENoYXIgYWxsb2NdIGluaXRXaXRoTmV3UG9zaXRpb246cG9zICsgNSB2YWx1ZTpGTkMxY2hhcl07CisgIH0KKworICBpZiAoZml2ZUJpdFZhbHVlID49IDUgJiYgZml2ZUJpdFZhbHVlIDwgMTUpIHsKKyAgICByZXR1cm4gW1taWERlY29kZWRDaGFyIGFsbG9jXSBpbml0V2l0aE5ld1Bvc2l0aW9uOnBvcyArIDUgdmFsdWU6KHVuaWNoYXIpKCcwJyArIGZpdmVCaXRWYWx1ZSAtIDUpXTsKKyAgfQorCisgIGludCBzZXZlbkJpdFZhbHVlID0gW3NlbGYgZXh0cmFjdE51bWVyaWNWYWx1ZUZyb21CaXRBcnJheTpwb3MgYml0czo3XTsKKworICBpZiAoc2V2ZW5CaXRWYWx1ZSA+PSA2NCAmJiBzZXZlbkJpdFZhbHVlIDwgOTApIHsKKyAgICByZXR1cm4gW1taWERlY29kZWRDaGFyIGFsbG9jXSBpbml0V2l0aE5ld1Bvc2l0aW9uOnBvcyArIDcgdmFsdWU6KHVuaWNoYXIpKHNldmVuQml0VmFsdWUgKyAxKV07CisgIH0KKworICBpZiAoc2V2ZW5CaXRWYWx1ZSA+PSA5MCAmJiBzZXZlbkJpdFZhbHVlIDwgMTE2KSB7CisgICAgcmV0dXJuIFtbWlhEZWNvZGVkQ2hhciBhbGxvY10gaW5pdFdpdGhOZXdQb3NpdGlvbjpwb3MgKyA3IHZhbHVlOih1bmljaGFyKShzZXZlbkJpdFZhbHVlICsgNyldOworICB9CisKKyAgaW50IGVpZ2h0Qml0VmFsdWUgPSBbc2VsZiBleHRyYWN0TnVtZXJpY1ZhbHVlRnJvbUJpdEFycmF5OnBvcyBiaXRzOjhdOworICB1bmljaGFyIGM7CisgIHN3aXRjaCAoZWlnaHRCaXRWYWx1ZSkgeworICAgIGNhc2UgMjMyOgorICAgICAgYyA9ICchJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjMzOgorICAgICAgYyA9ICciJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjM0OgorICAgICAgYyA9JyUnOworICAgICAgYnJlYWs7CisgICAgY2FzZSAyMzU6CisgICAgICBjID0gJyYnOworICAgICAgYnJlYWs7CisgICAgY2FzZSAyMzY6CisgICAgICBjID0gJ1wnJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjM3OgorICAgICAgYyA9ICcoJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjM4OgorICAgICAgYyA9ICcpJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjM5OgorICAgICAgYyA9ICcqJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjQwOgorICAgICAgYyA9ICcrJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjQxOgorICAgICAgYyA9ICcsJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjQyOgorICAgICAgYyA9ICctJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjQzOgorICAgICAgYyA9ICcuJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjQ0OgorICAgICAgYyA9ICcvJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjQ1OgorICAgICAgYyA9ICc6JzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjQ2OgorICAgICAgYyA9ICc7JzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjQ3OgorICAgICAgYyA9ICc8JzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjQ4OgorICAgICAgYyA9ICc9JzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjQ5OgorICAgICAgYyA9ICc+JzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjUwOgorICAgICAgYyA9ICc/JzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjUxOgorICAgICAgYyA9ICdfJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjUyOgorICAgICAgYyA9ICcgJzsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOkAiUnVudGltZUV4Y2VwdGlvbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJEZWNvZGluZyBpbnZhbGlkIElTTy9JRUMgNjQ2IHZhbHVlOiAlZCIsIGVpZ2h0Qml0VmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgIH0KKyAgcmV0dXJuIFtbWlhEZWNvZGVkQ2hhciBhbGxvY10gaW5pdFdpdGhOZXdQb3NpdGlvbjpwb3MgKyA4IHZhbHVlOmNdOworfQorCistIChCT09MKWlzU3RpbGxBbHBoYTooaW50KXBvcyB7CisgIGlmIChwb3MgKyA1ID4gc2VsZi5pbmZvcm1hdGlvbi5zaXplKSB7CisgICAgcmV0dXJuIE5POworICB9CisKKyAgaW50IGZpdmVCaXRWYWx1ZSA9IFtzZWxmIGV4dHJhY3ROdW1lcmljVmFsdWVGcm9tQml0QXJyYXk6cG9zIGJpdHM6NV07CisgIGlmIChmaXZlQml0VmFsdWUgPj0gNSAmJiBmaXZlQml0VmFsdWUgPCAxNikgeworICAgIHJldHVybiBZRVM7CisgIH0KKworICBpZiAocG9zICsgNiA+IHNlbGYuaW5mb3JtYXRpb24uc2l6ZSkgeworICAgIHJldHVybiBOTzsKKyAgfQorCisgIGludCBzaXhCaXRWYWx1ZSA9IFtzZWxmIGV4dHJhY3ROdW1lcmljVmFsdWVGcm9tQml0QXJyYXk6cG9zIGJpdHM6Nl07CisgIHJldHVybiBzaXhCaXRWYWx1ZSA+PSAxNiAmJiBzaXhCaXRWYWx1ZSA8IDYzOworfQorCistIChaWERlY29kZWRDaGFyICopZGVjb2RlQWxwaGFudW1lcmljOihpbnQpcG9zIHsKKyAgaW50IGZpdmVCaXRWYWx1ZSA9IFtzZWxmIGV4dHJhY3ROdW1lcmljVmFsdWVGcm9tQml0QXJyYXk6cG9zIGJpdHM6NV07CisgIGlmIChmaXZlQml0VmFsdWUgPT0gMTUpIHsKKyAgICByZXR1cm4gW1taWERlY29kZWRDaGFyIGFsbG9jXSBpbml0V2l0aE5ld1Bvc2l0aW9uOnBvcyArIDUgdmFsdWU6Rk5DMWNoYXJdOworICB9CisKKyAgaWYgKGZpdmVCaXRWYWx1ZSA+PSA1ICYmIGZpdmVCaXRWYWx1ZSA8IDE1KSB7CisgICAgcmV0dXJuIFtbWlhEZWNvZGVkQ2hhciBhbGxvY10gaW5pdFdpdGhOZXdQb3NpdGlvbjpwb3MgKyA1IHZhbHVlOih1bmljaGFyKSgnMCcgKyBmaXZlQml0VmFsdWUgLSA1KV07CisgIH0KKworICBpbnQgc2l4Qml0VmFsdWUgPSBbc2VsZiBleHRyYWN0TnVtZXJpY1ZhbHVlRnJvbUJpdEFycmF5OnBvcyBiaXRzOjZdOworCisgIGlmIChzaXhCaXRWYWx1ZSA+PSAzMiAmJiBzaXhCaXRWYWx1ZSA8IDU4KSB7CisgICAgcmV0dXJuIFtbWlhEZWNvZGVkQ2hhciBhbGxvY10gaW5pdFdpdGhOZXdQb3NpdGlvbjpwb3MgKyA2IHZhbHVlOih1bmljaGFyKShzaXhCaXRWYWx1ZSArIDMzKV07CisgIH0KKworICB1bmljaGFyIGM7CisgIHN3aXRjaCAoc2l4Qml0VmFsdWUpeworICAgIGNhc2UgNTg6CisgICAgICBjID0gJyonOworICAgICAgYnJlYWs7CisgICAgY2FzZSA1OToKKyAgICAgIGMgPSAnLCc7CisgICAgICBicmVhazsKKyAgICBjYXNlIDYwOgorICAgICAgYyA9ICctJzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNjE6CisgICAgICBjID0gJy4nOworICAgICAgYnJlYWs7CisgICAgY2FzZSA2MjoKKyAgICAgIGMgPSAnLyc7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpAIlJ1bnRpbWVFeGNlcHRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRGVjb2RpbmcgaW52YWxpZCBhbHBoYW51bWVyaWMgdmFsdWU6ICVkIiwgc2l4Qml0VmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgIH0KKworICByZXR1cm4gW1taWERlY29kZWRDaGFyIGFsbG9jXSBpbml0V2l0aE5ld1Bvc2l0aW9uOnBvcyArIDYgdmFsdWU6Y107Cit9CisKKy0gKEJPT0wpaXNBbHBoYVRvNjQ2VG9BbHBoYUxhdGNoOihpbnQpcG9zIHsKKyAgaWYgKHBvcyArIDEgPiBzZWxmLmluZm9ybWF0aW9uLnNpemUpIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBmb3IgKGludCBpID0gMDsgaSA8IDUgJiYgaSArIHBvcyA8IHNlbGYuaW5mb3JtYXRpb24uc2l6ZTsgKytpKSB7CisgICAgaWYgKGkgPT0gMikgeworICAgICAgaWYgKCFbc2VsZi5pbmZvcm1hdGlvbiBnZXQ6cG9zICsgMl0pIHsKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgfQorICAgIH0gZWxzZSBpZiAoW3NlbGYuaW5mb3JtYXRpb24gZ2V0OnBvcyArIGldKSB7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICB9CisKKyAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTClpc0FscGhhT3I2NDZUb051bWVyaWNMYXRjaDooaW50KXBvcyB7CisgIGlmIChwb3MgKyAzID4gc2VsZi5pbmZvcm1hdGlvbi5zaXplKSB7CisgICAgcmV0dXJuIE5POworICB9CisKKyAgZm9yIChpbnQgaSA9IHBvczsgaSA8IHBvcyArIDM7ICsraSkgeworICAgIGlmIChbc2VsZi5pbmZvcm1hdGlvbiBnZXQ6aV0pIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgIH0KKworICByZXR1cm4gWUVTOworfQorCistIChCT09MKWlzTnVtZXJpY1RvQWxwaGFOdW1lcmljTGF0Y2g6KGludClwb3MgeworICBpZiAocG9zICsgMSA+IHNlbGYuaW5mb3JtYXRpb24uc2l6ZSkgeworICAgIHJldHVybiBOTzsKKyAgfQorCisgIGZvciAoaW50IGkgPSAwOyBpIDwgNCAmJiBpICsgcG9zIDwgc2VsZi5pbmZvcm1hdGlvbi5zaXplOyArK2kpIHsKKyAgICBpZiAoW3NlbGYuaW5mb3JtYXRpb24gZ2V0OnBvcyArIGldKSB7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICB9CisKKyAgcmV0dXJuIFlFUzsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9aWFBERjQxN0NvbW1vbi5oIGIvWlhpbmdPYmpDL3BkZjQxNy9aWFBERjQxN0NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOWNmMTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L1pYUERGNDE3Q29tbW9uLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBaWFBERjQxN19TWU1CT0xfVEFCTEVfTEVOIDI3ODcKK2V4dGVybiBpbnQgWlhQREY0MTdfU1lNQk9MX1RBQkxFW1pYUERGNDE3X1NZTUJPTF9UQUJMRV9MRU5dOworCisjZGVmaW5lIFpYUERGNDE3X0NPREVXT1JEX1RBQkxFX0xFTiAyNzg3CitleHRlcm4gaW50IFpYUERGNDE3X0NPREVXT1JEX1RBQkxFW1pYUERGNDE3X0NPREVXT1JEX1RBQkxFX0xFTl07CisKK2V4dGVybiBpbnQgY29uc3QgWlhQREY0MTdfTlVNQkVSX09GX0NPREVXT1JEUzsKK2V4dGVybiBpbnQgY29uc3QgWlhQREY0MTdfTUlOX1JPV1NfSU5fQkFSQ09ERTsKK2V4dGVybiBpbnQgY29uc3QgWlhQREY0MTdfTUFYX1JPV1NfSU5fQkFSQ09ERTsKK2V4dGVybiBpbnQgY29uc3QgWlhQREY0MTdfTUFYX0NPREVXT1JEU19JTl9CQVJDT0RFOworZXh0ZXJuIGludCBjb25zdCBaWFBERjQxN19NT0RVTEVTX0lOX0NPREVXT1JEOworZXh0ZXJuIGludCBjb25zdCBaWFBERjQxN19NT0RVTEVTX0lOX1NUT1BfUEFUVEVSTjsKKyNkZWZpbmUgWlhQREY0MTdfQkFSU19JTl9NT0RVTEUgOAorCitAaW50ZXJmYWNlIFpYUERGNDE3Q29tbW9uIDogTlNPYmplY3QKKworKyAoaW50KWJpdENvdW50U3VtOihOU0FycmF5ICopbW9kdWxlQml0Q291bnQ7CisrIChpbnQpY29kZXdvcmQ6KGxvbmcpc3ltYm9sOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L1pYUERGNDE3Q29tbW9uLm0gYi9aWGluZ09iakMvcGRmNDE3L1pYUERGNDE3Q29tbW9uLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmN2M2YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvWlhQREY0MTdDb21tb24ubQpAQCAtMCwwICsxLDQ1NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQREY0MTcuaCIKKyNpbXBvcnQgIlpYUERGNDE3Q29tbW9uLmgiCisKK2ludCBjb25zdCBaWFBERjQxN19OVU1CRVJfT0ZfQ09ERVdPUkRTID0gOTI5OworLy8gTWF4aW11bSBDb2Rld29yZHMgKERhdGEgKyBFcnJvcikuCitpbnQgY29uc3QgWlhQREY0MTdfTUFYX0NPREVXT1JEU19JTl9CQVJDT0RFID0gWlhQREY0MTdfTlVNQkVSX09GX0NPREVXT1JEUyAtIDE7CitpbnQgY29uc3QgWlhQREY0MTdfTUlOX1JPV1NfSU5fQkFSQ09ERSA9IDM7CitpbnQgY29uc3QgWlhQREY0MTdfTUFYX1JPV1NfSU5fQkFSQ09ERSA9IDkwOworLy8gT25lIGxlZnQgcm93IGluZGljYXRpb24gY29sdW1uICsgbWF4IDMwIGRhdGEgY29sdW1ucyArIG9uZSByaWdodCByb3cgaW5kaWNhdG9yIGNvbHVtbgoraW50IGNvbnN0IFpYUERGNDE3X01BWF9DT0RFV09SRFNfSU5fUk9XID0gMzI7CitpbnQgY29uc3QgWlhQREY0MTdfTU9EVUxFU19JTl9DT0RFV09SRCA9IDE3OworaW50IGNvbnN0IFpYUERGNDE3X01PRFVMRVNfSU5fU1RPUF9QQVRURVJOID0gMTg7CisKK0BpbXBsZW1lbnRhdGlvbiBaWFBERjQxN0NvbW1vbgorCisrIChpbnQpYml0Q291bnRTdW06KE5TQXJyYXkgKiltb2R1bGVCaXRDb3VudCB7CisgIGludCBiaXRDb3VudFN1bSA9IDA7CisgIGZvciAoTlNOdW1iZXIgKmNvdW50IGluIG1vZHVsZUJpdENvdW50KSB7CisgICAgYml0Q291bnRTdW0gKz0gW2NvdW50IGludFZhbHVlXTsKKyAgfQorICByZXR1cm4gYml0Q291bnRTdW07Cit9CisKKy8qKgorICogVHJhbnNsYXRlIHRoZSBzeW1ib2wgaW50byBhIGNvZGV3b3JkLgorICovCisrIChpbnQpY29kZXdvcmQ6KGxvbmcpc3ltYm9sIHsKKyAgbG9uZyBzeW0gPSBzeW1ib2wgJiAweDNGRkZGOworICBpbnQgaSA9IFtzZWxmIGZpbmRDb2Rld29yZEluZGV4OnN5bV07CisgIGlmIChpID09IC0xKSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiAoWlhQREY0MTdfQ09ERVdPUkRfVEFCTEVbaV0gLSAxKSAlIFpYUERGNDE3X05VTUJFUl9PRl9DT0RFV09SRFM7Cit9CisKKy8qKgorICogVXNlIGEgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBpbmRleCBvZiB0aGUgY29kZXdvcmQgY29ycmVzcG9uZGluZyB0bworICogdGhpcyBzeW1ib2wuCisgKi8KKysgKGludClmaW5kQ29kZXdvcmRJbmRleDoobG9uZylzeW1ib2wgeworICBpbnQgZmlyc3QgPSAwOworICBpbnQgdXB0byA9IFpYUERGNDE3X1NZTUJPTF9UQUJMRV9MRU47CisgIHdoaWxlIChmaXJzdCA8IHVwdG8pIHsKKyAgICBpbnQgbWlkID0gKGZpcnN0ICsgdXB0bykgPj4gMTsgLy8gQ29tcHV0ZSBtaWQgcG9pbnQuCisgICAgaWYgKHN5bWJvbCA8IFpYUERGNDE3X1NZTUJPTF9UQUJMRVttaWRdKSB7CisgICAgICB1cHRvID0gbWlkOyAvLyBjb250aW51ZSBzZWFyY2ggaW4gYm90dG9tIGhhbGYuCisgICAgfSBlbHNlIGlmIChzeW1ib2wgPiBaWFBERjQxN19TWU1CT0xfVEFCTEVbbWlkXSkgeworICAgICAgZmlyc3QgPSBtaWQgKyAxOyAvLyBjb250aW51ZSBzZWFyY2ggaW4gdG9wIGhhbGYuCisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBtaWQ7IC8vIEZvdW5kIGl0LiByZXR1cm4gcG9zaXRpb24KKyAgICB9CisgIH0KKyAgcmV0dXJuIC0xOworfQorCitAZW5kCisKKy8qKgorICogVGhlIHNvcnRlZCB0YWJsZSBvZiBhbGwgcG9zc2libGUgc3ltYm9scy4gRXh0cmFjdGVkIGZyb20gdGhlIFBERjQxNworICogc3BlY2lmaWNhdGlvbi4gVGhlIGluZGV4IG9mIGEgc3ltYm9sIGluIHRoaXMgdGFibGUgY29ycmVzcG9uZHMgdG8gdGhlCisgKiBpbmRleCBpbnRvIHRoZSBjb2Rld29yZCB0YWJsZS4KKyAqLworaW50IFpYUERGNDE3X1NZTUJPTF9UQUJMRVtaWFBERjQxN19TWU1CT0xfVEFCTEVfTEVOXSA9IHsKKyAgMHgxMDI1ZSwgMHgxMDI3YSwgMHgxMDI5ZSwgMHgxMDJiYywgMHgxMDJmMiwgMHgxMDJmNCwgMHgxMDMyZSwgMHgxMDM0ZSwgMHgxMDM1YywgMHgxMDM5NiwgMHgxMDNhNiwgMHgxMDNhYywKKyAgMHgxMDQyMiwgMHgxMDQyOCwgMHgxMDQzNiwgMHgxMDQ0MiwgMHgxMDQ0NCwgMHgxMDQ0OCwgMHgxMDQ1MCwgMHgxMDQ1ZSwgMHgxMDQ2NiwgMHgxMDQ2YywgMHgxMDQ3YSwgMHgxMDQ4MiwKKyAgMHgxMDQ5ZSwgMHgxMDRhMCwgMHgxMDRiYywgMHgxMDRjNiwgMHgxMDRkOCwgMHgxMDRlZSwgMHgxMDRmMiwgMHgxMDRmNCwgMHgxMDUwNCwgMHgxMDUwOCwgMHgxMDUxMCwgMHgxMDUxZSwKKyAgMHgxMDUyMCwgMHgxMDUzYywgMHgxMDU0MCwgMHgxMDU3OCwgMHgxMDU4NiwgMHgxMDU4YywgMHgxMDU5OCwgMHgxMDViMCwgMHgxMDViZSwgMHgxMDVjZSwgMHgxMDVkYywgMHgxMDVlMiwKKyAgMHgxMDVlNCwgMHgxMDVlOCwgMHgxMDVmNiwgMHgxMDYyZSwgMHgxMDY0ZSwgMHgxMDY1YywgMHgxMDY4ZSwgMHgxMDY5YywgMHgxMDZiOCwgMHgxMDZkZSwgMHgxMDZmYSwgMHgxMDcxNiwKKyAgMHgxMDcyNiwgMHgxMDcyYywgMHgxMDc0NiwgMHgxMDc0YywgMHgxMDc1OCwgMHgxMDc2ZSwgMHgxMDc5MiwgMHgxMDc5NCwgMHgxMDdhMiwgMHgxMDdhNCwgMHgxMDdhOCwgMHgxMDdiNiwKKyAgMHgxMDgyMiwgMHgxMDgyOCwgMHgxMDg0MiwgMHgxMDg0OCwgMHgxMDg1MCwgMHgxMDg1ZSwgMHgxMDg2NiwgMHgxMDg2YywgMHgxMDg3YSwgMHgxMDg4MiwgMHgxMDg4NCwgMHgxMDg5MCwKKyAgMHgxMDg5ZSwgMHgxMDhhMCwgMHgxMDhiYywgMHgxMDhjNiwgMHgxMDhjYywgMHgxMDhkOCwgMHgxMDhlZSwgMHgxMDhmMiwgMHgxMDhmNCwgMHgxMDkwMiwgMHgxMDkwOCwgMHgxMDkxZSwKKyAgMHgxMDkyMCwgMHgxMDkzYywgMHgxMDk0MCwgMHgxMDk3OCwgMHgxMDk4NiwgMHgxMDk5OCwgMHgxMDliMCwgMHgxMDliZSwgMHgxMDljZSwgMHgxMDlkYywgMHgxMDllMiwgMHgxMDllNCwKKyAgMHgxMDllOCwgMHgxMDlmNiwgMHgxMGEwOCwgMHgxMGExMCwgMHgxMGExZSwgMHgxMGEyMCwgMHgxMGEzYywgMHgxMGE0MCwgMHgxMGE3OCwgMHgxMGFmMCwgMHgxMGIwNiwgMHgxMGIwYywKKyAgMHgxMGIxOCwgMHgxMGIzMCwgMHgxMGIzZSwgMHgxMGI2MCwgMHgxMGI3YywgMHgxMGI4ZSwgMHgxMGI5YywgMHgxMGJiOCwgMHgxMGJjMiwgMHgxMGJjNCwgMHgxMGJjOCwgMHgxMGJkMCwKKyAgMHgxMGJkZSwgMHgxMGJlNiwgMHgxMGJlYywgMHgxMGMyZSwgMHgxMGM0ZSwgMHgxMGM1YywgMHgxMGM2MiwgMHgxMGM2NCwgMHgxMGM2OCwgMHgxMGM3NiwgMHgxMGM4ZSwgMHgxMGM5YywKKyAgMHgxMGNiOCwgMHgxMGNjMiwgMHgxMGNjNCwgMHgxMGNjOCwgMHgxMGNkMCwgMHgxMGNkZSwgMHgxMGNlNiwgMHgxMGNlYywgMHgxMGNmYSwgMHgxMGQwZSwgMHgxMGQxYywgMHgxMGQzOCwKKyAgMHgxMGQ3MCwgMHgxMGQ3ZSwgMHgxMGQ4MiwgMHgxMGQ4NCwgMHgxMGQ4OCwgMHgxMGQ5MCwgMHgxMGQ5ZSwgMHgxMGRhMCwgMHgxMGRiYywgMHgxMGRjNiwgMHgxMGRjYywgMHgxMGRkOCwKKyAgMHgxMGRlZSwgMHgxMGRmMiwgMHgxMGRmNCwgMHgxMGUxNiwgMHgxMGUyNiwgMHgxMGUyYywgMHgxMGU0NiwgMHgxMGU1OCwgMHgxMGU2ZSwgMHgxMGU4NiwgMHgxMGU4YywgMHgxMGU5OCwKKyAgMHgxMGViMCwgMHgxMGViZSwgMHgxMGVjZSwgMHgxMGVkYywgMHgxMGYwYSwgMHgxMGYxMiwgMHgxMGYxNCwgMHgxMGYyMiwgMHgxMGYyOCwgMHgxMGYzNiwgMHgxMGY0MiwgMHgxMGY0NCwKKyAgMHgxMGY0OCwgMHgxMGY1MCwgMHgxMGY1ZSwgMHgxMGY2NiwgMHgxMGY2YywgMHgxMGZiMiwgMHgxMGZiNCwgMHgxMTAyMiwgMHgxMTAyOCwgMHgxMTA0MiwgMHgxMTA0OCwgMHgxMTA1MCwKKyAgMHgxMTA1ZSwgMHgxMTA3YSwgMHgxMTA4MiwgMHgxMTA4NCwgMHgxMTA5MCwgMHgxMTA5ZSwgMHgxMTBhMCwgMHgxMTBiYywgMHgxMTBjNiwgMHgxMTBjYywgMHgxMTBkOCwgMHgxMTBlZSwKKyAgMHgxMTBmMiwgMHgxMTBmNCwgMHgxMTEwMiwgMHgxMTExZSwgMHgxMTEyMCwgMHgxMTEzYywgMHgxMTE0MCwgMHgxMTE3OCwgMHgxMTE4NiwgMHgxMTE5OCwgMHgxMTFiMCwgMHgxMTFiZSwKKyAgMHgxMTFjZSwgMHgxMTFkYywgMHgxMTFlMiwgMHgxMTFlNCwgMHgxMTFlOCwgMHgxMTFmNiwgMHgxMTIwOCwgMHgxMTIxZSwgMHgxMTIyMCwgMHgxMTI3OCwgMHgxMTJmMCwgMHgxMTMwYywKKyAgMHgxMTMzMCwgMHgxMTMzZSwgMHgxMTM2MCwgMHgxMTM3YywgMHgxMTM4ZSwgMHgxMTM5YywgMHgxMTNiOCwgMHgxMTNjMiwgMHgxMTNjOCwgMHgxMTNkMCwgMHgxMTNkZSwgMHgxMTNlNiwKKyAgMHgxMTNlYywgMHgxMTQwOCwgMHgxMTQxMCwgMHgxMTQxZSwgMHgxMTQyMCwgMHgxMTQzYywgMHgxMTQ0MCwgMHgxMTQ3OCwgMHgxMTRmMCwgMHgxMTVlMCwgMHgxMTYwYywgMHgxMTYxOCwKKyAgMHgxMTYzMCwgMHgxMTYzZSwgMHgxMTY2MCwgMHgxMTY3YywgMHgxMTZjMCwgMHgxMTZmOCwgMHgxMTcxYywgMHgxMTczOCwgMHgxMTc3MCwgMHgxMTc3ZSwgMHgxMTc4MiwgMHgxMTc4NCwKKyAgMHgxMTc4OCwgMHgxMTc5MCwgMHgxMTc5ZSwgMHgxMTdhMCwgMHgxMTdiYywgMHgxMTdjNiwgMHgxMTdjYywgMHgxMTdkOCwgMHgxMTdlZSwgMHgxMTgyZSwgMHgxMTgzNCwgMHgxMTg0ZSwKKyAgMHgxMTg1YywgMHgxMTg2MiwgMHgxMTg2NCwgMHgxMTg2OCwgMHgxMTg3NiwgMHgxMTg4ZSwgMHgxMTg5YywgMHgxMThiOCwgMHgxMThjMiwgMHgxMThjOCwgMHgxMThkMCwgMHgxMThkZSwKKyAgMHgxMThlNiwgMHgxMThlYywgMHgxMThmYSwgMHgxMTkwZSwgMHgxMTkxYywgMHgxMTkzOCwgMHgxMTk3MCwgMHgxMTk3ZSwgMHgxMTk4MiwgMHgxMTk4NCwgMHgxMTk5MCwgMHgxMTk5ZSwKKyAgMHgxMTlhMCwgMHgxMTliYywgMHgxMTljNiwgMHgxMTljYywgMHgxMTlkOCwgMHgxMTllZSwgMHgxMTlmMiwgMHgxMTlmNCwgMHgxMWEwZSwgMHgxMWExYywgMHgxMWEzOCwgMHgxMWE3MCwKKyAgMHgxMWE3ZSwgMHgxMWFlMCwgMHgxMWFmYywgMHgxMWIwOCwgMHgxMWIxMCwgMHgxMWIxZSwgMHgxMWIyMCwgMHgxMWIzYywgMHgxMWI0MCwgMHgxMWI3OCwgMHgxMWI4YywgMHgxMWI5OCwKKyAgMHgxMWJiMCwgMHgxMWJiZSwgMHgxMWJjZSwgMHgxMWJkYywgMHgxMWJlMiwgMHgxMWJlNCwgMHgxMWJlOCwgMHgxMWJmNiwgMHgxMWMxNiwgMHgxMWMyNiwgMHgxMWMyYywgMHgxMWM0NiwKKyAgMHgxMWM0YywgMHgxMWM1OCwgMHgxMWM2ZSwgMHgxMWM4NiwgMHgxMWM5OCwgMHgxMWNiMCwgMHgxMWNiZSwgMHgxMWNjZSwgMHgxMWNkYywgMHgxMWNlMiwgMHgxMWNlNCwgMHgxMWNlOCwKKyAgMHgxMWNmNiwgMHgxMWQwNiwgMHgxMWQwYywgMHgxMWQxOCwgMHgxMWQzMCwgMHgxMWQzZSwgMHgxMWQ2MCwgMHgxMWQ3YywgMHgxMWQ4ZSwgMHgxMWQ5YywgMHgxMWRiOCwgMHgxMWRjNCwKKyAgMHgxMWRjOCwgMHgxMWRkMCwgMHgxMWRkZSwgMHgxMWRlNiwgMHgxMWRlYywgMHgxMWRmYSwgMHgxMWUwYSwgMHgxMWUxMiwgMHgxMWUxNCwgMHgxMWUyMiwgMHgxMWUyNCwgMHgxMWUyOCwKKyAgMHgxMWUzNiwgMHgxMWU0MiwgMHgxMWU0NCwgMHgxMWU1MCwgMHgxMWU1ZSwgMHgxMWU2NiwgMHgxMWU2YywgMHgxMWU4MiwgMHgxMWU4NCwgMHgxMWU4OCwgMHgxMWU5MCwgMHgxMWU5ZSwKKyAgMHgxMWVhMCwgMHgxMWViYywgMHgxMWVjNiwgMHgxMWVjYywgMHgxMWVkOCwgMHgxMWVlZSwgMHgxMWYxYSwgMHgxMWYyZSwgMHgxMWYzMiwgMHgxMWYzNCwgMHgxMWY0ZSwgMHgxMWY1YywKKyAgMHgxMWY2MiwgMHgxMWY2NCwgMHgxMWY2OCwgMHgxMWY3NiwgMHgxMjA0OCwgMHgxMjA1ZSwgMHgxMjA4MiwgMHgxMjA4NCwgMHgxMjA5MCwgMHgxMjA5ZSwgMHgxMjBhMCwgMHgxMjBiYywKKyAgMHgxMjBkOCwgMHgxMjBmMiwgMHgxMjBmNCwgMHgxMjEwOCwgMHgxMjExZSwgMHgxMjEyMCwgMHgxMjEzYywgMHgxMjE0MCwgMHgxMjE3OCwgMHgxMjE4NiwgMHgxMjE5OCwgMHgxMjFiMCwKKyAgMHgxMjFiZSwgMHgxMjFlMiwgMHgxMjFlNCwgMHgxMjFlOCwgMHgxMjFmNiwgMHgxMjIwNCwgMHgxMjIxMCwgMHgxMjIxZSwgMHgxMjIyMCwgMHgxMjI3OCwgMHgxMjJmMCwgMHgxMjMwNiwKKyAgMHgxMjMwYywgMHgxMjMzMCwgMHgxMjMzZSwgMHgxMjM2MCwgMHgxMjM3YywgMHgxMjM4ZSwgMHgxMjM5YywgMHgxMjNiOCwgMHgxMjNjMiwgMHgxMjNjOCwgMHgxMjNkMCwgMHgxMjNlNiwKKyAgMHgxMjNlYywgMHgxMjQxZSwgMHgxMjQyMCwgMHgxMjQzYywgMHgxMjRmMCwgMHgxMjVlMCwgMHgxMjYxOCwgMHgxMjYzZSwgMHgxMjY2MCwgMHgxMjY3YywgMHgxMjZjMCwgMHgxMjZmOCwKKyAgMHgxMjczOCwgMHgxMjc3MCwgMHgxMjc3ZSwgMHgxMjc4MiwgMHgxMjc4NCwgMHgxMjc5MCwgMHgxMjc5ZSwgMHgxMjdhMCwgMHgxMjdiYywgMHgxMjdjNiwgMHgxMjdjYywgMHgxMjdkOCwKKyAgMHgxMjdlZSwgMHgxMjgyMCwgMHgxMjgzYywgMHgxMjg0MCwgMHgxMjg3OCwgMHgxMjhmMCwgMHgxMjllMCwgMHgxMmJjMCwgMHgxMmMxOCwgMHgxMmMzMCwgMHgxMmMzZSwgMHgxMmM2MCwKKyAgMHgxMmM3YywgMHgxMmNjMCwgMHgxMmNmOCwgMHgxMmRmMCwgMHgxMmUxYywgMHgxMmUzOCwgMHgxMmU3MCwgMHgxMmU3ZSwgMHgxMmVlMCwgMHgxMmVmYywgMHgxMmYwNCwgMHgxMmYwOCwKKyAgMHgxMmYxMCwgMHgxMmYyMCwgMHgxMmYzYywgMHgxMmY0MCwgMHgxMmY3OCwgMHgxMmY4NiwgMHgxMmY4YywgMHgxMmY5OCwgMHgxMmZiMCwgMHgxMmZiZSwgMHgxMmZjZSwgMHgxMmZkYywKKyAgMHgxMzAyZSwgMHgxMzA0ZSwgMHgxMzA1YywgMHgxMzA2MiwgMHgxMzA2OCwgMHgxMzA4ZSwgMHgxMzA5YywgMHgxMzBiOCwgMHgxMzBjMiwgMHgxMzBjOCwgMHgxMzBkMCwgMHgxMzBkZSwKKyAgMHgxMzBlYywgMHgxMzBmYSwgMHgxMzEwZSwgMHgxMzEzOCwgMHgxMzE3MCwgMHgxMzE3ZSwgMHgxMzE4MiwgMHgxMzE4NCwgMHgxMzE5MCwgMHgxMzE5ZSwgMHgxMzFhMCwgMHgxMzFiYywKKyAgMHgxMzFjNiwgMHgxMzFjYywgMHgxMzFkOCwgMHgxMzFmMiwgMHgxMzFmNCwgMHgxMzIwZSwgMHgxMzIxYywgMHgxMzI3MCwgMHgxMzI3ZSwgMHgxMzJlMCwgMHgxMzJmYywgMHgxMzMwOCwKKyAgMHgxMzMxZSwgMHgxMzMyMCwgMHgxMzMzYywgMHgxMzM0MCwgMHgxMzM3OCwgMHgxMzM4NiwgMHgxMzM5OCwgMHgxMzNiMCwgMHgxMzNiZSwgMHgxMzNjZSwgMHgxMzNkYywgMHgxMzNlMiwKKyAgMHgxMzNlNCwgMHgxMzNlOCwgMHgxMzNmNiwgMHgxMzQwZSwgMHgxMzQxYywgMHgxMzQzOCwgMHgxMzQ3MCwgMHgxMzQ3ZSwgMHgxMzRlMCwgMHgxMzRmYywgMHgxMzVjMCwgMHgxMzVmOCwKKyAgMHgxMzYwOCwgMHgxMzYxMCwgMHgxMzYxZSwgMHgxMzYyMCwgMHgxMzYzYywgMHgxMzY0MCwgMHgxMzY3OCwgMHgxMzZmMCwgMHgxMzcwYywgMHgxMzcxOCwgMHgxMzczMCwgMHgxMzczZSwKKyAgMHgxMzc2MCwgMHgxMzc3YywgMHgxMzc5YywgMHgxMzdiOCwgMHgxMzdjMiwgMHgxMzdjNCwgMHgxMzdjOCwgMHgxMzdkMCwgMHgxMzdkZSwgMHgxMzdlNiwgMHgxMzdlYywgMHgxMzgxNiwKKyAgMHgxMzgyNiwgMHgxMzgyYywgMHgxMzg0NiwgMHgxMzg0YywgMHgxMzg1OCwgMHgxMzg2ZSwgMHgxMzg3NCwgMHgxMzg4NiwgMHgxMzg5OCwgMHgxMzhiMCwgMHgxMzhiZSwgMHgxMzhjZSwKKyAgMHgxMzhkYywgMHgxMzhlMiwgMHgxMzhlNCwgMHgxMzhlOCwgMHgxMzkwNiwgMHgxMzkwYywgMHgxMzkzMCwgMHgxMzkzZSwgMHgxMzk2MCwgMHgxMzk3YywgMHgxMzk4ZSwgMHgxMzk5YywKKyAgMHgxMzliOCwgMHgxMzljOCwgMHgxMzlkMCwgMHgxMzlkZSwgMHgxMzllNiwgMHgxMzllYywgMHgxMzlmYSwgMHgxM2EwNiwgMHgxM2EwYywgMHgxM2ExOCwgMHgxM2EzMCwgMHgxM2EzZSwKKyAgMHgxM2E2MCwgMHgxM2E3YywgMHgxM2FjMCwgMHgxM2FmOCwgMHgxM2IwZSwgMHgxM2IxYywgMHgxM2IzOCwgMHgxM2I3MCwgMHgxM2I3ZSwgMHgxM2I4OCwgMHgxM2I5MCwgMHgxM2I5ZSwKKyAgMHgxM2JhMCwgMHgxM2JiYywgMHgxM2JjYywgMHgxM2JkOCwgMHgxM2JlZSwgMHgxM2JmMiwgMHgxM2JmNCwgMHgxM2MxMiwgMHgxM2MxNCwgMHgxM2MyMiwgMHgxM2MyNCwgMHgxM2MyOCwKKyAgMHgxM2MzNiwgMHgxM2M0MiwgMHgxM2M0OCwgMHgxM2M1MCwgMHgxM2M1ZSwgMHgxM2M2NiwgMHgxM2M2YywgMHgxM2M4MiwgMHgxM2M4NCwgMHgxM2M5MCwgMHgxM2M5ZSwgMHgxM2NhMCwKKyAgMHgxM2NiYywgMHgxM2NjNiwgMHgxM2NjYywgMHgxM2NkOCwgMHgxM2NlZSwgMHgxM2QwMiwgMHgxM2QwNCwgMHgxM2QwOCwgMHgxM2QxMCwgMHgxM2QxZSwgMHgxM2QyMCwgMHgxM2QzYywKKyAgMHgxM2Q0MCwgMHgxM2Q3OCwgMHgxM2Q4NiwgMHgxM2Q4YywgMHgxM2Q5OCwgMHgxM2RiMCwgMHgxM2RiZSwgMHgxM2RjZSwgMHgxM2RkYywgMHgxM2RlNCwgMHgxM2RlOCwgMHgxM2RmNiwKKyAgMHgxM2UxYSwgMHgxM2UyZSwgMHgxM2UzMiwgMHgxM2UzNCwgMHgxM2U0ZSwgMHgxM2U1YywgMHgxM2U2MiwgMHgxM2U2NCwgMHgxM2U2OCwgMHgxM2U3NiwgMHgxM2U4ZSwgMHgxM2U5YywKKyAgMHgxM2ViOCwgMHgxM2VjMiwgMHgxM2VjNCwgMHgxM2VjOCwgMHgxM2VkMCwgMHgxM2VkZSwgMHgxM2VlNiwgMHgxM2VlYywgMHgxM2YyNiwgMHgxM2YyYywgMHgxM2YzYSwgMHgxM2Y0NiwKKyAgMHgxM2Y0YywgMHgxM2Y1OCwgMHgxM2Y2ZSwgMHgxM2Y3MiwgMHgxM2Y3NCwgMHgxNDA4MiwgMHgxNDA5ZSwgMHgxNDBhMCwgMHgxNDBiYywgMHgxNDEwNCwgMHgxNDEwOCwgMHgxNDExMCwKKyAgMHgxNDExZSwgMHgxNDEyMCwgMHgxNDEzYywgMHgxNDE0MCwgMHgxNDE3OCwgMHgxNDE4YywgMHgxNDE5OCwgMHgxNDFiMCwgMHgxNDFiZSwgMHgxNDFlMiwgMHgxNDFlNCwgMHgxNDFlOCwKKyAgMHgxNDIwOCwgMHgxNDIxMCwgMHgxNDIxZSwgMHgxNDIyMCwgMHgxNDIzYywgMHgxNDI0MCwgMHgxNDI3OCwgMHgxNDJmMCwgMHgxNDMwNiwgMHgxNDMwYywgMHgxNDMxOCwgMHgxNDMzMCwKKyAgMHgxNDMzZSwgMHgxNDM2MCwgMHgxNDM3YywgMHgxNDM4ZSwgMHgxNDNjMiwgMHgxNDNjNCwgMHgxNDNjOCwgMHgxNDNkMCwgMHgxNDNlNiwgMHgxNDNlYywgMHgxNDQwOCwgMHgxNDQxMCwKKyAgMHgxNDQxZSwgMHgxNDQyMCwgMHgxNDQzYywgMHgxNDQ0MCwgMHgxNDQ3OCwgMHgxNDRmMCwgMHgxNDVlMCwgMHgxNDYwYywgMHgxNDYxOCwgMHgxNDYzMCwgMHgxNDYzZSwgMHgxNDY2MCwKKyAgMHgxNDY3YywgMHgxNDZjMCwgMHgxNDZmOCwgMHgxNDcxYywgMHgxNDczOCwgMHgxNDc3MCwgMHgxNDc3ZSwgMHgxNDc4MiwgMHgxNDc4NCwgMHgxNDc4OCwgMHgxNDc5MCwgMHgxNDdhMCwKKyAgMHgxNDdiYywgMHgxNDdjNiwgMHgxNDdjYywgMHgxNDdkOCwgMHgxNDdlZSwgMHgxNDgxMCwgMHgxNDgyMCwgMHgxNDgzYywgMHgxNDg0MCwgMHgxNDg3OCwgMHgxNDhmMCwgMHgxNDllMCwKKyAgMHgxNGJjMCwgMHgxNGMzMCwgMHgxNGMzZSwgMHgxNGM2MCwgMHgxNGM3YywgMHgxNGNjMCwgMHgxNGNmOCwgMHgxNGRmMCwgMHgxNGUzOCwgMHgxNGU3MCwgMHgxNGU3ZSwgMHgxNGVlMCwKKyAgMHgxNGVmYywgMHgxNGYwNCwgMHgxNGYwOCwgMHgxNGYxMCwgMHgxNGYxZSwgMHgxNGYyMCwgMHgxNGYzYywgMHgxNGY0MCwgMHgxNGY3OCwgMHgxNGY4NiwgMHgxNGY4YywgMHgxNGY5OCwKKyAgMHgxNGZiMCwgMHgxNGZjZSwgMHgxNGZkYywgMHgxNTAyMCwgMHgxNTA0MCwgMHgxNTA3OCwgMHgxNTBmMCwgMHgxNTFlMCwgMHgxNTNjMCwgMHgxNTg2MCwgMHgxNTg3YywgMHgxNThjMCwKKyAgMHgxNThmOCwgMHgxNTlmMCwgMHgxNWJlMCwgMHgxNWM3MCwgMHgxNWM3ZSwgMHgxNWNlMCwgMHgxNWNmYywgMHgxNWRjMCwgMHgxNWRmOCwgMHgxNWUwOCwgMHgxNWUxMCwgMHgxNWUyMCwKKyAgMHgxNWU0MCwgMHgxNWU3OCwgMHgxNWVmMCwgMHgxNWYwYywgMHgxNWYxOCwgMHgxNWYzMCwgMHgxNWY2MCwgMHgxNWY3YywgMHgxNWY4ZSwgMHgxNWY5YywgMHgxNWZiOCwgMHgxNjA0ZSwKKyAgMHgxNjA1YywgMHgxNjA4ZSwgMHgxNjA5YywgMHgxNjBiOCwgMHgxNjBjMiwgMHgxNjBjNCwgMHgxNjBjOCwgMHgxNjBkZSwgMHgxNjEwZSwgMHgxNjExYywgMHgxNjEzOCwgMHgxNjE3MCwKKyAgMHgxNjE3ZSwgMHgxNjE4NCwgMHgxNjE4OCwgMHgxNjE5MCwgMHgxNjE5ZSwgMHgxNjFhMCwgMHgxNjFiYywgMHgxNjFjNiwgMHgxNjFjYywgMHgxNjFkOCwgMHgxNjFmMiwgMHgxNjFmNCwKKyAgMHgxNjIwZSwgMHgxNjIxYywgMHgxNjIzOCwgMHgxNjI3MCwgMHgxNjI3ZSwgMHgxNjJlMCwgMHgxNjJmYywgMHgxNjMwNCwgMHgxNjMwOCwgMHgxNjMxMCwgMHgxNjMxZSwgMHgxNjMyMCwKKyAgMHgxNjMzYywgMHgxNjM0MCwgMHgxNjM3OCwgMHgxNjM4NiwgMHgxNjM4YywgMHgxNjM5OCwgMHgxNjNiMCwgMHgxNjNiZSwgMHgxNjNjZSwgMHgxNjNkYywgMHgxNjNlMiwgMHgxNjNlNCwKKyAgMHgxNjNlOCwgMHgxNjNmNiwgMHgxNjQwZSwgMHgxNjQxYywgMHgxNjQzOCwgMHgxNjQ3MCwgMHgxNjQ3ZSwgMHgxNjRlMCwgMHgxNjRmYywgMHgxNjVjMCwgMHgxNjVmOCwgMHgxNjYxMCwKKyAgMHgxNjYxZSwgMHgxNjYyMCwgMHgxNjYzYywgMHgxNjY0MCwgMHgxNjY3OCwgMHgxNjZmMCwgMHgxNjcxOCwgMHgxNjczMCwgMHgxNjczZSwgMHgxNjc2MCwgMHgxNjc3YywgMHgxNjc4ZSwKKyAgMHgxNjc5YywgMHgxNjdiOCwgMHgxNjdjMiwgMHgxNjdjNCwgMHgxNjdjOCwgMHgxNjdkMCwgMHgxNjdkZSwgMHgxNjdlNiwgMHgxNjdlYywgMHgxNjgxYywgMHgxNjgzOCwgMHgxNjg3MCwKKyAgMHgxNjhlMCwgMHgxNjhmYywgMHgxNjljMCwgMHgxNjlmOCwgMHgxNmJmMCwgMHgxNmMxMCwgMHgxNmMxZSwgMHgxNmMyMCwgMHgxNmMzYywgMHgxNmM0MCwgMHgxNmM3OCwgMHgxNmNmMCwKKyAgMHgxNmRlMCwgMHgxNmUxOCwgMHgxNmUzMCwgMHgxNmUzZSwgMHgxNmU2MCwgMHgxNmU3YywgMHgxNmVjMCwgMHgxNmVmOCwgMHgxNmYxYywgMHgxNmYzOCwgMHgxNmY3MCwgMHgxNmY3ZSwKKyAgMHgxNmY4NCwgMHgxNmY4OCwgMHgxNmY5MCwgMHgxNmY5ZSwgMHgxNmZhMCwgMHgxNmZiYywgMHgxNmZjNiwgMHgxNmZjYywgMHgxNmZkOCwgMHgxNzAyNiwgMHgxNzAyYywgMHgxNzA0NiwKKyAgMHgxNzA0YywgMHgxNzA1OCwgMHgxNzA2ZSwgMHgxNzA4NiwgMHgxNzA4YywgMHgxNzA5OCwgMHgxNzBiMCwgMHgxNzBiZSwgMHgxNzBjZSwgMHgxNzBkYywgMHgxNzBlOCwgMHgxNzEwNiwKKyAgMHgxNzEwYywgMHgxNzExOCwgMHgxNzEzMCwgMHgxNzEzZSwgMHgxNzE2MCwgMHgxNzE3YywgMHgxNzE4ZSwgMHgxNzE5YywgMHgxNzFiOCwgMHgxNzFjMiwgMHgxNzFjNCwgMHgxNzFjOCwKKyAgMHgxNzFkMCwgMHgxNzFkZSwgMHgxNzFlNiwgMHgxNzFlYywgMHgxNzFmYSwgMHgxNzIwNiwgMHgxNzIwYywgMHgxNzIxOCwgMHgxNzIzMCwgMHgxNzIzZSwgMHgxNzI2MCwgMHgxNzI3YywKKyAgMHgxNzJjMCwgMHgxNzJmOCwgMHgxNzMwZSwgMHgxNzMxYywgMHgxNzMzOCwgMHgxNzM3MCwgMHgxNzM3ZSwgMHgxNzM4OCwgMHgxNzM5MCwgMHgxNzM5ZSwgMHgxNzNhMCwgMHgxNzNiYywKKyAgMHgxNzNjYywgMHgxNzNkOCwgMHgxNzNlZSwgMHgxNzNmMiwgMHgxNzNmNCwgMHgxNzQwYywgMHgxNzQxOCwgMHgxNzQzMCwgMHgxNzQzZSwgMHgxNzQ2MCwgMHgxNzQ3YywgMHgxNzRjMCwKKyAgMHgxNzRmOCwgMHgxNzVmMCwgMHgxNzYwZSwgMHgxNzYxYywgMHgxNzYzOCwgMHgxNzY3MCwgMHgxNzY3ZSwgMHgxNzZlMCwgMHgxNzZmYywgMHgxNzcwOCwgMHgxNzcxMCwgMHgxNzcxZSwKKyAgMHgxNzcyMCwgMHgxNzczYywgMHgxNzc0MCwgMHgxNzc3OCwgMHgxNzc5OCwgMHgxNzdiMCwgMHgxNzdiZSwgMHgxNzdkYywgMHgxNzdlMiwgMHgxNzdlNCwgMHgxNzdlOCwgMHgxNzgyMiwKKyAgMHgxNzgyNCwgMHgxNzgyOCwgMHgxNzgzNiwgMHgxNzg0MiwgMHgxNzg0NCwgMHgxNzg0OCwgMHgxNzg1MCwgMHgxNzg1ZSwgMHgxNzg2NiwgMHgxNzg2YywgMHgxNzg4MiwgMHgxNzg4NCwKKyAgMHgxNzg4OCwgMHgxNzg5MCwgMHgxNzg5ZSwgMHgxNzhhMCwgMHgxNzhiYywgMHgxNzhjNiwgMHgxNzhjYywgMHgxNzhkOCwgMHgxNzhlZSwgMHgxNzhmMiwgMHgxNzhmNCwgMHgxNzkwMiwKKyAgMHgxNzkwNCwgMHgxNzkwOCwgMHgxNzkxMCwgMHgxNzkxZSwgMHgxNzkyMCwgMHgxNzkzYywgMHgxNzk0MCwgMHgxNzk3OCwgMHgxNzk4NiwgMHgxNzk4YywgMHgxNzk5OCwgMHgxNzliMCwKKyAgMHgxNzliZSwgMHgxNzljZSwgMHgxNzlkYywgMHgxNzllMiwgMHgxNzllNCwgMHgxNzllOCwgMHgxNzlmNiwgMHgxN2EwNCwgMHgxN2EwOCwgMHgxN2ExMCwgMHgxN2ExZSwgMHgxN2EyMCwKKyAgMHgxN2EzYywgMHgxN2E0MCwgMHgxN2E3OCwgMHgxN2FmMCwgMHgxN2IwNiwgMHgxN2IwYywgMHgxN2IxOCwgMHgxN2IzMCwgMHgxN2IzZSwgMHgxN2I2MCwgMHgxN2I3YywgMHgxN2I4ZSwKKyAgMHgxN2I5YywgMHgxN2JiOCwgMHgxN2JjNCwgMHgxN2JjOCwgMHgxN2JkMCwgMHgxN2JkZSwgMHgxN2JlNiwgMHgxN2JlYywgMHgxN2MyZSwgMHgxN2MzMiwgMHgxN2MzNCwgMHgxN2M0ZSwKKyAgMHgxN2M1YywgMHgxN2M2MiwgMHgxN2M2NCwgMHgxN2M2OCwgMHgxN2M3NiwgMHgxN2M4ZSwgMHgxN2M5YywgMHgxN2NiOCwgMHgxN2NjMiwgMHgxN2NjNCwgMHgxN2NjOCwgMHgxN2NkMCwKKyAgMHgxN2NkZSwgMHgxN2NlNiwgMHgxN2NlYywgMHgxN2QwZSwgMHgxN2QxYywgMHgxN2QzOCwgMHgxN2Q3MCwgMHgxN2Q4MiwgMHgxN2Q4NCwgMHgxN2Q4OCwgMHgxN2Q5MCwgMHgxN2Q5ZSwKKyAgMHgxN2RhMCwgMHgxN2RiYywgMHgxN2RjNiwgMHgxN2RjYywgMHgxN2RkOCwgMHgxN2RlZSwgMHgxN2UyNiwgMHgxN2UyYywgMHgxN2UzYSwgMHgxN2U0NiwgMHgxN2U0YywgMHgxN2U1OCwKKyAgMHgxN2U2ZSwgMHgxN2U3MiwgMHgxN2U3NCwgMHgxN2U4NiwgMHgxN2U4YywgMHgxN2U5OCwgMHgxN2ViMCwgMHgxN2VjZSwgMHgxN2VkYywgMHgxN2VlMiwgMHgxN2VlNCwgMHgxN2VlOCwKKyAgMHgxN2VmNiwgMHgxODEzYSwgMHgxODE3MiwgMHgxODE3NCwgMHgxODIxNiwgMHgxODIyNiwgMHgxODIzYSwgMHgxODI0YywgMHgxODI1OCwgMHgxODI2ZSwgMHgxODI3MiwgMHgxODI3NCwKKyAgMHgxODI5OCwgMHgxODJiZSwgMHgxODJlMiwgMHgxODJlNCwgMHgxODJlOCwgMHgxODJmNiwgMHgxODM1ZSwgMHgxODM3YSwgMHgxODNhZSwgMHgxODNkNiwgMHgxODQxNiwgMHgxODQyNiwKKyAgMHgxODQyYywgMHgxODQzYSwgMHgxODQ0NiwgMHgxODQ1OCwgMHgxODQ2ZSwgMHgxODQ3MiwgMHgxODQ3NCwgMHgxODQ4NiwgMHgxODRiMCwgMHgxODRiZSwgMHgxODRjZSwgMHgxODRkYywKKyAgMHgxODRlMiwgMHgxODRlNCwgMHgxODRlOCwgMHgxODRmNiwgMHgxODUwNiwgMHgxODUwYywgMHgxODUxOCwgMHgxODUzMCwgMHgxODUzZSwgMHgxODU2MCwgMHgxODU3YywgMHgxODU4ZSwKKyAgMHgxODU5YywgMHgxODViOCwgMHgxODVjMiwgMHgxODVjNCwgMHgxODVjOCwgMHgxODVkMCwgMHgxODVkZSwgMHgxODVlNiwgMHgxODVlYywgMHgxODVmYSwgMHgxODYxMiwgMHgxODYxNCwKKyAgMHgxODYyMiwgMHgxODYyOCwgMHgxODYzNiwgMHgxODY0MiwgMHgxODY1MCwgMHgxODY1ZSwgMHgxODY3YSwgMHgxODY4MiwgMHgxODY4NCwgMHgxODY4OCwgMHgxODY5MCwgMHgxODY5ZSwKKyAgMHgxODZhMCwgMHgxODZiYywgMHgxODZjNiwgMHgxODZjYywgMHgxODZkOCwgMHgxODZlZSwgMHgxODZmMiwgMHgxODZmNCwgMHgxODcyZSwgMHgxODc0ZSwgMHgxODc1YywgMHgxODc5NiwKKyAgMHgxODdhNiwgMHgxODdhYywgMHgxODdkMiwgMHgxODdkNCwgMHgxODgyNiwgMHgxODgyYywgMHgxODgzYSwgMHgxODg0NiwgMHgxODg0YywgMHgxODg1OCwgMHgxODg2ZSwgMHgxODg3MiwKKyAgMHgxODg3NCwgMHgxODg4NiwgMHgxODg5OCwgMHgxODhiMCwgMHgxODhiZSwgMHgxODhjZSwgMHgxODhkYywgMHgxODhlMiwgMHgxODhlNCwgMHgxODhlOCwgMHgxODhmNiwgMHgxODkwYywKKyAgMHgxODkzMCwgMHgxODkzZSwgMHgxODk2MCwgMHgxODk3YywgMHgxODk4ZSwgMHgxODliOCwgMHgxODljMiwgMHgxODljOCwgMHgxODlkMCwgMHgxODlkZSwgMHgxODllNiwgMHgxODllYywKKyAgMHgxODlmYSwgMHgxOGExOCwgMHgxOGEzMCwgMHgxOGEzZSwgMHgxOGE2MCwgMHgxOGE3YywgMHgxOGFjMCwgMHgxOGFmOCwgMHgxOGIxYywgMHgxOGIzOCwgMHgxOGI3MCwgMHgxOGI3ZSwKKyAgMHgxOGI4MiwgMHgxOGI4NCwgMHgxOGI4OCwgMHgxOGI5MCwgMHgxOGI5ZSwgMHgxOGJhMCwgMHgxOGJiYywgMHgxOGJjNiwgMHgxOGJjYywgMHgxOGJkOCwgMHgxOGJlZSwgMHgxOGJmMiwKKyAgMHgxOGJmNCwgMHgxOGMyMiwgMHgxOGMyNCwgMHgxOGMyOCwgMHgxOGMzNiwgMHgxOGM0MiwgMHgxOGM0OCwgMHgxOGM1MCwgMHgxOGM1ZSwgMHgxOGM2NiwgMHgxOGM3YSwgMHgxOGM4MiwKKyAgMHgxOGM4NCwgMHgxOGM5MCwgMHgxOGM5ZSwgMHgxOGNhMCwgMHgxOGNiYywgMHgxOGNjYywgMHgxOGNmMiwgMHgxOGNmNCwgMHgxOGQwNCwgMHgxOGQwOCwgMHgxOGQxMCwgMHgxOGQxZSwKKyAgMHgxOGQyMCwgMHgxOGQzYywgMHgxOGQ0MCwgMHgxOGQ3OCwgMHgxOGQ4NiwgMHgxOGQ5OCwgMHgxOGRjZSwgMHgxOGRlMiwgMHgxOGRlNCwgMHgxOGRlOCwgMHgxOGUyZSwgMHgxOGUzMiwKKyAgMHgxOGUzNCwgMHgxOGU0ZSwgMHgxOGU1YywgMHgxOGU2MiwgMHgxOGU2NCwgMHgxOGU2OCwgMHgxOGU4ZSwgMHgxOGU5YywgMHgxOGViOCwgMHgxOGVjMiwgMHgxOGVjNCwgMHgxOGVjOCwKKyAgMHgxOGVkMCwgMHgxOGVmYSwgMHgxOGYxNiwgMHgxOGYyNiwgMHgxOGYyYywgMHgxOGY0NiwgMHgxOGY0YywgMHgxOGY1OCwgMHgxOGY2ZSwgMHgxOGY4YSwgMHgxOGY5MiwgMHgxOGY5NCwKKyAgMHgxOGZhMiwgMHgxOGZhNCwgMHgxOGZhOCwgMHgxOGZiNiwgMHgxOTAyYywgMHgxOTAzYSwgMHgxOTA0NiwgMHgxOTA0YywgMHgxOTA1OCwgMHgxOTA3MiwgMHgxOTA3NCwgMHgxOTA4NiwKKyAgMHgxOTA5OCwgMHgxOTBiMCwgMHgxOTBiZSwgMHgxOTBjZSwgMHgxOTBkYywgMHgxOTBlMiwgMHgxOTBlOCwgMHgxOTBmNiwgMHgxOTEwNiwgMHgxOTEwYywgMHgxOTEzMCwgMHgxOTEzZSwKKyAgMHgxOTE2MCwgMHgxOTE3YywgMHgxOTE4ZSwgMHgxOTE5YywgMHgxOTFiOCwgMHgxOTFjMiwgMHgxOTFjOCwgMHgxOTFkMCwgMHgxOTFkZSwgMHgxOTFlNiwgMHgxOTFlYywgMHgxOTFmYSwKKyAgMHgxOTIxOCwgMHgxOTIzZSwgMHgxOTI2MCwgMHgxOTI3YywgMHgxOTJjMCwgMHgxOTJmOCwgMHgxOTMzOCwgMHgxOTM3MCwgMHgxOTM3ZSwgMHgxOTM4MiwgMHgxOTM4NCwgMHgxOTM5MCwKKyAgMHgxOTM5ZSwgMHgxOTNhMCwgMHgxOTNiYywgMHgxOTNjNiwgMHgxOTNjYywgMHgxOTNkOCwgMHgxOTNlZSwgMHgxOTNmMiwgMHgxOTNmNCwgMHgxOTQzMCwgMHgxOTQzZSwgMHgxOTQ2MCwKKyAgMHgxOTQ3YywgMHgxOTRjMCwgMHgxOTRmOCwgMHgxOTVmMCwgMHgxOTYzOCwgMHgxOTY3MCwgMHgxOTY3ZSwgMHgxOTZlMCwgMHgxOTZmYywgMHgxOTcwMiwgMHgxOTcwNCwgMHgxOTcwOCwKKyAgMHgxOTcxMCwgMHgxOTcyMCwgMHgxOTczYywgMHgxOTc0MCwgMHgxOTc3OCwgMHgxOTc4NiwgMHgxOTc4YywgMHgxOTc5OCwgMHgxOTdiMCwgMHgxOTdiZSwgMHgxOTdjZSwgMHgxOTdkYywKKyAgMHgxOTdlMiwgMHgxOTdlNCwgMHgxOTdlOCwgMHgxOTgyMiwgMHgxOTgyNCwgMHgxOTg0MiwgMHgxOTg0OCwgMHgxOTg1MCwgMHgxOTg1ZSwgMHgxOTg2NiwgMHgxOTg3YSwgMHgxOTg4MiwKKyAgMHgxOTg4NCwgMHgxOTg5MCwgMHgxOTg5ZSwgMHgxOThhMCwgMHgxOThiYywgMHgxOThjYywgMHgxOThmMiwgMHgxOThmNCwgMHgxOTkwMiwgMHgxOTkwOCwgMHgxOTkxZSwgMHgxOTkyMCwKKyAgMHgxOTkzYywgMHgxOTk0MCwgMHgxOTk3OCwgMHgxOTk4NiwgMHgxOTk5OCwgMHgxOTljZSwgMHgxOTllMiwgMHgxOTllNCwgMHgxOTllOCwgMHgxOWEwOCwgMHgxOWExMCwgMHgxOWExZSwKKyAgMHgxOWEyMCwgMHgxOWEzYywgMHgxOWE0MCwgMHgxOWE3OCwgMHgxOWFmMCwgMHgxOWIxOCwgMHgxOWIzZSwgMHgxOWI2MCwgMHgxOWI5YywgMHgxOWJjMiwgMHgxOWJjNCwgMHgxOWJjOCwKKyAgMHgxOWJkMCwgMHgxOWJlNiwgMHgxOWMyZSwgMHgxOWMzNCwgMHgxOWM0ZSwgMHgxOWM1YywgMHgxOWM2MiwgMHgxOWM2NCwgMHgxOWM2OCwgMHgxOWM4ZSwgMHgxOWM5YywgMHgxOWNiOCwKKyAgMHgxOWNjMiwgMHgxOWNjOCwgMHgxOWNkMCwgMHgxOWNlNiwgMHgxOWNmYSwgMHgxOWQwZSwgMHgxOWQxYywgMHgxOWQzOCwgMHgxOWQ3MCwgMHgxOWQ3ZSwgMHgxOWQ4MiwgMHgxOWQ4NCwKKyAgMHgxOWQ4OCwgMHgxOWQ5MCwgMHgxOWRhMCwgMHgxOWRjYywgMHgxOWRmMiwgMHgxOWRmNCwgMHgxOWUxNiwgMHgxOWUyNiwgMHgxOWUyYywgMHgxOWU0NiwgMHgxOWU0YywgMHgxOWU1OCwKKyAgMHgxOWU3NCwgMHgxOWU4NiwgMHgxOWU4YywgMHgxOWU5OCwgMHgxOWViMCwgMHgxOWViZSwgMHgxOWVjZSwgMHgxOWVlMiwgMHgxOWVlNCwgMHgxOWVlOCwgMHgxOWYwYSwgMHgxOWYxMiwKKyAgMHgxOWYxNCwgMHgxOWYyMiwgMHgxOWYyNCwgMHgxOWYyOCwgMHgxOWY0MiwgMHgxOWY0NCwgMHgxOWY0OCwgMHgxOWY1MCwgMHgxOWY1ZSwgMHgxOWY2YywgMHgxOWY5YSwgMHgxOWZhZSwKKyAgMHgxOWZiMiwgMHgxOWZiNCwgMHgxYTA0NiwgMHgxYTA0YywgMHgxYTA3MiwgMHgxYTA3NCwgMHgxYTA4NiwgMHgxYTA4YywgMHgxYTA5OCwgMHgxYTBiMCwgMHgxYTBiZSwgMHgxYTBlMiwKKyAgMHgxYTBlNCwgMHgxYTBlOCwgMHgxYTBmNiwgMHgxYTEwNiwgMHgxYTEwYywgMHgxYTExOCwgMHgxYTEzMCwgMHgxYTEzZSwgMHgxYTE2MCwgMHgxYTE3YywgMHgxYTE4ZSwgMHgxYTE5YywKKyAgMHgxYTFiOCwgMHgxYTFjMiwgMHgxYTFjNCwgMHgxYTFjOCwgMHgxYTFkMCwgMHgxYTFkZSwgMHgxYTFlNiwgMHgxYTFlYywgMHgxYTIxOCwgMHgxYTIzMCwgMHgxYTIzZSwgMHgxYTI2MCwKKyAgMHgxYTI3YywgMHgxYTJjMCwgMHgxYTJmOCwgMHgxYTMxYywgMHgxYTMzOCwgMHgxYTM3MCwgMHgxYTM3ZSwgMHgxYTM4MiwgMHgxYTM4NCwgMHgxYTM4OCwgMHgxYTM5MCwgMHgxYTM5ZSwKKyAgMHgxYTNhMCwgMHgxYTNiYywgMHgxYTNjNiwgMHgxYTNjYywgMHgxYTNkOCwgMHgxYTNlZSwgMHgxYTNmMiwgMHgxYTNmNCwgMHgxYTQxOCwgMHgxYTQzMCwgMHgxYTQzZSwgMHgxYTQ2MCwKKyAgMHgxYTQ3YywgMHgxYTRjMCwgMHgxYTRmOCwgMHgxYTVmMCwgMHgxYTYxYywgMHgxYTYzOCwgMHgxYTY3MCwgMHgxYTY3ZSwgMHgxYTZlMCwgMHgxYTZmYywgMHgxYTcwMiwgMHgxYTcwNCwKKyAgMHgxYTcwOCwgMHgxYTcxMCwgMHgxYTcxZSwgMHgxYTcyMCwgMHgxYTczYywgMHgxYTc0MCwgMHgxYTc3OCwgMHgxYTc4NiwgMHgxYTc4YywgMHgxYTc5OCwgMHgxYTdiMCwgMHgxYTdiZSwKKyAgMHgxYTdjZSwgMHgxYTdkYywgMHgxYTdlMiwgMHgxYTdlNCwgMHgxYTdlOCwgMHgxYTgzMCwgMHgxYTg2MCwgMHgxYTg3YywgMHgxYThjMCwgMHgxYThmOCwgMHgxYTlmMCwgMHgxYWJlMCwKKyAgMHgxYWM3MCwgMHgxYWM3ZSwgMHgxYWNlMCwgMHgxYWNmYywgMHgxYWRjMCwgMHgxYWRmOCwgMHgxYWUwNCwgMHgxYWUwOCwgMHgxYWUxMCwgMHgxYWUyMCwgMHgxYWUzYywgMHgxYWU0MCwKKyAgMHgxYWU3OCwgMHgxYWVmMCwgMHgxYWYwNiwgMHgxYWYwYywgMHgxYWYxOCwgMHgxYWYzMCwgMHgxYWYzZSwgMHgxYWY2MCwgMHgxYWY3YywgMHgxYWY4ZSwgMHgxYWY5YywgMHgxYWZiOCwKKyAgMHgxYWZjNCwgMHgxYWZjOCwgMHgxYWZkMCwgMHgxYWZkZSwgMHgxYjA0MiwgMHgxYjA1ZSwgMHgxYjA3YSwgMHgxYjA4MiwgMHgxYjA4NCwgMHgxYjA4OCwgMHgxYjA5MCwgMHgxYjA5ZSwKKyAgMHgxYjBhMCwgMHgxYjBiYywgMHgxYjBjYywgMHgxYjBmMiwgMHgxYjBmNCwgMHgxYjEwMiwgMHgxYjEwNCwgMHgxYjEwOCwgMHgxYjExMCwgMHgxYjExZSwgMHgxYjEyMCwgMHgxYjEzYywKKyAgMHgxYjE0MCwgMHgxYjE3OCwgMHgxYjE4NiwgMHgxYjE5OCwgMHgxYjFjZSwgMHgxYjFlMiwgMHgxYjFlNCwgMHgxYjFlOCwgMHgxYjIwNCwgMHgxYjIwOCwgMHgxYjIxMCwgMHgxYjIxZSwKKyAgMHgxYjIyMCwgMHgxYjIzYywgMHgxYjI0MCwgMHgxYjI3OCwgMHgxYjJmMCwgMHgxYjMwYywgMHgxYjMzZSwgMHgxYjM2MCwgMHgxYjM5YywgMHgxYjNjMiwgMHgxYjNjNCwgMHgxYjNjOCwKKyAgMHgxYjNkMCwgMHgxYjNlNiwgMHgxYjQxMCwgMHgxYjQxZSwgMHgxYjQyMCwgMHgxYjQzYywgMHgxYjQ0MCwgMHgxYjQ3OCwgMHgxYjRmMCwgMHgxYjVlMCwgMHgxYjYxOCwgMHgxYjY2MCwKKyAgMHgxYjY3YywgMHgxYjZjMCwgMHgxYjczOCwgMHgxYjc4MiwgMHgxYjc4NCwgMHgxYjc4OCwgMHgxYjc5MCwgMHgxYjc5ZSwgMHgxYjdhMCwgMHgxYjdjYywgMHgxYjgyZSwgMHgxYjg0ZSwKKyAgMHgxYjg1YywgMHgxYjg4ZSwgMHgxYjg5YywgMHgxYjhiOCwgMHgxYjhjMiwgMHgxYjhjNCwgMHgxYjhjOCwgMHgxYjhkMCwgMHgxYjhlNiwgMHgxYjhmYSwgMHgxYjkwZSwgMHgxYjkxYywKKyAgMHgxYjkzOCwgMHgxYjk3MCwgMHgxYjk3ZSwgMHgxYjk4MiwgMHgxYjk4NCwgMHgxYjk4OCwgMHgxYjk5MCwgMHgxYjk5ZSwgMHgxYjlhMCwgMHgxYjljYywgMHgxYjlmMiwgMHgxYjlmNCwKKyAgMHgxYmEwZSwgMHgxYmExYywgMHgxYmEzOCwgMHgxYmE3MCwgMHgxYmE3ZSwgMHgxYmFlMCwgMHgxYmFmYywgMHgxYmIwOCwgMHgxYmIxMCwgMHgxYmIyMCwgMHgxYmIzYywgMHgxYmI0MCwKKyAgMHgxYmI5OCwgMHgxYmJjZSwgMHgxYmJlMiwgMHgxYmJlNCwgMHgxYmJlOCwgMHgxYmMxNiwgMHgxYmMyNiwgMHgxYmMyYywgMHgxYmM0NiwgMHgxYmM0YywgMHgxYmM1OCwgMHgxYmM3MiwKKyAgMHgxYmM3NCwgMHgxYmM4NiwgMHgxYmM4YywgMHgxYmM5OCwgMHgxYmNiMCwgMHgxYmNiZSwgMHgxYmNjZSwgMHgxYmNlMiwgMHgxYmNlNCwgMHgxYmNlOCwgMHgxYmQwNiwgMHgxYmQwYywKKyAgMHgxYmQxOCwgMHgxYmQzMCwgMHgxYmQzZSwgMHgxYmQ2MCwgMHgxYmQ3YywgMHgxYmQ5YywgMHgxYmRjMiwgMHgxYmRjNCwgMHgxYmRjOCwgMHgxYmRkMCwgMHgxYmRlNiwgMHgxYmRmYSwKKyAgMHgxYmUxMiwgMHgxYmUxNCwgMHgxYmUyMiwgMHgxYmUyNCwgMHgxYmUyOCwgMHgxYmU0MiwgMHgxYmU0NCwgMHgxYmU0OCwgMHgxYmU1MCwgMHgxYmU1ZSwgMHgxYmU2NiwgMHgxYmU4MiwKKyAgMHgxYmU4NCwgMHgxYmU4OCwgMHgxYmU5MCwgMHgxYmU5ZSwgMHgxYmVhMCwgMHgxYmViYywgMHgxYmVjYywgMHgxYmVmNCwgMHgxYmYxYSwgMHgxYmYyZSwgMHgxYmYzMiwgMHgxYmYzNCwKKyAgMHgxYmY0ZSwgMHgxYmY1YywgMHgxYmY2MiwgMHgxYmY2NCwgMHgxYmY2OCwgMHgxYzA5YSwgMHgxYzBiMiwgMHgxYzBiNCwgMHgxYzExYSwgMHgxYzEzMiwgMHgxYzEzNCwgMHgxYzE2MiwKKyAgMHgxYzE2NCwgMHgxYzE2OCwgMHgxYzE3NiwgMHgxYzFiYSwgMHgxYzIxYSwgMHgxYzIzMiwgMHgxYzIzNCwgMHgxYzI0ZSwgMHgxYzI1YywgMHgxYzI2MiwgMHgxYzI2NCwgMHgxYzI2OCwKKyAgMHgxYzI3NiwgMHgxYzI4ZSwgMHgxYzJjMiwgMHgxYzJjNCwgMHgxYzJjOCwgMHgxYzJkMCwgMHgxYzJkZSwgMHgxYzJlNiwgMHgxYzJlYywgMHgxYzJmYSwgMHgxYzMxNiwgMHgxYzMyNiwKKyAgMHgxYzMzYSwgMHgxYzM0NiwgMHgxYzM0YywgMHgxYzM3MiwgMHgxYzM3NCwgMHgxYzQxYSwgMHgxYzQyZSwgMHgxYzQzMiwgMHgxYzQzNCwgMHgxYzQ0ZSwgMHgxYzQ1YywgMHgxYzQ2MiwKKyAgMHgxYzQ2NCwgMHgxYzQ2OCwgMHgxYzQ3NiwgMHgxYzQ4ZSwgMHgxYzQ5YywgMHgxYzRiOCwgMHgxYzRjMiwgMHgxYzRjOCwgMHgxYzRkMCwgMHgxYzRkZSwgMHgxYzRlNiwgMHgxYzRlYywKKyAgMHgxYzRmYSwgMHgxYzUxYywgMHgxYzUzOCwgMHgxYzU3MCwgMHgxYzU3ZSwgMHgxYzU4MiwgMHgxYzU4NCwgMHgxYzU4OCwgMHgxYzU5MCwgMHgxYzU5ZSwgMHgxYzVhMCwgMHgxYzViYywKKyAgMHgxYzVjNiwgMHgxYzVjYywgMHgxYzVkOCwgMHgxYzVlZSwgMHgxYzVmMiwgMHgxYzVmNCwgMHgxYzYxNiwgMHgxYzYyNiwgMHgxYzYyYywgMHgxYzYzYSwgMHgxYzY0NiwgMHgxYzY0YywKKyAgMHgxYzY1OCwgMHgxYzY2ZSwgMHgxYzY3MiwgMHgxYzY3NCwgMHgxYzY4NiwgMHgxYzY4YywgMHgxYzY5OCwgMHgxYzZiMCwgMHgxYzZiZSwgMHgxYzZjZSwgMHgxYzZkYywgMHgxYzZlMiwKKyAgMHgxYzZlNCwgMHgxYzZlOCwgMHgxYzcxMiwgMHgxYzcxNCwgMHgxYzcyMiwgMHgxYzcyOCwgMHgxYzczNiwgMHgxYzc0MiwgMHgxYzc0NCwgMHgxYzc0OCwgMHgxYzc1MCwgMHgxYzc1ZSwKKyAgMHgxYzc2NiwgMHgxYzc2YywgMHgxYzc3YSwgMHgxYzdhZSwgMHgxYzdkNiwgMHgxYzdlYSwgMHgxYzgxYSwgMHgxYzgyZSwgMHgxYzgzMiwgMHgxYzgzNCwgMHgxYzg0ZSwgMHgxYzg1YywKKyAgMHgxYzg2MiwgMHgxYzg2NCwgMHgxYzg2OCwgMHgxYzg3NiwgMHgxYzg4ZSwgMHgxYzg5YywgMHgxYzhiOCwgMHgxYzhjMiwgMHgxYzhjOCwgMHgxYzhkMCwgMHgxYzhkZSwgMHgxYzhlNiwKKyAgMHgxYzhlYywgMHgxYzhmYSwgMHgxYzkwZSwgMHgxYzkzOCwgMHgxYzk3MCwgMHgxYzk3ZSwgMHgxYzk4MiwgMHgxYzk4NCwgMHgxYzk5MCwgMHgxYzk5ZSwgMHgxYzlhMCwgMHgxYzliYywKKyAgMHgxYzljNiwgMHgxYzljYywgMHgxYzlkOCwgMHgxYzllZSwgMHgxYzlmMiwgMHgxYzlmNCwgMHgxY2EzOCwgMHgxY2E3MCwgMHgxY2E3ZSwgMHgxY2FlMCwgMHgxY2FmYywgMHgxY2IwMiwKKyAgMHgxY2IwNCwgMHgxY2IwOCwgMHgxY2IxMCwgMHgxY2IyMCwgMHgxY2IzYywgMHgxY2I0MCwgMHgxY2I3OCwgMHgxY2I4NiwgMHgxY2I4YywgMHgxY2I5OCwgMHgxY2JiMCwgMHgxY2JiZSwKKyAgMHgxY2JjZSwgMHgxY2JkYywgMHgxY2JlMiwgMHgxY2JlNCwgMHgxY2JlOCwgMHgxY2JmNiwgMHgxY2MxNiwgMHgxY2MyNiwgMHgxY2MyYywgMHgxY2MzYSwgMHgxY2M0NiwgMHgxY2M1OCwKKyAgMHgxY2M3MiwgMHgxY2M3NCwgMHgxY2M4NiwgMHgxY2NiMCwgMHgxY2NiZSwgMHgxY2NjZSwgMHgxY2NlMiwgMHgxY2NlNCwgMHgxY2NlOCwgMHgxY2QwNiwgMHgxY2QwYywgMHgxY2QxOCwKKyAgMHgxY2QzMCwgMHgxY2QzZSwgMHgxY2Q2MCwgMHgxY2Q3YywgMHgxY2Q5YywgMHgxY2RjMiwgMHgxY2RjNCwgMHgxY2RjOCwgMHgxY2RkMCwgMHgxY2RkZSwgMHgxY2RlNiwgMHgxY2RmYSwKKyAgMHgxY2UyMiwgMHgxY2UyOCwgMHgxY2U0MiwgMHgxY2U1MCwgMHgxY2U1ZSwgMHgxY2U2NiwgMHgxY2U3YSwgMHgxY2U4MiwgMHgxY2U4NCwgMHgxY2U4OCwgMHgxY2U5MCwgMHgxY2U5ZSwKKyAgMHgxY2VhMCwgMHgxY2ViYywgMHgxY2VjYywgMHgxY2VmMiwgMHgxY2VmNCwgMHgxY2YyZSwgMHgxY2YzMiwgMHgxY2YzNCwgMHgxY2Y0ZSwgMHgxY2Y1YywgMHgxY2Y2MiwgMHgxY2Y2NCwKKyAgMHgxY2Y2OCwgMHgxY2Y5NiwgMHgxY2ZhNiwgMHgxY2ZhYywgMHgxY2ZjYSwgMHgxY2ZkMiwgMHgxY2ZkNCwgMHgxZDAyZSwgMHgxZDAzMiwgMHgxZDAzNCwgMHgxZDA0ZSwgMHgxZDA1YywKKyAgMHgxZDA2MiwgMHgxZDA2NCwgMHgxZDA2OCwgMHgxZDA3NiwgMHgxZDA4ZSwgMHgxZDA5YywgMHgxZDBiOCwgMHgxZDBjMiwgMHgxZDBjNCwgMHgxZDBjOCwgMHgxZDBkMCwgMHgxZDBkZSwKKyAgMHgxZDBlNiwgMHgxZDBlYywgMHgxZDBmYSwgMHgxZDExYywgMHgxZDEzOCwgMHgxZDE3MCwgMHgxZDE3ZSwgMHgxZDE4MiwgMHgxZDE4NCwgMHgxZDE4OCwgMHgxZDE5MCwgMHgxZDE5ZSwKKyAgMHgxZDFhMCwgMHgxZDFiYywgMHgxZDFjNiwgMHgxZDFjYywgMHgxZDFkOCwgMHgxZDFlZSwgMHgxZDFmMiwgMHgxZDFmNCwgMHgxZDIxYywgMHgxZDIzOCwgMHgxZDI3MCwgMHgxZDI3ZSwKKyAgMHgxZDJlMCwgMHgxZDJmYywgMHgxZDMwMiwgMHgxZDMwNCwgMHgxZDMwOCwgMHgxZDMxMCwgMHgxZDMxZSwgMHgxZDMyMCwgMHgxZDMzYywgMHgxZDM0MCwgMHgxZDM3OCwgMHgxZDM4NiwKKyAgMHgxZDM4YywgMHgxZDM5OCwgMHgxZDNiMCwgMHgxZDNiZSwgMHgxZDNjZSwgMHgxZDNkYywgMHgxZDNlMiwgMHgxZDNlNCwgMHgxZDNlOCwgMHgxZDNmNiwgMHgxZDQ3MCwgMHgxZDQ3ZSwKKyAgMHgxZDRlMCwgMHgxZDRmYywgMHgxZDVjMCwgMHgxZDVmOCwgMHgxZDYwNCwgMHgxZDYwOCwgMHgxZDYxMCwgMHgxZDYyMCwgMHgxZDY0MCwgMHgxZDY3OCwgMHgxZDZmMCwgMHgxZDcwNiwKKyAgMHgxZDcwYywgMHgxZDcxOCwgMHgxZDczMCwgMHgxZDczZSwgMHgxZDc2MCwgMHgxZDc3YywgMHgxZDc4ZSwgMHgxZDc5YywgMHgxZDdiOCwgMHgxZDdjMiwgMHgxZDdjNCwgMHgxZDdjOCwKKyAgMHgxZDdkMCwgMHgxZDdkZSwgMHgxZDdlNiwgMHgxZDdlYywgMHgxZDgyNiwgMHgxZDgyYywgMHgxZDgzYSwgMHgxZDg0NiwgMHgxZDg0YywgMHgxZDg1OCwgMHgxZDg3MiwgMHgxZDg3NCwKKyAgMHgxZDg4NiwgMHgxZDg4YywgMHgxZDg5OCwgMHgxZDhiMCwgMHgxZDhiZSwgMHgxZDhjZSwgMHgxZDhlMiwgMHgxZDhlNCwgMHgxZDhlOCwgMHgxZDhmNiwgMHgxZDkwYywgMHgxZDkxOCwKKyAgMHgxZDkzMCwgMHgxZDkzZSwgMHgxZDk2MCwgMHgxZDk3YywgMHgxZDk5YywgMHgxZDljMiwgMHgxZDljNCwgMHgxZDljOCwgMHgxZDlkMCwgMHgxZDllNiwgMHgxZDlmYSwgMHgxZGEwYywKKyAgMHgxZGExOCwgMHgxZGEzMCwgMHgxZGEzZSwgMHgxZGE2MCwgMHgxZGE3YywgMHgxZGFjMCwgMHgxZGFmOCwgMHgxZGIzOCwgMHgxZGI4MiwgMHgxZGI4NCwgMHgxZGI4OCwgMHgxZGI5MCwKKyAgMHgxZGI5ZSwgMHgxZGJhMCwgMHgxZGJjYywgMHgxZGJmMiwgMHgxZGJmNCwgMHgxZGMyMiwgMHgxZGM0MiwgMHgxZGM0NCwgMHgxZGM0OCwgMHgxZGM1MCwgMHgxZGM1ZSwgMHgxZGM2NiwKKyAgMHgxZGM3YSwgMHgxZGM4MiwgMHgxZGM4NCwgMHgxZGM4OCwgMHgxZGM5MCwgMHgxZGM5ZSwgMHgxZGNhMCwgMHgxZGNiYywgMHgxZGNjYywgMHgxZGNmMiwgMHgxZGNmNCwgMHgxZGQwNCwKKyAgMHgxZGQwOCwgMHgxZGQxMCwgMHgxZGQxZSwgMHgxZGQyMCwgMHgxZGQzYywgMHgxZGQ0MCwgMHgxZGQ3OCwgMHgxZGQ4NiwgMHgxZGQ5OCwgMHgxZGRjZSwgMHgxZGRlMiwgMHgxZGRlNCwKKyAgMHgxZGRlOCwgMHgxZGUyZSwgMHgxZGUzMiwgMHgxZGUzNCwgMHgxZGU0ZSwgMHgxZGU1YywgMHgxZGU2MiwgMHgxZGU2NCwgMHgxZGU2OCwgMHgxZGU4ZSwgMHgxZGU5YywgMHgxZGViOCwKKyAgMHgxZGVjMiwgMHgxZGVjNCwgMHgxZGVjOCwgMHgxZGVkMCwgMHgxZGVlNiwgMHgxZGVmYSwgMHgxZGYxNiwgMHgxZGYyNiwgMHgxZGYyYywgMHgxZGY0NiwgMHgxZGY0YywgMHgxZGY1OCwKKyAgMHgxZGY3MiwgMHgxZGY3NCwgMHgxZGY4YSwgMHgxZGY5MiwgMHgxZGY5NCwgMHgxZGZhMiwgMHgxZGZhNCwgMHgxZGZhOCwgMHgxZTA4YSwgMHgxZTA5MiwgMHgxZTA5NCwgMHgxZTBhMiwKKyAgMHgxZTBhNCwgMHgxZTBhOCwgMHgxZTBiNiwgMHgxZTBkYSwgMHgxZTEwYSwgMHgxZTExMiwgMHgxZTExNCwgMHgxZTEyMiwgMHgxZTEyNCwgMHgxZTEyOCwgMHgxZTEzNiwgMHgxZTE0MiwKKyAgMHgxZTE0NCwgMHgxZTE0OCwgMHgxZTE1MCwgMHgxZTE2NiwgMHgxZTE2YywgMHgxZTE3YSwgMHgxZTE5YSwgMHgxZTFiMiwgMHgxZTFiNCwgMHgxZTIwYSwgMHgxZTIxMiwgMHgxZTIxNCwKKyAgMHgxZTIyMiwgMHgxZTIyNCwgMHgxZTIyOCwgMHgxZTIzNiwgMHgxZTI0MiwgMHgxZTI0OCwgMHgxZTI1MCwgMHgxZTI1ZSwgMHgxZTI2NiwgMHgxZTI2YywgMHgxZTI3YSwgMHgxZTI4MiwKKyAgMHgxZTI4NCwgMHgxZTI4OCwgMHgxZTI5MCwgMHgxZTJhMCwgMHgxZTJiYywgMHgxZTJjNiwgMHgxZTJjYywgMHgxZTJkOCwgMHgxZTJlZSwgMHgxZTJmMiwgMHgxZTJmNCwgMHgxZTMxYSwKKyAgMHgxZTMzMiwgMHgxZTMzNCwgMHgxZTM1YywgMHgxZTM2MiwgMHgxZTM2NCwgMHgxZTM2OCwgMHgxZTNiYSwgMHgxZTQwYSwgMHgxZTQxMiwgMHgxZTQxNCwgMHgxZTQyMiwgMHgxZTQyOCwKKyAgMHgxZTQzNiwgMHgxZTQ0MiwgMHgxZTQ0OCwgMHgxZTQ1MCwgMHgxZTQ1ZSwgMHgxZTQ2NiwgMHgxZTQ2YywgMHgxZTQ3YSwgMHgxZTQ4MiwgMHgxZTQ4NCwgMHgxZTQ5MCwgMHgxZTQ5ZSwKKyAgMHgxZTRhMCwgMHgxZTRiYywgMHgxZTRjNiwgMHgxZTRjYywgMHgxZTRkOCwgMHgxZTRlZSwgMHgxZTRmMiwgMHgxZTRmNCwgMHgxZTUwMiwgMHgxZTUwNCwgMHgxZTUwOCwgMHgxZTUxMCwKKyAgMHgxZTUxZSwgMHgxZTUyMCwgMHgxZTUzYywgMHgxZTU0MCwgMHgxZTU3OCwgMHgxZTU4NiwgMHgxZTU4YywgMHgxZTU5OCwgMHgxZTViMCwgMHgxZTViZSwgMHgxZTVjZSwgMHgxZTVkYywKKyAgMHgxZTVlMiwgMHgxZTVlNCwgMHgxZTVlOCwgMHgxZTVmNiwgMHgxZTYxYSwgMHgxZTYyZSwgMHgxZTYzMiwgMHgxZTYzNCwgMHgxZTY0ZSwgMHgxZTY1YywgMHgxZTY2MiwgMHgxZTY2OCwKKyAgMHgxZTY4ZSwgMHgxZTY5YywgMHgxZTZiOCwgMHgxZTZjMiwgMHgxZTZjNCwgMHgxZTZjOCwgMHgxZTZkMCwgMHgxZTZlNiwgMHgxZTZmYSwgMHgxZTcxNiwgMHgxZTcyNiwgMHgxZTcyYywKKyAgMHgxZTczYSwgMHgxZTc0NiwgMHgxZTc0YywgMHgxZTc1OCwgMHgxZTc3MiwgMHgxZTc3NCwgMHgxZTc5MiwgMHgxZTc5NCwgMHgxZTdhMiwgMHgxZTdhNCwgMHgxZTdhOCwgMHgxZTdiNiwKKyAgMHgxZTgxMiwgMHgxZTgxNCwgMHgxZTgyMiwgMHgxZTgyNCwgMHgxZTgyOCwgMHgxZTgzNiwgMHgxZTg0MiwgMHgxZTg0NCwgMHgxZTg0OCwgMHgxZTg1MCwgMHgxZTg1ZSwgMHgxZTg2NiwKKyAgMHgxZTg2YywgMHgxZTg3YSwgMHgxZTg4MiwgMHgxZTg4NCwgMHgxZTg4OCwgMHgxZTg5MCwgMHgxZTg5ZSwgMHgxZThhMCwgMHgxZThiYywgMHgxZThjNiwgMHgxZThjYywgMHgxZThkOCwKKyAgMHgxZThlZSwgMHgxZThmMiwgMHgxZThmNCwgMHgxZTkwMiwgMHgxZTkwNCwgMHgxZTkwOCwgMHgxZTkxMCwgMHgxZTkyMCwgMHgxZTkzYywgMHgxZTk0MCwgMHgxZTk3OCwgMHgxZTk4NiwKKyAgMHgxZTk4YywgMHgxZTk5OCwgMHgxZTliMCwgMHgxZTliZSwgMHgxZTljZSwgMHgxZTlkYywgMHgxZTllMiwgMHgxZTllNCwgMHgxZTllOCwgMHgxZTlmNiwgMHgxZWEwNCwgMHgxZWEwOCwKKyAgMHgxZWExMCwgMHgxZWEyMCwgMHgxZWE0MCwgMHgxZWE3OCwgMHgxZWFmMCwgMHgxZWIwNiwgMHgxZWIwYywgMHgxZWIxOCwgMHgxZWIzMCwgMHgxZWIzZSwgMHgxZWI2MCwgMHgxZWI3YywKKyAgMHgxZWI4ZSwgMHgxZWI5YywgMHgxZWJiOCwgMHgxZWJjMiwgMHgxZWJjNCwgMHgxZWJjOCwgMHgxZWJkMCwgMHgxZWJkZSwgMHgxZWJlNiwgMHgxZWJlYywgMHgxZWMxYSwgMHgxZWMyZSwKKyAgMHgxZWMzMiwgMHgxZWMzNCwgMHgxZWM0ZSwgMHgxZWM1YywgMHgxZWM2MiwgMHgxZWM2NCwgMHgxZWM2OCwgMHgxZWM4ZSwgMHgxZWM5YywgMHgxZWNiOCwgMHgxZWNjMiwgMHgxZWNjNCwKKyAgMHgxZWNjOCwgMHgxZWNkMCwgMHgxZWNlNiwgMHgxZWNmYSwgMHgxZWQwZSwgMHgxZWQxYywgMHgxZWQzOCwgMHgxZWQ3MCwgMHgxZWQ3ZSwgMHgxZWQ4MiwgMHgxZWQ4NCwgMHgxZWQ4OCwKKyAgMHgxZWQ5MCwgMHgxZWQ5ZSwgMHgxZWRhMCwgMHgxZWRjYywgMHgxZWRmMiwgMHgxZWRmNCwgMHgxZWUxNiwgMHgxZWUyNiwgMHgxZWUyYywgMHgxZWUzYSwgMHgxZWU0NiwgMHgxZWU0YywKKyAgMHgxZWU1OCwgMHgxZWU2ZSwgMHgxZWU3MiwgMHgxZWU3NCwgMHgxZWU4NiwgMHgxZWU4YywgMHgxZWU5OCwgMHgxZWViMCwgMHgxZWViZSwgMHgxZWVjZSwgMHgxZWVkYywgMHgxZWVlMiwKKyAgMHgxZWVlNCwgMHgxZWVlOCwgMHgxZWYxMiwgMHgxZWYyMiwgMHgxZWYyNCwgMHgxZWYyOCwgMHgxZWYzNiwgMHgxZWY0MiwgMHgxZWY0NCwgMHgxZWY0OCwgMHgxZWY1MCwgMHgxZWY1ZSwKKyAgMHgxZWY2NiwgMHgxZWY2YywgMHgxZWY3YSwgMHgxZWZhZSwgMHgxZWZiMiwgMHgxZWZiNCwgMHgxZWZkNiwgMHgxZjA5NiwgMHgxZjBhNiwgMHgxZjBhYywgMHgxZjBiYSwgMHgxZjBjYSwKKyAgMHgxZjBkMiwgMHgxZjBkNCwgMHgxZjExNiwgMHgxZjEyNiwgMHgxZjEyYywgMHgxZjEzYSwgMHgxZjE0NiwgMHgxZjE0YywgMHgxZjE1OCwgMHgxZjE2ZSwgMHgxZjE3MiwgMHgxZjE3NCwKKyAgMHgxZjE4YSwgMHgxZjE5MiwgMHgxZjE5NCwgMHgxZjFhMiwgMHgxZjFhNCwgMHgxZjFhOCwgMHgxZjFkYSwgMHgxZjIxNiwgMHgxZjIyNiwgMHgxZjIyYywgMHgxZjIzYSwgMHgxZjI0NiwKKyAgMHgxZjI1OCwgMHgxZjI2ZSwgMHgxZjI3MiwgMHgxZjI3NCwgMHgxZjI4NiwgMHgxZjI4YywgMHgxZjI5OCwgMHgxZjJiMCwgMHgxZjJiZSwgMHgxZjJjZSwgMHgxZjJkYywgMHgxZjJlMiwKKyAgMHgxZjJlNCwgMHgxZjJlOCwgMHgxZjJmNiwgMHgxZjMwYSwgMHgxZjMxMiwgMHgxZjMxNCwgMHgxZjMyMiwgMHgxZjMyOCwgMHgxZjM0MiwgMHgxZjM0NCwgMHgxZjM0OCwgMHgxZjM1MCwKKyAgMHgxZjM1ZSwgMHgxZjM2NiwgMHgxZjM3YSwgMHgxZjM5YSwgMHgxZjNhZSwgMHgxZjNiMiwgMHgxZjNiNCwgMHgxZjQxNiwgMHgxZjQyNiwgMHgxZjQyYywgMHgxZjQzYSwgMHgxZjQ0NiwKKyAgMHgxZjQ0YywgMHgxZjQ1OCwgMHgxZjQ2ZSwgMHgxZjQ3MiwgMHgxZjQ3NCwgMHgxZjQ4NiwgMHgxZjQ4YywgMHgxZjQ5OCwgMHgxZjRiMCwgMHgxZjRiZSwgMHgxZjRjZSwgMHgxZjRkYywKKyAgMHgxZjRlMiwgMHgxZjRlNCwgMHgxZjRlOCwgMHgxZjRmNiwgMHgxZjUwNiwgMHgxZjUwYywgMHgxZjUxOCwgMHgxZjUzMCwgMHgxZjUzZSwgMHgxZjU2MCwgMHgxZjU3YywgMHgxZjU4ZSwKKyAgMHgxZjU5YywgMHgxZjViOCwgMHgxZjVjMiwgMHgxZjVjNCwgMHgxZjVjOCwgMHgxZjVkMCwgMHgxZjVkZSwgMHgxZjVlNiwgMHgxZjVlYywgMHgxZjVmYSwgMHgxZjYwYSwgMHgxZjYxMiwKKyAgMHgxZjYxNCwgMHgxZjYyMiwgMHgxZjYyNCwgMHgxZjYyOCwgMHgxZjYzNiwgMHgxZjY0MiwgMHgxZjY0NCwgMHgxZjY0OCwgMHgxZjY1MCwgMHgxZjY1ZSwgMHgxZjY2NiwgMHgxZjY3YSwKKyAgMHgxZjY4MiwgMHgxZjY4NCwgMHgxZjY4OCwgMHgxZjY5MCwgMHgxZjY5ZSwgMHgxZjZhMCwgMHgxZjZiYywgMHgxZjZjYywgMHgxZjZmMiwgMHgxZjZmNCwgMHgxZjcxYSwgMHgxZjcyZSwKKyAgMHgxZjczMiwgMHgxZjczNCwgMHgxZjc0ZSwgMHgxZjc1YywgMHgxZjc2MiwgMHgxZjc2NCwgMHgxZjc2OCwgMHgxZjc3NiwgMHgxZjc5NiwgMHgxZjdhNiwgMHgxZjdhYywgMHgxZjdiYSwKKyAgMHgxZjdkMiwgMHgxZjdkNCwgMHgxZjg5YSwgMHgxZjhhZSwgMHgxZjhiMiwgMHgxZjhiNCwgMHgxZjhkNiwgMHgxZjhlYSwgMHgxZjkxYSwgMHgxZjkyZSwgMHgxZjkzMiwgMHgxZjkzNCwKKyAgMHgxZjk0ZSwgMHgxZjk1YywgMHgxZjk2MiwgMHgxZjk2NCwgMHgxZjk2OCwgMHgxZjk3NiwgMHgxZjk5NiwgMHgxZjlhNiwgMHgxZjlhYywgMHgxZjliYSwgMHgxZjljYSwgMHgxZjlkMiwKKyAgMHgxZjlkNCwgMHgxZmExYSwgMHgxZmEyZSwgMHgxZmEzMiwgMHgxZmEzNCwgMHgxZmE0ZSwgMHgxZmE1YywgMHgxZmE2MiwgMHgxZmE2NCwgMHgxZmE2OCwgMHgxZmE3NiwgMHgxZmE4ZSwKKyAgMHgxZmE5YywgMHgxZmFiOCwgMHgxZmFjMiwgMHgxZmFjNCwgMHgxZmFjOCwgMHgxZmFkMCwgMHgxZmFkZSwgMHgxZmFlNiwgMHgxZmFlYywgMHgxZmIxNiwgMHgxZmIyNiwgMHgxZmIyYywKKyAgMHgxZmIzYSwgMHgxZmI0NiwgMHgxZmI0YywgMHgxZmI1OCwgMHgxZmI2ZSwgMHgxZmI3MiwgMHgxZmI3NCwgMHgxZmI4YSwgMHgxZmI5MiwgMHgxZmI5NCwgMHgxZmJhMiwgMHgxZmJhNCwKKyAgMHgxZmJhOCwgMHgxZmJiNiwgMHgxZmJkYX07CisKKy8qKgorICogVGhpcyB0YWJsZSBjb250YWlucyB0byBjb2Rld29yZHMgZm9yIGFsbCBzeW1ib2xzLgorICovCitpbnQgWlhQREY0MTdfQ09ERVdPUkRfVEFCTEVbWlhQREY0MTdfQ09ERVdPUkRfVEFCTEVfTEVOXSA9IHsKKyAgMjYyNywgMTgxOSwgMjYyMiwgMjYyMSwgMTgxMywgMTgxMiwgMjcyOSwgMjcyNCwgMjcyMywgMjc3OSwgMjc3NCwgMjc3MywgOTAyLCA4OTYsIDkwOCwgODY4LCA4NjUsIDg2MSwgODU5LCAyNTExLAorICA4NzMsIDg3MSwgMTc4MCwgODM1LCAyNDkzLCA4MjUsIDI0OTEsIDg0MiwgODM3LCA4NDQsIDE3NjQsIDE3NjIsIDgxMSwgODEwLCA4MDksIDI0ODMsIDgwNywgMjQ4MiwgODA2LCAyNDgwLCA4MTUsCisgIDgxNCwgODEzLCA4MTIsIDI0ODQsIDgxNywgODE2LCAxNzQ1LCAxNzQ0LCAxNzQyLCAxNzQ2LCAyNjU1LCAyNjM3LCAyNjM1LCAyNjI2LCAyNjI1LCAyNjIzLCAyNjI4LCAxODIwLCAyNzUyLAorICAyNzM5LCAyNzM3LCAyNzI4LCAyNzI3LCAyNzI1LCAyNzMwLCAyNzg1LCAyNzgzLCAyNzc4LCAyNzc3LCAyNzc1LCAyNzgwLCA3ODcsIDc4MSwgNzQ3LCA3MzksIDczNiwgMjQxMywgNzU0LCA3NTIsCisgIDE3MTksIDY5MiwgNjg5LCA2ODEsIDIzNzEsIDY3OCwgMjM2OSwgNzAwLCA2OTcsIDY5NCwgNzAzLCAxNjg4LCAxNjg2LCA2NDIsIDYzOCwgMjM0MywgNjMxLCAyMzQxLCA2MjcsIDIzMzgsIDY1MSwKKyAgNjQ2LCA2NDMsIDIzNDUsIDY1NCwgNjUyLCAxNjUyLCAxNjUwLCAxNjQ3LCAxNjU0LCA2MDEsIDU5OSwgMjMyMiwgNTk2LCAyMzIxLCA1OTQsIDIzMTksIDIzMTcsIDYxMSwgNjEwLCA2MDgsIDYwNiwKKyAgMjMyNCwgNjAzLCAyMzIzLCA2MTUsIDYxNCwgNjEyLCAxNjE3LCAxNjE2LCAxNjE0LCAxNjEyLCA2MTYsIDE2MTksIDE2MTgsIDI1NzUsIDI1MzgsIDI1MzYsIDkwNSwgOTAxLCA4OTgsIDkwOSwKKyAgMjUwOSwgMjUwNywgMjUwNCwgODcwLCA4NjcsIDg2NCwgODYwLCAyNTEyLCA4NzUsIDg3MiwgMTc4MSwgMjQ5MCwgMjQ4OSwgMjQ4NywgMjQ4NSwgMTc0OCwgODM2LCA4MzQsIDgzMiwgODMwLAorICAyNDk0LCA4MjcsIDI0OTIsIDg0MywgODQxLCA4MzksIDg0NSwgMTc2NSwgMTc2MywgMjcwMSwgMjY3NiwgMjY3NCwgMjY1MywgMjY0OCwgMjY1NiwgMjYzNCwgMjYzMywgMjYzMSwgMjYyOSwKKyAgMTgyMSwgMjYzOCwgMjYzNiwgMjc3MCwgMjc2MywgMjc2MSwgMjc1MCwgMjc0NSwgMjc1MywgMjczNiwgMjczNSwgMjczMywgMjczMSwgMTg0OCwgMjc0MCwgMjczOCwgMjc4NiwgMjc4NCwgNTkxLAorICA1ODgsIDU3NiwgNTY5LCA1NjYsIDIyOTYsIDE1OTAsIDUzNywgNTM0LCA1MjYsIDIyNzYsIDUyMiwgMjI3NCwgNTQ1LCA1NDIsIDUzOSwgNTQ4LCAxNTcyLCAxNTcwLCA0ODEsIDIyNDUsIDQ2NiwKKyAgMjI0MiwgNDYyLCAyMjM5LCA0OTIsIDQ4NSwgNDgyLCAyMjQ5LCA0OTYsIDQ5NCwgMTUzNCwgMTUzMSwgMTUyOCwgMTUzOCwgNDEzLCAyMTk2LCA0MDYsIDIxOTEsIDIxODgsIDQyNSwgNDE5LAorICAyMjAyLCA0MTUsIDIxOTksIDQzMiwgNDMwLCA0MjcsIDE0NzIsIDE0NjcsIDE0NjQsIDQzMywgMTQ3NiwgMTQ3NCwgMzY4LCAzNjcsIDIxNjAsIDM2NSwgMjE1OSwgMzYyLCAyMTU3LCAyMTU1LAorICAyMTUyLCAzNzgsIDM3NywgMzc1LCAyMTY2LCAzNzIsIDIxNjUsIDM2OSwgMjE2MiwgMzgzLCAzODEsIDM3OSwgMjE2OCwgMTQxOSwgMTQxOCwgMTQxNiwgMTQxNCwgMzg1LCAxNDExLCAzODQsCisgIDE0MjMsIDE0MjIsIDE0MjAsIDE0MjQsIDI0NjEsIDgwMiwgMjQ0MSwgMjQzOSwgNzkwLCA3ODYsIDc4MywgNzk0LCAyNDA5LCAyNDA2LCAyNDAzLCA3NTAsIDc0MiwgNzM4LCAyNDE0LCA3NTYsCisgIDc1MywgMTcyMCwgMjM2NywgMjM2NSwgMjM2MiwgMjM1OSwgMTY2MywgNjkzLCA2OTEsIDY4NCwgMjM3MywgNjgwLCAyMzcwLCA3MDIsIDY5OSwgNjk2LCA3MDQsIDE2OTAsIDE2ODcsIDIzMzcsCisgIDIzMzYsIDIzMzQsIDIzMzIsIDE2MjQsIDIzMjksIDE2MjIsIDY0MCwgNjM3LCAyMzQ0LCA2MzQsIDIzNDIsIDYzMCwgMjM0MCwgNjUwLCA2NDgsIDY0NSwgMjM0NiwgNjU1LCA2NTMsIDE2NTMsCisgIDE2NTEsIDE2NDksIDE2NTUsIDI2MTIsIDI1OTcsIDI1OTUsIDI1NzEsIDI1NjgsIDI1NjUsIDI1NzYsIDI1MzQsIDI1MjksIDI1MjYsIDE3ODcsIDI1NDAsIDI1MzcsIDkwNywgOTA0LCA5MDAsCisgIDkxMCwgMjUwMywgMjUwMiwgMjUwMCwgMjQ5OCwgMTc2OCwgMjQ5NSwgMTc2NywgMjUxMCwgMjUwOCwgMjUwNiwgODY5LCA4NjYsIDg2MywgMjUxMywgODc2LCA4NzQsIDE3ODIsIDI3MjAsIDI3MTMsCisgIDI3MTEsIDI2OTcsIDI2OTQsIDI2OTEsIDI3MDIsIDI2NzIsIDI2NzAsIDI2NjQsIDE4MjgsIDI2NzgsIDI2NzUsIDI2NDcsIDI2NDYsIDI2NDQsIDI2NDIsIDE4MjMsIDI2MzksIDE4MjIsIDI2NTQsCisgIDI2NTIsIDI2NTAsIDI2NTcsIDI3NzEsIDE4NTUsIDI3NjUsIDI3NjIsIDE4NTAsIDE4NDksIDI3NTEsIDI3NDksIDI3NDcsIDI3NTQsIDM1MywgMjE0OCwgMzQ0LCAzNDIsIDMzNiwgMjE0MiwKKyAgMzMyLCAyMTQwLCAzNDUsIDEzNzUsIDEzNzMsIDMwNiwgMjEzMCwgMjk5LCAyMTI4LCAyOTUsIDIxMjUsIDMxOSwgMzE0LCAzMTEsIDIxMzIsIDEzNTQsIDEzNTIsIDEzNDksIDEzNTYsIDI2MiwKKyAgMjU3LCAyMTAxLCAyNTMsIDIwOTYsIDIwOTMsIDI3NCwgMjczLCAyNjcsIDIxMDcsIDI2MywgMjEwNCwgMjgwLCAyNzgsIDI3NSwgMTMxNiwgMTMxMSwgMTMwOCwgMTMyMCwgMTMxOCwgMjA1MiwKKyAgMjAyLCAyMDUwLCAyMDQ0LCAyMDQwLCAyMTksIDIwNjMsIDIxMiwgMjA2MCwgMjA4LCAyMDU1LCAyMjQsIDIyMSwgMjA2NiwgMTI2MCwgMTI1OCwgMTI1MiwgMjMxLCAxMjQ4LCAyMjksIDEyNjYsCisgIDEyNjQsIDEyNjEsIDEyNjgsIDE1NSwgMTk5OCwgMTUzLCAxOTk2LCAxOTk0LCAxOTkxLCAxOTg4LCAxNjUsIDE2NCwgMjAwNywgMTYyLCAyMDA2LCAxNTksIDIwMDMsIDIwMDAsIDE3MiwgMTcxLAorICAxNjksIDIwMTIsIDE2NiwgMjAxMCwgMTE4NiwgMTE4NCwgMTE4MiwgMTE3OSwgMTc1LCAxMTc2LCAxNzMsIDExOTIsIDExOTEsIDExODksIDExODcsIDE3NiwgMTE5NCwgMTE5MywgMjMxMywKKyAgMjMwNywgMjMwNSwgNTkyLCA1ODksIDIyOTQsIDIyOTIsIDIyODksIDU3OCwgNTcyLCA1NjgsIDIyOTcsIDU4MCwgMTU5MSwgMjI3MiwgMjI2NywgMjI2NCwgMTU0NywgNTM4LCA1MzYsIDUyOSwKKyAgMjI3OCwgNTI1LCAyMjc1LCA1NDcsIDU0NCwgNTQxLCAxNTc0LCAxNTcxLCAyMjM3LCAyMjM1LCAyMjI5LCAxNDkzLCAyMjI1LCAxNDg5LCA0NzgsIDIyNDcsIDQ3MCwgMjI0NCwgNDY1LCAyMjQxLAorICA0OTMsIDQ4OCwgNDg0LCAyMjUwLCA0OTgsIDQ5NSwgMTUzNiwgMTUzMywgMTUzMCwgMTUzOSwgMjE4NywgMjE4NiwgMjE4NCwgMjE4MiwgMTQzMiwgMjE3OSwgMTQzMCwgMjE3NiwgMTQyNywgNDE0LAorICA0MTIsIDIxOTcsIDQwOSwgMjE5NSwgNDA1LCAyMTkzLCAyMTkwLCA0MjYsIDQyNCwgNDIxLCAyMjAzLCA0MTgsIDIyMDEsIDQzMSwgNDI5LCAxNDczLCAxNDcxLCAxNDY5LCAxNDY2LCA0MzQsCisgIDE0NzcsIDE0NzUsIDI0NzgsIDI0NzIsIDI0NzAsIDI0NTksIDI0NTcsIDI0NTQsIDI0NjIsIDgwMywgMjQzNywgMjQzMiwgMjQyOSwgMTcyNiwgMjQ0MywgMjQ0MCwgNzkyLCA3ODksIDc4NSwKKyAgMjQwMSwgMjM5OSwgMjM5MywgMTcwMiwgMjM4OSwgMTY5OSwgMjQxMSwgMjQwOCwgMjQwNSwgNzQ1LCA3NDEsIDI0MTUsIDc1OCwgNzU1LCAxNzIxLCAyMzU4LCAyMzU3LCAyMzU1LCAyMzUzLAorICAxNjYxLCAyMzUwLCAxNjYwLCAyMzQ3LCAxNjU3LCAyMzY4LCAyMzY2LCAyMzY0LCAyMzYxLCAxNjY2LCA2OTAsIDY4NywgMjM3NCwgNjgzLCAyMzcyLCA3MDEsIDY5OCwgNzA1LCAxNjkxLCAxNjg5LAorICAyNjE5LCAyNjE3LCAyNjEwLCAyNjA4LCAyNjA1LCAyNjEzLCAyNTkzLCAyNTg4LCAyNTg1LCAxODAzLCAyNTk5LCAyNTk2LCAyNTYzLCAyNTYxLCAyNTU1LCAxNzk3LCAyNTUxLCAxNzk1LCAyNTczLAorICAyNTcwLCAyNTY3LCAyNTc3LCAyNTI1LCAyNTI0LCAyNTIyLCAyNTIwLCAxNzg2LCAyNTE3LCAxNzg1LCAyNTE0LCAxNzgzLCAyNTM1LCAyNTMzLCAyNTMxLCAyNTI4LCAxNzg4LCAyNTQxLCAyNTM5LAorICA5MDYsIDkwMywgOTExLCAyNzIxLCAxODQ0LCAyNzE1LCAyNzEyLCAxODM4LCAxODM2LCAyNjk5LCAyNjk2LCAyNjkzLCAyNzAzLCAxODI3LCAxODI2LCAxODI0LCAyNjczLCAyNjcxLCAyNjY5LAorICAyNjY2LCAxODI5LCAyNjc5LCAyNjc3LCAxODU4LCAxODU3LCAyNzcyLCAxODU0LCAxODUzLCAxODUxLCAxODU2LCAyNzY2LCAyNzY0LCAxNDMsIDE5ODcsIDEzOSwgMTk4NiwgMTM1LCAxMzMsCisgIDEzMSwgMTk4NCwgMTI4LCAxOTgzLCAxMjUsIDE5ODEsIDEzOCwgMTM3LCAxMzYsIDE5ODUsIDExMzMsIDExMzIsIDExMzAsIDExMiwgMTEwLCAxOTc0LCAxMDcsIDE5NzMsIDEwNCwgMTk3MSwKKyAgMTk2OSwgMTIyLCAxMjEsIDExOSwgMTE3LCAxOTc3LCAxMTQsIDE5NzYsIDEyNCwgMTExNSwgMTExNCwgMTExMiwgMTExMCwgMTExNywgMTExNiwgODQsIDgzLCAxOTUzLCA4MSwgMTk1MiwgNzgsCisgIDE5NTAsIDE5NDgsIDE5NDUsIDk0LCA5MywgOTEsIDE5NTksIDg4LCAxOTU4LCA4NSwgMTk1NSwgOTksIDk3LCA5NSwgMTk2MSwgMTA4NiwgMTA4NSwgMTA4MywgMTA4MSwgMTA3OCwgMTAwLAorICAxMDkwLCAxMDg5LCAxMDg3LCAxMDkxLCA0OSwgNDcsIDE5MTcsIDQ0LCAxOTE1LCAxOTEzLCAxOTEwLCAxOTA3LCA1OSwgMTkyNiwgNTYsIDE5MjUsIDUzLCAxOTIyLCAxOTE5LCA2NiwgNjQsCisgIDE5MzEsIDYxLCAxOTI5LCAxMDQyLCAxMDQwLCAxMDM4LCA3MSwgMTAzNSwgNzAsIDEwMzIsIDY4LCAxMDQ4LCAxMDQ3LCAxMDQ1LCAxMDQzLCAxMDUwLCAxMDQ5LCAxMiwgMTAsIDE4NjksIDE4NjcsCisgIDE4NjQsIDE4NjEsIDIxLCAxODgwLCAxOSwgMTg3NywgMTg3NCwgMTg3MSwgMjgsIDE4ODgsIDI1LCAxODg2LCAyMiwgMTg4MywgOTgyLCA5ODAsIDk3NywgOTc0LCAzMiwgMzAsIDk5MSwgOTg5LAorICA5ODcsIDk4NCwgMzQsIDk5NSwgOTk0LCA5OTIsIDIxNTEsIDIxNTAsIDIxNDcsIDIxNDYsIDIxNDQsIDM1NiwgMzU1LCAzNTQsIDIxNDksIDIxMzksIDIxMzgsIDIxMzYsIDIxMzQsIDEzNTksCisgIDM0MywgMzQxLCAzMzgsIDIxNDMsIDMzNSwgMjE0MSwgMzQ4LCAzNDcsIDM0NiwgMTM3NiwgMTM3NCwgMjEyNCwgMjEyMywgMjEyMSwgMjExOSwgMTMyNiwgMjExNiwgMTMyNCwgMzEwLCAzMDgsCisgIDMwNSwgMjEzMSwgMzAyLCAyMTI5LCAyOTgsIDIxMjcsIDMyMCwgMzE4LCAzMTYsIDMxMywgMjEzMywgMzIyLCAzMjEsIDEzNTUsIDEzNTMsIDEzNTEsIDEzNTcsIDIwOTIsIDIwOTEsIDIwODksCisgIDIwODcsIDEyNzYsIDIwODQsIDEyNzQsIDIwODEsIDEyNzEsIDI1OSwgMjEwMiwgMjU2LCAyMTAwLCAyNTIsIDIwOTgsIDIwOTUsIDI3MiwgMjY5LCAyMTA4LCAyNjYsIDIxMDYsIDI4MSwgMjc5LAorICAyNzcsIDEzMTcsIDEzMTUsIDEzMTMsIDEzMTAsIDI4MiwgMTMyMSwgMTMxOSwgMjAzOSwgMjAzNywgMjAzNSwgMjAzMiwgMTIwMywgMjAyOSwgMTIwMCwgMTE5NywgMjA3LCAyMDUzLCAyMDUsCisgIDIwNTEsIDIwMSwgMjA0OSwgMjA0NiwgMjA0MywgMjIwLCAyMTgsIDIwNjQsIDIxNSwgMjA2MiwgMjExLCAyMDU5LCAyMjgsIDIyNiwgMjIzLCAyMDY5LCAxMjU5LCAxMjU3LCAxMjU0LCAyMzIsCisgIDEyNTEsIDIzMCwgMTI2NywgMTI2NSwgMTI2MywgMjMxNiwgMjMxNSwgMjMxMiwgMjMxMSwgMjMwOSwgMjMxNCwgMjMwNCwgMjMwMywgMjMwMSwgMjI5OSwgMTU5MywgMjMwOCwgMjMwNiwgNTkwLAorICAyMjg4LCAyMjg3LCAyMjg1LCAyMjgzLCAxNTc4LCAyMjgwLCAxNTc3LCAyMjk1LCAyMjkzLCAyMjkxLCA1NzksIDU3NywgNTc0LCA1NzEsIDIyOTgsIDU4MiwgNTgxLCAxNTkyLCAyMjYzLCAyMjYyLAorICAyMjYwLCAyMjU4LCAxNTQ1LCAyMjU1LCAxNTQ0LCAyMjUyLCAxNTQxLCAyMjczLCAyMjcxLCAyMjY5LCAyMjY2LCAxNTUwLCA1MzUsIDUzMiwgMjI3OSwgNTI4LCAyMjc3LCA1NDYsIDU0MywgNTQ5LAorICAxNTc1LCAxNTczLCAyMjI0LCAyMjIyLCAyMjIwLCAxNDg2LCAyMjE3LCAxNDg1LCAyMjE0LCAxNDgyLCAxNDc5LCAyMjM4LCAyMjM2LCAyMjM0LCAyMjMxLCAxNDk2LCAyMjI4LCAxNDkyLCA0ODAsCisgIDQ3NywgMjI0OCwgNDczLCAyMjQ2LCA0NjksIDIyNDMsIDQ5MCwgNDg3LCAyMjUxLCA0OTcsIDE1MzcsIDE1MzUsIDE1MzIsIDI0NzcsIDI0NzYsIDI0NzQsIDI0NzksIDI0NjksIDI0NjgsIDI0NjYsCisgIDI0NjQsIDE3MzAsIDI0NzMsIDI0NzEsIDI0NTMsIDI0NTIsIDI0NTAsIDI0NDgsIDE3MjksIDI0NDUsIDE3MjgsIDI0NjAsIDI0NTgsIDI0NTYsIDI0NjMsIDgwNSwgODA0LCAyNDI4LCAyNDI3LAorICAyNDI1LCAyNDIzLCAxNzI1LCAyNDIwLCAxNzI0LCAyNDE3LCAxNzIyLCAyNDM4LCAyNDM2LCAyNDM0LCAyNDMxLCAxNzI3LCAyNDQ0LCAyNDQyLCA3OTMsIDc5MSwgNzg4LCA3OTUsIDIzODgsCisgIDIzODYsIDIzODQsIDE2OTcsIDIzODEsIDE2OTYsIDIzNzgsIDE2OTQsIDE2OTIsIDI0MDIsIDI0MDAsIDIzOTgsIDIzOTUsIDE3MDMsIDIzOTIsIDE3MDEsIDI0MTIsIDI0MTAsIDI0MDcsIDc1MSwKKyAgNzQ4LCA3NDQsIDI0MTYsIDc1OSwgNzU3LCAxODA3LCAyNjIwLCAyNjE4LCAxODA2LCAxODA1LCAyNjExLCAyNjA5LCAyNjA3LCAyNjE0LCAxODAyLCAxODAxLCAxNzk5LCAyNTk0LCAyNTkyLAorICAyNTkwLCAyNTg3LCAxODA0LCAyNjAwLCAyNTk4LCAxNzk0LCAxNzkzLCAxNzkxLCAxNzg5LCAyNTY0LCAyNTYyLCAyNTYwLCAyNTU3LCAxNzk4LCAyNTU0LCAxNzk2LCAyNTc0LCAyNTcyLCAyNTY5LAorICAyNTc4LCAxODQ3LCAxODQ2LCAyNzIyLCAxODQzLCAxODQyLCAxODQwLCAxODQ1LCAyNzE2LCAyNzE0LCAxODM1LCAxODM0LCAxODMyLCAxODMwLCAxODM5LCAxODM3LCAyNzAwLCAyNjk4LCAyNjk1LAorICAyNzA0LCAxODE3LCAxODExLCAxODEwLCA4OTcsIDg2MiwgMTc3NywgODI5LCA4MjYsIDgzOCwgMTc2MCwgMTc1OCwgODA4LCAyNDgxLCAxNzQxLCAxNzQwLCAxNzM4LCAxNzQzLCAyNjI0LCAxODE4LAorICAyNzI2LCAyNzc2LCA3ODIsIDc0MCwgNzM3LCAxNzE1LCA2ODYsIDY3OSwgNjk1LCAxNjgyLCAxNjgwLCA2MzksIDYyOCwgMjMzOSwgNjQ3LCA2NDQsIDE2NDUsIDE2NDMsIDE2NDAsIDE2NDgsCisgIDYwMiwgNjAwLCA1OTcsIDU5NSwgMjMyMCwgNTkzLCAyMzE4LCA2MDksIDYwNywgNjA0LCAxNjExLCAxNjEwLCAxNjA4LCAxNjA2LCA2MTMsIDE2MTUsIDE2MTMsIDIzMjgsIDkyNiwgOTI0LCA4OTIsCisgIDg4NiwgODk5LCA4NTcsIDg1MCwgMjUwNSwgMTc3OCwgODI0LCA4MjMsIDgyMSwgODE5LCAyNDg4LCA4MTgsIDI0ODYsIDgzMywgODMxLCA4MjgsIDg0MCwgMTc2MSwgMTc1OSwgMjY0OSwgMjYzMiwKKyAgMjYzMCwgMjc0NiwgMjczNCwgMjczMiwgMjc4MiwgMjc4MSwgNTcwLCA1NjcsIDE1ODcsIDUzMSwgNTI3LCA1MjMsIDU0MCwgMTU2NiwgMTU2NCwgNDc2LCA0NjcsIDQ2MywgMjI0MCwgNDg2LAorICA0ODMsIDE1MjQsIDE1MjEsIDE1MTgsIDE1MjksIDQxMSwgNDAzLCAyMTkyLCAzOTksIDIxODksIDQyMywgNDE2LCAxNDYyLCAxNDU3LCAxNDU0LCA0MjgsIDE0NjgsIDE0NjUsIDIyMTAsIDM2NiwKKyAgMzYzLCAyMTU4LCAzNjAsIDIxNTYsIDM1NywgMjE1MywgMzc2LCAzNzMsIDM3MCwgMjE2MywgMTQxMCwgMTQwOSwgMTQwNywgMTQwNSwgMzgyLCAxNDAyLCAzODAsIDE0MTcsIDE0MTUsIDE0MTIsCisgIDE0MjEsIDIxNzUsIDIxNzQsIDc3NywgNzc0LCA3NzEsIDc4NCwgNzMyLCA3MjUsIDcyMiwgMjQwNCwgNzQzLCAxNzE2LCA2NzYsIDY3NCwgNjY4LCAyMzYzLCA2NjUsIDIzNjAsIDY4NSwgMTY4NCwKKyAgMTY4MSwgNjI2LCA2MjQsIDYyMiwgMjMzNSwgNjIwLCAyMzMzLCA2MTcsIDIzMzAsIDY0MSwgNjM1LCA2NDksIDE2NDYsIDE2NDQsIDE2NDIsIDI1NjYsIDkyOCwgOTI1LCAyNTMwLCAyNTI3LAorICA4OTQsIDg5MSwgODg4LCAyNTAxLCAyNDk5LCAyNDk2LCA4NTgsIDg1NiwgODU0LCA4NTEsIDE3NzksIDI2OTIsIDI2NjgsIDI2NjUsIDI2NDUsIDI2NDMsIDI2NDAsIDI2NTEsIDI3NjgsIDI3NTksCisgIDI3NTcsIDI3NDQsIDI3NDMsIDI3NDEsIDI3NDgsIDM1MiwgMTM4MiwgMzQwLCAzMzcsIDMzMywgMTM3MSwgMTM2OSwgMzA3LCAzMDAsIDI5NiwgMjEyNiwgMzE1LCAzMTIsIDEzNDcsIDEzNDIsCisgIDEzNTAsIDI2MSwgMjU4LCAyNTAsIDIwOTcsIDI0NiwgMjA5NCwgMjcxLCAyNjgsIDI2NCwgMTMwNiwgMTMwMSwgMTI5OCwgMjc2LCAxMzEyLCAxMzA5LCAyMTE1LCAyMDMsIDIwNDgsIDE5NSwKKyAgMjA0NSwgMTkxLCAyMDQxLCAyMTMsIDIwOSwgMjA1NiwgMTI0NiwgMTI0NCwgMTIzOCwgMjI1LCAxMjM0LCAyMjIsIDEyNTYsIDEyNTMsIDEyNDksIDEyNjIsIDIwODAsIDIwNzksIDE1NCwgMTk5NywKKyAgMTUwLCAxOTk1LCAxNDcsIDE5OTIsIDE5ODksIDE2MywgMTYwLCAyMDA0LCAxNTYsIDIwMDEsIDExNzUsIDExNzQsIDExNzIsIDExNzAsIDExNjcsIDE3MCwgMTE2NCwgMTY3LCAxMTg1LCAxMTgzLAorICAxMTgwLCAxMTc3LCAxNzQsIDExOTAsIDExODgsIDIwMjUsIDIwMjQsIDIwMjIsIDU4NywgNTg2LCA1NjQsIDU1OSwgNTU2LCAyMjkwLCA1NzMsIDE1ODgsIDUyMCwgNTE4LCA1MTIsIDIyNjgsCisgIDUwOCwgMjI2NSwgNTMwLCAxNTY4LCAxNTY1LCA0NjEsIDQ1NywgMjIzMywgNDUwLCAyMjMwLCA0NDYsIDIyMjYsIDQ3OSwgNDcxLCA0ODksIDE1MjYsIDE1MjMsIDE1MjAsIDM5NywgMzk1LAorICAyMTg1LCAzOTIsIDIxODMsIDM4OSwgMjE4MCwgMjE3NywgNDEwLCAyMTk0LCA0MDIsIDQyMiwgMTQ2MywgMTQ2MSwgMTQ1OSwgMTQ1NiwgMTQ3MCwgMjQ1NSwgNzk5LCAyNDMzLCAyNDMwLCA3NzksCisgIDc3NiwgNzczLCAyMzk3LCAyMzk0LCAyMzkwLCA3MzQsIDcyOCwgNzI0LCA3NDYsIDE3MTcsIDIzNTYsIDIzNTQsIDIzNTEsIDIzNDgsIDE2NTgsIDY3NywgNjc1LCA2NzMsIDY3MCwgNjY3LCA2ODgsCisgIDE2ODUsIDE2ODMsIDI2MDYsIDI1ODksIDI1ODYsIDI1NTksIDI1NTYsIDI1NTIsIDkyNywgMjUyMywgMjUyMSwgMjUxOCwgMjUxNSwgMTc4NCwgMjUzMiwgODk1LCA4OTMsIDg5MCwgMjcxOCwKKyAgMjcwOSwgMjcwNywgMjY4OSwgMjY4NywgMjY4NCwgMjY2MywgMjY2MiwgMjY2MCwgMjY1OCwgMTgyNSwgMjY2NywgMjc2OSwgMTg1MiwgMjc2MCwgMjc1OCwgMTQyLCAxNDEsIDExMzksIDExMzgsCisgIDEzNCwgMTMyLCAxMjksIDEyNiwgMTk4MiwgMTEyOSwgMTEyOCwgMTEyNiwgMTEzMSwgMTEzLCAxMTEsIDEwOCwgMTA1LCAxOTcyLCAxMDEsIDE5NzAsIDEyMCwgMTE4LCAxMTUsIDExMDksIDExMDgsCisgIDExMDYsIDExMDQsIDEyMywgMTExMywgMTExMSwgODIsIDc5LCAxOTUxLCA3NSwgMTk0OSwgNzIsIDE5NDYsIDkyLCA4OSwgODYsIDE5NTYsIDEwNzcsIDEwNzYsIDEwNzQsIDEwNzIsIDk4LAorICAxMDY5LCA5NiwgMTA4NCwgMTA4MiwgMTA3OSwgMTA4OCwgMTk2OCwgMTk2NywgNDgsIDQ1LCAxOTE2LCA0MiwgMTkxNCwgMzksIDE5MTEsIDE5MDgsIDYwLCA1NywgNTQsIDE5MjMsIDUwLCAxOTIwLAorICAxMDMxLCAxMDMwLCAxMDI4LCAxMDI2LCA2NywgMTAyMywgNjUsIDEwMjAsIDYyLCAxMDQxLCAxMDM5LCAxMDM2LCAxMDMzLCA2OSwgMTA0NiwgMTA0NCwgMTk0NCwgMTk0MywgMTk0MSwgMTEsIDksCisgIDE4NjgsIDcsIDE4NjUsIDE4NjIsIDE4NTksIDIwLCAxODc4LCAxNiwgMTg3NSwgMTMsIDE4NzIsIDk3MCwgOTY4LCA5NjYsIDk2MywgMjksIDk2MCwgMjYsIDIzLCA5ODMsIDk4MSwgOTc4LCA5NzUsCisgIDMzLCA5NzEsIDMxLCA5OTAsIDk4OCwgOTg1LCAxOTA2LCAxOTA0LCAxOTAyLCA5OTMsIDM1MSwgMjE0NSwgMTM4MywgMzMxLCAzMzAsIDMyOCwgMzI2LCAyMTM3LCAzMjMsIDIxMzUsIDMzOSwKKyAgMTM3MiwgMTM3MCwgMjk0LCAyOTMsIDI5MSwgMjg5LCAyMTIyLCAyODYsIDIxMjAsIDI4MywgMjExNywgMzA5LCAzMDMsIDMxNywgMTM0OCwgMTM0NiwgMTM0NCwgMjQ1LCAyNDQsIDI0MiwgMjA5MCwKKyAgMjM5LCAyMDg4LCAyMzYsIDIwODUsIDIwODIsIDI2MCwgMjA5OSwgMjQ5LCAyNzAsIDEzMDcsIDEzMDUsIDEzMDMsIDEzMDAsIDEzMTQsIDE4OSwgMjAzOCwgMTg2LCAyMDM2LCAxODMsIDIwMzMsCisgIDIwMzAsIDIwMjYsIDIwNiwgMTk4LCAyMDQ3LCAxOTQsIDIxNiwgMTI0NywgMTI0NSwgMTI0MywgMTI0MCwgMjI3LCAxMjM3LCAxMjU1LCAyMzEwLCAyMzAyLCAyMzAwLCAyMjg2LCAyMjg0LAorICAyMjgxLCA1NjUsIDU2MywgNTYxLCA1NTgsIDU3NSwgMTU4OSwgMjI2MSwgMjI1OSwgMjI1NiwgMjI1MywgMTU0MiwgNTIxLCA1MTksIDUxNywgNTE0LCAyMjcwLCA1MTEsIDUzMywgMTU2OSwKKyAgMTU2NywgMjIyMywgMjIyMSwgMjIxOCwgMjIxNSwgMTQ4MywgMjIxMSwgMTQ4MCwgNDU5LCA0NTYsIDQ1MywgMjIzMiwgNDQ5LCA0NzQsIDQ5MSwgMTUyNywgMTUyNSwgMTUyMiwgMjQ3NSwgMjQ2NywKKyAgMjQ2NSwgMjQ1MSwgMjQ0OSwgMjQ0NiwgODAxLCA4MDAsIDI0MjYsIDI0MjQsIDI0MjEsIDI0MTgsIDE3MjMsIDI0MzUsIDc4MCwgNzc4LCA3NzUsIDIzODcsIDIzODUsIDIzODIsIDIzNzksCisgIDE2OTUsIDIzNzUsIDE2OTMsIDIzOTYsIDczNSwgNzMzLCA3MzAsIDcyNywgNzQ5LCAxNzE4LCAyNjE2LCAyNjE1LCAyNjA0LCAyNjAzLCAyNjAxLCAyNTg0LCAyNTgzLCAyNTgxLCAyNTc5LAorICAxODAwLCAyNTkxLCAyNTUwLCAyNTQ5LCAyNTQ3LCAyNTQ1LCAxNzkyLCAyNTQyLCAxNzkwLCAyNTU4LCA5MjksIDI3MTksIDE4NDEsIDI3MTAsIDI3MDgsIDE4MzMsIDE4MzEsIDI2OTAsIDI2ODgsCisgIDI2ODYsIDE4MTUsIDE4MDksIDE4MDgsIDE3NzQsIDE3NTYsIDE3NTQsIDE3MzcsIDE3MzYsIDE3MzQsIDE3MzksIDE4MTYsIDE3MTEsIDE2NzYsIDE2NzQsIDYzMywgNjI5LCAxNjM4LCAxNjM2LAorICAxNjMzLCAxNjQxLCA1OTgsIDE2MDUsIDE2MDQsIDE2MDIsIDE2MDAsIDYwNSwgMTYwOSwgMTYwNywgMjMyNywgODg3LCA4NTMsIDE3NzUsIDgyMiwgODIwLCAxNzU3LCAxNzU1LCAxNTg0LCA1MjQsCisgIDE1NjAsIDE1NTgsIDQ2OCwgNDY0LCAxNTE0LCAxNTExLCAxNTA4LCAxNTE5LCA0MDgsIDQwNCwgNDAwLCAxNDUyLCAxNDQ3LCAxNDQ0LCA0MTcsIDE0NTgsIDE0NTUsIDIyMDgsIDM2NCwgMzYxLAorICAzNTgsIDIxNTQsIDE0MDEsIDE0MDAsIDEzOTgsIDEzOTYsIDM3NCwgMTM5MywgMzcxLCAxNDA4LCAxNDA2LCAxNDAzLCAxNDEzLCAyMTczLCAyMTcyLCA3NzIsIDcyNiwgNzIzLCAxNzEyLCA2NzIsCisgIDY2OSwgNjY2LCA2ODIsIDE2NzgsIDE2NzUsIDYyNSwgNjIzLCA2MjEsIDYxOCwgMjMzMSwgNjM2LCA2MzIsIDE2MzksIDE2MzcsIDE2MzUsIDkyMCwgOTE4LCA4ODQsIDg4MCwgODg5LCA4NDksCisgIDg0OCwgODQ3LCA4NDYsIDI0OTcsIDg1NSwgODUyLCAxNzc2LCAyNjQxLCAyNzQyLCAyNzg3LCAxMzgwLCAzMzQsIDEzNjcsIDEzNjUsIDMwMSwgMjk3LCAxMzQwLCAxMzM4LCAxMzM1LCAxMzQzLAorICAyNTUsIDI1MSwgMjQ3LCAxMjk2LCAxMjkxLCAxMjg4LCAyNjUsIDEzMDIsIDEyOTksIDIxMTMsIDIwNCwgMTk2LCAxOTIsIDIwNDIsIDEyMzIsIDEyMzAsIDEyMjQsIDIxNCwgMTIyMCwgMjEwLAorICAxMjQyLCAxMjM5LCAxMjM1LCAxMjUwLCAyMDc3LCAyMDc1LCAxNTEsIDE0OCwgMTk5MywgMTQ0LCAxOTkwLCAxMTYzLCAxMTYyLCAxMTYwLCAxMTU4LCAxMTU1LCAxNjEsIDExNTIsIDE1NywKKyAgMTE3MywgMTE3MSwgMTE2OCwgMTE2NSwgMTY4LCAxMTgxLCAxMTc4LCAyMDIxLCAyMDIwLCAyMDE4LCAyMDIzLCA1ODUsIDU2MCwgNTU3LCAxNTg1LCA1MTYsIDUwOSwgMTU2MiwgMTU1OSwgNDU4LAorICA0NDcsIDIyMjcsIDQ3MiwgMTUxNiwgMTUxMywgMTUxMCwgMzk4LCAzOTYsIDM5MywgMzkwLCAyMTgxLCAzODYsIDIxNzgsIDQwNywgMTQ1MywgMTQ1MSwgMTQ0OSwgMTQ0NiwgNDIwLCAxNDYwLAorICAyMjA5LCA3NjksIDc2NCwgNzIwLCA3MTIsIDIzOTEsIDcyOSwgMTcxMywgNjY0LCA2NjMsIDY2MSwgNjU5LCAyMzUyLCA2NTYsIDIzNDksIDY3MSwgMTY3OSwgMTY3NywgMjU1MywgOTIyLCA5MTksCisgIDI1MTksIDI1MTYsIDg4NSwgODgzLCA4ODEsIDI2ODUsIDI2NjEsIDI2NTksIDI3NjcsIDI3NTYsIDI3NTUsIDE0MCwgMTEzNywgMTEzNiwgMTMwLCAxMjcsIDExMjUsIDExMjQsIDExMjIsIDExMjcsCisgIDEwOSwgMTA2LCAxMDIsIDExMDMsIDExMDIsIDExMDAsIDEwOTgsIDExNiwgMTEwNywgMTEwNSwgMTk4MCwgODAsIDc2LCA3MywgMTk0NywgMTA2OCwgMTA2NywgMTA2NSwgMTA2MywgOTAsIDEwNjAsCisgIDg3LCAxMDc1LCAxMDczLCAxMDcwLCAxMDgwLCAxOTY2LCAxOTY1LCA0NiwgNDMsIDQwLCAxOTEyLCAzNiwgMTkwOSwgMTAxOSwgMTAxOCwgMTAxNiwgMTAxNCwgNTgsIDEwMTEsIDU1LCAxMDA4LAorICA1MSwgMTAyOSwgMTAyNywgMTAyNCwgMTAyMSwgNjMsIDEwMzcsIDEwMzQsIDE5NDAsIDE5MzksIDE5MzcsIDE5NDIsIDgsIDE4NjYsIDQsIDE4NjMsIDEsIDE4NjAsIDk1NiwgOTU0LCA5NTIsCisgIDk0OSwgOTQ2LCAxNywgMTQsIDk2OSwgOTY3LCA5NjQsIDk2MSwgMjcsIDk1NywgMjQsIDk3OSwgOTc2LCA5NzIsIDE5MDEsIDE5MDAsIDE4OTgsIDE4OTYsIDk4NiwgMTkwNSwgMTkwMywgMzUwLAorICAzNDksIDEzODEsIDMyOSwgMzI3LCAzMjQsIDEzNjgsIDEzNjYsIDI5MiwgMjkwLCAyODcsIDI4NCwgMjExOCwgMzA0LCAxMzQxLCAxMzM5LCAxMzM3LCAxMzQ1LCAyNDMsIDI0MCwgMjM3LCAyMDg2LAorICAyMzMsIDIwODMsIDI1NCwgMTI5NywgMTI5NSwgMTI5MywgMTI5MCwgMTMwNCwgMjExNCwgMTkwLCAxODcsIDE4NCwgMjAzNCwgMTgwLCAyMDMxLCAxNzcsIDIwMjcsIDE5OSwgMTIzMywgMTIzMSwKKyAgMTIyOSwgMTIyNiwgMjE3LCAxMjIzLCAxMjQxLCAyMDc4LCAyMDc2LCA1ODQsIDU1NSwgNTU0LCA1NTIsIDU1MCwgMjI4MiwgNTYyLCAxNTg2LCA1MDcsIDUwNiwgNTA0LCA1MDIsIDIyNTcsIDQ5OSwKKyAgMjI1NCwgNTE1LCAxNTYzLCAxNTYxLCA0NDUsIDQ0MywgNDQxLCAyMjE5LCA0MzgsIDIyMTYsIDQzNSwgMjIxMiwgNDYwLCA0NTQsIDQ3NSwgMTUxNywgMTUxNSwgMTUxMiwgMjQ0NywgNzk4LAorICA3OTcsIDI0MjIsIDI0MTksIDc3MCwgNzY4LCA3NjYsIDIzODMsIDIzODAsIDIzNzYsIDcyMSwgNzE5LCA3MTcsIDcxNCwgNzMxLCAxNzE0LCAyNjAyLCAyNTgyLCAyNTgwLCAyNTQ4LCAyNTQ2LAorICAyNTQzLCA5MjMsIDkyMSwgMjcxNywgMjcwNiwgMjcwNSwgMjY4MywgMjY4MiwgMjY4MCwgMTc3MSwgMTc1MiwgMTc1MCwgMTczMywgMTczMiwgMTczMSwgMTczNSwgMTgxNCwgMTcwNywgMTY3MCwKKyAgMTY2OCwgMTYzMSwgMTYyOSwgMTYyNiwgMTYzNCwgMTU5OSwgMTU5OCwgMTU5NiwgMTU5NCwgMTYwMywgMTYwMSwgMjMyNiwgMTc3MiwgMTc1MywgMTc1MSwgMTU4MSwgMTU1NCwgMTU1MiwgMTUwNCwKKyAgMTUwMSwgMTQ5OCwgMTUwOSwgMTQ0MiwgMTQzNywgMTQzNCwgNDAxLCAxNDQ4LCAxNDQ1LCAyMjA2LCAxMzkyLCAxMzkxLCAxMzg5LCAxMzg3LCAxMzg0LCAzNTksIDEzOTksIDEzOTcsIDEzOTQsCisgIDE0MDQsIDIxNzEsIDIxNzAsIDE3MDgsIDE2NzIsIDE2NjksIDYxOSwgMTYzMiwgMTYzMCwgMTYyOCwgMTc3MywgMTM3OCwgMTM2MywgMTM2MSwgMTMzMywgMTMyOCwgMTMzNiwgMTI4NiwgMTI4MSwKKyAgMTI3OCwgMjQ4LCAxMjkyLCAxMjg5LCAyMTExLCAxMjE4LCAxMjE2LCAxMjEwLCAxOTcsIDEyMDYsIDE5MywgMTIyOCwgMTIyNSwgMTIyMSwgMTIzNiwgMjA3MywgMjA3MSwgMTE1MSwgMTE1MCwKKyAgMTE0OCwgMTE0NiwgMTUyLCAxMTQzLCAxNDksIDExNDAsIDE0NSwgMTE2MSwgMTE1OSwgMTE1NiwgMTE1MywgMTU4LCAxMTY5LCAxMTY2LCAyMDE3LCAyMDE2LCAyMDE0LCAyMDE5LCAxNTgyLAorICA1MTAsIDE1NTYsIDE1NTMsIDQ1MiwgNDQ4LCAxNTA2LCAxNTAwLCAzOTQsIDM5MSwgMzg3LCAxNDQzLCAxNDQxLCAxNDM5LCAxNDM2LCAxNDUwLCAyMjA3LCA3NjUsIDcxNiwgNzEzLCAxNzA5LAorICA2NjIsIDY2MCwgNjU3LCAxNjczLCAxNjcxLCA5MTYsIDkxNCwgODc5LCA4NzgsIDg3NywgODgyLCAxMTM1LCAxMTM0LCAxMTIxLCAxMTIwLCAxMTE4LCAxMTIzLCAxMDk3LCAxMDk2LCAxMDk0LAorICAxMDkyLCAxMDMsIDExMDEsIDEwOTksIDE5NzksIDEwNTksIDEwNTgsIDEwNTYsIDEwNTQsIDc3LCAxMDUxLCA3NCwgMTA2NiwgMTA2NCwgMTA2MSwgMTA3MSwgMTk2NCwgMTk2MywgMTAwNywKKyAgMTAwNiwgMTAwNCwgMTAwMiwgOTk5LCA0MSwgOTk2LCAzNywgMTAxNywgMTAxNSwgMTAxMiwgMTAwOSwgNTIsIDEwMjUsIDEwMjIsIDE5MzYsIDE5MzUsIDE5MzMsIDE5MzgsIDk0MiwgOTQwLAorICA5MzgsIDkzNSwgOTMyLCA1LCAyLCA5NTUsIDk1MywgOTUwLCA5NDcsIDE4LCA5NDMsIDE1LCA5NjUsIDk2MiwgOTU4LCAxODk1LCAxODk0LCAxODkyLCAxODkwLCA5NzMsIDE4OTksIDE4OTcsCisgIDEzNzksIDMyNSwgMTM2NCwgMTM2MiwgMjg4LCAyODUsIDEzMzQsIDEzMzIsIDEzMzAsIDI0MSwgMjM4LCAyMzQsIDEyODcsIDEyODUsIDEyODMsIDEyODAsIDEyOTQsIDIxMTIsIDE4OCwgMTg1LAorICAxODEsIDE3OCwgMjAyOCwgMTIxOSwgMTIxNywgMTIxNSwgMTIxMiwgMjAwLCAxMjA5LCAxMjI3LCAyMDc0LCAyMDcyLCA1ODMsIDU1MywgNTUxLCAxNTgzLCA1MDUsIDUwMywgNTAwLCA1MTMsCisgIDE1NTcsIDE1NTUsIDQ0NCwgNDQyLCA0MzksIDQzNiwgMjIxMywgNDU1LCA0NTEsIDE1MDcsIDE1MDUsIDE1MDIsIDc5NiwgNzYzLCA3NjIsIDc2MCwgNzY3LCA3MTEsIDcxMCwgNzA4LCA3MDYsCisgIDIzNzcsIDcxOCwgNzE1LCAxNzEwLCAyNTQ0LCA5MTcsIDkxNSwgMjY4MSwgMTYyNywgMTU5NywgMTU5NSwgMjMyNSwgMTc2OSwgMTc0OSwgMTc0NywgMTQ5OSwgMTQzOCwgMTQzNSwgMjIwNCwKKyAgMTM5MCwgMTM4OCwgMTM4NSwgMTM5NSwgMjE2OSwgMjE2NywgMTcwNCwgMTY2NSwgMTY2MiwgMTYyNSwgMTYyMywgMTYyMCwgMTc3MCwgMTMyOSwgMTI4MiwgMTI3OSwgMjEwOSwgMTIxNCwgMTIwNywKKyAgMTIyMiwgMjA2OCwgMjA2NSwgMTE0OSwgMTE0NywgMTE0NCwgMTE0MSwgMTQ2LCAxMTU3LCAxMTU0LCAyMDEzLCAyMDExLCAyMDA4LCAyMDE1LCAxNTc5LCAxNTQ5LCAxNTQ2LCAxNDk1LCAxNDg3LAorICAxNDMzLCAxNDMxLCAxNDI4LCAxNDI1LCAzODgsIDE0NDAsIDIyMDUsIDE3MDUsIDY1OCwgMTY2NywgMTY2NCwgMTExOSwgMTA5NSwgMTA5MywgMTk3OCwgMTA1NywgMTA1NSwgMTA1MiwgMTA2MiwKKyAgMTk2MiwgMTk2MCwgMTAwNSwgMTAwMywgMTAwMCwgOTk3LCAzOCwgMTAxMywgMTAxMCwgMTkzMiwgMTkzMCwgMTkyNywgMTkzNCwgOTQxLCA5MzksIDkzNiwgOTMzLCA2LCA5MzAsIDMsIDk1MSwKKyAgOTQ4LCA5NDQsIDE4ODksIDE4ODcsIDE4ODQsIDE4ODEsIDk1OSwgMTg5MywgMTg5MSwgMzUsIDEzNzcsIDEzNjAsIDEzNTgsIDEzMjcsIDEzMjUsIDEzMjIsIDEzMzEsIDEyNzcsIDEyNzUsCisgIDEyNzIsIDEyNjksIDIzNSwgMTI4NCwgMjExMCwgMTIwNSwgMTIwNCwgMTIwMSwgMTE5OCwgMTgyLCAxMTk1LCAxNzksIDEyMTMsIDIwNzAsIDIwNjcsIDE1ODAsIDUwMSwgMTU1MSwgMTU0OCwKKyAgNDQwLCA0MzcsIDE0OTcsIDE0OTQsIDE0OTAsIDE1MDMsIDc2MSwgNzA5LCA3MDcsIDE3MDYsIDkxMywgOTEyLCAyMTk4LCAxMzg2LCAyMTY0LCAyMTYxLCAxNjIxLCAxNzY2LCAyMTAzLCAxMjA4LAorICAyMDU4LCAyMDU0LCAxMTQ1LCAxMTQyLCAyMDA1LCAyMDAyLCAxOTk5LCAyMDA5LCAxNDg4LCAxNDI5LCAxNDI2LCAyMjAwLCAxNjk4LCAxNjU5LCAxNjU2LCAxOTc1LCAxMDUzLCAxOTU3LCAxOTU0LAorICAxMDAxLCA5OTgsIDE5MjQsIDE5MjEsIDE5MTgsIDE5MjgsIDkzNywgOTM0LCA5MzEsIDE4NzksIDE4NzYsIDE4NzMsIDE4NzAsIDk0NSwgMTg4NSwgMTg4MiwgMTMyMywgMTI3MywgMTI3MCwKKyAgMjEwNSwgMTIwMiwgMTE5OSwgMTE5NiwgMTIxMSwgMjA2MSwgMjA1NywgMTU3NiwgMTU0MywgMTU0MCwgMTQ4NCwgMTQ4MSwgMTQ3OCwgMTQ5MSwgMTcwMH07CmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L1pYUERGNDE3UmVhZGVyLmggYi9aWGluZ09iakMvcGRmNDE3L1pYUERGNDE3UmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmYjAzMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvWlhQREY0MTdSZWFkZXIuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWE11bHRpcGxlQmFyY29kZVJlYWRlci5oIgorI2ltcG9ydCAiWlhSZWFkZXIuaCIKKworLyoqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGNhbiBkZXRlY3QgYW5kIGRlY29kZSBQREY0MTcgY29kZXMgaW4gYW4gaW1hZ2UuCisgKi8KKworQGNsYXNzIFpYRGVjb2RlSGludHMsIFpYUmVzdWx0OworCitAaW50ZXJmYWNlIFpYUERGNDE3UmVhZGVyIDogTlNPYmplY3QgPFpYUmVhZGVyLCBaWE11bHRpcGxlQmFyY29kZVJlYWRlcj4KKworLSAoTlNBcnJheSAqKWRlY29kZU11bHRpcGxlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoTlNBcnJheSAqKWRlY29kZU11bHRpcGxlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvWlhQREY0MTdSZWFkZXIubSBiL1pYaW5nT2JqQy9wZGY0MTcvWlhQREY0MTdSZWFkZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjE5MWIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9aWFBERjQxN1JlYWRlci5tCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJhcmNvZGVGb3JtYXQuaCIKKyNpbXBvcnQgIlpYQmluYXJ5Qml0bWFwLmgiCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhEZWNvZGVIaW50cy5oIgorI2ltcG9ydCAiWlhEZWNvZGVyUmVzdWx0LmgiCisjaW1wb3J0ICJaWERldGVjdG9yUmVzdWx0LmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhQREY0MTdDb21tb24uaCIKKyNpbXBvcnQgIlpYUERGNDE3RGV0ZWN0b3IuaCIKKyNpbXBvcnQgIlpYUERGNDE3RGV0ZWN0b3JSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUERGNDE3UmVhZGVyLmgiCisjaW1wb3J0ICJaWFBERjQxN1Jlc3VsdE1ldGFkYXRhLmgiCisjaW1wb3J0ICJaWFBERjQxN1NjYW5uaW5nRGVjb2Rlci5oIgorI2ltcG9ydCAiWlhSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKworQGltcGxlbWVudGF0aW9uIFpYUERGNDE3UmVhZGVyCisKKy8qKgorICogTG9jYXRlcyBhbmQgZGVjb2RlcyBhIFBERjQxNyBjb2RlIGluIGFuIGltYWdlLgorICovCistIChaWFJlc3VsdCAqKWRlY29kZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIHJldHVybiBbc2VsZiBkZWNvZGU6aW1hZ2UgaGludHM6bmlsIGVycm9yOmVycm9yXTsKK30KKworLSAoWlhSZXN1bHQgKilkZWNvZGU6KFpYQmluYXJ5Qml0bWFwICopaW1hZ2UgaGludHM6KFpYRGVjb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIE5TQXJyYXkgKnJlc3VsdCA9IFtzZWxmIGRlY29kZTppbWFnZSBoaW50czpoaW50cyBtdWx0aXBsZTpOTyBlcnJvcjplcnJvcl07CisgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5jb3VudCA9PSAwIHx8ICFyZXN1bHRbMF0pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgcmV0dXJuIHJlc3VsdFswXTsKK30KKworLSAoTlNBcnJheSAqKWRlY29kZU11bHRpcGxlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtzZWxmIGRlY29kZU11bHRpcGxlOmltYWdlIGhpbnRzOm5pbCBlcnJvcjplcnJvcl07Cit9CisKKy0gKE5TQXJyYXkgKilkZWNvZGVNdWx0aXBsZTooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtzZWxmIGRlY29kZTppbWFnZSBoaW50czpoaW50cyBtdWx0aXBsZTpZRVMgZXJyb3I6ZXJyb3JdOworfQorCistIChOU0FycmF5ICopZGVjb2RlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgbXVsdGlwbGU6KEJPT0wpbXVsdGlwbGUgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBOU011dGFibGVBcnJheSAqcmVzdWx0cyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgIFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQgKmRldGVjdG9yUmVzdWx0ID0gW1pYUERGNDE3RGV0ZWN0b3IgZGV0ZWN0OmltYWdlIGhpbnRzOmhpbnRzIG11bHRpcGxlOm11bHRpcGxlIGVycm9yOmVycm9yXTsKKyAgaWYgKCFkZXRlY3RvclJlc3VsdCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgZm9yIChOU0FycmF5ICpwb2ludHMgaW4gZGV0ZWN0b3JSZXN1bHQucG9pbnRzKSB7CisgICAgWlhSZXN1bHRQb2ludCAqaW1hZ2VUb3BMZWZ0ID0gcG9pbnRzWzRdID09IFtOU051bGwgbnVsbF0gPyBuaWwgOiBwb2ludHNbNF07CisgICAgWlhSZXN1bHRQb2ludCAqaW1hZ2VCb3R0b21MZWZ0ID0gcG9pbnRzWzVdID09IFtOU051bGwgbnVsbF0gPyBuaWwgOiBwb2ludHNbNV07CisgICAgWlhSZXN1bHRQb2ludCAqaW1hZ2VUb3BSaWdodCA9IHBvaW50c1s2XSA9PSBbTlNOdWxsIG51bGxdID8gbmlsIDogcG9pbnRzWzZdOworICAgIFpYUmVzdWx0UG9pbnQgKmltYWdlQm90dG9tUmlnaHQgPSBwb2ludHNbN10gPT0gW05TTnVsbCBudWxsXSA/IG5pbCA6IHBvaW50c1s3XTsKKworICAgIFpYRGVjb2RlclJlc3VsdCAqZGVjb2RlclJlc3VsdCA9IFtaWFBERjQxN1NjYW5uaW5nRGVjb2RlciBkZWNvZGU6ZGV0ZWN0b3JSZXN1bHQuYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVRvcExlZnQ6aW1hZ2VUb3BMZWZ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQm90dG9tTGVmdDppbWFnZUJvdHRvbUxlZnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVRvcFJpZ2h0OmltYWdlVG9wUmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUJvdHRvbVJpZ2h0OmltYWdlQm90dG9tUmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5Db2Rld29yZFdpZHRoOltzZWxmIG1pbkNvZGV3b3JkV2lkdGg6cG9pbnRzXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heENvZGV3b3JkV2lkdGg6W3NlbGYgbWF4Q29kZXdvcmRXaWR0aDpwb2ludHNdXTsKKyAgICBpZiAoIWRlY29kZXJSZXN1bHQpIHsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIFpYUmVzdWx0ICpyZXN1bHQgPSBbW1pYUmVzdWx0IGFsbG9jXSBpbml0V2l0aFRleHQ6ZGVjb2RlclJlc3VsdC50ZXh0IHJhd0J5dGVzOmRlY29kZXJSZXN1bHQucmF3Qnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOmRlY29kZXJSZXN1bHQubGVuZ3RoIHJlc3VsdFBvaW50czpwb2ludHMgZm9ybWF0OmtCYXJjb2RlRm9ybWF0UERGNDE3XTsKKyAgICBbcmVzdWx0IHB1dE1ldGFkYXRhOmtSZXN1bHRNZXRhZGF0YVR5cGVFcnJvckNvcnJlY3Rpb25MZXZlbCB2YWx1ZTpkZWNvZGVyUmVzdWx0LmVjTGV2ZWxdOworICAgIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEgKnBkZjQxN1Jlc3VsdE1ldGFkYXRhID0gZGVjb2RlclJlc3VsdC5vdGhlcjsKKyAgICBpZiAocGRmNDE3UmVzdWx0TWV0YWRhdGEpIHsKKyAgICAgIFtyZXN1bHQgcHV0TWV0YWRhdGE6a1Jlc3VsdE1ldGFkYXRhVHlwZVBERjQxN0V4dHJhTWV0YWRhdGEgdmFsdWU6cGRmNDE3UmVzdWx0TWV0YWRhdGFdOworICAgIH0KKyAgICBbcmVzdWx0cyBhZGRPYmplY3Q6cmVzdWx0XTsKKyAgfQorICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoQXJyYXk6cmVzdWx0c107Cit9CisKKy0gKGludCltYXhXaWR0aDooWlhSZXN1bHRQb2ludCAqKXAxIHAyOihaWFJlc3VsdFBvaW50ICopcDIgeworICBpZiAoIXAxIHx8ICFwMiB8fCAoaWQpcDEgPT0gW05TTnVsbCBudWxsXSB8fCBwMiA9PSAoaWQpW05TTnVsbCBudWxsXSkgeworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBhYnMocDEueCAtIHAyLngpOworfQorCistIChpbnQpbWluV2lkdGg6KFpYUmVzdWx0UG9pbnQgKilwMSBwMjooWlhSZXN1bHRQb2ludCAqKXAyIHsKKyAgaWYgKCFwMSB8fCAhcDIgfHwgKGlkKXAxID09IFtOU051bGwgbnVsbF0gfHwgcDIgPT0gKGlkKVtOU051bGwgbnVsbF0pIHsKKyAgICByZXR1cm4gSU5UX01BWDsKKyAgfQorICByZXR1cm4gYWJzKHAxLnggLSBwMi54KTsKK30KKworLSAoaW50KW1heENvZGV3b3JkV2lkdGg6KE5TQXJyYXkgKilwIHsKKyAgcmV0dXJuIE1BWCgKKyAgICAgICAgICAgICBNQVgoW3NlbGYgbWF4V2lkdGg6cFswXSBwMjpwWzRdXSwgW3NlbGYgbWF4V2lkdGg6cFs2XSBwMjpwWzJdXSAqIFpYUERGNDE3X01PRFVMRVNfSU5fQ09ERVdPUkQgLworICAgICAgICAgICAgICAgICBaWFBERjQxN19NT0RVTEVTX0lOX1NUT1BfUEFUVEVSTiksCisgICAgICAgICAgICAgTUFYKFtzZWxmIG1heFdpZHRoOnBbMV0gcDI6cFs1XV0sIFtzZWxmIG1heFdpZHRoOnBbN10gcDI6cFszXV0gKiBaWFBERjQxN19NT0RVTEVTX0lOX0NPREVXT1JEIC8KKyAgICAgICAgICAgICAgICAgWlhQREY0MTdfTU9EVUxFU19JTl9TVE9QX1BBVFRFUk4pKTsKK30KKworLSAoaW50KW1pbkNvZGV3b3JkV2lkdGg6KE5TQXJyYXkgKilwIHsKKyAgcmV0dXJuIE1JTigKKyAgICAgICAgICAgICBNSU4oW3NlbGYgbWluV2lkdGg6cFswXSBwMjpwWzRdXSwgW3NlbGYgbWluV2lkdGg6cFs2XSBwMjpwWzJdXSAqIFpYUERGNDE3X01PRFVMRVNfSU5fQ09ERVdPUkQgLworICAgICAgICAgICAgICAgICBaWFBERjQxN19NT0RVTEVTX0lOX1NUT1BfUEFUVEVSTiksCisgICAgICAgICAgICAgTUlOKFtzZWxmIG1pbldpZHRoOnBbMV0gcDI6cFs1XV0sIFtzZWxmIG1pbldpZHRoOnBbN10gcDI6cFszXV0gKiBaWFBERjQxN19NT0RVTEVTX0lOX0NPREVXT1JEIC8KKyAgICAgICAgICAgICAgICAgWlhQREY0MTdfTU9EVUxFU19JTl9TVE9QX1BBVFRFUk4pKTsKK30KKworLSAodm9pZClyZXNldCB7CisgIC8vIG5vdGhpbmcgbmVlZHMgdG8gYmUgcmVzZXQKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9aWFBERjQxN1Jlc3VsdE1ldGFkYXRhLmggYi9aWGluZ09iakMvcGRmNDE3L1pYUERGNDE3UmVzdWx0TWV0YWRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjYwMDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9aWFBERjQxN1Jlc3VsdE1ldGFkYXRhLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGludGVyZmFjZSBaWFBERjQxN1Jlc3VsdE1ldGFkYXRhIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IHNlZ21lbnRJbmRleDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqZmlsZUlkOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNBcnJheSAqb3B0aW9uYWxEYXRhOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgQk9PTCBsYXN0U2VnbWVudDsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9aWFBERjQxN1Jlc3VsdE1ldGFkYXRhLm0gYi9aWGluZ09iakMvcGRmNDE3L1pYUERGNDE3UmVzdWx0TWV0YWRhdGEubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWUyZDhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9aWFBERjQxN1Jlc3VsdE1ldGFkYXRhLm0KQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQREY0MTdSZXN1bHRNZXRhZGF0YS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhQREY0MTdSZXN1bHRNZXRhZGF0YQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L1pYUERGNDE3V3JpdGVyLmggYi9aWGluZ09iakMvcGRmNDE3L1pYUERGNDE3V3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5ZjMzMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvWlhQREY0MTdXcml0ZXIuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWENvbXBhY3Rpb24uaCIKKyNpbXBvcnQgIlpYV3JpdGVyLmgiCisKK0BpbnRlcmZhY2UgWlhQREY0MTdXcml0ZXIgOiBOU09iamVjdCA8WlhXcml0ZXI+CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvWlhQREY0MTdXcml0ZXIubSBiL1pYaW5nT2JqQy9wZGY0MTcvWlhQREY0MTdXcml0ZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWUwMzAwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9aWFBERjQxN1dyaXRlci5tCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJhcmNvZGVNYXRyaXguaCIKKyNpbXBvcnQgIlpYQml0TWF0cml4LmgiCisjaW1wb3J0ICJaWEVuY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWFBERjQxNy5oIgorI2ltcG9ydCAiWlhQREY0MTdXcml0ZXIuaCIKKworQGltcGxlbWVudGF0aW9uIFpYUERGNDE3V3JpdGVyCisKKy0gKFpYQml0TWF0cml4ICopZW5jb2RlOihOU1N0cmluZyAqKWNvbnRlbnRzIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdCB3aWR0aDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodAorICAgICAgICAgICAgICAgICAgaGludHM6KFpYRW5jb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGlmIChmb3JtYXQgIT0ga0JhcmNvZGVGb3JtYXRQREY0MTcpIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiQ2FuIG9ubHkgZW5jb2RlIFBERl80MTcsIGJ1dCBnb3QgJWQiLCBmb3JtYXRdOworICB9CisKKyAgWlhQREY0MTcgKmVuY29kZXIgPSBbW1pYUERGNDE3IGFsbG9jXSBpbml0XTsKKworICBpZiAoaGludHMgIT0gbmlsKSB7CisgICAgZW5jb2Rlci5jb21wYWN0ID0gaGludHMucGRmNDE3Q29tcGFjdDsKKyAgICBlbmNvZGVyLmNvbXBhY3Rpb24gPSBoaW50cy5wZGY0MTdDb21wYWN0aW9uOworICAgIGlmIChoaW50cy5wZGY0MTdEaW1lbnNpb25zICE9IG5pbCkgeworICAgICAgWlhEaW1lbnNpb25zICpkaW1lbnNpb25zID0gaGludHMucGRmNDE3RGltZW5zaW9uczsKKyAgICAgIFtlbmNvZGVyIHNldERpbWVuc2lvbnNXaXRoTWF4Q29sczpkaW1lbnNpb25zLm1heENvbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluQ29sczpkaW1lbnNpb25zLm1pbkNvbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Um93czpkaW1lbnNpb25zLm1heFJvd3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluUm93czpkaW1lbnNpb25zLm1pblJvd3NdOworICAgIH0KKyAgfQorCisgIHJldHVybiBbc2VsZiBiaXRNYXRyaXhGcm9tRW5jb2RlcjplbmNvZGVyIGNvbnRlbnRzOmNvbnRlbnRzIHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHQgZXJyb3I6ZXJyb3JdOworfQorCistIChaWEJpdE1hdHJpeCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW3NlbGYgZW5jb2RlOmNvbnRlbnRzIGZvcm1hdDpmb3JtYXQgd2lkdGg6d2lkdGggaGVpZ2h0OmhlaWdodCBoaW50czpuaWwgZXJyb3I6ZXJyb3JdOworfQorCisvKioKKyAqIFRha2VzIGVuY29kZXIsIGFjY291bnRzIGZvciB3aWR0aC9oZWlnaHQsIGFuZCByZXRyaWV2ZXMgYml0IG1hdHJpeAorICovCistIChaWEJpdE1hdHJpeCAqKWJpdE1hdHJpeEZyb21FbmNvZGVyOihaWFBERjQxNyAqKWVuY29kZXIgY29udGVudHM6KE5TU3RyaW5nICopY29udGVudHMgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQgZXJyb3JDb3JyZWN0aW9uTGV2ZWwgPSAyOworICBpZiAoIVtlbmNvZGVyIGdlbmVyYXRlQmFyY29kZUxvZ2ljOmNvbnRlbnRzIGVycm9yQ29ycmVjdGlvbkxldmVsOmVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yOmVycm9yXSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpbnQgbGluZVRoaWNrbmVzcyA9IDI7CisgIGludCBhc3BlY3RSYXRpbyA9IDQ7CisKKyAgaW50IHNjYWxlSGVpZ2h0OworICBpbnQgc2NhbGVXaWR0aDsKKyAgaW50OF90ICoqb3JpZ2luYWxTY2FsZSA9IFtbZW5jb2RlciBiYXJjb2RlTWF0cml4XSBzY2FsZWRNYXRyaXhXaXRoSGVpZ2h0OiZzY2FsZUhlaWdodCB3aWR0aDomc2NhbGVXaWR0aCB4U2NhbGU6bGluZVRoaWNrbmVzcyB5U2NhbGU6YXNwZWN0UmF0aW8gKiBsaW5lVGhpY2tuZXNzXTsKKyAgQk9PTCByb3RhdGVkID0gTk87CisgIGlmICgoaGVpZ2h0ID4gd2lkdGgpIF4gKHNjYWxlV2lkdGggPCBzY2FsZUhlaWdodCkpIHsKKyAgICBpbnQ4X3QgKipvbGRPcmlnaW5hbFNjYWxlID0gb3JpZ2luYWxTY2FsZTsKKyAgICBvcmlnaW5hbFNjYWxlID0gW3NlbGYgcm90YXRlQXJyYXk6b2xkT3JpZ2luYWxTY2FsZSBoZWlnaHQ6c2NhbGVIZWlnaHQgd2lkdGg6c2NhbGVXaWR0aF07CisgICAgZnJlZShvbGRPcmlnaW5hbFNjYWxlKTsKKyAgICByb3RhdGVkID0gWUVTOworICB9CisKKyAgaW50IHNjYWxlWCA9IHdpZHRoIC8gc2NhbGVXaWR0aDsKKyAgaW50IHNjYWxlWSA9IGhlaWdodCAvIHNjYWxlSGVpZ2h0OworCisgIGludCBzY2FsZTsKKyAgaWYgKHNjYWxlWCA8IHNjYWxlWSkgeworICAgIHNjYWxlID0gc2NhbGVYOworICB9IGVsc2UgeworICAgIHNjYWxlID0gc2NhbGVZOworICB9CisKKyAgWlhCaXRNYXRyaXggKnJlc3VsdCA9IG5pbDsKKyAgaWYgKHNjYWxlID4gMSkgeworICAgIGludDhfdCAqKnNjYWxlZE1hdHJpeCA9CisgICAgICBbW2VuY29kZXIgYmFyY29kZU1hdHJpeF0gc2NhbGVkTWF0cml4V2l0aEhlaWdodDomc2NhbGVIZWlnaHQgd2lkdGg6JnNjYWxlV2lkdGggeFNjYWxlOnNjYWxlICogbGluZVRoaWNrbmVzcyB5U2NhbGU6c2NhbGUgKiBhc3BlY3RSYXRpbyAqIGxpbmVUaGlja25lc3NdOworICAgIGlmIChyb3RhdGVkKSB7CisgICAgICBpbnQ4X3QgKipvbGRTY2FsZWRNYXRyaXggPSBzY2FsZWRNYXRyaXg7CisgICAgICBzY2FsZWRNYXRyaXggPSBbc2VsZiByb3RhdGVBcnJheTpzY2FsZWRNYXRyaXggaGVpZ2h0OnNjYWxlSGVpZ2h0IHdpZHRoOnNjYWxlV2lkdGhdOworICAgICAgZnJlZShvbGRTY2FsZWRNYXRyaXgpOworICAgIH0KKyAgICByZXN1bHQgPSBbc2VsZiBiaXRNYXRyaXhGcm9tYml0QXJyYXk6c2NhbGVkTWF0cml4IGhlaWdodDpzY2FsZUhlaWdodCB3aWR0aDpzY2FsZVdpZHRoXTsKKyAgICBmcmVlKHNjYWxlZE1hdHJpeCk7CisgIH0gZWxzZSB7CisgICAgcmVzdWx0ID0gW3NlbGYgYml0TWF0cml4RnJvbWJpdEFycmF5Om9yaWdpbmFsU2NhbGUgaGVpZ2h0OnNjYWxlSGVpZ2h0IHdpZHRoOnNjYWxlV2lkdGhdOworICB9CisgIGZyZWUob3JpZ2luYWxTY2FsZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogVGhpcyB0YWtlcyBhbiBhcnJheSBob2xkaW5nIHRoZSB2YWx1ZXMgb2YgdGhlIFBERiA0MTcKKyAqLworLSAoWlhCaXRNYXRyaXggKiliaXRNYXRyaXhGcm9tYml0QXJyYXk6KGludDhfdCAqKilpbnB1dCBoZWlnaHQ6KGludCloZWlnaHQgd2lkdGg6KGludCl3aWR0aCB7CisgIC8vIENyZWF0ZXMgYSBzbWFsbCB3aGl0ZXNwYWNlIGJvYXJkZXIgYXJvdW5kIHRoZSBiYXJjb2RlCisgIGludCB3aGl0ZVNwYWNlID0gMzA7CisKKyAgLy8gQ3JlYXRlcyB0aGUgYml0bWF0cml4IHdpdGggZXh0cmEgc3BhY2UgZm9yIHdodGVzcGFjZQorICBaWEJpdE1hdHJpeCAqb3V0cHV0ID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDp3aWR0aCArIDIgKiB3aGl0ZVNwYWNlIGhlaWdodDpoZWlnaHQgKyAyICogd2hpdGVTcGFjZV07CisgIFtvdXRwdXQgY2xlYXJdOworICBmb3IgKGludCB5ID0gMCwgeU91dHB1dCA9IG91dHB1dC5oZWlnaHQgLSB3aGl0ZVNwYWNlOyB5IDwgaGVpZ2h0OyB5KyssIHlPdXRwdXQtLSkgeworICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgLy8gWmVybyBpcyB3aGl0ZSBpbiB0aGUgYnl0ZW1hdHJpeAorICAgICAgaWYgKGlucHV0W3ldW3hdID09IDEpIHsKKyAgICAgICAgW291dHB1dCBzZXRYOnggKyB3aGl0ZVNwYWNlIHk6eU91dHB1dF07CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBvdXRwdXQ7Cit9CisKKy8qKgorICogVGFrZXMgYW5kIHJvdGF0ZXMgdGhlIGl0IDkwIGRlZ3JlZXMKKyAqLworLSAoaW50OF90ICoqKXJvdGF0ZUFycmF5OihpbnQ4X3QgKiopYml0YXJyYXkgaGVpZ2h0OihpbnQpaGVpZ2h0IHdpZHRoOihpbnQpd2lkdGggeworICBpbnQ4X3QgKip0ZW1wID0gKGludDhfdCAqKiltYWxsb2Mod2lkdGggKiBzaXplb2YoaW50OF90ICopKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7CisgICAgdGVtcFtpXSA9IChpbnQ4X3QgKiltYWxsb2MoaGVpZ2h0ICogc2l6ZW9mKGludDhfdCkpOworICB9CisKKyAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGhlaWdodDsgaWkrKykgeworICAgIC8vIFRoaXMgbWFrZXMgdGhlIGRpcmVjdGlvbiBjb25zaXN0ZW50IG9uIHNjcmVlbiB3aGVuIHJvdGF0aW5nIHRoZQorICAgIC8vIHNjcmVlbjsKKyAgICBpbnQgaW52ZXJzZWlpID0gaGVpZ2h0IC0gaWkgLSAxOworICAgIGZvciAoaW50IGpqID0gMDsgamogPCB3aWR0aDsgamorKykgeworICAgICAgdGVtcFtqal1baW52ZXJzZWlpXSA9IGJpdGFycmF5W2lpXVtqal07CisgICAgfQorICB9CisgIHJldHVybiB0ZW1wOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEuaCBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0JhcmNvZGVNZXRhZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZmI3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAaW50ZXJmYWNlIFpYUERGNDE3QmFyY29kZU1ldGFkYXRhIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBjb2x1bW5Db3VudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgZXJyb3JDb3JyZWN0aW9uTGV2ZWw7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IHJvd0NvdW50VXBwZXJQYXJ0OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCByb3dDb3VudExvd2VyUGFydDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgcm93Q291bnQ7CisKKy0gKGlkKWluaXRXaXRoQ29sdW1uQ291bnQ6KGludCljb2x1bW5Db3VudCByb3dDb3VudFVwcGVyUGFydDooaW50KXJvd0NvdW50VXBwZXJQYXJ0IHJvd0NvdW50TG93ZXJQYXJ0OihpbnQpcm93Q291bnRMb3dlclBhcnQKKyAgICAgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6KGludCllcnJvckNvcnJlY3Rpb25MZXZlbDsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3QmFyY29kZU1ldGFkYXRhLm0gYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTczYmJlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3QmFyY29kZU1ldGFkYXRhLm0KQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEuaCIKKworQGltcGxlbWVudGF0aW9uIFpYUERGNDE3QmFyY29kZU1ldGFkYXRhCisKKy0gKGlkKWluaXRXaXRoQ29sdW1uQ291bnQ6KGludCljb2x1bW5Db3VudCByb3dDb3VudFVwcGVyUGFydDooaW50KXJvd0NvdW50VXBwZXJQYXJ0IHJvd0NvdW50TG93ZXJQYXJ0OihpbnQpcm93Q291bnRMb3dlclBhcnQKKyAgICAgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6KGludCllcnJvckNvcnJlY3Rpb25MZXZlbCB7CisgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgIGlmIChzZWxmKSB7CisgICAgX2NvbHVtbkNvdW50ID0gY29sdW1uQ291bnQ7CisgICAgX2Vycm9yQ29ycmVjdGlvbkxldmVsID0gZXJyb3JDb3JyZWN0aW9uTGV2ZWw7CisgICAgX3Jvd0NvdW50VXBwZXJQYXJ0ID0gcm93Q291bnRVcHBlclBhcnQ7CisgICAgX3Jvd0NvdW50TG93ZXJQYXJ0ID0gcm93Q291bnRMb3dlclBhcnQ7CisgICAgX3Jvd0NvdW50ID0gcm93Q291bnRVcHBlclBhcnQgKyByb3dDb3VudExvd2VyUGFydDsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdCYXJjb2RlVmFsdWUuaCBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0JhcmNvZGVWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NTVjNzQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdCYXJjb2RlVmFsdWUuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAaW50ZXJmYWNlIFpYUERGNDE3QmFyY29kZVZhbHVlIDogTlNPYmplY3QKKworLSAodm9pZClzZXRWYWx1ZTooaW50KXZhbHVlOworLSAoTlNBcnJheSAqKXZhbHVlOworLSAoTlNOdW1iZXIgKiljb25maWRlbmNlOihpbnQpdmFsdWU7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0JhcmNvZGVWYWx1ZS5tIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3QmFyY29kZVZhbHVlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0Nzk0YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0JhcmNvZGVWYWx1ZS5tCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUERGNDE3QmFyY29kZVZhbHVlLmgiCisKK0BpbnRlcmZhY2UgWlhQREY0MTdCYXJjb2RlVmFsdWUgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlRGljdGlvbmFyeSAqdmFsdWVzOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWFBERjQxN0JhcmNvZGVWYWx1ZQorCistIChpZClpbml0IHsKKyAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgaWYgKHNlbGYpIHsKKyAgICBfdmFsdWVzID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRWYWx1ZTooaW50KXZhbHVlIHsKKyAgTlNOdW1iZXIgKmNvbmZpZGVuY2UgPSBzZWxmLnZhbHVlc1tAKHZhbHVlKV07CisgIGlmICghY29uZmlkZW5jZSkgeworICAgIGNvbmZpZGVuY2UgPSBAMDsKKyAgfQorICBjb25maWRlbmNlID0gQChbY29uZmlkZW5jZSBpbnRWYWx1ZV0gKyAxKTsKKyAgc2VsZi52YWx1ZXNbQCh2YWx1ZSldID0gY29uZmlkZW5jZTsKK30KKworLyoqCisgKiBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG9jY3VycmVuY2Ugb2YgYSBzZXQgdmFsdWUgYW5kIHJldHVybnMgYWxsIHZhbHVlcyB3aGljaCB3ZXJlIHNldCB3aXRoIHRoaXMgb2NjdXJyZW5jZS4KKyAqIFJldHVybnMgYW4gYXJyYXkgb2YgaW50LCBjb250YWluaW5nIHRoZSB2YWx1ZXMgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlLCBvciBudWxsLCBpZiBubyB2YWx1ZSB3YXMgc2V0CisgKi8KKy0gKE5TQXJyYXkgKil2YWx1ZSB7CisgIGludCBtYXhDb25maWRlbmNlID0gLTE7CisgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICBmb3IgKE5TTnVtYmVyICprZXkgaW4gW3NlbGYudmFsdWVzIGFsbEtleXNdKSB7CisgICAgTlNOdW1iZXIgKnZhbHVlID0gc2VsZi52YWx1ZXNba2V5XTsKKyAgICBpZiAoW3ZhbHVlIGludFZhbHVlXSA+IG1heENvbmZpZGVuY2UpIHsKKyAgICAgIG1heENvbmZpZGVuY2UgPSBbdmFsdWUgaW50VmFsdWVdOworICAgICAgW3Jlc3VsdCByZW1vdmVBbGxPYmplY3RzXTsKKyAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmtleV07CisgICAgfSBlbHNlIGlmIChbdmFsdWUgaW50VmFsdWVdID09IG1heENvbmZpZGVuY2UpIHsKKyAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmtleV07CisgICAgfQorICB9CisgIHJldHVybiBbW1tyZXN1bHQgc29ydGVkQXJyYXlVc2luZ1NlbGVjdG9yOkBzZWxlY3Rvcihjb21wYXJlOildIHJldmVyc2VPYmplY3RFbnVtZXJhdG9yXSBhbGxPYmplY3RzXTsKK30KKworLSAoTlNOdW1iZXIgKiljb25maWRlbmNlOihpbnQpdmFsdWUgeworICByZXR1cm4gc2VsZi52YWx1ZXNbQCh2YWx1ZSldOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdCb3VuZGluZ0JveC5oIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3Qm91bmRpbmdCb3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzcyZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3Qm91bmRpbmdCb3guaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAY2xhc3MgWlhCaXRNYXRyaXgsIFpYUmVzdWx0UG9pbnQ7CisKK0BpbnRlcmZhY2UgWlhQREY0MTdCb3VuZGluZ0JveCA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgbWluWDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgbWF4WDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgbWluWTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgbWF4WTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBaWFJlc3VsdFBvaW50ICp0b3BMZWZ0OworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhSZXN1bHRQb2ludCAqdG9wUmlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgWlhSZXN1bHRQb2ludCAqYm90dG9tTGVmdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYUmVzdWx0UG9pbnQgKmJvdHRvbVJpZ2h0OworCistIChpZClpbml0V2l0aEltYWdlOihaWEJpdE1hdHJpeCAqKWltYWdlIHRvcExlZnQ6KFpYUmVzdWx0UG9pbnQgKil0b3BMZWZ0IGJvdHRvbUxlZnQ6KFpYUmVzdWx0UG9pbnQgKilib3R0b21MZWZ0CisgICAgICAgICAgIHRvcFJpZ2h0OihaWFJlc3VsdFBvaW50ICopdG9wUmlnaHQgYm90dG9tUmlnaHQ6KFpYUmVzdWx0UG9pbnQgKilib3R0b21SaWdodDsKKy0gKGlkKWluaXRXaXRoQm91bmRpbmdCb3g6KFpYUERGNDE3Qm91bmRpbmdCb3ggKilib3VuZGluZ0JveDsKKworKyAoWlhQREY0MTdCb3VuZGluZ0JveCAqKW1lcmdlTGVmdEJveDooWlhQREY0MTdCb3VuZGluZ0JveCAqKWxlZnRCb3ggcmlnaHRCb3g6KFpYUERGNDE3Qm91bmRpbmdCb3ggKilyaWdodEJveDsKKy0gKFpYUERGNDE3Qm91bmRpbmdCb3ggKilhZGRNaXNzaW5nUm93czooaW50KW1pc3NpbmdTdGFydFJvd3MgbWlzc2luZ0VuZFJvd3M6KGludCltaXNzaW5nRW5kUm93cyBpc0xlZnQ6KEJPT0wpaXNMZWZ0OworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdCb3VuZGluZ0JveC5tIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3Qm91bmRpbmdCb3gubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjQ0YjhjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3Qm91bmRpbmdCb3gubQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYUERGNDE3Qm91bmRpbmdCb3guaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKworQGludGVyZmFjZSBaWFBERjQxN0JvdW5kaW5nQm94ICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYQml0TWF0cml4ICppbWFnZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBtaW5YOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IG1heFg7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbWluWTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBtYXhZOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWFBERjQxN0JvdW5kaW5nQm94CisKKy0gKGlkKWluaXRXaXRoSW1hZ2U6KFpYQml0TWF0cml4ICopaW1hZ2UgdG9wTGVmdDooWlhSZXN1bHRQb2ludCAqKXRvcExlZnQgYm90dG9tTGVmdDooWlhSZXN1bHRQb2ludCAqKWJvdHRvbUxlZnQKKyAgICAgICAgICAgdG9wUmlnaHQ6KFpYUmVzdWx0UG9pbnQgKil0b3BSaWdodCBib3R0b21SaWdodDooWlhSZXN1bHRQb2ludCAqKWJvdHRvbVJpZ2h0IHsKKyAgaWYgKCghdG9wTGVmdCAmJiAhdG9wUmlnaHQpIHx8ICghYm90dG9tTGVmdCAmJiAhYm90dG9tUmlnaHQpIHx8CisgICAgICAodG9wTGVmdCAmJiAhYm90dG9tTGVmdCkgfHwgKHRvcFJpZ2h0ICYmICFib3R0b21SaWdodCkpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgaWYgKHNlbGYpIHsKKyAgICBfaW1hZ2UgPSBpbWFnZTsKKyAgICBfdG9wTGVmdCA9IHRvcExlZnQ7CisgICAgX2JvdHRvbUxlZnQgPSBib3R0b21MZWZ0OworICAgIF90b3BSaWdodCA9IHRvcFJpZ2h0OworICAgIF9ib3R0b21SaWdodCA9IGJvdHRvbVJpZ2h0OworICAgIFtzZWxmIGNhbGN1bGF0ZU1pbk1heFZhbHVlc107CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQpaW5pdFdpdGhCb3VuZGluZ0JveDooWlhQREY0MTdCb3VuZGluZ0JveCAqKWJvdW5kaW5nQm94IHsKKyAgcmV0dXJuIFtzZWxmIGluaXRXaXRoSW1hZ2U6Ym91bmRpbmdCb3guaW1hZ2UgdG9wTGVmdDpib3VuZGluZ0JveC50b3BMZWZ0IGJvdHRvbUxlZnQ6Ym91bmRpbmdCb3guYm90dG9tTGVmdAorICAgICAgICAgICAgICAgICAgICB0b3BSaWdodDpib3VuZGluZ0JveC50b3BSaWdodCBib3R0b21SaWdodDpib3VuZGluZ0JveC5ib3R0b21SaWdodF07Cit9CisKKysgKFpYUERGNDE3Qm91bmRpbmdCb3ggKiltZXJnZUxlZnRCb3g6KFpYUERGNDE3Qm91bmRpbmdCb3ggKilsZWZ0Qm94IHJpZ2h0Qm94OihaWFBERjQxN0JvdW5kaW5nQm94ICopcmlnaHRCb3ggeworICBpZiAoIWxlZnRCb3gpIHsKKyAgICByZXR1cm4gcmlnaHRCb3g7CisgIH0KKyAgaWYgKCFyaWdodEJveCkgeworICAgIHJldHVybiBsZWZ0Qm94OworICB9CisgIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoSW1hZ2U6bGVmdEJveC5pbWFnZSB0b3BMZWZ0OmxlZnRCb3gudG9wTGVmdCBib3R0b21MZWZ0OmxlZnRCb3guYm90dG9tTGVmdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0OnJpZ2h0Qm94LnRvcFJpZ2h0IGJvdHRvbVJpZ2h0OnJpZ2h0Qm94LmJvdHRvbVJpZ2h0XTsKK30KKworLSAoWlhQREY0MTdCb3VuZGluZ0JveCAqKWFkZE1pc3NpbmdSb3dzOihpbnQpbWlzc2luZ1N0YXJ0Um93cyBtaXNzaW5nRW5kUm93czooaW50KW1pc3NpbmdFbmRSb3dzIGlzTGVmdDooQk9PTClpc0xlZnQgeworICBaWFJlc3VsdFBvaW50ICpuZXdUb3BMZWZ0ID0gc2VsZi50b3BMZWZ0OworICBaWFJlc3VsdFBvaW50ICpuZXdCb3R0b21MZWZ0ID0gc2VsZi5ib3R0b21MZWZ0OworICBaWFJlc3VsdFBvaW50ICpuZXdUb3BSaWdodCA9IHNlbGYudG9wUmlnaHQ7CisgIFpYUmVzdWx0UG9pbnQgKm5ld0JvdHRvbVJpZ2h0ID0gc2VsZi5ib3R0b21SaWdodDsKKworICBpZiAobWlzc2luZ1N0YXJ0Um93cyA+IDApIHsKKyAgICBaWFJlc3VsdFBvaW50ICp0b3AgPSBpc0xlZnQgPyBzZWxmLnRvcExlZnQgOiBzZWxmLnRvcFJpZ2h0OworICAgIGludCBuZXdNaW5ZID0gKGludCkgdG9wLnkgLSBtaXNzaW5nU3RhcnRSb3dzOworICAgIGlmIChuZXdNaW5ZIDwgMCkgeworICAgICAgbmV3TWluWSA9IDA7CisgICAgfQorICAgIC8vIFRPRE8gdXNlIGV4aXN0aW5nIHBvaW50cyB0byBiZXR0ZXIgaW50ZXJwb2xhdGUgdGhlIG5ldyB4IHBvc2l0aW9ucworICAgIFpYUmVzdWx0UG9pbnQgKm5ld1RvcCA9IFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOnRvcC54IHk6bmV3TWluWV07CisgICAgaWYgKGlzTGVmdCkgeworICAgICAgbmV3VG9wTGVmdCA9IG5ld1RvcDsKKyAgICB9IGVsc2UgeworICAgICAgbmV3VG9wUmlnaHQgPSBuZXdUb3A7CisgICAgfQorICB9CisKKyAgaWYgKG1pc3NpbmdFbmRSb3dzID4gMCkgeworICAgIFpYUmVzdWx0UG9pbnQgKmJvdHRvbSA9IGlzTGVmdCA/IHNlbGYuYm90dG9tTGVmdCA6IHNlbGYuYm90dG9tUmlnaHQ7CisgICAgaW50IG5ld01heFkgPSAoaW50KSBib3R0b20ueSArIG1pc3NpbmdFbmRSb3dzOworICAgIGlmIChuZXdNYXhZID49IHNlbGYuaW1hZ2UuaGVpZ2h0KSB7CisgICAgICBuZXdNYXhZID0gc2VsZi5pbWFnZS5oZWlnaHQgLSAxOworICAgIH0KKyAgICAvLyBUT0RPIHVzZSBleGlzdGluZyBwb2ludHMgdG8gYmV0dGVyIGludGVycG9sYXRlIHRoZSBuZXcgeCBwb3NpdGlvbnMKKyAgICBaWFJlc3VsdFBvaW50ICpuZXdCb3R0b20gPSBbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDpib3R0b20ueCB5Om5ld01heFldOworICAgIGlmIChpc0xlZnQpIHsKKyAgICAgIG5ld0JvdHRvbUxlZnQgPSBuZXdCb3R0b207CisgICAgfSBlbHNlIHsKKyAgICAgIG5ld0JvdHRvbVJpZ2h0ID0gbmV3Qm90dG9tOworICAgIH0KKyAgfQorICBbc2VsZiBjYWxjdWxhdGVNaW5NYXhWYWx1ZXNdOworICByZXR1cm4gW1taWFBERjQxN0JvdW5kaW5nQm94IGFsbG9jXSBpbml0V2l0aEltYWdlOnNlbGYuaW1hZ2UgdG9wTGVmdDpuZXdUb3BMZWZ0IGJvdHRvbUxlZnQ6bmV3Qm90dG9tTGVmdCB0b3BSaWdodDpuZXdUb3BSaWdodCBib3R0b21SaWdodDpuZXdCb3R0b21SaWdodF07Cit9CisKKy0gKHZvaWQpY2FsY3VsYXRlTWluTWF4VmFsdWVzIHsKKyAgaWYgKCFzZWxmLnRvcExlZnQpIHsKKyAgICBfdG9wTGVmdCA9IFtbWlhSZXN1bHRQb2ludCBhbGxvY10gaW5pdFdpdGhYOjAgeTpzZWxmLnRvcFJpZ2h0LnldOworICAgIF9ib3R0b21MZWZ0ID0gW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6MCB5OnNlbGYuYm90dG9tUmlnaHQueV07CisgIH0gZWxzZSBpZiAoIXNlbGYudG9wUmlnaHQpIHsKKyAgICBfdG9wUmlnaHQgPSBbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDpzZWxmLmltYWdlLndpZHRoIC0gMSB5OnNlbGYudG9wTGVmdC55XTsKKyAgICBfYm90dG9tUmlnaHQgPSBbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDpzZWxmLmltYWdlLndpZHRoIC0gMSB5OnNlbGYuYm90dG9tTGVmdC55XTsKKyAgfQorCisgIHNlbGYubWluWCA9IChpbnQpIE1JTihzZWxmLnRvcExlZnQueCwgc2VsZi5ib3R0b21MZWZ0LngpOworICBzZWxmLm1heFggPSAoaW50KSBNQVgoc2VsZi50b3BSaWdodC54LCBzZWxmLmJvdHRvbVJpZ2h0LngpOworICBzZWxmLm1pblkgPSAoaW50KSBNSU4oc2VsZi50b3BMZWZ0LnksIHNlbGYudG9wUmlnaHQueSk7CisgIHNlbGYubWF4WSA9IChpbnQpIE1BWChzZWxmLmJvdHRvbUxlZnQueSwgc2VsZi5ib3R0b21SaWdodC55KTsKK30KKworLSAodm9pZClzZXRUb3BSaWdodDooWlhSZXN1bHRQb2ludCAqKXRvcFJpZ2h0IHsKKyAgX3RvcFJpZ2h0ID0gdG9wUmlnaHQ7CisgIFtzZWxmIGNhbGN1bGF0ZU1pbk1heFZhbHVlc107Cit9CisKKy0gKHZvaWQpc2V0Qm90dG9tUmlnaHQ6KFpYUmVzdWx0UG9pbnQgKilib3R0b21SaWdodCB7CisgIF9ib3R0b21SaWdodCA9IGJvdHRvbVJpZ2h0OworICBbc2VsZiBjYWxjdWxhdGVNaW5NYXhWYWx1ZXNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdDb2Rld29yZC5oIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3Q29kZXdvcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjRiZjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3Q29kZXdvcmQuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAaW50ZXJmYWNlIFpYUERGNDE3Q29kZXdvcmQgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IHN0YXJ0WDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgZW5kWDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgYnVja2V0OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCB2YWx1ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCByb3dOdW1iZXI7CisKKy0gKGlkKWluaXRXaXRoU3RhcnRYOihpbnQpc3RhcnRYIGVuZFg6KGludCllbmRYIGJ1Y2tldDooaW50KWJ1Y2tldCB2YWx1ZTooaW50KXZhbHVlOworLSAoQk9PTCloYXNWYWxpZFJvd051bWJlcjsKKy0gKEJPT0wpaXNWYWxpZFJvd051bWJlcjooaW50KXJvd051bWJlcjsKKy0gKHZvaWQpc2V0Um93TnVtYmVyQXNSb3dJbmRpY2F0b3JDb2x1bW47CistIChpbnQpd2lkdGg7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0NvZGV3b3JkLm0gYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdDb2Rld29yZC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNTkxMzcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdDb2Rld29yZC5tCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUERGNDE3Q29kZXdvcmQuaCIKKworY29uc3QgaW50IEJBUkNPREVfUk9XX1VOS05PV04gPSAtMTsKKworQGltcGxlbWVudGF0aW9uIFpYUERGNDE3Q29kZXdvcmQKKworLSAoaWQpaW5pdFdpdGhTdGFydFg6KGludClzdGFydFggZW5kWDooaW50KWVuZFggYnVja2V0OihpbnQpYnVja2V0IHZhbHVlOihpbnQpdmFsdWUgeworICBzZWxmID0gW3N1cGVyIGluaXRdOworICBpZiAoc2VsZikgeworICAgIF9zdGFydFggPSBzdGFydFg7CisgICAgX2VuZFggPSBlbmRYOworICAgIF9idWNrZXQgPSBidWNrZXQ7CisgICAgX3ZhbHVlID0gdmFsdWU7CisgICAgX3Jvd051bWJlciA9IEJBUkNPREVfUk9XX1VOS05PV047CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoQk9PTCloYXNWYWxpZFJvd051bWJlciB7CisgIHJldHVybiBbc2VsZiBpc1ZhbGlkUm93TnVtYmVyOnNlbGYucm93TnVtYmVyXTsKK30KKworLSAoQk9PTClpc1ZhbGlkUm93TnVtYmVyOihpbnQpcm93TnVtYmVyIHsKKyAgcmV0dXJuIHJvd051bWJlciAhPSBCQVJDT0RFX1JPV19VTktOT1dOICYmIHNlbGYuYnVja2V0ID09IChyb3dOdW1iZXIgJSAzKSAqIDM7Cit9CisKKy0gKHZvaWQpc2V0Um93TnVtYmVyQXNSb3dJbmRpY2F0b3JDb2x1bW4geworICBzZWxmLnJvd051bWJlciA9IChzZWxmLnZhbHVlIC8gMzApICogMyArIHNlbGYuYnVja2V0IC8gMzsKK30KKworLSAoaW50KXdpZHRoIHsKKyAgcmV0dXJuIHNlbGYuZW5kWCAtIHNlbGYuc3RhcnRYOworfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKKyAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWR8JWQiLCBzZWxmLnJvd051bWJlciwgc2VsZi52YWx1ZV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5oIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3Q29kZXdvcmREZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwZTM0NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BpbnRlcmZhY2UgWlhQREY0MTdDb2Rld29yZERlY29kZXIgOiBOU09iamVjdAorCisrIChpbnQpZGVjb2RlZFZhbHVlOihOU0FycmF5ICopbW9kdWxlQml0Q291bnQ7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5tIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3Q29kZXdvcmREZWNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3ODk1ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5tCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFBERjQxN0NvZGV3b3JkRGVjb2Rlci5oIgorI2ltcG9ydCAiWlhQREY0MTdDb21tb24uaCIKKworc3RhdGljIGZsb2F0IFpYUERGNDE3X1JBVElPU19UQUJMRVtaWFBERjQxN19TWU1CT0xfVEFCTEVfTEVOXVtaWFBERjQxN19CQVJTX0lOX01PRFVMRV07CisKK0BpbXBsZW1lbnRhdGlvbiBaWFBERjQxN0NvZGV3b3JkRGVjb2RlcgorCisrICh2b2lkKWluaXRpYWxpemUgeworICAvLyBQcmUtY29tcHV0ZXMgdGhlIHN5bWJvbCByYXRpbyB0YWJsZS4KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBaWFBERjQxN19TWU1CT0xfVEFCTEVfTEVOOyBpKyspIHsKKyAgICBpbnQgY3VycmVudFN5bWJvbCA9IFpYUERGNDE3X1NZTUJPTF9UQUJMRVtpXTsKKyAgICBpbnQgY3VycmVudEJpdCA9IGN1cnJlbnRTeW1ib2wgJiAweDE7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBaWFBERjQxN19CQVJTX0lOX01PRFVMRTsgaisrKSB7CisgICAgICBmbG9hdCBzaXplID0gMC4wZjsKKyAgICAgIHdoaWxlICgoY3VycmVudFN5bWJvbCAmIDB4MSkgPT0gY3VycmVudEJpdCkgeworICAgICAgICBzaXplICs9IDEuMGY7CisgICAgICAgIGN1cnJlbnRTeW1ib2wgPj49IDE7CisgICAgICB9CisgICAgICBjdXJyZW50Qml0ID0gY3VycmVudFN5bWJvbCAmIDB4MTsKKyAgICAgIFpYUERGNDE3X1JBVElPU19UQUJMRVtpXVtaWFBERjQxN19CQVJTX0lOX01PRFVMRSAtIGogLSAxXSA9IHNpemUgLyBaWFBERjQxN19NT0RVTEVTX0lOX0NPREVXT1JEOworICAgIH0KKyAgfQorfQorCisrIChpbnQpZGVjb2RlZFZhbHVlOihOU0FycmF5ICopbW9kdWxlQml0Q291bnQgeworICBpbnQgZGVjb2RlZFZhbHVlID0gW3NlbGYgZGVjb2RlZENvZGV3b3JkVmFsdWU6W3NlbGYgc2FtcGxlQml0Q291bnRzOm1vZHVsZUJpdENvdW50XV07CisgIGlmIChkZWNvZGVkVmFsdWUgIT0gLTEpIHsKKyAgICByZXR1cm4gZGVjb2RlZFZhbHVlOworICB9CisgIHJldHVybiBbc2VsZiBjbG9zZXN0RGVjb2RlZFZhbHVlOm1vZHVsZUJpdENvdW50XTsKK30KKworKyAoTlNBcnJheSAqKXNhbXBsZUJpdENvdW50czooTlNBcnJheSAqKW1vZHVsZUJpdENvdW50IHsKKyAgZmxvYXQgYml0Q291bnRTdW0gPSBbWlhQREY0MTdDb21tb24gYml0Q291bnRTdW06bW9kdWxlQml0Q291bnRdOworICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OlpYUERGNDE3X0JBUlNfSU5fTU9EVUxFXTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBaWFBERjQxN19CQVJTX0lOX01PRFVMRTsgaSsrKSB7CisgICAgW3Jlc3VsdCBhZGRPYmplY3Q6QDBdOworICB9CisKKyAgaW50IGJpdENvdW50SW5kZXggPSAwOworICBpbnQgc3VtUHJldmlvdXNCaXRzID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBaWFBERjQxN19NT0RVTEVTX0lOX0NPREVXT1JEOyBpKyspIHsKKyAgICBmbG9hdCBzYW1wbGVJbmRleCA9CisgICAgICBiaXRDb3VudFN1bSAvICgyICogWlhQREY0MTdfTU9EVUxFU19JTl9DT0RFV09SRCkgKworICAgICAgKGkgKiBiaXRDb3VudFN1bSkgLyBaWFBERjQxN19NT0RVTEVTX0lOX0NPREVXT1JEOworICAgIGlmIChzdW1QcmV2aW91c0JpdHMgKyBbbW9kdWxlQml0Q291bnRbYml0Q291bnRJbmRleF0gaW50VmFsdWVdIDw9IHNhbXBsZUluZGV4KSB7CisgICAgICBzdW1QcmV2aW91c0JpdHMgKz0gW21vZHVsZUJpdENvdW50W2JpdENvdW50SW5kZXhdIGludFZhbHVlXTsKKyAgICAgIGJpdENvdW50SW5kZXgrKzsKKyAgICB9CisgICAgcmVzdWx0W2JpdENvdW50SW5kZXhdID0gQChbcmVzdWx0W2JpdENvdW50SW5kZXhdIGludFZhbHVlXSArIDEpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKysgKGludClkZWNvZGVkQ29kZXdvcmRWYWx1ZTooTlNBcnJheSAqKW1vZHVsZUJpdENvdW50IHsKKyAgaW50IGRlY29kZWRWYWx1ZSA9IFtzZWxmIGJpdFZhbHVlOm1vZHVsZUJpdENvdW50XTsKKyAgcmV0dXJuIFtaWFBERjQxN0NvbW1vbiBjb2Rld29yZDpkZWNvZGVkVmFsdWVdID09IC0xID8gLTEgOiBkZWNvZGVkVmFsdWU7Cit9CisKKysgKGludCliaXRWYWx1ZTooTlNBcnJheSAqKW1vZHVsZUJpdENvdW50IHsKKyAgbG9uZyByZXN1bHQgPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IFttb2R1bGVCaXRDb3VudCBjb3VudF07IGkrKykgeworICAgIGZvciAoaW50IGJpdCA9IDA7IGJpdCA8IFttb2R1bGVCaXRDb3VudFtpXSBpbnRWYWx1ZV07IGJpdCsrKSB7CisgICAgICByZXN1bHQgPSAocmVzdWx0IDw8IDEpIHwgKGkgJSAyID09IDAgPyAxIDogMCk7CisgICAgfQorICB9CisgIHJldHVybiAoaW50KSByZXN1bHQ7Cit9CisKKysgKGludCljbG9zZXN0RGVjb2RlZFZhbHVlOihOU0FycmF5ICopbW9kdWxlQml0Q291bnQgeworICBpbnQgYml0Q291bnRTdW0gPSBbWlhQREY0MTdDb21tb24gYml0Q291bnRTdW06bW9kdWxlQml0Q291bnRdOworICBmbG9hdCBiaXRDb3VudFJhdGlvc1taWFBERjQxN19CQVJTX0lOX01PRFVMRV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgWlhQREY0MTdfQkFSU19JTl9NT0RVTEU7IGkrKykgeworICAgIGJpdENvdW50UmF0aW9zW2ldID0gW21vZHVsZUJpdENvdW50W2ldIGludFZhbHVlXSAvIChmbG9hdCkgYml0Q291bnRTdW07CisgIH0KKyAgZmxvYXQgYmVzdE1hdGNoRXJyb3IgPSBNQVhGTE9BVDsKKyAgaW50IGJlc3RNYXRjaCA9IC0xOworICBmb3IgKGludCBqID0gMDsgaiA8IFpYUERGNDE3X1NZTUJPTF9UQUJMRV9MRU47IGorKykgeworICAgIGZsb2F0IGVycm9yID0gMC4wZjsKKyAgICBmb3IgKGludCBrID0gMDsgayA8IFpYUERGNDE3X0JBUlNfSU5fTU9EVUxFOyBrKyspIHsKKyAgICAgIGZsb2F0IGRpZmYgPSBaWFBERjQxN19SQVRJT1NfVEFCTEVbal1ba10gLSBiaXRDb3VudFJhdGlvc1trXTsKKyAgICAgIGVycm9yICs9IGRpZmYgKiBkaWZmOworICAgIH0KKyAgICBpZiAoZXJyb3IgPCBiZXN0TWF0Y2hFcnJvcikgeworICAgICAgYmVzdE1hdGNoRXJyb3IgPSBlcnJvcjsKKyAgICAgIGJlc3RNYXRjaCA9IFpYUERGNDE3X1NZTUJPTF9UQUJMRVtqXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGJlc3RNYXRjaDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OTBkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBtZXRob2RzIGZvciBkZWNvZGluZyB0aGUgUERGNDE3IGNvZGV3b3Jkcy4KKyAqLworCitAY2xhc3MgWlhEZWNvZGVyUmVzdWx0OworCitAaW50ZXJmYWNlIFpYUERGNDE3RGVjb2RlZEJpdFN0cmVhbVBhcnNlciA6IE5TT2JqZWN0CisKKysgKFpYRGVjb2RlclJlc3VsdCAqKWRlY29kZTooTlNBcnJheSAqKWNvZGV3b3JkcyBlY0xldmVsOihOU1N0cmluZyAqKWVjTGV2ZWwgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTRjODAzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3RGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tCkBAIC0wLDAgKzEsNjAwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERlY29kZXJSZXN1bHQuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCIKKyNpbXBvcnQgIlpYUERGNDE3UmVzdWx0TWV0YWRhdGEuaCIKKworZW51bSB7CisgIEFMUEhBLAorICBMT1dFUiwKKyAgTUlYRUQsCisgIFBVTkNULAorICBBTFBIQV9TSElGVCwKKyAgUFVOQ1RfU0hJRlQKK307CisKK2ludCBjb25zdCBURVhUX0NPTVBBQ1RJT05fTU9ERV9MQVRDSCA9IDkwMDsKK2ludCBjb25zdCBCWVRFX0NPTVBBQ1RJT05fTU9ERV9MQVRDSCA9IDkwMTsKK2ludCBjb25zdCBOVU1FUklDX0NPTVBBQ1RJT05fTU9ERV9MQVRDSCA9IDkwMjsKK2ludCBjb25zdCBCWVRFX0NPTVBBQ1RJT05fTU9ERV9MQVRDSF82ID0gOTI0OworaW50IGNvbnN0IEJFR0lOX01BQ1JPX1BERjQxN19DT05UUk9MX0JMT0NLID0gOTI4OworaW50IGNvbnN0IEJFR0lOX01BQ1JPX1BERjQxN19PUFRJT05BTF9GSUVMRCA9IDkyMzsKK2ludCBjb25zdCBNQUNST19QREY0MTdfVEVSTUlOQVRPUiA9IDkyMjsKK2ludCBjb25zdCBNT0RFX1NISUZUX1RPX0JZVEVfQ09NUEFDVElPTl9NT0RFID0gOTEzOworaW50IGNvbnN0IE1BWF9OVU1FUklDX0NPREVXT1JEUyA9IDE1OworCitpbnQgY29uc3QgUEwgPSAyNTsKK2ludCBjb25zdCBMTCA9IDI3OworaW50IGNvbnN0IEFTID0gMjc7CitpbnQgY29uc3QgTUwgPSAyODsKK2ludCBjb25zdCBBTCA9IDI4OworaW50IGNvbnN0IFBTID0gMjk7CitpbnQgY29uc3QgUEFMID0gMjk7CisKK2NoYXIgY29uc3QgUFVOQ1RfQ0hBUlNbMjldID0geworICAnOycsICc8JywgJz4nLCAnQCcsICdbJywgJ1xcJywgJ30nLCAnXycsICdgJywgJ34nLCAnIScsCisgICdccicsICdcdCcsICcsJywgJzonLCAnXG4nLCAnLScsICcuJywgJyQnLCAnLycsICciJywgJ3wnLCAnKicsCisgICcoJywgJyknLCAnPycsICd7JywgJ30nLCAnXCcnfTsKKworY2hhciBjb25zdCBNSVhFRF9DSEFSU1syNV0gPSB7CisgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJyYnLAorICAnXHInLCAnXHQnLCAnLCcsICc6JywgJyMnLCAnLScsICcuJywgJyQnLCAnLycsICcrJywgJyUnLCAnKicsCisgICc9JywgJ14nfTsKKworaW50IGNvbnN0IE5VTUJFUl9PRl9TRVFVRU5DRV9DT0RFV09SRFMgPSAyOworCisvKioKKyAqIFRhYmxlIGNvbnRhaW5pbmcgdmFsdWVzIGZvciB0aGUgZXhwb25lbnQgb2YgOTAwLgorICogVGhpcyBpcyB1c2VkIGluIHRoZSBudW1lcmljIGNvbXBhY3Rpb24gZGVjb2RlIGFsZ29yaXRobS4KKyAqLworc3RhdGljIE5TQXJyYXkgKkVYUDkwMCA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFpYUERGNDE3RGVjb2RlZEJpdFN0cmVhbVBhcnNlcgorCisrICh2b2lkKWluaXRpYWxpemUgeworICBOU011dGFibGVBcnJheSAqZXhwb25lbnRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OjE2XTsKKyAgW2V4cG9uZW50cyBhZGRPYmplY3Q6W05TRGVjaW1hbE51bWJlciBvbmVdXTsKKyAgTlNEZWNpbWFsTnVtYmVyICpuaW5lSHVuZHJlZCA9IFtOU0RlY2ltYWxOdW1iZXIgZGVjaW1hbE51bWJlcldpdGhTdHJpbmc6QCI5MDAiXTsKKyAgW2V4cG9uZW50cyBhZGRPYmplY3Q6bmluZUh1bmRyZWRdOworICBmb3IgKGludCBpID0gMjsgaSA8IDE2OyBpKyspIHsKKyAgICBbZXhwb25lbnRzIGFkZE9iamVjdDpbZXhwb25lbnRzW2kgLSAxXSBkZWNpbWFsTnVtYmVyQnlNdWx0aXBseWluZ0J5Om5pbmVIdW5kcmVkXV07CisgIH0KKyAgRVhQOTAwID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmV4cG9uZW50c107Cit9CisKKysgKFpYRGVjb2RlclJlc3VsdCAqKWRlY29kZTooTlNBcnJheSAqKWNvZGV3b3JkcyBlY0xldmVsOihOU1N0cmluZyAqKWVjTGV2ZWwgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoIWNvZGV3b3JkcykgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OmNvZGV3b3Jkcy5jb3VudCAqIDJdOworICAvLyBHZXQgY29tcGFjdGlvbiBtb2RlCisgIGludCBjb2RlSW5kZXggPSAxOworICBpbnQgY29kZSA9IFtjb2Rld29yZHNbY29kZUluZGV4KytdIGludFZhbHVlXTsKKyAgWlhQREY0MTdSZXN1bHRNZXRhZGF0YSAqcmVzdWx0TWV0YWRhdGEgPSBbW1pYUERGNDE3UmVzdWx0TWV0YWRhdGEgYWxsb2NdIGluaXRdOworICB3aGlsZSAoY29kZUluZGV4IDwgW2NvZGV3b3Jkc1swXSBpbnRWYWx1ZV0pIHsKKyAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICBjYXNlIFRFWFRfQ09NUEFDVElPTl9NT0RFX0xBVENIOgorICAgICAgY29kZUluZGV4ID0gW3NlbGYgdGV4dENvbXBhY3Rpb246Y29kZXdvcmRzIGNvZGVJbmRleDpjb2RlSW5kZXggcmVzdWx0OnJlc3VsdF07CisgICAgICBicmVhazsKKyAgICBjYXNlIEJZVEVfQ09NUEFDVElPTl9NT0RFX0xBVENIOgorICAgICAgY29kZUluZGV4ID0gW3NlbGYgYnl0ZUNvbXBhY3Rpb246Y29kZSBjb2Rld29yZHM6Y29kZXdvcmRzIGNvZGVJbmRleDpjb2RlSW5kZXggcmVzdWx0OnJlc3VsdF07CisgICAgICBicmVhazsKKyAgICBjYXNlIE5VTUVSSUNfQ09NUEFDVElPTl9NT0RFX0xBVENIOgorICAgICAgY29kZUluZGV4ID0gW3NlbGYgbnVtZXJpY0NvbXBhY3Rpb246Y29kZXdvcmRzIGNvZGVJbmRleDpjb2RlSW5kZXggcmVzdWx0OnJlc3VsdF07CisgICAgICBicmVhazsKKyAgICBjYXNlIE1PREVfU0hJRlRfVE9fQllURV9DT01QQUNUSU9OX01PREU6CisgICAgICBjb2RlSW5kZXggPSBbc2VsZiBieXRlQ29tcGFjdGlvbjpjb2RlIGNvZGV3b3Jkczpjb2Rld29yZHMgY29kZUluZGV4OmNvZGVJbmRleCByZXN1bHQ6cmVzdWx0XTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQllURV9DT01QQUNUSU9OX01PREVfTEFUQ0hfNjoKKyAgICAgIGNvZGVJbmRleCA9IFtzZWxmIGJ5dGVDb21wYWN0aW9uOmNvZGUgY29kZXdvcmRzOmNvZGV3b3JkcyBjb2RlSW5kZXg6Y29kZUluZGV4IHJlc3VsdDpyZXN1bHRdOworICAgICAgYnJlYWs7CisgICAgY2FzZSBCRUdJTl9NQUNST19QREY0MTdfQ09OVFJPTF9CTE9DSzoKKyAgICAgIGNvZGVJbmRleCA9IFtzZWxmIGRlY29kZU1hY3JvQmxvY2s6Y29kZXdvcmRzIGNvZGVJbmRleDpjb2RlSW5kZXggcmVzdWx0TWV0YWRhdGE6cmVzdWx0TWV0YWRhdGFdOworICAgICAgaWYgKGNvZGVJbmRleCA8IDApIHsKKyAgICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvLyBEZWZhdWx0IHRvIHRleHQgY29tcGFjdGlvbi4gRHVyaW5nIHRlc3RpbmcgbnVtZXJvdXMgYmFyY29kZXMKKyAgICAgIC8vIGFwcGVhcmVkIHRvIGJlIG1pc3NpbmcgdGhlIHN0YXJ0aW5nIG1vZGUuIEluIHRoZXNlIGNhc2VzIGRlZmF1bHRpbmcKKyAgICAgIC8vIHRvIHRleHQgY29tcGFjdGlvbiBzZWVtcyB0byB3b3JrLgorICAgICAgY29kZUluZGV4LS07CisgICAgICBjb2RlSW5kZXggPSBbc2VsZiB0ZXh0Q29tcGFjdGlvbjpjb2Rld29yZHMgY29kZUluZGV4OmNvZGVJbmRleCByZXN1bHQ6cmVzdWx0XTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoY29kZUluZGV4IDwgW2NvZGV3b3JkcyBjb3VudF0pIHsKKyAgICAgIGNvZGUgPSBbY29kZXdvcmRzW2NvZGVJbmRleCsrXSBpbnRWYWx1ZV07CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgfQorICBpZiAoW3Jlc3VsdCBsZW5ndGhdID09IDApIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgWlhEZWNvZGVyUmVzdWx0ICpkZWNvZGVyUmVzdWx0ID0gW1taWERlY29kZXJSZXN1bHQgYWxsb2NdIGluaXRXaXRoUmF3Qnl0ZXM6TlVMTCBsZW5ndGg6MCB0ZXh0OnJlc3VsdCBieXRlU2VnbWVudHM6bmlsIGVjTGV2ZWw6ZWNMZXZlbF07CisgIGRlY29kZXJSZXN1bHQub3RoZXIgPSByZXN1bHRNZXRhZGF0YTsKKyAgcmV0dXJuIGRlY29kZXJSZXN1bHQ7Cit9CisKKysgKGludClkZWNvZGVNYWNyb0Jsb2NrOihOU0FycmF5ICopY29kZXdvcmRzIGNvZGVJbmRleDooaW50KWNvZGVJbmRleCByZXN1bHRNZXRhZGF0YTooWlhQREY0MTdSZXN1bHRNZXRhZGF0YSAqKXJlc3VsdE1ldGFkYXRhIHsKKyAgaWYgKGNvZGVJbmRleCArIE5VTUJFUl9PRl9TRVFVRU5DRV9DT0RFV09SRFMgPiBbY29kZXdvcmRzWzBdIGludFZhbHVlXSkgeworICAgIC8vIHdlIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gYnl0ZXMgbGVmdCBmb3IgdGhlIHNlZ21lbnQgaW5kZXgKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgaW50IHNlZ21lbnRJbmRleEFycmF5W05VTUJFUl9PRl9TRVFVRU5DRV9DT0RFV09SRFNdOworICBtZW1zZXQoc2VnbWVudEluZGV4QXJyYXksIDAsIE5VTUJFUl9PRl9TRVFVRU5DRV9DT0RFV09SRFMgKiBzaXplb2YoaW50KSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNQkVSX09GX1NFUVVFTkNFX0NPREVXT1JEUzsgaSsrLCBjb2RlSW5kZXgrKykgeworICAgIHNlZ21lbnRJbmRleEFycmF5W2ldID0gW2NvZGV3b3Jkc1tjb2RlSW5kZXhdIGludFZhbHVlXTsKKyAgfQorICByZXN1bHRNZXRhZGF0YS5zZWdtZW50SW5kZXggPSBbW3NlbGYgZGVjb2RlQmFzZTkwMHRvQmFzZTEwOnNlZ21lbnRJbmRleEFycmF5IGNvdW50Ok5VTUJFUl9PRl9TRVFVRU5DRV9DT0RFV09SRFNdIGludFZhbHVlXTsKKworICBOU011dGFibGVTdHJpbmcgKmZpbGVJZCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgY29kZUluZGV4ID0gW3NlbGYgdGV4dENvbXBhY3Rpb246Y29kZXdvcmRzIGNvZGVJbmRleDpjb2RlSW5kZXggcmVzdWx0OmZpbGVJZF07CisgIHJlc3VsdE1ldGFkYXRhLmZpbGVJZCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoU3RyaW5nOmZpbGVJZF07CisKKyAgaWYgKFtjb2Rld29yZHNbY29kZUluZGV4XSBpbnRWYWx1ZV0gPT0gQkVHSU5fTUFDUk9fUERGNDE3X09QVElPTkFMX0ZJRUxEKSB7CisgICAgY29kZUluZGV4Kys7CisgICAgTlNNdXRhYmxlQXJyYXkgKmFkZGl0aW9uYWxPcHRpb25Db2RlV29yZHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworCisgICAgQk9PTCBlbmQgPSBOTzsKKyAgICB3aGlsZSAoKGNvZGVJbmRleCA8IFtjb2Rld29yZHNbMF0gaW50VmFsdWVdKSAmJiAhZW5kKSB7CisgICAgICBpbnQgY29kZSA9IFtjb2Rld29yZHNbY29kZUluZGV4KytdIGludFZhbHVlXTsKKyAgICAgIGlmIChjb2RlIDwgVEVYVF9DT01QQUNUSU9OX01PREVfTEFUQ0gpIHsKKyAgICAgICAgW2FkZGl0aW9uYWxPcHRpb25Db2RlV29yZHMgYWRkT2JqZWN0OkAoY29kZSldOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgICAgY2FzZSBNQUNST19QREY0MTdfVEVSTUlOQVRPUjoKKyAgICAgICAgICAgIHJlc3VsdE1ldGFkYXRhLmxhc3RTZWdtZW50ID0gWUVTOworICAgICAgICAgICAgY29kZUluZGV4Kys7CisgICAgICAgICAgICBlbmQgPSBZRVM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0TWV0YWRhdGEub3B0aW9uYWxEYXRhID0gYWRkaXRpb25hbE9wdGlvbkNvZGVXb3JkczsKKyAgfSBlbHNlIGlmIChbY29kZXdvcmRzW2NvZGVJbmRleF0gaW50VmFsdWVdID09IE1BQ1JPX1BERjQxN19URVJNSU5BVE9SKSB7CisgICAgcmVzdWx0TWV0YWRhdGEubGFzdFNlZ21lbnQgPSBZRVM7CisgICAgY29kZUluZGV4Kys7CisgIH0KKworICByZXR1cm4gY29kZUluZGV4OworfQorCisvKioKKyAqIFRleHQgQ29tcGFjdGlvbiBtb2RlIChzZWUgNS40LjEuNSkgcGVybWl0cyBhbGwgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMgdG8gYmUKKyAqIGVuY29kZWQsIGkuZS4gdmFsdWVzIDMyIC0gMTI2IGluY2x1c2l2ZSBpbiBhY2NvcmRhbmNlIHdpdGggSVNPL0lFQyA2NDYgKElSViksIGFzCisgKiB3ZWxsIGFzIHNlbGVjdGVkIGNvbnRyb2wgY2hhcmFjdGVycy4KKyAqLworKyAoaW50KXRleHRDb21wYWN0aW9uOihOU0FycmF5ICopY29kZXdvcmRzIGNvZGVJbmRleDooaW50KWNvZGVJbmRleCByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCB7CisgIGludCBjb3VudCA9IChbY29kZXdvcmRzWzBdIGludFZhbHVlXSAtIGNvZGVJbmRleCkgPDwgMTsKKyAgLy8gMiBjaGFyYWN0ZXIgcGVyIGNvZGV3b3JkCisgIGludCB0ZXh0Q29tcGFjdGlvbkRhdGFbY291bnRdOworICAvLyBVc2VkIHRvIGhvbGQgdGhlIGJ5dGUgY29tcGFjdGlvbiB2YWx1ZSBpZiB0aGVyZSBpcyBhIG1vZGUgc2hpZnQKKyAgaW50IGJ5dGVDb21wYWN0aW9uRGF0YVtjb3VudF07CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgdGV4dENvbXBhY3Rpb25EYXRhWzBdID0gMDsKKyAgICBieXRlQ29tcGFjdGlvbkRhdGFbMF0gPSAwOworICB9CisKKyAgaW50IGluZGV4ID0gMDsKKyAgQk9PTCBlbmQgPSBOTzsKKyAgd2hpbGUgKChjb2RlSW5kZXggPCBbY29kZXdvcmRzWzBdIGludFZhbHVlXSkgJiYgIWVuZCkgeworICAgIGludCBjb2RlID0gW2NvZGV3b3Jkc1tjb2RlSW5kZXgrK10gaW50VmFsdWVdOworICAgIGlmIChjb2RlIDwgVEVYVF9DT01QQUNUSU9OX01PREVfTEFUQ0gpIHsKKyAgICAgIHRleHRDb21wYWN0aW9uRGF0YVtpbmRleF0gPSBjb2RlIC8gMzA7CisgICAgICB0ZXh0Q29tcGFjdGlvbkRhdGFbaW5kZXggKyAxXSA9IGNvZGUgJSAzMDsKKyAgICAgIGluZGV4ICs9IDI7CisgICAgfSBlbHNlIHsKKyAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgY2FzZSBURVhUX0NPTVBBQ1RJT05fTU9ERV9MQVRDSDoKKyAgICAgICAgLy8gcmVpbml0aWFsaXplIHRleHQgY29tcGFjdGlvbiBtb2RlIHRvIGFscGhhIHN1YiBtb2RlCisgICAgICAgIHRleHRDb21wYWN0aW9uRGF0YVtpbmRleCsrXSA9IFRFWFRfQ09NUEFDVElPTl9NT0RFX0xBVENIOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQllURV9DT01QQUNUSU9OX01PREVfTEFUQ0g6CisgICAgICAgIGNvZGVJbmRleC0tOworICAgICAgICBlbmQgPSBZRVM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOVU1FUklDX0NPTVBBQ1RJT05fTU9ERV9MQVRDSDoKKyAgICAgICAgY29kZUluZGV4LS07CisgICAgICAgIGVuZCA9IFlFUzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEJFR0lOX01BQ1JPX1BERjQxN19DT05UUk9MX0JMT0NLOgorICAgICAgICBjb2RlSW5kZXgtLTsKKyAgICAgICAgZW5kID0gWUVTOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQkVHSU5fTUFDUk9fUERGNDE3X09QVElPTkFMX0ZJRUxEOgorICAgICAgICBjb2RlSW5kZXgtLTsKKyAgICAgICAgZW5kID0gWUVTOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTUFDUk9fUERGNDE3X1RFUk1JTkFUT1I6CisgICAgICAgIGNvZGVJbmRleC0tOworICAgICAgICBlbmQgPSBZRVM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBNT0RFX1NISUZUX1RPX0JZVEVfQ09NUEFDVElPTl9NT0RFOgorICAgICAgICAvLyBUaGUgTW9kZSBTaGlmdCBjb2Rld29yZCA5MTMgc2hhbGwgY2F1c2UgYSB0ZW1wb3JhcnkKKyAgICAgICAgLy8gc3dpdGNoIGZyb20gVGV4dCBDb21wYWN0aW9uIG1vZGUgdG8gQnl0ZSBDb21wYWN0aW9uIG1vZGUuCisgICAgICAgIC8vIFRoaXMgc3dpdGNoIHNoYWxsIGJlIGluIGVmZmVjdCBmb3Igb25seSB0aGUgbmV4dCBjb2Rld29yZCwKKyAgICAgICAgLy8gYWZ0ZXIgd2hpY2ggdGhlIG1vZGUgc2hhbGwgcmV2ZXJ0IHRvIHRoZSBwcmV2YWlsaW5nIHN1Yi1tb2RlCisgICAgICAgIC8vIG9mIHRoZSBUZXh0IENvbXBhY3Rpb24gbW9kZS4gQ29kZXdvcmQgOTEzIGlzIG9ubHkgYXZhaWxhYmxlCisgICAgICAgIC8vIGluIFRleHQgQ29tcGFjdGlvbiBtb2RlOyBpdHMgdXNlIGlzIGRlc2NyaWJlZCBpbiA1LjQuMi40LgorICAgICAgICB0ZXh0Q29tcGFjdGlvbkRhdGFbaW5kZXhdID0gTU9ERV9TSElGVF9UT19CWVRFX0NPTVBBQ1RJT05fTU9ERTsKKyAgICAgICAgY29kZSA9IFtjb2Rld29yZHNbY29kZUluZGV4KytdIGludFZhbHVlXTsKKyAgICAgICAgYnl0ZUNvbXBhY3Rpb25EYXRhW2luZGV4XSA9IGNvZGU7CisgICAgICAgIGluZGV4Kys7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBCWVRFX0NPTVBBQ1RJT05fTU9ERV9MQVRDSF82OgorICAgICAgICBjb2RlSW5kZXgtLTsKKyAgICAgICAgZW5kID0gWUVTOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBbc2VsZiBkZWNvZGVUZXh0Q29tcGFjdGlvbjp0ZXh0Q29tcGFjdGlvbkRhdGEgYnl0ZUNvbXBhY3Rpb25EYXRhOmJ5dGVDb21wYWN0aW9uRGF0YSBsZW5ndGg6aW5kZXggcmVzdWx0OnJlc3VsdF07CisgIHJldHVybiBjb2RlSW5kZXg7Cit9CisKKworLyoqCisgKiBUaGUgVGV4dCBDb21wYWN0aW9uIG1vZGUgaW5jbHVkZXMgYWxsIHRoZSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycworICogKGkuZS4gdmFsdWVzIGZyb20gMzIgdG8gMTI2KSBhbmQgdGhyZWUgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzOiBIVCBvciB0YWIKKyAqIChBU0NJSSB2YWx1ZSA5KSwgTEYgb3IgbGluZSBmZWVkIChBU0NJSSB2YWx1ZSAxMCksIGFuZCBDUiBvciBjYXJyaWFnZQorICogcmV0dXJuIChBU0NJSSB2YWx1ZSAxMykuIFRoZSBUZXh0IENvbXBhY3Rpb24gbW9kZSBhbHNvIGluY2x1ZGVzIHZhcmlvdXMgbGF0Y2gKKyAqIGFuZCBzaGlmdCBjaGFyYWN0ZXJzIHdoaWNoIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgbW9kZS4gVGhlIFRleHQKKyAqIENvbXBhY3Rpb24gbW9kZSBlbmNvZGVzIHVwIHRvIDIgY2hhcmFjdGVycyBwZXIgY29kZXdvcmQuIFRoZSBjb21wYWN0aW9uIHJ1bGVzCisgKiBmb3IgY29udmVydGluZyBkYXRhIGludG8gUERGNDE3IGNvZGV3b3JkcyBhcmUgZGVmaW5lZCBpbiA1LjQuMi4yLiBUaGUgc3ViLW1vZGUKKyAqIHN3aXRjaGVzIGFyZSBkZWZpbmVkIGluIDUuNC4yLjMuCisgKi8KKysgKHZvaWQpZGVjb2RlVGV4dENvbXBhY3Rpb246KGludCAqKXRleHRDb21wYWN0aW9uRGF0YSBieXRlQ29tcGFjdGlvbkRhdGE6KGludCAqKWJ5dGVDb21wYWN0aW9uRGF0YSBsZW5ndGg6KHVuc2lnbmVkIGludClsZW5ndGggcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQgeworICAvLyBCZWdpbm5pbmcgZnJvbSBhbiBpbml0aWFsIHN0YXRlIG9mIHRoZSBBbHBoYSBzdWItbW9kZQorICAvLyBUaGUgZGVmYXVsdCBjb21wYWN0aW9uIG1vZGUgZm9yIFBERjQxNyBpbiBlZmZlY3QgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc3ltYm9sIHNoYWxsIGFsd2F5cyBiZSBUZXh0CisgIC8vIENvbXBhY3Rpb24gbW9kZSBBbHBoYSBzdWItbW9kZSAodXBwZXJjYXNlIGFscGhhYmV0aWMpLiBBIGxhdGNoIGNvZGV3b3JkIGZyb20gYW5vdGhlciBtb2RlIHRvIHRoZSBUZXh0CisgIC8vIENvbXBhY3Rpb24gbW9kZSBzaGFsbCBhbHdheXMgc3dpdGNoIHRvIHRoZSBUZXh0IENvbXBhY3Rpb24gQWxwaGEgc3ViLW1vZGUuCisgIGludCBzdWJNb2RlID0gQUxQSEE7CisgIGludCBwcmlvclRvU2hpZnRNb2RlID0gQUxQSEE7CisgIGludCBpID0gMDsKKyAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKKyAgICBpbnQgc3ViTW9kZUNoID0gdGV4dENvbXBhY3Rpb25EYXRhW2ldOworICAgIHVuaWNoYXIgY2ggPSAwOworICAgIHN3aXRjaCAoc3ViTW9kZSkgeworICAgICAgY2FzZSBBTFBIQToKKyAgICAgICAgLy8gQWxwaGEgKHVwcGVyY2FzZSBhbHBoYWJldGljKQorICAgICAgICBpZiAoc3ViTW9kZUNoIDwgMjYpIHsKKyAgICAgICAgLy8gVXBwZXIgY2FzZSBBbHBoYSBDaGFyYWN0ZXIKKyAgICAgICAgICBjaCA9ICh1bmljaGFyKSgnQScgKyBzdWJNb2RlQ2gpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChzdWJNb2RlQ2ggPT0gMjYpIHsKKyAgICAgICAgICAgIGNoID0gJyAnOworICAgICAgICAgIH0gZWxzZSBpZiAoc3ViTW9kZUNoID09IExMKSB7CisgICAgICAgICAgICBzdWJNb2RlID0gTE9XRVI7CisgICAgICAgICAgfSBlbHNlIGlmIChzdWJNb2RlQ2ggPT0gTUwpIHsKKyAgICAgICAgICAgIHN1Yk1vZGUgPSBNSVhFRDsKKyAgICAgICAgICB9IGVsc2UgaWYgKHN1Yk1vZGVDaCA9PSBQUykgeworICAgICAgICAgICAgLy8gU2hpZnQgdG8gcHVuY3R1YXRpb24KKyAgICAgICAgICAgIHByaW9yVG9TaGlmdE1vZGUgPSBzdWJNb2RlOworICAgICAgICAgICAgc3ViTW9kZSA9IFBVTkNUX1NISUZUOworICAgICAgICAgIH0gZWxzZSBpZiAoc3ViTW9kZUNoID09IE1PREVfU0hJRlRfVE9fQllURV9DT01QQUNUSU9OX01PREUpIHsKKyAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcilieXRlQ29tcGFjdGlvbkRhdGFbaV1dOworICAgICAgICAgIH0gZWxzZSBpZiAoc3ViTW9kZUNoID09IFRFWFRfQ09NUEFDVElPTl9NT0RFX0xBVENIKSB7CisgICAgICAgICAgICBzdWJNb2RlID0gQUxQSEE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIExPV0VSOgorICAgICAgICAvLyBMb3dlciAobG93ZXJjYXNlIGFscGhhYmV0aWMpCisgICAgICAgIGlmIChzdWJNb2RlQ2ggPCAyNikgeworICAgICAgICAgIGNoID0gKHVuaWNoYXIpKCdhJyArIHN1Yk1vZGVDaCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHN1Yk1vZGVDaCA9PSAyNikgeworICAgICAgICAgICAgY2ggPSAnICc7CisgICAgICAgICAgfSBlbHNlIGlmIChzdWJNb2RlQ2ggPT0gQVMpIHsKKyAgICAgICAgICAgIC8vIFNoaWZ0IHRvIGFscGhhCisgICAgICAgICAgICBwcmlvclRvU2hpZnRNb2RlID0gc3ViTW9kZTsKKyAgICAgICAgICAgIHN1Yk1vZGUgPSBBTFBIQV9TSElGVDsKKyAgICAgICAgICB9IGVsc2UgaWYgKHN1Yk1vZGVDaCA9PSBNTCkgeworICAgICAgICAgICAgc3ViTW9kZSA9IE1JWEVEOworICAgICAgICAgIH0gZWxzZSBpZiAoc3ViTW9kZUNoID09IFBTKSB7CisgICAgICAgICAgICAvLyBTaGlmdCB0byBwdW5jdHVhdGlvbgorICAgICAgICAgICAgcHJpb3JUb1NoaWZ0TW9kZSA9IHN1Yk1vZGU7CisgICAgICAgICAgICBzdWJNb2RlID0gUFVOQ1RfU0hJRlQ7CisgICAgICAgICAgfSBlbHNlIGlmIChzdWJNb2RlQ2ggPT0gTU9ERV9TSElGVF9UT19CWVRFX0NPTVBBQ1RJT05fTU9ERSkgeworICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKWJ5dGVDb21wYWN0aW9uRGF0YVtpXV07CisgICAgICAgICAgfSBlbHNlIGlmIChzdWJNb2RlQ2ggPT0gVEVYVF9DT01QQUNUSU9OX01PREVfTEFUQ0gpIHsKKyAgICAgICAgICAgIHN1Yk1vZGUgPSBBTFBIQTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTUlYRUQ6CisgICAgICAgIC8vIE1peGVkIChudW1lcmljIGFuZCBzb21lIHB1bmN0dWF0aW9uKQorICAgICAgICBpZiAoc3ViTW9kZUNoIDwgUEwpIHsKKyAgICAgICAgICBjaCA9IE1JWEVEX0NIQVJTW3N1Yk1vZGVDaF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHN1Yk1vZGVDaCA9PSBQTCkgeworICAgICAgICAgICAgc3ViTW9kZSA9IFBVTkNUOworICAgICAgICAgIH0gZWxzZSBpZiAoc3ViTW9kZUNoID09IDI2KSB7CisgICAgICAgICAgICBjaCA9ICcgJzsKKyAgICAgICAgICB9IGVsc2UgaWYgKHN1Yk1vZGVDaCA9PSBMTCkgeworICAgICAgICAgICAgc3ViTW9kZSA9IExPV0VSOworICAgICAgICAgIH0gZWxzZSBpZiAoc3ViTW9kZUNoID09IEFMKSB7CisgICAgICAgICAgICBzdWJNb2RlID0gQUxQSEE7CisgICAgICAgICAgfSBlbHNlIGlmIChzdWJNb2RlQ2ggPT0gUFMpIHsKKyAgICAgICAgICAgIC8vIFNoaWZ0IHRvIHB1bmN0dWF0aW9uCisgICAgICAgICAgICBwcmlvclRvU2hpZnRNb2RlID0gc3ViTW9kZTsKKyAgICAgICAgICAgIHN1Yk1vZGUgPSBQVU5DVF9TSElGVDsKKyAgICAgICAgICB9IGVsc2UgaWYgKHN1Yk1vZGVDaCA9PSBNT0RFX1NISUZUX1RPX0JZVEVfQ09NUEFDVElPTl9NT0RFKSB7CisgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpYnl0ZUNvbXBhY3Rpb25EYXRhW2ldXTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHN1Yk1vZGVDaCA9PSBURVhUX0NPTVBBQ1RJT05fTU9ERV9MQVRDSCkgeworICAgICAgICAgICAgc3ViTW9kZSA9IEFMUEhBOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBQVU5DVDoKKyAgICAgICAgLy8gUHVuY3R1YXRpb24KKyAgICAgICAgaWYgKHN1Yk1vZGVDaCA8IFBBTCkgeworICAgICAgICAgIGNoID0gUFVOQ1RfQ0hBUlNbc3ViTW9kZUNoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAoc3ViTW9kZUNoID09IFBBTCkgeworICAgICAgICAgICAgc3ViTW9kZSA9IEFMUEhBOworICAgICAgICAgIH0gZWxzZSBpZiAoc3ViTW9kZUNoID09IE1PREVfU0hJRlRfVE9fQllURV9DT01QQUNUSU9OX01PREUpIHsKKyAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcilieXRlQ29tcGFjdGlvbkRhdGFbaV1dOworICAgICAgICAgIH0gZWxzZSBpZiAoVEVYVF9DT01QQUNUSU9OX01PREVfTEFUQ0gpIHsKKyAgICAgICAgICAgIHN1Yk1vZGUgPSBBTFBIQTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQUxQSEFfU0hJRlQ6CisgICAgICAgIC8vIFJlc3RvcmUgc3ViLW1vZGUKKyAgICAgICAgc3ViTW9kZSA9IHByaW9yVG9TaGlmdE1vZGU7CisgICAgICAgIGlmIChzdWJNb2RlQ2ggPCAyNikgeworICAgICAgICAgIGNoID0gKHVuaWNoYXIpKCdBJyArIHN1Yk1vZGVDaCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHN1Yk1vZGVDaCA9PSAyNikgeworICAgICAgICAgICAgY2ggPSAnICc7CisgICAgICAgICAgfSBlbHNlIGlmIChzdWJNb2RlQ2ggPT0gVEVYVF9DT01QQUNUSU9OX01PREVfTEFUQ0gpIHsKKyAgICAgICAgICAgIHN1Yk1vZGUgPSBBTFBIQTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFVOQ1RfU0hJRlQ6CisgICAgICAgIC8vIFJlc3RvcmUgc3ViLW1vZGUKKyAgICAgICAgc3ViTW9kZSA9IHByaW9yVG9TaGlmdE1vZGU7CisgICAgICAgIGlmIChzdWJNb2RlQ2ggPCBQQUwpIHsKKyAgICAgICAgICBjaCA9IFBVTkNUX0NIQVJTW3N1Yk1vZGVDaF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHN1Yk1vZGVDaCA9PSBQQUwpIHsKKyAgICAgICAgICAgIHN1Yk1vZGUgPSBBTFBIQTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHN1Yk1vZGVDaCA9PSBNT0RFX1NISUZUX1RPX0JZVEVfQ09NUEFDVElPTl9NT0RFKSB7CisgICAgICAgICAgICAvLyBQUyBiZWZvcmUgU2hpZnQtdG8tQnl0ZSBpcyB1c2VkIGFzIGEgcGFkZGluZyBjaGFyYWN0ZXIsCisgICAgICAgICAgICAvLyBzZWUgNS40LjIuNCBvZiB0aGUgc3BlY2lmaWNhdGlvbgorICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKWJ5dGVDb21wYWN0aW9uRGF0YVtpXV07CisgICAgICAgICAgfSBlbHNlIGlmIChzdWJNb2RlQ2ggPT0gVEVYVF9DT01QQUNUSU9OX01PREVfTEFUQ0gpIHsKKyAgICAgICAgICAgIHN1Yk1vZGUgPSBBTFBIQTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChjaCAhPSAwKSB7CisgICAgICAvLyBBcHBlbmQgZGVjb2RlZCBjaGFyYWN0ZXIgdG8gcmVzdWx0CisgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVDIiwgY2hdOworICAgIH0KKyAgICBpKys7CisgIH0KK30KKworCisvKioKKyAqIEJ5dGUgQ29tcGFjdGlvbiBtb2RlIChzZWUgNS40LjMpIHBlcm1pdHMgYWxsIDI1NiBwb3NzaWJsZSA4LWJpdCBieXRlIHZhbHVlcyB0byBiZSBlbmNvZGVkLgorICogVGhpcyBpbmNsdWRlcyBhbGwgQVNDSUkgY2hhcmFjdGVycyB2YWx1ZSAwIHRvIDEyNyBpbmNsdXNpdmUgYW5kIHByb3ZpZGVzIGZvciBpbnRlcm5hdGlvbmFsCisgKiBjaGFyYWN0ZXIgc2V0IHN1cHBvcnQuCisgKi8KKysgKGludClieXRlQ29tcGFjdGlvbjooaW50KW1vZGUgY29kZXdvcmRzOihOU0FycmF5ICopY29kZXdvcmRzIGNvZGVJbmRleDooaW50KWNvZGVJbmRleCByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCB7CisgIGlmIChtb2RlID09IEJZVEVfQ09NUEFDVElPTl9NT0RFX0xBVENIKSB7CisgICAgLy8gVG90YWwgbnVtYmVyIG9mIEJ5dGUgQ29tcGFjdGlvbiBjaGFyYWN0ZXJzIHRvIGJlIGVuY29kZWQKKyAgICAvLyBpcyBub3QgYSBtdWx0aXBsZSBvZiA2CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBsb25nIGxvbmcgdmFsdWUgPSAwOworICAgIGNoYXIgZGVjb2RlZERhdGFbNl0gPSB7MCwgMCwgMCwgMCwgMCwgMH07CisgICAgaW50IGJ5dGVDb21wYWN0ZWRDb2Rld29yZHNbNl0gPSB7MCwgMCwgMCwgMCwgMCwgMH07CisgICAgQk9PTCBlbmQgPSBOTzsKKyAgICBpbnQgbmV4dENvZGUgPSBbY29kZXdvcmRzW2NvZGVJbmRleCsrXSBpbnRWYWx1ZV07CisgICAgd2hpbGUgKChjb2RlSW5kZXggPCBbY29kZXdvcmRzWzBdIGludFZhbHVlXSkgJiYgIWVuZCkgeworICAgICAgYnl0ZUNvbXBhY3RlZENvZGV3b3Jkc1tjb3VudCsrXSA9IG5leHRDb2RlOworICAgICAgLy8gQmFzZSA5MDAKKyAgICAgIHZhbHVlID0gOTAwICogdmFsdWUgKyBuZXh0Q29kZTsKKyAgICAgIG5leHRDb2RlID0gW2NvZGV3b3Jkc1tjb2RlSW5kZXgrK10gaW50VmFsdWVdOworICAgICAgLy8gcGVyaGFwcyBpdCBzaG91bGQgYmUgb2sgdG8gY2hlY2sgb25seSBuZXh0Q29kZSA+PSBURVhUX0NPTVBBQ1RJT05fTU9ERV9MQVRDSAorICAgICAgaWYgKG5leHRDb2RlID09IFRFWFRfQ09NUEFDVElPTl9NT0RFX0xBVENIIHx8CisgICAgICAgICAgbmV4dENvZGUgPT0gQllURV9DT01QQUNUSU9OX01PREVfTEFUQ0ggfHwKKyAgICAgICAgICBuZXh0Q29kZSA9PSBOVU1FUklDX0NPTVBBQ1RJT05fTU9ERV9MQVRDSCB8fAorICAgICAgICAgIG5leHRDb2RlID09IEJZVEVfQ09NUEFDVElPTl9NT0RFX0xBVENIXzYgfHwKKyAgICAgICAgICBuZXh0Q29kZSA9PSBCRUdJTl9NQUNST19QREY0MTdfQ09OVFJPTF9CTE9DSyB8fAorICAgICAgICAgIG5leHRDb2RlID09IEJFR0lOX01BQ1JPX1BERjQxN19PUFRJT05BTF9GSUVMRCB8fAorICAgICAgICAgIG5leHRDb2RlID09IE1BQ1JPX1BERjQxN19URVJNSU5BVE9SKSB7CisgICAgICAgIGNvZGVJbmRleC0tOworICAgICAgICBlbmQgPSBZRVM7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoKGNvdW50ICUgNSA9PSAwKSAmJiAoY291bnQgPiAwKSkgeworICAgICAgICAgIC8vIERlY29kZSBldmVyeSA1IGNvZGV3b3JkcworICAgICAgICAgIC8vIENvbnZlcnQgdG8gQmFzZSAyNTYKKyAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDY7ICsraikgeworICAgICAgICAgICAgZGVjb2RlZERhdGFbNSAtIGpdID0gKGNoYXIpICh2YWx1ZSAlIDI1Nik7CisgICAgICAgICAgICB2YWx1ZSA+Pj0gODsKKyAgICAgICAgICB9CisgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6W1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhCeXRlczpkZWNvZGVkRGF0YSBsZW5ndGg6NiBlbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXV07CisgICAgICAgICAgY291bnQgPSAwOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLy8gaWYgdGhlIGVuZCBvZiBhbGwgY29kZXdvcmRzIGlzIHJlYWNoZWQgdGhlIGxhc3QgY29kZXdvcmQgbmVlZHMgdG8gYmUgYWRkZWQKKyAgICBpZiAoY29kZUluZGV4ID09IFtjb2Rld29yZHNbMF0gaW50VmFsdWVdICYmIG5leHRDb2RlIDwgVEVYVF9DT01QQUNUSU9OX01PREVfTEFUQ0gpIHsKKyAgICAgIGJ5dGVDb21wYWN0ZWRDb2Rld29yZHNbY291bnQrK10gPSBuZXh0Q29kZTsKKyAgICB9CisKKyAgICAvLyBJZiBCeXRlIENvbXBhY3Rpb24gbW9kZSBpcyBpbnZva2VkIHdpdGggY29kZXdvcmQgOTAxLAorICAgIC8vIHRoZSBsYXN0IGdyb3VwIG9mIGNvZGV3b3JkcyBpcyBpbnRlcnByZXRlZCBkaXJlY3RseQorICAgIC8vIGFzIG9uZSBieXRlIHBlciBjb2Rld29yZCwgd2l0aG91dCBjb21wYWN0aW9uLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKWJ5dGVDb21wYWN0ZWRDb2Rld29yZHNbaV1dOworICAgIH0KKyAgfSBlbHNlIGlmIChtb2RlID09IEJZVEVfQ09NUEFDVElPTl9NT0RFX0xBVENIXzYpIHsKKyAgICAvLyBUb3RhbCBudW1iZXIgb2YgQnl0ZSBDb21wYWN0aW9uIGNoYXJhY3RlcnMgdG8gYmUgZW5jb2RlZAorICAgIC8vIGlzIGFuIGludGVnZXIgbXVsdGlwbGUgb2YgNgorICAgIGludCBjb3VudCA9IDA7CisgICAgbG9uZyBsb25nIHZhbHVlID0gMDsKKyAgICBCT09MIGVuZCA9IE5POworICAgIHdoaWxlIChjb2RlSW5kZXggPCBbY29kZXdvcmRzWzBdIGludFZhbHVlXSAmJiAhZW5kKSB7CisgICAgICBpbnQgY29kZSA9IFtjb2Rld29yZHNbY29kZUluZGV4KytdIGludFZhbHVlXTsKKyAgICAgIGlmIChjb2RlIDwgVEVYVF9DT01QQUNUSU9OX01PREVfTEFUQ0gpIHsKKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgLy8gQmFzZSA5MDAKKyAgICAgICAgdmFsdWUgPSA5MDAgKiB2YWx1ZSArIGNvZGU7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoY29kZSA9PSBURVhUX0NPTVBBQ1RJT05fTU9ERV9MQVRDSCB8fAorICAgICAgICAgICAgY29kZSA9PSBCWVRFX0NPTVBBQ1RJT05fTU9ERV9MQVRDSCB8fAorICAgICAgICAgICAgY29kZSA9PSBOVU1FUklDX0NPTVBBQ1RJT05fTU9ERV9MQVRDSCB8fAorICAgICAgICAgICAgY29kZSA9PSBCWVRFX0NPTVBBQ1RJT05fTU9ERV9MQVRDSF82IHx8CisgICAgICAgICAgICBjb2RlID09IEJFR0lOX01BQ1JPX1BERjQxN19DT05UUk9MX0JMT0NLIHx8CisgICAgICAgICAgICBjb2RlID09IEJFR0lOX01BQ1JPX1BERjQxN19PUFRJT05BTF9GSUVMRCB8fAorICAgICAgICAgICAgY29kZSA9PSBNQUNST19QREY0MTdfVEVSTUlOQVRPUikgeworICAgICAgICAgIGNvZGVJbmRleC0tOworICAgICAgICAgIGVuZCA9IFlFUzsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKChjb3VudCAlIDUgPT0gMCkgJiYgKGNvdW50ID4gMCkpIHsKKyAgICAgICAgLy8gRGVjb2RlIGV2ZXJ5IDUgY29kZXdvcmRzCisgICAgICAgIC8vIENvbnZlcnQgdG8gQmFzZSAyNTYKKyAgICAgICAgdW5pY2hhciBkZWNvZGVkRGF0YVs2XTsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA2OyArK2opIHsKKyAgICAgICAgICBkZWNvZGVkRGF0YVs1IC0gal0gPSAodW5pY2hhcikodmFsdWUgJiAweEZGKTsKKyAgICAgICAgICB2YWx1ZSA+Pj0gODsKKyAgICAgICAgfQorICAgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6ZGVjb2RlZERhdGEgbGVuZ3RoOjZdXTsKKyAgICAgICAgY291bnQgPSAwOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gY29kZUluZGV4OworfQorCisvKioKKyAqIE51bWVyaWMgQ29tcGFjdGlvbiBtb2RlIChzZWUgNS40LjQpIHBlcm1pdHMgZWZmaWNpZW50IGVuY29kaW5nIG9mIG51bWVyaWMgZGF0YSBzdHJpbmdzLgorICovCisrIChpbnQpbnVtZXJpY0NvbXBhY3Rpb246KE5TQXJyYXkgKiljb2Rld29yZHMgY29kZUluZGV4OihpbnQpY29kZUluZGV4IHJlc3VsdDooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0IHsKKyAgaW50IGNvdW50ID0gMDsKKyAgQk9PTCBlbmQgPSBOTzsKKworICBpbnQgbnVtZXJpY0NvZGV3b3Jkc1tNQVhfTlVNRVJJQ19DT0RFV09SRFNdOworICBtZW1zZXQobnVtZXJpY0NvZGV3b3JkcywgMCwgTUFYX05VTUVSSUNfQ09ERVdPUkRTICogc2l6ZW9mKGludCkpOworCisgIHdoaWxlIChjb2RlSW5kZXggPCBbY29kZXdvcmRzWzBdIGludFZhbHVlXSAmJiAhZW5kKSB7CisgICAgaW50IGNvZGUgPSBbY29kZXdvcmRzW2NvZGVJbmRleCsrXSBpbnRWYWx1ZV07CisgICAgaWYgKGNvZGVJbmRleCA9PSBbY29kZXdvcmRzWzBdIGludFZhbHVlXSkgeworICAgICAgZW5kID0gWUVTOworICAgIH0KKyAgICBpZiAoY29kZSA8IFRFWFRfQ09NUEFDVElPTl9NT0RFX0xBVENIKSB7CisgICAgICBudW1lcmljQ29kZXdvcmRzW2NvdW50XSA9IGNvZGU7CisgICAgICBjb3VudCsrOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoY29kZSA9PSBURVhUX0NPTVBBQ1RJT05fTU9ERV9MQVRDSCB8fAorICAgICAgICAgIGNvZGUgPT0gQllURV9DT01QQUNUSU9OX01PREVfTEFUQ0ggfHwKKyAgICAgICAgICBjb2RlID09IEJZVEVfQ09NUEFDVElPTl9NT0RFX0xBVENIXzYgfHwKKyAgICAgICAgICBjb2RlID09IEJFR0lOX01BQ1JPX1BERjQxN19DT05UUk9MX0JMT0NLIHx8CisgICAgICAgICAgY29kZSA9PSBCRUdJTl9NQUNST19QREY0MTdfT1BUSU9OQUxfRklFTEQgfHwKKyAgICAgICAgICBjb2RlID09IE1BQ1JPX1BERjQxN19URVJNSU5BVE9SKSB7CisgICAgICAgIGNvZGVJbmRleC0tOworICAgICAgICBlbmQgPSBZRVM7CisgICAgICB9CisgICAgfQorICAgIGlmIChjb3VudCAlIE1BWF9OVU1FUklDX0NPREVXT1JEUyA9PSAwIHx8IGNvZGUgPT0gTlVNRVJJQ19DT01QQUNUSU9OX01PREVfTEFUQ0ggfHwgZW5kKSB7CisgICAgICBOU1N0cmluZyAqcyA9IFtzZWxmIGRlY29kZUJhc2U5MDB0b0Jhc2UxMDpudW1lcmljQ29kZXdvcmRzIGNvdW50OmNvdW50XTsKKyAgICAgIGlmIChzID09IG5pbCkgeworICAgICAgICByZXR1cm4gSU5UX01BWDsKKyAgICAgIH0KKyAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOnNdOworICAgICAgY291bnQgPSAwOworICAgIH0KKyAgfQorICByZXR1cm4gY29kZUluZGV4OworfQorCisvKioKKyAqIENvbnZlcnQgYSBsaXN0IG9mIE51bWVyaWMgQ29tcGFjdGVkIGNvZGV3b3JkcyBmcm9tIEJhc2UgOTAwIHRvIEJhc2UgMTAuCisgKi8KKy8qCisgICBFWEFNUExFCisgICBFbmNvZGUgdGhlIGZpZnRlZW4gZGlnaXQgbnVtZXJpYyBzdHJpbmcgMDAwMjEzMjk4MTc0MDAwCisgICBQcmVmaXggdGhlIG51bWVyaWMgc3RyaW5nIHdpdGggYSAxIGFuZCBzZXQgdGhlIGluaXRpYWwgdmFsdWUgb2YKKyAgIHQgPSAxIDAwMCAyMTMgMjk4IDE3NCAwMDAKKyAgIENhbGN1bGF0ZSBjb2Rld29yZCAwCisgICBkMCA9IDEgMDAwIDIxMyAyOTggMTc0IDAwMCBtb2QgOTAwID0gMjAwCisgICAKKyAgIHQgPSAxIDAwMCAyMTMgMjk4IDE3NCAwMDAgZGl2IDkwMCA9IDEgMTExIDM0OCAxMDkgMDgyCisgICBDYWxjdWxhdGUgY29kZXdvcmQgMQorICAgZDEgPSAxIDExMSAzNDggMTA5IDA4MiBtb2QgOTAwID0gMjgyCisgICAKKyAgIHQgPSAxIDExMSAzNDggMTA5IDA4MiBkaXYgOTAwID0gMSAyMzQgODMxIDIzMgorICAgQ2FsY3VsYXRlIGNvZGV3b3JkIDIKKyAgIGQyID0gMSAyMzQgODMxIDIzMiBtb2QgOTAwID0gNjMyCisgICAKKyAgIHQgPSAxIDIzNCA4MzEgMjMyIGRpdiA5MDAgPSAxIDM3MiAwMzQKKyAgIENhbGN1bGF0ZSBjb2Rld29yZCAzCisgICBkMyA9IDEgMzcyIDAzNCBtb2QgOTAwID0gNDM0CisgICAKKyAgIHQgPSAxIDM3MiAwMzQgZGl2IDkwMCA9IDEgNTI0CisgICBDYWxjdWxhdGUgY29kZXdvcmQgNHUKKyAgIGQ0ID0gMSA1MjQgbW9kIDkwMCA9IDYyNAorICAgCisgICB0ID0gMSA1MjQgZGl2IDkwMCA9IDEKKyAgIENhbGN1bGF0ZSBjb2Rld29yZCA1CisgICBkNSA9IDEgbW9kIDkwMCA9IDEKKyAgIHQgPSAxIGRpdiA5MDAgPSAwCisgICBDb2Rld29yZCBzZXF1ZW5jZSBpczogMSwgNjI0LCA0MzQsIDYzMiwgMjgyLCAyMDAKKyAgIAorICAgRGVjb2RlIHRoZSBhYm92ZSBjb2Rld29yZHMgaW52b2x2ZXMKKyAgIDEgeCA5MDAgcG93ZXIgb2YgNSArIDYyNCB4IDkwMCBwb3dlciBvZiA0ICsgNDM0IHggOTAwIHBvd2VyIG9mIDMgKworICAgNjMyIHggOTAwIHBvd2VyIG9mIDIgKyAyODIgeCA5MDAgcG93ZXIgb2YgMSArIDIwMCB4IDkwMCBwb3dlciBvZiAwID0gMTAwMDIxMzI5ODE3NDAwMAorICAgCisgICBSZW1vdmUgbGVhZGluZyAxID0+ICBSZXN1bHQgaXMgMDAwMjEzMjk4MTc0MDAwCisgKi8KKysgKE5TU3RyaW5nICopZGVjb2RlQmFzZTkwMHRvQmFzZTEwOihpbnRbXSljb2Rld29yZHMgY291bnQ6KGludCljb3VudCB7CisgIE5TRGVjaW1hbE51bWJlciAqcmVzdWx0ID0gW05TRGVjaW1hbE51bWJlciB6ZXJvXTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgcmVzdWx0ID0gW3Jlc3VsdCBkZWNpbWFsTnVtYmVyQnlBZGRpbmc6W0VYUDkwMFtjb3VudCAtIGkgLSAxXSBkZWNpbWFsTnVtYmVyQnlNdWx0aXBseWluZ0J5OltOU0RlY2ltYWxOdW1iZXIgZGVjaW1hbE51bWJlcldpdGhEZWNpbWFsOltAKGNvZGV3b3Jkc1tpXSkgZGVjaW1hbFZhbHVlXV1dXTsKKyAgfQorICBOU1N0cmluZyAqcmVzdWx0U3RyaW5nID0gW3Jlc3VsdCBzdHJpbmdWYWx1ZV07CisgIGlmICghW3Jlc3VsdFN0cmluZyBoYXNQcmVmaXg6QCIxIl0pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIHJldHVybiBbcmVzdWx0U3RyaW5nIHN1YnN0cmluZ0Zyb21JbmRleDoxXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3RGV0ZWN0aW9uUmVzdWx0LmggYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2M5ZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3RGV0ZWN0aW9uUmVzdWx0LmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGNsYXNzIFpYUERGNDE3Qm91bmRpbmdCb3gsIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uOworCitAaW50ZXJmYWNlIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0IDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhQREY0MTdCb3VuZGluZ0JveCAqYm91bmRpbmdCb3g7CisKKy0gKGlkKWluaXRXaXRoQmFyY29kZU1ldGFkYXRhOihaWFBERjQxN0JhcmNvZGVNZXRhZGF0YSAqKWJhcmNvZGVNZXRhZGF0YSBib3VuZGluZ0JveDooWlhQREY0MTdCb3VuZGluZ0JveCAqKWJvdW5kaW5nQm94OworLSAoTlNBcnJheSAqKWRldGVjdGlvblJlc3VsdENvbHVtbnM7CistIChpbnQpYmFyY29kZUNvbHVtbkNvdW50OworLSAoaW50KWJhcmNvZGVSb3dDb3VudDsKKy0gKGludCliYXJjb2RlRUNMZXZlbDsKKy0gKHZvaWQpc2V0RGV0ZWN0aW9uUmVzdWx0Q29sdW1uOihpbnQpYmFyY29kZUNvbHVtbiBkZXRlY3Rpb25SZXN1bHRDb2x1bW46KFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uICopZGV0ZWN0aW9uUmVzdWx0Q29sdW1uOworLSAoWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4gKilkZXRlY3Rpb25SZXN1bHRDb2x1bW46KGludCliYXJjb2RlQ29sdW1uOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQubSBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0RldGVjdGlvblJlc3VsdC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMWVlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQubQpAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEuaCIKKyNpbXBvcnQgIlpYUERGNDE3Qm91bmRpbmdCb3guaCIKKyNpbXBvcnQgIlpYUERGNDE3Q29kZXdvcmQuaCIKKyNpbXBvcnQgIlpYUERGNDE3Q29tbW9uLmgiCisjaW1wb3J0ICJaWFBERjQxN0RldGVjdGlvblJlc3VsdC5oIgorI2ltcG9ydCAiWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4uaCIKKyNpbXBvcnQgIlpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLmgiCisKK2ludCBjb25zdCBBREpVU1RfUk9XX05VTUJFUl9TS0lQID0gMjsKKworQGludGVyZmFjZSBaWFBERjQxN0RldGVjdGlvblJlc3VsdCAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWFBERjQxN0JhcmNvZGVNZXRhZGF0YSAqYmFyY29kZU1ldGFkYXRhOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlQXJyYXkgKmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBiYXJjb2RlQ29sdW1uQ291bnQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0CisKKy0gKGlkKWluaXRXaXRoQmFyY29kZU1ldGFkYXRhOihaWFBERjQxN0JhcmNvZGVNZXRhZGF0YSAqKWJhcmNvZGVNZXRhZGF0YSBib3VuZGluZ0JveDooWlhQREY0MTdCb3VuZGluZ0JveCAqKWJvdW5kaW5nQm94IHsKKyAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgaWYgKHNlbGYpIHsKKyAgICBfYmFyY29kZU1ldGFkYXRhID0gYmFyY29kZU1ldGFkYXRhOworICAgIF9iYXJjb2RlQ29sdW1uQ291bnQgPSBiYXJjb2RlTWV0YWRhdGEuY29sdW1uQ291bnQ7CisgICAgX2JvdW5kaW5nQm94ID0gYm91bmRpbmdCb3g7CisgICAgX2RldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpfYmFyY29kZUNvbHVtbkNvdW50ICsgMl07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfYmFyY29kZUNvbHVtbkNvdW50ICsgMjsgaSsrKSB7CisgICAgICBbX2RldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbCBhZGRPYmplY3Q6W05TTnVsbCBudWxsXV07CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TQXJyYXkgKilkZXRlY3Rpb25SZXN1bHRDb2x1bW5zIHsKKyAgW3NlbGYgYWRqdXN0SW5kaWNhdG9yQ29sdW1uUm93TnVtYmVyczpzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFswXV07CisgIFtzZWxmIGFkanVzdEluZGljYXRvckNvbHVtblJvd051bWJlcnM6c2VsZi5kZXRlY3Rpb25SZXN1bHRDb2x1bW5zSW50ZXJuYWxbc2VsZi5iYXJjb2RlQ29sdW1uQ291bnQgKyAxXV07CisgIGludCB1bmFkanVzdGVkQ29kZXdvcmRDb3VudCA9IFpYUERGNDE3X01BWF9DT0RFV09SRFNfSU5fQkFSQ09ERTsKKyAgaW50IHByZXZpb3VzVW5hZGp1c3RlZENvdW50OworICBkbyB7CisgICAgcHJldmlvdXNVbmFkanVzdGVkQ291bnQgPSB1bmFkanVzdGVkQ29kZXdvcmRDb3VudDsKKyAgICB1bmFkanVzdGVkQ29kZXdvcmRDb3VudCA9IFtzZWxmIGFkanVzdFJvd051bWJlcnNdOworICB9IHdoaWxlICh1bmFkanVzdGVkQ29kZXdvcmRDb3VudCA+IDAgJiYgdW5hZGp1c3RlZENvZGV3b3JkQ291bnQgPCBwcmV2aW91c1VuYWRqdXN0ZWRDb3VudCk7CisgIHJldHVybiBzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbDsKK30KKworLSAodm9pZClhZGp1c3RJbmRpY2F0b3JDb2x1bW5Sb3dOdW1iZXJzOihaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbiAqKWRldGVjdGlvblJlc3VsdENvbHVtbiB7CisgIGlmIChkZXRlY3Rpb25SZXN1bHRDb2x1bW4gJiYgKGlkKWRldGVjdGlvblJlc3VsdENvbHVtbiAhPSBbTlNOdWxsIG51bGxdKSB7CisgICAgWyhaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbiAqKWRldGVjdGlvblJlc3VsdENvbHVtbiBhZGp1c3RDb21wbGV0ZUluZGljYXRvckNvbHVtblJvd051bWJlcnM6c2VsZi5iYXJjb2RlTWV0YWRhdGFdOworICB9Cit9CisKKy8vIFRPRE8gZW5zdXJlIHRoYXQgbm8gZGV0ZWN0ZWQgY29kZXdvcmRzIHdpdGggdW5rbm93biByb3cgbnVtYmVyIGFyZSBsZWZ0CisvLyB3ZSBzaG91bGQgYmUgYWJsZSB0byBlc3RpbWF0ZSB0aGUgcm93IGhlaWdodCBhbmQgdXNlIGl0IGFzIGEgaGludCBmb3IgdGhlIHJvdyBudW1iZXIKKy8vIHdlIHNob3VsZCBhbHNvIGZpbGwgdGhlIHJvd3MgdG9wIHRvIGJvdHRvbSBhbmQgYm90dG9tIHRvIHRvcAorLyoqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29kZXdvcmRzIHdoaWNoIGRvbid0IGhhdmUgYSB2YWxpZCByb3cgbnVtYmVyLiBOb3RlIHRoYXQgdGhlIGNvdW50IGlzIG5vdCBhY2N1cmF0ZSBhcyBjb2Rld29yZHMKKyAqIHdpbGwgYmUgY291bnRlZCBzZXZlcmFsIHRpbWVzLiBJdCBqdXN0IHNlcnZlcyBhcyBhbiBpbmRpY2F0b3IgdG8gc2VlIHdoZW4gd2UgY2FuIHN0b3AgYWRqdXN0aW5nIHJvdyBudW1iZXJzCisgKi8KKy0gKGludClhZGp1c3RSb3dOdW1iZXJzIHsKKyAgaW50IHVuYWRqdXN0ZWRDb3VudCA9IFtzZWxmIGFkanVzdFJvd051bWJlcnNCeVJvd107CisgIGlmICh1bmFkanVzdGVkQ291bnQgPT0gMCkgeworICAgIHJldHVybiAwOworICB9CisgIGZvciAoaW50IGJhcmNvZGVDb2x1bW4gPSAxOyBiYXJjb2RlQ29sdW1uIDwgc2VsZi5iYXJjb2RlQ29sdW1uQ291bnQgKyAxOyBiYXJjb2RlQ29sdW1uKyspIHsKKyAgICBOU0FycmF5ICpjb2Rld29yZHMgPSBbc2VsZi5kZXRlY3Rpb25SZXN1bHRDb2x1bW5zSW50ZXJuYWxbYmFyY29kZUNvbHVtbl0gY29kZXdvcmRzXTsKKyAgICBmb3IgKGludCBjb2Rld29yZHNSb3cgPSAwOyBjb2Rld29yZHNSb3cgPCBbY29kZXdvcmRzIGNvdW50XTsgY29kZXdvcmRzUm93KyspIHsKKyAgICAgIGlmICgoaWQpY29kZXdvcmRzW2NvZGV3b3Jkc1Jvd10gPT0gW05TTnVsbCBudWxsXSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmICghW2NvZGV3b3Jkc1tjb2Rld29yZHNSb3ddIGhhc1ZhbGlkUm93TnVtYmVyXSkgeworICAgICAgICBbc2VsZiBhZGp1c3RSb3dOdW1iZXJzOmJhcmNvZGVDb2x1bW4gY29kZXdvcmRzUm93OmNvZGV3b3Jkc1JvdyBjb2Rld29yZHM6Y29kZXdvcmRzXTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIHVuYWRqdXN0ZWRDb3VudDsKK30KKworLSAoaW50KWFkanVzdFJvd051bWJlcnNCeVJvdyB7CisgIFtzZWxmIGFkanVzdFJvd051bWJlcnNGcm9tQm90aFJJXTsKKyAgLy8gVE9ETyB3ZSBzaG91bGQgb25seSBkbyBmdWxsIHJvdyBhZGp1c3RtZW50cyBpZiByb3cgbnVtYmVycyBvZiBsZWZ0IGFuZCByaWdodCByb3cgaW5kaWNhdG9yIGNvbHVtbiBtYXRjaC4KKyAgLy8gTWF5YmUgaXQncyBldmVuIGJldHRlciB0byBjYWxjdWxhdGVkIHRoZSBoZWlnaHQgKGluIGNvZGV3b3JkIHJvd3MpIGFuZCBkaXZpZGUgaXQgYnkgdGhlIG51bWJlciBvZiBiYXJjb2RlCisgIC8vIHJvd3MuIFRoaXMsIHRvZ2V0aGVyIHdpdGggdGhlIExSSSBhbmQgUlJJIHJvdyBudW1iZXJzIHNob3VsZCBhbGxvdyB1cyB0byBnZXQgYSBnb29kIGVzdGltYXRlIHdoZXJlIGEgcm93CisgIC8vIG51bWJlciBzdGFydHMgYW5kIGVuZHMuCisgIGludCB1bmFkanVzdGVkQ291bnQgPSBbc2VsZiBhZGp1c3RSb3dOdW1iZXJzRnJvbUxSSV07CisgIHJldHVybiB1bmFkanVzdGVkQ291bnQgKyBbc2VsZiBhZGp1c3RSb3dOdW1iZXJzRnJvbVJSSV07Cit9CisKKy0gKGludClhZGp1c3RSb3dOdW1iZXJzRnJvbUJvdGhSSSB7CisgIGlmIChzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFswXSA9PSBbTlNOdWxsIG51bGxdIHx8IHNlbGYuZGV0ZWN0aW9uUmVzdWx0Q29sdW1uc0ludGVybmFsW3NlbGYuYmFyY29kZUNvbHVtbkNvdW50ICsgMV0gPT0gW05TTnVsbCBudWxsXSkgeworICAgIHJldHVybiAwOworICB9CisgIE5TQXJyYXkgKkxSSWNvZGV3b3JkcyA9IFsoWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4gKilzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFswXSBjb2Rld29yZHNdOworICBOU0FycmF5ICpSUkljb2Rld29yZHMgPSBbKFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uICopc2VsZi5kZXRlY3Rpb25SZXN1bHRDb2x1bW5zSW50ZXJuYWxbc2VsZi5iYXJjb2RlQ29sdW1uQ291bnQgKyAxXSBjb2Rld29yZHNdOworICBmb3IgKGludCBjb2Rld29yZHNSb3cgPSAwOyBjb2Rld29yZHNSb3cgPCBbTFJJY29kZXdvcmRzIGNvdW50XTsgY29kZXdvcmRzUm93KyspIHsKKyAgICBpZiAoTFJJY29kZXdvcmRzW2NvZGV3b3Jkc1Jvd10gIT0gW05TTnVsbCBudWxsXSAmJgorICAgICAgICBSUkljb2Rld29yZHNbY29kZXdvcmRzUm93XSAhPSBbTlNOdWxsIG51bGxdICYmCisgICAgICAgIFsoWlhQREY0MTdDb2Rld29yZCAqKUxSSWNvZGV3b3Jkc1tjb2Rld29yZHNSb3ddIHJvd051bWJlcl0gPT0gWyhaWFBERjQxN0NvZGV3b3JkICopUlJJY29kZXdvcmRzW2NvZGV3b3Jkc1Jvd10gcm93TnVtYmVyXSkgeworICAgICAgZm9yIChpbnQgYmFyY29kZUNvbHVtbiA9IDE7IGJhcmNvZGVDb2x1bW4gPD0gc2VsZi5iYXJjb2RlQ29sdW1uQ291bnQ7IGJhcmNvZGVDb2x1bW4rKykgeworICAgICAgICBaWFBERjQxN0NvZGV3b3JkICpjb2Rld29yZCA9IFsoWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4gKilzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFtiYXJjb2RlQ29sdW1uXSBjb2Rld29yZHNdW2NvZGV3b3Jkc1Jvd107CisgICAgICAgIGlmICgoaWQpY29kZXdvcmQgPT0gW05TTnVsbCBudWxsXSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGNvZGV3b3JkLnJvd051bWJlciA9IFsoWlhQREY0MTdDb2Rld29yZCAqKUxSSWNvZGV3b3Jkc1tjb2Rld29yZHNSb3ddIHJvd051bWJlcl07CisgICAgICAgIGlmICghW2NvZGV3b3JkIGhhc1ZhbGlkUm93TnVtYmVyXSkgeworICAgICAgICAgIFsoWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4gKilzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFtiYXJjb2RlQ29sdW1uXSBjb2Rld29yZHNdW2NvZGV3b3Jkc1Jvd10gPSBbTlNOdWxsIG51bGxdOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCistIChpbnQpYWRqdXN0Um93TnVtYmVyc0Zyb21SUkkgeworICBpZiAoc2VsZi5kZXRlY3Rpb25SZXN1bHRDb2x1bW5zSW50ZXJuYWxbc2VsZi5iYXJjb2RlQ29sdW1uQ291bnQgKyAxXSA9PSBbTlNOdWxsIG51bGxdKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaW50IHVuYWRqdXN0ZWRDb3VudCA9IDA7CisgIE5TQXJyYXkgKmNvZGV3b3JkcyA9IFtzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFtzZWxmLmJhcmNvZGVDb2x1bW5Db3VudCArIDFdIGNvZGV3b3Jkc107CisgIGZvciAoaW50IGNvZGV3b3Jkc1JvdyA9IDA7IGNvZGV3b3Jkc1JvdyA8IFtjb2Rld29yZHMgY291bnRdOyBjb2Rld29yZHNSb3crKykgeworICAgIGlmICgoaWQpY29kZXdvcmRzW2NvZGV3b3Jkc1Jvd10gPT0gW05TTnVsbCBudWxsXSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGludCByb3dJbmRpY2F0b3JSb3dOdW1iZXIgPSBbY29kZXdvcmRzW2NvZGV3b3Jkc1Jvd10gcm93TnVtYmVyXTsKKyAgICBpbnQgaW52YWxpZFJvd0NvdW50cyA9IDA7CisgICAgZm9yIChpbnQgYmFyY29kZUNvbHVtbiA9IHNlbGYuYmFyY29kZUNvbHVtbkNvdW50ICsgMTsgYmFyY29kZUNvbHVtbiA+IDAgJiYgaW52YWxpZFJvd0NvdW50cyA8IEFESlVTVF9ST1dfTlVNQkVSX1NLSVA7IGJhcmNvZGVDb2x1bW4tLSkgeworICAgICAgaWYgKHNlbGYuZGV0ZWN0aW9uUmVzdWx0Q29sdW1uc0ludGVybmFsW2JhcmNvZGVDb2x1bW5dICE9IFtOU051bGwgbnVsbF0pIHsKKyAgICAgICAgWlhQREY0MTdDb2Rld29yZCAqY29kZXdvcmQgPSBbc2VsZi5kZXRlY3Rpb25SZXN1bHRDb2x1bW5zSW50ZXJuYWxbYmFyY29kZUNvbHVtbl0gY29kZXdvcmRzXVtjb2Rld29yZHNSb3ddOworICAgICAgICBpZiAoKGlkKWNvZGV3b3JkICE9IFtOU051bGwgbnVsbF0pIHsKKyAgICAgICAgICBpbnZhbGlkUm93Q291bnRzID0gW3NlbGYgYWRqdXN0Um93TnVtYmVySWZWYWxpZDpyb3dJbmRpY2F0b3JSb3dOdW1iZXIgaW52YWxpZFJvd0NvdW50czppbnZhbGlkUm93Q291bnRzIGNvZGV3b3JkOmNvZGV3b3JkXTsKKyAgICAgICAgICBpZiAoIVtjb2Rld29yZCBoYXNWYWxpZFJvd051bWJlcl0pIHsKKyAgICAgICAgICAgIHVuYWRqdXN0ZWRDb3VudCsrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gdW5hZGp1c3RlZENvdW50OworfQorCistIChpbnQpYWRqdXN0Um93TnVtYmVyc0Zyb21MUkkgeworICBpZiAoc2VsZi5kZXRlY3Rpb25SZXN1bHRDb2x1bW5zSW50ZXJuYWxbMF0gPT0gW05TTnVsbCBudWxsXSkgeworICAgIHJldHVybiAwOworICB9CisgIGludCB1bmFkanVzdGVkQ291bnQgPSAwOworICBOU0FycmF5ICpjb2Rld29yZHMgPSBbc2VsZi5kZXRlY3Rpb25SZXN1bHRDb2x1bW5zSW50ZXJuYWxbMF0gY29kZXdvcmRzXTsKKyAgZm9yIChpbnQgY29kZXdvcmRzUm93ID0gMDsgY29kZXdvcmRzUm93IDwgW2NvZGV3b3JkcyBjb3VudF07IGNvZGV3b3Jkc1JvdysrKSB7CisgICAgaWYgKChpZCljb2Rld29yZHNbY29kZXdvcmRzUm93XSA9PSBbTlNOdWxsIG51bGxdKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaW50IHJvd0luZGljYXRvclJvd051bWJlciA9IFtjb2Rld29yZHNbY29kZXdvcmRzUm93XSByb3dOdW1iZXJdOworICAgIGludCBpbnZhbGlkUm93Q291bnRzID0gMDsKKyAgICBmb3IgKGludCBiYXJjb2RlQ29sdW1uID0gMTsgYmFyY29kZUNvbHVtbiA8IHNlbGYuYmFyY29kZUNvbHVtbkNvdW50ICsgMSAmJiBpbnZhbGlkUm93Q291bnRzIDwgQURKVVNUX1JPV19OVU1CRVJfU0tJUDsgYmFyY29kZUNvbHVtbisrKSB7CisgICAgICBpZiAoc2VsZi5kZXRlY3Rpb25SZXN1bHRDb2x1bW5zSW50ZXJuYWxbYmFyY29kZUNvbHVtbl0gIT0gW05TTnVsbCBudWxsXSkgeworICAgICAgICBaWFBERjQxN0NvZGV3b3JkICpjb2Rld29yZCA9IFtzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFtiYXJjb2RlQ29sdW1uXSBjb2Rld29yZHNdW2NvZGV3b3Jkc1Jvd107CisgICAgICAgIGlmICgoaWQpY29kZXdvcmQgIT0gW05TTnVsbCBudWxsXSkgeworICAgICAgICAgIGludmFsaWRSb3dDb3VudHMgPSBbc2VsZiBhZGp1c3RSb3dOdW1iZXJJZlZhbGlkOnJvd0luZGljYXRvclJvd051bWJlciBpbnZhbGlkUm93Q291bnRzOmludmFsaWRSb3dDb3VudHMgY29kZXdvcmQ6Y29kZXdvcmRdOworICAgICAgICAgIGlmICghW2NvZGV3b3JkIGhhc1ZhbGlkUm93TnVtYmVyXSkgeworICAgICAgICAgICAgdW5hZGp1c3RlZENvdW50Kys7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiB1bmFkanVzdGVkQ291bnQ7Cit9CisKKy0gKGludClhZGp1c3RSb3dOdW1iZXJJZlZhbGlkOihpbnQpcm93SW5kaWNhdG9yUm93TnVtYmVyIGludmFsaWRSb3dDb3VudHM6KGludClpbnZhbGlkUm93Q291bnRzIGNvZGV3b3JkOihaWFBERjQxN0NvZGV3b3JkICopY29kZXdvcmQgeworICBpZiAoIWNvZGV3b3JkKSB7CisgICAgcmV0dXJuIGludmFsaWRSb3dDb3VudHM7CisgIH0KKyAgaWYgKCFbY29kZXdvcmQgaGFzVmFsaWRSb3dOdW1iZXJdKSB7CisgICAgaWYgKFtjb2Rld29yZCBpc1ZhbGlkUm93TnVtYmVyOnJvd0luZGljYXRvclJvd051bWJlcl0pIHsKKyAgICAgIFtjb2Rld29yZCBzZXRSb3dOdW1iZXI6cm93SW5kaWNhdG9yUm93TnVtYmVyXTsKKyAgICAgIGludmFsaWRSb3dDb3VudHMgPSAwOworICAgIH0gZWxzZSB7CisgICAgICArK2ludmFsaWRSb3dDb3VudHM7CisgICAgfQorICB9CisgIHJldHVybiBpbnZhbGlkUm93Q291bnRzOworfQorCistICh2b2lkKWFkanVzdFJvd051bWJlcnM6KGludCliYXJjb2RlQ29sdW1uIGNvZGV3b3Jkc1JvdzooaW50KWNvZGV3b3Jkc1JvdyBjb2Rld29yZHM6KE5TQXJyYXkgKiljb2Rld29yZHMgeworICBaWFBERjQxN0NvZGV3b3JkICpjb2Rld29yZCA9IGNvZGV3b3Jkc1tjb2Rld29yZHNSb3ddOworICBOU0FycmF5ICpwcmV2aW91c0NvbHVtbkNvZGV3b3JkcyA9IFtzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFtiYXJjb2RlQ29sdW1uIC0gMV0gY29kZXdvcmRzXTsKKyAgTlNBcnJheSAqbmV4dENvbHVtbkNvZGV3b3JkcyA9IHByZXZpb3VzQ29sdW1uQ29kZXdvcmRzOworICBpZiAoc2VsZi5kZXRlY3Rpb25SZXN1bHRDb2x1bW5zSW50ZXJuYWxbYmFyY29kZUNvbHVtbiArIDFdICE9IFtOU051bGwgbnVsbF0pIHsKKyAgICBuZXh0Q29sdW1uQ29kZXdvcmRzID0gW3NlbGYuZGV0ZWN0aW9uUmVzdWx0Q29sdW1uc0ludGVybmFsW2JhcmNvZGVDb2x1bW4gKyAxXSBjb2Rld29yZHNdOworICB9CisKKyAgTlNNdXRhYmxlQXJyYXkgKm90aGVyQ29kZXdvcmRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OjE0XTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisgICAgW290aGVyQ29kZXdvcmRzIGFkZE9iamVjdDpbTlNOdWxsIG51bGxdXTsKKyAgfQorCisgIG90aGVyQ29kZXdvcmRzWzJdID0gcHJldmlvdXNDb2x1bW5Db2Rld29yZHNbY29kZXdvcmRzUm93XTsKKyAgb3RoZXJDb2Rld29yZHNbM10gPSBuZXh0Q29sdW1uQ29kZXdvcmRzW2NvZGV3b3Jkc1Jvd107CisKKyAgaWYgKGNvZGV3b3Jkc1JvdyA+IDApIHsKKyAgICBvdGhlckNvZGV3b3Jkc1swXSA9IGNvZGV3b3Jkc1tjb2Rld29yZHNSb3cgLSAxXTsKKyAgICBvdGhlckNvZGV3b3Jkc1s0XSA9IHByZXZpb3VzQ29sdW1uQ29kZXdvcmRzW2NvZGV3b3Jkc1JvdyAtIDFdOworICAgIG90aGVyQ29kZXdvcmRzWzVdID0gbmV4dENvbHVtbkNvZGV3b3Jkc1tjb2Rld29yZHNSb3cgLSAxXTsKKyAgfQorICBpZiAoY29kZXdvcmRzUm93ID4gMSkgeworICAgIG90aGVyQ29kZXdvcmRzWzhdID0gY29kZXdvcmRzW2NvZGV3b3Jkc1JvdyAtIDJdOworICAgIG90aGVyQ29kZXdvcmRzWzEwXSA9IHByZXZpb3VzQ29sdW1uQ29kZXdvcmRzW2NvZGV3b3Jkc1JvdyAtIDJdOworICAgIG90aGVyQ29kZXdvcmRzWzExXSA9IG5leHRDb2x1bW5Db2Rld29yZHNbY29kZXdvcmRzUm93IC0gMl07CisgIH0KKyAgaWYgKGNvZGV3b3Jkc1JvdyA8IFtjb2Rld29yZHMgY291bnRdIC0gMSkgeworICAgIG90aGVyQ29kZXdvcmRzWzFdID0gY29kZXdvcmRzW2NvZGV3b3Jkc1JvdyArIDFdOworICAgIG90aGVyQ29kZXdvcmRzWzZdID0gcHJldmlvdXNDb2x1bW5Db2Rld29yZHNbY29kZXdvcmRzUm93ICsgMV07CisgICAgb3RoZXJDb2Rld29yZHNbN10gPSBuZXh0Q29sdW1uQ29kZXdvcmRzW2NvZGV3b3Jkc1JvdyArIDFdOworICB9CisgIGlmIChjb2Rld29yZHNSb3cgPCBbY29kZXdvcmRzIGNvdW50XSAtIDIpIHsKKyAgICBvdGhlckNvZGV3b3Jkc1s5XSA9IGNvZGV3b3Jkc1tjb2Rld29yZHNSb3cgKyAyXTsKKyAgICBvdGhlckNvZGV3b3Jkc1sxMl0gPSBwcmV2aW91c0NvbHVtbkNvZGV3b3Jkc1tjb2Rld29yZHNSb3cgKyAyXTsKKyAgICBvdGhlckNvZGV3b3Jkc1sxM10gPSBuZXh0Q29sdW1uQ29kZXdvcmRzW2NvZGV3b3Jkc1JvdyArIDJdOworICB9CisgIGZvciAoWlhQREY0MTdDb2Rld29yZCAqb3RoZXJDb2Rld29yZCBpbiBvdGhlckNvZGV3b3JkcykgeworICAgIGlmIChbc2VsZiBhZGp1c3RSb3dOdW1iZXI6Y29kZXdvcmQgb3RoZXJDb2Rld29yZDpvdGhlckNvZGV3b3JkXSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorfQorCisvKioKKyAqIFJldHVybiB0cnVlIGlmIHJvdyBudW1iZXIgd2FzIGFkanVzdGVkLCBmYWxzZSBvdGhlcndpc2UKKyAqLworLSAoQk9PTClhZGp1c3RSb3dOdW1iZXI6KFpYUERGNDE3Q29kZXdvcmQgKiljb2Rld29yZCBvdGhlckNvZGV3b3JkOihaWFBERjQxN0NvZGV3b3JkICopb3RoZXJDb2Rld29yZCB7CisgIGlmICgoaWQpb3RoZXJDb2Rld29yZCA9PSBbTlNOdWxsIG51bGxdKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIGlmIChbb3RoZXJDb2Rld29yZCBoYXNWYWxpZFJvd051bWJlcl0gJiYgb3RoZXJDb2Rld29yZC5idWNrZXQgPT0gY29kZXdvcmQuYnVja2V0KSB7CisgICAgW2NvZGV3b3JkIHNldFJvd051bWJlcjpvdGhlckNvZGV3b3JkLnJvd051bWJlcl07CisgICAgcmV0dXJuIFlFUzsKKyAgfQorICByZXR1cm4gTk87Cit9CisKKy0gKGludCliYXJjb2RlQ29sdW1uQ291bnQgeworICByZXR1cm4gX2JhcmNvZGVDb2x1bW5Db3VudDsKK30KKworLSAoaW50KWJhcmNvZGVSb3dDb3VudCB7CisgIHJldHVybiBzZWxmLmJhcmNvZGVNZXRhZGF0YS5yb3dDb3VudDsKK30KKworLSAoaW50KWJhcmNvZGVFQ0xldmVsIHsKKyAgcmV0dXJuIHNlbGYuYmFyY29kZU1ldGFkYXRhLmVycm9yQ29ycmVjdGlvbkxldmVsOworfQorCistICh2b2lkKXNldERldGVjdGlvblJlc3VsdENvbHVtbjooaW50KWJhcmNvZGVDb2x1bW4gZGV0ZWN0aW9uUmVzdWx0Q29sdW1uOihaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbiAqKWRldGVjdGlvblJlc3VsdENvbHVtbiB7CisgIGlmICghZGV0ZWN0aW9uUmVzdWx0Q29sdW1uKSB7CisgICAgc2VsZi5kZXRlY3Rpb25SZXN1bHRDb2x1bW5zSW50ZXJuYWxbYmFyY29kZUNvbHVtbl0gPSBbTlNOdWxsIG51bGxdOworICB9IGVsc2UgeworICAgIHNlbGYuZGV0ZWN0aW9uUmVzdWx0Q29sdW1uc0ludGVybmFsW2JhcmNvZGVDb2x1bW5dID0gZGV0ZWN0aW9uUmVzdWx0Q29sdW1uOworICB9Cit9CisKKy0gKFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uICopZGV0ZWN0aW9uUmVzdWx0Q29sdW1uOihpbnQpYmFyY29kZUNvbHVtbiB7CisgIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uICpyZXN1bHQgPSBzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFtiYXJjb2RlQ29sdW1uXTsKKyAgcmV0dXJuIChpZClyZXN1bHQgPT0gW05TTnVsbCBudWxsXSA/IG5pbCA6IHJlc3VsdDsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7CisgIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uICpyb3dJbmRpY2F0b3JDb2x1bW4gPSBzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFswXTsKKyAgaWYgKChpZClyb3dJbmRpY2F0b3JDb2x1bW4gPT0gW05TTnVsbCBudWxsXSkgeworICAgIHJvd0luZGljYXRvckNvbHVtbiA9IHNlbGYuZGV0ZWN0aW9uUmVzdWx0Q29sdW1uc0ludGVybmFsW3NlbGYuYmFyY29kZUNvbHVtbkNvdW50ICsgMV07CisgIH0KKyAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgIGZvciAoaW50IGNvZGV3b3Jkc1JvdyA9IDA7IGNvZGV3b3Jkc1JvdyA8IFtyb3dJbmRpY2F0b3JDb2x1bW4uY29kZXdvcmRzIGNvdW50XTsgY29kZXdvcmRzUm93KyspIHsKKyAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIkNXICUzZDoiLCBjb2Rld29yZHNSb3ddOworICAgIGZvciAoaW50IGJhcmNvZGVDb2x1bW4gPSAwOyBiYXJjb2RlQ29sdW1uIDwgc2VsZi5iYXJjb2RlQ29sdW1uQ291bnQgKyAyOyBiYXJjb2RlQ29sdW1uKyspIHsKKyAgICAgIGlmIChzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFtiYXJjb2RlQ29sdW1uXSA9PSBbTlNOdWxsIG51bGxdKSB7CisgICAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAiICAgIHwgICAiXTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBaWFBERjQxN0NvZGV3b3JkICpjb2Rld29yZCA9IFsoWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4gKilzZWxmLmRldGVjdGlvblJlc3VsdENvbHVtbnNJbnRlcm5hbFtiYXJjb2RlQ29sdW1uXSBjb2Rld29yZHNdW2NvZGV3b3Jkc1Jvd107CisgICAgICBpZiAoKGlkKWNvZGV3b3JkID09IFtOU051bGwgbnVsbF0pIHsKKyAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIgICAgfCAgICJdOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiICUzZHwlM2QiLCBjb2Rld29yZC5yb3dOdW1iZXIsIGNvZGV3b3JkLnZhbHVlXTsKKyAgICB9CisgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCJcbiJdOworICB9CisKKyAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoU3RyaW5nOnJlc3VsdF07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbi5oIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzODVkNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BjbGFzcyBaWFBERjQxN0JvdW5kaW5nQm94LCBaWFBERjQxN0NvZGV3b3JkOworCitAaW50ZXJmYWNlIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIFpYUERGNDE3Qm91bmRpbmdCb3ggKmJvdW5kaW5nQm94OworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIE5TTXV0YWJsZUFycmF5ICpjb2Rld29yZHM7CisKKy0gKGlkKWluaXRXaXRoQm91bmRpbmdCb3g6KFpYUERGNDE3Qm91bmRpbmdCb3ggKilib3VuZGluZ0JveDsKKy0gKFpYUERGNDE3Q29kZXdvcmQgKiljb2Rld29yZE5lYXJieTooaW50KWltYWdlUm93OworLSAoaW50KWltYWdlUm93VG9Db2Rld29yZEluZGV4OihpbnQpaW1hZ2VSb3c7CistIChpbnQpY29kZXdvcmRJbmRleFRvSW1hZ2VSb3c6KGludCljb2Rld29yZEluZGV4OworLSAodm9pZClzZXRDb2Rld29yZDooaW50KWltYWdlUm93IGNvZGV3b3JkOihaWFBERjQxN0NvZGV3b3JkICopY29kZXdvcmQ7CistIChaWFBERjQxN0NvZGV3b3JkICopY29kZXdvcmQ6KGludClpbWFnZVJvdzsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLm0gYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRDb2x1bW4ubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDZhZTdjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLm0KQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUERGNDE3Qm91bmRpbmdCb3guaCIKKyNpbXBvcnQgIlpYUERGNDE3Q29kZXdvcmQuaCIKKyNpbXBvcnQgIlpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLmgiCisKK2ludCBjb25zdCBNQVhfTkVBUkJZX0RJU1RBTkNFID0gNTsKKworQGludGVyZmFjZSBaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbiAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWFBERjQxN0JvdW5kaW5nQm94ICpib3VuZGluZ0JveDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TTXV0YWJsZUFycmF5ICpjb2Rld29yZHM7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uCisKKy0gKGlkKWluaXRXaXRoQm91bmRpbmdCb3g6KFpYUERGNDE3Qm91bmRpbmdCb3ggKilib3VuZGluZ0JveCB7CisgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgIGlmIChzZWxmKSB7CisgICAgX2JvdW5kaW5nQm94ID0gW1taWFBERjQxN0JvdW5kaW5nQm94IGFsbG9jXSBpbml0V2l0aEJvdW5kaW5nQm94OmJvdW5kaW5nQm94XTsKKyAgICBfY29kZXdvcmRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJvdW5kaW5nQm94Lm1heFkgLSBib3VuZGluZ0JveC5taW5ZICsgMTsgaSsrKSB7CisgICAgICBbX2NvZGV3b3JkcyBhZGRPYmplY3Q6W05TTnVsbCBudWxsXV07CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFpYUERGNDE3Q29kZXdvcmQgKiljb2Rld29yZE5lYXJieTooaW50KWltYWdlUm93IHsKKyAgWlhQREY0MTdDb2Rld29yZCAqY29kZXdvcmQgPSBbc2VsZiBjb2Rld29yZDppbWFnZVJvd107CisgIGlmIChjb2Rld29yZCkgeworICAgIHJldHVybiBjb2Rld29yZDsKKyAgfQorICBmb3IgKGludCBpID0gMTsgaSA8IE1BWF9ORUFSQllfRElTVEFOQ0U7IGkrKykgeworICAgIGludCBuZWFySW1hZ2VSb3cgPSBbc2VsZiBpbWFnZVJvd1RvQ29kZXdvcmRJbmRleDppbWFnZVJvd10gLSBpOworICAgIGlmIChuZWFySW1hZ2VSb3cgPj0gMCkgeworICAgICAgY29kZXdvcmQgPSBzZWxmLmNvZGV3b3Jkc1tuZWFySW1hZ2VSb3ddOworICAgICAgaWYgKChpZCljb2Rld29yZCAhPSBbTlNOdWxsIG51bGxdKSB7CisgICAgICAgIHJldHVybiBjb2Rld29yZDsKKyAgICAgIH0KKyAgICB9CisgICAgbmVhckltYWdlUm93ID0gW3NlbGYgaW1hZ2VSb3dUb0NvZGV3b3JkSW5kZXg6aW1hZ2VSb3ddICsgaTsKKyAgICBpZiAobmVhckltYWdlUm93IDwgW3NlbGYuY29kZXdvcmRzIGNvdW50XSkgeworICAgICAgY29kZXdvcmQgPSBzZWxmLmNvZGV3b3Jkc1tuZWFySW1hZ2VSb3ddOworICAgICAgaWYgKChpZCljb2Rld29yZCAhPSBbTlNOdWxsIG51bGxdKSB7CisgICAgICAgIHJldHVybiBjb2Rld29yZDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIG5pbDsKK30KKworLSAoaW50KWltYWdlUm93VG9Db2Rld29yZEluZGV4OihpbnQpaW1hZ2VSb3cgeworICByZXR1cm4gaW1hZ2VSb3cgLSBzZWxmLmJvdW5kaW5nQm94Lm1pblk7Cit9CisKKy0gKGludCljb2Rld29yZEluZGV4VG9JbWFnZVJvdzooaW50KWNvZGV3b3JkSW5kZXggeworICByZXR1cm4gc2VsZi5ib3VuZGluZ0JveC5taW5ZICsgY29kZXdvcmRJbmRleDsKK30KKworLSAodm9pZClzZXRDb2Rld29yZDooaW50KWltYWdlUm93IGNvZGV3b3JkOihaWFBERjQxN0NvZGV3b3JkICopY29kZXdvcmQgeworICBfY29kZXdvcmRzW1tzZWxmIGltYWdlUm93VG9Db2Rld29yZEluZGV4OmltYWdlUm93XV0gPSBjb2Rld29yZDsKK30KKworLSAoWlhQREY0MTdDb2Rld29yZCAqKWNvZGV3b3JkOihpbnQpaW1hZ2VSb3cgeworICBOU1VJbnRlZ2VyIGluZGV4ID0gW3NlbGYgaW1hZ2VSb3dUb0NvZGV3b3JkSW5kZXg6aW1hZ2VSb3ddOworICBpZiAoX2NvZGV3b3Jkc1tpbmRleF0gPT0gW05TTnVsbCBudWxsXSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgcmV0dXJuIF9jb2Rld29yZHNbaW5kZXhdOworfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKKyAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgIGludCByb3cgPSAwOworICBmb3IgKFpYUERGNDE3Q29kZXdvcmQgKmNvZGV3b3JkIGluIHNlbGYuY29kZXdvcmRzKSB7CisgICAgaWYgKChpZCljb2Rld29yZCA9PSBbTlNOdWxsIG51bGxdKSB7CisgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiUzZDogICAgfCAgIFxuIiwgcm93KytdOworICAgICAgY29udGludWU7CisgICAgfQorICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJTNkOiAlM2R8JTNkXG4iLCByb3crKywgY29kZXdvcmQucm93TnVtYmVyLCBjb2Rld29yZC52YWx1ZV07CisgIH0KKyAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoU3RyaW5nOnJlc3VsdF07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5oIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxY2ViZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uLmgiCisKK0BjbGFzcyBaWFBERjQxN0JhcmNvZGVNZXRhZGF0YSwgWlhQREY0MTdCb3VuZGluZ0JveDsKKworQGludGVyZmFjZSBaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbiA6IFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBCT09MIGlzTGVmdDsKKworLSAoaWQpaW5pdFdpdGhCb3VuZGluZ0JveDooWlhQREY0MTdCb3VuZGluZ0JveCAqKWJvdW5kaW5nQm94IGlzTGVmdDooQk9PTClpc0xlZnQ7CistICh2b2lkKXNldFJvd051bWJlcnM7CistIChOU0FycmF5ICopcm93SGVpZ2h0czsKKy0gKGludClhZGp1c3RDb21wbGV0ZUluZGljYXRvckNvbHVtblJvd051bWJlcnM6KFpYUERGNDE3QmFyY29kZU1ldGFkYXRhICopYmFyY29kZU1ldGFkYXRhOworLSAoaW50KWFkanVzdEluY29tcGxldGVJbmRpY2F0b3JDb2x1bW5Sb3dOdW1iZXJzOihaWFBERjQxN0JhcmNvZGVNZXRhZGF0YSAqKWJhcmNvZGVNZXRhZGF0YTsKKy0gKFpYUERGNDE3QmFyY29kZU1ldGFkYXRhICopYmFyY29kZU1ldGFkYXRhOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4ubSBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZDA3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4ubQpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEuaCIKKyNpbXBvcnQgIlpYUERGNDE3QmFyY29kZVZhbHVlLmgiCisjaW1wb3J0ICJaWFBERjQxN0JvdW5kaW5nQm94LmgiCisjaW1wb3J0ICJaWFBERjQxN0NvZGV3b3JkLmgiCisjaW1wb3J0ICJaWFBERjQxN0NvbW1vbi5oIgorI2ltcG9ydCAiWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQuaCIKKyNpbXBvcnQgIlpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uLmgiCisjaW1wb3J0ICJaWFJlc3VsdFBvaW50LmgiCisKK0BpbnRlcmZhY2UgWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4gKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgQk9PTCBpc0xlZnQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uCisKKy0gKGlkKWluaXRXaXRoQm91bmRpbmdCb3g6KFpYUERGNDE3Qm91bmRpbmdCb3ggKilib3VuZGluZ0JveCBpc0xlZnQ6KEJPT0wpaXNMZWZ0IHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEJvdW5kaW5nQm94OmJvdW5kaW5nQm94XTsKKyAgaWYgKHNlbGYpIHsKKyAgICBfaXNMZWZ0ID0gaXNMZWZ0OworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Um93TnVtYmVycyB7CisgIGZvciAoWlhQREY0MTdDb2Rld29yZCAqY29kZXdvcmQgaW4gW3NlbGYgY29kZXdvcmRzXSkgeworICAgIGlmICgoaWQpY29kZXdvcmQgIT0gW05TTnVsbCBudWxsXSkgeworICAgICAgW2NvZGV3b3JkIHNldFJvd051bWJlckFzUm93SW5kaWNhdG9yQ29sdW1uXTsKKyAgICB9CisgIH0KK30KKworLy8gVE9ETyBpbXBsZW1lbnQgcHJvcGVybHkKKy8vIFRPRE8gbWF5YmUgd2Ugc2hvdWxkIGFkZCBtaXNzaW5nIGNvZGV3b3JkcyB0byBzdG9yZSB0aGUgY29ycmVjdCByb3cgbnVtYmVyIHRvIG1ha2UKKy8vIGZpbmRpbmcgcm93IG51bWJlcnMgZm9yIG90aGVyIGNvbHVtbnMgZWFzaWVyCisvLyB1c2Ugcm93IGhlaWdodCBjb3VudCB0byBtYWtlIGRldGVjdGlvbiBvZiBpbnZhbGlkIHJvdyBudW1iZXJzIG1vcmUgcmVsaWFibGUKKy0gKGludClhZGp1c3RDb21wbGV0ZUluZGljYXRvckNvbHVtblJvd051bWJlcnM6KFpYUERGNDE3QmFyY29kZU1ldGFkYXRhICopYmFyY29kZU1ldGFkYXRhIHsKKyAgW3NlbGYgc2V0Um93TnVtYmVyc107CisgIFtzZWxmIHJlbW92ZUluY29ycmVjdENvZGV3b3JkczpiYXJjb2RlTWV0YWRhdGFdOworICBaWFJlc3VsdFBvaW50ICp0b3AgPSBzZWxmLmlzTGVmdCA/IHNlbGYuYm91bmRpbmdCb3gudG9wTGVmdCA6IHNlbGYuYm91bmRpbmdCb3gudG9wUmlnaHQ7CisgIFpYUmVzdWx0UG9pbnQgKmJvdHRvbSA9IHNlbGYuaXNMZWZ0ID8gc2VsZi5ib3VuZGluZ0JveC5ib3R0b21MZWZ0IDogc2VsZi5ib3VuZGluZ0JveC5ib3R0b21SaWdodDsKKyAgaW50IGZpcnN0Um93ID0gW3NlbGYgaW1hZ2VSb3dUb0NvZGV3b3JkSW5kZXg6KGludCkgdG9wLnldOworICBpbnQgbGFzdFJvdyA9IFtzZWxmIGltYWdlUm93VG9Db2Rld29yZEluZGV4OihpbnQpIGJvdHRvbS55XTsKKyAgLy8gV2UgbmVlZCB0byBiZSBjYXJlZnVsIHVzaW5nIHRoZSBhdmVyYWdlIHJvdyBoZWlnaHQuIEJhcmNvZGUgY291bGQgYmUgc2tld2VkIHNvIHRoYXQgd2UgaGF2ZSBzbWFsbGVyIGFuZAorICAvLyB0YWxsZXIgcm93cworICBmbG9hdCBhdmVyYWdlUm93SGVpZ2h0ID0gKGxhc3RSb3cgLSBmaXJzdFJvdykgLyAoZmxvYXQpIGJhcmNvZGVNZXRhZGF0YS5yb3dDb3VudDsKKyAgaW50IGJhcmNvZGVSb3cgPSAtMTsKKyAgaW50IG1heFJvd0hlaWdodCA9IDE7CisgIGludCBjdXJyZW50Um93SGVpZ2h0ID0gMDsKKyAgZm9yIChpbnQgY29kZXdvcmRzUm93ID0gZmlyc3RSb3c7IGNvZGV3b3Jkc1JvdyA8IGxhc3RSb3c7IGNvZGV3b3Jkc1JvdysrKSB7CisgICAgaWYgKHNlbGYuY29kZXdvcmRzW2NvZGV3b3Jkc1Jvd10gPT0gW05TTnVsbCBudWxsXSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIFpYUERGNDE3Q29kZXdvcmQgKmNvZGV3b3JkID0gc2VsZi5jb2Rld29yZHNbY29kZXdvcmRzUm93XTsKKworICAgIC8vICAgICAgZmxvYXQgZXhwZWN0ZWRSb3dOdW1iZXIgPSAoY29kZXdvcmRzUm93IC0gZmlyc3RSb3cpIC8gYXZlcmFnZVJvd0hlaWdodDsKKyAgICAvLyAgICAgIGlmIChNYXRoLmFicyhjb2Rld29yZC5nZXRSb3dOdW1iZXIoKSAtIGV4cGVjdGVkUm93TnVtYmVyKSA+IDIpIHsKKyAgICAvLyAgICAgICAgU2ltcGxlTG9nLmxvZyhMRVZFTC5XQVJOSU5HLAorICAgIC8vICAgICAgICAgICAgIlJlbW92aW5nIGNvZGV3b3JkLCByb3dOdW1iZXJTa2V3IHRvbyBoaWdoLCBjb2Rld29yZFsiICsgY29kZXdvcmRzUm93ICsgIl06IEV4cGVjdGVkIFJvdzogIiArCisgICAgLy8gICAgICAgICAgICAgICAgZXhwZWN0ZWRSb3dOdW1iZXIgKyAiLCBSZWFsUm93OiAiICsgY29kZXdvcmQuZ2V0Um93TnVtYmVyKCkgKyAiLCB2YWx1ZTogIiArIGNvZGV3b3JkLmdldFZhbHVlKCkpOworICAgIC8vICAgICAgICBjb2Rld29yZHNbY29kZXdvcmRzUm93XSA9IG51bGw7CisgICAgLy8gICAgICB9CisKKyAgICBpbnQgcm93RGlmZmVyZW5jZSA9IGNvZGV3b3JkLnJvd051bWJlciAtIGJhcmNvZGVSb3c7CisKKyAgICAvLyBUT0RPIGltcHJvdmUgaGFuZGxpbmcgd2l0aCBjYXNlIHdoZXJlIGZpcnN0IHJvdyBpbmRpY2F0b3IgZG9lc24ndCBzdGFydCB3aXRoIDAKKworICAgIGlmIChyb3dEaWZmZXJlbmNlID09IDApIHsKKyAgICAgIGN1cnJlbnRSb3dIZWlnaHQrKzsKKyAgICB9IGVsc2UgaWYgKHJvd0RpZmZlcmVuY2UgPT0gMSkgeworICAgICAgbWF4Um93SGVpZ2h0ID0gTUFYKG1heFJvd0hlaWdodCwgY3VycmVudFJvd0hlaWdodCk7CisgICAgICBjdXJyZW50Um93SGVpZ2h0ID0gMTsKKyAgICAgIGJhcmNvZGVSb3cgPSBjb2Rld29yZC5yb3dOdW1iZXI7CisgICAgfSBlbHNlIGlmIChyb3dEaWZmZXJlbmNlIDwgMCkgeworICAgICAgc2VsZi5jb2Rld29yZHNbY29kZXdvcmRzUm93XSA9IFtOU051bGwgbnVsbF07CisgICAgfSBlbHNlIGlmIChjb2Rld29yZC5yb3dOdW1iZXIgPj0gYmFyY29kZU1ldGFkYXRhLnJvd0NvdW50KSB7CisgICAgICBzZWxmLmNvZGV3b3Jkc1tjb2Rld29yZHNSb3ddID0gW05TTnVsbCBudWxsXTsKKyAgICB9IGVsc2UgaWYgKHJvd0RpZmZlcmVuY2UgPiBjb2Rld29yZHNSb3cpIHsKKyAgICAgIHNlbGYuY29kZXdvcmRzW2NvZGV3b3Jkc1Jvd10gPSBbTlNOdWxsIG51bGxdOworICAgIH0gZWxzZSB7CisgICAgICBpbnQgY2hlY2tlZFJvd3M7CisgICAgICBpZiAobWF4Um93SGVpZ2h0ID4gMikgeworICAgICAgICBjaGVja2VkUm93cyA9IChtYXhSb3dIZWlnaHQgLSAyKSAqIHJvd0RpZmZlcmVuY2U7CisgICAgICB9IGVsc2UgeworICAgICAgICBjaGVja2VkUm93cyA9IHJvd0RpZmZlcmVuY2U7CisgICAgICB9CisgICAgICBCT09MIGNsb3NlUHJldmlvdXNDb2Rld29yZEZvdW5kID0gY2hlY2tlZFJvd3MgPj0gY29kZXdvcmRzUm93OworICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gY2hlY2tlZFJvd3MgJiYgIWNsb3NlUHJldmlvdXNDb2Rld29yZEZvdW5kOyBpKyspIHsKKyAgICAgICAgLy8gdGhlcmUgbXVzdCBiZSAoaGVpZ2h0ICogcm93RGlmZmVyZW5jZSkgbnVtYmVyIG9mIGNvZGV3b3JkcyBtaXNzaW5nLiBGb3Igbm93IHdlIGFzc3VtZSBoZWlnaHQgPSAxLgorICAgICAgICAvLyBUaGlzIHNob3VsZCBob3BlZnVsbHkgZ2V0IHJpZCBvZiBtb3N0IHByb2JsZW1zIGFscmVhZHkuCisgICAgICAgIGNsb3NlUHJldmlvdXNDb2Rld29yZEZvdW5kID0gc2VsZi5jb2Rld29yZHNbY29kZXdvcmRzUm93IC0gaV0gIT0gW05TTnVsbCBudWxsXTsKKyAgICAgIH0KKyAgICAgIGlmIChjbG9zZVByZXZpb3VzQ29kZXdvcmRGb3VuZCkgeworICAgICAgICBzZWxmLmNvZGV3b3Jkc1tjb2Rld29yZHNSb3ddID0gW05TTnVsbCBudWxsXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGJhcmNvZGVSb3cgPSBjb2Rld29yZC5yb3dOdW1iZXI7CisgICAgICAgIGN1cnJlbnRSb3dIZWlnaHQgPSAxOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gKGludCkgKGF2ZXJhZ2VSb3dIZWlnaHQgKyAwLjUpOworfQorCistIChOU0FycmF5ICopcm93SGVpZ2h0cyB7CisgIFpYUERGNDE3QmFyY29kZU1ldGFkYXRhICpiYXJjb2RlTWV0YWRhdGEgPSBbc2VsZiBiYXJjb2RlTWV0YWRhdGFdOworICBpZiAoIWJhcmNvZGVNZXRhZGF0YSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgW3NlbGYgYWRqdXN0SW5jb21wbGV0ZUluZGljYXRvckNvbHVtblJvd051bWJlcnM6YmFyY29kZU1ldGFkYXRhXTsKKyAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpiYXJjb2RlTWV0YWRhdGEucm93Q291bnRdOworICBmb3IgKGludCBpID0gMDsgaSA8IGJhcmNvZGVNZXRhZGF0YS5yb3dDb3VudDsgaSsrKSB7CisgICAgW3Jlc3VsdCBhZGRPYmplY3Q6QDBdOworICB9CisKKyAgZm9yIChaWFBERjQxN0NvZGV3b3JkICpjb2Rld29yZCBpbiBbc2VsZiBjb2Rld29yZHNdKSB7CisgICAgaWYgKChpZCljb2Rld29yZCAhPSBbTlNOdWxsIG51bGxdKSB7CisgICAgICByZXN1bHRbY29kZXdvcmQucm93TnVtYmVyXSA9IEAoW3Jlc3VsdFtjb2Rld29yZC5yb3dOdW1iZXJdIGludFZhbHVlXSArIDEpOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvLyBUT0RPIG1heWJlIHdlIHNob3VsZCBhZGQgbWlzc2luZyBjb2Rld29yZHMgdG8gc3RvcmUgdGhlIGNvcnJlY3Qgcm93IG51bWJlciB0byBtYWtlCisvLyBmaW5kaW5nIHJvdyBudW1iZXJzIGZvciBvdGhlciBjb2x1bW5zIGVhc2llcgorLy8gdXNlIHJvdyBoZWlnaHQgY291bnQgdG8gbWFrZSBkZXRlY3Rpb24gb2YgaW52YWxpZCByb3cgbnVtYmVycyBtb3JlIHJlbGlhYmxlCistIChpbnQpYWRqdXN0SW5jb21wbGV0ZUluZGljYXRvckNvbHVtblJvd051bWJlcnM6KFpYUERGNDE3QmFyY29kZU1ldGFkYXRhICopYmFyY29kZU1ldGFkYXRhIHsKKyAgWlhSZXN1bHRQb2ludCAqdG9wID0gc2VsZi5pc0xlZnQgPyBzZWxmLmJvdW5kaW5nQm94LnRvcExlZnQgOiBzZWxmLmJvdW5kaW5nQm94LnRvcFJpZ2h0OworICBaWFJlc3VsdFBvaW50ICpib3R0b20gPSBzZWxmLmlzTGVmdCA/IHNlbGYuYm91bmRpbmdCb3guYm90dG9tTGVmdCA6IHNlbGYuYm91bmRpbmdCb3guYm90dG9tUmlnaHQ7CisgIGludCBmaXJzdFJvdyA9IFtzZWxmIGltYWdlUm93VG9Db2Rld29yZEluZGV4OihpbnQpIHRvcC55XTsKKyAgaW50IGxhc3RSb3cgPSBbc2VsZiBpbWFnZVJvd1RvQ29kZXdvcmRJbmRleDooaW50KSBib3R0b20ueV07CisgIGZsb2F0IGF2ZXJhZ2VSb3dIZWlnaHQgPSAobGFzdFJvdyAtIGZpcnN0Um93KSAvIChmbG9hdCkgYmFyY29kZU1ldGFkYXRhLnJvd0NvdW50OworICBpbnQgYmFyY29kZVJvdyA9IC0xOworICBpbnQgbWF4Um93SGVpZ2h0ID0gMTsKKyAgaW50IGN1cnJlbnRSb3dIZWlnaHQgPSAwOworICBmb3IgKGludCBjb2Rld29yZHNSb3cgPSBmaXJzdFJvdzsgY29kZXdvcmRzUm93IDwgbGFzdFJvdzsgY29kZXdvcmRzUm93KyspIHsKKyAgICBpZiAoc2VsZi5jb2Rld29yZHNbY29kZXdvcmRzUm93XSA9PSBbTlNOdWxsIG51bGxdKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgWlhQREY0MTdDb2Rld29yZCAqY29kZXdvcmQgPSBzZWxmLmNvZGV3b3Jkc1tjb2Rld29yZHNSb3ddOworCisgICAgW2NvZGV3b3JkIHNldFJvd051bWJlckFzUm93SW5kaWNhdG9yQ29sdW1uXTsKKworICAgIGludCByb3dEaWZmZXJlbmNlID0gY29kZXdvcmQucm93TnVtYmVyIC0gYmFyY29kZVJvdzsKKworICAgIC8vIFRPRE8gaW1wcm92ZSBoYW5kbGluZyB3aXRoIGNhc2Ugd2hlcmUgZmlyc3Qgcm93IGluZGljYXRvciBkb2Vzbid0IHN0YXJ0IHdpdGggMAorCisgICAgaWYgKHJvd0RpZmZlcmVuY2UgPT0gMCkgeworICAgICAgY3VycmVudFJvd0hlaWdodCsrOworICAgIH0gZWxzZSBpZiAocm93RGlmZmVyZW5jZSA9PSAxKSB7CisgICAgICBtYXhSb3dIZWlnaHQgPSBNQVgobWF4Um93SGVpZ2h0LCBjdXJyZW50Um93SGVpZ2h0KTsKKyAgICAgIGN1cnJlbnRSb3dIZWlnaHQgPSAxOworICAgICAgYmFyY29kZVJvdyA9IGNvZGV3b3JkLnJvd051bWJlcjsKKyAgICB9IGVsc2UgaWYgKGNvZGV3b3JkLnJvd051bWJlciA+PSBiYXJjb2RlTWV0YWRhdGEucm93Q291bnQpIHsKKyAgICAgIHNlbGYuY29kZXdvcmRzW2NvZGV3b3Jkc1Jvd10gPSBbTlNOdWxsIG51bGxdOworICAgIH0gZWxzZSB7CisgICAgICBiYXJjb2RlUm93ID0gY29kZXdvcmQucm93TnVtYmVyOworICAgICAgY3VycmVudFJvd0hlaWdodCA9IDE7CisgICAgfQorICB9CisgIHJldHVybiAoaW50KSAoYXZlcmFnZVJvd0hlaWdodCArIDAuNSk7Cit9CisKKy0gKFpYUERGNDE3QmFyY29kZU1ldGFkYXRhICopYmFyY29kZU1ldGFkYXRhIHsKKyAgWlhQREY0MTdCYXJjb2RlVmFsdWUgKmJhcmNvZGVDb2x1bW5Db3VudCA9IFtbWlhQREY0MTdCYXJjb2RlVmFsdWUgYWxsb2NdIGluaXRdOworICBaWFBERjQxN0JhcmNvZGVWYWx1ZSAqYmFyY29kZVJvd0NvdW50VXBwZXJQYXJ0ID0gW1taWFBERjQxN0JhcmNvZGVWYWx1ZSBhbGxvY10gaW5pdF07CisgIFpYUERGNDE3QmFyY29kZVZhbHVlICpiYXJjb2RlUm93Q291bnRMb3dlclBhcnQgPSBbW1pYUERGNDE3QmFyY29kZVZhbHVlIGFsbG9jXSBpbml0XTsKKyAgWlhQREY0MTdCYXJjb2RlVmFsdWUgKmJhcmNvZGVFQ0xldmVsID0gW1taWFBERjQxN0JhcmNvZGVWYWx1ZSBhbGxvY10gaW5pdF07CisgIGZvciAoWlhQREY0MTdDb2Rld29yZCAqY29kZXdvcmQgaW4gc2VsZi5jb2Rld29yZHMpIHsKKyAgICBpZiAoKGlkKWNvZGV3b3JkID09IFtOU051bGwgbnVsbF0pIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBbY29kZXdvcmQgc2V0Um93TnVtYmVyQXNSb3dJbmRpY2F0b3JDb2x1bW5dOworICAgIGludCByb3dJbmRpY2F0b3JWYWx1ZSA9IGNvZGV3b3JkLnZhbHVlICUgMzA7CisgICAgaW50IGNvZGV3b3JkUm93TnVtYmVyID0gY29kZXdvcmQucm93TnVtYmVyOworICAgIGlmICghc2VsZi5pc0xlZnQpIHsKKyAgICAgIGNvZGV3b3JkUm93TnVtYmVyICs9IDI7CisgICAgfQorICAgIHN3aXRjaCAoY29kZXdvcmRSb3dOdW1iZXIgJSAzKSB7CisgICAgICBjYXNlIDA6CisgICAgICAgIFtiYXJjb2RlUm93Q291bnRVcHBlclBhcnQgc2V0VmFsdWU6cm93SW5kaWNhdG9yVmFsdWUgKiAzICsgMV07CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxOgorICAgICAgICBbYmFyY29kZUVDTGV2ZWwgc2V0VmFsdWU6cm93SW5kaWNhdG9yVmFsdWUgLyAzXTsKKyAgICAgICAgW2JhcmNvZGVSb3dDb3VudExvd2VyUGFydCBzZXRWYWx1ZTpyb3dJbmRpY2F0b3JWYWx1ZSAlIDNdOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgW2JhcmNvZGVDb2x1bW5Db3VudCBzZXRWYWx1ZTpyb3dJbmRpY2F0b3JWYWx1ZSArIDFdOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gTWF5YmUgd2Ugc2hvdWxkIGNoZWNrIGlmIHdlIGhhdmUgYW1iaWd1b3VzIHZhbHVlcz8KKyAgaWYgKChbW2JhcmNvZGVDb2x1bW5Db3VudCB2YWx1ZV0gY291bnRdID09IDApIHx8CisgICAgICAoW1tiYXJjb2RlUm93Q291bnRVcHBlclBhcnQgdmFsdWVdIGNvdW50XSA9PSAwKSB8fAorICAgICAgKFtbYmFyY29kZVJvd0NvdW50TG93ZXJQYXJ0IHZhbHVlXSBjb3VudF0gPT0gMCkgfHwKKyAgICAgIChbW2JhcmNvZGVFQ0xldmVsIHZhbHVlXSBjb3VudF0gPT0gMCkgfHwKKyAgICAgIFtbYmFyY29kZUNvbHVtbkNvdW50IHZhbHVlXVswXSBpbnRWYWx1ZV0gPCAxIHx8CisgICAgICBbW2JhcmNvZGVSb3dDb3VudFVwcGVyUGFydCB2YWx1ZV1bMF0gaW50VmFsdWVdICsgW1tiYXJjb2RlUm93Q291bnRMb3dlclBhcnQgdmFsdWVdWzBdIGludFZhbHVlXSA8IFpYUERGNDE3X01JTl9ST1dTX0lOX0JBUkNPREUgfHwKKyAgICAgIFtbYmFyY29kZVJvd0NvdW50VXBwZXJQYXJ0IHZhbHVlXVswXSBpbnRWYWx1ZV0gKyBbW2JhcmNvZGVSb3dDb3VudExvd2VyUGFydCB2YWx1ZV1bMF0gaW50VmFsdWVdID4gWlhQREY0MTdfTUFYX1JPV1NfSU5fQkFSQ09ERSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEgKmJhcmNvZGVNZXRhZGF0YSA9IFtbWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEgYWxsb2NdIGluaXRXaXRoQ29sdW1uQ291bnQ6W1tiYXJjb2RlQ29sdW1uQ291bnQgdmFsdWVdWzBdIGludFZhbHVlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudFVwcGVyUGFydDpbW2JhcmNvZGVSb3dDb3VudFVwcGVyUGFydCB2YWx1ZV1bMF0gaW50VmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0NvdW50TG93ZXJQYXJ0OltbYmFyY29kZVJvd0NvdW50TG93ZXJQYXJ0IHZhbHVlXVswXSBpbnRWYWx1ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6W1tiYXJjb2RlRUNMZXZlbCB2YWx1ZV1bMF0gaW50VmFsdWVdXTsKKyAgW3NlbGYgcmVtb3ZlSW5jb3JyZWN0Q29kZXdvcmRzOmJhcmNvZGVNZXRhZGF0YV07CisgIHJldHVybiBiYXJjb2RlTWV0YWRhdGE7Cit9CisKKy0gKHZvaWQpcmVtb3ZlSW5jb3JyZWN0Q29kZXdvcmRzOihaWFBERjQxN0JhcmNvZGVNZXRhZGF0YSAqKWJhcmNvZGVNZXRhZGF0YSB7CisgIC8vIFJlbW92ZSBjb2Rld29yZHMgd2hpY2ggZG8gbm90IG1hdGNoIHRoZSBtZXRhZGF0YQorICAvLyBUT0RPIE1heWJlIHdlIHNob3VsZCBrZWVwIHRoZSBpbmNvcnJlY3QgY29kZXdvcmRzIGZvciB0aGUgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnM/CisgIGZvciAoaW50IGNvZGV3b3JkUm93ID0gMDsgY29kZXdvcmRSb3cgPCBbc2VsZi5jb2Rld29yZHMgY291bnRdOyBjb2Rld29yZFJvdysrKSB7CisgICAgWlhQREY0MTdDb2Rld29yZCAqY29kZXdvcmQgPSBzZWxmLmNvZGV3b3Jkc1tjb2Rld29yZFJvd107CisgICAgaWYgKHNlbGYuY29kZXdvcmRzW2NvZGV3b3JkUm93XSA9PSBbTlNOdWxsIG51bGxdKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaW50IHJvd0luZGljYXRvclZhbHVlID0gY29kZXdvcmQudmFsdWUgJSAzMDsKKyAgICBpbnQgY29kZXdvcmRSb3dOdW1iZXIgPSBjb2Rld29yZC5yb3dOdW1iZXI7CisgICAgaWYgKGNvZGV3b3JkUm93TnVtYmVyID4gYmFyY29kZU1ldGFkYXRhLnJvd0NvdW50KSB7CisgICAgICBzZWxmLmNvZGV3b3Jkc1tjb2Rld29yZFJvd10gPSBbTlNOdWxsIG51bGxdOworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmICghc2VsZi5pc0xlZnQpIHsKKyAgICAgIGNvZGV3b3JkUm93TnVtYmVyICs9IDI7CisgICAgfQorICAgIHN3aXRjaCAoY29kZXdvcmRSb3dOdW1iZXIgJSAzKSB7CisgICAgICBjYXNlIDA6CisgICAgICAgIGlmIChyb3dJbmRpY2F0b3JWYWx1ZSAqIDMgKyAxICE9IGJhcmNvZGVNZXRhZGF0YS5yb3dDb3VudFVwcGVyUGFydCkgeworICAgICAgICAgIHNlbGYuY29kZXdvcmRzW2NvZGV3b3JkUm93XSA9IFtOU051bGwgbnVsbF07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDE6CisgICAgICAgIGlmIChyb3dJbmRpY2F0b3JWYWx1ZSAvIDMgIT0gYmFyY29kZU1ldGFkYXRhLmVycm9yQ29ycmVjdGlvbkxldmVsIHx8CisgICAgICAgICAgICByb3dJbmRpY2F0b3JWYWx1ZSAlIDMgIT0gYmFyY29kZU1ldGFkYXRhLnJvd0NvdW50TG93ZXJQYXJ0KSB7CisgICAgICAgICAgc2VsZi5jb2Rld29yZHNbY29kZXdvcmRSb3ddID0gW05TTnVsbCBudWxsXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgaWYgKHJvd0luZGljYXRvclZhbHVlICsgMSAhPSBiYXJjb2RlTWV0YWRhdGEuY29sdW1uQ291bnQpIHsKKyAgICAgICAgICBzZWxmLmNvZGV3b3Jkc1tjb2Rld29yZFJvd10gPSBbTlNOdWxsIG51bGxdOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKKyAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSXNMZWZ0OiAlQFxuJUAiLCBAKHNlbGYuaXNMZWZ0KSwgW3N1cGVyIGRlc2NyaXB0aW9uXV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN1NjYW5uaW5nRGVjb2Rlci5oIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3U2Nhbm5pbmdEZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyOTY5MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9aWFBERjQxN1NjYW5uaW5nRGVjb2Rlci5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BjbGFzcyBaWEJpdE1hdHJpeCwgWlhEZWNvZGVyUmVzdWx0LCBaWFJlc3VsdFBvaW50OworCitleHRlcm4gY29uc3QgaW50IFpYUERGNDE3X0NPREVXT1JEX1NLRVdfU0laRTsKKworQGludGVyZmFjZSBaWFBERjQxN1NjYW5uaW5nRGVjb2RlciA6IE5TT2JqZWN0CisKKysgKFpYRGVjb2RlclJlc3VsdCAqKWRlY29kZTooWlhCaXRNYXRyaXggKilpbWFnZQorICAgICAgICAgICAgICAgaW1hZ2VUb3BMZWZ0OihaWFJlc3VsdFBvaW50ICopaW1hZ2VUb3BMZWZ0CisgICAgICAgICAgICBpbWFnZUJvdHRvbUxlZnQ6KFpYUmVzdWx0UG9pbnQgKilpbWFnZUJvdHRvbUxlZnQKKyAgICAgICAgICAgICAgaW1hZ2VUb3BSaWdodDooWlhSZXN1bHRQb2ludCAqKWltYWdlVG9wUmlnaHQKKyAgICAgICAgICAgaW1hZ2VCb3R0b21SaWdodDooWlhSZXN1bHRQb2ludCAqKWltYWdlQm90dG9tUmlnaHQKKyAgICAgICAgICAgbWluQ29kZXdvcmRXaWR0aDooaW50KW1pbkNvZGV3b3JkV2lkdGgKKyAgICAgICAgICAgbWF4Q29kZXdvcmRXaWR0aDooaW50KW1heENvZGV3b3JkV2lkdGg7CistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uOihOU0FycmF5ICopYmFyY29kZU1hdHJpeDsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3U2Nhbm5pbmdEZWNvZGVyLm0gYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvWlhQREY0MTdTY2FubmluZ0RlY29kZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWUyNzAxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL1pYUERGNDE3U2Nhbm5pbmdEZWNvZGVyLm0KQEAgLTAsMCArMSw2MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0TWF0cml4LmgiCisjaW1wb3J0ICJaWERlY29kZXJSZXN1bHQuaCIKKyNpbXBvcnQgIlpYUERGNDE3QmFyY29kZU1ldGFkYXRhLmgiCisjaW1wb3J0ICJaWFBERjQxN0JhcmNvZGVWYWx1ZS5oIgorI2ltcG9ydCAiWlhQREY0MTdCb3VuZGluZ0JveC5oIgorI2ltcG9ydCAiWlhQREY0MTdDb2Rld29yZC5oIgorI2ltcG9ydCAiWlhQREY0MTdDb2Rld29yZERlY29kZXIuaCIKKyNpbXBvcnQgIlpYUERGNDE3Q29tbW9uLmgiCisjaW1wb3J0ICJaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIuaCIKKyNpbXBvcnQgIlpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0LmgiCisjaW1wb3J0ICJaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbi5oIgorI2ltcG9ydCAiWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5oIgorI2ltcG9ydCAiWlhQREY0MTdTY2FubmluZ0RlY29kZXIuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKworY29uc3QgaW50IFpYUERGNDE3X0NPREVXT1JEX1NLRVdfU0laRSA9IDI7CisKK2NvbnN0IGludCBaWFBERjQxN19NQVhfRVJST1JTID0gMzsKK2NvbnN0IGludCBaWFBERjQxN19NQVhfRUNfQ09ERVdPUkRTID0gNTEyOworc3RhdGljIFpYUERGNDE3RUNFcnJvckNvcnJlY3Rpb24gKmVycm9yQ29ycmVjdGlvbjsKKworQGltcGxlbWVudGF0aW9uIFpYUERGNDE3U2Nhbm5pbmdEZWNvZGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZSB7CisgIGVycm9yQ29ycmVjdGlvbiA9IFtbWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbiBhbGxvY10gaW5pdF07Cit9CisKKy8vIFRPRE8gZG9uJ3QgcGFzcyBpbiBtaW5Db2Rld29yZFdpZHRoIGFuZCBtYXhDb2Rld29yZFdpZHRoLCBwYXNzIGluIGJhcmNvZGUgY29sdW1ucyBmb3Igc3RhcnQgYW5kIHN0b3AgcGF0dGVybgorLy8gY29sdW1ucy4gVGhhdCB3YXkgd2lkdGggY2FuIGJlIGRlZHVjdGVkIGZyb20gdGhlIHBhdHRlcm4gY29sdW1uLgorLy8gVGhpcyBhcHByb2FjaCBhbHNvIGFsbG93cyB0byBkZXRlY3QgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBiYXJjb2RlLCBlLmcuIGlmIGEgYmFyIHR5cGUgKHdoaXRlIG9yIGJsYWNrKSBpcyB3aWRlcgorLy8gdGhhbiBpdCBzaG91bGQgYmUuIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgc2Nhbm5lciB1c2VkIGEgYmFkIGJsYWNrcG9pbnQuCisrIChaWERlY29kZXJSZXN1bHQgKilkZWNvZGU6KFpYQml0TWF0cml4ICopaW1hZ2UKKyAgICAgICAgICAgICAgIGltYWdlVG9wTGVmdDooWlhSZXN1bHRQb2ludCAqKWltYWdlVG9wTGVmdAorICAgICAgICAgICAgaW1hZ2VCb3R0b21MZWZ0OihaWFJlc3VsdFBvaW50ICopaW1hZ2VCb3R0b21MZWZ0CisgICAgICAgICAgICAgIGltYWdlVG9wUmlnaHQ6KFpYUmVzdWx0UG9pbnQgKilpbWFnZVRvcFJpZ2h0CisgICAgICAgICAgIGltYWdlQm90dG9tUmlnaHQ6KFpYUmVzdWx0UG9pbnQgKilpbWFnZUJvdHRvbVJpZ2h0CisgICAgICAgICAgIG1pbkNvZGV3b3JkV2lkdGg6KGludCltaW5Db2Rld29yZFdpZHRoCisgICAgICAgICAgIG1heENvZGV3b3JkV2lkdGg6KGludCltYXhDb2Rld29yZFdpZHRoIHsKKyAgWlhQREY0MTdCb3VuZGluZ0JveCAqYm91bmRpbmdCb3ggPSBbW1pYUERGNDE3Qm91bmRpbmdCb3ggYWxsb2NdIGluaXRXaXRoSW1hZ2U6aW1hZ2UgdG9wTGVmdDppbWFnZVRvcExlZnQgYm90dG9tTGVmdDppbWFnZUJvdHRvbUxlZnQgdG9wUmlnaHQ6aW1hZ2VUb3BSaWdodCBib3R0b21SaWdodDppbWFnZUJvdHRvbVJpZ2h0XTsKKyAgWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4gKmxlZnRSb3dJbmRpY2F0b3JDb2x1bW47CisgIFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uICpyaWdodFJvd0luZGljYXRvckNvbHVtbjsKKyAgWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQgKmRldGVjdGlvblJlc3VsdDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICBpZiAoaW1hZ2VUb3BMZWZ0KSB7CisgICAgICBsZWZ0Um93SW5kaWNhdG9yQ29sdW1uID0gW3NlbGYgcm93SW5kaWNhdG9yQ29sdW1uOmltYWdlIGJvdW5kaW5nQm94OmJvdW5kaW5nQm94IHN0YXJ0UG9pbnQ6aW1hZ2VUb3BMZWZ0IGxlZnRUb1JpZ2h0OllFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluQ29kZXdvcmRXaWR0aDptaW5Db2Rld29yZFdpZHRoIG1heENvZGV3b3JkV2lkdGg6bWF4Q29kZXdvcmRXaWR0aF07CisgICAgfQorICAgIGlmIChpbWFnZVRvcFJpZ2h0KSB7CisgICAgICByaWdodFJvd0luZGljYXRvckNvbHVtbiA9IFtzZWxmIHJvd0luZGljYXRvckNvbHVtbjppbWFnZSBib3VuZGluZ0JveDpib3VuZGluZ0JveCBzdGFydFBvaW50OmltYWdlVG9wUmlnaHQgbGVmdFRvUmlnaHQ6Tk8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5Db2Rld29yZFdpZHRoOm1pbkNvZGV3b3JkV2lkdGggbWF4Q29kZXdvcmRXaWR0aDptYXhDb2Rld29yZFdpZHRoXTsKKyAgICB9CisgICAgZGV0ZWN0aW9uUmVzdWx0ID0gW3NlbGYgbWVyZ2U6bGVmdFJvd0luZGljYXRvckNvbHVtbiByaWdodFJvd0luZGljYXRvckNvbHVtbjpyaWdodFJvd0luZGljYXRvckNvbHVtbl07CisgICAgaWYgKCFkZXRlY3Rpb25SZXN1bHQpIHsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIGlmIChpID09IDAgJiYKKyAgICAgICAgKFtkZXRlY3Rpb25SZXN1bHQgYm91bmRpbmdCb3hdLm1pblkgPCBib3VuZGluZ0JveC5taW5ZIHx8CisgICAgICAgICBbZGV0ZWN0aW9uUmVzdWx0IGJvdW5kaW5nQm94XS5tYXhZID4gYm91bmRpbmdCb3gubWF4WSkpIHsKKyAgICAgIGJvdW5kaW5nQm94ID0gW2RldGVjdGlvblJlc3VsdCBib3VuZGluZ0JveF07CisgICAgfSBlbHNlIHsKKyAgICAgIGRldGVjdGlvblJlc3VsdC5ib3VuZGluZ0JveCA9IGJvdW5kaW5nQm94OworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGludCBtYXhCYXJjb2RlQ29sdW1uID0gZGV0ZWN0aW9uUmVzdWx0LmJhcmNvZGVDb2x1bW5Db3VudCArIDE7CisgIFtkZXRlY3Rpb25SZXN1bHQgc2V0RGV0ZWN0aW9uUmVzdWx0Q29sdW1uOjAgZGV0ZWN0aW9uUmVzdWx0Q29sdW1uOmxlZnRSb3dJbmRpY2F0b3JDb2x1bW5dOworICBbZGV0ZWN0aW9uUmVzdWx0IHNldERldGVjdGlvblJlc3VsdENvbHVtbjptYXhCYXJjb2RlQ29sdW1uIGRldGVjdGlvblJlc3VsdENvbHVtbjpyaWdodFJvd0luZGljYXRvckNvbHVtbl07CisKKyAgQk9PTCBsZWZ0VG9SaWdodCA9IGxlZnRSb3dJbmRpY2F0b3JDb2x1bW4gIT0gbmlsOworICBmb3IgKGludCBiYXJjb2RlQ29sdW1uQ291bnQgPSAxOyBiYXJjb2RlQ29sdW1uQ291bnQgPD0gbWF4QmFyY29kZUNvbHVtbjsgYmFyY29kZUNvbHVtbkNvdW50KyspIHsKKyAgICBpbnQgYmFyY29kZUNvbHVtbiA9IGxlZnRUb1JpZ2h0ID8gYmFyY29kZUNvbHVtbkNvdW50IDogbWF4QmFyY29kZUNvbHVtbiAtIGJhcmNvZGVDb2x1bW5Db3VudDsKKyAgICBpZiAoW2RldGVjdGlvblJlc3VsdCBkZXRlY3Rpb25SZXN1bHRDb2x1bW46YmFyY29kZUNvbHVtbl0pIHsKKyAgICAgIC8vIFRoaXMgd2lsbCBiZSB0aGUgY2FzZSBmb3IgdGhlIG9wcG9zaXRlIHJvdyBpbmRpY2F0b3IgY29sdW1uLCB3aGljaCBkb2Vzbid0IG5lZWQgdG8gYmUgZGVjb2RlZCBhZ2Fpbi4KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbiAqZGV0ZWN0aW9uUmVzdWx0Q29sdW1uOworICAgIGlmIChiYXJjb2RlQ29sdW1uID09IDAgfHwgYmFyY29kZUNvbHVtbiA9PSBtYXhCYXJjb2RlQ29sdW1uKSB7CisgICAgICBkZXRlY3Rpb25SZXN1bHRDb2x1bW4gPSBbW1pYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uIGFsbG9jXSBpbml0V2l0aEJvdW5kaW5nQm94OmJvdW5kaW5nQm94IGlzTGVmdDpiYXJjb2RlQ29sdW1uID09IDBdOworICAgIH0gZWxzZSB7CisgICAgICBkZXRlY3Rpb25SZXN1bHRDb2x1bW4gPSBbW1pYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Q29sdW1uIGFsbG9jXSBpbml0V2l0aEJvdW5kaW5nQm94OmJvdW5kaW5nQm94XTsKKyAgICB9CisgICAgW2RldGVjdGlvblJlc3VsdCBzZXREZXRlY3Rpb25SZXN1bHRDb2x1bW46YmFyY29kZUNvbHVtbiBkZXRlY3Rpb25SZXN1bHRDb2x1bW46ZGV0ZWN0aW9uUmVzdWx0Q29sdW1uXTsKKyAgICBpbnQgc3RhcnRDb2x1bW4gPSAtMTsKKyAgICBpbnQgcHJldmlvdXNTdGFydENvbHVtbiA9IHN0YXJ0Q29sdW1uOworICAgIC8vIFRPRE8gc3RhcnQgYXQgYSByb3cgZm9yIHdoaWNoIHdlIGtub3cgdGhlIHN0YXJ0IHBvc2l0aW9uLCB0aGVuIGRldGVjdCB1cHdhcmRzIGFuZCBkb3dud2FyZHMgZnJvbSB0aGVyZS4KKyAgICBmb3IgKGludCBpbWFnZVJvdyA9IGJvdW5kaW5nQm94Lm1pblk7IGltYWdlUm93IDw9IGJvdW5kaW5nQm94Lm1heFk7IGltYWdlUm93KyspIHsKKyAgICAgIHN0YXJ0Q29sdW1uID0gW3NlbGYgc3RhcnRDb2x1bW46ZGV0ZWN0aW9uUmVzdWx0IGJhcmNvZGVDb2x1bW46YmFyY29kZUNvbHVtbiBpbWFnZVJvdzppbWFnZVJvdyBsZWZ0VG9SaWdodDpsZWZ0VG9SaWdodF07CisgICAgICBpZiAoc3RhcnRDb2x1bW4gPCAwIHx8IHN0YXJ0Q29sdW1uID4gYm91bmRpbmdCb3gubWF4WCkgeworICAgICAgICBpZiAocHJldmlvdXNTdGFydENvbHVtbiA9PSAtMSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHN0YXJ0Q29sdW1uID0gcHJldmlvdXNTdGFydENvbHVtbjsKKyAgICAgIH0KKyAgICAgIFpYUERGNDE3Q29kZXdvcmQgKmNvZGV3b3JkID0gW3NlbGYgZGV0ZWN0Q29kZXdvcmQ6aW1hZ2UgbWluQ29sdW1uOmJvdW5kaW5nQm94Lm1pblggbWF4Q29sdW1uOmJvdW5kaW5nQm94Lm1heFggbGVmdFRvUmlnaHQ6bGVmdFRvUmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb2x1bW46c3RhcnRDb2x1bW4gaW1hZ2VSb3c6aW1hZ2VSb3cgbWluQ29kZXdvcmRXaWR0aDptaW5Db2Rld29yZFdpZHRoIG1heENvZGV3b3JkV2lkdGg6bWF4Q29kZXdvcmRXaWR0aF07CisgICAgICBpZiAoY29kZXdvcmQpIHsKKyAgICAgICAgW2RldGVjdGlvblJlc3VsdENvbHVtbiBzZXRDb2Rld29yZDppbWFnZVJvdyBjb2Rld29yZDpjb2Rld29yZF07CisgICAgICAgIHByZXZpb3VzU3RhcnRDb2x1bW4gPSBzdGFydENvbHVtbjsKKyAgICAgICAgbWluQ29kZXdvcmRXaWR0aCA9IE1JTihtaW5Db2Rld29yZFdpZHRoLCBjb2Rld29yZC53aWR0aCk7CisgICAgICAgIG1heENvZGV3b3JkV2lkdGggPSBNQVgobWF4Q29kZXdvcmRXaWR0aCwgY29kZXdvcmQud2lkdGgpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gW3NlbGYgY3JlYXRlRGVjb2RlclJlc3VsdDpkZXRlY3Rpb25SZXN1bHRdOworfQorCisrIChaWFBERjQxN0RldGVjdGlvblJlc3VsdCAqKW1lcmdlOihaWFBERjQxN0RldGVjdGlvblJlc3VsdFJvd0luZGljYXRvckNvbHVtbiAqKWxlZnRSb3dJbmRpY2F0b3JDb2x1bW4KKyAgICAgICAgICAgcmlnaHRSb3dJbmRpY2F0b3JDb2x1bW46KFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uICopcmlnaHRSb3dJbmRpY2F0b3JDb2x1bW4geworICBpZiAoIWxlZnRSb3dJbmRpY2F0b3JDb2x1bW4gJiYgIXJpZ2h0Um93SW5kaWNhdG9yQ29sdW1uKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBaWFBERjQxN0JhcmNvZGVNZXRhZGF0YSAqYmFyY29kZU1ldGFkYXRhID0gW3NlbGYgYmFyY29kZU1ldGFkYXRhOmxlZnRSb3dJbmRpY2F0b3JDb2x1bW4gcmlnaHRSb3dJbmRpY2F0b3JDb2x1bW46cmlnaHRSb3dJbmRpY2F0b3JDb2x1bW5dOworICBpZiAoIWJhcmNvZGVNZXRhZGF0YSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgWlhQREY0MTdCb3VuZGluZ0JveCAqYm91bmRpbmdCb3ggPSBbWlhQREY0MTdCb3VuZGluZ0JveCBtZXJnZUxlZnRCb3g6W3NlbGYgYWRqdXN0Qm91bmRpbmdCb3g6bGVmdFJvd0luZGljYXRvckNvbHVtbl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRCb3g6W3NlbGYgYWRqdXN0Qm91bmRpbmdCb3g6cmlnaHRSb3dJbmRpY2F0b3JDb2x1bW5dXTsKKyAgcmV0dXJuIFtbWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQgYWxsb2NdIGluaXRXaXRoQmFyY29kZU1ldGFkYXRhOmJhcmNvZGVNZXRhZGF0YSBib3VuZGluZ0JveDpib3VuZGluZ0JveF07Cit9CisKKysgKFpYUERGNDE3Qm91bmRpbmdCb3ggKilhZGp1c3RCb3VuZGluZ0JveDooWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4gKilyb3dJbmRpY2F0b3JDb2x1bW4geworICBpZiAoIXJvd0luZGljYXRvckNvbHVtbikgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgTlNBcnJheSAqcm93SGVpZ2h0cyA9IFtyb3dJbmRpY2F0b3JDb2x1bW4gcm93SGVpZ2h0c107CisgIGludCBtYXhSb3dIZWlnaHQgPSBbc2VsZiBtYXg6cm93SGVpZ2h0c107CisgIGludCBtaXNzaW5nU3RhcnRSb3dzID0gMDsKKyAgZm9yIChOU051bWJlciAqcm93SGVpZ2h0IGluIHJvd0hlaWdodHMpIHsKKyAgICBtaXNzaW5nU3RhcnRSb3dzICs9IG1heFJvd0hlaWdodCAtIFtyb3dIZWlnaHQgaW50VmFsdWVdOworICAgIGlmIChbcm93SGVpZ2h0IGludFZhbHVlXSA+IDApIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBOU0FycmF5ICpjb2Rld29yZHMgPSByb3dJbmRpY2F0b3JDb2x1bW4uY29kZXdvcmRzOworICBmb3IgKGludCByb3cgPSAwOyBtaXNzaW5nU3RhcnRSb3dzID4gMCAmJiBjb2Rld29yZHNbcm93XSA9PSBbTlNOdWxsIG51bGxdOyByb3crKykgeworICAgIG1pc3NpbmdTdGFydFJvd3MtLTsKKyAgfQorICBpbnQgbWlzc2luZ0VuZFJvd3MgPSAwOworICBmb3IgKGludCByb3cgPSAoaW50KVtyb3dIZWlnaHRzIGNvdW50XSAtIDE7IHJvdyA+PSAwOyByb3ctLSkgeworICAgIG1pc3NpbmdFbmRSb3dzICs9IG1heFJvd0hlaWdodCAtIFtyb3dIZWlnaHRzW3Jvd10gaW50VmFsdWVdOworICAgIGlmIChbcm93SGVpZ2h0c1tyb3ddIGludFZhbHVlXSA+IDApIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBmb3IgKGludCByb3cgPSAoaW50KVtjb2Rld29yZHMgY291bnRdIC0gMTsgbWlzc2luZ0VuZFJvd3MgPiAwICYmIGNvZGV3b3Jkc1tyb3ddID09IFtOU051bGwgbnVsbF07IHJvdy0tKSB7CisgICAgbWlzc2luZ0VuZFJvd3MtLTsKKyAgfQorICByZXR1cm4gW3Jvd0luZGljYXRvckNvbHVtbi5ib3VuZGluZ0JveCBhZGRNaXNzaW5nUm93czptaXNzaW5nU3RhcnRSb3dzIG1pc3NpbmdFbmRSb3dzOm1pc3NpbmdFbmRSb3dzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xlZnQ6cm93SW5kaWNhdG9yQ29sdW1uLmlzTGVmdF07Cit9CisKKysgKGludCltYXg6KE5TQXJyYXkgKil2YWx1ZXMgeworICBpbnQgbWF4VmFsdWUgPSAtMTsKKyAgZm9yIChOU051bWJlciAqdmFsdWUgaW4gdmFsdWVzKSB7CisgICAgbWF4VmFsdWUgPSBNQVgobWF4VmFsdWUsIFt2YWx1ZSBpbnRWYWx1ZV0pOworICB9CisgIHJldHVybiBtYXhWYWx1ZTsKK30KKworKyAoWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEgKiliYXJjb2RlTWV0YWRhdGE6KFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uICopbGVmdFJvd0luZGljYXRvckNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgcmlnaHRSb3dJbmRpY2F0b3JDb2x1bW46KFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0Um93SW5kaWNhdG9yQ29sdW1uICopcmlnaHRSb3dJbmRpY2F0b3JDb2x1bW4geworICBpZiAoIWxlZnRSb3dJbmRpY2F0b3JDb2x1bW4gfHwgIWxlZnRSb3dJbmRpY2F0b3JDb2x1bW4uYmFyY29kZU1ldGFkYXRhKSB7CisgICAgcmV0dXJuIHJpZ2h0Um93SW5kaWNhdG9yQ29sdW1uID8gcmlnaHRSb3dJbmRpY2F0b3JDb2x1bW4uYmFyY29kZU1ldGFkYXRhIDogbmlsOworICB9CisgIGlmICghcmlnaHRSb3dJbmRpY2F0b3JDb2x1bW4gfHwgIXJpZ2h0Um93SW5kaWNhdG9yQ29sdW1uLmJhcmNvZGVNZXRhZGF0YSkgeworICAgIHJldHVybiBsZWZ0Um93SW5kaWNhdG9yQ29sdW1uID8gbGVmdFJvd0luZGljYXRvckNvbHVtbi5iYXJjb2RlTWV0YWRhdGEgOiBuaWw7CisgIH0KKyAgWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEgKmxlZnRCYXJjb2RlTWV0YWRhdGEgPSBsZWZ0Um93SW5kaWNhdG9yQ29sdW1uLmJhcmNvZGVNZXRhZGF0YTsKKyAgWlhQREY0MTdCYXJjb2RlTWV0YWRhdGEgKnJpZ2h0QmFyY29kZU1ldGFkYXRhID0gcmlnaHRSb3dJbmRpY2F0b3JDb2x1bW4uYmFyY29kZU1ldGFkYXRhOworCisgIGlmIChsZWZ0QmFyY29kZU1ldGFkYXRhLmNvbHVtbkNvdW50ICE9IHJpZ2h0QmFyY29kZU1ldGFkYXRhLmNvbHVtbkNvdW50ICYmCisgICAgICBsZWZ0QmFyY29kZU1ldGFkYXRhLmVycm9yQ29ycmVjdGlvbkxldmVsICE9IHJpZ2h0QmFyY29kZU1ldGFkYXRhLmVycm9yQ29ycmVjdGlvbkxldmVsICYmCisgICAgICBsZWZ0QmFyY29kZU1ldGFkYXRhLnJvd0NvdW50ICE9IHJpZ2h0QmFyY29kZU1ldGFkYXRhLnJvd0NvdW50KSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICByZXR1cm4gbGVmdEJhcmNvZGVNZXRhZGF0YTsKK30KKworKyAoWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4gKilyb3dJbmRpY2F0b3JDb2x1bW46KFpYQml0TWF0cml4ICopaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94OihaWFBERjQxN0JvdW5kaW5nQm94ICopYm91bmRpbmdCb3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvaW50OihaWFJlc3VsdFBvaW50ICopc3RhcnRQb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFRvUmlnaHQ6KEJPT0wpbGVmdFRvUmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5Db2Rld29yZFdpZHRoOihpbnQpbWluQ29kZXdvcmRXaWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heENvZGV3b3JkV2lkdGg6KGludCltYXhDb2Rld29yZFdpZHRoIHsKKyAgWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4gKnJvd0luZGljYXRvckNvbHVtbiA9IFtbWlhQREY0MTdEZXRlY3Rpb25SZXN1bHRSb3dJbmRpY2F0b3JDb2x1bW4gYWxsb2NdIGluaXRXaXRoQm91bmRpbmdCb3g6Ym91bmRpbmdCb3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xlZnQ6bGVmdFRvUmlnaHRdOworICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgIGludCBpbmNyZW1lbnQgPSBpID09IDAgPyAxIDogLTE7CisgICAgaW50IHN0YXJ0Q29sdW1uID0gKGludCkgc3RhcnRQb2ludC54OworICAgIGZvciAoaW50IGltYWdlUm93ID0gKGludCkgc3RhcnRQb2ludC55OyBpbWFnZVJvdyA8PSBib3VuZGluZ0JveC5tYXhZICYmCisgICAgICAgIGltYWdlUm93ID49IGJvdW5kaW5nQm94Lm1pblk7IGltYWdlUm93ICs9IGluY3JlbWVudCkgeworICAgICAgWlhQREY0MTdDb2Rld29yZCAqY29kZXdvcmQgPSBbc2VsZiBkZXRlY3RDb2Rld29yZDppbWFnZSBtaW5Db2x1bW46MCBtYXhDb2x1bW46aW1hZ2Uud2lkdGggbGVmdFRvUmlnaHQ6bGVmdFRvUmlnaHQgc3RhcnRDb2x1bW46c3RhcnRDb2x1bW4gaW1hZ2VSb3c6aW1hZ2VSb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkNvZGV3b3JkV2lkdGg6bWluQ29kZXdvcmRXaWR0aCBtYXhDb2Rld29yZFdpZHRoOm1heENvZGV3b3JkV2lkdGhdOworICAgICAgaWYgKGNvZGV3b3JkKSB7CisgICAgICAgIFtyb3dJbmRpY2F0b3JDb2x1bW4gc2V0Q29kZXdvcmQ6aW1hZ2VSb3cgY29kZXdvcmQ6Y29kZXdvcmRdOworICAgICAgICBpZiAobGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICBzdGFydENvbHVtbiA9IGNvZGV3b3JkLnN0YXJ0WDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzdGFydENvbHVtbiA9IGNvZGV3b3JkLmVuZFg7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIHJvd0luZGljYXRvckNvbHVtbjsKK30KKworKyAoQk9PTClhZGp1c3RDb2Rld29yZENvdW50OihaWFBERjQxN0RldGVjdGlvblJlc3VsdCAqKWRldGVjdGlvblJlc3VsdCBiYXJjb2RlTWF0cml4OihOU0FycmF5ICopYmFyY29kZU1hdHJpeCB7CisgIE5TQXJyYXkgKm51bWJlck9mQ29kZXdvcmRzID0gWyhaWFBERjQxN0JhcmNvZGVWYWx1ZSAqKWJhcmNvZGVNYXRyaXhbMF1bMV0gdmFsdWVdOworICBpbnQgY2FsY3VsYXRlZE51bWJlck9mQ29kZXdvcmRzID0gW2RldGVjdGlvblJlc3VsdCBiYXJjb2RlQ29sdW1uQ291bnRdICogW2RldGVjdGlvblJlc3VsdCBiYXJjb2RlUm93Q291bnRdOworICAgIFtzZWxmIG51bWJlck9mRUNDb2RlV29yZHM6ZGV0ZWN0aW9uUmVzdWx0LmJhcmNvZGVFQ0xldmVsXTsKKyAgaWYgKFtudW1iZXJPZkNvZGV3b3JkcyBjb3VudF0gPT0gMCkgeworICAgIGlmIChjYWxjdWxhdGVkTnVtYmVyT2ZDb2Rld29yZHMgPCAxIHx8IGNhbGN1bGF0ZWROdW1iZXJPZkNvZGV3b3JkcyA+IFpYUERGNDE3X01BWF9DT0RFV09SRFNfSU5fQkFSQ09ERSkgeworICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgICBbKFpYUERGNDE3QmFyY29kZVZhbHVlICopYmFyY29kZU1hdHJpeFswXVsxXSBzZXRWYWx1ZTpjYWxjdWxhdGVkTnVtYmVyT2ZDb2Rld29yZHNdOworICB9IGVsc2UgaWYgKFtudW1iZXJPZkNvZGV3b3Jkc1swXSBpbnRWYWx1ZV0gIT0gY2FsY3VsYXRlZE51bWJlck9mQ29kZXdvcmRzKSB7CisgICAgLy8gVGhlIGNhbGN1bGF0ZWQgb25lIGlzIG1vcmUgcmVsaWFibGUgYXMgaXQgaXMgZGVyaXZlZCBmcm9tIHRoZSByb3cgaW5kaWNhdG9yIGNvbHVtbnMKKyAgICBbKFpYUERGNDE3QmFyY29kZVZhbHVlICopYmFyY29kZU1hdHJpeFswXVsxXSBzZXRWYWx1ZTpjYWxjdWxhdGVkTnVtYmVyT2ZDb2Rld29yZHNdOworICB9CisKKyAgcmV0dXJuIFlFUzsKK30KKworKyAoWlhEZWNvZGVyUmVzdWx0ICopY3JlYXRlRGVjb2RlclJlc3VsdDooWlhQREY0MTdEZXRlY3Rpb25SZXN1bHQgKilkZXRlY3Rpb25SZXN1bHQgeworICBOU0FycmF5ICpiYXJjb2RlTWF0cml4ID0gW3NlbGYgY3JlYXRlQmFyY29kZU1hdHJpeDpkZXRlY3Rpb25SZXN1bHRdOworICBpZiAoIVtzZWxmIGFkanVzdENvZGV3b3JkQ291bnQ6ZGV0ZWN0aW9uUmVzdWx0IGJhcmNvZGVNYXRyaXg6YmFyY29kZU1hdHJpeF0pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TTXV0YWJsZUFycmF5ICplcmFzdXJlcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgIE5TTXV0YWJsZUFycmF5ICpjb2Rld29yZHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICBmb3IgKGludCBpID0gMDsgaSA8IGRldGVjdGlvblJlc3VsdC5iYXJjb2RlUm93Q291bnQgKiBkZXRlY3Rpb25SZXN1bHQuYmFyY29kZUNvbHVtbkNvdW50OyBpKyspIHsKKyAgICBbY29kZXdvcmRzIGFkZE9iamVjdDpAMF07CisgIH0KKyAgTlNNdXRhYmxlQXJyYXkgKmFtYmlndW91c0luZGV4VmFsdWVzTGlzdCA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgIE5TTXV0YWJsZUFycmF5ICphbWJpZ3VvdXNJbmRleGVzTGlzdCA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRldGVjdGlvblJlc3VsdC5iYXJjb2RlUm93Q291bnQ7IHJvdysrKSB7CisgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgZGV0ZWN0aW9uUmVzdWx0LmJhcmNvZGVDb2x1bW5Db3VudDsgY29sdW1uKyspIHsKKyAgICAgIE5TQXJyYXkgKnZhbHVlcyA9IFsoWlhQREY0MTdCYXJjb2RlVmFsdWUgKiliYXJjb2RlTWF0cml4W3Jvd11bY29sdW1uICsgMV0gdmFsdWVdOworICAgICAgaW50IGNvZGV3b3JkSW5kZXggPSByb3cgKiBkZXRlY3Rpb25SZXN1bHQuYmFyY29kZUNvbHVtbkNvdW50ICsgY29sdW1uOworICAgICAgaWYgKFt2YWx1ZXMgY291bnRdID09IDApIHsKKyAgICAgICAgW2VyYXN1cmVzIGFkZE9iamVjdDpAKGNvZGV3b3JkSW5kZXgpXTsKKyAgICAgIH0gZWxzZSBpZiAoW3ZhbHVlcyBjb3VudF0gPT0gMSkgeworICAgICAgICBbY29kZXdvcmRzIHJlcGxhY2VPYmplY3RBdEluZGV4OmNvZGV3b3JkSW5kZXggd2l0aE9iamVjdDp2YWx1ZXNbMF1dOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgW2FtYmlndW91c0luZGV4ZXNMaXN0IGFkZE9iamVjdDpAKGNvZGV3b3JkSW5kZXgpXTsKKyAgICAgICAgW2FtYmlndW91c0luZGV4VmFsdWVzTGlzdCBhZGRPYmplY3Q6dmFsdWVzXTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgTlNNdXRhYmxlQXJyYXkgKmFtYmlndW91c0luZGV4VmFsdWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBbYW1iaWd1b3VzSW5kZXhWYWx1ZXNMaXN0IGNvdW50XTsgaSsrKSB7CisgICAgYW1iaWd1b3VzSW5kZXhWYWx1ZXNbaV0gPSBhbWJpZ3VvdXNJbmRleFZhbHVlc0xpc3RbaV07CisgIH0KKyAgcmV0dXJuIFtzZWxmIGNyZWF0ZURlY29kZXJSZXN1bHRGcm9tQW1iaWd1b3VzVmFsdWVzOmRldGVjdGlvblJlc3VsdC5iYXJjb2RlRUNMZXZlbCBjb2Rld29yZHM6Y29kZXdvcmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyYXN1cmVBcnJheTplcmFzdXJlcyBhbWJpZ3VvdXNJbmRleGVzOmFtYmlndW91c0luZGV4ZXNMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWJpZ3VvdXNJbmRleFZhbHVlczphbWJpZ3VvdXNJbmRleFZhbHVlc107Cit9CisKKy8qKgorICogVGhpcyBtZXRob2QgZGVhbHMgd2l0aCB0aGUgZmFjdCwgdGhhdCB0aGUgZGVjb2RpbmcgcHJvY2VzcyBkb2Vzbid0IGFsd2F5cyB5aWVsZCBhIHNpbmdsZSBtb3N0IGxpa2VseSB2YWx1ZS4gVGhlCisgKiBjdXJyZW50IGVycm9yIGNvcnJlY3Rpb24gaW1wbGVtZW50YXRpb24gZG9lc24ndCBkZWFsIHdpdGggZXJhc3VyZXMgdmVyeSB3ZWxsLCBzbyBpdCdzIGJldHRlciB0byBwcm92aWRlIGEgdmFsdWUKKyAqIGZvciB0aGVzZSBhbWJpZ3VvdXMgY29kZXdvcmRzIGluc3RlYWQgb2YgdHJlYXRpbmcgaXQgYXMgYW4gZXJhc3VyZS4gVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBkb24ndCBrbm93IHdoaWNoIG9mCisgKiB0aGUgYW1iaWd1b3VzIHZhbHVlcyB0byBjaG9vc2UuIFdlIHRyeSBkZWNvZGUgdXNpbmcgdGhlIGZpcnN0IHZhbHVlLCBhbmQgaWYgdGhhdCBmYWlscywgd2UgdXNlIGFub3RoZXIgb2YgdGhlCisgKiBhbWJpZ3VvdXMgdmFsdWVzIGFuZCB0cnkgdG8gZGVjb2RlIGFnYWluLiBUaGlzIHVzdWFsbHkgb25seSBoYXBwZW5zIG9uIHZlcnkgaGFyZCB0byByZWFkIGFuZCBkZWNvZGUgYmFyY29kZXMsCisgKiBzbyBkZWNvZGluZyB0aGUgbm9ybWFsIGJhcmNvZGVzIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzLgorICovCisrIChaWERlY29kZXJSZXN1bHQgKiljcmVhdGVEZWNvZGVyUmVzdWx0RnJvbUFtYmlndW91c1ZhbHVlczooaW50KWVjTGV2ZWwgY29kZXdvcmRzOihOU011dGFibGVBcnJheSAqKWNvZGV3b3JkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcmFzdXJlQXJyYXk6KE5TQXJyYXkgKillcmFzdXJlQXJyYXkgYW1iaWd1b3VzSW5kZXhlczooTlNBcnJheSAqKWFtYmlndW91c0luZGV4ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtYmlndW91c0luZGV4VmFsdWVzOihOU0FycmF5ICopYW1iaWd1b3VzSW5kZXhWYWx1ZXMgeworICBpbnQgYW1iaWd1b3VzSW5kZXhDb3VudFtbYW1iaWd1b3VzSW5kZXhlcyBjb3VudF1dOworICBtZW1zZXQoYW1iaWd1b3VzSW5kZXhDb3VudCwgMCwgW2FtYmlndW91c0luZGV4ZXMgY291bnRdICogc2l6ZW9mKGludCkpOworCisgIGludCB0cmllcyA9IDEwMDsKKyAgd2hpbGUgKHRyaWVzLS0gPiAwKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBbYW1iaWd1b3VzSW5kZXhlcyBjb3VudF07IGkrKykgeworICAgICAgY29kZXdvcmRzW1thbWJpZ3VvdXNJbmRleGVzW2ldIGludFZhbHVlXV0gPSBhbWJpZ3VvdXNJbmRleFZhbHVlc1tpXVsoYW1iaWd1b3VzSW5kZXhDb3VudFtpXSArIDEpICUgW2FtYmlndW91c0luZGV4VmFsdWVzW2ldIGNvdW50XV07CisgICAgfQorICAgIFpYRGVjb2RlclJlc3VsdCAqcmVzdWx0ID0gW3NlbGYgZGVjb2RlQ29kZXdvcmRzOmNvZGV3b3JkcyBlY0xldmVsOmVjTGV2ZWwgZXJhc3VyZXM6ZXJhc3VyZUFycmF5XTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGlmIChbYW1iaWd1b3VzSW5kZXhlcyBjb3VudF0gPT0gMCkgeworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBbYW1iaWd1b3VzSW5kZXhlcyBjb3VudF07IGkrKykgeworICAgICAgaWYgKGFtYmlndW91c0luZGV4Q291bnRbaV0gPCBbYW1iaWd1b3VzSW5kZXhWYWx1ZXNbaV0gY291bnRdIC0gMSkgeworICAgICAgICBhbWJpZ3VvdXNJbmRleENvdW50W2ldKys7CisgICAgICAgIGJyZWFrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYW1iaWd1b3VzSW5kZXhDb3VudFtpXSA9IDA7CisgICAgICAgIGlmIChpID09IFthbWJpZ3VvdXNJbmRleGVzIGNvdW50XSAtIDEpIHsKKyAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBuaWw7Cit9CisKKysgKE5TQXJyYXkgKiljcmVhdGVCYXJjb2RlTWF0cml4OihaWFBERjQxN0RldGVjdGlvblJlc3VsdCAqKWRldGVjdGlvblJlc3VsdCB7CisgIE5TTXV0YWJsZUFycmF5ICpiYXJjb2RlTWF0cml4ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGV0ZWN0aW9uUmVzdWx0LmJhcmNvZGVSb3dDb3VudDsgcm93KyspIHsKKyAgICBbYmFyY29kZU1hdHJpeCBhZGRPYmplY3Q6W05TTXV0YWJsZUFycmF5IGFycmF5XV07CisgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgZGV0ZWN0aW9uUmVzdWx0LmJhcmNvZGVDb2x1bW5Db3VudCArIDI7IGNvbHVtbisrKSB7CisgICAgICBiYXJjb2RlTWF0cml4W3Jvd11bY29sdW1uXSA9IFtbWlhQREY0MTdCYXJjb2RlVmFsdWUgYWxsb2NdIGluaXRdOworICAgIH0KKyAgfQorCisgIGludCBjb2x1bW4gPSAtMTsKKyAgZm9yIChaWFBERjQxN0RldGVjdGlvblJlc3VsdENvbHVtbiAqZGV0ZWN0aW9uUmVzdWx0Q29sdW1uIGluIFtkZXRlY3Rpb25SZXN1bHQgZGV0ZWN0aW9uUmVzdWx0Q29sdW1uc10pIHsKKyAgICBjb2x1bW4rKzsKKyAgICBpZiAoKGlkKWRldGVjdGlvblJlc3VsdENvbHVtbiA9PSBbTlNOdWxsIG51bGxdKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgZm9yIChaWFBERjQxN0NvZGV3b3JkICpjb2Rld29yZCBpbiBkZXRlY3Rpb25SZXN1bHRDb2x1bW4uY29kZXdvcmRzKSB7CisgICAgICBpZiAoKGlkKWNvZGV3b3JkID09IFtOU051bGwgbnVsbF0gfHwgY29kZXdvcmQucm93TnVtYmVyID09IC0xKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgWyhaWFBERjQxN0JhcmNvZGVWYWx1ZSAqKWJhcmNvZGVNYXRyaXhbY29kZXdvcmQucm93TnVtYmVyXVtjb2x1bW5dIHNldFZhbHVlOmNvZGV3b3JkLnZhbHVlXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGJhcmNvZGVNYXRyaXg7Cit9CisKKysgKEJPT0wpaXNWYWxpZEJhcmNvZGVDb2x1bW46KFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0ICopZGV0ZWN0aW9uUmVzdWx0IGJhcmNvZGVDb2x1bW46KGludCliYXJjb2RlQ29sdW1uIHsKKyAgcmV0dXJuIGJhcmNvZGVDb2x1bW4gPj0gMCAmJiBiYXJjb2RlQ29sdW1uIDw9IGRldGVjdGlvblJlc3VsdC5iYXJjb2RlQ29sdW1uQ291bnQgKyAxOworfQorCisrIChpbnQpc3RhcnRDb2x1bW46KFpYUERGNDE3RGV0ZWN0aW9uUmVzdWx0ICopZGV0ZWN0aW9uUmVzdWx0CisgICAgIGJhcmNvZGVDb2x1bW46KGludCliYXJjb2RlQ29sdW1uCisgICAgICAgICAgaW1hZ2VSb3c6KGludClpbWFnZVJvdworICAgICAgIGxlZnRUb1JpZ2h0OihCT09MKWxlZnRUb1JpZ2h0IHsKKyAgaW50IG9mZnNldCA9IGxlZnRUb1JpZ2h0ID8gMSA6IC0xOworICBaWFBERjQxN0NvZGV3b3JkICpjb2Rld29yZDsKKyAgaWYgKFtzZWxmIGlzVmFsaWRCYXJjb2RlQ29sdW1uOmRldGVjdGlvblJlc3VsdCBiYXJjb2RlQ29sdW1uOmJhcmNvZGVDb2x1bW4gLSBvZmZzZXRdKSB7CisgICAgY29kZXdvcmQgPSBbW2RldGVjdGlvblJlc3VsdCBkZXRlY3Rpb25SZXN1bHRDb2x1bW46YmFyY29kZUNvbHVtbiAtIG9mZnNldF0gY29kZXdvcmQ6aW1hZ2VSb3ddOworICB9CisgIGlmIChjb2Rld29yZCkgeworICAgIHJldHVybiBsZWZ0VG9SaWdodCA/IGNvZGV3b3JkLmVuZFggOiBjb2Rld29yZC5zdGFydFg7CisgIH0KKyAgY29kZXdvcmQgPSBbW2RldGVjdGlvblJlc3VsdCBkZXRlY3Rpb25SZXN1bHRDb2x1bW46YmFyY29kZUNvbHVtbl0gY29kZXdvcmROZWFyYnk6aW1hZ2VSb3ddOworICBpZiAoY29kZXdvcmQpIHsKKyAgICByZXR1cm4gbGVmdFRvUmlnaHQgPyBjb2Rld29yZC5zdGFydFggOiBjb2Rld29yZC5lbmRYOworICB9CisgIGlmIChbc2VsZiBpc1ZhbGlkQmFyY29kZUNvbHVtbjpkZXRlY3Rpb25SZXN1bHQgYmFyY29kZUNvbHVtbjpiYXJjb2RlQ29sdW1uIC0gb2Zmc2V0XSkgeworICAgIGNvZGV3b3JkID0gW1tkZXRlY3Rpb25SZXN1bHQgZGV0ZWN0aW9uUmVzdWx0Q29sdW1uOmJhcmNvZGVDb2x1bW4gLSBvZmZzZXRdIGNvZGV3b3JkTmVhcmJ5OmltYWdlUm93XTsKKyAgfQorICBpZiAoY29kZXdvcmQpIHsKKyAgICByZXR1cm4gbGVmdFRvUmlnaHQgPyBjb2Rld29yZC5lbmRYIDogY29kZXdvcmQuc3RhcnRYOworICB9CisgIGludCBza2lwcGVkQ29sdW1ucyA9IDA7CisKKyAgd2hpbGUgKFtzZWxmIGlzVmFsaWRCYXJjb2RlQ29sdW1uOmRldGVjdGlvblJlc3VsdCBiYXJjb2RlQ29sdW1uOmJhcmNvZGVDb2x1bW4gLSBvZmZzZXRdKSB7CisgICAgYmFyY29kZUNvbHVtbiAtPSBvZmZzZXQ7CisgICAgZm9yIChaWFBERjQxN0NvZGV3b3JkICpwcmV2aW91c1Jvd0NvZGV3b3JkIGluIFtkZXRlY3Rpb25SZXN1bHQgZGV0ZWN0aW9uUmVzdWx0Q29sdW1uOmJhcmNvZGVDb2x1bW5dLmNvZGV3b3JkcykgeworICAgICAgaWYgKChpZClwcmV2aW91c1Jvd0NvZGV3b3JkICE9IFtOU051bGwgbnVsbF0pIHsKKyAgICAgICAgcmV0dXJuIChsZWZ0VG9SaWdodCA/IHByZXZpb3VzUm93Q29kZXdvcmQuZW5kWCA6IHByZXZpb3VzUm93Q29kZXdvcmQuc3RhcnRYKSArCisgICAgICAgICAgb2Zmc2V0ICoKKyAgICAgICAgICBza2lwcGVkQ29sdW1ucyAqCisgICAgICAgICAgKHByZXZpb3VzUm93Q29kZXdvcmQuZW5kWCAtIHByZXZpb3VzUm93Q29kZXdvcmQuc3RhcnRYKTsKKyAgICAgIH0KKyAgICB9CisgICAgc2tpcHBlZENvbHVtbnMrKzsKKyAgfQorICByZXR1cm4gbGVmdFRvUmlnaHQgPyBkZXRlY3Rpb25SZXN1bHQuYm91bmRpbmdCb3gubWluWCA6IGRldGVjdGlvblJlc3VsdC5ib3VuZGluZ0JveC5tYXhYOworfQorCisrIChaWFBERjQxN0NvZGV3b3JkICopZGV0ZWN0Q29kZXdvcmQ6KFpYQml0TWF0cml4ICopaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkNvbHVtbjooaW50KW1pbkNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q29sdW1uOihpbnQpbWF4Q29sdW1uCisgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFRvUmlnaHQ6KEJPT0wpbGVmdFRvUmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvbHVtbjooaW50KXN0YXJ0Q29sdW1uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VSb3c6KGludClpbWFnZVJvdworICAgICAgICAgICAgICAgICAgICBtaW5Db2Rld29yZFdpZHRoOihpbnQpbWluQ29kZXdvcmRXaWR0aAorICAgICAgICAgICAgICAgICAgICBtYXhDb2Rld29yZFdpZHRoOihpbnQpbWF4Q29kZXdvcmRXaWR0aCB7CisgIHN0YXJ0Q29sdW1uID0gW3NlbGYgYWRqdXN0Q29kZXdvcmRTdGFydENvbHVtbjppbWFnZSBtaW5Db2x1bW46bWluQ29sdW1uIG1heENvbHVtbjptYXhDb2x1bW4gbGVmdFRvUmlnaHQ6bGVmdFRvUmlnaHQgY29kZXdvcmRTdGFydENvbHVtbjpzdGFydENvbHVtbiBpbWFnZVJvdzppbWFnZVJvd107CisgIC8vIHdlIHVzdWFsbHkga25vdyBmYWlybHkgZXhhY3Qgbm93IGhvdyBsb25nIGEgY29kZXdvcmQgaXMuIFdlIHNob3VsZCBwcm92aWRlIG1pbmltdW0gYW5kIG1heGltdW0gZXhwZWN0ZWQgbGVuZ3RoCisgIC8vIGFuZCB0cnkgdG8gYWRqdXN0IHRoZSByZWFkIHBpeGVscywgZS5nLiByZW1vdmUgc2luZ2xlIHBpeGVsIGVycm9ycyBvciB0cnkgdG8gY3V0IG9mZiBleGNlZWRpbmcgcGl4ZWxzLgorICAvLyBtaW4gYW5kIG1heENvZGV3b3JkV2lkdGggc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHRoZXkgYXJlIGNhbGN1bGF0ZWQgZm9yIHRoZSB3aG9sZSBiYXJjb2RlIGFuIGNhbiBiZSBpbmFjY3VyYXRlCisgIC8vIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbgorICBOU011dGFibGVBcnJheSAqbW9kdWxlQml0Q291bnQgPSBbc2VsZiBtb2R1bGVCaXRDb3VudDppbWFnZSBtaW5Db2x1bW46bWluQ29sdW1uIG1heENvbHVtbjptYXhDb2x1bW4gbGVmdFRvUmlnaHQ6bGVmdFRvUmlnaHQgc3RhcnRDb2x1bW46c3RhcnRDb2x1bW4gaW1hZ2VSb3c6aW1hZ2VSb3ddOworICBpZiAoIW1vZHVsZUJpdENvdW50KSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBpbnQgZW5kQ29sdW1uOworICBpbnQgY29kZXdvcmRCaXRDb3VudCA9IFtaWFBERjQxN0NvbW1vbiBiaXRDb3VudFN1bTptb2R1bGVCaXRDb3VudF07CisgIGlmIChsZWZ0VG9SaWdodCkgeworICAgIGVuZENvbHVtbiA9IHN0YXJ0Q29sdW1uICsgY29kZXdvcmRCaXRDb3VudDsKKyAgfSBlbHNlIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFttb2R1bGVCaXRDb3VudCBjb3VudF0gPj4gMTsgaSsrKSB7CisgICAgICBpbnQgdG1wQ291bnQgPSBbbW9kdWxlQml0Q291bnRbaV0gaW50VmFsdWVdOworICAgICAgbW9kdWxlQml0Q291bnRbaV0gPSBtb2R1bGVCaXRDb3VudFtbbW9kdWxlQml0Q291bnQgY291bnRdIC0gMSAtIGldOworICAgICAgbW9kdWxlQml0Q291bnRbW21vZHVsZUJpdENvdW50IGNvdW50XSAtIDEgLSBpXSA9IEAodG1wQ291bnQpOworICAgIH0KKyAgICBlbmRDb2x1bW4gPSBzdGFydENvbHVtbjsKKyAgICBzdGFydENvbHVtbiA9IGVuZENvbHVtbiAtIGNvZGV3b3JkQml0Q291bnQ7CisgIH0KKyAgLy8gVE9ETyBpbXBsZW1lbnQgY2hlY2sgZm9yIHdpZHRoIGFuZCBjb3JyZWN0aW9uIG9mIGJsYWNrIGFuZCB3aGl0ZSBiYXJzCisgIC8vIHVzZSBzdGFydCAoYW5kIG1heWJlIHN0b3AgcGF0dGVybikgdG8gZGV0ZXJtaW5lIGlmIGJsYWNrYmFycyBhcmUgd2lkZXIgdGhhbiB3aGl0ZSBiYXJzLiBJZiBzbywgYWRqdXN0LgorICAvLyBzaG91bGQgcHJvYmFibHkgZG9uZSBvbmx5IGZvciBjb2Rld29yZHMgd2l0aCBhIGxvdCBtb3JlIHRoYW4gMTcgYml0cy4gCisgIC8vIFRoZSBmb2xsb3dpbmcgZml4ZXMgMTAtMS5wbmcsIHdoaWNoIGhhcyB3aWRlIGJsYWNrIGJhcnMgYW5kIHNtYWxsIHdoaXRlIGJhcnMKKyAgLy8gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtb2R1bGVCaXRDb3VudC5sZW5ndGg7IGkrKykgeworICAvLyAgICAgIGlmIChpICUgMiA9PSAwKSB7CisgIC8vICAgICAgICBtb2R1bGVCaXRDb3VudFtpXS0tOworICAvLyAgICAgIH0gZWxzZSB7CisgIC8vICAgICAgICBtb2R1bGVCaXRDb3VudFtpXSsrOworICAvLyAgICAgIH0KKyAgLy8gICAgfQorCisgIC8vIFdlIGNvdWxkIGFsc28gdXNlIHRoZSB3aWR0aCBvZiBzdXJyb3VuZGluZyBjb2Rld29yZHMgZm9yIG1vcmUgYWNjdXJhdGUgcmVzdWx0cywgYnV0IHRoaXMgc2VlbXMKKyAgLy8gc3VmZmljaWVudCBmb3Igbm93CisgIGlmICghW3NlbGYgY2hlY2tDb2Rld29yZFNrZXc6Y29kZXdvcmRCaXRDb3VudCBtaW5Db2Rld29yZFdpZHRoOm1pbkNvZGV3b3JkV2lkdGggbWF4Q29kZXdvcmRXaWR0aDptYXhDb2Rld29yZFdpZHRoXSkgeworICAgIC8vIFdlIGNvdWxkIHRyeSB0byB1c2UgdGhlIHN0YXJ0WCBhbmQgZW5kWCBwb3NpdGlvbiBvZiB0aGUgY29kZXdvcmQgaW4gdGhlIHNhbWUgY29sdW1uIGluIHRoZSBwcmV2aW91cyByb3csCisgICAgLy8gY3JlYXRlIHRoZSBiaXQgY291bnQgZnJvbSBpdCBhbmQgbm9ybWFsaXplIGl0IHRvIDguIFRoaXMgd291bGQgaGVscCB3aXRoIHNpbmdsZSBwaXhlbCBlcnJvcnMuCisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGludCBkZWNvZGVkVmFsdWUgPSBbWlhQREY0MTdDb2Rld29yZERlY29kZXIgZGVjb2RlZFZhbHVlOm1vZHVsZUJpdENvdW50XTsKKyAgaW50IGNvZGV3b3JkID0gW1pYUERGNDE3Q29tbW9uIGNvZGV3b3JkOmRlY29kZWRWYWx1ZV07CisgIGlmIChjb2Rld29yZCA9PSAtMSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgcmV0dXJuIFtbWlhQREY0MTdDb2Rld29yZCBhbGxvY10gaW5pdFdpdGhTdGFydFg6c3RhcnRDb2x1bW4gZW5kWDplbmRDb2x1bW4gYnVja2V0OltzZWxmIGNvZGV3b3JkQnVja2V0TnVtYmVyOmRlY29kZWRWYWx1ZV0gdmFsdWU6Y29kZXdvcmRdOworfQorCisrIChOU011dGFibGVBcnJheSAqKW1vZHVsZUJpdENvdW50OihaWEJpdE1hdHJpeCAqKWltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgbWluQ29sdW1uOihpbnQpbWluQ29sdW1uCisgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q29sdW1uOihpbnQpbWF4Q29sdW1uCisgICAgICAgICAgICAgICAgICAgICAgIGxlZnRUb1JpZ2h0OihCT09MKWxlZnRUb1JpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29sdW1uOihpbnQpc3RhcnRDb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VSb3c6KGludClpbWFnZVJvdyB7CisgIGludCBpbWFnZUNvbHVtbiA9IHN0YXJ0Q29sdW1uOworICBOU011dGFibGVBcnJheSAqbW9kdWxlQml0Q291bnQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6OF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgW21vZHVsZUJpdENvdW50IGFkZE9iamVjdDpAMF07CisgIH0KKyAgaW50IG1vZHVsZU51bWJlciA9IDA7CisgIGludCBpbmNyZW1lbnQgPSBsZWZ0VG9SaWdodCA/IDEgOiAtMTsKKyAgQk9PTCBwcmV2aW91c1BpeGVsVmFsdWUgPSBsZWZ0VG9SaWdodDsKKyAgd2hpbGUgKCgobGVmdFRvUmlnaHQgJiYgaW1hZ2VDb2x1bW4gPCBtYXhDb2x1bW4pIHx8ICghbGVmdFRvUmlnaHQgJiYgaW1hZ2VDb2x1bW4gPj0gbWluQ29sdW1uKSkgJiYKKyAgICAgIG1vZHVsZU51bWJlciA8IFttb2R1bGVCaXRDb3VudCBjb3VudF0pIHsKKyAgICBpZiAoW2ltYWdlIGdldFg6aW1hZ2VDb2x1bW4geTppbWFnZVJvd10gPT0gcHJldmlvdXNQaXhlbFZhbHVlKSB7CisgICAgICBtb2R1bGVCaXRDb3VudFttb2R1bGVOdW1iZXJdID0gQChbbW9kdWxlQml0Q291bnRbbW9kdWxlTnVtYmVyXSBpbnRWYWx1ZV0gKyAxKTsKKyAgICAgIGltYWdlQ29sdW1uICs9IGluY3JlbWVudDsKKyAgICB9IGVsc2UgeworICAgICAgbW9kdWxlTnVtYmVyKys7CisgICAgICBwcmV2aW91c1BpeGVsVmFsdWUgPSAhcHJldmlvdXNQaXhlbFZhbHVlOworICAgIH0KKyAgfQorICBpZiAobW9kdWxlTnVtYmVyID09IFttb2R1bGVCaXRDb3VudCBjb3VudF0gfHwKKyAgICAgICgoKGxlZnRUb1JpZ2h0ICYmIGltYWdlQ29sdW1uID09IG1heENvbHVtbikgfHwgKCFsZWZ0VG9SaWdodCAmJiBpbWFnZUNvbHVtbiA9PSBtaW5Db2x1bW4pKSAmJiBtb2R1bGVOdW1iZXIgPT0gW21vZHVsZUJpdENvdW50IGNvdW50XSAtIDEpKSB7CisgICAgcmV0dXJuIG1vZHVsZUJpdENvdW50OworICB9CisgIHJldHVybiBuaWw7Cit9CisKKysgKGludCludW1iZXJPZkVDQ29kZVdvcmRzOihpbnQpYmFyY29kZUVDTGV2ZWwgeworICByZXR1cm4gMiA8PCBiYXJjb2RlRUNMZXZlbDsKK30KKworKyAoaW50KWFkanVzdENvZGV3b3JkU3RhcnRDb2x1bW46KFpYQml0TWF0cml4ICopaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgbWluQ29sdW1uOihpbnQpbWluQ29sdW1uCisgICAgICAgICAgICAgICAgICAgICAgIG1heENvbHVtbjooaW50KW1heENvbHVtbgorICAgICAgICAgICAgICAgICAgICAgbGVmdFRvUmlnaHQ6KEJPT0wpbGVmdFRvUmlnaHQKKyAgICAgICAgICAgICBjb2Rld29yZFN0YXJ0Q29sdW1uOihpbnQpY29kZXdvcmRTdGFydENvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VSb3c6KGludClpbWFnZVJvdyB7CisgIGludCBjb3JyZWN0ZWRTdGFydENvbHVtbiA9IGNvZGV3b3JkU3RhcnRDb2x1bW47CisgIGludCBpbmNyZW1lbnQgPSBsZWZ0VG9SaWdodCA/IC0xIDogMTsKKyAgLy8gdGhlcmUgc2hvdWxkIGJlIG5vIGJsYWNrIHBpeGVscyBiZWZvcmUgdGhlIHN0YXJ0IGNvbHVtbi4gSWYgdGhlcmUgYXJlLCB0aGVuIHdlIG5lZWQgdG8gc3RhcnQgZWFybGllci4KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICB3aGlsZSAoKChsZWZ0VG9SaWdodCAmJiBjb3JyZWN0ZWRTdGFydENvbHVtbiA+PSBtaW5Db2x1bW4pIHx8ICghbGVmdFRvUmlnaHQgJiYgY29ycmVjdGVkU3RhcnRDb2x1bW4gPCBtYXhDb2x1bW4pKSAmJgorICAgICAgICAgICBsZWZ0VG9SaWdodCA9PSBbaW1hZ2UgZ2V0WDpjb3JyZWN0ZWRTdGFydENvbHVtbiB5OmltYWdlUm93XSkgeworICAgICAgaWYgKGFicyhjb2Rld29yZFN0YXJ0Q29sdW1uIC0gY29ycmVjdGVkU3RhcnRDb2x1bW4pID4gWlhQREY0MTdfQ09ERVdPUkRfU0tFV19TSVpFKSB7CisgICAgICAgIHJldHVybiBjb2Rld29yZFN0YXJ0Q29sdW1uOworICAgICAgfQorICAgICAgY29ycmVjdGVkU3RhcnRDb2x1bW4gKz0gaW5jcmVtZW50OworICAgIH0KKyAgICBpbmNyZW1lbnQgPSAtaW5jcmVtZW50OworICAgIGxlZnRUb1JpZ2h0ID0gIWxlZnRUb1JpZ2h0OworICB9CisgIHJldHVybiBjb3JyZWN0ZWRTdGFydENvbHVtbjsKK30KKworKyAoQk9PTCljaGVja0NvZGV3b3JkU2tldzooaW50KWNvZGV3b3JkU2l6ZSBtaW5Db2Rld29yZFdpZHRoOihpbnQpbWluQ29kZXdvcmRXaWR0aCBtYXhDb2Rld29yZFdpZHRoOihpbnQpbWF4Q29kZXdvcmRXaWR0aCB7CisgIHJldHVybiBtaW5Db2Rld29yZFdpZHRoIC0gWlhQREY0MTdfQ09ERVdPUkRfU0tFV19TSVpFIDw9IGNvZGV3b3JkU2l6ZSAmJgorICAgICAgY29kZXdvcmRTaXplIDw9IG1heENvZGV3b3JkV2lkdGggKyBaWFBERjQxN19DT0RFV09SRF9TS0VXX1NJWkU7Cit9CisKKysgKFpYRGVjb2RlclJlc3VsdCAqKWRlY29kZUNvZGV3b3JkczooTlNNdXRhYmxlQXJyYXkgKiljb2Rld29yZHMgZWNMZXZlbDooaW50KWVjTGV2ZWwgZXJhc3VyZXM6KE5TQXJyYXkgKillcmFzdXJlcyB7CisgIGlmIChbY29kZXdvcmRzIGNvdW50XSA9PSAwKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGludCBudW1FQ0NvZGV3b3JkcyA9IDEgPDwgKGVjTGV2ZWwgKyAxKTsKKyAgaW50IGNvcnJlY3RlZEVycm9yc0NvdW50ID0gW3NlbGYgY29ycmVjdEVycm9yczpjb2Rld29yZHMgZXJhc3VyZXM6ZXJhc3VyZXMgbnVtRUNDb2Rld29yZHM6bnVtRUNDb2Rld29yZHNdOworICBpZiAoY29ycmVjdGVkRXJyb3JzQ291bnQgPT0gLTEpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIGlmICghW3NlbGYgdmVyaWZ5Q29kZXdvcmRDb3VudDpjb2Rld29yZHMgbnVtRUNDb2Rld29yZHM6bnVtRUNDb2Rld29yZHNdKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIC8vIERlY29kZSB0aGUgY29kZXdvcmRzCisgIFpYRGVjb2RlclJlc3VsdCAqZGVjb2RlclJlc3VsdCA9IFtaWFBERjQxN0RlY29kZWRCaXRTdHJlYW1QYXJzZXIgZGVjb2RlOmNvZGV3b3JkcyBlY0xldmVsOltAKGVjTGV2ZWwpIHN0cmluZ1ZhbHVlXSBlcnJvcjpuaWxdOworICBkZWNvZGVyUmVzdWx0LmVycm9yc0NvcnJlY3RlZCA9IEAoY29ycmVjdGVkRXJyb3JzQ291bnQpOworICBkZWNvZGVyUmVzdWx0LmVyYXN1cmVzID0gQChbZXJhc3VyZXMgY291bnRdKTsKKyAgcmV0dXJuIGRlY29kZXJSZXN1bHQ7Cit9CisKKy8qKgorICogR2l2ZW4gZGF0YSBhbmQgZXJyb3ItY29ycmVjdGlvbiBjb2Rld29yZHMgcmVjZWl2ZWQsIHBvc3NpYmx5IGNvcnJ1cHRlZCBieSBlcnJvcnMsIGF0dGVtcHRzIHRvCisgKiBjb3JyZWN0IHRoZSBlcnJvcnMgaW4tcGxhY2UuCisgKi8KKysgKGludCljb3JyZWN0RXJyb3JzOihOU011dGFibGVBcnJheSAqKWNvZGV3b3JkcyBlcmFzdXJlczooTlNBcnJheSAqKWVyYXN1cmVzIG51bUVDQ29kZXdvcmRzOihpbnQpbnVtRUNDb2Rld29yZHMgeworICBpZiAoZXJhc3VyZXMgJiYKKyAgICAgIChbZXJhc3VyZXMgY291bnRdID4gbnVtRUNDb2Rld29yZHMgLyAyICsgWlhQREY0MTdfTUFYX0VSUk9SUyB8fAorICAgICAgIG51bUVDQ29kZXdvcmRzIDwgMCB8fAorICAgICAgIG51bUVDQ29kZXdvcmRzID4gWlhQREY0MTdfTUFYX0VDX0NPREVXT1JEUykpIHsKKyAgICAvLyBUb28gbWFueSBlcnJvcnMgb3IgRUMgQ29kZXdvcmRzIGlzIGNvcnJ1cHRlZAorICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gW2Vycm9yQ29ycmVjdGlvbiBkZWNvZGU6Y29kZXdvcmRzIG51bUVDQ29kZXdvcmRzOm51bUVDQ29kZXdvcmRzIGVyYXN1cmVzOmVyYXN1cmVzXTsKK30KKworLyoqCisgKiBWZXJpZnkgdGhhdCBhbGwgaXMgT0sgd2l0aCB0aGUgY29kZXdvcmQgYXJyYXkuCisgKi8KKysgKEJPT0wpdmVyaWZ5Q29kZXdvcmRDb3VudDooTlNNdXRhYmxlQXJyYXkgKiljb2Rld29yZHMgbnVtRUNDb2Rld29yZHM6KGludCludW1FQ0NvZGV3b3JkcyB7CisgIGlmIChbY29kZXdvcmRzIGNvdW50XSA8IDQpIHsKKyAgICAvLyBDb2Rld29yZCBhcnJheSBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCA0IGFsbG93aW5nIGZvcgorICAgIC8vIENvdW50IENXLCBBdCBsZWFzdCBvbmUgRGF0YSBDVywgRXJyb3IgQ29ycmVjdGlvbiBDVywgRXJyb3IgQ29ycmVjdGlvbiBDVworICAgIHJldHVybiBOTzsKKyAgfQorICAvLyBUaGUgZmlyc3QgY29kZXdvcmQsIHRoZSBTeW1ib2wgTGVuZ3RoIERlc2NyaXB0b3IsIHNoYWxsIGFsd2F5cyBlbmNvZGUgdGhlIHRvdGFsIG51bWJlciBvZiBkYXRhCisgIC8vIGNvZGV3b3JkcyBpbiB0aGUgc3ltYm9sLCBpbmNsdWRpbmcgdGhlIFN5bWJvbCBMZW5ndGggRGVzY3JpcHRvciBpdHNlbGYsIGRhdGEgY29kZXdvcmRzIGFuZCBwYWQKKyAgLy8gY29kZXdvcmRzLCBidXQgZXhjbHVkaW5nIHRoZSBudW1iZXIgb2YgZXJyb3IgY29ycmVjdGlvbiBjb2Rld29yZHMuCisgIGludCBudW1iZXJPZkNvZGV3b3JkcyA9IFtjb2Rld29yZHNbMF0gaW50VmFsdWVdOworICBpZiAobnVtYmVyT2ZDb2Rld29yZHMgPiBbY29kZXdvcmRzIGNvdW50XSkgeworICAgIHJldHVybiBOTzsKKyAgfQorICBpZiAobnVtYmVyT2ZDb2Rld29yZHMgPT0gMCkgeworICAgIC8vIFJlc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IC0gOCAoQWxsb3cgZm9yIGF0IGxlYXN0IGxldmVsIDMgRXJyb3IgQ29ycmVjdGlvbiAoOCBFcnJvciBDb2Rld29yZHMpCisgICAgaWYgKG51bUVDQ29kZXdvcmRzIDwgW2NvZGV3b3JkcyBjb3VudF0pIHsKKyAgICAgIGNvZGV3b3Jkc1swXSA9IEAoW2NvZGV3b3JkcyBjb3VudF0gLSBudW1FQ0NvZGV3b3Jkcyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgIH0KKworICByZXR1cm4gWUVTOworfQorCisrIChOU0FycmF5ICopYml0Q291bnRGb3JDb2Rld29yZDooaW50KWNvZGV3b3JkIHsKKyAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgW3Jlc3VsdCBhZGRPYmplY3Q6QDBdOworICB9CisKKyAgaW50IHByZXZpb3VzVmFsdWUgPSAwOworICBpbnQgaSA9IChpbnQpW3Jlc3VsdCBjb3VudF0gLSAxOworICB3aGlsZSAoWUVTKSB7CisgICAgaWYgKChjb2Rld29yZCAmIDB4MSkgIT0gcHJldmlvdXNWYWx1ZSkgeworICAgICAgcHJldmlvdXNWYWx1ZSA9IGNvZGV3b3JkICYgMHgxOworICAgICAgaS0tOworICAgICAgaWYgKGkgPCAwKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICByZXN1bHRbaV0gPSBAKFtyZXN1bHRbaV0gaW50VmFsdWVdICsgMSk7CisgICAgY29kZXdvcmQgPj49IDE7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworKyAoaW50KWNvZGV3b3JkQnVja2V0TnVtYmVyOihpbnQpY29kZXdvcmQgeworICByZXR1cm4gW3NlbGYgY29kZXdvcmRCdWNrZXROdW1iZXJXaXRoTW9kdWxlQml0Q291bnQ6W3NlbGYgYml0Q291bnRGb3JDb2Rld29yZDpjb2Rld29yZF1dOworfQorCisrIChpbnQpY29kZXdvcmRCdWNrZXROdW1iZXJXaXRoTW9kdWxlQml0Q291bnQ6KE5TQXJyYXkgKiltb2R1bGVCaXRDb3VudCB7CisgIHJldHVybiAoW21vZHVsZUJpdENvdW50WzBdIGludFZhbHVlXSAtIFttb2R1bGVCaXRDb3VudFsyXSBpbnRWYWx1ZV0gKyBbbW9kdWxlQml0Q291bnRbNF0gaW50VmFsdWVdIC0gW21vZHVsZUJpdENvdW50WzZdIGludFZhbHVlXSArIDkpICUgOTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbjooTlNBcnJheSAqKWJhcmNvZGVNYXRyaXggeworICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgW2JhcmNvZGVNYXRyaXggY291bnRdOyByb3crKykgeworICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiUm93ICUyZDogIiwgcm93XTsKKyAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBbYmFyY29kZU1hdHJpeFtyb3ddIGNvdW50XTsgY29sdW1uKyspIHsKKyAgICAgIFpYUERGNDE3QmFyY29kZVZhbHVlICpiYXJjb2RlVmFsdWUgPSBiYXJjb2RlTWF0cml4W3Jvd11bY29sdW1uXTsKKyAgICAgIGlmIChbW2JhcmNvZGVWYWx1ZSB2YWx1ZV0gY291bnRdID09IDApIHsKKyAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIgICAgICAgICJdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlNGQoJTJkKSIsIFtbYmFyY29kZVZhbHVlIHZhbHVlXVswXSBpbnRWYWx1ZV0sCisgICAgICAgICBbW2JhcmNvZGVWYWx1ZSBjb25maWRlbmNlOltbYmFyY29kZVZhbHVlIHZhbHVlXVswXSBpbnRWYWx1ZV1dIGludFZhbHVlXV07CisgICAgICB9CisgICAgfQorICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAiXG4iXTsKKyAgfQorICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhTdHJpbmc6cmVzdWx0XTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL2VjL1pYTW9kdWx1c0dGLmggYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvZWMvWlhNb2R1bHVzR0YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzA3ZDdlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL2VjL1pYTW9kdWx1c0dGLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGNsYXNzIFpYTW9kdWx1c1BvbHk7CisKK0BpbnRlcmZhY2UgWlhNb2R1bHVzR0YgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWE1vZHVsdXNQb2x5ICpvbmU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWE1vZHVsdXNQb2x5ICp6ZXJvOworCisrIChaWE1vZHVsdXNHRiAqKVBERjQxN19HRjsKKworLSAoaWQpaW5pdFdpdGhNb2R1bHVzOihpbnQpbW9kdWx1cyBnZW5lcmF0b3I6KGludClnZW5lcmF0b3I7CisKKy0gKFpYTW9kdWx1c1BvbHkgKilidWlsZE1vbm9taWFsOihpbnQpZGVncmVlIGNvZWZmaWNpZW50OihpbnQpY29lZmZpY2llbnQ7CistIChpbnQpYWRkOihpbnQpYSBiOihpbnQpYjsKKy0gKGludClzdWJ0cmFjdDooaW50KWEgYjooaW50KWI7CistIChpbnQpZXhwOihpbnQpYTsKKy0gKGludClsb2c6KGludClhOworLSAoaW50KWludmVyc2U6KGludClhOworLSAoaW50KW11bHRpcGx5OihpbnQpYSBiOihpbnQpYjsKKy0gKGludClzaXplOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvZWMvWlhNb2R1bHVzR0YubSBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9lYy9aWE1vZHVsdXNHRi5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWVlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvZWMvWlhNb2R1bHVzR0YubQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhNb2R1bHVzR0YuaCIKKyNpbXBvcnQgIlpYTW9kdWx1c1BvbHkuaCIKKyNpbXBvcnQgIlpYUERGNDE3Q29tbW9uLmgiCisKK0BpbnRlcmZhY2UgWlhNb2R1bHVzR0YgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlQXJyYXkgKmV4cFRhYmxlOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlQXJyYXkgKmxvZ1RhYmxlOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IG1vZHVsdXM7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYTW9kdWx1c0dGCisKKysgKFpYTW9kdWx1c0dGICopUERGNDE3X0dGIHsKKyAgcmV0dXJuIFtbWlhNb2R1bHVzR0YgYWxsb2NdIGluaXRXaXRoTW9kdWx1czpaWFBERjQxN19OVU1CRVJfT0ZfQ09ERVdPUkRTIGdlbmVyYXRvcjozXTsKK30KKworLSAoaWQpaW5pdFdpdGhNb2R1bHVzOihpbnQpbW9kdWx1cyBnZW5lcmF0b3I6KGludClnZW5lcmF0b3IgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9tb2R1bHVzID0gbW9kdWx1czsKKyAgICBfZXhwVGFibGUgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2VsZi5tb2R1bHVzXTsKKyAgICBfbG9nVGFibGUgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2VsZi5tb2R1bHVzXTsKKyAgICBpbnQgeCA9IDE7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtb2R1bHVzOyBpKyspIHsKKyAgICAgIFtfZXhwVGFibGUgYWRkT2JqZWN0OkAoeCldOworICAgICAgeCA9ICh4ICogZ2VuZXJhdG9yKSAlIG1vZHVsdXM7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxmLnNpemU7IGkrKykgeworICAgICAgW19sb2dUYWJsZSBhZGRPYmplY3Q6QDBdOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VsZi5zaXplIC0gMTsgaSsrKSB7CisgICAgICBfbG9nVGFibGVbW19leHBUYWJsZVtpXSBpbnRWYWx1ZV1dID0gQChpKTsKKyAgICB9CisgICAgLy8gbG9nVGFibGVbMF0gPT0gMCBidXQgdGhpcyBzaG91bGQgbmV2ZXIgYmUgdXNlZAorICAgIGludCB6ZXJvSW50ID0gMDsKKyAgICBfemVybyA9IFtbWlhNb2R1bHVzUG9seSBhbGxvY10gaW5pdFdpdGhGaWVsZDpzZWxmIGNvZWZmaWNpZW50czomemVyb0ludCBjb2VmZmljaWVudHNMZW46MV07CisKKyAgICBpbnQgb25lSW50ID0gMTsKKyAgICBfb25lID0gW1taWE1vZHVsdXNQb2x5IGFsbG9jXSBpbml0V2l0aEZpZWxkOnNlbGYgY29lZmZpY2llbnRzOiZvbmVJbnQgY29lZmZpY2llbnRzTGVuOjFdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFpYTW9kdWx1c1BvbHkgKilidWlsZE1vbm9taWFsOihpbnQpZGVncmVlIGNvZWZmaWNpZW50OihpbnQpY29lZmZpY2llbnQgeworICBpZiAoZGVncmVlIDwgMCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJEZWdyZWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4iXTsKKyAgfQorICBpZiAoY29lZmZpY2llbnQgPT0gMCkgeworICAgIHJldHVybiBzZWxmLnplcm87CisgIH0KKworICBpbnQgY29lZmZpY2llbnRzTGVuID0gZGVncmVlICsgMTsKKyAgaW50IGNvZWZmaWNpZW50c1tjb2VmZmljaWVudHNMZW5dOworICBjb2VmZmljaWVudHNbMF0gPSBjb2VmZmljaWVudDsKKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBjb2VmZmljaWVudHNMZW47IGkrKykgeworICAgIGNvZWZmaWNpZW50c1tpXSA9IDA7CisgIH0KKyAgcmV0dXJuIFtbWlhNb2R1bHVzUG9seSBhbGxvY10gaW5pdFdpdGhGaWVsZDpzZWxmIGNvZWZmaWNpZW50czpjb2VmZmljaWVudHMgY29lZmZpY2llbnRzTGVuOmNvZWZmaWNpZW50c0xlbl07Cit9CisKKy0gKGludClhZGQ6KGludClhIGI6KGludCliIHsKKyAgcmV0dXJuIChhICsgYikgJSBzZWxmLm1vZHVsdXM7Cit9CisKKy0gKGludClzdWJ0cmFjdDooaW50KWEgYjooaW50KWIgeworICByZXR1cm4gKHNlbGYubW9kdWx1cyArIGEgLSBiKSAlIHNlbGYubW9kdWx1czsKK30KKworLSAoaW50KWV4cDooaW50KWEgeworICByZXR1cm4gW3NlbGYuZXhwVGFibGVbYV0gaW50VmFsdWVdOworfQorCistIChpbnQpbG9nOihpbnQpYSB7CisgIGlmIChhID09IDApIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiQXJndW1lbnQgbXVzdCBiZSBub24temVyby4iXTsKKyAgfQorICByZXR1cm4gW3NlbGYubG9nVGFibGVbYV0gaW50VmFsdWVdOworfQorCistIChpbnQpaW52ZXJzZTooaW50KWEgeworICBpZiAoYSA9PSAwKSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkFyZ3VtZW50IG11c3QgYmUgbm9uLXplcm8uIl07CisgIH0KKyAgcmV0dXJuIFtzZWxmLmV4cFRhYmxlW3NlbGYuc2l6ZSAtIFtzZWxmLmxvZ1RhYmxlW2FdIGludFZhbHVlXSAtIDFdIGludFZhbHVlXTsKK30KKworLSAoaW50KW11bHRpcGx5OihpbnQpYSBiOihpbnQpYiB7CisgIGlmIChhID09IDAgfHwgYiA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpbnQgbG9nU3VtID0gW3NlbGYubG9nVGFibGVbYV0gaW50VmFsdWVdICsgW3NlbGYubG9nVGFibGVbYl0gaW50VmFsdWVdOworICByZXR1cm4gW3NlbGYuZXhwVGFibGVbbG9nU3VtICUgKHNlbGYubW9kdWx1cyAtIDEpXSBpbnRWYWx1ZV07Cit9CisKKy0gKGludClzaXplIHsKKyAgcmV0dXJuIHNlbGYubW9kdWx1czsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL2VjL1pYTW9kdWx1c1BvbHkuaCBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9lYy9aWE1vZHVsdXNQb2x5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0OTFjYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9lYy9aWE1vZHVsdXNQb2x5LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGNsYXNzIFpYTW9kdWx1c0dGOworCitAaW50ZXJmYWNlIFpYTW9kdWx1c1BvbHkgOiBOU09iamVjdAorCistIChpZClpbml0V2l0aEZpZWxkOihaWE1vZHVsdXNHRiAqKWZpZWxkIGNvZWZmaWNpZW50czooaW50ICopY29lZmZpY2llbnRzIGNvZWZmaWNpZW50c0xlbjooaW50KWNvZWZmaWNpZW50c0xlbjsKKy0gKGludClkZWdyZWU7CistIChCT09MKXplcm87CistIChpbnQpY29lZmZpY2llbnQ6KGludClkZWdyZWU7CistIChpbnQpZXZhbHVhdGVBdDooaW50KWE7CistIChaWE1vZHVsdXNQb2x5ICopYWRkOihaWE1vZHVsdXNQb2x5ICopb3RoZXI7CistIChaWE1vZHVsdXNQb2x5ICopc3VidHJhY3Q6KFpYTW9kdWx1c1BvbHkgKilvdGhlcjsKKy0gKFpYTW9kdWx1c1BvbHkgKiltdWx0aXBseTooWlhNb2R1bHVzUG9seSAqKW90aGVyOworLSAoWlhNb2R1bHVzUG9seSAqKW5lZ2F0aXZlOworLSAoWlhNb2R1bHVzUG9seSAqKW11bHRpcGx5U2NhbGFyOihpbnQpc2NhbGFyOworLSAoWlhNb2R1bHVzUG9seSAqKW11bHRpcGx5QnlNb25vbWlhbDooaW50KWRlZ3JlZSBjb2VmZmljaWVudDooaW50KWNvZWZmaWNpZW50OworLSAoTlNBcnJheSAqKWRpdmlkZTooWlhNb2R1bHVzUG9seSAqKW90aGVyOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvZWMvWlhNb2R1bHVzUG9seS5tIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL2VjL1pYTW9kdWx1c1BvbHkubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjlkNjhjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZWNvZGVyL2VjL1pYTW9kdWx1c1BvbHkubQpAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhNb2R1bHVzR0YuaCIKKyNpbXBvcnQgIlpYTW9kdWx1c1BvbHkuaCIKKworQGludGVyZmFjZSBaWE1vZHVsdXNQb2x5ICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCAqY29lZmZpY2llbnRzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZWZmaWNpZW50c0xlbjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBaWE1vZHVsdXNHRiAqZmllbGQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYTW9kdWx1c1BvbHkKKworLSAoaWQpaW5pdFdpdGhGaWVsZDooWlhNb2R1bHVzR0YgKilmaWVsZCBjb2VmZmljaWVudHM6KGludCAqKWNvZWZmaWNpZW50cyBjb2VmZmljaWVudHNMZW46KGludCljb2VmZmljaWVudHNMZW4geworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9maWVsZCA9IGZpZWxkOworICAgIGlmIChjb2VmZmljaWVudHNMZW4gPiAxICYmIGNvZWZmaWNpZW50c1swXSA9PSAwKSB7CisgICAgICAvLyBMZWFkaW5nIHRlcm0gbXVzdCBiZSBub24temVybyBmb3IgYW55dGhpbmcgZXhjZXB0IHRoZSBjb25zdGFudCBwb2x5bm9taWFsICIwIgorICAgICAgaW50IGZpcnN0Tm9uWmVybyA9IDE7CisgICAgICB3aGlsZSAoZmlyc3ROb25aZXJvIDwgY29lZmZpY2llbnRzTGVuICYmIGNvZWZmaWNpZW50c1tmaXJzdE5vblplcm9dID09IDApIHsKKyAgICAgICAgZmlyc3ROb25aZXJvKys7CisgICAgICB9CisgICAgICBpZiAoZmlyc3ROb25aZXJvID09IGNvZWZmaWNpZW50c0xlbikgeworICAgICAgICBaWE1vZHVsdXNQb2x5ICp6ZXJvID0gZmllbGQuemVybzsKKyAgICAgICAgX2NvZWZmaWNpZW50cyA9IChpbnQgKiltYWxsb2MoemVyby5jb2VmZmljaWVudHNMZW4gKiBzaXplb2YoaW50KSk7CisgICAgICAgIG1lbWNweShfY29lZmZpY2llbnRzLCB6ZXJvLmNvZWZmaWNpZW50cywgemVyby5jb2VmZmljaWVudHNMZW4gKiBzaXplb2YoaW50KSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBfY29lZmZpY2llbnRzTGVuID0gKGNvZWZmaWNpZW50c0xlbiAtIGZpcnN0Tm9uWmVybyk7CisgICAgICAgIF9jb2VmZmljaWVudHMgPSAoaW50ICopbWFsbG9jKF9jb2VmZmljaWVudHNMZW4gKiBzaXplb2YoaW50KSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2NvZWZmaWNpZW50c0xlbjsgaSsrKSB7CisgICAgICAgICAgX2NvZWZmaWNpZW50c1tpXSA9IGNvZWZmaWNpZW50c1tmaXJzdE5vblplcm8gKyBpXTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBfY29lZmZpY2llbnRzID0gKGludCAqKW1hbGxvYyhjb2VmZmljaWVudHNMZW4gKiBzaXplb2YoaW50KSk7CisgICAgICBtZW1jcHkoX2NvZWZmaWNpZW50cywgY29lZmZpY2llbnRzLCBjb2VmZmljaWVudHNMZW4gKiBzaXplb2YoaW50KSk7CisgICAgICBfY29lZmZpY2llbnRzTGVuID0gY29lZmZpY2llbnRzTGVuOworICAgIH0KKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MgeworICBpZiAoX2NvZWZmaWNpZW50cyAhPSBOVUxMKSB7CisgICAgZnJlZShfY29lZmZpY2llbnRzKTsKKyAgICBfY29lZmZpY2llbnRzID0gTlVMTDsKKyAgfQorfQorCistIChpbnQpZGVncmVlIHsKKyAgcmV0dXJuIHNlbGYuY29lZmZpY2llbnRzTGVuIC0gMTsKK30KKworLSAoQk9PTCl6ZXJvIHsKKyAgcmV0dXJuIHNlbGYuY29lZmZpY2llbnRzWzBdID09IDA7Cit9CisKKy0gKGludCljb2VmZmljaWVudDooaW50KWRlZ3JlZSB7CisgIHJldHVybiBzZWxmLmNvZWZmaWNpZW50c1tzZWxmLmNvZWZmaWNpZW50c0xlbiAtIDEgLSBkZWdyZWVdOworfQorCistIChpbnQpZXZhbHVhdGVBdDooaW50KWEgeworICBpZiAoYSA9PSAwKSB7CisgICAgcmV0dXJuIFtzZWxmIGNvZWZmaWNpZW50OjBdOworICB9CisgIGludCBzaXplID0gc2VsZi5jb2VmZmljaWVudHNMZW47CisgIGlmIChhID09IDEpIHsKKyAgICAvLyBKdXN0IHRoZSBzdW0gb2YgdGhlIGNvZWZmaWNpZW50cworICAgIGludCByZXN1bHQgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICByZXN1bHQgPSBbc2VsZi5maWVsZCBhZGQ6cmVzdWx0IGI6c2VsZi5jb2VmZmljaWVudHNbaV1dOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIGludCByZXN1bHQgPSBzZWxmLmNvZWZmaWNpZW50c1swXTsKKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBzaXplOyBpKyspIHsKKyAgICByZXN1bHQgPSBbc2VsZi5maWVsZCBhZGQ6W3NlbGYuZmllbGQgbXVsdGlwbHk6YSBiOnJlc3VsdF0gYjpzZWxmLmNvZWZmaWNpZW50c1tpXV07CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoWlhNb2R1bHVzUG9seSAqKWFkZDooWlhNb2R1bHVzUG9seSAqKW90aGVyIHsKKyAgaWYgKCFbc2VsZi5maWVsZCBpc0VxdWFsOm90aGVyLmZpZWxkXSkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJaWE1vZHVsdXNQb2x5cyBkbyBub3QgaGF2ZSBzYW1lIFpYTW9kdWx1c0dGIGZpZWxkIl07CisgIH0KKyAgaWYgKHNlbGYuemVybykgeworICAgIHJldHVybiBvdGhlcjsKKyAgfQorICBpZiAob3RoZXIuemVybykgeworICAgIHJldHVybiBzZWxmOworICB9CisKKyAgaW50ICpzbWFsbGVyQ29lZmZpY2llbnRzID0gc2VsZi5jb2VmZmljaWVudHM7CisgIGludCBzbWFsbGVyQ29lZmZpY2llbnRzTGVuID0gc2VsZi5jb2VmZmljaWVudHNMZW47CisgIGludCAqbGFyZ2VyQ29lZmZpY2llbnRzID0gb3RoZXIuY29lZmZpY2llbnRzOworICBpbnQgbGFyZ2VyQ29lZmZpY2llbnRzTGVuID0gb3RoZXIuY29lZmZpY2llbnRzTGVuOworICBpZiAoc21hbGxlckNvZWZmaWNpZW50c0xlbiA+IGxhcmdlckNvZWZmaWNpZW50c0xlbikgeworICAgIGludCAqdGVtcCA9IHNtYWxsZXJDb2VmZmljaWVudHM7CisgICAgaW50IHRlbXBMZW4gPSBzbWFsbGVyQ29lZmZpY2llbnRzTGVuOworICAgIHNtYWxsZXJDb2VmZmljaWVudHMgPSBsYXJnZXJDb2VmZmljaWVudHM7CisgICAgc21hbGxlckNvZWZmaWNpZW50c0xlbiA9IGxhcmdlckNvZWZmaWNpZW50c0xlbjsKKyAgICBsYXJnZXJDb2VmZmljaWVudHMgPSB0ZW1wOworICAgIGxhcmdlckNvZWZmaWNpZW50c0xlbiA9IHRlbXBMZW47CisgIH0KKyAgaW50IHN1bURpZmZbbGFyZ2VyQ29lZmZpY2llbnRzTGVuXTsKKyAgbWVtc2V0KHN1bURpZmYsIDAsIGxhcmdlckNvZWZmaWNpZW50c0xlbiAqIHNpemVvZihpbnQpKTsKKyAgaW50IGxlbmd0aERpZmYgPSBsYXJnZXJDb2VmZmljaWVudHNMZW4gLSBzbWFsbGVyQ29lZmZpY2llbnRzTGVuOworICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aERpZmY7IGkrKykgeworICAgIHN1bURpZmZbaV0gPSBsYXJnZXJDb2VmZmljaWVudHNbaV07CisgIH0KKyAgZm9yIChpbnQgaSA9IGxlbmd0aERpZmY7IGkgPCBsYXJnZXJDb2VmZmljaWVudHNMZW47IGkrKykgeworICAgIHN1bURpZmZbaV0gPSBbc2VsZi5maWVsZCBhZGQ6c21hbGxlckNvZWZmaWNpZW50c1tpIC0gbGVuZ3RoRGlmZl0gYjpsYXJnZXJDb2VmZmljaWVudHNbaV1dOworICB9CisKKyAgcmV0dXJuIFtbWlhNb2R1bHVzUG9seSBhbGxvY10gaW5pdFdpdGhGaWVsZDpzZWxmLmZpZWxkIGNvZWZmaWNpZW50czpzdW1EaWZmIGNvZWZmaWNpZW50c0xlbjpsYXJnZXJDb2VmZmljaWVudHNMZW5dOworfQorCistIChaWE1vZHVsdXNQb2x5ICopc3VidHJhY3Q6KFpYTW9kdWx1c1BvbHkgKilvdGhlciB7CisgIGlmICghW3NlbGYuZmllbGQgaXNFcXVhbDpvdGhlci5maWVsZF0pIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiWlhNb2R1bHVzUG9seXMgZG8gbm90IGhhdmUgc2FtZSBaWE1vZHVsdXNHRiBmaWVsZCJdOworICB9CisgIGlmIChzZWxmLnplcm8pIHsKKyAgICByZXR1cm4gc2VsZjsKKyAgfQorICByZXR1cm4gW3NlbGYgYWRkOltvdGhlciBuZWdhdGl2ZV1dOworfQorCistIChaWE1vZHVsdXNQb2x5ICopbXVsdGlwbHk6KFpYTW9kdWx1c1BvbHkgKilvdGhlciB7CisgIGlmICghW3NlbGYuZmllbGQgaXNFcXVhbDpvdGhlci5maWVsZF0pIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiWlhNb2R1bHVzUG9seXMgZG8gbm90IGhhdmUgc2FtZSBaWE1vZHVsdXNHRiBmaWVsZCJdOworICB9CisgIGlmIChzZWxmLnplcm8gfHwgb3RoZXIuemVybykgeworICAgIHJldHVybiBzZWxmLmZpZWxkLnplcm87CisgIH0KKyAgaW50ICphQ29lZmZpY2llbnRzID0gc2VsZi5jb2VmZmljaWVudHM7CisgIGludCBhTGVuZ3RoID0gc2VsZi5jb2VmZmljaWVudHNMZW47CisgIGludCAqYkNvZWZmaWNpZW50cyA9IG90aGVyLmNvZWZmaWNpZW50czsKKyAgaW50IGJMZW5ndGggPSBvdGhlci5jb2VmZmljaWVudHNMZW47CisgIGludCBwcm9kdWN0TGVuID0gYUxlbmd0aCArIGJMZW5ndGggLSAxOworICBpbnQgcHJvZHVjdFtwcm9kdWN0TGVuXTsKKyAgbWVtc2V0KHByb2R1Y3QsIDAsIHByb2R1Y3RMZW4gKiBzaXplb2YoaW50KSk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKyspIHsKKyAgICBpbnQgYUNvZWZmID0gYUNvZWZmaWNpZW50c1tpXTsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IGJMZW5ndGg7IGorKykgeworICAgICAgcHJvZHVjdFtpICsgal0gPSBbc2VsZi5maWVsZCBhZGQ6cHJvZHVjdFtpICsgal0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOltzZWxmLmZpZWxkIG11bHRpcGx5OmFDb2VmZiBiOmJDb2VmZmljaWVudHNbal1dXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFtbWlhNb2R1bHVzUG9seSBhbGxvY10gaW5pdFdpdGhGaWVsZDpzZWxmLmZpZWxkIGNvZWZmaWNpZW50czpwcm9kdWN0IGNvZWZmaWNpZW50c0xlbjpwcm9kdWN0TGVuXTsKK30KKworLSAoWlhNb2R1bHVzUG9seSAqKW5lZ2F0aXZlIHsKKyAgaW50IG5lZ2F0aXZlQ29lZmZpY2llbnRzTGVuID0gc2VsZi5jb2VmZmljaWVudHNMZW47CisgIGludCBuZWdhdGl2ZUNvZWZmaWNpZW50c1tuZWdhdGl2ZUNvZWZmaWNpZW50c0xlbl07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VsZi5jb2VmZmljaWVudHNMZW47IGkrKykgeworICAgIG5lZ2F0aXZlQ29lZmZpY2llbnRzW2ldID0gW3NlbGYuZmllbGQgc3VidHJhY3Q6MCBiOnNlbGYuY29lZmZpY2llbnRzW2ldXTsKKyAgfQorICByZXR1cm4gW1taWE1vZHVsdXNQb2x5IGFsbG9jXSBpbml0V2l0aEZpZWxkOnNlbGYuZmllbGQgY29lZmZpY2llbnRzOm5lZ2F0aXZlQ29lZmZpY2llbnRzIGNvZWZmaWNpZW50c0xlbjpuZWdhdGl2ZUNvZWZmaWNpZW50c0xlbl07Cit9CisKKy0gKFpYTW9kdWx1c1BvbHkgKiltdWx0aXBseVNjYWxhcjooaW50KXNjYWxhciB7CisgIGlmIChzY2FsYXIgPT0gMCkgeworICAgIHJldHVybiBzZWxmLmZpZWxkLnplcm87CisgIH0KKyAgaWYgKHNjYWxhciA9PSAxKSB7CisgICAgcmV0dXJuIHNlbGY7CisgIH0KKyAgaW50IHNpemUgPSBzZWxmLmNvZWZmaWNpZW50c0xlbjsKKyAgaW50IHByb2R1Y3Rbc2l6ZV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgcHJvZHVjdFtpXSA9IFtzZWxmLmZpZWxkIG11bHRpcGx5OnNlbGYuY29lZmZpY2llbnRzW2ldIGI6c2NhbGFyXTsKKyAgfQorICByZXR1cm4gW1taWE1vZHVsdXNQb2x5IGFsbG9jXSBpbml0V2l0aEZpZWxkOnNlbGYuZmllbGQgY29lZmZpY2llbnRzOnByb2R1Y3QgY29lZmZpY2llbnRzTGVuOnNpemVdOworfQorCistIChaWE1vZHVsdXNQb2x5ICopbXVsdGlwbHlCeU1vbm9taWFsOihpbnQpZGVncmVlIGNvZWZmaWNpZW50OihpbnQpY29lZmZpY2llbnQgeworICBpZiAoZGVncmVlIDwgMCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJEZWdyZWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4iXTsKKyAgfQorICBpZiAoY29lZmZpY2llbnQgPT0gMCkgeworICAgIHJldHVybiBzZWxmLmZpZWxkLnplcm87CisgIH0KKyAgaW50IHNpemUgPSBzZWxmLmNvZWZmaWNpZW50c0xlbjsKKyAgaW50IHByb2R1Y3Rbc2l6ZSArIGRlZ3JlZV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZSArIGRlZ3JlZTsgaSsrKSB7CisgICAgaWYgKGkgPCBzaXplKSB7CisgICAgICBwcm9kdWN0W2ldID0gW3NlbGYuZmllbGQgbXVsdGlwbHk6c2VsZi5jb2VmZmljaWVudHNbaV0gYjpjb2VmZmljaWVudF07CisgICAgfSBlbHNlIHsKKyAgICAgIHByb2R1Y3RbaV0gPSAwOworICAgIH0KKyAgfQorCisgIHJldHVybiBbW1pYTW9kdWx1c1BvbHkgYWxsb2NdIGluaXRXaXRoRmllbGQ6c2VsZi5maWVsZCBjb2VmZmljaWVudHM6cHJvZHVjdCBjb2VmZmljaWVudHNMZW46c2l6ZSArIGRlZ3JlZV07Cit9CisKKy0gKE5TQXJyYXkgKilkaXZpZGU6KFpYTW9kdWx1c1BvbHkgKilvdGhlciB7CisgIGlmICghW3NlbGYuZmllbGQgaXNFcXVhbDpvdGhlci5maWVsZF0pIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiWlhNb2R1bHVzUG9seXMgZG8gbm90IGhhdmUgc2FtZSBaWE1vZHVsdXNHRiBmaWVsZCJdOworICB9CisgIGlmIChvdGhlci56ZXJvKSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkRpdmlkZSBieSAwIl07CisgIH0KKworICBaWE1vZHVsdXNQb2x5ICpxdW90aWVudCA9IHNlbGYuZmllbGQuemVybzsKKyAgWlhNb2R1bHVzUG9seSAqcmVtYWluZGVyID0gc2VsZjsKKworICBpbnQgZGVub21pbmF0b3JMZWFkaW5nVGVybSA9IFtvdGhlciBjb2VmZmljaWVudDpvdGhlci5kZWdyZWVdOworICBpbnQgaW52ZXJzZURlbm9taW5hdG9yTGVhZGluZ1Rlcm0gPSBbc2VsZi5maWVsZCBpbnZlcnNlOmRlbm9taW5hdG9yTGVhZGluZ1Rlcm1dOworCisgIHdoaWxlIChbcmVtYWluZGVyIGRlZ3JlZV0gPj0gb3RoZXIuZGVncmVlICYmICFyZW1haW5kZXIuemVybykgeworICAgIGludCBkZWdyZWVEaWZmZXJlbmNlID0gcmVtYWluZGVyLmRlZ3JlZSAtIG90aGVyLmRlZ3JlZTsKKyAgICBpbnQgc2NhbGUgPSBbc2VsZi5maWVsZCBtdWx0aXBseTpbcmVtYWluZGVyIGNvZWZmaWNpZW50OnJlbWFpbmRlci5kZWdyZWVdIGI6aW52ZXJzZURlbm9taW5hdG9yTGVhZGluZ1Rlcm1dOworICAgIFpYTW9kdWx1c1BvbHkgKnRlcm0gPSBbb3RoZXIgbXVsdGlwbHlCeU1vbm9taWFsOmRlZ3JlZURpZmZlcmVuY2UgY29lZmZpY2llbnQ6c2NhbGVdOworICAgIFpYTW9kdWx1c1BvbHkgKml0ZXJhdGlvblF1b3RpZW50ID0gW3NlbGYuZmllbGQgYnVpbGRNb25vbWlhbDpkZWdyZWVEaWZmZXJlbmNlIGNvZWZmaWNpZW50OnNjYWxlXTsKKyAgICBxdW90aWVudCA9IFtxdW90aWVudCBhZGQ6aXRlcmF0aW9uUXVvdGllbnRdOworICAgIHJlbWFpbmRlciA9IFtyZW1haW5kZXIgc3VidHJhY3Q6dGVybV07CisgIH0KKworICByZXR1cm4gQFtxdW90aWVudCwgcmVtYWluZGVyXTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6OCAqIFtzZWxmIGRlZ3JlZV1dOworICBmb3IgKGludCBkZWdyZWUgPSBbc2VsZiBkZWdyZWVdOyBkZWdyZWUgPj0gMDsgZGVncmVlLS0pIHsKKyAgICBpbnQgY29lZmZpY2llbnQgPSBbc2VsZiBjb2VmZmljaWVudDpkZWdyZWVdOworICAgIGlmIChjb2VmZmljaWVudCAhPSAwKSB7CisgICAgICBpZiAoY29lZmZpY2llbnQgPCAwKSB7CisgICAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAiIC0gIl07CisgICAgICAgIGNvZWZmaWNpZW50ID0gLWNvZWZmaWNpZW50OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKFtyZXN1bHQgbGVuZ3RoXSA+IDApIHsKKyAgICAgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIiArICJdOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoZGVncmVlID09IDAgfHwgY29lZmZpY2llbnQgIT0gMSkgeworICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVkIiwgY29lZmZpY2llbnRdOworICAgICAgfQorICAgICAgaWYgKGRlZ3JlZSAhPSAwKSB7CisgICAgICAgIGlmIChkZWdyZWUgPT0gMSkgeworICAgICAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAieCJdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAieF4iXTsKKyAgICAgICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVkIiwgZGVncmVlXTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9lYy9aWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLmggYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvZWMvWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NWVmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvZWMvWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogUERGNDE3IGVycm9yIGNvcnJlY3Rpb24gaW1wbGVtZW50YXRpb24uCisgKgorICogVGhpcyBleGFtcGxlIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlZWQlRTIlODAlOTNTb2xvbW9uX2Vycm9yX2NvcnJlY3Rpb24jRXhhbXBsZT4KKyAqIGlzIHF1aXRlIHVzZWZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBhbGdvcml0aG0uCisgKi8KKworQGludGVyZmFjZSBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uIDogTlNPYmplY3QKKworLSAoaW50KWRlY29kZTooTlNNdXRhYmxlQXJyYXkgKilyZWNlaXZlZCBudW1FQ0NvZGV3b3JkczooaW50KW51bUVDQ29kZXdvcmRzIGVyYXN1cmVzOihOU0FycmF5ICopZXJhc3VyZXM7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGVjb2Rlci9lYy9aWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uLm0gYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvZWMvWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYzk3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2RlY29kZXIvZWMvWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5tCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWE1vZHVsdXNHRi5oIgorI2ltcG9ydCAiWlhNb2R1bHVzUG9seS5oIgorI2ltcG9ydCAiWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvbi5oIgorCitAaW50ZXJmYWNlIFpYUERGNDE3RUNFcnJvckNvcnJlY3Rpb24gKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhNb2R1bHVzR0YgKmZpZWxkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uCisKKy0gKGlkKWluaXQgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9maWVsZCA9IFtaWE1vZHVsdXNHRiBQREY0MTdfR0ZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGludClkZWNvZGU6KE5TTXV0YWJsZUFycmF5ICopcmVjZWl2ZWQgbnVtRUNDb2Rld29yZHM6KGludCludW1FQ0NvZGV3b3JkcyBlcmFzdXJlczooTlNBcnJheSAqKWVyYXN1cmVzIHsKKyAgaW50IGNvZWZmaWNpZW50c1tyZWNlaXZlZC5jb3VudF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjZWl2ZWQuY291bnQ7IGkrKykgeworICAgIGNvZWZmaWNpZW50c1tpXSA9IFtyZWNlaXZlZFtpXSBpbnRWYWx1ZV07CisgIH0KKyAgWlhNb2R1bHVzUG9seSAqcG9seSA9IFtbWlhNb2R1bHVzUG9seSBhbGxvY10gaW5pdFdpdGhGaWVsZDpzZWxmLmZpZWxkIGNvZWZmaWNpZW50czpjb2VmZmljaWVudHMgY29lZmZpY2llbnRzTGVuOihpbnQpcmVjZWl2ZWQuY291bnRdOworCisgIGludCBTW251bUVDQ29kZXdvcmRzXTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FQ0NvZGV3b3JkczsgaSsrKSB7CisgICAgU1tpXSA9IDA7CisgIH0KKworICBCT09MIGVycm9yID0gTk87CisgIGZvciAoaW50IGkgPSBudW1FQ0NvZGV3b3JkczsgaSA+IDA7IGktLSkgeworICAgIGludCBldmFsID0gW3BvbHkgZXZhbHVhdGVBdDpbc2VsZi5maWVsZCBleHA6aV1dOworICAgIFNbbnVtRUNDb2Rld29yZHMgLSBpXSA9IGV2YWw7CisgICAgaWYgKGV2YWwgIT0gMCkgeworICAgICAgZXJyb3IgPSBZRVM7CisgICAgfQorICB9CisKKyAgaWYgKCFlcnJvcikgeworICAgIHJldHVybiAwOworICB9CisKKyAgWlhNb2R1bHVzUG9seSAqa25vd25FcnJvcnMgPSBzZWxmLmZpZWxkLm9uZTsKKyAgZm9yIChOU051bWJlciAqZXJhc3VyZSBpbiBlcmFzdXJlcykgeworICAgIGludCBiID0gW3NlbGYuZmllbGQgZXhwOihpbnQpcmVjZWl2ZWQuY291bnQgLSAxIC0gW2VyYXN1cmUgaW50VmFsdWVdXTsKKyAgICAvLyBBZGQgKDEgLSBieCkgdGVybToKKyAgICBpbnQgdGVybUNvZWZmaWNpZW50c1syXSA9IHsgW3NlbGYuZmllbGQgc3VidHJhY3Q6MCBiOmJdLCAxIH07CisgICAgWlhNb2R1bHVzUG9seSAqdGVybSA9IFtbWlhNb2R1bHVzUG9seSBhbGxvY10gaW5pdFdpdGhGaWVsZDpzZWxmLmZpZWxkIGNvZWZmaWNpZW50czp0ZXJtQ29lZmZpY2llbnRzIGNvZWZmaWNpZW50c0xlbjoyXTsKKyAgICBrbm93bkVycm9ycyA9IFtrbm93bkVycm9ycyBtdWx0aXBseTp0ZXJtXTsKKyAgfQorCisgIFpYTW9kdWx1c1BvbHkgKnN5bmRyb21lID0gW1taWE1vZHVsdXNQb2x5IGFsbG9jXSBpbml0V2l0aEZpZWxkOnNlbGYuZmllbGQgY29lZmZpY2llbnRzOlMgY29lZmZpY2llbnRzTGVuOm51bUVDQ29kZXdvcmRzXTsKKyAgLy9bc3luZHJvbWUgbXVsdGlwbHk6a25vd25FcnJvcnNdOworCisgIE5TQXJyYXkgKnNpZ21hT21lZ2EgPSBbc2VsZiBydW5FdWNsaWRlYW5BbGdvcml0aG06W3NlbGYuZmllbGQgYnVpbGRNb25vbWlhbDpudW1FQ0NvZGV3b3JkcyBjb2VmZmljaWVudDoxXSBiOnN5bmRyb21lIFI6bnVtRUNDb2Rld29yZHNdOworICBpZiAoIXNpZ21hT21lZ2EpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBaWE1vZHVsdXNQb2x5ICpzaWdtYSA9IHNpZ21hT21lZ2FbMF07CisgIFpYTW9kdWx1c1BvbHkgKm9tZWdhID0gc2lnbWFPbWVnYVsxXTsKKworICAvL3NpZ21hID0gW3NpZ21hIG11bHRpcGx5Omtub3duRXJyb3JzXTsKKworICBOU0FycmF5ICplcnJvckxvY2F0aW9ucyA9IFtzZWxmIGZpbmRFcnJvckxvY2F0aW9uczpzaWdtYV07CisgIGlmICghZXJyb3JMb2NhdGlvbnMpIHJldHVybiBOTzsKKyAgTlNBcnJheSAqZXJyb3JNYWduaXR1ZGVzID0gW3NlbGYgZmluZEVycm9yTWFnbml0dWRlczpvbWVnYSBlcnJvckxvY2F0b3I6c2lnbWEgZXJyb3JMb2NhdGlvbnM6ZXJyb3JMb2NhdGlvbnNdOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgW2Vycm9yTG9jYXRpb25zIGNvdW50XTsgaSsrKSB7CisgICAgaW50IHBvc2l0aW9uID0gKGludClyZWNlaXZlZC5jb3VudCAtIDEgLSBbc2VsZi5maWVsZCBsb2c6W2Vycm9yTG9jYXRpb25zW2ldIGludFZhbHVlXV07CisgICAgaWYgKHBvc2l0aW9uIDwgMCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZWNlaXZlZFtwb3NpdGlvbl0gPSBAKFtzZWxmLmZpZWxkIHN1YnRyYWN0OltyZWNlaXZlZFtwb3NpdGlvbl0gaW50VmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbZXJyb3JNYWduaXR1ZGVzW2ldIGludFZhbHVlXV0pOworICB9CisKKyAgcmV0dXJuIChpbnQpW2Vycm9yTG9jYXRpb25zIGNvdW50XTsKK30KKworLSAoTlNBcnJheSAqKXJ1bkV1Y2xpZGVhbkFsZ29yaXRobTooWlhNb2R1bHVzUG9seSAqKWEgYjooWlhNb2R1bHVzUG9seSAqKWIgUjooaW50KVIgeworICAvLyBBc3N1bWUgYSdzIGRlZ3JlZSBpcyA+PSBiJ3MKKyAgaWYgKGEuZGVncmVlIDwgYi5kZWdyZWUpIHsKKyAgICBaWE1vZHVsdXNQb2x5ICp0ZW1wID0gYTsKKyAgICBhID0gYjsKKyAgICBiID0gdGVtcDsKKyAgfQorCisgIFpYTW9kdWx1c1BvbHkgKnJMYXN0ID0gYTsKKyAgWlhNb2R1bHVzUG9seSAqciA9IGI7CisgIFpYTW9kdWx1c1BvbHkgKnRMYXN0ID0gc2VsZi5maWVsZC56ZXJvOworICBaWE1vZHVsdXNQb2x5ICp0ID0gc2VsZi5maWVsZC5vbmU7CisKKyAgLy8gUnVuIEV1Y2xpZGVhbiBhbGdvcml0aG0gdW50aWwgcidzIGRlZ3JlZSBpcyBsZXNzIHRoYW4gUi8yCisgIHdoaWxlIChyLmRlZ3JlZSA+PSBSIC8gMikgeworICAgIFpYTW9kdWx1c1BvbHkgKnJMYXN0TGFzdCA9IHJMYXN0OworICAgIFpYTW9kdWx1c1BvbHkgKnRMYXN0TGFzdCA9IHRMYXN0OworICAgIHJMYXN0ID0gcjsKKyAgICB0TGFzdCA9IHQ7CisKKyAgICAvLyBEaXZpZGUgckxhc3RMYXN0IGJ5IHJMYXN0LCB3aXRoIHF1b3RpZW50IGluIHEgYW5kIHJlbWFpbmRlciBpbiByCisgICAgaWYgKHJMYXN0Lnplcm8pIHsKKyAgICAgIC8vIE9vcHMsIEV1Y2xpZGVhbiBhbGdvcml0aG0gYWxyZWFkeSB0ZXJtaW5hdGVkPworICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgciA9IHJMYXN0TGFzdDsKKyAgICBaWE1vZHVsdXNQb2x5ICpxID0gc2VsZi5maWVsZC56ZXJvOworICAgIGludCBkZW5vbWluYXRvckxlYWRpbmdUZXJtID0gW3JMYXN0IGNvZWZmaWNpZW50OnJMYXN0LmRlZ3JlZV07CisgICAgaW50IGRsdEludmVyc2UgPSBbc2VsZi5maWVsZCBpbnZlcnNlOmRlbm9taW5hdG9yTGVhZGluZ1Rlcm1dOworICAgIHdoaWxlIChyLmRlZ3JlZSA+PSByTGFzdC5kZWdyZWUgJiYgIXIuemVybykgeworICAgICAgaW50IGRlZ3JlZURpZmYgPSByLmRlZ3JlZSAtIHJMYXN0LmRlZ3JlZTsKKyAgICAgIGludCBzY2FsZSA9IFtzZWxmLmZpZWxkIG11bHRpcGx5OltyIGNvZWZmaWNpZW50OnIuZGVncmVlXSBiOmRsdEludmVyc2VdOworICAgICAgcSA9IFtxIGFkZDpbc2VsZi5maWVsZCBidWlsZE1vbm9taWFsOmRlZ3JlZURpZmYgY29lZmZpY2llbnQ6c2NhbGVdXTsKKyAgICAgIHIgPSBbciBzdWJ0cmFjdDpbckxhc3QgbXVsdGlwbHlCeU1vbm9taWFsOmRlZ3JlZURpZmYgY29lZmZpY2llbnQ6c2NhbGVdXTsKKyAgICB9CisKKyAgICB0ID0gW1tbcSBtdWx0aXBseTp0TGFzdF0gc3VidHJhY3Q6dExhc3RMYXN0XSBuZWdhdGl2ZV07CisgIH0KKworICBpbnQgc2lnbWFUaWxkZUF0WmVybyA9IFt0IGNvZWZmaWNpZW50OjBdOworICBpZiAoc2lnbWFUaWxkZUF0WmVybyA9PSAwKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIGludCBpbnZlcnNlID0gW3NlbGYuZmllbGQgaW52ZXJzZTpzaWdtYVRpbGRlQXRaZXJvXTsKKyAgWlhNb2R1bHVzUG9seSAqc2lnbWEgPSBbdCBtdWx0aXBseVNjYWxhcjppbnZlcnNlXTsKKyAgWlhNb2R1bHVzUG9seSAqb21lZ2EgPSBbciBtdWx0aXBseVNjYWxhcjppbnZlcnNlXTsKKyAgcmV0dXJuIEBbc2lnbWEsIG9tZWdhXTsKK30KKworLSAoTlNBcnJheSAqKWZpbmRFcnJvckxvY2F0aW9uczooWlhNb2R1bHVzUG9seSAqKWVycm9yTG9jYXRvciB7CisgIC8vIFRoaXMgaXMgYSBkaXJlY3QgYXBwbGljYXRpb24gb2YgQ2hpZW4ncyBzZWFyY2gKKyAgaW50IG51bUVycm9ycyA9IGVycm9yTG9jYXRvci5kZWdyZWU7CisgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bnVtRXJyb3JzXTsKKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBzZWxmLmZpZWxkLnNpemUgJiYgcmVzdWx0LmNvdW50IDwgbnVtRXJyb3JzOyBpKyspIHsKKyAgICBpZiAoW2Vycm9yTG9jYXRvciBldmFsdWF0ZUF0OmldID09IDApIHsKKyAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OkAoW3NlbGYuZmllbGQgaW52ZXJzZTppXSldOworICAgIH0KKyAgfQorICBpZiAocmVzdWx0LmNvdW50ICE9IG51bUVycm9ycykgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNBcnJheSAqKWZpbmRFcnJvck1hZ25pdHVkZXM6KFpYTW9kdWx1c1BvbHkgKillcnJvckV2YWx1YXRvciBlcnJvckxvY2F0b3I6KFpYTW9kdWx1c1BvbHkgKillcnJvckxvY2F0b3IgZXJyb3JMb2NhdGlvbnM6KE5TQXJyYXkgKillcnJvckxvY2F0aW9ucyB7CisgIGludCBlcnJvckxvY2F0b3JEZWdyZWUgPSBlcnJvckxvY2F0b3IuZGVncmVlOworICBpbnQgZm9ybWFsRGVyaXZhdGl2ZUNvZWZmaWNpZW50c1tlcnJvckxvY2F0b3JEZWdyZWVdOworICBmb3IgKGludCBpID0gMDsgaSA8IGVycm9yTG9jYXRvckRlZ3JlZTsgaSsrKSB7CisgICAgZm9ybWFsRGVyaXZhdGl2ZUNvZWZmaWNpZW50c1tpXSA9IDA7CisgIH0KKworICBmb3IgKGludCBpID0gMTsgaSA8PSBlcnJvckxvY2F0b3JEZWdyZWU7IGkrKykgeworICAgIGZvcm1hbERlcml2YXRpdmVDb2VmZmljaWVudHNbZXJyb3JMb2NhdG9yRGVncmVlIC0gaV0gPQorICAgICAgW3NlbGYuZmllbGQgbXVsdGlwbHk6aSBiOltlcnJvckxvY2F0b3IgY29lZmZpY2llbnQ6aV1dOworICB9CisgIFpYTW9kdWx1c1BvbHkgKmZvcm1hbERlcml2YXRpdmUgPSBbW1pYTW9kdWx1c1BvbHkgYWxsb2NdIGluaXRXaXRoRmllbGQ6c2VsZi5maWVsZCBjb2VmZmljaWVudHM6Zm9ybWFsRGVyaXZhdGl2ZUNvZWZmaWNpZW50cyBjb2VmZmljaWVudHNMZW46ZXJyb3JMb2NhdG9yRGVncmVlXTsKKworICAvLyBUaGlzIGlzIGRpcmVjdGx5IGFwcGx5aW5nIEZvcm5leSdzIEZvcm11bGEKKyAgaW50IHMgPSAoaW50KWVycm9yTG9jYXRpb25zLmNvdW50OworICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnNdOworICBmb3IgKGludCBpID0gMDsgaSA8IHM7IGkrKykgeworICAgIGludCB4aUludmVyc2UgPSBbc2VsZi5maWVsZCBpbnZlcnNlOltlcnJvckxvY2F0aW9uc1tpXSBpbnRWYWx1ZV1dOworICAgIGludCBudW1lcmF0b3IgPSBbc2VsZi5maWVsZCBzdWJ0cmFjdDowIGI6W2Vycm9yRXZhbHVhdG9yIGV2YWx1YXRlQXQ6eGlJbnZlcnNlXV07CisgICAgaW50IGRlbm9taW5hdG9yID0gW3NlbGYuZmllbGQgaW52ZXJzZTpbZm9ybWFsRGVyaXZhdGl2ZSBldmFsdWF0ZUF0OnhpSW52ZXJzZV1dOworICAgIFtyZXN1bHQgYWRkT2JqZWN0OkAoW3NlbGYuZmllbGQgbXVsdGlwbHk6bnVtZXJhdG9yIGI6ZGVub21pbmF0b3JdKV07CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9kZXRlY3Rvci9aWFBERjQxN0RldGVjdG9yLmggYi9aWGluZ09iakMvcGRmNDE3L2RldGVjdG9yL1pYUERGNDE3RGV0ZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjRhNzRiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZXRlY3Rvci9aWFBERjQxN0RldGVjdG9yLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBFbmNhcHN1bGF0ZXMgbG9naWMgdGhhdCBjYW4gZGV0ZWN0IGEgUERGNDE3IENvZGUgaW4gYW4gaW1hZ2UsIGV2ZW4gaWYgdGhlCisgKiBQREY0MTcgQ29kZSBpcyByb3RhdGVkIG9yIHNrZXdlZCwgb3IgcGFydGlhbGx5IG9ic2N1cmVkLgorICovCisKK0BjbGFzcyBaWEJpbmFyeUJpdG1hcCwgWlhCaXRBcnJheSwgWlhCaXRNYXRyaXgsIFpYRGVjb2RlSGludHMsIFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQ7CisKK0BpbnRlcmZhY2UgWlhQREY0MTdEZXRlY3RvciA6IE5TT2JqZWN0CisKKysgKFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQgKilkZXRlY3Q6KFpYQmluYXJ5Qml0bWFwICopaW1hZ2UgaGludHM6KFpYRGVjb2RlSGludHMgKiloaW50cyBtdWx0aXBsZTooQk9PTCltdWx0aXBsZSBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKysgKHZvaWQpcm90YXRlMTgwOihaWEJpdE1hdHJpeCAqKWJpdE1hdHJpeDsKKysgKFpYQml0QXJyYXkgKiltaXJyb3I6KFpYQml0QXJyYXkgKilpbnB1dCByZXN1bHQ6KFpYQml0QXJyYXkgKilyZXN1bHQ7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGV0ZWN0b3IvWlhQREY0MTdEZXRlY3Rvci5tIGIvWlhpbmdPYmpDL3BkZjQxNy9kZXRlY3Rvci9aWFBERjQxN0RldGVjdG9yLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExNDA3MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZGV0ZWN0b3IvWlhQREY0MTdEZXRlY3Rvci5tCkBAIC0wLDAgKzEsMzQ5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhCaW5hcnlCaXRtYXAuaCIKKyNpbXBvcnQgIlpYRGVjb2RlSGludHMuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEdyaWRTYW1wbGVyLmgiCisjaW1wb3J0ICJaWE1hdGhVdGlscy5oIgorI2ltcG9ydCAiWlhQREY0MTdEZXRlY3Rvci5oIgorI2ltcG9ydCAiWlhQREY0MTdEZXRlY3RvclJlc3VsdC5oIgorI2ltcG9ydCAiWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybS5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludC5oIgorCitjb25zdCBpbnQgSU5ERVhFU19QQVRURVJOX0xFTiA9IDQ7Citjb25zdCBpbnQgSU5ERVhFU19TVEFSVF9QQVRURVJOW0lOREVYRVNfUEFUVEVSTl9MRU5dID0gezAsIDQsIDEsIDV9OworY29uc3QgaW50IElOREVYRVNfU1RPUF9QQVRURVJOW0lOREVYRVNfUEFUVEVSTl9MRU5dID0gezYsIDIsIDcsIDN9OworaW50IGNvbnN0IFBERjQxN19JTlRFR0VSX01BVEhfU0hJRlQgPSA4OworaW50IGNvbnN0IFBERjQxN19QQVRURVJOX01BVENIX1JFU1VMVF9TQ0FMRV9GQUNUT1IgPSAxIDw8IFBERjQxN19JTlRFR0VSX01BVEhfU0hJRlQ7CitpbnQgY29uc3QgTUFYX0FWR19WQVJJQU5DRSA9IChpbnQpIChQREY0MTdfUEFUVEVSTl9NQVRDSF9SRVNVTFRfU0NBTEVfRkFDVE9SICogMC40MmYpOworaW50IGNvbnN0IE1BWF9JTkRJVklEVUFMX1ZBUklBTkNFID0gKGludCkgKFBERjQxN19QQVRURVJOX01BVENIX1JFU1VMVF9TQ0FMRV9GQUNUT1IgKiAwLjhmKTsKKworLy8gQiBTIEIgUyBCIFMgQiBTIEJhci9TcGFjZSBwYXR0ZXJuCisvLyAxMTExMTExMSAwIDEgMCAxIDAgMSAwMDAKK2ludCBjb25zdCBQREY0MTdfU1RBUlRfUEFUVEVSTl9MRU4gPSA4OworaW50IGNvbnN0IFBERjQxN19TVEFSVF9QQVRURVJOW1BERjQxN19TVEFSVF9QQVRURVJOX0xFTl0gPSB7OCwgMSwgMSwgMSwgMSwgMSwgMSwgM307CisKKy8vIDExMTExMTEgMCAxIDAwMCAxIDAgMSAwMCAxCitpbnQgY29uc3QgUERGNDE3X1NUT1BfUEFUVEVSTl9MRU4gPSA5OworaW50IGNvbnN0IFBERjQxN19TVE9QX1BBVFRFUk5bUERGNDE3X1NUT1BfUEFUVEVSTl9MRU5dID0gezcsIDEsIDEsIDMsIDEsIDEsIDEsIDIsIDF9OworaW50IGNvbnN0IE1BWF9QSVhFTF9EUklGVCA9IDM7CitpbnQgY29uc3QgTUFYX1BBVFRFUk5fRFJJRlQgPSA1OworLy8gaWYgd2Ugc2V0IHRoZSB2YWx1ZSB0b28gbG93LCB0aGVuIHdlIGRvbid0IGRldGVjdCB0aGUgY29ycmVjdCBoZWlnaHQgb2YgdGhlIGJhciBpZiB0aGUgc3RhcnQgcGF0dGVybnMgYXJlIGRhbWFnZWQuCisvLyBpZiB3ZSBzZXQgdGhlIHZhbHVlIHRvbyBoaWdoLCB0aGVuIHdlIG1pZ2h0IGRldGVjdCB0aGUgc3RhcnQgcGF0dGVybiBmcm9tIGEgbmVpZ2hib3IgYmFyY29kZS4KK2ludCBjb25zdCBTS0lQUEVEX1JPV19DT1VOVF9NQVggPSAyNTsKKy8vIEEgUERGNDcxIGJhcmNvZGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgMyByb3dzLCB3aXRoIGVhY2ggcm93IGJlaW5nID49IDMgdGltZXMgdGhlIG1vZHVsZSB3aWR0aC4gVGhlcmVmb3JlIGl0IHNob3VsZCBiZSBhdCBsZWFzdAorLy8gOSBwaXhlbHMgdGFsbC4gVG8gYmUgY29uc2VydmF0aXZlLCB3ZSB1c2UgYWJvdXQgaGFsZiB0aGUgc2l6ZSB0byBlbnN1cmUgd2UgZG9uJ3QgbWlzcyBpdC4KK2ludCBjb25zdCBST1dfU1RFUCA9IDU7CitpbnQgY29uc3QgQkFSQ09ERV9NSU5fSEVJR0hUID0gMTA7CisKK0BpbXBsZW1lbnRhdGlvbiBaWFBERjQxN0RldGVjdG9yCisKKy8qKgorICogRGV0ZWN0cyBhIFBERjQxNyBDb2RlIGluIGFuIGltYWdlLiBPbmx5IGNoZWNrcyAwIGFuZCAxODAgZGVncmVlIHJvdGF0aW9ucy4KKyAqLworKyAoWlhQREY0MTdEZXRlY3RvclJlc3VsdCAqKWRldGVjdDooWlhCaW5hcnlCaXRtYXAgKilpbWFnZSBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIG11bHRpcGxlOihCT09MKW11bHRpcGxlIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgLy8gVE9ETyBkZXRlY3Rpb24gaW1wcm92ZW1lbnQsIHRyeUhhcmRlciBjb3VsZCB0cnkgc2V2ZXJhbCBkaWZmZXJlbnQgbHVtaW5hbmNlIHRocmVzaG9sZHMvYmxhY2twb2ludHMgb3IgZXZlbgorICAvLyBkaWZmZXJlbnQgYmluYXJpemVycworICAvL2Jvb2xlYW4gdHJ5SGFyZGVyID0gaGludHMgIT0gbnVsbCAmJiBoaW50cy5jb250YWluc0tleShEZWNvZGVIaW50VHlwZS5UUllfSEFSREVSKTsKKworICBaWEJpdE1hdHJpeCAqYml0TWF0cml4ID0gW2ltYWdlIGJsYWNrTWF0cml4V2l0aEVycm9yOmVycm9yXTsKKworICBOU0FycmF5ICpiYXJjb2RlQ29vcmRpbmF0ZXMgPSBbc2VsZiBkZXRlY3Q6bXVsdGlwbGUgYml0TWF0cml4OmJpdE1hdHJpeCBlcnJvcjplcnJvcl07CisgIGlmICghYmFyY29kZUNvb3JkaW5hdGVzKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBpZiAoW2JhcmNvZGVDb29yZGluYXRlcyBjb3VudF0gPT0gMCkgeworICAgIFtbc2VsZiBjbGFzc10gcm90YXRlMTgwOmJpdE1hdHJpeF07CisgICAgYmFyY29kZUNvb3JkaW5hdGVzID0gW3NlbGYgZGV0ZWN0Om11bHRpcGxlIGJpdE1hdHJpeDpiaXRNYXRyaXggZXJyb3I6ZXJyb3JdOworICAgIGlmICghYmFyY29kZUNvb3JkaW5hdGVzKSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgfQorICByZXR1cm4gW1taWFBERjQxN0RldGVjdG9yUmVzdWx0IGFsbG9jXSBpbml0V2l0aEJpdHM6Yml0TWF0cml4IHBvaW50czpiYXJjb2RlQ29vcmRpbmF0ZXNdOworfQorCisvKioKKyAqIERldGVjdHMgUERGNDE3IGNvZGVzIGluIGFuIGltYWdlLiBPbmx5IGNoZWNrcyAwIGRlZ3JlZSByb3RhdGlvbgorICovCisrIChOU0FycmF5ICopZGV0ZWN0OihCT09MKW11bHRpcGxlIGJpdE1hdHJpeDooWlhCaXRNYXRyaXggKiliaXRNYXRyaXggZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBOU011dGFibGVBcnJheSAqYmFyY29kZUNvb3JkaW5hdGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgaW50IHJvdyA9IDA7CisgIGludCBjb2x1bW4gPSAwOworICBCT09MIGZvdW5kQmFyY29kZUluUm93ID0gTk87CisgIHdoaWxlIChyb3cgPCBiaXRNYXRyaXguaGVpZ2h0KSB7CisgICAgTlNBcnJheSAqdmVydGljZXMgPSBbc2VsZiBmaW5kVmVydGljZXM6Yml0TWF0cml4IHN0YXJ0Um93OnJvdyBzdGFydENvbHVtbjpjb2x1bW5dOworCisgICAgaWYgKHZlcnRpY2VzWzBdID09IFtOU051bGwgbnVsbF0gJiYgdmVydGljZXNbM10gPT0gW05TTnVsbCBudWxsXSkgeworICAgICAgaWYgKCFmb3VuZEJhcmNvZGVJblJvdykgeworICAgICAgICAvLyB3ZSBkaWRuJ3QgZmluZCBhbnkgYmFyY29kZSBzbyB0aGF0J3MgdGhlIGVuZCBvZiBzZWFyY2hpbmcKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICAvLyB3ZSBkaWRuJ3QgZmluZCBhIGJhcmNvZGUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGNvbHVtbiBhbmQgcm93LiBUcnkgYWdhaW4gZnJvbSB0aGUgZmlyc3QgY29sdW1uIGFuZCBzbGlnaHRseQorICAgICAgLy8gYmVsb3cgdGhlIGxvd2VzdCBiYXJjb2RlIHdlIGZvdW5kIHNvIGZhci4KKyAgICAgIGZvdW5kQmFyY29kZUluUm93ID0gTk87CisgICAgICBjb2x1bW4gPSAwOworICAgICAgZm9yIChOU0FycmF5ICpiYXJjb2RlQ29vcmRpbmF0ZSBpbiBiYXJjb2RlQ29vcmRpbmF0ZXMpIHsKKyAgICAgICAgaWYgKGJhcmNvZGVDb29yZGluYXRlWzFdICE9IFtOU051bGwgbnVsbF0pIHsKKyAgICAgICAgICByb3cgPSBNQVgocm93LCAoaW50KSBbKFpYUmVzdWx0UG9pbnQgKiliYXJjb2RlQ29vcmRpbmF0ZVsxXSB5XSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJhcmNvZGVDb29yZGluYXRlWzNdICE9IFtOU051bGwgbnVsbF0pIHsKKyAgICAgICAgICByb3cgPSBNQVgocm93LCAoaW50KSBbKFpYUmVzdWx0UG9pbnQgKiliYXJjb2RlQ29vcmRpbmF0ZVszXSB5XSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJvdyArPSBST1dfU1RFUDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBmb3VuZEJhcmNvZGVJblJvdyA9IFlFUzsKKyAgICBbYmFyY29kZUNvb3JkaW5hdGVzIGFkZE9iamVjdDp2ZXJ0aWNlc107CisgICAgaWYgKCFtdWx0aXBsZSkgeworICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgcmlnaHQgcm93IGluZGljYXRvciBjb2x1bW4sIHRoZW4gY29udGludWUgdGhlIHNlYXJjaCBmb3IgdGhlIG5leHQgYmFyY29kZSBhZnRlciB0aGUKKyAgICAvLyBzdGFydCBwYXR0ZXJuIG9mIHRoZSBiYXJjb2RlIGp1c3QgZm91bmQuCisgICAgaWYgKHZlcnRpY2VzWzJdICE9IFtOU051bGwgbnVsbF0pIHsKKyAgICAgIGNvbHVtbiA9IChpbnQpIFsoWlhSZXN1bHRQb2ludCAqKXZlcnRpY2VzWzJdIHhdOworICAgICAgcm93ID0gKGludCkgWyhaWFJlc3VsdFBvaW50ICopdmVydGljZXNbMl0geV07CisgICAgfSBlbHNlIHsKKyAgICAgIGNvbHVtbiA9IChpbnQpIFsoWlhSZXN1bHRQb2ludCAqKXZlcnRpY2VzWzRdIHhdOworICAgICAgcm93ID0gKGludCkgWyhaWFJlc3VsdFBvaW50ICopdmVydGljZXNbNF0geV07CisgICAgfQorICB9CisgIHJldHVybiBiYXJjb2RlQ29vcmRpbmF0ZXM7Cit9CisKKy8vIFRoZSBmb2xsb3dpbmcgY291bGQgZ28gdG8gdGhlIEJpdE1hdHJpeCBjbGFzcyAobWF5YmUgaW4gYSBtb3JlIGVmZmljaWVudCB2ZXJzaW9uIHVzaW5nIHRoZSBCaXRNYXRyaXggaW50ZXJuYWwKKy8vIGRhdGEgc3RydWN0dXJlcykKKy8qKgorICogUm90YXRlcyBhIGJpdCBtYXRyaXggYnkgMTgwIGRlZ3JlZXMuCisgKi8KKysgKHZvaWQpcm90YXRlMTgwOihaWEJpdE1hdHJpeCAqKWJpdE1hdHJpeCB7CisgIGludCB3aWR0aCA9IGJpdE1hdHJpeC53aWR0aDsKKyAgaW50IGhlaWdodCA9IGJpdE1hdHJpeC5oZWlnaHQ7CisgIFpYQml0QXJyYXkgKmZpcnN0Um93Qml0QXJyYXkgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRXaXRoU2l6ZTp3aWR0aF07CisgIFpYQml0QXJyYXkgKnNlY29uZFJvd0JpdEFycmF5ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6d2lkdGhdOworICBaWEJpdEFycmF5ICp0bXBCaXRBcnJheSA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdFdpdGhTaXplOndpZHRoXTsKKyAgZm9yIChpbnQgeSA9IDA7IHkgPCAoaGVpZ2h0ICsgMSkgPj4gMTsgeSsrKSB7CisgICAgZmlyc3RSb3dCaXRBcnJheSA9IFtiaXRNYXRyaXggcm93QXRZOnkgcm93OmZpcnN0Um93Qml0QXJyYXldOworICAgIFtiaXRNYXRyaXggc2V0Um93QXRZOnkgcm93OltzZWxmIG1pcnJvcjpbYml0TWF0cml4IHJvd0F0WTpoZWlnaHQgLSAxIC0geSByb3c6c2Vjb25kUm93Qml0QXJyYXldIHJlc3VsdDp0bXBCaXRBcnJheV1dOworICAgIFtiaXRNYXRyaXggc2V0Um93QXRZOmhlaWdodCAtIDEgLSB5IHJvdzpbc2VsZiBtaXJyb3I6Zmlyc3RSb3dCaXRBcnJheSByZXN1bHQ6dG1wQml0QXJyYXldXTsKKyAgfQorfQorCisvKioKKyAqIENvcGllcyB0aGUgYml0cyBmcm9tIHRoZSBpbnB1dCB0byB0aGUgcmVzdWx0IEJpdEFycmF5IGluIHJldmVyc2Ugb3JkZXIKKyAqLworKyAoWlhCaXRBcnJheSAqKW1pcnJvcjooWlhCaXRBcnJheSAqKWlucHV0IHJlc3VsdDooWlhCaXRBcnJheSAqKXJlc3VsdCB7CisgIFtyZXN1bHQgY2xlYXJdOworICBpbnQgc2l6ZSA9IGlucHV0LnNpemU7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgaWYgKFtpbnB1dCBnZXQ6aV0pIHsKKyAgICAgIFtyZXN1bHQgc2V0OnNpemUgLSAxIC0gaV07CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogTG9jYXRlIHRoZSB2ZXJ0aWNlcyBhbmQgdGhlIGNvZGV3b3JkcyBhcmVhIG9mIGEgYmxhY2sgYmxvYiB1c2luZyB0aGUgU3RhcnQKKyAqIGFuZCBTdG9wIHBhdHRlcm5zIGFzIGxvY2F0b3JzLgorICoKKyAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgdmVydGljZXM6CisgKiB2ZXJ0aWNlc1swXSB4LCB5IHRvcCBsZWZ0IGJhcmNvZGUKKyAqIHZlcnRpY2VzWzFdIHgsIHkgYm90dG9tIGxlZnQgYmFyY29kZQorICogdmVydGljZXNbMl0geCwgeSB0b3AgcmlnaHQgYmFyY29kZQorICogdmVydGljZXNbM10geCwgeSBib3R0b20gcmlnaHQgYmFyY29kZQorICogdmVydGljZXNbNF0geCwgeSB0b3AgbGVmdCBjb2Rld29yZCBhcmVhCisgKiB2ZXJ0aWNlc1s1XSB4LCB5IGJvdHRvbSBsZWZ0IGNvZGV3b3JkIGFyZWEKKyAqIHZlcnRpY2VzWzZdIHgsIHkgdG9wIHJpZ2h0IGNvZGV3b3JkIGFyZWEKKyAqIHZlcnRpY2VzWzddIHgsIHkgYm90dG9tIHJpZ2h0IGNvZGV3b3JkIGFyZWEKKyAqLworKyAoTlNNdXRhYmxlQXJyYXkgKilmaW5kVmVydGljZXM6KFpYQml0TWF0cml4ICopbWF0cml4IHN0YXJ0Um93OihpbnQpc3RhcnRSb3cgc3RhcnRDb2x1bW46KGludClzdGFydENvbHVtbiB7CisgIGludCBoZWlnaHQgPSBtYXRyaXguaGVpZ2h0OworICBpbnQgd2lkdGggPSBtYXRyaXgud2lkdGg7CisKKyAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTo4XTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNOdWxsIG51bGxdXTsKKyAgfQorICBbc2VsZiBjb3B5VG9SZXN1bHQ6cmVzdWx0IHRtcFJlc3VsdDpbc2VsZiBmaW5kUm93c1dpdGhQYXR0ZXJuOm1hdHJpeCBoZWlnaHQ6aGVpZ2h0IHdpZHRoOndpZHRoIHN0YXJ0Um93OnN0YXJ0Um93IHN0YXJ0Q29sdW1uOnN0YXJ0Q29sdW1uIHBhdHRlcm46KGludCAqKVBERjQxN19TVEFSVF9QQVRURVJOIHBhdHRlcm5MZW46UERGNDE3X1NUQVJUX1BBVFRFUk5fTEVOXSBkZXN0aW5hdGlvbkluZGV4ZXM6KGludCAqKUlOREVYRVNfU1RBUlRfUEFUVEVSTl07CisKKyAgaWYgKHJlc3VsdFs0XSAhPSBbTlNOdWxsIG51bGxdKSB7CisgICAgc3RhcnRDb2x1bW4gPSAoaW50KSBbKFpYUmVzdWx0UG9pbnQgKilyZXN1bHRbNF0geF07CisgICAgc3RhcnRSb3cgPSAoaW50KSBbKFpYUmVzdWx0UG9pbnQgKilyZXN1bHRbNF0geV07CisgIH0KKyAgW3NlbGYgY29weVRvUmVzdWx0OnJlc3VsdCB0bXBSZXN1bHQ6W3NlbGYgZmluZFJvd3NXaXRoUGF0dGVybjptYXRyaXggaGVpZ2h0OmhlaWdodCB3aWR0aDp3aWR0aCBzdGFydFJvdzpzdGFydFJvdyBzdGFydENvbHVtbjpzdGFydENvbHVtbiBwYXR0ZXJuOihpbnQgKilQREY0MTdfU1RPUF9QQVRURVJOIHBhdHRlcm5MZW46UERGNDE3X1NUT1BfUEFUVEVSTl9MRU5dIGRlc3RpbmF0aW9uSW5kZXhlczooaW50ICopSU5ERVhFU19TVE9QX1BBVFRFUk5dOworICByZXR1cm4gcmVzdWx0OworfQorCisrICh2b2lkKWNvcHlUb1Jlc3VsdDooTlNNdXRhYmxlQXJyYXkgKilyZXN1bHQgdG1wUmVzdWx0OihOU011dGFibGVBcnJheSAqKXRtcFJlc3VsdCBkZXN0aW5hdGlvbkluZGV4ZXM6KGludCAqKWRlc3RpbmF0aW9uSW5kZXhlcyB7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhFU19QQVRURVJOX0xFTjsgaSsrKSB7CisgICAgcmVzdWx0W2Rlc3RpbmF0aW9uSW5kZXhlc1tpXV0gPSB0bXBSZXN1bHRbaV07CisgIH0KK30KKworKyAoTlNNdXRhYmxlQXJyYXkgKilmaW5kUm93c1dpdGhQYXR0ZXJuOihaWEJpdE1hdHJpeCAqKW1hdHJpeCBoZWlnaHQ6KGludCloZWlnaHQgd2lkdGg6KGludCl3aWR0aCBzdGFydFJvdzooaW50KXN0YXJ0Um93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb2x1bW46KGludClzdGFydENvbHVtbiBwYXR0ZXJuOihpbnQgKilwYXR0ZXJuIHBhdHRlcm5MZW46KGludClwYXR0ZXJuTGVuIHsKKyAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TTnVsbCBudWxsXV07CisgIH0KKyAgQk9PTCBmb3VuZCA9IE5POworICBpbnQgY291bnRlcnNbcGF0dGVybkxlbl07CisgIG1lbXNldChjb3VudGVycywgMCwgcGF0dGVybkxlbiAqIHNpemVvZihpbnQpKTsKKyAgZm9yICg7IHN0YXJ0Um93IDwgaGVpZ2h0OyBzdGFydFJvdyArPSBST1dfU1RFUCkgeworICAgIE5TUmFuZ2UgbG9jID0gW3NlbGYgZmluZEd1YXJkUGF0dGVybjptYXRyaXggY29sdW1uOnN0YXJ0Q29sdW1uIHJvdzpzdGFydFJvdyB3aWR0aDp3aWR0aCB3aGl0ZUZpcnN0OmZhbHNlIHBhdHRlcm46cGF0dGVybiBwYXR0ZXJuTGVuOnBhdHRlcm5MZW4gY291bnRlcnM6Y291bnRlcnNdOworICAgIGlmIChsb2MubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgeworICAgICAgd2hpbGUgKHN0YXJ0Um93ID4gMCkgeworICAgICAgICBOU1JhbmdlIHByZXZpb3VzUm93TG9jID0gW3NlbGYgZmluZEd1YXJkUGF0dGVybjptYXRyaXggY29sdW1uOnN0YXJ0Q29sdW1uIHJvdzotLXN0YXJ0Um93IHdpZHRoOndpZHRoIHdoaXRlRmlyc3Q6ZmFsc2UgcGF0dGVybjpwYXR0ZXJuIHBhdHRlcm5MZW46cGF0dGVybkxlbiBjb3VudGVyczpjb3VudGVyc107CisgICAgICAgIGlmIChwcmV2aW91c1Jvd0xvYy5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSB7CisgICAgICAgICAgbG9jID0gcHJldmlvdXNSb3dMb2M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc3RhcnRSb3crKzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmVzdWx0WzBdID0gW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6bG9jLmxvY2F0aW9uIHk6c3RhcnRSb3ddOworICAgICAgcmVzdWx0WzFdID0gW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6TlNNYXhSYW5nZShsb2MpIHk6c3RhcnRSb3ddOworICAgICAgZm91bmQgPSBZRVM7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaW50IHN0b3BSb3cgPSBzdGFydFJvdyArIDE7CisgIC8vIExhc3Qgcm93IG9mIHRoZSBjdXJyZW50IHN5bWJvbCB0aGF0IGNvbnRhaW5zIHBhdHRlcm4KKyAgaWYgKGZvdW5kKSB7CisgICAgaW50IHNraXBwZWRSb3dDb3VudCA9IDA7CisgICAgTlNSYW5nZSBwcmV2aW91c1Jvd0xvYyA9IE5TTWFrZVJhbmdlKChOU1VJbnRlZ2VyKSBbKFpYUmVzdWx0UG9pbnQgKilyZXN1bHRbMF0geF0sICgoTlNVSW50ZWdlcilbKFpYUmVzdWx0UG9pbnQgKilyZXN1bHRbMV0geF0pIC0gKChOU1VJbnRlZ2VyKVsoWlhSZXN1bHRQb2ludCAqKXJlc3VsdFswXSB4XSkpOworICAgIGZvciAoOyBzdG9wUm93IDwgaGVpZ2h0OyBzdG9wUm93KyspIHsKKyAgICAgIE5TUmFuZ2UgbG9jID0gW3NlbGYgZmluZEd1YXJkUGF0dGVybjptYXRyaXggY29sdW1uOihpbnQpcHJldmlvdXNSb3dMb2MubG9jYXRpb24gcm93OnN0b3BSb3cgd2lkdGg6d2lkdGggd2hpdGVGaXJzdDpOTyBwYXR0ZXJuOnBhdHRlcm4gcGF0dGVybkxlbjpwYXR0ZXJuTGVuIGNvdW50ZXJzOmNvdW50ZXJzXTsKKyAgICAgIC8vIGEgZm91bmQgcGF0dGVybiBpcyBvbmx5IGNvbnNpZGVyZWQgdG8gYmVsb25nIHRvIHRoZSBzYW1lIGJhcmNvZGUgaWYgdGhlIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zCisgICAgICAvLyBkb24ndCBkaWZmZXIgdG9vIG11Y2guIFBhdHRlcm4gZHJpZnQgc2hvdWxkIGJlIG5vdCBiaWdnZXIgdGhhbiB0d28gZm9yIGNvbnNlY3V0aXZlIHJvd3MuIFdpdGgKKyAgICAgIC8vIGEgaGlnaGVyIG51bWJlciBvZiBza2lwcGVkIHJvd3MgZHJpZnQgY291bGQgYmUgbGFyZ2VyLiBUbyBrZWVwIGl0IHNpbXBsZSBmb3Igbm93LCB3ZSBhbGxvdyBhIHNsaWdodGx5CisgICAgICAvLyBsYXJnZXIgZHJpZnQgYW5kIGRvbid0IGNoZWNrIGZvciBza2lwcGVkIHJvd3MuCisgICAgICBpZiAobG9jLmxvY2F0aW9uICE9IE5TTm90Rm91bmQgJiYKKyAgICAgICAgICBBQlMoKGludClwcmV2aW91c1Jvd0xvYy5sb2NhdGlvbiAtIChpbnQpbG9jLmxvY2F0aW9uKSA8IE1BWF9QQVRURVJOX0RSSUZUICYmCisgICAgICAgICAgQUJTKChpbnQpTlNNYXhSYW5nZShwcmV2aW91c1Jvd0xvYykgLSAoaW50KU5TTWF4UmFuZ2UobG9jKSkgPCBNQVhfUEFUVEVSTl9EUklGVCkgeworICAgICAgICBwcmV2aW91c1Jvd0xvYyA9IGxvYzsKKyAgICAgICAgc2tpcHBlZFJvd0NvdW50ID0gMDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChza2lwcGVkUm93Q291bnQgPiBTS0lQUEVEX1JPV19DT1VOVF9NQVgpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBza2lwcGVkUm93Q291bnQrKzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBzdG9wUm93IC09IHNraXBwZWRSb3dDb3VudCArIDE7CisgICAgcmVzdWx0WzJdID0gW1taWFJlc3VsdFBvaW50IGFsbG9jXSBpbml0V2l0aFg6cHJldmlvdXNSb3dMb2MubG9jYXRpb24geTpzdG9wUm93XTsKKyAgICByZXN1bHRbM10gPSBbW1pYUmVzdWx0UG9pbnQgYWxsb2NdIGluaXRXaXRoWDpOU01heFJhbmdlKHByZXZpb3VzUm93TG9jKSB5OnN0b3BSb3ddOworICB9CisgIGlmIChzdG9wUm93IC0gc3RhcnRSb3cgPCBCQVJDT0RFX01JTl9IRUlHSFQpIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgcmVzdWx0W2ldID0gW05TTnVsbCBudWxsXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworKyAoTlNSYW5nZSlmaW5kR3VhcmRQYXR0ZXJuOihaWEJpdE1hdHJpeCAqKW1hdHJpeAorICAgICAgICAgICAgICAgICAgICAgY29sdW1uOihpbnQpY29sdW1uCisgICAgICAgICAgICAgICAgICAgICAgICByb3c6KGludClyb3cKKyAgICAgICAgICAgICAgICAgICAgICB3aWR0aDooaW50KXdpZHRoCisgICAgICAgICAgICAgICAgIHdoaXRlRmlyc3Q6KEJPT0wpd2hpdGVGaXJzdAorICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOihpbnQgKilwYXR0ZXJuCisgICAgICAgICAgICAgICAgIHBhdHRlcm5MZW46KGludClwYXR0ZXJuTGVuCisgICAgICAgICAgICAgICAgICAgY291bnRlcnM6KGludCAqKWNvdW50ZXJzIHsKKyAgaW50IHBhdHRlcm5MZW5ndGggPSBwYXR0ZXJuTGVuOworICBtZW1zZXQoY291bnRlcnMsIDAsIHBhdHRlcm5MZW5ndGggKiBzaXplb2YoaW50KSk7CisgIEJPT0wgaXNXaGl0ZSA9IHdoaXRlRmlyc3Q7CisgIGludCBwYXR0ZXJuU3RhcnQgPSBjb2x1bW47CisgIGludCBwaXhlbERyaWZ0ID0gMDsKKworICAvLyBpZiB0aGVyZSBhcmUgYmxhY2sgcGl4ZWxzIGxlZnQgb2YgdGhlIGN1cnJlbnQgcGl4ZWwgc2hpZnQgdG8gdGhlIGxlZnQsIGJ1dCBvbmx5IGZvciBNQVhfUElYRUxfRFJJRlQgcGl4ZWxzCisgIHdoaWxlIChbbWF0cml4IGdldFg6cGF0dGVyblN0YXJ0IHk6cm93XSAmJiBwYXR0ZXJuU3RhcnQgPiAwICYmIHBpeGVsRHJpZnQrKyA8IE1BWF9QSVhFTF9EUklGVCkgeworICAgIHBhdHRlcm5TdGFydC0tOworICB9CisgIGludCB4ID0gcGF0dGVyblN0YXJ0OworICBpbnQgY291bnRlclBvc2l0aW9uID0gMDsKKyAgZm9yICg7eCA8IHdpZHRoOyB4KyspIHsKKyAgICBCT09MIHBpeGVsID0gW21hdHJpeCBnZXRYOnggeTpyb3ddOworICAgIGlmIChwaXhlbCBeIGlzV2hpdGUpIHsKKyAgICAgIGNvdW50ZXJzW2NvdW50ZXJQb3NpdGlvbl0gPSBjb3VudGVyc1tjb3VudGVyUG9zaXRpb25dICsgMTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKGNvdW50ZXJQb3NpdGlvbiA9PSBwYXR0ZXJuTGVuZ3RoIC0gMSkgeworICAgICAgICBpZiAoW3NlbGYgcGF0dGVybk1hdGNoVmFyaWFuY2U6Y291bnRlcnMgY291bnRlcnNTaXplOnBhdHRlcm5MZW5ndGggcGF0dGVybjpwYXR0ZXJuIG1heEluZGl2aWR1YWxWYXJpYW5jZTpNQVhfSU5ESVZJRFVBTF9WQVJJQU5DRV0gPCBNQVhfQVZHX1ZBUklBTkNFKSB7CisgICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKHBhdHRlcm5TdGFydCwgeCAtIHBhdHRlcm5TdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgcGF0dGVyblN0YXJ0ICs9IGNvdW50ZXJzWzBdICsgY291bnRlcnNbMV07CisgICAgICAgIGZvciAoaW50IHkgPSAyOyB5IDwgcGF0dGVybkxlbmd0aDsgeSsrKSB7CisgICAgICAgICAgY291bnRlcnNbeSAtIDJdID0gY291bnRlcnNbeV07CisgICAgICAgIH0KKyAgICAgICAgY291bnRlcnNbcGF0dGVybkxlbmd0aCAtIDJdID0gMDsKKyAgICAgICAgY291bnRlcnNbcGF0dGVybkxlbmd0aCAtIDFdID0gMDsKKyAgICAgICAgY291bnRlclBvc2l0aW9uLS07CisgICAgICB9IGVsc2UgeworICAgICAgICBjb3VudGVyUG9zaXRpb24rKzsKKyAgICAgIH0KKyAgICAgIGNvdW50ZXJzW2NvdW50ZXJQb3NpdGlvbl0gPSAxOworICAgICAgaXNXaGl0ZSA9ICFpc1doaXRlOworICAgIH0KKyAgfQorICBpZiAoY291bnRlclBvc2l0aW9uID09IHBhdHRlcm5MZW5ndGggLSAxKSB7CisgICAgaWYgKFtzZWxmIHBhdHRlcm5NYXRjaFZhcmlhbmNlOmNvdW50ZXJzIGNvdW50ZXJzU2l6ZTpwYXR0ZXJuTGVuIHBhdHRlcm46cGF0dGVybiBtYXhJbmRpdmlkdWFsVmFyaWFuY2U6TUFYX0lORElWSURVQUxfVkFSSUFOQ0VdIDwgTUFYX0FWR19WQVJJQU5DRSkgeworICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKHBhdHRlcm5TdGFydCwgeCAtIHBhdHRlcm5TdGFydCAtIDEpOworICAgIH0KKyAgfQorICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Cit9CisKKy8qKgorICogRGV0ZXJtaW5lcyBob3cgY2xvc2VseSBhIHNldCBvZiBvYnNlcnZlZCBjb3VudHMgb2YgcnVucyBvZiBibGFjay93aGl0ZQorICogdmFsdWVzIG1hdGNoZXMgYSBnaXZlbiB0YXJnZXQgcGF0dGVybi4gVGhpcyBpcyByZXBvcnRlZCBhcyB0aGUgcmF0aW8gb2YKKyAqIHRoZSB0b3RhbCB2YXJpYW5jZSBmcm9tIHRoZSBleHBlY3RlZCBwYXR0ZXJuIHByb3BvcnRpb25zIGFjcm9zcyBhbGwKKyAqIHBhdHRlcm4gZWxlbWVudHMsIHRvIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uCisgKi8KKysgKGludClwYXR0ZXJuTWF0Y2hWYXJpYW5jZTooaW50ICopY291bnRlcnMgY291bnRlcnNTaXplOihpbnQpY291bnRlcnNTaXplIHBhdHRlcm46KGludCAqKXBhdHRlcm4gbWF4SW5kaXZpZHVhbFZhcmlhbmNlOihpbnQpbWF4SW5kaXZpZHVhbFZhcmlhbmNlIHsKKyAgaW50IG51bUNvdW50ZXJzID0gY291bnRlcnNTaXplOworICBpbnQgdG90YWwgPSAwOworICBpbnQgcGF0dGVybkxlbmd0aCA9IDA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ291bnRlcnM7IGkrKykgeworICAgIHRvdGFsICs9IGNvdW50ZXJzW2ldOworICAgIHBhdHRlcm5MZW5ndGggKz0gcGF0dGVybltpXTsKKyAgfQorCisgIGlmICh0b3RhbCA8IHBhdHRlcm5MZW5ndGggfHwgcGF0dGVybkxlbmd0aCA9PSAwKSB7CisgICAgcmV0dXJuIElOVF9NQVg7CisgIH0KKyAgaW50IHVuaXRCYXJXaWR0aCA9ICh0b3RhbCA8PCBQREY0MTdfSU5URUdFUl9NQVRIX1NISUZUKSAvIHBhdHRlcm5MZW5ndGg7CisgIG1heEluZGl2aWR1YWxWYXJpYW5jZSA9IChtYXhJbmRpdmlkdWFsVmFyaWFuY2UgKiB1bml0QmFyV2lkdGgpID4+IFBERjQxN19JTlRFR0VSX01BVEhfU0hJRlQ7CisKKyAgaW50IHRvdGFsVmFyaWFuY2UgPSAwOworICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvdW50ZXJzOyB4KyspIHsKKyAgICBpbnQgY291bnRlciA9IGNvdW50ZXJzW3hdIDw8IFBERjQxN19JTlRFR0VSX01BVEhfU0hJRlQ7CisgICAgaW50IHNjYWxlZFBhdHRlcm4gPSBwYXR0ZXJuW3hdICogdW5pdEJhcldpZHRoOworICAgIGludCB2YXJpYW5jZSA9IGNvdW50ZXIgPiBzY2FsZWRQYXR0ZXJuID8gY291bnRlciAtIHNjYWxlZFBhdHRlcm4gOiBzY2FsZWRQYXR0ZXJuIC0gY291bnRlcjsKKyAgICBpZiAodmFyaWFuY2UgPiBtYXhJbmRpdmlkdWFsVmFyaWFuY2UpIHsKKyAgICAgIHJldHVybiBJTlRfTUFYOworICAgIH0KKyAgICB0b3RhbFZhcmlhbmNlICs9IHZhcmlhbmNlOworICB9CisKKyAgcmV0dXJuIHRvdGFsVmFyaWFuY2UgLyB0b3RhbDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9kZXRlY3Rvci9aWFBERjQxN0RldGVjdG9yUmVzdWx0LmggYi9aWGluZ09iakMvcGRmNDE3L2RldGVjdG9yL1pYUERGNDE3RGV0ZWN0b3JSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2U4YzkyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9kZXRlY3Rvci9aWFBERjQxN0RldGVjdG9yUmVzdWx0LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGNsYXNzIFpYQml0TWF0cml4OworCitAaW50ZXJmYWNlIFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgWlhCaXRNYXRyaXggKmJpdHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgTlNBcnJheSAqcG9pbnRzOworCistIChpZClpbml0V2l0aEJpdHM6KFpYQml0TWF0cml4ICopYml0cyBwb2ludHM6KE5TQXJyYXkgKilwb2ludHM7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZGV0ZWN0b3IvWlhQREY0MTdEZXRlY3RvclJlc3VsdC5tIGIvWlhpbmdPYmpDL3BkZjQxNy9kZXRlY3Rvci9aWFBERjQxN0RldGVjdG9yUmVzdWx0Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmYTgyMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZGV0ZWN0b3IvWlhQREY0MTdEZXRlY3RvclJlc3VsdC5tCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUERGNDE3RGV0ZWN0b3JSZXN1bHQuaCIKKworQGltcGxlbWVudGF0aW9uIFpYUERGNDE3RGV0ZWN0b3JSZXN1bHQKKworLSAoaWQpaW5pdFdpdGhCaXRzOihaWEJpdE1hdHJpeCAqKWJpdHMgcG9pbnRzOihOU0FycmF5ICopcG9pbnRzIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgaWYgKHNlbGYpIHsKKyAgICBfYml0cyA9IGJpdHM7CisgICAgX3BvaW50cyA9IHBvaW50czsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhCYXJjb2RlTWF0cml4LmggYi9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhCYXJjb2RlTWF0cml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1ZjlmOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWEJhcmNvZGVNYXRyaXguaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAY2xhc3MgWlhCYXJjb2RlUm93OworCisvKioKKyAqIEhvbGRzIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gZm9yIGEgYmFyY29kZSBpbiBhIGZvcm1hdCB3aGVyZSBpdCBjYW4gYmUgZWFzaWx5IGFjY2Vzc2FibGUKKyAqLworQGludGVyZmFjZSBaWEJhcmNvZGVNYXRyaXggOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGhlaWdodDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgd2lkdGg7CisKKy0gKGlkKWluaXRXaXRoSGVpZ2h0OihpbnQpaGVpZ2h0IHdpZHRoOihpbnQpd2lkdGg7CistICh2b2lkKXNldFg6KGludCl4IHk6KGludCl5IHZhbHVlOihpbnQ4X3QpdmFsdWU7CistICh2b2lkKXNldE1hdHJpeFg6KGludCl4IHk6KGludCl5IGJsYWNrOihCT09MKWJsYWNrOworLSAodm9pZClzdGFydFJvdzsKKy0gKFpYQmFyY29kZVJvdyAqKWN1cnJlbnRSb3c7CistIChpbnQ4X3QgKiopbWF0cml4V2l0aEhlaWdodDooaW50ICopaGVpZ2h0IHdpZHRoOihpbnQgKil3aWR0aDsKKy0gKGludDhfdCAqKilzY2FsZWRNYXRyaXhXaXRoSGVpZ2h0OihpbnQgKiloZWlnaHQgd2lkdGg6KGludCAqKXdpZHRoIHNjYWxlOihpbnQpc2NhbGU7CistIChpbnQ4X3QgKiopc2NhbGVkTWF0cml4V2l0aEhlaWdodDooaW50ICopaGVpZ2h0IHdpZHRoOihpbnQgKil3aWR0aCB4U2NhbGU6KGludCl4U2NhbGUgeVNjYWxlOihpbnQpeVNjYWxlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhCYXJjb2RlTWF0cml4Lm0gYi9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhCYXJjb2RlTWF0cml4Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4N2NlNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWEJhcmNvZGVNYXRyaXgubQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJhcmNvZGVNYXRyaXguaCIKKyNpbXBvcnQgIlpYQmFyY29kZVJvdy5oIgorCitAaW50ZXJmYWNlIFpYQmFyY29kZU1hdHJpeCAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY3VycmVudFJvd0luZGV4OworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNBcnJheSAqcm93TWF0cml4OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWEJhcmNvZGVNYXRyaXgKKworLSAoaWQpaW5pdFdpdGhIZWlnaHQ6KGludCloZWlnaHQgd2lkdGg6KGludCl3aWR0aCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgTlNNdXRhYmxlQXJyYXkgKm1hdHJpeCA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgZm9yIChpbnQgaSA9IDAsIG1hdHJpeExlbmd0aCA9IGhlaWdodCArIDI7IGkgPCBtYXRyaXhMZW5ndGg7IGkrKykgeworICAgICAgW21hdHJpeCBhZGRPYmplY3Q6W1pYQmFyY29kZVJvdyBiYXJjb2RlUm93V2l0aFdpZHRoOih3aWR0aCArIDQpICogMTcgKyAxXV07CisgICAgfQorICAgIF9yb3dNYXRyaXggPSBtYXRyaXg7CisgICAgX3dpZHRoID0gd2lkdGggKiAxNzsKKyAgICBfaGVpZ2h0ID0gaGVpZ2h0ICsgMjsKKyAgICBfY3VycmVudFJvd0luZGV4ID0gMDsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldFg6KGludCl4IHk6KGludCl5IHZhbHVlOihpbnQ4X3QpdmFsdWUgeworICBbc2VsZi5yb3dNYXRyaXhbeV0gc2V0WDp4IHZhbHVlOnZhbHVlXTsKK30KKworLSAodm9pZClzZXRNYXRyaXhYOihpbnQpeCB5OihpbnQpeSBibGFjazooQk9PTClibGFjayB7CisgIFtzZWxmIHNldFg6eCB5OnkgdmFsdWU6KGludDhfdCkoYmxhY2sgPyAxIDogMCldOworfQorCistICh2b2lkKXN0YXJ0Um93IHsKKyAgKytzZWxmLmN1cnJlbnRSb3dJbmRleDsKK30KKworLSAoWlhCYXJjb2RlUm93ICopY3VycmVudFJvdyB7CisgIHJldHVybiBzZWxmLnJvd01hdHJpeFtzZWxmLmN1cnJlbnRSb3dJbmRleF07Cit9CisKKy0gKGludDhfdCAqKiltYXRyaXhXaXRoSGVpZ2h0OihpbnQgKilwSGVpZ2h0IHdpZHRoOihpbnQgKilwV2lkdGggeworICByZXR1cm4gW3NlbGYgc2NhbGVkTWF0cml4V2l0aEhlaWdodDpwSGVpZ2h0IHdpZHRoOnBXaWR0aCB4U2NhbGU6MSB5U2NhbGU6MV07Cit9CisKKy0gKGludDhfdCAqKilzY2FsZWRNYXRyaXhXaXRoSGVpZ2h0OihpbnQgKilwSGVpZ2h0IHdpZHRoOihpbnQgKilwV2lkdGggc2NhbGU6KGludClzY2FsZSB7CisgIHJldHVybiBbc2VsZiBzY2FsZWRNYXRyaXhXaXRoSGVpZ2h0OnBIZWlnaHQgd2lkdGg6cFdpZHRoIHhTY2FsZTpzY2FsZSB5U2NhbGU6c2NhbGVdOworfQorCistIChpbnQ4X3QgKiopc2NhbGVkTWF0cml4V2l0aEhlaWdodDooaW50ICopcEhlaWdodCB3aWR0aDooaW50ICopcFdpZHRoIHhTY2FsZTooaW50KXhTY2FsZSB5U2NhbGU6KGludCl5U2NhbGUgeworICBpbnQgbWF0cml4SGVpZ2h0ID0gc2VsZi5oZWlnaHQgKiB5U2NhbGU7CisKKyAgaWYgKHBIZWlnaHQpICpwSGVpZ2h0ID0gbWF0cml4SGVpZ2h0OworICBpZiAocFdpZHRoKSAqcFdpZHRoID0gKHNlbGYud2lkdGggKyA2OSkgKiB4U2NhbGU7CisKKyAgaW50OF90ICoqbWF0cml4T3V0ID0gKGludDhfdCAqKiltYWxsb2MobWF0cml4SGVpZ2h0ICogc2l6ZW9mKGludDhfdCAqKSk7CisgIGludCB5TWF4ID0gc2VsZi5oZWlnaHQgKiB5U2NhbGU7CisgIGZvciAoaW50IGlpID0gMDsgaWkgPCB5TWF4OyBpaSsrKSB7CisgICAgbWF0cml4T3V0W3lNYXggLSBpaSAtIDFdID0gW3NlbGYucm93TWF0cml4W2lpIC8geVNjYWxlXSBzY2FsZWRSb3c6eFNjYWxlXTsKKyAgfQorICByZXR1cm4gbWF0cml4T3V0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhCYXJjb2RlUm93LmggYi9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhCYXJjb2RlUm93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk2NWY1OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWEJhcmNvZGVSb3cuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAaW50ZXJmYWNlIFpYQmFyY29kZVJvdyA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQ4X3QgKnJvdzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgcm93TGVuZ3RoOworCisrIChaWEJhcmNvZGVSb3cgKiliYXJjb2RlUm93V2l0aFdpZHRoOihpbnQpd2lkdGg7CistIChpZClpbml0V2l0aFdpZHRoOihpbnQpd2lkdGg7CistICh2b2lkKXNldFg6KGludCl4IHZhbHVlOihpbnQ4X3QpdmFsdWU7CistICh2b2lkKXNldFg6KGludCl4IGJsYWNrOihCT09MKWJsYWNrOworLSAodm9pZClhZGRCYXI6KEJPT0wpYmxhY2sgd2lkdGg6KGludCl3aWR0aDsKKy0gKGludDhfdCAqKXNjYWxlZFJvdzooaW50KXNjYWxlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhCYXJjb2RlUm93Lm0gYi9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhCYXJjb2RlUm93Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ3NjYzMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWEJhcmNvZGVSb3cubQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJhcmNvZGVSb3cuaCIKKworQGludGVyZmFjZSBaWEJhcmNvZGVSb3cgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGN1cnJlbnRMb2NhdGlvbjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhCYXJjb2RlUm93CisKKysgKFpYQmFyY29kZVJvdyAqKWJhcmNvZGVSb3dXaXRoV2lkdGg6KGludCl3aWR0aCB7CisgIHJldHVybiBbW1pYQmFyY29kZVJvdyBhbGxvY10gaW5pdFdpdGhXaWR0aDp3aWR0aF07Cit9CisKKy0gKGlkKWluaXRXaXRoV2lkdGg6KGludCl3aWR0aCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3Jvd0xlbmd0aCA9IHdpZHRoOworICAgIF9yb3cgPSAoaW50OF90ICopbWFsbG9jKF9yb3dMZW5ndGggKiBzaXplb2YoaW50OF90KSk7CisgICAgbWVtc2V0KF9yb3csIDAsIHNlbGYucm93TGVuZ3RoICogc2l6ZW9mKGludDhfdCkpOworICAgIF9jdXJyZW50TG9jYXRpb24gPSAwOworICB9CisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MgeworICBpZiAoX3JvdyAhPSBOVUxMKSB7CisgICAgZnJlZShfcm93KTsKKyAgICBfcm93ID0gTlVMTDsKKyAgfQorfQorCistICh2b2lkKXNldFg6KGludCl4IHZhbHVlOihpbnQ4X3QpdmFsdWUgeworICBzZWxmLnJvd1t4XSA9IHZhbHVlOworfQorCistICh2b2lkKXNldFg6KGludCl4IGJsYWNrOihCT09MKWJsYWNrIHsKKyAgc2VsZi5yb3dbeF0gPSAoaW50OF90KShibGFjayA/IDEgOiAwKTsKK30KKworLSAodm9pZClhZGRCYXI6KEJPT0wpYmxhY2sgd2lkdGg6KGludCl3aWR0aCB7CisgIGZvciAoaW50IGlpID0gMDsgaWkgPCB3aWR0aDsgaWkrKykgeworICAgIFtzZWxmIHNldFg6c2VsZi5jdXJyZW50TG9jYXRpb24rKyBibGFjazpibGFja107CisgIH0KK30KKworLSAoaW50OF90ICopc2NhbGVkUm93OihpbnQpc2NhbGUgeworICBpbnQ4X3QgKm91dHB1dCA9IChpbnQ4X3QgKiltYWxsb2Moc2VsZi5yb3dMZW5ndGggKiBzY2FsZSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VsZi5yb3dMZW5ndGggKiBzY2FsZTsgaSsrKSB7CisgICAgb3V0cHV0W2ldID0gc2VsZi5yb3dbaSAvIHNjYWxlXTsKKyAgfQorICByZXR1cm4gb3V0cHV0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhDb21wYWN0aW9uLmggYi9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhDb21wYWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3MDViMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWENvbXBhY3Rpb24uaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCit0eXBlZGVmIGVudW0geworICBaWF9DT01QQUNUSU9OX0FVVE8sCisgIFpYX0NPTVBBQ1RJT05fVEVYVCwKKyAgWlhfQ09NUEFDVElPTl9CWVRFLAorICBaWF9DT01QQUNUSU9OX05VTUVSSUMKK30gWlhDb21wYWN0aW9uOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWERpbWVuc2lvbnMuaCBiL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWERpbWVuc2lvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWIyNWE5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3BkZjQxNy9lbmNvZGVyL1pYRGltZW5zaW9ucy5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogRGF0YSBvYmplY3QgdG8gc3BlY2lmeSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucyBmb3IgYSBQREY0MTcgYmFyY29kZS4KKyAqLworQGludGVyZmFjZSBaWERpbWVuc2lvbnMgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbWluQ29sczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBtYXhDb2xzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IG1pblJvd3M7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbWF4Um93czsKKworLSAoaWQpaW5pdFdpdGhNaW5Db2xzOihpbnQpbWluQ29scyBtYXhDb2xzOihpbnQpbWF4Q29scyBtaW5Sb3dzOihpbnQpbWluUm93cyBtYXhSb3dzOihpbnQpbWF4Um93czsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9lbmNvZGVyL1pYRGltZW5zaW9ucy5tIGIvWlhpbmdPYmpDL3BkZjQxNy9lbmNvZGVyL1pYRGltZW5zaW9ucy5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZDcwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhEaW1lbnNpb25zLm0KQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhEaW1lbnNpb25zLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWERpbWVuc2lvbnMKKworLSAoaWQpaW5pdFdpdGhNaW5Db2xzOihpbnQpbWluQ29scyBtYXhDb2xzOihpbnQpbWF4Q29scyBtaW5Sb3dzOihpbnQpbWluUm93cyBtYXhSb3dzOihpbnQpbWF4Um93cyB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX21pbkNvbHMgPSBtaW5Db2xzOworICAgIF9tYXhDb2xzID0gbWF4Q29sczsKKyAgICBfbWluUm93cyA9IG1pblJvd3M7CisgICAgX21heFJvd3MgPSBtYXhSb3dzOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWFBERjQxNy5oIGIvWlhpbmdPYmpDL3BkZjQxNy9lbmNvZGVyL1pYUERGNDE3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjZWRiYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWFBERjQxNy5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiBKZXJlbWlhcyBNYWVya2kgaW4gcGFydCwgYW5kIFpYaW5nIEF1dGhvcnMgaW4gcGFydAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhDb21wYWN0aW9uLmgiCisKK0BjbGFzcyBaWEJhcmNvZGVNYXRyaXg7CisKKy8qCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgZnJvbSBpdHMgb3JpZ2luYWwgZm9ybSBpbiBCYXJjb2RlNEouCisgKi8KK0BpbnRlcmZhY2UgWlhQREY0MTcgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgWlhCYXJjb2RlTWF0cml4ICpiYXJjb2RlTWF0cml4OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgQk9PTCBjb21wYWN0OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgWlhDb21wYWN0aW9uIGNvbXBhY3Rpb247CisKKy0gKGlkKWluaXRXaXRoQ29tcGFjdDooQk9PTCljb21wYWN0OworLSAoQk9PTClnZW5lcmF0ZUJhcmNvZGVMb2dpYzooTlNTdHJpbmcgKiltc2cgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6KGludCllcnJvckNvcnJlY3Rpb25MZXZlbCBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKEJPT0wpZGV0ZXJtaW5lRGltZW5zaW9uczooaW50ICopZGltZW5zaW9uIHNvdXJjZUNvZGVXb3JkczooaW50KXNvdXJjZUNvZGVXb3JkcyBlcnJvckNvcnJlY3Rpb25Db2RlV29yZHM6KGludCllcnJvckNvcnJlY3Rpb25Db2RlV29yZHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CistICh2b2lkKXNldERpbWVuc2lvbnNXaXRoTWF4Q29sczooaW50KW1heENvbHMgbWluQ29sczooaW50KW1pbkNvbHMgbWF4Um93czooaW50KW1heFJvd3MgbWluUm93czooaW50KW1pblJvd3M7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWFBERjQxNy5tIGIvWlhpbmdPYmpDL3BkZjQxNy9lbmNvZGVyL1pYUERGNDE3Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxZmI4ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWFBERjQxNy5tCkBAIC0wLDAgKzEsNzI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYgSmVyZW1pYXMgTWFlcmtpIGluIHBhcnQsIGFuZCBaWGluZyBBdXRob3JzIGluIHBhcnQKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQmFyY29kZU1hdHJpeC5oIgorI2ltcG9ydCAiWlhCYXJjb2RlUm93LmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhQREY0MTcuaCIKKyNpbXBvcnQgIlpYUERGNDE3RXJyb3JDb3JyZWN0aW9uLmgiCisjaW1wb3J0ICJaWFBERjQxN0hpZ2hMZXZlbEVuY29kZXIuaCIKKworLyoqCisgKiBUaGUgc3RhcnQgcGF0dGVybiAoMTcgYml0cykKKyAqLworY29uc3QgaW50IFNUQVJUX1BBVFRFUk5fSU5UID0gMHgxZmVhODsKKy8qKgorICogVGhlIHN0b3AgcGF0dGVybiAoMTggYml0cykKKyAqLworY29uc3QgaW50IFNUT1BfUEFUVEVSTl9JTlQgPSAweDNmYTI5OworCisvKioKKyAqIFRoZSBjb2Rld29yZCB0YWJsZSBmcm9tIHRoZSBBbm5leCBBIG9mIElTTy9JRUMgMTU0Mzg6MjAwMShFKS4KKyAqLworI2RlZmluZSBDT0RFV09SRF9UQUJMRV9MRU4gMworI2RlZmluZSBDT0RFV09SRF9UQUJMRV9TVUJfTEVOIDkyOQorY29uc3QgaW50IFBERl9DT0RFV09SRF9UQUJMRVtDT0RFV09SRF9UQUJMRV9MRU5dW0NPREVXT1JEX1RBQkxFX1NVQl9MRU5dID0geworICB7MHgxZDVjMCwgMHgxZWFmMCwgMHgxZjU3YywgMHgxZDRlMCwgMHgxZWE3OCwgMHgxZjUzZSwKKyAgICAweDFhOGMwLCAweDFkNDcwLCAweDFhODYwLCAweDE1MDQwLCAweDFhODMwLCAweDE1MDIwLAorICAgIDB4MWFkYzAsIDB4MWQ2ZjAsIDB4MWViN2MsIDB4MWFjZTAsIDB4MWQ2NzgsIDB4MWViM2UsCisgICAgMHgxNThjMCwgMHgxYWM3MCwgMHgxNTg2MCwgMHgxNWRjMCwgMHgxYWVmMCwgMHgxZDc3YywKKyAgICAweDE1Y2UwLCAweDFhZTc4LCAweDFkNzNlLCAweDE1YzcwLCAweDFhZTNjLCAweDE1ZWYwLAorICAgIDB4MWFmN2MsIDB4MTVlNzgsIDB4MWFmM2UsIDB4MTVmN2MsIDB4MWY1ZmEsIDB4MWQyZTAsCisgICAgMHgxZTk3OCwgMHgxZjRiZSwgMHgxYTRjMCwgMHgxZDI3MCwgMHgxZTkzYywgMHgxYTQ2MCwKKyAgICAweDFkMjM4LCAweDE0ODQwLCAweDFhNDMwLCAweDFkMjFjLCAweDE0ODIwLCAweDFhNDE4LAorICAgIDB4MTQ4MTAsIDB4MWE2ZTAsIDB4MWQzNzgsIDB4MWU5YmUsIDB4MTRjYzAsIDB4MWE2NzAsCisgICAgMHgxZDMzYywgMHgxNGM2MCwgMHgxYTYzOCwgMHgxZDMxZSwgMHgxNGMzMCwgMHgxYTYxYywKKyAgICAweDE0ZWUwLCAweDFhNzc4LCAweDFkM2JlLCAweDE0ZTcwLCAweDFhNzNjLCAweDE0ZTM4LAorICAgIDB4MWE3MWUsIDB4MTRmNzgsIDB4MWE3YmUsIDB4MTRmM2MsIDB4MTRmMWUsIDB4MWEyYzAsCisgICAgMHgxZDE3MCwgMHgxZThiYywgMHgxYTI2MCwgMHgxZDEzOCwgMHgxZTg5ZSwgMHgxNDQ0MCwKKyAgICAweDFhMjMwLCAweDFkMTFjLCAweDE0NDIwLCAweDFhMjE4LCAweDE0NDEwLCAweDE0NDA4LAorICAgIDB4MTQ2YzAsIDB4MWEzNzAsIDB4MWQxYmMsIDB4MTQ2NjAsIDB4MWEzMzgsIDB4MWQxOWUsCisgICAgMHgxNDYzMCwgMHgxYTMxYywgMHgxNDYxOCwgMHgxNDYwYywgMHgxNDc3MCwgMHgxYTNiYywKKyAgICAweDE0NzM4LCAweDFhMzllLCAweDE0NzFjLCAweDE0N2JjLCAweDFhMTYwLCAweDFkMGI4LAorICAgIDB4MWU4NWUsIDB4MTQyNDAsIDB4MWExMzAsIDB4MWQwOWMsIDB4MTQyMjAsIDB4MWExMTgsCisgICAgMHgxZDA4ZSwgMHgxNDIxMCwgMHgxYTEwYywgMHgxNDIwOCwgMHgxYTEwNiwgMHgxNDM2MCwKKyAgICAweDFhMWI4LCAweDFkMGRlLCAweDE0MzMwLCAweDFhMTljLCAweDE0MzE4LCAweDFhMThlLAorICAgIDB4MTQzMGMsIDB4MTQzMDYsIDB4MWExZGUsIDB4MTQzOGUsIDB4MTQxNDAsIDB4MWEwYjAsCisgICAgMHgxZDA1YywgMHgxNDEyMCwgMHgxYTA5OCwgMHgxZDA0ZSwgMHgxNDExMCwgMHgxYTA4YywKKyAgICAweDE0MTA4LCAweDFhMDg2LCAweDE0MTA0LCAweDE0MWIwLCAweDE0MTk4LCAweDE0MThjLAorICAgIDB4MTQwYTAsIDB4MWQwMmUsIDB4MWEwNGMsIDB4MWEwNDYsIDB4MTQwODIsIDB4MWNhZTAsCisgICAgMHgxZTU3OCwgMHgxZjJiZSwgMHgxOTRjMCwgMHgxY2E3MCwgMHgxZTUzYywgMHgxOTQ2MCwKKyAgICAweDFjYTM4LCAweDFlNTFlLCAweDEyODQwLCAweDE5NDMwLCAweDEyODIwLCAweDE5NmUwLAorICAgIDB4MWNiNzgsIDB4MWU1YmUsIDB4MTJjYzAsIDB4MTk2NzAsIDB4MWNiM2MsIDB4MTJjNjAsCisgICAgMHgxOTYzOCwgMHgxMmMzMCwgMHgxMmMxOCwgMHgxMmVlMCwgMHgxOTc3OCwgMHgxY2JiZSwKKyAgICAweDEyZTcwLCAweDE5NzNjLCAweDEyZTM4LCAweDEyZTFjLCAweDEyZjc4LCAweDE5N2JlLAorICAgIDB4MTJmM2MsIDB4MTJmYmUsIDB4MWRhYzAsIDB4MWVkNzAsIDB4MWY2YmMsIDB4MWRhNjAsCisgICAgMHgxZWQzOCwgMHgxZjY5ZSwgMHgxYjQ0MCwgMHgxZGEzMCwgMHgxZWQxYywgMHgxYjQyMCwKKyAgICAweDFkYTE4LCAweDFlZDBlLCAweDFiNDEwLCAweDFkYTBjLCAweDE5MmMwLCAweDFjOTcwLAorICAgIDB4MWU0YmMsIDB4MWI2YzAsIDB4MTkyNjAsIDB4MWM5MzgsIDB4MWU0OWUsIDB4MWI2NjAsCisgICAgMHgxZGIzOCwgMHgxZWQ5ZSwgMHgxNmM0MCwgMHgxMjQyMCwgMHgxOTIxOCwgMHgxYzkwZSwKKyAgICAweDE2YzIwLCAweDFiNjE4LCAweDE2YzEwLCAweDEyNmMwLCAweDE5MzcwLCAweDFjOWJjLAorICAgIDB4MTZlYzAsIDB4MTI2NjAsIDB4MTkzMzgsIDB4MWM5OWUsIDB4MTZlNjAsIDB4MWI3MzgsCisgICAgMHgxZGI5ZSwgMHgxNmUzMCwgMHgxMjYxOCwgMHgxNmUxOCwgMHgxMjc3MCwgMHgxOTNiYywKKyAgICAweDE2ZjcwLCAweDEyNzM4LCAweDE5MzllLCAweDE2ZjM4LCAweDFiNzllLCAweDE2ZjFjLAorICAgIDB4MTI3YmMsIDB4MTZmYmMsIDB4MTI3OWUsIDB4MTZmOWUsIDB4MWQ5NjAsIDB4MWVjYjgsCisgICAgMHgxZjY1ZSwgMHgxYjI0MCwgMHgxZDkzMCwgMHgxZWM5YywgMHgxYjIyMCwgMHgxZDkxOCwKKyAgICAweDFlYzhlLCAweDFiMjEwLCAweDFkOTBjLCAweDFiMjA4LCAweDFiMjA0LCAweDE5MTYwLAorICAgIDB4MWM4YjgsIDB4MWU0NWUsIDB4MWIzNjAsIDB4MTkxMzAsIDB4MWM4OWMsIDB4MTY2NDAsCisgICAgMHgxMjIyMCwgMHgxZDk5YywgMHgxYzg4ZSwgMHgxNjYyMCwgMHgxMjIxMCwgMHgxOTEwYywKKyAgICAweDE2NjEwLCAweDFiMzBjLCAweDE5MTA2LCAweDEyMjA0LCAweDEyMzYwLCAweDE5MWI4LAorICAgIDB4MWM4ZGUsIDB4MTY3NjAsIDB4MTIzMzAsIDB4MTkxOWMsIDB4MTY3MzAsIDB4MWIzOWMsCisgICAgMHgxOTE4ZSwgMHgxNjcxOCwgMHgxMjMwYywgMHgxMjMwNiwgMHgxMjNiOCwgMHgxOTFkZSwKKyAgICAweDE2N2I4LCAweDEyMzljLCAweDE2NzljLCAweDEyMzhlLCAweDE2NzhlLCAweDE2N2RlLAorICAgIDB4MWIxNDAsIDB4MWQ4YjAsIDB4MWVjNWMsIDB4MWIxMjAsIDB4MWQ4OTgsIDB4MWVjNGUsCisgICAgMHgxYjExMCwgMHgxZDg4YywgMHgxYjEwOCwgMHgxZDg4NiwgMHgxYjEwNCwgMHgxYjEwMiwKKyAgICAweDEyMTQwLCAweDE5MGIwLCAweDFjODVjLCAweDE2MzQwLCAweDEyMTIwLCAweDE5MDk4LAorICAgIDB4MWM4NGUsIDB4MTYzMjAsIDB4MWIxOTgsIDB4MWQ4Y2UsIDB4MTYzMTAsIDB4MTIxMDgsCisgICAgMHgxOTA4NiwgMHgxNjMwOCwgMHgxYjE4NiwgMHgxNjMwNCwgMHgxMjFiMCwgMHgxOTBkYywKKyAgICAweDE2M2IwLCAweDEyMTk4LCAweDE5MGNlLCAweDE2Mzk4LCAweDFiMWNlLCAweDE2MzhjLAorICAgIDB4MTIxODYsIDB4MTYzODYsIDB4MTYzZGMsIDB4MTYzY2UsIDB4MWIwYTAsIDB4MWQ4NTgsCisgICAgMHgxZWMyZSwgMHgxYjA5MCwgMHgxZDg0YywgMHgxYjA4OCwgMHgxZDg0NiwgMHgxYjA4NCwKKyAgICAweDFiMDgyLCAweDEyMGEwLCAweDE5MDU4LCAweDFjODJlLCAweDE2MWEwLCAweDEyMDkwLAorICAgIDB4MTkwNGMsIDB4MTYxOTAsIDB4MWIwY2MsIDB4MTkwNDYsIDB4MTYxODgsIDB4MTIwODQsCisgICAgMHgxNjE4NCwgMHgxMjA4MiwgMHgxMjBkOCwgMHgxNjFkOCwgMHgxNjFjYywgMHgxNjFjNiwKKyAgICAweDFkODJjLCAweDFkODI2LCAweDFiMDQyLCAweDE5MDJjLCAweDEyMDQ4LCAweDE2MGM4LAorICAgIDB4MTYwYzQsIDB4MTYwYzIsIDB4MThhYzAsIDB4MWM1NzAsIDB4MWUyYmMsIDB4MThhNjAsCisgICAgMHgxYzUzOCwgMHgxMTQ0MCwgMHgxOGEzMCwgMHgxYzUxYywgMHgxMTQyMCwgMHgxOGExOCwKKyAgICAweDExNDEwLCAweDExNDA4LCAweDExNmMwLCAweDE4YjcwLCAweDFjNWJjLCAweDExNjYwLAorICAgIDB4MThiMzgsIDB4MWM1OWUsIDB4MTE2MzAsIDB4MThiMWMsIDB4MTE2MTgsIDB4MTE2MGMsCisgICAgMHgxMTc3MCwgMHgxOGJiYywgMHgxMTczOCwgMHgxOGI5ZSwgMHgxMTcxYywgMHgxMTdiYywKKyAgICAweDExNzllLCAweDFjZDYwLCAweDFlNmI4LCAweDFmMzVlLCAweDE5YTQwLCAweDFjZDMwLAorICAgIDB4MWU2OWMsIDB4MTlhMjAsIDB4MWNkMTgsIDB4MWU2OGUsIDB4MTlhMTAsIDB4MWNkMGMsCisgICAgMHgxOWEwOCwgMHgxY2QwNiwgMHgxODk2MCwgMHgxYzRiOCwgMHgxZTI1ZSwgMHgxOWI2MCwKKyAgICAweDE4OTMwLCAweDFjNDljLCAweDEzNjQwLCAweDExMjIwLCAweDFjZDljLCAweDFjNDhlLAorICAgIDB4MTM2MjAsIDB4MTliMTgsIDB4MTg5MGMsIDB4MTM2MTAsIDB4MTEyMDgsIDB4MTM2MDgsCisgICAgMHgxMTM2MCwgMHgxODliOCwgMHgxYzRkZSwgMHgxMzc2MCwgMHgxMTMzMCwgMHgxY2RkZSwKKyAgICAweDEzNzMwLCAweDE5YjljLCAweDE4OThlLCAweDEzNzE4LCAweDExMzBjLCAweDEzNzBjLAorICAgIDB4MTEzYjgsIDB4MTg5ZGUsIDB4MTM3YjgsIDB4MTEzOWMsIDB4MTM3OWMsIDB4MTEzOGUsCisgICAgMHgxMTNkZSwgMHgxMzdkZSwgMHgxZGQ0MCwgMHgxZWViMCwgMHgxZjc1YywgMHgxZGQyMCwKKyAgICAweDFlZTk4LCAweDFmNzRlLCAweDFkZDEwLCAweDFlZThjLCAweDFkZDA4LCAweDFlZTg2LAorICAgIDB4MWRkMDQsIDB4MTk5NDAsIDB4MWNjYjAsIDB4MWU2NWMsIDB4MWJiNDAsIDB4MTk5MjAsCisgICAgMHgxZWVkYywgMHgxZTY0ZSwgMHgxYmIyMCwgMHgxZGQ5OCwgMHgxZWVjZSwgMHgxYmIxMCwKKyAgICAweDE5OTA4LCAweDFjYzg2LCAweDFiYjA4LCAweDFkZDg2LCAweDE5OTAyLCAweDExMTQwLAorICAgIDB4MTg4YjAsIDB4MWM0NWMsIDB4MTMzNDAsIDB4MTExMjAsIDB4MTg4OTgsIDB4MWM0NGUsCisgICAgMHgxNzc0MCwgMHgxMzMyMCwgMHgxOTk5OCwgMHgxY2NjZSwgMHgxNzcyMCwgMHgxYmI5OCwKKyAgICAweDFkZGNlLCAweDE4ODg2LCAweDE3NzEwLCAweDEzMzA4LCAweDE5OTg2LCAweDE3NzA4LAorICAgIDB4MTExMDIsIDB4MTExYjAsIDB4MTg4ZGMsIDB4MTMzYjAsIDB4MTExOTgsIDB4MTg4Y2UsCisgICAgMHgxNzdiMCwgMHgxMzM5OCwgMHgxOTljZSwgMHgxNzc5OCwgMHgxYmJjZSwgMHgxMTE4NiwKKyAgICAweDEzMzg2LCAweDExMWRjLCAweDEzM2RjLCAweDExMWNlLCAweDE3N2RjLCAweDEzM2NlLAorICAgIDB4MWRjYTAsIDB4MWVlNTgsIDB4MWY3MmUsIDB4MWRjOTAsIDB4MWVlNGMsIDB4MWRjODgsCisgICAgMHgxZWU0NiwgMHgxZGM4NCwgMHgxZGM4MiwgMHgxOThhMCwgMHgxY2M1OCwgMHgxZTYyZSwKKyAgICAweDFiOWEwLCAweDE5ODkwLCAweDFlZTZlLCAweDFiOTkwLCAweDFkY2NjLCAweDFjYzQ2LAorICAgIDB4MWI5ODgsIDB4MTk4ODQsIDB4MWI5ODQsIDB4MTk4ODIsIDB4MWI5ODIsIDB4MTEwYTAsCisgICAgMHgxODg1OCwgMHgxYzQyZSwgMHgxMzFhMCwgMHgxMTA5MCwgMHgxODg0YywgMHgxNzNhMCwKKyAgICAweDEzMTkwLCAweDE5OGNjLCAweDE4ODQ2LCAweDE3MzkwLCAweDFiOWNjLCAweDExMDg0LAorICAgIDB4MTczODgsIDB4MTMxODQsIDB4MTEwODIsIDB4MTMxODIsIDB4MTEwZDgsIDB4MTg4NmUsCisgICAgMHgxMzFkOCwgMHgxMTBjYywgMHgxNzNkOCwgMHgxMzFjYywgMHgxMTBjNiwgMHgxNzNjYywKKyAgICAweDEzMWM2LCAweDExMGVlLCAweDE3M2VlLCAweDFkYzUwLCAweDFlZTJjLCAweDFkYzQ4LAorICAgIDB4MWVlMjYsIDB4MWRjNDQsIDB4MWRjNDIsIDB4MTk4NTAsIDB4MWNjMmMsIDB4MWI4ZDAsCisgICAgMHgxOTg0OCwgMHgxY2MyNiwgMHgxYjhjOCwgMHgxZGM2NiwgMHgxYjhjNCwgMHgxOTg0MiwKKyAgICAweDFiOGMyLCAweDExMDUwLCAweDE4ODJjLCAweDEzMGQwLCAweDExMDQ4LCAweDE4ODI2LAorICAgIDB4MTcxZDAsIDB4MTMwYzgsIDB4MTk4NjYsIDB4MTcxYzgsIDB4MWI4ZTYsIDB4MTEwNDIsCisgICAgMHgxNzFjNCwgMHgxMzBjMiwgMHgxNzFjMiwgMHgxMzBlYywgMHgxNzFlYywgMHgxNzFlNiwKKyAgICAweDFlZTE2LCAweDFkYzIyLCAweDFjYzE2LCAweDE5ODI0LCAweDE5ODIyLCAweDExMDI4LAorICAgIDB4MTMwNjgsIDB4MTcwZTgsIDB4MTEwMjIsIDB4MTMwNjIsIDB4MTg1NjAsIDB4MTBhNDAsCisgICAgMHgxODUzMCwgMHgxMGEyMCwgMHgxODUxOCwgMHgxYzI4ZSwgMHgxMGExMCwgMHgxODUwYywKKyAgICAweDEwYTA4LCAweDE4NTA2LCAweDEwYjYwLCAweDE4NWI4LCAweDFjMmRlLCAweDEwYjMwLAorICAgIDB4MTg1OWMsIDB4MTBiMTgsIDB4MTg1OGUsIDB4MTBiMGMsIDB4MTBiMDYsIDB4MTBiYjgsCisgICAgMHgxODVkZSwgMHgxMGI5YywgMHgxMGI4ZSwgMHgxMGJkZSwgMHgxOGQ0MCwgMHgxYzZiMCwKKyAgICAweDFlMzVjLCAweDE4ZDIwLCAweDFjNjk4LCAweDE4ZDEwLCAweDFjNjhjLCAweDE4ZDA4LAorICAgIDB4MWM2ODYsIDB4MThkMDQsIDB4MTA5NDAsIDB4MTg0YjAsIDB4MWMyNWMsIDB4MTFiNDAsCisgICAgMHgxMDkyMCwgMHgxYzZkYywgMHgxYzI0ZSwgMHgxMWIyMCwgMHgxOGQ5OCwgMHgxYzZjZSwKKyAgICAweDExYjEwLCAweDEwOTA4LCAweDE4NDg2LCAweDExYjA4LCAweDE4ZDg2LCAweDEwOTAyLAorICAgIDB4MTA5YjAsIDB4MTg0ZGMsIDB4MTFiYjAsIDB4MTA5OTgsIDB4MTg0Y2UsIDB4MTFiOTgsCisgICAgMHgxOGRjZSwgMHgxMWI4YywgMHgxMDk4NiwgMHgxMDlkYywgMHgxMWJkYywgMHgxMDljZSwKKyAgICAweDExYmNlLCAweDFjZWEwLCAweDFlNzU4LCAweDFmM2FlLCAweDFjZTkwLCAweDFlNzRjLAorICAgIDB4MWNlODgsIDB4MWU3NDYsIDB4MWNlODQsIDB4MWNlODIsIDB4MThjYTAsIDB4MWM2NTgsCisgICAgMHgxOWRhMCwgMHgxOGM5MCwgMHgxYzY0YywgMHgxOWQ5MCwgMHgxY2VjYywgMHgxYzY0NiwKKyAgICAweDE5ZDg4LCAweDE4Yzg0LCAweDE5ZDg0LCAweDE4YzgyLCAweDE5ZDgyLCAweDEwOGEwLAorICAgIDB4MTg0NTgsIDB4MTE5YTAsIDB4MTA4OTAsIDB4MWM2NmUsIDB4MTNiYTAsIDB4MTE5OTAsCisgICAgMHgxOGNjYywgMHgxODQ0NiwgMHgxM2I5MCwgMHgxOWRjYywgMHgxMDg4NCwgMHgxM2I4OCwKKyAgICAweDExOTg0LCAweDEwODgyLCAweDExOTgyLCAweDEwOGQ4LCAweDE4NDZlLCAweDExOWQ4LAorICAgIDB4MTA4Y2MsIDB4MTNiZDgsIDB4MTE5Y2MsIDB4MTA4YzYsIDB4MTNiY2MsIDB4MTE5YzYsCisgICAgMHgxMDhlZSwgMHgxMTllZSwgMHgxM2JlZSwgMHgxZWY1MCwgMHgxZjdhYywgMHgxZWY0OCwKKyAgICAweDFmN2E2LCAweDFlZjQ0LCAweDFlZjQyLCAweDFjZTUwLCAweDFlNzJjLCAweDFkZWQwLAorICAgIDB4MWVmNmMsIDB4MWU3MjYsIDB4MWRlYzgsIDB4MWVmNjYsIDB4MWRlYzQsIDB4MWNlNDIsCisgICAgMHgxZGVjMiwgMHgxOGM1MCwgMHgxYzYyYywgMHgxOWNkMCwgMHgxOGM0OCwgMHgxYzYyNiwKKyAgICAweDFiZGQwLCAweDE5Y2M4LCAweDFjZTY2LCAweDFiZGM4LCAweDFkZWU2LCAweDE4YzQyLAorICAgIDB4MWJkYzQsIDB4MTljYzIsIDB4MWJkYzIsIDB4MTA4NTAsIDB4MTg0MmMsIDB4MTE4ZDAsCisgICAgMHgxMDg0OCwgMHgxODQyNiwgMHgxMzlkMCwgMHgxMThjOCwgMHgxOGM2NiwgMHgxN2JkMCwKKyAgICAweDEzOWM4LCAweDE5Y2U2LCAweDEwODQyLCAweDE3YmM4LCAweDFiZGU2LCAweDExOGMyLAorICAgIDB4MTdiYzQsIDB4MTA4NmMsIDB4MTE4ZWMsIDB4MTA4NjYsIDB4MTM5ZWMsIDB4MTE4ZTYsCisgICAgMHgxN2JlYywgMHgxMzllNiwgMHgxN2JlNiwgMHgxZWYyOCwgMHgxZjc5NiwgMHgxZWYyNCwKKyAgICAweDFlZjIyLCAweDFjZTI4LCAweDFlNzE2LCAweDFkZTY4LCAweDFlZjM2LCAweDFkZTY0LAorICAgIDB4MWNlMjIsIDB4MWRlNjIsIDB4MThjMjgsIDB4MWM2MTYsIDB4MTljNjgsIDB4MThjMjQsCisgICAgMHgxYmNlOCwgMHgxOWM2NCwgMHgxOGMyMiwgMHgxYmNlNCwgMHgxOWM2MiwgMHgxYmNlMiwKKyAgICAweDEwODI4LCAweDE4NDE2LCAweDExODY4LCAweDE4YzM2LCAweDEzOGU4LCAweDExODY0LAorICAgIDB4MTA4MjIsIDB4MTc5ZTgsIDB4MTM4ZTQsIDB4MTE4NjIsIDB4MTc5ZTQsIDB4MTM4ZTIsCisgICAgMHgxNzllMiwgMHgxMTg3NiwgMHgxNzlmNiwgMHgxZWYxMiwgMHgxZGUzNCwgMHgxZGUzMiwKKyAgICAweDE5YzM0LCAweDFiYzc0LCAweDFiYzcyLCAweDExODM0LCAweDEzODc0LCAweDE3OGY0LAorICAgIDB4MTc4ZjIsIDB4MTA1NDAsIDB4MTA1MjAsIDB4MTgyOTgsIDB4MTA1MTAsIDB4MTA1MDgsCisgICAgMHgxMDUwNCwgMHgxMDViMCwgMHgxMDU5OCwgMHgxMDU4YywgMHgxMDU4NiwgMHgxMDVkYywKKyAgICAweDEwNWNlLCAweDE4NmEwLCAweDE4NjkwLCAweDFjMzRjLCAweDE4Njg4LCAweDFjMzQ2LAorICAgIDB4MTg2ODQsIDB4MTg2ODIsIDB4MTA0YTAsIDB4MTgyNTgsIDB4MTBkYTAsIDB4MTg2ZDgsCisgICAgMHgxODI0YywgMHgxMGQ5MCwgMHgxODZjYywgMHgxMGQ4OCwgMHgxODZjNiwgMHgxMGQ4NCwKKyAgICAweDEwNDgyLCAweDEwZDgyLCAweDEwNGQ4LCAweDE4MjZlLCAweDEwZGQ4LCAweDE4NmVlLAorICAgIDB4MTBkY2MsIDB4MTA0YzYsIDB4MTBkYzYsIDB4MTA0ZWUsIDB4MTBkZWUsIDB4MWM3NTAsCisgICAgMHgxYzc0OCwgMHgxYzc0NCwgMHgxYzc0MiwgMHgxODY1MCwgMHgxOGVkMCwgMHgxYzc2YywKKyAgICAweDFjMzI2LCAweDE4ZWM4LCAweDFjNzY2LCAweDE4ZWM0LCAweDE4NjQyLCAweDE4ZWMyLAorICAgIDB4MTA0NTAsIDB4MTBjZDAsIDB4MTA0NDgsIDB4MTgyMjYsIDB4MTFkZDAsIDB4MTBjYzgsCisgICAgMHgxMDQ0NCwgMHgxMWRjOCwgMHgxMGNjNCwgMHgxMDQ0MiwgMHgxMWRjNCwgMHgxMGNjMiwKKyAgICAweDEwNDZjLCAweDEwY2VjLCAweDEwNDY2LCAweDExZGVjLCAweDEwY2U2LCAweDExZGU2LAorICAgIDB4MWU3YTgsIDB4MWU3YTQsIDB4MWU3YTIsIDB4MWM3MjgsIDB4MWNmNjgsIDB4MWU3YjYsCisgICAgMHgxY2Y2NCwgMHgxYzcyMiwgMHgxY2Y2MiwgMHgxODYyOCwgMHgxYzMxNiwgMHgxOGU2OCwKKyAgICAweDFjNzM2LCAweDE5ZWU4LCAweDE4ZTY0LCAweDE4NjIyLCAweDE5ZWU0LCAweDE4ZTYyLAorICAgIDB4MTllZTIsIDB4MTA0MjgsIDB4MTgyMTYsIDB4MTBjNjgsIDB4MTg2MzYsIDB4MTFjZTgsCisgICAgMHgxMGM2NCwgMHgxMDQyMiwgMHgxM2RlOCwgMHgxMWNlNCwgMHgxMGM2MiwgMHgxM2RlNCwKKyAgICAweDExY2UyLCAweDEwNDM2LCAweDEwYzc2LCAweDExY2Y2LCAweDEzZGY2LCAweDFmN2Q0LAorICAgIDB4MWY3ZDIsIDB4MWU3OTQsIDB4MWVmYjQsIDB4MWU3OTIsIDB4MWVmYjIsIDB4MWM3MTQsCisgICAgMHgxY2YzNCwgMHgxYzcxMiwgMHgxZGY3NCwgMHgxY2YzMiwgMHgxZGY3MiwgMHgxODYxNCwKKyAgICAweDE4ZTM0LCAweDE4NjEyLCAweDE5ZTc0LCAweDE4ZTMyLCAweDFiZWY0fSwKKyAgezB4MWY1NjAsIDB4MWZhYjgsIDB4MWVhNDAsIDB4MWY1MzAsIDB4MWZhOWMsIDB4MWVhMjAsCisgICAgMHgxZjUxOCwgMHgxZmE4ZSwgMHgxZWExMCwgMHgxZjUwYywgMHgxZWEwOCwgMHgxZjUwNiwKKyAgICAweDFlYTA0LCAweDFlYjYwLCAweDFmNWI4LCAweDFmYWRlLCAweDFkNjQwLCAweDFlYjMwLAorICAgIDB4MWY1OWMsIDB4MWQ2MjAsIDB4MWViMTgsIDB4MWY1OGUsIDB4MWQ2MTAsIDB4MWViMGMsCisgICAgMHgxZDYwOCwgMHgxZWIwNiwgMHgxZDYwNCwgMHgxZDc2MCwgMHgxZWJiOCwgMHgxZjVkZSwKKyAgICAweDFhZTQwLCAweDFkNzMwLCAweDFlYjljLCAweDFhZTIwLCAweDFkNzE4LCAweDFlYjhlLAorICAgIDB4MWFlMTAsIDB4MWQ3MGMsIDB4MWFlMDgsIDB4MWQ3MDYsIDB4MWFlMDQsIDB4MWFmNjAsCisgICAgMHgxZDdiOCwgMHgxZWJkZSwgMHgxNWU0MCwgMHgxYWYzMCwgMHgxZDc5YywgMHgxNWUyMCwKKyAgICAweDFhZjE4LCAweDFkNzhlLCAweDE1ZTEwLCAweDFhZjBjLCAweDE1ZTA4LCAweDFhZjA2LAorICAgIDB4MTVmNjAsIDB4MWFmYjgsIDB4MWQ3ZGUsIDB4MTVmMzAsIDB4MWFmOWMsIDB4MTVmMTgsCisgICAgMHgxYWY4ZSwgMHgxNWYwYywgMHgxNWZiOCwgMHgxYWZkZSwgMHgxNWY5YywgMHgxNWY4ZSwKKyAgICAweDFlOTQwLCAweDFmNGIwLCAweDFmYTVjLCAweDFlOTIwLCAweDFmNDk4LCAweDFmYTRlLAorICAgIDB4MWU5MTAsIDB4MWY0OGMsIDB4MWU5MDgsIDB4MWY0ODYsIDB4MWU5MDQsIDB4MWU5MDIsCisgICAgMHgxZDM0MCwgMHgxZTliMCwgMHgxZjRkYywgMHgxZDMyMCwgMHgxZTk5OCwgMHgxZjRjZSwKKyAgICAweDFkMzEwLCAweDFlOThjLCAweDFkMzA4LCAweDFlOTg2LCAweDFkMzA0LCAweDFkMzAyLAorICAgIDB4MWE3NDAsIDB4MWQzYjAsIDB4MWU5ZGMsIDB4MWE3MjAsIDB4MWQzOTgsIDB4MWU5Y2UsCisgICAgMHgxYTcxMCwgMHgxZDM4YywgMHgxYTcwOCwgMHgxZDM4NiwgMHgxYTcwNCwgMHgxYTcwMiwKKyAgICAweDE0ZjQwLCAweDFhN2IwLCAweDFkM2RjLCAweDE0ZjIwLCAweDFhNzk4LCAweDFkM2NlLAorICAgIDB4MTRmMTAsIDB4MWE3OGMsIDB4MTRmMDgsIDB4MWE3ODYsIDB4MTRmMDQsIDB4MTRmYjAsCisgICAgMHgxYTdkYywgMHgxNGY5OCwgMHgxYTdjZSwgMHgxNGY4YywgMHgxNGY4NiwgMHgxNGZkYywKKyAgICAweDE0ZmNlLCAweDFlOGEwLCAweDFmNDU4LCAweDFmYTJlLCAweDFlODkwLCAweDFmNDRjLAorICAgIDB4MWU4ODgsIDB4MWY0NDYsIDB4MWU4ODQsIDB4MWU4ODIsIDB4MWQxYTAsIDB4MWU4ZDgsCisgICAgMHgxZjQ2ZSwgMHgxZDE5MCwgMHgxZThjYywgMHgxZDE4OCwgMHgxZThjNiwgMHgxZDE4NCwKKyAgICAweDFkMTgyLCAweDFhM2EwLCAweDFkMWQ4LCAweDFlOGVlLCAweDFhMzkwLCAweDFkMWNjLAorICAgIDB4MWEzODgsIDB4MWQxYzYsIDB4MWEzODQsIDB4MWEzODIsIDB4MTQ3YTAsIDB4MWEzZDgsCisgICAgMHgxZDFlZSwgMHgxNDc5MCwgMHgxYTNjYywgMHgxNDc4OCwgMHgxYTNjNiwgMHgxNDc4NCwKKyAgICAweDE0NzgyLCAweDE0N2Q4LCAweDFhM2VlLCAweDE0N2NjLCAweDE0N2M2LCAweDE0N2VlLAorICAgIDB4MWU4NTAsIDB4MWY0MmMsIDB4MWU4NDgsIDB4MWY0MjYsIDB4MWU4NDQsIDB4MWU4NDIsCisgICAgMHgxZDBkMCwgMHgxZTg2YywgMHgxZDBjOCwgMHgxZTg2NiwgMHgxZDBjNCwgMHgxZDBjMiwKKyAgICAweDFhMWQwLCAweDFkMGVjLCAweDFhMWM4LCAweDFkMGU2LCAweDFhMWM0LCAweDFhMWMyLAorICAgIDB4MTQzZDAsIDB4MWExZWMsIDB4MTQzYzgsIDB4MWExZTYsIDB4MTQzYzQsIDB4MTQzYzIsCisgICAgMHgxNDNlYywgMHgxNDNlNiwgMHgxZTgyOCwgMHgxZjQxNiwgMHgxZTgyNCwgMHgxZTgyMiwKKyAgICAweDFkMDY4LCAweDFlODM2LCAweDFkMDY0LCAweDFkMDYyLCAweDFhMGU4LCAweDFkMDc2LAorICAgIDB4MWEwZTQsIDB4MWEwZTIsIDB4MTQxZTgsIDB4MWEwZjYsIDB4MTQxZTQsIDB4MTQxZTIsCisgICAgMHgxZTgxNCwgMHgxZTgxMiwgMHgxZDAzNCwgMHgxZDAzMiwgMHgxYTA3NCwgMHgxYTA3MiwKKyAgICAweDFlNTQwLCAweDFmMmIwLCAweDFmOTVjLCAweDFlNTIwLCAweDFmMjk4LCAweDFmOTRlLAorICAgIDB4MWU1MTAsIDB4MWYyOGMsIDB4MWU1MDgsIDB4MWYyODYsIDB4MWU1MDQsIDB4MWU1MDIsCisgICAgMHgxY2I0MCwgMHgxZTViMCwgMHgxZjJkYywgMHgxY2IyMCwgMHgxZTU5OCwgMHgxZjJjZSwKKyAgICAweDFjYjEwLCAweDFlNThjLCAweDFjYjA4LCAweDFlNTg2LCAweDFjYjA0LCAweDFjYjAyLAorICAgIDB4MTk3NDAsIDB4MWNiYjAsIDB4MWU1ZGMsIDB4MTk3MjAsIDB4MWNiOTgsIDB4MWU1Y2UsCisgICAgMHgxOTcxMCwgMHgxY2I4YywgMHgxOTcwOCwgMHgxY2I4NiwgMHgxOTcwNCwgMHgxOTcwMiwKKyAgICAweDEyZjQwLCAweDE5N2IwLCAweDFjYmRjLCAweDEyZjIwLCAweDE5Nzk4LCAweDFjYmNlLAorICAgIDB4MTJmMTAsIDB4MTk3OGMsIDB4MTJmMDgsIDB4MTk3ODYsIDB4MTJmMDQsIDB4MTJmYjAsCisgICAgMHgxOTdkYywgMHgxMmY5OCwgMHgxOTdjZSwgMHgxMmY4YywgMHgxMmY4NiwgMHgxMmZkYywKKyAgICAweDEyZmNlLCAweDFmNmEwLCAweDFmYjU4LCAweDE2YmYwLCAweDFmNjkwLCAweDFmYjRjLAorICAgIDB4MTY5ZjgsIDB4MWY2ODgsIDB4MWZiNDYsIDB4MTY4ZmMsIDB4MWY2ODQsIDB4MWY2ODIsCisgICAgMHgxZTRhMCwgMHgxZjI1OCwgMHgxZjkyZSwgMHgxZWRhMCwgMHgxZTQ5MCwgMHgxZmI2ZSwKKyAgICAweDFlZDkwLCAweDFmNmNjLCAweDFmMjQ2LCAweDFlZDg4LCAweDFlNDg0LCAweDFlZDg0LAorICAgIDB4MWU0ODIsIDB4MWVkODIsIDB4MWM5YTAsIDB4MWU0ZDgsIDB4MWYyNmUsIDB4MWRiYTAsCisgICAgMHgxYzk5MCwgMHgxZTRjYywgMHgxZGI5MCwgMHgxZWRjYywgMHgxZTRjNiwgMHgxZGI4OCwKKyAgICAweDFjOTg0LCAweDFkYjg0LCAweDFjOTgyLCAweDFkYjgyLCAweDE5M2EwLCAweDFjOWQ4LAorICAgIDB4MWU0ZWUsIDB4MWI3YTAsIDB4MTkzOTAsIDB4MWM5Y2MsIDB4MWI3OTAsIDB4MWRiY2MsCisgICAgMHgxYzljNiwgMHgxYjc4OCwgMHgxOTM4NCwgMHgxYjc4NCwgMHgxOTM4MiwgMHgxYjc4MiwKKyAgICAweDEyN2EwLCAweDE5M2Q4LCAweDFjOWVlLCAweDE2ZmEwLCAweDEyNzkwLCAweDE5M2NjLAorICAgIDB4MTZmOTAsIDB4MWI3Y2MsIDB4MTkzYzYsIDB4MTZmODgsIDB4MTI3ODQsIDB4MTZmODQsCisgICAgMHgxMjc4MiwgMHgxMjdkOCwgMHgxOTNlZSwgMHgxNmZkOCwgMHgxMjdjYywgMHgxNmZjYywKKyAgICAweDEyN2M2LCAweDE2ZmM2LCAweDEyN2VlLCAweDFmNjUwLCAweDFmYjJjLCAweDE2NWY4LAorICAgIDB4MWY2NDgsIDB4MWZiMjYsIDB4MTY0ZmMsIDB4MWY2NDQsIDB4MTY0N2UsIDB4MWY2NDIsCisgICAgMHgxZTQ1MCwgMHgxZjIyYywgMHgxZWNkMCwgMHgxZTQ0OCwgMHgxZjIyNiwgMHgxZWNjOCwKKyAgICAweDFmNjY2LCAweDFlY2M0LCAweDFlNDQyLCAweDFlY2MyLCAweDFjOGQwLCAweDFlNDZjLAorICAgIDB4MWQ5ZDAsIDB4MWM4YzgsIDB4MWU0NjYsIDB4MWQ5YzgsIDB4MWVjZTYsIDB4MWQ5YzQsCisgICAgMHgxYzhjMiwgMHgxZDljMiwgMHgxOTFkMCwgMHgxYzhlYywgMHgxYjNkMCwgMHgxOTFjOCwKKyAgICAweDFjOGU2LCAweDFiM2M4LCAweDFkOWU2LCAweDFiM2M0LCAweDE5MWMyLCAweDFiM2MyLAorICAgIDB4MTIzZDAsIDB4MTkxZWMsIDB4MTY3ZDAsIDB4MTIzYzgsIDB4MTkxZTYsIDB4MTY3YzgsCisgICAgMHgxYjNlNiwgMHgxNjdjNCwgMHgxMjNjMiwgMHgxNjdjMiwgMHgxMjNlYywgMHgxNjdlYywKKyAgICAweDEyM2U2LCAweDE2N2U2LCAweDFmNjI4LCAweDFmYjE2LCAweDE2MmZjLCAweDFmNjI0LAorICAgIDB4MTYyN2UsIDB4MWY2MjIsIDB4MWU0MjgsIDB4MWYyMTYsIDB4MWVjNjgsIDB4MWY2MzYsCisgICAgMHgxZWM2NCwgMHgxZTQyMiwgMHgxZWM2MiwgMHgxYzg2OCwgMHgxZTQzNiwgMHgxZDhlOCwKKyAgICAweDFjODY0LCAweDFkOGU0LCAweDFjODYyLCAweDFkOGUyLCAweDE5MGU4LCAweDFjODc2LAorICAgIDB4MWIxZTgsIDB4MWQ4ZjYsIDB4MWIxZTQsIDB4MTkwZTIsIDB4MWIxZTIsIDB4MTIxZTgsCisgICAgMHgxOTBmNiwgMHgxNjNlOCwgMHgxMjFlNCwgMHgxNjNlNCwgMHgxMjFlMiwgMHgxNjNlMiwKKyAgICAweDEyMWY2LCAweDE2M2Y2LCAweDFmNjE0LCAweDE2MTdlLCAweDFmNjEyLCAweDFlNDE0LAorICAgIDB4MWVjMzQsIDB4MWU0MTIsIDB4MWVjMzIsIDB4MWM4MzQsIDB4MWQ4NzQsIDB4MWM4MzIsCisgICAgMHgxZDg3MiwgMHgxOTA3NCwgMHgxYjBmNCwgMHgxOTA3MiwgMHgxYjBmMiwgMHgxMjBmNCwKKyAgICAweDE2MWY0LCAweDEyMGYyLCAweDE2MWYyLCAweDFmNjBhLCAweDFlNDBhLCAweDFlYzFhLAorICAgIDB4MWM4MWEsIDB4MWQ4M2EsIDB4MTkwM2EsIDB4MWIwN2EsIDB4MWUyYTAsIDB4MWYxNTgsCisgICAgMHgxZjhhZSwgMHgxZTI5MCwgMHgxZjE0YywgMHgxZTI4OCwgMHgxZjE0NiwgMHgxZTI4NCwKKyAgICAweDFlMjgyLCAweDFjNWEwLCAweDFlMmQ4LCAweDFmMTZlLCAweDFjNTkwLCAweDFlMmNjLAorICAgIDB4MWM1ODgsIDB4MWUyYzYsIDB4MWM1ODQsIDB4MWM1ODIsIDB4MThiYTAsIDB4MWM1ZDgsCisgICAgMHgxZTJlZSwgMHgxOGI5MCwgMHgxYzVjYywgMHgxOGI4OCwgMHgxYzVjNiwgMHgxOGI4NCwKKyAgICAweDE4YjgyLCAweDExN2EwLCAweDE4YmQ4LCAweDFjNWVlLCAweDExNzkwLCAweDE4YmNjLAorICAgIDB4MTE3ODgsIDB4MThiYzYsIDB4MTE3ODQsIDB4MTE3ODIsIDB4MTE3ZDgsIDB4MThiZWUsCisgICAgMHgxMTdjYywgMHgxMTdjNiwgMHgxMTdlZSwgMHgxZjM1MCwgMHgxZjlhYywgMHgxMzVmOCwKKyAgICAweDFmMzQ4LCAweDFmOWE2LCAweDEzNGZjLCAweDFmMzQ0LCAweDEzNDdlLCAweDFmMzQyLAorICAgIDB4MWUyNTAsIDB4MWYxMmMsIDB4MWU2ZDAsIDB4MWUyNDgsIDB4MWYxMjYsIDB4MWU2YzgsCisgICAgMHgxZjM2NiwgMHgxZTZjNCwgMHgxZTI0MiwgMHgxZTZjMiwgMHgxYzRkMCwgMHgxZTI2YywKKyAgICAweDFjZGQwLCAweDFjNGM4LCAweDFlMjY2LCAweDFjZGM4LCAweDFlNmU2LCAweDFjZGM0LAorICAgIDB4MWM0YzIsIDB4MWNkYzIsIDB4MTg5ZDAsIDB4MWM0ZWMsIDB4MTliZDAsIDB4MTg5YzgsCisgICAgMHgxYzRlNiwgMHgxOWJjOCwgMHgxY2RlNiwgMHgxOWJjNCwgMHgxODljMiwgMHgxOWJjMiwKKyAgICAweDExM2QwLCAweDE4OWVjLCAweDEzN2QwLCAweDExM2M4LCAweDE4OWU2LCAweDEzN2M4LAorICAgIDB4MTliZTYsIDB4MTM3YzQsIDB4MTEzYzIsIDB4MTM3YzIsIDB4MTEzZWMsIDB4MTM3ZWMsCisgICAgMHgxMTNlNiwgMHgxMzdlNiwgMHgxZmJhOCwgMHgxNzVmMCwgMHgxYmFmYywgMHgxZmJhNCwKKyAgICAweDE3NGY4LCAweDFiYTdlLCAweDFmYmEyLCAweDE3NDdjLCAweDE3NDNlLCAweDFmMzI4LAorICAgIDB4MWY5OTYsIDB4MTMyZmMsIDB4MWY3NjgsIDB4MWZiYjYsIDB4MTc2ZmMsIDB4MTMyN2UsCisgICAgMHgxZjc2NCwgMHgxZjMyMiwgMHgxNzY3ZSwgMHgxZjc2MiwgMHgxZTIyOCwgMHgxZjExNiwKKyAgICAweDFlNjY4LCAweDFlMjI0LCAweDFlZWU4LCAweDFmNzc2LCAweDFlMjIyLCAweDFlZWU0LAorICAgIDB4MWU2NjIsIDB4MWVlZTIsIDB4MWM0NjgsIDB4MWUyMzYsIDB4MWNjZTgsIDB4MWM0NjQsCisgICAgMHgxZGRlOCwgMHgxY2NlNCwgMHgxYzQ2MiwgMHgxZGRlNCwgMHgxY2NlMiwgMHgxZGRlMiwKKyAgICAweDE4OGU4LCAweDFjNDc2LCAweDE5OWU4LCAweDE4OGU0LCAweDFiYmU4LCAweDE5OWU0LAorICAgIDB4MTg4ZTIsIDB4MWJiZTQsIDB4MTk5ZTIsIDB4MWJiZTIsIDB4MTExZTgsIDB4MTg4ZjYsCisgICAgMHgxMzNlOCwgMHgxMTFlNCwgMHgxNzdlOCwgMHgxMzNlNCwgMHgxMTFlMiwgMHgxNzdlNCwKKyAgICAweDEzM2UyLCAweDE3N2UyLCAweDExMWY2LCAweDEzM2Y2LCAweDFmYjk0LCAweDE3MmY4LAorICAgIDB4MWI5N2UsIDB4MWZiOTIsIDB4MTcyN2MsIDB4MTcyM2UsIDB4MWYzMTQsIDB4MTMxN2UsCisgICAgMHgxZjczNCwgMHgxZjMxMiwgMHgxNzM3ZSwgMHgxZjczMiwgMHgxZTIxNCwgMHgxZTYzNCwKKyAgICAweDFlMjEyLCAweDFlZTc0LCAweDFlNjMyLCAweDFlZTcyLCAweDFjNDM0LCAweDFjYzc0LAorICAgIDB4MWM0MzIsIDB4MWRjZjQsIDB4MWNjNzIsIDB4MWRjZjIsIDB4MTg4NzQsIDB4MTk4ZjQsCisgICAgMHgxODg3MiwgMHgxYjlmNCwgMHgxOThmMiwgMHgxYjlmMiwgMHgxMTBmNCwgMHgxMzFmNCwKKyAgICAweDExMGYyLCAweDE3M2Y0LCAweDEzMWYyLCAweDE3M2YyLCAweDFmYjhhLCAweDE3MTdjLAorICAgIDB4MTcxM2UsIDB4MWYzMGEsIDB4MWY3MWEsIDB4MWUyMGEsIDB4MWU2MWEsIDB4MWVlM2EsCisgICAgMHgxYzQxYSwgMHgxY2MzYSwgMHgxZGM3YSwgMHgxODgzYSwgMHgxOTg3YSwgMHgxYjhmYSwKKyAgICAweDExMDdhLCAweDEzMGZhLCAweDE3MWZhLCAweDE3MGJlLCAweDFlMTUwLCAweDFmMGFjLAorICAgIDB4MWUxNDgsIDB4MWYwYTYsIDB4MWUxNDQsIDB4MWUxNDIsIDB4MWMyZDAsIDB4MWUxNmMsCisgICAgMHgxYzJjOCwgMHgxZTE2NiwgMHgxYzJjNCwgMHgxYzJjMiwgMHgxODVkMCwgMHgxYzJlYywKKyAgICAweDE4NWM4LCAweDFjMmU2LCAweDE4NWM0LCAweDE4NWMyLCAweDEwYmQwLCAweDE4NWVjLAorICAgIDB4MTBiYzgsIDB4MTg1ZTYsIDB4MTBiYzQsIDB4MTBiYzIsIDB4MTBiZWMsIDB4MTBiZTYsCisgICAgMHgxZjFhOCwgMHgxZjhkNiwgMHgxMWFmYywgMHgxZjFhNCwgMHgxMWE3ZSwgMHgxZjFhMiwKKyAgICAweDFlMTI4LCAweDFmMDk2LCAweDFlMzY4LCAweDFlMTI0LCAweDFlMzY0LCAweDFlMTIyLAorICAgIDB4MWUzNjIsIDB4MWMyNjgsIDB4MWUxMzYsIDB4MWM2ZTgsIDB4MWMyNjQsIDB4MWM2ZTQsCisgICAgMHgxYzI2MiwgMHgxYzZlMiwgMHgxODRlOCwgMHgxYzI3NiwgMHgxOGRlOCwgMHgxODRlNCwKKyAgICAweDE4ZGU0LCAweDE4NGUyLCAweDE4ZGUyLCAweDEwOWU4LCAweDE4NGY2LCAweDExYmU4LAorICAgIDB4MTA5ZTQsIDB4MTFiZTQsIDB4MTA5ZTIsIDB4MTFiZTIsIDB4MTA5ZjYsIDB4MTFiZjYsCisgICAgMHgxZjlkNCwgMHgxM2FmOCwgMHgxOWQ3ZSwgMHgxZjlkMiwgMHgxM2E3YywgMHgxM2EzZSwKKyAgICAweDFmMTk0LCAweDExOTdlLCAweDFmM2I0LCAweDFmMTkyLCAweDEzYjdlLCAweDFmM2IyLAorICAgIDB4MWUxMTQsIDB4MWUzMzQsIDB4MWUxMTIsIDB4MWU3NzQsIDB4MWUzMzIsIDB4MWU3NzIsCisgICAgMHgxYzIzNCwgMHgxYzY3NCwgMHgxYzIzMiwgMHgxY2VmNCwgMHgxYzY3MiwgMHgxY2VmMiwKKyAgICAweDE4NDc0LCAweDE4Y2Y0LCAweDE4NDcyLCAweDE5ZGY0LCAweDE4Y2YyLCAweDE5ZGYyLAorICAgIDB4MTA4ZjQsIDB4MTE5ZjQsIDB4MTA4ZjIsIDB4MTNiZjQsIDB4MTE5ZjIsIDB4MTNiZjIsCisgICAgMHgxN2FmMCwgMHgxYmQ3YywgMHgxN2E3OCwgMHgxYmQzZSwgMHgxN2EzYywgMHgxN2ExZSwKKyAgICAweDFmOWNhLCAweDEzOTdjLCAweDFmYmRhLCAweDE3YjdjLCAweDEzOTNlLCAweDE3YjNlLAorICAgIDB4MWYxOGEsIDB4MWYzOWEsIDB4MWY3YmEsIDB4MWUxMGEsIDB4MWUzMWEsIDB4MWU3M2EsCisgICAgMHgxZWY3YSwgMHgxYzIxYSwgMHgxYzYzYSwgMHgxY2U3YSwgMHgxZGVmYSwgMHgxODQzYSwKKyAgICAweDE4YzdhLCAweDE5Y2ZhLCAweDFiZGZhLCAweDEwODdhLCAweDExOGZhLCAweDEzOWZhLAorICAgIDB4MTc5NzgsIDB4MWJjYmUsIDB4MTc5M2MsIDB4MTc5MWUsIDB4MTM4YmUsIDB4MTc5YmUsCisgICAgMHgxNzhiYywgMHgxNzg5ZSwgMHgxNzg1ZSwgMHgxZTBhOCwgMHgxZTBhNCwgMHgxZTBhMiwKKyAgICAweDFjMTY4LCAweDFlMGI2LCAweDFjMTY0LCAweDFjMTYyLCAweDE4MmU4LCAweDFjMTc2LAorICAgIDB4MTgyZTQsIDB4MTgyZTIsIDB4MTA1ZTgsIDB4MTgyZjYsIDB4MTA1ZTQsIDB4MTA1ZTIsCisgICAgMHgxMDVmNiwgMHgxZjBkNCwgMHgxMGQ3ZSwgMHgxZjBkMiwgMHgxZTA5NCwgMHgxZTFiNCwKKyAgICAweDFlMDkyLCAweDFlMWIyLCAweDFjMTM0LCAweDFjMzc0LCAweDFjMTMyLCAweDFjMzcyLAorICAgIDB4MTgyNzQsIDB4MTg2ZjQsIDB4MTgyNzIsIDB4MTg2ZjIsIDB4MTA0ZjQsIDB4MTBkZjQsCisgICAgMHgxMDRmMiwgMHgxMGRmMiwgMHgxZjhlYSwgMHgxMWQ3YywgMHgxMWQzZSwgMHgxZjBjYSwKKyAgICAweDFmMWRhLCAweDFlMDhhLCAweDFlMTlhLCAweDFlM2JhLCAweDFjMTFhLCAweDFjMzNhLAorICAgIDB4MWM3N2EsIDB4MTgyM2EsIDB4MTg2N2EsIDB4MThlZmEsIDB4MTA0N2EsIDB4MTBjZmEsCisgICAgMHgxMWRmYSwgMHgxM2Q3OCwgMHgxOWViZSwgMHgxM2QzYywgMHgxM2QxZSwgMHgxMWNiZSwKKyAgICAweDEzZGJlLCAweDE3ZDcwLCAweDFiZWJjLCAweDE3ZDM4LCAweDFiZTllLCAweDE3ZDFjLAorICAgIDB4MTdkMGUsIDB4MTNjYmMsIDB4MTdkYmMsIDB4MTNjOWUsIDB4MTdkOWUsIDB4MTdjYjgsCisgICAgMHgxYmU1ZSwgMHgxN2M5YywgMHgxN2M4ZSwgMHgxM2M1ZSwgMHgxN2NkZSwgMHgxN2M1YywKKyAgICAweDE3YzRlLCAweDE3YzJlLCAweDFjMGI0LCAweDFjMGIyLCAweDE4MTc0LCAweDE4MTcyLAorICAgIDB4MTAyZjQsIDB4MTAyZjIsIDB4MWUwZGEsIDB4MWMwOWEsIDB4MWMxYmEsIDB4MTgxM2EsCisgICAgMHgxODM3YSwgMHgxMDI3YSwgMHgxMDZmYSwgMHgxMGViZSwgMHgxMWViYywgMHgxMWU5ZSwKKyAgICAweDEzZWI4LCAweDE5ZjVlLCAweDEzZTljLCAweDEzZThlLCAweDExZTVlLCAweDEzZWRlLAorICAgIDB4MTdlYjAsIDB4MWJmNWMsIDB4MTdlOTgsIDB4MWJmNGUsIDB4MTdlOGMsIDB4MTdlODYsCisgICAgMHgxM2U1YywgMHgxN2VkYywgMHgxM2U0ZSwgMHgxN2VjZSwgMHgxN2U1OCwgMHgxYmYyZSwKKyAgICAweDE3ZTRjLCAweDE3ZTQ2LCAweDEzZTJlLCAweDE3ZTZlLCAweDE3ZTJjLCAweDE3ZTI2LAorICAgIDB4MTBmNWUsIDB4MTFmNWMsIDB4MTFmNGUsIDB4MTNmNTgsIDB4MTlmYWUsIDB4MTNmNGMsCisgICAgMHgxM2Y0NiwgMHgxMWYyZSwgMHgxM2Y2ZSwgMHgxM2YyYywgMHgxM2YyNn0sCisgIHsweDFhYmUwLCAweDFkNWY4LCAweDE1M2MwLCAweDFhOWYwLCAweDFkNGZjLCAweDE1MWUwLAorICAgIDB4MWE4ZjgsIDB4MWQ0N2UsIDB4MTUwZjAsIDB4MWE4N2MsIDB4MTUwNzgsIDB4MWZhZDAsCisgICAgMHgxNWJlMCwgMHgxYWRmOCwgMHgxZmFjOCwgMHgxNTlmMCwgMHgxYWNmYywgMHgxZmFjNCwKKyAgICAweDE1OGY4LCAweDFhYzdlLCAweDFmYWMyLCAweDE1ODdjLCAweDFmNWQwLCAweDFmYWVjLAorICAgIDB4MTVkZjgsIDB4MWY1YzgsIDB4MWZhZTYsIDB4MTVjZmMsIDB4MWY1YzQsIDB4MTVjN2UsCisgICAgMHgxZjVjMiwgMHgxZWJkMCwgMHgxZjVlYywgMHgxZWJjOCwgMHgxZjVlNiwgMHgxZWJjNCwKKyAgICAweDFlYmMyLCAweDFkN2QwLCAweDFlYmVjLCAweDFkN2M4LCAweDFlYmU2LCAweDFkN2M0LAorICAgIDB4MWQ3YzIsIDB4MWFmZDAsIDB4MWQ3ZWMsIDB4MWFmYzgsIDB4MWQ3ZTYsIDB4MWFmYzQsCisgICAgMHgxNGJjMCwgMHgxYTVmMCwgMHgxZDJmYywgMHgxNDllMCwgMHgxYTRmOCwgMHgxZDI3ZSwKKyAgICAweDE0OGYwLCAweDFhNDdjLCAweDE0ODc4LCAweDFhNDNlLCAweDE0ODNjLCAweDFmYTY4LAorICAgIDB4MTRkZjAsIDB4MWE2ZmMsIDB4MWZhNjQsIDB4MTRjZjgsIDB4MWE2N2UsIDB4MWZhNjIsCisgICAgMHgxNGM3YywgMHgxNGMzZSwgMHgxZjRlOCwgMHgxZmE3NiwgMHgxNGVmYywgMHgxZjRlNCwKKyAgICAweDE0ZTdlLCAweDFmNGUyLCAweDFlOWU4LCAweDFmNGY2LCAweDFlOWU0LCAweDFlOWUyLAorICAgIDB4MWQzZTgsIDB4MWU5ZjYsIDB4MWQzZTQsIDB4MWQzZTIsIDB4MWE3ZTgsIDB4MWQzZjYsCisgICAgMHgxYTdlNCwgMHgxYTdlMiwgMHgxNDVlMCwgMHgxYTJmOCwgMHgxZDE3ZSwgMHgxNDRmMCwKKyAgICAweDFhMjdjLCAweDE0NDc4LCAweDFhMjNlLCAweDE0NDNjLCAweDE0NDFlLCAweDFmYTM0LAorICAgIDB4MTQ2ZjgsIDB4MWEzN2UsIDB4MWZhMzIsIDB4MTQ2N2MsIDB4MTQ2M2UsIDB4MWY0NzQsCisgICAgMHgxNDc3ZSwgMHgxZjQ3MiwgMHgxZThmNCwgMHgxZThmMiwgMHgxZDFmNCwgMHgxZDFmMiwKKyAgICAweDFhM2Y0LCAweDFhM2YyLCAweDE0MmYwLCAweDFhMTdjLCAweDE0Mjc4LCAweDFhMTNlLAorICAgIDB4MTQyM2MsIDB4MTQyMWUsIDB4MWZhMWEsIDB4MTQzN2MsIDB4MTQzM2UsIDB4MWY0M2EsCisgICAgMHgxZTg3YSwgMHgxZDBmYSwgMHgxNDE3OCwgMHgxYTBiZSwgMHgxNDEzYywgMHgxNDExZSwKKyAgICAweDE0MWJlLCAweDE0MGJjLCAweDE0MDllLCAweDEyYmMwLCAweDE5NWYwLCAweDFjYWZjLAorICAgIDB4MTI5ZTAsIDB4MTk0ZjgsIDB4MWNhN2UsIDB4MTI4ZjAsIDB4MTk0N2MsIDB4MTI4NzgsCisgICAgMHgxOTQzZSwgMHgxMjgzYywgMHgxZjk2OCwgMHgxMmRmMCwgMHgxOTZmYywgMHgxZjk2NCwKKyAgICAweDEyY2Y4LCAweDE5NjdlLCAweDFmOTYyLCAweDEyYzdjLCAweDEyYzNlLCAweDFmMmU4LAorICAgIDB4MWY5NzYsIDB4MTJlZmMsIDB4MWYyZTQsIDB4MTJlN2UsIDB4MWYyZTIsIDB4MWU1ZTgsCisgICAgMHgxZjJmNiwgMHgxZTVlNCwgMHgxZTVlMiwgMHgxY2JlOCwgMHgxZTVmNiwgMHgxY2JlNCwKKyAgICAweDFjYmUyLCAweDE5N2U4LCAweDFjYmY2LCAweDE5N2U0LCAweDE5N2UyLCAweDFiNWUwLAorICAgIDB4MWRhZjgsIDB4MWVkN2UsIDB4MTY5YzAsIDB4MWI0ZjAsIDB4MWRhN2MsIDB4MTY4ZTAsCisgICAgMHgxYjQ3OCwgMHgxZGEzZSwgMHgxNjg3MCwgMHgxYjQzYywgMHgxNjgzOCwgMHgxYjQxZSwKKyAgICAweDE2ODFjLCAweDEyNWUwLCAweDE5MmY4LCAweDFjOTdlLCAweDE2ZGUwLCAweDEyNGYwLAorICAgIDB4MTkyN2MsIDB4MTZjZjAsIDB4MWI2N2MsIDB4MTkyM2UsIDB4MTZjNzgsIDB4MTI0M2MsCisgICAgMHgxNmMzYywgMHgxMjQxZSwgMHgxNmMxZSwgMHgxZjkzNCwgMHgxMjZmOCwgMHgxOTM3ZSwKKyAgICAweDFmYjc0LCAweDFmOTMyLCAweDE2ZWY4LCAweDEyNjdjLCAweDFmYjcyLCAweDE2ZTdjLAorICAgIDB4MTI2M2UsIDB4MTZlM2UsIDB4MWYyNzQsIDB4MTI3N2UsIDB4MWY2ZjQsIDB4MWYyNzIsCisgICAgMHgxNmY3ZSwgMHgxZjZmMiwgMHgxZTRmNCwgMHgxZWRmNCwgMHgxZTRmMiwgMHgxZWRmMiwKKyAgICAweDFjOWY0LCAweDFkYmY0LCAweDFjOWYyLCAweDFkYmYyLCAweDE5M2Y0LCAweDE5M2YyLAorICAgIDB4MTY1YzAsIDB4MWIyZjAsIDB4MWQ5N2MsIDB4MTY0ZTAsIDB4MWIyNzgsIDB4MWQ5M2UsCisgICAgMHgxNjQ3MCwgMHgxYjIzYywgMHgxNjQzOCwgMHgxYjIxZSwgMHgxNjQxYywgMHgxNjQwZSwKKyAgICAweDEyMmYwLCAweDE5MTdjLCAweDE2NmYwLCAweDEyMjc4LCAweDE5MTNlLCAweDE2Njc4LAorICAgIDB4MWIzM2UsIDB4MTY2M2MsIDB4MTIyMWUsIDB4MTY2MWUsIDB4MWY5MWEsIDB4MTIzN2MsCisgICAgMHgxZmIzYSwgMHgxNjc3YywgMHgxMjMzZSwgMHgxNjczZSwgMHgxZjIzYSwgMHgxZjY3YSwKKyAgICAweDFlNDdhLCAweDFlY2ZhLCAweDFjOGZhLCAweDFkOWZhLCAweDE5MWZhLCAweDE2MmUwLAorICAgIDB4MWIxNzgsIDB4MWQ4YmUsIDB4MTYyNzAsIDB4MWIxM2MsIDB4MTYyMzgsIDB4MWIxMWUsCisgICAgMHgxNjIxYywgMHgxNjIwZSwgMHgxMjE3OCwgMHgxOTBiZSwgMHgxNjM3OCwgMHgxMjEzYywKKyAgICAweDE2MzNjLCAweDEyMTFlLCAweDE2MzFlLCAweDEyMWJlLCAweDE2M2JlLCAweDE2MTcwLAorICAgIDB4MWIwYmMsIDB4MTYxMzgsIDB4MWIwOWUsIDB4MTYxMWMsIDB4MTYxMGUsIDB4MTIwYmMsCisgICAgMHgxNjFiYywgMHgxMjA5ZSwgMHgxNjE5ZSwgMHgxNjBiOCwgMHgxYjA1ZSwgMHgxNjA5YywKKyAgICAweDE2MDhlLCAweDEyMDVlLCAweDE2MGRlLCAweDE2MDVjLCAweDE2MDRlLCAweDExNWUwLAorICAgIDB4MThhZjgsIDB4MWM1N2UsIDB4MTE0ZjAsIDB4MThhN2MsIDB4MTE0NzgsIDB4MThhM2UsCisgICAgMHgxMTQzYywgMHgxMTQxZSwgMHgxZjhiNCwgMHgxMTZmOCwgMHgxOGI3ZSwgMHgxZjhiMiwKKyAgICAweDExNjdjLCAweDExNjNlLCAweDFmMTc0LCAweDExNzdlLCAweDFmMTcyLCAweDFlMmY0LAorICAgIDB4MWUyZjIsIDB4MWM1ZjQsIDB4MWM1ZjIsIDB4MThiZjQsIDB4MThiZjIsIDB4MTM1YzAsCisgICAgMHgxOWFmMCwgMHgxY2Q3YywgMHgxMzRlMCwgMHgxOWE3OCwgMHgxY2QzZSwgMHgxMzQ3MCwKKyAgICAweDE5YTNjLCAweDEzNDM4LCAweDE5YTFlLCAweDEzNDFjLCAweDEzNDBlLCAweDExMmYwLAorICAgIDB4MTg5N2MsIDB4MTM2ZjAsIDB4MTEyNzgsIDB4MTg5M2UsIDB4MTM2NzgsIDB4MTliM2UsCisgICAgMHgxMzYzYywgMHgxMTIxZSwgMHgxMzYxZSwgMHgxZjg5YSwgMHgxMTM3YywgMHgxZjliYSwKKyAgICAweDEzNzdjLCAweDExMzNlLCAweDEzNzNlLCAweDFmMTNhLCAweDFmMzdhLCAweDFlMjdhLAorICAgIDB4MWU2ZmEsIDB4MWM0ZmEsIDB4MWNkZmEsIDB4MTg5ZmEsIDB4MWJhZTAsIDB4MWRkNzgsCisgICAgMHgxZWViZSwgMHgxNzRjMCwgMHgxYmE3MCwgMHgxZGQzYywgMHgxNzQ2MCwgMHgxYmEzOCwKKyAgICAweDFkZDFlLCAweDE3NDMwLCAweDFiYTFjLCAweDE3NDE4LCAweDFiYTBlLCAweDE3NDBjLAorICAgIDB4MTMyZTAsIDB4MTk5NzgsIDB4MWNjYmUsIDB4MTc2ZTAsIDB4MTMyNzAsIDB4MTk5M2MsCisgICAgMHgxNzY3MCwgMHgxYmIzYywgMHgxOTkxZSwgMHgxNzYzOCwgMHgxMzIxYywgMHgxNzYxYywKKyAgICAweDEzMjBlLCAweDE3NjBlLCAweDExMTc4LCAweDE4OGJlLCAweDEzMzc4LCAweDExMTNjLAorICAgIDB4MTc3NzgsIDB4MTMzM2MsIDB4MTExMWUsIDB4MTc3M2MsIDB4MTMzMWUsIDB4MTc3MWUsCisgICAgMHgxMTFiZSwgMHgxMzNiZSwgMHgxNzdiZSwgMHgxNzJjMCwgMHgxYjk3MCwgMHgxZGNiYywKKyAgICAweDE3MjYwLCAweDFiOTM4LCAweDFkYzllLCAweDE3MjMwLCAweDFiOTFjLCAweDE3MjE4LAorICAgIDB4MWI5MGUsIDB4MTcyMGMsIDB4MTcyMDYsIDB4MTMxNzAsIDB4MTk4YmMsIDB4MTczNzAsCisgICAgMHgxMzEzOCwgMHgxOTg5ZSwgMHgxNzMzOCwgMHgxYjk5ZSwgMHgxNzMxYywgMHgxMzEwZSwKKyAgICAweDE3MzBlLCAweDExMGJjLCAweDEzMWJjLCAweDExMDllLCAweDE3M2JjLCAweDEzMTllLAorICAgIDB4MTczOWUsIDB4MTcxNjAsIDB4MWI4YjgsIDB4MWRjNWUsIDB4MTcxMzAsIDB4MWI4OWMsCisgICAgMHgxNzExOCwgMHgxYjg4ZSwgMHgxNzEwYywgMHgxNzEwNiwgMHgxMzBiOCwgMHgxOTg1ZSwKKyAgICAweDE3MWI4LCAweDEzMDljLCAweDE3MTljLCAweDEzMDhlLCAweDE3MThlLCAweDExMDVlLAorICAgIDB4MTMwZGUsIDB4MTcxZGUsIDB4MTcwYjAsIDB4MWI4NWMsIDB4MTcwOTgsIDB4MWI4NGUsCisgICAgMHgxNzA4YywgMHgxNzA4NiwgMHgxMzA1YywgMHgxNzBkYywgMHgxMzA0ZSwgMHgxNzBjZSwKKyAgICAweDE3MDU4LCAweDFiODJlLCAweDE3MDRjLCAweDE3MDQ2LCAweDEzMDJlLCAweDE3MDZlLAorICAgIDB4MTcwMmMsIDB4MTcwMjYsIDB4MTBhZjAsIDB4MTg1N2MsIDB4MTBhNzgsIDB4MTg1M2UsCisgICAgMHgxMGEzYywgMHgxMGExZSwgMHgxMGI3YywgMHgxMGIzZSwgMHgxZjBiYSwgMHgxZTE3YSwKKyAgICAweDFjMmZhLCAweDE4NWZhLCAweDExYWUwLCAweDE4ZDc4LCAweDFjNmJlLCAweDExYTcwLAorICAgIDB4MThkM2MsIDB4MTFhMzgsIDB4MThkMWUsIDB4MTFhMWMsIDB4MTFhMGUsIDB4MTA5NzgsCisgICAgMHgxODRiZSwgMHgxMWI3OCwgMHgxMDkzYywgMHgxMWIzYywgMHgxMDkxZSwgMHgxMWIxZSwKKyAgICAweDEwOWJlLCAweDExYmJlLCAweDEzYWMwLCAweDE5ZDcwLCAweDFjZWJjLCAweDEzYTYwLAorICAgIDB4MTlkMzgsIDB4MWNlOWUsIDB4MTNhMzAsIDB4MTlkMWMsIDB4MTNhMTgsIDB4MTlkMGUsCisgICAgMHgxM2EwYywgMHgxM2EwNiwgMHgxMTk3MCwgMHgxOGNiYywgMHgxM2I3MCwgMHgxMTkzOCwKKyAgICAweDE4YzllLCAweDEzYjM4LCAweDExOTFjLCAweDEzYjFjLCAweDExOTBlLCAweDEzYjBlLAorICAgIDB4MTA4YmMsIDB4MTE5YmMsIDB4MTA4OWUsIDB4MTNiYmMsIDB4MTE5OWUsIDB4MTNiOWUsCisgICAgMHgxYmQ2MCwgMHgxZGViOCwgMHgxZWY1ZSwgMHgxN2E0MCwgMHgxYmQzMCwgMHgxZGU5YywKKyAgICAweDE3YTIwLCAweDFiZDE4LCAweDFkZThlLCAweDE3YTEwLCAweDFiZDBjLCAweDE3YTA4LAorICAgIDB4MWJkMDYsIDB4MTdhMDQsIDB4MTM5NjAsIDB4MTljYjgsIDB4MWNlNWUsIDB4MTdiNjAsCisgICAgMHgxMzkzMCwgMHgxOWM5YywgMHgxN2IzMCwgMHgxYmQ5YywgMHgxOWM4ZSwgMHgxN2IxOCwKKyAgICAweDEzOTBjLCAweDE3YjBjLCAweDEzOTA2LCAweDE3YjA2LCAweDExOGI4LCAweDE4YzVlLAorICAgIDB4MTM5YjgsIDB4MTE4OWMsIDB4MTdiYjgsIDB4MTM5OWMsIDB4MTE4OGUsIDB4MTdiOWMsCisgICAgMHgxMzk4ZSwgMHgxN2I4ZSwgMHgxMDg1ZSwgMHgxMThkZSwgMHgxMzlkZSwgMHgxN2JkZSwKKyAgICAweDE3OTQwLCAweDFiY2IwLCAweDFkZTVjLCAweDE3OTIwLCAweDFiYzk4LCAweDFkZTRlLAorICAgIDB4MTc5MTAsIDB4MWJjOGMsIDB4MTc5MDgsIDB4MWJjODYsIDB4MTc5MDQsIDB4MTc5MDIsCisgICAgMHgxMzhiMCwgMHgxOWM1YywgMHgxNzliMCwgMHgxMzg5OCwgMHgxOWM0ZSwgMHgxNzk5OCwKKyAgICAweDFiY2NlLCAweDE3OThjLCAweDEzODg2LCAweDE3OTg2LCAweDExODVjLCAweDEzOGRjLAorICAgIDB4MTE4NGUsIDB4MTc5ZGMsIDB4MTM4Y2UsIDB4MTc5Y2UsIDB4MTc4YTAsIDB4MWJjNTgsCisgICAgMHgxZGUyZSwgMHgxNzg5MCwgMHgxYmM0YywgMHgxNzg4OCwgMHgxYmM0NiwgMHgxNzg4NCwKKyAgICAweDE3ODgyLCAweDEzODU4LCAweDE5YzJlLCAweDE3OGQ4LCAweDEzODRjLCAweDE3OGNjLAorICAgIDB4MTM4NDYsIDB4MTc4YzYsIDB4MTE4MmUsIDB4MTM4NmUsIDB4MTc4ZWUsIDB4MTc4NTAsCisgICAgMHgxYmMyYywgMHgxNzg0OCwgMHgxYmMyNiwgMHgxNzg0NCwgMHgxNzg0MiwgMHgxMzgyYywKKyAgICAweDE3ODZjLCAweDEzODI2LCAweDE3ODY2LCAweDE3ODI4LCAweDFiYzE2LCAweDE3ODI0LAorICAgIDB4MTc4MjIsIDB4MTM4MTYsIDB4MTc4MzYsIDB4MTA1NzgsIDB4MTgyYmUsIDB4MTA1M2MsCisgICAgMHgxMDUxZSwgMHgxMDViZSwgMHgxMGQ3MCwgMHgxODZiYywgMHgxMGQzOCwgMHgxODY5ZSwKKyAgICAweDEwZDFjLCAweDEwZDBlLCAweDEwNGJjLCAweDEwZGJjLCAweDEwNDllLCAweDEwZDllLAorICAgIDB4MTFkNjAsIDB4MThlYjgsIDB4MWM3NWUsIDB4MTFkMzAsIDB4MThlOWMsIDB4MTFkMTgsCisgICAgMHgxOGU4ZSwgMHgxMWQwYywgMHgxMWQwNiwgMHgxMGNiOCwgMHgxODY1ZSwgMHgxMWRiOCwKKyAgICAweDEwYzljLCAweDExZDljLCAweDEwYzhlLCAweDExZDhlLCAweDEwNDVlLCAweDEwY2RlLAorICAgIDB4MTFkZGUsIDB4MTNkNDAsIDB4MTllYjAsIDB4MWNmNWMsIDB4MTNkMjAsIDB4MTllOTgsCisgICAgMHgxY2Y0ZSwgMHgxM2QxMCwgMHgxOWU4YywgMHgxM2QwOCwgMHgxOWU4NiwgMHgxM2QwNCwKKyAgICAweDEzZDAyLCAweDExY2IwLCAweDE4ZTVjLCAweDEzZGIwLCAweDExYzk4LCAweDE4ZTRlLAorICAgIDB4MTNkOTgsIDB4MTllY2UsIDB4MTNkOGMsIDB4MTFjODYsIDB4MTNkODYsIDB4MTBjNWMsCisgICAgMHgxMWNkYywgMHgxMGM0ZSwgMHgxM2RkYywgMHgxMWNjZSwgMHgxM2RjZSwgMHgxYmVhMCwKKyAgICAweDFkZjU4LCAweDFlZmFlLCAweDFiZTkwLCAweDFkZjRjLCAweDFiZTg4LCAweDFkZjQ2LAorICAgIDB4MWJlODQsIDB4MWJlODIsIDB4MTNjYTAsIDB4MTllNTgsIDB4MWNmMmUsIDB4MTdkYTAsCisgICAgMHgxM2M5MCwgMHgxOWU0YywgMHgxN2Q5MCwgMHgxYmVjYywgMHgxOWU0NiwgMHgxN2Q4OCwKKyAgICAweDEzYzg0LCAweDE3ZDg0LCAweDEzYzgyLCAweDE3ZDgyLCAweDExYzU4LCAweDE4ZTJlLAorICAgIDB4MTNjZDgsIDB4MTFjNGMsIDB4MTdkZDgsIDB4MTNjY2MsIDB4MTFjNDYsIDB4MTdkY2MsCisgICAgMHgxM2NjNiwgMHgxN2RjNiwgMHgxMGMyZSwgMHgxMWM2ZSwgMHgxM2NlZSwgMHgxN2RlZSwKKyAgICAweDFiZTUwLCAweDFkZjJjLCAweDFiZTQ4LCAweDFkZjI2LCAweDFiZTQ0LCAweDFiZTQyLAorICAgIDB4MTNjNTAsIDB4MTllMmMsIDB4MTdjZDAsIDB4MTNjNDgsIDB4MTllMjYsIDB4MTdjYzgsCisgICAgMHgxYmU2NiwgMHgxN2NjNCwgMHgxM2M0MiwgMHgxN2NjMiwgMHgxMWMyYywgMHgxM2M2YywKKyAgICAweDExYzI2LCAweDE3Y2VjLCAweDEzYzY2LCAweDE3Y2U2LCAweDFiZTI4LCAweDFkZjE2LAorICAgIDB4MWJlMjQsIDB4MWJlMjIsIDB4MTNjMjgsIDB4MTllMTYsIDB4MTdjNjgsIDB4MTNjMjQsCisgICAgMHgxN2M2NCwgMHgxM2MyMiwgMHgxN2M2MiwgMHgxMWMxNiwgMHgxM2MzNiwgMHgxN2M3NiwKKyAgICAweDFiZTE0LCAweDFiZTEyLCAweDEzYzE0LCAweDE3YzM0LCAweDEzYzEyLCAweDE3YzMyLAorICAgIDB4MTAyYmMsIDB4MTAyOWUsIDB4MTA2YjgsIDB4MTgzNWUsIDB4MTA2OWMsIDB4MTA2OGUsCisgICAgMHgxMDI1ZSwgMHgxMDZkZSwgMHgxMGViMCwgMHgxODc1YywgMHgxMGU5OCwgMHgxODc0ZSwKKyAgICAweDEwZThjLCAweDEwZTg2LCAweDEwNjVjLCAweDEwZWRjLCAweDEwNjRlLCAweDEwZWNlLAorICAgIDB4MTFlYTAsIDB4MThmNTgsIDB4MWM3YWUsIDB4MTFlOTAsIDB4MThmNGMsIDB4MTFlODgsCisgICAgMHgxOGY0NiwgMHgxMWU4NCwgMHgxMWU4MiwgMHgxMGU1OCwgMHgxODcyZSwgMHgxMWVkOCwKKyAgICAweDE4ZjZlLCAweDExZWNjLCAweDEwZTQ2LCAweDExZWM2LCAweDEwNjJlLCAweDEwZTZlLAorICAgIDB4MTFlZWUsIDB4MTlmNTAsIDB4MWNmYWMsIDB4MTlmNDgsIDB4MWNmYTYsIDB4MTlmNDQsCisgICAgMHgxOWY0MiwgMHgxMWU1MCwgMHgxOGYyYywgMHgxM2VkMCwgMHgxOWY2YywgMHgxOGYyNiwKKyAgICAweDEzZWM4LCAweDExZTQ0LCAweDEzZWM0LCAweDExZTQyLCAweDEzZWMyLCAweDEwZTJjLAorICAgIDB4MTFlNmMsIDB4MTBlMjYsIDB4MTNlZWMsIDB4MTFlNjYsIDB4MTNlZTYsIDB4MWRmYTgsCisgICAgMHgxZWZkNiwgMHgxZGZhNCwgMHgxZGZhMiwgMHgxOWYyOCwgMHgxY2Y5NiwgMHgxYmY2OCwKKyAgICAweDE5ZjI0LCAweDFiZjY0LCAweDE5ZjIyLCAweDFiZjYyLCAweDExZTI4LCAweDE4ZjE2LAorICAgIDB4MTNlNjgsIDB4MTFlMjQsIDB4MTdlZTgsIDB4MTNlNjQsIDB4MTFlMjIsIDB4MTdlZTQsCisgICAgMHgxM2U2MiwgMHgxN2VlMiwgMHgxMGUxNiwgMHgxMWUzNiwgMHgxM2U3NiwgMHgxN2VmNiwKKyAgICAweDFkZjk0LCAweDFkZjkyLCAweDE5ZjE0LCAweDFiZjM0LCAweDE5ZjEyLCAweDFiZjMyLAorICAgIDB4MTFlMTQsIDB4MTNlMzQsIDB4MTFlMTIsIDB4MTdlNzQsIDB4MTNlMzIsIDB4MTdlNzIsCisgICAgMHgxZGY4YSwgMHgxOWYwYSwgMHgxYmYxYSwgMHgxMWUwYSwgMHgxM2UxYSwgMHgxN2UzYSwKKyAgICAweDEwMzVjLCAweDEwMzRlLCAweDEwNzU4LCAweDE4M2FlLCAweDEwNzRjLCAweDEwNzQ2LAorICAgIDB4MTAzMmUsIDB4MTA3NmUsIDB4MTBmNTAsIDB4MTg3YWMsIDB4MTBmNDgsIDB4MTg3YTYsCisgICAgMHgxMGY0NCwgMHgxMGY0MiwgMHgxMDcyYywgMHgxMGY2YywgMHgxMDcyNiwgMHgxMGY2NiwKKyAgICAweDE4ZmE4LCAweDFjN2Q2LCAweDE4ZmE0LCAweDE4ZmEyLCAweDEwZjI4LCAweDE4Nzk2LAorICAgIDB4MTFmNjgsIDB4MThmYjYsIDB4MTFmNjQsIDB4MTBmMjIsIDB4MTFmNjIsIDB4MTA3MTYsCisgICAgMHgxMGYzNiwgMHgxMWY3NiwgMHgxY2ZkNCwgMHgxY2ZkMiwgMHgxOGY5NCwgMHgxOWZiNCwKKyAgICAweDE4ZjkyLCAweDE5ZmIyLCAweDEwZjE0LCAweDExZjM0LCAweDEwZjEyLCAweDEzZjc0LAorICAgIDB4MTFmMzIsIDB4MTNmNzIsIDB4MWNmY2EsIDB4MThmOGEsIDB4MTlmOWEsIDB4MTBmMGEsCisgICAgMHgxMWYxYSwgMHgxM2YzYSwgMHgxMDNhYywgMHgxMDNhNiwgMHgxMDdhOCwgMHgxODNkNiwKKyAgICAweDEwN2E0LCAweDEwN2EyLCAweDEwMzk2LCAweDEwN2I2LCAweDE4N2Q0LCAweDE4N2QyLAorICAgIDB4MTA3OTQsIDB4MTBmYjQsIDB4MTA3OTIsIDB4MTBmYjIsIDB4MWM3ZWF9fTsKKworc3RhdGljIGZsb2F0IFBSRUZFUlJFRF9SQVRJTyA9IDMuMGY7CitzdGF0aWMgZmxvYXQgREVGQVVMVF9NT0RVTEVfV0lEVEggPSAwLjM1N2Y7IC8vMXB4IGluIG1tCitzdGF0aWMgZmxvYXQgSEVJR0hUID0gMi4wZjsgLy9tbQorCitAaW50ZXJmYWNlIFpYUERGNDE3ICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYQmFyY29kZU1hdHJpeCAqYmFyY29kZU1hdHJpeDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBtaW5Db2xzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IG1heENvbHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbWluUm93czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBtYXhSb3dzOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWFBERjQxNworCistIChpZClpbml0IHsKKyAgcmV0dXJuIFtzZWxmIGluaXRXaXRoQ29tcGFjdDpOT107Cit9CisKKy0gKGlkKWluaXRXaXRoQ29tcGFjdDooQk9PTCljb21wYWN0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfY29tcGFjdCA9IGNvbXBhY3Q7CisgICAgX2NvbXBhY3Rpb24gPSBaWF9DT01QQUNUSU9OX0FVVE87CisgICAgX21pbkNvbHMgPSAyOworICAgIF9tYXhDb2xzID0gMzA7CisgICAgX21heFJvd3MgPSAzMDsKKyAgICBfbWluUm93cyA9IDI7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLyoqCisgKiBDYWxjdWxhdGVzIHRoZSBuZWNlc3NhcnkgbnVtYmVyIG9mIHJvd3MgYXMgZGVzY3JpYmVkIGluIGFubmV4IFEgb2YgSVNPL0lFQyAxNTQzODoyMDAxKEUpLgorICovCistIChpbnQpY2FsY3VsYXRlTnVtYmVyT2ZSb3dzTTooaW50KW0gazooaW50KWsgYzooaW50KWMgeworICBpbnQgciA9ICgobSArIDEgKyBrKSAvIGMpICsgMTsKKyAgaWYgKGMgKiByID49IChtICsgMSArIGsgKyBjKSkgeworICAgIHItLTsKKyAgfQorICByZXR1cm4gcjsKK30KKworLyoqCisgKiBDYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgcGFkIGNvZGV3b3JkcyBhcyBkZXNjcmliZWQgaW4gNC45LjIgb2YgSVNPL0lFQyAxNTQzODoyMDAxKEUpLgorICovCistIChpbnQpbnVtYmVyT2ZQYWRDb2Rld29yZHNNOihpbnQpbSBrOihpbnQpayBjOihpbnQpYyByOihpbnQpciB7CisgIGludCBuID0gYyAqIHIgLSBrOworICByZXR1cm4gbiA+IG0gKyAxID8gbiAtIG0gLSAxIDogMDsKK30KKworLSAodm9pZCllbmNvZGVDaGFyUGF0dGVybjooaW50KXBhdHRlcm4gbGVuOihpbnQpbGVuIGxvZ2ljOihaWEJhcmNvZGVSb3cgKilsb2dpYyB7CisgIGludCBtYXAgPSAxIDw8IChsZW4gLSAxKTsKKyAgQk9PTCBsYXN0ID0gKHBhdHRlcm4gJiBtYXApICE9IDA7IC8vSW5pdGlhbGl6ZSB0byBpbnZlcnNlIG9mIGZpcnN0IGJpdAorICBpbnQgd2lkdGggPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgQk9PTCBibGFjayA9IChwYXR0ZXJuICYgbWFwKSAhPSAwOworICAgIGlmIChsYXN0ID09IGJsYWNrKSB7CisgICAgICB3aWR0aCsrOworICAgIH0gZWxzZSB7CisgICAgICBbbG9naWMgYWRkQmFyOmxhc3Qgd2lkdGg6d2lkdGhdOworCisgICAgICBsYXN0ID0gYmxhY2s7CisgICAgICB3aWR0aCA9IDE7CisgICAgfQorICAgIG1hcCA+Pj0gMTsKKyAgfQorICBbbG9naWMgYWRkQmFyOmxhc3Qgd2lkdGg6d2lkdGhdOworfQorCistICh2b2lkKWVuY29kZUxvd0xldmVsOihOU1N0cmluZyAqKWZ1bGxDb2Rld29yZHMgYzooaW50KWMgcjooaW50KXIgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6KGludCllcnJvckNvcnJlY3Rpb25MZXZlbCBsb2dpYzooWlhCYXJjb2RlTWF0cml4ICopbG9naWMgeworICBpbnQgaWR4ID0gMDsKKyAgZm9yIChpbnQgeSA9IDA7IHkgPCByOyB5KyspIHsKKyAgICBpbnQgY2x1c3RlciA9IHkgJSAzOworICAgIFtsb2dpYyBzdGFydFJvd107CisgICAgW3NlbGYgZW5jb2RlQ2hhclBhdHRlcm46U1RBUlRfUEFUVEVSTl9JTlQgbGVuOjE3IGxvZ2ljOmxvZ2ljLmN1cnJlbnRSb3ddOworCisgICAgaW50IGxlZnQ7CisgICAgaW50IHJpZ2h0OworICAgIGlmIChjbHVzdGVyID09IDApIHsKKyAgICAgIGxlZnQgPSAoMzAgKiAoeSAvIDMpKSArICgociAtIDEpIC8gMyk7CisgICAgICByaWdodCA9ICgzMCAqICh5IC8gMykpICsgKGMgLSAxKTsKKyAgICB9IGVsc2UgaWYgKGNsdXN0ZXIgPT0gMSkgeworICAgICAgbGVmdCA9ICgzMCAqICh5IC8gMykpICsgKGVycm9yQ29ycmVjdGlvbkxldmVsICogMykgKyAoKHIgLSAxKSAlIDMpOworICAgICAgcmlnaHQgPSAoMzAgKiAoeSAvIDMpKSArICgociAtIDEpIC8gMyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxlZnQgPSAoMzAgKiAoeSAvIDMpKSArIChjIC0gMSk7CisgICAgICByaWdodCA9ICgzMCAqICh5IC8gMykpICsgKGVycm9yQ29ycmVjdGlvbkxldmVsICogMykgKyAoKHIgLSAxKSAlIDMpOworICAgIH0KKworICAgIGludCBwYXR0ZXJuID0gUERGX0NPREVXT1JEX1RBQkxFW2NsdXN0ZXJdW2xlZnRdOworICAgIFtzZWxmIGVuY29kZUNoYXJQYXR0ZXJuOnBhdHRlcm4gbGVuOjE3IGxvZ2ljOmxvZ2ljLmN1cnJlbnRSb3ddOworCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBjOyB4KyspIHsKKyAgICAgIHBhdHRlcm4gPSBQREZfQ09ERVdPUkRfVEFCTEVbY2x1c3Rlcl1bW2Z1bGxDb2Rld29yZHMgY2hhcmFjdGVyQXRJbmRleDppZHhdXTsKKyAgICAgIFtzZWxmIGVuY29kZUNoYXJQYXR0ZXJuOnBhdHRlcm4gbGVuOjE3IGxvZ2ljOmxvZ2ljLmN1cnJlbnRSb3ddOworICAgICAgaWR4Kys7CisgICAgfQorCisgICAgaWYgKHNlbGYuY29tcGFjdCkgeworICAgICAgW3NlbGYgZW5jb2RlQ2hhclBhdHRlcm46U1RPUF9QQVRURVJOX0lOVCBsZW46MSBsb2dpYzpsb2dpYy5jdXJyZW50Um93XTsKKyAgICB9IGVsc2UgeworICAgICAgcGF0dGVybiA9IFBERl9DT0RFV09SRF9UQUJMRVtjbHVzdGVyXVtyaWdodF07CisgICAgICBbc2VsZiBlbmNvZGVDaGFyUGF0dGVybjpwYXR0ZXJuIGxlbjoxNyBsb2dpYzpsb2dpYy5jdXJyZW50Um93XTsKKworICAgICAgW3NlbGYgZW5jb2RlQ2hhclBhdHRlcm46U1RPUF9QQVRURVJOX0lOVCBsZW46MTggbG9naWM6bG9naWMuY3VycmVudFJvd107CisgICAgfQorICB9Cit9CisKKy8qKgorICogR2VuZXJhdGVzIHRoZSBiYXJjb2RlIGxvZ2ljLgorICovCistIChCT09MKWdlbmVyYXRlQmFyY29kZUxvZ2ljOihOU1N0cmluZyAqKW1zZyBlcnJvckNvcnJlY3Rpb25MZXZlbDooaW50KWFuRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworCisgIC8vMS4gc3RlcDogSGlnaC1sZXZlbCBlbmNvZGluZworICBpbnQgZXJyb3JDb3JyZWN0aW9uQ29kZVdvcmRzID0gW1pYUERGNDE3RXJyb3JDb3JyZWN0aW9uIGVycm9yQ29ycmVjdGlvbkNvZGV3b3JkQ291bnQ6YW5FcnJvckNvcnJlY3Rpb25MZXZlbF07CisgIE5TU3RyaW5nICpoaWdoTGV2ZWwgPSBbWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyIGVuY29kZUhpZ2hMZXZlbDptc2cgY29tcGFjdGlvbjpzZWxmLmNvbXBhY3Rpb24gZXJyb3I6ZXJyb3JdOworICBpZiAoIWhpZ2hMZXZlbCkgeworICAgIHJldHVybiBOTzsKKyAgfQorICBpbnQgc291cmNlQ29kZVdvcmRzID0gKGludCloaWdoTGV2ZWwubGVuZ3RoOworCisgIGludCBkaW1lbnNpb25bMl0gPSB7MH07CisgIGlmICghW3NlbGYgZGV0ZXJtaW5lRGltZW5zaW9uczpkaW1lbnNpb24gc291cmNlQ29kZVdvcmRzOnNvdXJjZUNvZGVXb3JkcyBlcnJvckNvcnJlY3Rpb25Db2RlV29yZHM6ZXJyb3JDb3JyZWN0aW9uQ29kZVdvcmRzIGVycm9yOmVycm9yXSkgeworICAgIHJldHVybiBOTzsKKyAgfQorCisgIGludCBjb2xzID0gZGltZW5zaW9uWzBdOworICBpbnQgcm93cyA9IGRpbWVuc2lvblsxXTsKKworICBpbnQgcGFkID0gW3NlbGYgbnVtYmVyT2ZQYWRDb2Rld29yZHNNOnNvdXJjZUNvZGVXb3JkcyBrOmVycm9yQ29ycmVjdGlvbkNvZGVXb3JkcyBjOmNvbHMgcjpyb3dzXTsKKworICAvLzIuIHN0ZXA6IGNvbnN0cnVjdCBkYXRhIGNvZGV3b3JkcworICBpZiAoc291cmNlQ29kZVdvcmRzICsgZXJyb3JDb3JyZWN0aW9uQ29kZVdvcmRzICsgMSA+IDkyOSkgeyAvLyArMSBmb3Igc3ltYm9sIGxlbmd0aCBDVworICAgIE5TRGljdGlvbmFyeSAqdXNlckluZm8gPSBAe05TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRW5jb2RlZCBtZXNzYWdlIGNvbnRhaW5zIHRvIG1hbnkgY29kZSB3b3JkcywgbWVzc2FnZSB0byBiaWcgKCVkIGJ5dGVzKSIsIChpbnQpbXNnLmxlbmd0aF19OworCisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlpYRXJyb3JEb21haW4gY29kZTpaWFdyaXRlckVycm9yIHVzZXJJbmZvOnVzZXJJbmZvXTsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBpbnQgbiA9IHNvdXJjZUNvZGVXb3JkcyArIHBhZCArIDE7CisgIE5TTXV0YWJsZVN0cmluZyAqc2IgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhDYXBhY2l0eTpuXTsKKyAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpbl07CisgIFtzYiBhcHBlbmRGb3JtYXQ6QCIlQCIsIGhpZ2hMZXZlbF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFkOyBpKyspIHsKKyAgICBbc2IgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgOTAwXTsgLy9QQUQgY2hhcmFjdGVycworICB9CisgIE5TU3RyaW5nICpkYXRhQ29kZXdvcmRzID0gc2I7CisKKyAgLy8zLiBzdGVwOiBFcnJvciBjb3JyZWN0aW9uCisgIE5TU3RyaW5nICplYyA9IFtaWFBERjQxN0Vycm9yQ29ycmVjdGlvbiBnZW5lcmF0ZUVycm9yQ29ycmVjdGlvbjpkYXRhQ29kZXdvcmRzIGVycm9yQ29ycmVjdGlvbkxldmVsOmFuRXJyb3JDb3JyZWN0aW9uTGV2ZWxdOworICBOU1N0cmluZyAqZnVsbENvZGV3b3JkcyA9IFtkYXRhQ29kZXdvcmRzIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmVjXTsKKworICAvLzQuIHN0ZXA6IGxvdy1sZXZlbCBlbmNvZGluZworICBzZWxmLmJhcmNvZGVNYXRyaXggPSBbW1pYQmFyY29kZU1hdHJpeCBhbGxvY10gaW5pdFdpdGhIZWlnaHQ6cm93cyB3aWR0aDpjb2xzXTsKKyAgW3NlbGYgZW5jb2RlTG93TGV2ZWw6ZnVsbENvZGV3b3JkcyBjOmNvbHMgcjpyb3dzIGVycm9yQ29ycmVjdGlvbkxldmVsOmFuRXJyb3JDb3JyZWN0aW9uTGV2ZWwgbG9naWM6c2VsZi5iYXJjb2RlTWF0cml4XTsKKworICByZXR1cm4gWUVTOworfQorCisvKioKKyAqIERldGVybWluZSBvcHRpbWFsIG5yIG9mIGNvbHVtbnMgYW5kIHJvd3MgZm9yIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mCisgKiBjb2Rld29yZHMuCisgKi8KKy0gKEJPT0wpZGV0ZXJtaW5lRGltZW5zaW9uczooaW50ICopZGltZW5zaW9uIHNvdXJjZUNvZGVXb3JkczooaW50KXNvdXJjZUNvZGVXb3JkcyBlcnJvckNvcnJlY3Rpb25Db2RlV29yZHM6KGludCllcnJvckNvcnJlY3Rpb25Db2RlV29yZHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3J7CisgIGZsb2F0IHJhdGlvID0gMC4wZjsKKyAgQk9PTCByZXN1bHQgPSBOTzsKKworICBmb3IgKGludCBjb2xzID0gc2VsZi5taW5Db2xzOyBjb2xzIDw9IHNlbGYubWF4Q29sczsgY29scysrKSB7CisKKyAgICBpbnQgcm93cyA9IFtzZWxmIGNhbGN1bGF0ZU51bWJlck9mUm93c006c291cmNlQ29kZVdvcmRzIGs6ZXJyb3JDb3JyZWN0aW9uQ29kZVdvcmRzIGM6Y29sc107CisKKyAgICBpZiAocm93cyA8IHNlbGYubWluUm93cykgeworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHJvd3MgPiBzZWxmLm1heFJvd3MpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGZsb2F0IG5ld1JhdGlvID0gKCgxNyAqIGNvbHMgKyA2OSkgKiBERUZBVUxUX01PRFVMRV9XSURUSCkgLyAocm93cyAqIEhFSUdIVCk7CisKKyAgICAvLyBpZ25vcmUgaWYgcHJldmlvdXMgcmF0aW8gaXMgY2xvc2VyIHRvIHByZWZlcnJlZCByYXRpbworICAgIGlmIChyZXN1bHQgJiYgZmFic2YobmV3UmF0aW8gLSBQUkVGRVJSRURfUkFUSU8pID4gZmFic2YocmF0aW8gLSBQUkVGRVJSRURfUkFUSU8pKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICByYXRpbyA9IG5ld1JhdGlvOworICAgIGRpbWVuc2lvblswXSA9IGNvbHM7CisgICAgZGltZW5zaW9uWzFdID0gcm93czsKKyAgICByZXN1bHQgPSBZRVM7CisgIH0KKworICAvLyBIYW5kbGUgY2FzZSB3aGVuIG1pbiB2YWx1ZXMgd2VyZSBsYXJnZXIgdGhhbiBuZWNlc3NhcnkKKyAgaWYgKCFyZXN1bHQpIHsKKyAgICBpbnQgcm93cyA9IFtzZWxmIGNhbGN1bGF0ZU51bWJlck9mUm93c006c291cmNlQ29kZVdvcmRzIGs6ZXJyb3JDb3JyZWN0aW9uQ29kZVdvcmRzIGM6c2VsZi5taW5Db2xzXTsKKyAgICBpZiAocm93cyA8IHNlbGYubWluUm93cykgeworICAgICAgZGltZW5zaW9uWzBdID0gc2VsZi5taW5Db2xzOworICAgICAgZGltZW5zaW9uWzFdID0gc2VsZi5taW5Sb3dzOworICAgIH0KKyAgfQorCisgIGlmICghcmVzdWx0KSB7CisgICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IEB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleTogQCJVbmFibGUgdG8gZml0IG1lc3NhZ2UgaW4gY29sdW1ucyJ9OworCisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlpYRXJyb3JEb21haW4gY29kZTpaWFdyaXRlckVycm9yIHVzZXJJbmZvOnVzZXJJbmZvXTsKKyAgICByZXR1cm4gTk87CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIFNldHMgbWF4L21pbiByb3cvY29sIHZhbHVlcworICovCistICh2b2lkKXNldERpbWVuc2lvbnNXaXRoTWF4Q29sczooaW50KW1heENvbHMgbWluQ29sczooaW50KW1pbkNvbHMgbWF4Um93czooaW50KW1heFJvd3MgbWluUm93czooaW50KW1pblJvd3MgeworICBzZWxmLm1heENvbHMgPSBtYXhDb2xzOworICBzZWxmLm1pbkNvbHMgPSBtaW5Db2xzOworICBzZWxmLm1heFJvd3MgPSBtYXhSb3dzOworICBzZWxmLm1pblJvd3MgPSBtaW5Sb3dzOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhQREY0MTdFcnJvckNvcnJlY3Rpb24uaCBiL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNzU4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhQREY0MTdFcnJvckNvcnJlY3Rpb24uaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYgSmVyZW1pYXMgTWFlcmtpIGluIHBhcnQsIGFuZCBaWGluZyBBdXRob3JzIGluIHBhcnQKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogUERGNDE3IGVycm9yIGNvcnJlY3Rpb24gY29kZSBmb2xsb3dpbmcgdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgaW4gSVNPL0lFQyAxNTQzODoyMDAxKEUpIGluCisgKiBjaGFwdGVyIDQuMTAuCisgKi8KK0BpbnRlcmZhY2UgWlhQREY0MTdFcnJvckNvcnJlY3Rpb24gOiBOU09iamVjdAorCisrIChpbnQpZXJyb3JDb3JyZWN0aW9uQ29kZXdvcmRDb3VudDooaW50KWVycm9yQ29ycmVjdGlvbkxldmVsOworKyAoaW50KXJlY29tbWVuZGVkTWluaW11bUVycm9yQ29ycmVjdGlvbkxldmVsOihpbnQpbiBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKysgKE5TU3RyaW5nICopZ2VuZXJhdGVFcnJvckNvcnJlY3Rpb246KE5TU3RyaW5nICopZGF0YUNvZGV3b3JkcyBlcnJvckNvcnJlY3Rpb25MZXZlbDooaW50KWVycm9yQ29ycmVjdGlvbkxldmVsOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhQREY0MTdFcnJvckNvcnJlY3Rpb24ubSBiL1pYaW5nT2JqQy9wZGY0MTcvZW5jb2Rlci9aWFBERjQxN0Vycm9yQ29ycmVjdGlvbi5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZjVmNmUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhQREY0MTdFcnJvckNvcnJlY3Rpb24ubQpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2IEplcmVtaWFzIE1hZXJraSBpbiBwYXJ0LCBhbmQgWlhpbmcgQXV0aG9ycyBpbiBwYXJ0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhQREY0MTdFcnJvckNvcnJlY3Rpb24uaCIKKworLyoqCisgKiBUYWJsZXMgb2YgY29lZmZpY2llbnRzIGZvciBjYWxjdWxhdGluZyBlcnJvciBjb3JyZWN0aW9uIHdvcmRzCisgKiAoc2VlIGFubmV4IEYsIElTTy9JRUMgMTU0Mzg6MjAwMShFKSkKKyAqLworY29uc3QgaW50IEVDX0NPRUZGSUNJRU5UU1s5XVs1MTJdID0geworICB7MjcsIDkxN30sCisgIHs1MjIsIDU2OCwgNzIzLCA4MDl9LAorICB7MjM3LCAzMDgsIDQzNiwgMjg0LCA2NDYsIDY1MywgNDI4LCAzNzl9LAorICB7Mjc0LCA1NjIsIDIzMiwgNzU1LCA1OTksIDUyNCwgODAxLCAxMzIsIDI5NSwgMTE2LCA0NDIsIDQyOCwgMjk1LAorICAgIDQyLCAxNzYsIDY1fSwKKyAgezM2MSwgNTc1LCA5MjIsIDUyNSwgMTc2LCA1ODYsIDY0MCwgMzIxLCA1MzYsIDc0MiwgNjc3LCA3NDIsIDY4NywKKyAgICAyODQsIDE5MywgNTE3LCAyNzMsIDQ5NCwgMjYzLCAxNDcsIDU5MywgODAwLCA1NzEsIDMyMCwgODAzLAorICAgIDEzMywgMjMxLCAzOTAsIDY4NSwgMzMwLCA2MywgNDEwfSwKKyAgezUzOSwgNDIyLCA2LCA5MywgODYyLCA3NzEsIDQ1MywgMTA2LCA2MTAsIDI4NywgMTA3LCA1MDUsIDczMywKKyAgICA4NzcsIDM4MSwgNjEyLCA3MjMsIDQ3NiwgNDYyLCAxNzIsIDQzMCwgNjA5LCA4NTgsIDgyMiwgNTQzLAorICAgIDM3NiwgNTExLCA0MDAsIDY3MiwgNzYyLCAyODMsIDE4NCwgNDQwLCAzNSwgNTE5LCAzMSwgNDYwLAorICAgIDU5NCwgMjI1LCA1MzUsIDUxNywgMzUyLCA2MDUsIDE1OCwgNjUxLCAyMDEsIDQ4OCwgNTAyLCA2NDgsCisgICAgNzMzLCA3MTcsIDgzLCA0MDQsIDk3LCAyODAsIDc3MSwgODQwLCA2MjksIDQsIDM4MSwgODQzLAorICAgIDYyMywgMjY0LCA1NDN9LAorICB7NTIxLCAzMTAsIDg2NCwgNTQ3LCA4NTgsIDU4MCwgMjk2LCAzNzksIDUzLCA3NzksIDg5NywgNDQ0LCA0MDAsCisgICAgOTI1LCA3NDksIDQxNSwgODIyLCA5MywgMjE3LCAyMDgsIDkyOCwgMjQ0LCA1ODMsIDYyMCwgMjQ2LAorICAgIDE0OCwgNDQ3LCA2MzEsIDI5MiwgOTA4LCA0OTAsIDcwNCwgNTE2LCAyNTgsIDQ1NywgOTA3LCA1OTQsCisgICAgNzIzLCA2NzQsIDI5MiwgMjcyLCA5NiwgNjg0LCA0MzIsIDY4NiwgNjA2LCA4NjAsIDU2OSwgMTkzLAorICAgIDIxOSwgMTI5LCAxODYsIDIzNiwgMjg3LCAxOTIsIDc3NSwgMjc4LCAxNzMsIDQwLCAzNzksIDcxMiwKKyAgICA0NjMsIDY0NiwgNzc2LCAxNzEsIDQ5MSwgMjk3LCA3NjMsIDE1NiwgNzMyLCA5NSwgMjcwLCA0NDcsCisgICAgOTAsIDUwNywgNDgsIDIyOCwgODIxLCA4MDgsIDg5OCwgNzg0LCA2NjMsIDYyNywgMzc4LCAzODIsCisgICAgMjYyLCAzODAsIDYwMiwgNzU0LCAzMzYsIDg5LCA2MTQsIDg3LCA0MzIsIDY3MCwgNjE2LCAxNTcsCisgICAgMzc0LCAyNDIsIDcyNiwgNjAwLCAyNjksIDM3NSwgODk4LCA4NDUsIDQ1NCwgMzU0LCAxMzAsIDgxNCwKKyAgICA1ODcsIDgwNCwgMzQsIDIxMSwgMzMwLCA1MzksIDI5NywgODI3LCA4NjUsIDM3LCA1MTcsIDgzNCwKKyAgICAzMTUsIDU1MCwgODYsIDgwMSwgNCwgMTA4LCA1Mzl9LAorICB7NTI0LCA4OTQsIDc1LCA3NjYsIDg4MiwgODU3LCA3NCwgMjA0LCA4MiwgNTg2LCA3MDgsIDI1MCwgOTA1LAorICAgIDc4NiwgMTM4LCA3MjAsIDg1OCwgMTk0LCAzMTEsIDkxMywgMjc1LCAxOTAsIDM3NSwgODUwLCA0MzgsCisgICAgNzMzLCAxOTQsIDI4MCwgMjAxLCAyODAsIDgyOCwgNzU3LCA3MTAsIDgxNCwgOTE5LCA4OSwgNjgsCisgICAgNTY5LCAxMSwgMjA0LCA3OTYsIDYwNSwgNTQwLCA5MTMsIDgwMSwgNzAwLCA3OTksIDEzNywgNDM5LAorICAgIDQxOCwgNTkyLCA2NjgsIDM1MywgODU5LCAzNzAsIDY5NCwgMzI1LCAyNDAsIDIxNiwgMjU3LCAyODQsCisgICAgNTQ5LCAyMDksIDg4NCwgMzE1LCA3MCwgMzI5LCA3OTMsIDQ5MCwgMjc0LCA4NzcsIDE2MiwgNzQ5LAorICAgIDgxMiwgNjg0LCA0NjEsIDMzNCwgMzc2LCA4NDksIDUyMSwgMzA3LCAyOTEsIDgwMywgNzEyLCAxOSwKKyAgICAzNTgsIDM5OSwgOTA4LCAxMDMsIDUxMSwgNTEsIDgsIDUxNywgMjI1LCAyODksIDQ3MCwgNjM3LAorICAgIDczMSwgNjYsIDI1NSwgOTE3LCAyNjksIDQ2MywgODMwLCA3MzAsIDQzMywgODQ4LCA1ODUsIDEzNiwKKyAgICA1MzgsIDkwNiwgOTAsIDIsIDI5MCwgNzQzLCAxOTksIDY1NSwgOTAzLCAzMjksIDQ5LCA4MDIsCisgICAgNTgwLCAzNTUsIDU4OCwgMTg4LCA0NjIsIDEwLCAxMzQsIDYyOCwgMzIwLCA0NzksIDEzMCwgNzM5LAorICAgIDcxLCAyNjMsIDMxOCwgMzc0LCA2MDEsIDE5MiwgNjA1LCAxNDIsIDY3MywgNjg3LCAyMzQsIDcyMiwKKyAgICAzODQsIDE3NywgNzUyLCA2MDcsIDY0MCwgNDU1LCAxOTMsIDY4OSwgNzA3LCA4MDUsIDY0MSwgNDgsCisgICAgNjAsIDczMiwgNjIxLCA4OTUsIDU0NCwgMjYxLCA4NTIsIDY1NSwgMzA5LCA2OTcsIDc1NSwgNzU2LAorICAgIDYwLCAyMzEsIDc3MywgNDM0LCA0MjEsIDcyNiwgNTI4LCA1MDMsIDExOCwgNDksIDc5NSwgMzIsCisgICAgMTQ0LCA1MDAsIDIzOCwgODM2LCAzOTQsIDI4MCwgNTY2LCAzMTksIDksIDY0NywgNTUwLCA3MywKKyAgICA5MTQsIDM0MiwgMTI2LCAzMiwgNjgxLCAzMzEsIDc5MiwgNjIwLCA2MCwgNjA5LCA0NDEsIDE4MCwKKyAgICA3OTEsIDg5MywgNzU0LCA2MDUsIDM4MywgMjI4LCA3NDksIDc2MCwgMjEzLCA1NCwgMjk3LCAxMzQsCisgICAgNTQsIDgzNCwgMjk5LCA5MjIsIDE5MSwgOTEwLCA1MzIsIDYwOSwgODI5LCAxODksIDIwLCAxNjcsCisgICAgMjksIDg3MiwgNDQ5LCA4MywgNDAyLCA0MSwgNjU2LCA1MDUsIDU3OSwgNDgxLCAxNzMsIDQwNCwKKyAgICAyNTEsIDY4OCwgOTUsIDQ5NywgNTU1LCA2NDIsIDU0MywgMzA3LCAxNTksIDkyNCwgNTU4LCA2NDgsCisgICAgNTUsIDQ5NywgMTB9LAorICB7MzUyLCA3NywgMzczLCA1MDQsIDM1LCA1OTksIDQyOCwgMjA3LCA0MDksIDU3NCwgMTE4LCA0OTgsIDI4NSwKKyAgICAzODAsIDM1MCwgNDkyLCAxOTcsIDI2NSwgOTIwLCAxNTUsIDkxNCwgMjk5LCAyMjksIDY0MywgMjk0LAorICAgIDg3MSwgMzA2LCA4OCwgODcsIDE5MywgMzUyLCA3ODEsIDg0NiwgNzUsIDMyNywgNTIwLCA0MzUsCisgICAgNTQzLCAyMDMsIDY2NiwgMjQ5LCAzNDYsIDc4MSwgNjIxLCA2NDAsIDI2OCwgNzk0LCA1MzQsIDUzOSwKKyAgICA3ODEsIDQwOCwgMzkwLCA2NDQsIDEwMiwgNDc2LCA0OTksIDI5MCwgNjMyLCA1NDUsIDM3LCA4NTgsCisgICAgOTE2LCA1NTIsIDQxLCA1NDIsIDI4OSwgMTIyLCAyNzIsIDM4MywgODAwLCA0ODUsIDk4LCA3NTIsCisgICAgNDcyLCA3NjEsIDEwNywgNzg0LCA4NjAsIDY1OCwgNzQxLCAyOTAsIDIwNCwgNjgxLCA0MDcsIDg1NSwKKyAgICA4NSwgOTksIDYyLCA0ODIsIDE4MCwgMjAsIDI5NywgNDUxLCA1OTMsIDkxMywgMTQyLCA4MDgsCisgICAgNjg0LCAyODcsIDUzNiwgNTYxLCA3NiwgNjUzLCA4OTksIDcyOSwgNTY3LCA3NDQsIDM5MCwgNTEzLAorICAgIDE5MiwgNTE2LCAyNTgsIDI0MCwgNTE4LCA3OTQsIDM5NSwgNzY4LCA4NDgsIDUxLCA2MTAsIDM4NCwKKyAgICAxNjgsIDE5MCwgODI2LCAzMjgsIDU5NiwgNzg2LCAzMDMsIDU3MCwgMzgxLCA0MTUsIDY0MSwgMTU2LAorICAgIDIzNywgMTUxLCA0MjksIDUzMSwgMjA3LCA2NzYsIDcxMCwgODksIDE2OCwgMzA0LCA0MDIsIDQwLAorICAgIDcwOCwgNTc1LCAxNjIsIDg2NCwgMjI5LCA2NSwgODYxLCA4NDEsIDUxMiwgMTY0LCA0NzcsIDIyMSwKKyAgICA5MiwgMzU4LCA3ODUsIDI4OCwgMzU3LCA4NTAsIDgzNiwgODI3LCA3MzYsIDcwNywgOTQsIDgsCisgICAgNDk0LCAxMTQsIDUyMSwgMiwgNDk5LCA4NTEsIDU0MywgMTUyLCA3MjksIDc3MSwgOTUsIDI0OCwKKyAgICAzNjEsIDU3OCwgMzIzLCA4NTYsIDc5NywgMjg5LCA1MSwgNjg0LCA0NjYsIDUzMywgODIwLCA2NjksCisgICAgNDUsIDkwMiwgNDUyLCAxNjcsIDM0MiwgMjQ0LCAxNzMsIDM1LCA0NjMsIDY1MSwgNTEsIDY5OSwKKyAgICA1OTEsIDQ1MiwgNTc4LCAzNywgMTI0LCAyOTgsIDMzMiwgNTUyLCA0MywgNDI3LCAxMTksIDY2MiwKKyAgICA3NzcsIDQ3NSwgODUwLCA3NjQsIDM2NCwgNTc4LCA5MTEsIDI4MywgNzExLCA0NzIsIDQyMCwgMjQ1LAorICAgIDI4OCwgNTk0LCAzOTQsIDUxMSwgMzI3LCA1ODksIDc3NywgNjk5LCA2ODgsIDQzLCA0MDgsIDg0MiwKKyAgICAzODMsIDcyMSwgNTIxLCA1NjAsIDY0NCwgNzE0LCA1NTksIDYyLCAxNDUsIDg3MywgNjYzLCA3MTMsCisgICAgMTU5LCA2NzIsIDcyOSwgNjI0LCA1OSwgMTkzLCA0MTcsIDE1OCwgMjA5LCA1NjMsIDU2NCwgMzQzLAorICAgIDY5MywgMTA5LCA2MDgsIDU2MywgMzY1LCAxODEsIDc3MiwgNjc3LCAzMTAsIDI0OCwgMzUzLCA3MDgsCisgICAgNDEwLCA1NzksIDg3MCwgNjE3LCA4NDEsIDYzMiwgODYwLCAyODksIDUzNiwgMzUsIDc3NywgNjE4LAorICAgIDU4NiwgNDI0LCA4MzMsIDc3LCA1OTcsIDM0NiwgMjY5LCA3NTcsIDYzMiwgNjk1LCA3NTEsIDMzMSwKKyAgICAyNDcsIDE4NCwgNDUsIDc4NywgNjgwLCAxOCwgNjYsIDQwNywgMzY5LCA1NCwgNDkyLCAyMjgsCisgICAgNjEzLCA4MzAsIDkyMiwgNDM3LCA1MTksIDY0NCwgOTA1LCA3ODksIDQyMCwgMzA1LCA0NDEsIDIwNywKKyAgICAzMDAsIDg5MiwgODI3LCAxNDEsIDUzNywgMzgxLCA2NjIsIDUxMywgNTYsIDI1MiwgMzQxLCAyNDIsCisgICAgNzk3LCA4MzgsIDgzNywgNzIwLCAyMjQsIDMwNywgNjMxLCA2MSwgODcsIDU2MCwgMzEwLCA3NTYsCisgICAgNjY1LCAzOTcsIDgwOCwgODUxLCAzMDksIDQ3MywgNzk1LCAzNzgsIDMxLCA2NDcsIDkxNSwgNDU5LAorICAgIDgwNiwgNTkwLCA3MzEsIDQyNSwgMjE2LCA1NDgsIDI0OSwgMzIxLCA4ODEsIDY5OSwgNTM1LCA2NzMsCisgICAgNzgyLCAyMTAsIDgxNSwgOTA1LCAzMDMsIDg0MywgOTIyLCAyODEsIDczLCA0NjksIDc5MSwgNjYwLAorICAgIDE2MiwgNDk4LCAzMDgsIDE1NSwgNDIyLCA5MDcsIDgxNywgMTg3LCA2MiwgMTYsIDQyNSwgNTM1LAorICAgIDMzNiwgMjg2LCA0MzcsIDM3NSwgMjczLCA2MTAsIDI5NiwgMTgzLCA5MjMsIDExNiwgNjY3LCA3NTEsCisgICAgMzUzLCA2MiwgMzY2LCA2OTEsIDM3OSwgNjg3LCA4NDIsIDM3LCAzNTcsIDcyMCwgNzQyLCAzMzAsCisgICAgNSwgMzksIDkyMywgMzExLCA0MjQsIDI0MiwgNzQ5LCAzMjEsIDU0LCA2NjksIDMxNiwgMzQyLAorICAgIDI5OSwgNTM0LCAxMDUsIDY2NywgNDg4LCA2NDAsIDY3MiwgNTc2LCA1NDAsIDMxNiwgNDg2LCA3MjEsCisgICAgNjEwLCA0NiwgNjU2LCA0NDcsIDE3MSwgNjE2LCA0NjQsIDE5MCwgNTMxLCAyOTcsIDMyMSwgNzYyLAorICAgIDc1MiwgNTMzLCAxNzUsIDEzNCwgMTQsIDM4MSwgNDMzLCA3MTcsIDQ1LCAxMTEsIDIwLCA1OTYsCisgICAgMjg0LCA3MzYsIDEzOCwgNjQ2LCA0MTEsIDg3NywgNjY5LCAxNDEsIDkxOSwgNDUsIDc4MCwgNDA3LAorICAgIDE2NCwgMzMyLCA4OTksIDE2NSwgNzI2LCA2MDAsIDMyNSwgNDk4LCA2NTUsIDM1NywgNzUyLCA3NjgsCisgICAgMjIzLCA4NDksIDY0NywgNjMsIDMxMCwgODYzLCAyNTEsIDM2NiwgMzA0LCAyODIsIDczOCwgNjc1LAorICAgIDQxMCwgMzg5LCAyNDQsIDMxLCAxMjEsIDMwMywgMjYzfX07CisKK0BpbXBsZW1lbnRhdGlvbiBaWFBERjQxN0Vycm9yQ29ycmVjdGlvbgorCisvKioKKyAqIERldGVybWluZXMgdGhlIG51bWJlciBvZiBlcnJvciBjb3JyZWN0aW9uIGNvZGV3b3JkcyBmb3IgYSBzcGVjaWZpZWQgZXJyb3IgY29ycmVjdGlvbgorICogbGV2ZWwuCisgKi8KKysgKGludCllcnJvckNvcnJlY3Rpb25Db2Rld29yZENvdW50OihpbnQpZXJyb3JDb3JyZWN0aW9uTGV2ZWwgeworICBpZiAoZXJyb3JDb3JyZWN0aW9uTGV2ZWwgPCAwIHx8IGVycm9yQ29ycmVjdGlvbkxldmVsID4gOCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJFcnJvciBjb3JyZWN0aW9uIGxldmVsIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA4ISJdOworICB9CisgIHJldHVybiAxIDw8IChlcnJvckNvcnJlY3Rpb25MZXZlbCArIDEpOworfQorCisvKioKKyAqIFJldHVybnMgdGhlIHJlY29tbWVuZGVkIG1pbmltdW0gZXJyb3IgY29ycmVjdGlvbiBsZXZlbCBhcyBkZXNjcmliZWQgaW4gYW5uZXggRSBvZgorICogSVNPL0lFQyAxNTQzODoyMDAxKEUpLgorICovCisrIChpbnQpcmVjb21tZW5kZWRNaW5pbXVtRXJyb3JDb3JyZWN0aW9uTGV2ZWw6KGludCluIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKG4gPD0gMCkgeworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJuIG11c3QgYmUgPiAwIl07CisgIH0KKyAgaWYgKG4gPD0gNDApIHsKKyAgICByZXR1cm4gMjsKKyAgfQorICBpZiAobiA8PSAxNjApIHsKKyAgICByZXR1cm4gMzsKKyAgfQorICBpZiAobiA8PSAzMjApIHsKKyAgICByZXR1cm4gNDsKKyAgfQorICBpZiAobiA8PSA4NjMpIHsKKyAgICByZXR1cm4gNTsKKyAgfQorICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAIk5vIHJlY29tbWVuZGF0aW9uIHBvc3NpYmxlIn07CisKKyAgaWYgKGVycm9yKSAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlpYRXJyb3JEb21haW4gY29kZTpaWFdyaXRlckVycm9yIHVzZXJJbmZvOnVzZXJJbmZvXTsKKyAgcmV0dXJuIC0xOworfQorCisvKioKKyAqIEdlbmVyYXRlcyB0aGUgZXJyb3IgY29ycmVjdGlvbiBjb2Rld29yZHMgYWNjb3JkaW5nIHRvIDQuMTAgaW4gSVNPL0lFQyAxNTQzODoyMDAxKEUpLgorICovCisrIChOU1N0cmluZyAqKWdlbmVyYXRlRXJyb3JDb3JyZWN0aW9uOihOU1N0cmluZyAqKWRhdGFDb2Rld29yZHMgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6KGludCllcnJvckNvcnJlY3Rpb25MZXZlbCB7CisgIGludCBrID0gW3NlbGYgZXJyb3JDb3JyZWN0aW9uQ29kZXdvcmRDb3VudDplcnJvckNvcnJlY3Rpb25MZXZlbF07CisgIHVuaWNoYXIgZVtrXTsKKyAgbWVtc2V0KGUsIDAsIGsgKiBzaXplb2YodW5pY2hhcikpOworCisgIGludCBzbGQgPSAoaW50KWRhdGFDb2Rld29yZHMubGVuZ3RoOworICBmb3IgKGludCBpID0gMDsgaSA8IHNsZDsgaSsrKSB7CisgICAgaW50IHQxID0gKFtkYXRhQ29kZXdvcmRzIGNoYXJhY3RlckF0SW5kZXg6aV0gKyBlW2sgLSAxXSkgJSA5Mjk7CisgICAgaW50IHQyOworICAgIGludCB0MzsKKyAgICBmb3IgKGludCBqID0gayAtIDE7IGogPj0gMTsgai0tKSB7CisgICAgICB0MiA9ICh0MSAqIEVDX0NPRUZGSUNJRU5UU1tlcnJvckNvcnJlY3Rpb25MZXZlbF1bal0pICUgOTI5OworICAgICAgdDMgPSA5MjkgLSB0MjsKKyAgICAgIGVbal0gPSAodW5pY2hhcikgKChlW2ogLSAxXSArIHQzKSAlIDkyOSk7CisgICAgfQorICAgIHQyID0gKHQxICogRUNfQ09FRkZJQ0lFTlRTW2Vycm9yQ29ycmVjdGlvbkxldmVsXVswXSkgJSA5Mjk7CisgICAgdDMgPSA5MjkgLSB0MjsKKyAgICBlWzBdID0gKHVuaWNoYXIpICh0MyAlIDkyOSk7CisgIH0KKyAgTlNNdXRhYmxlU3RyaW5nICpzYiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OmtdOworICBmb3IgKGludCBqID0gayAtIDE7IGogPj0gMDsgai0tKSB7CisgICAgaWYgKGVbal0gIT0gMCkgeworICAgICAgZVtqXSA9ICh1bmljaGFyKSAoOTI5IC0gZVtqXSk7CisgICAgfQorICAgIFtzYiBhcHBlbmRGb3JtYXQ6QCIlQyIsIGVbal1dOworICB9CisgIHJldHVybiBzYjsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9lbmNvZGVyL1pYUERGNDE3SGlnaExldmVsRW5jb2Rlci5oIGIvWlhpbmdPYmpDL3BkZjQxNy9lbmNvZGVyL1pYUERGNDE3SGlnaExldmVsRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4N2ExMjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2IEplcmVtaWFzIE1hZXJraSBpbiBwYXJ0LCBhbmQgWlhpbmcgQXV0aG9ycyBpbiBwYXJ0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKgorICogVGhpcyBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIGZyb20gaXRzIG9yaWdpbmFsIGZvcm0gaW4gQmFyY29kZTRKLgorICovCisKKyNpbXBvcnQgIlpYQ29tcGFjdGlvbi5oIgorCisvKioKKyAqIFBERjQxNyBoaWdoLWxldmVsIGVuY29kZXIgZm9sbG93aW5nIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGluIElTTy9JRUMgMTU0Mzg6MjAwMShFKSBpbgorICogYW5uZXggUC4KKyAqLworCitAaW50ZXJmYWNlIFpYUERGNDE3SGlnaExldmVsRW5jb2RlciA6IE5TT2JqZWN0CisKKysgKE5TU3RyaW5nICopZW5jb2RlSGlnaExldmVsOihOU1N0cmluZyAqKW1zZyBjb21wYWN0aW9uOihaWENvbXBhY3Rpb24pY29tcGFjdGlvbiBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3BkZjQxNy9lbmNvZGVyL1pYUERGNDE3SGlnaExldmVsRW5jb2Rlci5tIGIvWlhpbmdPYmpDL3BkZjQxNy9lbmNvZGVyL1pYUERGNDE3SGlnaExldmVsRW5jb2Rlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYmI1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcGRmNDE3L2VuY29kZXIvWlhQREY0MTdIaWdoTGV2ZWxFbmNvZGVyLm0KQEAgLTAsMCArMSw1MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiBKZXJlbWlhcyBNYWVya2kgaW4gcGFydCwgYW5kIFpYaW5nIEF1dGhvcnMgaW4gcGFydAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYUERGNDE3SGlnaExldmVsRW5jb2Rlci5oIgorCisvKioKKyAqIGNvZGUgZm9yIFRleHQgY29tcGFjdGlvbgorICovCitjb25zdCBpbnQgVEVYVF9DT01QQUNUSU9OID0gMDsKKworLyoqCisgKiBjb2RlIGZvciBCeXRlIGNvbXBhY3Rpb24KKyAqLworY29uc3QgaW50IEJZVEVfQ09NUEFDVElPTiA9IDE7CisKKy8qKgorICogY29kZSBmb3IgTnVtZXJpYyBjb21wYWN0aW9uCisgKi8KK2NvbnN0IGludCBOVU1FUklDX0NPTVBBQ1RJT04gPSAyOworCisvKioKKyAqIFRleHQgY29tcGFjdGlvbiBzdWJtb2RlIEFscGhhCisgKi8KK2NvbnN0IGludCBTVUJNT0RFX0FMUEhBID0gMDsKKworLyoqCisgKiBUZXh0IGNvbXBhY3Rpb24gc3VibW9kZSBMb3dlcgorICovCitjb25zdCBpbnQgU1VCTU9ERV9MT1dFUiA9IDE7CisKKy8qKgorICogVGV4dCBjb21wYWN0aW9uIHN1Ym1vZGUgTWl4ZWQKKyAqLworY29uc3QgaW50IFNVQk1PREVfTUlYRUQgPSAyOworCisvKioKKyAqIFRleHQgY29tcGFjdGlvbiBzdWJtb2RlIFB1bmN0dWF0aW9uCisgKi8KK2NvbnN0IGludCBTVUJNT0RFX1BVTkNUVUFUSU9OID0gMzsKKworLyoqCisgKiBtb2RlIGxhdGNoIHRvIFRleHQgQ29tcGFjdGlvbiBtb2RlCisgKi8KK2NvbnN0IGludCBMQVRDSF9UT19URVhUID0gOTAwOworCisvKioKKyAqIG1vZGUgbGF0Y2ggdG8gQnl0ZSBDb21wYWN0aW9uIG1vZGUgKG51bWJlciBvZiBjaGFyYWN0ZXJzIE5PVCBhIG11bHRpcGxlIG9mIDYpCisgKi8KK2NvbnN0IGludCBMQVRDSF9UT19CWVRFX1BBRERFRCA9IDkwMTsKKworLyoqCisgKiBtb2RlIGxhdGNoIHRvIE51bWVyaWMgQ29tcGFjdGlvbiBtb2RlCisgKi8KK2NvbnN0IGludCBMQVRDSF9UT19OVU1FUklDID0gOTAyOworCisvKioKKyAqIG1vZGUgc2hpZnQgdG8gQnl0ZSBDb21wYWN0aW9uIG1vZGUKKyAqLworY29uc3QgaW50IFNISUZUX1RPX0JZVEUgPSA5MTM7CisKKy8qKgorICogbW9kZSBsYXRjaCB0byBCeXRlIENvbXBhY3Rpb24gbW9kZSAobnVtYmVyIG9mIGNoYXJhY3RlcnMgYSBtdWx0aXBsZSBvZiA2KQorICovCitjb25zdCBpbnQgTEFUQ0hfVE9fQllURSA9IDkyNDsKKworLyoqCisgKiBSYXcgY29kZSB0YWJsZSBmb3IgdGV4dCBjb21wYWN0aW9uIE1peGVkIHN1Yi1tb2RlCisgKi8KK2NvbnN0IGludCBURVhUX01JWEVEX1JBV19MRU4gPSAzMDsKK2NvbnN0IGludDhfdCBURVhUX01JWEVEX1JBV1tURVhUX01JWEVEX1JBV19MRU5dID0geworICA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgMzgsIDEzLCA5LCA0NCwgNTgsCisgIDM1LCA0NSwgNDYsIDM2LCA0NywgNDMsIDM3LCA0MiwgNjEsIDk0LCAwLCAzMiwgMCwgMCwgMH07CisKKy8qKgorICogUmF3IGNvZGUgdGFibGUgZm9yIHRleHQgY29tcGFjdGlvbjogUHVuY3R1YXRpb24gc3ViLW1vZGUKKyAqLworY29uc3QgaW50IFRFWFRfUFVOQ1RVQVRJT05fUkFXX0xFTiA9IDMwOworY29uc3QgaW50OF90IFRFWFRfUFVOQ1RVQVRJT05fUkFXW1RFWFRfUFVOQ1RVQVRJT05fUkFXX0xFTl0gPSB7CisgIDU5LCA2MCwgNjIsIDY0LCA5MSwgOTIsIDkzLCA5NSwgOTYsIDEyNiwgMzMsIDEzLCA5LCA0NCwgNTgsCisgIDEwLCA0NSwgNDYsIDM2LCA0NywgMzQsIDEyNCwgNDIsIDQwLCA0MSwgNjMsIDEyMywgMTI1LCAzOSwgMH07CisKK2NvbnN0IGludCBNSVhFRF9UQUJMRV9MRU4gPSAxMjg7Cit1bmljaGFyIE1JWEVEX1RBQkxFW01JWEVEX1RBQkxFX0xFTl07CisKK2NvbnN0IGludCBQVU5DVFVBVElPTl9MRU4gPSAxMjg7Cit1bmljaGFyIFBVTkNUVUFUSU9OW1BVTkNUVUFUSU9OX0xFTl07CisKK0BpbXBsZW1lbnRhdGlvbiBaWFBERjQxN0hpZ2hMZXZlbEVuY29kZXIKKworKyAodm9pZClpbml0aWFsaXplIHsKKyAgLy9Db25zdHJ1Y3QgaW52ZXJzZSBsb29rdXBzCisgIGZvciAoaW50IGkgPSAwOyBpIDwgTUlYRURfVEFCTEVfTEVOOyBpKyspIHsKKyAgICBNSVhFRF9UQUJMRVtpXSA9IDB4RkY7CisgIH0KKyAgZm9yIChpbnQ4X3QgaSA9IDA7IGkgPCBURVhUX01JWEVEX1JBV19MRU47IGkrKykgeworICAgIGludDhfdCBiID0gVEVYVF9NSVhFRF9SQVdbaV07CisgICAgaWYgKGIgPiAwKSB7CisgICAgICBNSVhFRF9UQUJMRVtiXSA9IGk7CisgICAgfQorICB9CisgIGZvciAoaW50IGkgPSAwOyBpIDwgUFVOQ1RVQVRJT05fTEVOOyBpKyspIHsKKyAgICBQVU5DVFVBVElPTltpXSA9IDB4RkY7CisgIH0KKyAgZm9yIChpbnQ4X3QgaSA9IDA7IGkgPCBURVhUX1BVTkNUVUFUSU9OX1JBV19MRU47IGkrKykgeworICAgIGludDhfdCBiID0gVEVYVF9QVU5DVFVBVElPTl9SQVdbaV07CisgICAgaWYgKGIgPiAwKSB7CisgICAgICBQVU5DVFVBVElPTltiXSA9IGk7CisgICAgfQorICB9Cit9CisKKy8qKgorICogQ29udmVydHMgdGhlIG1lc3NhZ2UgdG8gYSBieXRlIGFycmF5IHVzaW5nIHRoZSBkZWZhdWx0IGVuY29kaW5nIChjcDQzNykgYXMgZGVmaW5lZCBieSB0aGUKKyAqIHNwZWNpZmljYXRpb24KKyAqLworKyAoaW50OF90ICopYnl0ZXNGb3JNZXNzYWdlOihOU1N0cmluZyAqKW1zZyB7CisgIHJldHVybiAoaW50OF90ICopW1ttc2cgZGF0YVVzaW5nRW5jb2Rpbmc6KE5TU3RyaW5nRW5jb2RpbmcpIDB4ODAwMDA0MDBdIGJ5dGVzXTsKK30KKworLyoqCisgKiBQZXJmb3JtcyBoaWdoLWxldmVsIGVuY29kaW5nIG9mIGEgUERGNDE3IG1lc3NhZ2UgdXNpbmcgdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgaW4gYW5uZXggUAorICogb2YgSVNPL0lFQyAxNTQzODoyMDAxKEUpLiAgSWYgYnl0ZSBjb21wYWN0aW9uIGhhcyBiZWVuIHNlbGVjdGVkLCB0aGVuIG9ubHkgYnl0ZSBjb21wYWN0aW9uCisgKiBpcyB1c2VkLgorICovCisrIChOU1N0cmluZyAqKWVuY29kZUhpZ2hMZXZlbDooTlNTdHJpbmcgKiltc2cgY29tcGFjdGlvbjooWlhDb21wYWN0aW9uKWNvbXBhY3Rpb24gZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQ4X3QgKmJ5dGVzID0gTlVMTDsgLy9GaWxsIGxhdGVyIGFuZCBvbmx5IGlmIG5lZWRlZAorCisgIC8vdGhlIGNvZGV3b3JkcyAwLi45MjggYXJlIGVuY29kZWQgYXMgVW5pY29kZSBjaGFyYWN0ZXJzCisgIE5TTXV0YWJsZVN0cmluZyAqc2IgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhDYXBhY2l0eTptc2cubGVuZ3RoXTsKKworICBOU1VJbnRlZ2VyIGxlbiA9IG1zZy5sZW5ndGg7CisgIGludCBwID0gMDsKKyAgaW50IHRleHRTdWJNb2RlID0gU1VCTU9ERV9BTFBIQTsKKworICAvLyBVc2VyIHNlbGVjdGVkIGVuY29kaW5nIG1vZGUKKyAgaWYgKGNvbXBhY3Rpb24gPT0gWlhfQ09NUEFDVElPTl9URVhUKSB7CisgICAgW3NlbGYgZW5jb2RlVGV4dDptc2cgc3RhcnRwb3M6cCBjb3VudDooaW50KWxlbiBidWZmZXI6c2IgaW5pdGlhbFN1Ym1vZGU6dGV4dFN1Yk1vZGVdOworICB9IGVsc2UgaWYgKGNvbXBhY3Rpb24gPT0gWlhfQ09NUEFDVElPTl9CWVRFKSB7CisgICAgYnl0ZXMgPSBbc2VsZiBieXRlc0Zvck1lc3NhZ2U6bXNnXTsKKyAgICBbc2VsZiBlbmNvZGVCaW5hcnk6Ynl0ZXMgc3RhcnRwb3M6cCBjb3VudDooaW50KW1zZy5sZW5ndGggc3RhcnRtb2RlOkJZVEVfQ09NUEFDVElPTiBidWZmZXI6c2JdOworICB9IGVsc2UgaWYgKGNvbXBhY3Rpb24gPT0gWlhfQ09NUEFDVElPTl9OVU1FUklDKSB7CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIExBVENIX1RPX05VTUVSSUNdOworICAgIFtzZWxmIGVuY29kZU51bWVyaWM6bXNnIHN0YXJ0cG9zOnAgY291bnQ6KGludClsZW4gYnVmZmVyOnNiXTsKKyAgfSBlbHNlIHsKKyAgICBpbnQgZW5jb2RpbmdNb2RlID0gVEVYVF9DT01QQUNUSU9OOyAvL0RlZmF1bHQgbW9kZSwgc2VlIDQuNC4yLjEKKyAgICB3aGlsZSAocCA8IGxlbikgeworICAgICAgaW50IG4gPSBbc2VsZiBkZXRlcm1pbmVDb25zZWN1dGl2ZURpZ2l0Q291bnQ6bXNnIHN0YXJ0cG9zOnBdOworICAgICAgaWYgKG4gPj0gMTMpIHsKKyAgICAgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIExBVENIX1RPX05VTUVSSUNdOworICAgICAgICBlbmNvZGluZ01vZGUgPSBOVU1FUklDX0NPTVBBQ1RJT047CisgICAgICAgIHRleHRTdWJNb2RlID0gU1VCTU9ERV9BTFBIQTsgLy9SZXNldCBhZnRlciBsYXRjaAorICAgICAgICBbc2VsZiBlbmNvZGVOdW1lcmljOm1zZyBzdGFydHBvczpwIGNvdW50Om4gYnVmZmVyOnNiXTsKKyAgICAgICAgcCArPSBuOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHQgPSBbc2VsZiBkZXRlcm1pbmVDb25zZWN1dGl2ZVRleHRDb3VudDptc2cgc3RhcnRwb3M6cF07CisgICAgICAgIGlmICh0ID49IDUgfHwgbiA9PSBsZW4pIHsKKyAgICAgICAgICBpZiAoZW5jb2RpbmdNb2RlICE9IFRFWFRfQ09NUEFDVElPTikgeworICAgICAgICAgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIExBVENIX1RPX1RFWFRdOworICAgICAgICAgICAgZW5jb2RpbmdNb2RlID0gVEVYVF9DT01QQUNUSU9OOworICAgICAgICAgICAgdGV4dFN1Yk1vZGUgPSBTVUJNT0RFX0FMUEhBOyAvL3N0YXJ0IHdpdGggc3VibW9kZSBhbHBoYSBhZnRlciBsYXRjaAorICAgICAgICAgIH0KKyAgICAgICAgICB0ZXh0U3ViTW9kZSA9IFtzZWxmIGVuY29kZVRleHQ6bXNnIHN0YXJ0cG9zOnAgY291bnQ6dCBidWZmZXI6c2IgaW5pdGlhbFN1Ym1vZGU6dGV4dFN1Yk1vZGVdOworICAgICAgICAgIHAgKz0gdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAoYnl0ZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgYnl0ZXMgPSBbc2VsZiBieXRlc0Zvck1lc3NhZ2U6bXNnXTsKKyAgICAgICAgICB9CisgICAgICAgICAgaW50IGIgPSBbc2VsZiBkZXRlcm1pbmVDb25zZWN1dGl2ZUJpbmFyeUNvdW50Om1zZyBieXRlczpieXRlcyBzdGFydHBvczpwIGVycm9yOmVycm9yXTsKKyAgICAgICAgICBpZiAoYiA9PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICB9IGVsc2UgaWYgKGIgPT0gMCkgeworICAgICAgICAgICAgYiA9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChiID09IDEgJiYgZW5jb2RpbmdNb2RlID09IFRFWFRfQ09NUEFDVElPTikgeworICAgICAgICAgICAgLy9Td2l0Y2ggZm9yIG9uZSBieXRlIChpbnN0ZWFkIG9mIGxhdGNoKQorICAgICAgICAgICAgW3NlbGYgZW5jb2RlQmluYXJ5OmJ5dGVzIHN0YXJ0cG9zOnAgY291bnQ6MSBzdGFydG1vZGU6VEVYVF9DT01QQUNUSU9OIGJ1ZmZlcjpzYl07CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vTW9kZSBsYXRjaCBwZXJmb3JtZWQgYnkgZW5jb2RlQmluYXJ5CisgICAgICAgICAgICBbc2VsZiBlbmNvZGVCaW5hcnk6Ynl0ZXMgc3RhcnRwb3M6cCBjb3VudDpiIHN0YXJ0bW9kZTplbmNvZGluZ01vZGUgYnVmZmVyOnNiXTsKKyAgICAgICAgICAgIGVuY29kaW5nTW9kZSA9IEJZVEVfQ09NUEFDVElPTjsKKyAgICAgICAgICAgIHRleHRTdWJNb2RlID0gU1VCTU9ERV9BTFBIQTsgLy9SZXNldCBhZnRlciBsYXRjaAorICAgICAgICAgIH0KKyAgICAgICAgICBwICs9IGI7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gc2I7Cit9CisKKy8qKgorICogRW5jb2RlIHBhcnRzIG9mIHRoZSBtZXNzYWdlIHVzaW5nIFRleHQgQ29tcGFjdGlvbiBhcyBkZXNjcmliZWQgaW4gSVNPL0lFQyAxNTQzODoyMDAxKEUpLAorICogY2hhcHRlciA0LjQuMi4KKyAqLworKyAoaW50KWVuY29kZVRleHQ6KE5TU3RyaW5nICopbXNnIHN0YXJ0cG9zOihpbnQpc3RhcnRwb3MgY291bnQ6KGludCljb3VudCBidWZmZXI6KE5TTXV0YWJsZVN0cmluZyAqKXNiIGluaXRpYWxTdWJtb2RlOihpbnQpaW5pdGlhbFN1Ym1vZGUgeworICBOU011dGFibGVTdHJpbmcgKnRtcCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OmNvdW50XTsKKyAgaW50IHN1Ym1vZGUgPSBpbml0aWFsU3VibW9kZTsKKyAgaW50IGlkeCA9IDA7CisgIHdoaWxlICh0cnVlKSB7CisgICAgdW5pY2hhciBjaCA9IFttc2cgY2hhcmFjdGVyQXRJbmRleDpzdGFydHBvcyArIGlkeF07CisgICAgc3dpdGNoIChzdWJtb2RlKSB7CisgICAgICBjYXNlIFNVQk1PREVfQUxQSEE6CisgICAgICAgIGlmIChbc2VsZiBpc0FscGhhVXBwZXI6Y2hdKSB7CisgICAgICAgICAgaWYgKGNoID09ICcgJykgeworICAgICAgICAgICAgW3RtcCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSAyNl07IC8vc3BhY2UKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgW3RtcCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSAoY2ggLSA2NSldOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAoW3NlbGYgaXNBbHBoYUxvd2VyOmNoXSkgeworICAgICAgICAgICAgc3VibW9kZSA9IFNVQk1PREVfTE9XRVI7CisgICAgICAgICAgICBbdG1wIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIDI3XTsgLy9sbAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfSBlbHNlIGlmIChbc2VsZiBpc01peGVkOmNoXSkgeworICAgICAgICAgICAgc3VibW9kZSA9IFNVQk1PREVfTUlYRUQ7CisgICAgICAgICAgICBbdG1wIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIDI4XTsgLy9tbAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFt0bXAgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgMjldOyAvL3BzCisgICAgICAgICAgICBbdG1wIGFwcGVuZEZvcm1hdDpAIiVDIiwgUFVOQ1RVQVRJT05bY2hdXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU1VCTU9ERV9MT1dFUjoKKyAgICAgICAgaWYgKFtzZWxmIGlzQWxwaGFMb3dlcjpjaF0pIHsKKyAgICAgICAgICBpZiAoY2ggPT0gJyAnKSB7CisgICAgICAgICAgICBbdG1wIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIDI2XTsgLy9zcGFjZQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBbdG1wIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIChjaCAtIDk3KV07CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChbc2VsZiBpc0FscGhhVXBwZXI6Y2hdKSB7CisgICAgICAgICAgICBbdG1wIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIDI3XTsgLy9hcworICAgICAgICAgICAgW3RtcCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSAoY2ggLSA2NSldOworICAgICAgICAgICAgLy9zcGFjZSBjYW5ub3QgaGFwcGVuIGhlcmUsIGl0IGlzIGFsc28gaW4gIkxvd2VyIgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfSBlbHNlIGlmIChbc2VsZiBpc01peGVkOmNoXSkgeworICAgICAgICAgICAgc3VibW9kZSA9IFNVQk1PREVfTUlYRUQ7CisgICAgICAgICAgICBbdG1wIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIDI4XTsgLy9tbAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFt0bXAgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgMjldOyAvL3BzCisgICAgICAgICAgICBbdG1wIGFwcGVuZEZvcm1hdDpAIiVDIiwgUFVOQ1RVQVRJT05bY2hdXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU1VCTU9ERV9NSVhFRDoKKyAgICAgICAgaWYgKFtzZWxmIGlzTWl4ZWQ6Y2hdKSB7CisgICAgICAgICAgW3RtcCBhcHBlbmRGb3JtYXQ6QCIlQyIsIE1JWEVEX1RBQkxFW2NoXV07IC8vYXMKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAoW3NlbGYgaXNBbHBoYVVwcGVyOmNoXSkgeworICAgICAgICAgICAgc3VibW9kZSA9IFNVQk1PREVfQUxQSEE7CisgICAgICAgICAgICBbdG1wIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpIDI4XTsgLy9hbAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfSBlbHNlIGlmIChbc2VsZiBpc0FscGhhTG93ZXI6Y2hdKSB7CisgICAgICAgICAgICBzdWJtb2RlID0gU1VCTU9ERV9MT1dFUjsKKyAgICAgICAgICAgIFt0bXAgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgMjddOyAvL2xsCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHN0YXJ0cG9zICsgaWR4ICsgMSA8IGNvdW50KSB7CisgICAgICAgICAgICAgIGNoYXIgbmV4dCA9IFttc2cgY2hhcmFjdGVyQXRJbmRleDpzdGFydHBvcyArIGlkeCArIDFdOworICAgICAgICAgICAgICBpZiAoW3NlbGYgaXNQdW5jdHVhdGlvbjpuZXh0XSkgeworICAgICAgICAgICAgICAgIHN1Ym1vZGUgPSBTVUJNT0RFX1BVTkNUVUFUSU9OOworICAgICAgICAgICAgICAgIFt0bXAgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgMjVdOyAvL3BsCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFt0bXAgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgMjldOyAvL3BzCisgICAgICAgICAgICBbdG1wIGFwcGVuZEZvcm1hdDpAIiVDIiwgUFVOQ1RVQVRJT05bY2hdXTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiAvL1NVQk1PREVfUFVOQ1RVQVRJT04KKyAgICAgICAgaWYgKFtzZWxmIGlzUHVuY3R1YXRpb246Y2hdKSB7CisgICAgICAgICAgW3RtcCBhcHBlbmRGb3JtYXQ6QCIlQyIsIFBVTkNUVUFUSU9OW2NoXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc3VibW9kZSA9IFNVQk1PREVfQUxQSEE7CisgICAgICAgICAgW3RtcCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSAyOV07IC8vYWwKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZHgrKzsKKyAgICBpZiAoaWR4ID49IGNvdW50KSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgdW5pY2hhciBoID0gMDsKKyAgTlNVSW50ZWdlciBsZW4gPSB0bXAubGVuZ3RoOworICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgQk9PTCBvZGQgPSAoaSAlIDIpICE9IDA7CisgICAgaWYgKG9kZCkgeworICAgICAgaCA9ICh1bmljaGFyKSAoKGggKiAzMCkgKyBbdG1wIGNoYXJhY3RlckF0SW5kZXg6aV0pOworICAgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgaF07CisgICAgfSBlbHNlIHsKKyAgICAgIGggPSBbdG1wIGNoYXJhY3RlckF0SW5kZXg6aV07CisgICAgfQorICB9CisgIGlmICgobGVuICUgMikgIT0gMCkgeworICAgIFtzYiBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSAoKGggKiAzMCkgKyAyOSldOyAvL3BzCisgIH0KKyAgcmV0dXJuIHN1Ym1vZGU7Cit9CisKKy8qKgorICogRW5jb2RlIHBhcnRzIG9mIHRoZSBtZXNzYWdlIHVzaW5nIEJ5dGUgQ29tcGFjdGlvbiBhcyBkZXNjcmliZWQgaW4gSVNPL0lFQyAxNTQzODoyMDAxKEUpLAorICogY2hhcHRlciA0LjQuMy4gVGhlIFVuaWNvZGUgY2hhcmFjdGVycyB3aWxsIGJlIGNvbnZlcnRlZCB0byBiaW5hcnkgdXNpbmcgdGhlIGNwNDM3CisgKiBjb2RlcGFnZS4KKyAqLworKyAodm9pZCllbmNvZGVCaW5hcnk6KGludDhfdCAqKWJ5dGVzIHN0YXJ0cG9zOihpbnQpc3RhcnRwb3MgY291bnQ6KGludCljb3VudCBzdGFydG1vZGU6KGludClzdGFydG1vZGUgYnVmZmVyOihOU011dGFibGVTdHJpbmcgKilzYiB7CisgIGlmIChjb3VudCA9PSAxICYmIHN0YXJ0bW9kZSA9PSBURVhUX0NPTVBBQ1RJT04pIHsKKyAgICBbc2IgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgU0hJRlRfVE9fQllURV07CisgIH0KKworICBpbnQgaWR4ID0gc3RhcnRwb3M7CisgIC8vIEVuY29kZSBzaXhwYWNrcworICBpZiAoY291bnQgPj0gNikgeworICAgIFtzYiBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSBMQVRDSF9UT19CWVRFXTsKKyAgICBjb25zdCBpbnQgY2hhcnNMZW4gPSA1OworICAgIHVuaWNoYXIgY2hhcnNbY2hhcnNMZW5dOworICAgIG1lbXNldChjaGFycywgMCwgY2hhcnNMZW4gKiBzaXplb2YodW5pY2hhcikpOworICAgIHdoaWxlICgoc3RhcnRwb3MgKyBjb3VudCAtIGlkeCkgPj0gNikgeworICAgICAgbG9uZyB0ID0gMDsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKSB7CisgICAgICAgIHQgPDw9IDg7CisgICAgICAgIHQgKz0gYnl0ZXNbaWR4ICsgaV0gJiAweGZmOworICAgICAgfQorICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgY2hhcnNbaV0gPSAodW5pY2hhcikgKHQgJSA5MDApOworICAgICAgICB0IC89IDkwMDsKKyAgICAgIH0KKyAgICAgIGZvciAoaW50IGkgPSBjaGFyc0xlbiAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIFtzYiBhcHBlbmRGb3JtYXQ6QCIlQyIsIGNoYXJzW2ldXTsKKyAgICAgIH0KKyAgICAgIGlkeCArPSA2OworICAgIH0KKyAgfQorICAvL0VuY29kZSByZXN0IChyZW1haW5pbmcgbjw1IGJ5dGVzIGlmIGFueSkKKyAgaWYgKGlkeCA8IHN0YXJ0cG9zICsgY291bnQpIHsKKyAgICBbc2IgYXBwZW5kRm9ybWF0OkAiJUMiLCAodW5pY2hhcikgTEFUQ0hfVE9fQllURV9QQURERURdOworICB9CisgIGZvciAoaW50IGkgPSBpZHg7IGkgPCBzdGFydHBvcyArIGNvdW50OyBpKyspIHsKKyAgICBpbnQgY2ggPSBieXRlc1tpXSAmIDB4ZmY7CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpY2hdOworICB9Cit9CisKKysgKHZvaWQpZW5jb2RlTnVtZXJpYzooTlNTdHJpbmcgKiltc2cgc3RhcnRwb3M6KGludClzdGFydHBvcyBjb3VudDooaW50KWNvdW50IGJ1ZmZlcjooTlNNdXRhYmxlU3RyaW5nICopc2IgeworICBpbnQgaWR4ID0gMDsKKyAgTlNNdXRhYmxlU3RyaW5nICp0bXAgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhDYXBhY2l0eTpjb3VudCAvIDMgKyAxXTsKKyAgd2hpbGUgKGlkeCA8IGNvdW50IC0gMSkgeworICAgIFt0bXAgc2V0U3RyaW5nOkAiIl07CisgICAgaW50IGxlbiA9IE1JTig0NCwgY291bnQgLSBpZHgpOworICAgIE5TU3RyaW5nICpwYXJ0ID0gW0AiMSIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6W21zZyBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2Uoc3RhcnRwb3MgKyBpZHgsIGxlbildXTsKKyAgICBsb25nIGxvbmcgYmlnaW50ID0gW3BhcnQgbG9uZ0xvbmdWYWx1ZV07CisgICAgZG8geworICAgICAgbG9uZyBjID0gYmlnaW50ICUgOTAwOworICAgICAgW3RtcCBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKSBjXTsKKyAgICAgIGJpZ2ludCAvPSA5MDA7CisgICAgfSB3aGlsZSAoYmlnaW50ICE9IDApOworCisgICAgLy9SZXZlcnNlIHRlbXBvcmFyeSBzdHJpbmcKKyAgICBmb3IgKGludCBpID0gKGludCl0bXAubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgIFtzYiBhcHBlbmRGb3JtYXQ6QCIlQyIsIFt0bXAgY2hhcmFjdGVyQXRJbmRleDppXV07CisgICAgfQorICAgIGlkeCArPSBsZW47CisgIH0KK30KKworKyAoQk9PTClpc0RpZ2l0OihjaGFyKWNoIHsKKyAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOSc7Cit9CisKKysgKEJPT0wpaXNBbHBoYVVwcGVyOihjaGFyKWNoIHsKKyAgcmV0dXJuIGNoID09ICcgJyB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJyk7Cit9CisKKysgKEJPT0wpaXNBbHBoYUxvd2VyOihjaGFyKWNoIHsKKyAgcmV0dXJuIGNoID09ICcgJyB8fCAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6Jyk7Cit9CisKKysgKEJPT0wpaXNNaXhlZDooY2hhciljaCB7CisgIHJldHVybiBNSVhFRF9UQUJMRVtjaF0gIT0gMHhGRjsKK30KKworKyAoQk9PTClpc1B1bmN0dWF0aW9uOihjaGFyKWNoIHsKKyAgcmV0dXJuIFBVTkNUVUFUSU9OW2NoXSAhPSAweEZGOworfQorCisrIChCT09MKWlzVGV4dDooY2hhciljaCB7CisgIHJldHVybiBjaCA9PSAnXHQnIHx8IGNoID09ICdcbicgfHwgY2ggPT0gJ1xyJyB8fCAoY2ggPj0gMzIgJiYgY2ggPD0gMTI2KTsKK30KKworLyoqCisgKiBEZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgY2hhcmFjdGVycyB0aGF0IGFyZSBlbmNvZGFibGUgdXNpbmcgbnVtZXJpYyBjb21wYWN0aW9uLgorICovCisrIChpbnQpZGV0ZXJtaW5lQ29uc2VjdXRpdmVEaWdpdENvdW50OihOU1N0cmluZyAqKW1zZyBzdGFydHBvczooaW50KXN0YXJ0cG9zIHsKKyAgaW50IGNvdW50ID0gMDsKKyAgTlNVSW50ZWdlciBsZW4gPSBtc2cubGVuZ3RoOworICBpbnQgaWR4ID0gc3RhcnRwb3M7CisgIGlmIChpZHggPCBsZW4pIHsKKyAgICBjaGFyIGNoID0gW21zZyBjaGFyYWN0ZXJBdEluZGV4OmlkeF07CisgICAgd2hpbGUgKFtzZWxmIGlzRGlnaXQ6Y2hdICYmIGlkeCA8IGxlbikgeworICAgICAgY291bnQrKzsKKyAgICAgIGlkeCsrOworICAgICAgaWYgKGlkeCA8IGxlbikgeworICAgICAgICBjaCA9IFttc2cgY2hhcmFjdGVyQXRJbmRleDppZHhdOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gY291bnQ7Cit9CisKKy8qKgorICogRGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGNoYXJhY3RlcnMgdGhhdCBhcmUgZW5jb2RhYmxlIHVzaW5nIHRleHQgY29tcGFjdGlvbi4KKyAqCisgKiBAcGFyYW0gbXNnICAgICAgdGhlIG1lc3NhZ2UKKyAqIEBwYXJhbSBzdGFydHBvcyB0aGUgc3RhcnQgcG9zaXRpb24gd2l0aGluIHRoZSBtZXNzYWdlCisgKiBAcmV0dXJuIHRoZSByZXF1ZXN0ZWQgY2hhcmFjdGVyIGNvdW50CisgKi8KKysgKGludClkZXRlcm1pbmVDb25zZWN1dGl2ZVRleHRDb3VudDooTlNTdHJpbmcgKiltc2cgc3RhcnRwb3M6KGludClzdGFydHBvcyB7CisgIE5TVUludGVnZXIgbGVuID0gbXNnLmxlbmd0aDsKKyAgaW50IGlkeCA9IHN0YXJ0cG9zOworICB3aGlsZSAoaWR4IDwgbGVuKSB7CisgICAgY2hhciBjaCA9IFttc2cgY2hhcmFjdGVyQXRJbmRleDppZHhdOworICAgIGludCBudW1lcmljQ291bnQgPSAwOworICAgIHdoaWxlIChudW1lcmljQ291bnQgPCAxMyAmJiBbc2VsZiBpc0RpZ2l0OmNoXSAmJiBpZHggPCBsZW4pIHsKKyAgICAgIG51bWVyaWNDb3VudCsrOworICAgICAgaWR4Kys7CisgICAgICBpZiAoaWR4IDwgbGVuKSB7CisgICAgICAgIGNoID0gW21zZyBjaGFyYWN0ZXJBdEluZGV4OmlkeF07CisgICAgICB9CisgICAgfQorICAgIGlmIChudW1lcmljQ291bnQgPj0gMTMpIHsKKyAgICAgIHJldHVybiBpZHggLSBzdGFydHBvcyAtIG51bWVyaWNDb3VudDsKKyAgICB9CisgICAgaWYgKG51bWVyaWNDb3VudCA+IDApIHsKKyAgICAgIC8vSGV1cmlzdGljOiBBbGwgdGV4dC1lbmNvZGFibGUgY2hhcnMgb3IgZGlnaXRzIGFyZSBiaW5hcnkgZW5jb2RhYmxlCisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgY2ggPSBbbXNnIGNoYXJhY3RlckF0SW5kZXg6aWR4XTsKKworICAgIC8vQ2hlY2sgaWYgY2hhcmFjdGVyIGlzIGVuY29kYWJsZQorICAgIGlmICghW3NlbGYgaXNUZXh0OmNoXSkgeworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlkeCsrOworICB9CisgIHJldHVybiBpZHggLSBzdGFydHBvczsKK30KKworLyoqCisgKiBEZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgY2hhcmFjdGVycyB0aGF0IGFyZSBlbmNvZGFibGUgdXNpbmcgYmluYXJ5IGNvbXBhY3Rpb24uCisgKi8KKysgKGludClkZXRlcm1pbmVDb25zZWN1dGl2ZUJpbmFyeUNvdW50OihOU1N0cmluZyAqKW1zZyBieXRlczooaW50OF90ICopYnl0ZXMgc3RhcnRwb3M6KGludClzdGFydHBvcyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIE5TVUludGVnZXIgbGVuID0gbXNnLmxlbmd0aDsKKyAgaW50IGlkeCA9IHN0YXJ0cG9zOworICB3aGlsZSAoaWR4IDwgbGVuKSB7CisgICAgY2hhciBjaCA9IFttc2cgY2hhcmFjdGVyQXRJbmRleDppZHhdOworICAgIGludCBudW1lcmljQ291bnQgPSAwOworCisgICAgd2hpbGUgKG51bWVyaWNDb3VudCA8IDEzICYmIFtzZWxmIGlzRGlnaXQ6Y2hdKSB7CisgICAgICBudW1lcmljQ291bnQrKzsKKyAgICAgIC8vdGV4dENvdW50Kys7CisgICAgICBpbnQgaSA9IGlkeCArIG51bWVyaWNDb3VudDsKKyAgICAgIGlmIChpID49IGxlbikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNoID0gW21zZyBjaGFyYWN0ZXJBdEluZGV4OmldOworICAgIH0KKyAgICBpZiAobnVtZXJpY0NvdW50ID49IDEzKSB7CisgICAgICByZXR1cm4gaWR4IC0gc3RhcnRwb3M7CisgICAgfQorICAgIGludCB0ZXh0Q291bnQgPSAwOworICAgIHdoaWxlICh0ZXh0Q291bnQgPCA1ICYmIFtzZWxmIGlzVGV4dDpjaF0pIHsKKyAgICAgIHRleHRDb3VudCsrOworICAgICAgaW50IGkgPSBpZHggKyB0ZXh0Q291bnQ7CisgICAgICBpZiAoaSA+PSBsZW4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjaCA9IFttc2cgY2hhcmFjdGVyQXRJbmRleDppXTsKKyAgICB9CisgICAgaWYgKHRleHRDb3VudCA+PSA1KSB7CisgICAgICByZXR1cm4gaWR4IC0gc3RhcnRwb3M7CisgICAgfQorICAgIGNoID0gW21zZyBjaGFyYWN0ZXJBdEluZGV4OmlkeF07CisKKyAgICAvL0NoZWNrIGlmIGNoYXJhY3RlciBpcyBlbmNvZGFibGUKKyAgICAvL1N1biByZXR1cm5zIGEgQVNDSUkgNjMgKD8pIGZvciBhIGNoYXJhY3RlciB0aGF0IGNhbm5vdCBiZSBtYXBwZWQuIExldCdzIGhvcGUgYWxsCisgICAgLy9vdGhlciBWTXMgZG8gdGhlIHNhbWUKKyAgICBpZiAoYnl0ZXNbaWR4XSA9PSA2MyAmJiBjaCAhPSAnPycpIHsKKyAgICAgIE5TRGljdGlvbmFyeSAqdXNlckluZm8gPSBAe05TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiTm9uLWVuY29kYWJsZSBjaGFyYWN0ZXIgZGV0ZWN0ZWQ6ICVjIChVbmljb2RlOiAlQykiLCBjaCwgKHVuaWNoYXIpY2hdfTsKKworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlpYRXJyb3JEb21haW4gY29kZTpaWFdyaXRlckVycm9yIHVzZXJJbmZvOnVzZXJJbmZvXTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWR4Kys7CisgIH0KKyAgcmV0dXJuIGlkeCAtIHN0YXJ0cG9zOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL1pYUVJDb2RlUmVhZGVyLmggYi9aWGluZ09iakMvcXJjb2RlL1pYUVJDb2RlUmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyMGJlMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvWlhRUkNvZGVSZWFkZXIuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlYWRlci5oIgorCisvKioKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGRldGVjdCBhbmQgZGVjb2RlIFFSIENvZGVzIGluIGFuIGltYWdlLgorICovCisKK0BjbGFzcyBaWEJpbmFyeUJpdG1hcCwgWlhRUkNvZGVEZWNvZGVyLCBaWFJlc3VsdDsKKworQGludGVyZmFjZSBaWFFSQ29kZVJlYWRlciA6IE5TT2JqZWN0IDxaWFJlYWRlcj4KKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIFpYUVJDb2RlRGVjb2RlciAqZGVjb2RlcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9aWFFSQ29kZVJlYWRlci5tIGIvWlhpbmdPYmpDL3FyY29kZS9aWFFSQ29kZVJlYWRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDkwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL1pYUVJDb2RlUmVhZGVyLm0KQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQmFyY29kZUZvcm1hdC5oIgorI2ltcG9ydCAiWlhCaW5hcnlCaXRtYXAuaCIKKyNpbXBvcnQgIlpYQml0TWF0cml4LmgiCisjaW1wb3J0ICJaWERlY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWERlY29kZXJSZXN1bHQuaCIKKyNpbXBvcnQgIlpYRGV0ZWN0b3JSZXN1bHQuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWFFSQ29kZURlY29kZXIuaCIKKyNpbXBvcnQgIlpYUVJDb2RlRGV0ZWN0b3IuaCIKKyNpbXBvcnQgIlpYUVJDb2RlUmVhZGVyLmgiCisjaW1wb3J0ICJaWFJlc3VsdC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhRUkNvZGVSZWFkZXIKKworLSAoaWQpaW5pdCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2RlY29kZXIgPSBbW1pYUVJDb2RlRGVjb2RlciBhbGxvY10gaW5pdF07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLyoqCisgKiBMb2NhdGVzIGFuZCBkZWNvZGVzIGEgUVIgY29kZSBpbiBhbiBpbWFnZS4KKyAqLworLSAoWlhSZXN1bHQgKilkZWNvZGU6KFpYQmluYXJ5Qml0bWFwICopaW1hZ2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW3NlbGYgZGVjb2RlOmltYWdlIGhpbnRzOm5pbCBlcnJvcjplcnJvcl07Cit9CisKKy0gKFpYUmVzdWx0ICopZGVjb2RlOihaWEJpbmFyeUJpdG1hcCAqKWltYWdlIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWERlY29kZXJSZXN1bHQgKmRlY29kZXJSZXN1bHQ7CisgIE5TQXJyYXkgKnBvaW50czsKKyAgWlhCaXRNYXRyaXggKm1hdHJpeCA9IFtpbWFnZSBibGFja01hdHJpeFdpdGhFcnJvcjplcnJvcl07CisgIGlmICghbWF0cml4KSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBpZiAoaGludHMgIT0gbmlsICYmIGhpbnRzLnB1cmVCYXJjb2RlKSB7CisgICAgWlhCaXRNYXRyaXggKmJpdHMgPSBbc2VsZiBleHRyYWN0UHVyZUJpdHM6bWF0cml4XTsKKyAgICBpZiAoIWJpdHMpIHsKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBkZWNvZGVyUmVzdWx0ID0gW3NlbGYuZGVjb2RlciBkZWNvZGVNYXRyaXg6Yml0cyBoaW50czpoaW50cyBlcnJvcjplcnJvcl07CisgICAgaWYgKCFkZWNvZGVyUmVzdWx0KSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBwb2ludHMgPSBAW107CisgIH0gZWxzZSB7CisgICAgWlhEZXRlY3RvclJlc3VsdCAqZGV0ZWN0b3JSZXN1bHQgPSBbW1taWFFSQ29kZURldGVjdG9yIGFsbG9jXSBpbml0V2l0aEltYWdlOm1hdHJpeF0gZGV0ZWN0OmhpbnRzIGVycm9yOmVycm9yXTsKKyAgICBpZiAoIWRldGVjdG9yUmVzdWx0KSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBkZWNvZGVyUmVzdWx0ID0gW3NlbGYuZGVjb2RlciBkZWNvZGVNYXRyaXg6W2RldGVjdG9yUmVzdWx0IGJpdHNdIGhpbnRzOmhpbnRzIGVycm9yOmVycm9yXTsKKyAgICBpZiAoIWRlY29kZXJSZXN1bHQpIHsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIHBvaW50cyA9IFtkZXRlY3RvclJlc3VsdCBwb2ludHNdOworICB9CisKKyAgWlhSZXN1bHQgKnJlc3VsdCA9IFtaWFJlc3VsdCByZXN1bHRXaXRoVGV4dDpkZWNvZGVyUmVzdWx0LnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Qnl0ZXM6ZGVjb2RlclJlc3VsdC5yYXdCeXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDpkZWNvZGVyUmVzdWx0Lmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBvaW50czpwb2ludHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRRUkNvZGVdOworICBOU011dGFibGVBcnJheSAqYnl0ZVNlZ21lbnRzID0gZGVjb2RlclJlc3VsdC5ieXRlU2VnbWVudHM7CisgIGlmIChieXRlU2VnbWVudHMgIT0gbmlsKSB7CisgICAgW3Jlc3VsdCBwdXRNZXRhZGF0YTprUmVzdWx0TWV0YWRhdGFUeXBlQnl0ZVNlZ21lbnRzIHZhbHVlOmJ5dGVTZWdtZW50c107CisgIH0KKyAgTlNTdHJpbmcgKmVjTGV2ZWwgPSBkZWNvZGVyUmVzdWx0LmVjTGV2ZWw7CisgIGlmIChlY0xldmVsICE9IG5pbCkgeworICAgIFtyZXN1bHQgcHV0TWV0YWRhdGE6a1Jlc3VsdE1ldGFkYXRhVHlwZUVycm9yQ29ycmVjdGlvbkxldmVsIHZhbHVlOmVjTGV2ZWxdOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpcmVzZXQgeworICAvLyBkbyBub3RoaW5nCit9CisKKy8qKgorICogVGhpcyBtZXRob2QgZGV0ZWN0cyBhIGNvZGUgaW4gYSAicHVyZSIgaW1hZ2UgLS0gdGhhdCBpcywgcHVyZSBtb25vY2hyb21lIGltYWdlCisgKiB3aGljaCBjb250YWlucyBvbmx5IGFuIHVucm90YXRlZCwgdW5za2V3ZWQsIGltYWdlIG9mIGEgY29kZSwgd2l0aCBzb21lIHdoaXRlIGJvcmRlcgorICogYXJvdW5kIGl0LiBUaGlzIGlzIGEgc3BlY2lhbGl6ZWQgbWV0aG9kIHRoYXQgd29ya3MgZXhjZXB0aW9uYWxseSBmYXN0IGluIHRoaXMgc3BlY2lhbAorICogY2FzZS4KKyAqLworLSAoWlhCaXRNYXRyaXggKilleHRyYWN0UHVyZUJpdHM6KFpYQml0TWF0cml4ICopaW1hZ2UgeworICBOU0FycmF5ICpsZWZ0VG9wQmxhY2sgPSBpbWFnZS50b3BMZWZ0T25CaXQ7CisgIE5TQXJyYXkgKnJpZ2h0Qm90dG9tQmxhY2sgPSBpbWFnZS5ib3R0b21SaWdodE9uQml0OworICBpZiAobGVmdFRvcEJsYWNrID09IG5pbCB8fCByaWdodEJvdHRvbUJsYWNrID09IG5pbCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBmbG9hdCBtb2R1bGVTaXplID0gW3NlbGYgbW9kdWxlU2l6ZTpsZWZ0VG9wQmxhY2sgaW1hZ2U6aW1hZ2VdOworICBpZiAobW9kdWxlU2l6ZSA9PSAtMSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpbnQgdG9wID0gW2xlZnRUb3BCbGFja1sxXSBpbnRWYWx1ZV07CisgIGludCBib3R0b20gPSBbcmlnaHRCb3R0b21CbGFja1sxXSBpbnRWYWx1ZV07CisgIGludCBsZWZ0ID0gW2xlZnRUb3BCbGFja1swXSBpbnRWYWx1ZV07CisgIGludCByaWdodCA9IFtyaWdodEJvdHRvbUJsYWNrWzBdIGludFZhbHVlXTsKKworICAvLyBTYW5pdHkgY2hlY2shCisgIGlmIChsZWZ0ID49IHJpZ2h0IHx8IHRvcCA+PSBib3R0b20pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaWYgKGJvdHRvbSAtIHRvcCAhPSByaWdodCAtIGxlZnQpIHsKKyAgICAvLyBTcGVjaWFsIGNhc2UsIHdoZXJlIGJvdHRvbS1yaWdodCBtb2R1bGUgd2Fzbid0IGJsYWNrIHNvIHdlIGZvdW5kIHNvbWV0aGluZyBlbHNlIGluIHRoZSBsYXN0IHJvdworICAgIC8vIEFzc3VtZSBpdCdzIGEgc3F1YXJlLCBzbyB1c2UgaGVpZ2h0IGFzIHRoZSB3aWR0aAorICAgIHJpZ2h0ID0gbGVmdCArIChib3R0b20gLSB0b3ApOworICB9CisKKyAgaW50IG1hdHJpeFdpZHRoID0gcm91bmQoKHJpZ2h0IC0gbGVmdCArIDEpIC8gbW9kdWxlU2l6ZSk7CisgIGludCBtYXRyaXhIZWlnaHQgPSByb3VuZCgoYm90dG9tIC0gdG9wICsgMSkgLyBtb2R1bGVTaXplKTsKKyAgaWYgKG1hdHJpeFdpZHRoIDw9IDAgfHwgbWF0cml4SGVpZ2h0IDw9IDApIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIGlmIChtYXRyaXhIZWlnaHQgIT0gbWF0cml4V2lkdGgpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgaW50IG51ZGdlID0gKGludCkgKG1vZHVsZVNpemUgLyAyLjBmKTsKKyAgdG9wICs9IG51ZGdlOworICBsZWZ0ICs9IG51ZGdlOworCisgIC8vIEJ1dCBjYXJlZnVsIHRoYXQgdGhpcyBkb2VzIG5vdCBzYW1wbGUgb2ZmIHRoZSBlZGdlCisgIGludCBudWRnZWRUb29GYXJSaWdodCA9IGxlZnQgKyAoaW50KSAoKG1hdHJpeFdpZHRoIC0gMSkgKiBtb2R1bGVTaXplKSAtIChyaWdodCAtIDEpOworICBpZiAobnVkZ2VkVG9vRmFyUmlnaHQgPiAwKSB7CisgICAgbGVmdCAtPSBudWRnZWRUb29GYXJSaWdodDsKKyAgfQorICBpbnQgbnVkZ2VkVG9vRmFyRG93biA9IHRvcCArIChpbnQpICgobWF0cml4SGVpZ2h0IC0gMSkgKiBtb2R1bGVTaXplKSAtIChib3R0b20gLSAxKTsKKyAgaWYgKG51ZGdlZFRvb0ZhckRvd24gPiAwKSB7CisgICAgdG9wIC09IG51ZGdlZFRvb0ZhckRvd247CisgIH0KKworICAvLyBOb3cganVzdCByZWFkIG9mZiB0aGUgYml0cworICBaWEJpdE1hdHJpeCAqYml0cyA9IFtbWlhCaXRNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6bWF0cml4V2lkdGggaGVpZ2h0Om1hdHJpeEhlaWdodF07CisgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF0cml4SGVpZ2h0OyB5KyspIHsKKyAgICBpbnQgaU9mZnNldCA9IHRvcCArIChpbnQpICh5ICogbW9kdWxlU2l6ZSk7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtYXRyaXhXaWR0aDsgeCsrKSB7CisgICAgICBpZiAoW2ltYWdlIGdldFg6bGVmdCArIChpbnQpICh4ICogbW9kdWxlU2l6ZSkgeTppT2Zmc2V0XSkgeworICAgICAgICBbYml0cyBzZXRYOnggeTp5XTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGJpdHM7Cit9CisKKy0gKGZsb2F0KW1vZHVsZVNpemU6KE5TQXJyYXkgKilsZWZ0VG9wQmxhY2sgaW1hZ2U6KFpYQml0TWF0cml4ICopaW1hZ2UgeworICBpbnQgaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0OworICBpbnQgd2lkdGggPSBpbWFnZS53aWR0aDsKKyAgaW50IHggPSBbbGVmdFRvcEJsYWNrWzBdIGludFZhbHVlXTsKKyAgaW50IHkgPSBbbGVmdFRvcEJsYWNrWzFdIGludFZhbHVlXTsKKyAgQk9PTCBpbkJsYWNrID0gWUVTOworICBpbnQgdHJhbnNpdGlvbnMgPSAwOworICB3aGlsZSAoeCA8IHdpZHRoICYmIHkgPCBoZWlnaHQpIHsKKyAgICBpZiAoaW5CbGFjayAhPSBbaW1hZ2UgZ2V0WDp4IHk6eV0pIHsKKyAgICAgIGlmICgrK3RyYW5zaXRpb25zID09IDUpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIHgrKzsKKyAgICB5Kys7CisgIH0KKyAgaWYgKHggPT0gd2lkdGggfHwgeSA9PSBoZWlnaHQpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gKHggLSBbbGVmdFRvcEJsYWNrWzBdIGludFZhbHVlXSkgLyA3LjBmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL1pYUVJDb2RlV3JpdGVyLmggYi9aWGluZ09iakMvcXJjb2RlL1pYUVJDb2RlV3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExNGVlMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvWlhRUkNvZGVXcml0ZXIuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFdyaXRlci5oIgorCisvKioKKyAqIFRoaXMgb2JqZWN0IHJlbmRlcnMgYSBRUiBDb2RlIGFzIGEgQml0TWF0cml4IDJEIGFycmF5IG9mIGdyZXlzY2FsZSB2YWx1ZXMuCisgKi8KKworQGludGVyZmFjZSBaWFFSQ29kZVdyaXRlciA6IE5TT2JqZWN0IDxaWFdyaXRlcj4KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9aWFFSQ29kZVdyaXRlci5tIGIvWlhpbmdPYmpDL3FyY29kZS9aWFFSQ29kZVdyaXRlci5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzNkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL1pYUVJDb2RlV3JpdGVyLm0KQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYQnl0ZU1hdHJpeC5oIgorI2ltcG9ydCAiWlhFbmNvZGVIaW50cy5oIgorI2ltcG9ydCAiWlhFbmNvZGVyLmgiCisjaW1wb3J0ICJaWEVycm9yQ29ycmVjdGlvbkxldmVsLmgiCisjaW1wb3J0ICJaWFFSQ29kZS5oIgorI2ltcG9ydCAiWlhRUkNvZGVXcml0ZXIuaCIKKworaW50IGNvbnN0IFFVSUVUX1pPTkVfU0laRSA9IDQ7CisKK0BpbXBsZW1lbnRhdGlvbiBaWFFSQ29kZVdyaXRlcgorCistIChaWEJpdE1hdHJpeCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW3NlbGYgZW5jb2RlOmNvbnRlbnRzIGZvcm1hdDpmb3JtYXQgd2lkdGg6d2lkdGggaGVpZ2h0OmhlaWdodCBoaW50czpuaWwgZXJyb3I6ZXJyb3JdOworfQorCistIChaWEJpdE1hdHJpeCAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50cyBmb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgaGludHM6KFpYRW5jb2RlSGludHMgKiloaW50cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGlmIChbY29udGVudHMgbGVuZ3RoXSA9PSAwKSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkZvdW5kIGVtcHR5IGNvbnRlbnRzIl07CisgIH0KKworICBpZiAoZm9ybWF0ICE9IGtCYXJjb2RlRm9ybWF0UVJDb2RlKSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkNhbiBvbmx5IGVuY29kZSBRUl9DT0RFIl07CisgIH0KKworICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiUmVxdWVzdGVkIGRpbWVuc2lvbnMgYXJlIHRvbyBzbWFsbDogJWR4JWQiLCB3aWR0aCwgaGVpZ2h0XTsKKyAgfQorCisgIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKmVycm9yQ29ycmVjdGlvbkxldmVsID0gW1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZXJyb3JDb3JyZWN0aW9uTGV2ZWxMXTsKKyAgaW50IHF1aWV0Wm9uZSA9IFFVSUVUX1pPTkVfU0laRTsKKyAgaWYgKGhpbnRzICE9IG5pbCkgeworICAgIGlmIChoaW50cy5lcnJvckNvcnJlY3Rpb25MZXZlbCkgeworICAgICAgZXJyb3JDb3JyZWN0aW9uTGV2ZWwgPSBoaW50cy5lcnJvckNvcnJlY3Rpb25MZXZlbDsKKyAgICB9CisgICAgaWYgKGhpbnRzLm1hcmdpbikgeworICAgICAgcXVpZXRab25lID0gW2hpbnRzLm1hcmdpbiBpbnRWYWx1ZV07CisgICAgfQorICB9CisKKyAgWlhRUkNvZGUgKmNvZGUgPSBbWlhFbmNvZGVyIGVuY29kZTpjb250ZW50cyBlY0xldmVsOmVycm9yQ29ycmVjdGlvbkxldmVsIGhpbnRzOmhpbnRzIGVycm9yOmVycm9yXTsKKyAgcmV0dXJuIFtzZWxmIHJlbmRlclJlc3VsdDpjb2RlIHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHQgcXVpZXRab25lOnF1aWV0Wm9uZV07Cit9CisKKy0gKFpYQml0TWF0cml4ICopcmVuZGVyUmVzdWx0OihaWFFSQ29kZSAqKWNvZGUgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgcXVpZXRab25lOihpbnQpcXVpZXRab25lIHsKKyAgWlhCeXRlTWF0cml4ICppbnB1dCA9IGNvZGUubWF0cml4OworICBpZiAoaW5wdXQgPT0gbmlsKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBpbnQgaW5wdXRXaWR0aCA9IGlucHV0LndpZHRoOworICBpbnQgaW5wdXRIZWlnaHQgPSBpbnB1dC5oZWlnaHQ7CisgIGludCBxcldpZHRoID0gaW5wdXRXaWR0aCArIChxdWlldFpvbmUgPDwgMSk7CisgIGludCBxckhlaWdodCA9IGlucHV0SGVpZ2h0ICsgKHF1aWV0Wm9uZSA8PCAxKTsKKyAgaW50IG91dHB1dFdpZHRoID0gTUFYKHdpZHRoLCBxcldpZHRoKTsKKyAgaW50IG91dHB1dEhlaWdodCA9IE1BWChoZWlnaHQsIHFySGVpZ2h0KTsKKworICBpbnQgbXVsdGlwbGUgPSBNSU4ob3V0cHV0V2lkdGggLyBxcldpZHRoLCBvdXRwdXRIZWlnaHQgLyBxckhlaWdodCk7CisgIC8vIFBhZGRpbmcgaW5jbHVkZXMgYm90aCB0aGUgcXVpZXQgem9uZSBhbmQgdGhlIGV4dHJhIHdoaXRlIHBpeGVscyB0byBhY2NvbW1vZGF0ZSB0aGUgcmVxdWVzdGVkCisgIC8vIGRpbWVuc2lvbnMuIEZvciBleGFtcGxlLCBpZiBpbnB1dCBpcyAyNXgyNSB0aGUgUVIgd2lsbCBiZSAzM3gzMyBpbmNsdWRpbmcgdGhlIHF1aWV0IHpvbmUuCisgIC8vIElmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBpcyAyMDB4MTYwLCB0aGUgbXVsdGlwbGUgd2lsbCBiZSA0LCBmb3IgYSBRUiBvZiAxMzJ4MTMyLiBUaGVzZSB3aWxsCisgIC8vIGhhbmRsZSBhbGwgdGhlIHBhZGRpbmcgZnJvbSAxMDB4MTAwICh0aGUgYWN0dWFsIFFSKSB1cCB0byAyMDB4MTYwLgorICBpbnQgbGVmdFBhZGRpbmcgPSAob3V0cHV0V2lkdGggLSAoaW5wdXRXaWR0aCAqIG11bHRpcGxlKSkgLyAyOworICBpbnQgdG9wUGFkZGluZyA9IChvdXRwdXRIZWlnaHQgLSAoaW5wdXRIZWlnaHQgKiBtdWx0aXBsZSkpIC8gMjsKKworICBaWEJpdE1hdHJpeCAqb3V0cHV0ID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDpvdXRwdXRXaWR0aCBoZWlnaHQ6b3V0cHV0SGVpZ2h0XTsKKworICBmb3IgKGludCBpbnB1dFkgPSAwLCBvdXRwdXRZID0gdG9wUGFkZGluZzsgaW5wdXRZIDwgaW5wdXRIZWlnaHQ7IGlucHV0WSsrLCBvdXRwdXRZICs9IG11bHRpcGxlKSB7CisgICAgZm9yIChpbnQgaW5wdXRYID0gMCwgb3V0cHV0WCA9IGxlZnRQYWRkaW5nOyBpbnB1dFggPCBpbnB1dFdpZHRoOyBpbnB1dFgrKywgb3V0cHV0WCArPSBtdWx0aXBsZSkgeworICAgICAgaWYgKFtpbnB1dCBnZXRYOmlucHV0WCB5OmlucHV0WV0gPT0gMSkgeworICAgICAgICBbb3V0cHV0IHNldFJlZ2lvbkF0TGVmdDpvdXRwdXRYIHRvcDpvdXRwdXRZIHdpZHRoOm11bHRpcGxlIGhlaWdodDptdWx0aXBsZV07CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIG91dHB1dDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYRGF0YU1hc2suaCBiL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWERhdGFNYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1YWJlNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWERhdGFNYXNrLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBFbmNhcHN1bGF0ZXMgZGF0YSBtYXNrcyBmb3IgdGhlIGRhdGEgYml0cyBpbiBhIFFSIGNvZGUsIHBlciBJU08gMTgwMDQ6MjAwNiA2LjguIEltcGxlbWVudGF0aW9ucworICogb2YgdGhpcyBjbGFzcyBjYW4gdW4tbWFzayBhIHJhdyBCaXRNYXRyaXguIEZvciBzaW1wbGljaXR5LCB0aGV5IHdpbGwgdW5tYXNrIHRoZSBlbnRpcmUgQml0TWF0cml4LAorICogaW5jbHVkaW5nIGFyZWFzIHVzZWQgZm9yIGZpbmRlciBwYXR0ZXJucywgdGltaW5nIHBhdHRlcm5zLCBldGMuIFRoZXNlIGFyZWFzIHNob3VsZCBiZSB1bnVzZWQKKyAqIGFmdGVyIHRoZSBwb2ludCB0aGV5IGFyZSB1bm1hc2tlZCBhbnl3YXkuCisgKiAKKyAqIE5vdGUgdGhhdCB0aGUgZGlhZ3JhbSBpbiBzZWN0aW9uIDYuOC4xIGlzIG1pc2xlYWRpbmcgc2luY2UgaXQgaW5kaWNhdGVzIHRoYXQgaSBpcyBjb2x1bW4gcG9zaXRpb24KKyAqIGFuZCBqIGlzIHJvdyBwb3NpdGlvbi4gSW4gZmFjdCwgYXMgdGhlIHRleHQgc2F5cywgaSBpcyByb3cgcG9zaXRpb24gYW5kIGogaXMgY29sdW1uIHBvc2l0aW9uLgorICovCisKK0BjbGFzcyBaWEJpdE1hdHJpeDsKKworQGludGVyZmFjZSBaWERhdGFNYXNrIDogTlNPYmplY3QKKworLSAodm9pZCl1bm1hc2tCaXRNYXRyaXg6KFpYQml0TWF0cml4ICopYml0cyBkaW1lbnNpb246KGludClkaW1lbnNpb247CistIChCT09MKWlzTWFza2VkOihpbnQpaSBqOihpbnQpajsKKysgKFpYRGF0YU1hc2sgKilmb3JSZWZlcmVuY2U6KGludClyZWZlcmVuY2U7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWERhdGFNYXNrLm0gYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhEYXRhTWFzay5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZDNiYzIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhEYXRhTWFzay5tCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhEYXRhTWFzay5oIgorCisvKioKKyAqIDAwMDogbWFzayBiaXRzIGZvciB3aGljaCAoeCArIHkpIG1vZCAyID09IDAKKyAqLworCitAaW50ZXJmYWNlIFpYRGF0YU1hc2swMDAgOiBaWERhdGFNYXNrCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYRGF0YU1hc2swMDAKKworLSAoQk9PTClpc01hc2tlZDooaW50KWkgajooaW50KWogeworICByZXR1cm4gKChpICsgaikgJiAweDAxKSA9PSAwOworfQorCitAZW5kCisKKworLyoqCisgKiAwMDE6IG1hc2sgYml0cyBmb3Igd2hpY2ggeCBtb2QgMiA9PSAwCisgKi8KKworQGludGVyZmFjZSBaWERhdGFNYXNrMDAxIDogWlhEYXRhTWFzaworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWERhdGFNYXNrMDAxCisKKy0gKEJPT0wpaXNNYXNrZWQ6KGludClpIGo6KGludClqIHsKKyAgcmV0dXJuIChpICYgMHgwMSkgPT0gMDsKK30KKworQGVuZAorCisKKy8qKgorICogMDEwOiBtYXNrIGJpdHMgZm9yIHdoaWNoIHkgbW9kIDMgPT0gMAorICovCisKK0BpbnRlcmZhY2UgWlhEYXRhTWFzazAxMCA6IFpYRGF0YU1hc2sKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhEYXRhTWFzazAxMAorCistIChCT09MKWlzTWFza2VkOihpbnQpaSBqOihpbnQpaiB7CisgIHJldHVybiBqICUgMyA9PSAwOworfQorCitAZW5kCisKKworLyoqCisgKiAwMTE6IG1hc2sgYml0cyBmb3Igd2hpY2ggKHggKyB5KSBtb2QgMyA9PSAwCisgKi8KKworQGludGVyZmFjZSBaWERhdGFNYXNrMDExIDogWlhEYXRhTWFzaworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWERhdGFNYXNrMDExCisKKy0gKEJPT0wpaXNNYXNrZWQ6KGludClpIGo6KGludClqIHsKKyAgcmV0dXJuIChpICsgaikgJSAzID09IDA7Cit9CisKK0BlbmQKKworCisvKioKKyAqIDEwMDogbWFzayBiaXRzIGZvciB3aGljaCAoeC8yICsgeS8zKSBtb2QgMiA9PSAwCisgKi8KKworQGludGVyZmFjZSBaWERhdGFNYXNrMTAwIDogWlhEYXRhTWFzaworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWERhdGFNYXNrMTAwCisKKy0gKEJPT0wpaXNNYXNrZWQ6KGludClpIGo6KGludClqIHsKKyAgcmV0dXJuICgoKGludCkoKHVuc2lnbmVkIGludClpID4+IDEpICsgKGogLyAzKSkgJiAweDAxKSA9PSAwOworfQorCitAZW5kCisKKworLyoqCisgKiAxMDE6IG1hc2sgYml0cyBmb3Igd2hpY2ggeHkgbW9kIDIgKyB4eSBtb2QgMyA9PSAwCisgKi8KKworQGludGVyZmFjZSBaWERhdGFNYXNrMTAxIDogWlhEYXRhTWFzaworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWERhdGFNYXNrMTAxCisKKy0gKEJPT0wpaXNNYXNrZWQ6KGludClpIGo6KGludClqIHsKKyAgaW50IHRlbXAgPSBpICogajsKKyAgcmV0dXJuICh0ZW1wICYgMHgwMSkgKyAodGVtcCAlIDMpID09IDA7Cit9CisKK0BlbmQKKworCisvKioKKyAqIDExMDogbWFzayBiaXRzIGZvciB3aGljaCAoeHkgbW9kIDIgKyB4eSBtb2QgMykgbW9kIDIgPT0gMAorICovCisKK0BpbnRlcmZhY2UgWlhEYXRhTWFzazExMCA6IFpYRGF0YU1hc2sKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhEYXRhTWFzazExMAorCistIChCT09MKWlzTWFza2VkOihpbnQpaSBqOihpbnQpaiB7CisgIGludCB0ZW1wID0gaSAqIGo7CisgIHJldHVybiAoKCh0ZW1wICYgMHgwMSkgKyAodGVtcCAlIDMpKSAmIDB4MDEpID09IDA7Cit9CisKK0BlbmQKKworCisvKioKKyAqIDExMTogbWFzayBiaXRzIGZvciB3aGljaCAoKHgreSltb2QgMiArIHh5IG1vZCAzKSBtb2QgMiA9PSAwCisgKi8KKworQGludGVyZmFjZSBaWERhdGFNYXNrMTExIDogWlhEYXRhTWFzaworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWERhdGFNYXNrMTExCisKKy0gKEJPT0wpaXNNYXNrZWQ6KGludClpIGo6KGludClqIHsKKyAgcmV0dXJuICgoKChpICsgaikgJiAweDAxKSArICgoaSAqIGopICUgMykpICYgMHgwMSkgPT0gMDsKK30KKworQGVuZAorCisKK0BpbXBsZW1lbnRhdGlvbiBaWERhdGFNYXNrCisKK3N0YXRpYyBOU0FycmF5ICpEQVRBX01BU0tTID0gbmlsOworCisvKioKKyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCByZXZlcnNlIHRoZSBkYXRhIG1hc2tpbmcgcHJvY2VzcyBhcHBsaWVkIHRvIGEgUVIgQ29kZSBhbmQKKyAqIG1ha2UgaXRzIGJpdHMgcmVhZHkgdG8gcmVhZC4KKyAqLworLSAodm9pZCl1bm1hc2tCaXRNYXRyaXg6KFpYQml0TWF0cml4ICopYml0cyBkaW1lbnNpb246KGludClkaW1lbnNpb24geworICBmb3IgKGludCBpID0gMDsgaSA8IGRpbWVuc2lvbjsgaSsrKSB7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBkaW1lbnNpb247IGorKykgeworICAgICAgaWYgKFtzZWxmIGlzTWFza2VkOmkgajpqXSkgeworICAgICAgICBbYml0cyBmbGlwWDpqIHk6aV07CisgICAgICB9CisgICAgfQorICB9Cit9CisKKy0gKEJPT0wpaXNNYXNrZWQ6KGludClpIGo6KGludClqIHsKKyAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiWW91IG11c3Qgb3ZlcnJpZGUgJUAgaW4gYSBzdWJjbGFzcyIsIE5TU3RyaW5nRnJvbVNlbGVjdG9yKF9jbWQpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07Cit9CisKKworKyAoWlhEYXRhTWFzayAqKWZvclJlZmVyZW5jZTooaW50KXJlZmVyZW5jZSB7CisgIGlmICghREFUQV9NQVNLUykgeworICAgIC8qKgorICAgICAqIFNlZSBJU08gMTgwMDQ6MjAwNiA2LjguMQorICAgICAqLworICAgIERBVEFfTUFTS1MgPSBAW1tbWlhEYXRhTWFzazAwMCBhbGxvY10gaW5pdF0sCisgICAgICAgICAgICAgICAgICAgW1taWERhdGFNYXNrMDAxIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgICAgICBbW1pYRGF0YU1hc2swMTAgYWxsb2NdIGluaXRdLAorICAgICAgICAgICAgICAgICAgIFtbWlhEYXRhTWFzazAxMSBhbGxvY10gaW5pdF0sCisgICAgICAgICAgICAgICAgICAgW1taWERhdGFNYXNrMTAwIGFsbG9jXSBpbml0XSwKKyAgICAgICAgICAgICAgICAgICBbW1pYRGF0YU1hc2sxMDEgYWxsb2NdIGluaXRdLAorICAgICAgICAgICAgICAgICAgIFtbWlhEYXRhTWFzazExMCBhbGxvY10gaW5pdF0sCisgICAgICAgICAgICAgICAgICAgW1taWERhdGFNYXNrMTExIGFsbG9jXSBpbml0XV07CisgIH0KKworICBpZiAocmVmZXJlbmNlIDwgMCB8fCByZWZlcmVuY2UgPiA3KSB7CisgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICBmb3JtYXQ6QCJJbnZhbGlkIHJlZmVyZW5jZSB2YWx1ZSJdOworICB9CisgIHJldHVybiBEQVRBX01BU0tTW3JlZmVyZW5jZV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWEVycm9yQ29ycmVjdGlvbkxldmVsLmggYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MGQyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogU2VlIElTTyAxODAwNDoyMDA2LCA2LjUuMS4gVGhpcyBlbnVtIGVuY2Fwc3VsYXRlcyB0aGUgZm91ciBlcnJvciBjb3JyZWN0aW9uIGxldmVscworICogZGVmaW5lZCBieSB0aGUgUVIgY29kZSBzdGFuZGFyZC4KKyAqLworCitAaW50ZXJmYWNlIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGJpdHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpuYW1lOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBvcmRpbmFsOworCistIChpZClpbml0V2l0aE9yZGluYWw6KGludClhbk9yZGluYWwgYml0czooaW50KWJpdHMgbmFtZTooTlNTdHJpbmcgKiluYW1lOworKyAoWlhFcnJvckNvcnJlY3Rpb25MZXZlbCAqKWZvckJpdHM6KGludCliaXRzOworCisvKioKKyAqIEwgPSB+NyUgY29ycmVjdGlvbgorICovCisrIChaWEVycm9yQ29ycmVjdGlvbkxldmVsICopZXJyb3JDb3JyZWN0aW9uTGV2ZWxMOworCisvKioKKyAqIE0gPSB+MTUlIGNvcnJlY3Rpb24KKyAqLworKyAoWlhFcnJvckNvcnJlY3Rpb25MZXZlbCAqKWVycm9yQ29ycmVjdGlvbkxldmVsTTsKKworLyoqCisgKiBRID0gfjI1JSBjb3JyZWN0aW9uCisgKi8KKysgKFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillcnJvckNvcnJlY3Rpb25MZXZlbFE7CisKKy8qKgorICogSCA9IH4zMCUgY29ycmVjdGlvbgorICovCisrIChaWEVycm9yQ29ycmVjdGlvbkxldmVsICopZXJyb3JDb3JyZWN0aW9uTGV2ZWxIOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5tIGIvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmQ4MjNmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwubQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEVycm9yQ29ycmVjdGlvbkxldmVsLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEVycm9yQ29ycmVjdGlvbkxldmVsCisKK3N0YXRpYyBOU0FycmF5ICpGT1JfQklUUyA9IG5pbDsKKworLSAoaWQpaW5pdFdpdGhPcmRpbmFsOihpbnQpb3JkaW5hbCBiaXRzOihpbnQpYml0cyBuYW1lOihOU1N0cmluZyAqKW5hbWUgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9vcmRpbmFsID0gb3JkaW5hbDsKKyAgICBfYml0cyA9IGJpdHM7CisgICAgX25hbWUgPSBuYW1lOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24geworICByZXR1cm4gc2VsZi5uYW1lOworfQorCisrIChaWEVycm9yQ29ycmVjdGlvbkxldmVsICopZm9yQml0czooaW50KWJpdHMgeworICBpZiAoIUZPUl9CSVRTKSB7CisgICAgRk9SX0JJVFMgPSBAW1taWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsTV0sIFtaWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsTF0sCisgICAgICAgICAgICAgICAgIFtaWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsSF0sIFtaWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsUV1dOworICB9CisKKyAgaWYgKGJpdHMgPCAwIHx8IGJpdHMgPj0gW0ZPUl9CSVRTIGNvdW50XSkgeworICAgIEB0aHJvdyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOkAiSW52YWxpZCBiaXRzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsXTsKKyAgfQorICByZXR1cm4gRk9SX0JJVFNbYml0c107Cit9CisKKy8qKgorICogTCA9IH43JSBjb3JyZWN0aW9uCisgKi8KKysgKFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillcnJvckNvcnJlY3Rpb25MZXZlbEwgeworICBzdGF0aWMgWlhFcnJvckNvcnJlY3Rpb25MZXZlbCAqdGhpc0xldmVsID0gbmlsOworICBpZiAoIXRoaXNMZXZlbCkgeworICAgIHRoaXNMZXZlbCA9IFtbWlhFcnJvckNvcnJlY3Rpb25MZXZlbCBhbGxvY10gaW5pdFdpdGhPcmRpbmFsOjAgYml0czoweDAxIG5hbWU6QCJMIl07CisgIH0KKyAgcmV0dXJuIHRoaXNMZXZlbDsKK30KKworLyoqCisgKiBNID0gfjE1JSBjb3JyZWN0aW9uCisgKi8KKysgKFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillcnJvckNvcnJlY3Rpb25MZXZlbE0geworICBzdGF0aWMgWlhFcnJvckNvcnJlY3Rpb25MZXZlbCAqdGhpc0xldmVsID0gbmlsOworICBpZiAoIXRoaXNMZXZlbCkgeworICAgIHRoaXNMZXZlbCA9IFtbWlhFcnJvckNvcnJlY3Rpb25MZXZlbCBhbGxvY10gaW5pdFdpdGhPcmRpbmFsOjEgYml0czoweDAwIG5hbWU6QCJNIl07CisgIH0KKyAgcmV0dXJuIHRoaXNMZXZlbDsKK30KKworLyoqCisgKiBRID0gfjI1JSBjb3JyZWN0aW9uCisgKi8KKysgKFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillcnJvckNvcnJlY3Rpb25MZXZlbFEgeworICBzdGF0aWMgWlhFcnJvckNvcnJlY3Rpb25MZXZlbCAqdGhpc0xldmVsID0gbmlsOworICBpZiAoIXRoaXNMZXZlbCkgeworICAgIHRoaXNMZXZlbCA9IFtbWlhFcnJvckNvcnJlY3Rpb25MZXZlbCBhbGxvY10gaW5pdFdpdGhPcmRpbmFsOjIgYml0czoweDAzIG5hbWU6QCJRIl07CisgIH0KKyAgcmV0dXJuIHRoaXNMZXZlbDsKK30KKworLyoqCisgKiBIID0gfjMwJSBjb3JyZWN0aW9uCisgKi8KKysgKFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillcnJvckNvcnJlY3Rpb25MZXZlbEggeworICBzdGF0aWMgWlhFcnJvckNvcnJlY3Rpb25MZXZlbCAqdGhpc0xldmVsID0gbmlsOworICBpZiAoIXRoaXNMZXZlbCkgeworICAgIHRoaXNMZXZlbCA9IFtbWlhFcnJvckNvcnJlY3Rpb25MZXZlbCBhbGxvY10gaW5pdFdpdGhPcmRpbmFsOjMgYml0czoweDAyIG5hbWU6QCJIIl07CisgIH0KKyAgcmV0dXJuIHRoaXNMZXZlbDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYRm9ybWF0SW5mb3JtYXRpb24uaCBiL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWEZvcm1hdEluZm9ybWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxYzQ5MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWEZvcm1hdEluZm9ybWF0aW9uLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBFbmNhcHN1bGF0ZXMgYSBRUiBDb2RlJ3MgZm9ybWF0IGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgdGhlIGRhdGEgbWFzayB1c2VkIGFuZAorICogZXJyb3IgY29ycmVjdGlvbiBsZXZlbC4KKyAqLworCitAY2xhc3MgWlhFcnJvckNvcnJlY3Rpb25MZXZlbDsKKworQGludGVyZmFjZSBaWEZvcm1hdEluZm9ybWF0aW9uIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKmVycm9yQ29ycmVjdGlvbkxldmVsOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGNoYXIgZGF0YU1hc2s7CisKKysgKGludCludW1CaXRzRGlmZmVyaW5nOihpbnQpYSBiOihpbnQpYjsKKysgKFpYRm9ybWF0SW5mb3JtYXRpb24gKilkZWNvZGVGb3JtYXRJbmZvcm1hdGlvbjooaW50KW1hc2tlZEZvcm1hdEluZm8xIG1hc2tlZEZvcm1hdEluZm8yOihpbnQpbWFza2VkRm9ybWF0SW5mbzI7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWEZvcm1hdEluZm9ybWF0aW9uLm0gYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhGb3JtYXRJbmZvcm1hdGlvbi5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNWY1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhGb3JtYXRJbmZvcm1hdGlvbi5tCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEVycm9yQ29ycmVjdGlvbkxldmVsLmgiCisjaW1wb3J0ICJaWEZvcm1hdEluZm9ybWF0aW9uLmgiCisKK2ludCBjb25zdCBGT1JNQVRfSU5GT19NQVNLX1FSID0gMHg1NDEyOworCisvKioKKyAqIFNlZSBJU08gMTgwMDQ6MjAwNiwgQW5uZXggQywgVGFibGUgQy4xCisgKi8KK2ludCBjb25zdCBGT1JNQVRfSU5GT19ERUNPREVfTE9PS1VQX0xFTiA9IDMyOworaW50IGNvbnN0IEZPUk1BVF9JTkZPX0RFQ09ERV9MT09LVVBbRk9STUFUX0lORk9fREVDT0RFX0xPT0tVUF9MRU5dWzJdID0geworICB7MHg1NDEyLCAweDAwfSwKKyAgezB4NTEyNSwgMHgwMX0sCisgIHsweDVFN0MsIDB4MDJ9LAorICB7MHg1QjRCLCAweDAzfSwKKyAgezB4NDVGOSwgMHgwNH0sCisgIHsweDQwQ0UsIDB4MDV9LAorICB7MHg0Rjk3LCAweDA2fSwKKyAgezB4NEFBMCwgMHgwN30sCisgIHsweDc3QzQsIDB4MDh9LAorICB7MHg3MkYzLCAweDA5fSwKKyAgezB4N0RBQSwgMHgwQX0sCisgIHsweDc4OUQsIDB4MEJ9LAorICB7MHg2NjJGLCAweDBDfSwKKyAgezB4NjMxOCwgMHgwRH0sCisgIHsweDZDNDEsIDB4MEV9LAorICB7MHg2OTc2LCAweDBGfSwKKyAgezB4MTY4OSwgMHgxMH0sCisgIHsweDEzQkUsIDB4MTF9LAorICB7MHgxQ0U3LCAweDEyfSwKKyAgezB4MTlEMCwgMHgxM30sCisgIHsweDA3NjIsIDB4MTR9LAorICB7MHgwMjU1LCAweDE1fSwKKyAgezB4MEQwQywgMHgxNn0sCisgIHsweDA4M0IsIDB4MTd9LAorICB7MHgzNTVGLCAweDE4fSwKKyAgezB4MzA2OCwgMHgxOX0sCisgIHsweDNGMzEsIDB4MUF9LAorICB7MHgzQTA2LCAweDFCfSwKKyAgezB4MjRCNCwgMHgxQ30sCisgIHsweDIxODMsIDB4MUR9LAorICB7MHgyRURBLCAweDFFfSwKKyAgezB4MkJFRCwgMHgxRn0sCit9OworCisvKioKKyAqIE9mZnNldCBpIGhvbGRzIHRoZSBudW1iZXIgb2YgMSBiaXRzIGluIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgaQorICovCitpbnQgY29uc3QgQklUU19TRVRfSU5fSEFMRl9CWVRFWzE2XSA9IHswLCAxLCAxLCAyLCAxLCAyLCAyLCAzLCAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0fTsKKworQGltcGxlbWVudGF0aW9uIFpYRm9ybWF0SW5mb3JtYXRpb24KKworLSAoaWQpaW5pdFdpdGhGb3JtYXRJbmZvOihpbnQpZm9ybWF0SW5mbyB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2Vycm9yQ29ycmVjdGlvbkxldmVsID0gW1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZm9yQml0czooZm9ybWF0SW5mbyA+PiAzKSAmIDB4MDNdOworICAgIF9kYXRhTWFzayA9IChjaGFyKShmb3JtYXRJbmZvICYgMHgwNyk7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworKyAoaW50KW51bUJpdHNEaWZmZXJpbmc6KGludClhIGI6KGludCliIHsKKyAgYSBePSBiOworICByZXR1cm4gQklUU19TRVRfSU5fSEFMRl9CWVRFW2EgJiAweDBGXSArCisgICAgICBCSVRTX1NFVF9JTl9IQUxGX0JZVEVbKChpbnQpKCh1bnNpZ25lZCBpbnQpYSkgPj4gNCAmIDB4MEYpXSArCisgICAgICBCSVRTX1NFVF9JTl9IQUxGX0JZVEVbKChpbnQpKCh1bnNpZ25lZCBpbnQpYSkgPj4gOCAmIDB4MEYpXSArCisgICAgICBCSVRTX1NFVF9JTl9IQUxGX0JZVEVbKChpbnQpKCh1bnNpZ25lZCBpbnQpYSkgPj4gMTIgJiAweDBGKV0gKworICAgICAgQklUU19TRVRfSU5fSEFMRl9CWVRFWygoaW50KSgodW5zaWduZWQgaW50KWEpID4+IDE2ICYgMHgwRildICsKKyAgICAgIEJJVFNfU0VUX0lOX0hBTEZfQllURVsoKGludCkoKHVuc2lnbmVkIGludClhKSA+PiAyMCAmIDB4MEYpXSArCisgICAgICBCSVRTX1NFVF9JTl9IQUxGX0JZVEVbKChpbnQpKCh1bnNpZ25lZCBpbnQpYSkgPj4gMjQgJiAweDBGKV0gKworICAgICAgQklUU19TRVRfSU5fSEFMRl9CWVRFWygoaW50KSgodW5zaWduZWQgaW50KWEpID4+IDI4ICYgMHgwRildOworfQorCisrIChaWEZvcm1hdEluZm9ybWF0aW9uICopZGVjb2RlRm9ybWF0SW5mb3JtYXRpb246KGludCltYXNrZWRGb3JtYXRJbmZvMSBtYXNrZWRGb3JtYXRJbmZvMjooaW50KW1hc2tlZEZvcm1hdEluZm8yIHsKKyAgWlhGb3JtYXRJbmZvcm1hdGlvbiAqZm9ybWF0SW5mbyA9IFtzZWxmIGRvRGVjb2RlRm9ybWF0SW5mb3JtYXRpb246bWFza2VkRm9ybWF0SW5mbzEgbWFza2VkRm9ybWF0SW5mbzI6bWFza2VkRm9ybWF0SW5mbzJdOworICBpZiAoZm9ybWF0SW5mbyAhPSBuaWwpIHsKKyAgICByZXR1cm4gZm9ybWF0SW5mbzsKKyAgfQorICByZXR1cm4gW3NlbGYgZG9EZWNvZGVGb3JtYXRJbmZvcm1hdGlvbjptYXNrZWRGb3JtYXRJbmZvMSBeIEZPUk1BVF9JTkZPX01BU0tfUVIgbWFza2VkRm9ybWF0SW5mbzI6bWFza2VkRm9ybWF0SW5mbzIgXiBGT1JNQVRfSU5GT19NQVNLX1FSXTsKK30KKworKyAoWlhGb3JtYXRJbmZvcm1hdGlvbiAqKWRvRGVjb2RlRm9ybWF0SW5mb3JtYXRpb246KGludCltYXNrZWRGb3JtYXRJbmZvMSBtYXNrZWRGb3JtYXRJbmZvMjooaW50KW1hc2tlZEZvcm1hdEluZm8yIHsKKyAgaW50IGJlc3REaWZmZXJlbmNlID0gSU5UX01BWDsKKyAgaW50IGJlc3RGb3JtYXRJbmZvID0gMDsKKworICBmb3IgKGludCBpID0gMDsgaSA8IEZPUk1BVF9JTkZPX0RFQ09ERV9MT09LVVBfTEVOOyBpKyspIHsKKyAgICBpbnQgdGFyZ2V0SW5mbyA9IEZPUk1BVF9JTkZPX0RFQ09ERV9MT09LVVBbaV1bMF07CisgICAgaWYgKHRhcmdldEluZm8gPT0gbWFza2VkRm9ybWF0SW5mbzEgfHwgdGFyZ2V0SW5mbyA9PSBtYXNrZWRGb3JtYXRJbmZvMikgeworICAgICAgcmV0dXJuIFtbWlhGb3JtYXRJbmZvcm1hdGlvbiBhbGxvY10gaW5pdFdpdGhGb3JtYXRJbmZvOkZPUk1BVF9JTkZPX0RFQ09ERV9MT09LVVBbaV1bMV1dOworICAgIH0KKyAgICBpbnQgYml0c0RpZmZlcmVuY2UgPSBbc2VsZiBudW1CaXRzRGlmZmVyaW5nOm1hc2tlZEZvcm1hdEluZm8xIGI6dGFyZ2V0SW5mb107CisgICAgaWYgKGJpdHNEaWZmZXJlbmNlIDwgYmVzdERpZmZlcmVuY2UpIHsKKyAgICAgIGJlc3RGb3JtYXRJbmZvID0gRk9STUFUX0lORk9fREVDT0RFX0xPT0tVUFtpXVsxXTsKKyAgICAgIGJlc3REaWZmZXJlbmNlID0gYml0c0RpZmZlcmVuY2U7CisgICAgfQorICAgIGlmIChtYXNrZWRGb3JtYXRJbmZvMSAhPSBtYXNrZWRGb3JtYXRJbmZvMikgeworICAgICAgYml0c0RpZmZlcmVuY2UgPSBbc2VsZiBudW1CaXRzRGlmZmVyaW5nOm1hc2tlZEZvcm1hdEluZm8yIGI6dGFyZ2V0SW5mb107CisgICAgICBpZiAoYml0c0RpZmZlcmVuY2UgPCBiZXN0RGlmZmVyZW5jZSkgeworICAgICAgICBiZXN0Rm9ybWF0SW5mbyA9IEZPUk1BVF9JTkZPX0RFQ09ERV9MT09LVVBbaV1bMV07CisgICAgICAgIGJlc3REaWZmZXJlbmNlID0gYml0c0RpZmZlcmVuY2U7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKGJlc3REaWZmZXJlbmNlIDw9IDMpIHsKKyAgICByZXR1cm4gW1taWEZvcm1hdEluZm9ybWF0aW9uIGFsbG9jXSBpbml0V2l0aEZvcm1hdEluZm86YmVzdEZvcm1hdEluZm9dOworICB9CisgIHJldHVybiBuaWw7Cit9CisKKy0gKE5TVUludGVnZXIpaGFzaCB7CisgIHJldHVybiAoc2VsZi5lcnJvckNvcnJlY3Rpb25MZXZlbC5vcmRpbmFsIDw8IDMpIHwgKGludClzZWxmLmRhdGFNYXNrOworfQorCistIChCT09MKWlzRXF1YWw6KGlkKW8geworICBpZiAoIVtvIGlzS2luZE9mQ2xhc3M6W1pYRm9ybWF0SW5mb3JtYXRpb24gY2xhc3NdXSkgeworICAgIHJldHVybiBOTzsKKyAgfQorICBaWEZvcm1hdEluZm9ybWF0aW9uICpvdGhlciA9IChaWEZvcm1hdEluZm9ybWF0aW9uICopbzsKKyAgcmV0dXJuIHNlbGYuZXJyb3JDb3JyZWN0aW9uTGV2ZWwgPT0gb3RoZXIuZXJyb3JDb3JyZWN0aW9uTGV2ZWwgJiYgc2VsZi5kYXRhTWFzayA9PSBvdGhlci5kYXRhTWFzazsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYTW9kZS5oIGIvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NTQ1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhNb2RlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBTZWUgSVNPIDE4MDA0OjIwMDYsIDYuNC4xLCBUYWJsZXMgMiBhbmQgMy4gVGhpcyBlbnVtIGVuY2Fwc3VsYXRlcyB0aGUgdmFyaW91cyBtb2RlcyBpbiB3aGljaAorICogZGF0YSBjYW4gYmUgZW5jb2RlZCB0byBiaXRzIGluIHRoZSBRUiBjb2RlIHN0YW5kYXJkLgorICovCisKK0BjbGFzcyBaWFFSQ29kZVZlcnNpb247CisKK0BpbnRlcmZhY2UgWlhNb2RlIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBiaXRzOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHJlYWRvbmx5KSBOU1N0cmluZyAqbmFtZTsKKworLSAoaWQpaW5pdFdpdGhDaGFyYWN0ZXJDb3VudEJpdHNGb3JWZXJzaW9uczooTlNBcnJheSAqKWNoYXJhY3RlckNvdW50Qml0c0ZvclZlcnNpb25zIGJpdHM6KGludCliaXRzIG5hbWU6KE5TU3RyaW5nICopbmFtZTsKKysgKFpYTW9kZSAqKWZvckJpdHM6KGludCliaXRzOworLSAoaW50KWNoYXJhY3RlckNvdW50Qml0czooWlhRUkNvZGVWZXJzaW9uICopdmVyc2lvbjsKKworKyAoWlhNb2RlICopdGVybWluYXRvck1vZGU7IC8vIE5vdCByZWFsbHkgYSBtb2RlLi4uCisrIChaWE1vZGUgKiludW1lcmljTW9kZTsKKysgKFpYTW9kZSAqKWFscGhhbnVtZXJpY01vZGU7CisrIChaWE1vZGUgKilzdHJ1Y3R1cmVkQXBwZW5kTW9kZTsgLy8gTm90IHN1cHBvcnRlZAorKyAoWlhNb2RlICopYnl0ZU1vZGU7CisrIChaWE1vZGUgKillY2lNb2RlOyAvLyBjaGFyYWN0ZXIgY291bnRzIGRvbid0IGFwcGx5CisrIChaWE1vZGUgKilrYW5qaU1vZGU7CisrIChaWE1vZGUgKilmbmMxRmlyc3RQb3NpdGlvbk1vZGU7CisrIChaWE1vZGUgKilmbmMxU2Vjb25kUG9zaXRpb25Nb2RlOworCisvKiogU2VlIEdCVCAxODI4NC0yMDAwOyAiSGFuemkiIGlzIGEgdHJhbnNsaXRlcmF0aW9uIG9mIHRoaXMgbW9kZSBuYW1lLiAqLworKyAoWlhNb2RlICopaGFuemlNb2RlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhNb2RlLm0gYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhNb2RlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1ODM4OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWE1vZGUubQpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhNb2RlLmgiCisjaW1wb3J0ICJaWFFSQ29kZVZlcnNpb24uaCIKKworQGludGVyZmFjZSBaWE1vZGUgKCkKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNBcnJheSAqY2hhcmFjdGVyQ291bnRCaXRzRm9yVmVyc2lvbnM7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYTW9kZQorCistIChpZClpbml0V2l0aENoYXJhY3RlckNvdW50Qml0c0ZvclZlcnNpb25zOihOU0FycmF5ICopY2hhcmFjdGVyQ291bnRCaXRzRm9yVmVyc2lvbnMgYml0czooaW50KWJpdHMgbmFtZTooTlNTdHJpbmcgKiluYW1lIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfY2hhcmFjdGVyQ291bnRCaXRzRm9yVmVyc2lvbnMgPSBjaGFyYWN0ZXJDb3VudEJpdHNGb3JWZXJzaW9uczsKKyAgICBfYml0cyA9IGJpdHM7CisgICAgX25hbWUgPSBuYW1lOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKFpYTW9kZSAqKWZvckJpdHM6KGludCliaXRzIHsKKyAgc3dpdGNoIChiaXRzKSB7CisgICAgY2FzZSAweDA6CisgICAgICByZXR1cm4gW1pYTW9kZSB0ZXJtaW5hdG9yTW9kZV07CisgICAgY2FzZSAweDE6CisgICAgICByZXR1cm4gW1pYTW9kZSBudW1lcmljTW9kZV07CisgICAgY2FzZSAweDI6CisgICAgICByZXR1cm4gW1pYTW9kZSBhbHBoYW51bWVyaWNNb2RlXTsKKyAgICBjYXNlIDB4MzoKKyAgICAgIHJldHVybiBbWlhNb2RlIHN0cnVjdHVyZWRBcHBlbmRNb2RlXTsKKyAgICBjYXNlIDB4NDoKKyAgICAgIHJldHVybiBbWlhNb2RlIGJ5dGVNb2RlXTsKKyAgICBjYXNlIDB4NToKKyAgICAgIHJldHVybiBbWlhNb2RlIGZuYzFGaXJzdFBvc2l0aW9uTW9kZV07CisgICAgY2FzZSAweDc6CisgICAgICByZXR1cm4gW1pYTW9kZSBlY2lNb2RlXTsKKyAgICBjYXNlIDB4ODoKKyAgICAgIHJldHVybiBbWlhNb2RlIGthbmppTW9kZV07CisgICAgY2FzZSAweDk6CisgICAgICByZXR1cm4gW1pYTW9kZSBmbmMxU2Vjb25kUG9zaXRpb25Nb2RlXTsKKyAgICBjYXNlIDB4RDoKKyAgICAgIHJldHVybiBbWlhNb2RlIGhhbnppTW9kZV07CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBuaWw7CisgIH0KK30KKworLSAoaW50KWNoYXJhY3RlckNvdW50Qml0czooWlhRUkNvZGVWZXJzaW9uICopdmVyc2lvbiB7CisgIGludCBudW1iZXIgPSB2ZXJzaW9uLnZlcnNpb25OdW1iZXI7CisgIGludCBvZmZzZXQ7CisgIGlmIChudW1iZXIgPD0gOSkgeworICAgIG9mZnNldCA9IDA7CisgIH0gZWxzZSBpZiAobnVtYmVyIDw9IDI2KSB7CisgICAgb2Zmc2V0ID0gMTsKKyAgfSBlbHNlIHsKKyAgICBvZmZzZXQgPSAyOworICB9CisgIHJldHVybiBbc2VsZi5jaGFyYWN0ZXJDb3VudEJpdHNGb3JWZXJzaW9uc1tvZmZzZXRdIGludFZhbHVlXTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7CisgIHJldHVybiBzZWxmLm5hbWU7Cit9CisKKysgKFpYTW9kZSAqKXRlcm1pbmF0b3JNb2RlIHsKKyAgc3RhdGljIFpYTW9kZSAqdGhpc01vZGUgPSBuaWw7CisgIGlmICghdGhpc01vZGUpIHsKKyAgICB0aGlzTW9kZSA9IFtbWlhNb2RlIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlckNvdW50Qml0c0ZvclZlcnNpb25zOkBbQDAsIEAwLCBAMF0gYml0czoweDAwIG5hbWU6QCJURVJNSU5BVE9SIl07CisgIH0KKyAgcmV0dXJuIHRoaXNNb2RlOworfQorCisrIChaWE1vZGUgKiludW1lcmljTW9kZSB7CisgIHN0YXRpYyBaWE1vZGUgKnRoaXNNb2RlID0gbmlsOworICBpZiAoIXRoaXNNb2RlKSB7CisgICAgdGhpc01vZGUgPSBbW1pYTW9kZSBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJDb3VudEJpdHNGb3JWZXJzaW9uczpAW0AxMCwgQDEyLCBAMTRdIGJpdHM6MHgwMSBuYW1lOkAiTlVNRVJJQyJdOworICB9CisgIHJldHVybiB0aGlzTW9kZTsKK30KKworKyAoWlhNb2RlICopYWxwaGFudW1lcmljTW9kZSB7CisgIHN0YXRpYyBaWE1vZGUgKnRoaXNNb2RlID0gbmlsOworICBpZiAoIXRoaXNNb2RlKSB7CisgICAgdGhpc01vZGUgPSBbW1pYTW9kZSBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJDb3VudEJpdHNGb3JWZXJzaW9uczpAW0A5LCBAMTEsIEAxM10gYml0czoweDAyIG5hbWU6QCJBTFBIQU5VTUVSSUMiXTsKKyAgfQorICByZXR1cm4gdGhpc01vZGU7Cit9CisKKysgKFpYTW9kZSAqKXN0cnVjdHVyZWRBcHBlbmRNb2RlIHsKKyAgc3RhdGljIFpYTW9kZSAqdGhpc01vZGUgPSBuaWw7CisgIGlmICghdGhpc01vZGUpIHsKKyAgICB0aGlzTW9kZSA9IFtbWlhNb2RlIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlckNvdW50Qml0c0ZvclZlcnNpb25zOkBbQDAsIEAwLCBAMF0gYml0czoweDAzIG5hbWU6QCJTVFJVQ1RVUkVEX0FQUEVORCJdOworICB9CisgIHJldHVybiB0aGlzTW9kZTsKK30KKworKyAoWlhNb2RlICopYnl0ZU1vZGUgeworICBzdGF0aWMgWlhNb2RlICp0aGlzTW9kZSA9IG5pbDsKKyAgaWYgKCF0aGlzTW9kZSkgeworICAgIHRoaXNNb2RlID0gW1taWE1vZGUgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyQ291bnRCaXRzRm9yVmVyc2lvbnM6QFtAOCwgQDE2LCBAMTZdIGJpdHM6MHgwNCBuYW1lOkAiQllURSJdOworICB9CisgIHJldHVybiB0aGlzTW9kZTsKK30KKworKyAoWlhNb2RlICopZWNpTW9kZSB7CisgIHN0YXRpYyBaWE1vZGUgKnRoaXNNb2RlID0gbmlsOworICBpZiAoIXRoaXNNb2RlKSB7CisgICAgdGhpc01vZGUgPSBbW1pYTW9kZSBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJDb3VudEJpdHNGb3JWZXJzaW9uczpAW0AwLCBAMCwgQDBdIGJpdHM6MHgwNyBuYW1lOkAiRUNJIl07CisgIH0KKyAgcmV0dXJuIHRoaXNNb2RlOworfQorCisrIChaWE1vZGUgKilrYW5qaU1vZGUgeworICBzdGF0aWMgWlhNb2RlICp0aGlzTW9kZSA9IG5pbDsKKyAgaWYgKCF0aGlzTW9kZSkgeworICAgIHRoaXNNb2RlID0gW1taWE1vZGUgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyQ291bnRCaXRzRm9yVmVyc2lvbnM6QFtAOCwgQDEwLCBAMTJdIGJpdHM6MHgwOCBuYW1lOkAiS0FOSkkiXTsKKyAgfQorICByZXR1cm4gdGhpc01vZGU7Cit9CisKKysgKFpYTW9kZSAqKWZuYzFGaXJzdFBvc2l0aW9uTW9kZSB7CisgIHN0YXRpYyBaWE1vZGUgKnRoaXNNb2RlID0gbmlsOworICBpZiAoIXRoaXNNb2RlKSB7CisgICAgdGhpc01vZGUgPSBbW1pYTW9kZSBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJDb3VudEJpdHNGb3JWZXJzaW9uczpAW0AwLCBAMCwgQDBdIGJpdHM6MHgwNSBuYW1lOkAiRk5DMV9GSVJTVF9QT1NJVElPTiJdOworICB9CisgIHJldHVybiB0aGlzTW9kZTsKK30KKworKyAoWlhNb2RlICopZm5jMVNlY29uZFBvc2l0aW9uTW9kZSB7CisgIHN0YXRpYyBaWE1vZGUgKnRoaXNNb2RlID0gbmlsOworICBpZiAoIXRoaXNNb2RlKSB7CisgICAgdGhpc01vZGUgPSBbW1pYTW9kZSBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJDb3VudEJpdHNGb3JWZXJzaW9uczpAW0AwLCBAMCwgQDBdIGJpdHM6MHgwOSBuYW1lOkAiRk5DMV9TRUNPTkRfUE9TSVRJT04iXTsKKyAgfQorICByZXR1cm4gdGhpc01vZGU7Cit9CisKKy8qKgorICogU2VlIEdCVCAxODI4NC0yMDAwOyAiSGFuemkiIGlzIGEgdHJhbnNsaXRlcmF0aW9uIG9mIHRoaXMgbW9kZSBuYW1lLgorICovCisrIChaWE1vZGUgKiloYW56aU1vZGUgeworICBzdGF0aWMgWlhNb2RlICp0aGlzTW9kZSA9IG5pbDsKKyAgaWYgKCF0aGlzTW9kZSkgeworICAgIHRoaXNNb2RlID0gW1taWE1vZGUgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyQ291bnRCaXRzRm9yVmVyc2lvbnM6QFtAOCwgQDEwLCBAMTJdIGJpdHM6MHgwRCBuYW1lOkAiSEFOWkkiXTsKKyAgfQorICByZXR1cm4gdGhpc01vZGU7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5oIGIvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlQml0TWF0cml4UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4MmQ3MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BjbGFzcyBaWEJpdE1hdHJpeCwgWlhGb3JtYXRJbmZvcm1hdGlvbiwgWlhRUkNvZGVWZXJzaW9uOworCitAaW50ZXJmYWNlIFpYUVJDb2RlQml0TWF0cml4UGFyc2VyIDogTlNPYmplY3QKKworLSAoaWQpaW5pdFdpdGhCaXRNYXRyaXg6KFpYQml0TWF0cml4ICopYml0TWF0cml4IGVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoWlhGb3JtYXRJbmZvcm1hdGlvbiAqKXJlYWRGb3JtYXRJbmZvcm1hdGlvbldpdGhFcnJvcjooTlNFcnJvciAqKillcnJvcjsKKy0gKFpYUVJDb2RlVmVyc2lvbiAqKXJlYWRWZXJzaW9uV2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoTlNBcnJheSAqKXJlYWRDb2Rld29yZHNXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5tIGIvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlQml0TWF0cml4UGFyc2VyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0MmM1MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5tCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhEYXRhTWFzay5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYRm9ybWF0SW5mb3JtYXRpb24uaCIKKyNpbXBvcnQgIlpYUVJDb2RlQml0TWF0cml4UGFyc2VyLmgiCisjaW1wb3J0ICJaWFFSQ29kZVZlcnNpb24uaCIKKworQGludGVyZmFjZSBaWFFSQ29kZUJpdE1hdHJpeFBhcnNlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWEJpdE1hdHJpeCAqYml0TWF0cml4OworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhGb3JtYXRJbmZvcm1hdGlvbiAqcGFyc2VkRm9ybWF0SW5mbzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYUVJDb2RlVmVyc2lvbiAqcGFyc2VkVmVyc2lvbjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhRUkNvZGVCaXRNYXRyaXhQYXJzZXIKKworLSAoaWQpaW5pdFdpdGhCaXRNYXRyaXg6KFpYQml0TWF0cml4ICopYml0TWF0cml4IGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaW50IGRpbWVuc2lvbiA9IGJpdE1hdHJpeC5oZWlnaHQ7CisgIGlmIChkaW1lbnNpb24gPCAyMSB8fCAoZGltZW5zaW9uICYgMHgwMykgIT0gMSkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9iaXRNYXRyaXggPSBiaXRNYXRyaXg7CisgICAgX3BhcnNlZEZvcm1hdEluZm8gPSBuaWw7CisgICAgX3BhcnNlZFZlcnNpb24gPSBuaWw7CisgIH0KKyAgcmV0dXJuIHNlbGY7Cit9CisKKy8qKgorICogUmVhZHMgZm9ybWF0IGluZm9ybWF0aW9uIGZyb20gb25lIG9mIGl0cyB0d28gbG9jYXRpb25zIHdpdGhpbiB0aGUgUVIgQ29kZS4KKyAqLworLSAoWlhGb3JtYXRJbmZvcm1hdGlvbiAqKXJlYWRGb3JtYXRJbmZvcm1hdGlvbldpdGhFcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGlmIChzZWxmLnBhcnNlZEZvcm1hdEluZm8gIT0gbmlsKSB7CisgICAgcmV0dXJuIHNlbGYucGFyc2VkRm9ybWF0SW5mbzsKKyAgfQorICBpbnQgZm9ybWF0SW5mb0JpdHMxID0gMDsKKworICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykgeworICAgIGZvcm1hdEluZm9CaXRzMSA9IFtzZWxmIGNvcHlCaXQ6aSBqOjggdmVyc2lvbkJpdHM6Zm9ybWF0SW5mb0JpdHMxXTsKKyAgfQorCisgIGZvcm1hdEluZm9CaXRzMSA9IFtzZWxmIGNvcHlCaXQ6NyBqOjggdmVyc2lvbkJpdHM6Zm9ybWF0SW5mb0JpdHMxXTsKKyAgZm9ybWF0SW5mb0JpdHMxID0gW3NlbGYgY29weUJpdDo4IGo6OCB2ZXJzaW9uQml0czpmb3JtYXRJbmZvQml0czFdOworICBmb3JtYXRJbmZvQml0czEgPSBbc2VsZiBjb3B5Qml0Ojggajo3IHZlcnNpb25CaXRzOmZvcm1hdEluZm9CaXRzMV07CisKKyAgZm9yIChpbnQgaiA9IDU7IGogPj0gMDsgai0tKSB7CisgICAgZm9ybWF0SW5mb0JpdHMxID0gW3NlbGYgY29weUJpdDo4IGo6aiB2ZXJzaW9uQml0czpmb3JtYXRJbmZvQml0czFdOworICB9CisKKyAgaW50IGRpbWVuc2lvbiA9IHNlbGYuYml0TWF0cml4LmhlaWdodDsKKyAgaW50IGZvcm1hdEluZm9CaXRzMiA9IDA7CisgIGludCBqTWluID0gZGltZW5zaW9uIC0gNzsKKworICBmb3IgKGludCBqID0gZGltZW5zaW9uIC0gMTsgaiA+PSBqTWluOyBqLS0pIHsKKyAgICBmb3JtYXRJbmZvQml0czIgPSBbc2VsZiBjb3B5Qml0OjggajpqIHZlcnNpb25CaXRzOmZvcm1hdEluZm9CaXRzMl07CisgIH0KKworICBmb3IgKGludCBpID0gZGltZW5zaW9uIC0gODsgaSA8IGRpbWVuc2lvbjsgaSsrKSB7CisgICAgZm9ybWF0SW5mb0JpdHMyID0gW3NlbGYgY29weUJpdDppIGo6OCB2ZXJzaW9uQml0czpmb3JtYXRJbmZvQml0czJdOworICB9CisKKyAgc2VsZi5wYXJzZWRGb3JtYXRJbmZvID0gW1pYRm9ybWF0SW5mb3JtYXRpb24gZGVjb2RlRm9ybWF0SW5mb3JtYXRpb246Zm9ybWF0SW5mb0JpdHMxIG1hc2tlZEZvcm1hdEluZm8yOmZvcm1hdEluZm9CaXRzMl07CisgIGlmIChzZWxmLnBhcnNlZEZvcm1hdEluZm8gIT0gbmlsKSB7CisgICAgcmV0dXJuIHNlbGYucGFyc2VkRm9ybWF0SW5mbzsKKyAgfQorICBpZiAoZXJyb3IpICplcnJvciA9IEZvcm1hdEVycm9ySW5zdGFuY2UoKTsKKyAgcmV0dXJuIG5pbDsKK30KKworCisvKioKKyAqIFJlYWRzIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSBvbmUgb2YgaXRzIHR3byBsb2NhdGlvbnMgd2l0aGluIHRoZSBRUiBDb2RlLgorICovCistIChaWFFSQ29kZVZlcnNpb24gKilyZWFkVmVyc2lvbldpdGhFcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGlmIChzZWxmLnBhcnNlZFZlcnNpb24gIT0gbmlsKSB7CisgICAgcmV0dXJuIHNlbGYucGFyc2VkVmVyc2lvbjsKKyAgfQorICBpbnQgZGltZW5zaW9uID0gc2VsZi5iaXRNYXRyaXguaGVpZ2h0OworICBpbnQgcHJvdmlzaW9uYWxWZXJzaW9uID0gKGRpbWVuc2lvbiAtIDE3KSA+PiAyOworICBpZiAocHJvdmlzaW9uYWxWZXJzaW9uIDw9IDYpIHsKKyAgICByZXR1cm4gW1pYUVJDb2RlVmVyc2lvbiB2ZXJzaW9uRm9yTnVtYmVyOnByb3Zpc2lvbmFsVmVyc2lvbl07CisgIH0KKyAgaW50IHZlcnNpb25CaXRzID0gMDsKKyAgaW50IGlqTWluID0gZGltZW5zaW9uIC0gMTE7CisKKyAgZm9yIChpbnQgaiA9IDU7IGogPj0gMDsgai0tKSB7CisKKyAgICBmb3IgKGludCBpID0gZGltZW5zaW9uIC0gOTsgaSA+PSBpak1pbjsgaS0tKSB7CisgICAgICB2ZXJzaW9uQml0cyA9IFtzZWxmIGNvcHlCaXQ6aSBqOmogdmVyc2lvbkJpdHM6dmVyc2lvbkJpdHNdOworICAgIH0KKworICB9CisKKyAgWlhRUkNvZGVWZXJzaW9uICp0aGVQYXJzZWRWZXJzaW9uID0gW1pYUVJDb2RlVmVyc2lvbiBkZWNvZGVWZXJzaW9uSW5mb3JtYXRpb246dmVyc2lvbkJpdHNdOworICBpZiAodGhlUGFyc2VkVmVyc2lvbiAhPSBuaWwgJiYgdGhlUGFyc2VkVmVyc2lvbi5kaW1lbnNpb25Gb3JWZXJzaW9uID09IGRpbWVuc2lvbikgeworICAgIHNlbGYucGFyc2VkVmVyc2lvbiA9IHRoZVBhcnNlZFZlcnNpb247CisgICAgcmV0dXJuIHNlbGYucGFyc2VkVmVyc2lvbjsKKyAgfQorICB2ZXJzaW9uQml0cyA9IDA7CisKKyAgZm9yIChpbnQgaSA9IDU7IGkgPj0gMDsgaS0tKSB7CisgICAgZm9yIChpbnQgaiA9IGRpbWVuc2lvbiAtIDk7IGogPj0gaWpNaW47IGotLSkgeworICAgICAgdmVyc2lvbkJpdHMgPSBbc2VsZiBjb3B5Qml0OmkgajpqIHZlcnNpb25CaXRzOnZlcnNpb25CaXRzXTsKKyAgICB9CisgIH0KKworICB0aGVQYXJzZWRWZXJzaW9uID0gW1pYUVJDb2RlVmVyc2lvbiBkZWNvZGVWZXJzaW9uSW5mb3JtYXRpb246dmVyc2lvbkJpdHNdOworICBpZiAodGhlUGFyc2VkVmVyc2lvbiAhPSBuaWwgJiYgdGhlUGFyc2VkVmVyc2lvbi5kaW1lbnNpb25Gb3JWZXJzaW9uID09IGRpbWVuc2lvbikgeworICAgIHNlbGYucGFyc2VkVmVyc2lvbiA9IHRoZVBhcnNlZFZlcnNpb247CisgICAgcmV0dXJuIHNlbGYucGFyc2VkVmVyc2lvbjsKKyAgfQorICBpZiAoZXJyb3IpICplcnJvciA9IEZvcm1hdEVycm9ySW5zdGFuY2UoKTsKKyAgcmV0dXJuIG5pbDsKK30KKworLSAoaW50KWNvcHlCaXQ6KGludClpIGo6KGludClqIHZlcnNpb25CaXRzOihpbnQpdmVyc2lvbkJpdHMgeworICByZXR1cm4gW3NlbGYuYml0TWF0cml4IGdldFg6aSB5OmpdID8gKHZlcnNpb25CaXRzIDw8IDEpIHwgMHgxIDogdmVyc2lvbkJpdHMgPDwgMTsKK30KKworCisvKioKKyAqIFJlYWRzIHRoZSBiaXRzIGluIHRoZSB7QGxpbmsgQml0TWF0cml4fSByZXByZXNlbnRpbmcgdGhlIGZpbmRlciBwYXR0ZXJuIGluIHRoZQorICogY29ycmVjdCBvcmRlciBpbiBvcmRlciB0byByZWNvbnN0aXR1dGUgdGhlIGNvZGV3b3JkcyBieXRlcyBjb250YWluZWQgd2l0aGluIHRoZQorICogUVIgQ29kZS4KKyAqLworLSAoTlNBcnJheSAqKXJlYWRDb2Rld29yZHNXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWEZvcm1hdEluZm9ybWF0aW9uICpmb3JtYXRJbmZvID0gW3NlbGYgcmVhZEZvcm1hdEluZm9ybWF0aW9uV2l0aEVycm9yOmVycm9yXTsKKyAgaWYgKCFmb3JtYXRJbmZvKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIFpYUVJDb2RlVmVyc2lvbiAqdmVyc2lvbiA9IFtzZWxmIHJlYWRWZXJzaW9uV2l0aEVycm9yOmVycm9yXTsKKyAgaWYgKCF2ZXJzaW9uKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIFpYRGF0YU1hc2sgKmRhdGFNYXNrID0gW1pYRGF0YU1hc2sgZm9yUmVmZXJlbmNlOihpbnQpW2Zvcm1hdEluZm8gZGF0YU1hc2tdXTsKKyAgaW50IGRpbWVuc2lvbiA9IHNlbGYuYml0TWF0cml4LmhlaWdodDsKKyAgW2RhdGFNYXNrIHVubWFza0JpdE1hdHJpeDpzZWxmLmJpdE1hdHJpeCBkaW1lbnNpb246ZGltZW5zaW9uXTsKKyAgWlhCaXRNYXRyaXggKmZ1bmN0aW9uUGF0dGVybiA9IFt2ZXJzaW9uIGJ1aWxkRnVuY3Rpb25QYXR0ZXJuXTsKKyAgQk9PTCByZWFkaW5nVXAgPSBZRVM7CisgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICBpbnQgcmVzdWx0T2Zmc2V0ID0gMDsKKyAgaW50IGN1cnJlbnRCeXRlID0gMDsKKyAgaW50IGJpdHNSZWFkID0gMDsKKworICBmb3IgKGludCBqID0gZGltZW5zaW9uIC0gMTsgaiA+IDA7IGogLT0gMikgeworICAgIGlmIChqID09IDYpIHsKKyAgICAgIGotLTsKKyAgICB9CisKKyAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgZGltZW5zaW9uOyBjb3VudCsrKSB7CisgICAgICBpbnQgaSA9IHJlYWRpbmdVcCA/IGRpbWVuc2lvbiAtIDEgLSBjb3VudCA6IGNvdW50OworCisgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCAyOyBjb2wrKykgeworICAgICAgICBpZiAoIVtmdW5jdGlvblBhdHRlcm4gZ2V0WDpqIC0gY29sIHk6aV0pIHsKKyAgICAgICAgICBiaXRzUmVhZCsrOworICAgICAgICAgIGN1cnJlbnRCeXRlIDw8PSAxOworICAgICAgICAgIGlmIChbc2VsZi5iaXRNYXRyaXggZ2V0WDpqIC0gY29sIHk6aV0pIHsKKyAgICAgICAgICAgIGN1cnJlbnRCeXRlIHw9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChiaXRzUmVhZCA9PSA4KSB7CisgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpAKChjaGFyKWN1cnJlbnRCeXRlKV07CisgICAgICAgICAgICByZXN1bHRPZmZzZXQrKzsKKyAgICAgICAgICAgIGJpdHNSZWFkID0gMDsKKyAgICAgICAgICAgIGN1cnJlbnRCeXRlID0gMDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZWFkaW5nVXAgXj0gWUVTOworICB9CisKKyAgaWYgKHJlc3VsdE9mZnNldCAhPSBbdmVyc2lvbiB0b3RhbENvZGV3b3Jkc10pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IEZvcm1hdEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZURhdGFCbG9jay5oIGIvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlRGF0YUJsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FjMGI3NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZURhdGFCbG9jay5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogRW5jYXBzdWxhdGVzIGEgYmxvY2sgb2YgZGF0YSB3aXRoaW4gYSBRUiBDb2RlLiBRUiBDb2RlcyBtYXkgc3BsaXQgdGhlaXIgZGF0YSBpbnRvCisgKiBtdWx0aXBsZSBibG9ja3MsIGVhY2ggb2Ygd2hpY2ggaXMgYSB1bml0IG9mIGRhdGEgYW5kIGVycm9yLWNvcnJlY3Rpb24gY29kZXdvcmRzLiBFYWNoCisgKiBpcyByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgorICovCisKK0BjbGFzcyBaWEVycm9yQ29ycmVjdGlvbkxldmVsLCBaWFFSQ29kZVZlcnNpb247CisKK0BpbnRlcmZhY2UgWlhRUkNvZGVEYXRhQmxvY2sgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgTlNNdXRhYmxlQXJyYXkgKmNvZGV3b3JkczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgbnVtRGF0YUNvZGV3b3JkczsKKworLSAoaWQpaW5pdFdpdGhOdW1EYXRhQ29kZXdvcmRzOihpbnQpbnVtRGF0YUNvZGV3b3JkcyBjb2Rld29yZHM6KE5TTXV0YWJsZUFycmF5ICopY29kZXdvcmRzOworKyAoTlNBcnJheSAqKWRhdGFCbG9ja3M6KE5TQXJyYXkgKilyYXdDb2Rld29yZHMgdmVyc2lvbjooWlhRUkNvZGVWZXJzaW9uICopdmVyc2lvbiBlY0xldmVsOihaWEVycm9yQ29ycmVjdGlvbkxldmVsICopZWNMZXZlbDsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlRGF0YUJsb2NrLm0gYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVEYXRhQmxvY2subQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzg3OGM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlRGF0YUJsb2NrLm0KQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwuaCIKKyNpbXBvcnQgIlpYUVJDb2RlRGF0YUJsb2NrLmgiCisjaW1wb3J0ICJaWFFSQ29kZVZlcnNpb24uaCIKKworQGltcGxlbWVudGF0aW9uIFpYUVJDb2RlRGF0YUJsb2NrCisKKy0gKGlkKWluaXRXaXRoTnVtRGF0YUNvZGV3b3JkczooaW50KW51bURhdGFDb2Rld29yZHMgY29kZXdvcmRzOihOU011dGFibGVBcnJheSAqKWNvZGV3b3JkcyB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX251bURhdGFDb2Rld29yZHMgPSBudW1EYXRhQ29kZXdvcmRzOworICAgIF9jb2Rld29yZHMgPSBjb2Rld29yZHM7CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLyoqCisgKiBXaGVuIFFSIENvZGVzIHVzZSBtdWx0aXBsZSBkYXRhIGJsb2NrcywgdGhleSBhcmUgYWN0dWFsbHkgaW50ZXJsZWF2ZWQuCisgKiBUaGF0IGlzLCB0aGUgZmlyc3QgYnl0ZSBvZiBkYXRhIGJsb2NrIDEgdG8gbiBpcyB3cml0dGVuLCB0aGVuIHRoZSBzZWNvbmQgYnl0ZXMsIGFuZCBzbyBvbi4gVGhpcworICogbWV0aG9kIHdpbGwgc2VwYXJhdGUgdGhlIGRhdGEgaW50byBvcmlnaW5hbCBibG9ja3MuCisgKi8KKysgKE5TQXJyYXkgKilkYXRhQmxvY2tzOihOU0FycmF5ICopcmF3Q29kZXdvcmRzIHZlcnNpb246KFpYUVJDb2RlVmVyc2lvbiAqKXZlcnNpb24gZWNMZXZlbDooWlhFcnJvckNvcnJlY3Rpb25MZXZlbCAqKWVjTGV2ZWwgeworICBpZiAocmF3Q29kZXdvcmRzLmNvdW50ICE9IHZlcnNpb24udG90YWxDb2Rld29yZHMpIHsKKyAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiSW52YWxpZCBjb2Rld29yZHMgY291bnQiXTsKKyAgfQorCisgIFpYUVJDb2RlRUNCbG9ja3MgKmVjQmxvY2tzID0gW3ZlcnNpb24gZWNCbG9ja3NGb3JMZXZlbDplY0xldmVsXTsKKworICBpbnQgdG90YWxCbG9ja3MgPSAwOworICBOU0FycmF5ICplY0Jsb2NrQXJyYXkgPSBlY0Jsb2Nrcy5lY0Jsb2NrczsKKyAgZm9yIChaWFFSQ29kZUVDQiAqZWNCbG9jayBpbiBlY0Jsb2NrQXJyYXkpIHsKKyAgICB0b3RhbEJsb2NrcyArPSBlY0Jsb2NrLmNvdW50OworICB9CisKKyAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp0b3RhbEJsb2Nrc107CisgIGZvciAoWlhRUkNvZGVFQ0IgKmVjQmxvY2sgaW4gZWNCbG9ja0FycmF5KSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlY0Jsb2NrLmNvdW50OyBpKyspIHsKKyAgICAgIGludCBudW1EYXRhQ29kZXdvcmRzID0gZWNCbG9jay5kYXRhQ29kZXdvcmRzOworICAgICAgaW50IG51bUJsb2NrQ29kZXdvcmRzID0gZWNCbG9ja3MuZWNDb2Rld29yZHNQZXJCbG9jayArIG51bURhdGFDb2Rld29yZHM7CisgICAgICBOU011dGFibGVBcnJheSAqbmV3Q29kZXdvcmRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Om51bUJsb2NrQ29kZXdvcmRzXTsKKyAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtQmxvY2tDb2Rld29yZHM7IGorKykgeworICAgICAgICBbbmV3Q29kZXdvcmRzIGFkZE9iamVjdDpbTlNOdWxsIG51bGxdXTsKKyAgICAgIH0KKworICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W1taWFFSQ29kZURhdGFCbG9jayBhbGxvY10gaW5pdFdpdGhOdW1EYXRhQ29kZXdvcmRzOm51bURhdGFDb2Rld29yZHMgY29kZXdvcmRzOm5ld0NvZGV3b3Jkc11dOworICAgIH0KKyAgfQorCisgIGludCBzaG9ydGVyQmxvY2tzVG90YWxDb2Rld29yZHMgPSAoaW50KVtbcmVzdWx0WzBdIGNvZGV3b3Jkc10gY291bnRdOworICBpbnQgbG9uZ2VyQmxvY2tzU3RhcnRBdCA9IChpbnQpW3Jlc3VsdCBjb3VudF0gLSAxOworCisgIHdoaWxlIChsb25nZXJCbG9ja3NTdGFydEF0ID49IDApIHsKKyAgICBpbnQgbnVtQ29kZXdvcmRzID0gKGludClbW3Jlc3VsdFtsb25nZXJCbG9ja3NTdGFydEF0XSBjb2Rld29yZHNdIGNvdW50XTsKKyAgICBpZiAobnVtQ29kZXdvcmRzID09IHNob3J0ZXJCbG9ja3NUb3RhbENvZGV3b3JkcykgeworICAgICAgYnJlYWs7CisgICAgfQorICAgIGxvbmdlckJsb2Nrc1N0YXJ0QXQtLTsKKyAgfQorCisgIGxvbmdlckJsb2Nrc1N0YXJ0QXQrKzsKKyAgaW50IHNob3J0ZXJCbG9ja3NOdW1EYXRhQ29kZXdvcmRzID0gc2hvcnRlckJsb2Nrc1RvdGFsQ29kZXdvcmRzIC0gZWNCbG9ja3MuZWNDb2Rld29yZHNQZXJCbG9jazsKKyAgaW50IHJhd0NvZGV3b3Jkc09mZnNldCA9IDA7CisgIGludCBudW1SZXN1bHRCbG9ja3MgPSAoaW50KVtyZXN1bHQgY291bnRdOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2hvcnRlckJsb2Nrc051bURhdGFDb2Rld29yZHM7IGkrKykgeworICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtUmVzdWx0QmxvY2tzOyBqKyspIHsKKyAgICAgIFtyZXN1bHRbal0gY29kZXdvcmRzXVtpXSA9IHJhd0NvZGV3b3Jkc1tyYXdDb2Rld29yZHNPZmZzZXQrK107CisgICAgfQorICB9CisKKyAgZm9yIChpbnQgaiA9IGxvbmdlckJsb2Nrc1N0YXJ0QXQ7IGogPCBudW1SZXN1bHRCbG9ja3M7IGorKykgeworICAgIFtyZXN1bHRbal0gY29kZXdvcmRzXVtzaG9ydGVyQmxvY2tzTnVtRGF0YUNvZGV3b3Jkc10gPSByYXdDb2Rld29yZHNbcmF3Q29kZXdvcmRzT2Zmc2V0KytdOworICB9CisKKyAgaW50IG1heCA9IChpbnQpW1tyZXN1bHRbMF0gY29kZXdvcmRzXSBjb3VudF07CisgIGZvciAoaW50IGkgPSBzaG9ydGVyQmxvY2tzTnVtRGF0YUNvZGV3b3JkczsgaSA8IG1heDsgaSsrKSB7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1SZXN1bHRCbG9ja3M7IGorKykgeworICAgICAgaW50IGlPZmZzZXQgPSBqIDwgbG9uZ2VyQmxvY2tzU3RhcnRBdCA/IGkgOiBpICsgMTsKKyAgICAgIFtyZXN1bHRbal0gY29kZXdvcmRzXVtpT2Zmc2V0XSA9IHJhd0NvZGV3b3Jkc1tyYXdDb2Rld29yZHNPZmZzZXQrK107CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIGIvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMGIyYTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBRUiBDb2RlcyBjYW4gZW5jb2RlIHRleHQgYXMgYml0cyBpbiBvbmUgb2Ygc2V2ZXJhbCBtb2RlcywgYW5kIGNhbiB1c2UgbXVsdGlwbGUgbW9kZXMKKyAqIGluIG9uZSBRUiBDb2RlLiBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIGJpdHMgYmFjayBpbnRvIHRleHQuCisgKiAKKyAqIFNlZSBJU08gMTgwMDQ6MjAwNiwgNi40LjMgLSA2LjQuNworICovCisKK0BjbGFzcyBaWERlY29kZUhpbnRzLCBaWERlY29kZXJSZXN1bHQsIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwsIFpYUVJDb2RlVmVyc2lvbjsKKworQGludGVyZmFjZSBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIgOiBOU09iamVjdAorCisrIChaWERlY29kZXJSZXN1bHQgKilkZWNvZGU6KGludDhfdCAqKWJ5dGVzIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCB2ZXJzaW9uOihaWFFSQ29kZVZlcnNpb24gKil2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIGVjTGV2ZWw6KFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillY0xldmVsIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIubSBiL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTM5MTFmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5tCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdFNvdXJjZS5oIgorI2ltcG9ydCAiWlhDaGFyYWN0ZXJTZXRFQ0kuaCIKKyNpbXBvcnQgIlpYRGVjb2RlclJlc3VsdC5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwuaCIKKyNpbXBvcnQgIlpYTW9kZS5oIgorI2ltcG9ydCAiWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyLmgiCisjaW1wb3J0ICJaWFFSQ29kZVZlcnNpb24uaCIKKyNpbXBvcnQgIlpYU3RyaW5nVXRpbHMuaCIKKworCisvKioKKyAqIFNlZSBJU08gMTgwMDQ6MjAwNiwgNi40LjQgVGFibGUgNQorICovCitjaGFyIGNvbnN0IEFMUEhBTlVNRVJJQ19DSEFSU1s0NV0gPSB7CisgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsCisgICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsCisgICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsICdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWicsCisgICcgJywgJyQnLCAnJScsICcqJywgJysnLCAnLScsICcuJywgJy8nLCAnOicKK307CisKK2ludCBjb25zdCBHQjIzMTJfU1VCU0VUID0gMTsKKworQGltcGxlbWVudGF0aW9uIFpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlcgorCisrIChaWERlY29kZXJSZXN1bHQgKilkZWNvZGU6KGludDhfdCAqKWJ5dGVzIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCB2ZXJzaW9uOihaWFFSQ29kZVZlcnNpb24gKil2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIGVjTGV2ZWw6KFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillY0xldmVsIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWEJpdFNvdXJjZSAqYml0cyA9IFtbWlhCaXRTb3VyY2UgYWxsb2NdIGluaXRXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmxlbmd0aF07CisgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6NTBdOworICBaWENoYXJhY3RlclNldEVDSSAqY3VycmVudENoYXJhY3RlclNldEVDSSA9IG5pbDsKKyAgQk9PTCBmYzFJbkVmZmVjdCA9IE5POworICBOU011dGFibGVBcnJheSAqYnl0ZVNlZ21lbnRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OjFdOworICBaWE1vZGUgKm1vZGU7CisKKyAgZG8geworICAgIGlmIChbYml0cyBhdmFpbGFibGVdIDwgNCkgeworICAgICAgbW9kZSA9IFtaWE1vZGUgdGVybWluYXRvck1vZGVdOworICAgIH0gZWxzZSB7CisgICAgICBtb2RlID0gW1pYTW9kZSBmb3JCaXRzOltiaXRzIHJlYWRCaXRzOjRdXTsKKyAgICAgIGlmICghbW9kZSkgeworICAgICAgICBpZiAoZXJyb3IpICplcnJvciA9IEZvcm1hdEVycm9ySW5zdGFuY2UoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCFbbW9kZSBpc0VxdWFsOltaWE1vZGUgdGVybWluYXRvck1vZGVdXSkgeworICAgICAgaWYgKFttb2RlIGlzRXF1YWw6W1pYTW9kZSBmbmMxRmlyc3RQb3NpdGlvbk1vZGVdXSB8fCBbbW9kZSBpc0VxdWFsOltaWE1vZGUgZm5jMVNlY29uZFBvc2l0aW9uTW9kZV1dKSB7CisgICAgICAgIGZjMUluRWZmZWN0ID0gWUVTOworICAgICAgfSBlbHNlIGlmIChbbW9kZSBpc0VxdWFsOltaWE1vZGUgc3RydWN0dXJlZEFwcGVuZE1vZGVdXSkgeworICAgICAgICBpZiAoYml0cy5hdmFpbGFibGUgPCAxNikgeworICAgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAgICAgICAgW2JpdHMgcmVhZEJpdHM6MTZdOworICAgICAgfSBlbHNlIGlmIChbbW9kZSBpc0VxdWFsOltaWE1vZGUgZWNpTW9kZV1dKSB7CisgICAgICAgIGludCB2YWx1ZSA9IFtzZWxmIHBhcnNlRUNJVmFsdWU6Yml0c107CisgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJTZXRFQ0kgPSBbWlhDaGFyYWN0ZXJTZXRFQ0kgY2hhcmFjdGVyU2V0RUNJQnlWYWx1ZTp2YWx1ZV07CisgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyU2V0RUNJID09IG5pbCkgeworICAgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChbbW9kZSBpc0VxdWFsOltaWE1vZGUgaGFuemlNb2RlXV0pIHsKKyAgICAgICAgICBpbnQgc3Vic2V0ID0gW2JpdHMgcmVhZEJpdHM6NF07CisgICAgICAgICAgaW50IGNvdW50SGFuemkgPSBbYml0cyByZWFkQml0czpbbW9kZSBjaGFyYWN0ZXJDb3VudEJpdHM6dmVyc2lvbl1dOworICAgICAgICAgIGlmIChzdWJzZXQgPT0gR0IyMzEyX1NVQlNFVCkgeworICAgICAgICAgICAgaWYgKCFbc2VsZiBkZWNvZGVIYW56aVNlZ21lbnQ6Yml0cyByZXN1bHQ6cmVzdWx0IGNvdW50OmNvdW50SGFuemldKSB7CisgICAgICAgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpbnQgY291bnQgPSBbYml0cyByZWFkQml0czpbbW9kZSBjaGFyYWN0ZXJDb3VudEJpdHM6dmVyc2lvbl1dOworICAgICAgICAgIGlmIChbbW9kZSBpc0VxdWFsOltaWE1vZGUgbnVtZXJpY01vZGVdXSkgeworICAgICAgICAgICAgaWYgKCFbc2VsZiBkZWNvZGVOdW1lcmljU2VnbWVudDpiaXRzIHJlc3VsdDpyZXN1bHQgY291bnQ6Y291bnRdKSB7CisgICAgICAgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSBpZiAoW21vZGUgaXNFcXVhbDpbWlhNb2RlIGFscGhhbnVtZXJpY01vZGVdXSkgeworICAgICAgICAgICAgaWYgKCFbc2VsZiBkZWNvZGVBbHBoYW51bWVyaWNTZWdtZW50OmJpdHMgcmVzdWx0OnJlc3VsdCBjb3VudDpjb3VudCBmYzFJbkVmZmVjdDpmYzFJbkVmZmVjdF0pIHsKKyAgICAgICAgICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBGb3JtYXRFcnJvckluc3RhbmNlKCk7CisgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIGlmIChbbW9kZSBpc0VxdWFsOltaWE1vZGUgYnl0ZU1vZGVdXSkgeworICAgICAgICAgICAgaWYgKCFbc2VsZiBkZWNvZGVCeXRlU2VnbWVudDpiaXRzIHJlc3VsdDpyZXN1bHQgY291bnQ6Y291bnQgY3VycmVudENoYXJhY3RlclNldEVDSTpjdXJyZW50Q2hhcmFjdGVyU2V0RUNJIGJ5dGVTZWdtZW50czpieXRlU2VnbWVudHMgaGludHM6aGludHNdKSB7CisgICAgICAgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSBpZiAoW21vZGUgaXNFcXVhbDpbWlhNb2RlIGthbmppTW9kZV1dKSB7CisgICAgICAgICAgICBpZiAoIVtzZWxmIGRlY29kZUthbmppU2VnbWVudDpiaXRzIHJlc3VsdDpyZXN1bHQgY291bnQ6Y291bnRdKSB7CisgICAgICAgICAgICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZXJyb3IpICplcnJvciA9IEZvcm1hdEVycm9ySW5zdGFuY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9IHdoaWxlICghW21vZGUgaXNFcXVhbDpbWlhNb2RlIHRlcm1pbmF0b3JNb2RlXV0pOworICByZXR1cm4gW1taWERlY29kZXJSZXN1bHQgYWxsb2NdIGluaXRXaXRoUmF3Qnl0ZXM6Ynl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDpsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDpyZXN1bHQuZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVTZWdtZW50czpieXRlU2VnbWVudHMuY291bnQgPT0gMCA/IG5pbCA6IGJ5dGVTZWdtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0xldmVsOmVjTGV2ZWwgPT0gbmlsID8gbmlsIDogZWNMZXZlbC5kZXNjcmlwdGlvbl07Cit9CisKKworLyoqCisgKiBTZWUgc3BlY2lmaWNhdGlvbiBHQlQgMTgyODQtMjAwMAorICovCisrIChCT09MKWRlY29kZUhhbnppU2VnbWVudDooWlhCaXRTb3VyY2UgKiliaXRzIHJlc3VsdDooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0IGNvdW50OihpbnQpY291bnQgeworICBpZiAoY291bnQgKiAxMyA+IGJpdHMuYXZhaWxhYmxlKSB7CisgICAgcmV0dXJuIE5POworICB9CisKKyAgTlNNdXRhYmxlRGF0YSAqYnVmZmVyID0gW05TTXV0YWJsZURhdGEgZGF0YVdpdGhDYXBhY2l0eToyICogY291bnRdOworICB3aGlsZSAoY291bnQgPiAwKSB7CisgICAgaW50IHR3b0J5dGVzID0gW2JpdHMgcmVhZEJpdHM6MTNdOworICAgIGludCBhc3NlbWJsZWRUd29CeXRlcyA9ICgodHdvQnl0ZXMgLyAweDA2MCkgPDwgOCkgfCAodHdvQnl0ZXMgJSAweDA2MCk7CisgICAgaWYgKGFzc2VtYmxlZFR3b0J5dGVzIDwgMHgwMDNCRikgeworICAgICAgYXNzZW1ibGVkVHdvQnl0ZXMgKz0gMHgwQTFBMTsKKyAgICB9IGVsc2UgeworICAgICAgYXNzZW1ibGVkVHdvQnl0ZXMgKz0gMHgwQTZBMTsKKyAgICB9CisgICAgY2hhciBieXRlc1syXTsKKyAgICBieXRlc1swXSA9IChjaGFyKSgoYXNzZW1ibGVkVHdvQnl0ZXMgPj4gOCkgJiAweEZGKTsKKyAgICBieXRlc1sxXSA9IChjaGFyKShhc3NlbWJsZWRUd29CeXRlcyAmIDB4RkYpOworCisgICAgW2J1ZmZlciBhcHBlbmRCeXRlczpieXRlcyBsZW5ndGg6Ml07CisKKyAgICBjb3VudC0tOworICB9CisKKyAgTlNTdHJpbmcgKnN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpidWZmZXIgZW5jb2Rpbmc6Q0ZTdHJpbmdDb252ZXJ0RW5jb2RpbmdUb05TU3RyaW5nRW5jb2Rpbmcoa0NGU3RyaW5nRW5jb2RpbmdHQl8xODAzMF8yMDAwKV07CisgIGlmIChzdHJpbmcpIHsKKyAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpzdHJpbmddOworICB9CisgIHJldHVybiBZRVM7Cit9CisKKysgKEJPT0wpZGVjb2RlS2FuamlTZWdtZW50OihaWEJpdFNvdXJjZSAqKWJpdHMgcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQgY291bnQ6KGludCljb3VudCB7CisgIGlmIChjb3VudCAqIDEzID4gYml0cy5hdmFpbGFibGUpIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBOU011dGFibGVEYXRhICpidWZmZXIgPSBbTlNNdXRhYmxlRGF0YSBkYXRhV2l0aENhcGFjaXR5OjIgKiBjb3VudF07CisgIHdoaWxlIChjb3VudCA+IDApIHsKKyAgICBpbnQgdHdvQnl0ZXMgPSBbYml0cyByZWFkQml0czoxM107CisgICAgaW50IGFzc2VtYmxlZFR3b0J5dGVzID0gKCh0d29CeXRlcyAvIDB4MEMwKSA8PCA4KSB8ICh0d29CeXRlcyAlIDB4MEMwKTsKKyAgICBpZiAoYXNzZW1ibGVkVHdvQnl0ZXMgPCAweDAxRjAwKSB7CisgICAgICBhc3NlbWJsZWRUd29CeXRlcyArPSAweDA4MTQwOworICAgIH0gZWxzZSB7CisgICAgICBhc3NlbWJsZWRUd29CeXRlcyArPSAweDBDMTQwOworICAgIH0KKyAgICBjaGFyIGJ5dGVzWzJdOworICAgIGJ5dGVzWzBdID0gKGNoYXIpKGFzc2VtYmxlZFR3b0J5dGVzID4+IDgpOworICAgIGJ5dGVzWzFdID0gKGNoYXIpYXNzZW1ibGVkVHdvQnl0ZXM7CisgICAgCisgICAgW2J1ZmZlciBhcHBlbmRCeXRlczpieXRlcyBsZW5ndGg6Ml07CisKKyAgICBjb3VudC0tOworICB9CisKKyAgTlNTdHJpbmcgKnN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpidWZmZXIgZW5jb2Rpbmc6TlNTaGlmdEpJU1N0cmluZ0VuY29kaW5nXTsKKyAgaWYgKHN0cmluZykgeworICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOnN0cmluZ107CisgIH0KKyAgcmV0dXJuIFlFUzsKK30KKworKyAoQk9PTClkZWNvZGVCeXRlU2VnbWVudDooWlhCaXRTb3VyY2UgKiliaXRzIHJlc3VsdDooTlNNdXRhYmxlU3RyaW5nICopcmVzdWx0IGNvdW50OihpbnQpY291bnQgY3VycmVudENoYXJhY3RlclNldEVDSTooWlhDaGFyYWN0ZXJTZXRFQ0kgKiljdXJyZW50Q2hhcmFjdGVyU2V0RUNJIGJ5dGVTZWdtZW50czooTlNNdXRhYmxlQXJyYXkgKilieXRlU2VnbWVudHMgaGludHM6KFpYRGVjb2RlSGludHMgKiloaW50cyB7CisgIGlmIChjb3VudCA8PCAzID4gYml0cy5hdmFpbGFibGUpIHsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgaW50OF90IHJlYWRCeXRlc1tjb3VudF07CisgIE5TTXV0YWJsZUFycmF5ICpyZWFkQnl0ZXNBcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjb3VudF07CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgcmVhZEJ5dGVzW2ldID0gKGNoYXIpW2JpdHMgcmVhZEJpdHM6OF07CisgICAgW3JlYWRCeXRlc0FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aENoYXI6cmVhZEJ5dGVzW2ldXV07CisgIH0KKworICBOU1N0cmluZ0VuY29kaW5nIGVuY29kaW5nOworICBpZiAoY3VycmVudENoYXJhY3RlclNldEVDSSA9PSBuaWwpIHsKKyAgICBlbmNvZGluZyA9IFtaWFN0cmluZ1V0aWxzIGd1ZXNzRW5jb2Rpbmc6cmVhZEJ5dGVzIGxlbmd0aDpjb3VudCBoaW50czpoaW50c107CisgIH0gZWxzZSB7CisgICAgZW5jb2RpbmcgPSBbY3VycmVudENoYXJhY3RlclNldEVDSSBlbmNvZGluZ107CisgIH0KKworICBOU1N0cmluZyAqc3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhCeXRlczpyZWFkQnl0ZXMgbGVuZ3RoOmNvdW50IGVuY29kaW5nOmVuY29kaW5nXTsKKyAgaWYgKHN0cmluZykgeworICAgIFtyZXN1bHQgYXBwZW5kU3RyaW5nOnN0cmluZ107CisgIH0KKyAgCisgIFtieXRlU2VnbWVudHMgYWRkT2JqZWN0OnJlYWRCeXRlc0FycmF5XTsKKyAgcmV0dXJuIFlFUzsKK30KKworKyAodW5pY2hhcil0b0FscGhhTnVtZXJpY0NoYXI6KGludCl2YWx1ZSB7CisgIGlmICh2YWx1ZSA+PSA0NSkgeworICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gQUxQSEFOVU1FUklDX0NIQVJTW3ZhbHVlXTsKK30KKworKyAoQk9PTClkZWNvZGVBbHBoYW51bWVyaWNTZWdtZW50OihaWEJpdFNvdXJjZSAqKWJpdHMgcmVzdWx0OihOU011dGFibGVTdHJpbmcgKilyZXN1bHQgY291bnQ6KGludCljb3VudCBmYzFJbkVmZmVjdDooQk9PTClmYzFJbkVmZmVjdCB7CisgIGludCBzdGFydCA9IChpbnQpcmVzdWx0Lmxlbmd0aDsKKworICB3aGlsZSAoY291bnQgPiAxKSB7CisgICAgaWYgKFtiaXRzIGF2YWlsYWJsZV0gPCAxMSkgeworICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgICBpbnQgbmV4dFR3b0NoYXJzQml0cyA9IFtiaXRzIHJlYWRCaXRzOjExXTsKKyAgICB1bmljaGFyIG5leHQxID0gW3NlbGYgdG9BbHBoYU51bWVyaWNDaGFyOm5leHRUd29DaGFyc0JpdHMgLyA0NV07CisgICAgdW5pY2hhciBuZXh0MiA9IFtzZWxmIHRvQWxwaGFOdW1lcmljQ2hhcjpuZXh0VHdvQ2hhcnNCaXRzICUgNDVdOworCisgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyVDIiwgbmV4dDEsIG5leHQyXTsKKyAgICBjb3VudCAtPSAyOworICB9CisKKyAgaWYgKGNvdW50ID09IDEpIHsKKyAgICBpZiAoW2JpdHMgYXZhaWxhYmxlXSA8IDYpIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgdW5pY2hhciBuZXh0MSA9IFtzZWxmIHRvQWxwaGFOdW1lcmljQ2hhcjpbYml0cyByZWFkQml0czo2XV07CisgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsIG5leHQxXTsKKyAgfQorICBpZiAoZmMxSW5FZmZlY3QpIHsKKyAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBbcmVzdWx0IGxlbmd0aF07IGkrKykgeworICAgICAgaWYgKFtyZXN1bHQgY2hhcmFjdGVyQXRJbmRleDppXSA9PSAnJScpIHsKKyAgICAgICAgaWYgKGkgPCBbcmVzdWx0IGxlbmd0aF0gLSAxICYmIFtyZXN1bHQgY2hhcmFjdGVyQXRJbmRleDppICsgMV0gPT0gJyUnKSB7CisgICAgICAgICAgW3Jlc3VsdCBkZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShpICsgMSwgMSldOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIFtyZXN1bHQgaW5zZXJ0U3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUMiLCAodW5pY2hhcikweDFEXQorICAgICAgICAgICAgICAgICAgICAgICBhdEluZGV4OmldOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBZRVM7Cit9CisKKysgKEJPT0wpZGVjb2RlTnVtZXJpY1NlZ21lbnQ6KFpYQml0U291cmNlICopYml0cyByZXN1bHQ6KE5TTXV0YWJsZVN0cmluZyAqKXJlc3VsdCBjb3VudDooaW50KWNvdW50IHsKKyAgLy8gUmVhZCB0aHJlZSBkaWdpdHMgYXQgYSB0aW1lCisgIHdoaWxlIChjb3VudCA+PSAzKSB7CisgICAgLy8gRWFjaCAxMCBiaXRzIGVuY29kZXMgdGhyZWUgZGlnaXRzCisgICAgaWYgKGJpdHMuYXZhaWxhYmxlIDwgMTApIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgaW50IHRocmVlRGlnaXRzQml0cyA9IFtiaXRzIHJlYWRCaXRzOjEwXTsKKyAgICBpZiAodGhyZWVEaWdpdHNCaXRzID49IDEwMDApIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgdW5pY2hhciBuZXh0MSA9IFtzZWxmIHRvQWxwaGFOdW1lcmljQ2hhcjp0aHJlZURpZ2l0c0JpdHMgLyAxMDBdOworICAgIHVuaWNoYXIgbmV4dDIgPSBbc2VsZiB0b0FscGhhTnVtZXJpY0NoYXI6KHRocmVlRGlnaXRzQml0cyAvIDEwKSAlIDEwXTsKKyAgICB1bmljaGFyIG5leHQzID0gW3NlbGYgdG9BbHBoYU51bWVyaWNDaGFyOnRocmVlRGlnaXRzQml0cyAlIDEwXTsKKworICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJUMlQyVDIiwgbmV4dDEsIG5leHQyLCBuZXh0M107CisgICAgY291bnQgLT0gMzsKKyAgfQorCisgIGlmIChjb3VudCA9PSAyKSB7CisgICAgLy8gVHdvIGRpZ2l0cyBsZWZ0IG92ZXIgdG8gcmVhZCwgZW5jb2RlZCBpbiA3IGJpdHMKKyAgICBpZiAoYml0cy5hdmFpbGFibGUgPCA3KSB7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIGludCB0d29EaWdpdHNCaXRzID0gW2JpdHMgcmVhZEJpdHM6N107CisgICAgaWYgKHR3b0RpZ2l0c0JpdHMgPj0gMTAwKSB7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIHVuaWNoYXIgbmV4dDEgPSBbc2VsZiB0b0FscGhhTnVtZXJpY0NoYXI6dHdvRGlnaXRzQml0cyAvIDEwXTsKKyAgICB1bmljaGFyIG5leHQyID0gW3NlbGYgdG9BbHBoYU51bWVyaWNDaGFyOnR3b0RpZ2l0c0JpdHMgJSAxMF07CisgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyVDIiwgbmV4dDEsIG5leHQyXTsKKyAgfSBlbHNlIGlmIChjb3VudCA9PSAxKSB7CisgICAgLy8gT25lIGRpZ2l0IGxlZnQgb3ZlciB0byByZWFkCisgICAgaWYgKGJpdHMuYXZhaWxhYmxlIDwgNCkgeworICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgICBpbnQgZGlnaXRCaXRzID0gW2JpdHMgcmVhZEJpdHM6NF07CisgICAgaWYgKGRpZ2l0Qml0cyA+PSAxMCkgeworICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgICB1bmljaGFyIG5leHQxID0gW3NlbGYgdG9BbHBoYU51bWVyaWNDaGFyOmRpZ2l0Qml0c107CisgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQyIsIG5leHQxXTsKKyAgfQorICByZXR1cm4gWUVTOworfQorCisrIChpbnQpcGFyc2VFQ0lWYWx1ZTooWlhCaXRTb3VyY2UgKiliaXRzIHsKKyAgaW50IGZpcnN0Qnl0ZSA9IFtiaXRzIHJlYWRCaXRzOjhdOworICBpZiAoKGZpcnN0Qnl0ZSAmIDB4ODApID09IDApIHsKKyAgICByZXR1cm4gZmlyc3RCeXRlICYgMHg3RjsKKyAgfQorICBpZiAoKGZpcnN0Qnl0ZSAmIDB4QzApID09IDB4ODApIHsKKyAgICBpbnQgc2Vjb25kQnl0ZSA9IFtiaXRzIHJlYWRCaXRzOjhdOworICAgIHJldHVybiAoKGZpcnN0Qnl0ZSAmIDB4M0YpIDw8IDgpIHwgc2Vjb25kQnl0ZTsKKyAgfQorICBpZiAoKGZpcnN0Qnl0ZSAmIDB4RTApID09IDB4QzApIHsKKyAgICBpbnQgc2Vjb25kVGhpcmRCeXRlcyA9IFtiaXRzIHJlYWRCaXRzOjE2XTsKKyAgICByZXR1cm4gKChmaXJzdEJ5dGUgJiAweDFGKSA8PCAxNikgfCBzZWNvbmRUaGlyZEJ5dGVzOworICB9CisgIHJldHVybiAtMTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlRGVjb2Rlci5oIGIvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGExNWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVEZWNvZGVyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBUaGUgbWFpbiBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIFFSIENvZGUgZGVjb2RpbmcgLS0gYXMgb3Bwb3NlZCB0byBsb2NhdGluZyBhbmQgZXh0cmFjdGluZworICogdGhlIFFSIENvZGUgZnJvbSBhbiBpbWFnZS4KKyAqLworCitAY2xhc3MgWlhCaXRNYXRyaXgsIFpYRGVjb2RlSGludHMsIFpYRGVjb2RlSGludHMsIFpYRGVjb2RlclJlc3VsdDsKKworQGludGVyZmFjZSBaWFFSQ29kZURlY29kZXIgOiBOU09iamVjdAorCistIChaWERlY29kZXJSZXN1bHQgKilkZWNvZGU6KEJPT0wgKiopaW1hZ2UgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoWlhEZWNvZGVyUmVzdWx0ICopZGVjb2RlOihCT09MICoqKWltYWdlIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoWlhEZWNvZGVyUmVzdWx0ICopZGVjb2RlTWF0cml4OihaWEJpdE1hdHJpeCAqKWJpdHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CistIChaWERlY29kZXJSZXN1bHQgKilkZWNvZGVNYXRyaXg6KFpYQml0TWF0cml4ICopYml0cyBoaW50czooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVEZWNvZGVyLm0gYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVEZWNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5YjAzZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZURlY29kZXIubQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYRGVjb2RlclJlc3VsdC5oIgorI2ltcG9ydCAiWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYRm9ybWF0SW5mb3JtYXRpb24uaCIKKyNpbXBvcnQgIlpYR2VuZXJpY0dGLmgiCisjaW1wb3J0ICJaWFFSQ29kZUJpdE1hdHJpeFBhcnNlci5oIgorI2ltcG9ydCAiWlhRUkNvZGVEYXRhQmxvY2suaCIKKyNpbXBvcnQgIlpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlci5oIgorI2ltcG9ydCAiWlhRUkNvZGVEZWNvZGVyLmgiCisjaW1wb3J0ICJaWFFSQ29kZVZlcnNpb24uaCIKKyNpbXBvcnQgIlpYUmVlZFNvbG9tb25EZWNvZGVyLmgiCisKK0BpbnRlcmZhY2UgWlhRUkNvZGVEZWNvZGVyICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYUmVlZFNvbG9tb25EZWNvZGVyICpyc0RlY29kZXI7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYUVJDb2RlRGVjb2RlcgorCistIChpZClpbml0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfcnNEZWNvZGVyID0gW1taWFJlZWRTb2xvbW9uRGVjb2RlciBhbGxvY10gaW5pdFdpdGhGaWVsZDpbWlhHZW5lcmljR0YgUXJDb2RlRmllbGQyNTZdXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChaWERlY29kZXJSZXN1bHQgKilkZWNvZGU6KEJPT0wgKiopaW1hZ2UgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtzZWxmIGRlY29kZTppbWFnZSBsZW5ndGg6bGVuZ3RoIGhpbnRzOm5pbCBlcnJvcjplcnJvcl07Cit9CisKKy8qKgorICogQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY2FuIGRlY29kZSBhIFFSIENvZGUgcmVwcmVzZW50ZWQgYXMgYSAyRCBhcnJheSBvZiBib29sZWFucy4KKyAqICJ0cnVlIiBpcyB0YWtlbiB0byBtZWFuIGEgYmxhY2sgbW9kdWxlLgorICovCistIChaWERlY29kZXJSZXN1bHQgKilkZWNvZGU6KEJPT0wgKiopaW1hZ2UgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQgZGltZW5zaW9uID0gbGVuZ3RoOworICBaWEJpdE1hdHJpeCAqYml0cyA9IFtbWlhCaXRNYXRyaXggYWxsb2NdIGluaXRXaXRoRGltZW5zaW9uOmRpbWVuc2lvbl07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgZGltZW5zaW9uOyBpKyspIHsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IGRpbWVuc2lvbjsgaisrKSB7CisgICAgICBpZiAoaW1hZ2VbaV1bal0pIHsKKyAgICAgICAgW2JpdHMgc2V0WDpqIHk6aV07CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIFtzZWxmIGRlY29kZU1hdHJpeDpiaXRzIGhpbnRzOmhpbnRzIGVycm9yOmVycm9yXTsKK30KKworLSAoWlhEZWNvZGVyUmVzdWx0ICopZGVjb2RlTWF0cml4OihaWEJpdE1hdHJpeCAqKWJpdHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW3NlbGYgZGVjb2RlTWF0cml4OmJpdHMgaGludHM6bmlsIGVycm9yOmVycm9yXTsKK30KKworLyoqCisgKiBEZWNvZGVzIGEgUVIgQ29kZSByZXByZXNlbnRlZCBhcyBhIHtAbGluayBCaXRNYXRyaXh9LiBBIDEgb3IgInRydWUiIGlzIHRha2VuIHRvIG1lYW4gYSBibGFjayBtb2R1bGUuCisgKi8KKy0gKFpYRGVjb2RlclJlc3VsdCAqKWRlY29kZU1hdHJpeDooWlhCaXRNYXRyaXggKiliaXRzIGhpbnRzOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWFFSQ29kZUJpdE1hdHJpeFBhcnNlciAqcGFyc2VyID0gW1taWFFSQ29kZUJpdE1hdHJpeFBhcnNlciBhbGxvY10gaW5pdFdpdGhCaXRNYXRyaXg6Yml0cyBlcnJvcjplcnJvcl07CisgIGlmICghcGFyc2VyKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBaWFFSQ29kZVZlcnNpb24gKnZlcnNpb24gPSBbcGFyc2VyIHJlYWRWZXJzaW9uV2l0aEVycm9yOmVycm9yXTsKKyAgaWYgKCF2ZXJzaW9uKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBaWEZvcm1hdEluZm9ybWF0aW9uICpmb3JtYXRJbmZvID0gW3BhcnNlciByZWFkRm9ybWF0SW5mb3JtYXRpb25XaXRoRXJyb3I6ZXJyb3JdOworICBpZiAoIWZvcm1hdEluZm8pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKmVjTGV2ZWwgPSBmb3JtYXRJbmZvLmVycm9yQ29ycmVjdGlvbkxldmVsOworCisgIE5TQXJyYXkgKmNvZGV3b3JkcyA9IFtwYXJzZXIgcmVhZENvZGV3b3Jkc1dpdGhFcnJvcjplcnJvcl07CisgIGlmICghY29kZXdvcmRzKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBOU0FycmF5ICpkYXRhQmxvY2tzID0gW1pYUVJDb2RlRGF0YUJsb2NrIGRhdGFCbG9ja3M6Y29kZXdvcmRzIHZlcnNpb246dmVyc2lvbiBlY0xldmVsOmVjTGV2ZWxdOworCisgIGludCB0b3RhbEJ5dGVzID0gMDsKKyAgZm9yIChaWFFSQ29kZURhdGFCbG9jayAqZGF0YUJsb2NrIGluIGRhdGFCbG9ja3MpIHsKKyAgICB0b3RhbEJ5dGVzICs9IGRhdGFCbG9jay5udW1EYXRhQ29kZXdvcmRzOworICB9CisKKyAgaWYgKHRvdGFsQnl0ZXMgPT0gMCkgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpbnQ4X3QgcmVzdWx0Qnl0ZXNbdG90YWxCeXRlc107CisgIGludCByZXN1bHRPZmZzZXQgPSAwOworCisgIGZvciAoWlhRUkNvZGVEYXRhQmxvY2sgKmRhdGFCbG9jayBpbiBkYXRhQmxvY2tzKSB7CisgICAgTlNNdXRhYmxlQXJyYXkgKmNvZGV3b3JkQnl0ZXMgPSBbZGF0YUJsb2NrIGNvZGV3b3Jkc107CisgICAgaW50IG51bURhdGFDb2Rld29yZHMgPSBbZGF0YUJsb2NrIG51bURhdGFDb2Rld29yZHNdOworICAgIGlmICghW3NlbGYgY29ycmVjdEVycm9yczpjb2Rld29yZEJ5dGVzIG51bURhdGFDb2Rld29yZHM6bnVtRGF0YUNvZGV3b3JkcyBlcnJvcjplcnJvcl0pIHsKKyAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRGF0YUNvZGV3b3JkczsgaSsrKSB7CisgICAgICByZXN1bHRCeXRlc1tyZXN1bHRPZmZzZXQrK10gPSBbY29kZXdvcmRCeXRlc1tpXSBjaGFyVmFsdWVdOworICAgIH0KKyAgfQorCisgIHJldHVybiBbWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyIGRlY29kZTpyZXN1bHRCeXRlcyBsZW5ndGg6dG90YWxCeXRlcyB2ZXJzaW9uOnZlcnNpb24gZWNMZXZlbDplY0xldmVsIGhpbnRzOmhpbnRzIGVycm9yOmVycm9yXTsKK30KKworCisvKioKKyAqIEdpdmVuIGRhdGEgYW5kIGVycm9yLWNvcnJlY3Rpb24gY29kZXdvcmRzIHJlY2VpdmVkLCBwb3NzaWJseSBjb3JydXB0ZWQgYnkgZXJyb3JzLCBhdHRlbXB0cyB0bworICogY29ycmVjdCB0aGUgZXJyb3JzIGluLXBsYWNlIHVzaW5nIFJlZWQtU29sb21vbiBlcnJvciBjb3JyZWN0aW9uLgorICovCistIChCT09MKWNvcnJlY3RFcnJvcnM6KE5TTXV0YWJsZUFycmF5ICopY29kZXdvcmRCeXRlcyBudW1EYXRhQ29kZXdvcmRzOihpbnQpbnVtRGF0YUNvZGV3b3JkcyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGludCBudW1Db2Rld29yZHMgPSAoaW50KVtjb2Rld29yZEJ5dGVzIGNvdW50XTsKKyAgaW50IGNvZGV3b3Jkc0ludHNbbnVtQ29kZXdvcmRzXTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNvZGV3b3JkczsgaSsrKSB7CisgICAgY29kZXdvcmRzSW50c1tpXSA9IFtjb2Rld29yZEJ5dGVzW2ldIGNoYXJWYWx1ZV0gJiAweEZGOworICB9CisKKyAgaW50IG51bUVDQ29kZXdvcmRzID0gKGludClbY29kZXdvcmRCeXRlcyBjb3VudF0gLSBudW1EYXRhQ29kZXdvcmRzOworICBOU0Vycm9yICpkZWNvZGVFcnJvciA9IG5pbDsKKyAgaWYgKCFbc2VsZi5yc0RlY29kZXIgZGVjb2RlOmNvZGV3b3Jkc0ludHMgcmVjZWl2ZWRMZW46bnVtQ29kZXdvcmRzIHR3b1M6bnVtRUNDb2Rld29yZHMgZXJyb3I6JmRlY29kZUVycm9yXSkgeworICAgIGlmIChkZWNvZGVFcnJvci5jb2RlID09IFpYUmVlZFNvbG9tb25FcnJvcikgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBDaGVja3N1bUVycm9ySW5zdGFuY2UoKTsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBkZWNvZGVFcnJvcjsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgIH0KKworICBmb3IgKGludCBpID0gMDsgaSA8IG51bURhdGFDb2Rld29yZHM7IGkrKykgeworICAgIGNvZGV3b3JkQnl0ZXNbaV0gPSBbTlNOdW1iZXIgbnVtYmVyV2l0aENoYXI6Y29kZXdvcmRzSW50c1tpXV07CisgIH0KKyAgcmV0dXJuIFlFUzsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlVmVyc2lvbi5oIGIvWlhpbmdPYmpDL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlVmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNjQzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVWZXJzaW9uLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBFbmNhcHN1bGF0ZXMgYSBzZXQgb2YgZXJyb3ItY29ycmVjdGlvbiBibG9ja3MgaW4gb25lIHN5bWJvbCB2ZXJzaW9uLiBNb3N0IHZlcnNpb25zIHdpbGwKKyAqIHVzZSBibG9ja3Mgb2YgZGlmZmVyaW5nIHNpemVzIHdpdGhpbiBvbmUgdmVyc2lvbiwgc28sIHRoaXMgZW5jYXBzdWxhdGVzIHRoZSBwYXJhbWV0ZXJzIGZvcgorICogZWFjaCBzZXQgb2YgYmxvY2tzLiBJdCBhbHNvIGhvbGRzIHRoZSBudW1iZXIgb2YgZXJyb3ItY29ycmVjdGlvbiBjb2Rld29yZHMgcGVyIGJsb2NrIHNpbmNlIGl0CisgKiB3aWxsIGJlIHRoZSBzYW1lIGFjcm9zcyBhbGwgYmxvY2tzIHdpdGhpbiBvbmUgdmVyc2lvbi4KKyAqLworCitAY2xhc3MgWlhRUkNvZGVFQ0I7CisKK0BpbnRlcmZhY2UgWlhRUkNvZGVFQ0Jsb2NrcyA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgZWNDb2Rld29yZHNQZXJCbG9jazsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgbnVtQmxvY2tzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCB0b3RhbEVDQ29kZXdvcmRzOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIE5TQXJyYXkgKmVjQmxvY2tzOworCistIChpZClpbml0V2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6KGludCllY0NvZGV3b3Jkc1BlckJsb2NrIGVjQmxvY2tzOihaWFFSQ29kZUVDQiAqKWVjQmxvY2tzOworLSAoaWQpaW5pdFdpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOihpbnQpZWNDb2Rld29yZHNQZXJCbG9jayBlY0Jsb2NrczE6KFpYUVJDb2RlRUNCICopZWNCbG9ja3MxIGVjQmxvY2tzMjooWlhRUkNvZGVFQ0IgKillY0Jsb2NrczI7CisrIChaWFFSQ29kZUVDQmxvY2tzICopZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazooaW50KWVjQ29kZXdvcmRzUGVyQmxvY2sgZWNCbG9ja3M6KFpYUVJDb2RlRUNCICopZWNCbG9ja3M7CisrIChaWFFSQ29kZUVDQmxvY2tzICopZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazooaW50KWVjQ29kZXdvcmRzUGVyQmxvY2sgZWNCbG9ja3MxOihaWFFSQ29kZUVDQiAqKWVjQmxvY2tzMSBlY0Jsb2NrczI6KFpYUVJDb2RlRUNCICopZWNCbG9ja3MyOworCitAZW5kCisKKy8qKgorICogRW5jYXBzdWFsdGVzIHRoZSBwYXJhbWV0ZXJzIGZvciBvbmUgZXJyb3ItY29ycmVjdGlvbiBibG9jayBpbiBvbmUgc3ltYm9sIHZlcnNpb24uCisgKiBUaGlzIGluY2x1ZGVzIHRoZSBudW1iZXIgb2YgZGF0YSBjb2Rld29yZHMsIGFuZCB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgYmxvY2sgd2l0aCB0aGVzZQorICogcGFyYW1ldGVycyBpcyB1c2VkIGNvbnNlY3V0aXZlbHkgaW4gdGhlIFFSIGNvZGUgdmVyc2lvbidzIGZvcm1hdC4KKyAqLworCitAaW50ZXJmYWNlIFpYUVJDb2RlRUNCIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBjb3VudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgZGF0YUNvZGV3b3JkczsKKworLSAoaWQpaW5pdFdpdGhDb3VudDooaW50KWNvdW50IGRhdGFDb2Rld29yZHM6KGludClkYXRhQ29kZXdvcmRzOworKyAoWlhRUkNvZGVFQ0IgKillY2JXaXRoQ291bnQ6KGludCljb3VudCBkYXRhQ29kZXdvcmRzOihpbnQpZGF0YUNvZGV3b3JkczsKKworQGVuZAorCisvKioKKyAqIFNlZSBJU08gMTgwMDQ6MjAwNiBBbm5leCBECisgKi8KKworQGNsYXNzIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwsIFpYQml0TWF0cml4OworCitAaW50ZXJmYWNlIFpYUVJDb2RlVmVyc2lvbiA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgdmVyc2lvbk51bWJlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBOU0FycmF5ICphbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBOU0FycmF5ICplY0Jsb2NrczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQgdG90YWxDb2Rld29yZHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGRpbWVuc2lvbkZvclZlcnNpb247CisKKy0gKFpYUVJDb2RlRUNCbG9ja3MgKillY0Jsb2Nrc0ZvckxldmVsOihaWEVycm9yQ29ycmVjdGlvbkxldmVsICopZWNMZXZlbDsKKysgKFpYUVJDb2RlVmVyc2lvbiAqKXByb3Zpc2lvbmFsVmVyc2lvbkZvckRpbWVuc2lvbjooaW50KWRpbWVuc2lvbjsKKysgKFpYUVJDb2RlVmVyc2lvbiAqKXZlcnNpb25Gb3JOdW1iZXI6KGludCl2ZXJzaW9uTnVtYmVyOworKyAoWlhRUkNvZGVWZXJzaW9uICopZGVjb2RlVmVyc2lvbkluZm9ybWF0aW9uOihpbnQpdmVyc2lvbkJpdHM7CistIChaWEJpdE1hdHJpeCAqKWJ1aWxkRnVuY3Rpb25QYXR0ZXJuOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVWZXJzaW9uLm0gYi9aWGluZ09iakMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVWZXJzaW9uLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4NDEwYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZVZlcnNpb24ubQpAQCAtMCwwICsxLDQ5NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwuaCIKKyNpbXBvcnQgIlpYRm9ybWF0SW5mb3JtYXRpb24uaCIKKyNpbXBvcnQgIlpYUVJDb2RlVmVyc2lvbi5oIgorCitAaW1wbGVtZW50YXRpb24gWlhRUkNvZGVFQ0Jsb2NrcworCistIChpZClpbml0V2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6KGludCllY0NvZGV3b3Jkc1BlckJsb2NrIGVjQmxvY2tzOihaWFFSQ29kZUVDQiAqKWVjQmxvY2tzIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfZWNDb2Rld29yZHNQZXJCbG9jayA9IGVjQ29kZXdvcmRzUGVyQmxvY2s7CisgICAgX2VjQmxvY2tzID0gQFtlY0Jsb2Nrc107CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQpaW5pdFdpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOihpbnQpZWNDb2Rld29yZHNQZXJCbG9jayBlY0Jsb2NrczE6KFpYUVJDb2RlRUNCICopZWNCbG9ja3MxIGVjQmxvY2tzMjooWlhRUkNvZGVFQ0IgKillY0Jsb2NrczIgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9lY0NvZGV3b3Jkc1BlckJsb2NrID0gZWNDb2Rld29yZHNQZXJCbG9jazsKKyAgICBfZWNCbG9ja3MgPSBAW2VjQmxvY2tzMSwgZWNCbG9ja3MyXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisrIChaWFFSQ29kZUVDQmxvY2tzICopZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazooaW50KWVjQ29kZXdvcmRzUGVyQmxvY2sgZWNCbG9ja3M6KFpYUVJDb2RlRUNCICopZWNCbG9ja3MgeworICByZXR1cm4gW1taWFFSQ29kZUVDQmxvY2tzIGFsbG9jXSBpbml0V2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6ZWNDb2Rld29yZHNQZXJCbG9jayBlY0Jsb2NrczplY0Jsb2Nrc107Cit9CisKKysgKFpYUVJDb2RlRUNCbG9ja3MgKillY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOihpbnQpZWNDb2Rld29yZHNQZXJCbG9jayBlY0Jsb2NrczE6KFpYUVJDb2RlRUNCICopZWNCbG9ja3MxIGVjQmxvY2tzMjooWlhRUkNvZGVFQ0IgKillY0Jsb2NrczIgeworICByZXR1cm4gW1taWFFSQ29kZUVDQmxvY2tzIGFsbG9jXSBpbml0V2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6ZWNDb2Rld29yZHNQZXJCbG9jayBlY0Jsb2NrczE6ZWNCbG9ja3MxIGVjQmxvY2tzMjplY0Jsb2NrczJdOworfQorCistIChpbnQpbnVtQmxvY2tzIHsKKyAgaW50IHRvdGFsID0gMDsKKworICBmb3IgKFpYUVJDb2RlRUNCICplY2IgaW4gc2VsZi5lY0Jsb2NrcykgeworICAgIHRvdGFsICs9IFtlY2IgY291bnRdOworICB9CisKKyAgcmV0dXJuIHRvdGFsOworfQorCistIChpbnQpdG90YWxFQ0NvZGV3b3JkcyB7CisgIHJldHVybiBzZWxmLmVjQ29kZXdvcmRzUGVyQmxvY2sgKiBbc2VsZiBudW1CbG9ja3NdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWFFSQ29kZUVDQgorCistIChpZClpbml0V2l0aENvdW50OihpbnQpY291bnQgZGF0YUNvZGV3b3JkczooaW50KWRhdGFDb2Rld29yZHMgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9jb3VudCA9IGNvdW50OworICAgIF9kYXRhQ29kZXdvcmRzID0gZGF0YUNvZGV3b3JkczsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisrIChaWFFSQ29kZUVDQiAqKWVjYldpdGhDb3VudDooaW50KWNvdW50IGRhdGFDb2Rld29yZHM6KGludClkYXRhQ29kZXdvcmRzIHsKKyAgcmV0dXJuIFtbWlhRUkNvZGVFQ0IgYWxsb2NdIGluaXRXaXRoQ291bnQ6Y291bnQgZGF0YUNvZGV3b3JkczpkYXRhQ29kZXdvcmRzXTsKK30KKworQGVuZAorCisKKy8qKgorICogU2VlIElTTyAxODAwNDoyMDA2IEFubmV4IEQuCisgKiBFbGVtZW50IGkgcmVwcmVzZW50cyB0aGUgcmF3IHZlcnNpb24gYml0cyB0aGF0IHNwZWNpZnkgdmVyc2lvbiBpICsgNworICovCisKK2ludCBjb25zdCBWRVJTSU9OX0RFQ09ERV9JTkZPX0xFTiA9IDM0OworaW50IGNvbnN0IFZFUlNJT05fREVDT0RFX0lORk9bVkVSU0lPTl9ERUNPREVfSU5GT19MRU5dID0geworICAweDA3Qzk0LCAweDA4NUJDLCAweDA5QTk5LCAweDBBNEQzLCAweDBCQkY2LAorICAweDBDNzYyLCAweDBEODQ3LCAweDBFNjBELCAweDBGOTI4LCAweDEwQjc4LAorICAweDExNDVELCAweDEyQTE3LCAweDEzNTMyLCAweDE0OUE2LCAweDE1NjgzLAorICAweDE2OEM5LCAweDE3N0VDLCAweDE4RUM0LCAweDE5MUUxLCAweDFBRkFCLAorICAweDFCMDhFLCAweDFDQzFBLCAweDFEMzNGLCAweDFFRDc1LCAweDFGMjUwLAorICAweDIwOUQ1LCAweDIxNkYwLCAweDIyOEJBLCAweDIzNzlGLCAweDI0QjBCLAorICAweDI1NDJFLCAweDI2QTY0LCAweDI3NTQxLCAweDI4QzY5Cit9OworCitzdGF0aWMgTlNBcnJheSAqVkVSU0lPTlMgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBaWFFSQ29kZVZlcnNpb24KKworLSAoaWQpaW5pdFdpdGhWZXJzaW9uTnVtYmVyOihpbnQpdmVyc2lvbk51bWJlciBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczooTlNBcnJheSAqKWFsaWdubWVudFBhdHRlcm5DZW50ZXJzIGVjQmxvY2tzMTooWlhRUkNvZGVFQ0Jsb2NrcyAqKWVjQmxvY2tzMSBlY0Jsb2NrczI6KFpYUVJDb2RlRUNCbG9ja3MgKillY0Jsb2NrczIgZWNCbG9ja3MzOihaWFFSQ29kZUVDQmxvY2tzICopZWNCbG9ja3MzIGVjQmxvY2tzNDooWlhRUkNvZGVFQ0Jsb2NrcyAqKWVjQmxvY2tzNCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX3ZlcnNpb25OdW1iZXIgPSB2ZXJzaW9uTnVtYmVyOworICAgIF9hbGlnbm1lbnRQYXR0ZXJuQ2VudGVycyA9IGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOworICAgIF9lY0Jsb2NrcyA9IEBbZWNCbG9ja3MxLCBlY0Jsb2NrczIsIGVjQmxvY2tzMywgZWNCbG9ja3M0XTsKKyAgICBpbnQgdG90YWwgPSAwOworICAgIGludCBlY0NvZGV3b3JkcyA9IGVjQmxvY2tzMS5lY0NvZGV3b3Jkc1BlckJsb2NrOworCisgICAgZm9yIChaWFFSQ29kZUVDQiAqZWNCbG9jayBpbiBlY0Jsb2NrczEuZWNCbG9ja3MpIHsKKyAgICAgIHRvdGFsICs9IGVjQmxvY2suY291bnQgKiAoZWNCbG9jay5kYXRhQ29kZXdvcmRzICsgZWNDb2Rld29yZHMpOworICAgIH0KKworICAgIF90b3RhbENvZGV3b3JkcyA9IHRvdGFsOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKysgKFpYUVJDb2RlVmVyc2lvbiAqKVpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOihpbnQpYVZlcnNpb25OdW1iZXIgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6KE5TQXJyYXkgKilhbkFsaWdubWVudFBhdHRlcm5DZW50ZXJzIGVjQmxvY2tzMTooWlhRUkNvZGVFQ0Jsb2NrcyAqKWVjQmxvY2tzMSBlY0Jsb2NrczI6KFpYUVJDb2RlRUNCbG9ja3MgKillY0Jsb2NrczIgZWNCbG9ja3MzOihaWFFSQ29kZUVDQmxvY2tzICopZWNCbG9ja3MzIGVjQmxvY2tzNDooWlhRUkNvZGVFQ0Jsb2NrcyAqKWVjQmxvY2tzNCB7CisgIHJldHVybiBbW1pYUVJDb2RlVmVyc2lvbiBhbGxvY10gaW5pdFdpdGhWZXJzaW9uTnVtYmVyOmFWZXJzaW9uTnVtYmVyIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOmFuQWxpZ25tZW50UGF0dGVybkNlbnRlcnMgZWNCbG9ja3MxOmVjQmxvY2tzMSBlY0Jsb2NrczI6ZWNCbG9ja3MyIGVjQmxvY2tzMzplY0Jsb2NrczMgZWNCbG9ja3M0OmVjQmxvY2tzNF07Cit9CisKKy0gKGludClkaW1lbnNpb25Gb3JWZXJzaW9uIHsKKyAgcmV0dXJuIDE3ICsgNCAqIHNlbGYudmVyc2lvbk51bWJlcjsKK30KKworLSAoWlhRUkNvZGVFQ0Jsb2NrcyAqKWVjQmxvY2tzRm9yTGV2ZWw6KFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillY0xldmVsIHsKKyAgcmV0dXJuIHNlbGYuZWNCbG9ja3NbW2VjTGV2ZWwgb3JkaW5hbF1dOworfQorCisvKioKKyAqIERlZHVjZXMgdmVyc2lvbiBpbmZvcm1hdGlvbiBwdXJlbHkgZnJvbSBRUiBDb2RlIGRpbWVuc2lvbnMuCisgKi8KKysgKFpYUVJDb2RlVmVyc2lvbiAqKXByb3Zpc2lvbmFsVmVyc2lvbkZvckRpbWVuc2lvbjooaW50KWRpbWVuc2lvbiB7CisgIGlmIChkaW1lbnNpb24gJSA0ICE9IDEpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgcmV0dXJuIFtzZWxmIHZlcnNpb25Gb3JOdW1iZXI6KGRpbWVuc2lvbiAtIDE3KSA+PiAyXTsKK30KKworKyAoWlhRUkNvZGVWZXJzaW9uICopdmVyc2lvbkZvck51bWJlcjooaW50KXZlcnNpb25OdW1iZXIgeworICBpZiAodmVyc2lvbk51bWJlciA8IDEgfHwgdmVyc2lvbk51bWJlciA+IDQwKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICByZXR1cm4gVkVSU0lPTlNbdmVyc2lvbk51bWJlciAtIDFdOworfQorCisrIChaWFFSQ29kZVZlcnNpb24gKilkZWNvZGVWZXJzaW9uSW5mb3JtYXRpb246KGludCl2ZXJzaW9uQml0cyB7CisgIGludCBiZXN0RGlmZmVyZW5jZSA9IElOVF9NQVg7CisgIGludCBiZXN0VmVyc2lvbiA9IDA7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBWRVJTSU9OX0RFQ09ERV9JTkZPX0xFTjsgaSsrKSB7CisgICAgaW50IHRhcmdldFZlcnNpb24gPSBWRVJTSU9OX0RFQ09ERV9JTkZPW2ldOworICAgIGlmICh0YXJnZXRWZXJzaW9uID09IHZlcnNpb25CaXRzKSB7CisgICAgICByZXR1cm4gW3NlbGYgdmVyc2lvbkZvck51bWJlcjppICsgN107CisgICAgfQorICAgIGludCBiaXRzRGlmZmVyZW5jZSA9IFtaWEZvcm1hdEluZm9ybWF0aW9uIG51bUJpdHNEaWZmZXJpbmc6dmVyc2lvbkJpdHMgYjp0YXJnZXRWZXJzaW9uXTsKKyAgICBpZiAoYml0c0RpZmZlcmVuY2UgPCBiZXN0RGlmZmVyZW5jZSkgeworICAgICAgYmVzdFZlcnNpb24gPSBpICsgNzsKKyAgICAgIGJlc3REaWZmZXJlbmNlID0gYml0c0RpZmZlcmVuY2U7CisgICAgfQorICB9CisKKyAgaWYgKGJlc3REaWZmZXJlbmNlIDw9IDMpIHsKKyAgICByZXR1cm4gW3NlbGYgdmVyc2lvbkZvck51bWJlcjpiZXN0VmVyc2lvbl07CisgIH0KKyAgcmV0dXJuIG5pbDsKK30KKworLyoqCisgKiBTZWUgSVNPIDE4MDA0OjIwMDYgQW5uZXggRQorICovCistIChaWEJpdE1hdHJpeCAqKWJ1aWxkRnVuY3Rpb25QYXR0ZXJuIHsKKyAgaW50IGRpbWVuc2lvbiA9IFtzZWxmIGRpbWVuc2lvbkZvclZlcnNpb25dOworICBaWEJpdE1hdHJpeCAqYml0TWF0cml4ID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhEaW1lbnNpb246ZGltZW5zaW9uXTsKKyAgW2JpdE1hdHJpeCBzZXRSZWdpb25BdExlZnQ6MCB0b3A6MCB3aWR0aDo5IGhlaWdodDo5XTsKKyAgW2JpdE1hdHJpeCBzZXRSZWdpb25BdExlZnQ6ZGltZW5zaW9uIC0gOCB0b3A6MCB3aWR0aDo4IGhlaWdodDo5XTsKKyAgW2JpdE1hdHJpeCBzZXRSZWdpb25BdExlZnQ6MCB0b3A6ZGltZW5zaW9uIC0gOCB3aWR0aDo5IGhlaWdodDo4XTsKKyAgaW50IG1heCA9IChpbnQpc2VsZi5hbGlnbm1lbnRQYXR0ZXJuQ2VudGVycy5jb3VudDsKKworICBmb3IgKGludCB4ID0gMDsgeCA8IG1heDsgeCsrKSB7CisgICAgaW50IGkgPSBbKHNlbGYuYWxpZ25tZW50UGF0dGVybkNlbnRlcnMpW3hdIGludFZhbHVlXSAtIDI7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1heDsgeSsrKSB7CisgICAgICBpZiAoKHggPT0gMCAmJiAoeSA9PSAwIHx8IHkgPT0gbWF4IC0gMSkpIHx8ICh4ID09IG1heCAtIDEgJiYgeSA9PSAwKSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIFtiaXRNYXRyaXggc2V0UmVnaW9uQXRMZWZ0Olsoc2VsZi5hbGlnbm1lbnRQYXR0ZXJuQ2VudGVycylbeV0gaW50VmFsdWVdIC0gMiB0b3A6aSB3aWR0aDo1IGhlaWdodDo1XTsKKyAgICB9CisgIH0KKworICBbYml0TWF0cml4IHNldFJlZ2lvbkF0TGVmdDo2IHRvcDo5IHdpZHRoOjEgaGVpZ2h0OmRpbWVuc2lvbiAtIDE3XTsKKyAgW2JpdE1hdHJpeCBzZXRSZWdpb25BdExlZnQ6OSB0b3A6NiB3aWR0aDpkaW1lbnNpb24gLSAxNyBoZWlnaHQ6MV07CisgIGlmIChzZWxmLnZlcnNpb25OdW1iZXIgPiA2KSB7CisgICAgW2JpdE1hdHJpeCBzZXRSZWdpb25BdExlZnQ6ZGltZW5zaW9uIC0gMTEgdG9wOjAgd2lkdGg6MyBoZWlnaHQ6Nl07CisgICAgW2JpdE1hdHJpeCBzZXRSZWdpb25BdExlZnQ6MCB0b3A6ZGltZW5zaW9uIC0gMTEgd2lkdGg6NiBoZWlnaHQ6M107CisgIH0KKyAgcmV0dXJuIGJpdE1hdHJpeDsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7CisgIHJldHVybiBbQChzZWxmLnZlcnNpb25OdW1iZXIpIHN0cmluZ1ZhbHVlXTsKK30KKworLyoqCisgKiBTZWUgSVNPIDE4MDA0OjIwMDYgNi41LjEgVGFibGUgOQorICovCisrICh2b2lkKWluaXRpYWxpemUgeworICBWRVJTSU9OUyA9IEBbW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjoxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazo3IGVjQmxvY2tzOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjE5XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjEwIGVjQmxvY2tzOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjE2XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjEzIGVjQmxvY2tzOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjEzXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjE3IGVjQmxvY2tzOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjldXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjoyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDE4XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MTAgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6MzRdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MTYgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6MjhdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjIgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6MjJdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6MTZdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjozCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDIyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MTUgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6NTVdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjYgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6NDRdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MTggZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6MTddXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjIgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6MTNdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjo0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDI2XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjAgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6ODBdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MTggZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6MzJdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjYgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6MjRdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MTYgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0IGRhdGFDb2Rld29yZHM6OV1dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyNiBlY0Jsb2NrczpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEgZGF0YUNvZGV3b3JkczoxMDhdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjQgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6NDNdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MTggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjE1XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6MTZdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjIgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjExXSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6MTJdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjo2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDM0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MTggZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6NjhdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MTYgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0IGRhdGFDb2Rld29yZHM6MjddXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjQgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0IGRhdGFDb2Rld29yZHM6MTldXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0IGRhdGFDb2Rld29yZHM6MTVdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjo3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDIyLCBAMzhdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyMCBlY0Jsb2NrczpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIgZGF0YUNvZGV3b3Jkczo3OF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoxOCBlY0Jsb2NrczpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczozMV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczM6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoxOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6MTRdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoxNV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczQ6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyNiBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0IGRhdGFDb2Rld29yZHM6MTNdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEgZGF0YUNvZGV3b3JkczoxNF1dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMjQsIEA0Ml0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI0IGVjQmxvY2tzOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjk3XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjIyIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIgZGF0YUNvZGV3b3JkczozOF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjM5XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjIyIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoxOF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjE5XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI2IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoxNF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjE1XV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6OQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOkBbQDYsIEAyNiwgQDQ2XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6MTE2XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjIyIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjMgZGF0YUNvZGV3b3JkczozNl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjM3XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjIwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoxNl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjE3XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI0IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoxMl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjEzXV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6MTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMjgsIEA1MF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjE4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIgZGF0YUNvZGV3b3Jkczo2OF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjY5XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI2IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3Jkczo0M10gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjQ0XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI0IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjYgZGF0YUNvZGV3b3JkczoxOV0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjIwXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjYgZGF0YUNvZGV3b3JkczoxNV0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjE2XV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6MTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMzAsIEA1NF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjIwIGVjQmxvY2tzOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjgxXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEgZGF0YUNvZGV3b3Jkczo1MF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjUxXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoyMl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjIzXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI0IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjMgZGF0YUNvZGV3b3JkczoxMl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6OCBkYXRhQ29kZXdvcmRzOjEzXV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6MTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMzIsIEA1OF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI0IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIgZGF0YUNvZGV3b3Jkczo5Ml0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjkzXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjIyIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjYgZGF0YUNvZGV3b3JkczozNl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjM3XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI2IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoyMF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NiBkYXRhQ29kZXdvcmRzOjIxXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjcgZGF0YUNvZGV3b3JkczoxNF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjE1XV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6MTMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMzQsIEA2Ml0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI2IGVjQmxvY2tzOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjEwN11dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyMiBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo4IGRhdGFDb2Rld29yZHM6MzddIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEgZGF0YUNvZGV3b3JkczozOF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczM6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyNCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo4IGRhdGFDb2Rld29yZHM6MjBdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoyMV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczQ6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyMiBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMiBkYXRhQ29kZXdvcmRzOjExXSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0IGRhdGFDb2Rld29yZHM6MTJdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjoxNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOkBbQDYsIEAyNiwgQDQ2LCBANjZdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDozIGRhdGFDb2Rld29yZHM6MTE1XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6MTE2XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI0IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3Jkczo0MF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NSBkYXRhQ29kZXdvcmRzOjQxXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjIwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjExIGRhdGFDb2Rld29yZHM6MTZdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjUgZGF0YUNvZGV3b3JkczoxN11dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczQ6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyNCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMSBkYXRhQ29kZXdvcmRzOjEyXSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo1IGRhdGFDb2Rld29yZHM6MTNdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjoxNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOkBbQDYsIEAyNiwgQDQ4LCBANzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyMiBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo1IGRhdGFDb2Rld29yZHM6ODddIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEgZGF0YUNvZGV3b3Jkczo4OF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyNCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo1IGRhdGFDb2Rld29yZHM6NDFdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjUgZGF0YUNvZGV3b3Jkczo0Ml1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczM6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo1IGRhdGFDb2Rld29yZHM6MjRdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjcgZGF0YUNvZGV3b3JkczoyNV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczQ6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyNCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMSBkYXRhQ29kZXdvcmRzOjEyXSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo3IGRhdGFDb2Rld29yZHM6MTNdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjoxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOkBbQDYsIEAyNiwgQDUwLCBANzRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyNCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo1IGRhdGFDb2Rld29yZHM6OThdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEgZGF0YUNvZGV3b3Jkczo5OV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo3IGRhdGFDb2Rld29yZHM6NDVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjMgZGF0YUNvZGV3b3Jkczo0Nl1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczM6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyNCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxNSBkYXRhQ29kZXdvcmRzOjE5XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6MjBdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MyBkYXRhQ29kZXdvcmRzOjE1XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMyBkYXRhQ29kZXdvcmRzOjE2XV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6MTcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMzAsIEA1NCwgQDc4XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjEwN10gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NSBkYXRhQ29kZXdvcmRzOjEwOF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMCBkYXRhQ29kZXdvcmRzOjQ2XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6NDddXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjIyXSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxNSBkYXRhQ29kZXdvcmRzOjIzXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIgZGF0YUNvZGV3b3JkczoxNF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTcgZGF0YUNvZGV3b3JkczoxNV1dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjE4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDMwLCBANTYsIEA4Ml0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjUgZGF0YUNvZGV3b3JkczoxMjBdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEgZGF0YUNvZGV3b3JkczoxMjFdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjYgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6OSBkYXRhQ29kZXdvcmRzOjQzXSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0IGRhdGFDb2Rld29yZHM6NDRdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTcgZGF0YUNvZGV3b3JkczoyMl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjIzXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIgZGF0YUNvZGV3b3JkczoxNF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTkgZGF0YUNvZGV3b3JkczoxNV1dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjE5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDMwLCBANTgsIEA4Nl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjMgZGF0YUNvZGV3b3JkczoxMTNdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoxMTRdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjYgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MyBkYXRhQ29kZXdvcmRzOjQ0XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMSBkYXRhQ29kZXdvcmRzOjQ1XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI2IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE3IGRhdGFDb2Rld29yZHM6MjFdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoyMl1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczQ6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyNiBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo5IGRhdGFDb2Rld29yZHM6MTNdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE2IGRhdGFDb2Rld29yZHM6MTRdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjoyMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOkBbQDYsIEAzNCwgQDYyLCBAOTBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDozIGRhdGFDb2Rld29yZHM6MTA3XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo1IGRhdGFDb2Rld29yZHM6MTA4XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI2IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjMgZGF0YUNvZGV3b3Jkczo0MV0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTMgZGF0YUNvZGV3b3Jkczo0Ml1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczM6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxNSBkYXRhQ29kZXdvcmRzOjI0XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo1IGRhdGFDb2Rld29yZHM6MjVdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTUgZGF0YUNvZGV3b3JkczoxNV0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTAgZGF0YUNvZGV3b3JkczoxNl1dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjIxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDI4LCBANTAsIEA3MiwgQDk0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjExNl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjExN11dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyNiBlY0Jsb2NrczpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE3IGRhdGFDb2Rld29yZHM6NDJdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTcgZGF0YUNvZGV3b3JkczoyMl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NiBkYXRhQ29kZXdvcmRzOjIzXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE5IGRhdGFDb2Rld29yZHM6MTZdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjYgZGF0YUNvZGV3b3JkczoxN11dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjIyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDI2LCBANTAsIEA3NCwgQDk4XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjExMV0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NyBkYXRhQ29kZXdvcmRzOjExMl1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE3IGRhdGFDb2Rld29yZHM6NDZdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NyBkYXRhQ29kZXdvcmRzOjI0XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxNiBkYXRhQ29kZXdvcmRzOjI1XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI0IGVjQmxvY2tzOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MzQgZGF0YUNvZGV3b3JkczoxM11dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjIzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDMwLCBANTQsIEA3OCwgQDEwMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoxMjFdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjUgZGF0YUNvZGV3b3JkczoxMjJdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjQ3XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxNCBkYXRhQ29kZXdvcmRzOjQ4XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjExIGRhdGFDb2Rld29yZHM6MjRdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE0IGRhdGFDb2Rld29yZHM6MjVdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTYgZGF0YUNvZGV3b3JkczoxNV0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTQgZGF0YUNvZGV3b3JkczoxNl1dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDI4LCBANTQsIEA4MCwgQDEwNl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjYgZGF0YUNvZGV3b3JkczoxMTddIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoxMThdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NiBkYXRhQ29kZXdvcmRzOjQ1XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxNCBkYXRhQ29kZXdvcmRzOjQ2XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjExIGRhdGFDb2Rld29yZHM6MjRdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE2IGRhdGFDb2Rld29yZHM6MjVdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MzAgZGF0YUNvZGV3b3JkczoxNl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjE3XV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6MjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMzIsIEA1OCwgQDg0LCBAMTEwXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjYgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6OCBkYXRhQ29kZXdvcmRzOjEwNl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjEwN11dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo4IGRhdGFDb2Rld29yZHM6NDddIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEzIGRhdGFDb2Rld29yZHM6NDhdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NyBkYXRhQ29kZXdvcmRzOjI0XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyMiBkYXRhQ29kZXdvcmRzOjI1XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIyIGRhdGFDb2Rld29yZHM6MTVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEzIGRhdGFDb2Rld29yZHM6MTZdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjoyNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOkBbQDYsIEAzMCwgQDU4LCBAODYsIEAxMTRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMCBkYXRhQ29kZXdvcmRzOjExNF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjExNV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxOSBkYXRhQ29kZXdvcmRzOjQ2XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0IGRhdGFDb2Rld29yZHM6NDddXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MjggZGF0YUNvZGV3b3JkczoyMl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NiBkYXRhQ29kZXdvcmRzOjIzXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjMzIGRhdGFDb2Rld29yZHM6MTZdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoxN11dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDM0LCBANjIsIEA5MCwgQDExOF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjggZGF0YUNvZGV3b3JkczoxMjJdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoxMjNdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MjIgZGF0YUNvZGV3b3Jkczo0NV0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MyBkYXRhQ29kZXdvcmRzOjQ2XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjggZGF0YUNvZGV3b3JkczoyM10gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MjYgZGF0YUNvZGV3b3JkczoyNF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczQ6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMiBkYXRhQ29kZXdvcmRzOjE1XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyOCBkYXRhQ29kZXdvcmRzOjE2XV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6MjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMjYsIEA1MCwgQDc0LCBAOTgsIEAxMjJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDozIGRhdGFDb2Rld29yZHM6MTE3XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMCBkYXRhQ29kZXdvcmRzOjExOF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDozIGRhdGFDb2Rld29yZHM6NDVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIzIGRhdGFDb2Rld29yZHM6NDZdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NCBkYXRhQ29kZXdvcmRzOjI0XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDozMSBkYXRhQ29kZXdvcmRzOjI1XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjExIGRhdGFDb2Rld29yZHM6MTVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjMxIGRhdGFDb2Rld29yZHM6MTZdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjoyOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOkBbQDYsIEAzMCwgQDU0LCBANzgsIEAxMDIsIEAxMjZdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo3IGRhdGFDb2Rld29yZHM6MTE2XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo3IGRhdGFDb2Rld29yZHM6MTE3XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIxIGRhdGFDb2Rld29yZHM6NDVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjcgZGF0YUNvZGV3b3Jkczo0Nl1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczM6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6MjNdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjM3IGRhdGFDb2Rld29yZHM6MjRdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTkgZGF0YUNvZGV3b3JkczoxNV0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MjYgZGF0YUNvZGV3b3JkczoxNl1dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjMwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDI2LCBANTIsIEA3OCwgQDEwNCwgQDEzMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjUgZGF0YUNvZGV3b3JkczoxMTVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEwIGRhdGFDb2Rld29yZHM6MTE2XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE5IGRhdGFDb2Rld29yZHM6NDddIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEwIGRhdGFDb2Rld29yZHM6NDhdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTUgZGF0YUNvZGV3b3JkczoyNF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MjUgZGF0YUNvZGV3b3JkczoyNV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczQ6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyMyBkYXRhQ29kZXdvcmRzOjE1XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyNSBkYXRhQ29kZXdvcmRzOjE2XV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6MzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMzAsIEA1NiwgQDgyLCBAMTA4LCBAMTM0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTMgZGF0YUNvZGV3b3JkczoxMTVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjMgZGF0YUNvZGV3b3JkczoxMTZdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MiBkYXRhQ29kZXdvcmRzOjQ2XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyOSBkYXRhQ29kZXdvcmRzOjQ3XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQyIGRhdGFDb2Rld29yZHM6MjRdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEgZGF0YUNvZGV3b3JkczoyNV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczQ6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyMyBkYXRhQ29kZXdvcmRzOjE1XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyOCBkYXRhQ29kZXdvcmRzOjE2XV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6MzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMzQsIEA2MCwgQDg2LCBAMTEyLCBAMTM4XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3M6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxNyBkYXRhQ29kZXdvcmRzOjExNV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMCBkYXRhQ29kZXdvcmRzOjQ2XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyMyBkYXRhQ29kZXdvcmRzOjQ3XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEwIGRhdGFDb2Rld29yZHM6MjRdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjM1IGRhdGFDb2Rld29yZHM6MjVdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTkgZGF0YUNvZGV3b3JkczoxNV0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MzUgZGF0YUNvZGV3b3JkczoxNl1dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjMzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDMwLCBANTgsIEA4NiwgQDExNCwgQDE0Ml0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE3IGRhdGFDb2Rld29yZHM6MTE1XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxIGRhdGFDb2Rld29yZHM6MTE2XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE0IGRhdGFDb2Rld29yZHM6NDZdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIxIGRhdGFDb2Rld29yZHM6NDddXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MjkgZGF0YUNvZGV3b3JkczoyNF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTkgZGF0YUNvZGV3b3JkczoyNV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczQ6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMSBkYXRhQ29kZXdvcmRzOjE1XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0NiBkYXRhQ29kZXdvcmRzOjE2XV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6MzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMzQsIEA2MiwgQDkwLCBAMTE4LCBAMTQ2XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTMgZGF0YUNvZGV3b3JkczoxMTVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjYgZGF0YUNvZGV3b3JkczoxMTZdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTQgZGF0YUNvZGV3b3Jkczo0Nl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MjMgZGF0YUNvZGV3b3Jkczo0N11dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczM6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0NCBkYXRhQ29kZXdvcmRzOjI0XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo3IGRhdGFDb2Rld29yZHM6MjVdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NTkgZGF0YUNvZGV3b3JkczoxNl0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MSBkYXRhQ29kZXdvcmRzOjE3XV1dLAorCisgICAgICAgICAgIFtaWFFSQ29kZVZlcnNpb24gWlhRUkNvZGVWZXJzaW9uV2l0aFZlcnNpb25OdW1iZXI6MzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVyczpAW0A2LCBAMzAsIEA1NCwgQDc4LCBAMTAyLCBAMTI2LCBAMTUwXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTIgZGF0YUNvZGV3b3JkczoxMjFdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjcgZGF0YUNvZGV3b3JkczoxMjJdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MyOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MjggZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTIgZGF0YUNvZGV3b3Jkczo0N10gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MjYgZGF0YUNvZGV3b3Jkczo0OF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczM6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDozOSBkYXRhQ29kZXdvcmRzOjI0XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxNCBkYXRhQ29kZXdvcmRzOjI1XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIyIGRhdGFDb2Rld29yZHM6MTVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQxIGRhdGFDb2Rld29yZHM6MTZdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjozNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOkBbQDYsIEAyNCwgQDUwLCBANzYsIEAxMDIsIEAxMjgsIEAxNTRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo2IGRhdGFDb2Rld29yZHM6MTIxXSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxNCBkYXRhQ29kZXdvcmRzOjEyMl1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo2IGRhdGFDb2Rld29yZHM6NDddIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjM0IGRhdGFDb2Rld29yZHM6NDhdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MzOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NDYgZGF0YUNvZGV3b3JkczoyNF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTAgZGF0YUNvZGV3b3JkczoyNV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczQ6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyIGRhdGFDb2Rld29yZHM6MTVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjY0IGRhdGFDb2Rld29yZHM6MTZdXV0sCisKKyAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjM3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOkBbQDYsIEAyOCwgQDU0LCBAODAsIEAxMDYsIEAxMzIsIEAxNThdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MTcgZGF0YUNvZGV3b3JkczoxMjJdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQgZGF0YUNvZGV3b3JkczoxMjNdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjI5IGRhdGFDb2Rld29yZHM6NDZdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE0IGRhdGFDb2Rld29yZHM6NDddXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQ5IGRhdGFDb2Rld29yZHM6MjRdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEwIGRhdGFDb2Rld29yZHM6MjVdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjI0IGRhdGFDb2Rld29yZHM6MTVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQ2IGRhdGFDb2Rld29yZHM6MTZdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjozOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOkBbQDYsIEAzMiwgQDU4LCBAODQsIEAxMTAsIEAxMzYsIEAxNjJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0IGRhdGFDb2Rld29yZHM6MTIyXSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxOCBkYXRhQ29kZXdvcmRzOjEyM11dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxMyBkYXRhQ29kZXdvcmRzOjQ2XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDozMiBkYXRhQ29kZXdvcmRzOjQ3XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQ4IGRhdGFDb2Rld29yZHM6MjRdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjE0IGRhdGFDb2Rld29yZHM6MjVdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NDIgZGF0YUNvZGV3b3JkczoxNV0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MzIgZGF0YUNvZGV3b3JkczoxNl1dXSwKKworICAgICAgICAgICBbWlhRUkNvZGVWZXJzaW9uIFpYUVJDb2RlVmVyc2lvbldpdGhWZXJzaW9uTnVtYmVyOjM5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50UGF0dGVybkNlbnRlcnM6QFtANiwgQDI2LCBANTQsIEA4MiwgQDExMCwgQDEzOCwgQDE2Nl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjIwIGRhdGFDb2Rld29yZHM6MTE3XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0IGRhdGFDb2Rld29yZHM6MTE4XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjI4IGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjQwIGRhdGFDb2Rld29yZHM6NDddIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjcgZGF0YUNvZGV3b3Jkczo0OF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczM6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDo0MyBkYXRhQ29kZXdvcmRzOjI0XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoyMiBkYXRhQ29kZXdvcmRzOjI1XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzNDpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjEwIGRhdGFDb2Rld29yZHM6MTVdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjY3IGRhdGFDb2Rld29yZHM6MTZdXV0sCisKKyAgICAgICAgICAgW1pYUVJDb2RlVmVyc2lvbiBaWFFSQ29kZVZlcnNpb25XaXRoVmVyc2lvbk51bWJlcjo0MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzOkBbQDYsIEAzMCwgQDU4LCBAODYsIEAxMTQsIEAxNDIsIEAxNzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazozMCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxOSBkYXRhQ29kZXdvcmRzOjExOF0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NiBkYXRhQ29kZXdvcmRzOjExOV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCbG9ja3MgZWNCbG9ja3NXaXRoRWNDb2Rld29yZHNQZXJCbG9jazoyOCBlY0Jsb2NrczE6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDoxOCBkYXRhQ29kZXdvcmRzOjQ3XSBlY0Jsb2NrczI6W1pYUVJDb2RlRUNCIGVjYldpdGhDb3VudDozMSBkYXRhQ29kZXdvcmRzOjQ4XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjQmxvY2tzMzpbWlhRUkNvZGVFQ0Jsb2NrcyBlY0Jsb2Nrc1dpdGhFY0NvZGV3b3Jkc1BlckJsb2NrOjMwIGVjQmxvY2tzMTpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjM0IGRhdGFDb2Rld29yZHM6MjRdIGVjQmxvY2tzMjpbWlhRUkNvZGVFQ0IgZWNiV2l0aENvdW50OjM0IGRhdGFDb2Rld29yZHM6MjVdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNCbG9ja3M0OltaWFFSQ29kZUVDQmxvY2tzIGVjQmxvY2tzV2l0aEVjQ29kZXdvcmRzUGVyQmxvY2s6MzAgZWNCbG9ja3MxOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6MjAgZGF0YUNvZGV3b3JkczoxNV0gZWNCbG9ja3MyOltaWFFSQ29kZUVDQiBlY2JXaXRoQ291bnQ6NjEgZGF0YUNvZGV3b3JkczoxNl1dXV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhBbGlnbm1lbnRQYXR0ZXJuLmggYi9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYQWxpZ25tZW50UGF0dGVybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YWEyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYQWxpZ25tZW50UGF0dGVybi5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnQuaCIKKworLyoqCisgKiBFbmNhcHN1bGF0ZXMgYW4gYWxpZ25tZW50IHBhdHRlcm4sIHdoaWNoIGFyZSB0aGUgc21hbGxlciBzcXVhcmUgcGF0dGVybnMgZm91bmQgaW4KKyAqIGFsbCBidXQgdGhlIHNpbXBsZXN0IFFSIENvZGVzLgorICovCisKK0BpbnRlcmZhY2UgWlhBbGlnbm1lbnRQYXR0ZXJuIDogWlhSZXN1bHRQb2ludAorCistIChpZClpbml0V2l0aFBvc1g6KGZsb2F0KXBvc1ggcG9zWTooZmxvYXQpcG9zWSBlc3RpbWF0ZWRNb2R1bGVTaXplOihmbG9hdCllc3RpbWF0ZWRNb2R1bGVTaXplOworLSAoQk9PTClhYm91dEVxdWFsczooZmxvYXQpbW9kdWxlU2l6ZSBpOihmbG9hdClpIGo6KGZsb2F0KWo7CistIChaWEFsaWdubWVudFBhdHRlcm4gKiljb21iaW5lRXN0aW1hdGVJOihmbG9hdClpIGo6KGZsb2F0KWogbmV3TW9kdWxlU2l6ZTooZmxvYXQpbmV3TW9kdWxlU2l6ZTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZXRlY3Rvci9aWEFsaWdubWVudFBhdHRlcm4ubSBiL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhBbGlnbm1lbnRQYXR0ZXJuLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2M2EwMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhBbGlnbm1lbnRQYXR0ZXJuLm0KQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhBbGlnbm1lbnRQYXR0ZXJuLmgiCisKK0BpbnRlcmZhY2UgWlhBbGlnbm1lbnRQYXR0ZXJuICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGZsb2F0IGVzdGltYXRlZE1vZHVsZVNpemU7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFpYQWxpZ25tZW50UGF0dGVybgorCistIChpZClpbml0V2l0aFBvc1g6KGZsb2F0KXBvc1ggcG9zWTooZmxvYXQpcG9zWSBlc3RpbWF0ZWRNb2R1bGVTaXplOihmbG9hdCllc3RpbWF0ZWRNb2R1bGVTaXplIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhYOnBvc1ggeTpwb3NZXSkgeworICAgIF9lc3RpbWF0ZWRNb2R1bGVTaXplID0gZXN0aW1hdGVkTW9kdWxlU2l6ZTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisvKioKKyAqIERldGVybWluZXMgaWYgdGhpcyBhbGlnbm1lbnQgcGF0dGVybiAiYWJvdXQgZXF1YWxzIiBhbiBhbGlnbm1lbnQgcGF0dGVybiBhdCB0aGUgc3RhdGVkCisgKiBwb3NpdGlvbiBhbmQgc2l6ZSAtLSBtZWFuaW5nLCBpdCBpcyBhdCBuZWFybHkgdGhlIHNhbWUgY2VudGVyIHdpdGggbmVhcmx5IHRoZSBzYW1lIHNpemUuCisgKi8KKy0gKEJPT0wpYWJvdXRFcXVhbHM6KGZsb2F0KW1vZHVsZVNpemUgaTooZmxvYXQpaSBqOihmbG9hdClqIHsKKyAgaWYgKGZhYnNmKGkgLSBzZWxmLnkpIDw9IG1vZHVsZVNpemUgJiYgZmFic2YoaiAtIHNlbGYueCkgPD0gbW9kdWxlU2l6ZSkgeworICAgIGZsb2F0IG1vZHVsZVNpemVEaWZmID0gZmFic2YobW9kdWxlU2l6ZSAtIHNlbGYuZXN0aW1hdGVkTW9kdWxlU2l6ZSk7CisgICAgcmV0dXJuIG1vZHVsZVNpemVEaWZmIDw9IDEuMGYgfHwgbW9kdWxlU2l6ZURpZmYgPD0gc2VsZi5lc3RpbWF0ZWRNb2R1bGVTaXplOworICB9CisKKyAgcmV0dXJuIE5POworfQorCisvKioKKyAqIENvbWJpbmVzIHRoaXMgb2JqZWN0J3MgY3VycmVudCBlc3RpbWF0ZSBvZiBhIGZpbmRlciBwYXR0ZXJuIHBvc2l0aW9uIGFuZCBtb2R1bGUgc2l6ZQorICogd2l0aCBhIG5ldyBlc3RpbWF0ZS4gSXQgcmV0dXJucyBhIG5ldyBGaW5kZXJQYXR0ZXJuIGNvbnRhaW5pbmcgYW4gYXZlcmFnZSBvZiB0aGUgdHdvLgorICovCistIChaWEFsaWdubWVudFBhdHRlcm4gKiljb21iaW5lRXN0aW1hdGVJOihmbG9hdClpIGo6KGZsb2F0KWogbmV3TW9kdWxlU2l6ZTooZmxvYXQpbmV3TW9kdWxlU2l6ZSB7CisgIGZsb2F0IGNvbWJpbmVkWCA9IChzZWxmLnggKyBqKSAvIDIuMGY7CisgIGZsb2F0IGNvbWJpbmVkWSA9IChzZWxmLnkgKyBpKSAvIDIuMGY7CisgIGZsb2F0IGNvbWJpbmVkTW9kdWxlU2l6ZSA9IChzZWxmLmVzdGltYXRlZE1vZHVsZVNpemUgKyBuZXdNb2R1bGVTaXplKSAvIDIuMGY7CisgIHJldHVybiBbW1pYQWxpZ25tZW50UGF0dGVybiBhbGxvY10gaW5pdFdpdGhQb3NYOmNvbWJpbmVkWCBwb3NZOmNvbWJpbmVkWSBlc3RpbWF0ZWRNb2R1bGVTaXplOmNvbWJpbmVkTW9kdWxlU2l6ZV07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLmggYi9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYQWxpZ25tZW50UGF0dGVybkZpbmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MDE1OTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYQWxpZ25tZW50UGF0dGVybkZpbmRlci5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBhdHRlbXB0cyB0byBmaW5kIGFsaWdubWVudCBwYXR0ZXJucyBpbiBhIFFSIENvZGUuIEFsaWdubWVudCBwYXR0ZXJucyBsb29rIGxpa2UgZmluZGVyCisgKiBwYXR0ZXJucyBidXQgYXJlIHNtYWxsZXIgYW5kIGFwcGVhciBhdCByZWd1bGFyIGludGVydmFscyB0aHJvdWdob3V0IHRoZSBpbWFnZS4KKyAqIAorICogQXQgdGhlIG1vbWVudCB0aGlzIG9ubHkgbG9va3MgZm9yIHRoZSBib3R0b20tcmlnaHQgYWxpZ25tZW50IHBhdHRlcm4uCisgKiAKKyAqIFRoaXMgaXMgbW9zdGx5IGEgc2ltcGxpZmllZCBjb3B5IG9mIHtAbGluayBGaW5kZXJQYXR0ZXJuRmluZGVyfS4gSXQgaXMgY29waWVkLAorICogcGFzdGVkIGFuZCBzdHJpcHBlZCBkb3duIGhlcmUgZm9yIG1heGltdW0gcGVyZm9ybWFuY2UgYnV0IGRvZXMgdW5mb3J0dW5hdGVseSBkdXBsaWNhdGUKKyAqIHNvbWUgY29kZS4KKyAqIAorICogVGhpcyBjbGFzcyBpcyB0aHJlYWQtc2FmZSBidXQgbm90IHJlZW50cmFudC4gRWFjaCB0aHJlYWQgbXVzdCBhbGxvY2F0ZSBpdHMgb3duIG9iamVjdC4KKyAqLworCitAY2xhc3MgWlhBbGlnbm1lbnRQYXR0ZXJuLCBaWEJpdE1hdHJpeDsKK0Bwcm90b2NvbCBaWFJlc3VsdFBvaW50Q2FsbGJhY2s7CisKK0BpbnRlcmZhY2UgWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyIDogTlNPYmplY3QKKworLSAoaWQpaW5pdFdpdGhJbWFnZTooWlhCaXRNYXRyaXggKilpbWFnZSBzdGFydFg6KGludClzdGFydFggc3RhcnRZOihpbnQpc3RhcnRZIHdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0IG1vZHVsZVNpemU6KGZsb2F0KW1vZHVsZVNpemUgcmVzdWx0UG9pbnRDYWxsYmFjazooaWQ8WlhSZXN1bHRQb2ludENhbGxiYWNrPilyZXN1bHRQb2ludENhbGxiYWNrOworLSAoWlhBbGlnbm1lbnRQYXR0ZXJuICopZmluZFdpdGhFcnJvcjooTlNFcnJvciAqKillcnJvcjsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZXRlY3Rvci9aWEFsaWdubWVudFBhdHRlcm5GaW5kZXIubSBiL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4MWVhNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLm0KQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQWxpZ25tZW50UGF0dGVybi5oIgorI2ltcG9ydCAiWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyLmgiCisjaW1wb3J0ICJaWEJpdE1hdHJpeC5oIgorI2ltcG9ydCAiWlhFcnJvcnMuaCIKKyNpbXBvcnQgIlpYUmVzdWx0UG9pbnRDYWxsYmFjay5oIgorCitAaW50ZXJmYWNlIFpYQWxpZ25tZW50UGF0dGVybkZpbmRlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWEJpdE1hdHJpeCAqaW1hZ2U7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU011dGFibGVBcnJheSAqcG9zc2libGVDZW50ZXJzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IHN0YXJ0WDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBzdGFydFk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgd2lkdGg7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgaGVpZ2h0OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZmxvYXQgbW9kdWxlU2l6ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCAqY3Jvc3NDaGVja1N0YXRlQ291bnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPFpYUmVzdWx0UG9pbnRDYWxsYmFjaz4gcmVzdWx0UG9pbnRDYWxsYmFjazsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhBbGlnbm1lbnRQYXR0ZXJuRmluZGVyCisKKy8qKgorICogQ3JlYXRlcyBhIGZpbmRlciB0aGF0IHdpbGwgbG9vayBpbiBhIHBvcnRpb24gb2YgdGhlIHdob2xlIGltYWdlLgorICovCistIChpZClpbml0V2l0aEltYWdlOihaWEJpdE1hdHJpeCAqKWltYWdlIHN0YXJ0WDooaW50KXN0YXJ0WCBzdGFydFk6KGludClzdGFydFkgd2lkdGg6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgbW9kdWxlU2l6ZTooZmxvYXQpbW9kdWxlU2l6ZSByZXN1bHRQb2ludENhbGxiYWNrOihpZDxaWFJlc3VsdFBvaW50Q2FsbGJhY2s+KXJlc3VsdFBvaW50Q2FsbGJhY2sgeworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9pbWFnZSA9IGltYWdlOworICAgIF9wb3NzaWJsZUNlbnRlcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6NV07CisgICAgX3N0YXJ0WCA9IHN0YXJ0WDsKKyAgICBfc3RhcnRZID0gc3RhcnRZOworICAgIF93aWR0aCA9IHdpZHRoOworICAgIF9oZWlnaHQgPSBoZWlnaHQ7CisgICAgX21vZHVsZVNpemUgPSBtb2R1bGVTaXplOworICAgIF9jcm9zc0NoZWNrU3RhdGVDb3VudCA9IChpbnQgKiltYWxsb2MoMyAqIHNpemVvZihpbnQpKTsKKyAgICBtZW1zZXQoX2Nyb3NzQ2hlY2tTdGF0ZUNvdW50LCAwLCAzICogc2l6ZW9mKGludCkpOworICAgIF9yZXN1bHRQb2ludENhbGxiYWNrID0gcmVzdWx0UG9pbnRDYWxsYmFjazsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MgeworICBpZiAoX2Nyb3NzQ2hlY2tTdGF0ZUNvdW50ICE9IE5VTEwpIHsKKyAgICBmcmVlKF9jcm9zc0NoZWNrU3RhdGVDb3VudCk7CisgICAgX2Nyb3NzQ2hlY2tTdGF0ZUNvdW50ID0gTlVMTDsKKyAgfQorfQorCisvKioKKyAqIFRoaXMgbWV0aG9kIGF0dGVtcHRzIHRvIGZpbmQgdGhlIGJvdHRvbS1yaWdodCBhbGlnbm1lbnQgcGF0dGVybiBpbiB0aGUgaW1hZ2UuIEl0IGlzIGEgYml0IG1lc3N5IHNpbmNlCisgKiBpdCdzIHByZXR0eSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhbmQgc28gaXMgd3JpdHRlbiB0byBiZSBmYXN0IGZvcmVtb3N0LgorICovCistIChaWEFsaWdubWVudFBhdHRlcm4gKilmaW5kV2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaW50IG1heEogPSBzZWxmLnN0YXJ0WCArIHNlbGYud2lkdGg7CisgIGludCBtaWRkbGVJID0gc2VsZi5zdGFydFkgKyAoc2VsZi5oZWlnaHQgPj4gMSk7CisgIGludCBzdGF0ZUNvdW50WzNdOworCisgIGZvciAoaW50IGlHZW4gPSAwOyBpR2VuIDwgc2VsZi5oZWlnaHQ7IGlHZW4rKykgeworICAgIGludCBpID0gbWlkZGxlSSArICgoaUdlbiAmIDB4MDEpID09IDAgPyAoaUdlbiArIDEpID4+IDEgOiAtKChpR2VuICsgMSkgPj4gMSkpOworICAgIHN0YXRlQ291bnRbMF0gPSAwOworICAgIHN0YXRlQ291bnRbMV0gPSAwOworICAgIHN0YXRlQ291bnRbMl0gPSAwOworICAgIGludCBqID0gc2VsZi5zdGFydFg7CisKKyAgICB3aGlsZSAoaiA8IG1heEogJiYgIVtzZWxmLmltYWdlIGdldFg6aiB5OmldKSB7CisgICAgICBqKys7CisgICAgfQorCisgICAgaW50IGN1cnJlbnRTdGF0ZSA9IDA7CisKKyAgICB3aGlsZSAoaiA8IG1heEopIHsKKyAgICAgIGlmIChbc2VsZi5pbWFnZSBnZXRYOmogeTppXSkgeworICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IDEpIHsKKyAgICAgICAgICBzdGF0ZUNvdW50W2N1cnJlbnRTdGF0ZV0rKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IDIpIHsKKyAgICAgICAgICAgIGlmIChbc2VsZiBmb3VuZFBhdHRlcm5Dcm9zczpzdGF0ZUNvdW50XSkgeworICAgICAgICAgICAgICBaWEFsaWdubWVudFBhdHRlcm4gKmNvbmZpcm1lZCA9IFtzZWxmIGhhbmRsZVBvc3NpYmxlQ2VudGVyOnN0YXRlQ291bnQgaTppIGo6al07CisgICAgICAgICAgICAgIGlmIChjb25maXJtZWQgIT0gbmlsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpcm1lZDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVDb3VudFswXSA9IHN0YXRlQ291bnRbMl07CisgICAgICAgICAgICBzdGF0ZUNvdW50WzFdID0gMTsKKyAgICAgICAgICAgIHN0YXRlQ291bnRbMl0gPSAwOworICAgICAgICAgICAgY3VycmVudFN0YXRlID0gMTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdGVDb3VudFsrK2N1cnJlbnRTdGF0ZV0rKzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChjdXJyZW50U3RhdGUgPT0gMSkgeworICAgICAgICAgIGN1cnJlbnRTdGF0ZSsrOworICAgICAgICB9CisgICAgICAgIHN0YXRlQ291bnRbY3VycmVudFN0YXRlXSsrOworICAgICAgfQorICAgICAgaisrOworICAgIH0KKworICAgIGlmIChbc2VsZiBmb3VuZFBhdHRlcm5Dcm9zczpzdGF0ZUNvdW50XSkgeworICAgICAgWlhBbGlnbm1lbnRQYXR0ZXJuICpjb25maXJtZWQgPSBbc2VsZiBoYW5kbGVQb3NzaWJsZUNlbnRlcjpzdGF0ZUNvdW50IGk6aSBqOm1heEpdOworICAgICAgaWYgKGNvbmZpcm1lZCAhPSBuaWwpIHsKKyAgICAgICAgcmV0dXJuIGNvbmZpcm1lZDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoW3NlbGYucG9zc2libGVDZW50ZXJzIGNvdW50XSA+IDApIHsKKyAgICByZXR1cm4gc2VsZi5wb3NzaWJsZUNlbnRlcnNbMF07CisgIH0KKyAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgcmV0dXJuIG5pbDsKK30KKworLyoqCisgKiBHaXZlbiBhIGNvdW50IG9mIGJsYWNrL3doaXRlL2JsYWNrIHBpeGVscyBqdXN0IHNlZW4gYW5kIGFuIGVuZCBwb3NpdGlvbiwKKyAqIGZpZ3VyZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBibGFjay93aGl0ZS9ibGFjayBydW4uCisgKi8KKy0gKGZsb2F0KWNlbnRlckZyb21FbmQ6KGludCAqKXN0YXRlQ291bnQgZW5kOihpbnQpZW5kIHsKKyAgcmV0dXJuIChmbG9hdCkoZW5kIC0gc3RhdGVDb3VudFsyXSkgLSBzdGF0ZUNvdW50WzFdIC8gMi4wZjsKK30KKworLSAoQk9PTClmb3VuZFBhdHRlcm5Dcm9zczooaW50ICopc3RhdGVDb3VudCB7CisgIGZsb2F0IG1heFZhcmlhbmNlID0gc2VsZi5tb2R1bGVTaXplIC8gMi4wZjsKKworICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgeworICAgIGlmIChmYWJzZihzZWxmLm1vZHVsZVNpemUgLSBzdGF0ZUNvdW50W2ldKSA+PSBtYXhWYXJpYW5jZSkgeworICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgfQorCisgIHJldHVybiBZRVM7Cit9CisKKy8qKgorICogQWZ0ZXIgYSBob3Jpem9udGFsIHNjYW4gZmluZHMgYSBwb3RlbnRpYWwgYWxpZ25tZW50IHBhdHRlcm4sIHRoaXMgbWV0aG9kCisgKiAiY3Jvc3MtY2hlY2tzIiBieSBzY2FubmluZyBkb3duIHZlcnRpY2FsbHkgdGhyb3VnaCB0aGUgY2VudGVyIG9mIHRoZSBwb3NzaWJsZQorICogYWxpZ25tZW50IHBhdHRlcm4gdG8gc2VlIGlmIHRoZSBzYW1lIHByb3BvcnRpb24gaXMgZGV0ZWN0ZWQuCisgKi8KKy0gKGZsb2F0KWNyb3NzQ2hlY2tWZXJ0aWNhbDooaW50KXN0YXJ0SSBjZW50ZXJKOihpbnQpY2VudGVySiBtYXhDb3VudDooaW50KW1heENvdW50IG9yaWdpbmFsU3RhdGVDb3VudFRvdGFsOihpbnQpb3JpZ2luYWxTdGF0ZUNvdW50VG90YWwgeworICBpbnQgbWF4SSA9IHNlbGYuaW1hZ2UuaGVpZ2h0OworICBpbnQgc3RhdGVDb3VudFszXSA9IHswLCAwLCAwfTsKKyAgaW50IGkgPSBzdGFydEk7CisKKyAgd2hpbGUgKGkgPj0gMCAmJiBbc2VsZi5pbWFnZSBnZXRYOmNlbnRlckogeTppXSAmJiBzdGF0ZUNvdW50WzFdIDw9IG1heENvdW50KSB7CisgICAgc3RhdGVDb3VudFsxXSsrOworICAgIGktLTsKKyAgfQorCisgIGlmIChpIDwgMCB8fCBzdGF0ZUNvdW50WzFdID4gbWF4Q291bnQpIHsKKyAgICByZXR1cm4gTkFOOworICB9CisKKyAgd2hpbGUgKGkgPj0gMCAmJiAhW3NlbGYuaW1hZ2UgZ2V0WDpjZW50ZXJKIHk6aV0gJiYgc3RhdGVDb3VudFswXSA8PSBtYXhDb3VudCkgeworICAgIHN0YXRlQ291bnRbMF0rKzsKKyAgICBpLS07CisgIH0KKworICBpZiAoc3RhdGVDb3VudFswXSA+IG1heENvdW50KSB7CisgICAgcmV0dXJuIE5BTjsKKyAgfQorICBpID0gc3RhcnRJICsgMTsKKworICB3aGlsZSAoaSA8IG1heEkgJiYgW3NlbGYuaW1hZ2UgZ2V0WDpjZW50ZXJKIHk6aV0gJiYgc3RhdGVDb3VudFsxXSA8PSBtYXhDb3VudCkgeworICAgIHN0YXRlQ291bnRbMV0rKzsKKyAgICBpKys7CisgIH0KKworICBpZiAoaSA9PSBtYXhJIHx8IHN0YXRlQ291bnRbMV0gPiBtYXhDb3VudCkgeworICAgIHJldHVybiBOQU47CisgIH0KKworICB3aGlsZSAoaSA8IG1heEkgJiYgIVtzZWxmLmltYWdlIGdldFg6Y2VudGVySiB5OmldICYmIHN0YXRlQ291bnRbMl0gPD0gbWF4Q291bnQpIHsKKyAgICBzdGF0ZUNvdW50WzJdKys7CisgICAgaSsrOworICB9CisKKyAgaWYgKHN0YXRlQ291bnRbMl0gPiBtYXhDb3VudCkgeworICAgIHJldHVybiBOQU47CisgIH0KKyAgaW50IHN0YXRlQ291bnRUb3RhbCA9IHN0YXRlQ291bnRbMF0gKyBzdGF0ZUNvdW50WzFdICsgc3RhdGVDb3VudFsyXTsKKyAgaWYgKDUgKiBhYnMoc3RhdGVDb3VudFRvdGFsIC0gb3JpZ2luYWxTdGF0ZUNvdW50VG90YWwpID49IDIgKiBvcmlnaW5hbFN0YXRlQ291bnRUb3RhbCkgeworICAgIHJldHVybiBOQU47CisgIH0KKyAgcmV0dXJuIFtzZWxmIGZvdW5kUGF0dGVybkNyb3NzOnN0YXRlQ291bnRdID8gW3NlbGYgY2VudGVyRnJvbUVuZDpzdGF0ZUNvdW50IGVuZDppXSA6IE5BTjsKK30KKworLyoqCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgaG9yaXpvbnRhbCBzY2FuIGZpbmRzIGEgcG9zc2libGUgYWxpZ25tZW50IHBhdHRlcm4uIEl0IHdpbGwKKyAqIGNyb3NzIGNoZWNrIHdpdGggYSB2ZXJ0aWNhbCBzY2FuLCBhbmQgaWYgc3VjY2Vzc2Z1bCwgd2lsbCBzZWUgaWYgdGhpcyBwYXR0ZXJuIGhhZCBiZWVuCisgKiBmb3VuZCBvbiBhIHByZXZpb3VzIGhvcml6b250YWwgc2Nhbi4gSWYgc28sIHdlIGNvbnNpZGVyIGl0IGNvbmZpcm1lZCBhbmQgY29uY2x1ZGUgd2UgaGF2ZQorICogZm91bmQgdGhlIGFsaWdubWVudCBwYXR0ZXJuLgorICovCistIChaWEFsaWdubWVudFBhdHRlcm4gKiloYW5kbGVQb3NzaWJsZUNlbnRlcjooaW50ICopc3RhdGVDb3VudCBpOihpbnQpaSBqOihpbnQpaiB7CisgIGludCBzdGF0ZUNvdW50VG90YWwgPSBzdGF0ZUNvdW50WzBdICsgc3RhdGVDb3VudFsxXSArIHN0YXRlQ291bnRbMl07CisgIGZsb2F0IGNlbnRlckogPSBbc2VsZiBjZW50ZXJGcm9tRW5kOnN0YXRlQ291bnQgZW5kOmpdOworICBmbG9hdCBjZW50ZXJJID0gW3NlbGYgY3Jvc3NDaGVja1ZlcnRpY2FsOmkgY2VudGVySjooaW50KWNlbnRlckogbWF4Q291bnQ6MiAqIHN0YXRlQ291bnRbMV0gb3JpZ2luYWxTdGF0ZUNvdW50VG90YWw6c3RhdGVDb3VudFRvdGFsXTsKKyAgaWYgKCFpc25hbihjZW50ZXJJKSkgeworICAgIGZsb2F0IGVzdGltYXRlZE1vZHVsZVNpemUgPSAoZmxvYXQpKHN0YXRlQ291bnRbMF0gKyBzdGF0ZUNvdW50WzFdICsgc3RhdGVDb3VudFsyXSkgLyAzLjBmOworICAgIGludCBtYXggPSAoaW50KXNlbGYucG9zc2libGVDZW50ZXJzLmNvdW50OworCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG1heDsgaW5kZXgrKykgeworICAgICAgWlhBbGlnbm1lbnRQYXR0ZXJuICpjZW50ZXIgPSBzZWxmLnBvc3NpYmxlQ2VudGVyc1tpbmRleF07CisgICAgICAvLyBMb29rIGZvciBhYm91dCB0aGUgc2FtZSBjZW50ZXIgYW5kIG1vZHVsZSBzaXplOgorICAgICAgaWYgKFtjZW50ZXIgYWJvdXRFcXVhbHM6ZXN0aW1hdGVkTW9kdWxlU2l6ZSBpOmNlbnRlckkgajpjZW50ZXJKXSkgeworICAgICAgICByZXR1cm4gW2NlbnRlciBjb21iaW5lRXN0aW1hdGVJOmNlbnRlckkgajpjZW50ZXJKIG5ld01vZHVsZVNpemU6ZXN0aW1hdGVkTW9kdWxlU2l6ZV07CisgICAgICB9CisgICAgfQorICAgIC8vIEhhZG4ndCBmb3VuZCB0aGlzIGJlZm9yZTsgc2F2ZSBpdAorICAgIFpYUmVzdWx0UG9pbnQgKnBvaW50ID0gW1taWEFsaWdubWVudFBhdHRlcm4gYWxsb2NdIGluaXRXaXRoUG9zWDpjZW50ZXJKIHBvc1k6Y2VudGVySSBlc3RpbWF0ZWRNb2R1bGVTaXplOmVzdGltYXRlZE1vZHVsZVNpemVdOworICAgIFtzZWxmLnBvc3NpYmxlQ2VudGVycyBhZGRPYmplY3Q6cG9pbnRdOworICAgIGlmIChzZWxmLnJlc3VsdFBvaW50Q2FsbGJhY2sgIT0gbmlsKSB7CisgICAgICBbc2VsZi5yZXN1bHRQb2ludENhbGxiYWNrIGZvdW5kUG9zc2libGVSZXN1bHRQb2ludDpwb2ludF07CisgICAgfQorICB9CisgIHJldHVybiBuaWw7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhGaW5kZXJQYXR0ZXJuRmluZGVyLmggYi9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYRmluZGVyUGF0dGVybkZpbmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMjgwODMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYRmluZGVyUGF0dGVybkZpbmRlci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBhdHRlbXB0cyB0byBmaW5kIGZpbmRlciBwYXR0ZXJucyBpbiBhIFFSIENvZGUuIEZpbmRlciBwYXR0ZXJucyBhcmUgdGhlIHNxdWFyZQorICogbWFya2VycyBhdCB0aHJlZSBjb3JuZXJzIG9mIGEgUVIgQ29kZS4KKyAqIAorICogVGhpcyBjbGFzcyBpcyB0aHJlYWQtc2FmZSBidXQgbm90IHJlZW50cmFudC4gRWFjaCB0aHJlYWQgbXVzdCBhbGxvY2F0ZSBpdHMgb3duIG9iamVjdC4KKyAqLworCitleHRlcm4gaW50IGNvbnN0IEZJTkRFUl9QQVRURVJOX01JTl9TS0lQOworZXh0ZXJuIGludCBjb25zdCBGSU5ERVJfUEFUVEVSTl9NQVhfTU9EVUxFUzsKKworQGNsYXNzIFpYQml0TWF0cml4LCBaWERlY29kZUhpbnRzLCBaWEZpbmRlclBhdHRlcm5JbmZvOworQHByb3RvY29sIFpYUmVzdWx0UG9pbnRDYWxsYmFjazsKKworQGludGVyZmFjZSBaWEZpbmRlclBhdHRlcm5GaW5kZXIgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgWlhCaXRNYXRyaXggKmltYWdlOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIE5TTXV0YWJsZUFycmF5ICpwb3NzaWJsZUNlbnRlcnM7CisKKy0gKGlkKWluaXRXaXRoSW1hZ2U6KFpYQml0TWF0cml4ICopaW1hZ2U7CistIChpZClpbml0V2l0aEltYWdlOihaWEJpdE1hdHJpeCAqKWltYWdlIHJlc3VsdFBvaW50Q2FsbGJhY2s6KGlkPFpYUmVzdWx0UG9pbnRDYWxsYmFjaz4pcmVzdWx0UG9pbnRDYWxsYmFjazsKKy0gKFpYRmluZGVyUGF0dGVybkluZm8gKilmaW5kOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisrIChCT09MKWZvdW5kUGF0dGVybkNyb3NzOihpbnRbXSlzdGF0ZUNvdW50OworLSAoQk9PTCloYW5kbGVQb3NzaWJsZUNlbnRlcjooaW50W10pc3RhdGVDb3VudCBpOihpbnQpaSBqOihpbnQpajsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZXRlY3Rvci9aWEZpbmRlclBhdHRlcm5GaW5kZXIubSBiL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhGaW5kZXJQYXR0ZXJuRmluZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4MmFjYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhGaW5kZXJQYXR0ZXJuRmluZGVyLm0KQEAgLTAsMCArMSw0ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0TWF0cml4LmgiCisjaW1wb3J0ICJaWERlY29kZUhpbnRzLmgiCisjaW1wb3J0ICJaWEVycm9ycy5oIgorI2ltcG9ydCAiWlhGaW5kZXJQYXR0ZXJuRmluZGVyLmgiCisjaW1wb3J0ICJaWEZpbmRlclBhdHRlcm5JbmZvLmgiCisjaW1wb3J0ICJaWE9uZURSZWFkZXIuaCIKKyNpbXBvcnQgIlpYUVJDb2RlRmluZGVyUGF0dGVybi5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludC5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludENhbGxiYWNrLmgiCisKK2ludCBjb25zdCBDRU5URVJfUVVPUlVNID0gMjsKK2ludCBjb25zdCBGSU5ERVJfUEFUVEVSTl9NSU5fU0tJUCA9IDM7CitpbnQgY29uc3QgRklOREVSX1BBVFRFUk5fTUFYX01PRFVMRVMgPSA1NzsKKworQGludGVyZmFjZSBaWEZpbmRlclBhdHRlcm5GaW5kZXIgKCkKKworTlNJbnRlZ2VyIGNlbnRlckNvbXBhcmUoaWQgY2VudGVyMSwgaWQgY2VudGVyMiwgdm9pZCAqY29udGV4dCk7CitOU0ludGVnZXIgZnVydGhlc3RGcm9tQXZlcmFnZUNvbXBhcmUoaWQgY2VudGVyMSwgaWQgY2VudGVyMiwgdm9pZCAqY29udGV4dCk7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIEJPT0wgaGFzU2tpcHBlZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8WlhSZXN1bHRQb2ludENhbGxiYWNrPiByZXN1bHRQb2ludENhbGxiYWNrOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlQXJyYXkgKnBvc3NpYmxlQ2VudGVyczsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhGaW5kZXJQYXR0ZXJuRmluZGVyCisKKy8qKgorICogQ3JlYXRlcyBhIGZpbmRlciB0aGF0IHdpbGwgc2VhcmNoIHRoZSBpbWFnZSBmb3IgdGhyZWUgZmluZGVyIHBhdHRlcm5zLgorICovCistIChpZClpbml0V2l0aEltYWdlOihaWEJpdE1hdHJpeCAqKWltYWdlIHsKKyAgcmV0dXJuIFtzZWxmIGluaXRXaXRoSW1hZ2U6aW1hZ2UgcmVzdWx0UG9pbnRDYWxsYmFjazpuaWxdOworfQorCistIChpZClpbml0V2l0aEltYWdlOihaWEJpdE1hdHJpeCAqKWltYWdlIHJlc3VsdFBvaW50Q2FsbGJhY2s6KGlkPFpYUmVzdWx0UG9pbnRDYWxsYmFjaz4pcmVzdWx0UG9pbnRDYWxsYmFjayB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2ltYWdlID0gaW1hZ2U7CisgICAgX3Bvc3NpYmxlQ2VudGVycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgX3Jlc3VsdFBvaW50Q2FsbGJhY2sgPSByZXN1bHRQb2ludENhbGxiYWNrOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFpYRmluZGVyUGF0dGVybkluZm8gKilmaW5kOihaWERlY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBCT09MIHRyeUhhcmRlciA9IGhpbnRzICE9IG5pbCAmJiBoaW50cy50cnlIYXJkZXI7CisgIGludCBtYXhJID0gc2VsZi5pbWFnZS5oZWlnaHQ7CisgIGludCBtYXhKID0gc2VsZi5pbWFnZS53aWR0aDsKKyAgaW50IGlTa2lwID0gKDMgKiBtYXhJKSAvICg0ICogRklOREVSX1BBVFRFUk5fTUFYX01PRFVMRVMpOworICBpZiAoaVNraXAgPCBGSU5ERVJfUEFUVEVSTl9NSU5fU0tJUCB8fCB0cnlIYXJkZXIpIHsKKyAgICBpU2tpcCA9IEZJTkRFUl9QQVRURVJOX01JTl9TS0lQOworICB9CisKKyAgQk9PTCBkb25lID0gTk87CisgIGludCBzdGF0ZUNvdW50WzVdOworICBmb3IgKGludCBpID0gaVNraXAgLSAxOyBpIDwgbWF4SSAmJiAhZG9uZTsgaSArPSBpU2tpcCkgeworICAgIHN0YXRlQ291bnRbMF0gPSAwOworICAgIHN0YXRlQ291bnRbMV0gPSAwOworICAgIHN0YXRlQ291bnRbMl0gPSAwOworICAgIHN0YXRlQ291bnRbM10gPSAwOworICAgIHN0YXRlQ291bnRbNF0gPSAwOworICAgIGludCBjdXJyZW50U3RhdGUgPSAwOworCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtYXhKOyBqKyspIHsKKyAgICAgIGlmIChbc2VsZi5pbWFnZSBnZXRYOmogeTppXSkgeworICAgICAgICBpZiAoKGN1cnJlbnRTdGF0ZSAmIDEpID09IDEpIHsKKyAgICAgICAgICBjdXJyZW50U3RhdGUrKzsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZUNvdW50W2N1cnJlbnRTdGF0ZV0rKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgoY3VycmVudFN0YXRlICYgMSkgPT0gMCkgeworICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUgPT0gNCkgeworICAgICAgICAgICAgaWYgKFtaWEZpbmRlclBhdHRlcm5GaW5kZXIgZm91bmRQYXR0ZXJuQ3Jvc3M6c3RhdGVDb3VudF0pIHsKKyAgICAgICAgICAgICAgQk9PTCBjb25maXJtZWQgPSBbc2VsZiBoYW5kbGVQb3NzaWJsZUNlbnRlcjpzdGF0ZUNvdW50IGk6aSBqOmpdOworICAgICAgICAgICAgICBpZiAoY29uZmlybWVkKSB7CisgICAgICAgICAgICAgICAgaVNraXAgPSAyOworICAgICAgICAgICAgICAgIGlmIChzZWxmLmhhc1NraXBwZWQpIHsKKyAgICAgICAgICAgICAgICAgIGRvbmUgPSBbc2VsZiBoYXZlTXVsdGlwbHlDb25maXJtZWRDZW50ZXJzXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgaW50IHJvd1NraXAgPSBbc2VsZiBmaW5kUm93U2tpcF07CisgICAgICAgICAgICAgICAgICBpZiAocm93U2tpcCA+IHN0YXRlQ291bnRbMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgaSArPSByb3dTa2lwIC0gc3RhdGVDb3VudFsyXSAtIGlTa2lwOworICAgICAgICAgICAgICAgICAgICBqID0gbWF4SiAtIDE7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRlQ291bnRbMF0gPSBzdGF0ZUNvdW50WzJdOworICAgICAgICAgICAgICAgIHN0YXRlQ291bnRbMV0gPSBzdGF0ZUNvdW50WzNdOworICAgICAgICAgICAgICAgIHN0YXRlQ291bnRbMl0gPSBzdGF0ZUNvdW50WzRdOworICAgICAgICAgICAgICAgIHN0YXRlQ291bnRbM10gPSAxOworICAgICAgICAgICAgICAgIHN0YXRlQ291bnRbNF0gPSAwOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IDM7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gMDsKKyAgICAgICAgICAgICAgc3RhdGVDb3VudFswXSA9IDA7CisgICAgICAgICAgICAgIHN0YXRlQ291bnRbMV0gPSAwOworICAgICAgICAgICAgICBzdGF0ZUNvdW50WzJdID0gMDsKKyAgICAgICAgICAgICAgc3RhdGVDb3VudFszXSA9IDA7CisgICAgICAgICAgICAgIHN0YXRlQ291bnRbNF0gPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgc3RhdGVDb3VudFswXSA9IHN0YXRlQ291bnRbMl07CisgICAgICAgICAgICAgIHN0YXRlQ291bnRbMV0gPSBzdGF0ZUNvdW50WzNdOworICAgICAgICAgICAgICBzdGF0ZUNvdW50WzJdID0gc3RhdGVDb3VudFs0XTsKKyAgICAgICAgICAgICAgc3RhdGVDb3VudFszXSA9IDE7CisgICAgICAgICAgICAgIHN0YXRlQ291bnRbNF0gPSAwOworICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSAzOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0ZUNvdW50WysrY3VycmVudFN0YXRlXSsrOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzdGF0ZUNvdW50W2N1cnJlbnRTdGF0ZV0rKzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmIChbWlhGaW5kZXJQYXR0ZXJuRmluZGVyIGZvdW5kUGF0dGVybkNyb3NzOnN0YXRlQ291bnRdKSB7CisgICAgICBCT09MIGNvbmZpcm1lZCA9IFtzZWxmIGhhbmRsZVBvc3NpYmxlQ2VudGVyOnN0YXRlQ291bnQgaTppIGo6bWF4Sl07CisgICAgICBpZiAoY29uZmlybWVkKSB7CisgICAgICAgIGlTa2lwID0gc3RhdGVDb3VudFswXTsKKyAgICAgICAgaWYgKHNlbGYuaGFzU2tpcHBlZCkgeworICAgICAgICAgIGRvbmUgPSBbc2VsZiBoYXZlTXVsdGlwbHlDb25maXJtZWRDZW50ZXJzXTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIE5TTXV0YWJsZUFycmF5ICpwYXR0ZXJuSW5mbyA9IFtzZWxmIHNlbGVjdEJlc3RQYXR0ZXJuc107CisgIGlmICghcGF0dGVybkluZm8pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgW1pYUmVzdWx0UG9pbnQgb3JkZXJCZXN0UGF0dGVybnM6cGF0dGVybkluZm9dOworICByZXR1cm4gW1taWEZpbmRlclBhdHRlcm5JbmZvIGFsbG9jXSBpbml0V2l0aFBhdHRlcm5DZW50ZXJzOnBhdHRlcm5JbmZvXTsKK30KKworLyoqCisgKiBHaXZlbiBhIGNvdW50IG9mIGJsYWNrL3doaXRlL2JsYWNrL3doaXRlL2JsYWNrIHBpeGVscyBqdXN0IHNlZW4gYW5kIGFuIGVuZCBwb3NpdGlvbiwKKyAqIGZpZ3VyZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBydW4uCisgKi8KKy0gKGZsb2F0KWNlbnRlckZyb21FbmQ6KGludCAqKXN0YXRlQ291bnQgZW5kOihpbnQpZW5kIHsKKyAgcmV0dXJuIChmbG9hdCkoZW5kIC0gc3RhdGVDb3VudFs0XSAtIHN0YXRlQ291bnRbM10pIC0gc3RhdGVDb3VudFsyXSAvIDIuMGY7Cit9CisKKysgKEJPT0wpZm91bmRQYXR0ZXJuQ3Jvc3M6KGludFtdKXN0YXRlQ291bnQgeworICBpbnQgdG90YWxNb2R1bGVTaXplID0gMDsKKworICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgeworICAgIGludCBjb3VudCA9IHN0YXRlQ291bnRbaV07CisgICAgaWYgKGNvdW50ID09IDApIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgdG90YWxNb2R1bGVTaXplICs9IGNvdW50OworICB9CisKKyAgaWYgKHRvdGFsTW9kdWxlU2l6ZSA8IDcpIHsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgaW50IG1vZHVsZVNpemUgPSAodG90YWxNb2R1bGVTaXplIDw8IElOVEVHRVJfTUFUSF9TSElGVCkgLyA3OworICBpbnQgbWF4VmFyaWFuY2UgPSBtb2R1bGVTaXplIC8gMjsKKyAgcmV0dXJuIGFicyhtb2R1bGVTaXplIC0gKHN0YXRlQ291bnRbMF0gPDwgSU5URUdFUl9NQVRIX1NISUZUKSkgPCBtYXhWYXJpYW5jZSAmJgorICAgIGFicyhtb2R1bGVTaXplIC0gKHN0YXRlQ291bnRbMV0gPDwgSU5URUdFUl9NQVRIX1NISUZUKSkgPCBtYXhWYXJpYW5jZSAmJgorICAgIGFicygzICogbW9kdWxlU2l6ZSAtIChzdGF0ZUNvdW50WzJdIDw8IElOVEVHRVJfTUFUSF9TSElGVCkpIDwgMyAqIG1heFZhcmlhbmNlICYmCisgICAgYWJzKG1vZHVsZVNpemUgLSAoc3RhdGVDb3VudFszXSA8PCBJTlRFR0VSX01BVEhfU0hJRlQpKSA8IG1heFZhcmlhbmNlICYmCisgICAgYWJzKG1vZHVsZVNpemUgLSAoc3RhdGVDb3VudFs0XSA8PCBJTlRFR0VSX01BVEhfU0hJRlQpKSA8IG1heFZhcmlhbmNlOworfQorCisvKioKKyAqIEFmdGVyIGEgaG9yaXpvbnRhbCBzY2FuIGZpbmRzIGEgcG90ZW50aWFsIGZpbmRlciBwYXR0ZXJuLCB0aGlzIG1ldGhvZAorICogImNyb3NzLWNoZWNrcyIgYnkgc2Nhbm5pbmcgZG93biB2ZXJ0aWNhbGx5IHRocm91Z2ggdGhlIGNlbnRlciBvZiB0aGUgcG9zc2libGUKKyAqIGZpbmRlciBwYXR0ZXJuIHRvIHNlZSBpZiB0aGUgc2FtZSBwcm9wb3J0aW9uIGlzIGRldGVjdGVkLgorICovCistIChmbG9hdCljcm9zc0NoZWNrVmVydGljYWw6KGludClzdGFydEkgY2VudGVySjooaW50KWNlbnRlckogbWF4Q291bnQ6KGludCltYXhDb3VudCBvcmlnaW5hbFN0YXRlQ291bnRUb3RhbDooaW50KW9yaWdpbmFsU3RhdGVDb3VudFRvdGFsIHsKKyAgaW50IG1heEkgPSBzZWxmLmltYWdlLmhlaWdodDsKKyAgaW50IHN0YXRlQ291bnRbNV0gPSB7MCwgMCwgMCwgMCwgMH07CisKKyAgaW50IGkgPSBzdGFydEk7CisgIHdoaWxlIChpID49IDAgJiYgW3NlbGYuaW1hZ2UgZ2V0WDpjZW50ZXJKIHk6aV0pIHsKKyAgICBzdGF0ZUNvdW50WzJdKys7CisgICAgaS0tOworICB9CisgIGlmIChpIDwgMCkgeworICAgIHJldHVybiBOQU47CisgIH0KKyAgd2hpbGUgKGkgPj0gMCAmJiAhW3NlbGYuaW1hZ2UgZ2V0WDpjZW50ZXJKIHk6aV0gJiYgc3RhdGVDb3VudFsxXSA8PSBtYXhDb3VudCkgeworICAgIHN0YXRlQ291bnRbMV0rKzsKKyAgICBpLS07CisgIH0KKyAgaWYgKGkgPCAwIHx8IHN0YXRlQ291bnRbMV0gPiBtYXhDb3VudCkgeworICAgIHJldHVybiBOQU47CisgIH0KKyAgd2hpbGUgKGkgPj0gMCAmJiBbc2VsZi5pbWFnZSBnZXRYOmNlbnRlckogeTppXSAmJiBzdGF0ZUNvdW50WzBdIDw9IG1heENvdW50KSB7CisgICAgc3RhdGVDb3VudFswXSsrOworICAgIGktLTsKKyAgfQorICBpZiAoc3RhdGVDb3VudFswXSA+IG1heENvdW50KSB7CisgICAgcmV0dXJuIE5BTjsKKyAgfQorCisgIGkgPSBzdGFydEkgKyAxOworICB3aGlsZSAoaSA8IG1heEkgJiYgW3NlbGYuaW1hZ2UgZ2V0WDpjZW50ZXJKIHk6aV0pIHsKKyAgICBzdGF0ZUNvdW50WzJdKys7CisgICAgaSsrOworICB9CisgIGlmIChpID09IG1heEkpIHsKKyAgICByZXR1cm4gTkFOOworICB9CisgIHdoaWxlIChpIDwgbWF4SSAmJiAhW3NlbGYuaW1hZ2UgZ2V0WDpjZW50ZXJKIHk6aV0gJiYgc3RhdGVDb3VudFszXSA8IG1heENvdW50KSB7CisgICAgc3RhdGVDb3VudFszXSsrOworICAgIGkrKzsKKyAgfQorICBpZiAoaSA9PSBtYXhJIHx8IHN0YXRlQ291bnRbM10gPj0gbWF4Q291bnQpIHsKKyAgICByZXR1cm4gTkFOOworICB9CisgIHdoaWxlIChpIDwgbWF4SSAmJiBbc2VsZi5pbWFnZSBnZXRYOmNlbnRlckogeTppXSAmJiBzdGF0ZUNvdW50WzRdIDwgbWF4Q291bnQpIHsKKyAgICBzdGF0ZUNvdW50WzRdKys7CisgICAgaSsrOworICB9CisgIGlmIChzdGF0ZUNvdW50WzRdID49IG1heENvdW50KSB7CisgICAgcmV0dXJuIE5BTjsKKyAgfQorCisgIGludCBzdGF0ZUNvdW50VG90YWwgPSBzdGF0ZUNvdW50WzBdICsgc3RhdGVDb3VudFsxXSArIHN0YXRlQ291bnRbMl0gKyBzdGF0ZUNvdW50WzNdICsgc3RhdGVDb3VudFs0XTsKKyAgaWYgKDUgKiBhYnMoc3RhdGVDb3VudFRvdGFsIC0gb3JpZ2luYWxTdGF0ZUNvdW50VG90YWwpID49IDIgKiBvcmlnaW5hbFN0YXRlQ291bnRUb3RhbCkgeworICAgIHJldHVybiBOQU47CisgIH0KKyAgcmV0dXJuIFtaWEZpbmRlclBhdHRlcm5GaW5kZXIgZm91bmRQYXR0ZXJuQ3Jvc3M6c3RhdGVDb3VudF0gPyBbc2VsZiBjZW50ZXJGcm9tRW5kOnN0YXRlQ291bnQgZW5kOmldIDogTkFOOworfQorCisvKioKKyAqIExpa2UgY3Jvc3NDaGVja1ZlcnRpY2FsLCBhbmQgaW4gZmFjdCBpcyBiYXNpY2FsbHkgaWRlbnRpY2FsLAorICogZXhjZXB0IGl0IHJlYWRzIGhvcml6b250YWxseSBpbnN0ZWFkIG9mIHZlcnRpY2FsbHkuIFRoaXMgaXMgdXNlZCB0byBjcm9zcy1jcm9zcworICogY2hlY2sgYSB2ZXJ0aWNhbCBjcm9zcyBjaGVjayBhbmQgbG9jYXRlIHRoZSByZWFsIGNlbnRlciBvZiB0aGUgYWxpZ25tZW50IHBhdHRlcm4uCisgKi8KKy0gKGZsb2F0KWNyb3NzQ2hlY2tIb3Jpem9udGFsOihpbnQpc3RhcnRKIGNlbnRlckk6KGludCljZW50ZXJJIG1heENvdW50OihpbnQpbWF4Q291bnQgb3JpZ2luYWxTdGF0ZUNvdW50VG90YWw6KGludClvcmlnaW5hbFN0YXRlQ291bnRUb3RhbCB7CisgIGludCBtYXhKID0gc2VsZi5pbWFnZS53aWR0aDsKKyAgaW50IHN0YXRlQ291bnRbNV0gPSB7MCwgMCwgMCwgMCwgMH07CisKKyAgaW50IGogPSBzdGFydEo7CisgIHdoaWxlIChqID49IDAgJiYgW3NlbGYuaW1hZ2UgZ2V0WDpqIHk6Y2VudGVySV0pIHsKKyAgICBzdGF0ZUNvdW50WzJdKys7CisgICAgai0tOworICB9CisgIGlmIChqIDwgMCkgeworICAgIHJldHVybiBOQU47CisgIH0KKyAgd2hpbGUgKGogPj0gMCAmJiAhW3NlbGYuaW1hZ2UgZ2V0WDpqIHk6Y2VudGVySV0gJiYgc3RhdGVDb3VudFsxXSA8PSBtYXhDb3VudCkgeworICAgIHN0YXRlQ291bnRbMV0rKzsKKyAgICBqLS07CisgIH0KKyAgaWYgKGogPCAwIHx8IHN0YXRlQ291bnRbMV0gPiBtYXhDb3VudCkgeworICAgIHJldHVybiBOQU47CisgIH0KKyAgd2hpbGUgKGogPj0gMCAmJiBbc2VsZi5pbWFnZSBnZXRYOmogeTpjZW50ZXJJXSAmJiBzdGF0ZUNvdW50WzBdIDw9IG1heENvdW50KSB7CisgICAgc3RhdGVDb3VudFswXSsrOworICAgIGotLTsKKyAgfQorICBpZiAoc3RhdGVDb3VudFswXSA+IG1heENvdW50KSB7CisgICAgcmV0dXJuIE5BTjsKKyAgfQorCisgIGogPSBzdGFydEogKyAxOworICB3aGlsZSAoaiA8IG1heEogJiYgW3NlbGYuaW1hZ2UgZ2V0WDpqIHk6Y2VudGVySV0pIHsKKyAgICBzdGF0ZUNvdW50WzJdKys7CisgICAgaisrOworICB9CisgIGlmIChqID09IG1heEopIHsKKyAgICByZXR1cm4gTkFOOworICB9CisgIHdoaWxlIChqIDwgbWF4SiAmJiAhW3NlbGYuaW1hZ2UgZ2V0WDpqIHk6Y2VudGVySV0gJiYgc3RhdGVDb3VudFszXSA8IG1heENvdW50KSB7CisgICAgc3RhdGVDb3VudFszXSsrOworICAgIGorKzsKKyAgfQorICBpZiAoaiA9PSBtYXhKIHx8IHN0YXRlQ291bnRbM10gPj0gbWF4Q291bnQpIHsKKyAgICByZXR1cm4gTkFOOworICB9CisgIHdoaWxlIChqIDwgbWF4SiAmJiBbc2VsZi5pbWFnZSBnZXRYOmogeTpjZW50ZXJJXSAmJiBzdGF0ZUNvdW50WzRdIDwgbWF4Q291bnQpIHsKKyAgICBzdGF0ZUNvdW50WzRdKys7CisgICAgaisrOworICB9CisgIGlmIChzdGF0ZUNvdW50WzRdID49IG1heENvdW50KSB7CisgICAgcmV0dXJuIE5BTjsKKyAgfQorCisgIGludCBzdGF0ZUNvdW50VG90YWwgPSBzdGF0ZUNvdW50WzBdICsgc3RhdGVDb3VudFsxXSArIHN0YXRlQ291bnRbMl0gKyBzdGF0ZUNvdW50WzNdICsgc3RhdGVDb3VudFs0XTsKKyAgaWYgKDUgKiBhYnMoc3RhdGVDb3VudFRvdGFsIC0gb3JpZ2luYWxTdGF0ZUNvdW50VG90YWwpID49IG9yaWdpbmFsU3RhdGVDb3VudFRvdGFsKSB7CisgICAgcmV0dXJuIE5BTjsKKyAgfQorCisgIHJldHVybiBbWlhGaW5kZXJQYXR0ZXJuRmluZGVyIGZvdW5kUGF0dGVybkNyb3NzOnN0YXRlQ291bnRdID8gW3NlbGYgY2VudGVyRnJvbUVuZDpzdGF0ZUNvdW50IGVuZDpqXSA6IE5BTjsKK30KKworCisvKioKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBob3Jpem9udGFsIHNjYW4gZmluZHMgYSBwb3NzaWJsZSBhbGlnbm1lbnQgcGF0dGVybi4gSXQgd2lsbAorICogY3Jvc3MgY2hlY2sgd2l0aCBhIHZlcnRpY2FsIHNjYW4sIGFuZCBpZiBzdWNjZXNzZnVsLCB3aWxsLCBhaCwgY3Jvc3MtY3Jvc3MtY2hlY2sKKyAqIHdpdGggYW5vdGhlciBob3Jpem9udGFsIHNjYW4uIFRoaXMgaXMgbmVlZGVkIHByaW1hcmlseSB0byBsb2NhdGUgdGhlIHJlYWwgaG9yaXpvbnRhbAorICogY2VudGVyIG9mIHRoZSBwYXR0ZXJuIGluIGNhc2VzIG9mIGV4dHJlbWUgc2tldy4KKyAqIAorICogSWYgdGhhdCBzdWNjZWVkcyB0aGUgZmluZGVyIHBhdHRlcm4gbG9jYXRpb24gaXMgYWRkZWQgdG8gYSBsaXN0IHRoYXQgdHJhY2tzCisgKiB0aGUgbnVtYmVyIG9mIHRpbWVzIGVhY2ggbG9jYXRpb24gaGFzIGJlZW4gbmVhcmx5LW1hdGNoZWQgYXMgYSBmaW5kZXIgcGF0dGVybi4KKyAqIEVhY2ggYWRkaXRpb25hbCBmaW5kIGlzIG1vcmUgZXZpZGVuY2UgdGhhdCB0aGUgbG9jYXRpb24gaXMgaW4gZmFjdCBhIGZpbmRlcgorICogcGF0dGVybiBjZW50ZXIKKyAqLworLSAoQk9PTCloYW5kbGVQb3NzaWJsZUNlbnRlcjooaW50ICopc3RhdGVDb3VudCBpOihpbnQpaSBqOihpbnQpaiB7CisgIGludCBzdGF0ZUNvdW50VG90YWwgPSBzdGF0ZUNvdW50WzBdICsgc3RhdGVDb3VudFsxXSArIHN0YXRlQ291bnRbMl0gKyBzdGF0ZUNvdW50WzNdICsgc3RhdGVDb3VudFs0XTsKKyAgZmxvYXQgY2VudGVySiA9IFtzZWxmIGNlbnRlckZyb21FbmQ6c3RhdGVDb3VudCBlbmQ6al07CisgIGZsb2F0IGNlbnRlckkgPSBbc2VsZiBjcm9zc0NoZWNrVmVydGljYWw6aSBjZW50ZXJKOihpbnQpY2VudGVySiBtYXhDb3VudDpzdGF0ZUNvdW50WzJdIG9yaWdpbmFsU3RhdGVDb3VudFRvdGFsOnN0YXRlQ291bnRUb3RhbF07CisgIGlmICghaXNuYW4oY2VudGVySSkpIHsKKyAgICBjZW50ZXJKID0gW3NlbGYgY3Jvc3NDaGVja0hvcml6b250YWw6KGludCljZW50ZXJKIGNlbnRlckk6KGludCljZW50ZXJJIG1heENvdW50OnN0YXRlQ291bnRbMl0gb3JpZ2luYWxTdGF0ZUNvdW50VG90YWw6c3RhdGVDb3VudFRvdGFsXTsKKyAgICBpZiAoIWlzbmFuKGNlbnRlckopKSB7CisgICAgICBmbG9hdCBlc3RpbWF0ZWRNb2R1bGVTaXplID0gKGZsb2F0KXN0YXRlQ291bnRUb3RhbCAvIDcuMGY7CisgICAgICBCT09MIGZvdW5kID0gTk87CisgICAgICBpbnQgbWF4ID0gKGludClbc2VsZi5wb3NzaWJsZUNlbnRlcnMgY291bnRdOworICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG1heDsgaW5kZXgrKykgeworICAgICAgICBaWFFSQ29kZUZpbmRlclBhdHRlcm4gKmNlbnRlciA9IHNlbGYucG9zc2libGVDZW50ZXJzW2luZGV4XTsKKyAgICAgICAgaWYgKFtjZW50ZXIgYWJvdXRFcXVhbHM6ZXN0aW1hdGVkTW9kdWxlU2l6ZSBpOmNlbnRlckkgajpjZW50ZXJKXSkgeworICAgICAgICAgIHNlbGYucG9zc2libGVDZW50ZXJzW2luZGV4XSA9IFtjZW50ZXIgY29tYmluZUVzdGltYXRlSTpjZW50ZXJJIGo6Y2VudGVySiBuZXdNb2R1bGVTaXplOmVzdGltYXRlZE1vZHVsZVNpemVdOworICAgICAgICAgIGZvdW5kID0gWUVTOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgWlhSZXN1bHRQb2ludCAqcG9pbnQgPSBbW1pYUVJDb2RlRmluZGVyUGF0dGVybiBhbGxvY10gaW5pdFdpdGhQb3NYOmNlbnRlckogcG9zWTpjZW50ZXJJIGVzdGltYXRlZE1vZHVsZVNpemU6ZXN0aW1hdGVkTW9kdWxlU2l6ZV07CisgICAgICAgIFtzZWxmLnBvc3NpYmxlQ2VudGVycyBhZGRPYmplY3Q6cG9pbnRdOworICAgICAgICBpZiAoc2VsZi5yZXN1bHRQb2ludENhbGxiYWNrICE9IG5pbCkgeworICAgICAgICAgIFtzZWxmLnJlc3VsdFBvaW50Q2FsbGJhY2sgZm91bmRQb3NzaWJsZVJlc3VsdFBvaW50OnBvaW50XTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgIH0KKyAgcmV0dXJuIE5POworfQorCisKKy8qKgorICogQHJldHVybiBudW1iZXIgb2Ygcm93cyB3ZSBjb3VsZCBzYWZlbHkgc2tpcCBkdXJpbmcgc2Nhbm5pbmcsIGJhc2VkIG9uIHRoZSBmaXJzdAorICogdHdvIGZpbmRlciBwYXR0ZXJucyB0aGF0IGhhdmUgYmVlbiBsb2NhdGVkLiBJbiBzb21lIGNhc2VzIHRoZWlyIHBvc2l0aW9uIHdpbGwKKyAqIGFsbG93IHVzIHRvIGluZmVyIHRoYXQgdGhlIHRoaXJkIHBhdHRlcm4gbXVzdCBsaWUgYmVsb3cgYSBjZXJ0YWluIHBvaW50IGZhcnRoZXIKKyAqIGRvd24gaW4gdGhlIGltYWdlLgorICovCistIChpbnQpIGZpbmRSb3dTa2lwIHsKKyAgaW50IG1heCA9IChpbnQpW3NlbGYucG9zc2libGVDZW50ZXJzIGNvdW50XTsKKyAgaWYgKG1heCA8PSAxKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgWlhRUkNvZGVGaW5kZXJQYXR0ZXJuICpmaXJzdENvbmZpcm1lZENlbnRlciA9IG5pbDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXg7IGkrKykgeworICAgIFpYUVJDb2RlRmluZGVyUGF0dGVybiAqY2VudGVyID0gc2VsZi5wb3NzaWJsZUNlbnRlcnNbaV07CisgICAgaWYgKFtjZW50ZXIgY291bnRdID49IENFTlRFUl9RVU9SVU0pIHsKKyAgICAgIGlmIChmaXJzdENvbmZpcm1lZENlbnRlciA9PSBuaWwpIHsKKyAgICAgICAgZmlyc3RDb25maXJtZWRDZW50ZXIgPSBjZW50ZXI7CisgICAgICB9IGVsc2UgeworICAgICAgICBzZWxmLmhhc1NraXBwZWQgPSBZRVM7CisgICAgICAgIHJldHVybiAoaW50KShmYWJzZihbZmlyc3RDb25maXJtZWRDZW50ZXIgeF0gLSBbY2VudGVyIHhdKSAtIGZhYnNmKFtmaXJzdENvbmZpcm1lZENlbnRlciB5XSAtIFtjZW50ZXIgeV0pKSAvIDI7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisKKy0gKEJPT0wpaGF2ZU11bHRpcGx5Q29uZmlybWVkQ2VudGVycyB7CisgIGludCBjb25maXJtZWRDb3VudCA9IDA7CisgIGZsb2F0IHRvdGFsTW9kdWxlU2l6ZSA9IDAuMGY7CisgIGludCBtYXggPSAoaW50KVtzZWxmLnBvc3NpYmxlQ2VudGVycyBjb3VudF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKKyAgICBaWFFSQ29kZUZpbmRlclBhdHRlcm4gKnBhdHRlcm4gPSBzZWxmLnBvc3NpYmxlQ2VudGVyc1tpXTsKKyAgICBpZiAoW3BhdHRlcm4gY291bnRdID49IENFTlRFUl9RVU9SVU0pIHsKKyAgICAgIGNvbmZpcm1lZENvdW50Kys7CisgICAgICB0b3RhbE1vZHVsZVNpemUgKz0gW3BhdHRlcm4gZXN0aW1hdGVkTW9kdWxlU2l6ZV07CisgICAgfQorICB9CisgIGlmIChjb25maXJtZWRDb3VudCA8IDMpIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBmbG9hdCBhdmVyYWdlID0gdG90YWxNb2R1bGVTaXplIC8gKGZsb2F0KW1heDsKKyAgZmxvYXQgdG90YWxEZXZpYXRpb24gPSAwLjBmOworICBmb3IgKGludCBpID0gMDsgaSA8IG1heDsgaSsrKSB7CisgICAgWlhRUkNvZGVGaW5kZXJQYXR0ZXJuICpwYXR0ZXJuID0gc2VsZi5wb3NzaWJsZUNlbnRlcnNbaV07CisgICAgdG90YWxEZXZpYXRpb24gKz0gZmFic2YoW3BhdHRlcm4gZXN0aW1hdGVkTW9kdWxlU2l6ZV0gLSBhdmVyYWdlKTsKKyAgfQorICByZXR1cm4gdG90YWxEZXZpYXRpb24gPD0gMC4wNWYgKiB0b3RhbE1vZHVsZVNpemU7Cit9CisKKy8qKgorICogT3JkZXJzIGJ5IFpYRmluZGVyUGF0dGVybiBjb3VudCwgZGVzY2VuZGluZy4KKyAqLworTlNJbnRlZ2VyIGNlbnRlckNvbXBhcmUoaWQgY2VudGVyMSwgaWQgY2VudGVyMiwgdm9pZCAqY29udGV4dCkgeworICBmbG9hdCBhdmVyYWdlID0gWyhfX2JyaWRnZSBOU051bWJlciAqKWNvbnRleHQgZmxvYXRWYWx1ZV07CisKKyAgaWYgKFsoKFpYUVJDb2RlRmluZGVyUGF0dGVybiAqKWNlbnRlcjIpIGNvdW50XSA9PSBbKChaWFFSQ29kZUZpbmRlclBhdHRlcm4gKiljZW50ZXIxKSBjb3VudF0pIHsKKyAgICBmbG9hdCBkQSA9IGZhYnNmKFsoKFpYUVJDb2RlRmluZGVyUGF0dGVybiAqKWNlbnRlcjIpIGVzdGltYXRlZE1vZHVsZVNpemVdIC0gYXZlcmFnZSk7CisgICAgZmxvYXQgZEIgPSBmYWJzZihbKChaWFFSQ29kZUZpbmRlclBhdHRlcm4gKiljZW50ZXIxKSBlc3RpbWF0ZWRNb2R1bGVTaXplXSAtIGF2ZXJhZ2UpOworICAgIHJldHVybiBkQSA8IGRCID8gMSA6IGRBID09IGRCID8gMCA6IC0xOworICB9IGVsc2UgeworICAgIHJldHVybiBbKChaWFFSQ29kZUZpbmRlclBhdHRlcm4gKiljZW50ZXIyKSBjb3VudF0gLSBbKChaWFFSQ29kZUZpbmRlclBhdHRlcm4gKiljZW50ZXIxKSBjb3VudF07CisgIH0KK30KKworLyoqCisgKiBPcmRlcnMgYnkgZnVydGhlc3QgZnJvbSBhdmVyYWdlCisgKi8KK05TSW50ZWdlciBmdXJ0aGVzdEZyb21BdmVyYWdlQ29tcGFyZShpZCBjZW50ZXIxLCBpZCBjZW50ZXIyLCB2b2lkICpjb250ZXh0KSB7CisgIGZsb2F0IGF2ZXJhZ2UgPSBbKF9fYnJpZGdlIE5TTnVtYmVyICopY29udGV4dCBmbG9hdFZhbHVlXTsKKworICBmbG9hdCBkQSA9IGZhYnNmKFsoKFpYUVJDb2RlRmluZGVyUGF0dGVybiAqKWNlbnRlcjIpIGVzdGltYXRlZE1vZHVsZVNpemVdIC0gYXZlcmFnZSk7CisgIGZsb2F0IGRCID0gZmFic2YoWygoWlhRUkNvZGVGaW5kZXJQYXR0ZXJuICopY2VudGVyMSkgZXN0aW1hdGVkTW9kdWxlU2l6ZV0gLSBhdmVyYWdlKTsKKyAgcmV0dXJuIGRBIDwgZEIgPyAtMSA6IGRBID09IGRCID8gMCA6IDE7Cit9CisKKworLyoqCisgKiBSZXR1cm5zIHRoZSAzIGJlc3QgWlhGaW5kZXJQYXR0ZXJucyBmcm9tIG91ciBsaXN0IG9mIGNhbmRpZGF0ZXMuIFRoZSAiYmVzdCIgYXJlCisgKiB0aG9zZSB0aGF0IGhhdmUgYmVlbiBkZXRlY3RlZCBhdCBsZWFzdCBDRU5URVJfUVVPUlVNIHRpbWVzLCBhbmQgd2hvc2UgbW9kdWxlCisgKiBzaXplIGRpZmZlcnMgZnJvbSB0aGUgYXZlcmFnZSBhbW9uZyB0aG9zZSBwYXR0ZXJucyB0aGUgbGVhc3QKKyAqLworLSAoTlNNdXRhYmxlQXJyYXkgKilzZWxlY3RCZXN0UGF0dGVybnMgeworICBpbnQgc3RhcnRTaXplID0gKGludClbc2VsZi5wb3NzaWJsZUNlbnRlcnMgY291bnRdOworICBpZiAoc3RhcnRTaXplIDwgMykgeworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpZiAoc3RhcnRTaXplID4gMykgeworICAgIGZsb2F0IHRvdGFsTW9kdWxlU2l6ZSA9IDAuMGY7CisgICAgZmxvYXQgc3F1YXJlID0gMC4wZjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXJ0U2l6ZTsgaSsrKSB7CisgICAgICBmbG9hdCBzaXplID0gW3NlbGYucG9zc2libGVDZW50ZXJzW2ldIGVzdGltYXRlZE1vZHVsZVNpemVdOworICAgICAgdG90YWxNb2R1bGVTaXplICs9IHNpemU7CisgICAgICBzcXVhcmUgKz0gc2l6ZSAqIHNpemU7CisgICAgfQorICAgIGZsb2F0IGF2ZXJhZ2UgPSB0b3RhbE1vZHVsZVNpemUgLyAoZmxvYXQpc3RhcnRTaXplOworICAgIGZsb2F0IHN0ZERldiA9IChmbG9hdClzcXJ0KHNxdWFyZSAvIHN0YXJ0U2l6ZSAtIGF2ZXJhZ2UgKiBhdmVyYWdlKTsKKworICAgIFtzZWxmLnBvc3NpYmxlQ2VudGVycyBzb3J0VXNpbmdGdW5jdGlvbjogZnVydGhlc3RGcm9tQXZlcmFnZUNvbXBhcmUgY29udGV4dDogKF9fYnJpZGdlIHZvaWQgKilAKGF2ZXJhZ2UpXTsKKworICAgIGZsb2F0IGxpbWl0ID0gTUFYKDAuMmYgKiBhdmVyYWdlLCBzdGREZXYpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBbc2VsZi5wb3NzaWJsZUNlbnRlcnMgY291bnRdICYmIFtzZWxmLnBvc3NpYmxlQ2VudGVycyBjb3VudF0gPiAzOyBpKyspIHsKKyAgICAgIFpYUVJDb2RlRmluZGVyUGF0dGVybiAqcGF0dGVybiA9IHNlbGYucG9zc2libGVDZW50ZXJzW2ldOworICAgICAgaWYgKGZhYnNmKFtwYXR0ZXJuIGVzdGltYXRlZE1vZHVsZVNpemVdIC0gYXZlcmFnZSkgPiBsaW1pdCkgeworICAgICAgICBbc2VsZi5wb3NzaWJsZUNlbnRlcnMgcmVtb3ZlT2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgaS0tOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChbc2VsZi5wb3NzaWJsZUNlbnRlcnMgY291bnRdID4gMykgeworICAgIGZsb2F0IHRvdGFsTW9kdWxlU2l6ZSA9IDAuMGY7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBbc2VsZi5wb3NzaWJsZUNlbnRlcnMgY291bnRdOyBpKyspIHsKKyAgICAgIHRvdGFsTW9kdWxlU2l6ZSArPSBbc2VsZi5wb3NzaWJsZUNlbnRlcnNbaV0gZXN0aW1hdGVkTW9kdWxlU2l6ZV07CisgICAgfQorCisgICAgZmxvYXQgYXZlcmFnZSA9IHRvdGFsTW9kdWxlU2l6ZSAvIChmbG9hdClbc2VsZi5wb3NzaWJsZUNlbnRlcnMgY291bnRdOworCisgICAgW3NlbGYucG9zc2libGVDZW50ZXJzIHNvcnRVc2luZ0Z1bmN0aW9uOmNlbnRlckNvbXBhcmUgY29udGV4dDooX19icmlkZ2Ugdm9pZCAqKShAKGF2ZXJhZ2UpKV07CisKKyAgICBzZWxmLnBvc3NpYmxlQ2VudGVycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6W3NlbGYucG9zc2libGVDZW50ZXJzIHN1YmFycmF5V2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAsIDMpXV07CisgIH0KKworICByZXR1cm4gW0Bbc2VsZi5wb3NzaWJsZUNlbnRlcnNbMF0sIHNlbGYucG9zc2libGVDZW50ZXJzWzFdLCBzZWxmLnBvc3NpYmxlQ2VudGVyc1syXV0gbXV0YWJsZUNvcHldOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYRmluZGVyUGF0dGVybkluZm8uaCBiL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhGaW5kZXJQYXR0ZXJuSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZWI3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYRmluZGVyUGF0dGVybkluZm8uaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEVuY2Fwc3VsYXRlcyBpbmZvcm1hdGlvbiBhYm91dCBmaW5kZXIgcGF0dGVybnMgaW4gYW4gaW1hZ2UsIGluY2x1ZGluZyB0aGUgbG9jYXRpb24gb2YKKyAqIHRoZSB0aHJlZSBmaW5kZXIgcGF0dGVybnMsIGFuZCB0aGVpciBlc3RpbWF0ZWQgbW9kdWxlIHNpemUuCisgKi8KKworQGNsYXNzIFpYUVJDb2RlRmluZGVyUGF0dGVybjsKKworQGludGVyZmFjZSBaWEZpbmRlclBhdHRlcm5JbmZvIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIFpYUVJDb2RlRmluZGVyUGF0dGVybiAqYm90dG9tTGVmdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBaWFFSQ29kZUZpbmRlclBhdHRlcm4gKnRvcExlZnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCByZWFkb25seSkgWlhRUkNvZGVGaW5kZXJQYXR0ZXJuICp0b3BSaWdodDsKKworLSAoaWQpaW5pdFdpdGhQYXR0ZXJuQ2VudGVyczooTlNBcnJheSAqKXBhdHRlcm5DZW50ZXJzOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYRmluZGVyUGF0dGVybkluZm8ubSBiL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhGaW5kZXJQYXR0ZXJuSW5mby5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMDhiMGEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYRmluZGVyUGF0dGVybkluZm8ubQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEZpbmRlclBhdHRlcm5JbmZvLmgiCisjaW1wb3J0ICJaWFFSQ29kZUZpbmRlclBhdHRlcm4uaCIKKworQGltcGxlbWVudGF0aW9uIFpYRmluZGVyUGF0dGVybkluZm8KKworLSAoaWQpaW5pdFdpdGhQYXR0ZXJuQ2VudGVyczooTlNBcnJheSAqKXBhdHRlcm5DZW50ZXJzIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfYm90dG9tTGVmdCA9IHBhdHRlcm5DZW50ZXJzWzBdOworICAgIF90b3BMZWZ0ID0gcGF0dGVybkNlbnRlcnNbMV07CisgICAgX3RvcFJpZ2h0ID0gcGF0dGVybkNlbnRlcnNbMl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZXRlY3Rvci9aWFFSQ29kZURldGVjdG9yLmggYi9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYUVJDb2RlRGV0ZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTkxMTc2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3FyY29kZS9kZXRlY3Rvci9aWFFSQ29kZURldGVjdG9yLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBFbmNhcHN1bGF0ZXMgbG9naWMgdGhhdCBjYW4gZGV0ZWN0IGEgUVIgQ29kZSBpbiBhbiBpbWFnZSwgZXZlbiBpZiB0aGUgUVIgQ29kZQorICogaXMgcm90YXRlZCBvciBza2V3ZWQsIG9yIHBhcnRpYWxseSBvYnNjdXJlZC4KKyAqLworCitAY2xhc3MgWlhBbGlnbm1lbnRQYXR0ZXJuLCBaWEJpdE1hdHJpeCwgWlhEZWNvZGVIaW50cywgWlhEZXRlY3RvclJlc3VsdCwgWlhGaW5kZXJQYXR0ZXJuSW5mbywgWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSwgWlhSZXN1bHRQb2ludDsKK0Bwcm90b2NvbCBaWFJlc3VsdFBvaW50Q2FsbGJhY2s7CisKK0BpbnRlcmZhY2UgWlhRUkNvZGVEZXRlY3RvciA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcsIHJlYWRvbmx5KSBaWEJpdE1hdHJpeCAqaW1hZ2U7CitAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaywgcmVhZG9ubHkpIGlkIDxaWFJlc3VsdFBvaW50Q2FsbGJhY2s+IHJlc3VsdFBvaW50Q2FsbGJhY2s7CisKKy0gKGlkKWluaXRXaXRoSW1hZ2U6KFpYQml0TWF0cml4ICopaW1hZ2U7CistIChaWERldGVjdG9yUmVzdWx0ICopZGV0ZWN0V2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoWlhEZXRlY3RvclJlc3VsdCAqKWRldGVjdDooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoWlhEZXRlY3RvclJlc3VsdCAqKXByb2Nlc3NGaW5kZXJQYXR0ZXJuSW5mbzooWlhGaW5kZXJQYXR0ZXJuSW5mbyAqKWluZm8gZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisrIChpbnQpY29tcHV0ZURpbWVuc2lvbjooWlhSZXN1bHRQb2ludCAqKXRvcExlZnQgdG9wUmlnaHQ6KFpYUmVzdWx0UG9pbnQgKil0b3BSaWdodCBib3R0b21MZWZ0OihaWFJlc3VsdFBvaW50ICopYm90dG9tTGVmdCBtb2R1bGVTaXplOihmbG9hdCltb2R1bGVTaXplIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworLSAoZmxvYXQpY2FsY3VsYXRlTW9kdWxlU2l6ZTooWlhSZXN1bHRQb2ludCAqKXRvcExlZnQgdG9wUmlnaHQ6KFpYUmVzdWx0UG9pbnQgKil0b3BSaWdodCBib3R0b21MZWZ0OihaWFJlc3VsdFBvaW50ICopYm90dG9tTGVmdDsKKy0gKFpYQWxpZ25tZW50UGF0dGVybiAqKWZpbmRBbGlnbm1lbnRJblJlZ2lvbjooZmxvYXQpb3ZlcmFsbEVzdE1vZHVsZVNpemUgZXN0QWxpZ25tZW50WDooaW50KWVzdEFsaWdubWVudFggZXN0QWxpZ25tZW50WTooaW50KWVzdEFsaWdubWVudFkgYWxsb3dhbmNlRmFjdG9yOihmbG9hdClhbGxvd2FuY2VGYWN0b3IgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhRUkNvZGVEZXRlY3Rvci5tIGIvWlhpbmdPYmpDL3FyY29kZS9kZXRlY3Rvci9aWFFSQ29kZURldGVjdG9yLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwNjM1YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhRUkNvZGVEZXRlY3Rvci5tCkBAIC0wLDAgKzEsMzI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEFsaWdubWVudFBhdHRlcm4uaCIKKyNpbXBvcnQgIlpYQWxpZ25tZW50UGF0dGVybkZpbmRlci5oIgorI2ltcG9ydCAiWlhCaXRNYXRyaXguaCIKKyNpbXBvcnQgIlpYRGVjb2RlSGludHMuaCIKKyNpbXBvcnQgIlpYRGV0ZWN0b3JSZXN1bHQuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEZpbmRlclBhdHRlcm5GaW5kZXIuaCIKKyNpbXBvcnQgIlpYRmluZGVyUGF0dGVybkluZm8uaCIKKyNpbXBvcnQgIlpYR3JpZFNhbXBsZXIuaCIKKyNpbXBvcnQgIlpYTWF0aFV0aWxzLmgiCisjaW1wb3J0ICJaWFBlcnNwZWN0aXZlVHJhbnNmb3JtLmgiCisjaW1wb3J0ICJaWFFSQ29kZURldGVjdG9yLmgiCisjaW1wb3J0ICJaWFFSQ29kZUZpbmRlclBhdHRlcm4uaCIKKyNpbXBvcnQgIlpYUVJDb2RlVmVyc2lvbi5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludC5oIgorI2ltcG9ydCAiWlhSZXN1bHRQb2ludENhbGxiYWNrLmgiCisKK0BpbnRlcmZhY2UgWlhRUkNvZGVEZXRlY3RvciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPFpYUmVzdWx0UG9pbnRDYWxsYmFjaz4gcmVzdWx0UG9pbnRDYWxsYmFjazsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhRUkNvZGVEZXRlY3RvcgorCistIChpZClpbml0V2l0aEltYWdlOihaWEJpdE1hdHJpeCAqKWltYWdlIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfaW1hZ2UgPSBpbWFnZTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCisvKioKKyAqIERldGVjdHMgYSBRUiBDb2RlIGluIGFuIGltYWdlLCBzaW1wbHkuCisgKi8KKy0gKFpYRGV0ZWN0b3JSZXN1bHQgKilkZXRlY3RXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICByZXR1cm4gW3NlbGYgZGV0ZWN0Om5pbCBlcnJvcjplcnJvcl07Cit9CisKKy8qKgorICogRGV0ZWN0cyBhIFFSIENvZGUgaW4gYW4gaW1hZ2UsIHNpbXBseS4KKyAqLworLSAoWlhEZXRlY3RvclJlc3VsdCAqKWRldGVjdDooWlhEZWNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgc2VsZi5yZXN1bHRQb2ludENhbGxiYWNrID0gaGludHMgPT0gbmlsID8gbmlsIDogaGludHMucmVzdWx0UG9pbnRDYWxsYmFjazsKKworICBaWEZpbmRlclBhdHRlcm5GaW5kZXIgKmZpbmRlciA9IFtbWlhGaW5kZXJQYXR0ZXJuRmluZGVyIGFsbG9jXSBpbml0V2l0aEltYWdlOnNlbGYuaW1hZ2UgcmVzdWx0UG9pbnRDYWxsYmFjazpzZWxmLnJlc3VsdFBvaW50Q2FsbGJhY2tdOworICBaWEZpbmRlclBhdHRlcm5JbmZvICppbmZvID0gW2ZpbmRlciBmaW5kOmhpbnRzIGVycm9yOmVycm9yXTsKKyAgaWYgKCFpbmZvKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIHJldHVybiBbc2VsZiBwcm9jZXNzRmluZGVyUGF0dGVybkluZm86aW5mbyBlcnJvcjplcnJvcl07Cit9CisKKy0gKFpYRGV0ZWN0b3JSZXN1bHQgKilwcm9jZXNzRmluZGVyUGF0dGVybkluZm86KFpYRmluZGVyUGF0dGVybkluZm8gKilpbmZvIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgWlhRUkNvZGVGaW5kZXJQYXR0ZXJuICp0b3BMZWZ0ID0gaW5mby50b3BMZWZ0OworICBaWFFSQ29kZUZpbmRlclBhdHRlcm4gKnRvcFJpZ2h0ID0gaW5mby50b3BSaWdodDsKKyAgWlhRUkNvZGVGaW5kZXJQYXR0ZXJuICpib3R0b21MZWZ0ID0gaW5mby5ib3R0b21MZWZ0OworCisgIGZsb2F0IG1vZHVsZVNpemUgPSBbc2VsZiBjYWxjdWxhdGVNb2R1bGVTaXplOnRvcExlZnQgdG9wUmlnaHQ6dG9wUmlnaHQgYm90dG9tTGVmdDpib3R0b21MZWZ0XTsKKyAgaWYgKG1vZHVsZVNpemUgPCAxLjBmKSB7CisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBOb3RGb3VuZEVycm9ySW5zdGFuY2UoKTsKKyAgICByZXR1cm4gbmlsOworICB9CisgIGludCBkaW1lbnNpb24gPSBbWlhRUkNvZGVEZXRlY3RvciBjb21wdXRlRGltZW5zaW9uOnRvcExlZnQgdG9wUmlnaHQ6dG9wUmlnaHQgYm90dG9tTGVmdDpib3R0b21MZWZ0IG1vZHVsZVNpemU6bW9kdWxlU2l6ZSBlcnJvcjplcnJvcl07CisgIGlmIChkaW1lbnNpb24gPT0gLTEpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgWlhRUkNvZGVWZXJzaW9uICpwcm92aXNpb25hbFZlcnNpb24gPSBbWlhRUkNvZGVWZXJzaW9uIHByb3Zpc2lvbmFsVmVyc2lvbkZvckRpbWVuc2lvbjpkaW1lbnNpb25dOworICBpZiAoIXByb3Zpc2lvbmFsVmVyc2lvbikgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gRm9ybWF0RXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKyAgaW50IG1vZHVsZXNCZXR3ZWVuRlBDZW50ZXJzID0gW3Byb3Zpc2lvbmFsVmVyc2lvbiBkaW1lbnNpb25Gb3JWZXJzaW9uXSAtIDc7CisKKyAgWlhBbGlnbm1lbnRQYXR0ZXJuICphbGlnbm1lbnRQYXR0ZXJuID0gbmlsOworICBpZiAoW1twcm92aXNpb25hbFZlcnNpb24gYWxpZ25tZW50UGF0dGVybkNlbnRlcnNdIGNvdW50XSA+IDApIHsKKyAgICBmbG9hdCBib3R0b21SaWdodFggPSBbdG9wUmlnaHQgeF0gLSBbdG9wTGVmdCB4XSArIFtib3R0b21MZWZ0IHhdOworICAgIGZsb2F0IGJvdHRvbVJpZ2h0WSA9IFt0b3BSaWdodCB5XSAtIFt0b3BMZWZ0IHldICsgW2JvdHRvbUxlZnQgeV07CisKKyAgICBmbG9hdCBjb3JyZWN0aW9uVG9Ub3BMZWZ0ID0gMS4wZiAtIDMuMGYgLyAoZmxvYXQpbW9kdWxlc0JldHdlZW5GUENlbnRlcnM7CisgICAgaW50IGVzdEFsaWdubWVudFggPSAoaW50KShbdG9wTGVmdCB4XSArIGNvcnJlY3Rpb25Ub1RvcExlZnQgKiAoYm90dG9tUmlnaHRYIC0gW3RvcExlZnQgeF0pKTsKKyAgICBpbnQgZXN0QWxpZ25tZW50WSA9IChpbnQpKFt0b3BMZWZ0IHldICsgY29ycmVjdGlvblRvVG9wTGVmdCAqIChib3R0b21SaWdodFkgLSBbdG9wTGVmdCB5XSkpOworCisgICAgZm9yIChpbnQgaSA9IDQ7IGkgPD0gMTY7IGkgPDw9IDEpIHsKKyAgICAgIE5TRXJyb3IgKmFsaWdubWVudEVycm9yID0gbmlsOworICAgICAgYWxpZ25tZW50UGF0dGVybiA9IFtzZWxmIGZpbmRBbGlnbm1lbnRJblJlZ2lvbjptb2R1bGVTaXplIGVzdEFsaWdubWVudFg6ZXN0QWxpZ25tZW50WCBlc3RBbGlnbm1lbnRZOmVzdEFsaWdubWVudFkgYWxsb3dhbmNlRmFjdG9yOihmbG9hdClpIGVycm9yOiZhbGlnbm1lbnRFcnJvcl07CisgICAgICBpZiAoYWxpZ25tZW50UGF0dGVybikgeworICAgICAgICBicmVhazsKKyAgICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50RXJyb3IuY29kZSAhPSBaWE5vdEZvdW5kRXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBhbGlnbm1lbnRFcnJvcjsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBaWFBlcnNwZWN0aXZlVHJhbnNmb3JtICp0cmFuc2Zvcm0gPSBbWlhRUkNvZGVEZXRlY3RvciBjcmVhdGVUcmFuc2Zvcm06dG9wTGVmdCB0b3BSaWdodDp0b3BSaWdodCBib3R0b21MZWZ0OmJvdHRvbUxlZnQgYWxpZ25tZW50UGF0dGVybjphbGlnbm1lbnRQYXR0ZXJuIGRpbWVuc2lvbjpkaW1lbnNpb25dOworICBaWEJpdE1hdHJpeCAqYml0cyA9IFtzZWxmIHNhbXBsZUdyaWQ6c2VsZi5pbWFnZSB0cmFuc2Zvcm06dHJhbnNmb3JtIGRpbWVuc2lvbjpkaW1lbnNpb24gZXJyb3I6ZXJyb3JdOworICBpZiAoIWJpdHMpIHsKKyAgICByZXR1cm4gbmlsOworICB9CisgIE5TQXJyYXkgKnBvaW50czsKKyAgaWYgKGFsaWdubWVudFBhdHRlcm4gPT0gbmlsKSB7CisgICAgcG9pbnRzID0gQFtib3R0b21MZWZ0LCB0b3BMZWZ0LCB0b3BSaWdodF07CisgIH0gZWxzZSB7CisgICAgcG9pbnRzID0gQFtib3R0b21MZWZ0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYWxpZ25tZW50UGF0dGVybl07CisgIH0KKyAgcmV0dXJuIFtbWlhEZXRlY3RvclJlc3VsdCBhbGxvY10gaW5pdFdpdGhCaXRzOmJpdHMgcG9pbnRzOnBvaW50c107Cit9CisKKysgKFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm0gKiljcmVhdGVUcmFuc2Zvcm06KFpYUmVzdWx0UG9pbnQgKil0b3BMZWZ0IHRvcFJpZ2h0OihaWFJlc3VsdFBvaW50ICopdG9wUmlnaHQgYm90dG9tTGVmdDooWlhSZXN1bHRQb2ludCAqKWJvdHRvbUxlZnQgYWxpZ25tZW50UGF0dGVybjooWlhSZXN1bHRQb2ludCAqKWFsaWdubWVudFBhdHRlcm4gZGltZW5zaW9uOihpbnQpZGltZW5zaW9uIHsKKyAgZmxvYXQgZGltTWludXNUaHJlZSA9IChmbG9hdClkaW1lbnNpb24gLSAzLjVmOworICBmbG9hdCBib3R0b21SaWdodFg7CisgIGZsb2F0IGJvdHRvbVJpZ2h0WTsKKyAgZmxvYXQgc291cmNlQm90dG9tUmlnaHRYOworICBmbG9hdCBzb3VyY2VCb3R0b21SaWdodFk7CisgIGlmIChhbGlnbm1lbnRQYXR0ZXJuICE9IG5pbCkgeworICAgIGJvdHRvbVJpZ2h0WCA9IGFsaWdubWVudFBhdHRlcm4ueDsKKyAgICBib3R0b21SaWdodFkgPSBhbGlnbm1lbnRQYXR0ZXJuLnk7CisgICAgc291cmNlQm90dG9tUmlnaHRYID0gZGltTWludXNUaHJlZSAtIDMuMGY7CisgICAgc291cmNlQm90dG9tUmlnaHRZID0gc291cmNlQm90dG9tUmlnaHRYOworICB9IGVsc2UgeworICAgIGJvdHRvbVJpZ2h0WCA9ICh0b3BSaWdodC54IC0gdG9wTGVmdC54KSArIGJvdHRvbUxlZnQueDsKKyAgICBib3R0b21SaWdodFkgPSAodG9wUmlnaHQueSAtIHRvcExlZnQueSkgKyBib3R0b21MZWZ0Lnk7CisgICAgc291cmNlQm90dG9tUmlnaHRYID0gZGltTWludXNUaHJlZTsKKyAgICBzb3VyY2VCb3R0b21SaWdodFkgPSBkaW1NaW51c1RocmVlOworICB9CisgIHJldHVybiBbWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSBxdWFkcmlsYXRlcmFsVG9RdWFkcmlsYXRlcmFsOjMuNWYgeTA6My41ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTpkaW1NaW51c1RocmVlIHkxOjMuNWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI6c291cmNlQm90dG9tUmlnaHRYIHkyOnNvdXJjZUJvdHRvbVJpZ2h0WQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MzozLjVmIHkzOmRpbU1pbnVzVGhyZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MHA6dG9wTGVmdC54IHkwcDp0b3BMZWZ0LnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MXA6dG9wUmlnaHQueCB5MXA6dG9wUmlnaHQueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgycDpib3R0b21SaWdodFggeTJwOmJvdHRvbVJpZ2h0WQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgzcDpib3R0b21MZWZ0LnggeTNwOmJvdHRvbUxlZnQueV07Cit9CisKKy0gKFpYQml0TWF0cml4ICopc2FtcGxlR3JpZDooWlhCaXRNYXRyaXggKilhbkltYWdlIHRyYW5zZm9ybTooWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSAqKXRyYW5zZm9ybSBkaW1lbnNpb246KGludClkaW1lbnNpb24gZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWEdyaWRTYW1wbGVyICpzYW1wbGVyID0gW1pYR3JpZFNhbXBsZXIgaW5zdGFuY2VdOworICByZXR1cm4gW3NhbXBsZXIgc2FtcGxlR3JpZDphbkltYWdlIGRpbWVuc2lvblg6ZGltZW5zaW9uIGRpbWVuc2lvblk6ZGltZW5zaW9uIHRyYW5zZm9ybTp0cmFuc2Zvcm0gZXJyb3I6ZXJyb3JdOworfQorCisvKioKKyAqIENvbXB1dGVzIHRoZSBkaW1lbnNpb24gKG51bWJlciBvZiBtb2R1bGVzIG9uIGEgc2l6ZSkgb2YgdGhlIFFSIENvZGUgYmFzZWQgb24gdGhlIHBvc2l0aW9uCisgKiBvZiB0aGUgZmluZGVyIHBhdHRlcm5zIGFuZCBlc3RpbWF0ZWQgbW9kdWxlIHNpemUuIFJldHVybnMgLTEgb24gYW4gZXJyb3IuCisgKi8KKysgKGludCljb21wdXRlRGltZW5zaW9uOihaWFJlc3VsdFBvaW50ICopdG9wTGVmdCB0b3BSaWdodDooWlhSZXN1bHRQb2ludCAqKXRvcFJpZ2h0IGJvdHRvbUxlZnQ6KFpYUmVzdWx0UG9pbnQgKilib3R0b21MZWZ0IG1vZHVsZVNpemU6KGZsb2F0KW1vZHVsZVNpemUgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQgdGx0ckNlbnRlcnNEaW1lbnNpb24gPSBbWlhNYXRoVXRpbHMgcm91bmQ6W1pYUmVzdWx0UG9pbnQgZGlzdGFuY2U6dG9wTGVmdCBwYXR0ZXJuMjp0b3BSaWdodF0gLyBtb2R1bGVTaXplXTsKKyAgaW50IHRsYmxDZW50ZXJzRGltZW5zaW9uID0gW1pYTWF0aFV0aWxzIHJvdW5kOltaWFJlc3VsdFBvaW50IGRpc3RhbmNlOnRvcExlZnQgcGF0dGVybjI6Ym90dG9tTGVmdF0gLyBtb2R1bGVTaXplXTsKKyAgaW50IGRpbWVuc2lvbiA9ICgodGx0ckNlbnRlcnNEaW1lbnNpb24gKyB0bGJsQ2VudGVyc0RpbWVuc2lvbikgPj4gMSkgKyA3OworCisgIHN3aXRjaCAoZGltZW5zaW9uICYgMHgwMykgeworICBjYXNlIDA6CisgICAgZGltZW5zaW9uKys7CisgICAgYnJlYWs7CisgIGNhc2UgMjoKKyAgICBkaW1lbnNpb24tLTsKKyAgICBicmVhazsKKyAgY2FzZSAzOgorICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiBkaW1lbnNpb247Cit9CisKKy8qKgorICogQ29tcHV0ZXMgYW4gYXZlcmFnZSBlc3RpbWF0ZWQgbW9kdWxlIHNpemUgYmFzZWQgb24gZXN0aW1hdGVkIGRlcml2ZWQgZnJvbSB0aGUgcG9zaXRpb25zCisgKiBvZiB0aGUgdGhyZWUgZmluZGVyIHBhdHRlcm5zLgorICovCistIChmbG9hdCljYWxjdWxhdGVNb2R1bGVTaXplOihaWFJlc3VsdFBvaW50ICopdG9wTGVmdCB0b3BSaWdodDooWlhSZXN1bHRQb2ludCAqKXRvcFJpZ2h0IGJvdHRvbUxlZnQ6KFpYUmVzdWx0UG9pbnQgKilib3R0b21MZWZ0IHsKKyAgcmV0dXJuIChbc2VsZiBjYWxjdWxhdGVNb2R1bGVTaXplT25lV2F5OnRvcExlZnQgb3RoZXJQYXR0ZXJuOnRvcFJpZ2h0XSArIFtzZWxmIGNhbGN1bGF0ZU1vZHVsZVNpemVPbmVXYXk6dG9wTGVmdCBvdGhlclBhdHRlcm46Ym90dG9tTGVmdF0pIC8gMi4wZjsKK30KKworLSAoZmxvYXQpY2FsY3VsYXRlTW9kdWxlU2l6ZU9uZVdheTooWlhSZXN1bHRQb2ludCAqKXBhdHRlcm4gb3RoZXJQYXR0ZXJuOihaWFJlc3VsdFBvaW50ICopb3RoZXJQYXR0ZXJuIHsKKyAgZmxvYXQgbW9kdWxlU2l6ZUVzdDEgPSBbc2VsZiBzaXplT2ZCbGFja1doaXRlQmxhY2tSdW5Cb3RoV2F5czooaW50KVtwYXR0ZXJuIHhdIGZyb21ZOihpbnQpW3BhdHRlcm4geV0gdG9YOihpbnQpW290aGVyUGF0dGVybiB4XSB0b1k6KGludClbb3RoZXJQYXR0ZXJuIHldXTsKKyAgZmxvYXQgbW9kdWxlU2l6ZUVzdDIgPSBbc2VsZiBzaXplT2ZCbGFja1doaXRlQmxhY2tSdW5Cb3RoV2F5czooaW50KVtvdGhlclBhdHRlcm4geF0gZnJvbVk6KGludClbb3RoZXJQYXR0ZXJuIHldIHRvWDooaW50KVtwYXR0ZXJuIHhdIHRvWTooaW50KVtwYXR0ZXJuIHldXTsKKyAgaWYgKGlzbmFuKG1vZHVsZVNpemVFc3QxKSkgeworICAgIHJldHVybiBtb2R1bGVTaXplRXN0MiAvIDcuMGY7CisgIH0KKyAgaWYgKGlzbmFuKG1vZHVsZVNpemVFc3QyKSkgeworICAgIHJldHVybiBtb2R1bGVTaXplRXN0MSAvIDcuMGY7CisgIH0KKyAgcmV0dXJuIChtb2R1bGVTaXplRXN0MSArIG1vZHVsZVNpemVFc3QyKSAvIDE0LjBmOworfQorCistIChmbG9hdClzaXplT2ZCbGFja1doaXRlQmxhY2tSdW5Cb3RoV2F5czooaW50KWZyb21YIGZyb21ZOihpbnQpZnJvbVkgdG9YOihpbnQpdG9YIHRvWTooaW50KXRvWSB7CisgIGZsb2F0IHJlc3VsdCA9IFtzZWxmIHNpemVPZkJsYWNrV2hpdGVCbGFja1J1bjpmcm9tWCBmcm9tWTpmcm9tWSB0b1g6dG9YIHRvWTp0b1ldOworCisgIC8vIE5vdyBjb3VudCBvdGhlciB3YXkgLS0gZG9uJ3QgcnVuIG9mZiBpbWFnZSB0aG91Z2ggb2YgY291cnNlCisgIGZsb2F0IHNjYWxlID0gMS4wZjsKKyAgaW50IG90aGVyVG9YID0gZnJvbVggLSAodG9YIC0gZnJvbVgpOworICBpZiAob3RoZXJUb1ggPCAwKSB7CisgICAgc2NhbGUgPSAoZmxvYXQpZnJvbVggLyAoZmxvYXQpKGZyb21YIC0gb3RoZXJUb1gpOworICAgIG90aGVyVG9YID0gMDsKKyAgfSBlbHNlIGlmIChvdGhlclRvWCA+PSBzZWxmLmltYWdlLndpZHRoKSB7CisgICAgc2NhbGUgPSAoZmxvYXQpKHNlbGYuaW1hZ2Uud2lkdGggLSAxIC0gZnJvbVgpIC8gKGZsb2F0KShvdGhlclRvWCAtIGZyb21YKTsKKyAgICBvdGhlclRvWCA9IHNlbGYuaW1hZ2Uud2lkdGggLSAxOworICB9CisgIGludCBvdGhlclRvWSA9IChpbnQpKGZyb21ZIC0gKHRvWSAtIGZyb21ZKSAqIHNjYWxlKTsKKworICBzY2FsZSA9IDEuMGY7CisgIGlmIChvdGhlclRvWSA8IDApIHsKKyAgICBzY2FsZSA9IChmbG9hdClmcm9tWSAvIChmbG9hdCkoZnJvbVkgLSBvdGhlclRvWSk7CisgICAgb3RoZXJUb1kgPSAwOworICB9IGVsc2UgaWYgKG90aGVyVG9ZID49IHNlbGYuaW1hZ2UuaGVpZ2h0KSB7CisgICAgc2NhbGUgPSAoZmxvYXQpKHNlbGYuaW1hZ2UuaGVpZ2h0IC0gMSAtIGZyb21ZKSAvIChmbG9hdCkob3RoZXJUb1kgLSBmcm9tWSk7CisgICAgb3RoZXJUb1kgPSBzZWxmLmltYWdlLmhlaWdodCAtIDE7CisgIH0KKyAgb3RoZXJUb1ggPSAoaW50KShmcm9tWCArIChvdGhlclRvWCAtIGZyb21YKSAqIHNjYWxlKTsKKworICByZXN1bHQgKz0gW3NlbGYgc2l6ZU9mQmxhY2tXaGl0ZUJsYWNrUnVuOmZyb21YIGZyb21ZOmZyb21ZIHRvWDpvdGhlclRvWCB0b1k6b3RoZXJUb1ldOworCisgIC8vIE1pZGRsZSBwaXhlbCBpcyBkb3VibGUtY291bnRlZCB0aGlzIHdheTsgc3VidHJhY3QgMQorICByZXR1cm4gcmVzdWx0IC0gMS4wZjsKK30KKworLyoqCisgKiBUaGlzIG1ldGhvZCB0cmFjZXMgYSBsaW5lIGZyb20gYSBwb2ludCBpbiB0aGUgaW1hZ2UsIGluIHRoZSBkaXJlY3Rpb24gdG93YXJkcyBhbm90aGVyIHBvaW50LgorICogSXQgYmVnaW5zIGluIGEgYmxhY2sgcmVnaW9uLCBhbmQga2VlcHMgZ29pbmcgdW50aWwgaXQgZmluZHMgd2hpdGUsIHRoZW4gYmxhY2ssIHRoZW4gd2hpdGUgYWdhaW4uCisgKiBJdCByZXBvcnRzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBzdGFydCB0byB0aGlzIHBvaW50LgorICogCisgKiBUaGlzIGlzIHVzZWQgd2hlbiBmaWd1cmluZyBvdXQgaG93IHdpZGUgYSBmaW5kZXIgcGF0dGVybiBpcywgd2hlbiB0aGUgZmluZGVyIHBhdHRlcm4KKyAqIG1heSBiZSBza2V3ZWQgb3Igcm90YXRlZC4KKyAqLworLSAoZmxvYXQpc2l6ZU9mQmxhY2tXaGl0ZUJsYWNrUnVuOihpbnQpZnJvbVggZnJvbVk6KGludClmcm9tWSB0b1g6KGludCl0b1ggdG9ZOihpbnQpdG9ZIHsKKyAgLy8gTWlsZCB2YXJpYW50IG9mIEJyZXNlbmhhbSdzIGFsZ29yaXRobTsKKyAgLy8gc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQnJlc2VuaGFtJ3NfbGluZV9hbGdvcml0aG0KKyAgQk9PTCBzdGVlcCA9IGFicyh0b1kgLSBmcm9tWSkgPiBhYnModG9YIC0gZnJvbVgpOworICBpZiAoc3RlZXApIHsKKyAgICBpbnQgdGVtcCA9IGZyb21YOworICAgIGZyb21YID0gZnJvbVk7CisgICAgZnJvbVkgPSB0ZW1wOworICAgIHRlbXAgPSB0b1g7CisgICAgdG9YID0gdG9ZOworICAgIHRvWSA9IHRlbXA7CisgIH0KKworICBpbnQgZHggPSBhYnModG9YIC0gZnJvbVgpOworICBpbnQgZHkgPSBhYnModG9ZIC0gZnJvbVkpOworICBpbnQgZXJyb3IgPSAtZHggPj4gMTsKKyAgaW50IHhzdGVwID0gZnJvbVggPCB0b1ggPyAxIDogLTE7CisgIGludCB5c3RlcCA9IGZyb21ZIDwgdG9ZID8gMSA6IC0xOworCisgIC8vIEluIGJsYWNrIHBpeGVscywgbG9va2luZyBmb3Igd2hpdGUsIGZpcnN0IG9yIHNlY29uZCB0aW1lLgorICBpbnQgc3RhdGUgPSAwOworICAvLyBMb29wIHVwIHVudGlsIHggPT0gdG9YLCBidXQgbm90IGJleW9uZAorICBpbnQgeExpbWl0ID0gdG9YICsgeHN0ZXA7CisgIGZvciAoaW50IHggPSBmcm9tWCwgeSA9IGZyb21ZOyB4ICE9IHhMaW1pdDsgeCArPSB4c3RlcCkgeworICAgIGludCByZWFsWCA9IHN0ZWVwID8geSA6IHg7CisgICAgaW50IHJlYWxZID0gc3RlZXAgPyB4IDogeTsKKworICAgIC8vIERvZXMgY3VycmVudCBwaXhlbCBtZWFuIHdlIGhhdmUgbW92ZWQgd2hpdGUgdG8gYmxhY2sgb3IgdmljZSB2ZXJzYT8KKyAgICAvLyBTY2FubmluZyBibGFjayBpbiBzdGF0ZSAwLDIgYW5kIHdoaXRlIGluIHN0YXRlIDEsIHNvIGlmIHdlIGZpbmQgdGhlIHdyb25nCisgICAgLy8gY29sb3IsIGFkdmFuY2UgdG8gbmV4dCBzdGF0ZSBvciBlbmQgaWYgd2UgYXJlIGluIHN0YXRlIDIgYWxyZWFkeQorICAgIGlmICgoc3RhdGUgPT0gMSkgPT0gW3NlbGYuaW1hZ2UgZ2V0WDpyZWFsWCB5OnJlYWxZXSkgeworICAgICAgaWYgKHN0YXRlID09IDIpIHsKKyAgICAgICAgcmV0dXJuIFtaWE1hdGhVdGlscyBkaXN0YW5jZUludDp4IGFZOnkgYlg6ZnJvbVggYlk6ZnJvbVldOworICAgICAgfQorICAgICAgc3RhdGUrKzsKKyAgICB9CisKKyAgICBlcnJvciArPSBkeTsKKyAgICBpZiAoZXJyb3IgPiAwKSB7CisgICAgICBpZiAoeSA9PSB0b1kpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICB5ICs9IHlzdGVwOworICAgICAgZXJyb3IgLT0gZHg7CisgICAgfQorICB9CisgIC8vIEZvdW5kIGJsYWNrLXdoaXRlLWJsYWNrOyBnaXZlIHRoZSBiZW5lZml0IG9mIHRoZSBkb3VidCB0aGF0IHRoZSBuZXh0IHBpeGVsIG91dHNpZGUgdGhlIGltYWdlCisgIC8vIGlzICJ3aGl0ZSIgc28gdGhpcyBsYXN0IHBvaW50IGF0ICh0b1greFN0ZXAsdG9ZKSBpcyB0aGUgcmlnaHQgZW5kaW5nLiBUaGlzIGlzIHJlYWxseSBhCisgIC8vIHNtYWxsIGFwcHJveGltYXRpb247ICh0b1greFN0ZXAsdG9ZK3lTdGVwKSBtaWdodCBiZSByZWFsbHkgY29ycmVjdC4gSWdub3JlIHRoaXMuCisgIGlmIChzdGF0ZSA9PSAyKSB7CisgICAgcmV0dXJuIFtaWE1hdGhVdGlscyBkaXN0YW5jZUludDp0b1ggKyB4c3RlcCBhWTp0b1kgYlg6ZnJvbVggYlk6ZnJvbVldOworICB9CisgIC8vIGVsc2Ugd2UgZGlkbid0IGZpbmQgZXZlbiBibGFjay13aGl0ZS1ibGFjazsgbm8gZXN0aW1hdGUgaXMgcmVhbGx5IHBvc3NpYmxlCisgIHJldHVybiBOQU47Cit9CisKKy8qKgorICogQXR0ZW1wdHMgdG8gbG9jYXRlIGFuIGFsaWdubWVudCBwYXR0ZXJuIGluIGEgbGltaXRlZCByZWdpb24gb2YgdGhlIGltYWdlLCB3aGljaCBpcworICogZ3Vlc3NlZCB0byBjb250YWluIGl0LiBUaGlzIG1ldGhvZCB1c2VzIFpYQWxpZ25tZW50UGF0dGVybi4KKyAqLworLSAoWlhBbGlnbm1lbnRQYXR0ZXJuICopZmluZEFsaWdubWVudEluUmVnaW9uOihmbG9hdClvdmVyYWxsRXN0TW9kdWxlU2l6ZSBlc3RBbGlnbm1lbnRYOihpbnQpZXN0QWxpZ25tZW50WCBlc3RBbGlnbm1lbnRZOihpbnQpZXN0QWxpZ25tZW50WSBhbGxvd2FuY2VGYWN0b3I6KGZsb2F0KWFsbG93YW5jZUZhY3RvciBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGludCBhbGxvd2FuY2UgPSAoaW50KShhbGxvd2FuY2VGYWN0b3IgKiBvdmVyYWxsRXN0TW9kdWxlU2l6ZSk7CisgIGludCBhbGlnbm1lbnRBcmVhTGVmdFggPSBNQVgoMCwgZXN0QWxpZ25tZW50WCAtIGFsbG93YW5jZSk7CisgIGludCBhbGlnbm1lbnRBcmVhUmlnaHRYID0gTUlOKHNlbGYuaW1hZ2Uud2lkdGggLSAxLCBlc3RBbGlnbm1lbnRYICsgYWxsb3dhbmNlKTsKKyAgaWYgKGFsaWdubWVudEFyZWFSaWdodFggLSBhbGlnbm1lbnRBcmVhTGVmdFggPCBvdmVyYWxsRXN0TW9kdWxlU2l6ZSAqIDMpIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IE5vdEZvdW5kRXJyb3JJbnN0YW5jZSgpOworICAgIHJldHVybiBuaWw7CisgIH0KKworICBpbnQgYWxpZ25tZW50QXJlYVRvcFkgPSBNQVgoMCwgZXN0QWxpZ25tZW50WSAtIGFsbG93YW5jZSk7CisgIGludCBhbGlnbm1lbnRBcmVhQm90dG9tWSA9IE1JTihzZWxmLmltYWdlLmhlaWdodCAtIDEsIGVzdEFsaWdubWVudFkgKyBhbGxvd2FuY2UpOworICBpZiAoYWxpZ25tZW50QXJlYUJvdHRvbVkgLSBhbGlnbm1lbnRBcmVhVG9wWSA8IG92ZXJhbGxFc3RNb2R1bGVTaXplICogMykgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gTm90Rm91bmRFcnJvckluc3RhbmNlKCk7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIFpYQWxpZ25tZW50UGF0dGVybkZpbmRlciAqYWxpZ25tZW50RmluZGVyID0gW1taWEFsaWdubWVudFBhdHRlcm5GaW5kZXIgYWxsb2NdIGluaXRXaXRoSW1hZ2U6c2VsZi5pbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYOmFsaWdubWVudEFyZWFMZWZ0WAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRZOmFsaWdubWVudEFyZWFUb3BZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6YWxpZ25tZW50QXJlYVJpZ2h0WCAtIGFsaWdubWVudEFyZWFMZWZ0WAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OmFsaWdubWVudEFyZWFCb3R0b21ZIC0gYWxpZ25tZW50QXJlYVRvcFkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlU2l6ZTpvdmVyYWxsRXN0TW9kdWxlU2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRQb2ludENhbGxiYWNrOnNlbGYucmVzdWx0UG9pbnRDYWxsYmFja107CisgIHJldHVybiBbYWxpZ25tZW50RmluZGVyIGZpbmRXaXRoRXJyb3I6ZXJyb3JdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2RldGVjdG9yL1pYUVJDb2RlRmluZGVyUGF0dGVybi5oIGIvWlhpbmdPYmpDL3FyY29kZS9kZXRlY3Rvci9aWFFSQ29kZUZpbmRlclBhdHRlcm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmM1YmE3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3FyY29kZS9kZXRlY3Rvci9aWFFSQ29kZUZpbmRlclBhdHRlcm4uaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFJlc3VsdFBvaW50LmgiCisKKy8qKgorICogRW5jYXBzdWxhdGVzIGEgZmluZGVyIHBhdHRlcm4sIHdoaWNoIGFyZSB0aGUgdGhyZWUgc3F1YXJlIHBhdHRlcm5zIGZvdW5kIGluCisgKiB0aGUgY29ybmVycyBvZiBRUiBDb2Rlcy4gSXQgYWxzbyBlbmNhcHN1bGF0ZXMgYSBjb3VudCBvZiBzaW1pbGFyIGZpbmRlciBwYXR0ZXJucywKKyAqIGFzIGEgY29udmVuaWVuY2UgdG8gdGhlIGZpbmRlcidzIGJvb2trZWVwaW5nLgorICovCisKK0BpbnRlcmZhY2UgWlhRUkNvZGVGaW5kZXJQYXR0ZXJuIDogWlhSZXN1bHRQb2ludAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGNvdW50OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGZsb2F0IGVzdGltYXRlZE1vZHVsZVNpemU7CisKKy0gKGlkKWluaXRXaXRoUG9zWDooZmxvYXQpcG9zWCBwb3NZOihmbG9hdClwb3NZIGVzdGltYXRlZE1vZHVsZVNpemU6KGZsb2F0KWVzdGltYXRlZE1vZHVsZVNpemU7CistIChpZClpbml0V2l0aFBvc1g6KGZsb2F0KXBvc1ggcG9zWTooZmxvYXQpcG9zWSBlc3RpbWF0ZWRNb2R1bGVTaXplOihmbG9hdCllc3RpbWF0ZWRNb2R1bGVTaXplIGNvdW50OihpbnQpY291bnQ7CistICh2b2lkKWluY3JlbWVudENvdW50OworLSAoQk9PTClhYm91dEVxdWFsczooZmxvYXQpbW9kdWxlU2l6ZSBpOihmbG9hdClpIGo6KGZsb2F0KWo7CistIChaWFFSQ29kZUZpbmRlclBhdHRlcm4gKiljb21iaW5lRXN0aW1hdGVJOihmbG9hdClpIGo6KGZsb2F0KWogbmV3TW9kdWxlU2l6ZTooZmxvYXQpbmV3TW9kdWxlU2l6ZTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9kZXRlY3Rvci9aWFFSQ29kZUZpbmRlclBhdHRlcm4ubSBiL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhRUkNvZGVGaW5kZXJQYXR0ZXJuLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyNzc2MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZGV0ZWN0b3IvWlhRUkNvZGVGaW5kZXJQYXR0ZXJuLm0KQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhRUkNvZGVGaW5kZXJQYXR0ZXJuLmgiCisKK0BpbnRlcmZhY2UgWlhRUkNvZGVGaW5kZXJQYXR0ZXJuICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb3VudDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gWlhRUkNvZGVGaW5kZXJQYXR0ZXJuCisKKy0gKGlkKWluaXRXaXRoUG9zWDooZmxvYXQpcG9zWCBwb3NZOihmbG9hdClwb3NZIGVzdGltYXRlZE1vZHVsZVNpemU6KGZsb2F0KWVzdGltYXRlZE1vZHVsZVNpemUgeworICByZXR1cm4gW3NlbGYgaW5pdFdpdGhQb3NYOnBvc1ggcG9zWTpwb3NZIGVzdGltYXRlZE1vZHVsZVNpemU6ZXN0aW1hdGVkTW9kdWxlU2l6ZSBjb3VudDoxXTsKK30KKworLSAoaWQpaW5pdFdpdGhQb3NYOihmbG9hdClwb3NYIHBvc1k6KGZsb2F0KXBvc1kgZXN0aW1hdGVkTW9kdWxlU2l6ZTooZmxvYXQpZXN0aW1hdGVkTW9kdWxlU2l6ZSBjb3VudDooaW50KWNvdW50IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhYOnBvc1ggeTpwb3NZXSkgeworICAgIF9lc3RpbWF0ZWRNb2R1bGVTaXplID0gZXN0aW1hdGVkTW9kdWxlU2l6ZTsKKyAgICBfY291bnQgPSBjb3VudDsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWluY3JlbWVudENvdW50IHsKKyAgc2VsZi5jb3VudCsrOworfQorCisvKioKKyAqIERldGVybWluZXMgaWYgdGhpcyBmaW5kZXIgcGF0dGVybiAiYWJvdXQgZXF1YWxzIiBhIGZpbmRlciBwYXR0ZXJuIGF0IHRoZSBzdGF0ZWQKKyAqIHBvc2l0aW9uIGFuZCBzaXplIC0tIG1lYW5pbmcsIGl0IGlzIGF0IG5lYXJseSB0aGUgc2FtZSBjZW50ZXIgd2l0aCBuZWFybHkgdGhlIHNhbWUgc2l6ZS4KKyAqLworLSAoQk9PTClhYm91dEVxdWFsczooZmxvYXQpbW9kdWxlU2l6ZSBpOihmbG9hdClpIGo6KGZsb2F0KWogeworICBpZiAoZmFic2YoaSAtIFtzZWxmIHldKSA8PSBtb2R1bGVTaXplICYmIGZhYnNmKGogLSBbc2VsZiB4XSkgPD0gbW9kdWxlU2l6ZSkgeworICAgIGZsb2F0IG1vZHVsZVNpemVEaWZmID0gZmFic2YobW9kdWxlU2l6ZSAtIHNlbGYuZXN0aW1hdGVkTW9kdWxlU2l6ZSk7CisgICAgcmV0dXJuIG1vZHVsZVNpemVEaWZmIDw9IDEuMGYgfHwgbW9kdWxlU2l6ZURpZmYgPD0gc2VsZi5lc3RpbWF0ZWRNb2R1bGVTaXplOworICB9CisgIHJldHVybiBOTzsKK30KKworLyoqCisgKiBDb21iaW5lcyB0aGlzIG9iamVjdCdzIGN1cnJlbnQgZXN0aW1hdGUgb2YgYSBmaW5kZXIgcGF0dGVybiBwb3NpdGlvbiBhbmQgbW9kdWxlIHNpemUKKyAqIHdpdGggYSBuZXcgZXN0aW1hdGUuIEl0IHJldHVybnMgYSBuZXcgWlhRUkNvZGVGaW5kZXJQYXR0ZXJuIGNvbnRhaW5pbmcgYSB3ZWlnaHRlZCBhdmVyYWdlCisgKiBiYXNlZCBvbiBjb3VudC4KKyAqLworLSAoWlhRUkNvZGVGaW5kZXJQYXR0ZXJuICopY29tYmluZUVzdGltYXRlSTooZmxvYXQpaSBqOihmbG9hdClqIG5ld01vZHVsZVNpemU6KGZsb2F0KW5ld01vZHVsZVNpemUgeworICBpbnQgY29tYmluZWRDb3VudCA9IHNlbGYuY291bnQgKyAxOworICBmbG9hdCBjb21iaW5lZFggPSAoc2VsZi5jb3VudCAqIHNlbGYueCArIGopIC8gY29tYmluZWRDb3VudDsKKyAgZmxvYXQgY29tYmluZWRZID0gKHNlbGYuY291bnQgKiBzZWxmLnkgKyBpKSAvIGNvbWJpbmVkQ291bnQ7CisgIGZsb2F0IGNvbWJpbmVkTW9kdWxlU2l6ZSA9IChzZWxmLmNvdW50ICogc2VsZi5lc3RpbWF0ZWRNb2R1bGVTaXplICsgbmV3TW9kdWxlU2l6ZSkgLyBjb21iaW5lZENvdW50OworICByZXR1cm4gW1taWFFSQ29kZUZpbmRlclBhdHRlcm4gYWxsb2NdIGluaXRXaXRoUG9zWDpjb21iaW5lZFgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NZOmNvbWJpbmVkWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZE1vZHVsZVNpemU6Y29tYmluZWRNb2R1bGVTaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDpjb21iaW5lZENvdW50XTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9lbmNvZGVyL1pYQmxvY2tQYWlyLmggYi9aWGluZ09iakMvcXJjb2RlL2VuY29kZXIvWlhCbG9ja1BhaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTA3MjYwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3FyY29kZS9lbmNvZGVyL1pYQmxvY2tQYWlyLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGludGVyZmFjZSBaWEJsb2NrUGFpciA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQ4X3QgKmRhdGFCeXRlczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHJlYWRvbmx5KSBpbnQ4X3QgKmVycm9yQ29ycmVjdGlvbkJ5dGVzOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBlcnJvckNvcnJlY3Rpb25MZW5ndGg7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IGxlbmd0aDsKKworLSAoaWQpaW5pdFdpdGhEYXRhOihpbnQ4X3QgKilkYXRhIGxlbmd0aDoodW5zaWduZWQgaW50KWxlbmd0aCBlcnJvckNvcnJlY3Rpb246KGludDhfdCAqKWVycm9yQ29ycmVjdGlvbiBlcnJvckNvcnJlY3Rpb25MZW5ndGg6KHVuc2lnbmVkIGludCllcnJvckNvcnJlY3Rpb25MZW5ndGg7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWEJsb2NrUGFpci5tIGIvWlhpbmdPYmpDL3FyY29kZS9lbmNvZGVyL1pYQmxvY2tQYWlyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwYWI3ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWEJsb2NrUGFpci5tCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQmxvY2tQYWlyLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEJsb2NrUGFpcgorCistIChpZClpbml0V2l0aERhdGE6KGludDhfdCAqKWRhdGEgbGVuZ3RoOih1bnNpZ25lZCBpbnQpbGVuZ3RoIGVycm9yQ29ycmVjdGlvbjooaW50OF90ICopZXJyb3JDb3JyZWN0aW9uIGVycm9yQ29ycmVjdGlvbkxlbmd0aDoodW5zaWduZWQgaW50KWVycm9yQ29ycmVjdGlvbkxlbmd0aCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX2RhdGFCeXRlcyA9IChpbnQ4X3QgKiltYWxsb2MobGVuZ3RoICogc2l6ZW9mKGludDhfdCkpOworICAgIG1lbWNweShfZGF0YUJ5dGVzLCBkYXRhLCBsZW5ndGggKiBzaXplb2YoaW50OF90KSk7CisgICAgX2Vycm9yQ29ycmVjdGlvbkJ5dGVzID0gKGludDhfdCAqKW1hbGxvYyhlcnJvckNvcnJlY3Rpb25MZW5ndGggKiBzaXplb2YoaW50OF90KSk7CisgICAgbWVtY3B5KF9lcnJvckNvcnJlY3Rpb25CeXRlcywgZXJyb3JDb3JyZWN0aW9uLCBlcnJvckNvcnJlY3Rpb25MZW5ndGgpOworICAgIF9sZW5ndGggPSBsZW5ndGg7CisgICAgX2Vycm9yQ29ycmVjdGlvbkxlbmd0aCA9IGVycm9yQ29ycmVjdGlvbkxlbmd0aDsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MgeworICBpZiAoX2RhdGFCeXRlcyAhPSBOVUxMKSB7CisgICAgZnJlZShfZGF0YUJ5dGVzKTsKKyAgICBfZGF0YUJ5dGVzID0gTlVMTDsKKyAgfQorCisgIGlmIChfZXJyb3JDb3JyZWN0aW9uQnl0ZXMgIT0gTlVMTCkgeworICAgIGZyZWUoX2Vycm9yQ29ycmVjdGlvbkJ5dGVzKTsKKyAgICBfZXJyb3JDb3JyZWN0aW9uQnl0ZXMgPSBOVUxMOworICB9Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWEJ5dGVNYXRyaXguaCBiL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWEJ5dGVNYXRyaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTA0ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3FyY29kZS9lbmNvZGVyL1pYQnl0ZU1hdHJpeC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BpbnRlcmZhY2UgWlhCeXRlTWF0cml4IDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludCBoZWlnaHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCByZWFkb25seSkgaW50IHdpZHRoOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgcmVhZG9ubHkpIGludDhfdCAqKmFycmF5OworCistIChpZClpbml0V2l0aFdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0OworLSAoY2hhcilnZXRYOihpbnQpeCB5OihpbnQpeTsKKy0gKHZvaWQpc2V0WDooaW50KXggeTooaW50KXkgY2hhclZhbHVlOihjaGFyKXZhbHVlOworLSAodm9pZClzZXRYOihpbnQpeCB5OihpbnQpeSBpbnRWYWx1ZTooaW50KXZhbHVlOworLSAodm9pZClzZXRYOihpbnQpeCB5OihpbnQpeSBib29sVmFsdWU6KEJPT0wpdmFsdWU7CistICh2b2lkKWNsZWFyOihjaGFyKXZhbHVlOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2VuY29kZXIvWlhCeXRlTWF0cml4Lm0gYi9aWGluZ09iakMvcXJjb2RlL2VuY29kZXIvWlhCeXRlTWF0cml4Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViZWZhOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWEJ5dGVNYXRyaXgubQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJ5dGVNYXRyaXguaCIKKworQGltcGxlbWVudGF0aW9uIFpYQnl0ZU1hdHJpeAorCistIChpZClpbml0V2l0aFdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfd2lkdGggPSB3aWR0aDsKKyAgICBfaGVpZ2h0ID0gaGVpZ2h0OworCisgICAgX2FycmF5ID0gKGludDhfdCAqKiltYWxsb2MoaGVpZ2h0ICogc2l6ZW9mKGludDhfdCAqKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgX2FycmF5W2ldID0gKGludDhfdCAqKW1hbGxvYyh3aWR0aCAqIHNpemVvZihpbnQ4X3QpKTsKKyAgICB9CisgICAgW3NlbGYgY2xlYXI6MF07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jIHsKKyAgaWYgKF9hcnJheSAhPSBOVUxMKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxmLmhlaWdodDsgaSsrKSB7CisgICAgICBmcmVlKF9hcnJheVtpXSk7CisgICAgfQorICAgIGZyZWUoX2FycmF5KTsKKyAgICBfYXJyYXkgPSBOVUxMOworICB9Cit9CisKKy0gKGNoYXIpZ2V0WDooaW50KXggeTooaW50KXkgeworICByZXR1cm4gc2VsZi5hcnJheVt5XVt4XTsKK30KKworLSAodm9pZClzZXRYOihpbnQpeCB5OihpbnQpeSBjaGFyVmFsdWU6KGNoYXIpdmFsdWUgeworICBzZWxmLmFycmF5W3ldW3hdID0gdmFsdWU7Cit9CisKKy0gKHZvaWQpc2V0WDooaW50KXggeTooaW50KXkgaW50VmFsdWU6KGludCl2YWx1ZSB7CisgIHNlbGYuYXJyYXlbeV1beF0gPSAoY2hhcil2YWx1ZTsKK30KKworLSAodm9pZClzZXRYOihpbnQpeCB5OihpbnQpeSBib29sVmFsdWU6KEJPT0wpdmFsdWUgeworICBzZWxmLmFycmF5W3ldW3hdID0gKGNoYXIpdmFsdWU7Cit9CisKKy0gKHZvaWQpY2xlYXI6KGNoYXIpdmFsdWUgeworICBmb3IgKGludCB5ID0gMDsgeSA8IHNlbGYuaGVpZ2h0OyArK3kpIHsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHNlbGYud2lkdGg7ICsreCkgeworICAgICAgc2VsZi5hcnJheVt5XVt4XSA9IHZhbHVlOworICAgIH0KKyAgfQorfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKKyAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisKKyAgZm9yIChpbnQgeSA9IDA7IHkgPCBzZWxmLmhlaWdodDsgKyt5KSB7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBzZWxmLndpZHRoOyArK3gpIHsKKyAgICAgIHN3aXRjaCAoc2VsZi5hcnJheVt5XVt4XSkgeworICAgICAgY2FzZSAwOgorICAgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIiAwIl07CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxOgorICAgICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIiAxIl07CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIgICJdOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIlxuIl07CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2VuY29kZXIvWlhFbmNvZGVyLmggYi9aWGluZ09iakMvcXJjb2RlL2VuY29kZXIvWlhFbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkYWI0MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWEVuY29kZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAY2xhc3MgWlhCaXRBcnJheSwgWlhFbmNvZGVIaW50cywgWlhFcnJvckNvcnJlY3Rpb25MZXZlbCwgWlhNb2RlLCBaWFFSQ29kZSwgWlhRUkNvZGVWZXJzaW9uOworCitleHRlcm4gY29uc3QgTlNTdHJpbmdFbmNvZGluZyBERUZBVUxUX0JZVEVfTU9ERV9FTkNPRElORzsKKworQGludGVyZmFjZSBaWEVuY29kZXIgOiBOU09iamVjdAorCisrIChaWFFSQ29kZSAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50IGVjTGV2ZWw6KFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillY0xldmVsIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworKyAoWlhRUkNvZGUgKillbmNvZGU6KE5TU3RyaW5nICopY29udGVudCBlY0xldmVsOihaWEVycm9yQ29ycmVjdGlvbkxldmVsICopZWNMZXZlbCBoaW50czooWlhFbmNvZGVIaW50cyAqKWhpbnRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworKyAoaW50KWFscGhhbnVtZXJpY0NvZGU6KGludCljb2RlOworKyAoWlhNb2RlICopY2hvb3NlTW9kZTooTlNTdHJpbmcgKiljb250ZW50OworKyAoQk9PTCl0ZXJtaW5hdGVCaXRzOihpbnQpbnVtRGF0YUJ5dGVzIGJpdHM6KFpYQml0QXJyYXkgKiliaXRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworKyAoQk9PTCludW1EYXRhQnl0ZXNBbmROdW1FQ0J5dGVzRm9yQmxvY2tJRDooaW50KW51bVRvdGFsQnl0ZXMgbnVtRGF0YUJ5dGVzOihpbnQpbnVtRGF0YUJ5dGVzIG51bVJTQmxvY2tzOihpbnQpbnVtUlNCbG9ja3MgYmxvY2tJRDooaW50KWJsb2NrSUQgbnVtRGF0YUJ5dGVzSW5CbG9jazooaW50W10pbnVtRGF0YUJ5dGVzSW5CbG9jayBudW1FQ0J5dGVzSW5CbG9jazooaW50W10pbnVtRUNCeXRlc0luQmxvY2sgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisrIChaWEJpdEFycmF5ICopaW50ZXJsZWF2ZVdpdGhFQ0J5dGVzOihaWEJpdEFycmF5ICopYml0cyBudW1Ub3RhbEJ5dGVzOihpbnQpbnVtVG90YWxCeXRlcyBudW1EYXRhQnl0ZXM6KGludCludW1EYXRhQnl0ZXMgbnVtUlNCbG9ja3M6KGludCludW1SU0Jsb2NrcyBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKysgKGludDhfdCAqKWdlbmVyYXRlRUNCeXRlczooaW50OF90ICopZGF0YUJ5dGVzIG51bURhdGFCeXRlczooaW50KW51bURhdGFCeXRlcyBudW1FY0J5dGVzSW5CbG9jazooaW50KW51bUVjQnl0ZXNJbkJsb2NrOworKyAodm9pZClhcHBlbmRNb2RlSW5mbzooWlhNb2RlICopbW9kZSBiaXRzOihaWEJpdEFycmF5ICopYml0czsKKysgKEJPT0wpYXBwZW5kTGVuZ3RoSW5mbzooaW50KW51bUxldHRlcnMgdmVyc2lvbjooWlhRUkNvZGVWZXJzaW9uICopdmVyc2lvbiBtb2RlOihaWE1vZGUgKiltb2RlIGJpdHM6KFpYQml0QXJyYXkgKiliaXRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworKyAoQk9PTClhcHBlbmRCeXRlczooTlNTdHJpbmcgKiljb250ZW50IG1vZGU6KFpYTW9kZSAqKW1vZGUgYml0czooWlhCaXRBcnJheSAqKWJpdHMgZW5jb2Rpbmc6KE5TU3RyaW5nRW5jb2RpbmcpZW5jb2RpbmcgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisrICh2b2lkKWFwcGVuZE51bWVyaWNCeXRlczooTlNTdHJpbmcgKiljb250ZW50IGJpdHM6KFpYQml0QXJyYXkgKiliaXRzOworKyAoQk9PTClhcHBlbmRBbHBoYW51bWVyaWNCeXRlczooTlNTdHJpbmcgKiljb250ZW50IGJpdHM6KFpYQml0QXJyYXkgKiliaXRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworKyAodm9pZClhcHBlbmQ4Qml0Qnl0ZXM6KE5TU3RyaW5nICopY29udGVudCBiaXRzOihaWEJpdEFycmF5ICopYml0cyBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZyllbmNvZGluZzsKKysgKEJPT0wpYXBwZW5kS2FuamlCeXRlczooTlNTdHJpbmcgKiljb250ZW50IGJpdHM6KFpYQml0QXJyYXkgKiliaXRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2VuY29kZXIvWlhFbmNvZGVyLm0gYi9aWGluZ09iakMvcXJjb2RlL2VuY29kZXIvWlhFbmNvZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzMzdlMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWEVuY29kZXIubQpAQCAtMCwwICsxLDU5OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRBcnJheS5oIgorI2ltcG9ydCAiWlhCbG9ja1BhaXIuaCIKKyNpbXBvcnQgIlpYQnl0ZU1hdHJpeC5oIgorI2ltcG9ydCAiWlhDaGFyYWN0ZXJTZXRFQ0kuaCIKKyNpbXBvcnQgIlpYRUNJLmgiCisjaW1wb3J0ICJaWEVuY29kZXIuaCIKKyNpbXBvcnQgIlpYRW5jb2RlSGludHMuaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEVycm9yQ29ycmVjdGlvbkxldmVsLmgiCisjaW1wb3J0ICJaWEdlbmVyaWNHRi5oIgorI2ltcG9ydCAiWlhNYXNrVXRpbC5oIgorI2ltcG9ydCAiWlhNYXRyaXhVdGlsLmgiCisjaW1wb3J0ICJaWE1vZGUuaCIKKyNpbXBvcnQgIlpYUVJDb2RlVmVyc2lvbi5oIgorI2ltcG9ydCAiWlhRUkNvZGUuaCIKKyNpbXBvcnQgIlpYUmVlZFNvbG9tb25FbmNvZGVyLmgiCisKKy8vIFRoZSBvcmlnaW5hbCB0YWJsZSBpcyBkZWZpbmVkIGluIHRoZSB0YWJsZSA1IG9mIEpJU1gwNTEwOjIwMDQgKHAuMTkpLgorY29uc3QgaW50IEFMUEhBTlVNRVJJQ19UQUJMRVs5Nl0gPSB7CisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAgLy8gMHgwMC0weDBmCisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAgLy8gMHgxMC0weDFmCisgIDM2LCAtMSwgLTEsIC0xLCAzNywgMzgsIC0xLCAtMSwgLTEsIC0xLCAzOSwgNDAsIC0xLCA0MSwgNDIsIDQzLCAgLy8gMHgyMC0weDJmCisgIDAsICAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywgIDgsICA5LCA0NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAgLy8gMHgzMC0weDNmCisgIC0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAgLy8gMHg0MC0weDRmCisgIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAgLy8gMHg1MC0weDVmCit9OworCitjb25zdCBOU1N0cmluZ0VuY29kaW5nIERFRkFVTFRfQllURV9NT0RFX0VOQ09ESU5HID0gTlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZzsKKworQGltcGxlbWVudGF0aW9uIFpYRW5jb2RlcgorCisrIChpbnQpY2FsY3VsYXRlTWFza1BlbmFsdHk6KFpYQnl0ZU1hdHJpeCAqKW1hdHJpeCB7CisgIHJldHVybiBbWlhNYXNrVXRpbCBhcHBseU1hc2tQZW5hbHR5UnVsZTE6bWF0cml4XQorICAgICsgW1pYTWFza1V0aWwgYXBwbHlNYXNrUGVuYWx0eVJ1bGUyOm1hdHJpeF0KKyAgICArIFtaWE1hc2tVdGlsIGFwcGx5TWFza1BlbmFsdHlSdWxlMzptYXRyaXhdCisgICAgKyBbWlhNYXNrVXRpbCBhcHBseU1hc2tQZW5hbHR5UnVsZTQ6bWF0cml4XTsKK30KKworLyoqCisgKiBFbmNvZGUgImJ5dGVzIiB3aXRoIHRoZSBlcnJvciBjb3JyZWN0aW9uIGxldmVsICJlY0xldmVsIi4gVGhlIGVuY29kaW5nIG1vZGUgd2lsbCBiZSBjaG9zZW4KKyAqIGludGVybmFsbHkgYnkgY2hvb3NlTW9kZSgpLiBPbiBzdWNjZXNzLCBzdG9yZSB0aGUgcmVzdWx0IGluICJxckNvZGUiLgorICogCisgKiBXZSByZWNvbW1lbmQgeW91IHRvIHVzZSBRUkNvZGUuRUNfTEVWRUxfTCAodGhlIGxvd2VzdCBsZXZlbCkgZm9yCisgKiAiZ2V0RUNMZXZlbCIgc2luY2Ugb3VyIHByaW1hcnkgdXNlIGlzIHRvIHNob3cgUVIgY29kZSBvbiBkZXNrdG9wIHNjcmVlbnMuIFdlIGRvbid0IG5lZWQgdmVyeQorICogc3Ryb25nIGVycm9yIGNvcnJlY3Rpb24gZm9yIHRoaXMgcHVycG9zZS4KKyAqIAorICogTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSB0byBlbmNvZGUgYnl0ZXMgaW4gTU9ERV9LQU5KSS4gV2UgbWlnaHQgd2FudCB0byBhZGQgRW5jb2RlV2l0aE1vZGUoKQorICogd2l0aCB3aGljaCBjbGllbnRzIGNhbiBzcGVjaWZ5IHRoZSBlbmNvZGluZyBtb2RlLiBGb3Igbm93LCB3ZSBkb24ndCBuZWVkIHRoZSBmdW5jdGlvbmFsaXR5LgorICovCisrIChaWFFSQ29kZSAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50IGVjTGV2ZWw6KFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillY0xldmVsIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgcmV0dXJuIFtzZWxmIGVuY29kZTpjb250ZW50IGVjTGV2ZWw6ZWNMZXZlbCBoaW50czpuaWwgZXJyb3I6ZXJyb3JdOworfQorCisrIChaWFFSQ29kZSAqKWVuY29kZTooTlNTdHJpbmcgKiljb250ZW50IGVjTGV2ZWw6KFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillY0xldmVsIGhpbnRzOihaWEVuY29kZUhpbnRzICopaGludHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICAvLyBEZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXIgZW5jb2RpbmcgaGFzIGJlZW4gc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIsIGlmIGFueQorICBOU1N0cmluZ0VuY29kaW5nIGVuY29kaW5nID0gaGludHMgPT0gbmlsID8gMCA6IGhpbnRzLmVuY29kaW5nOworICBpZiAoZW5jb2RpbmcgPT0gMCkgeworICAgIGVuY29kaW5nID0gREVGQVVMVF9CWVRFX01PREVfRU5DT0RJTkc7CisgIH0KKworICAvLyBQaWNrIGFuIGVuY29kaW5nIG1vZGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBjb250ZW50LiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCBhdHRlbXB0IHRvIHVzZQorICAvLyBtdWx0aXBsZSBtb2RlcyAvIHNlZ21lbnRzIGV2ZW4gaWYgdGhhdCB3ZXJlIG1vcmUgZWZmaWNpZW50LiBUd291bGQgYmUgbmljZS4KKyAgWlhNb2RlICptb2RlID0gW3NlbGYgY2hvb3NlTW9kZTpjb250ZW50IGVuY29kaW5nOmVuY29kaW5nXTsKKworICAvLyBUaGlzIHdpbGwgc3RvcmUgdGhlIGhlYWRlciBpbmZvcm1hdGlvbiwgbGlrZSBtb2RlIGFuZAorICAvLyBsZW5ndGgsIGFzIHdlbGwgYXMgImhlYWRlciIgc2VnbWVudHMgbGlrZSBhbiBFQ0kgc2VnbWVudC4KKyAgWlhCaXRBcnJheSAqaGVhZGVyQml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisKKyAgLy8gQXBwZW5kIEVDSSBzZWdtZW50IGlmIGFwcGxpY2FibGUKKyAgaWYgKFttb2RlIGlzRXF1YWw6W1pYTW9kZSBieXRlTW9kZV1dICYmIERFRkFVTFRfQllURV9NT0RFX0VOQ09ESU5HICE9IGVuY29kaW5nKSB7CisgICAgWlhDaGFyYWN0ZXJTZXRFQ0kgKmVjaSA9IFtaWENoYXJhY3RlclNldEVDSSBjaGFyYWN0ZXJTZXRFQ0lCeUVuY29kaW5nOmVuY29kaW5nXTsKKyAgICBpZiAoZWNpICE9IG5pbCkgeworICAgICAgW3NlbGYgYXBwZW5kRUNJOmVjaSBiaXRzOmhlYWRlckJpdHNdOworICAgIH0KKyAgfQorCisgIC8vIChXaXRoIEVDSSBpbiBwbGFjZSwpIFdyaXRlIHRoZSBtb2RlIG1hcmtlcgorICBbc2VsZiBhcHBlbmRNb2RlSW5mbzptb2RlIGJpdHM6aGVhZGVyQml0c107CisKKyAgLy8gQ29sbGVjdCBkYXRhIHdpdGhpbiB0aGUgbWFpbiBzZWdtZW50LCBzZXBhcmF0ZWx5LCB0byBjb3VudCBpdHMgc2l6ZSBpZiBuZWVkZWQuIERvbid0IGFkZCBpdCB0bworICAvLyBtYWluIHBheWxvYWQgeWV0LgorICBaWEJpdEFycmF5ICpkYXRhQml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIGlmICghW3NlbGYgYXBwZW5kQnl0ZXM6Y29udGVudCBtb2RlOm1vZGUgYml0czpkYXRhQml0cyBlbmNvZGluZzplbmNvZGluZyBlcnJvcjplcnJvcl0pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgLy8gSGFyZCBwYXJ0OiBuZWVkIHRvIGtub3cgdmVyc2lvbiB0byBrbm93IGhvdyBtYW55IGJpdHMgbGVuZ3RoIHRha2VzLiBCdXQgbmVlZCB0byBrbm93IGhvdyBtYW55CisgIC8vIGJpdHMgaXQgdGFrZXMgdG8ga25vdyB2ZXJzaW9uLiBGaXJzdCB3ZSB0YWtlIGEgZ3Vlc3MgYXQgdmVyc2lvbiBieSBhc3N1bWluZyB2ZXJzaW9uIHdpbGwgYmUKKyAgLy8gdGhlIG1pbmltdW0sIDE6CisKKyAgaW50IHByb3Zpc2lvbmFsQml0c05lZWRlZCA9IGhlYWRlckJpdHMuc2l6ZQorICAgICsgW21vZGUgY2hhcmFjdGVyQ291bnRCaXRzOltaWFFSQ29kZVZlcnNpb24gdmVyc2lvbkZvck51bWJlcjoxXV0KKyAgICArIGRhdGFCaXRzLnNpemU7CisgIFpYUVJDb2RlVmVyc2lvbiAqcHJvdmlzaW9uYWxWZXJzaW9uID0gW3NlbGYgY2hvb3NlVmVyc2lvbjpwcm92aXNpb25hbEJpdHNOZWVkZWQgZWNMZXZlbDplY0xldmVsIGVycm9yOmVycm9yXTsKKyAgaWYgKCFwcm92aXNpb25hbFZlcnNpb24pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgLy8gVXNlIHRoYXQgZ3Vlc3MgdG8gY2FsY3VsYXRlIHRoZSByaWdodCB2ZXJzaW9uLiBJIGFtIHN0aWxsIG5vdCBzdXJlIHRoaXMgd29ya3MgaW4gMTAwJSBvZiBjYXNlcy4KKworICBpbnQgYml0c05lZWRlZCA9IGhlYWRlckJpdHMuc2l6ZQorICAgICsgW21vZGUgY2hhcmFjdGVyQ291bnRCaXRzOnByb3Zpc2lvbmFsVmVyc2lvbl0KKyAgICArIGRhdGFCaXRzLnNpemU7CisgIFpYUVJDb2RlVmVyc2lvbiAqdmVyc2lvbiA9IFtzZWxmIGNob29zZVZlcnNpb246Yml0c05lZWRlZCBlY0xldmVsOmVjTGV2ZWwgZXJyb3I6ZXJyb3JdOworICBpZiAoIXZlcnNpb24pIHsKKyAgICByZXR1cm4gbmlsOworICB9CisKKyAgWlhCaXRBcnJheSAqaGVhZGVyQW5kRGF0YUJpdHMgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbaGVhZGVyQW5kRGF0YUJpdHMgYXBwZW5kQml0QXJyYXk6aGVhZGVyQml0c107CisgIC8vIEZpbmQgImxlbmd0aCIgb2YgbWFpbiBzZWdtZW50IGFuZCB3cml0ZSBpdAorICBpbnQgbnVtTGV0dGVycyA9IFttb2RlIGlzRXF1YWw6W1pYTW9kZSBieXRlTW9kZV1dID8gW2RhdGFCaXRzIHNpemVJbkJ5dGVzXSA6IChpbnQpW2NvbnRlbnQgbGVuZ3RoXTsKKyAgaWYgKCFbc2VsZiBhcHBlbmRMZW5ndGhJbmZvOm51bUxldHRlcnMgdmVyc2lvbjp2ZXJzaW9uIG1vZGU6bW9kZSBiaXRzOmhlYWRlckFuZERhdGFCaXRzIGVycm9yOmVycm9yXSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgLy8gUHV0IGRhdGEgdG9nZXRoZXIgaW50byB0aGUgb3ZlcmFsbCBwYXlsb2FkCisgIFtoZWFkZXJBbmREYXRhQml0cyBhcHBlbmRCaXRBcnJheTpkYXRhQml0c107CisKKyAgWlhRUkNvZGVFQ0Jsb2NrcyAqZWNCbG9ja3MgPSBbdmVyc2lvbiBlY0Jsb2Nrc0ZvckxldmVsOmVjTGV2ZWxdOworICBpbnQgbnVtRGF0YUJ5dGVzID0gdmVyc2lvbi50b3RhbENvZGV3b3JkcyAtIGVjQmxvY2tzLnRvdGFsRUNDb2Rld29yZHM7CisKKyAgLy8gVGVybWluYXRlIHRoZSBiaXRzIHByb3Blcmx5LgorICBpZiAoIVtzZWxmIHRlcm1pbmF0ZUJpdHM6bnVtRGF0YUJ5dGVzIGJpdHM6aGVhZGVyQW5kRGF0YUJpdHMgZXJyb3I6ZXJyb3JdKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIC8vIEludGVybGVhdmUgZGF0YSBiaXRzIHdpdGggZXJyb3IgY29ycmVjdGlvbiBjb2RlLgorICBaWEJpdEFycmF5ICpmaW5hbEJpdHMgPSBbc2VsZiBpbnRlcmxlYXZlV2l0aEVDQnl0ZXM6aGVhZGVyQW5kRGF0YUJpdHMgbnVtVG90YWxCeXRlczp2ZXJzaW9uLnRvdGFsQ29kZXdvcmRzIG51bURhdGFCeXRlczpudW1EYXRhQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVJTQmxvY2tzOmVjQmxvY2tzLm51bUJsb2NrcyBlcnJvcjplcnJvcl07CisgIGlmICghZmluYWxCaXRzKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIFpYUVJDb2RlICpxckNvZGUgPSBbW1pYUVJDb2RlIGFsbG9jXSBpbml0XTsKKworICBxckNvZGUuZWNMZXZlbCA9IGVjTGV2ZWw7CisgIHFyQ29kZS5tb2RlID0gbW9kZTsKKyAgcXJDb2RlLnZlcnNpb24gPSB2ZXJzaW9uOworCisgIC8vIENob29zZSB0aGUgbWFzayBwYXR0ZXJuIGFuZCBzZXQgdG8gInFyQ29kZSIuCisgIGludCBkaW1lbnNpb24gPSB2ZXJzaW9uLmRpbWVuc2lvbkZvclZlcnNpb247CisgIFpYQnl0ZU1hdHJpeCAqbWF0cml4ID0gW1taWEJ5dGVNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6ZGltZW5zaW9uIGhlaWdodDpkaW1lbnNpb25dOworICBpbnQgbWFza1BhdHRlcm4gPSBbc2VsZiBjaG9vc2VNYXNrUGF0dGVybjpmaW5hbEJpdHMgZWNMZXZlbDpbcXJDb2RlIGVjTGV2ZWxdIHZlcnNpb246W3FyQ29kZSB2ZXJzaW9uXSBtYXRyaXg6bWF0cml4IGVycm9yOmVycm9yXTsKKyAgaWYgKG1hc2tQYXR0ZXJuID09IC0xKSB7CisgICAgcmV0dXJuIG5pbDsKKyAgfQorICBbcXJDb2RlIHNldE1hc2tQYXR0ZXJuOm1hc2tQYXR0ZXJuXTsKKworICAvLyBCdWlsZCB0aGUgbWF0cml4IGFuZCBzZXQgaXQgdG8gInFyQ29kZSIuCisgIGlmICghW1pYTWF0cml4VXRpbCBidWlsZE1hdHJpeDpmaW5hbEJpdHMgZWNMZXZlbDplY0xldmVsIHZlcnNpb246dmVyc2lvbiBtYXNrUGF0dGVybjptYXNrUGF0dGVybiBtYXRyaXg6bWF0cml4IGVycm9yOmVycm9yXSkgeworICAgIHJldHVybiBuaWw7CisgIH0KKyAgW3FyQ29kZSBzZXRNYXRyaXg6bWF0cml4XTsKKworICByZXR1cm4gcXJDb2RlOworfQorCisvKioKKyAqIFJldHVybiB0aGUgY29kZSBwb2ludCBvZiB0aGUgdGFibGUgdXNlZCBpbiBhbHBoYW51bWVyaWMgbW9kZSBvcgorICogLTEgaWYgdGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBjb2RlIGluIHRoZSB0YWJsZS4KKyAqLworKyAoaW50KWFscGhhbnVtZXJpY0NvZGU6KGludCljb2RlIHsKKyAgaWYgKGNvZGUgPCBzaXplb2YoQUxQSEFOVU1FUklDX1RBQkxFKSAvIHNpemVvZihpbnQpKSB7CisgICAgcmV0dXJuIEFMUEhBTlVNRVJJQ19UQUJMRVtjb2RlXTsKKyAgfQorICByZXR1cm4gLTE7Cit9CisKKysgKFpYTW9kZSAqKWNob29zZU1vZGU6KE5TU3RyaW5nICopY29udGVudCB7CisgIHJldHVybiBbc2VsZiBjaG9vc2VNb2RlOmNvbnRlbnQgZW5jb2Rpbmc6LTFdOworfQorCisvKioKKyAqIENob29zZSB0aGUgYmVzdCBtb2RlIGJ5IGV4YW1pbmluZyB0aGUgY29udGVudC4gTm90ZSB0aGF0ICdlbmNvZGluZycgaXMgdXNlZCBhcyBhIGhpbnQ7CisgKiBpZiBpdCBpcyBTaGlmdF9KSVMsIGFuZCB0aGUgaW5wdXQgaXMgb25seSBkb3VibGUtYnl0ZSBLYW5qaSwgdGhlbiB3ZSByZXR1cm4ge0BsaW5rIE1vZGUjS0FOSkl9LgorICovCisrIChaWE1vZGUgKiljaG9vc2VNb2RlOihOU1N0cmluZyAqKWNvbnRlbnQgZW5jb2Rpbmc6KE5TU3RyaW5nRW5jb2RpbmcpZW5jb2RpbmcgeworICBpZiAoTlNTaGlmdEpJU1N0cmluZ0VuY29kaW5nID09IGVuY29kaW5nKSB7CisgICAgcmV0dXJuIFtzZWxmIGlzT25seURvdWJsZUJ5dGVLYW5qaTpjb250ZW50XSA/IFtaWE1vZGUga2FuamlNb2RlXSA6IFtaWE1vZGUgYnl0ZU1vZGVdOworICB9CisgIEJPT0wgaGFzTnVtZXJpYyA9IE5POworICBCT09MIGhhc0FscGhhbnVtZXJpYyA9IE5POworICBmb3IgKGludCBpID0gMDsgaSA8IFtjb250ZW50IGxlbmd0aF07ICsraSkgeworICAgIHVuaWNoYXIgYyA9IFtjb250ZW50IGNoYXJhY3RlckF0SW5kZXg6aV07CisgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7CisgICAgICBoYXNOdW1lcmljID0gWUVTOworICAgIH0gZWxzZSBpZiAoW3NlbGYgYWxwaGFudW1lcmljQ29kZTpjXSAhPSAtMSkgeworICAgICAgaGFzQWxwaGFudW1lcmljID0gWUVTOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gW1pYTW9kZSBieXRlTW9kZV07CisgICAgfQorICB9CisgIGlmIChoYXNBbHBoYW51bWVyaWMpIHsKKyAgICByZXR1cm4gW1pYTW9kZSBhbHBoYW51bWVyaWNNb2RlXTsKKyAgfQorICBpZiAoaGFzTnVtZXJpYykgeworICAgIHJldHVybiBbWlhNb2RlIG51bWVyaWNNb2RlXTsKKyAgfQorICByZXR1cm4gW1pYTW9kZSBieXRlTW9kZV07Cit9CisKKysgKEJPT0wpaXNPbmx5RG91YmxlQnl0ZUthbmppOihOU1N0cmluZyAqKWNvbnRlbnQgeworICBOU0RhdGEgKmRhdGEgPSBbY29udGVudCBkYXRhVXNpbmdFbmNvZGluZzpOU1NoaWZ0SklTU3RyaW5nRW5jb2RpbmddOworICBpbnQ4X3QgKmJ5dGVzID0gKGludDhfdCAqKVtkYXRhIGJ5dGVzXTsKKyAgTlNVSW50ZWdlciBsZW5ndGggPSBbZGF0YSBsZW5ndGhdOworICBpZiAobGVuZ3RoICUgMiAhPSAwKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHsKKyAgICBpbnQgYnl0ZTEgPSBieXRlc1tpXSAmIDB4RkY7CisgICAgaWYgKChieXRlMSA8IDB4ODEgfHwgYnl0ZTEgPiAweDlGKSAmJiAoYnl0ZTEgPCAweEUwIHx8IGJ5dGUxID4gMHhFQikpIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFlFUzsKK30KKworKyAoaW50KWNob29zZU1hc2tQYXR0ZXJuOihaWEJpdEFycmF5ICopYml0cyBlY0xldmVsOihaWEVycm9yQ29ycmVjdGlvbkxldmVsICopZWNMZXZlbCB2ZXJzaW9uOihaWFFSQ29kZVZlcnNpb24gKil2ZXJzaW9uIG1hdHJpeDooWlhCeXRlTWF0cml4ICopbWF0cml4IGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaW50IG1pblBlbmFsdHkgPSBJTlRfTUFYOworICBpbnQgYmVzdE1hc2tQYXR0ZXJuID0gLTE7CisKKyAgZm9yIChpbnQgbWFza1BhdHRlcm4gPSAwOyBtYXNrUGF0dGVybiA8IE5VTV9NQVNLX1BBVFRFUk5TOyBtYXNrUGF0dGVybisrKSB7CisgICAgaWYgKCFbWlhNYXRyaXhVdGlsIGJ1aWxkTWF0cml4OmJpdHMgZWNMZXZlbDplY0xldmVsIHZlcnNpb246dmVyc2lvbiBtYXNrUGF0dGVybjptYXNrUGF0dGVybiBtYXRyaXg6bWF0cml4IGVycm9yOmVycm9yXSkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpbnQgcGVuYWx0eSA9IFtzZWxmIGNhbGN1bGF0ZU1hc2tQZW5hbHR5Om1hdHJpeF07CisgICAgaWYgKHBlbmFsdHkgPCBtaW5QZW5hbHR5KSB7CisgICAgICBtaW5QZW5hbHR5ID0gcGVuYWx0eTsKKyAgICAgIGJlc3RNYXNrUGF0dGVybiA9IG1hc2tQYXR0ZXJuOworICAgIH0KKyAgfQorICByZXR1cm4gYmVzdE1hc2tQYXR0ZXJuOworfQorCisrIChaWFFSQ29kZVZlcnNpb24gKiljaG9vc2VWZXJzaW9uOihpbnQpbnVtSW5wdXRCaXRzIGVjTGV2ZWw6KFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillY0xldmVsIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgLy8gSW4gdGhlIGZvbGxvd2luZyBjb21tZW50cywgd2UgdXNlIG51bWJlcnMgb2YgVmVyc2lvbiA3LUguCisgIGZvciAoaW50IHZlcnNpb25OdW0gPSAxOyB2ZXJzaW9uTnVtIDw9IDQwOyB2ZXJzaW9uTnVtKyspIHsKKyAgICBaWFFSQ29kZVZlcnNpb24gKnZlcnNpb24gPSBbWlhRUkNvZGVWZXJzaW9uIHZlcnNpb25Gb3JOdW1iZXI6dmVyc2lvbk51bV07CisgICAgLy8gbnVtQnl0ZXMgPSAxOTYKKyAgICBpbnQgbnVtQnl0ZXMgPSB2ZXJzaW9uLnRvdGFsQ29kZXdvcmRzOworICAgIC8vIGdldE51bUVDQnl0ZXMgPSAxMzAKKyAgICBaWFFSQ29kZUVDQmxvY2tzICplY0Jsb2NrcyA9IFt2ZXJzaW9uIGVjQmxvY2tzRm9yTGV2ZWw6ZWNMZXZlbF07CisgICAgaW50IG51bUVjQnl0ZXMgPSBlY0Jsb2Nrcy50b3RhbEVDQ29kZXdvcmRzOworICAgIC8vIGdldE51bURhdGFCeXRlcyA9IDE5NiAtIDEzMCA9IDY2CisgICAgaW50IG51bURhdGFCeXRlcyA9IG51bUJ5dGVzIC0gbnVtRWNCeXRlczsKKyAgICBpbnQgdG90YWxJbnB1dEJ5dGVzID0gKG51bUlucHV0Qml0cyArIDcpIC8gODsKKyAgICBpZiAobnVtRGF0YUJ5dGVzID49IHRvdGFsSW5wdXRCeXRlcykgeworICAgICAgcmV0dXJuIHZlcnNpb247CisgICAgfQorICB9CisKKyAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IEB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleTogQCJEYXRhIHRvbyBiaWcifTsKKworICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYV3JpdGVyRXJyb3IgdXNlckluZm86dXNlckluZm9dOworICByZXR1cm4gbmlsOworfQorCisrIChpbnQpdG90YWxJbnB1dEJ5dGVzOihpbnQpbnVtSW5wdXRCaXRzIHZlcnNpb246KFpYUVJDb2RlVmVyc2lvbiAqKXZlcnNpb24gbW9kZTooWlhNb2RlICopbW9kZSB7CisgIGludCBtb2RlSW5mb0JpdHMgPSA0OworICBpbnQgY2hhckNvdW50Qml0cyA9IFttb2RlIGNoYXJhY3RlckNvdW50Qml0czp2ZXJzaW9uXTsKKyAgaW50IGhlYWRlckJpdHMgPSBtb2RlSW5mb0JpdHMgKyBjaGFyQ291bnRCaXRzOworICBpbnQgdG90YWxCaXRzID0gbnVtSW5wdXRCaXRzICsgaGVhZGVyQml0czsKKworICByZXR1cm4gKHRvdGFsQml0cyArIDcpIC8gODsKK30KKworLyoqCisgKiBUZXJtaW5hdGUgYml0cyBhcyBkZXNjcmliZWQgaW4gOC40LjggYW5kIDguNC45IG9mIEpJU1gwNTEwOjIwMDQgKHAuMjQpLgorICovCisrIChCT09MKXRlcm1pbmF0ZUJpdHM6KGludCludW1EYXRhQnl0ZXMgYml0czooWlhCaXRBcnJheSAqKWJpdHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQgY2FwYWNpdHkgPSBudW1EYXRhQnl0ZXMgPDwgMzsKKyAgaWYgKFtiaXRzIHNpemVdID4gY2FwYWNpdHkpIHsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImRhdGEgYml0cyBjYW5ub3QgZml0IGluIHRoZSBRUiBDb2RlICVkID4gJWQiLCBbYml0cyBzaXplXSwgY2FwYWNpdHldfTsKKworICAgIGlmIChlcnJvcikgKmVycm9yID0gW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpaWEVycm9yRG9tYWluIGNvZGU6WlhXcml0ZXJFcnJvciB1c2VySW5mbzp1c2VySW5mb107CisgICAgcmV0dXJuIE5POworICB9CisgIGZvciAoaW50IGkgPSAwOyBpIDwgNCAmJiBbYml0cyBzaXplXSA8IGNhcGFjaXR5OyArK2kpIHsKKyAgICBbYml0cyBhcHBlbmRCaXQ6Tk9dOworICB9CisgIGludCBudW1CaXRzSW5MYXN0Qnl0ZSA9IFtiaXRzIHNpemVdICYgMHgwNzsKKyAgaWYgKG51bUJpdHNJbkxhc3RCeXRlID4gMCkgeworICAgIGZvciAoaW50IGkgPSBudW1CaXRzSW5MYXN0Qnl0ZTsgaSA8IDg7IGkrKykgeworICAgICAgW2JpdHMgYXBwZW5kQml0Ok5PXTsKKyAgICB9CisgIH0KKyAgaW50IG51bVBhZGRpbmdCeXRlcyA9IG51bURhdGFCeXRlcyAtIFtiaXRzIHNpemVJbkJ5dGVzXTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYWRkaW5nQnl0ZXM7ICsraSkgeworICAgIFtiaXRzIGFwcGVuZEJpdHM6KGkgJiAweDAxKSA9PSAwID8gMHhFQyA6IDB4MTEgbnVtQml0czo4XTsKKyAgfQorICBpZiAoW2JpdHMgc2l6ZV0gIT0gY2FwYWNpdHkpIHsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAIkJpdHMgc2l6ZSBkb2VzIG5vdCBlcXVhbCBjYXBhY2l0eSJ9OworCisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlpYRXJyb3JEb21haW4gY29kZTpaWFdyaXRlckVycm9yIHVzZXJJbmZvOnVzZXJJbmZvXTsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgcmV0dXJuIFlFUzsKK30KKworLyoqCisgKiBHZXQgbnVtYmVyIG9mIGRhdGEgYnl0ZXMgYW5kIG51bWJlciBvZiBlcnJvciBjb3JyZWN0aW9uIGJ5dGVzIGZvciBibG9jayBpZCAiYmxvY2tJRCIuIFN0b3JlCisgKiB0aGUgcmVzdWx0IGluICJudW1EYXRhQnl0ZXNJbkJsb2NrIiwgYW5kICJudW1FQ0J5dGVzSW5CbG9jayIuIFNlZSB0YWJsZSAxMiBpbiA4LjUuMSBvZgorICogSklTWDA1MTA6MjAwNCAocC4zMCkKKyAqLworKyAoQk9PTCludW1EYXRhQnl0ZXNBbmROdW1FQ0J5dGVzRm9yQmxvY2tJRDooaW50KW51bVRvdGFsQnl0ZXMgbnVtRGF0YUJ5dGVzOihpbnQpbnVtRGF0YUJ5dGVzIG51bVJTQmxvY2tzOihpbnQpbnVtUlNCbG9ja3MgYmxvY2tJRDooaW50KWJsb2NrSUQgbnVtRGF0YUJ5dGVzSW5CbG9jazooaW50W10pbnVtRGF0YUJ5dGVzSW5CbG9jayBudW1FQ0J5dGVzSW5CbG9jazooaW50W10pbnVtRUNCeXRlc0luQmxvY2sgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAoYmxvY2tJRCA+PSBudW1SU0Jsb2NrcykgeworICAgIE5TRGljdGlvbmFyeSAqdXNlckluZm8gPSBAe05TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk6IEAiQmxvY2sgSUQgdG9vIGxhcmdlIn07CisKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYV3JpdGVyRXJyb3IgdXNlckluZm86dXNlckluZm9dOworICAgIHJldHVybiBOTzsKKyAgfQorICBpbnQgbnVtUnNCbG9ja3NJbkdyb3VwMiA9IG51bVRvdGFsQnl0ZXMgJSBudW1SU0Jsb2NrczsKKyAgaW50IG51bVJzQmxvY2tzSW5Hcm91cDEgPSBudW1SU0Jsb2NrcyAtIG51bVJzQmxvY2tzSW5Hcm91cDI7CisgIGludCBudW1Ub3RhbEJ5dGVzSW5Hcm91cDEgPSBudW1Ub3RhbEJ5dGVzIC8gbnVtUlNCbG9ja3M7CisgIGludCBudW1Ub3RhbEJ5dGVzSW5Hcm91cDIgPSBudW1Ub3RhbEJ5dGVzSW5Hcm91cDEgKyAxOworICBpbnQgbnVtRGF0YUJ5dGVzSW5Hcm91cDEgPSBudW1EYXRhQnl0ZXMgLyBudW1SU0Jsb2NrczsKKyAgaW50IG51bURhdGFCeXRlc0luR3JvdXAyID0gbnVtRGF0YUJ5dGVzSW5Hcm91cDEgKyAxOworICBpbnQgbnVtRWNCeXRlc0luR3JvdXAxID0gbnVtVG90YWxCeXRlc0luR3JvdXAxIC0gbnVtRGF0YUJ5dGVzSW5Hcm91cDE7CisgIGludCBudW1FY0J5dGVzSW5Hcm91cDIgPSBudW1Ub3RhbEJ5dGVzSW5Hcm91cDIgLSBudW1EYXRhQnl0ZXNJbkdyb3VwMjsKKyAgaWYgKG51bUVjQnl0ZXNJbkdyb3VwMSAhPSBudW1FY0J5dGVzSW5Hcm91cDIpIHsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAIkVDIGJ5dGVzIG1pc21hdGNoIn07CisKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYV3JpdGVyRXJyb3IgdXNlckluZm86dXNlckluZm9dOworICAgIHJldHVybiBOTzsKKyAgfQorICBpZiAobnVtUlNCbG9ja3MgIT0gbnVtUnNCbG9ja3NJbkdyb3VwMSArIG51bVJzQmxvY2tzSW5Hcm91cDIpIHsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAIlJTIGJsb2NrcyBtaXNtYXRjaCJ9OworCisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlpYRXJyb3JEb21haW4gY29kZTpaWFdyaXRlckVycm9yIHVzZXJJbmZvOnVzZXJJbmZvXTsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgaWYgKG51bVRvdGFsQnl0ZXMgIT0gKChudW1EYXRhQnl0ZXNJbkdyb3VwMSArIG51bUVjQnl0ZXNJbkdyb3VwMSkgKiBudW1Sc0Jsb2Nrc0luR3JvdXAxKSArICgobnVtRGF0YUJ5dGVzSW5Hcm91cDIgKyBudW1FY0J5dGVzSW5Hcm91cDIpICogbnVtUnNCbG9ja3NJbkdyb3VwMikpIHsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAIlRvdGFsIGJ5dGVzIG1pc21hdGNoIn07CisKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYV3JpdGVyRXJyb3IgdXNlckluZm86dXNlckluZm9dOworICAgIHJldHVybiBOTzsKKyAgfQorICBpZiAoYmxvY2tJRCA8IG51bVJzQmxvY2tzSW5Hcm91cDEpIHsKKyAgICBudW1EYXRhQnl0ZXNJbkJsb2NrWzBdID0gbnVtRGF0YUJ5dGVzSW5Hcm91cDE7CisgICAgbnVtRUNCeXRlc0luQmxvY2tbMF0gPSBudW1FY0J5dGVzSW5Hcm91cDE7CisgIH0gZWxzZSB7CisgICAgbnVtRGF0YUJ5dGVzSW5CbG9ja1swXSA9IG51bURhdGFCeXRlc0luR3JvdXAyOworICAgIG51bUVDQnl0ZXNJbkJsb2NrWzBdID0gbnVtRWNCeXRlc0luR3JvdXAyOworICB9CisgIHJldHVybiBZRVM7Cit9CisKKy8qKgorICogSW50ZXJsZWF2ZSAiYml0cyIgd2l0aCBjb3JyZXNwb25kaW5nIGVycm9yIGNvcnJlY3Rpb24gYnl0ZXMuIE9uIHN1Y2Nlc3MsIHN0b3JlIHRoZSByZXN1bHQgaW4KKyAqICJyZXN1bHQiLiBUaGUgaW50ZXJsZWF2ZSBydWxlIGlzIGNvbXBsaWNhdGVkLiBTZWUgOC42IG9mIEpJU1gwNTEwOjIwMDQgKHAuMzcpIGZvciBkZXRhaWxzLgorICovCisrIChaWEJpdEFycmF5ICopaW50ZXJsZWF2ZVdpdGhFQ0J5dGVzOihaWEJpdEFycmF5ICopYml0cyBudW1Ub3RhbEJ5dGVzOihpbnQpbnVtVG90YWxCeXRlcyBudW1EYXRhQnl0ZXM6KGludCludW1EYXRhQnl0ZXMgbnVtUlNCbG9ja3M6KGludCludW1SU0Jsb2NrcyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIC8vICJiaXRzIiBtdXN0IGhhdmUgImdldE51bURhdGFCeXRlcyIgYnl0ZXMgb2YgZGF0YS4KKyAgaWYgKFtiaXRzIHNpemVJbkJ5dGVzXSAhPSBudW1EYXRhQnl0ZXMpIHsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAIk51bWJlciBvZiBiaXRzIGFuZCBkYXRhIGJ5dGVzIGRvZXMgbm90IG1hdGNoIn07CisKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYV3JpdGVyRXJyb3IgdXNlckluZm86dXNlckluZm9dOworICAgIHJldHVybiBuaWw7CisgIH0KKworICAvLyBTdGVwIDEuICBEaXZpZGUgZGF0YSBieXRlcyBpbnRvIGJsb2NrcyBhbmQgZ2VuZXJhdGUgZXJyb3IgY29ycmVjdGlvbiBieXRlcyBmb3IgdGhlbS4gV2UnbGwKKyAgLy8gc3RvcmUgdGhlIGRpdmlkZWQgZGF0YSBieXRlcyBibG9ja3MgYW5kIGVycm9yIGNvcnJlY3Rpb24gYnl0ZXMgYmxvY2tzIGludG8gImJsb2NrcyIuCisgIGludCBkYXRhQnl0ZXNPZmZzZXQgPSAwOworICBpbnQgbWF4TnVtRGF0YUJ5dGVzID0gMDsKKyAgaW50IG1heE51bUVjQnl0ZXMgPSAwOworCisgIC8vIFNpbmNlLCB3ZSBrbm93IHRoZSBudW1iZXIgb2YgcmVlZHNvbG1vbiBibG9ja3MsIHdlIGNhbiBpbml0aWFsaXplIHRoZSB2ZWN0b3Igd2l0aCB0aGUgbnVtYmVyLgorICBOU011dGFibGVBcnJheSAqYmxvY2tzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Om51bVJTQmxvY2tzXTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IG51bVJTQmxvY2tzOyArK2kpIHsKKyAgICBpbnQgbnVtRGF0YUJ5dGVzSW5CbG9ja1sxXTsKKyAgICBpbnQgbnVtRWNCeXRlc0luQmxvY2tbMV07CisgICAgaWYgKCFbc2VsZiBudW1EYXRhQnl0ZXNBbmROdW1FQ0J5dGVzRm9yQmxvY2tJRDpudW1Ub3RhbEJ5dGVzIG51bURhdGFCeXRlczpudW1EYXRhQnl0ZXMgbnVtUlNCbG9ja3M6bnVtUlNCbG9ja3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJRDppIG51bURhdGFCeXRlc0luQmxvY2s6bnVtRGF0YUJ5dGVzSW5CbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtRUNCeXRlc0luQmxvY2s6bnVtRWNCeXRlc0luQmxvY2sgZXJyb3I6ZXJyb3JdKSB7CisgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIGludCBzaXplID0gbnVtRGF0YUJ5dGVzSW5CbG9ja1swXTsKKyAgICBpbnQ4X3QgZGF0YUJ5dGVzW3NpemVdOworICAgIFtiaXRzIHRvQnl0ZXM6OCAqIGRhdGFCeXRlc09mZnNldCBhcnJheTpkYXRhQnl0ZXMgb2Zmc2V0OjAgbnVtQnl0ZXM6c2l6ZV07CisgICAgaW50OF90ICplY0J5dGVzID0gW3NlbGYgZ2VuZXJhdGVFQ0J5dGVzOmRhdGFCeXRlcyBudW1EYXRhQnl0ZXM6c2l6ZSBudW1FY0J5dGVzSW5CbG9jazpudW1FY0J5dGVzSW5CbG9ja1swXV07CisgICAgW2Jsb2NrcyBhZGRPYmplY3Q6W1taWEJsb2NrUGFpciBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGFCeXRlcyBsZW5ndGg6c2l6ZSBlcnJvckNvcnJlY3Rpb246ZWNCeXRlcyBlcnJvckNvcnJlY3Rpb25MZW5ndGg6bnVtRWNCeXRlc0luQmxvY2tbMF1dXTsKKworICAgIG1heE51bURhdGFCeXRlcyA9IE1BWChtYXhOdW1EYXRhQnl0ZXMsIHNpemUpOworICAgIG1heE51bUVjQnl0ZXMgPSBNQVgobWF4TnVtRWNCeXRlcywgbnVtRWNCeXRlc0luQmxvY2tbMF0pOworICAgIGRhdGFCeXRlc09mZnNldCArPSBudW1EYXRhQnl0ZXNJbkJsb2NrWzBdOworICAgIGZyZWUoZWNCeXRlcyk7CisgIH0KKyAgaWYgKG51bURhdGFCeXRlcyAhPSBkYXRhQnl0ZXNPZmZzZXQpIHsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAIkRhdGEgYnl0ZXMgZG9lcyBub3QgbWF0Y2ggb2Zmc2V0In07CisKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYV3JpdGVyRXJyb3IgdXNlckluZm86dXNlckluZm9dOworICAgIHJldHVybiBuaWw7CisgIH0KKworICBaWEJpdEFycmF5ICpyZXN1bHQgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworCisgIC8vIEZpcnN0LCBwbGFjZSBkYXRhIGJsb2Nrcy4KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhOdW1EYXRhQnl0ZXM7ICsraSkgeworICAgIGZvciAoWlhCbG9ja1BhaXIgKmJsb2NrIGluIGJsb2NrcykgeworICAgICAgaW50OF90ICpkYXRhQnl0ZXMgPSBibG9jay5kYXRhQnl0ZXM7CisgICAgICBpbnQgbGVuZ3RoID0gYmxvY2subGVuZ3RoOworICAgICAgaWYgKGkgPCBsZW5ndGgpIHsKKyAgICAgICAgW3Jlc3VsdCBhcHBlbmRCaXRzOmRhdGFCeXRlc1tpXSBudW1CaXRzOjhdOworICAgICAgfQorICAgIH0KKyAgfQorICAvLyBUaGVuLCBwbGFjZSBlcnJvciBjb3JyZWN0aW9uIGJsb2Nrcy4KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhOdW1FY0J5dGVzOyArK2kpIHsKKyAgICBmb3IgKFpYQmxvY2tQYWlyICpibG9jayBpbiBibG9ja3MpIHsKKyAgICAgIGludDhfdCAqZWNCeXRlcyA9IGJsb2NrLmVycm9yQ29ycmVjdGlvbkJ5dGVzOworICAgICAgaW50IGxlbmd0aCA9IGJsb2NrLmVycm9yQ29ycmVjdGlvbkxlbmd0aDsKKyAgICAgIGlmIChpIDwgbGVuZ3RoKSB7CisgICAgICAgIFtyZXN1bHQgYXBwZW5kQml0czplY0J5dGVzW2ldIG51bUJpdHM6OF07CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChudW1Ub3RhbEJ5dGVzICE9IFtyZXN1bHQgc2l6ZUluQnl0ZXNdKSB7CisgICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IEB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcmxlYXZpbmcgZXJyb3I6ICVkIGFuZCAlZCBkaWZmZXIuIiwgbnVtVG90YWxCeXRlcywgW3Jlc3VsdCBzaXplSW5CeXRlc11dfTsKKworICAgIGlmIChlcnJvcikgKmVycm9yID0gW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpaWEVycm9yRG9tYWluIGNvZGU6WlhXcml0ZXJFcnJvciB1c2VySW5mbzp1c2VySW5mb107CisgICAgcmV0dXJuIG5pbDsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKysgKGludDhfdCAqKWdlbmVyYXRlRUNCeXRlczooaW50OF90W10pZGF0YUJ5dGVzIG51bURhdGFCeXRlczooaW50KW51bURhdGFCeXRlcyBudW1FY0J5dGVzSW5CbG9jazooaW50KW51bUVjQnl0ZXNJbkJsb2NrIHsKKyAgaW50IHRvRW5jb2RlTGVuID0gbnVtRGF0YUJ5dGVzICsgbnVtRWNCeXRlc0luQmxvY2s7CisgIGludCB0b0VuY29kZVt0b0VuY29kZUxlbl07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRGF0YUJ5dGVzOyBpKyspIHsKKyAgICB0b0VuY29kZVtpXSA9IGRhdGFCeXRlc1tpXSAmIDB4RkY7CisgIH0KKyAgZm9yIChpbnQgaSA9IG51bURhdGFCeXRlczsgaSA8IHRvRW5jb2RlTGVuOyBpKyspIHsKKyAgICB0b0VuY29kZVtpXSA9IDA7CisgIH0KKworICBbW1taWFJlZWRTb2xvbW9uRW5jb2RlciBhbGxvY10gaW5pdFdpdGhGaWVsZDpbWlhHZW5lcmljR0YgUXJDb2RlRmllbGQyNTZdXSBlbmNvZGU6dG9FbmNvZGUgdG9FbmNvZGVMZW46dG9FbmNvZGVMZW4gZWNCeXRlczpudW1FY0J5dGVzSW5CbG9ja107CisKKyAgaW50OF90ICplY0J5dGVzID0gKGludDhfdCAqKW1hbGxvYyhudW1FY0J5dGVzSW5CbG9jayAqIHNpemVvZihpbnQ4X3QpKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FY0J5dGVzSW5CbG9jazsgaSsrKSB7CisgICAgZWNCeXRlc1tpXSA9IChpbnQ4X3QpdG9FbmNvZGVbbnVtRGF0YUJ5dGVzICsgaV07CisgIH0KKworICByZXR1cm4gZWNCeXRlczsKK30KKworLyoqCisgKiBBcHBlbmQgbW9kZSBpbmZvLiBPbiBzdWNjZXNzLCBzdG9yZSB0aGUgcmVzdWx0IGluICJiaXRzIi4KKyAqLworKyAodm9pZClhcHBlbmRNb2RlSW5mbzooWlhNb2RlICopbW9kZSBiaXRzOihaWEJpdEFycmF5ICopYml0cyB7CisgIFtiaXRzIGFwcGVuZEJpdHM6W21vZGUgYml0c10gbnVtQml0czo0XTsKK30KKworLyoqCisgKiBBcHBlbmQgbGVuZ3RoIGluZm8uIE9uIHN1Y2Nlc3MsIHN0b3JlIHRoZSByZXN1bHQgaW4gImJpdHMiLgorICovCisrIChCT09MKWFwcGVuZExlbmd0aEluZm86KGludCludW1MZXR0ZXJzIHZlcnNpb246KFpYUVJDb2RlVmVyc2lvbiAqKXZlcnNpb24gbW9kZTooWlhNb2RlICopbW9kZSBiaXRzOihaWEJpdEFycmF5ICopYml0cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGludCBudW1CaXRzID0gW21vZGUgY2hhcmFjdGVyQ291bnRCaXRzOnZlcnNpb25dOworICBpZiAobnVtTGV0dGVycyA+PSAoMSA8PCBudW1CaXRzKSkgeworICAgIE5TRGljdGlvbmFyeSAqdXNlckluZm8gPSBAe05TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQgaXMgYmlnZ2VyIHRoYW4gJWQiLCBudW1MZXR0ZXJzLCAoKDEgPDwgbnVtQml0cykgLSAxKV19OworCisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlpYRXJyb3JEb21haW4gY29kZTpaWFdyaXRlckVycm9yIHVzZXJJbmZvOnVzZXJJbmZvXTsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgW2JpdHMgYXBwZW5kQml0czpudW1MZXR0ZXJzIG51bUJpdHM6bnVtQml0c107CisgIHJldHVybiBZRVM7Cit9CisKKy8qKgorICogQXBwZW5kICJieXRlcyIgaW4gIm1vZGUiIG1vZGUgKGVuY29kaW5nKSBpbnRvICJiaXRzIi4gT24gc3VjY2Vzcywgc3RvcmUgdGhlIHJlc3VsdCBpbiAiYml0cyIuCisgKi8KKysgKEJPT0wpYXBwZW5kQnl0ZXM6KE5TU3RyaW5nICopY29udGVudCBtb2RlOihaWE1vZGUgKiltb2RlIGJpdHM6KFpYQml0QXJyYXkgKiliaXRzIGVuY29kaW5nOihOU1N0cmluZ0VuY29kaW5nKWVuY29kaW5nIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgaWYgKFttb2RlIGlzRXF1YWw6W1pYTW9kZSBudW1lcmljTW9kZV1dKSB7CisgICAgW3NlbGYgYXBwZW5kTnVtZXJpY0J5dGVzOmNvbnRlbnQgYml0czpiaXRzXTsKKyAgfSBlbHNlIGlmIChbbW9kZSBpc0VxdWFsOltaWE1vZGUgYWxwaGFudW1lcmljTW9kZV1dKSB7CisgICAgaWYgKCFbc2VsZiBhcHBlbmRBbHBoYW51bWVyaWNCeXRlczpjb250ZW50IGJpdHM6Yml0cyBlcnJvcjplcnJvcl0pIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgIH0gZWxzZSBpZiAoW21vZGUgaXNFcXVhbDpbWlhNb2RlIGJ5dGVNb2RlXV0pIHsKKyAgICBbc2VsZiBhcHBlbmQ4Qml0Qnl0ZXM6Y29udGVudCBiaXRzOmJpdHMgZW5jb2Rpbmc6ZW5jb2RpbmddOworICB9IGVsc2UgaWYgKFttb2RlIGlzRXF1YWw6W1pYTW9kZSBrYW5qaU1vZGVdXSkgeworICAgIGlmICghW3NlbGYgYXBwZW5kS2FuamlCeXRlczpjb250ZW50IGJpdHM6Yml0cyBlcnJvcjplcnJvcl0pIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IEB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnZhbGlkIG1vZGU6ICVAIiwgbW9kZV19OworCisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlpYRXJyb3JEb21haW4gY29kZTpaWFdyaXRlckVycm9yIHVzZXJJbmZvOnVzZXJJbmZvXTsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgcmV0dXJuIFlFUzsKK30KKworKyAodm9pZClhcHBlbmROdW1lcmljQnl0ZXM6KE5TU3RyaW5nICopY29udGVudCBiaXRzOihaWEJpdEFycmF5ICopYml0cyB7CisgIE5TVUludGVnZXIgbGVuZ3RoID0gW2NvbnRlbnQgbGVuZ3RoXTsKKyAgaW50IGkgPSAwOworICB3aGlsZSAoaSA8IGxlbmd0aCkgeworICAgIGludCBudW0xID0gW2NvbnRlbnQgY2hhcmFjdGVyQXRJbmRleDppXSAtICcwJzsKKyAgICBpZiAoaSArIDIgPCBsZW5ndGgpIHsKKyAgICAgIGludCBudW0yID0gW2NvbnRlbnQgY2hhcmFjdGVyQXRJbmRleDppICsgMV0gLSAnMCc7CisgICAgICBpbnQgbnVtMyA9IFtjb250ZW50IGNoYXJhY3RlckF0SW5kZXg6aSArIDJdIC0gJzAnOworICAgICAgW2JpdHMgYXBwZW5kQml0czpudW0xICogMTAwICsgbnVtMiAqIDEwICsgbnVtMyBudW1CaXRzOjEwXTsKKyAgICAgIGkgKz0gMzsKKyAgICB9IGVsc2UgaWYgKGkgKyAxIDwgbGVuZ3RoKSB7CisgICAgICBpbnQgbnVtMiA9IFtjb250ZW50IGNoYXJhY3RlckF0SW5kZXg6aSArIDFdIC0gJzAnOworICAgICAgW2JpdHMgYXBwZW5kQml0czpudW0xICogMTAgKyBudW0yIG51bUJpdHM6N107CisgICAgICBpICs9IDI7CisgICAgfSBlbHNlIHsKKyAgICAgIFtiaXRzIGFwcGVuZEJpdHM6bnVtMSBudW1CaXRzOjRdOworICAgICAgaSsrOworICAgIH0KKyAgfQorfQorCisrIChCT09MKWFwcGVuZEFscGhhbnVtZXJpY0J5dGVzOihOU1N0cmluZyAqKWNvbnRlbnQgYml0czooWlhCaXRBcnJheSAqKWJpdHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBOU1VJbnRlZ2VyIGxlbmd0aCA9IFtjb250ZW50IGxlbmd0aF07CisgIGludCBpID0gMDsKKworICB3aGlsZSAoaSA8IGxlbmd0aCkgeworICAgIGludCBjb2RlMSA9IFtzZWxmIGFscGhhbnVtZXJpY0NvZGU6W2NvbnRlbnQgY2hhcmFjdGVyQXRJbmRleDppXV07CisgICAgaWYgKGNvZGUxID09IC0xKSB7CisgICAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYV3JpdGVyRXJyb3IgdXNlckluZm86bmlsXTsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgaWYgKGkgKyAxIDwgbGVuZ3RoKSB7CisgICAgICBpbnQgY29kZTIgPSBbc2VsZiBhbHBoYW51bWVyaWNDb2RlOltjb250ZW50IGNoYXJhY3RlckF0SW5kZXg6aSArIDFdXTsKKyAgICAgIGlmIChjb2RlMiA9PSAtMSkgeworICAgICAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYV3JpdGVyRXJyb3IgdXNlckluZm86bmlsXTsKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgfQorICAgICAgW2JpdHMgYXBwZW5kQml0czpjb2RlMSAqIDQ1ICsgY29kZTIgbnVtQml0czoxMV07CisgICAgICBpICs9IDI7CisgICAgfSBlbHNlIHsKKyAgICAgIFtiaXRzIGFwcGVuZEJpdHM6Y29kZTEgbnVtQml0czo2XTsKKyAgICAgIGkrKzsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFlFUzsKK30KKworKyAodm9pZClhcHBlbmQ4Qml0Qnl0ZXM6KE5TU3RyaW5nICopY29udGVudCBiaXRzOihaWEJpdEFycmF5ICopYml0cyBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZyllbmNvZGluZyB7CisgIE5TRGF0YSAqZGF0YSA9IFtjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOmVuY29kaW5nXTsKKyAgaW50OF90ICpieXRlcyA9IChpbnQ4X3QgKilbZGF0YSBieXRlc107CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBbZGF0YSBsZW5ndGhdOyArK2kpIHsKKyAgICBbYml0cyBhcHBlbmRCaXRzOmJ5dGVzW2ldIG51bUJpdHM6OF07CisgIH0KK30KKworKyAoQk9PTClhcHBlbmRLYW5qaUJ5dGVzOihOU1N0cmluZyAqKWNvbnRlbnQgYml0czooWlhCaXRBcnJheSAqKWJpdHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBOU0RhdGEgKmRhdGEgPSBbY29udGVudCBkYXRhVXNpbmdFbmNvZGluZzpOU1NoaWZ0SklTU3RyaW5nRW5jb2RpbmddOworICBpbnQ4X3QgKmJ5dGVzID0gKGludDhfdCAqKVtkYXRhIGJ5dGVzXTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBbZGF0YSBsZW5ndGhdOyBpICs9IDIpIHsKKyAgICBpbnQgYnl0ZTEgPSBieXRlc1tpXSAmIDB4RkY7CisgICAgaW50IGJ5dGUyID0gYnl0ZXNbaSArIDFdICYgMHhGRjsKKyAgICBpbnQgY29kZSA9IChieXRlMSA8PCA4KSB8IGJ5dGUyOworICAgIGludCBzdWJ0cmFjdGVkID0gLTE7CisgICAgaWYgKGNvZGUgPj0gMHg4MTQwICYmIGNvZGUgPD0gMHg5ZmZjKSB7CisgICAgICBzdWJ0cmFjdGVkID0gY29kZSAtIDB4ODE0MDsKKyAgICB9IGVsc2UgaWYgKGNvZGUgPj0gMHhlMDQwICYmIGNvZGUgPD0gMHhlYmJmKSB7CisgICAgICBzdWJ0cmFjdGVkID0gY29kZSAtIDB4YzE0MDsKKyAgICB9CisgICAgaWYgKHN1YnRyYWN0ZWQgPT0gLTEpIHsKKyAgICAgIE5TRGljdGlvbmFyeSAqdXNlckluZm8gPSBAe05TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk6IEAiSW52YWxpZCBieXRlIHNlcXVlbmNlIn07CisKKyAgICAgIGlmIChlcnJvcikgKmVycm9yID0gW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpaWEVycm9yRG9tYWluIGNvZGU6WlhXcml0ZXJFcnJvciB1c2VySW5mbzp1c2VySW5mb107CisgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIGludCBlbmNvZGVkID0gKChzdWJ0cmFjdGVkID4+IDgpICogMHhjMCkgKyAoc3VidHJhY3RlZCAmIDB4ZmYpOworICAgIFtiaXRzIGFwcGVuZEJpdHM6ZW5jb2RlZCBudW1CaXRzOjEzXTsKKyAgfQorICByZXR1cm4gWUVTOworfQorCisrICh2b2lkKWFwcGVuZEVDSTooWlhFQ0kgKillY2kgYml0czooWlhCaXRBcnJheSAqKWJpdHMgeworICBbYml0cyBhcHBlbmRCaXRzOltbWlhNb2RlIGVjaU1vZGVdIGJpdHNdIG51bUJpdHM6NF07CisgIFtiaXRzIGFwcGVuZEJpdHM6W2VjaSB2YWx1ZV0gbnVtQml0czo4XTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9lbmNvZGVyL1pYTWFza1V0aWwuaCBiL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWE1hc2tVdGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3ZjE0NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWE1hc2tVdGlsLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGNsYXNzIFpYQnl0ZU1hdHJpeDsKKworQGludGVyZmFjZSBaWE1hc2tVdGlsIDogTlNPYmplY3QKKworKyAoaW50KWFwcGx5TWFza1BlbmFsdHlSdWxlMTooWlhCeXRlTWF0cml4ICopbWF0cml4OworKyAoaW50KWFwcGx5TWFza1BlbmFsdHlSdWxlMjooWlhCeXRlTWF0cml4ICopbWF0cml4OworKyAoaW50KWFwcGx5TWFza1BlbmFsdHlSdWxlMzooWlhCeXRlTWF0cml4ICopbWF0cml4OworKyAoaW50KWFwcGx5TWFza1BlbmFsdHlSdWxlNDooWlhCeXRlTWF0cml4ICopbWF0cml4OworKyAoQk9PTClkYXRhTWFza0JpdDooaW50KW1hc2tQYXR0ZXJuIHg6KGludCl4IHk6KGludCl5OworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2VuY29kZXIvWlhNYXNrVXRpbC5tIGIvWlhpbmdPYmpDL3FyY29kZS9lbmNvZGVyL1pYTWFza1V0aWwubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGY2YjY4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3FyY29kZS9lbmNvZGVyL1pYTWFza1V0aWwubQpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCeXRlTWF0cml4LmgiCisjaW1wb3J0ICJaWE1hc2tVdGlsLmgiCisjaW1wb3J0ICJaWFFSQ29kZS5oIgorCisvLyBQZW5hbHR5IHdlaWdodHMgZnJvbSBzZWN0aW9uIDYuOC4yLjEKK2NvbnN0IGludCBOMSA9IDM7Citjb25zdCBpbnQgTjIgPSAzOworY29uc3QgaW50IE4zID0gNDA7Citjb25zdCBpbnQgTjQgPSAxMDsKKworQGltcGxlbWVudGF0aW9uIFpYTWFza1V0aWwKKworLyoqCisgKiBBcHBseSBtYXNrIHBlbmFsdHkgcnVsZSAxIGFuZCByZXR1cm4gdGhlIHBlbmFsdHkuIEZpbmQgcmVwZXRpdGl2ZSBjZWxscyB3aXRoIHRoZSBzYW1lIGNvbG9yIGFuZAorICogZ2l2ZSBwZW5hbHR5IHRvIHRoZW0uIEV4YW1wbGU6IDAwMDAwIG9yIDExMTExLgorICovCisrIChpbnQpYXBwbHlNYXNrUGVuYWx0eVJ1bGUxOihaWEJ5dGVNYXRyaXggKiltYXRyaXggeworICByZXR1cm4gW3NlbGYgYXBwbHlNYXNrUGVuYWx0eVJ1bGUxSW50ZXJuYWw6bWF0cml4IGlzSG9yaXpvbnRhbDpZRVNdICsgW3NlbGYgYXBwbHlNYXNrUGVuYWx0eVJ1bGUxSW50ZXJuYWw6bWF0cml4IGlzSG9yaXpvbnRhbDpOT107Cit9CisKKy8qKgorICogQXBwbHkgbWFzayBwZW5hbHR5IHJ1bGUgMiBhbmQgcmV0dXJuIHRoZSBwZW5hbHR5LiBGaW5kIDJ4MiBibG9ja3Mgd2l0aCB0aGUgc2FtZSBjb2xvciBhbmQgZ2l2ZQorICogcGVuYWx0eSB0byB0aGVtLiBUaGlzIGlzIGFjdHVhbGx5IGVxdWl2YWxlbnQgdG8gdGhlIHNwZWMncyBydWxlLCB3aGljaCBpcyB0byBmaW5kIE14TiBibG9ja3MgYW5kIGdpdmUgYQorICogcGVuYWx0eSBwcm9wb3J0aW9uYWwgdG8gKE0tMSl4KE4tMSksIGJlY2F1c2UgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIDJ4MiBibG9ja3MgaW5zaWRlIHN1Y2ggYSBibG9jay4KKyAqLworKyAoaW50KWFwcGx5TWFza1BlbmFsdHlSdWxlMjooWlhCeXRlTWF0cml4ICopbWF0cml4IHsKKyAgaW50IHBlbmFsdHkgPSAwOworICBpbnQ4X3QgKiphcnJheSA9IG1hdHJpeC5hcnJheTsKKyAgaW50IHdpZHRoID0gbWF0cml4LndpZHRoOworICBpbnQgaGVpZ2h0ID0gbWF0cml4LmhlaWdodDsKKworICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodCAtIDE7IHkrKykgeworICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGggLSAxOyB4KyspIHsKKyAgICAgIGludCB2YWx1ZSA9IGFycmF5W3ldW3hdOworICAgICAgaWYgKHZhbHVlID09IGFycmF5W3ldW3ggKyAxXSAmJiB2YWx1ZSA9PSBhcnJheVt5ICsgMV1beF0gJiYgdmFsdWUgPT0gYXJyYXlbeSArIDFdW3ggKyAxXSkgeworICAgICAgICBwZW5hbHR5Kys7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE4yICogcGVuYWx0eTsKK30KKworLyoqCisgKiBBcHBseSBtYXNrIHBlbmFsdHkgcnVsZSAzIGFuZCByZXR1cm4gdGhlIHBlbmFsdHkuIEZpbmQgY29uc2VjdXRpdmUgY2VsbHMgb2YgMDAwMDEwMTExMDEgb3IKKyAqIDEwMTExMDEwMDAwLCBhbmQgZ2l2ZSBwZW5hbHR5IHRvIHRoZW0uICBJZiB3ZSBmaW5kIHBhdHRlcm5zIGxpa2UgMDAwMDEwMTExMDEwMDAwLCB3ZSBnaXZlCisgKiBwZW5hbHRpZXMgdHdpY2UgKGkuZS4gNDAgKiAyKS4KKyAqLworKyAoaW50KWFwcGx5TWFza1BlbmFsdHlSdWxlMzooWlhCeXRlTWF0cml4ICopbWF0cml4IHsKKyAgaW50IHBlbmFsdHkgPSAwOworICBpbnQ4X3QgKiphcnJheSA9IG1hdHJpeC5hcnJheTsKKyAgaW50IHdpZHRoID0gbWF0cml4LndpZHRoOworICBpbnQgaGVpZ2h0ID0gbWF0cml4LmhlaWdodDsKKworICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICBpZiAoeCArIDYgPCB3aWR0aCAmJgorICAgICAgICAgIGFycmF5W3ldW3hdID09IDEgJiYKKyAgICAgICAgICBhcnJheVt5XVt4ICsgIDFdID09IDAgJiYKKyAgICAgICAgICBhcnJheVt5XVt4ICsgIDJdID09IDEgJiYKKyAgICAgICAgICBhcnJheVt5XVt4ICsgIDNdID09IDEgJiYKKyAgICAgICAgICBhcnJheVt5XVt4ICsgIDRdID09IDEgJiYKKyAgICAgICAgICBhcnJheVt5XVt4ICsgIDVdID09IDAgJiYKKyAgICAgICAgICBhcnJheVt5XVt4ICsgIDZdID09IDEgJiYKKyAgICAgICAgICAoKHggKyAxMCA8IHdpZHRoICYmCisgICAgICAgICAgICBhcnJheVt5XVt4ICsgIDddID09IDAgJiYKKyAgICAgICAgICAgIGFycmF5W3ldW3ggKyAgOF0gPT0gMCAmJgorICAgICAgICAgICAgYXJyYXlbeV1beCArICA5XSA9PSAwICYmCisgICAgICAgICAgICBhcnJheVt5XVt4ICsgMTBdID09IDApIHx8CisgICAgICAgICAgICh4IC0gNCA+PSAwICYmCisgICAgICAgICAgICBhcnJheVt5XVt4IC0gIDFdID09IDAgJiYKKyAgICAgICAgICAgIGFycmF5W3ldW3ggLSAgMl0gPT0gMCAmJgorICAgICAgICAgICAgYXJyYXlbeV1beCAtICAzXSA9PSAwICYmCisgICAgICAgICAgICBhcnJheVt5XVt4IC0gIDRdID09IDApKSkgeworICAgICAgICAgICAgIHBlbmFsdHkgKz0gTjM7CisgICAgICAgICAgIH0KKyAgICAgIGlmICh5ICsgNiA8IGhlaWdodCAmJgorICAgICAgICAgIGFycmF5W3ldW3hdID09IDEgICYmCisgICAgICAgICAgYXJyYXlbeSArICAxXVt4XSA9PSAwICAmJgorICAgICAgICAgIGFycmF5W3kgKyAgMl1beF0gPT0gMSAgJiYKKyAgICAgICAgICBhcnJheVt5ICsgIDNdW3hdID09IDEgICYmCisgICAgICAgICAgYXJyYXlbeSArICA0XVt4XSA9PSAxICAmJgorICAgICAgICAgIGFycmF5W3kgKyAgNV1beF0gPT0gMCAgJiYKKyAgICAgICAgICBhcnJheVt5ICsgIDZdW3hdID09IDEgJiYKKyAgICAgICAgICAoKHkgKyAxMCA8IGhlaWdodCAmJgorICAgICAgICAgICAgYXJyYXlbeSArICA3XVt4XSA9PSAwICYmCisgICAgICAgICAgICBhcnJheVt5ICsgIDhdW3hdID09IDAgJiYKKyAgICAgICAgICAgIGFycmF5W3kgKyAgOV1beF0gPT0gMCAmJgorICAgICAgICAgICAgYXJyYXlbeSArIDEwXVt4XSA9PSAwKSB8fAorICAgICAgICAgICAoeSAtIDQgPj0gMCAmJgorICAgICAgICAgICAgYXJyYXlbeSAtICAxXVt4XSA9PSAwICYmCisgICAgICAgICAgICBhcnJheVt5IC0gIDJdW3hdID09IDAgJiYKKyAgICAgICAgICAgIGFycmF5W3kgLSAgM11beF0gPT0gMCAmJgorICAgICAgICAgICAgYXJyYXlbeSAtICA0XVt4XSA9PSAwKSkpIHsKKyAgICAgICAgICAgICBwZW5hbHR5ICs9IE4zOworICAgICAgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBwZW5hbHR5OworfQorCisvKioKKyAqIEFwcGx5IG1hc2sgcGVuYWx0eSBydWxlIDQgYW5kIHJldHVybiB0aGUgcGVuYWx0eS4gQ2FsY3VsYXRlIHRoZSByYXRpbyBvZiBkYXJrIGNlbGxzIGFuZCBnaXZlCisgKiBwZW5hbHR5IGlmIHRoZSByYXRpbyBpcyBmYXIgZnJvbSA1MCUuIEl0IGdpdmVzIDEwIHBlbmFsdHkgZm9yIDUlIGRpc3RhbmNlLgorICovCisrIChpbnQpYXBwbHlNYXNrUGVuYWx0eVJ1bGU0OihaWEJ5dGVNYXRyaXggKiltYXRyaXggeworICBpbnQgbnVtRGFya0NlbGxzID0gMDsKKyAgaW50OF90ICoqYXJyYXkgPSBtYXRyaXguYXJyYXk7CisgIGludCB3aWR0aCA9IG1hdHJpeC53aWR0aDsKKyAgaW50IGhlaWdodCA9IG1hdHJpeC5oZWlnaHQ7CisgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICBpbnQ4X3QgKmFycmF5WSA9IGFycmF5W3ldOworICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgaWYgKGFycmF5WVt4XSA9PSAxKSB7CisgICAgICAgIG51bURhcmtDZWxscysrOworICAgICAgfQorICAgIH0KKyAgfQorICBpbnQgbnVtVG90YWxDZWxscyA9IFttYXRyaXggaGVpZ2h0XSAqIFttYXRyaXggd2lkdGhdOworICBkb3VibGUgZGFya1JhdGlvID0gKGRvdWJsZSkgbnVtRGFya0NlbGxzIC8gbnVtVG90YWxDZWxsczsKKyAgaW50IGZpdmVQZXJjZW50VmFyaWFuY2VzID0gYWJzKChpbnQpKGRhcmtSYXRpbyAqIDEwMCAtIDUwKSkgLyA1OyAvLyAqIDEwMC4wIC8gNS4wCisgIHJldHVybiBmaXZlUGVyY2VudFZhcmlhbmNlcyAqIE40OworfQorCisvKioKKyAqIFJldHVybiB0aGUgbWFzayBiaXQgZm9yICJnZXRNYXNrUGF0dGVybiIgYXQgIngiIGFuZCAieSIuIFNlZSA4Ljggb2YgSklTWDA1MTA6MjAwNCBmb3IgbWFzaworICogcGF0dGVybiBjb25kaXRpb25zLgorICovCisrIChCT09MKWRhdGFNYXNrQml0OihpbnQpbWFza1BhdHRlcm4geDooaW50KXggeTooaW50KXkgeworICBpbnQgaW50ZXJtZWRpYXRlOworICBpbnQgdGVtcDsKKyAgc3dpdGNoIChtYXNrUGF0dGVybikgeworICBjYXNlIDA6CisgICAgaW50ZXJtZWRpYXRlID0gKHkgKyB4KSAmIDB4MTsKKyAgICBicmVhazsKKyAgY2FzZSAxOgorICAgIGludGVybWVkaWF0ZSA9IHkgJiAweDE7CisgICAgYnJlYWs7CisgIGNhc2UgMjoKKyAgICBpbnRlcm1lZGlhdGUgPSB4ICUgMzsKKyAgICBicmVhazsKKyAgY2FzZSAzOgorICAgIGludGVybWVkaWF0ZSA9ICh5ICsgeCkgJSAzOworICAgIGJyZWFrOworICBjYXNlIDQ6CisgICAgaW50ZXJtZWRpYXRlID0gKChpbnQpKCh1bnNpZ25lZCBpbnQpeSA+PiAxKSArICh4IC8gMykpICYgMHgxOworICAgIGJyZWFrOworICBjYXNlIDU6CisgICAgdGVtcCA9IHkgKiB4OworICAgIGludGVybWVkaWF0ZSA9ICh0ZW1wICYgMHgxKSArICh0ZW1wICUgMyk7CisgICAgYnJlYWs7CisgIGNhc2UgNjoKKyAgICB0ZW1wID0geSAqIHg7CisgICAgaW50ZXJtZWRpYXRlID0gKCh0ZW1wICYgMHgxKSArICh0ZW1wICUgMykpICYgMHgxOworICAgIGJyZWFrOworICBjYXNlIDc6CisgICAgdGVtcCA9IHkgKiB4OworICAgIGludGVybWVkaWF0ZSA9ICgodGVtcCAlIDMpICsgKCh5ICsgeCkgJiAweDEpKSAmIDB4MTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAKKyAgICAgICAgICAgICAgICAgIGZvcm1hdDpAIkludmFsaWQgbWFzayBwYXR0ZXJuOiAlZCIsIG1hc2tQYXR0ZXJuXTsKKyAgfQorICByZXR1cm4gaW50ZXJtZWRpYXRlID09IDA7Cit9CisKKy8qKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBhcHBseU1hc2tQZW5hbHR5UnVsZTEuIFdlIG5lZWQgdGhpcyBmb3IgZG9pbmcgdGhpcyBjYWxjdWxhdGlvbiBpbiBib3RoCisgKiB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBvcmRlcnMgcmVzcGVjdGl2ZWx5LgorICovCisrIChpbnQpYXBwbHlNYXNrUGVuYWx0eVJ1bGUxSW50ZXJuYWw6KFpYQnl0ZU1hdHJpeCAqKW1hdHJpeCBpc0hvcml6b250YWw6KEJPT0wpaXNIb3Jpem9udGFsIHsKKyAgaW50IHBlbmFsdHkgPSAwOworICBpbnQgaUxpbWl0ID0gaXNIb3Jpem9udGFsID8gbWF0cml4LmhlaWdodCA6IG1hdHJpeC53aWR0aDsKKyAgaW50IGpMaW1pdCA9IGlzSG9yaXpvbnRhbCA/IG1hdHJpeC53aWR0aCA6IG1hdHJpeC5oZWlnaHQ7CisgIGludDhfdCAqKmFycmF5ID0gbWF0cml4LmFycmF5OworICBmb3IgKGludCBpID0gMDsgaSA8IGlMaW1pdDsgaSsrKSB7CisgICAgaW50IG51bVNhbWVCaXRDZWxscyA9IDA7CisgICAgaW50IHByZXZCaXQgPSAtMTsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IGpMaW1pdDsgaisrKSB7CisgICAgICBpbnQgYml0ID0gaXNIb3Jpem9udGFsID8gYXJyYXlbaV1bal0gOiBhcnJheVtqXVtpXTsKKyAgICAgIGlmIChiaXQgPT0gcHJldkJpdCkgeworICAgICAgICBudW1TYW1lQml0Q2VsbHMrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChudW1TYW1lQml0Q2VsbHMgPj0gNSkgeworICAgICAgICAgIHBlbmFsdHkgKz0gTjEgKyAobnVtU2FtZUJpdENlbGxzIC0gNSk7CisgICAgICAgIH0KKyAgICAgICAgbnVtU2FtZUJpdENlbGxzID0gMTsgIC8vIEluY2x1ZGUgdGhlIGNlbGwgaXRzZWxmLgorICAgICAgICBwcmV2Qml0ID0gYml0OworICAgICAgfQorICAgIH0KKyAgICBpZiAobnVtU2FtZUJpdENlbGxzID49IDUpIHsKKyAgICAgIHBlbmFsdHkgKz0gTjEgKyAobnVtU2FtZUJpdENlbGxzIC0gNSk7CisgICAgfQorICB9CisgIHJldHVybiBwZW5hbHR5OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakMvcXJjb2RlL2VuY29kZXIvWlhNYXRyaXhVdGlsLmggYi9aWGluZ09iakMvcXJjb2RlL2VuY29kZXIvWlhNYXRyaXhVdGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5ZTA3MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWE1hdHJpeFV0aWwuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAY2xhc3MgWlhCaXRBcnJheSwgWlhCeXRlTWF0cml4LCBaWEVycm9yQ29ycmVjdGlvbkxldmVsLCBaWFFSQ29kZVZlcnNpb247CisKK0BpbnRlcmZhY2UgWlhNYXRyaXhVdGlsIDogTlNPYmplY3QKKworKyAoQk9PTClidWlsZE1hdHJpeDooWlhCaXRBcnJheSAqKWRhdGFCaXRzIGVjTGV2ZWw6KFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillY0xldmVsIHZlcnNpb246KFpYUVJDb2RlVmVyc2lvbiAqKXZlcnNpb24gbWFza1BhdHRlcm46KGludCltYXNrUGF0dGVybiBtYXRyaXg6KFpYQnl0ZU1hdHJpeCAqKW1hdHJpeCBlcnJvcjooTlNFcnJvciAqKillcnJvcjsKKysgKHZvaWQpY2xlYXJNYXRyaXg6KFpYQnl0ZU1hdHJpeCAqKW1hdHJpeDsKKysgKEJPT0wpZW1iZWRCYXNpY1BhdHRlcm5zOihaWFFSQ29kZVZlcnNpb24gKil2ZXJzaW9uIG1hdHJpeDooWlhCeXRlTWF0cml4ICopbWF0cml4IGVycm9yOihOU0Vycm9yICoqKWVycm9yOworKyAoQk9PTCllbWJlZFR5cGVJbmZvOihaWEVycm9yQ29ycmVjdGlvbkxldmVsICopZWNMZXZlbCBtYXNrUGF0dGVybjooaW50KW1hc2tQYXR0ZXJuIG1hdHJpeDooWlhCeXRlTWF0cml4ICopbWF0cml4IGVycm9yOihOU0Vycm9yICoqKWVycm9yOworKyAoQk9PTCltYXliZUVtYmVkVmVyc2lvbkluZm86KFpYUVJDb2RlVmVyc2lvbiAqKXZlcnNpb24gbWF0cml4OihaWEJ5dGVNYXRyaXggKiltYXRyaXggZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisrIChCT09MKWVtYmVkRGF0YUJpdHM6KFpYQml0QXJyYXkgKilkYXRhQml0cyBtYXNrUGF0dGVybjooaW50KW1hc2tQYXR0ZXJuIG1hdHJpeDooWlhCeXRlTWF0cml4ICopbWF0cml4IGVycm9yOihOU0Vycm9yICoqKWVycm9yOworKyAoaW50KWZpbmRNU0JTZXQ6KGludCl2YWx1ZTsKKysgKGludCljYWxjdWxhdGVCQ0hDb2RlOihpbnQpdmFsdWUgcG9seTooaW50KXBvbHk7CisrIChCT09MKW1ha2VUeXBlSW5mb0JpdHM6KFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillY0xldmVsIG1hc2tQYXR0ZXJuOihpbnQpbWFza1BhdHRlcm4gYml0czooWlhCaXRBcnJheSAqKWJpdHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisrIChCT09MKW1ha2VWZXJzaW9uSW5mb0JpdHM6KFpYUVJDb2RlVmVyc2lvbiAqKXZlcnNpb24gYml0czooWlhCaXRBcnJheSAqKWJpdHMgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWE1hdHJpeFV0aWwubSBiL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWE1hdHJpeFV0aWwubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzdiN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3FyY29kZS9lbmNvZGVyL1pYTWF0cml4VXRpbC5tCkBAIC0wLDAgKzEsNTE2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdEFycmF5LmgiCisjaW1wb3J0ICJaWEJ5dGVNYXRyaXguaCIKKyNpbXBvcnQgIlpYRXJyb3JzLmgiCisjaW1wb3J0ICJaWEVycm9yQ29ycmVjdGlvbkxldmVsLmgiCisjaW1wb3J0ICJaWE1hc2tVdGlsLmgiCisjaW1wb3J0ICJaWE1hdHJpeFV0aWwuaCIKKyNpbXBvcnQgIlpYUVJDb2RlLmgiCisjaW1wb3J0ICJaWFFSQ29kZVZlcnNpb24uaCIKKworaW50IGNvbnN0IFBPU0lUSU9OX0RFVEVDVElPTl9QQVRURVJOWzddWzddID0geworICB7MSwgMSwgMSwgMSwgMSwgMSwgMX0sCisgIHsxLCAwLCAwLCAwLCAwLCAwLCAxfSwKKyAgezEsIDAsIDEsIDEsIDEsIDAsIDF9LAorICB7MSwgMCwgMSwgMSwgMSwgMCwgMX0sCisgIHsxLCAwLCAxLCAxLCAxLCAwLCAxfSwKKyAgezEsIDAsIDAsIDAsIDAsIDAsIDF9LAorICB7MSwgMSwgMSwgMSwgMSwgMSwgMX0sCit9OworCitpbnQgY29uc3QgUE9TSVRJT05fQURKVVNUTUVOVF9QQVRURVJOWzVdWzVdID0geworICB7MSwgMSwgMSwgMSwgMX0sCisgIHsxLCAwLCAwLCAwLCAxfSwKKyAgezEsIDAsIDEsIDAsIDF9LAorICB7MSwgMCwgMCwgMCwgMX0sCisgIHsxLCAxLCAxLCAxLCAxfSwKK307CisKKy8vIEZyb20gQXBwZW5kaXggRS4gVGFibGUgMSwgSklTMDUxMFg6MjAwNCAocCA3MSkuIFRoZSB0YWJsZSB3YXMgZG91YmxlLWNoZWNrZWQgYnkga29tYXRzdS4KK2ludCBjb25zdCBQT1NJVElPTl9BREpVU1RNRU5UX1BBVFRFUk5fQ09PUkRJTkFURV9UQUJMRVs0MF1bN10gPSB7CisgIHstMSwgLTEsIC0xLCAtMSwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDEKKyAgeyA2LCAxOCwgLTEsIC0xLCAgLTEsICAtMSwgIC0xfSwgIC8vIFZlcnNpb24gMgorICB7IDYsIDIyLCAtMSwgLTEsICAtMSwgIC0xLCAgLTF9LCAgLy8gVmVyc2lvbiAzCisgIHsgNiwgMjYsIC0xLCAtMSwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDQKKyAgeyA2LCAzMCwgLTEsIC0xLCAgLTEsICAtMSwgIC0xfSwgIC8vIFZlcnNpb24gNQorICB7IDYsIDM0LCAtMSwgLTEsICAtMSwgIC0xLCAgLTF9LCAgLy8gVmVyc2lvbiA2CisgIHsgNiwgMjIsIDM4LCAtMSwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDcKKyAgeyA2LCAyNCwgNDIsIC0xLCAgLTEsICAtMSwgIC0xfSwgIC8vIFZlcnNpb24gOAorICB7IDYsIDI2LCA0NiwgLTEsICAtMSwgIC0xLCAgLTF9LCAgLy8gVmVyc2lvbiA5CisgIHsgNiwgMjgsIDUwLCAtMSwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDEwCisgIHsgNiwgMzAsIDU0LCAtMSwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDExCisgIHsgNiwgMzIsIDU4LCAtMSwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDEyCisgIHsgNiwgMzQsIDYyLCAtMSwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDEzCisgIHsgNiwgMjYsIDQ2LCA2NiwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDE0CisgIHsgNiwgMjYsIDQ4LCA3MCwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDE1CisgIHsgNiwgMjYsIDUwLCA3NCwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDE2CisgIHsgNiwgMzAsIDU0LCA3OCwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDE3CisgIHsgNiwgMzAsIDU2LCA4MiwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDE4CisgIHsgNiwgMzAsIDU4LCA4NiwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDE5CisgIHsgNiwgMzQsIDYyLCA5MCwgIC0xLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDIwCisgIHsgNiwgMjgsIDUwLCA3MiwgIDk0LCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDIxCisgIHsgNiwgMjYsIDUwLCA3NCwgIDk4LCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDIyCisgIHsgNiwgMzAsIDU0LCA3OCwgMTAyLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDIzCisgIHsgNiwgMjgsIDU0LCA4MCwgMTA2LCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDI0CisgIHsgNiwgMzIsIDU4LCA4NCwgMTEwLCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDI1CisgIHsgNiwgMzAsIDU4LCA4NiwgMTE0LCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDI2CisgIHsgNiwgMzQsIDYyLCA5MCwgMTE4LCAgLTEsICAtMX0sICAvLyBWZXJzaW9uIDI3CisgIHsgNiwgMjYsIDUwLCA3NCwgIDk4LCAxMjIsICAtMX0sICAvLyBWZXJzaW9uIDI4CisgIHsgNiwgMzAsIDU0LCA3OCwgMTAyLCAxMjYsICAtMX0sICAvLyBWZXJzaW9uIDI5CisgIHsgNiwgMjYsIDUyLCA3OCwgMTA0LCAxMzAsICAtMX0sICAvLyBWZXJzaW9uIDMwCisgIHsgNiwgMzAsIDU2LCA4MiwgMTA4LCAxMzQsICAtMX0sICAvLyBWZXJzaW9uIDMxCisgIHsgNiwgMzQsIDYwLCA4NiwgMTEyLCAxMzgsICAtMX0sICAvLyBWZXJzaW9uIDMyCisgIHsgNiwgMzAsIDU4LCA4NiwgMTE0LCAxNDIsICAtMX0sICAvLyBWZXJzaW9uIDMzCisgIHsgNiwgMzQsIDYyLCA5MCwgMTE4LCAxNDYsICAtMX0sICAvLyBWZXJzaW9uIDM0CisgIHsgNiwgMzAsIDU0LCA3OCwgMTAyLCAxMjYsIDE1MH0sICAvLyBWZXJzaW9uIDM1CisgIHsgNiwgMjQsIDUwLCA3NiwgMTAyLCAxMjgsIDE1NH0sICAvLyBWZXJzaW9uIDM2CisgIHsgNiwgMjgsIDU0LCA4MCwgMTA2LCAxMzIsIDE1OH0sICAvLyBWZXJzaW9uIDM3CisgIHsgNiwgMzIsIDU4LCA4NCwgMTEwLCAxMzYsIDE2Mn0sICAvLyBWZXJzaW9uIDM4CisgIHsgNiwgMjYsIDU0LCA4MiwgMTEwLCAxMzgsIDE2Nn0sICAvLyBWZXJzaW9uIDM5CisgIHsgNiwgMzAsIDU4LCA4NiwgMTE0LCAxNDIsIDE3MH0sICAvLyBWZXJzaW9uIDQwCit9OworCisvLyBUeXBlIGluZm8gY2VsbHMgYXQgdGhlIGxlZnQgdG9wIGNvcm5lci4KK2ludCBjb25zdCBUWVBFX0lORk9fQ09PUkRJTkFURVNbMTVdWzJdID0geworICB7OCwgMH0sCisgIHs4LCAxfSwKKyAgezgsIDJ9LAorICB7OCwgM30sCisgIHs4LCA0fSwKKyAgezgsIDV9LAorICB7OCwgN30sCisgIHs4LCA4fSwKKyAgezcsIDh9LAorICB7NSwgOH0sCisgIHs0LCA4fSwKKyAgezMsIDh9LAorICB7MiwgOH0sCisgIHsxLCA4fSwKKyAgezAsIDh9LAorfTsKKworLy8gRnJvbSBBcHBlbmRpeCBEIGluIEpJU1gwNTEwOjIwMDQgKHAuIDY3KQoraW50IGNvbnN0IFZFUlNJT05fSU5GT19QT0xZID0gMHgxZjI1OyAgLy8gMSAxMTExIDAwMTAgMDEwMQorCisvLyBGcm9tIEFwcGVuZGl4IEMgaW4gSklTWDA1MTA6MjAwNCAocC42NSkuCitpbnQgY29uc3QgVFlQRV9JTkZPX1BPTFkgPSAweDUzNzsKK2ludCBjb25zdCBUWVBFX0lORk9fTUFTS19QQVRURVJOID0gMHg1NDEyOworCitAaW1wbGVtZW50YXRpb24gWlhNYXRyaXhVdGlsCisKKy8vIFNldCBhbGwgY2VsbHMgdG8gLTEuICAtMSBtZWFucyB0aGF0IHRoZSBjZWxsIGlzIGVtcHR5IChub3Qgc2V0IHlldCkuCisrICh2b2lkKWNsZWFyTWF0cml4OihaWEJ5dGVNYXRyaXggKiltYXRyaXggeworICBbbWF0cml4IGNsZWFyOihjaGFyKSAtMV07Cit9CisKKy8vIEJ1aWxkIDJEIG1hdHJpeCBvZiBRUiBDb2RlIGZyb20gImRhdGFCaXRzIiB3aXRoICJlY0xldmVsIiwgInZlcnNpb24iIGFuZCAiZ2V0TWFza1BhdHRlcm4iLiBPbgorLy8gc3VjY2Vzcywgc3RvcmUgdGhlIHJlc3VsdCBpbiAibWF0cml4IiBhbmQgcmV0dXJuIHRydWUuCisrIChCT09MKWJ1aWxkTWF0cml4OihaWEJpdEFycmF5ICopZGF0YUJpdHMgZWNMZXZlbDooWlhFcnJvckNvcnJlY3Rpb25MZXZlbCAqKWVjTGV2ZWwgdmVyc2lvbjooWlhRUkNvZGVWZXJzaW9uICopdmVyc2lvbiBtYXNrUGF0dGVybjooaW50KW1hc2tQYXR0ZXJuIG1hdHJpeDooWlhCeXRlTWF0cml4ICopbWF0cml4IGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgW3NlbGYgY2xlYXJNYXRyaXg6bWF0cml4XTsKKyAgaWYgKCFbc2VsZiBlbWJlZEJhc2ljUGF0dGVybnM6dmVyc2lvbiBtYXRyaXg6bWF0cml4IGVycm9yOmVycm9yXSkgeworICAgIHJldHVybiBOTzsKKyAgfQorICAvLyBUeXBlIGluZm9ybWF0aW9uIGFwcGVhciB3aXRoIGFueSB2ZXJzaW9uLgorICBpZiAoIVtzZWxmIGVtYmVkVHlwZUluZm86ZWNMZXZlbCBtYXNrUGF0dGVybjptYXNrUGF0dGVybiBtYXRyaXg6bWF0cml4IGVycm9yOmVycm9yXSkgeworICAgIHJldHVybiBOTzsKKyAgfQorICAvLyBWZXJzaW9uIGluZm8gYXBwZWFyIGlmIHZlcnNpb24gPj0gNy4KKyAgaWYgKCFbc2VsZiBtYXliZUVtYmVkVmVyc2lvbkluZm86dmVyc2lvbiBtYXRyaXg6bWF0cml4IGVycm9yOmVycm9yXSkgeworICAgIHJldHVybiBOTzsKKyAgfQorICAvLyBEYXRhIHNob3VsZCBiZSBlbWJlZGRlZCBhdCBlbmQuCisgIGlmICghW3NlbGYgZW1iZWREYXRhQml0czpkYXRhQml0cyBtYXNrUGF0dGVybjptYXNrUGF0dGVybiBtYXRyaXg6bWF0cml4IGVycm9yOmVycm9yXSkgeworICAgIHJldHVybiBOTzsKKyAgfQorICByZXR1cm4gWUVTOworfQorCisvLyBFbWJlZCBiYXNpYyBwYXR0ZXJucy4gT24gc3VjY2VzcywgbW9kaWZ5IHRoZSBtYXRyaXggYW5kIHJldHVybiB0cnVlLgorLy8gVGhlIGJhc2ljIHBhdHRlcm5zIGFyZToKKy8vIC0gUG9zaXRpb24gZGV0ZWN0aW9uIHBhdHRlcm5zCisvLyAtIFRpbWluZyBwYXR0ZXJucworLy8gLSBEYXJrIGRvdCBhdCB0aGUgbGVmdCBib3R0b20gY29ybmVyCisvLyAtIFBvc2l0aW9uIGFkanVzdG1lbnQgcGF0dGVybnMsIGlmIG5lZWQgYmUKKysgKEJPT0wpZW1iZWRCYXNpY1BhdHRlcm5zOihaWFFSQ29kZVZlcnNpb24gKil2ZXJzaW9uIG1hdHJpeDooWlhCeXRlTWF0cml4ICopbWF0cml4IGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgLy8gTGV0J3MgZ2V0IHN0YXJ0ZWQgd2l0aCBlbWJlZGRpbmcgYmlnIHNxdWFyZXMgYXQgY29ybmVycy4KKyAgaWYgKCFbc2VsZiBlbWJlZFBvc2l0aW9uRGV0ZWN0aW9uUGF0dGVybnNBbmRTZXBhcmF0b3JzOm1hdHJpeF0pIHsKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYTm90Rm91bmRFcnJvciB1c2VySW5mbzpuaWxdOworICAgIHJldHVybiBOTzsKKyAgfQorICAvLyBUaGVuLCBlbWJlZCB0aGUgZGFyayBkb3QgYXQgdGhlIGxlZnQgYm90dG9tIGNvcm5lci4KKyAgaWYgKCFbc2VsZiBlbWJlZERhcmtEb3RBdExlZnRCb3R0b21Db3JuZXI6bWF0cml4XSkgeworICAgIGlmIChlcnJvcikgKmVycm9yID0gW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpaWEVycm9yRG9tYWluIGNvZGU6WlhOb3RGb3VuZEVycm9yIHVzZXJJbmZvOm5pbF07CisgICAgcmV0dXJuIE5POworICB9CisKKyAgLy8gUG9zaXRpb24gYWRqdXN0bWVudCBwYXR0ZXJucyBhcHBlYXIgaWYgdmVyc2lvbiA+PSAyLgorICBbc2VsZiBtYXliZUVtYmVkUG9zaXRpb25BZGp1c3RtZW50UGF0dGVybnM6dmVyc2lvbiBtYXRyaXg6bWF0cml4XTsKKyAgLy8gVGltaW5nIHBhdHRlcm5zIHNob3VsZCBiZSBlbWJlZGRlZCBhZnRlciBwb3NpdGlvbiBhZGouIHBhdHRlcm5zLgorICBbc2VsZiBlbWJlZFRpbWluZ1BhdHRlcm5zOm1hdHJpeF07CisKKyAgcmV0dXJuIFlFUzsKK30KKworLy8gRW1iZWQgdHlwZSBpbmZvcm1hdGlvbi4gT24gc3VjY2VzcywgbW9kaWZ5IHRoZSBtYXRyaXguCisrIChCT09MKWVtYmVkVHlwZUluZm86KFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgKillY0xldmVsIG1hc2tQYXR0ZXJuOihpbnQpbWFza1BhdHRlcm4gbWF0cml4OihaWEJ5dGVNYXRyaXggKiltYXRyaXggZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBaWEJpdEFycmF5ICp0eXBlSW5mb0JpdHMgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBpZiAoIVtzZWxmIG1ha2VUeXBlSW5mb0JpdHM6ZWNMZXZlbCBtYXNrUGF0dGVybjptYXNrUGF0dGVybiBiaXRzOnR5cGVJbmZvQml0cyBlcnJvcjplcnJvcl0pIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBmb3IgKGludCBpID0gMDsgaSA8IFt0eXBlSW5mb0JpdHMgc2l6ZV07ICsraSkgeworICAgIC8vIFBsYWNlIGJpdHMgaW4gTFNCIHRvIE1TQiBvcmRlci4gIExTQiAobGVhc3Qgc2lnbmlmaWNhbnQgYml0KSBpcyB0aGUgbGFzdCB2YWx1ZSBpbgorICAgIC8vICJ0eXBlSW5mb0JpdHMiLgorICAgIEJPT0wgYml0ID0gW3R5cGVJbmZvQml0cyBnZXQ6W3R5cGVJbmZvQml0cyBzaXplXSAtIDEgLSBpXTsKKworICAgIC8vIFR5cGUgaW5mbyBiaXRzIGF0IHRoZSBsZWZ0IHRvcCBjb3JuZXIuIFNlZSA4Ljkgb2YgSklTWDA1MTA6MjAwNCAocC40NikuCisgICAgaW50IHgxID0gVFlQRV9JTkZPX0NPT1JESU5BVEVTW2ldWzBdOworICAgIGludCB5MSA9IFRZUEVfSU5GT19DT09SRElOQVRFU1tpXVsxXTsKKyAgICBbbWF0cml4IHNldFg6eDEgeTp5MSBib29sVmFsdWU6Yml0XTsKKworICAgIGlmIChpIDwgOCkgeworICAgICAgLy8gUmlnaHQgdG9wIGNvcm5lci4KKyAgICAgIGludCB4MiA9IFttYXRyaXggd2lkdGhdIC0gaSAtIDE7CisgICAgICBpbnQgeTIgPSA4OworICAgICAgW21hdHJpeCBzZXRYOngyIHk6eTIgYm9vbFZhbHVlOmJpdF07CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIExlZnQgYm90dG9tIGNvcm5lci4KKyAgICAgIGludCB4MiA9IDg7CisgICAgICBpbnQgeTIgPSBbbWF0cml4IGhlaWdodF0gLSA3ICsgKGkgLSA4KTsKKyAgICAgIFttYXRyaXggc2V0WDp4MiB5OnkyIGJvb2xWYWx1ZTpiaXRdOworICAgIH0KKyAgfQorCisgIHJldHVybiBZRVM7Cit9CisKKy8vIEVtYmVkIHZlcnNpb24gaW5mb3JtYXRpb24gaWYgbmVlZCBiZS4gT24gc3VjY2VzcywgbW9kaWZ5IHRoZSBtYXRyaXggYW5kIHJldHVybiB0cnVlLgorLy8gU2VlIDguMTAgb2YgSklTWDA1MTA6MjAwNCAocC40NykgZm9yIGhvdyB0byBlbWJlZCB2ZXJzaW9uIGluZm9ybWF0aW9uLgorKyAoQk9PTCltYXliZUVtYmVkVmVyc2lvbkluZm86KFpYUVJDb2RlVmVyc2lvbiAqKXZlcnNpb24gbWF0cml4OihaWEJ5dGVNYXRyaXggKiltYXRyaXggZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpZiAodmVyc2lvbi52ZXJzaW9uTnVtYmVyIDwgNykgeyAvLyBWZXJzaW9uIGluZm8gaXMgbmVjZXNzYXJ5IGlmIHZlcnNpb24gPj0gNy4KKyAgICByZXR1cm4gWUVTOyAvLyBEb24ndCBuZWVkIHZlcnNpb24gaW5mby4KKyAgfQorICBaWEJpdEFycmF5ICp2ZXJzaW9uSW5mb0JpdHMgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBpZiAoIVtzZWxmIG1ha2VWZXJzaW9uSW5mb0JpdHM6dmVyc2lvbiBiaXRzOnZlcnNpb25JbmZvQml0cyBlcnJvcjplcnJvcl0pIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBpbnQgYml0SW5kZXggPSA2ICogMyAtIDE7IC8vIEl0IHdpbGwgZGVjcmVhc2UgZnJvbSAxNyB0byAwLgorICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkgeworICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgKytqKSB7CisgICAgICAvLyBQbGFjZSBiaXRzIGluIExTQiAobGVhc3Qgc2lnbmlmaWNhbnQgYml0KSB0byBNU0Igb3JkZXIuCisgICAgICBCT09MIGJpdCA9IFt2ZXJzaW9uSW5mb0JpdHMgZ2V0OmJpdEluZGV4XTsKKyAgICAgIGJpdEluZGV4LS07CisgICAgICAvLyBMZWZ0IGJvdHRvbSBjb3JuZXIuCisgICAgICBbbWF0cml4IHNldFg6aSB5OlttYXRyaXggaGVpZ2h0XSAtIDExICsgaiBib29sVmFsdWU6Yml0XTsKKyAgICAgIC8vIFJpZ2h0IGJvdHRvbSBjb3JuZXIuCisgICAgICBbbWF0cml4IHNldFg6W21hdHJpeCBoZWlnaHRdIC0gMTEgKyBqIHk6aSBib29sVmFsdWU6Yml0XTsKKyAgICB9CisgIH0KKworICByZXR1cm4gWUVTOworfQorCisvLyBFbWJlZCAiZGF0YUJpdHMiIHVzaW5nICJnZXRNYXNrUGF0dGVybiIuIE9uIHN1Y2Nlc3MsIG1vZGlmeSB0aGUgbWF0cml4IGFuZCByZXR1cm4gdHJ1ZS4KKy8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGl0IHNraXBzIG1hc2tpbmcgcHJvY2VzcyBpZiAiZ2V0TWFza1BhdHRlcm4iIGlzIC0xLgorLy8gU2VlIDguNyBvZiBKSVNYMDUxMDoyMDA0IChwLjM4KSBmb3IgaG93IHRvIGVtYmVkIGRhdGEgYml0cy4KKysgKEJPT0wpZW1iZWREYXRhQml0czooWlhCaXRBcnJheSAqKWRhdGFCaXRzIG1hc2tQYXR0ZXJuOihpbnQpbWFza1BhdHRlcm4gbWF0cml4OihaWEJ5dGVNYXRyaXggKiltYXRyaXggZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IgeworICBpbnQgYml0SW5kZXggPSAwOworICBpbnQgZGlyZWN0aW9uID0gLTE7CisgIC8vIFN0YXJ0IGZyb20gdGhlIHJpZ2h0IGJvdHRvbSBjZWxsLgorICBpbnQgeCA9IFttYXRyaXggd2lkdGhdIC0gMTsKKyAgaW50IHkgPSBbbWF0cml4IGhlaWdodF0gLSAxOworICB3aGlsZSAoeCA+IDApIHsKKyAgICAvLyBTa2lwIHRoZSB2ZXJ0aWNhbCB0aW1pbmcgcGF0dGVybi4KKyAgICBpZiAoeCA9PSA2KSB7CisgICAgICB4IC09IDE7CisgICAgfQorICAgIHdoaWxlICh5ID49IDAgJiYgeSA8IFttYXRyaXggaGVpZ2h0XSkgeworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgaW50IHh4ID0geCAtIGk7CisgICAgICAgIC8vIFNraXAgdGhlIGNlbGwgaWYgaXQncyBub3QgZW1wdHkuCisgICAgICAgIGlmICghW3NlbGYgaXNFbXB0eTpbbWF0cml4IGdldFg6eHggeTp5XV0pIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBCT09MIGJpdDsKKyAgICAgICAgaWYgKGJpdEluZGV4IDwgW2RhdGFCaXRzIHNpemVdKSB7CisgICAgICAgICAgYml0ID0gW2RhdGFCaXRzIGdldDpiaXRJbmRleF07CisgICAgICAgICAgKytiaXRJbmRleDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvLyBQYWRkaW5nIGJpdC4gSWYgdGhlcmUgaXMgbm8gYml0IGxlZnQsIHdlJ2xsIGZpbGwgdGhlIGxlZnQgY2VsbHMgd2l0aCAwLCBhcyBkZXNjcmliZWQKKyAgICAgICAgICAvLyBpbiA4LjQuOSBvZiBKSVNYMDUxMDoyMDA0IChwLiAyNCkuCisgICAgICAgICAgYml0ID0gTk87CisgICAgICAgIH0KKworICAgICAgICAvLyBTa2lwIG1hc2tpbmcgaWYgbWFza19wYXR0ZXJuIGlzIC0xLgorICAgICAgICBpZiAobWFza1BhdHRlcm4gIT0gLTEgJiYgW1pYTWFza1V0aWwgZGF0YU1hc2tCaXQ6bWFza1BhdHRlcm4geDp4eCB5OnldKSB7CisgICAgICAgICAgYml0ID0gIWJpdDsKKyAgICAgICAgfQorICAgICAgICBbbWF0cml4IHNldFg6eHggeTp5IGJvb2xWYWx1ZTpiaXRdOworICAgICAgfQorICAgICAgeSArPSBkaXJlY3Rpb247CisgICAgfQorICAgIGRpcmVjdGlvbiA9IC1kaXJlY3Rpb247IC8vIFJldmVyc2UgdGhlIGRpcmVjdGlvbi4KKyAgICB5ICs9IGRpcmVjdGlvbjsKKyAgICB4IC09IDI7IC8vIE1vdmUgdG8gdGhlIGxlZnQuCisgIH0KKyAgLy8gQWxsIGJpdHMgc2hvdWxkIGJlIGNvbnN1bWVkLgorICBpZiAoYml0SW5kZXggIT0gW2RhdGFCaXRzIHNpemVdKSB7CisgICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IEB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJOb3QgYWxsIGJpdHMgY29uc3VtZWQ6ICVkLyVkIiwgYml0SW5kZXgsIFtkYXRhQml0cyBzaXplXV19OworCisgICAgaWYgKGVycm9yKSAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlpYRXJyb3JEb21haW4gY29kZTpaWE5vdEZvdW5kRXJyb3IgdXNlckluZm86dXNlckluZm9dOworICAgIHJldHVybiBOTzsKKyAgfQorCisgIHJldHVybiBZRVM7Cit9CisKKy8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldCAodG8gb25lKSBpbiB0aGUgInZhbHVlIi4gVGhlIG1vc3QKKy8vIHNpZ25pZmljYW50IGJpdCBpcyBwb3NpdGlvbiAzMi4gSWYgdGhlcmUgaXMgbm8gYml0IHNldCwgcmV0dXJuIDAuIEV4YW1wbGVzOgorLy8gLSBmaW5kTVNCU2V0KDApID0+IDAKKy8vIC0gZmluZE1TQlNldCgxKSA9PiAxCisvLyAtIGZpbmRNU0JTZXQoMjU1KSA9PiA4CisrIChpbnQpZmluZE1TQlNldDooaW50KXZhbHVlIHsKKyAgaW50IG51bURpZ2l0cyA9IDA7CisgIHdoaWxlICh2YWx1ZSAhPSAwKSB7CisgICAgdmFsdWUgPSAoaW50KSgodW5zaWduZWQgaW50KXZhbHVlID4+IDEpOworICAgICsrbnVtRGlnaXRzOworICB9CisgIHJldHVybiBudW1EaWdpdHM7Cit9CisKKy8vIENhbGN1bGF0ZSBCQ0ggKEJvc2UtQ2hhdWRodXJpLUhvY3F1ZW5naGVtKSBjb2RlIGZvciAidmFsdWUiIHVzaW5nIHBvbHlub21pYWwgInBvbHkiLiBUaGUgQkNICisvLyBjb2RlIGlzIHVzZWQgZm9yIGVuY29kaW5nIHR5cGUgaW5mb3JtYXRpb24gYW5kIHZlcnNpb24gaW5mb3JtYXRpb24uCisvLyBFeGFtcGxlOiBDYWxjdWxhdGlvbiBvZiB2ZXJzaW9uIGluZm9ybWF0aW9uIG9mIDcuCisvLyBmKHgpIGlzIGNyZWF0ZWQgZnJvbSA3LgorLy8gICAtIDcgPSAwMDAxMTEgaW4gNiBiaXRzCisvLyAgIC0gZih4KSA9IHheMiArIHheMSArIHheMAorLy8gZyh4KSBpcyBnaXZlbiBieSB0aGUgc3RhbmRhcmQgKHAuIDY3KQorLy8gICAtIGcoeCkgPSB4XjEyICsgeF4xMSArIHheMTAgKyB4XjkgKyB4XjggKyB4XjUgKyB4XjIgKyAxCisvLyBNdWx0aXBseSBmKHgpIGJ5IHheKDE4IC0gNikKKy8vICAgLSBmJyh4KSA9IGYoeCkgKiB4XigxOCAtIDYpCisvLyAgIC0gZicoeCkgPSB4XjE0ICsgeF4xMyArIHheMTIKKy8vIENhbGN1bGF0ZSB0aGUgcmVtYWluZGVyIG9mIGYnKHgpIC8gZyh4KQorLy8gICAgICAgICB4XjIKKy8vICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKy8vICAgZyh4KSApeF4xNCArIHheMTMgKyB4XjEyCisvLyAgICAgICAgIHheMTQgKyB4XjEzICsgeF4xMiArIHheMTEgKyB4XjEwICsgeF43ICsgeF40ICsgeF4yCisvLyAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHheMTEgKyB4XjEwICsgeF43ICsgeF40ICsgeF4yCisvLworLy8gVGhlIHJlbWFpbmRlciBpcyB4XjExICsgeF4xMCArIHheNyArIHheNCArIHheMgorLy8gRW5jb2RlIGl0IGluIGJpbmFyeTogMTEwMDEwMDEwMTAwCisvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIDB4Yzk0ICgxMTAwIDEwMDEgMDEwMCkKKy8vCisvLyBTaW5jZSBhbGwgY29lZmZpY2llbnRzIGluIHRoZSBwb2x5bm9taWFscyBhcmUgMSBvciAwLCB3ZSBjYW4gZG8gdGhlIGNhbGN1bGF0aW9uIGJ5IGJpdAorLy8gb3BlcmF0aW9ucy4gV2UgZG9uJ3QgY2FyZSBpZiBjb2ZmaWNpZW50cyBhcmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUuCisrIChpbnQpY2FsY3VsYXRlQkNIQ29kZTooaW50KXZhbHVlIHBvbHk6KGludClwb2x5IHsKKyAgLy8gSWYgcG9seSBpcyAiMSAxMTExIDAwMTAgMDEwMSIgKHZlcnNpb24gaW5mbyBwb2x5KSwgbXNiU2V0SW5Qb2x5IGlzIDEzLiBXZSdsbCBzdWJ0cmFjdCAxCisgIC8vIGZyb20gMTMgdG8gbWFrZSBpdCAxMi4KKyAgaW50IG1zYlNldEluUG9seSA9IFtzZWxmIGZpbmRNU0JTZXQ6cG9seV07CisgIHZhbHVlIDw8PSBtc2JTZXRJblBvbHkgLSAxOworICAvLyBEbyB0aGUgZGl2aXNpb24gYnVzaW5lc3MgdXNpbmcgZXhjbHVzaXZlLW9yIG9wZXJhdGlvbnMuCisgIHdoaWxlIChbc2VsZiBmaW5kTVNCU2V0OnZhbHVlXSA+PSBtc2JTZXRJblBvbHkpIHsKKyAgICB2YWx1ZSBePSBwb2x5IDw8IChbc2VsZiBmaW5kTVNCU2V0OnZhbHVlXSAtIG1zYlNldEluUG9seSk7CisgIH0KKyAgLy8gTm93IHRoZSAidmFsdWUiIGlzIHRoZSByZW1haW5kZXIgKGkuZS4gdGhlIEJDSCBjb2RlKQorICByZXR1cm4gdmFsdWU7Cit9CisKKy8vIE1ha2UgYml0IHZlY3RvciBvZiB0eXBlIGluZm9ybWF0aW9uLiBPbiBzdWNjZXNzLCBzdG9yZSB0aGUgcmVzdWx0IGluICJiaXRzIiBhbmQgcmV0dXJuIHRydWUuCisvLyBFbmNvZGUgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCBhbmQgbWFzayBwYXR0ZXJuLiBTZWUgOC45IG9mCisvLyBKSVNYMDUxMDoyMDA0IChwLjQ1KSBmb3IgZGV0YWlscy4KKysgKEJPT0wpbWFrZVR5cGVJbmZvQml0czooWlhFcnJvckNvcnJlY3Rpb25MZXZlbCAqKWVjTGV2ZWwgbWFza1BhdHRlcm46KGludCltYXNrUGF0dGVybiBiaXRzOihaWEJpdEFycmF5ICopYml0cyBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIGlmICghW1pYUVJDb2RlIGlzVmFsaWRNYXNrUGF0dGVybjptYXNrUGF0dGVybl0pIHsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gQHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5OiBAIkludmFsaWQgbWFzayBwYXR0ZXJuIn07CisKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYTm90Rm91bmRFcnJvciB1c2VySW5mbzp1c2VySW5mb107CisgICAgcmV0dXJuIE5POworICB9CisgIGludCB0eXBlSW5mbyA9IChbZWNMZXZlbCBiaXRzXSA8PCAzKSB8IG1hc2tQYXR0ZXJuOworICBbYml0cyBhcHBlbmRCaXRzOnR5cGVJbmZvIG51bUJpdHM6NV07CisKKyAgaW50IGJjaENvZGUgPSBbc2VsZiBjYWxjdWxhdGVCQ0hDb2RlOnR5cGVJbmZvIHBvbHk6VFlQRV9JTkZPX1BPTFldOworICBbYml0cyBhcHBlbmRCaXRzOmJjaENvZGUgbnVtQml0czoxMF07CisKKyAgWlhCaXRBcnJheSAqbWFza0JpdHMgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbbWFza0JpdHMgYXBwZW5kQml0czpUWVBFX0lORk9fTUFTS19QQVRURVJOIG51bUJpdHM6MTVdOworICBbYml0cyB4b3I6bWFza0JpdHNdOworCisgIGlmIChbYml0cyBzaXplXSAhPSAxNSkgeyAvLyBKdXN0IGluIGNhc2UuCisgICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IEB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJzaG91bGQgbm90IGhhcHBlbiBidXQgd2UgZ290OiAlZCIsIFtiaXRzIHNpemVdXX07CisKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYTm90Rm91bmRFcnJvciB1c2VySW5mbzp1c2VySW5mb107CisgICAgcmV0dXJuIE5POworICB9CisKKyAgcmV0dXJuIFlFUzsKK30KKworLy8gTWFrZSBiaXQgdmVjdG9yIG9mIHZlcnNpb24gaW5mb3JtYXRpb24uIE9uIHN1Y2Nlc3MsIHN0b3JlIHRoZSByZXN1bHQgaW4gImJpdHMiIGFuZCByZXR1cm4gdHJ1ZS4KKy8vIFNlZSA4LjEwIG9mIEpJU1gwNTEwOjIwMDQgKHAuNDUpIGZvciBkZXRhaWxzLgorKyAoQk9PTCltYWtlVmVyc2lvbkluZm9CaXRzOihaWFFSQ29kZVZlcnNpb24gKil2ZXJzaW9uIGJpdHM6KFpYQml0QXJyYXkgKiliaXRzIGVycm9yOihOU0Vycm9yICoqKWVycm9yIHsKKyAgW2JpdHMgYXBwZW5kQml0czp2ZXJzaW9uLnZlcnNpb25OdW1iZXIgbnVtQml0czo2XTsKKyAgaW50IGJjaENvZGUgPSBbc2VsZiBjYWxjdWxhdGVCQ0hDb2RlOnZlcnNpb24udmVyc2lvbk51bWJlciBwb2x5OlZFUlNJT05fSU5GT19QT0xZXTsKKyAgW2JpdHMgYXBwZW5kQml0czpiY2hDb2RlIG51bUJpdHM6MTJdOworCisgIGlmIChbYml0cyBzaXplXSAhPSAxOCkgeyAvLyBKdXN0IGluIGNhc2UuCisgICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IEB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJzaG91bGQgbm90IGhhcHBlbiBidXQgd2UgZ290OiAlZCIsIFtiaXRzIHNpemVdXX07CisKKyAgICBpZiAoZXJyb3IpICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46WlhFcnJvckRvbWFpbiBjb2RlOlpYTm90Rm91bmRFcnJvciB1c2VySW5mbzp1c2VySW5mb107CisgICAgcmV0dXJuIE5POworICB9CisKKyAgcmV0dXJuIFlFUzsKK30KKworLy8gQ2hlY2sgaWYgInZhbHVlIiBpcyBlbXB0eS4KKysgKEJPT0wpaXNFbXB0eTooaW50KXZhbHVlIHsKKyAgcmV0dXJuIHZhbHVlID09IC0xOworfQorCisrICh2b2lkKWVtYmVkVGltaW5nUGF0dGVybnM6KFpYQnl0ZU1hdHJpeCAqKW1hdHJpeCB7CisgIC8vIC04IGlzIGZvciBza2lwcGluZyBwb3NpdGlvbiBkZXRlY3Rpb24gcGF0dGVybnMgKHNpemUgNyksIGFuZCB0d28gaG9yaXpvbnRhbC92ZXJ0aWNhbAorICAvLyBzZXBhcmF0aW9uIHBhdHRlcm5zIChzaXplIDEpLiBUaHVzLCA4ID0gNyArIDEuCisgIGZvciAoaW50IGkgPSA4OyBpIDwgW21hdHJpeCB3aWR0aF0gLSA4OyArK2kpIHsKKyAgICBpbnQgYml0ID0gKGkgKyAxKSAlIDI7CisgICAgLy8gSG9yaXpvbnRhbCBsaW5lLgorICAgIGlmIChbc2VsZiBpc0VtcHR5OlttYXRyaXggZ2V0WDppIHk6Nl1dKSB7CisgICAgICBbbWF0cml4IHNldFg6aSB5OjYgYm9vbFZhbHVlOmJpdF07CisgICAgfQorICAgIC8vIFZlcnRpY2FsIGxpbmUuCisgICAgaWYgKFtzZWxmIGlzRW1wdHk6W21hdHJpeCBnZXRYOjYgeTppXV0pIHsKKyAgICAgIFttYXRyaXggc2V0WDo2IHk6aSBib29sVmFsdWU6Yml0XTsKKyAgICB9CisgIH0KK30KKworLy8gRW1iZWQgdGhlIGxvbmVseSBkYXJrIGRvdCBhdCBsZWZ0IGJvdHRvbSBjb3JuZXIuIEpJU1gwNTEwOjIwMDQgKHAuNDYpCisrIChCT09MKWVtYmVkRGFya0RvdEF0TGVmdEJvdHRvbUNvcm5lcjooWlhCeXRlTWF0cml4ICopbWF0cml4IHsKKyAgaWYgKFttYXRyaXggZ2V0WDo4IHk6bWF0cml4LmhlaWdodCAtIDhdID09IDApIHsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgW21hdHJpeCBzZXRYOjggeTptYXRyaXguaGVpZ2h0IC0gOCBpbnRWYWx1ZToxXTsKKworICByZXR1cm4gWUVTOworfQorCisrIChCT09MKWVtYmVkSG9yaXpvbnRhbFNlcGFyYXRpb25QYXR0ZXJuOihpbnQpeFN0YXJ0IHlTdGFydDooaW50KXlTdGFydCBtYXRyaXg6KFpYQnl0ZU1hdHJpeCAqKW1hdHJpeCB7CisgIGZvciAoaW50IHggPSAwOyB4IDwgODsgKyt4KSB7CisgICAgaWYgKCFbc2VsZiBpc0VtcHR5OlttYXRyaXggZ2V0WDp4U3RhcnQgKyB4IHk6eVN0YXJ0XV0pIHsKKyAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgW21hdHJpeCBzZXRYOnhTdGFydCArIHggeTp5U3RhcnQgaW50VmFsdWU6MF07CisgIH0KKworICByZXR1cm4gWUVTOworfQorCisrIChCT09MKWVtYmVkVmVydGljYWxTZXBhcmF0aW9uUGF0dGVybjooaW50KXhTdGFydCB5U3RhcnQ6KGludCl5U3RhcnQgbWF0cml4OihaWEJ5dGVNYXRyaXggKiltYXRyaXggeworICBmb3IgKGludCB5ID0gMDsgeSA8IDc7ICsreSkgeworICAgIGlmICghW3NlbGYgaXNFbXB0eTpbbWF0cml4IGdldFg6eFN0YXJ0IHk6eVN0YXJ0ICsgeV1dKSB7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIFttYXRyaXggc2V0WDp4U3RhcnQgeTp5U3RhcnQgKyB5IGludFZhbHVlOjBdOworICB9CisKKyAgcmV0dXJuIFlFUzsKK30KKworLy8gTm90ZSB0aGF0IHdlIGNhbm5vdCB1bmlmeSB0aGUgZnVuY3Rpb24gd2l0aCBlbWJlZFBvc2l0aW9uRGV0ZWN0aW9uUGF0dGVybigpIGRlc3BpdGUgdGhleSBhcmUKKy8vIGFsbW9zdCBpZGVudGljYWwsIHNpbmNlIHdlIGNhbm5vdCB3cml0ZSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgMkQgYXJyYXlzIGluIGRpZmZlcmVudCBzaXplcyBpbgorLy8gQy9DKysuIFdlIHNob3VsZCBsaXZlIHdpdGggdGhlIGZhY3QuCisrICh2b2lkKWVtYmVkUG9zaXRpb25BZGp1c3RtZW50UGF0dGVybjooaW50KXhTdGFydCB5U3RhcnQ6KGludCl5U3RhcnQgbWF0cml4OihaWEJ5dGVNYXRyaXggKiltYXRyaXggeworICBmb3IgKGludCB5ID0gMDsgeSA8IDU7ICsreSkgeworICAgIGZvciAoaW50IHggPSAwOyB4IDwgNTsgKyt4KSB7CisgICAgICBbbWF0cml4IHNldFg6eFN0YXJ0ICsgeCB5OnlTdGFydCArIHkgaW50VmFsdWU6UE9TSVRJT05fQURKVVNUTUVOVF9QQVRURVJOW3ldW3hdXTsKKyAgICB9CisgIH0KK30KKworKyAodm9pZCllbWJlZFBvc2l0aW9uRGV0ZWN0aW9uUGF0dGVybjooaW50KXhTdGFydCB5U3RhcnQ6KGludCl5U3RhcnQgbWF0cml4OihaWEJ5dGVNYXRyaXggKiltYXRyaXggeworICBmb3IgKGludCB5ID0gMDsgeSA8IDc7ICsreSkgeworICAgIGZvciAoaW50IHggPSAwOyB4IDwgNzsgKyt4KSB7CisgICAgICBbbWF0cml4IHNldFg6eFN0YXJ0ICsgeCB5OnlTdGFydCArIHkgaW50VmFsdWU6UE9TSVRJT05fREVURUNUSU9OX1BBVFRFUk5beV1beF1dOworICAgIH0KKyAgfQorfQorCisvLyBFbWJlZCBwb3NpdGlvbiBkZXRlY3Rpb24gcGF0dGVybnMgYW5kIHN1cnJvdW5kaW5nIHZlcnRpY2FsL2hvcml6b250YWwgc2VwYXJhdG9ycy4KKysgKEJPT0wpZW1iZWRQb3NpdGlvbkRldGVjdGlvblBhdHRlcm5zQW5kU2VwYXJhdG9yczooWlhCeXRlTWF0cml4ICopbWF0cml4IHsKKyAgLy8gRW1iZWQgdGhyZWUgYmlnIHNxdWFyZXMgYXQgY29ybmVycy4KKyAgaW50IHBkcFdpZHRoID0gc2l6ZW9mKFBPU0lUSU9OX0RFVEVDVElPTl9QQVRURVJOWzBdKSAvIHNpemVvZihpbnQpOworICAvLyBMZWZ0IHRvcCBjb3JuZXIuCisgIFtzZWxmIGVtYmVkUG9zaXRpb25EZXRlY3Rpb25QYXR0ZXJuOjAgeVN0YXJ0OjAgbWF0cml4Om1hdHJpeF07CisgIC8vIFJpZ2h0IHRvcCBjb3JuZXIuCisgIFtzZWxmIGVtYmVkUG9zaXRpb25EZXRlY3Rpb25QYXR0ZXJuOlttYXRyaXggd2lkdGhdIC0gcGRwV2lkdGggeVN0YXJ0OjAgbWF0cml4Om1hdHJpeF07CisgIC8vIExlZnQgYm90dG9tIGNvcm5lci4KKyAgW3NlbGYgZW1iZWRQb3NpdGlvbkRldGVjdGlvblBhdHRlcm46MCB5U3RhcnQ6W21hdHJpeCB3aWR0aF0gLSBwZHBXaWR0aCBtYXRyaXg6bWF0cml4XTsKKworICAvLyBFbWJlZCBob3Jpem9udGFsIHNlcGFyYXRpb24gcGF0dGVybnMgYXJvdW5kIHRoZSBzcXVhcmVzLgorICBpbnQgaHNwV2lkdGggPSA4OworICAvLyBMZWZ0IHRvcCBjb3JuZXIuCisgIFtzZWxmIGVtYmVkSG9yaXpvbnRhbFNlcGFyYXRpb25QYXR0ZXJuOjAgeVN0YXJ0OmhzcFdpZHRoIC0gMSBtYXRyaXg6bWF0cml4XTsKKyAgLy8gUmlnaHQgdG9wIGNvcm5lci4KKyAgW3NlbGYgZW1iZWRIb3Jpem9udGFsU2VwYXJhdGlvblBhdHRlcm46W21hdHJpeCB3aWR0aF0gLSBoc3BXaWR0aCB5U3RhcnQ6aHNwV2lkdGggLSAxIG1hdHJpeDptYXRyaXhdOworICAvLyBMZWZ0IGJvdHRvbSBjb3JuZXIuCisgIFtzZWxmIGVtYmVkSG9yaXpvbnRhbFNlcGFyYXRpb25QYXR0ZXJuOjAgeVN0YXJ0OlttYXRyaXggd2lkdGhdIC0gaHNwV2lkdGggbWF0cml4Om1hdHJpeF07CisKKyAgLy8gRW1iZWQgdmVydGljYWwgc2VwYXJhdGlvbiBwYXR0ZXJucyBhcm91bmQgdGhlIHNxdWFyZXMuCisgIGludCB2c3BTaXplID0gNzsKKyAgLy8gTGVmdCB0b3AgY29ybmVyLgorICBpZiAoIVtzZWxmIGVtYmVkVmVydGljYWxTZXBhcmF0aW9uUGF0dGVybjp2c3BTaXplIHlTdGFydDowIG1hdHJpeDptYXRyaXhdKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIC8vIFJpZ2h0IHRvcCBjb3JuZXIuCisgIGlmICghW3NlbGYgZW1iZWRWZXJ0aWNhbFNlcGFyYXRpb25QYXR0ZXJuOlttYXRyaXggaGVpZ2h0XSAtIHZzcFNpemUgLSAxIHlTdGFydDowIG1hdHJpeDptYXRyaXhdKSB7CisgICAgcmV0dXJuIE5POworICB9CisgIC8vIExlZnQgYm90dG9tIGNvcm5lci4KKyAgaWYgKCFbc2VsZiBlbWJlZFZlcnRpY2FsU2VwYXJhdGlvblBhdHRlcm46dnNwU2l6ZSB5U3RhcnQ6W21hdHJpeCBoZWlnaHRdIC0gdnNwU2l6ZSBtYXRyaXg6bWF0cml4XSkgeworICAgIHJldHVybiBOTzsKKyAgfQorCisgIHJldHVybiBZRVM7Cit9CisKKy8vIEVtYmVkIHBvc2l0aW9uIGFkanVzdG1lbnQgcGF0dGVybnMgaWYgbmVlZCBiZS4KKysgKHZvaWQpbWF5YmVFbWJlZFBvc2l0aW9uQWRqdXN0bWVudFBhdHRlcm5zOihaWFFSQ29kZVZlcnNpb24gKil2ZXJzaW9uIG1hdHJpeDooWlhCeXRlTWF0cml4ICopbWF0cml4IHsKKyAgaWYgKHZlcnNpb24udmVyc2lvbk51bWJlciA8IDIpIHsgLy8gVGhlIHBhdHRlcm5zIGFwcGVhciBpZiB2ZXJzaW9uID49IDIKKyAgICByZXR1cm47CisgIH0KKyAgaW50IGluZGV4ID0gdmVyc2lvbi52ZXJzaW9uTnVtYmVyIC0gMTsKKyAgaW50IG51bUNvb3JkaW5hdGVzID0gc2l6ZW9mKFBPU0lUSU9OX0FESlVTVE1FTlRfUEFUVEVSTl9DT09SRElOQVRFX1RBQkxFW2luZGV4XSkgLyBzaXplb2YoaW50KTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db29yZGluYXRlczsgKytpKSB7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1Db29yZGluYXRlczsgKytqKSB7CisgICAgICBpbnQgeSA9IFBPU0lUSU9OX0FESlVTVE1FTlRfUEFUVEVSTl9DT09SRElOQVRFX1RBQkxFW2luZGV4XVtpXTsKKyAgICAgIGludCB4ID0gUE9TSVRJT05fQURKVVNUTUVOVF9QQVRURVJOX0NPT1JESU5BVEVfVEFCTEVbaW5kZXhdW2pdOworICAgICAgaWYgKHggPT0gLTEgfHwgeSA9PSAtMSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIC8vIElmIHRoZSBjZWxsIGlzIHVuc2V0LCB3ZSBlbWJlZCB0aGUgcG9zaXRpb24gYWRqdXN0bWVudCBwYXR0ZXJuIGhlcmUuCisgICAgICBpZiAoW3NlbGYgaXNFbXB0eTpbbWF0cml4IGdldFg6eCB5OnldXSkgeworICAgICAgICAvLyAtMiBpcyBuZWNlc3Nhcnkgc2luY2UgdGhlIHgveSBjb29yZGluYXRlcyBwb2ludCB0byB0aGUgY2VudGVyIG9mIHRoZSBwYXR0ZXJuLCBub3QgdGhlCisgICAgICAgIC8vIGxlZnQgdG9wIGNvcm5lci4KKyAgICAgICAgW3NlbGYgZW1iZWRQb3NpdGlvbkFkanVzdG1lbnRQYXR0ZXJuOnggLSAyIHlTdGFydDp5IC0gMiBtYXRyaXg6bWF0cml4XTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDL3FyY29kZS9lbmNvZGVyL1pYUVJDb2RlLmggYi9aWGluZ09iakMvcXJjb2RlL2VuY29kZXIvWlhRUkNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTYyOWIxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDL3FyY29kZS9lbmNvZGVyL1pYUVJDb2RlLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworZXh0ZXJuIGludCBjb25zdCBOVU1fTUFTS19QQVRURVJOUzsKKworQGNsYXNzIFpYQnl0ZU1hdHJpeCwgWlhFcnJvckNvcnJlY3Rpb25MZXZlbCwgWlhNb2RlLCBaWFFSQ29kZVZlcnNpb247CisKK0BpbnRlcmZhY2UgWlhRUkNvZGUgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWE1vZGUgKm1vZGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBaWEVycm9yQ29ycmVjdGlvbkxldmVsICplY0xldmVsOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhRUkNvZGVWZXJzaW9uICp2ZXJzaW9uOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IG1hc2tQYXR0ZXJuOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgWlhCeXRlTWF0cml4ICptYXRyaXg7CisKKysgKEJPT0wpaXNWYWxpZE1hc2tQYXR0ZXJuOihpbnQpbWFza1BhdHRlcm47CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWFFSQ29kZS5tIGIvWlhpbmdPYmpDL3FyY29kZS9lbmNvZGVyL1pYUVJDb2RlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhZDUxYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQy9xcmNvZGUvZW5jb2Rlci9aWFFSQ29kZS5tCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQnl0ZU1hdHJpeC5oIgorI2ltcG9ydCAiWlhFcnJvckNvcnJlY3Rpb25MZXZlbC5oIgorI2ltcG9ydCAiWlhNb2RlLmgiCisjaW1wb3J0ICJaWFFSQ29kZS5oIgorCitpbnQgY29uc3QgTlVNX01BU0tfUEFUVEVSTlMgPSA4OworCitAaW1wbGVtZW50YXRpb24gWlhRUkNvZGUKKworLSAoaWQpaW5pdCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgX21vZGUgPSBuaWw7CisgICAgX2VjTGV2ZWwgPSBuaWw7CisgICAgX3ZlcnNpb24gPSBuaWw7CisgICAgX21hc2tQYXR0ZXJuID0gLTE7CisgICAgX21hdHJpeCA9IG5pbDsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKKyAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhDYXBhY2l0eToyMDBdOworICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIjw8XG4gbW9kZTogJUAiLCBzZWxmLm1vZGVdOworICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIlxuIGVjTGV2ZWw6ICVAIiwgc2VsZi5lY0xldmVsXTsKKyAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCJcbiB2ZXJzaW9uOiAlQCIsIHNlbGYudmVyc2lvbl07CisgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiXG4gbWFza1BhdHRlcm46ICVkIiwgc2VsZi5tYXNrUGF0dGVybl07CisgIGlmIChzZWxmLm1hdHJpeCA9PSBuaWwpIHsKKyAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIlxuIG1hdHJpeDogKG51bGwpXG4iXTsKKyAgfSBlbHNlIHsKKyAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIlxuIG1hdHJpeDpcbiVAIiwgW3NlbGYubWF0cml4IGRlc2NyaXB0aW9uXV07CisgIH0KKyAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCI+PlxuIl07CisgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aFN0cmluZzpyZXN1bHRdOworfQorCisvLyBDaGVjayBpZiAibWFza19wYXR0ZXJuIiBpcyB2YWxpZC4KKysgKEJPT0wpaXNWYWxpZE1hc2tQYXR0ZXJuOihpbnQpbWFza1BhdHRlcm4geworICByZXR1cm4gbWFza1BhdHRlcm4gPj0gMCAmJiBtYXNrUGF0dGVybiA8IE5VTV9NQVNLX1BBVFRFUk5TOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9mYWlsLTEuanBnIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvZmFpbC0xLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjY5OWExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvZmFpbC0xLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9mYWlsLTIuanBnIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvZmFpbC0yLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZjQwM2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvZmFpbC0yLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9mYWlsLTMuanBnIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvZmFpbC0zLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZGI1YjVjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvZmFpbC0zLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9mYWlsLTQuanBnIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvZmFpbC00LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNjAzNTA0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvZmFpbC00LmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9xcmNvZGUtMS5qcGcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9xcmNvZGUtMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjMyNGQ2MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9iZW5jaG1hcmsvYW5kcm9pZC0xL3FyY29kZS0xLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9xcmNvZGUtMi5qcGcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9xcmNvZGUtMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjdkYWQ1MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9iZW5jaG1hcmsvYW5kcm9pZC0xL3FyY29kZS0yLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9xcmNvZGUtMy5qcGcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9xcmNvZGUtMy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDNkNzVjNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9iZW5jaG1hcmsvYW5kcm9pZC0xL3FyY29kZS0zLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9xcmNvZGUtNC5qcGcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS9xcmNvZGUtNC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmVjM2NkNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9iZW5jaG1hcmsvYW5kcm9pZC0xL3FyY29kZS00LmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS91cGNhLTEuanBnIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvdXBjYS0xLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODJmNDNhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvdXBjYS0xLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS91cGNhLTIuanBnIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvdXBjYS0yLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMDJkNjQyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvdXBjYS0yLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMS91cGNhLTMuanBnIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvdXBjYS0zLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMGQ4OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTEvdXBjYS0zLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9jb2RlMTI4LTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvY29kZTEyOC0xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kOTE2ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvY29kZTEyOC0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9jb2RlMzktMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9jb2RlMzktMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzAwYmE3ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9iZW5jaG1hcmsvYW5kcm9pZC0yL2NvZGUzOS0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9kYXRhbWF0cml4LTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvZGF0YW1hdHJpeC0xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MzYyOGExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvZGF0YW1hdHJpeC0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9lYW4xMy0xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9iZW5jaG1hcmsvYW5kcm9pZC0yL2VhbjEzLTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4NDdiNWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9lYW4xMy0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9mYWlsLTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvZmFpbC0xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNDJmMTAzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvZmFpbC0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9mYWlsLTIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvZmFpbC0yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOTBjODZjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvZmFpbC0yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9mYWlsLTMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvZmFpbC0zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjk2ZjgwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvZmFpbC0zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9pdGYtMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9pdGYtMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGE3MDI1MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9iZW5jaG1hcmsvYW5kcm9pZC0yL2l0Zi0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9wZGY0MTctMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9wZGY0MTctMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWE1YzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9iZW5jaG1hcmsvYW5kcm9pZC0yL3BkZjQxNy0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9xcmNvZGUtMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi9xcmNvZGUtMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGVmNGRiNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9iZW5jaG1hcmsvYW5kcm9pZC0yL3FyY29kZS0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmVuY2htYXJrL2FuZHJvaWQtMi91cGNhLTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvdXBjYS0xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNGY3NjRlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JlbmNobWFyay9hbmRyb2lkLTIvdXBjYS0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvUkVBRE1FIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODdmMTJkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L1JFQURNRQpAQCAtMCwwICsxIEBACitUaGFua3MgdG8gRW5yaXF1ZSBHLVMgZm9yIGNvbnRyaWJ1dGluZyBtYW55IG9mIHRoZSBFQU4tMTMgdGVzdCBpbWFnZXMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS83LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzdjZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS83LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODNmYzUwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvNy50eHQKQEAgLTAsMCArMSBAQAorQ29kZSAyRCEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9IaXN0b3JpY28ucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvSGlzdG9yaWNvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmUyYmQwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvSGlzdG9yaWNvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9IaXN0b3JpY28udHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvSGlzdG9yaWNvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2Q1OWZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvSGlzdG9yaWNvLnR4dApAQCAtMCwwICsxIEBACitIaXN0w7NyaWNvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvSGlzdG9yaWNvTG9uZy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9IaXN0b3JpY29Mb25nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODEwM2U2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvSGlzdG9yaWNvTG9uZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvSGlzdG9yaWNvTG9uZy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9IaXN0b3JpY29Mb25nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmZlM2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvSGlzdG9yaWNvTG9uZy50eHQKQEAgLTAsMCArMSBAQAorSGlzdMOzw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8Ozw7PDs8OzcmljbwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL2FiYy0xOXgxOUMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvYWJjLTE5eDE5Qy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjNzgyYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL2FiYy0xOXgxOUMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL2FiYy0xOXgxOUMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvYWJjLTE5eDE5Qy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1ZDViNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL2FiYy0xOXgxOUMudHh0CkBAIC0wLDAgKzEgQEAKK2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvYWJjLTM3eDM3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL2FiYy0zN3gzNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczOTE4OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL2FiYy0zN3gzNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvYWJjLTM3eDM3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL2FiYy0zN3gzNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhOTBhNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL2FiYy0zN3gzNy50eHQKQEAgLTAsMCArMSBAQAorYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9sb3JlbS0wNzV4MDc1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL2xvcmVtLTA3NXgwNzUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOTI4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9sb3JlbS0wNzV4MDc1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9sb3JlbS0wNzV4MDc1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL2xvcmVtLTA3NXgwNzUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMDRhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9sb3JlbS0wNzV4MDc1LnR4dApAQCAtMCwwICsxIEBACitJbiB1dCBtYWduYSB2ZWwgbWF1cmlzIG1hbGVzdWFkYSBkaWN0dW0uIE51bGxhIHVsbGFtY29ycGVyIG1ldHVzIHF1aXMgZGlhbSBjdXJzdXMgZmFjaWxpc2lzLiBTZWQgbW9sbGlzIHF1YW0gaWQganVzdG8gcnV0cnVtIHNhZ2l0dGlzLiBEb25lYyBsYW9yZWV0IHJ1dHJ1bSBlc3QsIG5lYyBjb252YWxsaXMgbWF1cmlzIGNvbmRpbWVudHVtIHNpdCBhbWV0LiBQaGFzZWxsdXMgZ3JhdmlkYSwganVzdG8gZXQgY29uZ3VlIGF1Y3RvciwgbmlzaSBpcHN1bSB2aXZlcnJhIGVyYXQsIGVnZXQgaGVuZHJlcml0IGZlbGlzIHR1cnBpcyBuZWMgbG9yZW0uIE51bGxhIHVsdHJpY2VzLCBlbGl0IHBlbGxlbnRlc3F1ZSBhbGlxdWV0IGxhb3JlZXQsIGp1c3RvIGVyYXQgcHVsdmluYXIgbmlzaSwgaWQgZWxlbWVudHVtIHNhcGllbiBkb2xvciBldCBkaWFtLiBEb25lYyBhYyBudW5jIHNvZGFsZXMgZWxpdCBwbGFjZXJhdCBlbGVpZmVuZC4gU2VkIG9ybmFyZSBsdWN0dXMgb3JuYXJlLiBWZXN0aWJ1bHVtIHZlaGljdWxhLCBtYXNzYSBhdCBwaGFyZXRyYSBmcmluZ2lsbGEsIHJpc3VzIGp1c3RvIGZhdWNpYnVzIGVyYXQsIG5lYyBwb3J0dGl0b3IgbmliaCB0ZWxsdXMgc2VkIGVzdC4gVXQganVzdG8gZGlhbSwgbG9ib3J0aXMgZXUgdHJpc3RpcXVlIGFjLCBwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvbG9yZW0tMTA1eDEwNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9sb3JlbS0xMDV4MTA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjMwZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvbG9yZW0tMTA1eDEwNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvbG9yZW0tMTA1eDEwNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9sb3JlbS0xMDV4MTA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTNhY2FmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvbG9yZW0tMTA1eDEwNS50eHQKQEAgLTAsMCArMSBAQAorSW4gdXQgbWFnbmEgdmVsIG1hdXJpcyBtYWxlc3VhZGEgZGljdHVtLiBOdWxsYSB1bGxhbWNvcnBlciBtZXR1cyBxdWlzIGRpYW0gY3Vyc3VzIGZhY2lsaXNpcy4gU2VkIG1vbGxpcyBxdWFtIGlkIGp1c3RvIHJ1dHJ1bSBzYWdpdHRpcy4gRG9uZWMgbGFvcmVldCBydXRydW0gZXN0LCBuZWMgY29udmFsbGlzIG1hdXJpcyBjb25kaW1lbnR1bSBzaXQgYW1ldC4gUGhhc2VsbHVzIGdyYXZpZGEsIGp1c3RvIGV0IGNvbmd1ZSBhdWN0b3IsIG5pc2kgaXBzdW0gdml2ZXJyYSBlcmF0LCBlZ2V0IGhlbmRyZXJpdCBmZWxpcyB0dXJwaXMgbmVjIGxvcmVtLiBOdWxsYSB1bHRyaWNlcywgZWxpdCBwZWxsZW50ZXNxdWUgYWxpcXVldCBsYW9yZWV0LCBqdXN0byBlcmF0IHB1bHZpbmFyIG5pc2ksIGlkIGVsZW1lbnR1bSBzYXBpZW4gZG9sb3IgZXQgZGlhbS4gRG9uZWMgYWMgbnVuYyBzb2RhbGVzIGVsaXQgcGxhY2VyYXQgZWxlaWZlbmQuIFNlZCBvcm5hcmUgbHVjdHVzIG9ybmFyZS4gVmVzdGlidWx1bSB2ZWhpY3VsYSwgbWFzc2EgYXQgcGhhcmV0cmEgZnJpbmdpbGxhLCByaXN1cyBqdXN0byBmYXVjaWJ1cyBlcmF0LCBuZWMgcG9ydHRpdG9yIG5pYmggdGVsbHVzIHNlZCBlc3QuIFV0IGp1c3RvIGRpYW0sIGxvYm9ydGlzIGV1IHRyaXN0aXF1ZSBhYywgcC5JbiB1dCBtYWduYSB2ZWwgbWF1cmlzIG1hbGVzdWFkYSBkaWN0dW0uIE51bGxhIHVsbGFtY29ycGVyIG1ldHVzIHF1aXMgZGlhbSBjdXJzdXMgZmFjaWxpc2lzLiBTZWQgbW9sbGlzIHF1YW0gaWQganVzdG8gcnV0cnVtIHNhZ2l0dGlzLiBEb25lYyBsYW9yZWV0IHJ1dHJ1bSBlc3QsIG5lYyBjb252YWxsaXMgbWF1cmlzIGNvbmRpbWVudHVtIHNpdCBhbWV0LiBQaGFzZWxsdXMgZ3JhdmlkYSwganVzdG8gZXQgY29uZ3VlIGF1Y3RvciwgbmlzaSBpcHN1bSB2aXZlcnJhIGVyYXQsIGVnZXQgaGVuZHJlcml0IGZlbGlzIHR1cnBpcyBuZWMgbG9yZW0uIE51bGxhIHVsdHJpY2VzLCBlbGl0IHBlbGxlbnRlc3F1ZSBhbGlxdWV0IGxhb3JlZXQsIGp1c3RvIGVyYXQgcHVsdmluYXIgbmlzaSwgaWQgZWxlbWVudHVtIHNhcGllbiBkb2xvciBldCBkaWFtLiBEb25lYyBhYyBudW5jIHNvZGFsZXMgZWxpdCBwbGFjZXJhdCBlbGVpZmVuZC4gU2VkIG9ybmFyZSBsdWN0dXMgb3JuYXJlLiBWZXN0aWJ1bHVtIHZlaGljdWxhLCBtYXNzYSBhdCBwaGFyZXRyYSBmcmluZ2lsbGEsIHJpc3VzIGp1c3RvIGZhdWNpYnVzIGVyYXQsIG5lYyBwb3J0dGl0b3IgbmliaCB0ZWxsdXMgc2VkIGVzdC4gVXQganVzdG8gZGlhbSwgbG9ib3J0aXMgZXUgdHJpc3RpcXVlIGFjLCBwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvbG9yZW0tMTUxeDE1MS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9sb3JlbS0xNTF4MTUxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzc0NjhiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvbG9yZW0tMTUxeDE1MS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvbG9yZW0tMTUxeDE1MS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS9sb3JlbS0xNTF4MTUxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjY4M2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvbG9yZW0tMTUxeDE1MS50eHQKQEAgLTAsMCArMSBAQAorSW4gdXQgbWFnbmEgdmVsIG1hdXJpcyBtYWxlc3VhZGEgZGljdHVtLiBOdWxsYSB1bGxhbWNvcnBlciBtZXR1cyBxdWlzIGRpYW0gY3Vyc3VzIGZhY2lsaXNpcy4gU2VkIG1vbGxpcyBxdWFtIGlkIGp1c3RvIHJ1dHJ1bSBzYWdpdHRpcy4gRG9uZWMgbGFvcmVldCBydXRydW0gZXN0LCBuZWMgY29udmFsbGlzIG1hdXJpcyBjb25kaW1lbnR1bSBzaXQgYW1ldC4gUGhhc2VsbHVzIGdyYXZpZGEsIGp1c3RvIGV0IGNvbmd1ZSBhdWN0b3IsIG5pc2kgaXBzdW0gdml2ZXJyYSBlcmF0LCBlZ2V0IGhlbmRyZXJpdCBmZWxpcyB0dXJwaXMgbmVjIGxvcmVtLiBOdWxsYSB1bHRyaWNlcywgZWxpdCBwZWxsZW50ZXNxdWUgYWxpcXVldCBsYW9yZWV0LCBqdXN0byBlcmF0IHB1bHZpbmFyIG5pc2ksIGlkIGVsZW1lbnR1bSBzYXBpZW4gZG9sb3IgZXQgZGlhbS4gRG9uZWMgYWMgbnVuYyBzb2RhbGVzIGVsaXQgcGxhY2VyYXQgZWxlaWZlbmQuIFNlZCBvcm5hcmUgbHVjdHVzIG9ybmFyZS4gVmVzdGlidWx1bSB2ZWhpY3VsYSwgbWFzc2EgYXQgcGhhcmV0cmEgZnJpbmdpbGxhLCByaXN1cyBqdXN0byBmYXVjaWJ1cyBlcmF0LCBuZWMgcG9ydHRpdG9yIG5pYmggdGVsbHVzIHNlZCBlc3QuIFV0IGp1c3RvIGRpYW0sIGxvYm9ydGlzIGV1IHRyaXN0aXF1ZSBhYywgcC5JbiB1dCBtYWduYSB2ZWwgbWF1cmlzIG1hbGVzdWFkYSBkaWN0dW0uIE51bGxhIHVsbGFtY29ycGVyIG1ldHVzIHF1aXMgZGlhbSBjdXJzdXMgZmFjaWxpc2lzLiBTZWQgbW9sbGlzIHF1YW0gaWQganVzdG8gcnV0cnVtIHNhZ2l0dGlzLiBEb25lYyBsYW9yZWV0IHJ1dHJ1bSBlc3QsIG5lYyBjb252YWxsaXMgbWF1cmlzIGNvbmRpbWVudHVtIHNpdCBhbWV0LiBQaGFzZWxsdXMgZ3JhdmlkYSwganVzdG8gZXQgY29uZ3VlIGF1Y3RvciwgbmlzaSBpcHN1bSB2aXZlcnJhIGVyYXQsIGVnZXQgaGVuZHJlcml0IGZlbGlzIHR1cnBpcyBuZWMgbG9yZW0uIE51bGxhIHVsdHJpY2VzLCBlbGl0IHBlbGxlbnRlc3F1ZSBhbGlxdWV0IGxhb3JlZXQsIGp1c3RvIGVyYXQgcHVsdmluYXIgbmlzaSwgaWQgZWxlbWVudHVtIHNhcGllbiBkb2xvciBldCBkaWFtLiBEb25lYyBhYyBudW5jIHNvZGFsZXMgZWxpdCBwbGFjZXJhdCBlbGVpZmVuZC4gU2VkIG9ybmFyZSBsdWN0dXMgb3JuYXJlLiBWZXN0aWJ1bHVtIHZlaGljdWxhLCBtYXNzYSBhdCBwaGFyZXRyYSBmcmluZ2lsbGEsIHJpc3VzIGp1c3RvIGZhdWNpYnVzIGVyYXQsIG5lYyBwb3J0dGl0b3IgbmliaCB0ZWxsdXMgc2VkIGVzdC4gVXQganVzdG8gZGlhbSwgbG9ib3J0aXMgZXUgdHJpc3RpcXVlIGFjLCBwLiBJbiB1dCBtYWduYSB2ZWwgbWF1cmlzIG1hbGVzdWFkYSBkaWN0dW0uIE51bGxhIHVsbGFtY29ycGVyIG1ldHVzIHF1aXMgZGlhbSBjdXJzdXMgZmFjaWxpc2lzLiBTZWQgbW9sbGlzIHF1YW0gaWQganVzdG8gcnV0cnVtIHNhZ2l0dGlzLiBEb25lYyBsYW9yZWV0IHJ1dHJ1bSBlc3QsIG5lYyBjb252YWxsaXMgbWF1cmlzIGNvbmRpbWVudHVtIHNpdCBhbWV0LiBQaGFzZWxsdXMgZ3JhdmlkYSwganVzdG8gZXQgY29uZ3VlIGF1Y3RvciwgbmlzaSBpcHN1bSB2aXZlcnJhIGVyYXQsIGVnZXQgaGVuZHJlcml0IGZlbGlzIHR1cnBpcyBuZWMgbG9yZW0uIE51bGxhIHVsdHJpY2VzLCBlbGl0IHBlbGxlbnRlc3F1ZSBhbGlxdWV0IGxhb3JlZXQsIGp1c3RvIGVyYXQgcHVsdmluYXIgbmlzaSwgaWQgZWxlbWVudHVtIHNhcGllbiBkb2xvciBldCBkaWFtLiBEb25lYyBhYyBudW5jIHNvZGFsZXMgZWxpdCBwbGFjZXJhdCBlbGVpZmVuZC4gU2VkIG9ybmFyZSBsdWN0dXMgb3JuYXJlLiBWZXN0aWJ1bHVtIHZlaGljdWxhLCBtYXNzYSBhdCBwaGFyZXRyYSBmcmluZ2lsbGEsIHJpc3VzIGp1c3RvIGZhdWNpYnVzIGVyYXQsIG5lYyBwb3J0dGl0b3IgbmliaCB0ZWxsdXMgc2VkIGVzdC4gVXQganVzdG8gZGlhbSwgbG9ib3J0aXMgZXUgdHJpc3RpcXVlIGFjLCBwLkluIHV0IG1hZ25hIHZlbCBtYXVyaXMgbWFsZXN1YWRhIGRpY3R1bS4gTnVsbGEgdWxsYW1jb3JwZXIgbWV0dXMgcXVpcyBkaWFtIGN1cnN1cyBmYWNpbGlzaXMuIFNlZCBtb2xsaXMgcXVhbSBpZCBqdXN0byBydXRydW0gc2FnaXR0aXMuIERvbmVjIGxhb3JlZXQgcnV0cnVtIGVzdCwgbmVjIGNvbnZhbGxpcyBtYXVyaXMgY29uZGltZW50dW0gc2l0IGFtZXQuIFBoYXNlbGx1cyBncmF2aWRhLCBqdXN0byBldCBjb25ndWUgYXVjdG9yLCBuaXNpIGlwc3VtIHZpdmVycmEgZXJhdCwgZWdldCBoZW5kcmVyaXQgZmVsaXMgdHVycGlzIG5lYyBsb3JlbS4gTnVsbGEgdWx0cmljZXMsIGVsaXQgcGVsbGVudGVzcXVlIGFsaXF1ZXQgbGFvcmVldCwganVzdG8gZXJhdCBwdWx2aW5hciBuaXNpLCBpZCBlbGVtZW50dW0gc2FwaWVuIGRvbG9yIGV0IGRpYW0uIERvbmVjIGFjIG51bmMgc29kYWxlcyBlbGl0IHBsYWNlcmF0IGVsZWlmZW5kLiBTZWQgb3JuYXJlIGx1Y3R1cyBvcm5hcmUuIFZlc3RpYnVsdW0gdmVoaWN1bGEsIG1hc3NhIGF0IHBoYXJldHJhIGZyaW5naWxsYSwgcmlzdXMganVzdG8gZmF1Y2lidXMgZXJhdCwgbmVjIHBvcnR0aXRvciBuaWJoIHRlbGx1cyBzZWQgZXN0LiBVdCBqdXN0byBkaWFtLCBsb2JvcnRpcyBldSB0cmlzLiBJbiB1dCBtYWduYSB2ZWwgbWF1cmlzIG1hbGVzdWFkYSBkaWN0dW0uIE51bGxhIHVsbGFtY29ycGVyIG1ldHVzIHF1aXMgZGlhbSBjdXJzdXMgZmFjaWxpc2lzLiBTZWQgbW9sbGlzIHF1YW0gaWQganVzdG8gcnV0cnVtIHNhZ2l0dGlzLiBEb25lYyBsYW9yZWV0IHJ1dHJ1bSBlc3QsIG5lYyBjb252YWxsaXMgbWF1cmlzIGNvbmRpbWVudHVtIHNpdCBhbWV0LiBQaGFzZWxsdXMgZ3JhdmlkYSwganVzdG8gZXQgY29uZ3VlIGF1Y3RvciwgbmlzaSBpcHN1bSB2aXZlcnJhIGVyYXQsIGVnZXQgaGVuZHJlcml0IGZlbGlzIHR1cnBpcyBuZWMgbG9yZW0uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvdGFibGVTaGlmdHMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvdGFibGVTaGlmdHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlM2IwODYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS90YWJsZVNoaWZ0cy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvdGFibGVTaGlmdHMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvdGFibGVTaGlmdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMzEwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMS90YWJsZVNoaWZ0cy50eHQKQEAgLTAsMCArMSBAQAorQWhVVURnZHk2NzI7Li46OEtqSEg3NzZKSEhuM2cuIDhsbS8lMjJObjg3M1IyODk3a3M0SktESjlKSmF6YTIzMjMhOjo7MDlVSlJyaERRU0tKREtkU0pTZHNramRzbGtFZGpzZXplOnplClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvdGFnLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL3RhZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk2OWRhNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL3RhZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvdGFnLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL3RhZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI5YTI0OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL3RhZy50eHQKQEAgLTAsMCArMSBAQAorQ2VjaSBlc3QgdW4gdGFnLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL3RleHRlLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL3RleHRlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzZhN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvdGV4dGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL3RleHRlLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0xL3RleHRlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzE2YTlmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTEvdGV4dGUudHh0CkBAIC0wLDAgKzEgQEAKK0NlY2kgZXN0IHVuIHRleHRlIQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZTkxZGMyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzAxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGEyNGMwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDEudHh0CkBAIC0wLDAgKzEgQEAKK1RoaXMgaXMgYSByZWFsIHdvcmxkIEF6dGVjIGJhcmNvZGUgdGVzdC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDM4NTEwNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzAyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhMjRjMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzAyLnR4dApAQCAtMCwwICsxIEBACitUaGlzIGlzIGEgcmVhbCB3b3JsZCBBenRlYyBiYXJjb2RlIHRlc3QuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxZDlmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYTI0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wMy50eHQKQEAgLTAsMCArMSBAQAorVGhpcyBpcyBhIHJlYWwgd29ybGQgQXp0ZWMgYmFyY29kZSB0ZXN0LgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNGVkMzFjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGEyNGMwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDQudHh0CkBAIC0wLDAgKzEgQEAKK1RoaXMgaXMgYSByZWFsIHdvcmxkIEF6dGVjIGJhcmNvZGUgdGVzdC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDhkMGJkYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhMjRjMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA1LnR4dApAQCAtMCwwICsxIEBACitUaGlzIGlzIGEgcmVhbCB3b3JsZCBBenRlYyBiYXJjb2RlIHRlc3QuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlmNmY2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYTI0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wNi50eHQKQEAgLTAsMCArMSBAQAorVGhpcyBpcyBhIHJlYWwgd29ybGQgQXp0ZWMgYmFyY29kZSB0ZXN0LgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNzA1YWUzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGEyNGMwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDcudHh0CkBAIC0wLDAgKzEgQEAKK1RoaXMgaXMgYSByZWFsIHdvcmxkIEF6dGVjIGJhcmNvZGUgdGVzdC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGYwNzY5MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhMjRjMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzA4LnR4dApAQCAtMCwwICsxIEBACitUaGlzIGlzIGEgcmVhbCB3b3JsZCBBenRlYyBiYXJjb2RlIHRlc3QuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3YjVjOTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYWZhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8wOS50eHQKQEAgLTAsMCArMSBAQAorbWFpbHRvOnp4aW5nQGdvb2dsZWdyb3Vwcy5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODMwZDM4ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzEwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhZmExNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzEwLnR4dApAQCAtMCwwICsxIEBACittYWlsdG86enhpbmdAZ29vZ2xlZ3JvdXBzLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NTBmNjgyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzExLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGFmYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTEudHh0CkBAIC0wLDAgKzEgQEAKK21haWx0bzp6eGluZ0Bnb29nbGVncm91cHMuY29tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzOGU2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYWZhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xMi50eHQKQEAgLTAsMCArMSBAQAorbWFpbHRvOnp4aW5nQGdvb2dsZWdyb3Vwcy5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzA4MDA2YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzEzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhZmExNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzEzLnR4dApAQCAtMCwwICsxIEBACittYWlsdG86enhpbmdAZ29vZ2xlZ3JvdXBzLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZmNlNGU2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGFmYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTQudHh0CkBAIC0wLDAgKzEgQEAKK21haWx0bzp6eGluZ0Bnb29nbGVncm91cHMuY29tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2MmJmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIvMTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYWZhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xNS50eHQKQEAgLTAsMCArMSBAQAorbWFpbHRvOnp4aW5nQGdvb2dsZWdyb3Vwcy5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2UxY2ZkZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5OWRmZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE2LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3Avenhpbmcvc291cmNlL2Jyb3dzZS90cnVuay9hbmRyb2lkL3NyYy9jb20vZ29vZ2xlL3p4aW5nL2NsaWVudC9hbmRyb2lkL3Jlc3VsdC9VUklSZXN1bHRIYW5kbGVyLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzNlY2Y0OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5OWRmZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE3LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3Avenhpbmcvc291cmNlL2Jyb3dzZS90cnVuay9hbmRyb2lkL3NyYy9jb20vZ29vZ2xlL3p4aW5nL2NsaWVudC9hbmRyb2lkL3Jlc3VsdC9VUklSZXN1bHRIYW5kbGVyLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWQyMGY0NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5OWRmZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE4LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3Avenhpbmcvc291cmNlL2Jyb3dzZS90cnVuay9hbmRyb2lkL3NyYy9jb20vZ29vZ2xlL3p4aW5nL2NsaWVudC9hbmRyb2lkL3Jlc3VsdC9VUklSZXN1bHRIYW5kbGVyLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDEwM2E5ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8xOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5OWRmZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzE5LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3Avenhpbmcvc291cmNlL2Jyb3dzZS90cnVuay9hbmRyb2lkL3NyYy9jb20vZ29vZ2xlL3p4aW5nL2NsaWVudC9hbmRyb2lkL3Jlc3VsdC9VUklSZXN1bHRIYW5kbGVyLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTQ3NWU2YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzIwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5OWRmZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzIwLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3Avenhpbmcvc291cmNlL2Jyb3dzZS90cnVuay9hbmRyb2lkL3NyYy9jb20vZ29vZ2xlL3p4aW5nL2NsaWVudC9hbmRyb2lkL3Jlc3VsdC9VUklSZXN1bHRIYW5kbGVyLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmY1ZDE0MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzIxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5OWRmZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzIxLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3Avenhpbmcvc291cmNlL2Jyb3dzZS90cnVuay9hbmRyb2lkL3NyYy9jb20vZ29vZ2xlL3p4aW5nL2NsaWVudC9hbmRyb2lkL3Jlc3VsdC9VUklSZXN1bHRIYW5kbGVyLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmQ5NmM5ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzIyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMi8yMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5OWRmZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9henRlYy0yLzIyLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3Avenhpbmcvc291cmNlL2Jyb3dzZS90cnVuay9hbmRyb2lkL3NyYy9jb20vZ29vZ2xlL3p4aW5nL2NsaWVudC9hbmRyb2lkL3Jlc3VsdC9VUklSZXN1bHRIYW5kbGVyLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNWY1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzAxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzAxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTM3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzAxLnR4dApAQCAtMCwwICsxIEBACisxMjM0NTY3ODkwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGMyNWZmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUzN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8wMi50eHQKQEAgLTAsMCArMSBAQAorMTIzNDU2Nzg5MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMDMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2YmY5MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMDMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhlYzZlNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMDMudHh0CkBAIC0wLDAgKzEgQEAKKzI5NC81ODYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZmI1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzA0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzA0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNTM3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzA0LnR4dApAQCAtMCwwICsxIEBACisxMjM0NTUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzA5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMDkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0OWQ1MGEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzA5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzA5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNDFjYmEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzA5LnR4dApAQCAtMCwwICsxIEBACisxMjM0NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwZDQ2NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzMmUwNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTAudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1NgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8xMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwNWMzZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8xMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1NTI1YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTEudHh0CkBAIC0wLDAgKzEgQEAKKzM0MTk1MDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDc5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzEyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzEyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ODJhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzEyLnR4dApAQCAtMCwwICsxIEBACiszMTExNzAxMzIwNjM3NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4MjcwYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0MWNiYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTMudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDM0NDA3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzgyYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMS8xNC50eHQKQEAgLTAsMCArMSBAQAorMzExMTcwMTMyMDYzNzUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiODJlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzE1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzE1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RhYmFyLTEvMTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMzgxODgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kYWJhci0xLzE1LnR4dApAQCAtMCwwICsxIEBACisxMjM0NTY3ODkwMTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMS8xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDA1NDI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMS8xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMS8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWFhMjhkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMS8xLnR4dApAQCAtMCwwICsxIEBACisxNjg5MDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMS8yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDRmNGJhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMS8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMS8yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDlkMGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMS8yLnR4dApAQCAtMCwwICsxIEBACitDb2RlIDEyOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTEvMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhODhlNTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTEvMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZmM2OTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzMudHh0CkBAIC0wLDAgKzEgQEAKKzEwMjAzMDQwNTA2MDcwODA5MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTEvNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMmZmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTEvNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzJlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzQudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1NgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTEvNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNzFhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTEvNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYmY0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0xLzUudHh0CkBAIC0wLDAgKzEgQEAKKzgxMDEwNTQzMjExMjAwMjExMjM0NTYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMTc5NTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzAxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzAxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNGZhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzAxLnR4dApAQCAtMCwwICsxIEBACiswMDUtMzM3OTQ5NzIwMDAwNgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3M2FlOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0ZmE2NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDIudHh0CkBAIC0wLDAgKzEgQEAKKzAwNS0zMzc5NDk3MjAwMDA2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWMwMzcyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzRmYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wMy50eHQKQEAgLTAsMCArMSBAQAorMDA1LTMzNzk0OTcyMDAwMDYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNmM2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNGZhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA0LnR4dApAQCAtMCwwICsxIEBACiswMDUtMzM3OTQ5NzIwMDAwNgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjZWZiNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0MDZiNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDUudHh0CkBAIC0wLDAgKzEgQEAKKzE1MTgyODgxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDcyOGUzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQwNmI2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wNi50eHQKQEAgLTAsMCArMSBAQAorMTUxODI4ODEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMjY1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDA2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA3LnR4dApAQCAtMCwwICsxIEBACisxNTE4Mjg4MQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRhNTQ4NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0MDZiNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMDgudHh0CkBAIC0wLDAgKzEgQEAKKzE1MTgyODgxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTg3ZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDVjOTYxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8wOS50eHQKQEAgLTAsMCArMSBAQAorQ05LODE4MUcyQwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY2YjhkYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1Yzk2MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTAudHh0CkBAIC0wLDAgKzEgQEAKK0NOSzgxODFHMkMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MDRlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzExLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzExLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWM5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzExLnR4dApAQCAtMCwwICsxIEBACitDTks4MTgxRzJDClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWE1MTVkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDVjOTYxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xMi50eHQKQEAgLTAsMCArMSBAQAorQ05LODE4MUcyQwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5N2U0NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0NDk3ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTMudHh0CkBAIC0wLDAgKzEgQEAKKzFQRUYyMjRBNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlNTk3ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0NDk3ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTQudHh0CkBAIC0wLDAgKzEgQEAKKzFQRUYyMjRBNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3NzdhMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0NDk3ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTUudHh0CkBAIC0wLDAgKzEgQEAKKzFQRUYyMjRBNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkMDc5MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0NDk3ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTYudHh0CkBAIC0wLDAgKzEgQEAKKzFQRUYyMjRBNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3MjM3NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4MjRkOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTcudHh0CkBAIC0wLDAgKzEgQEAKK0ZXNzI3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg0NzhkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTgyNGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8xOC50eHQKQEAgLTAsMCArMSBAQAorRlc3MjcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzE5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwM2NjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzE5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzE5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMTkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ODI0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzE5LnR4dApAQCAtMCwwICsxIEBACitGVzcyNwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1ZjNiYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4MjRkOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjAudHh0CkBAIC0wLDAgKzEgQEAKK0ZXNzI3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzIxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjZiYzVmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzIxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDkzNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yMS50eHQKQEAgLTAsMCArMSBAQAorMDA1LTMzNTQxNzQ1MDAwMTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzIyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNjY2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzIyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzIyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOTM3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzIyLnR4dApAQCAtMCwwICsxIEBACiswMDUtMzM1NDE3NDUwMDAxOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJjYWJmZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA5MzcyOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjMudHh0CkBAIC0wLDAgKzEgQEAKKzAwNS0zMzU0MTc0NTAwMDE4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2Y2NTEzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDkzNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yNC50eHQKQEAgLTAsMCArMSBAQAorMDA1LTMzNTQxNzQ1MDAwMTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OWJjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNjM2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI1LnR4dApAQCAtMCwwICsxIEBACiszMTAwMTE3MTgwMDAwMDAxNzk4OTYyNTM1NTcwMjYzNgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkMDc0ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2MzY3ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjYudHh0CkBAIC0wLDAgKzEgQEAKKzMxMDAxMTcxODAwMDAwMDE3OTg5NjI1MzU1NzAyNjM2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODg1MTI0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjYzNjdmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yNy50eHQKQEAgLTAsMCArMSBAQAorMzEwMDExNzE4MDAwMDAwMTc5ODk2MjUzNTU3MDI2MzYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOTkwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNjM2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzI4LnR4dApAQCAtMCwwICsxIEBACiszMTAwMTE3MTgwMDAwMDAxNzk4OTYyNTM1NTcwMjYzNgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhNTM5MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8yOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdkMzg0ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMjkudHh0CkBAIC0wLDAgKzEgQEAKKzQyMDk0MDQzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzMwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ4ZWViCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzMwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2QzODRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zMC50eHQKQEAgLTAsMCArMSBAQAorNDIwOTQwNDMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzMxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNmEwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzMxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzMxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZDM4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzMxLnR4dApAQCAtMCwwICsxIEBACis0MjA5NDA0MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2NjU5MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdkMzg0ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzIudHh0CkBAIC0wLDAgKzEgQEAKKzQyMDk0MDQzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzMzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODY5MzEzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzMzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTRmOGUzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zMy50eHQKQEAgLTAsMCArMSBAQAorMzA4ODU5MDkxNzM4MjMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTdhMzYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNGY4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM0LnR4dApAQCAtMCwwICsxIEBACiszMDg4NTkwOTE3MzgyMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmMDBmOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0ZjhlMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzUudHh0CkBAIC0wLDAgKzEgQEAKKzMwODg1OTA5MTczODIzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTg0MWU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTRmOGUzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zNi50eHQKQEAgLTAsMCArMSBAQAorMzA4ODU5MDkxNzM4MjMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNWM2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYTZiY2UKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM3LnR4dApAQCAtMCwwICsxIEBACitGR0dRNkQxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzAxMWNjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzM4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWE2YmNlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zOC50eHQKQEAgLTAsMCArMSBAQAorRkdHUTZEMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlYjBhOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMi8zOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhNmJjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvMzkudHh0CkBAIC0wLDAgKzEgQEAKK0ZHR1E2RDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzQwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvNDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmOTFjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzQwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIvNDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYTZiY2UKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0yLzQwLnR4dApAQCAtMCwwICsxIEBACitGR0dRNkQxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMy8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTMvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwN2EyMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTMvMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMy8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTMvMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1MDU3ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTMvMS50eHQKQEAgLTAsMCArMSBAQAorMTAwNjQ5MDgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0zLzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMy8yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjc0YTYxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMy8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0zLzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMy8yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmVhNTlkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUxMjgtMy8yLnR4dApAQCAtMCwwICsxIEBACisxMDA2ODQwOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS8xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmZlMzFlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUzOS0xLzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjFhYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUzOS0xLzEudHh0CkBAIC0wLDAgKzEgQEAKK1RFU1QtU0hFRVQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTEvMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTEvMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhNTQ2MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTEvMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTEvMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVkMGFhOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS8yLnR4dApAQCAtMCwwICsxIEBACisgV1dXLkNJVFJPTlNPRlQuQ09NIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS8zLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS8zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjFhMTVmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUzOS0xLzMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS8zLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS8zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTVhYzFmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUzOS0xLzMudHh0CkBAIC0wLDAgKzEgQEAKK01PUk9WSUEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTEvNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTEvNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U5MTdmNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS80LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTEvNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTEvNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkY2U0NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMS80LnR4dApAQCAtMCwwICsxIEBACitBQkMxMjMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTIvMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTIvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmYmI1YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMi8xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTIvMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTIvMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmZTFlZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMi8xLnR4dApAQCAtMCwwICsxIEBACitFeHRlbmRlZCAhPyojClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUzOS0yLzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUzOS0yLzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YWRkNjEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTIvMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUzOS0yLzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUzOS0yLzIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjM4M2IKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTIvMi50eHQKQEAgLTAsMCArMSBAQAorMTJhYgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMjg5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZWFkNDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDEudHh0CkBAIC0wLDAgKzEgQEAKKzE2NTYyNwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YWU1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZWFkNDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDIudHh0CkBAIC0wLDAgKzEgQEAKKzE2NTYyNwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Y2Y1ODYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMTAwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDMudHh0CkBAIC0wLDAgKzEgQEAKKzAwMUVDOTQ3RDQ5QgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTZlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMTAwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDQudHh0CkBAIC0wLDAgKzEgQEAKKzAwMUVDOTQ3RDQ5QgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NTllOTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMTAwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDUudHh0CkBAIC0wLDAgKzEgQEAKKzAwMUVDOTQ3RDQ5QgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNWIwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5N2EyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDYudHh0CkBAIC0wLDAgKzEgQEAKKzE2NTM0MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5N2IxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5N2EyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDcudHh0CkBAIC0wLDAgKzEgQEAKKzE2NTM0MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYzA1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5N2EyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDgudHh0CkBAIC0wLDAgKzEgQEAKKzE2NTM0MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzN2NlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8wOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5N2EyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMDkudHh0CkBAIC0wLDAgKzEgQEAKKzE2NTM0MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NDY2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMGVhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTAudHh0CkBAIC0wLDAgKzEgQEAKKzAwMUVDOTQ3NjdFMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmZhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMGVhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTEudHh0CkBAIC0wLDAgKzEgQEAKKzAwMUVDOTQ3NjdFMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZDkzNjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMGVhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTIudHh0CkBAIC0wLDAgKzEgQEAKKzAwMUVDOTQ3NjdFMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMmM5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMGVhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTMudHh0CkBAIC0wLDAgKzEgQEAKKzAwMUVDOTQ3NjdFMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZTQ0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODcwODQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTQudHh0CkBAIC0wLDAgKzEgQEAKKzQwNDc4NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTJkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODcwODQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTUudHh0CkBAIC0wLDAgKzEgQEAKKzQwNDc4NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjU1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODcwODQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTYudHh0CkBAIC0wLDAgKzEgQEAKKzQwNDc4NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODk0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlMzktMy8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODcwODQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTMvMTcudHh0CkBAIC0wLDAgKzEgQEAKKzQwNDc4NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlOTMtMS8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlOTMtMS8xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzllZjYyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGU5My0xLzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlOTMtMS8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlOTMtMS8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUzN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGU5My0xLzEudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTkzLTEvMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTkzLTEvMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFmYmZjYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlOTMtMS8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTkzLTEvMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTkzLTEvMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkZjlkNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9jb2RlOTMtMS8yLnR4dApAQCAtMCwwICsxIEBACitDT0RFIDkzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGU5My0xLzMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGU5My0xLzMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzliOGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTkzLTEvMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGU5My0xLzMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2NvZGU5My0xLzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOGQ2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvY29kZTkzLTEvMy50eHQKQEAgLTAsMCArMSBAQAorREFUQQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvMDEyMzQ1Njc4OS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xLzAxMjM0NTY3ODkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZTUxMjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xLzAxMjM0NTY3ODkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvMDEyMzQ1Njc4OS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xLzAxMjM0NTY3ODkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDcxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xLzAxMjM0NTY3ODkudHh0CkBAIC0wLDAgKzEgQEAKKzAxMjM0NTY3ODkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0dVSUQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9HVUlELnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODMxNzViCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9HVUlELnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0dVSUQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9HVUlELnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTIyNmFjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9HVUlELnR4dApAQCAtMCwwICsxIEBACisxMGYyN2NlLWFjYjctNGU0ZS1hN2FlLWEwYjk4ZGE2ZWQ0YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2EucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlMDA1MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2EucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2EudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxYzMwOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2EudHh0CkBAIC0wLDAgKzEgQEAKK0hlbGxvIFdvcmxkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YV8xX2Vycm9yX2J5dGUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YV8xX2Vycm9yX2J5dGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyM2I3NTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzFfZXJyb3JfYnl0ZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YV8xX2Vycm9yX2J5dGUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YV8xX2Vycm9yX2J5dGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMWMzMDkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzFfZXJyb3JfYnl0ZS50eHQKQEAgLTAsMCArMSBAQAorSGVsbG8gV29ybGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzJfZXJyb3JfYnl0ZS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzJfZXJyb3JfYnl0ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwZmE1ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2FfMl9lcnJvcl9ieXRlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzJfZXJyb3JfYnl0ZS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzJfZXJyb3JfYnl0ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxYzMwOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2FfMl9lcnJvcl9ieXRlLnR4dApAQCAtMCwwICsxIEBACitIZWxsbyBXb3JsZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2FfM19lcnJvcl9ieXRlLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2FfM19lcnJvcl9ieXRlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzBmOTdjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YV8zX2Vycm9yX2J5dGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2FfM19lcnJvcl9ieXRlLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2FfM19lcnJvcl9ieXRlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTFjMzA5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YV8zX2Vycm9yX2J5dGUudHh0CkBAIC0wLDAgKzEgQEAKK0hlbGxvIFdvcmxkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YV80X2Vycm9yX2J5dGUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YV80X2Vycm9yX2J5dGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNjY4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzRfZXJyb3JfYnl0ZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YV80X2Vycm9yX2J5dGUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9IZWxsb1dvcmxkX1RleHRfTF9LYXl3YV80X2Vycm9yX2J5dGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMWMzMDkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzRfZXJyb3JfYnl0ZS50eHQKQEAgLTAsMCArMSBAQAorSGVsbG8gV29ybGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzZfZXJyb3JfYnl0ZS5wbmcuZXJyb3IgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzZfZXJyb3JfYnl0ZS5wbmcuZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhMjc5NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2FfNl9lcnJvcl9ieXRlLnBuZy5lcnJvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzZfZXJyb3JfYnl0ZS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL0hlbGxvV29ybGRfVGV4dF9MX0theXdhXzZfZXJyb3JfYnl0ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxYzMwOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvSGVsbG9Xb3JsZF9UZXh0X0xfS2F5d2FfNl9lcnJvcl9ieXRlLnR4dApAQCAtMCwwICsxIEBACitIZWxsbyBXb3JsZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0xOHg4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0xOHg4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNThiYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTE4eDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0xOHg4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0xOHg4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTgxNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTE4eDgudHh0CkBAIC0wLDAgKzEgQEAKK2FiY2RlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTI2eDEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0yNngxMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0MWZhNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0yNngxMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTI2eDEyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0yNngxMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmYjEzMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0yNngxMi50eHQKQEAgLTAsMCArMSBAQAorYWJjZGVmZ2hpamtsbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0zMng4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0zMng4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGYxMjkyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTMyeDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0zMng4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0zMng4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTZkYzk1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTMyeDgudHh0CkBAIC0wLDAgKzEgQEAKK2FiY2RlZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0zNngxMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL2FiY2QtMzZ4MTIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZjkwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL2FiY2QtMzZ4MTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0zNngxMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL2FiY2QtMzZ4MTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMDVjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL2FiY2QtMzZ4MTIudHh0CkBAIC0wLDAgKzEgQEAKK2FiY2RlZmdoaWprbG1ub3BxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTM2eDE2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0zNngxNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExYTA1YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0zNngxNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTM2eDE2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0zNngxNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1ZDViNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC0zNngxNi50eHQKQEAgLTAsMCArMSBAQAorYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL2FiY2QtNDh4MTYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTQ4eDE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmVlMzU3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTQ4eDE2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL2FiY2QtNDh4MTYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTQ4eDE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTk3NDczCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTQ4eDE2LnR4dApAQCAtMCwwICsxIEBACithYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTUyeDUyLUlEQXV0b21hdGlvbi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL2FiY2QtNTJ4NTItSURBdXRvbWF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjBlMmExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTUyeDUyLUlEQXV0b21hdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTUyeDUyLUlEQXV0b21hdGlvbi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0xL2FiY2QtNTJ4NTItSURBdXRvbWF0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDFhZTVhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTUyeDUyLUlEQXV0b21hdGlvbi50eHQKQEAgLTAsMCArMSBAQAorYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTUyeDUyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC01Mng1Mi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyODNmZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC01Mng1Mi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkLTUyeDUyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC01Mng1Mi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxYWU1YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZC01Mng1Mi50eHQKQEAgLTAsMCArMSBAQAorYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkYWJjZGFiY2RhYmNkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkZWZnLTY0eDY0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZGVmZy02NHg2NC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ4Y2VhNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZGVmZy02NHg2NC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkZWZnLTY0eDY0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZGVmZy02NHg2NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4NWZjMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZGVmZy02NHg2NC50eHQKQEAgLTAsMCArMSBAQAorYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAhQCMkJV4mKigpLC4vXGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoxMjM0NTY3ODkwIUAjJCVeJiooKSwuL1xhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMTIzNDU2Nzg5MCFAIyQlXiYqKCksLi9cClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkZWZnLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZGVmZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAwNWVlNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZGVmZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS9hYmNkZWZnLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZGVmZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkMmI3MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvYWJjZGVmZy50eHQKQEAgLTAsMCArMSBAQAorYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAhQCMkJV4mKigpLC4vXApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvenhpbmdfVVJMX0xfS2F5d2F5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvenhpbmdfVVJMX0xfS2F5d2F5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmY3YTczCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS96eGluZ19VUkxfTF9LYXl3YXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvenhpbmdfVVJMX0xfS2F5d2F5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEvenhpbmdfVVJMX0xfS2F5d2F5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMS96eGluZ19VUkxfTF9LYXl3YXkudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC96eGluZy8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MDFiNjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzAxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzAxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NmQwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzAxLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vZ29vZ2xlLmNvbS9tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDZjYzdkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODZkMGRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wMi50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2dvb2dsZS5jb20vbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyYjhhNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2ZDBkZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDMudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9nb29nbGUuY29tL20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMjM1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NmQwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA0LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vZ29vZ2xlLmNvbS9tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjBiOWYxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODZkMGRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wNS50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2dvb2dsZS5jb20vbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3YTZhZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2ZDBkZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDYudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9nb29nbGUuY29tL20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZDZlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NmQwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA3LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vZ29vZ2xlLmNvbS9tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWRmZjdjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzA4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODZkMGRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wOC50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2dvb2dsZS5jb20vbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMyMmMzOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8wOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhZTJkNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMDkudHh0CkBAIC0wLDAgKzEgQEAKK1RoaXMgaXMgYSB0ZXN0IG9mIG91ciBEYXRhTWF0cml4IHN1cHBvcnQgdXNpbmcgYSBsb25nZXIgcGllY2Ugb2YgdGV4dCwgYW5kIHRoZXJlZm9yZSBhIG1vcmUgZGVuc2UgYmFyY29kZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzEwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNWQzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzEwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzEwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YWUyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzEwLnR4dApAQCAtMCwwICsxIEBACitUaGlzIGlzIGEgdGVzdCBvZiBvdXIgRGF0YU1hdHJpeCBzdXBwb3J0IHVzaW5nIGEgbG9uZ2VyIHBpZWNlIG9mIHRleHQsIGFuZCB0aGVyZWZvcmUgYSBtb3JlIGRlbnNlIGJhcmNvZGUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDQxOGU0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGFlMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xMS50eHQKQEAgLTAsMCArMSBAQAorVGhpcyBpcyBhIHRlc3Qgb2Ygb3VyIERhdGFNYXRyaXggc3VwcG9ydCB1c2luZyBhIGxvbmdlciBwaWVjZSBvZiB0ZXh0LCBhbmQgdGhlcmVmb3JlIGEgbW9yZSBkZW5zZSBiYXJjb2RlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE3MzEwOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhZTJkNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTIudHh0CkBAIC0wLDAgKzEgQEAKK1RoaXMgaXMgYSB0ZXN0IG9mIG91ciBEYXRhTWF0cml4IHN1cHBvcnQgdXNpbmcgYSBsb25nZXIgcGllY2Ugb2YgdGV4dCwgYW5kIHRoZXJlZm9yZSBhIG1vcmUgZGVuc2UgYmFyY29kZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzEzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZmY4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzEzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzEzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YWUyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzEzLnR4dApAQCAtMCwwICsxIEBACitUaGlzIGlzIGEgdGVzdCBvZiBvdXIgRGF0YU1hdHJpeCBzdXBwb3J0IHVzaW5nIGEgbG9uZ2VyIHBpZWNlIG9mIHRleHQsIGFuZCB0aGVyZWZvcmUgYSBtb3JlIGRlbnNlIGJhcmNvZGUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzg0ZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGFlMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xNC50eHQKQEAgLTAsMCArMSBAQAorVGhpcyBpcyBhIHRlc3Qgb2Ygb3VyIERhdGFNYXRyaXggc3VwcG9ydCB1c2luZyBhIGxvbmdlciBwaWVjZSBvZiB0ZXh0LCBhbmQgdGhlcmVmb3JlIGEgbW9yZSBkZW5zZSBiYXJjb2RlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3NTdmZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhZTJkNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTUudHh0CkBAIC0wLDAgKzEgQEAKK1RoaXMgaXMgYSB0ZXN0IG9mIG91ciBEYXRhTWF0cml4IHN1cHBvcnQgdXNpbmcgYSBsb25nZXIgcGllY2Ugb2YgdGV4dCwgYW5kIHRoZXJlZm9yZSBhIG1vcmUgZGVuc2UgYmFyY29kZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzE2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNTc4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzE2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzE2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YWUyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzE2LnR4dApAQCAtMCwwICsxIEBACitUaGlzIGlzIGEgdGVzdCBvZiBvdXIgRGF0YU1hdHJpeCBzdXBwb3J0IHVzaW5nIGEgbG9uZ2VyIHBpZWNlIG9mIHRleHQsIGFuZCB0aGVyZWZvcmUgYSBtb3JlIGRlbnNlIGJhcmNvZGUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDhkMGVhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZGF0YW1hdHJpeC0yLzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGFlMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xNy50eHQKQEAgLTAsMCArMSBAQAorVGhpcyBpcyBhIHRlc3Qgb2Ygb3VyIERhdGFNYXRyaXggc3VwcG9ydCB1c2luZyBhIGxvbmdlciBwaWVjZSBvZiB0ZXh0LCBhbmQgdGhlcmVmb3JlIGEgbW9yZSBkZW5zZSBiYXJjb2RlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhMzRjNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMi8xOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhZTJkNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTIvMTgudHh0CkBAIC0wLDAgKzEgQEAKK1RoaXMgaXMgYSB0ZXN0IG9mIG91ciBEYXRhTWF0cml4IHN1cHBvcnQgdXNpbmcgYSBsb25nZXIgcGllY2Ugb2YgdGV4dCwgYW5kIHRoZXJlZm9yZSBhIG1vcmUgZGVuc2UgYmFyY29kZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNTE0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWQ3ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xLnR4dApAQCAtMCwwICsxIEBACis4NDEzMDAwMDY1NTA0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTAzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkN2MzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xMC50eHQKQEAgLTAsMCArMSBAQAorODQ4MDAxMDAwMTEzNgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDViZmNkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzEyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjJmYWYyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTIudHh0CkBAIC0wLDAgKzEgQEAKKzUyMDE4MTUzMzEyMjcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwYTE5MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzEzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNmMWFlZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzEzLnR4dApAQCAtMCwwICsxIEBACis4NDEzNjAwMjk4NTE3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjRiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMmMwN2UKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xNC50eHQKQEAgLTAsMCArMSBAQAorMzU2MDA3MDE2OTQ0MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNlOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzE1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTNjOWYwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTUudHh0CkBAIC0wLDAgKzEgQEAKKzQwNDU3ODcwMzQzMTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxODA0NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzE4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyYzY3YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzE4LnR4dApAQCAtMCwwICsxIEBACiszMDg2MTI2MTAwMzI2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNDNiNjkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMTkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MzllMTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8xOS50eHQKQEAgLTAsMCArMSBAQAorNDgyMDAyNDc5MDYzNQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhYzU0NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlZmQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIudHh0CkBAIC0wLDAgKzEgQEAKKzg0ODAwMTAwOTIyNzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjYjMzNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2OGI2MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIwLnR4dApAQCAtMCwwICsxIEBACis0MDAwNTM5MDE3MTAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNGVhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZTE4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yMS50eHQKQEAgLTAsMCArMSBAQAorNzYyMjIwMDAwODAxOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzQzNGZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTAwOTBiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjIudHh0CkBAIC0wLDAgKzEgQEAKKzU2MDM2NjcwMjA1MTcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1NjNhMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlMTFmNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzIzLnR4dApAQCAtMCwwICsxIEBACis3NjIyNDAwNzkxOTQ5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YTI1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjNhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yNC50eHQKQEAgLTAsMCArMSBAQAorNTcwOTI2Mjk0MjUwMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzI1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzI1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTdkMTg3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzI1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzI1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDk4NzRhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjUudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODAxNDAwMTM5OTMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVjYzZmMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzI2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxMDljNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzI2LnR4dApAQCAtMCwwICsxIEBACis0OTAxNzgwMTg4MzUyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMTg3ODIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOTlkMjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8yOC50eHQKQEAgLTAsMCArMSBAQAorOTc3MTY5OTA1NzAwMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzI5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzI5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGZkNTM0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzI5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzI5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODgyMTQwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMjkudHh0CkBAIC0wLDAgKzEgQEAKKzQwMDc4MTczMjcwOTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNzFjNjQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YjJmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zLnR4dApAQCAtMCwwICsxIEBACis4NDgwMDAwODIzMjc0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjODg0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOTNlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zMC50eHQKQEAgLTAsMCArMSBAQAorNTAyNTEyMTA3MjMxMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzMxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzMxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQyYWQwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzMxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzMxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGRlNjc3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzEudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODAzOTMwNTg2NzMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyYTFjZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzMyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkZTY3NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzMyLnR4dApAQCAtMCwwICsxIEBACis5NzgwMzkzMDU4NjczClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMzRmOGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzI3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zMy50eHQKQEAgLTAsMCArMSBAQAorOTc4MTU1ODYwNDk3MQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjVjYzczCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjMyN2ZjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzQudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODE1NTg2MDQ5NzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJlOTYwMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNjODI0NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM1LnR4dApAQCAtMCwwICsxIEBACis1MDMwMTU5MDAzOTMwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjdhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NjBmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zNi50eHQKQEAgLTAsMCArMSBAQAorNTAwMDIxMzEwMTAyNQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODAyNzYwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDVmZTUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvMzcudHh0CkBAIC0wLDAgKzEgQEAKKzUwMDAyMTMwMDI4MzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmN2U2MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS8zOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwNTJmNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzM4LnR4dApAQCAtMCwwICsxIEBACis5NzgwMjAxNzUyODQ3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS80LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQzMTZiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS80LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGFkMjU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvNC50eHQKQEAgLTAsMCArMSBAQAorNTQ0OTAwMDAzOTIzMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5YWZlMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5OGRlMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzUudHh0CkBAIC0wLDAgKzEgQEAKKzg0MTAwNTQwMTA0MTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS82LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMmNiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS82LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS82LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZWRmNjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS82LnR4dApAQCAtMCwwICsxIEBACis4NDgwMDEwMDQ1MDYyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS83LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzhjNzdkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS83LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTNmMmJiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvNy50eHQKQEAgLTAsMCArMSBAQAorOTc4ODQzMDUzMjY3NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1MDlhMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTEvOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMyMjMyOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzgudHh0CkBAIC0wLDAgKzEgQEAKKzg0ODAwMTc1MDc5OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS85LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ODE3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS85LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS85LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0xLzkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNGJiMGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMS85LnR4dApAQCAtMCwwICsxIEBACiszMTY2Mjk4MDk5ODA5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU5ZjU1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OGFhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wMS50eHQKQEAgLTAsMCArMSBAQAorOTc4MDgwNDgxNjYzMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzAyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZDJkOWM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzAyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOThhYWNiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDIudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA4MDQ4MTY2MzIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2E3MTk0NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzAzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4YWFjYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzAzLnR4dApAQCAtMCwwICsxIEBACis5NzgwODA0ODE2NjMyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1NGE2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OGFhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wNC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDgwNDgxNjYzMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZTU4OTUxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOThhYWNiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDUudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA4MDQ4MTY2MzIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzFiY2I5ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4YWFjYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA2LnR4dApAQCAtMCwwICsxIEBACis5NzgwODA0ODE2NjMyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIwNTlkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OGFhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wNy50eHQKQEAgLTAsMCArMSBAQAorOTc4MDgwNDgxNjYzMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNDM1YjljCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGFiMzVlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMDgudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODAzNDUzNDgwMzYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjg1NzNhMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8wOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhYjM1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzA5LnR4dApAQCAtMCwwICsxIEBACis5NzgwMzQ1MzQ4MDM2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5MTQyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYWIzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xMC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDM0NTM0ODAzNgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYzM3ZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzExLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGFiMzVlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTEudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODAzNDUzNDgwMzYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTVhMzgxMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzEyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhYjM1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzEyLnR4dApAQCAtMCwwICsxIEBACis5NzgwMzQ1MzQ4MDM2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM4MDllOTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YmY3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xMy50eHQKQEAgLTAsMCArMSBAQAorOTc4NDg3MjM0ODg4MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNzcwZmJlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWJmNzFhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTQudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODQ4NzIzNDg4ODAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2I5YWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViZjcxYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE1LnR4dApAQCAtMCwwICsxIEBACis5Nzg0ODcyMzQ4ODgwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzOGI0NjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YmY3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xNi50eHQKQEAgLTAsMCArMSBAQAorOTc4NDg3MjM0ODg4MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yY2NiN2JhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWJmNzFhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTcudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODQ4NzIzNDg4ODAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjJjNTliZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViZjcxYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzE4LnR4dApAQCAtMCwwICsxIEBACis5Nzg0ODcyMzQ4ODgwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkYzU0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMTkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YmY3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8xOS50eHQKQEAgLTAsMCArMSBAQAorOTc4NDg3MjM0ODg4MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzIwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YzUwYzRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzIwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWJmNzFhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjAudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODQ4NzIzNDg4ODAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDNjZmE4YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzIxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViZjcxYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzIxLnR4dApAQCAtMCwwICsxIEBACis5Nzg0ODcyMzQ4ODgwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2NDdkNjEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YmY3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yMi50eHQKQEAgLTAsMCArMSBAQAorOTc4NDg3MjM0ODg4MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzIzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzIzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NWNjMDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzIzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzIzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjRhYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjMudHh0CkBAIC0wLDAgKzEgQEAKKzE5MjAwODEwNDUwMDYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjAxYjc3MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzI0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViZjcxYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzI0LnR4dApAQCAtMCwwICsxIEBACis5Nzg0ODcyMzQ4ODgwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjNDNlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YmY3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yNS50eHQKQEAgLTAsMCArMSBAQAorOTc4NDg3MjM0ODg4MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzI2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzI2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZmE2NzUwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzI2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzI2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWJmNzFhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjYudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODQ4NzIzNDg4ODAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGRjZWRiOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzI3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViZjcxYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0yLzI3LnR4dApAQCAtMCwwICsxIEBACis5Nzg0ODcyMzQ4ODgwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4ODNkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTIvMjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NGFiODUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMi8yOC50eHQKQEAgLTAsMCArMSBAQAorMTkyMDA4MTA0NTAwNgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2NmYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzAxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzc0ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDEudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA3NjQ1NDQyMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkYjM4MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzAyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3NGQzOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzAyLnR4dApAQCAtMCwwICsxIEBACis5NzgwNzY0NTQ0MjAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YzVhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNzRkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wMy50eHQKQEAgLTAsMCArMSBAQAorOTc4MDc2NDU0NDIwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmMwYjAxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzc0ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDQudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA3NjQ1NDQyMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiNTJhNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3NGQzOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA1LnR4dApAQCAtMCwwICsxIEBACis5NzgwNzY0NTQ0MjAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNjNmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNzRkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wNi50eHQKQEAgLTAsMCArMSBAQAorOTc4MDc2NDU0NDIwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmU0NGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzc0ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDcudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA3NjQ1NDQyMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3ZjZlYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3NGQzOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzA4LnR4dApAQCAtMCwwICsxIEBACis5NzgwNzY0NTQ0MjAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNTBiNmMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNzRkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8wOS50eHQKQEAgLTAsMCArMSBAQAorOTc4MDc2NDU0NDIwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzEwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzEwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzcwODViCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzEwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDE4YWM1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTAudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA1OTYwMDg1NzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBkMzk4ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzExLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxOGFjNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzExLnR4dApAQCAtMCwwICsxIEBACis5NzgwNTk2MDA4NTc0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTBkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MThhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xMi50eHQKQEAgLTAsMCArMSBAQAorOTc4MDU5NjAwODU3NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzEzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjM3MTNmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzEzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDE4YWM1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTMudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA1OTYwMDg1NzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjOWE5ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxOGFjNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE0LnR4dApAQCAtMCwwICsxIEBACis5NzgwNTk2MDA4NTc0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzdhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MThhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xNS50eHQKQEAgLTAsMCArMSBAQAorOTc4MDU5NjAwODU3NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTViNWExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDE4YWM1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTYudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA1OTYwMDg1NzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiN2Q4YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxOGFjNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE3LnR4dApAQCAtMCwwICsxIEBACis5NzgwNTk2MDA4NTc0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZTBmNmUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MThhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8xOC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDU5NjAwODU3NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWY5ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzE5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDE4YWM1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMTkudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA1OTYwMDg1NzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhkNjRmZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzIwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxOGFjNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzIwLnR4dApAQCAtMCwwICsxIEBACis5NzgwNTk2MDA4NTc0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZGQzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MThhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yMS50eHQKQEAgLTAsMCArMSBAQAorOTc4MDU5NjAwODU3NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzIyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzIyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGZhYTRiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzIyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzIyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjMyM2NlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjIudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODAyMDEzMTAwNTQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA5MjZjZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzIzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzMjNjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzIzLnR4dApAQCAtMCwwICsxIEBACis5NzgwMjAxMzEwMDU0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNjM2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzIzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yNC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDIwMTMxMDA1NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODhkNjFlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjMyM2NlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjUudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODAyMDEzMTAwNTQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhhNzY5NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzMjNjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI2LnR4dApAQCAtMCwwICsxIEBACis5NzgwMjAxMzEwMDU0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MmExOWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzIzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yNy50eHQKQEAgLTAsMCArMSBAQAorOTc4MDIwMTMxMDA1NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2NmZTJiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjMyM2NlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMjgudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODAyMDEzMTAwNTQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUxMTE3ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8yOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzMjNjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzI5LnR4dApAQCAtMCwwICsxIEBACis5NzgwMjAxMzEwMDU0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOTAyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzIzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zMC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDIwMTMxMDA1NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzMxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzMxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzY4YWMzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzMxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzMxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjMyM2NlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzEudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODAyMDEzMTAwNTQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyN2M2YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzMyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzMjNjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzMyLnR4dApAQCAtMCwwICsxIEBACis5NzgwMjAxMzEwMDU0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2E5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzIzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zMy50eHQKQEAgLTAsMCArMSBAQAorOTc4MDIwMTMxMDA1NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTYwNjA4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjMyM2NlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzQudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODAyMDEzMTAwNTQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5NzE3OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzMjNjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM1LnR4dApAQCAtMCwwICsxIEBACis5NzgwMjAxMzEwMDU0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YjIwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhODFkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zNi50eHQKQEAgLTAsMCArMSBAQAorOTc4MTU4NTczMDU3NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTU5YTM3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTgxZDVlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzcudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODE1ODU3MzA1NzUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3MTFjNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4MWQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzM4LnR4dApAQCAtMCwwICsxIEBACis5NzgxNTg1NzMwNTc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNTg2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvMzkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhODFkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy8zOS50eHQKQEAgLTAsMCArMSBAQAorOTc4MTU4NTczMDU3NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU2OGQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTgxZDVlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDAudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODE1ODU3MzA1NzUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80MS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80MS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhMzE0ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80MS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4MWQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQxLnR4dApAQCAtMCwwICsxIEBACis5NzgxNTg1NzMwNTc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMjA0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80Mi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhODFkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80Mi50eHQKQEAgLTAsMCArMSBAQAorOTc4MTU4NTczMDU3NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGQ1NTFmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTgxZDVlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDMudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODE1ODU3MzA1NzUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80NC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80NC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5YTc1NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80NC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0ZjFhZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ0LnR4dApAQCAtMCwwICsxIEBACis5NzgwNzM1NjE5OTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmJlNjAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80NS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNGYxYWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80NS50eHQKQEAgLTAsMCArMSBAQAorOTc4MDczNTYxOTkzNwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTMyYTcwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzRmMWFmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDYudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA3MzU2MTk5MzcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80Ny5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80Ny5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0MGJkZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80Ny50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80Ny50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0ZjFhZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ3LnR4dApAQCAtMCwwICsxIEBACis5NzgwNzM1NjE5OTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MTVhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80OC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNGYxYWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy80OC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDczNTYxOTkzNwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmEwODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzQ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzRmMWFmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNDkudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA3MzU2MTk5MzcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81MC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ2YmY1YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzUwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81MC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0ZjFhZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzUwLnR4dApAQCAtMCwwICsxIEBACis5NzgwNzM1NjE5OTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Yjk5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81MS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNGYxYWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81MS50eHQKQEAgLTAsMCArMSBAQAorOTc4MDczNTYxOTkzNwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzUyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzUyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGNkMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzUyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzRmMWFmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTIudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA3MzU2MTk5MzcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81My5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81My5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxNGFiYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzUzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81My50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81My50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0ZjFhZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzUzLnR4dApAQCAtMCwwICsxIEBACis5NzgwNzM1NjE5OTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMzE1NGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81NC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNGYxYWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtMy81NC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDczNTYxOTkzNwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzU1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzU1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjM5MTIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzU1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy0zLzU1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzRmMWFmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMvNTUudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA3MzU2MTk5MzcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM3M2MyMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzAxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkNmI5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzAxLnR4dApAQCAtMCwwICsxIEBACis5NzgwNDQxMDE0OTg5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNmEwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZDZiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wMi50eHQKQEAgLTAsMCArMSBAQAorOTc4MDQ0MTAxNDk4OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzAzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTFmNDMwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzAzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Q2Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDMudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA0NDEwMTQ5ODkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwZTRkMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkNmI5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA0LnR4dApAQCAtMCwwICsxIEBACis5NzgwNDQxMDE0OTg5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4OTFjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZDZiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wNS50eHQKQEAgLTAsMCArMSBAQAorOTc4MDQ0MTAxNDk4OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmQ0ZDNmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Q2Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDYudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA0NDEwMTQ5ODkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwMDY2MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkNmI5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA3LnR4dApAQCAtMCwwICsxIEBACis5NzgwNDQxMDE0OTg5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDcxOTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZDZiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8wOC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDQ0MTAxNDk4OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDk1ZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Q2Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMDkudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA0NDEwMTQ5ODkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlYTZiZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzEwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkNmI5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzEwLnR4dApAQCAtMCwwICsxIEBACis5NzgwNDQxMDE0OTg5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYzEwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZDZiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xMS50eHQKQEAgLTAsMCArMSBAQAorOTc4MDQ0MTAxNDk4OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTU2ZmYxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzEyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Q2Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTIudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA0NDEwMTQ5ODkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhYjkyNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzEzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkNmI5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzEzLnR4dApAQCAtMCwwICsxIEBACis5NzgwNDQxMDE0OTg5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjY2M4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZDZiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xNC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDQ0MTAxNDk4OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTEyMDJkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Q2Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTUudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA0NDEwMTQ5ODkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyYjAzOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkNmI5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE2LnR4dApAQCAtMCwwICsxIEBACis5NzgwNDQxMDE0OTg5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOGZmMWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZDZiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xNy50eHQKQEAgLTAsMCArMSBAQAorOTc4MDQ0MTAxNDk4OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjYwODhiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Q2Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMTgudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA0NDEwMTQ5ODkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwNjM3MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8xOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkNmI5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzE5LnR4dApAQCAtMCwwICsxIEBACis5NzgwNDQxMDE0OTg5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMjAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMjAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OTE0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8yMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMjAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZDZiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8yMC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDQ0MTAxNDk4OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzIxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzIxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmQzOGZjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMjEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzIxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzIxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Q2Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQvMjEudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA0NDEwMTQ5ODkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8yMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8yMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxODRlOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzIyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8yMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNC8yMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkNmI5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy00LzIyLnR4dApAQCAtMCwwICsxIEBACis5NzgwNDQxMDE0OTg5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmViNjliNmMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOWU5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wMS50eHQKQEAgLTAsMCArMSBAQAorOTc4MDY3OTYwMTA1MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzAyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMGY3OWE4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzAyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzllOWEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDIudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA2Nzk2MDEwNTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjMwNTUzOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzAzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5ZTlhMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzAzLnR4dApAQCAtMCwwICsxIEBACis5NzgwNjc5NjAxMDUwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQzNTY4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOWU5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wNC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDY3OTYwMTA1MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YWZlZThhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzllOWEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDUudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA2Nzk2MDEwNTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjNhYmY3MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4M2M4ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA2LnR4dApAQCAtMCwwICsxIEBACis5NzgwMzQ1NDYwOTUwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJkYjkwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwODNjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wNy50eHQKQEAgLTAsMCArMSBAQAorOTc4MDM0NTQ2MDk1MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZjQ2MmFiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDgzYzhlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMDgudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODAzNDU0NjA5NTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDkxNGM5ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8wOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4M2M4ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzA5LnR4dApAQCAtMCwwICsxIEBACis5NzgwMzQ1NDYwOTUwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4ZTBhMWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwODNjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xMC50eHQKQEAgLTAsMCArMSBAQAorOTc4MDM0NTQ2MDk1MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ODFhZWEzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzExLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDgzYzhlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTEudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODAzNDU0NjA5NTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTQ1ODFkNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzEyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4M2M4ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzEyLnR4dApAQCAtMCwwICsxIEBACis5NzgwMzQ1NDYwOTUwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhMWIwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYWIwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xMy50eHQKQEAgLTAsMCArMSBAQAorOTc4MDQ0NjU3OTgwMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NjUzOWUzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFiMGQwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTQudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA0NDY1Nzk4MDMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmM5MTg1NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhYjBkMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE1LnR4dApAQCAtMCwwICsxIEBACis5NzgwNDQ2NTc5ODAzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ2Nzc4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYWIwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xNi50eHQKQEAgLTAsMCArMSBAQAorOTc4MDQ0NjU3OTgwMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOTdkNzgwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFiMGQwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUvMTcudHh0CkBAIC0wLDAgKzEgQEAKKzk3ODA0NDY1Nzk4MDMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTIzMWJjZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuMTMtNS8xOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhYjBkMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW4xMy01LzE4LnR4dApAQCAtMCwwICsxIEBACis5NzgwNDQ2NTc5ODAzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxOTVjMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyM2U4OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvMS50eHQKQEAgLTAsMCArMSBAQAorNDg1MTIzNDMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS8yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWQ5M2JjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS8yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWMxMTc4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS8yLnR4dApAQCAtMCwwICsxIEBACisxMjM0NTY3MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMjliNmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYzExNzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzMudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1NjcwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS80LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIzNjI3MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS80LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiMGNmNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvNC50eHQKQEAgLTAsMCArMSBAQAorNjc2Nzg5ODMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS81LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGJhNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS81LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS81LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTExYmYyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS81LnR4dApAQCAtMCwwICsxIEBACis4MDY3NDMxMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Zjg4OTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYWRhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzYudHh0CkBAIC0wLDAgKzEgQEAKKzU5MDAxMjcwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS83LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5OWEzMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS83LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkYjM2YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9lYW44LTEvNy50eHQKQEAgLTAsMCArMSBAQAorNTA0ODcwNjYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS84LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWRkZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS84LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xLzgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS84LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmMzMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2VhbjgtMS84LnR4dApAQCAtMCwwICsxIEBACis1NTEyMzQ1NwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTY2MGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzAyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNjY5NzZlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzAzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNjdkYjE1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZmI5NGZkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZmMyZGEzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWNjYWVkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MjA1NmJkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNWFlODJiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzA5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNDdhMWIyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzEwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzEwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jN2Q2MDExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NzEwZWZjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZDYzMGNhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzEzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZDNiOTcxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjYxZDIwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OGM4YWJhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZDk3NWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NjBjYTkwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMTcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYzc3MGUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZDUxOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMTkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzIwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNjc1ZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMjAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzIxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzIxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYTBlMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMjEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzIyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzIyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMDU2OTBkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMjIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzIzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzIzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NGZiYWVkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMjMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzI0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzI0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMDIzYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMjQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzI1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yLzI1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZmVhZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2ZhbHNlcG9zaXRpdmVzLTIvMjUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDJkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjIxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMjNjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8wNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNmFjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYzk5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8wNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMjExOTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8wNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjk1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8wOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzZhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyY2EzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZTUwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MDNjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzM0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MTE5ODgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOTExYTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8xNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYTY1ODEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDAzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiY2ExZjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNzIxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYjQxMDgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMTkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8yMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMjAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YmMwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMjAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8yMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMjEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOTg2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMjEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy8yMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMjIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MzMwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMvMjIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWYzYzA5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTdjYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzEudHh0CkBAIC0wLDAgKzEgQEAKKzMwNzEyMzQ1MDAwMDEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzEwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxNTA1NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzEwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2YjBjZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xMC50eHQKQEAgLTAsMCArMSBAQAorMDA1MzYxMTkxMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2FhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNTFjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMTMudHh0CkBAIC0wLDAgKzEgQEAKKzA4MjkyMjA4NzUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODFiMWRlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzE0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzUxYzY5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzE0LnR4dApAQCAtMCwwICsxIEBACiswODI5MjIwODc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3NDg4NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzE1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1MWM2OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xNS50eHQKQEAgLTAsMCArMSBAQAorMDgyOTIyMDg3NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMTYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjM0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MmI2MmUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMTYudHh0CkBAIC0wLDAgKzEgQEAKKzA4MjkyMjA4NzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxNWY4MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiYjc0MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8yLnR4dApAQCAtMCwwICsxIEBACiswMDAxMjM0NTY3ODkwNQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8zLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjY1NGY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8zLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS8zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDZiMGNmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzMudHh0CkBAIC0wLDAgKzEgQEAKKzAwNTM2MTE5MTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwZDVjNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS81LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1MWM2OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS81LnR4dApAQCAtMCwwICsxIEBACiswODI5MjIwODc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTcyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MmI2MmUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvNi50eHQKQEAgLTAsMCArMSBAQAorMDgyOTIyMDg3NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS83LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS83LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTc4ZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS83LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS83LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzRjMjZlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzcudHh0CkBAIC0wLDAgKzEgQEAKKzA4MTc2MDU0NTMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3NTU3ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS84LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyYjYyZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMS84LnR4dApAQCAtMCwwICsxIEBACiswODI5MjIwODc0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMWVjM2MKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0xLzkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NmIwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEvOS50eHQKQEAgLTAsMCArMSBAQAorMDA1MzYxMTkxMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMGFiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDEudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzY2E1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDIudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMmUwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDMudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWQxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDQudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOGE2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDUudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NTEzY2IKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDYudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjM2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDcudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZmU5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDgudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYWRjODAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8wOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMDkudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZGI4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTAudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZGFkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTEudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOTNkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTIudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiN2RlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9pdGYtMi8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmI1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvaXRmLTIvMTMudHh0CkBAIC0wLDAgKzEgQEAKKzA3MDQyOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZThkNGJmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzAyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzM3ZWMzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzAzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWQ4NWZlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5MzE3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2EyOWM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY0OGE1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjhiM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjNmMTlkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzA5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjVlMTAyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzEwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzEwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzAyNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTFhN2YxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjVkMGQxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzEzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTBlOTFlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWFkZTIxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjgzODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2FlZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWVjNjE4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMTcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmMyNTNiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjM2NWNkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMTkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzIwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2NlNzZkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMjAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzIxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzIxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTc0ODY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMjEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzIyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzIyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzk4OTJhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMjIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzIzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzIzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWRiMGJkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMjMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTMyNDU3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMjQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTM1MTYxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMjUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGFiNzFlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMjYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTVjMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMjcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Y5NTU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMjgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzI5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDdmMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMjkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzMwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzMwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTY0ZjFmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMzAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzMxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzMxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTQyMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzMyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzMyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTRjZjQwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMzIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzMzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzMzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2IxZjEyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMzMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjM5OThiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDZjZDYwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMzUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2U1NzdlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMzYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTYyYjhmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMzcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQ4Yjc5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMzgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzM5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODgyYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvMzkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzOWY5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNDAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmIzNjdjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmUyYTFjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2NhY2RlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjI2MDIyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTlhMWI1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjYxODE3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGFhMzA5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGFlZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzQ5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2E5YzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzUwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzUwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWUwYzhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzUxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzUxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWIwMmVhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzUyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzUyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTFlMWNjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzUzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzUzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWI0MjgyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzU0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzU0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDRiODU5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzU1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzU1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjJjZWIxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzU2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzU2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjUyZjRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzU3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzU3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODRiMDliCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNTcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzU5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzU5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTM1YTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNTkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzYwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzYwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmNlMjE5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNjAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzYxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsLzYxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTgzMTQyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BhcnRpYWwvNjEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZGU0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8wMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjODRlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDEudHh0CkBAIC0wLDAgKzEgQEAKK1RoaXMgaXMgUERGNDE3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzAyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8wMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ0MTc3MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzAyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8wMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhOWVhMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8wMi50eHQKQEAgLTAsMCArMSBAQAorMTIzNDU2NzgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTEzYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzAzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTk3ZWVjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzAzLnR4dApAQCAtMCwwICsxIEBACitBY3RpdmVCYXJjb2RlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8wNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhNWNkYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8wNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwZTVkYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8wNC50eHQKQEAgLTAsMCArMSBAQAorLUFjdGl2ZUJhcmNvZGUtQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjJjMDMxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmMxYzM3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA1LnR4dApAQCAtMCwwICsxIEBACistQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzdhYjkyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjFlZGZjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA2LnR4dApAQCAtMCwwICsxIEBACistQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWIyNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2UzMjA5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA3LnR4dApAQCAtMCwwICsxIEBACistQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAtQWN0aXZlQmFyY29kZS1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDkuYmluIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA5LmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjMzZTNhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0xLzA5LmJpbgpAQCAtMCwwICsxIEBACishgp8JIRpF9Ak1L0Q/CT+aRloJYyeC/wltFUHJCaAjRgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NzZlYjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2Mzg0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMS8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyMTViMDMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTEvMTAudHh0CkBAIC0wLDAgKzEgQEAKK1BERi00MTcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NGExNzc1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzAxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUzN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzAxLnR4dApAQCAtMCwwICsxIEBACisxMjM0NTY3ODkwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzAyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzIzNmVhMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzAyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1MzdiNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wMi50eHQKQEAgLTAsMCArMSBAQAorMTIzNDU2Nzg5MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg1N2U4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTM3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDMudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Njg0ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUzN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA0LnR4dApAQCAtMCwwICsxIEBACisxMjM0NTY3ODkwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWQ1YTM2NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1MzdiNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wNS50eHQKQEAgLTAsMCArMSBAQAorMTIzNDU2Nzg5MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBlOTc5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTM3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDYudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NGJkOWJjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMDcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUzN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA3LnR4dApAQCAtMCwwICsxIEBACisxMjM0NTY3ODkwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTFkZTcwZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3YTc3ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wOC50eHQKQEAgLTAsMCArMSBAQAorQSBQREYgNDE3IGJhcmNvZGUgd2l0aCBBU0NJSSB0ZXh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWEwNzJjYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzA5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3YTc3ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8wOS50eHQKQEAgLTAsMCArMSBAQAorQSBQREYgNDE3IGJhcmNvZGUgd2l0aCBBU0NJSSB0ZXh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzEwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDE5ZTg1ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzEwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3YTc3ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMC50eHQKQEAgLTAsMCArMSBAQAorQSBQREYgNDE3IGJhcmNvZGUgd2l0aCBBU0NJSSB0ZXh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWRmM2EwNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzExLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3YTc3ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMS50eHQKQEAgLTAsMCArMSBAQAorQSBQREYgNDE3IGJhcmNvZGUgd2l0aCBBU0NJSSB0ZXh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjc4YThhMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzEyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3YTc3ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMi50eHQKQEAgLTAsMCArMSBAQAorQSBQREYgNDE3IGJhcmNvZGUgd2l0aCBBU0NJSSB0ZXh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzEzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmNlNGEwNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzEzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3YTc3ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xMy50eHQKQEAgLTAsMCArMSBAQAorQSBQREYgNDE3IGJhcmNvZGUgd2l0aCBBU0NJSSB0ZXh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmJkMGM2ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3YTc3ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNC50eHQKQEAgLTAsMCArMSBAQAorQSBQREYgNDE3IGJhcmNvZGUgd2l0aCBBU0NJSSB0ZXh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDczNWRjNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3YTc3ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNS50eHQKQEAgLTAsMCArMSBAQAorQSBQREYgNDE3IGJhcmNvZGUgd2l0aCBBU0NJSSB0ZXh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjk3ZjYwNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NlZjc2MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xNi50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGIDQxNyBiYXJjb2RlIHdpdGggYSBncmVhdGVyIGFtb3VudCBvZiB0ZXh0LiBUaGlzIGlzIGEgbW9yZSBkaWZmaWN1bHQgdGVzdCBmb3IgbW9iaWxlIGRldmljZXMgdG8gcmVzb2x2ZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZmQ1YjhjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2VmNzYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE3LnR4dApAQCAtMCwwICsxIEBACitBIGxhcmdlciBQREYgNDE3IGJhcmNvZGUgd2l0aCBhIGdyZWF0ZXIgYW1vdW50IG9mIHRleHQuIFRoaXMgaXMgYSBtb3JlIGRpZmZpY3VsdCB0ZXN0IGZvciBtb2JpbGUgZGV2aWNlcyB0byByZXNvbHZlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMTgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkNjE4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMTgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZWY3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMTgudHh0CkBAIC0wLDAgKzEgQEAKK0EgbGFyZ2VyIFBERiA0MTcgYmFyY29kZSB3aXRoIGEgZ3JlYXRlciBhbW91bnQgb2YgdGV4dC4gVGhpcyBpcyBhIG1vcmUgZGlmZmljdWx0IHRlc3QgZm9yIG1vYmlsZSBkZXZpY2VzIHRvIHJlc29sdmUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzI5MGEwNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzE5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NlZjc2MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8xOS50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGIDQxNyBiYXJjb2RlIHdpdGggYSBncmVhdGVyIGFtb3VudCBvZiB0ZXh0LiBUaGlzIGlzIGEgbW9yZSBkaWZmaWN1bHQgdGVzdCBmb3IgbW9iaWxlIGRldmljZXMgdG8gcmVzb2x2ZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZDVkZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzIwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2VmNzYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzIwLnR4dApAQCAtMCwwICsxIEBACitBIGxhcmdlciBQREYgNDE3IGJhcmNvZGUgd2l0aCBhIGdyZWF0ZXIgYW1vdW50IG9mIHRleHQuIFRoaXMgaXMgYSBtb3JlIGRpZmZpY3VsdCB0ZXN0IGZvciBtb2JpbGUgZGV2aWNlcyB0byByZXNvbHZlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8yMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkZmZkODkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8yMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZWY3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjEudHh0CkBAIC0wLDAgKzEgQEAKK0EgbGFyZ2VyIFBERiA0MTcgYmFyY29kZSB3aXRoIGEgZ3JlYXRlciBhbW91bnQgb2YgdGV4dC4gVGhpcyBpcyBhIG1vcmUgZGlmZmljdWx0IHRlc3QgZm9yIG1vYmlsZSBkZXZpY2VzIHRvIHJlc29sdmUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzIyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8yMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGVjMDM1MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8yMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzIyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8yMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NlZjc2MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8yMi50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGIDQxNyBiYXJjb2RlIHdpdGggYSBncmVhdGVyIGFtb3VudCBvZiB0ZXh0LiBUaGlzIGlzIGEgbW9yZSBkaWZmaWN1bHQgdGVzdCBmb3IgbW9iaWxlIGRldmljZXMgdG8gcmVzb2x2ZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzIzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jY2RkZWQyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzIzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzIzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2VmNzYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yLzIzLnR4dApAQCAtMCwwICsxIEBACitBIGxhcmdlciBQREYgNDE3IGJhcmNvZGUgd2l0aCBhIGdyZWF0ZXIgYW1vdW50IG9mIHRleHQuIFRoaXMgaXMgYSBtb3JlIGRpZmZpY3VsdCB0ZXN0IGZvciBtb2JpbGUgZGV2aWNlcyB0byByZXNvbHZlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8yNC5iaW4gYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjQuYmluCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlZmZlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjQuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8yNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkODgwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8yNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczOWE5YTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMi8yNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjODRlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTIvMjUudHh0CkBAIC0wLDAgKzEgQEAKK1RoaXMgaXMgUERGNDE3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhY2RjMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzAxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjMDRjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMS50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGNDE3IGJhcmNvZGUgd2l0aCB0ZXh0IGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIDguClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzAyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxMzk1YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzAyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjMDRjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMi50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGNDE3IGJhcmNvZGUgd2l0aCB0ZXh0IGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIDguClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzAzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxNzZiZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzAzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjMDRjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wMy50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGNDE3IGJhcmNvZGUgd2l0aCB0ZXh0IGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIDguClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNjOGIxYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjMDRjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNC50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGNDE3IGJhcmNvZGUgd2l0aCB0ZXh0IGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIDguClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJhMjg5MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjMDRjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNS50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGNDE3IGJhcmNvZGUgd2l0aCB0ZXh0IGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIDguClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliNDkwMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjMDRjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNi50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGNDE3IGJhcmNvZGUgd2l0aCB0ZXh0IGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIDguClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhY2YwYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzNGRmZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wNy50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGNDE3IGJhcmNvZGUgd2l0aCB0ZXh0IGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIDQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxZTU2NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzNGRmZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wOC50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGNDE3IGJhcmNvZGUgd2l0aCB0ZXh0IGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIDQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkMzE1MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzA5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzNGRmZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8wOS50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGNDE3IGJhcmNvZGUgd2l0aCB0ZXh0IGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIDQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzEwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyYmY4YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzEwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzNGRmZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMC50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGNDE3IGJhcmNvZGUgd2l0aCB0ZXh0IGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIDQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjEyMTljNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzExLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2QzNGRmZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMS50eHQKQEAgLTAsMCArMSBAQAorQSBsYXJnZXIgUERGNDE3IGJhcmNvZGUgd2l0aCB0ZXh0IGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIDQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxNmUyZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzEyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmNiMDA5NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9wZGY0MTctMy8xMi50eHQKQEAgLTAsMCArMSBAQAorWyk+HjAxHTAyMTAwMTEdODQwHTUzHTkwODAxMjIzMjc0MzAyMDEdRkRFHTIzODM1MTI1MR0yODkdIB0xLzEdMy4wTEIdWR03NiBOSU5USCBBVkVOVUUdTkVXIFlPUksgQ0lUWR1OWR1TVVNBTiBaT0xFWlpJHjA2HTEwWkVEMDA0HTExWkdPT0dMRR0xMloyMTI1NjU0MTg2HTMwWjMxMDAxMTkyMDAwMDAxHB0xNFo0VEggRkxPT1IdMTVaMzk3OTU3HTIwWjAuMDAcMC4wMB0yOFo5MDgwMTIyMzI3NDMwMjAxHUs1MzMgUFJPR1JBTVMdMjZaNTg0YRwdHgQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMmQ5ZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzEzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmMwNGNlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzEzLnR4dApAQCAtMCwwICsxIEBACitBIGxhcmdlciBQREY0MTcgYmFyY29kZSB3aXRoIHRleHQgYW5kIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgOC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lY2I1YjA5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmMwNGNlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE0LnR4dApAQCAtMCwwICsxIEBACitBIGxhcmdlciBQREY0MTcgYmFyY29kZSB3aXRoIHRleHQgYW5kIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgOC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MWJjYTg1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmMwNGNlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE1LnR4dApAQCAtMCwwICsxIEBACitBIGxhcmdlciBQREY0MTcgYmFyY29kZSB3aXRoIHRleHQgYW5kIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgOC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYjQ2NzRhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmMwNGNlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE2LnR4dApAQCAtMCwwICsxIEBACitBIGxhcmdlciBQREY0MTcgYmFyY29kZSB3aXRoIHRleHQgYW5kIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgOC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OGFiMmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmMwNGNlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE3LnR4dApAQCAtMCwwICsxIEBACitBIGxhcmdlciBQREY0MTcgYmFyY29kZSB3aXRoIHRleHQgYW5kIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgOC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43Y2EwZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTMvMTgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmMwNGNlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0zLzE4LnR4dApAQCAtMCwwICsxIEBACitBIGxhcmdlciBQREY0MTcgYmFyY29kZSB3aXRoIHRleHQgYW5kIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgOC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTQvMDEtMDEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy00LzAxLTAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWJmMzI5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy00LzAxLTAxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTQvMDEuYmluIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy00LzAxLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWZmZTJlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy00LzAxLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTQvMDItMDEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy00LzAyLTAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmQxMmNlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy00LzAyLTAxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTQvMDItMDIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy00LzAyLTAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWFjMGJiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy00LzAyLTAyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcGRmNDE3LTQvMDIuYmluIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy00LzAyLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzA3YzhmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy00LzAyLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4MGIxMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2YjgwNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xLnR4dApAQCAtMCwwICsxIEBACitNRUJLTTpVUkw6aHR0cFw6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWFpbl9QYWdlOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDcyN2YyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZiODA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEwLnR4dApAQCAtMCwwICsxIEBACitNRUJLTTpVUkw6aHR0cFw6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWFpbl9QYWdlOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODhjNDBiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzExLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZiODA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzExLnR4dApAQCAtMCwwICsxIEBACitNRUJLTTpVUkw6aHR0cFw6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWFpbl9QYWdlOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDdlYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZiODA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEyLnR4dApAQCAtMCwwICsxIEBACitNRUJLTTpVUkw6aHR0cFw6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWFpbl9QYWdlOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTY4ZmVmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFkYjAzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzEzLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vZ29vZ2xlLmNvbS9nd3Qvbj91PWJsdWVuaWxlLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMmQ1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWRiMDMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTQudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9nb29nbGUuY29tL2d3dC9uP3U9Ymx1ZW5pbGUuY29tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0ZDM2ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZGIwMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xNS50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2dvb2dsZS5jb20vZ3d0L24/dT1ibHVlbmlsZS5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjY2YWFhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWEyNDRjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE2LnR4dApAQCAtMCwwICsxLDQgQEAKK1NlYW4gT3dlbg0KK3Nyb3dlbkBnb29nbGUuY29tDQorOTE3LTM2NC0yOTE4DQoraHR0cDovL2F3ZXNvbWUtdGhvdWdodHMuY29tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkODZkMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhMjQ0YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xNy50eHQKQEAgLTAsMCArMSw0IEBACitTZWFuIE93ZW4NCitzcm93ZW5AZ29vZ2xlLmNvbQ0KKzkxNy0zNjQtMjkxOA0KK2h0dHA6Ly9hd2Vzb21lLXRob3VnaHRzLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzljNGEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYTI0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTgudHh0CkBAIC0wLDAgKzEsNCBAQAorU2VhbiBPd2VuDQorc3Jvd2VuQGdvb2dsZS5jb20NCis5MTctMzY0LTI5MTgNCitodHRwOi8vYXdlc29tZS10aG91Z2h0cy5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODM5ZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMTkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWEyNDRjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzE5LnR4dApAQCAtMCwwICsxLDQgQEAKK1NlYW4gT3dlbg0KK3Nyb3dlbkBnb29nbGUuY29tDQorOTE3LTM2NC0yOTE4DQoraHR0cDovL2F3ZXNvbWUtdGhvdWdodHMuY29tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyODAzMGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNmI4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTEvMi50eHQKQEAgLTAsMCArMSBAQAorTUVCS006VVJMOmh0dHBcOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01haW5fUGFnZTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzIwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8yMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdiNGYwYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8yMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzIwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8yMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhMjQ0YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8yMC50eHQKQEAgLTAsMCArMSw0IEBACitTZWFuIE93ZW4NCitzcm93ZW5AZ29vZ2xlLmNvbQ0KKzkxNy0zNjQtMjkxOA0KK2h0dHA6Ly9hd2Vzb21lLXRob3VnaHRzLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8zLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjExYjg4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8zLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS8zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZiODA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzMudHh0CkBAIC0wLDAgKzEgQEAKK01FQktNOlVSTDpodHRwXDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWluX1BhZ2U7OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS80LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS80LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzAyZDkwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS80LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS80LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZiODA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzQudHh0CkBAIC0wLDAgKzEgQEAKK01FQktNOlVSTDpodHRwXDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWluX1BhZ2U7OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS81LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS81LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjY3Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS81LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS81LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZiODA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzUudHh0CkBAIC0wLDAgKzEgQEAKK01FQktNOlVSTDpodHRwXDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWluX1BhZ2U7OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS82LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS82LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDM4Mjk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS82LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS82LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZiODA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzYudHh0CkBAIC0wLDAgKzEgQEAKK01FQktNOlVSTDpodHRwXDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWluX1BhZ2U7OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS83LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS83LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGMxNTU3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS83LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS83LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZiODA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzcudHh0CkBAIC0wLDAgKzEgQEAKK01FQktNOlVSTDpodHRwXDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWluX1BhZ2U7OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS84LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS84LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTEzODkyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS84LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS84LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZiODA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzgudHh0CkBAIC0wLDAgKzEgQEAKK01FQktNOlVSTDpodHRwXDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWluX1BhZ2U7OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS85LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS85LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTg5ZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS85LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMS85LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZiODA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0xLzkudHh0CkBAIC0wLDAgKzEgQEAKK01FQktNOlVSTDpodHRwXDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWluX1BhZ2U7OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTI0MTYxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODQ5M2JkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzEudHh0CkBAIC0wLDAgKzEgQEAKK1doZW4gd2UgYXQgV1JUIHRhbGsgYWJvdXQgXCJ0ZXh0LFwiIHdlIGFyZSBnZW5lcmFsbHkgdGFsa2luZyBhYm91dCBhIHBhcnRpY3VsYXIga2luZCBvZiByZWFkYWJsZSBpbmZvcm1hdGlvbiBlbmNvZGluZyAtIGFuZCByZWFkYWJsZSBpcyBhIGNvbXBsZXggcHJvcG9zaXRpb24uIFRleHQgbWF5IGJlIHN0eWxpemVkIGluIGEgd2F5IHdlIGFyZSB1bmZhbWlsaWFyIHdpdGgsIGFzIGluIGJsYWNrbGV0dGVyIC0gaXQgbWF5IGJlIGludGVyc3BlcnNlZCB3aXRoIHNvbWUgbWFya3VwIHdlIGRvblwndCB1bmRlcnN0YW5kLCBzdWNoIGFzIEhUTUwgLSBpdCBtYXkgYmUgYmUgYSBzdWJzdGl0dXRpb24gc3lzdGVtIHdlIGFyZW5cJ3QgZmFtaWxpYXIgd2l0aCwgc3VjaCBhcyBicmFpbGxlIG9yIG1vcnNlIGNvZGUgLSBvciBpdCBtYXkgYmUgYSBzeXN0ZW0gdGhhdCwgd2hpbGUgdGVjaG5pY2FsbHkgaHVtYW4tcmVhZGFibGUsIGlzblwndCBwYXJ0aWN1bGFybHkgb3B0aW1pemVkIGZvciByZWFkaW5nIGJ5IGh1bWFucywgYXMgd2l0aCBiYXJjb2RlcyAoYWx0aG91Z2ggYmFyY29kZXMgY2FuIGJlIHJlYWQpLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTIwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjMyZDkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTAudHh0CkBAIC0wLDAgKzEsMiBAQAorR29vZ2xlIOODouODkOOCpOODqw0KK2h0dHA6Ly9nb29nbGUuanAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTZiYjgxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzExLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjU3NGI3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzExLnR4dApAQCAtMCwwICsxLDEyIEBACitCRUdJTjpWQ0FSRA0KK046S2VubmVkeTtTdGV2ZQ0KK1RFTDorNDQgKDApNzc3NSA3NTU1MDMNCitBRFI7SE9NRTo7O0ZsYXQgMiwgNDMgSG93aXR0IFJvYWQsIEJlbHNpemUgUGFyaztMb25kb247O05XMzRMVTtVSw0KK09SRzpOZXRUZWsgTHRkOw0KK1RJVExFOkNvbnN1bHRhbnQNCitFTUFJTDpzdGV2ZUBuZXR0ZWsuY28udWsNCitVUkw6d3d3Lm5ldHRlay5jby51aw0KK0VNQUlMO0lNOk1TTjpzdGV2ZUBnYm5ldC5uZXQNCitOT1RFOlRlc3RpbmcgMSAyIDMNCitCREFZOjE5NjExMTA1DQorRU5EOlZDQVJEClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmZGNkOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzEyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2MmRhOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xMi50eHQKQEAgLTAsMCArMSBAQAorVGhlIDIwMDUgVVNHUyBhZXJpYWwgcGhvdG9ncmFwaHkgb2YgdGhlIFdhc2hpbmd0b24gTW9udW1lbnQgaXMgY2Vuc29yZWQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzEzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA2YTdjZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzEzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyOWQ2NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xMy50eHQKQEAgLTAsMCArMSBAQAorVGhlIDIwMDUgVVNHUyBhZXJpYWwgcGhvdG9ncmFwaCBvZiB0aGUgV2FzaGluZ3RvbiBNb251bWVudCBpcyBjZW5zb3JlZC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzBhMzUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTRhNjBlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE0LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vYmJjLmNvLnVrL3Byb2dyYW1tZXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmYxNTIwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmI1YTk3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE1LnR4dApAQCAtMCwwICsxIEBACitJbiAyNSB3b3JkcyBvciBsZXNzIGluIHRoZSBjb21tZW50cywgYmVsb3csIHRlbGwgdXMgaG93IFFSIGNvZGVzIHdpbGwgbWFrZSB0aGUgd29ybGQgbGVzcyBvcmRpbmFyeS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGVmZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmMwMjAxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE2LnR4dApAQCAtMCwwICsxLDQgQEAKK1vlpJblgbRRUuOCs+ODvOODiV0NCisgDQorKu++gO++nu++jO++nu++mVFSKg0KK2h0dHA6Ly9kLXFyLm5ldC9leC8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2U0MmNiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmJhNDM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE3LnR4dApAQCAtMCwwICsxLDIgQEAKK+++g+++nu+9u+++nu+9su++nVFSDQoraHR0cDovL2QtcXIubmV0L2V4LwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZDY1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYjg5MDEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTgudHh0CkBAIC0wLDAgKzEsMiBAQAorKu++g+++nu+9u+++nu+9su++nVFSKiAgICAgDQoraHR0cDovL2QtcXIubmV0L2V4LyAgICAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzFkZjA0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMTkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGYyMTY1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzE5LnR4dApAQCAtMCwwICsxLDIgQEAKKyrvvoPvvp7vvbvvvp7vvbLvvp1RUiogICAgDQoraHR0cDovL2QtcXIubmV0L2V4LyAgICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGYxZjhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGQ1MzRlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIudHh0CkBAIC0wLDAgKzEgQEAKK0xBTkRCWUFTQ0FSQyAgIFBFUkNFUFRJQkxFQyBFRUssT09aSSBHSVRTV0FZVEhST1UgIEFXSUxERVJORVNTT0ZCRVNVUFBPU0VELEkgIENBTlQsT1JBVEwgQVNURFdBUkZJU0guTk8gUkVFU09GQU5ZTSAgTklUVURFQVJFVE9CRVNPTUVNSVNFUkEgIEVGUkFNRUJVSUwgSSBHUyxURU5BTlRFRCwgVSBJTkdTVU1NRVIgICBUSEVGVUdJVElWRTtCVVRUSEVXSE8gIElTTEFORCxXSSBIICAgRVhDRVBUSU9OT0ZUICAgVyBTVEVSTlBPSSAgLEFOREFMSU5FT0ZMTElBTUxFR1IgICAuSEVXQVNPRiBOICAgIEVOVEhVR1VFTk9URiAgICBZIEFOREhBRE9OICBCRUVOV0VBTFRIVElPTkNPTlNFICBFTlRVUE9OSCBTRCAgIFNURVJTLEhFTEVGVE5FICAgTEUgTlMsVEhFQyAgIE9GSElTRk9SRU9VVEhDQVJPICAgQS5USElTSVNMQSAgICBBVkVSWVNJTkdVTEFSTyAgICBUQ09OU0lTVFNPICBJVFRMRUVMU0VEU0FRVUFSVCAgIEZBTUlMRS4gVEkgICBQQVJBVEVERlJPTVRIRU1BICAgQU4gQllBU0NBUiAgIFlQRVJDRVBURVJFU09SVCAgICAgTUFSU0ggRU4gICBFVkVHRVRBVElPTixBU01JR0ggICBTVSBQT1NFRCwgICBDQU5ULE9SQVRSRU1JVFksICAgICAgT1JUIE9VTFRSSUVTVEFORFMsQU5EV0hFUkVBUkVTT00gTUlTICAgICAgRlJBTUVCVUlGRVZFUixNQVlCRSAgICAgIElOREVFRCwgICAgICAgICAgICAgICAgVE87QlVUVCAgICAgIEVJU0xBTkQsV0lUTllZRUFSU0FHTyxJQyAgICBBQ1RFRCAgICAgICAgICAgICAgICAgICAgTExJQU0gICAgQU5ELkhFV0FTT0ZBTk5FU0hBRFJFRFVDRURISU0gT1dBICAgICAgICAgICAgICAgICAgICAgICBJT05DIE5TRVFVRU5UVVBPTkhJU0RTSURFTkNFQVRTVUxMSVZBIFwnUyAgICAgICAgICAgICAgICAgICAgICAgICAgSEMgUk9MSU5BLlRISVNJU0xBTk9VVFRIUiAgICBMRVNMT04gLiAgICAgICAgVEhBVE4gIE9JTlRFICAgICAgICBVIFJURVJPRiAgICBFLklUSVNUSFJPVSAgICAgICBFUk5FICAgICAgIERTQU5EU0xJICAsQUZBVk9SICAgICAgICBUT0ZUICAgICAgIEhFTi5UClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE2NDVjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4ZjVlYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yMC50eHQKQEAgLTAsMCArMSwyIEBACisq776D776e7727776e772y776dUVIqDQoraHR0cDovL2QtcXIubmV0L2V4LyAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTgzYTBiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWM4NGM3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIxLnR4dApAQCAtMCwwICsxLDIgQEAKKyrvvoPvvp7vvbvvvp7vvbLvvp1RUiogIA0KK2h0dHA6Ly9kLXFyLm5ldC9leC8gICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4M2Y1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYWEzYTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjIudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly93d3cuaG90cGVwcGVyLmpwL21vYmlsZS9jZ2ktYmluL01CTEM4MDEwMC5jZ2k/U0E9MDAmWj1BRyZ2b3M9aHBwMDY0JnVpZD1OVUxMR1dET0NPTU8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2NlZDAxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2NkNWJlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzIzLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vYW5pZnVsLmpwL3ByLyAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzODU0YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiY2JjMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yNC50eHQKQEAgLTAsMCArMSwyIEBACisq776D776e7727776e772y776dUVIqIA0KK2h0dHA6Ly9kLXFyLm5ldC9leC8gICAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjg0MzYwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQyYmMxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI1LnR4dApAQCAtMCwwICsxIEBACitNRUJLTTpUSVRMRTo7VVJMOmh0dHA6Ly9kLmtheXdhLmNvbS8yMDIwNDAwMTAyOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjEwNzJhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGY2MmZlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI2LnR4dApAQCAtMCwwICsxLDMgQEAKKzzvvoPvvp7vvbvvvp7vvbLvvp1RUj4gDQor772y776X7729776E5YWl44KK7722776X772wUVLvvbrvvbDvvoTvvp4NCitodHRwOi8vZC1xci5uZXQvZXgvIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Y2RhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMGM2OTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMjcudHh0CkBAIC0wLDAgKzEsMiBAQAorKu++g+++nu+9u+++nu+9su++nVFSKiAgIA0KK2h0dHA6Ly9kLXFyLm5ldC9leC8gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NiYjRhNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0MzY5ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yOC50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL3d3dy53ZWJ0ZWNoLmNvLmpwL2svClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmZWU2ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzI5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdhZDI5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8yOS50eHQKQEAgLTAsMCArMSwzIEBACitodHRwOi8vbGl2ZS5mZGdtLmpwL3UvZXZlbnQvaHlwZS9oeXBlX3RvcC5odG1sIA0KKw0KK01FQktNOlRJVExFOmh5cGXjg6Ljg5DjgqTjg6s7VVJMOmh0dHBcOi8vbGl2ZS5mZGdtLmpwL3UvZXZlbnQvaHlwZS9oeXBlX3RvcC5odG1sOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzMwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGM1ZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzMwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzMwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzY0MTMwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzMwLnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjrmuKzoqaY7OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8zMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1N2QyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8zMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZDJlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzEudHh0CkBAIC0wLDAgKzEgQEAKK+S7iuW6puOBruODkOODvOOCuOODp+ODs+OBp+OBr+aWh+eroOOBruaal+WPt+WMluOBjOOBp+OBjeOBvuOBmeOAggpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8zMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NTcyYzUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8zMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTc0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzIudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0JFR0lOOlZDQVJEDQorTjpLZW5uZWR5O1N0ZXZlDQorVEVMOis0NCAoMCk3Nzc1IDc1NTUwMw0KK0FEUjtIT01FOjs7RmxhdCAyLCA0MyBIb3dpdHQgUm9hZCwgQmVsc2l6ZSBQYXJrO0xvbmRvbjs7TlczNExVO1VLDQorT1JHOk5ldFRlayBMdGQ7DQorVElUTEU6Q29uc3VsdGFudA0KK0VNQUlMOnN0ZXZlQG5ldHRlay5jby51aw0KK1VSTDp3d3cubmV0dGVrLmNvLnVrDQorRU1BSUw7SU06TVNOOnN0ZXZlQGdibmV0Lm5ldA0KK05PVEU6VGVzdGluZyAxIDIgMw0KK0JEQVk6MTk2MTExMDUNCitFTkQ6VkNBUkQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzMzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWQ2YjM5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzMzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzMzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGQwNzdlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzMzLnR4dApAQCAtMCwwICsxIEBACisBEEFEOlNVQjrpmL87OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8zNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNTVlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi8zNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4M2U4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzQudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzM1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjE3ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzM1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvMzUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzM1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODNlOGFhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzM1LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vd3d3Lmdvb2dsZS5jb20vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMWViNzAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzZlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvNC50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL3d3d3Mua2VpaGluLmt0ci5tbGl0LmdvLmpwL2tlaXRhaS8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdmM2RlNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi81LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzNWVjZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi81LnR4dApAQCAtMCwwICsxIEBACisyMDIxMjAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjg5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YzM0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvNi50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2Qua2F5d2EuY29tLzIwMjA3MTAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YmVhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzgyMmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTIvNy50eHQKQEAgLTAsMCArMSBAQAorQklaQ0FSRDpOOlRvZGQ7WDpPZ2FzYXdhcmE7VDpUZWNoIEdlZWs7QzpNb2JpbGVWaWV3cy5jb207QTpNb2JpbGVUb3duIFVTQTtFOmVkaXRvckBtb2JpbGV2aWV3cy5jb207OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi84LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi84LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmFlYWViCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi84LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi84LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTBhN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzgudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9zdGF0aWNyb29zdGVyLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi85LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi85LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU3NDRjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi85LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMi85LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTJhZWExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0yLzkudHh0CkBAIC0wLDAgKzEgQEAKK01vcmRlbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTZmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjA4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDEudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9hcm5hdWQuc2FodWd1ZXQuY29tL2dyYWZmaXRpL3Rlc3QucGhwP2xsPS03NC4wMDMwOTk2MTUwMzIxOCw0MC43NDEwMjU3MzE2MzA0NiwwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzAyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmMTUwMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzAyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2MDg5NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wMi50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2FybmF1ZC5zYWh1Z3VldC5jb20vZ3JhZmZpdGkvdGVzdC5waHA/bGw9LTc0LjAwMzA5OTYxNTAzMjE4LDQwLjc0MTAyNTczMTYzMDQ2LDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzQzMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzAzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTYwODk3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzAzLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vYXJuYXVkLnNhaHVndWV0LmNvbS9ncmFmZml0aS90ZXN0LnBocD9sbD0tNzQuMDAzMDk5NjE1MDMyMTgsNDAuNzQxMDI1NzMxNjMwNDYsMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTFlODIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjA4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDQudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9hcm5hdWQuc2FodWd1ZXQuY29tL2dyYWZmaXRpL3Rlc3QucGhwP2xsPS03NC4wMDMwOTk2MTUwMzIxOCw0MC43NDEwMjU3MzE2MzA0NiwwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiYTRjMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2MDg5NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wNS50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2FybmF1ZC5zYWh1Z3VldC5jb20vZ3JhZmZpdGkvdGVzdC5waHA/bGw9LTc0LjAwMzA5OTYxNTAzMjE4LDQwLjc0MTAyNTczMTYzMDQ2LDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODE3MjczCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTYwODk3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA2LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vYXJuYXVkLnNhaHVndWV0LmNvbS9ncmFmZml0aS90ZXN0LnBocD9sbD0tNzQuMDAzMDk5NjE1MDMyMTgsNDAuNzQxMDI1NzMxNjMwNDYsMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZDRlOTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjA4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDcudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9hcm5hdWQuc2FodWd1ZXQuY29tL2dyYWZmaXRpL3Rlc3QucGhwP2xsPS03NC4wMDMwOTk2MTUwMzIxOCw0MC43NDEwMjU3MzE2MzA0NiwwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2NjM2MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2MDg5NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8wOC50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2FybmF1ZC5zYWh1Z3VldC5jb20vZ3JhZmZpdGkvdGVzdC5waHA/bGw9LTc0LjAwMzA5OTYxNTAzMjE4LDQwLjc0MTAyNTczMTYzMDQ2LDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGM4ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMDkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTYwODk3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzA5LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vYXJuYXVkLnNhaHVndWV0LmNvbS9ncmFmZml0aS90ZXN0LnBocD9sbD0tNzQuMDAzMDk5NjE1MDMyMTgsNDAuNzQxMDI1NzMxNjMwNDYsMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODc4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjU3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTAudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOkdvb2dsZSA0MTEsO1RFTDoxODY2NTg4MTA3Nzs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjMTM3YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzExLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyNTc2ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xMS50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46R29vZ2xlIDQxMSw7VEVMOjE4NjY1ODgxMDc3OzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjEwMjYwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzEyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTI1NzZkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzEyLnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpHb29nbGUgNDExLDtURUw6MTg2NjU4ODEwNzc7OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZGM2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjU3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTMudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOkdvb2dsZSA0MTEsO1RFTDoxODY2NTg4MTA3Nzs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEzODZmOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyNTc2ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xNC50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46R29vZ2xlIDQxMSw7VEVMOjE4NjY1ODgxMDc3OzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODcxYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTI1NzZkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE1LnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpHb29nbGUgNDExLDtURUw6MTg2NjU4ODEwNzc7OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNjQwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjU3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTYudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOkdvb2dsZSA0MTEsO1RFTDoxODY2NTg4MTA3Nzs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxY2Y1MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyNTc2ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xNy50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46R29vZ2xlIDQxMSw7VEVMOjE4NjY1ODgxMDc3OzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGRlNGJjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMTgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGEyM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE4LnR4dApAQCAtMCwwICsxLDIgQEAKK1VJIG9mZmljZSBob3VycyBzaWdudXANCitodHRwOi8vd3d3LmNvcnAuZ29vZ2xlLmNvbS9zcGFycm93L3VpX29mZmljZV9ob3Vycy8gDQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlODRmNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzE5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhMjNmZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8xOS50eHQKQEAgLTAsMCArMSwyIEBACitVSSBvZmZpY2UgaG91cnMgc2lnbnVwDQoraHR0cDovL3d3dy5jb3JwLmdvb2dsZS5jb20vc3BhcnJvdy91aV9vZmZpY2VfaG91cnMvIA0KZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NzM0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YTIzZmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjAudHh0CkBAIC0wLDAgKzEsMiBAQAorVUkgb2ZmaWNlIGhvdXJzIHNpZ251cA0KK2h0dHA6Ly93d3cuY29ycC5nb29nbGUuY29tL3NwYXJyb3cvdWlfb2ZmaWNlX2hvdXJzLyANCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzIxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWFhNWFiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzIxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzIxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGEyM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzIxLnR4dApAQCAtMCwwICsxLDIgQEAKK1VJIG9mZmljZSBob3VycyBzaWdudXANCitodHRwOi8vd3d3LmNvcnAuZ29vZ2xlLmNvbS9zcGFycm93L3VpX29mZmljZV9ob3Vycy8gDQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzIyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmYzY5MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzIyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhMjNmZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yMi50eHQKQEAgLTAsMCArMSwyIEBACitVSSBvZmZpY2UgaG91cnMgc2lnbnVwDQoraHR0cDovL3d3dy5jb3JwLmdvb2dsZS5jb20vc3BhcnJvdy91aV9vZmZpY2VfaG91cnMvIA0KZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNDFkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YTIzZmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjMudHh0CkBAIC0wLDAgKzEsMiBAQAorVUkgb2ZmaWNlIGhvdXJzIHNpZ251cA0KK2h0dHA6Ly93d3cuY29ycC5nb29nbGUuY29tL3NwYXJyb3cvdWlfb2ZmaWNlX2hvdXJzLyANCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTdiNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGEyM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI0LnR4dApAQCAtMCwwICsxLDIgQEAKK1VJIG9mZmljZSBob3VycyBzaWdudXANCitodHRwOi8vd3d3LmNvcnAuZ29vZ2xlLmNvbS9zcGFycm93L3VpX29mZmljZV9ob3Vycy8gDQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjZjA1YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhMjNmZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yNS50eHQKQEAgLTAsMCArMSwyIEBACitVSSBvZmZpY2UgaG91cnMgc2lnbnVwDQoraHR0cDovL3d3dy5jb3JwLmdvb2dsZS5jb20vc3BhcnJvdy91aV9vZmZpY2VfaG91cnMvIA0KZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzNiNzYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjYudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOlNlYW4gT3dlbjtURUw6KzEyMTI1NjU4NzcwO0VNQUlMOnNyb3dlbkBnb29nbGUuY29tOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmZmMzY5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRmODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI3LnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpTZWFuIE93ZW47VEVMOisxMjEyNTY1ODc3MDtFTUFJTDpzcm93ZW5AZ29vZ2xlLmNvbTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNlMDVlMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzI4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Zjg1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yOC50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46U2VhbiBPd2VuO1RFTDorMTIxMjU2NTg3NzA7RU1BSUw6c3Jvd2VuQGdvb2dsZS5jb207OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjM1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8yOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMjkudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOlNlYW4gT3dlbjtURUw6KzEyMTI1NjU4NzcwO0VNQUlMOnNyb3dlbkBnb29nbGUuY29tOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzMwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmQyNDdjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzMwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzMwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRmODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzMwLnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpTZWFuIE93ZW47VEVMOisxMjEyNTY1ODc3MDtFTUFJTDpzcm93ZW5AZ29vZ2xlLmNvbTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzMxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxMzE5NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzMxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Zjg1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zMS50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46U2VhbiBPd2VuO1RFTDorMTIxMjU2NTg3NzA7RU1BSUw6c3Jvd2VuQGdvb2dsZS5jb207OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZmFmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzIudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOlNlYW4gT3dlbjtURUw6KzEyMTI1NjU4NzcwO0VNQUlMOnNyb3dlbkBnb29nbGUuY29tOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzMzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNThlOTgzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzMzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzMzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRmODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzMzLnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpTZWFuIE93ZW47VEVMOisxMjEyNTY1ODc3MDtFTUFJTDpzcm93ZW5AZ29vZ2xlLmNvbTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2YjQwMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Zjg1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zNC50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46U2VhbiBPd2VuO1RFTDorMTIxMjU2NTg3NzA7RU1BSUw6c3Jvd2VuQGdvb2dsZS5jb207OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDM4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzUudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOlNlYW4gT3dlbjtURUw6KzEyMTI1NjU4NzcwO0VNQUlMOnNyb3dlbkBnb29nbGUuY29tOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTYzNjkzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRmODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM2LnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpTZWFuIE93ZW47VEVMOisxMjEyNTY1ODc3MDtFTUFJTDpzcm93ZW5AZ29vZ2xlLmNvbTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3MjQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Zjg1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zNy50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46U2VhbiBPd2VuO1RFTDorMTIxMjU2NTg3NzA7RU1BSUw6c3Jvd2VuQGdvb2dsZS5jb207OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZjA4NGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy8zOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzgudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOlNlYW4gT3dlbjtURUw6KzEyMTI1NjU4NzcwO0VNQUlMOnNyb3dlbkBnb29nbGUuY29tOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTdjNzhjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvMzkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRmODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzM5LnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpTZWFuIE93ZW47VEVMOisxMjEyNTY1ODc3MDtFTUFJTDpzcm93ZW5AZ29vZ2xlLmNvbTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzQwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy80MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmZjliOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy80MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzQwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy80MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Zjg1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy80MC50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46U2VhbiBPd2VuO1RFTDorMTIxMjU2NTg3NzA7RU1BSUw6c3Jvd2VuQGdvb2dsZS5jb207OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy80MS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvNDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDA5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvNDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMy80MS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvNDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvNDEudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOlNlYW4gT3dlbjtURUw6KzEyMTI1NjU4NzcwO0VNQUlMOnNyb3dlbkBnb29nbGUuY29tOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvNDIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzQyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmFhNjMzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzQyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTMvNDIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzQyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRmODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS0zLzQyLnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpTZWFuIE93ZW47VEVMOisxMjEyNTY1ODc3MDtFTUFJTDpzcm93ZW5AZ29vZ2xlLmNvbTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzMmFjZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzAxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMS50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzAyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExMGZjNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzAyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMi50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzAzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlZWE4NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzAzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wMy50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkyMmIyZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNC50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY2MDQxOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNS50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcyMGNhZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNi50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyMDZiZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wNy50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5NzI2YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wOC50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhMDY0MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzA5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8wOS50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzEwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzYjhhNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzEwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMC50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjOTY1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzExLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMS50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYxMDc4NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzEyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMi50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzEzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyMDU0OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzEzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xMy50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzE0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0N2Y3MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzE0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0YWY4NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xNC50eHQKQEAgLTAsMCArMSBAQAorR29vZ2xlIFByaW50IEFkcyAtIFQuRy5JLkEuRi4gLSBKYW51YXJ5IDMxLCAyMDA4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4YzI3MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzE1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2OWRiMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xNS50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMTYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YTViZTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjlkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMTYudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDBkZjZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzE3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY5ZGIyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzE3LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzE4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlMGVhZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzE4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2OWRiMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xOC50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMTkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZjc5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMTkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMTkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjlkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMTkudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmNjZTZmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzIwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY5ZGIyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzIwLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzIxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3OWIxNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzIxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2OWRiMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yMS50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNDA0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjlkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjIudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzIzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTNkMTcwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzIzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzIzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY5ZGIyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzIzLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyNmY0OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2OWRiMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yNC50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMTAwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjlkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjUudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTQ3MDk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY5ZGIyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI2LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4YTIwYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2OWRiMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yNy50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMTI4MjcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8yOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjlkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjgudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzRhZGFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMjkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY5ZGIyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzI5LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzMwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlZjNhZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzMwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2OWRiMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zMC50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMmY1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjlkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzEudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzMyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjAzYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzMyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzMyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY5ZGIyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzMyLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzMzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQxMDNmYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzMzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2OWRiMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zMy50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTFhOTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjlkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzQudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTMxZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM1LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3AvenhpbmcvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkwNTZmZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4NzJjOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zNi50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3p4aW5nLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODY1M2EKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxODcyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzcudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC96eGluZy8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjQzYWZlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvMzgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM4LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3AvenhpbmcvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzNTc2OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzM5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4NzJjOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC8zOS50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3p4aW5nLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80MC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MTE0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80MC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxODcyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDAudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC96eGluZy8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGU2ZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQxLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3AvenhpbmcvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80Mi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkYmYxYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80Mi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80Mi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4NzJjOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80Mi50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3p4aW5nLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80My5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OGRiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80My50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxODcyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDMudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC96eGluZy8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDYwYTE2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ0LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3AvenhpbmcvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80NS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzODlhZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80NS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80NS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4NzJjOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80NS50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3p4aW5nLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80Ni5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzEzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80Ni50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxODcyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDYudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC96eGluZy8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWNkMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTQvNDcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ3LnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3AvenhpbmcvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80OC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiMmNmYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80OC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS00LzQ4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80OC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4NzJjOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNC80OC50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3p4aW5nLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OTU3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDEudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOlNlYW4gT3dlbjtURUw6KzEyMTI1NjU4NzcwO0VNQUlMOnNyb3dlbkBnb29nbGUuY29tOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTc3ZjhlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzAyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRmODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzAyLnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpTZWFuIE93ZW47VEVMOisxMjEyNTY1ODc3MDtFTUFJTDpzcm93ZW5AZ29vZ2xlLmNvbTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzAzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlNDY4YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzAzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Zjg1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wMy50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46U2VhbiBPd2VuO1RFTDorMTIxMjU2NTg3NzA7RU1BSUw6c3Jvd2VuQGdvb2dsZS5jb207OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzRkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDQudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOlNlYW4gT3dlbjtURUw6KzEyMTI1NjU4NzcwO0VNQUlMOnNyb3dlbkBnb29nbGUuY29tOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGNhOGM1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRmODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA1LnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpTZWFuIE93ZW47VEVMOisxMjEyNTY1ODc3MDtFTUFJTDpzcm93ZW5AZ29vZ2xlLmNvbTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzZDQxNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Zjg1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wNi50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46U2VhbiBPd2VuO1RFTDorMTIxMjU2NTg3NzA7RU1BSUw6c3Jvd2VuQGdvb2dsZS5jb207OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZTc4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDcudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOlNlYW4gT3dlbjtURUw6KzEyMTI1NjU4NzcwO0VNQUlMOnNyb3dlbkBnb29nbGUuY29tOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Y4ZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMDgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRmODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA4LnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpTZWFuIE93ZW47VEVMOisxMjEyNTY1ODc3MDtFTUFJTDpzcm93ZW5AZ29vZ2xlLmNvbTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzZWVlNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzA5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Zjg1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8wOS50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46U2VhbiBPd2VuO1RFTDorMTIxMjU2NTg3NzA7RU1BSUw6c3Jvd2VuQGdvb2dsZS5jb207OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMWI3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTAudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOlNlYW4gT3dlbjtURUw6KzEyMTI1NjU4NzcwO0VNQUlMOnNyb3dlbkBnb29nbGUuY29tOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWQ0MDNmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzExLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRmODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzExLnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpTZWFuIE93ZW47VEVMOisxMjEyNTY1ODc3MDtFTUFJTDpzcm93ZW5AZ29vZ2xlLmNvbTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3NThmZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzEyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Zjg1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xMi50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46U2VhbiBPd2VuO1RFTDorMTIxMjU2NTg3NzA7RU1BSUw6c3Jvd2VuQGdvb2dsZS5jb207OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOTY1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTMudHh0CkBAIC0wLDAgKzEgQEAKK01FQ0FSRDpOOlNlYW4gT3dlbjtURUw6KzEyMTI1NjU4NzcwO0VNQUlMOnNyb3dlbkBnb29nbGUuY29tOzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTFiNGUxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRmODUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE0LnR4dApAQCAtMCwwICsxIEBACitNRUNBUkQ6TjpTZWFuIE93ZW47VEVMOisxMjEyNTY1ODc3MDtFTUFJTDpzcm93ZW5AZ29vZ2xlLmNvbTs7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZkNGRkYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0Zjg1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xNS50eHQKQEAgLTAsMCArMSBAQAorTUVDQVJEOk46U2VhbiBPd2VuO1RFTDorMTIxMjU2NTg3NzA7RU1BSUw6c3Jvd2VuQGdvb2dsZS5jb207OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYWJiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNzVkN2EKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTYudHh0CkBAIC0wLDAgKzEsNTcgQEAKK1RIUk9VR0ggVEhFIExPT0tJTkctR0xBU1MKKworQnkgTGV3aXMgQ2Fycm9sbAorCisKK0NIQVBURVIgSS4gTG9va2luZy1HbGFzcyBob3VzZQorCitPbmUgdGhpbmcgd2FzIGNlcnRhaW4sIHRoYXQgdGhlIFdISVRFIGtpdHRlbiBoYWQgaGFkIG5vdGhpbmcgdG8gZG8gd2l0aAoraXQ6LS1pdCB3YXMgdGhlIGJsYWNrIGtpdHRlbidzIGZhdWx0IGVudGlyZWx5LiBGb3IgdGhlIHdoaXRlIGtpdHRlbiBoYWQKK2JlZW4gaGF2aW5nIGl0cyBmYWNlIHdhc2hlZCBieSB0aGUgb2xkIGNhdCBmb3IgdGhlIGxhc3QgcXVhcnRlciBvZgorYW4gaG91ciAoYW5kIGJlYXJpbmcgaXQgcHJldHR5IHdlbGwsIGNvbnNpZGVyaW5nKTsgc28geW91IHNlZSB0aGF0IGl0CitDT1VMRE4nVCBoYXZlIGhhZCBhbnkgaGFuZCBpbiB0aGUgbWlzY2hpZWYuCisKK1RoZSB3YXkgRGluYWggd2FzaGVkIGhlciBjaGlsZHJlbidzIGZhY2VzIHdhcyB0aGlzOiBmaXJzdCBzaGUgaGVsZCB0aGUKK3Bvb3IgdGhpbmcgZG93biBieSBpdHMgZWFyIHdpdGggb25lIHBhdywgYW5kIHRoZW4gd2l0aCB0aGUgb3RoZXIgcGF3IHNoZQorcnViYmVkIGl0cyBmYWNlIGFsbCBvdmVyLCB0aGUgd3Jvbmcgd2F5LCBiZWdpbm5pbmcgYXQgdGhlIG5vc2U6IGFuZAoranVzdCBub3csIGFzIEkgc2FpZCwgc2hlIHdhcyBoYXJkIGF0IHdvcmsgb24gdGhlIHdoaXRlIGtpdHRlbiwgd2hpY2ggd2FzCitseWluZyBxdWl0ZSBzdGlsbCBhbmQgdHJ5aW5nIHRvIHB1cnItLW5vIGRvdWJ0IGZlZWxpbmcgdGhhdCBpdCB3YXMgYWxsCittZWFudCBmb3IgaXRzIGdvb2QuCisKK0J1dCB0aGUgYmxhY2sga2l0dGVuIGhhZCBiZWVuIGZpbmlzaGVkIHdpdGggZWFybGllciBpbiB0aGUgYWZ0ZXJub29uLAorYW5kIHNvLCB3aGlsZSBBbGljZSB3YXMgc2l0dGluZyBjdXJsZWQgdXAgaW4gYSBjb3JuZXIgb2YgdGhlIGdyZWF0Cithcm0tY2hhaXIsIGhhbGYgdGFsa2luZyB0byBoZXJzZWxmIGFuZCBoYWxmIGFzbGVlcCwgdGhlIGtpdHRlbiBoYWQgYmVlbgoraGF2aW5nIGEgZ3JhbmQgZ2FtZSBvZiByb21wcyB3aXRoIHRoZSBiYWxsIG9mIHdvcnN0ZWQgQWxpY2UgaGFkIGJlZW4KK3RyeWluZyB0byB3aW5kIHVwLCBhbmQgaGFkIGJlZW4gcm9sbGluZyBpdCB1cCBhbmQgZG93biB0aWxsIGl0IGhhZCBhbGwKK2NvbWUgdW5kb25lIGFnYWluOyBhbmQgdGhlcmUgaXQgd2FzLCBzcHJlYWQgb3ZlciB0aGUgaGVhcnRoLXJ1ZywgYWxsCitrbm90cyBhbmQgdGFuZ2xlcywgd2l0aCB0aGUga2l0dGVuIHJ1bm5pbmcgYWZ0ZXIgaXRzIG93biB0YWlsIGluIHRoZQorbWlkZGxlLgorCisnT2gsIHlvdSB3aWNrZWQgbGl0dGxlIHRoaW5nIScgY3JpZWQgQWxpY2UsIGNhdGNoaW5nIHVwIHRoZSBraXR0ZW4sIGFuZAorZ2l2aW5nIGl0IGEgbGl0dGxlIGtpc3MgdG8gbWFrZSBpdCB1bmRlcnN0YW5kIHRoYXQgaXQgd2FzIGluIGRpc2dyYWNlLgorJ1JlYWxseSwgRGluYWggb3VnaHQgdG8gaGF2ZSB0YXVnaHQgeW91IGJldHRlciBtYW5uZXJzISBZb3UgT1VHSFQsCitEaW5haCwgeW91IGtub3cgeW91IG91Z2h0IScgc2hlIGFkZGVkLCBsb29raW5nIHJlcHJvYWNoZnVsbHkgYXQgdGhlIG9sZAorY2F0LCBhbmQgc3BlYWtpbmcgaW4gYXMgY3Jvc3MgYSB2b2ljZSBhcyBzaGUgY291bGQgbWFuYWdlLS1hbmQgdGhlbiBzaGUKK3NjcmFtYmxlZCBiYWNrIGludG8gdGhlIGFybS1jaGFpciwgdGFraW5nIHRoZSBraXR0ZW4gYW5kIHRoZSB3b3JzdGVkCit3aXRoIGhlciwgYW5kIGJlZ2FuIHdpbmRpbmcgdXAgdGhlIGJhbGwgYWdhaW4uIEJ1dCBzaGUgZGlkbid0IGdldCBvbgordmVyeSBmYXN0LCBhcyBzaGUgd2FzIHRhbGtpbmcgYWxsIHRoZSB0aW1lLCBzb21ldGltZXMgdG8gdGhlIGtpdHRlbiwgYW5kCitzb21ldGltZXMgdG8gaGVyc2VsZi4gS2l0dHkgc2F0IHZlcnkgZGVtdXJlbHkgb24gaGVyIGtuZWUsIHByZXRlbmRpbmcgdG8KK3dhdGNoIHRoZSBwcm9ncmVzcyBvZiB0aGUgd2luZGluZywgYW5kIG5vdyBhbmQgdGhlbiBwdXR0aW5nIG91dCBvbmUKK3BhdyBhbmQgZ2VudGx5IHRvdWNoaW5nIHRoZSBiYWxsLCBhcyBpZiBpdCB3b3VsZCBiZSBnbGFkIHRvIGhlbHAsIGlmIGl0CittaWdodC4KKworJ0RvIHlvdSBrbm93IHdoYXQgdG8tbW9ycm93IGlzLCBLaXR0eT8nIEFsaWNlIGJlZ2FuLiAnWW91J2QgaGF2ZSBndWVzc2VkCitpZiB5b3UnZCBiZWVuIHVwIGluIHRoZSB3aW5kb3cgd2l0aCBtZS0tb25seSBEaW5haCB3YXMgbWFraW5nIHlvdSB0aWR5LAorc28geW91IGNvdWxkbid0LiBJIHdhcyB3YXRjaGluZyB0aGUgYm95cyBnZXR0aW5nIGluIHN0aWNrcyBmb3IgdGhlCitib25maXJlLS1hbmQgaXQgd2FudHMgcGxlbnR5IG9mIHN0aWNrcywgS2l0dHkhIE9ubHkgaXQgZ290IHNvIGNvbGQsIGFuZAoraXQgc25vd2VkIHNvLCB0aGV5IGhhZCB0byBsZWF2ZSBvZmYuIE5ldmVyIG1pbmQsIEtpdHR5LCB3ZSdsbCBnbyBhbmQKK3NlZSB0aGUgYm9uZmlyZSB0by1tb3Jyb3cuJyBIZXJlIEFsaWNlIHdvdW5kIHR3byBvciB0aHJlZSB0dXJucyBvZiB0aGUKK3dvcnN0ZWQgcm91bmQgdGhlIGtpdHRlbidzIG5lY2ssIGp1c3QgdG8gc2VlIGhvdyBpdCB3b3VsZCBsb29rOiB0aGlzIGxlZAordG8gYSBzY3JhbWJsZSwgaW4gd2hpY2ggdGhlIGJhbGwgcm9sbGVkIGRvd24gdXBvbiB0aGUgZmxvb3IsIGFuZCB5YXJkcworYW5kIHlhcmRzIG9mIGl0IGdvdCB1bndvdW5kIGFnYWluLgorCisnRG8geW91IGtub3csIEkgd2FzIHNvIGFuZ3J5LCBLaXR0eSwnIEFsaWNlIHdlbnQgb24gYXMgc29vbiBhcyB0aGV5IHdlcmUKK2NvbWZvcnRhYmx5IHNldHRsZWQgYWdhaW4sICd3aGVuIEkgc2F3IGFsbCB0aGUgbWlzY2hpZWYgeW91IGhhZCBiZWVuCitkb2luZywgSSB3YXMgdmVyeSBuZWFybHkgb3BlbmluZyB0aGUgd2luZG93LCBhbmQgcHV0dGluZyB5b3Ugb3V0IGludG8KK3RoZSBzbm93ISBBbmQgeW91J2QgaGF2ZSBkZXNlcnZlZCBpdCwgeW91IGxpdHRsZSBtaXNjaGlldm91cyBkYXJsaW5nIQorV2hhCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDQ2YmUwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjdhMTBiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE3LnR4dApAQCAtMCwwICsxLDQ2IEBACitUSFJPVUdIIFRIRSBMT09LSU5HLUdMQVNTCisKK0J5IExld2lzIENhcnJvbGwKKworCitDSEFQVEVSIEkuIExvb2tpbmctR2xhc3MgaG91c2UKKworT25lIHRoaW5nIHdhcyBjZXJ0YWluLCB0aGF0IHRoZSBXSElURSBraXR0ZW4gaGFkIGhhZCBub3RoaW5nIHRvIGRvIHdpdGgKK2l0Oi0taXQgd2FzIHRoZSBibGFjayBraXR0ZW4ncyBmYXVsdCBlbnRpcmVseS4gRm9yIHRoZSB3aGl0ZSBraXR0ZW4gaGFkCitiZWVuIGhhdmluZyBpdHMgZmFjZSB3YXNoZWQgYnkgdGhlIG9sZCBjYXQgZm9yIHRoZSBsYXN0IHF1YXJ0ZXIgb2YKK2FuIGhvdXIgKGFuZCBiZWFyaW5nIGl0IHByZXR0eSB3ZWxsLCBjb25zaWRlcmluZyk7IHNvIHlvdSBzZWUgdGhhdCBpdAorQ09VTEROJ1QgaGF2ZSBoYWQgYW55IGhhbmQgaW4gdGhlIG1pc2NoaWVmLgorCitUaGUgd2F5IERpbmFoIHdhc2hlZCBoZXIgY2hpbGRyZW4ncyBmYWNlcyB3YXMgdGhpczogZmlyc3Qgc2hlIGhlbGQgdGhlCitwb29yIHRoaW5nIGRvd24gYnkgaXRzIGVhciB3aXRoIG9uZSBwYXcsIGFuZCB0aGVuIHdpdGggdGhlIG90aGVyIHBhdyBzaGUKK3J1YmJlZCBpdHMgZmFjZSBhbGwgb3ZlciwgdGhlIHdyb25nIHdheSwgYmVnaW5uaW5nIGF0IHRoZSBub3NlOiBhbmQKK2p1c3Qgbm93LCBhcyBJIHNhaWQsIHNoZSB3YXMgaGFyZCBhdCB3b3JrIG9uIHRoZSB3aGl0ZSBraXR0ZW4sIHdoaWNoIHdhcworbHlpbmcgcXVpdGUgc3RpbGwgYW5kIHRyeWluZyB0byBwdXJyLS1ubyBkb3VidCBmZWVsaW5nIHRoYXQgaXQgd2FzIGFsbAorbWVhbnQgZm9yIGl0cyBnb29kLgorCitCdXQgdGhlIGJsYWNrIGtpdHRlbiBoYWQgYmVlbiBmaW5pc2hlZCB3aXRoIGVhcmxpZXIgaW4gdGhlIGFmdGVybm9vbiwKK2FuZCBzbywgd2hpbGUgQWxpY2Ugd2FzIHNpdHRpbmcgY3VybGVkIHVwIGluIGEgY29ybmVyIG9mIHRoZSBncmVhdAorYXJtLWNoYWlyLCBoYWxmIHRhbGtpbmcgdG8gaGVyc2VsZiBhbmQgaGFsZiBhc2xlZXAsIHRoZSBraXR0ZW4gaGFkIGJlZW4KK2hhdmluZyBhIGdyYW5kIGdhbWUgb2Ygcm9tcHMgd2l0aCB0aGUgYmFsbCBvZiB3b3JzdGVkIEFsaWNlIGhhZCBiZWVuCit0cnlpbmcgdG8gd2luZCB1cCwgYW5kIGhhZCBiZWVuIHJvbGxpbmcgaXQgdXAgYW5kIGRvd24gdGlsbCBpdCBoYWQgYWxsCitjb21lIHVuZG9uZSBhZ2FpbjsgYW5kIHRoZXJlIGl0IHdhcywgc3ByZWFkIG92ZXIgdGhlIGhlYXJ0aC1ydWcsIGFsbAora25vdHMgYW5kIHRhbmdsZXMsIHdpdGggdGhlIGtpdHRlbiBydW5uaW5nIGFmdGVyIGl0cyBvd24gdGFpbCBpbiB0aGUKK21pZGRsZS4KKworJ09oLCB5b3Ugd2lja2VkIGxpdHRsZSB0aGluZyEnIGNyaWVkIEFsaWNlLCBjYXRjaGluZyB1cCB0aGUga2l0dGVuLCBhbmQKK2dpdmluZyBpdCBhIGxpdHRsZSBraXNzIHRvIG1ha2UgaXQgdW5kZXJzdGFuZCB0aGF0IGl0IHdhcyBpbiBkaXNncmFjZS4KKydSZWFsbHksIERpbmFoIG91Z2h0IHRvIGhhdmUgdGF1Z2h0IHlvdSBiZXR0ZXIgbWFubmVycyEgWW91IE9VR0hULAorRGluYWgsIHlvdSBrbm93IHlvdSBvdWdodCEnIHNoZSBhZGRlZCwgbG9va2luZyByZXByb2FjaGZ1bGx5IGF0IHRoZSBvbGQKK2NhdCwgYW5kIHNwZWFraW5nIGluIGFzIGNyb3NzIGEgdm9pY2UgYXMgc2hlIGNvdWxkIG1hbmFnZS0tYW5kIHRoZW4gc2hlCitzY3JhbWJsZWQgYmFjayBpbnRvIHRoZSBhcm0tY2hhaXIsIHRha2luZyB0aGUga2l0dGVuIGFuZCB0aGUgd29yc3RlZAord2l0aCBoZXIsIGFuZCBiZWdhbiB3aW5kaW5nIHVwIHRoZSBiYWxsIGFnYWluLiBCdXQgc2hlIGRpZG4ndCBnZXQgb24KK3ZlcnkgZmFzdCwgYXMgc2hlIHdhcyB0YWxraW5nIGFsbCB0aGUgdGltZSwgc29tZXRpbWVzIHRvIHRoZSBraXR0ZW4sIGFuZAorc29tZXRpbWVzIHRvIGhlcnNlbGYuIEtpdHR5IHNhdCB2ZXJ5IGRlbXVyZWx5IG9uIGhlciBrbmVlLCBwcmV0ZW5kaW5nIHRvCit3YXRjaCB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHdpbmRpbmcsIGFuZCBub3cgYW5kIHRoZW4gcHV0dGluZyBvdXQgb25lCitwYXcgYW5kIGdlbnRseSB0b3VjaGluZyB0aGUgYmFsbCwgYXMgaWYgaXQgd291bGQgYmUgZ2xhZCB0byBoZWxwLCBpZiBpdAorbWlnaHQuCisKKydEbyB5b3Uga25vdyB3aGF0IHRvLW1vcnJvdyBpcywgS2l0dHk/JyBBbGljZSBiZWdhbi4gJ1lvdSdkIGhhdmUgZ3Vlc3NlZAoraWYgeW91J2QgYmVlbiB1cCBpbiB0aGUgd2luZG93IHdpdGggbWUtLW9ubHkgRGluYWggd2FzIG1ha2luZyB5b3UgdGlkeSwKK3NvIHlvdSBjb3VsZG4ndC4gSSB3YXMgd2F0Y2hpbmcgdGhlIGJveXMgZ2V0dGluZyBpbiBzdGlja3MgZm9yIHRoZQorYm9uZmlyZS0tYW5kIGl0IHdhbnRzIHBsZW50eSBvZiBzdGlja3MsIEtpdHR5ISBPbmx5IGl0IApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUyY2IzOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS01LzE4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzYjc3ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xOC50eHQKQEAgLTAsMCArMSwzNiBAQAorVEhST1VHSCBUSEUgTE9PS0lORy1HTEFTUworCitCeSBMZXdpcyBDYXJyb2xsCisKKworQ0hBUFRFUiBJLiBMb29raW5nLUdsYXNzIGhvdXNlCisKK09uZSB0aGluZyB3YXMgY2VydGFpbiwgdGhhdCB0aGUgV0hJVEUga2l0dGVuIGhhZCBoYWQgbm90aGluZyB0byBkbyB3aXRoCitpdDotLWl0IHdhcyB0aGUgYmxhY2sga2l0dGVuJ3MgZmF1bHQgZW50aXJlbHkuIEZvciB0aGUgd2hpdGUga2l0dGVuIGhhZAorYmVlbiBoYXZpbmcgaXRzIGZhY2Ugd2FzaGVkIGJ5IHRoZSBvbGQgY2F0IGZvciB0aGUgbGFzdCBxdWFydGVyIG9mCithbiBob3VyIChhbmQgYmVhcmluZyBpdCBwcmV0dHkgd2VsbCwgY29uc2lkZXJpbmcpOyBzbyB5b3Ugc2VlIHRoYXQgaXQKK0NPVUxETidUIGhhdmUgaGFkIGFueSBoYW5kIGluIHRoZSBtaXNjaGllZi4KKworVGhlIHdheSBEaW5haCB3YXNoZWQgaGVyIGNoaWxkcmVuJ3MgZmFjZXMgd2FzIHRoaXM6IGZpcnN0IHNoZSBoZWxkIHRoZQorcG9vciB0aGluZyBkb3duIGJ5IGl0cyBlYXIgd2l0aCBvbmUgcGF3LCBhbmQgdGhlbiB3aXRoIHRoZSBvdGhlciBwYXcgc2hlCitydWJiZWQgaXRzIGZhY2UgYWxsIG92ZXIsIHRoZSB3cm9uZyB3YXksIGJlZ2lubmluZyBhdCB0aGUgbm9zZTogYW5kCitqdXN0IG5vdywgYXMgSSBzYWlkLCBzaGUgd2FzIGhhcmQgYXQgd29yayBvbiB0aGUgd2hpdGUga2l0dGVuLCB3aGljaCB3YXMKK2x5aW5nIHF1aXRlIHN0aWxsIGFuZCB0cnlpbmcgdG8gcHVyci0tbm8gZG91YnQgZmVlbGluZyB0aGF0IGl0IHdhcyBhbGwKK21lYW50IGZvciBpdHMgZ29vZC4KKworQnV0IHRoZSBibGFjayBraXR0ZW4gaGFkIGJlZW4gZmluaXNoZWQgd2l0aCBlYXJsaWVyIGluIHRoZSBhZnRlcm5vb24sCithbmQgc28sIHdoaWxlIEFsaWNlIHdhcyBzaXR0aW5nIGN1cmxlZCB1cCBpbiBhIGNvcm5lciBvZiB0aGUgZ3JlYXQKK2FybS1jaGFpciwgaGFsZiB0YWxraW5nIHRvIGhlcnNlbGYgYW5kIGhhbGYgYXNsZWVwLCB0aGUga2l0dGVuIGhhZCBiZWVuCitoYXZpbmcgYSBncmFuZCBnYW1lIG9mIHJvbXBzIHdpdGggdGhlIGJhbGwgb2Ygd29yc3RlZCBBbGljZSBoYWQgYmVlbgordHJ5aW5nIHRvIHdpbmQgdXAsIGFuZCBoYWQgYmVlbiByb2xsaW5nIGl0IHVwIGFuZCBkb3duIHRpbGwgaXQgaGFkIGFsbAorY29tZSB1bmRvbmUgYWdhaW47IGFuZCB0aGVyZSBpdCB3YXMsIHNwcmVhZCBvdmVyIHRoZSBoZWFydGgtcnVnLCBhbGwKK2tub3RzIGFuZCB0YW5nbGVzLCB3aXRoIHRoZSBraXR0ZW4gcnVubmluZyBhZnRlciBpdHMgb3duIHRhaWwgaW4gdGhlCittaWRkbGUuCisKKydPaCwgeW91IHdpY2tlZCBsaXR0bGUgdGhpbmchJyBjcmllZCBBbGljZSwgY2F0Y2hpbmcgdXAgdGhlIGtpdHRlbiwgYW5kCitnaXZpbmcgaXQgYSBsaXR0bGUga2lzcyB0byBtYWtlIGl0IHVuZGVyc3RhbmQgdGhhdCBpdCB3YXMgaW4gZGlzZ3JhY2UuCisnUmVhbGx5LCBEaW5haCBvdWdodCB0byBoYXZlIHRhdWdodCB5b3UgYmV0dGVyIG1hbm5lcnMhIFlvdSBPVUdIVCwKK0RpbmFoLCB5b3Uga25vdyB5b3Ugb3VnaHQhJyBzaGUgYWRkZWQsIGxvb2tpbmcgcmVwcm9hY2hmdWxseSBhdCB0aGUgb2xkCitjYXQsIGFuZCBzcGVha2luZyBpbiBhcyBjcm9zcyBhIHZvaWNlIGFzIHNoZSBjb3VsZCBtYW5hZ2UtLWFuZCB0aGVuIHNoZQorc2NyYW1ibGVkIGJhY2sgaW50byB0aGUgYXJtLWNoCisKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZDEwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNS8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWNkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTUvMTkudHh0CkBAIC0wLDAgKzEsMjggQEAKK1RIUk9VR0ggVEhFIExPT0tJTkctR0xBU1MKKworQnkgTGV3aXMgQ2Fycm9sbAorCisKK0NIQVBURVIgSS4gTG9va2luZy1HbGFzcyBob3VzZQorCitPbmUgdGhpbmcgd2FzIGNlcnRhaW4sIHRoYXQgdGhlIFdISVRFIGtpdHRlbiBoYWQgaGFkIG5vdGhpbmcgdG8gZG8gd2l0aAoraXQ6LS1pdCB3YXMgdGhlIGJsYWNrIGtpdHRlbidzIGZhdWx0IGVudGlyZWx5LiBGb3IgdGhlIHdoaXRlIGtpdHRlbiBoYWQKK2JlZW4gaGF2aW5nIGl0cyBmYWNlIHdhc2hlZCBieSB0aGUgb2xkIGNhdCBmb3IgdGhlIGxhc3QgcXVhcnRlciBvZgorYW4gaG91ciAoYW5kIGJlYXJpbmcgaXQgcHJldHR5IHdlbGwsIGNvbnNpZGVyaW5nKTsgc28geW91IHNlZSB0aGF0IGl0CitDT1VMRE4nVCBoYXZlIGhhZCBhbnkgaGFuZCBpbiB0aGUgbWlzY2hpZWYuCisKK1RoZSB3YXkgRGluYWggd2FzaGVkIGhlciBjaGlsZHJlbidzIGZhY2VzIHdhcyB0aGlzOiBmaXJzdCBzaGUgaGVsZCB0aGUKK3Bvb3IgdGhpbmcgZG93biBieSBpdHMgZWFyIHdpdGggb25lIHBhdywgYW5kIHRoZW4gd2l0aCB0aGUgb3RoZXIgcGF3IHNoZQorcnViYmVkIGl0cyBmYWNlIGFsbCBvdmVyLCB0aGUgd3Jvbmcgd2F5LCBiZWdpbm5pbmcgYXQgdGhlIG5vc2U6IGFuZAoranVzdCBub3csIGFzIEkgc2FpZCwgc2hlIHdhcyBoYXJkIGF0IHdvcmsgb24gdGhlIHdoaXRlIGtpdHRlbiwgd2hpY2ggd2FzCitseWluZyBxdWl0ZSBzdGlsbCBhbmQgdHJ5aW5nIHRvIHB1cnItLW5vIGRvdWJ0IGZlZWxpbmcgdGhhdCBpdCB3YXMgYWxsCittZWFudCBmb3IgaXRzIGdvb2QuCisKK0J1dCB0aGUgYmxhY2sga2l0dGVuIGhhZCBiZWVuIGZpbmlzaGVkIHdpdGggZWFybGllciBpbiB0aGUgYWZ0ZXJub29uLAorYW5kIHNvLCB3aGlsZSBBbGljZSB3YXMgc2l0dGluZyBjdXJsZWQgdXAgaW4gYSBjb3JuZXIgb2YgdGhlIGdyZWF0Cithcm0tY2hhaXIsIGhhbGYgdGFsa2luZyB0byBoZXJzZWxmIGFuZCBoYWxmIGFzbGVlcCwgdGhlIGtpdHRlbiBoYWQgYmVlbgoraGF2aW5nIGEgZ3JhbmQgZ2FtZSBvZiByb21wcyB3aXRoIHRoZSBiYWxsIG9mIHdvcnN0ZWQgQWxpY2UgaGFkIGJlZW4KK3RyeWluZyB0byB3aW5kIHVwLCBhbmQgaGFkIGJlZW4gcm9sbGluZyBpdCB1cCBhbmQgZG93biB0aWxsIGl0IGhhZCBhbGwKK2NvbWUgdW5kb25lIGFnYWluOyBhbmQgdGhlcmUgaXQgd2FzLCBzcHJlYWQgb3ZlciB0aGUgaGVhcnRoLXJ1ZywgYWxsCitrbm90cyBhbmQgdGFuZ2xlcywgd2l0aCB0aGUga2l0dGVuIHJ1bm5pbmcgYWZ0ZXIgaXRzIG93biB0YWlsIGluIHRoZQorbWlkZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5NWU3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTM3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMS50eHQKQEAgLTAsMCArMSBAQAorMTIzNDU2Nzg5MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiYzUyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTM3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTAudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YzYwMzliCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzExLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUzN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzExLnR4dApAQCAtMCwwICsxIEBACisxMjM0NTY3ODkwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzEyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWYzMTViMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzEyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1MzdiNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xMi50eHQKQEAgLTAsMCArMSBAQAorMTIzNDU2Nzg5MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlMDUyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTM3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTMudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NGUzMTJkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzE0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUzN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzE0LnR4dApAQCAtMCwwICsxIEBACisxMjM0NTY3ODkwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjNGVjNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzE1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxMjQ2NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8xNS50eHQKQEAgLTAsMCArMSBAQAorVEVTVApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8yLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNTczODMyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8yLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUzN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzIudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTRkN2Y4YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1MzdiNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi8zLnR4dApAQCAtMCwwICsxIEBACisxMjM0NTY3ODkwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ1ODgyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTM3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvNC50eHQKQEAgLTAsMCArMSBAQAorMTIzNDU2Nzg5MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi81LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi81LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYWY1ODE0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi81LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi81LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUzN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzUudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQyODllNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi82LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1MzdiNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi82LnR4dApAQCAtMCwwICsxIEBACisxMjM0NTY3ODkwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0YzYwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTM3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvNy50eHQKQEAgLTAsMCArMSBAQAorMTIzNDU2Nzg5MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi84LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi84LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNjE5YmUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi84LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi84LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUzN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3FyY29kZS02LzgudHh0CkBAIC0wLDAgKzEgQEAKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTc0ZTM2ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi85LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYvOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1MzdiNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNi85LnR4dApAQCAtMCwwICsxIEBACisxMjM0NTY3ODkwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS8xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWIyOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYThiMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvMS50eHQKQEAgLTAsMCArMSBAQAorMDQ0MTIzNDU2Nzg5MDkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS8yLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyODZmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS8yLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNjk0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS8yLnR4dApAQCAtMCwwICsxIEBACiswMDgyMTkzNTEwNjQyNwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyZjgxMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNjYzM2ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzMudHh0CkBAIC0wLDAgKzEgQEAKKzAwMDc1Njc4MTY0MTI1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS80LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWVlNjUzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS80LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGQyZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvNC50eHQKQEAgLTAsMCArMSBAQAorMjAwMTIzNDU2Nzg5MDkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS81LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YzI5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS81LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS81LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMTA5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMS81LnR4dApAQCAtMCwwICsxIEBACiswMDAzNDU2Nzg5MDEyNQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiNGM0NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTEvNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiYjc0MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0xLzYudHh0CkBAIC0wLDAgKzEgQEAKKzAwMDEyMzQ1Njc4OTA1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMjAzM2U4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYThiMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMS50eHQKQEAgLTAsMCArMSBAQAorMDQ0MTIzNDU2Nzg5MDkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTJhN2IwMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzEwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiNGZmMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzEwLnR4dApAQCAtMCwwICsxIEBACiswMjAwMTIzNDU2Nzg5MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNDljZmVjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzExLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGI0ZmYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTEudHh0CkBAIC0wLDAgKzEgQEAKKzAyMDAxMjM0NTY3ODkzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIwMDcwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjRmZjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xMi50eHQKQEAgLTAsMCArMSBAQAorMDIwMDEyMzQ1Njc4OTMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzIzMDZmMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzEzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiNGZmMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzEzLnR4dApAQCAtMCwwICsxIEBACiswMjAwMTIzNDU2Nzg5MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YTlkZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGI0ZmYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTQudHh0CkBAIC0wLDAgKzEgQEAKKzAyMDAxMjM0NTY3ODkzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwZjhlNjQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjRmZjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xNS50eHQKQEAgLTAsMCArMSBAQAorMDIwMDEyMzQ1Njc4OTMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTkxOTc4MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiNGZmMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE2LnR4dApAQCAtMCwwICsxIEBACiswMjAwMTIzNDU2Nzg5MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMmU3ZThmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGI0ZmYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTcudHh0CkBAIC0wLDAgKzEgQEAKKzAyMDAxMjM0NTY3ODkzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2YTU1OTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMTgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjRmZjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xOC50eHQKQEAgLTAsMCArMSBAQAorMDIwMDEyMzQ1Njc4OTMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzI0MDhlMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8xOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiNGZmMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzE5LnR4dApAQCAtMCwwICsxIEBACiswMjAwMTIzNDU2Nzg5MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2IzNDhkYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE4YjJlNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzIudHh0CkBAIC0wLDAgKzEgQEAKKzA0NDEyMzQ1Njc4OTA5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMjAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMjAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwNzVhMDcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMjAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYmI3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yMC50eHQKQEAgLTAsMCArMSBAQAorMDAwMTIzNDU2Nzg5MDUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWZiYjI3NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzIxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiYjc0MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzIxLnR4dApAQCAtMCwwICsxIEBACiswMDAxMjM0NTY3ODkwNQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzIyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzIyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNWFmZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMjIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzIyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzIyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWJiNzQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMjIudHh0CkBAIC0wLDAgKzEgQEAKKzAwMDEyMzQ1Njc4OTA1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMjMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMjMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRkYmZlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMjMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYmI3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yMy50eHQKQEAgLTAsMCArMSBAQAorMDAwMTIzNDU2Nzg5MDUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDY5ZTM3YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzI0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi8yNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiYjc0MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzI0LnR4dApAQCAtMCwwICsxIEBACiswMDAxMjM0NTY3ODkwNQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmFkZjZkNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE4YjJlNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzMudHh0CkBAIC0wLDAgKzEgQEAKKzA0NDEyMzQ1Njc4OTA5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi80LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NzAyOGE2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi80LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYThiMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvNC50eHQKQEAgLTAsMCArMSBAQAorMDQ0MTIzNDU2Nzg5MDkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi81LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmViNTI4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi81LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi81LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjRmZjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi81LnR4dApAQCAtMCwwICsxIEBACiswMjAwMTIzNDU2Nzg5MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzAwNTFiZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiNGZmMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzYudHh0CkBAIC0wLDAgKzEgQEAKKzAyMDAxMjM0NTY3ODkzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi83LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZjVkOWY4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi83LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGI0ZmYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvNy50eHQKQEAgLTAsMCArMSBAQAorMDIwMDEyMzQ1Njc4OTMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi84LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0MTJjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi84LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi84LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjRmZjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzMTQtMi84LnR4dApAQCAtMCwwICsxIEBACiswMjAwMTIzNDU2Nzg5MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2YxNjljYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIvOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiNGZmMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3MxNC0yLzkudHh0CkBAIC0wLDAgKzEgQEAKKzAyMDAxMjM0NTY3ODkzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWY2NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjM2OWIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMS50eHQKQEAgLTAsMCArMSBAQAorKDExKTEwMDIyNCgxNykxMTAyMjQoMzEwMikwMDAxMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3NTAyNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzEwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkNDIwOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzEwLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTg4OTg3NjU0MzIxMDYoMTUpOTkxMjMxKDMxMDMpMDAxNzUwKDEwKTEyQSg0MjIpMTIzKDIxKTEyMzQ1Nig0MjMpMDEyMzQ1Njc4OTAxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMTQyYTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZTJhODEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMS50eHQKQEAgLTAsMCArMSBAQAorKDAxKTk4ODk4NzY1NDMyMTA2KDE1KTk5MTIzMSgzMTAzKTAwMTc1MCgxMCkxMkEoNDIyKTEyMygyMSkxMjM0NTYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0MWVlNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzEyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhZDJkYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzEyLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTg4OTg3NjU0MzIxMDYoMzEwMykwMDE3NTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliOTM5OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzEzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzNmFhYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzEzLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzkyMik3OTUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhNDJkZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwMGUzMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE0LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzkzMikwNDAxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhY2Q3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYmZjNGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xNS50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDIpMDAxNzUwKDExKTEwMDMxMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTUzYzU5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWYyNDhkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTYudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAyKTAwMTc1MCgxMSkxMDAzMTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJkMTI3ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI0ZmM0OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE3LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzEwMikwMDE3NTAoMTMpMTAwMzEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Yzc1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTVhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xOC50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDMyMDIpMDAxNzUwKDEzKTEwMDMxMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjAyNzgwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2QxNTYxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTkudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMTAyKTAwMTc1MCgxNSkxMDAzMTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYzY3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MTEzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzEwMykwMDE3NTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxNzFlMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwODQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIwLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzIwMikwMDE3NTAoMTUpMTAwMzEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYWZlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNmIxN2IKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yMS50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDIpMDAxNzUwKDE3KTEwMDMxMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGY3NTg4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTYwNDVhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjIudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAyKTAwMTc1MCgxNykxMDAzMTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzMmY1MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZmN2UyNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIzLnR4dApAQCAtMCwwICsxIEBACisoMTApNTY3ODkoMTEpMDEwMTAxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NmE0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YjM0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yNC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTU2Nzg5MCgxMSkwMTAxMDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5M2MyZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzI1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJjMTdmMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzI1LnR4dApAQCAtMCwwICsxIEBACisoMTApMTIzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZWNhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTY2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yNi50eHQKQEAgLTAsMCArMSBAQAorKDEwKTU2NzgoMTEpMDEwMTAxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMWI0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNjNmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yNy50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTgtMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzI4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzI4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDc5YzAzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzI4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzI4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjA4ZDkyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjgudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4LzEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmYjc0MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzI5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4NjIzYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzI5LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OC4xMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzg4NDNiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzM3NjlmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMy50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEyQQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzMwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzMwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDI3ZmViCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMzAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzMwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzMwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmJmYTZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMzAudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4KjEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8zMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8zMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQzZjFmYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzMxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8zMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8zMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0MTNkNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzMxLnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OCwxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWRiM2IKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8zMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMzIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNzY2MzEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8zMi50eHQKQEAgLTAsMCArMSBAQAorKDE1KTk5MTIzMSgzMTAzKTAwMTc1MCgxMCkxMkEoNDIyKTEyMygyMSkxMjM0NTYoNDIzKTAxMjM0NTY3ODkwMTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS80LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNjljZTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS80LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS80LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODY1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS80LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTg4OTg3NjU0MzIxMDYoMzIwMikwMTIzNDUoMTUpOTkxMjMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS81LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGUyMjdhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS81LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTcwODYwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvNS50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwNjE0MTQxMDAwMDE1KDMyMDIpMDAwMTUwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS82LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGE3MWZmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS82LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGY4ODA3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvNi50eHQKQEAgLTAsMCArMSBAQAorKDEwKTU2NygwMSk5MDAxMjM0NTY3ODkwOCgxMSkwMTAxMDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS83LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NjFhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS83LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS83LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzcyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS83LnR4dApAQCAtMCwwICsxIEBACisoMTApNTY3KDExKTAxMDEwMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjZjNlYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY5ODFjZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzgudHh0CkBAIC0wLDAgKzEgQEAKKygxMCk1NjcoMTEpMDEwMTAxKDEzKTAxMDEwMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0OTFlZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjZjYzYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzkudHh0CkBAIC0wLDAgKzEgQEAKKygxMCk1NjcoMzEwMikxMjM0NTYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0MjdhNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzEyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhZDJkYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzEyLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTg4OTg3NjU0MzIxMDYoMzEwMykwMDE3NTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODllMzM0NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzEzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzNmFhYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzEzLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzkyMik3OTUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0Njg0MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzE2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmMjQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzE2LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzIwMikwMDE3NTAoMTEpMTAwMzEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMTcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYjYwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNGZjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xNy50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDIpMDAxNzUwKDEzKTEwMDMxMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzE4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTY1MDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzE4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDE1YWEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMTgudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAyKTAwMTc1MCgxMykxMDAzMTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xOGIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMThiLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzg0NDU0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMThiLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xOGIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMThiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDE1YWEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMThiLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzIwMikwMDE3NTAoMTMpMTAwMzEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMTkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMTkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDI4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMTkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMTkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZDE1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8xOS50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDIpMDAxNzUwKDE1KTEwMDMxMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzIxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzIxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2M5Njk1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMjEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzIxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzIxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZiMTdiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvMjEudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMTAyKTAwMTc1MCgxNykxMDAzMTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyN2I5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzAxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzAxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzc2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzAxLnR4dApAQCAtMCwwICsxIEBACisoMTApMTJBClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2FlMjgxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzM3NjlmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wMi50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEyQQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmMDdkNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzNzY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDMudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMkEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NTk1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzc2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA0LnR4dApAQCAtMCwwICsxIEBACisoMTApMTJBClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODlkMTBlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzM3NjlmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wNS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEyQQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiZDg2YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzNzY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDYudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMkEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZWM3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzNfMDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzc2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA3LnR4dApAQCAtMCwwICsxIEBACisoMTApMTJBClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTllYjUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi8zXzA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzM3NjlmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvM18wOS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEyQQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyNmEwYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4NjU1YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDAudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5ODg5ODc2NTQzMjEwNigzMjAyKTAxMjM0NSgxNSk5OTEyMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzZlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzAxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzAxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODY1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzAxLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTg4OTg3NjU0MzIxMDYoMzIwMikwMTIzNDUoMTUpOTkxMjMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjVmNWMzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTg2NTVjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wMi50eHQKQEAgLTAsMCArMSBAQAorKDAxKTk4ODk4NzY1NDMyMTA2KDMyMDIpMDEyMzQ1KDE1KTk5MTIzMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwMDhiNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4NjU1YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDMudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5ODg5ODc2NTQzMjEwNigzMjAyKTAxMjM0NSgxNSk5OTEyMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ODBlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzA0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzA0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzRfMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODY1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzA0LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTg4OTg3NjU0MzIxMDYoMzIwMikwMTIzNDUoMTUpOTkxMjMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWNkN2RiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMi80XzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTg2NTVjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNF8wNS50eHQKQEAgLTAsMCArMSBAQAorKDAxKTk4ODk4NzY1NDMyMTA2KDMyMDIpMDEyMzQ1KDE1KTk5MTIzMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjOWUzYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTIvNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3MDg2MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yLzUudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDYxNDE0MTAwMDAxNSgzMjAyKTAwMDE1MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwOTlhNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzMWM0ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMTAzKTAxMjIzMygxNSk5OTEyMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDFiYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmOThmZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzIwMykwMTAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmJiOGI5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzM5ZGU5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAwLnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OCAxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2ODk0YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2M2ZiMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwMS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEyMzQ1NkEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmQ4ZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzFiOTEyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAyLnR4dApAQCAtMCwwICsxIEBACisoMTApMTIzNDU2QTEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODI5ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzdhNDc2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTAzLnR4dApAQCAtMCwwICsxIEBACisoMTApMTIzNDU2QTEyMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MmY1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmVjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDQudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMjM0NTZBMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyY2YxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MDdkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDUudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMjM0NTZBMTIzNEEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTA2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2FmMGNmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTA2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTA2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlhZGNhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTA2LnR4dApAQCAtMCwwICsxIEBACisoMTApMTIzNDU2QTEyMzQ1NgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NzU4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZmRlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDcudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMjM0NTZBMTIzNDU2NzgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJmYWI2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTA4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTA4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWQwZmJkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTA4LnR4dApAQCAtMCwwICsxIEBACisoMTApMTIzNDU2QTEyMzRBKDE1KTk5MTIzMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTllNzAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzEwOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNzk2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMDkudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxQUJDREVGOzovMTIzNDU2NwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODUxMzhkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODk1YTY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTEudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAzKTAzMjc2NwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzVhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2M2I2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTAudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxQUJDREVGOzovQUJDREVGRwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOGU4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNTkzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTEudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxOzovQUJDREVGR0hJSktMTQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZmI2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNWU4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTIudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxOzovMDEyMzQ1Njc4OTAxMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZjQyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MTQ3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTMudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxOzovMDEyMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZDg5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YmU5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTQudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxOzovMDEyMygxNSk5OTEyMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTg5NDg3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTE1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTE1ODFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTE1LnR4dApAQCAtMCwwICsxIEBACisoMTApMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZjQ3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzExNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzc2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTYudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMkEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjkzYzJkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTE3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmMxN2YxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTE3LnR4dApAQCAtMCwwICsxIEBACisoMTApMTIzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjQ1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzZhYWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMi50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDM5MjIpNzk1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNzVlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjlkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xMy50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDM5MjIpNzk1ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYjM2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMDBlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xNC50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDM5MzIpMDQwMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTIzODI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY2MTk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTUudHh0CkBAIC0wLDAgKzEgQEAKKygwMSkwMDAxMjM0NTY3ODkwNSgxMClBQkMxMjMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ZGNhNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYwODQxZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE2LnR4dApAQCAtMCwwICsxIEBACisoMDEpMTIzNDU2Nzg5MDEyMzEoMTApVU5JVkVSU0lUWS1PRi1ERVVTVE8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4MDljMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmZGE5OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE3LnR4dApAQCAtMCwwICsxIEBACisoMDEpMTIzNDU2Nzg5MDEyMzEoMTApUElSQU1JREUtUFJPSkVDVApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjMxN2YxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTIwMzI0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMTgudHh0CkBAIC0wLDAgKzEgQEAKKygwMSkxMjM0NTY3ODkwMTIzMSgxMClUUkVFTE9HSUMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlY2E0YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8xOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5NjZlZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzE5LnR4dApAQCAtMCwwICsxIEBACisoMTApNTY3OCgxMSkwMTAxMDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMzEzNzMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZjBhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTEyMzQ1Njc5ODAxMjkoMzEwMykwMTIyMzMoMTUpOTkxMjMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZjdhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NDg2NDgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yMC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTU2NzgoMTEpMDAxMDEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NmE0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YjM0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yMS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTU2Nzg5MCgxMSkwMTAxMDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5ZjQxZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzIyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThjNzI2OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzIyLnR4dApAQCAtMCwwICsxIEBACisoMTApNTY3KDExKTAxMDEwMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzIzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzIzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTFiNDkxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzIzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzIzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjYzZjdmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjMudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4LTEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQzZjFmYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0MTNkNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI0LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OCwxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNzljMDMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMDhkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yNS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTgvMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmZiNzQyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzg2MjNhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjYudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4LjEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyN2ZlYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiZmE2YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI3LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OCoxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMDA4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjNkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8yOC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOThhMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg4YjY0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzI5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWZjNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMjkudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4ITEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NTI3ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOTNjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTEyMzQ1Njc5ODAxMjkoMzEwMikwMTIyMzMoMTUpOTkxMjMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YWVhODAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDk1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zMC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTgiMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzMxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzMxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmEwNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzMxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzMxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2JmNzgxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzEudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4JTEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0ZDFhMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzMyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxZDM1MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzMyLnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OCYxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwM2VhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMGM2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zMy50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTgnMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmJjMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGI5MGVjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzQudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4KzEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRiYTdmMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmOTA0OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM1LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5ODoxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMTc1NWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDg0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zNi50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTg7MTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDBmYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjRhNmRiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzcudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4PDEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2Y2Q1ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjYzYwNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzM4LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OD0xMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOTAyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvMzkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNDVlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy8zOS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTg+MTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlMWI1ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhNzI2YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MTIzNDU2Nzk4MDEyOSgzMTAyKTAxMjIzMygxNSkwMDAxMDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80MC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlZmI0YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80MC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxNTJkZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQwLnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OD8xMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYmVjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80MS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZDFiMjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80MS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOThfMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGJmZTAzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzM5ZGU5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDIudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4IDEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80My5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80My5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIyYTBhNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80My50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80My50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2M2ZiMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQzLnR4dApAQCAtMCwwICsxIEBACisoMTApMTIzNDU2QQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWNiOTljCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTJlYzQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDQudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMjM0NTZBMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYThlYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjA3ZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDUudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMjM0NTZBMTIzNEEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80Ni5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80Ni5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5YTFiMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80Ni50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80Ni50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5YWRjYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ2LnR4dApAQCAtMCwwICsxIEBACisoMTApMTIzNDU2QTEyMzQ1NgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTkwMmQwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmZkZTVkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNDcudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMjM0NTZBMTIzNDU2NzgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80OC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80OC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2MzAwYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80OC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80OC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM3OTYxNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ4LnR4dApAQCAtMCwwICsxIEBACisoMTApMUFCQ0RFRjs6LzEyMzQ1NjcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80OS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80OS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwMGVhMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80OS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy80OS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzYjY0YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzQ5LnR4dApAQCAtMCwwICsxIEBACisoMTApMUFCQ0RFRjs6L0FCQ0RFRkcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0N2E1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MTEzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzEwMykwMDE3NTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81MC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhkNWRhYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzUwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81MC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1OTMyOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzUwLnR4dApAQCAtMCwwICsxIEBACisoMTApMTs6L0FCQ0RFRkdISUpLTE0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81MS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81MS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBmZDVhYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzUxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81MS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1ZTg0ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzUxLnR4dApAQCAtMCwwICsxIEBACisoMTApMTs6LzAxMjM0NTY3ODkwMTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81Mi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81Mi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3YTk3MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzUyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81Mi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81Mi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxNDc2NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzUyLnR4dApAQCAtMCwwICsxIEBACisoMTApMTs6LzAxMjMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81My5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81My5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxNjE2MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzUzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81My50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81My50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiZTlmMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzUzLnR4dApAQCAtMCwwICsxIEBACisoMTApMTs6LzAxMjMoMTUpOTkxMjMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NDBlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81NC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMzFjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81NC50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDMpMDEyMjMzKDE1KTk5MTIzMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjE0ZmJjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2YwYTZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTUudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MTIzNDU2Nzk4MDEyOSgzMTAzKTAxMjIzMygxNSk5OTEyMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81Ni5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81Ni5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxYTliMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81Ni50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81Ni50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5M2M5NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU2LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTEyMzQ1Njc5ODAxMjkoMzEwMikwMTIyMzMoMTUpOTkxMjMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMGJlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81Ny5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTcyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy81Ny50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkxMjM0NTY3OTgwMTI5KDMxMDIpMDEyMjMzKDE1KTAwMDEwMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDhhMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDExM2FjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTgudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMTAzKTAwMTc1MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2JjNmRlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzU5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2EyYzY0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNTkudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MjEwOTg3NjU0MzIxMygzMTAzKTAzMjc2NwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjZjM0NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhMmM2NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MjEwOTg3NjU0MzIxMygzMTAzKTAzMjc2NwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTVlNGRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmE0MTc3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjAudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MjEwOTg3NjU0MzIxMygzMTAzKTAwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWUyYmI3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGRhN2ZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjEudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAyKTAwMDE1NgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzE2MjA0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWFmNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjIudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAyKTAwOTk5OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmVmOTc4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzYzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGY5OGZlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjMudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAzKTAxMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njg2MWFlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODk1YTY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjQudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAzKTAzMjc2NwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWI5Mzk4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDM2YWFiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjUudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzOTIyKTc5NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWM5NWIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDI5ZDkzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjYudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzOTIyKTc5NTg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2E0MmRlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjAwZTMxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNjcudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzOTMyKTA0MDEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy82OC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy82OC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2MTc4OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy82OC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy82OC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmM2ZlOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY4LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzkzMikwNDBFVVIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy82OS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy82OS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkwMjkwYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy82OS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy82OS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk1YmM4ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzY5LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzkzMikwNDA1NUdCUApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2OTE4ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhNDE3NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MjEwOTg3NjU0MzIxMygzMTAzKTAwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2QyMTI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M2Y2IzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzAudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzOTMyKTA0MDY2VVNENzc4ODk5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNTM5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy83MS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjYxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy83MS50eHQKQEAgLTAsMCArMSBAQAorKDAxKTAwMDEyMzQ1Njc4OTA1KDEwKUFCQzEyMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDVmYTJhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzcyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjA4NDFmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzIudHh0CkBAIC0wLDAgKzEgQEAKKygwMSkxMjM0NTY3ODkwMTIzMSgxMClVTklWRVJTSVRZLU9GLURFVVNUTwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzczLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzczLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjMyNDExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzczLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzczLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWZkYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzMudHh0CkBAIC0wLDAgKzEgQEAKKygwMSkxMjM0NTY3ODkwMTIzMSgxMClQSVJBTUlERS1QUk9KRUNUClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzkzNmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy83NC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMjAzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy83NC50eHQKQEAgLTAsMCArMSBAQAorKDAxKTEyMzQ1Njc4OTAxMjMxKDEwKVRSRUVMT0dJQwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjc1MDI3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWQ0MjA4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzUudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5ODg5ODc2NTQzMjEwNigxNSk5OTEyMzEoMzEwMykwMDE3NTAoMTApMTJBKDQyMikxMjMoMjEpMTIzNDU2KDQyMykwMTIzNDU2Nzg5MDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy83Ni5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy83Ni5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlZGIzYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy83Ni50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy83Ni50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU3NjYzMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc2LnR4dApAQCAtMCwwICsxIEBACisoMTUpOTkxMjMxKDMxMDMpMDAxNzUwKDEwKTEyQSg0MjIpMTIzKDIxKTEyMzQ1Nig0MjMpMDEyMzQ1Njc4OTAxMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWFjNjIyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzk2NmVlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzcudHh0CkBAIC0wLDAgKzEgQEAKKygxMCk1Njc4KDExKTAxMDEwMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjNlMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTQ4NjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzgudHh0CkBAIC0wLDAgKzEgQEAKKygxMCk1Njc4KDExKTAwMTAxMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTZiZjRkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzc5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2IzNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvNzkudHh0CkBAIC0wLDAgKzEgQEAKKygxMCk1Njc4OTAoMTEpMDEwMTAxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTU1NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGRhN2ZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOC50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDMyMDIpMDAwMTU2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NjFhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzcyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84MC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTU2NygxMSkwMTAxMDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84MS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84MS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwZDgyMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzgxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84MS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2M2Y3ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzgxLnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OC0xMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWUwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84Mi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NDEzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84Mi50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTgsMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzgzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzgzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmNiNThmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzgzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzgzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjA4ZDkyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODMudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4LzEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84NC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84NC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlM2QzYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84NC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4NjIzYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg0LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OC4xMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMDNiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84NS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYmZhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84NS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTgqMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmM0ODVhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjYzZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODYudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4YTEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84Ny5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84Ny5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1ZjgxMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84Ny50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84Ny50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmYzUyOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg3LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OCExMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNDYzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84OC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDk1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy84OC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTgiMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZmOTMyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzg5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2JmNzgxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvODkudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4JTEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5Yzg3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYWY0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzIwMikwMDk5OTkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85MC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyMzAwYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzkwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85MC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxZDM1MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzkwLnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OCYxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OTk0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85MS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMGM2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85MS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTgnMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzkyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzkyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWU5Zjk5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzkyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzkyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGI5MGVjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTIudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4KzEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85My5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85My5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0YjdmZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzkzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85My50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85My50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmOTA0OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzkzLnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5ODoxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNWIzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85NC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDg0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85NC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTg7MTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzYzYzcwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjRhNmRiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTUudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4PDEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85Ni5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85Ni5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiOGFjNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85Ni50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85Ni50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjYzYwNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk2LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OD0xMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNjU3MmEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85Ny5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNDVlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85Ny50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTg+MTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjBjZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTE1MmRlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvOTgudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4PzEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85OS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85OS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljZTBmMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85OS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy85OS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkMWIyOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zLzk5LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OF8xMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvZ2VuZXJhdGUucHkgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy9nZW5lcmF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWMwNWM0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvZ2VuZXJhdGUucHkKQEAgLTAsMCArMSwxMjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBnbG9iCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCB1cmxsaWIyCisKK1pJTlQgPSAnemludCcKK1pJTlRfUlNTX0VYUEFOREVEX0NPREUgPSAzMQorWklOVF9CSU5BUlkgPSAiemludCIgIyBJZiBhdmFpbGFibGUgaW4gUEFUSAorCitQT1NUU0NSSVBUID0gJ3Bvc3RzY3JpcHQnCisKK1RFU1RfRklMRSA9ICIuLi8uLi8uLi9zcmMvY29tL2dvb2dsZS96eGluZy9vbmVkL3Jzcy9SU1NFeHBhbmRlZEJsYWNrQm94M1Rlc3RDYXNlLmphdmEiCisKK2RlZiBjaGVja196aW50KCk6CisgICAgdHJ5OgorICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKCJ6aW50Iiwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICBleGNlcHQ6CisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJ6aW50IG5vdCBpbnN0YWxsZWQuIEdvIHRvIGh0dHA6Ly93d3cuemludC5vcmcudWsvIGFuZCBpbnN0YWxsIGl0IgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgY2hlY2tfcG9zdHNjcmlwdCgpOgorICAgIHJldHVybiBUcnVlCisKK0dFTkVSQVRPUlMgPSBbXQoraWYgY2hlY2tfemludCgpOgorICAgIEdFTkVSQVRPUlMuYXBwZW5kKFpJTlQpCitpZiBjaGVja19wb3N0c2NyaXB0KCk6CisgICAgR0VORVJBVE9SUy5hcHBlbmQoUE9TVFNDUklQVCkKKworZGVmIGdlbmVyYXRlX2ltYWdlX3ppbnQoaW1hZ2VfZmlsZW5hbWUsIGJhcmNvZGUpOgorICAgIGJyYWNlc19iYXJjb2RlID0gYmFyY29kZS5yZXBsYWNlKCIoIiwiWyIpLnJlcGxhY2UoIikiLCJdIikKKyAgICBvcy5zeXN0ZW0oJyVzIC1vICVzIC1iICVzIC1kICIlcyInICUgKFpJTlRfQklOQVJZLCBpbWFnZV9maWxlbmFtZSwgWklOVF9SU1NfRVhQQU5ERURfQ09ERSwgYnJhY2VzX2JhcmNvZGUucmVwbGFjZSgnIicsJ1xcIicpKSkKKworZGVmIGdlbmVyYXRlX2ltYWdlX3Bvc3RzY3JpcHQoaW1hZ2VfZmlsZW5hbWUsIGJhcmNvZGUpOgorICAgIGhhc2huYW1lID0gImNhY2hlLyVzLnBuZyIgJSBoYXNobGliLm5ldygibWQ1IiwgYmFyY29kZSkuaGV4ZGlnZXN0KCkKKyAgICAjIElmIGl0IGV4aXN0cyBpbiB0aGUgY2FjaGUsIGRvbid0IGRvd25sb2FkIGl0CisgICAgaWYgb3MucGF0aC5leGlzdHMoaGFzaG5hbWUpOgorICAgICAgICBjb250ZW50ID0gb3BlbihoYXNobmFtZSkucmVhZCgpCisgICAgICAgIG9wZW4oaW1hZ2VfZmlsZW5hbWUsJ3cnKS53cml0ZShjb250ZW50KQorICAgICAgICByZXR1cm4KKworICAgICMgV2UgdHJpZWQgdXNlIHRoZSBQeXRob24sIFBlcmwgYW5kIExhVGVYIGJpbmRpbmdzIHdpdGhvdXQgc3VjY2VzcyA6LSgKKyAgICBiYXNldXJsID0gImh0dHA6Ly93d3cudGVycnlidXJ0b24uY28udWsvYmFyY29kZXdyaXRlci9nZW5lcmF0b3IvIgorICAgIGVuY29kZWQgPSB1cmxsaWIudXJsZW5jb2RlKHsKKyAgICAgICAgICAgICAiZW5jb2RlciIgICAgIDogInJzc2V4cGFuZGVkIiwKKyAgICAgICAgICAgICAiZGF0YSIgICAgICAgIDogYmFyY29kZSwKKyAgICAgICAgICAgICAib3B0aW9ucyIgICAgIDogIiIsCisgICAgICAgICAgICAgInRyYW5zbGF0ZV94IiA6ICI1MCIsICJ0cmFuc2xhdGVfeSIgOiAiNTAiLAorICAgICAgICAgICAgICJzY2FsZV94IiAgICAgOiAiMiIsICJzY2FsZV95IiAgICAgOiAiMiIsCisgICAgICAgICAgICAgInJvdGF0ZSIgICAgICA6ICIwIiwgInN1Ym1pdCIgICAgICA6ICJNYWtlIEJhcmNvZGUiCisgICAgICAgICB9KQorICAgIHdlYl91cmxvYmplY3QgPSB1cmxsaWIyLnVybG9wZW4oYmFzZXVybCwgZGF0YSA9IGVuY29kZWQpCisgICAgd2ViX2NvbnRlbnQgICA9IHdlYl91cmxvYmplY3QucmVhZCgpCisgICAgcG5nX3VybCAgICAgICA9IHdlYl9jb250ZW50LnNwbGl0KCciPlBORzwvYT4nKVswXS5zcGxpdCgnPGEgaHJlZj0iJylbLTFdCisgICAgaWYgbm90IHBuZ191cmwuc3RhcnRzd2l0aCgidG1wIik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGhlcmUgd2FzIGFuIGVycm9yIHByb2Nlc3NpbmcgYmFyY29kZSAlcyBpbiBwb3N0c2NyaXB0IiAlIGJhcmNvZGUpCisgICAgZnVsbF91cmwgICAgICA9IGJhc2V1cmwgKyBwbmdfdXJsCisgICAgcG5nX2NvbnRlbnQgICA9IHVybGxpYjIudXJsb3BlbihmdWxsX3VybCkucmVhZCgpCisgICAgb3BlbihoYXNobmFtZSwndycpLndyaXRlKHBuZ19jb250ZW50KQorICAgIG9wZW4oaW1hZ2VfZmlsZW5hbWUsJ3cnKS53cml0ZShwbmdfY29udGVudCkKKworZGVmIGdlbmVyYXRlX2ltYWdlKGltYWdlX2ZpbGVuYW1lLCBiYXJjb2RlLCBnZW5lcmF0b3IpOgorICAgIGlmIGdlbmVyYXRvciA9PSBaSU5UOgorICAgICAgICBnZW5lcmF0ZV9pbWFnZV96aW50KGltYWdlX2ZpbGVuYW1lLCBiYXJjb2RlKQorICAgIGVsaWYgZ2VuZXJhdG9yID09IFBPU1RTQ1JJUFQ6CisgICAgICAgIGdlbmVyYXRlX2ltYWdlX3Bvc3RzY3JpcHQoaW1hZ2VfZmlsZW5hbWUsIGJhcmNvZGUpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIGdlbmVyYXRvcjogJXMiICUgZ2VuZXJhdG9yKQorCitkZWYgZXh0cmFjdF9iYXJjb2RlcygpOgorICAgIGZvciBsaW5lIGluIG9wZW4oImdlbmVyYXRpb24uY29uZmlnIik6CisgICAgICAgIGNvbnRlbnQgPSBsaW5lLnNwbGl0KCIjIilbMF0uc3RyaXAoKQorICAgICAgICBpZiBjb250ZW50ICE9ICIiOgorICAgICAgICAgICAgaWYgY29udGVudFswXSA9PSAnLSc6CisgICAgICAgICAgICAgICAgcG9zID0gY29udGVudFsxOl0uZmluZCgnLScpCisgICAgICAgICAgICAgICAgZXhjZXB0aW9ucyA9IGNvbnRlbnRbMTpwb3MrMV0uc3BsaXQoIiwiKQorICAgICAgICAgICAgICAgIGJhcmNvZGUgPSBjb250ZW50W3BvcyArIDI6XQorICAgICAgICAgICAgICAgIHlpZWxkIGV4Y2VwdGlvbnMsIGJhcmNvZGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgKCksIGNvbnRlbnQKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBjb3VudGVyID0gMAorCisgICAgZm9yIGltYWdlX3RvX2RlbGV0ZSBpbiBnbG9iLmdsb2IoIioucG5nIik6CisgICAgICAgIG9zLnJlbW92ZShpbWFnZV90b19kZWxldGUpCisKKyAgICBmb3IgdGV4dF90b19kZWxldGUgaW4gZ2xvYi5nbG9iKCIqLnR4dCIpOgorICAgICAgICBvcy5yZW1vdmUodGV4dF90b19kZWxldGUpCisKKyAgICBmb3IgZ2VuZXJhdG9yIGluIEdFTkVSQVRPUlM6CisgICAgICAgIGZvciBleGNlcHRpb25zLCBiYXJjb2RlIGluIGV4dHJhY3RfYmFyY29kZXMoKToKKyAgICAgICAgICAgIGlmIGdlbmVyYXRvciBpbiBleGNlcHRpb25zOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY291bnRlciArPSAxCisgICAgICAgICAgICAgICAgaW1hZ2VfZmlsZW5hbWUgPSBzdHIoY291bnRlcikgKyAiLnBuZyIKKyAgICAgICAgICAgICAgICB0ZXh0X2ZpbGVuYW1lICA9IHN0cihjb3VudGVyKSArICIudHh0IgorICAgICAgICAgICAgICAgIG9wZW4odGV4dF9maWxlbmFtZSwgInciKS53cml0ZShiYXJjb2RlKQorICAgICAgICAgICAgICAgIGdlbmVyYXRlX2ltYWdlKGltYWdlX2ZpbGVuYW1lLCBiYXJjb2RlLCBnZW5lcmF0b3IpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHByaW50ICJFcnJvciB3aXRoIGdlbmVyYXRvciAlcyBhbmQgYmFyY29kZSAlcyIgJSAoZ2VuZXJhdG9yLCBiYXJjb2RlKQorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgICAgIGNvdW50ZXIgLT0gMQorCisgICAgb3BlbihURVNUX0ZJTEUsJ3cnKS53cml0ZSgiIiJwYWNrYWdlIGNvbS5nb29nbGUuenhpbmcub25lZC5yc3M7CisKK2ltcG9ydCBjb20uZ29vZ2xlLnp4aW5nLkJhcmNvZGVGb3JtYXQ7CitpbXBvcnQgY29tLmdvb2dsZS56eGluZy5NdWx0aUZvcm1hdFJlYWRlcjsKK2ltcG9ydCBjb20uZ29vZ2xlLnp4aW5nLmNvbW1vbi5BYnN0cmFjdEJsYWNrQm94VGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBSU1NFeHBhbmRlZEJsYWNrQm94M1Rlc3RDYXNlIGV4dGVuZHMgQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlIHsKKyAgICAKKyAgICBwdWJsaWMgUlNTRXhwYW5kZWRCbGFja0JveDNUZXN0Q2FzZSgpIHsKKyAgICAgICAgc3VwZXIoInRlc3QvZGF0YS9ibGFja2JveC9yc3NleHBhbmRlZC0zIiwgbmV3IE11bHRpRm9ybWF0UmVhZGVyKCksIEJhcmNvZGVGb3JtYXQuUlNTX0VYUEFOREVEKTsKKyAgICAgICAgYWRkVGVzdCglKG51bWJlcilzLCAlKG51bWJlcilzLCAwLjBmKTsKKyAgICAgICAgYWRkVGVzdCglKG51bWJlcilzLCAlKG51bWJlcilzLCAxODAuMGYpOworICAgIH0KK30KKyAgICAiIiIgJSB7Im51bWJlciIgOiBjb3VudGVyfSkKKwpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvZ2VuZXJhdGlvbi5jb25maWcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMy9nZW5lcmF0aW9uLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTk3M2EzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTMvZ2VuZXJhdGlvbi5jb25maWcKQEAgLTAsMCArMSwxMjcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIAorIyBQbGFjZSBjb2RlcyBpbiB0aGlzIGZpbGUsIGFuZCB0aGV5IHdpbGwgYmUgYXV0b21hdGljYWxseQorIyBnZW5lcmF0ZWQgYnkgImdlbmVyYXRlLnB5Ii4gRXZlcnl0aGluZyBwbGFjZWQgYWZ0ZXIgYSAiIyIKKyMgd2lsbCBiZSBpZ25vcmVkLCBhcyB3ZWxsIGFzIGV2ZXJ5IHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgCisjIHRoZSBjb2RlcyBhbmQgZW1wdHkgbGluZXMuCisjIAorIyBJZiBhIGdlbmVyYXRvciBjYW4ndCBnZW5lcmF0ZSBhIGNvZGUsIHRoZW4gcGxhY2U6IAorIyAtTElCUkFSWS0uIEZvciBleGFtcGxlLCBpZiB6aW50IGRvZXNuJ3Qgc3VwcG9ydCBhIGNvZGUsCisjIHBsYWNlIC16aW50LS4gSWYgbmVpdGhlciB6aW50IG9yIHBvc3RzY3JpcHQgc3VwcG9ydCBpdCwKKyMgcGxhY2UgLXppbnQscG9zdHNjcmlwdC0uIAorIyAKKyMgCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRml4ZWQgbGVuZ3RoIGV4YW1wbGVzCisKKyMgRW5jb2RhdGlvbiAwMTExMDAwIC0gMDExMTExMQorCisoMDEpOTAwMTIzNDU2Nzg5MDgoMzEwMykwMTIyMzMoMTUpOTkxMjMxICAjIEV4YW1wbGUgdGFrZW4gZnJvbSA3LjIuNS40LjQKKygwMSk5MTIzNDU2Nzk4MDEyOSgzMTAzKTAxMjIzMygxNSk5OTEyMzEgICMgVGVzdGluZyB3aXRoIG90aGVyIEFJCisoMDEpOTEyMzQ1Njc5ODAxMjkoMzEwMikwMTIyMzMoMTUpOTkxMjMxICAjIFRlc3Rpbmcgd2l0aCAzMTAyIGluc3RlYWQgb2YgMzEwMworKDAxKTkxMjM0NTY3OTgwMTI5KDMxMDIpMDEyMjMzKDE1KTAwMDEwMSAgIyBKYW51YXJ5IDFzdCwgMjAwMAorCisjIEVuY29kYXRpb24gMDEwMAorCisoMDEpOTAwMTIzNDU2Nzg5MDgoMzEwMykwMDE3NTAgICMgRXhhbXBsZSB0YWtlbiBmcm9tIDcuMi41LjQuMgorKDAxKTkyMTA5ODc2NTQzMjEzKDMxMDMpMDMyNzY3ICAjIE1heGltdW0gd2VpZ2h0IHZhbHVlCisoMDEpOTIxMDk4NzY1NDMyMTMoMzEwMykwMDAwMDAgICMgTWluaW11bSB3ZWlnaHQgdmFsdWUKKworIyBFbmNvZGF0aW9uIDAxMDEKKworKDAxKTkwMDEyMzQ1Njc4OTA4KDMyMDIpMDAwMTU2ICAjIEV4YW1wbGUgdGFrZW4gZnJvbSA3LjIuNS40LjMKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAyKTAwOTk5OSAgIyA5LDk5OSBoYXMgYSBkaWZmZXJlbnQgYmVoYXZpb3VyIHRoYW4gMTAsMDAwCisoMDEpOTAwMTIzNDU2Nzg5MDgoMzIwMykwMTAwMDAgICMgMTAsMDAwIGhhcyBhIGRpZmZlcmVudCBiZWhhdmlvdXIgdGhhbiA5LDk5OQorKDAxKTkwMDEyMzQ1Njc4OTA4KDMyMDMpMDMyNzY3ICAjIDEwLDAwMCBoYXMgYSBkaWZmZXJlbnQgYmVoYXZpb3VyIHRoYW4gOSw5OTkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBWYXJpYWJsZSBsZW5ndGggZXhhbXBsZXMKKworIyBFbmNvZGF0aW9uIDAxMTAwCisKKygwMSk5MDAxMjM0NTY3ODkwOCgzOTIyKTc5NSAgICAjIEV4YW1wbGUgdGFrZW4gZnJvbSA3LjIuNS40LjUKKygwMSk5MDAxMjM0NTY3ODkwOCgzOTIyKTc5NTg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OCAgIyBMb25nZXIgaW5mb3JtYXRpb24gCisKKyMgRW5jb2RhdGlvbiAwMTEwMSAKKworKDAxKTkwMDEyMzQ1Njc4OTA4KDM5MzIpMDQwMTIzNCAgICAgICAgICMgRXhhbXBsZSB0YWtlbiBmcm9tIDcuMi41LjQuNgorCisjIFRoZXNlIHRocmVlIGV4YW1wbGVzIGRvbid0IHdvcmsgZHVlIHRvIGEgYnVnIGluIHppbnQuIEl0IGhhcyBiZWVuIHJlcG9ydGVkLgorIyBIb3dldmVyLCB0aGV5IHdvcmsgd2l0aCBodHRwOi8vd3d3LnRlcnJ5YnVydG9uLmNvLnVrL2JhcmNvZGV3cml0ZXIvZ2VuZXJhdG9yLworIyAKKy16aW50LSgwMSk5MDAxMjM0NTY3ODkwOCgzOTMyKTA0MEVVUiAgICAgICAgICAjIFRlc3Rpbmcgd2l0aCBhbHBoYW51bWVyaWMgaW5zdGVhZCBvZiBudW1lcmljCistemludC0oMDEpOTAwMTIzNDU2Nzg5MDgoMzkzMikwNDA1NUdCUCAgICAgICAgIyBUZXN0aW5nIHdpdGggbnVtZXJpYyArIGFscGhhbnVtZXJpYyBpbnN0ZWFkIG9mIG9ubHkgbnVtZXJpYworLXppbnQtKDAxKTkwMDEyMzQ1Njc4OTA4KDM5MzIpMDQwNjZVU0Q3Nzg4OTkgICMgVGVzdGluZyB3aXRoIG51bWVyaWMgKyBhbHBoYW51bWVyaWMgKyBudW1lcmljIGluc3RlYWQgb2Ygb25seSBudW1lcmljCisKKyMgRW5jb2RhdGlvbiAxCisKKygwMSkwMDAxMjM0NTY3ODkwNSgxMClBQkMxMjMgICAgICAgICAgICAgICAjIEV4YW1wbGUgdGFrZW4gZnJvbSA3LjIuNS40LjEKKygwMSkxMjM0NTY3ODkwMTIzMSgxMClVTklWRVJTSVRZLU9GLURFVVNUTyAjIEFkZGluZyBvdGhlciB0eXBlIG9mIGluZm9ybWF0aW9uIAorKDAxKTEyMzQ1Njc4OTAxMjMxKDEwKVBJUkFNSURFLVBST0pFQ1QgICAgICMgQWRkaW5nIG90aGVyIHR5cGUgb2YgaW5mb3JtYXRpb24KKygwMSkxMjM0NTY3ODkwMTIzMSgxMClUUkVFTE9HSUMgICAgICAgICAgICAjIEFkZGluZyBvdGhlciB0eXBlIG9mIGluZm9ybWF0aW9uCisKKyMgCisjIFppbnQgZG9lc24ndCBzdXBwb3J0IHRoaXMgb25lIGJlY2F1c2UgYWZ0ZXIgMTJBIChhbHBoYW51bWVyaWMpIGl0IGdvZXMgYmFjayB0byBudW1lcmljIHdpdGhvdXQgYSBhbHBoYSB0byBudW1lcmljIGxhdGNoCistemludC0oMDEpOTg4OTg3NjU0MzIxMDYoMTUpOTkxMjMxKDMxMDMpMDAxNzUwKDEwKTEyQSg0MjIpMTIzKDIxKTEyMzQ1Nig0MjMpMDEyMzQ1Njc4OTAxICMgQWRkaW5nIGEgbG90IG9mIGluZm9ybWF0aW9uCisKKyMgRW5jb2RhdGlvbiAwMAorCisjICMgWmludCBkb2Vzbid0IHN1cHBvcnQgdGhpcyBvbmUgYmVjYXVzZSBhZnRlciAxMkEgKGFscGhhbnVtZXJpYykgaXQgZ29lcyBiYWNrIHRvIG51bWVyaWMgd2l0aG91dCBhIGFscGhhIHRvIG51bWVyaWMgbGF0Y2gKKy16aW50LSgxNSk5OTEyMzEoMzEwMykwMDE3NTAoMTApMTJBKDQyMikxMjMoMjEpMTIzNDU2KDQyMykwMTIzNDU2Nzg5MDEyICMgQWRkaW5nIGEgbG90IG9mIGluZm9ybWF0aW9uCisoMTApNTY3OCgxMSkwMTAxMDEgIyBUaGlzIG9uZSBvcHRpbWl6ZXMgdGhlIGxhc3QgNCBiaXRzIGFzIGRldGFpbGVkIGluIHRoZSBlbmQgb2YgNy4yLjUuNS4xIAorKDEwKTU2NzgoMTEpMDAxMDEwCisoMTApNTY3ODkwKDExKTAxMDEwMQorKDEwKTU2NygxMSkwMTAxMDEKKworCisjIE90aGVyIHRlc3RzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzLCBzdWNoIGFzOiAnKicsJywnLCctJywnLycsJy4nLCAKKyMgYW5kIElTTy9JRUM2NDYgZW5jb2RhdGlvbiBjaGFyYWN0ZXJzCisoMTApMTA5OC0xMjM0CisoMTApMTA5OCwxMjM0CisoMTApMTA5OC8xMjM0CisoMTApMTA5OC4xMjM0CisoMTApMTA5OCoxMjM0CisoMTApMTA5OGExMjM0CisoMTApMTA5OCExMjM0CisoMTApMTA5OCIxMjM0CisoMTApMTA5OCUxMjM0CisoMTApMTA5OCYxMjM0CisoMTApMTA5OCcxMjM0CisoMTApMTA5OCsxMjM0CisoMTApMTA5ODoxMjM0CisoMTApMTA5ODsxMjM0CisoMTApMTA5ODwxMjM0CisoMTApMTA5OD0xMjM0CisoMTApMTA5OD4xMjM0CisoMTApMTA5OD8xMjM0CisoMTApMTA5OF8xMjM0CisoMTApMTA5OCAxMjM0CisKKyMgVGVzdGluZyB0cmFuc2l0aW9ucworCisoMTApMTIzNDU2QSAgICAgICAgICAgICAgICAjIG51bWVyaWMgLT4gYWxwaGEKKy16aW50LSgxMCkxMjM0NTZBMSAgICAgICAgICMgbnVtZXJpYyAtPiBhbHBoYQorLXppbnQtKDEwKTEyMzQ1NkExMjMgICAgICAgIyBudW1lcmljIC0+IGFscGhhCisoMTApMTIzNDU2QTEyMzQgICAgICAgICAgICAjIG51bWVyaWMgLT4gYWxwaGEgLT4gbnVtZXJpYworKDEwKTEyMzQ1NkExMjM0QSAgICAgICAgICAgIyBudW1lcmljIC0+IGFscGhhCisoMTApMTIzNDU2QTEyMzQ1NiAgICAgICAgICAjIG51bWVyaWMgLT4gYWxwaGEgLT4gbnVtZXJpYworKDEwKTEyMzQ1NkExMjM0NTY3OCAgICAgICAgIyBudW1lcmljIC0+IGFscGhhIC0+IG51bWVyaWMKKy16aW50LSgxMCkxMjM0NTZBMTIzNEEoMTUpOTkxMjMxICMgbnVtZXJpYyAtPiBhbHBoYSAtPiBGTkMxCisKKygxMCkxQUJDREVGOzovMTIzNDU2NyAjIG51bWVyaWMgLT4gYWxwaGEgLT4gNjQ2IC0+IG51bWVyaWMKKygxMCkxQUJDREVGOzovQUJDREVGRyAjIG51bWVyaWMgLT4gYWxwaGEgLT4gNjQ2IC0+IGFscGhhCisKKygxMCkxOzovQUJDREVGR0hJSktMTSAjIG51bWVyaWMgLT4gNjQ2IC0+IGFscGhhCisoMTApMTs6LzAxMjM0NTY3ODkwMTIgIyBudW1lcmljIC0+IDY0NiAtPiBudW1lcmljCisoMTApMTs6LzAxMjMgICAgICAgICAgIyBudW1lcmljIC0+IDY0NgorKDEwKTE7Oi8wMTIzKDE1KTk5MTIzMSAjIG51bWVyaWMgLT4gNjQ2IC0+IEZOQzEgbnVtZXJpYworCisjIEFub3RoZXIgdGVzdHMsIGZyb20gNy4yLjUuNS4yCistemludC0oMTApMQorCisjIEFub3RoZXIgYnVnIGluIHppbnQsIGl0IHdvcmtzIHdpdGggaHR0cDovL3d3dy50ZXJyeWJ1cnRvbi5jby51ay9iYXJjb2Rld3JpdGVyL2dlbmVyYXRvci8KKy16aW50LSgxMCkxMkEKKyMgQW5vdGhlciBidWcgaW4gemludCwgaXQgd29ya3Mgd2l0aCB0aGUgaHR0cDovL3d3dy50ZXJyeWJ1cnRvbi5jby51ay9iYXJjb2Rld3JpdGVyL2dlbmVyYXRvci8KKy16aW50LSgxMCkxMjMKKwpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMzJiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMzFjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMS50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDMpMDEyMjMzKDE1KTk5MTIzMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYzQzODYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Zjk4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTAudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAzKTAxMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzODFlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OTVhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTEudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAzKTAzMjc2NwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOGM1ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzZhYWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTIudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzOTIyKTc5NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODE2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjlkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTMudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzOTIyKTc5NTg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNGYyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMDBlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTQudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzOTMyKTA0MDEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTNlYzQxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzE1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWYzZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzE1LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzkzMikwNDBFVVIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjI1ZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzE2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTViYzhkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzE2LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTAwMTIzNDU2Nzg5MDgoMzkzMikwNDA1NUdCUApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMWY3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzZjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTcudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzOTMyKTA0MDY2VVNENzc4ODk5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzE4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3MWU5NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzE4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2NjE5NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xOC50eHQKQEAgLTAsMCArMSBAQAorKDAxKTAwMDEyMzQ1Njc4OTA1KDEwKUFCQzEyMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWY3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMDg0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMTkudHh0CkBAIC0wLDAgKzEgQEAKKygwMSkxMjM0NTY3ODkwMTIzMSgxMClVTklWRVJTSVRZLU9GLURFVVNUTwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjU0ZmIxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2YwYTZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MTIzNDU2Nzk4MDEyOSgzMTAzKTAxMjIzMygxNSk5OTEyMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGEwNzVjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWZkYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIwLnR4dApAQCAtMCwwICsxIEBACisoMDEpMTIzNDU2Nzg5MDEyMzEoMTApUElSQU1JREUtUFJPSkVDVApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZmQ2MTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMjAzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjEudHh0CkBAIC0wLDAgKzEgQEAKKygwMSkxMjM0NTY3ODkwMTIzMSgxMClUUkVFTE9HSUMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTI1MGFmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWQ0MjA4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIyLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTg4OTg3NjU0MzIxMDYoMTUpOTkxMjMxKDMxMDMpMDAxNzUwKDEwKTEyQSg0MjIpMTIzKDIxKTEyMzQ1Nig0MjMpMDEyMzQ1Njc4OTAxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4MTFiZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzIzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU3NjYzMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yMy50eHQKQEAgLTAsMCArMSBAQAorKDE1KTk5MTIzMSgzMTAzKTAwMTc1MCgxMCkxMkEoNDIyKTEyMygyMSkxMjM0NTYoNDIzKTAxMjM0NTY3ODkwMTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGM2YWU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzk2NmVlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI0LnR4dApAQCAtMCwwICsxIEBACisoMTApNTY3OCgxMSkwMTAxMDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTE0ZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTQ4NjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI1LnR4dApAQCAtMCwwICsxIEBACisoMTApNTY3OCgxMSkwMDEwMTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjAyMjZmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2IzNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI2LnR4dApAQCAtMCwwICsxIEBACisoMTApNTY3ODkwKDExKTAxMDEwMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNjczZWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzcyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjcudHh0CkBAIC0wLDAgKzEgQEAKKygxMCk1NjcoMTEpMDEwMTAxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmZjYxMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzI4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2M2Y3ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yOC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTgtMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YWVmMTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8yOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NDEzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMjkudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4LDEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyODk1MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5M2M5NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zLnR4dApAQCAtMCwwICsxIEBACisoMDEpOTEyMzQ1Njc5ODAxMjkoMzEwMikwMTIyMzMoMTUpOTkxMjMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzMwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1NzVkOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzMwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwOGQ5MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zMC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTgvMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NjA0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ODYyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzEudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4LjEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzMyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOThmOGE2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzMyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzMyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmJmYTZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzMyLnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OCoxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzMzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3M2U4ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzMzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2M2Q5OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zMy50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOThhMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NWMxYzIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZmM1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzQudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4ITEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTA0OTRkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGQ5NWQwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM1LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OCIxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhNzc5NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiZjc4MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zNi50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTglMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDE2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMWQzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzcudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4JjEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBhNzk1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvMzgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDBjNmJiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM4LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OCcxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyNDIwNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzM5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiOTBlYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS8zOS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTgrMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTQ3Zjg0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2E3MjZiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MTIzNDU2Nzk4MDEyOSgzMTAyKTAxMjIzMygxNSkwMDAxMDEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTE4ZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmY5MDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQwLnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5ODoxMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80MS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlNDQ5NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80MS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkODRkNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80MS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTg7MTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80Mi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNGQ2OGMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80Mi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NGE2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDIudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4PDEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmE2OGEyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2NjNjA2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQzLnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OD0xMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQ0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80NC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkwYzgyNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80NC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQ0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM0NWU0ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80NC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTg+MTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80NS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YTFhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80NS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMTUyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDUudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMDk4PzEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQ2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDA5MDk4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQ2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQ2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWQxYjI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQ2LnR4dApAQCAtMCwwICsxIEBACisoMTApMTA5OF8xMjM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQ3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80Ny5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwYWIxNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80Ny5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQ3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80Ny50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMzOWRlOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80Ny50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEwOTggMTIzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80OC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MTYwMTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80OC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNjNmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNDgudHh0CkBAIC0wLDAgKzEgQEAKKygxMCkxMjM0NTZBClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQ5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80OS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjOGEyNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80OS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzQ5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80OS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxYjkxMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS80OS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEyMzQ1NkExClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2Q1MzMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MTEzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNS50eHQKQEAgLTAsMCArMSBAQAorKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDMpMDAxNzUwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjMTNiMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc3YTQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81MC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEyMzQ1NkExMjMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGYyMjE4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTJlYzQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUxLnR4dApAQCAtMCwwICsxIEBACisoMTApMTIzNDU2QTEyMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTM3YTQxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjA3ZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUyLnR4dApAQCAtMCwwICsxIEBACisoMTApMTIzNDU2QTEyMzRBClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81My5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3NDA4ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81My5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzUzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81My50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5YWRjYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81My50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEyMzQ1NkExMjM0NTYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2E1NTg4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmZkZTVkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU0LnR4dApAQCAtMCwwICsxIEBACisoMTApMTIzNDU2QTEyMzQ1Njc4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81NS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M2NWY3NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81NS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81NS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFkMGZiZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS81NS50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEyMzQ1NkExMjM0QSgxNSk5OTEyMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmQxZjM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzc5NjE3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU2LnR4dApAQCAtMCwwICsxIEBACisoMTApMUFCQ0RFRjs6LzEyMzQ1NjcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjlhMTc5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjNiNjRiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU3LnR4dApAQCAtMCwwICsxIEBACisoMTApMUFCQ0RFRjs6L0FCQ0RFRkcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmU4Y2MwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzU5MzI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU4LnR4dApAQCAtMCwwICsxIEBACisoMTApMTs6L0FCQ0RFRkdISUpLTE0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDYxNTBkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNTkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjVlODRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzU5LnR4dApAQCAtMCwwICsxIEBACisoMTApMTs6LzAxMjM0NTY3ODkwMTIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzExODkzYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS82LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhMmM2NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS82LnR4dApAQCAtMCwwICsxIEBACisoMDEpOTIxMDk4NzY1NDMyMTMoMzEwMykwMzI3NjcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNjAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzZmMDBmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNjAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTE0NzY2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYwLnR4dApAQCAtMCwwICsxIEBACisoMTApMTs6LzAxMjMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNjEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjViM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNjEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGJlOWYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYxLnR4dApAQCAtMCwwICsxIEBACisoMTApMTs6LzAxMjMoMTUpOTkxMjMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS82Mi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwNjc1NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS82Mi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS82Mi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExNTgxZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS82Mi50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNjMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmI2YWMyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEvNjMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzM3NjlmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzYzLnR4dApAQCAtMCwwICsxIEBACisoMTApMTJBClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzY0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS82NC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwZWIwMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS82NC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzY0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS82NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJjMTdmMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS82NC50eHQKQEAgLTAsMCArMSBAQAorKDEwKTEyMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS83LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS83LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzdmZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS83LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS83LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmE0MTc3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzcudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MjEwOTg3NjU0MzIxMygzMTAzKTAwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS84LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS84LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmM0NGZiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS84LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS84LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGRhN2ZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzgudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAyKTAwMDE1NgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS85LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS85LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTgwMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS85LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMS85LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWFmNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0xLzkudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzMjAyKTAwOTk5OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE5ZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0yLzEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjNmMTExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0yLzEudHh0CkBAIC0wLDAgKzEgQEAKKyg4MTEwKTEwMDE0MTQxMDEyMzQ1MjkwMTEwMTAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0yLzEwMDAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0yLzEwMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NWUxZjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMTAwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0yLzEwMDAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0yLzEwMDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODY1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMTAwMC50eHQKQEAgLTAsMCArMSBAQAorKDAxKTk4ODk4NzY1NDMyMTA2KDMyMDIpMDEyMzQ1KDE1KTk5MTIzMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODE2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMTMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjlkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMTMudHh0CkBAIC0wLDAgKzEgQEAKKygwMSk5MDAxMjM0NTY3ODkwOCgzOTIyKTc5NTg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMTkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWY3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMTkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMTkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMDg0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMTkudHh0CkBAIC0wLDAgKzEgQEAKKygwMSkxMjM0NTY3ODkwMTIzMSgxMClVTklWRVJTSVRZLU9GLURFVVNUTwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8yMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMjAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYTA3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMjAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8yMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZmRhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMjAudHh0CkBAIC0wLDAgKzEgQEAKKygwMSkxMjM0NTY3ODkwMTIzMSgxMClQSVJBTUlERS1QUk9KRUNUClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0yLzIyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8yMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyNTBhZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8yMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0yLzIyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8yMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkNDIwOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8yMi50eHQKQEAgLTAsMCArMSBAQAorKDAxKTk4ODk4NzY1NDMyMTA2KDE1KTk5MTIzMSgzMTAzKTAwMTc1MCgxMCkxMkEoNDIyKTEyMygyMSkxMjM0NTYoNDIzKTAxMjM0NTY3ODkwMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8yMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMjMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ODExYmYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMjMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZHN0YWNrZWQtMi8yMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNzY2MzEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMjMudHh0CkBAIC0wLDAgKzEgQEAKKygxNSk5OTEyMzEoMzEwMykwMDE3NTAoMTApMTJBKDQyMikxMjMoMjEpMTIzNDU2KDQyMykwMTIzNDU2Nzg5MDEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Vuc3VwcG9ydGVkLzAxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91bnN1cHBvcnRlZC8wMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1NjM4NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91bnN1cHBvcnRlZC8wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Vuc3VwcG9ydGVkLzAzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91bnN1cHBvcnRlZC8wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmNjk0MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91bnN1cHBvcnRlZC8wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Vuc3VwcG9ydGVkLzA0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91bnN1cHBvcnRlZC8wNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0MGU0ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91bnN1cHBvcnRlZC8wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3Vuc3VwcG9ydGVkLzA1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91bnN1cHBvcnRlZC8wNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkzNTE0MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91bnN1cHBvcnRlZC8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhMzhkMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwNDIxOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMS50eHQKQEAgLTAsMCArMSBAQAorMDM2NjAyMzAxNDY3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzEwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWI3OThkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTZmMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMC50eHQKQEAgLTAsMCArMSBAQAorMDI3MDExMDA2OTUxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjU1YzU1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTZmMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMS50eHQKQEAgLTAsMCArMSBAQAorMDI3MDExMDA2OTUxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTVmZjkwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWE0MWIwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMi50eHQKQEAgLTAsMCArMSBAQAorNzgxNzM1ODAyMDQ1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmZlOWFiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWE0MWIwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xMy50eHQKQEAgLTAsMCArMSBAQAorNzgxNzM1ODAyMDQ1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTI0NTgwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzZlYTFlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xNi50eHQKQEAgLTAsMCArMSBAQAorNDU2MzE0MzE5NjcxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODA5NzdjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQ5OGU2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xNy50eHQKQEAgLTAsMCArMSBAQAorNDM0NzA0NzkxNDI5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjE3MDE4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzU3ZGRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xOC50eHQKQEAgLTAsMCArMSBAQAorMDI0NTQzMTM2NTM4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNkMjkxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzE5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzU3ZGRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8xOS50eHQKQEAgLTAsMCArMSBAQAorMDI0NTQzMTM2NTM4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI3ZGE5OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwNDIxOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMi50eHQKQEAgLTAsMCArMSBAQAorMDM2NjAyMzAxNDY3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzRiMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQxY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yMC50eHQKQEAgLTAsMCArMSBAQAorNzUyOTE5NDYwMDA5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzIxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzA5YTFiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzIxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQxY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yMS50eHQKQEAgLTAsMCArMSBAQAorNzUyOTE5NDYwMDA5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzI3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzA3YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzI3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTJjYjc0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yNy50eHQKQEAgLTAsMCArMSBAQAorNjA2OTQ5NzYyNTIwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzI4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDJmNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzI4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTFhMzgyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yOC50eHQKQEAgLTAsMCArMSBAQAorMDYxODY5MDUzNzEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzI5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjQzNjMzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzI5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzM1YjcxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8yOS50eHQKQEAgLTAsMCArMSBAQAorNjE5NjU5MDIzOTM1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8zLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5ZjQxYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8zLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzYzIxMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvMy50eHQKQEAgLTAsMCArMSBAQAorMDcwMDk3MDI1MDg4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8zNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzM1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTNkOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8zNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8zNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0xLzM1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjNmNWQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS8zNS50eHQKQEAgLTAsMCArMSBAQAorMDQ1NDk2NDQyNzM2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS80LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzZTczOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS80LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzYzIxMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvNC50eHQKQEAgLTAsMCArMSBAQAorMDcwMDk3MDI1MDg4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS81LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxZDE5MQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS81LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzYzIxMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvNS50eHQKQEAgLTAsMCArMSBAQAorMDcwMDk3MDI1MDg4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS84LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzMjVlNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS84LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdlNGRmNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvOC50eHQKQEAgLTAsMCArMSBAQAorMDcxODMxMDA3OTk1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS85LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZjYTI2OQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMS85LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdlNGRmNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTEvOS50eHQKQEAgLTAsMCArMSBAQAorMDcxODMxMDA3OTk1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmM2ZjZiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDliNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMS50eHQKQEAgLTAsMCArMSBAQAorODkwNDQ0MDAwMzM1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWM5MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDliNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMi50eHQKQEAgLTAsMCArMSBAQAorODkwNDQ0MDAwMzM1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjNkYTNmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDliNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wMy50eHQKQEAgLTAsMCArMSBAQAorODkwNDQ0MDAwMzM1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTc3Y2NiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDliNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNC50eHQKQEAgLTAsMCArMSBAQAorODkwNDQ0MDAwMzM1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUyOTM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDliNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNS50eHQKQEAgLTAsMCArMSBAQAorODkwNDQ0MDAwMzM1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjZiYTU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDliNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNi50eHQKQEAgLTAsMCArMSBAQAorODkwNDQ0MDAwMzM1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzZhNmIxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDliNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wNy50eHQKQEAgLTAsMCArMSBAQAorODkwNDQ0MDAwMzM1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGE1NDE5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDc3M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wOC50eHQKQEAgLTAsMCArMSBAQAorMTgxNDk3MDAwODc5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWJiODU5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDc3M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8wOS50eHQKQEAgLTAsMCArMSBAQAorMTgxNDk3MDAwODc5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzEwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzU5Zjg3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDc3M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMC50eHQKQEAgLTAsMCArMSBAQAorMTgxNDk3MDAwODc5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDQ3MTMxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDc3M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMS50eHQKQEAgLTAsMCArMSBAQAorMTgxNDk3MDAwODc5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDAxMDkyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDc3M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMi50eHQKQEAgLTAsMCArMSBAQAorMTgxNDk3MDAwODc5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTFjZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDc3M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xMy50eHQKQEAgLTAsMCArMSBAQAorMTgxNDk3MDAwODc5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWUxNDI2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA2ODhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNC50eHQKQEAgLTAsMCArMSBAQAorMDUxMDAwMDAwNjc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Y5ZjdkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA2ODhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNS50eHQKQEAgLTAsMCArMSBAQAorMDUxMDAwMDAwNjc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTMzMjMxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA2ODhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNi50eHQKQEAgLTAsMCArMSBAQAorMDUxMDAwMDAwNjc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGM0MTE4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA2ODhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xNy50eHQKQEAgLTAsMCArMSBAQAorMDUxMDAwMDAwNjc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjdhZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA2ODhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xOC50eHQKQEAgLTAsMCArMSBAQAorMDUxMDAwMDAwNjc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzYwNmFjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzE5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA2ODhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8xOS50eHQKQEAgLTAsMCArMSBAQAorMDUxMDAwMDAwNjc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWRlNzNhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA2ODhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMC50eHQKQEAgLTAsMCArMSBAQAorMDUxMDAwMDAwNjc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzIxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWI5YWEzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzIxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA2ODhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMS50eHQKQEAgLTAsMCArMSBAQAorMDUxMDAwMDAwNjc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzIyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODJhNmMwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzIyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA2ODhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMi50eHQKQEAgLTAsMCArMSBAQAorMDUxMDAwMDAwNjc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzIzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzY5N2M3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzIzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk4MzQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yMy50eHQKQEAgLTAsMCArMSBAQAorNzUyMDUwMjAwMTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQ1ZmJkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk4MzQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNC50eHQKQEAgLTAsMCArMSBAQAorNzUyMDUwMjAwMTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njc5Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk4MzQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNS50eHQKQEAgLTAsMCArMSBAQAorNzUyMDUwMjAwMTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2FmOTBjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk4MzQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNi50eHQKQEAgLTAsMCArMSBAQAorNzUyMDUwMjAwMTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFkNTczCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk4MzQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yNy50eHQKQEAgLTAsMCArMSBAQAorNzUyMDUwMjAwMTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWY5OTMwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk4MzQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yOC50eHQKQEAgLTAsMCArMSBAQAorNzUyMDUwMjAwMTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzUxOThiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzI5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk4MzQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8yOS50eHQKQEAgLTAsMCArMSBAQAorNzUyMDUwMjAwMTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzMwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGQyM2ExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzMwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk4MzQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMC50eHQKQEAgLTAsMCArMSBAQAorNzUyMDUwMjAwMTM3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzMxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzcwMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzMxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODg5MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMS50eHQKQEAgLTAsMCArMSBAQAorODk5Njg0MDAxMDAzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzMyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2M2NGE4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzMyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODg5MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMi50eHQKQEAgLTAsMCArMSBAQAorODk5Njg0MDAxMDAzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzMzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWRiNjcyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzMzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODg5MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zMy50eHQKQEAgLTAsMCArMSBAQAorODk5Njg0MDAxMDAzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzdiMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODg5MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNC50eHQKQEAgLTAsMCArMSBAQAorODk5Njg0MDAxMDAzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWM2NDY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODg5MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNS50eHQKQEAgLTAsMCArMSBAQAorODk5Njg0MDAxMDAzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWJiNjg3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODg5MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNi50eHQKQEAgLTAsMCArMSBAQAorODk5Njg0MDAxMDAzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGY1OGYwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODg5MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zNy50eHQKQEAgLTAsMCArMSBAQAorODk5Njg0MDAxMDAzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWUzZTgzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzkxNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zOC50eHQKQEAgLTAsMCArMSBAQAorMDEyNTQ2NjE5NTkyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTZlZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzM5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzkxNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi8zOS50eHQKQEAgLTAsMCArMSBAQAorMDEyNTQ2NjE5NTkyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80MC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGViYjQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80MC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzkxNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80MC50eHQKQEAgLTAsMCArMSBAQAorMDEyNTQ2NjE5NTkyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80MS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQwYzJjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80MS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80MS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzkxNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80MS50eHQKQEAgLTAsMCArMSBAQAorMDEyNTQ2NjE5NTkyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Mi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdjMDUyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Mi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Mi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzkxNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Mi50eHQKQEAgLTAsMCArMSBAQAorMDEyNTQ2NjE5NTkyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80My5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTQ4NTliCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80My5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80My50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzkxNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80My50eHQKQEAgLTAsMCArMSBAQAorMDEyNTQ2NjE5NTkyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80NC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjkwOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80NC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80NC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzkxNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80NC50eHQKQEAgLTAsMCArMSBAQAorMDEyNTQ2NjE5NTkyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80NS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzc3YjliCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80NS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80NS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzUwZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80NS50eHQKQEAgLTAsMCArMSBAQAorMDc1NzIwMDAzMjU5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Ni5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmVkNDQxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Ni5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Ni50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzUwZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Ni50eHQKQEAgLTAsMCArMSBAQAorMDc1NzIwMDAzMjU5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Ny5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI3Yjc0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Ny5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Ny50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzUwZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80Ny50eHQKQEAgLTAsMCArMSBAQAorMDc1NzIwMDAzMjU5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80OC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzViN2MwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80OC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80OC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzUwZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80OC50eHQKQEAgLTAsMCArMSBAQAorMDc1NzIwMDAzMjU5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80OS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTMxNTcxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80OS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80OS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzQ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzUwZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi80OS50eHQKQEAgLTAsMCArMSBAQAorMDc1NzIwMDAzMjU5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81MC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzUwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGVhMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81MC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzUwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzUwZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81MC50eHQKQEAgLTAsMCArMSBAQAorMDc1NzIwMDAzMjU5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81MS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzUxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjM3ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81MS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81MS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzUxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzUwZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81MS50eHQKQEAgLTAsMCArMSBAQAorMDc1NzIwMDAzMjU5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81Mi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzUyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTFmMDFiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81Mi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81Mi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0yLzUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzUwZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMi81Mi50eHQKQEAgLTAsMCArMSBAQAorMDc1NzIwMDAzMjU5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDVjYTA0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMS50eHQKQEAgLTAsMCArMSBAQAorMDQ5MDAwMDQyNTY2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWM5YWMyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMi50eHQKQEAgLTAsMCArMSBAQAorMDQ5MDAwMDQyNTY2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjQxMTc4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wMy50eHQKQEAgLTAsMCArMSBAQAorMDQ5MDAwMDQyNTY2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTA4YmRkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNC50eHQKQEAgLTAsMCArMSBAQAorMDQ5MDAwMDQyNTY2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWY0OTg4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNS50eHQKQEAgLTAsMCArMSBAQAorMDQ5MDAwMDQyNTY2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTYwNmE4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNi50eHQKQEAgLTAsMCArMSBAQAorMDQ5MDAwMDQyNTY2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjhiNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wNy50eHQKQEAgLTAsMCArMSBAQAorMDQ5MDAwMDQyNTY2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTU3OTI3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wOC50eHQKQEAgLTAsMCArMSBAQAorMDQ5MDAwMDQyNTY2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNmY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8wOS50eHQKQEAgLTAsMCArMSBAQAorMDQ5MDAwMDQyNTY2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzEwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzNlNjhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMC50eHQKQEAgLTAsMCArMSBAQAorMDQ5MDAwMDQyNTY2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGYxMmM0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMS50eHQKQEAgLTAsMCArMSBAQAorODU0ODE4MDAwMTE2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzVhY2U2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMi50eHQKQEAgLTAsMCArMSBAQAorODU0ODE4MDAwMTE2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDZmZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xMy50eHQKQEAgLTAsMCArMSBAQAorODU0ODE4MDAwMTE2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjY2MjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNC50eHQKQEAgLTAsMCArMSBAQAorODU0ODE4MDAwMTE2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjY5YTgzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNS50eHQKQEAgLTAsMCArMSBAQAorODU0ODE4MDAwMTE2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTU0ZTVhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNi50eHQKQEAgLTAsMCArMSBAQAorODU0ODE4MDAwMTE2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzZmYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xNy50eHQKQEAgLTAsMCArMSBAQAorODU0ODE4MDAwMTE2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjc5ODUzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xOC50eHQKQEAgLTAsMCArMSBAQAorODU0ODE4MDAwMTE2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzcwNDIxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzE5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8xOS50eHQKQEAgLTAsMCArMSBAQAorODU0ODE4MDAwMTE2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8yMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTkwZDAxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8yMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8yMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8yMC50eHQKQEAgLTAsMCArMSBAQAorODU0ODE4MDAwMTE2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8yMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzIxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTgxZGIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8yMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8yMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS0zLzIxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtMy8yMS50eHQKQEAgLTAsMCArMSBAQAorODU0ODE4MDAwMTE2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4MTNjOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1OWE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMS50eHQKQEAgLTAsMCArMSBAQAorMDIzOTQyNDMxMDE1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzEwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzE5MDk4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTc2ZGFjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMC50eHQKQEAgLTAsMCArMSBAQAorMDY2NzIxMDEwOTk1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTUwZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWY0YmZjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMS50eHQKQEAgLTAsMCArMSBAQAorMDU5MjkwNTIyMTQzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWM1MWU1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDkxYmU0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMi50eHQKQEAgLTAsMCArMSBAQAorMDU3OTYxMDAwMjI4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGUyZDVlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWY0YmZjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xMy50eHQKQEAgLTAsMCArMSBAQAorMDU5MjkwNTIyMTQzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWMxMGZjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGViNDY4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNC50eHQKQEAgLTAsMCArMSBAQAorMDY2NzIxMDE3MTg1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTVhNWE0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDZmZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNS50eHQKQEAgLTAsMCArMSBAQAorMDU5MjkwNTcxMTEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTUzYWJjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjljNmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNi50eHQKQEAgLTAsMCArMSBAQAorMDY3OTMyMDAwMjYzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzJkODYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjY5MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xNy50eHQKQEAgLTAsMCArMSBAQAorMDY5MDAwMDYxMDE1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQyZjIxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDQ1ZDBlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xOC50eHQKQEAgLTAsMCArMSBAQAorMDcxNjkxMTU1Nzc1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWRhNzhlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS00LzE5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2I5ZjljCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8xOS50eHQKQEAgLTAsMCArMSBAQAorODA3NjQ4MDExNDAxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8yLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM3N2M2YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8yLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1OWE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMi50eHQKQEAgLTAsMCArMSBAQAorMDIzOTQyNDMxMDE1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8zLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmZGYyYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC8zLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1OWE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvMy50eHQKQEAgLTAsMCArMSBAQAorMDIzOTQyNDMxMDE1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC80LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkZWU1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC80LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1OWE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNC50eHQKQEAgLTAsMCArMSBAQAorMDIzOTQyNDMxMDE1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC81LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3MTdjYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC81LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1OWE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNS50eHQKQEAgLTAsMCArMSBAQAorMDIzOTQyNDMxMDE1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC82LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQyNmY3YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC82LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1OWE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNi50eHQKQEAgLTAsMCArMSBAQAorMDIzOTQyNDMxMDE1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC83LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3ZWVlMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC83LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1OWE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvNy50eHQKQEAgLTAsMCArMSBAQAorMDIzOTQyNDMxMDE1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC84LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5YmM4MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC84LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljZmZkMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvOC50eHQKQEAgLTAsMCArMSBAQAorMDYwNDEwMDQ5MjM1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC85LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjOWJhMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNC85LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljZmZkMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNhLTQvOS50eHQKQEAgLTAsMCArMSBAQAorMDYwNDEwMDQ5MjM1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MTQ1ZjVkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMS50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43OGJmNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMi50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNDQwOGY1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wMy50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzhlZDRjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNC50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MzdhMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNS50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZTQ2ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNi50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZDVlZGMzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wNy50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZTA4MzgzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wOC50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNzM2ODM0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8wOS50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzEwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMjYzMzBlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMC50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Y2QxMWYwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMS50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYjJhOTNhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMi50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YTFmMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xMy50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYTIzOTE3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNC50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYTM0NjZjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNS50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMDJiZDAxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNi50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYWQ5ZDQyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xNy50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZjcwZDlmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhmNjIzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xOC50eHQKQEAgLTAsMCArMSBAQAorMzEyNTQ3NzAxMzEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lN2Y0YWJjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzE5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8xOS50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YjIyYmNhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMC50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzIxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZDliNDQwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzIxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMS50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzIyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMjYyNTk4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzIyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMi50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzIzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MGViNTBlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzIzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yMy50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYjNhYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNC50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NWZmODVjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNS50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MzEyNjRlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNi50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZTU2MWE4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yNy50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNGMzYTk2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yOC50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNmY2NjhmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzI5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8yOS50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzMwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOTk1ZmZmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzMwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMC50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzMxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NTQxNmZiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzMxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMS50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzMyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yODQyY2NlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzMyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMi50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzMzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNzlkYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzMzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zMy50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzM0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMzc0MzViCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzM0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zNC50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzM1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzUxYzUxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS01LzM1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNS8zNS50eHQKQEAgLTAsMCArMSBAQAorNjI1MDM0MjAxMDU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOGM4ZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U0ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMS50eHQKQEAgLTAsMCArMSBAQAorMDcxODMxMDA3OTk1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMTFkMDY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U0ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMi50eHQKQEAgLTAsMCArMSBAQAorMDcxODMxMDA3OTk1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMzc3ZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U0ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wMy50eHQKQEAgLTAsMCArMSBAQAorMDcxODMxMDA3OTk1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNTQ0ZDFhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U0ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNC50eHQKQEAgLTAsMCArMSBAQAorMDcxODMxMDA3OTk1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMDk3ODUwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U0ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNS50eHQKQEAgLTAsMCArMSBAQAorMDcxODMxMDA3OTk1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Mjk1M2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U0ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNi50eHQKQEAgLTAsMCArMSBAQAorMDcxODMxMDA3OTk1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NmJlNzg2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2MwMmEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wNy50eHQKQEAgLTAsMCArMSBAQAorNjA1NDgyMzMwMDEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMDJmMWY5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2MwMmEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wOC50eHQKQEAgLTAsMCArMSBAQAorNjA1NDgyMzMwMDEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMTlmOTNmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2MwMmEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8wOS50eHQKQEAgLTAsMCArMSBAQAorNjA1NDgyMzMwMDEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzEwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZjZkNDYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2MwMmEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMC50eHQKQEAgLTAsMCArMSBAQAorNjA1NDgyMzMwMDEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YjFhZTgxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2MwMmEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMS50eHQKQEAgLTAsMCArMSBAQAorNjA1NDgyMzMwMDEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTVhMTUwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2MwMmEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMi50eHQKQEAgLTAsMCArMSBAQAorNjA1NDgyMzMwMDEyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MjVhYjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTliMDFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xMy50eHQKQEAgLTAsMCArMSBAQAorMDczMzMzNTMxMDg0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZDViYjRiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTliMDFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNC50eHQKQEAgLTAsMCArMSBAQAorMDczMzMzNTMxMDg0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NjFmMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTliMDFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNS50eHQKQEAgLTAsMCArMSBAQAorMDczMzMzNTMxMDg0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZmIyZTllCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTliMDFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNi50eHQKQEAgLTAsMCArMSBAQAorMDczMzMzNTMxMDg0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OTQwZDNjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTliMDFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xNy50eHQKQEAgLTAsMCArMSBAQAorMDczMzMzNTMxMDg0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MjZmMWQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTliMDFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xOC50eHQKQEAgLTAsMCArMSBAQAorMDczMzMzNTMxMDg0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNTg5MDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjYS02LzE5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTliMDFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNi8xOS50eHQKQEAgLTAsMCArMSBAQAorMDczMzMzNTMxMDg0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMS8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTEvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhNzQxZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTEvMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMS8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTEvMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5OWYwZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTEvMS50eHQKQEAgLTAsMCArMSBAQAorMDEyMzQ1NjUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0xLzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMS8yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzA2MGYyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMS8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0xLzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMS8yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTdhZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMS8yLnR4dApAQCAtMCwwICsxIEBACiswMDEyMzQ1NwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTEvNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0xLzQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NDUxYjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0xLzQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTEvNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0xLzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODY2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0xLzQudHh0CkBAIC0wLDAgKzEgQEAKKzAxMjM0NTMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWRlYjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDIwMTFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wMS50eHQKQEAgLTAsMCArMSBAQAorMDUwOTY4OTMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzAyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZGVlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzAyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzAyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjAxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzAyLnR4dApAQCAtMCwwICsxIEBACiswNTA5Njg5MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxM2JhZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyMDExZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDMudHh0CkBAIC0wLDAgKzEgQEAKKzA1MDk2ODkzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzI2YmViCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDIwMTFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wNC50eHQKQEAgLTAsMCArMSBAQAorMDUwOTY4OTMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZjQ0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjAxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA1LnR4dApAQCAtMCwwICsxIEBACiswNTA5Njg5MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlNDFkZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyMDExZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDYudHh0CkBAIC0wLDAgKzEgQEAKKzA1MDk2ODkzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTY1MjY2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDIwMTFkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wNy50eHQKQEAgLTAsMCArMSBAQAorMDUwOTY4OTMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiODI2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkN2ViNDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzA4LnR4dApAQCAtMCwwICsxIEBACiswNDk2MzQwNgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwYjE3ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8wOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3ZWI0MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMDkudHh0CkBAIC0wLDAgKzEgQEAKKzA0OTYzNDA2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xMC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzEwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzEwZmJkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xMC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDdlYjQyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xMC50eHQKQEAgLTAsMCArMSBAQAorMDQ5NjM0MDYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzExLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZGJiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzExLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzExLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkN2ViNDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzExLnR4dApAQCAtMCwwICsxIEBACiswNDk2MzQwNgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzOTI3NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3ZWI0MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTIudHh0CkBAIC0wLDAgKzEgQEAKKzA0OTYzNDA2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzEzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmJkYmZlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xMy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDdlYjQyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xMy50eHQKQEAgLTAsMCArMSBAQAorMDQ5NjM0MDYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE0LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTUyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE0LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkN2ViNDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE0LnR4dApAQCAtMCwwICsxIEBACiswNDk2MzQwNgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTUucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwMTU0ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTUudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3ZWI0MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTUudHh0CkBAIC0wLDAgKzEgQEAKKzA0OTYzNDA2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xNi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE2LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjQ4ODA2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xNi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xNi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzZjNmRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xNi50eHQKQEAgLTAsMCArMSBAQAorMDQxMjQ0OTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE3LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZTU1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE3LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNmM2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE3LnR4dApAQCAtMCwwICsxIEBACiswNDEyNDQ5OApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTgucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzMDkyMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTgudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2YzZkZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMTgudHh0CkBAIC0wLDAgKzEgQEAKKzA0MTI0NDk4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xOS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGI2ZmZiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xOS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzE5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzZjNmRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8xOS50eHQKQEAgLTAsMCArMSBAQAorMDQxMjQ0OTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzIwLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNmVjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzIwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzIwLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNmM2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzIwLnR4dApAQCAtMCwwICsxIEBACiswNDEyNDQ5OApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmYzIzOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2YzZkZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjEudHh0CkBAIC0wLDAgKzEgQEAKKzA0MTI0NDk4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzIyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzFhMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzIyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzZjNmRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yMi50eHQKQEAgLTAsMCArMSBAQAorMDQxMjQ0OTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzIzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZWRhMzkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzIzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzIzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNmM2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzIzLnR4dApAQCAtMCwwICsxIEBACiswNDEyNDQ5OApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzNjMyYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2YzZkZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjQudHh0CkBAIC0wLDAgKzEgQEAKKzA0MTI0NDk4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQyOTc3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzZjNmRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yNS50eHQKQEAgLTAsMCArMSBAQAorMDQxMjQ0OTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjY0ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNmM2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI2LnR4dApAQCAtMCwwICsxIEBACiswNDEyNDQ5OApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc2ODA3MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2YzZkZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjcudHh0CkBAIC0wLDAgKzEgQEAKKzA0MTI0NDk4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGE1ZmY0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzZjNmRmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8yOC50eHQKQEAgLTAsMCArMSBAQAorMDQxMjQ0OTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDJjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNmM2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzI5LnR4dApAQCAtMCwwICsxIEBACiswNDEyNDQ5OApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlMTAzZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2YzZkZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzAudHh0CkBAIC0wLDAgKzEgQEAKKzA0MTI0NDk4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzMxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2U4MGFlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzMxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWMxYjYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zMS50eHQKQEAgLTAsMCArMSBAQAorMDEyNjQ5MDQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzMyLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDZhZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzMyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzMyLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YzFiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzMyLnR4dApAQCAtMCwwICsxIEBACiswMTI2NDkwNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzMucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5ZDgxMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzMudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljMWI2MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzMudHh0CkBAIC0wLDAgKzEgQEAKKzAxMjY0OTA0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zNC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGJmMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zNC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWMxYjYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zNC50eHQKQEAgLTAsMCArMSBAQAorMDEyNjQ5MDQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM1LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNzQ5NzMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM1LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YzFiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM1LnR4dApAQCAtMCwwICsxIEBACiswMTI2NDkwNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzYucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlNjRhYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzYudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljMWI2MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzYudHh0CkBAIC0wLDAgKzEgQEAKKzAxMjY0OTA0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zNy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGRkZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zNy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zNy50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWMxYjYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zNy50eHQKQEAgLTAsMCArMSBAQAorMDEyNjQ5MDQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM4LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTE2ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM4LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YzFiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzM4LnR4dApAQCAtMCwwICsxIEBACiswMTI2NDkwNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzkucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDExZDU3YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzkudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi8zOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljMWI2MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvMzkudHh0CkBAIC0wLDAgKzEgQEAKKzAxMjY0OTA0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi80MC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDg0YjBhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi80MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi80MC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzQwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWMxYjYzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMi80MC50eHQKQEAgLTAsMCArMSBAQAorMDEyNjQ5MDQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzQxLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvNDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjgyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzQxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzQxLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTIvNDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YzFiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0yLzQxLnR4dApAQCAtMCwwICsxIEBACiswMTI2NDkwNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDEucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0NWExOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzYzQ1MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDEudHh0CkBAIC0wLDAgKzEgQEAKKzA0OTY1ODAyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUzMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wMi50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNjNDUwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wMi50eHQKQEAgLTAsMCArMSBAQAorMDQ5NjU4MDIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzAzLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MTFhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzAzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzAzLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzM2M0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzAzLnR4dApAQCAtMCwwICsxIEBACiswNDk2NTgwMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDQucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhYzg5MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDQudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzYzQ1MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDQudHh0CkBAIC0wLDAgKzEgQEAKKzA0OTY1ODAyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wNS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmEyMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wNS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNjNDUwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wNS50eHQKQEAgLTAsMCArMSBAQAorMDQ5NjU4MDIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA2LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNzYwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA2LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA2LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzM2M0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA2LnR4dApAQCAtMCwwICsxIEBACiswNDk2NTgwMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDcucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjZjE3YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDcudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzYzQ1MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDcudHh0CkBAIC0wLDAgKzEgQEAKKzA0OTY1ODAyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wOC5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTA1MjgxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wOC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wOC50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNjNDUwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8wOC50eHQKQEAgLTAsMCArMSBAQAorMDQ5NjU4MDIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA5LnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YzMxNTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA5LnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzM2M0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzA5LnR4dApAQCAtMCwwICsxIEBACiswNDk2NTgwMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMTAucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3NjcxYwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMTAudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzYzQ1MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlLTMvMTAudHh0CkBAIC0wLDAgKzEgQEAKKzA0OTY1ODAyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8xMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjY3NGViCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8xMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8xMS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZS0zLzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNjNDUwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMy8xMS50eHQKQEAgLTAsMCArMSBAQAorMDQ5NjU4MDIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZWFuLWV4dGVuc2lvbi0xLzEubWV0YWRhdGEudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2Vhbi1leHRlbnNpb24tMS8xLm1ldGFkYXRhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWQzZjM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2Vhbi1leHRlbnNpb24tMS8xLm1ldGFkYXRhLnR4dApAQCAtMCwwICsxIEBACitTVUdHRVNURURfUFJJQ0U9JDEyLjk5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2Vhbi1leHRlbnNpb24tMS8xLnBuZyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlYW4tZXh0ZW5zaW9uLTEvMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkMGE2YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlYW4tZXh0ZW5zaW9uLTEvMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2Vhbi1leHRlbnNpb24tMS8xLnR4dCBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlYW4tZXh0ZW5zaW9uLTEvMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxNDcxYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlYW4tZXh0ZW5zaW9uLTEvMS50eHQKQEAgLTAsMCArMSBAQAorOTc4MDczNTIwMDQ0OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1Jlc291cmNlcy9ibGFja2JveC91cGNlYW4tZXh0ZW5zaW9uLTEvMi5tZXRhZGF0YS50eHQgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZWFuLWV4dGVuc2lvbi0xLzIubWV0YWRhdGEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDgwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZWFuLWV4dGVuc2lvbi0xLzIubWV0YWRhdGEudHh0CkBAIC0wLDAgKzEgQEAKK1NVR0dFU1RFRF9QUklDRT0kMjQuOTUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZWFuLWV4dGVuc2lvbi0xLzIucG5nIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2Vhbi1leHRlbnNpb24tMS8yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2QwOTJhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2Vhbi1leHRlbnNpb24tMS8yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvYmxhY2tib3gvdXBjZWFuLWV4dGVuc2lvbi0xLzIudHh0IGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2Vhbi1leHRlbnNpb24tMS8yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzZhODExCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2JsYWNrYm94L3VwY2Vhbi1leHRlbnNpb24tMS8yLnR4dApAQCAtMCwwICsxIEBACis5NzgwODg0MjcxNzg5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2dvbGRlbi9xcmNvZGUvcmVuZGVyZXItdGVzdC0wMS5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvZ29sZGVuL3FyY29kZS9yZW5kZXJlci10ZXN0LTAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODQxZDg2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2dvbGRlbi9xcmNvZGUvcmVuZGVyZXItdGVzdC0wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2dvbGRlbi9xcmNvZGUvcmVuZGVyZXItdGVzdC0wMi5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvZ29sZGVuL3FyY29kZS9yZW5kZXJlci10ZXN0LTAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmQyNTA0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2dvbGRlbi9xcmNvZGUvcmVuZGVyZXItdGVzdC0wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2dvbGRlbi9xcmNvZGUvcmVuZGVyZXItdGVzdC0wMy5wbmcgYi9aWGluZ09iakNUZXN0cy9SZXNvdXJjZXMvZ29sZGVuL3FyY29kZS9yZW5kZXJlci10ZXN0LTAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODQwMjRkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvUmVzb3VyY2VzL2dvbGRlbi9xcmNvZGUvcmVuZGVyZXItdGVzdC0wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9UZXN0cy1PU1gtUHJlZml4LnBjaCBiL1pYaW5nT2JqQ1Rlc3RzL1N1cHBvcnRpbmcgRmlsZXMvVGVzdHMtT1NYLVByZWZpeC5wY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4Yzc2NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1N1cHBvcnRpbmcgRmlsZXMvVGVzdHMtT1NYLVByZWZpeC5wY2gKQEAgLTAsMCArMSw5IEBACisvLworLy8gUHJlZml4IGhlYWRlciBmb3IgYWxsIHNvdXJjZSBmaWxlcyBvZiB0aGUgJ1pYaW5nT2JqQycgdGFyZ2V0IGluIHRoZSAnWlhpbmdPYmpDJyBwcm9qZWN0CisvLworCisjaWZkZWYgX19PQkpDX18KKyAgI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKworICAjaW1wb3J0ICJaWGluZ09iakMuaCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9UZXN0cy1pT1MtUHJlZml4LnBjaCBiL1pYaW5nT2JqQ1Rlc3RzL1N1cHBvcnRpbmcgRmlsZXMvVGVzdHMtaU9TLVByZWZpeC5wY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmZWFhNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1N1cHBvcnRpbmcgRmlsZXMvVGVzdHMtaU9TLVByZWZpeC5wY2gKQEAgLTAsMCArMSw5IEBACisvLworLy8gUHJlZml4IGhlYWRlciBmb3IgYWxsIHNvdXJjZSBmaWxlcyBvZiB0aGUgJ1pYaW5nT2JqQycgdGFyZ2V0IGluIHRoZSAnWlhpbmdPYmpDJyBwcm9qZWN0CisvLworCisjaWZkZWYgX19PQkpDX18KKyAgI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyAgI2ltcG9ydCAiWlhpbmdPYmpDLmgiCisjZW5kaWYKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1N1cHBvcnRpbmcgRmlsZXMvWlhpbmdPYmpDVGVzdHMtSW5mby5wbGlzdCBiL1pYaW5nT2JqQ1Rlc3RzL1N1cHBvcnRpbmcgRmlsZXMvWlhpbmdPYmpDVGVzdHMtSW5mby5wbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmJhOGRlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9aWGluZ09iakNUZXN0cy1JbmZvLnBsaXN0CkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIxLjAiPgorPGRpY3Q+CisJPGtleT5DRkJ1bmRsZURldmVsb3BtZW50UmVnaW9uPC9rZXk+CisJPHN0cmluZz5lbjwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVFeGVjdXRhYmxlPC9rZXk+CisJPHN0cmluZz4ke0VYRUNVVEFCTEVfTkFNRX08L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PgorCTxzdHJpbmc+Y29tLnp4aW5nLiR7UFJPRFVDVF9OQU1FOnJmYzEwMzRpZGVudGlmaWVyfTwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJbmZvRGljdGlvbmFyeVZlcnNpb248L2tleT4KKwk8c3RyaW5nPjYuMDwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PgorCTxzdHJpbmc+Qk5ETDwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmc8L2tleT4KKwk8c3RyaW5nPjEuMDwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVTaWduYXR1cmU8L2tleT4KKwk8c3RyaW5nPj8/Pz88L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlVmVyc2lvbjwva2V5PgorCTxzdHJpbmc+MTwvc3RyaW5nPgorPC9kaWN0PgorPC9wbGlzdD4KZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL1N1cHBvcnRpbmcgRmlsZXMvaW9zLVByZWZpeC5wY2ggYi9aWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL2lvcy1QcmVmaXgucGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZmVhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL2lvcy1QcmVmaXgucGNoCkBAIC0wLDAgKzEsOSBAQAorLy8KKy8vIFByZWZpeCBoZWFkZXIgZm9yIGFsbCBzb3VyY2UgZmlsZXMgb2YgdGhlICdaWGluZ09iakMnIHRhcmdldCBpbiB0aGUgJ1pYaW5nT2JqQycgcHJvamVjdAorLy8KKworI2lmZGVmIF9fT0JKQ19fCisgICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisgICNpbXBvcnQgIlpYaW5nT2JqQy5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9TdXBwb3J0aW5nIEZpbGVzL29zeC1QcmVmaXgucGNoIGIvWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9vc3gtUHJlZml4LnBjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzVhYzc3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvU3VwcG9ydGluZyBGaWxlcy9vc3gtUHJlZml4LnBjaApAQCAtMCwwICsxLDggQEAKKy8vCisvLyBQcmVmaXggaGVhZGVyIGZvciBhbGwgc291cmNlIGZpbGVzIG9mIHRoZSAnWlhpbmdPYmpDJyB0YXJnZXQgaW4gdGhlICdaWGluZ09iakMnIHByb2plY3QKKy8vCisKKyNpZmRlZiBfX09CSkNfXworICAjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorICAjaW1wb3J0ICJaWGluZ09iakMuaCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvWlhpbmdPYmpDVGVzdHMtSW5mby5wbGlzdCBiL1pYaW5nT2JqQ1Rlc3RzL1pYaW5nT2JqQ1Rlc3RzLUluZm8ucGxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZiYThkZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL1pYaW5nT2JqQ1Rlc3RzLUluZm8ucGxpc3QKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZlcnNpb249IjEuMCI+Cis8ZGljdD4KKwk8a2V5PkNGQnVuZGxlRGV2ZWxvcG1lbnRSZWdpb248L2tleT4KKwk8c3RyaW5nPmVuPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tleT4KKwk8c3RyaW5nPiR7RVhFQ1VUQUJMRV9OQU1FfTwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJZGVudGlmaWVyPC9rZXk+CisJPHN0cmluZz5jb20uenhpbmcuJHtQUk9EVUNUX05BTUU6cmZjMTAzNGlkZW50aWZpZXJ9PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgorCTxzdHJpbmc+Ni4wPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+CisJPHN0cmluZz5CTkRMPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5PgorCTxzdHJpbmc+MS4wPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVNpZ25hdHVyZTwva2V5PgorCTxzdHJpbmc+Pz8/Pzwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVWZXJzaW9uPC9rZXk+CisJPHN0cmluZz4xPC9zdHJpbmc+Cis8L2RpY3Q+Cis8L3BsaXN0PgpkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvYXp0ZWMvQXp0ZWNCbGFja0JveDFUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvYXp0ZWMvQXp0ZWNCbGFja0JveDFUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YWIwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9henRlYy9BenRlY0JsYWNrQm94MVRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLmgiCisKK0BpbnRlcmZhY2UgQXp0ZWNCbGFja0JveDFUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9henRlYy9BenRlY0JsYWNrQm94MVRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9henRlYy9BenRlY0JsYWNrQm94MVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkNjJlMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2F6dGVjL0F6dGVjQmxhY2tCb3gxVGVzdENhc2UubQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBenRlY0JsYWNrQm94MVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBBenRlY0JsYWNrQm94MVRlc3RDYXNlCisKKy0gKGlkKWluaXRXaXRoSW52b2NhdGlvbjooTlNJbnZvY2F0aW9uICopaW52b2NhdGlvbiB7CisgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnZvY2F0aW9uOmludm9jYXRpb24KKyAgICAgICAgICAgICAgICB0ZXN0QmFzZVBhdGhTdWZmaXg6QCJSZXNvdXJjZXMvYmxhY2tib3gvYXp0ZWMtMSIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWEF6dGVjUmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdEF6dGVjXTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6MTEgdHJ5SGFyZGVyQ291bnQ6MTEgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDoxMSB0cnlIYXJkZXJDb3VudDoxMSByb3RhdGlvbjo5MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDoxMSB0cnlIYXJkZXJDb3VudDoxMSByb3RhdGlvbjoxODAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MTEgdHJ5SGFyZGVyQ291bnQ6MTEgcm90YXRpb246MjcwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2F6dGVjL0F6dGVjQmxhY2tCb3gyVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL2F6dGVjL0F6dGVjQmxhY2tCb3gyVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2E1ZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvYXp0ZWMvQXp0ZWNCbGFja0JveDJUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIEF6dGVjQmxhY2tCb3gyVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvYXp0ZWMvQXp0ZWNCbGFja0JveDJUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvYXp0ZWMvQXp0ZWNCbGFja0JveDJUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzU1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9henRlYy9BenRlY0JsYWNrQm94MlRlc3RDYXNlLm0KQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQXp0ZWNCbGFja0JveDJUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gQXp0ZWNCbGFja0JveDJUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L2F6dGVjLTIiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhBenRlY1JlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRBenRlY107CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjIgdHJ5SGFyZGVyQ291bnQ6MiByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjIgdHJ5SGFyZGVyQ291bnQ6MiByb3RhdGlvbjo5MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDozIHRyeUhhcmRlckNvdW50OjMgcm90YXRpb246MTgwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjEgdHJ5SGFyZGVyQ291bnQ6MSByb3RhdGlvbjoyNzAuMGZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3N1cGVyIHJ1blRlc3RzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvYXp0ZWMvZW5jb2Rlci9aWEF6dGVjRW5jb2RlclRlc3QuaCBiL1pYaW5nT2JqQ1Rlc3RzL2F6dGVjL2VuY29kZXIvWlhBenRlY0VuY29kZXJUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4ZDJmOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2F6dGVjL2VuY29kZXIvWlhBenRlY0VuY29kZXJUZXN0LmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhBenRlY0VuY29kZXJUZXN0IDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvYXp0ZWMvZW5jb2Rlci9aWEF6dGVjRW5jb2RlclRlc3QubSBiL1pYaW5nT2JqQ1Rlc3RzL2F6dGVjL2VuY29kZXIvWlhBenRlY0VuY29kZXJUZXN0Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyZjIwOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2F6dGVjL2VuY29kZXIvWlhBenRlY0VuY29kZXJUZXN0Lm0KQEAgLTAsMCArMSw0MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQXp0ZWNFbmNvZGVyVGVzdC5oIgorCit1bnNpZ25lZCBpbnQgWlhBenRlY0VuY29kZXJUZXN0X1JBTkRPTV9TRUVEID0gMzczNTkyODU1OTsKKworQGltcGxlbWVudGF0aW9uIFpYQXp0ZWNFbmNvZGVyVGVzdAorCisvLyByZWFsIGxpZmUgdGVzdHMKKworLSAodm9pZCl0ZXN0RW5jb2RlMSB7CisgIFtzZWxmIHRlc3RFbmNvZGU6QCJUaGlzIGlzIGFuIGV4YW1wbGUgQXp0ZWMgc3ltYm9sIGZvciBXaWtpcGVkaWEuIiBjb21wYWN0OllFUyBsYXllcnM6MworICAgICAgICAgIGV4cGVjdGVkOgorICAgQCJYICAgICBYIFggICAgICAgWCAgICAgWCBYICAgICBYICAgICBYICAgICAgICAgXG4iCisgICAgIlggICAgICAgICBYICAgICBYIFggICAgIFggICBYIFggICBYIFggICAgICAgWCBcbiIKKyAgICAiWCBYICAgWCBYIFggWCBYICAgWCBYIFggICAgICAgICAgICAgICAgIFggICAgIFxuIgorICAgICJYIFggICAgICAgICAgICAgICAgIFggWCAgIFggICAgICAgWCBYIFggWCBYIFggXG4iCisgICAgIiAgICBYIFggWCAgIFggICBYICAgICBYIFggWCBYICAgICAgICAgWCBYICAgICBcbiIKKyAgICAiICBYIFggWCAgIFggWCBYIFggICBYICAgICBYICAgWCAgICAgWCBYICAgWCAgIFxuIgorICAgICIgICAgICAgIFggWCBYIFggWCAgICAgWCBYIFggWCAgIFggICBYICAgICBYICAgXG4iCisgICAgIlggICAgICAgWCAgIFggWCBYIFggWCBYIFggWCBYIFggWCAgICAgWCAgIFggWCBcbiIKKyAgICAiWCAgIFggICAgIFggWCBYICAgICAgICAgICAgICAgWCBYIFggWCAgIFggWCAgIFxuIgorICAgICJYICAgICBYIFggICBYIFggICBYIFggWCBYIFggICBYIFggICBYICAgWCBYIFggXG4iCisgICAgIlggICBYICAgICAgICAgWCAgIFggICAgICAgWCAgIFggWCBYIFggICAgICAgWCBcbiIKKyAgICAiWCAgICAgICBYICAgICBYICAgWCAgIFggICBYICAgWCAgIFggWCAgIFggICAgIFxuIgorICAgICIgICAgICBYICAgWCBYIFggICBYICAgICAgIFggICBYICAgICBYIFggWCAgICAgXG4iCisgICAgIiAgICBYIFggWCBYIFggWCAgIFggWCBYIFggWCAgIFggWCBYIFggWCBYICAgWCBcbiIKKyAgICAiICBYIFggICBYICAgWCBYICAgICAgICAgICAgICAgWCBYIFggICBYIFggWCBYIFxuIgorICAgICIgIFggICBYICAgICAgIFggWCBYIFggWCBYIFggWCBYIFggWCBYICAgWCBYICAgXG4iCisgICAgIiAgWCBYICAgWCAgICAgICBYIFggWCAgIFggWCBYICAgICAgIFggWCAgICAgICBcbiIKKyAgICAiICBYICAgICAgICAgICAgICAgWCAgIFggWCAgICAgWCAgICAgWCBYIFggICAgIFxuIgorICAgICIgIFggICBYIFggWCAgIFggWCAgIFggICBYIFggWCBYICAgWCAgIFggWCBYIFggXG4iCisgICAgIiAgICBYICAgWCAgIFggWCBYICAgWCAgIFggICBYIFggWCBYICAgICBYICAgICBcbiIKKyAgICAiICAgICAgICBYICAgICAgICAgICAgICAgWCAgICAgICAgICAgICAgICAgWCAgIFxuIgorICAgICIgICAgICAgIFggWCAgICAgWCAgIFggWCAgIFggICBYICAgWCAgICAgICBYIFggXG4iCisgICAgIiAgWCAgIFggICBYIFggICAgICAgWCAgIFggICAgICAgICBYIFggWCAgICAgWCBcbiJdOworfQorCistICh2b2lkKXRlc3RFbmNvZGUyIHsKKyAgW3NlbGYgdGVzdEVuY29kZToKKyAgIEAiQXp0ZWMgQ29kZSBpcyBhIHB1YmxpYyBkb21haW4gMkQgbWF0cml4IGJhcmNvZGUgc3ltYm9sb2d5IgorICAgICIgb2Ygbm9taW5hbGx5IHNxdWFyZSBzeW1ib2xzIGJ1aWx0IG9uIGEgc3F1YXJlIGdyaWQgd2l0aCBhICIKKyAgICAiZGlzdGluY3RpdmUgc3F1YXJlIGJ1bGxzZXllIHBhdHRlcm4gYXQgdGhlaXIgY2VudGVyLiIKKyAgICAgICAgICAgY29tcGFjdDpOTyBsYXllcnM6NiBleHBlY3RlZDoKKyAgIEAiICAgICAgICBYIFggICAgIFggWCAgICAgWCAgICAgWCAgICAgWCAgIFggWCBYICAgICAgICAgWCAgIFggICAgICAgICBYICAgWCBYICAgICAgIFxuIgorICAgICIgIFggICAgICAgWCBYICAgICBYICAgWCBYICAgWCBYICAgICAgIFggICAgICAgICAgICAgWCAgICAgWCAgIFggWCAgIFggICAgICAgICAgIFggXG4iCisgICAgIiAgWCAgIFggWCBYICAgICBYICAgWCAgIFggWCAgICAgWCBYIFggICBYICAgWCBYICAgICAgICAgICAgICAgWCBYICAgICAgIFggWCAgICAgWCBcbiIKKyAgICAiWCBYIFggICAgICAgICAgICAgWCAgIFggICAgICAgICBYICAgICAgICAgWCAgICAgWCAgICAgWCAgIFggICAgIFggWCAgICAgICBYICAgWCAgIFxuIgorICAgICJYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggXG4iCisgICAgIiAgICBYIFggICBYICAgWCAgIFggWCBYICAgICAgICAgICAgICAgWCAgICAgICBYICAgICAgIFggWCAgICAgWCBYICAgWCBYICAgICAgIFggICBcbiIKKyAgICAiWCBYICAgICBYICAgICAgIFggICAgICAgWCBYIFggWCAgIFggICBYIFggICAgICAgWCAgIFggWCAgIFggICAgICAgWCBYICAgWCBYICAgWCAgIFxuIgorICAgICIgIFggICAgICAgWCAgIFggICAgICAgICBYICAgICBYICAgWCAgICAgICAgIFggWCAgICAgICBYICAgICAgICAgWCAgICAgWCAgIFggICBYIFggXG4iCisgICAgIlggWCAgIFggWCAgIFggICBYICAgWCBYICAgICAgIFggWCAgICAgWCBYICAgICBYIFggWCAgIFggWCAgIFggWCAgIFggWCAgIFggWCBYICAgICBcbiIKKyAgICAiICBYICAgICAgIFggICBYICAgWCBYICAgICBYIFggICBYIFggICAgICAgICBYIFggWCAgIFggICAgIFggICAgIFggWCAgIFggICAgIFggWCBYIFxuIgorICAgICIgIFggICBYIFggWCAgIFggWCBYICAgWCAgIFggWCAgIFggICBYICAgWCBYICAgWCBYICAgWCBYIFggWCBYICAgWCBYIFggICBYIFggICAgIFggXG4iCisgICAgIiAgICBYICAgICBYICAgWCBYICAgWCAgIFggWCBYIFggICAgICAgWCAgICAgICBYICAgICAgIFggWCBYICAgICAgICAgWCBYICAgICBYICAgWCBcbiIKKyAgICAiWCBYIFggICBYICAgICAgICAgICBYIFggWCBYICAgICBYIFggWCBYIFggWCBYIFggICBYICAgICAgIFggWCBYICAgICBYICAgWCAgIFggICBYIFxuIgorICAgICIgICAgICAgICAgWCAgICAgICBYICAgWCBYIFggWCAgICAgWCAgIFggICAgICAgICAgIFggICBYIFggICAgICAgWCAgICAgICAgICAgICAgICAgXG4iCisgICAgIiAgWCAgICAgWCBYICAgWCAgIFggWCAgIFggWCBYIFggWCBYIFggWCBYIFggWCBYIFggWCBYIFggICBYIFggICAgICAgWCAgIFggWCBYICAgICBcbiIKKyAgICAiICAgIFggWCAgICAgICAgICAgWCBYICAgICAgIFggICAgICAgICAgICAgICAgICAgICAgIFggWCBYIFggWCBYICAgICAgICAgICAgIFggWCBYIFxuIgorICAgICIgICAgICAgIFggICBYIFggICBYIFggWCAgIFggWCAgIFggWCBYIFggWCBYIFggWCBYICAgWCAgIFggICAgICAgICAgICAgICBYIFggWCBYICAgXG4iCisgICAgIiAgICAgICAgICBYIFggWCAgICAgICBYICAgICBYICAgWCAgICAgICAgICAgICAgIFggICBYIFggICBYICAgICAgIFggWCBYICAgICAgICAgICBcbiIKKyAgICAiWCBYICAgICBYICAgICBYICAgWCAgICAgWCBYIFggICBYICAgWCBYIFggWCBYICAgWCAgIFggWCAgICAgICBYICAgICAgICAgWCAgIFggWCBYIFxuIgorICAgICJYIFggWCBYICAgICAgIFggICAgIFggICBYIFggWCAgIFggICBYICAgICAgIFggICBYICAgWCAgICAgICBYIFggWCAgIFggWCAgICAgICBYIFggXG4iCisgICAgIlggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCBcbiIKKyAgICAiICAgIFggICAgIFggICAgICAgWCAgICAgWCAgIFggICBYICAgWCAgICAgICBYICAgWCAgIFggICAgICAgWCAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICIgICAgICAgIFggWCAgICAgWCBYIFggWCBYICAgWCAgIFggICBYIFggWCBYIFggICBYICAgWCBYIFggICAgIFggICAgIFggICBYICAgICAgICAgXG4iCisgICAgIlggICAgIFggICBYICAgWCAgIFggWCBYIFggICBYICAgWCAgICAgICAgICAgICAgIFggICBYIFggWCAgIFggWCAgICAgWCAgICAgWCAgIFggICBcbiIKKyAgICAiICBYICAgWCBYIFggICBYICAgICBYIFggWCBYIFggICBYIFggWCBYIFggWCBYIFggWCAgIFggWCBYIFggWCAgICAgICAgICAgWCBYIFggWCAgIFxuIgorICAgICIgICAgWCBYICAgWCAgIFggICAgIFggWCAgICAgWCAgICAgICAgICAgICAgICAgICAgICAgWCBYIFggWCAgICAgICBYICAgWCAgICAgWCAgICAgXG4iCisgICAgIiAgICBYIFggWCBYICAgWCAgICAgICBYICAgICBYIFggWCBYIFggWCBYIFggWCBYIFggWCBYIFggICAgICAgWCAgICAgWCAgIFggWCAgIFggWCBcbiIKKyAgICAiICAgICAgICAgICAgWCAgIFggWCAgICAgWCAgICAgWCBYIFggWCBYICAgICBYIFggWCAgICAgICBYIFggWCBYIFggICBYICAgICAgICAgWCAgIFxuIgorICAgICJYICAgICAgIFggICAgICAgICBYICAgICAgICAgICBYIFggICBYIFggWCBYICAgWCBYICAgWCBYIFggICAgIFggWCAgIFggICBYICAgICAgIFggXG4iCisgICAgIlggICAgIFggICAgICAgWCBYICAgICBYICAgICBYIFggICAgIFggICAgICAgICAgICAgWCBYICAgWCAgICAgICBYICAgICBYICAgWCBYICAgICBcbiIKKyAgICAiICBYIFggWCBYIFggICAgICAgWCAgIFggICAgIFggICAgICAgICAgIFggICAgIFggICBYIFggWCBYICAgWCBYIFggWCAgICAgWCBYICAgWCBYIFxuIgorICAgICJYICAgICAgICAgICAgIFggICBYIFggWCAgICAgWCBYICAgICAgIFggICAgICAgWCBYICAgWCAgIFggWCAgICAgWCBYIFggICAgICAgICBYIFggXG4iCisgICAgIiAgICBYICAgWCBYICAgICAgIFggICAgIFggICAgICAgWCAgIFggWCBYIFggWCBYICAgWCBYICAgWCBYIFggWCBYIFggWCBYIFggICBYIFggICBcbiIKKyAgICAiICAgIFggICAgICAgICBYIFggICBYICAgICAgIFggICAgIFggICBYICAgWCAgICAgICBYICAgICBYIFggWCAgICAgWCAgICAgICBYIFggICAgIFxuIgorICAgICJYICAgICBYIFggICAgIFggWCBYIFggWCBYICAgICAgICAgICAgIFggWCBYICAgWCAgICAgICAgICAgICAgIFggICBYICAgICBYICAgICAgIFggXG4iCisgICAgIlggICBYIFggICAgIFggICAgICAgICAgICAgICBYIFggWCBYIFggICAgIFggWCAgICAgWCBYIFggWCBYIFggWCBYICAgICBYICAgWCAgIFggWCBcbiIKKyAgICAiWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYICAgWCAgIFggICBYIFxuIgorICAgICJYICAgICAgICAgICBYICAgICBYIFggWCBYICAgICBYICAgICBYICAgICAgICAgWCAgICAgICAgIFggICBYICAgICAgIFggWCAgIFggWCBYICAgXG4iCisgICAgIlggICBYICAgWCBYICAgWCBYIFggICBYICAgICAgICAgWCBYICAgICBYIFggWCBYICAgICBYIFggICBYICAgWCAgICAgWCAgIFggICAgICAgWCBcbiIKKyAgICAiICAgICAgWCAgICAgWCAgICAgWCAgICAgWCBYICAgICBYICAgWCBYICAgWCBYICAgWCAgICAgICAgIFggWCAgICAgICBYICAgICAgIFggICBYIFxuIgorICAgICJYICAgICAgIFggICAgICAgICAgIFggICBYICAgWCAgICAgWCBYICAgWCAgICAgICAgICAgICAgIFggICAgIFggICAgIFggWCBYICAgICAgICAgXG4iXTsKK30KKworLSAodm9pZCl0ZXN0QXp0ZWNXcml0ZXIgeworICBOU1N0cmluZyAqc2FtcGxlRGF0YSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWMgMSBzYW1wbGUgZGF0YS4iLCAweDIwQUNdOworICBbc2VsZiB0ZXN0V3JpdGVyOnNhbXBsZURhdGEgZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZyBlY2NQZXJjZW50OjI1IGNvbXBhY3Q6WUVTIGxheWVyczoyXTsKKyAgW3NlbGYgdGVzdFdyaXRlcjpAIlx1MjBBQyAxIHNhbXBsZSBkYXRhLiIgZW5jb2Rpbmc6KE5TU3RyaW5nRW5jb2RpbmcpIDB4ODAwMDAyMEYgZWNjUGVyY2VudDoyNSBjb21wYWN0OllFUyBsYXllcnM6Ml07CisgIFtzZWxmIHRlc3RXcml0ZXI6c2FtcGxlRGF0YSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlY2NQZXJjZW50OjI1IGNvbXBhY3Q6WUVTIGxheWVyczoyXTsKKyAgW3NlbGYgdGVzdFdyaXRlcjpzYW1wbGVEYXRhIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVjY1BlcmNlbnQ6MTAwIGNvbXBhY3Q6WUVTIGxheWVyczozXTsKKyAgW3NlbGYgdGVzdFdyaXRlcjpzYW1wbGVEYXRhIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVjY1BlcmNlbnQ6MzAwIGNvbXBhY3Q6WUVTIGxheWVyczo0XTsKKyAgW3NlbGYgdGVzdFdyaXRlcjpzYW1wbGVEYXRhIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVjY1BlcmNlbnQ6NTAwIGNvbXBhY3Q6Tk8gbGF5ZXJzOjVdOworICAvLyBUZXN0IEF6dGVjV3JpdGVyIGRlZmF1bHRzCisgIE5TU3RyaW5nICpkYXRhID0gQCJJbiB1dCBtYWduYSB2ZWwgbWF1cmlzIG1hbGVzdWFkYSI7CisgIFpYQXp0ZWNXcml0ZXIgKndyaXRlciA9IFtbWlhBenRlY1dyaXRlciBhbGxvY10gaW5pdF07CisgIFpYQml0TWF0cml4ICptYXRyaXggPSBbd3JpdGVyIGVuY29kZTpkYXRhIGZvcm1hdDprQmFyY29kZUZvcm1hdEF6dGVjIHdpZHRoOjAgaGVpZ2h0OjAgZXJyb3I6bmlsXTsKKyAgaW50OF90IGJ5dGVzWzQwOTZdOworICBbZGF0YSBnZXRDU3RyaW5nOihjaGFyICopYnl0ZXMgbWF4TGVuZ3RoOjQwOTYgZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ107CisgIGludCBieXRlc0xlbiA9IChpbnQpW2RhdGEgbGVuZ3RoT2ZCeXRlc1VzaW5nRW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ107CisgIFpYQXp0ZWNDb2RlICphenRlYyA9IFtaWEF6dGVjRW5jb2RlciBlbmNvZGU6Ynl0ZXMgbGVuOmJ5dGVzTGVuIG1pbkVDQ1BlcmNlbnQ6WlhfREVGQVVMVF9BWlRFQ19FQ19QRVJDRU5UXTsKKyAgWlhCaXRNYXRyaXggKmV4cGVjdGVkTWF0cml4ID0gYXp0ZWMubWF0cml4OworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhleHBlY3RlZE1hdHJpeCwgbWF0cml4LCBAIkV4cGVjdGVkIG1hdHJpY2VzIHRvIGJlIGVxdWFsIik7Cit9CisKKy8vIHN5bnRoZXRpYyB0ZXN0cyAoZW5jb2RlLWRlY29kZSByb3VuZC10cmlwKQorCistICh2b2lkKXRlc3RFbmNvZGVEZWNvZGUxIHsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZTpAIkFiYzEyMyEiIGNvbXBhY3Q6WUVTIGxheWVyczoxXTsKK30KKworLSAodm9pZCl0ZXN0RW5jb2RlRGVjb2RlMiB7CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGU6QCJMb3JlbSBpcHN1bS4gaHR0cDovL3Rlc3QvIiBjb21wYWN0OllFUyBsYXllcnM6Ml07Cit9CisKKy0gKHZvaWQpdGVzdEVuY29kZURlY29kZTMgeworICBbc2VsZiB0ZXN0RW5jb2RlRGVjb2RlOkAiQUFBQU5BQUFBTkFBQUFOQUFBQU5BQUFBTkFBQUFOQUFBQU5BQUFBTkFBQUFOQUFBQU4iIGNvbXBhY3Q6WUVTIGxheWVyczozXTsKK30KKworLSAodm9pZCl0ZXN0RW5jb2RlRGVjb2RlNCB7CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGU6QCJodHRwOi8vdGVzdC9+IUAjKl4lJilfXyA7OidcIltde31cXHwtKy09YDEwMjkzODQiIGNvbXBhY3Q6WUVTIGxheWVyczo0XTsKK30KKworLSAodm9pZCl0ZXN0RW5jb2RlRGVjb2RlNSB7CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGU6QCJodHRwOi8vdGVzdC9+IUAjKl4lJilfXyA7OidcIltde31cXHwtKy09YDEwMjkzODQ3NTY8Pi8/YWJjIiBjb21wYWN0Ok5PIGxheWVyczo1XTsKK30KKworLSAodm9pZCl0ZXN0RW5jb2RlRGVjb2RlMTAgeworICBbc2VsZiB0ZXN0RW5jb2RlRGVjb2RlOgorICAgQCJJbiB1dCBtYWduYSB2ZWwgbWF1cmlzIG1hbGVzdWFkYSBkaWN0dW0uIE51bGxhIHVsbGFtY29ycGVyIG1ldHVzIHF1aXMgZGlhbSIKKyAgICAiIGN1cnN1cyBmYWNpbGlzaXMuIFNlZCBtb2xsaXMgcXVhbSBpZCBqdXN0byBydXRydW0gc2FnaXR0aXMuIERvbmVjIGxhb3JlZXQgcnV0cnVtIgorICAgICIgZXN0LCBuZWMgY29udmFsbGlzIG1hdXJpcyBjb25kaW1lbnR1bSBzaXQgYW1ldC4gUGhhc2VsbHVzIGdyYXZpZGEsIGp1c3RvIGV0IGNvbmd1ZSIKKyAgICAiIGF1Y3RvciwgbmlzaSBpcHN1bSB2aXZlcnJhIGVyYXQsIGVnZXQgaGVuZHJlcml0IGZlbGlzIHR1cnBpcyBuZWMgbG9yZW0uIE51bGxhIgorICAgICIgdWx0cmljZXMsIGVsaXQgcGVsbGVudGVzcXVlIGFsaXF1ZXQgbGFvcmVldCwganVzdG8gZXJhdCBwdWx2aW5hciBuaXNpLCBpZCIKKyAgICAiIGVsZW1lbnR1bSBzYXBpZW4gZG9sb3IgZXQgZGlhbS4iCisgICAgICAgICAgICAgICAgIGNvbXBhY3Q6Tk8gbGF5ZXJzOjEwXTsKK30KKworLSAodm9pZCl0ZXN0RW5jb2RlRGVjb2RlMjMgeworICBbc2VsZiB0ZXN0RW5jb2RlRGVjb2RlOgorICAgQCJJbiB1dCBtYWduYSB2ZWwgbWF1cmlzIG1hbGVzdWFkYSBkaWN0dW0uIE51bGxhIHVsbGFtY29ycGVyIG1ldHVzIHF1aXMgZGlhbSIKKyAgICIgY3Vyc3VzIGZhY2lsaXNpcy4gU2VkIG1vbGxpcyBxdWFtIGlkIGp1c3RvIHJ1dHJ1bSBzYWdpdHRpcy4gRG9uZWMgbGFvcmVldCBydXRydW0iCisgICAiIGVzdCwgbmVjIGNvbnZhbGxpcyBtYXVyaXMgY29uZGltZW50dW0gc2l0IGFtZXQuIFBoYXNlbGx1cyBncmF2aWRhLCBqdXN0byBldCBjb25ndWUiCisgICAiIGF1Y3RvciwgbmlzaSBpcHN1bSB2aXZlcnJhIGVyYXQsIGVnZXQgaGVuZHJlcml0IGZlbGlzIHR1cnBpcyBuZWMgbG9yZW0uIE51bGxhIgorICAgIiB1bHRyaWNlcywgZWxpdCBwZWxsZW50ZXNxdWUgYWxpcXVldCBsYW9yZWV0LCBqdXN0byBlcmF0IHB1bHZpbmFyIG5pc2ksIGlkIgorICAgIiBlbGVtZW50dW0gc2FwaWVuIGRvbG9yIGV0IGRpYW0uIERvbmVjIGFjIG51bmMgc29kYWxlcyBlbGl0IHBsYWNlcmF0IGVsZWlmZW5kLiIKKyAgICIgU2VkIG9ybmFyZSBsdWN0dXMgb3JuYXJlLiBWZXN0aWJ1bHVtIHZlaGljdWxhLCBtYXNzYSBhdCBwaGFyZXRyYSBmcmluZ2lsbGEsIHJpc3VzIgorICAgIiBqdXN0byBmYXVjaWJ1cyBlcmF0LCBuZWMgcG9ydHRpdG9yIG5pYmggdGVsbHVzIHNlZCBlc3QuIFV0IGp1c3RvIGRpYW0sIGxvYm9ydGlzIGV1IgorICAgIiB0cmlzdGlxdWUgYWMsIHAuSW4gdXQgbWFnbmEgdmVsIG1hdXJpcyBtYWxlc3VhZGEgZGljdHVtLiBOdWxsYSB1bGxhbWNvcnBlciBtZXR1cyIKKyAgICIgcXVpcyBkaWFtIGN1cnN1cyBmYWNpbGlzaXMuIFNlZCBtb2xsaXMgcXVhbSBpZCBqdXN0byBydXRydW0gc2FnaXR0aXMuIERvbmVjIgorICAgIiBsYW9yZWV0IHJ1dHJ1bSBlc3QsIG5lYyBjb252YWxsaXMgbWF1cmlzIGNvbmRpbWVudHVtIHNpdCBhbWV0LiBQaGFzZWxsdXMgZ3JhdmlkYSwiCisgICAiIGp1c3RvIGV0IGNvbmd1ZSBhdWN0b3IsIG5pc2kgaXBzdW0gdml2ZXJyYSBlcmF0LCBlZ2V0IGhlbmRyZXJpdCBmZWxpcyB0dXJwaXMgbmVjIgorICAgIiBsb3JlbS4gTnVsbGEgdWx0cmljZXMsIGVsaXQgcGVsbGVudGVzcXVlIGFsaXF1ZXQgbGFvcmVldCwganVzdG8gZXJhdCBwdWx2aW5hciIKKyAgICIgbmlzaSwgaWQgZWxlbWVudHVtIHNhcGllbiBkb2xvciBldCBkaWFtLiBEb25lYyBhYyBudW5jIHNvZGFsZXMgZWxpdCBwbGFjZXJhdCIKKyAgICIgZWxlaWZlbmQuIFNlZCBvcm5hcmUgbHVjdHVzIG9ybmFyZS4gVmVzdGlidWx1bSB2ZWhpY3VsYSwgbWFzc2EgYXQgcGhhcmV0cmEiCisgICAiIGZyaW5naWxsYSwgcmlzdXMganVzdG8gZmF1Y2lidXMgZXJhdCwgbmVjIHBvcnR0aXRvciBuaWJoIHRlbGx1cyBzZWQgZXN0LiBVdCBqdXN0byIKKyAgICIgZGlhbSwgbG9ib3J0aXMgZXUgdHJpc3RpcXVlIGFjLCBwLiBJbiB1dCBtYWduYSB2ZWwgbWF1cmlzIG1hbGVzdWFkYSBkaWN0dW0uIE51bGxhIgorICAgIiB1bGxhbWNvcnBlciBtZXR1cyBxdWlzIGRpYW0gY3Vyc3VzIGZhY2lsaXNpcy4gU2VkIG1vbGxpcyBxdWFtIGlkIGp1c3RvIHJ1dHJ1bSIKKyAgICIgc2FnaXR0aXMuIERvbmVjIGxhb3JlZXQgcnV0cnVtIGVzdCwgbmVjIGNvbnZhbGxpcyBtYXVyaXMgY29uZGltZW50dW0gc2l0IGFtZXQuIgorICAgIiBQaGFzZWxsdXMgZ3JhdmlkYSwganVzdG8gZXQgY29uZ3VlIGF1Y3RvciwgbmlzaSBpcHN1bSB2aXZlcnJhIGVyYXQsIGVnZXQgaGVuZHJlcml0IgorICAgIiBmZWxpcyB0dXJwaXMgbmVjIGxvcmVtLiBOdWxsYSB1bHRyaWNlcywgZWxpdCBwZWxsZW50ZXNxdWUgYWxpcXVldCBsYW9yZWV0LCBqdXN0byIKKyAgICIgZXJhdCBwdWx2aW5hciBuaXNpLCBpZCBlbGVtZW50dW0gc2FwaWVuIGRvbG9yIGV0IGRpYW0uIgorICAgICAgICAgICAgICAgICBjb21wYWN0Ok5PIGxheWVyczoyM107Cit9CisKKy0gKHZvaWQpdGVzdEVuY29kZURlY29kZTMxIHsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZToKKyAgIEAiSW4gdXQgbWFnbmEgdmVsIG1hdXJpcyBtYWxlc3VhZGEgZGljdHVtLiBOdWxsYSB1bGxhbWNvcnBlciBtZXR1cyBxdWlzIGRpYW0iCisgICAiIGN1cnN1cyBmYWNpbGlzaXMuIFNlZCBtb2xsaXMgcXVhbSBpZCBqdXN0byBydXRydW0gc2FnaXR0aXMuIERvbmVjIGxhb3JlZXQgcnV0cnVtIgorICAgIiBlc3QsIG5lYyBjb252YWxsaXMgbWF1cmlzIGNvbmRpbWVudHVtIHNpdCBhbWV0LiBQaGFzZWxsdXMgZ3JhdmlkYSwganVzdG8gZXQgY29uZ3VlIgorICAgIiBhdWN0b3IsIG5pc2kgaXBzdW0gdml2ZXJyYSBlcmF0LCBlZ2V0IGhlbmRyZXJpdCBmZWxpcyB0dXJwaXMgbmVjIGxvcmVtLiBOdWxsYSIKKyAgICIgdWx0cmljZXMsIGVsaXQgcGVsbGVudGVzcXVlIGFsaXF1ZXQgbGFvcmVldCwganVzdG8gZXJhdCBwdWx2aW5hciBuaXNpLCBpZCIKKyAgICIgZWxlbWVudHVtIHNhcGllbiBkb2xvciBldCBkaWFtLiBEb25lYyBhYyBudW5jIHNvZGFsZXMgZWxpdCBwbGFjZXJhdCBlbGVpZmVuZC4iCisgICAiIFNlZCBvcm5hcmUgbHVjdHVzIG9ybmFyZS4gVmVzdGlidWx1bSB2ZWhpY3VsYSwgbWFzc2EgYXQgcGhhcmV0cmEgZnJpbmdpbGxhLCByaXN1cyIKKyAgICIganVzdG8gZmF1Y2lidXMgZXJhdCwgbmVjIHBvcnR0aXRvciBuaWJoIHRlbGx1cyBzZWQgZXN0LiBVdCBqdXN0byBkaWFtLCBsb2JvcnRpcyBldSIKKyAgICIgdHJpc3RpcXVlIGFjLCBwLkluIHV0IG1hZ25hIHZlbCBtYXVyaXMgbWFsZXN1YWRhIGRpY3R1bS4gTnVsbGEgdWxsYW1jb3JwZXIgbWV0dXMiCisgICAiIHF1aXMgZGlhbSBjdXJzdXMgZmFjaWxpc2lzLiBTZWQgbW9sbGlzIHF1YW0gaWQganVzdG8gcnV0cnVtIHNhZ2l0dGlzLiBEb25lYyIKKyAgICIgbGFvcmVldCBydXRydW0gZXN0LCBuZWMgY29udmFsbGlzIG1hdXJpcyBjb25kaW1lbnR1bSBzaXQgYW1ldC4gUGhhc2VsbHVzIGdyYXZpZGEsIgorICAgIiBqdXN0byBldCBjb25ndWUgYXVjdG9yLCBuaXNpIGlwc3VtIHZpdmVycmEgZXJhdCwgZWdldCBoZW5kcmVyaXQgZmVsaXMgdHVycGlzIG5lYyIKKyAgICIgbG9yZW0uIE51bGxhIHVsdHJpY2VzLCBlbGl0IHBlbGxlbnRlc3F1ZSBhbGlxdWV0IGxhb3JlZXQsIGp1c3RvIGVyYXQgcHVsdmluYXIiCisgICAiIG5pc2ksIGlkIGVsZW1lbnR1bSBzYXBpZW4gZG9sb3IgZXQgZGlhbS4gRG9uZWMgYWMgbnVuYyBzb2RhbGVzIGVsaXQgcGxhY2VyYXQiCisgICAiIGVsZWlmZW5kLiBTZWQgb3JuYXJlIGx1Y3R1cyBvcm5hcmUuIFZlc3RpYnVsdW0gdmVoaWN1bGEsIG1hc3NhIGF0IHBoYXJldHJhIgorICAgIiBmcmluZ2lsbGEsIHJpc3VzIGp1c3RvIGZhdWNpYnVzIGVyYXQsIG5lYyBwb3J0dGl0b3IgbmliaCB0ZWxsdXMgc2VkIGVzdC4gVXQganVzdG8iCisgICAiIGRpYW0sIGxvYm9ydGlzIGV1IHRyaXN0aXF1ZSBhYywgcC4gSW4gdXQgbWFnbmEgdmVsIG1hdXJpcyBtYWxlc3VhZGEgZGljdHVtLiBOdWxsYSIKKyAgICIgdWxsYW1jb3JwZXIgbWV0dXMgcXVpcyBkaWFtIGN1cnN1cyBmYWNpbGlzaXMuIFNlZCBtb2xsaXMgcXVhbSBpZCBqdXN0byBydXRydW0iCisgICAiIHNhZ2l0dGlzLiBEb25lYyBsYW9yZWV0IHJ1dHJ1bSBlc3QsIG5lYyBjb252YWxsaXMgbWF1cmlzIGNvbmRpbWVudHVtIHNpdCBhbWV0LiIKKyAgICIgUGhhc2VsbHVzIGdyYXZpZGEsIGp1c3RvIGV0IGNvbmd1ZSBhdWN0b3IsIG5pc2kgaXBzdW0gdml2ZXJyYSBlcmF0LCBlZ2V0IGhlbmRyZXJpdCIKKyAgICIgZmVsaXMgdHVycGlzIG5lYyBsb3JlbS4gTnVsbGEgdWx0cmljZXMsIGVsaXQgcGVsbGVudGVzcXVlIGFsaXF1ZXQgbGFvcmVldCwganVzdG8iCisgICAiIGVyYXQgcHVsdmluYXIgbmlzaSwgaWQgZWxlbWVudHVtIHNhcGllbiBkb2xvciBldCBkaWFtLiBEb25lYyBhYyBudW5jIHNvZGFsZXMgZWxpdCIKKyAgICIgcGxhY2VyYXQgZWxlaWZlbmQuIFNlZCBvcm5hcmUgbHVjdHVzIG9ybmFyZS4gVmVzdGlidWx1bSB2ZWhpY3VsYSwgbWFzc2EgYXQiCisgICAiIHBoYXJldHJhIGZyaW5naWxsYSwgcmlzdXMganVzdG8gZmF1Y2lidXMgZXJhdCwgbmVjIHBvcnR0aXRvciBuaWJoIHRlbGx1cyBzZWQgZXN0LiIKKyAgICIgVXQganVzdG8gZGlhbSwgbG9ib3J0aXMgZXUgdHJpc3RpcXVlIGFjLCBwLkluIHV0IG1hZ25hIHZlbCBtYXVyaXMgbWFsZXN1YWRhIgorICAgIiBkaWN0dW0uIE51bGxhIHVsbGFtY29ycGVyIG1ldHVzIHF1aXMgZGlhbSBjdXJzdXMgZmFjaWxpc2lzLiBTZWQgbW9sbGlzIHF1YW0gaWQiCisgICAiIGp1c3RvIHJ1dHJ1bSBzYWdpdHRpcy4gRG9uZWMgbGFvcmVldCBydXRydW0gZXN0LCBuZWMgY29udmFsbGlzIG1hdXJpcyBjb25kaW1lbnR1bSIKKyAgICIgc2l0IGFtZXQuIFBoYXNlbGx1cyBncmF2aWRhLCBqdXN0byBldCBjb25ndWUgYXVjdG9yLCBuaXNpIGlwc3VtIHZpdmVycmEgZXJhdCwiCisgICAiIGVnZXQgaGVuZHJlcml0IGZlbGlzIHR1cnBpcyBuZWMgbG9yZW0uIE51bGxhIHVsdHJpY2VzLCBlbGl0IHBlbGxlbnRlc3F1ZSBhbGlxdWV0IgorICAgIiBsYW9yZWV0LCBqdXN0byBlcmF0IHB1bHZpbmFyIG5pc2ksIGlkIGVsZW1lbnR1bSBzYXBpZW4gZG9sb3IgZXQgZGlhbS4gRG9uZWMgYWMiCisgICAiIG51bmMgc29kYWxlcyBlbGl0IHBsYWNlcmF0IGVsZWlmZW5kLiBTZWQgb3JuYXJlIGx1Y3R1cyBvcm5hcmUuIFZlc3RpYnVsdW0gdmVoaWN1bGEsIgorICAgIiBtYXNzYSBhdCBwaGFyZXRyYSBmcmluZ2lsbGEsIHJpc3VzIGp1c3RvIGZhdWNpYnVzIGVyYXQsIG5lYyBwb3J0dGl0b3IgbmliaCB0ZWxsdXMiCisgICAiIHNlZCBlc3QuIFV0IGp1c3RvIGRpYW0sIGxvYm9ydGlzIGV1IHRyaXMuIEluIHV0IG1hZ25hIHZlbCBtYXVyaXMgbWFsZXN1YWRhIGRpY3R1bS4iCisgICAiIE51bGxhIHVsbGFtY29ycGVyIG1ldHVzIHF1aXMgZGlhbSBjdXJzdXMgZmFjaWxpc2lzLiBTZWQgbW9sbGlzIHF1YW0gaWQganVzdG8gcnV0cnVtIgorICAgIiBzYWdpdHRpcy4gRG9uZWMgbGFvcmVldCBydXRydW0gZXN0LCBuZWMgY29udmFsbGlzIG1hdXJpcyBjb25kaW1lbnR1bSBzaXQgYW1ldC4iCisgICAiIFBoYXNlbGx1cyBncmF2aWRhLCBqdXN0byBldCBjb25ndWUgYXVjdG9yLCBuaXNpIGlwc3VtIHZpdmVycmEgZXJhdCwgZWdldCIKKyAgICIgaGVuZHJlcml0IGZlbGlzIHR1cnBpcyBuZWMgbG9yZW0uIgorICAgICAgICAgICAgICAgICBjb21wYWN0Ok5PIGxheWVyczozMV07Cit9CisKKy0gKHZvaWQpdGVzdEdlbmVyYXRlTW9kZU1lc3NhZ2UgeworICBbc2VsZiB0ZXN0TW9kZU1lc3NhZ2VDb21wYWN0OllFUyBsYXllcnM6MiB3b3JkczoyOSBleHBlY3RlZDpAIi5YIC5YWFguLiAuLi5YIFhYLi4gLi5YIC5YWC4gLlhYLlgiXTsKKyAgW3NlbGYgdGVzdE1vZGVNZXNzYWdlQ29tcGFjdDpZRVMgbGF5ZXJzOjQgd29yZHM6NjQgZXhwZWN0ZWQ6QCJYWCBYWFhYWFggLlguLiAuLi5YIC4uWFggLlguLiBYWC4uIl07CisgIFtzZWxmIHRlc3RNb2RlTWVzc2FnZUNvbXBhY3Q6Tk8gbGF5ZXJzOjIxIHdvcmRzOjY2MCBleHBlY3RlZDpAIlguWC4uIC5YLlguLlguLlhYIC5YWFggLi5YLi4gLlhYWC4gLlguLi4gLi5YWFgiXTsKKyAgW3NlbGYgdGVzdE1vZGVNZXNzYWdlQ29tcGFjdDpOTyBsYXllcnM6MzIgd29yZHM6NDA5NiBleHBlY3RlZDpAIlhYWFhYIFhYWFhYWFhYWFhYIFguWC4gLi4uLi4gWFhYLlggLi5YLi4gWC5YWFgiXTsKK30KKworLSAodm9pZCl0ZXN0U3R1ZmZCaXRzIHsKKyAgW3NlbGYgdGVzdFN0dWZmQml0czo1IGJpdHM6QCIuWC5YLiBYLlguWCAuWC5YLiIgZXhwZWN0ZWQ6QCIuWC5YLiBYLlguWCAuWC5YLiJdOworICBbc2VsZiB0ZXN0U3R1ZmZCaXRzOjUgYml0czpAIi5YLlguIC4uLi4uIC5YLlgiCisgICAgICAgICAgICAgZXhwZWN0ZWQ6QCIuWC5YLiAuLi4uWCAuLlguWCJdOworICBbc2VsZiB0ZXN0U3R1ZmZCaXRzOjMgYml0czpAIlhYLiAuLi4gLi4uIC4uWCBYWFggLlguIC4uIgorICAgICAgICAgICAgIGV4cGVjdGVkOkAiWFguIC4uWCAuLlggLi5YIC4uWCAuWFggWFguIC5YLiAuLlgiXTsKKyAgW3NlbGYgdGVzdFN0dWZmQml0czo2IGJpdHM6QCIuWC5YLi4gLi4uLi4uIC4uWC5YWCIKKyAgICAgICAgICAgICBleHBlY3RlZDpAIi5YLlguLiAuLi4uLlguIC4uWC5YWCBYWFhYLiJdOworICBbc2VsZiB0ZXN0U3R1ZmZCaXRzOjYgYml0czpAIi5YLlguLiAuLi4uLi4gLi4uLi4uIC4uWC5YLiIKKyAgICAgICAgICAgICBleHBlY3RlZDpAIi5YLlguLiAuLi4uLlggLi4uLi5YIC4uLi5YLiBYLlhYWFgiXTsKKyAgW3NlbGYgdGVzdFN0dWZmQml0czo2IGJpdHM6QCIuWC5YLi4gWFhYWFhYIC4uLi4uLiAuLlguWFgiCisgICAgICAgICAgICAgZXhwZWN0ZWQ6QCIuWC5YLi4gWFhYWFguIFguLi4uLiAuLi5YLlggWFhYWFguIl07CisgIFtzZWxmIHRlc3RTdHVmZkJpdHM6NgorICAgICAgICAgICAgICAgICBiaXRzOkAiLi4uLi4uIC4uWFhYWCBYLi5YWC4gLlguLi4uIC5YLlguWCAuLi4uLlggLlguLi4uIC4uLlguWCAuLi4uLlggLi4uLlhYIC4uWC4uLiAuLi4uWC4gWC4uWFhYIFguWFguWCIKKyAgICAgICAgICAgICBleHBlY3RlZDpAIi4uLi4uWCAuLi5YWFggWFguLlhYIC4uWC4uLiAuLlguWC4gWC4uLi4uIFguWC4uLiAuLi4uWC4gWC4uLi4uIFguLi4uWCBYLi5YLi4gLi4uLi5YIFguWC4uWCBYWFguWFggLlhYWFhYIl07Cit9CisKKy0gKHZvaWQpdGVzdEhpZ2hMZXZlbEVuY29kZSB7CisgIFtzZWxmIHRlc3RIaWdoTGV2ZWxFbmNvZGVTdHJpbmc6QCJBLiBiLiIKKyAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQml0czpAIi4uLlguIC4uLi4uIC4uLlhYIFhYWC4uIC4uLlhYIFhYWFguIFhYLlgiXTsKKyAgW3NlbGYgdGVzdEhpZ2hMZXZlbEVuY29kZVN0cmluZzpAIkxvcmVtIGlwc3VtLiIKKyAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQml0czpAIi5YWC5YIFhYWC4uIFguLi4uIFguLlhYIC4uWFguIC5YWFguIC4uLi5YIC5YLlguIFguLi5YIFguWC4uIFguWFguIC5YWFguIFhYWFguIFhYLlgiXTsKKyAgW3NlbGYgdGVzdEhpZ2hMZXZlbEVuY29kZVN0cmluZzpAIkxvLiBUZXN0IDEyMy4iCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEJpdHM6QCIuWFguWCBYWFguLiBYLi4uLiAuLi4uLiAuLi5YWCBYWFguLiBYLlguWCAuLlhYLiBYLlguLiBYLlguWCAuLi4uWCBYWFhYLiAuLlhYIC5YLi4gLlguWCBYWC5YIl07CisgIFtzZWxmIHRlc3RIaWdoTGV2ZWxFbmNvZGVTdHJpbmc6QCJMby4uLngiCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEJpdHM6QCIuWFguWCBYWFguLiBYLi4uLiBYWFhYLiBYWC5YIFhYLlggWFguWCBYWFguIFhYWC4uIFhYLi5YIl07CisgIFtzZWxmIHRlc3RIaWdoTGV2ZWxFbmNvZGVTdHJpbmc6QCIuIHg6Ly9hYmMvLiIKKyAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQml0czpAIi4uLi4uIC4uLlhYIFhYWC4uIFhYLi5YIC4uLi4uIFguWC5YIC4uLi4uIFguWC4uIC4uLi4uIFguWC4uIC4uLlguIC4uLlhYIC4uWC4uIC4uLi4uIFguWC4uIFhYWFguIFhYLlgiXTsKK30KKworLSAodm9pZCl0ZXN0SGlnaExldmVsRW5jb2RlQmluYXJ5IHsKKyAgLy8gYmluYXJ5IHNob3J0IGZvcm0gc2luZ2xlIGJ5dGUKKyAgW3NlbGYgdGVzdEhpZ2hMZXZlbEVuY29kZVN0cmluZzpAIk5cME4iCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEJpdHM6QCIuWFhYWCBYWFhYWCAuLi5YLiAuLi4uLi4uLiAuWC4uWFhYLiJdOworICAvLyBiaW5hcnkgc2hvcnQgZm9ybSBjb25zZWN1dGl2ZSBieXRlcworICBbc2VsZiB0ZXN0SGlnaExldmVsRW5jb2RlU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiTlwwJUMgQSIsIDB4MDA4MF0KKyAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQml0czpAIi5YWFhYIFhYWFhYIC4uLlguIC4uLi4uLi4uIFguLi4uLi4uIC4uLi5YIC4uLlguIl07CisgIC8vIGJpbmFyeSBza2lwcGluZyBvdmVyIHNpbmdsZSBjaGFyYWN0ZXIKKyAgW3NlbGYgdGVzdEhpZ2hMZXZlbEVuY29kZVN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlwwYSVDJUMgQSIsIDB4MDBGRiwgMHgwMDgwXQorICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRCaXRzOkAiWFhYWFggLi5YLi4gLi4uLi4uLi4gLlhYLi4uLlggWFhYWFhYWFggWC4uLi4uLi4gLi4uLlggLi4uWC4iXTsKKyAgLy8gYmluYXJ5IGxvbmcgZm9ybSBvcHRpbWl6YXRpb24gaW50byAyIHNob3J0IGZvcm1zIChzYXZlcyAxIGJpdCkKKyAgW3NlbGYgdGVzdEhpZ2hMZXZlbEVuY29kZVN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlwwXDBcMFwwIFwwXDBcMFwwIFwwXDBcMFwwIFwwXDBcMFwwIFwwXDBcMFwwIFwwXDBcMFwwICVDJUMlQ1wwIFwwXDBcMFwwIFwwXDBcMFwwICIsIDB4MDA4MiwgMHgwMDg0LCAweDAwODhdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRCaXRzOgorICAgQCJYWFhYWCBYWFhYWCAuLi4uLi4uLiAuLi4uLi4uLiAuLi4uLi4uLiAuLi4uLi4uLiAuLlguLi4uLiIKKyAgICAiIC4uLi4uLi4uIC4uLi4uLi4uIC4uLi4uLi4uIC4uLi4uLi4uIC4uWC4uLi4uIgorICAgICIgLi4uLi4uLi4gLi4uLi4uLi4gLi4uLi4uLi4gLi4uLi4uLi4gLi5YLi4uLi4iCisgICAgIiAuLi4uLi4uLiAuLi4uLi4uLiAuLi4uLi4uLiAuLi4uLi4uLiAuLlguLi4uLiIKKyAgICAiIC4uLi4uLi4uIC4uLi4uLi4uIC4uLi4uLi4uIC4uLi4uLi4uIC4uWC4uLi4uIgorICAgICIgLi4uLi4uLi4gLi4uLi4uLi4gLi4uLi4uLi4gLi4uLi4uLi4gLi5YLi4uLi4iCisgICAgIiBYLi4uLi5YLiBYWFhYWCAuWFhYLiBYLi4uLlguLiBYLi4uWC4uLiAuLi4uLi4uLiAuLlguLi4uLiIKKyAgICAiIC4uLi4uLi4uIC4uLi4uLi4uIC4uLi4uLi4uIC4uLi4uLi4uIC4uWC4uLi4uIgorICAgICIgLi4uLi4uLi4gLi4uLi4uLi4gLi4uLi4uLi4gLi4uLi4uLi4gLi5YLi4uLi4iXTsKKyAgLy8gYmluYXJ5IGxvbmcgZm9ybQorICBbc2VsZiB0ZXN0SGlnaExldmVsRW5jb2RlU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiXDBcMFwwXDAgXDBcMFwxXDAgXDBcMFwyXDAgXDBcMFwzXDAgXDBcMFw0XDAgXDBcMFw1XDAgXDBcMFw2XDAgXDBcMFw3XDAgXDBcMCVDXDAgXDBcMCVDXDAgXDBcMFx1MDBGMFwwIFwwXDBcdTAwRjFcMCBcMFwwXHUwMEYyXDBBIiwgMHgwMDA4LCAweDAwMDldCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEJpdHM6CisgICBAIlhYWFhYIC4uLi4uIC4uLi4uWC4uLlguIC4uLi4uLi4uIC4uLi4uLi4uIC4uLi4uLi4uIC4uLi4uLi4uIC4uWC4uLi4uIgorICAgICIgLi4uLi4uLi4gLi4uLi4uLi4gLi4uLi4uLlggLi4uLi4uLi4gLi5YLi4uLi4iCisgICAgIiAuLi4uLi4uLiAuLi4uLi4uLiAuLi4uLi5YLiAuLi4uLi4uLiAuLlguLi4uLiIKKyAgICAiIC4uLi4uLi4uIC4uLi4uLi4uIC4uLi4uLlhYIC4uLi4uLi4uIC4uWC4uLi4uIgorICAgICIgLi4uLi4uLi4gLi4uLi4uLi4gLi4uLi5YLi4gLi4uLi4uLi4gLi5YLi4uLi4iCisgICAgIiAuLi4uLi4uLiAuLi4uLi4uLiAuLi4uLlguWCAuLi4uLi4uLiAuLlguLi4uLiIKKyAgICAiIC4uLi4uLi4uIC4uLi4uLi4uIC4uLi4uWFguIC4uLi4uLi4uIC4uWC4uLi4uIgorICAgICIgLi4uLi4uLi4gLi4uLi4uLi4gLi4uLi5YWFggLi4uLi4uLi4gLi5YLi4uLi4iCisgICAgIiAuLi4uLi4uLiAuLi4uLi4uLiAuLi4uWC4uLiAuLi4uLi4uLiAuLlguLi4uLiIKKyAgICAiIC4uLi4uLi4uIC4uLi4uLi4uIC4uLi5YLi5YIC4uLi4uLi4uIC4uWC4uLi4uIgorICAgICIgLi4uLi4uLi4gLi4uLi4uLi4gWFhYWC4uLi4gLi4uLi4uLi4gLi5YLi4uLi4iCisgICAgIiAuLi4uLi4uLiAuLi4uLi4uLiBYWFhYLi4uWCAuLi4uLi4uLiAuLlguLi4uLiIKKyAgICAiIC4uLi4uLi4uIC4uLi4uLi4uIFhYWFguLlguIC4uLi4uLi4uIC5YLi4uLi5YIl07Cit9CisKKy8vIEhlbHBlciByb3V0aW5lcworCistICh2b2lkKXRlc3RFbmNvZGU6KE5TU3RyaW5nICopZGF0YSBjb21wYWN0OihCT09MKWNvbXBhY3QgbGF5ZXJzOihpbnQpbGF5ZXJzIGV4cGVjdGVkOihOU1N0cmluZyAqKWV4cGVjdGVkIHsKKyAgaW50OF90IGJ5dGVzWzQwOTZdOworICBbZGF0YSBnZXRDU3RyaW5nOihjaGFyICopYnl0ZXMgbWF4TGVuZ3RoOjQwOTYgZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ107CisgIGludCBieXRlc0xlbiA9IChpbnQpW2RhdGEgbGVuZ3RoT2ZCeXRlc1VzaW5nRW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ107CisKKyAgWlhBenRlY0NvZGUgKmF6dGVjID0gW1pYQXp0ZWNFbmNvZGVyIGVuY29kZTpieXRlcyBsZW46Ynl0ZXNMZW4gbWluRUNDUGVyY2VudDozM107CisgIFNUQXNzZXJ0RXF1YWxzKGF6dGVjLmNvbXBhY3QsIGNvbXBhY3QsIEAiVW5leHBlY3RlZCBzeW1ib2wgZm9ybWF0IChjb21wYWN0KSIpOworICBTVEFzc2VydEVxdWFscyhhenRlYy5sYXllcnMsIGxheWVycywgQCJVbmV4cGVjdGVkIG5yLiBvZiBsYXllcnMiKTsKKyAgWlhCaXRNYXRyaXggKm1hdHJpeCA9IGF6dGVjLm1hdHJpeDsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW21hdHJpeCBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAImVuY29kZSgpIGZhaWxlZCIpOworfQorCistICh2b2lkKXRlc3RFbmNvZGVEZWNvZGU6KE5TU3RyaW5nICopZGF0YSBjb21wYWN0OihCT09MKWNvbXBhY3QgbGF5ZXJzOihpbnQpbGF5ZXJzIHsKKyAgaW50OF90IGJ5dGVzWzQwOTZdOworICBbZGF0YSBnZXRDU3RyaW5nOihjaGFyICopYnl0ZXMgbWF4TGVuZ3RoOjQwOTYgZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ107CisgIGludCBieXRlc0xlbiA9IChpbnQpW2RhdGEgbGVuZ3RoT2ZCeXRlc1VzaW5nRW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ107CisKKyAgWlhBenRlY0NvZGUgKmF6dGVjID0gW1pYQXp0ZWNFbmNvZGVyIGVuY29kZTpieXRlcyBsZW46Ynl0ZXNMZW4gbWluRUNDUGVyY2VudDoyNV07CisgIFNUQXNzZXJ0RXF1YWxzKGF6dGVjLmNvbXBhY3QsIGNvbXBhY3QsIEAiVW5leHBlY3RlZCBzeW1ib2wgZm9ybWF0IChjb21wYWN0KSIpOworICBTVEFzc2VydEVxdWFscyhhenRlYy5sYXllcnMsIGxheWVycywgQCJVbmV4cGVjdGVkIG5yLiBvZiBsYXllcnMiKTsKKyAgWlhCaXRNYXRyaXggKm1hdHJpeCA9IGF6dGVjLm1hdHJpeDsKKyAgWlhBenRlY0RldGVjdG9yUmVzdWx0ICpyID0gW1taWEF6dGVjRGV0ZWN0b3JSZXN1bHQgYWxsb2NdIGluaXRXaXRoQml0czptYXRyaXggcG9pbnRzOkBbXSBjb21wYWN0OmF6dGVjLmNvbXBhY3QgbmJEYXRhYmxvY2tzOmF6dGVjLmNvZGVXb3JkcyBuYkxheWVyczphenRlYy5sYXllcnNdOworICBaWERlY29kZXJSZXN1bHQgKnJlcyA9IFtbW1pYQXp0ZWNEZWNvZGVyIGFsbG9jXSBpbml0XSBkZWNvZGU6ciBlcnJvcjpuaWxdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhyZXMudGV4dCwgZGF0YSwgQCJEYXRhIGRpZCBub3QgbWF0Y2giKTsKKyAgLy8gQ2hlY2sgZXJyb3IgY29ycmVjdGlvbiBieSBpbnRyb2R1Y2luZyBhIGZldyBtaW5vciBlcnJvcnMKKyAgc3JhbmQoWlhBenRlY0VuY29kZXJUZXN0X1JBTkRPTV9TRUVEKTsKKyAgW21hdHJpeCBmbGlwWDpyYW5kKCkgJSBtYXRyaXgud2lkdGggeTpyYW5kKCkgJSAyXTsKKyAgW21hdHJpeCBmbGlwWDpyYW5kKCkgJSBtYXRyaXgud2lkdGggeTptYXRyaXguaGVpZ2h0IC0gMiArIHJhbmQoKSAlIDJdOworICBbbWF0cml4IGZsaXBYOnJhbmQoKSAlIDIgeTpyYW5kKCkgJSBtYXRyaXguaGVpZ2h0XTsKKyAgW21hdHJpeCBmbGlwWDptYXRyaXgud2lkdGggLSAyICsgcmFuZCgpICUgMiB5OnJhbmQoKSAlIG1hdHJpeC5oZWlnaHRdOworICByID0gW1taWEF6dGVjRGV0ZWN0b3JSZXN1bHQgYWxsb2NdIGluaXRXaXRoQml0czptYXRyaXggcG9pbnRzOkBbXSBjb21wYWN0OmF6dGVjLmNvbXBhY3QgbmJEYXRhYmxvY2tzOmF6dGVjLmNvZGVXb3JkcyBuYkxheWVyczphenRlYy5sYXllcnNdOworICByZXMgPSBbW1taWEF6dGVjRGVjb2RlciBhbGxvY10gaW5pdF0gZGVjb2RlOnIgZXJyb3I6bmlsXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMocmVzLnRleHQsIGRhdGEsIEAiRGF0YSBkaWQgbm90IG1hdGNoIik7Cit9CisKKy0gKHZvaWQpdGVzdFdyaXRlcjooTlNTdHJpbmcgKilkYXRhIGVuY29kaW5nOihOU1N0cmluZ0VuY29kaW5nKWVuY29kaW5nIGVjY1BlcmNlbnQ6KGludCllY2NQZXJjZW50IGNvbXBhY3Q6KEJPT0wpY29tcGFjdCBsYXllcnM6KGludClsYXllcnMgeworICAvLyAxLiBQZXJmb3JtIGFuIGVuY29kZS1kZWNvZGUgcm91bmQtdHJpcCBiZWNhdXNlIGl0IGNhbiBiZSBsb3NzeS4KKyAgLy8gMi4gQXp0ZWMgRGVjb2RlciBjdXJyZW50bHkgYWx3YXlzIGRlY29kZXMgdGhlIGRhdGEgd2l0aCBhIExBVElOLTEgY2hhcnNldDoKKyAgTlNEYXRhICpyYXdEYXRhID0gW2RhdGEgZGF0YVVzaW5nRW5jb2Rpbmc6ZW5jb2RpbmddOworICBpbnQ4X3QgKmJ5dGVzID0gKGludDhfdCAqKVtyYXdEYXRhIGJ5dGVzXTsKKyAgaW50IGJ5dGVzTGVuID0gKGludClbcmF3RGF0YSBsZW5ndGhdOworICBOU1N0cmluZyAqZXhwZWN0ZWREYXRhID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhCeXRlczpieXRlcyBsZW5ndGg6Ynl0ZXNMZW4gZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ107CisgIFpYRW5jb2RlSGludHMgKmhpbnRzID0gW1pYRW5jb2RlSGludHMgaGludHNdOworICBoaW50cy5lbmNvZGluZyA9IGVuY29kaW5nOworICBoaW50cy5lcnJvckNvcnJlY3Rpb25QZXJjZW50ID0gQChlY2NQZXJjZW50KTsKKyAgWlhBenRlY1dyaXRlciAqd3JpdGVyID0gW1taWEF6dGVjV3JpdGVyIGFsbG9jXSBpbml0XTsKKyAgWlhCaXRNYXRyaXggKm1hdHJpeCA9IFt3cml0ZXIgZW5jb2RlOmRhdGEgZm9ybWF0OmtCYXJjb2RlRm9ybWF0QXp0ZWMgd2lkdGg6MCBoZWlnaHQ6MCBoaW50czpoaW50cyBlcnJvcjpuaWxdOworICBaWEF6dGVjQ29kZSAqYXp0ZWMgPSBbWlhBenRlY0VuY29kZXIgZW5jb2RlOmJ5dGVzIGxlbjpieXRlc0xlbiBtaW5FQ0NQZXJjZW50OmVjY1BlcmNlbnRdOworICBTVEFzc2VydEVxdWFscyhhenRlYy5jb21wYWN0LCBjb21wYWN0LCBAIlVuZXhwZWN0ZWQgc3ltYm9sIGZvcm1hdCAoY29tcGFjdCkiKTsKKyAgU1RBc3NlcnRFcXVhbHMoYXp0ZWMubGF5ZXJzLCBsYXllcnMsIEAiVW5leHBlY3RlZCBuci4gb2YgbGF5ZXJzIik7CisgIFpYQml0TWF0cml4ICptYXRyaXgyID0gYXp0ZWMubWF0cml4OworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhtYXRyaXgyLCBtYXRyaXgsIEAiRXhwZWN0ZWQgbWF0cmljZXMgdG8gYmUgZXF1YWwiKTsKKyAgWlhBenRlY0RldGVjdG9yUmVzdWx0ICpyID0gW1taWEF6dGVjRGV0ZWN0b3JSZXN1bHQgYWxsb2NdIGluaXRXaXRoQml0czptYXRyaXggcG9pbnRzOkBbXSBjb21wYWN0OmF6dGVjLmNvbXBhY3QgbmJEYXRhYmxvY2tzOmF6dGVjLmNvZGVXb3JkcyBuYkxheWVyczphenRlYy5sYXllcnNdOworICBaWERlY29kZXJSZXN1bHQgKnJlcyA9IFtbW1pYQXp0ZWNEZWNvZGVyIGFsbG9jXSBpbml0XSBkZWNvZGU6ciBlcnJvcjpuaWxdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhyZXMudGV4dCwgZXhwZWN0ZWREYXRhLCBAIkRhdGEgZGlkIG5vdCBtYXRjaCIpOworICAvLyBDaGVjayBlcnJvciBjb3JyZWN0aW9uIGJ5IGludHJvZHVjaW5nIHVwIHRvIGVjY1BlcmNlbnQgZXJyb3JzCisgIHNyYW5kKFpYQXp0ZWNFbmNvZGVyVGVzdF9SQU5ET01fU0VFRCk7CisgIE5TSW50ZWdlciBlY1dvcmRzID0gYXp0ZWMuY29kZVdvcmRzICogZWNjUGVyY2VudCAvIDEwMDsKKyAgZm9yIChOU0ludGVnZXIgaSA9IDA7IGkgPCBlY1dvcmRzOyBpKyspIHsKKyAgICAvLyBkb24ndCB0b3VjaCB0aGUgY29yZQorICAgIGludCB4ID0gcmFuZCgpICUgMiA+IDAgPworICAgICAgcmFuZCgpICUgYXp0ZWMubGF5ZXJzICogMgorICAgICAgOiBtYXRyaXgud2lkdGggLSAxIC0gKHJhbmQoKSAlIGF6dGVjLmxheWVycyAqIDIpOworICAgIGludCB5ID0gcmFuZCgpICUgMiA+IDAgPworICAgICAgcmFuZCgpICUgYXp0ZWMubGF5ZXJzICogMgorICAgICAgOiBtYXRyaXguaGVpZ2h0IC0gMSAtIChyYW5kKCkgJSBhenRlYy5sYXllcnMgKiAyKTsKKyAgICBbbWF0cml4IGZsaXBYOnggeTp5XTsKKyAgfQorICByID0gW1taWEF6dGVjRGV0ZWN0b3JSZXN1bHQgYWxsb2NdIGluaXRXaXRoQml0czptYXRyaXggcG9pbnRzOkBbXSBjb21wYWN0OmF6dGVjLmNvbXBhY3QgbmJEYXRhYmxvY2tzOmF6dGVjLmNvZGVXb3JkcyBuYkxheWVyczphenRlYy5sYXllcnNdOworICByZXMgPSBbW1taWEF6dGVjRGVjb2RlciBhbGxvY10gaW5pdF0gZGVjb2RlOnIgZXJyb3I6bmlsXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMocmVzLnRleHQsIGV4cGVjdGVkRGF0YSwgQCJEYXRhIGRpZCBub3QgbWF0Y2giKTsKK30KKworLSAodm9pZCl0ZXN0TW9kZU1lc3NhZ2VDb21wYWN0OihCT09MKWNvbXBhY3QgbGF5ZXJzOihpbnQpbGF5ZXJzIHdvcmRzOihpbnQpd29yZHMgZXhwZWN0ZWQ6KE5TU3RyaW5nICopZXhwZWN0ZWQgeworICBaWEJpdEFycmF5ICppbkFycmF5ID0gW1pYQXp0ZWNFbmNvZGVyIGdlbmVyYXRlTW9kZU1lc3NhZ2VDb21wYWN0OmNvbXBhY3QgbGF5ZXJzOmxheWVycyBtZXNzYWdlU2l6ZUluV29yZHM6d29yZHNdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbW2luQXJyYXkgZGVzY3JpcHRpb25dIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIiAiIHdpdGhTdHJpbmc6QCIiXSwgW2V4cGVjdGVkIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIiAiIHdpdGhTdHJpbmc6QCIiXSwgQCJnZW5lcmF0ZU1vZGVNZXNzYWdlKCkgZmFpbGVkIik7Cit9CisKKy0gKHZvaWQpdGVzdFN0dWZmQml0czooaW50KXdvcmRTaXplIGJpdHM6KE5TU3RyaW5nICopYml0cyBleHBlY3RlZDooTlNTdHJpbmcgKilleHBlY3RlZCB7CisgIFpYQml0QXJyYXkgKmluQXJyYXkgPSBbc2VsZiB0b0JpdEFycmF5OmJpdHNdOworICBaWEJpdEFycmF5ICpzdHVmZmVkID0gW1pYQXp0ZWNFbmNvZGVyIHN0dWZmQml0czppbkFycmF5IHdvcmRTaXplOndvcmRTaXplXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1tzdHVmZmVkIGRlc2NyaXB0aW9uXSBzdHJpbmdCeVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCIgIiB3aXRoU3RyaW5nOkAiIl0sIFtleHBlY3RlZCBzdHJpbmdCeVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCIgIiB3aXRoU3RyaW5nOkAiIl0sIEAic3R1ZmZCaXRzKCkgZmFpbGVkIGZvciBpbnB1dCBzdHJpbmc6ICVAIiwgYml0cyk7Cit9CisKKy0gKFpYQml0QXJyYXkgKil0b0JpdEFycmF5OihOU1N0cmluZyAqKWJpdHMgeworICBzdGF0aWMgTlNSZWd1bGFyRXhwcmVzc2lvbiAqRE9UWCA9IG5pbDsKKyAgaWYgKCFET1RYKSB7CisgICAgRE9UWCA9IFtOU1JlZ3VsYXJFeHByZXNzaW9uIHJlZ3VsYXJFeHByZXNzaW9uV2l0aFBhdHRlcm46QCJbXi5YXSIgb3B0aW9uczowIGVycm9yOm5pbF07CisgIH0KKworICBaWEJpdEFycmF5ICppbkFycmF5ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgTlNTdHJpbmcgKnN0ciA9IFtET1RYIHN0cmluZ0J5UmVwbGFjaW5nTWF0Y2hlc0luU3RyaW5nOmJpdHMgb3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKDAsIGJpdHMubGVuZ3RoKSB3aXRoVGVtcGxhdGU6QCIiXTsKKyAgZm9yIChOU0ludGVnZXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHsKKyAgICB1bmljaGFyIGFTdHIgPSBbc3RyIGNoYXJhY3RlckF0SW5kZXg6aV07CisgICAgW2luQXJyYXkgYXBwZW5kQml0OmFTdHIgPT0gJ1gnXTsKKyAgfQorICByZXR1cm4gaW5BcnJheTsKK30KKworLSAodm9pZCl0ZXN0SGlnaExldmVsRW5jb2RlU3RyaW5nOihOU1N0cmluZyAqKXMgZXhwZWN0ZWRCaXRzOihOU1N0cmluZyAqKWV4cGVjdGVkQml0cyB7CisgIGludDhfdCBieXRlc1s0MDk2XTsKKyAgW3MgZ2V0Q1N0cmluZzooY2hhciAqKWJ5dGVzIG1heExlbmd0aDo0MDk2IGVuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddOworICBpbnQgYnl0ZXNMZW4gPSAoaW50KVtzIGxlbmd0aE9mQnl0ZXNVc2luZ0VuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddOworCisgIFpYQml0QXJyYXkgKmJpdHMgPSBbWlhBenRlY0VuY29kZXIgaGlnaExldmVsRW5jb2RlOmJ5dGVzIGxlbjpieXRlc0xlbl07CisgIE5TU3RyaW5nICpyZWNlaXZlZEJpdHMgPSBbW2JpdHMgZGVzY3JpcHRpb25dIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIiAiIHdpdGhTdHJpbmc6QCIiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMocmVjZWl2ZWRCaXRzLCBbZXhwZWN0ZWRCaXRzIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIiAiIHdpdGhTdHJpbmc6QCIiXSwgQCJoaWdoTGV2ZWxFbmNvZGUoKSBmYWlsZWQgZm9yIGlucHV0IHN0cmluZzogJUAiLCBzKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0VGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyMTM2MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0VGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjMzRkNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0KQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQWRkcmVzc0Jvb2tQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdFRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdEFkZHJlc3NCb29rRG9jb21vIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiTUVDQVJEOk46U2VhbiBPd2VuOzsiCisgICAgICAgICAgICAgICAgICAgICB0aXRsZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgIG5hbWVzOkBbQCJTZWFuIE93ZW4iXQorICAgICAgICAgICAgIHByb251bmNpYXRpb246bmlsCisgICAgICAgICAgICAgICAgIGFkZHJlc3NlczpuaWwKKyAgICAgICAgICAgICAgICAgICAgZW1haWxzOm5pbAorICAgICAgICAgICAgICBwaG9uZU51bWJlcnM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgIG9yZzpuaWwKKyAgICAgICAgICAgICAgICAgICAgICB1cmxzOm5pbAorICAgICAgICAgICAgICAgICAgYmlydGhkYXk6bmlsCisgICAgICAgICAgICAgICAgICAgICAgbm90ZTpuaWxdOworCisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIk1FQ0FSRDpOT1RFOlpYaW5nIFRlYW07TjpTZWFuIE93ZW47VVJMOmdvb2dsZS5jb207RU1BSUw6c3Jvd2VuQGV4YW1wbGUub3JnOzsiCisgICAgICAgICAgICAgICAgICAgICB0aXRsZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgIG5hbWVzOkBbQCJTZWFuIE93ZW4iXQorICAgICAgICAgICAgIHByb251bmNpYXRpb246bmlsCisgICAgICAgICAgICAgICAgIGFkZHJlc3NlczpuaWwKKyAgICAgICAgICAgICAgICAgICAgZW1haWxzOkBbQCJzcm93ZW5AZXhhbXBsZS5vcmciXQorICAgICAgICAgICAgICBwaG9uZU51bWJlcnM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgIG9yZzpuaWwKKyAgICAgICAgICAgICAgICAgICAgICB1cmxzOkBbQCJnb29nbGUuY29tIl0KKyAgICAgICAgICAgICAgICAgIGJpcnRoZGF5Om5pbAorICAgICAgICAgICAgICAgICAgICAgIG5vdGU6QCJaWGluZyBUZWFtIl07Cit9CisKKy0gKHZvaWQpdGVzdEFkZHJlc3NCb29rQVUgeworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJNRU1PUlk6Zm9vXHJcbk5BTUUxOlNlYW5cclxuVEVMMTorMTIxMjU1NTEyMTJcclxuIgorICAgICAgICAgICAgICAgICAgICAgdGl0bGU6bmlsCisgICAgICAgICAgICAgICAgICAgICBuYW1lczpAW0AiU2VhbiJdCisgICAgICAgICAgICAgcHJvbnVuY2lhdGlvbjpuaWwKKyAgICAgICAgICAgICAgICAgYWRkcmVzc2VzOm5pbAorICAgICAgICAgICAgICAgICAgICBlbWFpbHM6bmlsCisgICAgICAgICAgICAgIHBob25lTnVtYmVyczpAW0AiKzEyMTI1NTUxMjEyIl0KKyAgICAgICAgICAgICAgICAgICAgICAgb3JnOm5pbAorICAgICAgICAgICAgICAgICAgICAgIHVybHM6bmlsCisgICAgICAgICAgICAgICAgICBiaXJ0aGRheTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICBub3RlOkAiZm9vIl07Cit9CisKKy0gKHZvaWQpdGVzdFZDYXJkIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQkVHSU46VkNBUkRcclxuQURSO0hPTUU6MTIzIE1haW4gU3RcclxuVkVSU0lPTjoyLjFcclxuTjpPd2VuO1NlYW5cclxuRU5EOlZDQVJEIgorICAgICAgICAgICAgICAgICAgICAgdGl0bGU6bmlsCisgICAgICAgICAgICAgICAgICAgICBuYW1lczpAW0AiU2VhbiBPd2VuIl0KKyAgICAgICAgICAgICBwcm9udW5jaWF0aW9uOm5pbAorICAgICAgICAgICAgICAgICBhZGRyZXNzZXM6QFtAIjEyMyBNYWluIFN0Il0KKyAgICAgICAgICAgICAgICAgICAgZW1haWxzOm5pbAorICAgICAgICAgICAgICBwaG9uZU51bWJlcnM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgIG9yZzpuaWwKKyAgICAgICAgICAgICAgICAgICAgICB1cmxzOm5pbAorICAgICAgICAgICAgICAgICAgYmlydGhkYXk6bmlsCisgICAgICAgICAgICAgICAgICAgICAgbm90ZTpuaWxdOworfQorCistICh2b2lkKXRlc3RWQ2FyZENhc2VJbnNlbnNpdGl2ZSB7CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAImJlZ2luOnZjYXJkXHJcbmFkcjtIT01FOjEyMyBNYWluIFN0XHJcblZlcnNpb246Mi4xXHJcbm46T3dlbjtTZWFuXHJcbkVORDpWQ0FSRCIKKyAgICAgICAgICAgICAgICAgICAgIHRpdGxlOm5pbAorICAgICAgICAgICAgICAgICAgICAgbmFtZXM6QFtAIlNlYW4gT3dlbiJdCisgICAgICAgICAgICAgcHJvbnVuY2lhdGlvbjpuaWwKKyAgICAgICAgICAgICAgICAgYWRkcmVzc2VzOkBbQCIxMjMgTWFpbiBTdCJdCisgICAgICAgICAgICAgICAgICAgIGVtYWlsczpuaWwKKyAgICAgICAgICAgICAgcGhvbmVOdW1iZXJzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICBvcmc6bmlsCisgICAgICAgICAgICAgICAgICAgICAgdXJsczpuaWwKKyAgICAgICAgICAgICAgICAgIGJpcnRoZGF5Om5pbAorICAgICAgICAgICAgICAgICAgICAgIG5vdGU6bmlsXTsKK30KKworLSAodm9pZCl0ZXN0RXNjYXBlZFZDYXJkIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQkVHSU46VkNBUkRcclxuQURSO0hPTUU6MTIzXFw7XFxcXCBNYWluXFwsIFN0XFxuSG9tZVxyXG5WRVJTSU9OOjIuMVxyXG5OOk93ZW47U2VhblxyXG5FTkQ6VkNBUkQiCisgICAgICAgICAgICAgICAgICAgICB0aXRsZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgIG5hbWVzOkBbQCJTZWFuIE93ZW4iXQorICAgICAgICAgICAgIHByb251bmNpYXRpb246bmlsCisgICAgICAgICAgICAgICAgIGFkZHJlc3NlczpAW0AiMTIzO1xcIE1haW4sIFN0XG5Ib21lIl0KKyAgICAgICAgICAgICAgICAgICAgZW1haWxzOm5pbAorICAgICAgICAgICAgICBwaG9uZU51bWJlcnM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgIG9yZzpuaWwKKyAgICAgICAgICAgICAgICAgICAgICB1cmxzOm5pbAorICAgICAgICAgICAgICAgICAgYmlydGhkYXk6bmlsCisgICAgICAgICAgICAgICAgICAgICAgbm90ZTpuaWxdOworfQorCistICh2b2lkKXRlc3RCaXpjYXJkIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQklaQ0FSRDpOOlNlYW47WDpPd2VuO0M6R29vZ2xlO0E6MTIzIE1haW4gU3Q7TTorMTIxMjU1NTEyMTI7RTpzcm93ZW5AZXhhbXBsZS5vcmc7IgorICAgICAgICAgICAgICAgICAgICAgdGl0bGU6bmlsCisgICAgICAgICAgICAgICAgICAgICBuYW1lczpAW0AiU2VhbiBPd2VuIl0KKyAgICAgICAgICAgICBwcm9udW5jaWF0aW9uOm5pbAorICAgICAgICAgICAgICAgICBhZGRyZXNzZXM6QFtAIjEyMyBNYWluIFN0Il0KKyAgICAgICAgICAgICAgICAgICAgZW1haWxzOkBbQCJzcm93ZW5AZXhhbXBsZS5vcmciXQorICAgICAgICAgICAgICBwaG9uZU51bWJlcnM6QFtAIisxMjEyNTU1MTIxMiJdCisgICAgICAgICAgICAgICAgICAgICAgIG9yZzpAIkdvb2dsZSIKKyAgICAgICAgICAgICAgICAgICAgICB1cmxzOm5pbAorICAgICAgICAgICAgICAgICAgYmlydGhkYXk6bmlsCisgICAgICAgICAgICAgICAgICAgICAgbm90ZTpuaWxdOworfQorCistICh2b2lkKXRlc3RTZXZlcmFsQWRkcmVzc2VzIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiTUVDQVJEOk46Rm9vIEJhcjtPUkc6Q29tcGFueTtURUw6NTU1NTU1NTU1NTtFTUFJTDpmb28uYmFyQHh5ei5jb207QURSOkNpdHksIDEwMDAxOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiQURSOkNpdHksIDEwMDAxO05PVEU6VGhpcyBpcyB0aGUgbWVtby47OyIKKyAgICAgICAgICAgICAgICAgICAgIHRpdGxlOm5pbAorICAgICAgICAgICAgICAgICAgICAgbmFtZXM6QFtAIkZvbyBCYXIiXQorICAgICAgICAgICAgIHByb251bmNpYXRpb246bmlsCisgICAgICAgICAgICAgICAgIGFkZHJlc3NlczpAW0AiQ2l0eSwgMTAwMDEiLCBAIkNpdHksIDEwMDAxIl0KKyAgICAgICAgICAgICAgICAgICAgZW1haWxzOkBbQCJmb28uYmFyQHh5ei5jb20iXQorICAgICAgICAgICAgICBwaG9uZU51bWJlcnM6QFtAIjU1NTU1NTU1NTUiXQorICAgICAgICAgICAgICAgICAgICAgICBvcmc6QCJDb21wYW55IgorICAgICAgICAgICAgICAgICAgICAgIHVybHM6bmlsCisgICAgICAgICAgICAgICAgICBiaXJ0aGRheTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICBub3RlOkAiVGhpcyBpcyB0aGUgbWVtby4iXTsKK30KKworLSAodm9pZCl0ZXN0UXVvdGVkUHJpbnRhYmxlIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQkVHSU46VkNBUkRcclxuQURSO0hPTUU7Q0hBUlNFVD1VVEYtODtFTkNPRElORz1RVU9URUQtUFJJTlRBQkxFOjs7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQCI9Mzg9Mzg9MjA9NEM9Nzk9NkU9NjI9NzI9NkY9NkY9NkI9MEQ9MEE9NDM9XHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiPTRGPTIwPTM2PTM5PTM5PVxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIj0zOT0zOTs7O1xyXG5FTkQ6VkNBUkQiCisgICAgICAgICAgICAgICAgICAgICB0aXRsZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgIG5hbWVzOm5pbAorICAgICAgICAgICAgIHByb251bmNpYXRpb246bmlsCisgICAgICAgICAgICAgICAgIGFkZHJlc3NlczpAW0AiODggTHluYnJvb2tcclxuQ08gNjk5OTkiXQorICAgICAgICAgICAgICAgICAgICBlbWFpbHM6bmlsCisgICAgICAgICAgICAgIHBob25lTnVtYmVyczpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgb3JnOm5pbAorICAgICAgICAgICAgICAgICAgICAgIHVybHM6bmlsCisgICAgICAgICAgICAgICAgICBiaXJ0aGRheTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICBub3RlOm5pbF07Cit9CisKKy0gKHZvaWQpdGVzdFZDYXJkRXNjYXBlIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQkVHSU46VkNBUkRcclxuTk9URTpmb29cXG5iYXJcclxuRU5EOlZDQVJEIgorICAgICAgICAgICAgICAgICAgICAgdGl0bGU6bmlsCisgICAgICAgICAgICAgICAgICAgICBuYW1lczpuaWwKKyAgICAgICAgICAgICBwcm9udW5jaWF0aW9uOm5pbAorICAgICAgICAgICAgICAgICBhZGRyZXNzZXM6bmlsCisgICAgICAgICAgICAgICAgICAgIGVtYWlsczpuaWwKKyAgICAgICAgICAgICAgcGhvbmVOdW1iZXJzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICBvcmc6bmlsCisgICAgICAgICAgICAgICAgICAgICAgdXJsczpuaWwKKyAgICAgICAgICAgICAgICAgIGJpcnRoZGF5Om5pbAorICAgICAgICAgICAgICAgICAgICAgIG5vdGU6QCJmb29cbmJhciJdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJCRUdJTjpWQ0FSRFxyXG5OT1RFOmZvb1xcO2JhclxyXG5FTkQ6VkNBUkQiCisgICAgICAgICAgICAgICAgICAgICB0aXRsZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgIG5hbWVzOm5pbAorICAgICAgICAgICAgIHByb251bmNpYXRpb246bmlsCisgICAgICAgICAgICAgICAgIGFkZHJlc3NlczpuaWwKKyAgICAgICAgICAgICAgICAgICAgZW1haWxzOm5pbAorICAgICAgICAgICAgICBwaG9uZU51bWJlcnM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgIG9yZzpuaWwKKyAgICAgICAgICAgICAgICAgICAgICB1cmxzOm5pbAorICAgICAgICAgICAgICAgICAgYmlydGhkYXk6bmlsCisgICAgICAgICAgICAgICAgICAgICAgbm90ZTpAImZvbztiYXIiXTsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQkVHSU46VkNBUkRcclxuTk9URTpmb29cXFxcYmFyXHJcbkVORDpWQ0FSRCIKKyAgICAgICAgICAgICAgICAgICAgIHRpdGxlOm5pbAorICAgICAgICAgICAgICAgICAgICAgbmFtZXM6bmlsCisgICAgICAgICAgICAgcHJvbnVuY2lhdGlvbjpuaWwKKyAgICAgICAgICAgICAgICAgYWRkcmVzc2VzOm5pbAorICAgICAgICAgICAgICAgICAgICBlbWFpbHM6bmlsCisgICAgICAgICAgICAgIHBob25lTnVtYmVyczpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgb3JnOm5pbAorICAgICAgICAgICAgICAgICAgICAgIHVybHM6bmlsCisgICAgICAgICAgICAgICAgICBiaXJ0aGRheTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICBub3RlOkAiZm9vXFxiYXIiXTsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQkVHSU46VkNBUkRcclxuTk9URTpmb29cXCxiYXJcclxuRU5EOlZDQVJEIgorICAgICAgICAgICAgICAgICAgICAgdGl0bGU6bmlsCisgICAgICAgICAgICAgICAgICAgICBuYW1lczpuaWwKKyAgICAgICAgICAgICBwcm9udW5jaWF0aW9uOm5pbAorICAgICAgICAgICAgICAgICBhZGRyZXNzZXM6bmlsCisgICAgICAgICAgICAgICAgICAgIGVtYWlsczpuaWwKKyAgICAgICAgICAgICAgcGhvbmVOdW1iZXJzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICBvcmc6bmlsCisgICAgICAgICAgICAgICAgICAgICAgdXJsczpuaWwKKyAgICAgICAgICAgICAgICAgIGJpcnRoZGF5Om5pbAorICAgICAgICAgICAgICAgICAgICAgIG5vdGU6QCJmb28sYmFyIl07Cit9CisKKy0gKHZvaWQpZG9UZXN0V2l0aENvbnRlbnRzOihOU1N0cmluZyAqKWNvbnRlbnRzCisgICAgICAgICAgICAgICAgICAgICB0aXRsZTooTlNTdHJpbmcgKil0aXRsZQorICAgICAgICAgICAgICAgICAgICAgbmFtZXM6KE5TQXJyYXkgKiluYW1lcworICAgICAgICAgICAgIHByb251bmNpYXRpb246KE5TQXJyYXkgKilwcm9udW5jaWF0aW9uCisgICAgICAgICAgICAgICAgIGFkZHJlc3NlczooTlNBcnJheSAqKWFkZHJlc3NlcworICAgICAgICAgICAgICAgICAgICBlbWFpbHM6KE5TQXJyYXkgKillbWFpbHMKKyAgICAgICAgICAgICAgcGhvbmVOdW1iZXJzOihOU0FycmF5ICopcGhvbmVOdW1iZXJzCisgICAgICAgICAgICAgICAgICAgICAgIG9yZzooTlNTdHJpbmcgKilvcmcKKyAgICAgICAgICAgICAgICAgICAgICB1cmxzOihOU0FycmF5ICopdXJscworICAgICAgICAgICAgICAgICAgYmlydGhkYXk6KE5TU3RyaW5nICopYmlydGhkYXkKKyAgICAgICAgICAgICAgICAgICAgICBub3RlOihOU1N0cmluZyAqKW5vdGUgeworICBaWFJlc3VsdCAqZmFrZVJlc3VsdCA9IFtaWFJlc3VsdCByZXN1bHRXaXRoVGV4dDpjb250ZW50cyByYXdCeXRlczpOVUxMIGxlbmd0aDowIHJlc3VsdFBvaW50czpuaWwgZm9ybWF0OmtCYXJjb2RlRm9ybWF0UVJDb2RlXTsKKyAgWlhQYXJzZWRSZXN1bHQgKnJlc3VsdCA9IFtaWFJlc3VsdFBhcnNlciBwYXJzZVJlc3VsdDpmYWtlUmVzdWx0XTsKKyAgU1RBc3NlcnRFcXVhbHMoa1BhcnNlZFJlc3VsdFR5cGVBZGRyZXNzQm9vaywgcmVzdWx0LnR5cGUsIEAiUmVzdWx0IHR5cGUgbWlzbWF0Y2giKTsKKyAgWlhBZGRyZXNzQm9va1BhcnNlZFJlc3VsdCAqYWRkcmVzc1Jlc3VsdCA9IChaWEFkZHJlc3NCb29rUGFyc2VkUmVzdWx0ICopcmVzdWx0OworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhhZGRyZXNzUmVzdWx0LnRpdGxlLCB0aXRsZSwgQCJUaXRsZXMgZG8gbm90IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGFkZHJlc3NSZXN1bHQubmFtZXMsIG5hbWVzLCBAIk5hbWVzIGRvIG5vdCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhhZGRyZXNzUmVzdWx0LnByb251bmNpYXRpb24sIHByb251bmNpYXRpb24sIEAiUHJvbnVuY2lhdGlvbiBkb2VzIG5vdCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhhZGRyZXNzUmVzdWx0LmFkZHJlc3NlcywgYWRkcmVzc2VzLCBAIkFkZHJlc3NlcyBkbyBub3QgbWF0Y2giKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoYWRkcmVzc1Jlc3VsdC5lbWFpbHMsIGVtYWlscywgQCJFbWFpbHMgZG8gbm90IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGFkZHJlc3NSZXN1bHQucGhvbmVOdW1iZXJzLCBwaG9uZU51bWJlcnMsIEAiUGhvbmUgbnVtYmVycyBkbyBub3QgbWF0Y2giKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoYWRkcmVzc1Jlc3VsdC5vcmcsIG9yZywgQCJPcmcgZG9lcyBub3QgbWF0Y2giKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoYWRkcmVzc1Jlc3VsdC51cmxzLCB1cmxzLCBAIlVSTHMgZG8gbm90IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGFkZHJlc3NSZXN1bHQuYmlydGhkYXksIGJpcnRoZGF5LCBAIkJpcnRoZGF5IGRvZXMgbm90IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGFkZHJlc3NSZXN1bHQubm90ZSwgbm90ZSwgQCJOb3RlIGRvZXMgbm90IG1hdGNoIik7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhDYWxlbmRhclBhcnNlZFJlc3VsdFRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYQ2FsZW5kYXJQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZmNiYzYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYQ2FsZW5kYXJQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHRUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhDYWxlbmRhclBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYQ2FsZW5kYXJQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhN2JhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYQ2FsZW5kYXJQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWENhbGVuZGFyUGFyc2VkUmVzdWx0VGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFpYQ2FsZW5kYXJQYXJzZWRSZXN1bHRUZXN0Q2FzZQorCitzdGF0aWMgZG91YmxlIEVQU0lMT04gPSAwLjAwMDAwMDAwMDE7CitzdGF0aWMgTlNEYXRlRm9ybWF0dGVyICpEQVRFX1RJTUVfRk9STUFUID0gbmlsOworCisrICh2b2lkKWluaXRpYWxpemUgeworICBEQVRFX1RJTUVfRk9STUFUID0gW1tOU0RhdGVGb3JtYXR0ZXIgYWxsb2NdIGluaXRdOworICBEQVRFX1RJTUVfRk9STUFULmRhdGVGb3JtYXQgPSBAInl5eXlNTWRkJ1QnSEhtbXNzJ1onIjsKK30KKworLSAodm9pZCl0ZXN0U3RhcnRFbmQgeworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJCRUdJTjpWQ0FMRU5EQVJcclxuQkVHSU46VkVWRU5UXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRFRTVEFSVDoyMDA4MDUwNFQxMjM0NTZaXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRFRFTkQ6MjAwODA1MDVUMjM0NTU1WlxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkVORDpWRVZFTlRcclxuRU5EOlZDQUxFTkRBUiIKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOm5pbAorICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6bmlsCisgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpuaWwKKyAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOkAiMjAwODA1MDRUMTIzNDU2WiIKKyAgICAgICAgICAgICAgICAgZW5kU3RyaW5nOkAiMjAwODA1MDVUMjM0NTU1WiJdOworfQorCistICh2b2lkKXRlc3ROb1ZDYWxlbmRhciB7CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIkJFR0lOOlZFVkVOVFxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRUU1RBUlQ6MjAwODA1MDRUMTIzNDU2WlxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRURU5EOjIwMDgwNTA1VDIzNDU1NVpcclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQCJFTkQ6VkVWRU5UIgorICAgICAgICAgICAgICAgZGVzY3JpcHRpb246bmlsCisgICAgICAgICAgICAgICAgICAgc3VtbWFyeTpuaWwKKyAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOm5pbAorICAgICAgICAgICAgICAgc3RhcnRTdHJpbmc6QCIyMDA4MDUwNFQxMjM0NTZaIgorICAgICAgICAgICAgICAgICBlbmRTdHJpbmc6QCIyMDA4MDUwNVQyMzQ1NTVaIl07Cit9CisKKy0gKHZvaWQpdGVzdFN0YXJ0IHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQkVHSU46VkNBTEVOREFSXHJcbkJFR0lOOlZFVkVOVFxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRUU1RBUlQ6MjAwODA1MDRUMTIzNDU2WlxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkVORDpWRVZFTlRcclxuRU5EOlZDQUxFTkRBUiIKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOm5pbAorICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6bmlsCisgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpuaWwKKyAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOkAiMjAwODA1MDRUMTIzNDU2WiIKKyAgICAgICAgICAgICAgICAgZW5kU3RyaW5nOm5pbF07Cit9CisKKy0gKHZvaWQpdGVzdER1cmF0aW9uIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQkVHSU46VkNBTEVOREFSXHJcbkJFR0lOOlZFVkVOVFxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRUU1RBUlQ6MjAwODA1MDRUMTIzNDU2WlxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRVUkFUSU9OOlAxRFxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkVORDpWRVZFTlRcclxuRU5EOlZDQUxFTkRBUiIKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOm5pbAorICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6bmlsCisgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpuaWwKKyAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOkAiMjAwODA1MDRUMTIzNDU2WiIKKyAgICAgICAgICAgICAgICAgZW5kU3RyaW5nOkAiMjAwODA1MDVUMTIzNDU2WiJdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJCRUdJTjpWQ0FMRU5EQVJcclxuQkVHSU46VkVWRU5UXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRFRTVEFSVDoyMDA4MDUwNFQxMjM0NTZaXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRFVSQVRJT046UDFEVDJIM000U1xyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkVORDpWRVZFTlRcclxuRU5EOlZDQUxFTkRBUiIKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOm5pbAorICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6bmlsCisgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpuaWwKKyAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOkAiMjAwODA1MDRUMTIzNDU2WiIKKyAgICAgICAgICAgICAgICAgZW5kU3RyaW5nOkAiMjAwODA1MDVUMTQzODAwWiJdOworfQorCistICh2b2lkKXRlc3RTdW1tYXJ5IHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQkVHSU46VkNBTEVOREFSXHJcbkJFR0lOOlZFVkVOVFxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIlNVTU1BUlk6Zm9vXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRFRTVEFSVDoyMDA4MDUwNFQxMjM0NTZaXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRU5EOlZFVkVOVFxyXG5FTkQ6VkNBTEVOREFSIgorICAgICAgICAgICAgICAgZGVzY3JpcHRpb246bmlsCisgICAgICAgICAgICAgICAgICAgc3VtbWFyeTpAImZvbyIKKyAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOm5pbAorICAgICAgICAgICAgICAgc3RhcnRTdHJpbmc6QCIyMDA4MDUwNFQxMjM0NTZaIgorICAgICAgICAgICAgICAgICBlbmRTdHJpbmc6bmlsXTsKK30KKworLSAodm9pZCl0ZXN0TG9jYXRpb24geworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJCRUdJTjpWQ0FMRU5EQVJcclxuQkVHSU46VkVWRU5UXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiTE9DQVRJT046TWlhbWlcclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQCJEVFNUQVJUOjIwMDgwNTA0VDEyMzQ1NlpcclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQCJFTkQ6VkVWRU5UXHJcbkVORDpWQ0FMRU5EQVIiCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpuaWwKKyAgICAgICAgICAgICAgICAgICBzdW1tYXJ5Om5pbAorICAgICAgICAgICAgICAgICAgbG9jYXRpb246QCJNaWFtaSIKKyAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOkAiMjAwODA1MDRUMTIzNDU2WiIKKyAgICAgICAgICAgICAgICAgZW5kU3RyaW5nOm5pbF07Cit9CisKKy0gKHZvaWQpdGVzdERlc2NyaXB0aW9uIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQkVHSU46VkNBTEVOREFSXHJcbkJFR0lOOlZFVkVOVFxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRUU1RBUlQ6MjAwODA1MDRUMTIzNDU2WlxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRFU0NSSVBUSU9OOlRoaXMgaXMgYSB0ZXN0XHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRU5EOlZFVkVOVFxyXG5FTkQ6VkNBTEVOREFSIgorICAgICAgICAgICAgICAgZGVzY3JpcHRpb246QCJUaGlzIGlzIGEgdGVzdCIKKyAgICAgICAgICAgICAgICAgICBzdW1tYXJ5Om5pbAorICAgICAgICAgICAgICAgICAgbG9jYXRpb246bmlsCisgICAgICAgICAgICAgICBzdGFydFN0cmluZzpAIjIwMDgwNTA0VDEyMzQ1NloiCisgICAgICAgICAgICAgICAgIGVuZFN0cmluZzpuaWxdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJCRUdJTjpWQ0FMRU5EQVJcclxuQkVHSU46VkVWRU5UXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRFRTVEFSVDoyMDA4MDUwNFQxMjM0NTZaXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiREVTQ1JJUFRJT046VGhpcyBpcyBhIHRlc3RcclxuXHQgd2l0aCBhIGNvbnRpbnVhdGlvblxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkVORDpWRVZFTlRcclxuRU5EOlZDQUxFTkRBUiIKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOkAiVGhpcyBpcyBhIHRlc3Qgd2l0aCBhIGNvbnRpbnVhdGlvbiIKKyAgICAgICAgICAgICAgICAgICBzdW1tYXJ5Om5pbAorICAgICAgICAgICAgICAgICAgbG9jYXRpb246bmlsCisgICAgICAgICAgICAgICBzdGFydFN0cmluZzpAIjIwMDgwNTA0VDEyMzQ1NloiCisgICAgICAgICAgICAgICAgIGVuZFN0cmluZzpuaWxdOworfQorCistICh2b2lkKXRlc3RHZW8geworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJCRUdJTjpWQ0FMRU5EQVJcclxuQkVHSU46VkVWRU5UXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRFRTVEFSVDoyMDA4MDUwNFQxMjM0NTZaXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiR0VPOi0xMi4zNDU7LTQ1LjY3OFxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkVORDpWRVZFTlRcclxuRU5EOlZDQUxFTkRBUiIKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOm5pbAorICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6bmlsCisgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpuaWwKKyAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOkAiMjAwODA1MDRUMTIzNDU2WiIKKyAgICAgICAgICAgICAgICAgZW5kU3RyaW5nOm5pbAorICAgICAgICAgICAgICAgICBvcmdhbml6ZXI6bmlsCisgICAgICAgICAgICAgICAgICBhdHRlbmRlZXM6bmlsCisgICAgICAgICAgICAgICAgICBsYXRpdHVkZTotMTIuMzQ1CisgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTotNDUuNjc4XTsKK30KKworLSAodm9pZCl0ZXN0T3JnYW5pemVyIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQkVHSU46VkNBTEVOREFSXHJcbkJFR0lOOlZFVkVOVFxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRUU1RBUlQ6MjAwODA1MDRUMTIzNDU2WlxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIk9SR0FOSVpFUjptYWlsdG86Ym9iQGV4YW1wbGUub3JnXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRU5EOlZFVkVOVFxyXG5FTkQ6VkNBTEVOREFSIgorICAgICAgICAgICAgICAgZGVzY3JpcHRpb246bmlsCisgICAgICAgICAgICAgICAgICAgc3VtbWFyeTpuaWwKKyAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOm5pbAorICAgICAgICAgICAgICAgc3RhcnRTdHJpbmc6QCIyMDA4MDUwNFQxMjM0NTZaIgorICAgICAgICAgICAgICAgICBlbmRTdHJpbmc6bmlsCisgICAgICAgICAgICAgICAgIG9yZ2FuaXplcjpAImJvYkBleGFtcGxlLm9yZyIKKyAgICAgICAgICAgICAgICAgYXR0ZW5kZWVzOm5pbAorICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6TkFOCisgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTpOQU5dOworfQorCistICh2b2lkKXRlc3RBdHRlbmRlZXMgeworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJCRUdJTjpWQ0FMRU5EQVJcclxuQkVHSU46VkVWRU5UXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRFRTVEFSVDoyMDA4MDUwNFQxMjM0NTZaXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiQVRURU5ERUU6bWFpbHRvOmJvYkBleGFtcGxlLm9yZ1xyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkFUVEVOREVFOm1haWx0bzphbGljZUBleGFtcGxlLm9yZ1xyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkVORDpWRVZFTlRcclxuRU5EOlZDQUxFTkRBUiIKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOm5pbAorICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6bmlsCisgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpuaWwKKyAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOkAiMjAwODA1MDRUMTIzNDU2WiIKKyAgICAgICAgICAgICAgICAgZW5kU3RyaW5nOm5pbAorICAgICAgICAgICAgICAgICBvcmdhbml6ZXI6bmlsCisgICAgICAgICAgICAgICAgIGF0dGVuZGVlczpAW0AiYm9iQGV4YW1wbGUub3JnIiwgQCJhbGljZUBleGFtcGxlLm9yZyJdCisgICAgICAgICAgICAgICAgICBsYXRpdHVkZTpOQU4KKyAgICAgICAgICAgICAgICAgbG9uZ2l0dWRlOk5BTl07Cit9CisKKy0gKHZvaWQpdGVzdFZFdmVudEVzY2FwZXMgeworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJCRUdJTjpWRVZFTlRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiQ1JFQVRFRDoyMDExMTEwOVQxMTAzNTFaXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkxBU1QtTU9ESUZJRUQ6MjAxMTExMDlUMTcwMDM0WlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQCJEVFNUQU1QOjIwMTExMTA5VDE3MDAzNFpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiVUlEOjBmNmQxNGVmLTZjYjctNDQ4NC05MDgwLTYxNDQ3Y2NkZjljMlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQCJTVU1NQVJZOlN1bW1hcnkgbGluZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQCJDQVRFR09SSUVTOlByaXZhdGVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRFRTVEFSVDtUWklEPUV1cm9wZS9WaWVubmE6MjAxMTExMTBUMTEwMDAwXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRURU5EO1RaSUQ9RXVyb3BlL1ZpZW5uYToyMDExMTExMFQxMjAwMDBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiTE9DQVRJT046TG9jYXRpb25cXCwgd2l0aFxcLCBlc2NhcGVkXFwsIGNvbW1hc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQCJERVNDUklQVElPTjpNZWV0aW5nIHdpdGggYSBmcmllbmRcXG5sb29rIGF0IGhvbWVwYWdlIGZpcnN0XFxuXFxuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIiAgXFxuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIlNFUVVFTkNFOjFcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiWC1NT1otR0VORVJBVElPTjoxXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkVORDpWRVZFTlQiCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpAIk1lZXRpbmcgd2l0aCBhIGZyaWVuZFxubG9vayBhdCBob21lcGFnZSBmaXJzdFxuXG5cbiAgXG4iCisgICAgICAgICAgICAgICAgICAgc3VtbWFyeTpAIlN1bW1hcnkgbGluZSIKKyAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOkAiTG9jYXRpb24sIHdpdGgsIGVzY2FwZWQsIGNvbW1hcyIKKyAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOkAiMjAxMTExMTBUMTEwMDAwWiIKKyAgICAgICAgICAgICAgICAgZW5kU3RyaW5nOkAiMjAxMTExMTBUMTIwMDAwWiJdOworfQorCistICh2b2lkKXRlc3RBbGxEYXlWYWx1ZURhdGUgeworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJCRUdJTjpWRVZFTlRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRFRTVEFSVDtWQUxVRT1EQVRFOjIwMTExMTEwXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRURU5EO1ZBTFVFPURBVEU6MjAxMTExMTBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRU5EOlZFVkVOVCIKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOm5pbAorICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6bmlsCisgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpuaWwKKyAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOkAiMjAxMTExMTBUMDAwMDAwWiIKKyAgICAgICAgICAgICAgICAgZW5kU3RyaW5nOkAiMjAxMTExMTBUMDAwMDAwWiJdOworfQorCistICh2b2lkKWRvVGVzdFdpdGhDb250ZW50czooTlNTdHJpbmcgKiljb250ZW50cworICAgICAgICAgICAgICAgZGVzY3JpcHRpb246KE5TU3RyaW5nICopZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OihOU1N0cmluZyAqKXN1bW1hcnkKKyAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOihOU1N0cmluZyAqKWxvY2F0aW9uCisgICAgICAgICAgICAgICBzdGFydFN0cmluZzooTlNTdHJpbmcgKilzdGFydFN0cmluZworICAgICAgICAgICAgICAgICBlbmRTdHJpbmc6KE5TU3RyaW5nICopZW5kU3RyaW5nIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOmNvbnRlbnRzCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6c3VtbWFyeQorICAgICAgICAgICAgICAgICAgbG9jYXRpb246bG9jYXRpb24KKyAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOnN0YXJ0U3RyaW5nCisgICAgICAgICAgICAgICAgIGVuZFN0cmluZzplbmRTdHJpbmcKKyAgICAgICAgICAgICAgICAgb3JnYW5pemVyOm5pbAorICAgICAgICAgICAgICAgICBhdHRlbmRlZXM6bmlsCisgICAgICAgICAgICAgICAgICBsYXRpdHVkZTpOQU4KKyAgICAgICAgICAgICAgICAgbG9uZ2l0dWRlOk5BTl07Cit9CisKKy0gKHZvaWQpZG9UZXN0V2l0aENvbnRlbnRzOihOU1N0cmluZyAqKWNvbnRlbnRzCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjooTlNTdHJpbmcgKilkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6KE5TU3RyaW5nICopc3VtbWFyeQorICAgICAgICAgICAgICAgICAgbG9jYXRpb246KE5TU3RyaW5nICopbG9jYXRpb24KKyAgICAgICAgICAgICAgIHN0YXJ0U3RyaW5nOihOU1N0cmluZyAqKXN0YXJ0U3RyaW5nCisgICAgICAgICAgICAgICAgIGVuZFN0cmluZzooTlNTdHJpbmcgKillbmRTdHJpbmcKKyAgICAgICAgICAgICAgICAgb3JnYW5pemVyOihOU1N0cmluZyAqKW9yZ2FuaXplcgorICAgICAgICAgICAgICAgICBhdHRlbmRlZXM6KE5TQXJyYXkgKilhdHRlbmRlZXMKKyAgICAgICAgICAgICAgICAgIGxhdGl0dWRlOihkb3VibGUpbGF0aXR1ZGUKKyAgICAgICAgICAgICAgICAgbG9uZ2l0dWRlOihkb3VibGUpbG9uZ2l0dWRlIHsKKyAgWlhSZXN1bHQgKmZha2VSZXN1bHQgPSBbWlhSZXN1bHQgcmVzdWx0V2l0aFRleHQ6Y29udGVudHMgcmF3Qnl0ZXM6TlVMTCBsZW5ndGg6MCByZXN1bHRQb2ludHM6bmlsIGZvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZV07CisgIFpYUGFyc2VkUmVzdWx0ICpyZXN1bHQgPSBbWlhSZXN1bHRQYXJzZXIgcGFyc2VSZXN1bHQ6ZmFrZVJlc3VsdF07CisgIFNUQXNzZXJ0RXF1YWxzKHJlc3VsdC50eXBlLCBrUGFyc2VkUmVzdWx0VHlwZUNhbGVuZGFyLCBAIlR5cGVzIGRvIG5vdCBtYXRjaCIpOworICBaWENhbGVuZGFyUGFyc2VkUmVzdWx0ICpjYWxSZXN1bHQgPSAoWlhDYWxlbmRhclBhcnNlZFJlc3VsdCAqKXJlc3VsdDsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoY2FsUmVzdWx0LmRlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbiwgQCJEZXNjcmlwdGlvbnMgZG8gbm90IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGNhbFJlc3VsdC5zdW1tYXJ5LCBzdW1tYXJ5LCBAIlN1bW1hcmllcyBkbyBub3QgbWF0Y2giKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoY2FsUmVzdWx0LmxvY2F0aW9uLCBsb2NhdGlvbiwgQCJMb2NhdGlvbnMgZG8gbm90IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtEQVRFX1RJTUVfRk9STUFUIHN0cmluZ0Zyb21EYXRlOmNhbFJlc3VsdC5zdGFydF0sIHN0YXJ0U3RyaW5nLCBAIlN0YXJ0cyBkbyBub3QgbWF0Y2giKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW0RBVEVfVElNRV9GT1JNQVQgc3RyaW5nRnJvbURhdGU6Y2FsUmVzdWx0LmVuZF0sIGVuZFN0cmluZywgQCJFbmRzIGRvIG5vdCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhvcmdhbml6ZXIsIGNhbFJlc3VsdC5vcmdhbml6ZXIsIEAiT3JnYW5pemVycyBkbyBub3QgbWF0Y2giKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoYXR0ZW5kZWVzLCBjYWxSZXN1bHQuYXR0ZW5kZWVzLCBAIkF0dGVuZGVlcyBkbyBub3QgbWF0Y2giKTsKKyAgW3NlbGYgYXNzZXJ0RXF1YWxPck5BTjpsYXRpdHVkZSBhY3R1YWw6Y2FsUmVzdWx0LmxhdGl0dWRlXTsKKyAgW3NlbGYgYXNzZXJ0RXF1YWxPck5BTjpsb25naXR1ZGUgYWN0dWFsOmNhbFJlc3VsdC5sb25naXR1ZGVdOworfQorCistICh2b2lkKWFzc2VydEVxdWFsT3JOQU46KGRvdWJsZSlleHBlY3RlZCBhY3R1YWw6KGRvdWJsZSlhY3R1YWwgeworICBpZiAoaXNuYW4oZXhwZWN0ZWQpKSB7CisgICAgU1RBc3NlcnRUcnVlKGlzbmFuKGFjdHVhbCksIEAiRXhwZWN0ZWQgJWYgdG8gYmUgTkFOIiwgYWN0dWFsKTsKKyAgfSBlbHNlIHsKKyAgICBTVEFzc2VydEVxdWFsc1dpdGhBY2N1cmFjeShhY3R1YWwsIGV4cGVjdGVkLCBFUFNJTE9OLCBAIkV4cGVjdGVkICVmIHRvIGVxdWFsICVmIiwgYWN0dWFsLCBleHBlY3RlZCk7CisgIH0KK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdFRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0VGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjRhNDVhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdFRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHRUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY4ZmQzZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0VGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFpYRW1haWxBZGRyZXNzUGFyc2VkUmVzdWx0VGVzdENhc2UKKworLSAodm9pZCl0ZXN0RW1haWxBZGRyZXNzIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAic3Jvd2VuQGV4YW1wbGUub3JnIiBlbWFpbDpAInNyb3dlbkBleGFtcGxlLm9yZyIgc3ViamVjdDpuaWwgYm9keTpuaWxdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJtYWlsdG86c3Jvd2VuQGV4YW1wbGUub3JnIiBlbWFpbDpAInNyb3dlbkBleGFtcGxlLm9yZyIgc3ViamVjdDpuaWwgYm9keTpuaWxdOworfQorCistICh2b2lkKXRlc3RFbWFpbERvY29tbyB7CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIk1BVE1TRzpUTzpzcm93ZW5AZXhhbXBsZS5vcmc7OyIgZW1haWw6QCJzcm93ZW5AZXhhbXBsZS5vcmciIHN1YmplY3Q6bmlsIGJvZHk6bmlsXTsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiTUFUTVNHOlRPOnNyb3dlbkBleGFtcGxlLm9yZztTVUI6U3R1ZmY7OyIgZW1haWw6QCJzcm93ZW5AZXhhbXBsZS5vcmciIHN1YmplY3Q6QCJTdHVmZiIgYm9keTpuaWxdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJNQVRNU0c6VE86c3Jvd2VuQGV4YW1wbGUub3JnO1NVQjpTdHVmZjtCT0RZOlRoaXMgaXMgc29tZSB0ZXh0OzsiCisgICAgICAgICAgICAgICAgICAgICBlbWFpbDpAInNyb3dlbkBleGFtcGxlLm9yZyIgc3ViamVjdDpAIlN0dWZmIiBib2R5OkAiVGhpcyBpcyBzb21lIHRleHQiXTsKK30KKworLSAodm9pZCl0ZXN0U01UUCB7CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAInNtdHA6c3Jvd2VuQGV4YW1wbGUub3JnIiBlbWFpbDpAInNyb3dlbkBleGFtcGxlLm9yZyIgc3ViamVjdDpuaWwgYm9keTpuaWxdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJTTVRQOnNyb3dlbkBleGFtcGxlLm9yZyIgZW1haWw6QCJzcm93ZW5AZXhhbXBsZS5vcmciIHN1YmplY3Q6bmlsIGJvZHk6bmlsXTsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiU01UUDpzcm93ZW5AZXhhbXBsZS5vcmc6Zm9vIiBlbWFpbDpAInNyb3dlbkBleGFtcGxlLm9yZyIgc3ViamVjdDpAImZvbyIgYm9keTpuaWxdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJTTVRQOnNyb3dlbkBleGFtcGxlLm9yZzpmb286YmFyIiBlbWFpbDpAInNyb3dlbkBleGFtcGxlLm9yZyIgc3ViamVjdDpAImZvbyIgYm9keTpAImJhciJdOworfQorCistICh2b2lkKWRvVGVzdFdpdGhDb250ZW50czooTlNTdHJpbmcgKiljb250ZW50cworICAgICAgICAgICAgICAgICAgICAgZW1haWw6KE5TU3RyaW5nICopZW1haWwKKyAgICAgICAgICAgICAgICAgICBzdWJqZWN0OihOU1N0cmluZyAqKXN1YmplY3QKKyAgICAgICAgICAgICAgICAgICAgICBib2R5OihOU1N0cmluZyAqKWJvZHkgeworICBaWFJlc3VsdCAqZmFrZVJlc3VsdCA9IFtaWFJlc3VsdCByZXN1bHRXaXRoVGV4dDpjb250ZW50cyByYXdCeXRlczpOVUxMIGxlbmd0aDowIHJlc3VsdFBvaW50czpuaWwgZm9ybWF0OmtCYXJjb2RlRm9ybWF0UVJDb2RlXTsKKyAgWlhQYXJzZWRSZXN1bHQgKnJlc3VsdCA9IFtaWFJlc3VsdFBhcnNlciBwYXJzZVJlc3VsdDpmYWtlUmVzdWx0XTsKKyAgU1RBc3NlcnRFcXVhbHMocmVzdWx0LnR5cGUsIGtQYXJzZWRSZXN1bHRUeXBlRW1haWxBZGRyZXNzLCBAIlR5cGVzIGRvIG5vdCBtYXRjaCIpOworICBaWEVtYWlsQWRkcmVzc1BhcnNlZFJlc3VsdCAqZW1haWxSZXN1bHQgPSAoWlhFbWFpbEFkZHJlc3NQYXJzZWRSZXN1bHQgKilyZXN1bHQ7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGVtYWlsUmVzdWx0LmVtYWlsQWRkcmVzcywgZW1haWwsIEAiRW1haWwgYWRkcmVzc2VzIGRvIG5vdCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhlbWFpbFJlc3VsdC5tYWlsdG9VUkksIFtAIm1haWx0bzoiIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmVtYWlsUmVzdWx0LmVtYWlsQWRkcmVzc10sIEAiTWFpbHRvIFVSSXMgZG8gbm90IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGVtYWlsUmVzdWx0LnN1YmplY3QsIHN1YmplY3QsIEAiU3ViamVjdHMgZG8gbm90IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGVtYWlsUmVzdWx0LmJvZHksIGJvZHksIEAiQm9kaWVzIGRvIG5vdCBtYXRjaCIpOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0N2I1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxTZW5UZXN0aW5nS2l0L1NlblRlc3RpbmdLaXQuaD4KKworQGludGVyZmFjZSBaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYRXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2E5MTAyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0KQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZQorCistICh2b2lkKXRlc3RfUlNTRXhwYW5kZWQgeworICBOU0RpY3Rpb25hcnkgKnVuY29tbW9uQUlzID0gQHtAIjEyMyI6IEAiNTQ0NjU0In07CisgIFpYUmVzdWx0ICpyZXN1bHQgPSBbWlhSZXN1bHQgcmVzdWx0V2l0aFRleHQ6QCIoMDEpNjY1NDYoMTMpMDAxMjA1KDM5MzIpNDQ1NSgzMTAyKTY1NDQoMTIzKTU0NDY1NCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdCeXRlczpOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UG9pbnRzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OmtCYXJjb2RlRm9ybWF0UlNTRXhwYW5kZWRdOworICBaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdCAqbyA9IChaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdCAqKVtbW1pYRXhwYW5kZWRQcm9kdWN0UmVzdWx0UGFyc2VyIGFsbG9jXSBpbml0XSBwYXJzZTpyZXN1bHRdOworICBTVEFzc2VydE5vdE5pbChvLCBAIkV4cGVjdGVkIHJlc3VsdCB0byBiZSBub24tbmlsIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKG8ucHJvZHVjdElELCBAIjY2NTQ2IiwgQCJQcm9kdWN0IElEcyBkb24ndCBtYXRjaCIpOworICBTVEFzc2VydE5pbChvLnNzY2MsIEAiRXhwZWN0ZWQgc3NjYyB0byBiZSBuaWwiKTsKKyAgU1RBc3NlcnROaWwoby5sb3ROdW1iZXIsIEAiRXhwZWN0ZWQgbG90IG51bWJlciB0byBiZSBuaWwiKTsKKyAgU1RBc3NlcnROaWwoby5wcm9kdWN0aW9uRGF0ZSwgQCJFeHBlY3RlZCBwcm9kdWN0aW9uIGRhdGVzIHRvIGJlIG5pbCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhvLnBhY2thZ2luZ0RhdGUsIEAiMDAxMjA1IiwgQCJQYWNrYWdpbmcgZGF0ZXMgZG9uJ3QgbWF0Y2giKTsKKyAgU1RBc3NlcnROaWwoby5iZXN0QmVmb3JlRGF0ZSwgQCJFeHBlY3RlZCBiZXN0IGJlZm9yZSBkYXRlIHRvIGJlIG5pbCIpOworICBTVEFzc2VydE5pbChvLmV4cGlyYXRpb25EYXRlLCBAIkV4cGVjdGVkIGV4cGlyYXRpb24gZGF0ZSB0byBiZSBuaWwiKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoby53ZWlnaHQsIEAiNjU0NCIsIEAiV2VpZ2h0cyBkb24ndCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhvLndlaWdodFR5cGUsIEAiS0ciLCBAIldlaWdodCB0eXBlcyBkb24ndCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhvLndlaWdodEluY3JlbWVudCwgQCIyIiwgQCJXZWlnaHQgaW5jcmVtZW50cyBkb24ndCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhvLnByaWNlLCBAIjUiLCBAIlByaWNlcyBkb24ndCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhvLnByaWNlSW5jcmVtZW50LCBAIjIiLCBAIlByaWNlIGluY3JlbWVudHMgZG9uJ3QgbWF0Y2giKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoby5wcmljZUN1cnJlbmN5LCBAIjQ0NSIsIEAiUHJpY2UgY3VycmVuY2llcyBkb24ndCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhvLnVuY29tbW9uQUlzLCB1bmNvbW1vbkFJcywgQCJVbmNvbW1vbiBBSXMgZG9uJ3QgbWF0Y2giKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWEdlb1BhcnNlZFJlc3VsdFRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYR2VvUGFyc2VkUmVzdWx0VGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWJiODc4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWEdlb1BhcnNlZFJlc3VsdFRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhHZW9QYXJzZWRSZXN1bHRUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhHZW9QYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWEdlb1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1OWNiNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhHZW9QYXJzZWRSZXN1bHRUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYR2VvUGFyc2VkUmVzdWx0VGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFpYR2VvUGFyc2VkUmVzdWx0VGVzdENhc2UKKworc3RhdGljIGRvdWJsZSBFUFNJTE9OID0gMC4wMDAwMDAwMDAxOworCistICh2b2lkKXRlc3RHZW8geworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJnZW86MSwyIiBsYXRpdHVkZToxLjAgbG9uZ2l0dWRlOjIuMCBhbHRpdHVkZTowLjAgcXVlcnk6bmlsXTsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiZ2VvOjgwLjMzLC0zMi4zMzQ0LDMuMzUiIGxhdGl0dWRlOjgwLjMzIGxvbmdpdHVkZTotMzIuMzM0NCBhbHRpdHVkZTozLjM1IHF1ZXJ5Om5pbF07CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAImdlbzotMjAuMzMsMTMyLjMzNDQsMC4wMSIgbGF0aXR1ZGU6LTIwLjMzIGxvbmdpdHVkZToxMzIuMzM0NCBhbHRpdHVkZTowLjAxIHF1ZXJ5Om5pbF07CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAImdlbzotMjAuMzMsMTMyLjMzNDQsMC4wMT9xPWZvb2JhciIgbGF0aXR1ZGU6LTIwLjMzIGxvbmdpdHVkZToxMzIuMzM0NCBhbHRpdHVkZTowLjAxIHF1ZXJ5OkAicT1mb29iYXIiXTsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiR0VPOi0yMC4zMywxMzIuMzM0NCwwLjAxP3E9Zm9vYmFyIiBsYXRpdHVkZTotMjAuMzMgbG9uZ2l0dWRlOjEzMi4zMzQ0IGFsdGl0dWRlOjAuMDEgcXVlcnk6QCJxPWZvb2JhciJdOworfQorCistICh2b2lkKWRvVGVzdFdpdGhDb250ZW50czooTlNTdHJpbmcgKiljb250ZW50cworICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6KGRvdWJsZSlsYXRpdHVkZQorICAgICAgICAgICAgICAgICBsb25naXR1ZGU6KGRvdWJsZSlsb25naXR1ZGUKKyAgICAgICAgICAgICAgICAgIGFsdGl0dWRlOihkb3VibGUpYWx0aXR1ZGUKKyAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5IHsKKyAgWlhSZXN1bHQgKmZha2VSZXN1bHQgPSBbWlhSZXN1bHQgcmVzdWx0V2l0aFRleHQ6Y29udGVudHMgcmF3Qnl0ZXM6TlVMTCBsZW5ndGg6MCByZXN1bHRQb2ludHM6bmlsIGZvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZV07CisgIFpYUGFyc2VkUmVzdWx0ICpyZXN1bHQgPSBbWlhSZXN1bHRQYXJzZXIgcGFyc2VSZXN1bHQ6ZmFrZVJlc3VsdF07CisgIFNUQXNzZXJ0RXF1YWxzKHJlc3VsdC50eXBlLCBrUGFyc2VkUmVzdWx0VHlwZUdlbywgQCJUeXBlcyBkb24ndCBtYXRjaCIpOworICBaWEdlb1BhcnNlZFJlc3VsdCAqZ2VvUmVzdWx0ID0gKFpYR2VvUGFyc2VkUmVzdWx0ICopcmVzdWx0OworICBTVEFzc2VydEVxdWFsc1dpdGhBY2N1cmFjeShnZW9SZXN1bHQubGF0aXR1ZGUsIGxhdGl0dWRlLCBFUFNJTE9OLCBAIkxhdGl0dWRlcyBkb24ndCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsc1dpdGhBY2N1cmFjeShnZW9SZXN1bHQubG9uZ2l0dWRlLCBsb25naXR1ZGUsIEVQU0lMT04sIEAiTG9uZ2l0dWRlcyBkb24ndCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsc1dpdGhBY2N1cmFjeShnZW9SZXN1bHQuYWx0aXR1ZGUsIGFsdGl0dWRlLCBFUFNJTE9OLCBAIkFsdGl0dWRlcyBkb24ndCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhnZW9SZXN1bHQucXVlcnksIHF1ZXJ5LCBAIlF1ZXJpZXMgZG9uJ3QgbWF0Y2giKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWElTQk5QYXJzZWRSZXN1bHRUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWElTQk5QYXJzZWRSZXN1bHRUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NjQyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYSVNCTlBhcnNlZFJlc3VsdFRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhJU0JOUGFyc2VkUmVzdWx0VGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYSVNCTlBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYSVNCTlBhcnNlZFJlc3VsdFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0NDYyZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhJU0JOUGFyc2VkUmVzdWx0VGVzdENhc2UubQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWElTQk5QYXJzZWRSZXN1bHRUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhJU0JOUGFyc2VkUmVzdWx0VGVzdENhc2UKKworLSAodm9pZCl0ZXN0SVNCTiB7CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIjk3ODQ1Njc4OTAxMjMiXTsKK30KKworLSAodm9pZClkb1Rlc3RXaXRoQ29udGVudHM6KE5TU3RyaW5nICopY29udGVudHMgeworICBaWFJlc3VsdCAqZmFrZVJlc3VsdCA9IFtaWFJlc3VsdCByZXN1bHRXaXRoVGV4dDpjb250ZW50cyByYXdCeXRlczpOVUxMIGxlbmd0aDowIHJlc3VsdFBvaW50czpuaWwgZm9ybWF0OmtCYXJjb2RlRm9ybWF0RWFuMTNdOworICBaWFBhcnNlZFJlc3VsdCAqcmVzdWx0ID0gW1pYUmVzdWx0UGFyc2VyIHBhcnNlUmVzdWx0OmZha2VSZXN1bHRdOworICBTVEFzc2VydEVxdWFscyhyZXN1bHQudHlwZSwga1BhcnNlZFJlc3VsdFR5cGVJU0JOLCBAIlR5cGVzIGRvbid0IG1hdGNoIik7CisgIFpYSVNCTlBhcnNlZFJlc3VsdCAqaXNiblJlc3VsdCA9IChaWElTQk5QYXJzZWRSZXN1bHQgKilyZXN1bHQ7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGlzYm5SZXN1bHQuaXNibiwgY29udGVudHMsIEAiQ29udGVudHMgZG9uJ3QgbWF0Y2giKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFBhcnNlZFJlYWRlclJlc3VsdFRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYUGFyc2VkUmVhZGVyUmVzdWx0VGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDgwNDdhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFBhcnNlZFJlYWRlclJlc3VsdFRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhQYXJzZWRSZWFkZXJSZXN1bHRUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhQYXJzZWRSZWFkZXJSZXN1bHRUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFBhcnNlZFJlYWRlclJlc3VsdFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M2N2Q1MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhQYXJzZWRSZWFkZXJSZXN1bHRUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFBhcnNlZFJlYWRlclJlc3VsdFRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFBhcnNlZFJlYWRlclJlc3VsdFRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdFRleHRUeXBlIHsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiIiBnb2xkZW5SZXN1bHQ6QCIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVUZXh0XTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiZm9vIiBnb2xkZW5SZXN1bHQ6QCJmb28iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVUZXh0XTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiSGkuIiBnb2xkZW5SZXN1bHQ6QCJIaS4iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVUZXh0XTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiVGhpcyBpcyBhIHRlc3RcbndpdGggbmV3bGluZXMiIGdvbGRlblJlc3VsdDpAIlRoaXMgaXMgYSB0ZXN0XG53aXRoIG5ld2xpbmVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVUZXh0XTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiVGhpczogYSB0ZXN0IHdpdGggbG90cyBvZiBAIG5lYXJseS1yYW5kb20gcHVuY3R1YXRpb24hIE5vPyBPSyB0aGVuLiIKKyAgICAgICAgICAgICAgICAgICAgZ29sZGVuUmVzdWx0OkAiVGhpczogYSB0ZXN0IHdpdGggbG90cyBvZiBAIG5lYXJseS1yYW5kb20gcHVuY3R1YXRpb24hIE5vPyBPSyB0aGVuLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVGV4dF07Cit9CisKKy0gKHZvaWQpdGVzdEJvb2ttYXJrVHlwZSB7CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIk1FQktNOlVSTDpnb29nbGUuY29tOzsiIGdvbGRlblJlc3VsdDpAImh0dHA6Ly9nb29nbGUuY29tIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVVJJXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiTUVCS006VVJMOmdvb2dsZS5jb207VElUTEU6R29vZ2xlOzsiIGdvbGRlblJlc3VsdDpAIkdvb2dsZVxuaHR0cDovL2dvb2dsZS5jb20iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVVSSV07CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIk1FQktNOlRJVExFOkdvb2dsZTtVUkw6Z29vZ2xlLmNvbTs7IiBnb2xkZW5SZXN1bHQ6QCJHb29nbGVcbmh0dHA6Ly9nb29nbGUuY29tIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVVUkldOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJNRUJLTTpVUkw6aHR0cDovL2dvb2dsZS5jb207OyIgZ29sZGVuUmVzdWx0OkAiaHR0cDovL2dvb2dsZS5jb20iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVVUkldOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJNRUJLTTpVUkw6SFRUUFM6Ly9nb29nbGUuY29tOzsiIGdvbGRlblJlc3VsdDpAIkhUVFBTOi8vZ29vZ2xlLmNvbSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVVSSV07Cit9CisKKy0gKHZvaWQpdGVzdFVSTFRPVHlwZSB7CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAInVybHRvOmZvbzpiYXIuY29tIiBnb2xkZW5SZXN1bHQ6QCJmb29cbmh0dHA6Ly9iYXIuY29tIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVVJJXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiVVJMVE86Zm9vOmJhci5jb20iIGdvbGRlblJlc3VsdDpAImZvb1xuaHR0cDovL2Jhci5jb20iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVVUkldOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJVUkxUTzo6YmFyLmNvbSIgZ29sZGVuUmVzdWx0OkAiaHR0cDovL2Jhci5jb20iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVVUkldOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJVUkxUTzo6aHR0cDovL2Jhci5jb20iIGdvbGRlblJlc3VsdDpAImh0dHA6Ly9iYXIuY29tIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVVJJXTsKK30KKworLSAodm9pZCl0ZXN0RW1haWxUeXBlIHsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiTUFUTVNHOlRPOnNyb3dlbkBleGFtcGxlLm9yZzs7IiBnb2xkZW5SZXN1bHQ6QCJzcm93ZW5AZXhhbXBsZS5vcmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTprUGFyc2VkUmVzdWx0VHlwZUVtYWlsQWRkcmVzc107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIk1BVE1TRzpUTzpzcm93ZW5AZXhhbXBsZS5vcmc7U1VCOlN0dWZmOzsiIGdvbGRlblJlc3VsdDpAInNyb3dlbkBleGFtcGxlLm9yZ1xuU3R1ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTprUGFyc2VkUmVzdWx0VHlwZUVtYWlsQWRkcmVzc107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIk1BVE1TRzpUTzpzcm93ZW5AZXhhbXBsZS5vcmc7U1VCOlN0dWZmO0JPRFk6VGhpcyBpcyBzb21lIHRleHQ7OyIKKyAgICAgICAgICAgICAgICAgICAgZ29sZGVuUmVzdWx0OkAic3Jvd2VuQGV4YW1wbGUub3JnXG5TdHVmZlxuVGhpcyBpcyBzb21lIHRleHQiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVFbWFpbEFkZHJlc3NdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJNQVRNU0c6U1VCOlN0dWZmO0JPRFk6VGhpcyBpcyBzb21lIHRleHQ7VE86c3Jvd2VuQGV4YW1wbGUub3JnOzsiCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDpAInNyb3dlbkBleGFtcGxlLm9yZ1xuU3R1ZmZcblRoaXMgaXMgc29tZSB0ZXh0IiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlRW1haWxBZGRyZXNzXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiVE86c3Jvd2VuQGV4YW1wbGUub3JnO1NVQjpTdHVmZjtCT0RZOlRoaXMgaXMgc29tZSB0ZXh0OzsiCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDpAIlRPOnNyb3dlbkBleGFtcGxlLm9yZztTVUI6U3R1ZmY7Qk9EWTpUaGlzIGlzIHNvbWUgdGV4dDs7IiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVGV4dF07Cit9CisKKy0gKHZvaWQpdGVzdEVtYWlsQWRkcmVzc1R5cGUgeworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJzcm93ZW5AZXhhbXBsZS5vcmciIGdvbGRlblJlc3VsdDpAInNyb3dlbkBleGFtcGxlLm9yZyIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZUVtYWlsQWRkcmVzc107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIm1haWx0bzpzcm93ZW5AZXhhbXBsZS5vcmciIGdvbGRlblJlc3VsdDpAInNyb3dlbkBleGFtcGxlLm9yZyIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZUVtYWlsQWRkcmVzc107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIk1BSUxUTzpzcm93ZW5AZXhhbXBsZS5vcmciIGdvbGRlblJlc3VsdDpAInNyb3dlbkBleGFtcGxlLm9yZyIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZUVtYWlsQWRkcmVzc107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAInNyb3dlbkBleGFtcGxlIiBnb2xkZW5SZXN1bHQ6QCJzcm93ZW5AZXhhbXBsZSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZUVtYWlsQWRkcmVzc107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAInNyb3dlbiIgZ29sZGVuUmVzdWx0OkAic3Jvd2VuIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVGV4dF07CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIkxldCdzIG1lZXQgQCAyIiBnb2xkZW5SZXN1bHQ6QCJMZXQncyBtZWV0IEAgMiIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVRleHRdOworfQorCistICh2b2lkKXRlc3RBZGRyZXNzQm9va1R5cGUgeworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJNRUNBUkQ6TjpTZWFuIE93ZW47OyIgZ29sZGVuUmVzdWx0OkAiU2VhbiBPd2VuIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlQWRkcmVzc0Jvb2tdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJNRUNBUkQ6VEVMOisxMjEyNTU1MTIxMjtOOlNlYW4gT3dlbjs7IiBnb2xkZW5SZXN1bHQ6QCJTZWFuIE93ZW5cbisxMjEyNTU1MTIxMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlQWRkcmVzc0Jvb2tdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJNRUNBUkQ6VEVMOisxMjEyNTU1MTIxMjtOOlNlYW4gT3dlbjtVUkw6Z29vZ2xlLmNvbTs7IgorICAgICAgICAgICAgICAgICAgICBnb2xkZW5SZXN1bHQ6QCJTZWFuIE93ZW5cbisxMjEyNTU1MTIxMlxuZ29vZ2xlLmNvbSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZUFkZHJlc3NCb29rXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiTUVDQVJEOlRFTDorMTIxMjU1NTEyMTI7TjpTZWFuIE93ZW47VVJMOmdvb2dsZS5jb207RU1BSUw6c3Jvd2VuQGV4YW1wbGUub3JnOyIKKyAgICAgICAgICAgICAgICAgICAgZ29sZGVuUmVzdWx0OkAiU2VhbiBPd2VuXG4rMTIxMjU1NTEyMTJcbnNyb3dlbkBleGFtcGxlLm9yZ1xuZ29vZ2xlLmNvbSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZUFkZHJlc3NCb29rXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiTUVDQVJEOkFEUjo3NiA5dGggQXZlO046U2VhbiBPd2VuO1VSTDpnb29nbGUuY29tO0VNQUlMOnNyb3dlbkBleGFtcGxlLm9yZzsiCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDpAIlNlYW4gT3dlblxuNzYgOXRoIEF2ZVxuc3Jvd2VuQGV4YW1wbGUub3JnXG5nb29nbGUuY29tIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlQWRkcmVzc0Jvb2tdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJNRUNBUkQ6QkRBWToxOTc2MDUyMDtOOlNlYW4gT3dlbjtVUkw6Z29vZ2xlLmNvbTtFTUFJTDpzcm93ZW5AZXhhbXBsZS5vcmc7IgorICAgICAgICAgICAgICAgICAgICBnb2xkZW5SZXN1bHQ6QCJTZWFuIE93ZW5cbnNyb3dlbkBleGFtcGxlLm9yZ1xuZ29vZ2xlLmNvbVxuMTk3NjA1MjAiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVBZGRyZXNzQm9va107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIk1FQ0FSRDpPUkc6R29vZ2xlO046U2VhbiBPd2VuO1VSTDpnb29nbGUuY29tO0VNQUlMOnNyb3dlbkBleGFtcGxlLm9yZzsiCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDpAIlNlYW4gT3dlblxuR29vZ2xlXG5zcm93ZW5AZXhhbXBsZS5vcmdcbmdvb2dsZS5jb20iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVBZGRyZXNzQm9va107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIk1FQ0FSRDpOT1RFOlpYaW5nIFRlYW07TjpTZWFuIE93ZW47VVJMOmdvb2dsZS5jb207RU1BSUw6c3Jvd2VuQGV4YW1wbGUub3JnOyIKKyAgICAgICAgICAgICAgICAgICAgZ29sZGVuUmVzdWx0OkAiU2VhbiBPd2VuXG5zcm93ZW5AZXhhbXBsZS5vcmdcbmdvb2dsZS5jb21cblpYaW5nIFRlYW0iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVBZGRyZXNzQm9va107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIk46U2VhbiBPd2VuO1RFTDorMTIxMjU1NTEyMTI7OyIgZ29sZGVuUmVzdWx0OkAiTjpTZWFuIE93ZW47VEVMOisxMjEyNTU1MTIxMjs7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVUZXh0XTsKK30KKworLSAodm9pZCl0ZXN0QWRkcmVzc0Jvb2tBVVR5cGUgeworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJNRU1PUlk6XHJcbiIgZ29sZGVuUmVzdWx0OkAiIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlQWRkcmVzc0Jvb2tdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJNRU1PUlk6Zm9vXHJcbk5BTUUxOlNlYW5cclxuIiBnb2xkZW5SZXN1bHQ6QCJTZWFuXG5mb28iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVBZGRyZXNzQm9va107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIlRFTDE6KzEyMTI1NTUxMjEyXHJcbk1FTU9SWTpcclxuIiBnb2xkZW5SZXN1bHQ6QCIrMTIxMjU1NTEyMTIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVBZGRyZXNzQm9va107Cit9CisKKy0gKHZvaWQpdGVzdEJpemNhcmQgeworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJCSVpDQVJEOk46U2VhbjtYOk93ZW47QzpHb29nbGU7QToxMjMgTWFpbiBTdDtNOisxMjIyNTU1MTIxMjtFOnNyb3dlbkBleGFtcGxlLm9yZzsiCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDpAIlNlYW4gT3dlblxuR29vZ2xlXG4xMjMgTWFpbiBTdFxuKzEyMjI1NTUxMjEyXG5zcm93ZW5AZXhhbXBsZS5vcmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTprUGFyc2VkUmVzdWx0VHlwZUFkZHJlc3NCb29rXTsKK30KKworLSAodm9pZCl0ZXN0VVBDQSB7CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIjEyMzQ1Njc4OTAxMiIgZ29sZGVuUmVzdWx0OkAiMTIzNDU2Nzg5MDEyIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlUHJvZHVjdCBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENBXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiMTIzNDU2Nzg5MDEyMyIgZ29sZGVuUmVzdWx0OkAiMTIzNDU2Nzg5MDEyMyIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVByb2R1Y3QgZm9ybWF0OmtCYXJjb2RlRm9ybWF0VVBDQV07CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIjEyMzQ1Njc4OTAxIiBnb2xkZW5SZXN1bHQ6QCIxMjM0NTY3ODkwMSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVRleHRdOworfQorCistICh2b2lkKXRlc3RVUENFIHsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiMDEyMzQ1NjUiIGdvbGRlblJlc3VsdDpAIjAxMjM0NTY1IiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlUHJvZHVjdCBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENFXTsKK30KKworLSAodm9pZCl0ZXN0RUFOIHsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiMDAzOTMxNTciIGdvbGRlblJlc3VsdDpAIjAwMzkzMTU3IiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlUHJvZHVjdCBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRFYW44XTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiMDAzOTMxNTgiIGdvbGRlblJlc3VsdDpAIjAwMzkzMTU4IiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVGV4dF07CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIjUwNTExNDAxNzg0OTkiIGdvbGRlblJlc3VsdDpAIjUwNTExNDAxNzg0OTkiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVQcm9kdWN0IGZvcm1hdDprQmFyY29kZUZvcm1hdEVhbjEzXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiNTA1MTE0MDE3ODQ5MCIgZ29sZGVuUmVzdWx0OkAiNTA1MTE0MDE3ODQ5MCIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVRleHRdOworfQorCistICh2b2lkKXRlc3RJU0JOIHsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiOTc4NDU2Nzg5MDEyMyIgZ29sZGVuUmVzdWx0OkAiOTc4NDU2Nzg5MDEyMyIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZUlTQk4gZm9ybWF0OmtCYXJjb2RlRm9ybWF0RWFuMTNdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCI5Nzk0NTY3ODkwMTIzIiBnb2xkZW5SZXN1bHQ6QCI5Nzk0NTY3ODkwMTIzIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlSVNCTiBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRFYW4xM107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIjk3ODQ1Njc4OTAxIiBnb2xkZW5SZXN1bHQ6QCI5Nzg0NTY3ODkwMSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVRleHRdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCI5Nzk0NTY3ODkwMSIgZ29sZGVuUmVzdWx0OkAiOTc5NDU2Nzg5MDEiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVUZXh0XTsKK30KKworLSAodm9pZCl0ZXN0VVJJIHsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiaHR0cDovL2dvb2dsZS5jb20iIGdvbGRlblJlc3VsdDpAImh0dHA6Ly9nb29nbGUuY29tIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVVJJXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiZ29vZ2xlLmNvbSIgZ29sZGVuUmVzdWx0OkAiaHR0cDovL2dvb2dsZS5jb20iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVVUkldOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJodHRwczovL2dvb2dsZS5jb20iIGdvbGRlblJlc3VsdDpAImh0dHBzOi8vZ29vZ2xlLmNvbSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVVSSV07CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIkhUVFA6Ly9nb29nbGUuY29tIiBnb2xkZW5SZXN1bHQ6QCJIVFRQOi8vZ29vZ2xlLmNvbSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVVSSV07CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAImh0dHA6Ly9nb29nbGUuY29tL2Zvb2JhciIgZ29sZGVuUmVzdWx0OkAiaHR0cDovL2dvb2dsZS5jb20vZm9vYmFyIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVVJJXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiaHR0cHM6Ly9nb29nbGUuY29tOjQ0My9mb29iYXIiIGdvbGRlblJlc3VsdDpAImh0dHBzOi8vZ29vZ2xlLmNvbTo0NDMvZm9vYmFyIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVVJJXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiZ29vZ2xlLmNvbTo0NDMiIGdvbGRlblJlc3VsdDpAImh0dHA6Ly9nb29nbGUuY29tOjQ0MyIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVVSSV07CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAImdvb2dsZS5jb206NDQzLyIgZ29sZGVuUmVzdWx0OkAiaHR0cDovL2dvb2dsZS5jb206NDQzLyIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVVSSV07CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAImdvb2dsZS5jb206NDQzL2Zvb2JhciIgZ29sZGVuUmVzdWx0OkAiaHR0cDovL2dvb2dsZS5jb206NDQzL2Zvb2JhciIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVVSSV07CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAImh0dHA6Ly9nb29nbGUuY29tOjQ0My9mb29iYXIiIGdvbGRlblJlc3VsdDpAImh0dHA6Ly9nb29nbGUuY29tOjQ0My9mb29iYXIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVVUkldOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJodHRwczovL2dvb2dsZS5jb206NDQzL2Zvb2JhciIgZ29sZGVuUmVzdWx0OkAiaHR0cHM6Ly9nb29nbGUuY29tOjQ0My9mb29iYXIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVVUkldOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJmdHA6Ly9nb29nbGUuY29tL2Zha2UiIGdvbGRlblJlc3VsdDpAImZ0cDovL2dvb2dsZS5jb20vZmFrZSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVVSSV07CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAImdvcGhlcjovL2dvb2dsZS5jb20vb2Jzb2xldGUiIGdvbGRlblJlc3VsdDpAImdvcGhlcjovL2dvb2dsZS5jb20vb2Jzb2xldGUiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVVUkldOworfQorCistICh2b2lkKXRlc3RHZW8geworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJnZW86MSwyIiBnb2xkZW5SZXN1bHQ6QCIxLjAwMDAwMCwgMi4wMDAwMDAiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVHZW9dOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJnZW86MSwyLDMiIGdvbGRlblJlc3VsdDpAIjEuMDAwMDAwLCAyLjAwMDAwMCwgMy4wMDAwMDBtIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlR2VvXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiZ2VvOjgwLjMzLC0zMi4zMzQ0LDMuMzUiIGdvbGRlblJlc3VsdDpAIjgwLjMzMDAwMCwgLTMyLjMzNDQwMCwgMy4zNTAwMDBtIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlR2VvXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiZ2VvIiBnb2xkZW5SZXN1bHQ6QCJnZW8iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVUZXh0XTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiZ2VvZ3JhcGh5IiBnb2xkZW5SZXN1bHQ6QCJnZW9ncmFwaHkiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVUZXh0XTsKK30KKworLSAodm9pZCl0ZXN0VGVsIHsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAidGVsOisxNTU1MTIxMiIgZ29sZGVuUmVzdWx0OkAiKzE1NTUxMjEyIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVGVsXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiVEVMOisxNTU1MTIxMiIgZ29sZGVuUmVzdWx0OkAiKzE1NTUxMjEyIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVGVsXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAidGVsOjIxMiA1NTUgMTIxMiIgZ29sZGVuUmVzdWx0OkAiMjEyIDU1NSAxMjEyIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlVGVsXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAidGVsOjIxMjU1NTEyMTIiIGdvbGRlblJlc3VsdDpAIjIxMjU1NTEyMTIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVUZWxdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJ0ZWw6MjEyLTU1NS0xMjEyIiBnb2xkZW5SZXN1bHQ6QCIyMTItNTU1LTEyMTIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVUZWxdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJ0ZWwiIGdvbGRlblJlc3VsdDpAInRlbCIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVRleHRdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJ0ZWxlcGhvbmUiIGdvbGRlblJlc3VsdDpAInRlbGVwaG9uZSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVRleHRdOworfQorCistICh2b2lkKXRlc3RWQ2FyZCB7CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIkJFR0lOOlZDQVJEXHJcbkVORDpWQ0FSRCIgZ29sZGVuUmVzdWx0OkAiIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlQWRkcmVzc0Jvb2tdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJCRUdJTjpWQ0FSRFxyXG5OOk93ZW47U2VhblxyXG5FTkQ6VkNBUkQiIGdvbGRlblJlc3VsdDpAIlNlYW4gT3dlbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlQWRkcmVzc0Jvb2tdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJCRUdJTjpWQ0FSRFxyXG5WRVJTSU9OOjIuMVxyXG5OOk93ZW47U2VhblxyXG5FTkQ6VkNBUkQiIGdvbGRlblJlc3VsdDpAIlNlYW4gT3dlbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlQWRkcmVzc0Jvb2tdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJCRUdJTjpWQ0FSRFxyXG5BRFI7SE9NRToxMjMgTWFpbiBTdFxyXG5WRVJTSU9OOjIuMVxyXG5OOk93ZW47U2VhblxyXG5FTkQ6VkNBUkQiCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDpAIlNlYW4gT3dlblxuMTIzIE1haW4gU3QiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVBZGRyZXNzQm9va107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIkJFR0lOOlZDQVJEIiBnb2xkZW5SZXN1bHQ6QCIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVBZGRyZXNzQm9va107Cit9CisKKy0gKHZvaWQpdGVzdFZFdmVudCB7CisgIC8vIFVUQyB0aW1lcworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJCRUdJTjpWQ0FMRU5EQVJcclxuQkVHSU46VkVWRU5UXHJcblNVTU1BUlk6Zm9vXHJcbkRUU1RBUlQ6MjAwODA1MDRUMTIzNDU2WlxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRURU5EOjIwMDgwNTA1VDIzNDU1NVpcclxuRU5EOlZFVkVOVFxyXG5FTkQ6VkNBTEVOREFSIgorICAgICAgICAgICAgICAgICAgICBnb2xkZW5SZXN1bHQ6QCJmb29cbk1heSA0LCAyMDA4IDEyOjM0OjU2IFBNXG5NYXkgNSwgMjAwOCAxMTo0NTo1NSBQTSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlQ2FsZW5kYXJdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJCRUdJTjpWRVZFTlRcclxuU1VNTUFSWTpmb29cclxuRFRTVEFSVDoyMDA4MDUwNFQxMjM0NTZaXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiRFRFTkQ6MjAwODA1MDVUMjM0NTU1WlxyXG5FTkQ6VkVWRU5UIgorICAgICAgICAgICAgICAgICAgICBnb2xkZW5SZXN1bHQ6QCJmb29cbk1heSA0LCAyMDA4IDEyOjM0OjU2IFBNXG5NYXkgNSwgMjAwOCAxMTo0NTo1NSBQTSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlQ2FsZW5kYXJdOworICAvLyBMb2NhbCB0aW1lcworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJCRUdJTjpWRVZFTlRcclxuU1VNTUFSWTpmb29cclxuRFRTVEFSVDoyMDA4MDUwNFQxMjM0NTZcclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQCJEVEVORDoyMDA4MDUwNVQyMzQ1NTVcclxuRU5EOlZFVkVOVCIKKyAgICAgICAgICAgICAgICAgICAgZ29sZGVuUmVzdWx0OkAiZm9vXG5NYXkgNCwgMjAwOCAxMjozNDo1NiBQTVxuTWF5IDUsIDIwMDggMTE6NDU6NTUgUE0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTprUGFyc2VkUmVzdWx0VHlwZUNhbGVuZGFyXTsKKyAgLy8gRGF0ZSBvbmx5IChhbGwgZGF5IGV2ZW50KQorICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJCRUdJTjpWRVZFTlRcclxuU1VNTUFSWTpmb29cclxuRFRTVEFSVDoyMDA4MDUwNFxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAIkRURU5EOjIwMDgwNTA1XHJcbkVORDpWRVZFTlQiCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDpAImZvb1xuTWF5IDQsIDIwMDhcbk1heSA1LCAyMDA4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVDYWxlbmRhcl07CisgIC8vIFN0YXJ0IHRpbWUgb25seQorICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJCRUdJTjpWRVZFTlRcclxuU1VNTUFSWTpmb29cclxuRFRTVEFSVDoyMDA4MDUwNFQxMjM0NTZaXHJcbkVORDpWRVZFTlQiCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDpAImZvb1xuTWF5IDQsIDIwMDggMTI6MzQ6NTYgUE0iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVDYWxlbmRhcl07CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIkJFR0lOOlZFVkVOVFxyXG5TVU1NQVJZOmZvb1xyXG5EVFNUQVJUOjIwMDgwNTA0VDEyMzQ1NlxyXG5FTkQ6VkVWRU5UIgorICAgICAgICAgICAgICAgICAgICBnb2xkZW5SZXN1bHQ6QCJmb29cbk1heSA0LCAyMDA4IDEyOjM0OjU2IFBNIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlQ2FsZW5kYXJdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJCRUdJTjpWRVZFTlRcclxuU1VNTUFSWTpmb29cclxuRFRTVEFSVDoyMDA4MDUwNFxyXG5FTkQ6VkVWRU5UIgorICAgICAgICAgICAgICAgICAgICBnb2xkZW5SZXN1bHQ6QCJmb29cbk1heSA0LCAyMDA4IiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlQ2FsZW5kYXJdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJCRUdJTjpWRVZFTlRcclxuRFRFTkQ6MjAwODA1MDVUXHJcbkVORDpWRVZFTlQiCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDpAIkJFR0lOOlZFVkVOVFxyXG5EVEVORDoyMDA4MDUwNVRcclxuRU5EOlZFVkVOVCIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVVSSV07CisgIC8vIFllYWgsIGl0J3MgT0sgdGhhdCB0aGlzIGlzIHRob3VnaHQgb2YgYXMgbWF5YmUgYSBVUkkgYXMgbG9uZyBhcyBpdCdzIG5vdCBDQUxFTkRBUgorICAvLyBNYWtlIHN1cmUgaWxsZWdhbCBlbnRyaWVzIHdpdGhvdXQgbmV3bGluZXMgZG9uJ3QgY3Jhc2gKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiQkVHSU46VkVWRU5UU1VNTUFSWTpFdmVudERUU1RBUlQ6MjAwODEwMzBUMTIyMDMwWkRURU5EOjIwMDgxMDMwVDEzMjAzMFpFTkQ6VkVWRU5UIgorICAgICAgICAgICAgICAgICAgICBnb2xkZW5SZXN1bHQ6QCJCRUdJTjpWRVZFTlRTVU1NQVJZOkV2ZW50RFRTVEFSVDoyMDA4MTAzMFQxMjIwMzBaRFRFTkQ6MjAwODEwMzBUMTMyMDMwWkVORDpWRVZFTlQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVVSSV07Cit9CisKKy0gKHZvaWQpdGVzdFNNUyB7CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAInNtczorMTU1NTEyMTIiIGdvbGRlblJlc3VsdDpAIisxNTU1MTIxMiIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVNNU107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIlNNUzorMTU1NTEyMTIiIGdvbGRlblJlc3VsdDpAIisxNTU1MTIxMiIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVNNU107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAInNtczorMTU1NTEyMTI7dmlhPTk5OTMzMyIgZ29sZGVuUmVzdWx0OkAiKzE1NTUxMjEyIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlU01TXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAic21zOisxNTU1MTIxMj9zdWJqZWN0PWZvbyZib2R5PWJhciIgZ29sZGVuUmVzdWx0OkAiKzE1NTUxMjEyXG5mb29cbmJhciIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVNNU107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAInNtczorMTU1NTEyMTIsKzEyMTI0NDQwMTAxIiBnb2xkZW5SZXN1bHQ6QCIrMTU1NTEyMTJcbisxMjEyNDQ0MDEwMSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVNNU107Cit9CisKKy0gKHZvaWQpdGVzdFNNU1RPIHsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAiU01TVE86KzE1NTUxMjEyIiBnb2xkZW5SZXN1bHQ6QCIrMTU1NTEyMTIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVTTVNdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJzbXN0bzorMTU1NTEyMTIiIGdvbGRlblJlc3VsdDpAIisxNTU1MTIxMiIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVNNU107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAInNtc3RvOisxNTU1MTIxMjpzdWJqZWN0IiBnb2xkZW5SZXN1bHQ6QCIrMTU1NTEyMTJcbnN1YmplY3QiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVTTVNdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJzbXN0bzorMTU1NTEyMTI6TXkgbWVzc2FnZSIgZ29sZGVuUmVzdWx0OkAiKzE1NTUxMjEyXG5NeSBtZXNzYWdlIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlU01TXTsKKyAgLy8gTmVlZCB0byBoYW5kbGUgcXVlc3Rpb24gbWFyayBpbiB0aGUgc3ViamVjdAorICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJzbXN0bzorMTU1NTEyMTI6V2hhdCdzIHVwPyIgZ29sZGVuUmVzdWx0OkAiKzE1NTUxMjEyXG5XaGF0J3MgdXA/IiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlU01TXTsKKyAgLy8gTmVlZCB0byBoYW5kbGUgY29sb24gaW4gdGhlIHN1YmplY3QKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAic21zdG86KzE1NTUxMjEyOkRpcmVjdGlvbnM6IERvIHRoaXMiCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDpAIisxNTU1MTIxMlxuRGlyZWN0aW9uczogRG8gdGhpcyIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVNNU107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAInNtc3RvOjIxMi01NTUtMTIxMjpIZXJlJ3MgYSBsb25nZXIgbWVzc2FnZS4gU2hvdWxkIGJlIGZpbmUuIgorICAgICAgICAgICAgICAgICAgICBnb2xkZW5SZXN1bHQ6QCIyMTItNTU1LTEyMTJcbkhlcmUncyBhIGxvbmdlciBtZXNzYWdlLiBTaG91bGQgYmUgZmluZS4iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVTTVNdOworfQorCistICh2b2lkKXRlc3RNTVMgeworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJtbXM6KzE1NTUxMjEyIiBnb2xkZW5SZXN1bHQ6QCIrMTU1NTEyMTIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVTTVNdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJNTVM6KzE1NTUxMjEyIiBnb2xkZW5SZXN1bHQ6QCIrMTU1NTEyMTIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVTTVNdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJtbXM6KzE1NTUxMjEyO3ZpYT05OTkzMzMiIGdvbGRlblJlc3VsdDpAIisxNTU1MTIxMiIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVNNU107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIm1tczorMTU1NTEyMTI/c3ViamVjdD1mb28mYm9keT1iYXIiIGdvbGRlblJlc3VsdDpAIisxNTU1MTIxMlxuZm9vXG5iYXIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVTTVNdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJtbXM6KzE1NTUxMjEyLCsxMjEyNDQ0MDEwMSIgZ29sZGVuUmVzdWx0OkAiKzE1NTUxMjEyXG4rMTIxMjQ0NDAxMDEiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVTTVNdOworfQorCistICh2b2lkKXRlc3RNTVNUTyB7CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIk1NU1RPOisxNTU1MTIxMiIgZ29sZGVuUmVzdWx0OkAiKzE1NTUxMjEyIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlU01TXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAibW1zdG86KzE1NTUxMjEyIiBnb2xkZW5SZXN1bHQ6QCIrMTU1NTEyMTIiIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVTTVNdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJtbXN0bzorMTU1NTEyMTI6c3ViamVjdCIgZ29sZGVuUmVzdWx0OkAiKzE1NTUxMjEyXG5zdWJqZWN0IiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlU01TXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAibW1zdG86KzE1NTUxMjEyOk15IG1lc3NhZ2UiIGdvbGRlblJlc3VsdDpAIisxNTU1MTIxMlxuTXkgbWVzc2FnZSIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVNNU107CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpAIm1tc3RvOisxNTU1MTIxMjpXaGF0J3MgdXA/IiBnb2xkZW5SZXN1bHQ6QCIrMTU1NTEyMTJcbldoYXQncyB1cD8iIHR5cGU6a1BhcnNlZFJlc3VsdFR5cGVTTVNdOworICBbc2VsZiBkb1Rlc3RSZXN1bHRXaXRoQ29udGVudHM6QCJtbXN0bzorMTU1NTEyMTI6RGlyZWN0aW9uczogRG8gdGhpcyIKKyAgICAgICAgICAgICAgICAgICAgZ29sZGVuUmVzdWx0OkAiKzE1NTUxMjEyXG5EaXJlY3Rpb25zOiBEbyB0aGlzIiB0eXBlOmtQYXJzZWRSZXN1bHRUeXBlU01TXTsKKyAgW3NlbGYgZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOkAibW1zdG86MjEyLTU1NS0xMjEyOkhlcmUncyBhIGxvbmdlciBtZXNzYWdlLiBTaG91bGQgYmUgZmluZS4iCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDpAIjIxMi01NTUtMTIxMlxuSGVyZSdzIGEgbG9uZ2VyIG1lc3NhZ2UuIFNob3VsZCBiZSBmaW5lLiIgdHlwZTprUGFyc2VkUmVzdWx0VHlwZVNNU107Cit9CisKKy0gKHZvaWQpZG9UZXN0UmVzdWx0V2l0aENvbnRlbnRzOihOU1N0cmluZyAqKWNvbnRlbnRzCisgICAgICAgICAgICAgICAgICAgIGdvbGRlblJlc3VsdDooTlNTdHJpbmcgKilnb2xkZW5SZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOihaWFBhcnNlZFJlc3VsdFR5cGUpdHlwZSB7CisgIFtzZWxmIGRvVGVzdFJlc3VsdFdpdGhDb250ZW50czpjb250ZW50cyBnb2xkZW5SZXN1bHQ6Z29sZGVuUmVzdWx0IHR5cGU6dHlwZSBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRRUkNvZGVdOyAvLyBRUiBjb2RlIGlzIGFyYml0cmFyeQorfQorCistICh2b2lkKWRvVGVzdFJlc3VsdFdpdGhDb250ZW50czooTlNTdHJpbmcgKiljb250ZW50cworICAgICAgICAgICAgICAgICAgICBnb2xkZW5SZXN1bHQ6KE5TU3RyaW5nICopZ29sZGVuUmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTooWlhQYXJzZWRSZXN1bHRUeXBlKXR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0IHsKKyAgWlhSZXN1bHQgKmZha2VSZXN1bHQgPSBbWlhSZXN1bHQgcmVzdWx0V2l0aFRleHQ6Y29udGVudHMgcmF3Qnl0ZXM6TlVMTCBsZW5ndGg6MCByZXN1bHRQb2ludHM6bmlsIGZvcm1hdDpmb3JtYXRdOworICBaWFBhcnNlZFJlc3VsdCAqcmVzdWx0ID0gW1pYUmVzdWx0UGFyc2VyIHBhcnNlUmVzdWx0OmZha2VSZXN1bHRdOworICBTVEFzc2VydE5vdE5pbChyZXN1bHQsIEAiUmVzdWx0IGlzIG5pbCIpOworICBTVEFzc2VydEVxdWFscyhyZXN1bHQudHlwZSwgdHlwZSwgQCJUeXBlcyBkb24ndCBtYXRjaCIpOworCisgIE5TU3RyaW5nICpkaXNwbGF5UmVzdWx0ID0gcmVzdWx0LmRpc3BsYXlSZXN1bHQ7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGRpc3BsYXlSZXN1bHQsIGdvbGRlblJlc3VsdCwgQCJEaXNwbGF5IHJlc3VsdCBkb2Vzbid0IG1hdGNoIGdvbGRlbiByZXN1bHQiKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODFhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYUHJvZHVjdFBhcnNlZFJlc3VsdFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2NDNkMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UubQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFByb2R1Y3RQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhQcm9kdWN0UGFyc2VkUmVzdWx0VGVzdENhc2UKKworLSAodm9pZCl0ZXN0UHJvZHVjdCB7CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIjEyMzQ1Njc4OTAxMiIgbm9ybWFsaXplZDpAIjEyMzQ1Njc4OTAxMiIgZm9ybWF0OmtCYXJjb2RlRm9ybWF0VVBDQV07CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIjAwMzkzMTU3IiBub3JtYWxpemVkOkAiMDAzOTMxNTciIGZvcm1hdDprQmFyY29kZUZvcm1hdEVhbjhdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCI1MDUxMTQwMTc4NDk5IiBub3JtYWxpemVkOkAiNTA1MTE0MDE3ODQ5OSIgZm9ybWF0OmtCYXJjb2RlRm9ybWF0RWFuMTNdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCIwMTIzNDU2NSIgbm9ybWFsaXplZDpAIjAxMjM0NTAwMDA2NSIgZm9ybWF0OmtCYXJjb2RlRm9ybWF0VVBDRV07Cit9CisKKy0gKHZvaWQpZG9UZXN0V2l0aENvbnRlbnRzOihOU1N0cmluZyAqKWNvbnRlbnRzCisgICAgICAgICAgICAgICAgbm9ybWFsaXplZDooTlNTdHJpbmcgKilub3JtYWxpemVkCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWZvcm1hdCB7CisgIFpYUmVzdWx0ICpmYWtlUmVzdWx0ID0gW1pYUmVzdWx0IHJlc3VsdFdpdGhUZXh0OmNvbnRlbnRzIHJhd0J5dGVzOk5VTEwgbGVuZ3RoOjAgcmVzdWx0UG9pbnRzOm5pbCBmb3JtYXQ6Zm9ybWF0XTsKKyAgWlhQYXJzZWRSZXN1bHQgKnJlc3VsdCA9IFtaWFJlc3VsdFBhcnNlciBwYXJzZVJlc3VsdDpmYWtlUmVzdWx0XTsKKyAgU1RBc3NlcnRFcXVhbHMocmVzdWx0LnR5cGUsIGtQYXJzZWRSZXN1bHRUeXBlUHJvZHVjdCwgQCJUeXBlcyBkb24ndCBtYXRjaCIpOworICBaWFByb2R1Y3RQYXJzZWRSZXN1bHQgKnByb2R1Y3RSZXN1bHQgPSAoWlhQcm9kdWN0UGFyc2VkUmVzdWx0ICopcmVzdWx0OworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhwcm9kdWN0UmVzdWx0LnByb2R1Y3RJRCwgY29udGVudHMsIEAiQ29udGVudHMgZG9uJ3QgbWF0Y2giKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMocHJvZHVjdFJlc3VsdC5ub3JtYWxpemVkUHJvZHVjdElELCBub3JtYWxpemVkLCBAIk5vcm1hbGl6ZWQgZG9lc24ndCBtYXRjaCIpOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYU01TTU1TUGFyc2VkUmVzdWx0VGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhTTVNNTVNQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNTg3ODEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYU01TTU1TUGFyc2VkUmVzdWx0VGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxTZW5UZXN0aW5nS2l0L1NlblRlc3RpbmdLaXQuaD4KKworQGludGVyZmFjZSBaWFNNU01NU1BhcnNlZFJlc3VsdFRlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFNNU01NU1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYU01TTU1TUGFyc2VkUmVzdWx0VGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmE2ZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFNNU01NU1BhcnNlZFJlc3VsdFRlc3RDYXNlLm0KQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhTTVNNTVNQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhTTVNNTVNQYXJzZWRSZXN1bHRUZXN0Q2FzZQorCistICh2b2lkKXRlc3RTTVMgeworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJzbXM6KzE1NTUxMjEyIiBudW1iZXI6QCIrMTU1NTEyMTIiIHN1YmplY3Q6bmlsIGJvZHk6bmlsIHZpYTpuaWxdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJzbXM6KzE1NTUxMjEyP3N1YmplY3Q9Zm9vJmJvZHk9YmFyIiBudW1iZXI6QCIrMTU1NTEyMTIiIHN1YmplY3Q6QCJmb28iIGJvZHk6QCJiYXIiIHZpYTpuaWxdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJzbXM6KzE1NTUxMjEyO3ZpYT05OTkzMzMiIG51bWJlcjpAIisxNTU1MTIxMiIgc3ViamVjdDpuaWwgYm9keTpuaWwgdmlhOkAiOTk5MzMzIl07Cit9CisKKy0gKHZvaWQpdGVzdE1NUyB7CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIm1tczorMTU1NTEyMTIiIG51bWJlcjpAIisxNTU1MTIxMiIgc3ViamVjdDpuaWwgYm9keTpuaWwgdmlhOm5pbF07CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIm1tczorMTU1NTEyMTI/c3ViamVjdD1mb28mYm9keT1iYXIiIG51bWJlcjpAIisxNTU1MTIxMiIgc3ViamVjdDpAImZvbyIgYm9keTpAImJhciIgdmlhOm5pbF07CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIm1tczorMTU1NTEyMTI7dmlhPTk5OTMzMyIgbnVtYmVyOkAiKzE1NTUxMjEyIiBzdWJqZWN0Om5pbCBib2R5Om5pbCB2aWE6QCI5OTkzMzMiXTsKK30KKworLSAodm9pZClkb1Rlc3RXaXRoQ29udGVudHM6KE5TU3RyaW5nICopY29udGVudHMKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyOihOU1N0cmluZyAqKW51bWJlcgorICAgICAgICAgICAgICAgICAgIHN1YmplY3Q6KE5TU3RyaW5nICopc3ViamVjdAorICAgICAgICAgICAgICAgICAgICAgIGJvZHk6KE5TU3RyaW5nICopYm9keQorICAgICAgICAgICAgICAgICAgICAgICB2aWE6KE5TU3RyaW5nICopdmlhIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOmNvbnRlbnRzCisgICAgICAgICAgICAgICAgICAgbnVtYmVyczpAW251bWJlciA/IG51bWJlciA6IFtOU051bGwgbnVsbF1dCisgICAgICAgICAgICAgICAgICAgc3ViamVjdDpzdWJqZWN0CisgICAgICAgICAgICAgICAgICAgICAgYm9keTpib2R5CisgICAgICAgICAgICAgICAgICAgICAgdmlhczpAW3ZpYSA/IHZpYSA6IFtOU051bGwgbnVsbF1dXTsKK30KKworLSAodm9pZClkb1Rlc3RXaXRoQ29udGVudHM6KE5TU3RyaW5nICopY29udGVudHMKKyAgICAgICAgICAgICAgICAgICBudW1iZXJzOihOU0FycmF5ICopbnVtYmVycworICAgICAgICAgICAgICAgICAgIHN1YmplY3Q6KE5TU3RyaW5nICopc3ViamVjdAorICAgICAgICAgICAgICAgICAgICAgIGJvZHk6KE5TU3RyaW5nICopYm9keQorICAgICAgICAgICAgICAgICAgICAgIHZpYXM6KE5TQXJyYXkgKil2aWFzIHsKKyAgWlhSZXN1bHQgKmZha2VSZXN1bHQgPSBbWlhSZXN1bHQgcmVzdWx0V2l0aFRleHQ6Y29udGVudHMgcmF3Qnl0ZXM6TlVMTCBsZW5ndGg6MCByZXN1bHRQb2ludHM6bmlsIGZvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZV07CisgIFpYUGFyc2VkUmVzdWx0ICpyZXN1bHQgPSBbWlhSZXN1bHRQYXJzZXIgcGFyc2VSZXN1bHQ6ZmFrZVJlc3VsdF07CisgIFNUQXNzZXJ0RXF1YWxzKHJlc3VsdC50eXBlLCBrUGFyc2VkUmVzdWx0VHlwZVNNUywgQCJUeXBlcyBkb24ndCBtYXRjaCIpOworICBaWFNNU1BhcnNlZFJlc3VsdCAqc21zUmVzdWx0ID0gKFpYU01TUGFyc2VkUmVzdWx0ICopcmVzdWx0OworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhzbXNSZXN1bHQubnVtYmVycywgbnVtYmVycywgQCJOdW1iZXJzIGRvbid0IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHNtc1Jlc3VsdC5zdWJqZWN0LCBzdWJqZWN0LCBAIlN1YmplY3RzIGRvbid0IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHNtc1Jlc3VsdC5ib2R5LCBib2R5LCBAIkJvZGllcyBkb24ndCBtYXRjaCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhzbXNSZXN1bHQudmlhcywgdmlhcywgQCJWaWFzIGRvbid0IG1hdGNoIik7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhUZWxQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFRlbFBhcnNlZFJlc3VsdFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4NDczMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhUZWxQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYVGVsUGFyc2VkUmVzdWx0VGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYVGVsUGFyc2VkUmVzdWx0VGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhUZWxQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NGIxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYVGVsUGFyc2VkUmVzdWx0VGVzdENhc2UubQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFRlbFBhcnNlZFJlc3VsdFRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFRlbFBhcnNlZFJlc3VsdFRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdFRlbCB7CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAInRlbDorMTU1NTEyMTIiIG51bWJlcjpAIisxNTU1MTIxMiIgdGl0bGU6bmlsXTsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAidGVsOjIxMjU1NTEyMTIiIG51bWJlcjpAIjIxMjU1NTEyMTIiIHRpdGxlOm5pbF07Cit9CisKKy0gKHZvaWQpZG9UZXN0V2l0aENvbnRlbnRzOihOU1N0cmluZyAqKWNvbnRlbnRzIG51bWJlcjooTlNTdHJpbmcgKiludW1iZXIgdGl0bGU6KE5TU3RyaW5nICopdGl0bGUgeworICBaWFJlc3VsdCAqZmFrZVJlc3VsdCA9IFtaWFJlc3VsdCByZXN1bHRXaXRoVGV4dDpjb250ZW50cyByYXdCeXRlczpOVUxMIGxlbmd0aDowIHJlc3VsdFBvaW50czpuaWwgZm9ybWF0OmtCYXJjb2RlRm9ybWF0UVJDb2RlXTsKKyAgWlhQYXJzZWRSZXN1bHQgKnJlc3VsdCA9IFtaWFJlc3VsdFBhcnNlciBwYXJzZVJlc3VsdDpmYWtlUmVzdWx0XTsKKyAgU1RBc3NlcnRFcXVhbHMocmVzdWx0LnR5cGUsIGtQYXJzZWRSZXN1bHRUeXBlVGVsLCBAIlR5cGVzIGRvbid0IG1hdGNoIik7CisgIFpYVGVsUGFyc2VkUmVzdWx0ICp0ZWxSZXN1bHQgPSAoWlhUZWxQYXJzZWRSZXN1bHQgKilyZXN1bHQ7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHRlbFJlc3VsdC5udW1iZXIsIG51bWJlciwgQCJOdW1iZXJzIGRvbid0IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHRlbFJlc3VsdC50aXRsZSwgdGl0bGUsIEAiVGl0bGVzIGRvbid0IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHRlbFJlc3VsdC50ZWxVUkksIFtAInRlbDoiIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOm51bWJlcl0sIEAiVGVsIFVSSXMgZG9uJ3QgbWF0Y2giKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFVSSVBhcnNlZFJlc3VsdFRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYVVJJUGFyc2VkUmVzdWx0VGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjI4NTNiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFVSSVBhcnNlZFJlc3VsdFRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhVUklQYXJzZWRSZXN1bHRUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhVUklQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFVSSVBhcnNlZFJlc3VsdFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxYTcyNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhVUklQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFVSSVBhcnNlZFJlc3VsdFRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFVSSVBhcnNlZFJlc3VsdFRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdEJvb2ttYXJrRG9jb21vIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiTUVCS006VVJMOmdvb2dsZS5jb207OyIgdXJpOkAiaHR0cDovL2dvb2dsZS5jb20iIHRpdGxlOm5pbF07CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIk1FQktNOlVSTDpodHRwOi8vZ29vZ2xlLmNvbTs7IiB1cmk6QCJodHRwOi8vZ29vZ2xlLmNvbSIgdGl0bGU6bmlsXTsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiTUVCS006VVJMOmdvb2dsZS5jb207VElUTEU6R29vZ2xlOyIgdXJpOkAiaHR0cDovL2dvb2dsZS5jb20iIHRpdGxlOkAiR29vZ2xlIl07Cit9CisKKy0gKHZvaWQpdGVzdFVSSSB7CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAImdvb2dsZS5jb20iIHVyaTpAImh0dHA6Ly9nb29nbGUuY29tIiB0aXRsZTpuaWxdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJodHRwOi8vZ29vZ2xlLmNvbSIgdXJpOkAiaHR0cDovL2dvb2dsZS5jb20iIHRpdGxlOm5pbF07CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAImh0dHBzOi8vZ29vZ2xlLmNvbSIgdXJpOkAiaHR0cHM6Ly9nb29nbGUuY29tIiB0aXRsZTpuaWxdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJnb29nbGUuY29tOjQ0MyIgdXJpOkAiaHR0cDovL2dvb2dsZS5jb206NDQzIiB0aXRsZTpuaWxdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJodHRwczovL3d3dy5nb29nbGUuY29tL2NhbGVuZGFyL2hvc3RlZC9nb29nbGUuY29tL2VtYmVkP21vZGU9QUdFTkRBJmZvcmNlX2xvZ2luPXRydWUmc3JjPWdvb2dsZS5jb21fNzI2ZjZmNmQ1ZjYyNjU3MDcwNzVAcmVzb3VyY2UuY2FsZW5kYXIuZ29vZ2xlLmNvbSIKKyAgICAgICAgICAgICAgICAgICAgICAgdXJpOkAiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9jYWxlbmRhci9ob3N0ZWQvZ29vZ2xlLmNvbS9lbWJlZD9tb2RlPUFHRU5EQSZmb3JjZV9sb2dpbj10cnVlJnNyYz1nb29nbGUuY29tXzcyNmY2ZjZkNWY2MjY1NzA3MDc1QHJlc291cmNlLmNhbGVuZGFyLmdvb2dsZS5jb20iCisgICAgICAgICAgICAgICAgICAgICB0aXRsZTpuaWxdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJvdHBhdXRoOi8vcmVtb3RlYWNjZXNzP2RldmFkZHI9MDAlYTFiMiVjM2Q0JmRldm5hbWU9Zm9vJmtleT1iYXIiCisgICAgICAgICAgICAgICAgICAgICAgIHVyaTpAIm90cGF1dGg6Ly9yZW1vdGVhY2Nlc3M/ZGV2YWRkcj0wMCVhMWIyJWMzZDQmZGV2bmFtZT1mb28ma2V5PWJhciIKKyAgICAgICAgICAgICAgICAgICAgIHRpdGxlOm5pbF07CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAInMzOi8vYW1hem9uLmNvbTo4MTIzIiB1cmk6QCJzMzovL2FtYXpvbi5jb206ODEyMyIgdGl0bGU6bmlsXTsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiSFRUUDovL1IuQkVFVEFHRy5DT00vPzEyMzQ1IiB1cmk6QCJIVFRQOi8vUi5CRUVUQUdHLkNPTS8/MTIzNDUiIHRpdGxlOm5pbF07Cit9CisKKy0gKHZvaWQpdGVzdE5vdFVSSSB7CisgIFtzZWxmIGRvVGVzdE5vdFVyaTpAImdvb2dsZS5jIl07CisgIFtzZWxmIGRvVGVzdE5vdFVyaTpAIi5jb20iXTsKKyAgW3NlbGYgZG9UZXN0Tm90VXJpOkAiOjgwLyJdOworICBbc2VsZiBkb1Rlc3ROb3RVcmk6QCJBQkMsMjAuMyxBQixBRCJdOworICBbc2VsZiBkb1Rlc3ROb3RVcmk6QCJodHRwOi8vZ29vZ2xlLmNvbT9xPWZvbyBiYXIiXTsKK30KKworLSAodm9pZCl0ZXN0VVJMVE8geworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJ1cmx0bzo6YmFyLmNvbSIgdXJpOkAiaHR0cDovL2Jhci5jb20iIHRpdGxlOm5pbF07CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAInVybHRvOjpodHRwOi8vYmFyLmNvbSIgdXJpOkAiaHR0cDovL2Jhci5jb20iIHRpdGxlOm5pbF07CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAInVybHRvOmZvbzpiYXIuY29tIiB1cmk6QCJodHRwOi8vYmFyLmNvbSIgdGl0bGU6QCJmb28iXTsKK30KKworLSAodm9pZCl0ZXN0R2FyYmFnZSB7CisgIFtzZWxmIGRvVGVzdE5vdFVyaTpAIkRhNjVjVjFnXj4lXmYwYkFiUG4xQ0pCNmxWN1pZOGhzMFNtOkRYVTBjZF1HeUVlV0J6OF1iVUhMQiJdOworICBbc2VsZiBkb1Rlc3ROb3RVcmk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJERUElQyVDTSVDJUNcYuKImuKAoiVDwqzDoUhPJUNYJCVDJUMlQ3dmYyVDIeKImsOmwqzDrMKsw7IlQyVDwqzDplp74oiaz4DiiJrDqeKImsO54oiaw7bCrMOzWsKsw5/CrMKuK3lfemLiiJrCsWslQ8Ks4oiPJUPCrMOc4oiaw7olQyVDJUMlQyVDJUMlQyVDJUMlQyVDJUMlQyVDJUMlQyVDJUMlQyVDJUMlQyVDJUMlQyVDwqzCoy51eCIsCisgICAgICAgICAgICAgICAgICAgICAgKHVuaWNoYXIpMHgwMDAzLCAodW5pY2hhcikweDAwMTksICh1bmljaGFyKTB4MDAwNiwgKHVuaWNoYXIpMHgwMDAwLCAodW5pY2hhcikweDAwMDAsICh1bmljaGFyKTB4MDAwMCwgKHVuaWNoYXIpMHgwMDAxLAorICAgICAgICAgICAgICAgICAgICAgICh1bmljaGFyKTB4MDAwMCwgKHVuaWNoYXIpMHgwMDFGLCAodW5pY2hhcikweDAwMDcsICh1bmljaGFyKTB4MDAxMywgKHVuaWNoYXIpMHgwMDEzLCAodW5pY2hhcikweDAwMTE3LCAodW5pY2hhcikweDAwMEUsCisgICAgICAgICAgICAgICAgICAgICAgKHVuaWNoYXIpMHgwMDAwLCAodW5pY2hhcikweDAwMDAsICh1bmljaGFyKTB4MDAwMCwgKHVuaWNoYXIpMHgwMDAwLCAodW5pY2hhcikweDAwMDAsICh1bmljaGFyKTB4MDAwMCwgKHVuaWNoYXIpMHgwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICh1bmljaGFyKTB4MDAwMCwgKHVuaWNoYXIpMHgwMDAwLCAodW5pY2hhcikweDAwMDAsICh1bmljaGFyKTB4MDAwMCwgKHVuaWNoYXIpMHgwMDAwLCAodW5pY2hhcikweDAwMDAsICh1bmljaGFyKTB4MDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAodW5pY2hhcikweDAwMDAsICh1bmljaGFyKTB4MDAwMCwgKHVuaWNoYXIpMHgwMDAwLCAodW5pY2hhcikweDAwMDAsICh1bmljaGFyKTB4MDAwMCwgKHVuaWNoYXIpMHgwMDAwLCAodW5pY2hhcikweDAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgKHVuaWNoYXIpMHgwMDAwLCAodW5pY2hhcikweDAwMDAsICh1bmljaGFyKTB4MDAwMCwgKHVuaWNoYXIpMHgwMDAwLCAodW5pY2hhcikweDAwMDBdXTsKK30KKworLSAodm9pZCl0ZXN0SXNQb3NzaWJseU1hbGljaW91cyB7CisgIFtzZWxmIGRvVGVzdElzUG9zc2libHlNYWxpY2lvdXM6QCJodHRwOi8vZ29vZ2xlLmNvbSIgZXhwZWN0ZWQ6Tk9dOworICBbc2VsZiBkb1Rlc3RJc1Bvc3NpYmx5TWFsaWNpb3VzOkAiaHR0cDovL2dvb2dsZS5jb21AZXZpbC5jb20iIGV4cGVjdGVkOllFU107CisgIFtzZWxmIGRvVGVzdElzUG9zc2libHlNYWxpY2lvdXM6QCJodHRwOi8vZ29vZ2xlLmNvbTpAZXZpbC5jb20iIGV4cGVjdGVkOllFU107CisgIFtzZWxmIGRvVGVzdElzUG9zc2libHlNYWxpY2lvdXM6QCJnb29nbGUuY29tOkBldmlsLmNvbSIgZXhwZWN0ZWQ6Tk9dOworICBbc2VsZiBkb1Rlc3RJc1Bvc3NpYmx5TWFsaWNpb3VzOkAiaHR0cHM6Ly9nb29nbGUuY29tOjQ0MyIgZXhwZWN0ZWQ6Tk9dOworICBbc2VsZiBkb1Rlc3RJc1Bvc3NpYmx5TWFsaWNpb3VzOkAiaHR0cHM6Ly9nb29nbGUuY29tOjQ0My8iIGV4cGVjdGVkOk5PXTsKKyAgW3NlbGYgZG9UZXN0SXNQb3NzaWJseU1hbGljaW91czpAImh0dHBzOi8vZXZpbEBnb29nbGUuY29tOjQ0MyIgZXhwZWN0ZWQ6WUVTXTsKKyAgW3NlbGYgZG9UZXN0SXNQb3NzaWJseU1hbGljaW91czpAImh0dHA6Ly9nb29nbGUuY29tL2Zvb0BiYXIiIGV4cGVjdGVkOk5PXTsKKyAgW3NlbGYgZG9UZXN0SXNQb3NzaWJseU1hbGljaW91czpAImh0dHA6Ly9nb29nbGUuY29tL0BAIiBleHBlY3RlZDpOT107Cit9CisKKy0gKHZvaWQpdGVzdEV4b3RpYyB7CisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAImJpdGNvaW46bXlTRDg5aXFwbXB0ckszUGhIRlc5ZmE3QlhpUDdBTnkzWSIKKyAgICAgICAgICAgICAgICAgICAgICAgdXJpOkAiYml0Y29pbjpteVNEODlpcXBtcHRySzNQaEhGVzlmYTdCWGlQN0FOeTNZIgorICAgICAgICAgICAgICAgICAgICAgdGl0bGU6bmlsXTsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiQlRDVFg6LVRDNFRPMyRaWVpUQzVOQzgzL1NZT1YrWUdVR0s6JEJTRjBQOC9TVE5US1RLUy5WODQrSlNBJExCK0VIQ0crOEE3MjUuMkFaLU5BVlgzVkJWNUs0TUg3VUwyLjJNOiIKKyAgICJGKk05SFNMKiQyUDdUKkZYLlpUODBHV0RSVjBRWkJQUStPMzdXRENOWkJSTTNFUTBTOVNaUCszQlBZWkcwMlUvTEEqODlDMlUuVjFUUy5DVDFWRjNESU4qSE4zVy1PLSIKKyAgICIwWkFLT0FCMzIvLjg6SjUwMUdKSlRUV09BKzUvNiRNSVlCRVJQWjQxTko2LVdTRy8qWjQ4WkgqTFNBT0VNKklYUDgxTDokRipXMDhaNjBDUipDKlAuSkVFVkkxRjAySjA3TDYrIgorICAgIlc0TDFHJC9JQyokMTZHSzZBKzpJMS06TEo6Wi1QM05XNlo2QURGQi1GMkFLRSQyRFdOMjNHWUNZRVdYOVM4TCtMRiRWWEVLSDcvUjQ4RTMyUFUrQTo5SDo4TzUiCisgICAgICAgICAgICAgICAgICAgICAgIHVyaTpAIkJUQ1RYOi1UQzRUTzMkWllaVEM1TkM4My9TWU9WK1lHVUdLOiRCU0YwUDgvU1ROVEtUS1MuVjg0K0pTQSRMQitFSENHKzhBNzI1LjJBWi1OQVZYM1ZCVjVLNE1IN1VMMi4yTToiCisgICAiRipNOUhTTCokMlA3VCpGWC5aVDgwR1dEUlYwUVpCUFErTzM3V0RDTlpCUk0zRVEwUzlTWlArM0JQWVpHMDJVL0xBKjg5QzJVLlYxVFMuQ1QxVkYzRElOKkhOM1ctTy0iCisgICAiMFpBS09BQjMyLy44Oko1MDFHSkpUVFdPQSs1LzYkTUlZQkVSUFo0MU5KNi1XU0cvKlo0OFpIKkxTQU9FTSpJWFA4MUw6JEYqVzA4WjYwQ1IqQypQLkpFRVZJMUYwMkowN0w2KyIKKyAgICJXNEwxRyQvSUMqJDE2R0s2QSs6STEtOkxKOlotUDNOVzZaNkFERkItRjJBS0UkMkRXTjIzR1lDWUVXWDlTOEwrTEYkVlhFS0g3L1I0OEUzMlBVK0E6OUg6OE81IgorICAgICAgICAgICAgICAgICAgICAgdGl0bGU6bmlsXTsKK30KKworLSAodm9pZClkb1Rlc3RXaXRoQ29udGVudHM6KE5TU3RyaW5nICopY29udGVudHMgdXJpOihOU1N0cmluZyAqKXVyaSB0aXRsZTooTlNTdHJpbmcgKil0aXRsZSB7CisgIFpYUmVzdWx0ICpmYWtlUmVzdWx0ID0gW1pYUmVzdWx0IHJlc3VsdFdpdGhUZXh0OmNvbnRlbnRzIHJhd0J5dGVzOk5VTEwgbGVuZ3RoOjAgcmVzdWx0UG9pbnRzOm5pbCBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRRUkNvZGVdOworICBaWFBhcnNlZFJlc3VsdCAqcmVzdWx0ID0gW1pYUmVzdWx0UGFyc2VyIHBhcnNlUmVzdWx0OmZha2VSZXN1bHRdOworICBTVEFzc2VydEVxdWFscyhyZXN1bHQudHlwZSwga1BhcnNlZFJlc3VsdFR5cGVVUkksIEAiVHlwZXMgZG9uJ3QgbWF0Y2giKTsKKyAgWlhVUklQYXJzZWRSZXN1bHQgKnVyaVJlc3VsdCA9IChaWFVSSVBhcnNlZFJlc3VsdCAqKXJlc3VsdDsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModXJpUmVzdWx0LnVyaSwgdXJpLCBAIlVSSXMgZG9uJ3QgbWF0Y2giKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModXJpUmVzdWx0LnRpdGxlLCB0aXRsZSwgQCJUaXRsZXMgZG9uJ3QgbWF0Y2giKTsKK30KKworLSAodm9pZClkb1Rlc3ROb3RVcmk6KE5TU3RyaW5nICopdGV4dCB7CisgIFpYUmVzdWx0ICpmYWtlUmVzdWx0ID0gW1pYUmVzdWx0IHJlc3VsdFdpdGhUZXh0OnRleHQgcmF3Qnl0ZXM6TlVMTCBsZW5ndGg6MCByZXN1bHRQb2ludHM6bmlsIGZvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZV07CisgIFpYUGFyc2VkUmVzdWx0ICpyZXN1bHQgPSBbWlhSZXN1bHRQYXJzZXIgcGFyc2VSZXN1bHQ6ZmFrZVJlc3VsdF07CisgIFNUQXNzZXJ0RXF1YWxzKHJlc3VsdC50eXBlLCBrUGFyc2VkUmVzdWx0VHlwZVRleHQsIEAiVHlwZXMgZG9uJ3QgbWF0Y2giKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMocmVzdWx0LmRpc3BsYXlSZXN1bHQsIHRleHQsIEAiRGlzcGxheSByZXN1bHQgZG9lc24ndCBtYXRjaCIpOworfQorCistICh2b2lkKWRvVGVzdElzUG9zc2libHlNYWxpY2lvdXM6KE5TU3RyaW5nICopdXJpIGV4cGVjdGVkOihCT09MKWV4cGVjdGVkIHsKKyAgWlhVUklQYXJzZWRSZXN1bHQgKnJlc3VsdCA9IFtaWFVSSVBhcnNlZFJlc3VsdCB1cmlQYXJzZWRSZXN1bHRXaXRoVXJpOnVyaSB0aXRsZTpuaWxdOworICBTVEFzc2VydEVxdWFscyhbcmVzdWx0IHBvc3NpYmx5TWFsaWNpb3VzVVJJXSwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgIGV4cGVjdGVkID8gQCJFeHBlY3RlZCB0byBiZSBwb3NzaWJseSBtYWxpY2lvdXMgVVJJIGJ1dCB3YXNuJ3QiIDogQCJOb3QgZXhwZWN0ZWQgdG8gYmUgcG9zc2libHkgbWFsaWNpb3VzIFVSSSBidXQgd2FzIik7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhXaWZpUGFyc2VkUmVzdWx0VGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL2NsaWVudC9yZXN1bHQvWlhXaWZpUGFyc2VkUmVzdWx0VGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NThlNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFdpZmlQYXJzZWRSZXN1bHRUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYV2lmaVBhcnNlZFJlc3VsdFRlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFdpZmlQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvY2xpZW50L3Jlc3VsdC9aWFdpZmlQYXJzZWRSZXN1bHRUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZTVjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jbGllbnQvcmVzdWx0L1pYV2lmaVBhcnNlZFJlc3VsdFRlc3RDYXNlLm0KQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhXaWZpUGFyc2VkUmVzdWx0VGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFpYV2lmaVBhcnNlZFJlc3VsdFRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdE5vUGFzc3dvcmQgeworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJXSUZJOlM6Tm9QYXNzd29yZDtQOjtUOjs7IiBzc2lkOkAiTm9QYXNzd29yZCIgcGFzc3dvcmQ6bmlsIHR5cGU6QCJub3Bhc3MiXTsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiV0lGSTpTOk5vIFBhc3N3b3JkO1A6O1Q6OzsiIHNzaWQ6QCJObyBQYXNzd29yZCIgcGFzc3dvcmQ6bmlsIHR5cGU6QCJub3Bhc3MiXTsKK30KKworLSAodm9pZCl0ZXN0V2VwIHsKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiV0lGSTpTOlRlbkNoYXJzO1A6MDEyMzQ1Njc4OTtUOldFUDs7IiBzc2lkOkAiVGVuQ2hhcnMiIHBhc3N3b3JkOkAiMDEyMzQ1Njc4OSIgdHlwZTpAIldFUCJdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJXSUZJOlM6VGVuQ2hhcnM7UDphYmNkZTU2Nzg5O1Q6V0VQOzsiIHNzaWQ6QCJUZW5DaGFycyIgcGFzc3dvcmQ6QCJhYmNkZTU2Nzg5IiB0eXBlOkAiV0VQIl07CisgIC8vIE5vbiBoZXggc2hvdWxkIG5vdCBmYWlsIGF0IHRoaXMgbGV2ZWwKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiV0lGSTpTOlRlbkNoYXJzO1A6aGVsbG90aGVyZTtUOldFUDs7IiBzc2lkOkAiVGVuQ2hhcnMiIHBhc3N3b3JkOkAiaGVsbG90aGVyZSIgdHlwZTpAIldFUCJdOworCisgIC8vIEVzY2FwZWQgc2VtaWNvbG9ucworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJXSUZJOlM6VGVuXFw7XFw7Q2hhcnM7UDowMTIzNDU2Nzg5O1Q6V0VQOzsiIHNzaWQ6QCJUZW47O0NoYXJzIiBwYXNzd29yZDpAIjAxMjM0NTY3ODkiIHR5cGU6QCJXRVAiXTsKKyAgLy8gRXNjYXBlZCBjb2xvbnMKKyAgW3NlbGYgZG9UZXN0V2l0aENvbnRlbnRzOkAiV0lGSTpTOlRlblxcOlxcOkNoYXJzO1A6MDEyMzQ1Njc4OTtUOldFUDs7IiBzc2lkOkAiVGVuOjpDaGFycyIgcGFzc3dvcmQ6QCIwMTIzNDU2Nzg5IiB0eXBlOkAiV0VQIl07CisKKyAgLy8gVE9ETyBOZWVkIGEgdGVzdCBmb3IgU0IgYXMgd2VsbC4KK30KKworLyoqCisgKiBQdXQgaW4gY2hlY2tzIGZvciB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzd29yZCBmb3Igd2VwLgorICovCistICh2b2lkKXRlc3RXcGEgeworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJXSUZJOlM6VGVuQ2hhcnM7UDp3b3c7VDpXUEE7OyIgc3NpZDpAIlRlbkNoYXJzIiBwYXNzd29yZDpAIndvdyIgdHlwZTpAIldQQSJdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJXSUZJOlM6VGVuQ2hhcnM7UDpzcGFjZSBpcyBzaWxlbnQ7VDpXUEE7OyIgc3NpZDpAIlRlbkNoYXJzIiBwYXNzd29yZDpAInNwYWNlIGlzIHNpbGVudCIgdHlwZTpAIldQQSJdOworICBbc2VsZiBkb1Rlc3RXaXRoQ29udGVudHM6QCJXSUZJOlM6VGVuQ2hhcnM7UDpoZWxsb3RoZXJlO1Q6V0VQOzsiIHNzaWQ6QCJUZW5DaGFycyIgcGFzc3dvcmQ6QCJoZWxsb3RoZXJlIiB0eXBlOkAiV0VQIl07CisKKyAgLy8gRXNjYXBlZCBzZW1pY29sb25zCisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIldJRkk6UzpUZW5DaGFycztQOmhlbGxvXFw7dGhlcmU7VDpXRVA7OyIgc3NpZDpAIlRlbkNoYXJzIiBwYXNzd29yZDpAImhlbGxvO3RoZXJlIiB0eXBlOkAiV0VQIl07CisgIC8vIEVzY2FwZWQgY29sb25zCisgIFtzZWxmIGRvVGVzdFdpdGhDb250ZW50czpAIldJRkk6UzpUZW5DaGFycztQOmhlbGxvXFw6dGhlcmU7VDpXRVA7OyIgc3NpZDpAIlRlbkNoYXJzIiBwYXNzd29yZDpAImhlbGxvOnRoZXJlIiB0eXBlOkAiV0VQIl07Cit9CisKKy8qKgorICogR2l2ZW4gdGhlIHN0cmluZyBjb250ZW50cyBmb3IgdGhlIGJhcmNvZGUsIGNoZWNrIHRoYXQgaXQgbWF0Y2hlcyBvdXIgZXhwZWN0YXRpb25zCisgKi8KKy0gKHZvaWQpZG9UZXN0V2l0aENvbnRlbnRzOihOU1N0cmluZyAqKWNvbnRlbnRzIHNzaWQ6KE5TU3RyaW5nICopc3NpZCBwYXNzd29yZDooTlNTdHJpbmcgKilwYXNzd29yZCB0eXBlOihOU1N0cmluZyAqKXR5cGUgeworICBaWFJlc3VsdCAqZmFrZVJlc3VsdCA9IFtaWFJlc3VsdCByZXN1bHRXaXRoVGV4dDpjb250ZW50cyByYXdCeXRlczpOVUxMIGxlbmd0aDowIHJlc3VsdFBvaW50czpuaWwgZm9ybWF0OmtCYXJjb2RlRm9ybWF0UVJDb2RlXTsKKyAgWlhQYXJzZWRSZXN1bHQgKnJlc3VsdCA9IFtaWFJlc3VsdFBhcnNlciBwYXJzZVJlc3VsdDpmYWtlUmVzdWx0XTsKKworICAvLyBFbnN1cmUgaXQgaXMgYSB3aWZpIGNvZGUKKyAgU1RBc3NlcnRFcXVhbHMocmVzdWx0LnR5cGUsIGtQYXJzZWRSZXN1bHRUeXBlV2lmaSwgQCJUeXBlcyBkb24ndCBtYXRjaCIpOworICBaWFdpZmlQYXJzZWRSZXN1bHQgKndpZmlSZXN1bHQgPSAoWlhXaWZpUGFyc2VkUmVzdWx0ICopcmVzdWx0OworCisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHdpZmlSZXN1bHQuc3NpZCwgc3NpZCwgQCJTc2lkJ3MgZG9uJ3QgbWF0Y2giKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMod2lmaVJlc3VsdC5wYXNzd29yZCwgcGFzc3dvcmQsIEAiUGFzc3dvcmRzIGRvbid0IG1hdGNoIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHdpZmlSZXN1bHQubmV0d29ya0VuY3J5cHRpb24sIHR5cGUsIEAiTmV0d29yayBlbmNyeXB0aW9uIGRvZXNuJ3QgbWF0Y2giKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY29tbW9uL0Fic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL0Fic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzJhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jb21tb24vQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZywgcmVhZG9ubHkpIGlkPFpYUmVhZGVyPiBiYXJjb2RlUmVhZGVyOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgWlhCYXJjb2RlRm9ybWF0IGV4cGVjdGVkRm9ybWF0OworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICp0ZXN0QmFzZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TTXV0YWJsZUFycmF5ICp0ZXN0UmVzdWx0czsKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHRlc3RCYXNlUGF0aFN1ZmZpeDooTlNTdHJpbmcgKil0ZXN0QmFzZVBhdGhTdWZmaXggYmFyY29kZVJlYWRlcjooaWQ8WlhSZWFkZXI+KWJhcmNvZGVSZWFkZXIgZXhwZWN0ZWRGb3JtYXQ6KFpYQmFyY29kZUZvcm1hdClleHBlY3RlZEZvcm1hdDsKKysgKE5TU3RyaW5nICopYmFyY29kZUZvcm1hdEFzU3RyaW5nOihaWEJhcmNvZGVGb3JtYXQpZm9ybWF0OworLSAodm9pZClhZGRUZXN0OihpbnQpbXVzdFBhc3NDb3VudCB0cnlIYXJkZXJDb3VudDooaW50KXRyeUhhcmRlckNvdW50IHJvdGF0aW9uOihmbG9hdClyb3RhdGlvbjsKKy0gKHZvaWQpYWRkVGVzdDooaW50KW11c3RQYXNzQ291bnQgdHJ5SGFyZGVyQ291bnQ6KGludCl0cnlIYXJkZXJDb3VudCBtYXhNaXNyZWFkczooaW50KW1heE1pc3JlYWRzIG1heFRyeUhhcmRlck1pc3JlYWRzOihpbnQpbWF4VHJ5SGFyZGVyTWlzcmVhZHMgcm90YXRpb246KGZsb2F0KXJvdGF0aW9uOworLSAodm9pZClydW5UZXN0czsKKworLSAoTlNBcnJheSAqKWltYWdlRmlsZXM7CistIChOU1N0cmluZyAqKXJlYWRGaWxlQXNTdHJpbmc6KE5TU3RyaW5nICopZmlsZSBlbmNvZGluZzooTlNTdHJpbmdFbmNvZGluZyllbmNvZGluZzsKKy0gKFpYSW1hZ2UgKilyb3RhdGVJbWFnZTooWlhJbWFnZSAqKW9yaWdpbmFsIGRlZ3JlZXM6KGZsb2F0KWRlZ3JlZXM7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9BYnN0cmFjdEJsYWNrQm94VGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9BYnN0cmFjdEJsYWNrQm94VGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGNiODk2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL0Fic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKyNpbXBvcnQgIlRlc3RSZXN1bHQuaCIKKworQGltcGxlbWVudGF0aW9uIEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24gdGVzdEJhc2VQYXRoU3VmZml4OihOU1N0cmluZyAqKXRlc3RCYXNlUGF0aFN1ZmZpeCBiYXJjb2RlUmVhZGVyOihpZDxaWFJlYWRlcj4pYmFyY29kZVJlYWRlciBleHBlY3RlZEZvcm1hdDooWlhCYXJjb2RlRm9ybWF0KWV4cGVjdGVkRm9ybWF0IHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnZvY2F0aW9uOmludm9jYXRpb25dKSB7CisgICAgX3Rlc3RCYXNlID0gdGVzdEJhc2VQYXRoU3VmZml4OworICAgIF9iYXJjb2RlUmVhZGVyID0gYmFyY29kZVJlYWRlcjsKKyAgICBfZXhwZWN0ZWRGb3JtYXQgPSBleHBlY3RlZEZvcm1hdDsKKyAgICBfdGVzdFJlc3VsdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpYWRkVGVzdDooaW50KW11c3RQYXNzQ291bnQgdHJ5SGFyZGVyQ291bnQ6KGludCl0cnlIYXJkZXJDb3VudCByb3RhdGlvbjooZmxvYXQpcm90YXRpb24geworICBbc2VsZiBhZGRUZXN0Om11c3RQYXNzQ291bnQgdHJ5SGFyZGVyQ291bnQ6dHJ5SGFyZGVyQ291bnQgbWF4TWlzcmVhZHM6MCBtYXhUcnlIYXJkZXJNaXNyZWFkczowIHJvdGF0aW9uOnJvdGF0aW9uXTsKK30KKworLyoqCisgKiBBZGRzIGEgbmV3IHRlc3QgZm9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBvZiBpbWFnZXMuCisgKi8KKy0gKHZvaWQpYWRkVGVzdDooaW50KW11c3RQYXNzQ291bnQgdHJ5SGFyZGVyQ291bnQ6KGludCl0cnlIYXJkZXJDb3VudCBtYXhNaXNyZWFkczooaW50KW1heE1pc3JlYWRzIG1heFRyeUhhcmRlck1pc3JlYWRzOihpbnQpbWF4VHJ5SGFyZGVyTWlzcmVhZHMgcm90YXRpb246KGZsb2F0KXJvdGF0aW9uIHsKKyAgW3NlbGYudGVzdFJlc3VsdHMgYWRkT2JqZWN0OltbVGVzdFJlc3VsdCBhbGxvY10gaW5pdFdpdGhNdXN0UGFzc0NvdW50Om11c3RQYXNzQ291bnQgdHJ5SGFyZGVyQ291bnQ6dHJ5SGFyZGVyQ291bnQgbWF4TWlzcmVhZHM6bWF4TWlzcmVhZHMgbWF4VHJ5SGFyZGVyTWlzcmVhZHM6bWF4VHJ5SGFyZGVyTWlzcmVhZHMgcm90YXRpb246cm90YXRpb25dXTsKK30KKworLSAoTlNBcnJheSAqKWltYWdlRmlsZXMgeworICBOU011dGFibGVBcnJheSAqaW1hZ2VGaWxlcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgIGZvciAoTlNTdHJpbmcgKmZpbGUgaW4gW1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dIHBhdGhzRm9yUmVzb3VyY2VzT2ZUeXBlOm5pbCBpbkRpcmVjdG9yeTpzZWxmLnRlc3RCYXNlXSkgeworICAgIGlmIChbW1tmaWxlIHBhdGhFeHRlbnNpb25dIGxvd2VyY2FzZVN0cmluZ10gaXNFcXVhbFRvU3RyaW5nOkAianBnIl0gfHwKKyAgICAgICAgW1tbZmlsZSBwYXRoRXh0ZW5zaW9uXSBsb3dlcmNhc2VTdHJpbmddIGlzRXF1YWxUb1N0cmluZzpAImpwZWciXSB8fAorICAgICAgICBbW1tmaWxlIHBhdGhFeHRlbnNpb25dIGxvd2VyY2FzZVN0cmluZ10gaXNFcXVhbFRvU3RyaW5nOkAiZ2lmIl0gfHwKKyAgICAgICAgW1tbZmlsZSBwYXRoRXh0ZW5zaW9uXSBsb3dlcmNhc2VTdHJpbmddIGlzRXF1YWxUb1N0cmluZzpAInBuZyJdKSB7CisgICAgICBbaW1hZ2VGaWxlcyBhZGRPYmplY3Q6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpmaWxlXV07CisgICAgfQorICB9CisKKyAgcmV0dXJuIGltYWdlRmlsZXM7Cit9CisKKy0gKHZvaWQpcnVuVGVzdHMgeworICBbc2VsZiB0ZXN0QmxhY2tCb3hDb3VudGluZ1Jlc3VsdHM6WUVTXTsKK30KKworKyAoTlNTdHJpbmcgKiliYXJjb2RlRm9ybWF0QXNTdHJpbmc6KFpYQmFyY29kZUZvcm1hdClmb3JtYXQgeworICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2Uga0JhcmNvZGVGb3JtYXRBenRlYzoKKyAgICAgIHJldHVybiBAIkF6dGVjIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2Uga0JhcmNvZGVGb3JtYXRDb2RhYmFyOgorICAgICAgcmV0dXJuIEAiQ09EQUJBUiI7CisgICAgICBicmVhazsKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0Q29kZTM5OgorICAgICAgcmV0dXJuIEAiQ29kZSAzOSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0Q29kZTkzOgorICAgICAgcmV0dXJuIEAiQ29kZSA5MyI7CisgICAgICBicmVhazsKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0Q29kZTEyODoKKyAgICAgIHJldHVybiBAIkNvZGUgMTI4IjsKKyAgICAgIGJyZWFrOworICAgIGNhc2Uga0JhcmNvZGVGb3JtYXREYXRhTWF0cml4OgorICAgICAgcmV0dXJuIEAiRGF0YSBNYXRyaXgiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBrQmFyY29kZUZvcm1hdEVhbjg6CisgICAgICByZXR1cm4gQCJFQU4tOCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0RWFuMTM6CisgICAgICByZXR1cm4gQCJFQU4tMTMiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBrQmFyY29kZUZvcm1hdElURjoKKyAgICAgIHJldHVybiBAIklURiI7CisgICAgICBicmVhazsKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0TWF4aUNvZGU6CisgICAgICByZXR1cm4gQCJNYXhpQ29kZSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0UERGNDE3OgorICAgICAgcmV0dXJuIEAiUERGNDE3IjsKKyAgICAgIGJyZWFrOworICAgIGNhc2Uga0JhcmNvZGVGb3JtYXRRUkNvZGU6CisgICAgICByZXR1cm4gQCJRUiBDb2RlIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2Uga0JhcmNvZGVGb3JtYXRSU1MxNDoKKyAgICAgIHJldHVybiBAIlJTUyAxNCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0UlNTRXhwYW5kZWQ6CisgICAgICByZXR1cm4gQCJSU1MgRVhQQU5ERUQiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBrQmFyY29kZUZvcm1hdFVQQ0E6CisgICAgICByZXR1cm4gQCJVUEMtQSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIGtCYXJjb2RlRm9ybWF0VVBDRToKKyAgICAgIHJldHVybiBAIlVQQy1FIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2Uga0JhcmNvZGVGb3JtYXRVUENFQU5FeHRlbnNpb246CisgICAgICByZXR1cm4gQCJVUEMvRUFOIGV4dGVuc2lvbiI7CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBuaWw7Cit9CisKKy0gKE5TU3RyaW5nICopcGF0aEluQnVuZGxlOihOU1VSTCAqKWZpbGUgeworICBOU0ludGVnZXIgc3RhcnRPZlJlc291cmNlcyA9IFtbZmlsZSBwYXRoXSByYW5nZU9mU3RyaW5nOkAiUmVzb3VyY2VzIl0ubG9jYXRpb247CisgIGlmIChzdGFydE9mUmVzb3VyY2VzID09IE5TTm90Rm91bmQpIHsKKyAgICByZXR1cm4gW2ZpbGUgcGF0aF07CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIFtbZmlsZSBwYXRoXSBzdWJzdHJpbmdGcm9tSW5kZXg6c3RhcnRPZlJlc291cmNlc107CisgIH0KK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3hDb3VudGluZ1Jlc3VsdHM6KEJPT0wpYXNzZXJ0T25GYWlsdXJlIHsKKyAgaWYgKHNlbGYudGVzdFJlc3VsdHMuY291bnQgPT0gMCkgeworICAgIFNURmFpbChAIk5vIHRlc3QgcmVzdWx0cyIpOworICB9CisKKyAgTlNGaWxlTWFuYWdlciAqZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07CisgIE5TQXJyYXkgKmltYWdlRmlsZXMgPSBbc2VsZiBpbWFnZUZpbGVzXTsKKyAgaW50IHRlc3RDb3VudCA9IChpbnQpW3NlbGYudGVzdFJlc3VsdHMgY291bnRdOworCisgIGludCBwYXNzZWRDb3VudHNbdGVzdENvdW50XTsKKyAgbWVtc2V0KHBhc3NlZENvdW50cywgMCwgdGVzdENvdW50ICogc2l6ZW9mKGludCkpOworCisgIGludCBtaXNyZWFkQ291bnRzW3Rlc3RDb3VudF07CisgIG1lbXNldChtaXNyZWFkQ291bnRzLCAwLCB0ZXN0Q291bnQgKiBzaXplb2YoaW50KSk7CisKKyAgaW50IHRyeUhhcmRlckNvdW50c1t0ZXN0Q291bnRdOworICBtZW1zZXQodHJ5SGFyZGVyQ291bnRzLCAwLCB0ZXN0Q291bnQgKiBzaXplb2YoaW50KSk7CisKKyAgaW50IHRyeUhhcmRlck1pc3JlYWRDb3VudHNbdGVzdENvdW50XTsKKyAgbWVtc2V0KHRyeUhhcmRlck1pc3JlYWRDb3VudHMsIDAsIHRlc3RDb3VudCAqIHNpemVvZihpbnQpKTsKKworICBmb3IgKE5TVVJMICp0ZXN0SW1hZ2UgaW4gaW1hZ2VGaWxlcykgeworICAgIE5TTG9nKEAiU3RhcnRpbmcgJUAiLCBbc2VsZiBwYXRoSW5CdW5kbGU6dGVzdEltYWdlXSk7CisgICAgCisgICAgWlhJbWFnZSAqaW1hZ2UgPSBbW1pYSW1hZ2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RJbWFnZV07CisKKyAgICBOU1N0cmluZyAqdGVzdEltYWdlRmlsZU5hbWUgPSBbW1t0ZXN0SW1hZ2UgcGF0aF0gY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLyJdIGxhc3RPYmplY3RdOworICAgIE5TU3RyaW5nICpmaWxlQmFzZU5hbWUgPSBbdGVzdEltYWdlRmlsZU5hbWUgc3Vic3RyaW5nVG9JbmRleDpbdGVzdEltYWdlRmlsZU5hbWUgcmFuZ2VPZlN0cmluZzpAIi4iXS5sb2NhdGlvbl07CisgICAgTlNTdHJpbmcgKmV4cGVjdGVkVGV4dEZpbGUgPSBbW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV0gcGF0aEZvclJlc291cmNlOmZpbGVCYXNlTmFtZSBvZlR5cGU6QCJ0eHQiIGluRGlyZWN0b3J5OnNlbGYudGVzdEJhc2VdOworCisgICAgTlNTdHJpbmcgKmV4cGVjdGVkVGV4dDsKKyAgICBpZiAoZXhwZWN0ZWRUZXh0RmlsZSkgeworICAgICAgZXhwZWN0ZWRUZXh0ID0gW3NlbGYgcmVhZEZpbGVBc1N0cmluZzpleHBlY3RlZFRleHRGaWxlIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICB9IGVsc2UgeworICAgICAgTlNTdHJpbmcgKmV4cGVjdGVkVGV4dEZpbGUgPSBbW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV0gcGF0aEZvclJlc291cmNlOmZpbGVCYXNlTmFtZSBvZlR5cGU6QCJiaW4iIGluRGlyZWN0b3J5OnNlbGYudGVzdEJhc2VdOworICAgICAgU1RBc3NlcnROb3ROaWwoZXhwZWN0ZWRUZXh0RmlsZSwgQCJFeHBlY3RlZCB0ZXh0IGRvZXMgbm90IGV4aXN0Iik7CisgICAgICBleHBlY3RlZFRleHQgPSBbc2VsZiByZWFkRmlsZUFzU3RyaW5nOmV4cGVjdGVkVGV4dEZpbGUgZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ107CisgICAgfQorCisgICAgTlNVUkwgKmV4cGVjdGVkTWV0YWRhdGFGaWxlID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dIHBhdGhGb3JSZXNvdXJjZTpmaWxlQmFzZU5hbWUgb2ZUeXBlOkAiLm1ldGFkYXRhLnR4dCIgaW5EaXJlY3Rvcnk6c2VsZi50ZXN0QmFzZV1dOworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmV4cGVjdGVkTWV0YWRhdGEgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyAgICBpZiAoW2ZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6W2V4cGVjdGVkTWV0YWRhdGFGaWxlIHBhdGhdXSkgeworICAgICAgZXhwZWN0ZWRNZXRhZGF0YSA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoQ29udGVudHNPZkZpbGU6W2V4cGVjdGVkTWV0YWRhdGFGaWxlIHBhdGhdXTsKKyAgICB9CisKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRlc3RDb3VudDsgeCsrKSB7CisgICAgICBmbG9hdCByb3RhdGlvbiA9IFsoVGVzdFJlc3VsdCAqKXNlbGYudGVzdFJlc3VsdHNbeF0gcm90YXRpb25dOworICAgICAgWlhJbWFnZSAqcm90YXRlZEltYWdlID0gW3NlbGYgcm90YXRlSW1hZ2U6aW1hZ2UgZGVncmVlczpyb3RhdGlvbl07CisgICAgICBaWEx1bWluYW5jZVNvdXJjZSAqc291cmNlID0gW1taWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpyb3RhdGVkSW1hZ2UuY2dpbWFnZV07CisgICAgICBaWEJpbmFyeUJpdG1hcCAqYml0bWFwID0gW1taWEJpbmFyeUJpdG1hcCBhbGxvY10gaW5pdFdpdGhCaW5hcml6ZXI6W1taWEh5YnJpZEJpbmFyaXplciBhbGxvY10gaW5pdFdpdGhTb3VyY2U6c291cmNlXV07CisgICAgICBCT09MIG1pc3JlYWQ7CisgICAgICBpZiAoW3NlbGYgZGVjb2RlOmJpdG1hcCByb3RhdGlvbjpyb3RhdGlvbiBleHBlY3RlZFRleHQ6ZXhwZWN0ZWRUZXh0IGV4cGVjdGVkTWV0YWRhdGE6ZXhwZWN0ZWRNZXRhZGF0YSB0cnlIYXJkZXI6Tk8gbWlzcmVhZDombWlzcmVhZF0pIHsKKyAgICAgICAgcGFzc2VkQ291bnRzW3hdKys7CisgICAgICB9IGVsc2UgaWYobWlzcmVhZCkgeworICAgICAgICBtaXNyZWFkQ291bnRzW3hdKys7CisgICAgICB9IGVsc2UgeworICAgICAgICBOU0xvZyhAImNvdWxkIG5vdCByZWFkIGF0IHJvdGF0aW9uICVmIiwgcm90YXRpb24pOworICAgICAgfQorCisgICAgICBpZiAoW3NlbGYgZGVjb2RlOmJpdG1hcCByb3RhdGlvbjpyb3RhdGlvbiBleHBlY3RlZFRleHQ6ZXhwZWN0ZWRUZXh0IGV4cGVjdGVkTWV0YWRhdGE6ZXhwZWN0ZWRNZXRhZGF0YSB0cnlIYXJkZXI6WUVTIG1pc3JlYWQ6Jm1pc3JlYWRdKSB7CisgICAgICAgIHRyeUhhcmRlckNvdW50c1t4XSsrOworICAgICAgfSBlbHNlIGlmKG1pc3JlYWQpIHsKKyAgICAgICAgdHJ5SGFyZGVyTWlzcmVhZENvdW50c1t4XSsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgTlNMb2coQCJjb3VsZCBub3QgcmVhZCBhdCByb3RhdGlvbiAlZiB3L1RIIiwgcm90YXRpb24pOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIFByaW50IHRoZSByZXN1bHRzIG9mIGFsbCB0ZXN0cyBmaXJzdAorICBpbnQgdG90YWxGb3VuZCA9IDA7CisgIGludCB0b3RhbE11c3RQYXNzID0gMDsKKyAgaW50IHRvdGFsTWlzcmVhZCA9IDA7CisgIGludCB0b3RhbE1heE1pc3JlYWQgPSAwOworCisgIGZvciAoaW50IHggPSAwOyB4IDwgdGVzdENvdW50OyB4KyspIHsKKyAgICBUZXN0UmVzdWx0ICp0ZXN0UmVzdWx0ID0gc2VsZi50ZXN0UmVzdWx0c1t4XTsKKyAgICBOU0xvZyhAIlJvdGF0aW9uICVkIGRlZ3JlZXM6IiwgKGludCkgdGVzdFJlc3VsdC5yb3RhdGlvbik7CisgICAgTlNMb2coQCIgICVkIG9mICVkIGltYWdlcyBwYXNzZWQgKCVkIHJlcXVpcmVkKSIsCisgICAgICAgICAgcGFzc2VkQ291bnRzW3hdLCAoaW50KWltYWdlRmlsZXMuY291bnQsIHRlc3RSZXN1bHQubXVzdFBhc3NDb3VudCk7CisgICAgaW50IGZhaWxlZCA9IChpbnQpaW1hZ2VGaWxlcy5jb3VudCAtIHBhc3NlZENvdW50c1t4XTsKKyAgICBOU0xvZyhAIiAgICAlZCBmYWlsZWQgZHVlIHRvIG1pc3JlYWRzLCAlZCBub3QgZGV0ZWN0ZWQiLAorICAgICAgICAgIG1pc3JlYWRDb3VudHNbeF0sIGZhaWxlZCAtIG1pc3JlYWRDb3VudHNbeF0pOworICAgIE5TTG9nKEAiICAlZCBvZiAlZCBpbWFnZXMgcGFzc2VkIHdpdGggdHJ5IGhhcmRlciAoJWQgcmVxdWlyZWQpIiwKKyAgICAgICAgICB0cnlIYXJkZXJDb3VudHNbeF0sIChpbnQpaW1hZ2VGaWxlcy5jb3VudCwgdGVzdFJlc3VsdC50cnlIYXJkZXJDb3VudCk7CisgICAgZmFpbGVkID0gKGludClpbWFnZUZpbGVzLmNvdW50IC0gdHJ5SGFyZGVyQ291bnRzW3hdOworICAgIE5TTG9nKEAiICAgICVkIGZhaWxlZCBkdWUgdG8gbWlzcmVhZHMsICVkIG5vdCBkZXRlY3RlZCIsCisgICAgICAgICAgdHJ5SGFyZGVyTWlzcmVhZENvdW50c1t4XSwgZmFpbGVkIC0gdHJ5SGFyZGVyTWlzcmVhZENvdW50c1t4XSk7CisgICAgdG90YWxGb3VuZCArPSBwYXNzZWRDb3VudHNbeF0gKyB0cnlIYXJkZXJDb3VudHNbeF07CisgICAgdG90YWxNdXN0UGFzcyArPSB0ZXN0UmVzdWx0Lm11c3RQYXNzQ291bnQgKyB0ZXN0UmVzdWx0LnRyeUhhcmRlckNvdW50OworICAgIHRvdGFsTWlzcmVhZCArPSBtaXNyZWFkQ291bnRzW3hdICsgdHJ5SGFyZGVyTWlzcmVhZENvdW50c1t4XTsKKyAgICB0b3RhbE1heE1pc3JlYWQgKz0gdGVzdFJlc3VsdC5tYXhNaXNyZWFkcyArIHRlc3RSZXN1bHQubWF4VHJ5SGFyZGVyTWlzcmVhZHM7CisgIH0KKworICBpbnQgdG90YWxUZXN0cyA9IChpbnQpaW1hZ2VGaWxlcy5jb3VudCAqIHRlc3RDb3VudCAqIDI7CisgIE5TTG9nKEAiVE9UQUxTOlxuRGVjb2RlZCAlZCBpbWFnZXMgb3V0IG9mICVkICglZCUlLCAlZCByZXF1aXJlZCkiLAorICAgICAgICB0b3RhbEZvdW5kLCB0b3RhbFRlc3RzLCB0b3RhbEZvdW5kICogMTAwIC8gdG90YWxUZXN0cywgdG90YWxNdXN0UGFzcyk7CisgIGlmICh0b3RhbEZvdW5kID4gdG90YWxNdXN0UGFzcykgeworICAgIE5TTG9nKEAiICArKysgVGVzdCB0b28gbGF4IGJ5ICVkIGltYWdlcyIsIHRvdGFsRm91bmQgLSB0b3RhbE11c3RQYXNzKTsKKyAgfSBlbHNlIGlmICh0b3RhbEZvdW5kIDwgdG90YWxNdXN0UGFzcykgeworICAgIE5TTG9nKEAiICAtLS0gVGVzdCBmYWlsZWQgYnkgJWQgaW1hZ2VzIiwgdG90YWxNdXN0UGFzcyAtIHRvdGFsRm91bmQpOworICB9CisKKyAgaWYgKHRvdGFsTWlzcmVhZCA8IHRvdGFsTWF4TWlzcmVhZCkgeworICAgIE5TTG9nKEAiICArKysgVGVzdCBleHBlY3RzIHRvbyBtYW55IG1pc3JlYWRzIGJ5ICVkIGltYWdlcyIsIHRvdGFsTWF4TWlzcmVhZCAtIHRvdGFsTWlzcmVhZCk7CisgIH0gZWxzZSBpZiAodG90YWxNaXNyZWFkID4gdG90YWxNYXhNaXNyZWFkKSB7CisgICAgTlNMb2coQCIgIC0tLSBUZXN0IGhhZCB0b28gbWFueSBtaXNyZWFkcyBieSAlZCBpbWFnZXMiLCB0b3RhbE1pc3JlYWQgLSB0b3RhbE1heE1pc3JlYWQpOworICB9CisKKyAgLy8gVGhlbiBydW4gdGhyb3VnaCBhZ2FpbiBhbmQgYXNzZXJ0IGlmIGFueSBmYWlsZWQKKyAgaWYgKGFzc2VydE9uRmFpbHVyZSkgeworICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGVzdENvdW50OyB4KyspIHsKKyAgICAgIFRlc3RSZXN1bHQgKnRlc3RSZXN1bHQgPSBzZWxmLnRlc3RSZXN1bHRzW3hdOworICAgICAgTlNTdHJpbmcgKmxhYmVsID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJSb3RhdGlvbiAlZiBkZWdyZWVzOiBUb28gbWFueSBpbWFnZXMgZmFpbGVkIiwgdGVzdFJlc3VsdC5yb3RhdGlvbl07CisgICAgICBTVEFzc2VydFRydWUocGFzc2VkQ291bnRzW3hdID49IHRlc3RSZXN1bHQubXVzdFBhc3NDb3VudCwgbGFiZWwpOworICAgICAgU1RBc3NlcnRUcnVlKHRyeUhhcmRlckNvdW50c1t4XSA+PSB0ZXN0UmVzdWx0LnRyeUhhcmRlckNvdW50LCBAIlRyeSBoYXJkZXIsICVAIiwgbGFiZWwpOworICAgICAgbGFiZWwgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlJvdGF0aW9uICVmIGRlZ3JlZXM6IFRvbyBtYW55IGltYWdlcyBtaXNyZWFkIiwgdGVzdFJlc3VsdC5yb3RhdGlvbl07CisgICAgICBTVEFzc2VydFRydWUobWlzcmVhZENvdW50c1t4XSA8PSB0ZXN0UmVzdWx0Lm1heE1pc3JlYWRzLCBsYWJlbCk7CisgICAgICBTVEFzc2VydFRydWUodHJ5SGFyZGVyTWlzcmVhZENvdW50c1t4XSA8PSB0ZXN0UmVzdWx0Lm1heFRyeUhhcmRlck1pc3JlYWRzLCBAIlRyeSBoYXJkZXIsICVAIiwgbGFiZWwpOworICAgIH0KKyAgfQorfQorCistIChCT09MKWRlY29kZTooWlhCaW5hcnlCaXRtYXAgKilzb3VyY2Ugcm90YXRpb246KGZsb2F0KXJvdGF0aW9uIGV4cGVjdGVkVGV4dDooTlNTdHJpbmcgKilleHBlY3RlZFRleHQgZXhwZWN0ZWRNZXRhZGF0YTooTlNNdXRhYmxlRGljdGlvbmFyeSAqKWV4cGVjdGVkTWV0YWRhdGEgdHJ5SGFyZGVyOihCT09MKXRyeUhhcmRlciBtaXNyZWFkOihCT09MICopbWlzcmVhZCB7CisgIE5TU3RyaW5nICpzdWZmaXggPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiAoJUByb3RhdGlvbjogJWQpIiwgdHJ5SGFyZGVyID8gQCJ0cnkgaGFyZGVyLCAiIDogQCIiLCAoaW50KSByb3RhdGlvbl07CisgICptaXNyZWFkID0gTk87CisKKyAgWlhEZWNvZGVIaW50cyAqaGludHMgPSBbWlhEZWNvZGVIaW50cyBoaW50c107CisgIGlmICh0cnlIYXJkZXIpIHsKKyAgICBoaW50cy50cnlIYXJkZXIgPSBZRVM7CisgIH0KKworICBaWFJlc3VsdCAqcmVzdWx0ID0gW3NlbGYuYmFyY29kZVJlYWRlciBkZWNvZGU6c291cmNlIGhpbnRzOmhpbnRzIGVycm9yOm5pbF07CisgIGlmICghcmVzdWx0KSB7CisgICAgcmV0dXJuIE5POworICB9CisKKyAgaWYgKHNlbGYuZXhwZWN0ZWRGb3JtYXQgIT0gcmVzdWx0LmJhcmNvZGVGb3JtYXQpIHsKKyAgICBOU0xvZyhAIkZvcm1hdCBtaXNtYXRjaDogZXhwZWN0ZWQgJyVAJyBidXQgZ290ICclQCclQCIsCisgICAgICAgICAgW1tzZWxmIGNsYXNzXSBiYXJjb2RlRm9ybWF0QXNTdHJpbmc6c2VsZi5leHBlY3RlZEZvcm1hdF0sIFtbc2VsZiBjbGFzc10gYmFyY29kZUZvcm1hdEFzU3RyaW5nOnJlc3VsdC5iYXJjb2RlRm9ybWF0XSwgc3VmZml4KTsKKyAgICAqbWlzcmVhZCA9IFlFUzsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBOU1N0cmluZyAqcmVzdWx0VGV4dCA9IHJlc3VsdC50ZXh0OworICBpZiAoIVtleHBlY3RlZFRleHQgaXNFcXVhbFRvU3RyaW5nOnJlc3VsdFRleHRdKSB7CisgICAgTlNMb2coQCJDb250ZW50IG1pc21hdGNoOiBleHBlY3RlZCAnJUAnIGJ1dCBnb3QgJyVAJyVAIiwgZXhwZWN0ZWRUZXh0LCByZXN1bHRUZXh0LCBzdWZmaXgpOworICAgICptaXNyZWFkID0gWUVTOworICAgIHJldHVybiBOTzsKKyAgfQorCisgIE5TTXV0YWJsZURpY3Rpb25hcnkgKnJlc3VsdE1ldGFkYXRhID0gcmVzdWx0LnJlc3VsdE1ldGFkYXRhOworICBmb3IgKGlkIGtleU9iaiBpbiBbZXhwZWN0ZWRNZXRhZGF0YSBhbGxLZXlzXSkgeworICAgIFpYUmVzdWx0TWV0YWRhdGFUeXBlIGtleSA9IFtrZXlPYmogaW50VmFsdWVdOworICAgIGlkIGV4cGVjdGVkVmFsdWUgPSBleHBlY3RlZE1ldGFkYXRhW2tleU9ial07CisgICAgaWQgYWN0dWFsVmFsdWUgPSByZXN1bHRNZXRhZGF0YVtrZXlPYmpdOworICAgIGlmICghW2V4cGVjdGVkVmFsdWUgaXNFcXVhbDphY3R1YWxWYWx1ZV0pIHsKKyAgICAgIE5TTG9nKEAiTWV0YWRhdGEgbWlzbWF0Y2g6IGZvciBrZXkgJyVkJyBleHBlY3RlZCAnJUAnIGJ1dCBnb3QgJyVAJyIsIGtleSwgZXhwZWN0ZWRWYWx1ZSwgYWN0dWFsVmFsdWUpOworICAgICAgKm1pc3JlYWQgPSBZRVM7CisgICAgICByZXR1cm4gTk87CisgICAgfQorICB9CisKKyAgcmV0dXJuIFlFUzsKK30KKworLSAoTlNTdHJpbmcgKilyZWFkRmlsZUFzU3RyaW5nOihOU1N0cmluZyAqKWZpbGUgZW5jb2Rpbmc6KE5TU3RyaW5nRW5jb2RpbmcpZW5jb2RpbmcgeworICAgTlNTdHJpbmcgKnN0cmluZ0NvbnRlbnRzID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpmaWxlIGVuY29kaW5nOmVuY29kaW5nIGVycm9yOm5pbF07CisgIGlmIChbc3RyaW5nQ29udGVudHMgaGFzU3VmZml4OkAiXG4iXSkgeworICAgIE5TTG9nKEAiU3RyaW5nIGNvbnRlbnRzIG9mIGZpbGUgJUAgZW5kIHdpdGggYSBuZXdsaW5lLiBUaGlzIG1heSBub3QgYmUgaW50ZW5kZWQgYW5kIGNhdXNlIGEgdGVzdCBmYWlsdXJlIiwgZmlsZSk7CisgIH0KKyAgcmV0dXJuIHN0cmluZ0NvbnRlbnRzOworfQorCisvLyBBZGFwdGVkIGZyb20gaHR0cDovL2Jsb2cuY29yaW9saXMuY2gvMjAwOS8wOS8wNC9hcmJpdHJhcnktcm90YXRpb24tb2YtYS1jZ2ltYWdlLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL0phblgyL0NyZWF0ZVJvdGF0ZVdyaXRlQ0dJbWFnZQorLSAoWlhJbWFnZSAqKXJvdGF0ZUltYWdlOihaWEltYWdlICopb3JpZ2luYWwgZGVncmVlczooZmxvYXQpZGVncmVlcyB7CisgIGlmIChkZWdyZWVzID09IDAuMGYpIHsKKyAgICByZXR1cm4gb3JpZ2luYWw7CisgIH0KKyAgZG91YmxlIHJhZGlhbnMgPSAtMSAqIGRlZ3JlZXMgKiAoTV9QSSAvIDE4MCk7CisKKyAgQ0dSZWN0IGltZ1JlY3QgPSBDR1JlY3RNYWtlKDAsIDAsIG9yaWdpbmFsLndpZHRoLCBvcmlnaW5hbC5oZWlnaHQpOworICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VSb3RhdGlvbihyYWRpYW5zKTsKKyAgQ0dSZWN0IHJvdGF0ZWRSZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oaW1nUmVjdCwgdHJhbnNmb3JtKTsKKworICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVkUmVjdC5zaXplLndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVkUmVjdC5zaXplLmhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQob3JpZ2luYWwuY2dpbWFnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0JpdG1hcEFscGhhSW5mb01hc2sgJiBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KTsKKyAgQ0dDb250ZXh0U2V0QWxsb3dzQW50aWFsaWFzaW5nKGNvbnRleHQsIEZBTFNFKTsKKyAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwga0NHSW50ZXJwb2xhdGlvbk5vbmUpOworICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOworCisgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgKyhyb3RhdGVkUmVjdC5zaXplLndpZHRoLzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgKyhyb3RhdGVkUmVjdC5zaXplLmhlaWdodC8yKSk7CisgIENHQ29udGV4dFJvdGF0ZUNUTShjb250ZXh0LCByYWRpYW5zKTsKKworICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0TWFrZSgtaW1nUmVjdC5zaXplLndpZHRoLzIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtaW1nUmVjdC5zaXplLmhlaWdodC8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdSZWN0LnNpemUud2lkdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdSZWN0LnNpemUuaGVpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsLmNnaW1hZ2UpOworCisgIENHSW1hZ2VSZWYgcm90YXRlZEltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCk7CisKKyAgQ0ZSZWxlYXNlKGNvbnRleHQpOworCisgIHJldHVybiBbW1pYSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZVJlZjpyb3RhdGVkSW1hZ2VdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jb21tb24vQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9BYnN0cmFjdE5lZ2F0aXZlQmxhY2tCb3hUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNGZiYzUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jb21tb24vQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworLyoqCisgKiBUaGlzIGFic3RyYWN0IGNsYXNzIGxvb2tzIGZvciBuZWdhdGl2ZSByZXN1bHRzLCBpLmUuIGl0IG9ubHkgYWxsb3dzIGEgY2VydGFpbiBudW1iZXIgb2YgZmFsc2UKKyAqIHBvc2l0aXZlcyBpbiBpbWFnZXMgd2hpY2ggc2hvdWxkIG5vdCBkZWNvZGUuIFRoaXMgaGVscHMgZW5zdXJlIHRoYXQgd2UgYXJlIG5vdCB0b28gbGVuaWVudC4KKyAqLworQGludGVyZmFjZSBBYnN0cmFjdE5lZ2F0aXZlQmxhY2tCb3hUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24gdGVzdEJhc2VQYXRoU3VmZml4OihOU1N0cmluZyAqKXRlc3RCYXNlUGF0aFN1ZmZpeDsKKy0gKHZvaWQpYWRkVGVzdDooaW50KWZhbHNlUG9zaXRpdmVzQWxsb3dlZCByb3RhdGlvbjooZmxvYXQpcm90YXRpb247CistICh2b2lkKXJ1blRlc3RzOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jb21tb24vQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9BYnN0cmFjdE5lZ2F0aXZlQmxhY2tCb3hUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YjJkYzgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jb21tb24vQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UubQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBOZWdhdGl2ZVRlc3RSZXN1bHQgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgZmFsc2VQb3NpdGl2ZXNBbGxvd2VkOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZmxvYXQgcm90YXRpb247CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5lZ2F0aXZlVGVzdFJlc3VsdAorCistIChpZClpbml0V2l0aEZhbHNlUG9zaXRpdmVzQWxsb3dlZDooaW50KWZhbHNlUG9zaXRpdmVzQWxsb3dlZCByb3RhdGlvbjooZmxvYXQpcm90YXRpb24geworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9mYWxzZVBvc2l0aXZlc0FsbG93ZWQgPSBmYWxzZVBvc2l0aXZlc0FsbG93ZWQ7CisgICAgX3JvdGF0aW9uID0gcm90YXRpb247CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UKKworLy8gVXNlIHRoZSBtdWx0aWZvcm1hdCByZWFkZXIgdG8gZXZhbHVhdGUgYWxsIGRlY29kZXJzIGluIHRoZSBzeXN0ZW0uCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24gdGVzdEJhc2VQYXRoU3VmZml4OihOU1N0cmluZyAqKXRlc3RCYXNlUGF0aFN1ZmZpeCB7CisgIGlmIChzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uIHRlc3RCYXNlUGF0aFN1ZmZpeDp0ZXN0QmFzZVBhdGhTdWZmaXggYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdIGV4cGVjdGVkRm9ybWF0OjBdKSB7CisgICAgc2VsZi50ZXN0UmVzdWx0cyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClhZGRUZXN0OihpbnQpZmFsc2VQb3NpdGl2ZXNBbGxvd2VkIHJvdGF0aW9uOihmbG9hdClyb3RhdGlvbiB7CisgIFtzZWxmLnRlc3RSZXN1bHRzIGFkZE9iamVjdDpbW05lZ2F0aXZlVGVzdFJlc3VsdCBhbGxvY10gaW5pdFdpdGhGYWxzZVBvc2l0aXZlc0FsbG93ZWQ6ZmFsc2VQb3NpdGl2ZXNBbGxvd2VkIHJvdGF0aW9uOnJvdGF0aW9uXV07Cit9CisKKy0gKE5TU3RyaW5nICopcGF0aEluQnVuZGxlOihOU1VSTCAqKWZpbGUgeworICBOU0ludGVnZXIgc3RhcnRPZlJlc291cmNlcyA9IFtbZmlsZSBwYXRoXSByYW5nZU9mU3RyaW5nOkAiUmVzb3VyY2VzIl0ubG9jYXRpb247CisgIGlmIChzdGFydE9mUmVzb3VyY2VzID09IE5TTm90Rm91bmQpIHsKKyAgICByZXR1cm4gW2ZpbGUgcGF0aF07CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIFtbZmlsZSBwYXRoXSBzdWJzdHJpbmdGcm9tSW5kZXg6c3RhcnRPZlJlc291cmNlc107CisgIH0KK30KKworLSAodm9pZClydW5UZXN0cyB7CisgIGlmIChzZWxmLnRlc3RSZXN1bHRzLmNvdW50ID09IDApIHsKKyAgICBTVEZhaWwoQCJObyB0ZXN0IHJlc3VsdHMiKTsKKyAgfQorCisgIE5TQXJyYXkgKmltYWdlRmlsZXMgPSBbc2VsZiBpbWFnZUZpbGVzXTsKKworICBpbnQgZmFsc2VQb3NpdGl2ZXNbc2VsZi50ZXN0UmVzdWx0cy5jb3VudF07CisgIG1lbXNldChmYWxzZVBvc2l0aXZlcywgMCwgc2VsZi50ZXN0UmVzdWx0cy5jb3VudCAqIHNpemVvZihpbnQpKTsKKworICBmb3IgKE5TVVJMICp0ZXN0SW1hZ2UgaW4gaW1hZ2VGaWxlcykgeworICAgIE5TTG9nKEAiU3RhcnRpbmcgJUAiLCBbc2VsZiBwYXRoSW5CdW5kbGU6dGVzdEltYWdlXSk7CisKKyAgICBaWEltYWdlICppbWFnZSA9IFtbWlhJbWFnZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdEltYWdlXTsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHNlbGYudGVzdFJlc3VsdHMuY291bnQ7IHgrKykgeworICAgICAgTmVnYXRpdmVUZXN0UmVzdWx0ICp0ZXN0UmVzdWx0ID0gc2VsZi50ZXN0UmVzdWx0c1t4XTsKKyAgICAgIGlmICghW3NlbGYgY2hlY2tGb3JGYWxzZVBvc2l0aXZlczppbWFnZSByb3RhdGlvbkluRGVncmVlczp0ZXN0UmVzdWx0LnJvdGF0aW9uXSkgeworICAgICAgICBmYWxzZVBvc2l0aXZlc1t4XSsrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGludCB0b3RhbEZhbHNlUG9zaXRpdmVzID0gMDsKKyAgaW50IHRvdGFsQWxsb3dlZCA9IDA7CisKKyAgZm9yIChpbnQgeCA9IDA7IHggPCBzZWxmLnRlc3RSZXN1bHRzLmNvdW50OyB4KyspIHsKKyAgICBOZWdhdGl2ZVRlc3RSZXN1bHQgKnRlc3RSZXN1bHQgPSBzZWxmLnRlc3RSZXN1bHRzW3hdOworICAgIHRvdGFsRmFsc2VQb3NpdGl2ZXMgKz0gZmFsc2VQb3NpdGl2ZXNbeF07CisgICAgdG90YWxBbGxvd2VkICs9IHRlc3RSZXN1bHQuZmFsc2VQb3NpdGl2ZXNBbGxvd2VkOworICB9CisKKyAgaWYgKHRvdGFsRmFsc2VQb3NpdGl2ZXMgPCB0b3RhbEFsbG93ZWQpIHsKKyAgICBOU0xvZyhAIiAgKysrIFRlc3QgdG9vIGxheCBieSAlZCBpbWFnZXMiLCB0b3RhbEFsbG93ZWQgLSB0b3RhbEZhbHNlUG9zaXRpdmVzKTsKKyAgfSBlbHNlIGlmICh0b3RhbEZhbHNlUG9zaXRpdmVzID4gdG90YWxBbGxvd2VkKSB7CisgICAgTlNMb2coQCIgIC0tLSBUZXN0IGZhaWxlZCBieSAlZCBpbWFnZXMiLCB0b3RhbEZhbHNlUG9zaXRpdmVzIC0gdG90YWxBbGxvd2VkKTsKKyAgfQorCisgIGZvciAoaW50IHggPSAwOyB4IDwgc2VsZi50ZXN0UmVzdWx0cy5jb3VudDsgeCsrKSB7CisgICAgTmVnYXRpdmVUZXN0UmVzdWx0ICp0ZXN0UmVzdWx0ID0gc2VsZi50ZXN0UmVzdWx0c1t4XTsKKyAgICBOU0xvZyhAIlJvdGF0aW9uICVkIGRlZ3JlZXM6ICVkIG9mICVkIGltYWdlcyB3ZXJlIGZhbHNlIHBvc2l0aXZlcyAoJWQgYWxsb3dlZCkiLAorICAgICAgICAgIChpbnQpdGVzdFJlc3VsdC5yb3RhdGlvbiwgZmFsc2VQb3NpdGl2ZXNbeF0sIChpbnQpaW1hZ2VGaWxlcy5jb3VudCwKKyAgICAgICAgICB0ZXN0UmVzdWx0LmZhbHNlUG9zaXRpdmVzQWxsb3dlZCk7CisgICAgU1RBc3NlcnRUcnVlKGZhbHNlUG9zaXRpdmVzW3hdIDw9IHRlc3RSZXN1bHQuZmFsc2VQb3NpdGl2ZXNBbGxvd2VkLAorICAgICAgICAgICAgICAgICBAIlJvdGF0aW9uICVmIGRlZ3JlZXM6IFRvbyBtYW55IGZhbHNlIHBvc2l0aXZlcyBmb3VuZCIsIHRlc3RSZXN1bHQucm90YXRpb24pOworICB9Cit9CisKKy8qKgorICogTWFrZSBzdXJlIFpYaW5nIGRvZXMgTk9UIGZpbmQgYSBiYXJjb2RlIGluIHRoZSBpbWFnZS4KKyAqLworLSAoQk9PTCljaGVja0ZvckZhbHNlUG9zaXRpdmVzOihaWEltYWdlICopaW1hZ2Ugcm90YXRpb25JbkRlZ3JlZXM6KENHRmxvYXQpcm90YXRpb25JbkRlZ3JlZXMgeworICBaWEltYWdlICpyb3RhdGVkSW1hZ2UgPSBbc2VsZiByb3RhdGVJbWFnZTppbWFnZSBkZWdyZWVzOnJvdGF0aW9uSW5EZWdyZWVzXTsKKyAgWlhMdW1pbmFuY2VTb3VyY2UgKnNvdXJjZSA9IFtbWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6cm90YXRlZEltYWdlLmNnaW1hZ2VdOworICBaWEJpbmFyeUJpdG1hcCAqYml0bWFwID0gW1taWEJpbmFyeUJpdG1hcCBhbGxvY10gaW5pdFdpdGhCaW5hcml6ZXI6W1taWEh5YnJpZEJpbmFyaXplciBhbGxvY10gaW5pdFdpdGhTb3VyY2U6c291cmNlXV07CisgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICBaWFJlc3VsdCAqcmVzdWx0ID0gW3NlbGYuYmFyY29kZVJlYWRlciBkZWNvZGU6Yml0bWFwIGVycm9yOiZlcnJvcl07CisgIGlmIChyZXN1bHQpIHsKKyAgICBOU0xvZyhAIkZvdW5kIGZhbHNlIHBvc2l0aXZlOiAnJUAnIHdpdGggZm9ybWF0ICclQCcgKHJvdGF0aW9uOiAlZCkiLAorICAgICAgICAgIHJlc3VsdC50ZXh0LCBbQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlIGJhcmNvZGVGb3JtYXRBc1N0cmluZzpyZXN1bHQuYmFyY29kZUZvcm1hdF0sIChpbnQpIHJvdGF0aW9uSW5EZWdyZWVzKTsKKyAgICByZXR1cm4gTk87CisgIH0KKworICAvLyBUcnkgInRyeSBoYXJkZXIiIGdldE1vZGUKKyAgWlhEZWNvZGVIaW50cyAqaGludHMgPSBbWlhEZWNvZGVIaW50cyBoaW50c107CisgIGhpbnRzLnRyeUhhcmRlciA9IFlFUzsKKyAgcmVzdWx0ID0gW3NlbGYuYmFyY29kZVJlYWRlciBkZWNvZGU6Yml0bWFwIGhpbnRzOmhpbnRzIGVycm9yOiZlcnJvcl07CisgIGlmIChyZXN1bHQpIHsKKyAgICBOU0xvZyhAIlRyeSBoYXJkZXIgZm91bmQgZmFsc2UgcG9zaXRpdmU6ICclQCcgd2l0aCBmb3JtYXQgJyVAJyAocm90YXRpb246ICVkKSIsCisgICAgICAgICAgcmVzdWx0LnRleHQsIFtBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UgYmFyY29kZUZvcm1hdEFzU3RyaW5nOnJlc3VsdC5iYXJjb2RlRm9ybWF0XSwgKGludCkgcm90YXRpb25JbkRlZ3JlZXMpOworICAgIHJldHVybiBOTzsKKyAgfQorICByZXR1cm4gWUVTOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jb21tb24vVGVzdFJlc3VsdC5oIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1Rlc3RSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzEzZTdjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1Rlc3RSZXN1bHQuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAaW50ZXJmYWNlIFRlc3RSZXN1bHQgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIGludCBtdXN0UGFzc0NvdW50OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBpbnQgdHJ5SGFyZGVyQ291bnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIGludCBtYXhNaXNyZWFkczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgaW50IG1heFRyeUhhcmRlck1pc3JlYWRzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBmbG9hdCByb3RhdGlvbjsKKworLSAoaWQpaW5pdFdpdGhNdXN0UGFzc0NvdW50OihpbnQpbXVzdFBhc3NDb3VudCB0cnlIYXJkZXJDb3VudDooaW50KXRyeUhhcmRlckNvdW50IG1heE1pc3JlYWRzOihpbnQpbWF4TWlzcmVhZHMKKyAgICAgICBtYXhUcnlIYXJkZXJNaXNyZWFkczooaW50KW1heFRyeUhhcmRlck1pc3JlYWRzIHJvdGF0aW9uOihmbG9hdClyb3RhdGlvbjsKKworQGVuZAorCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jb21tb24vVGVzdFJlc3VsdC5tIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1Rlc3RSZXN1bHQubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGFkMDA2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1Rlc3RSZXN1bHQubQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJUZXN0UmVzdWx0LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UmVzdWx0CisKKy0gKGlkKWluaXRXaXRoTXVzdFBhc3NDb3VudDooaW50KW11c3RQYXNzQ291bnQgdHJ5SGFyZGVyQ291bnQ6KGludCl0cnlIYXJkZXJDb3VudCBtYXhNaXNyZWFkczooaW50KW1heE1pc3JlYWRzCisgICAgICAgbWF4VHJ5SGFyZGVyTWlzcmVhZHM6KGludCltYXhUcnlIYXJkZXJNaXNyZWFkcyByb3RhdGlvbjooZmxvYXQpcm90YXRpb24geworICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgIF9tdXN0UGFzc0NvdW50ID0gbXVzdFBhc3NDb3VudDsKKyAgICBfdHJ5SGFyZGVyQ291bnQgPSB0cnlIYXJkZXJDb3VudDsKKyAgICBfbWF4TWlzcmVhZHMgPSBtYXhNaXNyZWFkczsKKyAgICBfbWF4VHJ5SGFyZGVyTWlzcmVhZHMgPSBtYXhUcnlIYXJkZXJNaXNyZWFkczsKKyAgICBfcm90YXRpb24gPSByb3RhdGlvbjsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jb21tb24vWlhCaXRBcnJheVRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9jb21tb24vWlhCaXRBcnJheVRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhZGVkMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9aWEJpdEFycmF5VGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxTZW5UZXN0aW5nS2l0L1NlblRlc3RpbmdLaXQuaD4KKworQGludGVyZmFjZSBaWEJpdEFycmF5VGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jb21tb24vWlhCaXRBcnJheVRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9jb21tb24vWlhCaXRBcnJheVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwZWFmZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9aWEJpdEFycmF5VGVzdENhc2UubQpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRBcnJheVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEJpdEFycmF5VGVzdENhc2UKKworLSAodm9pZCl0ZXN0R2V0U2V0IHsKKyAgWlhCaXRBcnJheSAqYXJyYXkgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRXaXRoU2l6ZTozM107CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMzM7IGkrKykgeworICAgIFNUQXNzZXJ0RmFsc2UoW2FycmF5IGdldDppXSwgQCJFeHBlY3RlZCBbYXJyYXkgZ2V0OiVkXSB0byBiZSBmYWxzZSIsIGkpOworICAgIFthcnJheSBzZXQ6aV07CisgICAgU1RBc3NlcnRUcnVlKFthcnJheSBnZXQ6aV0sIEAiRXhwZWN0ZWQgW2FycmF5IGdldDolZF0gdG8gYmUgdHJ1ZSIpOworICB9Cit9CisKKy0gKHZvaWQpdGVzdEdldE5leHRTZXQxIHsKKyAgWlhCaXRBcnJheSAqYXJyYXkgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRXaXRoU2l6ZTozMl07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZTsgaSsrKSB7CisgICAgU1RBc3NlcnRFcXVhbHMoW2FycmF5IG5leHRTZXQ6aV0sIDMyLCBAIkV4cGVjdGVkIFthcnJheSBuZXh0U2V0OiVkXSB0byBlcXVhbCAzMiIsIGkpOworICB9CisgIGFycmF5ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6MzNdOworICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5LnNpemU7IGkrKykgeworICAgIFNUQXNzZXJ0RXF1YWxzKFthcnJheSBuZXh0U2V0OmldLCAzMywgQCJFeHBlY3RlZCBbYXJyYXkgbmV4dFNldDolZF0gdG8gZXF1YWwgMzMiLCBpKTsKKyAgfQorfQorCistICh2b2lkKXRlc3RHZXROZXh0U2V0MiB7CisgIFpYQml0QXJyYXkgKmFycmF5ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6MzNdOworICBbYXJyYXkgc2V0OjMxXTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5zaXplOyBpKyspIHsKKyAgICBpbnQgZXhwZWN0ZWQgPSBpIDw9IDMxID8gMzEgOiAzMzsKKyAgICBTVEFzc2VydEVxdWFscyhbYXJyYXkgbmV4dFNldDppXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgW2FycmF5IG5leHRTZXQ6JWRdIHRvIGVxdWFsICVkIiwgaSwgZXhwZWN0ZWQpOworICB9CisgIGFycmF5ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6MzNdOworICBbYXJyYXkgc2V0OjMyXTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5zaXplOyBpKyspIHsKKyAgICBTVEFzc2VydEVxdWFscyhbYXJyYXkgbmV4dFNldDppXSwgMzIsIEAiRXhwZWN0ZWQgW2FycmF5IG5leHRTZXQ6JWRdIHRvIGVxdWFsIDMyIiwgaSk7CisgIH0KK30KKworLSAodm9pZCl0ZXN0R2V0TmV4dFNldDMgeworICBaWEJpdEFycmF5ICphcnJheSA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdFdpdGhTaXplOjYzXTsKKyAgW2FycmF5IHNldDozMV07CisgIFthcnJheSBzZXQ6MzJdOworICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5LnNpemU7IGkrKykgeworICAgIGludCBleHBlY3RlZDsKKyAgICBpZiAoaSA8PSAzMSkgeworICAgICAgZXhwZWN0ZWQgPSAzMTsKKyAgICB9IGVsc2UgaWYgKGkgPT0gMzIpIHsKKyAgICAgIGV4cGVjdGVkID0gMzI7CisgICAgfSBlbHNlIHsKKyAgICAgIGV4cGVjdGVkID0gNjM7CisgICAgfQorICAgIFNUQXNzZXJ0RXF1YWxzKFthcnJheSBuZXh0U2V0OmldLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBbYXJyYXkgbmV4dFNldDolZF0gdG8gZXF1YWwgJWQiLCBpLCBleHBlY3RlZCk7CisgIH0KK30KKworLSAodm9pZCl0ZXN0R2V0TmV4dFNldDQgeworICBaWEJpdEFycmF5ICphcnJheSA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdFdpdGhTaXplOjYzXTsKKyAgW2FycmF5IHNldDozM107CisgIFthcnJheSBzZXQ6NDBdOworICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5LnNpemU7IGkrKykgeworICAgIGludCBleHBlY3RlZDsKKyAgICBpZiAoaSA8PSAzMykgeworICAgICAgZXhwZWN0ZWQgPSAzMzsKKyAgICB9IGVsc2UgaWYgKGkgPD0gNDApIHsKKyAgICAgIGV4cGVjdGVkID0gNDA7CisgICAgfSBlbHNlIHsKKyAgICAgIGV4cGVjdGVkID0gNjM7CisgICAgfQorICAgIFNUQXNzZXJ0RXF1YWxzKFthcnJheSBuZXh0U2V0OmldLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBbYXJyYXkgbmV4dFNldDolZF0gdG8gZXF1YWwgJWQiLCBpLCBleHBlY3RlZCk7CisgIH0KK30KKworLSAodm9pZCl0ZXN0R2V0TmV4dFNldDUgeworICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICBaWEJpdEFycmF5ICphcnJheSA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdFdpdGhTaXplOihhcmM0cmFuZG9tKCkgJSAxMDApICsgMV07CisgICAgaW50IG51bVNldCA9IGFyYzRyYW5kb20oKSAlIDIwOworICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtU2V0OyBqKyspIHsKKyAgICAgIFthcnJheSBzZXQ6YXJjNHJhbmRvbSgpICUgYXJyYXkuc2l6ZV07CisgICAgfQorICAgIGludCBudW1RdWVyaWVzID0gYXJjNHJhbmRvbSgpICUgMjA7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1RdWVyaWVzOyBqKyspIHsKKyAgICAgIGludCBxdWVyeSA9IGFyYzRyYW5kb20oKSAlIGFycmF5LnNpemU7CisgICAgICBpbnQgZXhwZWN0ZWQgPSBxdWVyeTsKKyAgICAgIHdoaWxlIChleHBlY3RlZCA8IGFycmF5LnNpemUgJiYgIVthcnJheSBnZXQ6ZXhwZWN0ZWRdKSB7CisgICAgICAgIGV4cGVjdGVkKys7CisgICAgICB9CisgICAgICBpbnQgYWN0dWFsID0gW2FycmF5IG5leHRTZXQ6cXVlcnldOworICAgICAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgeworICAgICAgICBbYXJyYXkgbmV4dFNldDpxdWVyeV07CisgICAgICB9CisgICAgICBTVEFzc2VydEVxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBAIkV4cGVjdGVkICVkIHRvIGVxdWFsICVkIiwgYWN0dWFsLCBleHBlY3RlZCk7CisgICAgfQorICB9Cit9CisKKy0gKHZvaWQpdGVzdFNldEJ1bGsgeworICBaWEJpdEFycmF5ICphcnJheSA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdFdpdGhTaXplOjY0XTsKKyAgW2FycmF5IHNldEJ1bGs6MzIgbmV3Qml0czoweEZGRkYwMDAwXTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA0ODsgaSsrKSB7CisgICAgU1RBc3NlcnRGYWxzZShbYXJyYXkgZ2V0OmldLCBAIkV4cGVjdGVkIFthcnJheSBnZXQ6JWRdIHRvIGJlIGZhbHNlIiwgaSk7CisgIH0KKyAgZm9yIChpbnQgaSA9IDQ4OyBpIDwgNjQ7IGkrKykgeworICAgIFNUQXNzZXJ0VHJ1ZShbYXJyYXkgZ2V0OmldLCBAIkV4cGVjdGVkIFthcnJheSBnZXQ6JWRdIHRvIGJlIHRydWUiLCBpKTsKKyAgfQorfQorCistICh2b2lkKXRlc3RDbGVhciB7CisgIFpYQml0QXJyYXkgKmFycmF5ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6MzJdOworICBmb3IgKGludCBpID0gMDsgaSA8IDMyOyBpKyspIHsKKyAgICBbYXJyYXkgc2V0OmldOworICB9CisgIFthcnJheSBjbGVhcl07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykgeworICAgIFNUQXNzZXJ0RmFsc2UoW2FycmF5IGdldDppXSwgQCJFeHBlY3RlZCBbYXJyYXkgZ2V0OiVkXSB0byBiZSBmYWxzZSIsIGkpOworICB9Cit9CisKKy0gKHZvaWQpdGVzdEdldEFycmF5IHsKKyAgWlhCaXRBcnJheSAqYXJyYXkgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRXaXRoU2l6ZTo2NF07CisgIFthcnJheSBzZXQ6MF07CisgIFthcnJheSBzZXQ6NjNdOworICBpbnQzMl90ICppbnRzID0gYXJyYXkuYml0czsKKyAgU1RBc3NlcnRFcXVhbHMoaW50c1swXSwgMSwgQCJFeHBlY3RlZCBpbnRzWzBdIHRvIGVxdWFsIDEiKTsKKyAgU1RBc3NlcnRFcXVhbHMoaW50c1sxXSwgSU5UX01JTiwgQCJFeHBlY3RlZCBpbnRzWzFdIHRvIGVxdWFsIElOVF9NSU4iKTsKK30KKworLSAodm9pZCl0ZXN0SXNSYW5nZSB7CisgIFpYQml0QXJyYXkgKmFycmF5ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6NjRdOworICBTVEFzc2VydFRydWUoW2FycmF5IGlzUmFuZ2U6MCBlbmQ6NjQgdmFsdWU6Tk9dLCBAIkV4cGVjdGVkIHJhbmdlIDAtNjQgb2YgTk8gdG8gYmUgdHJ1ZSIpOworICBTVEFzc2VydEZhbHNlKFthcnJheSBpc1JhbmdlOjAgZW5kOjY0IHZhbHVlOllFU10sIEAiRXhwZWN0ZWQgcmFuZ2UgMC02NCBvZiBZRVMgdG8gYmUgZmFsc2UiKTsKKyAgW2FycmF5IHNldDozMl07CisgIFNUQXNzZXJ0VHJ1ZShbYXJyYXkgaXNSYW5nZTozMiBlbmQ6MzMgdmFsdWU6WUVTXSwgQCJFeHBlY3RlZCByYW5nZSAzMi0zMyBvZiBZRVMgdG8gYmUgdHJ1ZSIpOworICBbYXJyYXkgc2V0OjMxXTsKKyAgU1RBc3NlcnRUcnVlKFthcnJheSBpc1JhbmdlOjMxIGVuZDozMyB2YWx1ZTpZRVNdLCBAIkV4cGVjdGVkIHJhbmdlIDMxLTMzIG9mIFlFUyB0byBiZSB0cnVlIik7CisgIFthcnJheSBzZXQ6MzRdOworICBTVEFzc2VydEZhbHNlKFthcnJheSBpc1JhbmdlOjMxIGVuZDozNSB2YWx1ZTpZRVNdLCBAIkV4cGVjdGVkIHJhbmdlIDMxLTM1IG9mIFlFUyB0byBiZSBmYWxzZSIpOworICBmb3IgKGludCBpID0gMDsgaSA8IDMxOyBpKyspIHsKKyAgICBbYXJyYXkgc2V0OmldOworICB9CisgIFNUQXNzZXJ0VHJ1ZShbYXJyYXkgaXNSYW5nZTowIGVuZDozMyB2YWx1ZTpZRVNdLCBAIkV4cGVjdGVkIHJhbmdlIDAtMzMgb2YgWUVTIHRvIGJlIHRydWUiKTsKKyAgZm9yIChpbnQgaSA9IDMzOyBpIDwgNjQ7IGkrKykgeworICAgIFthcnJheSBzZXQ6aV07CisgIH0KKyAgU1RBc3NlcnRUcnVlKFthcnJheSBpc1JhbmdlOjAgZW5kOjY0IHZhbHVlOllFU10sIEAiRXhwZWN0ZWQgcmFuZ2UgMC02NCBvZiBZRVMgdG8gYmUgdHJ1ZSIpOworICBTVEFzc2VydEZhbHNlKFthcnJheSBpc1JhbmdlOjAgZW5kOjY0IHZhbHVlOk5PXSwgQCJFeHBlY3RlZCByYW5nZSAwLTY0IG9mIFlFUyB0byBiZSBmYWxzZSIpOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jb21tb24vWlhCaXRNYXRyaXhUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYQml0TWF0cml4VGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZjNDg0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYQml0TWF0cml4VGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxTZW5UZXN0aW5nS2l0L1NlblRlc3RpbmdLaXQuaD4KKworQGludGVyZmFjZSBaWEJpdE1hdHJpeFRlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYQml0TWF0cml4VGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9aWEJpdE1hdHJpeFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3MzM4ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9aWEJpdE1hdHJpeFRlc3RDYXNlLm0KQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0TWF0cml4VGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFpYQml0TWF0cml4VGVzdENhc2UKKworLSAodm9pZCl0ZXN0R2V0U2V0IHsKKyAgWlhCaXRNYXRyaXggKm1hdHJpeCA9IFtbWlhCaXRNYXRyaXggYWxsb2NdIGluaXRXaXRoRGltZW5zaW9uOjMzXTsKKyAgU1RBc3NlcnRFcXVhbHMobWF0cml4LmhlaWdodCwgMzMsIEAiRXhwZWN0ZWQgbWF0cml4IGhlaWdodCB0byBiZSAzMyIpOworICBmb3IgKGludCB5ID0gMDsgeSA8IDMzOyB5KyspIHsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IDMzOyB4KyspIHsKKyAgICAgIGlmICgoeSAqIHggJSAzKSA9PSAwKSB7CisgICAgICAgIFttYXRyaXggc2V0WDp4IHk6eV07CisgICAgICB9CisgICAgfQorICB9CisgIGZvciAoaW50IHkgPSAwOyB5IDwgMzM7IHkrKykgeworICAgIGZvciAoaW50IHggPSAwOyB4IDwgMzM7IHgrKykgeworICAgICAgU1RBc3NlcnRFcXVhbHMoW21hdHJpeCBnZXRYOnggeTp5XSwgKEJPT0wpKHkgKiB4ICUgMyA9PSAwKSwgQCJFeHBlY3RlZCBtYXRyaXggKCVkLCVkKSB0byBlcXVhbCAlZCIsIHgsIHksIHkgKiB4ICUgMyA9PSAwKTsKKyAgICB9CisgIH0KK30KKworLSAodm9pZCl0ZXN0U2V0UmVnaW9uIHsKKyAgWlhCaXRNYXRyaXggKm1hdHJpeCA9IFtbWlhCaXRNYXRyaXggYWxsb2NdIGluaXRXaXRoRGltZW5zaW9uOjVdOworICBbbWF0cml4IHNldFJlZ2lvbkF0TGVmdDoxIHRvcDoxIHdpZHRoOjMgaGVpZ2h0OjNdOworICBmb3IgKGludCB5ID0gMDsgeSA8IDU7IHkrKykgeworICAgIGZvciAoaW50IHggPSAwOyB4IDwgNTsgeCsrKSB7CisgICAgICBCT09MIGV4cGVjdGVkID0geSA+PSAxICYmIHkgPD0gMyAmJiB4ID49IDEgJiYgeCA8PSAzOworICAgICAgU1RBc3NlcnRFcXVhbHMoW21hdHJpeCBnZXRYOnggeTp5XSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgKCVkLCVkKSB0byBiZSAlZCIsIHgsIHksIGV4cGVjdGVkKTsKKyAgICB9CisgIH0KK30KKworLSAodm9pZCl0ZXN0UmVjdGFuZ3VsYXJNYXRyaXggeworICBaWEJpdE1hdHJpeCAqbWF0cml4ID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDo3NSBoZWlnaHQ6MjBdOworICBTVEFzc2VydEVxdWFscyhtYXRyaXgud2lkdGgsIDc1LCBAIkV4cGVjdGVkIG1hdHJpeC53aWR0aCB0byBiZSA3NSIpOworICBTVEFzc2VydEVxdWFscyhtYXRyaXguaGVpZ2h0LCAyMCwgQCJFeHBlY3RlZCBtYXRyaXguaGVpZ2h0IHRvIGJlIDIwIik7CisgIFttYXRyaXggc2V0WDoxMCB5OjBdOworICBbbWF0cml4IHNldFg6MTEgeToxXTsKKyAgW21hdHJpeCBzZXRYOjUwIHk6Ml07CisgIFttYXRyaXggc2V0WDo1MSB5OjNdOworICBbbWF0cml4IGZsaXBYOjc0IHk6NF07CisgIFttYXRyaXggZmxpcFg6MCB5OjVdOworCisgIC8vIFNob3VsZCBhbGwgYmUgb24KKyAgU1RBc3NlcnRUcnVlKFttYXRyaXggZ2V0WDoxMCB5OjBdLCBAIkV4cGVjdGVkICgxMCwwKSB0byBiZSBvbiIpOworICBTVEFzc2VydFRydWUoW21hdHJpeCBnZXRYOjExIHk6MV0sIEAiRXhwZWN0ZWQgKDExLDEpIHRvIGJlIG9uIik7CisgIFNUQXNzZXJ0VHJ1ZShbbWF0cml4IGdldFg6NTAgeToyXSwgQCJFeHBlY3RlZCAoNTAsMikgdG8gYmUgb24iKTsKKyAgU1RBc3NlcnRUcnVlKFttYXRyaXggZ2V0WDo1MSB5OjNdLCBAIkV4cGVjdGVkICg1MSwzKSB0byBiZSBvbiIpOworICBTVEFzc2VydFRydWUoW21hdHJpeCBnZXRYOjc0IHk6NF0sIEAiRXhwZWN0ZWQgKDc0LDQpIHRvIGJlIG9uIik7CisgIFNUQXNzZXJ0VHJ1ZShbbWF0cml4IGdldFg6MCB5OjVdLCBAIkV4cGVjdGVkICgwLDUpIHRvIGJlIG9uIik7CisKKyAgLy8gRmxpcCBhIGNvdXBsZSBiYWNrIG9mZgorICBbbWF0cml4IGZsaXBYOjUwIHk6Ml07CisgIFttYXRyaXggZmxpcFg6NTEgeTozXTsKKyAgU1RBc3NlcnRGYWxzZShbbWF0cml4IGdldFg6NTAgeToyXSwgQCJFeHBlY3RlZCAoNTAsMikgdG8gYmUgb2ZmIik7CisgIFNUQXNzZXJ0RmFsc2UoW21hdHJpeCBnZXRYOjUxIHk6M10sIEAiRXhwZWN0ZWQgKDUxLDMpIHRvIGJlIG9mZiIpOworfQorCistICh2b2lkKXRlc3RSZWN0YW5ndWxhclNldFJlZ2lvbiB7CisgIFpYQml0TWF0cml4ICptYXRyaXggPSBbW1pYQml0TWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOjMyMCBoZWlnaHQ6MjQwXTsKKyAgU1RBc3NlcnRFcXVhbHMobWF0cml4LndpZHRoLCAzMjAsIEAiRXhwZWN0ZWQgbWF0cml4LndpZHRoIHRvIGJlIDMyMCIpOworICBTVEFzc2VydEVxdWFscyhtYXRyaXguaGVpZ2h0LCAyNDAsIEAiRXhwZWN0ZWQgbWF0cml4LmhlaWdodCB0byBiZSAyNDAiKTsKKyAgW21hdHJpeCBzZXRSZWdpb25BdExlZnQ6MTA1IHRvcDoyMiB3aWR0aDo4MCBoZWlnaHQ6MTJdOworCisgIC8vIE9ubHkgYml0cyBpbiB0aGUgcmVnaW9uIHNob3VsZCBiZSBvbgorICBmb3IgKGludCB5ID0gMDsgeSA8IDI0MDsgeSsrKSB7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCAzMjA7IHgrKykgeworICAgICAgQk9PTCBleHBlY3RlZCA9IHkgPj0gMjIgJiYgeSA8IDM0ICYmIHggPj0gMTA1ICYmIHggPCAxODU7CisgICAgICBTVEFzc2VydEVxdWFscyhbbWF0cml4IGdldFg6eCB5OnldLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBtYXRyaXggKCVkLCVkKSB0byBlcXVhbCAlZCIsIHgsIHksIGV4cGVjdGVkKTsKKyAgICB9CisgIH0KK30KKworLSAodm9pZCl0ZXN0R2V0Um93IHsKKyAgWlhCaXRNYXRyaXggKm1hdHJpeCA9IFtbWlhCaXRNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6MTAyIGhlaWdodDo1XTsKKyAgZm9yIChpbnQgeCA9IDA7IHggPCAxMDI7IHgrKykgeworICAgIGlmICgoeCAmIDB4MDMpID09IDApIHsKKyAgICAgIFttYXRyaXggc2V0WDp4IHk6Ml07CisgICAgfQorICB9CisKKyAgLy8gU2hvdWxkIGFsbG9jYXRlCisgIFpYQml0QXJyYXkgKmFycmF5ID0gW21hdHJpeCByb3dBdFk6MiByb3c6bmlsXTsKKyAgU1RBc3NlcnRFcXVhbHMoYXJyYXkuc2l6ZSwgMTAyLCBAIkV4cGVjdGVkIGFycmF5LnNpemUgdG8gZXF1YWwgMTAyIik7CisKKyAgLy8gU2hvdWxkIHJlYWxsb2NhdGUKKyAgWlhCaXRBcnJheSAqYXJyYXkyID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6NjBdOworICBhcnJheTIgPSBbbWF0cml4IHJvd0F0WToyIHJvdzphcnJheTJdOworICBTVEFzc2VydEVxdWFscyhhcnJheTIuc2l6ZSwgMTAyLCBAIkV4cGVjdGVkIGFycmF5Mi5zaXplIHRvIGVxdWFsIDEwMiIpOworCisgIC8vIFNob3VsZCB1c2UgcHJvdmlkZWQgb2JqZWN0LCB3aXRoIG9yaWdpbmFsIEJpdEFycmF5IHNpemUKKyAgWlhCaXRBcnJheSAqYXJyYXkzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6MjAwXTsKKyAgYXJyYXkzID0gW21hdHJpeCByb3dBdFk6MiByb3c6YXJyYXkzXTsKKyAgU1RBc3NlcnRFcXVhbHMoYXJyYXkzLnNpemUsIDIwMCwgQCJFeHBlY3RlZCBhcnJheTMuc2l6ZSB0byBlcXVhbCAyMDAiKTsKKworICBmb3IgKGludCB4ID0gMDsgeCA8IDEwMjsgeCsrKSB7CisgICAgQk9PTCBvbiA9ICh4ICYgMHgwMykgPT0gMDsKKyAgICBTVEFzc2VydEVxdWFscyhbYXJyYXkgZ2V0OnhdLCBvbiwgQCJFeHBlY3RlZCBbYXJyYXkgZ2V0OiVkXSB0byBiZSAlZCIsIHgsIG9uKTsKKyAgICBTVEFzc2VydEVxdWFscyhbYXJyYXkyIGdldDp4XSwgb24sIEAiRXhwZWN0ZWQgW2FycmF5MiBnZXQ6JWRdIHRvIGJlICVkIiwgeCwgb24pOworICAgIFNUQXNzZXJ0RXF1YWxzKFthcnJheTMgZ2V0OnhdLCBvbiwgQCJFeHBlY3RlZCBbYXJyYXkzIGdldDolZF0gdG8gYmUgJWQiLCB4LCBvbik7CisgIH0KK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYQml0U291cmNlQnVpbGRlci5oIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYQml0U291cmNlQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NmZhODUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jb21tb24vWlhCaXRTb3VyY2VCdWlsZGVyLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQGludGVyZmFjZSBaWEJpdFNvdXJjZUJ1aWxkZXIgOiBOU09iamVjdAorCistICh2b2lkKXdyaXRlOihpbnQpdmFsdWUgbnVtQml0czooaW50KW51bUJpdHM7CistIChpbnQ4X3QgKil0b0J5dGVBcnJheTsKKy0gKGludClieXRlQXJyYXlMZW5ndGg7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9aWEJpdFNvdXJjZUJ1aWxkZXIubSBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9aWEJpdFNvdXJjZUJ1aWxkZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzczN2NhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYQml0U291cmNlQnVpbGRlci5tCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYQml0U291cmNlQnVpbGRlci5oIgorCitAaW50ZXJmYWNlIFpYQml0U291cmNlQnVpbGRlciAoKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgYml0c0xlZnRJbk5leHRCeXRlOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IG5leHRCeXRlOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNNdXRhYmxlRGF0YSAqb3V0cHV0OworCitAZW5kCisKKworLyoqCisgKiBDbGFzcyB0aGF0IGxldHMgb25lIGVhc2lseSBidWlsZCBhbiBhcnJheSBvZiBieXRlcyBieSBhcHBlbmRpbmcgYml0cyBhdCBhIHRpbWUuCisgKi8KK0BpbXBsZW1lbnRhdGlvbiBaWEJpdFNvdXJjZUJ1aWxkZXIKKworLSAoaWQpaW5pdCB7CisgIGlmKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKKyAgICBfYml0c0xlZnRJbk5leHRCeXRlID0gODsKKyAgICBfbmV4dEJ5dGUgPSAwOworICAgIF9vdXRwdXQgPSBbTlNNdXRhYmxlRGF0YSBkYXRhXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXdyaXRlOihpbnQpdmFsdWUgbnVtQml0czooaW50KW51bUJpdHMgeworICBpZiAobnVtQml0cyA8PSBzZWxmLmJpdHNMZWZ0SW5OZXh0Qnl0ZSkgeworICAgIHNlbGYubmV4dEJ5dGUgPDw9IG51bUJpdHM7CisgICAgc2VsZi5uZXh0Qnl0ZSB8PSB2YWx1ZTsKKyAgICBzZWxmLmJpdHNMZWZ0SW5OZXh0Qnl0ZSAtPSBudW1CaXRzOworICAgIGlmIChzZWxmLmJpdHNMZWZ0SW5OZXh0Qnl0ZSA9PSAwKSB7CisgICAgICBbc2VsZi5vdXRwdXQgYXBwZW5kQnl0ZXM6Jl9uZXh0Qnl0ZSBsZW5ndGg6MV07CisgICAgICBzZWxmLm5leHRCeXRlID0gMDsKKyAgICAgIHNlbGYuYml0c0xlZnRJbk5leHRCeXRlID0gODsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaW50IGJpdHNUb1dyaXRlTm93ID0gc2VsZi5iaXRzTGVmdEluTmV4dEJ5dGU7CisgICAgaW50IG51bVJlc3RPZkJpdHMgPSBudW1CaXRzIC0gYml0c1RvV3JpdGVOb3c7CisgICAgaW50IG1hc2sgPSAweEZGID4+ICg4IC0gYml0c1RvV3JpdGVOb3cpOworICAgIGludCB2YWx1ZVRvV3JpdGVOb3cgPSAoaW50KSgoKHVuc2lnbmVkIGludCl2YWx1ZSkgPj4gbnVtUmVzdE9mQml0cykgJiBtYXNrOworICAgIFtzZWxmIHdyaXRlOnZhbHVlVG9Xcml0ZU5vdyBudW1CaXRzOmJpdHNUb1dyaXRlTm93XTsKKyAgICBbc2VsZiB3cml0ZTp2YWx1ZSBudW1CaXRzOm51bVJlc3RPZkJpdHNdOworICB9Cit9CisKKy0gKGludDhfdCAqKXRvQnl0ZUFycmF5IHsKKyAgaWYgKHNlbGYuYml0c0xlZnRJbk5leHRCeXRlIDwgOCkgeworICAgIFtzZWxmIHdyaXRlOjAgbnVtQml0czpzZWxmLmJpdHNMZWZ0SW5OZXh0Qnl0ZV07CisgIH0KKyAgcmV0dXJuIChpbnQ4X3QgKilbc2VsZi5vdXRwdXQgYnl0ZXNdOworfQorCistIChpbnQpYnl0ZUFycmF5TGVuZ3RoIHsKKyAgcmV0dXJuIChpbnQpW3NlbGYub3V0cHV0IGxlbmd0aF07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9aWEJpdFNvdXJjZVRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9jb21tb24vWlhCaXRTb3VyY2VUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNmMyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jb21tb24vWlhCaXRTb3VyY2VUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYQml0U291cmNlVGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9jb21tb24vWlhCaXRTb3VyY2VUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYQml0U291cmNlVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTk1N2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYQml0U291cmNlVGVzdENhc2UubQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdFNvdXJjZVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEJpdFNvdXJjZVRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdFNvdXJjZSB7CisgIGludDhfdCBieXRlc1s1XSA9IHsxLCAyLCAzLCA0LCA1fTsKKyAgWlhCaXRTb3VyY2UgKnNvdXJjZSA9IFtbWlhCaXRTb3VyY2UgYWxsb2NdIGluaXRXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOjVdOworICBTVEFzc2VydEVxdWFscyhzb3VyY2UuYXZhaWxhYmxlLCA0MCwgQCJFeHBlY3RlZCBzb3VyY2UuYXZhaWxhYmxlIHRvIDQwIik7CisgIFNUQXNzZXJ0RXF1YWxzKFtzb3VyY2UgcmVhZEJpdHM6MV0sIDAsIEAiRXhwZWN0ZWQgW3NvdXJjZSByZWFkQml0czoxXSB0byAwIik7CisgIFNUQXNzZXJ0RXF1YWxzKHNvdXJjZS5hdmFpbGFibGUsIDM5LCBAIkV4cGVjdGVkIHNvdXJjZS5hdmFpbGFibGUgdG8gMzkiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW3NvdXJjZSByZWFkQml0czo2XSwgMCwgQCJFeHBlY3RlZCBbc291cmNlIHJlYWRCaXRzOjZdIHRvIDAiKTsKKyAgU1RBc3NlcnRFcXVhbHMoc291cmNlLmF2YWlsYWJsZSwgMzMsIEAiRXhwZWN0ZWQgc291cmNlLmF2YWlsYWJsZSB0byAzMyIpOworICBTVEFzc2VydEVxdWFscyhbc291cmNlIHJlYWRCaXRzOjFdLCAxLCBAIkV4cGVjdGVkIFtzb3VyY2UgcmVhZEJpdHM6MV0gdG8gMSIpOworICBTVEFzc2VydEVxdWFscyhzb3VyY2UuYXZhaWxhYmxlLCAzMiwgQCJFeHBlY3RlZCBzb3VyY2UuYXZhaWxhYmxlIHRvIDMyIik7CisgIFNUQXNzZXJ0RXF1YWxzKFtzb3VyY2UgcmVhZEJpdHM6OF0sIDIsIEAiRXhwZWN0ZWQgW3NvdXJjZSByZWFkQml0czoxXSB0byAxIik7CisgIFNUQXNzZXJ0RXF1YWxzKHNvdXJjZS5hdmFpbGFibGUsIDI0LCBAIkV4cGVjdGVkIHNvdXJjZS5hdmFpbGFibGUgdG8gMjQiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW3NvdXJjZSByZWFkQml0czoxMF0sIDEyLCBAIkV4cGVjdGVkIFtzb3VyY2UgcmVhZEJpdHM6MTBdIHRvIDEiKTsKKyAgU1RBc3NlcnRFcXVhbHMoc291cmNlLmF2YWlsYWJsZSwgMTQsIEAiRXhwZWN0ZWQgc291cmNlLmF2YWlsYWJsZSB0byAxNCIpOworICBTVEFzc2VydEVxdWFscyhbc291cmNlIHJlYWRCaXRzOjhdLCAxNiwgQCJFeHBlY3RlZCBbc291cmNlIHJlYWRCaXRzOjhdIHRvIDE2Iik7CisgIFNUQXNzZXJ0RXF1YWxzKHNvdXJjZS5hdmFpbGFibGUsIDYsIEAiRXhwZWN0ZWQgc291cmNlLmF2YWlsYWJsZSB0byA2Iik7CisgIFNUQXNzZXJ0RXF1YWxzKFtzb3VyY2UgcmVhZEJpdHM6Nl0sIDUsIEAiRXhwZWN0ZWQgW3NvdXJjZSByZWFkQml0czo2XSB0byA1Iik7CisgIFNUQXNzZXJ0RXF1YWxzKHNvdXJjZS5hdmFpbGFibGUsIDAsIEAiRXhwZWN0ZWQgc291cmNlLmF2YWlsYWJsZSB0byAwIik7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9aWFBlcnNwZWN0aXZlVHJhbnNmb3JtVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9aWFBlcnNwZWN0aXZlVHJhbnNmb3JtVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGZlNWVjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYUGVyc3BlY3RpdmVUcmFuc2Zvcm1UZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYUGVyc3BlY3RpdmVUcmFuc2Zvcm1UZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9aWFBlcnNwZWN0aXZlVHJhbnNmb3JtVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9aWFBlcnNwZWN0aXZlVHJhbnNmb3JtVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjY4ZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYUGVyc3BlY3RpdmVUcmFuc2Zvcm1UZXN0Q2FzZS5tCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYUGVyc3BlY3RpdmVUcmFuc2Zvcm1UZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybVRlc3RDYXNlCisKK3N0YXRpYyBmbG9hdCBFUFNJTE9OID0gMC4wMDAxZjsKKworLSAodm9pZCl0ZXN0U3F1YXJlVG9RdWFkcmlsYXRlcmFsIHsKKyAgWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSAqcHQgPSBbWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSBzcXVhcmVUb1F1YWRyaWxhdGVyYWw6Mi4wZiB5MDozLjBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxOjEwLjBmIHkxOjQuMGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI6MTYuMGYgeTI6MTUuMGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDM6NC4wZiB5Mzo5LjBmXTsKKyAgW3NlbGYgYXNzZXJ0UG9pbnRFcXVhbHNFeHBlY3RlZFg6Mi4wZiBleHBlY3RlZFk6My4wZiBzb3VyY2VYOjAuMGYgc291cmNlWTowLjBmIHB0OnB0XTsKKyAgW3NlbGYgYXNzZXJ0UG9pbnRFcXVhbHNFeHBlY3RlZFg6MTAuMGYgZXhwZWN0ZWRZOjQuMGYgc291cmNlWDoxLjBmIHNvdXJjZVk6MC4wZiBwdDpwdF07CisgIFtzZWxmIGFzc2VydFBvaW50RXF1YWxzRXhwZWN0ZWRYOjQuMGYgZXhwZWN0ZWRZOjkuMGYgc291cmNlWDowLjBmIHNvdXJjZVk6MS4wZiBwdDpwdF07CisgIFtzZWxmIGFzc2VydFBvaW50RXF1YWxzRXhwZWN0ZWRYOjE2LjBmIGV4cGVjdGVkWToxNS4wZiBzb3VyY2VYOjEuMGYgc291cmNlWToxLjBmIHB0OnB0XTsKKyAgW3NlbGYgYXNzZXJ0UG9pbnRFcXVhbHNFeHBlY3RlZFg6Ni41MzUyMTFmIGV4cGVjdGVkWTo2Ljg4NzMyMzRmIHNvdXJjZVg6MC41ZiBzb3VyY2VZOjAuNWYgcHQ6cHRdOworICBbc2VsZiBhc3NlcnRQb2ludEVxdWFsc0V4cGVjdGVkWDo0OC4wZiBleHBlY3RlZFk6NDIuNDI4NTdmIHNvdXJjZVg6MS41ZiBzb3VyY2VZOjEuNWYgcHQ6cHRdOworfQorCistICh2b2lkKXRlc3RRdWFkcmlsYXRlcmFsVG9RdWFkcmlsYXRlcmFsIHsKKyAgWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSAqcHQgPSBbWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSBxdWFkcmlsYXRlcmFsVG9RdWFkcmlsYXRlcmFsOjIuMGYgeTA6My4wZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6MTAuMGYgeTE6NC4wZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI6MTYuMGYgeTI6MTUuMGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgzOjQuMGYgeTM6OS4wZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MHA6MTAzLjBmIHkwcDoxMTAuMGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDFwOjMwMC4wZiB5MXA6MTIwLjBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgycDoyOTAuMGYgeTJwOjI3MC4wZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4M3A6MTUwLjBmIHkzcDoyODAuMGZdOworICBbc2VsZiBhc3NlcnRQb2ludEVxdWFsc0V4cGVjdGVkWDoxMDMuMGYgZXhwZWN0ZWRZOjExMC4wZiBzb3VyY2VYOjIuMGYgc291cmNlWTozLjBmIHB0OnB0XTsKKyAgW3NlbGYgYXNzZXJ0UG9pbnRFcXVhbHNFeHBlY3RlZFg6MzAwLjBmIGV4cGVjdGVkWToxMjAuMGYgc291cmNlWDoxMC4wZiBzb3VyY2VZOjQuMGYgcHQ6cHRdOworICBbc2VsZiBhc3NlcnRQb2ludEVxdWFsc0V4cGVjdGVkWDoyOTAuMGYgZXhwZWN0ZWRZOjI3MC4wZiBzb3VyY2VYOjE2LjBmIHNvdXJjZVk6MTUuMGYgcHQ6cHRdOworICBbc2VsZiBhc3NlcnRQb2ludEVxdWFsc0V4cGVjdGVkWDoxNTAuMGYgZXhwZWN0ZWRZOjI4MC4wZiBzb3VyY2VYOjQuMGYgc291cmNlWTo5LjBmIHB0OnB0XTsKKyAgW3NlbGYgYXNzZXJ0UG9pbnRFcXVhbHNFeHBlY3RlZFg6Ny4xNTE2ODc2ZiBleHBlY3RlZFk6LTY0LjYwMTg1ZiBzb3VyY2VYOjAuNWYgc291cmNlWTowLjVmIHB0OnB0XTsKKyAgW3NlbGYgYXNzZXJ0UG9pbnRFcXVhbHNFeHBlY3RlZFg6MzI4LjA5MTE2ZiBleHBlY3RlZFk6MzM0LjE2Mzg1ZiBzb3VyY2VYOjUwLjBmIHNvdXJjZVk6NTAuMGYgcHQ6cHRdOworfQorCistICh2b2lkKWFzc2VydFBvaW50RXF1YWxzRXhwZWN0ZWRYOihmbG9hdClleHBlY3RlZFgKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFk6KGZsb2F0KWV4cGVjdGVkWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlWDooZmxvYXQpc291cmNlWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlWTooZmxvYXQpc291cmNlWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdDooWlhQZXJzcGVjdGl2ZVRyYW5zZm9ybSAqKXB0IHsKKyAgZmxvYXQgcG9pbnRzWzJdID0ge3NvdXJjZVgsIHNvdXJjZVl9OworICBbcHQgdHJhbnNmb3JtUG9pbnRzOnBvaW50cyBwb2ludHNMZW46Ml07CisgIFNUQXNzZXJ0RXF1YWxzV2l0aEFjY3VyYWN5KHBvaW50c1swXSwgZXhwZWN0ZWRYLCBFUFNJTE9OLCBAIkV4cGVjdGVkICVmIHRvIGVxdWFsICVmIiwgcG9pbnRzWzBdLCBleHBlY3RlZFgpOworICBTVEFzc2VydEVxdWFsc1dpdGhBY2N1cmFjeShwb2ludHNbMV0sIGV4cGVjdGVkWSwgRVBTSUxPTiwgQCJFeHBlY3RlZCAlZiB0byBlcXVhbCAlZiIsIHBvaW50c1sxXSwgZXhwZWN0ZWRZKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYU3RyaW5nVXRpbHNUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYU3RyaW5nVXRpbHNUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZWMxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jb21tb24vWlhTdHJpbmdVdGlsc1Rlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhTdHJpbmdVdGlsc1Rlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYU3RyaW5nVXRpbHNUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvY29tbW9uL1pYU3RyaW5nVXRpbHNUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjI5M2QKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jb21tb24vWlhTdHJpbmdVdGlsc1Rlc3RDYXNlLm0KQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhTdHJpbmdVdGlsc1Rlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFN0cmluZ1V0aWxzVGVzdENhc2UKKworLSAodm9pZCl0ZXN0U2hvcnRTaGlmdEpJU18xIHsKKyAgLy8gw4jDocOrw4jiiaDDtgorICBpbnQ4X3QgYnl0ZXNbNF0gPSB7IDB4OGIsIDB4ZTAsIDB4OGIsIDB4OWIgfTsKKyAgW3NlbGYgZG9UZXN0V2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDo0IGVuY29kaW5nOk5TU2hpZnRKSVNTdHJpbmdFbmNvZGluZ107Cit9CisKKy0gKHZvaWQpdGVzdFNob3J0SVNPODg1OTFfMSB7CisgIC8vIGLiiJrigKJkCisgIGludDhfdCBieXRlc1szXSA9IHsgMHg2MiwgMHhlNSwgMHg2NCB9OworICBbc2VsZiBkb1Rlc3RXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOjMgZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ107Cit9CisKKy0gKHZvaWQpdGVzdE1peGVkU2hpZnRKSVNfMSB7CisgIC8vIEhlbGxvIMOIw6HDqyEKKyAgaW50OF90IGJ5dGVzWzldID0geyAweDQ4LCAweDY1LCAweDZjLCAweDZjLCAweDZmLCAweDIwLCAweDhiLCAweGUwLCAweDIxIH07CisgIFtzZWxmIGRvVGVzdFdpdGhCeXRlczpieXRlcyBsZW5ndGg6OSBlbmNvZGluZzpOU1NoaWZ0SklTU3RyaW5nRW5jb2RpbmddOworfQorCistICh2b2lkKWRvVGVzdFdpdGhCeXRlczooaW50OF90ICopYnl0ZXMgbGVuZ3RoOihpbnQpbGVuZ3RoIGVuY29kaW5nOihOU1N0cmluZ0VuY29kaW5nKWVuY29kaW5nIHsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYU3RyaW5nVXRpbHMgZ3Vlc3NFbmNvZGluZzpieXRlcyBsZW5ndGg6bGVuZ3RoIGhpbnRzOm5pbF0sIGVuY29kaW5nLCBAIkVuY29kaW5ncyBkbyBub3QgbWF0Y2giKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvY29tbW9uL3JlZWRzb2xvbW9uL1JlZWRTb2xvbW9uVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9yZWVkc29sb21vbi9SZWVkU29sb21vblRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkOTRjYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9yZWVkc29sb21vbi9SZWVkU29sb21vblRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgUmVlZFNvbG9tb25UZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2NvbW1vbi9yZWVkc29sb21vbi9SZWVkU29sb21vblRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9jb21tb24vcmVlZHNvbG9tb24vUmVlZFNvbG9tb25UZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMGYzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9jb21tb24vcmVlZHNvbG9tb24vUmVlZFNvbG9tb25UZXN0Q2FzZS5tCkBAIC0wLDAgKzEsNTE2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJSZWVkU29sb21vblRlc3RDYXNlLmgiCisKK2NvbnN0IGludCBERUNPREVSX1JBTkRPTV9URVNUX0lURVJBVElPTlMgPSAzOworY29uc3QgaW50IERFQ09ERVJfVEVTVF9JVEVSQVRJT05TID0gMTA7Citjb25zdCBpbnQgUmVlZFNvbG9tb25UZXN0Q2FzZV9SQU5ET01fU0VFRCA9IDM3MzU5Mjg1NTk7CisKK0BpbXBsZW1lbnRhdGlvbiBSZWVkU29sb21vblRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdERhdGFNYXRyaXggeworICAvLyByZWFsIGxpZmUgdGVzdCBjYXNlcworICBpbnQgZGF0YVdvcmRzMVszXSA9IHsgMTQyLCAxNjQsIDE4NiB9OworICBpbnQgZWNXb3JkczFbNV0gPSB7IDExNCwgMjUsIDUsIDg4LCAxMDIgfTsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZTpbWlhHZW5lcmljR0YgRGF0YU1hdHJpeEZpZWxkMjU2XSBkYXRhV29yZHM6ZGF0YVdvcmRzMSBkYXRhV29yZHNMZW46MyBlY1dvcmRzOmVjV29yZHMxIGVjV29yZHNMZW46NV07CisKKyAgaW50IGRhdGFXb3JkczJbMzZdID0geworICAgIDB4NjksIDB4NzUsIDB4NzUsIDB4NzEsIDB4M0IsIDB4MzAsIDB4MzAsIDB4NjQsCisgICAgMHg3MCwgMHg2NSwgMHg2NiwgMHgyRiwgMHg2OCwgMHg3MCwgMHg3MCwgMHg2OCwKKyAgICAweDZELCAweDY2LCAweDJGLCAweDY0LCAweDcwLCAweDZFLCAweDMwLCAweDcxLAorICAgIDB4MzAsIDB4N0IsIDB4NzksIDB4NkEsIDB4NkYsIDB4NjgsIDB4MzAsIDB4ODEsCisgICAgMHhGMCwgMHg4OCwgMHgxRiwgMHhCNSB9OworICBpbnQgZWNXb3JkczJbMjRdID0geworICAgIDB4MUMsIDB4NjQsIDB4RUUsIDB4RUIsIDB4RDAsIDB4MUQsIDB4MDAsIDB4MDMsCisgICAgMHhGMCwgMHgxQywgMHhGMSwgMHhEMCwgMHg2RCwgMHgwMCwgMHg5OCwgMHhEQSwKKyAgICAweDgwLCAweDg4LCAweEJFLCAweEZGLCAweEI3LCAweEZBLCAweEE5LCAweDk1IH07CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGU6W1pYR2VuZXJpY0dGIERhdGFNYXRyaXhGaWVsZDI1Nl0gZGF0YVdvcmRzOmRhdGFXb3JkczIgZGF0YVdvcmRzTGVuOjM2IGVjV29yZHM6ZWNXb3JkczIgZWNXb3Jkc0xlbjoyNF07CisKKyAgLy8gc3ludGhldGljIHRlc3QgY2FzZXMKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZVJhbmRvbTpbWlhHZW5lcmljR0YgRGF0YU1hdHJpeEZpZWxkMjU2XSBkYXRhU2l6ZToxMCBlY1NpemU6MjQwXTsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZVJhbmRvbTpbWlhHZW5lcmljR0YgRGF0YU1hdHJpeEZpZWxkMjU2XSBkYXRhU2l6ZToxMjggZWNTaXplOjEyN107CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGVSYW5kb206W1pYR2VuZXJpY0dGIERhdGFNYXRyaXhGaWVsZDI1Nl0gZGF0YVNpemU6MjIwIGVjU2l6ZTozNV07Cit9CisKKy0gKHZvaWQpdGVzdFFSQ29kZSB7CisgIC8vIFRlc3QgY2FzZSBmcm9tIGV4YW1wbGUgZ2l2ZW4gaW4gSVNPIDE4MDA0LCBBbm5leCBJCisgIGludCBkYXRhV29yZHMxWzE2XSA9IHsKKyAgICAweDEwLCAweDIwLCAweDBDLCAweDU2LCAweDYxLCAweDgwLCAweEVDLCAweDExLAorICAgIDB4RUMsIDB4MTEsIDB4RUMsIDB4MTEsIDB4RUMsIDB4MTEsIDB4RUMsIDB4MTEgfTsKKyAgaW50IGVjV29yZHMxWzEwXSA9IHsKKyAgICAweEE1LCAweDI0LCAweEQ0LCAweEMxLCAweEVELCAweDM2LCAweEM3LCAweDg3LAorICAgIDB4MkMsIDB4NTUgfTsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZTpbWlhHZW5lcmljR0YgUXJDb2RlRmllbGQyNTZdIGRhdGFXb3JkczpkYXRhV29yZHMxIGRhdGFXb3Jkc0xlbjoxNiBlY1dvcmRzOmVjV29yZHMxIGVjV29yZHNMZW46MTBdOworCisgIGludCBkYXRhV29yZHMyWzMyXSA9IHsKKyAgICAweDcyLCAweDY3LCAweDJGLCAweDc3LCAweDY5LCAweDZCLCAweDY5LCAweDJGLAorICAgIDB4NEQsIDB4NjEsIDB4NjksIDB4NkUsIDB4NUYsIDB4NTAsIDB4NjEsIDB4NjcsCisgICAgMHg2NSwgMHgzQiwgMHgzQiwgMHgwMCwgMHhFQywgMHgxMSwgMHhFQywgMHgxMSwKKyAgICAweEVDLCAweDExLCAweEVDLCAweDExLCAweEVDLCAweDExLCAweEVDLCAweDExIH07CisgIGludCBlY1dvcmRzMlsxOF0gPSB7CisgICAgMHhEOCwgMHhCOCwgMHhFRiwgMHgxNCwgMHhFQywgMHhEMCwgMHhDQywgMHg4NSwKKyAgICAweDczLCAweDQwLCAweDBCLCAweEI1LCAweDVBLCAweEI4LCAweDhCLCAweDJFLAorICAgIDB4MDgsIDB4NjIgfTsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZTpbWlhHZW5lcmljR0YgUXJDb2RlRmllbGQyNTZdIGRhdGFXb3JkczpkYXRhV29yZHMyIGRhdGFXb3Jkc0xlbjozMiBlY1dvcmRzOmVjV29yZHMyIGVjV29yZHNMZW46MThdOworCisgIC8vIHJlYWwgbGlmZSB0ZXN0IGNhc2VzCisgIC8vIHN5bnRoZXRpYyB0ZXN0IGNhc2VzCisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGVSYW5kb206W1pYR2VuZXJpY0dGIFFyQ29kZUZpZWxkMjU2XSBkYXRhU2l6ZToxMCBlY1NpemU6MjQwXTsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZVJhbmRvbTpbWlhHZW5lcmljR0YgUXJDb2RlRmllbGQyNTZdIGRhdGFTaXplOjEyOCBlY1NpemU6MTI3XTsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZVJhbmRvbTpbWlhHZW5lcmljR0YgUXJDb2RlRmllbGQyNTZdIGRhdGFTaXplOjIyMCBlY1NpemU6MzVdOworfQorCistICh2b2lkKXRlc3RBenRlYyB7CisgIC8vIHJlYWwgbGlmZSB0ZXN0IGNhc2VzCisgIGludCBkYXRhV29yZHMxWzJdID0geyAweDUsIDB4NiB9OworICBpbnQgZWNXb3JkczFbNV0gPSB7IDB4MywgMHgyLCAweEIsIDB4QiwgMHg3IH07CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGU6W1pYR2VuZXJpY0dGIEF6dGVjUGFyYW1dIGRhdGFXb3JkczpkYXRhV29yZHMxIGRhdGFXb3Jkc0xlbjoyIGVjV29yZHM6ZWNXb3JkczEgZWNXb3Jkc0xlbjo1XTsKKworICBpbnQgZGF0YVdvcmRzMls0XSA9IHsgMHgwLCAweDAsIDB4MCwgMHg5IH07CisgIGludCBlY1dvcmRzMls2XSA9IHsgMHhBLCAweEQsIDB4OCwgMHg2LCAweDUsIDB4NiB9OworICBbc2VsZiB0ZXN0RW5jb2RlRGVjb2RlOltaWEdlbmVyaWNHRiBBenRlY1BhcmFtXSBkYXRhV29yZHM6ZGF0YVdvcmRzMiBkYXRhV29yZHNMZW46NCBlY1dvcmRzOmVjV29yZHMyIGVjV29yZHNMZW46Nl07CisKKyAgaW50IGRhdGFXb3JkczNbNF0gPSB7IDB4MiwgMHg4LCAweDgsIDB4NyB9OworICBpbnQgZWNXb3JkczNbNl0gPSB7IDB4RSwgMHhDLCAweEEsIDB4OSwgMHg2LCAweDggfTsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZTpbWlhHZW5lcmljR0YgQXp0ZWNQYXJhbV0gZGF0YVdvcmRzOmRhdGFXb3JkczMgZGF0YVdvcmRzTGVuOjQgZWNXb3JkczplY1dvcmRzMyBlY1dvcmRzTGVuOjZdOworCisgIGludCBkYXRhV29yZHM0WzEwXSA9IHsKKyAgICAweDksIDB4MzIsIDB4MSwgMHgyOSwgMHgyRiwgMHgyLCAweDI3LCAweDI1LCAweDEsIDB4MUIgfTsKKyAgaW50IGVjV29yZHM0WzExXSA9IHsKKyAgICAweDJDLCAweDIsIDB4RCwgMHhELCAweEEsIDB4MTYsIDB4MjgsIDB4OSwgMHgyMiwgMHhBLCAweDE0IH07CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGU6W1pYR2VuZXJpY0dGIEF6dGVjRGF0YTZdIGRhdGFXb3JkczpkYXRhV29yZHM0IGRhdGFXb3Jkc0xlbjoxMCBlY1dvcmRzOmVjV29yZHM0IGVjV29yZHNMZW46MTFdOworCisgIGludCBkYXRhV29yZHM1WzY5XSA9IHsKKyAgICAweEUwLCAweDg2LCAweDQyLCAweDk4LCAweEU4LCAweDRBLCAweDk2LCAweEM2LAorICAgIDB4QjksIDB4RjAsIDB4OEMsIDB4QTcsIDB4NEEsIDB4REEsIDB4RjgsIDB4Q0UsCisgICAgMHhCNywgMHhERSwgMHg4OCwgMHg2NCwgMHgyOSwgMHg4RSwgMHg4NCwgMHhBOSwKKyAgICAweDZDLCAweDZCLCAweDlGLCAweDA4LCAweENBLCAweDc0LCAweEFELCAweEFGLAorICAgIDB4OEMsIDB4RUIsIDB4N0MsIDB4MTAsIDB4QzgsIDB4NTMsIDB4MUQsIDB4MDksCisgICAgMHg1MiwgMHhEOCwgMHhENywgMHgzRSwgMHgxMSwgMHg5NCwgMHhFOSwgMHg1QiwKKyAgICAweDVGLCAweDE5LCAweEQ2LCAweEZCLCAweEQxLCAweDBDLCAweDg1LCAweDMxLAorICAgIDB4RDAsIDB4OTUsIDB4MkQsIDB4OEQsIDB4NzMsIDB4RTEsIDB4MTksIDB4NEUsCisgICAgMHg5NSwgMHhCNSwgMHhGMSwgMHg5RCwgMHg2RiB9OworICBpbnQgZWNXb3JkczVbNTFdID0geworICAgIDB4MzEsIDB4RDcsIDB4MDQsIDB4NDYsIDB4QjIsIDB4QzEsIDB4MDYsIDB4OTQsCisgICAgMHgxNywgMHhFNSwgMHgwQywgMHgyQiwgMHhBMywgMHg5OSwgMHgxNSwgMHg3RiwKKyAgICAweDE2LCAweDNDLCAweDY2LCAweEJBLCAweDMzLCAweEQ5LCAweEU4LCAweDg3LAorICAgIDB4ODYsIDB4QkIsIDB4NEIsIDB4MTUsIDB4NEUsIDB4NEEsIDB4REUsIDB4RDQsCisgICAgMHhFRCwgMHhBMSwgMHhGOCwgMHg0NywgMHgyQSwgMHg1MCwgMHhBNiwgMHhCQywKKyAgICAweDUzLCAweDdELCAweDI5LCAweEZFLCAweDA2LCAweDQ5LCAweEYzLCAweDczLAorICAgIDB4OUYsIDB4QzEsIDB4NzUgfTsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZTpbWlhHZW5lcmljR0YgQXp0ZWNEYXRhOF0gZGF0YVdvcmRzOmRhdGFXb3JkczUgZGF0YVdvcmRzTGVuOjY5IGVjV29yZHM6ZWNXb3JkczUgZWNXb3Jkc0xlbjo1MV07CisKKyAgaW50IGRhdGFXb3JkczZbMzMwXSA9IHsKKyAgICAweDE1QywgMHgxRTEsIDB4MkQ1LCAweDAyRSwgMHgwNDgsIDB4MUUyLCAweDAzNywgMHgwQ0QsCisgICAgMHgwMkUsIDB4MDU2LCAweDI2QSwgMHgyODEsIDB4MUMyLCAweDFBNiwgMHgyOTYsIDB4MDQ1LAorICAgIDB4MDQxLCAweDBBQSwgMHgwOTUsIDB4MkNFLCAweDAwMywgMHgzOEYsIDB4MkNELCAweDFBMiwKKyAgICAweDAzNiwgMHgxQUQsIDB4MDRFLCAweDA5MCwgMHgyNzEsIDB4MEQzLCAweDAyRSwgMHgwRDUsCisgICAgMHgyRDQsIDB4MDMyLCAweDJDQSwgMHgyODEsIDB4MEFBLCAweDA0RSwgMHgwMjQsIDB4MkQzLAorICAgIDB4Mjk2LCAweDI4MSwgMHgwRTIsIDB4MDhBLCAweDFBQSwgMHgyOEEsIDB4MjgwLCAweDA3QywKKyAgICAweDI4NiwgMHgwQTEsIDB4MUQwLCAweDFBRCwgMHgxNTQsIDB4MDMyLCAweDJDMiwgMHgxQzEsCisgICAgMHgxNDUsIDB4MDJCLCAweDJENCwgMHgyQjAsIDB4MDMzLCAweDJENSwgMHgyNzYsIDB4MUMxLAorICAgIDB4MjgyLCAweDEwQSwgMHgyQjUsIDB4MTU0LCAweDAwMywgMHgzODUsIDB4MjBGLCAweDBDNCwKKyAgICAweDAyRCwgMHgwNTAsIDB4MjY2LCAweDBENSwgMHgwMzMsIDB4MkQ1LCAweDI3NiwgMHgxQzEsCisgICAgMHgwRDQsIDB4MkEwLCAweDA4RiwgMHgwQzQsIDB4MDI0LCAweDIwRiwgMHgyRTIsIDB4MUFELAorICAgIDB4MTU0LCAweDAyRSwgMHgwNTYsIDB4MjZBLCAweDI4MSwgMHgwOTAsIDB4MUU1LCAweDE0RSwKKyAgICAweDBDRiwgMHgyQjYsIDB4MUMxLCAweDI4QSwgMHgyQTEsIDB4MDRFLCAweDBENSwgMHgwMDMsCisgICAgMHgzOTEsIDB4MTIyLCAweDI4NiwgMHgxQUQsIDB4MkQ0LCAweDAyOCwgMHgyNjIsIDB4MkVBLAorICAgIDB4MEEyLCAweDAwNCwgMHgxNzYsIDB4Mjk1LCAweDIwMSwgMHgwRDUsIDB4MDI0LCAweDIwRiwKKyAgICAweDExNiwgMHgwQzEsIDB4MDU2LCAweDA5NSwgMHgyMTMsIDB4MDA0LCAweDFFQSwgMHgyOEEsCisgICAgMHgwMkEsIDB4MjM0LCAweDJDRSwgMHgwMzcsIDB4MTU3LCAweDBEMywgMHgyNjIsIDB4MDI2LAorICAgIDB4MjYyLCAweDJBMCwgMHgwODYsIDB4MTA2LCAweDJBMSwgMHgxMjYsIDB4MUU1LCAweDI2NiwKKyAgICAweDI2QSwgMHgyQTEsIDB4MEU2LCAweDFBQSwgMHgyODEsIDB4MkI2LCAweDI3MSwgMHgxNTQsCisgICAgMHgwMkYsIDB4MEM0LCAweDAyRCwgMHgyMTMsIDB4MENFLCAweDAwMywgMHgzOEYsIDB4MkNELAorICAgIDB4MUEyLCAweDAzNiwgMHgxQjUsIDB4MjZBLCAweDA4NiwgMHgyODAsIDB4MDg2LCAweDFBQSwKKyAgICAweDJBMSwgMHgyMjYsIDB4MUFELCAweDBDRiwgMHgyQTYsIDB4MjkyLCAweDJDNiwgMHgwMjIsCisgICAgMHgxQUEsIDB4MjU2LCAweDBENSwgMHgwMkQsIDB4MDUwLCAweDI2NiwgMHgwRDUsIDB4MDA0LAorICAgIDB4MTc2LCAweDI5NSwgMHgyMDEsIDB4MEQzLCAweDA1NSwgMHgwMzEsIDB4MkNELCAweDJFQSwKKyAgICAweDFFMiwgMHgyNjEsIDB4MUVBLCAweDI4QSwgMHgwMDQsIDB4MTQ1LCAweDAyNiwgMHgxQTYsCisgICAgMHgxQzYsIDB4MUY1LCAweDJDRSwgMHgwMzQsIDB4MDUxLCAweDE0NiwgMHgxRTEsIDB4MEIwLAorICAgIDB4MUIwLCAweDI2MSwgMHgwRDUsIDB4MDI1LCAweDE0MiwgMHgxQzAsIDB4MDdDLCAweDBCMCwKKyAgICAweDFFNiwgMHgwODEsIDB4MDQ0LCAweDAyRiwgMHgyQ0YsIDB4MDgxLCAweDI5MCwgMHgwQTIsCisgICAgMHgxQTYsIDB4MjgxLCAweDBDRCwgMHgxNTUsIDB4MDMxLCAweDFBMiwgMHgwODYsIDB4MjYyLAorICAgIDB4MkExLCAweDBDRCwgMHgwQ0EsIDB4MEU2LCAweDFFNSwgMHgwMDMsIDB4Mzk0LCAweDBDNSwKKyAgICAweDAzMCwgMHgyNkYsIDB4MDUzLCAweDBDMSwgMHgxQjYsIDB4MDk1LCAweDJENCwgMHgwMzAsCisgICAgMHgyNkYsIDB4MDUzLCAweDBDMCwgMHgwN0MsIDB4MkU2LCAweDI5NSwgMHgxNDMsIDB4MkNELAorICAgIDB4MkNFLCAweDAzNywgMHgwQzksIDB4MTQ0LCAweDJDRCwgMHgwNDAsIDB4MDhFLCAweDA1NCwKKyAgICAweDI4MiwgMHgwMjIsIDB4MkExLCAweDIyOSwgMHgwNTMsIDB4MEQ1LCAweDI2MiwgMHgwMjcsCisgICAgMHgyNkEsIDB4MUU4LCAweDE0RCwgMHgxQTIsIDB4MDA0LCAweDI2QSwgMHgyOTYsIDB4MjgxLAorICAgIDB4MTc2LCAweDI5NSwgMHgyMDEsIDB4MEUyLCAweDJDNCwgMHgxNDMsIDB4MkQ0LCAweDAyNiwKKyAgICAweDI2MiwgMHgyQTAsIDB4MDhGLCAweDBDNCwgMHgwMzEsIDB4MjEzLCAweDJCNSwgMHgxNTUsCisgICAgMHgyMTMsIDB4MDJGLCAweDE0MywgMHgxMjEsIDB4MkE2LCAweDFBRCwgMHgyRDQsIDB4MDM0LAorICAgIDB4MEM1LCAweDAyNiwgMHgyOTUsIDB4MDAzLCAweDM5NiwgMHgyQTEsIDB4MTc2LCAweDI5NSwKKyAgICAweDIwMSwgMHgwQUEsIDB4MDRFLCAweDAwNCwgMHgxQjAsIDB4MDcwLCAweDI3NSwgMHgxNTQsCisgICAgMHgwMjYsIDB4MkMxLCAweDJCMywgMHgxNTQsIDB4MkFBLCAweDI1NiwgMHgwQzEsIDB4MDQ0LAorICAgIDB4MDA0LCAweDIzRiB9OworICBpbnQgZWNXb3JkczZbMTQwXSA9IHsKKyAgICAweDM3OSwgMHgwOTksIDB4MzQ4LCAweDAxMCwgMHgwOTAsIDB4MTk2LCAweDA5QywgMHgxRkYsCisgICAgMHgxQjAsIDB4MzJELCAweDI0NCwgMHgwREUsIDB4MjAxLCAweDM4NiwgMHgxNjMsIDB4MTFGLAorICAgIDB4MzlCLCAweDM0NCwgMHgzRkUsIDB4MDJGLCAweDE4OCwgMHgxMTMsIDB4M0Q5LCAweDEwMiwKKyAgICAweDA0QSwgMHgyRTEsIDB4MUQxLCAweDE4RSwgMHgwNzcsIDB4MjYyLCAweDI0MSwgMHgyMEQsCisgICAgMHgxQjgsIDB4MTFELCAweDBEMCwgMHgwQTUsIDB4MjlDLCAweDI0RCwgMHgzRTcsIDB4MDA2LAorICAgIDB4MkQwLCAweDFCNywgMHgzMzcsIDB4MTc4LCAweDBGMSwgMHgxRTAsIDB4MDBCLCAweDAxRSwKKyAgICAweDBEQSwgMHgxQzYsIDB4MkQ5LCAweDAwRCwgMHgyOEIsIDB4MzRBLCAweDI1MiwgMHgyN0EsCisgICAgMHgwNTcsIDB4MENBLCAweDJDMiwgMHgyRTQsIDB4M0E2LCAweDBFMywgMHgyMkIsIDB4MzA3LAorICAgIDB4MTc0LCAweDI5MiwgMHgxMEMsIDB4MUVELCAweDJGRCwgMHgyRDQsIDB4MEE3LCAweDA1MSwKKyAgICAweDM0RiwgMHgwN0EsIDB4MUQ1LCAweDAxRCwgMHgyMkUsIDB4MkMyLCAweDFERiwgMHgwOEYsCisgICAgMHgxMDUsIDB4M0ZFLCAweDI4NiwgMHgyQTIsIDB4M0IxLCAweDEzMSwgMHgyODUsIDB4MzYyLAorICAgIDB4MzE1LCAweDEzQywgMHgwRjksIDB4MUEyLCAweDI4RCwgMHgyNDYsIDB4MUIzLCAweDEyQywKKyAgICAweDJBRCwgMHgwRjgsIDB4MjIyLCAweDBFQywgMHgzOUYsIDB4MzU4LCAweDAxNCwgMHgyMjksCisgICAgMHgwQzgsIDB4MzYwLCAweDFDMiwgMHgwMzEsIDB4MDk4LCAweDA0MSwgMHgzRTQsIDB4MDQ2LAorICAgIDB4MzMyLCAweDMxOCwgMHgyRTMsIDB4MjRFLCAweDNFMiwgMHgxRTEsIDB4MEJFLCAweDIzOSwKKyAgICAweDMwNiwgMHgzQTUsIDB4MzUyLCAweDM1MSwgMHgyNzUsIDB4MEVELCAweDA0NSwgMHgyMjksCisgICAgMHgwQkYsIDB4MDVELCAweDI1MywgMHgxQkUsIDB4MDJFLCAweDM1QSwgMHgwRTQsIDB4MkU5LAorICAgIDB4MTdBLCAweDE2NiwgMHgwM0MsIDB4MDA3IH07CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGU6W1pYR2VuZXJpY0dGIEF6dGVjRGF0YTEwXSBkYXRhV29yZHM6ZGF0YVdvcmRzNiBkYXRhV29yZHNMZW46MzMwIGVjV29yZHM6ZWNXb3JkczYgZWNXb3Jkc0xlbjoxNDBdOworCisgIGludCBkYXRhV29yZHM3WzEyMjldID0geworICAgIDB4NTcxLCAweEUxQiwgMHg1NDIsIDB4RTEyLCAweDFFMiwgMHgwREMsIDB4Q0QwLCAweEI4NSwKKyAgICAweDY5QSwgMHhBODEsIDB4NzA5LCAweEE2QSwgMHg1ODQsIDB4NTEwLCAweDRBQSwgMHgyNTYsCisgICAgMHhDRTAsIDB4MEY4LCAweEZCMywgMHg1QTIsIDB4MEQ5LCAweEFEMSwgMHgzODksIDB4MDlDLAorICAgIDB4NEQzLCAweDBCOCwgMHhENUIsIDB4NTAzLCAweDJCMiwgMHhBODEsIDB4MkE4LCAweDRFMCwKKyAgICAweDkyRCwgMHgzQTUsIDB4QTgxLCAweDM4OCwgMHg4QTYsIDB4QUE4LCAweEFBMCwgMHgwN0MsCisgICAgMHhBMTgsIDB4QTE3LCAweDQxQSwgMHhENTUsIDB4MDMyLCAweEIwOSwgMHhDMTUsIDB4MTQyLAorICAgIDB4QkI1LCAweDJCMCwgMHgwQ0UsIDB4RDU5LCAweEQ5QywgMHgxQTAsIDB4OTBBLCAweEFENSwKKyAgICAweDU0MCwgMHgwRjgsIDB4NTgzLCAweENDNCwgMHgwQjQsIDB4NTA5LCAweDk4RCwgMHg1MEMsCisgICAgMHhFRDUsIDB4OUQ5LCAweEMxMywgMHg1MkEsIDB4MDIzLCAweENDNCwgMHgwOTIsIDB4MEZCLAorICAgIDB4ODlBLCAweEQ1NSwgMHgwMkUsIDB4MTVBLCAweDZBQSwgMHgwNDksIDB4MDc5LCAweDU0RSwKKyAgICAweDMzRSwgMHhCNjcsIDB4MDY4LCAweEFBOCwgMHg0NEUsIDB4MzU0LCAweDAzRSwgMHg0NTIsCisgICAgMHgyQTEsIDB4OUFELCAweEI1MCwgMHgyODksIDB4OEFFLCAweEEyOCwgMHg4MDQsIDB4NURBLAorICAgIDB4OTU4LCAweDA0RCwgMHg1MDksIDB4MjBGLCAweDQ1OCwgMHhDMTEsIDB4NTg5LCAweDU4NCwKKyAgICAweEMwNCwgMHg3QUEsIDB4OEEwLCAweEFBMywgMHg0QjMsIDB4ODM3LCAweDU1QywgMHhEMzksCisgICAgMHg4ODIsIDB4Njk4LCAweEFBMCwgMHgyMTksIDB4MDZBLCAweDg1MiwgMHg2NzksIDB4NjY2LAorICAgIDB4OUFBLCAweEExMywgMHg5OUEsIDB4QUEwLCAweDZCNiwgMHg5QzUsIDB4NTQwLCAweEJDQywKKyAgICAweDQwQiwgMHg2MTMsIDB4MzM4LCAweDAzRSwgMHgzRUMsIDB4RDY4LCAweDgzNiwgMHg2RDYsCisgICAgMHg2QTIsIDB4MUE4LCAweDAyMSwgMHg5QUEsIDB4QTg2LCAweDI2NiwgMHhCNEMsIDB4RkE5LAorICAgIDB4QTkyLCAweEIxOCwgMHgyMjYsIDB4QUE1LCAweDYzNSwgMHg0MkQsIDB4MTQyLCAweDY2MywKKyAgICAweDU0MCwgMHg0NUQsIDB4QTk1LCAweDgwNCwgMHhEMzEsIDB4NTQzLCAweDFCMywgMHg2RUEsCisgICAgMHg3OEEsIDB4NjE3LCAweEFBOCwgMHhBMDEsIDB4MTQ1LCAweDA5OSwgMHhBNjcsIDB4MTlGLAorICAgIDB4NUIzLCAweDgzNCwgMHgxNDUsIDB4NDY3LCAweDg0QiwgMHgwNkMsIDB4MjYxLCAweDM1NCwKKyAgICAweDI1NSwgMHgwOUMsIDB4MDFGLCAweDBCMCwgMHg3OTgsIDB4ODExLCAweDEwMiwgMHhGQjMsCisgICAgMHhDODEsIDB4QTQwLCAweEEyNiwgMHg5QTgsIDB4MTMzLCAweDU1NSwgMHgwQzUsIDB4QTIyLAorICAgIDB4MUE2LCAweDJBOCwgMHg0Q0QsIDB4MzI4LCAweEU2NywgMHg5NDAsIDB4M0U1LCAweDBDNSwKKyAgICAweDBDMiwgMHg2RjEsIDB4NENDLCAweDE2RCwgMHg4OTUsIDB4QjUwLCAweDMwOSwgMHhCQzUsCisgICAgMHgzMzAsIDB4MDdDLCAweEI5QSwgMHg5NTUsIDB4MEVDLCAweERCMywgMHg4MzcsIDB4MzI1LAorICAgIDB4NDRCLCAweDM0NCwgMHgwMjMsIDB4ODU0LCAweEEwOCwgMHgyMkEsIDB4ODYyLCAweDkxNCwKKyAgICAweENENSwgMHg5ODgsIDB4Mjc5LCAweEE5RSwgMHg4NTMsIDB4NUEyLCAweDAxMiwgMHg2QUEsCisgICAgMHg1QTgsIDB4MTVELCAweEE5NSwgMHg4MDQsIDB4RTJCLCAweDExNCwgMHgzQjUsIDB4MDI2LAorICAgIDB4OThBLCAweEEwMiwgMHgzQ0MsIDB4NDBDLCAweDYxMywgMHhBRDUsIDB4NTU4LCAweDRDMiwKKyAgICAweEY1MCwgMHhEMjEsIDB4QTk5LCAweEFEQiwgMHg1MDMsIDB4NDMxLCAweDQyNiwgMHhBNTQsCisgICAgMHgwM0UsIDB4NUFBLCAweDE1RCwgMHhBOTUsIDB4ODA0LCAweEFBMSwgMHgzODAsIDB4NDZDLAorICAgIDB4MDcwLCAweDlENSwgMHg1NDAsIDB4OUFDLCAweDFBQywgMHhENTQsIDB4QUFBLCAweDU2MywKKyAgICAweDA0NCwgMHg0MDEsIDB4MjIwLCAweDlGMSwgMHg0RjAsIDB4REFBLCAweDE3MCwgMHg5MEYsCisgICAgMHgxMDYsIDB4RTY2LCAweDg1QywgMHgyQjQsIDB4RDU0LCAweDBCOCwgMHg0RDMsIDB4NTJDLAorICAgIDB4MjI4LCAweDgyNSwgMHg1MTIsIDB4QjY3LCAweDAwNywgMHhDN0QsIDB4OUFELCAweDEwNiwKKyAgICAweENENiwgMHg4OUMsIDB4NDg0LCAweEUyNiwgMHg5ODUsIDB4QzZBLCAweERBOCwgMHgxOTUsCisgICAgMHg5NTQsIDB4MDk1LCAweDQyNywgMHgwNDksIDB4NjlELCAweDJENCwgMHgwOUMsIDB4NDQ1LAorICAgIDB4MzU1LCAweDQ1NSwgMHgwMDMsIDB4RTUwLCAweEM1MCwgMHhCQTAsIDB4RDZBLCAweEE4MSwKKyAgICAweDk1OCwgMHg0RTAsIDB4QThBLCAweDE1RCwgMHhBOTUsIDB4ODA2LCAweDc2QSwgMHhDRUMsCisgICAgMHhFMEQsIDB4MDQ4LCAweDU1NiwgMHhBQUEsIDB4MDA3LCAweEMyQywgMHgxRTYsIDB4MjA1LAorICAgIDB4QTI4LCAweDRDQywgMHg2QTgsIDB4Njc2LCAweEFDRSwgMHhDRTAsIDB4OUE5LCAweDUwMSwKKyAgICAweDFFNiwgMHgyMDQsIDB4OTA3LCAweERDNCwgMHhENkEsIDB4QTgxLCAweDcwQSwgMHhEMzUsCisgICAgMHg1MDIsIDB4NDgzLCAweENBQSwgMHg3MTksIDB4RjVCLCAweDM4MywgMHg0NTUsIDB4NDIyLAorICAgIDB4NzFBLCAweEEwMSwgMHhGMjIsIDB4OTE1LCAweDBDRCwgMHg2REEsIDB4ODE0LCAweDRDNSwKKyAgICAweDc1MSwgMHg0NDAsIDB4MjJFLCAweEQ0QSwgMHhDMDIsIDB4NkE4LCAweDQ5MCwgMHg3QTIsCisgICAgMHhDNjAsIDB4OEFDLCAweDRBQywgMHgyNjAsIDB4MjNELCAweDU0NSwgMHgwNTUsIDB4MUE1LAorICAgIDB4OUMxLCAweEJBQSwgMHhFNjksIDB4Q0M0LCAweDEzNCwgMHhDNTUsIDB4MDEwLCAweEM4MywKKyAgICAweDU0MiwgMHg5MzMsIDB4Q0IzLCAweDM0RCwgMHg1NTAsIDB4OUNDLCAweEQ1NSwgMHgwMzUsCisgICAgMHhCNEUsIDB4MkFBLCAweDA1RSwgMHg2MjAsIDB4NUIwLCAweDk5OSwgMHhDMDEsIDB4RjFGLAorICAgIDB4NjZCLCAweDQ0MSwgMHhCMzYsIDB4QjM1LCAweDEwRCwgMHg0MDEsIDB4MENELCAweDU1NCwKKyAgICAweDMxMywgMHgzNUEsIDB4NjdELCAweDRENCwgMHg5NTgsIDB4QzExLCAweDM1NSwgMHgyQjEsCisgICAgMHhBQTEsIDB4NjhBLCAweDEzMywgMHgxQUEsIDB4MDIyLCAweEVENCwgMHhBQzAsIDB4MjY5LAorICAgIDB4OEFBLCAweDE4RCwgMHg5QjcsIDB4NTNDLCAweDUzMCwgMHhCRDUsIDB4NDUwLCAweDA4QSwKKyAgICAweDI4NCwgMHhDRDMsIDB4MzhDLCAweEZBRCwgMHg5QzEsIDB4QTBBLCAweDJBMywgMHgzQzIsCisgICAgMHg1ODMsIDB4NjEzLCAweDA5QSwgMHhBMTIsIDB4QTg0LCAweEUwMCwgMHhGODUsIDB4ODNDLAorICAgIDB4QzQwLCAweDg4OCwgMHgxN0QsIDB4OUU0LCAweDBEMiwgMHgwNTEsIDB4MzRELCAweDQwOSwKKyAgICAweDlBQSwgMHhBODYsIDB4MkQxLCAweDEwRCwgMHgzMTUsIDB4NDI2LCAweDY5OSwgMHg0NzMsCisgICAgMHgzQ0EsIDB4MDFGLCAweDI4NiwgMHgyODYsIDB4MTM3LCAweDhBNiwgMHg2MEIsIDB4NkM0LAorICAgIDB4QURBLCAweDgxOCwgMHg0REUsIDB4Mjk5LCAweDgwMywgMHhFNUMsIDB4RDRBLCAweEE4NywKKyAgICAweDY2RCwgMHg5QzEsIDB4Qjk5LCAweDJBMiwgMHg1OUEsIDB4MjAxLCAweDFDMiwgMHhBNTAsCisgICAgMHg0MTEsIDB4NTQzLCAweDE0OCwgMHhBNjYsIDB4QUNDLCAweDQxMywgMHhDRDQsIDB4RjQyLAorICAgIDB4OUFELCAweDEwMCwgMHg5MzUsIDB4NTJELCAweDQwQSwgMHhFRDQsIDB4QUMwLCAweDI3MSwKKyAgICAweDU4OCwgMHhBMUQsIDB4QTgxLCAweDM0QywgMHg1NTAsIDB4MTFFLCAweDYyMCwgMHg2MzAsCisgICAgMHg5RDYsIDB4QUFBLCAweEMyNiwgMHgxN0EsIDB4ODY5LCAweDBENCwgMHhDRDYsIDB4REE4LAorICAgIDB4MUExLCAweDhBMSwgMHgzNTIsIDB4QTAxLCAweEYyRCwgMHg1MEEsIDB4RUQ0LCAweEFDMCwKKyAgICAweDI1NSwgMHgwOUMsIDB4MDIzLCAweDYwMywgMHg4NEUsIDB4QUFBLCAweDA0RCwgMHg2MEQsCisgICAgMHg2NkEsIDB4QTU1LCAweDUyQiwgMHgxODIsIDB4MjIwLCAweDA5MSwgMHgwMEYsIDB4OEE3LAorICAgIDB4ODZELCAweDUwQiwgMHg4NDgsIDB4Nzg4LCAweDM3MywgMHgzNDIsIDB4RTE1LCAweEE2QSwKKyAgICAweEEwNSwgMHhDMjYsIDB4OUE5LCAweDYxMSwgMHg0NDEsIDB4MkE4LCAweDk1QiwgMHgzODAsCisgICAgMHgzRTMsIDB4RUNELCAweDY4OCwgMHgzNjYsIDB4QjQ0LCAweEUyNCwgMHgyNzEsIDB4MzRDLAorICAgIDB4MkUzLCAweDU2RCwgMHg0MEMsIDB4QUNBLCAweEEwNCwgMHhBQTEsIDB4MzgyLCAweDRCNCwKKyAgICAweEU5NiwgMHhBMDQsIDB4RTIyLCAweDI5QSwgMHhBQTIsIDB4QTgwLCAweDFGMiwgMHg4NjIsCisgICAgMHg4NUQsIDB4MDZCLCAweDU1NCwgMHgwQ0EsIDB4QzI3LCAweDA1NCwgMHg1MEEsIDB4RUQ0LAorICAgIDB4QUMwLCAweDMzQiwgMHg1NjcsIDB4NjcwLCAweDY4MiwgMHg0MkEsIDB4QjU1LCAweDUwMCwKKyAgICAweDNFMSwgMHg2MEYsIDB4MzEwLCAweDJEMSwgMHg0MjYsIDB4NjM1LCAweDQzMywgMHhCNTYsCisgICAgMHg3NjcsIDB4MDRELCAweDRBOCwgMHgwOEYsIDB4MzEwLCAweDI0OCwgMHgzRUUsIDB4MjZCLAorICAgIDB4NTU0LCAweDBCOCwgMHg1NjksIDB4QUE4LCAweDEyNCwgMHgxRTUsIDB4NTM4LCAweENGQSwKKyAgICAweEQ5QywgMHgxQTIsIDB4QUExLCAweDEzOCwgMHhENTAsIDB4MEY5LCAweDE0OCwgMHhBODYsCisgICAgMHg2QjYsIDB4RDQwLCAweEEyNiwgMHgyQkEsIDB4OEEyLCAweDAxMSwgMHg3NkEsIDB4NTYwLAorICAgIDB4MTM1LCAweDQyNCwgMHg4M0QsIDB4MTYzLCAweDA0NSwgMHg2MjUsIDB4NjEzLCAweDAxMSwKKyAgICAweEVBQSwgMHgyODIsIDB4QThELCAweDJDRSwgMHgwREQsIDB4NTczLCAweDRFNiwgMHgyMDksCisgICAgMHhBNjIsIDB4QTgwLCAweDg2NCwgMHgxQUEsIDB4MTQ5LCAweDlFNSwgMHg5OUEsIDB4NkFBLAorICAgIDB4ODRFLCAweDY2QSwgMHhBODEsIDB4QURBLCAweDcxNSwgMHg1MDIsIDB4RjMxLCAweDAyRCwKKyAgICAweDg0QywgMHhDRTAsIDB4MEY4LCAweEZCMywgMHg1QTIsIDB4MEQ5LCAweEI1OSwgMHhBODgsCisgICAgMHg2QTAsIDB4MDg2LCAweDZBQSwgMHhBMTgsIDB4OTlBLCAweEQzMywgMHhFQTYsIDB4QTRBLAorICAgIDB4QzYwLCAweDg5QSwgMHhBOTUsIDB4OEQ1LCAweDBCNCwgMHg1MDksIDB4OThELCAweDUwMSwKKyAgICAweDE3NiwgMHhBNTYsIDB4MDEzLCAweDRDNSwgMHg1MEMsIDB4NkNELCAweEJBOSwgMHhFMjksCisgICAgMHg4NUUsIDB4QUEyLCAweDgwNCwgMHg1MTQsIDB4MjY2LCAweDk5QywgMHg2N0QsIDB4NkNFLAorICAgIDB4MEQwLCAweDUxNSwgMHgxOUUsIDB4MTJDLCAweDFCMCwgMHg5ODQsIDB4RDUwLCAweDk1NCwKKyAgICAweDI3MCwgMHgwN0MsIDB4MkMxLCAweEU2MiwgMHgwNDQsIDB4NDBCLCAweEVDRiwgMHgyMDYsCisgICAgMHg5MDIsIDB4ODlBLCAweDZBMCwgMHg0Q0QsIDB4NTU0LCAweDMxNiwgMHg4ODgsIDB4Njk4LAorICAgIDB4QUExLCAweDMzNCwgMHhDQTMsIDB4OTlFLCAweDUwMCwgMHhGOTQsIDB4MzE0LCAweDMwOSwKKyAgICAweEJDNSwgMHgzMzAsIDB4NUI2LCAweDI1NiwgMHhENDAsIDB4QzI2LCAweEYxNCwgMHhDQzAsCisgICAgMHgxRjIsIDB4RTZBLCAweDU1NCwgMHgzQjMsIDB4NkNFLCAweDBEQywgMHhDOTUsIDB4MTJDLAorICAgIDB4RDEwLCAweDA4RSwgMHgxNTIsIDB4ODIwLCAweDhBQSwgMHgxOEEsIDB4NDUzLCAweDM1NiwKKyAgICAweDYyMCwgMHg5RTYsIDB4QTdBLCAweDE0RCwgMHg2ODgsIDB4MDQ5LCAweEFBOSwgMHg2QTAsCisgICAgMHg1NzYsIDB4QTU2LCAweDAxMywgMHg4QUMsIDB4NDUwLCAweEVENCwgMHgwOUEsIDB4NjJBLAorICAgIDB4ODA4LCAweEYzMSwgMHgwMzEsIDB4ODRFLCAweEI1NSwgMHg1NjEsIDB4MzBCLCAweEQ0MywKKyAgICAweDQ4NiwgMHhBNjYsIDB4QjZELCAweDQwRCwgMHgwQzUsIDB4MDlBLCAweDk1MCwgMHgwRjksCisgICAgMHg2QTgsIDB4NTc2LCAweEE1NiwgMHgwMTIsIDB4QTg0LCAweEUwMSwgMHgxQjAsIDB4MUMyLAorICAgIDB4NzU1LCAweDUwMiwgMHg2QjAsIDB4NkIzLCAweDU1MiwgMHhBQTksIDB4NThDLCAweDExMSwKKyAgICAweDAwNCwgMHg4ODIsIDB4N0M1LCAweDNDMywgMHg2QTgsIDB4NUMyLCAweDQzQywgMHg0MUIsCisgICAgMHg5OUEsIDB4MTcwLCAweEFEMywgMHg1NTAsIDB4MkUxLCAweDM0RCwgMHg0QjAsIDB4OEEyLAorICAgIDB4MDk1LCAweDQ0QSwgMHhEOUMsIDB4MDFGLCAweDFGNiwgMHg2QjQsIDB4NDFCLCAweDM1QSwKKyAgICAweDI3MSwgMHgyMTMsIDB4ODlBLCAweDYxNywgMHgxQUIsIDB4NkEwLCAweDY1NiwgMHg1NTAsCisgICAgMHgyNTUsIDB4MDlDLCAweDEyNSwgMHhBNzQsIDB4QjUwLCAweDI3MSwgMHgxMTQsIDB4RDU1LAorICAgIDB4MTU0LCAweDAwRiwgMHg5NDMsIDB4MTQyLCAweEU4MywgMHg1QUEsIDB4QTA2LCAweDU2MSwKKyAgICAweDM4MiwgMHhBMjgsIDB4NTc2LCAweEE1NiwgMHgwMTksIDB4REFCLCAweDNCMywgMHg4MzQsCisgICAgMHgxMjEsIDB4NTVBLCAweEFBOCwgMHgwMUYsIDB4MEIwLCAweDc5OCwgMHg4MTYsIDB4OEExLAorICAgIDB4MzMxLCAweEFBMSwgMHg5REEsIDB4QjNCLCAweDM4MiwgMHg2QTUsIDB4NDA0LCAweDc5OCwKKyAgICAweDgxMiwgMHg0MUYsIDB4NzEzLCAweDVBQSwgMHhBMDUsIDB4QzJCLCAweDRENSwgMHg0MDksCisgICAgMHgyMEYsIDB4MkE5LCAweEM2NywgMHhENkMsIDB4RTBELCAweDE1NSwgMHgwODksIDB4QzZBLAorICAgIDB4ODA3LCAweEM4QSwgMHg0NTQsIDB4MzM1LCAweEI2QSwgMHgwNTEsIDB4MzE1LCAweEQ0NSwKKyAgICAweDEwMCwgMHg4QkIsIDB4NTJCLCAweDAwOSwgMHhBQTEsIDB4MjQxLCAweEU4QiwgMHgxODIsCisgICAgMHgyQjEsIDB4MkIwLCAweDk4MCwgMHg4RjUsIDB4NTE0LCAweDE1NCwgMHg2OTYsIDB4NzA2LAorICAgIDB4RUFCLCAweDlBNywgMHgzMTAsIDB4NEQzLCAweDE1NCwgMHgwNDMsIDB4MjBELCAweDUwQSwKKyAgICAweDRDRiwgMHgyQ0MsIDB4RDM1LCAweDU0MiwgMHg3MzMsIDB4NTU0LCAweDBENiwgMHhEMzgsCisgICAgMHhBQTgsIDB4MTc5LCAweDg4MSwgMHg2QzIsIDB4NjY3LCAweDAwNywgMHhDN0QsIDB4OUFELAorICAgIDB4MTA2LCAweENEQSwgMHhDRDQsIDB4NDM1LCAweDAwNCwgMHgzMzUsIDB4NTUwLCAweEM0QywKKyAgICAweEQ2OSwgMHg5RjUsIDB4MzUyLCAweDU2MywgMHgwNDQsIDB4RDU0LCAweEFDNiwgMHhBODUsCisgICAgMHhBMjgsIDB4NENDLCAweDZBOCwgMHgwOEIsIDB4QjUyLCAweEIwMCwgMHg5QTYsIDB4MkE4LAorICAgIDB4NjM2LCAweDZERCwgMHg0RjEsIDB4NEMyLCAweEY1NSwgMHgxNDAsIDB4MjI4LCAweEExMywKKyAgICAweDM0QywgMHhFMzMsIDB4RUI2LCAweDcwNiwgMHg4MjgsIDB4QThDLCAweEYwOSwgMHg2MEQsCisgICAgMHg4NEMsIDB4MjZBLCAweDg0QSwgMHhBMTMsIDB4ODAzLCAweEUxNiwgMHgwRjMsIDB4MTAyLAorICAgIDB4MjIwLCAweDVGNiwgMHg3OTAsIDB4MzQ4LCAweDE0NCwgMHhEMzUsIDB4MDI2LCAweDZBQSwKKyAgICAweEExOCwgMHhCNDQsIDB4NDM0LCAweEM1NSwgMHgwOTksIDB4QTY1LCAweDFDQywgMHhGMjgsCisgICAgMHgwN0MsIDB4QTE4LCAweEExOCwgMHg0REUsIDB4Mjk5LCAweDgyRCwgMHhCMTIsIDB4QjZBLAorICAgIDB4MDYxLCAweDM3OCwgMHhBNjYsIDB4MDBGLCAweDk3MywgMHg1MkEsIDB4QTFELCAweDlCNiwKKyAgICAweDcwNiwgMHhFNjQsIDB4QTg5LCAweDY2OCwgMHg4MDQsIDB4NzBBLCAweDk0MSwgMHgwNDUsCisgICAgMHg1MEMsIDB4NTIyLCAweDk5QSwgMHhCMzEsIDB4MDRGLCAweDM1MywgMHhEMEEsIDB4NkI0LAorICAgIDB4NDAyLCAweDRENSwgMHg0QjUsIDB4MDJCLCAweEI1MiwgMHhCMDAsIDB4OUM1LCAweDYyMiwKKyAgICAweDg3NiwgMHhBMDQsIDB4RDMxLCAweDU0MCwgMHg0NzksIDB4ODgxLCAweDhDMiwgMHg3NUEsCisgICAgMHhBQUIsIDB4MDk4LCAweDVFQSwgMHgxQTQsIDB4MzUzLCAweDM1QiwgMHg2QTAsIDB4Njg2LAorICAgIDB4Mjg0LCAweEQ0QSwgMHg4MDcsIDB4Q0I1LCAweDQyQiwgMHhCNTIsIDB4QjAwLCAweDk1NCwKKyAgICAweDI3MCwgMHgwOEQsIDB4ODBFLCAweDEzQSwgMHhBQTgsIDB4MTM1LCAweDgzNSwgMHg5QUEsCisgICAgMHg4MDEsIDB4RjE0LCAweEYwRCwgMHhBQTEsIDB4NzA5LCAweDBGMSwgMHgwNkUsIDB4NjY4LAorICAgIDB4NUMyLCAweEI0RCwgMHg1NDAsIDB4Qjg0LCAweEQzNSwgMHgyQzIsIDB4Mjg4LCAweDI1NSwKKyAgICAweDEyQiwgMHg2NzAsIDB4MDdDLCAweDdEOSwgMHhBRDEsIDB4MDZDLCAweEQ2OCwgMHg5QzQsCisgICAgMHg4NEUsIDB4MjY5LCAweDg1QywgMHg2QUQsIDB4QTgxLCAweDk1OSwgMHg1NDAsIDB4OTU0LAorICAgIDB4MjcwLCAweDQ5NiwgMHg5RDIsIDB4RDQwLCAweDlDNCwgMHg0NTMsIDB4NTU0LCAweDU1MCwKKyAgICAweDAzRSwgMHg1MEMsIDB4NTBCLCAweEEwRCwgMHg2QUEsIDB4ODE5LCAweDU4NCwgMHhFMEEsCisgICAgMHg4QTEsIDB4NURBLCAweDk1OCwgMHgwNjcsIDB4NkFDLCAweEVDRSwgMHgwRDAsIDB4NDg1LAorICAgIDB4NTZBLCAweEFBMCwgMHgwN0MsIDB4MkMxLCAweEU2MiwgMHgwNUEsIDB4Mjg0LCAweENDNiwKKyAgICAweEE4NiwgMHg3NkEsIDB4Q0VDLCAweEUwOSwgMHhBOTUsIDB4MDExLCAweEU2MiwgMHgwNDksCisgICAgMHgwN0QsIDB4QzRELCAweDZBQSwgMHg4MTcsIDB4MEFELCAweDM1NSwgMHgwMjQsIDB4ODNDLAorICAgIDB4QUE3LCAweDE5RiwgMHg1QjMsIDB4ODM0LCAweDU1NCwgMHgyMjcsIDB4MUFBLCAweDAxRiwKKyAgICAweDIyOSwgMHgxNTAsIDB4Q0Q2LCAweERBOCwgMHgxNDQsIDB4QzU3LCAweDUxNCwgMHg0MDIsCisgICAgMHgyRUQsIDB4NEFDLCAweDAyNiwgMHhBODQsIDB4OTA3LCAweEEyQywgMHg2MDgsIDB4QUM0LAorICAgIDB4QUMyLCAweDYwMiwgMHgzRDUsIDB4NDUwLCAweDU1MSwgMHhBNTksIDB4QzFCLCAweEFBRSwKKyAgICAweDY5QywgMHhDNDEsIDB4MzRDLCAweDU1MCwgMHgxMEMsIDB4ODM1LCAweDQyOSwgMHgzM0MsCisgICAgMHhCMzMsIDB4NEQ1LCAweDUwOSwgMHhDQ0QsIDB4NTUwLCAweDM1QiwgMHg0RTIsIDB4QUEwLAorICAgIDB4NUU2LCAweDIwNSwgMHhCMDksIDB4OTlDLCAweDA5RiB9OworICBpbnQgZWNXb3JkczdbNDM1XSA9IHsKKyAgICAweEQ1NCwgMHgyMjEsIDB4MTU0LCAweDdDRCwgMHhCRjMsIDB4MTEyLCAweDg5QiwgMHhDNUUsCisgICAgMHg5Q0QsIDB4MDdFLCAweEZCNiwgMHg3OEYsIDB4N0ZBLCAweDE2RiwgMHgzNzcsIDB4NEI0LAorICAgIDB4NjJELCAweDQ3NSwgMHhCQzIsIDB4ODYxLCAweEI3MiwgMHg5RDAsIDB4NzZBLCAweDVBMSwKKyAgICAweDIyQSwgMHhGNzQsIDB4REJBLCAweDhCMSwgMHgxMzksIDB4RENELCAweDAxMiwgMHgyOTMsCisgICAgMHg3MDUsIDB4QTM0LCAweERENSwgMHgzRDIsIDB4N0Y4LCAweDBBNiwgMHg4OUEsIDB4MzQ2LAorICAgIDB4Q0UwLCAweDY5MCwgMHg0MEUsIDB4RkYzLCAweEM0RCwgMHg5N0YsIDB4OUM5LCAweDAxNiwKKyAgICAweDczQSwgMHg5MjMsIDB4QkNFLCAweEZBOSwgMHhFNkEsIDB4QjkyLCAweDAyQSwgMHgwN0MsCisgICAgMHgwNEIsIDB4OEQ1LCAweDc1MywgMHg0MkUsIDB4NjdFLCAweDg3QywgMHhFRTYsIDB4RDdELAorICAgIDB4MkJGLCAweEZCMiwgMHhGRjgsIDB4NDJGLCAweDRDQiwgMHgyMTQsIDB4Nzc5LCAweDAyRCwKKyAgICAweDYwNiwgMHhBMDIsIDB4MDhBLCAweEQ0RiwgMHhCODcsIDB4RERGLCAweEM0OSwgMHhCNTEsCisgICAgMHgwRTksIDB4Rjg5LCAweEFFRiwgMHhDOTIsIDB4MzgzLCAweDk4RCwgMHgzNjcsIDB4QkQzLAorICAgIDB4QTU1LCAweDE0OCwgMHg5REIsIDB4OTEzLCAweEM3OSwgMHg2RkYsIDB4Mzg3LCAweDZFQSwKKyAgICAweDdGQSwgMHhDMUIsIDB4MTJELCAweDMwMywgMHhCQ0EsIDB4NTAzLCAweDBGQiwgMHhCMTQsCisgICAgMHgwRDQsIDB4QUQxLCAweEFGQywgMHg5REQsIDB4NDA0LCAweDE0NSwgMHg2RTUsIDB4OEVELAorICAgIDB4Rjk0LCAweEQ3MiwgMHg2NDUsIDB4QTIxLCAweDFBOCwgMHhBQkYsIDB4QzAzLCAweDkxRSwKKyAgICAweEQ1MywgMHg0OEMsIDB4NDcxLCAweDRFNCwgMHg0MDgsIDB4MzNDLCAweDVERiwgMHg3M0QsCisgICAgMHhBMkEsIDB4NDU0LCAweEQ3NywgMHhDNDgsIDB4MkY1LCAweDk2QSwgMHg5Q0YsIDB4MDQ3LAorICAgIDB4NjExLCAweEU5MiwgMHhDMkYsIDB4QTk4LCAweDU2RCwgMHg5MTksIDB4NjE1LCAweDUzNSwKKyAgICAweDY3QSwgMHg4QzEsIDB4MkUyLCAweEJDNCwgMHhCRTgsIDB4MzI4LCAweDA0RiwgMHgyNTcsCisgICAgMHgzRjksIDB4RkE1LCAweDQ3NywgMHgxMkUsIDB4OTRCLCAweDExNiwgMHhFRjcsIDB4NjVGLAorICAgIDB4NkIzLCAweDkxNSwgMHhDNjQsIDB4OUFGLCAweEI2QywgMHg2QTIsIDB4NTBELCAweEVBMywKKyAgICAweDI2RSwgMHhDMjMsIDB4ODE3LCAweEE0MiwgMHg3MUEsIDB4OURELCAweERBOCwgMHg4NEQsCisgICAgMHgzRjMsIDB4ODVCLCAweEIwMCwgMHgxRkMsIDB4QjBBLCAweEMyRiwgMHgwMEMsIDB4MDk1LAorICAgIDB4QzU4LCAweDBFMywgMHg4MDcsIDB4OTYyLCAweEM0QiwgMHgyOUEsIDB4NkZDLCAweDk1OCwKKyAgICAweEQyOSwgMHg1OUUsIDB4QjE0LCAweDk1QSwgMHhFREUsIDB4RjNELCAweEZCOCwgMHgwRTUsCisgICAgMHgzNDgsIDB4MkU3LCAweDM4RSwgMHg1NkEsIDB4NDEwLCAweDNCMSwgMHg0QjAsIDB4NzkzLAorICAgIDB4QUI3LCAweDBCQywgMHg2NDgsIDB4NzE5LCAweEUzRSwgMHhGQjQsIDB4M0I0LCAweEU1QywKKyAgICAweDk1MCwgMHhEMkEsIDB4NTBCLCAweDc2RiwgMHg4RDIsIDB4M0M3LCAweEVDQywgMHg4N0MsCisgICAgMHg1M0EsIDB4QkE3LCAweDRDMywgMHgxNDgsIDB4NDM3LCAweDgyMCwgMHhFQ0QsIDB4NjYwLAorICAgIDB4MDk1LCAweDJGNCwgMHg2NjEsIDB4NkE0LCAweEI3NCwgMHg1RjMsIDB4MUQyLCAweDdFQywKKyAgICAweDhFMiwgMHhBNDAsIDB4QTZGLCAweEZDMywgMHgzQkUsIDB4MUU5LCAweDUyQywgMHgyMzMsCisgICAgMHgxNzMsIDB4NEVGLCAweEE3QywgMHg0MEIsIDB4MTRDLCAweDg4RCwgMHhGMzAsIDB4OEQ5LAorICAgIDB4QkRCLCAweDBBNiwgMHg5NDAsIDB4RDQ2LCAweEIyQiwgMHgwM0UsIDB4NDZBLCAweDY0MSwKKyAgICAweEYwOCwgMHhBRkYsIDB4NDk2LCAweDY4QSwgMHg3QTQsIDB4MEJBLCAweEQ0MywgMHg1MTUsCisgICAgMHhCMjYsIDB4RDhGLCAweDA1QywgMHhENkUsIDB4QTJDLCAweEYyNSwgMHg2MjgsIDB4NEU1LAorICAgIDB4ODFELCAweEEyQSwgMHgxRkYsIDB4MzAyLCAweEZCRCwgMHg2RDksIDB4NzExLCAweEQ4QiwKKyAgICAweEU1QywgMHg1Q0YsIDB4NDJFLCAweDAwOCwgMHg4NjMsIDB4QjZGLCAweDFFMSwgMHgzREEsCisgICAgMHhBQ0UsIDB4ODJCLCAweDJEQiwgMHg3RUIsIDB4QzE1LCAweDc5RiwgMHhBNzksIDB4REFGLAorICAgIDB4MDBELCAweDJGNiwgMHgwQ0UsIDB4MzcwLCAweDdFOCwgMHg5RTYsIDB4ODlGLCAweEFFOSwKKyAgICAweDE3NSwgMHhBOTUsIDB4MDZCLCAweDlERiwgMHhBRkYsIDB4NDVCLCAweDgyMywgMHhBQTQsCisgICAgMHhDNzksIDB4NzczLCAweDg4NiwgMHg4NTQsIDB4MEE1LCAweDZEMSwgMHhFNTUsIDB4RUJCLAorICAgIDB4NTE4LCAweEU1MCwgMHhGOEYsIDB4OENDLCAweDgzNCwgMHgzODgsIDB4Q0QyLCAweEZDMSwKKyAgICAweEE1NSwgMHgxRjgsIDB4RDFGLCAweEUwOCwgMHhGOTMsIDB4MzYyLCAweEEyMiwgMHg5RkEsCisgICAgMHhDRTUsIDB4M0MzLCAweERENCwgMHhDNTMsIDB4Qjk0LCAweEFEMCwgMHg2RUIsIDB4NjhELAorICAgIDB4NjYwLCAweDhGQywgMHhCQ0QsIDB4OTE0LCAweDE2RiwgMHg0QzAsIDB4MTM0LCAweEUxQSwKKyAgICAweDc2RiwgMHg5Q0IsIDB4NjYwLCAweEVBMCwgMHgzMjAsIDB4MTVBLCAweENFMywgMHg3RTgsCisgICAgMHgwM0UsIDB4QjlBLCAweEM5MCwgMHhBMTQsIDB4MjU2LCAweDFBOCwgMHg2MzksIDB4N0M2LAorICAgIDB4QTU5LCAweEE2NSwgMHg5NTYsIDB4OUU0LCAweDU5MiwgMHg2QTksIDB4Q0ZGLCAweDREQywKKyAgICAweEFBMywgMHhEMkEsIDB4RkRFLCAweEE4NywgMHhCRjUsIDB4OUYwLCAweEMzMiwgMHg5NEYsCisgICAgMHg2NzUsIDB4OUE2LCAweDM2OSwgMHg2NDgsIDB4Mjg5LCAweDgyMywgMHg0OTgsIDB4NTc0LAorICAgIDB4OEQxLCAweEExMywgMHhEMUEsIDB4QkI1LCAweEExOSwgMHg3RjcsIDB4Nzc1LCAweDEzOCwKKyAgICAweDk0OSwgMHhBNEMsIDB4RTM2LCAweDEyNiwgMHhDODUsIDB4RTA1LCAweEZFRSwgMHg5NjIsCisgICAgMHgzNkQsIDB4MDhELCAweEM3NiwgMHgxRTEsIDB4MUVDLCAweDhENywgMHgyMzEsIDB4QjY4LAorICAgIDB4MDNDLCAweDFERSwgMHg3REYsIDB4MkIxLCAweDA5RCwgMHhDODEsIDB4REE0LCAweDhGNywKKyAgICAweDZCOSwgMHg5NDcsIDB4OUIwIH07CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGU6W1pYR2VuZXJpY0dGIEF6dGVjRGF0YTEyXSBkYXRhV29yZHM6ZGF0YVdvcmRzNyBkYXRhV29yZHNMZW46MTIyOSBlY1dvcmRzOmVjV29yZHM3IGVjV29yZHNMZW46NDM1XTsKKyAgLy8gc3ludGhldGljIHRlc3QgY2FzZXMKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZVJhbmRvbTpbWlhHZW5lcmljR0YgQXp0ZWNQYXJhbV0gZGF0YVNpemU6MiBlY1NpemU6NV07IC8vIGNvbXBhY3QgbW9kZSBtZXNzYWdlCisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGVSYW5kb206W1pYR2VuZXJpY0dGIEF6dGVjUGFyYW1dIGRhdGFTaXplOjQgZWNTaXplOjZdOyAvLyBmdWxsIG1vZGUgbWVzc2FnZQorICBbc2VsZiB0ZXN0RW5jb2RlRGVjb2RlUmFuZG9tOltaWEdlbmVyaWNHRiBBenRlY0RhdGE2XSBkYXRhU2l6ZToxMCBlY1NpemU6N107CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGVSYW5kb206W1pYR2VuZXJpY0dGIEF6dGVjRGF0YTZdIGRhdGFTaXplOjIwIGVjU2l6ZToxMl07CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGVSYW5kb206W1pYR2VuZXJpY0dGIEF6dGVjRGF0YThdIGRhdGFTaXplOjIwIGVjU2l6ZToxMV07CisgIFtzZWxmIHRlc3RFbmNvZGVEZWNvZGVSYW5kb206W1pYR2VuZXJpY0dGIEF6dGVjRGF0YThdIGRhdGFTaXplOjEyOCBlY1NpemU6MTI3XTsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZVJhbmRvbTpbWlhHZW5lcmljR0YgQXp0ZWNEYXRhMTBdIGRhdGFTaXplOjEyOCBlY1NpemU6MTI4XTsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZVJhbmRvbTpbWlhHZW5lcmljR0YgQXp0ZWNEYXRhMTBdIGRhdGFTaXplOjc2OCBlY1NpemU6MjU1XTsKKyAgW3NlbGYgdGVzdEVuY29kZURlY29kZVJhbmRvbTpbWlhHZW5lcmljR0YgQXp0ZWNEYXRhMTJdIGRhdGFTaXplOjMwNzIgZWNTaXplOjEwMjNdOworfQorCistICh2b2lkKWNvcnJ1cHQ6KGludCAqKXJlY2VpdmVkIHJlY2VpdmVkTGVuOihpbnQpcmVjZWl2ZWRMZW4gaG93TWFueTooaW50KWhvd01hbnkgbWF4OihpbnQpbWF4IHsKKyAgQk9PTCBjb3JydXB0ZWRbcmVjZWl2ZWRMZW5dOworICBmb3IgKGludCBpID0gMDsgaSA8IHJlY2VpdmVkTGVuOyBpKyspIHsKKyAgICBjb3JydXB0ZWRbaV0gPSBOTzsKKyAgfQorCisgIGZvciAoaW50IGogPSAwOyBqIDwgaG93TWFueTsgaisrKSB7CisgICAgaW50IGxvY2F0aW9uID0gcmFuZCgpICUgcmVjZWl2ZWRMZW47CisgICAgaW50IHZhbHVlID0gcmFuZCgpICUgbWF4OworICAgIGlmIChjb3JydXB0ZWRbbG9jYXRpb25dIHx8IHJlY2VpdmVkW2xvY2F0aW9uXSA9PSB2YWx1ZSkgeworICAgICAgai0tOworICAgIH0gZWxzZSB7CisgICAgICBjb3JydXB0ZWRbbG9jYXRpb25dID0gWUVTOworICAgICAgcmVjZWl2ZWRbbG9jYXRpb25dID0gdmFsdWU7CisgICAgfQorICB9Cit9CisKKy0gKHZvaWQpdGVzdEVuY29kZURlY29kZVJhbmRvbTooWlhHZW5lcmljR0YgKilmaWVsZCBkYXRhU2l6ZTooaW50KWRhdGFTaXplIGVjU2l6ZTooaW50KWVjU2l6ZSB7CisgIFNUQXNzZXJ0VHJ1ZShkYXRhU2l6ZSA+IDAgJiYgZGF0YVNpemUgPD0gZmllbGQuc2l6ZSAtIDMsIEAiSW52YWxpZCBkYXRhIHNpemUgZm9yICVAIiwgZmllbGQpOworICBTVEFzc2VydFRydWUoZWNTaXplID4gMCAmJiBlY1NpemUgKyBkYXRhU2l6ZSA8PSBmaWVsZC5zaXplLCBAIkludmFsaWQgRUNDIHNpemUgZm9yICVAIiwgZmllbGQpOworICBaWFJlZWRTb2xvbW9uRW5jb2RlciAqZW5jb2RlciA9IFtbWlhSZWVkU29sb21vbkVuY29kZXIgYWxsb2NdIGluaXRXaXRoRmllbGQ6ZmllbGRdOworICBpbnQgbWVzc2FnZVtkYXRhU2l6ZSArIGVjU2l6ZV07CisgIGludCBkYXRhV29yZHNbZGF0YVNpemVdOworICBpbnQgZWNXb3Jkc1tlY1NpemVdOworICBzcmFuZChSZWVkU29sb21vblRlc3RDYXNlX1JBTkRPTV9TRUVEKTsKKyAgaW50IGl0ZXJhdGlvbnMgPSBmaWVsZC5zaXplID4gMjU2ID8gMSA6IERFQ09ERVJfUkFORE9NX1RFU1RfSVRFUkFUSU9OUzsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKKyAgICAvLyBnZW5lcmF0ZSByYW5kb20gZGF0YQorICAgIGZvciAoaW50IGsgPSAwOyBrIDwgZGF0YVNpemU7IGsrKykgeworICAgICAgZGF0YVdvcmRzW2tdID0gcmFuZCgpICUgZmllbGQuc2l6ZTsKKyAgICB9CisgICAgLy8gZ2VuZXJhdGUgRUNDIHdvcmRzCisgICAgbWVtY3B5KG1lc3NhZ2UsIGRhdGFXb3JkcywgZGF0YVNpemUgKiBzaXplb2YoaW50KSk7CisgICAgW2VuY29kZXIgZW5jb2RlOm1lc3NhZ2UgdG9FbmNvZGVMZW46ZGF0YVNpemUgKyBlY1NpemUgZWNCeXRlczplY1NpemVdOworICAgIG1lbWNweShlY1dvcmRzLCBtZXNzYWdlICsgZGF0YVNpemUsIGVjU2l6ZSAqIHNpemVvZihpbnQpKTsKKyAgICAvLyBjaGVjayB0byBzZWUgaWYgRGVjb2RlciBjYW4gZml4IHVwIHRvIGVjV29yZHMvMiByYW5kb20gZXJyb3JzCisgICAgW3NlbGYgdGVzdERlY29kZXI6ZmllbGQgZGF0YVdvcmRzOmRhdGFXb3JkcyBkYXRhV29yZHNMZW46ZGF0YVNpemUgZWNXb3JkczplY1dvcmRzIGVjV29yZHNMZW46ZWNTaXplXTsKKyAgfQorfQorCistICh2b2lkKXRlc3RFbmNvZGVEZWNvZGU6KFpYR2VuZXJpY0dGICopZmllbGQgZGF0YVdvcmRzOihpbnQgKilkYXRhV29yZHMgZGF0YVdvcmRzTGVuOihpbnQpZGF0YVdvcmRzTGVuIGVjV29yZHM6KGludCAqKWVjV29yZHMgZWNXb3Jkc0xlbjooaW50KWVjV29yZHNMZW4geworICBbc2VsZiB0ZXN0RW5jb2RlcjpmaWVsZCBkYXRhV29yZHM6ZGF0YVdvcmRzIGRhdGFXb3Jkc0xlbjpkYXRhV29yZHNMZW4gZWNXb3JkczplY1dvcmRzIGVjV29yZHNMZW46ZWNXb3Jkc0xlbl07CisgIFtzZWxmIHRlc3REZWNvZGVyOmZpZWxkIGRhdGFXb3JkczpkYXRhV29yZHMgZGF0YVdvcmRzTGVuOmRhdGFXb3Jkc0xlbiBlY1dvcmRzOmVjV29yZHMgZWNXb3Jkc0xlbjplY1dvcmRzTGVuXTsKK30KKworLSAodm9pZCl0ZXN0RW5jb2RlcjooWlhHZW5lcmljR0YgKilmaWVsZCBkYXRhV29yZHM6KGludCAqKWRhdGFXb3JkcyBkYXRhV29yZHNMZW46KGludClkYXRhV29yZHNMZW4gZWNXb3JkczooaW50ICopZWNXb3JkcyBlY1dvcmRzTGVuOihpbnQpZWNXb3Jkc0xlbiB7CisgIFpYUmVlZFNvbG9tb25FbmNvZGVyICplbmNvZGVyID0gW1taWFJlZWRTb2xvbW9uRW5jb2RlciBhbGxvY10gaW5pdFdpdGhGaWVsZDpmaWVsZF07CisKKyAgaW50IGxlbmd0aCA9IGRhdGFXb3Jkc0xlbiArIGVjV29yZHNMZW47CisgIGludCBtZXNzYWdlRXhwZWN0ZWRbbGVuZ3RoXTsKKyAgaW50IG1lc3NhZ2VbbGVuZ3RoXTsKKyAgbWVtY3B5KG1lc3NhZ2VFeHBlY3RlZCwgZGF0YVdvcmRzLCBkYXRhV29yZHNMZW4gKiBzaXplb2YoaW50KSk7CisgIG1lbWNweShtZXNzYWdlRXhwZWN0ZWQgKyBkYXRhV29yZHNMZW4sIGVjV29yZHMsIGVjV29yZHNMZW4gKiBzaXplb2YoaW50KSk7CisgIG1lbWNweShtZXNzYWdlLCBkYXRhV29yZHMsIGRhdGFXb3Jkc0xlbiAqIHNpemVvZihpbnQpKTsKKyAgW2VuY29kZXIgZW5jb2RlOm1lc3NhZ2UgdG9FbmNvZGVMZW46bGVuZ3RoIGVjQnl0ZXM6ZWNXb3Jkc0xlbl07CisgIFtzZWxmIGFzc2VydERhdGFFcXVhbHNFeHBlY3RlZDptZXNzYWdlRXhwZWN0ZWQgcmVjZWl2ZWQ6bWVzc2FnZSBsZW5ndGg6bGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkVuY29kZSBpbiAlQCAoJWQsJWQpIGZhaWxlZCIsIGZpZWxkLCBkYXRhV29yZHNMZW4sIGVjV29yZHNMZW5dXTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlcjooWlhHZW5lcmljR0YgKilmaWVsZCBkYXRhV29yZHM6KGludCAqKWRhdGFXb3JkcyBkYXRhV29yZHNMZW46KGludClkYXRhV29yZHNMZW4gZWNXb3JkczooaW50ICopZWNXb3JkcyBlY1dvcmRzTGVuOihpbnQpZWNXb3Jkc0xlbiB7CisgIFpYUmVlZFNvbG9tb25EZWNvZGVyICpkZWNvZGVyID0gW1taWFJlZWRTb2xvbW9uRGVjb2RlciBhbGxvY10gaW5pdFdpdGhGaWVsZDpmaWVsZF07CisgIGludCBsZW5ndGggPSBkYXRhV29yZHNMZW4gKyBlY1dvcmRzTGVuOworICBpbnQgbWVzc2FnZVtsZW5ndGhdOworICBpbnQgbWF4RXJyb3JzID0gZWNXb3Jkc0xlbiAvIDI7CisgIHNyYW5kKFJlZWRTb2xvbW9uVGVzdENhc2VfUkFORE9NX1NFRUQpOworICBpbnQgaXRlcmF0aW9ucyA9IGZpZWxkLnNpemUgPiAyNTYgPyAxIDogREVDT0RFUl9URVNUX0lURVJBVElPTlM7CisgIGZvciAoaW50IGogPSAwOyBqIDwgaXRlcmF0aW9uczsgaisrKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlY1dvcmRzTGVuOyBpKyspIHsKKyAgICAgIGlmIChpID4gMTAgJiYgaSA8IGVjV29yZHNMZW4gLyAyIC0gMTApIHsKKyAgICAgICAgLy8gcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgLSBza2lwIGludGVybWVkaWF0ZSBjYXNlcyBpbiBsb25nLXJ1bm5pbmcgdGVzdHMKKyAgICAgICAgaSArPSBlY1dvcmRzTGVuIC8gMTA7CisgICAgICB9CisgICAgICBtZW1jcHkobWVzc2FnZSwgZGF0YVdvcmRzLCBkYXRhV29yZHNMZW4gKiBzaXplb2YoaW50KSk7CisgICAgICBtZW1jcHkobWVzc2FnZSArIGRhdGFXb3Jkc0xlbiwgZWNXb3JkcywgZWNXb3Jkc0xlbiAqIHNpemVvZihpbnQpKTsKKyAgICAgIFtzZWxmIGNvcnJ1cHQ6bWVzc2FnZSByZWNlaXZlZExlbjpsZW5ndGggaG93TWFueTppIG1heDpmaWVsZC5zaXplXTsKKworICAgICAgTlNFcnJvciAqZXJyb3I7CisgICAgICBpZiAoIVtkZWNvZGVyIGRlY29kZTptZXNzYWdlIHJlY2VpdmVkTGVuOmxlbmd0aCB0d29TOmVjV29yZHNMZW4gZXJyb3I6JmVycm9yXSkgeworICAgICAgICAvLyBmYWlsIG9ubHkgaWYgbWF4RXJyb3JzIGV4Y2VlZGVkCisgICAgICAgIFNUQXNzZXJ0VHJ1ZShpID4gbWF4RXJyb3JzLCBAIkRlY29kZSBpbiAlQCAoJWQsJWQpIGZhaWxlZCBhdCAlZCBlcnJvcnM6ICVAIiwKKyAgICAgICAgICAgICAgICAgICAgIGZpZWxkLCBkYXRhV29yZHNMZW4sIGVjV29yZHNMZW4sIGksIGVycm9yKTsKKyAgICAgICAgLy8gZWxzZSBzdG9wCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYgKGkgPCBtYXhFcnJvcnMpIHsKKyAgICAgICAgW3NlbGYgYXNzZXJ0RGF0YUVxdWFsc0V4cGVjdGVkOmRhdGFXb3JkcyByZWNlaXZlZDptZXNzYWdlIGxlbmd0aDpkYXRhV29yZHNMZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRGVjb2RlIGluICVAICglZCwlZCkgZmFpbGVkIGF0ICVkIGVycm9ycyIsIGZpZWxkLCBkYXRhV29yZHNMZW4sIGVjV29yZHNMZW4sIGldXTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworLSAodm9pZClhc3NlcnREYXRhRXF1YWxzRXhwZWN0ZWQ6KGludCAqKWV4cGVjdGVkIHJlY2VpdmVkOihpbnQgKilyZWNlaXZlZCBsZW5ndGg6KGludClsZW5ndGggbWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIHsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIGlmIChleHBlY3RlZFtpXSAhPSByZWNlaXZlZFtpXSkgeworICAgICAgU1RGYWlsKEAiJUAuIE1pc21hdGNoIGF0ICVkLiBFeHBlY3RlZCAlQCwgZ290ICVAIiwgbWVzc2FnZSwgaSwgW3NlbGYgYXJyYXlUb1N0cmluZzpleHBlY3RlZCBsZW5ndGg6bGVuZ3RoXSwgW3NlbGYgYXJyYXlUb1N0cmluZzpyZWNlaXZlZCBsZW5ndGg6bGVuZ3RoXSk7CisgICAgfQorICB9Cit9CisKKy0gKE5TU3RyaW5nICopYXJyYXlUb1N0cmluZzooaW50ICopZGF0YSBsZW5ndGg6KGludClsZW5ndGggeworICBOU011dGFibGVTdHJpbmcgKnNiID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoU3RyaW5nOkAieyJdOworICBmb3IgKGludCBpPTA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIFtzYiBhcHBlbmRGb3JtYXQ6aSA+IDAgPyBAIiwlWCIgOiBAIiVYIiwgZGF0YVtpXV07CisgIH0KKyAgW3NiIGFwcGVuZFN0cmluZzpAIn0iXTsKKworICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhTdHJpbmc6c2JdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L0RhdGFNYXRyaXhCbGFja0JveDFUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9EYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTZlMjBkCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9EYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBEYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9EYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvRGF0YU1hdHJpeEJsYWNrQm94MVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkNTUwMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvRGF0YU1hdHJpeEJsYWNrQm94MVRlc3RDYXNlLm0KQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiRGF0YU1hdHJpeEJsYWNrQm94MVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBEYXRhTWF0cml4QmxhY2tCb3gxVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9kYXRhbWF0cml4LTEiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXREYXRhTWF0cml4XTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6MTggdHJ5SGFyZGVyQ291bnQ6MTggcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDoxOCB0cnlIYXJkZXJDb3VudDoxOCByb3RhdGlvbjo5MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDoxOCB0cnlIYXJkZXJDb3VudDoxOCByb3RhdGlvbjoxODAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MTggdHJ5SGFyZGVyQ291bnQ6MTggcm90YXRpb246MjcwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvRGF0YU1hdHJpeEJsYWNrQm94MlRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L0RhdGFNYXRyaXhCbGFja0JveDJUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZDNjODgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L0RhdGFNYXRyaXhCbGFja0JveDJUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIERhdGFNYXRyaXhCbGFja0JveDJUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L0RhdGFNYXRyaXhCbGFja0JveDJUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9EYXRhTWF0cml4QmxhY2tCb3gyVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhhNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9EYXRhTWF0cml4QmxhY2tCb3gyVGVzdENhc2UubQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJEYXRhTWF0cml4QmxhY2tCb3gyVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIERhdGFNYXRyaXhCbGFja0JveDJUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L2RhdGFtYXRyaXgtMiIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdERhdGFNYXRyaXhdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDo4IHRyeUhhcmRlckNvdW50OjE1IG1heE1pc3JlYWRzOjAgbWF4VHJ5SGFyZGVyTWlzcmVhZHM6MSByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjE0IHRyeUhhcmRlckNvdW50OjE2IG1heE1pc3JlYWRzOjAgbWF4VHJ5SGFyZGVyTWlzcmVhZHM6MSByb3RhdGlvbjo5MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDoxNCB0cnlIYXJkZXJDb3VudDoxNSBtYXhNaXNyZWFkczowIG1heFRyeUhhcmRlck1pc3JlYWRzOjEgcm90YXRpb246MTgwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjEzIHRyeUhhcmRlckNvdW50OjE2IG1heE1pc3JlYWRzOjAgbWF4VHJ5SGFyZGVyTWlzcmVhZHM6MSByb3RhdGlvbjoyNzAuMGZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3N1cGVyIHJ1blRlc3RzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9aWERhdGFNYXRyaXhXcml0ZXJUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9aWERhdGFNYXRyaXhXcml0ZXJUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllY2U5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L1pYRGF0YU1hdHJpeFdyaXRlclRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhEYXRhTWF0cml4V3JpdGVyVGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L1pYRGF0YU1hdHJpeFdyaXRlclRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L1pYRGF0YU1hdHJpeFdyaXRlclRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2NTE0ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvWlhEYXRhTWF0cml4V3JpdGVyVGVzdENhc2UubQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERhdGFNYXRyaXhXcml0ZXJUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhEYXRhTWF0cml4V3JpdGVyVGVzdENhc2UKKworLSAodm9pZCl0ZXN0RGF0YU1hdHJpeEltYWdlV3JpdGVyIHsKKyAgWlhFbmNvZGVIaW50cyAqaGludHMgPSBbWlhFbmNvZGVIaW50cyBoaW50c107CisgIGhpbnRzLmRhdGFNYXRyaXhTaGFwZSA9IFtaWFN5bWJvbFNoYXBlSGludCBmb3JjZVNxdWFyZV07CisKKyAgaW50IGJpZ0Vub3VnaCA9IDY0OworICBaWERhdGFNYXRyaXhXcml0ZXIgKndyaXRlciA9IFtbWlhEYXRhTWF0cml4V3JpdGVyIGFsbG9jXSBpbml0XTsKKyAgWlhCaXRNYXRyaXggKm1hdHJpeCA9IFt3cml0ZXIgZW5jb2RlOkAiSGVsbG8gR29vZ2xlIiBmb3JtYXQ6a0JhcmNvZGVGb3JtYXREYXRhTWF0cml4IHdpZHRoOmJpZ0Vub3VnaCBoZWlnaHQ6YmlnRW5vdWdoIGhpbnRzOmhpbnRzIGVycm9yOm5pbF07CisgIFNUQXNzZXJ0Tm90TmlsKG1hdHJpeCwgQCJNYXRyaXggc2hvdWxkIG5vdCBiZSBuaWwiKTsKKyAgU1RBc3NlcnRUcnVlKGJpZ0Vub3VnaCA+PSBtYXRyaXgud2lkdGgsIEAiTWF0cml4IHdpZHRoIHNob3VsZCBiZSBsZXNzIHRoYW4gJWQiLCBiaWdFbm91Z2gpOworICBTVEFzc2VydFRydWUoYmlnRW5vdWdoID49IG1hdHJpeC5oZWlnaHQsIEAiTWF0cml4IGhlaWdodCBzaG91bGQgYmUgbGVzcyB0aGFuICVkIiwgYmlnRW5vdWdoKTsKK30KKworLSAodm9pZCl0ZXN0RGF0YU1hdHJpeFdyaXRlciB7CisgIFpYRW5jb2RlSGludHMgKmhpbnRzID0gW1pYRW5jb2RlSGludHMgaGludHNdOworICBoaW50cy5kYXRhTWF0cml4U2hhcGUgPSBbWlhTeW1ib2xTaGFwZUhpbnQgZm9yY2VTcXVhcmVdOworCisgIGludCBiaWdFbm91Z2ggPSAxNDsKKyAgWlhEYXRhTWF0cml4V3JpdGVyICp3cml0ZXIgPSBbW1pYRGF0YU1hdHJpeFdyaXRlciBhbGxvY10gaW5pdF07CisgIFpYQml0TWF0cml4ICptYXRyaXggPSBbd3JpdGVyIGVuY29kZTpAIkhlbGxvIE1lIiBmb3JtYXQ6a0JhcmNvZGVGb3JtYXREYXRhTWF0cml4IHdpZHRoOmJpZ0Vub3VnaCBoZWlnaHQ6YmlnRW5vdWdoIGhpbnRzOmhpbnRzIGVycm9yOm5pbF07CisgIFNUQXNzZXJ0Tm90TmlsKG1hdHJpeCwgQCJNYXRyaXggc2hvdWxkIG5vdCBiZSBuaWwiKTsKKyAgU1RBc3NlcnRFcXVhbHMobWF0cml4LndpZHRoLCBiaWdFbm91Z2gsIEAiRXhwZWN0ZWQgbWF0cml4IHdpZHRoIHRvIGVxdWFsICVkIiwgYmlnRW5vdWdoKTsKKyAgU1RBc3NlcnRFcXVhbHMobWF0cml4LmhlaWdodCwgYmlnRW5vdWdoLCBAIkV4cGVjdGVkIG1hdHJpeCBoZWlnaHQgdG8gZXF1YWwgJWQiLCBiaWdFbm91Z2gpOworfQorCistICh2b2lkKXRlc3REYXRhTWF0cml4VG9vU21hbGwgeworICAvLyBUaGUgRGF0YU1hdHJpeCB3aWxsIG5vdCBmaXQgaW4gdGhpcyBzaXplLCBzbyB0aGUgbWF0cml4IHNob3VsZCBjb21lIGJhY2sgYmlnZ2VyCisgIGludCB0b29TbWFsbCA9IDg7CisgIFpYRGF0YU1hdHJpeFdyaXRlciAqd3JpdGVyID0gW1taWERhdGFNYXRyaXhXcml0ZXIgYWxsb2NdIGluaXRdOworICBaWEJpdE1hdHJpeCAqbWF0cml4ID0gW3dyaXRlciBlbmNvZGU6QCJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiBmb3JtYXQ6a0JhcmNvZGVGb3JtYXREYXRhTWF0cml4IHdpZHRoOnRvb1NtYWxsIGhlaWdodDp0b29TbWFsbCBoaW50czpuaWwgZXJyb3I6bmlsXTsKKworICBTVEFzc2VydE5vdE5pbChtYXRyaXgsIEAiTWF0cml4IHNob3VsZCBub3QgYmUgbmlsIik7CisgIFNUQXNzZXJ0VHJ1ZSh0b29TbWFsbCA8IG1hdHJpeC53aWR0aCwgQCJFeHBlY3RlZCBtYXRyaXggd2lkdGggdG8gYmUgbGVzcyB0aGFuICVkIiwgdG9vU21hbGwpOworICBTVEFzc2VydFRydWUodG9vU21hbGwgPCBtYXRyaXguaGVpZ2h0LCBAIkV4cGVjdGVkIG1hdHJpeCBoZWlnaHQgdG8gYmUgbGVzcyB0aGFuICVkIiwgdG9vU21hbGwpOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MzUwNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZGVjb2Rlci9aWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxTZW5UZXN0aW5nS2l0L1NlblRlc3RpbmdLaXQuaD4KKworQGludGVyZmFjZSBaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L2RlY29kZXIvWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5OTVhOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZGVjb2Rlci9aWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERhdGFNYXRyaXhEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFpYRGF0YU1hdHJpeERlY29kZWRCaXRTdHJlYW1QYXJzZXJUZXN0Q2FzZQorCistICh2b2lkKXRlc3RBc2NpaVN0YW5kYXJkRGVjb2RlIHsKKyAgLy8gQVNDSUkgY2hhcmFjdGVycyAwLTEyNyBhcmUgZW5jb2RlZCBhcyB0aGUgdmFsdWUgKyAxCisgIGludDhfdCBieXRlc1s2XSA9IHsKKyAgICAoaW50OF90KSAoJ2EnICsgMSksIChpbnQ4X3QpICgnYicgKyAxKSwgKGludDhfdCkgKCdjJyArIDEpLAorICAgIChpbnQ4X3QpICgnQScgKyAxKSwgKGludDhfdCkgKCdCJyArIDEpLCAoaW50OF90KSAoJ0MnICsgMSkgfTsKKyAgTlNTdHJpbmcgKmRlY29kZWRTdHJpbmcgPSBbWlhEYXRhTWF0cml4RGVjb2RlZEJpdFN0cmVhbVBhcnNlciBkZWNvZGU6Ynl0ZXMgbGVuZ3RoOjYgZXJyb3I6bmlsXS50ZXh0OworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAImFiY0FCQyI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGRlY29kZWRTdHJpbmcsIGV4cGVjdGVkLCBAIkV4cGVjdGVkIFwiJUBcIiB0byBlcXVhbCBcIiVAXCIiLCBkZWNvZGVkU3RyaW5nLCBleHBlY3RlZCk7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvblRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4OTM4MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCisvKioKKyAqIFRlc3RzIGZvciB0aGUgRUNDMjAwIGVycm9yIGNvcnJlY3Rpb24uCisgKi8KKworQGludGVyZmFjZSBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvblRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5NzVhNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRGF0YU1hdHJpeEVycm9yQ29ycmVjdGlvblRlc3RDYXNlLmgiCisjaW1wb3J0ICJaWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZQorCistICh2b2lkKXRlc3RSUyB7CisgIC8vU2FtcGxlIGZyb20gQW5uZXhlIFIgaW4gSVNPL0lFQyAxNjAyMjoyMDAwKEUpCisgIGNvbnN0IGNoYXIgY3cxWzRdID0gezE0MiwgMTY0LCAxODYsIChjaGFyKU5VTEx9OworICBaWFN5bWJvbEluZm8gKnN5bWJvbEluZm8gPSBbWlhTeW1ib2xJbmZvIGxvb2t1cDozXTsKKyAgTlNTdHJpbmcgKnMgPSBbWlhEYXRhTWF0cml4RXJyb3JDb3JyZWN0aW9uIGVuY29kZUVDQzIwMDpbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6Y3cxIGVuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddIHN5bWJvbEluZm86c3ltYm9sSW5mb107CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtaWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlIHZpc3VhbGl6ZTpzXSwgQCIxNDIgMTY0IDE4NiAxMTQgMjUgNSA4OCAxMDIiLCBAIiIpOworCisgIC8vIkEiIGVuY29kZWQgKEFTQ0lJIGVuY29kaW5nICsgMiBwYWRkaW5nIGNoYXJhY3RlcnMpCisgIGNvbnN0IGNoYXIgY3cyWzRdID0gezY2LCAxMjksIDcwLCAoY2hhcilOVUxMfTsKKyAgcyA9IFtaWERhdGFNYXRyaXhFcnJvckNvcnJlY3Rpb24gZW5jb2RlRUNDMjAwOltOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpjdzIgZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ10gc3ltYm9sSW5mbzpzeW1ib2xJbmZvXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1pYSGlnaExldmVsRW5jb2RlVGVzdENhc2UgdmlzdWFsaXplOnNdLCBAIjY2IDEyOSA3MCAxMzggMjM0IDgyIDgyIDk1IiwgQCIiKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYRGVidWdQbGFjZW1lbnQuaCBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERlYnVnUGxhY2VtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhMWI3MAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERlYnVnUGxhY2VtZW50LmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworCitAaW50ZXJmYWNlIFpYRGVidWdQbGFjZW1lbnQgOiBaWERlZmF1bHRQbGFjZW1lbnQKKworLSAoTlNTdHJpbmcgKil0b0JpdEZpZWxkU3RyaW5nOworLSAoTlNBcnJheSAqKXRvQml0RmllbGRTdHJpbmdBcnJheTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYRGVidWdQbGFjZW1lbnQubSBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERlYnVnUGxhY2VtZW50Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljNWZkNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWERlYnVnUGxhY2VtZW50Lm0KQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhEZWJ1Z1BsYWNlbWVudC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhEZWJ1Z1BsYWNlbWVudAorCistIChOU1N0cmluZyAqKXRvQml0RmllbGRTdHJpbmcgeworICBOU011dGFibGVTdHJpbmcgKnNiID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6c2VsZi5iaXRzTGVuXTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxmLmJpdHNMZW47IGkrKykgeworICAgIFtzYiBhcHBlbmRTdHJpbmc6c2VsZi5iaXRzW2ldID09IDEgPyBAIjEiIDogQCIwIl07CisgIH0KKyAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoU3RyaW5nOnNiXTsKK30KKworLSAoTlNBcnJheSAqKXRvQml0RmllbGRTdHJpbmdBcnJheSB7CisgIE5TTXV0YWJsZUFycmF5ICphcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzZWxmLm51bXJvd3NdOworICBpbnQgc3RhcnRwb3MgPSAwOworICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzZWxmLm51bXJvd3M7IHJvdysrKSB7CisgICAgTlNNdXRhYmxlU3RyaW5nICpzYiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENhcGFjaXR5OnNlbGYuYml0c0xlbl07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxmLm51bWNvbHM7IGkrKykgeworICAgICAgW3NiIGFwcGVuZFN0cmluZzpzZWxmLmJpdHNbc3RhcnRwb3MgKyBpXSA9PSAxID8gQCIxIiA6IEAiMCJdOworICAgIH0KKyAgICBbYXJyYXkgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoU3RyaW5nOnNiXV07CisgICAgc3RhcnRwb3MgKz0gc2VsZi5udW1jb2xzOworICB9CisgIHJldHVybiBhcnJheTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYSGlnaExldmVsRW5jb2RlVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwYmZlNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhIaWdoTGV2ZWxFbmNvZGVUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKKy8qKgorICogQ29udmVydCBhIHN0cmluZyBvZiBjaGFyIGNvZGV3b3JkcyBpbnRvIGEgZGlmZmVyZW50IHN0cmluZyB3aGljaCBsaXN0cyBlYWNoIGNoYXJhY3RlcgorICogdXNpbmcgaXRzIGRlY2ltYWwgdmFsdWUuCisgKi8KKysgKE5TU3RyaW5nICopdmlzdWFsaXplOihOU1N0cmluZyAqKWNvZGV3b3JkczsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYSGlnaExldmVsRW5jb2RlVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmODExMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWEhpZ2hMZXZlbEVuY29kZVRlc3RDYXNlLm0KQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYSGlnaExldmVsRW5jb2RlVGVzdENhc2UuaCIKKworc3RhdGljIE5TQXJyYXkgKlRFU1RfU1lNQk9MUzsKKworQGltcGxlbWVudGF0aW9uIFpYSGlnaExldmVsRW5jb2RlVGVzdENhc2UKKworKyAodm9pZClpbml0aWFsaXplIHsKKyAgVEVTVF9TWU1CT0xTID0gQFtbW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpOTyBkYXRhQ2FwYWNpdHk6MyBlcnJvckNvZGV3b3Jkczo1IG1hdHJpeFdpZHRoOjggbWF0cml4SGVpZ2h0OjggZGF0YVJlZ2lvbnM6MV0sCisgICAgICAgICAgICAgICAgICAgW1taWFN5bWJvbEluZm8gYWxsb2NdIGluaXRXaXRoUmVjdGFuZ3VsYXI6Tk8gZGF0YUNhcGFjaXR5OjUgZXJyb3JDb2Rld29yZHM6NyBtYXRyaXhXaWR0aDoxMCBtYXRyaXhIZWlnaHQ6MTAgZGF0YVJlZ2lvbnM6MV0sCisgICAgICAgICAgICAgICAgICAgLypyZWN0Ki9bW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpZRVMgZGF0YUNhcGFjaXR5OjUgZXJyb3JDb2Rld29yZHM6NyBtYXRyaXhXaWR0aDoxNiBtYXRyaXhIZWlnaHQ6NiBkYXRhUmVnaW9uczoxXSwKKyAgICAgICAgICAgICAgICAgICBbW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpOTyBkYXRhQ2FwYWNpdHk6OCBlcnJvckNvZGV3b3JkczoxMCBtYXRyaXhXaWR0aDoxMiBtYXRyaXhIZWlnaHQ6MTIgZGF0YVJlZ2lvbnM6MV0sCisgICAgICAgICAgICAgICAgICAgLypyZWN0Ki9bW1pYU3ltYm9sSW5mbyBhbGxvY10gaW5pdFdpdGhSZWN0YW5ndWxhcjpZRVMgZGF0YUNhcGFjaXR5OjEwIGVycm9yQ29kZXdvcmRzOjExIG1hdHJpeFdpZHRoOjE0IG1hdHJpeEhlaWdodDo2IGRhdGFSZWdpb25zOjJdLAorICAgICAgICAgICAgICAgICAgIFtbWlhTeW1ib2xJbmZvIGFsbG9jXSBpbml0V2l0aFJlY3Rhbmd1bGFyOk5PIGRhdGFDYXBhY2l0eToxMyBlcnJvckNvZGV3b3JkczowIG1hdHJpeFdpZHRoOjAgbWF0cml4SGVpZ2h0OjAgZGF0YVJlZ2lvbnM6MV0sCisgICAgICAgICAgICAgICAgICAgW1taWFN5bWJvbEluZm8gYWxsb2NdIGluaXRXaXRoUmVjdGFuZ3VsYXI6Tk8gZGF0YUNhcGFjaXR5Ojc3IGVycm9yQ29kZXdvcmRzOjAgbWF0cml4V2lkdGg6MCBtYXRyaXhIZWlnaHQ6MCBkYXRhUmVnaW9uczoxXV07CisgIC8vVGhlIGxhc3QgZW50cmllcyBhcmUgZmFrZSBlbnRyaWVzIHRvIHRlc3Qgc3BlY2lhbCBjb25kaXRpb25zIHdpdGggQzQwIGVuY29kaW5nCit9CisKKy0gKHZvaWQpdXNlVGVzdFN5bWJvbHMgeworICBbWlhTeW1ib2xJbmZvIG92ZXJyaWRlU3ltYm9sU2V0OlRFU1RfU1lNQk9MU107Cit9CisKKy0gKHZvaWQpcmVzZXRTeW1ib2xzIHsKKyAgW1pYU3ltYm9sSW5mbyBvdmVycmlkZVN5bWJvbFNldDpbWlhTeW1ib2xJbmZvIHByb2RTeW1ib2xzXV07Cit9CisKKy0gKHZvaWQpdGVzdEFTQ0lJRW5jb2RhdGlvbiB7CisgIE5TU3RyaW5nICp2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiMTIzNDU2Il07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMTQyIDE2NCAxODYiLCBAIiIpOworCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCIxMjM0NTbCoyJdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjE0MiAxNjQgMTg2IDIzNSAzNiIsIEAiIik7CisKKyAgdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIjMwUTMyNDM0MzQzMDc5NDxPUVEiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIxNjAgODIgMTYyIDE3MyAxNzMgMTczIDEzNyAyMjQgNjEgODAgODIgODIiLCBAIiIpOworfQorCistICh2b2lkKXRlc3RDNDBFbmNvZGF0aW9uQmFzaWMxIHsKKyAgTlNTdHJpbmcgKnZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJBSU1BSU1BSU0iXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzAgOTEgMTEgOTEgMTEgOTEgMTEgMjU0IiwgQCIiKTsKKyAgLy8yMzAgc2hpZnRzIHRvIEM0MCBlbmNvZGF0aW9uLCAyNTQgdW5sYXRjaGVzLCAiZWxzZSIgY2FzZQorfQorCistICh2b2lkKXRlc3RDNDBFbmNvZGF0aW9uQmFzaWMyIHsKKyAgTlNTdHJpbmcgKnZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJBSU1BSUFCIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjMwIDkxIDExIDkwIDI1NSAyNTQgNjcgMTI5IiwgQCIiKTsKKyAgLy8iQiIgaXMgbm9ybWFsbHkgZW5jb2RlZCBhcyAiMTUiIChvbmUgQzQwIHZhbHVlKQorICAvLyJlbHNlIiBjYXNlOiAiQiIgaXMgZW5jb2RlZCBhcyBBU0NJSQorCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJBSU1BSUFiIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiNjYgNzQgNzggNjYgNzQgNjYgOTkgMTI5IiwgQCIiKTsgLy9FbmNvZGVkIGFzIEFTQ0lJCisgIC8vQWx0ZXJuYXRpdmUgc29sdXRpb246CisgIC8vU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzAgOTEgMTEgOTAgMjU1IDI1NCA5OSAxMjkiLCBAIiIpOworICAvLyJiIiBpcyBub3JtYWxseSBlbmNvZGVkIGFzICJTaGlmdCAzLCAyIiAodHdvIEM0MCB2YWx1ZXMpCisgIC8vImVsc2UiIGNhc2U6ICJiIiBpcyBlbmNvZGVkIGFzIEFTQ0lJCisKKyAgdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIkFJTUFJTUFJTcOLIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjMwIDkxIDExIDkxIDExIDkxIDExIDI1NCAyMzUgNzYiLCBAIiIpOworICAvL0FsdGVybmF0aXZlIHNvbHV0aW9uOgorICAvL1NUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjMwIDkxIDExIDkxIDExIDkxIDExIDExIDkgMjU0IiwgQCIiKTsKKyAgLy9FeHBsOiAyMzAgPSBzaGlmdCB0byBDNDAsICI5MSAxMSIgPSAiQUlNIiwKKyAgLy8iMTEgOSIgPSAi77+9IiA9ICJTaGlmdCAyLCBVcHBlclNoaWZ0LCA8Y2hhcj4KKyAgLy8iZWxzZSIgY2FzZQorCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJBSU1BSU1BSU3DqyJdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjIzMCA5MSAxMSA5MSAxMSA5MSAxMSAyNTQgMjM1IDEwOCIsIEAiIik7IC8vQWN0aXZhdGUgd2hlbiBhZGRpdGlvbmFsIHJlY3Rhbmd1bGFycyBhcmUgYXZhaWxhYmxlCisgIC8vRXhwbDogMjMwID0gc2hpZnQgdG8gQzQwLCAiOTEgMTEiID0gIkFJTSIsCisgIC8vIu+/vSIgaW4gQzQwIGVuY29kZXMgdG86IDEgMzAgMiAxMSB3aGljaCBkb2Vzbid0IGZpdCBpbnRvIGEgdHJpcGxldAorICAvLyIxMCAyNDMiID0KKyAgLy8yNTQgPSB1bmxhdGNoLCAyMzUgPSBVcHBlciBTaGlmdCwgMTA4ID0g77+9ID0gMHhFQi8yMzUgLSAxMjggKyAxCisgIC8vImVsc2UiIGNhc2UKK30KKworLSAodm9pZCl0ZXN0QzQwRW5jb2RhdGlvblNwZWNFeGFtcGxlIHsKKyAgLy9FeGFtcGxlIGluIEZpZ3VyZSAxIGluIHRoZSBzcGVjCisgIE5TU3RyaW5nICp2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiQTFCMkMzRDRFNUY2RzdIOEk5SjBLMUwyIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjMwIDg4IDg4IDQwIDggMTA3IDE0NyA1OSA2NyAxMjYgMjA2IDc4IDEyNiAxNDQgMTIxIDM1IDQ3IDI1NCIsIEAiIik7Cit9CisKKy0gKHZvaWQpdGVzdEM0MEVuY29kYXRpb25TcGVjaWFsQ2FzZXMxIHsKKyAgLy9TcGVjaWFsIHRlc3RzIGF2b2lkaW5nIHVsdHJhLWxvbmcgdGVzdCBzdHJpbmdzIGJlY2F1c2UgdGhlc2UgdGVzdHMgYXJlIG9ubHkgdXNlZAorICAvL3dpdGggdGhlIDE2eDQ4IHN5bWJvbCAoNDcgZGF0YSBjb2Rld29yZHMpCisgIFtzZWxmIHVzZVRlc3RTeW1ib2xzXTsKKworICBOU1N0cmluZyAqdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIkFJTUFJTUFJTUFJTUFJTUFJTSJdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjIzMCA5MSAxMSA5MSAxMSA5MSAxMSA5MSAxMSA5MSAxMSA5MSAxMSIsIEAiIik7CisgIC8vY2FzZSAiYSI6IFVubGF0Y2ggaXMgbm90IHJlcXVpcmVkCisKKyAgdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIkFJTUFJTUFJTUFJTUFJTUFJIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjMwIDkxIDExIDkxIDExIDkxIDExIDkxIDExIDkxIDExIDkwIDI0MSIsIEAiIik7CisgIC8vY2FzZSAiYiI6IEFkZCB0cmFpbGluZyBzaGlmdCAwIGFuZCBVbmxhdGNoIGlzIG5vdCByZXF1aXJlZAorCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJBSU1BSU1BSU1BSU1BSU1BIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjMwIDkxIDExIDkxIDExIDkxIDExIDkxIDExIDkxIDExIDI1NCA2NiIsIEAiIik7CisgIC8vY2FzZSAiYyI6IFVubGF0Y2ggYW5kIHdyaXRlIGxhc3QgY2hhcmFjdGVyIGluIEFTQ0lJCisKKyAgW3NlbGYgcmVzZXRTeW1ib2xzXTsKKworICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiQUlNQUlNQUlNQUlNQUlNQUkiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzAgOTEgMTEgOTEgMTEgOTEgMTEgOTEgMTEgOTEgMTEgMjU0IDY2IDc0IDEyOSAyMzciLCBAIiIpOworCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJBSU1BSU1BSU1BIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjMwIDkxIDExIDkxIDExIDkxIDExIDY2IiwgQCIiKTsKKyAgLy9jYXNlICJkIjogU2tpcCBVbmxhdGNoIGFuZCB3cml0ZSBsYXN0IGNoYXJhY3RlciBpbiBBU0NJSQorfQorCistICh2b2lkKXRlc3RDNDBFbmNvZGF0aW9uU3BlY2lhbENhc2VzMiB7CisgIE5TU3RyaW5nICp2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiQUlNQUlNQUlNQUlNQUlNQUlNQUkiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzAgOTEgMTEgOTEgMTEgOTEgMTEgOTEgMTEgOTEgMTEgOTEgMTEgMjU0IDY2IDc0IiwgQCIiKTsKKyAgLy9hdmFpbGFibGUgPiAyLCByZXN0ID0gMiAtLT4gdW5sYXRjaCBhbmQgZW5jb2RlIGFzIEFTQ0lJCit9CisKKy0gKHZvaWQpdGVzdFRleHRFbmNvZGF0aW9uIHsKKyAgTlNTdHJpbmcgKnZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJhaW1haW1haW0iXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzkgOTEgMTEgOTEgMTEgOTEgMTEgMjU0IiwgQCIiKTsKKyAgLy8yMzkgc2hpZnRzIHRvIFRleHQgZW5jb2RhdGlvbiwgMjU0IHVubGF0Y2hlcworCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJhaW1haW1haW0nIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjM5IDkxIDExIDkxIDExIDkxIDExIDI1NCA0MCAxMjkiLCBAIiIpOworICAvL2Fzc2VydEVxdWFscygiMjM5IDkxIDExIDkxIDExIDkxIDExIDcgNDkgMjU0IiwgdmlzdWFsaXplZCk7CisgIC8vVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSwgYnV0IGRvZXNuJ3Qgc3RyaWN0bHkgZm9sbG93IHRoZSBydWxlcyBpbiB0aGUgc3BlYy4KKworICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiYWltYWltYUltIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjM5IDkxIDExIDkxIDExIDg3IDIxOCAxMTAiLCBAIiIpOworCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJhaW1haW1haW1CIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjM5IDkxIDExIDkxIDExIDkxIDExIDI1NCA2NyAxMjkiLCBAIiIpOworCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJhaW1haW1haW17dHh0fSVjIiwgKGNoYXIpMHgwMDA0XV07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjM5IDkxIDExIDkxIDExIDkxIDExIDE2IDIxOCAyMzYgMTA3IDE4MSA2OSAyNTQgMTI5IDIzNyIsIEAiIik7Cit9CisKKy0gKHZvaWQpdGVzdFgxMkVuY29kYXRpb24geworICAvLzIzOCBzaGlmdHMgdG8gWDEyIGVuY29kYXRpb24sIDI1NCB1bmxhdGNoZXMKKworICBOU1N0cmluZyAqdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIkFCQz5BQkMxMjM+QUIiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzggODkgMjMzIDE0IDE5MiAxMDAgMjA3IDQ0IDMxIDY3IiwgQCIiKTsKKworICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiQUJDPkFCQzEyMz5BQkMiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzggODkgMjMzIDE0IDE5MiAxMDAgMjA3IDQ0IDMxIDI1NCA2NyA2OCIsIEAiIik7CisKKyAgdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIkFCQz5BQkMxMjM+QUJDRCJdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjIzOCA4OSAyMzMgMTQgMTkyIDEwMCAyMDcgNDQgMzEgOTYgODIgMjU0IiwgQCIiKTsKKworICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiQUJDPkFCQzEyMz5BQkNERSJdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjIzOCA4OSAyMzMgMTQgMTkyIDEwMCAyMDcgNDQgMzEgOTYgODIgNzAiLCBAIiIpOworCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJBQkM+QUJDMTIzPkFCQ0RFRiJdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjIzOCA4OSAyMzMgMTQgMTkyIDEwMCAyMDcgNDQgMzEgOTYgODIgMjU0IDcwIDcxIDEyOSAyMzciLCBAIiIpOworfQorCistICh2b2lkKXRlc3RFRElGQUNURW5jb2RhdGlvbiB7CisgIC8vMjQwIHNoaWZ0cyB0byBFRElGQUNUIGVuY29kYXRpb24KKworICBOU1N0cmluZyAqdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIi5BLkMxLjMuREFUQS4xMjNEQVRBLjEyM0RBVEEiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyNDAgMTg0IDI3IDEzMSAxOTggMjM2IDIzOCAxNiAyMSAxIDE4NyAyOCAxNzkgMTYgMjEgMSAxODcgMjggMTc5IDE2IDIxIDEiLCBAIiIpOworCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCIuQS5DMS4zLlguWDIuLiJdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjI0MCAxODQgMjcgMTMxIDE5OCAyMzYgMjM4IDk4IDIzMCA1MCA0NyA0NyIsIEAiIik7CisKKyAgdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIi5BLkMxLjMuWC5YMi4iXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyNDAgMTg0IDI3IDEzMSAxOTggMjM2IDIzOCA5OCAyMzAgNTAgNDcgMTI5IiwgQCIiKTsKKworICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiLkEuQzEuMy5YLlgyIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjQwIDE4NCAyNyAxMzEgMTk4IDIzNiAyMzggOTggMjMwIDUwIiwgQCIiKTsKKworICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiLkEuQzEuMy5YLlgiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyNDAgMTg0IDI3IDEzMSAxOTggMjM2IDIzOCA5OCAyMzAgMzEiLCBAIiIpOworCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCIuQS5DMS4zLlguIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjQwIDE4NCAyNyAxMzEgMTk4IDIzNiAyMzggOTggMjMxIDE5MiIsIEAiIik7CisKKyAgdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIi5BLkMxLjMuWCJdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjI0MCAxODQgMjcgMTMxIDE5OCAyMzYgMjM4IDg5IiwgQCIiKTsKKworICAvL0NoZWNraW5nIHRlbXBvcmFyeSB1bmxhdGNoIGZyb20gRURJRkFDVAorICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiLlhYWC5YWFguWFhYLlhYWC5YWFguWFhYLsO8WFguWFhYLlhYWC5YWFguWFhYLlhYWC5YWFgiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyNDAgMTg1IDEzNCAyNCAxODUgMTM0IDI0IDE4NSAxMzQgMjQgMTg1IDEzNCAyNCAxODUgMTM0IDI0IDE4NSAxMzQgMjQiCisgICAgICAgICAgICAgICBAIiAxMjQgNDcgMjM1IDEyNSAyNDAiIC8vPC0tIHRoaXMgaXMgdGhlIHRlbXBvcmFyeSB1bmxhdGNoCisgICAgICAgICAgICAgICBAIiA5NyAxMzkgMTUyIDk3IDEzOSAxNTIgOTcgMTM5IDE1MiA5NyAxMzkgMTUyIDk3IDEzOSAxNTIgOTcgMTM5IDE1MiA4OSA4OSIsCisgICAgICAgICAgICAgICBAIiIpOworfQorCistICh2b2lkKXRlc3RCYXNlMjU2RW5jb2RhdGlvbiB7CisgIC8vMjMxIHNoaWZ0cyB0byBCYXNlMjU2IGVuY29kYXRpb24KKworICBOU1N0cmluZyAqdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIlx1MDBBQsOkw7bDvMOpXHUwMEJCIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjMxIDQ0IDEwOCA1OSAyMjYgMTI2IDEgMTA0IiwgQCIiKTsKKyAgdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIlx1MDBBQsOkw7bDvMOpw6BcdTAwQkIiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzEgNTEgMTA4IDU5IDIyNiAxMjYgMSAxNDEgMjU0IDEyOSIsIEAiIik7CisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJcdTAwQULDpMO2w7zDqcOgw6FcdTAwQkIiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzEgNDQgMTA4IDU5IDIyNiAxMjYgMSAxNDEgMzYgMTQ3IiwgQCIiKTsKKworICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiIDIzwqMiXTsgLy9BU0NJSSBvbmx5IChmb3IgcmVmZXJlbmNlKQorICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjMzIDE1MyAyMzUgMzYgMTI5IiwgQCIiKTsKKworICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiXHUwMEFCw6TDtsO8w6lcdTAwQkIgMjM0Il07IC8vTWl4ZWQgQmFzZTI1NiArIEFTQ0lJCisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjMxIDUxIDEwOCA1OSAyMjYgMTI2IDEgMTA0IDk5IDE1MyA1MyAxMjkiLCBAIiIpOworCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJcdTAwQULDpMO2w7zDqVx1MDBCQiAyM8KjIDEyMzQ1Njc4OTAxMjM0NTY3ODkiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzEgNTUgMTA4IDU5IDIyNiAxMjYgMSAxMDQgOTkgMTAgMTYxIDE2NyAxODUgMTQyIDE2NCAxODYgMjA4IgorICAgICAgICAgICAgICAgQCIgMjIwIDE0MiAxNjQgMTg2IDIwOCA1OCAxMjkgNTkgMjA5IDEwNCAyNTQgMTUwIDQ1IiwgQCIiKTsKKworICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOltzZWxmIGNyZWF0ZUJpbmFyeU1lc3NhZ2U6MjBdXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzEgNDQgMTA4IDU5IDIyNiAxMjYgMSAxNDEgMzYgNSAzNyAxODcgODAgMjMwIDEyMyAxNyAxNjYgNjAgMjEwIDEwMyAyNTMgMTUwIiwgQCIiKTsKKyAgdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpbc2VsZiBjcmVhdGVCaW5hcnlNZXNzYWdlOjE5XV07IC8vcGFkZGluZyBuZWNlc3NhcnkgYXQgdGhlIGVuZAorICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjIzMSA2MyAxMDggNTkgMjI2IDEyNiAxIDE0MSAzNiA1IDM3IDE4NyA4MCAyMzAgMTIzIDE3IDE2NiA2MCAyMTAgMTAzIDEgMTI5IiwgQCIiKTsKKworICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOltzZWxmIGNyZWF0ZUJpbmFyeU1lc3NhZ2U6Mjc2XV07CisgIFNUQXNzZXJ0VHJ1ZShbdmlzdWFsaXplZCBoYXNQcmVmaXg6QCIyMzEgMzggMjE5IDIgMjA4IDEyMCAyMCAxNTAgMzUiXSwgQCIiKTsKKyAgU1RBc3NlcnRUcnVlKFt2aXN1YWxpemVkIGhhc1N1ZmZpeDpAIjE0NiA0MCAxOTQgMTI5Il0sIEAiIik7CisKKyAgdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpbc2VsZiBjcmVhdGVCaW5hcnlNZXNzYWdlOjI3N11dOworICBTVEFzc2VydFRydWUoW3Zpc3VhbGl6ZWQgaGFzUHJlZml4OkAiMjMxIDM4IDIyMCAyIDIwOCAxMjAgMjAgMTUwIDM1Il0sIEAiIik7CisgIFNUQXNzZXJ0VHJ1ZShbdmlzdWFsaXplZCBoYXNTdWZmaXg6QCIxNDYgNDAgMTkwIDg3Il0sIEAiIik7Cit9CisKKy0gKE5TU3RyaW5nICopY3JlYXRlQmluYXJ5TWVzc2FnZTooaW50KWxlbiB7CisgIE5TTXV0YWJsZVN0cmluZyAqc2IgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgIFtzYiBhcHBlbmRTdHJpbmc6QCJcdTAwQULDpMO2w7zDqcOgw6EtIl07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuIC0gOTsgaSsrKSB7CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgKHVuaWNoYXIpMHgwMEI3XTsKKyAgfQorICBbc2IgYXBwZW5kU3RyaW5nOkAiXHUwMEJCIl07CisgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aFN0cmluZzpzYl07Cit9CisKKy0gKHZvaWQpdGVzdFVubGF0Y2hpbmdGcm9tQzQwIHsKKyAgTlNTdHJpbmcgKnZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJBSU1BSU1BSU1BSU1haW1haW1haW0iXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzAgOTEgMTEgOTEgMTEgOTEgMTEgMjU0IDY2IDc0IDc4IDIzOSA5MSAxMSA5MSAxMSA5MSAxMSIsIEAiIik7Cit9CisKKy0gKHZvaWQpdGVzdFVubGF0Y2hpbmdGcm9tVGV4dCB7CisgIE5TU3RyaW5nICp2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiYWltYWltYWltYWltMTIzNDU2NzgiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyMzkgOTEgMTEgOTEgMTEgOTEgMTEgOTEgMTEgMjU0IDE0MiAxNjQgMTg2IDIwOCAxMjkgMjM3IiwgQCIiKTsKK30KKworLSAodm9pZCl0ZXN0SGVsbG9Xb3JsZCB7CisgIE5TU3RyaW5nICp2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiSGVsbG8gV29ybGQhIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiNzMgMjM5IDExNiAxMzAgMTc1IDEyMyAxNDggNjQgMTU4IDIzMyAyNTQgMzQiLCBAIiIpOworfQorCistICh2b2lkKXRlc3RCdWcxNjY0MjY2IHsKKyAgLy9UaGVyZSB3YXMgYW4gZXhjZXB0aW9uIGFuZCB0aGUgZW5jb2RlciBkaWQgbm90IGhhbmRsZSB0aGUgdW5sYXRjaGluZyBmcm9tCisgIC8vRURJRkFDVCBlbmNvZGluZyBjb3JyZWN0bHkKKworICBOU1N0cmluZyAqdmlzdWFsaXplZCA9IFtzZWxmIGVuY29kZUhpZ2hMZXZlbDpAIkNSRVgtVEFOOmgiXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCIyNDAgMTMgMzMgODggMTgxIDY0IDc4IDEyNCA1OSAxMDUiLCBAIiIpOworCisgIHZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJDUkVYLVRBTjpoaCJdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjI0MCAxMyAzMyA4OCAxODEgNjQgNzggMTI0IDU5IDEwNSAxMDUgMTI5IiwgQCIiKTsKKworICB2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOkAiQ1JFWC1UQU46aGhoIl07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjQwIDEzIDMzIDg4IDE4MSA2NCA3OCAxMjQgNTkgMTA1IDEwNSAxMDUiLCBAIiIpOworfQorCistICh2b2lkKXRlc3RCdWczMDQ4NTQ5IHsKKyAgLy9UaGVyZSB3YXMgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGZvciBhbiBpbGxlZ2FsIGNoYXJhY3RlciBoZXJlIGJlY2F1c2UKKyAgLy9vZiBhbiBlbmNvZGluZyBwcm9ibGVtIG9mIHRoZSBjaGFyYWN0ZXIgMHgwMDYwIGluIEphdmEgc291cmNlIGNvZGUuCisKKyAgTlNTdHJpbmcgKnZpc3VhbGl6ZWQgPSBbc2VsZiBlbmNvZGVIaWdoTGV2ZWw6QCJmaXlrbWoqUmgyYCxlNiJdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyh2aXN1YWxpemVkLCBAIjIzOSAxMjIgODcgMTU0IDQwIDcgMTcxIDExNSAyMDcgMTIgMTMwIDcxIDE1NSAyNTQgMTI5IDIzNyIsIEAiIik7Cit9CisKKy0gKHZvaWQpdGVzdE1hY3JvQ2hhcmFjdGVycyB7CisgIE5TU3RyaW5nICp2aXN1YWxpemVkID0gW3NlbGYgZW5jb2RlSGlnaExldmVsOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiWyk+JUMwNSVDNTU1NSVDNjY2NiVDJUMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuaWNoYXIpMHgwMDFFLCAodW5pY2hhcikweDAwMUQsICh1bmljaGFyKTB4MDAxQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bmljaGFyKTB4MDAxRSwgKHVuaWNoYXIpMHgwMDA0XV07CisgIC8vU1RBc3NlcnRFcXVhbE9iamVjdHModmlzdWFsaXplZCwgQCI5MiA0MiA2MyAzMSAxMzUgMzAgMTg1IDE4NSAyOSAxOTYgMTk2IDMxIDUgMTI5IDg3IDIzNyIsIEAiIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHZpc3VhbGl6ZWQsIEAiMjM2IDE4NSAxODUgMjkgMTk2IDE5NiAxMjkgNTYiLCBAIiIpOworfQorCistIChOU1N0cmluZyAqKWVuY29kZUhpZ2hMZXZlbDooTlNTdHJpbmcgKiltc2cgeworICBOU1N0cmluZyAqZW5jb2RlZCA9IFtaWEhpZ2hMZXZlbEVuY29kZXIgZW5jb2RlSGlnaExldmVsOm1zZ107CisgIC8vW1pYRGVjb2RlSGlnaExldmVsIGRlY29kZTplbmNvZGVkXTsKKyAgcmV0dXJuIFtbc2VsZiBjbGFzc10gdmlzdWFsaXplOmVuY29kZWRdOworfQorCisrIChOU1N0cmluZyAqKXZpc3VhbGl6ZTooTlNTdHJpbmcgKiljb2Rld29yZHMgeworICBOU011dGFibGVTdHJpbmcgKnNiID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICBmb3IgKGludCBpID0gMDsgaSA8IGNvZGV3b3Jkcy5sZW5ndGg7IGkrKykgeworICAgIGlmIChpID4gMCkgeworICAgICAgW3NiIGFwcGVuZFN0cmluZzpAIiAiXTsKKyAgICB9CisgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVkIiwgW2NvZGV3b3JkcyBjaGFyYWN0ZXJBdEluZGV4OmldICYgMHhGRl07CisgIH0KKyAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoU3RyaW5nOnNiXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYUGxhY2VtZW50VGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWFBsYWNlbWVudFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY0NWVlZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWFBsYWNlbWVudFRlc3RDYXNlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKKy8qKgorICogVGVzdHMgdGhlIERhdGFNYXRyaXggcGxhY2VtZW50IGFsZ29yaXRobS4KKyAqLworCitAaW50ZXJmYWNlIFpYUGxhY2VtZW50VGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L2VuY29kZXIvWlhQbGFjZW1lbnRUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYUGxhY2VtZW50VGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM0NzM1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYUGxhY2VtZW50VGVzdENhc2UubQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWERlYnVnUGxhY2VtZW50LmgiCisjaW1wb3J0ICJaWFBsYWNlbWVudFRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFBsYWNlbWVudFRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdFBsYWNlbWVudCB7CisgIE5TU3RyaW5nICpjb2Rld29yZHMgPSBbc2VsZiB1bnZpc3VhbGl6ZTpAIjY2IDc0IDc4IDY2IDc0IDc4IDEyOSA1NiAzNSAxMDIgMTkyIDk2IDIyNiAxMDAgMTU2IDEgMTA3IDIyMSJdOyAvLyJBSU1BSU0iIGVuY29kZWQKKyAgWlhEZWJ1Z1BsYWNlbWVudCAqcGxhY2VtZW50ID0gW1taWERlYnVnUGxhY2VtZW50IGFsbG9jXSBpbml0V2l0aENvZGV3b3Jkczpjb2Rld29yZHMgbnVtY29sczoxMiBudW1yb3dzOjEyXTsKKyAgW3BsYWNlbWVudCBwbGFjZV07CisgIE5TQXJyYXkgKmV4cGVjdGVkID0gQFtAIjAxMTEwMDAwMTExMSIsIEAiMDAxMDEwMTAxMDAwIiwgQCIwMTAwMDEwMTAxMDAiLCBAIjAwMTAxMDEwMDAxMCIsIEAiMDAwMTExMDAwMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEAiMDExMDAwMDEwMTAwIiwgQCIwMDAxMDAwMDExMDEiLCBAIjAxMTAwMDAxMDAwMCIsIEAiMDAxMTAwMDAxMTAxIiwgQCIxMDAwMTAwMTAxMTEiLAorICAgICAgICAgICAgICAgICAgICAgICAgQCIwMTExMDEwMTEwMTAiLCBAIjAwMTAxMTAwMTAxMCJdOworICBOU0FycmF5ICphY3R1YWwgPSBbcGxhY2VtZW50IHRvQml0RmllbGRTdHJpbmdBcnJheV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0dWFsLmNvdW50OyBpKyspIHsKKyAgICBTVEFzc2VydEVxdWFsT2JqZWN0cyhhY3R1YWxbaV0sIGV4cGVjdGVkW2ldLCBAIlJvdyAlZCIsIGkpOworICB9Cit9CisKKy0gKE5TU3RyaW5nICopdW52aXN1YWxpemU6KE5TU3RyaW5nICopdmlzdWFsaXplIHsKKyAgTlNNdXRhYmxlU3RyaW5nICpzYiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgZm9yIChOU1N0cmluZyAqdG9rZW4gaW4gW3Zpc3VhbGl6ZSBjb21wb25lbnRzU2VwYXJhdGVkQnlDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VDaGFyYWN0ZXJTZXRdXSkgeworICAgIFtzYiBhcHBlbmRGb3JtYXQ6QCIlQyIsICh1bmljaGFyKVt0b2tlbiBpbnRWYWx1ZV1dOworICB9CisgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aFN0cmluZzpzYl07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWFN5bWJvbEluZm9UZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvZGF0YW1hdHJpeC9lbmNvZGVyL1pYU3ltYm9sSW5mb1Rlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmYjAxMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWFN5bWJvbEluZm9UZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCisvKioKKyAqIFRlc3RzIHRoZSBTeW1ib2xJbmZvIGNsYXNzLgorICovCisKK0BpbnRlcmZhY2UgWlhTeW1ib2xJbmZvVGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L2VuY29kZXIvWlhTeW1ib2xJbmZvVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL2RhdGFtYXRyaXgvZW5jb2Rlci9aWFN5bWJvbEluZm9UZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzI3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9kYXRhbWF0cml4L2VuY29kZXIvWlhTeW1ib2xJbmZvVGVzdENhc2UubQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFN5bWJvbEluZm9UZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhTeW1ib2xJbmZvVGVzdENhc2UKKworLSAodm9pZCl0ZXN0U3ltYm9sSW5mbyB7CisgIFpYU3ltYm9sSW5mbyAqaW5mbyA9IFtaWFN5bWJvbEluZm8gbG9va3VwOjNdOworICBTVEFzc2VydEVxdWFscyhpbmZvLmVycm9yQ29kZXdvcmRzLCA1LCBAIiIpOworICBTVEFzc2VydEVxdWFscyhpbmZvLm1hdHJpeFdpZHRoLCA4LCBAIiIpOworICBTVEFzc2VydEVxdWFscyhpbmZvLm1hdHJpeEhlaWdodCwgOCwgQCIiKTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5zeW1ib2xXaWR0aCwgMTAsIEAiIik7CisgIFNUQXNzZXJ0RXF1YWxzKGluZm8uc3ltYm9sSGVpZ2h0LCAxMCwgQCIiKTsKKworICBpbmZvID0gW1pYU3ltYm9sSW5mbyBsb29rdXA6MyBzaGFwZTpbWlhTeW1ib2xTaGFwZUhpbnQgZm9yY2VSZWN0YW5nbGVdXTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5lcnJvckNvZGV3b3JkcywgNywgQCIiKTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5tYXRyaXhXaWR0aCwgMTYsIEAiIik7CisgIFNUQXNzZXJ0RXF1YWxzKGluZm8ubWF0cml4SGVpZ2h0LCA2LCBAIiIpOworICBTVEFzc2VydEVxdWFscyhpbmZvLnN5bWJvbFdpZHRoLCAxOCwgQCIiKTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5zeW1ib2xIZWlnaHQsIDgsIEAiIik7CisKKyAgaW5mbyA9IFtaWFN5bWJvbEluZm8gbG9va3VwOjldOworICBTVEFzc2VydEVxdWFscyhpbmZvLmVycm9yQ29kZXdvcmRzLCAxMSwgQCIiKTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5tYXRyaXhXaWR0aCwgMTQsIEAiIik7CisgIFNUQXNzZXJ0RXF1YWxzKGluZm8ubWF0cml4SGVpZ2h0LCA2LCBAIiIpOworICBTVEFzc2VydEVxdWFscyhpbmZvLnN5bWJvbFdpZHRoLCAzMiwgQCIiKTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5zeW1ib2xIZWlnaHQsIDgsIEAiIik7CisKKyAgaW5mbyA9IFtaWFN5bWJvbEluZm8gbG9va3VwOjkgc2hhcGU6W1pYU3ltYm9sU2hhcGVIaW50IGZvcmNlU3F1YXJlXV07CisgIFNUQXNzZXJ0RXF1YWxzKGluZm8uZXJyb3JDb2Rld29yZHMsIDEyLCBAIiIpOworICBTVEFzc2VydEVxdWFscyhpbmZvLm1hdHJpeFdpZHRoLCAxNCwgQCIiKTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5tYXRyaXhIZWlnaHQsIDE0LCBAIiIpOworICBTVEFzc2VydEVxdWFscyhpbmZvLnN5bWJvbFdpZHRoLCAxNiwgQCIiKTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5zeW1ib2xIZWlnaHQsIDE2LCBAIiIpOworCisgIEB0cnkgeworICAgIFtaWFN5bWJvbEluZm8gbG9va3VwOjE1NTldOworICAgIFNURmFpbChAIlRoZXJlJ3Mgbm8gcmVjdGFuZ3VsYXIgc3ltYm9sIGZvciBtb3JlIHRoYW4gMTU1OCBkYXRhIGNvZGV3b3JkcyIpOworICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgeworICAgIC8vIGV4cGVjdGVkCisgIH0KKworICBAdHJ5IHsKKyAgICBbWlhTeW1ib2xJbmZvIGxvb2t1cDo1MCBzaGFwZTpbWlhTeW1ib2xTaGFwZUhpbnQgZm9yY2VSZWN0YW5nbGVdXTsKKyAgICBTVEZhaWwoQCJUaGVyZSdzIG5vIHJlY3Rhbmd1bGFyIHN5bWJvbCBmb3IgNTAgZGF0YSBjb2Rld29yZHMiKTsKKyAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKKyAgICAvLyBleHBlY3RlZAorICB9CisKKyAgaW5mbyA9IFtaWFN5bWJvbEluZm8gbG9va3VwOjM1XTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5zeW1ib2xXaWR0aCwgMjQsIEAiIik7CisgIFNUQXNzZXJ0RXF1YWxzKGluZm8uc3ltYm9sSGVpZ2h0LCAyNCwgQCIiKTsKKworICBaWERpbWVuc2lvbiAqZml4ZWRTaXplID0gW1taWERpbWVuc2lvbiBhbGxvY10gaW5pdFdpdGhXaWR0aDoyNiBoZWlnaHQ6MjZdOworICBpbmZvID0gW1pYU3ltYm9sSW5mbyBsb29rdXA6MzUgc2hhcGU6W1pYU3ltYm9sU2hhcGVIaW50IGZvcmNlTm9uZV0gbWluU2l6ZTpmaXhlZFNpemUgbWF4U2l6ZTpmaXhlZFNpemUgZmFpbDpOT107CisgIFNUQXNzZXJ0RXF1YWxzKGluZm8uc3ltYm9sV2lkdGgsIDI2LCBAIiIpOworICBTVEFzc2VydEVxdWFscyhpbmZvLnN5bWJvbEhlaWdodCwgMjYsIEAiIik7CisKKyAgaW5mbyA9IFtaWFN5bWJvbEluZm8gbG9va3VwOjQ1IHNoYXBlOltaWFN5bWJvbFNoYXBlSGludCBmb3JjZU5vbmVdIG1pblNpemU6Zml4ZWRTaXplIG1heFNpemU6Zml4ZWRTaXplIGZhaWw6Tk9dOworICBTVEFzc2VydE5pbChpbmZvLCBAIiIpOworCisgIFpYRGltZW5zaW9uICptaW5TaXplID0gZml4ZWRTaXplOworICBaWERpbWVuc2lvbiAqbWF4U2l6ZSA9IFtbWlhEaW1lbnNpb24gYWxsb2NdIGluaXRXaXRoV2lkdGg6MzIgaGVpZ2h0OjMyXTsKKworICBpbmZvID0gW1pYU3ltYm9sSW5mbyBsb29rdXA6MzUgc2hhcGU6W1pYU3ltYm9sU2hhcGVIaW50IGZvcmNlTm9uZV0gbWluU2l6ZTptaW5TaXplIG1heFNpemU6bWF4U2l6ZSBmYWlsOk5PXTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5zeW1ib2xXaWR0aCwgMjYsIEAiIik7CisgIFNUQXNzZXJ0RXF1YWxzKGluZm8uc3ltYm9sSGVpZ2h0LCAyNiwgQCIiKTsKKworICBpbmZvID0gW1pYU3ltYm9sSW5mbyBsb29rdXA6NDAgc2hhcGU6W1pYU3ltYm9sU2hhcGVIaW50IGZvcmNlTm9uZV0gbWluU2l6ZTptaW5TaXplIG1heFNpemU6bWF4U2l6ZSBmYWlsOk5PXTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5zeW1ib2xXaWR0aCwgMjYsIEAiIik7CisgIFNUQXNzZXJ0RXF1YWxzKGluZm8uc3ltYm9sSGVpZ2h0LCAyNiwgQCIiKTsKKworICBpbmZvID0gW1pYU3ltYm9sSW5mbyBsb29rdXA6NDUgc2hhcGU6W1pYU3ltYm9sU2hhcGVIaW50IGZvcmNlTm9uZV0gbWluU2l6ZTptaW5TaXplIG1heFNpemU6bWF4U2l6ZSBmYWlsOk5PXTsKKyAgU1RBc3NlcnRFcXVhbHMoaW5mby5zeW1ib2xXaWR0aCwgMzIsIEAiIik7CisgIFNUQXNzZXJ0RXF1YWxzKGluZm8uc3ltYm9sSGVpZ2h0LCAzMiwgQCIiKTsKKworICBpbmZvID0gW1pYU3ltYm9sSW5mbyBsb29rdXA6NjMgc2hhcGU6W1pYU3ltYm9sU2hhcGVIaW50IGZvcmNlTm9uZV0gbWluU2l6ZTptaW5TaXplIG1heFNpemU6bWF4U2l6ZSBmYWlsOk5PXTsKKyAgU1RBc3NlcnROaWwoaW5mbywgQCIiKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvbmVnYXRpdmUvRmFsc2VQb3NpdGl2ZXMyQmxhY2tCb3hUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvbmVnYXRpdmUvRmFsc2VQb3NpdGl2ZXMyQmxhY2tCb3hUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZGE2NTMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9uZWdhdGl2ZS9GYWxzZVBvc2l0aXZlczJCbGFja0JveFRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBGYWxzZVBvc2l0aXZlczJCbGFja0JveFRlc3RDYXNlIDogQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvbmVnYXRpdmUvRmFsc2VQb3NpdGl2ZXMyQmxhY2tCb3hUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvbmVnYXRpdmUvRmFsc2VQb3NpdGl2ZXMyQmxhY2tCb3hUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzY3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9uZWdhdGl2ZS9GYWxzZVBvc2l0aXZlczJCbGFja0JveFRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiRmFsc2VQb3NpdGl2ZXMyQmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gRmFsc2VQb3NpdGl2ZXMyQmxhY2tCb3hUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9mYWxzZXBvc2l0aXZlcy0yIl07CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjQgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDo0IHJvdGF0aW9uOjkwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjQgcm90YXRpb246MTgwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjQgcm90YXRpb246MjcwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL25lZ2F0aXZlL0ZhbHNlUG9zaXRpdmVzQmxhY2tCb3hUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvbmVnYXRpdmUvRmFsc2VQb3NpdGl2ZXNCbGFja0JveFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhNDU3NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL25lZ2F0aXZlL0ZhbHNlUG9zaXRpdmVzQmxhY2tCb3hUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0TmVnYXRpdmVCbGFja0JveFRlc3RDYXNlLmgiCisKK0BpbnRlcmZhY2UgRmFsc2VQb3NpdGl2ZXNCbGFja0JveFRlc3RDYXNlIDogQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvbmVnYXRpdmUvRmFsc2VQb3NpdGl2ZXNCbGFja0JveFRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9uZWdhdGl2ZS9GYWxzZVBvc2l0aXZlc0JsYWNrQm94VGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJjMTA1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvbmVnYXRpdmUvRmFsc2VQb3NpdGl2ZXNCbGFja0JveFRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiRmFsc2VQb3NpdGl2ZXNCbGFja0JveFRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBGYWxzZVBvc2l0aXZlc0JsYWNrQm94VGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbiB0ZXN0QmFzZVBhdGhTdWZmaXg6QCJSZXNvdXJjZXMvYmxhY2tib3gvZmFsc2Vwb3NpdGl2ZXMiXTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6MiByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjIgcm90YXRpb246OTAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MiByb3RhdGlvbjoxODAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MiByb3RhdGlvbjoyNzAuMGZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3N1cGVyIHJ1blRlc3RzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvbmVnYXRpdmUvUGFydGlhbEJsYWNrQm94VGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL25lZ2F0aXZlL1BhcnRpYWxCbGFja0JveFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzODk1ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL25lZ2F0aXZlL1BhcnRpYWxCbGFja0JveFRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBQYXJ0aWFsQmxhY2tCb3hUZXN0Q2FzZSA6IEFic3RyYWN0TmVnYXRpdmVCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL25lZ2F0aXZlL1BhcnRpYWxCbGFja0JveFRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9uZWdhdGl2ZS9QYXJ0aWFsQmxhY2tCb3hUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYzZjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9uZWdhdGl2ZS9QYXJ0aWFsQmxhY2tCb3hUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlBhcnRpYWxCbGFja0JveFRlc3RDYXNlLmgiCisKKy8qKgorICogVGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCBwYXJ0aWFsIGJhcmNvZGVzIGRvIG5vdCBkZWNvZGUuCisgKi8KK0BpbXBsZW1lbnRhdGlvbiBQYXJ0aWFsQmxhY2tCb3hUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9wYXJ0aWFsIl07CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjIgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDoyIHJvdGF0aW9uOjkwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjIgcm90YXRpb246MTgwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjIgcm90YXRpb246MjcwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL25lZ2F0aXZlL1Vuc3VwcG9ydGVkQmxhY2tCb3hUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvbmVnYXRpdmUvVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ1MTcwNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL25lZ2F0aXZlL1Vuc3VwcG9ydGVkQmxhY2tCb3hUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0TmVnYXRpdmVCbGFja0JveFRlc3RDYXNlLmgiCisKK0BpbnRlcmZhY2UgVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlIDogQWJzdHJhY3ROZWdhdGl2ZUJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvbmVnYXRpdmUvVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9uZWdhdGl2ZS9VbnN1cHBvcnRlZEJsYWNrQm94VGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTU0Yjg2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvbmVnYXRpdmUvVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlLm0KQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlLmgiCisKKy8qKgorICogVGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCB1bnN1cHBvcnRlZCBiYXJjb2RlcyBkbyBub3QgZGVjb2RlLgorICovCitAaW1wbGVtZW50YXRpb24gVW5zdXBwb3J0ZWRCbGFja0JveFRlc3RDYXNlCisKKy0gKGlkKWluaXRXaXRoSW52b2NhdGlvbjooTlNJbnZvY2F0aW9uICopaW52b2NhdGlvbiB7CisgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnZvY2F0aW9uOmludm9jYXRpb24gdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L3Vuc3VwcG9ydGVkIl07CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjAgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDowIHJvdGF0aW9uOjkwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjAgcm90YXRpb246MTgwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjAgcm90YXRpb246MjcwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kYWJhckJsYWNrQm94MVRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGFiYXJCbGFja0JveDFUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYmE2NzIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGFiYXJCbGFja0JveDFUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIENvZGFiYXJCbGFja0JveDFUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGFiYXJCbGFja2JveDFUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RhYmFyQmxhY2tib3gxVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmMxNmYyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RhYmFyQmxhY2tib3gxVGVzdENhc2UubQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJDb2RhYmFyQmxhY2tCb3gxVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIENvZGFiYXJCbGFja0JveDFUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L2NvZGFiYXItMSIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdENvZGFiYXJdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDoxMSB0cnlIYXJkZXJDb3VudDoxMSByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjExIHRyeUhhcmRlckNvdW50OjExIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGUxMjhCbGFja0JveDFUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMTI4QmxhY2tCb3gxVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzVhYjJiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMTI4QmxhY2tCb3gxVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBDb2RlMTI4QmxhY2tCb3gxVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMTI4QmxhY2tCb3gxVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTEyOEJsYWNrQm94MVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJkYzg5MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTEyOEJsYWNrQm94MVRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQ29kZTEyOEJsYWNrQm94MVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBDb2RlMTI4QmxhY2tCb3gxVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTEiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRDb2RlMTI4XTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6NSB0cnlIYXJkZXJDb3VudDo1IHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6NSB0cnlIYXJkZXJDb3VudDo1IHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGUxMjhCbGFja0JveDJUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMTI4QmxhY2tCb3gyVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTlkZjQwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMTI4QmxhY2tCb3gyVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBDb2RlMTI4QmxhY2tCb3gyVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMTI4QmxhY2tCb3gyVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTEyOEJsYWNrQm94MlRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlZGE4MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTEyOEJsYWNrQm94MlRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQ29kZTEyOEJsYWNrQm94MlRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBDb2RlMTI4QmxhY2tCb3gyVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9jb2RlMTI4LTIiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRDb2RlMTI4XTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6MzYgdHJ5SGFyZGVyQ291bnQ6Mzkgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDozNiB0cnlIYXJkZXJDb3VudDozOSByb3RhdGlvbjoxODAuMGZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3N1cGVyIHJ1blRlc3RzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMTI4QmxhY2tCb3gzVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTEyOEJsYWNrQm94M1Rlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmMDBiMgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTEyOEJsYWNrQm94M1Rlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLmgiCisKK0BpbnRlcmZhY2UgQ29kZTEyOEJsYWNrQm94M1Rlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTEyOEJsYWNrQm94M1Rlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGUxMjhCbGFja0JveDNUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYjllOTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGUxMjhCbGFja0JveDNUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkNvZGUxMjhCbGFja0JveDNUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gQ29kZTEyOEJsYWNrQm94M1Rlc3RDYXNlCisKKy0gKGlkKWluaXRXaXRoSW52b2NhdGlvbjooTlNJbnZvY2F0aW9uICopaW52b2NhdGlvbiB7CisgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnZvY2F0aW9uOmludm9jYXRpb24KKyAgICAgICAgICAgICAgICB0ZXN0QmFzZVBhdGhTdWZmaXg6QCJSZXNvdXJjZXMvYmxhY2tib3gvY29kZTEyOC0zIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0Q29kZTEyOF07CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjIgdHJ5SGFyZGVyQ291bnQ6MiByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjIgdHJ5SGFyZGVyQ291bnQ6MiByb3RhdGlvbjoxODAuMGZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3N1cGVyIHJ1blRlc3RzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMzlCbGFja0JveDFUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMzlCbGFja0JveDFUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOGY0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGUzOUJsYWNrQm94MVRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLmgiCisKK0BpbnRlcmZhY2UgQ29kZTM5QmxhY2tCb3gxVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMzlCbGFja0JveDFUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMzlCbGFja0JveDFUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNmZkMGIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGUzOUJsYWNrQm94MVRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQ29kZTM5QmxhY2tCb3gxVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIENvZGUzOUJsYWNrQm94MVRlc3RDYXNlCisKKy0gKGlkKWluaXRXaXRoSW52b2NhdGlvbjooTlNJbnZvY2F0aW9uICopaW52b2NhdGlvbiB7CisgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnZvY2F0aW9uOmludm9jYXRpb24KKyAgICAgICAgICAgICAgICB0ZXN0QmFzZVBhdGhTdWZmaXg6QCJSZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTEiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRDb2RlMzldOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDo0IHRyeUhhcmRlckNvdW50OjQgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDo0IHRyeUhhcmRlckNvdW50OjQgcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTM5QmxhY2tCb3gzVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTM5QmxhY2tCb3gzVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU5MGM2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMzlCbGFja0JveDNUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIENvZGUzOUJsYWNrQm94M1Rlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTM5QmxhY2tCb3gzVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTM5QmxhY2tCb3gzVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzMzNjY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMzlCbGFja0JveDNUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkNvZGUzOUJsYWNrQm94M1Rlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBDb2RlMzlCbGFja0JveDNUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L2NvZGUzOS0zIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0Q29kZTM5XTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6MTcgdHJ5SGFyZGVyQ291bnQ6MTcgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDoxNyB0cnlIYXJkZXJDb3VudDoxNyByb3RhdGlvbjoxODAuMGZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3N1cGVyIHJ1blRlc3RzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMzlFeHRlbmRlZEJsYWNrQm94MlRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGUzOUV4dGVuZGVkQmxhY2tCb3gyVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTAzZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlMzlFeHRlbmRlZEJsYWNrQm94MlRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLmgiCisKK0BpbnRlcmZhY2UgQ29kZTM5RXh0ZW5kZWRCbGFja0JveDJUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGUzOUV4dGVuZGVkQmxhY2tCb3gyVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTM5RXh0ZW5kZWRCbGFja0JveDJUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMDg1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL0NvZGUzOUV4dGVuZGVkQmxhY2tCb3gyVGVzdENhc2UubQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJDb2RlMzlFeHRlbmRlZEJsYWNrQm94MlRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBDb2RlMzlFeHRlbmRlZEJsYWNrQm94MlRlc3RDYXNlCisKKy0gKGlkKWluaXRXaXRoSW52b2NhdGlvbjooTlNJbnZvY2F0aW9uICopaW52b2NhdGlvbiB7CisgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnZvY2F0aW9uOmludm9jYXRpb24KKyAgICAgICAgICAgICAgICB0ZXN0QmFzZVBhdGhTdWZmaXg6QCJSZXNvdXJjZXMvYmxhY2tib3gvY29kZTM5LTIiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhDb2RlMzlSZWFkZXIgYWxsb2NdIGluaXRVc2luZ0NoZWNrRGlnaXQ6Tk8gZXh0ZW5kZWRNb2RlOllFU10KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRDb2RlMzldOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDoyIHRyeUhhcmRlckNvdW50OjIgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDoyIHRyeUhhcmRlckNvdW50OjIgcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTkzQmxhY2tCb3gxVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTkzQmxhY2tCb3gxVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWQyYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlOTNCbGFja0JveDFUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIENvZGU5M0JsYWNrQm94MVRlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTkzQmxhY2tCb3gxVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvQ29kZTkzQmxhY2tCb3gxVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTQ1Yzc1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9Db2RlOTNCbGFja0JveDFUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkNvZGU5M0JsYWNrQm94MVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBDb2RlOTNCbGFja0JveDFUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L2NvZGU5My0xIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0Q29kZTkzXTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6MyB0cnlIYXJkZXJDb3VudDozIHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MyB0cnlIYXJkZXJDb3VudDozIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL0VBTjEzQmxhY2tCb3gxVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDFUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzUyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL0VBTjEzQmxhY2tCb3gxVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBFQU4xM0JsYWNrQm94MVRlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDFUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU4xM0JsYWNrQm94MVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3ODI2NAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDFUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkVBTjEzQmxhY2tCb3gxVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIEVBTjEzQmxhY2tCb3gxVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9lYW4xMy0xIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0RWFuMTNdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDozMCB0cnlIYXJkZXJDb3VudDozMiByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjI3IHRyeUhhcmRlckNvdW50OjMyIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL0VBTjEzQmxhY2tCb3gyVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDJUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMjg3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL0VBTjEzQmxhY2tCb3gyVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBFQU4xM0JsYWNrQm94MlRlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDJUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU4xM0JsYWNrQm94MlRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyMTEwZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDJUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkVBTjEzQmxhY2tCb3gyVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIEVBTjEzQmxhY2tCb3gyVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9lYW4xMy0yIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0RWFuMTNdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDoxMiB0cnlIYXJkZXJDb3VudDoxNyBtYXhNaXNyZWFkczowIG1heFRyeUhhcmRlck1pc3JlYWRzOjEgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDoxMSB0cnlIYXJkZXJDb3VudDoxNyBtYXhNaXNyZWFkczowIG1heFRyeUhhcmRlck1pc3JlYWRzOjEgcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDNUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU4xM0JsYWNrQm94M1Rlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkOTBjMAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDNUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIEVBTjEzQmxhY2tCb3gzVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU4xM0JsYWNrQm94M1Rlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL0VBTjEzQmxhY2tCb3gzVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTdjNTFlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU4xM0JsYWNrQm94M1Rlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiRUFOMTNCbGFja0JveDNUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gRUFOMTNCbGFja0JveDNUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTMiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRFYW4xM107CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjUzIHRyeUhhcmRlckNvdW50OjU1IHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6NTUgdHJ5SGFyZGVyQ291bnQ6NTUgcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDRUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU4xM0JsYWNrQm94NFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxMDA3ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDRUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIEVBTjEzQmxhY2tCb3g0VGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU4xM0JsYWNrQm94NFRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL0VBTjEzQmxhY2tCb3g0VGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGY4MmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU4xM0JsYWNrQm94NFRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiRUFOMTNCbGFja0JveDRUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gRUFOMTNCbGFja0JveDRUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTQiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRFYW4xM107CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjYgdHJ5SGFyZGVyQ291bnQ6MTMgbWF4TWlzcmVhZHM6MSBtYXhUcnlIYXJkZXJNaXNyZWFkczoxIHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6NyB0cnlIYXJkZXJDb3VudDoxMyBtYXhNaXNyZWFkczoxIG1heFRyeUhhcmRlck1pc3JlYWRzOjEgcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDVCbHVycnlUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU4xM0JsYWNrQm94NUJsdXJyeVRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1MGQ0NgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOMTNCbGFja0JveDVCbHVycnlUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIEVBTjEzQmxhY2tCb3g1Qmx1cnJ5VGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU4xM0JsYWNrQm94NUJsdXJyeVRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL0VBTjEzQmxhY2tCb3g1Qmx1cnJ5VGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTMyZTJjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU4xM0JsYWNrQm94NUJsdXJyeVRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiRUFOMTNCbGFja0JveDVCbHVycnlUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gRUFOMTNCbGFja0JveDVCbHVycnlUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L2VhbjEzLTUiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRFYW4xM107CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjAgdHJ5SGFyZGVyQ291bnQ6MCByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjAgdHJ5SGFyZGVyQ291bnQ6MCByb3RhdGlvbjoxODAuMGZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3N1cGVyIHJ1blRlc3RzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9FQU44QmxhY2tCb3gxVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOOEJsYWNrQm94MVRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlY2UwNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOOEJsYWNrQm94MVRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLmgiCisKK0BpbnRlcmZhY2UgRUFOOEJsYWNrQm94MVRlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvRUFOOEJsYWNrQm94MVRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL0VBTjhCbGFja0JveDFUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGI3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL0VBTjhCbGFja0JveDFUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkVBTjhCbGFja0JveDFUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gRUFOOEJsYWNrQm94MVRlc3RDYXNlCisKKy0gKGlkKWluaXRXaXRoSW52b2NhdGlvbjooTlNJbnZvY2F0aW9uICopaW52b2NhdGlvbiB7CisgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnZvY2F0aW9uOmludm9jYXRpb24KKyAgICAgICAgICAgICAgICB0ZXN0QmFzZVBhdGhTdWZmaXg6QCJSZXNvdXJjZXMvYmxhY2tib3gvZWFuOC0xIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0RWFuOF07CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjggdHJ5SGFyZGVyQ291bnQ6OCByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjggdHJ5SGFyZGVyQ291bnQ6OCByb3RhdGlvbjoxODAuMGZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3N1cGVyIHJ1blRlc3RzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9JVEZCbGFja0JveDFUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9JVEZCbGFja0JveDFUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNjg4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL0lURkJsYWNrQm94MVRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLmgiCisKK0BpbnRlcmZhY2UgSVRGQmxhY2tCb3gxVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9JVEZCbGFja0JveDFUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9JVEZCbGFja0JveDFUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MGRmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL0lURkJsYWNrQm94MVRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiSVRGQmxhY2tCb3gxVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIElURkJsYWNrQm94MVRlc3RDYXNlCisKKy0gKGlkKWluaXRXaXRoSW52b2NhdGlvbjooTlNJbnZvY2F0aW9uICopaW52b2NhdGlvbiB7CisgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnZvY2F0aW9uOmludm9jYXRpb24KKyAgICAgICAgICAgICAgICB0ZXN0QmFzZVBhdGhTdWZmaXg6QCJSZXNvdXJjZXMvYmxhY2tib3gvaXRmLTEiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRJVEZdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDo4IHRyeUhhcmRlckNvdW50OjEyIHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MTEgdHJ5SGFyZGVyQ291bnQ6MTIgcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvSVRGQmxhY2tCb3gyVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvSVRGQmxhY2tCb3gyVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTg5ZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9JVEZCbGFja0JveDJUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIElURkJsYWNrQm94MlRlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvSVRGQmxhY2tCb3gyVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvSVRGQmxhY2tCb3gyVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzA1ZDJiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9JVEZCbGFja0JveDJUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIklURkJsYWNrQm94MlRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBJVEZCbGFja0JveDJUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L2l0Zi0yIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0SVRGXTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6OCB0cnlIYXJkZXJDb3VudDo5IHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6NyB0cnlIYXJkZXJDb3VudDo5IHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0FCbGFja0JveDFUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3gxVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjcyYmMzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3gxVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBVUENBQmxhY2tCb3gxVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3gxVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94MVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY3MThiMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94MVRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiVVBDQUJsYWNrQm94MVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBVUENBQmxhY2tCb3gxVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC91cGNhLTEiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENBXTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6MTQgdHJ5SGFyZGVyQ291bnQ6MTggbWF4TWlzcmVhZHM6MCBtYXhUcnlIYXJkZXJNaXNyZWFkczoxIHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MTYgdHJ5SGFyZGVyQ291bnQ6MTggbWF4TWlzcmVhZHM6MCBtYXhUcnlIYXJkZXJNaXNyZWFkczoxIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0FCbGFja0JveDJUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3gyVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGMzNDhhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3gyVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBVUENBQmxhY2tCb3gyVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3gyVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94MlRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwYWU0YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94MlRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiVVBDQUJsYWNrQm94MlRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBVUENBQmxhY2tCb3gyVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC91cGNhLTIiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENBXTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6MzAgdHJ5SGFyZGVyQ291bnQ6MzYgbWF4TWlzcmVhZHM6MCBtYXhUcnlIYXJkZXJNaXNyZWFkczoyIHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MzEgdHJ5SGFyZGVyQ291bnQ6MzYgbWF4TWlzcmVhZHM6MCBtYXhUcnlIYXJkZXJNaXNyZWFkczoyIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0FCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDYwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0FCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBVUENBQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5NWFmYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlVQQ0FCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFVQQ0FCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC91cGNhLTMiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENBXTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6NyB0cnlIYXJkZXJDb3VudDo5IG1heE1pc3JlYWRzOjAgbWF4VHJ5SGFyZGVyTWlzcmVhZHM6MiByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjggdHJ5SGFyZGVyQ291bnQ6OSBtYXhNaXNyZWFkczowIG1heFRyeUhhcmRlck1pc3JlYWRzOjIgcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94NFRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0FCbGFja0JveDRUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjA2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0FCbGFja0JveDRUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIFVQQ0FCbGFja0JveDRUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0FCbGFja0JveDRUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3g0VGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjNmN2NlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3g0VGVzdENhc2UubQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJVUENBQmxhY2tCb3g0VGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFVQQ0FCbGFja0JveDRUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L3VwY2EtNCIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdFVQQ0FdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDo5IHRyeUhhcmRlckNvdW50OjExIG1heE1pc3JlYWRzOjAgbWF4VHJ5SGFyZGVyTWlzcmVhZHM6MSByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjkgdHJ5SGFyZGVyQ291bnQ6MTEgbWF4TWlzcmVhZHM6MCBtYXhUcnlIYXJkZXJNaXNyZWFkczoxIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0FCbGFja0JveDVUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3g1VGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzliOTdmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3g1VGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBVUENBQmxhY2tCb3g1VGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3g1VGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94NVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwYWJiMwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94NVRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiVVBDQUJsYWNrQm94NVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBVUENBQmxhY2tCb3g1VGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC91cGNhLTUiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENBXTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6MjAgdHJ5SGFyZGVyQ291bnQ6MjMgbWF4TWlzcmVhZHM6MCBtYXhUcnlIYXJkZXJNaXNyZWFkczowIHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MjIgdHJ5SGFyZGVyQ291bnQ6MjMgbWF4TWlzcmVhZHM6MCBtYXhUcnlIYXJkZXJNaXNyZWFkczowIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0FCbGFja0JveDZCbHVycnlUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3g2Qmx1cnJ5VGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODNjODIxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3g2Qmx1cnJ5VGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBVUENBQmxhY2tCb3g2Qmx1cnJ5VGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENBQmxhY2tCb3g2Qmx1cnJ5VGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94NkJsdXJyeVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1MDc3MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDQUJsYWNrQm94NkJsdXJyeVRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiVVBDQUJsYWNrQm94NkJsdXJyeVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBVUENBQmxhY2tCb3g2Qmx1cnJ5VGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC91cGNhLTYiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENBXTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6MCB0cnlIYXJkZXJDb3VudDowIHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MCB0cnlIYXJkZXJDb3VudDowIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0VBTkV4dGVuc2lvbkJsYWNrQm94MVRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0VBTkV4dGVuc2lvbkJsYWNrQm94MVRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhZjhmNgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDRUFORXh0ZW5zaW9uQmxhY2tCb3gxVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBVUENFQU5FeHRlbnNpb25CbGFja0JveDFUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0VBTkV4dGVuc2lvbkJsYWNrQm94MVRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0VBTkV4dGVuc2lvbkJsYWNrQm94MVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFlMTkxOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDRUFORXh0ZW5zaW9uQmxhY2tCb3gxVGVzdENhc2UubQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJVUENFQU5FeHRlbnNpb25CbGFja0JveDFUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gVVBDRUFORXh0ZW5zaW9uQmxhY2tCb3gxVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC91cGNlYW4tZXh0ZW5zaW9uLTEiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRFYW4xM107CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjIgdHJ5SGFyZGVyQ291bnQ6MiByb3RhdGlvbjowLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDRUJsYWNrQm94MVRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0VCbGFja0JveDFUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzlhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0VCbGFja0JveDFUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIFVQQ0VCbGFja0JveDFUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0VCbGFja0JveDFUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENFQmxhY2tCb3gxVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTg1ZDFlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENFQmxhY2tCb3gxVGVzdENhc2UubQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJVUENFQmxhY2tCb3gxVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFVQQ0VCbGFja0JveDFUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMSIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdFVQQ0VdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDozIHRyeUhhcmRlckNvdW50OjMgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDozIHRyeUhhcmRlckNvdW50OjMgcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDRUJsYWNrQm94MlRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0VCbGFja0JveDJUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjQyNTEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0VCbGFja0JveDJUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIFVQQ0VCbGFja0JveDJUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0VCbGFja0JveDJUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENFQmxhY2tCb3gyVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjQ2MGNiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENFQmxhY2tCb3gyVGVzdENhc2UubQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJVUENFQmxhY2tCb3gyVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFVQQ0VCbGFja0JveDJUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMiIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdFVQQ0VdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDozMSB0cnlIYXJkZXJDb3VudDozNSBtYXhNaXNyZWFkczowIG1heFRyeUhhcmRlck1pc3JlYWRzOjEgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDozMSB0cnlIYXJkZXJDb3VudDozNSBtYXhNaXNyZWFkczoxIG1heFRyeUhhcmRlck1pc3JlYWRzOjEgcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDRUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENFQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4MWJiYQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvVVBDRUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIFVQQ0VCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENFQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL1VQQ0VCbGFja0JveDNSZWZsZWN0aXZlVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTFjNzEwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9VUENFQmxhY2tCb3gzUmVmbGVjdGl2ZVRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiVVBDRUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gVVBDRUJsYWNrQm94M1JlZmxlY3RpdmVUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L3VwY2UtMyIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdFVQQ0VdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDo2IHRyeUhhcmRlckNvdW50Ojggcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDo2IHRyeUhhcmRlckNvdW50Ojggcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvWlhDb2RhQmFyV3JpdGVyVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvWlhDb2RhQmFyV3JpdGVyVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmM0NzcxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9aWENvZGFCYXJXcml0ZXJUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYQ29kYUJhcldyaXRlclRlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9aWENvZGFCYXJXcml0ZXJUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9aWENvZGFCYXJXcml0ZXJUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzkwYjEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL1pYQ29kYUJhcldyaXRlclRlc3RDYXNlLm0KQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhDb2RhQmFyV3JpdGVyVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFpYQ29kYUJhcldyaXRlclRlc3RDYXNlCisKKy0gKHZvaWQpIHRlc3RFbmNvZGUgeworICAvLyAxMDAxMDAxMDExIDAgMTEwMTAxMDAxIDAgMTAxMDExMDAxIDAgMTEwMTAxMDAxIDAgMTAxMDAxMTAxIDAgMTEwMDEwMTAxIDAgMTEwMTEwMTAxMSAwCisgIC8vIDEwMDEwMDEwMTEKKyAgTlNTdHJpbmcgKnJlc3VsdFN0ciA9IEAiMDAwMDAwMDAwMCIKKyAgICBAIjEwMDEwMDEwMTEwMTEwMTAxMDAxMDEwMTAxMTAwMTAxMTAxMDEwMDEwMTAxMDAxMTAxMDExMDAxMDEwMTAxMTAxMTAxMDExMDEwMDEwMDEwMTEiCisgICAgQCIwMDAwMDAwMDAwIjsKKyAgWlhCaXRNYXRyaXggKnJlc3VsdCA9IFtbW1pYQ29kYUJhcldyaXRlciBhbGxvY10gaW5pdF0gZW5jb2RlOkAiQjUxNS0zL04iIGZvcm1hdDprQmFyY29kZUZvcm1hdENvZGFiYXIgd2lkdGg6KGludClyZXN1bHRTdHIubGVuZ3RoIGhlaWdodDowIGVycm9yOm5pbF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0U3RyLmxlbmd0aDsgaSsrKSB7CisgICAgU1RBc3NlcnRFcXVhbHMoW3Jlc3VsdCBnZXRYOmkgeTowXSwgKEJPT0wpKFtyZXN1bHRTdHIgY2hhcmFjdGVyQXRJbmRleDppXSA9PSAnMScpLCBAIkVsZW1lbnQgJWQiLCBpKTsKKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1pYRUFOMTNXcml0ZXJUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9aWEVBTjEzV3JpdGVyVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjI5N2FlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9aWEVBTjEzV3JpdGVyVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxTZW5UZXN0aW5nS2l0L1NlblRlc3RpbmdLaXQuaD4KKworQGludGVyZmFjZSBaWEVBTjEzV3JpdGVyVGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1pYRUFOMTNXcml0ZXJUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9aWEVBTjEzV3JpdGVyVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2MxZGEyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9aWEVBTjEzV3JpdGVyVGVzdENhc2UubQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEVBTjEzV3JpdGVyVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFpYRUFOMTNXcml0ZXJUZXN0Q2FzZQorCistICh2b2lkKXRlc3RFbmNvZGUgeworICBOU1N0cmluZyAqdGVzdFN0ciA9IEAiMDAwMTAxMDAwMTAxMTAxMDAxMTEwMTEwMDExMDAxMDAxMTAxMTExMDEwMDExMTAxMDEwMTAxMTAwMTEwMTEwMTEwMDEwMDAwMTAxMDExMTAwMTAwMTExMDEwMDAxMDAxMDEwMDAiOworICBaWEJpdE1hdHJpeCAqcmVzdWx0ID0gW1tbWlhFQU4xM1dyaXRlciBhbGxvY10gaW5pdF0gZW5jb2RlOkAiNTkwMTIzNDEyMzQ1NyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDprQmFyY29kZUZvcm1hdEVhbjEzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6KGludCl0ZXN0U3RyLmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjpuaWxdOworICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RTdHIubGVuZ3RoOyBpKyspIHsKKyAgICBTVEFzc2VydEVxdWFscyhbcmVzdWx0IGdldFg6aSB5OjBdLCAoQk9PTCkoW3Rlc3RTdHIgY2hhcmFjdGVyQXRJbmRleDppXSA9PSAnMScpLCBAIkVsZW1lbnQgJWQiLCBpKTsKKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1pYRUFOOFdyaXRlclRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL1pYRUFOOFdyaXRlclRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5NzY2ZQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvWlhFQU44V3JpdGVyVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxTZW5UZXN0aW5nS2l0L1NlblRlc3RpbmdLaXQuaD4KKworQGludGVyZmFjZSBaWEVBTjhXcml0ZXJUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvWlhFQU44V3JpdGVyVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvWlhFQU44V3JpdGVyVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzVhNjM4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9aWEVBTjhXcml0ZXJUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRUFOOFdyaXRlclRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEVBTjhXcml0ZXJUZXN0Q2FzZQorCistICh2b2lkKXRlc3RFbmNvZGUgeworICBOU1N0cmluZyAqdGVzdFN0ciA9IEAiMDAwMTAxMDAwMTAxMTAxMDExMTEwMTExMTAxMDExMDExMTAxMDEwMTAwMTExMDExMTAwMTAxMDAwMTAwMTAxMTEwMDEwMTAwMCI7CisgIFpYQml0TWF0cml4ICpyZXN1bHQgPSBbW1taWEVBTjhXcml0ZXIgYWxsb2NdIGluaXRdIGVuY29kZTpAIjk2Mzg1MDc0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRFYW44CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDooaW50KXRlc3RTdHIubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDowCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjpuaWxdOworICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RTdHIubGVuZ3RoOyBpKyspIHsKKyAgICBTVEFzc2VydEVxdWFscyhbcmVzdWx0IGdldFg6aSB5OjBdLCAoQk9PTCkoW3Rlc3RTdHIgY2hhcmFjdGVyQXRJbmRleDppXSA9PSAnMScpLCBAIkVsZW1lbnQgJWQiLCBpKTsKKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1pYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydFRlc3QuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0VGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMGU1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL1pYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydFRlc3QuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxTZW5UZXN0aW5nS2l0L1NlblRlc3RpbmdLaXQuaD4KKworQGludGVyZmFjZSBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnRUZXN0IDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9aWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnRUZXN0Lm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL1pYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydFRlc3QubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2U4YTAwCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9aWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnRUZXN0Lm0KQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0VGVzdC5oIgorCitAaW1wbGVtZW50YXRpb24gWlhFQU5NYW51ZmFjdHVyZXJPcmdTdXBwb3J0VGVzdAorCistICh2b2lkKXRlc3RFbmNvZGUgeworICBaWEVBTk1hbnVmYWN0dXJlck9yZ1N1cHBvcnQgKnN1cHBvcnQgPSBbW1pYRUFOTWFudWZhY3R1cmVyT3JnU3VwcG9ydCBhbGxvY10gaW5pdF07CisgIFNUQXNzZXJ0TmlsKFtzdXBwb3J0IGxvb2t1cENvdW50cnlJZGVudGlmaWVyOkAiNDcyMDAwIl0sIEAiRXhwZWN0ZWQgY291bnRyeSBpZGVudGlmaWVyIHRvIGJlIG5pbCIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbc3VwcG9ydCBsb29rdXBDb3VudHJ5SWRlbnRpZmllcjpAIjAwMDAwMCJdLCBAIlVTL0NBIiwgQCJFeHBlY3RlZCBjb3VudHJ5IGlkZW50aWZpZXIgdG8gYmUgVVMvQ0EiKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW3N1cHBvcnQgbG9va3VwQ291bnRyeUlkZW50aWZpZXI6QCI5NTgwMDAiXSwgQCJNTyIsIEAiRXhwZWN0ZWQgY291bnRyeSBpZGVudGlmaWVyIHRvIGJlIE1PIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtzdXBwb3J0IGxvb2t1cENvdW50cnlJZGVudGlmaWVyOkAiNTAwMDAwIl0sIEAiR0IiLCBAIkV4cGVjdGVkIGNvdW50cnkgaWRlbnRpZmllciB0byBiZSBHQiIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbc3VwcG9ydCBsb29rdXBDb3VudHJ5SWRlbnRpZmllcjpAIjUwOTAwMCJdLCBAIkdCIiwgQCJFeHBlY3RlZCBjb3VudHJ5IGlkZW50aWZpZXIgdG8gYmUgR0IiKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9aWFVQQ0FXcml0ZXJUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9aWFVQQ0FXcml0ZXJUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjFkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL1pYVVBDQVdyaXRlclRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhVUENBV3JpdGVyVGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL1pYVVBDQVdyaXRlclRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL1pYVVBDQVdyaXRlclRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4OGZjMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvWlhVUENBV3JpdGVyVGVzdENhc2UubQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFVQQ0FXcml0ZXJUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhVUENBV3JpdGVyVGVzdENhc2UKKworLSAodm9pZCl0ZXN0RW5jb2RlIHsKKyAgTlNTdHJpbmcgKnRlc3RTdHIgPSBAIjAwMDEwMTAxMDAwMTEwMTEwMTExMDExMDAwMTAwMDEwMTEwMTAxMTExMDExMTEwMTAxMDEwMTExMDAxMDExMTAxMDAxMDAxMTEwMTEwMDExMDExMDExMDAxMDExMTAwMTAxMDAwIjsKKyAgWlhCaXRNYXRyaXggKnJlc3VsdCA9IFtbW1pYVVBDQVdyaXRlciBhbGxvY10gaW5pdF0gZW5jb2RlOkAiNDg1OTYzMDk1MTI0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDooaW50KXRlc3RTdHIubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDowCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjpuaWxdOworICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RTdHIubGVuZ3RoOyBpKyspIHsKKyAgICBCT09MIGV4cGVjdGVkID0gW3Rlc3RTdHIgY2hhcmFjdGVyQXRJbmRleDppXSA9PSAnMSc7CisgICAgU1RBc3NlcnRFcXVhbHMoW3Jlc3VsdCBnZXRYOmkgeTowXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgKCVkLCAwKSB0byBiZSAlZCIsIGksIGV4cGVjdGVkKTsKKyAgfQorfQorCistICh2b2lkKXRlc3RBZGRDaGVja3N1bUFuZEVuY29kZSB7CisgIE5TU3RyaW5nICp0ZXN0U3RyID0gQCIwMDAxMDEwMDExMDAxMDAxMDAxMTAxMTExMDEwMTAwMDExMDExMDAwMTAxMDExMTEwMTAxMDEwMDAxMDAxMDAxMDAwMTExMDEwMDExMTAwMTAxMTAwMTEwMTEwMTEwMDEwMTAwMCI7CisgIFpYQml0TWF0cml4ICpyZXN1bHQgPSBbW1taWFVQQ0FXcml0ZXIgYWxsb2NdIGluaXRdIGVuY29kZTpAIjEyMzQ1Njc4OTAxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRVUENBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDooaW50KXRlc3RTdHIubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDowCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjpuaWxdOworICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RTdHIubGVuZ3RoOyBpKyspIHsKKyAgICBCT09MIGV4cGVjdGVkID0gW3Rlc3RTdHIgY2hhcmFjdGVyQXRJbmRleDppXSA9PSAnMSc7CisgICAgU1RBc3NlcnRFcXVhbHMoW3Jlc3VsdCBnZXRYOmkgeTowXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgKCVkLCAwKSB0byBiZSAlZCIsIGksIGV4cGVjdGVkKTsKKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9SU1MxNEJsYWNrQm94MVRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9SU1MxNEJsYWNrQm94MVRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzYmQyOAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL1JTUzE0QmxhY2tCb3gxVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBSU1MxNEJsYWNrQm94MVRlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL1JTUzE0QmxhY2tCb3gxVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL1JTUzE0QmxhY2tCb3gxVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODZkMDY3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvUlNTMTRCbGFja0JveDFUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlJTUzE0QmxhY2tCb3gxVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFJTUzE0QmxhY2tCb3gxVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9yc3MxNC0xIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0UlNTMTRdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDo2IHRyeUhhcmRlckNvdW50OjYgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDo2IHRyeUhhcmRlckNvdW50OjYgcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL1JTUzE0QmxhY2tCb3gyVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL1JTUzE0QmxhY2tCb3gyVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTBjZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvUlNTMTRCbGFja0JveDJUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIFJTUzE0QmxhY2tCb3gyVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvUlNTMTRCbGFja0JveDJUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvUlNTMTRCbGFja0JveDJUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTFhOTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9SU1MxNEJsYWNrQm94MlRlc3RDYXNlLm0KQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiUlNTMTRCbGFja0JveDJUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gUlNTMTRCbGFja0JveDJUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L3JzczE0LTIiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRSU1MxNF07CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjQgdHJ5SGFyZGVyQ291bnQ6OCBtYXhNaXNyZWFkczoxIG1heFRyeUhhcmRlck1pc3JlYWRzOjEgcm90YXRpb246MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDoyIHRyeUhhcmRlckNvdW50OjggbWF4TWlzcmVhZHM6MCBtYXhUcnlIYXJkZXJNaXNyZWFkczoxIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZEJsYWNrQm94MVRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZEJsYWNrQm94MVRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzYjkyOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkQmxhY2tCb3gxVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBSU1NFeHBhbmRlZEJsYWNrQm94MVRlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkQmxhY2tCb3gxVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkQmxhY2tCb3gxVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA5YjIyCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRCbGFja0JveDFUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlJTU0V4cGFuZGVkQmxhY2tCb3gxVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFJTU0V4cGFuZGVkQmxhY2tCb3gxVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0UlNTRXhwYW5kZWRdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDozMiB0cnlIYXJkZXJDb3VudDozMiByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjMyIHRyeUhhcmRlckNvdW50OjMyIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZEJsYWNrQm94MlRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZEJsYWNrQm94MlRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzOGFlZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkQmxhY2tCb3gyVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBSU1NFeHBhbmRlZEJsYWNrQm94MlRlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkQmxhY2tCb3gyVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkQmxhY2tCb3gyVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDlkN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRCbGFja0JveDJUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlJTU0V4cGFuZGVkQmxhY2tCb3gyVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFJTU0V4cGFuZGVkQmxhY2tCb3gyVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0yIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0UlNTRXhwYW5kZWRdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDoyMSB0cnlIYXJkZXJDb3VudDoyMyByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjIxIHRyeUhhcmRlckNvdW50OjIzIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZEJsYWNrQm94M1Rlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZEJsYWNrQm94M1Rlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NDQ5YwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkQmxhY2tCb3gzVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBSU1NFeHBhbmRlZEJsYWNrQm94M1Rlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkQmxhY2tCb3gzVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkQmxhY2tCb3gzVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzljOWU2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRCbGFja0JveDNUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlJTU0V4cGFuZGVkQmxhY2tCb3gzVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFJTU0V4cGFuZGVkQmxhY2tCb3gzVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0zIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0UlNTRXhwYW5kZWRdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDoxMTcgdHJ5SGFyZGVyQ291bnQ6MTE3IHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MTE3IHRyeUhhcmRlckNvdW50OjExNyByb3RhdGlvbjoxODAuMGZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3N1cGVyIHJ1blRlc3RzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRJbWFnZTJiaW5hcnlUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRJbWFnZTJiaW5hcnlUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZTE0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZEltYWdlMmJpbmFyeVRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgUlNTRXhwYW5kZWRJbWFnZTJiaW5hcnlUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW1hZ2UyYmluYXJ5VGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW1hZ2UyYmluYXJ5VGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTZkYjNmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRJbWFnZTJiaW5hcnlUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJSU1NFeHBhbmRlZEltYWdlMmJpbmFyeVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBSU1NFeHBhbmRlZEltYWdlMmJpbmFyeVRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdERlY29kZVJvdzJiaW5hcnlfMSB7CisgIC8vICgxMSkxMDAyMjQoMTcpMTEwMjI0KDMxMDIpMDAwMTAwCisgIE5TU3RyaW5nICpwYXRoID0gQCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xLnBuZyI7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uLlguLi5YIC5YLi4uLlguIC5YWC4uLlguIFguLlguLi5YIC4uLlhYLlguIC4uWC5YLi4uIC4uWC5YLi5YIC4uLlguLlguIFguWC4uLi5YIC5YLi4uLlguIC4uLi4uWC4uIFguLi5YLi4uIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzIgeworICAvLyAoMDEpOTAwMTIzNDU2Nzg5MDgoMzEwMykwMDE3NTAKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIucG5nIjsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIgLi5YLi4uLi4gLi4uLi4uWC4gLlhYWC5YLlggLlguLi5YWC4gWFhYWFguWFggWFguWC4uLi4gLlhYLlhYLlggLlhYLiI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEltYWdlMmJpbmFyeTpwYXRoIGV4cGVjdGVkOmV4cGVjdGVkXTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlUm93MmJpbmFyeV8zIHsKKyAgLy8gKDEwKTEyQQorICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMy5wbmciOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIiAuLi4uLi4uWCAuLlhYLi5YLiBYLlguLi4uWCAuLi4uLi4uWCAuLi4uIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzQgeworICAvLyAoMDEpOTg4OTg3NjU0MzIxMDYoMzIwMikwMTIzNDUoMTUpOTkxMjMxCisgIE5TU3RyaW5nICpwYXRoID0gQCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS80LnBuZyI7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uWFhYWC5YIFhYLlhYWFguIC5YWFguWFguIFhYLi5YLi4uIC5YWFhYWC4uIFhYLlguLlguIC4uWFguLlhYIFhYLlguWFhYIFguLlhYLi5YIC5YLlhYWFhYIFhYWFgiOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RJbWFnZTJiaW5hcnk6cGF0aCBleHBlY3RlZDpleHBlY3RlZF07Cit9CisKKy0gKHZvaWQpdGVzdERlY29kZVJvdzJiaW5hcnlfNSB7CisgIC8vICgwMSk5MDYxNDE0MTAwMDAxNSgzMjAyKTAwMDE1MAorICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvNS5wbmciOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIiAuLlguWC4uLiAuWFhYWC5YLiBYWC4uWFhYWCAuLi4uWFguLiBYLi4uLi4uLiAuLi4uWC4uLiAuLi4uWC4uWCAuWFguIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzEwIHsKKyAgLy8gKDAxKTk4ODk4NzY1NDMyMTA2KDE1KTk5MTIzMSgzMTAzKTAwMTc1MCgxMCkxMkEoNDIyKTEyMygyMSkxMjM0NTYoNDIzKTAxMjM0NTY3ODkwMTIKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzEwLnBuZyI7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC5YLlhYLi5YIFhYLlhYWFguIC5YWFguWFguIFhYLi5YLi4uIC5YWFhYWC4uIFhYLlguLlguIC4uWFguLi5YIFhYLlguLi4uIFguWC5YLlguIFguWC4uWC5YIC5YLi4uLlguIFhYLi4uWC4uIC4uLlhYLlguIC5YWFhYWFguIC5YLi5YWC4uIFguWC5YLi4uIC5YLi4uLi4uIFhYWFguLi4uIFhYLlhYLi4uIFhYWFhYLlguIC4uLlhYWFhYIC4uLi4uWC5YIC4uLlguLi4uIFguWFhYLi5YIFguWC5YLi4uIFhYLlhYLi5YIC5YLi5YLi5YIC5YLlguWC5YIFguWFguLi5YIC5YWC5YWFguIFhYWC5YLlhYIC4uWC4iOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RJbWFnZTJiaW5hcnk6cGF0aCBleHBlY3RlZDpleHBlY3RlZF07Cit9CisKKy0gKHZvaWQpdGVzdERlY29kZVJvdzJiaW5hcnlfMTEgeworICAvLyAoMDEpOTg4OTg3NjU0MzIxMDYoMTUpOTkxMjMxKDMxMDMpMDAxNzUwKDEwKTEyQSg0MjIpMTIzKDIxKTEyMzQ1NgorICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIiAuWC5YWC4uWCBYWC5YWFhYLiAuWFhYLlhYLiBYWC4uWC4uLiAuWFhYWFguLiBYWC5YLi5YLiAuLlhYLi4uWCBYWC5YLi4uLiBYLlguWC5YLiBYLlguLlguWCAuWC4uLi5YLiBYWC4uLlguLiAuLi5YWC5YLiAuWFhYWFhYLiAuWC4uWFguLiBYLlguWC4uLiAuWC4uLi4uLiBYWFhYLi4uLiBYWC5YWC4uLiBYWFhYWC5YLiAuLi5YWFhYWCAuLi4uLlguWCAuLi5YLi4uLiBYLlhYWC4uWCBYLlguWC4uLiAuLi4uIjsKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzExLnBuZyI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEltYWdlMmJpbmFyeTpwYXRoIGV4cGVjdGVkOmV4cGVjdGVkXTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlUm93MmJpbmFyeV8xMiB7CisgIC8vICgwMSk5ODg5ODc2NTQzMjEwNigzMTAzKTAwMTc1MAorCisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uWC4uWFguIFhYWFguLlhYIFguWFguWFguIC5YLi4uLlhYIFhYWC4uWFguIFguLlguLi4uIC5YWC5YWC5YIC5YWC4iOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTIucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzEzIHsKKyAgLy8gKDAxKTkwMDEyMzQ1Njc4OTA4KDM5MjIpNzk1CisKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIgLi5YWC4uWC4gLi4uLi4uLi4gLlguLlhYWC4gWC5YLlguLi4gWFguWFhYWFggLlhYWFguWC4gWC5YLlhYWFggLlguLlguLlggLi4uLi4uWC4iOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTMucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzE0IHsKKyAgLy8gKDAxKTkwMDEyMzQ1Njc4OTA4KDM5MzIpMDQwMTIzNAorCisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uWFguWC4uIC4uLi4uLi4uIC5YLi5YWFguIFguWC5YLi4uIFhYLlhYWFhYIC5YWFhYLlguIFguLi4uLlguIFguLi4uLlguIFguWC5YLlhYIC5YLi4uLi4uIFguLi4iOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTQucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzE1IHsKKyAgLy8gKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDIpMDAxNzUwKDExKTEwMDMxMgorCisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uWFhYLi4uIC4uLi4uLi4uIC5YLi5YWFguIFguWC5YLi4uIFhYLlhYWFhYIC5YWFhYLlguIC4uWFguLi5YIC5YLi4uLi5YIC5YWC4uLi4uIFhYWFguWC4uIFhYLi4iOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTUucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzE2IHsKKyAgLy8gKDAxKTkwMDEyMzQ1Njc4OTA4KDMyMDIpMDAxNzUwKDExKTEwMDMxMgorCisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uWFhYLi5YIC4uLi4uLi4uIC5YLi5YWFguIFguWC5YLi4uIFhYLlhYWFhYIC5YWFhYLlguIC4uWFguLi5YIC5YLi4uLi5YIC5YWC4uLi4uIFhYWFguWC4uIFhYLi4iOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTYucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzE3IHsKKyAgLy8gKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDIpMDAxNzUwKDEzKTEwMDMxMgorCisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uWFhYLlguIC4uLi4uLi4uIC5YLi5YWFguIFguWC5YLi4uIFhYLlhYWFhYIC5YWFhYLlguIC4uWFguLi5YIC5YLi4uLi5YIC5YWC4uLi4uIFhYWFguWC4uIFhYLi4iOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTcucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzE4IHsKKyAgLy8gKDAxKTkwMDEyMzQ1Njc4OTA4KDMyMDIpMDAxNzUwKDEzKTEwMDMxMgorCisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uWFhYLlhYIC4uLi4uLi4uIC5YLi5YWFguIFguWC5YLi4uIFhYLlhYWFhYIC5YWFhYLlguIC4uWFguLi5YIC5YLi4uLi5YIC5YWC4uLi4uIFhYWFguWC4uIFhYLi4iOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTgucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzE5IHsKKyAgLy8gKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDIpMDAxNzUwKDE1KTEwMDMxMgorCisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uWFhYWC4uIC4uLi4uLi4uIC5YLi5YWFguIFguWC5YLi4uIFhYLlhYWFhYIC5YWFhYLlguIC4uWFguLi5YIC5YLi4uLi5YIC5YWC4uLi4uIFhYWFguWC4uIFhYLi4iOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTkucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzIwIHsKKyAgLy8gKDAxKTkwMDEyMzQ1Njc4OTA4KDMyMDIpMDAxNzUwKDE1KTEwMDMxMgorCisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uWFhYWC5YIC4uLi4uLi4uIC5YLi5YWFguIFguWC5YLi4uIFhYLlhYWFhYIC5YWFhYLlguIC4uWFguLi5YIC5YLi4uLi5YIC5YWC4uLi4uIFhYWFguWC4uIFhYLi4iOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjAucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzIxIHsKKyAgLy8gKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDIpMDAxNzUwKDE3KTEwMDMxMgorCisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uWFhYWFguIC4uLi4uLi4uIC5YLi5YWFguIFguWC5YLi4uIFhYLlhYWFhYIC5YWFhYLlguIC4uWFguLi5YIC5YLi4uLi5YIC5YWC4uLi4uIFhYWFguWC4uIFhYLi4iOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjEucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyYmluYXJ5XzIyIHsKKyAgLy8gKDAxKTkwMDEyMzQ1Njc4OTA4KDMyMDIpMDAxNzUwKDE3KTEwMDMxMgorCisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uWFhYWFhYIC4uLi4uLi4uIC5YLi5YWFguIFguWC5YLi4uIFhYLlhYWFhYIC5YWFhYLlguIC4uWFguLi5YIC5YLi4uLi5YIC5YWC4uLi4uIFhYWFguWC4uIFhYLi4iOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjIucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UyYmluYXJ5OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKWFzc2VydENvcnJlY3RJbWFnZTJiaW5hcnk6KE5TU3RyaW5nICopcGF0aCBleHBlY3RlZDooTlNTdHJpbmcgKilleHBlY3RlZCB7CisgIFpYSW1hZ2UgKmltYWdlID0gW1taWEltYWdlIGFsbG9jXSBpbml0V2l0aFVSTDpbW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV0gVVJMRm9yUmVzb3VyY2U6cGF0aCB3aXRoRXh0ZW5zaW9uOm5pbF1dOworICBaWEJpbmFyeUJpdG1hcCAqYmluYXJ5TWFwID0gW1taWEJpbmFyeUJpdG1hcCBhbGxvY10gaW5pdFdpdGhCaW5hcml6ZXI6W1taWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplciBhbGxvY10gaW5pdFdpdGhTb3VyY2U6W1taWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UgYWxsb2NdIGluaXRXaXRoWlhJbWFnZTppbWFnZV1dXTsKKyAgaW50IHJvd051bWJlciA9IGJpbmFyeU1hcC5oZWlnaHQgLyAyOworICBaWEJpdEFycmF5ICpyb3cgPSBbYmluYXJ5TWFwIGJsYWNrUm93OnJvd051bWJlciByb3c6bmlsIGVycm9yOm5pbF07CisKKyAgWlhSU1NFeHBhbmRlZFJlYWRlciAqcnNzRXhwYW5kZWRSZWFkZXIgPSBbW1pYUlNTRXhwYW5kZWRSZWFkZXIgYWxsb2NdIGluaXRdOworICBOU0FycmF5ICpwYWlycyA9IFtyc3NFeHBhbmRlZFJlYWRlciBkZWNvZGVSb3cycGFpcnM6cm93TnVtYmVyIHJvdzpyb3ddOworICBpZiAoIXBhaXJzKSB7CisgICAgU1RGYWlsKEAiVW5hYmxlIHRvIGRlY29kZSBwYWlycyIpOworICAgIHJldHVybjsKKyAgfQorICBaWEJpdEFycmF5ICpiaW5hcnkgPSBbWlhCaXRBcnJheUJ1aWxkZXIgYnVpbGRCaXRBcnJheTpwYWlyc107CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtiaW5hcnkgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCAlQCB0byBlcXVhbCAlQCIsIFtiaW5hcnkgZGVzY3JpcHRpb25dLCBleHBlY3RlZCk7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW1hZ2UycmVzdWx0VGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW1hZ2UycmVzdWx0VGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTRjNTAzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRJbWFnZTJyZXN1bHRUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFJTU0V4cGFuZGVkSW1hZ2UycmVzdWx0VGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZEltYWdlMnJlc3VsdFRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZEltYWdlMnJlc3VsdFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwY2M5ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW1hZ2UycmVzdWx0VGVzdENhc2UubQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJSU1NFeHBhbmRlZEltYWdlMnJlc3VsdFRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBSU1NFeHBhbmRlZEltYWdlMnJlc3VsdFRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdERlY29kZVJvdzJyZXN1bHRfMiB7CisgIC8vICgwMSk5MDAxMjM0NTY3ODkwOCgzMTAzKTAwMTc1MAorICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMi5wbmciOworICBaWEV4cGFuZGVkUHJvZHVjdFBhcnNlZFJlc3VsdCAqZXhwZWN0ZWQgPQorICBbWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQgZXhwYW5kZWRQcm9kdWN0UGFyc2VkUmVzdWx0V2l0aFJhd1RleHQ6QCIoMDEpOTAwMTIzNDU2Nzg5MDgoMzEwMykwMDE3NTAiIHByb2R1Y3RJRDpAIjkwMDEyMzQ1Njc4OTA4IiBzc2NjOm5pbCBsb3ROdW1iZXI6bmlsIHByb2R1Y3Rpb25EYXRlOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2luZ0RhdGU6bmlsIGJlc3RCZWZvcmVEYXRlOm5pbCBleHBpcmF0aW9uRGF0ZTpuaWwgd2VpZ2h0OkAiMDAxNzUwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodFR5cGU6WlhfS0lMT0dSQU0gd2VpZ2h0SW5jcmVtZW50OkAiMyIgcHJpY2U6bmlsIHByaWNlSW5jcmVtZW50Om5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlQ3VycmVuY3k6bmlsIHVuY29tbW9uQUlzOltOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldXTsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2UycmVzdWx0OnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKWFzc2VydENvcnJlY3RJbWFnZTJyZXN1bHQ6KE5TU3RyaW5nICopcGF0aCBleHBlY3RlZDooWlhFeHBhbmRlZFByb2R1Y3RQYXJzZWRSZXN1bHQgKilleHBlY3RlZCB7CisgIFpYSW1hZ2UgKmltYWdlID0gW1taWEltYWdlIGFsbG9jXSBpbml0V2l0aFVSTDpbW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV0gVVJMRm9yUmVzb3VyY2U6cGF0aCB3aXRoRXh0ZW5zaW9uOm5pbF1dOworICBaWEJpbmFyeUJpdG1hcCAqYmluYXJ5TWFwID0gW1taWEJpbmFyeUJpdG1hcCBhbGxvY10gaW5pdFdpdGhCaW5hcml6ZXI6W1taWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplciBhbGxvY10gaW5pdFdpdGhTb3VyY2U6W1taWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UgYWxsb2NdIGluaXRXaXRoWlhJbWFnZTppbWFnZV1dXTsKKyAgaW50IHJvd051bWJlciA9IGJpbmFyeU1hcC5oZWlnaHQgLyAyOworICBaWEJpdEFycmF5ICpyb3cgPSBbYmluYXJ5TWFwIGJsYWNrUm93OnJvd051bWJlciByb3c6bmlsIGVycm9yOm5pbF07CisKKyAgTlNFcnJvciAqZXJyb3I7CisgIFpYUlNTRXhwYW5kZWRSZWFkZXIgKnJzc0V4cGFuZGVkUmVhZGVyID0gW1taWFJTU0V4cGFuZGVkUmVhZGVyIGFsbG9jXSBpbml0XTsKKyAgWlhSZXN1bHQgKnRoZVJlc3VsdCA9IFtyc3NFeHBhbmRlZFJlYWRlciBkZWNvZGVSb3c6cm93TnVtYmVyIHJvdzpyb3cgaGludHM6bmlsIGVycm9yOiZlcnJvcl07CisgIGlmICghdGhlUmVzdWx0KSB7CisgICAgU1RGYWlsKFtlcnJvciBkZXNjcmlwdGlvbl0pOworICAgIHJldHVybjsKKyAgfQorCisgIFNUQXNzZXJ0RXF1YWxzKHRoZVJlc3VsdC5iYXJjb2RlRm9ybWF0LCBrQmFyY29kZUZvcm1hdFJTU0V4cGFuZGVkLCBAIkV4cGVjdGVkIGZvcm1hdCB0byBiZSBrQmFyY29kZUZvcm1hdFJTU0V4cGFuZGVkIik7CisKKyAgWlhQYXJzZWRSZXN1bHQgKnJlc3VsdCA9IFtaWFJlc3VsdFBhcnNlciBwYXJzZVJlc3VsdDp0aGVSZXN1bHRdOworCisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHJlc3VsdCwgZXhwZWN0ZWQsIEAiUmVzdWx0IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIik7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW1hZ2Uyc3RyaW5nVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW1hZ2Uyc3RyaW5nVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWJmYzMxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRJbWFnZTJzdHJpbmdUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFJTU0V4cGFuZGVkSW1hZ2Uyc3RyaW5nVGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZEltYWdlMnN0cmluZ1Rlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZEltYWdlMnN0cmluZ1Rlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzYjc0ZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW1hZ2Uyc3RyaW5nVGVzdENhc2UubQpAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiUlNTRXhwYW5kZWRJbWFnZTJzdHJpbmdUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gUlNTRXhwYW5kZWRJbWFnZTJzdHJpbmdUZXN0Q2FzZQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzEgeworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMS5wbmciOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigxMSkxMDAyMjQoMTcpMTEwMjI0KDMxMDIpMDAwMTAwIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzIgeworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMi5wbmciOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigwMSk5MDAxMjM0NTY3ODkwOCgzMTAzKTAwMTc1MCI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEltYWdlMnN0cmluZzpwYXRoIGV4cGVjdGVkOmV4cGVjdGVkXTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlUm93MnN0cmluZ18zIHsKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzMucG5nIjsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMTApMTJBIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzQgeworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvNC5wbmciOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigwMSk5ODg5ODc2NTQzMjEwNigzMjAyKTAxMjM0NSgxNSk5OTEyMzEiOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RJbWFnZTJzdHJpbmc6cGF0aCBleHBlY3RlZDpleHBlY3RlZF07Cit9CisKKy0gKHZvaWQpdGVzdERlY29kZVJvdzJzdHJpbmdfNSB7CisgIE5TU3RyaW5nICpwYXRoID0gQCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS81LnBuZyI7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDAxKTkwNjE0MTQxMDAwMDE1KDMyMDIpMDAwMTUwIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzcgeworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvNy5wbmciOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigxMCk1NjcoMTEpMDEwMTAxIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzEwIHsKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzEwLnBuZyI7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDAxKTk4ODk4NzY1NDMyMTA2KDE1KTk5MTIzMSgzMTAzKTAwMTc1MCgxMCkxMkEoNDIyKTEyMygyMSkxMjM0NTYoNDIzKTAxMjM0NTY3ODkwMSI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEltYWdlMnN0cmluZzpwYXRoIGV4cGVjdGVkOmV4cGVjdGVkXTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlUm93MnN0cmluZ18xMSB7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDAxKTk4ODk4NzY1NDMyMTA2KDE1KTk5MTIzMSgzMTAzKTAwMTc1MCgxMCkxMkEoNDIyKTEyMygyMSkxMjM0NTYiOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTEucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzEyIHsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMDEpOTg4OTg3NjU0MzIxMDYoMzEwMykwMDE3NTAiOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTIucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzEzIHsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMDEpOTAwMTIzNDU2Nzg5MDgoMzkyMik3OTUiOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTMucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzE0IHsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMDEpOTAwMTIzNDU2Nzg5MDgoMzkzMikwNDAxMjM0IjsKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE0LnBuZyI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEltYWdlMnN0cmluZzpwYXRoIGV4cGVjdGVkOmV4cGVjdGVkXTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlUm93MnN0cmluZ18xNSB7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDIpMDAxNzUwKDExKTEwMDMxMiI7CisgIE5TU3RyaW5nICpwYXRoID0gQCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xNS5wbmciOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RJbWFnZTJzdHJpbmc6cGF0aCBleHBlY3RlZDpleHBlY3RlZF07Cit9CisKKy0gKHZvaWQpdGVzdERlY29kZVJvdzJzdHJpbmdfMTYgeworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigwMSk5MDAxMjM0NTY3ODkwOCgzMjAyKTAwMTc1MCgxMSkxMDAzMTIiOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTYucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzE3IHsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMDEpOTAwMTIzNDU2Nzg5MDgoMzEwMikwMDE3NTAoMTMpMTAwMzEyIjsKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzE3LnBuZyI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEltYWdlMnN0cmluZzpwYXRoIGV4cGVjdGVkOmV4cGVjdGVkXTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlUm93MnN0cmluZ18xOCB7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDAxKTkwMDEyMzQ1Njc4OTA4KDMyMDIpMDAxNzUwKDEzKTEwMDMxMiI7CisgIE5TU3RyaW5nICpwYXRoID0gQCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8xOC5wbmciOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RJbWFnZTJzdHJpbmc6cGF0aCBleHBlY3RlZDpleHBlY3RlZF07Cit9CisKKy0gKHZvaWQpdGVzdERlY29kZVJvdzJzdHJpbmdfMTkgeworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigwMSk5MDAxMjM0NTY3ODkwOCgzMTAyKTAwMTc1MCgxNSkxMDAzMTIiOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMTkucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzIwIHsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMDEpOTAwMTIzNDU2Nzg5MDgoMzIwMikwMDE3NTAoMTUpMTAwMzEyIjsKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzIwLnBuZyI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEltYWdlMnN0cmluZzpwYXRoIGV4cGVjdGVkOmV4cGVjdGVkXTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlUm93MnN0cmluZ18yMSB7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDIpMDAxNzUwKDE3KTEwMDMxMiI7CisgIE5TU3RyaW5nICpwYXRoID0gQCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yMS5wbmciOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RJbWFnZTJzdHJpbmc6cGF0aCBleHBlY3RlZDpleHBlY3RlZF07Cit9CisKKy0gKHZvaWQpdGVzdERlY29kZVJvdzJzdHJpbmdfMjIgeworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigwMSk5MDAxMjM0NTY3ODkwOCgzMjAyKTAwMTc1MCgxNykxMDAzMTIiOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjIucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzI1IHsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMTApMTIzIjsKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzI1LnBuZyI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEltYWdlMnN0cmluZzpwYXRoIGV4cGVjdGVkOmV4cGVjdGVkXTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlUm93MnN0cmluZ18yNiB7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDEwKTU2NzgoMTEpMDEwMTAxIjsKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzI2LnBuZyI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEltYWdlMnN0cmluZzpwYXRoIGV4cGVjdGVkOmV4cGVjdGVkXTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlUm93MnN0cmluZ18yNyB7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDEwKTEwOTgtMTIzNCI7CisgIE5TU3RyaW5nICpwYXRoID0gQCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8yNy5wbmciOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RJbWFnZTJzdHJpbmc6cGF0aCBleHBlY3RlZDpleHBlY3RlZF07Cit9CisKKy0gKHZvaWQpdGVzdERlY29kZVJvdzJzdHJpbmdfMjggeworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigxMCkxMDk4LzEyMzQiOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMjgucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzI5IHsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMTApMTA5OC4xMjM0IjsKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzI5LnBuZyI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEltYWdlMnN0cmluZzpwYXRoIGV4cGVjdGVkOmV4cGVjdGVkXTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlUm93MnN0cmluZ18zMCB7CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDEwKTEwOTgqMTIzNCI7CisgIE5TU3RyaW5nICpwYXRoID0gQCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8zMC5wbmciOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RJbWFnZTJzdHJpbmc6cGF0aCBleHBlY3RlZDpleHBlY3RlZF07Cit9CisKKy0gKHZvaWQpdGVzdERlY29kZVJvdzJzdHJpbmdfMzEgeworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigxMCkxMDk4LDEyMzQiOworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMzEucG5nIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0SW1hZ2Uyc3RyaW5nOnBhdGggZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKXRlc3REZWNvZGVSb3cyc3RyaW5nXzMyIHsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMTUpOTkxMjMxKDMxMDMpMDAxNzUwKDEwKTEyQSg0MjIpMTIzKDIxKTEyMzQ1Nig0MjMpMDEyMzQ1Njc4OTAxMiI7CisgIE5TU3RyaW5nICpwYXRoID0gQCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8zMi5wbmciOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RJbWFnZTJzdHJpbmc6cGF0aCBleHBlY3RlZDpleHBlY3RlZF07Cit9CisKKy0gKHZvaWQpYXNzZXJ0Q29ycmVjdEltYWdlMnN0cmluZzooTlNTdHJpbmcgKilwYXRoIGV4cGVjdGVkOihOU1N0cmluZyAqKWV4cGVjdGVkIHsKKyAgWlhSU1NFeHBhbmRlZFJlYWRlciAqcnNzRXhwYW5kZWRSZWFkZXIgPSBbW1pYUlNTRXhwYW5kZWRSZWFkZXIgYWxsb2NdIGluaXRdOworCisgIFpYSW1hZ2UgKmltYWdlID0gW1taWEltYWdlIGFsbG9jXSBpbml0V2l0aFVSTDpbW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV0gVVJMRm9yUmVzb3VyY2U6cGF0aCB3aXRoRXh0ZW5zaW9uOm5pbF1dOworICBaWEJpbmFyeUJpdG1hcCAqYmluYXJ5TWFwID0gW1taWEJpbmFyeUJpdG1hcCBhbGxvY10gaW5pdFdpdGhCaW5hcml6ZXI6W1taWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplciBhbGxvY10gaW5pdFdpdGhTb3VyY2U6W1taWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UgYWxsb2NdIGluaXRXaXRoWlhJbWFnZTppbWFnZV1dXTsKKyAgaW50IHJvd051bWJlciA9IGJpbmFyeU1hcC5oZWlnaHQgLyAyOworICBaWEJpdEFycmF5ICpyb3cgPSBbYmluYXJ5TWFwIGJsYWNrUm93OnJvd051bWJlciByb3c6bmlsIGVycm9yOm5pbF07CisKKyAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgIFpYUmVzdWx0ICpyZXN1bHQgPSBbcnNzRXhwYW5kZWRSZWFkZXIgZGVjb2RlUm93OnJvd051bWJlciByb3c6cm93IGhpbnRzOm5pbCBlcnJvcjomZXJyb3JdOworICBpZiAoIXJlc3VsdCkgeworICAgIFNURmFpbChbZXJyb3IgZGVzY3JpcHRpb25dKTsKKyAgICByZXR1cm47CisgIH0KKworICBTVEFzc2VydEVxdWFscyhyZXN1bHQuYmFyY29kZUZvcm1hdCwga0JhcmNvZGVGb3JtYXRSU1NFeHBhbmRlZCwgQCJFeHBlY3RlZCBiYXJjb2RlIGZvcm1hdCB0byBiZSBrQmFyY29kZUZvcm1hdFJTU0V4cGFuZGVkIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHJlc3VsdC50ZXh0LCBleHBlY3RlZCwgQCJFeHBlY3RlZCAlQCB0byBlcXVhbCAlQCIsIHJlc3VsdC50ZXh0LCBleHBlY3RlZCk7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW50ZXJuYWxUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5M2U2YQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW50ZXJuYWxUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFJTU0V4cGFuZGVkSW50ZXJuYWxUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW50ZXJuYWxUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRJbnRlcm5hbFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkYjJhYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkSW50ZXJuYWxUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJSU1NFeHBhbmRlZEludGVybmFsVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFJTU0V4cGFuZGVkSW50ZXJuYWxUZXN0Q2FzZQorCistICh2b2lkKXRlc3RGaW5kRmluZGVyUGF0dGVybnMgeworICBOU1N0cmluZyAqcGF0aCA9IEAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkLTEvMi5wbmciOworICBaWEltYWdlICppbWFnZSA9IFtbWlhJbWFnZSBhbGxvY10gaW5pdFdpdGhVUkw6W1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dIFVSTEZvclJlc291cmNlOnBhdGggd2l0aEV4dGVuc2lvbjpuaWxdXTsKKyAgWlhCaW5hcnlCaXRtYXAgKmJpbmFyeU1hcCA9IFtbWlhCaW5hcnlCaXRtYXAgYWxsb2NdIGluaXRXaXRoQmluYXJpemVyOltbWlhHbG9iYWxIaXN0b2dyYW1CaW5hcml6ZXIgYWxsb2NdIGluaXRXaXRoU291cmNlOltbWlhDR0ltYWdlTHVtaW5hbmNlU291cmNlIGFsbG9jXSBpbml0V2l0aFpYSW1hZ2U6aW1hZ2VdXV07CisgIGludCByb3dOdW1iZXIgPSBiaW5hcnlNYXAuaGVpZ2h0IC8gMjsKKyAgWlhCaXRBcnJheSAqcm93ID0gW2JpbmFyeU1hcCBibGFja1Jvdzpyb3dOdW1iZXIgcm93Om5pbCBlcnJvcjpuaWxdOworICBOU011dGFibGVBcnJheSAqcHJldmlvdXNQYWlycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisKKyAgWlhSU1NFeHBhbmRlZFJlYWRlciAqcnNzRXhwYW5kZWRSZWFkZXIgPSBbW1pYUlNTRXhwYW5kZWRSZWFkZXIgYWxsb2NdIGluaXRdOworICBaWEV4cGFuZGVkUGFpciAqcGFpcjEgPSBbcnNzRXhwYW5kZWRSZWFkZXIgcmV0cmlldmVOZXh0UGFpcjpyb3cgcHJldmlvdXNQYWlyczpwcmV2aW91c1BhaXJzIHJvd051bWJlcjpyb3dOdW1iZXJdOworICBbcHJldmlvdXNQYWlycyBhZGRPYmplY3Q6cGFpcjFdOworICBaWFJTU0ZpbmRlclBhdHRlcm4gKmZpbmRlclBhdHRlcm4gPSBwYWlyMS5maW5kZXJQYXR0ZXJuOworICBTVEFzc2VydE5vdE5pbChmaW5kZXJQYXR0ZXJuLCBAIkV4cGVjdGVkIGZpbmRlclBhdHRlcm4gdG8gYmUgbm9uLW5pbCIpOworICBTVEFzc2VydEVxdWFscyhmaW5kZXJQYXR0ZXJuLnZhbHVlLCAwLCBAIkV4cGVjdGVkIGZpbmRlclBhdHRlcm4gdG8gZXF1YWwgMCIpOworCisgIFpYRXhwYW5kZWRQYWlyICpwYWlyMiA9IFtyc3NFeHBhbmRlZFJlYWRlciByZXRyaWV2ZU5leHRQYWlyOnJvdyBwcmV2aW91c1BhaXJzOnByZXZpb3VzUGFpcnMgcm93TnVtYmVyOnJvd051bWJlcl07CisgIFtwcmV2aW91c1BhaXJzIGFkZE9iamVjdDpwYWlyMl07CisgIGZpbmRlclBhdHRlcm4gPSBwYWlyMi5maW5kZXJQYXR0ZXJuOworICBTVEFzc2VydE5vdE5pbChmaW5kZXJQYXR0ZXJuLCBAIkV4cGVjdGVkIGZpbmRlclBhdHRlcm4gdG8gYmUgbm9uLW5pbCIpOworICBTVEFzc2VydEVxdWFscyhmaW5kZXJQYXR0ZXJuLnZhbHVlLCAxLCBAIkV4cGVjdGVkIGZpbmRlclBhdHRlcm4gdG8gZXF1YWwgMSIpOworCisgIFpYRXhwYW5kZWRQYWlyICpwYWlyMyA9IFtyc3NFeHBhbmRlZFJlYWRlciByZXRyaWV2ZU5leHRQYWlyOnJvdyBwcmV2aW91c1BhaXJzOnByZXZpb3VzUGFpcnMgcm93TnVtYmVyOnJvd051bWJlcl07CisgIFtwcmV2aW91c1BhaXJzIGFkZE9iamVjdDpwYWlyM107CisgIGZpbmRlclBhdHRlcm4gPSBwYWlyMy5maW5kZXJQYXR0ZXJuOworICBTVEFzc2VydE5vdE5pbChmaW5kZXJQYXR0ZXJuLCBAIkV4cGVjdGVkIGZpbmRlclBhdHRlcm4gdG8gYmUgbm9uLW5pbCIpOworICBTVEFzc2VydEVxdWFscyhmaW5kZXJQYXR0ZXJuLnZhbHVlLCAxLCBAIkV4cGVjdGVkIGZpbmRlclBhdHRlcm4gdG8gZXF1YWwgMSIpOworCisgIGlmIChbcnNzRXhwYW5kZWRSZWFkZXIgcmV0cmlldmVOZXh0UGFpcjpyb3cgcHJldmlvdXNQYWlyczpwcmV2aW91c1BhaXJzIHJvd051bWJlcjpyb3dOdW1iZXJdKSB7CisgICAgLy8gICB0aGUgcHJldmlvdXMgd2FzIHRoZSBsYXN0IHBhaXIKKyAgICBTVEZhaWwoQCJFcnJvciBleHBlY3RlZCIpOworICB9Cit9CisKKy0gKHZvaWQpdGVzdFJldHJpZXZlTmV4dFBhaXJQYXR0ZXJucyB7CisgIE5TU3RyaW5nICpwYXRoID0gQCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWQtMS8zLnBuZyI7CisgIFpYSW1hZ2UgKmltYWdlID0gW1taWEltYWdlIGFsbG9jXSBpbml0V2l0aFVSTDpbW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV0gVVJMRm9yUmVzb3VyY2U6cGF0aCB3aXRoRXh0ZW5zaW9uOm5pbF1dOworICBaWEJpbmFyeUJpdG1hcCAqYmluYXJ5TWFwID0gW1taWEJpbmFyeUJpdG1hcCBhbGxvY10gaW5pdFdpdGhCaW5hcml6ZXI6W1taWEdsb2JhbEhpc3RvZ3JhbUJpbmFyaXplciBhbGxvY10gaW5pdFdpdGhTb3VyY2U6W1taWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UgYWxsb2NdIGluaXRXaXRoWlhJbWFnZTppbWFnZV1dXTsKKyAgaW50IHJvd051bWJlciA9IGJpbmFyeU1hcC5oZWlnaHQgLyAyOworICBaWEJpdEFycmF5ICpyb3cgPSBbYmluYXJ5TWFwIGJsYWNrUm93OnJvd051bWJlciByb3c6bmlsIGVycm9yOm5pbF07CisgIE5TTXV0YWJsZUFycmF5ICpwcmV2aW91c1BhaXJzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKworICBaWFJTU0V4cGFuZGVkUmVhZGVyICpyc3NFeHBhbmRlZFJlYWRlciA9IFtbWlhSU1NFeHBhbmRlZFJlYWRlciBhbGxvY10gaW5pdF07CisgIFpYRXhwYW5kZWRQYWlyICpwYWlyMSA9IFtyc3NFeHBhbmRlZFJlYWRlciByZXRyaWV2ZU5leHRQYWlyOnJvdyBwcmV2aW91c1BhaXJzOnByZXZpb3VzUGFpcnMgcm93TnVtYmVyOnJvd051bWJlcl07CisgIFtwcmV2aW91c1BhaXJzIGFkZE9iamVjdDpwYWlyMV07CisgIFpYUlNTRmluZGVyUGF0dGVybiAqZmluZGVyUGF0dGVybiA9IHBhaXIxLmZpbmRlclBhdHRlcm47CisgIFNUQXNzZXJ0Tm90TmlsKGZpbmRlclBhdHRlcm4sIEAiRXhwZWN0ZWQgZmluZGVyUGF0dGVybiB0byBiZSBub24tbmlsIik7CisgIFNUQXNzZXJ0RXF1YWxzKGZpbmRlclBhdHRlcm4udmFsdWUsIDAsIEAiRXhwZWN0ZWQgZmluZGVyUGF0dGVybiB0byBlcXVhbCAwIik7CisKKyAgWlhFeHBhbmRlZFBhaXIgKnBhaXIyID0gW3Jzc0V4cGFuZGVkUmVhZGVyIHJldHJpZXZlTmV4dFBhaXI6cm93IHByZXZpb3VzUGFpcnM6cHJldmlvdXNQYWlycyByb3dOdW1iZXI6cm93TnVtYmVyXTsKKyAgW3ByZXZpb3VzUGFpcnMgYWRkT2JqZWN0OnBhaXIyXTsKKyAgZmluZGVyUGF0dGVybiA9IHBhaXIyLmZpbmRlclBhdHRlcm47CisgIFNUQXNzZXJ0Tm90TmlsKGZpbmRlclBhdHRlcm4sIEAiRXhwZWN0ZWQgZmluZGVyUGF0dGVybiB0byBiZSBub24tbmlsIik7CisgIFNUQXNzZXJ0RXF1YWxzKGZpbmRlclBhdHRlcm4udmFsdWUsIDAsIEAiRXhwZWN0ZWQgZmluZGVyUGF0dGVybiB0byBlcXVhbCAwIik7Cit9CisKKy0gKHZvaWQpdGVzdERlY29kZUNoZWNrQ2hhcmFjdGVyIHsKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzMucG5nIjsKKyAgWlhJbWFnZSAqaW1hZ2UgPSBbW1pYSW1hZ2UgYWxsb2NdIGluaXRXaXRoVVJMOltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXSBVUkxGb3JSZXNvdXJjZTpwYXRoIHdpdGhFeHRlbnNpb246bmlsXV07CisgIFpYQmluYXJ5Qml0bWFwICpiaW5hcnlNYXAgPSBbW1pYQmluYXJ5Qml0bWFwIGFsbG9jXSBpbml0V2l0aEJpbmFyaXplcjpbW1pYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyIGFsbG9jXSBpbml0V2l0aFNvdXJjZTpbW1pYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZSBhbGxvY10gaW5pdFdpdGhaWEltYWdlOmltYWdlXV1dOworICBaWEJpdEFycmF5ICpyb3cgPSBbYmluYXJ5TWFwIGJsYWNrUm93OmJpbmFyeU1hcC5oZWlnaHQgLyAyIHJvdzpuaWwgZXJyb3I6bmlsXTsKKworICBOU011dGFibGVBcnJheSAqc3RhcnRFbmQgPSBbQFtAMTQ1LCBAMjQzXSBtdXRhYmxlQ29weV07Ly9pbWFnZSBwaXhlbHMgd2hlcmUgdGhlIEExIHBhdHRlcm4gc3RhcnRzIChhdCAxMjQpIGFuZCBlbmRzIChhdCAyMTQpCisgIGludCB2YWx1ZSA9IDA7Ly8gQQorICBaWFJTU0ZpbmRlclBhdHRlcm4gKmZpbmRlclBhdHRlcm5BMSA9IFtbWlhSU1NGaW5kZXJQYXR0ZXJuIGFsbG9jXSBpbml0V2l0aFZhbHVlOnZhbHVlIHN0YXJ0RW5kOnN0YXJ0RW5kIHN0YXJ0OltzdGFydEVuZFswXSBpbnRWYWx1ZV0gZW5kOltzdGFydEVuZFsxXSBpbnRWYWx1ZV0gcm93TnVtYmVyOihpbnQpaW1hZ2UuaGVpZ2h0IC8gMl07CisgIC8vezEsIDgsIDQsIDEsIDF9OworICBaWFJTU0V4cGFuZGVkUmVhZGVyICpyc3NFeHBhbmRlZFJlYWRlciA9IFtbWlhSU1NFeHBhbmRlZFJlYWRlciBhbGxvY10gaW5pdF07CisgIFpYRGF0YUNoYXJhY3RlciAqZGF0YUNoYXJhY3RlciA9IFtyc3NFeHBhbmRlZFJlYWRlciBkZWNvZGVEYXRhQ2hhcmFjdGVyOnJvdyBwYXR0ZXJuOmZpbmRlclBhdHRlcm5BMSBpc09kZFBhdHRlcm46WUVTIGxlZnRDaGFyOllFU107CisKKyAgU1RBc3NlcnRFcXVhbHMoZGF0YUNoYXJhY3Rlci52YWx1ZSwgOTgsIEAiRXhwZWN0ZWQgZGF0YUNoYXJhY3Rlci52YWx1ZSB0byBlcXVhbCA5OCIpOworfQorCistICh2b2lkKXRlc3REZWNvZGVEYXRhQ2hhcmFjdGVyIHsKKyAgTlNTdHJpbmcgKnBhdGggPSBAIlJlc291cmNlcy9ibGFja2JveC9yc3NleHBhbmRlZC0xLzMucG5nIjsKKyAgWlhJbWFnZSAqaW1hZ2UgPSBbW1pYSW1hZ2UgYWxsb2NdIGluaXRXaXRoVVJMOltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXSBVUkxGb3JSZXNvdXJjZTpwYXRoIHdpdGhFeHRlbnNpb246bmlsXV07CisgIFpYQmluYXJ5Qml0bWFwICpiaW5hcnlNYXAgPSBbW1pYQmluYXJ5Qml0bWFwIGFsbG9jXSBpbml0V2l0aEJpbmFyaXplcjpbW1pYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyIGFsbG9jXSBpbml0V2l0aFNvdXJjZTpbW1pYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZSBhbGxvY10gaW5pdFdpdGhaWEltYWdlOmltYWdlXV1dOworICBaWEJpdEFycmF5ICpyb3cgPSBbYmluYXJ5TWFwIGJsYWNrUm93OmJpbmFyeU1hcC5oZWlnaHQgLyAyIHJvdzpuaWwgZXJyb3I6bmlsXTsKKworICBOU011dGFibGVBcnJheSAqc3RhcnRFbmQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpAMTQ1LCBAMjQzLCBuaWxdOy8vaW1hZ2UgcGl4ZWxzIHdoZXJlIHRoZSBBMSBwYXR0ZXJuIHN0YXJ0cyAoYXQgMTI0KSBhbmQgZW5kcyAoYXQgMjE0KQorICBpbnQgdmFsdWUgPSAwOy8vIEEKKyAgWlhSU1NGaW5kZXJQYXR0ZXJuICpmaW5kZXJQYXR0ZXJuQTEgPSBbW1pYUlNTRmluZGVyUGF0dGVybiBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZSBzdGFydEVuZDpzdGFydEVuZCBzdGFydDpbc3RhcnRFbmRbMF0gaW50VmFsdWVdIGVuZDpbc3RhcnRFbmRbMV0gaW50VmFsdWVdIHJvd051bWJlcjooaW50KWltYWdlLmhlaWdodCAvIDJdOworICAvL3sxLCA4LCA0LCAxLCAxfTsKKyAgWlhSU1NFeHBhbmRlZFJlYWRlciAqcnNzRXhwYW5kZWRSZWFkZXIgPSBbW1pYUlNTRXhwYW5kZWRSZWFkZXIgYWxsb2NdIGluaXRdOworICBaWERhdGFDaGFyYWN0ZXIgKmRhdGFDaGFyYWN0ZXIgPSBbcnNzRXhwYW5kZWRSZWFkZXIgZGVjb2RlRGF0YUNoYXJhY3Rlcjpyb3cgcGF0dGVybjpmaW5kZXJQYXR0ZXJuQTEgaXNPZGRQYXR0ZXJuOllFUyBsZWZ0Q2hhcjpOT107CisKKyAgU1RBc3NlcnRFcXVhbHMoZGF0YUNoYXJhY3Rlci52YWx1ZSwgMTksIEAiRXhwZWN0ZWQgZGF0YUNoYXJhY3Rlci52YWx1ZSB0byBlcXVhbCAxOSIpOworICBTVEFzc2VydEVxdWFscyhkYXRhQ2hhcmFjdGVyLmNoZWNrc3VtUG9ydGlvbiwgMTAwNywgQCJFeHBlY3RlZCBkYXRhQ2hhcmFjdGVyLmNoZWNrc3VtUG9ydGlvbiB0byBlcXVhbCAxMDA3Iik7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MVRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDFUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NmIyN2EKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDFUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIFJTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MVRlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MVRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDFUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMzlmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDFUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlJTU0V4cGFuZGVkU3RhY2tlZEJsYWNrQm94MVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBSU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDFUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworCXNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnZvY2F0aW9uOmludm9jYXRpb24KKyAgICAgICAgICAgICAgICB0ZXN0QmFzZVBhdGhTdWZmaXg6QCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTEiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRSU1NFeHBhbmRlZF07CisKKwlpZiAoc2VsZikgeworCQlbc2VsZiBhZGRUZXN0OjU5IHRyeUhhcmRlckNvdW50OjY0IHJvdGF0aW9uOjAuMGZdOworCQlbc2VsZiBhZGRUZXN0OjU5IHRyeUhhcmRlckNvdW50OjY0IHJvdGF0aW9uOjE4MC4wZl07CisJfQorCisJcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKwlbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDJUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gyVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGUyYzYxCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gyVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBSU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDJUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDJUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gyVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmE1OTA0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gyVGVzdENhc2UubQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJSU1NFeHBhbmRlZFN0YWNrZWRCbGFja0JveDJUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gUlNTRXhwYW5kZWRTdGFja2VkQmxhY2tCb3gyVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKwlzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0yIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0UlNTRXhwYW5kZWRdOworCisJaWYgKHNlbGYpIHsKKwkJW3NlbGYgYWRkVGVzdDoyIHRyeUhhcmRlckNvdW50Ojcgcm90YXRpb246MC4wZl07CisJCVtzZWxmIGFkZFRlc3Q6MiB0cnlIYXJkZXJDb3VudDo3IHJvdGF0aW9uOjE4MC4wZl07CisJfQorCisJcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKwlbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZFN0YWNrZWRJbnRlcm5hbFRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZFN0YWNrZWRJbnRlcm5hbFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4MzEwNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1JTU0V4cGFuZGVkU3RhY2tlZEludGVybmFsVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxTZW5UZXN0aW5nS2l0L1NlblRlc3RpbmdLaXQuaD4KKworQGludGVyZmFjZSBSU1NFeHBhbmRlZFN0YWNrZWRJbnRlcm5hbFRlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRTdGFja2VkSW50ZXJuYWxUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvUlNTRXhwYW5kZWRTdGFja2VkSW50ZXJuYWxUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTBhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9SU1NFeHBhbmRlZFN0YWNrZWRJbnRlcm5hbFRlc3RDYXNlLm0KQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiUlNTRXhwYW5kZWRTdGFja2VkSW50ZXJuYWxUZXN0Q2FzZS5oIgorI2ltcG9ydCAiVGVzdENhc2VVdGlsLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBSU1NFeHBhbmRlZFN0YWNrZWRJbnRlcm5hbFRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdERlY29kaW5nUm93QnlSb3cgeworICBaWFJTU0V4cGFuZGVkUmVhZGVyICpyc3NFeHBhbmRlZFJlYWRlciA9IFtbWlhSU1NFeHBhbmRlZFJlYWRlciBhbGxvY10gaW5pdF07CisKKyAgWlhCaW5hcnlCaXRtYXAgKmJpbmFyeU1hcCA9IFtUZXN0Q2FzZVV0aWwgYmluYXJ5Qml0bWFwOkAiUmVzb3VyY2VzL2JsYWNrYm94L3Jzc2V4cGFuZGVkc3RhY2tlZC0yLzEwMDAucG5nIl07CisKKwlpbnQgZmlyc3RSb3dOdW1iZXIgPSBbYmluYXJ5TWFwIGhlaWdodF0gLyAzOworICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgWlhCaXRBcnJheSAqZmlyc3RSb3cgPSBbYmluYXJ5TWFwIGJsYWNrUm93OmZpcnN0Um93TnVtYmVyIHJvdzpuaWwgZXJyb3I6JmVycm9yXTsKKyAgU1RBc3NlcnROaWwoZXJyb3IsIFtlcnJvciBkZXNjcmlwdGlvbl0pOworCisgIGlmIChbcnNzRXhwYW5kZWRSZWFkZXIgZGVjb2RlUm93MnBhaXJzOmZpcnN0Um93TnVtYmVyIHJvdzpmaXJzdFJvd10pIHsKKyAgICBTVEZhaWwoQCJOb3QgZm91bmQgZXJyb3IgZXhwZWN0ZWQiKTsKKyAgfQorCisgIFNUQXNzZXJ0RXF1YWxzKFtbcnNzRXhwYW5kZWRSZWFkZXIgcm93c10gY291bnRdLCAoTlNVSW50ZWdlcikxLCBAInRoZSBmaXJzdCByb3cgbm90IHJlY29nbml6ZWQiKTsKKyAgWlhFeHBhbmRlZFJvdyAqZmlyc3RFeHBhbmRlZFJvdyA9IHJzc0V4cGFuZGVkUmVhZGVyLnJvd3NbMF07CisgIFNUQXNzZXJ0RXF1YWxzKGZpcnN0RXhwYW5kZWRSb3cucm93TnVtYmVyLCBmaXJzdFJvd051bWJlciwgQCJ0aGUgZmlyc3Qgcm93IG51bWJlciBkb2Vzbid0IG1hdGNoIik7CisKKyAgU1RBc3NlcnRFcXVhbHMoW2ZpcnN0RXhwYW5kZWRSb3cucGFpcnMgY291bnRdLCAoTlNVSW50ZWdlcikyLCBAIndyb25nIG51bWJlciBpZiBwYWlycyBpbiB0aGUgZmlyc3Qgcm93Iik7CisKKyAgW2ZpcnN0RXhwYW5kZWRSb3cucGFpcnNbMV0gZmluZGVyUGF0dGVybl0uc3RhcnRFbmRbMV0gPSBAMDsKKworCWludCBzZWNvbmRSb3dOdW1iZXIgPSAyICogW2JpbmFyeU1hcCBoZWlnaHRdIC8gMzsKKyAgZXJyb3IgPSBuaWw7CisgIFpYQml0QXJyYXkgKnNlY29uZFJvdyA9IFtiaW5hcnlNYXAgYmxhY2tSb3c6c2Vjb25kUm93TnVtYmVyIHJvdzpuaWwgZXJyb3I6JmVycm9yXTsKKyAgU1RBc3NlcnROaWwoZXJyb3IsIFtlcnJvciBkZXNjcmlwdGlvbl0pOworICBbc2Vjb25kUm93IHJldmVyc2VdOworCisgIE5TTXV0YWJsZUFycmF5KiB0b3RhbFBhaXJzID0gW3Jzc0V4cGFuZGVkUmVhZGVyIGRlY29kZVJvdzJwYWlyczpzZWNvbmRSb3dOdW1iZXIgcm93OnNlY29uZFJvd107CisgIGVycm9yID0gbmlsOworCisgIFpYUmVzdWx0ICpyZXN1bHQgPSBbcnNzRXhwYW5kZWRSZWFkZXIgY29uc3RydWN0UmVzdWx0OnRvdGFsUGFpcnMgZXJyb3I6JmVycm9yXTsKKyAgU1RBc3NlcnROaWwoZXJyb3IsIFtlcnJvciBkZXNjcmlwdGlvbl0pOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhyZXN1bHQudGV4dCwgQCIoMDEpOTg4OTg3NjU0MzIxMDYoMzIwMikwMTIzNDUoMTUpOTkxMjMxIiwgQCJ3cm9uZyByZXN1bHQiKTsKK30KKworLSAodm9pZCl0ZXN0Q29tcGxldGVEZWNvZGluZyB7CisgIFpYUlNTRXhwYW5kZWRSZWFkZXIgKnJzc0V4cGFuZGVkUmVhZGVyID0gW1taWFJTU0V4cGFuZGVkUmVhZGVyIGFsbG9jXSBpbml0XTsKKworICBaWEJpbmFyeUJpdG1hcCAqYmluYXJ5TWFwID0gW1Rlc3RDYXNlVXRpbCBiaW5hcnlCaXRtYXA6QCJSZXNvdXJjZXMvYmxhY2tib3gvcnNzZXhwYW5kZWRzdGFja2VkLTIvMTAwMC5wbmciXTsKKworICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgWlhSZXN1bHQgKnJlc3VsdCA9IFtyc3NFeHBhbmRlZFJlYWRlciBkZWNvZGU6YmluYXJ5TWFwIGVycm9yOiZlcnJvcl07CisgIFNUQXNzZXJ0TmlsKGVycm9yLCBbZXJyb3IgZGVzY3JpcHRpb25dKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMocmVzdWx0LnRleHQsIEAiKDAxKTk4ODk4NzY1NDMyMTA2KDMyMDIpMDEyMzQ1KDE1KTk5MTIzMSIsIEAid3JvbmcgcmVzdWx0Iik7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1Rlc3RDYXNlVXRpbC5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvVGVzdENhc2VVdGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhNTE4MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1Rlc3RDYXNlVXRpbC5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0BjbGFzcyBaWEJpbmFyeUJpdG1hcDsKKworQGludGVyZmFjZSBUZXN0Q2FzZVV0aWwgOiBOU09iamVjdAorCisrIChaWEJpbmFyeUJpdG1hcCAqKWJpbmFyeUJpdG1hcDooTlNTdHJpbmcgKilwYXRoOworCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9UZXN0Q2FzZVV0aWwubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1Rlc3RDYXNlVXRpbC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NzQ2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9UZXN0Q2FzZVV0aWwubQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJUZXN0Q2FzZVV0aWwuaCIKKworQGltcGxlbWVudGF0aW9uIFRlc3RDYXNlVXRpbAorCisrIChaWEJpbmFyeUJpdG1hcCAqKWJpbmFyeUJpdG1hcDooTlNTdHJpbmcgKilwYXRoIHsKKyAgWlhJbWFnZSAqaW1hZ2UgPSBbW1pYSW1hZ2UgYWxsb2NdIGluaXRXaXRoVVJMOltbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXSBVUkxGb3JSZXNvdXJjZTpwYXRoIHdpdGhFeHRlbnNpb246bmlsXV07CisgIHJldHVybiBbW1pYQmluYXJ5Qml0bWFwIGFsbG9jXSBpbml0V2l0aEJpbmFyaXplcjpbW1pYR2xvYmFsSGlzdG9ncmFtQmluYXJpemVyIGFsbG9jXSBpbml0V2l0aFNvdXJjZTpbW1pYQ0dJbWFnZUx1bWluYW5jZVNvdXJjZSBhbGxvY10gaW5pdFdpdGhaWEltYWdlOmltYWdlXV1dOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9aWEJpbmFyeVV0aWwuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1pYQmluYXJ5VXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZThiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9aWEJpbmFyeVV0aWwuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitAY2xhc3MgWlhCaXRBcnJheTsKKworQGludGVyZmFjZSBaWEJpbmFyeVV0aWwgOiBOU09iamVjdAorCisrIChaWEJpdEFycmF5ICopYnVpbGRCaXRBcnJheUZyb21TdHJpbmc6KE5TU3RyaW5nICopZGF0YTsKKysgKFpYQml0QXJyYXkgKilidWlsZEJpdEFycmF5RnJvbVN0cmluZ1dpdGhvdXRTcGFjZXM6KE5TU3RyaW5nICopZGF0YTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvWlhCaW5hcnlVdGlsLm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9aWEJpbmFyeVV0aWwubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDc5MTQzCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvWlhCaW5hcnlVdGlsLm0KQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaW5hcnlVdGlsLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEJpbmFyeVV0aWwKKworLyoKKyAqIENvbnN0cnVjdHMgYSBCaXRBcnJheSBmcm9tIGEgU3RyaW5nIGxpa2UgdGhlIG9uZSByZXR1cm5lZCBmcm9tIEJpdEFycmF5LnRvU3RyaW5nKCkKKyAqLworKyAoWlhCaXRBcnJheSAqKWJ1aWxkQml0QXJyYXlGcm9tU3RyaW5nOihOU1N0cmluZyAqKWRhdGEgeworICBOU1N0cmluZyAqZG90c0FuZFhzID0gW1tkYXRhIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIjEiIHdpdGhTdHJpbmc6QCJYIl0KKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCeVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCIwIiB3aXRoU3RyaW5nOkAiLiJdOworICBaWEJpdEFycmF5ICpiaW5hcnkgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRXaXRoU2l6ZTooaW50KVtkb3RzQW5kWHMgc3RyaW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAiICIgd2l0aFN0cmluZzpAIiJdLmxlbmd0aF07CisgIGludCBjb3VudGVyID0gMDsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGRvdHNBbmRYcy5sZW5ndGg7ICsraSl7CisgICAgaWYoaSAlIDkgPT0gMCkgeyAvLyBzcGFjZXMKKyAgICAgIGlmKFtkb3RzQW5kWHMgY2hhcmFjdGVyQXRJbmRleDppXSAhPSAnICcpIHsKKyAgICAgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpAIklsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIgcmVhc29uOkAic3BhY2UgZXhwZWN0ZWQiIHVzZXJJbmZvOm5pbF07CisgICAgICB9CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICB1bmljaGFyIGN1cnJlbnRDaGFyID0gW2RvdHNBbmRYcyBjaGFyYWN0ZXJBdEluZGV4OmldOworICAgIGlmIChjdXJyZW50Q2hhciA9PSAnWCcgfHwgY3VycmVudENoYXIgPT0gJ3gnKSB7CisgICAgICBbYmluYXJ5IHNldDpjb3VudGVyXTsKKyAgICB9CisgICAgY291bnRlcisrOworICB9CisgIHJldHVybiBiaW5hcnk7Cit9CisKKysgKFpYQml0QXJyYXkgKilidWlsZEJpdEFycmF5RnJvbVN0cmluZ1dpdGhvdXRTcGFjZXM6KE5TU3RyaW5nICopZGF0YSB7CisgIE5TTXV0YWJsZVN0cmluZyAqc2IgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisKKyAgTlNTdHJpbmcgKmRvdHNBbmRYcyA9IFtbZGF0YSBzdHJpbmdCeVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCIxIiB3aXRoU3RyaW5nOkAiWCJdCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAiMCIgd2l0aFN0cmluZzpAIi4iXTsKKworICBpbnQgY3VycmVudCA9IDA7CisgIHdoaWxlIChjdXJyZW50IDwgZG90c0FuZFhzLmxlbmd0aCkgeworICAgIFtzYiBhcHBlbmRTdHJpbmc6QCIgIl07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4ICYmIGN1cnJlbnQgPCBkb3RzQW5kWHMubGVuZ3RoOyArK2kpeworICAgICAgW3NiIGFwcGVuZEZvcm1hdDpAIiVDIiwgW2RvdHNBbmRYcyBjaGFyYWN0ZXJBdEluZGV4OmN1cnJlbnRdXTsKKyAgICAgIGN1cnJlbnQrKzsKKyAgICB9CisgIH0KKworICByZXR1cm4gW3NlbGYgYnVpbGRCaXRBcnJheUZyb21TdHJpbmc6c2JdOworfQorCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1pYQmluYXJ5VXRpbFRlc3QuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1pYQmluYXJ5VXRpbFRlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGY1ODc2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvWlhCaW5hcnlVdGlsVGVzdC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYQmluYXJ5VXRpbFRlc3QgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9aWEJpbmFyeVV0aWxUZXN0Lm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9aWEJpbmFyeVV0aWxUZXN0Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5ZWE2NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1pYQmluYXJ5VXRpbFRlc3QubQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpbmFyeVV0aWwuaCIKKyNpbXBvcnQgIlpYQmluYXJ5VXRpbFRlc3QuaCIKKworQGltcGxlbWVudGF0aW9uIFpYQmluYXJ5VXRpbFRlc3QKKworLSAodm9pZCl0ZXN0QnVpbGRCaXRBcnJheUZyb21TdHJpbmcgeworCisgIE5TU3RyaW5nICpkYXRhID0gQCIgLi5YLi5YLi4gLi5YWFguLi4gWFhYWFhYWFggLi4uLi4uLi4iOworICBbc2VsZiBjaGVjazpkYXRhXTsKKworICBkYXRhID0gQCIgWFhYLi5YLi4iOworICBbc2VsZiBjaGVjazpkYXRhXTsKKworICBkYXRhID0gQCIgWFgiOworICBbc2VsZiBjaGVjazpkYXRhXTsKKworICBkYXRhID0gQCIgLi4uLlhYLi4gLi5YWCI7CisgIFtzZWxmIGNoZWNrOmRhdGFdOworCisgIGRhdGEgPSBAIiAuLi4uWFguLiAuLlhYLi5YWCAuLi4uWC5YLiAuLi4uLi4uLiI7CisgIFtzZWxmIGNoZWNrOmRhdGFdOworfQorCistICh2b2lkKWNoZWNrOihOU1N0cmluZyAqKWRhdGEgeworICBaWEJpdEFycmF5ICpiaW5hcnkgPSBbWlhCaW5hcnlVdGlsIGJ1aWxkQml0QXJyYXlGcm9tU3RyaW5nOmRhdGFdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYmluYXJ5IGRlc2NyaXB0aW9uXSwgZGF0YSwgQCJFeHBlY3RlZCAlQCB0byBlcXVhbCAlQCIsIFtiaW5hcnkgZGVzY3JpcHRpb25dLCBkYXRhKTsKK30KKworLSAodm9pZCljaGVja1dpdGhvdXRTcGFjZXM6KE5TU3RyaW5nICopZGF0YSB7CisgIE5TU3RyaW5nICpkYXRhV2l0aG91dFNwYWNlcyA9IFtkYXRhIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIiAiIHdpdGhTdHJpbmc6QCIiXTsKKyAgWlhCaXRBcnJheSAqYmluYXJ5ID0gW1pYQmluYXJ5VXRpbCBidWlsZEJpdEFycmF5RnJvbVN0cmluZ1dpdGhvdXRTcGFjZXM6ZGF0YVdpdGhvdXRTcGFjZXNdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYmluYXJ5IGRlc2NyaXB0aW9uXSwgZGF0YSwgQCJFeHBlY3RlZCAlQCB0byBlcXVhbCAlQCIsIFtiaW5hcnkgZGVzY3JpcHRpb25dLCBkYXRhKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvWlhCaXRBcnJheUJ1aWxkZXJUZXN0LmggYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9aWEJpdEFycmF5QnVpbGRlclRlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzM3Nzk4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvWlhCaXRBcnJheUJ1aWxkZXJUZXN0LmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhCaXRBcnJheUJ1aWxkZXJUZXN0IDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvWlhCaXRBcnJheUJ1aWxkZXJUZXN0Lm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9aWEJpdEFycmF5QnVpbGRlclRlc3QubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzQ2Y2NlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvWlhCaXRBcnJheUJ1aWxkZXJUZXN0Lm0KQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhCaXRBcnJheUJ1aWxkZXJUZXN0LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEJpdEFycmF5QnVpbGRlclRlc3QKKworLSAodm9pZCl0ZXN0QnVpbGRCaXRBcnJheTEgeworICBpbnQgbGVuZ3Roc1syXSA9IHsxLCAyfTsKKyAgaW50IHBhaXJWYWx1ZTFbMV0gPSB7IDE5IH07CisgIGludCBwYWlyVmFsdWUyWzJdID0geyA2NzMsIDE2IH07CisgIAorICBpbnQgKnBhaXJWYWx1ZXNbMl07CisgIHBhaXJWYWx1ZXNbMF0gPSBwYWlyVmFsdWUxOworICBwYWlyVmFsdWVzWzFdID0gcGFpclZhbHVlMjsKKworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIiAuLi4uLi4uWCAuLlhYLi5YLiBYLlguLi4uWCAuLi4uLi4uWCAuLi4uIjsKKworICBbc2VsZiBjaGVja0JpbmFyeVZhbHVlczpwYWlyVmFsdWVzIHBhaXJWYWx1ZXNMZW46MiBsZW5ndGhzOmxlbmd0aHMgZXhwZWN0ZWQ6ZXhwZWN0ZWRdOworfQorCistICh2b2lkKWNoZWNrQmluYXJ5VmFsdWVzOihpbnQgKiopcGFpclZhbHVlcyBwYWlyVmFsdWVzTGVuOihpbnQpcGFpclZhbHVlc0xlbiBsZW5ndGhzOihpbnQgKilsZW5ndGhzIGV4cGVjdGVkOihOU1N0cmluZyAqKWV4cGVjdGVkIHsKKyAgWlhCaXRBcnJheSAqYmluYXJ5ID0gW3NlbGYgYnVpbGRCaXRBcnJheVBhaXJWYWx1ZXM6cGFpclZhbHVlcyBwYWlyVmFsdWVzTGVuOnBhaXJWYWx1ZXNMZW4gbGVuZ3RoczpsZW5ndGhzXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW2JpbmFyeSBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkICVAIHRvIGVxdWFsICVAIiwgW2JpbmFyeSBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkKTsKK30KKworLSAoWlhCaXRBcnJheSAqKWJ1aWxkQml0QXJyYXlQYWlyVmFsdWVzOihpbnQgKiopcGFpclZhbHVlcyBwYWlyVmFsdWVzTGVuOihpbnQpcGFpclZhbHVlc0xlbiBsZW5ndGhzOihpbnQgKilsZW5ndGhzIHsKKyAgTlNNdXRhYmxlQXJyYXkgKnBhaXJzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OjJdOworICBmb3IgKGludCBpID0gMDsgaSA8IHBhaXJWYWx1ZXNMZW47ICsraSkgeworICAgIGludCAqcGFpciA9IHBhaXJWYWx1ZXNbaV07CisKKyAgICBaWERhdGFDaGFyYWN0ZXIgKmxlZnRDaGFyOworICAgIGlmIChpID09IDApIHsKKyAgICAgIGxlZnRDaGFyID0gbmlsOworICAgIH0gZWxzZSB7CisgICAgICBsZWZ0Q2hhciA9IFtbWlhEYXRhQ2hhcmFjdGVyIGFsbG9jXSBpbml0V2l0aFZhbHVlOnBhaXJbMF0gY2hlY2tzdW1Qb3J0aW9uOjBdOworICAgIH0KKworICAgIFpYRGF0YUNoYXJhY3RlciAqcmlnaHRDaGFyOworICAgIGlmIChpID09IDApIHsKKyAgICAgIHJpZ2h0Q2hhciA9IFtbWlhEYXRhQ2hhcmFjdGVyIGFsbG9jXSBpbml0V2l0aFZhbHVlOnBhaXJbMF0gY2hlY2tzdW1Qb3J0aW9uOjBdOworICAgIH0gZWxzZSBpZiAobGVuZ3Roc1tpXSA9PSAyKSB7CisgICAgICByaWdodENoYXIgPSBbW1pYRGF0YUNoYXJhY3RlciBhbGxvY10gaW5pdFdpdGhWYWx1ZTpwYWlyWzFdIGNoZWNrc3VtUG9ydGlvbjowXTsKKyAgICB9IGVsc2UgeworICAgICAgcmlnaHRDaGFyID0gbmlsOworICAgIH0KKworICAgIFpYRXhwYW5kZWRQYWlyICpleHBhbmRlZFBhaXIgPSBbW1pYRXhwYW5kZWRQYWlyIGFsbG9jXSBpbml0V2l0aExlZnRDaGFyOmxlZnRDaGFyIHJpZ2h0Q2hhcjpyaWdodENoYXIgZmluZGVyUGF0dGVybjpuaWwgbWF5QmVMYXN0OllFU107CisgICAgW3BhaXJzIGFkZE9iamVjdDpleHBhbmRlZFBhaXJdOworICB9CisKKyAgcmV0dXJuIFtaWEJpdEFycmF5QnVpbGRlciBidWlsZEJpdEFycmF5OnBhaXJzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvWlhFeHBhbmRlZEluZm9ybWF0aW9uRGVjb2RlclRlc3QuaCBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1pYRXhwYW5kZWRJbmZvcm1hdGlvbkRlY29kZXJUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhODBiOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL1pYRXhwYW5kZWRJbmZvcm1hdGlvbkRlY29kZXJUZXN0LmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhFeHBhbmRlZEluZm9ybWF0aW9uRGVjb2RlclRlc3QgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9aWEV4cGFuZGVkSW5mb3JtYXRpb25EZWNvZGVyVGVzdC5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvWlhFeHBhbmRlZEluZm9ybWF0aW9uRGVjb2RlclRlc3QubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWM2M2VhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvWlhFeHBhbmRlZEluZm9ybWF0aW9uRGVjb2RlclRlc3QubQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpbmFyeVV0aWwuaCIKKyNpbXBvcnQgIlpYRXhwYW5kZWRJbmZvcm1hdGlvbkRlY29kZXJUZXN0LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWEV4cGFuZGVkSW5mb3JtYXRpb25EZWNvZGVyVGVzdAorCistICh2b2lkKXRlc3ROb0FpIHsKKyAgWlhCaXRBcnJheSAqaW5mb3JtYXRpb24gPSBbWlhCaW5hcnlVdGlsIGJ1aWxkQml0QXJyYXlGcm9tU3RyaW5nOkAiIC4uLi4uLi5YIC4uWFguLlguIFguWC4uLi5YIC4uLi4uLi5YIC4uLi4iXTsKKworICBaWEFic3RyYWN0RXhwYW5kZWREZWNvZGVyICpkZWNvZGVyID0gW1pYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIgY3JlYXRlRGVjb2RlcjppbmZvcm1hdGlvbl07CisgIE5TU3RyaW5nICpkZWNvZGVkID0gW2RlY29kZXIgcGFyc2VJbmZvcm1hdGlvbldpdGhFcnJvcjpuaWxdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhkZWNvZGVkLCBAIigxMCkxMkEiLCBAIkV4cGVjdGVkICVAIHRvIGVxdWFsIFwiKDEwKTEyQVwiIik7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL0FJMDFfMzEwM19EZWNvZGVyVGVzdC5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvQUkwMV8zMTAzX0RlY29kZXJUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U0Yjc5MwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL0FJMDFfMzEwM19EZWNvZGVyVGVzdC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0RGVjb2RlclRlc3QuaCIKKworQGludGVyZmFjZSBBSTAxXzMxMDNfRGVjb2RlclRlc3QgOiBBYnN0cmFjdERlY29kZXJUZXN0CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL0FJMDFfMzEwM19EZWNvZGVyVGVzdC5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvQUkwMV8zMTAzX0RlY29kZXJUZXN0Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjZDZhMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL0FJMDFfMzEwM19EZWNvZGVyVGVzdC5tCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFJMDFfMzEwM19EZWNvZGVyVGVzdC5oIgorCitzdGF0aWMgTlNTdHJpbmcgKmhlYWRlciA9IEAiLi5YLi4iOworCitAaW1wbGVtZW50YXRpb24gQUkwMV8zMTAzX0RlY29kZXJUZXN0CisKKy0gKHZvaWQpdGVzdDAxXzMxMDNfMSB7CisgIE5TU3RyaW5nICpkYXRhID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAJUAiLCBoZWFkZXIsIGNvbXByZXNzZWRHdGluXzkwMDEyMzQ1Njc5ODkwOCwgY29tcHJlc3NlZDE1Yml0V2VpZ2h0XzE3NTBdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigwMSk5MDAxMjM0NTY3ODkwOCgzMTAzKTAwMTc1MCI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEJpbmFyeVN0cmluZzpkYXRhIGV4cGVjdGVkTnVtYmVyOmV4cGVjdGVkIGVycm9yOm5pbF07Cit9CisKKy0gKHZvaWQpdGVzdDAxXzMxMDNfMiB7CisgIE5TU3RyaW5nICpkYXRhID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAJUAiLCBoZWFkZXIsIGNvbXByZXNzZWRHdGluXzkwMDAwMDAwMDAwMDAwOCwgY29tcHJlc3NlZDE1Yml0V2VpZ2h0XzBdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigwMSk5MDAwMDAwMDAwMDAwMygzMTAzKTAwMDAwMCI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEJpbmFyeVN0cmluZzpkYXRhIGV4cGVjdGVkTnVtYmVyOmV4cGVjdGVkIGVycm9yOm5pbF07Cit9CisKKy0gKHZvaWQpdGVzdDAxXzMxMDNfaW52YWxpZCB7CisgIE5TU3RyaW5nICpkYXRhID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAJUAuLiIsIGhlYWRlciwgY29tcHJlc3NlZEd0aW5fOTAwMTIzNDU2Nzk4OTA4LCBjb21wcmVzc2VkMTViaXRXZWlnaHRfMTc1MF07CisKKyAgTlNFcnJvciAqZXJyb3I7CisgIGlmKFtzZWxmIGFzc2VydENvcnJlY3RCaW5hcnlTdHJpbmc6ZGF0YSBleHBlY3RlZE51bWJlcjpAIiIgZXJyb3I6JmVycm9yXSB8fCBlcnJvci5jb2RlICE9IFpYTm90Rm91bmRFcnJvcikgeworICAgIFNURmFpbChAIk5vdEZvdW5kRXJyb3IgZXhwZWN0ZWQiKTsKKyAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9BSTAxXzMyMDJfMzIwM19EZWNvZGVyVGVzdC5oIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvQUkwMV8zMjAyXzMyMDNfRGVjb2RlclRlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODdmYWRiCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvQUkwMV8zMjAyXzMyMDNfRGVjb2RlclRlc3QuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdERlY29kZXJUZXN0LmgiCisKK0BpbnRlcmZhY2UgQUkwMV8zMjAyXzMyMDNfRGVjb2RlclRlc3QgOiBBYnN0cmFjdERlY29kZXJUZXN0CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL0FJMDFfMzIwMl8zMjAzX0RlY29kZXJUZXN0Lm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9BSTAxXzMyMDJfMzIwM19EZWNvZGVyVGVzdC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTg2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9BSTAxXzMyMDJfMzIwM19EZWNvZGVyVGVzdC5tCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFJMDFfMzIwMl8zMjAzX0RlY29kZXJUZXN0LmgiCisKK3N0YXRpYyBOU1N0cmluZyAqaGVhZGVyID0gQCIuLlguWCI7CisKK0BpbXBsZW1lbnRhdGlvbiBBSTAxXzMyMDJfMzIwM19EZWNvZGVyVGVzdAorCistICh2b2lkKXRlc3QwMV8zMjAyXzEgeworICBOU1N0cmluZyAqZGF0YSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCVAIiwgaGVhZGVyLCBjb21wcmVzc2VkR3Rpbl85MDAxMjM0NTY3OTg5MDgsIGNvbXByZXNzZWQxNWJpdFdlaWdodF8xNzUwXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMDEpOTAwMTIzNDU2Nzg5MDgoMzIwMikwMDE3NTAiOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RCaW5hcnlTdHJpbmc6ZGF0YSBleHBlY3RlZE51bWJlcjpleHBlY3RlZCBlcnJvcjpuaWxdOworfQorCistICh2b2lkKXRlc3QwMV8zMjAzXzEgeworICBOU1N0cmluZyAqZGF0YSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCVAIiwgaGVhZGVyLCBjb21wcmVzc2VkR3Rpbl85MDAxMjM0NTY3OTg5MDgsIGNvbXByZXNzZWQxNWJpdFdlaWdodF8xMTc1MF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDAxKTkwMDEyMzQ1Njc4OTA4KDMyMDMpMDAxNzUwIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0QmluYXJ5U3RyaW5nOmRhdGEgZXhwZWN0ZWROdW1iZXI6ZXhwZWN0ZWQgZXJyb3I6bmlsXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvQUkwMV8zWDBYXzFYX0RlY29kZXJUZXN0LmggYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9BSTAxXzNYMFhfMVhfRGVjb2RlclRlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQ5MzNlCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvQUkwMV8zWDBYXzFYX0RlY29kZXJUZXN0LmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3REZWNvZGVyVGVzdC5oIgorCitAaW50ZXJmYWNlIEFJMDFfM1gwWF8xWF9EZWNvZGVyVGVzdCA6IEFic3RyYWN0RGVjb2RlclRlc3QKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvQUkwMV8zWDBYXzFYX0RlY29kZXJUZXN0Lm0gYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9BSTAxXzNYMFhfMVhfRGVjb2RlclRlc3QubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTYxZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvQUkwMV8zWDBYXzFYX0RlY29kZXJUZXN0Lm0KQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFJMDFfM1gwWF8xWF9EZWNvZGVyVGVzdC5oIgorCitzdGF0aWMgTlNTdHJpbmcgKmhlYWRlcl8zMTB4XzExID0gQCIuLlhYWC4uLiI7CitzdGF0aWMgTlNTdHJpbmcgKmhlYWRlcl8zMjB4XzExID0gQCIuLlhYWC4uWCI7CitzdGF0aWMgTlNTdHJpbmcgKmhlYWRlcl8zMTB4XzEzID0gQCIuLlhYWC5YLiI7CitzdGF0aWMgTlNTdHJpbmcgKmhlYWRlcl8zMjB4XzEzID0gQCIuLlhYWC5YWCI7CitzdGF0aWMgTlNTdHJpbmcgKmhlYWRlcl8zMTB4XzE1ID0gQCIuLlhYWFguLiI7CitzdGF0aWMgTlNTdHJpbmcgKmhlYWRlcl8zMjB4XzE1ID0gQCIuLlhYWFguWCI7CitzdGF0aWMgTlNTdHJpbmcgKmhlYWRlcl8zMTB4XzE3ID0gQCIuLlhYWFhYLiI7CitzdGF0aWMgTlNTdHJpbmcgKmhlYWRlcl8zMjB4XzE3ID0gQCIuLlhYWFhYWCI7CisKK0BpbXBsZW1lbnRhdGlvbiBBSTAxXzNYMFhfMVhfRGVjb2RlclRlc3QKKworLSAodm9pZCl0ZXN0MDFfMzEwWF8xWF9lbmREYXRlIHsKKyAgTlNTdHJpbmcgKmRhdGEgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAJUAlQCVAIiwgaGVhZGVyXzMxMHhfMTEsIGNvbXByZXNzZWRHdGluXzkwMDEyMzQ1Njc5ODkwOCwKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZDIwYml0V2VpZ2h0XzE3NTAsIGNvbXByZXNzZWREYXRlX0VuZF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDApMDAxNzUwIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0QmluYXJ5U3RyaW5nOmRhdGEgZXhwZWN0ZWROdW1iZXI6ZXhwZWN0ZWQgZXJyb3I6bmlsXTsKK30KKworLSAodm9pZCl0ZXN0MDFfMzEwWF8xMV8xIHsKKyAgTlNTdHJpbmcgKmRhdGEgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAJUAlQCVAIiwgaGVhZGVyXzMxMHhfMTEsIGNvbXByZXNzZWRHdGluXzkwMDEyMzQ1Njc5ODkwOCwKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZDIwYml0V2VpZ2h0XzE3NTAsIGNvbXByZXNzZWREYXRlX01hcmNoXzEydGhfMjAxMF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDApMDAxNzUwKDExKTEwMDMxMiI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEJpbmFyeVN0cmluZzpkYXRhIGV4cGVjdGVkTnVtYmVyOmV4cGVjdGVkIGVycm9yOm5pbF07Cit9CisKKy0gKHZvaWQpdGVzdDAxXzMyMFhfMTFfMSB7CisgIE5TU3RyaW5nICpkYXRhID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAJUAlQCIsIGhlYWRlcl8zMjB4XzExLCBjb21wcmVzc2VkR3Rpbl85MDAxMjM0NTY3OTg5MDgsCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWQyMGJpdFdlaWdodF8xNzUwLCBjb21wcmVzc2VkRGF0ZV9NYXJjaF8xMnRoXzIwMTBdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigwMSk5MDAxMjM0NTY3ODkwOCgzMjAwKTAwMTc1MCgxMSkxMDAzMTIiOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RCaW5hcnlTdHJpbmc6ZGF0YSBleHBlY3RlZE51bWJlcjpleHBlY3RlZCBlcnJvcjpuaWxdOworfQorCistICh2b2lkKXRlc3QwMV8zMTBYXzEzXzEgeworICBOU1N0cmluZyAqZGF0YSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCVAJUAiLCBoZWFkZXJfMzEweF8xMywgY29tcHJlc3NlZEd0aW5fOTAwMTIzNDU2Nzk4OTA4LAorICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkMjBiaXRXZWlnaHRfMTc1MCwgY29tcHJlc3NlZERhdGVfTWFyY2hfMTJ0aF8yMDEwXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMDEpOTAwMTIzNDU2Nzg5MDgoMzEwMCkwMDE3NTAoMTMpMTAwMzEyIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0QmluYXJ5U3RyaW5nOmRhdGEgZXhwZWN0ZWROdW1iZXI6ZXhwZWN0ZWQgZXJyb3I6bmlsXTsKK30KKworLSAodm9pZCl0ZXN0MDFfMzIwWF8xM18xIHsKKyAgTlNTdHJpbmcgKmRhdGEgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAJUAlQCVAIiwgaGVhZGVyXzMyMHhfMTMsIGNvbXByZXNzZWRHdGluXzkwMDEyMzQ1Njc5ODkwOCwKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZDIwYml0V2VpZ2h0XzE3NTAsIGNvbXByZXNzZWREYXRlX01hcmNoXzEydGhfMjAxMF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDAxKTkwMDEyMzQ1Njc4OTA4KDMyMDApMDAxNzUwKDEzKTEwMDMxMiI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEJpbmFyeVN0cmluZzpkYXRhIGV4cGVjdGVkTnVtYmVyOmV4cGVjdGVkIGVycm9yOm5pbF07Cit9CisKKy0gKHZvaWQpdGVzdDAxXzMxMFhfMTVfMSB7CisgIE5TU3RyaW5nICpkYXRhID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAJUAlQCIsIGhlYWRlcl8zMTB4XzE1LCBjb21wcmVzc2VkR3Rpbl85MDAxMjM0NTY3OTg5MDgsCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWQyMGJpdFdlaWdodF8xNzUwLCBjb21wcmVzc2VkRGF0ZV9NYXJjaF8xMnRoXzIwMTBdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigwMSk5MDAxMjM0NTY3ODkwOCgzMTAwKTAwMTc1MCgxNSkxMDAzMTIiOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RCaW5hcnlTdHJpbmc6ZGF0YSBleHBlY3RlZE51bWJlcjpleHBlY3RlZCBlcnJvcjpuaWxdOworfQorCistICh2b2lkKXRlc3QwMV8zMjBYXzE1XzEgeworICBOU1N0cmluZyAqZGF0YSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCVAJUAiLCBoZWFkZXJfMzIweF8xNSwgY29tcHJlc3NlZEd0aW5fOTAwMTIzNDU2Nzk4OTA4LAorICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkMjBiaXRXZWlnaHRfMTc1MCwgY29tcHJlc3NlZERhdGVfTWFyY2hfMTJ0aF8yMDEwXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMDEpOTAwMTIzNDU2Nzg5MDgoMzIwMCkwMDE3NTAoMTUpMTAwMzEyIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0QmluYXJ5U3RyaW5nOmRhdGEgZXhwZWN0ZWROdW1iZXI6ZXhwZWN0ZWQgZXJyb3I6bmlsXTsKK30KKworLSAodm9pZCl0ZXN0MDFfMzEwWF8xN18xIHsKKyAgTlNTdHJpbmcgKmRhdGEgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAJUAlQCVAIiwgaGVhZGVyXzMxMHhfMTcsIGNvbXByZXNzZWRHdGluXzkwMDEyMzQ1Njc5ODkwOCwKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZDIwYml0V2VpZ2h0XzE3NTAsIGNvbXByZXNzZWREYXRlX01hcmNoXzEydGhfMjAxMF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDAxKTkwMDEyMzQ1Njc4OTA4KDMxMDApMDAxNzUwKDE3KTEwMDMxMiI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEJpbmFyeVN0cmluZzpkYXRhIGV4cGVjdGVkTnVtYmVyOmV4cGVjdGVkIGVycm9yOm5pbF07Cit9CisKKy0gKHZvaWQpdGVzdDAxXzMyMFhfMTdfMSB7CisgIE5TU3RyaW5nICpkYXRhID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAJUAlQCIsIGhlYWRlcl8zMjB4XzE3LCBjb21wcmVzc2VkR3Rpbl85MDAxMjM0NTY3OTg5MDgsCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWQyMGJpdFdlaWdodF8xNzUwLCBjb21wcmVzc2VkRGF0ZV9NYXJjaF8xMnRoXzIwMTBdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigwMSk5MDAxMjM0NTY3ODkwOCgzMjAwKTAwMTc1MCgxNykxMDAzMTIiOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RCaW5hcnlTdHJpbmc6ZGF0YSBleHBlY3RlZE51bWJlcjpleHBlY3RlZCBlcnJvcjpuaWxdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9BYnN0cmFjdERlY29kZXJUZXN0LmggYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9BYnN0cmFjdERlY29kZXJUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjZmI1MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL0Fic3RyYWN0RGVjb2RlclRlc3QuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxTZW5UZXN0aW5nS2l0L1NlblRlc3RpbmdLaXQuaD4KKworZXh0ZXJuIGNvbnN0IE5TU3RyaW5nICpudW1lcmljXzEwOworZXh0ZXJuIGNvbnN0IE5TU3RyaW5nICpudW1lcmljXzEyOworZXh0ZXJuIGNvbnN0IE5TU3RyaW5nICpudW1lcmljXzFGTkMxOworZXh0ZXJuIGNvbnN0IE5TU3RyaW5nICpudW1lcmljX0ZOQzExOworCitleHRlcm4gY29uc3QgTlNTdHJpbmcgKm51bWVyaWMyYWxwaGE7CisKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqYWxwaGFfQTsKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqYWxwaGFfRk5DMTsKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqYWxwaGEybnVtZXJpYzsKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqYWxwaGEyaXNvaWVjNjQ2OworCitleHRlcm4gY29uc3QgTlNTdHJpbmcgKmk2NDZfQjsKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqaTY0Nl9DOworZXh0ZXJuIGNvbnN0IE5TU3RyaW5nICppNjQ2X0ZOQzE7CitleHRlcm4gY29uc3QgTlNTdHJpbmcgKmlzb2llYzY0Nl8yYWxwaGE7CisKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqY29tcHJlc3NlZEd0aW5fOTAwMTIzNDU2Nzk4OTA4OworZXh0ZXJuIGNvbnN0IE5TU3RyaW5nICpjb21wcmVzc2VkR3Rpbl85MDAwMDAwMDAwMDAwMDg7CisKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqY29tcHJlc3NlZDE1Yml0V2VpZ2h0XzE3NTA7CitleHRlcm4gY29uc3QgTlNTdHJpbmcgKmNvbXByZXNzZWQxNWJpdFdlaWdodF8xMTc1MDsKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqY29tcHJlc3NlZDE1Yml0V2VpZ2h0XzA7CisKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqY29tcHJlc3NlZDIwYml0V2VpZ2h0XzE3NTA7CisKK2V4dGVybiBjb25zdCBOU1N0cmluZyAqY29tcHJlc3NlZERhdGVfTWFyY2hfMTJ0aF8yMDEwOworZXh0ZXJuIGNvbnN0IE5TU3RyaW5nICpjb21wcmVzc2VkRGF0ZV9FbmQ7CisKK0BpbnRlcmZhY2UgQWJzdHJhY3REZWNvZGVyVGVzdCA6IFNlblRlc3RDYXNlCisKKy0gKEJPT0wpYXNzZXJ0Q29ycmVjdEJpbmFyeVN0cmluZzooTlNTdHJpbmcgKiliaW5hcnlTdHJpbmcgZXhwZWN0ZWROdW1iZXI6KE5TU3RyaW5nICopZXhwZWN0ZWROdW1iZXIgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL0Fic3RyYWN0RGVjb2RlclRlc3QubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL0Fic3RyYWN0RGVjb2RlclRlc3QubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODhkN2NmCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvQWJzdHJhY3REZWNvZGVyVGVzdC5tCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0RGVjb2RlclRlc3QuaCIKKyNpbXBvcnQgIlpYQmluYXJ5VXRpbC5oIgorCitjb25zdCBOU1N0cmluZyAqbnVtZXJpY18xMCAgICAgICAgICAgICAgICAgICAgID0gQCIuLlguLlhYIjsKK2NvbnN0IE5TU3RyaW5nICpudW1lcmljXzEyICAgICAgICAgICAgICAgICAgICAgPSBAIi4uWC5YLlgiOworY29uc3QgTlNTdHJpbmcgKm51bWVyaWNfMUZOQzEgICAgICAgICAgICAgICAgICA9IEAiLi5YWFguWCI7Citjb25zdCBOU1N0cmluZyAqbnVtZXJpY19GTkMxMSAgICAgICAgICAgICAgICAgID0gQCJYWFguWFhYIjsKKworY29uc3QgTlNTdHJpbmcgKm51bWVyaWMyYWxwaGEgICAgICAgICAgICAgICAgICA9IEAiLi4uLiI7CisKK2NvbnN0IE5TU3RyaW5nICphbHBoYV9BICAgICAgICAgICAgICAgICAgICAgICAgPSBAIlguLi4uLiI7Citjb25zdCBOU1N0cmluZyAqYWxwaGFfRk5DMSAgICAgICAgICAgICAgICAgICAgID0gQCIuWFhYWCI7Citjb25zdCBOU1N0cmluZyAqYWxwaGEybnVtZXJpYyAgICAgICAgICAgICAgICAgID0gQCIuLi4iOworY29uc3QgTlNTdHJpbmcgKmFscGhhMmlzb2llYzY0NiAgICAgICAgICAgICAgICA9IEAiLi5YLi4iOworCitjb25zdCBOU1N0cmluZyAqaTY0Nl9CICAgICAgICAgICAgICAgICAgICAgICAgID0gQCJYLi4uLi5YIjsKK2NvbnN0IE5TU3RyaW5nICppNjQ2X0MgICAgICAgICAgICAgICAgICAgICAgICAgPSBAIlguLi4uWC4iOworY29uc3QgTlNTdHJpbmcgKmk2NDZfRk5DMSAgICAgICAgICAgICAgICAgICAgICA9IEAiLlhYWFgiOworY29uc3QgTlNTdHJpbmcgKmlzb2llYzY0Nl8yYWxwaGEgICAgICAgICAgICAgICA9IEAiLi5YLi4iOworCitjb25zdCBOU1N0cmluZyAqY29tcHJlc3NlZEd0aW5fOTAwMTIzNDU2Nzk4OTA4ID0gQCIuLi4uLi4uLi5YLi5YWFguWC5YLlguLi5YWC5YWFhYWC5YWFhYLlguIjsKK2NvbnN0IE5TU3RyaW5nICpjb21wcmVzc2VkR3Rpbl85MDAwMDAwMDAwMDAwMDggPSBAIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iOworCitjb25zdCBOU1N0cmluZyAqY29tcHJlc3NlZDE1Yml0V2VpZ2h0XzE3NTAgICAgID0gQCIuLi4uWFguWFguWC5YWC4iOworY29uc3QgTlNTdHJpbmcgKmNvbXByZXNzZWQxNWJpdFdlaWdodF8xMTc1MCAgICA9IEAiLlguWFguWFhYWC4uWFguIjsKK2NvbnN0IE5TU3RyaW5nICpjb21wcmVzc2VkMTViaXRXZWlnaHRfMCAgICAgICAgPSBAIi4uLi4uLi4uLi4uLi4uLiI7CisKK2NvbnN0IE5TU3RyaW5nICpjb21wcmVzc2VkMjBiaXRXZWlnaHRfMTc1MCAgICAgPSBAIi4uLi4uLi4uLlhYLlhYLlguWFguIjsKKworY29uc3QgTlNTdHJpbmcgKmNvbXByZXNzZWREYXRlX01hcmNoXzEydGhfMjAxMCA9IEAiLi4uLlhYWFguWC4uWFguLiI7Citjb25zdCBOU1N0cmluZyAqY29tcHJlc3NlZERhdGVfRW5kICAgICAgICAgICAgID0gQCJYLi5YLlhYLi4uLi4uLi4uIjsKKworQGltcGxlbWVudGF0aW9uIEFic3RyYWN0RGVjb2RlclRlc3QKKworLSAoQk9PTClhc3NlcnRDb3JyZWN0QmluYXJ5U3RyaW5nOihOU1N0cmluZyAqKWJpbmFyeVN0cmluZyBleHBlY3RlZE51bWJlcjooTlNTdHJpbmcgKilleHBlY3RlZE51bWJlciBlcnJvcjooTlNFcnJvciAqKillcnJvciB7CisgIFpYQml0QXJyYXkgKmJpbmFyeSA9IFtaWEJpbmFyeVV0aWwgYnVpbGRCaXRBcnJheUZyb21TdHJpbmdXaXRob3V0U3BhY2VzOmJpbmFyeVN0cmluZ107CisgIFpYQWJzdHJhY3RFeHBhbmRlZERlY29kZXIgKmRlY29kZXIgPSBbWlhBYnN0cmFjdEV4cGFuZGVkRGVjb2RlciBjcmVhdGVEZWNvZGVyOmJpbmFyeV07CisgIE5TU3RyaW5nICpyZXN1bHQgPSBbZGVjb2RlciBwYXJzZUluZm9ybWF0aW9uV2l0aEVycm9yOmVycm9yXTsKKyAgaWYgKCFyZXN1bHQpIHsKKyAgICByZXR1cm4gTk87CisgIH0KKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMocmVzdWx0LCBleHBlY3RlZE51bWJlciwgQCJFeHBlY3RlZCAlQCB0byBlcXVhbCAlQCIsIHJlc3VsdCwgZXhwZWN0ZWROdW1iZXIpOworICByZXR1cm4gWUVTOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9BbnlBSURlY29kZXJUZXN0LmggYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9BbnlBSURlY29kZXJUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4ZmMwZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL0FueUFJRGVjb2RlclRlc3QuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdERlY29kZXJUZXN0LmgiCisKK0BpbnRlcmZhY2UgQW55QUlEZWNvZGVyVGVzdCA6IEFic3RyYWN0RGVjb2RlclRlc3QKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvQW55QUlEZWNvZGVyVGVzdC5tIGIvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvQW55QUlEZWNvZGVyVGVzdC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOWUzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9BbnlBSURlY29kZXJUZXN0Lm0KQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQW55QUlEZWNvZGVyVGVzdC5oIgorCitzdGF0aWMgTlNTdHJpbmcgKmhlYWRlciA9IEAiLi4uLi4iOworCitAaW1wbGVtZW50YXRpb24gQW55QUlEZWNvZGVyVGVzdAorCistICh2b2lkKXRlc3RBbnlBSURlY29kZXJfMSB7CisgIE5TU3RyaW5nICpkYXRhID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAJUAlQCVAJUAlQCIsIGhlYWRlciwgbnVtZXJpY18xMCwgbnVtZXJpY18xMiwgbnVtZXJpYzJhbHBoYSwgYWxwaGFfQSwKKyAgICAgICAgICAgICAgICAgICAgYWxwaGEybnVtZXJpYywgbnVtZXJpY18xMl07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDEwKTEyQTEyIjsKKworICBbc2VsZiBhc3NlcnRDb3JyZWN0QmluYXJ5U3RyaW5nOmRhdGEgZXhwZWN0ZWROdW1iZXI6ZXhwZWN0ZWQgZXJyb3I6bmlsXTsKK30KKworLSAodm9pZCl0ZXN0QW55QUlEZWNvZGVyXzIgeworICBOU1N0cmluZyAqZGF0YSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCVAJUAlQCVAJUAiLCBoZWFkZXIsIG51bWVyaWNfMTAsIG51bWVyaWNfMTIsIG51bWVyaWMyYWxwaGEsIGFscGhhX0EsCisgICAgICAgICAgICAgICAgICAgIGFscGhhMmlzb2llYzY0NiwgaTY0Nl9CXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMTApMTJBQiI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEJpbmFyeVN0cmluZzpkYXRhIGV4cGVjdGVkTnVtYmVyOmV4cGVjdGVkIGVycm9yOm5pbF07Cit9CisKKy0gKHZvaWQpdGVzdEFueUFJRGVjb2Rlcl8zIHsKKyAgTlNTdHJpbmcgKmRhdGEgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAJUAlQCVAJUAlQCVAJUAlQCVAIiwgaGVhZGVyLCBudW1lcmljXzEwLCBudW1lcmljMmFscGhhLCBhbHBoYTJpc29pZWM2NDYsIGk2NDZfQiwKKyAgICAgICAgICAgICAgICAgICAgaTY0Nl9DLCBpc29pZWM2NDZfMmFscGhhLCBhbHBoYV9BLCBhbHBoYTJudW1lcmljLCBudW1lcmljXzEwXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMTApQkNBMTAiOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RCaW5hcnlTdHJpbmc6ZGF0YSBleHBlY3RlZE51bWJlcjpleHBlY3RlZCBlcnJvcjpuaWxdOworfQorCistICh2b2lkKXRlc3RBbnlBSURlY29kZXJfbnVtZXJpY0ZOQzFfc2Vjb25kRGlnaXQgeworICBOU1N0cmluZyAqZGF0YSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCVAIiwgaGVhZGVyLCBudW1lcmljXzEwLCBudW1lcmljXzFGTkMxXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIoMTApMSI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEJpbmFyeVN0cmluZzpkYXRhIGV4cGVjdGVkTnVtYmVyOmV4cGVjdGVkIGVycm9yOm5pbF07Cit9CisKKy0gKHZvaWQpdGVzdEFueUFJRGVjb2Rlcl9hbHBoYUZOQzEgeworICBOU1N0cmluZyAqZGF0YSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCVAJUAlQCIsIGhlYWRlciwgbnVtZXJpY18xMCwgbnVtZXJpYzJhbHBoYSwgYWxwaGFfQSwgYWxwaGFfRk5DMV07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiKDEwKUEiOworCisgIFtzZWxmIGFzc2VydENvcnJlY3RCaW5hcnlTdHJpbmc6ZGF0YSBleHBlY3RlZE51bWJlcjpleHBlY3RlZCBlcnJvcjpuaWxdOworfQorCistICh2b2lkKXRlc3RBbnlBSURlY29kZXJfNjQ2Rk5DMSB7CisgIE5TU3RyaW5nICpkYXRhID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAJUAlQCVAJUAlQCIsIGhlYWRlciwgbnVtZXJpY18xMCwgbnVtZXJpYzJhbHBoYSwgYWxwaGFfQSwgaXNvaWVjNjQ2XzJhbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgaTY0Nl9CLCBpNjQ2X0ZOQzFdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIigxMClBQiI7CisKKyAgW3NlbGYgYXNzZXJ0Q29ycmVjdEJpbmFyeVN0cmluZzpkYXRhIGV4cGVjdGVkTnVtYmVyOmV4cGVjdGVkIGVycm9yOm5pbF07Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRmllbGRQYXJzZXJUZXN0LmggYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEZpZWxkUGFyc2VyVGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYmViMTkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9vbmVkL3Jzcy9leHBhbmRlZC9kZWNvZGVycy9aWEZpZWxkUGFyc2VyVGVzdC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYRmllbGRQYXJzZXJUZXN0IDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvb25lZC9yc3MvZXhwYW5kZWQvZGVjb2RlcnMvWlhGaWVsZFBhcnNlclRlc3QubSBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRmllbGRQYXJzZXJUZXN0Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiMjhjOQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL29uZWQvcnNzL2V4cGFuZGVkL2RlY29kZXJzL1pYRmllbGRQYXJzZXJUZXN0Lm0KQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhGaWVsZFBhcnNlclRlc3QuaCIKKworQGltcGxlbWVudGF0aW9uIFpYRmllbGRQYXJzZXJUZXN0CisKKy0gKHZvaWQpY2hlY2tGaWVsZHM6KE5TU3RyaW5nICopZXhwZWN0ZWQgeworICBOU1N0cmluZyAqZmllbGQgPSBbW2V4cGVjdGVkIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIigiIHdpdGhTdHJpbmc6QCIiXQorICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAiKSIgd2l0aFN0cmluZzpAIiJdOworICBOU1N0cmluZyAqYWN0dWFsID0gW1pYRmllbGRQYXJzZXIgcGFyc2VGaWVsZHNJbkdlbmVyYWxQdXJwb3NlOmZpZWxkIGVycm9yOm5pbF07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKGFjdHVhbCwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgJUAgdG8gZXF1YWwgJUAiLCBhY3R1YWwsIGV4cGVjdGVkKTsKK30KKworLSAodm9pZCl0ZXN0UGFyc2VGaWVsZCB7CisgIFtzZWxmIGNoZWNrRmllbGRzOkAiKDE1KTk5MTIzMSgzMTAzKTAwMTc1MCgxMCkxMkEiXTsKK30KKworLSAodm9pZCl0ZXN0UGFyc2VGaWVsZDIgeworICBbc2VsZiBjaGVja0ZpZWxkczpAIigxNSk5OTEyMzEoMTUpOTkxMjMxKDMxMDMpMDAxNzUwKDEwKTEyQSJdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9wZGY0MTcvUERGNDE3QmxhY2tCb3gxVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9QREY0MTdCbGFja0JveDFUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0Zjg5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9wZGY0MTcvUERGNDE3QmxhY2tCb3gxVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBQREY0MTdCbGFja0JveDFUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9wZGY0MTcvUERGNDE3QmxhY2tCb3gxVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9QREY0MTdCbGFja0JveDFUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjExMmQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9wZGY0MTcvUERGNDE3QmxhY2tCb3gxVGVzdENhc2UubQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJQREY0MTdCbGFja0JveDFUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gUERGNDE3QmxhY2tCb3gxVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9wZGY0MTctMSIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdFBERjQxN107CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjkgdHJ5SGFyZGVyQ291bnQ6OSByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjkgdHJ5SGFyZGVyQ291bnQ6OSByb3RhdGlvbjoxODAuMGZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3N1cGVyIHJ1blRlc3RzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L1BERjQxN0JsYWNrQm94MlRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9wZGY0MTcvUERGNDE3QmxhY2tCb3gyVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDhlM2U0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L1BERjQxN0JsYWNrQm94MlRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlLmgiCisKK0BpbnRlcmZhY2UgUERGNDE3QmxhY2tCb3gyVGVzdENhc2UgOiBBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L1BERjQxN0JsYWNrQm94MlRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9wZGY0MTcvUERGNDE3QmxhY2tCb3gyVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTljYzg2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L1BERjQxN0JsYWNrQm94MlRlc3RDYXNlLm0KQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiUERGNDE3QmxhY2tCb3gyVGVzdENhc2UuaCIKKworLyoqCisgKiBUaGlzIHRlc3QgY29udGFpbnMgNDgweDI0MCBpbWFnZXMgY2FwdHVyZWQgZnJvbSBhbiBBbmRyb2lkIGRldmljZSBhdCBwcmV2aWV3IHJlc29sdXRpb24uCisgKi8KK0BpbXBsZW1lbnRhdGlvbiBQREY0MTdCbGFja0JveDJUZXN0Q2FzZQorCistIChpZClpbml0V2l0aEludm9jYXRpb246KE5TSW52b2NhdGlvbiAqKWludm9jYXRpb24geworICBzZWxmID0gW3N1cGVyIGluaXRXaXRoSW52b2NhdGlvbjppbnZvY2F0aW9uCisgICAgICAgICAgICAgICAgdGVzdEJhc2VQYXRoU3VmZml4OkAiUmVzb3VyY2VzL2JsYWNrYm94L3BkZjQxNy0yIgorICAgICAgICAgICAgICAgICAgICAgYmFyY29kZVJlYWRlcjpbW1pYTXVsdGlGb3JtYXRSZWFkZXIgYWxsb2NdIGluaXRdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRm9ybWF0OmtCYXJjb2RlRm9ybWF0UERGNDE3XTsKKworICBpZiAoc2VsZikgeworICAgIFtzZWxmIGFkZFRlc3Q6MjUgdHJ5SGFyZGVyQ291bnQ6MjUgbWF4TWlzcmVhZHM6MCBtYXhUcnlIYXJkZXJNaXNyZWFkczowIHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MjUgdHJ5SGFyZGVyQ291bnQ6MjUgbWF4TWlzcmVhZHM6MCBtYXhUcnlIYXJkZXJNaXNyZWFkczowIHJvdGF0aW9uOjE4MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9wZGY0MTcvUERGNDE3QmxhY2tCb3gzVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9QREY0MTdCbGFja0JveDNUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMzAzZTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9wZGY0MTcvUERGNDE3QmxhY2tCb3gzVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBQREY0MTdCbGFja0JveDNUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9wZGY0MTcvUERGNDE3QmxhY2tCb3gzVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9QREY0MTdCbGFja0JveDNUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWZkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9wZGY0MTcvUERGNDE3QmxhY2tCb3gzVGVzdENhc2UubQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJQREY0MTdCbGFja0JveDNUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gUERGNDE3QmxhY2tCb3gzVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9wZGY0MTctMyIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdFBERjQxN107CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjE4IHRyeUhhcmRlckNvdW50OjE4IHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MTggdHJ5SGFyZGVyQ291bnQ6MTggcm90YXRpb246MTgwLjBmXTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3RCbGFja0JveCB7CisgIFtzdXBlciBydW5UZXN0c107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9QREY0MTdCbGFja0JveDRUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L1BERjQxN0JsYWNrQm94NFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhMGRhYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9QREY0MTdCbGFja0JveDRUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZS5oIgorCitAaW50ZXJmYWNlIFBERjQxN0JsYWNrQm94NFRlc3RDYXNlIDogQWJzdHJhY3RCbGFja0JveFRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9QREY0MTdCbGFja0JveDRUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L1BERjQxN0JsYWNrQm94NFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1MmYzYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9QREY0MTdCbGFja0JveDRUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJQREY0MTdCbGFja0JveDRUZXN0Q2FzZS5oIgorI2ltcG9ydCAiVGVzdFJlc3VsdC5oIgorCisvKioKKyAqIFRoaXMgY2xhc3MgdGVzdHMgTWFjcm8gUERGNDE3IGJhcmNvZGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4gSXQgZW5zdXJlcyB0aGF0IGluZm9ybWF0aW9uLCB3aGljaCBpcyBzcGxpdCBpbnRvCisgKiBzZXZlcmFsIGJhcmNvZGVzIGNhbiBiZSBwcm9wZXJseSBjb21iaW5lZCBhZ2FpbiB0byB5aWVsZCB0aGUgb3JpZ2luYWwgZGF0YSBjb250ZW50LgorICovCitAaW1wbGVtZW50YXRpb24gUERGNDE3QmxhY2tCb3g0VGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9wZGY0MTctNCIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWFBERjQxN1JlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRQREY0MTddOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYudGVzdFJlc3VsdHMgYWRkT2JqZWN0OltbVGVzdFJlc3VsdCBhbGxvY10gaW5pdFdpdGhNdXN0UGFzc0NvdW50OjIgdHJ5SGFyZGVyQ291bnQ6MiBtYXhNaXNyZWFkczowIG1heFRyeUhhcmRlck1pc3JlYWRzOjAgcm90YXRpb246MC4wZl1dOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3NlbGYgdGVzdFBERjQxN0JsYWNrQm94Q291bnRpbmdSZXN1bHRzOllFU107Cit9CisKKy0gKHZvaWQpdGVzdFBERjQxN0JsYWNrQm94Q291bnRpbmdSZXN1bHRzOihCT09MKWFzc2VydE9uRmFpbHVyZSB7CisgIFNUQXNzZXJ0RmFsc2UoW3NlbGYudGVzdFJlc3VsdHMgY291bnRdID09IDAsIEAiRXhwZWN0ZWQgdGVzdFJlc3VsdHMgdG8gYmUgbm9uLWVtcHR5Iik7CisKKyAgTlNEaWN0aW9uYXJ5ICppbWFnZUZpbGVzID0gW3NlbGYgaW1hZ2VGaWxlTGlzdHNdOworICBpbnQgdGVzdENvdW50ID0gKGludClbc2VsZi50ZXN0UmVzdWx0cyBjb3VudF07CisKKyAgaW50IHBhc3NlZENvdW50c1t0ZXN0Q291bnRdOworICBtZW1zZXQocGFzc2VkQ291bnRzLCAwLCB0ZXN0Q291bnQgKiBzaXplb2YoaW50KSk7CisKKyAgaW50IG1pc3JlYWRDb3VudHNbdGVzdENvdW50XTsKKyAgbWVtc2V0KG1pc3JlYWRDb3VudHMsIDAsIHRlc3RDb3VudCAqIHNpemVvZihpbnQpKTsKKworICBpbnQgdHJ5SGFyZGVyQ291bnRzW3Rlc3RDb3VudF07CisgIG1lbXNldCh0cnlIYXJkZXJDb3VudHMsIDAsIHRlc3RDb3VudCAqIHNpemVvZihpbnQpKTsKKworICBpbnQgdHJ5SGFyZGVyTWlzcmVhZENvdW50c1t0ZXN0Q291bnRdOworICBtZW1zZXQodHJ5SGFyZGVyTWlzcmVhZENvdW50cywgMCwgdGVzdENvdW50ICogc2l6ZW9mKGludCkpOworCisgIGZvciAoTlNTdHJpbmcgKmZpbGVCYXNlTmFtZSBpbiBbaW1hZ2VGaWxlcyBhbGxLZXlzXSkgeworICAgIE5TTG9nKEAiU3RhcnRpbmcgSW1hZ2UgR3JvdXAgJUAiLCBmaWxlQmFzZU5hbWUpOworCisgICAgTlNTdHJpbmcgKmV4cGVjdGVkVGV4dDsKKyAgICBOU1N0cmluZyAqZXhwZWN0ZWRUZXh0RmlsZSA9IFtbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXSBwYXRoRm9yUmVzb3VyY2U6ZmlsZUJhc2VOYW1lIG9mVHlwZTpAInR4dCIgaW5EaXJlY3Rvcnk6c2VsZi50ZXN0QmFzZV07CisgICAgaWYgKGV4cGVjdGVkVGV4dEZpbGUpIHsKKyAgICAgIGV4cGVjdGVkVGV4dCA9IFtzZWxmIHJlYWRGaWxlQXNTdHJpbmc6ZXhwZWN0ZWRUZXh0RmlsZSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgfSBlbHNlIHsKKyAgICAgIE5TU3RyaW5nICpleHBlY3RlZFRleHRGaWxlID0gW1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dIHBhdGhGb3JSZXNvdXJjZTpmaWxlQmFzZU5hbWUgb2ZUeXBlOkAiYmluIiBpbkRpcmVjdG9yeTpzZWxmLnRlc3RCYXNlXTsKKyAgICAgIFNUQXNzZXJ0Tm90TmlsKGV4cGVjdGVkVGV4dEZpbGUsIEAiRXhwZWN0ZWQgdGV4dCBkb2VzIG5vdCBleGlzdCIpOworICAgICAgZXhwZWN0ZWRUZXh0ID0gW3NlbGYgcmVhZEZpbGVBc1N0cmluZzpleHBlY3RlZFRleHRGaWxlIGVuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddOworICAgIH0KKworICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGVzdENvdW50OyB4KyspIHsKKyAgICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICAgIGZvciAoTlNVUkwgKmltYWdlRmlsZSBpbiBpbWFnZUZpbGVzW2ZpbGVCYXNlTmFtZV0pIHsKKyAgICAgICAgWlhJbWFnZSAqaW1hZ2UgPSBbW1pYSW1hZ2UgYWxsb2NdIGluaXRXaXRoVVJMOmltYWdlRmlsZV07CisgICAgICAgIGZsb2F0IHJvdGF0aW9uID0gWyhUZXN0UmVzdWx0ICopc2VsZi50ZXN0UmVzdWx0c1t4XSByb3RhdGlvbl07CisgICAgICAgIFpYSW1hZ2UgKnJvdGF0ZWRJbWFnZSA9IFtzZWxmIHJvdGF0ZUltYWdlOmltYWdlIGRlZ3JlZXM6cm90YXRpb25dOworICAgICAgICBaWEx1bWluYW5jZVNvdXJjZSAqc291cmNlID0gW1taWENHSW1hZ2VMdW1pbmFuY2VTb3VyY2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpyb3RhdGVkSW1hZ2UuY2dpbWFnZV07CisgICAgICAgIFpYQmluYXJ5Qml0bWFwICpiaXRtYXAgPSBbW1pYQmluYXJ5Qml0bWFwIGFsbG9jXSBpbml0V2l0aEJpbmFyaXplcjpbW1pYSHlicmlkQmluYXJpemVyIGFsbG9jXSBpbml0V2l0aFNvdXJjZTpzb3VyY2VdXTsKKworICAgICAgICBOU0FycmF5ICppbWFnZVJlc3VsdHMgPSBbc2VsZiBkZWNvZGU6Yml0bWFwIHRyeUhhcmRlcjpOT107CisgICAgICAgIGlmICghaW1hZ2VSZXN1bHRzKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBbcmVzdWx0cyBhZGRPYmplY3RzRnJvbUFycmF5OmltYWdlUmVzdWx0c107CisgICAgICB9CisgICAgICBbcmVzdWx0cyBzb3J0VXNpbmdDb21wYXJhdG9yOl5OU0NvbXBhcmlzb25SZXN1bHQoWlhSZXN1bHQgKmFyZzAsIFpYUmVzdWx0ICphcmcxKSB7CisgICAgICAgIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEgKnJlc3VsdE1ldGFkYXRhID0gW3NlbGYgbWV0YTphcmcwXTsKKyAgICAgICAgWlhQREY0MTdSZXN1bHRNZXRhZGF0YSAqb3RoZXJSZXN1bHRNZXRhZGF0YSA9IFtzZWxmIG1ldGE6YXJnMV07CisgICAgICAgIHJldHVybiByZXN1bHRNZXRhZGF0YS5zZWdtZW50SW5kZXggLSBvdGhlclJlc3VsdE1ldGFkYXRhLnNlZ21lbnRJbmRleDsKKyAgICAgIH1dOworICAgICAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHRUZXh0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICAgICAgTlNTdHJpbmcgKmZpbGVJZDsKKyAgICAgIGZvciAoWlhSZXN1bHQgKnJlc3VsdCBpbiByZXN1bHRzKSB7CisgICAgICAgIFpYUERGNDE3UmVzdWx0TWV0YWRhdGEgKnJlc3VsdE1ldGFkYXRhID0gW3NlbGYgbWV0YTpyZXN1bHRdOworICAgICAgICBTVEFzc2VydE5vdE5pbChyZXN1bHRNZXRhZGF0YSwgQCJyZXN1bHRNZXRhZGF0YSIpOworICAgICAgICBpZiAoIWZpbGVJZCkgeworICAgICAgICAgIGZpbGVJZCA9IHJlc3VsdE1ldGFkYXRhLmZpbGVJZDsKKyAgICAgICAgfQorICAgICAgICBTVEFzc2VydEVxdWFsT2JqZWN0cyhyZXN1bHRNZXRhZGF0YS5maWxlSWQsIGZpbGVJZCwgQCJGaWxlSWQiKTsKKyAgICAgICAgW3Jlc3VsdFRleHQgYXBwZW5kU3RyaW5nOnJlc3VsdC50ZXh0XTsKKyAgICAgIH0KKyAgICAgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHJlc3VsdFRleHQsIGV4cGVjdGVkVGV4dCwgQCJFeHBlY3RlZFRleHQiKTsKKyAgICAgIHBhc3NlZENvdW50c1t4XSsrOworICAgICAgdHJ5SGFyZGVyQ291bnRzW3hdKys7CisgICAgfQorICB9CisKKyAgLy8gUHJpbnQgdGhlIHJlc3VsdHMgb2YgYWxsIHRlc3RzIGZpcnN0CisgIGludCB0b3RhbEZvdW5kID0gMDsKKyAgaW50IHRvdGFsTXVzdFBhc3MgPSAwOworICBpbnQgdG90YWxNaXNyZWFkID0gMDsKKyAgaW50IHRvdGFsTWF4TWlzcmVhZCA9IDA7CisKKyAgaW50IG51bWJlck9mVGVzdHMgPSAoaW50KVtpbWFnZUZpbGVzIGNvdW50XTsKKyAgZm9yIChpbnQgeCA9IDA7IHggPCBbc2VsZi50ZXN0UmVzdWx0cyBjb3VudF07IHgrKykgeworICAgIFRlc3RSZXN1bHQgKnRlc3RSZXN1bHQgPSBzZWxmLnRlc3RSZXN1bHRzW3hdOworICAgIE5TTG9nKEAiUm90YXRpb24gJWQgZGVncmVlczoiLCAoaW50KSB0ZXN0UmVzdWx0LnJvdGF0aW9uKTsKKyAgICBOU0xvZyhAIiAlZCBvZiAlZCBpbWFnZXMgcGFzc2VkICglZCByZXF1aXJlZCkiLCBwYXNzZWRDb3VudHNbeF0sIG51bWJlck9mVGVzdHMsIHRlc3RSZXN1bHQubXVzdFBhc3NDb3VudCk7CisgICAgaW50IGZhaWxlZCA9IG51bWJlck9mVGVzdHMgLSBwYXNzZWRDb3VudHNbeF07CisgICAgTlNMb2coQCIgJWQgZmFpbGVkIGR1ZSB0byBtaXNyZWFkcywgJWQgbm90IGRldGVjdGVkIiwgbWlzcmVhZENvdW50c1t4XSwgZmFpbGVkIC0gbWlzcmVhZENvdW50c1t4XSk7CisgICAgTlNMb2coQCIgJWQgb2YgJWQgaW1hZ2VzIHBhc3NlZCB3aXRoIHRyeSBoYXJkZXIgKCVkIHJlcXVpcmVkKSIsIHRyeUhhcmRlckNvdW50c1t4XSwgbnVtYmVyT2ZUZXN0cywgdGVzdFJlc3VsdC50cnlIYXJkZXJDb3VudCk7CisgICAgZmFpbGVkID0gbnVtYmVyT2ZUZXN0cyAtIHRyeUhhcmRlckNvdW50c1t4XTsKKyAgICBOU0xvZyhAIiAlZCBmYWlsZWQgZHVlIHRvIG1pc3JlYWRzLCAlZCBub3QgZGV0ZWN0ZWQiLCB0cnlIYXJkZXJNaXNyZWFkQ291bnRzW3hdLCBmYWlsZWQgLSB0cnlIYXJkZXJNaXNyZWFkQ291bnRzW3hdKTsKKyAgICB0b3RhbEZvdW5kICs9IHBhc3NlZENvdW50c1t4XSArIHRyeUhhcmRlckNvdW50c1t4XTsKKyAgICB0b3RhbE11c3RQYXNzICs9IHRlc3RSZXN1bHQubXVzdFBhc3NDb3VudCArIHRlc3RSZXN1bHQudHJ5SGFyZGVyQ291bnQ7CisgICAgdG90YWxNaXNyZWFkICs9IG1pc3JlYWRDb3VudHNbeF0gKyB0cnlIYXJkZXJNaXNyZWFkQ291bnRzW3hdOworICAgIHRvdGFsTWF4TWlzcmVhZCArPSB0ZXN0UmVzdWx0Lm1heE1pc3JlYWRzICsgdGVzdFJlc3VsdC5tYXhUcnlIYXJkZXJNaXNyZWFkczsKKyAgfQorCisgIGludCB0b3RhbFRlc3RzID0gbnVtYmVyT2ZUZXN0cyAqIHRlc3RDb3VudCAqIDI7CisgIE5TTG9nKEAiRGVjb2RlZCAlZCBpbWFnZXMgb3V0IG9mICVkICglZCUlLCAlZCByZXF1aXJlZCkiLCB0b3RhbEZvdW5kLCB0b3RhbFRlc3RzLCB0b3RhbEZvdW5kICoKKyAgICAgICAgMTAwIC8gdG90YWxUZXN0cywgdG90YWxNdXN0UGFzcyk7CisgIGlmICh0b3RhbEZvdW5kID4gdG90YWxNdXN0UGFzcykgeworICAgIE5TTG9nKEAiKysrIFRlc3QgdG9vIGxheCBieSAlZCBpbWFnZXMiLCB0b3RhbEZvdW5kIC0gdG90YWxNdXN0UGFzcyk7CisgIH0gZWxzZSBpZiAodG90YWxGb3VuZCA8IHRvdGFsTXVzdFBhc3MpIHsKKyAgICBOU0xvZyhAIi0tLSBUZXN0IGZhaWxlZCBieSAlZCBpbWFnZXMiLCB0b3RhbE11c3RQYXNzIC0gdG90YWxGb3VuZCk7CisgIH0KKworICBpZiAodG90YWxNaXNyZWFkIDwgdG90YWxNYXhNaXNyZWFkKSB7CisgICAgTlNMb2coQCIrKysgVGVzdCBleHBlY3RzIHRvbyBtYW55IG1pc3JlYWRzIGJ5ICVkIGltYWdlcyIsIHRvdGFsTWF4TWlzcmVhZCAtIHRvdGFsTWlzcmVhZCk7CisgIH0gZWxzZSBpZiAodG90YWxNaXNyZWFkID4gdG90YWxNYXhNaXNyZWFkKSB7CisgICAgTlNMb2coQCItLS0gVGVzdCBoYWQgdG9vIG1hbnkgbWlzcmVhZHMgYnkgJWQgaW1hZ2VzIiwgdG90YWxNaXNyZWFkIC0gdG90YWxNYXhNaXNyZWFkKTsKKyAgfQorCisgIC8vIFRoZW4gcnVuIHRocm91Z2ggYWdhaW4gYW5kIGFzc2VydCBpZiBhbnkgZmFpbGVkCisgIGlmIChhc3NlcnRPbkZhaWx1cmUpIHsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRlc3RDb3VudDsgeCsrKSB7CisgICAgICBUZXN0UmVzdWx0ICp0ZXN0UmVzdWx0ID0gc2VsZi50ZXN0UmVzdWx0c1t4XTsKKyAgICAgIE5TU3RyaW5nICpsYWJlbCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiUm90YXRpb24gJWYgZGVncmVlczogVG9vIG1hbnkgaW1hZ2VzIGZhaWxlZCIsIHRlc3RSZXN1bHQucm90YXRpb25dOworICAgICAgU1RBc3NlcnRUcnVlKHBhc3NlZENvdW50c1t4XSA+PSB0ZXN0UmVzdWx0Lm11c3RQYXNzQ291bnQsIGxhYmVsKTsKKyAgICAgIFNUQXNzZXJ0VHJ1ZSh0cnlIYXJkZXJDb3VudHNbeF0gPj0gdGVzdFJlc3VsdC50cnlIYXJkZXJDb3VudCwgQCJUcnkgaGFyZGVyLCAlQCIsIGxhYmVsKTsKKyAgICAgIGxhYmVsID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJSb3RhdGlvbiAlZiBkZWdyZWVzOiBUb28gbWFueSBpbWFnZXMgbWlzcmVhZCIsIHRlc3RSZXN1bHQucm90YXRpb25dOworICAgICAgU1RBc3NlcnRUcnVlKG1pc3JlYWRDb3VudHNbeF0gPD0gdGVzdFJlc3VsdC5tYXhNaXNyZWFkcywgbGFiZWwpOworICAgICAgU1RBc3NlcnRUcnVlKHRyeUhhcmRlck1pc3JlYWRDb3VudHNbeF0gPD0gdGVzdFJlc3VsdC5tYXhUcnlIYXJkZXJNaXNyZWFkcywgQCJUcnkgaGFyZGVyLCAlQCIsIGxhYmVsKTsKKyAgICB9CisgIH0KK30KKworLSAoWlhQREY0MTdSZXN1bHRNZXRhZGF0YSAqKW1ldGE6KFpYUmVzdWx0ICopcmVzdWx0IHsKKyAgcmV0dXJuIHJlc3VsdC5yZXN1bHRNZXRhZGF0YSA9PSBuaWwgPyBuaWwgOiAoWlhQREY0MTdSZXN1bHRNZXRhZGF0YSAqKXJlc3VsdC5yZXN1bHRNZXRhZGF0YVtAKGtSZXN1bHRNZXRhZGF0YVR5cGVQREY0MTdFeHRyYU1ldGFkYXRhKV07Cit9CisKKy0gKE5TQXJyYXkgKilkZWNvZGU6KFpYQmluYXJ5Qml0bWFwICopc291cmNlIHRyeUhhcmRlcjooQk9PTCl0cnlIYXJkZXIgeworICBaWERlY29kZUhpbnRzICpoaW50cyA9IFtaWERlY29kZUhpbnRzIGhpbnRzXTsKKyAgaGludHMudHJ5SGFyZGVyID0gdHJ5SGFyZGVyOworCisgIHJldHVybiBbKFpYUERGNDE3UmVhZGVyICopc2VsZi5iYXJjb2RlUmVhZGVyIGRlY29kZU11bHRpcGxlOnNvdXJjZSBoaW50czpoaW50cyBlcnJvcjpuaWxdOworfQorCistIChOU0RpY3Rpb25hcnkgKilpbWFnZUZpbGVMaXN0cyB7CisgIE5TTXV0YWJsZURpY3Rpb25hcnkgKnJlc3VsdCA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworICBmb3IgKE5TVVJMICpmaWxlIGluIFtzZWxmIGltYWdlRmlsZXNdKSB7CisgICAgTlNTdHJpbmcgKnRlc3RJbWFnZUZpbGVOYW1lID0gW1tbZmlsZSBwYXRoXSBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIvIl0gbGFzdE9iamVjdF07CisgICAgTlNTdHJpbmcgKmZpbGVCYXNlTmFtZSA9IFt0ZXN0SW1hZ2VGaWxlTmFtZSBzdWJzdHJpbmdUb0luZGV4Olt0ZXN0SW1hZ2VGaWxlTmFtZSByYW5nZU9mU3RyaW5nOkAiLSJdLmxvY2F0aW9uXTsKKyAgICBOU011dGFibGVBcnJheSAqZmlsZXMgPSByZXN1bHRbZmlsZUJhc2VOYW1lXTsKKyAgICBpZiAoIWZpbGVzKSB7CisgICAgICBmaWxlcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgICByZXN1bHRbZmlsZUJhc2VOYW1lXSA9IGZpbGVzOworICAgIH0KKyAgICBbZmlsZXMgYWRkT2JqZWN0OmZpbGVdOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9aWFBERjQxN0RldGVjdG9yVGVzdC5oIGIvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L1pYUERGNDE3RGV0ZWN0b3JUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNiMWE3YgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9aWFBERjQxN0RldGVjdG9yVGVzdC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYUERGNDE3RGV0ZWN0b3JUZXN0IDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L1pYUERGNDE3RGV0ZWN0b3JUZXN0Lm0gYi9aWGluZ09iakNUZXN0cy9wZGY0MTcvWlhQREY0MTdEZXRlY3RvclRlc3QubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQ1NGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L1pYUERGNDE3RGV0ZWN0b3JUZXN0Lm0KQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQREY0MTdEZXRlY3RvclRlc3QuaCIKKworY29uc3QgaW50IEJJVF9TRVRfSU5ERVhfTEVOID0gNDsKK2NvbnN0IGludCBCSVRfU0VUX0lOREVYW0JJVF9TRVRfSU5ERVhfTEVOXSA9IHsgMSwgMiwgMywgNSB9OworCitjb25zdCBpbnQgQklUX01BVFJJWF9QT0lOVFNfTEVOID0gNjsKK2NvbnN0IGludCBCSVRfTUFUUklYX1BPSU5UU1tCSVRfTUFUUklYX1BPSU5UU19MRU5dID0geyAxLCAyLCAyLCAwLCAzLCAxIH07CisKK0BpbXBsZW1lbnRhdGlvbiBaWFBERjQxN0RldGVjdG9yVGVzdAorCistICh2b2lkKXRlc3RNaXJyb3IgeworICBbc2VsZiB0ZXN0TWlycm9yOjddOworICBbc2VsZiB0ZXN0TWlycm9yOjhdOworfQorCistICh2b2lkKXRlc3RNaXJyb3I6KGludClzaXplIHsKKyAgWlhCaXRBcnJheSAqcmVzdWx0ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6c2l6ZV07CisgIFtaWFBERjQxN0RldGVjdG9yIG1pcnJvcjpbc2VsZiBpbnB1dDpzaXplXSByZXN1bHQ6cmVzdWx0XTsKKworICBaWEJpdEFycmF5ICpleHBlY3RlZCA9IFtzZWxmIGV4cGVjdGVkOnNpemVdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbcmVzdWx0IGRlc2NyaXB0aW9uXSwgW2V4cGVjdGVkIGRlc2NyaXB0aW9uXSwgQCJFeHBlY3RlZCAlQCwgZ290ICVAIiwgZXhwZWN0ZWQsIHJlc3VsdCk7Cit9CisKKy0gKHZvaWQpdGVzdFJvdGF0ZTE4MCB7CisgIFtzZWxmIHRlc3RSb3RhdGUxODA6NyBoZWlnaHQ6NF07CisgIFtzZWxmIHRlc3RSb3RhdGUxODA6NyBoZWlnaHQ6NV07CisgIFtzZWxmIHRlc3RSb3RhdGUxODA6OCBoZWlnaHQ6NF07CisgIFtzZWxmIHRlc3RSb3RhdGUxODA6OCBoZWlnaHQ6NV07Cit9CisKKy0gKHZvaWQpdGVzdFJvdGF0ZTE4MDooaW50KXdpZHRoIGhlaWdodDooaW50KWhlaWdodCB7CisgIFpYQml0TWF0cml4ICppbnB1dCA9IFtzZWxmIGlucHV0OndpZHRoIGhlaWdodDpoZWlnaHRdOworICBbWlhQREY0MTdEZXRlY3RvciByb3RhdGUxODA6aW5wdXRdOworICBaWEJpdE1hdHJpeCAqZXhwZWN0ZWQgPSBbc2VsZiBleHBlY3RlZDp3aWR0aCBoZWlnaHQ6aGVpZ2h0XTsKKworICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICBTVEFzc2VydEVxdWFscyhbaW5wdXQgZ2V0WDp4IHk6eV0sIFtleHBlY3RlZCBnZXRYOnggeTp5XSwgQCIoJWQsJWQpIiwgeCwgeSk7CisgICAgfQorICB9Cit9CisKKy0gKFpYQml0TWF0cml4ICopZXhwZWN0ZWQ6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgeworICBaWEJpdE1hdHJpeCAqcmVzdWx0ID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0XTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBCSVRfTUFUUklYX1BPSU5UU19MRU47IGkgKz0gMikgeworICAgIFtyZXN1bHQgc2V0WDp3aWR0aCAtIDEgLSBCSVRfTUFUUklYX1BPSU5UU1tpXSB5OmhlaWdodCAtIDEgLSBCSVRfTUFUUklYX1BPSU5UU1tpICsgMV1dOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKFpYQml0TWF0cml4ICopaW5wdXQ6KGludCl3aWR0aCBoZWlnaHQ6KGludCloZWlnaHQgeworICBaWEJpdE1hdHJpeCAqcmVzdWx0ID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDp3aWR0aCBoZWlnaHQ6aGVpZ2h0XTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBCSVRfTUFUUklYX1BPSU5UU19MRU47IGkgKz0gMikgeworICAgIFtyZXN1bHQgc2V0WDpCSVRfTUFUUklYX1BPSU5UU1tpXSB5OkJJVF9NQVRSSVhfUE9JTlRTW2kgKyAxXV07CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoWlhCaXRBcnJheSAqKWV4cGVjdGVkOihpbnQpc2l6ZSB7CisgIFpYQml0QXJyYXkgKmV4cGVjdGVkID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0V2l0aFNpemU6c2l6ZV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgQklUX1NFVF9JTkRFWF9MRU47IGkrKykgeworICAgIGludCBpbmRleCA9IEJJVF9TRVRfSU5ERVhbaV07CisgICAgW2V4cGVjdGVkIHNldDpzaXplIC0gMSAtIGluZGV4XTsKKyAgfQorICByZXR1cm4gZXhwZWN0ZWQ7Cit9CisKKy0gKFpYQml0QXJyYXkgKilpbnB1dDooaW50KXNpemUgeworICBaWEJpdEFycmF5ICppbnB1dCA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdFdpdGhTaXplOnNpemVdOworICBmb3IgKGludCBpID0gMDsgaSA8IEJJVF9TRVRfSU5ERVhfTEVOOyBpKyspIHsKKyAgICBpbnQgaW5kZXggPSBCSVRfU0VUX0lOREVYW2ldOworICAgIFtpbnB1dCBzZXQ6aW5kZXhdOworICB9CisgIHJldHVybiBpbnB1dDsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L2RlY29kZXIvZWMvQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L2RlY29kZXIvZWMvQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMTg3NDEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9wZGY0MTcvZGVjb2Rlci9lYy9BYnN0cmFjdEVycm9yQ29ycmVjdGlvblRlc3RDYXNlLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKKy0gKHZvaWQpY29ycnVwdDooTlNNdXRhYmxlQXJyYXkgKilyZWNlaXZlZCBob3dNYW55OihpbnQpaG93TWFueTsKKy0gKE5TQXJyYXkgKillcmFzZTooTlNNdXRhYmxlQXJyYXkgKilyZWNlaXZlZCBob3dNYW55OihpbnQpaG93TWFueTsKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L2RlY29kZXIvZWMvQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvcGRmNDE3L2RlY29kZXIvZWMvQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NzdmMTcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9wZGY0MTcvZGVjb2Rlci9lYy9BYnN0cmFjdEVycm9yQ29ycmVjdGlvblRlc3RDYXNlLm0KQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZQorCistICh2b2lkKWNvcnJ1cHQ6KE5TTXV0YWJsZUFycmF5ICopcmVjZWl2ZWQgaG93TWFueTooaW50KWhvd01hbnkgeworICBCT09MIGNvcnJ1cHRlZFtyZWNlaXZlZC5jb3VudF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjZWl2ZWQuY291bnQ7IGkrKykgeworICAgIGNvcnJ1cHRlZFtpXSA9IE5POworICB9CisKKyAgZm9yIChpbnQgaiA9IDA7IGogPCBob3dNYW55OyBqKyspIHsKKyAgICBpbnQgbG9jYXRpb24gPSBhcmM0cmFuZG9tKCkgJSByZWNlaXZlZC5jb3VudDsKKyAgICBpZiAoY29ycnVwdGVkW2xvY2F0aW9uXSkgeworICAgICAgai0tOworICAgIH0gZWxzZSB7CisgICAgICBjb3JydXB0ZWRbbG9jYXRpb25dID0gWUVTOworICAgICAgcmVjZWl2ZWRbbG9jYXRpb25dID0gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6YXJjNHJhbmRvbSgpICUgOTI5XTsKKyAgICB9CisgIH0KK30KKworLSAoTlNBcnJheSAqKWVyYXNlOihOU011dGFibGVBcnJheSAqKXJlY2VpdmVkIGhvd01hbnk6KGludClob3dNYW55IHsKKyAgQk9PTCBlcmFzZWRbcmVjZWl2ZWQuY291bnRdOworICBmb3IgKGludCBpID0gMDsgaSA8IHJlY2VpdmVkLmNvdW50OyBpKyspIHsKKyAgICBlcmFzZWRbaV0gPSBOTzsKKyAgfQorCisgIE5TTXV0YWJsZUFycmF5ICplcmFzdXJlcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpob3dNYW55XTsKKyAgZm9yIChpbnQgaiA9IDA7IGogPCBob3dNYW55OyBqKyspIHsKKyAgICBpbnQgbG9jYXRpb24gPSBhcmM0cmFuZG9tKCkgJSByZWNlaXZlZC5jb3VudDsKKyAgICBpZiAoZXJhc2VkW2xvY2F0aW9uXSkgeworICAgICAgai0tOworICAgIH0gZWxzZSB7CisgICAgICBlcmFzZWRbbG9jYXRpb25dID0gWUVTOworICAgICAgcmVjZWl2ZWRbbG9jYXRpb25dID0gQDA7CisgICAgICBbZXJhc3VyZXMgYWRkT2JqZWN0OkAobG9jYXRpb24pXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGVyYXN1cmVzOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9wZGY0MTcvZGVjb2Rlci9lYy9aWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9kZWNvZGVyL2VjL1pYUERGNDE3RUNFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OTcyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9wZGY0MTcvZGVjb2Rlci9lYy9aWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEVycm9yQ29ycmVjdGlvblRlc3RDYXNlLmgiCisKK0BpbnRlcmZhY2UgWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvblRlc3RDYXNlIDogQWJzdHJhY3RFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9wZGY0MTcvZGVjb2Rlci9lYy9aWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL3BkZjQxNy9kZWNvZGVyL2VjL1pYUERGNDE3RUNFcnJvckNvcnJlY3Rpb25UZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OGZjNDUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9wZGY0MTcvZGVjb2Rlci9lYy9aWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uVGVzdENhc2UubQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvblRlc3RDYXNlLmgiCisKK0BpbnRlcmZhY2UgWlhQREY0MTdFQ0Vycm9yQ29ycmVjdGlvblRlc3RDYXNlICgpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFpYUERGNDE3RUNFcnJvckNvcnJlY3Rpb24gKmVjOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBaWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uVGVzdENhc2UKKworc3RhdGljIE5TTXV0YWJsZUFycmF5ICpQREY0MTdfVEVTVCA9IG5pbDsKK3N0YXRpYyBOU011dGFibGVBcnJheSAqUERGNDE3X1RFU1RfV0lUSF9FQyA9IG5pbDsKK3N0YXRpYyBpbnQgRUNDX0JZVEVTOworLy8gRXhhbXBsZSBpcyBFQyBsZXZlbCAxIChzPTEpLiBUaGUgbnVtYmVyIG9mIGVyYXN1cmVzIChsKSBhbmQgc3Vic3RpdHV0aW9ucyAoZikgbXVzdCBvYmV5OgorLy8gbCArIDJmIDw9IDJeKHMrMSkgLSAzCitjb25zdCBpbnQgRUNfTEVWRUwgPSA1OworY29uc3QgaW50IEVSUk9SX0xJTUlUID0gKDEgPDwgKEVDX0xFVkVMICsgMSkpIC0gMzsKK2NvbnN0IGludCBNQVhfRVJST1JTID0gRVJST1JfTElNSVQgLyAyOworLy9jb25zdCBpbnQgTUFYX0VSQVNVUkVTID0gRVJST1JfTElNSVQ7CisKKysgKHZvaWQpaW5pdGlhbGl6ZSB7CisgIC8qKiBTZWUgSVNPIDE1NDM4LCBBbm5leCBRICovCisgIC8vUERGNDE3X1RFU1QgPQorICAvLyAgW0BbIEA1LCBANDUzLCBAMTc4LCBAMTIxLCBAMjM5IF0gbXV0YWJsZUNvcHldOworICAvL1BERjQxN19URVNUX1dJVEhfRUMgPQorICAvLyAgW0BbIEA1LCBANDUzLCBAMTc4LCBAMTIxLCBAMjM5LCBANDUyLCBAMzI3LCBANjU3LCBANjE5IF0gbXV0YWJsZUNvcHldOworCisgIFBERjQxN19URVNUID0gW0BbCisgICAgQDQ4LCBAOTAxLCBANTYsIEAxNDEsIEA2MjcsIEA4NTYsIEAzMzAsIEA2OSwgQDI0NCwgQDkwMCwgQDg1MiwgQDE2OSwgQDg0MywgQDg5NSwgQDg1MiwgQDg5NSwgQDkxMywgQDE1NCwgQDg0NSwgQDc3OCwgQDM4NywgQDg5LCBAODY5LAorICAgIEA5MDEsIEAyMTksIEA0NzQsIEA1NDMsIEA2NTAsIEAxNjksIEAyMDEsIEA5LCBAMTYwLCBAMzUsIEA3MCwgQDkwMCwgQDkwMCwgQDkwMCwgQDkwMCwgQDkwMCwgQDkwMCwgQDkwMCwgQDkwMCwgQDkwMCwgQDkwMCwgQDkwMCwgQDkwMCwKKyAgICBAOTAwLCBAOTAwXSBtdXRhYmxlQ29weV07CisKKyAgUERGNDE3X1RFU1RfV0lUSF9FQyA9IFtAWworICAgIEA0OCwgQDkwMSwgQDU2LCBAMTQxLCBANjI3LCBAODU2LCBAMzMwLCBANjksIEAyNDQsIEA5MDAsIEA4NTIsIEAxNjksIEA4NDMsIEA4OTUsIEA4NTIsIEA4OTUsIEA5MTMsIEAxNTQsIEA4NDUsIEA3NzgsIEAzODcsIEA4OSwgQDg2OSwKKyAgICBAOTAxLCBAMjE5LCBANDc0LCBANTQzLCBANjUwLCBAMTY5LCBAMjAxLCBAOSwgQDE2MCwgQDM1LCBANzAsIEA5MDAsIEA5MDAsIEA5MDAsIEA5MDAsIEA5MDAsIEA5MDAsIEA5MDAsIEA5MDAsIEA5MDAsIEA5MDAsIEA5MDAsIEA5MDAsCisgICAgQDkwMCwgQDkwMCwgQDc2OSwgQDg0MywgQDU5MSwgQDkxMCwgQDYwNSwgQDIwNiwgQDcwNiwgQDkxNywgQDM3MSwgQDQ2OSwgQDc5LCBANzE4LCBANDcsIEA3NzcsIEAyNDksIEAyNjIsIEAxOTMsIEA2MjAsIEA1OTcsIEA0NzcsIEA0NTAsCisgICAgQDgwNiwgQDkwOCwgQDMwOSwgQDE1MywgQDg3MSwgQDY4NiwgQDgzOCwgQDE4NSwgQDY3NCwgQDY4LCBANjc5LCBANjkxLCBANzk0LCBANDk3LCBANDc5LCBAMjM0LCBAMjUwLCBANDk2LCBANDMsIEAzNDcsIEA1ODIsIEA4ODIsIEA1MzYsCisgICAgQDMyMiwgQDMxNywgQDI3MywgQDE5NCwgQDkxNywgQDIzNywgQDQyMCwgQDg1OSwgQDM0MCwgQDExNSwgQDIyMiwgQDgwOCwgQDg2NiwgQDgzNiwgQDQxNywgQDEyMSwgQDgzMywgQDQ1OSwgQDY0LCBAMTU5XSBtdXRhYmxlQ29weV07CisKKyAgRUNDX0JZVEVTID0gKGludClQREY0MTdfVEVTVF9XSVRIX0VDLmNvdW50IC0gKGludClQREY0MTdfVEVTVC5jb3VudDsKK30KKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnZvY2F0aW9uOmludm9jYXRpb25dKSB7CisgICAgX2VjID0gW1taWFBERjQxN0VDRXJyb3JDb3JyZWN0aW9uIGFsbG9jXSBpbml0XTsKKyAgfQorCisgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXRlc3ROb0Vycm9yIHsKKyAgTlNNdXRhYmxlQXJyYXkgKnJlY2VpdmVkID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aEFycmF5OlBERjQxN19URVNUX1dJVEhfRUNdOworICAvLyBubyBlcnJvcnMKKyAgW3NlbGYgY2hlY2tEZWNvZGU6cmVjZWl2ZWRdOworfQorCistICh2b2lkKXRlc3RPbmVFcnJvciB7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgUERGNDE3X1RFU1RfV0lUSF9FQy5jb3VudDsgaSsrKSB7CisgICAgTlNNdXRhYmxlQXJyYXkgKnJlY2VpdmVkID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aEFycmF5OlBERjQxN19URVNUX1dJVEhfRUNdOworICAgIHJlY2VpdmVkW2ldID0gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6YXJjNHJhbmRvbSgpICUgMjU2XTsKKyAgICBbc2VsZiBjaGVja0RlY29kZTpyZWNlaXZlZF07CisgIH0KK30KKworLSAodm9pZCl0ZXN0TWF4RXJyb3JzIHsKKyAgZm9yIChpbnQgdGVzdEl0ZXJhdGlvbnMgPSAwOyB0ZXN0SXRlcmF0aW9ucyA8IDEwMDsgdGVzdEl0ZXJhdGlvbnMrKykgeyAvLyAjIGl0ZXJhdGlvbnMgaXMga2luZCBvZiBhcmJpdHJhcnkKKyAgICBOU011dGFibGVBcnJheSAqcmVjZWl2ZWQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQXJyYXk6UERGNDE3X1RFU1RfV0lUSF9FQ107CisgICAgW3NlbGYgY29ycnVwdDpyZWNlaXZlZCBob3dNYW55Ok1BWF9FUlJPUlNdOworICAgIFtzZWxmIGNoZWNrRGVjb2RlOnJlY2VpdmVkXTsKKyAgfQorfQorCistICh2b2lkKXRlc3RUb29NYW55RXJyb3JzIHsKKyAgTlNNdXRhYmxlQXJyYXkgKnJlY2VpdmVkID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aEFycmF5OlBERjQxN19URVNUX1dJVEhfRUNdOworICBbc2VsZiBjb3JydXB0OnJlY2VpdmVkIGhvd01hbnk6TUFYX0VSUk9SUyArIDNdOyAvLyArMyBzaW5jZSB0aGUgYWxnbyBjYW4gYWN0dWFsbHkgY29ycmVjdCAyIG1vcmUgdGhhbiBpdCBzaG91bGQgaGVyZQorCisgIFNUQXNzZXJ0RmFsc2UoW3NlbGYgY2hlY2tEZWNvZGU6cmVjZWl2ZWRdLCBAIlNob3VsZCBub3QgaGF2ZSBkZWNvZGVkIik7Cit9CisKKy8qCistICh2b2lkKXRlc3RNYXhFcmFzdXJlcyB7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgUERGNDE3X1RFU1QuY291bnQ7IGkrKykgeyAvLyAjIGl0ZXJhdGlvbnMgaXMga2luZCBvZiBhcmJpdHJhcnkKKyAgICBOU011dGFibGVBcnJheSAqcmVjZWl2ZWQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQXJyYXk6UERGNDE3X1RFU1RfV0lUSF9FQ107CisgICAgTlNBcnJheSAqZXJhc3VyZXMgPSBbc2VsZiBlcmFzZTpyZWNlaXZlZCBob3dNYW55Ok1BWF9FUkFTVVJFU107CisgICAgW3NlbGYgY2hlY2tEZWNvZGU6cmVjZWl2ZWQgZXJhc3VyZXM6ZXJhc3VyZXNdOworICB9Cit9CisKKy0gKHZvaWQpdGVzdFRvb01hbnlFcmFzdXJlcyB7CisgIE5TTXV0YWJsZUFycmF5ICpyZWNlaXZlZCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhBcnJheTpQREY0MTdfVEVTVF9XSVRIX0VDXTsKKyAgTlNBcnJheSAqZXJhc3VyZXMgPSBbc2VsZiBlcmFzZTpyZWNlaXZlZCBob3dNYW55Ok1BWF9FUkFTVVJFUyArIDFdOworCisgIFNUQXNzZXJ0RmFsc2UoW3NlbGYgY2hlY2tEZWNvZGU6cmVjZWl2ZWQgZXJhc3VyZXM6ZXJhc3VyZXNdLCBAIlNob3VsZCBub3QgaGF2ZSBkZWNvZGVkIik7Cit9CisqLworCistIChCT09MKWNoZWNrRGVjb2RlOihOU011dGFibGVBcnJheSAqKXJlY2VpdmVkIHsKKyAgcmV0dXJuIFtzZWxmIGNoZWNrRGVjb2RlOnJlY2VpdmVkIGVyYXN1cmVzOkBbXV07Cit9CisKKy0gKEJPT0wpY2hlY2tEZWNvZGU6KE5TTXV0YWJsZUFycmF5ICopcmVjZWl2ZWQgZXJhc3VyZXM6KE5TQXJyYXkgKillcmFzdXJlcyB7CisgIGlmICghW3NlbGYuZWMgZGVjb2RlOnJlY2VpdmVkIG51bUVDQ29kZXdvcmRzOkVDQ19CWVRFUyBlcmFzdXJlczplcmFzdXJlc10pIHsKKyAgICByZXR1cm4gTk87CisgIH0KKworICBmb3IgKGludCBpID0gMDsgaSA8IFBERjQxN19URVNULmNvdW50OyBpKyspIHsKKyAgICBTVEFzc2VydEVxdWFscyhbcmVjZWl2ZWRbaV0gaW50VmFsdWVdLCBbUERGNDE3X1RFU1RbaV0gaW50VmFsdWVdLCBAIkV4cGVjdGVkICVAIHRvIGVxdWFsICVAIiwgcmVjZWl2ZWRbaV0sIFBERjQxN19URVNUW2ldKTsKKyAgfQorICByZXR1cm4gWUVTOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gxVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDFUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNzNhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gxVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBRUkNvZGVCbGFja0JveDFUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gxVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDFUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZDcxOTgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gxVGVzdENhc2UubQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJRUkNvZGVCbGFja0JveDFUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gUVJDb2RlQmxhY2tCb3gxVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMSIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZV07CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjE3IHRyeUhhcmRlckNvdW50OjE3IHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MTQgdHJ5SGFyZGVyQ291bnQ6MTUgcm90YXRpb246OTAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MTcgdHJ5SGFyZGVyQ291bnQ6MTcgcm90YXRpb246MTgwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjE0IHRyeUhhcmRlckNvdW50OjE1IHJvdGF0aW9uOjI3MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gyVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDJUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExM2I4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gyVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBRUkNvZGVCbGFja0JveDJUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gyVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDJUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNGNmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gyVGVzdENhc2UubQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJRUkNvZGVCbGFja0JveDJUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gUVJDb2RlQmxhY2tCb3gyVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMiIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZV07CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjMwIHRyeUhhcmRlckNvdW50OjMxIHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MjkgdHJ5SGFyZGVyQ291bnQ6MzAgcm90YXRpb246OTAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MzAgdHJ5SGFyZGVyQ291bnQ6MzAgcm90YXRpb246MTgwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjI5IHRyeUhhcmRlckNvdW50OjMwIHJvdGF0aW9uOjI3MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gzVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDNUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NzI4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gzVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBRUkNvZGVCbGFja0JveDNUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gzVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDNUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDIwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3gzVGVzdENhc2UubQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJRUkNvZGVCbGFja0JveDNUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gUVJDb2RlQmxhY2tCb3gzVGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9xcmNvZGUtMyIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZV07CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjM4IHRyeUhhcmRlckNvdW50OjM4IHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MzggdHJ5SGFyZGVyQ291bnQ6Mzkgcm90YXRpb246OTAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MzYgdHJ5SGFyZGVyQ291bnQ6Mzggcm90YXRpb246MTgwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjM5IHRyeUhhcmRlckNvdW50OjM5IHJvdGF0aW9uOjI3MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g0VGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDRUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDZkZDgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g0VGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBRUkNvZGVCbGFja0JveDRUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g0VGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDRUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZjQzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g0VGVzdENhc2UubQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJRUkNvZGVCbGFja0JveDRUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gUVJDb2RlQmxhY2tCb3g0VGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNCIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZV07CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjM2IHRyeUhhcmRlckNvdW50OjM2IHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MzUgdHJ5SGFyZGVyQ291bnQ6MzUgcm90YXRpb246OTAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MzUgdHJ5SGFyZGVyQ291bnQ6MzYgcm90YXRpb246MTgwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjM1IHRyeUhhcmRlckNvdW50OjM2IHJvdGF0aW9uOjI3MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g1VGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDVUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MWUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g1VGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBRUkNvZGVCbGFja0JveDVUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g1VGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDVUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OGM0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g1VGVzdENhc2UubQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJRUkNvZGVCbGFja0JveDVUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gUVJDb2RlQmxhY2tCb3g1VGVzdENhc2UKKworLSAoaWQpaW5pdFdpdGhJbnZvY2F0aW9uOihOU0ludm9jYXRpb24gKilpbnZvY2F0aW9uIHsKKyAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEludm9jYXRpb246aW52b2NhdGlvbgorICAgICAgICAgICAgICAgIHRlc3RCYXNlUGF0aFN1ZmZpeDpAIlJlc291cmNlcy9ibGFja2JveC9xcmNvZGUtNSIKKyAgICAgICAgICAgICAgICAgICAgIGJhcmNvZGVSZWFkZXI6W1taWE11bHRpRm9ybWF0UmVhZGVyIGFsbG9jXSBpbml0XQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZV07CisKKyAgaWYgKHNlbGYpIHsKKyAgICBbc2VsZiBhZGRUZXN0OjE5IHRyeUhhcmRlckNvdW50OjE5IHJvdGF0aW9uOjAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MTkgdHJ5SGFyZGVyQ291bnQ6MTkgcm90YXRpb246OTAuMGZdOworICAgIFtzZWxmIGFkZFRlc3Q6MTkgdHJ5SGFyZGVyQ291bnQ6MTkgcm90YXRpb246MTgwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjE4IHRyeUhhcmRlckNvdW50OjE5IHJvdGF0aW9uOjI3MC4wZl07CisgIH0KKworICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl0ZXN0QmxhY2tCb3ggeworICBbc3VwZXIgcnVuVGVzdHNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g2VGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDZUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1Njk5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g2VGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJBYnN0cmFjdEJsYWNrQm94VGVzdENhc2UuaCIKKworQGludGVyZmFjZSBRUkNvZGVCbGFja0JveDZUZXN0Q2FzZSA6IEFic3RyYWN0QmxhY2tCb3hUZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g2VGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9RUkNvZGVCbGFja0JveDZUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNDU3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvUVJDb2RlQmxhY2tCb3g2VGVzdENhc2UubQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJRUkNvZGVCbGFja0JveDZUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gUVJDb2RlQmxhY2tCb3g2VGVzdENhc2UKKworLyoqCisgKiBUaGVzZSB0ZXN0cyBhcmUgc3VwcGxpZWQgYnkgVGltIEdlcm5hdCBhbmQgdGVzdCBmaW5kZXIgcGF0dGVybiBkZXRlY3Rpb24gYXQgc21hbGwgc2l6ZSBhbmQgdW5kZXIKKyAqIHJvdGF0aW9uLCB3aGljaCB3YXMgYSB3ZWFrIHNwb3QuCisgKi8KKy0gKGlkKWluaXRXaXRoSW52b2NhdGlvbjooTlNJbnZvY2F0aW9uICopaW52b2NhdGlvbiB7CisgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnZvY2F0aW9uOmludm9jYXRpb24KKyAgICAgICAgICAgICAgICB0ZXN0QmFzZVBhdGhTdWZmaXg6QCJSZXNvdXJjZXMvYmxhY2tib3gvcXJjb2RlLTYiCisgICAgICAgICAgICAgICAgICAgICBiYXJjb2RlUmVhZGVyOltbWlhNdWx0aUZvcm1hdFJlYWRlciBhbGxvY10gaW5pdF0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXQ6a0JhcmNvZGVGb3JtYXRRUkNvZGVdOworCisgIGlmIChzZWxmKSB7CisgICAgW3NlbGYgYWRkVGVzdDoxNSB0cnlIYXJkZXJDb3VudDoxNSByb3RhdGlvbjowLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjE0IHRyeUhhcmRlckNvdW50OjE1IHJvdGF0aW9uOjkwLjBmXTsKKyAgICBbc2VsZiBhZGRUZXN0OjEyIHRyeUhhcmRlckNvdW50OjE1IHJvdGF0aW9uOjE4MC4wZl07CisgICAgW3NlbGYgYWRkVGVzdDoxNCB0cnlIYXJkZXJDb3VudDoxNSByb3RhdGlvbjoyNzAuMGZdOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdGVzdEJsYWNrQm94IHsKKyAgW3N1cGVyIHJ1blRlc3RzXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL1pYUVJDb2RlV3JpdGVyVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9aWFFSQ29kZVdyaXRlclRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkM2FlNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9aWFFSQ29kZVdyaXRlclRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhRUkNvZGVXcml0ZXJUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9aWFFSQ29kZVdyaXRlclRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvWlhRUkNvZGVXcml0ZXJUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODVjMDMKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvWlhRUkNvZGVXcml0ZXJUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWFFSQ29kZVdyaXRlclRlc3RDYXNlLmgiCisKK3N0YXRpYyBOU1N0cmluZyAqQkFTRV9JTUFHRV9QQVRIID0gQCJSZXNvdXJjZXMvZ29sZGVuL3FyY29kZS8iOworCitAaW1wbGVtZW50YXRpb24gWlhRUkNvZGVXcml0ZXJUZXN0Q2FzZQorCistIChaWEltYWdlICopbG9hZEltYWdlOihOU1N0cmluZyAqKWZpbGVOYW1lIHsKKyAgcmV0dXJuIFtbWlhJbWFnZSBhbGxvY10gaW5pdFdpdGhVUkw6CisgICAgICAgICAgIFtbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXSBVUkxGb3JSZXNvdXJjZToKKyAgICAgICAgICAgIFtCQVNFX0lNQUdFX1BBVEggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6ZmlsZU5hbWVdIHdpdGhFeHRlbnNpb246bmlsXV07Cit9CisKKy8vIEluIGNhc2UgdGhlIGdvbGRlbiBpbWFnZXMgYXJlIG5vdCBtb25vY2hyb21hdGljLCBjb252ZXJ0IHRoZSBSR0IgdmFsdWVzIHRvIGdyZXlzY2FsZS4KKy0gKFpYQml0TWF0cml4ICopY3JlYXRlTWF0cml4RnJvbUltYWdlOihaWEltYWdlICopaW1hZ2UgeworICBzaXplX3Qgd2lkdGggPSBpbWFnZS53aWR0aDsKKyAgc2l6ZV90IGhlaWdodCA9IGltYWdlLmhlaWdodDsKKyAgdWludDMyX3QgKmRhdGE7CisKKyAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKKyAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgd2lkdGgsIGhlaWdodCwgOCwgd2lkdGggKiA0LCBjb2xvclNwYWNlLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QpOworICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBrQ0dJbnRlcnBvbGF0aW9uSGlnaCk7CisgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBOTyk7CisKKyAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdodCksIGltYWdlLmNnaW1hZ2UpOworCisgIGRhdGEgPSAodWludDMyX3QgKikgbWFsbG9jKHdpZHRoICogaGVpZ2h0ICogc2l6ZW9mKHVpbnQzMl90KSk7CisgIG1lbWNweShkYXRhLCBDR0JpdG1hcENvbnRleHRHZXREYXRhKGNvbnRleHQpLCB3aWR0aCAqIGhlaWdodCAqIHNpemVvZih1aW50MzJfdCkpOworCisgIFpYQml0TWF0cml4ICptYXRyaXggPSBbW1pYQml0TWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOihpbnQpd2lkdGggaGVpZ2h0OihpbnQpaGVpZ2h0XTsKKyAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgaW50IHBpeGVsID0gZGF0YVt5ICogd2lkdGggKyB4XTsKKyAgICAgIGludCBsdW1pbmFuY2UgPSAoMzA2ICogKChwaXhlbCA+PiAxNikgJiAweEZGKSArCisgICAgICAgICAgICAgICAgICAgICAgIDYwMSAqICgocGl4ZWwgPj4gOCkgJiAweEZGKSArCisgICAgICAgICAgICAgICAgICAgICAgIDExNyAqIChwaXhlbCAmIDB4RkYpKSA+PiAxMDsKKyAgICAgIGlmIChsdW1pbmFuY2UgPD0gMHg3RikgeworICAgICAgICBbbWF0cml4IHNldFg6eCB5OnldOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gbWF0cml4OworfQorCistICh2b2lkKXRlc3RRUkNvZGVXcml0ZXIgeworICAvLyBUaGUgUVIgc2hvdWxkIGJlIG11bHRpcGxpZWQgdXAgdG8gZml0LCB3aXRoIGV4dHJhIHBhZGRpbmcgaWYgbmVjZXNzYXJ5CisgIGludCBiaWdFbm91Z2ggPSAyNTY7CisgIFpYUVJDb2RlV3JpdGVyICp3cml0ZXIgPSBbW1pYUVJDb2RlV3JpdGVyIGFsbG9jXSBpbml0XTsKKyAgWlhCaXRNYXRyaXggKm1hdHJpeCA9IFt3cml0ZXIgZW5jb2RlOkAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIgZm9ybWF0OmtCYXJjb2RlRm9ybWF0UVJDb2RlIHdpZHRoOmJpZ0Vub3VnaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6YmlnRW5vdWdoIGhpbnRzOm5pbCBlcnJvcjpuaWxdOworICBTVEFzc2VydE5vdE5pbChtYXRyaXgsIEAiTWF0cml4IHNob3VsZCBub3QgYmUgbmlsIik7CisgIFNUQXNzZXJ0RXF1YWxzKG1hdHJpeC53aWR0aCwgYmlnRW5vdWdoLCBAIldpZHRoIHNob3VsZCBiZSAlZCIsIGJpZ0Vub3VnaCk7CisgIFNUQXNzZXJ0RXF1YWxzKG1hdHJpeC5oZWlnaHQsIGJpZ0Vub3VnaCwgQCJIZWlnaHQgc2hvdWxkIGJlICVkIiwgYmlnRW5vdWdoKTsKKworICAvLyBUaGUgUVIgd2lsbCBub3QgZml0IGluIHRoaXMgc2l6ZSwgc28gdGhlIG1hdHJpeCBzaG91bGQgY29tZSBiYWNrIGJpZ2dlcgorICBpbnQgdG9vU21hbGwgPSAyMDsKKyAgbWF0cml4ID0gW3dyaXRlciBlbmNvZGU6QCJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRRUkNvZGUgd2lkdGg6dG9vU21hbGwKKyAgICAgICAgICAgICAgICAgICBoZWlnaHQ6dG9vU21hbGwgaGludHM6bmlsIGVycm9yOm5pbF07CisgIFNUQXNzZXJ0Tm90TmlsKG1hdHJpeCwgQCJNYXRyaXggc2hvdWxkIG5vdCBiZSBuaWwiKTsKKyAgU1RBc3NlcnRUcnVlKHRvb1NtYWxsIDwgbWF0cml4LndpZHRoLCBAIk1hdHJpeCB3aWR0aCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuICVkIiwgdG9vU21hbGwpOworICBTVEFzc2VydFRydWUodG9vU21hbGwgPCBtYXRyaXguaGVpZ2h0LCBAIk1hdHJpeCBoZWlnaHQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAlZCIsIHRvb1NtYWxsKTsKKworICAvLyBXZSBzaG91bGQgYWxzbyBiZSBhYmxlIHRvIGhhbmRsZSBub24tc3F1YXJlIHJlcXVlc3RzIGJ5IHBhZGRpbmcgdGhlbQorICBpbnQgc3RyYW5nZVdpZHRoID0gNTAwOworICBpbnQgc3RyYW5nZUhlaWdodCA9IDEwMDsKKyAgbWF0cml4ID0gW3dyaXRlciBlbmNvZGU6QCJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiBmb3JtYXQ6a0JhcmNvZGVGb3JtYXRRUkNvZGUgd2lkdGg6c3RyYW5nZVdpZHRoCisgICAgICAgICAgICAgICAgICAgaGVpZ2h0OnN0cmFuZ2VIZWlnaHQgaGludHM6bmlsIGVycm9yOm5pbF07CisgIFNUQXNzZXJ0Tm90TmlsKG1hdHJpeCwgQCJNYXRyaXggc2hvdWxkIG5vdCBiZSBuaWwiKTsKKyAgU1RBc3NlcnRFcXVhbHMobWF0cml4LndpZHRoLCBzdHJhbmdlV2lkdGgsIEAiV2lkdGggc2hvdWxkIGJlICVkIiwgc3RyYW5nZVdpZHRoKTsKKyAgU1RBc3NlcnRFcXVhbHMobWF0cml4LmhlaWdodCwgc3RyYW5nZUhlaWdodCwgQCJIZWlnaHQgc2hvdWxkIGJlICVkIiwgc3RyYW5nZUhlaWdodCk7Cit9CisKKy0gKHZvaWQpY29tcGFyZVRvR29sZGVuRmlsZTooTlNTdHJpbmcgKiljb250ZW50cyBlY0xldmVsOihaWEVycm9yQ29ycmVjdGlvbkxldmVsICopZWNMZXZlbAorICAgICAgICAgICAgICAgICByZXNvbHV0aW9uOihpbnQpcmVzb2x1dGlvbiBmaWxlTmFtZTooTlNTdHJpbmcgKilmaWxlTmFtZSB7CisgIFpYSW1hZ2UgKmltYWdlID0gW3NlbGYgbG9hZEltYWdlOmZpbGVOYW1lXTsKKyAgU1RBc3NlcnROb3ROaWwoaW1hZ2UsIEAiSW1hZ2Ugc2hvdWxkIG5vdCBiZSBuaWwiKTsKKyAgWlhCaXRNYXRyaXggKmdvbGRlblJlc3VsdCA9IFtzZWxmIGNyZWF0ZU1hdHJpeEZyb21JbWFnZTppbWFnZV07CisgIFNUQXNzZXJ0Tm90TmlsKGdvbGRlblJlc3VsdCwgQCJHb2xkZW4gcmVzdWx0IHNob3VsZCBub3QgYmUgbmlsIik7CisKKyAgWlhFbmNvZGVIaW50cyAqaGludHMgPSBbW1pYRW5jb2RlSGludHMgYWxsb2NdIGluaXRdOworICBoaW50cy5lcnJvckNvcnJlY3Rpb25MZXZlbCA9IGVjTGV2ZWw7CisgIFpYUVJDb2RlV3JpdGVyICp3cml0ZXIgPSBbW1pYUVJDb2RlV3JpdGVyIGFsbG9jXSBpbml0XTsKKyAgWlhCaXRNYXRyaXggKmdlbmVyYXRlZFJlc3VsdCA9IFt3cml0ZXIgZW5jb2RlOmNvbnRlbnRzIGZvcm1hdDprQmFyY29kZUZvcm1hdFFSQ29kZSB3aWR0aDpyZXNvbHV0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDpyZXNvbHV0aW9uIGhpbnRzOmhpbnRzIGVycm9yOm5pbF07CisKKyAgU1RBc3NlcnRFcXVhbHMoZ2VuZXJhdGVkUmVzdWx0LndpZHRoLCByZXNvbHV0aW9uLCBAIkV4cGVjdGVkIGdlbmVyYXRlZFJlc3VsdCB3aWR0aCB0byBiZSAlZCIsIHJlc29sdXRpb24pOworICBTVEFzc2VydEVxdWFscyhnZW5lcmF0ZWRSZXN1bHQuaGVpZ2h0LCByZXNvbHV0aW9uLCBAIkV4cGVjdGVkIGdlbmVyYXRlZFJlc3VsdCBoZWlnaHQgdG8gYmUgJWQiLCByZXNvbHV0aW9uKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoZ2VuZXJhdGVkUmVzdWx0LCBnb2xkZW5SZXN1bHQsIEAiRXhwZWN0ZWQgZ2VuZXJhdGVkUmVzdWx0IHRvIGVxdWFsIGdvbGRlblJlc3VsdCIpOworfQorCisvLyBHb2xkZW4gaW1hZ2VzIGFyZSBnZW5lcmF0ZWQgd2l0aCAicXJjb2RlX3NhbXBsZS5jYyIuIFRoZSBpbWFnZXMgYXJlIGNoZWNrZWQgd2l0aCBib3RoIGV5ZSBiYWxscworLy8gYW5kIGNlbGwgcGhvbmVzLiBXZSBleHBlY3QgcGl4ZWwtcGVyZmVjdCByZXN1bHRzLCBiZWNhdXNlIHRoZSBlcnJvciBjb3JyZWN0aW9uIGxldmVsIGlzIGtub3duLAorLy8gYW5kIHRoZSBwaXhlbCBkaW1lbnNpb25zIG1hdGNoZXMgZXhhY3RseS4KKy0gKHZvaWQpdGVzdFJlZ3Jlc3Npb25UZXN0IHsKKyAgW3NlbGYgY29tcGFyZVRvR29sZGVuRmlsZTpAImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iIGVjTGV2ZWw6W1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZXJyb3JDb3JyZWN0aW9uTGV2ZWxNXQorICAgICAgICAgICAgICAgICByZXNvbHV0aW9uOjk5IGZpbGVOYW1lOkAicmVuZGVyZXItdGVzdC0wMS5wbmciXTsKKworICBbc2VsZiBjb21wYXJlVG9Hb2xkZW5GaWxlOkAiMTIzNDUiIGVjTGV2ZWw6W1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZXJyb3JDb3JyZWN0aW9uTGV2ZWxMXQorICAgICAgICAgICAgICAgICByZXNvbHV0aW9uOjU4IGZpbGVOYW1lOkAicmVuZGVyZXItdGVzdC0wMi5wbmciXTsKKworICAvLyBUZXN0IGluIEthdGFrYW5hIGluIFNoaWZ0X0pJUy4KKyAgLy8gVE9ETzogdGhpcyB0ZXN0IGlzIGJvZ3VzIG5vdyB0aGF0IGJ5dGUgbW9kZSBoYXMgYmVlbiBiYXNpY2FsbHkgZml4ZWQgdG8gYXNzdW1pbmcgSVNPLTg4NTktMSBlbmNvZGluZworICAvLyAgVGhlIHJlYWwgc29sdXRpb24gaXMgdG8gaW1wbGVtZW50IEthbmppIG1vZGUsIGluIHdoaWNoIGNhc2UgdGhlIGdvbGRlbiBmaWxlIHdpbGwgYmUgd3JvbmcgYWdhaW4KKyAgLyoKKyAgIGNvbXBhcmVUb0dvbGRlbkZpbGUoCisgICBuZXcgU3RyaW5nKG5ldyBieXRlW10geyhieXRlKTB4ODMsIDB4NjUsIChieXRlKTB4ODMsIDB4NTgsIChieXRlKTB4ODMsIDB4Njd9LCAiU2hpZnRfSklTIiksCisgICBFcnJvckNvcnJlY3Rpb25MZXZlbC5ILCAxNDUsCisgICAicmVuZGVyZXItdGVzdC0wMy5wbmciKTsKKyAgICovCit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYRGF0YU1hc2tUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhEYXRhTWFza1Rlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5MmY2NQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYRGF0YU1hc2tUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYRGF0YU1hc2tUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYRGF0YU1hc2tUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhEYXRhTWFza1Rlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0OTA4MgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYRGF0YU1hc2tUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRGF0YU1hc2tUZXN0Q2FzZS5oIgorCit0eXBlZGVmIEJPT0wgKF5NYXNrQ29uZGl0aW9uKShpbnQgaSwgaW50IGopOworCitAaW1wbGVtZW50YXRpb24gWlhEYXRhTWFza1Rlc3RDYXNlCisKKy0gKHZvaWQpdGVzdE1hc2swIHsKKyAgW3NlbGYgcnVuVGVzdE1hc2tBY3Jvc3NEaW1lbnNpb25zOjAgY29uZGl0aW9uOl4oaW50IGksIGludCBqKSB7CisgICAgcmV0dXJuIChCT09MKSgoaSArIGopICUgMiA9PSAwKTsKKyAgfV07Cit9CisKKy0gKHZvaWQpdGVzdE1hc2sxIHsKKyAgW3NlbGYgcnVuVGVzdE1hc2tBY3Jvc3NEaW1lbnNpb25zOjEgY29uZGl0aW9uOl4oaW50IGksIGludCBqKSB7CisgICAgcmV0dXJuIChCT09MKShpICUgMiA9PSAwKTsKKyAgfV07Cit9CisKKy0gKHZvaWQpdGVzdE1hc2syIHsKKyAgW3NlbGYgcnVuVGVzdE1hc2tBY3Jvc3NEaW1lbnNpb25zOjIgY29uZGl0aW9uOl4oaW50IGksIGludCBqKSB7CisgICAgcmV0dXJuIChCT09MKShqICUgMyA9PSAwKTsKKyAgfV07Cit9CisKKy0gKHZvaWQpdGVzdE1hc2szIHsKKyAgW3NlbGYgcnVuVGVzdE1hc2tBY3Jvc3NEaW1lbnNpb25zOjMgY29uZGl0aW9uOl4oaW50IGksIGludCBqKSB7CisgICAgcmV0dXJuIChCT09MKSgoaSArIGopICUgMyA9PSAwKTsKKyAgfV07Cit9CisKKy0gKHZvaWQpdGVzdE1hc2s0IHsKKyAgW3NlbGYgcnVuVGVzdE1hc2tBY3Jvc3NEaW1lbnNpb25zOjQgY29uZGl0aW9uOl4oaW50IGksIGludCBqKSB7CisgICAgcmV0dXJuIChCT09MKSgoaSAvIDIgKyBqIC8gMykgJSAyID09IDApOworICB9XTsKK30KKworLSAodm9pZCl0ZXN0TWFzazUgeworICBbc2VsZiBydW5UZXN0TWFza0Fjcm9zc0RpbWVuc2lvbnM6NSBjb25kaXRpb246XihpbnQgaSwgaW50IGopIHsKKyAgICByZXR1cm4gKEJPT0wpKChpICogaikgJSAyICsgKGkgKiBqKSAlIDMgPT0gMCk7CisgIH1dOworfQorCistICh2b2lkKXRlc3RNYXNrNiB7CisgIFtzZWxmIHJ1blRlc3RNYXNrQWNyb3NzRGltZW5zaW9uczo2IGNvbmRpdGlvbjpeKGludCBpLCBpbnQgaikgeworICAgIHJldHVybiAoQk9PTCkoKChpICogaikgJSAyICsgKGkgKiBqKSAlIDMpICUgMiA9PSAwKTsKKyAgfV07Cit9CisKKy0gKHZvaWQpdGVzdE1hc2s3IHsKKyAgW3NlbGYgcnVuVGVzdE1hc2tBY3Jvc3NEaW1lbnNpb25zOjcgY29uZGl0aW9uOl4oaW50IGksIGludCBqKSB7CisgICAgcmV0dXJuIChCT09MKSgoKGkgKyBqKSAlIDIgKyAoaSAqIGopICUgMykgJSAyID09IDApOworICB9XTsKK30KKworLSAodm9pZClydW5UZXN0TWFza0Fjcm9zc0RpbWVuc2lvbnM6KGludClyZWZlcmVuY2UgY29uZGl0aW9uOihNYXNrQ29uZGl0aW9uKWNvbmRpdGlvbiB7CisgIFpYRGF0YU1hc2sgKm1hc2sgPSBbWlhEYXRhTWFzayBmb3JSZWZlcmVuY2U6cmVmZXJlbmNlXTsKKyAgZm9yIChpbnQgdmVyc2lvbiA9IDE7IHZlcnNpb24gPD0gNDA7IHZlcnNpb24rKykgeworICAgIGludCBkaW1lbnNpb24gPSAxNyArIDQgKiB2ZXJzaW9uOworICAgIFtzZWxmIHJ1blRlc3RNYXNrOm1hc2sgZGltZW5zaW9uOmRpbWVuc2lvbiBjb25kaXRpb246Y29uZGl0aW9uXTsKKyAgfQorfQorCistICh2b2lkKXJ1blRlc3RNYXNrOihaWERhdGFNYXNrICopbWFzayBkaW1lbnNpb246KGludClkaW1lbnNpb24gY29uZGl0aW9uOihNYXNrQ29uZGl0aW9uKWNvbmRpdGlvbiB7CisgIFpYQml0TWF0cml4ICpiaXRzID0gW1taWEJpdE1hdHJpeCBhbGxvY10gaW5pdFdpdGhEaW1lbnNpb246ZGltZW5zaW9uXTsKKyAgW21hc2sgdW5tYXNrQml0TWF0cml4OmJpdHMgZGltZW5zaW9uOmRpbWVuc2lvbl07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgZGltZW5zaW9uOyBpKyspIHsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IGRpbWVuc2lvbjsgaisrKSB7CisgICAgICBCT09MIGV4cGVjdGVkID0gY29uZGl0aW9uKGksIGopOworICAgICAgU1RBc3NlcnRFcXVhbHMoW2JpdHMgZ2V0WDpqIHk6aV0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkICglZCwlZCkgdG8gZXF1YWwgJWQiLCBqLCBpLCBleHBlY3RlZCk7CisgICAgfQorICB9Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhFcnJvckNvcnJlY3Rpb25MZXZlbFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwZDY0OAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhFcnJvckNvcnJlY3Rpb25MZXZlbFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwY2Q0ZAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYRXJyb3JDb3JyZWN0aW9uTGV2ZWxUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhFcnJvckNvcnJlY3Rpb25MZXZlbFRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdEZvckJpdHMgeworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbWlhFcnJvckNvcnJlY3Rpb25MZXZlbCBmb3JCaXRzOjBdLCBbWlhFcnJvckNvcnJlY3Rpb25MZXZlbCBlcnJvckNvcnJlY3Rpb25MZXZlbE1dLAorICAgICAgICAgICAgICAgICAgICAgICBAIkV4cGVjdGVkIGZvckJpdHM6MCB0byBlcXVhbCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIE0iKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZm9yQml0czoxXSwgW1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZXJyb3JDb3JyZWN0aW9uTGV2ZWxMXSwKKyAgICAgICAgICAgICAgICAgICAgICAgQCJFeHBlY3RlZCBmb3JCaXRzOjEgdG8gZXF1YWwgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCBNIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtaWEVycm9yQ29ycmVjdGlvbkxldmVsIGZvckJpdHM6Ml0sIFtaWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsSF0sCisgICAgICAgICAgICAgICAgICAgICAgIEAiRXhwZWN0ZWQgZm9yQml0czoyIHRvIGVxdWFsIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgTSIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbWlhFcnJvckNvcnJlY3Rpb25MZXZlbCBmb3JCaXRzOjNdLCBbWlhFcnJvckNvcnJlY3Rpb25MZXZlbCBlcnJvckNvcnJlY3Rpb25MZXZlbFFdLAorICAgICAgICAgICAgICAgICAgICAgICBAIkV4cGVjdGVkIGZvckJpdHM6MyB0byBlcXVhbCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIE0iKTsKKyAgQHRyeSB7CisgICAgW1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZm9yQml0czo0XTsKKyAgICBTVEZhaWwoQCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uIik7CisgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXgpIHsKKyAgICAvLyBnb29kCisgIH0KK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhGb3JtYXRJbmZvcm1hdGlvblRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvZGVjb2Rlci9aWEZvcm1hdEluZm9ybWF0aW9uVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjc3OWZhCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhGb3JtYXRJbmZvcm1hdGlvblRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhGb3JtYXRJbmZvcm1hdGlvblRlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhGb3JtYXRJbmZvcm1hdGlvblRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvZGVjb2Rlci9aWEZvcm1hdEluZm9ybWF0aW9uVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDI1ZDg2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhGb3JtYXRJbmZvcm1hdGlvblRlc3RDYXNlLm0KQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhGb3JtYXRJbmZvcm1hdGlvblRlc3RDYXNlLmgiCisKK2NvbnN0IGludCBNQVNLRURfVEVTVF9GT1JNQVRfSU5GTyA9IDB4MkJFRDsKK2NvbnN0IGludCBVTk1BU0tFRF9URVNUX0ZPUk1BVF9JTkZPID0gTUFTS0VEX1RFU1RfRk9STUFUX0lORk8gXiAweDU0MTI7CisKK0BpbXBsZW1lbnRhdGlvbiBaWEZvcm1hdEluZm9ybWF0aW9uVGVzdENhc2UKKworLSAodm9pZCl0ZXN0Qml0c0RpZmZlcmluZyB7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWEZvcm1hdEluZm9ybWF0aW9uIG51bUJpdHNEaWZmZXJpbmc6MSBiOjFdLCAwLCBAIkV4cGVjdGVkIG51bUJpdHNEaWZmZXJpbmcgMSwgMSB0byBlcXVhbCAwIik7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWEZvcm1hdEluZm9ybWF0aW9uIG51bUJpdHNEaWZmZXJpbmc6MCBiOjJdLCAxLCBAIkV4cGVjdGVkIG51bUJpdHNEaWZmZXJpbmcgMCwgMiB0byBlcXVhbCAxIik7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWEZvcm1hdEluZm9ybWF0aW9uIG51bUJpdHNEaWZmZXJpbmc6MSBiOjJdLCAyLCBAIkV4cGVjdGVkIG51bUJpdHNEaWZmZXJpbmcgMSwgMiB0byBlcXVhbCAyIik7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWEZvcm1hdEluZm9ybWF0aW9uIG51bUJpdHNEaWZmZXJpbmc6LTEgYjowXSwgMzIsIEAiRXhwZWN0ZWQgbnVtQml0c0RpZmZlcmluZyAtMSwgMCB0byBlcXVhbCAzMiIpOworfQorCistICh2b2lkKXRlc3REZWNvZGUgeworICAvLyBOb3JtYWwgY2FzZQorICBaWEZvcm1hdEluZm9ybWF0aW9uICpleHBlY3RlZCA9CisgICAgW1pYRm9ybWF0SW5mb3JtYXRpb24gZGVjb2RlRm9ybWF0SW5mb3JtYXRpb246TUFTS0VEX1RFU1RfRk9STUFUX0lORk8gbWFza2VkRm9ybWF0SW5mbzI6TUFTS0VEX1RFU1RfRk9STUFUX0lORk9dOworICBTVEFzc2VydE5vdE5pbChleHBlY3RlZCwgQCJFeHBlY3RlZCBleHBlY3RlZCB0byBiZSBub24tbmlsIik7CisgIFNUQXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmRhdGFNYXNrLCAoY2hhcikgMHgwNywgQCJFeHBlY3RlZCBkYXRhIG1hc2sgdG8gZXF1YWwgMHgwNyIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhleHBlY3RlZC5lcnJvckNvcnJlY3Rpb25MZXZlbCwgW1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZXJyb3JDb3JyZWN0aW9uTGV2ZWxRXSwKKyAgICAgICAgICAgICAgICAgICAgICAgQCJFeHBlY3RlZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIHRvIGJlIFEiKTsKKyAgLy8gd2hlcmUgdGhlIGNvZGUgZm9yZ290IHRoZSBtYXNrIQorICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbWlhGb3JtYXRJbmZvcm1hdGlvbiBkZWNvZGVGb3JtYXRJbmZvcm1hdGlvbjpVTk1BU0tFRF9URVNUX0ZPUk1BVF9JTkZPIG1hc2tlZEZvcm1hdEluZm8yOk1BU0tFRF9URVNUX0ZPUk1BVF9JTkZPXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgZGVjb2RlIHRvIGJlICVAIiwgZXhwZWN0ZWQpOworfQorCistICh2b2lkKXRlc3REZWNvZGVXaXRoQml0RGlmZmVyZW5jZSB7CisgIFpYRm9ybWF0SW5mb3JtYXRpb24gKmV4cGVjdGVkID0KKyAgICBbWlhGb3JtYXRJbmZvcm1hdGlvbiBkZWNvZGVGb3JtYXRJbmZvcm1hdGlvbjpNQVNLRURfVEVTVF9GT1JNQVRfSU5GTyBtYXNrZWRGb3JtYXRJbmZvMjpNQVNLRURfVEVTVF9GT1JNQVRfSU5GT107CisgIC8vIDEsMiwzLDQgYml0cyBkaWZmZXJlbmNlCisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtaWEZvcm1hdEluZm9ybWF0aW9uIGRlY29kZUZvcm1hdEluZm9ybWF0aW9uOk1BU0tFRF9URVNUX0ZPUk1BVF9JTkZPIF4gMHgwMSBtYXNrZWRGb3JtYXRJbmZvMjpNQVNLRURfVEVTVF9GT1JNQVRfSU5GTyBeIDB4MDFdLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBkZWNvZGUgdG8gYmUgJUAiLCBleHBlY3RlZCk7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtaWEZvcm1hdEluZm9ybWF0aW9uIGRlY29kZUZvcm1hdEluZm9ybWF0aW9uOk1BU0tFRF9URVNUX0ZPUk1BVF9JTkZPIF4gMHgwMyBtYXNrZWRGb3JtYXRJbmZvMjpNQVNLRURfVEVTVF9GT1JNQVRfSU5GTyBeIDB4MDNdLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBkZWNvZGUgdG8gYmUgJUAiLCBleHBlY3RlZCk7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtaWEZvcm1hdEluZm9ybWF0aW9uIGRlY29kZUZvcm1hdEluZm9ybWF0aW9uOk1BU0tFRF9URVNUX0ZPUk1BVF9JTkZPIF4gMHgwNyBtYXNrZWRGb3JtYXRJbmZvMjpNQVNLRURfVEVTVF9GT1JNQVRfSU5GTyBeIDB4MDddLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBkZWNvZGUgdG8gYmUgJUAiLCBleHBlY3RlZCk7CisgIFNUQXNzZXJ0TmlsKFtaWEZvcm1hdEluZm9ybWF0aW9uIGRlY29kZUZvcm1hdEluZm9ybWF0aW9uOk1BU0tFRF9URVNUX0ZPUk1BVF9JTkZPIF4gMHgwRiBtYXNrZWRGb3JtYXRJbmZvMjpNQVNLRURfVEVTVF9GT1JNQVRfSU5GTyBeIDB4MEZdLCBAIkV4cGVjdGVkIGRlY29kZSB0byBiZSBuaWwiKTsKK30KKworLSAodm9pZCl0ZXN0RGVjb2RlV2l0aE1pc3JlYWQgeworICBaWEZvcm1hdEluZm9ybWF0aW9uICpleHBlY3RlZCA9CisgICAgW1pYRm9ybWF0SW5mb3JtYXRpb24gZGVjb2RlRm9ybWF0SW5mb3JtYXRpb246TUFTS0VEX1RFU1RfRk9STUFUX0lORk8gbWFza2VkRm9ybWF0SW5mbzI6TUFTS0VEX1RFU1RfRk9STUFUX0lORk9dOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbWlhGb3JtYXRJbmZvcm1hdGlvbiBkZWNvZGVGb3JtYXRJbmZvcm1hdGlvbjpNQVNLRURfVEVTVF9GT1JNQVRfSU5GTyBeIDB4MDMgbWFza2VkRm9ybWF0SW5mbzI6TUFTS0VEX1RFU1RfRk9STUFUX0lORk8gXiAweDBGXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgZGVjb2RlIHRvIGJlICVAIiwgZXhwZWN0ZWQpOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvZGVjb2Rlci9aWE1vZGVUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhNb2RlVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmQ3NGZjCi0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhNb2RlVGVzdENhc2UuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0IDxTZW5UZXN0aW5nS2l0L1NlblRlc3RpbmdLaXQuaD4KKworQGludGVyZmFjZSBaWE1vZGVUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYTW9kZVRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvZGVjb2Rlci9aWE1vZGVUZXN0Q2FzZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NGYzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvZGVjb2Rlci9aWE1vZGVUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYTW9kZVRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWE1vZGVUZXN0Q2FzZQorCistICh2b2lkKXRlc3RGb3JCaXRzIHsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1pYTW9kZSBmb3JCaXRzOjB4MDBdLCBbWlhNb2RlIHRlcm1pbmF0b3JNb2RlXSwgQCJFeHBlY3RlZCB0ZXJtaW5hdG9yIG1vZGUiKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1pYTW9kZSBmb3JCaXRzOjB4MDFdLCBbWlhNb2RlIG51bWVyaWNNb2RlXSwgQCJFeHBlY3RlZCBudW1lcmljIG1vZGUiKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1pYTW9kZSBmb3JCaXRzOjB4MDJdLCBbWlhNb2RlIGFscGhhbnVtZXJpY01vZGVdLCBAIkV4cGVjdGVkIGFscGhhbnVtZXJpYyBtb2RlIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtaWE1vZGUgZm9yQml0czoweDA0XSwgW1pYTW9kZSBieXRlTW9kZV0sIEAiRXhwZWN0ZWQgYnl0ZSBtb2RlIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtaWE1vZGUgZm9yQml0czoweDA4XSwgW1pYTW9kZSBrYW5qaU1vZGVdLCBAIkV4cGVjdGVkIGthbmppIG1vZGUiKTsKKyAgaWYgKFtaWE1vZGUgZm9yQml0czoweDEwXSkgeworICAgIFNURmFpbChAIlNob3VsZCBoYXZlIGZhaWxlZCIpOworICB9Cit9CisKKy0gKHZvaWQpdGVzdENoYXJhY3RlckNvdW50IHsKKyAgLy8gU3BvdCBjaGVjayBhIGZldyB2YWx1ZXMKKyAgU1RBc3NlcnRFcXVhbHMoW1taWE1vZGUgbnVtZXJpY01vZGVdIGNoYXJhY3RlckNvdW50Qml0czpbWlhRUkNvZGVWZXJzaW9uIHZlcnNpb25Gb3JOdW1iZXI6NV1dLCAxMCwKKyAgICAgICAgICAgICAgICAgQCJFeHBlY3RlZCBjaGFyYWN0ZXIgY291bnQgYml0cyB0byBiZSAxMCIpOworICBTVEFzc2VydEVxdWFscyhbW1pYTW9kZSBudW1lcmljTW9kZV0gY2hhcmFjdGVyQ291bnRCaXRzOltaWFFSQ29kZVZlcnNpb24gdmVyc2lvbkZvck51bWJlcjoyNl1dLCAxMiwKKyAgICAgICAgICAgICAgICAgQCJFeHBlY3RlZCBjaGFyYWN0ZXIgY291bnQgYml0cyB0byBiZSAxMiIpOworICBTVEFzc2VydEVxdWFscyhbW1pYTW9kZSBudW1lcmljTW9kZV0gY2hhcmFjdGVyQ291bnRCaXRzOltaWFFSQ29kZVZlcnNpb24gdmVyc2lvbkZvck51bWJlcjo0MF1dLCAxNCwKKyAgICAgICAgICAgICAgICAgQCJFeHBlY3RlZCBjaGFyYWN0ZXIgY291bnQgYml0cyB0byBiZSAxNCIpOworICBTVEFzc2VydEVxdWFscyhbW1pYTW9kZSBieXRlTW9kZV0gY2hhcmFjdGVyQ291bnRCaXRzOltaWFFSQ29kZVZlcnNpb24gdmVyc2lvbkZvck51bWJlcjo3XV0sIDgsCisgICAgICAgICAgICAgICAgIEAiRXhwZWN0ZWQgY2hhcmFjdGVyIGNvdW50IGJpdHMgdG8gYmUgOCIpOworICBTVEFzc2VydEVxdWFscyhbW1pYTW9kZSBrYW5qaU1vZGVdIGNoYXJhY3RlckNvdW50Qml0czpbWlhRUkNvZGVWZXJzaW9uIHZlcnNpb25Gb3JOdW1iZXI6OF1dLCA4LAorICAgICAgICAgICAgICAgICBAIkV4cGVjdGVkIGNoYXJhY3RlciBjb3VudCBiaXRzIHRvIGJlIDgiKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJlYThjNQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXJUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTk3NDU1Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyVGVzdENhc2UubQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEJpdFNvdXJjZUJ1aWxkZXIuaCIKKyNpbXBvcnQgIlpYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlclRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXJUZXN0Q2FzZQorCistICh2b2lkKXRlc3RTaW1wbGVCeXRlTW9kZSB7CisgIFpYQml0U291cmNlQnVpbGRlciAqYnVpbGRlciA9IFtbWlhCaXRTb3VyY2VCdWlsZGVyIGFsbG9jXSBpbml0XTsKKyAgW2J1aWxkZXIgd3JpdGU6MHgwNCBudW1CaXRzOjRdOyAvLyBCeXRlIG1vZGUKKyAgW2J1aWxkZXIgd3JpdGU6MHgwMyBudW1CaXRzOjhdOyAvLyAzIGJ5dGVzCisgIFtidWlsZGVyIHdyaXRlOjB4RjEgbnVtQml0czo4XTsKKyAgW2J1aWxkZXIgd3JpdGU6MHhGMiBudW1CaXRzOjhdOworICBbYnVpbGRlciB3cml0ZToweEYzIG51bUJpdHM6OF07CisgIE5TU3RyaW5nICpyZXN1bHQgPSBbW1pYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlciBkZWNvZGU6W2J1aWxkZXIgdG9CeXRlQXJyYXldIGxlbmd0aDpbYnVpbGRlciBieXRlQXJyYXlMZW5ndGhdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb246W1pYUVJDb2RlVmVyc2lvbiB2ZXJzaW9uRm9yTnVtYmVyOjFdIGVjTGV2ZWw6bmlsIGhpbnRzOm5pbCBlcnJvcjpuaWxdIHRleHRdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIlx1MDBmMVx1MDBmMlx1MDBmMyI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHJlc3VsdCwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgJUAgdG8gZXF1YWwgJUAiLCByZXN1bHQsIGV4cGVjdGVkKTsKK30KKworLSAodm9pZCl0ZXN0U2ltcGxlU0pJUyB7CisgIFpYQml0U291cmNlQnVpbGRlciAqYnVpbGRlciA9IFtbWlhCaXRTb3VyY2VCdWlsZGVyIGFsbG9jXSBpbml0XTsKKyAgW2J1aWxkZXIgd3JpdGU6MHgwNCBudW1CaXRzOjRdOyAvLyBCeXRlIG1vZGUKKyAgW2J1aWxkZXIgd3JpdGU6MHgwNCBudW1CaXRzOjhdOyAvLyA0IGJ5dGVzCisgIFtidWlsZGVyIHdyaXRlOjB4QTEgbnVtQml0czo4XTsKKyAgW2J1aWxkZXIgd3JpdGU6MHhBMiBudW1CaXRzOjhdOworICBbYnVpbGRlciB3cml0ZToweEEzIG51bUJpdHM6OF07CisgIFtidWlsZGVyIHdyaXRlOjB4RDAgbnVtQml0czo4XTsKKyAgTlNTdHJpbmcgKnJlc3VsdCA9IFtbWlhRUkNvZGVEZWNvZGVkQml0U3RyZWFtUGFyc2VyIGRlY29kZTpbYnVpbGRlciB0b0J5dGVBcnJheV0gbGVuZ3RoOltidWlsZGVyIGJ5dGVBcnJheUxlbmd0aF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjpbWlhRUkNvZGVWZXJzaW9uIHZlcnNpb25Gb3JOdW1iZXI6MV0gZWNMZXZlbDpuaWwgaGludHM6bmlsIGVycm9yOm5pbF0gdGV4dF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiXHVmZjYxXHVmZjYyXHVmZjYzXHVmZjkwIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMocmVzdWx0LCBleHBlY3RlZCwgQCJFeHBlY3RlZCAlQCB0byBlcXVhbCAlQCIsIHJlc3VsdCwgZXhwZWN0ZWQpOworfQorCistICh2b2lkKXRlc3RFQ0kgeworICBaWEJpdFNvdXJjZUJ1aWxkZXIgKmJ1aWxkZXIgPSBbW1pYQml0U291cmNlQnVpbGRlciBhbGxvY10gaW5pdF07CisgIFtidWlsZGVyIHdyaXRlOjB4MDcgbnVtQml0czo0XTsgLy8gRUNJIG1vZGUKKyAgW2J1aWxkZXIgd3JpdGU6MHgwMiBudW1CaXRzOjhdOyAvLyBFQ0kgMiA9IENQNDM3IGVuY29kaW5nCisgIFtidWlsZGVyIHdyaXRlOjB4MDQgbnVtQml0czo0XTsgLy8gQnl0ZSBtb2RlCisgIFtidWlsZGVyIHdyaXRlOjB4MDMgbnVtQml0czo4XTsgLy8gMyBieXRlcworICBbYnVpbGRlciB3cml0ZToweEExIG51bUJpdHM6OF07CisgIFtidWlsZGVyIHdyaXRlOjB4QTIgbnVtQml0czo4XTsKKyAgW2J1aWxkZXIgd3JpdGU6MHhBMyBudW1CaXRzOjhdOworICBOU1N0cmluZyAqcmVzdWx0ID0gW1taWFFSQ29kZURlY29kZWRCaXRTdHJlYW1QYXJzZXIgZGVjb2RlOltidWlsZGVyIHRvQnl0ZUFycmF5XSBsZW5ndGg6W2J1aWxkZXIgYnl0ZUFycmF5TGVuZ3RoXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOltaWFFSQ29kZVZlcnNpb24gdmVyc2lvbkZvck51bWJlcjoxXSBlY0xldmVsOm5pbCBoaW50czpuaWwgZXJyb3I6bmlsXSB0ZXh0XTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCJcdTAwZWRcdTAwZjNcdTAwZmEiOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhyZXN1bHQsIGV4cGVjdGVkLCBAIkV4cGVjdGVkICVAIHRvIGVxdWFsICVAIiwgcmVzdWx0LCBleHBlY3RlZCk7Cit9CisKKy0gKHZvaWQpdGVzdEhhbnppIHsKKyAgWlhCaXRTb3VyY2VCdWlsZGVyICpidWlsZGVyID0gW1taWEJpdFNvdXJjZUJ1aWxkZXIgYWxsb2NdIGluaXRdOworICBbYnVpbGRlciB3cml0ZToweDBEIG51bUJpdHM6NF07IC8vIEhhbnppIG1vZGUKKyAgW2J1aWxkZXIgd3JpdGU6MHgwMSBudW1CaXRzOjRdOyAvLyBTdWJzZXQgMSA9IEdCMjMxMiBlbmNvZGluZworICBbYnVpbGRlciB3cml0ZToweDAxIG51bUJpdHM6OF07IC8vIDEgY2hhcmFjdGVycworICBbYnVpbGRlciB3cml0ZToweDAzQzEgbnVtQml0czoxM107CisgIE5TU3RyaW5nICpyZXN1bHQgPSBbW1pYUVJDb2RlRGVjb2RlZEJpdFN0cmVhbVBhcnNlciBkZWNvZGU6W2J1aWxkZXIgdG9CeXRlQXJyYXldIGxlbmd0aDpbYnVpbGRlciBieXRlQXJyYXlMZW5ndGhdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb246W1pYUVJDb2RlVmVyc2lvbiB2ZXJzaW9uRm9yTnVtYmVyOjFdIGVjTGV2ZWw6bmlsIGhpbnRzOm5pbCBlcnJvcjpuaWxdIHRleHRdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIlx1OTYzZiI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHJlc3VsdCwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgJUAgdG8gZXF1YWwgJUAiLCByZXN1bHQsIGV4cGVjdGVkKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVWZXJzaW9uVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlVmVyc2lvblRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ4OWY0NwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9kZWNvZGVyL1pYUVJDb2RlVmVyc2lvblRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhRUkNvZGVWZXJzaW9uVGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvZGVjb2Rlci9aWFFSQ29kZVZlcnNpb25UZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVWZXJzaW9uVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzAzZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2RlY29kZXIvWlhRUkNvZGVWZXJzaW9uVGVzdENhc2UubQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWEVycm9yQ29ycmVjdGlvbkxldmVsLmgiCisjaW1wb3J0ICJaWFFSQ29kZVZlcnNpb24uaCIKKyNpbXBvcnQgIlpYUVJDb2RlVmVyc2lvblRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWFFSQ29kZVZlcnNpb25UZXN0Q2FzZQorCistICh2b2lkKXRlc3RWZXJzaW9uRm9yTnVtYmVyIHsKKyAgaWYgKFtaWFFSQ29kZVZlcnNpb24gdmVyc2lvbkZvck51bWJlcjowXSkgeworICAgIFNURmFpbChAIlNob3VsZCBoYXZlIGZhaWxlZCIpOworICB9CisgIGZvciAoaW50IGkgPSAxOyBpIDw9IDQwOyBpKyspIHsKKyAgICBbc2VsZiBjaGVja1ZlcnNpb246W1pYUVJDb2RlVmVyc2lvbiB2ZXJzaW9uRm9yTnVtYmVyOmldIG51bWJlcjppIGRpbWVuc2lvbjo0KmkgKyAxN107CisgIH0KK30KKworLSAodm9pZCljaGVja1ZlcnNpb246KFpYUVJDb2RlVmVyc2lvbiAqKXZlcnNpb24gbnVtYmVyOihpbnQpbnVtYmVyIGRpbWVuc2lvbjooaW50KWRpbWVuc2lvbiB7CisgIFNUQXNzZXJ0Tm90TmlsKHZlcnNpb24sIEAiRXhwZWN0ZWQgdmVyc2lvbiB0byBiZSBub24tbmlsIik7CisgIFNUQXNzZXJ0RXF1YWxzKHZlcnNpb24udmVyc2lvbk51bWJlciwgbnVtYmVyLCBAIkV4cGVjdGVkIHZlcnNpb24gbnVtYmVyIHRvIGJlICVkIiwgbnVtYmVyKTsKKyAgU1RBc3NlcnROb3ROaWwodmVyc2lvbi5hbGlnbm1lbnRQYXR0ZXJuQ2VudGVycywgQCJFeHBlY3RlZCBhbGlnbm1lbnRQYXR0ZXJuQ2VudGVycyB0byBiZSBub24tbmlsIik7CisgIGlmIChudW1iZXIgPiAxKSB7CisgICAgU1RBc3NlcnRUcnVlKHZlcnNpb24uYWxpZ25tZW50UGF0dGVybkNlbnRlcnMuY291bnQgPiAwLCBAIkV4cGVjdGVkIGFsaWdubWVudFBhdHRlcm5DZW50ZXJzIHRvIGJlIG5vbi1lbXB0eSIpOworICB9CisgIFNUQXNzZXJ0RXF1YWxzKHZlcnNpb24uZGltZW5zaW9uRm9yVmVyc2lvbiwgZGltZW5zaW9uLCBAIkV4cGVjdGVkIGRpbWVuc2lvbiB0byBiZSAlZCIpOworICBTVEFzc2VydE5vdE5pbChbdmVyc2lvbiBlY0Jsb2Nrc0ZvckxldmVsOltaWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsSF1dLAorICAgICAgICAgICAgICAgICBAIkV4cGVjdGVkIGVjYmxvY2tzIGZvciBlcnJvciBjb3JyZWN0aW9uIGxldmVsIEggdG8gYmUgbm9uLW5pbCIpOworICBTVEFzc2VydE5vdE5pbChbdmVyc2lvbiBlY0Jsb2Nrc0ZvckxldmVsOltaWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsTF1dLAorICAgICAgICAgICAgICAgICBAIkV4cGVjdGVkIGVjYmxvY2tzIGZvciBlcnJvciBjb3JyZWN0aW9uIGxldmVsIEwgdG8gYmUgbm9uLW5pbCIpOworICBTVEFzc2VydE5vdE5pbChbdmVyc2lvbiBlY0Jsb2Nrc0ZvckxldmVsOltaWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsTV1dLAorICAgICAgICAgICAgICAgICBAIkV4cGVjdGVkIGVjYmxvY2tzIGZvciBlcnJvciBjb3JyZWN0aW9uIGxldmVsIE0gdG8gYmUgbm9uLW5pbCIpOworICBTVEFzc2VydE5vdE5pbChbdmVyc2lvbiBlY0Jsb2Nrc0ZvckxldmVsOltaWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsUV1dLAorICAgICAgICAgICAgICAgICBAIkV4cGVjdGVkIGVjYmxvY2tzIGZvciBlcnJvciBjb3JyZWN0aW9uIGxldmVsIFEgdG8gYmUgbm9uLW5pbCIpOworICBTVEFzc2VydE5vdE5pbChbdmVyc2lvbiBidWlsZEZ1bmN0aW9uUGF0dGVybl0sIEAiRXhwZWN0ZWQgdmVyc2lvbiBidWlsZEZ1bmN0aW9uUGF0dGVybiB0byBiZSBub24tbmlsIik7Cit9CisKKy0gKHZvaWQpdGVzdEdldFByb3Zpc2lvbmFsVmVyc2lvbkZvckRpbWVuc2lvbiB7CisgIGZvciAoaW50IGkgPSAxOyBpIDw9IDQwOyBpKyspIHsKKyAgICBTVEFzc2VydEVxdWFscyhbWlhRUkNvZGVWZXJzaW9uIHByb3Zpc2lvbmFsVmVyc2lvbkZvckRpbWVuc2lvbjo0KmkgKyAxN10udmVyc2lvbk51bWJlciwgaSwKKyAgICAgICAgICAgICAgICAgICBAIkV4cGVjdGVkIHZlcnNpb24gbnVtYmVyIHRvIGJlICVkIiwgaSk7CisgIH0KK30KKworLSAodm9pZCl0ZXN0RGVjb2RlVmVyc2lvbkluZm9ybWF0aW9uIHsKKyAgLy8gU3BvdCBjaGVjaworICBbc2VsZiBkb1Rlc3RWZXJzaW9uOjcgbWFzazoweDA3Qzk0XTsKKyAgW3NlbGYgZG9UZXN0VmVyc2lvbjoxMiBtYXNrOjB4MEM3NjJdOworICBbc2VsZiBkb1Rlc3RWZXJzaW9uOjE3IG1hc2s6MHgxMTQ1RF07CisgIFtzZWxmIGRvVGVzdFZlcnNpb246MjIgbWFzazoweDE2OEM5XTsKKyAgW3NlbGYgZG9UZXN0VmVyc2lvbjoyNyBtYXNrOjB4MUIwOEVdOworICBbc2VsZiBkb1Rlc3RWZXJzaW9uOjMyIG1hc2s6MHgyMDlENV07Cit9CisKKy0gKHZvaWQpZG9UZXN0VmVyc2lvbjooaW50KWV4cGVjdGVkVmVyc2lvbiBtYXNrOihpbnQpbWFzayB7CisgIFpYUVJDb2RlVmVyc2lvbiAqdmVyc2lvbiA9IFtaWFFSQ29kZVZlcnNpb24gZGVjb2RlVmVyc2lvbkluZm9ybWF0aW9uOm1hc2tdOworICBTVEFzc2VydE5vdE5pbCh2ZXJzaW9uLCBAIkV4cGVjdGVkIHZlcnNpb24gdG8gYmUgbm9uLW5pbCIpOworICBTVEFzc2VydEVxdWFscyh2ZXJzaW9uLnZlcnNpb25OdW1iZXIsIGV4cGVjdGVkVmVyc2lvbiwgQCJFeHBlY3RlZCB2ZXJzaW9uIG51bWJlciB0byBiZSAlZCIsIGV4cGVjdGVkVmVyc2lvbik7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL0JpdFZlY3RvclRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvZW5jb2Rlci9CaXRWZWN0b3JUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzA3OTAKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvZW5jb2Rlci9CaXRWZWN0b3JUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIEJpdFZlY3RvclRlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2VuY29kZXIvQml0VmVjdG9yVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL0JpdFZlY3RvclRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhZWNhMQotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL0JpdFZlY3RvclRlc3RDYXNlLm0KQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIkJpdFZlY3RvclRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBCaXRWZWN0b3JUZXN0Q2FzZQorCistICh1bnNpZ25lZCBsb25nKXVuc2lnbmVkSW50OihaWEJpdEFycmF5ICopdiBpbmRleDooaW50KWluZGV4IHsKKyAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwTDsKKyAgZm9yIChpbnQgaSA9IDAsIG9mZnNldCA9IGluZGV4IDw8IDM7IGkgPCAzMjsgaSsrKSB7CisgICAgaWYgKFt2IGdldDpvZmZzZXQgKyBpXSkgeworICAgICAgcmVzdWx0IHw9IDFMIDw8ICgzMSAtIGkpOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lkKXRlc3RBcHBlbmRCaXQgeworICBaWEJpdEFycmF5ICp2ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgU1RBc3NlcnRFcXVhbHModi5zaXplSW5CeXRlcywgMCwgQCJFeHBlY3RlZCBzaXplSW5CeXRlcyB0byBiZSAwIik7CisgIC8vIDEKKyAgW3YgYXBwZW5kQml0OllFU107CisgIFNUQXNzZXJ0RXF1YWxzKHYuc2l6ZSwgMSwgQCJFeHBlY3RlZCBzaXplIHRvIGJlIDEiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW3NlbGYgdW5zaWduZWRJbnQ6diBpbmRleDowXSwgKHVuc2lnbmVkIGxvbmcpMHg4MDAwMDAwMEwsIEAiRXhwZWN0ZWQgdW5zaWduZWQgaW50IGF0IGluZGV4IDAgdG8gZXF1YWwgJWQiLCAweDgwMDAwMDAwTCk7CisgIC8vIDEwCisgIFt2IGFwcGVuZEJpdDpOT107CisgIFNUQXNzZXJ0RXF1YWxzKHYuc2l6ZSwgMiwgQCJFeHBlY3RlZCBzaXplIHRvIGJlIDIiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW3NlbGYgdW5zaWduZWRJbnQ6diBpbmRleDowXSwgKHVuc2lnbmVkIGxvbmcpMHg4MDAwMDAwMEwsIEAiRXhwZWN0ZWQgdW5zaWduZWQgaW50IGF0IGluZGV4IDAgdG8gZXF1YWwgJWQiLCAweDgwMDAwMDAwTCk7CisgIC8vIDEwMQorICBbdiBhcHBlbmRCaXQ6WUVTXTsKKyAgU1RBc3NlcnRFcXVhbHModi5zaXplLCAzLCBAIkV4cGVjdGVkIHNpemUgdG8gYmUgMyIpOworICBTVEFzc2VydEVxdWFscyhbc2VsZiB1bnNpZ25lZEludDp2IGluZGV4OjBdLCAodW5zaWduZWQgbG9uZykweGEwMDAwMDAwTCwgQCJFeHBlY3RlZCB1bnNpZ25lZCBpbnQgYXQgaW5kZXggMCB0byBlcXVhbCAlZCIsIDB4YTAwMDAwMDBMKTsKKyAgLy8gMTAxMAorICBbdiBhcHBlbmRCaXQ6Tk9dOworICBTVEFzc2VydEVxdWFscyh2LnNpemUsIDQsIEAiRXhwZWN0ZWQgc2l6ZSB0byBiZSA0Iik7CisgIFNUQXNzZXJ0RXF1YWxzKFtzZWxmIHVuc2lnbmVkSW50OnYgaW5kZXg6MF0sICh1bnNpZ25lZCBsb25nKTB4YTAwMDAwMDBMLCBAIkV4cGVjdGVkIHVuc2lnbmVkIGludCBhdCBpbmRleCAwIHRvIGVxdWFsICVkIiwgMHhhMDAwMDAwMEwpOworICAvLyAxMDEwMQorICBbdiBhcHBlbmRCaXQ6WUVTXTsKKyAgU1RBc3NlcnRFcXVhbHModi5zaXplLCA1LCBAIkV4cGVjdGVkIHNpemUgdG8gYmUgNSIpOworICBTVEFzc2VydEVxdWFscyhbc2VsZiB1bnNpZ25lZEludDp2IGluZGV4OjBdLCAodW5zaWduZWQgbG9uZykweGE4MDAwMDAwTCwgQCJFeHBlY3RlZCB1bnNpZ25lZCBpbnQgYXQgaW5kZXggMCB0byBlcXVhbCAlZCIsIDB4YTgwMDAwMDBMKTsKKyAgLy8gMTAxMDEwCisgIFt2IGFwcGVuZEJpdDpOT107CisgIFNUQXNzZXJ0RXF1YWxzKHYuc2l6ZSwgNiwgQCJFeHBlY3RlZCBzaXplIHRvIGJlIDYiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW3NlbGYgdW5zaWduZWRJbnQ6diBpbmRleDowXSwgKHVuc2lnbmVkIGxvbmcpMHhhODAwMDAwMEwsIEAiRXhwZWN0ZWQgdW5zaWduZWQgaW50IGF0IGluZGV4IDAgdG8gZXF1YWwgJWQiLCAweGE4MDAwMDAwTCk7CisgIC8vIDEwMTAxMDEKKyAgW3YgYXBwZW5kQml0OllFU107CisgIFNUQXNzZXJ0RXF1YWxzKHYuc2l6ZSwgNywgQCJFeHBlY3RlZCBzaXplIHRvIGJlIDciKTsKKyAgU1RBc3NlcnRFcXVhbHMoW3NlbGYgdW5zaWduZWRJbnQ6diBpbmRleDowXSwgKHVuc2lnbmVkIGxvbmcpMHhhYTAwMDAwMEwsIEAiRXhwZWN0ZWQgdW5zaWduZWQgaW50IGF0IGluZGV4IDAgdG8gZXF1YWwgJWQiLCAweGFhMDAwMDAwTCk7CisgIC8vIDEwMTAxMDEwCisgIFt2IGFwcGVuZEJpdDpOT107CisgIFNUQXNzZXJ0RXF1YWxzKHYuc2l6ZSwgOCwgQCJFeHBlY3RlZCBzaXplIHRvIGJlIDgiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW3NlbGYgdW5zaWduZWRJbnQ6diBpbmRleDowXSwgKHVuc2lnbmVkIGxvbmcpMHhhYTAwMDAwMEwsIEAiRXhwZWN0ZWQgdW5zaWduZWQgaW50IGF0IGluZGV4IDAgdG8gZXF1YWwgJWQiLCAweGFhMDAwMDAwTCk7CisgIC8vIDEwMTAxMDEwIDEKKyAgW3YgYXBwZW5kQml0OllFU107CisgIFNUQXNzZXJ0RXF1YWxzKHYuc2l6ZSwgOSwgQCJFeHBlY3RlZCBzaXplIHRvIGJlIDkiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW3NlbGYgdW5zaWduZWRJbnQ6diBpbmRleDowXSwgKHVuc2lnbmVkIGxvbmcpMHhhYTgwMDAwMEwsIEAiRXhwZWN0ZWQgdW5zaWduZWQgaW50IGF0IGluZGV4IDAgdG8gZXF1YWwgJWQiLCAweGFhODAwMDAwTCk7CisgIC8vIDEwMTAxMDEwIDEwCisgIFt2IGFwcGVuZEJpdDpOT107CisgIFNUQXNzZXJ0RXF1YWxzKHYuc2l6ZSwgMTAsIEAiRXhwZWN0ZWQgc2l6ZSB0byBiZSAxMCIpOworICBTVEFzc2VydEVxdWFscyhbc2VsZiB1bnNpZ25lZEludDp2IGluZGV4OjBdLCAodW5zaWduZWQgbG9uZykweGFhODAwMDAwTCwgQCJFeHBlY3RlZCB1bnNpZ25lZCBpbnQgYXQgaW5kZXggMCB0byBlcXVhbCAlZCIsIDB4YWE4MDAwMDBMKTsKK30KKworLSAodm9pZCl0ZXN0QXBwZW5kQml0cyB7CisgIFpYQml0QXJyYXkgKnYgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbdiBhcHBlbmRCaXRzOjB4MSBudW1CaXRzOjFdOworICBTVEFzc2VydEVxdWFscyh2LnNpemUsIDEsIEAiRXhwZWN0ZWQgc2l6ZSB0byBiZSAxIik7CisgIFNUQXNzZXJ0RXF1YWxzKFtzZWxmIHVuc2lnbmVkSW50OnYgaW5kZXg6MF0sICh1bnNpZ25lZCBsb25nKTB4ODAwMDAwMDBMLCBAIkV4cGVjdGVkIHVuc2lnbmVkIGludCBhdCBpbmRleCAwIHRvIGVxdWFsICVkIiwgMHg4MDAwMDAwMEwpOworICB2ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgW3YgYXBwZW5kQml0czoweGZmIG51bUJpdHM6OF07CisgIFNUQXNzZXJ0RXF1YWxzKHYuc2l6ZSwgOCwgQCJFeHBlY3RlZCBzaXplIHRvIGJlIDgiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW3NlbGYgdW5zaWduZWRJbnQ6diBpbmRleDowXSwgKHVuc2lnbmVkIGxvbmcpMHhmZjAwMDAwMEwsIEAiRXhwZWN0ZWQgdW5zaWduZWQgaW50IGF0IGluZGV4IDAgdG8gZXF1YWwgJWQiLCAweGZmMDAwMDAwTCk7CisgIHYgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbdiBhcHBlbmRCaXRzOjB4ZmY3IG51bUJpdHM6MTJdOworICBTVEFzc2VydEVxdWFscyh2LnNpemUsIDEyLCBAIkV4cGVjdGVkIHNpemUgdG8gYmUgMTIiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW3NlbGYgdW5zaWduZWRJbnQ6diBpbmRleDowXSwgKHVuc2lnbmVkIGxvbmcpMHhmZjcwMDAwMEwsIEAiRXhwZWN0ZWQgdW5zaWduZWQgaW50IGF0IGluZGV4IDAgdG8gZXF1YWwgJWQiLCAweGZmNzAwMDAwTCk7Cit9CisKKy0gKHZvaWQpdGVzdE51bUJ5dGVzIHsKKyAgWlhCaXRBcnJheSAqdiA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFNUQXNzZXJ0RXF1YWxzKHYuc2l6ZUluQnl0ZXMsIDAsIEAiRXhwZWN0ZWQgc2l6ZUluQnl0ZXMgdG8gYmUgMCIpOworICBbdiBhcHBlbmRCaXQ6Tk9dOworICAvLyAxIGJpdCB3YXMgYWRkZWQgaW4gdGhlIHZlY3Rvciwgc28gMSBieXRlIHNob3VsZCBiZSBjb25zdW1lZC4KKyAgU1RBc3NlcnRFcXVhbHModi5zaXplSW5CeXRlcywgMSwgQCJFeHBlY3RlZCBzaXplSW5CeXRlcyB0byBiZSAxIik7CisgIFt2IGFwcGVuZEJpdHM6MCBudW1CaXRzOjddOworICBTVEFzc2VydEVxdWFscyh2LnNpemVJbkJ5dGVzLCAxLCBAIkV4cGVjdGVkIHNpemVJbkJ5dGVzIHRvIGJlIDEiKTsKKyAgW3YgYXBwZW5kQml0czowIG51bUJpdHM6OF07CisgIFNUQXNzZXJ0RXF1YWxzKHYuc2l6ZUluQnl0ZXMsIDIsIEAiRXhwZWN0ZWQgc2l6ZUluQnl0ZXMgdG8gYmUgMiIpOworICBbdiBhcHBlbmRCaXRzOjAgbnVtQml0czoxXTsKKyAgLy8gV2Ugbm93IGhhdmUgMTcgYml0cywgc28gMyBieXRlcyBzaG91bGQgYmUgY29uc3VtZWQuCisgIFNUQXNzZXJ0RXF1YWxzKHYuc2l6ZUluQnl0ZXMsIDMsIEAiRXhwZWN0ZWQgc2l6ZUluQnl0ZXMgdG8gYmUgMyIpOworfQorCistICh2b2lkKXRlc3RBcHBlbmRCaXRWZWN0b3IgeworICBaWEJpdEFycmF5ICp2MSA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFt2MSBhcHBlbmRCaXRzOjB4YmUgbnVtQml0czo4XTsKKyAgWlhCaXRBcnJheSAqdjIgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbdjIgYXBwZW5kQml0czoweGVmIG51bUJpdHM6OF07CisgIFt2MSBhcHBlbmRCaXRBcnJheTp2Ml07CisgIC8vIGJlZWYgPSAxMDExIDExMTAgMTExMCAxMTExCisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIFguWFhYWFguIFhYWC5YWFhYIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW3YxIGRlc2NyaXB0aW9uXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgdjEgdG8gYmUgJUAiLCBleHBlY3RlZCk7Cit9CisKKy0gKHZvaWQpdGVzdFhPUiB7CisgIHsKKyAgICBaWEJpdEFycmF5ICp2MSA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgICAgW3YxIGFwcGVuZEJpdHM6MHg1NTU1YWFhYSBudW1CaXRzOjMyXTsKKyAgICBaWEJpdEFycmF5ICp2MiA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgICAgW3YyIGFwcGVuZEJpdHM6MHhhYWFhNTU1NSBudW1CaXRzOjMyXTsKKyAgICBbdjEgeG9yOnYyXTsKKyAgICBTVEFzc2VydEVxdWFscyhbc2VsZiB1bnNpZ25lZEludDp2MSBpbmRleDowXSwgKHVuc2lnbmVkIGxvbmcpMHhmZmZmZmZmZkwsCisgICAgICAgICAgICAgICAgICAgQCJFeHBlY3RlZCB1bnNpZ25lZCBpbnQgYXQgaW5kZXggMCB0byBlcXVhbCAlZCIsIDB4ZmZmZmZmZmZMKTsKKyAgfQorICB7CisgICAgWlhCaXRBcnJheSAqdjEgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICAgIFt2MSBhcHBlbmRCaXRzOjB4MmEgbnVtQml0czo3XTsgIC8vIDAxMCAxMDEwCisgICAgWlhCaXRBcnJheSAqdjIgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICAgIFt2MiBhcHBlbmRCaXRzOjB4NTUgbnVtQml0czo3XTsgIC8vIDEwMSAwMTAxCisgICAgW3YxIHhvcjp2Ml07CisgICAgU1RBc3NlcnRFcXVhbHMoW3NlbGYgdW5zaWduZWRJbnQ6djEgaW5kZXg6MF0sICh1bnNpZ25lZCBsb25nKTB4ZmUwMDAwMDBMLAorICAgICAgICAgICAgICAgICAgIEAiRXhwZWN0ZWQgdW5zaWduZWQgaW50IGF0IGluZGV4IDAgdG8gZXF1YWwgJWQiLCAweGZlMDAwMDAwTCk7IC8vIDExMTEgMTExMAorICB9Cit9CisKKy0gKHZvaWQpdGVzdEF0IHsKKyAgWlhCaXRBcnJheSAqdiA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFt2IGFwcGVuZEJpdHM6MHhkZWFkIG51bUJpdHM6MTZdOyAgLy8gMTEwMSAxMTEwIDEwMTAgMTEwMQorICBTVEFzc2VydFRydWUoW3YgZ2V0OjBdLCBAIkV4cGVjdGVkIHZhbHVlIGF0IDAgdG8gYmUgMSIpOworICBTVEFzc2VydFRydWUoW3YgZ2V0OjFdLCBAIkV4cGVjdGVkIHZhbHVlIGF0IDEgdG8gYmUgMSIpOworICBTVEFzc2VydEZhbHNlKFt2IGdldDoyXSwgQCJFeHBlY3RlZCB2YWx1ZSBhdCAyIHRvIGJlIDAiKTsKKyAgU1RBc3NlcnRUcnVlKFt2IGdldDozXSwgQCJFeHBlY3RlZCB2YWx1ZSBhdCAzIHRvIGJlIDEiKTsKKworICBTVEFzc2VydFRydWUoW3YgZ2V0OjRdLCBAIkV4cGVjdGVkIHZhbHVlIGF0IDQgdG8gYmUgMSIpOworICBTVEFzc2VydFRydWUoW3YgZ2V0OjVdLCBAIkV4cGVjdGVkIHZhbHVlIGF0IDUgdG8gYmUgMSIpOworICBTVEFzc2VydFRydWUoW3YgZ2V0OjZdLCBAIkV4cGVjdGVkIHZhbHVlIGF0IDYgdG8gYmUgMSIpOworICBTVEFzc2VydEZhbHNlKFt2IGdldDo3XSwgQCJFeHBlY3RlZCB2YWx1ZSBhdCA3IHRvIGJlIDAiKTsKKworICBTVEFzc2VydFRydWUoW3YgZ2V0OjhdLCBAIkV4cGVjdGVkIHZhbHVlIGF0IDggdG8gYmUgMSIpOworICBTVEFzc2VydEZhbHNlKFt2IGdldDo5XSwgQCJFeHBlY3RlZCB2YWx1ZSBhdCA5IHRvIGJlIDAiKTsKKyAgU1RBc3NlcnRUcnVlKFt2IGdldDoxMF0sIEAiRXhwZWN0ZWQgdmFsdWUgYXQgMTAgdG8gYmUgMSIpOworICBTVEFzc2VydEZhbHNlKFt2IGdldDoxMV0sIEAiRXhwZWN0ZWQgdmFsdWUgYXQgMTEgdG8gYmUgMCIpOworCisgIFNUQXNzZXJ0VHJ1ZShbdiBnZXQ6MTJdLCBAIkV4cGVjdGVkIHZhbHVlIGF0IDEyIHRvIGJlIDEiKTsKKyAgU1RBc3NlcnRUcnVlKFt2IGdldDoxM10sIEAiRXhwZWN0ZWQgdmFsdWUgYXQgMTMgdG8gYmUgMSIpOworICBTVEFzc2VydEZhbHNlKFt2IGdldDoxNF0sIEAiRXhwZWN0ZWQgdmFsdWUgYXQgMTQgdG8gYmUgMCIpOworICBTVEFzc2VydFRydWUoW3YgZ2V0OjE1XSwgQCJFeHBlY3RlZCB2YWx1ZSBhdCAxNSB0byBiZSAxIik7Cit9CisKKy0gKHZvaWQpdGVzdFRvU3RyaW5nIHsKKyAgWlhCaXRBcnJheSAqdiA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFt2IGFwcGVuZEJpdHM6MHhkZWFkIG51bUJpdHM6MTZdOyAgLy8gMTEwMSAxMTEwIDEwMTAgMTEwMQorICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIiBYWC5YWFhYLiBYLlguWFguWCI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFt2IGRlc2NyaXB0aW9uXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgdiB0byBiZSAlQCIsIGV4cGVjdGVkKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2VuY29kZXIvWlhFbmNvZGVyVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYRW5jb2RlclRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0NmNiYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYRW5jb2RlclRlc3RDYXNlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCA8U2VuVGVzdGluZ0tpdC9TZW5UZXN0aW5nS2l0Lmg+CisKK0BpbnRlcmZhY2UgWlhFbmNvZGVyVGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvZW5jb2Rlci9aWEVuY29kZXJUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2VuY29kZXIvWlhFbmNvZGVyVGVzdENhc2UubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjkxNTE5Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2VuY29kZXIvWlhFbmNvZGVyVGVzdENhc2UubQpAQCAtMCwwICsxLDUzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhFbmNvZGVyVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFpYRW5jb2RlclRlc3RDYXNlCisKKy0gKHZvaWQpdGVzdEdldEFscGhhbnVtZXJpY0NvZGUgeworICAvLyBUaGUgZmlyc3QgdGVuIGNvZGUgcG9pbnRzIGFyZSBudW1iZXJzLgorICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICBTVEFzc2VydEVxdWFscyhbWlhFbmNvZGVyIGFscGhhbnVtZXJpY0NvZGU6JzAnICsgaV0sIGksIEAiRXhwZWN0ZWQgJWQiLCBpKTsKKyAgfQorCisgIC8vIFRoZSBuZXh0IDI2IGNvZGUgcG9pbnRzIGFyZSBjYXBpdGFsIGFscGhhYmV0IGxldHRlcnMuCisgIGZvciAoaW50IGkgPSAxMDsgaSA8IDM2OyArK2kpIHsKKyAgICBTVEFzc2VydEVxdWFscyhbWlhFbmNvZGVyIGFscGhhbnVtZXJpY0NvZGU6J0EnICsgaSAtIDEwXSwgaSwgQCJFeHBlY3RlZCAlZCIsIGkpOworICB9CisKKyAgLy8gT3RoZXJzIGFyZSBzeW1ib2wgbGV0dGVycworICBTVEFzc2VydEVxdWFscyhbWlhFbmNvZGVyIGFscGhhbnVtZXJpY0NvZGU6JyAnXSwgMzYsIEAiRXhwZWN0ZWQgJWQiLCAzNik7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWEVuY29kZXIgYWxwaGFudW1lcmljQ29kZTonJCddLCAzNywgQCJFeHBlY3RlZCAlZCIsIDM3KTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYRW5jb2RlciBhbHBoYW51bWVyaWNDb2RlOiclJ10sIDM4LCBAIkV4cGVjdGVkICVkIiwgMzgpOworICBTVEFzc2VydEVxdWFscyhbWlhFbmNvZGVyIGFscGhhbnVtZXJpY0NvZGU6JyonXSwgMzksIEAiRXhwZWN0ZWQgJWQiLCAzOSk7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWEVuY29kZXIgYWxwaGFudW1lcmljQ29kZTonKyddLCA0MCwgQCJFeHBlY3RlZCAlZCIsIDQwKTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYRW5jb2RlciBhbHBoYW51bWVyaWNDb2RlOictJ10sIDQxLCBAIkV4cGVjdGVkICVkIiwgNDEpOworICBTVEFzc2VydEVxdWFscyhbWlhFbmNvZGVyIGFscGhhbnVtZXJpY0NvZGU6Jy4nXSwgNDIsIEAiRXhwZWN0ZWQgJWQiLCA0Mik7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWEVuY29kZXIgYWxwaGFudW1lcmljQ29kZTonLyddLCA0MywgQCJFeHBlY3RlZCAlZCIsIDQzKTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYRW5jb2RlciBhbHBoYW51bWVyaWNDb2RlOic6J10sIDQ0LCBAIkV4cGVjdGVkICVkIiwgNDQpOworCisgIC8vIFNob3VsZCByZXR1cm4gLTEgZm9yIG90aGVyIGxldHRlcnM7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWEVuY29kZXIgYWxwaGFudW1lcmljQ29kZTonYSddLCAtMSwgQCJFeHBlY3RlZCAtMSIpOworICBTVEFzc2VydEVxdWFscyhbWlhFbmNvZGVyIGFscGhhbnVtZXJpY0NvZGU6JyMnXSwgLTEsIEAiRXhwZWN0ZWQgLTEiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYRW5jb2RlciBhbHBoYW51bWVyaWNDb2RlOidcMCddLCAtMSwgQCJFeHBlY3RlZCAtMSIpOworfQorCistICh2b2lkKXRlc3RDaG9vc2VNb2RlIHsKKyAgLy8gTnVtZXJpYyBtb2RlLgorICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbWlhFbmNvZGVyIGNob29zZU1vZGU6QCIwIl0sIFtaWE1vZGUgbnVtZXJpY01vZGVdLCBAIkV4cGVjdGVkIG51bWVyaWMgbW9kZSIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbWlhFbmNvZGVyIGNob29zZU1vZGU6QCIwMTIzNDU2Nzg5Il0sIFtaWE1vZGUgbnVtZXJpY01vZGVdLCBAIkV4cGVjdGVkIG51bWVyaWMgbW9kZSIpOworICAvLyBBbHBoYW51bWVyaWMgbW9kZS4KKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1pYRW5jb2RlciBjaG9vc2VNb2RlOkAiQSJdLCBbWlhNb2RlIGFscGhhbnVtZXJpY01vZGVdLCBAIkV4cGVjdGVkIGFscGhhbnVtZXJpYyBtb2RlIik7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtaWEVuY29kZXIgY2hvb3NlTW9kZTpAIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiAkJSorLS4vOiJdLAorICAgICAgICAgICAgICAgICAgICAgICBbWlhNb2RlIGFscGhhbnVtZXJpY01vZGVdLCBAIkV4cGVjdGVkIGFscGhhbnVtZXJpYyBtb2RlIik7CisgIC8vIDgtYml0IGJ5dGUgbW9kZS4KKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1pYRW5jb2RlciBjaG9vc2VNb2RlOkAiYSJdLCBbWlhNb2RlIGJ5dGVNb2RlXSwgQCJFeHBlY3RlZCBieXRlIG1vZGUiKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1pYRW5jb2RlciBjaG9vc2VNb2RlOkAiIyJdLCBbWlhNb2RlIGJ5dGVNb2RlXSwgQCJFeHBlY3RlZCBieXRlIG1vZGUiKTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1pYRW5jb2RlciBjaG9vc2VNb2RlOkAiIl0sIFtaWE1vZGUgYnl0ZU1vZGVdLCBAIkV4cGVjdGVkIGJ5dGUgbW9kZSIpOworICAvLyBLYW5qaSBtb2RlLiAgV2UgdXNlZCB0byB1c2UgTU9ERV9LQU5KSSBmb3IgdGhlc2UsIGJ1dCB3ZSBzdG9wcGVkCisgIC8vIGRvaW5nIHRoYXQgYXMgd2UgY2Fubm90IGRpc3Rpbmd1aXNoIFNoaWZ0X0pJUyBmcm9tIG90aGVyIGVuY29kaW5ncworICAvLyBmcm9tIGRhdGEgYnl0ZXMgYWxvbmUuICBTZWUgYWxzbyBjb21tZW50cyBpbiBxcmNvZGVfZW5jb2Rlci5oLgorCisgIC8vIEFJVUUgaW4gSGlyYWdhbmEgaW4gU2hpZnRfSklTCisgIGludDhfdCBoaXJhZ2FuYUJ5dGVzWzhdID0gezB4OCwgMHhhLCAweDgsIDB4YSwgMHg4LCAweGEsIDB4OCwgMHhhNn07CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtaWEVuY29kZXIgY2hvb3NlTW9kZTpbc2VsZiBzaGlmdEpJU1N0cmluZzpoaXJhZ2FuYUJ5dGVzIGJ5dGVzTGVuOjhdXSwgW1pYTW9kZSBieXRlTW9kZV0sCisgICAgICAgICAgICAgICAgICAgICAgIEAiRXhwZWN0ZWQgYnl0ZSBtb2RlIik7CisKKyAgLy8gTmlob24gaW4gS2FuamkgaW4gU2hpZnRfSklTLgorICBpbnQ4X3Qga2FuamlCeXRlc1s0XSA9IHsweDksIDB4ZiwgMHg5LCAweDdifTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1pYRW5jb2RlciBjaG9vc2VNb2RlOltzZWxmIHNoaWZ0SklTU3RyaW5nOmthbmppQnl0ZXMgYnl0ZXNMZW46NF1dLCBbWlhNb2RlIGJ5dGVNb2RlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgQCJFeHBlY3RlZCBieXRlIG1vZGUiKTsKKworICAvLyBTb3UtVXRzdS1CeW91IGluIEthbmppIGluIFNoaWZ0X0pJUy4KKyAgaW50OF90IGthbmppQnl0ZXMyWzZdID0gezB4ZSwgMHg0LCAweDksIDB4NSwgMHg5LCAweDYxfTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW1pYRW5jb2RlciBjaG9vc2VNb2RlOltzZWxmIHNoaWZ0SklTU3RyaW5nOmthbmppQnl0ZXMyIGJ5dGVzTGVuOjZdXSwgW1pYTW9kZSBieXRlTW9kZV0sCisgICAgICAgICAgICAgICAgICAgICAgIEAiRXhwZWN0ZWQgYnl0ZSBtb2RlIik7Cit9CisKKy0gKHZvaWQpdGVzdEVuY29kZSB7CisgIFpYUVJDb2RlICpxckNvZGUgPSBbWlhFbmNvZGVyIGVuY29kZTpAIkFCQ0RFRiIgZWNMZXZlbDpbWlhFcnJvckNvcnJlY3Rpb25MZXZlbCBlcnJvckNvcnJlY3Rpb25MZXZlbEhdIGVycm9yOm5pbF07CisgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYSB2YWxpZCBRUiBDb2RlIHRoYXQgY2FuIGJlIHJlYWQgYnkgY2VsbCBwaG9uZXMuCisgIE5TU3RyaW5nICpleHBlY3RlZCA9CisgICAgQCI8PFxuIgorICAgICIgbW9kZTogQUxQSEFOVU1FUklDXG4iCisgICAgIiBlY0xldmVsOiBIXG4iCisgICAgIiB2ZXJzaW9uOiAxXG4iCisgICAgIiBtYXNrUGF0dGVybjogMFxuIgorICAgICIgbWF0cml4OlxuIgorICAgICIgMSAxIDEgMSAxIDEgMSAwIDEgMSAxIDEgMCAwIDEgMSAxIDEgMSAxIDFcbiIKKyAgICAiIDEgMCAwIDAgMCAwIDEgMCAwIDEgMSAxIDAgMCAxIDAgMCAwIDAgMCAxXG4iCisgICAgIiAxIDAgMSAxIDEgMCAxIDAgMCAxIDAgMSAxIDAgMSAwIDEgMSAxIDAgMVxuIgorICAgICIgMSAwIDEgMSAxIDAgMSAwIDEgMSAxIDAgMSAwIDEgMCAxIDEgMSAwIDFcbiIKKyAgICAiIDEgMCAxIDEgMSAwIDEgMCAwIDEgMSAxIDAgMCAxIDAgMSAxIDEgMCAxXG4iCisgICAgIiAxIDAgMCAwIDAgMCAxIDAgMCAxIDAgMCAwIDAgMSAwIDAgMCAwIDAgMVxuIgorICAgICIgMSAxIDEgMSAxIDEgMSAwIDEgMCAxIDAgMSAwIDEgMSAxIDEgMSAxIDFcbiIKKyAgICAiIDAgMCAwIDAgMCAwIDAgMCAwIDAgMSAwIDEgMCAwIDAgMCAwIDAgMCAwXG4iCisgICAgIiAwIDAgMSAwIDEgMSAxIDAgMSAxIDAgMCAxIDEgMCAwIDAgMSAwIDAgMVxuIgorICAgICIgMSAwIDEgMSAxIDAgMCAxIDAgMCAwIDEgMCAxIDAgMCAwIDAgMCAwIDBcbiIKKyAgICAiIDAgMCAxIDEgMCAwIDEgMCAxIDAgMCAwIDEgMCAxIDAgMSAwIDEgMSAwXG4iCisgICAgIiAxIDEgMCAxIDAgMSAwIDEgMSAxIDAgMSAwIDEgMCAwIDAgMCAwIDEgMFxuIgorICAgICIgMCAwIDEgMSAwIDEgMSAxIDEgMCAwIDAgMSAwIDEgMCAxIDEgMSAxIDBcbiIKKyAgICAiIDAgMCAwIDAgMCAwIDAgMCAxIDAgMCAxIDEgMSAwIDEgMCAxIDAgMCAwXG4iCisgICAgIiAxIDEgMSAxIDEgMSAxIDAgMCAwIDEgMCAxIDAgMSAxIDAgMCAwIDAgMVxuIgorICAgICIgMSAwIDAgMCAwIDAgMSAwIDEgMSAxIDEgMCAxIDAgMSAxIDEgMSAwIDFcbiIKKyAgICAiIDEgMCAxIDEgMSAwIDEgMCAxIDAgMSAxIDAgMSAwIDEgMCAwIDAgMCAxXG4iCisgICAgIiAxIDAgMSAxIDEgMCAxIDAgMCAxIDEgMCAxIDEgMSAxIDAgMSAwIDEgMFxuIgorICAgICIgMSAwIDEgMSAxIDAgMSAwIDEgMCAwIDAgMSAwIDEgMCAxIDEgMSAwIDFcbiIKKyAgICAiIDEgMCAwIDAgMCAwIDEgMCAwIDEgMSAwIDEgMSAwIDEgMCAwIDAgMSAxXG4iCisgICAgIiAxIDEgMSAxIDEgMSAxIDAgMCAwIDAgMCAwIDAgMCAwIDEgMCAxIDAgMVxuIgorICAgICI+PlxuIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW3FyQ29kZSBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIHFyIGNvZGUgdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7Cit9CisKKy0gKHZvaWQpdGVzdFNpbXBsZVVURjhFQ0kgeworICBaWEVuY29kZUhpbnRzICpoaW50cyA9IFtaWEVuY29kZUhpbnRzIGhpbnRzXTsKKyAgaGludHMuZW5jb2RpbmcgPSBOU1VURjhTdHJpbmdFbmNvZGluZzsKKyAgWlhRUkNvZGUgKnFyQ29kZSA9IFtaWEVuY29kZXIgZW5jb2RlOkAiaGVsbG8iIGVjTGV2ZWw6W1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZXJyb3JDb3JyZWN0aW9uTGV2ZWxIXSBoaW50czpoaW50cyBlcnJvcjpuaWxdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPQorICAgIEAiPDxcbiIKKyAgICAiIG1vZGU6IEJZVEVcbiIKKyAgICAiIGVjTGV2ZWw6IEhcbiIKKyAgICAiIHZlcnNpb246IDFcbiIKKyAgICAiIG1hc2tQYXR0ZXJuOiAzXG4iCisgICAgIiBtYXRyaXg6XG4iCisgICAgIiAxIDEgMSAxIDEgMSAxIDAgMCAwIDAgMCAwIDAgMSAxIDEgMSAxIDEgMVxuIgorICAgICIgMSAwIDAgMCAwIDAgMSAwIDAgMCAxIDAgMSAwIDEgMCAwIDAgMCAwIDFcbiIKKyAgICAiIDEgMCAxIDEgMSAwIDEgMCAwIDEgMCAxIDAgMCAxIDAgMSAxIDEgMCAxXG4iCisgICAgIiAxIDAgMSAxIDEgMCAxIDAgMCAxIDEgMCAxIDAgMSAwIDEgMSAxIDAgMVxuIgorICAgICIgMSAwIDEgMSAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDEgMSAwIDFcbiIKKyAgICAiIDEgMCAwIDAgMCAwIDEgMCAwIDAgMCAwIDEgMCAxIDAgMCAwIDAgMCAxXG4iCisgICAgIiAxIDEgMSAxIDEgMSAxIDAgMSAwIDEgMCAxIDAgMSAxIDEgMSAxIDEgMVxuIgorICAgICIgMCAwIDAgMCAwIDAgMCAwIDEgMSAxIDAgMCAwIDAgMCAwIDAgMCAwIDBcbiIKKyAgICAiIDAgMCAxIDEgMCAwIDEgMSAxIDEgMCAwIDAgMSAxIDAgMSAwIDAgMCAwXG4iCisgICAgIiAwIDAgMSAxIDEgMCAwIDAgMCAwIDEgMSAwIDAgMCAxIDAgMSAxIDEgMFxuIgorICAgICIgMCAxIDAgMSAwIDEgMSAxIDAgMSAwIDEgMCAwIDAgMCAwIDEgMSAxIDFcbiIKKyAgICAiIDEgMSAwIDAgMSAwIDAgMSAxIDAgMCAxIDEgMSAxIDAgMSAwIDEgMSAwXG4iCisgICAgIiAwIDAgMCAwIDEgMCAxIDEgMSAxIDAgMCAwIDAgMCAxIDAgMCAxIDAgMFxuIgorICAgICIgMCAwIDAgMCAwIDAgMCAwIDEgMSAxIDEgMCAwIDEgMSAxIDAgMCAwIDFcbiIKKyAgICAiIDEgMSAxIDEgMSAxIDEgMCAxIDEgMSAwIDEgMCAxIDEgMCAwIDEgMCAwXG4iCisgICAgIiAxIDAgMCAwIDAgMCAxIDAgMCAwIDEgMCAwIDEgMSAxIDEgMSAxIDAgMVxuIgorICAgICIgMSAwIDEgMSAxIDAgMSAwIDAgMSAwIDAgMCAwIDEgMSAwIDAgMCAwIDBcbiIKKyAgICAiIDEgMCAxIDEgMSAwIDEgMCAxIDEgMSAwIDEgMCAwIDAgMSAxIDAgMCAwXG4iCisgICAgIiAxIDAgMSAxIDEgMCAxIDAgMSAxIDAgMCAwIDEgMCAwIDEgMCAwIDAgMFxuIgorICAgICIgMSAwIDAgMCAwIDAgMSAwIDAgMCAwIDEgMSAwIDEgMCAxIDAgMSAxIDBcbiIKKyAgICAiIDEgMSAxIDEgMSAxIDEgMCAwIDEgMCAxIDEgMSAwIDEgMSAwIDAgMCAwXG4iCisgICAgIj4+XG4iOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbcXJDb2RlIGRlc2NyaXB0aW9uXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgcXIgY29kZSB0byBlcXVhbCAlQCIsIGV4cGVjdGVkKTsKK30KKworLSAodm9pZCl0ZXN0QXBwZW5kTW9kZUluZm8geworICBaWEJpdEFycmF5ICpiaXRzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgW1pYRW5jb2RlciBhcHBlbmRNb2RlSW5mbzpbWlhNb2RlIG51bWVyaWNNb2RlXSBiaXRzOmJpdHNdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIiAuLi5YIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW2JpdHMgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBiaXRzIHRvIGVxdWFsICVAIiwgZXhwZWN0ZWQpOworfQorCistICh2b2lkKXRlc3RBcHBlbmRMZW5ndGhJbmZvIHsKKyAgWlhCaXRBcnJheSAqYml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWEVuY29kZXIgYXBwZW5kTGVuZ3RoSW5mbzoxICAvLyAxIGxldHRlciAoMS8xKS4KKyAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOltaWFFSQ29kZVZlcnNpb24gdmVyc2lvbkZvck51bWJlcjoxXQorICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6W1pYTW9kZSBudW1lcmljTW9kZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzOmJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOm5pbF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uLi4uLi4uIC5YIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW2JpdHMgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBiaXRzIHRvIGVxdWFsICVAIiwgZXhwZWN0ZWQpOyAgLy8gMTAgYml0cy4KKyAgYml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWEVuY29kZXIgYXBwZW5kTGVuZ3RoSW5mbzoyICAvLyAyIGxldHRlciAoMi8xKS4KKyAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOltaWFFSQ29kZVZlcnNpb24gdmVyc2lvbkZvck51bWJlcjoxMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOltaWE1vZGUgYWxwaGFudW1lcmljTW9kZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzOmJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOm5pbF07CisgIGV4cGVjdGVkID0gQCIgLi4uLi4uLi4gLlguIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW2JpdHMgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBiaXRzIHRvIGVxdWFsICVAIiwgZXhwZWN0ZWQpOyAgLy8gMTEgYml0cy4KKyAgYml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWEVuY29kZXIgYXBwZW5kTGVuZ3RoSW5mbzoyNTUgIC8vIDI1NSBsZXR0ZXIgKDI1NS8xKS4KKyAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOltaWFFSQ29kZVZlcnNpb24gdmVyc2lvbkZvck51bWJlcjoyN10KKyAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOltaWE1vZGUgYnl0ZU1vZGVdCisgICAgICAgICAgICAgICAgICAgICAgICAgYml0czpiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjpuaWxdOworICBleHBlY3RlZCA9IEAiIC4uLi4uLi4uIFhYWFhYWFhYIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW2JpdHMgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBiaXRzIHRvIGVxdWFsICVAIiwgZXhwZWN0ZWQpOyAgLy8gMTYgYml0cy4KKyAgYml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWEVuY29kZXIgYXBwZW5kTGVuZ3RoSW5mbzo1MTIgIC8vIDUxMiBsZXR0ZXIgKDEwMjQvMikuCisgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjpbWlhRUkNvZGVWZXJzaW9uIHZlcnNpb25Gb3JOdW1iZXI6NDBdCisgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTpbWlhNb2RlIGthbmppTW9kZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzOmJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOm5pbF07CisgIGV4cGVjdGVkID0gQCIgLi5YLi4uLi4gLi4uLiI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtiaXRzIGRlc2NyaXB0aW9uXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgYml0cyB0byBlcXVhbCAlQCIsIGV4cGVjdGVkKTsgIC8vIDEyIGJpdHMuCit9CisKKy0gKHZvaWQpdGVzdEFwcGVuZEJ5dGVzIHsKKyAgLy8gU2hvdWxkIHVzZSBhcHBlbmROdW1lcmljQnl0ZXMuCisgIC8vIDEgPSAwMSA9IDAwMDEgaW4gNCBiaXRzLgorICBaWEJpdEFycmF5ICpiaXRzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgW1pYRW5jb2RlciBhcHBlbmRCeXRlczpAIjEiIG1vZGU6W1pYTW9kZSBudW1lcmljTW9kZV0gYml0czpiaXRzIGVuY29kaW5nOkRFRkFVTFRfQllURV9NT0RFX0VOQ09ESU5HIGVycm9yOm5pbF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uLlgiOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYml0cyBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIGJpdHMgdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7CisgIC8vIFNob3VsZCB1c2UgYXBwZW5kQWxwaGFudW1lcmljQnl0ZXMuCisgIC8vIEEgPSAxMCA9IDB4YSA9IDAwMTAxMCBpbiA2IGJpdHMKKyAgYml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWEVuY29kZXIgYXBwZW5kQnl0ZXM6QCJBIiBtb2RlOltaWE1vZGUgYWxwaGFudW1lcmljTW9kZV0gYml0czpiaXRzIGVuY29kaW5nOkRFRkFVTFRfQllURV9NT0RFX0VOQ09ESU5HIGVycm9yOm5pbF07CisgIGV4cGVjdGVkID0gQCIgLi5YLlguIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW2JpdHMgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBiaXRzIHRvIGVxdWFsICVAIiwgZXhwZWN0ZWQpOworICAvLyBMb3dlciBsZXR0ZXJzIHN1Y2ggYXMgJ2EnIGNhbm5vdCBiZSBlbmNvZGVkIGluIE1PREVfQUxQSEFOVU1FUklDLgorICBOU0Vycm9yICplcnJvcjsKKyAgaWYgKFtaWEVuY29kZXIgYXBwZW5kQnl0ZXM6QCJhIiBtb2RlOltaWE1vZGUgYWxwaGFudW1lcmljTW9kZV0gYml0czpiaXRzIGVuY29kaW5nOkRFRkFVTFRfQllURV9NT0RFX0VOQ09ESU5HIGVycm9yOiZlcnJvcl0gfHwKKyAgICAgIGVycm9yLmNvZGUgIT0gWlhXcml0ZXJFcnJvcikgeworICAgIFNURmFpbChAIkV4cGVjdGVkIFpYV3JpdGVyRXJyb3IiKTsKKyAgfQorICAvLyBTaG91bGQgdXNlIGFwcGVuZDhCaXRCeXRlcy4KKyAgLy8gMHg2MSwgMHg2MiwgMHg2MworICBiaXRzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgW1pYRW5jb2RlciBhcHBlbmRCeXRlczpAImFiYyIgbW9kZTpbWlhNb2RlIGJ5dGVNb2RlXSBiaXRzOmJpdHMgZW5jb2Rpbmc6REVGQVVMVF9CWVRFX01PREVfRU5DT0RJTkcgZXJyb3I6bmlsXTsKKyAgZXhwZWN0ZWQgPSBAIiAuWFguLi4uWCAuWFguLi5YLiAuWFguLi5YWCI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtiaXRzIGRlc2NyaXB0aW9uXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgYml0cyB0byBlcXVhbCAlQCIsIGV4cGVjdGVkKTsKKyAgLy8gQW55dGhpbmcgY2FuIGJlIGVuY29kZWQgaW4gUVJDb2RlLk1PREVfOEJJVF9CWVRFLgorICBbWlhFbmNvZGVyIGFwcGVuZEJ5dGVzOkAiXDAiIG1vZGU6W1pYTW9kZSBieXRlTW9kZV0gYml0czpiaXRzIGVuY29kaW5nOkRFRkFVTFRfQllURV9NT0RFX0VOQ09ESU5HIGVycm9yOm5pbF07CisgIC8vIFNob3VsZCB1c2UgYXBwZW5kS2FuamlCeXRlcy4KKyAgLy8gMHg5MywgMHg1ZgorICBiaXRzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgaW50OF90IGJ5dGVzWzJdID0gezB4OTMsIDB4NWZ9OworICBbWlhFbmNvZGVyIGFwcGVuZEJ5dGVzOltzZWxmIHNoaWZ0SklTU3RyaW5nOmJ5dGVzIGJ5dGVzTGVuOjJdIG1vZGU6W1pYTW9kZSBrYW5qaU1vZGVdIGJpdHM6Yml0cyBlbmNvZGluZzpERUZBVUxUX0JZVEVfTU9ERV9FTkNPRElORyBlcnJvcjpuaWxdOworICBleHBlY3RlZCA9IEAiIC5YWC5YWC4uIFhYWFhYIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW2JpdHMgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBiaXRzIHRvIGVxdWFsICVAIiwgZXhwZWN0ZWQpOworfQorCistICh2b2lkKXRlc3RUZXJtaW5hdGVCaXRzIHsKKyAgWlhCaXRBcnJheSAqdiA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWEVuY29kZXIgdGVybWluYXRlQml0czowIGJpdHM6diBlcnJvcjpuaWxdOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbdiBkZXNjcmlwdGlvbl0sIEAiIiwgQCJFeHBlY3RlZCB2IHRvIGVxdWFsIFwiXCIiKTsKKyAgdiA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWEVuY29kZXIgdGVybWluYXRlQml0czoxIGJpdHM6diBlcnJvcjpuaWxdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPSBAIiAuLi4uLi4uLiI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFt2IGRlc2NyaXB0aW9uXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgdiB0byBlcXVhbCAlQCIpOworICB2ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgW3YgYXBwZW5kQml0czowIG51bUJpdHM6M107ICAvLyBBcHBlbmQgMDAwCisgIFtaWEVuY29kZXIgdGVybWluYXRlQml0czoxIGJpdHM6diBlcnJvcjpuaWxdOworICBleHBlY3RlZCA9IEAiIC4uLi4uLi4uIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW3YgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCB2IHRvIGVxdWFsICVAIik7CisgIHYgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbdiBhcHBlbmRCaXRzOjAgbnVtQml0czo1XTsgIC8vIEFwcGVuZCAwMDAwMAorICBbWlhFbmNvZGVyIHRlcm1pbmF0ZUJpdHM6MSBiaXRzOnYgZXJyb3I6bmlsXTsKKyAgZXhwZWN0ZWQgPSBAIiAuLi4uLi4uLiI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFt2IGRlc2NyaXB0aW9uXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgdiB0byBlcXVhbCAlQCIpOworICB2ID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgW3YgYXBwZW5kQml0czowIG51bUJpdHM6OF07ICAvLyBBcHBlbmQgMDAwMDAwMDAKKyAgW1pYRW5jb2RlciB0ZXJtaW5hdGVCaXRzOjEgYml0czp2IGVycm9yOm5pbF07CisgIGV4cGVjdGVkID0gQCIgLi4uLi4uLi4iOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbdiBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIHYgdG8gZXF1YWwgJUAiKTsKKyAgdiA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWEVuY29kZXIgdGVybWluYXRlQml0czoyIGJpdHM6diBlcnJvcjpuaWxdOworICBleHBlY3RlZCA9IEAiIC4uLi4uLi4uIFhYWC5YWC4uIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW3YgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCB2IHRvIGVxdWFsICVAIik7CisgIHYgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbdiBhcHBlbmRCaXRzOjAgbnVtQml0czoxXTsgIC8vIEFwcGVuZCAwCisgIFtaWEVuY29kZXIgdGVybWluYXRlQml0czozIGJpdHM6diBlcnJvcjpuaWxdOworICBleHBlY3RlZCA9IEAiIC4uLi4uLi4uIFhYWC5YWC4uIC4uLlguLi5YIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW3YgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCB2IHRvIGVxdWFsICVAIik7Cit9CisKKy0gKHZvaWQpdGVzdEdldE51bURhdGFCeXRlc0FuZE51bUVDQnl0ZXNGb3JCbG9ja0lEIHsKKyAgaW50IG51bURhdGFCeXRlc1sxXSA9IHswfTsKKyAgaW50IG51bUVjQnl0ZXNbMV0gPSB7MH07CisgIC8vIFZlcnNpb24gMS1ILgorICBbWlhFbmNvZGVyIG51bURhdGFCeXRlc0FuZE51bUVDQnl0ZXNGb3JCbG9ja0lEOjI2IG51bURhdGFCeXRlczo5IG51bVJTQmxvY2tzOjEgYmxvY2tJRDowCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bURhdGFCeXRlc0luQmxvY2s6bnVtRGF0YUJ5dGVzIG51bUVDQnl0ZXNJbkJsb2NrOm51bUVjQnl0ZXMgZXJyb3I6bmlsXTsKKyAgU1RBc3NlcnRFcXVhbHMobnVtRGF0YUJ5dGVzWzBdLCA5LCBAIkV4cGVjdGVkIG51bURhdGFCeXRlc1swXSB0byBlcXVhbCAlZCIsIDkpOworICBTVEFzc2VydEVxdWFscyhudW1FY0J5dGVzWzBdLCAxNywgQCJFeHBlY3RlZCBudW1FY0J5dGVzWzBdIHRvIGVxdWFsICVkIiwgMTcpOworCisgIC8vIFZlcnNpb24gMy1ILiAgMiBibG9ja3MuCisgIFtaWEVuY29kZXIgbnVtRGF0YUJ5dGVzQW5kTnVtRUNCeXRlc0ZvckJsb2NrSUQ6NzAgbnVtRGF0YUJ5dGVzOjI2IG51bVJTQmxvY2tzOjIgYmxvY2tJRDowCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bURhdGFCeXRlc0luQmxvY2s6bnVtRGF0YUJ5dGVzIG51bUVDQnl0ZXNJbkJsb2NrOm51bUVjQnl0ZXMgZXJyb3I6bmlsXTsKKyAgU1RBc3NlcnRFcXVhbHMobnVtRGF0YUJ5dGVzWzBdLCAxMywgQCJFeHBlY3RlZCBudW1EYXRhQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAxMyk7CisgIFNUQXNzZXJ0RXF1YWxzKG51bUVjQnl0ZXNbMF0sIDIyLCBAIkV4cGVjdGVkIG51bUVjQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAyMik7CisgIFtaWEVuY29kZXIgbnVtRGF0YUJ5dGVzQW5kTnVtRUNCeXRlc0ZvckJsb2NrSUQ6NzAgbnVtRGF0YUJ5dGVzOjI2IG51bVJTQmxvY2tzOjIgYmxvY2tJRDoxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bURhdGFCeXRlc0luQmxvY2s6bnVtRGF0YUJ5dGVzIG51bUVDQnl0ZXNJbkJsb2NrOm51bUVjQnl0ZXMgZXJyb3I6bmlsXTsKKyAgU1RBc3NlcnRFcXVhbHMobnVtRGF0YUJ5dGVzWzBdLCAxMywgQCJFeHBlY3RlZCBudW1EYXRhQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAxMyk7CisgIFNUQXNzZXJ0RXF1YWxzKG51bUVjQnl0ZXNbMF0sIDIyLCBAIkV4cGVjdGVkIG51bUVjQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAyMik7CisKKyAgLy8gVmVyc2lvbiA3LUguICg0ICsgMSkgYmxvY2tzLgorICBbWlhFbmNvZGVyIG51bURhdGFCeXRlc0FuZE51bUVDQnl0ZXNGb3JCbG9ja0lEOjE5NiBudW1EYXRhQnl0ZXM6NjYgbnVtUlNCbG9ja3M6NSBibG9ja0lEOjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtRGF0YUJ5dGVzSW5CbG9jazpudW1EYXRhQnl0ZXMgbnVtRUNCeXRlc0luQmxvY2s6bnVtRWNCeXRlcyBlcnJvcjpuaWxdOworICBTVEFzc2VydEVxdWFscyhudW1EYXRhQnl0ZXNbMF0sIDEzLCBAIkV4cGVjdGVkIG51bURhdGFCeXRlc1swXSB0byBlcXVhbCAlZCIsIDEzKTsKKyAgU1RBc3NlcnRFcXVhbHMobnVtRWNCeXRlc1swXSwgMjYsIEAiRXhwZWN0ZWQgbnVtRWNCeXRlc1swXSB0byBlcXVhbCAlZCIsIDI2KTsKKyAgW1pYRW5jb2RlciBudW1EYXRhQnl0ZXNBbmROdW1FQ0J5dGVzRm9yQmxvY2tJRDoxOTYgbnVtRGF0YUJ5dGVzOjY2IG51bVJTQmxvY2tzOjUgYmxvY2tJRDo0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bURhdGFCeXRlc0luQmxvY2s6bnVtRGF0YUJ5dGVzIG51bUVDQnl0ZXNJbkJsb2NrOm51bUVjQnl0ZXMgZXJyb3I6bmlsXTsKKyAgU1RBc3NlcnRFcXVhbHMobnVtRGF0YUJ5dGVzWzBdLCAxNCwgQCJFeHBlY3RlZCBudW1EYXRhQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAxNCk7CisgIFNUQXNzZXJ0RXF1YWxzKG51bUVjQnl0ZXNbMF0sIDI2LCBAIkV4cGVjdGVkIG51bUVjQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAyMik7CisKKyAgLy8gVmVyc2lvbiA0MC1ILiAoMjAgKyA2MSkgYmxvY2tzLgorICBbWlhFbmNvZGVyIG51bURhdGFCeXRlc0FuZE51bUVDQnl0ZXNGb3JCbG9ja0lEOjM3MDYgbnVtRGF0YUJ5dGVzOjEyNzYgbnVtUlNCbG9ja3M6ODEgYmxvY2tJRDowCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bURhdGFCeXRlc0luQmxvY2s6bnVtRGF0YUJ5dGVzIG51bUVDQnl0ZXNJbkJsb2NrOm51bUVjQnl0ZXMgZXJyb3I6bmlsXTsKKyAgU1RBc3NlcnRFcXVhbHMobnVtRGF0YUJ5dGVzWzBdLCAxNSwgQCJFeHBlY3RlZCBudW1EYXRhQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAxNSk7CisgIFNUQXNzZXJ0RXF1YWxzKG51bUVjQnl0ZXNbMF0sIDMwLCBAIkV4cGVjdGVkIG51bUVjQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAzMCk7CisgIFtaWEVuY29kZXIgbnVtRGF0YUJ5dGVzQW5kTnVtRUNCeXRlc0ZvckJsb2NrSUQ6MzcwNiBudW1EYXRhQnl0ZXM6MTI3NiBudW1SU0Jsb2Nrczo4MSBibG9ja0lEOjIwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bURhdGFCeXRlc0luQmxvY2s6bnVtRGF0YUJ5dGVzIG51bUVDQnl0ZXNJbkJsb2NrOm51bUVjQnl0ZXMgZXJyb3I6bmlsXTsKKyAgU1RBc3NlcnRFcXVhbHMobnVtRGF0YUJ5dGVzWzBdLCAxNiwgQCJFeHBlY3RlZCBudW1EYXRhQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAxNik7CisgIFNUQXNzZXJ0RXF1YWxzKG51bUVjQnl0ZXNbMF0sIDMwLCBAIkV4cGVjdGVkIG51bUVjQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAzMCk7CisgIFtaWEVuY29kZXIgbnVtRGF0YUJ5dGVzQW5kTnVtRUNCeXRlc0ZvckJsb2NrSUQ6MzcwNiBudW1EYXRhQnl0ZXM6MTI3NiBudW1SU0Jsb2Nrczo4MSBibG9ja0lEOjgwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bURhdGFCeXRlc0luQmxvY2s6bnVtRGF0YUJ5dGVzIG51bUVDQnl0ZXNJbkJsb2NrOm51bUVjQnl0ZXMgZXJyb3I6bmlsXTsKKyAgU1RBc3NlcnRFcXVhbHMobnVtRGF0YUJ5dGVzWzBdLCAxNiwgQCJFeHBlY3RlZCBudW1EYXRhQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAxNik7CisgIFNUQXNzZXJ0RXF1YWxzKG51bUVjQnl0ZXNbMF0sIDMwLCBAIkV4cGVjdGVkIG51bUVjQnl0ZXNbMF0gdG8gZXF1YWwgJWQiLCAzMCk7Cit9CisKKy0gKHZvaWQpdGVzdEludGVybGVhdmVXaXRoRUNCeXRlcyB7CisgIGNvbnN0IGludCBkYXRhQnl0ZXNMZW4gPSA5OworICBpbnQ4X3QgZGF0YUJ5dGVzW2RhdGFCeXRlc0xlbl0gPSB7MzIsIDY1LCAyMDUsIDY5LCA0MSwgMjIwLCA0NiwgMTI4LCAyMzZ9OworICBaWEJpdEFycmF5ICppbiA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgZGF0YUJ5dGVzTGVuOyBpKyspIHsKKyAgICBbaW4gYXBwZW5kQml0czpkYXRhQnl0ZXNbaV0gbnVtQml0czo4XTsKKyAgfQorICBaWEJpdEFycmF5ICpvdXQgPSBbWlhFbmNvZGVyIGludGVybGVhdmVXaXRoRUNCeXRlczppbiBudW1Ub3RhbEJ5dGVzOjI2IG51bURhdGFCeXRlczo5IG51bVJTQmxvY2tzOjEgZXJyb3I6bmlsXTsKKyAgY29uc3QgaW50IGV4cGVjdGVkTGVuID0gMjY7CisgIGludDhfdCBleHBlY3RlZFtleHBlY3RlZExlbl0gPSB7CisgICAgLy8gRGF0YSBieXRlcy4KKyAgICAzMiwgNjUsIDIwNSwgNjksIDQxLCAyMjAsIDQ2LCAxMjgsIDIzNiwKKyAgICAvLyBFcnJvciBjb3JyZWN0aW9uIGJ5dGVzLgorICAgIDQyLCAxNTksIDc0LCAyMjEsIDI0NCwgMTY5LCAyMzksIDE1MCwgMTM4LCA3MCwKKyAgICAyMzcsIDg1LCAyMjQsIDk2LCA3NCwgMjE5LCA2MSwKKyAgfTsKKyAgU1RBc3NlcnRFcXVhbHMob3V0LnNpemVJbkJ5dGVzLCBleHBlY3RlZExlbiwgQCJFeHBlY3RlZCBvdXQgc2l6ZUluQnl0ZXMgdG8gZXF1YWwgJWQiLCBleHBlY3RlZExlbik7CisgIGludDhfdCBvdXRBcnJheVtleHBlY3RlZExlbl07CisgIG1lbXNldChvdXRBcnJheSwgMCwgZXhwZWN0ZWRMZW4gKiBzaXplb2YoaW50OF90KSk7CisgIFtvdXQgdG9CeXRlczowIGFycmF5Om91dEFycmF5IG9mZnNldDowIG51bUJ5dGVzOmV4cGVjdGVkTGVuXTsKKyAgZm9yIChpbnQgeCA9IDA7IHggPCBleHBlY3RlZExlbjsgeCsrKSB7CisgICAgU1RBc3NlcnRFcXVhbHMob3V0QXJyYXlbeF0sIGV4cGVjdGVkW3hdLCBAIkV4cGVjdGVkIG91dEFycmF5WyVkXSB0byBlcXVhbCAlZCIsIHgsIGV4cGVjdGVkW3hdKTsKKyAgfQorICBjb25zdCBpbnQgZGF0YUJ5dGVzTGVuMiA9IDYyOworICBpbnQ4X3QgZGF0YUJ5dGVzMltkYXRhQnl0ZXNMZW4yXSA9IHsKKyAgICA2NywgNzAsIDIyLCAzOCwgNTQsIDcwLCA4NiwgMTAyLCAxMTgsIDEzNCwgMTUwLCAxNjYsIDE4MiwKKyAgICAxOTgsIDIxNCwgMjMwLCAyNDcsIDcsIDIzLCAzOSwgNTUsIDcxLCA4NywgMTAzLCAxMTksIDEzNSwKKyAgICAxNTEsIDE2NiwgMjIsIDM4LCA1NCwgNzAsIDg2LCAxMDIsIDExOCwgMTM0LCAxNTAsIDE2NiwKKyAgICAxODIsIDE5OCwgMjE0LCAyMzAsIDI0NywgNywgMjMsIDM5LCA1NSwgNzEsIDg3LCAxMDMsIDExOSwKKyAgICAxMzUsIDE1MSwgMTYwLCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCisgICAgMTcKKyAgfTsKKyAgaW4gPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGFCeXRlc0xlbjI7IGkrKykgeworICAgIFtpbiBhcHBlbmRCaXRzOmRhdGFCeXRlczJbaV0gbnVtQml0czo4XTsKKyAgfQorICBvdXQgPSBbWlhFbmNvZGVyIGludGVybGVhdmVXaXRoRUNCeXRlczppbiBudW1Ub3RhbEJ5dGVzOjEzNCBudW1EYXRhQnl0ZXM6NjIgbnVtUlNCbG9ja3M6NCBlcnJvcjpuaWxdOworICBjb25zdCBpbnQgZXhwZWN0ZWRMZW4yID0gMTM0OworICBpbnQ4X3QgZXhwZWN0ZWQyW2V4cGVjdGVkTGVuMl0gPSB7CisgICAgLy8gRGF0YSBieXRlcy4KKyAgICA2NywgMjMwLCA1NCwgNTUsIDcwLCAyNDcsIDcwLCA3MSwgMjIsIDcsIDg2LCA4NywgMzgsIDIzLCAxMDIsIDEwMywgNTQsIDM5LAorICAgIDExOCwgMTE5LCA3MCwgNTUsIDEzNCwgMTM1LCA4NiwgNzEsIDE1MCwgMTUxLCAxMDIsIDg3LCAxNjYsCisgICAgMTYwLCAxMTgsIDEwMywgMTgyLCAyMzYsIDEzNCwgMTE5LCAxOTgsIDE3LCAxNTAsCisgICAgMTM1LCAyMTQsIDIzNiwgMTY2LCAxNTEsIDIzMCwgMTcsIDE4MiwKKyAgICAxNjYsIDI0NywgMjM2LCAxOTgsIDIyLCA3LCAxNywgMjE0LCAzOCwgMjMsIDIzNiwgMzksCisgICAgMTcsCisgICAgLy8gRXJyb3IgY29ycmVjdGlvbiBieXRlcy4KKyAgICAxNzUsIDE1NSwgMjQ1LCAyMzYsIDgwLCAxNDYsIDU2LCA3NCwgMTU1LCAxNjUsCisgICAgMTMzLCAxNDIsIDY0LCAxODMsIDEzMiwgMTMsIDE3OCwgNTQsIDEzMiwgMTA4LCA0NSwKKyAgICAxMTMsIDUzLCA1MCwgMjE0LCA5OCwgMTkzLCAxNTIsIDIzMywgMTQ3LCA1MCwgNzEsIDY1LAorICAgIDE5MCwgODIsIDUxLCAyMDksIDE5OSwgMTcxLCA1NCwgMTIsIDExMiwgNTcsIDExMywgMTU1LCAxMTcsCisgICAgMjExLCAxNjQsIDExNywgMzAsIDE1OCwgMjI1LCAzMSwgMTkwLCAyNDIsIDM4LAorICAgIDE0MCwgNjEsIDE3OSwgMTU0LCAyMTQsIDEzOCwgMTQ3LCA4NywgMjcsIDk2LCA3NywgNDcsCisgICAgMTg3LCA0OSwgMTU2LCAyMTQsCisgIH07CisgIFNUQXNzZXJ0RXF1YWxzKG91dC5zaXplSW5CeXRlcywgZXhwZWN0ZWRMZW4yLCBAIkV4cGVjdGVkIG91dCBzaXplSW5CeXRlcyB0byBlcXVhbCAlZCIsIGV4cGVjdGVkTGVuMik7CisgIGludDhfdCBvdXRBcnJheTJbZXhwZWN0ZWRMZW4yXTsKKyAgbWVtc2V0KG91dEFycmF5MiwgMCwgZXhwZWN0ZWRMZW4yICogc2l6ZW9mKGludDhfdCkpOworICBbb3V0IHRvQnl0ZXM6MCBhcnJheTpvdXRBcnJheTIgb2Zmc2V0OjAgbnVtQnl0ZXM6ZXhwZWN0ZWRMZW4yXTsKKyAgZm9yIChpbnQgeCA9IDA7IHggPCBleHBlY3RlZExlbjI7IHgrKykgeworICAgIFNUQXNzZXJ0RXF1YWxzKG91dEFycmF5Mlt4XSwgZXhwZWN0ZWQyW3hdLCBAIkV4cGVjdGVkIG91dEFycmF5WyVkXSB0byBlcXVhbCAlZCIsIHgsIGV4cGVjdGVkMlt4XSk7CisgIH0KK30KKworLSAodm9pZCl0ZXN0QXBwZW5kTnVtZXJpY0J5dGVzIHsKKyAgLy8gMSA9IDAxID0gMDAwMSBpbiA0IGJpdHMuCisgIFpYQml0QXJyYXkgKmJpdHMgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbWlhFbmNvZGVyIGFwcGVuZE51bWVyaWNCeXRlczpAIjEiIGJpdHM6Yml0c107CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC4uLlgiOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYml0cyBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIGJpdHMgdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7CisgIC8vIDEyID0gMHhjID0gMDAwMTEwMCBpbiA3IGJpdHMuCisgIGJpdHMgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbWlhFbmNvZGVyIGFwcGVuZE51bWVyaWNCeXRlczpAIjEyIiBiaXRzOmJpdHNdOworICBleHBlY3RlZCA9IEAiIC4uLlhYLi4iOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYml0cyBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIGJpdHMgdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7CisgIC8vIDEyMyA9IDB4N2IgPSAwMDAxMTExMDExIGluIDEwIGJpdHMuCisgIGJpdHMgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbWlhFbmNvZGVyIGFwcGVuZE51bWVyaWNCeXRlczpAIjEyMyIgYml0czpiaXRzXTsKKyAgZXhwZWN0ZWQgPSBAIiAuLi5YWFhYLiBYWCI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtiaXRzIGRlc2NyaXB0aW9uXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgYml0cyB0byBlcXVhbCAlQCIsIGV4cGVjdGVkKTsKKyAgLy8gMTIzNCA9ICIxMjMiICsgIjQiID0gMDAwMTExMTAxMSArIDAxMDAKKyAgYml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWEVuY29kZXIgYXBwZW5kTnVtZXJpY0J5dGVzOkAiMTIzNCIgYml0czpiaXRzXTsKKyAgZXhwZWN0ZWQgPSBAIiAuLi5YWFhYLiBYWC5YLi4iOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYml0cyBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIGJpdHMgdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7CisgIC8vIEVtcHR5LgorICBiaXRzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgW1pYRW5jb2RlciBhcHBlbmROdW1lcmljQnl0ZXM6QCIiIGJpdHM6Yml0c107CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtiaXRzIGRlc2NyaXB0aW9uXSwgQCIiLCBAIkV4cGVjdGVkIGJpdHMgdG8gZXF1YWwgXCJcIiIpOworfQorCistICh2b2lkKXRlc3RBcHBlbmRBbHBoYW51bWVyaWNCeXRlcyB7CisgIC8vIEEgPSAxMCA9IDB4YSA9IDAwMTAxMCBpbiA2IGJpdHMKKyAgWlhCaXRBcnJheSAqYml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWEVuY29kZXIgYXBwZW5kQWxwaGFudW1lcmljQnl0ZXM6QCJBIiBiaXRzOmJpdHMgZXJyb3I6bmlsXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIgLi5YLlguIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW2JpdHMgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBiaXRzIHRvIGVxdWFsICVAIiwgZXhwZWN0ZWQpOworICAvLyBBQiA9IDEwICogNDUgKyAxMSA9IDQ2MSA9IDB4MWNkID0gMDAxMTEwMDExMDEgaW4gMTEgYml0cworICBiaXRzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgW1pYRW5jb2RlciBhcHBlbmRBbHBoYW51bWVyaWNCeXRlczpAIkFCIiBiaXRzOmJpdHMgZXJyb3I6bmlsXTsKKyAgZXhwZWN0ZWQgPSBAIiAuLlhYWC4uWCBYLlgiOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYml0cyBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIGJpdHMgdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7CisgIC8vIEFCQyA9ICJBQiIgKyAiQyIgPSAwMDExMTAwMTEwMSArIDAwMTEwMAorICBiaXRzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgW1pYRW5jb2RlciBhcHBlbmRBbHBoYW51bWVyaWNCeXRlczpAIkFCQyIgYml0czpiaXRzIGVycm9yOm5pbF07CisgIGV4cGVjdGVkID0gQCIgLi5YWFguLlggWC5YLi5YWC4gLiI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtiaXRzIGRlc2NyaXB0aW9uXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgYml0cyB0byBlcXVhbCAlQCIsIGV4cGVjdGVkKTsKKyAgLy8gRW1wdHkuCisgIGJpdHMgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBbWlhFbmNvZGVyIGFwcGVuZEFscGhhbnVtZXJpY0J5dGVzOkAiIiBiaXRzOmJpdHMgZXJyb3I6bmlsXTsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW2JpdHMgZGVzY3JpcHRpb25dLCBAIiIsIEAiRXhwZWN0ZWQgYml0cyB0byBlcXVhbCBcIlwiIik7CisgIC8vIEludmFsaWQgZGF0YS4KKyAgTlNFcnJvciAqZXJyb3I7CisgIGlmIChbWlhFbmNvZGVyIGFwcGVuZEFscGhhbnVtZXJpY0J5dGVzOkAiYWJjIiBiaXRzOltbWlhCaXRBcnJheSBhbGxvY10gaW5pdF0gZXJyb3I6JmVycm9yXSB8fCBlcnJvci5jb2RlICE9IFpYV3JpdGVyRXJyb3IpIHsKKyAgICBTVEZhaWwoQCJFeHBlY3RlZCBaWFdyaXRlckVycm9yIik7CisgIH0KK30KKworLSAodm9pZCl0ZXN0QXBwZW5kOEJpdEJ5dGVzIHsKKyAgLy8gMHg2MSwgMHg2MiwgMHg2MworICBaWEJpdEFycmF5ICpiaXRzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgW1pYRW5jb2RlciBhcHBlbmQ4Qml0Qnl0ZXM6QCJhYmMiIGJpdHM6Yml0cyBlbmNvZGluZzpERUZBVUxUX0JZVEVfTU9ERV9FTkNPRElOR107CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIC5YWC4uLi5YIC5YWC4uLlguIC5YWC4uLlhYIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW2JpdHMgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBiaXRzIHRvIGVxdWFsICVAIiwgZXhwZWN0ZWQpOworICAvLyBFbXB0eS4KKyAgYml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWEVuY29kZXIgYXBwZW5kOEJpdEJ5dGVzOkAiIiBiaXRzOmJpdHMgZW5jb2Rpbmc6REVGQVVMVF9CWVRFX01PREVfRU5DT0RJTkddOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYml0cyBkZXNjcmlwdGlvbl0sIEAiIiwgQCJFeHBlY3RlZCBiaXRzIHRvIGVxdWFsIFwiXCIiKTsKK30KKworLy8gTnVtYmVycyBhcmUgZnJvbSBwYWdlIDIxIG9mIEpJU1gwNTEwOjIwMDQKKy0gKHZvaWQpdGVzdEFwcGVuZEthbmppQnl0ZXMgeworICBaWEJpdEFycmF5ICpiaXRzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgaW50OF90IGJ5dGVzWzJdID0gezB4OTMsMHg1Zn07CisgIFtaWEVuY29kZXIgYXBwZW5kS2FuamlCeXRlczpbc2VsZiBzaGlmdEpJU1N0cmluZzpieXRlcyBieXRlc0xlbjoyXSBiaXRzOmJpdHMgZXJyb3I6bmlsXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIgLlhYLlhYLi4gWFhYWFgiOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYml0cyBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIGJpdHMgdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7CisgIGludDhfdCBieXRlczJbMl0gPSB7MHhlNCwweGFhfTsKKyAgW1pYRW5jb2RlciBhcHBlbmRLYW5qaUJ5dGVzOltzZWxmIHNoaWZ0SklTU3RyaW5nOmJ5dGVzMiBieXRlc0xlbjoyXSBiaXRzOmJpdHMgZXJyb3I6bmlsXTsKKyAgZXhwZWN0ZWQgPSBAIiAuWFguWFguLiBYWFhYWFhYLiBYLlguWC5YLiBYLiI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFtiaXRzIGRlc2NyaXB0aW9uXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgYml0cyB0byBlcXVhbCAlQCIsIGV4cGVjdGVkKTsKK30KKworLy8gTnVtYmVycyBhcmUgZnJvbSBodHRwOi8vd3d3LnN3ZXRha2UuY29tL3FyL3FyMy5odG1sIGFuZAorLy8gaHR0cDovL3d3dy5zd2V0YWtlLmNvbS9xci9xcjkuaHRtbAorLSAodm9pZCl0ZXN0R2VuZXJhdGVFQ0J5dGVzIHsKKyAgY29uc3QgaW50IGRhdGFCeXRlc0xlbiA9IDk7CisgIGludDhfdCBkYXRhQnl0ZXNbZGF0YUJ5dGVzTGVuXSA9IHszMiwgNjUsIDIwNSwgNjksIDQxLCAyMjAsIDQ2LCAxMjgsIDIzNn07CisgIGludDhfdCAqZWNCeXRlcyA9IFtaWEVuY29kZXIgZ2VuZXJhdGVFQ0J5dGVzOmRhdGFCeXRlcyBudW1EYXRhQnl0ZXM6ZGF0YUJ5dGVzTGVuIG51bUVjQnl0ZXNJbkJsb2NrOjE3XTsKKyAgY29uc3QgaW50IGV4cGVjdGVkTGVuID0gMTc7CisgIGludCBleHBlY3RlZFtleHBlY3RlZExlbl0gPSB7CisgICAgNDIsIDE1OSwgNzQsIDIyMSwgMjQ0LCAxNjksIDIzOSwgMTUwLCAxMzgsIDcwLCAyMzcsIDg1LCAyMjQsIDk2LCA3NCwgMjE5LCA2MQorICB9OworICBmb3IgKGludCB4ID0gMDsgeCA8IGV4cGVjdGVkTGVuOyB4KyspIHsKKyAgICBTVEFzc2VydEVxdWFscyhlY0J5dGVzW3hdICYgMHhGRiwgZXhwZWN0ZWRbeF0sIEAiRXhwZWN0ZWQgZXhCeXRlc1slZF0gdG8gZXF1YWwgJWQiLCB4LCBleHBlY3RlZFt4XSk7CisgIH0KKyAgZnJlZShlY0J5dGVzKTsKKyAgY29uc3QgaW50IGRhdGFCeXRlc0xlbjIgPSAxNTsKKyAgaW50OF90IGRhdGFCeXRlczJbZGF0YUJ5dGVzTGVuMl0gPSB7NjcsIDcwLCAyMiwgMzgsIDU0LCA3MCwgODYsIDEwMiwgMTE4LAorICAgIDEzNCwgMTUwLCAxNjYsIDE4MiwgMTk4LCAyMTR9OworICBpbnQ4X3QgKmVjQnl0ZXMyID0gW1pYRW5jb2RlciBnZW5lcmF0ZUVDQnl0ZXM6ZGF0YUJ5dGVzMiBudW1EYXRhQnl0ZXM6ZGF0YUJ5dGVzTGVuMiBudW1FY0J5dGVzSW5CbG9jazoxOF07CisgIGNvbnN0IGludCBleHBlY3RlZExlbjIgPSAxODsKKyAgaW50IGV4cGVjdGVkMltleHBlY3RlZExlbjJdID0geworICAgIDE3NSwgODAsIDE1NSwgNjQsIDE3OCwgNDUsIDIxNCwgMjMzLCA2NSwgMjA5LCAxMiwgMTU1LCAxMTcsIDMxLCAxNDAsIDIxNCwgMjcsIDE4NworICB9OworICBmb3IgKGludCB4ID0gMDsgeCA8IGV4cGVjdGVkTGVuMjsgeCsrKSB7CisgICAgU1RBc3NlcnRFcXVhbHMoZWNCeXRlczJbeF0gJiAweEZGLCBleHBlY3RlZDJbeF0sIEAiRXhwZWN0ZWQgZXhCeXRlc1slZF0gdG8gZXF1YWwgJWQiLCB4LCBleHBlY3RlZDJbeF0pOworICB9CisgIGZyZWUoZWNCeXRlczIpOworICAvLyBIaWdoLW9yZGVyIHplcm8gY29lZmZpY2llbnQgY2FzZS4KKyAgY29uc3QgaW50IGRhdGFCeXRlc0xlbjMgPSA5OworICBpbnQ4X3QgZGF0YUJ5dGVzM1tkYXRhQnl0ZXNMZW4zXSA9IHszMiwgNDksIDIwNSwgNjksIDQyLCAyMCwgMCwgMjM2LCAxN307CisgIGludDhfdCAqZWNCeXRlczMgPSBbWlhFbmNvZGVyIGdlbmVyYXRlRUNCeXRlczpkYXRhQnl0ZXMzIG51bURhdGFCeXRlczpkYXRhQnl0ZXNMZW4zIG51bUVjQnl0ZXNJbkJsb2NrOjE3XTsKKyAgY29uc3QgaW50IGV4cGVjdGVkTGVuMyA9IDE3OworICBpbnQgZXhwZWN0ZWQzW2V4cGVjdGVkTGVuM10gPSB7CisgICAgMCwgMywgMTMwLCAxNzksIDE5NCwgMCwgNTUsIDIxMSwgMTEwLCA3OSwgOTgsIDcyLCAxNzAsIDk2LCAyMTEsIDEzNywgMjEzCisgIH07CisgIGZvciAoaW50IHggPSAwOyB4IDwgZXhwZWN0ZWRMZW4zOyB4KyspIHsKKyAgICBTVEFzc2VydEVxdWFscyhlY0J5dGVzM1t4XSAmIDB4RkYsIGV4cGVjdGVkM1t4XSwgQCJFeHBlY3RlZCBleEJ5dGVzWyVkXSB0byBlcXVhbCAlZCIsIHgsIGV4cGVjdGVkM1t4XSk7CisgIH0KKyAgZnJlZShlY0J5dGVzMyk7Cit9CisKKy0gKHZvaWQpdGVzdEJ1Z0luQml0VmVjdG9yTnVtQnl0ZXMgeworICAvLyBUaGVyZSB3YXMgYSBidWcgaW4gQml0VmVjdG9yLnNpemVJbkJ5dGVzKCkgdGhhdCBjYXVzZWQgaXQgdG8gcmV0dXJuIGEKKyAgLy8gc21hbGxlci1ieS1vbmUgdmFsdWUgKGV4LiAxNDY1IGluc3RlYWQgb2YgMTQ2NikgaWYgdGhlIG51bWJlciBvZiBiaXRzCisgIC8vIGluIHRoZSB2ZWN0b3IgaXMgbm90IDgtYml0IGFsaWduZWQuICBJbiBRUkNvZGVFbmNvZGVyOjpJbml0UVJDb2RlKCksCisgIC8vIEJpdFZlY3Rvcjo6c2l6ZUluQnl0ZXMoKSBpcyB1c2VkIGZvciBmaW5kaW5nIHRoZSBzbWFsbGVzdCBRUiBDb2RlCisgIC8vIHZlcnNpb24gdGhhdCBjYW4gZml0IHRoZSBnaXZlbiBkYXRhLiAgSGVuY2UgdGhlcmUgd2VyZSBjb3JuZXIgY2FzZXMKKyAgLy8gd2hlcmUgd2UgY2hvc2UgYSB3cm9uZyBRUiBDb2RlIHZlcnNpb24gdGhhdCBjYW5ub3QgZml0IHRoZSBnaXZlbgorICAvLyBkYXRhLiAgTm90ZSB0aGF0IHRoZSBpc3N1ZSBkaWQgbm90IG9jY3VyIHdpdGggTU9ERV84QklUX0JZVEUsIGFzIHRoZQorICAvLyBiaXRzIGluIHRoZSBiaXQgdmVjdG9yIGFyZSBhbHdheXMgOC1iaXQgYWxpZ25lZC4KKyAgLy8KKyAgLy8gQmVmb3JlIHRoZSBidWcgd2FzIGZpeGVkLCB0aGUgZm9sbG93aW5nIHRlc3QgZGlkbid0IHBhc3MsIGJlY2F1c2U6CisgIC8vCisgIC8vIC0gTU9ERV9OVU1FUklDIGlzIGNob3NlbiBhcyBhbGwgYnl0ZXMgaW4gdGhlIGRhdGEgYXJlICcwJworICAvLyAtIFRoZSAzNTE4LWJ5dGUgbnVtZXJpYyBkYXRhIG5lZWRzIDE0NjYgYnl0ZXMKKyAgLy8gICAtIDM1MTggLyAzICogMTAgKyA3ID0gMTE3MjcgYml0cyA9IDE0NjUuODc1IGJ5dGVzCisgIC8vICAgLSAzIG51bWVyaWMgYnl0ZXMgYXJlIGVuY29kZWQgaW4gMTAgYml0cywgaGVuY2UgdGhlIGZpcnN0CisgIC8vICAgICAzNTE2IGJ5dGVzIGFyZSBlbmNvZGVkIGluIDM1MTYgLyAzICogMTAgPSAxMTcyMCBiaXRzLgorICAvLyAgIC0gMiBudW1lcmljIGJ5dGVzIGNhbiBiZSBlbmNvZGVkIGluIDcgYml0cywgaGVuY2UgdGhlIGxhc3QKKyAgLy8gICAgIDIgYnl0ZXMgYXJlIGVuY29kZWQgaW4gNyBiaXRzLgorICAvLyAtIFRoZSB2ZXJzaW9uIDI3IFFSIENvZGUgd2l0aCB0aGUgRUMgbGV2ZWwgTCBoYXMgMTQ2OCBieXRlcyBmb3IgZGF0YS4KKyAgLy8gICAtIDE4MjggLSAzNjAgPSAxNDY4CisgIC8vIC0gSW4gSW5pdFFSQ29kZSgpLCAzIGJ5dGVzIGFyZSByZXNlcnZlZCBmb3IgYSBoZWFkZXIuICBIZW5jZSAxNDY1IGJ5dGVzCisgIC8vICAgKDE0NjggLTMpIGFyZSBsZWZ0IGZvciBkYXRhLgorICAvLyAtIEJlY2F1c2Ugb2YgdGhlIGJ1ZyBpbiBCaXRWZWN0b3I6OnNpemVJbkJ5dGVzKCksIEluaXRRUkNvZGUoKSBkZXRlcm1pbmVzCisgIC8vICAgdGhlIGdpdmVuIGRhdGEgY2FuIGZpdCBpbiAxNDY1IGJ5dGVzLCBkZXNwaXRlIGl0IG5lZWRzIDE0NjYgYnl0ZXMuCisgIC8vIC0gSGVuY2UgUVJDb2RlRW5jb2Rlci5lbmNvZGUoKSBmYWlsZWQgYW5kIHJldHVybmVkIGZhbHNlLgorICAvLyAgIC0gVG8gYmUgcHJlY2lzZSwgaXQgbmVlZHMgMTE3MjcgKyA0IChnZXRNb2RlIGluZm8pICsgMTQgKGxlbmd0aCBpbmZvKSA9CisgIC8vICAgICAxMTc0NSBiaXRzID0gMTQ2OC4xMjUgYnl0ZXMgYXJlIG5lZWRlZCAoaS5lLiBjYW5ub3QgZml0IGluIDE0NjgKKyAgLy8gICAgIGJ5dGVzKS4KKyAgTlNNdXRhYmxlU3RyaW5nICpidWlsZGVyID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2FwYWNpdHk6MzUxOF07CisgIGZvciAoaW50IHggPSAwOyB4IDwgMzUxODsgeCsrKSB7CisgICAgW2J1aWxkZXIgYXBwZW5kU3RyaW5nOkAiMCJdOworICB9CisgIFpYUVJDb2RlICpxckNvZGUgPSBbWlhFbmNvZGVyIGVuY29kZTpidWlsZGVyIGVjTGV2ZWw6W1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZXJyb3JDb3JyZWN0aW9uTGV2ZWxMXSBlcnJvcjpuaWxdOworICBTVEFzc2VydE5vdE5pbChxckNvZGUsIEAiRXhjZXB0ZWQgUVIgY29kZSIpOworfQorCistIChOU1N0cmluZyAqKXNoaWZ0SklTU3RyaW5nOihpbnQ4X3QgKilieXRlcyBieXRlc0xlbjooaW50KWJ5dGVzTGVuIHsKKyAgcmV0dXJuIFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzTGVuIGVuY29kaW5nOk5TU2hpZnRKSVNTdHJpbmdFbmNvZGluZ107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYTWFza1V0aWxUZXN0Q2FzZS5oIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2VuY29kZXIvWlhNYXNrVXRpbFRlc3RDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5YWMwYgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYTWFza1V0aWxUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYTWFza1V0aWxUZXN0Q2FzZSA6IFNlblRlc3RDYXNlCisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYTWFza1V0aWxUZXN0Q2FzZS5tIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2VuY29kZXIvWlhNYXNrVXRpbFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlZTIyNAotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYTWFza1V0aWxUZXN0Q2FzZS5tCkBAIC0wLDAgKzEsMjQ5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgWlhpbmcgYXV0aG9ycworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW1wb3J0ICJaWE1hc2tVdGlsVGVzdENhc2UuaCIKKworQGltcGxlbWVudGF0aW9uIFpYTWFza1V0aWxUZXN0Q2FzZQorCistICh2b2lkKXRlc3RBcHBseU1hc2tQZW5hbHR5UnVsZTEgeworICBaWEJ5dGVNYXRyaXggKm1hdHJpeCA9IFtbWlhCeXRlTWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOjQgaGVpZ2h0OjFdOworICBbbWF0cml4IHNldFg6MCB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDoxIHk6MCBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjIgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MyB5OjAgaW50VmFsdWU6MF07CisgIFNUQXNzZXJ0RXF1YWxzKFtaWE1hc2tVdGlsIGFwcGx5TWFza1BlbmFsdHlSdWxlMTptYXRyaXhdLCAwLCBAIkV4cGVjdGVkIGFwcGx5TWFza1BlbmFsdHlSdWxlMSB0byByZXR1cm4gMCIpOworICAvLyBIb3Jpem9udGFsLgorICBtYXRyaXggPSBbW1pYQnl0ZU1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDo2IGhlaWdodDoxXTsKKyAgW21hdHJpeCBzZXRYOjAgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MSB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDoyIHk6MCBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjMgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6NCB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDo1IHk6MCBpbnRWYWx1ZToxXTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWFza1V0aWwgYXBwbHlNYXNrUGVuYWx0eVJ1bGUxOm1hdHJpeF0sIDMsIEAiRXhwZWN0ZWQgYXBwbHlNYXNrUGVuYWx0eVJ1bGUxIHRvIHJldHVybiAzIik7CisgIFttYXRyaXggc2V0WDo1IHk6MCBpbnRWYWx1ZTowXTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWFza1V0aWwgYXBwbHlNYXNrUGVuYWx0eVJ1bGUxOm1hdHJpeF0sIDQsIEAiRXhwZWN0ZWQgYXBwbHlNYXNrUGVuYWx0eVJ1bGUxIHRvIHJldHVybiA0Iik7CisgIC8vIFZlcnRpY2FsLgorICBtYXRyaXggPSBbW1pYQnl0ZU1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDoxIGhlaWdodDo2XTsKKyAgW21hdHJpeCBzZXRYOjAgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MCB5OjEgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDowIHk6MiBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjAgeTozIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MCB5OjQgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDowIHk6NSBpbnRWYWx1ZToxXTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWFza1V0aWwgYXBwbHlNYXNrUGVuYWx0eVJ1bGUxOm1hdHJpeF0sIDMsIEAiRXhwZWN0ZWQgYXBwbHlNYXNrUGVuYWx0eVJ1bGUxIHRvIHJldHVybiAzIik7CisgIFttYXRyaXggc2V0WDowIHk6NSBpbnRWYWx1ZTowXTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWFza1V0aWwgYXBwbHlNYXNrUGVuYWx0eVJ1bGUxOm1hdHJpeF0sIDQsIEAiRXhwZWN0ZWQgYXBwbHlNYXNrUGVuYWx0eVJ1bGUxIHRvIHJldHVybiA0Iik7Cit9CisKKy0gKHZvaWQpdGVzdEFwcGx5TWFza1BlbmFsdHlSdWxlMiB7CisgIFpYQnl0ZU1hdHJpeCAqbWF0cml4ID0gW1taWEJ5dGVNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6MSBoZWlnaHQ6MV07CisgIFttYXRyaXggc2V0WDowIHk6MCBpbnRWYWx1ZTowXTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWFza1V0aWwgYXBwbHlNYXNrUGVuYWx0eVJ1bGUyOm1hdHJpeF0sIDAsIEAiRXhwZWN0ZWQgYXBwbHlNYXNrUGVuYWx0eVJ1bGUyIHRvIHJldHVybiAwIik7CisgIG1hdHJpeCA9IFtbWlhCeXRlTWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOjIgaGVpZ2h0OjJdOworICBbbWF0cml4IHNldFg6MCB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDoxIHk6MCBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjAgeToxIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MSB5OjEgaW50VmFsdWU6MV07CisgIFNUQXNzZXJ0RXF1YWxzKFtaWE1hc2tVdGlsIGFwcGx5TWFza1BlbmFsdHlSdWxlMjptYXRyaXhdLCAwLCBAIkV4cGVjdGVkIGFwcGx5TWFza1BlbmFsdHlSdWxlMiB0byByZXR1cm4gMCIpOworICBtYXRyaXggPSBbW1pYQnl0ZU1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDoyIGhlaWdodDoyXTsKKyAgW21hdHJpeCBzZXRYOjAgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MSB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDowIHk6MSBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjEgeToxIGludFZhbHVlOjBdOworICBTVEFzc2VydEVxdWFscyhbWlhNYXNrVXRpbCBhcHBseU1hc2tQZW5hbHR5UnVsZTI6bWF0cml4XSwgMywgQCJFeHBlY3RlZCBhcHBseU1hc2tQZW5hbHR5UnVsZTIgdG8gcmV0dXJuIDMiKTsKKyAgbWF0cml4ID0gW1taWEJ5dGVNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6MyBoZWlnaHQ6M107CisgIFttYXRyaXggc2V0WDowIHk6MCBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjEgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MiB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDowIHk6MSBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjEgeToxIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MiB5OjEgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDowIHk6MiBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjEgeToyIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MiB5OjIgaW50VmFsdWU6MF07CisgIC8vIEZvdXIgaW5zdGFuY2VzIG9mIDJ4MiBibG9ja3MuCisgIFNUQXNzZXJ0RXF1YWxzKFtaWE1hc2tVdGlsIGFwcGx5TWFza1BlbmFsdHlSdWxlMjptYXRyaXhdLCAzICogNCwgQCJFeHBlY3RlZCBhcHBseU1hc2tQZW5hbHR5UnVsZTIgdG8gcmV0dXJuIDMgKiA0Iik7Cit9CisKKy0gKHZvaWQpdGVzdEFwcGx5TWFza1BlbmFsdHlSdWxlMyB7CisgIC8vIEhvcml6b250YWwgMDAwMDEwMTExMDEuCisgIFpYQnl0ZU1hdHJpeCAqbWF0cml4ID0gW1taWEJ5dGVNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6MTEgaGVpZ2h0OjFdOworICBbbWF0cml4IHNldFg6MCB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDoxIHk6MCBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjIgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MyB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDo0IHk6MCBpbnRWYWx1ZToxXTsKKyAgW21hdHJpeCBzZXRYOjUgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6NiB5OjAgaW50VmFsdWU6MV07CisgIFttYXRyaXggc2V0WDo3IHk6MCBpbnRWYWx1ZToxXTsKKyAgW21hdHJpeCBzZXRYOjggeTowIGludFZhbHVlOjFdOworICBbbWF0cml4IHNldFg6OSB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDoxMCB5OjAgaW50VmFsdWU6MV07CisgIFNUQXNzZXJ0RXF1YWxzKFtaWE1hc2tVdGlsIGFwcGx5TWFza1BlbmFsdHlSdWxlMzptYXRyaXhdLCA0MCwgQCJFeHBlY3RlZCBhcHBseU1hc2tQZW5hbHR5UnVsZTMgdG8gcmV0dXJuIDQwIik7CisgIC8vIEhvcml6b250YWwgMTAxMTEwMTAwMDAuCisgIG1hdHJpeCA9IFtbWlhCeXRlTWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOjExIGhlaWdodDoxXTsKKyAgW21hdHJpeCBzZXRYOjAgeTowIGludFZhbHVlOjFdOworICBbbWF0cml4IHNldFg6MSB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDoyIHk6MCBpbnRWYWx1ZToxXTsKKyAgW21hdHJpeCBzZXRYOjMgeTowIGludFZhbHVlOjFdOworICBbbWF0cml4IHNldFg6NCB5OjAgaW50VmFsdWU6MV07CisgIFttYXRyaXggc2V0WDo1IHk6MCBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjYgeTowIGludFZhbHVlOjFdOworICBbbWF0cml4IHNldFg6NyB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDo4IHk6MCBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjkgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MTAgeTowIGludFZhbHVlOjBdOworICBTVEFzc2VydEVxdWFscyhbWlhNYXNrVXRpbCBhcHBseU1hc2tQZW5hbHR5UnVsZTM6bWF0cml4XSwgNDAsIEAiRXhwZWN0ZWQgYXBwbHlNYXNrUGVuYWx0eVJ1bGUzIHRvIHJldHVybiA0MCIpOworICAvLyBWZXJ0aWNhbCAwMDAwMTAxMTEwMS4KKyAgbWF0cml4ID0gW1taWEJ5dGVNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6MTEgaGVpZ2h0OjFdOworICBbbWF0cml4IHNldFg6MCB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDoxIHk6MCBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjIgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MyB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDo0IHk6MCBpbnRWYWx1ZToxXTsKKyAgW21hdHJpeCBzZXRYOjUgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6NiB5OjAgaW50VmFsdWU6MV07CisgIFttYXRyaXggc2V0WDo3IHk6MCBpbnRWYWx1ZToxXTsKKyAgW21hdHJpeCBzZXRYOjggeTowIGludFZhbHVlOjFdOworICBbbWF0cml4IHNldFg6OSB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDoxMCB5OjAgaW50VmFsdWU6MV07CisgIFNUQXNzZXJ0RXF1YWxzKFtaWE1hc2tVdGlsIGFwcGx5TWFza1BlbmFsdHlSdWxlMzptYXRyaXhdLCA0MCwgQCJFeHBlY3RlZCBhcHBseU1hc2tQZW5hbHR5UnVsZTMgdG8gcmV0dXJuIDQwIik7CisgIC8vIFZlcnRpY2FsIDEwMTExMDEwMDAwLgorICBtYXRyaXggPSBbW1pYQnl0ZU1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDoxMSBoZWlnaHQ6MV07CisgIFttYXRyaXggc2V0WDowIHk6MCBpbnRWYWx1ZToxXTsKKyAgW21hdHJpeCBzZXRYOjEgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MiB5OjAgaW50VmFsdWU6MV07CisgIFttYXRyaXggc2V0WDozIHk6MCBpbnRWYWx1ZToxXTsKKyAgW21hdHJpeCBzZXRYOjQgeTowIGludFZhbHVlOjFdOworICBbbWF0cml4IHNldFg6NSB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDo2IHk6MCBpbnRWYWx1ZToxXTsKKyAgW21hdHJpeCBzZXRYOjcgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6OCB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDo5IHk6MCBpbnRWYWx1ZTowXTsKKyAgW21hdHJpeCBzZXRYOjEwIHk6MCBpbnRWYWx1ZTowXTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWFza1V0aWwgYXBwbHlNYXNrUGVuYWx0eVJ1bGUzOm1hdHJpeF0sIDQwLCBAIkV4cGVjdGVkIGFwcGx5TWFza1BlbmFsdHlSdWxlMyB0byByZXR1cm4gNDAiKTsKK30KKworLSAodm9pZCl0ZXN0QXBwbHlNYXNrUGVuYWx0eVJ1bGU0IHsKKyAgLy8gRGFyayBjZWxsIHJhdGlvID0gMCUKKyAgWlhCeXRlTWF0cml4ICptYXRyaXggPSBbW1pYQnl0ZU1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDoxIGhlaWdodDoxXTsKKyAgW21hdHJpeCBzZXRYOjAgeTowIGludFZhbHVlOjBdOworICBTVEFzc2VydEVxdWFscyhbWlhNYXNrVXRpbCBhcHBseU1hc2tQZW5hbHR5UnVsZTQ6bWF0cml4XSwgMTAwLCBAIkV4cGVjdGVkIGFwcGx5TWFza1BlbmFsdHlSdWxlNCB0byByZXR1cm4gMTAwIik7CisgIC8vIERhcmsgY2VsbCByYXRpbyA9IDUlCisgIG1hdHJpeCA9IFtbWlhCeXRlTWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOjIgaGVpZ2h0OjFdOworICBbbWF0cml4IHNldFg6MCB5OjAgaW50VmFsdWU6MF07CisgIFttYXRyaXggc2V0WDowIHk6MCBpbnRWYWx1ZToxXTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWFza1V0aWwgYXBwbHlNYXNrUGVuYWx0eVJ1bGU0Om1hdHJpeF0sIDAsIEAiRXhwZWN0ZWQgYXBwbHlNYXNrUGVuYWx0eVJ1bGU0IHRvIHJldHVybiAwIik7CisgIC8vIERhcmsgY2VsbCByYXRpbyA9IDY2LjY3JQorICBtYXRyaXggPSBbW1pYQnl0ZU1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDo2IGhlaWdodDoxXTsKKyAgW21hdHJpeCBzZXRYOjAgeTowIGludFZhbHVlOjBdOworICBbbWF0cml4IHNldFg6MSB5OjAgaW50VmFsdWU6MV07CisgIFttYXRyaXggc2V0WDoyIHk6MCBpbnRWYWx1ZToxXTsKKyAgW21hdHJpeCBzZXRYOjMgeTowIGludFZhbHVlOjFdOworICBbbWF0cml4IHNldFg6NCB5OjAgaW50VmFsdWU6MV07CisgIFttYXRyaXggc2V0WDo1IHk6MCBpbnRWYWx1ZTowXTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWFza1V0aWwgYXBwbHlNYXNrUGVuYWx0eVJ1bGU0Om1hdHJpeF0sIDMwLCBAIkV4cGVjdGVkIGFwcGx5TWFza1BlbmFsdHlSdWxlNCB0byByZXR1cm4gMzAiKTsKK30KKworQk9PTCBUZXN0R2V0RGF0YU1hc2tCaXRJbnRlcm5hbChpbnQgbWFza1BhdHRlcm4sIGludCAqZXhwZWN0ZWQpIHsKKyAgZm9yIChpbnQgeCA9IDA7IHggPCA2OyArK3gpIHsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IDY7ICsreSkgeworICAgICAgaWYgKChleHBlY3RlZFt5KjYreF0gPT0gMSkgIT0gW1pYTWFza1V0aWwgZGF0YU1hc2tCaXQ6bWFza1BhdHRlcm4geDp4IHk6eV0pIHsKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gWUVTOworfQorCisvLyBTZWUgbWFzayBwYXR0ZXJucyBvbiB0aGUgcGFnZSA0MyBvZiBKSVNYMDUxMDoyMDA0LgorLSAodm9pZCl0ZXN0R2V0RGF0YU1hc2tCaXQgeworICBpbnQgbWFzazBbNl1bNl0gPSB7CisgICAgezEsIDAsIDEsIDAsIDEsIDB9LAorICAgIHswLCAxLCAwLCAxLCAwLCAxfSwKKyAgICB7MSwgMCwgMSwgMCwgMSwgMH0sCisgICAgezAsIDEsIDAsIDEsIDAsIDF9LAorICAgIHsxLCAwLCAxLCAwLCAxLCAwfSwKKyAgICB7MCwgMSwgMCwgMSwgMCwgMX0sCisgIH07CisgIFNUQXNzZXJ0VHJ1ZShUZXN0R2V0RGF0YU1hc2tCaXRJbnRlcm5hbCgwLCAoaW50ICopbWFzazApLCBAIkV4cGVjdGVkIFRlc3RHZXREYXRhTWFza0JpdEludGVybmFsIHRvIHJldHVybiBZRVMiKTsKKyAgaW50IG1hc2sxWzZdWzZdID0geworICAgIHsxLCAxLCAxLCAxLCAxLCAxfSwKKyAgICB7MCwgMCwgMCwgMCwgMCwgMH0sCisgICAgezEsIDEsIDEsIDEsIDEsIDF9LAorICAgIHswLCAwLCAwLCAwLCAwLCAwfSwKKyAgICB7MSwgMSwgMSwgMSwgMSwgMX0sCisgICAgezAsIDAsIDAsIDAsIDAsIDB9LAorICB9OworICBTVEFzc2VydFRydWUoVGVzdEdldERhdGFNYXNrQml0SW50ZXJuYWwoMSwgKGludCAqKW1hc2sxKSwgQCJFeHBlY3RlZCBUZXN0R2V0RGF0YU1hc2tCaXRJbnRlcm5hbCB0byByZXR1cm4gWUVTIik7CisgIGludCBtYXNrMls2XVs2XSA9IHsKKyAgICB7MSwgMCwgMCwgMSwgMCwgMH0sCisgICAgezEsIDAsIDAsIDEsIDAsIDB9LAorICAgIHsxLCAwLCAwLCAxLCAwLCAwfSwKKyAgICB7MSwgMCwgMCwgMSwgMCwgMH0sCisgICAgezEsIDAsIDAsIDEsIDAsIDB9LAorICAgIHsxLCAwLCAwLCAxLCAwLCAwfSwKKyAgfTsKKyAgU1RBc3NlcnRUcnVlKFRlc3RHZXREYXRhTWFza0JpdEludGVybmFsKDIsIChpbnQgKiltYXNrMiksIEAiRXhwZWN0ZWQgVGVzdEdldERhdGFNYXNrQml0SW50ZXJuYWwgdG8gcmV0dXJuIFlFUyIpOworICBpbnQgbWFzazNbNl1bNl0gPSB7CisgICAgezEsIDAsIDAsIDEsIDAsIDB9LAorICAgIHswLCAwLCAxLCAwLCAwLCAxfSwKKyAgICB7MCwgMSwgMCwgMCwgMSwgMH0sCisgICAgezEsIDAsIDAsIDEsIDAsIDB9LAorICAgIHswLCAwLCAxLCAwLCAwLCAxfSwKKyAgICB7MCwgMSwgMCwgMCwgMSwgMH0sCisgIH07CisgIFNUQXNzZXJ0VHJ1ZShUZXN0R2V0RGF0YU1hc2tCaXRJbnRlcm5hbCgzLCAoaW50ICopbWFzazMpLCBAIkV4cGVjdGVkIFRlc3RHZXREYXRhTWFza0JpdEludGVybmFsIHRvIHJldHVybiBZRVMiKTsKKyAgaW50IG1hc2s0WzZdWzZdID0geworICAgIHsxLCAxLCAxLCAwLCAwLCAwfSwKKyAgICB7MSwgMSwgMSwgMCwgMCwgMH0sCisgICAgezAsIDAsIDAsIDEsIDEsIDF9LAorICAgIHswLCAwLCAwLCAxLCAxLCAxfSwKKyAgICB7MSwgMSwgMSwgMCwgMCwgMH0sCisgICAgezEsIDEsIDEsIDAsIDAsIDB9LAorICB9OworICBTVEFzc2VydFRydWUoVGVzdEdldERhdGFNYXNrQml0SW50ZXJuYWwoNCwgKGludCAqKW1hc2s0KSwgQCJFeHBlY3RlZCBUZXN0R2V0RGF0YU1hc2tCaXRJbnRlcm5hbCB0byByZXR1cm4gWUVTIik7CisgIGludCBtYXNrNVs2XVs2XSA9IHsKKyAgICB7MSwgMSwgMSwgMSwgMSwgMX0sCisgICAgezEsIDAsIDAsIDAsIDAsIDB9LAorICAgIHsxLCAwLCAwLCAxLCAwLCAwfSwKKyAgICB7MSwgMCwgMSwgMCwgMSwgMH0sCisgICAgezEsIDAsIDAsIDEsIDAsIDB9LAorICAgIHsxLCAwLCAwLCAwLCAwLCAwfSwKKyAgfTsKKyAgU1RBc3NlcnRUcnVlKFRlc3RHZXREYXRhTWFza0JpdEludGVybmFsKDUsIChpbnQgKiltYXNrNSksIEAiRXhwZWN0ZWQgVGVzdEdldERhdGFNYXNrQml0SW50ZXJuYWwgdG8gcmV0dXJuIFlFUyIpOworICBpbnQgbWFzazZbNl1bNl0gPSB7CisgICAgezEsIDEsIDEsIDEsIDEsIDF9LAorICAgIHsxLCAxLCAxLCAwLCAwLCAwfSwKKyAgICB7MSwgMSwgMCwgMSwgMSwgMH0sCisgICAgezEsIDAsIDEsIDAsIDEsIDB9LAorICAgIHsxLCAwLCAxLCAxLCAwLCAxfSwKKyAgICB7MSwgMCwgMCwgMCwgMSwgMX0sCisgIH07CisgIFNUQXNzZXJ0VHJ1ZShUZXN0R2V0RGF0YU1hc2tCaXRJbnRlcm5hbCg2LCAoaW50ICopbWFzazYpLCBAIkV4cGVjdGVkIFRlc3RHZXREYXRhTWFza0JpdEludGVybmFsIHRvIHJldHVybiBZRVMiKTsKKyAgaW50IG1hc2s3WzZdWzZdID0geworICAgIHsxLCAwLCAxLCAwLCAxLCAwfSwKKyAgICB7MCwgMCwgMCwgMSwgMSwgMX0sCisgICAgezEsIDAsIDAsIDAsIDEsIDF9LAorICAgIHswLCAxLCAwLCAxLCAwLCAxfSwKKyAgICB7MSwgMSwgMSwgMCwgMCwgMH0sCisgICAgezAsIDEsIDEsIDEsIDAsIDB9LAorICB9OworICBTVEFzc2VydFRydWUoVGVzdEdldERhdGFNYXNrQml0SW50ZXJuYWwoNywgKGludCAqKW1hc2s3KSwgQCJFeHBlY3RlZCBUZXN0R2V0RGF0YU1hc2tCaXRJbnRlcm5hbCB0byByZXR1cm4gWUVTIik7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYTWF0cml4VXRpbFRlc3RDYXNlLmggYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvZW5jb2Rlci9aWE1hdHJpeFV0aWxUZXN0Q2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlOGI0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvZW5jb2Rlci9aWE1hdHJpeFV0aWxUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYTWF0cml4VXRpbFRlc3RDYXNlIDogU2VuVGVzdENhc2UKKworQGVuZApkaWZmIC0tZ2l0IGEvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2VuY29kZXIvWlhNYXRyaXhVdGlsVGVzdENhc2UubSBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYTWF0cml4VXRpbFRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYjhiZgotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYTWF0cml4VXRpbFRlc3RDYXNlLm0KQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgIlpYTWF0cml4VXRpbFRlc3RDYXNlLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBaWE1hdHJpeFV0aWxUZXN0Q2FzZQorCistICh2b2lkKXRlc3RUb1N0cmluZyB7CisgIFpYQnl0ZU1hdHJpeCAqYXJyYXkgPSBbW1pYQnl0ZU1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDozIGhlaWdodDozXTsKKyAgW2FycmF5IHNldFg6MCB5OjAgaW50VmFsdWU6MF07CisgIFthcnJheSBzZXRYOjEgeTowIGludFZhbHVlOjFdOworICBbYXJyYXkgc2V0WDoyIHk6MCBpbnRWYWx1ZTowXTsKKyAgW2FycmF5IHNldFg6MCB5OjEgaW50VmFsdWU6MV07CisgIFthcnJheSBzZXRYOjEgeToxIGludFZhbHVlOjBdOworICBbYXJyYXkgc2V0WDoyIHk6MSBpbnRWYWx1ZToxXTsKKyAgW2FycmF5IHNldFg6MCB5OjIgaW50VmFsdWU6LTFdOworICBbYXJyYXkgc2V0WDoxIHk6MiBpbnRWYWx1ZTotMV07CisgIFthcnJheSBzZXRYOjIgeToyIGludFZhbHVlOi0xXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIgMCAxIDBcbiAxIDAgMVxuICAgICAgXG4iOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYXJyYXkgZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBhcnJheSB0byBlcXVhbCAlQCIsIGV4cGVjdGVkKTsKK30KKworLSAodm9pZCl0ZXN0Q2xlYXJNYXRyaXggeworICBaWEJ5dGVNYXRyaXggKm1hdHJpeCA9IFtbWlhCeXRlTWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOjIgaGVpZ2h0OjJdOworICBbWlhNYXRyaXhVdGlsIGNsZWFyTWF0cml4Om1hdHJpeF07CisgIFNUQXNzZXJ0RXF1YWxzKFttYXRyaXggZ2V0WDowIHk6MF0sIChjaGFyKS0xLCBAIkV4cGVjdGVkICgwLCAwKSB0byBlcXVhbCAtMSIpOworICBTVEFzc2VydEVxdWFscyhbbWF0cml4IGdldFg6MSB5OjBdLCAoY2hhciktMSwgQCJFeHBlY3RlZCAoMSwgMCkgdG8gZXF1YWwgLTEiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW21hdHJpeCBnZXRYOjAgeToxXSwgKGNoYXIpLTEsIEAiRXhwZWN0ZWQgKDAsIDEpIHRvIGVxdWFsIC0xIik7CisgIFNUQXNzZXJ0RXF1YWxzKFttYXRyaXggZ2V0WDoxIHk6MV0sIChjaGFyKS0xLCBAIkV4cGVjdGVkICgxLCAxKSB0byBlcXVhbCAtMSIpOworfQorCistICh2b2lkKXRlc3RFbWJlZEJhc2ljUGF0dGVybnMxIHsKKyAgLy8gVmVyc2lvbiAxLgorICBaWEJ5dGVNYXRyaXggKm1hdHJpeCA9IFtbWlhCeXRlTWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOjIxIGhlaWdodDoyMV07CisgIFtaWE1hdHJpeFV0aWwgY2xlYXJNYXRyaXg6bWF0cml4XTsKKyAgW1pYTWF0cml4VXRpbCBlbWJlZEJhc2ljUGF0dGVybnM6W1pYUVJDb2RlVmVyc2lvbiB2ZXJzaW9uRm9yTnVtYmVyOjFdIG1hdHJpeDptYXRyaXggZXJyb3I6bmlsXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0KKyAgICBAIiAxIDEgMSAxIDEgMSAxIDAgICAgICAgICAgIDAgMSAxIDEgMSAxIDEgMVxuIgorICAgICAiIDEgMCAwIDAgMCAwIDEgMCAgICAgICAgICAgMCAxIDAgMCAwIDAgMCAxXG4iCisgICAgICIgMSAwIDEgMSAxIDAgMSAwICAgICAgICAgICAwIDEgMCAxIDEgMSAwIDFcbiIKKyAgICAgIiAxIDAgMSAxIDEgMCAxIDAgICAgICAgICAgIDAgMSAwIDEgMSAxIDAgMVxuIgorICAgICAiIDEgMCAxIDEgMSAwIDEgMCAgICAgICAgICAgMCAxIDAgMSAxIDEgMCAxXG4iCisgICAgICIgMSAwIDAgMCAwIDAgMSAwICAgICAgICAgICAwIDEgMCAwIDAgMCAwIDFcbiIKKyAgICAgIiAxIDEgMSAxIDEgMSAxIDAgMSAwIDEgMCAxIDAgMSAxIDEgMSAxIDEgMVxuIgorICAgICAiIDAgMCAwIDAgMCAwIDAgMCAgICAgICAgICAgMCAwIDAgMCAwIDAgMCAwXG4iCisgICAgICIgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiIDAgMCAwIDAgMCAwIDAgMCAxICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgMSAxIDEgMSAxIDEgMSAwICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAxIDAgMCAwIDAgMCAxIDAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiIDEgMCAxIDEgMSAwIDEgMCAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgMSAwIDEgMSAxIDAgMSAwICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAxIDAgMSAxIDEgMCAxIDAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiIDEgMCAwIDAgMCAwIDEgMCAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgMSAxIDEgMSAxIDEgMSAwICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFttYXRyaXggZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBtYXRyaXggdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7Cit9CisKKy0gKHZvaWQpdGVzdEVtYmVkQmFzaWNQYXR0ZXJuczIgeworICAvLyBWZXJzaW9uIDIuICBQb3NpdGlvbiBhZGp1c3RtZW50IHBhdHRlcm4gc2hvdWxkIGFwcHBlYXIgYXQgcmlnaHQKKyAgLy8gYm90dG9tIGNvcm5lci4KKyAgWlhCeXRlTWF0cml4ICptYXRyaXggPSBbW1pYQnl0ZU1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDoyNSBoZWlnaHQ6MjVdOworICBbWlhNYXRyaXhVdGlsIGNsZWFyTWF0cml4Om1hdHJpeF07CisgIFtaWE1hdHJpeFV0aWwgZW1iZWRCYXNpY1BhdHRlcm5zOltaWFFSQ29kZVZlcnNpb24gdmVyc2lvbkZvck51bWJlcjoyXSBtYXRyaXg6bWF0cml4IGVycm9yOm5pbF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9CisgICAgQCIgMSAxIDEgMSAxIDEgMSAwICAgICAgICAgICAgICAgICAgIDAgMSAxIDEgMSAxIDEgMVxuIgorICAgICAiIDEgMCAwIDAgMCAwIDEgMCAgICAgICAgICAgICAgICAgICAwIDEgMCAwIDAgMCAwIDFcbiIKKyAgICAgIiAxIDAgMSAxIDEgMCAxIDAgICAgICAgICAgICAgICAgICAgMCAxIDAgMSAxIDEgMCAxXG4iCisgICAgICIgMSAwIDEgMSAxIDAgMSAwICAgICAgICAgICAgICAgICAgIDAgMSAwIDEgMSAxIDAgMVxuIgorICAgICAiIDEgMCAxIDEgMSAwIDEgMCAgICAgICAgICAgICAgICAgICAwIDEgMCAxIDEgMSAwIDFcbiIKKyAgICAgIiAxIDAgMCAwIDAgMCAxIDAgICAgICAgICAgICAgICAgICAgMCAxIDAgMCAwIDAgMCAxXG4iCisgICAgICIgMSAxIDEgMSAxIDEgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAxIDEgMSAxIDEgMVxuIgorICAgICAiIDAgMCAwIDAgMCAwIDAgMCAgICAgICAgICAgICAgICAgICAwIDAgMCAwIDAgMCAwIDBcbiIKKyAgICAgIiAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMSAxIDEgMSAxICAgICAgICBcbiIKKyAgICAgIiAwIDAgMCAwIDAgMCAwIDAgMSAgICAgICAgICAgICAgIDEgMCAwIDAgMSAgICAgICAgXG4iCisgICAgICIgMSAxIDEgMSAxIDEgMSAwICAgICAgICAgICAgICAgICAxIDAgMSAwIDEgICAgICAgIFxuIgorICAgICAiIDEgMCAwIDAgMCAwIDEgMCAgICAgICAgICAgICAgICAgMSAwIDAgMCAxICAgICAgICBcbiIKKyAgICAgIiAxIDAgMSAxIDEgMCAxIDAgICAgICAgICAgICAgICAgIDEgMSAxIDEgMSAgICAgICAgXG4iCisgICAgICIgMSAwIDEgMSAxIDAgMSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiIDEgMCAxIDEgMSAwIDEgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAxIDAgMCAwIDAgMCAxIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgMSAxIDEgMSAxIDEgMSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW21hdHJpeCBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIG1hdHJpeCB0byBlcXVhbCAlQCIsIGV4cGVjdGVkKTsKK30KKworLSAodm9pZCl0ZXN0RW1iZWRUeXBlSW5mbyB7CisgIC8vIFR5cGUgaW5mbyBiaXRzID0gMTAwMDAwMDExMDAxMTEwLgorICBaWEJ5dGVNYXRyaXggKm1hdHJpeCA9IFtbWlhCeXRlTWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOjIxIGhlaWdodDoyMV07CisgIFtaWE1hdHJpeFV0aWwgY2xlYXJNYXRyaXg6bWF0cml4XTsKKyAgW1pYTWF0cml4VXRpbCBlbWJlZFR5cGVJbmZvOltaWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsTV0gbWFza1BhdHRlcm46NSBtYXRyaXg6bWF0cml4IGVycm9yOm5pbF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9CisgICAgQCIgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiIDEgMCAwIDAgMCAwICAgMCAxICAgICAgICAgMSAxIDAgMCAxIDEgMSAwXG4iCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbbWF0cml4IGRlc2NyaXB0aW9uXSwgZXhwZWN0ZWQsIEAiRXhwZWN0ZWQgbWF0cml4IHRvIGVxdWFsICVAIiwgZXhwZWN0ZWQpOworfQorCistICh2b2lkKXRlc3RFbWJlZFZlcnNpb25JbmZvIHsKKyAgLy8gVmVyc2lvbiBpbmZvIGJpdHMgPSAwMDAxMTEgMTEwMDEwIDAxMDEwMAorICAvLyBBY3R1YWxseSwgdmVyc2lvbiA3IFFSIENvZGUgaGFzIDQ1eDQ1IG1hdHJpeCBidXQgd2UgdXNlIDIxeDIxIGhlcmUKKyAgLy8gc2luY2UgNDV4NDUgbWF0cml4IGlzIHRvbyBiaWcgdG8gZGVwaWN0LgorICBaWEJ5dGVNYXRyaXggKm1hdHJpeCA9IFtbWlhCeXRlTWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOjIxIGhlaWdodDoyMV07CisgIFtaWE1hdHJpeFV0aWwgY2xlYXJNYXRyaXg6bWF0cml4XTsKKyAgW1pYTWF0cml4VXRpbCBtYXliZUVtYmVkVmVyc2lvbkluZm86W1pYUVJDb2RlVmVyc2lvbiB2ZXJzaW9uRm9yTnVtYmVyOjddIG1hdHJpeDptYXRyaXggZXJyb3I6bmlsXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0KKyAgICBAIiAgICAgICAgICAgICAgICAgICAgIDAgMCAxICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAgICAgMCAxIDAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgICAgICAgICAwIDEgMCAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgIDAgMSAxICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAgICAgMSAxIDEgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgICAgICAgICAwIDAgMCAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiIDAgMCAwIDAgMSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgMCAxIDEgMSAxIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAxIDAgMCAxIDEgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFttYXRyaXggZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBtYXRyaXggdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7Cit9CisKKy0gKHZvaWQpdGVzdEVtYmVkRGF0YUJpdHMgeworICAvLyBDZWxscyBvdGhlciB0aGFuIGJhc2ljIHBhdHRlcm5zIHNob3VsZCBiZSBmaWxsZWQgd2l0aCB6ZXJvLgorICBaWEJ5dGVNYXRyaXggKm1hdHJpeCA9IFtbWlhCeXRlTWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOjIxIGhlaWdodDoyMV07CisgIFtaWE1hdHJpeFV0aWwgY2xlYXJNYXRyaXg6bWF0cml4XTsKKyAgW1pYTWF0cml4VXRpbCBlbWJlZEJhc2ljUGF0dGVybnM6W1pYUVJDb2RlVmVyc2lvbiB2ZXJzaW9uRm9yTnVtYmVyOjFdIG1hdHJpeDptYXRyaXggZXJyb3I6bmlsXTsKKyAgWlhCaXRBcnJheSAqYml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWE1hdHJpeFV0aWwgZW1iZWREYXRhQml0czpiaXRzIG1hc2tQYXR0ZXJuOi0xIG1hdHJpeDptYXRyaXggZXJyb3I6bmlsXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0KKyAgICBAIiAxIDEgMSAxIDEgMSAxIDAgMCAwIDAgMCAwIDAgMSAxIDEgMSAxIDEgMVxuIgorICAgICAiIDEgMCAwIDAgMCAwIDEgMCAwIDAgMCAwIDAgMCAxIDAgMCAwIDAgMCAxXG4iCisgICAgICIgMSAwIDEgMSAxIDAgMSAwIDAgMCAwIDAgMCAwIDEgMCAxIDEgMSAwIDFcbiIKKyAgICAgIiAxIDAgMSAxIDEgMCAxIDAgMCAwIDAgMCAwIDAgMSAwIDEgMSAxIDAgMVxuIgorICAgICAiIDEgMCAxIDEgMSAwIDEgMCAwIDAgMCAwIDAgMCAxIDAgMSAxIDEgMCAxXG4iCisgICAgICIgMSAwIDAgMCAwIDAgMSAwIDAgMCAwIDAgMCAwIDEgMCAwIDAgMCAwIDFcbiIKKyAgICAgIiAxIDEgMSAxIDEgMSAxIDAgMSAwIDEgMCAxIDAgMSAxIDEgMSAxIDEgMVxuIgorICAgICAiIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwXG4iCisgICAgICIgMCAwIDAgMCAwIDAgMSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDBcbiIKKyAgICAgIiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMFxuIgorICAgICAiIDAgMCAwIDAgMCAwIDEgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwXG4iCisgICAgICIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDBcbiIKKyAgICAgIiAwIDAgMCAwIDAgMCAxIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMFxuIgorICAgICAiIDAgMCAwIDAgMCAwIDAgMCAxIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwXG4iCisgICAgICIgMSAxIDEgMSAxIDEgMSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDBcbiIKKyAgICAgIiAxIDAgMCAwIDAgMCAxIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMFxuIgorICAgICAiIDEgMCAxIDEgMSAwIDEgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwXG4iCisgICAgICIgMSAwIDEgMSAxIDAgMSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDBcbiIKKyAgICAgIiAxIDAgMSAxIDEgMCAxIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMFxuIgorICAgICAiIDEgMCAwIDAgMCAwIDEgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwXG4iCisgICAgICIgMSAxIDEgMSAxIDEgMSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDBcbiI7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKFttYXRyaXggZGVzY3JpcHRpb25dLCBleHBlY3RlZCwgQCJFeHBlY3RlZCBtYXRyaXggdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7Cit9CisKKy0gKHZvaWQpdGVzdEJ1aWxkTWF0cml4IHsKKyAgLy8gRnJvbSBodHRwOi8vd3d3LnN3ZXRha2UuY29tL3FyL3FyNy5odG1sCisgIGNvbnN0IGludCBieXRlc0xlbiA9IDI2OworICBpbnQ4X3QgYnl0ZXNbYnl0ZXNMZW5dID0gezMyLCA2NSwgMjA1LCA2OSwgNDEsIDIyMCwgNDYsIDEyOCwgMjM2LAorICAgIDQyLCAxNTksIDc0LCAyMjEsIDI0NCwgMTY5LCAyMzksIDE1MCwgMTM4LAorICAgIDcwLCAyMzcsIDg1LCAyMjQsIDk2LCA3NCwgMjE5LCA2MX07CisgIFpYQml0QXJyYXkgKmJpdHMgPSBbW1pYQml0QXJyYXkgYWxsb2NdIGluaXRdOworICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzTGVuOyBpKyspIHsKKyAgICBbYml0cyBhcHBlbmRCaXRzOmJ5dGVzW2ldIG51bUJpdHM6OF07CisgIH0KKyAgWlhCeXRlTWF0cml4ICptYXRyaXggPSBbW1pYQnl0ZU1hdHJpeCBhbGxvY10gaW5pdFdpdGhXaWR0aDoyMSBoZWlnaHQ6MjFdOworICBbWlhNYXRyaXhVdGlsIGJ1aWxkTWF0cml4OmJpdHMKKyAgICAgICAgICAgICAgICAgICAgZWNMZXZlbDpbWlhFcnJvckNvcnJlY3Rpb25MZXZlbCBlcnJvckNvcnJlY3Rpb25MZXZlbEhdCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb246W1pYUVJDb2RlVmVyc2lvbiB2ZXJzaW9uRm9yTnVtYmVyOjFdCisgICAgICAgICAgICAgICAgbWFza1BhdHRlcm46MyAgLy8gTWFzayBwYXR0ZXJuIDMKKyAgICAgICAgICAgICAgICAgICAgIG1hdHJpeDptYXRyaXgKKyAgICAgICAgICAgICAgICAgICAgICBlcnJvcjpuaWxdOworICBOU1N0cmluZyAqZXhwZWN0ZWQgPQorICAgIEAiIDEgMSAxIDEgMSAxIDEgMCAwIDEgMSAwIDAgMCAxIDEgMSAxIDEgMSAxXG4iCisgICAgICIgMSAwIDAgMCAwIDAgMSAwIDAgMCAwIDAgMCAwIDEgMCAwIDAgMCAwIDFcbiIKKyAgICAgIiAxIDAgMSAxIDEgMCAxIDAgMCAwIDAgMSAwIDAgMSAwIDEgMSAxIDAgMVxuIgorICAgICAiIDEgMCAxIDEgMSAwIDEgMCAwIDEgMSAwIDAgMCAxIDAgMSAxIDEgMCAxXG4iCisgICAgICIgMSAwIDEgMSAxIDAgMSAwIDEgMSAwIDAgMSAwIDEgMCAxIDEgMSAwIDFcbiIKKyAgICAgIiAxIDAgMCAwIDAgMCAxIDAgMCAwIDEgMSAxIDAgMSAwIDAgMCAwIDAgMVxuIgorICAgICAiIDEgMSAxIDEgMSAxIDEgMCAxIDAgMSAwIDEgMCAxIDEgMSAxIDEgMSAxXG4iCisgICAgICIgMCAwIDAgMCAwIDAgMCAwIDEgMSAwIDEgMSAwIDAgMCAwIDAgMCAwIDBcbiIKKyAgICAgIiAwIDAgMSAxIDAgMCAxIDEgMSAwIDAgMSAxIDEgMSAwIDEgMCAwIDAgMFxuIgorICAgICAiIDEgMCAxIDAgMSAwIDAgMCAwIDAgMSAxIDEgMCAwIDEgMCAxIDEgMSAwXG4iCisgICAgICIgMSAxIDEgMSAwIDEgMSAwIDEgMCAxIDEgMSAwIDAgMSAxIDEgMCAxIDBcbiIKKyAgICAgIiAxIDAgMSAwIDEgMSAwIDEgMSAxIDAgMCAxIDEgMSAwIDAgMSAwIDEgMFxuIgorICAgICAiIDAgMCAxIDAgMCAxIDEgMSAwIDAgMCAwIDAgMCAxIDAgMSAxIDEgMSAxXG4iCisgICAgICIgMCAwIDAgMCAwIDAgMCAwIDEgMSAwIDEgMCAwIDAgMCAwIDEgMCAxIDFcbiIKKyAgICAgIiAxIDEgMSAxIDEgMSAxIDAgMSAxIDEgMSAwIDAgMCAwIDEgMCAxIDEgMFxuIgorICAgICAiIDEgMCAwIDAgMCAwIDEgMCAwIDAgMCAxIDAgMSAxIDEgMCAwIDAgMCAwXG4iCisgICAgICIgMSAwIDEgMSAxIDAgMSAwIDAgMSAwIDAgMSAxIDAgMCAxIDAgMCAxIDFcbiIKKyAgICAgIiAxIDAgMSAxIDEgMCAxIDAgMSAxIDAgMSAwIDAgMCAwIDAgMSAxIDEgMFxuIgorICAgICAiIDEgMCAxIDEgMSAwIDEgMCAxIDEgMSAxIDAgMCAwIDAgMSAxIDEgMCAwXG4iCisgICAgICIgMSAwIDAgMCAwIDAgMSAwIDAgMCAwIDAgMCAwIDAgMCAxIDAgMSAwIDBcbiIKKyAgICAgIiAxIDEgMSAxIDEgMSAxIDAgMCAwIDEgMSAxIDEgMSAwIDEgMCAwIDEgMFxuIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW21hdHJpeCBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIG1hdHJpeCB0byBlcXVhbCAlQCIsIGV4cGVjdGVkKTsKK30KKworLSAodm9pZCl0ZXN0RmluZE1TQlNldCB7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWE1hdHJpeFV0aWwgZmluZE1TQlNldDowXSwgMCwgQCJFeHBlY3RlZCBmaW5kTVNCU2V0IHRvIGVxdWFsIDAiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWF0cml4VXRpbCBmaW5kTVNCU2V0OjFdLCAxLCBAIkV4cGVjdGVkIGZpbmRNU0JTZXQgdG8gZXF1YWwgMSIpOworICBTVEFzc2VydEVxdWFscyhbWlhNYXRyaXhVdGlsIGZpbmRNU0JTZXQ6MHg4MF0sIDgsIEAiRXhwZWN0ZWQgZmluZE1TQlNldCB0byBlcXVhbCA4Iik7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWE1hdHJpeFV0aWwgZmluZE1TQlNldDoweDgwMDAwMDAwXSwgMzIsIEAiRXhwZWN0ZWQgZmluZE1TQlNldCB0byBlcXVhbCAzMiIpOworfQorCistICh2b2lkKXRlc3RDYWxjdWxhdGVCQ0hDb2RlIHsKKyAgLy8gRW5jb2Rpbmcgb2YgdHlwZSBpbmZvcm1hdGlvbi4KKyAgLy8gRnJvbSBBcHBlbmRpeCBDIGluIEpJU1gwNTEwOjIwMDQgKHAgNjUpCisgIFNUQXNzZXJ0RXF1YWxzKFtaWE1hdHJpeFV0aWwgY2FsY3VsYXRlQkNIQ29kZTo1IHBvbHk6MHg1MzddLCAweGRjLCBAIkV4cGVjdGVkIGNhbGN1bGF0ZUJDSENvZGUgdG8gZXF1YWwgMHhkYyIpOworICAvLyBGcm9tIGh0dHA6Ly93d3cuc3dldGFrZS5jb20vcXIvcXI2Lmh0bWwKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWF0cml4VXRpbCBjYWxjdWxhdGVCQ0hDb2RlOjB4MTMgcG9seToweDUzN10sIDB4MWMyLCBAIkV4cGVjdGVkIGNhbGN1bGF0ZUJDSENvZGUgdG8gZXF1YWwgMHgxYzIiKTsKKyAgLy8gRnJvbSBodHRwOi8vd3d3LnN3ZXRha2UuY29tL3FyL3FyMTEuaHRtbAorICBTVEFzc2VydEVxdWFscyhbWlhNYXRyaXhVdGlsIGNhbGN1bGF0ZUJDSENvZGU6MHgxYiBwb2x5OjB4NTM3XSwgMHgyMTQsIEAiRXhwZWN0ZWQgY2FsY3VsYXRlQkNIQ29kZSB0byBlcXVhbCAweDIxNCIpOworCisgIC8vIEVuY29maW5nIG9mIHZlcnNpb24gaW5mb3JtYXRpb24uCisgIC8vIEZyb20gQXBwZW5kaXggRCBpbiBKSVNYMDUxMDoyMDA0IChwIDY4KQorICBTVEFzc2VydEVxdWFscyhbWlhNYXRyaXhVdGlsIGNhbGN1bGF0ZUJDSENvZGU6NyBwb2x5OjB4MWYyNV0sIDB4Yzk0LCBAIkV4cGVjdGVkIGNhbGN1bGF0ZUJDSENvZGUgdG8gZXF1YWwgMHhjOTQiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWF0cml4VXRpbCBjYWxjdWxhdGVCQ0hDb2RlOjggcG9seToweDFmMjVdLCAweDViYywgQCJFeHBlY3RlZCBjYWxjdWxhdGVCQ0hDb2RlIHRvIGVxdWFsIDB4NWJjIik7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWE1hdHJpeFV0aWwgY2FsY3VsYXRlQkNIQ29kZTo5IHBvbHk6MHgxZjI1XSwgMHhhOTksIEAiRXhwZWN0ZWQgY2FsY3VsYXRlQkNIQ29kZSB0byBlcXVhbCAweGE5OSIpOworICBTVEFzc2VydEVxdWFscyhbWlhNYXRyaXhVdGlsIGNhbGN1bGF0ZUJDSENvZGU6MTAgcG9seToweDFmMjVdLCAweDRkMywgQCJFeHBlY3RlZCBjYWxjdWxhdGVCQ0hDb2RlIHRvIGVxdWFsIDB4NGQzIik7CisgIFNUQXNzZXJ0RXF1YWxzKFtaWE1hdHJpeFV0aWwgY2FsY3VsYXRlQkNIQ29kZToyMCBwb2x5OjB4MWYyNV0sIDB4OWE2LCBAIkV4cGVjdGVkIGNhbGN1bGF0ZUJDSENvZGUgdG8gZXF1YWwgMHg5YTYiKTsKKyAgU1RBc3NlcnRFcXVhbHMoW1pYTWF0cml4VXRpbCBjYWxjdWxhdGVCQ0hDb2RlOjMwIHBvbHk6MHgxZjI1XSwgMHhkNzUsIEAiRXhwZWN0ZWQgY2FsY3VsYXRlQkNIQ29kZSB0byBlcXVhbCAweGQ3NSIpOworICBTVEFzc2VydEVxdWFscyhbWlhNYXRyaXhVdGlsIGNhbGN1bGF0ZUJDSENvZGU6NDAgcG9seToweDFmMjVdLCAweGM2OSwgQCJFeHBlY3RlZCBjYWxjdWxhdGVCQ0hDb2RlIHRvIGVxdWFsIDB4YzY5Iik7Cit9CisKKy8vIFdlIGRvbid0IHRlc3QgYSBsb3Qgb2YgY2FzZXMgaW4gdGhpcyBmdW5jdGlvbiBzaW5jZSB3ZSd2ZSBhbHJlYWR5CisvLyB0ZXN0ZWQgdGhlbSBpbiBURVNUKGNhbGN1bGF0ZUJDSENvZGUpLgorLSAodm9pZCl0ZXN0TWFrZVZlcnNpb25JbmZvQml0cyB7CisgIC8vIEZyb20gQXBwZW5kaXggRCBpbiBKSVNYMDUxMDoyMDA0IChwIDY4KQorICBaWEJpdEFycmF5ICpiaXRzID0gW1taWEJpdEFycmF5IGFsbG9jXSBpbml0XTsKKyAgW1pYTWF0cml4VXRpbCBtYWtlVmVyc2lvbkluZm9CaXRzOltaWFFSQ29kZVZlcnNpb24gdmVyc2lvbkZvck51bWJlcjo3XSBiaXRzOmJpdHMgZXJyb3I6bmlsXTsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0gQCIgLi4uWFhYWFggLi5YLi5YLlggLi4iOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYml0cyBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIGJpdHMgdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7Cit9CisKKy8vIFdlIGRvbid0IHRlc3QgYSBsb3Qgb2YgY2FzZXMgaW4gdGhpcyBmdW5jdGlvbiBzaW5jZSB3ZSd2ZSBhbHJlYWR5CisvLyB0ZXN0ZWQgdGhlbSBpbiBURVNUKGNhbGN1bGF0ZUJDSENvZGUpLgorLSAodm9pZCl0ZXN0TWFrZVR5cGVJbmZvSW5mb0JpdHMgeworICAvLyBGcm9tIEFwcGVuZGl4IEMgaW4gSklTWDA1MTA6MjAwNCAocCA2NSkKKyAgWlhCaXRBcnJheSAqYml0cyA9IFtbWlhCaXRBcnJheSBhbGxvY10gaW5pdF07CisgIFtaWE1hdHJpeFV0aWwgbWFrZVR5cGVJbmZvQml0czpbWlhFcnJvckNvcnJlY3Rpb25MZXZlbCBlcnJvckNvcnJlY3Rpb25MZXZlbE1dIG1hc2tQYXR0ZXJuOjUgYml0czpiaXRzIGVycm9yOm5pbF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9IEAiIFguLi4uLi5YIFguLlhYWC4iOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhbYml0cyBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIGJpdHMgdG8gZXF1YWwgJUAiLCBleHBlY3RlZCk7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYUVJDb2RlVGVzdENhc2UuaCBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYUVJDb2RlVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDBiMGE2Ci0tLSAvZGV2L251bGwKKysrIGIvWlhpbmdPYmpDVGVzdHMvcXJjb2RlL2VuY29kZXIvWlhRUkNvZGVUZXN0Q2FzZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBaWGluZyBhdXRob3JzCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbXBvcnQgPFNlblRlc3RpbmdLaXQvU2VuVGVzdGluZ0tpdC5oPgorCitAaW50ZXJmYWNlIFpYUVJDb2RlVGVzdENhc2UgOiBTZW5UZXN0Q2FzZQorCitAZW5kCmRpZmYgLS1naXQgYS9aWGluZ09iakNUZXN0cy9xcmNvZGUvZW5jb2Rlci9aWFFSQ29kZVRlc3RDYXNlLm0gYi9aWGluZ09iakNUZXN0cy9xcmNvZGUvZW5jb2Rlci9aWFFSQ29kZVRlc3RDYXNlLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwOTVkNwotLS0gL2Rldi9udWxsCisrKyBiL1pYaW5nT2JqQ1Rlc3RzL3FyY29kZS9lbmNvZGVyL1pYUVJDb2RlVGVzdENhc2UubQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIFpYaW5nIGF1dGhvcnMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2ltcG9ydCAiWlhRUkNvZGVUZXN0Q2FzZS5oIgorCitAaW1wbGVtZW50YXRpb24gWlhRUkNvZGVUZXN0Q2FzZQorCistICh2b2lkKXRlc3QgeworICBaWFFSQ29kZSAqcXJDb2RlID0gW1taWFFSQ29kZSBhbGxvY10gaW5pdF07CisKKyAgLy8gRmlyc3QsIHRlc3Qgc2ltcGxlIHNldHRlcnMgYW5kIGdldHRlcnMuCisgIC8vIFdlIHVzZSBudW1iZXJzIG9mIHZlcnNpb24gNy1ILgorICBxckNvZGUubW9kZSA9IFtaWE1vZGUgYnl0ZU1vZGVdOworICBxckNvZGUuZWNMZXZlbCA9IFtaWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsSF07CisgIHFyQ29kZS52ZXJzaW9uID0gW1pYUVJDb2RlVmVyc2lvbiB2ZXJzaW9uRm9yTnVtYmVyOjddOworICBxckNvZGUubWFza1BhdHRlcm4gPSAzOworCisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHFyQ29kZS5tb2RlLCBbWlhNb2RlIGJ5dGVNb2RlXSwgQCJFeHBlY3RlZCBxckNvZGUgbW9kZSB0byBiZSBieXRlTW9kZSIpOworICBTVEFzc2VydEVxdWFsT2JqZWN0cyhxckNvZGUuZWNMZXZlbCwgW1pYRXJyb3JDb3JyZWN0aW9uTGV2ZWwgZXJyb3JDb3JyZWN0aW9uTGV2ZWxIXSwKKyAgICAgICAgICAgICAgICAgICAgICAgQCJFeHBlY3RlZCBxckNvZGUgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCB0byBiZSBIIik7CisgIFNUQXNzZXJ0RXF1YWxzKHFyQ29kZS52ZXJzaW9uLnZlcnNpb25OdW1iZXIsIDcsIEAiRXhwZWN0ZWQgcXJDb2RlIHZlcnNpb24gdG8gYmUgNyIpOworICBTVEFzc2VydEVxdWFscyhxckNvZGUubWFza1BhdHRlcm4sIDMsIEAiRXhwZWN0ZWQgcXJDb2RlIG1hc2tQYXR0ZXJuIHRvIGJlIDMiKTsKKworICAvLyBQcmVwYXJlIHRoZSBtYXRyaXguCisgIFpYQnl0ZU1hdHJpeCAqbWF0cml4ID0gW1taWEJ5dGVNYXRyaXggYWxsb2NdIGluaXRXaXRoV2lkdGg6NDUgaGVpZ2h0OjQ1XTsKKyAgLy8gSnVzdCBzZXQgYm9ndXMgemVyby9vbmUgdmFsdWVzLgorICBmb3IgKGludCB5ID0gMDsgeSA8IDQ1OyArK3kpIHsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ1OyArK3gpIHsKKyAgICAgIFttYXRyaXggc2V0WDp4IHk6eSBpbnRWYWx1ZTooeSArIHgpICUgMl07CisgICAgfQorICB9CisKKyAgLy8gU2V0IHRoZSBtYXRyaXguCisgIHFyQ29kZS5tYXRyaXggPSBtYXRyaXg7CisgIFNUQXNzZXJ0RXF1YWxPYmplY3RzKHFyQ29kZS5tYXRyaXgsIG1hdHJpeCwgQCJFeHBlY3RlZCBtYXRyaWNlcyB0byBiZSBlcXVhbCIpOworfQorCistICh2b2lkKXRlc3RUb1N0cmluZzEgeworICBaWFFSQ29kZSAqcXJDb2RlID0gW1taWFFSQ29kZSBhbGxvY10gaW5pdF07CisgIE5TU3RyaW5nICpleHBlY3RlZCA9CisgICAgQCI8PFxuIgorICAgICAiIG1vZGU6IChudWxsKVxuIgorICAgICAiIGVjTGV2ZWw6IChudWxsKVxuIgorICAgICAiIHZlcnNpb246IChudWxsKVxuIgorICAgICAiIG1hc2tQYXR0ZXJuOiAtMVxuIgorICAgICAiIG1hdHJpeDogKG51bGwpXG4iCisgICAgICI+PlxuIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW3FyQ29kZSBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIHFyQ29kZSB0byBlcXVhbCAlQCIsIGV4cGVjdGVkKTsKK30KKworLSAodm9pZCl0ZXN0VG9TdHJpbmcyIHsKKyAgWlhRUkNvZGUgKnFyQ29kZSA9IFtbWlhRUkNvZGUgYWxsb2NdIGluaXRdOworICBxckNvZGUubW9kZSA9IFtaWE1vZGUgYnl0ZU1vZGVdOworICBxckNvZGUuZWNMZXZlbCA9IFtaWEVycm9yQ29ycmVjdGlvbkxldmVsIGVycm9yQ29ycmVjdGlvbkxldmVsSF07CisgIHFyQ29kZS52ZXJzaW9uID0gW1pYUVJDb2RlVmVyc2lvbiB2ZXJzaW9uRm9yTnVtYmVyOjFdOworICBxckNvZGUubWFza1BhdHRlcm4gPSAzOworICBaWEJ5dGVNYXRyaXggKm1hdHJpeCA9IFtbWlhCeXRlTWF0cml4IGFsbG9jXSBpbml0V2l0aFdpZHRoOjIxIGhlaWdodDoyMV07CisgIGZvciAoaW50IHkgPSAwOyB5IDwgMjE7ICsreSkgeworICAgIGZvciAoaW50IHggPSAwOyB4IDwgMjE7ICsreCkgeworICAgICAgW21hdHJpeCBzZXRYOnggeTp5IGludFZhbHVlOih5ICsgeCkgJSAyXTsKKyAgICB9CisgIH0KKyAgcXJDb2RlLm1hdHJpeCA9IG1hdHJpeDsKKyAgTlNTdHJpbmcgKmV4cGVjdGVkID0KKyAgICBAIjw8XG4iCisgICAgICIgbW9kZTogQllURVxuIgorICAgICAiIGVjTGV2ZWw6IEhcbiIKKyAgICAgIiB2ZXJzaW9uOiAxXG4iCisgICAgICIgbWFza1BhdHRlcm46IDNcbiIKKyAgICAgIiBtYXRyaXg6XG4iCisgICAgICIgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDBcbiIKKyAgICAgIiAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMVxuIgorICAgICAiIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwXG4iCisgICAgICIgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDFcbiIKKyAgICAgIiAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMFxuIgorICAgICAiIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxXG4iCisgICAgICIgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDBcbiIKKyAgICAgIiAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMVxuIgorICAgICAiIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwXG4iCisgICAgICIgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDFcbiIKKyAgICAgIiAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMFxuIgorICAgICAiIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxXG4iCisgICAgICIgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDBcbiIKKyAgICAgIiAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMVxuIgorICAgICAiIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwXG4iCisgICAgICIgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDFcbiIKKyAgICAgIiAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMFxuIgorICAgICAiIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxXG4iCisgICAgICIgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDBcbiIKKyAgICAgIiAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMVxuIgorICAgICAiIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwIDEgMCAxIDAgMSAwXG4iCisgICAgICI+PlxuIjsKKyAgU1RBc3NlcnRFcXVhbE9iamVjdHMoW3FyQ29kZSBkZXNjcmlwdGlvbl0sIGV4cGVjdGVkLCBAIkV4cGVjdGVkIHFyQ29kZSB0byBlcXVhbCAlQCIsIGV4cGVjdGVkKTsKK30KKworLSAodm9pZCl0ZXN0SXNWYWxpZE1hc2tQYXR0ZXJuIHsKKyAgU1RBc3NlcnRGYWxzZShbWlhRUkNvZGUgaXNWYWxpZE1hc2tQYXR0ZXJuOi0xXSwgQCJFeHBlY3RlZCAtMSBub3QgdG8gYmUgYSB2YWxpZCBtYXNrIHBhdHRlcm4iKTsKKyAgU1RBc3NlcnRUcnVlKFtaWFFSQ29kZSBpc1ZhbGlkTWFza1BhdHRlcm46MF0sIEAiRXhwZWN0ZWQgMCB0byBiZSBhIHZhbGlkIG1hc2sgcGF0dGVybiIpOworICBTVEFzc2VydFRydWUoW1pYUVJDb2RlIGlzVmFsaWRNYXNrUGF0dGVybjo3XSwgQCJFeHBlY3RlZCA3IHRvIGJlIGEgdmFsaWQgbWFzayBwYXR0ZXJuIik7CisgIFNUQXNzZXJ0RmFsc2UoW1pYUVJDb2RlIGlzVmFsaWRNYXNrUGF0dGVybjo4XSwgQCJFeHBlY3RlZCA4IG5vdCB0byBiZSBhIHZhbGlkIG1hc2sgcGF0dGVybiIpOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9pb3MtUHJlZml4LnBjaCBiL2lvcy1QcmVmaXgucGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NmUyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9pb3MtUHJlZml4LnBjaApAQCAtMCwwICsxLDcgQEAKKy8vCisvLyBQcmVmaXggaGVhZGVyIGZvciBhbGwgc291cmNlIGZpbGVzIG9mIHRoZSAnWlhpbmdPYmpDJyB0YXJnZXQgaW4gdGhlICdaWGluZ09iakMnIHByb2plY3QKKy8vCisKKyNpZmRlZiBfX09CSkNfXworICAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvb3N4LVByZWZpeC5wY2ggYi9vc3gtUHJlZml4LnBjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDM1OGVhCi0tLSAvZGV2L251bGwKKysrIGIvb3N4LVByZWZpeC5wY2gKQEAgLTAsMCArMSw5IEBACisvLworLy8gUHJlZml4IGhlYWRlciBmb3IgYWxsIHNvdXJjZSBmaWxlcyBvZiB0aGUgJ1pYaW5nT2JqQycgdGFyZ2V0IGluIHRoZSAnWlhpbmdPYmpDJyBwcm9qZWN0CisvLworCisjaWZkZWYgX19PQkpDX18KKworI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKworI2VuZGlmCg==