VGhpcyBpcyAuLi8uLi9nbXAvZG9jL2dtcC5pbmZvLCBwcm9kdWNlZCBieSBtYWtlaW5mbyB2ZXJzaW9uIDQuMTMgZnJvbQouLi8uLi9nbXAvZG9jL2dtcC50ZXhpLgoKVGhpcyBtYW51YWwgZGVzY3JpYmVzIGhvdyB0byBpbnN0YWxsIGFuZCB1c2UgdGhlIEdOVSBtdWx0aXBsZSBwcmVjaXNpb24KYXJpdGhtZXRpYyBsaWJyYXJ5LCB2ZXJzaW9uIDYuMC4wLgoKICAgQ29weXJpZ2h0IDE5OTEsIDE5OTMtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KCiAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcwpkb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbgoxLjMgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CndpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIHRoZSBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyAiQSBHTlUKTWFudWFsIiwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgIllvdSBoYXZlIGZyZWVkb20gdG8gY29weQphbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUgc29mdHdhcmUiLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlCmlzIGluY2x1ZGVkIGluICpub3RlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTo6LgoKSU5GTy1ESVItU0VDVElPTiBHTlUgbGlicmFyaWVzClNUQVJULUlORk8tRElSLUVOVFJZCiogZ21wOiAoZ21wKS4gICAgICAgICAgICAgICAgICAgR05VIE11bHRpcGxlIFByZWNpc2lvbiBBcml0aG1ldGljIExpYnJhcnkuCkVORC1JTkZPLURJUi1FTlRSWQoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IEV4YWN0IFJlbWFpbmRlciwgIE5leHQ6IFNtYWxsIFF1b3RpZW50IERpdmlzaW9uLCAgUHJldjogRXhhY3QgRGl2aXNpb24sICBVcDogRGl2aXNpb24gQWxnb3JpdGhtcwoKMTUuMi42IEV4YWN0IFJlbWFpbmRlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJZiB0aGUgZXhhY3QgZGl2aXNpb24gYWxnb3JpdGhtIGlzIGRvbmUgd2l0aCBhIGZ1bGwgc3VidHJhY3Rpb24gYXQgZWFjaApzdGFnZSBhbmQgdGhlIGRpdmlkZW5kIGlzbid0IGEgbXVsdGlwbGUgb2YgdGhlIGRpdmlzb3IsIHRoZW4gbG93IHplcm8KbGltYnMgYXJlIHByb2R1Y2VkIGJ1dCB3aXRoIGEgcmVtYWluZGVyIGluIHRoZSBoaWdoIGxpbWJzLiAgRm9yCmRpdmlkZW5kIGEsIGRpdmlzb3IgZCwgcXVvdGllbnQgcSwgYW5kIGIgPSAyXm1wX2JpdHNfcGVyX2xpbWIsIHRoaXMKcmVtYWluZGVyIHIgaXMgb2YgdGhlIGZvcm0KCiAgICAgYSA9IHEqZCArIHIqYl5uCgogICBuIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiB6ZXJvIGxpbWJzIHByb2R1Y2VkIGJ5IHRoZSBzdWJ0cmFjdGlvbnMsCnRoYXQgYmVpbmcgdGhlIG51bWJlciBvZiBsaW1icyBwcm9kdWNlZCBmb3IgcS4gIHIgd2lsbCBiZSBpbiB0aGUgcmFuZ2UKMDw9cjxkIGFuZCBjYW4gYmUgdmlld2VkIGFzIGEgcmVtYWluZGVyLCBidXQgb25lIHNoaWZ0ZWQgdXAgYnkgYSBmYWN0b3IKb2YgYl5uLgoKICAgQ2Fycnlpbmcgb3V0IGZ1bGwgc3VidHJhY3Rpb25zIGF0IGVhY2ggc3RhZ2UgbWVhbnMgdGhlIHNhbWUgbnVtYmVyCm9mIGNyb3NzIHByb2R1Y3RzIG11c3QgYmUgZG9uZSBhcyBhIG5vcm1hbCBkaXZpc2lvbiwgYnV0IHRoZXJlJ3Mgc3RpbGwKc29tZSBzaW5nbGUgbGltYiBkaXZpc2lvbnMgc2F2ZWQuICBXaGVuIGQgaXMgYSBzaW5nbGUgbGltYiBzb21lCnNpbXBsaWZpY2F0aW9ucyBhcmlzZSwgcHJvdmlkaW5nIGdvb2Qgc3BlZWR1cHMgb24gYSBudW1iZXIgb2YKcHJvY2Vzc29ycy4KCiAgIFRoZSBmdW5jdGlvbnMgYG1wbl9kaXZleGFjdF9ieTMnLCBgbXBuX21vZGV4YWN0XzFfb2RkJyBhbmQgdGhlCmludGVybmFsIGBtcG5fcmVkY19YJyBmdW5jdGlvbnMgZGlmZmVyIHN1YnRseSBpbiBob3cgdGhleSByZXR1cm4gciwKbGVhZGluZyB0byBzb21lIG5lZ2F0aW9ucyBpbiB0aGUgYWJvdmUgZm9ybXVsYSwgYnV0IGFsbCBhcmUgZXNzZW50aWFsbHkKdGhlIHNhbWUuCgogICBDbGVhcmx5IHIgaXMgemVybyB3aGVuIGEgaXMgYSBtdWx0aXBsZSBvZiBkLCBhbmQgdGhpcyBsZWFkcyB0bwpkaXZpc2liaWxpdHkgb3IgY29uZ3J1ZW5jZSB0ZXN0cyB3aGljaCBhcmUgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQKdGhhbiBhIG5vcm1hbCBkaXZpc2lvbi4KCiAgIFRoZSBmYWN0b3Igb2YgYl5uIG9uIHIgY2FuIGJlIGlnbm9yZWQgaW4gYSBHQ0Qgd2hlbiBkIGlzIG9kZCwgaGVuY2UKdGhlIHVzZSBvZiBgbXBuX21vZGV4YWN0XzFfb2RkJyBieSBgbXBuX2djZF8xJyBhbmQgYG1wel9rcm9uZWNrZXJfdWknCmV0YyAoKm5vdGUgR3JlYXRlc3QgQ29tbW9uIERpdmlzb3IgQWxnb3JpdGhtczo6KS4KCiAgIE1vbnRnb21lcnkncyBSRURDIG1ldGhvZCBmb3IgbW9kdWxhciBtdWx0aXBsaWNhdGlvbnMgdXNlcyBvcGVyYW5kcwpvZiB0aGUgZm9ybSBvZiB4KmJeLW4gYW5kIHkqYl4tbiBhbmQgb24gY2FsY3VsYXRpbmcgKHgqYl4tbikqKHkqYl4tbikKdXNlcyB0aGUgZmFjdG9yIG9mIGJebiBpbiB0aGUgZXhhY3QgcmVtYWluZGVyIHRvIHJlYWNoIGEgcHJvZHVjdCBpbiB0aGUKc2FtZSBmb3JtICh4KnkpKmJeLW4gKCpub3RlIE1vZHVsYXIgUG93ZXJpbmcgQWxnb3JpdGhtOjopLgoKICAgTm90aWNlIHRoYXQgciBnZW5lcmFsbHkgZ2l2ZXMgbm8gdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHRoZQpvcmRpbmFyeSByZW1haW5kZXIgYSBtb2QgZCBzaW5jZSBiXm4gbW9kIGQgY291bGQgYmUgYW55dGhpbmcuICBJZgpob3dldmVyIGJebiA9PSAxIG1vZCBkLCB0aGVuIHIgaXMgdGhlIG5lZ2F0aXZlIG9mIHRoZSBvcmRpbmFyeQpyZW1haW5kZXIuICBUaGlzIG9jY3VycyB3aGVuZXZlciBkIGlzIGEgZmFjdG9yIG9mIGJebi0xLCBhcyBmb3IgZXhhbXBsZQp3aXRoIDMgaW4gYG1wbl9kaXZleGFjdF9ieTMnLiAgRm9yIGEgMzIgb3IgNjQgYml0IGxpbWIgb3RoZXIgc3VjaApmYWN0b3JzIGluY2x1ZGUgNSwgMTcgYW5kIDI1NywgYnV0IG5vIHBhcnRpY3VsYXIgdXNlIGhhcyBiZWVuIGZvdW5kIGZvcgp0aGlzLgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IFNtYWxsIFF1b3RpZW50IERpdmlzaW9uLCAgUHJldjogRXhhY3QgUmVtYWluZGVyLCAgVXA6IERpdmlzaW9uIEFsZ29yaXRobXMKCjE1LjIuNyBTbWFsbCBRdW90aWVudCBEaXZpc2lvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkFuIE54TSBkaXZpc2lvbiB3aGVyZSB0aGUgbnVtYmVyIG9mIHF1b3RpZW50IGxpbWJzIFE9Ti1NIGlzIHNtYWxsIGNhbgpiZSBvcHRpbWl6ZWQgc29tZXdoYXQuCgogICBBbiBvcmRpbmFyeSBiYXNlY2FzZSBkaXZpc2lvbiBub3JtYWxpemVzIHRoZSBkaXZpc29yIGJ5IHNoaWZ0aW5nIGl0CnRvIG1ha2UgdGhlIGhpZ2ggYml0IHNldCwgc2hpZnRpbmcgdGhlIGRpdmlkZW5kIGFjY29yZGluZ2x5LCBhbmQKc2hpZnRpbmcgdGhlIHJlbWFpbmRlciBiYWNrIGRvd24gYXQgdGhlIGVuZCBvZiB0aGUgY2FsY3VsYXRpb24uICBUaGlzCmlzIHdhc3RlZnVsIGlmIG9ubHkgYSBmZXcgcXVvdGllbnQgbGltYnMgYXJlIHRvIGJlIGZvcm1lZC4gIEluc3RlYWQgYQpkaXZpc2lvbiBvZiBqdXN0IHRoZSB0b3AgMipRIGxpbWJzIG9mIHRoZSBkaXZpZGVuZCBieSB0aGUgdG9wIFEgbGltYnMKb2YgdGhlIGRpdmlzb3IgY2FuIGJlIHVzZWQgdG8gZm9ybSBhIHRyaWFsIHF1b3RpZW50LiAgVGhpcyByZXF1aXJlcwpvbmx5IHRob3NlIGxpbWJzIG5vcm1hbGl6ZWQsIG5vdCB0aGUgd2hvbGUgb2YgdGhlIGRpdmlzb3IgYW5kIGRpdmlkZW5kLgoKICAgQSBtdWx0aXBseSBhbmQgc3VidHJhY3QgdGhlbiBhcHBsaWVzIHRoZSB0cmlhbCBxdW90aWVudCB0byB0aGUgTS1RCnVudXNlZCBsaW1icyBvZiB0aGUgZGl2aXNvciBhbmQgTi1RIGRpdmlkZW5kIGxpbWJzICh3aGljaCBpbmNsdWRlcyBRCmxpbWJzIHJlbWFpbmluZyBmcm9tIHRoZSB0cmlhbCBxdW90aWVudCBkaXZpc2lvbikuICBUaGUgc3RhcnRpbmcgdHJpYWwKcXVvdGllbnQgY2FuIGJlIDEgb3IgMiB0b28gYmlnLCBidXQgYWxsIGNhc2VzIG9mIDIgdG9vIGJpZyBhbmQgbW9zdApjYXNlcyBvZiAxIHRvbyBiaWcgYXJlIGRldGVjdGVkIGJ5IGZpcnN0IGNvbXBhcmluZyB0aGUgbW9zdCBzaWduaWZpY2FudApsaW1icyB0aGF0IHdpbGwgYXJpc2UgZnJvbSB0aGUgc3VidHJhY3Rpb24uICBBbiBhZGRiYWNrIGlzIGRvbmUgaWYgdGhlCnF1b3RpZW50IHN0aWxsIHR1cm5zIG91dCB0byBiZSAxIHRvbyBiaWcuCgogICBUaGlzIHdob2xlIHByb2NlZHVyZSBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBvbmUgc3RlcCBvZiB0aGUKYmFzZWNhc2UgYWxnb3JpdGhtIGRvbmUgaW4gYSBRIGxpbWIgYmFzZSwgdGhvdWdoIHdpdGggdGhlIHRyaWFsCnF1b3RpZW50IHRlc3QgZG9uZSBvbmx5IHdpdGggdGhlIGhpZ2ggbGltYnMsIG5vdCBhbiBlbnRpcmUgUSBsaW1iCiJkaWdpdCIgcHJvZHVjdC4gIFRoZSBjb3JyZWN0bmVzcyBvZiB0aGlzIHdlYWtlciB0ZXN0IGNhbiBiZQplc3RhYmxpc2hlZCBieSBmb2xsb3dpbmcgdGhlIGFyZ3VtZW50IG9mIEtudXRoIHNlY3Rpb24gNC4zLjEgZXhlcmNpc2UKMjAgYnV0IHdpdGggdGhlIHYyKnE+YipyK3UyIGNvbmRpdGlvbiBhcHByb3ByaWF0ZWx5IHJlbGF4ZWQuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogR3JlYXRlc3QgQ29tbW9uIERpdmlzb3IgQWxnb3JpdGhtcywgIE5leHQ6IFBvd2VyaW5nIEFsZ29yaXRobXMsICBQcmV2OiBEaXZpc2lvbiBBbGdvcml0aG1zLCAgVXA6IEFsZ29yaXRobXMKCjE1LjMgR3JlYXRlc3QgQ29tbW9uIERpdmlzb3IKPT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNZW51OgoKKiBCaW5hcnkgR0NEOjoKKiBMZWhtZXIncyBBbGdvcml0aG06OgoqIFN1YnF1YWRyYXRpYyBHQ0Q6OgoqIEV4dGVuZGVkIEdDRDo6CiogSmFjb2JpIFN5bWJvbDo6CgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogQmluYXJ5IEdDRCwgIE5leHQ6IExlaG1lcidzIEFsZ29yaXRobSwgIFByZXY6IEdyZWF0ZXN0IENvbW1vbiBEaXZpc29yIEFsZ29yaXRobXMsICBVcDogR3JlYXRlc3QgQ29tbW9uIERpdmlzb3IgQWxnb3JpdGhtcwoKMTUuMy4xIEJpbmFyeSBHQ0QKLS0tLS0tLS0tLS0tLS0tLS0KCkF0IHNtYWxsIHNpemVzIEdNUCB1c2VzIGFuIE8oTl4yKSBiaW5hcnkgc3R5bGUgR0NELiAgVGhpcyBpcyBkZXNjcmliZWQKaW4gbWFueSB0ZXh0Ym9va3MsIGZvciBleGFtcGxlIEtudXRoIHNlY3Rpb24gNC41LjIgYWxnb3JpdGhtIEIuICBJdApzaW1wbHkgY29uc2lzdHMgb2Ygc3VjY2Vzc2l2ZWx5IHJlZHVjaW5nIG9kZCBvcGVyYW5kcyBhIGFuZCBiIHVzaW5nCgogICAgIGEsYiA9IGFicyhhLWIpLG1pbihhLGIpCiAgICAgc3RyaXAgZmFjdG9ycyBvZiAyIGZyb20gYQoKICAgVGhlIEV1Y2xpZGVhbiBHQ0QgYWxnb3JpdGhtLCBhcyBwZXIgS251dGggYWxnb3JpdGhtcyBFIGFuZCBBLApyZXBlYXRlZGx5IGNvbXB1dGVzIHRoZSBxdW90aWVudCBxID0gZmxvb3IoYS9iKSBhbmQgcmVwbGFjZXMgYSxiIGJ5IHYsCnUgLSBxIHYuIFRoZSBiaW5hcnkgYWxnb3JpdGhtIGhhcyBzbyBmYXIgYmVlbiBmb3VuZCB0byBiZSBmYXN0ZXIgdGhhbgp0aGUgRXVjbGlkZWFuIGFsZ29yaXRobSBldmVyeXdoZXJlLiAgT25lIHJlYXNvbiB0aGUgYmluYXJ5IG1ldGhvZCBkb2VzCndlbGwgaXMgdGhhdCB0aGUgaW1wbGllZCBxdW90aWVudCBhdCBlYWNoIHN0ZXAgaXMgdXN1YWxseSBzbWFsbCwgc28Kb2Z0ZW4gb25seSBvbmUgb3IgdHdvIHN1YnRyYWN0aW9ucyBhcmUgbmVlZGVkIHRvIGdldCB0aGUgc2FtZSBlZmZlY3QgYXMKYSBkaXZpc2lvbi4gIFF1b3RpZW50cyAxLCAyIGFuZCAzIGZvciBleGFtcGxlIG9jY3VyIDY3LjclIG9mIHRoZSB0aW1lLApzZWUgS251dGggc2VjdGlvbiA0LjUuMyBUaGVvcmVtIEUuCgogICBXaGVuIHRoZSBpbXBsaWVkIHF1b3RpZW50IGlzIGxhcmdlLCBtZWFuaW5nIGIgaXMgbXVjaCBzbWFsbGVyIHRoYW4KYSwgdGhlbiBhIGRpdmlzaW9uIGlzIHdvcnRod2hpbGUuICBUaGlzIGlzIHRoZSBiYXNpcyBmb3IgdGhlIGluaXRpYWwgYQptb2QgYiByZWR1Y3Rpb25zIGluIGBtcG5fZ2NkJyBhbmQgYG1wbl9nY2RfMScgKHRoZSBsYXR0ZXIgZm9yIGJvdGggTngxCmFuZCAxeDEgY2FzZXMpLiAgQnV0IGFmdGVyIHRoYXQgaW5pdGlhbCByZWR1Y3Rpb24sIGJpZyBxdW90aWVudHMgb2NjdXIKdG9vIHJhcmVseSB0byBtYWtlIGl0IHdvcnRoIGNoZWNraW5nIGZvciB0aGVtLgoKCiAgIFRoZSBmaW5hbCAxeDEgR0NEIGluIGBtcG5fZ2NkXzEnIGlzIGRvbmUgaW4gdGhlIGdlbmVyaWMgQyBjb2RlIGFzCmRlc2NyaWJlZCBhYm92ZS4gIEZvciB0d28gTi1iaXQgb3BlcmFuZHMsIHRoZSBhbGdvcml0aG0gdGFrZXMgYWJvdXQKMC42OCBpdGVyYXRpb25zIHBlciBiaXQuICBGb3Igb3B0aW11bSBwZXJmb3JtYW5jZSBzb21lIGF0dGVudGlvbiBuZWVkcwp0byBiZSBwYWlkIHRvIHRoZSB3YXkgdGhlIGZhY3RvcnMgb2YgMiBhcmUgc3RyaXBwZWQgZnJvbSBhLgoKICAgRmlyc3RseSBpdCBtYXkgYmUgbm90ZWQgdGhhdCBpbiB0d29zIGNvbXBsZW1lbnQgdGhlIG51bWJlciBvZiBsb3cKemVybyBiaXRzIG9uIGEtYiBpcyB0aGUgc2FtZSBhcyBiLWEsIHNvIGNvdW50aW5nIG9yIHRlc3RpbmcgY2FuIGJlZ2luIG9uCmEtYiB3aXRob3V0IHdhaXRpbmcgZm9yIGFicyhhLWIpIHRvIGJlIGRldGVybWluZWQuCgogICBBIGxvb3Agc3RyaXBwaW5nIGxvdyB6ZXJvIGJpdHMgdGVuZHMgbm90IHRvIGJyYW5jaCBwcmVkaWN0IHdlbGwsCnNpbmNlIHRoZSBjb25kaXRpb24gaXMgZGF0YSBkZXBlbmRlbnQuICBCdXQgb24gYXZlcmFnZSB0aGVyZSdzIG9ubHkgYQpmZXcgbG93IHplcm9zLCBzbyBhbiBvcHRpb24gaXMgdG8gc3RyaXAgb25lIG9yIHR3byBiaXRzIGFyaXRobWV0aWNhbGx5CnRoZW4gbG9vcCBmb3IgbW9yZSAoYXMgZG9uZSBmb3IgQU1EIEs2KS4gIE9yIHVzZSBhIGxvb2t1cCB0YWJsZSB0byBnZXQKYSBjb3VudCBmb3Igc2V2ZXJhbCBiaXRzIHRoZW4gbG9vcCBmb3IgbW9yZSAoYXMgZG9uZSBmb3IgQU1EIEs3KS4gIEFuCmFsdGVybmF0aXZlIGFwcHJvYWNoIGlzIHRvIGtlZXAganVzdCBvbmUgb2YgYSBvciBiIG9kZCBhbmQgaXRlcmF0ZQoKICAgICBhLGIgPSBhYnMoYS1iKSwgbWluKGEsYikKICAgICBhID0gYS8yIGlmIGV2ZW4KICAgICBiID0gYi8yIGlmIGV2ZW4KCiAgIFRoaXMgcmVxdWlyZXMgYWJvdXQgMS4yNSBpdGVyYXRpb25zIHBlciBiaXQsIGJ1dCBzdHJpcHBpbmcgb2YgYQpzaW5nbGUgYml0IGF0IGVhY2ggc3RlcCBhdm9pZHMgYW55IGJyYW5jaGluZy4gIFJlcGVhdGluZyB0aGUgYml0IHN0cmlwCnJlZHVjZXMgdG8gYWJvdXQgMC45IGl0ZXJhdGlvbnMgcGVyIGJpdCwgd2hpY2ggbWF5IGJlIGEgd29ydGh3aGlsZQp0cmFkZW9mZi4KCiAgIEdlbmVyYWxseSB3aXRoIHRoZSBhYm92ZSBhcHByb2FjaGVzIGEgc3BlZWQgb2YgcGVyaGFwcyA2IGN5Y2xlcyBwZXIKYml0IGNhbiBiZSBhY2hpZXZlZCwgd2hpY2ggaXMgc3RpbGwgbm90IHRlcnJpYmx5IGZhc3Qgd2l0aCBmb3IgaW5zdGFuY2UKYSA2NC1iaXQgR0NEIHRha2luZyBuZWFybHkgNDAwIGN5Y2xlcy4gIEl0J3MgdGhpcyBzb3J0IG9mIHRpbWUgd2hpY2gKbWVhbnMgaXQncyBub3QgdXN1YWxseSBhZHZhbnRhZ2VvdXMgdG8gY29tYmluZSBhIHNldCBvZiBkaXZpc2liaWxpdHkKdGVzdHMgaW50byBhIEdDRC4KCiAgIEN1cnJlbnRseSwgdGhlIGJpbmFyeSBhbGdvcml0aG0gaXMgdXNlZCBmb3IgR0NEIG9ubHkgd2hlbiBOIDwgMy4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBMZWhtZXIncyBBbGdvcml0aG0sICBOZXh0OiBTdWJxdWFkcmF0aWMgR0NELCAgUHJldjogQmluYXJ5IEdDRCwgIFVwOiBHcmVhdGVzdCBDb21tb24gRGl2aXNvciBBbGdvcml0aG1zCgoxNS4zLjIgTGVobWVyJ3MgYWxnb3JpdGhtCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkxlaG1lcidzIGltcHJvdmVtZW50IG9mIHRoZSBFdWNsaWRlYW4gYWxnb3JpdGhtcyBpcyBiYXNlZCBvbiB0aGUKb2JzZXJ2YXRpb24gdGhhdCB0aGUgaW5pdGlhbCBwYXJ0IG9mIHRoZSBxdW90aWVudCBzZXF1ZW5jZSBkZXBlbmRzIG9ubHkKb24gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgcGFydHMgb2YgdGhlIGlucHV0cy4gVGhlIHZhcmlhbnQgb2YgTGVobWVyJ3MKYWxnb3JpdGhtIHVzZWQgaW4gR01QIHNwbGl0cyBvZmYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgdHdvIGxpbWJzLCBhcwpzdWdnZXN0ZWQsIGUuZy4sIGluICJBIERvdWJsZS1EaWdpdCBMZWhtZXItRXVjbGlkIEFsZ29yaXRobSIgYnkKSmViZWxlYW4gKCpub3RlIFJlZmVyZW5jZXM6OikuIFRoZSBxdW90aWVudHMgb2YgdHdvIGRvdWJsZS1saW1iIGlucHV0cwphcmUgY29sbGVjdGVkIGFzIGEgMiBieSAyIG1hdHJpeCB3aXRoIHNpbmdsZS1saW1iIGVsZW1lbnRzLiBUaGlzIGlzCmRvbmUgYnkgdGhlIGZ1bmN0aW9uIGBtcG5faGdjZDInLiBUaGUgcmVzdWx0aW5nIG1hdHJpeCBpcyBhcHBsaWVkIHRvCnRoZSBpbnB1dHMgdXNpbmcgYG1wbl9tdWxfMScgYW5kIGBtcG5fc3VibXVsXzEnLiBFYWNoIGl0ZXJhdGlvbiB1c3VhbGx5CnJlZHVjZXMgdGhlIGlucHV0cyBieSBhbG1vc3Qgb25lIGxpbWIuIEluIHRoZSByYXJlIGNhc2Ugb2YgYSBsYXJnZQpxdW90aWVudCwgbm8gcHJvZ3Jlc3MgY2FuIGJlIG1hZGUgYnkgZXhhbWluaW5nIGp1c3QgdGhlIG1vc3QKc2lnbmlmaWNhbnQgdHdvIGxpbWJzLCBhbmQgdGhlIHF1b3RpZW50IGlzIGNvbXB1dGVkIHVzaW5nIHBsYWluCmRpdmlzaW9uLgoKICAgVGhlIHJlc3VsdGluZyBhbGdvcml0aG0gaXMgYXN5bXB0b3RpY2FsbHkgTyhOXjIpLCBqdXN0IGFzIHRoZQpFdWNsaWRlYW4gYWxnb3JpdGhtIGFuZCB0aGUgYmluYXJ5IGFsZ29yaXRobS4gVGhlIHF1YWRyYXRpYyBwYXJ0IG9mIHRoZQp3b3JrIGFyZSB0aGUgY2FsbHMgdG8gYG1wbl9tdWxfMScgYW5kIGBtcG5fc3VibXVsXzEnLiBGb3Igc21hbGwgc2l6ZXMsCnRoZSBsaW5lYXIgd29yayBpcyBhbHNvIHNpZ25pZmljYW50LiBUaGVyZSBhcmUgcm91Z2hseSBOIGNhbGxzIHRvIHRoZQpgbXBuX2hnY2QyJyBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiB1c2VzIGEgY291cGxlIG9mIGltcG9ydGFudApvcHRpbWl6YXRpb25zOgoKICAgKiBJdCB1c2VzIHRoZSBzYW1lIHJlbGF4ZWQgbm90aW9uIG9mIGNvcnJlY3RuZXNzIGFzIGBtcG5faGdjZCcgKHNlZQogICAgIG5leHQgc2VjdGlvbikuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGNhbGxlZCB3aXRoIHRoZSBtb3N0CiAgICAgc2lnbmlmaWNhbnQgdHdvIGxpbWJzIG9mIHR3byBsYXJnZSBudW1iZXJzLCB0aGUgcmV0dXJuZWQgbWF0cml4CiAgICAgZG9lcyBub3QgYWx3YXlzIGNvcnJlc3BvbmQgZXhhY3RseSB0byB0aGUgaW5pdGlhbCBxdW90aWVudAogICAgIHNlcXVlbmNlIGZvciB0aGUgdHdvIGxhcmdlIG51bWJlcnM7IHRoZSBmaW5hbCBxdW90aWVudCBtYXkKICAgICBzb21ldGltZXMgYmUgb25lIG9mZi4KCiAgICogSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoZSBxdW90aWVudHMgYXJlIHVzdWFsbHkgc21hbGwuCiAgICAgVGhlIGRpdmlzaW9uIG9wZXJhdG9yIGlzIG5vdCB1c2VkLCBzaW5jZSB0aGUgY29ycmVzcG9uZGluZwogICAgIGFzc2VtYmxlciBpbnN0cnVjdGlvbiBpcyB2ZXJ5IHNsb3cgb24gbW9zdCBhcmNoaXRlY3R1cmVzLiAoVGhpcwogICAgIGNvZGUgY291bGQgcHJvYmFibHkgYmUgaW1wcm92ZWQgZnVydGhlciwgaXQgdXNlcyBtYW55IGJyYW5jaGVzCiAgICAgdGhhdCBhcmUgdW5mcmllbmRseSB0byBwcmVkaWN0aW9uKS4KCiAgICogSXQgc3dpdGNoZXMgZnJvbSBkb3VibGUtbGltYiBjYWxjdWxhdGlvbnMgdG8gc2luZ2xlLWxpbWIKICAgICBjYWxjdWxhdGlvbnMgaGFsZi13YXkgdGhyb3VnaCwgd2hlbiB0aGUgaW5wdXQgbnVtYmVycyBoYXZlIGJlZW4KICAgICByZWR1Y2VkIGluIHNpemUgZnJvbSB0d28gbGltYnMgdG8gb25lIGFuZCBhIGhhbGYuCgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IFN1YnF1YWRyYXRpYyBHQ0QsICBOZXh0OiBFeHRlbmRlZCBHQ0QsICBQcmV2OiBMZWhtZXIncyBBbGdvcml0aG0sICBVcDogR3JlYXRlc3QgQ29tbW9uIERpdmlzb3IgQWxnb3JpdGhtcwoKMTUuMy4zIFN1YnF1YWRyYXRpYyBHQ0QKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkZvciBpbnB1dHMgbGFyZ2VyIHRoYW4gYEdDRF9EQ19USFJFU0hPTEQnLCBHQ0QgaXMgY29tcHV0ZWQgdmlhIHRoZSBIR0NECihIYWxmIEdDRCkgZnVuY3Rpb24sIGFzIGEgZ2VuZXJhbGl6YXRpb24gdG8gTGVobWVyJ3MgYWxnb3JpdGhtLgoKICAgTGV0IHRoZSBpbnB1dHMgYSxiIGJlIG9mIHNpemUgTiBsaW1icyBlYWNoLiBQdXQgUyA9IGZsb29yKE4vMikgKyAxLgpUaGVuIEhHQ0QoYSxiKSByZXR1cm5zIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4IFQgd2l0aCBub24tbmVnYXRpdmUKZWxlbWVudHMsIGFuZCByZWR1Y2VkIG51bWJlcnMgKGM7ZCkgPSBUXi0xIChhO2IpLiBUaGUgcmVkdWNlZCBudW1iZXJzCmMsZCBtdXN0IGJlIGxhcmdlciB0aGFuIFMgbGltYnMsIHdoaWxlIHRoZWlyIGRpZmZlcmVuY2UgYWJzKGMtZCkgbXVzdApmaXQgaW4gUyBsaW1icy4gVGhlIG1hdHJpeCBlbGVtZW50cyB3aWxsIGFsc28gYmUgb2Ygc2l6ZSByb3VnaGx5IE4vMi4KCiAgIFRoZSBIR0NEIGJhc2UgY2FzZSB1c2VzIExlaG1lcidzIGFsZ29yaXRobSwgYnV0IHdpdGggdGhlIGFib3ZlIHN0b3AKY29uZGl0aW9uIHRoYXQgcmV0dXJucyByZWR1Y2VkIG51bWJlcnMgYW5kIHRoZSBjb3JyZXNwb25kaW5nCnRyYW5zZm9ybWF0aW9uIG1hdHJpeCBoYWxmLXdheSB0aHJvdWdoLiBGb3IgaW5wdXRzIGxhcmdlciB0aGFuCmBIR0NEX1RIUkVTSE9MRCcsIEhHQ0QgaXMgY29tcHV0ZWQgcmVjdXJzaXZlbHksIHVzaW5nIHRoZSBkaXZpZGUgYW5kCmNvbnF1ZXIgYWxnb3JpdGhtIGluICJPbiBTY2j2bmhhZ2UncyBhbGdvcml0aG0gYW5kIHN1YnF1YWRyYXRpYyBpbnRlZ2VyCkdDRCBjb21wdXRhdGlvbiIgYnkgTfZsbGVyICgqbm90ZSBSZWZlcmVuY2VzOjopLiBUaGUgcmVjdXJzaXZlCmFsZ29yaXRobSBjb25zaXN0cyBvZiB0aGVzZSBtYWluIHN0ZXBzLgoKICAgKiBDYWxsIEhHQ0QgcmVjdXJzaXZlbHksIG9uIHRoZSBtb3N0IHNpZ25pZmljYW50IE4vMiBsaW1icy4gQXBwbHkgdGhlCiAgICAgcmVzdWx0aW5nIG1hdHJpeCBUXzEgdG8gdGhlIGZ1bGwgbnVtYmVycywgcmVkdWNpbmcgdGhlbSB0byBhIHNpemUKICAgICBqdXN0IGFib3ZlIDNOLzIuCgogICAqIFBlcmZvcm0gYSBzbWFsbCBudW1iZXIgb2YgZGl2aXNpb24gb3Igc3VidHJhY3Rpb24gc3RlcHMgdG8gcmVkdWNlCiAgICAgdGhlIG51bWJlcnMgdG8gc2l6ZSBiZWxvdyAzTi8yLiBUaGlzIGlzIGVzc2VudGlhbCBtYWlubHkgZm9yIHRoZQogICAgIHVubGlrZWx5IGNhc2Ugb2YgbGFyZ2UgcXVvdGllbnRzLgoKICAgKiBDYWxsIEhHQ0QgcmVjdXJzaXZlbHksIG9uIHRoZSBtb3N0IHNpZ25pZmljYW50IE4vMiBsaW1icyBvZiB0aGUKICAgICByZWR1Y2VkIG51bWJlcnMuIEFwcGx5IHRoZSByZXN1bHRpbmcgbWF0cml4IFRfMiB0byB0aGUgZnVsbAogICAgIG51bWJlcnMsIHJlZHVjaW5nIHRoZW0gdG8gYSBzaXplIGp1c3QgYWJvdmUgTi8yLgoKICAgKiBDb21wdXRlIFQgPSBUXzEgVF8yLgoKICAgKiBQZXJmb3JtIGEgc21hbGwgbnVtYmVyIG9mIGRpdmlzaW9uIGFuZCBzdWJ0cmFjdGlvbiBzdGVwcyB0bwogICAgIHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cywgYW5kIHJldHVybi4KCiAgIEdDRCBpcyB0aGVuIGltcGxlbWVudGVkIGFzIGEgbG9vcCBhcm91bmQgSEdDRCwgc2ltaWxhcmx5IHRvIExlaG1lcidzCmFsZ29yaXRobS4gV2hlcmUgTGVobWVyIHJlcGVhdGVkbHkgY2hvcHMgb2ZmIHRoZSB0b3AgdHdvIGxpbWJzLCBjYWxscwpgbXBuX2hnY2QyJywgYW5kIGFwcGxpZXMgdGhlIHJlc3VsdGluZyBtYXRyaXggdG8gdGhlIGZ1bGwgbnVtYmVycywgdGhlCnN1YnF1YWRyYXRpYyBHQ0QgY2hvcHMgb2ZmIHRoZSBtb3N0IHNpZ25pZmljYW50IHRoaXJkIG9mIHRoZSBsaW1icyAodGhlCnByb3BvcnRpb24gaXMgYSB0dW5pbmcgcGFyYW1ldGVyLCBhbmQgMS8zIHNlZW1zIHRvIGJlIG1vcmUgZWZmaWNpZW50CnRoYW4sIGUuZywgMS8yKSwgY2FsbHMgYG1wbl9oZ2NkJywgYW5kIGFwcGxpZXMgdGhlIHJlc3VsdGluZyBtYXRyaXguCk9uY2UgdGhlIGlucHV0IG51bWJlcnMgYXJlIHJlZHVjZWQgdG8gc2l6ZSBiZWxvdyBgR0NEX0RDX1RIUkVTSE9MRCcsCkxlaG1lcidzIGFsZ29yaXRobSBpcyB1c2VkIGZvciB0aGUgcmVzdCBvZiB0aGUgd29yay4KCiAgIFRoZSBhc3ltcHRvdGljIHJ1bm5pbmcgdGltZSBvZiBib3RoIEhHQ0QgYW5kIEdDRCBpcyBPKE0oTikqbG9nKE4pKSwKd2hlcmUgTShOKSBpcyB0aGUgdGltZSBmb3IgbXVsdGlwbHlpbmcgdHdvIE4tbGltYiBudW1iZXJzLgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IEV4dGVuZGVkIEdDRCwgIE5leHQ6IEphY29iaSBTeW1ib2wsICBQcmV2OiBTdWJxdWFkcmF0aWMgR0NELCAgVXA6IEdyZWF0ZXN0IENvbW1vbiBEaXZpc29yIEFsZ29yaXRobXMKCjE1LjMuNCBFeHRlbmRlZCBHQ0QKLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIGV4dGVuZGVkIEdDRCBmdW5jdGlvbiwgb3IgR0NERVhULCBjYWxjdWxhdGVzIGdjZChhLGIpIGFuZCBhbHNvCmNvZmFjdG9ycyB4IGFuZCB5IHNhdGlzZnlpbmcgYSp4K2IqeT1nY2QoYSxiKS4gQWxsIHRoZSBhbGdvcml0aG1zIHVzZWQKZm9yIHBsYWluIEdDRCBhcmUgZXh0ZW5kZWQgdG8gaGFuZGxlIHRoaXMgY2FzZS4gVGhlIGJpbmFyeSBhbGdvcml0aG0gaXMKdXNlZCBvbmx5IGZvciBzaW5nbGUtbGltYiBHQ0RFWFQuICBMZWhtZXIncyBhbGdvcml0aG0gaXMgdXNlZCBmb3Igc2l6ZXMKdXAgdG8gYEdDREVYVF9EQ19USFJFU0hPTEQnLiBBYm92ZSB0aGlzIHRocmVzaG9sZCwgR0NERVhUIGlzCmltcGxlbWVudGVkIGFzIGEgbG9vcCBhcm91bmQgSEdDRCwgYnV0IHdpdGggbW9yZSBib29rLWtlZXBpbmcgdG8ga2VlcAp0cmFjayBvZiB0aGUgY29mYWN0b3JzLiBUaGlzIGdpdmVzIHRoZSBzYW1lIGFzeW1wdG90aWMgcnVubmluZyB0aW1lIGFzCmZvciBHQ0QgYW5kIEhHQ0QsIE8oTShOKSpsb2coTikpCgogICBPbmUgZGlmZmVyZW5jZSB0byBwbGFpbiBHQ0QgaXMgdGhhdCB3aGlsZSB0aGUgaW5wdXRzIGEgYW5kIGIgYXJlCnJlZHVjZWQgYXMgdGhlIGFsZ29yaXRobSBwcm9jZWVkcywgdGhlIGNvZmFjdG9ycyB4IGFuZCB5IGdyb3cgaW4gc2l6ZS4KVGhpcyBtYWtlcyB0aGUgdHVuaW5nIG9mIHRoZSBjaG9wcGluZy1wb2ludCBtb3JlIGRpZmZpY3VsdC4gVGhlIGN1cnJlbnQKY29kZSBjaG9wcyBvZmYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgaGFsZiBvZiB0aGUgaW5wdXRzIGZvciB0aGUgY2FsbCB0bwpIR0NEIGluIHRoZSBmaXJzdCBpdGVyYXRpb24sIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCB0d28gdGhpcmRzIGZvcgp0aGUgcmVtYWluaW5nIGNhbGxzLiBUaGlzIHN0cmF0ZWd5IGNvdWxkIHN1cmVseSBiZSBpbXByb3ZlZC4gQWxzbyB0aGUKc3RvcCBjb25kaXRpb24gZm9yIHRoZSBsb29wLCB3aGVyZSBMZWhtZXIncyBhbGdvcml0aG0gaXMgaW52b2tlZCBvbmNlCnRoZSBpbnB1dHMgYXJlIHJlZHVjZWQgYmVsb3cgYEdDREVYVF9EQ19USFJFU0hPTEQnLCBjb3VsZCBtYXliZSBiZQppbXByb3ZlZCBieSB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGNvZmFjdG9ycy4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBKYWNvYmkgU3ltYm9sLCAgUHJldjogRXh0ZW5kZWQgR0NELCAgVXA6IEdyZWF0ZXN0IENvbW1vbiBEaXZpc29yIEFsZ29yaXRobXMKCjE1LjMuNSBKYWNvYmkgU3ltYm9sCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpbVGhpcyBzZWN0aW9uIGlzIG9ic29sZXRlLiAgVGhlIGN1cnJlbnQgSmFjb2JpIGNvZGUgYWN0dWFsbHkgdXNlcyBhIHZlcnkKZWZmaWNpZW50IGFsZ29yaXRobS5dCgogICBgbXB6X2phY29iaScgYW5kIGBtcHpfa3JvbmVja2VyJyBhcmUgY3VycmVudGx5IGltcGxlbWVudGVkIHdpdGggYQpzaW1wbGUgYmluYXJ5IGFsZ29yaXRobSBzaW1pbGFyIHRvIHRoYXQgZGVzY3JpYmVkIGZvciB0aGUgR0NEcyAoKm5vdGUKQmluYXJ5IEdDRDo6KS4gIFRoZXkncmUgbm90IHZlcnkgZmFzdCB3aGVuIGJvdGggaW5wdXRzIGFyZSBsYXJnZS4KTGVobWVyJ3MgbXVsdGktc3RlcCBpbXByb3ZlbWVudCBvciBhIGJpbmFyeSBiYXNlZCBtdWx0aS1zdGVwIGFsZ29yaXRobQppcyBsaWtlbHkgdG8gYmUgYmV0dGVyLgoKICAgV2hlbiBvbmUgb3BlcmFuZCBmaXRzIGEgc2luZ2xlIGxpbWIsIGFuZCB0aGF0IGluY2x1ZGVzCmBtcHpfa3JvbmVja2VyX3VpJyBhbmQgZnJpZW5kcywgYW4gaW5pdGlhbCByZWR1Y3Rpb24gaXMgZG9uZSB3aXRoCmVpdGhlciBgbXBuX21vZF8xJyBvciBgbXBuX21vZGV4YWN0XzFfb2RkJywgZm9sbG93ZWQgYnkgdGhlIGJpbmFyeQphbGdvcml0aG0gb24gYSBzaW5nbGUgbGltYi4gIFRoZSBiaW5hcnkgYWxnb3JpdGhtIGlzIHdlbGwgc3VpdGVkIHRvIGEKc2luZ2xlIGxpbWIsIGFuZCB0aGUgd2hvbGUgY2FsY3VsYXRpb24gaW4gdGhpcyBjYXNlIGlzIHF1aXRlIGVmZmljaWVudC4KCiAgIEluIGFsbCB0aGUgcm91dGluZXMgc2lnbiBjaGFuZ2VzIGZvciB0aGUgcmVzdWx0IGFyZSBhY2N1bXVsYXRlZAp1c2luZyBzb21lIGJpdCB0d2lkZGxpbmcsIGF2b2lkaW5nIHRhYmxlIGxvb2t1cHMgb3IgY29uZGl0aW9uYWwganVtcHMuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogUG93ZXJpbmcgQWxnb3JpdGhtcywgIE5leHQ6IFJvb3QgRXh0cmFjdGlvbiBBbGdvcml0aG1zLCAgUHJldjogR3JlYXRlc3QgQ29tbW9uIERpdmlzb3IgQWxnb3JpdGhtcywgIFVwOiBBbGdvcml0aG1zCgoxNS40IFBvd2VyaW5nIEFsZ29yaXRobXMKPT09PT09PT09PT09PT09PT09PT09PT09CgoqIE1lbnU6CgoqIE5vcm1hbCBQb3dlcmluZyBBbGdvcml0aG06OgoqIE1vZHVsYXIgUG93ZXJpbmcgQWxnb3JpdGhtOjoKCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBOb3JtYWwgUG93ZXJpbmcgQWxnb3JpdGhtLCAgTmV4dDogTW9kdWxhciBQb3dlcmluZyBBbGdvcml0aG0sICBQcmV2OiBQb3dlcmluZyBBbGdvcml0aG1zLCAgVXA6IFBvd2VyaW5nIEFsZ29yaXRobXMKCjE1LjQuMSBOb3JtYWwgUG93ZXJpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKTm9ybWFsIGBtcHonIG9yIGBtcGYnIHBvd2VyaW5nIHVzZXMgYSBzaW1wbGUgYmluYXJ5IGFsZ29yaXRobSwKc3VjY2Vzc2l2ZWx5IHNxdWFyaW5nIGFuZCB0aGVuIG11bHRpcGx5aW5nIGJ5IHRoZSBiYXNlIHdoZW4gYSAxIGJpdCBpcwpzZWVuIGluIHRoZSBleHBvbmVudCwgYXMgcGVyIEtudXRoIHNlY3Rpb24gNC42LjMuICBUaGUgImxlZnQgdG8gcmlnaHQiCnZhcmlhbnQgZGVzY3JpYmVkIHRoZXJlIGlzIHVzZWQgcmF0aGVyIHRoYW4gYWxnb3JpdGhtIEEsIHNpbmNlIGl0J3MKanVzdCBhcyBlYXN5IGFuZCBjYW4gYmUgZG9uZSB3aXRoIHNvbWV3aGF0IGxlc3MgdGVtcG9yYXJ5IG1lbW9yeS4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBNb2R1bGFyIFBvd2VyaW5nIEFsZ29yaXRobSwgIFByZXY6IE5vcm1hbCBQb3dlcmluZyBBbGdvcml0aG0sICBVcDogUG93ZXJpbmcgQWxnb3JpdGhtcwoKMTUuNC4yIE1vZHVsYXIgUG93ZXJpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCk1vZHVsYXIgcG93ZXJpbmcgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSAyXmstYXJ5IHNsaWRpbmcgd2luZG93CmFsZ29yaXRobSwgYXMgcGVyICJIYW5kYm9vayBvZiBBcHBsaWVkIENyeXB0b2dyYXBoeSIgYWxnb3JpdGhtIDE0Ljg1Cigqbm90ZSBSZWZlcmVuY2VzOjopLiAgayBpcyBjaG9zZW4gYWNjb3JkaW5nIHRvIHRoZSBzaXplIG9mIHRoZQpleHBvbmVudC4gIExhcmdlciBleHBvbmVudHMgdXNlIGxhcmdlciB2YWx1ZXMgb2YgaywgdGhlIGNob2ljZSBiZWluZwptYWRlIHRvIG1pbmltaXplIHRoZSBhdmVyYWdlIG51bWJlciBvZiBtdWx0aXBsaWNhdGlvbnMgdGhhdCBtdXN0CnN1cHBsZW1lbnQgdGhlIHNxdWFyaW5nLgoKICAgVGhlIG1vZHVsYXIgbXVsdGlwbGllcyBhbmQgc3F1YXJpbmdzIHVzZSBlaXRoZXIgYSBzaW1wbGUgZGl2aXNpb24gb3IKdGhlIFJFREMgbWV0aG9kIGJ5IE1vbnRnb21lcnkgKCpub3RlIFJlZmVyZW5jZXM6OikuICBSRURDIGlzIGEgbGl0dGxlCmZhc3RlciwgZXNzZW50aWFsbHkgc2F2aW5nIE4gc2luZ2xlIGxpbWIgZGl2aXNpb25zIGluIGEgZmFzaGlvbiBzaW1pbGFyCnRvIGFuIGV4YWN0IHJlbWFpbmRlciAoKm5vdGUgRXhhY3QgUmVtYWluZGVyOjopLgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IFJvb3QgRXh0cmFjdGlvbiBBbGdvcml0aG1zLCAgTmV4dDogUmFkaXggQ29udmVyc2lvbiBBbGdvcml0aG1zLCAgUHJldjogUG93ZXJpbmcgQWxnb3JpdGhtcywgIFVwOiBBbGdvcml0aG1zCgoxNS41IFJvb3QgRXh0cmFjdGlvbiBBbGdvcml0aG1zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWVudToKCiogU3F1YXJlIFJvb3QgQWxnb3JpdGhtOjoKKiBOdGggUm9vdCBBbGdvcml0aG06OgoqIFBlcmZlY3QgU3F1YXJlIEFsZ29yaXRobTo6CiogUGVyZmVjdCBQb3dlciBBbGdvcml0aG06OgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IFNxdWFyZSBSb290IEFsZ29yaXRobSwgIE5leHQ6IE50aCBSb290IEFsZ29yaXRobSwgIFByZXY6IFJvb3QgRXh0cmFjdGlvbiBBbGdvcml0aG1zLCAgVXA6IFJvb3QgRXh0cmFjdGlvbiBBbGdvcml0aG1zCgoxNS41LjEgU3F1YXJlIFJvb3QKLS0tLS0tLS0tLS0tLS0tLS0tCgpTcXVhcmUgcm9vdHMgYXJlIHRha2VuIHVzaW5nIHRoZSAiS2FyYXRzdWJhIFNxdWFyZSBSb290IiBhbGdvcml0aG0gYnkKUGF1bCBaaW1tZXJtYW5uICgqbm90ZSBSZWZlcmVuY2VzOjopLgoKICAgQW4gaW5wdXQgbiBpcyBzcGxpdCBpbnRvIGZvdXIgcGFydHMgb2YgayBiaXRzIGVhY2gsIHNvIHdpdGggYj0yXmsgd2UKaGF2ZSBuID0gYTMqYl4zICsgYTIqYl4yICsgYTEqYiArIGEwLiAgUGFydCBhMyBtdXN0IGJlICJub3JtYWxpemVkIiBzbwp0aGF0IGVpdGhlciB0aGUgaGlnaCBvciBzZWNvbmQgaGlnaGVzdCBiaXQgaXMgc2V0LiAgSW4gR01QLCBrIGlzIGtlcHQKb24gYSBsaW1iIGJvdW5kYXJ5IGFuZCB0aGUgaW5wdXQgaXMgbGVmdCBzaGlmdGVkIChieSBhbiBldmVuIG51bWJlciBvZgpiaXRzKSB0byBub3JtYWxpemUuCgogICBUaGUgc3F1YXJlIHJvb3Qgb2YgdGhlIGhpZ2ggdHdvIHBhcnRzIGlzIHRha2VuLCBieSByZWN1cnNpdmUKYXBwbGljYXRpb24gb2YgdGhlIGFsZ29yaXRobSAoYm90dG9taW5nIG91dCBpbiBhIG9uZS1saW1iIE5ld3RvbidzCm1ldGhvZCksCgogICAgIHMxLHIxID0gc3FydHJlbSAoYTMqYiArIGEyKQoKICAgVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIHRvIHRoZSBkZXNpcmVkIHJvb3QgYW5kIGlzIGV4dGVuZGVkIGJ5IGEKZGl2aXNpb24gdG8gZ2l2ZSBzLHIsCgogICAgIHEsdSA9IGRpdnJlbSAocjEqYiArIGExLCAyKnMxKQogICAgIHMgPSBzMSpiICsgcQogICAgIHIgPSB1KmIgKyBhMCAtIHFeMgoKICAgVGhlIG5vcm1hbGl6YXRpb24gcmVxdWlyZW1lbnQgb24gYTMgbWVhbnMgYXQgdGhpcyBwb2ludCBzIGlzIGVpdGhlcgpjb3JyZWN0IG9yIDEgdG9vIGJpZy4gIHIgaXMgbmVnYXRpdmUgaW4gdGhlIGxhdHRlciBjYXNlLCBzbwoKICAgICBpZiByIDwgMCB0aGVuCiAgICAgICByID0gciArIDIqcyAtIDEKICAgICAgIHMgPSBzIC0gMQoKICAgVGhlIGFsZ29yaXRobSBpcyBleHByZXNzZWQgaW4gYSBkaXZpZGUgYW5kIGNvbnF1ZXIgZm9ybSwgYnV0IGFzCm5vdGVkIGluIHRoZSBwYXBlciBpdCBjYW4gYWxzbyBiZSB2aWV3ZWQgYXMgYSBkaXNjcmV0ZSB2YXJpYW50IG9mCk5ld3RvbidzIG1ldGhvZCwgb3IgYXMgYSB2YXJpYXRpb24gb24gdGhlIHNjaG9vbGJveSBtZXRob2QgKG5vIGxvbmdlcgp0YXVnaHQpIGZvciBzcXVhcmUgcm9vdHMgdHdvIGRpZ2l0cyBhdCBhIHRpbWUuCgogICBJZiB0aGUgcmVtYWluZGVyIHIgaXMgbm90IHJlcXVpcmVkIHRoZW4gdXN1YWxseSBvbmx5IGEgZmV3IGhpZ2ggbGltYnMKb2YgciBhbmQgdSBuZWVkIHRvIGJlIGNhbGN1bGF0ZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gYWRqdXN0bWVudCB0bwpzIGlzIHJlcXVpcmVkLiAgVGhpcyBvcHRpbWl6YXRpb24gaXMgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KCiAgIEluIHRoZSBLYXJhdHN1YmEgbXVsdGlwbGljYXRpb24gcmFuZ2UgdGhpcyBhbGdvcml0aG0gaXMKTygxLjUqTShOLzIpKSwgd2hlcmUgTShuKSBpcyB0aGUgdGltZSB0byBtdWx0aXBseSB0d28gbnVtYmVycyBvZiBuCmxpbWJzLiAgSW4gdGhlIEZGVCBtdWx0aXBsaWNhdGlvbiByYW5nZSB0aGlzIGdyb3dzIHRvIGEgYm91bmQgb2YKTyg2Kk0oTi8yKSkuICBJbiBwcmFjdGljZSBhIGZhY3RvciBvZiBhYm91dCAxLjUgdG8gMS44IGlzIGZvdW5kIGluIHRoZQpLYXJhdHN1YmEgYW5kIFRvb20tMyByYW5nZXMsIGdyb3dpbmcgdG8gMiBvciAzIGluIHRoZSBGRlQgcmFuZ2UuCgogICBUaGUgYWxnb3JpdGhtIGRvZXMgYWxsIGl0cyBjYWxjdWxhdGlvbnMgaW4gaW50ZWdlcnMgYW5kIHRoZSByZXN1bHRpbmcKYG1wbl9zcXJ0cmVtJyBpcyB1c2VkIGZvciBib3RoIGBtcHpfc3FydCcgYW5kIGBtcGZfc3FydCcuICBUaGUgZXh0ZW5kZWQKcHJlY2lzaW9uIGdpdmVuIGJ5IGBtcGZfc3FydF91aScgaXMgb2J0YWluZWQgYnkgcGFkZGluZyB3aXRoIHplcm8gbGltYnMuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogTnRoIFJvb3QgQWxnb3JpdGhtLCAgTmV4dDogUGVyZmVjdCBTcXVhcmUgQWxnb3JpdGhtLCAgUHJldjogU3F1YXJlIFJvb3QgQWxnb3JpdGhtLCAgVXA6IFJvb3QgRXh0cmFjdGlvbiBBbGdvcml0aG1zCgoxNS41LjIgTnRoIFJvb3QKLS0tLS0tLS0tLS0tLS0tCgpJbnRlZ2VyIE50aCByb290cyBhcmUgdGFrZW4gdXNpbmcgTmV3dG9uJ3MgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZwppdGVyYXRpb24sIHdoZXJlIEEgaXMgdGhlIGlucHV0IGFuZCBuIGlzIHRoZSByb290IHRvIGJlIHRha2VuLgoKICAgICAgICAgICAgICAxICAgICAgICAgQQogICAgIGFbaSsxXSA9IC0gKiAoIC0tLS0tLS0tLSArIChuLTEpKmFbaV0gKQogICAgICAgICAgICAgIG4gICAgIGFbaV1eKG4tMSkKCiAgIFRoZSBpbml0aWFsIGFwcHJveGltYXRpb24gYVsxXSBpcyBnZW5lcmF0ZWQgYml0d2lzZSBieSBzdWNjZXNzaXZlbHkKcG93ZXJpbmcgYSB0cmlhbCByb290IHdpdGggb3Igd2l0aG91dCBuZXcgMSBiaXRzLCBhaW1pbmcgdG8gYmUganVzdAphYm92ZSB0aGUgdHJ1ZSByb290LiAgVGhlIGl0ZXJhdGlvbiBjb252ZXJnZXMgcXVhZHJhdGljYWxseSB3aGVuCnN0YXJ0ZWQgZnJvbSBhIGdvb2QgYXBwcm94aW1hdGlvbi4gIFdoZW4gbiBpcyBsYXJnZSBtb3JlIGluaXRpYWwgYml0cwphcmUgbmVlZGVkIHRvIGdldCBnb29kIGNvbnZlcmdlbmNlLiAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgbm90CnBhcnRpY3VsYXJseSB3ZWxsIG9wdGltaXplZC4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBQZXJmZWN0IFNxdWFyZSBBbGdvcml0aG0sICBOZXh0OiBQZXJmZWN0IFBvd2VyIEFsZ29yaXRobSwgIFByZXY6IE50aCBSb290IEFsZ29yaXRobSwgIFVwOiBSb290IEV4dHJhY3Rpb24gQWxnb3JpdGhtcwoKMTUuNS4zIFBlcmZlY3QgU3F1YXJlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQSBzaWduaWZpY2FudCBmcmFjdGlvbiBvZiBub24tc3F1YXJlcyBjYW4gYmUgcXVpY2tseSBpZGVudGlmaWVkIGJ5CmNoZWNraW5nIHdoZXRoZXIgdGhlIGlucHV0IGlzIGEgcXVhZHJhdGljIHJlc2lkdWUgbW9kdWxvIHNtYWxsIGludGVnZXJzLgoKICAgYG1wel9wZXJmZWN0X3NxdWFyZV9wJyBmaXJzdCB0ZXN0cyB0aGUgaW5wdXQgbW9kIDI1Niwgd2hpY2ggbWVhbnMKanVzdCBleGFtaW5pbmcgdGhlIGxvdyBieXRlLiAgT25seSA0NCBkaWZmZXJlbnQgdmFsdWVzIG9jY3VyIGZvcgpzcXVhcmVzIG1vZCAyNTYsIHNvIDgyLjglIG9mIGlucHV0cyBjYW4gYmUgaW1tZWRpYXRlbHkgaWRlbnRpZmllZCBhcwpub24tc3F1YXJlcy4KCiAgIE9uIGEgMzItYml0IHN5c3RlbSBzaW1pbGFyIHRlc3RzIGFyZSBkb25lIG1vZCA5LCA1LCA3LCAxMyBhbmQgMTcsCmZvciBhIHRvdGFsIDk5LjI1JSBvZiBpbnB1dHMgaWRlbnRpZmllZCBhcyBub24tc3F1YXJlcy4gIE9uIGEgNjQtYml0CnN5c3RlbSA5NyBpcyB0ZXN0ZWQgdG9vLCBmb3IgYSB0b3RhbCA5OS42MiUuCgogICBUaGVzZSBtb2R1bGkgYXJlIGNob3NlbiBiZWNhdXNlIHRoZXkncmUgZmFjdG9ycyBvZiAyXjI0LTEgKG9yIDJeNDgtMQpmb3IgNjQtYml0cyksIGFuZCBzdWNoIGEgcmVtYWluZGVyIGNhbiBiZSBxdWlja2x5IHRha2VuIGp1c3QgdXNpbmcKYWRkaXRpb25zIChzZWUgYG1wbl9tb2RfMzRsc3ViMScpLgoKICAgV2hlbiBuYWlscyBhcmUgaW4gdXNlIG1vZHVsaSBhcmUgaW5zdGVhZCBzZWxlY3RlZCBieSB0aGUgYGdlbi1wc3FyLmMnCnByb2dyYW0gYW5kIGFwcGxpZWQgd2l0aCBhbiBgbXBuX21vZF8xJy4gIFRoZSBzYW1lIDJeMjQtMSBvciAyXjQ4LTEKY291bGQgYmUgZG9uZSB3aXRoIG5haWxzIHVzaW5nIHNvbWUgZXh0cmEgYml0IHNoaWZ0cywgYnV0IHRoaXMgaXMgbm90CmN1cnJlbnRseSBpbXBsZW1lbnRlZC4KCiAgIEluIGFueSBjYXNlIGVhY2ggbW9kdWx1cyBpcyBhcHBsaWVkIHRvIHRoZSBgbXBuX21vZF8zNGxzdWIxJyBvcgpgbXBuX21vZF8xJyByZW1haW5kZXIgYW5kIGEgdGFibGUgbG9va3VwIGlkZW50aWZpZXMgbm9uLXNxdWFyZXMuICBCeQp1c2luZyBhICJtb2RleGFjdCIgc3R5bGUgY2FsY3VsYXRpb24sIGFuZCBzdWl0YWJseSBwZXJtdXRlZCB0YWJsZXMsCmp1c3Qgb25lIG11bHRpcGx5IGVhY2ggaXMgcmVxdWlyZWQsIHNlZSB0aGUgY29kZSBmb3IgZGV0YWlscy4gIE1vZHVsaQphcmUgYWxzbyBjb21iaW5lZCB0byBzYXZlIG9wZXJhdGlvbnMsIHNvIGxvbmcgYXMgdGhlIGxvb2t1cCB0YWJsZXMKZG9uJ3QgYmVjb21lIHRvbyBiaWcuICBgZ2VuLXBzcXIuYycgZG9lcyBhbGwgdGhlIHByZS1jYWxjdWxhdGlvbnMuCgogICBBIHNxdWFyZSByb290IG11c3Qgc3RpbGwgYmUgdGFrZW4gZm9yIGFueSB2YWx1ZSB0aGF0IHBhc3NlcyB0aGVzZQp0ZXN0cywgdG8gdmVyaWZ5IGl0J3MgcmVhbGx5IGEgc3F1YXJlIGFuZCBub3Qgb25lIG9mIHRoZSBzbWFsbCBmcmFjdGlvbgpvZiBub24tc3F1YXJlcyB0aGF0IGdldCB0aHJvdWdoIChpLmUuIGEgcHNldWRvLXNxdWFyZSB0byBhbGwgdGhlIHRlc3RlZApiYXNlcykuCgogICBDbGVhcmx5IG1vcmUgcmVzaWR1ZSB0ZXN0cyBjb3VsZCBiZSBkb25lLCBgbXB6X3BlcmZlY3Rfc3F1YXJlX3AnIG9ubHkKdXNlcyBhIGNvbXBhY3QgYW5kIGVmZmljaWVudCBzZXQuICBCaWcgaW5wdXRzIHdvdWxkIHByb2JhYmx5IGJlbmVmaXQKZnJvbSBtb3JlIHJlc2lkdWUgdGVzdGluZywgc21hbGwgaW5wdXRzIG1pZ2h0IGJlIGJldHRlciBvZmYgd2l0aCBsZXNzLgpUaGUgYXNzdW1lZCBkaXN0cmlidXRpb24gb2Ygc3F1YXJlcyB2ZXJzdXMgbm9uLXNxdWFyZXMgaW4gdGhlIGlucHV0CndvdWxkIGFmZmVjdCBzdWNoIGNvbnNpZGVyYXRpb25zLgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IFBlcmZlY3QgUG93ZXIgQWxnb3JpdGhtLCAgUHJldjogUGVyZmVjdCBTcXVhcmUgQWxnb3JpdGhtLCAgVXA6IFJvb3QgRXh0cmFjdGlvbiBBbGdvcml0aG1zCgoxNS41LjQgUGVyZmVjdCBQb3dlcgotLS0tLS0tLS0tLS0tLS0tLS0tLQoKRGV0ZWN0aW5nIHBlcmZlY3QgcG93ZXJzIGlzIHJlcXVpcmVkIGJ5IHNvbWUgZmFjdG9yaXphdGlvbiBhbGdvcml0aG1zLgpDdXJyZW50bHkgYG1wel9wZXJmZWN0X3Bvd2VyX3AnIGlzIGltcGxlbWVudGVkIHVzaW5nIHJlcGVhdGVkIE50aCByb290CmV4dHJhY3Rpb25zLCB0aG91Z2ggbmF0dXJhbGx5IG9ubHkgcHJpbWUgcm9vdHMgbmVlZCB0byBiZSBjb25zaWRlcmVkLgooKk5vdGUgTnRoIFJvb3QgQWxnb3JpdGhtOjouKQoKICAgSWYgYSBwcmltZSBkaXZpc29yIHAgd2l0aCBtdWx0aXBsaWNpdHkgZSBjYW4gYmUgZm91bmQsIHRoZW4gb25seQpyb290cyB3aGljaCBhcmUgZGl2aXNvcnMgb2YgZSBuZWVkIHRvIGJlIGNvbnNpZGVyZWQsIG11Y2ggcmVkdWNpbmcgdGhlCndvcmsgbmVjZXNzYXJ5LiAgVG8gdGhpcyBlbmQgZGl2aXNpYmlsaXR5IGJ5IGEgc2V0IG9mIHNtYWxsIHByaW1lcyBpcwpjaGVja2VkLgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IFJhZGl4IENvbnZlcnNpb24gQWxnb3JpdGhtcywgIE5leHQ6IE90aGVyIEFsZ29yaXRobXMsICBQcmV2OiBSb290IEV4dHJhY3Rpb24gQWxnb3JpdGhtcywgIFVwOiBBbGdvcml0aG1zCgoxNS42IFJhZGl4IENvbnZlcnNpb24KPT09PT09PT09PT09PT09PT09PT09CgpSYWRpeCBjb252ZXJzaW9ucyBhcmUgbGVzcyBpbXBvcnRhbnQgdGhhbiBvdGhlciBhbGdvcml0aG1zLiAgQSBwcm9ncmFtCmRvbWluYXRlZCBieSBjb252ZXJzaW9ucyBzaG91bGQgcHJvYmFibHkgdXNlIGEgZGlmZmVyZW50IGRhdGEKcmVwcmVzZW50YXRpb24uCgoqIE1lbnU6CgoqIEJpbmFyeSB0byBSYWRpeDo6CiogUmFkaXggdG8gQmluYXJ5OjoKCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBCaW5hcnkgdG8gUmFkaXgsICBOZXh0OiBSYWRpeCB0byBCaW5hcnksICBQcmV2OiBSYWRpeCBDb252ZXJzaW9uIEFsZ29yaXRobXMsICBVcDogUmFkaXggQ29udmVyc2lvbiBBbGdvcml0aG1zCgoxNS42LjEgQmluYXJ5IHRvIFJhZGl4Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkNvbnZlcnNpb25zIGZyb20gYmluYXJ5IHRvIGEgcG93ZXItb2YtMiByYWRpeCB1c2UgYSBzaW1wbGUgYW5kIGZhc3QKTyhOKSBiaXQgZXh0cmFjdGlvbiBhbGdvcml0aG0uCgogICBDb252ZXJzaW9ucyBmcm9tIGJpbmFyeSB0byBvdGhlciByYWRpY2VzIHVzZSBvbmUgb2YgdHdvIGFsZ29yaXRobXMuClNpemVzIGJlbG93IGBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEJyB1c2UgYSBiYXNpYyBPKE5eMikgbWV0aG9kLgpSZXBlYXRlZCBkaXZpc2lvbnMgYnkgYl5uIGFyZSBtYWRlLCB3aGVyZSBiIGlzIHRoZSByYWRpeCBhbmQgbiBpcyB0aGUKYmlnZ2VzdCBwb3dlciB0aGF0IGZpdHMgaW4gYSBsaW1iLiAgQnV0IGluc3RlYWQgb2Ygc2ltcGx5IHVzaW5nIHRoZQpyZW1haW5kZXIgciBmcm9tIHN1Y2ggZGl2aXNpb25zLCBhbiBleHRyYSBkaXZpZGUgc3RlcCBpcyBkb25lIHRvIGdpdmUgYQpmcmFjdGlvbmFsIGxpbWIgcmVwcmVzZW50aW5nIHIvYl5uLiAgVGhlIGRpZ2l0cyBvZiByIGNhbiB0aGVuIGJlCmV4dHJhY3RlZCB1c2luZyBtdWx0aXBsaWNhdGlvbnMgYnkgYiByYXRoZXIgdGhhbiBkaXZpc2lvbnMuICBTcGVjaWFsCmNhc2UgY29kZSBpcyBwcm92aWRlZCBmb3IgZGVjaW1hbCwgYWxsb3dpbmcgbXVsdGlwbGljYXRpb25zIGJ5IDEwIHRvCm9wdGltaXplIHRvIHNoaWZ0cyBhbmQgYWRkcy4KCiAgIEFib3ZlIGBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEJyBhIHN1Yi1xdWFkcmF0aWMgYWxnb3JpdGhtIGlzCnVzZWQuICBGb3IgYW4gaW5wdXQgdCwgcG93ZXJzIGJeKG4qMl5pKSBvZiB0aGUgcmFkaXggYXJlIGNhbGN1bGF0ZWQsCnVudGlsIGEgcG93ZXIgYmV0d2VlbiB0IGFuZCBzcXJ0KHQpIGlzIHJlYWNoZWQuICB0IGlzIHRoZW4gZGl2aWRlZCBieQp0aGF0IGxhcmdlc3QgcG93ZXIsIGdpdmluZyBhIHF1b3RpZW50IHdoaWNoIGlzIHRoZSBkaWdpdHMgYWJvdmUgdGhhdApwb3dlciwgYW5kIGEgcmVtYWluZGVyIHdoaWNoIGlzIHRob3NlIGJlbG93LiAgVGhlc2UgdHdvIHBhcnRzIGFyZSBpbgp0dXJuIGRpdmlkZWQgYnkgdGhlIHNlY29uZCBoaWdoZXN0IHBvd2VyLCBhbmQgc28gb24gcmVjdXJzaXZlbHkuICBXaGVuCmEgcGllY2UgaGFzIGJlZW4gZGl2aWRlZCBkb3duIHRvIGxlc3MgdGhhbiBgR0VUX1NUUl9EQ19USFJFU0hPTEQnCmxpbWJzLCB0aGUgYmFzZWNhc2UgYWxnb3JpdGhtIGRlc2NyaWJlZCBhYm92ZSBpcyB1c2VkLgoKICAgVGhlIGFkdmFudGFnZSBvZiB0aGlzIGFsZ29yaXRobSBpcyB0aGF0IGJpZyBkaXZpc2lvbnMgY2FuIG1ha2UgdXNlCm9mIHRoZSBzdWItcXVhZHJhdGljIGRpdmlkZSBhbmQgY29ucXVlciBkaXZpc2lvbiAoKm5vdGUgRGl2aWRlIGFuZApDb25xdWVyIERpdmlzaW9uOjopLCBhbmQgYmlnIGRpdmlzaW9ucyB0ZW5kIHRvIGhhdmUgbGVzcyBvdmVyaGVhZHMgdGhhbgpsb3RzIG9mIHNlcGFyYXRlIHNpbmdsZSBsaW1iIGRpdmlzaW9ucyBhbnl3YXkuICBCdXQgaW4gYW55IGNhc2UgdGhlCmNvc3Qgb2YgY2FsY3VsYXRpbmcgdGhlIHBvd2VycyBiXihuKjJeaSkgbXVzdCBmaXJzdCBiZSBvdmVyY29tZS4KCiAgIGBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEJyBhbmQgYEdFVF9TVFJfRENfVEhSRVNIT0xEJyByZXByZXNlbnQKdGhlIHNhbWUgYmFzaWMgdGhpbmcsIHRoZSBwb2ludCB3aGVyZSBpdCBiZWNvbWVzIHdvcnRoIGRvaW5nIGEgYmlnCmRpdmlzaW9uIHRvIGN1dCB0aGUgaW5wdXQgaW4gaGFsZi4gIGBHRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEJwppbmNsdWRlcyB0aGUgY29zdCBvZiBjYWxjdWxhdGluZyB0aGUgcmFkaXggcG93ZXIgcmVxdWlyZWQsIHdoZXJlYXMKYEdFVF9TVFJfRENfVEhSRVNIT0xEJyBhc3N1bWVzIHRoYXQncyBhbHJlYWR5IGF2YWlsYWJsZSwgd2hpY2ggaXMgdGhlCmNhc2Ugd2hlbiByZWN1cnNpbmcuCgogICBTaW5jZSB0aGUgYmFzZSBjYXNlIHByb2R1Y2VzIGRpZ2l0cyBmcm9tIGxlYXN0IHRvIG1vc3Qgc2lnbmlmaWNhbnQKYnV0IHRoZXkgd2FudCB0byBiZSBzdG9yZWQgZnJvbSBtb3N0IHRvIGxlYXN0LCBpdCdzIG5lY2Vzc2FyeSB0bwpjYWxjdWxhdGUgaW4gYWR2YW5jZSBob3cgbWFueSBkaWdpdHMgdGhlcmUgd2lsbCBiZSwgb3IgYXQgbGVhc3QgYmUgc3VyZQpub3QgdG8gdW5kZXJlc3RpbWF0ZSB0aGF0LiAgRm9yIEdNUCB0aGUgbnVtYmVyIG9mIGlucHV0IGJpdHMgaXMKbXVsdGlwbGllZCBieSBgY2hhcnNfcGVyX2JpdF9leGFjdGx5JyBmcm9tIGBtcF9iYXNlcycsIHJvdW5kaW5nIHVwLgpUaGUgcmVzdWx0IGlzIGVpdGhlciBjb3JyZWN0IG9yIG9uZSB0b28gYmlnLgoKICAgRXhhbWluaW5nIHNvbWUgb2YgdGhlIGhpZ2ggYml0cyBvZiB0aGUgaW5wdXQgY291bGQgaW5jcmVhc2UgdGhlCmNoYW5jZSBvZiBnZXR0aW5nIHRoZSBleGFjdCBudW1iZXIgb2YgZGlnaXRzLCBidXQgYW4gZXhhY3QgcmVzdWx0IGV2ZXJ5CnRpbWUgd291bGQgbm90IGJlIHByYWN0aWNhbCwgc2luY2UgaW4gZ2VuZXJhbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCm51bWJlcnMgMTAwLi4uIGFuZCA5OS4uLiBpcyBvbmx5IGluIHRoZSBsYXN0IGZldyBiaXRzIGFuZCB0aGUgd29yayB0bwppZGVudGlmeSA5OS4uLiAgbWlnaHQgd2VsbCBiZSBhbG1vc3QgYXMgbXVjaCBhcyBhIGZ1bGwgY29udmVyc2lvbi4KCiAgIGBtcGZfZ2V0X3N0cicgZG9lc24ndCBjdXJyZW50bHkgdXNlIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGhlcmUsIGl0Cm11bHRpcGxpZXMgb3IgZGl2aWRlcyBieSBhIHBvd2VyIG9mIGIgdG8gbW92ZSB0aGUgcmFkaXggcG9pbnQgdG8gdGhlCmp1c3QgYWJvdmUgdGhlIGhpZ2hlc3Qgbm9uLXplcm8gZGlnaXQgKG9yIGF0IHdvcnN0IG9uZSBhYm92ZSB0aGF0CmxvY2F0aW9uKSwgdGhlbiBtdWx0aXBsaWVzIGJ5IGJebiB0byBicmluZyBvdXQgZGlnaXRzLiAgVGhpcyBpcyBPKE5eMikKYW5kIGlzIGNlcnRhaW5seSBub3Qgb3B0aW1hbC4KCiAgIFRoZSByL2JebiBzY2hlbWUgZGVzY3JpYmVkIGFib3ZlIGZvciB1c2luZyBtdWx0aXBsaWNhdGlvbnMgdG8gYnJpbmcKb3V0IGRpZ2l0cyBtaWdodCBiZSB1c2VmdWwgZm9yIG1vcmUgdGhhbiBhIHNpbmdsZSBsaW1iLiAgU29tZSBicmllZgpleHBlcmltZW50cyB3aXRoIGl0IG9uIHRoZSBiYXNlIGNhc2Ugd2hlbiByZWN1cnNpbmcgZGlkbid0IGdpdmUgYQpub3RpY2VhYmxlIGltcHJvdmVtZW50LCBidXQgcGVyaGFwcyB0aGF0IHdhcyBvbmx5IGR1ZSB0byB0aGUKaW1wbGVtZW50YXRpb24uICBTb21ldGhpbmcgc2ltaWxhciB3b3VsZCB3b3JrIGZvciB0aGUgc3ViLXF1YWRyYXRpYwpkaXZpc2lvbnMgdG9vLCB0aG91Z2ggdGhlcmUgd291bGQgYmUgdGhlIGNvc3Qgb2YgY2FsY3VsYXRpbmcgYSBiaWdnZXIKcmFkaXggcG93ZXIuCgogICBBbm90aGVyIHBvc3NpYmxlIGltcHJvdmVtZW50IGZvciB0aGUgc3ViLXF1YWRyYXRpYyBwYXJ0IHdvdWxkIGJlIHRvCmFycmFuZ2UgZm9yIHJhZGl4IHBvd2VycyB0aGF0IGJhbGFuY2VkIHRoZSBzaXplcyBvZiBxdW90aWVudCBhbmQKcmVtYWluZGVyIHByb2R1Y2VkLCBpLmUuIHRoZSBoaWdoZXN0IHBvd2VyIHdvdWxkIGJlIGFuIGJeKG4qaykKYXBwcm94aW1hdGVseSBlcXVhbCB0byBzcXJ0KHQpLCBub3QgcmVzdHJpY3RlZCB0byBhIDJeaSBmYWN0b3IuICBUaGF0Cm91Z2h0IHRvIHNtb290aCBvdXQgYSBncmFwaCBvZiB0aW1lcyBhZ2FpbnN0IHNpemVzLCBidXQgbWF5IG9yIG1heSBub3QKYmUgYSBuZXQgc3BlZWR1cC4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBSYWRpeCB0byBCaW5hcnksICBQcmV2OiBCaW5hcnkgdG8gUmFkaXgsICBVcDogUmFkaXggQ29udmVyc2lvbiBBbGdvcml0aG1zCgoxNS42LjIgUmFkaXggdG8gQmluYXJ5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCipUaGlzIHNlY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuLCBpdCBjdXJyZW50bHkgZGVzY3JpYmVzIHRoZQphbGdvcml0aG1zIHVzZWQgYmVmb3JlIEdNUCA0LjMuKgoKICAgQ29udmVyc2lvbnMgZnJvbSBhIHBvd2VyLW9mLTIgcmFkaXggaW50byBiaW5hcnkgdXNlIGEgc2ltcGxlIGFuZCBmYXN0Ck8oTikgYml0d2lzZSBjb25jYXRlbmF0aW9uIGFsZ29yaXRobS4KCiAgIENvbnZlcnNpb25zIGZyb20gb3RoZXIgcmFkaWNlcyB1c2Ugb25lIG9mIHR3byBhbGdvcml0aG1zLiAgU2l6ZXMKYmVsb3cgYFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQnIHVzZSBhIGJhc2ljIE8oTl4yKSBtZXRob2QuICBHcm91cHMKb2YgbiBkaWdpdHMgYXJlIGNvbnZlcnRlZCB0byBsaW1icywgd2hlcmUgbiBpcyB0aGUgYmlnZ2VzdCBwb3dlciBvZiB0aGUKYmFzZSBiIHdoaWNoIHdpbGwgZml0IGluIGEgbGltYiwgdGhlbiB0aG9zZSBncm91cHMgYXJlIGFjY3VtdWxhdGVkIGludG8KdGhlIHJlc3VsdCBieSBtdWx0aXBseWluZyBieSBiXm4gYW5kIGFkZGluZy4gIFRoaXMgc2F2ZXMKbXVsdGktcHJlY2lzaW9uIG9wZXJhdGlvbnMsIGFzIHBlciBLbnV0aCBzZWN0aW9uIDQuNCBwYXJ0IEUgKCpub3RlClJlZmVyZW5jZXM6OikuICBTb21lIHNwZWNpYWwgY2FzZSBjb2RlIGlzIHByb3ZpZGVkIGZvciBkZWNpbWFsLCBnaXZpbmcKdGhlIGNvbXBpbGVyIGEgY2hhbmNlIHRvIG9wdGltaXplIG11bHRpcGxpY2F0aW9ucyBieSAxMC4KCiAgIEFib3ZlIGBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEJyBhIHN1Yi1xdWFkcmF0aWMgYWxnb3JpdGhtIGlzCnVzZWQuICBGaXJzdCBncm91cHMgb2YgbiBkaWdpdHMgYXJlIGNvbnZlcnRlZCBpbnRvIGxpbWJzLiAgVGhlbiBhZGphY2VudApsaW1icyBhcmUgY29tYmluZWQgaW50byBsaW1iIHBhaXJzIHdpdGggeCpiXm4reSwgd2hlcmUgeCBhbmQgeSBhcmUgdGhlCmxpbWJzLiAgQWRqYWNlbnQgbGltYiBwYWlycyBhcmUgY29tYmluZWQgaW50byBxdWFkcyBzaW1pbGFybHkgd2l0aAp4KmJeKDJuKSt5LiAgVGhpcyBjb250aW51ZXMgdW50aWwgYSBzaW5nbGUgYmxvY2sgcmVtYWlucywgdGhhdCBiZWluZwp0aGUgcmVzdWx0LgoKICAgVGhlIGFkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbnMgZm9yIGVhY2ggeAphcmUgYmlnIGJsb2NrcywgYWxsb3dpbmcgS2FyYXRzdWJhIGFuZCBoaWdoZXIgYWxnb3JpdGhtcyB0byBiZSB1c2VkLgpCdXQgdGhlIGNvc3Qgb2YgY2FsY3VsYXRpbmcgdGhlIHBvd2VycyBiXihuKjJeaSkgbXVzdCBiZSBvdmVyY29tZS4KYFNFVF9TVFJfUFJFQ09NUFVURV9USFJFU0hPTEQnIHVzdWFsbHkgZW5kcyB1cCBxdWl0ZSBiaWcsIGFyb3VuZCA1MDAwCmRpZ2l0cywgYW5kIG9uIHNvbWUgcHJvY2Vzc29ycyBtdWNoIGJpZ2dlciBzdGlsbC4KCiAgIGBTRVRfU1RSX1BSRUNPTVBVVEVfVEhSRVNIT0xEJyBpcyBiYXNlZCBvbiB0aGUgaW5wdXQgZGlnaXRzIChhbmQKdHVuZWQgZm9yIGRlY2ltYWwpLCB0aG91Z2ggaXQgbWlnaHQgYmUgYmV0dGVyIGJhc2VkIG9uIGEgbGltYiBjb3VudCwgc28KYXMgdG8gYmUgaW5kZXBlbmRlbnQgb2YgdGhlIGJhc2UuICBCdXQgdGhhdCBzb3J0IG9mIGNvdW50IGlzbid0IHVzZWQgYnkKdGhlIGJhc2UgY2FzZSBhbmQgc28gd291bGQgbmVlZCBzb21lIHNvcnQgb2YgaW5pdGlhbCBjYWxjdWxhdGlvbiBvcgplc3RpbWF0ZS4KCiAgIFRoZSBtYWluIHJlYXNvbiBgU0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCcgaXMgc28gbXVjaCBiaWdnZXIKdGhhbiB0aGUgY29ycmVzcG9uZGluZyBgR0VUX1NUUl9QUkVDT01QVVRFX1RIUkVTSE9MRCcgaXMgdGhhdApgbXBuX211bF8xJyBpcyBtdWNoIGZhc3RlciB0aGFuIGBtcG5fZGl2cmVtXzEnIChvZnRlbiBieSBhIGZhY3RvciBvZiA1LApvciBtb3JlKS4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBPdGhlciBBbGdvcml0aG1zLCAgTmV4dDogQXNzZW1ibHkgQ29kaW5nLCAgUHJldjogUmFkaXggQ29udmVyc2lvbiBBbGdvcml0aG1zLCAgVXA6IEFsZ29yaXRobXMKCjE1LjcgT3RoZXIgQWxnb3JpdGhtcwo9PT09PT09PT09PT09PT09PT09PT0KCiogTWVudToKCiogUHJpbWUgVGVzdGluZyBBbGdvcml0aG06OgoqIEZhY3RvcmlhbCBBbGdvcml0aG06OgoqIEJpbm9taWFsIENvZWZmaWNpZW50cyBBbGdvcml0aG06OgoqIEZpYm9uYWNjaSBOdW1iZXJzIEFsZ29yaXRobTo6CiogTHVjYXMgTnVtYmVycyBBbGdvcml0aG06OgoqIFJhbmRvbSBOdW1iZXIgQWxnb3JpdGhtczo6CgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogUHJpbWUgVGVzdGluZyBBbGdvcml0aG0sICBOZXh0OiBGYWN0b3JpYWwgQWxnb3JpdGhtLCAgUHJldjogT3RoZXIgQWxnb3JpdGhtcywgIFVwOiBPdGhlciBBbGdvcml0aG1zCgoxNS43LjEgUHJpbWUgVGVzdGluZwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIHByaW1hbGl0eSB0ZXN0aW5nIGluIGBtcHpfcHJvYmFiX3ByaW1lX3AnICgqbm90ZSBOdW1iZXIgVGhlb3JldGljCkZ1bmN0aW9uczo6KSBmaXJzdCBkb2VzIHNvbWUgdHJpYWwgZGl2aXNpb24gYnkgc21hbGwgZmFjdG9ycyBhbmQgdGhlbgp1c2VzIHRoZSBNaWxsZXItUmFiaW4gcHJvYmFiaWxpc3RpYyBwcmltYWxpdHkgdGVzdGluZyBhbGdvcml0aG0sIGFzCmRlc2NyaWJlZCBpbiBLbnV0aCBzZWN0aW9uIDQuNS40IGFsZ29yaXRobSBQICgqbm90ZSBSZWZlcmVuY2VzOjopLgoKICAgRm9yIGFuIG9kZCBpbnB1dCBuLCBhbmQgd2l0aCBuID0gcSoyXmsrMSB3aGVyZSBxIGlzIG9kZCwgdGhpcwphbGdvcml0aG0gc2VsZWN0cyBhIHJhbmRvbSBiYXNlIHggYW5kIHRlc3RzIHdoZXRoZXIgeF5xIG1vZCBuIGlzIDEgb3IKLTEsIG9yIGFuIHheKHEqMl5qKSBtb2QgbiBpcyAxLCBmb3IgMTw9ajw9ay4gIElmIHNvIHRoZW4gbiBpcyBwcm9iYWJseQpwcmltZSwgaWYgbm90IHRoZW4gbiBpcyBkZWZpbml0ZWx5IGNvbXBvc2l0ZS4KCiAgIEFueSBwcmltZSBuIHdpbGwgcGFzcyB0aGUgdGVzdCwgYnV0IHNvbWUgY29tcG9zaXRlcyBkbyB0b28uICBTdWNoCmNvbXBvc2l0ZXMgYXJlIGtub3duIGFzIHN0cm9uZyBwc2V1ZG9wcmltZXMgdG8gYmFzZSB4LiAgTm8gbiBpcyBhCnN0cm9uZyBwc2V1ZG9wcmltZSB0byBtb3JlIHRoYW4gMS80IG9mIGFsbCBiYXNlcyAoc2VlIEtudXRoIGV4ZXJjaXNlCjIyKSwgaGVuY2Ugd2l0aCB4IGNob3NlbiBhdCByYW5kb20gdGhlcmUncyBubyBtb3JlIHRoYW4gYSAxLzQgY2hhbmNlIGEKInByb2JhYmxlIHByaW1lIiB3aWxsIGluIGZhY3QgYmUgY29tcG9zaXRlLgoKICAgSW4gZmFjdCBzdHJvbmcgcHNldWRvcHJpbWVzIGFyZSBxdWl0ZSByYXJlLCBtYWtpbmcgdGhlIHRlc3QgbXVjaCBtb3JlCnBvd2VyZnVsIHRoYW4gdGhpcyBhbmFseXNpcyB3b3VsZCBzdWdnZXN0LCBidXQgMS80IGlzIGFsbCB0aGF0J3MgcHJvdmVuCmZvciBhbiBhcmJpdHJhcnkgbi4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBGYWN0b3JpYWwgQWxnb3JpdGhtLCAgTmV4dDogQmlub21pYWwgQ29lZmZpY2llbnRzIEFsZ29yaXRobSwgIFByZXY6IFByaW1lIFRlc3RpbmcgQWxnb3JpdGhtLCAgVXA6IE90aGVyIEFsZ29yaXRobXMKCjE1LjcuMiBGYWN0b3JpYWwKLS0tLS0tLS0tLS0tLS0tLQoKRmFjdG9yaWFscyBhcmUgY2FsY3VsYXRlZCBieSBhIGNvbWJpbmF0aW9uIG9mIHR3byBhbGdvcml0aG1zLiBBbiBpZGVhIGlzCnNoYXJlZCBhbW9uZyB0aGVtOiB0byBjb21wdXRlIHRoZSBvZGQgcGFydCBvZiB0aGUgZmFjdG9yaWFsOyBhIGZpbmFsCnN0ZXAgdGFrZXMgYWNjb3VudCBvZiB0aGUgcG93ZXIgb2YgMiB0ZXJtLCBieSBzaGlmdGluZy4KCiAgIEZvciBzbWFsbCBuLCB0aGUgb2RkIGZhY3RvciBvZiBuISBpcyBjb21wdXRlZCB3aXRoIHRoZSBzaW1wbGUKb2JzZXJ2YXRpb24gdGhhdCBpdCBpcyBlcXVhbCB0byB0aGUgcHJvZHVjdCBvZiBhbGwgcG9zaXRpdmUgb2RkIG51bWJlcnMKc21hbGxlciB0aGFuIG4gdGltZXMgdGhlIG9kZCBmYWN0b3Igb2YgW24vMl0hLCB3aGVyZSBbeF0gaXMgdGhlIGludGVnZXIKcGFydCBvZiB4LCBhbmQgc28gb24gcmVjdXJzaXZlbHkuIFRoZSBwcm9jZWR1cmUgY2FuIGJlIGJlc3QgaWxsdXN0cmF0ZWQKd2l0aCBhbiBleGFtcGxlLAoKICAgICAyMyEgPSAoMjMuMjEuMTkuMTcuMTUuMTMuMTEuOS43LjUuMykoMTEuOS43LjUuMykoNS4zKTJeMTkKCiAgIEN1cnJlbnQgY29kZSBjb2xsZWN0cyBhbGwgdGhlIGZhY3RvcnMgaW4gYSBzaW5nbGUgbGlzdCwgd2l0aCBhIGxvb3AKYW5kIG5vIHJlY3Vyc2lvbiwgYW5kIGNvbXB1dGUgdGhlIHByb2R1Y3QsIHdpdGggbm8gc3BlY2lhbCBjYXJlIGZvcgpyZXBlYXRlZCBjaHVua3MuCgogICBXaGVuIG4gaXMgbGFyZ2VyLCBjb21wdXRhdGlvbiBwYXNzIHRyb3VnaCBwcmltZSBzaWV2aW5nLiBBbiBoZWxwZXIKZnVuY3Rpb24gaXMgdXNlZCwgYXMgc3VnZ2VzdGVkIGJ5IFBldGVyIEx1c2Nobnk6CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLQogICAgICAgICAgICAgICAgICAgIG4hICAgICAgICAgIHwgfCAgIEwocCxuKQogICAgIG1zZihuKSA9IC0tLS0tLS0tLS0tLS0tID0gIHwgfCAgcAogICAgICAgICAgICAgICBbbi8yXSFeMi4yXmsgICAgIHA9MwoKICAgV2hlcmUgcCByYW5nZXMgb24gb2RkIHByaW1lIG51bWJlcnMuIFRoZSBleHBvbmVudCBrIGlzIGNob3NlbiB0bwpvYnRhaW4gYW4gb2RkIGludGVnZXIgbnVtYmVyOiBrIGlzIHRoZSBudW1iZXIgb2YgMSBiaXRzIGluIHRoZSBiaW5hcnkKcmVwcmVzZW50YXRpb24gb2YgW24vMl0uIFRoZSBmdW5jdGlvbiBMKHAsbikgY2FuIGJlIGRlZmluZWQgYXMgemVybwp3aGVuIHAgaXMgY29tcG9zaXRlLCBhbmQsIGZvciBhbnkgcHJpbWUgcCwgaXQgaXMgY29tcHV0ZWQgd2l0aDoKCiAgICAgICAgICAgICAgIC0tLQogICAgICAgICAgICAgICAgXCAgICBuCiAgICAgTChwLG4pID0gICAvICBbLS0tXSBtb2QgMiAgIDw9ICBsb2cgKG4pIC4KICAgICAgICAgICAgICAgLS0tICBwXmkgICAgICAgICAgICAgICAgcAogICAgICAgICAgICAgICBpPjAKCiAgIFdpdGggdGhpcyBoZWxwZXIgZnVuY3Rpb24sIHdlIGFyZSBhYmxlIHRvIGNvbXB1dGUgdGhlIG9kZCBwYXJ0IG9mIG4hCnVzaW5nIHRoZSByZWN1cnNpb24gaW1wbGllZCBieSBuIT1bbi8yXSFeMiptc2YobikqMl5rLiBUaGUgcmVjdXJzaW9uCnN0b3BzIHVzaW5nIHRoZSBzbWFsbC1uIGFsZ29yaXRobSBvbiBzb21lIFtuLzJeaV0uCgogICBCb3RoIHRoZSBhYm92ZSBhbGdvcml0aG1zIHVzZSBiaW5hcnkgc3BsaXR0aW5nIHRvIGNvbXB1dGUgdGhlCnByb2R1Y3Qgb2YgbWFueSBzbWFsbCBmYWN0b3JzLiBBdCBmaXJzdCBhcyBtYW55IHByb2R1Y3RzIGFzIHBvc3NpYmxlCmFyZSBhY2N1bXVsYXRlZCBpbiBhIHNpbmdsZSByZWdpc3RlciwgZ2VuZXJhdGluZyBhIGxpc3Qgb2YgZmFjdG9ycyB0aGF0CmZpdCBpbiBhIG1hY2hpbmUgd29yZC4gVGhpcyBsaXN0IGlzIHRoZW4gc3BsaXQgaW50byBoYWx2ZXMsIGFuZCB0aGUKcHJvZHVjdCBpcyBjb21wdXRlZCByZWN1cnNpdmVseS4KCiAgIFN1Y2ggc3BsaXR0aW5nIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gcmVwZWF0ZWQgTngxIG11bHRpcGxpZXMgc2luY2UKaXQgZm9ybXMgYmlnIG11bHRpcGxpZXMsIGFsbG93aW5nIEthcmF0c3ViYSBhbmQgaGlnaGVyIGFsZ29yaXRobXMgdG8gYmUKdXNlZC4gIEFuZCBldmVuIGJlbG93IHRoZSBLYXJhdHN1YmEgdGhyZXNob2xkIGEgYmlnIGJsb2NrIG9mIHdvcmsgY2FuCmJlIG1vcmUgZWZmaWNpZW50IGZvciB0aGUgYmFzZWNhc2UgYWxnb3JpdGhtLgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IEJpbm9taWFsIENvZWZmaWNpZW50cyBBbGdvcml0aG0sICBOZXh0OiBGaWJvbmFjY2kgTnVtYmVycyBBbGdvcml0aG0sICBQcmV2OiBGYWN0b3JpYWwgQWxnb3JpdGhtLCAgVXA6IE90aGVyIEFsZ29yaXRobXMKCjE1LjcuMyBCaW5vbWlhbCBDb2VmZmljaWVudHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQmlub21pYWwgY29lZmZpY2llbnRzIEMobixrKSBhcmUgY2FsY3VsYXRlZCBieSBmaXJzdCBhcnJhbmdpbmcgayA8PSBuLzIKdXNpbmcgQyhuLGspID0gQyhuLG4taykgaWYgbmVjZXNzYXJ5LCBhbmQgdGhlbiBldmFsdWF0aW5nIHRoZSBmb2xsb3dpbmcKcHJvZHVjdCBzaW1wbHkgZnJvbSBpPTIgdG8gaT1rLgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgayAgKG4taytpKQogICAgIEMobixrKSA9ICAobi1rKzEpICogcHJvZCAtLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgaT0yICAgIGkKCiAgIEl0J3MgZWFzeSB0byBzaG93IHRoYXQgZWFjaCBkZW5vbWluYXRvciBpIHdpbGwgZGl2aWRlIHRoZSBwcm9kdWN0IHNvCmZhciwgc28gdGhlIGV4YWN0IGRpdmlzaW9uIGFsZ29yaXRobSBpcyB1c2VkICgqbm90ZSBFeGFjdCBEaXZpc2lvbjo6KS4KCiAgIFRoZSBudW1lcmF0b3JzIG4taytpIGFuZCBkZW5vbWluYXRvcnMgaSBhcmUgZmlyc3QgYWNjdW11bGF0ZWQgaW50bwphcyBtYW55IGZpdCBhIGxpbWIsIHRvIHNhdmUgbXVsdGktcHJlY2lzaW9uIG9wZXJhdGlvbnMsIHRob3VnaCBmb3IKYG1wel9iaW5fdWknIHRoaXMgYXBwbGllcyBvbmx5IHRvIHRoZSBkaXZpc29ycywgc2luY2UgbiBpcyBhbiBgbXB6X3QnCmFuZCBuLWsraSBpbiBnZW5lcmFsIHdvbid0IGZpdCBpbiBhIGxpbWIgYXQgYWxsLgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IEZpYm9uYWNjaSBOdW1iZXJzIEFsZ29yaXRobSwgIE5leHQ6IEx1Y2FzIE51bWJlcnMgQWxnb3JpdGhtLCAgUHJldjogQmlub21pYWwgQ29lZmZpY2llbnRzIEFsZ29yaXRobSwgIFVwOiBPdGhlciBBbGdvcml0aG1zCgoxNS43LjQgRmlib25hY2NpIE51bWJlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgRmlib25hY2NpIGZ1bmN0aW9ucyBgbXB6X2ZpYl91aScgYW5kIGBtcHpfZmliMl91aScgYXJlIGRlc2lnbmVkIGZvcgpjYWxjdWxhdGluZyBpc29sYXRlZCBGW25dIG9yIEZbbl0sRltuLTFdIHZhbHVlcyBlZmZpY2llbnRseS4KCiAgIEZvciBzbWFsbCBuLCBhIHRhYmxlIG9mIHNpbmdsZSBsaW1iIHZhbHVlcyBpbiBgX19nbXBfZmliX3RhYmxlJyBpcwp1c2VkLiAgT24gYSAzMi1iaXQgbGltYiB0aGlzIGdvZXMgdXAgdG8gRls0N10sIG9yIG9uIGEgNjQtYml0IGxpbWIgdXAKdG8gRls5M10uICBGb3IgY29udmVuaWVuY2UgdGhlIHRhYmxlIHN0YXJ0cyBhdCBGWy0xXS4KCiAgIEJleW9uZCB0aGUgdGFibGUsIHZhbHVlcyBhcmUgZ2VuZXJhdGVkIHdpdGggYSBiaW5hcnkgcG93ZXJpbmcKYWxnb3JpdGhtLCBjYWxjdWxhdGluZyBhIHBhaXIgRltuXSBhbmQgRltuLTFdIHdvcmtpbmcgZnJvbSBoaWdoIHRvIGxvdwphY3Jvc3MgdGhlIGJpdHMgb2Ygbi4gIFRoZSBmb3JtdWxhcyB1c2VkIGFyZQoKICAgICBGWzJrKzFdID0gNCpGW2tdXjIgLSBGW2stMV1eMiArIDIqKC0xKV5rCiAgICAgRlsyay0xXSA9ICAgRltrXV4yICsgRltrLTFdXjIKCiAgICAgRlsya10gPSBGWzJrKzFdIC0gRlsyay0xXQoKICAgQXQgZWFjaCBzdGVwLCBrIGlzIHRoZSBoaWdoIGIgYml0cyBvZiBuLiAgSWYgdGhlIG5leHQgYml0IG9mIG4gaXMgMAp0aGVuIEZbMmtdLEZbMmstMV0gaXMgdXNlZCwgb3IgaWYgaXQncyBhIDEgdGhlbiBGWzJrKzFdLEZbMmtdIGlzIHVzZWQsCmFuZCB0aGUgcHJvY2VzcyByZXBlYXRlZCB1bnRpbCBhbGwgYml0cyBvZiBuIGFyZSBpbmNvcnBvcmF0ZWQuICBOb3RpY2UKdGhlc2UgZm9ybXVsYXMgcmVxdWlyZSBqdXN0IHR3byBzcXVhcmVzIHBlciBiaXQgb2Ygbi4KCiAgIEl0J2QgYmUgcG9zc2libGUgdG8gaGFuZGxlIHRoZSBmaXJzdCBmZXcgbiBhYm92ZSB0aGUgc2luZ2xlIGxpbWIKdGFibGUgd2l0aCBzaW1wbGUgYWRkaXRpb25zLCB1c2luZyB0aGUgZGVmaW5pbmcgRmlib25hY2NpIHJlY3VycmVuY2UKRltrKzFdPUZba10rRltrLTFdLCBidXQgdGhpcyBpcyBub3QgZG9uZSBzaW5jZSBpdCB1c3VhbGx5IHR1cm5zIG91dCB0bwpiZSBmYXN0ZXIgZm9yIG9ubHkgYWJvdXQgMTAgb3IgMjAgdmFsdWVzIG9mIG4sIGFuZCBpbmNsdWRpbmcgYSBibG9jayBvZgpjb2RlIGZvciBqdXN0IHRob3NlIGRvZXNuJ3Qgc2VlbSB3b3J0aHdoaWxlLiAgSWYgdGhleSByZWFsbHkgbWF0dGVyZWQKaXQnZCBiZSBiZXR0ZXIgdG8gZXh0ZW5kIHRoZSBkYXRhIHRhYmxlLgoKICAgVXNpbmcgYSB0YWJsZSBhdm9pZHMgbG90cyBvZiBjYWxjdWxhdGlvbnMgb24gc21hbGwgbnVtYmVycywgYW5kCm1ha2VzIHNtYWxsIG4gZ28gZmFzdC4gIEEgYmlnZ2VyIHRhYmxlIHdvdWxkIG1ha2UgbW9yZSBzbWFsbCBuIGdvIGZhc3QsCml0J3MganVzdCBhIHF1ZXN0aW9uIG9mIGJhbGFuY2luZyBzaXplIGFnYWluc3QgZGVzaXJlZCBzcGVlZC4gIEZvciBHTVAKdGhlIGNvZGUgaXMga2VwdCBjb21wYWN0LCB3aXRoIHRoZSBlbXBoYXNpcyBwcmltYXJpbHkgb24gYSBnb29kCnBvd2VyaW5nIGFsZ29yaXRobS4KCiAgIGBtcHpfZmliMl91aScgcmV0dXJucyBib3RoIEZbbl0gYW5kIEZbbi0xXSwgYnV0IGBtcHpfZmliX3VpJyBpcyBvbmx5CmludGVyZXN0ZWQgaW4gRltuXS4gIEluIHRoaXMgY2FzZSB0aGUgbGFzdCBzdGVwIG9mIHRoZSBhbGdvcml0aG0gY2FuCmJlY29tZSBvbmUgbXVsdGlwbHkgaW5zdGVhZCBvZiB0d28gc3F1YXJlcy4gIE9uZSBvZiB0aGUgZm9sbG93aW5nIHR3bwpmb3JtdWxhcyBpcyB1c2VkLCBhY2NvcmRpbmcgYXMgbiBpcyBvZGQgb3IgZXZlbi4KCiAgICAgRlsya10gICA9IEZba10qKEZba10rMkZbay0xXSkKCiAgICAgRlsyaysxXSA9ICgyRltrXStGW2stMV0pKigyRltrXS1GW2stMV0pICsgMiooLTEpXmsKCiAgIEZbMmsrMV0gaGVyZSBpcyB0aGUgc2FtZSBhcyBhYm92ZSwganVzdCByZWFycmFuZ2VkIHRvIGJlIGEgbXVsdGlwbHkuCkZvciBpbnRlcmVzdCwgdGhlIDIqKC0xKV5rIHRlcm0gYm90aCBoZXJlIGFuZCBhYm92ZSBjYW4gYmUgYXBwbGllZCBqdXN0CnRvIHRoZSBsb3cgbGltYiBvZiB0aGUgY2FsY3VsYXRpb24sIHdpdGhvdXQgYSBjYXJyeSBvciBib3Jyb3cgaW50bwpmdXJ0aGVyIGxpbWJzLCB3aGljaCBzYXZlcyBzb21lIGNvZGUgc2l6ZS4gIFNlZSBjb21tZW50cyB3aXRoCmBtcHpfZmliX3VpJyBhbmQgdGhlIGludGVybmFsIGBtcG5fZmliMl91aScgZm9yIGhvdyB0aGlzIGlzIGRvbmUuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogTHVjYXMgTnVtYmVycyBBbGdvcml0aG0sICBOZXh0OiBSYW5kb20gTnVtYmVyIEFsZ29yaXRobXMsICBQcmV2OiBGaWJvbmFjY2kgTnVtYmVycyBBbGdvcml0aG0sICBVcDogT3RoZXIgQWxnb3JpdGhtcwoKMTUuNy41IEx1Y2FzIE51bWJlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmBtcHpfbHVjbnVtMl91aScgZGVyaXZlcyBhIHBhaXIgb2YgTHVjYXMgbnVtYmVycyBmcm9tIGEgcGFpciBvZgpGaWJvbmFjY2kgbnVtYmVycyB3aXRoIHRoZSBmb2xsb3dpbmcgc2ltcGxlIGZvcm11bGFzLgoKICAgICBMW2tdICAgPSAgIEZba10gKyAyKkZbay0xXQogICAgIExbay0xXSA9IDIqRltrXSAtICAgRltrLTFdCgogICBgbXB6X2x1Y251bV91aScgaXMgb25seSBpbnRlcmVzdGVkIGluIExbbl0sIGFuZCBzb21lIHdvcmsgY2FuIGJlCnNhdmVkLiAgVHJhaWxpbmcgemVybyBiaXRzIG9uIG4gY2FuIGJlIGhhbmRsZWQgd2l0aCBhIHNpbmdsZSBzcXVhcmUKZWFjaC4KCiAgICAgTFsya10gPSBMW2tdXjIgLSAyKigtMSleawoKICAgQW5kIHRoZSBsb3dlc3QgMSBiaXQgY2FuIGJlIGhhbmRsZWQgd2l0aCBvbmUgbXVsdGlwbHkgb2YgYSBwYWlyIG9mCkZpYm9uYWNjaSBudW1iZXJzLCBzaW1pbGFyIHRvIHdoYXQgYG1wel9maWJfdWknIGRvZXMuCgogICAgIExbMmsrMV0gPSA1KkZbay0xXSooMipGW2tdK0Zbay0xXSkgLSA0KigtMSleawoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IFJhbmRvbSBOdW1iZXIgQWxnb3JpdGhtcywgIFByZXY6IEx1Y2FzIE51bWJlcnMgQWxnb3JpdGhtLCAgVXA6IE90aGVyIEFsZ29yaXRobXMKCjE1LjcuNiBSYW5kb20gTnVtYmVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkZvciB0aGUgYHVyYW5kb21iJyBmdW5jdGlvbnMsIHJhbmRvbSBudW1iZXJzIGFyZSBnZW5lcmF0ZWQgc2ltcGx5IGJ5CmNvbmNhdGVuYXRpbmcgYml0cyBwcm9kdWNlZCBieSB0aGUgZ2VuZXJhdG9yLiAgQXMgbG9uZyBhcyB0aGUgZ2VuZXJhdG9yCmhhcyBnb29kIHJhbmRvbW5lc3MgcHJvcGVydGllcyB0aGlzIHdpbGwgcHJvZHVjZSB3ZWxsLWRpc3RyaWJ1dGVkIE4gYml0Cm51bWJlcnMuCgogICBGb3IgdGhlIGB1cmFuZG9tbScgZnVuY3Rpb25zLCByYW5kb20gbnVtYmVycyBpbiBhIHJhbmdlIDA8PVI8TiBhcmUKZ2VuZXJhdGVkIGJ5IHRha2luZyB2YWx1ZXMgUiBvZiBjZWlsKGxvZzIoTikpIGJpdHMgZWFjaCB1bnRpbCBvbmUKc2F0aXNmaWVzIFI8Ti4gIFRoaXMgd2lsbCBub3JtYWxseSByZXF1aXJlIG9ubHkgb25lIG9yIHR3byBhdHRlbXB0cywKYnV0IHRoZSBhdHRlbXB0cyBhcmUgbGltaXRlZCBpbiBjYXNlIHRoZSBnZW5lcmF0b3IgaXMgc29tZWhvdwpkZWdlbmVyYXRlIGFuZCBwcm9kdWNlcyBvbmx5IDEgYml0cyBvciBzaW1pbGFyLgoKICAgVGhlIE1lcnNlbm5lIFR3aXN0ZXIgZ2VuZXJhdG9yIGlzIGJ5IE1hdHN1bW90byBhbmQgTmlzaGltdXJhICgqbm90ZQpSZWZlcmVuY2VzOjopLiAgSXQgaGFzIGEgbm9uLXJlcGVhdGluZyBwZXJpb2Qgb2YgMl4xOTkzNy0xLCB3aGljaCBpcyBhCk1lcnNlbm5lIHByaW1lLCBoZW5jZSB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdG9yLiAgVGhlIHN0YXRlIGlzIDYyNAp3b3JkcyBvZiAzMi1iaXRzIGVhY2gsIHdoaWNoIGlzIGl0ZXJhdGVkIHdpdGggb25lIFhPUiBhbmQgc2hpZnQgZm9yIGVhY2gKMzItYml0IHdvcmQgZ2VuZXJhdGVkLCBtYWtpbmcgdGhlIGFsZ29yaXRobSB2ZXJ5IGZhc3QuICBSYW5kb21uZXNzCnByb3BlcnRpZXMgYXJlIGFsc28gdmVyeSBnb29kIGFuZCB0aGlzIGlzIHRoZSBkZWZhdWx0IGFsZ29yaXRobSB1c2VkIGJ5CkdNUC4KCiAgIExpbmVhciBjb25ncnVlbnRpYWwgZ2VuZXJhdG9ycyBhcmUgZGVzY3JpYmVkIGluIG1hbnkgdGV4dCBib29rcywgZm9yCmluc3RhbmNlIEtudXRoIHZvbHVtZSAyICgqbm90ZSBSZWZlcmVuY2VzOjopLiAgV2l0aCBhIG1vZHVsdXMgTSBhbmQKcGFyYW1ldGVycyBBIGFuZCBDLCBhbiBpbnRlZ2VyIHN0YXRlIFMgaXMgaXRlcmF0ZWQgYnkgdGhlIGZvcm11bGEgUyA8LQpBKlMrQyBtb2QgTS4gIEF0IGVhY2ggc3RlcCB0aGUgbmV3IHN0YXRlIGlzIGEgbGluZWFyIGZ1bmN0aW9uIG9mIHRoZQpwcmV2aW91cywgbW9kIE0sIGhlbmNlIHRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0b3IuCgogICBJbiBHTVAgb25seSBtb2R1bGkgb2YgdGhlIGZvcm0gMl5OIGFyZSBzdXBwb3J0ZWQsIGFuZCB0aGUgY3VycmVudAppbXBsZW1lbnRhdGlvbiBpcyBub3QgYXMgd2VsbCBvcHRpbWl6ZWQgYXMgaXQgY291bGQgYmUuICBPdmVyaGVhZHMgYXJlCnNpZ25pZmljYW50IHdoZW4gTiBpcyBzbWFsbCwgYW5kIHdoZW4gTiBpcyBsYXJnZSBjbGVhcmx5IHRoZSBtdWx0aXBseQphdCBlYWNoIHN0ZXAgd2lsbCBiZWNvbWUgc2xvdy4gIFRoaXMgaXMgbm90IGEgYmlnIGNvbmNlcm4sIHNpbmNlIHRoZQpNZXJzZW5uZSBUd2lzdGVyIGdlbmVyYXRvciBpcyBiZXR0ZXIgaW4gZXZlcnkgcmVzcGVjdCBhbmQgaXMgdGhlcmVmb3JlCnJlY29tbWVuZGVkIGZvciBhbGwgbm9ybWFsIGFwcGxpY2F0aW9ucy4KCiAgIEZvciBib3RoIGdlbmVyYXRvcnMgdGhlIGN1cnJlbnQgc3RhdGUgY2FuIGJlIGRlZHVjZWQgYnkgb2JzZXJ2aW5nCmVub3VnaCBvdXRwdXQgYW5kIGFwcGx5aW5nIHNvbWUgbGluZWFyIGFsZ2VicmEgKG92ZXIgR0YoMikgaW4gdGhlIGNhc2UKb2YgdGhlIE1lcnNlbm5lIFR3aXN0ZXIpLiAgVGhpcyBnZW5lcmFsbHkgbWVhbnMgcmF3IG91dHB1dCBpcwp1bnN1aXRhYmxlIGZvciBjcnlwdG9ncmFwaGljIGFwcGxpY2F0aW9ucyB3aXRob3V0IGZ1cnRoZXIgaGFzaGluZyBvcgp0aGUgbGlrZS4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBBc3NlbWJseSBDb2RpbmcsICBQcmV2OiBPdGhlciBBbGdvcml0aG1zLCAgVXA6IEFsZ29yaXRobXMKCjE1LjggQXNzZW1ibHkgQ29kaW5nCj09PT09PT09PT09PT09PT09PT09CgpUaGUgYXNzZW1ibHkgc3Vicm91dGluZXMgaW4gR01QIGFyZSB0aGUgbW9zdCBzaWduaWZpY2FudCBzb3VyY2Ugb2YKc3BlZWQgYXQgc21hbGwgdG8gbW9kZXJhdGUgc2l6ZXMuICBBdCBsYXJnZXIgc2l6ZXMgYWxnb3JpdGhtIHNlbGVjdGlvbgpiZWNvbWVzIG1vcmUgaW1wb3J0YW50LCBidXQgb2YgY291cnNlIHNwZWVkdXBzIGluIGxvdyBsZXZlbCByb3V0aW5lcwp3aWxsIHN0aWxsIHNwZWVkIHVwIGV2ZXJ5dGhpbmcgcHJvcG9ydGlvbmFsbHkuCgogICBDYXJyeSBoYW5kbGluZyBhbmQgd2lkZW5pbmcgbXVsdGlwbGllcyB0aGF0IGFyZSBpbXBvcnRhbnQgZm9yIEdNUApjYW4ndCBiZSBlYXNpbHkgZXhwcmVzc2VkIGluIEMuICBHQ0MgYGFzbScgYmxvY2tzIGhlbHAgYSBsb3QgYW5kIGFyZQpwcm92aWRlZCBpbiBgbG9uZ2xvbmcuaCcsIGJ1dCBoYW5kIGNvZGluZyBsb3cgbGV2ZWwgcm91dGluZXMgaW52YXJpYWJseQpvZmZlcnMgYSBzcGVlZHVwIG92ZXIgZ2VuZXJpYyBDIGJ5IGEgZmFjdG9yIG9mIGFueXRoaW5nIGZyb20gMiB0byAxMC4KCiogTWVudToKCiogQXNzZW1ibHkgQ29kZSBPcmdhbmlzYXRpb246OgoqIEFzc2VtYmx5IEJhc2ljczo6CiogQXNzZW1ibHkgQ2FycnkgUHJvcGFnYXRpb246OgoqIEFzc2VtYmx5IENhY2hlIEhhbmRsaW5nOjoKKiBBc3NlbWJseSBGdW5jdGlvbmFsIFVuaXRzOjoKKiBBc3NlbWJseSBGbG9hdGluZyBQb2ludDo6CiogQXNzZW1ibHkgU0lNRCBJbnN0cnVjdGlvbnM6OgoqIEFzc2VtYmx5IFNvZnR3YXJlIFBpcGVsaW5pbmc6OgoqIEFzc2VtYmx5IExvb3AgVW5yb2xsaW5nOjoKKiBBc3NlbWJseSBXcml0aW5nIEd1aWRlOjoKCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBBc3NlbWJseSBDb2RlIE9yZ2FuaXNhdGlvbiwgIE5leHQ6IEFzc2VtYmx5IEJhc2ljcywgIFByZXY6IEFzc2VtYmx5IENvZGluZywgIFVwOiBBc3NlbWJseSBDb2RpbmcKCjE1LjguMSBDb2RlIE9yZ2FuaXNhdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSB2YXJpb3VzIGBtcG4nIHN1YmRpcmVjdG9yaWVzIGNvbnRhaW4gbWFjaGluZS1kZXBlbmRlbnQgY29kZSwgd3JpdHRlbgppbiBDIG9yIGFzc2VtYmx5LiAgVGhlIGBtcG4vZ2VuZXJpYycgc3ViZGlyZWN0b3J5IGNvbnRhaW5zIGRlZmF1bHQgY29kZSwKdXNlZCB3aGVuIHRoZXJlJ3Mgbm8gbWFjaGluZS1zcGVjaWZpYyB2ZXJzaW9uIG9mIGEgcGFydGljdWxhciBmaWxlLgoKICAgRWFjaCBgbXBuJyBzdWJkaXJlY3RvcnkgaXMgZm9yIGFuIElTQSBmYW1pbHkuICBHZW5lcmFsbHkgMzItYml0IGFuZAo2NC1iaXQgdmFyaWFudHMgaW4gYSBmYW1pbHkgY2Fubm90IHNoYXJlIGNvZGUgYW5kIGhhdmUgc2VwYXJhdGUKZGlyZWN0b3JpZXMuICBXaXRoaW4gYSBmYW1pbHkgZnVydGhlciBzdWJkaXJlY3RvcmllcyBtYXkgZXhpc3QgZm9yIENQVQp2YXJpYW50cy4KCiAgIEluIGVhY2ggZGlyZWN0b3J5IGEgYG5haWxzJyBzdWJkaXJlY3RvcnkgbWF5IGV4aXN0LCBob2xkaW5nIGNvZGUgd2l0aApuYWlscyBzdXBwb3J0IGZvciB0aGF0IENQVSB2YXJpYW50LiAgQSBgTkFJTFNfU1VQUE9SVCcgZGlyZWN0aXZlIGluIGVhY2gKZmlsZSBpbmRpY2F0ZXMgdGhlIG5haWxzIHZhbHVlcyB0aGUgY29kZSBoYW5kbGVzLiAgTmFpbHMgY29kZSBvbmx5CmV4aXN0cyB3aGVyZSBpdCdzIGZhc3Rlciwgb3IgcHJvbWlzZXMgdG8gYmUgZmFzdGVyLCB0aGFuIHBsYWluIGNvZGUuClRoZXJlJ3Mgbm8gZWZmb3J0IHB1dCBpbnRvIG5haWxzIGlmIHRoZXkncmUgbm90IGdvaW5nIHRvIGVuaGFuY2UgYQpnaXZlbiBDUFUuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogQXNzZW1ibHkgQmFzaWNzLCAgTmV4dDogQXNzZW1ibHkgQ2FycnkgUHJvcGFnYXRpb24sICBQcmV2OiBBc3NlbWJseSBDb2RlIE9yZ2FuaXNhdGlvbiwgIFVwOiBBc3NlbWJseSBDb2RpbmcKCjE1LjguMiBBc3NlbWJseSBCYXNpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKYG1wbl9hZGRtdWxfMScgYW5kIGBtcG5fc3VibXVsXzEnIGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQgcm91dGluZXMgZm9yCm92ZXJhbGwgR01QIHBlcmZvcm1hbmNlLiAgQWxsIG11bHRpcGxpY2F0aW9ucyBhbmQgZGl2aXNpb25zIGNvbWUgZG93biB0bwpyZXBlYXRlZCBjYWxscyB0byB0aGVzZS4gIGBtcG5fYWRkX24nLCBgbXBuX3N1Yl9uJywgYG1wbl9sc2hpZnQnIGFuZApgbXBuX3JzaGlmdCcgYXJlIG5leHQgbW9zdCBpbXBvcnRhbnQuCgogICBPbiBzb21lIENQVXMgYXNzZW1ibHkgdmVyc2lvbnMgb2YgdGhlIGludGVybmFsIGZ1bmN0aW9ucwpgbXBuX211bF9iYXNlY2FzZScgYW5kIGBtcG5fc3FyX2Jhc2VjYXNlJyBnaXZlIHNpZ25pZmljYW50IHNwZWVkdXBzLAptYWlubHkgdGhyb3VnaCBhdm9pZGluZyBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkcy4gIFRoZXkgY2FuIGFsc28KcG90ZW50aWFsbHkgbWFrZSBiZXR0ZXIgdXNlIG9mIGEgd2lkZSBzdXBlcnNjYWxhciBwcm9jZXNzb3IsIGFzIGNhbgpiaWdnZXIgcHJpbWl0aXZlcyBsaWtlIGBtcG5fYWRkbXVsXzInIG9yIGBtcG5fYWRkbXVsXzQnLgoKICAgVGhlIHJlc3RyaWN0aW9ucyBvbiBvdmVybGFwcyBiZXR3ZWVuIHNvdXJjZXMgYW5kIGRlc3RpbmF0aW9ucyAoKm5vdGUKTG93LWxldmVsIEZ1bmN0aW9uczo6KSBhcmUgZGVzaWduZWQgdG8gZmFjaWxpdGF0ZSBhIHZhcmlldHkgb2YKaW1wbGVtZW50YXRpb25zLiAgRm9yIGV4YW1wbGUsIGtub3dpbmcgYG1wbl9hZGRfbicgd29uJ3QgaGF2ZSBwYXJ0bHkKb3ZlcmxhcHBpbmcgc291cmNlcyBhbmQgZGVzdGluYXRpb24gbWVhbnMgcmVhZGluZyBjYW4gYmUgZG9uZSBmYXIgYWhlYWQKb2Ygd3JpdGluZyBvbiBzdXBlcnNjYWxhciBwcm9jZXNzb3JzLCBhbmQgbG9vcHMgY2FuIGJlIHZlY3Rvcml6ZWQgb24gYQp2ZWN0b3IgcHJvY2Vzc29yLCBkZXBlbmRpbmcgb24gdGhlIGNhcnJ5IGhhbmRsaW5nLgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IEFzc2VtYmx5IENhcnJ5IFByb3BhZ2F0aW9uLCAgTmV4dDogQXNzZW1ibHkgQ2FjaGUgSGFuZGxpbmcsICBQcmV2OiBBc3NlbWJseSBCYXNpY3MsICBVcDogQXNzZW1ibHkgQ29kaW5nCgoxNS44LjMgQ2FycnkgUHJvcGFnYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgcHJvYmxlbSB0aGF0IHByZXNlbnRzIG1vc3QgY2hhbGxlbmdlcyBpbiBHTVAgaXMgcHJvcGFnYXRpbmcgY2Fycmllcwpmcm9tIG9uZSBsaW1iIHRvIHRoZSBuZXh0LiAgSW4gZnVuY3Rpb25zIGxpa2UgYG1wbl9hZGRtdWxfMScgYW5kCmBtcG5fYWRkX24nLCBjYXJyaWVzIGFyZSB0aGUgb25seSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBsaW1iIG9wZXJhdGlvbnMuCgogICBPbiBwcm9jZXNzb3JzIHdpdGggY2FycnkgZmxhZ3MsIGEgc3RyYWlnaHRmb3J3YXJkIENJU0Mgc3R5bGUgYGFkYycgaXMKZ2VuZXJhbGx5IGJlc3QuICBBTUQgSzYgYG1wbl9hZGRtdWxfMScgaG93ZXZlciBpcyBhbiBleGFtcGxlIG9mIGFuCnVudXN1YWwgc2V0IG9mIGNpcmN1bXN0YW5jZXMgd2hlcmUgYSBicmFuY2ggd29ya3Mgb3V0IGJldHRlci4KCiAgIE9uIFJJU0MgcHJvY2Vzc29ycyBnZW5lcmFsbHkgYW4gYWRkIGFuZCBjb21wYXJlIGZvciBvdmVyZmxvdyBpcwp1c2VkLiAgVGhpcyBzb3J0IG9mIHRoaW5nIGNhbiBiZSBzZWVuIGluIGBtcG4vZ2VuZXJpYy9hb3JzX24uYycuICBTb21lCmNhcnJ5IHByb3BhZ2F0aW9uIHNjaGVtZXMgcmVxdWlyZSA0IGluc3RydWN0aW9ucywgbWVhbmluZyBhdCBsZWFzdCA0CmN5Y2xlcyBwZXIgbGltYiwgYnV0IG90aGVyIHNjaGVtZXMgbWF5IHVzZSBqdXN0IDEgb3IgMi4gIE9uIHdpZGUKc3VwZXJzY2FsYXIgcHJvY2Vzc29ycyBwZXJmb3JtYW5jZSBtYXkgYmUgY29tcGxldGVseSBkZXRlcm1pbmVkIGJ5IHRoZQpudW1iZXIgb2YgZGVwZW5kZW50IGluc3RydWN0aW9ucyBiZXR3ZWVuIGNhcnJ5LWluIGFuZCBjYXJyeS1vdXQgZm9yCmVhY2ggbGltYi4KCiAgIE9uIHZlY3RvciBwcm9jZXNzb3JzIGdvb2QgdXNlIGNhbiBiZSBtYWRlIG9mIHRoZSBmYWN0IHRoYXQgYSBjYXJyeQpiaXQgb25seSB2ZXJ5IHJhcmVseSBwcm9wYWdhdGVzIG1vcmUgdGhhbiBvbmUgbGltYi4gIFdoZW4gYWRkaW5nIGEKc2luZ2xlIGJpdCB0byBhIGxpbWIsIHRoZXJlJ3Mgb25seSBhIGNhcnJ5IG91dCBpZiB0aGF0IGxpbWIgd2FzCmAweEZGLi4uRkYnIHdoaWNoIG9uIHJhbmRvbSBkYXRhIHdpbGwgYmUgb25seSAxIGluIDJebXBfYml0c19wZXJfbGltYi4KYG1wbi9jcmF5L2FkZF9uLmMnIGlzIGFuIGV4YW1wbGUgb2YgdGhpcywgaXQgYWRkcyBhbGwgbGltYnMgaW4KcGFyYWxsZWwsIGFkZHMgb25lIHNldCBvZiBjYXJyeSBiaXRzIGluIHBhcmFsbGVsIGFuZCB0aGVuIG9ubHkgcmFyZWx5Cm5lZWRzIHRvIGZhbGwgdGhyb3VnaCB0byBhIGxvb3AgcHJvcGFnYXRpbmcgZnVydGhlciBjYXJyaWVzLgoKICAgT24gdGhlIHg4NnMsIEdDQyAoYXMgb2YgdmVyc2lvbiAyLjk1LjIpIGRvZXNuJ3QgZ2VuZXJhdGUKcGFydGljdWxhcmx5IGdvb2QgY29kZSBmb3IgdGhlIFJJU0Mgc3R5bGUgaWRpb21zIHRoYXQgYXJlIG5lY2Vzc2FyeSB0bwpoYW5kbGUgY2FycnkgYml0cyBpbiBDLiAgT2Z0ZW4gY29uZGl0aW9uYWwganVtcHMgYXJlIGdlbmVyYXRlZCB3aGVyZQpgYWRjJyBvciBgc2JiJyBmb3JtcyB3b3VsZCBiZSBiZXR0ZXIuICBBbmQgc28gdW5mb3J0dW5hdGVseSBhbG1vc3QgYW55Cmxvb3AgaW52b2x2aW5nIGNhcnJ5IGJpdHMgbmVlZHMgdG8gYmUgY29kZWQgaW4gYXNzZW1ibHkgZm9yIGJlc3QKcmVzdWx0cy4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBBc3NlbWJseSBDYWNoZSBIYW5kbGluZywgIE5leHQ6IEFzc2VtYmx5IEZ1bmN0aW9uYWwgVW5pdHMsICBQcmV2OiBBc3NlbWJseSBDYXJyeSBQcm9wYWdhdGlvbiwgIFVwOiBBc3NlbWJseSBDb2RpbmcKCjE1LjguNCBDYWNoZSBIYW5kbGluZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkdNUCBhaW1zIHRvIHBlcmZvcm0gd2VsbCBib3RoIG9uIG9wZXJhbmRzIHRoYXQgZml0IGVudGlyZWx5IGluIEwxIGNhY2hlCmFuZCB0aG9zZSB3aGljaCBkb24ndC4KCiAgIEJhc2ljIHJvdXRpbmVzIGxpa2UgYG1wbl9hZGRfbicgb3IgYG1wbl9sc2hpZnQnIGFyZSBvZnRlbiB1c2VkIG9uCmxhcmdlIG9wZXJhbmRzLCBzbyBMMiBhbmQgbWFpbiBtZW1vcnkgcGVyZm9ybWFuY2UgaXMgaW1wb3J0YW50IGZvciB0aGVtLgpgbXBuX211bF8xJyBhbmQgYG1wbl9hZGRtdWxfMScgYXJlIG1vc3RseSB1c2VkIGZvciBtdWx0aXBseSBhbmQgc3F1YXJlCmJhc2VjYXNlcywgc28gTDEgcGVyZm9ybWFuY2UgbWF0dGVycyBtb3N0IGZvciB0aGVtLCB1bmxlc3MgYXNzZW1ibHkKdmVyc2lvbnMgb2YgYG1wbl9tdWxfYmFzZWNhc2UnIGFuZCBgbXBuX3Nxcl9iYXNlY2FzZScgZXhpc3QsIGluIHdoaWNoCmNhc2UgdGhlIHJlbWFpbmluZyB1c2VzIGFyZSBtb3N0bHkgZm9yIGxhcmdlciBvcGVyYW5kcy4KCiAgIEZvciBMMiBvciBtYWluIG1lbW9yeSBvcGVyYW5kcywgbWVtb3J5IGFjY2VzcyB0aW1lcyB3aWxsIGFsbW9zdApjZXJ0YWlubHkgYmUgbW9yZSB0aGFuIHRoZSBjYWxjdWxhdGlvbiB0aW1lLiAgVGhlIGFpbSB0aGVyZWZvcmUgaXMgdG8KbWF4aW1pemUgbWVtb3J5IHRocm91Z2hwdXQsIGJ5IHN0YXJ0aW5nIGEgbG9hZCBvZiB0aGUgbmV4dCBjYWNoZSBsaW5lCndoaWxlIHByb2Nlc3NpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBwcmV2aW91cyBvbmUuICBDbGVhcmx5IHRoaXMgaXMKb25seSBwb3NzaWJsZSBpZiB0aGUgY2hpcCBoYXMgYSBsb2NrLXVwIGZyZWUgY2FjaGUgb3Igc29tZSBzb3J0IG9mCnByZWZldGNoIGluc3RydWN0aW9uLiAgTW9zdCBjdXJyZW50IGNoaXBzIGhhdmUgYm90aCB0aGVzZSBmZWF0dXJlcy4KCiAgIFByZWZldGNoaW5nIHNvdXJjZXMgY29tYmluZXMgd2VsbCB3aXRoIGxvb3AgdW5yb2xsaW5nLCBzaW5jZSBhCnByZWZldGNoIGNhbiBiZSBpbml0aWF0ZWQgb25jZSBwZXIgdW5yb2xsZWQgbG9vcCAob3IgbW9yZSB0aGFuIG9uY2UgaWYKdGhlIGxvb3AgY292ZXJzIG1vcmUgdGhhbiBvbmUgY2FjaGUgbGluZSkuCgogICBPbiBDUFVzIHdpdGhvdXQgd3JpdGUtYWxsb2NhdGUgY2FjaGVzLCBwcmVmZXRjaGluZyBkZXN0aW5hdGlvbnMgd2lsbAplbnN1cmUgaW5kaXZpZHVhbCBzdG9yZXMgZG9uJ3QgZ28gZnVydGhlciBkb3duIHRoZSBjYWNoZSBoaWVyYXJjaHksCmxpbWl0aW5nIGJhbmR3aWR0aC4gIE9mIGNvdXJzZSBmb3IgY2FsY3VsYXRpb25zIHdoaWNoIGFyZSBzbG93IGFueXdheSwKbGlrZSBgbXBuX2RpdnJlbV8xJywgd3JpdGUtdGhyb3VnaHMgbWlnaHQgYmUgZmluZS4KCiAgIFRoZSBkaXN0YW5jZSBhaGVhZCB0byBwcmVmZXRjaCB3aWxsIGJlIGRldGVybWluZWQgYnkgbWVtb3J5IGxhdGVuY3kKdmVyc3VzIHRocm91Z2hwdXQuICBUaGUgYWltIG9mIGNvdXJzZSBpcyB0byBoYXZlIGRhdGEgYXJyaXZpbmcKY29udGludW91c2x5LCBhdCBwZWFrIHRocm91Z2hwdXQuICBTb21lIENQVXMgaGF2ZSBsaW1pdHMgb24gdGhlIG51bWJlcgpvZiBmZXRjaGVzIG9yIHByZWZldGNoZXMgaW4gcHJvZ3Jlc3MuCgogICBJZiBhIHNwZWNpYWwgcHJlZmV0Y2ggaW5zdHJ1Y3Rpb24gZG9lc24ndCBleGlzdCB0aGVuIGEgcGxhaW4gbG9hZApjYW4gYmUgdXNlZCwgYnV0IGluIHRoYXQgY2FzZSBjYXJlIG11c3QgYmUgdGFrZW4gbm90IHRvIGF0dGVtcHQgdG8gcmVhZApwYXN0IHRoZSBlbmQgb2YgYW4gb3BlcmFuZCwgc2luY2UgdGhhdCBtaWdodCBwcm9kdWNlIGEgc2VnbWVudGF0aW9uCnZpb2xhdGlvbi4KCiAgIFNvbWUgQ1BVcyBvciBzeXN0ZW1zIGhhdmUgaGFyZHdhcmUgdGhhdCBkZXRlY3RzIHNlcXVlbnRpYWwgbWVtb3J5CmFjY2Vzc2VzIGFuZCBpbml0aWF0ZXMgc3VpdGFibGUgY2FjaGUgbW92ZW1lbnRzIGF1dG9tYXRpY2FsbHksIG1ha2luZwpsaWZlIGVhc3kuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogQXNzZW1ibHkgRnVuY3Rpb25hbCBVbml0cywgIE5leHQ6IEFzc2VtYmx5IEZsb2F0aW5nIFBvaW50LCAgUHJldjogQXNzZW1ibHkgQ2FjaGUgSGFuZGxpbmcsICBVcDogQXNzZW1ibHkgQ29kaW5nCgoxNS44LjUgRnVuY3Rpb25hbCBVbml0cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKV2hlbiBjaG9vc2luZyBhbiBhcHByb2FjaCBmb3IgYW4gYXNzZW1ibHkgbG9vcCwgY29uc2lkZXJhdGlvbiBpcyBnaXZlbgp0byB3aGF0IG9wZXJhdGlvbnMgY2FuIGV4ZWN1dGUgc2ltdWx0YW5lb3VzbHkgYW5kIHdoYXQgdGhyb3VnaHB1dCBjYW4KdGhlcmVieSBiZSBhY2hpZXZlZC4gIEluIHNvbWUgY2FzZXMgYW4gYWxnb3JpdGhtIGNhbiBiZSB0d2Vha2VkIHRvCmFjY29tbW9kYXRlIGF2YWlsYWJsZSByZXNvdXJjZXMuCgogICBMb29wIGNvbnRyb2wgd2lsbCBnZW5lcmFsbHkgcmVxdWlyZSBhIGNvdW50ZXIgYW5kIHBvaW50ZXIgdXBkYXRlcywKY29zdGluZyBhcyBtdWNoIGFzIDUgaW5zdHJ1Y3Rpb25zLCBwbHVzIGFueSBkZWxheXMgYSBicmFuY2ggaW50cm9kdWNlcy4KQ1BVIGFkZHJlc3NpbmcgbW9kZXMgbWlnaHQgcmVkdWNlIHBvaW50ZXIgdXBkYXRlcywgcGVyaGFwcyBieSBhbGxvd2luZwpqdXN0IG9uZSB1cGRhdGluZyBwb2ludGVyIGFuZCBvdGhlcnMgZXhwcmVzc2VkIGFzIG9mZnNldHMgZnJvbSBpdCwgb3IKb24gQ0lTQyBjaGlwcyB3aXRoIGFsbCBhZGRyZXNzaW5nIGRvbmUgd2l0aCB0aGUgbG9vcCBjb3VudGVyIGFzIGEKc2NhbGVkIGluZGV4LgoKICAgVGhlIGZpbmFsIGxvb3AgY29udHJvbCBjb3N0IGNhbiBiZSBhbW9ydGlzZWQgYnkgcHJvY2Vzc2luZyBzZXZlcmFsCmxpbWJzIGluIGVhY2ggaXRlcmF0aW9uICgqbm90ZSBBc3NlbWJseSBMb29wIFVucm9sbGluZzo6KS4gIFRoaXMgYXQKbGVhc3QgZW5zdXJlcyBsb29wIGNvbnRyb2wgaXNuJ3QgYSBiaWcgZnJhY3Rpb24gdGhlIHdvcmsgZG9uZS4KCiAgIE1lbW9yeSB0aHJvdWdocHV0IGlzIGFsd2F5cyBhIGxpbWl0LiAgSWYgcGVyaGFwcyBvbmx5IG9uZSBsb2FkIG9yCm9uZSBzdG9yZSBjYW4gYmUgZG9uZSBwZXIgY3ljbGUgdGhlbiAzIGN5Y2xlcy9saW1iIHdpbGwgdGhlIHRvcCBzcGVlZApmb3IgImJpbmFyeSIgb3BlcmF0aW9ucyBsaWtlIGBtcG5fYWRkX24nLCBhbmQgYW55IGNvZGUgYWNoaWV2aW5nIHRoYXQKaXMgb3B0aW1hbC4KCiAgIEludGVnZXIgcmVzb3VyY2VzIGNhbiBiZSBmcmVlZCB1cCBieSBoYXZpbmcgdGhlIGxvb3AgY291bnRlciBpbiBhCmZsb2F0IHJlZ2lzdGVyLCBvciBieSBwcmVzc2luZyB0aGUgZmxvYXQgdW5pdHMgaW50byB1c2UgZm9yIHNvbWUKbXVsdGlwbHlpbmcsIHBlcmhhcHMgZG9pbmcgZXZlcnkgc2Vjb25kIGxpbWIgb24gdGhlIGZsb2F0IHNpZGUgKCpub3RlCkFzc2VtYmx5IEZsb2F0aW5nIFBvaW50OjopLgoKICAgRmxvYXQgcmVzb3VyY2VzIGNhbiBiZSBmcmVlZCB1cCBieSBkb2luZyBjYXJyeSBwcm9wYWdhdGlvbiBvbiB0aGUKaW50ZWdlciBzaWRlLCBvciBldmVuIGJ5IGRvaW5nIGludGVnZXIgdG8gZmxvYXQgY29udmVyc2lvbnMgaW4gaW50ZWdlcnMKdXNpbmcgYml0IHR3aWRkbGluZy4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBBc3NlbWJseSBGbG9hdGluZyBQb2ludCwgIE5leHQ6IEFzc2VtYmx5IFNJTUQgSW5zdHJ1Y3Rpb25zLCAgUHJldjogQXNzZW1ibHkgRnVuY3Rpb25hbCBVbml0cywgIFVwOiBBc3NlbWJseSBDb2RpbmcKCjE1LjguNiBGbG9hdGluZyBQb2ludAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgaXMgdXNlZCBpbiBHTVAgZm9yIG11bHRpcGxpY2F0aW9ucyBvbiBDUFVzCndpdGggcG9vciBpbnRlZ2VyIG11bHRpcGxpZXJzLiAgSXQncyBtb3N0bHkgdXNlZnVsIGZvciBgbXBuX211bF8xJywKYG1wbl9hZGRtdWxfMScgYW5kIGBtcG5fc3VibXVsXzEnIG9uIDY0LWJpdCBtYWNoaW5lcywgYW5kCmBtcG5fbXVsX2Jhc2VjYXNlJyBvbiBib3RoIDMyLWJpdCBhbmQgNjQtYml0IG1hY2hpbmVzLgoKICAgV2l0aCBJRUVFIDUzLWJpdCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0cywgaW50ZWdlciBtdWx0aXBsaWNhdGlvbnMKcHJvZHVjaW5nIHVwIHRvIDUzIGJpdHMgd2lsbCBnaXZlIGV4YWN0IHJlc3VsdHMuICBCcmVha2luZyBhIDY0eDY0Cm11bHRpcGxpY2F0aW9uIGludG8gZWlnaHQgMTZ4MzItPjQ4IGJpdCBwaWVjZXMgaXMgY29udmVuaWVudC4gIFdpdGgKc29tZSBjYXJlIHRob3VnaCBzaXggMjF4MzItPjUzIGJpdCBwcm9kdWN0cyBjYW4gYmUgdXNlZCwgaWYgb25lIG9mIHRoZQpsb3dlciB0d28gMjEtYml0IHBpZWNlcyBhbHNvIHVzZXMgdGhlIHNpZ24gYml0LgoKICAgRm9yIHRoZSBgbXBuX211bF8xJyBmYW1pbHkgb2YgZnVuY3Rpb25zIG9uIGEgNjQtYml0IG1hY2hpbmUsIHRoZQppbnZhcmlhbnQgc2luZ2xlIGxpbWIgaXMgc3BsaXQgYXQgdGhlIHN0YXJ0LCBpbnRvIDMgb3IgNCBwaWVjZXMuCkluc2lkZSB0aGUgbG9vcCwgdGhlIGJpZ251bSBvcGVyYW5kIGlzIHNwbGl0IGludG8gMzItYml0IHBpZWNlcy4gIEZhc3QKY29udmVyc2lvbiBvZiB0aGVzZSB1bnNpZ25lZCAzMi1iaXQgcGllY2VzIHRvIGZsb2F0aW5nIHBvaW50IGlzIGhpZ2hseQptYWNoaW5lLWRlcGVuZGVudC4gIEluIHNvbWUgY2FzZXMsIHJlYWRpbmcgdGhlIGRhdGEgaW50byB0aGUgaW50ZWdlcgp1bml0LCB6ZXJvLWV4dGVuZGluZyB0byA2NC1iaXRzLCB0aGVuIHRyYW5zZmVycmluZyB0byB0aGUgZmxvYXRpbmcKcG9pbnQgdW5pdCBiYWNrIHZpYSBtZW1vcnkgaXMgdGhlIG9ubHkgb3B0aW9uLgoKICAgQ29udmVydGluZyBwYXJ0aWFsIHByb2R1Y3RzIGJhY2sgdG8gNjQtYml0IGxpbWJzIGlzIHVzdWFsbHkgYmVzdApkb25lIGFzIGEgc2lnbmVkIGNvbnZlcnNpb24uICBTaW5jZSBhbGwgdmFsdWVzIGFyZSBzbWFsbGVyIHRoYW4gMl41MywKc2lnbmVkIGFuZCB1bnNpZ25lZCBhcmUgdGhlIHNhbWUsIGJ1dCBtb3N0IHByb2Nlc3NvcnMgbGFjayB1bnNpZ25lZApjb252ZXJzaW9ucy4KCgoKICAgSGVyZSBpcyBhIGRpYWdyYW0gc2hvd2luZyAxNngzMiBiaXQgcHJvZHVjdHMgZm9yIGFuIGBtcG5fbXVsXzEnIG9yCmBtcG5fYWRkbXVsXzEnIHdpdGggYSA2NC1iaXQgbGltYi4gIFRoZSBzaW5nbGUgbGltYiBvcGVyYW5kIFYgaXMgc3BsaXQKaW50byBmb3VyIDE2LWJpdCBwYXJ0cy4gIFRoZSBtdWx0aS1saW1iIG9wZXJhbmQgVSBpcyBzcGxpdCBpbiB0aGUgbG9vcAppbnRvIHR3byAzMi1iaXQgcGFydHMuCgogICAgICAgICAgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKwogICAgICAgICAgICAgICAgICAgICB8djQ4fHYzMnx2MTZ8djAwfCAgICBWIG9wZXJhbmQKICAgICAgICAgICAgICAgICAgICAgKy0tLSstLS0rLS0tKy0tLSsKCiAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLSstLS0rCiAgICAgICAgICAgICAgICAgeCAgIHwgIHUzMiAgfCAgdTAwICB8ICAgIFUgb3BlcmFuZCAob25lIGxpbWIpCiAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rCgogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKICAgICAgICAgICAgICAgICAgICAgICAgIHwgdTAwIHggdjAwIHwgICAgcDAwICAgIDQ4LWJpdCBwcm9kdWN0cwogICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKwogICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCiAgICAgICAgICAgICAgICAgICAgIHwgdTAwIHggdjE2IHwgICAgICAgIHAxNgogICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCiAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKwogICAgICAgICAgICAgICAgIHwgdTAwIHggdjMyIHwgICAgICAgICAgICBwMzIKICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCiAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCiAgICAgICAgICAgICB8IHUwMCB4IHY0OCB8ICAgICAgICAgICAgICAgIHA0OAogICAgICAgICAgICAgKy0tLS0tLS0tLS0tKwogICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKICAgICAgICAgICAgICAgICB8IHUzMiB4IHYwMCB8ICAgICAgICAgICAgcjMyCiAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKwogICAgICAgICAgICAgKy0tLS0tLS0tLS0tKwogICAgICAgICAgICAgfCB1MzIgeCB2MTYgfCAgICAgICAgICAgICAgICByNDgKICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKICAgICAgICAgKy0tLS0tLS0tLS0tKwogICAgICAgICB8IHUzMiB4IHYzMiB8ICAgICAgICAgICAgICAgICAgICByNjQKICAgICAgICAgKy0tLS0tLS0tLS0tKwogICAgICstLS0tLS0tLS0tLSsKICAgICB8IHUzMiB4IHY0OCB8ICAgICAgICAgICAgICAgICAgICAgICAgcjgwCiAgICAgKy0tLS0tLS0tLS0tKwoKICAgcDMyIGFuZCByMzIgY2FuIGJlIHN1bW1lZCB1c2luZyBmbG9hdGluZy1wb2ludCBhZGRpdGlvbiwgYW5kCmxpa2V3aXNlIHA0OCBhbmQgcjQ4LiAgcDAwIGFuZCBwMTYgY2FuIGJlIHN1bW1lZCB3aXRoIHI2NCBhbmQgcjgwIGZyb20KdGhlIHByZXZpb3VzIGl0ZXJhdGlvbi4KCiAgIEZvciBlYWNoIGxvb3AgdGhlbiwgZm91ciA0OS1iaXQgcXVhbnRpdGllcyBhcmUgdHJhbnNmZXJyZWQgdG8gdGhlCmludGVnZXIgdW5pdCwgYWxpZ25lZCBhcyBmb2xsb3dzLAoKICAgICB8LS0tLS02NGJpdHMtLS0tfC0tLS0tNjRiaXRzLS0tLXwKICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLSsKICAgICAgICAgICAgICAgICAgICAgICAgfCBwMDAgKyByNjQnIHwgICAgaTAwCiAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0rCiAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLSsKICAgICAgICAgICAgICAgICAgICB8IHAxNiArIHI4MCcgfCAgICAgICAgaTE2CiAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLSsKICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0rCiAgICAgICAgICAgICAgICB8IHAzMiArIHIzMiAgfCAgICAgICAgICAgIGkzMgogICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLSsKICAgICAgICAgICAgKy0tLS0tLS0tLS0tLSsKICAgICAgICAgICAgfCBwNDggKyByNDggIHwgICAgICAgICAgICAgICAgaTQ4CiAgICAgICAgICAgICstLS0tLS0tLS0tLS0rCgogICBUaGUgY2hhbGxlbmdlIHRoZW4gaXMgdG8gc3VtIHRoZXNlIGVmZmljaWVudGx5IGFuZCBhZGQgaW4gYSBjYXJyeQpsaW1iLCBnZW5lcmF0aW5nIGEgbG93IDY0LWJpdCByZXN1bHQgbGltYiBhbmQgYSBoaWdoIDMzLWJpdCBjYXJyeSBsaW1iCihpNDggZXh0ZW5kcyAzMyBiaXRzIGludG8gdGhlIGhpZ2ggaGFsZikuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogQXNzZW1ibHkgU0lNRCBJbnN0cnVjdGlvbnMsICBOZXh0OiBBc3NlbWJseSBTb2Z0d2FyZSBQaXBlbGluaW5nLCAgUHJldjogQXNzZW1ibHkgRmxvYXRpbmcgUG9pbnQsICBVcDogQXNzZW1ibHkgQ29kaW5nCgoxNS44LjcgU0lNRCBJbnN0cnVjdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgc2luZ2xlLWluc3RydWN0aW9uIG11bHRpcGxlLWRhdGEgc3VwcG9ydCBpbiBjdXJyZW50IG1pY3JvcHJvY2Vzc29ycwppcyBhaW1lZCBhdCBzaWduYWwgcHJvY2Vzc2luZyBhbGdvcml0aG1zIHdoZXJlIGVhY2ggZGF0YSBwb2ludCBjYW4gYmUKdHJlYXRlZCBtb3JlIG9yIGxlc3MgaW5kZXBlbmRlbnRseS4gIFRoZXJlJ3MgZ2VuZXJhbGx5IG5vdCBtdWNoIHN1cHBvcnQKZm9yIHByb3BhZ2F0aW5nIHRoZSBzb3J0IG9mIGNhcnJpZXMgdGhhdCBhcmlzZSBpbiBHTVAuCgogICBTSU1EIG11bHRpcGxpY2F0aW9ucyBvZiBzYXkgZm91ciAxNngxNiBiaXQgbXVsdGlwbGllcyBvbmx5IGRvIGFzIG11Y2gKd29yayBhcyBvbmUgMzJ4MzIgZnJvbSBHTVAncyBwb2ludCBvZiB2aWV3LCBhbmQgbmVlZCBzb21lIHNoaWZ0cyBhbmQKYWRkcyBiZXNpZGVzLiAgQnV0IG9mIGNvdXJzZSBpZiBzYXkgdGhlIFNJTUQgZm9ybSBpcyBmdWxseSBwaXBlbGluZWQKYW5kIHVzZXMgbGVzcyBpbnN0cnVjdGlvbiBkZWNvZGluZyB0aGVuIGl0IG1heSBzdGlsbCBiZSB3b3J0aHdoaWxlLgoKICAgT24gdGhlIHg4NiBjaGlwcywgTU1YIGhhcyBzbyBmYXIgZm91bmQgYSB1c2UgaW4gYG1wbl9yc2hpZnQnIGFuZApgbXBuX2xzaGlmdCcsIGFuZCBpcyB1c2VkIGluIGEgc3BlY2lhbCBjYXNlIGZvciAxNi1iaXQgbXVsdGlwbGllcnMgaW4KdGhlIFA1NSBgbXBuX211bF8xJy4gIFNTRTIgaXMgdXNlZCBmb3IgUGVudGl1bSA0IGBtcG5fbXVsXzEnLApgbXBuX2FkZG11bF8xJywgYW5kIGBtcG5fc3VibXVsXzEnLgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IEFzc2VtYmx5IFNvZnR3YXJlIFBpcGVsaW5pbmcsICBOZXh0OiBBc3NlbWJseSBMb29wIFVucm9sbGluZywgIFByZXY6IEFzc2VtYmx5IFNJTUQgSW5zdHJ1Y3Rpb25zLCAgVXA6IEFzc2VtYmx5IENvZGluZwoKMTUuOC44IFNvZnR3YXJlIFBpcGVsaW5pbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClNvZnR3YXJlIHBpcGVsaW5pbmcgY29uc2lzdHMgb2Ygc2NoZWR1bGluZyBpbnN0cnVjdGlvbnMgYXJvdW5kIHRoZQpicmFuY2ggcG9pbnQgaW4gYSBsb29wLiAgRm9yIGV4YW1wbGUgYSBsb29wIG1pZ2h0IGlzc3VlIGEgbG9hZCBub3QgZm9yCnVzZSBpbiB0aGUgcHJlc2VudCBpdGVyYXRpb24gYnV0IHRoZSBuZXh0LCB0aGVyZWJ5IGFsbG93aW5nIGV4dHJhCmN5Y2xlcyBmb3IgdGhlIGRhdGEgdG8gYXJyaXZlIGZyb20gbWVtb3J5LgoKICAgTmF0dXJhbGx5IHRoaXMgaXMgd2FudGVkIG9ubHkgd2hlbiBkb2luZyB0aGluZ3MgbGlrZSBsb2FkcyBvcgptdWx0aXBsaWVzIHRoYXQgdGFrZSBzZXZlcmFsIGN5Y2xlcyB0byBjb21wbGV0ZSwgYW5kIG9ubHkgd2hlcmUgYSBDUFUKaGFzIG11bHRpcGxlIGZ1bmN0aW9uYWwgdW5pdHMgc28gdGhhdCBvdGhlciB3b3JrIGNhbiBiZSBkb25lIGluIHRoZQptZWFudGltZS4KCiAgIEEgcGlwZWxpbmUgd2l0aCBzZXZlcmFsIHN0YWdlcyB3aWxsIGhhdmUgYSBkYXRhIHZhbHVlIGluIHByb2dyZXNzIGF0CmVhY2ggc3RhZ2UgYW5kIGVhY2ggbG9vcCBpdGVyYXRpb24gbW92ZXMgdGhlbSBhbG9uZyBvbmUgc3RhZ2UuICBUaGlzIGlzCmxpa2UganVnZ2xpbmcuCgogICBJZiB0aGUgbGF0ZW5jeSBvZiBzb21lIGluc3RydWN0aW9uIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbG9vcCB0aW1lCnRoZW4gaXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gdW5yb2xsLCBzbyBvbmUgcmVnaXN0ZXIgaGFzIGEgcmVzdWx0IHJlYWR5CnRvIHVzZSB3aGlsZSBhbm90aGVyIChvciBtdWx0aXBsZSBvdGhlcnMpIGFyZSBzdGlsbCBpbiBwcm9ncmVzcy4KKCpub3RlIEFzc2VtYmx5IExvb3AgVW5yb2xsaW5nOjopLgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IEFzc2VtYmx5IExvb3AgVW5yb2xsaW5nLCAgTmV4dDogQXNzZW1ibHkgV3JpdGluZyBHdWlkZSwgIFByZXY6IEFzc2VtYmx5IFNvZnR3YXJlIFBpcGVsaW5pbmcsICBVcDogQXNzZW1ibHkgQ29kaW5nCgoxNS44LjkgTG9vcCBVbnJvbGxpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpMb29wIHVucm9sbGluZyBjb25zaXN0cyBvZiByZXBsaWNhdGluZyBjb2RlIHNvIHRoYXQgc2V2ZXJhbCBsaW1icyBhcmUKcHJvY2Vzc2VkIGluIGVhY2ggbG9vcC4gIEF0IGEgbWluaW11bSB0aGlzIHJlZHVjZXMgbG9vcCBvdmVyaGVhZHMgYnkgYQpjb3JyZXNwb25kaW5nIGZhY3RvciwgYnV0IGl0IGNhbiBhbHNvIGFsbG93IGJldHRlciByZWdpc3RlciB1c2FnZSwgZm9yCmV4YW1wbGUgYWx0ZXJuYXRlbHkgdXNpbmcgb25lIHJlZ2lzdGVyIGNvbWJpbmF0aW9uIGFuZCB0aGVuIGFub3RoZXIuCkp1ZGljaW91cyB1c2Ugb2YgYG00JyBtYWNyb3MgY2FuIGhlbHAgYXZvaWQgbG90cyBvZiBkdXBsaWNhdGlvbiBpbiB0aGUKc291cmNlIGNvZGUuCgogICBBbnkgYW1vdW50IG9mIHVucm9sbGluZyBjYW4gYmUgaGFuZGxlZCB3aXRoIGEgbG9vcCBjb3VudGVyIHRoYXQncwpkZWNyZW1lbnRlZCBieSBOIGVhY2ggdGltZSwgc3RvcHBpbmcgd2hlbiB0aGUgcmVtYWluaW5nIGNvdW50IGlzIGxlc3MKdGhhbiB0aGUgZnVydGhlciBOIHRoZSBsb29wIHdpbGwgcHJvY2Vzcy4gIE9yIGJ5IHN1YnRyYWN0aW5nIE4gYXQgdGhlCnN0YXJ0LCB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uIGJlY29tZXMgd2hlbiB0aGUgY291bnRlciBDIGlzIGxlc3MKdGhhbiAwIChhbmQgdGhlIGNvdW50IG9mIHJlbWFpbmluZyBsaW1icyBpcyBDK04pLgoKICAgQWx0ZXJuYXRlbHkgZm9yIGEgcG93ZXIgb2YgMiB1bnJvbGwgdGhlIGxvb3AgY291bnQgYW5kIHJlbWFpbmRlciBjYW4KYmUgZXN0YWJsaXNoZWQgd2l0aCBhIHNoaWZ0IGFuZCBtYXNrLiAgVGhpcyBpcyBjb252ZW5pZW50IGlmIGFsc28KbWFraW5nIGEgY29tcHV0ZWQganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYSBsYXJnZSBsb29wLgoKICAgVGhlIGxpbWJzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSB1bnJvbGxpbmcgY2FuIGJlIGhhbmRsZWQgaW4gdmFyaW91cwp3YXlzLCBmb3IgZXhhbXBsZQoKICAgKiBBIHNpbXBsZSBsb29wIGF0IHRoZSBlbmQgKG9yIHRoZSBzdGFydCkgdG8gcHJvY2VzcyB0aGUgZXhjZXNzLgogICAgIENhcmUgd2lsbCBiZSB3YW50ZWQgdGhhdCBpdCBpc24ndCB0b28gbXVjaCBzbG93ZXIgdGhhbiB0aGUKICAgICB1bnJvbGxlZCBwYXJ0LgoKICAgKiBBIHNldCBvZiBiaW5hcnkgdGVzdHMsIGZvciBleGFtcGxlIGFmdGVyIGFuIDgtbGltYiB1bnJvbGxpbmcsIHRlc3QKICAgICBmb3IgNCBtb3JlIGxpbWJzIHRvIHByb2Nlc3MsIHRoZW4gYSBmdXJ0aGVyIDIgbW9yZSBvciBub3QsIGFuZAogICAgIGZpbmFsbHkgMSBtb3JlIG9yIG5vdC4gIFRoaXMgd2lsbCBwcm9iYWJseSB0YWtlIG1vcmUgY29kZSBzcGFjZQogICAgIHRoYW4gYSBzaW1wbGUgbG9vcC4KCiAgICogQSBgc3dpdGNoJyBzdGF0ZW1lbnQsIHByb3ZpZGluZyBzZXBhcmF0ZSBjb2RlIGZvciBlYWNoIHBvc3NpYmxlCiAgICAgZXhjZXNzLCBmb3IgZXhhbXBsZSBhbiA4LWxpbWIgdW5yb2xsaW5nIHdvdWxkIGhhdmUgc2VwYXJhdGUgY29kZQogICAgIGZvciAwIHJlbWFpbmluZywgMSByZW1haW5pbmcsIGV0YywgdXAgdG8gNyByZW1haW5pbmcuICBUaGlzIG1pZ2h0CiAgICAgdGFrZSBhIGxvdCBvZiBjb2RlLCBidXQgbWF5IGJlIHRoZSBiZXN0IHdheSB0byBvcHRpbWl6ZSBhbGwgY2FzZXMKICAgICBpbiBjb21iaW5hdGlvbiB3aXRoIGEgZGVlcCBwaXBlbGluZWQgbG9vcC4KCiAgICogQSBjb21wdXRlZCBqdW1wIGludG8gdGhlIG1pZGRsZSBvZiB0aGUgbG9vcCwgdGh1cyBtYWtpbmcgdGhlIGZpcnN0CiAgICAgaXRlcmF0aW9uIGhhbmRsZSB0aGUgZXhjZXNzLiAgVGhpcyBzaG91bGQgbWFrZSB0aW1lcyBzbW9vdGhseQogICAgIGluY3JlYXNlIHdpdGggc2l6ZSwgd2hpY2ggaXMgYXR0cmFjdGl2ZSwgYnV0IHNldHVwcyBmb3IgdGhlIGp1bXAKICAgICBhbmQgYWRqdXN0bWVudHMgZm9yIHBvaW50ZXJzIGNhbiBiZSB0cmlja3kgYW5kIGNvdWxkIGJlY29tZSBxdWl0ZQogICAgIGRpZmZpY3VsdCBpbiBjb21iaW5hdGlvbiB3aXRoIGRlZXAgcGlwZWxpbmluZy4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBBc3NlbWJseSBXcml0aW5nIEd1aWRlLCAgUHJldjogQXNzZW1ibHkgTG9vcCBVbnJvbGxpbmcsICBVcDogQXNzZW1ibHkgQ29kaW5nCgoxNS44LjEwIFdyaXRpbmcgR3VpZGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgZ3VpZGUgdG8gd3JpdGluZyBzb2Z0d2FyZSBwaXBlbGluZWQgbG9vcHMgZm9yIHByb2Nlc3NpbmcgbGltYgp2ZWN0b3JzIGluIGFzc2VtYmx5LgoKICAgRmlyc3QgZGV0ZXJtaW5lIHRoZSBhbGdvcml0aG0gYW5kIHdoaWNoIGluc3RydWN0aW9ucyBhcmUgbmVlZGVkLgpDb2RlIGl0IHdpdGhvdXQgdW5yb2xsaW5nIG9yIHNjaGVkdWxpbmcsIHRvIG1ha2Ugc3VyZSBpdCB3b3Jrcy4gIE9uIGEKMy1vcGVyYW5kIENQVSB0cnkgdG8gd3JpdGUgZWFjaCBuZXcgdmFsdWUgdG8gYSBuZXcgcmVnaXN0ZXIsIHRoaXMgd2lsbApncmVhdGx5IHNpbXBsaWZ5IGxhdGVyIHN0ZXBzLgoKICAgVGhlbiBub3RlIGZvciBlYWNoIGluc3RydWN0aW9uIHRoZSBmdW5jdGlvbmFsIHVuaXQgYW5kL29yIGlzc3VlIHBvcnQKcmVxdWlyZW1lbnRzLiAgSWYgYW4gaW5zdHJ1Y3Rpb24gY2FuIHVzZSBlaXRoZXIgb2YgdHdvIHVuaXRzLCBsaWtlIFUwCm9yIFUxIHRoZW4gbWFrZSBhIGNhdGVnb3J5ICJVMC9VMSIuICBDb3VudCB0aGUgdG90YWwgdXNpbmcgZWFjaCB1bml0CihvciBjb21iaW5lZCB1bml0KSwgYW5kIGNvdW50IGFsbCBpbnN0cnVjdGlvbnMuCgogICBGaWd1cmUgb3V0IGZyb20gdGhvc2UgY291bnRzIHRoZSBiZXN0IHBvc3NpYmxlIGxvb3AgdGltZS4gIFRoZSBnb2FsCndpbGwgYmUgdG8gZmluZCBhIHBlcmZlY3Qgc2NoZWR1bGUgd2hlcmUgaW5zdHJ1Y3Rpb24gbGF0ZW5jaWVzIGFyZQpjb21wbGV0ZWx5IGhpZGRlbi4gIFRoZSB0b3RhbCBpbnN0cnVjdGlvbiBjb3VudCBtaWdodCBiZSB0aGUgbGltaXRpbmcKZmFjdG9yLCBvciBwZXJoYXBzIGEgcGFydGljdWxhciBmdW5jdGlvbmFsIHVuaXQuICBJdCBtaWdodCBiZSBwb3NzaWJsZQp0byB0d2VhayB0aGUgaW5zdHJ1Y3Rpb25zIHRvIGhlbHAgdGhlIGxpbWl0aW5nIGZhY3Rvci4KCiAgIFN1cHBvc2UgdGhlIGxvb3AgdGltZSBpcyBOLCB0aGVuIG1ha2UgTiBpc3N1ZSBidWNrZXRzLCB3aXRoIHRoZQpmaW5hbCBsb29wIGJyYW5jaCBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0LiAgTm93IGZpbGwgdGhlIGJ1Y2tldHMgd2l0aApkdW1teSBpbnN0cnVjdGlvbnMgdXNpbmcgdGhlIGZ1bmN0aW9uYWwgdW5pdHMgZGVzaXJlZC4gIFJ1biB0aGlzIHRvCm1ha2Ugc3VyZSB0aGUgaW50ZW5kZWQgc3BlZWQgaXMgcmVhY2hlZC4KCiAgIE5vdyByZXBsYWNlIHRoZSBkdW1teSBpbnN0cnVjdGlvbnMgd2l0aCB0aGUgcmVhbCBpbnN0cnVjdGlvbnMgZnJvbQp0aGUgc2xvdyBidXQgY29ycmVjdCBsb29wIHlvdSBzdGFydGVkIHdpdGguICBUaGUgZmlyc3Qgd2lsbCB0eXBpY2FsbHkKYmUgYSBsb2FkIGluc3RydWN0aW9uLiAgVGhlbiB0aGUgaW5zdHJ1Y3Rpb24gdXNpbmcgdGhhdCB2YWx1ZSBpcyBwbGFjZWQKaW4gYSBidWNrZXQgYW4gYXBwcm9wcmlhdGUgZGlzdGFuY2UgZG93bi4gIFJ1biB0aGUgbG9vcCBhZ2FpbiwgdG8gY2hlY2sKaXQgc3RpbGwgcnVucyBhdCB0YXJnZXQgc3BlZWQuCgogICBLZWVwIHBsYWNpbmcgaW5zdHJ1Y3Rpb25zLCBmcmVxdWVudGx5IG1lYXN1cmluZyB0aGUgbG9vcC4gIEFmdGVyIGEKZmV3IHlvdSB3aWxsIG5lZWQgdG8gd3JhcCBhcm91bmQgZnJvbSB0aGUgbGFzdCBidWNrZXQgYmFjayB0byB0aGUgdG9wCm9mIHRoZSBsb29wLiAgSWYgeW91IHVzZWQgdGhlIG5ldy1yZWdpc3RlciBmb3IgbmV3LXZhbHVlIHN0cmF0ZWd5IGFib3ZlCnRoZW4gdGhlcmUgd2lsbCBiZSBubyByZWdpc3RlciBjb25mbGljdHMuICBJZiBub3QgdGhlbiB0YWtlIGNhcmUgbm90IHRvCmNsb2JiZXIgc29tZXRoaW5nIGFscmVhZHkgaW4gdXNlLiAgQ2hhbmdpbmcgcmVnaXN0ZXJzIGF0IHRoaXMgdGltZSBpcwp2ZXJ5IGVycm9yIHByb25lLgoKICAgVGhlIGxvb3Agd2lsbCBvdmVybGFwIHR3byBvciBtb3JlIG9mIHRoZSBvcmlnaW5hbCBsb29wIGl0ZXJhdGlvbnMsCmFuZCB0aGUgY29tcHV0YXRpb24gb2Ygb25lIHZlY3RvciBlbGVtZW50IHJlc3VsdCB3aWxsIGJlIHN0YXJ0ZWQgaW4gb25lCml0ZXJhdGlvbiBvZiB0aGUgbmV3IGxvb3AsIGFuZCBjb21wbGV0ZWQgb25lIG9yIHNldmVyYWwgaXRlcmF0aW9ucwpsYXRlci4KCiAgIFRoZSBmaW5hbCBzdGVwIGlzIHRvIGNyZWF0ZSBmZWVkLWluIGFuZCB3aW5kLWRvd24gY29kZSBmb3IgdGhlIGxvb3AuCkEgZ29vZCB3YXkgdG8gZG8gdGhpcyBpcyB0byBtYWtlIGEgY29weSAob3IgY29waWVzKSBvZiB0aGUgbG9vcCBhdCB0aGUKc3RhcnQgYW5kIGRlbGV0ZSB0aG9zZSBpbnN0cnVjdGlvbnMgd2hpY2ggZG9uJ3QgaGF2ZSB2YWxpZCBhbnRlY2VkZW50cywKYW5kIGF0IHRoZSBlbmQgcmVwbGljYXRlIGFuZCBkZWxldGUgdGhvc2Ugd2hvc2UgcmVzdWx0cyBhcmUgdW53YW50ZWQKKGluY2x1ZGluZyBhbnkgZnVydGhlciBsb2FkcykuCgogICBUaGUgbG9vcCB3aWxsIGhhdmUgYSBtaW5pbXVtIG51bWJlciBvZiBsaW1icyBsb2FkZWQgYW5kIHByb2Nlc3NlZCwKc28gdGhlIGZlZWQtaW4gY29kZSBtdXN0IHRlc3QgaWYgdGhlIHJlcXVlc3Qgc2l6ZSBpcyBzbWFsbGVyIGFuZCBza2lwCmVpdGhlciB0byBhIHN1aXRhYmxlIHBhcnQgb2YgdGhlIHdpbmQtZG93biBvciB0byBzcGVjaWFsIGNvZGUgZm9yIHNtYWxsCnNpemVzLgoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IEludGVybmFscywgIE5leHQ6IENvbnRyaWJ1dG9ycywgIFByZXY6IEFsZ29yaXRobXMsICBVcDogVG9wCgoxNiBJbnRlcm5hbHMKKioqKioqKioqKioqCgoqVGhpcyBjaGFwdGVyIGlzIHByb3ZpZGVkIG9ubHkgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgYW5kIHRoZQp2YXJpb3VzIGludGVybmFscyBkZXNjcmliZWQgaGVyZSBtYXkgY2hhbmdlIGluIGZ1dHVyZSBHTVAgcmVsZWFzZXMuCkFwcGxpY2F0aW9ucyBleHBlY3RpbmcgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGZ1dHVyZSByZWxlYXNlcyBzaG91bGQgdXNlCm9ubHkgdGhlIGRvY3VtZW50ZWQgaW50ZXJmYWNlcyBkZXNjcmliZWQgaW4gcHJldmlvdXMgY2hhcHRlcnMuKgoKKiBNZW51OgoKKiBJbnRlZ2VyIEludGVybmFsczo6CiogUmF0aW9uYWwgSW50ZXJuYWxzOjoKKiBGbG9hdCBJbnRlcm5hbHM6OgoqIFJhdyBPdXRwdXQgSW50ZXJuYWxzOjoKKiBDKysgSW50ZXJmYWNlIEludGVybmFsczo6CgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogSW50ZWdlciBJbnRlcm5hbHMsICBOZXh0OiBSYXRpb25hbCBJbnRlcm5hbHMsICBQcmV2OiBJbnRlcm5hbHMsICBVcDogSW50ZXJuYWxzCgoxNi4xIEludGVnZXIgSW50ZXJuYWxzCj09PT09PT09PT09PT09PT09PT09PT0KCmBtcHpfdCcgdmFyaWFibGVzIHJlcHJlc2VudCBpbnRlZ2VycyB1c2luZyBzaWduIGFuZCBtYWduaXR1ZGUsIGluIHNwYWNlCmR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgcmVhbGxvY2F0ZWQuICBUaGUgZmllbGRzIGFyZSBhcyBmb2xsb3dzLgoKYF9tcF9zaXplJwogICAgIFRoZSBudW1iZXIgb2YgbGltYnMsIG9yIHRoZSBuZWdhdGl2ZSBvZiB0aGF0IHdoZW4gcmVwcmVzZW50aW5nIGEKICAgICBuZWdhdGl2ZSBpbnRlZ2VyLiAgWmVybyBpcyByZXByZXNlbnRlZCBieSBgX21wX3NpemUnIHNldCB0byB6ZXJvLAogICAgIGluIHdoaWNoIGNhc2UgdGhlIGBfbXBfZCcgZGF0YSBpcyB1bnVzZWQuCgpgX21wX2QnCiAgICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGxpbWJzIHdoaWNoIGlzIHRoZSBtYWduaXR1ZGUuICBUaGVzZSBhcmUKICAgICBzdG9yZWQgImxpdHRsZSBlbmRpYW4iIGFzIHBlciB0aGUgYG1wbicgZnVuY3Rpb25zLCBzbyBgX21wX2RbMF0nCiAgICAgaXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGxpbWIgYW5kIGBfbXBfZFtBQlMoX21wX3NpemUpLTFdJyBpcyB0aGUKICAgICBtb3N0IHNpZ25pZmljYW50LiAgV2hlbmV2ZXIgYF9tcF9zaXplJyBpcyBub24temVybywgdGhlIG1vc3QKICAgICBzaWduaWZpY2FudCBsaW1iIGlzIG5vbi16ZXJvLgoKICAgICBDdXJyZW50bHkgdGhlcmUncyBhbHdheXMgYXQgbGVhc3Qgb25lIGxpbWIgYWxsb2NhdGVkLCBzbyBmb3IKICAgICBpbnN0YW5jZSBgbXB6X3NldF91aScgbmV2ZXIgbmVlZHMgdG8gcmVhbGxvY2F0ZSwgYW5kIGBtcHpfZ2V0X3VpJwogICAgIGNhbiBmZXRjaCBgX21wX2RbMF0nIHVuY29uZGl0aW9uYWxseSAodGhvdWdoIGl0cyB2YWx1ZSBpcyB0aGVuCiAgICAgb25seSB3YW50ZWQgaWYgYF9tcF9zaXplJyBpcyBub24temVybykuCgpgX21wX2FsbG9jJwogICAgIGBfbXBfYWxsb2MnIGlzIHRoZSBudW1iZXIgb2YgbGltYnMgY3VycmVudGx5IGFsbG9jYXRlZCBhdCBgX21wX2QnLAogICAgIGFuZCBuYXR1cmFsbHkgYF9tcF9hbGxvYyA+PSBBQlMoX21wX3NpemUpJy4gIFdoZW4gYW4gYG1weicgcm91dGluZQogICAgIGlzIGFib3V0IHRvIChvciBtaWdodCBiZSBhYm91dCB0bykgaW5jcmVhc2UgYF9tcF9zaXplJywgaXQgY2hlY2tzCiAgICAgYF9tcF9hbGxvYycgdG8gc2VlIHdoZXRoZXIgdGhlcmUncyBlbm91Z2ggc3BhY2UsIGFuZCByZWFsbG9jYXRlcwogICAgIGlmIG5vdC4gIGBNUFpfUkVBTExPQycgaXMgZ2VuZXJhbGx5IHVzZWQgZm9yIHRoaXMuCgogICBUaGUgdmFyaW91cyBiaXR3aXNlIGxvZ2ljYWwgZnVuY3Rpb25zIGxpa2UgYG1wel9hbmQnIGJlaGF2ZSBhcyBpZgpuZWdhdGl2ZSB2YWx1ZXMgd2VyZSB0d29zIGNvbXBsZW1lbnQuICBCdXQgc2lnbiBhbmQgbWFnbml0dWRlIGlzIGFsd2F5cwp1c2VkIGludGVybmFsbHksIGFuZCBuZWNlc3NhcnkgYWRqdXN0bWVudHMgYXJlIG1hZGUgZHVyaW5nIHRoZQpjYWxjdWxhdGlvbnMuICBTb21ldGltZXMgdGhpcyBpc24ndCBwcmV0dHksIGJ1dCBzaWduIGFuZCBtYWduaXR1ZGUgYXJlCmJlc3QgZm9yIG90aGVyIHJvdXRpbmVzLgoKICAgU29tZSBpbnRlcm5hbCB0ZW1wb3JhcnkgdmFyaWFibGVzIGFyZSBzZXR1cCB3aXRoIGBNUFpfVE1QX0lOSVQnIGFuZAp0aGVzZSBoYXZlIGBfbXBfZCcgc3BhY2Ugb2J0YWluZWQgZnJvbSBgVE1QX0FMTE9DJyByYXRoZXIgdGhhbiB0aGUKbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLiAgQ2FyZSBpcyB0YWtlbiB0byBlbnN1cmUgdGhhdCB0aGVzZSBhcmUKYmlnIGVub3VnaCB0aGF0IG5vIHJlYWxsb2NhdGlvbiBpcyBuZWNlc3NhcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUKdW5wcmVkaWN0YWJsZSBjb25zZXF1ZW5jZXMpLgoKICAgYF9tcF9zaXplJyBhbmQgYF9tcF9hbGxvYycgYXJlIGBpbnQnLCBhbHRob3VnaCBgbXBfc2l6ZV90JyBpcwp1c3VhbGx5IGEgYGxvbmcnLiAgVGhpcyBpcyBkb25lIHRvIG1ha2UgdGhlIGZpZWxkcyBqdXN0IDMyIGJpdHMgb24gc29tZQo2NCBiaXRzIHN5c3RlbXMsIHRoZXJlYnkgc2F2aW5nIGEgZmV3IGJ5dGVzIG9mIGRhdGEgc3BhY2UgYnV0IHN0aWxsCnByb3ZpZGluZyBwbGVudHkgb2YgcmFuZ2UuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogUmF0aW9uYWwgSW50ZXJuYWxzLCAgTmV4dDogRmxvYXQgSW50ZXJuYWxzLCAgUHJldjogSW50ZWdlciBJbnRlcm5hbHMsICBVcDogSW50ZXJuYWxzCgoxNi4yIFJhdGlvbmFsIEludGVybmFscwo9PT09PT09PT09PT09PT09PT09PT09PQoKYG1wcV90JyB2YXJpYWJsZXMgcmVwcmVzZW50IHJhdGlvbmFscyB1c2luZyBhbiBgbXB6X3QnIG51bWVyYXRvciBhbmQKZGVub21pbmF0b3IgKCpub3RlIEludGVnZXIgSW50ZXJuYWxzOjopLgoKICAgVGhlIGNhbm9uaWNhbCBmb3JtIGFkb3B0ZWQgaXMgZGVub21pbmF0b3IgcG9zaXRpdmUgKGFuZCBub24temVybyksCm5vIGNvbW1vbiBmYWN0b3JzIGJldHdlZW4gbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciwgYW5kIHplcm8gdW5pcXVlbHkKcmVwcmVzZW50ZWQgYXMgMC8xLgoKICAgSXQncyBiZWxpZXZlZCB0aGF0IGNhc3Rpbmcgb3V0IGNvbW1vbiBmYWN0b3JzIGF0IGVhY2ggc3RhZ2Ugb2YgYQpjYWxjdWxhdGlvbiBpcyBiZXN0IGluIGdlbmVyYWwuICBBIEdDRCBpcyBhbiBPKE5eMikgb3BlcmF0aW9uIHNvIGl0J3MKYmV0dGVyIHRvIGRvIGEgZmV3IHNtYWxsIG9uZXMgaW1tZWRpYXRlbHkgdGhhbiB0byBkZWxheSBhbmQgaGF2ZSB0byBkbwphIGJpZyBvbmUgbGF0ZXIuICBLbm93aW5nIHRoZSBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIGhhdmUgbm8gY29tbW9uCmZhY3RvcnMgY2FuIGJlIHVzZWQgZm9yIGV4YW1wbGUgaW4gYG1wcV9tdWwnIHRvIG1ha2Ugb25seSB0d28gY3Jvc3MKR0NEcyBuZWNlc3NhcnksIG5vdCBmb3VyLgoKICAgVGhpcyBnZW5lcmFsIGFwcHJvYWNoIHRvIGNvbW1vbiBmYWN0b3JzIGlzIGJhZGx5IHN1Yi1vcHRpbWFsIGluIHRoZQpwcmVzZW5jZSBvZiBzaW1wbGUgZmFjdG9yaXphdGlvbnMgb3IgbGl0dGxlIHByb3NwZWN0IGZvciBjYW5jZWxsYXRpb24sCmJ1dCBHTVAgaGFzIG5vIHdheSB0byBrbm93IHdoZW4gdGhpcyB3aWxsIG9jY3VyLiAgQXMgcGVyICpub3RlCkVmZmljaWVuY3k6OiwgdGhhdCdzIGxlZnQgdG8gYXBwbGljYXRpb25zLiAgVGhlIGBtcHFfdCcgZnJhbWV3b3JrIG1pZ2h0CnN0aWxsIHN1aXQsIHdpdGggYG1wcV9udW1yZWYnIGFuZCBgbXBxX2RlbnJlZicgZm9yIGRpcmVjdCBhY2Nlc3MgdG8gdGhlCm51bWVyYXRvciBhbmQgZGVub21pbmF0b3IsIG9yIG9mIGNvdXJzZSBgbXB6X3QnIHZhcmlhYmxlcyBjYW4gYmUgdXNlZApkaXJlY3RseS4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBGbG9hdCBJbnRlcm5hbHMsICBOZXh0OiBSYXcgT3V0cHV0IEludGVybmFscywgIFByZXY6IFJhdGlvbmFsIEludGVybmFscywgIFVwOiBJbnRlcm5hbHMKCjE2LjMgRmxvYXQgSW50ZXJuYWxzCj09PT09PT09PT09PT09PT09PT09CgpFZmZpY2llbnQgY2FsY3VsYXRpb24gaXMgdGhlIHByaW1hcnkgYWltIG9mIEdNUCBmbG9hdHMgYW5kIHRoZSB1c2Ugb2YKd2hvbGUgbGltYnMgYW5kIHNpbXBsZSByb3VuZGluZyBmYWNpbGl0YXRlcyB0aGlzLgoKICAgYG1wZl90JyBmbG9hdHMgaGF2ZSBhIHZhcmlhYmxlIHByZWNpc2lvbiBtYW50aXNzYSBhbmQgYSBzaW5nbGUKbWFjaGluZSB3b3JkIHNpZ25lZCBleHBvbmVudC4gIFRoZSBtYW50aXNzYSBpcyByZXByZXNlbnRlZCB1c2luZyBzaWduCmFuZCBtYWduaXR1ZGUuCgogICAgICAgIG1vc3QgICAgICAgICAgICAgICAgICAgbGVhc3QKICAgICBzaWduaWZpY2FudCAgICAgICAgICAgIHNpZ25pZmljYW50CiAgICAgICAgbGltYiAgICAgICAgICAgICAgICAgICBsaW1iCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbXBfZAogICAgICB8LS0tLSBfbXBfZXhwIC0tLT4gICAgICAgICAgIHwKICAgICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fCiAgICAgIHxfX19fX3xfX19fX3xfX19fX3xfX19fX3xfX19fX3wKICAgICAgICAgICAgICAgICAgICAgICAgLiA8LS0tLS0tLS0tLS0tIHJhZGl4IHBvaW50CgogICAgICAgPC0tLS0tLS0tIF9tcF9zaXplIC0tLS0tLS0tLT4KClRoZSBmaWVsZHMgYXJlIGFzIGZvbGxvd3MuCgpgX21wX3NpemUnCiAgICAgVGhlIG51bWJlciBvZiBsaW1icyBjdXJyZW50bHkgaW4gdXNlLCBvciB0aGUgbmVnYXRpdmUgb2YgdGhhdCB3aGVuCiAgICAgcmVwcmVzZW50aW5nIGEgbmVnYXRpdmUgdmFsdWUuICBaZXJvIGlzIHJlcHJlc2VudGVkIGJ5IGBfbXBfc2l6ZScKICAgICBhbmQgYF9tcF9leHAnIGJvdGggc2V0IHRvIHplcm8sIGFuZCBpbiB0aGF0IGNhc2UgdGhlIGBfbXBfZCcgZGF0YQogICAgIGlzIHVudXNlZC4gIChJbiB0aGUgZnV0dXJlIGBfbXBfZXhwJyBtaWdodCBiZSB1bmRlZmluZWQgd2hlbgogICAgIHJlcHJlc2VudGluZyB6ZXJvLikKCmBfbXBfcHJlYycKICAgICBUaGUgcHJlY2lzaW9uIG9mIHRoZSBtYW50aXNzYSwgaW4gbGltYnMuICBJbiBhbnkgY2FsY3VsYXRpb24gdGhlCiAgICAgYWltIGlzIHRvIHByb2R1Y2UgYF9tcF9wcmVjJyBsaW1icyBvZiByZXN1bHQgKHRoZSBtb3N0IHNpZ25pZmljYW50CiAgICAgYmVpbmcgbm9uLXplcm8pLgoKYF9tcF9kJwogICAgIEEgcG9pbnRlciB0byB0aGUgYXJyYXkgb2YgbGltYnMgd2hpY2ggaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZQogICAgIG1hbnRpc3NhLiAgVGhlc2UgYXJlIHN0b3JlZCAibGl0dGxlIGVuZGlhbiIgYXMgcGVyIHRoZSBgbXBuJwogICAgIGZ1bmN0aW9ucywgc28gYF9tcF9kWzBdJyBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYiBhbmQKICAgICBgX21wX2RbQUJTKF9tcF9zaXplKS0xXScgdGhlIG1vc3Qgc2lnbmlmaWNhbnQuCgogICAgIFRoZSBtb3N0IHNpZ25pZmljYW50IGxpbWIgaXMgYWx3YXlzIG5vbi16ZXJvLCBidXQgdGhlcmUgYXJlIG5vCiAgICAgb3RoZXIgcmVzdHJpY3Rpb25zIG9uIGl0cyB2YWx1ZSwgaW4gcGFydGljdWxhciB0aGUgaGlnaGVzdCAxIGJpdAogICAgIGNhbiBiZSBhbnl3aGVyZSB3aXRoaW4gdGhlIGxpbWIuCgogICAgIGBfbXBfcHJlYysxJyBsaW1icyBhcmUgYWxsb2NhdGVkIHRvIGBfbXBfZCcsIHRoZSBleHRyYSBsaW1iIGJlaW5nCiAgICAgZm9yIGNvbnZlbmllbmNlIChzZWUgYmVsb3cpLiAgVGhlcmUgYXJlIG5vIHJlYWxsb2NhdGlvbnMgZHVyaW5nIGEKICAgICBjYWxjdWxhdGlvbiwgb25seSBpbiBhIGNoYW5nZSBvZiBwcmVjaXNpb24gd2l0aCBgbXBmX3NldF9wcmVjJy4KCmBfbXBfZXhwJwogICAgIFRoZSBleHBvbmVudCwgaW4gbGltYnMsIGRldGVybWluaW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgaW1wbGllZAogICAgIHJhZGl4IHBvaW50LiAgWmVybyBtZWFucyB0aGUgcmFkaXggcG9pbnQgaXMganVzdCBhYm92ZSB0aGUgbW9zdAogICAgIHNpZ25pZmljYW50IGxpbWIuICBQb3NpdGl2ZSB2YWx1ZXMgbWVhbiBhIHJhZGl4IHBvaW50IG9mZnNldAogICAgIHRvd2FyZHMgdGhlIGxvd2VyIGxpbWJzIGFuZCBoZW5jZSBhIHZhbHVlID49IDEsIGFzIGZvciBleGFtcGxlIGluCiAgICAgdGhlIGRpYWdyYW0gYWJvdmUuICBOZWdhdGl2ZSBleHBvbmVudHMgbWVhbiBhIHJhZGl4IHBvaW50IGZ1cnRoZXIKICAgICBhYm92ZSB0aGUgaGlnaGVzdCBsaW1iLgoKICAgICBOYXR1cmFsbHkgdGhlIGV4cG9uZW50IGNhbiBiZSBhbnkgdmFsdWUsIGl0IGRvZXNuJ3QgaGF2ZSB0byBmYWxsCiAgICAgd2l0aGluIHRoZSBsaW1icyBhcyB0aGUgZGlhZ3JhbSBzaG93cywgaXQgY2FuIGJlIGEgbG9uZyB3YXkgYWJvdmUKICAgICBvciBhIGxvbmcgd2F5IGJlbG93LiAgTGltYnMgb3RoZXIgdGhhbiB0aG9zZSBpbmNsdWRlZCBpbiB0aGUKICAgICBge19tcF9kLF9tcF9zaXplfScgZGF0YSBhcmUgdHJlYXRlZCBhcyB6ZXJvLgoKICAgVGhlIGBfbXBfc2l6ZScgYW5kIGBfbXBfcHJlYycgZmllbGRzIGFyZSBgaW50JywgYWx0aG91Z2ggdGhlCmBtcF9zaXplX3QnIHR5cGUgaXMgdXN1YWxseSBhIGBsb25nJy4gIFRoZSBgX21wX2V4cCcgZmllbGQgaXMgdXN1YWxseQpgbG9uZycuICBUaGlzIGlzIGRvbmUgdG8gbWFrZSBzb21lIGZpZWxkcyBqdXN0IDMyIGJpdHMgb24gc29tZSA2NCBiaXRzCnN5c3RlbXMsIHRoZXJlYnkgc2F2aW5nIGEgZmV3IGJ5dGVzIG9mIGRhdGEgc3BhY2UgYnV0IHN0aWxsIHByb3ZpZGluZwpwbGVudHkgb2YgcHJlY2lzaW9uIGFuZCBhIHZlcnkgbGFyZ2UgcmFuZ2UuCgoKVGhlIGZvbGxvd2luZyB2YXJpb3VzIHBvaW50cyBzaG91bGQgYmUgbm90ZWQuCgpMb3cgWmVyb3MKICAgICBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgbGltYnMgYF9tcF9kWzBdJyBldGMgY2FuIGJlIHplcm8sIHRob3VnaAogICAgIHN1Y2ggbG93IHplcm9zIGNhbiBhbHdheXMgYmUgaWdub3JlZC4gIFJvdXRpbmVzIGxpa2VseSB0byBwcm9kdWNlCiAgICAgbG93IHplcm9zIGNoZWNrIGFuZCBhdm9pZCB0aGVtIHRvIHNhdmUgdGltZSBpbiBzdWJzZXF1ZW50CiAgICAgY2FsY3VsYXRpb25zLCBidXQgZm9yIG1vc3Qgcm91dGluZXMgdGhleSdyZSBxdWl0ZSB1bmxpa2VseSBhbmQKICAgICBhcmVuJ3QgY2hlY2tlZC4KCk1hbnRpc3NhIFNpemUgUmFuZ2UKICAgICBUaGUgYF9tcF9zaXplJyBjb3VudCBvZiBsaW1icyBpbiB1c2UgY2FuIGJlIGxlc3MgdGhhbiBgX21wX3ByZWMnIGlmCiAgICAgdGhlIHZhbHVlIGNhbiBiZSByZXByZXNlbnRlZCBpbiBsZXNzLiAgVGhpcyBtZWFucyBsb3cgcHJlY2lzaW9uCiAgICAgdmFsdWVzIG9yIHNtYWxsIGludGVnZXJzIHN0b3JlZCBpbiBhIGhpZ2ggcHJlY2lzaW9uIGBtcGZfdCcgY2FuCiAgICAgc3RpbGwgYmUgb3BlcmF0ZWQgb24gZWZmaWNpZW50bHkuCgogICAgIGBfbXBfc2l6ZScgY2FuIGFsc28gYmUgZ3JlYXRlciB0aGFuIGBfbXBfcHJlYycuICBGaXJzdGx5IGEgdmFsdWUgaXMKICAgICBhbGxvd2VkIHRvIHVzZSBhbGwgb2YgdGhlIGBfbXBfcHJlYysxJyBsaW1icyBhdmFpbGFibGUgYXQgYF9tcF9kJywKICAgICBhbmQgc2Vjb25kbHkgd2hlbiBgbXBmX3NldF9wcmVjX3JhdycgbG93ZXJzIGBfbXBfcHJlYycgaXQgbGVhdmVzCiAgICAgYF9tcF9zaXplJyB1bmNoYW5nZWQgYW5kIHNvIHRoZSBzaXplIGNhbiBiZSBhcmJpdHJhcmlseSBiaWdnZXIgdGhhbgogICAgIGBfbXBfcHJlYycuCgpSb3VuZGluZwogICAgIEFsbCByb3VuZGluZyBpcyBkb25lIG9uIGxpbWIgYm91bmRhcmllcy4gIENhbGN1bGF0aW5nIGBfbXBfcHJlYycKICAgICBsaW1icyB3aXRoIHRoZSBoaWdoIG5vbi16ZXJvIHdpbGwgZW5zdXJlIHRoZSBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQKICAgICBtaW5pbXVtIHByZWNpc2lvbiBpcyBvYnRhaW5lZC4KCiAgICAgVGhlIHVzZSBvZiBzaW1wbGUgInRydW5jIiByb3VuZGluZyB0b3dhcmRzIHplcm8gaXMgZWZmaWNpZW50LAogICAgIHNpbmNlIHRoZXJlJ3Mgbm8gbmVlZCB0byBleGFtaW5lIGV4dHJhIGxpbWJzIGFuZCBpbmNyZW1lbnQgb3IKICAgICBkZWNyZW1lbnQuCgpCaXQgU2hpZnRzCiAgICAgU2luY2UgdGhlIGV4cG9uZW50IGlzIGluIGxpbWJzLCB0aGVyZSBhcmUgbm8gYml0IHNoaWZ0cyBpbiBiYXNpYwogICAgIG9wZXJhdGlvbnMgbGlrZSBgbXBmX2FkZCcgYW5kIGBtcGZfbXVsJy4gIFdoZW4gZGlmZmVyaW5nIGV4cG9uZW50cwogICAgIGFyZSBlbmNvdW50ZXJlZCBhbGwgdGhhdCdzIG5lZWRlZCBpcyB0byBhZGp1c3QgcG9pbnRlcnMgdG8gbGluZSB1cAogICAgIHRoZSByZWxldmFudCBsaW1icy4KCiAgICAgT2YgY291cnNlIGBtcGZfbXVsXzJleHAnIGFuZCBgbXBmX2Rpdl8yZXhwJyB3aWxsIHJlcXVpcmUgYml0CiAgICAgc2hpZnRzLCBidXQgdGhlIGNob2ljZSBpcyBiZXR3ZWVuIGFuIGV4cG9uZW50IGluIGxpbWJzIHdoaWNoCiAgICAgcmVxdWlyZXMgc2hpZnRzIHRoZXJlLCBvciBvbmUgaW4gYml0cyB3aGljaCByZXF1aXJlcyB0aGVtIGFsbW9zdAogICAgIGV2ZXJ5d2hlcmUgZWxzZS4KClVzZSBvZiBgX21wX3ByZWMrMScgTGltYnMKICAgICBUaGUgZXh0cmEgbGltYiBvbiBgX21wX2QnIChgX21wX3ByZWMrMScgcmF0aGVyIHRoYW4ganVzdAogICAgIGBfbXBfcHJlYycpIGhlbHBzIHdoZW4gYW4gYG1wZicgcm91dGluZSBtaWdodCBnZXQgYSBjYXJyeSBmcm9tIGl0cwogICAgIG9wZXJhdGlvbi4gIGBtcGZfYWRkJyBmb3IgaW5zdGFuY2Ugd2lsbCBkbyBhbiBgbXBuX2FkZCcgb2YKICAgICBgX21wX3ByZWMnIGxpbWJzLiAgSWYgdGhlcmUncyBubyBjYXJyeSB0aGVuIHRoYXQncyB0aGUgcmVzdWx0LCBidXQKICAgICBpZiB0aGVyZSBpcyBhIGNhcnJ5IHRoZW4gaXQncyBzdG9yZWQgaW4gdGhlIGV4dHJhIGxpbWIgb2Ygc3BhY2UgYW5kCiAgICAgYF9tcF9zaXplJyBiZWNvbWVzIGBfbXBfcHJlYysxJy4KCiAgICAgV2hlbmV2ZXIgYF9tcF9wcmVjKzEnIGxpbWJzIGFyZSBoZWxkIGluIGEgdmFyaWFibGUsIHRoZSBsb3cgbGltYgogICAgIGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBpbnRlbmRlZCBwcmVjaXNpb24sIG9ubHkgdGhlIGBfbXBfcHJlYycgaGlnaAogICAgIGxpbWJzLiAgQnV0IHplcm9pbmcgaXQgb3V0IG9yIG1vdmluZyB0aGUgcmVzdCBkb3duIGlzIHVubmVjZXNzYXJ5LgogICAgIFN1YnNlcXVlbnQgcm91dGluZXMgcmVhZGluZyB0aGUgdmFsdWUgd2lsbCBzaW1wbHkgdGFrZSB0aGUgaGlnaAogICAgIGxpbWJzIHRoZXkgbmVlZCwgYW5kIHRoaXMgd2lsbCBiZSBgX21wX3ByZWMnIGlmIHRoZWlyIHRhcmdldCBoYXMKICAgICB0aGF0IHNhbWUgcHJlY2lzaW9uLiAgVGhpcyBpcyBubyBtb3JlIHRoYW4gYSBwb2ludGVyIGFkanVzdG1lbnQsCiAgICAgYW5kIG11c3QgYmUgY2hlY2tlZCBhbnl3YXkgc2luY2UgdGhlIGRlc3RpbmF0aW9uIHByZWNpc2lvbiBjYW4gYmUKICAgICBkaWZmZXJlbnQgZnJvbSB0aGUgc291cmNlcy4KCiAgICAgQ29weSBmdW5jdGlvbnMgbGlrZSBgbXBmX3NldCcgd2lsbCByZXRhaW4gYSBmdWxsIGBfbXBfcHJlYysxJyBsaW1icwogICAgIGlmIGF2YWlsYWJsZS4gIFRoaXMgZW5zdXJlcyB0aGF0IGEgdmFyaWFibGUgd2hpY2ggaGFzIGBfbXBfc2l6ZScKICAgICBlcXVhbCB0byBgX21wX3ByZWMrMScgd2lsbCBnZXQgaXRzIGZ1bGwgZXhhY3QgdmFsdWUgY29waWVkLgogICAgIFN0cmljdGx5IHNwZWFraW5nIHRoaXMgaXMgdW5uZWNlc3Nhcnkgc2luY2Ugb25seSBgX21wX3ByZWMnIGxpbWJzCiAgICAgYXJlIG5lZWRlZCBmb3IgdGhlIGFwcGxpY2F0aW9uJ3MgcmVxdWVzdGVkIHByZWNpc2lvbiwgYnV0IGl0J3MKICAgICBjb25zaWRlcmVkIHRoYXQgYW4gYG1wZl9zZXQnIGZyb20gb25lIHZhcmlhYmxlIGludG8gYW5vdGhlciBvZiB0aGUKICAgICBzYW1lIHByZWNpc2lvbiBvdWdodCB0byBwcm9kdWNlIGFuIGV4YWN0IGNvcHkuCgpBcHBsaWNhdGlvbiBQcmVjaXNpb25zCiAgICAgYF9fR01QRl9CSVRTX1RPX1BSRUMnIGNvbnZlcnRzIGFuIGFwcGxpY2F0aW9uIHJlcXVlc3RlZCBwcmVjaXNpb24KICAgICB0byBhbiBgX21wX3ByZWMnLiAgVGhlIHZhbHVlIGluIGJpdHMgaXMgcm91bmRlZCB1cCB0byBhIHdob2xlIGxpbWIKICAgICB0aGVuIGFuIGV4dHJhIGxpbWIgaXMgYWRkZWQgc2luY2UgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbGltYiBvZgogICAgIGBfbXBfZCcgaXMgb25seSBub24temVybyBhbmQgdGhlcmVmb3JlIG1pZ2h0IGNvbnRhaW4gb25seSBvbmUgYml0LgoKICAgICBgX19HTVBGX1BSRUNfVE9fQklUUycgZG9lcyB0aGUgcmV2ZXJzZSBjb252ZXJzaW9uLCBhbmQgcmVtb3ZlcyB0aGUKICAgICBleHRyYSBsaW1iIGZyb20gYF9tcF9wcmVjJyBiZWZvcmUgY29udmVydGluZyB0byBiaXRzLiAgVGhlIG5ldAogICAgIGVmZmVjdCBvZiByZWFkaW5nIGJhY2sgd2l0aCBgbXBmX2dldF9wcmVjJyBpcyBzaW1wbHkgdGhlIHByZWNpc2lvbgogICAgIHJvdW5kZWQgdXAgdG8gYSBtdWx0aXBsZSBvZiBgbXBfYml0c19wZXJfbGltYicuCgogICAgIE5vdGUgdGhhdCB0aGUgZXh0cmEgbGltYiBhZGRlZCBoZXJlIGZvciB0aGUgaGlnaCBvbmx5IGJlaW5nCiAgICAgbm9uLXplcm8gaXMgaW4gYWRkaXRpb24gdG8gdGhlIGV4dHJhIGxpbWIgYWxsb2NhdGVkIHRvIGBfbXBfZCcuCiAgICAgRm9yIGV4YW1wbGUgd2l0aCBhIDMyLWJpdCBsaW1iLCBhbiBhcHBsaWNhdGlvbiByZXF1ZXN0IGZvciAyNTAKICAgICBiaXRzIHdpbGwgYmUgcm91bmRlZCB1cCB0byA4IGxpbWJzLCB0aGVuIGFuIGV4dHJhIGFkZGVkIGZvciB0aGUKICAgICBoaWdoIGJlaW5nIG9ubHkgbm9uLXplcm8sIGdpdmluZyBhbiBgX21wX3ByZWMnIG9mIDkuICBgX21wX2QnIHRoZW4KICAgICBnZXRzIDEwIGxpbWJzIGFsbG9jYXRlZC4gIFJlYWRpbmcgYmFjayB3aXRoIGBtcGZfZ2V0X3ByZWMnIHdpbGwKICAgICB0YWtlIGBfbXBfcHJlYycgc3VidHJhY3QgMSBsaW1iIGFuZCBtdWx0aXBseSBieSAzMiwgZ2l2aW5nIDI1NgogICAgIGJpdHMuCgogICAgIFN0cmljdGx5IHNwZWFraW5nLCB0aGUgZmFjdCB0aGUgaGlnaCBsaW1iIGhhcyBhdCBsZWFzdCBvbmUgYml0CiAgICAgbWVhbnMgdGhhdCBhIGZsb2F0IHdpdGgsIHNheSwgMyBsaW1icyBvZiAzMi1iaXRzIGVhY2ggd2lsbCBiZQogICAgIGhvbGRpbmcgYXQgbGVhc3QgNjUgYml0cywgYnV0IGZvciB0aGUgcHVycG9zZXMgb2YgYG1wZl90JyBpdCdzCiAgICAgY29uc2lkZXJlZCBzaW1wbHkgdG8gYmUgNjQgYml0cywgYSBuaWNlIG11bHRpcGxlIG9mIHRoZSBsaW1iIHNpemUuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogUmF3IE91dHB1dCBJbnRlcm5hbHMsICBOZXh0OiBDKysgSW50ZXJmYWNlIEludGVybmFscywgIFByZXY6IEZsb2F0IEludGVybmFscywgIFVwOiBJbnRlcm5hbHMKCjE2LjQgUmF3IE91dHB1dCBJbnRlcm5hbHMKPT09PT09PT09PT09PT09PT09PT09PT09PQoKYG1wel9vdXRfcmF3JyB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybWF0LgoKICAgICArLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgICB8IHNpemUgfCAgICAgICBkYXRhIGJ5dGVzICAgICAgIHwKICAgICArLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCiAgIFRoZSBzaXplIGlzIDQgYnl0ZXMgd3JpdHRlbiBtb3N0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QsIGJlaW5nIHRoZQpudW1iZXIgb2Ygc3Vic2VxdWVudCBkYXRhIGJ5dGVzLCBvciB0aGUgdHdvcyBjb21wbGVtZW50IG5lZ2F0aXZlIG9mCnRoYXQgd2hlbiBhIG5lZ2F0aXZlIGludGVnZXIgaXMgcmVwcmVzZW50ZWQuICBUaGUgZGF0YSBieXRlcyBhcmUgdGhlCmFic29sdXRlIHZhbHVlIG9mIHRoZSBpbnRlZ2VyLCB3cml0dGVuIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdC4KCiAgIFRoZSBtb3N0IHNpZ25pZmljYW50IGRhdGEgYnl0ZSBpcyBhbHdheXMgbm9uLXplcm8sIHNvIHRoZSBvdXRwdXQgaXMKdGhlIHNhbWUgb24gYWxsIHN5c3RlbXMsIGlycmVzcGVjdGl2ZSBvZiBsaW1iIHNpemUuCgogICBJbiBHTVAgMSwgbGVhZGluZyB6ZXJvIGJ5dGVzIHdlcmUgd3JpdHRlbiB0byBwYWQgdGhlIGRhdGEgYnl0ZXMgdG8gYQptdWx0aXBsZSBvZiB0aGUgbGltYiBzaXplLiAgYG1wel9pbnBfcmF3JyB3aWxsIHN0aWxsIGFjY2VwdCB0aGlzLCBmb3IKY29tcGF0aWJpbGl0eS4KCiAgIFRoZSB1c2Ugb2YgImJpZyBlbmRpYW4iIGZvciBib3RoIHRoZSBzaXplIGFuZCBkYXRhIGZpZWxkcyBpcwpkZWxpYmVyYXRlLCBpdCBtYWtlcyB0aGUgZGF0YSBlYXN5IHRvIHJlYWQgaW4gYSBoZXggZHVtcCBvZiBhIGZpbGUuClVuZm9ydHVuYXRlbHkgaXQgYWxzbyBtZWFucyB0aGF0IHRoZSBsaW1iIGRhdGEgbXVzdCBiZSByZXZlcnNlZCB3aGVuCnJlYWRpbmcgb3Igd3JpdGluZywgc28gbmVpdGhlciBhIGJpZyBlbmRpYW4gbm9yIGxpdHRsZSBlbmRpYW4gc3lzdGVtCmNhbiBqdXN0IHJlYWQgYW5kIHdyaXRlIGBfbXBfZCcuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogQysrIEludGVyZmFjZSBJbnRlcm5hbHMsICBQcmV2OiBSYXcgT3V0cHV0IEludGVybmFscywgIFVwOiBJbnRlcm5hbHMKCjE2LjUgQysrIEludGVyZmFjZSBJbnRlcm5hbHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQSBzeXN0ZW0gb2YgZXhwcmVzc2lvbiB0ZW1wbGF0ZXMgaXMgdXNlZCB0byBlbnN1cmUgc29tZXRoaW5nIGxpa2UKYGE9YitjJyB0dXJucyBpbnRvIGEgc2ltcGxlIGNhbGwgdG8gYG1wel9hZGQnIGV0Yy4gIEZvciBgbXBmX2NsYXNzJyB0aGUKc2NoZW1lIGFsc28gZW5zdXJlcyB0aGUgcHJlY2lzaW9uIG9mIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBpcyB1c2VkIGZvcgphbnkgdGVtcG9yYXJpZXMgd2l0aGluIGEgc3RhdGVtZW50IGxpa2UgYGY9dyp4K3kqeicuICBUaGVzZSBhcmUKaW1wb3J0YW50IGZlYXR1cmVzIHdoaWNoIGEgbmFpdmUgaW1wbGVtZW50YXRpb24gY2Fubm90IHByb3ZpZGUuCgogICBBIHNpbXBsaWZpZWQgZGVzY3JpcHRpb24gb2YgdGhlIHNjaGVtZSBmb2xsb3dzLiAgVGhlIHRydWUgc2NoZW1lIGlzCmNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgZXhwcmVzc2lvbnMgaGF2ZSBkaWZmZXJlbnQgcmV0dXJuIHR5cGVzLgpGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBzb3VyY2UgY29kZS4KCiAgIFRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uLCBzYXksIGFkZGl0aW9uLCB3ZSBmaXJzdCBkZWZpbmUgYSAiZnVuY3Rpb24Kb2JqZWN0IiBldmFsdWF0aW5nIGl0LAoKICAgICBzdHJ1Y3QgX19nbXBfYmluYXJ5X3BsdXMKICAgICB7CiAgICAgICBzdGF0aWMgdm9pZCBldmFsKG1wZl90IGYsIGNvbnN0IG1wZl90IGcsIGNvbnN0IG1wZl90IGgpCiAgICAgICB7CiAgICAgICAgIG1wZl9hZGQoZiwgZywgaCk7CiAgICAgICB9CiAgICAgfTsKCkFuZCBhbiAiYWRkaXRpdmUgZXhwcmVzc2lvbiIgb2JqZWN0LAoKICAgICBfX2dtcF9leHByPF9fZ21wX2JpbmFyeV9leHByPG1wZl9jbGFzcywgbXBmX2NsYXNzLCBfX2dtcF9iaW5hcnlfcGx1cz4gPgogICAgIG9wZXJhdG9yKyhjb25zdCBtcGZfY2xhc3MgJmYsIGNvbnN0IG1wZl9jbGFzcyAmZykKICAgICB7CiAgICAgICByZXR1cm4gX19nbXBfZXhwcgogICAgICAgICA8X19nbXBfYmluYXJ5X2V4cHI8bXBmX2NsYXNzLCBtcGZfY2xhc3MsIF9fZ21wX2JpbmFyeV9wbHVzPiA+KGYsIGcpOwogICAgIH0KCiAgIFRoZSBzZWVtaW5nbHkgcmVkdW5kYW50IGBfX2dtcF9leHByPF9fZ21wX2JpbmFyeV9leHByPC4uLj4+JyBpcyB1c2VkCnRvIGVuY2Fwc3VsYXRlIGFueSBwb3NzaWJsZSBraW5kIG9mIGV4cHJlc3Npb24gaW50byBhIHNpbmdsZSB0ZW1wbGF0ZQp0eXBlLiAgSW4gZmFjdCBldmVuIGBtcGZfY2xhc3MnIGV0YyBhcmUgYHR5cGVkZWYnIHNwZWNpYWxpemF0aW9ucyBvZgpgX19nbXBfZXhwcicuCgogICBOZXh0IHdlIGRlZmluZSBhc3NpZ25tZW50IG9mIGBfX2dtcF9leHByJyB0byBgbXBmX2NsYXNzJy4KCiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgICAgbXBmX2NsYXNzICYgbXBmX2NsYXNzOjpvcGVyYXRvcj0oY29uc3QgX19nbXBfZXhwcjxUPiAmZXhwcikKICAgICB7CiAgICAgICBleHByLmV2YWwodGhpcy0+Z2V0X21wZl90KCksIHRoaXMtPnByZWNpc2lvbigpKTsKICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CgogICAgIHRlbXBsYXRlIDxjbGFzcyBPcD4KICAgICB2b2lkIF9fZ21wX2V4cHI8X19nbXBfYmluYXJ5X2V4cHI8bXBmX2NsYXNzLCBtcGZfY2xhc3MsIE9wPiA+OjpldmFsCiAgICAgKG1wZl90IGYsIG1wX2JpdGNudF90IHByZWNpc2lvbikKICAgICB7CiAgICAgICBPcDo6ZXZhbChmLCBleHByLnZhbDEuZ2V0X21wZl90KCksIGV4cHIudmFsMi5nZXRfbXBmX3QoKSk7CiAgICAgfQoKICAgd2hlcmUgYGV4cHIudmFsMScgYW5kIGBleHByLnZhbDInIGFyZSByZWZlcmVuY2VzIHRvIHRoZSBleHByZXNzaW9uJ3MKb3BlcmFuZHMgKGhlcmUgYGV4cHInIGlzIHRoZSBgX19nbXBfYmluYXJ5X2V4cHInIHN0b3JlZCB3aXRoaW4gdGhlCmBfX2dtcF9leHByJykuCgogICBUaGlzIHdheSwgdGhlIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgZXZhbHVhdGVkIG9ubHkgYXQgdGhlIHRpbWUgb2YKYXNzaWdubWVudCwgd2hlbiB0aGUgcmVxdWlyZWQgcHJlY2lzaW9uICh0aGF0IG9mIGBmJykgaXMga25vd24uCkZ1cnRoZXJtb3JlIHRoZSB0YXJnZXQgYG1wZl90JyBpcyBub3cgYXZhaWxhYmxlLCB0aHVzIHdlIGNhbiBjYWxsCmBtcGZfYWRkJyBkaXJlY3RseSB3aXRoIGBmJyBhcyB0aGUgb3V0cHV0IGFyZ3VtZW50LgoKICAgQ29tcG91bmQgZXhwcmVzc2lvbnMgYXJlIGhhbmRsZWQgYnkgZGVmaW5pbmcgb3BlcmF0b3JzIHRha2luZwpzdWJleHByZXNzaW9ucyBhcyB0aGVpciBhcmd1bWVudHMsIGxpa2UgdGhpczoKCiAgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CiAgICAgX19nbXBfZXhwcgogICAgIDxfX2dtcF9iaW5hcnlfZXhwcjxfX2dtcF9leHByPFQ+LCBfX2dtcF9leHByPFU+LCBfX2dtcF9iaW5hcnlfcGx1cz4gPgogICAgIG9wZXJhdG9yKyhjb25zdCBfX2dtcF9leHByPFQ+ICZleHByMSwgY29uc3QgX19nbXBfZXhwcjxVPiAmZXhwcjIpCiAgICAgewogICAgICAgcmV0dXJuIF9fZ21wX2V4cHIKICAgICAgICAgPF9fZ21wX2JpbmFyeV9leHByPF9fZ21wX2V4cHI8VD4sIF9fZ21wX2V4cHI8VT4sIF9fZ21wX2JpbmFyeV9wbHVzPiA+CiAgICAgICAgIChleHByMSwgZXhwcjIpOwogICAgIH0KCiAgIEFuZCB0aGUgY29ycmVzcG9uZGluZyBzcGVjaWFsaXphdGlvbnMgb2YgYF9fZ21wX2V4cHI6OmV2YWwnOgoKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MgT3A+CiAgICAgdm9pZCBfX2dtcF9leHByCiAgICAgPF9fZ21wX2JpbmFyeV9leHByPF9fZ21wX2V4cHI8VD4sIF9fZ21wX2V4cHI8VT4sIE9wPiA+OjpldmFsCiAgICAgKG1wZl90IGYsIG1wX2JpdGNudF90IHByZWNpc2lvbikKICAgICB7CiAgICAgICAvLyBkZWNsYXJlIHR3byB0ZW1wb3JhcmllcwogICAgICAgbXBmX2NsYXNzIHRlbXAxKGV4cHIudmFsMSwgcHJlY2lzaW9uKSwgdGVtcDIoZXhwci52YWwyLCBwcmVjaXNpb24pOwogICAgICAgT3A6OmV2YWwoZiwgdGVtcDEuZ2V0X21wZl90KCksIHRlbXAyLmdldF9tcGZfdCgpKTsKICAgICB9CgogICBUaGUgZXhwcmVzc2lvbiBpcyB0aHVzIHJlY3Vyc2l2ZWx5IGV2YWx1YXRlZCB0byBhbnkgbGV2ZWwgb2YKY29tcGxleGl0eSBhbmQgYWxsIHN1YmV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgdG8gdGhlIHByZWNpc2lvbiBvZiBgZicuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogQ29udHJpYnV0b3JzLCAgTmV4dDogUmVmZXJlbmNlcywgIFByZXY6IEludGVybmFscywgIFVwOiBUb3AKCkFwcGVuZGl4IEEgQ29udHJpYnV0b3JzCioqKioqKioqKioqKioqKioqKioqKioqCgpUb3JiavZybiBHcmFubHVuZCB3cm90ZSB0aGUgb3JpZ2luYWwgR01QIGxpYnJhcnkgYW5kIGlzIHN0aWxsIHRoZSBtYWluCmRldmVsb3Blci4gIENvZGUgbm90IGV4cGxpY2l0bHkgYXR0cmlidXRlZCB0byBvdGhlcnMsIHdhcyBjb250cmlidXRlZCBieQpUb3JiavZybi4gIFNldmVyYWwgb3RoZXIgaW5kaXZpZHVhbHMgYW5kIG9yZ2FuaXphdGlvbnMgaGF2ZSBjb250cmlidXRlZApHTVAuICBIZXJlIGlzIGEgbGlzdCBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyIG9uIGZpcnN0IGNvbnRyaWJ1dGlvbjoKCiAgIEd1bm5hciBTavZkaW4gYW5kIEhhbnMgUmllc2VsIGhlbHBlZCB3aXRoIG1hdGhlbWF0aWNhbCBwcm9ibGVtcyBpbgplYXJseSB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeS4KCiAgIFJpY2hhcmQgU3RhbGxtYW4gaGVscGVkIHdpdGggdGhlIGludGVyZmFjZSBkZXNpZ24gYW5kIHJldmlzZWQgdGhlCmZpcnN0IHZlcnNpb24gb2YgdGhpcyBtYW51YWwuCgogICBCcmlhbiBCZXVuaW5nIGFuZCBEb3VnIExlYSBoZWxwZWQgd2l0aCB0ZXN0aW5nIG9mIGVhcmx5IHZlcnNpb25zIG9mCnRoZSBsaWJyYXJ5IGFuZCBtYWRlIGNyZWF0aXZlIHN1Z2dlc3Rpb25zLgoKICAgSm9obiBBbWFuYXRpZGVzIG9mIFlvcmsgVW5pdmVyc2l0eSBpbiBDYW5hZGEgY29udHJpYnV0ZWQgdGhlIGZ1bmN0aW9uCmBtcHpfcHJvYmFiX3ByaW1lX3AnLgoKICAgUGF1bCBaaW1tZXJtYW5uIHdyb3RlIHRoZSBSRURDLWJhc2VkIG1wel9wb3dtIGNvZGUsIHRoZQpTY2j2bmhhZ2UtU3RyYXNzZW4gRkZUIG11bHRpcGx5IGNvZGUsIGFuZCB0aGUgS2FyYXRzdWJhIHNxdWFyZSByb290CmNvZGUuICBIZSBhbHNvIGltcHJvdmVkIHRoZSBUb29tMyBjb2RlIGZvciBHTVAgNC4yLiAgUGF1bCBzcGFya2VkIHRoZQpkZXZlbG9wbWVudCBvZiBHTVAgMiwgd2l0aCBoaXMgY29tcGFyaXNvbnMgYmV0d2VlbiBiaWdudW0gcGFja2FnZXMuClRoZSBFQ01ORVQgcHJvamVjdCBQYXVsIGlzIG9yZ2FuaXppbmcgd2FzIGEgZHJpdmluZyBmb3JjZSBiZWhpbmQgbWFueQpvZiB0aGUgb3B0aW1pemF0aW9ucyBpbiBHTVAgMy4gIFBhdWwgYWxzbyB3cm90ZSB0aGUgbmV3IEdNUCA0LjMgbnRoCnJvb3QgY29kZSAod2l0aCBUb3JiavZybikuCgogICBLZW4gV2ViZXIgKEtlbnQgU3RhdGUgVW5pdmVyc2l0eSwgVW5pdmVyc2lkYWRlIEZlZGVyYWwgZG8gUmlvIEdyYW5kZQpkbyBTdWwpIGNvbnRyaWJ1dGVkIG5vdyBkZWZ1bmN0IHZlcnNpb25zIG9mIGBtcHpfZ2NkJywgYG1wel9kaXZleGFjdCcsCmBtcG5fZ2NkJywgYW5kIGBtcG5fYmRpdm1vZCcsIHBhcnRpYWxseSBzdXBwb3J0ZWQgYnkgQ05QcSAoQnJhemlsKQpncmFudCAzMDEzMTQxOTQtMi4KCiAgIFBlciBCb3RobmVyIG9mIEN5Z251cyBTdXBwb3J0IGhlbHBlZCB0byBzZXQgdXAgR01QIHRvIHVzZSBDeWdudXMnCmNvbmZpZ3VyZS4gIEhlIGhhcyBhbHNvIG1hZGUgdmFsdWFibGUgc3VnZ2VzdGlvbnMgYW5kIHRlc3RlZCBudW1lcm91cwppbnRlcm1lZGlhcnkgcmVsZWFzZXMuCgogICBKb2FjaGltIEhvbGxtYW4gd2FzIGludm9sdmVkIGluIHRoZSBkZXNpZ24gb2YgdGhlIGBtcGYnIGludGVyZmFjZSwKYW5kIGluIHRoZSBgbXB6JyBkZXNpZ24gcmV2aXNpb25zIGZvciB2ZXJzaW9uIDIuCgogICBCZW5uZXQgWWVlIGNvbnRyaWJ1dGVkIHRoZSBpbml0aWFsIHZlcnNpb25zIG9mIGBtcHpfamFjb2JpJyBhbmQKYG1wel9sZWdlbmRyZScuCgogICBBbmRyZWFzIFNjaHdhYiBjb250cmlidXRlZCB0aGUgZmlsZXMgYG1wbi9tNjhrL2xzaGlmdC5TJyBhbmQKYG1wbi9tNjhrL3JzaGlmdC5TJyAobm93IGluIGAuYXNtJyBmb3JtKS4KCiAgIFJvYmVydCBIYXJsZXkgb2YgSW5yaWEsIEZyYW5jZSBhbmQgRGF2aWQgU2VhbCBvZiBBUk0sIEVuZ2xhbmQsCnN1Z2dlc3RlZCBjbGV2ZXIgaW1wcm92ZW1lbnRzIGZvciBwb3B1bGF0aW9uIGNvdW50LiAgUm9iZXJ0IGFsc28gd3JvdGUKaGlnaGx5IG9wdGltaXplZCBLYXJhdHN1YmEgYW5kIDMtd2F5IFRvb20gbXVsdGlwbGljYXRpb24gZnVuY3Rpb25zIGZvcgpHTVAgMywgYW5kIGNvbnRyaWJ1dGVkIHRoZSBBUk0gYXNzZW1ibHkgY29kZS4KCiAgIFRvcnN0ZW4gRWtlZGFobCBvZiB0aGUgTWF0aGVtYXRpY2FsIGRlcGFydG1lbnQgb2YgU3RvY2tob2xtClVuaXZlcnNpdHkgcHJvdmlkZWQgc2lnbmlmaWNhbnQgaW5zcGlyYXRpb24gZHVyaW5nIHNldmVyYWwgcGhhc2VzIG9mCnRoZSBHTVAgZGV2ZWxvcG1lbnQuICBIaXMgbWF0aGVtYXRpY2FsIGV4cGVydGlzZSBoZWxwZWQgaW1wcm92ZSBzZXZlcmFsCmFsZ29yaXRobXMuCgogICBMaW51cyBOb3JkYmVyZyB3cm90ZSB0aGUgbmV3IGNvbmZpZ3VyZSBzeXN0ZW0gYmFzZWQgb24gYXV0b2NvbmYgYW5kCmltcGxlbWVudGVkIHRoZSBuZXcgcmFuZG9tIGZ1bmN0aW9ucy4KCiAgIEtldmluIFJ5ZGUgd29ya2VkIG9uIGEgbGFyZ2UgbnVtYmVyIG9mIHRoaW5nczogb3B0aW1pemVkIHg4NiBjb2RlLAptNCBhc20gbWFjcm9zLCBwYXJhbWV0ZXIgdHVuaW5nLCBzcGVlZCBtZWFzdXJpbmcsIHRoZSBjb25maWd1cmUgc3lzdGVtLApmdW5jdGlvbiBpbmxpbmluZywgZGl2aXNpYmlsaXR5IHRlc3RzLCBiaXQgc2Nhbm5pbmcsIEphY29iaSBzeW1ib2xzLApGaWJvbmFjY2kgYW5kIEx1Y2FzIG51bWJlciBmdW5jdGlvbnMsIHByaW50ZiBhbmQgc2NhbmYgZnVuY3Rpb25zLCBwZXJsCmludGVyZmFjZSwgZGVtbyBleHByZXNzaW9uIHBhcnNlciwgdGhlIGFsZ29yaXRobXMgY2hhcHRlciBpbiB0aGUKbWFudWFsLCBgZ21wYXNtLW1vZGUuZWwnLCBhbmQgdmFyaW91cyBtaXNjZWxsYW5lb3VzIGltcHJvdmVtZW50cwplbHNld2hlcmUuCgogICBLZW50IEJvb3J0eiBtYWRlIHRoZSBNYWMgT1MgOSBwb3J0LgoKICAgU3RldmUgUm9vdCBoZWxwZWQgd3JpdGUgdGhlIG9wdGltaXplZCBhbHBoYSAyMTI2NCBhc3NlbWJseSBjb2RlLgoKICAgR2VyYXJkbyBCYWxsYWJpbyB3cm90ZSB0aGUgYGdtcHh4LmgnIEMrKyBjbGFzcyBpbnRlcmZhY2UgYW5kIHRoZSBDKysKYGlzdHJlYW0nIGlucHV0IHJvdXRpbmVzLgoKICAgSmFzb24gTW94aGFtIHJld3JvdGUgYG1wel9mYWNfdWknLgoKICAgUGVkcm8gR2ltZW5vIGltcGxlbWVudGVkIHRoZSBNZXJzZW5uZSBUd2lzdGVyIGFuZCBtYWRlIG90aGVyIHJhbmRvbQpudW1iZXIgaW1wcm92ZW1lbnRzLgoKICAgTmllbHMgTfZsbGVyIHdyb3RlIHRoZSBzdWItcXVhZHJhdGljIEdDRCwgZXh0ZW5kZWQgR0NEIGFuZCBqYWNvYmkKY29kZSwgdGhlIHF1YWRyYXRpYyBIZW5zZWwgZGl2aXNpb24gY29kZSwgYW5kICh3aXRoIFRvcmJq9nJuKSB0aGUgbmV3CmRpdmlkZSBhbmQgY29ucXVlciBkaXZpc2lvbiBjb2RlIGZvciBHTVAgNC4zLiAgTmllbHMgYWxzbyBoZWxwZWQKaW1wbGVtZW50IHRoZSBuZXcgVG9vbSBtdWx0aXBseSBjb2RlIGZvciBHTVAgNC4zIGFuZCBpbXBsZW1lbnRlZCBoZWxwZXIKZnVuY3Rpb25zIHRvIHNpbXBsaWZ5IFRvb20gZXZhbHVhdGlvbnMgZm9yIEdNUCA1LjAuICBIZSB3cm90ZSB0aGUKb3JpZ2luYWwgdmVyc2lvbiBvZiBtcG5fbXVsbW9kX2JubTEsIGFuZCBoZSBpcyB0aGUgbWFpbiBhdXRob3Igb2YgdGhlCm1pbmktZ21wIHBhY2thZ2UgdXNlZCBmb3IgZ21wIGJvb3RzdHJhcHBpbmcuCgogICBBbGJlcnRvIFphbm9uaSBhbmQgTWFyY28gQm9kcmF0byBzdWdnZXN0ZWQgdGhlIHVuYmFsYW5jZWQgbXVsdGlwbHkKc3RyYXRlZ3ksIGFuZCBmb3VuZCB0aGUgb3B0aW1hbCBzdHJhdGVnaWVzIGZvciBldmFsdWF0aW9uIGFuZAppbnRlcnBvbGF0aW9uIGluIFRvb20gbXVsdGlwbGljYXRpb24uCgogICBNYXJjbyBCb2RyYXRvIGhlbHBlZCBpbXBsZW1lbnQgdGhlIG5ldyBUb29tIG11bHRpcGx5IGNvZGUgZm9yIEdNUAo0LjMgYW5kIGltcGxlbWVudGVkIG1vc3Qgb2YgdGhlIG5ldyBUb29tIG11bHRpcGx5IGFuZCBzcXVhcmluZyBjb2RlIGZvcgo1LjAuICBIZSBpcyB0aGUgbWFpbiBhdXRob3Igb2YgdGhlIGN1cnJlbnQgbXBuX211bG1vZF9ibm0xIGFuZAptcG5fbXVsbG9fbi4gIE1hcmNvIGFsc28gd3JvdGUgdGhlIGZ1bmN0aW9ucyBtcG5faW52ZXJ0IGFuZAptcG5faW52ZXJ0YXBwci4gIEhlIGlzIHRoZSBhdXRob3Igb2YgdGhlIGN1cnJlbnQgY29tYmluYXRvcmlhbApmdW5jdGlvbnM6IGJpbm9taWFsLCBmYWN0b3JpYWwsIG11bHRpZmFjdG9yaWFsLCBwcmltb3JpYWwuCgogICBEYXZpZCBIYXJ2ZXkgc3VnZ2VzdGVkIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBgbXBuX2JkaXZfZGJtMScsCmltcGxlbWVudGluZyBkaXZpc2lvbiByZWxldmFudCB0byBUb29tIG11bHRpcGxpY2F0aW9uLiAgSGUgYWxzbyB3b3JrZWQKb24gZmFzdCBhc3NlbWJseSBzZXF1ZW5jZXMsIGluIHBhcnRpY3VsYXIgb24gYSBmYXN0IEFNRDY0CmBtcG5fbXVsX2Jhc2VjYXNlJy4gSGUgd3JvdGUgdGhlIGludGVybmFsIG1pZGRsZSBwcm9kdWN0IGZ1bmN0aW9ucwpgbXBuX211bG1pZF9iYXNlY2FzZScsIGBtcG5fdG9vbTQyX211bG1pZCcsIGBtcG5fbXVsbWlkX24nIGFuZCByZWxhdGVkCmhlbHBlciByb3V0aW5lcy4KCiAgIE1hcnRpbiBCb2lqIHdyb3RlIGBtcG5fcGVyZmVjdF9wb3dlcl9wJy4KCiAgIE1hcmMgR2xpc3NlIGltcHJvdmVkIGBnbXB4eC5oJzogdXNlIGZld2VyIHRlbXBvcmFyaWVzIChmYXN0ZXIpLApzcGVjaWFsaXphdGlvbnMgb2YgYG51bWVyaWNfbGltaXRzJyBhbmQgYGNvbW1vbl90eXBlJywgQysrMTEgZmVhdHVyZXMKKG1vdmUgY29uc3RydWN0b3JzLCBleHBsaWNpdCBib29sIGNvbnZlcnNpb24sIFVETCksIG1ha2UgdGhlIGNvbnZlcnNpb24KZnJvbSBgbXBxX2NsYXNzJyB0byBgbXB6X2NsYXNzJyBleHBsaWNpdCwgb3B0aW1pemUgb3BlcmF0aW9ucyB3aGVyZSBvbmUKYXJndW1lbnQgaXMgYSBzbWFsbCBjb21waWxlLXRpbWUgY29uc3RhbnQsIHJlcGxhY2Ugc29tZSBoZWFwCmFsbG9jYXRpb25zIGJ5IHN0YWNrIGFsbG9jYXRpb25zLiAgSGUgYWxzbyBmaXhlZCB0aGUgZW9mYml0IGhhbmRsaW5nIG9mCkMrKyBzdHJlYW1zLCBhbmQgcmVtb3ZlZCBvbmUgZGl2aXNpb24gZnJvbSBgbXBxL2FvcnMuYycuCgogICBEYXZpZCBTIE1pbGxlciB3cm90ZSBhc3NlbWJseSBjb2RlIGZvciBTUEFSQyBUMyBhbmQgVDQuCgogICBNYXJrIFNvZnJvbmlvdSBjbGVhbmVkIHVwIHRoZSB0eXBlcyBvZiBtdWxfZmZ0LmMsIGxldHRpbmcgaXQgd29yawpmb3IgaHVnZSBvcGVyYW5kcy4KCiAgIFVscmljaCBXZWlnYW5kIHBvcnRlZCBHTVAgdG8gdGhlIHBvd2VycGM2NGxlIEFCSS4KCiAgIChUaGlzIGxpc3QgaXMgY2hyb25vbG9naWNhbCwgbm90IG9yZGVyZWQgYWZ0ZXIgc2lnbmlmaWNhbmNlLiAgSWYgeW91CmhhdmUgY29udHJpYnV0ZWQgdG8gR01QIGJ1dCBhcmUgbm90IGxpc3RlZCBhYm92ZSwgcGxlYXNlIHRlbGwKPGdtcC1kZXZlbEBnbXBsaWIub3JnPiBhYm91dCB0aGUgb21pc3Npb24hKQoKICAgVGhlIGRldmVsb3BtZW50IG9mIGZsb2F0aW5nIHBvaW50IGZ1bmN0aW9ucyBvZiBHTlUgTVAgMiwgd2VyZQpzdXBwb3J0ZWQgaW4gcGFydCBieSB0aGUgRVNQUklULUJSQSAoQmFzaWMgUmVzZWFyY2ggQWN0aXZpdGllcykgNjg0Ngpwcm9qZWN0IFBPU1NPIChQT2x5bm9taWFsIFN5c3RlbSBTT2x2aW5nKS4KCiAgIFRoZSBkZXZlbG9wbWVudCBvZiBHTVAgMiwgMywgYW5kIDQuMCB3YXMgc3VwcG9ydGVkIGluIHBhcnQgYnkgdGhlCklEQSBDZW50ZXIgZm9yIENvbXB1dGluZyBTY2llbmNlcy4KCiAgIFRoZSBkZXZlbG9wbWVudCBvZiBHTVAgNC4zLCA1LjAsIGFuZCA1LjEgd2FzIHN1cHBvcnRlZCBpbiBwYXJ0IGJ5CnRoZSBTd2VkaXNoIEZvdW5kYXRpb24gZm9yIFN0cmF0ZWdpYyBSZXNlYXJjaC4KCiAgIFRoYW5rcyBnbyB0byBIYW5zIFRob3JzZW4gZm9yIGRvbmF0aW5nIGFuIFNHSSBzeXN0ZW0gZm9yIHRoZSBHTVAKdGVzdCBzeXN0ZW0gZW52aXJvbm1lbnQuCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogUmVmZXJlbmNlcywgIE5leHQ6IEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgIFByZXY6IENvbnRyaWJ1dG9ycywgIFVwOiBUb3AKCkFwcGVuZGl4IEIgUmVmZXJlbmNlcwoqKioqKioqKioqKioqKioqKioqKioKCkIuMSBCb29rcwo9PT09PT09PT0KCiAgICogSm9uYXRoYW4gTS4gQm9yd2VpbiBhbmQgUGV0ZXIgQi4gQm9yd2VpbiwgIlBpIGFuZCB0aGUgQUdNOiBBIFN0dWR5CiAgICAgaW4gQW5hbHl0aWMgTnVtYmVyIFRoZW9yeSBhbmQgQ29tcHV0YXRpb25hbCBDb21wbGV4aXR5IiwgV2lsZXksCiAgICAgMTk5OC4KCiAgICogUmljaGFyZCBDcmFuZGFsbCBhbmQgQ2FybCBQb21lcmFuY2UsICJQcmltZSBOdW1iZXJzOiBBCiAgICAgQ29tcHV0YXRpb25hbCBQZXJzcGVjdGl2ZSIsIDJuZCBlZGl0aW9uLCBTcHJpbmdlci1WZXJsYWcsIDIwMDUuCiAgICAgYGh0dHA6Ly93d3cubWF0aC5kYXJ0bW91dGguZWR1L35jYXJscC8nCgogICAqIEhlbnJpIENvaGVuLCAiQSBDb3Vyc2UgaW4gQ29tcHV0YXRpb25hbCBBbGdlYnJhaWMgTnVtYmVyIFRoZW9yeSIsCiAgICAgR3JhZHVhdGUgVGV4dHMgaW4gTWF0aGVtYXRpY3MgbnVtYmVyIDEzOCwgU3ByaW5nZXItVmVybGFnLCAxOTkzLgogICAgIGBodHRwOi8vd3d3Lm1hdGgudS1ib3JkZWF1eC5mci9+Y29oZW4vJwoKICAgKiBEb25hbGQgRS4gS251dGgsICJUaGUgQXJ0IG9mIENvbXB1dGVyIFByb2dyYW1taW5nIiwgdm9sdW1lIDIsCiAgICAgIlNlbWludW1lcmljYWwgQWxnb3JpdGhtcyIsIDNyZCBlZGl0aW9uLCBBZGRpc29uLVdlc2xleSwgMTk5OC4KICAgICBgaHR0cDovL3d3dy1jcy1mYWN1bHR5LnN0YW5mb3JkLmVkdS9+a251dGgvdGFvY3AuaHRtbCcKCiAgICogSm9obiBELiBMaXBzb24sICJFbGVtZW50cyBvZiBBbGdlYnJhIGFuZCBBbGdlYnJhaWMgQ29tcHV0aW5nIiwgVGhlCiAgICAgQmVuamFtaW4gQ3VtbWluZ3MgUHVibGlzaGluZyBDb21wYW55IEluYywgMTk4MS4KCiAgICogQWxmcmVkIEouIE1lbmV6ZXMsIFBhdWwgQy4gdmFuIE9vcnNjaG90IGFuZCBTY290dCBBLiBWYW5zdG9uZSwKICAgICAiSGFuZGJvb2sgb2YgQXBwbGllZCBDcnlwdG9ncmFwaHkiLAogICAgIGBodHRwOi8vd3d3LmNhY3IubWF0aC51d2F0ZXJsb28uY2EvaGFjLycKCiAgICogUmljaGFyZCBNLiBTdGFsbG1hbiBhbmQgdGhlIEdDQyBEZXZlbG9wZXIgQ29tbXVuaXR5LCAiVXNpbmcgdGhlCiAgICAgR05VIENvbXBpbGVyIENvbGxlY3Rpb24iLCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDIwMDgsCiAgICAgYXZhaWxhYmxlIG9ubGluZSBgaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzLycsIGFuZCBpbiB0aGUgR0NDCiAgICAgcGFja2FnZSBgaHR0cHM6Ly9mdHAuZ251Lm9yZy9nbnUvZ2NjLycKCkIuMiBQYXBlcnMKPT09PT09PT09PQoKICAgKiBZdmVzIEJlcnRvdCwgTmljb2xhcyBNYWdhdWQgYW5kIFBhdWwgWmltbWVybWFubiwgIkEgUHJvb2Ygb2YgR01QCiAgICAgU3F1YXJlIFJvb3QiLCBKb3VybmFsIG9mIEF1dG9tYXRlZCBSZWFzb25pbmcsIHZvbHVtZSAyOSwgMjAwMiwgcHAuCiAgICAgMjI1LTI1Mi4gIEFsc28gYXZhaWxhYmxlIG9ubGluZSBhcyBJTlJJQSBSZXNlYXJjaCBSZXBvcnQgNDQ3NSwKICAgICBKdW5lIDIwMDIsIGBodHRwOi8vaGFsLmlucmlhLmZyL2RvY3MvMDAvMDcvMjEvMTMvUERGL1JSLTQ0NzUucGRmJwoKICAgKiBDaHJpc3RvcGggQnVybmlrZWwgYW5kIEpvYWNoaW0gWmllZ2xlciwgIkZhc3QgUmVjdXJzaXZlIERpdmlzaW9uIiwKICAgICBNYXgtUGxhbmNrLUluc3RpdHV0IGZ1ZXIgSW5mb3JtYXRpayBSZXNlYXJjaCBSZXBvcnQgTVBJLUktOTgtMS0wMjIsCiAgICAgYGh0dHA6Ly9kYXRhLm1waS1zYi5tcGcuZGUvaW50ZXJuZXQvcmVwb3J0cy5uc2YvTnVtYmVyVmlldy8xOTk4LTEtMDIyJwoKICAgKiBUb3JiavZybiBHcmFubHVuZCBhbmQgUGV0ZXIgTC4gTW9udGdvbWVyeSwgIkRpdmlzaW9uIGJ5IEludmFyaWFudAogICAgIEludGVnZXJzIHVzaW5nIE11bHRpcGxpY2F0aW9uIiwgaW4gUHJvY2VlZGluZ3Mgb2YgdGhlIFNJR1BMQU4KICAgICBQTERJJzk0IENvbmZlcmVuY2UsIEp1bmUgMTk5NC4gIEFsc28gYXZhaWxhYmxlCiAgICAgYGh0dHBzOi8vZ21wbGliLm9yZy9+dGVnZS9kaXZjbnN0LXBsZGk5NC5wZGYnLgoKICAgKiBOaWVscyBN9mxsZXIgYW5kIFRvcmJq9nJuIEdyYW5sdW5kLCAiSW1wcm92ZWQgZGl2aXNpb24gYnkgaW52YXJpYW50CiAgICAgaW50ZWdlcnMiLCBJRUVFIFRyYW5zYWN0aW9ucyBvbiBDb21wdXRlcnMsIDExIEp1bmUgMjAxMC4KICAgICBgaHR0cHM6Ly9nbXBsaWIub3JnL350ZWdlL2RpdmlzaW9uLXBhcGVyLnBkZicKCiAgICogVG9yYmr2cm4gR3Jhbmx1bmQgYW5kIE5pZWxzIE32bGxlciwgIkRpdmlzaW9uIG9mIGludGVnZXJzIGxhcmdlIGFuZAogICAgIHNtYWxsIiwgdG8gYXBwZWFyLgoKICAgKiBUdWRvciBKZWJlbGVhbiwgIkFuIGFsZ29yaXRobSBmb3IgZXhhY3QgZGl2aXNpb24iLCBKb3VybmFsIG9mCiAgICAgU3ltYm9saWMgQ29tcHV0YXRpb24sIHZvbHVtZSAxNSwgMTk5MywgcHAuIDE2OS0xODAuICBSZXNlYXJjaAogICAgIHJlcG9ydCB2ZXJzaW9uIGF2YWlsYWJsZQogICAgIGBmdHA6Ly9mdHAucmlzYy51bmktbGluei5hYy5hdC9wdWIvdGVjaHJlcG9ydHMvMTk5Mi85Mi0zNS5wcy5neicKCiAgICogVHVkb3IgSmViZWxlYW4sICJFeGFjdCBEaXZpc2lvbiB3aXRoIEthcmF0c3ViYSBDb21wbGV4aXR5IC0KICAgICBFeHRlbmRlZCBBYnN0cmFjdCIsIFJJU0MtTGlueiB0ZWNobmljYWwgcmVwb3J0IDk2LTMxLAogICAgIGBmdHA6Ly9mdHAucmlzYy51bmktbGluei5hYy5hdC9wdWIvdGVjaHJlcG9ydHMvMTk5Ni85Ni0zMS5wcy5neicKCiAgICogVHVkb3IgSmViZWxlYW4sICJQcmFjdGljYWwgSW50ZWdlciBEaXZpc2lvbiB3aXRoIEthcmF0c3ViYQogICAgIENvbXBsZXhpdHkiLCBJU1NBQyA5NywgcHAuIDMzOS0zNDEuICBUZWNobmljYWwgcmVwb3J0IGF2YWlsYWJsZQogICAgIGBmdHA6Ly9mdHAucmlzYy51bmktbGluei5hYy5hdC9wdWIvdGVjaHJlcG9ydHMvMTk5Ni85Ni0yOS5wcy5neicKCiAgICogVHVkb3IgSmViZWxlYW4sICJBIEdlbmVyYWxpemF0aW9uIG9mIHRoZSBCaW5hcnkgR0NEIEFsZ29yaXRobSIsCiAgICAgSVNTQUMgOTMsIHBwLiAxMTEtMTE2LiAgVGVjaG5pY2FsIHJlcG9ydCB2ZXJzaW9uIGF2YWlsYWJsZQogICAgIGBmdHA6Ly9mdHAucmlzYy51bmktbGluei5hYy5hdC9wdWIvdGVjaHJlcG9ydHMvMTk5My85My0wMS5wcy5neicKCiAgICogVHVkb3IgSmViZWxlYW4sICJBIERvdWJsZS1EaWdpdCBMZWhtZXItRXVjbGlkIEFsZ29yaXRobSBmb3IKICAgICBGaW5kaW5nIHRoZSBHQ0Qgb2YgTG9uZyBJbnRlZ2VycyIsIEpvdXJuYWwgb2YgU3ltYm9saWMKICAgICBDb21wdXRhdGlvbiwgdm9sdW1lIDE5LCAxOTk1LCBwcC4gMTQ1LTE1Ny4gIFRlY2huaWNhbCByZXBvcnQKICAgICB2ZXJzaW9uIGFsc28gYXZhaWxhYmxlCiAgICAgYGZ0cDovL2Z0cC5yaXNjLnVuaS1saW56LmFjLmF0L3B1Yi90ZWNocmVwb3J0cy8xOTkyLzkyLTY5LnBzLmd6JwoKICAgKiBXZXJuZXIgS3JhbmRpY2sgYW5kIFR1ZG9yIEplYmVsZWFuLCAiQmlkaXJlY3Rpb25hbCBFeGFjdCBJbnRlZ2VyCiAgICAgRGl2aXNpb24iLCBKb3VybmFsIG9mIFN5bWJvbGljIENvbXB1dGF0aW9uLCB2b2x1bWUgMjEsIDE5OTYsIHBwLgogICAgIDQ0MS00NTUuICBFYXJseSB0ZWNobmljYWwgcmVwb3J0IHZlcnNpb24gYWxzbyBhdmFpbGFibGUKICAgICBgZnRwOi8vZnRwLnJpc2MudW5pLWxpbnouYWMuYXQvcHViL3RlY2hyZXBvcnRzLzE5OTQvOTQtNTAucHMuZ3onCgogICAqIE1ha290byBNYXRzdW1vdG8gYW5kIFRha3VqaSBOaXNoaW11cmEsICJNZXJzZW5uZSBUd2lzdGVyOiBBCiAgICAgNjIzLWRpbWVuc2lvbmFsbHkgZXF1aWRpc3RyaWJ1dGVkIHVuaWZvcm0gcHNldWRvcmFuZG9tIG51bWJlcgogICAgIGdlbmVyYXRvciIsIEFDTSBUcmFuc2FjdGlvbnMgb24gTW9kZWxsaW5nIGFuZCBDb21wdXRlciBTaW11bGF0aW9uLAogICAgIHZvbHVtZSA4LCBKYW51YXJ5IDE5OTgsIHBwLiAzLTMwLiAgQXZhaWxhYmxlIG9ubGluZQogICAgIGBodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9BUlRJQ0xFUy9tdC5wcy5neicKICAgICAob3IgLnBkZikKCiAgICogUi4gTW9lbmNrIGFuZCBBLiBCb3JvZGluLCAiRmFzdCBNb2R1bGFyIFRyYW5zZm9ybXMgdmlhIERpdmlzaW9uIiwKICAgICBQcm9jZWVkaW5ncyBvZiB0aGUgMTN0aCBBbm51YWwgSUVFRSBTeW1wb3NpdW0gb24gU3dpdGNoaW5nIGFuZAogICAgIEF1dG9tYXRhIFRoZW9yeSwgT2N0b2JlciAxOTcyLCBwcC4gOTAtOTYuICBSZXByaW50ZWQgYXMgIkZhc3QKICAgICBNb2R1bGFyIFRyYW5zZm9ybXMiLCBKb3VybmFsIG9mIENvbXB1dGVyIGFuZCBTeXN0ZW0gU2NpZW5jZXMsCiAgICAgdm9sdW1lIDgsIG51bWJlciAzLCBKdW5lIDE5NzQsIHBwLiAzNjYtMzg2LgoKICAgKiBOaWVscyBN9mxsZXIsICJPbiBTY2j2bmhhZ2UncyBhbGdvcml0aG0gYW5kIHN1YnF1YWRyYXRpYyBpbnRlZ2VyCiAgICAgR0NEICAgY29tcHV0YXRpb24iLCBpbiBNYXRoZW1hdGljcyBvZiBDb21wdXRhdGlvbiwgdm9sdW1lIDc3LAogICAgIEphbnVhcnkgMjAwOCwgcHAuICAgIDU4OS02MDcuCgogICAqIFBldGVyIEwuIE1vbnRnb21lcnksICJNb2R1bGFyIE11bHRpcGxpY2F0aW9uIFdpdGhvdXQgVHJpYWwKICAgICBEaXZpc2lvbiIsIGluIE1hdGhlbWF0aWNzIG9mIENvbXB1dGF0aW9uLCB2b2x1bWUgNDQsIG51bWJlciAxNzAsCiAgICAgQXByaWwgMTk4NS4KCiAgICogQXJub2xkIFNjaPZuaGFnZSBhbmQgVm9sa2VyIFN0cmFzc2VuLCAiU2NobmVsbGUgTXVsdGlwbGlrYXRpb24KICAgICBncm9zc2VyIFphaGxlbiIsIENvbXB1dGluZyA3LCAxOTcxLCBwcC4gMjgxLTI5Mi4KCiAgICogS2VubmV0aCBXZWJlciwgIlRoZSBhY2NlbGVyYXRlZCBpbnRlZ2VyIEdDRCBhbGdvcml0aG0iLCBBQ00KICAgICBUcmFuc2FjdGlvbnMgb24gTWF0aGVtYXRpY2FsIFNvZnR3YXJlLCB2b2x1bWUgMjEsIG51bWJlciAxLCBNYXJjaAogICAgIDE5OTUsIHBwLiAxMTEtMTIyLgoKICAgKiBQYXVsIFppbW1lcm1hbm4sICJLYXJhdHN1YmEgU3F1YXJlIFJvb3QiLCBJTlJJQSBSZXNlYXJjaCBSZXBvcnQKICAgICAzODA1LCBOb3ZlbWJlciAxOTk5LAogICAgIGBodHRwOi8vaGFsLmlucmlhLmZyL2lucmlhLTAwMDcyODU0L1BERi9SUi0zODA1LnBkZicKCiAgICogUGF1bCBaaW1tZXJtYW5uLCAiQSBQcm9vZiBvZiBHTVAgRmFzdCBEaXZpc2lvbiBhbmQgU3F1YXJlIFJvb3QKICAgICBJbXBsZW1lbnRhdGlvbnMiLAogICAgIGBodHRwOi8vd3d3LmxvcmlhLmZyL356aW1tZXJtYS9wYXBlcnMvcHJvb2YtZGl2LXNxcnQucHMuZ3onCgogICAqIERhbiBadXJhcywgIk9uIFNxdWFyaW5nIGFuZCBNdWx0aXBseWluZyBMYXJnZSBJbnRlZ2VycyIsIEFSSVRILTExOgogICAgIElFRUUgU3ltcG9zaXVtIG9uIENvbXB1dGVyIEFyaXRobWV0aWMsIDE5OTMsIHBwLiAyNjAgdG8gMjcxLgogICAgIFJlcHJpbnRlZCBhcyAiTW9yZSBvbiBNdWx0aXBseWluZyBhbmQgU3F1YXJpbmcgTGFyZ2UgSW50ZWdlcnMiLAogICAgIElFRUUgVHJhbnNhY3Rpb25zIG9uIENvbXB1dGVycywgdm9sdW1lIDQzLCBudW1iZXIgOCwgQXVndXN0IDE5OTQsCiAgICAgcHAuIDg5OS05MDguCgofCkZpbGU6IGdtcC5pbmZvLCAgTm9kZTogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCAgTmV4dDogQ29uY2VwdCBJbmRleCwgIFByZXY6IFJlZmVyZW5jZXMsICBVcDogVG9wCgpBcHBlbmRpeCBDIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjMsIDMgTm92ZW1iZXIgMjAwOAoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgICBgaHR0cDovL2ZzZi5vcmcvJwoKICAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKICAgICBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgMC4gUFJFQU1CTEUKCiAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgogICAgIGZ1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCAiZnJlZSIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvCiAgICAgYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsCiAgICAgd2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvcgogICAgIG5vbmNvbW1lcmNpYWxseS4gIFNlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUKICAgICBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheSB0byBnZXQgY3JlZGl0IGZvciB0aGVpciB3b3JrLCB3aGlsZSBub3QKICAgICBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlIGZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgoKICAgICBUaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mICJjb3B5bGVmdCIsIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQogICAgIHdvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4KICAgICBJdCBjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKICAgICBsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgoKICAgICBXZSBoYXZlIGRlc2lnbmVkIHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byB1c2UgaXQgZm9yIG1hbnVhbHMgZm9yCiAgICAgZnJlZSBzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYQogICAgIGZyZWUgcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zCiAgICAgdGhhdCB0aGUgc29mdHdhcmUgZG9lcy4gIEJ1dCB0aGlzIExpY2Vuc2UgaXMgbm90IGxpbWl0ZWQgdG8KICAgICBzb2Z0d2FyZSBtYW51YWxzOyBpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcwogICAgIG9mIHN1YmplY3QgbWF0dGVyIG9yIHdoZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLgogICAgIFdlIHJlY29tbWVuZCB0aGlzIExpY2Vuc2UgcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMKICAgICBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuCgogIDEuIEFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TCgogICAgIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwKICAgICB0aGF0IGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQKICAgICBjYW4gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1Y2ggYSBub3RpY2UKICAgICBncmFudHMgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLAogICAgIHRvIHVzZSB0aGF0IHdvcmsgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGhlcmVpbi4gIFRoZQogICAgICJEb2N1bWVudCIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyCiAgICAgb2YgdGhlIHB1YmxpYyBpcyBhIGxpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgWW91CiAgICAgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdSBjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgd29yayBpbiBhCiAgICAgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uIHVuZGVyIGNvcHlyaWdodCBsYXcuCgogICAgIEEgIk1vZGlmaWVkIFZlcnNpb24iIG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQogICAgIERvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aAogICAgIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgoKICAgICBBICJTZWNvbmRhcnkgU2VjdGlvbiIgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uCiAgICAgb2YgdGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQogICAgIHB1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbAogICAgIHN1YmplY3QgKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZAogICAgIGZhbGwgZGlyZWN0bHkgd2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudAogICAgIGlzIGluIHBhcnQgYSB0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90CiAgICAgZXhwbGFpbiBhbnkgbWF0aGVtYXRpY3MuKSAgVGhlIHJlbGF0aW9uc2hpcCBjb3VsZCBiZSBhIG1hdHRlciBvZgogICAgIGhpc3RvcmljYWwgY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvcgogICAgIG9mIGxlZ2FsLCBjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbgogICAgIHJlZ2FyZGluZyB0aGVtLgoKICAgICBUaGUgIkludmFyaWFudCBTZWN0aW9ucyIgYXJlIGNlcnRhaW4gU2Vjb25kYXJ5IFNlY3Rpb25zIHdob3NlCiAgICAgdGl0bGVzIGFyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluCiAgICAgdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcwogICAgIExpY2Vuc2UuICBJZiBhIHNlY3Rpb24gZG9lcyBub3QgZml0IHRoZSBhYm92ZSBkZWZpbml0aW9uIG9mCiAgICAgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90IGFsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuCiAgICAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8gSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50CiAgICAgZG9lcyBub3QgaWRlbnRpZnkgYW55IEludmFyaWFudCBTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgoKICAgICBUaGUgIkNvdmVyIFRleHRzIiBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlCiAgICAgbGlzdGVkLCBhcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlCiAgICAgdGhhdCBzYXlzIHRoYXQgdGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEKICAgICBGcm9udC1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDUgd29yZHMsIGFuZCBhIEJhY2stQ292ZXIgVGV4dCBtYXkKICAgICBiZSBhdCBtb3N0IDI1IHdvcmRzLgoKICAgICBBICJUcmFuc3BhcmVudCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksCiAgICAgcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCiAgICAgZ2VuZXJhbCBwdWJsaWMsIHRoYXQgaXMgc3VpdGFibGUgZm9yIHJldmlzaW5nIHRoZSBkb2N1bWVudAogICAgIHN0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMKICAgICBjb21wb3NlZCBvZiBwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZQogICAgIHdpZGVseSBhdmFpbGFibGUgZHJhd2luZyBlZGl0b3IsIGFuZCB0aGF0IGlzIHN1aXRhYmxlIGZvciBpbnB1dCB0bwogICAgIHRleHQgZm9ybWF0dGVycyBvciBmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZgogICAgIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycy4gIEEgY29weSBtYWRlIGluIGFuCiAgICAgb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUgZm9ybWF0IHdob3NlIG1hcmt1cCwgb3IgYWJzZW5jZSBvZgogICAgIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0IG9yIGRpc2NvdXJhZ2Ugc3Vic2VxdWVudAogICAgIG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4gIEFuIGltYWdlIGZvcm1hdCBpcwogICAgIG5vdCBUcmFuc3BhcmVudCBpZiB1c2VkIGZvciBhbnkgc3Vic3RhbnRpYWwgYW1vdW50IG9mIHRleHQuICBBCiAgICAgY29weSB0aGF0IGlzIG5vdCAiVHJhbnNwYXJlbnQiIGlzIGNhbGxlZCAiT3BhcXVlIi4KCiAgICAgRXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4KICAgICBBU0NJSSB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwKICAgICBTR01MIG9yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZAogICAgIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlIEhUTUwsIFBvc3RTY3JpcHQgb3IgUERGIGRlc2lnbmVkIGZvcgogICAgIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzIG9mIHRyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZQogICAgIFBORywgWENGIGFuZCBKUEcuICBPcGFxdWUgZm9ybWF0cyBpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdAogICAgIGNhbiBiZSByZWFkIGFuZCBlZGl0ZWQgb25seSBieSBwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIFNHTUwgb3IKICAgICBYTUwgZm9yIHdoaWNoIHRoZSBEVEQgYW5kL29yIHByb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkKICAgICBhdmFpbGFibGUsIGFuZCB0aGUgbWFjaGluZS1nZW5lcmF0ZWQgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYKICAgICBwcm9kdWNlZCBieSBzb21lIHdvcmQgcHJvY2Vzc29ycyBmb3Igb3V0cHV0IHB1cnBvc2VzIG9ubHkuCgogICAgIFRoZSAiVGl0bGUgUGFnZSIgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLAogICAgIHBsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUKICAgICBtYXRlcmlhbCB0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yCiAgICAgd29ya3MgaW4gZm9ybWF0cyB3aGljaCBkbyBub3QgaGF2ZSBhbnkgdGl0bGUgcGFnZSBhcyBzdWNoLCAiVGl0bGUKICAgICBQYWdlIiBtZWFucyB0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZQogICAgIHdvcmsncyB0aXRsZSwgcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCgogICAgIFRoZSAicHVibGlzaGVyIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIGNvcGllcwogICAgIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgcHVibGljLgoKICAgICBBIHNlY3Rpb24gIkVudGl0bGVkIFhZWiIgbWVhbnMgYSBuYW1lZCBzdWJ1bml0IG9mIHRoZSBEb2N1bWVudAogICAgIHdob3NlIHRpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcwogICAgIGZvbGxvd2luZyB0ZXh0IHRoYXQgdHJhbnNsYXRlcyBYWVogaW4gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlIFhZWgogICAgIHN0YW5kcyBmb3IgYSBzcGVjaWZpYyBzZWN0aW9uIG5hbWUgbWVudGlvbmVkIGJlbG93LCBzdWNoIGFzCiAgICAgIkFja25vd2xlZGdlbWVudHMiLCAiRGVkaWNhdGlvbnMiLCAiRW5kb3JzZW1lbnRzIiwgb3IgIkhpc3RvcnkiLikKICAgICBUbyAiUHJlc2VydmUgdGhlIFRpdGxlIiBvZiBzdWNoIGEgc2VjdGlvbiB3aGVuIHlvdSBtb2RpZnkgdGhlCiAgICAgRG9jdW1lbnQgbWVhbnMgdGhhdCBpdCByZW1haW5zIGEgc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBhY2NvcmRpbmcKICAgICB0byB0aGlzIGRlZmluaXRpb24uCgogICAgIFRoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2UKICAgICB3aGljaCBzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZQogICAgIFdhcnJhbnR5IERpc2NsYWltZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluY2x1ZGVkIGJ5IHJlZmVyZW5jZSBpbgogICAgIHRoaXMgTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKICAgICBpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kCiAgICAgaGFzIG5vIGVmZmVjdCBvbiB0aGUgbWVhbmluZyBvZiB0aGlzIExpY2Vuc2UuCgogIDIuIFZFUkJBVElNIENPUFlJTkcKCiAgICAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIKICAgICBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCiAgICAgY29weXJpZ2h0IG5vdGljZXMsIGFuZCB0aGUgbGljZW5zZSBub3RpY2Ugc2F5aW5nIHRoaXMgTGljZW5zZQogICAgIGFwcGxpZXMgdG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdQogICAgIGFkZCBubyBvdGhlciBjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91CiAgICAgbWF5IG5vdCB1c2UgdGVjaG5pY2FsIG1lYXN1cmVzIHRvIG9ic3RydWN0IG9yIGNvbnRyb2wgdGhlIHJlYWRpbmcKICAgICBvciBmdXJ0aGVyIGNvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAgSG93ZXZlciwKICAgICB5b3UgbWF5IGFjY2VwdCBjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdQogICAgIGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGNvcGllcyB5b3UgbXVzdCBhbHNvIGZvbGxvdwogICAgIHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KCiAgICAgWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwKICAgICBhbmQgeW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy4KCiAgMy4gQ09QWUlORyBJTiBRVUFOVElUWQoKICAgICBJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkKICAgICBoYXZlIHByaW50ZWQgY292ZXJzKSBvZiB0aGUgRG9jdW1lbnQsIG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCBhbmQKICAgICB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QKICAgICBlbmNsb3NlIHRoZSBjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbAogICAgIHRoZXNlIENvdmVyIFRleHRzOiBGcm9udC1Db3ZlciBUZXh0cyBvbiB0aGUgZnJvbnQgY292ZXIsIGFuZAogICAgIEJhY2stQ292ZXIgVGV4dHMgb24gdGhlIGJhY2sgY292ZXIuICBCb3RoIGNvdmVycyBtdXN0IGFsc28gY2xlYXJseQogICAgIGFuZCBsZWdpYmx5IGlkZW50aWZ5IHlvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZQogICAgIGZyb250IGNvdmVyIG11c3QgcHJlc2VudCB0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUKICAgICB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQgdmlzaWJsZS4gIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsCiAgICAgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4gIENvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlCiAgICAgY292ZXJzLCBhcyBsb25nIGFzIHRoZXkgcHJlc2VydmUgdGhlIHRpdGxlIG9mIHRoZSBEb2N1bWVudCBhbmQKICAgICBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkIGFzIHZlcmJhdGltIGNvcHlpbmcgaW4KICAgICBvdGhlciByZXNwZWN0cy4KCiAgICAgSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdAogICAgIGxlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKICAgICByZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250bwogICAgIGFkamFjZW50IHBhZ2VzLgoKICAgICBJZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50CiAgICAgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEKICAgICBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50IGNvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvcgogICAgIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weSBhIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbQogICAgIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcgcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQKICAgICB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMgYSBjb21wbGV0ZSBUcmFuc3BhcmVudAogICAgIGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLiAgSWYgeW91IHVzZSB0aGUKICAgICBsYXR0ZXIgb3B0aW9uLCB5b3UgbXVzdCB0YWtlIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywgd2hlbiB5b3UKICAgICBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlIHRoYXQKICAgICB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQKICAgICBsb2NhdGlvbiB1bnRpbCBhdCBsZWFzdCBvbmUgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdQogICAgIGRpc3RyaWJ1dGUgYW4gT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IKICAgICByZXRhaWxlcnMpIG9mIHRoYXQgZWRpdGlvbiB0byB0aGUgcHVibGljLgoKICAgICBJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YKICAgICB0aGUgRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZgogICAgIGNvcGllcywgdG8gZ2l2ZSB0aGVtIGEgY2hhbmNlIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZAogICAgIHZlcnNpb24gb2YgdGhlIERvY3VtZW50LgoKICA0LiBNT0RJRklDQVRJT05TCgogICAgIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50CiAgICAgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UKICAgICByZWxlYXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGgKICAgICB0aGUgTW9kaWZpZWQgVmVyc2lvbiBmaWxsaW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cwogICAgIGxpY2Vuc2luZyBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0bwogICAgIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weSBvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZQogICAgIHRoaW5ncyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbjoKCiAgICAgICBBLiBVc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUKICAgICAgICAgIGRpc3RpbmN0IGZyb20gdGhhdCBvZiB0aGUgRG9jdW1lbnQsIGFuZCBmcm9tIHRob3NlIG9mCiAgICAgICAgICBwcmV2aW91cyB2ZXJzaW9ucyAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkCiAgICAgICAgICBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uIG9mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUKICAgICAgICAgIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YKICAgICAgICAgIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgoKICAgICAgIEIuIExpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IKICAgICAgICAgIGVudGl0aWVzIHJlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluCiAgICAgICAgICB0aGUgTW9kaWZpZWQgVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZQogICAgICAgICAgcHJpbmNpcGFsIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbAogICAgICAgICAgYXV0aG9ycywgaWYgaXQgaGFzIGZld2VyIHRoYW4gZml2ZSksIHVubGVzcyB0aGV5IHJlbGVhc2UgeW91CiAgICAgICAgICBmcm9tIHRoaXMgcmVxdWlyZW1lbnQuCgogICAgICAgQy4gU3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUKICAgICAgICAgIE1vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCgogICAgICAgRC4gUHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgRG9jdW1lbnQuCgogICAgICAgRS4gQWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9yIHlvdXIgbW9kaWZpY2F0aW9ucwogICAgICAgICAgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgoKICAgICAgIEYuIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlCiAgICAgICAgICBub3RpY2UgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkCiAgICAgICAgICBWZXJzaW9uIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluCiAgICAgICAgICB0aGUgQWRkZW5kdW0gYmVsb3cuCgogICAgICAgRy4gUHJlc2VydmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQKICAgICAgICAgIFNlY3Rpb25zIGFuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQncwogICAgICAgICAgbGljZW5zZSBub3RpY2UuCgogICAgICAgSC4gSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCgogICAgICAgSS4gUHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiLCBQcmVzZXJ2ZSBpdHMgVGl0bGUsCiAgICAgICAgICBhbmQgYWRkIHRvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldwogICAgICAgICAgYXV0aG9ycywgYW5kIHB1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbgogICAgICAgICAgdGhlIFRpdGxlIFBhZ2UuICBJZiB0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiBpbgogICAgICAgICAgdGhlIERvY3VtZW50LCBjcmVhdGUgb25lIHN0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLAogICAgICAgICAgYW5kIHB1Ymxpc2hlciBvZiB0aGUgRG9jdW1lbnQgYXMgZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsCiAgICAgICAgICB0aGVuIGFkZCBhbiBpdGVtIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgc3RhdGVkIGluCiAgICAgICAgICB0aGUgcHJldmlvdXMgc2VudGVuY2UuCgogICAgICAgSi4gUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50CiAgICAgICAgICBmb3IgcHVibGljIGFjY2VzcyB0byBhIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBhbmQKICAgICAgICAgIGxpa2V3aXNlIHRoZSBuZXR3b3JrIGxvY2F0aW9ucyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCiAgICAgICAgICBwcmV2aW91cyB2ZXJzaW9ucyBpdCB3YXMgYmFzZWQgb24uICBUaGVzZSBtYXkgYmUgcGxhY2VkIGluCiAgICAgICAgICB0aGUgIkhpc3RvcnkiIHNlY3Rpb24uICBZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBhCiAgICAgICAgICB3b3JrIHRoYXQgd2FzIHB1Ymxpc2hlZCBhdCBsZWFzdCBmb3VyIHllYXJzIGJlZm9yZSB0aGUKICAgICAgICAgIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbgogICAgICAgICAgaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uCgogICAgICAgSy4gRm9yIGFueSBzZWN0aW9uIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiBvciAiRGVkaWNhdGlvbnMiLAogICAgICAgICAgUHJlc2VydmUgdGhlIFRpdGxlIG9mIHRoZSBzZWN0aW9uLCBhbmQgcHJlc2VydmUgaW4gdGhlCiAgICAgICAgICBzZWN0aW9uIGFsbCB0aGUgc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yCiAgICAgICAgICBhY2tub3dsZWRnZW1lbnRzIGFuZC9vciBkZWRpY2F0aW9ucyBnaXZlbiB0aGVyZWluLgoKICAgICAgIEwuIFByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwKICAgICAgICAgIHVuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKICAgICAgICAgIG9yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uCiAgICAgICAgICB0aXRsZXMuCgogICAgICAgTS4gRGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLiAgU3VjaCBhIHNlY3Rpb24KICAgICAgICAgIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCgogICAgICAgTi4gRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQKICAgICAgICAgICJFbmRvcnNlbWVudHMiIG9yIHRvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudAogICAgICAgICAgU2VjdGlvbi4KCiAgICAgICBPLiBQcmVzZXJ2ZSBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMuCgogICAgIElmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKICAgICBhcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8KICAgICBtYXRlcmlhbCBjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KICAgICBkZXNpZ25hdGUgc29tZSBvciBhbGwgb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywKICAgICBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZSBsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQKICAgICBWZXJzaW9uJ3MgbGljZW5zZSBub3RpY2UuICBUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueQogICAgIG90aGVyIHNlY3Rpb24gdGl0bGVzLgoKICAgICBZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIsIHByb3ZpZGVkIGl0IGNvbnRhaW5zCiAgICAgbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCiAgICAgcGFydGllcy0tZm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dAogICAgIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZQogICAgIGRlZmluaXRpb24gb2YgYSBzdGFuZGFyZC4KCiAgICAgWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LAogICAgIGFuZCBhIHBhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQKICAgICBvZiB0aGUgbGlzdCBvZiBDb3ZlciBUZXh0cyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4gIE9ubHkgb25lCiAgICAgcGFzc2FnZSBvZiBGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZQogICAgIGFkZGVkIGJ5IChvciB0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZQogICAgIERvY3VtZW50IGFscmVhZHkgaW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwKICAgICBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvciBieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eQogICAgIHlvdSBhcmUgYWN0aW5nIG9uIGJlaGFsZiBvZiwgeW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5CiAgICAgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQgcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cwogICAgIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgoKICAgICBUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzCiAgICAgTGljZW5zZSBnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvCiAgICAgYXNzZXJ0IG9yIGltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgoKICA1LiBDT01CSU5JTkcgRE9DVU1FTlRTCgogICAgIFlvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIKICAgICB0aGlzIExpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IKICAgICBtb2RpZmllZCB2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24KICAgICBhbGwgb2YgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywKICAgICB1bm1vZGlmaWVkLCBhbmQgbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91cgogICAgIGNvbWJpbmVkIHdvcmsgaW4gaXRzIGxpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsCiAgICAgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuCgogICAgIFRoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCiAgICAgbXVsdGlwbGUgaWRlbnRpY2FsIEludmFyaWFudCBTZWN0aW9ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQogICAgIGNvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZQogICAgIGJ1dCBkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZQogICAgIGJ5IGFkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlCiAgICAgb3JpZ2luYWwgYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYQogICAgIHVuaXF1ZSBudW1iZXIuICBNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluCiAgICAgdGhlIGxpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUKICAgICBjb21iaW5lZCB3b3JrLgoKICAgICBJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkCiAgICAgIkhpc3RvcnkiIGluIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbgogICAgIEVudGl0bGVkICJIaXN0b3J5IjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQKICAgICAiQWNrbm93bGVkZ2VtZW50cyIsIGFuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkRlZGljYXRpb25zIi4gIFlvdQogICAgIG11c3QgZGVsZXRlIGFsbCBzZWN0aW9ucyBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzLiIKCiAgNi4gQ09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCgogICAgIFlvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyCiAgICAgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHJlcGxhY2UgdGhlIGluZGl2aWR1YWwKICAgICBjb3BpZXMgb2YgdGhpcyBMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkKICAgICB0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlCiAgICAgcnVsZXMgb2YgdGhpcyBMaWNlbnNlIGZvciB2ZXJiYXRpbSBjb3B5aW5nIG9mIGVhY2ggb2YgdGhlCiAgICAgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KCiAgICAgWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZAogICAgIGRpc3RyaWJ1dGUgaXQgaW5kaXZpZHVhbGx5IHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgeW91IGluc2VydAogICAgIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93CiAgICAgdGhpcyBMaWNlbnNlIGluIGFsbCBvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZgogICAgIHRoYXQgZG9jdW1lbnQuCgogIDcuIEFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKCiAgICAgQSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIKICAgICBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgZG9jdW1lbnRzIG9yIHdvcmtzLCBpbiBvciBvbiBhIHZvbHVtZSBvZgogICAgIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gImFnZ3JlZ2F0ZSIgaWYgdGhlCiAgICAgY29weXJpZ2h0IHJlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUKICAgICBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwKICAgICB3b3JrcyBwZXJtaXQuICBXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMKICAgICBMaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBvdGhlciB3b3JrcyBpbiB0aGUgYWdncmVnYXRlIHdoaWNoCiAgICAgYXJlIG5vdCB0aGVtc2VsdmVzIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgoKICAgICBJZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQogICAgIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgaGFsZgogICAgIG9mIHRoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnQncyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkCiAgICAgb24gY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQogICAgIGVsZWN0cm9uaWMgZXF1aXZhbGVudCBvZiBjb3ZlcnMgaWYgdGhlIERvY3VtZW50IGlzIGluIGVsZWN0cm9uaWMKICAgICBmb3JtLiAgT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0CiAgICAgdGhlIHdob2xlIGFnZ3JlZ2F0ZS4KCiAgOC4gVFJBTlNMQVRJT04KCiAgICAgVHJhbnNsYXRpb24gaXMgY29uc2lkZXJlZCBhIGtpbmQgb2YgbW9kaWZpY2F0aW9uLCBzbyB5b3UgbWF5CiAgICAgZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uCiAgICAgNC4gIFJlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAogICAgIHBlcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZQogICAgIHRyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCiAgICAgb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKICAgICB0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUKICAgICBEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbwogICAgIGluY2x1ZGUgdGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoZQogICAgIG9yaWdpbmFsIHZlcnNpb25zIG9mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiAgSW4gY2FzZSBvZiBhCiAgICAgZGlzYWdyZWVtZW50IGJldHdlZW4gdGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZgogICAgIHRoaXMgTGljZW5zZSBvciBhIG5vdGljZSBvciBkaXNjbGFpbWVyLCB0aGUgb3JpZ2luYWwgdmVyc2lvbiB3aWxsCiAgICAgcHJldmFpbC4KCiAgICAgSWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCiAgICAgIkRlZGljYXRpb25zIiwgb3IgIkhpc3RvcnkiLCB0aGUgcmVxdWlyZW1lbnQgKHNlY3Rpb24gNCkgdG8KICAgICBQcmVzZXJ2ZSBpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUKICAgICBhY3R1YWwgdGl0bGUuCgogIDkuIFRFUk1JTkFUSU9OCgogICAgIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQKICAgICBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CiAgICAgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSBpdCBpcyB2b2lkLAogICAgIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KCiAgICAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKICAgICBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkKICAgICBwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkKICAgICBhbmQgZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlCiAgICAgY29weXJpZ2h0IGhvbGRlciBmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZQogICAgIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICAgICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKICAgICByZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKICAgICB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCiAgICAgcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbQogICAgIHRoYXQgY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cwogICAgIGFmdGVyIHlvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgoKICAgICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlCiAgICAgdGhlIGxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tCiAgICAgeW91IHVuZGVyIHRoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZAogICAgIG5vdCBwZXJtYW5lbnRseSByZWluc3RhdGVkLCByZWNlaXB0IG9mIGEgY29weSBvZiBzb21lIG9yIGFsbCBvZgogICAgIHRoZSBzYW1lIG1hdGVyaWFsIGRvZXMgbm90IGdpdmUgeW91IGFueSByaWdodHMgdG8gdXNlIGl0LgoKIDEwLiBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQoKICAgICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucyBvZgogICAgIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldwogICAgIHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQogICAgIGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKICAgICBgaHR0cHM6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8nLgoKICAgICBFYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uCiAgICAgbnVtYmVyLiAgSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZAogICAgIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91CiAgICAgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mCiAgICAgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuCiAgICAgcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmCiAgICAgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2UsCiAgICAgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUKICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwcm94eQogICAgIGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdAogICAgIHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseQogICAgIGF1dGhvcml6ZXMgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZSBEb2N1bWVudC4KCiAxMS4gUkVMSUNFTlNJTkcKCiAgICAgIk1hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiBTaXRlIiAob3IgIk1NQyBTaXRlIikgbWVhbnMgYW55CiAgICAgV29ybGQgV2lkZSBXZWIgc2VydmVyIHRoYXQgcHVibGlzaGVzIGNvcHlyaWdodGFibGUgd29ya3MgYW5kIGFsc28KICAgICBwcm92aWRlcyBwcm9taW5lbnQgZmFjaWxpdGllcyBmb3IgYW55Ym9keSB0byBlZGl0IHRob3NlIHdvcmtzLiAgQQogICAgIHB1YmxpYyB3aWtpIHRoYXQgYW55Ym9keSBjYW4gZWRpdCBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBzZXJ2ZXIuCiAgICAgQSAiTWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uIiAob3IgIk1NQyIpIGNvbnRhaW5lZCBpbiB0aGUKICAgICBzaXRlIG1lYW5zIGFueSBzZXQgb2YgY29weXJpZ2h0YWJsZSB3b3JrcyB0aHVzIHB1Ymxpc2hlZCBvbiB0aGUgTU1DCiAgICAgc2l0ZS4KCiAgICAgIkNDLUJZLVNBIiBtZWFucyB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAzLjAKICAgICBsaWNlbnNlIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uLCBhIG5vdC1mb3ItcHJvZml0CiAgICAgY29ycG9yYXRpb24gd2l0aCBhIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBpbiBTYW4gRnJhbmNpc2NvLAogICAgIENhbGlmb3JuaWEsIGFzIHdlbGwgYXMgZnV0dXJlIGNvcHlsZWZ0IHZlcnNpb25zIG9mIHRoYXQgbGljZW5zZQogICAgIHB1Ymxpc2hlZCBieSB0aGF0IHNhbWUgb3JnYW5pemF0aW9uLgoKICAgICAiSW5jb3Jwb3JhdGUiIG1lYW5zIHRvIHB1Ymxpc2ggb3IgcmVwdWJsaXNoIGEgRG9jdW1lbnQsIGluIHdob2xlIG9yCiAgICAgaW4gcGFydCwgYXMgcGFydCBvZiBhbm90aGVyIERvY3VtZW50LgoKICAgICBBbiBNTUMgaXMgImVsaWdpYmxlIGZvciByZWxpY2Vuc2luZyIgaWYgaXQgaXMgbGljZW5zZWQgdW5kZXIgdGhpcwogICAgIExpY2Vuc2UsIGFuZCBpZiBhbGwgd29ya3MgdGhhdCB3ZXJlIGZpcnN0IHB1Ymxpc2hlZCB1bmRlciB0aGlzCiAgICAgTGljZW5zZSBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGlzIE1NQywgYW5kIHN1YnNlcXVlbnRseQogICAgIGluY29ycG9yYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0IGludG8gdGhlIE1NQywgKDEpIGhhZCBubyBjb3ZlcgogICAgIHRleHRzIG9yIGludmFyaWFudCBzZWN0aW9ucywgYW5kICgyKSB3ZXJlIHRodXMgaW5jb3Jwb3JhdGVkIHByaW9yCiAgICAgdG8gTm92ZW1iZXIgMSwgMjAwOC4KCiAgICAgVGhlIG9wZXJhdG9yIG9mIGFuIE1NQyBTaXRlIG1heSByZXB1Ymxpc2ggYW4gTU1DIGNvbnRhaW5lZCBpbiB0aGUKICAgICBzaXRlIHVuZGVyIENDLUJZLVNBIG9uIHRoZSBzYW1lIHNpdGUgYXQgYW55IHRpbWUgYmVmb3JlIEF1Z3VzdCAxLAogICAgIDIwMDksIHByb3ZpZGVkIHRoZSBNTUMgaXMgZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nLgoKCkFEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCnRoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlCm5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKCiAgICAgICBDb3B5cmlnaHQgKEMpICBZRUFSICBZT1VSIE5BTUUuCiAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKICAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMwogICAgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CiAgICAgICB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCBubyBCYWNrLUNvdmVyCiAgICAgICBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCBgYEdOVQogICAgICAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KCiAgIElmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIKVGV4dHMsIHJlcGxhY2UgdGhlICJ3aXRoLi4uVGV4dHMuIiBsaW5lIHdpdGggdGhpczoKCiAgICAgICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyBMSVNUIFRIRUlSIFRJVExFUywgd2l0aAogICAgICAgICB0aGUgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgTElTVCwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMKICAgICAgICAgYmVpbmcgTElTVC4KCiAgIElmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucyB3aXRob3V0IENvdmVyIFRleHRzLCBvciBzb21lIG90aGVyCmNvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZQpzaXR1YXRpb24uCgogICBJZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQpyZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCmZyZWUgc29mdHdhcmUgbGljZW5zZSwgc3VjaCBhcyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRvCnBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KCh8KRmlsZTogZ21wLmluZm8sICBOb2RlOiBDb25jZXB0IEluZGV4LCAgTmV4dDogRnVuY3Rpb24gSW5kZXgsICBQcmV2OiBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsICBVcDogVG9wCgpDb25jZXB0IEluZGV4CioqKioqKioqKioqKioKCgAIW2luZGV4AAhdCiogTWVudToKCiogI2luY2x1ZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVhZGVycyBhbmQgTGlicmFyaWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiAtLWJ1aWxkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAgNTIpCiogLS1kaXNhYmxlLWZmdDogICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgMzEzKQoqIC0tZGlzYWJsZS1zaGFyZWQ6ICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lICA0NSkKKiAtLWRpc2FibGUtc3RhdGljOiAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAgNDUpCiogLS1lbmFibGUtYWxsb2NhOiAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgMjc0KQoqIC0tZW5hYmxlLWFzc2VydDogICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDMxOSkKKiAtLWVuYWJsZS1jeHg6ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAyMjYpCiogLS1lbmFibGUtZmF0OiAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgMTYxKQoqIC0tZW5hYmxlLXByb2ZpbGluZyA8MT46ICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDMyMykKKiAtLWVuYWJsZS1wcm9maWxpbmc6ICAgICAgICAgICAgICAgICAgICBQcm9maWxpbmcuICAgICAgICAgICAobGluZSAgIDYpCiogLS1leGVjLXByZWZpeDogICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgIDMyKQoqIC0taG9zdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lICA2NikKKiAtLXByZWZpeDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAgMzIpCiogLWZpbnN0cnVtZW50LWZ1bmN0aW9uczogICAgICAgICAgICAgICAgUHJvZmlsaW5nLiAgICAgICAgICAgKGxpbmUgIDY2KQoqIDJleHAgZnVuY3Rpb25zOiAgICAgICAgICAgICAgICAgICAgICAgIEVmZmljaWVuY3kuICAgICAgICAgIChsaW5lICA0MykKKiA2ODAwMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NCkKKiA4MHg4NjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MCkKKiBBQkkgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAxNjgpCiogQUJJOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJJIGFuZCBJU0EuICAgICAgICAgKGxpbmUgICA2KQoqIEFib3V0IHRoaXMgbWFudWFsOiAgICAgICAgICAgICAgICAgICAgIEludHJvZHVjdGlvbiB0byBHTVAuIChsaW5lICA1NykKKiBBQ19DSEVDS19MSUI6ICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvY29uZi4gICAgICAgICAgICAobGluZSAgMTEpCiogQUlYIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDcpCiogQUlYOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJJIGFuZCBJU0EuICAgICAgICAgKGxpbmUgMTc4KQoqIEFsZ29yaXRobXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsZ29yaXRobXMuICAgICAgICAgIChsaW5lICAgNikKKiBhbGxvY2E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAyNzQpCiogQWxsb2NhdGlvbiBvZiBtZW1vcnk6ICAgICAgICAgICAgICAgICAgQ3VzdG9tIEFsbG9jYXRpb24uICAgKGxpbmUgICA2KQoqIEFNRDY0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFCSSBhbmQgSVNBLiAgICAgICAgIChsaW5lICA0NCkKKiBBbm9ueW1vdXMgRlRQIG9mIGxhdGVzdCB2ZXJzaW9uOiAgICAgICBJbnRyb2R1Y3Rpb24gdG8gR01QLiAobGluZSAgMzcpCiogQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZTogICAgICAgICAgQUJJIGFuZCBJU0EuICAgICAgICAgKGxpbmUgICA2KQoqIEFyaXRobWV0aWMgZnVuY3Rpb25zIDwxPjogICAgICAgICAgICAgIFJhdGlvbmFsIEFyaXRobWV0aWMuIChsaW5lICAgNikKKiBBcml0aG1ldGljIGZ1bmN0aW9ucyA8Mj46ICAgICAgICAgICAgICBGbG9hdCBBcml0aG1ldGljLiAgICAobGluZSAgIDYpCiogQXJpdGhtZXRpYyBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgICAgSW50ZWdlciBBcml0aG1ldGljLiAgKGxpbmUgICA2KQoqIEFSTTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGVzIGZvciBQYXJ0aWN1bGFyIFN5c3RlbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIwKQoqIEFzc2VtYmx5IGNhY2hlIGhhbmRsaW5nOiAgICAgICAgICAgICAgIEFzc2VtYmx5IENhY2hlIEhhbmRsaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBBc3NlbWJseSBjYXJyeSBwcm9wYWdhdGlvbjogICAgICAgICAgICBBc3NlbWJseSBDYXJyeSBQcm9wYWdhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogQXNzZW1ibHkgY29kZSBvcmdhbmlzYXRpb246ICAgICAgICAgICAgQXNzZW1ibHkgQ29kZSBPcmdhbmlzYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEFzc2VtYmx5IGNvZGluZzogICAgICAgICAgICAgICAgICAgICAgIEFzc2VtYmx5IENvZGluZy4gICAgIChsaW5lICAgNikKKiBBc3NlbWJseSBmbG9hdGluZyBQb2ludDogICAgICAgICAgICAgICBBc3NlbWJseSBGbG9hdGluZyBQb2ludC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogQXNzZW1ibHkgbG9vcCB1bnJvbGxpbmc6ICAgICAgICAgICAgICAgQXNzZW1ibHkgTG9vcCBVbnJvbGxpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEFzc2VtYmx5IFNJTUQ6ICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VtYmx5IFNJTUQgSW5zdHJ1Y3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBBc3NlbWJseSBzb2Z0d2FyZSBwaXBlbGluaW5nOiAgICAgICAgICBBc3NlbWJseSBTb2Z0d2FyZSBQaXBlbGluaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBBc3NlbWJseSB3cml0aW5nIGd1aWRlOiAgICAgICAgICAgICAgICBBc3NlbWJseSBXcml0aW5nIEd1aWRlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBBc3NlcnRpb24gY2hlY2tpbmcgPDE+OiAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcuICAgICAgICAgICAobGluZSAgNzkpCiogQXNzZXJ0aW9uIGNoZWNraW5nOiAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgMzE5KQoqIEFzc2lnbm1lbnQgZnVuY3Rpb25zIDwxPjogICAgICAgICAgICAgIEFzc2lnbmluZyBJbnRlZ2Vycy4gIChsaW5lICAgNikKKiBBc3NpZ25tZW50IGZ1bmN0aW9ucyA8Mj46ICAgICAgICAgICAgICBJbml0aWFsaXppbmcgUmF0aW9uYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBBc3NpZ25tZW50IGZ1bmN0aW9ucyA8Mz46ICAgICAgICAgICAgICBTaW11bHRhbmVvdXMgRmxvYXQgSW5pdCAmIEFzc2lnbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogQXNzaWdubWVudCBmdW5jdGlvbnMgPDQ+OiAgICAgICAgICAgICAgU2ltdWx0YW5lb3VzIEludGVnZXIgSW5pdCAmIEFzc2lnbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogQXNzaWdubWVudCBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgICAgQXNzaWduaW5nIEZsb2F0cy4gICAgKGxpbmUgICA2KQoqIEF1dG9jb25mOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9jb25mLiAgICAgICAgICAgIChsaW5lICAgNikKKiBCYXNpY3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTVAgQmFzaWNzLiAgICAgICAgICAobGluZSAgIDYpCiogQmlub21pYWwgY29lZmZpY2llbnQgYWxnb3JpdGhtOiAgICAgICAgQmlub21pYWwgQ29lZmZpY2llbnRzIEFsZ29yaXRobS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogQmlub21pYWwgY29lZmZpY2llbnQgZnVuY3Rpb25zOiAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI4KQoqIEJpbnV0aWxzIHN0cmlwOiAgICAgICAgICAgICAgICAgICAgICAgIEtub3duIEJ1aWxkIFByb2JsZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyOCkKKiBCaXQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uczogICAgICAgICAgICBJbnRlZ2VyIExvZ2ljIGFuZCBCaXQgRmlkZGxpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEJpdCBzY2FubmluZyBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgIEludGVnZXIgTG9naWMgYW5kIEJpdCBGaWRkbGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDApCiogQml0IHNoaWZ0IGxlZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBBcml0aG1ldGljLiAgKGxpbmUgIDM4KQoqIEJpdCBzaGlmdCByaWdodDogICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lICA2MikKKiBCaXRzIHBlciBsaW1iOiAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgTWFjcm9zIGFuZCBDb25zdGFudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3KQoqIEJ1ZyByZXBvcnRpbmc6ICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydGluZyBCdWdzLiAgICAgIChsaW5lICAgNikKKiBCdWlsZCBkaXJlY3Rvcnk6ICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAgMTkpCiogQnVpbGQgbm90ZXMgZm9yIGJpbmFyeSBwYWNrYWdpbmc6ICAgICAgTm90ZXMgZm9yIFBhY2thZ2UgQnVpbGRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBCdWlsZCBub3RlcyBmb3IgcGFydGljdWxhciBzeXN0ZW1zOiAgICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBCdWlsZCBvcHRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAgIDYpCiogQnVpbGQgcHJvYmxlbXMga25vd246ICAgICAgICAgICAgICAgICAgS25vd24gQnVpbGQgUHJvYmxlbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEJ1aWxkIHN5c3RlbTogICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lICA1MikKKiBCdWlsZGluZyBHTVA6ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsaW5nIEdNUC4gICAgICAobGluZSAgIDYpCiogQnVzIGVycm9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdnaW5nLiAgICAgICAgICAgKGxpbmUgICA3KQoqIEMgY29tcGlsZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDE3OSkKKiBDKysgY29tcGlsZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAyNTApCiogQysrIGludGVyZmFjZTogICAgICAgICAgICAgICAgICAgICAgICAgQysrIENsYXNzIEludGVyZmFjZS4gKGxpbmUgICA2KQoqIEMrKyBpbnRlcmZhY2UgaW50ZXJuYWxzOiAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgSW50ZXJuYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBDKysgaXN0cmVhbSBpbnB1dDogICAgICAgICAgICAgICAgICAgICBDKysgRm9ybWF0dGVkIElucHV0LiAobGluZSAgIDYpCiogQysrIG9zdHJlYW0gb3V0cHV0OiAgICAgICAgICAgICAgICAgICAgQysrIEZvcm1hdHRlZCBPdXRwdXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEMrKyBzdXBwb3J0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDIyNikKKiBDQzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAxNzkpCiogQ0NfRk9SX0JVSUxEOiAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgMjEzKQoqIENGTEFHUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDE3OSkKKiBDaGVja2VyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcuICAgICAgICAgICAobGluZSAxMTUpCiogY2hlY2tlcmdjYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdnaW5nLiAgICAgICAgICAgKGxpbmUgMTIyKQoqIENvZGUgb3JnYW5pc2F0aW9uOiAgICAgICAgICAgICAgICAgICAgIEFzc2VtYmx5IENvZGUgT3JnYW5pc2F0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBDb21wYXEgQysrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNSkKKiBDb21wYXJpc29uIGZ1bmN0aW9ucyA8MT46ICAgICAgICAgICAgICBJbnRlZ2VyIENvbXBhcmlzb25zLiAobGluZSAgIDYpCiogQ29tcGFyaXNvbiBmdW5jdGlvbnMgPDI+OiAgICAgICAgICAgICAgRmxvYXQgQ29tcGFyaXNvbi4gICAgKGxpbmUgICA2KQoqIENvbXBhcmlzb24gZnVuY3Rpb25zOiAgICAgICAgICAgICAgICAgIENvbXBhcmluZyBSYXRpb25hbHMuIChsaW5lICAgNikKKiBDb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnM6ICAgICBDb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIENvbmRpdGlvbnMgZm9yIGNvcHlpbmcgR05VIE1QOiAgICAgICAgIENvcHlpbmcuICAgICAgICAgICAgIChsaW5lICAgNikKKiBDb25maWd1cmluZyBHTVA6ICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsaW5nIEdNUC4gICAgICAobGluZSAgIDYpCiogQ29uZ3J1ZW5jZSBhbGdvcml0aG06ICAgICAgICAgICAgICAgICAgRXhhY3QgUmVtYWluZGVyLiAgICAgKGxpbmUgIDMwKQoqIENvbmdydWVuY2UgZnVuY3Rpb25zOiAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lIDEzNykKKiBDb25zdGFudHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgTWFjcm9zIGFuZCBDb25zdGFudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIENvbnRyaWJ1dG9yczogICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyaWJ1dG9ycy4gICAgICAgIChsaW5lICAgNikKKiBDb252ZW50aW9ucyBmb3IgcGFyYW1ldGVyczogICAgICAgICAgICBQYXJhbWV0ZXIgQ29udmVudGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIENvbnZlbnRpb25zIGZvciB2YXJpYWJsZXM6ICAgICAgICAgICAgIFZhcmlhYmxlIENvbnZlbnRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBDb252ZXJzaW9uIGZ1bmN0aW9ucyA8MT46ICAgICAgICAgICAgICBDb252ZXJ0aW5nIEludGVnZXJzLiAobGluZSAgIDYpCiogQ29udmVyc2lvbiBmdW5jdGlvbnMgPDI+OiAgICAgICAgICAgICAgQ29udmVydGluZyBGbG9hdHMuICAgKGxpbmUgICA2KQoqIENvbnZlcnNpb24gZnVuY3Rpb25zOiAgICAgICAgICAgICAgICAgIFJhdGlvbmFsIENvbnZlcnNpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBDb3B5aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICBDb3B5aW5nLiAgICAgICAgICAgICAobGluZSAgIDYpCiogQ1BQRkxBR1M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgMjA1KQoqIENQVSB0eXBlcyA8MT46ICAgICAgICAgICAgICAgICAgICAgICAgIEludHJvZHVjdGlvbiB0byBHTVAuIChsaW5lICAyNCkKKiBDUFUgdHlwZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAxMDgpCiogQ3Jvc3MgY29tcGlsaW5nOiAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgIDY2KQoqIENyeXB0b2dyYXBoeSBmdW5jdGlvbnMsIGxvdy1sZXZlbDogICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDQ5NSkKKiBDdXN0b20gYWxsb2NhdGlvbjogICAgICAgICAgICAgICAgICAgICBDdXN0b20gQWxsb2NhdGlvbi4gICAobGluZSAgIDYpCiogQ1hYOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgMjUwKQoqIENYWEZMQUdTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDI1MCkKKiBDeWd3aW46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NykKKiBEYXJ3aW46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLbm93biBCdWlsZCBQcm9ibGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTEpCiogRGVidWdnaW5nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdnaW5nLiAgICAgICAgICAgKGxpbmUgICA2KQoqIERlbW9uc3RyYXRpb24gcHJvZ3JhbXM6ICAgICAgICAgICAgICAgIERlbW9uc3RyYXRpb24gUHJvZ3JhbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIERpZ2l0cyBpbiBhbiBpbnRlZ2VyOiAgICAgICAgICAgICAgICAgIE1pc2NlbGxhbmVvdXMgSW50ZWdlciBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIzKQoqIERpdmlzaWJpbGl0eSBhbGdvcml0aG06ICAgICAgICAgICAgICAgIEV4YWN0IFJlbWFpbmRlci4gICAgIChsaW5lICAzMCkKKiBEaXZpc2liaWxpdHkgZnVuY3Rpb25zOiAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAxMzcpCiogRGl2aXNpYmlsaXR5IHRlc3Rpbmc6ICAgICAgICAgICAgICAgICAgRWZmaWNpZW5jeS4gICAgICAgICAgKGxpbmUgIDkxKQoqIERpdmlzaW9uIGFsZ29yaXRobXM6ICAgICAgICAgICAgICAgICAgIERpdmlzaW9uIEFsZ29yaXRobXMuIChsaW5lICAgNikKKiBEaXZpc2lvbiBmdW5jdGlvbnMgPDE+OiAgICAgICAgICAgICAgICBSYXRpb25hbCBBcml0aG1ldGljLiAobGluZSAgMjQpCiogRGl2aXNpb24gZnVuY3Rpb25zIDwyPjogICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgICA2KQoqIERpdmlzaW9uIGZ1bmN0aW9uczogICAgICAgICAgICAgICAgICAgIEZsb2F0IEFyaXRobWV0aWMuICAgIChsaW5lICAzMykKKiBESkdQUCA8MT46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NykKKiBESkdQUDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLbm93biBCdWlsZCBQcm9ibGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTgpCiogRExMczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzApCiogRG9jQm9vazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgMzQ2KQoqIERvY3VtZW50YXRpb24gZm9ybWF0czogICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDMzOSkKKiBEb2N1bWVudGF0aW9uIGxpY2Vuc2U6ICAgICAgICAgICAgICAgICBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIERWSTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDM0MikKKiBFZmZpY2llbmN5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmZpY2llbmN5LiAgICAgICAgICAobGluZSAgIDYpCiogRW1hY3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1hY3MuICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEV4YWN0IGRpdmlzaW9uIGZ1bmN0aW9uczogICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lIDExMikKKiBFeGFjdCByZW1haW5kZXI6ICAgICAgICAgICAgICAgICAgICAgICBFeGFjdCBSZW1haW5kZXIuICAgICAobGluZSAgIDYpCiogRXhhbXBsZSBwcm9ncmFtczogICAgICAgICAgICAgICAgICAgICAgRGVtb25zdHJhdGlvbiBQcm9ncmFtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogRXhlYyBwcmVmaXg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgIDMyKQoqIEV4ZWN1dGlvbiBwcm9maWxpbmcgPDE+OiAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDMyMykKKiBFeGVjdXRpb24gcHJvZmlsaW5nOiAgICAgICAgICAgICAgICAgICBQcm9maWxpbmcuICAgICAgICAgICAobGluZSAgIDYpCiogRXhwb25lbnRpYXRpb24gZnVuY3Rpb25zIDwxPjogICAgICAgICAgRmxvYXQgQXJpdGhtZXRpYy4gICAgKGxpbmUgIDQxKQoqIEV4cG9uZW50aWF0aW9uIGZ1bmN0aW9uczogICAgICAgICAgICAgIEludGVnZXIgRXhwb25lbnRpYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEV4cG9ydDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgSW1wb3J0IGFuZCBFeHBvcnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ1KQoqIEV4cHJlc3Npb24gcGFyc2luZyBkZW1vOiAgICAgICAgICAgICAgIERlbW9uc3RyYXRpb24gUHJvZ3JhbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE1KQoqIEV4dGVuZGVkIEdDRDogICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0OSkKKiBGYWN0b3IgcmVtb3ZhbCBmdW5jdGlvbnM6ICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDgpCiogRmFjdG9yaWFsIGFsZ29yaXRobTogICAgICAgICAgICAgICAgICAgRmFjdG9yaWFsIEFsZ29yaXRobS4gKGxpbmUgICA2KQoqIEZhY3RvcmlhbCBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNikKKiBGYWN0b3JpemF0aW9uIGRlbW86ICAgICAgICAgICAgICAgICAgICBEZW1vbnN0cmF0aW9uIFByb2dyYW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNSkKKiBGYXN0IEZvdXJpZXIgVHJhbnNmb3JtOiAgICAgICAgICAgICAgICBGRlQgTXVsdGlwbGljYXRpb24uICAobGluZSAgIDYpCiogRmF0IGJpbmFyeTogICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgMTYxKQoqIEZGVCBtdWx0aXBsaWNhdGlvbiA8MT46ICAgICAgICAgICAgICAgIEZGVCBNdWx0aXBsaWNhdGlvbi4gIChsaW5lICAgNikKKiBGRlQgbXVsdGlwbGljYXRpb246ICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAzMTMpCiogRmlib25hY2NpIG51bWJlciBhbGdvcml0aG06ICAgICAgICAgICAgRmlib25hY2NpIE51bWJlcnMgQWxnb3JpdGhtLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBGaWJvbmFjY2kgc2VxdWVuY2UgZnVuY3Rpb25zOiAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzYpCiogRmxvYXQgYXJpdGhtZXRpYyBmdW5jdGlvbnM6ICAgICAgICAgICAgRmxvYXQgQXJpdGhtZXRpYy4gICAgKGxpbmUgICA2KQoqIEZsb2F0IGFzc2lnbm1lbnQgZnVuY3Rpb25zIDwxPjogICAgICAgIFNpbXVsdGFuZW91cyBGbG9hdCBJbml0ICYgQXNzaWduLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBGbG9hdCBhc3NpZ25tZW50IGZ1bmN0aW9uczogICAgICAgICAgICBBc3NpZ25pbmcgRmxvYXRzLiAgICAobGluZSAgIDYpCiogRmxvYXQgY29tcGFyaXNvbiBmdW5jdGlvbnM6ICAgICAgICAgICAgRmxvYXQgQ29tcGFyaXNvbi4gICAgKGxpbmUgICA2KQoqIEZsb2F0IGNvbnZlcnNpb24gZnVuY3Rpb25zOiAgICAgICAgICAgIENvbnZlcnRpbmcgRmxvYXRzLiAgIChsaW5lICAgNikKKiBGbG9hdCBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdGluZy1wb2ludCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEZsb2F0IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyA8MT46ICAgIFNpbXVsdGFuZW91cyBGbG9hdCBJbml0ICYgQXNzaWduLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBGbG9hdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnM6ICAgICAgICBJbml0aWFsaXppbmcgRmxvYXRzLiAobGluZSAgIDYpCiogRmxvYXQgaW5wdXQgYW5kIG91dHB1dCBmdW5jdGlvbnM6ICAgICAgSS9PIG9mIEZsb2F0cy4gICAgICAgKGxpbmUgICA2KQoqIEZsb2F0IGludGVybmFsczogICAgICAgICAgICAgICAgICAgICAgIEZsb2F0IEludGVybmFscy4gICAgIChsaW5lICAgNikKKiBGbG9hdCBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9uczogICAgICAgICBNaXNjZWxsYW5lb3VzIEZsb2F0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogRmxvYXQgcmFuZG9tIG51bWJlciBmdW5jdGlvbnM6ICAgICAgICAgTWlzY2VsbGFuZW91cyBGbG9hdCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI3KQoqIEZsb2F0IHJvdW5kaW5nIGZ1bmN0aW9uczogICAgICAgICAgICAgIE1pc2NlbGxhbmVvdXMgRmxvYXQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOSkKKiBGbG9hdCBzaWduIHRlc3RzOiAgICAgICAgICAgICAgICAgICAgICBGbG9hdCBDb21wYXJpc29uLiAgICAobGluZSAgMzUpCiogRmxvYXRpbmcgcG9pbnQgbW9kZTogICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzQpCiogRmxvYXRpbmctcG9pbnQgZnVuY3Rpb25zOiAgICAgICAgICAgICAgRmxvYXRpbmctcG9pbnQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBGbG9hdGluZy1wb2ludCBudW1iZXI6ICAgICAgICAgICAgICAgICBOb21lbmNsYXR1cmUgYW5kIFR5cGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMSkKKiBmbmNjaGVjazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxpbmcuICAgICAgICAgICAobGluZSAgNzcpCiogRm9ybWF0dGVkIGlucHV0OiAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0dGVkIElucHV0LiAgICAgKGxpbmUgICA2KQoqIEZvcm1hdHRlZCBvdXRwdXQ6ICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlZCBPdXRwdXQuICAgIChsaW5lICAgNikKKiBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTogICAgICAgICAgICBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEZyZWVCU0Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGVzIGZvciBQYXJ0aWN1bGFyIFN5c3RlbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQzKQoqIGZyZXhwIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmcgSW50ZWdlcnMuIChsaW5lICA0MykKKiBmcmV4cDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nIEZsb2F0cy4gICAobGluZSAgMjQpCiogRlRQIG9mIGxhdGVzdCB2ZXJzaW9uOiAgICAgICAgICAgICAgICAgSW50cm9kdWN0aW9uIHRvIEdNUC4gKGxpbmUgIDM3KQoqIEZ1bmN0aW9uIGNsYXNzZXM6ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIENsYXNzZXMuICAgIChsaW5lICAgNikKKiBGdW5jdGlvbkNoZWNrOiAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxpbmcuICAgICAgICAgICAobGluZSAgNzcpCiogR0NDIENoZWNrZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdnaW5nLiAgICAgICAgICAgKGxpbmUgMTE1KQoqIEdDRCBhbGdvcml0aG1zOiAgICAgICAgICAgICAgICAgICAgICAgIEdyZWF0ZXN0IENvbW1vbiBEaXZpc29yIEFsZ29yaXRobXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEdDRCBleHRlbmRlZDogICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0OSkKKiBHQ0QgZnVuY3Rpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzIpCiogR0RCOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdnaW5nLiAgICAgICAgICAgKGxpbmUgIDU4KQoqIEdlbmVyaWMgQzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDE1MikKKiBHTVAgUGVybCBtb2R1bGU6ICAgICAgICAgICAgICAgICAgICAgICBEZW1vbnN0cmF0aW9uIFByb2dyYW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzNSkKKiBHTVAgdmVyc2lvbiBudW1iZXI6ICAgICAgICAgICAgICAgICAgICBVc2VmdWwgTWFjcm9zIGFuZCBDb25zdGFudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyKQoqIGdtcC5oOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlcnMgYW5kIExpYnJhcmllcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogZ21weHguaDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBHZW5lcmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOCkKKiBHTlUgRGVidWdnZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcuICAgICAgICAgICAobGluZSAgNTgpCiogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlOiAgICAgICAgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBHTlUgc3RyaXA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLbm93biBCdWlsZCBQcm9ibGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjgpCiogZ3Byb2Y6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsaW5nLiAgICAgICAgICAgKGxpbmUgIDQxKQoqIEdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIGFsZ29yaXRobXM6ICAgIEdyZWF0ZXN0IENvbW1vbiBEaXZpc29yIEFsZ29yaXRobXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIGZ1bmN0aW9uczogICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMikKKiBIYXJkd2FyZSBmbG9hdGluZyBwb2ludCBtb2RlOiAgICAgICAgICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzNCkKKiBIZWFkZXJzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWFkZXJzIGFuZCBMaWJyYXJpZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEhlYXAgcHJvYmxlbXM6ICAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnZ2luZy4gICAgICAgICAgIChsaW5lICAyNCkKKiBIb21lIHBhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRyb2R1Y3Rpb24gdG8gR01QLiAobGluZSAgMzMpCiogSG9zdCBzeXN0ZW06ICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgIDY2KQoqIEhQLVVYOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFCSSBhbmQgSVNBLiAgICAgICAgIChsaW5lICA3NykKKiBIUFBBOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQkkgYW5kIElTQS4gICAgICAgICAobGluZSAgNzcpCiogSS9PIGZ1bmN0aW9ucyA8MT46ICAgICAgICAgICAgICAgICAgICAgSS9PIG9mIEludGVnZXJzLiAgICAgKGxpbmUgICA2KQoqIEkvTyBmdW5jdGlvbnMgPDI+OiAgICAgICAgICAgICAgICAgICAgIEkvTyBvZiBGbG9hdHMuICAgICAgIChsaW5lICAgNikKKiBJL08gZnVuY3Rpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICBJL08gb2YgUmF0aW9uYWxzLiAgICAobGluZSAgIDYpCiogaTM4NjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTApCiogSUEtNjQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJJIGFuZCBJU0EuICAgICAgICAgKGxpbmUgMTE2KQoqIEltcG9ydDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgSW1wb3J0IGFuZCBFeHBvcnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDExKQoqIEluLXBsYWNlIG9wZXJhdGlvbnM6ICAgICAgICAgICAgICAgICAgIEVmZmljaWVuY3kuICAgICAgICAgIChsaW5lICA1NykKKiBJbmNsdWRlIGZpbGVzOiAgICAgICAgICAgICAgICAgICAgICAgICBIZWFkZXJzIGFuZCBMaWJyYXJpZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIGluZm8tbG9va3VwLXN5bWJvbDogICAgICAgICAgICAgICAgICAgIEVtYWNzLiAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgPDE+OiAgICAgICAgICBJbml0aWFsaXppbmcgRmxvYXRzLiAobGluZSAgIDYpCiogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIDwyPjogICAgICAgICAgUmFuZG9tIFN0YXRlIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgPDM+OiAgICAgICAgICBTaW11bHRhbmVvdXMgRmxvYXQgSW5pdCAmIEFzc2lnbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIDw0PjogICAgICAgICAgU2ltdWx0YW5lb3VzIEludGVnZXIgSW5pdCAmIEFzc2lnbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIDw1PjogICAgICAgICAgSW5pdGlhbGl6aW5nIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zOiAgICAgICAgICAgICAgSW5pdGlhbGl6aW5nIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBJbml0aWFsaXppbmcgYW5kIGNsZWFyaW5nOiAgICAgICAgICAgICBFZmZpY2llbmN5LiAgICAgICAgICAobGluZSAgMjEpCiogSW5wdXQgZnVuY3Rpb25zIDwxPjogICAgICAgICAgICAgICAgICAgRm9ybWF0dGVkIElucHV0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogSW5wdXQgZnVuY3Rpb25zIDwyPjogICAgICAgICAgICAgICAgICAgSS9PIG9mIFJhdGlvbmFscy4gICAgKGxpbmUgICA2KQoqIElucHV0IGZ1bmN0aW9ucyA8Mz46ICAgICAgICAgICAgICAgICAgIEkvTyBvZiBGbG9hdHMuICAgICAgIChsaW5lICAgNikKKiBJbnB1dCBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICBJL08gb2YgSW50ZWdlcnMuICAgICAobGluZSAgIDYpCiogSW5zdGFsbCBwcmVmaXg6ICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgIDMyKQoqIEluc3RhbGxpbmcgR01QOiAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxpbmcgR01QLiAgICAgIChsaW5lICAgNikKKiBJbnN0cnVjdGlvbiBTZXQgQXJjaGl0ZWN0dXJlOiAgICAgICAgICBBQkkgYW5kIElTQS4gICAgICAgICAobGluZSAgIDYpCiogaW5zdHJ1bWVudC1mdW5jdGlvbnM6ICAgICAgICAgICAgICAgICAgUHJvZmlsaW5nLiAgICAgICAgICAgKGxpbmUgIDY2KQoqIEludGVnZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbWVuY2xhdHVyZSBhbmQgVHlwZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEludGVnZXIgYXJpdGhtZXRpYyBmdW5jdGlvbnM6ICAgICAgICAgIEludGVnZXIgQXJpdGhtZXRpYy4gIChsaW5lICAgNikKKiBJbnRlZ2VyIGFzc2lnbm1lbnQgZnVuY3Rpb25zIDwxPjogICAgICBBc3NpZ25pbmcgSW50ZWdlcnMuICAobGluZSAgIDYpCiogSW50ZWdlciBhc3NpZ25tZW50IGZ1bmN0aW9uczogICAgICAgICAgU2ltdWx0YW5lb3VzIEludGVnZXIgSW5pdCAmIEFzc2lnbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogSW50ZWdlciBiaXQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uczogICAgSW50ZWdlciBMb2dpYyBhbmQgQml0IEZpZGRsaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBJbnRlZ2VyIGNvbXBhcmlzb24gZnVuY3Rpb25zOiAgICAgICAgICBJbnRlZ2VyIENvbXBhcmlzb25zLiAobGluZSAgIDYpCiogSW50ZWdlciBjb252ZXJzaW9uIGZ1bmN0aW9uczogICAgICAgICAgQ29udmVydGluZyBJbnRlZ2Vycy4gKGxpbmUgICA2KQoqIEludGVnZXIgZGl2aXNpb24gZnVuY3Rpb25zOiAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lICAgNikKKiBJbnRlZ2VyIGV4cG9uZW50aWF0aW9uIGZ1bmN0aW9uczogICAgICBJbnRlZ2VyIEV4cG9uZW50aWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBJbnRlZ2VyIGV4cG9ydDogICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEltcG9ydCBhbmQgRXhwb3J0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0NSkKKiBJbnRlZ2VyIGZ1bmN0aW9uczogICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEZ1bmN0aW9ucy4gICAobGluZSAgIDYpCiogSW50ZWdlciBpbXBvcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBJbXBvcnQgYW5kIEV4cG9ydC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTEpCiogSW50ZWdlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgPDE+OiAgSW5pdGlhbGl6aW5nIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBJbnRlZ2VyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uczogICAgICBTaW11bHRhbmVvdXMgSW50ZWdlciBJbml0ICYgQXNzaWduLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBJbnRlZ2VyIGlucHV0IGFuZCBvdXRwdXQgZnVuY3Rpb25zOiAgICBJL08gb2YgSW50ZWdlcnMuICAgICAobGluZSAgIDYpCiogSW50ZWdlciBpbnRlcm5hbHM6ICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBJbnRlcm5hbHMuICAgKGxpbmUgICA2KQoqIEludGVnZXIgbG9naWNhbCBmdW5jdGlvbnM6ICAgICAgICAgICAgIEludGVnZXIgTG9naWMgYW5kIEJpdCBGaWRkbGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogSW50ZWdlciBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9uczogICAgICAgTWlzY2VsbGFuZW91cyBJbnRlZ2VyIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogSW50ZWdlciByYW5kb20gbnVtYmVyIGZ1bmN0aW9uczogICAgICAgSW50ZWdlciBSYW5kb20gTnVtYmVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogSW50ZWdlciByb290IGZ1bmN0aW9uczogICAgICAgICAgICAgICAgSW50ZWdlciBSb290cy4gICAgICAgKGxpbmUgICA2KQoqIEludGVnZXIgc2lnbiB0ZXN0czogICAgICAgICAgICAgICAgICAgIEludGVnZXIgQ29tcGFyaXNvbnMuIChsaW5lICAyOCkKKiBJbnRlZ2VyIHNwZWNpYWwgZnVuY3Rpb25zOiAgICAgICAgICAgICBJbnRlZ2VyIFNwZWNpYWwgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBJbnRlcml4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NSkKKiBJbnRlcm5hbHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbHMuICAgICAgICAgICAobGluZSAgIDYpCiogSW50cm9kdWN0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgSW50cm9kdWN0aW9uIHRvIEdNUC4gKGxpbmUgICA2KQoqIEludmVyc2UgbW9kdWxvIGZ1bmN0aW9uczogICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3NikKKiBJUklYIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQkkgYW5kIElTQS4gICAgICAgICAobGluZSAxNDEpCiogSVJJWDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS25vd24gQnVpbGQgUHJvYmxlbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM4KQoqIElTQTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFCSSBhbmQgSVNBLiAgICAgICAgIChsaW5lICAgNikKKiBpc3RyZWFtIGlucHV0OiAgICAgICAgICAgICAgICAgICAgICAgICBDKysgRm9ybWF0dGVkIElucHV0LiAobGluZSAgIDYpCiogSmFjb2JpIHN5bWJvbCBhbGdvcml0aG06ICAgICAgICAgICAgICAgSmFjb2JpIFN5bWJvbC4gICAgICAgKGxpbmUgICA2KQoqIEphY29iaSBzeW1ib2wgZnVuY3Rpb25zOiAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MykKKiBLYXJhdHN1YmEgbXVsdGlwbGljYXRpb246ICAgICAgICAgICAgICBLYXJhdHN1YmEgTXVsdGlwbGljYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIEthcmF0c3ViYSBzcXVhcmUgcm9vdCBhbGdvcml0aG06ICAgICAgIFNxdWFyZSBSb290IEFsZ29yaXRobS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogS3JvbmVja2VyIHN5bWJvbCBmdW5jdGlvbnM6ICAgICAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk1KQoqIExhbmd1YWdlIGJpbmRpbmdzOiAgICAgICAgICAgICAgICAgICAgIExhbmd1YWdlIEJpbmRpbmdzLiAgIChsaW5lICAgNikKKiBMYXRlc3QgdmVyc2lvbiBvZiBHTVA6ICAgICAgICAgICAgICAgICBJbnRyb2R1Y3Rpb24gdG8gR01QLiAobGluZSAgMzcpCiogTENNIGZ1bmN0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDcwKQoqIExlYXN0IGNvbW1vbiBtdWx0aXBsZSBmdW5jdGlvbnM6ICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3MCkKKiBMZWdlbmRyZSBzeW1ib2wgZnVuY3Rpb25zOiAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODYpCiogbGliZ21wOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVhZGVycyBhbmQgTGlicmFyaWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMikKKiBsaWJnbXB4eDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWFkZXJzIGFuZCBMaWJyYXJpZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI3KQoqIExpYnJhcmllczogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlcnMgYW5kIExpYnJhcmllcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjIpCiogTGlidG9vbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVhZGVycyBhbmQgTGlicmFyaWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMykKKiBMaWJ0b29sIHZlcnNpb25pbmc6ICAgICAgICAgICAgICAgICAgICBOb3RlcyBmb3IgUGFja2FnZSBCdWlsZHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5KQoqIExpY2Vuc2UgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgIENvcHlpbmcuICAgICAgICAgICAgIChsaW5lICAgNikKKiBMaW1iOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb21lbmNsYXR1cmUgYW5kIFR5cGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMSkKKiBMaW1iIHNpemU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgTWFjcm9zIGFuZCBDb25zdGFudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3KQoqIExpbmVhciBjb25ncnVlbnRpYWwgYWxnb3JpdGhtOiAgICAgICAgIFJhbmRvbSBOdW1iZXIgQWxnb3JpdGhtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjUpCiogTGluZWFyIGNvbmdydWVudGlhbCByYW5kb20gbnVtYmVyczogICAgUmFuZG9tIFN0YXRlIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMikKKiBMaW5raW5nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWFkZXJzIGFuZCBMaWJyYXJpZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIyKQoqIExvZ2ljYWwgZnVuY3Rpb25zOiAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgTG9naWMgYW5kIEJpdCBGaWRkbGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogTG93LWxldmVsIGZ1bmN0aW9uczogICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgICA2KQoqIExvdy1sZXZlbCBmdW5jdGlvbnMgZm9yIGNyeXB0b2dyYXBoeTogIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDQ5NSkKKiBMdWNhcyBudW1iZXIgYWxnb3JpdGhtOiAgICAgICAgICAgICAgICBMdWNhcyBOdW1iZXJzIEFsZ29yaXRobS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogTHVjYXMgbnVtYmVyIGZ1bmN0aW9uczogICAgICAgICAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ3KQoqIE1hY09TIFg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtub3duIEJ1aWxkIFByb2JsZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MSkKKiBNYWlsaW5nIGxpc3RzOiAgICAgICAgICAgICAgICAgICAgICAgICBJbnRyb2R1Y3Rpb24gdG8gR01QLiAobGluZSAgNDQpCiogTWFsbG9jIGRlYnVnZ2VyOiAgICAgICAgICAgICAgICAgICAgICAgRGVidWdnaW5nLiAgICAgICAgICAgKGxpbmUgIDMwKQoqIE1hbGxvYyBwcm9ibGVtczogICAgICAgICAgICAgICAgICAgICAgIERlYnVnZ2luZy4gICAgICAgICAgIChsaW5lICAyNCkKKiBNZW1vcnkgYWxsb2NhdGlvbjogICAgICAgICAgICAgICAgICAgICBDdXN0b20gQWxsb2NhdGlvbi4gICAobGluZSAgIDYpCiogTWVtb3J5IG1hbmFnZW1lbnQ6ICAgICAgICAgICAgICAgICAgICAgTWVtb3J5IE1hbmFnZW1lbnQuICAgKGxpbmUgICA2KQoqIE1lcnNlbm5lIHR3aXN0ZXIgYWxnb3JpdGhtOiAgICAgICAgICAgIFJhbmRvbSBOdW1iZXIgQWxnb3JpdGhtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTcpCiogTWVyc2VubmUgdHdpc3RlciByYW5kb20gbnVtYmVyczogICAgICAgUmFuZG9tIFN0YXRlIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMykKKiBNSU5HVzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NykKKiBNSVBTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQkkgYW5kIElTQS4gICAgICAgICAobGluZSAxNDEpCiogTWlzY2VsbGFuZW91cyBmbG9hdCBmdW5jdGlvbnM6ICAgICAgICAgTWlzY2VsbGFuZW91cyBGbG9hdCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIE1pc2NlbGxhbmVvdXMgaW50ZWdlciBmdW5jdGlvbnM6ICAgICAgIE1pc2NlbGxhbmVvdXMgSW50ZWdlciBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIE1NWDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGVzIGZvciBQYXJ0aWN1bGFyIFN5c3RlbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU2KQoqIE1vZHVsYXIgaW52ZXJzZSBmdW5jdGlvbnM6ICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3NikKKiBNb3N0IHNpZ25pZmljYW50IGJpdDogICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEludGVnZXIgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzNCkKKiBNUE5fUEFUSDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAzMjcpCiogTVMgV2luZG93czogICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTcpCiogTVMtRE9TOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTcpCiogTXVsdGktdGhyZWFkaW5nOiAgICAgICAgICAgICAgICAgICAgICAgUmVlbnRyYW5jeS4gICAgICAgICAgKGxpbmUgICA2KQoqIE11bHRpcGxpY2F0aW9uIGFsZ29yaXRobXM6ICAgICAgICAgICAgIE11bHRpcGxpY2F0aW9uIEFsZ29yaXRobXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIE5haWxzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDY2NCkKKiBOYXRpdmUgY29tcGlsYXRpb246ICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAgNTIpCiogTmV0QlNEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDApCiogTmVYVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS25vd24gQnVpbGQgUHJvYmxlbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU3KQoqIE5leHQgcHJpbWUgZnVuY3Rpb246ICAgICAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNSkKKiBOb21lbmNsYXR1cmU6ICAgICAgICAgICAgICAgICAgICAgICAgICBOb21lbmNsYXR1cmUgYW5kIFR5cGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBOb24tVW5peCBzeXN0ZW1zOiAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAgMTEpCiogTnRoIHJvb3QgYWxnb3JpdGhtOiAgICAgICAgICAgICAgICAgICAgTnRoIFJvb3QgQWxnb3JpdGhtLiAgKGxpbmUgICA2KQoqIE51bWJlciBzZXF1ZW5jZXM6ICAgICAgICAgICAgICAgICAgICAgIEVmZmljaWVuY3kuICAgICAgICAgIChsaW5lIDE0NykKKiBOdW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uczogICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogTnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvcjogICAgICAgICAgICAgQXBwbHlpbmcgSW50ZWdlciBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIG9ic3RhY2sgb3V0cHV0OiAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlZCBPdXRwdXQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MSkKKiBPcGVuQlNEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwOSkKKiBPcHRpbWl6aW5nIHBlcmZvcm1hbmNlOiAgICAgICAgICAgICAgICBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIG9zdHJlYW0gb3V0cHV0OiAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBGb3JtYXR0ZWQgT3V0cHV0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBPdGhlciBsYW5ndWFnZXM6ICAgICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZSBCaW5kaW5ncy4gICAobGluZSAgIDYpCiogT3V0cHV0IGZ1bmN0aW9ucyA8MT46ICAgICAgICAgICAgICAgICAgRm9ybWF0dGVkIE91dHB1dCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIE91dHB1dCBmdW5jdGlvbnMgPDI+OiAgICAgICAgICAgICAgICAgIEkvTyBvZiBSYXRpb25hbHMuICAgIChsaW5lICAgNikKKiBPdXRwdXQgZnVuY3Rpb25zIDwzPjogICAgICAgICAgICAgICAgICBJL08gb2YgSW50ZWdlcnMuICAgICAobGluZSAgIDYpCiogT3V0cHV0IGZ1bmN0aW9uczogICAgICAgICAgICAgICAgICAgICAgSS9PIG9mIEZsb2F0cy4gICAgICAgKGxpbmUgICA2KQoqIFBhY2thZ2VkIGJ1aWxkczogICAgICAgICAgICAgICAgICAgICAgIE5vdGVzIGZvciBQYWNrYWdlIEJ1aWxkcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogUGFyYW1ldGVyIGNvbnZlbnRpb25zOiAgICAgICAgICAgICAgICAgUGFyYW1ldGVyIENvbnZlbnRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBQYXJzaW5nIGV4cHJlc3Npb25zIGRlbW86ICAgICAgICAgICAgICBEZW1vbnN0cmF0aW9uIFByb2dyYW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMSkKKiBQYXJ0aWN1bGFyIHN5c3RlbXM6ICAgICAgICAgICAgICAgICAgICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBQYXN0IEdNUCB2ZXJzaW9uczogICAgICAgICAgICAgICAgICAgICBDb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIFBERjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDM0MikKKiBQZXJmZWN0IHBvd2VyIGFsZ29yaXRobTogICAgICAgICAgICAgICBQZXJmZWN0IFBvd2VyIEFsZ29yaXRobS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogUGVyZmVjdCBwb3dlciBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgSW50ZWdlciBSb290cy4gICAgICAgKGxpbmUgIDI4KQoqIFBlcmZlY3Qgc3F1YXJlIGFsZ29yaXRobTogICAgICAgICAgICAgIFBlcmZlY3QgU3F1YXJlIEFsZ29yaXRobS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogUGVyZmVjdCBzcXVhcmUgZnVuY3Rpb25zOiAgICAgICAgICAgICAgSW50ZWdlciBSb290cy4gICAgICAgKGxpbmUgIDM3KQoqIHBlcmw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbW9uc3RyYXRpb24gUHJvZ3JhbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM1KQoqIFBlcmwgbW9kdWxlOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbW9uc3RyYXRpb24gUHJvZ3JhbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM1KQoqIFBvc3RzY3JpcHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDM0MikKKiBQb3dlci9Qb3dlclBDIDwxPjogICAgICAgICAgICAgICAgICAgICBLbm93biBCdWlsZCBQcm9ibGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjMpCiogUG93ZXIvUG93ZXJQQzogICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTUpCiogUG93ZXJpbmcgYWxnb3JpdGhtczogICAgICAgICAgICAgICAgICAgUG93ZXJpbmcgQWxnb3JpdGhtcy4gKGxpbmUgICA2KQoqIFBvd2VyaW5nIGZ1bmN0aW9ucyA8MT46ICAgICAgICAgICAgICAgIEZsb2F0IEFyaXRobWV0aWMuICAgIChsaW5lICA0MSkKKiBQb3dlcmluZyBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEV4cG9uZW50aWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBQb3dlclBDOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQkkgYW5kIElTQS4gICAgICAgICAobGluZSAxNzYpCiogUHJlY2lzaW9uIG9mIGZsb2F0czogICAgICAgICAgICAgICAgICAgRmxvYXRpbmctcG9pbnQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBQcmVjaXNpb24gb2YgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQ6ICBOb3RlcyBmb3IgUGFydGljdWxhciBTeXN0ZW1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzNCkKKiBQcmVmaXg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAgMzIpCiogUHJpbWUgdGVzdGluZyBhbGdvcml0aG1zOiAgICAgICAgICAgICAgUHJpbWUgVGVzdGluZyBBbGdvcml0aG0uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIFByaW1lIHRlc3RpbmcgZnVuY3Rpb25zOiAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNykKKiBQcmltb3JpYWwgZnVuY3Rpb25zOiAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjEpCiogcHJpbnRmIGZvcm1hdHRlZCBvdXRwdXQ6ICAgICAgICAgICAgICAgRm9ybWF0dGVkIE91dHB1dC4gICAgKGxpbmUgICA2KQoqIFByb2JhYmxlIHByaW1lIHRlc3RpbmcgZnVuY3Rpb25zOiAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNykKKiBwcm9mOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxpbmcuICAgICAgICAgICAobGluZSAgMjQpCiogUHJvZmlsaW5nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsaW5nLiAgICAgICAgICAgKGxpbmUgICA2KQoqIFJhZGl4IGNvbnZlcnNpb24gYWxnb3JpdGhtczogICAgICAgICAgIFJhZGl4IENvbnZlcnNpb24gQWxnb3JpdGhtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogUmFuZG9tIG51bWJlciBhbGdvcml0aG1zOiAgICAgICAgICAgICAgUmFuZG9tIE51bWJlciBBbGdvcml0aG1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBSYW5kb20gbnVtYmVyIGZ1bmN0aW9ucyA8MT46ICAgICAgICAgICBJbnRlZ2VyIFJhbmRvbSBOdW1iZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBSYW5kb20gbnVtYmVyIGZ1bmN0aW9ucyA8Mj46ICAgICAgICAgICBSYW5kb20gTnVtYmVyIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogUmFuZG9tIG51bWJlciBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgTWlzY2VsbGFuZW91cyBGbG9hdCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI3KQoqIFJhbmRvbSBudW1iZXIgc2VlZGluZzogICAgICAgICAgICAgICAgIFJhbmRvbSBTdGF0ZSBTZWVkaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBSYW5kb20gbnVtYmVyIHN0YXRlOiAgICAgICAgICAgICAgICAgICBSYW5kb20gU3RhdGUgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIFJhbmRvbSBzdGF0ZTogICAgICAgICAgICAgICAgICAgICAgICAgIE5vbWVuY2xhdHVyZSBhbmQgVHlwZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ2KQoqIFJhdGlvbmFsIGFyaXRobWV0aWM6ICAgICAgICAgICAgICAgICAgIEVmZmljaWVuY3kuICAgICAgICAgIChsaW5lIDExMykKKiBSYXRpb25hbCBhcml0aG1ldGljIGZ1bmN0aW9uczogICAgICAgICBSYXRpb25hbCBBcml0aG1ldGljLiAobGluZSAgIDYpCiogUmF0aW9uYWwgYXNzaWdubWVudCBmdW5jdGlvbnM6ICAgICAgICAgSW5pdGlhbGl6aW5nIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogUmF0aW9uYWwgY29tcGFyaXNvbiBmdW5jdGlvbnM6ICAgICAgICAgQ29tcGFyaW5nIFJhdGlvbmFscy4gKGxpbmUgICA2KQoqIFJhdGlvbmFsIGNvbnZlcnNpb24gZnVuY3Rpb25zOiAgICAgICAgIFJhdGlvbmFsIENvbnZlcnNpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBSYXRpb25hbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnM6ICAgICBJbml0aWFsaXppbmcgUmF0aW9uYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBSYXRpb25hbCBpbnB1dCBhbmQgb3V0cHV0IGZ1bmN0aW9uczogICBJL08gb2YgUmF0aW9uYWxzLiAgICAobGluZSAgIDYpCiogUmF0aW9uYWwgaW50ZXJuYWxzOiAgICAgICAgICAgICAgICAgICAgUmF0aW9uYWwgSW50ZXJuYWxzLiAgKGxpbmUgICA2KQoqIFJhdGlvbmFsIG51bWJlcjogICAgICAgICAgICAgICAgICAgICAgIE5vbWVuY2xhdHVyZSBhbmQgVHlwZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE2KQoqIFJhdGlvbmFsIG51bWJlciBmdW5jdGlvbnM6ICAgICAgICAgICAgIFJhdGlvbmFsIE51bWJlciBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIFJhdGlvbmFsIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3I6ICAgIEFwcGx5aW5nIEludGVnZXIgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBSYXRpb25hbCBzaWduIHRlc3RzOiAgICAgICAgICAgICAgICAgICBDb21wYXJpbmcgUmF0aW9uYWxzLiAobGluZSAgMjcpCiogUmF3IG91dHB1dCBpbnRlcm5hbHM6ICAgICAgICAgICAgICAgICAgUmF3IE91dHB1dCBJbnRlcm5hbHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIFJlYWxsb2NhdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgIEVmZmljaWVuY3kuICAgICAgICAgIChsaW5lICAzMCkKKiBSZWVudHJhbmN5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWVudHJhbmN5LiAgICAgICAgICAobGluZSAgIDYpCiogUmVmZXJlbmNlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlcy4gICAgICAgICAgKGxpbmUgICA2KQoqIFJlbW92ZSBmYWN0b3IgZnVuY3Rpb25zOiAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwOCkKKiBSZXBvcnRpbmcgYnVnczogICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRpbmcgQnVncy4gICAgICAobGluZSAgIDYpCiogUm9vdCBleHRyYWN0aW9uIGFsZ29yaXRobTogICAgICAgICAgICAgTnRoIFJvb3QgQWxnb3JpdGhtLiAgKGxpbmUgICA2KQoqIFJvb3QgZXh0cmFjdGlvbiBhbGdvcml0aG1zOiAgICAgICAgICAgIFJvb3QgRXh0cmFjdGlvbiBBbGdvcml0aG1zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBSb290IGV4dHJhY3Rpb24gZnVuY3Rpb25zIDwxPjogICAgICAgICBGbG9hdCBBcml0aG1ldGljLiAgICAobGluZSAgMzcpCiogUm9vdCBleHRyYWN0aW9uIGZ1bmN0aW9uczogICAgICAgICAgICAgSW50ZWdlciBSb290cy4gICAgICAgKGxpbmUgICA2KQoqIFJvb3QgdGVzdGluZyBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgIEludGVnZXIgUm9vdHMuICAgICAgIChsaW5lICAyOCkKKiBSb3VuZGluZyBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEZsb2F0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDkpCiogU2FtcGxlIHByb2dyYW1zOiAgICAgICAgICAgICAgICAgICAgICAgRGVtb25zdHJhdGlvbiBQcm9ncmFtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogU2NhbiBiaXQgZnVuY3Rpb25zOiAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBMb2dpYyBhbmQgQml0IEZpZGRsaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0MCkKKiBzY2FuZiBmb3JtYXR0ZWQgaW5wdXQ6ICAgICAgICAgICAgICAgICBGb3JtYXR0ZWQgSW5wdXQuICAgICAobGluZSAgIDYpCiogU0NPOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS25vd24gQnVpbGQgUHJvYmxlbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM4KQoqIFNlZWRpbmcgcmFuZG9tIG51bWJlcnM6ICAgICAgICAgICAgICAgIFJhbmRvbSBTdGF0ZSBTZWVkaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBTZWdtZW50YXRpb24gdmlvbGF0aW9uOiAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcuICAgICAgICAgICAobGluZSAgIDcpCiogU2VxdWVudCBTeW1tZXRyeTogICAgICAgICAgICAgICAgICAgICAgS25vd24gQnVpbGQgUHJvYmxlbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY4KQoqIFNlcnZpY2VzIGZvciBVbml4OiAgICAgICAgICAgICAgICAgICAgIE5vdGVzIGZvciBQYXJ0aWN1bGFyIFN5c3RlbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY1KQoqIFNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmc6ICAgICAgICAgICAgIE5vdGVzIGZvciBQYWNrYWdlIEJ1aWxkcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDkpCiogU2lnbiB0ZXN0cyA8MT46ICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyaW5nIFJhdGlvbmFscy4gKGxpbmUgIDI3KQoqIFNpZ24gdGVzdHMgPDI+OiAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0IENvbXBhcmlzb24uICAgIChsaW5lICAzNSkKKiBTaWduIHRlc3RzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIENvbXBhcmlzb25zLiAobGluZSAgMjgpCiogU2l6ZSBpbiBkaWdpdHM6ICAgICAgICAgICAgICAgICAgICAgICAgTWlzY2VsbGFuZW91cyBJbnRlZ2VyIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjMpCiogU21hbGwgb3BlcmFuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgRWZmaWNpZW5jeS4gICAgICAgICAgKGxpbmUgICA3KQoqIFNvbGFyaXMgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFCSSBhbmQgSVNBLiAgICAgICAgIChsaW5lIDIwOCkKKiBTb2xhcmlzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLbm93biBCdWlsZCBQcm9ibGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzIpCiogU3BhcmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjcpCiogU3BhcmMgVjk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJJIGFuZCBJU0EuICAgICAgICAgKGxpbmUgMjA4KQoqIFNwZWNpYWwgaW50ZWdlciBmdW5jdGlvbnM6ICAgICAgICAgICAgIEludGVnZXIgU3BlY2lhbCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIFNxdWFyZSByb290IGFsZ29yaXRobTogICAgICAgICAgICAgICAgIFNxdWFyZSBSb290IEFsZ29yaXRobS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogU1NFMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTYpCiogU3RhY2sgYmFja3RyYWNlOiAgICAgICAgICAgICAgICAgICAgICAgRGVidWdnaW5nLiAgICAgICAgICAgKGxpbmUgIDUwKQoqIFN0YWNrIG92ZXJmbG93IDwxPjogICAgICAgICAgICAgICAgICAgIERlYnVnZ2luZy4gICAgICAgICAgIChsaW5lICAgNykKKiBTdGFjayBvdmVyZmxvdzogICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAyNzQpCiogU3RhdGljIGxpbmtpbmc6ICAgICAgICAgICAgICAgICAgICAgICAgRWZmaWNpZW5jeS4gICAgICAgICAgKGxpbmUgIDE0KQoqIHN0ZGFyZy5oOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlcnMgYW5kIExpYnJhcmllcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTcpCiogc3RkaW8uaDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVhZGVycyBhbmQgTGlicmFyaWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMSkKKiBTdHJpcHBlZCBsaWJyYXJpZXM6ICAgICAgICAgICAgICAgICAgICBLbm93biBCdWlsZCBQcm9ibGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjgpCiogU3VuOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJJIGFuZCBJU0EuICAgICAgICAgKGxpbmUgMjA4KQoqIFN1bk9TOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGVzIGZvciBQYXJ0aWN1bGFyIFN5c3RlbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ0KQoqIFN5c3RlbXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGVzIGZvciBQYXJ0aWN1bGFyIFN5c3RlbXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIFRlbXBvcmFyeSBtZW1vcnk6ICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIE9wdGlvbnMuICAgICAgIChsaW5lIDI3NCkKKiBUZXhpbmZvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBPcHRpb25zLiAgICAgICAobGluZSAzMzkpCiogVGV4dCBpbnB1dC9vdXRwdXQ6ICAgICAgICAgICAgICAgICAgICAgRWZmaWNpZW5jeS4gICAgICAgICAgKGxpbmUgMTUzKQoqIFRocmVhZCBzYWZldHk6ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZW50cmFuY3kuICAgICAgICAgIChsaW5lICAgNikKKiBUb29tIG11bHRpcGxpY2F0aW9uIDwxPjogICAgICAgICAgICAgICBIaWdoZXIgZGVncmVlIFRvb20nbidoYWxmLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBUb29tIG11bHRpcGxpY2F0aW9uIDwyPjogICAgICAgICAgICAgICBPdGhlciBNdWx0aXBsaWNhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogVG9vbSBtdWx0aXBsaWNhdGlvbiA8Mz46ICAgICAgICAgICAgICAgVG9vbSA0LVdheSBNdWx0aXBsaWNhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogVG9vbSBtdWx0aXBsaWNhdGlvbjogICAgICAgICAgICAgICAgICAgVG9vbSAzLVdheSBNdWx0aXBsaWNhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogVHlwZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9tZW5jbGF0dXJlIGFuZCBUeXBlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogdWkgYW5kIHNpIGZ1bmN0aW9uczogICAgICAgICAgICAgICAgICAgRWZmaWNpZW5jeS4gICAgICAgICAgKGxpbmUgIDUwKQoqIFVuYmFsYW5jZWQgbXVsdGlwbGljYXRpb246ICAgICAgICAgICAgIFVuYmFsYW5jZWQgTXVsdGlwbGljYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIFVwd2FyZCBjb21wYXRpYmlsaXR5OiAgICAgICAgICAgICAgICAgIENvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogVXNlZnVsIG1hY3JvcyBhbmQgY29uc3RhbnRzOiAgICAgICAgICAgVXNlZnVsIE1hY3JvcyBhbmQgQ29uc3RhbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNikKKiBVc2VyLWRlZmluZWQgcHJlY2lzaW9uOiAgICAgICAgICAgICAgICBGbG9hdGluZy1wb2ludCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIFZhbGdyaW5kOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnZ2luZy4gICAgICAgICAgIChsaW5lIDEzMCkKKiBWYXJpYWJsZSBjb252ZW50aW9uczogICAgICAgICAgICAgICAgICBWYXJpYWJsZSBDb252ZW50aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYpCiogVmVyc2lvbiBudW1iZXI6ICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIE1hY3JvcyBhbmQgQ29uc3RhbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMikKKiBXZWIgcGFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRyb2R1Y3Rpb24gdG8gR01QLiAobGluZSAgMzMpCiogV2luZG93czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzApCiogeDg2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTApCiogeDg3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMgZm9yIFBhcnRpY3VsYXIgU3lzdGVtcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzQpCiogWE1MOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgT3B0aW9ucy4gICAgICAgKGxpbmUgMzQ2KQoKHwpGaWxlOiBnbXAuaW5mbywgIE5vZGU6IEZ1bmN0aW9uIEluZGV4LCAgUHJldjogQ29uY2VwdCBJbmRleCwgIFVwOiBUb3AKCkZ1bmN0aW9uIGFuZCBUeXBlIEluZGV4CioqKioqKioqKioqKioqKioqKioqKioqCgoACFtpbmRleAAIXQoqIE1lbnU6CgoqIF9fR01QX0NDOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBNYWNyb3MgYW5kIENvbnN0YW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjMpCiogX19HTVBfQ0ZMQUdTOiAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIE1hY3JvcyBhbmQgQ29uc3RhbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNCkKKiBfX0dOVV9NUF9WRVJTSU9OOiAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgTWFjcm9zIGFuZCBDb25zdGFudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwKQoqIF9fR05VX01QX1ZFUlNJT05fTUlOT1I6ICAgICAgICAgICAgICAgIFVzZWZ1bCBNYWNyb3MgYW5kIENvbnN0YW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTEpCiogX19HTlVfTVBfVkVSU0lPTl9QQVRDSExFVkVMOiAgICAgICAgICAgVXNlZnVsIE1hY3JvcyBhbmQgQ29uc3RhbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMikKKiBfbXB6X3JlYWxsb2M6ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIFNwZWNpYWwgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNCkKKiBhYnMgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDkpCiogYWJzIDwyPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBGbG9hdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDgzKQoqIGFiczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgSW50ZWdlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ3KQoqIGNlaWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgRmxvYXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4NCkKKiBjbXAgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEZsb2F0cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODYpCiogY21wIDwyPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBSYXRpb25hbHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUxKQoqIGNtcCA8Mz46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgRmxvYXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4NSkKKiBjbXAgPDQ+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTApCiogY21wOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBJbnRlZ2Vycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDkpCiogZmxvb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBGbG9hdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkzKQoqIGdtcF9hc3ByaW50ZjogICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlZCBPdXRwdXQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NSkKKiBnbXBfZXJybm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5kb20gU3RhdGUgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU1KQoqIEdNUF9FUlJPUl9JTlZBTElEX0FSR1VNRU5UOiAgICAgICAgICAgIFJhbmRvbSBTdGF0ZSBJbml0aWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTUpCiogR01QX0VSUk9SX1VOU1VQUE9SVEVEX0FSR1VNRU5UOiAgICAgICAgUmFuZG9tIFN0YXRlIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NSkKKiBnbXBfZnByaW50ZjogICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXR0ZWQgT3V0cHV0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjkpCiogZ21wX2ZzY2FuZjogICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0dGVkIElucHV0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjUpCiogR01QX0xJTUJfQklUUzogICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNjk0KQoqIEdNUF9OQUlMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDY5MikKKiBHTVBfTkFJTF9NQVNLOiAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA3MDIpCiogR01QX05VTUJfQklUUzogICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNjkzKQoqIEdNUF9OVU1CX01BU0s6ICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDcwMykKKiBHTVBfTlVNQl9NQVg6ICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA3MTEpCiogZ21wX29ic3RhY2tfcHJpbnRmOiAgICAgICAgICAgICAgICAgICAgRm9ybWF0dGVkIE91dHB1dCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc5KQoqIGdtcF9vYnN0YWNrX3ZwcmludGY6ICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlZCBPdXRwdXQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MSkKKiBnbXBfcHJpbnRmOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXR0ZWQgT3V0cHV0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjQpCiogR01QX1JBTkRfQUxHX0RFRkFVTFQ6ICAgICAgICAgICAgICAgICAgUmFuZG9tIFN0YXRlIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0OSkKKiBHTVBfUkFORF9BTEdfTEM6ICAgICAgICAgICAgICAgICAgICAgICBSYW5kb20gU3RhdGUgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ5KQoqIGdtcF9yYW5kY2xhc3M6ICAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgUmFuZG9tIE51bWJlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3KQoqIGdtcF9yYW5kY2xhc3M6OmdldF9mOiAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgUmFuZG9tIE51bWJlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ1KQoqIGdtcF9yYW5kY2xhc3M6OmdldF96X2JpdHM6ICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgUmFuZG9tIE51bWJlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM4KQoqIGdtcF9yYW5kY2xhc3M6OmdldF96X3JhbmdlOiAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgUmFuZG9tIE51bWJlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQyKQoqIGdtcF9yYW5kY2xhc3M6OmdtcF9yYW5kY2xhc3M6ICAgICAgICAgIEMrKyBJbnRlcmZhY2UgUmFuZG9tIE51bWJlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI3KQoqIGdtcF9yYW5kY2xhc3M6OnNlZWQ6ICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgUmFuZG9tIE51bWJlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMzKQoqIGdtcF9yYW5kY2xlYXI6ICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbSBTdGF0ZSBJbml0aWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjIpCiogZ21wX3JhbmRpbml0OiAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZG9tIFN0YXRlIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0NykKKiBnbXBfcmFuZGluaXRfZGVmYXVsdDogICAgICAgICAgICAgICAgICBSYW5kb20gU3RhdGUgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3KQoqIGdtcF9yYW5kaW5pdF9sY18yZXhwOiAgICAgICAgICAgICAgICAgIFJhbmRvbSBTdGF0ZSBJbml0aWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTgpCiogZ21wX3JhbmRpbml0X2xjXzJleHBfc2l6ZTogICAgICAgICAgICAgUmFuZG9tIFN0YXRlIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMikKKiBnbXBfcmFuZGluaXRfbXQ6ICAgICAgICAgICAgICAgICAgICAgICBSYW5kb20gU3RhdGUgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEzKQoqIGdtcF9yYW5kaW5pdF9zZXQ6ICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbSBTdGF0ZSBJbml0aWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDMpCiogZ21wX3JhbmRzZWVkOiAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZG9tIFN0YXRlIFNlZWRpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4KQoqIGdtcF9yYW5kc2VlZF91aTogICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbSBTdGF0ZSBTZWVkaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMCkKKiBnbXBfcmFuZHN0YXRlX3Q6ICAgICAgICAgICAgICAgICAgICAgICBOb21lbmNsYXR1cmUgYW5kIFR5cGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0NikKKiBnbXBfc2NhbmY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXR0ZWQgSW5wdXQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMSkKKiBnbXBfc25wcmludGY6ICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXR0ZWQgT3V0cHV0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDYpCiogZ21wX3NwcmludGY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0dGVkIE91dHB1dCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM0KQoqIGdtcF9zc2NhbmY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlZCBJbnB1dCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI5KQoqIGdtcF91cmFuZG9tYl91aTogICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbSBTdGF0ZSBNaXNjZWxsYW5lb3VzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOCkKKiBnbXBfdXJhbmRvbW1fdWk6ICAgICAgICAgICAgICAgICAgICAgICBSYW5kb20gU3RhdGUgTWlzY2VsbGFuZW91cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTQpCiogZ21wX3Zhc3ByaW50ZjogICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0dGVkIE91dHB1dCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY2KQoqIGdtcF92ZXJzaW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBNYWNyb3MgYW5kIENvbnN0YW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTgpCiogZ21wX3ZmcHJpbnRmOiAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0dGVkIE91dHB1dCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMwKQoqIGdtcF92ZnNjYW5mOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlZCBJbnB1dCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI2KQoqIGdtcF92cHJpbnRmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlZCBPdXRwdXQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNSkKKiBnbXBfdnNjYW5mOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXR0ZWQgSW5wdXQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMikKKiBnbXBfdnNucHJpbnRmOiAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXR0ZWQgT3V0cHV0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDgpCiogZ21wX3ZzcHJpbnRmOiAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0dGVkIE91dHB1dCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM1KQoqIGdtcF92c3NjYW5mOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlZCBJbnB1dCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMxKQoqIGh5cG90OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgRmxvYXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NCkKKiBtcF9iaXRjbnRfdDogICAgICAgICAgICAgICAgICAgICAgICAgICBOb21lbmNsYXR1cmUgYW5kIFR5cGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0MikKKiBtcF9iaXRzX3Blcl9saW1iOiAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgTWFjcm9zIGFuZCBDb25zdGFudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3KQoqIG1wX2V4cF90OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbWVuY2xhdHVyZSBhbmQgVHlwZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI3KQoqIG1wX2dldF9tZW1vcnlfZnVuY3Rpb25zOiAgICAgICAgICAgICAgIEN1c3RvbSBBbGxvY2F0aW9uLiAgIChsaW5lICA5MCkKKiBtcF9saW1iX3Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb21lbmNsYXR1cmUgYW5kIFR5cGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMSkKKiBtcF9zZXRfbWVtb3J5X2Z1bmN0aW9uczogICAgICAgICAgICAgICBDdXN0b20gQWxsb2NhdGlvbi4gICAobGluZSAgMTgpCiogbXBfc2l6ZV90OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9tZW5jbGF0dXJlIGFuZCBUeXBlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzcpCiogbXBmX2FiczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQgQXJpdGhtZXRpYy4gICAgKGxpbmUgIDQ3KQoqIG1wZl9hZGQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0IEFyaXRobWV0aWMuICAgIChsaW5lICAgNykKKiBtcGZfYWRkX3VpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdCBBcml0aG1ldGljLiAgICAobGluZSAgIDkpCiogbXBmX2NlaWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlzY2VsbGFuZW91cyBGbG9hdCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3KQoqIG1wZl9jbGFzczogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgR2VuZXJhbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjApCiogbXBmX2NsYXNzOjpmaXRzX3NpbnRfcDogICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBGbG9hdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg3KQoqIG1wZl9jbGFzczo6Zml0c19zbG9uZ19wOiAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgRmxvYXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4OCkKKiBtcGZfY2xhc3M6OmZpdHNfc3Nob3J0X3A6ICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEZsb2F0cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODkpCiogbXBmX2NsYXNzOjpmaXRzX3VpbnRfcDogICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBGbG9hdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkwKQoqIG1wZl9jbGFzczo6Zml0c191bG9uZ19wOiAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgRmxvYXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MSkKKiBtcGZfY2xhc3M6OmZpdHNfdXNob3J0X3A6ICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEZsb2F0cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTIpCiogbXBmX2NsYXNzOjpnZXRfZDogICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBGbG9hdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk1KQoqIG1wZl9jbGFzczo6Z2V0X21wZl90OiAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgR2VuZXJhbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjYpCiogbXBmX2NsYXNzOjpnZXRfcHJlYzogICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBGbG9hdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE1KQoqIG1wZl9jbGFzczo6Z2V0X3NpOiAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgRmxvYXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NikKKiBtcGZfY2xhc3M6OmdldF9zdHI6ICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEZsb2F0cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTgpCiogbXBmX2NsYXNzOjpnZXRfdWk6ICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBGbG9hdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk5KQoqIG1wZl9jbGFzczo6bXBmX2NsYXNzOiAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgRmxvYXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMikKKiBtcGZfY2xhc3M6Om9wZXJhdG9yPTogICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEZsb2F0cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjApCiogbXBmX2NsYXNzOjpzZXRfcHJlYzogICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBGbG9hdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE2KQoqIG1wZl9jbGFzczo6c2V0X3ByZWNfcmF3OiAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgRmxvYXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNykKKiBtcGZfY2xhc3M6OnNldF9zdHI6ICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEZsb2F0cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDApCiogbXBmX2NsYXNzOjpzd2FwOiAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBGbG9hdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA0KQoqIG1wZl9jbGVhcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemluZyBGbG9hdHMuIChsaW5lICAzNykKKiBtcGZfY2xlYXJzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXppbmcgRmxvYXRzLiAobGluZSAgNDEpCiogbXBmX2NtcDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQgQ29tcGFyaXNvbi4gICAgKGxpbmUgICA3KQoqIG1wZl9jbXBfZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0IENvbXBhcmlzb24uICAgIChsaW5lICAgOCkKKiBtcGZfY21wX3NpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdCBDb21wYXJpc29uLiAgICAobGluZSAgMTApCiogbXBmX2NtcF91aTogICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQgQ29tcGFyaXNvbi4gICAgKGxpbmUgICA5KQoqIG1wZl9kaXY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0IEFyaXRobWV0aWMuICAgIChsaW5lICAyOSkKKiBtcGZfZGl2XzJleHA6ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdCBBcml0aG1ldGljLiAgICAobGluZSAgNTUpCiogbXBmX2Rpdl91aTogICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQgQXJpdGhtZXRpYy4gICAgKGxpbmUgIDMzKQoqIG1wZl9lcTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0IENvbXBhcmlzb24uICAgIChsaW5lICAxOCkKKiBtcGZfZml0c19zaW50X3A6ICAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEZsb2F0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjApCiogbXBmX2ZpdHNfc2xvbmdfcDogICAgICAgICAgICAgICAgICAgICAgTWlzY2VsbGFuZW91cyBGbG9hdCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE4KQoqIG1wZl9maXRzX3NzaG9ydF9wOiAgICAgICAgICAgICAgICAgICAgIE1pc2NlbGxhbmVvdXMgRmxvYXQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMikKKiBtcGZfZml0c191aW50X3A6ICAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEZsb2F0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTkpCiogbXBmX2ZpdHNfdWxvbmdfcDogICAgICAgICAgICAgICAgICAgICAgTWlzY2VsbGFuZW91cyBGbG9hdCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE3KQoqIG1wZl9maXRzX3VzaG9ydF9wOiAgICAgICAgICAgICAgICAgICAgIE1pc2NlbGxhbmVvdXMgRmxvYXQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMSkKKiBtcGZfZmxvb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEZsb2F0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDgpCiogbXBmX2dldF9kOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZyBGbG9hdHMuICAgKGxpbmUgICA3KQoqIG1wZl9nZXRfZF8yZXhwOiAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmcgRmxvYXRzLiAgIChsaW5lICAxNykKKiBtcGZfZ2V0X2RlZmF1bHRfcHJlYzogICAgICAgICAgICAgICAgICBJbml0aWFsaXppbmcgRmxvYXRzLiAobGluZSAgMTIpCiogbXBmX2dldF9wcmVjOiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6aW5nIEZsb2F0cy4gKGxpbmUgIDYyKQoqIG1wZl9nZXRfc2k6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmcgRmxvYXRzLiAgIChsaW5lICAyOCkKKiBtcGZfZ2V0X3N0cjogICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nIEZsb2F0cy4gICAobGluZSAgMzgpCiogbXBmX2dldF91aTogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZyBGbG9hdHMuICAgKGxpbmUgIDI5KQoqIG1wZl9pbml0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemluZyBGbG9hdHMuIChsaW5lICAxOSkKKiBtcGZfaW5pdDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXppbmcgRmxvYXRzLiAobGluZSAgMjYpCiogbXBmX2luaXRfc2V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltdWx0YW5lb3VzIEZsb2F0IEluaXQgJiBBc3NpZ24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE2KQoqIG1wZl9pbml0X3NldF9kOiAgICAgICAgICAgICAgICAgICAgICAgIFNpbXVsdGFuZW91cyBGbG9hdCBJbml0ICYgQXNzaWduLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOSkKKiBtcGZfaW5pdF9zZXRfc2k6ICAgICAgICAgICAgICAgICAgICAgICBTaW11bHRhbmVvdXMgRmxvYXQgSW5pdCAmIEFzc2lnbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTgpCiogbXBmX2luaXRfc2V0X3N0cjogICAgICAgICAgICAgICAgICAgICAgU2ltdWx0YW5lb3VzIEZsb2F0IEluaXQgJiBBc3NpZ24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI2KQoqIG1wZl9pbml0X3NldF91aTogICAgICAgICAgICAgICAgICAgICAgIFNpbXVsdGFuZW91cyBGbG9hdCBJbml0ICYgQXNzaWduLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNykKKiBtcGZfaW5pdHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXppbmcgRmxvYXRzLiAobGluZSAgMzEpCiogbXBmX2lucF9zdHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgSS9PIG9mIEZsb2F0cy4gICAgICAgKGxpbmUgIDM5KQoqIG1wZl9pbnRlZ2VyX3A6ICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2NlbGxhbmVvdXMgRmxvYXQgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNCkKKiBtcGZfbXVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdCBBcml0aG1ldGljLiAgICAobGluZSAgMTkpCiogbXBmX211bF8yZXhwOiAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQgQXJpdGhtZXRpYy4gICAgKGxpbmUgIDUxKQoqIG1wZl9tdWxfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0IEFyaXRobWV0aWMuICAgIChsaW5lICAyMSkKKiBtcGZfbmVnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdCBBcml0aG1ldGljLiAgICAobGluZSAgNDQpCiogbXBmX291dF9zdHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgSS9PIG9mIEZsb2F0cy4gICAgICAgKGxpbmUgIDE5KQoqIG1wZl9wb3dfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0IEFyaXRobWV0aWMuICAgIChsaW5lICA0MSkKKiBtcGZfcmFuZG9tMjogICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEZsb2F0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzcpCiogbXBmX3JlbGRpZmY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQgQ29tcGFyaXNvbi4gICAgKGxpbmUgIDMxKQoqIG1wZl9zZXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbmluZyBGbG9hdHMuICAgIChsaW5lICAxMCkKKiBtcGZfc2V0X2Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25pbmcgRmxvYXRzLiAgICAobGluZSAgMTMpCiogbXBmX3NldF9kZWZhdWx0X3ByZWM6ICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6aW5nIEZsb2F0cy4gKGxpbmUgICA3KQoqIG1wZl9zZXRfcHJlYzogICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemluZyBGbG9hdHMuIChsaW5lICA2NSkKKiBtcGZfc2V0X3ByZWNfcmF3OiAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXppbmcgRmxvYXRzLiAobGluZSAgNzIpCiogbXBmX3NldF9xOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWduaW5nIEZsb2F0cy4gICAgKGxpbmUgIDE1KQoqIG1wZl9zZXRfc2k6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbmluZyBGbG9hdHMuICAgIChsaW5lICAxMikKKiBtcGZfc2V0X3N0cjogICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25pbmcgRmxvYXRzLiAgICAobGluZSAgMTgpCiogbXBmX3NldF91aTogICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWduaW5nIEZsb2F0cy4gICAgKGxpbmUgIDExKQoqIG1wZl9zZXRfejogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbmluZyBGbG9hdHMuICAgIChsaW5lICAxNCkKKiBtcGZfc2duOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdCBDb21wYXJpc29uLiAgICAobGluZSAgMzUpCiogbXBmX3NxcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQgQXJpdGhtZXRpYy4gICAgKGxpbmUgIDM2KQoqIG1wZl9zcXJ0X3VpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0IEFyaXRobWV0aWMuICAgIChsaW5lICAzNykKKiBtcGZfc3ViOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdCBBcml0aG1ldGljLiAgICAobGluZSAgMTIpCiogbXBmX3N1Yl91aTogICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQgQXJpdGhtZXRpYy4gICAgKGxpbmUgIDE2KQoqIG1wZl9zd2FwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbmluZyBGbG9hdHMuICAgIChsaW5lICA1MikKKiBtcGZfdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb21lbmNsYXR1cmUgYW5kIFR5cGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMSkKKiBtcGZfdHJ1bmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEZsb2F0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDkpCiogbXBmX3VpX2RpdjogICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQgQXJpdGhtZXRpYy4gICAgKGxpbmUgIDMxKQoqIG1wZl91aV9zdWI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0IEFyaXRobWV0aWMuICAgIChsaW5lICAxNCkKKiBtcGZfdXJhbmRvbWI6ICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEZsb2F0IEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjcpCiogbXBuX2FkZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgIDY5KQoqIG1wbl9hZGRfMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lICA2NCkKKiBtcG5fYWRkX246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSAgNTQpCiogbXBuX2FkZG11bF8xOiAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgMTUwKQoqIG1wbl9hbmRfbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDQzNykKKiBtcG5fYW5kbl9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA0NTIpCiogbXBuX2NtcDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgMjg2KQoqIG1wbl9jbmRfYWRkX246ICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDUzMCkKKiBtcG5fY25kX3N1Yl9uOiAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA1MzIpCiogbXBuX2NvbTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNDc3KQoqIG1wbl9jb3B5ZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDQ4NikKKiBtcG5fY29weWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA0ODIpCiogbXBuX2RpdmV4YWN0X2J5MzogICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgMjMxKQoqIG1wbl9kaXZleGFjdF9ieTNjOiAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDIzMykKKiBtcG5fZGl2bW9kOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSAyMjYpCiogbXBuX2Rpdm1vZF8xOiAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgMjEwKQoqIG1wbl9kaXZyZW06ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDE4NCkKKiBtcG5fZGl2cmVtXzE6ICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSAyMDgpCiogbXBuX2djZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgMjkxKQoqIG1wbl9nY2RfMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDMwMSkKKiBtcG5fZ2NkZXh0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSAzMDcpCiogbXBuX2dldF9zdHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgMzYxKQoqIG1wbl9oYW1kaXN0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDQyNikKKiBtcG5faW9yX246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA0NDIpCiogbXBuX2lvcm5fbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNDU3KQoqIG1wbl9sc2hpZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDI2MikKKiBtcG5fbW9kXzE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSAyNTcpCiogbXBuX211bDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgMTE2KQoqIG1wbl9tdWxfMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDEzNSkKKiBtcG5fbXVsX246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSAxMDUpCiogbXBuX25hbmRfbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNDYyKQoqIG1wbl9uZWc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lICA5OCkKKiBtcG5fbmlvcl9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA0NjcpCiogbXBuX3BlcmZlY3Rfc3F1YXJlX3A6ICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNDMyKQoqIG1wbl9wb3Bjb3VudDogICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDQyMikKKiBtcG5fcmFuZG9tOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA0MTEpCiogbXBuX3JhbmRvbTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNDEyKQoqIG1wbl9yc2hpZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDI3NCkKKiBtcG5fc2NhbjA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSAzOTYpCiogbXBuX3NjYW4xOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNDA0KQoqIG1wbl9zZWNfYWRkXzE6ICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDU0MykKKiBtcG5fc2VjX2Rpdl9xcjogICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA2MTMpCiogbXBuX3NlY19kaXZfcXJfaXRjaDogICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNjE0KQoqIG1wbl9zZWNfZGl2X3I6ICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDYzMCkKKiBtcG5fc2VjX2Rpdl9yX2l0Y2g6ICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA2MzEpCiogbXBuX3NlY19pbnZlcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNjQ1KQoqIG1wbl9zZWNfaW52ZXJ0X2l0Y2g6ICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDY0NikKKiBtcG5fc2VjX211bDogICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA1NTgpCiogbXBuX3NlY19tdWxfaXRjaDogICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNTU5KQoqIG1wbl9zZWNfcG93bTogICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDU4OCkKKiBtcG5fc2VjX3Bvd21faXRjaDogICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA1OTApCiogbXBuX3NlY19zcXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNTczKQoqIG1wbl9zZWNfc3FyX2l0Y2g6ICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDU3NCkKKiBtcG5fc2VjX3N1Yl8xOiAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA1NDUpCiogbXBuX3NlY190YWJzZWxlY3Q6ICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNjA0KQoqIG1wbl9zZXRfc3RyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDM3NikKKiBtcG5fc2l6ZWluYmFzZTogICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSAzNTQpCiogbXBuX3NxcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgMTI3KQoqIG1wbl9zcXJ0cmVtOiAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDMzNikKKiBtcG5fc3ViOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSAgOTApCiogbXBuX3N1Yl8xOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgIDg1KQoqIG1wbl9zdWJfbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lICA3NikKKiBtcG5fc3VibXVsXzE6ICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSAxNjEpCiogbXBuX3RkaXZfcXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgMTczKQoqIG1wbl94bm9yX246ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvdy1sZXZlbCBGdW5jdGlvbnMuIChsaW5lIDQ3MikKKiBtcG5feG9yX246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3ctbGV2ZWwgRnVuY3Rpb25zLiAobGluZSA0NDcpCiogbXBuX3plcm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93LWxldmVsIEZ1bmN0aW9ucy4gKGxpbmUgNDg5KQoqIG1wcV9hYnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhdGlvbmFsIEFyaXRobWV0aWMuIChsaW5lICAzNCkKKiBtcHFfYWRkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYXRpb25hbCBBcml0aG1ldGljLiAobGluZSAgIDgpCiogbXBxX2Nhbm9uaWNhbGl6ZTogICAgICAgICAgICAgICAgICAgICAgUmF0aW9uYWwgTnVtYmVyIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjIpCiogbXBxX2NsYXNzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBHZW5lcmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOSkKKiBtcHFfY2xhc3M6OmNhbm9uaWNhbGl6ZTogICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDMpCiogbXBxX2NsYXNzOjpnZXRfZDogICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBSYXRpb25hbHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUyKQoqIG1wcV9jbGFzczo6Z2V0X2RlbjogICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgUmF0aW9uYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NikKKiBtcHFfY2xhc3M6OmdldF9kZW5fbXB6X3Q6ICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzYpCiogbXBxX2NsYXNzOjpnZXRfbXBxX3Q6ICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBHZW5lcmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NSkKKiBtcHFfY2xhc3M6OmdldF9udW06ICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjUpCiogbXBxX2NsYXNzOjpnZXRfbnVtX21wel90OiAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBSYXRpb25hbHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc1KQoqIG1wcV9jbGFzczo6Z2V0X3N0cjogICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgUmF0aW9uYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MykKKiBtcHFfY2xhc3M6Om1wcV9jbGFzczogICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTIpCiogbXBxX2NsYXNzOjpzZXRfc3RyOiAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBSYXRpb25hbHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU1KQoqIG1wcV9jbGFzczo6c3dhcDogICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgUmF0aW9uYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NykKKiBtcHFfY2xlYXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXppbmcgUmF0aW9uYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNikKKiBtcHFfY2xlYXJzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXppbmcgUmF0aW9uYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMCkKKiBtcHFfY21wOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJpbmcgUmF0aW9uYWxzLiAobGluZSAgIDcpCiogbXBxX2NtcF9zaTogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyaW5nIFJhdGlvbmFscy4gKGxpbmUgIDE3KQoqIG1wcV9jbXBfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmluZyBSYXRpb25hbHMuIChsaW5lICAxNSkKKiBtcHFfZGVucmVmOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBseWluZyBJbnRlZ2VyIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTgpCiogbXBxX2RpdjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF0aW9uYWwgQXJpdGhtZXRpYy4gKGxpbmUgIDI0KQoqIG1wcV9kaXZfMmV4cDogICAgICAgICAgICAgICAgICAgICAgICAgIFJhdGlvbmFsIEFyaXRobWV0aWMuIChsaW5lICAyOCkKKiBtcHFfZXF1YWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJpbmcgUmF0aW9uYWxzLiAobGluZSAgMzMpCiogbXBxX2dldF9kOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF0aW9uYWwgQ29udmVyc2lvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3KQoqIG1wcV9nZXRfZGVuOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5aW5nIEludGVnZXIgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNCkKKiBtcHFfZ2V0X251bTogICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBseWluZyBJbnRlZ2VyIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjMpCiogbXBxX2dldF9zdHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF0aW9uYWwgQ29udmVyc2lvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIyKQoqIG1wcV9pbml0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemluZyBSYXRpb25hbHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3KQoqIG1wcV9pbml0czogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemluZyBSYXRpb25hbHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyKQoqIG1wcV9pbnBfc3RyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEkvTyBvZiBSYXRpb25hbHMuICAgIChsaW5lICAyNykKKiBtcHFfaW52OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYXRpb25hbCBBcml0aG1ldGljLiAobGluZSAgMzcpCiogbXBxX211bDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF0aW9uYWwgQXJpdGhtZXRpYy4gKGxpbmUgIDE2KQoqIG1wcV9tdWxfMmV4cDogICAgICAgICAgICAgICAgICAgICAgICAgIFJhdGlvbmFsIEFyaXRobWV0aWMuIChsaW5lICAyMCkKKiBtcHFfbmVnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYXRpb25hbCBBcml0aG1ldGljLiAobGluZSAgMzEpCiogbXBxX251bXJlZjogICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHlpbmcgSW50ZWdlciBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE3KQoqIG1wcV9vdXRfc3RyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEkvTyBvZiBSYXRpb25hbHMuICAgIChsaW5lICAxOSkKKiBtcHFfc2V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXppbmcgUmF0aW9uYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNCkKKiBtcHFfc2V0X2Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYXRpb25hbCBDb252ZXJzaW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTcpCiogbXBxX3NldF9kZW46ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHlpbmcgSW50ZWdlciBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI2KQoqIG1wcV9zZXRfZjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhdGlvbmFsIENvbnZlcnNpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOCkKKiBtcHFfc2V0X251bTogICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBseWluZyBJbnRlZ2VyIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjUpCiogbXBxX3NldF9zaTogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6aW5nIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzEpCiogbXBxX3NldF9zdHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6aW5nIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzYpCiogbXBxX3NldF91aTogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6aW5nIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjkpCiogbXBxX3NldF96OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6aW5nIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjUpCiogbXBxX3NnbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyaW5nIFJhdGlvbmFscy4gKGxpbmUgIDI3KQoqIG1wcV9zdWI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhdGlvbmFsIEFyaXRobWV0aWMuIChsaW5lICAxMikKKiBtcHFfc3dhcDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXppbmcgUmF0aW9uYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NikKKiBtcHFfdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb21lbmNsYXR1cmUgYW5kIFR5cGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNikKKiBtcHpfMmZhY191aTogICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTQpCiogbXB6X2FiczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBBcml0aG1ldGljLiAgKGxpbmUgIDQ1KQoqIG1wel9hZGQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgQXJpdGhtZXRpYy4gIChsaW5lICAgNykKKiBtcHpfYWRkX3VpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEFyaXRobWV0aWMuICAobGluZSAgIDkpCiogbXB6X2FkZG11bDogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBBcml0aG1ldGljLiAgKGxpbmUgIDI2KQoqIG1wel9hZGRtdWxfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgQXJpdGhtZXRpYy4gIChsaW5lICAyOCkKKiBtcHpfYW5kOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIExvZ2ljIGFuZCBCaXQgRmlkZGxpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDExKQoqIG1wel9hcnJheV9pbml0OiAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgU3BlY2lhbCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDExKQoqIG1wel9iaW5fdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyNikKKiBtcHpfYmluX3VpdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjgpCiogbXB6X2NkaXZfcTogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgIDEzKQoqIG1wel9jZGl2X3FfMmV4cDogICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lICAyNikKKiBtcHpfY2Rpdl9xX3VpOiAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAgMTgpCiogbXB6X2NkaXZfcXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgIDE2KQoqIG1wel9jZGl2X3FyX3VpOiAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lICAyMikKKiBtcHpfY2Rpdl9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAgMTQpCiogbXB6X2NkaXZfcl8yZXhwOiAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgIDI4KQoqIG1wel9jZGl2X3JfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lICAyMCkKKiBtcHpfY2Rpdl91aTogICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAgMjQpCiogbXB6X2NsYXNzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBHZW5lcmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOCkKKiBtcHpfY2xhc3M6OmZpdHNfc2ludF9wOiAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MCkKKiBtcHpfY2xhc3M6OmZpdHNfc2xvbmdfcDogICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MSkKKiBtcHpfY2xhc3M6OmZpdHNfc3Nob3J0X3A6ICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MikKKiBtcHpfY2xhc3M6OmZpdHNfdWludF9wOiAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MykKKiBtcHpfY2xhc3M6OmZpdHNfdWxvbmdfcDogICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NCkKKiBtcHpfY2xhc3M6OmZpdHNfdXNob3J0X3A6ICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NSkKKiBtcHpfY2xhc3M6OmdldF9kOiAgICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NikKKiBtcHpfY2xhc3M6OmdldF9tcHpfdDogICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEdlbmVyYWwuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY0KQoqIG1wel9jbGFzczo6Z2V0X3NpOiAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgSW50ZWdlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU3KQoqIG1wel9jbGFzczo6Z2V0X3N0cjogICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgSW50ZWdlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU4KQoqIG1wel9jbGFzczo6Z2V0X3VpOiAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgSW50ZWdlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU5KQoqIG1wel9jbGFzczo6bXB6X2NsYXNzOiAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgSW50ZWdlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIxKQoqIG1wel9jbGFzczo6c2V0X3N0cjogICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgSW50ZWdlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYwKQoqIG1wel9jbGFzczo6c3dhcDogICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgSW50ZWdlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY0KQoqIG1wel9jbGVhcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemluZyBJbnRlZ2Vycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDkpCiogbXB6X2NsZWFyczogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6aW5nIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MykKKiBtcHpfY2xyYml0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIExvZ2ljIGFuZCBCaXQgRmlkZGxpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU2KQoqIG1wel9jbXA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgQ29tcGFyaXNvbnMuIChsaW5lICAgNykKKiBtcHpfY21wX2Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIENvbXBhcmlzb25zLiAobGluZSAgIDgpCiogbXB6X2NtcF9zaTogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBDb21wYXJpc29ucy4gKGxpbmUgICA5KQoqIG1wel9jbXBfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgQ29tcGFyaXNvbnMuIChsaW5lICAxMCkKKiBtcHpfY21wYWJzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIENvbXBhcmlzb25zLiAobGluZSAgMTgpCiogbXB6X2NtcGFic19kOiAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBDb21wYXJpc29ucy4gKGxpbmUgIDE5KQoqIG1wel9jbXBhYnNfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgQ29tcGFyaXNvbnMuIChsaW5lICAyMCkKKiBtcHpfY29tOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIExvZ2ljIGFuZCBCaXQgRmlkZGxpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIwKQoqIG1wel9jb21iaXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgTG9naWMgYW5kIEJpdCBGaWRkbGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTkpCiogbXB6X2NvbmdydWVudF8yZXhwX3A6ICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgMTM3KQoqIG1wel9jb25ncnVlbnRfcDogICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lIDEzMykKKiBtcHpfY29uZ3J1ZW50X3VpX3A6ICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAxMzUpCiogbXB6X2RpdmV4YWN0OiAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgMTEwKQoqIG1wel9kaXZleGFjdF91aTogICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lIDExMikKKiBtcHpfZGl2aXNpYmxlXzJleHBfcDogICAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAxMjMpCiogbXB6X2RpdmlzaWJsZV9wOiAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgMTIwKQoqIG1wel9kaXZpc2libGVfdWlfcDogICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lIDEyMikKKiBtcHpfZXZlbl9wOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEludGVnZXIgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOCkKKiBtcHpfZXhwb3J0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEltcG9ydCBhbmQgRXhwb3J0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0NSkKKiBtcHpfZmFjX3VpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTMpCiogbXB6X2ZkaXZfcTogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgIDMwKQoqIG1wel9mZGl2X3FfMmV4cDogICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lICA0MykKKiBtcHpfZmRpdl9xX3VpOiAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAgMzUpCiogbXB6X2ZkaXZfcXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgIDMzKQoqIG1wel9mZGl2X3FyX3VpOiAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lICAzOSkKKiBtcHpfZmRpdl9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAgMzEpCiogbXB6X2ZkaXZfcl8yZXhwOiAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgIDQ1KQoqIG1wel9mZGl2X3JfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lICAzNykKKiBtcHpfZmRpdl91aTogICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAgNDEpCiogbXB6X2ZpYjJfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM2KQoqIG1wel9maWJfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzNCkKKiBtcHpfZml0c19zaW50X3A6ICAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEludGVnZXIgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMCkKKiBtcHpfZml0c19zbG9uZ19wOiAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEludGVnZXIgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOCkKKiBtcHpfZml0c19zc2hvcnRfcDogICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEludGVnZXIgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMikKKiBtcHpfZml0c191aW50X3A6ICAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEludGVnZXIgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOSkKKiBtcHpfZml0c191bG9uZ19wOiAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEludGVnZXIgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNykKKiBtcHpfZml0c191c2hvcnRfcDogICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEludGVnZXIgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMSkKKiBtcHpfZ2NkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzIpCiogbXB6X2djZF91aTogICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM5KQoqIG1wel9nY2RleHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0OSkKKiBtcHpfZ2V0X2Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nIEludGVnZXJzLiAobGluZSAgMjcpCiogbXB6X2dldF9kXzJleHA6ICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZyBJbnRlZ2Vycy4gKGxpbmUgIDM2KQoqIG1wel9nZXRfc2k6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmcgSW50ZWdlcnMuIChsaW5lICAxOCkKKiBtcHpfZ2V0X3N0cjogICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nIEludGVnZXJzLiAobGluZSAgNDcpCiogbXB6X2dldF91aTogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZyBJbnRlZ2Vycy4gKGxpbmUgIDExKQoqIG1wel9nZXRsaW1ibjogICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgU3BlY2lhbCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIzKQoqIG1wel9oYW1kaXN0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgTG9naWMgYW5kIEJpdCBGaWRkbGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjkpCiogbXB6X2ltcG9ydDogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBJbXBvcnQgYW5kIEV4cG9ydC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTEpCiogbXB6X2luaXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6aW5nIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNikKKiBtcHpfaW5pdDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXppbmcgSW50ZWdlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMzKQoqIG1wel9pbml0X3NldDogICAgICAgICAgICAgICAgICAgICAgICAgIFNpbXVsdGFuZW91cyBJbnRlZ2VyIEluaXQgJiBBc3NpZ24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI3KQoqIG1wel9pbml0X3NldF9kOiAgICAgICAgICAgICAgICAgICAgICAgIFNpbXVsdGFuZW91cyBJbnRlZ2VyIEluaXQgJiBBc3NpZ24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMwKQoqIG1wel9pbml0X3NldF9zaTogICAgICAgICAgICAgICAgICAgICAgIFNpbXVsdGFuZW91cyBJbnRlZ2VyIEluaXQgJiBBc3NpZ24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI5KQoqIG1wel9pbml0X3NldF9zdHI6ICAgICAgICAgICAgICAgICAgICAgIFNpbXVsdGFuZW91cyBJbnRlZ2VyIEluaXQgJiBBc3NpZ24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM1KQoqIG1wel9pbml0X3NldF91aTogICAgICAgICAgICAgICAgICAgICAgIFNpbXVsdGFuZW91cyBJbnRlZ2VyIEluaXQgJiBBc3NpZ24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI4KQoqIG1wel9pbml0czogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemluZyBJbnRlZ2Vycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjkpCiogbXB6X2lucF9yYXc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgSS9PIG9mIEludGVnZXJzLiAgICAgKGxpbmUgIDYyKQoqIG1wel9pbnBfc3RyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEkvTyBvZiBJbnRlZ2Vycy4gICAgIChsaW5lICAzMSkKKiBtcHpfaW52ZXJ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzYpCiogbXB6X2lvcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBMb2dpYyBhbmQgQml0IEZpZGRsaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNCkKKiBtcHpfamFjb2JpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODMpCiogbXB6X2tyb25lY2tlcjogICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkxKQoqIG1wel9rcm9uZWNrZXJfc2k6ICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MikKKiBtcHpfa3JvbmVja2VyX3VpOiAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTMpCiogbXB6X2xjbTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY4KQoqIG1wel9sY21fdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3MCkKKiBtcHpfbGVnZW5kcmU6ICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODYpCiogbXB6X2xpbWJzX2ZpbmlzaDogICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBTcGVjaWFsIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDgpCiogbXB6X2xpbWJzX21vZGlmeTogICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBTcGVjaWFsIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDEpCiogbXB6X2xpbWJzX3JlYWQ6ICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBTcGVjaWFsIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzUpCiogbXB6X2xpbWJzX3dyaXRlOiAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBTcGVjaWFsIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDApCiogbXB6X2x1Y251bTJfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ3KQoqIG1wel9sdWNudW1fdWk6ICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NSkKKiBtcHpfbWZhY191aXVpOiAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTYpCiogbXB6X21vZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgMTAwKQoqIG1wel9tb2RfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lIDEwMikKKiBtcHpfbXVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEFyaXRobWV0aWMuICAobGluZSAgMTkpCiogbXB6X211bF8yZXhwOiAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBBcml0aG1ldGljLiAgKGxpbmUgIDM4KQoqIG1wel9tdWxfc2k6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgQXJpdGhtZXRpYy4gIChsaW5lICAyMCkKKiBtcHpfbXVsX3VpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEFyaXRobWV0aWMuICAobGluZSAgMjIpCiogbXB6X25lZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBBcml0aG1ldGljLiAgKGxpbmUgIDQyKQoqIG1wel9uZXh0cHJpbWU6ICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBUaGVvcmV0aWMgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNSkKKiBtcHpfb2RkX3A6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzIEludGVnZXIgRnVuY3Rpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNykKKiBtcHpfb3V0X3JhdzogICAgICAgICAgICAgICAgICAgICAgICAgICBJL08gb2YgSW50ZWdlcnMuICAgICAobGluZSAgNDYpCiogbXB6X291dF9zdHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgSS9PIG9mIEludGVnZXJzLiAgICAgKGxpbmUgIDE5KQoqIG1wel9wZXJmZWN0X3Bvd2VyX3A6ICAgICAgICAgICAgICAgICAgIEludGVnZXIgUm9vdHMuICAgICAgIChsaW5lICAyOCkKKiBtcHpfcGVyZmVjdF9zcXVhcmVfcDogICAgICAgICAgICAgICAgICBJbnRlZ2VyIFJvb3RzLiAgICAgICAobGluZSAgMzcpCiogbXB6X3BvcGNvdW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBMb2dpYyBhbmQgQml0IEZpZGRsaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMykKKiBtcHpfcG93X3VpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEV4cG9uZW50aWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMSkKKiBtcHpfcG93bTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEV4cG9uZW50aWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOCkKKiBtcHpfcG93bV9zZWM6ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEV4cG9uZW50aWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOCkKKiBtcHpfcG93bV91aTogICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEV4cG9uZW50aWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMCkKKiBtcHpfcHJpbW9yaWFsX3VpOiAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjEpCiogbXB6X3Byb2JhYl9wcmltZV9wOiAgICAgICAgICAgICAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3KQoqIG1wel9yYW5kb206ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgUmFuZG9tIE51bWJlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQyKQoqIG1wel9yYW5kb20yOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgUmFuZG9tIE51bWJlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUxKQoqIG1wel9yZWFsbG9jMjogICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemluZyBJbnRlZ2Vycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTcpCiogbXB6X3JlbW92ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA4KQoqIG1wel9yb2luaXRfbjogICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgU3BlY2lhbCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY5KQoqIE1QWl9ST0lOSVRfTjogICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgU3BlY2lhbCBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg0KQoqIG1wel9yb290OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgUm9vdHMuICAgICAgIChsaW5lICAgOCkKKiBtcHpfcm9vdHJlbTogICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIFJvb3RzLiAgICAgICAobGluZSAgMTQpCiogbXB6X3JyYW5kb21iOiAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBSYW5kb20gTnVtYmVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzEpCiogbXB6X3NjYW4wOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBMb2dpYyBhbmQgQml0IEZpZGRsaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzOCkKKiBtcHpfc2NhbjE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIExvZ2ljIGFuZCBCaXQgRmlkZGxpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQwKQoqIG1wel9zZXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbmluZyBJbnRlZ2Vycy4gIChsaW5lICAxMCkKKiBtcHpfc2V0X2Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25pbmcgSW50ZWdlcnMuICAobGluZSAgMTMpCiogbXB6X3NldF9mOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWduaW5nIEludGVnZXJzLiAgKGxpbmUgIDE1KQoqIG1wel9zZXRfcTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbmluZyBJbnRlZ2Vycy4gIChsaW5lICAxNCkKKiBtcHpfc2V0X3NpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25pbmcgSW50ZWdlcnMuICAobGluZSAgMTIpCiogbXB6X3NldF9zdHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWduaW5nIEludGVnZXJzLiAgKGxpbmUgIDIxKQoqIG1wel9zZXRfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbmluZyBJbnRlZ2Vycy4gIChsaW5lICAxMSkKKiBtcHpfc2V0Yml0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIExvZ2ljIGFuZCBCaXQgRmlkZGxpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUzKQoqIG1wel9zZ246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgQ29tcGFyaXNvbnMuIChsaW5lICAyOCkKKiBtcHpfc2lfa3JvbmVja2VyOiAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgVGhlb3JldGljIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTQpCiogbXB6X3NpemU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBTcGVjaWFsIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzEpCiogbXB6X3NpemVpbmJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgTWlzY2VsbGFuZW91cyBJbnRlZ2VyIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjMpCiogbXB6X3NxcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBSb290cy4gICAgICAgKGxpbmUgIDE4KQoqIG1wel9zcXJ0cmVtOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgUm9vdHMuICAgICAgIChsaW5lICAyMSkKKiBtcHpfc3ViOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEFyaXRobWV0aWMuICAobGluZSAgMTIpCiogbXB6X3N1Yl91aTogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBBcml0aG1ldGljLiAgKGxpbmUgIDE0KQoqIG1wel9zdWJtdWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgQXJpdGhtZXRpYy4gIChsaW5lICAzMikKKiBtcHpfc3VibXVsX3VpOiAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIEFyaXRobWV0aWMuICAobGluZSAgMzQpCiogbXB6X3N3YXA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWduaW5nIEludGVnZXJzLiAgKGxpbmUgIDM3KQoqIG1wel90OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbWVuY2xhdHVyZSBhbmQgVHlwZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2KQoqIG1wel90ZGl2X3E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lICA0NykKKiBtcHpfdGRpdl9xXzJleHA6ICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAgNjApCiogbXB6X3RkaXZfcV91aTogICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgIDUyKQoqIG1wel90ZGl2X3FyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lICA1MCkKKiBtcHpfdGRpdl9xcl91aTogICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAgNTYpCiogbXB6X3RkaXZfcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgIDQ4KQoqIG1wel90ZGl2X3JfMmV4cDogICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRGl2aXNpb24uICAgIChsaW5lICA2MikKKiBtcHpfdGRpdl9yX3VpOiAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIERpdmlzaW9uLiAgICAobGluZSAgNTQpCiogbXB6X3RkaXZfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBEaXZpc2lvbi4gICAgKGxpbmUgIDU4KQoqIG1wel90c3RiaXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgTG9naWMgYW5kIEJpdCBGaWRkbGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjIpCiogbXB6X3VpX2tyb25lY2tlcjogICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIFRoZW9yZXRpYyBGdW5jdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk1KQoqIG1wel91aV9wb3dfdWk6ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgRXhwb25lbnRpYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMzKQoqIG1wel91aV9zdWI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgQXJpdGhtZXRpYy4gIChsaW5lICAxNikKKiBtcHpfdXJhbmRvbWI6ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIFJhbmRvbSBOdW1iZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNCkKKiBtcHpfdXJhbmRvbW06ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIFJhbmRvbSBOdW1iZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMykKKiBtcHpfeG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIExvZ2ljIGFuZCBCaXQgRmlkZGxpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE3KQoqIG9wZXJhdG9yIiIgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgRmxvYXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NikKKiBvcGVyYXRvciIiIDwyPjogICAgICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMCkKKiBvcGVyYXRvciIiOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzgpCiogb3BlcmF0b3IlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBJbnRlZ2Vycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzUpCiogb3BlcmF0b3IvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBJbnRlZ2Vycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzQpCiogb3BlcmF0b3I8PDogICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEZvcm1hdHRlZCBPdXRwdXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIwKQoqIG9wZXJhdG9yPj4gPDE+OiAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBGb3JtYXR0ZWQgSW5wdXQuIChsaW5lICAxNCkKKiBvcGVyYXRvcj4+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIFJhdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODUpCiogc2duIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBGbG9hdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAyKQoqIHNnbiA8Mj46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgSW50ZWdlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYyKQoqIHNnbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgUmF0aW9uYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NikKKiBzcXJ0IDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEludGVnZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MykKKiBzcXJ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEZsb2F0cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDMpCiogc3dhcCA8MT46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIEludGVyZmFjZSBGbG9hdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA1KQoqIHN3YXAgPDI+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgSW50ZWdlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY1KQoqIHN3YXA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMrKyBJbnRlcmZhY2UgUmF0aW9uYWxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1OCkKKiB0cnVuYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDKysgSW50ZXJmYWNlIEZsb2F0cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDYpCgoKCh8KTG9jYWwgVmFyaWFibGVzOgpjb2Rpbmc6IGlzby04ODU5LTEKRW5kOgo=