-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathuserjs-base64.js
More file actions
3 lines (3 loc) · 104 KB
/
userjs-base64.js
File metadata and controls
3 lines (3 loc) · 104 KB
1
2
3
// 20260421 v144 user.js as base64 from main repo
// place this in a file named "userjs-base64.js"
const userjsbase64="LyoqKioqKgoqICAgIG5hbWU6IGFya2VuZm94IHVzZXIuanMKKiAgICBkYXRlOiAyMSBBcHJpbCAyMDI2CiogdmVyc2lvbjogMTQ0CiogICAgdXJsczogaHR0cHM6Ly9naXRodWIuY29tL2Fya2VuZm94L3VzZXIuanMgW3JlcG9dCiogICAgICAgIDogaHR0cHM6Ly9hcmtlbmZveC5naXRodWIuaW8vZ3VpLyBbaW50ZXJhY3RpdmVdCiogbGljZW5zZTogTUlUOiBodHRwczovL2dpdGh1Yi5jb20vYXJrZW5mb3gvdXNlci5qcy9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dAoKKiBSRUFETUU6CgogIDEuIENvbnNpZGVyIHVzaW5nIFRvciBCcm93c2VyIGlmIGl0IG1lZXRzIHlvdXIgbmVlZHMgb3IgZml0cyB5b3VyIHRocmVhdCBtb2RlbAogICAgICAgKiBodHRwczovLzIwMTkud3d3LnRvcnByb2plY3Qub3JnL2Fib3V0L3RvcnVzZXJzLmh0bWwKICAyLiBSZWFkIHRoZSBlbnRpcmUgd2lraQogICAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vYXJrZW5mb3gvdXNlci5qcy93aWtpCiAgMy4gSWYgeW91IHNraXBwZWQgc3RlcCAyLCByZXR1cm4gdG8gc3RlcCAyCiAgNC4gTWFrZSBjaGFuZ2VzIGluIGEgdXNlci1vdmVycmlkZXMuanMKICAgICAgICogVGhlcmUgYXJlIG9mdGVuIHRyYWRlLW9mZnMgYW5kIGNvbmZsaWN0cyBiZXR3ZWVuIHNlY3VyaXR5IHZzIHByaXZhY3kgdnMgYW50aS10cmFja2luZwogICAgICAgICBhbmQgdGhlc2UgbmVlZCB0byBiZSBiYWxhbmNlZCBhZ2FpbnN0IGZ1bmN0aW9uYWxpdHkgJiBjb252ZW5pZW5jZSAmIGJyZWFrYWdlCiAgICAgICAqIFNvbWUgc2l0ZSBicmVha2FnZSBhbmQgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgd2lsbCBoYXBwZW4uIEV2ZXJ5b25lJ3MgZXhwZXJpZW5jZSB3aWxsIGRpZmZlcgogICAgICAgICBlLmcuIHNvbWUgdXNlciBkYXRhIGlzIGVyYXNlZCBvbiBleGl0IChzZWN0aW9uIDI4MDApLCBjaGFuZ2UgdGhpcyB0byBzdWl0IHlvdXIgbmVlZHMKICAgICAgICogV2hpbGUgbm90IDEwMCUgZGVmaW5pdGl2ZSwgc2VhcmNoIGZvciAiW1NFVFVQIiB0YWdzCiAgNS4gU29tZSB0YWcgaW5mbwogICAgICAgW1NFVFVQLVNFQ1VSSVRZXSBpdCdzIG9uZSBpdGVtLCByZWFkIGl0CiAgICAgICAgICAgIFtTRVRVUC1XRUJdIGNhbiBjYXVzZSBzb21lIHdlYnNpdGVzIHRvIGJyZWFrCiAgICAgICAgIFtTRVRVUC1DSFJPTUVdIGNoYW5nZXMgaG93IEZpcmVmb3ggaXRzZWxmIGJlaGF2ZXMgKGkuZS4gbm90IGRpcmVjdGx5IHdlYnNpdGUgcmVsYXRlZCkKICAgICAgICAgW1NFVFVQLUhBUkRFTl0gcHJlZnMgeW91IG1heSBsaWtlIHRvIGFkZCB0byBvdmVycmlkZXMKICA2LiBPdmVycmlkZSBSZWNpcGVzOiBodHRwczovL2dpdGh1Yi5jb20vYXJrZW5mb3gvdXNlci5qcy9pc3N1ZXMvMTA4MAoKKiBSRUxFQVNFUzogaHR0cHM6Ly9naXRodWIuY29tL2Fya2VuZm94L3VzZXIuanMvcmVsZWFzZXMKCiAgKiBVc2UgdGhlIGFya2VuZm94IHJlbGVhc2UgdGhhdCBtYXRjaGVzIHlvdXIgRmlyZWZveCB2ZXJzaW9uCiAgICAtIERPTidUIHdhaXQgZm9yIGFya2VuZm94IHRvIHVwZGF0ZSBGaXJlZm94LCBub3RoaW5nIG1ham9yIGNoYW5nZXMgdGhlc2UgZGF5cwogICogRWFjaCByZWxlYXNlCiAgICAtIHJ1biBwcmVmc0NsZWFuZXIgdG8gcmVzZXQgcHJlZnMgbWFkZSBpbmFjdGl2ZSwgaW5jbHVkaW5nIGRlcHJlY2F0ZWQgKDk5OTkpCiAgKiBFU1IgKEV4dGVuZGVkIFN1cHBvcnQgUmVsZWFzZSkKICAgIC0gSXQgaXMgcmVjb21tZW5kZWQgdG8gbm90IHVzZSB0aGUgdXBkYXRlciwgb3IgeW91IHdpbGwgZ2V0IGEgbGF0ZXIgdmVyc2lvbiB3aGljaCBtYXkgY2F1c2UgaXNzdWVzLgogICAgICBTbyB5b3Ugc2hvdWxkIG1hbnVhbGx5IGFwcGVuZCB5b3VyIG92ZXJyaWRlcyAoYW5kIGtlZXAgYSBjb3B5KSwgYW5kIG1hbnVhbGx5IHVwZGF0ZSB3aGVuIHlvdQogICAgICBjaGFuZ2UgRVNSIHJlbGVhc2VzIChhcmtlbmZveCBpcyBhbHJlYWR5IHBhc3QgdGhhdCByZWxlYXNlKQogICAgLSBJZiB5b3UgZGVjaWRlIHRvIGtlZXAgdXBkYXRpbmcsIHRoZW4gdGhlIG9udXMgaXMgb24geW91IC0gYWxzbyBzZWUgc2VjdGlvbiA5OTk5CgoqIElOREVYOgoKICAwMTAwOiBTVEFSVFVQCiAgMDIwMDogR0VPTE9DQVRJT04KICAwMzAwOiBRVUlFVEVSIEZPWAogIDA0MDA6IFNBRkUgQlJPV1NJTkcKICAwNjAwOiBCTE9DSyBJTVBMSUNJVCBPVVRCT1VORAogIDA3MDA6IEROUyAvIERvSCAvIFBST1hZIC8gU09DS1MKICAwODAwOiBMT0NBVElPTiBCQVIgLyBTRUFSQ0ggQkFSIC8gU1VHR0VTVElPTlMgLyBISVNUT1JZIC8gRk9STVMKICAwOTAwOiBQQVNTV09SRFMgLyBQQVNTS0VZUwogIDEwMDA6IERJU0sgQVZPSURBTkNFCiAgMTIwMDogSFRUUFMgKFNTTC9UTFMgLyBPQ1NQIC8gQ0VSVFMgLyBIUEtQKQogIDE2MDA6IFJFRkVSRVJTCiAgMTcwMDogQ09OVEFJTkVSUwogIDIwMDA6IFBMVUdJTlMgLyBNRURJQSAvIFdFQlJUQwogIDI0MDA6IERPTSAoRE9DVU1FTlQgT0JKRUNUIE1PREVMKQogIDI2MDA6IE1JU0NFTExBTkVPVVMKICAyNzAwOiBFVFAgKEVOSEFOQ0VEIFRSQUNLSU5HIFBST1RFQ1RJT04pCiAgMjgwMDogU0hVVERPV04gJiBTQU5JVElaSU5HCiAgNDAwMDogRlBQIChmaW5nZXJwcmludGluZ1Byb3RlY3Rpb24pCiAgNDUwMDogT1BUSU9OQUwgUkZQIChyZXNpc3RGaW5nZXJwcmludGluZykKICA1MDAwOiBPUFRJT05BTCBPUFNFQwogIDU1MDA6IE9QVElPTkFMIEhBUkRFTklORwogIDYwMDA6IERPTidUIFRPVUNICiAgNzAwMDogRE9OJ1QgQk9USEVSCiAgODAwMDogRE9OJ1QgQk9USEVSOiBGSU5HRVJQUklOVElORwogIDg1MDA6IFRFTEVNRVRSWQogIDkwMDA6IE5PTi1QUk9KRUNUIFJFTEFURUQKICA5OTk5OiBERVBSRUNBVEVEIC8gUkVOQU1FRAoKKioqKioqLwoKLyogU1RBUlQ6IGludGVybmFsIGN1c3RvbSBwcmVmIHRvIHRlc3QgZm9yIHN5bnRheCBlcnJvcnMKICogW05PVEVdIE5vdCBhbGwgc3ludGF4IGVycm9ycyBjYXVzZSBwYXJzaW5nIHRvIGFib3J0IGkuZS4gcmVhY2hpbmcgdGhlIGxhc3QgZGVidWcgcHJlZgogKiBubyBsb25nZXIgbmVjZXNzYXJpbHkgbWVhbnMgdGhhdCBhbGwgcHJlZnMgaGF2ZSBiZWVuIGFwcGxpZWQuIENoZWNrIHRoZSBjb25zb2xlIHJpZ2h0CiAqIGFmdGVyIHN0YXJ0dXAgZm9yIGFueSB3YXJuaW5ncy9lcnJvciBtZXNzYWdlcyByZWxhdGVkIHRvIG5vbi1hcHBsaWVkIHByZWZzCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvbm5ldGhlcmNvdGUvMjAxOC8wMy8wOS9hLW5ldy1wcmVmZXJlbmNlcy1wYXJzZXItZm9yLWZpcmVmb3gvICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiU1RBUlQ6IE9oIHllcywgdGhlIE5vcndlZ2lhbiBCbHVlLi4uIHdoYXQncyB3cm9uZyB3aXRoIGl0PyIpOwoKLyogMDAwMDogZGlzYWJsZSBhYm91dDpjb25maWcgd2FybmluZyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5hYm91dENvbmZpZy5zaG93V2FybmluZyIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gMDEwMF06IFNUQVJUVVAgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIwMTAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGRlYWQhIik7Ci8qIDAxMDI6IHNldCBzdGFydHVwIHBhZ2UgW1NFVFVQLUNIUk9NRV0KICogMD1ibGFuaywgMT1ob21lLCAyPWxhc3QgdmlzaXRlZCBwYWdlLCAzPXJlc3VtZSBwcmV2aW91cyBzZXNzaW9uCiAqIFtOT1RFXSBTZXNzaW9uIFJlc3RvcmUgaXMgY2xlYXJlZCBpZiBoaXN0b3J5IGlzIGFsc28gY2xlYXJlZCAoMjgxMSspLCBhbmQgbm90IHVzZWQgaW4gUHJpdmF0ZSBCcm93c2luZyBtb2RlCiAqIFtTRVRUSU5HXSBHZW5lcmFsPlN0YXJ0dXA+UmVzdG9yZSBwcmV2aW91cyBzZXNzaW9uICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnN0YXJ0dXAucGFnZSIsIDApOwovKiAwMTAzOiBzZXQgSE9NRStORVdXSU5ET1cgcGFnZQogKiBhYm91dDpob21lPUZpcmVmb3ggSG9tZSAoZGVmYXVsdCwgc2VlIDAxMDUpLCBjdXN0b20gVVJMcy4uLiwgQmxhbmsgUGFnZQogKiBbU0VUVElOR10gSG9tZT5OZXcgV2luZG93cyBhbmQgVGFicz5Ib21lcGFnZSBhbmQgbmV3IHdpbmRvd3MgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc3RhcnR1cC5ob21lcGFnZSIsICJjaHJvbWU6Ly9icm93c2VyL2NvbnRlbnQvYmxhbmt0YWIuaHRtbCIpOwovKiAwMTA0OiBzZXQgTkVXVEFCIHBhZ2UKICogdHJ1ZT1GaXJlZm94IEhvbWUgKGRlZmF1bHQsIHNlZSAwMTA1KSwgZmFsc2U9YmxhbmsgcGFnZQogKiBbU0VUVElOR10gSG9tZT5OZXcgV2luZG93cyBhbmQgVGFicz5OZXcgdGFicyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDAxMDU6IGRpc2FibGUgc3BvbnNvcmVkIGNvbnRlbnQgb24gRmlyZWZveCBIb21lIChBY3Rpdml0eSBTdHJlYW0pCiAqIFtTRVRUSU5HXSBIb21lPkZpcmVmb3ggSG9tZSBDb250ZW50ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLnNob3dTcG9uc29yZWQiLCBmYWxzZSk7IC8vIFtGRjU4K10gU3BvbnNvcmVkIHN0b3JpZXMKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLnNob3dTcG9uc29yZWRUb3BTaXRlcyIsIGZhbHNlKTsgLy8gW0ZGODMrXSBTcG9uc29yZWQgc2hvcnRjdXRzCnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5zaG93U3BvbnNvcmVkQ2hlY2tib3hlcyIsIGZhbHNlKTsgLy8gW0ZGMTQwK10gU3VwcG9ydCBGaXJlZm94Ci8qIDAxMDY6IGNsZWFyIGRlZmF1bHQgdG9wc2l0ZXMKICogW05PVEVdIFRoaXMgZG9lcyBub3QgYmxvY2sgeW91IGZyb20gYWRkaW5nIHlvdXIgb3duICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLmRlZmF1bHQuc2l0ZXMiLCAiIik7CgovKioqIFtTRUNUSU9OIDAyMDBdOiBHRU9MT0NBVElPTiAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjAyMDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgZGVmaW5pdGVseSBkZWNlYXNlZCEiKTsKLyogMDIwMjogZGlzYWJsZSB1c2luZyB0aGUgT1MncyBnZW9sb2NhdGlvbiBzZXJ2aWNlICoqKi8KdXNlcl9wcmVmKCJnZW8ucHJvdmlkZXIubXMtd2luZG93cy1sb2NhdGlvbiIsIGZhbHNlKTsgLy8gW1dJTkRPV1NdCnVzZXJfcHJlZigiZ2VvLnByb3ZpZGVyLnVzZV9jb3JlbG9jYXRpb24iLCBmYWxzZSk7IC8vIFtNQUNdCnVzZXJfcHJlZigiZ2VvLnByb3ZpZGVyLnVzZV9nZW9jbHVlIiwgZmFsc2UpOyAvLyBbRkYxMDIrXSBbTElOVVhdCgovKioqIFtTRUNUSU9OIDAzMDBdOiBRVUlFVEVSIEZPWCAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjAzMDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3Mgbm90IHBpbmluJyBmb3IgdGhlIGZqb3JkcyEiKTsKLyoqIFJFQ09NTUVOREFUSU9OUyAqKiovCi8qIDAzMjA6IGRpc2FibGUgcmVjb21tZW5kYXRpb24gcGFuZSBpbiBhYm91dDphZGRvbnMgKHVzZXMgR29vZ2xlIEFuYWx5dGljcykgKioqLwp1c2VyX3ByZWYoImV4dGVuc2lvbnMuZ2V0QWRkb25zLnNob3dQYW5lIiwgZmFsc2UpOyAvLyBbSElEREVOIFBSRUZdCi8qIDAzMjE6IGRpc2FibGUgcmVjb21tZW5kYXRpb25zIGluIGFib3V0OmFkZG9ucycgRXh0ZW5zaW9ucyBhbmQgVGhlbWVzIHBhbmVzIFtGRjY4K10gKioqLwp1c2VyX3ByZWYoImV4dGVuc2lvbnMuaHRtbGFib3V0YWRkb25zLnJlY29tbWVuZGF0aW9ucy5lbmFibGVkIiwgZmFsc2UpOwovKiAwMzIyOiBkaXNhYmxlIHBlcnNvbmFsaXplZCBFeHRlbnNpb24gUmVjb21tZW5kYXRpb25zIGluIGFib3V0OmFkZG9ucyBhbmQgQU1PIFtGRjY1K10KICogW05PVEVdIFRoaXMgcHJlZiBoYXMgbm8gZWZmZWN0IHdoZW4gSGVhbHRoIFJlcG9ydHMgKDg1MDEpIGFyZSBkaXNhYmxlZAogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkZpcmVmb3ggRGF0YSBDb2xsZWN0aW9uIGFuZCBVc2U+QWxsb3cgcGVyc29uYWxpemVkIGV4dGVuc2lvbiByZWNvbW1lbmRhdGlvbnMKICogWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi9wZXJzb25hbGl6ZWQtZXh0ZW5zaW9uLXJlY29tbWVuZGF0aW9ucyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5kaXNjb3ZlcnkuZW5hYmxlZCIsIGZhbHNlKTsKCi8qKiBBQ1RJVklUWSBTVFJFQU0gKioqLwovKiAwMzM1OiBkaXNhYmxlIEZpcmVmb3ggSG9tZSAoQWN0aXZpdHkgU3RyZWFtKSB0ZWxlbWV0cnkgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0uZmVlZHMudGVsZW1ldHJ5IiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0udGVsZW1ldHJ5IiwgZmFsc2UpOwoKLyoqIFNUVURJRVMgKioqLwovKiAwMzQwOiBkaXNhYmxlIFN0dWRpZXMKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5GaXJlZm94IERhdGEgQ29sbGVjdGlvbiBhbmQgVXNlPkluc3RhbGwgYW5kIHJ1biBzdHVkaWVzICoqKi8KdXNlcl9wcmVmKCJhcHAuc2hpZWxkLm9wdG91dHN0dWRpZXMuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDM0MTogZGlzYWJsZSBOb3JtYW5keS9TaGllbGQgW0ZGNjArXQogKiBTaGllbGQgaXMgYSB0ZWxlbWV0cnkgc3lzdGVtIHRoYXQgY2FuIHB1c2ggYW5kIHRlc3QgInJlY2lwZXMiCiAqIFsxXSBodHRwczovL21vemlsbGEuZ2l0aHViLmlvL25vcm1hbmR5LyAqKiovCnVzZXJfcHJlZigiYXBwLm5vcm1hbmR5LmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiYXBwLm5vcm1hbmR5LmFwaV91cmwiLCAiIik7CgovKiogQ1JBU0ggUkVQT1JUUyAqKiovCi8qIDAzNTA6IGRpc2FibGUgQ3Jhc2ggUmVwb3J0cyAqKiovCnVzZXJfcHJlZigiYnJlYWtwYWQucmVwb3J0VVJMIiwgIiIpOwp1c2VyX3ByZWYoImJyb3dzZXIudGFicy5jcmFzaFJlcG9ydGluZy5zZW5kUmVwb3J0IiwgZmFsc2UpOyAvLyBbRkY0NCtdCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5jcmFzaFJlcG9ydHMudW5zdWJtaXR0ZWRDaGVjay5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1MStdIFtERUZBVUxUOiBmYWxzZV0KLyogMDM1MTogZW5mb3JjZSBubyBzdWJtaXNzaW9uIG9mIGJhY2tsb2dnZWQgQ3Jhc2ggUmVwb3J0cyBbRkY1OCtdCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+RmlyZWZveCBEYXRhIENvbGxlY3Rpb24gYW5kIFVzZT5TZW5kIGJhY2tsb2dnZWQgY3Jhc2ggcmVwb3J0cyAgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuY3Jhc2hSZXBvcnRzLnVuc3VibWl0dGVkQ2hlY2suYXV0b1N1Ym1pdDIiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KCi8qKiBPVEhFUiAqKiovCi8qIDAzNjA6IGRpc2FibGUgQ2FwdGl2ZSBQb3J0YWwgZGV0ZWN0aW9uCiAqIFsxXSBodHRwczovL3d3dy5lZmYub3JnL2RlZXBsaW5rcy8yMDE3LzA4L2hvdy1jYXB0aXZlLXBvcnRhbHMtaW50ZXJmZXJlLXdpcmVsZXNzLXNlY3VyaXR5LWFuZC1wcml2YWN5ICoqKi8KdXNlcl9wcmVmKCJjYXB0aXZlZGV0ZWN0LmNhbm9uaWNhbFVSTCIsICIiKTsKdXNlcl9wcmVmKCJuZXR3b3JrLmNhcHRpdmUtcG9ydGFsLXNlcnZpY2UuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTIrXQovKiAwMzYxOiBkaXNhYmxlIE5ldHdvcmsgQ29ubmVjdGl2aXR5IGNoZWNrcyBbRkY2NStdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE0NjA1MzcgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuY29ubmVjdGl2aXR5LXNlcnZpY2UuZW5hYmxlZCIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gMDQwMF06IFNBRkUgQlJPV1NJTkcgKFNCKQogICBTQiBoYXMgdGFrZW4gbWFueSBzdGVwcyB0byBwcmVzZXJ2ZSBwcml2YWN5LiBJZiByZXF1aXJlZCwgYSBmdWxsIHVybCBpcyBuZXZlciBzZW50CiAgIHRvIEdvb2dsZSwgb25seSBhIHBhcnQtaGFzaCBvZiB0aGUgcHJlZml4LCBoaWRkZW4gd2l0aCBub2lzZSBvZiBvdGhlciByZWFsIHBhcnQtaGFzaGVzLgogICBGaXJlZm94IHRha2VzIG1lYXN1cmVzIHN1Y2ggYXMgc3RyaXBwaW5nIG91dCBpZGVudGlmeWluZyBwYXJhbWV0ZXJzIGFuZCBzaW5jZSBTQnY0IChGRjU3KykKICAgZG9lc24ndCBldmVuIHVzZSBjb29raWVzLiAoI1R1cm4gb24gYnJvd3Nlci5zYWZlYnJvd3NpbmcuZGVidWcgdG8gbW9uaXRvciB0aGlzIGFjdGl2aXR5KS4KCiAgIEZGMTQ3KyB1c2VzIFNCdjUgd2hpY2ggaW5jb3Jwb3JhdGVzIE9ibGl2b3VzIEhUVFAgWzVdIGFuZCBTQnY1J3MgbG9jYWwgbGlzdCBtb2RlIFs2XQoKICAgWzFdIGh0dHBzOi8vZmVlZGluZy5jbG91ZC5nZWVrLm56L3Bvc3RzL2hvdy1zYWZlLWJyb3dzaW5nLXdvcmtzLWluLWZpcmVmb3gvCiAgIFsyXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvU2VjdXJpdHkvU2FmZV9Ccm93c2luZwogICBbM10gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL2hvdy1kb2VzLXBoaXNoaW5nLWFuZC1tYWx3YXJlLXByb3RlY3Rpb24td29yawogICBbNF0gaHR0cHM6Ly9lZHVjYXRlZGd1ZXNzd29yay5vcmcvcG9zdHMvc2FmZS1icm93c2luZy1wcml2YWN5LwogICBbNV0gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vc2FmZS1icm93c2luZy9yZWZlcmVuY2UKICAgWzZdIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3NhZmUtYnJvd3NpbmcvcmVmZXJlbmNlL0xvY2FsLkxpc3QuTW9kZQoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjA0MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgcGFzc2VkIG9uISIpOwovKiAwNDAxOiBkaXNhYmxlIFNCIChTYWZlIEJyb3dzaW5nKQogKiBbV0FSTklOR10gRG8gdGhpcyBhdCB5b3VyIG93biByaXNrISBUaGVzZSBhcmUgdGhlIG1hc3RlciBzd2l0Y2hlcwogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PlNlY3VyaXR5Pi4uLiBCbG9jayBkYW5nZXJvdXMgYW5kIGRlY2VwdGl2ZSBjb250ZW50ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5tYWx3YXJlLmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcucGhpc2hpbmcuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDQwMjogZGlzYWJsZSBTQiBjaGVja3MgZm9yIGRvd25sb2FkcyAoYm90aCBsb2NhbCBsb29rdXBzICsgcmVtb3RlKQogKiBUaGlzIGlzIHRoZSBtYXN0ZXIgc3dpdGNoIGZvciB0aGUgc2FmZWJyb3dzaW5nLmRvd25sb2FkcyogcHJlZnMgKDA0MDMsIDA0MDQpCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+U2VjdXJpdHk+Li4uICJCbG9jayBkYW5nZXJvdXMgZG93bmxvYWRzIiAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcuZG93bmxvYWRzLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDA0MDM6IGRpc2FibGUgU0IgY2hlY2tzIGZvciBkb3dubG9hZHMgKHJlbW90ZSkKICogVG8gdmVyaWZ5IHRoZSBzYWZldHkgb2YgY2VydGFpbiBleGVjdXRhYmxlIGZpbGVzLCBGaXJlZm94IG1heSBzdWJtaXQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICogZmlsZSwgaW5jbHVkaW5nIHRoZSBuYW1lLCBvcmlnaW4sIHNpemUgYW5kIGEgY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIHRoZSBjb250ZW50cywgdG8gdGhlIEdvb2dsZQogKiBTYWZlIEJyb3dzaW5nIHNlcnZpY2Ugd2hpY2ggaGVscHMgRmlyZWZveCBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIGZpbGUgc2hvdWxkIGJlIGJsb2NrZWQKICogW1NFVFVQLVNFQ1VSSVRZXSBJZiB5b3UgZG8gbm90IHVuZGVyc3RhbmQgdGhpcywgb3IgeW91IHdhbnQgdGhpcyBwcm90ZWN0aW9uLCB0aGVuIG92ZXJyaWRlIHRoaXMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmRvd25sb2Fkcy5yZW1vdGUuZW5hYmxlZCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5kb3dubG9hZHMucmVtb3RlLnVybCIsICIiKTsgLy8gRGVmZW5zZS1pbi1kZXB0aAovKiAwNDA0OiBkaXNhYmxlIFNCIGNoZWNrcyBmb3IgdW53YW50ZWQgc29mdHdhcmUKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5TZWN1cml0eT4uLi4gIldhcm4geW91IGFib3V0IHVud2FudGVkIGFuZCB1bmNvbW1vbiBzb2Z0d2FyZSIgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmRvd25sb2Fkcy5yZW1vdGUuYmxvY2tfcG90ZW50aWFsbHlfdW53YW50ZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcuZG93bmxvYWRzLnJlbW90ZS5ibG9ja191bmNvbW1vbiIsIGZhbHNlKTsKLyogMDQwNTogZGlzYWJsZSAiaWdub3JlIHRoaXMgd2FybmluZyIgb24gU0Igd2FybmluZ3MgW0ZGNDUrXQogKiBJZiBjbGlja2VkLCBpdCBieXBhc3NlcyB0aGUgYmxvY2sgZm9yIHRoYXQgc2Vzc2lvbi4gVGhpcyBpcyBhIG1lYW5zIGZvciBhZG1pbnMgdG8gZW5mb3JjZSBTQgogKiBbVEVTVF0gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL3dpa2kvQXBwZW5kaXgtQS1UZXN0LVNpdGVzIy1tb3ppbGxhCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEyMjY0OTAgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmFsbG93T3ZlcnJpZGUiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDA2MDBdOiBCTE9DSyBJTVBMSUNJVCBPVVRCT1VORCBbbm90IGV4cGxpY2l0bHkgYXNrZWQgZm9yIC0gZS5nLiBjbGlja2VkIG9uXSAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjA2MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3Mgbm8gbW9yZSEiKTsKLyogMDYwMTogZGlzYWJsZSBsaW5rIHByZWZldGNoaW5nCiAqIFsxXSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVFRQL0xpbmtfcHJlZmV0Y2hpbmdfRkFRICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLnByZWZldGNoLW5leHQiLCBmYWxzZSk7Ci8qIDA2MDI6IGRpc2FibGUgRE5TIHByZWZldGNoaW5nCiAqIFsxXSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvWC1ETlMtUHJlZmV0Y2gtQ29udHJvbCAqKiovCnVzZXJfcHJlZigibmV0d29yay5kbnMuZGlzYWJsZVByZWZldGNoIiwgdHJ1ZSk7CnVzZXJfcHJlZigibmV0d29yay5kbnMuZGlzYWJsZVByZWZldGNoRnJvbUhUVFBTIiwgdHJ1ZSk7Ci8qIDA2MDQ6IGRpc2FibGUgbGluay1tb3VzZW92ZXIgb3BlbmluZyBjb25uZWN0aW9uIHRvIGxpbmtlZCBzZXJ2ZXIKICogWzFdIGh0dHBzOi8vbmV3cy5zbGFzaGRvdC5vcmcvc3RvcnkvMTUvMDgvMTQvMjMyMTIwMi9ob3ctdG8tcXVhc2gtZmlyZWZveHMtc2lsZW50LXJlcXVlc3RzICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAuc3BlY3VsYXRpdmUtcGFyYWxsZWwtbGltaXQiLCAwKTsKLyogMDYwNTogZGlzYWJsZSBtb3VzZWRvd24gc3BlY3VsYXRpdmUgY29ubmVjdGlvbnMgb24gYm9va21hcmtzIGFuZCBoaXN0b3J5IFtGRjk4K10gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIucGxhY2VzLnNwZWN1bGF0aXZlQ29ubmVjdC5lbmFibGVkIiwgZmFsc2UpOwovKiAwNjEwOiBlbmZvcmNlIG5vICJIeXBlcmxpbmsgQXVkaXRpbmciIChjbGljayB0cmFja2luZykKICogWzFdIGh0dHBzOi8vd3d3LmJsZWVwaW5nY29tcHV0ZXIuY29tL25ld3Mvc29mdHdhcmUvbWFqb3ItYnJvd3NlcnMtdG8tcHJldmVudC1kaXNhYmxpbmctb2YtY2xpY2stdHJhY2tpbmctcHJpdmFjeS1yaXNrLyAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zZW5kX3BpbmdzIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCgovKioqIFtTRUNUSU9OIDA3MDBdOiBETlMgLyBEb0ggLyBQUk9YWSAvIFNPQ0tTICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMDcwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBnaXZlbiB1cCB0aGUgZ2hvc3QhIik7Ci8qIDA3MDI6IHNldCB0aGUgcHJveHkgc2VydmVyIHRvIGRvIGFueSBETlMgbG9va3VwcyB3aGVuIHVzaW5nIFNPQ0tTCiAqIGUuZy4gaW4gVG9yLCB0aGlzIHN0b3BzIHlvdXIgbG9jYWwgRE5TIHNlcnZlciBmcm9tIGtub3dpbmcgeW91ciBUb3IgZGVzdGluYXRpb24KICogYXMgYSByZW1vdGUgVG9yIG5vZGUgd2lsbCBoYW5kbGUgdGhlIEROUyByZXF1ZXN0CiAqIFsxXSBodHRwczovL3RyYWMudG9ycHJvamVjdC5vcmcvcHJvamVjdHMvdG9yL3dpa2kvZG9jL1RvcmlmeUhPV1RPL1dlYkJyb3dzZXJzICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLnByb3h5LnNvY2tzX3JlbW90ZV9kbnMiLCB0cnVlKTsKLyogMDcwMzogZGlzYWJsZSB1c2luZyBVTkMgKFVuaWZvcm0gTmFtaW5nIENvbnZlbnRpb24pIHBhdGhzIFtGRjYxK10KICogW1NFVFVQLUNIUk9NRV0gQ2FuIGJyZWFrIGV4dGVuc2lvbnMgZm9yIHByb2ZpbGVzIG9uIG5ldHdvcmsgc2hhcmVzCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE0MTM4NjggKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuZmlsZS5kaXNhYmxlX3VuY19wYXRocyIsIHRydWUpOyAvLyBbSElEREVOIFBSRUZdCi8qIDA3MDQ6IGRpc2FibGUgR0lPIGFzIGEgcG90ZW50aWFsIHByb3h5IGJ5cGFzcyB2ZWN0b3IKICogR3Zmcy9HSU8gaGFzIGEgc2V0IG9mIHN1cHBvcnRlZCBwcm90b2NvbHMgbGlrZSBvYmV4LCBuZXR3b3JrLCBhcmNoaXZlLCBjb21wdXRlciwKICogZGF2LCBjZGRhLCBncGhvdG8yLCB0cmFzaCwgZXRjLiBGcm9tIEZGODctMTE3LCBieSBkZWZhdWx0IG9ubHkgc2Z0cCB3YXMgYWNjZXB0ZWQKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTQzMzUwNwogKiBbMl0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR1ZmcwogKiBbM10gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR0lPXyhzb2Z0d2FyZSkgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuZ2lvLnN1cHBvcnRlZC1wcm90b2NvbHMiLCAiIik7IC8vIFtISURERU4gUFJFRl0gW0RFRkFVTFQ6ICIiXQovKiAwNzA1OiBkaXNhYmxlIHByb3h5IGRpcmVjdCBmYWlsb3ZlciBmb3Igc3lzdGVtIHJlcXVlc3RzIFtGRjkxK10KICogW1dBUk5JTkddIERlZmF1bHQgdHJ1ZSBpcyBhIHNlY3VyaXR5IGZlYXR1cmUgYWdhaW5zdCBtYWxpY2lvdXMgZXh0ZW5zaW9ucyBbMV0KICogW1NFVFVQLUNIUk9NRV0gSWYgeW91IHVzZSBhIHByb3h5IGFuZCB5b3UgdHJ1c3QgeW91ciBleHRlbnNpb25zCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8xMC8yNS9zZWN1cmluZy10aGUtcHJveHktYXBpLWZvci1maXJlZm94LWFkZC1vbnMvICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLnByb3h5LmZhaWxvdmVyX2RpcmVjdCIsIGZhbHNlKTsKLyogMDcwNjogZGlzYWJsZSBwcm94eSBieXBhc3MgZm9yIHN5c3RlbSByZXF1ZXN0IGZhaWx1cmVzIFtGRjk1K10KICogUmVtb3RlU2V0dGluZ3MsIFVwZGF0ZVNlcnZpY2UsIFRlbGVtZXRyeSBbMV0KICogW1dBUk5JTkddIElmIGZhbHNlLCB0aGlzIHdpbGwgYnJlYWsgdGhlIGZhbGxiYWNrIGZvciBzb21lIHNlY3VyaXR5IGZlYXR1cmVzCiAqIFtTRVRVUC1DSFJPTUVdIElmIHlvdSB1c2UgYSBwcm94eSBhbmQgeW91IHVuZGVyc3RhbmQgdGhlIHNlY3VyaXR5IGltcGFjdAogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MTczMjc5MiwxNzMzOTk0LDE3MzM0ODEgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsucHJveHkuYWxsb3dfYnlwYXNzIiwgZmFsc2UpOwovKiAwNzEwOiBlbmFibGUgRE5TLW92ZXItSFRUUFMgKERvSCkgW0ZGNjArXQogKiAwPWRlZmF1bHQsIDI9aW5jcmVhc2VkIChUUlIgKFRydXN0ZWQgUmVjdXJzaXZlIFJlc29sdmVyKSBmaXJzdCksIDM9bWF4IChUUlIgb25seSksIDU9b2ZmIChubyByb2xsb3V0KQogKiBzZWUgImRvaC1yb2xsb3V0LmhvbWUtcmVnaW9uIjogVVNBIDIwMTksIENhbmFkYSAyMDIxLCBSdXNzaWEvVWtyYWluZSAyMDIyIFszXQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkROUyBvdmVyIEhUVFBTCiAqIFsxXSBodHRwczovL2hhY2tzLm1vemlsbGEub3JnLzIwMTgvMDUvYS1jYXJ0b29uLWludHJvLXRvLWRucy1vdmVyLWh0dHBzLwogKiBbMl0gaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL1NlY3VyaXR5L0RPSC1yZXNvbHZlci1wb2xpY3kKICogWzNdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi9maXJlZm94LWRucy1vdmVyLWh0dHBzCiAqIFs0XSBodHRwczovL3d3dy5lZmYub3JnL2RlZXBsaW5rcy8yMDIwLzEyL2Rucy1kb2gtYW5kLW9kb2gtb2gtbXkteWVhci1yZXZpZXctMjAyMCAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay50cnIubW9kZSIsIDMpOwovKiAwNzEyOiBzZXQgRG9IIHByb3ZpZGVyCiAqIFRoZSBjdXN0b20gdXJpIGlzIHRoZSB2YWx1ZSBzaG93biB3aGVuIHlvdSAiQ2hvb3NlIHByb3ZpZGVyPkN1c3RvbT4iCiAqIFtOT1RFXSBJZiB5b3UgVVNFIGN1c3RvbSB0aGVuICJuZXR3b3JrLnRyci51cmkiIHNob3VsZCBiZSBzZXQgdGhlIHNhbWUKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5ETlMgb3ZlciBIVFRQUz5JbmNyZWFzZWQvTWF4PkNob29zZSBwcm92aWRlciAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay50cnIudXJpIiwgImh0dHBzOi8vZXhhbXBsZS5kbnMiKTsKICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLnRyci5jdXN0b21fdXJpIiwgImh0dHBzOi8vZXhhbXBsZS5kbnMiKTsKCi8qKiogW1NFQ1RJT04gMDgwMF06IExPQ0FUSU9OIEJBUiAvIFNFQVJDSCBCQVIgLyBTVUdHRVNUSU9OUyAvIEhJU1RPUlkgLyBGT1JNUyAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjA4MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgY2Vhc2VkIHRvIGJlISIpOwovKiAwODAxOiBkaXNhYmxlIGxvY2F0aW9uIGJhciBtYWtpbmcgc3BlY3VsYXRpdmUgY29ubmVjdGlvbnMgW0ZGNTYrXQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xMzQ4Mjc1ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zcGVjdWxhdGl2ZUNvbm5lY3QuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDgwMjogZGlzYWJsZSBsb2NhdGlvbiBiYXIgY29udGV4dHVhbCBzdWdnZXN0aW9ucwogKiBbTk9URV0gVGhlIFVJIGlzIGNvbnRyb2xsZWQgYnkgdGhlIC5lbmFibGVkIHByZWYKICogW1NFVFRJTkddIFNlYXJjaD5BZGRyZXNzIEJhcj5TdWdnZXN0aW9ucyBmcm9tLi4uCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvZGF0YS8yMDIxLzA5LzE1L2RhdGEtYW5kLWZpcmVmb3gtc3VnZ2VzdC8gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnF1aWNrc3VnZ2VzdC5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY5MitdCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3VnZ2VzdC5xdWlja3N1Z2dlc3Qubm9uc3BvbnNvcmVkIiwgZmFsc2UpOyAvLyBbRkY5NStdCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3VnZ2VzdC5xdWlja3N1Z2dlc3Quc3BvbnNvcmVkIiwgZmFsc2UpOyAvLyBbRkY5MitdCi8qIDA4MDM6IGRpc2FibGUgbGl2ZSBzZWFyY2ggc3VnZ2VzdGlvbnMKICogW05PVEVdIEJvdGggbXVzdCBiZSB0cnVlIGZvciBsaXZlIHNlYXJjaCB0byB3b3JrIGluIHRoZSBsb2NhdGlvbiBiYXIKICogW1NFVFVQLUNIUk9NRV0gT3ZlcnJpZGUgdGhlc2UgaWYgeW91IHRydXN0IGFuZCB1c2UgYSBwcml2YWN5IHJlc3BlY3Rpbmcgc2VhcmNoIGVuZ2luZQogKiBbU0VUVElOR10gU2VhcmNoPlNob3cgc2VhcmNoIHN1Z2dlc3Rpb25zIHwgU2hvdyBzZWFyY2ggc3VnZ2VzdGlvbnMgaW4gYWRkcmVzcyBiYXIgcmVzdWx0cyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5zZWFyY2guc3VnZ2VzdC5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnN1Z2dlc3Quc2VhcmNoZXMiLCBmYWxzZSk7Ci8qIDA4MDU6IGRpc2FibGUgdXJsYmFyIHRyZW5kaW5nIHNlYXJjaCBzdWdnZXN0aW9ucyBbRkYxMTgrXQogKiBbU0VUVElOR10gU2VhcmNoPlNlYXJjaCBTdWdnZXN0aW9ucz5TaG93IHRyZW5kaW5nIHNlYXJjaCBzdWdnZXN0aW9ucyAoRkYxMTkpICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci50cmVuZGluZy5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsKLyogMDgwNjogZGlzYWJsZSB1cmxiYXIgc3VnZ2VzdGlvbnMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLmFkZG9ucy5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTE1K10KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5hbXAuZmVhdHVyZUdhdGUiLCBmYWxzZSk7IC8vIFtGRjE0MStdIGFkTWFya2V0cGxhY2UKdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5pbXBvcnRhbnREYXRlcy5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTQzK10KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5tYXJrZXQuZmVhdHVyZUdhdGUiLCBmYWxzZSk7IC8vIFtGRjE0MytdIHN0b2NrIG1hcmtldAp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLm1kbi5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTE3K10KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci53ZWF0aGVyLmZlYXR1cmVHYXRlIiwgZmFsc2UpOyAvLyBbRkYxMDgrXQp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLndpa2lwZWRpYS5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTQxK10KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci55ZWxwLmZlYXR1cmVHYXRlIiwgZmFsc2UpOyAvLyBbRkYxMjQrXQp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnllbHBSZWFsdGltZS5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTQ0K10KLyogMDgwNzogZGlzYWJsZSB1cmxiYXIgY2xpcGJvYXJkIHN1Z2dlc3Rpb25zIFtGRjExOCtdICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5jbGlwYm9hcmQuZmVhdHVyZUdhdGUiLCBmYWxzZSk7Ci8qIDA4MDg6IGRpc2FibGUgcmVjZW50IHNlYXJjaGVzIFtGRjEyMCtdCiAqIFtOT1RFXSBSZWNlbnQgc2VhcmNoZXMgYXJlIGNsZWFyZWQgaWYgaGlzdG9yeSBpcyBjbGVhcmVkICgyODExKykKICogWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi9zZWFyY2gtc3VnZ2VzdGlvbnMtZmlyZWZveCAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIucmVjZW50c2VhcmNoZXMuZmVhdHVyZUdhdGUiLCBmYWxzZSk7Ci8qIDA4MTA6IGRpc2FibGUgc2VhcmNoIGFuZCBmb3JtIGhpc3RvcnkKICogW05PVEVdIFdlIGFsc28gY2xlYXIgZm9ybWRhdGEgb24gZXhpdCAoMjgxMSspCiAqIFtTRVRVUC1XRUJdIEJlIGF3YXJlIHRoYXQgYXV0b2NvbXBsZXRlIGZvcm0gZGF0YSBjYW4gYmUgcmVhZCBieSB0aGlyZCBwYXJ0aWVzIFsxXVsyXQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5Pkhpc3Rvcnk+Q3VzdG9tIFNldHRpbmdzPlJlbWVtYmVyIHNlYXJjaCBhbmQgZm9ybSBoaXN0b3J5CiAqIFsxXSBodHRwczovL2Jsb2cubWluZGVkc2VjdXJpdHkuY29tLzIwMTEvMTAvYXV0b2NvbXBsZXRlYWdhaW4uaHRtbAogKiBbMl0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8zODE2ODEgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuZm9ybWZpbGwuZW5hYmxlIiwgZmFsc2UpOwovKiAwODE1OiBkaXNhYmxlIHRhYi10by1zZWFyY2ggW0ZGODUrXQogKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGV4Y2x1ZGUgb24gYSBwZXItZW5naW5lIGJhc2lzIGJ5IHVuY2hlY2tpbmcgdGhlbSBpbiBPcHRpb25zPlNlYXJjaAogKiBbU0VUVElOR10gU2VhcmNoPkFkZHJlc3MgQmFyPldoZW4gdXNpbmcgdGhlIGFkZHJlc3MgYmFyLCBzdWdnZXN0PlNlYXJjaCBlbmdpbmVzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zdWdnZXN0LmVuZ2luZXMiLCBmYWxzZSk7Ci8qIDA4MjA6IGRpc2FibGUgY29sb3Jpbmcgb2YgdmlzaXRlZCBsaW5rcwogKiBbU0VUVVAtSEFSREVOXSBCdWxrIHJhcGlkIGhpc3Rvcnkgc25pZmZpbmcgd2FzIG1pdGlnYXRlZCBpbiAyMDEwIFsxXVsyXS4gU2xvd2VyIGFuZCBtb3JlIGV4cGVuc2l2ZQogKiByZWRyYXcgdGltaW5nIGF0dGFja3Mgd2VyZSBsYXJnZWx5IG1pdGlnYXRlZCBpbiBGRjc3KyBbM10uIFVzaW5nIFJGUCAoNDUwMSkgZnVydGhlciBoYW1wZXJzIHRpbWluZwogKiBhdHRhY2tzLiBIaXN0b3J5IGNhbiBhbHNvIGJlIGNsZWFyZWQgb24gZXhpdCAoMjgxMSspLiBIb3dldmVyLCBzb2NpYWwgZW5naW5lZXJpbmcgWzIjbGltaXRzXVs0XVs1XQogKiBhbmQgYWR2YW5jZWQgdGFyZ2V0ZWQgdGltaW5nIGF0dGFja3MgY291bGQgc3RpbGwgcHJvZHVjZSB1c2FibGUgcmVzdWx0cwogKiBbMV0gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQ1NTL1ByaXZhY3lfYW5kX3RoZV86dmlzaXRlZF9zZWxlY3RvcgogKiBbMl0gaHR0cHM6Ly9kYmFyb24ub3JnL21vemlsbGEvdmlzaXRlZC1wcml2YWN5CiAqIFszXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE2MzI3NjUKICogWzRdIGh0dHBzOi8vZWFydGhsbmcuZ2l0aHViLmlvL3Rlc3RwYWdlcy92aXNpdGVkX2xpbmtzLmh0bWwgKHNlZSBnaXRodWIgd2lraSBBUFBFTkRJWCBBIG9uIGhvdyB0byB1c2UpCiAqIFs1XSBodHRwczovL2xjYW10dWYuYmxvZ3Nwb3QuY29tLzIwMTYvMDgvY3NzLW1peC1ibGVuZC1tb2RlLWlzLWJhZC1mb3Ita2VlcGluZy5odG1sICoqKi8KICAgLy8gdXNlcl9wcmVmKCJsYXlvdXQuY3NzLnZpc2l0ZWRfbGlua3NfZW5hYmxlZCIsIGZhbHNlKTsKLyogMDgzMDogZW5hYmxlIHNlcGFyYXRlIGRlZmF1bHQgc2VhcmNoIGVuZ2luZSBpbiBQcml2YXRlIFdpbmRvd3MgYW5kIGl0cyBVSSBzZXR0aW5nCiAqIFtTRVRUSU5HXSBTZWFyY2g+RGVmYXVsdCBTZWFyY2ggRW5naW5lPkNob29zZSBhIGRpZmZlcmVudCBkZWZhdWx0IHNlYXJjaCBlbmdpbmUgZm9yIFByaXZhdGUgV2luZG93cyBvbmx5ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnNlYXJjaC5zZXBhcmF0ZVByaXZhdGVEZWZhdWx0IiwgdHJ1ZSk7IC8vIFtGRjcwK10KdXNlcl9wcmVmKCJicm93c2VyLnNlYXJjaC5zZXBhcmF0ZVByaXZhdGVEZWZhdWx0LnVpLmVuYWJsZWQiLCB0cnVlKTsgLy8gW0ZGNzErXQoKLyoqKiBbU0VDVElPTiAwOTAwXTogUEFTU1dPUkRTIC8gUEFTU0tFWVMKICAgWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi91c2UtcHJpbWFyeS1wYXNzd29yZC1wcm90ZWN0LXN0b3JlZC1sb2dpbnMtYW5kLXBhcwoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjA5MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgZXhwaXJlZCEiKTsKLyogMDkwMzogZGlzYWJsZSBhdXRvLWZpbGxpbmcgdXNlcm5hbWUgJiBwYXNzd29yZCBmb3JtIGZpZWxkcwogKiBjYW4gbGVhayBpbiBjcm9zcy1zaXRlIGZvcm1zICphbmQqIGJlIHNwb29mZWQKICogW05PVEVdIFVzZXJuYW1lICYgcGFzc3dvcmQgaXMgc3RpbGwgYXZhaWxhYmxlIHdoZW4geW91IGVudGVyIHRoZSBmaWVsZAogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PlBhc3N3b3Jkcz5BdXRvZmlsbCBsb2dpbnMgYW5kIHBhc3N3b3JkcwogKiBbMV0gaHR0cHM6Ly9mcmVlZG9tLXRvLXRpbmtlci5jb20vMjAxNy8xMi8yNy9uby1ib3VuZGFyaWVzLWZvci11c2VyLWlkZW50aXRpZXMtd2ViLXRyYWNrZXJzLWV4cGxvaXQtYnJvd3Nlci1sb2dpbi1tYW5hZ2Vycy8KICogWzJdIGh0dHBzOi8vaG9tZXMuZXNhdC5rdWxldXZlbi5iZS9+YXNlbm9sL2xlYWt5LWZvcm1zLyAqKiovCnVzZXJfcHJlZigic2lnbm9uLmF1dG9maWxsRm9ybXMiLCBmYWxzZSk7Ci8qIDA5MDQ6IGRpc2FibGUgZm9ybWxlc3MgbG9naW4gY2FwdHVyZSBmb3IgUGFzc3dvcmQgTWFuYWdlciBbRkY1MStdICoqKi8KdXNlcl9wcmVmKCJzaWdub24uZm9ybWxlc3NDYXB0dXJlLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDA5MDU6IGxpbWl0IChvciBkaXNhYmxlKSBIVFRQIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGRpYWxvZ3MgdHJpZ2dlcmVkIGJ5IHN1Yi1yZXNvdXJjZXMgW0ZGNDErXQogKiBoYXJkZW5zIGFnYWluc3QgcG90ZW50aWFsIGNyZWRlbnRpYWxzIHBoaXNoaW5nCiAqIDAgPSBkb24ndCBhbGxvdyBzdWItcmVzb3VyY2VzIHRvIG9wZW4gSFRUUCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBkaWFsb2dzCiAqIDEgPSBkb24ndCBhbGxvdyBjcm9zcy1vcmlnaW4gc3ViLXJlc291cmNlcyB0byBvcGVuIEhUVFAgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgZGlhbG9ncwogKiAyID0gYWxsb3cgc3ViLXJlc291cmNlcyB0byBvcGVuIEhUVFAgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgZGlhbG9ncyAoZGVmYXVsdCkgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuYXV0aC5zdWJyZXNvdXJjZS1odHRwLWF1dGgtYWxsb3ciLCAxKTsKLyogMDkwNjogZW5mb3JjZSBubyBhdXRvbWF0aWMgYXV0aGVudGljYXRpb24gb24gTWljcm9zb2Z0IHNpdGVzIFtGRjkxK10gW1dJTkRPV1MgMTArXQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkxvZ2lucyBhbmQgUGFzc3dvcmRzPkFsbG93IFdpbmRvd3Mgc2luZ2xlIHNpZ24tb24gZm9yLi4uCiAqIFsxXSBodHRwczovL3N1cHBvcnQubW96aWxsYS5vcmcva2Ivd2luZG93cy1zc28gKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC53aW5kb3dzLXNzby5lbmFibGVkIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCi8qIDA5MDc6IGVuZm9yY2Ugbm8gYXV0b21hdGljIGF1dGhlbnRpY2F0aW9uIG9uIE1pY3Jvc29mdCBzaXRlcyBbRkYxMzErXSBbTUFDXQogKiBPbiBtYWNPUywgU1NPIG9ubHkgd29ya3Mgb24gY29ycG9yYXRlIGRldmljZXMgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5taWNyb3NvZnQtZW50cmEtc3NvLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KLyogMDkxMDogZW5mb3JjZSBubyBkaXJlY3QgYXR0ZXN0YXRpb24gaW4gcGFzc2tleXMgW0ZGMTQ0K10KICAgLy8gWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE1ODcgKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LndlYmF1dGhuLmFsd2F5c19hbGxvd19kaXJlY3RfYXR0ZXN0YXRpb24iLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KCi8qKiogW1NFQ1RJT04gMTAwMF06IERJU0sgQVZPSURBTkNFICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMTAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBnb25lIHRvIG1lZXQgJ2lzIG1ha2VyISIpOwovKiAxMDAxOiBkaXNhYmxlIGRpc2sgY2FjaGUKICogW05PVEVdIFdlIGFsc28gY2xlYXIgY2FjaGUgb24gZXhpdCAoMjgxMSspCiAqIFtTRVRVUC1DSFJPTUVdIElmIHlvdSB0aGluayBkaXNrIGNhY2hlIGhlbHBzIHBlcmYsIHRoZW4gZmVlbCBmcmVlIHRvIG92ZXJyaWRlIHRoaXMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuY2FjaGUuZGlzay5lbmFibGUiLCBmYWxzZSk7Ci8qIDEwMDI6IHNldCBtZWRpYSBjYWNoZSBpbiBQcml2YXRlIEJyb3dzaW5nIHRvIGluLW1lbW9yeSBhbmQgaW5jcmVhc2UgaXRzIG1heGltdW0gc2l6ZQogKiBbTk9URV0gTVNFIChNZWRpYSBTb3VyY2UgRXh0ZW5zaW9ucykgYXJlIGFscmVhZHkgc3RvcmVkIGluLW1lbW9yeSBpbiBQQiAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5wcml2YXRlYnJvd3NpbmcuZm9yY2VNZWRpYU1lbW9yeUNhY2hlIiwgdHJ1ZSk7IC8vIFtGRjc1K10KdXNlcl9wcmVmKCJtZWRpYS5tZW1vcnlfY2FjaGVfbWF4X3NpemUiLCA2NTUzNik7Ci8qIDEwMDM6IGRpc2FibGUgc3RvcmluZyBleHRyYSBzZXNzaW9uIGRhdGEgW1NFVFVQLUNIUk9NRV0KICogZGVmaW5lIG9uIHdoaWNoIHNpdGVzIHRvIHNhdmUgZXh0cmEgc2Vzc2lvbiBkYXRhIHN1Y2ggYXMgZm9ybSBjb250ZW50LCBjb29raWVzIGFuZCBQT1NUIGRhdGEKICogMD1ldmVyeXdoZXJlLCAxPXVuZW5jcnlwdGVkIHNpdGVzLCAyPW5vd2hlcmUgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc2Vzc2lvbnN0b3JlLnByaXZhY3lfbGV2ZWwiLCAyKTsKLyogMTAwNTogZGlzYWJsZSBhdXRvbWF0aWMgRmlyZWZveCBzdGFydCBhbmQgc2Vzc2lvbiByZXN0b3JlIGFmdGVyIHJlYm9vdCBbRkY2MitdIFtXSU5ET1dTXQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy82MDM5MDMgKioqLwp1c2VyX3ByZWYoInRvb2xraXQud2luUmVnaXN0ZXJBcHBsaWNhdGlvblJlc3RhcnQiLCBmYWxzZSk7Ci8qIDEwMDY6IGRpc2FibGUgZmF2aWNvbnMgaW4gc2hvcnRjdXRzIFtXSU5ET1dTXQogKiBVUkwgc2hvcnRjdXRzIHVzZSBhIGNhY2hlZCByYW5kb21seSBuYW1lZCAuaWNvIGZpbGUgd2hpY2ggaXMgc3RvcmVkIGluIHlvdXIKICogcHJvZmlsZS9zaG9ydGN1dENhY2hlIGRpcmVjdG9yeS4gVGhlIC5pY28gcmVtYWlucyBhZnRlciB0aGUgc2hvcnRjdXQgaXMgZGVsZXRlZAogKiBJZiBzZXQgdG8gZmFsc2UgdGhlbiB0aGUgc2hvcnRjdXRzIHVzZSBhIGdlbmVyaWMgRmlyZWZveCBpY29uICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnNoZWxsLnNob3J0Y3V0RmF2aWNvbnMiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDEyMDBdOiBIVFRQUyAoU1NML1RMUyAvIE9DU1AgLyBDRVJUUyAvIEhQS1ApCiAgIFlvdXIgY2lwaGVyIGFuZCBvdGhlciBzZXR0aW5ncyBjYW4gYmUgdXNlZCBpbiBzZXJ2ZXIgc2lkZSBmaW5nZXJwcmludGluZwogICBbVEVTVF0gaHR0cHM6Ly93d3cuc3NsbGFicy5jb20vc3NsdGVzdC92aWV3TXlDbGllbnQuaHRtbAogICBbVEVTVF0gaHR0cHM6Ly9icm93c2VybGVha3MuY29tL3NzbAogICBbVEVTVF0gaHR0cHM6Ly9qYTNlci5jb20vCiAgIFsxXSBodHRwczovL3d3dy5zZWN1cml0eWFydHdvcmsuZXMvMjAxNy8wMi8wMi90bHMtY2xpZW50LWZpbmdlcnByaW50aW5nLXdpdGgtYnJvLwoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjEyMDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgYSBzdGlmZiEiKTsKLyoqIFNTTCAoU2VjdXJlIFNvY2tldHMgTGF5ZXIpIC8gVExTIChUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkpICoqKi8KLyogMTIwMTogcmVxdWlyZSBzYWZlIG5lZ290aWF0aW9uCiAqIEJsb2NrcyBjb25uZWN0aW9ucyB0byBzZXJ2ZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBSRkMgNTc0NiBbMl0gYXMgdGhleSdyZSBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGEKICogTWlUTSBhdHRhY2sgWzNdLiBBIHNlcnZlciB3aXRob3V0IFJGQyA1NzQ2IGNhbiBiZSBzYWZlIGZyb20gdGhlIGF0dGFjayBpZiBpdCBkaXNhYmxlcyByZW5lZ290aWF0aW9ucwogKiBidXQgdGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgYnJvd3NlciBjYW4ndCBrbm93IHRoYXQuIFNldHRpbmcgdGhpcyBwcmVmIHRvIHRydWUgaXMgdGhlIG9ubHkgd2F5IGZvciB0aGUKICogYnJvd3NlciB0byBlbnN1cmUgdGhlcmUgd2lsbCBiZSBubyB1bnNhZmUgcmVuZWdvdGlhdGlvbnMgb24gdGhlIGNoYW5uZWwgYmV0d2VlbiB0aGUgYnJvd3NlciBhbmQgdGhlIHNlcnZlcgogKiBbU0VUVVAtV0VCXSBTU0xfRVJST1JfVU5TQUZFX05FR09USUFUSU9OOiBpcyBpdCB3b3J0aCBvdmVycmlkaW5nIHRoaXMgZm9yIHRoYXQgb25lIHNpdGU/CiAqIFtTVEFUU10gU1NMIExhYnMgKE5vdiAyMDI1KSByZXBvcnRzIGFsbW9zdCA5OS44NSUgb2YgdG9wIHNpdGVzIGhhdmUgc2VjdXJlIHJlbmVnb3RpYXRpb24gWzRdCiAqIFsxXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvU2VjdXJpdHk6UmVuZWdvdGlhdGlvbgogKiBbMl0gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM1NzQ2CiAqIFszXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVuYW1lLmNnaT9uYW1lPUNWRS0yMDA5LTM1NTUKICogWzRdIGh0dHBzOi8vd3d3LnNzbGxhYnMuY29tL3NzbC1wdWxzZS8gKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LnNzbC5yZXF1aXJlX3NhZmVfbmVnb3RpYXRpb24iLCB0cnVlKTsKLyogMTIwNjogZGlzYWJsZSBUTFMxLjMgMC1SVFQgKHJvdW5kLXRyaXAgdGltZSkgW0ZGNTErXQogKiBUaGlzIGRhdGEgaXMgbm90IGZvcndhcmQgc2VjcmV0LCBhcyBpdCBpcyBlbmNyeXB0ZWQgc29sZWx5IHVuZGVyIGtleXMgZGVyaXZlZCB1c2luZwogKiB0aGUgb2ZmZXJlZCBQU0suIFRoZXJlIGFyZSBubyBndWFyYW50ZWVzIG9mIG5vbi1yZXBsYXkgYmV0d2VlbiBjb25uZWN0aW9ucwogKiBbMV0gaHR0cHM6Ly9naXRodWIuY29tL3Rsc3dnL3RsczEzLXNwZWMvaXNzdWVzLzEwMDEKICogWzJdIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MDAxLmh0bWwjbmFtZS1yZXBsYXktYXR0YWNrcy13aXRoLTAtcnR0CiAqIFszXSBodHRwczovL2Jsb2cuY2xvdWRmbGFyZS5jb20vdGxzLTEtMy1vdmVydmlldy1hbmQtcS1hbmQtYS8gKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LnRscy5lbmFibGVfMHJ0dF9kYXRhIiwgZmFsc2UpOwoKLyoqIENFUlRTIC8gSFBLUCAoSFRUUCBQdWJsaWMgS2V5IFBpbm5pbmcpICoqKi8KLyogMTIyMzogZW5hYmxlIHN0cmljdCBQS1AgKFB1YmxpYyBLZXkgUGlubmluZykKICogMD1kaXNhYmxlZCwgMT1hbGxvdyB1c2VyIE1pVE0gKGRlZmF1bHQ7IHN1Y2ggYXMgeW91ciBhbnRpdmlydXMpLCAyPXN0cmljdAogKiBbU0VUVVAtV0VCXSBNT1pJTExBX1BLSVhfRVJST1JfS0VZX1BJTk5JTkdfRkFJTFVSRSAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkuY2VydF9waW5uaW5nLmVuZm9yY2VtZW50X2xldmVsIiwgMik7Ci8qIDEyMjQ6IGVuYWJsZSBDUkxpdGUgW0ZGNzMrXQogKiAwID0gZGlzYWJsZWQKICogMSA9IGNvbnN1bHQgQ1JMaXRlIGJ1dCBvbmx5IGNvbGxlY3QgdGVsZW1ldHJ5CiAqIDIgPSBjb25zdWx0IENSTGl0ZSBhbmQgZW5mb3JjZSBib3RoICJSZXZva2VkIiBhbmQgIk5vdCBSZXZva2VkIiByZXN1bHRzIChkZWZhdWx0KQogKiAzID0gY29uc3VsdCBDUkxpdGUgYW5kIGVuZm9yY2UgIk5vdCBSZXZva2VkIiByZXN1bHRzLCBidXQgZGVmZXIgdG8gT0NTUCBmb3IgIlJldm9rZWQiIChyZW1vdmVkIEZGMTQ1KQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MTQyOTgwMCwxNjcwOTg1LDE3NTMwNzEKICogWzJdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9zZWN1cml0eS90YWcvY3JsaXRlLwogKiBbM10gaHR0cHM6Ly9oYWNrcy5tb3ppbGxhLm9yZy8yMDI1LzA4L2NybGl0ZS1mYXN0LXByaXZhdGUtYW5kLWNvbXByZWhlbnNpdmUtY2VydGlmaWNhdGUtcmV2b2NhdGlvbi1jaGVja2luZy1pbi1maXJlZm94LyAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkucmVtb3RlX3NldHRpbmdzLmNybGl0ZV9maWx0ZXJzLmVuYWJsZWQiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCnVzZXJfcHJlZigic2VjdXJpdHkucGtpLmNybGl0ZV9tb2RlIiwgMik7IC8vIFtERUZBVUxUOiAyIEZGMTQyK10KCi8qKiBNSVhFRCBDT05URU5UICoqKi8KLyogMTI0MTogZGlzYWJsZSBpbnNlY3VyZSBwYXNzaXZlIGNvbnRlbnQgKHN1Y2ggYXMgaW1hZ2VzKSBvbiBodHRwcyBwYWdlcyAqKiovCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkubWl4ZWRfY29udGVudC5ibG9ja19kaXNwbGF5X2NvbnRlbnQiLCB0cnVlKTsgLy8gRGVmZW5zZS1pbi1kZXB0aCAoc2VlIDEyNDQpCi8qIDEyNDQ6IGVuYWJsZSBIVFRQUy1Pbmx5IG1vZGUgaW4gYWxsIHdpbmRvd3MKICogV2hlbiB0aGUgdG9wLWxldmVsIGlzIEhUVFBTLCBpbnNlY3VyZSBzdWJyZXNvdXJjZXMgYXJlIGFsc28gdXBncmFkZWQgKHNpbGVudCBmYWlsKQogKiBbU0VUVElOR10gdG8gYWRkIHNpdGUgZXhjZXB0aW9uczogUGFkbG9jaz5IVFRQUy1Pbmx5IG1vZGU+T24gKGFmdGVyICJDb250aW51ZSB0byBIVFRQIFNpdGUiKQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkhUVFBTLU9ubHkgTW9kZSAoYW5kIG1hbmFnZSBleGNlcHRpb25zKQogKiBbVEVTVF0gaHR0cDovL2V4YW1wbGUuY29tIFt1cGdyYWRlXQogKiBbVEVTVF0gaHR0cDovL2h0dHBmb3JldmVyLmNvbS8gfCBodHRwOi8vaHR0cC5yaXAgW25vIHVwZ3JhZGVdICoqKi8KdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlIiwgdHJ1ZSk7IC8vIFtGRjc2K10KICAgLy8gdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlX3BibSIsIHRydWUpOyAvLyBbRkY4MCtdCi8qIDEyNDU6IGVuYWJsZSBIVFRQUy1Pbmx5IG1vZGUgZm9yIGxvY2FsIHJlc291cmNlcyBbRkY3NytdICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlLnVwZ3JhZGVfbG9jYWwiLCB0cnVlKTsKLyogMTI0NjogZGlzYWJsZSBIVFRQIGJhY2tncm91bmQgcmVxdWVzdHMgW0ZGODIrXQogKiBXaGVuIGF0dGVtcHRpbmcgdG8gdXBncmFkZSwgaWYgdGhlIHNlcnZlciBkb2Vzbid0IHJlc3BvbmQgd2l0aGluIDMgc2Vjb25kcywgRmlyZWZveCBzZW5kcwogKiBhIHRvcC1sZXZlbCBIVFRQIHJlcXVlc3Qgd2l0aG91dCBwYXRoIGluIG9yZGVyIHRvIGNoZWNrIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgSFRUUFMgb3Igbm90CiAqIFRoaXMgaXMgZG9uZSB0byBhdm9pZCB3YWl0aW5nIGZvciBhIHRpbWVvdXQgd2hpY2ggdGFrZXMgOTAgc2Vjb25kcwogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MTY0MjM4NywxNjYwOTQ1ICoqKi8KdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlX3NlbmRfaHR0cF9iYWNrZ3JvdW5kX3JlcXVlc3QiLCBmYWxzZSk7CgovKiogVUkgKFVzZXIgSW50ZXJmYWNlKSAqKiovCi8qIDEyNzA6IGRpc3BsYXkgd2FybmluZyBvbiB0aGUgcGFkbG9jayBmb3IgImJyb2tlbiBzZWN1cml0eSIgKGlmIDEyMDEgaXMgZmFsc2UpCiAqIEJ1Zzogd2FybmluZyBwYWRsb2NrIG5vdCBpbmRpY2F0ZWQgZm9yIHN1YnJlc291cmNlcyBvbiBhIHNlY3VyZSBwYWdlISBbMl0KICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9TZWN1cml0eTpSZW5lZ290aWF0aW9uCiAqIFsyXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEzNTM3MDUgKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LnNzbC50cmVhdF91bnNhZmVfbmVnb3RpYXRpb25fYXNfYnJva2VuIiwgdHJ1ZSk7Ci8qIDEyNzI6IGRpc3BsYXkgYWR2YW5jZWQgaW5mb3JtYXRpb24gb24gSW5zZWN1cmUgQ29ubmVjdGlvbiB3YXJuaW5nIHBhZ2VzCiAqIG9ubHkgd29ya3Mgd2hlbiBpdCdzIHBvc3NpYmxlIHRvIGFkZCBhbiBleGNlcHRpb24KICogaS5lLiBpdCBkb2Vzbid0IHdvcmsgZm9yIEhTVFMgZGlzY3JlcGFuY2llcyAoaHR0cHM6Ly9zdWJkb21haW4ucHJlbG9hZGVkLWhzdHMuYmFkc3NsLmNvbS8pCiAqIFtURVNUXSBodHRwczovL2V4cGlyZWQuYmFkc3NsLmNvbS8gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIueHVsLmVycm9yX3BhZ2VzLmV4cGVydF9iYWRfY2VydCIsIHRydWUpOwoKLyoqKiBbU0VDVElPTiAxNjAwXTogUkVGRVJFUlMKICAgICAgICAgICAgICAgICAgZnVsbCBVUkk6IGh0dHBzOi8vZXhhbXBsZS5jb206ODg4OC9mb28vYmFyLmh0bWw/aWQ9MTIzNAogICAgIHNjaGVtZStob3N0K3BvcnQrcGF0aDogaHR0cHM6Ly9leGFtcGxlLmNvbTo4ODg4L2Zvby9iYXIuaHRtbAogICAgICAgICAgc2NoZW1lK2hvc3QrcG9ydDogaHR0cHM6Ly9leGFtcGxlLmNvbTo4ODg4CiAgIFsxXSBodHRwczovL2ZlZWRpbmcuY2xvdWQuZ2Vlay5uei9wb3N0cy90d2Vha2luZy1yZWZlcnJlci1mb3ItcHJpdmFjeS1pbi1maXJlZm94LwoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjE2MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90IHJlc3RzIGluIHBlYWNlISIpOwovKiAxNjAyOiBjb250cm9sIHRoZSBhbW91bnQgb2YgY3Jvc3Mtb3JpZ2luIGluZm9ybWF0aW9uIHRvIHNlbmQgW0ZGNTIrXQogKiAwPXNlbmQgZnVsbCBVUkkgKGRlZmF1bHQpLCAxPXNjaGVtZStob3N0K3BvcnQrcGF0aCwgMj1zY2hlbWUraG9zdCtwb3J0ICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci5YT3JpZ2luVHJpbW1pbmdQb2xpY3kiLCAyKTsKCi8qKiogW1NFQ1RJT04gMTcwMF06IENPTlRBSU5FUlMgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIxNzAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGJpdCB0aGUgZHVzdCEiKTsKLyogMTcwMTogZW5hYmxlIENvbnRhaW5lciBUYWJzIGFuZCBpdHMgVUkgc2V0dGluZyBbRkY1MCtdCiAqIFtTRVRUSU5HXSBHZW5lcmFsPlRhYnM+RW5hYmxlIENvbnRhaW5lciBUYWJzCiAqIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9TZWN1cml0eS9Db250ZXh0dWFsX0lkZW50aXR5X1Byb2plY3QvQ29udGFpbmVycyAqKiovCnVzZXJfcHJlZigicHJpdmFjeS51c2VyQ29udGV4dC5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigicHJpdmFjeS51c2VyQ29udGV4dC51aS5lbmFibGVkIiwgdHJ1ZSk7Ci8qIDE3MDI6IHNldCBiZWhhdmlvciBvbiAiKyBUYWIiIGJ1dHRvbiB0byBkaXNwbGF5IGNvbnRhaW5lciBtZW51IG9uIGxlZnQgY2xpY2sgW0ZGNzQrXQogKiBbTk9URV0gVGhlIG1lbnUgaXMgYWx3YXlzIHNob3duIG9uIGxvbmcgcHJlc3MgYW5kIHJpZ2h0IGNsaWNrCiAqIFtTRVRUSU5HXSBHZW5lcmFsPlRhYnM+RW5hYmxlIENvbnRhaW5lciBUYWJzPlNldHRpbmdzPlNlbGVjdCBhIGNvbnRhaW5lciBmb3IgZWFjaCBuZXcgdGFiICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnVzZXJDb250ZXh0Lm5ld1RhYkNvbnRhaW5lck9uTGVmdENsaWNrLmVuYWJsZWQiLCB0cnVlKTsKLyogMTcwMzogc2V0IGV4dGVybmFsIGxpbmtzIHRvIG9wZW4gaW4gc2l0ZS1zcGVjaWZpYyBjb250YWluZXJzIFtGRjEyMytdCiAqIFtTRVRVUC1XRUJdIERlcGVuZGluZyBvbiB5b3VyIGNvbnRhaW5lciBleHRlbnNpb24ocykgYW5kIHRoZWlyIHNldHRpbmdzCiAqIHRydWU9RmlyZWZveCB3aWxsIG5vdCBjaG9vc2UgYSBjb250YWluZXIgKHNvIHlvdXIgZXh0ZW5zaW9uIGNhbikKICogZmFsc2U9RmlyZWZveCB3aWxsIGNob29zZSB0aGUgY29udGFpbmVyL25vLWNvbnRhaW5lciAoZGVmYXVsdCkKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTg3NDU5OSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5saW5rLmZvcmNlX2RlZmF1bHRfdXNlcl9jb250ZXh0X2lkX2Zvcl9leHRlcm5hbF9vcGVucyIsIHRydWUpOwoKLyoqKiBbU0VDVElPTiAyMDAwXTogUExVR0lOUyAvIE1FRElBIC8gV0VCUlRDICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBzbnVmZmVkIGl0ISIpOwovKiAyMDAyOiBmb3JjZSBXZWJSVEMgaW5zaWRlIHRoZSBwcm94eSBbRkY3MCtdICoqKi8KdXNlcl9wcmVmKCJtZWRpYS5wZWVyY29ubmVjdGlvbi5pY2UucHJveHlfb25seV9pZl9iZWhpbmRfcHJveHkiLCB0cnVlKTsKLyogMjAwMzogZm9yY2UgYSBzaW5nbGUgbmV0d29yayBpbnRlcmZhY2UgZm9yIElDRSBjYW5kaWRhdGVzIGdlbmVyYXRpb24gW0ZGNDIrXQogKiBXaGVuIHVzaW5nIGEgc3lzdGVtLXdpZGUgcHJveHksIGl0IHVzZXMgdGhlIHByb3h5IGludGVyZmFjZQogKiBbMV0gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1JUQ0ljZUNhbmRpZGF0ZQogKiBbMl0gaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL01lZGlhL1dlYlJUQy9Qcml2YWN5ICoqKi8KdXNlcl9wcmVmKCJtZWRpYS5wZWVyY29ubmVjdGlvbi5pY2UuZGVmYXVsdF9hZGRyZXNzX29ubHkiLCB0cnVlKTsKLyogMjAwNDogZm9yY2UgZXhjbHVzaW9uIG9mIHByaXZhdGUgSVBzIGZyb20gSUNFIGNhbmRpZGF0ZXMgW0ZGNTErXQogKiBbU0VUVVAtSEFSREVOXSBUaGlzIHdpbGwgcHJvdGVjdCB5b3VyIHByaXZhdGUgSVAgZXZlbiBpbiBUUlVTVEVEIHNjZW5hcmlvcyBhZnRlciB5b3UKICogZ3JhbnQgZGV2aWNlIGFjY2VzcywgYnV0IG9mdGVuIHJlc3VsdHMgaW4gYnJlYWthZ2Ugb24gdmlkZW8tY29uZmVyZW5jaW5nIHBsYXRmb3JtcyAqKiovCiAgIC8vIHVzZXJfcHJlZigibWVkaWEucGVlcmNvbm5lY3Rpb24uaWNlLm5vX2hvc3QiLCB0cnVlKTsKLyogMjAyMDogZGlzYWJsZSBHTVAgKEdlY2tvIE1lZGlhIFBsdWdpbnMpCiAqIFsxXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvR2Vja29NZWRpYVBsdWdpbnMgKioqLwogICAvLyB1c2VyX3ByZWYoIm1lZGlhLmdtcC1wcm92aWRlci5lbmFibGVkIiwgZmFsc2UpOwoKLyoqKiBbU0VDVElPTiAyNDAwXTogRE9NIChET0NVTUVOVCBPQkpFQ1QgTU9ERUwpICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjQwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBraWNrZWQgdGhlIGJ1Y2tldCEiKTsKLyogMjQwMjogcHJldmVudCBzY3JpcHRzIGZyb20gbW92aW5nIGFuZCByZXNpemluZyBvcGVuIHdpbmRvd3MgKioqLwp1c2VyX3ByZWYoImRvbS5kaXNhYmxlX3dpbmRvd19tb3ZlX3Jlc2l6ZSIsIHRydWUpOwoKLyoqKiBbU0VDVElPTiAyNjAwXTogTUlTQ0VMTEFORU9VUyAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjI2MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgcnVuIGRvd24gdGhlIGN1cnRhaW4hIik7Ci8qIDI2MDM6IHJlbW92ZSB0ZW1wIGZpbGVzIG9wZW5lZCBmcm9tIG5vbi1QQiB3aW5kb3dzIHdpdGggYW4gZXh0ZXJuYWwgYXBwbGljYXRpb24KICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvYnVnbGlzdC5jZ2k/YnVnX2lkPTMwMjQzMywxNzM4NTc0ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLnN0YXJ0X2Rvd25sb2Fkc19pbl90bXBfZGlyIiwgdHJ1ZSk7IC8vIFtGRjEwMitdCnVzZXJfcHJlZigiYnJvd3Nlci5oZWxwZXJBcHBzLmRlbGV0ZVRlbXBGaWxlT25FeGl0IiwgdHJ1ZSk7Ci8qIDI2MDY6IGRpc2FibGUgVUlUb3VyIGJhY2tlbmQgc28gdGhlcmUgaXMgbm8gY2hhbmNlIHRoYXQgYSByZW1vdGUgcGFnZSBjYW4gdXNlIGl0ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnVpdG91ci5lbmFibGVkIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudWl0b3VyLnVybCIsICIiKTsgLy8gRGVmZW5zZS1pbi1kZXB0aAovKiAyNjA4OiByZXNldCByZW1vdGUgZGVidWdnaW5nIHRvIGRpc2FibGVkCiAqIFsxXSBodHRwczovL2dpdGxhYi50b3Jwcm9qZWN0Lm9yZy90cG8vYXBwbGljYXRpb25zL3Rvci1icm93c2VyLy0vaXNzdWVzLzE2MjIyICoqKi8KdXNlcl9wcmVmKCJkZXZ0b29scy5kZWJ1Z2dlci5yZW1vdGUtZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiAyNjE1OiBkaXNhYmxlIHdlYnNpdGVzIG92ZXJyaWRpbmcgRmlyZWZveCdzIGtleWJvYXJkIHNob3J0Y3V0cyBbRkY1OCtdCiAqIDAgKGRlZmF1bHQpIG9yIDE9YWxsb3csIDI9YmxvY2sKICogW1NFVFRJTkddIHRvIGFkZCBzaXRlIGV4Y2VwdGlvbnM6IEN0cmwrST5QZXJtaXNzaW9ucz5PdmVycmlkZSBLZXlib2FyZCBTaG9ydGN1dHMgKioqLwogICAvLyB1c2VyX3ByZWYoInBlcm1pc3Npb25zLmRlZmF1bHQuc2hvcnRjdXRzIiwgMik7Ci8qIDI2MTY6IHJlbW92ZSBzcGVjaWFsIHBlcm1pc3Npb25zIGZvciBjZXJ0YWluIG1vemlsbGEgZG9tYWlucyBbRkYzNStdCiAqIFsxXSByZXNvdXJjZTovL2FwcC9kZWZhdWx0cy9wZXJtaXNzaW9ucyAqKiovCnVzZXJfcHJlZigicGVybWlzc2lvbnMubWFuYWdlci5kZWZhdWx0c1VybCIsICIiKTsKLyogMjYxOTogdXNlIFB1bnljb2RlIGluIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyB0byBlbGltaW5hdGUgcG9zc2libGUgc3Bvb2ZpbmcKICogW1NFVFVQLVdFQl0gTWlnaHQgYmUgdW5kZXNpcmFibGUgZm9yIG5vbi1sYXRpbiBhbHBoYWJldCB1c2VycyBzaW5jZSBsZWdpdGltYXRlIElETidzIGFyZSBhbHNvIHB1bnljb2RlZAogKiBbVEVTVF0gaHR0cHM6Ly93d3cueG4tLTgwYWs2YWE5MmUuY29tLyAod3d3LmFwcGxlLmNvbSkKICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9JRE5fRGlzcGxheV9BbGdvcml0aG0KICogWzJdIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lETl9ob21vZ3JhcGhfYXR0YWNrCiAqIFszXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9cHVueWNvZGUrZmlyZWZveAogKiBbNF0gaHR0cHM6Ly93d3cueHVkb25nei5jb20vYmxvZy8yMDE3L2lkbi1waGlzaGluZy8gKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuSUROX3Nob3dfcHVueWNvZGUiLCB0cnVlKTsKLyogMjYyMDogZW5mb3JjZSBQREZKUywgZGlzYWJsZSBQREZKUyBzY3JpcHRpbmcKICogVGhpcyBzZXR0aW5nIGNvbnRyb2xzIGlmIHRoZSBvcHRpb24gIkRpc3BsYXkgaW4gRmlyZWZveCIgaXMgYXZhaWxhYmxlIGluIHRoZSBzZXR0aW5nIGJlbG93CiAqICAgYW5kIGJ5IGVmZmVjdCBjb250cm9scyB3aGV0aGVyIFBERnMgYXJlIGhhbmRsZWQgaW4tYnJvd3NlciBvciBleHRlcm5hbGx5ICgiQXNrIiBvciAiT3BlbiBXaXRoIikKICogW1dIWV0gcGRmanMgaXMgbGlnaHR3ZWlnaHQsIG9wZW4gc291cmNlLCBhbmQgc2VjdXJlOiBJbiB0aGUgbGFzdCAxMCB5ZWFycyBpdCBoYXMgb25seSBoYWQKICogICB0d28ga25vd24gZXhwbG9pdHMsIGJvdGggaW4gMjAyNDogb25lICdTZXZlcmUnIGFuZCBvbmUgJ0ltcG9ydGFudCcgWzFdCiAqICAgSXQgZG9lc24ndCBicmVhayAic3RhdGUgc2VwYXJhdGlvbiIgb2YgYnJvd3NlciBjb250ZW50IChieSBub3Qgc2hhcmluZyB3aXRoIE9TLCBpbmRlcGVuZGVudCBhcHBzKS4KICogICBJdCBtYWludGFpbnMgZGlzayBhdm9pZGFuY2UgYW5kIGFwcGxpY2F0aW9uIGRhdGEgaXNvbGF0aW9uLiBJdCdzIGNvbnZlbmllbnQuIFlvdSBjYW4gc3RpbGwgc2F2ZSB0byBkaXNrLgogKiBbTk9URV0gSlMgY2FuIHN0aWxsIGZvcmNlIGEgcGRmIHRvIG9wZW4gaW4tYnJvd3NlciBieSBidW5kbGluZyBpdHMgb3duIGNvZGUKICogW1NFVFVQLUNIUk9NRV0gWW91IG1heSBwcmVmZXIgYSBkaWZmZXJlbnQgcGRmIHJlYWRlciBmb3Igc2VjdXJpdHkvd29ya2Zsb3cgcmVhc29ucwogKiBbU0VUVElOR10gR2VuZXJhbD5BcHBsaWNhdGlvbnM+UG9ydGFibGUgRG9jdW1lbnQgRm9ybWF0IChQREYpCiAqIFsxXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9cGRmLmpzK2ZpcmVmb3ggKioqLwp1c2VyX3ByZWYoInBkZmpzLmRpc2FibGVkIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCnVzZXJfcHJlZigicGRmanMuZW5hYmxlU2NyaXB0aW5nIiwgZmFsc2UpOyAvLyBbRkY4NitdCi8qIDI2MjQ6IGRpc2FibGUgbWlkZGxlIGNsaWNrIG9uIG5ldyB0YWIgYnV0dG9uIG9wZW5pbmcgVVJMcyBvciBzZWFyY2hlcyB1c2luZyBjbGlwYm9hcmQgW0ZGMTE1K10gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIudGFicy5zZWFyY2hjbGlwYm9hcmRmb3IubWlkZGxlY2xpY2siLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZSBOT04tTElOVVhdCi8qIDI2MzA6IGRpc2FibGUgY29udGVudCBhbmFseXNpcyBieSBETFAgKERhdGEgTG9zcyBQcmV2ZW50aW9uKSBhZ2VudHMKICogRExQIGFnZW50cyBhcmUgYmFja2dyb3VuZCBwcm9jZXNzZXMgb24gbWFuYWdlZCBjb21wdXRlcnMgdGhhdCBhbGxvdyBlbnRlcnByaXNlcyB0byBtb25pdG9yIGxvY2FsbHkgcnVubmluZwogKiBhcHBsaWNhdGlvbnMgZm9yIGRhdGEgZXhmaWx0cmF0aW9uIGV2ZW50cywgd2hpY2ggdGhleSBjYW4gYWxsb3cvYmxvY2sgYmFzZWQgb24gY3VzdG9tZXIgZGVmaW5lZCBETFAgcG9saWNpZXMuCiAqIDA9QmxvY2sgYWxsIHJlcXVlc3RzLCAxPVdhcm4gb24gYWxsIHJlcXVlc3RzICh3aGljaCBsZXRzIHRoZSB1c2VyIGRlY2lkZSksIDI9QWxsb3cgYWxsIHJlcXVlc3RzCiAqIFsxXSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY29udGVudF9hbmFseXNpc19zZGsgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuY29udGVudGFuYWx5c2lzLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjEyMStdIFtERUZBVUxUOiBmYWxzZV0KdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRhbmFseXNpcy5kZWZhdWx0X3Jlc3VsdCIsIDApOyAvLyBbRkYxMjcrXSBbREVGQVVMVDogMF0KLyogMjYzNTogZGlzYWJsZSByZWZlcnJlciBhbmQgc3RvcmFnZSBhY2Nlc3MgZm9yIHJlc291cmNlcyBpbmplY3RlZCBieSBjb250ZW50IHNjcmlwdHMgW0ZGMTM5K10gKioqLwp1c2VyX3ByZWYoInByaXZhY3kuYW50aXRyYWNraW5nLmlzb2xhdGVDb250ZW50U2NyaXB0UmVzb3VyY2VzIiwgdHJ1ZSk7Ci8qIDI2NDA6IGRpc2FibGUgQ1NQIExldmVsIDIgUmVwb3J0aW5nIFtGRjE0MCtdICoqKi8KdXNlcl9wcmVmKCJzZWN1cml0eS5jc3AucmVwb3J0aW5nLmVuYWJsZWQiLCBmYWxzZSk7CgovKiogRE9XTkxPQURTICoqKi8KLyogMjY1MTogZW5hYmxlIHVzZXIgaW50ZXJhY3Rpb24gZm9yIHNlY3VyaXR5IGJ5IGFsd2F5cyBhc2tpbmcgd2hlcmUgdG8gZG93bmxvYWQKICogW1NFVFVQLUNIUk9NRV0gT24gQW5kcm9pZCB0aGlzIGJsb2NrcyBsb25ndGFwcGluZyBhbmQgc2F2aW5nIGltYWdlcwogKiBbU0VUVElOR10gR2VuZXJhbD5Eb3dubG9hZHM+QWx3YXlzIGFzayB5b3Ugd2hlcmUgdG8gc2F2ZSBmaWxlcyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5kb3dubG9hZC51c2VEb3dubG9hZERpciIsIGZhbHNlKTsKLyogMjY1MjogZGlzYWJsZSBkb3dubG9hZHMgcGFuZWwgb3BlbmluZyBvbiBldmVyeSBkb3dubG9hZCBbRkY5NitdICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLmFsd2F5c09wZW5QYW5lbCIsIGZhbHNlKTsKLyogMjY1MzogZGlzYWJsZSBhZGRpbmcgZG93bmxvYWRzIHRvIHRoZSBzeXN0ZW0ncyAicmVjZW50IGRvY3VtZW50cyIgbGlzdCAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5kb3dubG9hZC5tYW5hZ2VyLmFkZFRvUmVjZW50RG9jcyIsIGZhbHNlKTsKLyogMjY1NDogZW5hYmxlIHVzZXIgaW50ZXJhY3Rpb24gZm9yIHNlY3VyaXR5IGJ5IGFsd2F5cyBhc2tpbmcgaG93IHRvIGhhbmRsZSBuZXcgbWltZXR5cGVzIFtGRjEwMStdCiAqIFtTRVRUSU5HXSBHZW5lcmFsPkZpbGVzIGFuZCBBcHBsaWNhdGlvbnM+V2hhdCBzaG91bGQgRmlyZWZveCBkbyB3aXRoIG90aGVyIGZpbGVzICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLmFsd2F5c19hc2tfYmVmb3JlX2hhbmRsaW5nX25ld190eXBlcyIsIHRydWUpOwoKLyoqIEVYVEVOU0lPTlMgKioqLwovKiAyNjYwOiBsaW1pdCBhbGxvd2VkIGV4dGVuc2lvbiBkaXJlY3RvcmllcwogKiAxPXByb2ZpbGUsIDI9dXNlciwgND1hcHBsaWNhdGlvbiwgOD1zeXN0ZW0sIDE2PXRlbXBvcmFyeSwgMzE9YWxsCiAqIFRoZSBwcmVmIHZhbHVlIHJlcHJlc2VudHMgdGhlIHN1bTogZS5nLiA1IHdvdWxkIGJlIHByb2ZpbGUgYW5kIGFwcGxpY2F0aW9uIGRpcmVjdG9yaWVzCiAqIFtTRVRVUC1DSFJPTUVdIEJyZWFrcyB1c2FnZSBvZiBmaWxlcyB3aGljaCBhcmUgaW5zdGFsbGVkIG91dHNpZGUgYWxsb3dlZCBkaXJlY3RvcmllcwogKiBbMV0gaHR0cHM6Ly9hcmNoaXZlLmlzL0RZakFNICoqKi8KdXNlcl9wcmVmKCJleHRlbnNpb25zLmVuYWJsZWRTY29wZXMiLCA1KTsgLy8gW0hJRERFTiBQUkVGXQogICAvLyB1c2VyX3ByZWYoImV4dGVuc2lvbnMuYXV0b0Rpc2FibGVTY29wZXMiLCAxNSk7IC8vIFtERUZBVUxUOiAxNV0KLyogMjY2MTogZGlzYWJsZSBieXBhc3NpbmcgM3JkIHBhcnR5IGV4dGVuc2lvbiBpbnN0YWxsIHByb21wdHMgW0ZGODIrXQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MTY1OTUzMCwxNjgxMzMxICoqKi8KdXNlcl9wcmVmKCJleHRlbnNpb25zLnBvc3REb3dubG9hZFRoaXJkUGFydHlQcm9tcHQiLCBmYWxzZSk7Ci8qIDI2NjI6IGRpc2FibGUgd2ViZXh0ZW5zaW9uIHJlc3RyaWN0aW9ucyBvbiBjZXJ0YWluIG1vemlsbGEgZG9tYWlucyAoeW91IGFsc28gbmVlZCA0NTAzKSBbRkY2MCtdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL2J1Z2xpc3QuY2dpP2J1Z19pZD0xMzg0MzMwLDE0MDY3OTUsMTQxNTY0NCwxNDUzOTg4ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJleHRlbnNpb25zLndlYmV4dGVuc2lvbnMucmVzdHJpY3RlZERvbWFpbnMiLCAiIik7CgovKioqIFtTRUNUSU9OIDI3MDBdOiBFVFAgKEVOSEFOQ0VEIFRSQUNLSU5HIFBST1RFQ1RJT04pICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjcwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBqb2luZWQgdGhlIGJsZWVkaW4nIGNob2lyIGludmlzaWJsZSEiKTsKLyogMjcwMTogZW5hYmxlIEVUUCBTdHJpY3QgTW9kZSBbRkY4NitdCiAqIEVUUCBTdHJpY3QgTW9kZSBlbmFibGVzIFRvdGFsIENvb2tpZSBQcm90ZWN0aW9uIChUQ1ApCiAqIFtOT1RFXSBBZGRpbmcgc2l0ZSBleGNlcHRpb25zIGRpc2FibGVzIGFsbCBFVFAgcHJvdGVjdGlvbnMgZm9yIHRoYXQgc2l0ZSBhbmQgaW5jcmVhc2VzIHRoZSByaXNrIG9mCiAqIGNyb3NzLXNpdGUgc3RhdGUgdHJhY2tpbmcgZS5nLiBleGNlcHRpb25zIGZvciBTaXRlQSBhbmQgU2l0ZUIgbWVhbnMgUGFydHlDIG9uIGJvdGggc2l0ZXMgaXMgc2hhcmVkCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8wMi8yMy90b3RhbC1jb29raWUtcHJvdGVjdGlvbi8KICogW1NFVFRJTkddIHRvIGFkZCBzaXRlIGV4Y2VwdGlvbnM6IFVybGJhcj5FVFAgU2hpZWxkCiAqIFtTRVRUSU5HXSB0byBtYW5hZ2Ugc2l0ZSBleGNlcHRpb25zOiBPcHRpb25zPlByaXZhY3kgJiBTZWN1cml0eT5FbmhhbmNlZCBUcmFja2luZyBQcm90ZWN0aW9uPk1hbmFnZSBFeGNlcHRpb25zICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRibG9ja2luZy5jYXRlZ29yeSIsICJzdHJpY3QiKTsgLy8gW0hJRERFTiBQUkVGXQovKiAyNzAyOiBkaXNhYmxlIEVUUCB3ZWIgY29tcGF0IGZlYXR1cmVzIChhYm91dDpjb21wYXQpIFtGRjkzK10KICogW1NFVFVQLUhBUkRFTl0gSW5jbHVkZXMgc2tpcCBsaXN0cywgaGV1cmlzdGljcyAoU21hcnRCbG9jaykgYW5kIGF1dG9tYXRpYyBncmFudHMKICogT3BlbmVyIGFuZCByZWRpcmVjdCBoZXVyaXN0aWNzIGFyZSBncmFudGVkIGZvciAzMCBkYXlzLCBzZWUgWzNdCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8wNy8xMy9zbWFydGJsb2NrLXYyLwogKiBbMl0gaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9tb3ppbGxhLWNlbnRyYWwvcmV2L2U1NDgzZmQ0NjlhYiNsNC4xMgogKiBbM10gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvUHJpdmFjeS9TdGF0ZV9QYXJ0aXRpb25pbmcjc3RvcmFnZV9hY2Nlc3NfaGV1cmlzdGljcyAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5hbnRpdHJhY2tpbmcuZW5hYmxlV2ViY29tcGF0IiwgZmFsc2UpOwovKiAyNzA1OiBzZXQgRVRQIFN0cmljdC9DdXN0b20gZXhjZXB0aW9uIGxpc3RzIChGRjE0MSspCiBbU0VUVElOR10gT3B0aW9ucz5Qcml2YWN5ICYgU2VjdXJpdHk+RW5oYW5jZWQgVHJhY2tpbmcgUHJvdGVjdGlvbj5TdHJpY3QvQ3VzdG9tPkZpeCBtYWpvciBbYmFzZWxpbmVdIHwgbWlub3IgW2NvbnZlbmllbmNlXQogWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9lbi1VUy9rYi9tYW5hZ2UtZW5oYW5jZWQtdHJhY2tpbmctcHJvdGVjdGlvbi1leGNlcHRpb25zCiBbMl0gaHR0cHM6Ly9ldHAtZXhjZXB0aW9ucy5tb3ppbGxhLm9yZy8gKioqLwp1c2VyX3ByZWYoInByaXZhY3kudHJhY2tpbmdwcm90ZWN0aW9uLmFsbG93X2xpc3QuYmFzZWxpbmUuZW5hYmxlZCIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LnRyYWNraW5ncHJvdGVjdGlvbi5hbGxvd19saXN0LmNvbnZlbmllbmNlLmVuYWJsZWQiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCgovKioqIFtTRUNUSU9OIDI4MDBdOiBTSFVURE9XTiAmIFNBTklUSVpJTkcKICAgV2UgZW5hYmxlIHNhbml0aXplT25TaHV0ZG93biB0byBoZWxwIHByZXZlbnQgMXN0IHBhcnR5IHdlYnNpdGUgdHJhY2tpbmcgYWNyb3NzIHNlc3Npb25zLgogICBXZSBjb25zaWRlciBoaXN0b3J5L2Rvd25sb2Fkcywgd2hpY2ggYXJlIG5vdCBhY2Nlc3NpYmxlIHRvIHdlYnNpdGVzLCBhcyBvcnRob2dvbmFsIGFuZCBleGVtcHQgdGhlc2UKCiAgIFtTRVRVUC1IQVJERU5dIHRvIGNsZWFyIGFsbCBoaXN0b3J5L2Rvd25sb2FkcyBvbiBjbG9zZSwgYWRkIHRoZSBhcHByb3ByaWF0ZSBvdmVycmlkZXMgZnJvbSAyODAwJ3MKKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIyODAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGJsZWVkaW4nIGRlbWlzZWQhIik7Ci8qIDI4MTA6IGVuYWJsZSBGaXJlZm94IHRvIGNsZWFyIGl0ZW1zIG9uIHNodXRkb3duCiAqIFtOT1RFXSBJbiBGRjEyOSsgY2xlYXJpbmcgInNpdGVTZXR0aW5ncyIgb24gc2h1dGRvd24gKDI4MTErKSwgb3IgbWFudWFsbHkgdmlhIHNpdGUgZGF0YSAoMjgyMCspIGFuZAogKiB2aWEgaGlzdG9yeSAoMjgzMCksIHdpbGwgbm8gbG9uZ2VyIHJlbW92ZSBzYW5pdGl6ZSBvbiBzaHV0ZG93biAiY29va2llIGFuZCBzaXRlIGRhdGEiIHNpdGUgZXhjZXB0aW9ucyAoMjgxNSkKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5IaXN0b3J5PkN1c3RvbSBTZXR0aW5ncz5DbGVhciBoaXN0b3J5IHdoZW4gRmlyZWZveCBjbG9zZXMgfCBTZXR0aW5ncyAqKiovCnVzZXJfcHJlZigicHJpdmFjeS5zYW5pdGl6ZS5zYW5pdGl6ZU9uU2h1dGRvd24iLCB0cnVlKTsKCi8qKiBTQU5JVElaRSBPTiBTSFVURE9XTjogSUdOT1JFUyAiQUxMT1ciIFNJVEUgRVhDRVBUSU9OUyAqKiovCi8qIDI4MTE6IHNldC9lbmZvcmNlIGNsZWFyT25TaHV0ZG93biBpdGVtcyAoaWYgMjgxMCBpcyB0cnVlKSBbU0VUVVAtQ0hST01FXSBbRkYxMjgrXSAqKiovCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd25fdjIuY2FjaGUiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd25fdjIuaGlzdG9yeUZvcm1EYXRhQW5kRG93bmxvYWRzIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogdHJ1ZV0KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bl92Mi5zaXRlU2V0dGluZ3MiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KLyogMjgxMjogc2V0L2VuZm9yY2UgY2xlYXJPblNodXRkb3duIGl0ZW1zIFtGRjEzNitdICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bl92Mi5icm93c2luZ0hpc3RvcnlBbmREb3dubG9hZHMiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiB0cnVlXQp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duX3YyLmRvd25sb2FkcyIsIGZhbHNlKTsgLy8gW0hJRERFTl0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bl92Mi5mb3JtZGF0YSIsIHRydWUpOwovKiAyODEzOiBzZXQgU2Vzc2lvbiBSZXN0b3JlIHRvIGNsZWFyIG9uIHNodXRkb3duIChpZiAyODEwIGlzIHRydWUpIFtGRjM0K10KICogW05PVEVdIE5vdCBuZWVkZWQgaWYgU2Vzc2lvbiBSZXN0b3JlIGlzIG5vdCB1c2VkICgwMTAyKSBvciBpdCBpcyBhbHJlYWR5IGNsZWFyZWQgd2l0aCBoaXN0b3J5ICgyODExKykKICogW05PVEVdIElmIHRydWUsIHRoaXMgcHJldmVudHMgcmVzdW1pbmcgZnJvbSBjcmFzaGVzIChhbHNvIHNlZSA1MDA4KSAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd24ub3BlbldpbmRvd3MiLCB0cnVlKTsKCi8qKiBTQU5JVElaRSBPTiBTSFVURE9XTjogUkVTUEVDVFMgIkFMTE9XIiBTSVRFIEVYQ0VQVElPTlMgKioqLwovKiAyODE1OiBzZXQgIkNvb2tpZXMiIGFuZCAiU2l0ZSBEYXRhIiB0byBjbGVhciBvbiBzaHV0ZG93biAoaWYgMjgxMCBpcyB0cnVlKSBbU0VUVVAtQ0hST01FXSBbRkYxMjgrXQogKiBbTk9URV0gRXhjZXB0aW9uczogRm9yIGNyb3NzLWRvbWFpbiBsb2dpbnMsIGFkZCBleGNlcHRpb25zIGZvciBib3RoIHNpdGVzCiAqIGUuZy4gaHR0cHM6Ly93d3cueW91dHViZS5jb20gKHNpdGUpICsgaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tIChzaW5nbGUgc2lnbiBvbikKICogW1dBUk5JTkddIEJlIHNlbGVjdGl2ZSB3aXRoIHdoYXQgc2l0ZXMgeW91ICJBbGxvdyIsIGFzIHRoZXkgYWxzbyBkaXNhYmxlIHBhcnRpdGlvbmluZyAoMTc2NzI3MSkKICogW1NFVFRJTkddIHRvIGFkZCBzaXRlIGV4Y2VwdGlvbnM6IEN0cmwrST5QZXJtaXNzaW9ucz5Db29raWVzPkFsbG93ICh3aGVuIG9uIHRoZSB3ZWJzaXRlIGluIHF1ZXN0aW9uKQogKiBbU0VUVElOR10gdG8gbWFuYWdlIHNpdGUgZXhjZXB0aW9uczogT3B0aW9ucz5Qcml2YWN5ICYgU2VjdXJpdHk+UGVybWlzc2lvbnM+U2V0dGluZ3MgKioqLwp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duX3YyLmNvb2tpZXNBbmRTdG9yYWdlIiwgdHJ1ZSk7CgovKiogU0FOSVRJWkUgU0lURSBEQVRBOiBJR05PUkVTICJBTExPVyIgU0lURSBFWENFUFRJT05TICoqKi8KLyogMjgyMDogc2V0IG1hbnVhbCAiQ2xlYXIgRGF0YSIgaXRlbXMgW1NFVFVQLUNIUk9NRV0gW0ZGMTI4K10KICogRmlyZWZveCByZW1lbWJlcnMgeW91ciBsYXN0IGNob2ljZXMuIFRoaXMgd2lsbCByZXNldCB0aGVtIHdoZW4geW91IHN0YXJ0IEZpcmVmb3gKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5Ccm93c2VyIFByaXZhY3k+Q29va2llcyBhbmQgU2l0ZSBEYXRhPkNsZWFyIERhdGEgKioqLwp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJTaXRlRGF0YS5jYWNoZSIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyU2l0ZURhdGEuY29va2llc0FuZFN0b3JhZ2UiLCBmYWxzZSk7IC8vIGtlZXAgZmFsc2UgdW50aWwgaXQgcmVzcGVjdHMgImFsbG93IiBzaXRlIGV4Y2VwdGlvbnMKdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyU2l0ZURhdGEuaGlzdG9yeUZvcm1EYXRhQW5kRG93bmxvYWRzIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJTaXRlRGF0YS5zaXRlU2V0dGluZ3MiLCBmYWxzZSk7Ci8qIDI4MjE6IHNldCBtYW51YWwgIkNsZWFyIERhdGEiIGl0ZW1zIFtGRjEzNitdICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyU2l0ZURhdGEuYnJvd3NpbmdIaXN0b3J5QW5kRG93bmxvYWRzIiwgZmFsc2UpOwp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJTaXRlRGF0YS5mb3JtZGF0YSIsIHRydWUpOwoKLyoqIFNBTklUSVpFIEhJU1RPUlk6IElHTk9SRVMgIkFMTE9XIiBTSVRFIEVYQ0VQVElPTlMgKioqLwovKiAyODMwOiBzZXQgbWFudWFsICJDbGVhciBIaXN0b3J5IiBpdGVtcywgYWxzbyB2aWEgQ3RybC1TaGlmdC1EZWwgW1NFVFVQLUNIUk9NRV0gW0ZGMTI4K10KICogRmlyZWZveCByZW1lbWJlcnMgeW91ciBsYXN0IGNob2ljZXMuIFRoaXMgd2lsbCByZXNldCB0aGVtIHdoZW4geW91IHN0YXJ0IEZpcmVmb3gKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5IaXN0b3J5PkN1c3RvbSBTZXR0aW5ncz5DbGVhciBIaXN0b3J5ICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5jYWNoZSIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5jb29raWVzQW5kU3RvcmFnZSIsIGZhbHNlKTsKdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5oaXN0b3J5Rm9ybURhdGFBbmREb3dubG9hZHMiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiB0cnVlXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJIaXN0b3J5LnNpdGVTZXR0aW5ncyIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiAyODMxOiBzZXQgbWFudWFsICJDbGVhciBIaXN0b3J5IiBpdGVtcyBbRkYxMzYrXSAqKiovCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhckhpc3RvcnkuYnJvd3NpbmdIaXN0b3J5QW5kRG93bmxvYWRzIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5mb3JtZGF0YSIsIHRydWUpOwoKLyoqIFNBTklUSVpFIE1BTlVBTDogVElNRVJBTkdFICoqKi8KLyogMjg0MDogc2V0ICJUaW1lIHJhbmdlIHRvIGNsZWFyIiBmb3IgIkNsZWFyIERhdGEiICgyODIwKykgYW5kICJDbGVhciBIaXN0b3J5IiAoMjgzMCspCiAqIEZpcmVmb3ggcmVtZW1iZXJzIHlvdXIgbGFzdCBjaG9pY2UuIFRoaXMgd2lsbCByZXNldCB0aGUgdmFsdWUgd2hlbiB5b3Ugc3RhcnQgRmlyZWZveAogKiAwPWV2ZXJ5dGhpbmcsIDE9bGFzdCBob3VyLCAyPWxhc3QgdHdvIGhvdXJzLCAzPWxhc3QgZm91ciBob3VycywgND10b2RheQogKiBbTk9URV0gVmFsdWVzIDUgKGxhc3QgNSBtaW51dGVzKSBhbmQgNiAobGFzdCAyNCBob3VycykgYXJlIG5vdCBsaXN0ZWQgaW4gdGhlIGRyb3Bkb3duLAogKiB3aGljaCB3aWxsIGRpc3BsYXkgYSBibGFuayB2YWx1ZSwgYW5kIGFyZSBub3QgZ3VhcmFudGVlZCB0byB3b3JrICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LnNhbml0aXplLnRpbWVTcGFuIiwgMCk7CgovKioqIFtTRUNUSU9OIDQwMDBdOiBGUFAgKGZpbmdlcnByaW50aW5nUHJvdGVjdGlvbikKICAgUkZQICg0NTAxKSBvdmVycmlkZXMgRlBQCgogICBJbiBGRjExOCsgRlBQIGlzIG9uIGJ5IGRlZmF1bHQgaW4gcHJpdmF0ZSB3aW5kb3dzICg0MDAxKSBhbmQgaW4gRkYxMTkrIGlzIGNvbnRyb2xsZWQKICAgYnkgRVRQICgyNzAxKS4gRlBQIHdpbGwgYWxzbyB1c2UgUmVtb3RlIFNlcnZpY2VzIGluIGZ1dHVyZSB0byByZWxheCBGUFAgcHJvdGVjdGlvbnMKICAgb24gYSBwZXIgc2l0ZSBiYXNpcyBmb3IgY29tcGF0aWJpbGl0eSAoNDAwNCkuCgogICBodHRwczovL3NlYXJjaGZveC5vcmcvbW96aWxsYS1jZW50cmFsL3NvdXJjZS90b29sa2l0L2NvbXBvbmVudHMvcmVzaXN0ZmluZ2VycHJpbnRpbmcvUkZQVGFyZ2V0c0RlZmF1bHQuaW5jCiAgIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9lbi1VUy9rYi9maXJlZm94LXByb3RlY3Rpb24tYWdhaW5zdC1maW5nZXJwcmludGluZyN3X2hvdy1kb2VzLWVhY2gtcHJvdGVjdGlvbi13b3JrCgogICBbTk9URV0gUkZQVGFyZ2V0cyArIGdyYW51bGFyIG92ZXJyaWRlcyBhcmUgc29tZXdoYXQgZXhwZXJpbWVudGFsIGFuZCBtYXkgcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMKICAgLSBlLmcuIEZyYW1lUmF0ZSBjYW4gb25seSBiZSBjb250cm9sbGVkIHBlciBwcm9jZXNzLCBub3QgcGVyIG9yaWdpbgoKICAgMTgyNjQwOCAtIHJlc3RyaWN0IHRvIHN5c3RlbSBmb250cyAoa0Jhc2VGb250cyArIGtMYW5nUGFja0ZvbnRzKSAoV2luZG93cywgTWFjLCBzb21lIExpbnV4KSAoRkYxMTkrKQogICAgICAxOTI4NzA1OiBhbmRyb2lkIChGRjEzNCspCiAgICAgIGh0dHBzOi8vc2VhcmNoZm94Lm9yZy9tb3ppbGxhLWNlbnRyYWwvc2VhcmNoP3BhdGg9U3RhbmRhcmRGb250cyouaW5jCiAgIDE4NTgxODEgLSBzdWJ0bHkgcmFuZG9taXplIGNhbnZhcyBwZXIgZVRMRCsxLCBwZXIgc2Vzc2lvbiBhbmQgcGVyIHdpbmRvdy1tb2RlIChGRjEyMCspCiAgIDE4ODc2ODIgLSB1c2UgZmRsaWJtJ3Mgc2luLCBjb3MgYW5kIHRhbiBpbiBqc21hdGggKEZGMTM0KykKICAgMTk1NDE5NCAtIGF2YWlsYWJsZSBzY3JlZW4gcmVzb2x1dGlvbjogcmV0dXJuIGEgZml4ZWQgb2Zmc2V0IGhlaWdodCBmcm9tIHNjcmVlbiBwZXIgcGxhdGZvcm0gd2hlbiBub3QgZnVsbCBzY3JlZW4gKEZGMTQzKykKICAgMTk4NDMzMyAtIGhhcmR3YXJlQ29uY3VycmVuY3k6IGxlc3MgdGhhbiA4IHJldHVybiA0IGVsc2UgcmV0dXJuIDggKEZGMTQzKykKICAgMTk3NzgzNiAtIG1heFRvdWNoUG9pbnRzOiByZXR1cm4gbXVsdGktdG91Y2ggYXMgNSAoRkYxNDMrKQogICAxOTE3NjA3IC0gc3VidGx5IHJhbmRvbWl6ZSBXZWJHTCdzIHJlYWRQaXhlbHMgKEZGMTQ1KykKKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI0MDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGJlcmVmdCBvZiBsaWZlISIpOwovKiA0MDAxOiBlbmFibGUgRlBQIGluIFBCIG1vZGUgW0ZGMTE0K10KICogW05PVEVdIEluIEZGMTE5KywgRlBQIGZvciBhbGwgbW9kZXMgKDcwMTYpIGlzIGVuYWJsZWQgd2l0aCBFVFAgU3RyaWN0ICgyNzAxKSAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5maW5nZXJwcmludGluZ1Byb3RlY3Rpb24ucGJtb2RlIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQovKiA0MDAyOiBzZXQgZ2xvYmFsIEZQUCBvdmVycmlkZXMgW0ZGMTE0K10KICogdXNlcyAiUkZQVGFyZ2V0cyIgWzFdIHdoaWNoIGRlc3BpdGUgdGhlIG5hbWUgdGhlc2UgYXJlIG5vdCB1c2VkIGJ5IFJGUAogKiBlLmcuICIrQWxsVGFyZ2V0cywtQ1NTUHJlZmVyc0NvbG9yU2NoZW1lLC1KU0RhdGVUaW1lVVRDIiA9IGFsbCB0YXJnZXRzIGJ1dCBhbGxvdyBwcmVmZXJzLWNvbG9yLXNjaGVtZSBhbmQgZG8gbm90IGNoYW5nZSB0aW1lem9uZQogKiBlLmcuICItQWxsVGFyZ2V0cywrQ2FudmFzUmFuZG9taXphdGlvbiwrSlNEYXRlVGltZVVUQyIgPSBubyB0YXJnZXRzIGJ1dCBkbyB1c2UgRlBQIGNhbnZhcyBhbmQgY2hhbmdlIHRpbWV6b25lCiAqIFtOT1RFXSBOb3Qgc3VwcG9ydGVkIGJ5IGFya2VuZm94LiBFaXRoZXIgdXNlIFJGUCBvciBGUFAgYXQgZGVmYXVsdHMKICogWzFdIGh0dHBzOi8vc2VhcmNoZm94Lm9yZy9tb3ppbGxhLWNlbnRyYWwvc291cmNlL3Rvb2xraXQvY29tcG9uZW50cy9yZXNpc3RmaW5nZXJwcmludGluZy9SRlBUYXJnZXRzLmluYyAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5maW5nZXJwcmludGluZ1Byb3RlY3Rpb24ub3ZlcnJpZGVzIiwgIiIpOwovKiA0MDAzOiBzZXQgZ3JhbnVsYXIgRlBQIG92ZXJyaWRlcwogKiBKU09OIGZvcm1hdDogZS5nLiJbe1wiZmlyc3RQYXJ0eURvbWFpblwiOiBcIm5ldGZsaXguY29tXCIsIFwib3ZlcnJpZGVzXCI6IFwiLUNhbnZhc1JhbmRvbWl6YXRpb24sLUZyYW1lUmF0ZSxcIn1dIgogKiBbTk9URV0gTm90IHN1cHBvcnRlZCBieSBhcmtlbmZveC4gRWl0aGVyIHVzZSBSRlAgb3IgRlBQIGF0IGRlZmF1bHRzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmZpbmdlcnByaW50aW5nUHJvdGVjdGlvbi5ncmFudWxhck92ZXJyaWRlcyIsICIiKTsKLyogNDAwNDogZGlzYWJsZSByZW1vdGUgRlBQIG92ZXJyaWRlcyBbRkYxMjcrXSAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5maW5nZXJwcmludGluZ1Byb3RlY3Rpb24ucmVtb3RlT3ZlcnJpZGVzLmVuYWJsZWQiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDQ1MDBdOiBPUFRJT05BTCBSRlAgKHJlc2lzdEZpbmdlcnByaW50aW5nKQogICBSRlAgb3ZlcnJpZGVzIEZQUCAoNDAwMCkKCiAgIEZGMTI4KyBBcmtlbmZveCBieSBkZWZhdWx0IHVzZXMgRlBQIChhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2l0aCBFVFAgU3RyaWN0KS4gRm9yIG1vc3QgcGVvcGxlCiAgIHRoaXMgaXMgYWxsIHlvdSBuZWVkLiBUbyB1c2UgUkZQIGluc3RlYWQsIGFkZCBSRlAgKDQ1MDEpIHRvIHlvdXIgb3ZlcnJpZGVzLCBhbmQgb3B0aW9uYWxseQogICBhZGQgbGV0dGVyYm94aW5nICg0NTA0KSwgc3Bvb2ZfZW5nbGlzaCAoNDUwNiksIGFuZCBXZWJHTCAoNDUyMCkuCgogICBSRlAgaXMgYW4gYWxsLW9yLW5vdGhpbmcgYnV5IGluOiB5b3UgY2Fubm90IHBpY2sgYW5kIGNob29zZSB3aGF0IHBhcnRzIHlvdSB3YW50CgogICBbV0FSTklOR10gRE8gTk9UIFVTRSBleHRlbnNpb25zIHRvIGFsdGVyIFJGUCBwcm90ZWN0ZWQgbWV0cmljcwoKICAgIDQxODk4NiAtIGxpbWl0IHdpbmRvdy5zY3JlZW4gJiBDU1MgbWVkaWEgcXVlcmllcyAoRkY0MSkKIEZGNTYKICAgMTMzMzY1MSAtIHNwb29mIFVzZXIgQWdlbnQgJiBOYXZpZ2F0b3IgQVBJCiAgICAgIEpTOiBzcG9vZmVkIGFzIFdpbmRvd3MgMTAsIE9TIFggMTAuMTUsIEFuZHJvaWQgMTAsIG9yIExpbnV4CiAgICAgIEhUVFAgSGVhZGVyOiBzcG9vZmVkIGFzIFdpbmRvd3MgMTAgb3IgQW5kcm9pZCAxMCB1bnRpbCBGRjEzNiB0aGVuIG1hdGNoZXMgSlMgc3Bvb2YKICAgMTM2OTMxOSAtIGRpc2FibGUgZGV2aWNlIHNlbnNvciBBUEkKICAgMTM2OTM1NyAtIGRpc2FibGUgc2l0ZSBzcGVjaWZpYyB6b29tCiAgIDEzMzcxNjEgLSBoaWRlIGdhbWVwYWRzIGZyb20gY29udGVudAogICAxMzcyMDcyIC0gc3Bvb2YgbmV0d29yayBpbmZvcm1hdGlvbiBBUEkgYXMgInVua25vd24iIHdoZW4gZG9tLm5ldGluZm8uZW5hYmxlZCA9IHRydWUKICAgMTMzMzY0MSAtIHJlZHVjZSBmaW5nZXJwcmludGluZyBpbiBXZWJTcGVlY2ggQVBJCiBGRjU3CiAgIDEzNjkzMDkgLSBzcG9vZiBtZWRpYSBzdGF0aXN0aWNzCiAgIDEzODI0OTkgLSByZWR1Y2Ugc2NyZWVuIGNvLW9yZGluYXRlIGZpbmdlcnByaW50aW5nIGluIFRvdWNoIEFQSQogICAxMjE3MjkwICYgMTQwOTY3NyAtIGVuYWJsZSBzb21lIGZpbmdlcnByaW50aW5nIHJlc2lzdGFuY2UgZm9yIFdlYkdMCiAgIDEzNTQ2MzMgLSBsaW1pdCBNZWRpYUVycm9yLm1lc3NhZ2UgdG8gYSB3aGl0ZWxpc3QKIEZGNTgrCiAgIDEzNzIwNzMgLSBzcG9vZi9ibG9jayBmaW5nZXJwcmludGluZyBpbiBNZWRpYURldmljZXMgQVBJIChGRjU5KQogICAgICBTcG9vZjogZW51bWVyYXRlIGRldmljZXMgYXMgb25lICJJbnRlcm5hbCBDYW1lcmEiIGFuZCBvbmUgIkludGVybmFsIE1pY3JvcGhvbmUiCiAgICAgIEJsb2NrOiBzdXBwcmVzc2VzIHRoZSBvbmRldmljZWNoYW5nZSBldmVudAogICAxMDM5MDY5IC0gd2FybiB3aGVuIGxhbmd1YWdlIHByZWZzIGFyZSBub3Qgc2V0IHRvICJlbioiIChGRjU5KQogICAxMjIyMjg1ICYgMTQzMzU5MiAtIHNwb29mIGtleWJvYXJkIGV2ZW50cyBhbmQgc3VwcHJlc3Mga2V5Ym9hcmQgbW9kaWZpZXIgZXZlbnRzIChGRjU5KQogICAgICBTcG9vZmluZyBtaW1pY3MgdGhlIGNvbnRlbnQgbGFuZ3VhZ2Ugb2YgdGhlIGRvY3VtZW50LiBDdXJyZW50bHkgaXQgb25seSBzdXBwb3J0cyBlbi1VUy4KICAgICAgTW9kaWZpZXIgZXZlbnRzIHN1cHByZXNzZWQgYXJlIFNISUZUIGFuZCBib3RoIEFMVCBrZXlzLiBDaHJvbWUgaXMgbm90IGFmZmVjdGVkLgogICAxNDU5MDg5IC0gZGlzYWJsZSBPUyBsb2NhbGUgaW4gSFRUUCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVycyAoQU5EUk9JRCkgKEZGNjIpCiAgIDE0NzkyMzkgLSByZXR1cm4gIm5vLXByZWZlcmVuY2UiIHdpdGggcHJlZmVycy1yZWR1Y2VkLW1vdGlvbiAoRkY2MykKICAgMTQ5Mjc2NiAtIHNwb29mIHBvaW50ZXJFdmVudC5wb2ludGVyaWQgKEZGNjUpCiAgIDE0ODUyNjYgLSBkaXNhYmxlIGV4cG9zdXJlIG9mIHN5c3RlbSBjb2xvcnMgdG8gQ1NTIG9yIGNhbnZhcyAoRkY2NykKICAgMTQ5NDAzNCAtIHJldHVybiAibGlnaHQiIHdpdGggcHJlZmVycy1jb2xvci1zY2hlbWUgKEZGNjcpCiAgIDE1NjQ0MjIgLSBzcG9vZiBhdWRpb0NvbnRleHQgb3V0cHV0TGF0ZW5jeSAoRkY3MCkKICAgMTU5NTgyMyAtIHJldHVybiBhdWRpb0NvbnRleHQgc2FtcGxlUmF0ZSBhcyA0NDEwMCAoRkY3MikKICAgMTYwNzMxNiAtIHNwb29mIHBvaW50ZXIgYXMgY29hcnNlIGFuZCBob3ZlciBhcyBub25lIChBTkRST0lEKSAoRkY3NCkKICAgMTYyMTQzMyAtIHJhbmRvbWl6ZSBjYW52YXMgKHByZXZpb3VzbHkgRkY1OCsgcmV0dXJuZWQgYW4gYWxsLXdoaXRlIGNhbnZhcykgKEZGNzgpCiAgIDE1MDYzNjQgLSByZXR1cm4gIm5vLXByZWZlcmVuY2UiIHdpdGggcHJlZmVycy1jb250cmFzdCAoRkY4MCkKICAgMTY1Mzk4NyAtIGxpbWl0IGZvbnQgdmlzaWJpbGl0eSB0byBidW5kbGVkIGFuZCAiQmFzZSBGb250cyIgKFdpbmRvd3MsIE1hYywgc29tZSBMaW51eCkgKEZGODApCiAgIDE0NjE0NTQgLSBzcG9vZiBzbW9vdGg9dHJ1ZSBhbmQgcG93ZXJFZmZpY2llbnQ9ZmFsc2UgZm9yIHN1cHBvcnRlZCBtZWRpYSBpbiBNZWRpYUNhcGFiaWxpdGllcyAoRkY4MikKICAgIDUzMTkxNSAtIHVzZSBmZGxpYm0ncyBzaW4sIGNvcyBhbmQgdGFuIGluIGpzbWF0aCAoRkY5MywgRVNSOTEuMSkKICAgMTY5MjYwOSAtIHJlZHVjZSBKUyB0aW1pbmcgcHJlY2lzaW9uIHRvIDE2LjY3bXMgKHByZXZpb3VzbHkgRkY1NSsgd2FzIDEwMG1zKSAoRkYxMDIpCiAgIDE0MjIyMzcgLSByZXR1cm4gInNyZ2IiIHdpdGggY29sb3ItZ2FtdXQgKEZGMTEwKQogICAxNzk0NjI4IC0gcmV0dXJuICJub25lIiB3aXRoIGludmVydGVkLWNvbG9ycyAoRkYxMTQpCiAgIDE3ODc3OTAgLSBub3JtYWxpemUgc3lzdGVtIGZvbnRzIChGRjEyOCkKICAgMTgzNTk4NyAtIHNwb29mIHRpbWV6b25lIGFzIEF0bGFudGljL1JleWtqYXZpayAocHJldmlvdXNseSBGRjU1KyB3YXMgVVRDKSAoRkYxMjgpCiAgIDE2NTYzNzcgLSBzcG9vZiBwb2ludGVyRXZlbnRzIGF6aW11dGhBbmdsZSBhbmQgYWx0aXR1ZGVBbmdsZSAoRkYxMzEpCiAgIDE4MjYwNTEgJiAxOTU3NjU4ICYgMjAyMTcxNSAtIHNwb29mL3N1cHByZXNzIFBvaW50ZXIgRXZlbnRzLCBzcG9vZiBtYXhUb3VjaFBvaW50cyAoRkYxMzIsIEZGMTQzL0VTUjE0MC4yLCBGRjE1MCkKICAgICAgcHJldmlvdXNseSBGRjY0KyAoMTM2MzUwOCkgaXQgYWx3YXlzIHJldHVybmVkIG1heFRvdWNoUG9pbnRzIGFzIDAKICAgICAgRkYxMzI6IDAgPSBtYWMgfCAxMCA9IHdpbmRvd3MsIGxpbnV4LCBtb2JpbGUKICAgICAgRkYxNDM6IDAgPSBtYWMsIGxpbnV4IHwgMTAgPSB3aW5kb3dzIHwgNSA9IG1vYmlsZSB8IG5vIGxvbmdlciBzcG9vZiB0b3VjaCBQb2ludGVyRXZlbnRzIHwgYmFja3BvcnRlZCB0byBFU1IxNDAuMgogICAgICBGRjE1MDogNSA9IGxpbnV4CiAgIDE4MzQzMDcgLSBhbHdheXMgdXNlIHNtb290aCBzY3JvbGxpbmcgKEZGMTMyKQogICAxOTE4MjAyIC0gc3Bvb2Ygc2NyZWVuIG9yaWVudGF0aW9uIGJhc2VkIG9uIHNwb29mZWQgc2NyZWVuIHNpemUgYW5kIHBsYXRmb3JtIChGRjEzMikKICAgICAgcHJldmlvdXNseSBGRjUwKyBpdCBhbHdheXMgcmV0dXJuZWQgbGFuZHNjYXBlLXByaW1hcnkgYW5kIGFuIGFuZ2xlIG9mIDAKICAgMTM5MDQ2NSAtIGxvYWQgYWxsIHN1YnRpdGxlcyBpbiBXZWJWVFQgKFZpZGVvIFRleHQgVHJhY2tzKSAoRkYxMzMpCiAgIDE4NzMzODIgLSBtYWtlIHNwb29mZWQgZGV2aWNlUGl4ZWxSYXRpbyBhbmQgQ1NTIG1lZGlhIHF1ZXJpZXMgbWF0Y2ggKEZGMTMzKQogICAgICBwcmV2aW91c2x5IEZGNDErIGRldmljZVBpeGVsUmF0aW8gd2FzIGhhcmRjb2RlZCBhcyAxIGFuZCBGRjEyNysgYXMgMgogICAgICBwcmV2aW91c2x5IEZGNDErIENTUyBtZWRpYSBxdWVyaWVzIHdlcmUgc3Bvb2ZlZCBhcyB6b29tIGxldmVsIGF0IGEgZGV2aWNlUGl4ZWxSYXRpbyBvZiAxCiAgIDE5NTU0MjUgLSByZXR1cm4gMTI4IGZvciBXZWJHUFUgc3ViZ3JvdXBNYXhTaXplIChGRjEzOCkKICAgMTk2Njg2MCAtIHNwb29mIFdlYkdMIGRlYnVnIHJlbmRlcmVyIGluZm8gKEZGMTQwKQogICAgICBwcmV2aW91c2x5IEZGNjArIGl0IHdhcyBkaXNhYmxlZAogICAxNzgxMjc3IC0gcmV0dXJuIDEwR2lCIGZvciBzdG9yYWdlIGVzdGltYXRlIHVudGlsIHBlcnNpc3RlbnQtc3RvcmFnZSBncmFudGVkIChGRjE0MiwgRVNSMTQwLjEpCiAgIDE5NzI2MDAgLSBzcG9vZiBuZXR3b3JrIGNvbm5lY3Rpb24gZm9yIEhUTUxNZWRpYUVsZW1lbnQgcHJlbG9hZCAoRkYxNDIsIEVTUjE0MC4xKQogICAxOTc1ODUxIC0gcmV0dXJuIHRydWUgZm9yIG5hdmlnYXRvci5vbkxpbmUgKEZGMTQyLCBFU1IxNDAuMSkKICAgMTk3MzI2NSAtIGRpc2FibGUgV2ViQ29kZWNzIEFQSSAoRkYxNDIpCiAgIDE5ODQzMzMgLSBzcG9vZiBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSBhcyA0IGV4Y2VwdCBtYWMgcmV0dXJuIDggKEZGMTQzKQogICAgICAgcHJldmlvdXNseSBGRjU1KyBpdCByZXR1cm5lZCAyCiAgIDE5OTkxMjYgLSBlbmZvcmNlIG5hdmlnYXRvci5wZGZWaWV3ZXJFbmFibGVkIGFzIHRydWUgYW5kIHBsdWdpbnMvbWltZVR5cGVzIGFzIGhhcmQtY29kZWQgdmFsdWVzIChGRjE0NykKKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI0NTAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIHBvcHBlZCAnaXMgY2xvZ3MiKTsKLyogNDUwMTogZW5hYmxlIFJGUAogKiBbTk9URV0gcGJtb2RlIGFwcGxpZXMgaWYgdHJ1ZSBhbmQgdGhlIG9yaWdpbmFsIHByZWYgaXMgZmFsc2UKICogW1NFVFVQLVdFQl0gUkZQIGNhbiBjYXVzZSBzb21lIHdlYnNpdGUgYnJlYWthZ2U6IG1haW5seSBjYW52YXMsIHVzZSBhIGNhbnZhcyBzaXRlIGV4Y2VwdGlvbiB2aWEgdGhlIHVybGJhci4KICogUkZQIGFsc28gaGFzIGEgZmV3IHNpZGUgZWZmZWN0czogbWFpbmx5IHRoYXQgdGltZXpvbmUgaXMgR01ULCBhbmQgd2Vic2l0ZXMgd2lsbCBwcmVmZXIgbGlnaHQgdGhlbWUgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmciLCB0cnVlKTsgLy8gW0ZGNDErXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmcucGJtb2RlIiwgdHJ1ZSk7IC8vIFtGRjExNCtdCi8qIDQ1MDI6IHNldCBSRlAgbmV3IHdpbmRvdyBzaXplIG1heCByb3VuZGVkIHZhbHVlcyBbRkY1NStdCiAqIFtTRVRVUC1DSFJPTUVdIHNpemVzIHJvdW5kIGRvd24gaW4gaHVuZHJlZHM6IHdpZHRoIHRvIDIwMHMgYW5kIGhlaWdodCB0byAxMDBzLCB0byBmaXQgeW91ciBzY3JlZW4KICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTMzMDg4MiAqKiovCnVzZXJfcHJlZigicHJpdmFjeS53aW5kb3cubWF4SW5uZXJXaWR0aCIsIDE2MDApOwp1c2VyX3ByZWYoInByaXZhY3kud2luZG93Lm1heElubmVySGVpZ2h0IiwgOTAwKTsKLyogNDUwMzogZGlzYWJsZSBtb3pBZGRvbk1hbmFnZXIgV2ViIEFQSSBbRkY1NytdCiAqIFtOT1RFXSBUbyBhbGxvdyBleHRlbnNpb25zIHRvIHdvcmsgb24gQU1PLCB5b3UgYWxzbyBuZWVkIDI2NjIKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvYnVnbGlzdC5jZ2k/YnVnX2lkPTEzODQzMzAsMTQwNjc5NSwxNDE1NjQ0LDE0NTM5ODggKioqLwp1c2VyX3ByZWYoInByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmcuYmxvY2tfbW96QWRkb25NYW5hZ2VyIiwgdHJ1ZSk7Ci8qIDQ1MDQ6IGVuYWJsZSBsZXR0ZXJib3hpbmcgW0ZGNjcrXQogKiBEeW5hbWljYWxseSByZXNpemVzIHRoZSBpbm5lciB3aW5kb3cgYnkgYXBwbHlpbmcgbWFyZ2lucyBpbiBzdGVwcGVkIHJhbmdlcyBbMl0KICogSWYgeW91IHVzZSB0aGUgZGltZW5zaW9uIHByZWYsIHRoZW4gaXQgd2lsbCBvbmx5IGFwcGx5IHRob3NlIHJlc29sdXRpb25zLgogKiBUaGUgZm9ybWF0IGlzICJ3aWR0aDF4aGVpZ2h0MSwgd2lkdGgyeGhlaWdodDIsIC4uLiIgKGUuZy4gIjgwMHg2MDAsIDEwMDB4MTAwMCIpCiAqIFtTRVRVUC1XRUJdIFRoaXMgaXMgaW5kZXBlbmRlbnQgb2YgUkZQICg0NTAxKS4gSWYgeW91J3JlIHVzaW5nIFJGUCwgYnV0IGRpc2xpa2UgdGhlCiAqIG1hcmdpbnMsIHRoZW4gZG9uJ3QgZW5hYmxlIHRoaXMgcHJlZiwga2VlcGluZyBpbiBtaW5kIHRoYXQgaXQgaXMgZWZmZWN0aXZlbHkgZmluZ2VycHJpbnRhYmxlCiAqIFtXQVJOSU5HXSBETyBOT1QgVVNFOiB0aGUgZGltZW5zaW9uIHByZWYgaXMgb25seSBtZWFudCBmb3IgdGVzdGluZwogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xNDA3MzY2CiAqIFsyXSBodHRwczovL2hnLm1vemlsbGEub3JnL21vemlsbGEtY2VudHJhbC9yZXYvNzIxMWNiNGY1OGZmI2w1LjEzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnJlc2lzdEZpbmdlcnByaW50aW5nLmxldHRlcmJveGluZyIsIHRydWUpOyAvLyBbSElEREVOIFBSRUZdCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5yZXNpc3RGaW5nZXJwcmludGluZy5sZXR0ZXJib3hpbmcuZGltZW5zaW9ucyIsICIiKTsgLy8gW0hJRERFTiBQUkVGXQovKiA0NTA1OiBkaXNhYmxlIFJGUCBieSBkb21haW4gW0ZGOTErXQogKiBbTk9URV06IFRoZSBwcmVmIHRha2VzIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXM6IGUuZy4gIipkb21haW4xLnRsZCwgKmRvbWFpbjIudGxkIgogKiBXb3JraW5nIGRvbWFpbiBleGFtcGxlczogImFya2VuZm94LmdpdGh1Yi5pbyIsICIqZ2l0aHViLmlvIgogKiBOb24td29ya2luZyBkb21haW4gZXhhbXBsZXM6ICJodHRwczovL2Fya2VuZm94LmdpdGh1Yi5pbyIsICJnaXRodWIuaW8iLCAiKmFya2VuZm94LmdpdGh1Yi5pbyIgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmcuZXhlbXB0ZWREb21haW5zIiwgIiouZXhhbXBsZS5pbnZhbGlkIik7Ci8qIDQ1MDY6IGRpc2FibGUgUkZQIHNwb29mIGVuZ2xpc2ggcHJvbXB0IFtGRjU5K10KICogMD1wcm9tcHQsIDE9ZGlzYWJsZWQsIDI9ZW5hYmxlZAogKiBbTk9URV0gV2hlbiBjaGFuZ2luZyBmcm9tIHZhbHVlIDIsIHByZWZlcnJlZCBsYW5ndWFnZXMgKCdpbnRsLmFjY2VwdF9sYW5ndWFnZXMnKSBpcyBub3QgcmVzZXQuCiAqIFtTRVRVUC1XRUJdIHdoZW4gZW5hYmxlZCwgc2V0cyAnZW4tVVMsIGVuJyBmb3IgZGlzcGxheWluZyBwYWdlcyBhbmQgJ2VuLVVTJyBhcyBsb2NhbGUuCiAqIFtTRVRUSU5HXSBHZW5lcmFsPkxhbmd1YWdlPkNob29zZSB5b3VyIHByZWZlcnJlZCBsYW5ndWFnZSBmb3IgZGlzcGxheWluZyBwYWdlcz5DaG9vc2U+UmVxdWVzdCBFbmdsaXNoLi4uICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LnNwb29mX2VuZ2xpc2giLCAxKTsKLyogNDUwNzogc2tpcCBicm93c2VyLnN0YXJ0dXAuYmxhbmtXaW5kb3cgaWYgUkZQIGlzIHVzZWQgW0ZGMTM2K10gKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmcuc2tpcEVhcmx5QmxhbmtGaXJzdFBhaW50IiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQovKiA0NTEwOiBlbmZvcmNlIENvbnRyYXN0IENvbnRyb2wgb2ZmIFtGRjEzOCtdCiAqIDA9YXV0b21hdGljLCAxPW9mZiwgMj1jdXN0b20KICogW1NFVFRJTkddIEdlbmVyYWw+TGFuZ3VhZ2UgYW5kIEFwcGVhcmFuY2U+Q29udHJhc3QgQ29udHJvbCAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5kaXNwbGF5LmRvY3VtZW50X2NvbG9yX3VzZSIsIDEpOyAvLyBbREVGQVVMVDogMSBOT04tV0lORE9XU10KLyogNDUxMTogZGlzYWJsZSB1c2luZyBzeXN0ZW0gYWNjZW50IGNvbG9ycyAqKiovCnVzZXJfcHJlZigid2lkZ2V0Lm5vbi1uYXRpdmUtdGhlbWUudXNlLXRoZW1lLWFjY2VudCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlIFdJTkRPV1NdCi8qIDQ1MTI6IGVuZm9yY2UgbGlua3MgdGFyZ2V0aW5nIG5ldyB3aW5kb3dzIHRvIG9wZW4gaW4gYSBuZXcgdGFiIGluc3RlYWQKICogMT1tb3N0IHJlY2VudCB3aW5kb3cgb3IgdGFiLCAyPW5ldyB3aW5kb3csIDM9bmV3IHRhYgogKiBTdG9wcyBtYWxpY2lvdXMgd2luZG93IHNpemVzIGFuZCBzb21lIHNjcmVlbiByZXNvbHV0aW9uIGxlYWtzLgogKiBZb3UgY2FuIHN0aWxsIHJpZ2h0LWNsaWNrIGEgbGluayBhbmQgb3BlbiBpbiBhIG5ldyB3aW5kb3cKICogW1NFVFRJTkddIEdlbmVyYWw+VGFicz5PcGVuIGxpbmtzIGluIHRhYnMgaW5zdGVhZCBvZiBuZXcgd2luZG93cwogKiBbMV0gaHR0cHM6Ly9naXRsYWIudG9ycHJvamVjdC5vcmcvdHBvL2FwcGxpY2F0aW9ucy90b3ItYnJvd3Nlci8tL2lzc3Vlcy85ODgxICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmxpbmsub3Blbl9uZXd3aW5kb3ciLCAzKTsgLy8gW0RFRkFVTFQ6IDNdCi8qIDQ1MTM6IHNldCBhbGwgb3BlbiB3aW5kb3cgbWV0aG9kcyB0byBhYmlkZSBieSAiYnJvd3Nlci5saW5rLm9wZW5fbmV3d2luZG93IiAoNDUxMikKICogWzFdIGh0dHBzOi8vc2VhcmNoZm94Lm9yZy9tb3ppbGxhLWNlbnRyYWwvc291cmNlL2RvbS90ZXN0cy9icm93c2VyL2Jyb3dzZXJfdGVzdF9uZXdfd2luZG93X2Zyb21fY29udGVudC5qcyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5saW5rLm9wZW5fbmV3d2luZG93LnJlc3RyaWN0aW9uIiwgMCk7Ci8qIDQ1MjA6IGRpc2FibGUgV2ViR0wgKFdlYiBHcmFwaGljcyBMaWJyYXJ5KSAqKiovCiAgIC8vIHVzZXJfcHJlZigid2ViZ2wuZGlzYWJsZWQiLCB0cnVlKTsKCi8qKiogW1NFQ1RJT04gNTAwMF06IE9QVElPTkFMIE9QU0VDCiAgIERpc2sgYXZvaWRhbmNlLCBhcHBsaWNhdGlvbiBkYXRhIGlzb2xhdGlvbiwgZXllYmFsbHMuLi4KKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI1MDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIHRha2VuICdpcyBsYXN0IGJvdyIpOwovKiA1MDAxOiBzdGFydCBGaXJlZm94IGluIFBCIChQcml2YXRlIEJyb3dzaW5nKSBtb2RlCiAqIFtOT1RFXSBJbiB0aGlzIG1vZGUgYWxsIHdpbmRvd3MgYXJlICJwcml2YXRlIHdpbmRvd3MiIGFuZCB0aGUgUEIgbW9kZSBpY29uIGlzIG5vdCBkaXNwbGF5ZWQKICogW05PVEVdIFRoZSBQIGluIFBCIG1vZGUgY2FuIGJlIG1pc2xlYWRpbmc6IGl0IG1lYW5zIG5vICJwZXJzaXN0ZW50IiBkaXNrIHN0YXRlIHN1Y2ggYXMgaGlzdG9yeSwKICogY2FjaGVzLCBzZWFyY2hlcywgY29va2llcywgbG9jYWxTdG9yYWdlLCBJbmRleGVkREIgZXRjICh3aGljaCB5b3UgY2FuIGFjaGlldmUgaW4gbm9ybWFsIG1vZGUpLgogKiBJbiBmYWN0LCBQQiBtb2RlIGxpbWl0cyBvciByZW1vdmVzIHRoZSBhYmlsaXR5IHRvIGNvbnRyb2wgc29tZSBvZiB0aGVzZSwgYW5kIHlvdSBuZWVkIHRvIHF1aXQKICogRmlyZWZveCB0byBjbGVhciB0aGVtLiBQQiBpcyBiZXN0IHVzZWQgYXMgYSBvbmUgb2ZmIHdpbmRvdyAoTWVudT5OZXcgUHJpdmF0ZSBXaW5kb3cpIHRvIHByb3ZpZGUKICogYSB0ZW1wb3Jhcnkgc2VsZi1jb250YWluZWQgbmV3IHNlc3Npb24uIENsb3NlIGFsbCBwcml2YXRlIHdpbmRvd3MgdG8gY2xlYXIgdGhlIFBCIHNlc3Npb24uCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+SGlzdG9yeT5DdXN0b20gU2V0dGluZ3M+QWx3YXlzIHVzZSBwcml2YXRlIGJyb3dzaW5nIG1vZGUKICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9Qcml2YXRlX0Jyb3dzaW5nCiAqIFsyXSBodHRwczovL3N1cHBvcnQubW96aWxsYS5vcmcva2IvY29tbW9uLW15dGhzLWFib3V0LXByaXZhdGUtYnJvd3NpbmcgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIucHJpdmF0ZWJyb3dzaW5nLmF1dG9zdGFydCIsIHRydWUpOwovKiA1MDAyOiBkaXNhYmxlIG1lbW9yeSBjYWNoZQogKiBjYXBhY2l0eTogLTE9ZGV0ZXJtaW5lIGR5bmFtaWNhbGx5IChkZWZhdWx0KSwgMD1ub25lLCBuPW1lbW9yeSBjYXBhY2l0eSBpbiBraWJpYnl0ZXMgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuY2FjaGUubWVtb3J5LmVuYWJsZSIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLmNhY2hlLm1lbW9yeS5jYXBhY2l0eSIsIDApOwovKiA1MDAzOiBkaXNhYmxlIHNhdmluZyBwYXNzd29yZHMKICogW05PVEVdIFRoaXMgZG9lcyBub3QgY2xlYXIgYW55IHBhc3N3b3JkcyBhbHJlYWR5IHNhdmVkCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+TG9naW5zIGFuZCBQYXNzd29yZHM+QXNrIHRvIHNhdmUgbG9naW5zIGFuZCBwYXNzd29yZHMgZm9yIHdlYnNpdGVzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzaWdub24ucmVtZW1iZXJTaWdub25zIiwgZmFsc2UpOwovKiA1MDA0OiBkaXNhYmxlIHBlcm1pc3Npb25zIG1hbmFnZXIgZnJvbSB3cml0aW5nIHRvIGRpc2sgW0ZGNDErXSBbUkVTVEFSVF0KICogW05PVEVdIFRoaXMgbWVhbnMgYW55IHBlcm1pc3Npb24gY2hhbmdlcyBhcmUgc2Vzc2lvbiBvbmx5CiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzk2NzgxMiAqKiovCiAgIC8vIHVzZXJfcHJlZigicGVybWlzc2lvbnMubWVtb3J5X29ubHkiLCB0cnVlKTsgLy8gW0hJRERFTiBQUkVGXQovKiA1MDA1OiBkaXNhYmxlIGludGVybWVkaWF0ZSBjZXJ0aWZpY2F0ZSBjYWNoaW5nIFtGRjQxK10gW1JFU1RBUlRdCiAqIFtOT1RFXSBUaGlzIGFmZmVjdHMgbG9naW4vY2VydC9rZXkgZGJzLiBUaGUgZWZmZWN0IGlzIGFsbCBjcmVkZW50aWFscyBhcmUgc2Vzc2lvbi1vbmx5LgogKiBTYXZlZCBsb2dpbnMgYW5kIHBhc3N3b3JkcyBhcmUgbm90IGF2YWlsYWJsZS4gUmVzZXQgdGhlIHByZWYgYW5kIHJlc3RhcnQgdG8gcmV0dXJuIHRoZW0gKioqLwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5Lm5vY2VydGRiIiwgdHJ1ZSk7Ci8qIDUwMDY6IGRpc2FibGUgZmF2aWNvbnMgaW4gaGlzdG9yeSBhbmQgYm9va21hcmtzCiAqIFtOT1RFXSBTdG9yZWQgYXMgZGF0YSBibG9icyBpbiBmYXZpY29ucy5zcWxpdGUsIHRoZXNlIGRvbid0IHJldmVhbCBhbnl0aGluZyB0aGF0IHlvdXIKICogYWN0dWFsIGhpc3RvcnkgKGFuZCBib29rbWFya3MpIGFscmVhZHkgZG8uIFlvdXIgaGlzdG9yeSBpcyBtb3JlIGRldGFpbGVkLCBzbwogKiBjb250cm9sIHRoYXQgaW5zdGVhZDsgZS5nLiBkaXNhYmxlIGhpc3RvcnksIGNsZWFyIGhpc3Rvcnkgb24gZXhpdCwgdXNlIFBCIG1vZGUKICogW05PVEVdIGZhdmljb25zLnNxbGl0ZSBpcyBzYW5pdGl6ZWQgb24gRmlyZWZveCBjbG9zZSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5jaHJvbWUuc2l0ZV9pY29ucyIsIGZhbHNlKTsKLyogNTAwNzogZXhjbHVkZSAiVW5kbyBDbG9zZWQgVGFicyIgaW4gU2Vzc2lvbiBSZXN0b3JlICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNlc3Npb25zdG9yZS5tYXhfdGFic191bmRvIiwgMCk7Ci8qIDUwMDg6IGRpc2FibGUgcmVzdW1pbmcgc2Vzc2lvbiBmcm9tIGNyYXNoCiAqIFtURVNUXSBhYm91dDpjcmFzaHBhcmVudCAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zZXNzaW9uc3RvcmUucmVzdW1lX2Zyb21fY3Jhc2giLCBmYWxzZSk7Ci8qIDUwMDk6IGRpc2FibGUgIm9wZW4gd2l0aCIgaW4gZG93bmxvYWQgZGlhbG9nIFtGRjUwK10KICogQXBwbGljYXRpb24gZGF0YSBpc29sYXRpb24gWzFdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEyODE5NTkgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuZG93bmxvYWQuZm9yYmlkX29wZW5fd2l0aCIsIHRydWUpOwovKiA1MDEwOiBkaXNhYmxlIGxvY2F0aW9uIGJhciBzdWdnZXN0aW9uIHR5cGVzCiAqIFtTRVRUSU5HXSBTZWFyY2g+QWRkcmVzcyBCYXI+V2hlbiB1c2luZyB0aGUgYWRkcmVzcyBiYXIsIHN1Z2dlc3QgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnN1Z2dlc3QuaGlzdG9yeSIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zdWdnZXN0LmJvb2ttYXJrIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnN1Z2dlc3Qub3BlbnBhZ2UiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3VnZ2VzdC50b3BzaXRlcyIsIGZhbHNlKTsgLy8gW0ZGNzgrXQovKiA1MDExOiBkaXNhYmxlIGxvY2F0aW9uIGJhciBkcm9wZG93bgogKiBUaGlzIHZhbHVlIGNvbnRyb2xzIHRoZSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyB0byBhcHBlYXIgaW4gdGhlIGxvY2F0aW9uIGJhciBkcm9wZG93biAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIubWF4UmljaFJlc3VsdHMiLCAwKTsKLyogNTAxMjogZGlzYWJsZSBsb2NhdGlvbiBiYXIgYXV0b2ZpbGwKICogWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi9hZGRyZXNzLWJhci1hdXRvY29tcGxldGUtZmlyZWZveCN3X3VybC1hdXRvY29tcGxldGUgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLmF1dG9GaWxsIiwgZmFsc2UpOwovKiA1MDEzOiBkaXNhYmxlIGJyb3dzaW5nIGFuZCBkb3dubG9hZCBoaXN0b3J5CiAqIFtOT1RFXSBXZSBhbHNvIGNsZWFyIGhpc3RvcnkgYW5kIGRvd25sb2FkcyBvbiBleGl0ICgyODExKykKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5IaXN0b3J5PkN1c3RvbSBTZXR0aW5ncz5SZW1lbWJlciBicm93c2luZyBhbmQgZG93bmxvYWQgaGlzdG9yeSAqKiovCiAgIC8vIHVzZXJfcHJlZigicGxhY2VzLmhpc3RvcnkuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTAxNDogZGlzYWJsZSBXaW5kb3dzIGp1bXBsaXN0IFtXSU5ET1dTXSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci50YXNrYmFyLmxpc3RzLmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci50YXNrYmFyLmxpc3RzLmZyZXF1ZW50LmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci50YXNrYmFyLmxpc3RzLnJlY2VudC5lbmFibGVkIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudGFza2Jhci5saXN0cy50YXNrcy5lbmFibGVkIiwgZmFsc2UpOwovKiA1MDE2OiBkaXNjb3VyYWdlIGRvd25sb2FkaW5nIHRvIGRlc2t0b3AKICogMD1kZXNrdG9wLCAxPWRvd25sb2FkcyAoZGVmYXVsdCksIDI9Y3VzdG9tCiAqIFtTRVRUSU5HXSBUbyBzZXQgeW91ciBjdXN0b20gZGVmYXVsdCAiZG93bmxvYWRzIjogR2VuZXJhbD5Eb3dubG9hZHM+U2F2ZSBmaWxlcyB0byAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5kb3dubG9hZC5mb2xkZXJMaXN0IiwgMik7Ci8qIDUwMTc6IGRpc2FibGUgRm9ybSBBdXRvZmlsbAogKiBJZiAuc3VwcG9ydGVkQ291bnRyaWVzIGluY2x1ZGVzIHlvdXIgcmVnaW9uIChicm93c2VyLnNlYXJjaC5yZWdpb24pIGFuZCAuc3VwcG9ydGVkCiAqIGlzICJkZXRlY3QiIChkZWZhdWx0KSwgdGhlbiB0aGUgVUkgd2lsbCBzaG93LiBTdG9yZWQgZGF0YSBpcyBub3Qgc2VjdXJlLCB1c2VzIEpTT04KICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5Gb3JtcyBhbmQgQXV0b2ZpbGw+QXV0b2ZpbGwgYWRkcmVzc2VzCiAqIFsxXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvRmlyZWZveC9GZWF0dXJlcy9Gb3JtX0F1dG9maWxsICoqKi8KICAgLy8gdXNlcl9wcmVmKCJleHRlbnNpb25zLmZvcm1hdXRvZmlsbC5hZGRyZXNzZXMuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTUrXQogICAvLyB1c2VyX3ByZWYoImV4dGVuc2lvbnMuZm9ybWF1dG9maWxsLmNyZWRpdENhcmRzLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjU2K10KLyogNTAxODogbGltaXQgZXZlbnRzIHRoYXQgY2FuIGNhdXNlIGEgcG9wLXVwICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20ucG9wdXBfYWxsb3dlZF9ldmVudHMiLCAiY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIHBvaW50ZXJkb3duIik7Ci8qIDUwMTk6IGRpc2FibGUgcGFnZSB0aHVtYm5haWwgY29sbGVjdGlvbiAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5wYWdldGh1bWJuYWlscy5jYXB0dXJpbmdfZGlzYWJsZWQiLCB0cnVlKTsgLy8gW0hJRERFTiBQUkVGXQovKiA1MDIwOiBkaXNhYmxlIFdpbmRvd3MgbmF0aXZlIG5vdGlmaWNhdGlvbnMgYW5kIHVzZSBhcHAgbm90aWNhdGlvbnMgaW5zdGVhZCBbRkYxMTErXSBbV0lORE9XU10gKioqLwogICAvLyB1c2VyX3ByZWYoImFsZXJ0cy51c2VTeXN0ZW1CYWNrZW5kLndpbmRvd3Mubm90aWZpY2F0aW9uc2VydmVyLmVuYWJsZWQiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDU1MDBdOiBPUFRJT05BTCBIQVJERU5JTkcKICAgTm90IHJlY29tbWVuZGVkLiBPdmVycmlkaW5nIHRoZXNlIGNhbiBjYXVzZSBicmVha2FnZSBhbmQgcGVyZm9ybWFuY2UgaXNzdWVzLAogICB0aGV5IGFyZSBtb3N0bHkgZmluZ2VycHJpbnRhYmxlLCBhbmQgdGhlIHRocmVhdCBtb2RlbCBpcyBwcmFjdGljYWxseSBub25leGlzdGVudAoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjU1MDAgc3ludGF4IGVycm9yOiB0aGlzIGlzIGFuIGV4LXBhcnJvdCEiKTsKLyogNTUwMTogZGlzYWJsZSBNYXRoTUwgKE1hdGhlbWF0aWNhbCBNYXJrdXAgTGFuZ3VhZ2UpIFtGRjUxK10KICogWzFdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZWtleS5jZ2k/a2V5d29yZD1tYXRobWwgKioqLwogICAvLyB1c2VyX3ByZWYoIm1hdGhtbC5kaXNhYmxlZCIsIHRydWUpOyAvLyAxMTczMTk5Ci8qIDU1MDI6IGRpc2FibGUgaW4tY29udGVudCBTVkcgKFNjYWxhYmxlIFZlY3RvciBHcmFwaGljcykgW0ZGNTMrXQogKiBbMV0gaHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3Zla2V5LmNnaT9rZXl3b3JkPWZpcmVmb3grc3ZnICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzdmcuZGlzYWJsZWQiLCB0cnVlKTsgLy8gMTIxNjg5MwovKiA1NTAzOiBkaXNhYmxlIGdyYXBoaXRlCiAqIFsxXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9ZmlyZWZveCtncmFwaGl0ZQogKiBbMl0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JhcGhpdGVfKFNJTCkgKioqLwogICAvLyB1c2VyX3ByZWYoImdmeC5mb250X3JlbmRlcmluZy5ncmFwaGl0ZS5lbmFibGVkIiwgZmFsc2UpOwovKiA1NTA0OiBkaXNhYmxlIGFzbS5qcyBbRkYyMitdCiAqIFsxXSBodHRwOi8vYXNtanMub3JnLwogKiBbMl0gaHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3Zla2V5LmNnaT9rZXl3b3JkPWFzbS5qcwogKiBbM10gaHR0cHM6Ly9yaDBkZXYuZ2l0aHViLmlvL2Jsb2cvMjAxNy90aGUtcmV0dXJuLW9mLXRoZS1qaXQvICoqKi8KICAgLy8gdXNlcl9wcmVmKCJqYXZhc2NyaXB0Lm9wdGlvbnMuYXNtanMiLCBmYWxzZSk7Ci8qIDU1MDU6IGRpc2FibGUgSW9uIGFuZCBiYXNlbGluZSBKSVQgdG8gaGFyZGVuIGFnYWluc3QgSlMgZXhwbG9pdHMgW1JFU1RBUlRdCiAqIFtOT1RFXSBXaGVuIGJvdGggSW9uIGFuZCBKSVQgYXJlIGRpc2FibGVkLCBhbmQgdHJ1c3RlZHByaW5jaXBhbHMKICogaXMgZW5hYmxlZCwgdGhlbiBJb24gY2FuIHN0aWxsIGJlIHVzZWQgYnkgZXh0ZW5zaW9ucyAoMTU5OTIyNikKICogWzFdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZWtleS5jZ2k/a2V5d29yZD1maXJlZm94K2ppdAogKiBbMl0gaHR0cHM6Ly9taWNyb3NvZnRlZGdlLmdpdGh1Yi5pby9lZGdldnIvcG9zdHMvU3VwZXItRHVwZXItU2VjdXJlLU1vZGUvICoqKi8KICAgLy8gdXNlcl9wcmVmKCJqYXZhc2NyaXB0Lm9wdGlvbnMuaW9uIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImphdmFzY3JpcHQub3B0aW9ucy5iYXNlbGluZWppdCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJqYXZhc2NyaXB0Lm9wdGlvbnMuaml0X3RydXN0ZWRwcmluY2lwYWxzIiwgdHJ1ZSk7IC8vIFtGRjc1K10gW0hJRERFTiBQUkVGXQovKiA1NTA2OiBkaXNhYmxlIFdlYkFzc2VtYmx5IFtGRjUyK10KICogVnVsbmVyYWJpbGl0aWVzIFsxXSBoYXZlIGluY3JlYXNpbmdseSBiZWVuIGZvdW5kLCBpbmNsdWRpbmcgdGhvc2Uga25vd24gYW5kIGZpeGVkCiAqIGluIG5hdGl2ZSBwcm9ncmFtcyB5ZWFycyBhZ28gWzJdLiBXQVNNIGhhcyBwb3dlcmZ1bCBsb3ctbGV2ZWwgYWNjZXNzLCBtYWtpbmcKICogY2VydGFpbiBhdHRhY2tzIChicnV0ZS1mb3JjZSkgYW5kIHZ1bG5lcmFiaWxpdGllcyBtb3JlIHBvc3NpYmxlCiAqIFtTVEFUU10gfjAuMiUgb2Ygd2Vic2l0ZXMsIGFib3V0IGhhbGYgb2Ygd2hpY2ggYXJlIGZvciBjcnlwdG9taW5pbmcgLyBtYWx2ZXJ0aXNpbmcgWzJdWzNdCiAqIFsxXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9d2FzbQogKiBbMl0gaHR0cHM6Ly9zcGVjdHJ1bS5pZWVlLm9yZy90ZWNoLXRhbGsvdGVsZWNvbS9zZWN1cml0eS9tb3JlLXdvcnJpZXMtb3Zlci10aGUtc2VjdXJpdHktb2Ytd2ViLWFzc2VtYmx5CiAqIFszXSBodHRwczovL3d3dy56ZG5ldC5jb20vYXJ0aWNsZS9oYWxmLW9mLXRoZS13ZWJzaXRlcy11c2luZy13ZWJhc3NlbWJseS11c2UtaXQtZm9yLW1hbGljaW91cy1wdXJwb3NlcyAqKiovCiAgIC8vIHVzZXJfcHJlZigiamF2YXNjcmlwdC5vcHRpb25zLndhc20iLCBmYWxzZSk7Ci8qIDU1MDc6IGRpc2FibGUgcmVuZGVyaW5nIG9mIFNWRyBPcGVuVHlwZSBmb250cyAqKiovCiAgIC8vIHVzZXJfcHJlZigiZ2Z4LmZvbnRfcmVuZGVyaW5nLm9wZW50eXBlX3N2Zy5lbmFibGVkIiwgZmFsc2UpOwovKiA1NTA4OiBkaXNhYmxlIGFsbCBEUk0gKERpZ2l0YWwgUmlnaHRzIE1hbmFnZW1lbnQpIGNvbnRlbnQgKEVNRTogRW5jcnlwdGlvbiBNZWRpYSBFeHRlbnNpb24pCiAqIE9wdGlvbmFsbHkgaGlkZSB0aGUgVUkgc2V0dGluZyB3aGljaCBhbHNvIGRpc2FibGVzIHRoZSBEUk0gcHJvbXB0CiAqIFtTRVRUSU5HXSBHZW5lcmFsPkRSTSBDb250ZW50PlBsYXkgRFJNLWNvbnRyb2xsZWQgY29udGVudAogKiBbVEVTVF0gaHR0cHM6Ly9iaXRtb3Zpbi5jb20vZGVtb3MvZHJtCiAqIFsxXSBodHRwczovL3d3dy5lZmYub3JnL2RlZXBsaW5rcy8yMDE3LzEwL2RybXMtZGVhZC1jYW5hcnktaG93LXdlLWp1c3QtbG9zdC13ZWItd2hhdC13ZS1sZWFybmVkLWl0LWFuZC13aGF0LXdlLW5lZWQtZG8tbmV4dCAqKiovCiAgIC8vIHVzZXJfcHJlZigibWVkaWEuZW1lLmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5lbWUudWkuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTUwOTogZGlzYWJsZSBJUHY2IGlmIHVzaW5nIGEgVlBOCiAqIFRoaXMgaXMgYW4gYXBwbGljYXRpb24gbGV2ZWwgZmFsbGJhY2suIERpc2FibGluZyBJUHY2IGlzIGJlc3QgZG9uZSBhdCBhbiBPUy9uZXR3b3JrCiAqIGxldmVsLCBhbmQvb3IgY29uZmlndXJlZCBwcm9wZXJseSBpbiBzeXN0ZW0gd2lkZSBWUE4gc2V0dXBzLgogKiBbTk9URV0gUEhQIGRlZmF1bHRzIHRvIElQdjYgd2l0aCAibG9jYWxob3N0Ii4gVXNlICJwaHAgLVMgMTI3LjAuMC4xOlBPUlQiCiAqIFtTRVRVUC1XRUJdIFBSX0NPTk5FQ1RfUkVTRVRfRVJST1IKICogW1RFU1RdIGh0dHBzOi8vaXBsZWFrLm9yZy8KICogWzFdIGh0dHBzOi8vd3d3LmludGVybmV0c29jaWV0eS5vcmcvdGFnL2lwdjYtc2VjdXJpdHkvIChNeXRocyAyLDQsNSw2KSAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5kbnMuZGlzYWJsZUlQdjYiLCB0cnVlKTsKLyogNTUxMDogY29udHJvbCB3aGVuIHRvIHNlbmQgYSBjcm9zcy1vcmlnaW4gcmVmZXJlcgogKiAwPWFsd2F5cyAoZGVmYXVsdCksIDE9b25seSBpZiBiYXNlIGRvbWFpbnMgbWF0Y2gsIDI9b25seSBpZiBob3N0cyBtYXRjaAogKiBbTk9URV0gV2lsbCBjYXVzZSBicmVha2FnZTogb2xkZXIgbW9kZW1zL3JvdXRlcnMgYW5kIHNvbWUgc2l0ZXMgZS5nIGJhbmtzLCB2aW1lbywgaWNsb3VkLCBpbnN0YWdyYW0gKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLlhPcmlnaW5Qb2xpY3kiLCAyKTsKLyogNTUxMTogc2V0IERvSCBib290c3RyYXAgYWRkcmVzcyBbRkY4OStdCiAqIEZpcmVmb3ggdXNlcyB0aGUgc3lzdGVtIEROUyB0byBpbml0aWFsbHkgcmVzb2x2ZSB0aGUgSVAgYWRkcmVzcyBvZiB5b3VyIERvSCBzZXJ2ZXIuCiAqIFdoZW4gc2V0IHRvIGEgdmFsaWQsIHdvcmtpbmcgdmFsdWUgdGhhdCBtYXRjaGVzIHlvdXIgIm5ldHdvcmsudHJyLnVyaSIgKDA3MTIpIEZpcmVmb3gKICogd29uJ3QgdXNlIHRoZSBzeXN0ZW0gRE5TLiBJZiB0aGUgSVAgZG9lc24ndCBtYXRjaCB0aGVuIERvSCB3b24ndCB3b3JrICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLnRyci5ib290c3RyYXBBZGRyIiwgIjEwLjAuMC4xIik7IC8vIFtISURERU4gUFJFRl0KCi8qKiogW1NFQ1RJT04gNjAwMF06IERPTidUIFRPVUNIICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiNjAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyAnaXN0b3J5ISIpOwovKiA2MDAxOiBlbmZvcmNlIEZpcmVmb3ggYmxvY2tsaXN0CiAqIFtXSFldIEl0IGluY2x1ZGVzIHVwZGF0ZXMgZm9yICJyZXZva2VkIGNlcnRpZmljYXRlcyIKICogWzFdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9zZWN1cml0eS8yMDE1LzAzLzAzL3Jldm9raW5nLWludGVybWVkaWF0ZS1jZXJ0aWZpY2F0ZXMtaW50cm9kdWNpbmctb25lY3JsLyAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5ibG9ja2xpc3QuZW5hYmxlZCIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KLyogNjAwMjogZW5mb3JjZSBubyByZWZlcmVyIHNwb29maW5nCiAqIFtXSFldIFNwb29maW5nIGNhbiBhZmZlY3QgQ1NSRiAoQ3Jvc3MtU2l0ZSBSZXF1ZXN0IEZvcmdlcnkpIHByb3RlY3Rpb25zICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci5zcG9vZlNvdXJjZSIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDA0OiBlbmZvcmNlIGEgc2VjdXJpdHkgZGVsYXkgb24gc29tZSBjb25maXJtYXRpb24gZGlhbG9ncyBzdWNoIGFzIGluc3RhbGwsIG9wZW4vc2F2ZQogKiBbMV0gaHR0cHM6Ly93d3cuc3F1YXJlZnJlZS5jb20vMjAwNC8wNy8wMS9yYWNlLWNvbmRpdGlvbnMtaW4tc2VjdXJpdHktZGlhbG9ncy8gKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LmRpYWxvZ19lbmFibGVfZGVsYXkiLCAxMDAwKTsgLy8gW0RFRkFVTFQ6IDEwMDBdCi8qIDYwMDg6IGVuZm9yY2Ugbm8gRmlyc3QgUGFydHkgSXNvbGF0aW9uIFtGRjUxK10KICogW1dBUk5JTkddIFJlcGxhY2VkIHdpdGggbmV0d29yayBwYXJ0aXRpb25pbmcgKEZGODUrKSBhbmQgVENQICgyNzAxKSwgYW5kIGVuYWJsaW5nIEZQSQogKiBkaXNhYmxlcyB0aG9zZS4gRlBJIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGV4Y2VwdCBhdCBUb3IgUHJvamVjdCBmb3IgVG9yIEJyb3dzZXIncyBjb25maWcgKioqLwp1c2VyX3ByZWYoInByaXZhY3kuZmlyc3RwYXJ0eS5pc29sYXRlIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCi8qIDYwMDk6IGVuZm9yY2UgU21hcnRCbG9jayBzaGltcyAoYWJvdXQ6Y29tcGF0KSBbRkY4MStdCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8wMy8yMy9pbnRyb2R1Y2luZy1zbWFydGJsb2NrLyAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy53ZWJjb21wYXQuZW5hYmxlX3NoaW1zIiwgdHJ1ZSk7IC8vIFtISURERU4gUFJFRl0gW0RFRkFVTFQ6IHRydWVdCi8qIDYwMTA6IGVuZm9yY2Ugbm8gVExTIDEuMC8xLjEgZG93bmdyYWRlcwogKiBbVEVTVF0gaHR0cHM6Ly90bHMtdjEtMS5iYWRzc2wuY29tOjEwMTAvICoqKi8KdXNlcl9wcmVmKCJzZWN1cml0eS50bHMudmVyc2lvbi5lbmFibGUtZGVwcmVjYXRlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDExOiBlbmZvcmNlIGRpc2FibGluZyBvZiBXZWIgQ29tcGF0aWJpbGl0eSBSZXBvcnRlciBbRkY1NitdCiAqIFdlYiBDb21wYXRpYmlsaXR5IFJlcG9ydGVyIGFkZHMgYSAiUmVwb3J0IFNpdGUgSXNzdWUiIGJ1dHRvbiB0byBzZW5kIGRhdGEgdG8gTW96aWxsYQogKiBbV0hZXSBUbyBwcmV2ZW50IHdhc3RpbmcgTW96aWxsYSdzIHRpbWUgd2l0aCBhIGN1c3RvbSBzZXR1cCAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy53ZWJjb21wYXQtcmVwb3J0ZXIuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDEyOiBlbmZvcmNlIFF1YXJhbnRpbmVkIERvbWFpbnMgW0ZGMTE1K10KICogW1dIWV0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL3F1YXJhbnRpbmVkLWRvbWFpbnMgKioqLwp1c2VyX3ByZWYoImV4dGVuc2lvbnMucXVhcmFudGluZWREb21haW5zLmVuYWJsZWQiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCi8qIDYwNTA6IHByZWZzQ2xlYW5lcjogcmVzZXQgcHJldmlvdXNseSBhY3RpdmUgaXRlbXMgcmVtb3ZlZCBmcm9tIGFya2VuZm94IEZGMTQwKyAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5kaXNwbGF5LnVzZV9zeXN0ZW1fY29sb3JzIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLmZha2VzcG90LmZlYXR1cmVHYXRlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5Lk9DU1AuZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5PQ1NQLnJlcXVpcmUiLCAiIik7CgovKioqIFtTRUNUSU9OIDcwMDBdOiBET04nVCBCT1RIRVIgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI3MDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIHB1c2hpbmcgdXAgZGFpc2llcyEiKTsKLyogNzAwMTogZGlzYWJsZSBBUElzCiAqIExvY2F0aW9uLUF3YXJlIEJyb3dzaW5nLCBGdWxsIFNjcmVlbgogKiBbV0hZXSBUaGUgQVBJIHN0YXRlIGlzIGVhc2lseSBmaW5nZXJwcmludGFibGUuCiAqIEdlbyBpcyBiZWhpbmQgYSBwcm9tcHQgKDcwMDIpLiBGdWxsIHNjcmVlbiByZXF1aXJlcyB1c2VyIGludGVyYWN0aW9uICoqKi8KICAgLy8gdXNlcl9wcmVmKCJnZW8uZW5hYmxlZCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJmdWxsLXNjcmVlbi1hcGkuZW5hYmxlZCIsIGZhbHNlKTsKLyogNzAwMjogc2V0IGRlZmF1bHQgcGVybWlzc2lvbnMKICogTG9jYXRpb24sIENhbWVyYSwgTWljcm9waG9uZSwgTm90aWZpY2F0aW9ucyBbRkY1OCtdIFZpcnR1YWwgUmVhbGl0eSBbRkY3MytdCiAqIDA9YWx3YXlzIGFzayAoZGVmYXVsdCksIDE9YWxsb3csIDI9YmxvY2sKICogW1dIWV0gVGhlc2UgYXJlIGZpbmdlcnByaW50YWJsZSB2aWEgUGVybWlzc2lvbnMgQVBJLCBleGNlcHQgVlIuIEp1c3QgYWRkIHNpdGUKICogZXhjZXB0aW9ucyBhcyBhbGxvdy9ibG9jayBmb3IgZnJlcXVlbnRseSB2aXNpdGVkL2Fubm95aW5nIHNpdGVzOiBpLmUuIG5vdCBnbG9iYWwKICogW1NFVFRJTkddIHRvIGFkZCBzaXRlIGV4Y2VwdGlvbnM6IEN0cmwrST5QZXJtaXNzaW9ucz4KICogW1NFVFRJTkddIHRvIG1hbmFnZSBzaXRlIGV4Y2VwdGlvbnM6IE9wdGlvbnM+UHJpdmFjeSAmIFNlY3VyaXR5PlBlcm1pc3Npb25zPlNldHRpbmdzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwZXJtaXNzaW9ucy5kZWZhdWx0LmdlbyIsIDApOwogICAvLyB1c2VyX3ByZWYoInBlcm1pc3Npb25zLmRlZmF1bHQuY2FtZXJhIiwgMCk7CiAgIC8vIHVzZXJfcHJlZigicGVybWlzc2lvbnMuZGVmYXVsdC5taWNyb3Bob25lIiwgMCk7CiAgIC8vIHVzZXJfcHJlZigicGVybWlzc2lvbnMuZGVmYXVsdC5kZXNrdG9wLW5vdGlmaWNhdGlvbiIsIDApOwogICAvLyB1c2VyX3ByZWYoInBlcm1pc3Npb25zLmRlZmF1bHQueHIiLCAwKTsgLy8gVmlydHVhbCBSZWFsaXR5Ci8qIDcwMDM6IGRpc2FibGUgbm9uLW1vZGVybiBjaXBoZXIgc3VpdGVzIFsxXQogKiBbV0hZXSBQYXNzaXZlIGZpbmdlcnByaW50aW5nLiBNaW5pbWFsL25vbi1leGlzdGVudCB0aHJlYXQgb2YgZG93bmdyYWRlIGF0dGFja3MKICogWzFdIGh0dHBzOi8vYnJvd3NlcmxlYWtzLmNvbS9zc2wgKioqLwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnNzbDMuZWNkaGVfZWNkc2FfYWVzXzEyOF9zaGEiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsMy5lY2RoZV9lY2RzYV9hZXNfMjU2X3NoYSIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wzLmVjZGhlX3JzYV9hZXNfMTI4X3NoYSIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wzLmVjZGhlX3JzYV9hZXNfMjU2X3NoYSIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wzLnJzYV9hZXNfMTI4X2djbV9zaGEyNTYiLCBmYWxzZSk7IC8vIG5vIFBGUwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnNzbDMucnNhX2Flc18yNTZfZ2NtX3NoYTM4NCIsIGZhbHNlKTsgLy8gbm8gUEZTCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsMy5yc2FfYWVzXzEyOF9zaGEiLCBmYWxzZSk7IC8vIG5vIFBGUwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnNzbDMucnNhX2Flc18yNTZfc2hhIiwgZmFsc2UpOyAvLyBubyBQRlMKLyogNzAwNDogY29udHJvbCBUTFMgdmVyc2lvbnMKICogW1dIWV0gUGFzc2l2ZSBmaW5nZXJwcmludGluZyBhbmQgc2VjdXJpdHkgKioqLwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnRscy52ZXJzaW9uLm1pbiIsIDMpOyAvLyBbREVGQVVMVDogM10KICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS50bHMudmVyc2lvbi5tYXgiLCA0KTsKLyogNzAwNTogZGlzYWJsZSBTU0wgc2Vzc2lvbiBJRHMgW0ZGMzYrXQogKiBbV0hZXSBQYXNzaXZlIGZpbmdlcnByaW50aW5nIGFuZCBwZXJmIGNvc3RzLiBUaGVzZSBhcmUgc2Vzc2lvbi1vbmx5CiAqIGFuZCBpc29sYXRlZCB3aXRoIG5ldHdvcmsgcGFydGl0aW9uaW5nIChGRjg1KykgYW5kL29yIGNvbnRhaW5lcnMgKioqLwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnNzbC5kaXNhYmxlX3Nlc3Npb25faWRlbnRpZmllcnMiLCB0cnVlKTsKLyogNzAwNzogcmVmZXJlcnMKICogW1dIWV0gT25seSBjcm9zcy1vcmlnaW4gcmVmZXJlcnMgKDE2MDIsIDU1MTApIG1hdHRlciAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLnNlbmRSZWZlcmVySGVhZGVyIiwgMik7CiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLnJlZmVyZXIudHJpbW1pbmdQb2xpY3kiLCAwKTsKLyogNzAwODogc2V0IHRoZSBkZWZhdWx0IFJlZmVycmVyIFBvbGljeSBbRkY1OStdCiAqIDA9bm8tcmVmZXJlciwgMT1zYW1lLW9yaWdpbiwgMj1zdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCAzPW5vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlCiAqIFtXSFldIERlZmF1bHRzIGFyZSBmaW5lLiBUaGV5IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgc2l0ZS1jb250cm9sbGVkIFJlZmVycmVyIFBvbGljeSAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLnJlZmVyZXIuZGVmYXVsdFBvbGljeSIsIDIpOyAvLyBbREVGQVVMVDogMl0KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci5kZWZhdWx0UG9saWN5LnBibW9kZSIsIDIpOyAvLyBbREVGQVVMVDogMl0KLyogNzAxMDogZGlzYWJsZSBIVFRQIEFsdGVybmF0aXZlIFNlcnZpY2VzIFtGRjM3K10KICogW1dIWV0gQWxyZWFkeSBpc29sYXRlZCB3aXRoIG5ldHdvcmsgcGFydGl0aW9uaW5nIChGRjg1KykgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5hbHRzdmMuZW5hYmxlZCIsIGZhbHNlKTsKLyogNzAxMTogZGlzYWJsZSB3ZWJzaXRlIGNvbnRyb2wgb3ZlciBicm93c2VyIHJpZ2h0LWNsaWNrIGNvbnRleHQgbWVudQogKiBbV0hZXSBKdXN0IHVzZSBTaGlmdC1SaWdodC1DbGljayAqKiovCiAgIC8vIHVzZXJfcHJlZigiZG9tLmV2ZW50LmNvbnRleHRtZW51LmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDcwMTI6IGRpc2FibGUgaWNvbiBmb250cyAoZ2x5cGhzKSBhbmQgbG9jYWwgZmFsbGJhY2sgcmVuZGVyaW5nCiAqIFtXSFldIEJyZWFrYWdlLCBmb250IGZhbGxiYWNrIGlzIGVxdWl2YWxlbmN5LCBhbHNvIFJGUAogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy83ODk3ODgKICogWzJdIGh0dHBzOi8vZ2l0bGFiLnRvcnByb2plY3Qub3JnL2xlZ2FjeS90cmFjLy0vaXNzdWVzLzg0NTUgKioqLwogICAvLyB1c2VyX3ByZWYoImdmeC5kb3dubG9hZGFibGVfZm9udHMuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNDErXQogICAvLyB1c2VyX3ByZWYoImdmeC5kb3dubG9hZGFibGVfZm9udHMuZmFsbGJhY2tfZGVsYXkiLCAtMSk7Ci8qIDcwMTM6IGRpc2FibGUgQ2xpcGJvYXJkIEFQSQogKiBbV0hZXSBGaW5nZXJwcmludGFibGUuIEJyZWFrYWdlLiBDdXQvY29weS9wYXN0ZSByZXF1aXJlIHVzZXIKICogaW50ZXJhY3Rpb24sIGFuZCBwYXN0ZSBpcyBsaW1pdGVkIHRvIGZvY3VzZWQgZWRpdGFibGUgZmllbGRzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20uZXZlbnQuY2xpcGJvYXJkZXZlbnRzLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDcwMTQ6IGRpc2FibGUgU3lzdGVtIEFkZC1vbiB1cGRhdGVzCiAqIFtXSFldIEl0IGNhbiBjb21wcm9taXNlIHNlY3VyaXR5LiBTeXN0ZW0gYWRkb25zIHNoaXAgd2l0aCBwcmVmcywgdXNlIHRob3NlICoqKi8KICAgLy8gdXNlcl9wcmVmKCJleHRlbnNpb25zLnN5c3RlbUFkZG9uLnVwZGF0ZS5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY2MitdCiAgIC8vIHVzZXJfcHJlZigiZXh0ZW5zaW9ucy5zeXN0ZW1BZGRvbi51cGRhdGUudXJsIiwgIiIpOyAvLyBbRkY0NCtdCi8qIDcwMTU6IGVuYWJsZSB0aGUgRE5UIChEbyBOb3QgVHJhY2spIEhUVFAgaGVhZGVyCiAqIFtXSFldIEZpbmdlcnByaW50YWJsZS4gSW4gRkYxNDErIEROVCBpcyBuZXZlciBlbmFibGVkLiBETlQgaXMgc2xhdGVkIGZvciBkZXByZWNhdGlvbiBbMV0KICAgW05PVEVdIEluIEZGMTQwLCBETlQgaXMgZW5mb3JjZWQgd2l0aCBUcmFja2luZyBQcm90ZWN0aW9uIHdoaWNoIGlzIHVzZWQgaW4gRVRQIFN0cmljdCAoMjcwMSkKICAgWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTk2NzQyMCAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5kb25vdHRyYWNraGVhZGVyLmVuYWJsZWQiLCB0cnVlKTsKLyogNzAxNjogY3VzdG9taXplIEVUUCBzZXR0aW5ncwogKiBbTk9URV0gRlBQIChmaW5nZXJwcmludGluZ1Byb3RlY3Rpb24pIGlzIGlnbm9yZWQgd2hlbiBSRlAgKDQ1MDEpIGlzIGVuYWJsZWQKICogW1dIWV0gQXJrZW5mb3ggb25seSBzdXBwb3J0cyBzdHJpY3QgKDI3MDEpIHdoaWNoIHNldHMgdGhlc2UgYXQgcnVudGltZSAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5jb29raWUuY29va2llQmVoYXZpb3IiLCA1KTsgLy8gW0RFRkFVTFQ6IDVdCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5jb29raWUuY29va2llQmVoYXZpb3Iub3B0SW5QYXJ0aXRpb25pbmciLCB0cnVlKTsgLy8gW0VUUCBGRjEzMitdCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLnJlZmVyZXIuZGlzYWxsb3dDcm9zc1NpdGVSZWxheGluZ0RlZmF1bHQiLCB0cnVlKTsKICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci5kaXNhbGxvd0Nyb3NzU2l0ZVJlbGF4aW5nRGVmYXVsdC50b3BfbmF2aWdhdGlvbiIsIHRydWUpOyAvLyBbRkYxMDArXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuYm91bmNlVHJhY2tpbmdQcm90ZWN0aW9uLm1vZGUiLCAxKTsgLy8gW0ZGMTMxK10gW0VUUCBGRjEzMytdCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5maW5nZXJwcmludGluZ1Byb3RlY3Rpb24iLCB0cnVlKTsgLy8gW0ZGMTE0K10gW0VUUCBGRjExOStdCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5wYXJ0aXRpb24ubmV0d29ya19zdGF0ZS5vY3NwX2NhY2hlIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucXVlcnlfc3RyaXBwaW5nLmVuYWJsZWQiLCB0cnVlKTsgLy8gW0ZGMTAxK10KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnRyYWNraW5ncHJvdGVjdGlvbi5lbmFibGVkIiwgdHJ1ZSk7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS50cmFja2luZ3Byb3RlY3Rpb24uc29jaWFsdHJhY2tpbmcuZW5hYmxlZCIsIHRydWUpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kudHJhY2tpbmdwcm90ZWN0aW9uLmNyeXB0b21pbmluZy5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kudHJhY2tpbmdwcm90ZWN0aW9uLmZpbmdlcnByaW50aW5nLmVuYWJsZWQiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCi8qIDcwMTc6IGRpc2FibGUgc2VydmljZSB3b3JrZXJzCiAqIFtXSFldIEFscmVhZHkgaXNvbGF0ZWQgd2l0aCBUQ1AgKDI3MDEpIGJlaGluZCBhIHByZWYgKioqLwogICAvLyB1c2VyX3ByZWYoImRvbS5zZXJ2aWNlV29ya2Vycy5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDE4OiBkaXNhYmxlIFdlYiBOb3RpZmljYXRpb25zIFtGRjIyK10KICogW1dIWV0gV2ViIE5vdGlmaWNhdGlvbnMgYXJlIGJlaGluZCBhIHByb21wdCAoNzAwMikKICogWzFdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9lbi9wcm9kdWN0cy9maXJlZm94L2Jsb2NrLW5vdGlmaWNhdGlvbi1yZXF1ZXN0cy8gKioqLwogICAvLyB1c2VyX3ByZWYoImRvbS53ZWJub3RpZmljYXRpb25zLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDcwMTk6IGRpc2FibGUgUHVzaCBOb3RpZmljYXRpb25zIFtGRjQ0K10KICogW1dIWV0gV2Vic2l0ZSAicHVzaCIgcmVxdWlyZXMgc3Vic2NyaXB0aW9uLCBhbmQgdGhlIEFQSSBpcyByZXF1aXJlZCBmb3IgQ1JMaXRlICgxMjI0KQogKiBbTk9URV0gVG8gcmVtb3ZlIGFsbCBzdWJzY3JpcHRpb25zLCByZXNldCAiZG9tLnB1c2gudXNlckFnZW50SUQiCiAqIFsxXSBodHRwczovL3N1cHBvcnQubW96aWxsYS5vcmcva2IvcHVzaC1ub3RpZmljYXRpb25zLWZpcmVmb3ggKioqLwogICAvLyB1c2VyX3ByZWYoImRvbS5wdXNoLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDcwMjA6IGRpc2FibGUgV2ViUlRDIChXZWIgUmVhbC1UaW1lIENvbW11bmljYXRpb24pCiAqIFtXSFldIEZpcmVmb3ggZGVza3RvcCB1c2VzIG1ETlMgaG9zdG5hbWUgb2JmdXNjYXRpb24gYW5kIHRoZSBwcml2YXRlIElQIGlzIG5ldmVyIGV4cG9zZWQgdW50aWwKICogcmVxdWlyZWQgaW4gVFJVU1RFRCBzY2VuYXJpb3M7IGkuZS4gYWZ0ZXIgeW91IGdyYW50IGRldmljZSAobWljcm9waG9uZSBvciBjYW1lcmEpIGFjY2VzcwogKiBbVEVTVF0gaHR0cHM6Ly9icm93c2VybGVha3MuY29tL3dlYnJ0YwogKiBbMV0gaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9nL2Rpc2N1c3Mtd2VicnRjL2MvNnN0UVhpNzJCRVUvbS8yRndaZDI0VUFRQUoKICogWzJdIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1tbXVzaWMtbWRucy1pY2UtY2FuZGlkYXRlcyNzZWN0aW9uLTMuMS4xICoqKi8KICAgLy8gdXNlcl9wcmVmKCJtZWRpYS5wZWVyY29ubmVjdGlvbi5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDIxOiBlbmFibGUgR1BDIChHbG9iYWwgUHJpdmFjeSBDb250cm9sKSBpbiBub24tUEIgd2luZG93cwogKiBbV0hZXSBQYXNzaXZlIGFuZCBhY3RpdmUgZmluZ2VycHJpbnRpbmcuIE1vc3RseSByZWR1bmRhbnQgd2l0aCBUcmFja2luZyBQcm90ZWN0aW9uCiAqIGluIEVUUCBTdHJpY3QgKDI3MDEpIGFuZCBzYW5pdGl6aW5nIG9uIGNsb3NlICgyODAwcykgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuZ2xvYmFscHJpdmFjeWNvbnRyb2wuZW5hYmxlZCIsIHRydWUpOwovKiA3MDIyOiBiRlBQIChiYXNlbGluZUZpbmdlcnByaW50aW5nUHJvdGVjdGlvbikgW0ZGMTM5K10KICogW1dIWV0gQXJrZW5mb3ggb25seSBzdXBwb3J0cyBFVFAgU3RyaWN0ICgyNzAxKSB3aGljaCBlbmFibGVzIEZQUCBicm93c2VyLXdpZGUgKG5vcm1hbCBhbmQgcHJpdmF0ZQogKiBicm93c2luZyB3aW5kb3cgY29udGV4dHMpLiBJZiBGUFAgaXMgZW5hYmxlZCBpbiB0aGUgc2FtZSBjb250ZXh0IGFzIGJGUFAsIEZQUCB0YWtlcyBwcmVjZWRlbmNlLgogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuYmFzZWxpbmVGaW5nZXJwcmludGluZ1Byb3RlY3Rpb24iLCB0cnVlKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmJhc2VsaW5lRmluZ2VycHJpbnRpbmdQcm90ZWN0aW9uLmdyYW51bGFyT3ZlcnJpZGVzIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuYmFzZWxpbmVGaW5nZXJwcmludGluZ1Byb3RlY3Rpb24ub3ZlcnJpZGVzIiwgIiIpOwoKLyoqKiBbU0VDVElPTiA4MDAwXTogRE9OJ1QgQk9USEVSOiBGSU5HRVJQUklOVElORwogICBbV0hZXSBUaGV5IGFyZSBpbnN1ZmZpY2llbnQgZm9yIGZpbmdlcnByaW50aW5nIHByb3RlY3Rpb24gYW5kIGRvIG1vcmUgaGFybSB0aGFuIGdvb2QKICAgW1dBUk5JTkddIERPIE5PVCBVU0U6IHRoZXkgY2FuIGludGVyZmVyZSB3aXRoIGJ1aWx0LWluIHNvbHV0aW9ucyBzdWNoIGFzIFJGUCBhbmQgRlBQCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiODAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBjcm9zc2VkIHRoZSBKb3JkYW4iKTsKLyogODAwMTogcHJlZnNDbGVhbmVyOiByZXNldCBpdGVtcyB1c2VsZXNzIGZvciBhbnRpLWZpbmdlcnByaW50aW5nICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLmRpc3BsYXkudXNlX2RvY3VtZW50X2ZvbnRzIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuem9vbS5zaXRlU3BlY2lmaWMiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZGV2aWNlLnNlbnNvcnMuZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJkb20uZW5hYmxlX3BlcmZvcm1hbmNlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImRvbS5lbmFibGVfcmVzb3VyY2VfdGltaW5nIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImRvbS5nYW1lcGFkLmVuYWJsZWQiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZG9tLm1heEhhcmR3YXJlQ29uY3VycmVuY3kiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZG9tLnczY190b3VjaF9ldmVudHMuZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJkb20ud2ViYXVkaW8uZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJmb250LnN5c3RlbS53aGl0ZWxpc3QiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZ2VuZXJhbC5hcHBuYW1lLm92ZXJyaWRlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImdlbmVyYWwuYXBwdmVyc2lvbi5vdmVycmlkZSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJnZW5lcmFsLmJ1aWxkSUQub3ZlcnJpZGUiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZ2VuZXJhbC5vc2NwdS5vdmVycmlkZSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJnZW5lcmFsLnBsYXRmb3JtLm92ZXJyaWRlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImdlbmVyYWwudXNlcmFnZW50Lm92ZXJyaWRlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoIm1lZGlhLm5hdmlnYXRvci5lbmFibGVkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoIm1lZGlhLnZpZGVvX3N0YXRzLmVuYWJsZWQiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigibWVkaWEud2Vic3BlZWNoLnN5bnRoLmVuYWJsZWQiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigidWkudXNlX3N0YW5kaW5zX2Zvcl9uYXRpdmVfY29sb3JzIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoIndlYmdsLmVuYWJsZS1kZWJ1Zy1yZW5kZXJlci1pbmZvIiwgIiIpOwoKLyoqKiBbU0VDVElPTiA4NTAwXTogVEVMRU1FVFJZCiAgIEFya2VuZm94IGRvZXMgbm90IGNvbnNpZGVyIEZpcmVmb3ggdGVsZW1ldHJ5IHRvIGJlIGEgcHJpdmFjeSBvciBzZWN1cml0eSBjb25jZXJuIC0gY29tbWVudHMgYmVsb3cuCiAgIEJ1dCBzaW5jZSBtb3N0IGFya2VuZm94IHVzZXJzIHByZWZlciBpdCBkaXNhYmxlZCwgd2UnbGwgZG8gdGhhdCByYXRoZXIgdGhhbiBjYXVzZSBvdmVycmlkZXMuCgogICBPcHQtb3V0CiAgIC0gVGVsZW1ldHJ5IGlzIGVzc2VudGlhbDogYSBicm93c2VyIGVuZ2luZSBpcyBhIF92ZXJ5XyBsYXJnZSBjb21wbGV4IGJlYXN0IGNvc3RpbmcgYmlsbGlvbnMgdG8gbWFpbnRhaW4KICAgLSBPcHQtaW4gdGVsZW1ldHJ5IF9kb2VzIG5vdF8gd29yayBhbmQgcmVzdWx0cyBpbiBkYXRhIHRoYXQgaXMgdW5yZXByZXNlbnRhdGl2ZSBhbmQgbWF5IGJlIG1pc2xlYWRpbmcKICAgQ2hvaWNlCiAgIC0gRXZlcnkgbmV3IHByb2ZpbGUgb24gZmlyc3QgdXNlIHByb3ZpZGVzIGRhdGEgY29sbGVjdGlvbi91c2UgcG9saWN5IGFuZCB0aGUgYWJpbGx0eSB0byBvcHQtb3V0CiAgIC0gSXQgY2FuIGJlIGRpc2FibGVkIGF0IGFueSB0aW1lIChTZXR0aW5ncz5Qcml2YWN5ICYgU2VjdXJpdHk+RGF0YSBDb2xsZWN0aW9uIGFuZCBVc2UpCiAgIERhdGEKICAgLSBubyBQSUkgKFBlcnNvbmFsbHkgSWRlbnRpZmlhYmxlIEluZm9ybWF0aW9uKQogICAtIGNhbiBiZSB2aWV3ZWQgaW4gYWJvdXQ6dGVsZW1ldHJ5CiAgIC0gdXNlcyBQcmlvIFsxXVsyXVszXSwgR2xlYW4gWzRdLCBPYmxpdmlvdXMgSFRUUCBbNV1bNl0KCiAgIFsxXSBodHRwczovL2NyeXB0by5zdGFuZm9yZC5lZHUvcHJpby8KICAgWzJdIGh0dHBzOi8vaGFja3MubW96aWxsYS5vcmcvMjAxOC8xMC90ZXN0aW5nLXByaXZhY3ktcHJlc2VydmluZy10ZWxlbWV0cnktd2l0aC1wcmlvLwogICBbM10gaHR0cHM6Ly9ibG9nLm1vemlsbGEub3JnL3NlY3VyaXR5LzIwMTkvMDYvMDYvbmV4dC1zdGVwcy1pbi1wcml2YWN5LXByZXNlcnZpbmctdGVsZW1ldHJ5LXdpdGgtcHJpby8KICAgWzRdIGh0dHBzOi8vZmlyZWZveC1zb3VyY2UtZG9jcy5tb3ppbGxhLm9yZy90b29sa2l0L2NvbXBvbmVudHMvZ2xlYW4vaW5kZXguaHRtbAogICBbNV0gaHR0cHM6Ly9maXJlZm94LXNvdXJjZS1kb2NzLm1vemlsbGEub3JnL3Rvb2xraXQvY29tcG9uZW50cy9nbGVhbi91c2VyL29odHRwLmh0bWwKICAgWzZdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9lbi90YWcvb2JsaXZpb3VzLWh0dHAvCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiODUwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBvZmYgdGhlIHR3aWchIik7Ci8qIDg1MDA6IGRpc2FibGUgbmV3IGRhdGEgc3VibWlzc2lvbiBbRkY0MStdCiAqIElmIGRpc2FibGVkLCBubyBwb2xpY3kgaXMgc2hvd24gb3IgdXBsb2FkIHRha2VzIHBsYWNlLCBldmVyCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzExOTU1NTIgKioqLwp1c2VyX3ByZWYoImRhdGFyZXBvcnRpbmcucG9saWN5LmRhdGFTdWJtaXNzaW9uRW5hYmxlZCIsIGZhbHNlKTsKLyogODUwMTogZGlzYWJsZSBIZWFsdGggUmVwb3J0cwogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkZpcmVmb3ggRGF0YSBDb2xsZWN0aW9uIGFuZCBVc2U+U2VuZCB0ZWNobmljYWwuLi4gZGF0YSAqKiovCnVzZXJfcHJlZigiZGF0YXJlcG9ydGluZy5oZWFsdGhyZXBvcnQudXBsb2FkRW5hYmxlZCIsIGZhbHNlKTsKLyogODUwMjogZGlzYWJsZSB0ZWxlbWV0cnkKICogVGhlICJ1bmlmaWVkIiBwcmVmIGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSAiZW5hYmxlZCIgcHJlZgogKiAtIElmICJ1bmlmaWVkIiBpcyBmYWxzZSB0aGVuICJlbmFibGVkIiBjb250cm9scyB0aGUgdGVsZW1ldHJ5IG1vZHVsZQogKiAtIElmICJ1bmlmaWVkIiBpcyB0cnVlIHRoZW4gImVuYWJsZWQiIG9ubHkgY29udHJvbHMgd2hldGhlciB0byByZWNvcmQgZXh0ZW5kZWQgZGF0YQogKiBbTk9URV0gInRvb2xraXQudGVsZW1ldHJ5LmVuYWJsZWQiIGlzIG5vdyBMT0NLRUQgdG8gcmVmbGVjdCBwcmVyZWxlYXNlICh0cnVlKSBvciByZWxlYXNlIGJ1aWxkcyAoZmFsc2UpIFsyXQogKiBbMV0gaHR0cHM6Ly9maXJlZm94LXNvdXJjZS1kb2NzLm1vemlsbGEub3JnL3Rvb2xraXQvY29tcG9uZW50cy90ZWxlbWV0cnkvdGVsZW1ldHJ5L2ludGVybmFscy9wcmVmZXJlbmNlcy5odG1sCiAqIFsyXSBodHRwczovL21lZGl1bS5jb20vZ2VvcmctZnJpdHpzY2hlL2RhdGEtcHJlZmVyZW5jZS1jaGFuZ2VzLWluLWZpcmVmb3gtNTgtMmQ1ZGY5YzQyOGI1ICoqKi8KdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS51bmlmaWVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LmVuYWJsZWQiLCBmYWxzZSk7IC8vIHNlZSBbTk9URV0KdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5zZXJ2ZXIiLCAiZGF0YTosIik7CnVzZXJfcHJlZigidG9vbGtpdC50ZWxlbWV0cnkuYXJjaGl2ZS5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5Lm5ld1Byb2ZpbGVQaW5nLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjU1K10KdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5zaHV0ZG93blBpbmdTZW5kZXIuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTUrXQp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LnVwZGF0ZVBpbmcuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTYrXQp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LmJoclBpbmcuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTcrXSBCYWNrZ3JvdW5kIEhhbmcgUmVwb3J0ZXIKdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5maXJzdFNodXRkb3duUGluZy5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1NytdCi8qIDg1MDM6IGRpc2FibGUgVGVsZW1ldHJ5IENvdmVyYWdlCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvZGF0YS8yMDE4LzA4LzIwL2VmZmVjdGl2ZWx5LW1lYXN1cmluZy1zZWFyY2gtaW4tZmlyZWZveC8gKioqLwp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LmNvdmVyYWdlLm9wdC1vdXQiLCB0cnVlKTsgLy8gW0hJRERFTiBQUkVGXQp1c2VyX3ByZWYoInRvb2xraXQuY292ZXJhZ2Uub3B0LW91dCIsIHRydWUpOyAvLyBbRkY2NCtdIFtISURERU4gUFJFRl0KdXNlcl9wcmVmKCJ0b29sa2l0LmNvdmVyYWdlLmVuZHBvaW50LmJhc2UiLCAiIik7CgovKioqIFtTRUNUSU9OIDkwMDBdOiBOT04tUFJPSkVDVCBSRUxBVEVEICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiOTAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBjYXNoZWQgaW4gJ2lzIGNoaXBzISIpOwovKiA5MDAxOiBkaXNhYmxlIHdlbGNvbWUgbm90aWNlcyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5zdGFydHVwLmhvbWVwYWdlX292ZXJyaWRlLm1zdG9uZSIsICJpZ25vcmUiKTsgLy8gW0hJRERFTiBQUkVGXQovKiA5MDAyOiBkaXNhYmxlIEdlbmVyYWw+QnJvd3Npbmc+UmVjb21tZW5kIGV4dGVuc2lvbnMvZmVhdHVyZXMgYXMgeW91IGJyb3dzZSBbRkY2NytdICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLmFzcm91dGVyLnVzZXJwcmVmcy5jZnIuYWRkb25zIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0uYXNyb3V0ZXIudXNlcnByZWZzLmNmci5mZWF0dXJlcyIsIGZhbHNlKTsKLyogOTAwNDogZGlzYWJsZSBzZWFyY2ggdGVybXMgW0ZGMTEwK10KICogW1NFVFRJTkddIFNlYXJjaD5TZWFyY2ggQmFyPlVzZSB0aGUgYWRkcmVzcyBiYXIgZm9yIHNlYXJjaCBhbmQgbmF2aWdhdGlvbj5TaG93IHNlYXJjaCB0ZXJtcyBpbnN0ZWFkIG9mIFVSTC4uLiAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc2hvd1NlYXJjaFRlcm1zLmVuYWJsZWQiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDk5OTldOiBERVBSRUNBVEVEIC8gUkVOQU1FRCAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjk5OTkgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3Mgc2h1ZmZsZWQgb2ZmICdpcyBtb3J0YWwgY29pbCEiKTsKLyogRVNSMTQwLnggc3RpbGwgdXNlcyBhbGwgdGhlIGZvbGxvd2luZyBwcmVmcwovLyBbTk9URV0gcmVwbGFjZSB0aGUgKiB3aXRoIGEgc2xhc2ggaW4gdGhlIGxpbmUgYWJvdmUgdG8gcmUtZW5hYmxlIGFjdGl2ZSBvbmVzCi8vIEZGMTQ4Ci8vIDA2MDM6IGRpc2FibGUgcHJlZGljdG9yIC8gcHJlZmV0Y2hpbmcKICAvLyBbLV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8yMDA2MDI4CnVzZXJfcHJlZigibmV0d29yay5wcmVkaWN0b3IuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlIEZGMTQ0K10KdXNlcl9wcmVmKCJuZXR3b3JrLnByZWRpY3Rvci5lbmFibGUtcHJlZmV0Y2giLCBmYWxzZSk7IC8vIFtGRjQ4K10gW0RFRkFVTFQ6IGZhbHNlXQovLyAqKiovCgovKiBFTkQ6IGludGVybmFsIGN1c3RvbSBwcmVmIHRvIHRlc3QgZm9yIHN5bnRheCBlcnJvcnMgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICJTVUNDRVNTOiBObyBubyBoZSdzIG5vdCBkZWFkLCBoZSdzLCBoZSdzIHJlc3RpbichIik7Cg=="