@horietakehiro/aws-cdk-utul 0.40.2 → 0.40.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/lib/typed-resource.d.ts +6 -3
  2. package/lib/typed-resource.js +1 -31
  3. package/lib/types/cfn-resource-types/aws-aiops-investigationgroup.d.ts +7 -0
  4. package/lib/types/cfn-resource-types/aws-aiops-investigationgroup.js +1 -1
  5. package/lib/types/cfn-resource-types/aws-b2bi-partnership.d.ts +29 -0
  6. package/lib/types/cfn-resource-types/aws-b2bi-partnership.js +1 -1
  7. package/lib/types/cfn-resource-types/aws-b2bi-transformer.d.ts +11 -0
  8. package/lib/types/cfn-resource-types/aws-b2bi-transformer.js +1 -1
  9. package/lib/types/cfn-resource-types/aws-cassandra-table.d.ts +16 -0
  10. package/lib/types/cfn-resource-types/aws-cassandra-table.js +1 -1
  11. package/lib/types/cfn-resource-types/aws-connect-rule.d.ts +4 -4
  12. package/lib/types/cfn-resource-types/aws-connect-rule.js +1 -1
  13. package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.d.ts +108 -99
  14. package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.js +1 -1
  15. package/lib/types/cfn-resource-types/aws-ec2-trafficmirrorfilterrule.d.ts +56 -4
  16. package/lib/types/cfn-resource-types/aws-ec2-trafficmirrorfilterrule.js +1 -1
  17. package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +1 -1
  18. package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
  19. package/lib/types/cfn-resource-types/aws-ecs-taskdefinition.d.ts +2 -2
  20. package/lib/types/cfn-resource-types/aws-ecs-taskdefinition.js +1 -1
  21. package/lib/types/cfn-resource-types/aws-emrserverless-application.d.ts +10 -0
  22. package/lib/types/cfn-resource-types/aws-emrserverless-application.js +1 -1
  23. package/lib/types/cfn-resource-types/aws-fsx-s3accesspointattachment.d.ts +39 -0
  24. package/lib/types/cfn-resource-types/aws-fsx-s3accesspointattachment.js +3 -0
  25. package/lib/types/cfn-resource-types/aws-gamelift-containerfleet.d.ts +4 -0
  26. package/lib/types/cfn-resource-types/aws-gamelift-containerfleet.js +1 -1
  27. package/lib/types/cfn-resource-types/aws-gamelift-fleet.d.ts +2 -2
  28. package/lib/types/cfn-resource-types/aws-gamelift-fleet.js +1 -1
  29. package/lib/types/cfn-resource-types/aws-kms-key.d.ts +9 -2
  30. package/lib/types/cfn-resource-types/aws-kms-key.js +1 -1
  31. package/lib/types/cfn-resource-types/aws-lex-bot.d.ts +31 -9
  32. package/lib/types/cfn-resource-types/aws-lex-bot.js +1 -1
  33. package/lib/types/cfn-resource-types/aws-mediatailor-playbackconfiguration.d.ts +4 -0
  34. package/lib/types/cfn-resource-types/aws-mediatailor-playbackconfiguration.js +1 -1
  35. package/lib/types/cfn-resource-types/aws-neptune-dbinstance.d.ts +67 -10
  36. package/lib/types/cfn-resource-types/aws-neptune-dbinstance.js +1 -1
  37. package/lib/types/cfn-resource-types/aws-networkmanager-vpcattachment.d.ts +62 -54
  38. package/lib/types/cfn-resource-types/aws-networkmanager-vpcattachment.js +1 -1
  39. package/lib/types/cfn-resource-types/aws-pcs-cluster.d.ts +32 -32
  40. package/lib/types/cfn-resource-types/aws-pcs-cluster.js +1 -1
  41. package/lib/types/cfn-resource-types/aws-qbusiness-dataaccessor.d.ts +18 -0
  42. package/lib/types/cfn-resource-types/aws-qbusiness-dataaccessor.js +1 -1
  43. package/lib/types/cfn-resource-types/aws-qbusiness-permission.d.ts +14 -0
  44. package/lib/types/cfn-resource-types/aws-qbusiness-permission.js +1 -1
  45. package/lib/types/cfn-resource-types/aws-rds-dbinstance.d.ts +552 -552
  46. package/lib/types/cfn-resource-types/aws-rds-dbinstance.js +1 -1
  47. package/lib/types/cfn-resource-types/aws-redshiftserverless-snapshot.d.ts +49 -0
  48. package/lib/types/cfn-resource-types/aws-redshiftserverless-snapshot.js +3 -0
  49. package/lib/types/cfn-resource-types/aws-workspacesinstances-volume.d.ts +64 -0
  50. package/lib/types/cfn-resource-types/aws-workspacesinstances-volume.js +3 -0
  51. package/lib/types/cfn-resource-types/aws-workspacesinstances-volumeassociation.d.ts +21 -0
  52. package/lib/types/cfn-resource-types/aws-workspacesinstances-volumeassociation.js +3 -0
  53. package/lib/types/cfn-resource-types/aws-workspacesinstances-workspaceinstance.d.ts +119 -0
  54. package/lib/types/cfn-resource-types/aws-workspacesinstances-workspaceinstance.js +3 -0
  55. package/lib/types/cfn-resource-types.d.ts +10 -0
  56. package/lib/types/cfn-resource-types.js +29 -19
  57. package/package.json +1 -1
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAgbXVzdCBoYXZlIGEgbmFtZSB0aGF0IGlzIHVuaXF1ZSBpbiB0aGUgbmFtZXNwYWNlLlxuICogICAgU3RhcnRpbmcgQXByaWwgMTUsIDIwMjMsIEFXUzsgd2lsbCBub3Qgb25ib2FyZCBuZXcgY3VzdG9tZXJzIHRvIEFtYXpvbiBFbGFzdGljIEluZmVyZW5jZSAoRUkpLCBhbmQgd2lsbCBoZWxwIGN1cnJlbnQgY3VzdG9tZXJzIG1pZ3JhdGUgdGhlaXIgd29ya2xvYWRzIHRvIG9wdGlvbnMgdGhhdCBvZmZlciBiZXR0ZXIgcHJpY2UgYW5kIHBlcmZvcm1hbmNlLiBBZnRlciBBcHJpbCAxNSwgMjAyMywgbmV3IGN1c3RvbWVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIGxhdW5jaCBpbnN0YW5jZXMgd2l0aCBBbWF6b24gRUkgYWNjZWxlcmF0b3JzIGluIEFtYXpvbiBTYWdlTWFrZXIsIEVDUywgb3IgRUMyLiBIb3dldmVyLCBjdXN0b21lcnMgd2hvIGhhdmUgdXNlZCBBbWF6b24gRUkgYXQgbGVhc3Qgb25jZSBkdXJpbmcgdGhlIHBhc3QgMzAtZGF5IHBlcmlvZCBhcmUgY29uc2lkZXJlZCBjdXJyZW50IGN1c3RvbWVycyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBzZXJ2aWNlLiBcbiAqICAgIE9uIEp1bmUgMTIsIDIwMjUsIEFtYXpvbiBFQ1MgbGF1bmNoZWQgc3VwcG9ydCBmb3IgdXBkYXRpbmcgY2FwYWNpdHkgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBmb3IgRUNTIHNlcnZpY2VzLiBXaXRoIHRoaXMgbGF1bmNoLCBFQ1MgYWxzbyBhbGlnbmVkIHRoZSBDRk4gdXBkYXRlIGJlaGF2aW9yIGZvciBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIHBhcmFtZXRlciB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbYWRkcyBzdXBwb3J0IGZvciB1cGRhdGluZyBjYXBhY2l0eSBwcm92aWRlciBjb25maWd1cmF0aW9uIGZvciBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hYm91dC1hd3Mvd2hhdHMtbmV3LzIwMjUvMDUvYW1hem9uLWVjcy1jYXBhY2l0eS1wcm92aWRlci1jb25maWd1cmF0aW9uLWVjcy8pLiBQcmV2aW91c2x5IEVDUyBpZ25vcmVkIHRoZSBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIHByb3BlcnR5IGlmIGl0IHdhcyBzZXQgdG8gYW4gZW1wdHkgbGlzdCBmb3IgZXhhbXBsZSwgYGBbXWBgIGluIENGTiwgYmVjYXVzZSB1cGRhdGluZyBjYXBhY2l0eSBwcm92aWRlciBjb25maWd1cmF0aW9uIHdhcyBub3Qgc3VwcG9ydGVkLiBOb3csIHdpdGggc3VwcG9ydCBmb3IgY2FwYWNpdHkgcHJvdmlkZXIgdXBkYXRlcywgY3VzdG9tZXJzIGNhbiByZW1vdmUgY2FwYWNpdHkgcHJvdmlkZXJzIGZyb20gYSBzZXJ2aWNlIGJ5IHBhc3NpbmcgYW4gZW1wdHkgbGlzdC4gV2hlbiB5b3Ugc3BlY2lmeSBhbiBlbXB0eSBsaXN0IChgYFtdYGApIGZvciB0aGUgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBwcm9wZXJ0eSBpbiB5b3VyIENGTiB0ZW1wbGF0ZSwgRUNTIHdpbGwgcmVtb3ZlIGFueSBjYXBhY2l0eSBwcm92aWRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2aWNlLCBhcyBmb2xsb3dzOlxuICogICArICBGb3Igc2VydmljZXMgY3JlYXRlZCB3aXRoIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgYWZ0ZXIgdGhlIGxhdW5jaDpcbiAqICAgKyAgSWYgdGhlcmUncyBhIGNsdXN0ZXIgZGVmYXVsdCBzdHJhdGVneSBzZXQsIHRoZSBzZXJ2aWNlIHdpbGwgcmV2ZXJ0IHRvIHVzaW5nIHRoYXQgZGVmYXVsdCBzdHJhdGVneS5cbiAqICAgKyAgSWYgbm8gY2x1c3RlciBkZWZhdWx0IHN0cmF0ZWd5IGV4aXN0cywgeW91IHdpbGwgcmVjZWl2ZSB0aGUgZm9sbG93aW5nIGVycm9yOlxuICogIE5vIGxhdW5jaCB0eXBlIHRvIGZhbGwgYmFjayB0byBmb3IgZW1wdHkgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIFlvdXIgc2VydmljZSB3YXMgbm90IGNyZWF0ZWQgd2l0aCBhIGxhdW5jaCB0eXBlLlxuICogICBcbiAqICAgKyAgRm9yIHNlcnZpY2VzIGNyZWF0ZWQgd2l0aCBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHByaW9yIHRvIHRoZSBsYXVuY2g6XG4gKiAgICsgIElmIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgaGFkIGBgRkFSR0FURV9TUE9UYGAgb3IgYGBGQVJHQVRFYGAgY2FwYWNpdHkgcHJvdmlkZXJzLCB0aGUgbGF1bmNoIHR5cGUgd2lsbCBiZSB1cGRhdGVkIHRvIGBgRkFSR0FURWBgIGFuZCB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgd2lsbCBiZSByZW1vdmVkLlxuICogICArICBJZiB0aGUgc3RyYXRlZ3kgaW5jbHVkZWQgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycywgdGhlIHNlcnZpY2Ugd2lsbCByZXZlcnQgdG8gRUMyIGxhdW5jaCB0eXBlLCBhbmQgdGhlIEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgd2lsbCBub3QgYmUgdXNlZC5cbiAqICAgXG4gKiAgIFxuICogIFJlY29tbWVuZGVkIEFjdGlvbnNcbiAqICBJZiB5b3UgYXJlIGN1cnJlbnRseSB1c2luZyBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneTogW11gYCBpbiB5b3VyIENGTiB0ZW1wbGF0ZXMsIHlvdSBzaG91bGQgdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuICogICArICBJZiB5b3UgZG8gbm90IGludGVuZCB0byB1cGRhdGUgdGhlIENhcGFjaXR5IFByb3ZpZGVyIFN0cmF0ZWd5OlxuICogICArICBSZW1vdmUgdGhlIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgcHJvcGVydHkgZW50aXJlbHkgZnJvbSB5b3VyIENGTiB0ZW1wbGF0ZVxuICogICArICBBbHRlcm5hdGl2ZWx5LCB1c2UgYGAhUmVmIDo6Tm9WYWx1ZWBgIGZvciB0aGUgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBwcm9wZXJ0eSBpbiB5b3VyIHRlbXBsYXRlXG4gKiAgIFxuICogICArICBJZiB5b3UgaW50ZW5kIHRvIG1haW50YWluIG9yIHVwZGF0ZSB0aGUgQ2FwYWNpdHkgUHJvdmlkZXIgU3RyYXRlZ3ksIHNwZWNpZnkgdGhlIGFjdHVhbCBDYXBhY2l0eSBQcm92aWRlciBTdHJhdGVneSBmb3IgdGhlIHNlcnZpY2UgaW4geW91ciBDRk4gdGVtcGxhdGUuXG4gKiAgIFxuICogIElmIHlvdXIgQ0ZOIHRlbXBsYXRlIGhhZCBhbiBlbXB0eSBsaXN0IChbXSkgZm9yIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgcHJpb3IgdG8gdGhlIGFmb3JlbWVudGlvbmVkIGxhdW5jaCBvbiBKdW5lIDEyLCBhbmQgeW91IGFyZSB1c2luZyB0aGUgc2FtZSB0ZW1wbGF0ZSB3aXRoIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5OiBbXWBgLCB5b3UgbWlnaHQgZW5jb3VudGVyIHRoZSBmb2xsb3dpbmcgZXJyb3I6XG4gKiAgIEludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogV2hlbiBzd2l0Y2hpbmcgZnJvbSBsYXVuY2ggdHlwZSB0byBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBvbiBhbiBleGlzdGluZyBzZXJ2aWNlLCBvciBtYWtpbmcgYSBjaGFuZ2UgdG8gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBvbiBhIHNlcnZpY2UgdGhhdCBpcyBhbHJlYWR5IHVzaW5nIG9uZSwgeW91IG11c3QgZm9yY2UgYSBuZXcgZGVwbG95bWVudC4gKFNlcnZpY2U6IEVjcywgU3RhdHVzIENvZGU6IDQwMCwgUmVxdWVzdCBJRDogeHh4KSAoU0RLIEF0dGVtcHQgQ291bnQ6IDEpXCIgKFJlcXVlc3RUb2tlbjogeHh4IEhhbmRsZXJFcnJvckNvZGU6IEludmFsaWRSZXF1ZXN0KSBcbiAqICBOb3RlIHRoYXQgQ0ZOIGF1dG9tYXRpY2FsbHkgaW5pdGlhdGVzIGEgbmV3IGRlcGxveW1lbnQgd2hlbiBpdCBkZXRlY3RzIGEgcGFyYW1ldGVyIGNoYW5nZSwgYnV0IGN1c3RvbWVycyBjYW5ub3QgY2hvb3NlIHRvIGZvcmNlIGEgZGVwbG95bWVudCB0aHJvdWdoIENGTi4gVGhpcyBpcyBhbiBpbnZhbGlkIGlucHV0IHNjZW5hcmlvIHRoYXQgcmVxdWlyZXMgb25lIG9mIHRoZSByZW1lZGlhdGlvbiBhY3Rpb25zIGxpc3RlZCBhYm92ZS5cbiAqICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhY3RpdmUgcHJvZHVjdGlvbiBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSwgY29udGFjdCBBV1MgU3VwcG9ydCBvciB5b3VyIFRlY2huaWNhbCBBY2NvdW50IE1hbmFnZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19FQ1NfU0VSVklDRSB7XG4vKipcbiAqIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIHRoYXQgeW91ciB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgcnVubmluZyBvbi4gQSBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHNwZWNpZmllZCBvbmx5IGZvciB0YXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS4gSWYgb25lIGlzbid0IHNwZWNpZmllZCwgdGhlIGBgTEFURVNUYGAgcGxhdGZvcm0gdmVyc2lvbiBpcyB1c2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtwbGF0Zm9ybSB2ZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcGxhdGZvcm1fdmVyc2lvbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5QbGF0Zm9ybVZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSB0YWdzIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiB0byB0aGUgdGFzay4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgdGFncyBhcmVuJ3QgcHJvcGFnYXRlZC4gVGFncyBjYW4gb25seSBiZSBwcm9wYWdhdGVkIHRvIHRoZSB0YXNrIGR1cmluZyB0YXNrIGNyZWF0aW9uLiBUbyBhZGQgdGFncyB0byBhIHRhc2sgYWZ0ZXIgdGFzayBjcmVhdGlvbiwgdXNlIHRoZSBbVGFnUmVzb3VyY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVGFnUmVzb3VyY2UuaHRtbCkgQVBJIGFjdGlvbi5cbiAqICBZb3UgbXVzdCBzZXQgdGhpcyB0byBhIHZhbHVlIG90aGVyIHRoYW4gYGBOT05FYGAgd2hlbiB5b3UgdXNlIENvc3QgRXhwbG9yZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgdXNhZ2UgcmVwb3J0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNhZ2UtcmVwb3J0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIGRlZmF1bHQgaXMgYGBOT05FYGAuXG4gKi9cblByb3BhZ2F0ZVRhZ3M/OiAoXCJTRVJWSUNFXCIgfCBcIlRBU0tfREVGSU5JVElPTlwiKVxuU2VydmljZUFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcGxhY2VtZW50IHN0cmF0ZWd5IG9iamVjdHMgdG8gdXNlIGZvciB0YXNrcyBpbiB5b3VyIHNlcnZpY2UuIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgNSBzdHJhdGVneSBydWxlcyBmb3IgZWFjaCBzZXJ2aWNlLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFBsYWNlbWVudFN0cmF0ZWd5YGAgYXJyYXkuXG4gKi9cblBsYWNlbWVudFN0cmF0ZWdpZXM/OiBQbGFjZW1lbnRTdHJhdGVneVtdXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgZGlzY292ZXJ5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWRpc2NvdmVyeS5odG1sKS5cbiAqICAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGlzbid0IHN1cHBvcnRlZC5cbiAqICAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgU2VydmljZVJlZ2lzdHJ5YGAgYXJyYXkuXG4gKi9cblNlcnZpY2VSZWdpc3RyaWVzPzogU2VydmljZVJlZ2lzdHJ5W11cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgdm9sdW1lIHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFzIGEgdm9sdW1lIHRoYXQgaXMgY29uZmlndXJlZCBhdCBsYXVuY2ggdGltZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGUgaXMgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25gYCBhcnJheS5cbiAqL1xuVm9sdW1lQ29uZmlndXJhdGlvbnM/OiBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICogIElmIGEgYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGxhdW5jaFR5cGVgYCBwYXJhbWV0ZXIgbXVzdCBiZSBvbWl0dGVkLiBJZiBubyBgYGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIG9yIGBgbGF1bmNoVHlwZWBgIGlzIHNwZWNpZmllZCwgdGhlIGBgZGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIGZvciB0aGUgY2x1c3RlciBpcyB1c2VkLlxuICogIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGNvbnRhaW4gYSBtYXhpbXVtIG9mIDIwIGNhcGFjaXR5IHByb3ZpZGVycy5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtYGAgYXJyYXkuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneT86IENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW1bXVxuLyoqXG4gKiBUaGUgbGF1bmNoIHR5cGUgb24gd2hpY2ggdG8gcnVuIHlvdXIgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBMYXVuY2ggVHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2xhdW5jaF90eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkxhdW5jaFR5cGU/OiAoXCJFQzJcIiB8IFwiRkFSR0FURVwiIHwgXCJFWFRFUk5BTFwiKVxuTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgQXZhaWxhYmlsaXR5IFpvbmUgcmViYWxhbmNpbmcgZm9yIHRoZSBzZXJ2aWNlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JhbGFuY2luZyBhbiBBbWF6b24gRUNTIHNlcnZpY2UgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1yZWJhbGFuY2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkF2YWlsYWJpbGl0eVpvbmVSZWJhbGFuY2luZz86IChcIkVOQUJMRURcIiB8IFwiRElTQUJMRURcIilcbi8qKlxuICogVGhlIHNjaGVkdWxpbmcgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKS5cbiAqICBUaGVyZSBhcmUgdHdvIHNlcnZpY2Ugc2NoZWR1bGVyIHN0cmF0ZWdpZXMgYXZhaWxhYmxlOlxuICogICArICBgYFJFUExJQ0FgYC1UaGUgcmVwbGljYSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHBsYWNlcyBhbmQgbWFpbnRhaW5zIHRoZSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcyBhY3Jvc3MgeW91ciBjbHVzdGVyLiBCeSBkZWZhdWx0LCB0aGUgc2VydmljZSBzY2hlZHVsZXIgc3ByZWFkcyB0YXNrcyBhY3Jvc3MgQXZhaWxhYmlsaXR5IFpvbmVzLiBZb3UgY2FuIHVzZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVnaWVzIGFuZCBjb25zdHJhaW50cyB0byBjdXN0b21pemUgdGFzayBwbGFjZW1lbnQgZGVjaXNpb25zLiBUaGlzIHNjaGVkdWxlciBzdHJhdGVneSBpcyByZXF1aXJlZCBpZiB0aGUgc2VydmljZSB1c2VzIHRoZSBgYENPREVfREVQTE9ZYGAgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcy5cbiAqICAgKyAgYGBEQUVNT05gYC1UaGUgZGFlbW9uIHNjaGVkdWxpbmcgc3RyYXRlZ3kgZGVwbG95cyBleGFjdGx5IG9uZSB0YXNrIG9uIGVhY2ggYWN0aXZlIGNvbnRhaW5lciBpbnN0YW5jZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgdGhhdCB5b3Ugc3BlY2lmeSBpbiB5b3VyIGNsdXN0ZXIuIFRoZSBzZXJ2aWNlIHNjaGVkdWxlciBhbHNvIGV2YWx1YXRlcyB0aGUgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgZm9yIHJ1bm5pbmcgdGFza3MgYW5kIHdpbGwgc3RvcCB0YXNrcyB0aGF0IGRvbid0IG1lZXQgdGhlIHBsYWNlbWVudCBjb25zdHJhaW50cy4gV2hlbiB5b3UncmUgdXNpbmcgdGhpcyBzdHJhdGVneSwgeW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhIGRlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLCBhIHRhc2sgcGxhY2VtZW50IHN0cmF0ZWd5LCBvciB1c2UgU2VydmljZSBBdXRvIFNjYWxpbmcgcG9saWNpZXMuXG4gKiAgIFRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlIG9yIHRoZSBgYENPREVfREVQTE9ZYGAgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcyBkb24ndCBzdXBwb3J0IHRoZSBgYERBRU1PTmBgIHNjaGVkdWxpbmcgc3RyYXRlZ3kuXG4gKi9cblNjaGVkdWxpbmdTdHJhdGVneT86IChcIkRBRU1PTlwiIHwgXCJSRVBMSUNBXCIpXG5OZXR3b3JrQ29uZmlndXJhdGlvbj86IE5ldHdvcmtDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byB0aGUgc2VydmljZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUsIGJvdGggb2Ygd2hpY2ggeW91IGRlZmluZS4gV2hlbiBhIHNlcnZpY2UgaXMgZGVsZXRlZCwgdGhlIHRhZ3MgYXJlIGRlbGV0ZWQgYXMgd2VsbC5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICovXG5UYWdzPzogVGFnW11cbi8qKlxuICogVGhlIHBlcmlvZCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugc2NoZWR1bGVyIGlnbm9yZXMgdW5oZWFsdGh5IEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIFZQQyBMYXR0aWNlLCBhbmQgY29udGFpbmVyIGhlYWx0aCBjaGVja3MgYWZ0ZXIgYSB0YXNrIGhhcyBmaXJzdCBzdGFydGVkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIGhlYWx0aCBjaGVjayBncmFjZSBwZXJpb2QgdmFsdWUsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuIElmIHlvdSBkb24ndCB1c2UgYW55IG9mIHRoZSBoZWFsdGggY2hlY2tzLCB0aGVuIGBgaGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFNlY29uZHNgYCBpcyB1bnVzZWQuXG4gKiAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGFrZSBhIHdoaWxlIHRvIHN0YXJ0IGFuZCByZXNwb25kIHRvIGhlYWx0aCBjaGVja3MsIHlvdSBjYW4gc3BlY2lmeSBhIGhlYWx0aCBjaGVjayBncmFjZSBwZXJpb2Qgb2YgdXAgdG8gMiwxNDcsNDgzLDY0NyBzZWNvbmRzIChhYm91dCA2OSB5ZWFycykuIER1cmluZyB0aGF0IHRpbWUsIHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugc2NoZWR1bGVyIGlnbm9yZXMgaGVhbHRoIGNoZWNrIHN0YXR1cy4gVGhpcyBncmFjZSBwZXJpb2QgY2FuIHByZXZlbnQgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGZyb20gbWFya2luZyB0YXNrcyBhcyB1bmhlYWx0aHkgYW5kIHN0b3BwaW5nIHRoZW0gYmVmb3JlIHRoZXkgaGF2ZSB0aW1lIHRvIGNvbWUgdXAuXG4gKi9cbkhlYWx0aENoZWNrR3JhY2VQZXJpb2RTZWNvbmRzPzogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHR1cm4gb24gQW1hem9uIEVDUyBtYW5hZ2VkIHRhZ3MgZm9yIHRoZSB0YXNrcyB3aXRoaW4gdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1RhZ2dpbmcgeW91ciBBbWF6b24gRUNTIHJlc291cmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLXVzaW5nLXRhZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFdoZW4geW91IHVzZSBBbWF6b24gRUNTIG1hbmFnZWQgdGFncywgeW91IG5lZWQgdG8gc2V0IHRoZSBgYHByb3BhZ2F0ZVRhZ3NgYCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqL1xuRW5hYmxlRUNTTWFuYWdlZFRhZ3M/OiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9uYWxpdHkgaXMgdHVybmVkIG9uIGZvciB0aGUgc2VydmljZS4gSWYgYGB0cnVlYGAsIHRoZSBleGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb24gZm9yIGFsbCBjb250YWluZXJzIGluIHRhc2tzIGFzIHBhcnQgb2YgdGhlIHNlcnZpY2UuXG4gKi9cbkVuYWJsZUV4ZWN1dGVDb21tYW5kPzogYm9vbGVhblxuLyoqXG4gKiBBbiBhcnJheSBvZiBwbGFjZW1lbnQgY29uc3RyYWludCBvYmplY3RzIHRvIHVzZSBmb3IgdGFza3MgaW4geW91ciBzZXJ2aWNlLiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIG9mIDEwIGNvbnN0cmFpbnRzIGZvciBlYWNoIHRhc2suIFRoaXMgbGltaXQgaW5jbHVkZXMgY29uc3RyYWludHMgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhbmQgdGhvc2Ugc3BlY2lmaWVkIGF0IHJ1bnRpbWUuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgUGxhY2VtZW50Q29uc3RyYWludGBgIGFycmF5LlxuICovXG5QbGFjZW1lbnRDb25zdHJhaW50cz86IFBsYWNlbWVudENvbnN0cmFpbnRbXVxuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBjbHVzdGVyIHRoYXQgeW91IHJ1biB5b3VyIHNlcnZpY2Ugb24uIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIGNsdXN0ZXIsIHRoZSBkZWZhdWx0IGNsdXN0ZXIgaXMgYXNzdW1lZC5cbiAqL1xuQ2x1c3Rlcj86IHN0cmluZ1xuLyoqXG4gKiBBIGxpc3Qgb2YgbG9hZCBiYWxhbmNlciBvYmplY3RzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzZXJ2aWNlLiBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBSb2xlYGAgcHJvcGVydHksIGBgTG9hZEJhbGFuY2Vyc2BgIG11c3QgYmUgc3BlY2lmaWVkIGFzIHdlbGwuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbnVtYmVyIG9mIGxvYWQgYmFsYW5jZXJzIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHBlciBzZXJ2aWNlLCBzZWUgW1NlcnZpY2UgTG9hZCBCYWxhbmNpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtbG9hZC1iYWxhbmNpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYExvYWRCYWxhbmNlcmBgIGFycmF5LlxuICovXG5Mb2FkQmFsYW5jZXJzPzogTG9hZEJhbGFuY2VyW11cblNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbj86IFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGluc3RhbnRpYXRpb25zIG9mIHRoZSBzcGVjaWZpZWQgdGFzayBkZWZpbml0aW9uIHRvIHBsYWNlIGFuZCBrZWVwIHJ1bm5pbmcgaW4geW91ciBzZXJ2aWNlLlxuICogIEZvciBuZXcgc2VydmljZXMsIGlmIGEgZGVzaXJlZCBjb3VudCBpcyBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgdmFsdWUgb2YgYGAxYGAgaXMgdXNlZC4gV2hlbiB1c2luZyB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LCB0aGUgZGVzaXJlZCBjb3VudCBpcyBub3QgcmVxdWlyZWQuXG4gKiAgRm9yIGV4aXN0aW5nIHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgb21pdHRlZCBmcm9tIHRoZSBvcGVyYXRpb24uXG4gKi9cbkRlc2lyZWRDb3VudD86IG51bWJlclxuLyoqXG4gKiBUaGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UgYmVpbmcgY3JlYXRlZC5cbiAqL1xuVnBjTGF0dGljZUNvbmZpZ3VyYXRpb25zPzogVnBjTGF0dGljZUNvbmZpZ3VyYXRpb25bXVxuRGVwbG95bWVudENvbnRyb2xsZXI/OiBEZXBsb3ltZW50Q29udHJvbGxlclxuLyoqXG4gKiBUaGUgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyBBbWF6b24gRUNTIHRvIG1ha2UgY2FsbHMgdG8geW91ciBsb2FkIGJhbGFuY2VyIG9uIHlvdXIgYmVoYWxmLiBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHBlcm1pdHRlZCBpZiB5b3UgYXJlIHVzaW5nIGEgbG9hZCBiYWxhbmNlciB3aXRoIHlvdXIgc2VydmljZSBhbmQgeW91ciB0YXNrIGRlZmluaXRpb24gZG9lc24ndCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLiBJZiB5b3Ugc3BlY2lmeSB0aGUgYGByb2xlYGAgcGFyYW1ldGVyLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgYSBsb2FkIGJhbGFuY2VyIG9iamVjdCB3aXRoIHRoZSBgYGxvYWRCYWxhbmNlcnNgYCBwYXJhbWV0ZXIuXG4gKiAgIElmIHlvdXIgYWNjb3VudCBoYXMgYWxyZWFkeSBjcmVhdGVkIHRoZSBBbWF6b24gRUNTIHNlcnZpY2UtbGlua2VkIHJvbGUsIHRoYXQgcm9sZSBpcyB1c2VkIGZvciB5b3VyIHNlcnZpY2UgdW5sZXNzIHlvdSBzcGVjaWZ5IGEgcm9sZSBoZXJlLiBUaGUgc2VydmljZS1saW5rZWQgcm9sZSBpcyByZXF1aXJlZCBpZiB5b3VyIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBvciBpZiB0aGUgc2VydmljZSBpcyBjb25maWd1cmVkIHRvIHVzZSBzZXJ2aWNlIGRpc2NvdmVyeSwgYW4gZXh0ZXJuYWwgZGVwbG95bWVudCBjb250cm9sbGVyLCBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzLCBvciBFbGFzdGljIEluZmVyZW5jZSBhY2NlbGVyYXRvcnMgaW4gd2hpY2ggY2FzZSB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHJvbGUgaGVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgc2VydmljZS1saW5rZWQgcm9sZXMgZm9yIEFtYXpvbiBFQ1NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nLXNlcnZpY2UtbGlua2VkLXJvbGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91ciBzcGVjaWZpZWQgcm9sZSBoYXMgYSBwYXRoIG90aGVyIHRoYW4gYGAvYGAsIHRoZW4geW91IG11c3QgZWl0aGVyIHNwZWNpZnkgdGhlIGZ1bGwgcm9sZSBBUk4gKHRoaXMgaXMgcmVjb21tZW5kZWQpIG9yIHByZWZpeCB0aGUgcm9sZSBuYW1lIHdpdGggdGhlIHBhdGguIEZvciBleGFtcGxlLCBpZiBhIHJvbGUgd2l0aCB0aGUgbmFtZSBgYGJhcmBgIGhhcyBhIHBhdGggb2YgYGAvZm9vL2BgIHRoZW4geW91IHdvdWxkIHNwZWNpZnkgYGAvZm9vL2JhcmBgIGFzIHRoZSByb2xlIG5hbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0ZyaWVuZGx5IG5hbWVzIGFuZCBwYXRoc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pZGVudGlmaWVycy5odG1sI2lkZW50aWZpZXJzLWZyaWVuZGx5LW5hbWVzKSBpbiB0aGUgKklBTSBVc2VyIEd1aWRlKi5cbiAqL1xuUm9sZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYGBmYW1pbHlgYCBhbmQgYGByZXZpc2lvbmBgIChgYGZhbWlseTpyZXZpc2lvbmBgKSBvciBmdWxsIEFSTiBvZiB0aGUgdGFzayBkZWZpbml0aW9uIHRvIHJ1biBpbiB5b3VyIHNlcnZpY2UuIElmIGEgYGByZXZpc2lvbmBgIGlzbid0IHNwZWNpZmllZCwgdGhlIGxhdGVzdCBgYEFDVElWRWBgIHJldmlzaW9uIGlzIHVzZWQuXG4gKiAgQSB0YXNrIGRlZmluaXRpb24gbXVzdCBiZSBzcGVjaWZpZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyBlaXRoZXIgdGhlIGBgRUNTYGAgb3IgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlcnMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGVwbG95bWVudCB0eXBlcywgc2VlIFtBbWF6b24gRUNTIGRlcGxveW1lbnQgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZXMuaHRtbCkuXG4gKi9cblRhc2tEZWZpbml0aW9uPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHlvdXIgc2VydmljZS4gVXAgdG8gMjU1IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zIGFyZSBhbGxvd2VkLiBTZXJ2aWNlIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIGNsdXN0ZXIsIGJ1dCB5b3UgY2FuIGhhdmUgc2ltaWxhcmx5IG5hbWVkIHNlcnZpY2VzIGluIG11bHRpcGxlIGNsdXN0ZXJzIHdpdGhpbiBhIFJlZ2lvbiBvciBhY3Jvc3MgbXVsdGlwbGUgUmVnaW9ucy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgdGhlIGBgU2VydmljZU5hbWVgYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZU5hbWVgYCBtdXN0IGJlIHVuaXF1ZSBpbiB0aGUgY2x1c3Rlci5cbiAqL1xuU2VydmljZU5hbWU/OiBzdHJpbmdcbkRlcGxveW1lbnRDb25maWd1cmF0aW9uPzogRGVwbG95bWVudENvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIHRhc2sgcGxhY2VtZW50IHN0cmF0ZWd5IGZvciBhIHRhc2sgb3Igc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtc3RyYXRlZ2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50U3RyYXRlZ3kge1xuLyoqXG4gKiBUaGUgZmllbGQgdG8gYXBwbHkgdGhlIHBsYWNlbWVudCBzdHJhdGVneSBhZ2FpbnN0LiBGb3IgdGhlIGBgc3ByZWFkYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB2YWxpZCB2YWx1ZXMgYXJlIGBgaW5zdGFuY2VJZGBgIChvciBgYGhvc3RgYCwgd2hpY2ggaGFzIHRoZSBzYW1lIGVmZmVjdCksIG9yIGFueSBwbGF0Zm9ybSBvciBjdXN0b20gYXR0cmlidXRlIHRoYXQncyBhcHBsaWVkIHRvIGEgY29udGFpbmVyIGluc3RhbmNlLCBzdWNoIGFzIGBgYXR0cmlidXRlOmVjcy5hdmFpbGFiaWxpdHktem9uZWBgLiBGb3IgdGhlIGBgYmlucGFja2BgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGNwdWBgIGFuZCBgYG1lbW9yeWBgLiBGb3IgdGhlIGBgcmFuZG9tYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB0aGlzIGZpZWxkIGlzIG5vdCB1c2VkLlxuICovXG5GaWVsZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdHlwZSBvZiBwbGFjZW1lbnQgc3RyYXRlZ3kuIFRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSByYW5kb21seSBwbGFjZXMgdGFza3Mgb24gYXZhaWxhYmxlIGNhbmRpZGF0ZXMuIFRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSBzcHJlYWRzIHBsYWNlbWVudCBhY3Jvc3MgYXZhaWxhYmxlIGNhbmRpZGF0ZXMgZXZlbmx5IGJhc2VkIG9uIHRoZSBgYGZpZWxkYGAgcGFyYW1ldGVyLiBUaGUgYGBiaW5wYWNrYGAgc3RyYXRlZ3kgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzIHRoYXQgaGF2ZSB0aGUgbGVhc3QgYXZhaWxhYmxlIGFtb3VudCBvZiB0aGUgcmVzb3VyY2UgdGhhdCdzIHNwZWNpZmllZCB3aXRoIHRoZSBgYGZpZWxkYGAgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZSwgaWYgeW91IGJpbnBhY2sgb24gbWVtb3J5LCBhIHRhc2sgaXMgcGxhY2VkIG9uIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQgb2YgcmVtYWluaW5nIG1lbW9yeSBidXQgc3RpbGwgZW5vdWdoIHRvIHJ1biB0aGUgdGFzay5cbiAqL1xuVHlwZTogKFwiYmlucGFja1wiIHwgXCJyYW5kb21cIiB8IFwic3ByZWFkXCIpXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIGZvciB0aGUgc2VydmljZSByZWdpc3RyeS5cbiAqICBFYWNoIHNlcnZpY2UgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBvbmUgc2VydmljZSByZWdpc3RyeS4gTXVsdGlwbGUgc2VydmljZSByZWdpc3RyaWVzIGZvciBlYWNoIHNlcnZpY2UgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gKiAgV2hlbiB5b3UgYWRkLCB1cGRhdGUsIG9yIHJlbW92ZSB0aGUgc2VydmljZSByZWdpc3RyaWVzIGNvbmZpZ3VyYXRpb24sIEFtYXpvbiBFQ1Mgc3RhcnRzIGEgbmV3IGRlcGxveW1lbnQuIE5ldyB0YXNrcyBhcmUgcmVnaXN0ZXJlZCBhbmQgZGVyZWdpc3RlcmVkIHRvIHRoZSB1cGRhdGVkIHNlcnZpY2UgcmVnaXN0cnkgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlUmVnaXN0cnkge1xuLyoqXG4gKiBUaGUgY29udGFpbmVyIG5hbWUgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBicmlkZ2VgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBhIHR5cGUgU1JWIEROUyByZWNvcmQgaXMgdXNlZCwgeW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gb3IgYSBgYHBvcnRgYCB2YWx1ZS4gSG93ZXZlciwgeW91IGNhbid0IHNwZWNpZnkgYm90aC5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSB1c2VkIGlmIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZSBzcGVjaWZpZWQgYW4gU1JWIHJlY29yZC4gVGhpcyBmaWVsZCBtaWdodCBiZSB1c2VkIGlmIGJvdGggdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBTUlYgcmVjb3JkcyBhcmUgdXNlZC5cbiAqL1xuUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSB0byBiZSB1c2VkIGZvciB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2UuIEl0J3MgYWxyZWFkeSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBicmlkZ2VgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBUaGUgY3VycmVudGx5IHN1cHBvcnRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGlzIENNQVAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0ZVNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlU2VydmljZS5odG1sKS5cbiAqL1xuUmVnaXN0cnlBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgdm9sdW1lIHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFzIGEgdm9sdW1lIHRoYXQgaXMgY29uZmlndXJlZCBhdCBsYXVuY2ggdGltZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGUgaXMgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb24ge1xuTWFuYWdlZEVCU1ZvbHVtZT86IFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdm9sdW1lLiBUaGlzIHZhbHVlIG11c3QgbWF0Y2ggdGhlIHZvbHVtZSBuYW1lIGZyb20gdGhlIGBgVm9sdW1lYGAgb2JqZWN0IGluIHRoZSB0YXNrIGRlZmluaXRpb24uXG4gKi9cbk5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFtYXpvbiBFQlMgdm9sdW1lIHRoYXQgQW1hem9uIEVDUyBjcmVhdGVzIGFuZCBtYW5hZ2VzIG9uIHlvdXIgYmVoYWxmLiBUaGVzZSBzZXR0aW5ncyBhcmUgdXNlZCB0byBjcmVhdGUgZWFjaCBBbWF6b24gRUJTIHZvbHVtZSwgd2l0aCBvbmUgdm9sdW1lIGNyZWF0ZWQgZm9yIGVhY2ggdGFzayBpbiB0aGUgc2VydmljZS4gVGhlIEFtYXpvbiBFQlMgdm9sdW1lcyBhcmUgdmlzaWJsZSBpbiB5b3VyIGFjY291bnQgaW4gdGhlIEFtYXpvbiBFQzIgY29uc29sZSBvbmNlIHRoZXkgYXJlIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZU1hbmFnZWRFQlNWb2x1bWVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIHNuYXBzaG90IHRoYXQgQW1hem9uIEVDUyB1c2VzIHRvIGNyZWF0ZSB2b2x1bWVzIGZvciBhdHRhY2htZW50IHRvIHRhc2tzIG1haW50YWluZWQgYnkgdGhlIHNlcnZpY2UuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGBgc25hcHNob3RJZGBgIG9yIGBgc2l6ZUluR2lCYGAgaW4geW91ciB2b2x1bWUgY29uZmlndXJhdGlvbi4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBTbmFwc2hvdElkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5TbmFwc2hvdElkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB2b2x1bWUgdHlwZS4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBWb2x1bWVUeXBlYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUJTIHZvbHVtZSB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUqLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGVzLlxuICogICArICBHZW5lcmFsIFB1cnBvc2UgU1NEOiBgYGdwMmBgfGBgZ3AzYGBcbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBTU0Q6IGBgaW8xYGB8YGBpbzJgYFxuICogICArICBUaHJvdWdocHV0IE9wdGltaXplZCBIREQ6IGBgc3QxYGBcbiAqICAgKyAgQ29sZCBIREQ6IGBgc2MxYGBcbiAqICAgKyAgTWFnbmV0aWM6IGBgc3RhbmRhcmRgYFxuICogICBUaGUgbWFnbmV0aWMgdm9sdW1lIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBvbiBGYXJnYXRlLlxuICovXG5Wb2x1bWVUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBpZGVudGlmaWVyIG9mIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgdG8gdXNlIGZvciBBbWF6b24gRUJTIGVuY3J5cHRpb24uIFdoZW4gYSBrZXkgaXMgc3BlY2lmaWVkIHVzaW5nIHRoaXMgcGFyYW1ldGVyLCBpdCBvdmVycmlkZXMgQW1hem9uIEVCUyBkZWZhdWx0IGVuY3J5cHRpb24gb3IgYW55IEtNUyBrZXkgdGhhdCB5b3Ugc3BlY2lmaWVkIGZvciBjbHVzdGVyLWxldmVsIG1hbmFnZWQgc3RvcmFnZSBlbmNyeXB0aW9uLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEttc0tleUlkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBlbmNyeXB0aW5nIEFtYXpvbiBFQlMgdm9sdW1lcyBhdHRhY2hlZCB0byB0YXNrcywgc2VlIFtFbmNyeXB0IGRhdGEgc3RvcmVkIGluIEFtYXpvbiBFQlMgdm9sdW1lcyBhdHRhY2hlZCB0byBBbWF6b24gRUNTIHRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lYnMta21zLWVuY3J5cHRpb24uaHRtbCkuXG4gKiAgIEFXUyBhdXRoZW50aWNhdGVzIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgYXN5bmNocm9ub3VzbHkuIFRoZXJlZm9yZSwgaWYgeW91IHNwZWNpZnkgYW4gSUQsIGFsaWFzLCBvciBBUk4gdGhhdCBpcyBpbnZhbGlkLCB0aGUgYWN0aW9uIGNhbiBhcHBlYXIgdG8gY29tcGxldGUsIGJ1dCBldmVudHVhbGx5IGZhaWxzLlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgdm9sdW1lLiBBbWF6b24gRUNTIGFwcGxpZXMgc2VydmljZS1tYW5hZ2VkIHRhZ3MgYnkgZGVmYXVsdC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBUYWdTcGVjaWZpY2F0aW9ucy5OYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5UYWdTcGVjaWZpY2F0aW9ucz86IEVCU1RhZ1NwZWNpZmljYXRpb25bXVxuLyoqXG4gKiBUaGUgZmlsZXN5c3RlbSB0eXBlIGZvciB0aGUgdm9sdW1lLiBGb3Igdm9sdW1lcyBjcmVhdGVkIGZyb20gYSBzbmFwc2hvdCwgeW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBmaWxlc3lzdGVtIHR5cGUgdGhhdCB0aGUgdm9sdW1lIHdhcyB1c2luZyB3aGVuIHRoZSBzbmFwc2hvdCB3YXMgY3JlYXRlZC4gSWYgdGhlcmUgaXMgYSBmaWxlc3lzdGVtIHR5cGUgbWlzbWF0Y2gsIHRoZSB0YXNrcyB3aWxsIGZhaWwgdG8gc3RhcnQuXG4gKiAgVGhlIGF2YWlsYWJsZSBMaW51eCBmaWxlc3lzdGVtIHR5cGVzIGFyZeKAqCBgYGV4dDNgYCwgYGBleHQ0YGAsIGFuZCBgYHhmc2BgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBgYHhmc2BgIGZpbGVzeXN0ZW0gdHlwZSBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gKiAgVGhlIGF2YWlsYWJsZSBXaW5kb3dzIGZpbGVzeXN0ZW0gdHlwZXMgYXJlIGBgTlRGU2BgLlxuICovXG5GaWxlc3lzdGVtVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIHNob3VsZCBiZSBlbmNyeXB0ZWQuIElmIHlvdSB0dXJuIG9uIFJlZ2lvbi1sZXZlbCBBbWF6b24gRUJTIGVuY3J5cHRpb24gYnkgZGVmYXVsdCBidXQgc2V0IHRoaXMgdmFsdWUgYXMgYGBmYWxzZWBgLCB0aGUgc2V0dGluZyBpcyBvdmVycmlkZGVuIGFuZCB0aGUgdm9sdW1lIGlzIGVuY3J5cHRlZCB3aXRoIHRoZSBLTVMga2V5IHNwZWNpZmllZCBmb3IgQW1hem9uIEVCUyBlbmNyeXB0aW9uIGJ5IGRlZmF1bHQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgRW5jcnlwdGVkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5FbmNyeXB0ZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSB0aHJvdWdocHV0IHRvIHByb3Zpc2lvbiBmb3IgYSB2b2x1bWUsIGluIE1pQi9zLCB3aXRoIGEgbWF4aW11bSBvZiAxLDAwMCBNaUIvcy4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBUaHJvdWdocHV0YGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgZ3AzYGAgdm9sdW1lIHR5cGUuXG4gKi9cblRocm91Z2hwdXQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHJhdGUsIGluIE1pQi9zLCBhdCB3aGljaCBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNuYXBzaG90IG9mIGFuIGV4aXN0aW5nIEVCUyB2b2x1bWUgdG8gY3JlYXRlIG5ldyB2b2x1bWVzIGZvciBhdHRhY2htZW50IHRvIHRoZSB0YXNrcyBtYWludGFpbmVkIGJ5IHRoZSBzZXJ2aWNlLiBUaGlzIHByb3BlcnR5IGNhbiBiZSBzcGVjaWZpZWQgb25seSBpZiB5b3Ugc3BlY2lmeSBhIGBgc25hcHNob3RJZGBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJbml0aWFsaXplIEFtYXpvbiBFQlMgdm9sdW1lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2luaXRhbGl6ZS12b2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUJTIFVzZXIgR3VpZGUqLlxuICovXG5Wb2x1bWVJbml0aWFsaXphdGlvblJhdGU/OiBudW1iZXJcbi8qKlxuICogVGhlIG51bWJlciBvZiBJL08gb3BlcmF0aW9ucyBwZXIgc2Vjb25kIChJT1BTKS4gRm9yIGBgZ3AzYGAsIGBgaW8xYGAsIGFuZCBgYGlvMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIElPUFMgdGhhdCBhcmUgcHJvdmlzaW9uZWQgZm9yIHRoZSB2b2x1bWUuIEZvciBgYGdwMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgYmFzZWxpbmUgcGVyZm9ybWFuY2Ugb2YgdGhlIHZvbHVtZSBhbmQgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIHZvbHVtZSBhY2N1bXVsYXRlcyBJL08gY3JlZGl0cyBmb3IgYnVyc3RpbmcuXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGUuXG4gKiAgICsgIGBgZ3AzYGA6IDMsMDAwIC0gMTYsMDAwIElPUFNcbiAqICAgKyAgYGBpbzFgYDogMTAwIC0gNjQsMDAwIElPUFNcbiAqICAgKyAgYGBpbzJgYDogMTAwIC0gMjU2LDAwMCBJT1BTXG4gKiAgIFxuICogIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciBgYGlvMWBgIGFuZCBgYGlvMmBgIHZvbHVtZSB0eXBlcy4gVGhlIGRlZmF1bHQgZm9yIGBgZ3AzYGAgdm9sdW1lcyBpcyBgYDMsMDAwIElPUFNgYC4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgYGBzdDFgYCwgYGBzYzFgYCwgb3IgYGBzdGFuZGFyZGBgIHZvbHVtZSB0eXBlcy5cbiAqICBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYElvcHNgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cbklvcHM/OiBudW1iZXJcbi8qKlxuICogVGhlIHNpemUgb2YgdGhlIHZvbHVtZSBpbiBHaUIuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgdm9sdW1lIHNpemUgb3IgYSBzbmFwc2hvdCBJRC4gSWYgeW91IHNwZWNpZnkgYSBzbmFwc2hvdCBJRCwgdGhlIHNuYXBzaG90IHNpemUgaXMgdXNlZCBmb3IgdGhlIHZvbHVtZSBzaXplIGJ5IGRlZmF1bHQuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgdm9sdW1lIHNpemUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzbmFwc2hvdCBzaXplLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNpemVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgc2l6ZSB2YWx1ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGUuXG4gKiAgICsgIGBgZ3AyYGAgYW5kIGBgZ3AzYGA6IDEtMTYsMzg0XG4gKiAgICsgIGBgaW8xYGAgYW5kIGBgaW8yYGA6IDQtMTYsMzg0XG4gKiAgICsgIGBgc3QxYGAgYW5kIGBgc2MxYGA6IDEyNS0xNiwzODRcbiAqICAgKyAgYGBzdGFuZGFyZGBgOiAxLTEsMDI0XG4gKi9cblNpemVJbkdpQj86IG51bWJlclxuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHZvbHVtZS4gVGhpcyBpcyB0aGUgQW1hem9uIEVDUyBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gbWFuYWdlIHlvdXIgQVdTIGluZnJhc3RydWN0dXJlLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIEFtYXpvbiBFQ1MtbWFuYWdlZCBgYEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZvbHVtZXNgYCBJQU0gcG9saWN5IHdpdGggdGhpcyByb2xlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9pbmZyYXN0cnVjdHVyZV9JQU1fcm9sZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQ1MgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSB0YWcgc3BlY2lmaWNhdGlvbnMgb2YgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUJTVGFnU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIOKAqHRoZSBBbWF6b24gRUJTIHZvbHVtZS4gVGFncyBjYW4gb25seSBwcm9wYWdhdGUgdG8gYSBgYFNFUlZJQ0VgYCBzcGVjaWZpZWQgaW4g4oCoYGBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbmBgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCDigKhwcm9wYWdhdGVkLlxuICovXG5Qcm9wYWdhdGVUYWdzPzogKFwiU0VSVklDRVwiIHwgXCJUQVNLX0RFRklOSVRJT05cIilcbi8qKlxuICogVGhlIHR5cGUgb2Ygdm9sdW1lIHJlc291cmNlLlxuICovXG5SZXNvdXJjZVR5cGU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyBhcHBsaWVkIHRvIHRoaXMgQW1hem9uIEVCUyB2b2x1bWUuIGBgQW1hem9uRUNTQ3JlYXRlZGBgIGFuZCBgYEFtYXpvbkVDU01hbmFnZWRgYCBhcmUgcmVzZXJ2ZWQgdGFncyB0aGF0IGNhbid0IGJlIHVzZWQuXG4gKi9cblRhZ3M/OiBUYWdbXVxufVxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gYSByZXNvdXJjZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgdGhlbS5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICogICBcbiAqICBJbiBvcmRlciB0byB0YWcgYSBzZXJ2aWNlIHRoYXQgaGFzIHRoZSBmb2xsb3dpbmcgQVJOIGZvcm1hdCwgeW91IG5lZWQgdG8gbWlncmF0ZSB0aGUgc2VydmljZSB0byB0aGUgbG9uZyBBUk4uIFlvdSBtdXN0IHVzZSB0aGUgQVBJLCBDTEkgb3IgY29uc29sZSB0byBtaWdyYXRlIHRoZSBzZXJ2aWNlIEFSTi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTWlncmF0ZSBhbiBzaG9ydCBzZXJ2aWNlIEFSTiB0byBhIGxvbmcgQVJOXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWFybi1taWdyYXRpb24uaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICogICBgYGFybjphd3M6ZWNzOnJlZ2lvbjphd3NfYWNjb3VudF9pZDpzZXJ2aWNlL3NlcnZpY2UtbmFtZWBgIFxuICogIEFmdGVyIHRoZSBtaWdyYXRpb24gaXMgY29tcGxldGUsIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6XG4gKiAgICsgICBUaGUgc2VydmljZSBBUk4gaXM6IGBgYXJuOmF3czplY3M6cmVnaW9uOmF3c19hY2NvdW50X2lkOnNlcnZpY2UvY2x1c3Rlci1uYW1lL3NlcnZpY2UtbmFtZWBgXG4gKiAgICsgIFlvdSBjYW4gdXNlIENGTiB0byB0YWcgdGhlIHNlcnZpY2UgYXMgeW91IHdvdWxkIGEgc2VydmljZSB3aXRoIGEgbG9uZyBBUk4gZm9ybWF0LlxuICogICArICBXaGVuIHRoZSBgYFBoeXNpY2FsUmVzb3VyY2VJZGBgIGluIHRoZSBDRk4gc3RhY2sgcmVwcmVzZW50cyBhIHNlcnZpY2UsIHRoZSB2YWx1ZSBkb2VzIG5vdCBjaGFuZ2UgYW5kIHdpbGwgYmUgdGhlIHNob3J0IHNlcnZpY2UgQVJOLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBvcHRpb25hbCBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBgdmFsdWVgYCBhY3RzIGFzIGEgZGVzY3JpcHRvciB3aXRoaW4gYSB0YWcgY2F0ZWdvcnkgKGtleSkuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIE9uZSBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBga2V5YGAgaXMgYSBnZW5lcmFsIGxhYmVsIHRoYXQgYWN0cyBsaWtlIGEgY2F0ZWdvcnkgZm9yIG1vcmUgc3BlY2lmaWMgdGFnIHZhbHVlcy5cbiAqL1xuS2V5Pzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGJlIHNldCB3aGVuIHVzaW5nIHRoZSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBBUElzIG9yIGFzIHRoZSBkZWZhdWx0IGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGZvciBhIGNsdXN0ZXIgd2l0aCB0aGUgYGBDcmVhdGVDbHVzdGVyYGAgQVBJLlxuICogIE9ubHkgY2FwYWNpdHkgcHJvdmlkZXJzIHRoYXQgYXJlIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciBhbmQgaGF2ZSBhbiBgYEFDVElWRWBgIG9yIGBgVVBEQVRJTkdgYCBzdGF0dXMgY2FuIGJlIHVzZWQgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gVGhlIGBgUHV0Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJzYGAgQVBJIGlzIHVzZWQgdG8gYXNzb2NpYXRlIGEgY2FwYWNpdHkgcHJvdmlkZXIgd2l0aCBhIGNsdXN0ZXIuXG4gKiAgSWYgc3BlY2lmeWluZyBhIGNhcGFjaXR5IHByb3ZpZGVyIHRoYXQgdXNlcyBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHRoZSBjYXBhY2l0eSBwcm92aWRlciBtdXN0IGFscmVhZHkgYmUgY3JlYXRlZC4gTmV3IEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYGBDcmVhdGVDYXBhY2l0eVByb3ZpZGVyYGAgQVBJIG9wZXJhdGlvbi5cbiAqICBUbyB1c2UgYW4gRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXIsIHNwZWNpZnkgZWl0aGVyIHRoZSBgYEZBUkdBVEVgYCBvciBgYEZBUkdBVEVfU1BPVGBgIGNhcGFjaXR5IHByb3ZpZGVycy4gVGhlIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIHRvIGFsbCBhY2NvdW50cyBhbmQgb25seSBuZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgdG8gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW0ge1xuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXIuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlICpiYXNlKiB2YWx1ZSBkZXNpZ25hdGVzIGhvdyBtYW55IHRhc2tzLCBhdCBhIG1pbmltdW0sIHRvIHJ1biBvbiB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBPbmx5IG9uZSBjYXBhY2l0eSBwcm92aWRlciBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBoYXZlIGEgKmJhc2UqIGRlZmluZWQuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC5cbiAqL1xuQmFzZT86IG51bWJlclxuLyoqXG4gKiBUaGUgKndlaWdodCogdmFsdWUgZGVzaWduYXRlcyB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIHRhc2tzIGxhdW5jaGVkIHRoYXQgc2hvdWxkIHVzZSB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBUaGUgYGB3ZWlnaHRgYCB2YWx1ZSBpcyB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gYWZ0ZXIgdGhlIGBgYmFzZWBgIHZhbHVlLCBpZiBkZWZpbmVkLCBpcyBzYXRpc2ZpZWQuXG4gKiAgSWYgbm8gYGB3ZWlnaHRgYCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuIFdoZW4gbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBzcGVjaWZpZWQgd2l0aGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3ksIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXJzIG11c3QgaGF2ZSBhIHdlaWdodCB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYW55IGNhcGFjaXR5IHByb3ZpZGVycyB3aXRoIGEgd2VpZ2h0IG9mIGBgMGBgIGNhbid0IGJlIHVzZWQgdG8gcGxhY2UgdGFza3MuIElmIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBpbiBhIHN0cmF0ZWd5IHRoYXQgYWxsIGhhdmUgYSB3ZWlnaHQgb2YgYGAwYGAsIGFueSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBhY3Rpb25zIHVzaW5nIHRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB3aWxsIGZhaWwuXG4gKiAgQW4gZXhhbXBsZSBzY2VuYXJpbyBmb3IgdXNpbmcgd2VpZ2h0cyBpcyBkZWZpbmluZyBhIHN0cmF0ZWd5IHRoYXQgY29udGFpbnMgdHdvIGNhcGFjaXR5IHByb3ZpZGVycyBhbmQgYm90aCBoYXZlIGEgd2VpZ2h0IG9mIGBgMWBgLCB0aGVuIHdoZW4gdGhlIGBgYmFzZWBgIGlzIHNhdGlzZmllZCwgdGhlIHRhc2tzIHdpbGwgYmUgc3BsaXQgZXZlbmx5IGFjcm9zcyB0aGUgdHdvIGNhcGFjaXR5IHByb3ZpZGVycy4gVXNpbmcgdGhhdCBzYW1lIGxvZ2ljLCBpZiB5b3Ugc3BlY2lmeSBhIHdlaWdodCBvZiBgYDFgYCBmb3IgKmNhcGFjaXR5UHJvdmlkZXJBKiBhbmQgYSB3ZWlnaHQgb2YgYGA0YGAgZm9yICpjYXBhY2l0eVByb3ZpZGVyQiosIHRoZW4gZm9yIGV2ZXJ5IG9uZSB0YXNrIHRoYXQncyBydW4gdXNpbmcgKmNhcGFjaXR5UHJvdmlkZXJBKiwgZm91ciB0YXNrcyB3b3VsZCB1c2UgKmNhcGFjaXR5UHJvdmlkZXJCKi5cbiAqL1xuV2VpZ2h0PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlLiBUaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgdGFzayBkZWZpbml0aW9ucyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgdG8gcmVjZWl2ZSB0aGVpciBvd24gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgYW5kIGl0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG90aGVyIG5ldHdvcmsgbW9kZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgTmV0d29ya2luZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1uZXR3b3JraW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrQ29uZmlndXJhdGlvbiB7XG5Bd3N2cGNDb25maWd1cmF0aW9uPzogQXdzVnBjQ29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBUaGUgVlBDIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3VwcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSB0YXNrLlxuICogICBBbGwgc3BlY2lmaWVkIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c1ZwY0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgSURzIG9mIHRoZSBzZWN1cml0eSBncm91cHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgc2VjdXJpdHkgZ3JvdXAsIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGdyb3VwIGZvciB0aGUgVlBDIGlzIHVzZWQuIFRoZXJlJ3MgYSBsaW1pdCBvZiA1IHNlY3VyaXR5IGdyb3VwcyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQuXG4gKiAgIEFsbCBzcGVjaWZpZWQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cblNlY3VyaXR5R3JvdXBzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIElEcyBvZiB0aGUgc3VibmV0cyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gVGhlcmUncyBhIGxpbWl0IG9mIDE2IHN1Ym5ldHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkLlxuICogICBBbGwgc3BlY2lmaWVkIHN1Ym5ldHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuU3VibmV0cz86IHN0cmluZ1tdXG4vKipcbiAqIFdoZXRoZXIgdGhlIHRhc2sncyBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlIHJlY2VpdmVzIGEgcHVibGljIElQIGFkZHJlc3MuIFxuICogIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgd2hlbiB5b3Ugc2V0IHRoaXMgdmFsdWU6XG4gKiAgICsgIFdoZW4geW91IHVzZSBgYGNyZWF0ZS1zZXJ2aWNlYGAgb3IgYGB1cGRhdGUtc2VydmljZWBgLCB0aGUgZGVmYXVsdCBpcyBgYERJU0FCTEVEYGAuIFxuICogICArICBXaGVuIHRoZSBzZXJ2aWNlIGBgZGVwbG95bWVudENvbnRyb2xsZXJgYCBpcyBgYEVDU2BgLCB0aGUgdmFsdWUgbXVzdCBiZSBgYERJU0FCTEVEYGAuXG4gKi9cbkFzc2lnblB1YmxpY0lwPzogKFwiRElTQUJMRURcIiB8IFwiRU5BQkxFRFwiKVxufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgY29uc3RyYWludCBvbiB0YXNrIHBsYWNlbWVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBwbGFjZW1lbnQgY29uc3RyYWludHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LWNvbnN0cmFpbnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91J3JlIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudENvbnN0cmFpbnQge1xuLyoqXG4gKiBUaGUgdHlwZSBvZiBjb25zdHJhaW50LiBVc2UgYGBkaXN0aW5jdEluc3RhbmNlYGAgdG8gZW5zdXJlIHRoYXQgZWFjaCB0YXNrIGluIGEgcGFydGljdWxhciBncm91cCBpcyBydW5uaW5nIG9uIGEgZGlmZmVyZW50IGNvbnRhaW5lciBpbnN0YW5jZS4gVXNlIGBgbWVtYmVyT2ZgYCB0byByZXN0cmljdCB0aGUgc2VsZWN0aW9uIHRvIGEgZ3JvdXAgb2YgdmFsaWQgY2FuZGlkYXRlcy5cbiAqL1xuVHlwZTogKFwiZGlzdGluY3RJbnN0YW5jZVwiIHwgXCJtZW1iZXJPZlwiKVxuLyoqXG4gKiBBIGNsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2UgZXhwcmVzc2lvbiB0byBhcHBseSB0byB0aGUgY29uc3RyYWludC4gVGhlIGV4cHJlc3Npb24gY2FuIGhhdmUgYSBtYXhpbXVtIGxlbmd0aCBvZiAyMDAwIGNoYXJhY3RlcnMuIFlvdSBjYW4ndCBzcGVjaWZ5IGFuIGV4cHJlc3Npb24gaWYgdGhlIGNvbnN0cmFpbnQgdHlwZSBpcyBgYGRpc3RpbmN0SW5zdGFuY2VgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2x1c3RlciBxdWVyeSBsYW5ndWFnZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY2x1c3Rlci1xdWVyeS1sYW5ndWFnZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkV4cHJlc3Npb24/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGBgTG9hZEJhbGFuY2VyYGAgcHJvcGVydHkgc3BlY2lmaWVzIGRldGFpbHMgb24gYSBsb2FkIGJhbGFuY2VyIHRoYXQgaXMgdXNlZCB3aXRoIGEgc2VydmljZS5cbiAqICBJZiB0aGUgc2VydmljZSBpcyB1c2luZyB0aGUgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlciwgdGhlIHNlcnZpY2UgaXMgcmVxdWlyZWQgdG8gdXNlIGVpdGhlciBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIE5ldHdvcmsgTG9hZCBCYWxhbmNlci4gV2hlbiB5b3UgYXJlIGNyZWF0aW5nIGFuIEFDRGxvbmcgZGVwbG95bWVudCBncm91cCwgeW91IHNwZWNpZnkgdHdvIHRhcmdldCBncm91cHMgKHJlZmVycmVkIHRvIGFzIGEgYGB0YXJnZXRHcm91cFBhaXJgYCkuIEVhY2ggdGFyZ2V0IGdyb3VwIGJpbmRzIHRvIGEgc2VwYXJhdGUgdGFzayBzZXQgaW4gdGhlIGRlcGxveW1lbnQuIFRoZSBsb2FkIGJhbGFuY2VyIGNhbiBhbHNvIGhhdmUgdXAgdG8gdHdvIGxpc3RlbmVycywgYSByZXF1aXJlZCBsaXN0ZW5lciBmb3IgcHJvZHVjdGlvbiB0cmFmZmljIGFuZCBhbiBvcHRpb25hbCBsaXN0ZW5lciB0aGF0IGFsbG93cyB5b3UgdG8gdGVzdCBuZXcgcmV2aXNpb25zIG9mIHRoZSBzZXJ2aWNlIGJlZm9yZSByb3V0aW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byBpdC5cbiAqICBTZXJ2aWNlcyB3aXRoIHRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSAoZm9yIGV4YW1wbGUsIHRob3NlIHdpdGggdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUpIG9ubHkgc3VwcG9ydCBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VycyBhbmQgTmV0d29yayBMb2FkIEJhbGFuY2Vycy4gQ2xhc3NpYyBMb2FkIEJhbGFuY2VycyBhcmUgbm90IHN1cHBvcnRlZC4gQWxzbywgd2hlbiB5b3UgY3JlYXRlIGFueSB0YXJnZXQgZ3JvdXBzIGZvciB0aGVzZSBzZXJ2aWNlcywgeW91IG11c3QgY2hvb3NlIGBgaXBgYCBhcyB0aGUgdGFyZ2V0IHR5cGUsIG5vdCBgYGluc3RhbmNlYGAuIFRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIG5vdCBhbiBBbWF6b24gRUMyIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlciB7XG4vKipcbiAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRhcmdldCBncm91cCBvciBncm91cHMgYXNzb2NpYXRlZCB3aXRoIGEgc2VydmljZSBvciB0YXNrIHNldC5cbiAqICBBIHRhcmdldCBncm91cCBBUk4gaXMgb25seSBzcGVjaWZpZWQgd2hlbiB1c2luZyBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIE5ldHdvcmsgTG9hZCBCYWxhbmNlci4gXG4gKiAgRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBgYEVDU2BgIGRlcGxveW1lbnQgY29udHJvbGxlciwgeW91IGNhbiBzcGVjaWZ5IG9uZSBvciBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZWdpc3RlcmluZyBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzIHdpdGggYSBzZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9yZWdpc3Rlci1tdWx0aXBsZS10YXJnZXRncm91cHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlciwgeW91J3JlIHJlcXVpcmVkIHRvIGRlZmluZSB0d28gdGFyZ2V0IGdyb3VwcyBmb3IgdGhlIGxvYWQgYmFsYW5jZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JsdWUvZ3JlZW4gZGVwbG95bWVudCB3aXRoIENvZGVEZXBsb3ldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZS1ibHVlZ3JlZW4uaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3VyIHNlcnZpY2UncyB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IGNob29zZSBgYGlwYGAgYXMgdGhlIHRhcmdldCB0eXBlLCBub3QgYGBpbnN0YW5jZWBgLiBEbyB0aGlzIHdoZW4gY3JlYXRpbmcgeW91ciB0YXJnZXQgZ3JvdXBzIGJlY2F1c2UgdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgbm90IGFuIEFtYXpvbiBFQzIgaW5zdGFuY2UuIFRoaXMgbmV0d29yayBtb2RlIGlzIHJlcXVpcmVkIGZvciB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS5cbiAqL1xuVGFyZ2V0R3JvdXBBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGxvYWQgYmFsYW5jZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBvciB0YXNrIHNldC5cbiAqICBJZiB5b3UgYXJlIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgYSBOZXR3b3JrIExvYWQgQmFsYW5jZXIgdGhlIGxvYWQgYmFsYW5jZXIgbmFtZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIG9taXR0ZWQuXG4gKi9cbkxvYWRCYWxhbmNlck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciAoYXMgaXQgYXBwZWFycyBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uKSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci5cbiAqICBZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjb250YWluZXIgbmFtZSB3aGVuIGNvbmZpZ3VyaW5nIHRoZSB0YXJnZXQgZ3JvdXAgZm9yIGFuIEFtYXpvbiBFQ1MgbG9hZCBiYWxhbmNlci5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCBvbiB0aGUgY29udGFpbmVyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLiBUaGlzIHBvcnQgbXVzdCBjb3JyZXNwb25kIHRvIGEgYGBjb250YWluZXJQb3J0YGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgYXJlIHVzaW5nLiBGb3IgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlIGNvbnRhaW5lciBpbnN0YW5jZSB0aGV5J3JlIGxhdW5jaGVkIG9uIG11c3QgYWxsb3cgaW5ncmVzcyB0cmFmZmljIG9uIHRoZSBgYGhvc3RQb3J0YGAgb2YgdGhlIHBvcnQgbWFwcGluZy5cbiAqL1xuQ29udGFpbmVyUG9ydD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzZXJ2aWNlIHRvIGRpc2NvdmVyIGFuZCBjb25uZWN0IHRvIHNlcnZpY2VzLCBhbmQgYmUgZGlzY292ZXJlZCBieSwgYW5kIGNvbm5lY3RlZCBmcm9tLCBvdGhlciBzZXJ2aWNlcyB3aXRoaW4gYSBuYW1lc3BhY2UuXG4gKiAgVGFza3MgdGhhdCBydW4gaW4gYSBuYW1lc3BhY2UgY2FuIHVzZSBzaG9ydCBuYW1lcyB0byBjb25uZWN0IHRvIHNlcnZpY2VzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNhbiBjb25uZWN0IHRvIHNlcnZpY2VzIGFjcm9zcyBhbGwgb2YgdGhlIGNsdXN0ZXJzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNvbm5lY3QgdGhyb3VnaCBhIG1hbmFnZWQgcHJveHkgY29udGFpbmVyIHRoYXQgY29sbGVjdHMgbG9ncyBhbmQgbWV0cmljcyBmb3IgaW5jcmVhc2VkIHZpc2liaWxpdHkuIE9ubHkgdGhlIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBzZXJ2aWNlcyBjcmVhdGUgYXJlIHN1cHBvcnRlZCB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBsaXN0IG9mIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlIG9iamVjdHMuIFRoZXNlIGFyZSBuYW1lcyBhbmQgYWxpYXNlcyAoYWxzbyBrbm93biBhcyBlbmRwb2ludHMpIHRoYXQgYXJlIHVzZWQgYnkgb3RoZXIgQW1hem9uIEVDUyBzZXJ2aWNlcyB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS4gXG4gKiAgVGhpcyBmaWVsZCBpcyBub3QgcmVxdWlyZWQgZm9yIGEgXCJjbGllbnRcIiBBbWF6b24gRUNTIHNlcnZpY2UgdGhhdCdzIGEgbWVtYmVyIG9mIGEgbmFtZXNwYWNlIG9ubHkgdG8gY29ubmVjdCB0byBvdGhlciBzZXJ2aWNlcyB3aXRoaW4gdGhlIG5hbWVzcGFjZS4gQW4gZXhhbXBsZSBvZiB0aGlzIHdvdWxkIGJlIGEgZnJvbnRlbmQgYXBwbGljYXRpb24gdGhhdCBhY2NlcHRzIGluY29taW5nIHJlcXVlc3RzIGZyb20gZWl0aGVyIGEgbG9hZCBiYWxhbmNlciB0aGF0J3MgYXR0YWNoZWQgdG8gdGhlIHNlcnZpY2Ugb3IgYnkgb3RoZXIgbWVhbnMuXG4gKiAgQW4gb2JqZWN0IHNlbGVjdHMgYSBwb3J0IGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiwgYXNzaWducyBhIG5hbWUgZm9yIHRoZSBDTUFQbG9uZyBzZXJ2aWNlLCBhbmQgYSBsaXN0IG9mIGFsaWFzZXMgKGVuZHBvaW50cykgYW5kIHBvcnRzIGZvciBjbGllbnQgYXBwbGljYXRpb25zIHRvIHJlZmVyIHRvIHRoaXMgc2VydmljZS5cbiAqL1xuU2VydmljZXM/OiBTZXJ2aWNlQ29ubmVjdFNlcnZpY2VbXVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byB1c2UgU2VydmljZSBDb25uZWN0IHdpdGggdGhpcyBzZXJ2aWNlLlxuICovXG5FbmFibGVkOiBib29sZWFuXG5Mb2dDb25maWd1cmF0aW9uPzogTG9nQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbmFtZXNwYWNlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQ01BUGxvbmcgbmFtZXNwYWNlIGZvciB1c2Ugd2l0aCBTZXJ2aWNlIENvbm5lY3QuIFRoZSBuYW1lc3BhY2UgbXVzdCBiZSBpbiB0aGUgc2FtZSBBV1MgUmVnaW9uIGFzIHRoZSBBbWF6b24gRUNTIHNlcnZpY2UgYW5kIGNsdXN0ZXIuIFRoZSB0eXBlIG9mIG5hbWVzcGFjZSBkb2Vzbid0IGFmZmVjdCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENNQVBsb25nLCBzZWUgW1dvcmtpbmcgd2l0aCBTZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkLW1hcC9sYXRlc3QvZGcvd29ya2luZy13aXRoLXNlcnZpY2VzLmh0bWwpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTmFtZXNwYWNlPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZSBvYmplY3QgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0U2VydmljZSB7XG5UaW1lb3V0PzogVGltZW91dENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIHBvcnQgbnVtYmVyIGZvciB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5IHRvIGxpc3RlbiBvbi5cbiAqICBVc2UgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgdG8gYnlwYXNzIHRoZSBwcm94eSBmb3IgdHJhZmZpYyBvbiB0aGUgcG9ydCBudW1iZXIgc3BlY2lmaWVkIGluIHRoZSBuYW1lZCBgYHBvcnRNYXBwaW5nYGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBvZiB0aGlzIGFwcGxpY2F0aW9uLCBhbmQgdGhlbiB1c2UgaXQgaW4geW91ciBWUEMgc2VjdXJpdHkgZ3JvdXBzIHRvIGFsbG93IHRyYWZmaWMgaW50byB0aGUgcHJveHkgZm9yIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLlxuICogIEluIGBgYXdzdnBjYGAgbW9kZSBhbmQgRmFyZ2F0ZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGNvbnRhaW5lciBwb3J0IG51bWJlci4gVGhlIGNvbnRhaW5lciBwb3J0IG51bWJlciBpcyBpbiB0aGUgYGBwb3J0TWFwcGluZ2BgIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIEluIGJyaWRnZSBtb2RlLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZXBoZW1lcmFsIHBvcnQgb2YgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eS5cbiAqL1xuSW5ncmVzc1BvcnRPdmVycmlkZT86IG51bWJlclxuLyoqXG4gKiBUaGUgbGlzdCBvZiBjbGllbnQgYWxpYXNlcyBmb3IgdGhpcyBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZS4gWW91IHVzZSB0aGVzZSB0byBhc3NpZ24gbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnQgYXBwbGljYXRpb25zLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2xpZW50IGFsaWFzZXMgdGhhdCB5b3UgY2FuIGhhdmUgaW4gdGhpcyBsaXN0IGlzIDEuXG4gKiAgRWFjaCBhbGlhcyAoXCJlbmRwb2ludFwiKSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGFuZCBwb3J0IG51bWJlciB0aGF0IG90aGVyIEFtYXpvbiBFQ1MgdGFza3MgKFwiY2xpZW50c1wiKSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLlxuICogIEVhY2ggbmFtZSBhbmQgcG9ydCBtYXBwaW5nIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbmFtZXNwYWNlLlxuICogIEZvciBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAsIHlvdSBtdXN0IHByb3ZpZGUgYXQgbGVhc3Qgb25lIGBgY2xpZW50QWxpYXNgYCB3aXRoIG9uZSBgYHBvcnRgYC5cbiAqL1xuQ2xpZW50QWxpYXNlcz86IFNlcnZpY2VDb25uZWN0Q2xpZW50QWxpYXNbXVxuVGxzPzogU2VydmljZUNvbm5lY3RUbHNDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpcyB0aGUgbmFtZSBvZiB0aGUgbmV3IENNQVAgc2VydmljZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBmb3IgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuIFRoaXMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBDTUFQIG5hbWVzcGFjZS4gVGhlIG5hbWUgY2FuIGNvbnRhaW4gdXAgdG8gNjQgY2hhcmFjdGVycy4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgYW5kIGh5cGhlbnMgKC0pLiBUaGUgbmFtZSBjYW4ndCBzdGFydCB3aXRoIGEgaHlwaGVuLlxuICogIElmIHRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBwb3J0IG1hcHBpbmcgbmFtZSBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZCBpbiBgYHBvcnROYW1lLm5hbWVzcGFjZWBgLlxuICovXG5EaXNjb3ZlcnlOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBgYHBvcnROYW1lYGAgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIGBgcG9ydE1hcHBpbmdzYGAgZnJvbSBhbGwgdGhlIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBvZiB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqL1xuUG9ydE5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBjb25maWd1cmVkIHRpbWVvdXRzIGZvciBTZXJ2aWNlIENvbm5lY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGltZW91dENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgd2FpdGluZyBmb3IgdGhlIHVwc3RyZWFtIHRvIHJlc3BvbmQgd2l0aCBhIGNvbXBsZXRlIHJlc3BvbnNlIHBlciByZXF1ZXN0LiBBIHZhbHVlIG9mIGBgMGBgIGNhbiBiZSBzZXQgdG8gZGlzYWJsZSBgYHBlclJlcXVlc3RUaW1lb3V0YGAuIGBgcGVyUmVxdWVzdFRpbWVvdXRgYCBjYW4gb25seSBiZSBzZXQgaWYgU2VydmljZSBDb25uZWN0IGBgYXBwUHJvdG9jb2xgYCBpc24ndCBgYFRDUGBgLiBPbmx5IGBgaWRsZVRpbWVvdXRgYCBpcyBhbGxvd2VkIGZvciBgYFRDUGBgYGBhcHBQcm90b2NvbGBgLlxuICovXG5QZXJSZXF1ZXN0VGltZW91dFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgYSBjb25uZWN0aW9uIHdpbGwgc3RheSBhY3RpdmUgd2hpbGUgaWRsZS4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBpZGxlVGltZW91dGBgLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBIVFRQYGAvYGBIVFRQMmBgL2BgR1JQQ2BgIGlzIDUgbWludXRlcy5cbiAqICBUaGUgYGBpZGxlVGltZW91dGBgIGRlZmF1bHQgZm9yIGBgVENQYGAgaXMgMSBob3VyLlxuICovXG5JZGxlVGltZW91dFNlY29uZHM/OiBudW1iZXJcbn1cbi8qKlxuICogRWFjaCBhbGlhcyAoXCJlbmRwb2ludFwiKSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGFuZCBwb3J0IG51bWJlciB0aGF0IG90aGVyIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RDbGllbnRBbGlhcyB7XG4vKipcbiAqIFRoZSBgYGRuc05hbWVgYCBpcyB0aGUgbmFtZSB0aGF0IHlvdSB1c2UgaW4gdGhlIGFwcGxpY2F0aW9ucyBvZiBjbGllbnQgdGFza3MgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFRoZSBuYW1lIG11c3QgYmUgYSB2YWxpZCBETlMgbmFtZSBidXQgZG9lc24ndCBuZWVkIHRvIGJlIGZ1bGx5LXF1YWxpZmllZC4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgdXAgdG8gMTI3IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGh5cGhlbnMgKC0pLCBhbmQgcGVyaW9kcyAoLikuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYGRpc2NvdmVyeU5hbWUubmFtZXNwYWNlYGAgaXMgdXNlZC4gSWYgdGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzbid0IHNwZWNpZmllZCwgdGhlIHBvcnQgbWFwcGluZyBuYW1lIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkIGluIGBgcG9ydE5hbWUubmFtZXNwYWNlYGAuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIG5hbWUgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIGEgZmV3IGNvbW1vbiBuYW1lcyBhcmUgYGBkYXRhYmFzZWBgLCBgYGRiYGAsIG9yIHRoZSBsb3dlcmNhc2UgbmFtZSBvZiBhIGRhdGFiYXNlLCBzdWNoIGFzIGBgbXlzcWxgYCBvciBgYHJlZGlzYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRG5zTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlzdGVuaW5nIHBvcnQgbnVtYmVyIGZvciB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LiBUaGlzIHBvcnQgaXMgYXZhaWxhYmxlIGluc2lkZSBvZiBhbGwgb2YgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2FtZSBuYW1lc3BhY2UuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIHBvcnQgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Qb3J0OiBudW1iZXJcbn1cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0VGxzQ29uZmlndXJhdGlvbiB7XG5Jc3N1ZXJDZXJ0aWZpY2F0ZUF1dGhvcml0eTogU2VydmljZUNvbm5lY3RUbHNDZXJ0aWZpY2F0ZUF1dGhvcml0eVxuLyoqXG4gKiBUaGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5LlxuICovXG5LbXNLZXk/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBTZXJ2aWNlIENvbm5lY3QgVExTLlxuICovXG5Sb2xlQXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBzaWduZXIgY2VydGlmaWNhdGUgYXV0aG9yaXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0VGxzQ2VydGlmaWNhdGVBdXRob3JpdHkge1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgY2VydGlmaWNhdGUuXG4gKi9cbkF3c1BjYUF1dGhvcml0eUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBMb2dDb25maWdgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1sb2ctZHJpdmVyYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgQnkgZGVmYXVsdCwgY29udGFpbmVycyB1c2UgdGhlIHNhbWUgbG9nZ2luZyBkcml2ZXIgdGhhdCB0aGUgRG9ja2VyIGRhZW1vbiB1c2VzLiBIb3dldmVyLCB0aGUgY29udGFpbmVyIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCBsb2dnaW5nIGRyaXZlciB0aGFuIHRoZSBEb2NrZXIgZGFlbW9uIGJ5IHNwZWNpZnlpbmcgYSBsb2cgZHJpdmVyIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGNvbnRhaW5lciBkZWZpbml0aW9uLlxuICogIFVuZGVyc3RhbmQgdGhlIGZvbGxvd2luZyB3aGVuIHNwZWNpZnlpbmcgYSBsb2cgY29uZmlndXJhdGlvbiBmb3IgeW91ciBjb250YWluZXJzLlxuICogICArICBBbWF6b24gRUNTIGN1cnJlbnRseSBzdXBwb3J0cyBhIHN1YnNldCBvZiB0aGUgbG9nZ2luZyBkcml2ZXJzIGF2YWlsYWJsZSB0byB0aGUgRG9ja2VyIGRhZW1vbi4gQWRkaXRpb25hbCBsb2cgZHJpdmVycyBtYXkgYmUgYXZhaWxhYmxlIGluIGZ1dHVyZSByZWxlYXNlcyBvZiB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQuXG4gKiAgRm9yIHRhc2tzIG9uIEZBUkdBVEVsb25nLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgdGFza3MgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBmbHVlbnRkYGAsIGBgZ2VsZmBgLCBgYGpzb24tZmlsZWBgLCBgYGpvdXJuYWxkYGAsYGBzeXNsb2dgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICAgKyAgVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE4IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLlxuICogICArICBGb3IgdGFza3MgdGhhdCBhcmUgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgbXVzdCByZWdpc3RlciB0aGUgYXZhaWxhYmxlIGxvZ2dpbmcgZHJpdmVycyB3aXRoIHRoZSBgYEVDU19BVkFJTEFCTEVfTE9HR0lOR19EUklWRVJTYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgYmVmb3JlIGNvbnRhaW5lcnMgcGxhY2VkIG9uIHRoYXQgaW5zdGFuY2UgY2FuIHVzZSB0aGVzZSBsb2cgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBjb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtYWdlbnQtY29uZmlnLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgKyAgRm9yIHRhc2tzIHRoYXQgYXJlIG9uIEZBUkdBVEVsb25nLCBiZWNhdXNlIHlvdSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSB5b3VyIHRhc2tzIGFyZSBob3N0ZWQgb24sIGFueSBhZGRpdGlvbmFsIHNvZnR3YXJlIG5lZWRlZCBtdXN0IGJlIGluc3RhbGxlZCBvdXRzaWRlIG9mIHRoZSB0YXNrLiBGb3IgZXhhbXBsZSwgdGhlIEZsdWVudGQgb3V0cHV0IGFnZ3JlZ2F0b3JzIG9yIGEgcmVtb3RlIGhvc3QgcnVubmluZyBMb2dzdGFzaCB0byBzZW5kIEdlbGYgbG9ncyB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIHNlY3JldHMgdG8gcGFzcyB0byB0aGUgbG9nIGNvbmZpZ3VyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgc2Vuc2l0aXZlIGRhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5TZWNyZXRPcHRpb25zPzogU2VjcmV0W11cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZW5kIHRvIHRoZSBsb2cgZHJpdmVyLlxuICogIFRoZSBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSBkZXBlbmQgb24gdGhlIGxvZyBkcml2ZXIuIFNvbWUgb2YgdGhlIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IHdoZW4geW91IHVzZSB0aGUgYGBhd3Nsb2dzYGAgbG9nIGRyaXZlciB0byByb3V0ZSBsb2dzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIGluY2x1ZGUgdGhlIGZvbGxvd2luZzpcbiAqICAgKyBhd3Nsb2dzLWNyZWF0ZS1ncm91cCBSZXF1aXJlZDogTm8gU3BlY2lmeSB3aGV0aGVyIHlvdSB3YW50IHRoZSBsb2cgZ3JvdXAgdG8gYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LiBJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGZhbHNlLiBZb3VyIElBTSBwb2xpY3kgbXVzdCBpbmNsdWRlIHRoZSBsb2dzOkNyZWF0ZUxvZ0dyb3VwIHBlcm1pc3Npb24gYmVmb3JlIHlvdSBhdHRlbXB0IHRvIHVzZSBhd3Nsb2dzLWNyZWF0ZS1ncm91cC4gKyBhd3Nsb2dzLXJlZ2lvbiBSZXF1aXJlZDogWWVzIFNwZWNpZnkgdGhlIFJlZ2lvbiB0aGF0IHRoZSBhd3Nsb2dzIGxvZyBkcml2ZXIgaXMgdG8gc2VuZCB5b3VyIERvY2tlciBsb2dzIHRvLiBZb3UgY2FuIGNob29zZSB0byBzZW5kIGFsbCBvZiB5b3VyIGxvZ3MgZnJvbSBjbHVzdGVycyBpbiBkaWZmZXJlbnQgUmVnaW9ucyB0byBhIHNpbmdsZSByZWdpb24gaW4gQ2xvdWRXYXRjaCBMb2dzLiBUaGlzIGlzIHNvIHRoYXQgdGhleSdyZSBhbGwgdmlzaWJsZSBpbiBvbmUgbG9jYXRpb24uIE90aGVyd2lzZSwgeW91IGNhbiBzZXBhcmF0ZSB0aGVtIGJ5IFJlZ2lvbiBmb3IgbW9yZSBncmFudWxhcml0eS4gTWFrZSBzdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBsb2cgZ3JvdXAgZXhpc3RzIGluIHRoZSBSZWdpb24gdGhhdCB5b3Ugc3BlY2lmeSB3aXRoIHRoaXMgb3B0aW9uLiArIGF3c2xvZ3MtZ3JvdXAgUmVxdWlyZWQ6IFllcyBNYWtlIHN1cmUgdG8gc3BlY2lmeSBhIGxvZyBncm91cCB0aGF0IHRoZSBhd3Nsb2dzIGxvZyBkcml2ZXIgc2VuZHMgaXRzIGxvZyBzdHJlYW1zIHRvLiArIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBSZXF1aXJlZDogWWVzLCB3aGVuIHVzaW5nIEZhcmdhdGUuT3B0aW9uYWwgd2hlbiB1c2luZyBFQzIuIFVzZSB0aGUgYXdzbG9ncy1zdHJlYW0tcHJlZml4IG9wdGlvbiB0byBhc3NvY2lhdGUgYSBsb2cgc3RyZWFtIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXgsIHRoZSBjb250YWluZXIgbmFtZSwgYW5kIHRoZSBJRCBvZiB0aGUgQW1hem9uIEVDUyB0YXNrIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLiBJZiB5b3Ugc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLCB0aGVuIHRoZSBsb2cgc3RyZWFtIHRha2VzIHRoZSBmb3JtYXQgcHJlZml4LW5hbWUvY29udGFpbmVyLW5hbWUvZWNzLXRhc2staWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24sIHRoZW4gdGhlIGxvZyBzdHJlYW0gaXMgbmFtZWQgYWZ0ZXIgdGhlIGNvbnRhaW5lciBJRCB0aGF0J3MgYXNzaWduZWQgYnkgdGhlIERvY2tlciBkYWVtb24gb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZS4gQmVjYXVzZSBpdCdzIGRpZmZpY3VsdCB0byB0cmFjZSBsb2dzIGJhY2sgdG8gdGhlIGNvbnRhaW5lciB0aGF0IHNlbnQgdGhlbSB3aXRoIGp1c3QgdGhlIERvY2tlciBjb250YWluZXIgSUQgKHdoaWNoIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UpLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3Ugc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLiBGb3IgQW1hem9uIEVDUyBzZXJ2aWNlcywgeW91IGNhbiB1c2UgdGhlIHNlcnZpY2UgbmFtZSBhcyB0aGUgcHJlZml4LiBEb2luZyBzbywgeW91IGNhbiB0cmFjZSBsb2cgc3RyZWFtcyB0byB0aGUgc2VydmljZSB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0bywgdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0aGF0IHNlbnQgdGhlbSwgYW5kIHRoZSBJRCBvZiB0aGUgdGFzayB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0by4gWW91IG11c3Qgc3BlY2lmeSBhIHN0cmVhbS1wcmVmaXggZm9yIHlvdXIgbG9ncyB0byBoYXZlIHlvdXIgbG9ncyBhcHBlYXIgaW4gdGhlIExvZyBwYW5lIHdoZW4gdXNpbmcgdGhlIEFtYXpvbiBFQ1MgY29uc29sZS4gKyBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBSZXF1aXJlZDogTm8gVGhpcyBvcHRpb24gZGVmaW5lcyBhIG11bHRpbGluZSBzdGFydCBwYXR0ZXJuIGluIFB5dGhvbiBzdHJmdGltZSBmb3JtYXQuIEEgbG9nIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybiBhbmQgYW55IGZvbGxvd2luZyBsaW5lcyB0aGF0IGRvbuKAmXQgbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZSBtYXRjaGVkIGxpbmUgaXMgdGhlIGRlbGltaXRlciBiZXR3ZWVuIGxvZyBtZXNzYWdlcy4gT25lIGV4YW1wbGUgb2YgYSB1c2UgY2FzZSBmb3IgdXNpbmcgdGhpcyBmb3JtYXQgaXMgZm9yIHBhcnNpbmcgb3V0cHV0IHN1Y2ggYXMgYSBzdGFjayBkdW1wLCB3aGljaCBtaWdodCBvdGhlcndpc2UgYmUgbG9nZ2VkIGluIG11bHRpcGxlIGVudHJpZXMuIFRoZSBjb3JyZWN0IHBhdHRlcm4gYWxsb3dzIGl0IHRvIGJlIGNhcHR1cmVkIGluIGEgc2luZ2xlIGVudHJ5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0LiBZb3UgY2Fubm90IGNvbmZpZ3VyZSBib3RoIHRoZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBhbmQgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBvcHRpb25zLiBNdWx0aWxpbmUgbG9nZ2luZyBwZXJmb3JtcyByZWd1bGFyIGV4cHJlc3Npb24gcGFyc2luZyBhbmQgbWF0Y2hpbmcgb2YgYWxsIGxvZyBtZXNzYWdlcy4gVGhpcyBtaWdodCBoYXZlIGEgbmVnYXRpdmUgaW1wYWN0IG9uIGxvZ2dpbmcgcGVyZm9ybWFuY2UuICsgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBSZXF1aXJlZDogTm8gVGhpcyBvcHRpb24gZGVmaW5lcyBhIG11bHRpbGluZSBzdGFydCBwYXR0ZXJuIHRoYXQgdXNlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnkgZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGhlIG1hdGNoZWQgbGluZSBpcyB0aGUgZGVsaW1pdGVyIGJldHdlZW4gbG9nIG1lc3NhZ2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4uIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgaXMgYWxzbyBjb25maWd1cmVkLiBZb3UgY2Fubm90IGNvbmZpZ3VyZSBib3RoIHRoZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBhbmQgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBvcHRpb25zLiBNdWx0aWxpbmUgbG9nZ2luZyBwZXJmb3JtcyByZWd1bGFyIGV4cHJlc3Npb24gcGFyc2luZyBhbmQgbWF0Y2hpbmcgb2YgYWxsIGxvZyBtZXNzYWdlcy4gVGhpcyBtaWdodCBoYXZlIGEgbmVnYXRpdmUgaW1wYWN0IG9uIGxvZ2dpbmcgcGVyZm9ybWFuY2UuIFxuICogIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcHBseSB0byBhbGwgc3VwcG9ydGVkIGxvZyBkcml2ZXJzLlxuICogICArIG1vZGUgUmVxdWlyZWQ6IE5vIFZhbGlkIHZhbHVlczogbm9uLWJsb2NraW5nIHwgYmxvY2tpbmcgVGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgZGVsaXZlcnkgbW9kZSBvZiBsb2cgbWVzc2FnZXMgZnJvbSB0aGUgY29udGFpbmVyIHRvIHRoZSBsb2cgZHJpdmVyIHNwZWNpZmllZCB1c2luZyBsb2dEcml2ZXIuIFRoZSBkZWxpdmVyeSBtb2RlIHlvdSBjaG9vc2UgYWZmZWN0cyBhcHBsaWNhdGlvbiBhdmFpbGFiaWxpdHkgd2hlbiB0aGUgZmxvdyBvZiBsb2dzIGZyb20gY29udGFpbmVyIGlzIGludGVycnVwdGVkLiBJZiB5b3UgdXNlIHRoZSBibG9ja2luZyBtb2RlIGFuZCB0aGUgZmxvdyBvZiBsb2dzIGlzIGludGVycnVwdGVkLCBjYWxscyBmcm9tIGNvbnRhaW5lciBjb2RlIHRvIHdyaXRlIHRvIHRoZSBzdGRvdXQgYW5kIHN0ZGVyciBzdHJlYW1zIHdpbGwgYmxvY2suIFRoZSBsb2dnaW5nIHRocmVhZCBvZiB0aGUgYXBwbGljYXRpb24gd2lsbCBibG9jayBhcyBhIHJlc3VsdC4gVGhpcyBtYXkgY2F1c2UgdGhlIGFwcGxpY2F0aW9uIHRvIGJlY29tZSB1bnJlc3BvbnNpdmUgYW5kIGxlYWQgdG8gY29udGFpbmVyIGhlYWx0aGNoZWNrIGZhaWx1cmUuIElmIHlvdSB1c2UgdGhlIG5vbi1ibG9ja2luZyBtb2RlLCB0aGUgY29udGFpbmVyJ3MgbG9ncyBhcmUgaW5zdGVhZCBzdG9yZWQgaW4gYW4gaW4tbWVtb3J5IGludGVybWVkaWF0ZSBidWZmZXIgY29uZmlndXJlZCB3aXRoIHRoZSBtYXgtYnVmZmVyLXNpemUgb3B0aW9uLiBUaGlzIHByZXZlbnRzIHRoZSBhcHBsaWNhdGlvbiBmcm9tIGJlY29taW5nIHVucmVzcG9uc2l2ZSB3aGVuIGxvZ3MgY2Fubm90IGJlIHNlbnQuIFdlIHJlY29tbWVuZCB1c2luZyB0aGlzIG1vZGUgaWYgeW91IHdhbnQgdG8gZW5zdXJlIHNlcnZpY2UgYXZhaWxhYmlsaXR5IGFuZCBhcmUgb2theSB3aXRoIHNvbWUgbG9nIGxvc3MuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUHJldmVudGluZyBsb2cgbG9zcyB3aXRoIG5vbi1ibG9ja2luZyBtb2RlIGluIHRoZSBhd3Nsb2dzIGNvbnRhaW5lciBsb2cgZHJpdmVyLiBZb3UgY2FuIHNldCBhIGRlZmF1bHQgbW9kZSBmb3IgYWxsIGNvbnRhaW5lcnMgaW4gYSBzcGVjaWZpYyBSZWdpb24gYnkgdXNpbmcgdGhlIGRlZmF1bHRMb2dEcml2ZXJNb2RlIGFjY291bnQgc2V0dGluZy4gSWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIG1vZGUgb3B0aW9uIG9yIGNvbmZpZ3VyZSB0aGUgYWNjb3VudCBzZXR0aW5nLCBBbWF6b24gRUNTIHdpbGwgZGVmYXVsdCB0byB0aGUgYmxvY2tpbmcgbW9kZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjY291bnQgc2V0dGluZywgc2VlIERlZmF1bHQgbG9nIGRyaXZlciBtb2RlIGluIHRoZSBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUuIE9uIEp1bmUgMjUsIDIwMjUsIEFtYXpvbiBFQ1MgaXMgY2hhbmdpbmcgdGhlIGRlZmF1bHQgbG9nIGRyaXZlciBtb2RlIGZyb20gYmxvY2tpbmcgdG8gbm9uLWJsb2NraW5nIHRvIHByaW9yaXRpemUgdGFzayBhdmFpbGFiaWxpdHkgb3ZlciBsb2dnaW5nLiBUbyBjb250aW51ZSB1c2luZyB0aGUgYmxvY2tpbmcgbW9kZSBhZnRlciB0aGlzIGNoYW5nZSwgZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6IFNldCB0aGUgbW9kZSBvcHRpb24gaW4geW91ciBjb250YWluZXIgZGVmaW5pdGlvbidzIGxvZ0NvbmZpZ3VyYXRpb24gYXMgYmxvY2tpbmcuIFNldCB0aGUgZGVmYXVsdExvZ0RyaXZlck1vZGUgYWNjb3VudCBzZXR0aW5nIHRvIGJsb2NraW5nLiArIG1heC1idWZmZXItc2l6ZSBSZXF1aXJlZDogTm8gRGVmYXVsdCB2YWx1ZTogMW0gV2hlbiBub24tYmxvY2tpbmcgbW9kZSBpcyB1c2VkLCB0aGUgbWF4LWJ1ZmZlci1zaXplIGxvZyBvcHRpb24gY29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0aGF0J3MgdXNlZCBmb3IgaW50ZXJtZWRpYXRlIG1lc3NhZ2Ugc3RvcmFnZS4gTWFrZSBzdXJlIHRvIHNwZWNpZnkgYW4gYWRlcXVhdGUgYnVmZmVyIHNpemUgYmFzZWQgb24geW91ciBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgYnVmZmVyIGZpbGxzIHVwLCBmdXJ0aGVyIGxvZ3MgY2Fubm90IGJlIHN0b3JlZC4gTG9ncyB0aGF0IGNhbm5vdCBiZSBzdG9yZWQgYXJlIGxvc3QuIFxuICogIFRvIHJvdXRlIGxvZ3MgdXNpbmcgdGhlIGBgc3BsdW5rYGAgbG9nIHJvdXRlciwgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGBgc3BsdW5rLXRva2VuYGAgYW5kIGEgYGBzcGx1bmstdXJsYGAuXG4gKiAgV2hlbiB5b3UgdXNlIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIHJvdXRlciB0byByb3V0ZSBsb2dzIHRvIGFuIEFXUyBTZXJ2aWNlIG9yIEFXUyBQYXJ0bmVyIE5ldHdvcmsgZGVzdGluYXRpb24gZm9yIGxvZyBzdG9yYWdlIGFuZCBhbmFseXRpY3MsIHlvdSBjYW4gc2V0IHRoZSBgYGxvZy1kcml2ZXItYnVmZmVyLWxpbWl0YGAgb3B0aW9uIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgYXJlIGJ1ZmZlcmVkIGluIG1lbW9yeSwgYmVmb3JlIGJlaW5nIHNlbnQgdG8gdGhlIGxvZyByb3V0ZXIgY29udGFpbmVyLiBJdCBjYW4gaGVscCB0byByZXNvbHZlIHBvdGVudGlhbCBsb2cgbG9zcyBpc3N1ZSBiZWNhdXNlIGhpZ2ggdGhyb3VnaHB1dCBtaWdodCByZXN1bHQgaW4gbWVtb3J5IHJ1bm5pbmcgb3V0IGZvciB0aGUgYnVmZmVyIGluc2lkZSBvZiBEb2NrZXIuXG4gKiAgT3RoZXIgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB1c2luZyBgYGF3c2ZpcmVsZW5zYGAgdG8gcm91dGUgbG9ncyBkZXBlbmQgb24gdGhlIGRlc3RpbmF0aW9uLiBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gRGF0YSBGaXJlaG9zZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBBV1MgUmVnaW9uIHdpdGggYGByZWdpb25gYCBhbmQgYSBuYW1lIGZvciB0aGUgbG9nIHN0cmVhbSB3aXRoIGBgZGVsaXZlcnlfc3RyZWFtYGAuXG4gKiAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIEtpbmVzaXMgRGF0YSBTdHJlYW1zLCB5b3UgY2FuIHNwZWNpZnkgYW4gQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgZGF0YSBzdHJlYW0gbmFtZSB3aXRoIGBgc3RyZWFtYGAuXG4gKiAgIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UsIHlvdSBjYW4gc3BlY2lmeSBvcHRpb25zIGxpa2UgYGBOYW1lYGAsIGBgSG9zdGBgIChPcGVuU2VhcmNoIFNlcnZpY2UgZW5kcG9pbnQgd2l0aG91dCBwcm90b2NvbCksIGBgUG9ydGBgLCBgYEluZGV4YGAsIGBgVHlwZWBgLCBgYEF3c19hdXRoYGAsIGBgQXdzX3JlZ2lvbmBgLCBgYFN1cHByZXNzX1R5cGVfTmFtZWBgLCBhbmQgYGB0bHNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5kZXIgdGhlIGhvb2Q6IEZpcmVMZW5zIGZvciBBbWF6b24gRUNTIFRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29udGFpbmVycy91bmRlci10aGUtaG9vZC1maXJlbGVucy1mb3ItYW1hem9uLWVjcy10YXNrcy8pLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBTMywgeW91IGNhbiBzcGVjaWZ5IHRoZSBidWNrZXQgdXNpbmcgdGhlIGBgYnVja2V0YGAgb3B0aW9uLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBgYHJlZ2lvbmBgLCBgYHRvdGFsX2ZpbGVfc2l6ZWBgLCBgYHVwbG9hZF90aW1lb3V0YGAsIGFuZCBgYHVzZV9wdXRfb2JqZWN0YGAgYXMgb3B0aW9ucy5cbiAqICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTkgb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuIFRvIGNoZWNrIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSB2ZXJzaW9uIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLCBsb2cgaW4gdG8geW91ciBjb250YWluZXIgaW5zdGFuY2UgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6IGBgc3VkbyBkb2NrZXIgdmVyc2lvbiAtLWZvcm1hdCAne3suU2VydmVyLkFQSVZlcnNpb259fSdgYFxuICovXG5PcHRpb25zPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsfVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgZHJpdmVyIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lci5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCwgYGBzeXNsb2dgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3Nsb2dzYGAgbG9nIGRyaXZlciwgc2VlIFtTZW5kIEFtYXpvbiBFQ1MgbG9ncyB0byBDbG91ZFdhdGNoXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19hd3Nsb2dzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gYW4gc2VydmljZSBvciBQYXJ0bmVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19maXJlbGVucy5odG1sKS5cbiAqICAgSWYgeW91IGhhdmUgYSBjdXN0b20gZHJpdmVyIHRoYXQgaXNuJ3QgbGlzdGVkLCB5b3UgY2FuIGZvcmsgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IHByb2plY3QgdGhhdCdzIFthdmFpbGFibGUgb24gR2l0SHViXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hbWF6b24tZWNzLWFnZW50KSBhbmQgY3VzdG9taXplIGl0IHRvIHdvcmsgd2l0aCB0aGF0IGRyaXZlci4gV2UgZW5jb3VyYWdlIHlvdSB0byBzdWJtaXQgcHVsbCByZXF1ZXN0cyBmb3IgY2hhbmdlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgaW5jbHVkZWQuIEhvd2V2ZXIsIHdlIGRvbid0IGN1cnJlbnRseSBwcm92aWRlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgbW9kaWZpZWQgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuXG4gKi9cbkxvZ0RyaXZlcj86IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHlvdXIgY29udGFpbmVyLiBTZWNyZXRzIGNhbiBiZSBleHBvc2VkIHRvIGEgY29udGFpbmVyIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqICAgKyAgVG8gaW5qZWN0IHNlbnNpdGl2ZSBkYXRhIGludG8geW91ciBjb250YWluZXJzIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcywgdXNlIHRoZSBgYHNlY3JldHNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgICsgIFRvIHJlZmVyZW5jZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIGxvZyBjb25maWd1cmF0aW9uIG9mIGEgY29udGFpbmVyLCB1c2UgdGhlIGBgc2VjcmV0T3B0aW9uc2BgIGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlci5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0IHtcbi8qKlxuICogVGhlIHNlY3JldCB0byBleHBvc2UgdG8gdGhlIGNvbnRhaW5lci4gVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIGVpdGhlciB0aGUgZnVsbCBBUk4gb2YgdGhlIEFTTWxvbmcgc2VjcmV0IG9yIHRoZSBmdWxsIEFSTiBvZiB0aGUgcGFyYW1ldGVyIGluIHRoZSBTU00gUGFyYW1ldGVyIFN0b3JlLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWlyZSBJQU1sb25nIHBlcm1pc3Npb25zLCBzZWUgW1JlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIEVDUyBzZWNyZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLXNlY3JldHMuaHRtbCNzZWNyZXRzLWlhbSkgKGZvciBTZWNyZXRzIE1hbmFnZXIpIG9yIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1wYXJhbWV0ZXJzLmh0bWwpIChmb3IgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBzdG9yZSkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZSBwYXJhbWV0ZXIgZXhpc3RzIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB0aGUgdGFzayB5b3UncmUgbGF1bmNoaW5nLCB0aGVuIHlvdSBjYW4gdXNlIGVpdGhlciB0aGUgZnVsbCBBUk4gb3IgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLiBJZiB0aGUgcGFyYW1ldGVyIGV4aXN0cyBpbiBhIGRpZmZlcmVudCBSZWdpb24sIHRoZW4gdGhlIGZ1bGwgQVJOIG11c3QgYmUgc3BlY2lmaWVkLlxuICovXG5WYWx1ZUZyb206IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0LlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgc2VydmljZSB0aGF0IGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRhcmdldCBncm91cChzKSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNMYXR0aWNlQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuVGFyZ2V0R3JvdXBBcm46IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcG9ydCBtYXBwaW5nIHRvIHJlZ2lzdGVyIGluIHRoZSBWUEMgTGF0dGljZSB0YXJnZXQgZ3JvdXAuIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGBgcG9ydE1hcHBpbmdgYCB5b3UgZGVmaW5lZCBpbiB5b3VyIHRhc2sgZGVmaW5pdGlvbi5cbiAqL1xuUG9ydE5hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgdGhlIEFtYXpvbiBFQ1PigKggaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGUgdGhhdCBpcyB1c2VkIHRvIG1hbmFnZSB5b3VyIFZQQyBMYXR0aWNlIGluZnJhc3RydWN0dXJlLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLiBJZiBubyBkZXBsb3ltZW50IGNvbnRyb2xsZXIgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYEVDU2BgIGlzIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbnRyb2xsZXIge1xuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGUgdG8gdXNlLiBUaGVyZSBhcmUgdGhyZWUgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGVzIGF2YWlsYWJsZTpcbiAqICAgKyBFQ1MgVGhlIHJvbGxpbmcgdXBkYXRlIChFQ1MpIGRlcGxveW1lbnQgdHlwZSBpbnZvbHZlcyByZXBsYWNpbmcgdGhlIGN1cnJlbnQgcnVubmluZyB2ZXJzaW9uIG9mIHRoZSBjb250YWluZXIgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24uIFRoZSBudW1iZXIgb2YgY29udGFpbmVycyBBbWF6b24gRUNTIGFkZHMgb3IgcmVtb3ZlcyBmcm9tIHRoZSBzZXJ2aWNlIGR1cmluZyBhIHJvbGxpbmcgdXBkYXRlIGlzIGNvbnRyb2xsZWQgYnkgYWRqdXN0aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBoZWFsdGh5IHRhc2tzIGFsbG93ZWQgZHVyaW5nIGEgc2VydmljZSBkZXBsb3ltZW50LCBhcyBzcGVjaWZpZWQgaW4gdGhlIERlcGxveW1lbnRDb25maWd1cmF0aW9uLiArIENPREVfREVQTE9ZIFRoZSBibHVlL2dyZWVuIChDT0RFX0RFUExPWSkgZGVwbG95bWVudCB0eXBlIHVzZXMgdGhlIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBtb2RlbCBwb3dlcmVkIGJ5ICwgd2hpY2ggYWxsb3dzIHlvdSB0byB2ZXJpZnkgYSBuZXcgZGVwbG95bWVudCBvZiBhIHNlcnZpY2UgYmVmb3JlIHNlbmRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LiArIEVYVEVSTkFMIFRoZSBleHRlcm5hbCAoRVhURVJOQUwpIGRlcGxveW1lbnQgdHlwZSBlbmFibGVzIHlvdSB0byB1c2UgYW55IHRoaXJkLXBhcnR5IGRlcGxveW1lbnQgY29udHJvbGxlciBmb3IgZnVsbCBjb250cm9sIG92ZXIgdGhlIGRlcGxveW1lbnQgcHJvY2VzcyBmb3IgYW4gQW1hem9uIEVDUyBzZXJ2aWNlLlxuICovXG5UeXBlPzogKFwiQ09ERV9ERVBMT1lcIiB8IFwiRUNTXCIgfCBcIkVYVEVSTkFMXCIpXG59XG4vKipcbiAqIE9wdGlvbmFsIGRlcGxveW1lbnQgcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgaG93IG1hbnkgdGFza3MgcnVuIGR1cmluZyB0aGUgZGVwbG95bWVudCBhbmQgdGhlIG9yZGVyaW5nIG9mIHN0b3BwaW5nIGFuZCBzdGFydGluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q29uZmlndXJhdGlvbiB7XG5BbGFybXM/OiBEZXBsb3ltZW50QWxhcm1zXG5EZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXI/OiBEZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXJcbi8qKlxuICogSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLCB0aGUgYGBtYXhpbXVtUGVyY2VudGBgIHBhcmFtZXRlciByZXByZXNlbnRzIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBhcmUgYWxsb3dlZCBpbiB0aGUgYGBSVU5OSU5HYGAgb3IgYGBQRU5ESU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikuIFRoaXMgcGFyYW1ldGVyIGVuYWJsZXMgeW91IHRvIGRlZmluZSB0aGUgZGVwbG95bWVudCBiYXRjaCBzaXplLiBGb3IgZXhhbXBsZSwgaWYgeW91ciBzZXJ2aWNlIGlzIHVzaW5nIHRoZSBgYFJFUExJQ0FgYCBzZXJ2aWNlIHNjaGVkdWxlciBhbmQgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBvZiAyMDAlLCB0aGUgc2NoZWR1bGVyIG1heSBzdGFydCBmb3VyIG5ldyB0YXNrcyBiZWZvcmUgc3RvcHBpbmcgdGhlIGZvdXIgb2xkZXIgdGFza3MgKHByb3ZpZGVkIHRoYXQgdGhlIGNsdXN0ZXIgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIGRvIHRoaXMgYXJlIGF2YWlsYWJsZSkuIFRoZSBkZWZhdWx0IGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHVzaW5nIHRoZSBgYFJFUExJQ0FgYCBzZXJ2aWNlIHNjaGVkdWxlciBpcyAyMDAlLlxuICogIFRoZSBBbWF6b24gRUNTIHNjaGVkdWxlciB1c2VzIHRoaXMgcGFyYW1ldGVyIHRvIHJlcGxhY2UgdW5oZWFsdGh5IHRhc2tzIGJ5IHN0YXJ0aW5nIHJlcGxhY2VtZW50IHRhc2tzIGZpcnN0IGFuZCB0aGVuIHN0b3BwaW5nIHRoZSB1bmhlYWx0aHkgdGFza3MsIGFzIGxvbmcgYXMgY2x1c3RlciByZXNvdXJjZXMgZm9yIHN0YXJ0aW5nIHJlcGxhY2VtZW50IHRhc2tzIGFyZSBhdmFpbGFibGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgc2NoZWR1bGVyIHJlcGxhY2VzIHVuaGVhbHRoeSB0YXNrcywgc2VlIFtBbWF6b24gRUNTIHNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcywgYW5kIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdGhhdCB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaGFzIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUuXG4gKiAgIElmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzLCBhbmQgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1heGltdW0gcGVyY2VudCB2YWx1ZSBpcyBub3QgdXNlZC4gVGhlIHZhbHVlIGlzIHN0aWxsIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1heGltdW1QZXJjZW50PzogbnVtYmVyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgcmVwcmVzZW50cyBhIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBtdXN0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZXBsb3kgd2l0aG91dCB1c2luZyBhZGRpdGlvbmFsIGNsdXN0ZXIgY2FwYWNpdHkuIEZvciBleGFtcGxlLCBpZiB5b3VyIHNlcnZpY2UgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgb2YgNTAlLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgbWF5IHN0b3AgdHdvIGV4aXN0aW5nIHRhc2tzIHRvIGZyZWUgdXAgY2x1c3RlciBjYXBhY2l0eSBiZWZvcmUgc3RhcnRpbmcgdHdvIG5ldyB0YXNrcy4gXG4gKiAgIElmIGFueSB0YXNrcyBhcmUgdW5oZWFsdGh5IGFuZCBpZiBgYG1heGltdW1QZXJjZW50YGAgZG9lc24ndCBhbGxvdyB0aGUgQW1hem9uIEVDUyBzY2hlZHVsZXIgdG8gc3RhcnQgcmVwbGFjZW1lbnQgdGFza3MsIHRoZSBzY2hlZHVsZXIgc3RvcHMgdGhlIHVuaGVhbHRoeSB0YXNrcyBvbmUtYnktb25lIOKAlCB1c2luZyB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBhcyBhIGNvbnN0cmFpbnQg4oCUIHRvIGNsZWFyIHVwIGNhcGFjaXR5IHRvIGxhdW5jaCByZXBsYWNlbWVudCB0YXNrcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBzY2hlZHVsZXIgcmVwbGFjZXMgdW5oZWFsdGh5IHRhc2tzLCBzZWUgW0FtYXpvbiBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKSAuIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyBub3QqIHVzZSBhIGxvYWQgYmFsYW5jZXIsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIG5vdGVkOlxuICogICArICBBIHNlcnZpY2UgaXMgY29uc2lkZXJlZCBoZWFsdGh5IGlmIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHBhc3MgdGhlaXIgaGVhbHRoIGNoZWNrcy5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIDQwIHNlY29uZHMgYWZ0ZXIgYSB0YXNrIHJlYWNoZXMgYSBgYFJVTk5JTkdgYCBzdGF0ZSBiZWZvcmUgdGhlIHRhc2sgaXMgY291bnRlZCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBvbmUgb3IgbW9yZSBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIGl0IHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLiBBIHRhc2sgaXMgY29uc2lkZXJlZCBoZWFsdGh5IHdoZW4gYWxsIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGhpbiB0aGUgdGFzayBoYXZlIHBhc3NlZCB0aGVpciBoZWFsdGggY2hlY2tzLiBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGNhbiB3YWl0IGZvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb250YWluZXIgaGVhbHRoIGNoZWNrIHNldHRpbmdzLiBcbiAqICAgXG4gKiAgRm9yIHNlcnZpY2VzIHRoYXQgKmRvKiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICArICBJZiBhIHRhc2sgaGFzIGFuIGVzc2VudGlhbCBjb250YWluZXIgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciBib3RoIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYW5kIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICBcbiAqICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSByZXBsaWNhIHNlcnZpY2UgZm9yIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgaXMgMTAwJS4gVGhlIGRlZmF1bHQgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHVzaW5nIHRoZSBgYERBRU1PTmBgIHNlcnZpY2Ugc2NoZWR1bGUgaXMgMCUgZm9yIHRoZSBDTEksIHRoZSBBV1MgU0RLcywgYW5kIHRoZSBBUElzIGFuZCA1MCUgZm9yIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLlxuICogIFRoZSBtaW5pbXVtIG51bWJlciBvZiBoZWFsdGh5IHRhc2tzIGR1cmluZyBhIGRlcGxveW1lbnQgaXMgdGhlIGBgZGVzaXJlZENvdW50YGAgbXVsdGlwbGllZCBieSB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYC8xMDAsIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciB2YWx1ZS5cbiAqICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlICptaW5pbXVtIGhlYWx0aHkgcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHRoYXQgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGhhcyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLlxuICogICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQsIGFsdGhvdWdoIGl0IGlzIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1pbmltdW1IZWFsdGh5UGVyY2VudD86IG51bWJlclxufVxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgQ2xvdWRXYXRjaCBhbGFybXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudEFsYXJtcyB7XG4vKipcbiAqIE9uZSBvciBtb3JlIENsb3VkV2F0Y2ggYWxhcm0gbmFtZXMuIFVzZSBhIFwiLFwiIHRvIHNlcGFyYXRlIHRoZSBhbGFybXMuXG4gKi9cbkFsYXJtTmFtZXM6IHN0cmluZ1tdXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIENsb3VkV2F0Y2ggYWxhcm0gb3B0aW9uIGluIHRoZSBzZXJ2aWNlIGRlcGxveW1lbnQgcHJvY2Vzcy5cbiAqL1xuRW5hYmxlOiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBjb25maWd1cmUgQW1hem9uIEVDUyB0byByb2xsIGJhY2sgdGhlIHNlcnZpY2UgaWYgYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMuIElmIHJvbGxiYWNrIGlzIHVzZWQsIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICovXG5Sb2xsYmFjazogYm9vbGVhblxufVxuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIgY2FuIG9ubHkgYmUgdXNlZCBmb3Igc2VydmljZXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUuXG4gKiAgIFRoZSAqZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIqIGRldGVybWluZXMgd2hldGhlciBhIHNlcnZpY2UgZGVwbG95bWVudCB3aWxsIGZhaWwgaWYgdGhlIHNlcnZpY2UgY2FuJ3QgcmVhY2ggYSBzdGVhZHkgc3RhdGUuIElmIHlvdSB1c2UgdGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyLCBhIHNlcnZpY2UgZGVwbG95bWVudCB3aWxsIHRyYW5zaXRpb24gdG8gYSBmYWlsZWQgc3RhdGUgYW5kIHN0b3AgbGF1bmNoaW5nIG5ldyB0YXNrcy4gSWYgeW91IHVzZSB0aGUgcm9sbGJhY2sgb3B0aW9uLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUm9sbGluZyB1cGRhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZS1lY3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENpcmN1aXRCcmVha2VyIHtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIgbG9naWMgZm9yIHRoZSBzZXJ2aWNlLlxuICovXG5FbmFibGU6IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNvbmZpZ3VyZSBBbWF6b24gRUNTIHRvIHJvbGwgYmFjayB0aGUgc2VydmljZSBpZiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscy4gSWYgcm9sbGJhY2sgaXMgb24sIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICovXG5Sb2xsYmFjazogYm9vbGVhblxufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAgbXVzdCBoYXZlIGEgbmFtZSB0aGF0IGlzIHVuaXF1ZSBpbiB0aGUgbmFtZXNwYWNlLlxuICogICAgU3RhcnRpbmcgQXByaWwgMTUsIDIwMjMsIEFXUzsgd2lsbCBub3Qgb25ib2FyZCBuZXcgY3VzdG9tZXJzIHRvIEFtYXpvbiBFbGFzdGljIEluZmVyZW5jZSAoRUkpLCBhbmQgd2lsbCBoZWxwIGN1cnJlbnQgY3VzdG9tZXJzIG1pZ3JhdGUgdGhlaXIgd29ya2xvYWRzIHRvIG9wdGlvbnMgdGhhdCBvZmZlciBiZXR0ZXIgcHJpY2UgYW5kIHBlcmZvcm1hbmNlLiBBZnRlciBBcHJpbCAxNSwgMjAyMywgbmV3IGN1c3RvbWVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIGxhdW5jaCBpbnN0YW5jZXMgd2l0aCBBbWF6b24gRUkgYWNjZWxlcmF0b3JzIGluIEFtYXpvbiBTYWdlTWFrZXIsIEVDUywgb3IgRUMyLiBIb3dldmVyLCBjdXN0b21lcnMgd2hvIGhhdmUgdXNlZCBBbWF6b24gRUkgYXQgbGVhc3Qgb25jZSBkdXJpbmcgdGhlIHBhc3QgMzAtZGF5IHBlcmlvZCBhcmUgY29uc2lkZXJlZCBjdXJyZW50IGN1c3RvbWVycyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBzZXJ2aWNlLiBcbiAqICAgIE9uIEp1bmUgMTIsIDIwMjUsIEFtYXpvbiBFQ1MgbGF1bmNoZWQgc3VwcG9ydCBmb3IgdXBkYXRpbmcgY2FwYWNpdHkgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBmb3IgRUNTIHNlcnZpY2VzLiBXaXRoIHRoaXMgbGF1bmNoLCBFQ1MgYWxzbyBhbGlnbmVkIHRoZSBDRk4gdXBkYXRlIGJlaGF2aW9yIGZvciBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIHBhcmFtZXRlciB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbYWRkcyBzdXBwb3J0IGZvciB1cGRhdGluZyBjYXBhY2l0eSBwcm92aWRlciBjb25maWd1cmF0aW9uIGZvciBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hYm91dC1hd3Mvd2hhdHMtbmV3LzIwMjUvMDUvYW1hem9uLWVjcy1jYXBhY2l0eS1wcm92aWRlci1jb25maWd1cmF0aW9uLWVjcy8pLiBQcmV2aW91c2x5IEVDUyBpZ25vcmVkIHRoZSBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIHByb3BlcnR5IGlmIGl0IHdhcyBzZXQgdG8gYW4gZW1wdHkgbGlzdCBmb3IgZXhhbXBsZSwgYGBbXWBgIGluIENGTiwgYmVjYXVzZSB1cGRhdGluZyBjYXBhY2l0eSBwcm92aWRlciBjb25maWd1cmF0aW9uIHdhcyBub3Qgc3VwcG9ydGVkLiBOb3csIHdpdGggc3VwcG9ydCBmb3IgY2FwYWNpdHkgcHJvdmlkZXIgdXBkYXRlcywgY3VzdG9tZXJzIGNhbiByZW1vdmUgY2FwYWNpdHkgcHJvdmlkZXJzIGZyb20gYSBzZXJ2aWNlIGJ5IHBhc3NpbmcgYW4gZW1wdHkgbGlzdC4gV2hlbiB5b3Ugc3BlY2lmeSBhbiBlbXB0eSBsaXN0IChgYFtdYGApIGZvciB0aGUgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBwcm9wZXJ0eSBpbiB5b3VyIENGTiB0ZW1wbGF0ZSwgRUNTIHdpbGwgcmVtb3ZlIGFueSBjYXBhY2l0eSBwcm92aWRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2aWNlLCBhcyBmb2xsb3dzOlxuICogICArICBGb3Igc2VydmljZXMgY3JlYXRlZCB3aXRoIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgYWZ0ZXIgdGhlIGxhdW5jaDpcbiAqICAgKyAgSWYgdGhlcmUncyBhIGNsdXN0ZXIgZGVmYXVsdCBzdHJhdGVneSBzZXQsIHRoZSBzZXJ2aWNlIHdpbGwgcmV2ZXJ0IHRvIHVzaW5nIHRoYXQgZGVmYXVsdCBzdHJhdGVneS5cbiAqICAgKyAgSWYgbm8gY2x1c3RlciBkZWZhdWx0IHN0cmF0ZWd5IGV4aXN0cywgeW91IHdpbGwgcmVjZWl2ZSB0aGUgZm9sbG93aW5nIGVycm9yOlxuICogIE5vIGxhdW5jaCB0eXBlIHRvIGZhbGwgYmFjayB0byBmb3IgZW1wdHkgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIFlvdXIgc2VydmljZSB3YXMgbm90IGNyZWF0ZWQgd2l0aCBhIGxhdW5jaCB0eXBlLlxuICogICBcbiAqICAgKyAgRm9yIHNlcnZpY2VzIGNyZWF0ZWQgd2l0aCBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHByaW9yIHRvIHRoZSBsYXVuY2g6XG4gKiAgICsgIElmIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgaGFkIGBgRkFSR0FURV9TUE9UYGAgb3IgYGBGQVJHQVRFYGAgY2FwYWNpdHkgcHJvdmlkZXJzLCB0aGUgbGF1bmNoIHR5cGUgd2lsbCBiZSB1cGRhdGVkIHRvIGBgRkFSR0FURWBgIGFuZCB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgd2lsbCBiZSByZW1vdmVkLlxuICogICArICBJZiB0aGUgc3RyYXRlZ3kgaW5jbHVkZWQgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycywgdGhlIHNlcnZpY2Ugd2lsbCByZXZlcnQgdG8gRUMyIGxhdW5jaCB0eXBlLCBhbmQgdGhlIEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgd2lsbCBub3QgYmUgdXNlZC5cbiAqICAgXG4gKiAgIFxuICogIFJlY29tbWVuZGVkIEFjdGlvbnNcbiAqICBJZiB5b3UgYXJlIGN1cnJlbnRseSB1c2luZyBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneTogW11gYCBpbiB5b3VyIENGTiB0ZW1wbGF0ZXMsIHlvdSBzaG91bGQgdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuICogICArICBJZiB5b3UgZG8gbm90IGludGVuZCB0byB1cGRhdGUgdGhlIENhcGFjaXR5IFByb3ZpZGVyIFN0cmF0ZWd5OlxuICogICArICBSZW1vdmUgdGhlIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgcHJvcGVydHkgZW50aXJlbHkgZnJvbSB5b3VyIENGTiB0ZW1wbGF0ZVxuICogICArICBBbHRlcm5hdGl2ZWx5LCB1c2UgYGAhUmVmIDo6Tm9WYWx1ZWBgIGZvciB0aGUgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBwcm9wZXJ0eSBpbiB5b3VyIHRlbXBsYXRlXG4gKiAgIFxuICogICArICBJZiB5b3UgaW50ZW5kIHRvIG1haW50YWluIG9yIHVwZGF0ZSB0aGUgQ2FwYWNpdHkgUHJvdmlkZXIgU3RyYXRlZ3ksIHNwZWNpZnkgdGhlIGFjdHVhbCBDYXBhY2l0eSBQcm92aWRlciBTdHJhdGVneSBmb3IgdGhlIHNlcnZpY2UgaW4geW91ciBDRk4gdGVtcGxhdGUuXG4gKiAgIFxuICogIElmIHlvdXIgQ0ZOIHRlbXBsYXRlIGhhZCBhbiBlbXB0eSBsaXN0IChbXSkgZm9yIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgcHJpb3IgdG8gdGhlIGFmb3JlbWVudGlvbmVkIGxhdW5jaCBvbiBKdW5lIDEyLCBhbmQgeW91IGFyZSB1c2luZyB0aGUgc2FtZSB0ZW1wbGF0ZSB3aXRoIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5OiBbXWBgLCB5b3UgbWlnaHQgZW5jb3VudGVyIHRoZSBmb2xsb3dpbmcgZXJyb3I6XG4gKiAgIEludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogV2hlbiBzd2l0Y2hpbmcgZnJvbSBsYXVuY2ggdHlwZSB0byBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBvbiBhbiBleGlzdGluZyBzZXJ2aWNlLCBvciBtYWtpbmcgYSBjaGFuZ2UgdG8gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBvbiBhIHNlcnZpY2UgdGhhdCBpcyBhbHJlYWR5IHVzaW5nIG9uZSwgeW91IG11c3QgZm9yY2UgYSBuZXcgZGVwbG95bWVudC4gKFNlcnZpY2U6IEVjcywgU3RhdHVzIENvZGU6IDQwMCwgUmVxdWVzdCBJRDogeHh4KSAoU0RLIEF0dGVtcHQgQ291bnQ6IDEpXCIgKFJlcXVlc3RUb2tlbjogeHh4IEhhbmRsZXJFcnJvckNvZGU6IEludmFsaWRSZXF1ZXN0KSBcbiAqICBOb3RlIHRoYXQgQ0ZOIGF1dG9tYXRpY2FsbHkgaW5pdGlhdGVzIGEgbmV3IGRlcGxveW1lbnQgd2hlbiBpdCBkZXRlY3RzIGEgcGFyYW1ldGVyIGNoYW5nZSwgYnV0IGN1c3RvbWVycyBjYW5ub3QgY2hvb3NlIHRvIGZvcmNlIGEgZGVwbG95bWVudCB0aHJvdWdoIENGTi4gVGhpcyBpcyBhbiBpbnZhbGlkIGlucHV0IHNjZW5hcmlvIHRoYXQgcmVxdWlyZXMgb25lIG9mIHRoZSByZW1lZGlhdGlvbiBhY3Rpb25zIGxpc3RlZCBhYm92ZS5cbiAqICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhY3RpdmUgcHJvZHVjdGlvbiBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSwgY29udGFjdCBBV1MgU3VwcG9ydCBvciB5b3VyIFRlY2huaWNhbCBBY2NvdW50IE1hbmFnZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19FQ1NfU0VSVklDRSB7XG4vKipcbiAqIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIHRoYXQgeW91ciB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgcnVubmluZyBvbi4gQSBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHNwZWNpZmllZCBvbmx5IGZvciB0YXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS4gSWYgb25lIGlzbid0IHNwZWNpZmllZCwgdGhlIGBgTEFURVNUYGAgcGxhdGZvcm0gdmVyc2lvbiBpcyB1c2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtwbGF0Zm9ybSB2ZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcGxhdGZvcm1fdmVyc2lvbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5QbGF0Zm9ybVZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSB0YWdzIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiB0byB0aGUgdGFzay4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgdGFncyBhcmVuJ3QgcHJvcGFnYXRlZC4gVGFncyBjYW4gb25seSBiZSBwcm9wYWdhdGVkIHRvIHRoZSB0YXNrIGR1cmluZyB0YXNrIGNyZWF0aW9uLiBUbyBhZGQgdGFncyB0byBhIHRhc2sgYWZ0ZXIgdGFzayBjcmVhdGlvbiwgdXNlIHRoZSBbVGFnUmVzb3VyY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVGFnUmVzb3VyY2UuaHRtbCkgQVBJIGFjdGlvbi5cbiAqICBZb3UgbXVzdCBzZXQgdGhpcyB0byBhIHZhbHVlIG90aGVyIHRoYW4gYGBOT05FYGAgd2hlbiB5b3UgdXNlIENvc3QgRXhwbG9yZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgdXNhZ2UgcmVwb3J0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNhZ2UtcmVwb3J0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIGRlZmF1bHQgaXMgYGBOT05FYGAuXG4gKi9cblByb3BhZ2F0ZVRhZ3M/OiAoXCJTRVJWSUNFXCIgfCBcIlRBU0tfREVGSU5JVElPTlwiKVxuU2VydmljZUFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcGxhY2VtZW50IHN0cmF0ZWd5IG9iamVjdHMgdG8gdXNlIGZvciB0YXNrcyBpbiB5b3VyIHNlcnZpY2UuIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgNSBzdHJhdGVneSBydWxlcyBmb3IgZWFjaCBzZXJ2aWNlLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFBsYWNlbWVudFN0cmF0ZWd5YGAgYXJyYXkuXG4gKi9cblBsYWNlbWVudFN0cmF0ZWdpZXM/OiBQbGFjZW1lbnRTdHJhdGVneVtdXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgZGlzY292ZXJ5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWRpc2NvdmVyeS5odG1sKS5cbiAqICAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGlzbid0IHN1cHBvcnRlZC5cbiAqICAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgU2VydmljZVJlZ2lzdHJ5YGAgYXJyYXkuXG4gKi9cblNlcnZpY2VSZWdpc3RyaWVzPzogU2VydmljZVJlZ2lzdHJ5W11cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgdm9sdW1lIHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFzIGEgdm9sdW1lIHRoYXQgaXMgY29uZmlndXJlZCBhdCBsYXVuY2ggdGltZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGUgaXMgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25gYCBhcnJheS5cbiAqL1xuVm9sdW1lQ29uZmlndXJhdGlvbnM/OiBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICogIElmIGEgYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGxhdW5jaFR5cGVgYCBwYXJhbWV0ZXIgbXVzdCBiZSBvbWl0dGVkLiBJZiBubyBgYGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIG9yIGBgbGF1bmNoVHlwZWBgIGlzIHNwZWNpZmllZCwgdGhlIGBgZGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIGZvciB0aGUgY2x1c3RlciBpcyB1c2VkLlxuICogIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGNvbnRhaW4gYSBtYXhpbXVtIG9mIDIwIGNhcGFjaXR5IHByb3ZpZGVycy5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtYGAgYXJyYXkuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneT86IENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW1bXVxuLyoqXG4gKiBUaGUgbGF1bmNoIHR5cGUgb24gd2hpY2ggdG8gcnVuIHlvdXIgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBMYXVuY2ggVHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2xhdW5jaF90eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkxhdW5jaFR5cGU/OiAoXCJFQzJcIiB8IFwiRkFSR0FURVwiIHwgXCJFWFRFUk5BTFwiKVxuTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgQXZhaWxhYmlsaXR5IFpvbmUgcmViYWxhbmNpbmcgZm9yIHRoZSBzZXJ2aWNlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JhbGFuY2luZyBhbiBBbWF6b24gRUNTIHNlcnZpY2UgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1yZWJhbGFuY2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkF2YWlsYWJpbGl0eVpvbmVSZWJhbGFuY2luZz86IChcIkVOQUJMRURcIiB8IFwiRElTQUJMRURcIilcbi8qKlxuICogVGhlIHNjaGVkdWxpbmcgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKS5cbiAqICBUaGVyZSBhcmUgdHdvIHNlcnZpY2Ugc2NoZWR1bGVyIHN0cmF0ZWdpZXMgYXZhaWxhYmxlOlxuICogICArICBgYFJFUExJQ0FgYC1UaGUgcmVwbGljYSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHBsYWNlcyBhbmQgbWFpbnRhaW5zIHRoZSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcyBhY3Jvc3MgeW91ciBjbHVzdGVyLiBCeSBkZWZhdWx0LCB0aGUgc2VydmljZSBzY2hlZHVsZXIgc3ByZWFkcyB0YXNrcyBhY3Jvc3MgQXZhaWxhYmlsaXR5IFpvbmVzLiBZb3UgY2FuIHVzZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVnaWVzIGFuZCBjb25zdHJhaW50cyB0byBjdXN0b21pemUgdGFzayBwbGFjZW1lbnQgZGVjaXNpb25zLiBUaGlzIHNjaGVkdWxlciBzdHJhdGVneSBpcyByZXF1aXJlZCBpZiB0aGUgc2VydmljZSB1c2VzIHRoZSBgYENPREVfREVQTE9ZYGAgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcy5cbiAqICAgKyAgYGBEQUVNT05gYC1UaGUgZGFlbW9uIHNjaGVkdWxpbmcgc3RyYXRlZ3kgZGVwbG95cyBleGFjdGx5IG9uZSB0YXNrIG9uIGVhY2ggYWN0aXZlIGNvbnRhaW5lciBpbnN0YW5jZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgdGhhdCB5b3Ugc3BlY2lmeSBpbiB5b3VyIGNsdXN0ZXIuIFRoZSBzZXJ2aWNlIHNjaGVkdWxlciBhbHNvIGV2YWx1YXRlcyB0aGUgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgZm9yIHJ1bm5pbmcgdGFza3MgYW5kIHdpbGwgc3RvcCB0YXNrcyB0aGF0IGRvbid0IG1lZXQgdGhlIHBsYWNlbWVudCBjb25zdHJhaW50cy4gV2hlbiB5b3UncmUgdXNpbmcgdGhpcyBzdHJhdGVneSwgeW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhIGRlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLCBhIHRhc2sgcGxhY2VtZW50IHN0cmF0ZWd5LCBvciB1c2UgU2VydmljZSBBdXRvIFNjYWxpbmcgcG9saWNpZXMuXG4gKiAgIFRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlIG9yIHRoZSBgYENPREVfREVQTE9ZYGAgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcyBkb24ndCBzdXBwb3J0IHRoZSBgYERBRU1PTmBgIHNjaGVkdWxpbmcgc3RyYXRlZ3kuXG4gKi9cblNjaGVkdWxpbmdTdHJhdGVneT86IChcIkRBRU1PTlwiIHwgXCJSRVBMSUNBXCIpXG5OZXR3b3JrQ29uZmlndXJhdGlvbj86IE5ldHdvcmtDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byB0aGUgc2VydmljZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUsIGJvdGggb2Ygd2hpY2ggeW91IGRlZmluZS4gV2hlbiBhIHNlcnZpY2UgaXMgZGVsZXRlZCwgdGhlIHRhZ3MgYXJlIGRlbGV0ZWQgYXMgd2VsbC5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICovXG5UYWdzPzogVGFnW11cbi8qKlxuICogVGhlIHBlcmlvZCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugc2NoZWR1bGVyIGlnbm9yZXMgdW5oZWFsdGh5IEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIFZQQyBMYXR0aWNlLCBhbmQgY29udGFpbmVyIGhlYWx0aCBjaGVja3MgYWZ0ZXIgYSB0YXNrIGhhcyBmaXJzdCBzdGFydGVkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIGhlYWx0aCBjaGVjayBncmFjZSBwZXJpb2QgdmFsdWUsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuIElmIHlvdSBkb24ndCB1c2UgYW55IG9mIHRoZSBoZWFsdGggY2hlY2tzLCB0aGVuIGBgaGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFNlY29uZHNgYCBpcyB1bnVzZWQuXG4gKiAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGFrZSBhIHdoaWxlIHRvIHN0YXJ0IGFuZCByZXNwb25kIHRvIGhlYWx0aCBjaGVja3MsIHlvdSBjYW4gc3BlY2lmeSBhIGhlYWx0aCBjaGVjayBncmFjZSBwZXJpb2Qgb2YgdXAgdG8gMiwxNDcsNDgzLDY0NyBzZWNvbmRzIChhYm91dCA2OSB5ZWFycykuIER1cmluZyB0aGF0IHRpbWUsIHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugc2NoZWR1bGVyIGlnbm9yZXMgaGVhbHRoIGNoZWNrIHN0YXR1cy4gVGhpcyBncmFjZSBwZXJpb2QgY2FuIHByZXZlbnQgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGZyb20gbWFya2luZyB0YXNrcyBhcyB1bmhlYWx0aHkgYW5kIHN0b3BwaW5nIHRoZW0gYmVmb3JlIHRoZXkgaGF2ZSB0aW1lIHRvIGNvbWUgdXAuXG4gKi9cbkhlYWx0aENoZWNrR3JhY2VQZXJpb2RTZWNvbmRzPzogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHR1cm4gb24gQW1hem9uIEVDUyBtYW5hZ2VkIHRhZ3MgZm9yIHRoZSB0YXNrcyB3aXRoaW4gdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1RhZ2dpbmcgeW91ciBBbWF6b24gRUNTIHJlc291cmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLXVzaW5nLXRhZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFdoZW4geW91IHVzZSBBbWF6b24gRUNTIG1hbmFnZWQgdGFncywgeW91IG5lZWQgdG8gc2V0IHRoZSBgYHByb3BhZ2F0ZVRhZ3NgYCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqL1xuRW5hYmxlRUNTTWFuYWdlZFRhZ3M/OiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9uYWxpdHkgaXMgdHVybmVkIG9uIGZvciB0aGUgc2VydmljZS4gSWYgYGB0cnVlYGAsIHRoZSBleGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb24gZm9yIGFsbCBjb250YWluZXJzIGluIHRhc2tzIGFzIHBhcnQgb2YgdGhlIHNlcnZpY2UuXG4gKi9cbkVuYWJsZUV4ZWN1dGVDb21tYW5kPzogYm9vbGVhblxuLyoqXG4gKiBBbiBhcnJheSBvZiBwbGFjZW1lbnQgY29uc3RyYWludCBvYmplY3RzIHRvIHVzZSBmb3IgdGFza3MgaW4geW91ciBzZXJ2aWNlLiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIG9mIDEwIGNvbnN0cmFpbnRzIGZvciBlYWNoIHRhc2suIFRoaXMgbGltaXQgaW5jbHVkZXMgY29uc3RyYWludHMgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhbmQgdGhvc2Ugc3BlY2lmaWVkIGF0IHJ1bnRpbWUuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgUGxhY2VtZW50Q29uc3RyYWludGBgIGFycmF5LlxuICovXG5QbGFjZW1lbnRDb25zdHJhaW50cz86IFBsYWNlbWVudENvbnN0cmFpbnRbXVxuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBjbHVzdGVyIHRoYXQgeW91IHJ1biB5b3VyIHNlcnZpY2Ugb24uIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIGNsdXN0ZXIsIHRoZSBkZWZhdWx0IGNsdXN0ZXIgaXMgYXNzdW1lZC5cbiAqL1xuQ2x1c3Rlcj86IHN0cmluZ1xuLyoqXG4gKiBBIGxpc3Qgb2YgbG9hZCBiYWxhbmNlciBvYmplY3RzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzZXJ2aWNlLiBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBSb2xlYGAgcHJvcGVydHksIGBgTG9hZEJhbGFuY2Vyc2BgIG11c3QgYmUgc3BlY2lmaWVkIGFzIHdlbGwuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbnVtYmVyIG9mIGxvYWQgYmFsYW5jZXJzIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHBlciBzZXJ2aWNlLCBzZWUgW1NlcnZpY2UgTG9hZCBCYWxhbmNpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtbG9hZC1iYWxhbmNpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYExvYWRCYWxhbmNlcmBgIGFycmF5LlxuICovXG5Mb2FkQmFsYW5jZXJzPzogTG9hZEJhbGFuY2VyW11cblNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbj86IFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGluc3RhbnRpYXRpb25zIG9mIHRoZSBzcGVjaWZpZWQgdGFzayBkZWZpbml0aW9uIHRvIHBsYWNlIGFuZCBrZWVwIHJ1bm5pbmcgaW4geW91ciBzZXJ2aWNlLlxuICogIEZvciBuZXcgc2VydmljZXMsIGlmIGEgZGVzaXJlZCBjb3VudCBpcyBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgdmFsdWUgb2YgYGAxYGAgaXMgdXNlZC4gV2hlbiB1c2luZyB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LCB0aGUgZGVzaXJlZCBjb3VudCBpcyBub3QgcmVxdWlyZWQuXG4gKiAgRm9yIGV4aXN0aW5nIHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgb21pdHRlZCBmcm9tIHRoZSBvcGVyYXRpb24uXG4gKi9cbkRlc2lyZWRDb3VudD86IG51bWJlclxuLyoqXG4gKiBUaGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UgYmVpbmcgY3JlYXRlZC5cbiAqL1xuVnBjTGF0dGljZUNvbmZpZ3VyYXRpb25zPzogVnBjTGF0dGljZUNvbmZpZ3VyYXRpb25bXVxuRGVwbG95bWVudENvbnRyb2xsZXI/OiBEZXBsb3ltZW50Q29udHJvbGxlclxuLyoqXG4gKiBUaGUgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyBBbWF6b24gRUNTIHRvIG1ha2UgY2FsbHMgdG8geW91ciBsb2FkIGJhbGFuY2VyIG9uIHlvdXIgYmVoYWxmLiBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHBlcm1pdHRlZCBpZiB5b3UgYXJlIHVzaW5nIGEgbG9hZCBiYWxhbmNlciB3aXRoIHlvdXIgc2VydmljZSBhbmQgeW91ciB0YXNrIGRlZmluaXRpb24gZG9lc24ndCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLiBJZiB5b3Ugc3BlY2lmeSB0aGUgYGByb2xlYGAgcGFyYW1ldGVyLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgYSBsb2FkIGJhbGFuY2VyIG9iamVjdCB3aXRoIHRoZSBgYGxvYWRCYWxhbmNlcnNgYCBwYXJhbWV0ZXIuXG4gKiAgIElmIHlvdXIgYWNjb3VudCBoYXMgYWxyZWFkeSBjcmVhdGVkIHRoZSBBbWF6b24gRUNTIHNlcnZpY2UtbGlua2VkIHJvbGUsIHRoYXQgcm9sZSBpcyB1c2VkIGZvciB5b3VyIHNlcnZpY2UgdW5sZXNzIHlvdSBzcGVjaWZ5IGEgcm9sZSBoZXJlLiBUaGUgc2VydmljZS1saW5rZWQgcm9sZSBpcyByZXF1aXJlZCBpZiB5b3VyIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBvciBpZiB0aGUgc2VydmljZSBpcyBjb25maWd1cmVkIHRvIHVzZSBzZXJ2aWNlIGRpc2NvdmVyeSwgYW4gZXh0ZXJuYWwgZGVwbG95bWVudCBjb250cm9sbGVyLCBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzLCBvciBFbGFzdGljIEluZmVyZW5jZSBhY2NlbGVyYXRvcnMgaW4gd2hpY2ggY2FzZSB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHJvbGUgaGVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgc2VydmljZS1saW5rZWQgcm9sZXMgZm9yIEFtYXpvbiBFQ1NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nLXNlcnZpY2UtbGlua2VkLXJvbGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91ciBzcGVjaWZpZWQgcm9sZSBoYXMgYSBwYXRoIG90aGVyIHRoYW4gYGAvYGAsIHRoZW4geW91IG11c3QgZWl0aGVyIHNwZWNpZnkgdGhlIGZ1bGwgcm9sZSBBUk4gKHRoaXMgaXMgcmVjb21tZW5kZWQpIG9yIHByZWZpeCB0aGUgcm9sZSBuYW1lIHdpdGggdGhlIHBhdGguIEZvciBleGFtcGxlLCBpZiBhIHJvbGUgd2l0aCB0aGUgbmFtZSBgYGJhcmBgIGhhcyBhIHBhdGggb2YgYGAvZm9vL2BgIHRoZW4geW91IHdvdWxkIHNwZWNpZnkgYGAvZm9vL2JhcmBgIGFzIHRoZSByb2xlIG5hbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0ZyaWVuZGx5IG5hbWVzIGFuZCBwYXRoc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pZGVudGlmaWVycy5odG1sI2lkZW50aWZpZXJzLWZyaWVuZGx5LW5hbWVzKSBpbiB0aGUgKklBTSBVc2VyIEd1aWRlKi5cbiAqL1xuUm9sZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYGBmYW1pbHlgYCBhbmQgYGByZXZpc2lvbmBgIChgYGZhbWlseTpyZXZpc2lvbmBgKSBvciBmdWxsIEFSTiBvZiB0aGUgdGFzayBkZWZpbml0aW9uIHRvIHJ1biBpbiB5b3VyIHNlcnZpY2UuIElmIGEgYGByZXZpc2lvbmBgIGlzbid0IHNwZWNpZmllZCwgdGhlIGxhdGVzdCBgYEFDVElWRWBgIHJldmlzaW9uIGlzIHVzZWQuXG4gKiAgQSB0YXNrIGRlZmluaXRpb24gbXVzdCBiZSBzcGVjaWZpZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyBlaXRoZXIgdGhlIGBgRUNTYGAgb3IgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlcnMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGVwbG95bWVudCB0eXBlcywgc2VlIFtBbWF6b24gRUNTIGRlcGxveW1lbnQgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZXMuaHRtbCkuXG4gKi9cblRhc2tEZWZpbml0aW9uPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHlvdXIgc2VydmljZS4gVXAgdG8gMjU1IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zIGFyZSBhbGxvd2VkLiBTZXJ2aWNlIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIGNsdXN0ZXIsIGJ1dCB5b3UgY2FuIGhhdmUgc2ltaWxhcmx5IG5hbWVkIHNlcnZpY2VzIGluIG11bHRpcGxlIGNsdXN0ZXJzIHdpdGhpbiBhIFJlZ2lvbiBvciBhY3Jvc3MgbXVsdGlwbGUgUmVnaW9ucy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgdGhlIGBgU2VydmljZU5hbWVgYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZU5hbWVgYCBtdXN0IGJlIHVuaXF1ZSBpbiB0aGUgY2x1c3Rlci5cbiAqL1xuU2VydmljZU5hbWU/OiBzdHJpbmdcbkRlcGxveW1lbnRDb25maWd1cmF0aW9uPzogRGVwbG95bWVudENvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIHRhc2sgcGxhY2VtZW50IHN0cmF0ZWd5IGZvciBhIHRhc2sgb3Igc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtc3RyYXRlZ2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50U3RyYXRlZ3kge1xuLyoqXG4gKiBUaGUgZmllbGQgdG8gYXBwbHkgdGhlIHBsYWNlbWVudCBzdHJhdGVneSBhZ2FpbnN0LiBGb3IgdGhlIGBgc3ByZWFkYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB2YWxpZCB2YWx1ZXMgYXJlIGBgaW5zdGFuY2VJZGBgIChvciBgYGhvc3RgYCwgd2hpY2ggaGFzIHRoZSBzYW1lIGVmZmVjdCksIG9yIGFueSBwbGF0Zm9ybSBvciBjdXN0b20gYXR0cmlidXRlIHRoYXQncyBhcHBsaWVkIHRvIGEgY29udGFpbmVyIGluc3RhbmNlLCBzdWNoIGFzIGBgYXR0cmlidXRlOmVjcy5hdmFpbGFiaWxpdHktem9uZWBgLiBGb3IgdGhlIGBgYmlucGFja2BgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGNwdWBgIGFuZCBgYG1lbW9yeWBgLiBGb3IgdGhlIGBgcmFuZG9tYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB0aGlzIGZpZWxkIGlzIG5vdCB1c2VkLlxuICovXG5GaWVsZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdHlwZSBvZiBwbGFjZW1lbnQgc3RyYXRlZ3kuIFRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSByYW5kb21seSBwbGFjZXMgdGFza3Mgb24gYXZhaWxhYmxlIGNhbmRpZGF0ZXMuIFRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSBzcHJlYWRzIHBsYWNlbWVudCBhY3Jvc3MgYXZhaWxhYmxlIGNhbmRpZGF0ZXMgZXZlbmx5IGJhc2VkIG9uIHRoZSBgYGZpZWxkYGAgcGFyYW1ldGVyLiBUaGUgYGBiaW5wYWNrYGAgc3RyYXRlZ3kgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzIHRoYXQgaGF2ZSB0aGUgbGVhc3QgYXZhaWxhYmxlIGFtb3VudCBvZiB0aGUgcmVzb3VyY2UgdGhhdCdzIHNwZWNpZmllZCB3aXRoIHRoZSBgYGZpZWxkYGAgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZSwgaWYgeW91IGJpbnBhY2sgb24gbWVtb3J5LCBhIHRhc2sgaXMgcGxhY2VkIG9uIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQgb2YgcmVtYWluaW5nIG1lbW9yeSBidXQgc3RpbGwgZW5vdWdoIHRvIHJ1biB0aGUgdGFzay5cbiAqL1xuVHlwZTogKFwiYmlucGFja1wiIHwgXCJyYW5kb21cIiB8IFwic3ByZWFkXCIpXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIGZvciB0aGUgc2VydmljZSByZWdpc3RyeS5cbiAqICBFYWNoIHNlcnZpY2UgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBvbmUgc2VydmljZSByZWdpc3RyeS4gTXVsdGlwbGUgc2VydmljZSByZWdpc3RyaWVzIGZvciBlYWNoIHNlcnZpY2UgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gKiAgV2hlbiB5b3UgYWRkLCB1cGRhdGUsIG9yIHJlbW92ZSB0aGUgc2VydmljZSByZWdpc3RyaWVzIGNvbmZpZ3VyYXRpb24sIEFtYXpvbiBFQ1Mgc3RhcnRzIGEgbmV3IGRlcGxveW1lbnQuIE5ldyB0YXNrcyBhcmUgcmVnaXN0ZXJlZCBhbmQgZGVyZWdpc3RlcmVkIHRvIHRoZSB1cGRhdGVkIHNlcnZpY2UgcmVnaXN0cnkgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlUmVnaXN0cnkge1xuLyoqXG4gKiBUaGUgY29udGFpbmVyIG5hbWUgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBicmlkZ2VgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBhIHR5cGUgU1JWIEROUyByZWNvcmQgaXMgdXNlZCwgeW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gb3IgYSBgYHBvcnRgYCB2YWx1ZS4gSG93ZXZlciwgeW91IGNhbid0IHNwZWNpZnkgYm90aC5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSB1c2VkIGlmIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZSBzcGVjaWZpZWQgYW4gU1JWIHJlY29yZC4gVGhpcyBmaWVsZCBtaWdodCBiZSB1c2VkIGlmIGJvdGggdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBTUlYgcmVjb3JkcyBhcmUgdXNlZC5cbiAqL1xuUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSB0byBiZSB1c2VkIGZvciB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2UuIEl0J3MgYWxyZWFkeSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBicmlkZ2VgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBUaGUgY3VycmVudGx5IHN1cHBvcnRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGlzIENNQVAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0ZVNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlU2VydmljZS5odG1sKS5cbiAqL1xuUmVnaXN0cnlBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgdm9sdW1lIHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFzIGEgdm9sdW1lIHRoYXQgaXMgY29uZmlndXJlZCBhdCBsYXVuY2ggdGltZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGUgaXMgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb24ge1xuTWFuYWdlZEVCU1ZvbHVtZT86IFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdm9sdW1lLiBUaGlzIHZhbHVlIG11c3QgbWF0Y2ggdGhlIHZvbHVtZSBuYW1lIGZyb20gdGhlIGBgVm9sdW1lYGAgb2JqZWN0IGluIHRoZSB0YXNrIGRlZmluaXRpb24uXG4gKi9cbk5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFtYXpvbiBFQlMgdm9sdW1lIHRoYXQgQW1hem9uIEVDUyBjcmVhdGVzIGFuZCBtYW5hZ2VzIG9uIHlvdXIgYmVoYWxmLiBUaGVzZSBzZXR0aW5ncyBhcmUgdXNlZCB0byBjcmVhdGUgZWFjaCBBbWF6b24gRUJTIHZvbHVtZSwgd2l0aCBvbmUgdm9sdW1lIGNyZWF0ZWQgZm9yIGVhY2ggdGFzayBpbiB0aGUgc2VydmljZS4gVGhlIEFtYXpvbiBFQlMgdm9sdW1lcyBhcmUgdmlzaWJsZSBpbiB5b3VyIGFjY291bnQgaW4gdGhlIEFtYXpvbiBFQzIgY29uc29sZSBvbmNlIHRoZXkgYXJlIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZU1hbmFnZWRFQlNWb2x1bWVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIHNuYXBzaG90IHRoYXQgQW1hem9uIEVDUyB1c2VzIHRvIGNyZWF0ZSB2b2x1bWVzIGZvciBhdHRhY2htZW50IHRvIHRhc2tzIG1haW50YWluZWQgYnkgdGhlIHNlcnZpY2UuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGBgc25hcHNob3RJZGBgIG9yIGBgc2l6ZUluR2lCYGAgaW4geW91ciB2b2x1bWUgY29uZmlndXJhdGlvbi4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBTbmFwc2hvdElkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5TbmFwc2hvdElkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB2b2x1bWUgdHlwZS4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBWb2x1bWVUeXBlYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUJTIHZvbHVtZSB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUqLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGVzLlxuICogICArICBHZW5lcmFsIFB1cnBvc2UgU1NEOiBgYGdwMmBgfGBgZ3AzYGBcbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBTU0Q6IGBgaW8xYGB8YGBpbzJgYFxuICogICArICBUaHJvdWdocHV0IE9wdGltaXplZCBIREQ6IGBgc3QxYGBcbiAqICAgKyAgQ29sZCBIREQ6IGBgc2MxYGBcbiAqICAgKyAgTWFnbmV0aWM6IGBgc3RhbmRhcmRgYFxuICogICBUaGUgbWFnbmV0aWMgdm9sdW1lIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBvbiBGYXJnYXRlLlxuICovXG5Wb2x1bWVUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBpZGVudGlmaWVyIG9mIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgdG8gdXNlIGZvciBBbWF6b24gRUJTIGVuY3J5cHRpb24uIFdoZW4gYSBrZXkgaXMgc3BlY2lmaWVkIHVzaW5nIHRoaXMgcGFyYW1ldGVyLCBpdCBvdmVycmlkZXMgQW1hem9uIEVCUyBkZWZhdWx0IGVuY3J5cHRpb24gb3IgYW55IEtNUyBrZXkgdGhhdCB5b3Ugc3BlY2lmaWVkIGZvciBjbHVzdGVyLWxldmVsIG1hbmFnZWQgc3RvcmFnZSBlbmNyeXB0aW9uLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEttc0tleUlkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBlbmNyeXB0aW5nIEFtYXpvbiBFQlMgdm9sdW1lcyBhdHRhY2hlZCB0byB0YXNrcywgc2VlIFtFbmNyeXB0IGRhdGEgc3RvcmVkIGluIEFtYXpvbiBFQlMgdm9sdW1lcyBhdHRhY2hlZCB0byBBbWF6b24gRUNTIHRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lYnMta21zLWVuY3J5cHRpb24uaHRtbCkuXG4gKiAgIEFXUyBhdXRoZW50aWNhdGVzIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgYXN5bmNocm9ub3VzbHkuIFRoZXJlZm9yZSwgaWYgeW91IHNwZWNpZnkgYW4gSUQsIGFsaWFzLCBvciBBUk4gdGhhdCBpcyBpbnZhbGlkLCB0aGUgYWN0aW9uIGNhbiBhcHBlYXIgdG8gY29tcGxldGUsIGJ1dCBldmVudHVhbGx5IGZhaWxzLlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgdm9sdW1lLiBBbWF6b24gRUNTIGFwcGxpZXMgc2VydmljZS1tYW5hZ2VkIHRhZ3MgYnkgZGVmYXVsdC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBUYWdTcGVjaWZpY2F0aW9ucy5OYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5UYWdTcGVjaWZpY2F0aW9ucz86IEVCU1RhZ1NwZWNpZmljYXRpb25bXVxuLyoqXG4gKiBUaGUgZmlsZXN5c3RlbSB0eXBlIGZvciB0aGUgdm9sdW1lLiBGb3Igdm9sdW1lcyBjcmVhdGVkIGZyb20gYSBzbmFwc2hvdCwgeW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBmaWxlc3lzdGVtIHR5cGUgdGhhdCB0aGUgdm9sdW1lIHdhcyB1c2luZyB3aGVuIHRoZSBzbmFwc2hvdCB3YXMgY3JlYXRlZC4gSWYgdGhlcmUgaXMgYSBmaWxlc3lzdGVtIHR5cGUgbWlzbWF0Y2gsIHRoZSB0YXNrcyB3aWxsIGZhaWwgdG8gc3RhcnQuXG4gKiAgVGhlIGF2YWlsYWJsZSBMaW51eCBmaWxlc3lzdGVtIHR5cGVzIGFyZeKAqCBgYGV4dDNgYCwgYGBleHQ0YGAsIGFuZCBgYHhmc2BgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBgYHhmc2BgIGZpbGVzeXN0ZW0gdHlwZSBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gKiAgVGhlIGF2YWlsYWJsZSBXaW5kb3dzIGZpbGVzeXN0ZW0gdHlwZXMgYXJlIGBgTlRGU2BgLlxuICovXG5GaWxlc3lzdGVtVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIHNob3VsZCBiZSBlbmNyeXB0ZWQuIElmIHlvdSB0dXJuIG9uIFJlZ2lvbi1sZXZlbCBBbWF6b24gRUJTIGVuY3J5cHRpb24gYnkgZGVmYXVsdCBidXQgc2V0IHRoaXMgdmFsdWUgYXMgYGBmYWxzZWBgLCB0aGUgc2V0dGluZyBpcyBvdmVycmlkZGVuIGFuZCB0aGUgdm9sdW1lIGlzIGVuY3J5cHRlZCB3aXRoIHRoZSBLTVMga2V5IHNwZWNpZmllZCBmb3IgQW1hem9uIEVCUyBlbmNyeXB0aW9uIGJ5IGRlZmF1bHQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgRW5jcnlwdGVkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5FbmNyeXB0ZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSB0aHJvdWdocHV0IHRvIHByb3Zpc2lvbiBmb3IgYSB2b2x1bWUsIGluIE1pQi9zLCB3aXRoIGEgbWF4aW11bSBvZiAxLDAwMCBNaUIvcy4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBUaHJvdWdocHV0YGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgZ3AzYGAgdm9sdW1lIHR5cGUuXG4gKi9cblRocm91Z2hwdXQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHJhdGUsIGluIE1pQi9zLCBhdCB3aGljaCBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNuYXBzaG90IG9mIGFuIGV4aXN0aW5nIEVCUyB2b2x1bWUgdG8gY3JlYXRlIG5ldyB2b2x1bWVzIGZvciBhdHRhY2htZW50IHRvIHRoZSB0YXNrcyBtYWludGFpbmVkIGJ5IHRoZSBzZXJ2aWNlLiBUaGlzIHByb3BlcnR5IGNhbiBiZSBzcGVjaWZpZWQgb25seSBpZiB5b3Ugc3BlY2lmeSBhIGBgc25hcHNob3RJZGBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJbml0aWFsaXplIEFtYXpvbiBFQlMgdm9sdW1lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2luaXRhbGl6ZS12b2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUJTIFVzZXIgR3VpZGUqLlxuICovXG5Wb2x1bWVJbml0aWFsaXphdGlvblJhdGU/OiBudW1iZXJcbi8qKlxuICogVGhlIG51bWJlciBvZiBJL08gb3BlcmF0aW9ucyBwZXIgc2Vjb25kIChJT1BTKS4gRm9yIGBgZ3AzYGAsIGBgaW8xYGAsIGFuZCBgYGlvMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIElPUFMgdGhhdCBhcmUgcHJvdmlzaW9uZWQgZm9yIHRoZSB2b2x1bWUuIEZvciBgYGdwMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgYmFzZWxpbmUgcGVyZm9ybWFuY2Ugb2YgdGhlIHZvbHVtZSBhbmQgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIHZvbHVtZSBhY2N1bXVsYXRlcyBJL08gY3JlZGl0cyBmb3IgYnVyc3RpbmcuXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGUuXG4gKiAgICsgIGBgZ3AzYGA6IDMsMDAwIC0gMTYsMDAwIElPUFNcbiAqICAgKyAgYGBpbzFgYDogMTAwIC0gNjQsMDAwIElPUFNcbiAqICAgKyAgYGBpbzJgYDogMTAwIC0gMjU2LDAwMCBJT1BTXG4gKiAgIFxuICogIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciBgYGlvMWBgIGFuZCBgYGlvMmBgIHZvbHVtZSB0eXBlcy4gVGhlIGRlZmF1bHQgZm9yIGBgZ3AzYGAgdm9sdW1lcyBpcyBgYDMsMDAwIElPUFNgYC4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgYGBzdDFgYCwgYGBzYzFgYCwgb3IgYGBzdGFuZGFyZGBgIHZvbHVtZSB0eXBlcy5cbiAqICBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYElvcHNgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cbklvcHM/OiBudW1iZXJcbi8qKlxuICogVGhlIHNpemUgb2YgdGhlIHZvbHVtZSBpbiBHaUIuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgdm9sdW1lIHNpemUgb3IgYSBzbmFwc2hvdCBJRC4gSWYgeW91IHNwZWNpZnkgYSBzbmFwc2hvdCBJRCwgdGhlIHNuYXBzaG90IHNpemUgaXMgdXNlZCBmb3IgdGhlIHZvbHVtZSBzaXplIGJ5IGRlZmF1bHQuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgdm9sdW1lIHNpemUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzbmFwc2hvdCBzaXplLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNpemVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgc2l6ZSB2YWx1ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGUuXG4gKiAgICsgIGBgZ3AyYGAgYW5kIGBgZ3AzYGA6IDEtMTYsMzg0XG4gKiAgICsgIGBgaW8xYGAgYW5kIGBgaW8yYGA6IDQtMTYsMzg0XG4gKiAgICsgIGBgc3QxYGAgYW5kIGBgc2MxYGA6IDEyNS0xNiwzODRcbiAqICAgKyAgYGBzdGFuZGFyZGBgOiAxLTEsMDI0XG4gKi9cblNpemVJbkdpQj86IG51bWJlclxuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHZvbHVtZS4gVGhpcyBpcyB0aGUgQW1hem9uIEVDUyBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gbWFuYWdlIHlvdXIgQVdTIGluZnJhc3RydWN0dXJlLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIEFtYXpvbiBFQ1MtbWFuYWdlZCBgYEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZvbHVtZXNgYCBJQU0gcG9saWN5IHdpdGggdGhpcyByb2xlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9pbmZyYXN0cnVjdHVyZV9JQU1fcm9sZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQ1MgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSB0YWcgc3BlY2lmaWNhdGlvbnMgb2YgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUJTVGFnU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIOKAqHRoZSBBbWF6b24gRUJTIHZvbHVtZS4gVGFncyBjYW4gb25seSBwcm9wYWdhdGUgdG8gYSBgYFNFUlZJQ0VgYCBzcGVjaWZpZWQgaW4g4oCoYGBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbmBgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCDigKhwcm9wYWdhdGVkLlxuICovXG5Qcm9wYWdhdGVUYWdzPzogKFwiU0VSVklDRVwiIHwgXCJUQVNLX0RFRklOSVRJT05cIilcbi8qKlxuICogVGhlIHR5cGUgb2Ygdm9sdW1lIHJlc291cmNlLlxuICovXG5SZXNvdXJjZVR5cGU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyBhcHBsaWVkIHRvIHRoaXMgQW1hem9uIEVCUyB2b2x1bWUuIGBgQW1hem9uRUNTQ3JlYXRlZGBgIGFuZCBgYEFtYXpvbkVDU01hbmFnZWRgYCBhcmUgcmVzZXJ2ZWQgdGFncyB0aGF0IGNhbid0IGJlIHVzZWQuXG4gKi9cblRhZ3M/OiBUYWdbXVxufVxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gYSByZXNvdXJjZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgdGhlbS5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICogICBcbiAqICBJbiBvcmRlciB0byB0YWcgYSBzZXJ2aWNlIHRoYXQgaGFzIHRoZSBmb2xsb3dpbmcgQVJOIGZvcm1hdCwgeW91IG5lZWQgdG8gbWlncmF0ZSB0aGUgc2VydmljZSB0byB0aGUgbG9uZyBBUk4uIFlvdSBtdXN0IHVzZSB0aGUgQVBJLCBDTEkgb3IgY29uc29sZSB0byBtaWdyYXRlIHRoZSBzZXJ2aWNlIEFSTi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTWlncmF0ZSBhbiBzaG9ydCBzZXJ2aWNlIEFSTiB0byBhIGxvbmcgQVJOXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWFybi1taWdyYXRpb24uaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICogICBgYGFybjphd3M6ZWNzOnJlZ2lvbjphd3NfYWNjb3VudF9pZDpzZXJ2aWNlL3NlcnZpY2UtbmFtZWBgIFxuICogIEFmdGVyIHRoZSBtaWdyYXRpb24gaXMgY29tcGxldGUsIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6XG4gKiAgICsgICBUaGUgc2VydmljZSBBUk4gaXM6IGBgYXJuOmF3czplY3M6cmVnaW9uOmF3c19hY2NvdW50X2lkOnNlcnZpY2UvY2x1c3Rlci1uYW1lL3NlcnZpY2UtbmFtZWBgXG4gKiAgICsgIFlvdSBjYW4gdXNlIENGTiB0byB0YWcgdGhlIHNlcnZpY2UgYXMgeW91IHdvdWxkIGEgc2VydmljZSB3aXRoIGEgbG9uZyBBUk4gZm9ybWF0LlxuICogICArICBXaGVuIHRoZSBgYFBoeXNpY2FsUmVzb3VyY2VJZGBgIGluIHRoZSBDRk4gc3RhY2sgcmVwcmVzZW50cyBhIHNlcnZpY2UsIHRoZSB2YWx1ZSBkb2VzIG5vdCBjaGFuZ2UgYW5kIHdpbGwgYmUgdGhlIHNob3J0IHNlcnZpY2UgQVJOLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBvcHRpb25hbCBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBgdmFsdWVgYCBhY3RzIGFzIGEgZGVzY3JpcHRvciB3aXRoaW4gYSB0YWcgY2F0ZWdvcnkgKGtleSkuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIE9uZSBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBga2V5YGAgaXMgYSBnZW5lcmFsIGxhYmVsIHRoYXQgYWN0cyBsaWtlIGEgY2F0ZWdvcnkgZm9yIG1vcmUgc3BlY2lmaWMgdGFnIHZhbHVlcy5cbiAqL1xuS2V5Pzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGJlIHNldCB3aGVuIHVzaW5nIHRoZSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBBUElzIG9yIGFzIHRoZSBkZWZhdWx0IGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGZvciBhIGNsdXN0ZXIgd2l0aCB0aGUgYGBDcmVhdGVDbHVzdGVyYGAgQVBJLlxuICogIE9ubHkgY2FwYWNpdHkgcHJvdmlkZXJzIHRoYXQgYXJlIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciBhbmQgaGF2ZSBhbiBgYEFDVElWRWBgIG9yIGBgVVBEQVRJTkdgYCBzdGF0dXMgY2FuIGJlIHVzZWQgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gVGhlIGBgUHV0Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJzYGAgQVBJIGlzIHVzZWQgdG8gYXNzb2NpYXRlIGEgY2FwYWNpdHkgcHJvdmlkZXIgd2l0aCBhIGNsdXN0ZXIuXG4gKiAgSWYgc3BlY2lmeWluZyBhIGNhcGFjaXR5IHByb3ZpZGVyIHRoYXQgdXNlcyBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHRoZSBjYXBhY2l0eSBwcm92aWRlciBtdXN0IGFscmVhZHkgYmUgY3JlYXRlZC4gTmV3IEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYGBDcmVhdGVDYXBhY2l0eVByb3ZpZGVyYGAgQVBJIG9wZXJhdGlvbi5cbiAqICBUbyB1c2UgYW4gRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXIsIHNwZWNpZnkgZWl0aGVyIHRoZSBgYEZBUkdBVEVgYCBvciBgYEZBUkdBVEVfU1BPVGBgIGNhcGFjaXR5IHByb3ZpZGVycy4gVGhlIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIHRvIGFsbCBhY2NvdW50cyBhbmQgb25seSBuZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgdG8gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW0ge1xuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXIuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlICpiYXNlKiB2YWx1ZSBkZXNpZ25hdGVzIGhvdyBtYW55IHRhc2tzLCBhdCBhIG1pbmltdW0sIHRvIHJ1biBvbiB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBPbmx5IG9uZSBjYXBhY2l0eSBwcm92aWRlciBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBoYXZlIGEgKmJhc2UqIGRlZmluZWQuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC5cbiAqL1xuQmFzZT86IG51bWJlclxuLyoqXG4gKiBUaGUgKndlaWdodCogdmFsdWUgZGVzaWduYXRlcyB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIHRhc2tzIGxhdW5jaGVkIHRoYXQgc2hvdWxkIHVzZSB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBUaGUgYGB3ZWlnaHRgYCB2YWx1ZSBpcyB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gYWZ0ZXIgdGhlIGBgYmFzZWBgIHZhbHVlLCBpZiBkZWZpbmVkLCBpcyBzYXRpc2ZpZWQuXG4gKiAgSWYgbm8gYGB3ZWlnaHRgYCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuIFdoZW4gbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBzcGVjaWZpZWQgd2l0aGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3ksIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXJzIG11c3QgaGF2ZSBhIHdlaWdodCB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYW55IGNhcGFjaXR5IHByb3ZpZGVycyB3aXRoIGEgd2VpZ2h0IG9mIGBgMGBgIGNhbid0IGJlIHVzZWQgdG8gcGxhY2UgdGFza3MuIElmIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBpbiBhIHN0cmF0ZWd5IHRoYXQgYWxsIGhhdmUgYSB3ZWlnaHQgb2YgYGAwYGAsIGFueSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBhY3Rpb25zIHVzaW5nIHRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB3aWxsIGZhaWwuXG4gKiAgQW4gZXhhbXBsZSBzY2VuYXJpbyBmb3IgdXNpbmcgd2VpZ2h0cyBpcyBkZWZpbmluZyBhIHN0cmF0ZWd5IHRoYXQgY29udGFpbnMgdHdvIGNhcGFjaXR5IHByb3ZpZGVycyBhbmQgYm90aCBoYXZlIGEgd2VpZ2h0IG9mIGBgMWBgLCB0aGVuIHdoZW4gdGhlIGBgYmFzZWBgIGlzIHNhdGlzZmllZCwgdGhlIHRhc2tzIHdpbGwgYmUgc3BsaXQgZXZlbmx5IGFjcm9zcyB0aGUgdHdvIGNhcGFjaXR5IHByb3ZpZGVycy4gVXNpbmcgdGhhdCBzYW1lIGxvZ2ljLCBpZiB5b3Ugc3BlY2lmeSBhIHdlaWdodCBvZiBgYDFgYCBmb3IgKmNhcGFjaXR5UHJvdmlkZXJBKiBhbmQgYSB3ZWlnaHQgb2YgYGA0YGAgZm9yICpjYXBhY2l0eVByb3ZpZGVyQiosIHRoZW4gZm9yIGV2ZXJ5IG9uZSB0YXNrIHRoYXQncyBydW4gdXNpbmcgKmNhcGFjaXR5UHJvdmlkZXJBKiwgZm91ciB0YXNrcyB3b3VsZCB1c2UgKmNhcGFjaXR5UHJvdmlkZXJCKi5cbiAqL1xuV2VpZ2h0PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlLiBUaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgdGFzayBkZWZpbml0aW9ucyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgdG8gcmVjZWl2ZSB0aGVpciBvd24gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgYW5kIGl0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG90aGVyIG5ldHdvcmsgbW9kZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgTmV0d29ya2luZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1uZXR3b3JraW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrQ29uZmlndXJhdGlvbiB7XG5Bd3N2cGNDb25maWd1cmF0aW9uPzogQXdzVnBjQ29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBUaGUgVlBDIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3VwcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSB0YXNrLlxuICogICBBbGwgc3BlY2lmaWVkIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c1ZwY0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgSURzIG9mIHRoZSBzZWN1cml0eSBncm91cHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgc2VjdXJpdHkgZ3JvdXAsIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGdyb3VwIGZvciB0aGUgVlBDIGlzIHVzZWQuIFRoZXJlJ3MgYSBsaW1pdCBvZiA1IHNlY3VyaXR5IGdyb3VwcyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQuXG4gKiAgIEFsbCBzcGVjaWZpZWQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cblNlY3VyaXR5R3JvdXBzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIElEcyBvZiB0aGUgc3VibmV0cyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gVGhlcmUncyBhIGxpbWl0IG9mIDE2IHN1Ym5ldHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkLlxuICogICBBbGwgc3BlY2lmaWVkIHN1Ym5ldHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuU3VibmV0cz86IHN0cmluZ1tdXG4vKipcbiAqIFdoZXRoZXIgdGhlIHRhc2sncyBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlIHJlY2VpdmVzIGEgcHVibGljIElQIGFkZHJlc3MuIFxuICogIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgd2hlbiB5b3Ugc2V0IHRoaXMgdmFsdWU6XG4gKiAgICsgIFdoZW4geW91IHVzZSBgYGNyZWF0ZS1zZXJ2aWNlYGAgb3IgYGB1cGRhdGUtc2VydmljZWBgLCB0aGUgZGVmYXVsdCBpcyBgYERJU0FCTEVEYGAuIFxuICogICArICBXaGVuIHRoZSBzZXJ2aWNlIGBgZGVwbG95bWVudENvbnRyb2xsZXJgYCBpcyBgYEVDU2BgLCB0aGUgdmFsdWUgbXVzdCBiZSBgYERJU0FCTEVEYGAuXG4gKi9cbkFzc2lnblB1YmxpY0lwPzogKFwiRElTQUJMRURcIiB8IFwiRU5BQkxFRFwiKVxufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgY29uc3RyYWludCBvbiB0YXNrIHBsYWNlbWVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBwbGFjZW1lbnQgY29uc3RyYWludHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LWNvbnN0cmFpbnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91J3JlIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudENvbnN0cmFpbnQge1xuLyoqXG4gKiBUaGUgdHlwZSBvZiBjb25zdHJhaW50LiBVc2UgYGBkaXN0aW5jdEluc3RhbmNlYGAgdG8gZW5zdXJlIHRoYXQgZWFjaCB0YXNrIGluIGEgcGFydGljdWxhciBncm91cCBpcyBydW5uaW5nIG9uIGEgZGlmZmVyZW50IGNvbnRhaW5lciBpbnN0YW5jZS4gVXNlIGBgbWVtYmVyT2ZgYCB0byByZXN0cmljdCB0aGUgc2VsZWN0aW9uIHRvIGEgZ3JvdXAgb2YgdmFsaWQgY2FuZGlkYXRlcy5cbiAqL1xuVHlwZTogKFwiZGlzdGluY3RJbnN0YW5jZVwiIHwgXCJtZW1iZXJPZlwiKVxuLyoqXG4gKiBBIGNsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2UgZXhwcmVzc2lvbiB0byBhcHBseSB0byB0aGUgY29uc3RyYWludC4gVGhlIGV4cHJlc3Npb24gY2FuIGhhdmUgYSBtYXhpbXVtIGxlbmd0aCBvZiAyMDAwIGNoYXJhY3RlcnMuIFlvdSBjYW4ndCBzcGVjaWZ5IGFuIGV4cHJlc3Npb24gaWYgdGhlIGNvbnN0cmFpbnQgdHlwZSBpcyBgYGRpc3RpbmN0SW5zdGFuY2VgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2x1c3RlciBxdWVyeSBsYW5ndWFnZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY2x1c3Rlci1xdWVyeS1sYW5ndWFnZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkV4cHJlc3Npb24/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGBgTG9hZEJhbGFuY2VyYGAgcHJvcGVydHkgc3BlY2lmaWVzIGRldGFpbHMgb24gYSBsb2FkIGJhbGFuY2VyIHRoYXQgaXMgdXNlZCB3aXRoIGEgc2VydmljZS5cbiAqICBJZiB0aGUgc2VydmljZSBpcyB1c2luZyB0aGUgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlciwgdGhlIHNlcnZpY2UgaXMgcmVxdWlyZWQgdG8gdXNlIGVpdGhlciBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIE5ldHdvcmsgTG9hZCBCYWxhbmNlci4gV2hlbiB5b3UgYXJlIGNyZWF0aW5nIGFuIEFDRGxvbmcgZGVwbG95bWVudCBncm91cCwgeW91IHNwZWNpZnkgdHdvIHRhcmdldCBncm91cHMgKHJlZmVycmVkIHRvIGFzIGEgYGB0YXJnZXRHcm91cFBhaXJgYCkuIEVhY2ggdGFyZ2V0IGdyb3VwIGJpbmRzIHRvIGEgc2VwYXJhdGUgdGFzayBzZXQgaW4gdGhlIGRlcGxveW1lbnQuIFRoZSBsb2FkIGJhbGFuY2VyIGNhbiBhbHNvIGhhdmUgdXAgdG8gdHdvIGxpc3RlbmVycywgYSByZXF1aXJlZCBsaXN0ZW5lciBmb3IgcHJvZHVjdGlvbiB0cmFmZmljIGFuZCBhbiBvcHRpb25hbCBsaXN0ZW5lciB0aGF0IGFsbG93cyB5b3UgdG8gdGVzdCBuZXcgcmV2aXNpb25zIG9mIHRoZSBzZXJ2aWNlIGJlZm9yZSByb3V0aW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byBpdC5cbiAqICBTZXJ2aWNlcyB3aXRoIHRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSAoZm9yIGV4YW1wbGUsIHRob3NlIHdpdGggdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUpIG9ubHkgc3VwcG9ydCBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VycyBhbmQgTmV0d29yayBMb2FkIEJhbGFuY2Vycy4gQ2xhc3NpYyBMb2FkIEJhbGFuY2VycyBhcmUgbm90IHN1cHBvcnRlZC4gQWxzbywgd2hlbiB5b3UgY3JlYXRlIGFueSB0YXJnZXQgZ3JvdXBzIGZvciB0aGVzZSBzZXJ2aWNlcywgeW91IG11c3QgY2hvb3NlIGBgaXBgYCBhcyB0aGUgdGFyZ2V0IHR5cGUsIG5vdCBgYGluc3RhbmNlYGAuIFRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIG5vdCBhbiBBbWF6b24gRUMyIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlciB7XG4vKipcbiAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRhcmdldCBncm91cCBvciBncm91cHMgYXNzb2NpYXRlZCB3aXRoIGEgc2VydmljZSBvciB0YXNrIHNldC5cbiAqICBBIHRhcmdldCBncm91cCBBUk4gaXMgb25seSBzcGVjaWZpZWQgd2hlbiB1c2luZyBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIE5ldHdvcmsgTG9hZCBCYWxhbmNlci4gXG4gKiAgRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBgYEVDU2BgIGRlcGxveW1lbnQgY29udHJvbGxlciwgeW91IGNhbiBzcGVjaWZ5IG9uZSBvciBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZWdpc3RlcmluZyBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzIHdpdGggYSBzZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9yZWdpc3Rlci1tdWx0aXBsZS10YXJnZXRncm91cHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlciwgeW91J3JlIHJlcXVpcmVkIHRvIGRlZmluZSB0d28gdGFyZ2V0IGdyb3VwcyBmb3IgdGhlIGxvYWQgYmFsYW5jZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JsdWUvZ3JlZW4gZGVwbG95bWVudCB3aXRoIENvZGVEZXBsb3ldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZS1ibHVlZ3JlZW4uaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3VyIHNlcnZpY2UncyB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IGNob29zZSBgYGlwYGAgYXMgdGhlIHRhcmdldCB0eXBlLCBub3QgYGBpbnN0YW5jZWBgLiBEbyB0aGlzIHdoZW4gY3JlYXRpbmcgeW91ciB0YXJnZXQgZ3JvdXBzIGJlY2F1c2UgdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgbm90IGFuIEFtYXpvbiBFQzIgaW5zdGFuY2UuIFRoaXMgbmV0d29yayBtb2RlIGlzIHJlcXVpcmVkIGZvciB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS5cbiAqL1xuVGFyZ2V0R3JvdXBBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGxvYWQgYmFsYW5jZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBvciB0YXNrIHNldC5cbiAqICBJZiB5b3UgYXJlIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgYSBOZXR3b3JrIExvYWQgQmFsYW5jZXIgdGhlIGxvYWQgYmFsYW5jZXIgbmFtZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIG9taXR0ZWQuXG4gKi9cbkxvYWRCYWxhbmNlck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciAoYXMgaXQgYXBwZWFycyBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uKSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci5cbiAqICBZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjb250YWluZXIgbmFtZSB3aGVuIGNvbmZpZ3VyaW5nIHRoZSB0YXJnZXQgZ3JvdXAgZm9yIGFuIEFtYXpvbiBFQ1MgbG9hZCBiYWxhbmNlci5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCBvbiB0aGUgY29udGFpbmVyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLiBUaGlzIHBvcnQgbXVzdCBjb3JyZXNwb25kIHRvIGEgYGBjb250YWluZXJQb3J0YGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgYXJlIHVzaW5nLiBGb3IgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlIGNvbnRhaW5lciBpbnN0YW5jZSB0aGV5J3JlIGxhdW5jaGVkIG9uIG11c3QgYWxsb3cgaW5ncmVzcyB0cmFmZmljIG9uIHRoZSBgYGhvc3RQb3J0YGAgb2YgdGhlIHBvcnQgbWFwcGluZy5cbiAqL1xuQ29udGFpbmVyUG9ydD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzZXJ2aWNlIHRvIGRpc2NvdmVyIGFuZCBjb25uZWN0IHRvIHNlcnZpY2VzLCBhbmQgYmUgZGlzY292ZXJlZCBieSwgYW5kIGNvbm5lY3RlZCBmcm9tLCBvdGhlciBzZXJ2aWNlcyB3aXRoaW4gYSBuYW1lc3BhY2UuXG4gKiAgVGFza3MgdGhhdCBydW4gaW4gYSBuYW1lc3BhY2UgY2FuIHVzZSBzaG9ydCBuYW1lcyB0byBjb25uZWN0IHRvIHNlcnZpY2VzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNhbiBjb25uZWN0IHRvIHNlcnZpY2VzIGFjcm9zcyBhbGwgb2YgdGhlIGNsdXN0ZXJzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNvbm5lY3QgdGhyb3VnaCBhIG1hbmFnZWQgcHJveHkgY29udGFpbmVyIHRoYXQgY29sbGVjdHMgbG9ncyBhbmQgbWV0cmljcyBmb3IgaW5jcmVhc2VkIHZpc2liaWxpdHkuIE9ubHkgdGhlIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBzZXJ2aWNlcyBjcmVhdGUgYXJlIHN1cHBvcnRlZCB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBsaXN0IG9mIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlIG9iamVjdHMuIFRoZXNlIGFyZSBuYW1lcyBhbmQgYWxpYXNlcyAoYWxzbyBrbm93biBhcyBlbmRwb2ludHMpIHRoYXQgYXJlIHVzZWQgYnkgb3RoZXIgQW1hem9uIEVDUyBzZXJ2aWNlcyB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS4gXG4gKiAgVGhpcyBmaWVsZCBpcyBub3QgcmVxdWlyZWQgZm9yIGEgXCJjbGllbnRcIiBBbWF6b24gRUNTIHNlcnZpY2UgdGhhdCdzIGEgbWVtYmVyIG9mIGEgbmFtZXNwYWNlIG9ubHkgdG8gY29ubmVjdCB0byBvdGhlciBzZXJ2aWNlcyB3aXRoaW4gdGhlIG5hbWVzcGFjZS4gQW4gZXhhbXBsZSBvZiB0aGlzIHdvdWxkIGJlIGEgZnJvbnRlbmQgYXBwbGljYXRpb24gdGhhdCBhY2NlcHRzIGluY29taW5nIHJlcXVlc3RzIGZyb20gZWl0aGVyIGEgbG9hZCBiYWxhbmNlciB0aGF0J3MgYXR0YWNoZWQgdG8gdGhlIHNlcnZpY2Ugb3IgYnkgb3RoZXIgbWVhbnMuXG4gKiAgQW4gb2JqZWN0IHNlbGVjdHMgYSBwb3J0IGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiwgYXNzaWducyBhIG5hbWUgZm9yIHRoZSBDTUFQbG9uZyBzZXJ2aWNlLCBhbmQgYSBsaXN0IG9mIGFsaWFzZXMgKGVuZHBvaW50cykgYW5kIHBvcnRzIGZvciBjbGllbnQgYXBwbGljYXRpb25zIHRvIHJlZmVyIHRvIHRoaXMgc2VydmljZS5cbiAqL1xuU2VydmljZXM/OiBTZXJ2aWNlQ29ubmVjdFNlcnZpY2VbXVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byB1c2UgU2VydmljZSBDb25uZWN0IHdpdGggdGhpcyBzZXJ2aWNlLlxuICovXG5FbmFibGVkOiBib29sZWFuXG5Mb2dDb25maWd1cmF0aW9uPzogTG9nQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbmFtZXNwYWNlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQ01BUGxvbmcgbmFtZXNwYWNlIGZvciB1c2Ugd2l0aCBTZXJ2aWNlIENvbm5lY3QuIFRoZSBuYW1lc3BhY2UgbXVzdCBiZSBpbiB0aGUgc2FtZSBBV1MgUmVnaW9uIGFzIHRoZSBBbWF6b24gRUNTIHNlcnZpY2UgYW5kIGNsdXN0ZXIuIFRoZSB0eXBlIG9mIG5hbWVzcGFjZSBkb2Vzbid0IGFmZmVjdCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENNQVBsb25nLCBzZWUgW1dvcmtpbmcgd2l0aCBTZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkLW1hcC9sYXRlc3QvZGcvd29ya2luZy13aXRoLXNlcnZpY2VzLmh0bWwpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTmFtZXNwYWNlPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZSBvYmplY3QgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0U2VydmljZSB7XG5UaW1lb3V0PzogVGltZW91dENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIHBvcnQgbnVtYmVyIGZvciB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5IHRvIGxpc3RlbiBvbi5cbiAqICBVc2UgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgdG8gYnlwYXNzIHRoZSBwcm94eSBmb3IgdHJhZmZpYyBvbiB0aGUgcG9ydCBudW1iZXIgc3BlY2lmaWVkIGluIHRoZSBuYW1lZCBgYHBvcnRNYXBwaW5nYGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBvZiB0aGlzIGFwcGxpY2F0aW9uLCBhbmQgdGhlbiB1c2UgaXQgaW4geW91ciBWUEMgc2VjdXJpdHkgZ3JvdXBzIHRvIGFsbG93IHRyYWZmaWMgaW50byB0aGUgcHJveHkgZm9yIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLlxuICogIEluIGBgYXdzdnBjYGAgbW9kZSBhbmQgRmFyZ2F0ZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGNvbnRhaW5lciBwb3J0IG51bWJlci4gVGhlIGNvbnRhaW5lciBwb3J0IG51bWJlciBpcyBpbiB0aGUgYGBwb3J0TWFwcGluZ2BgIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIEluIGJyaWRnZSBtb2RlLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZXBoZW1lcmFsIHBvcnQgb2YgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eS5cbiAqL1xuSW5ncmVzc1BvcnRPdmVycmlkZT86IG51bWJlclxuLyoqXG4gKiBUaGUgbGlzdCBvZiBjbGllbnQgYWxpYXNlcyBmb3IgdGhpcyBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZS4gWW91IHVzZSB0aGVzZSB0byBhc3NpZ24gbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnQgYXBwbGljYXRpb25zLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2xpZW50IGFsaWFzZXMgdGhhdCB5b3UgY2FuIGhhdmUgaW4gdGhpcyBsaXN0IGlzIDEuXG4gKiAgRWFjaCBhbGlhcyAoXCJlbmRwb2ludFwiKSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGFuZCBwb3J0IG51bWJlciB0aGF0IG90aGVyIEFtYXpvbiBFQ1MgdGFza3MgKFwiY2xpZW50c1wiKSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLlxuICogIEVhY2ggbmFtZSBhbmQgcG9ydCBtYXBwaW5nIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbmFtZXNwYWNlLlxuICogIEZvciBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAsIHlvdSBtdXN0IHByb3ZpZGUgYXQgbGVhc3Qgb25lIGBgY2xpZW50QWxpYXNgYCB3aXRoIG9uZSBgYHBvcnRgYC5cbiAqL1xuQ2xpZW50QWxpYXNlcz86IFNlcnZpY2VDb25uZWN0Q2xpZW50QWxpYXNbXVxuVGxzPzogU2VydmljZUNvbm5lY3RUbHNDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpcyB0aGUgbmFtZSBvZiB0aGUgbmV3IENNQVAgc2VydmljZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBmb3IgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuIFRoaXMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBDTUFQIG5hbWVzcGFjZS4gVGhlIG5hbWUgY2FuIGNvbnRhaW4gdXAgdG8gNjQgY2hhcmFjdGVycy4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgYW5kIGh5cGhlbnMgKC0pLiBUaGUgbmFtZSBjYW4ndCBzdGFydCB3aXRoIGEgaHlwaGVuLlxuICogIElmIHRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBwb3J0IG1hcHBpbmcgbmFtZSBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZCBpbiBgYHBvcnROYW1lLm5hbWVzcGFjZWBgLlxuICovXG5EaXNjb3ZlcnlOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBgYHBvcnROYW1lYGAgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIGBgcG9ydE1hcHBpbmdzYGAgZnJvbSBhbGwgdGhlIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBvZiB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqL1xuUG9ydE5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBjb25maWd1cmVkIHRpbWVvdXRzIGZvciBTZXJ2aWNlIENvbm5lY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGltZW91dENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgd2FpdGluZyBmb3IgdGhlIHVwc3RyZWFtIHRvIHJlc3BvbmQgd2l0aCBhIGNvbXBsZXRlIHJlc3BvbnNlIHBlciByZXF1ZXN0LiBBIHZhbHVlIG9mIGBgMGBgIGNhbiBiZSBzZXQgdG8gZGlzYWJsZSBgYHBlclJlcXVlc3RUaW1lb3V0YGAuIGBgcGVyUmVxdWVzdFRpbWVvdXRgYCBjYW4gb25seSBiZSBzZXQgaWYgU2VydmljZSBDb25uZWN0IGBgYXBwUHJvdG9jb2xgYCBpc24ndCBgYFRDUGBgLiBPbmx5IGBgaWRsZVRpbWVvdXRgYCBpcyBhbGxvd2VkIGZvciBgYFRDUGBgYGBhcHBQcm90b2NvbGBgLlxuICovXG5QZXJSZXF1ZXN0VGltZW91dFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgYSBjb25uZWN0aW9uIHdpbGwgc3RheSBhY3RpdmUgd2hpbGUgaWRsZS4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBpZGxlVGltZW91dGBgLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBIVFRQYGAvYGBIVFRQMmBgL2BgR1JQQ2BgIGlzIDUgbWludXRlcy5cbiAqICBUaGUgYGBpZGxlVGltZW91dGBgIGRlZmF1bHQgZm9yIGBgVENQYGAgaXMgMSBob3VyLlxuICovXG5JZGxlVGltZW91dFNlY29uZHM/OiBudW1iZXJcbn1cbi8qKlxuICogRWFjaCBhbGlhcyAoXCJlbmRwb2ludFwiKSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGFuZCBwb3J0IG51bWJlciB0aGF0IG90aGVyIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RDbGllbnRBbGlhcyB7XG4vKipcbiAqIFRoZSBgYGRuc05hbWVgYCBpcyB0aGUgbmFtZSB0aGF0IHlvdSB1c2UgaW4gdGhlIGFwcGxpY2F0aW9ucyBvZiBjbGllbnQgdGFza3MgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFRoZSBuYW1lIG11c3QgYmUgYSB2YWxpZCBETlMgbmFtZSBidXQgZG9lc24ndCBuZWVkIHRvIGJlIGZ1bGx5LXF1YWxpZmllZC4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgdXAgdG8gMTI3IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGh5cGhlbnMgKC0pLCBhbmQgcGVyaW9kcyAoLikuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYGRpc2NvdmVyeU5hbWUubmFtZXNwYWNlYGAgaXMgdXNlZC4gSWYgdGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzbid0IHNwZWNpZmllZCwgdGhlIHBvcnQgbWFwcGluZyBuYW1lIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkIGluIGBgcG9ydE5hbWUubmFtZXNwYWNlYGAuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIG5hbWUgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIGEgZmV3IGNvbW1vbiBuYW1lcyBhcmUgYGBkYXRhYmFzZWBgLCBgYGRiYGAsIG9yIHRoZSBsb3dlcmNhc2UgbmFtZSBvZiBhIGRhdGFiYXNlLCBzdWNoIGFzIGBgbXlzcWxgYCBvciBgYHJlZGlzYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRG5zTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlzdGVuaW5nIHBvcnQgbnVtYmVyIGZvciB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LiBUaGlzIHBvcnQgaXMgYXZhaWxhYmxlIGluc2lkZSBvZiBhbGwgb2YgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2FtZSBuYW1lc3BhY2UuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIHBvcnQgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Qb3J0OiBudW1iZXJcbn1cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0VGxzQ29uZmlndXJhdGlvbiB7XG5Jc3N1ZXJDZXJ0aWZpY2F0ZUF1dGhvcml0eTogU2VydmljZUNvbm5lY3RUbHNDZXJ0aWZpY2F0ZUF1dGhvcml0eVxuLyoqXG4gKiBUaGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5LlxuICovXG5LbXNLZXk/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBTZXJ2aWNlIENvbm5lY3QgVExTLlxuICovXG5Sb2xlQXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBzaWduZXIgY2VydGlmaWNhdGUgYXV0aG9yaXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0VGxzQ2VydGlmaWNhdGVBdXRob3JpdHkge1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgY2VydGlmaWNhdGUuXG4gKi9cbkF3c1BjYUF1dGhvcml0eUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBMb2dDb25maWdgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1sb2ctZHJpdmVyYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgQnkgZGVmYXVsdCwgY29udGFpbmVycyB1c2UgdGhlIHNhbWUgbG9nZ2luZyBkcml2ZXIgdGhhdCB0aGUgRG9ja2VyIGRhZW1vbiB1c2VzLiBIb3dldmVyLCB0aGUgY29udGFpbmVyIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCBsb2dnaW5nIGRyaXZlciB0aGFuIHRoZSBEb2NrZXIgZGFlbW9uIGJ5IHNwZWNpZnlpbmcgYSBsb2cgZHJpdmVyIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGNvbnRhaW5lciBkZWZpbml0aW9uLlxuICogIFVuZGVyc3RhbmQgdGhlIGZvbGxvd2luZyB3aGVuIHNwZWNpZnlpbmcgYSBsb2cgY29uZmlndXJhdGlvbiBmb3IgeW91ciBjb250YWluZXJzLlxuICogICArICBBbWF6b24gRUNTIGN1cnJlbnRseSBzdXBwb3J0cyBhIHN1YnNldCBvZiB0aGUgbG9nZ2luZyBkcml2ZXJzIGF2YWlsYWJsZSB0byB0aGUgRG9ja2VyIGRhZW1vbi4gQWRkaXRpb25hbCBsb2cgZHJpdmVycyBtYXkgYmUgYXZhaWxhYmxlIGluIGZ1dHVyZSByZWxlYXNlcyBvZiB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQuXG4gKiAgRm9yIHRhc2tzIG9uIEZBUkdBVEVsb25nLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgdGFza3MgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBmbHVlbnRkYGAsIGBgZ2VsZmBgLCBgYGpzb24tZmlsZWBgLCBgYGpvdXJuYWxkYGAsYGBzeXNsb2dgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICAgKyAgVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE4IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLlxuICogICArICBGb3IgdGFza3MgdGhhdCBhcmUgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgbXVzdCByZWdpc3RlciB0aGUgYXZhaWxhYmxlIGxvZ2dpbmcgZHJpdmVycyB3aXRoIHRoZSBgYEVDU19BVkFJTEFCTEVfTE9HR0lOR19EUklWRVJTYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgYmVmb3JlIGNvbnRhaW5lcnMgcGxhY2VkIG9uIHRoYXQgaW5zdGFuY2UgY2FuIHVzZSB0aGVzZSBsb2cgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBjb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtYWdlbnQtY29uZmlnLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgKyAgRm9yIHRhc2tzIHRoYXQgYXJlIG9uIEZBUkdBVEVsb25nLCBiZWNhdXNlIHlvdSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSB5b3VyIHRhc2tzIGFyZSBob3N0ZWQgb24sIGFueSBhZGRpdGlvbmFsIHNvZnR3YXJlIG5lZWRlZCBtdXN0IGJlIGluc3RhbGxlZCBvdXRzaWRlIG9mIHRoZSB0YXNrLiBGb3IgZXhhbXBsZSwgdGhlIEZsdWVudGQgb3V0cHV0IGFnZ3JlZ2F0b3JzIG9yIGEgcmVtb3RlIGhvc3QgcnVubmluZyBMb2dzdGFzaCB0byBzZW5kIEdlbGYgbG9ncyB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIHNlY3JldHMgdG8gcGFzcyB0byB0aGUgbG9nIGNvbmZpZ3VyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgc2Vuc2l0aXZlIGRhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5TZWNyZXRPcHRpb25zPzogU2VjcmV0W11cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZW5kIHRvIHRoZSBsb2cgZHJpdmVyLlxuICogIFRoZSBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSBkZXBlbmQgb24gdGhlIGxvZyBkcml2ZXIuIFNvbWUgb2YgdGhlIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IHdoZW4geW91IHVzZSB0aGUgYGBhd3Nsb2dzYGAgbG9nIGRyaXZlciB0byByb3V0ZSBsb2dzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIGluY2x1ZGUgdGhlIGZvbGxvd2luZzpcbiAqICAgKyBhd3Nsb2dzLWNyZWF0ZS1ncm91cCBSZXF1aXJlZDogTm8gU3BlY2lmeSB3aGV0aGVyIHlvdSB3YW50IHRoZSBsb2cgZ3JvdXAgdG8gYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LiBJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGZhbHNlLiBZb3VyIElBTSBwb2xpY3kgbXVzdCBpbmNsdWRlIHRoZSBsb2dzOkNyZWF0ZUxvZ0dyb3VwIHBlcm1pc3Npb24gYmVmb3JlIHlvdSBhdHRlbXB0IHRvIHVzZSBhd3Nsb2dzLWNyZWF0ZS1ncm91cC4gKyBhd3Nsb2dzLXJlZ2lvbiBSZXF1aXJlZDogWWVzIFNwZWNpZnkgdGhlIFJlZ2lvbiB0aGF0IHRoZSBhd3Nsb2dzIGxvZyBkcml2ZXIgaXMgdG8gc2VuZCB5b3VyIERvY2tlciBsb2dzIHRvLiBZb3UgY2FuIGNob29zZSB0byBzZW5kIGFsbCBvZiB5b3VyIGxvZ3MgZnJvbSBjbHVzdGVycyBpbiBkaWZmZXJlbnQgUmVnaW9ucyB0byBhIHNpbmdsZSByZWdpb24gaW4gQ2xvdWRXYXRjaCBMb2dzLiBUaGlzIGlzIHNvIHRoYXQgdGhleSdyZSBhbGwgdmlzaWJsZSBpbiBvbmUgbG9jYXRpb24uIE90aGVyd2lzZSwgeW91IGNhbiBzZXBhcmF0ZSB0aGVtIGJ5IFJlZ2lvbiBmb3IgbW9yZSBncmFudWxhcml0eS4gTWFrZSBzdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBsb2cgZ3JvdXAgZXhpc3RzIGluIHRoZSBSZWdpb24gdGhhdCB5b3Ugc3BlY2lmeSB3aXRoIHRoaXMgb3B0aW9uLiArIGF3c2xvZ3MtZ3JvdXAgUmVxdWlyZWQ6IFllcyBNYWtlIHN1cmUgdG8gc3BlY2lmeSBhIGxvZyBncm91cCB0aGF0IHRoZSBhd3Nsb2dzIGxvZyBkcml2ZXIgc2VuZHMgaXRzIGxvZyBzdHJlYW1zIHRvLiArIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBSZXF1aXJlZDogWWVzLCB3aGVuIHVzaW5nIEZhcmdhdGUuT3B0aW9uYWwgd2hlbiB1c2luZyBFQzIuIFVzZSB0aGUgYXdzbG9ncy1zdHJlYW0tcHJlZml4IG9wdGlvbiB0byBhc3NvY2lhdGUgYSBsb2cgc3RyZWFtIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXgsIHRoZSBjb250YWluZXIgbmFtZSwgYW5kIHRoZSBJRCBvZiB0aGUgQW1hem9uIEVDUyB0YXNrIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLiBJZiB5b3Ugc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLCB0aGVuIHRoZSBsb2cgc3RyZWFtIHRha2VzIHRoZSBmb3JtYXQgcHJlZml4LW5hbWUvY29udGFpbmVyLW5hbWUvZWNzLXRhc2staWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24sIHRoZW4gdGhlIGxvZyBzdHJlYW0gaXMgbmFtZWQgYWZ0ZXIgdGhlIGNvbnRhaW5lciBJRCB0aGF0J3MgYXNzaWduZWQgYnkgdGhlIERvY2tlciBkYWVtb24gb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZS4gQmVjYXVzZSBpdCdzIGRpZmZpY3VsdCB0byB0cmFjZSBsb2dzIGJhY2sgdG8gdGhlIGNvbnRhaW5lciB0aGF0IHNlbnQgdGhlbSB3aXRoIGp1c3QgdGhlIERvY2tlciBjb250YWluZXIgSUQgKHdoaWNoIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UpLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3Ugc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLiBGb3IgQW1hem9uIEVDUyBzZXJ2aWNlcywgeW91IGNhbiB1c2UgdGhlIHNlcnZpY2UgbmFtZSBhcyB0aGUgcHJlZml4LiBEb2luZyBzbywgeW91IGNhbiB0cmFjZSBsb2cgc3RyZWFtcyB0byB0aGUgc2VydmljZSB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0bywgdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0aGF0IHNlbnQgdGhlbSwgYW5kIHRoZSBJRCBvZiB0aGUgdGFzayB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0by4gWW91IG11c3Qgc3BlY2lmeSBhIHN0cmVhbS1wcmVmaXggZm9yIHlvdXIgbG9ncyB0byBoYXZlIHlvdXIgbG9ncyBhcHBlYXIgaW4gdGhlIExvZyBwYW5lIHdoZW4gdXNpbmcgdGhlIEFtYXpvbiBFQ1MgY29uc29sZS4gKyBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBSZXF1aXJlZDogTm8gVGhpcyBvcHRpb24gZGVmaW5lcyBhIG11bHRpbGluZSBzdGFydCBwYXR0ZXJuIGluIFB5dGhvbiBzdHJmdGltZSBmb3JtYXQuIEEgbG9nIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybiBhbmQgYW55IGZvbGxvd2luZyBsaW5lcyB0aGF0IGRvbuKAmXQgbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZSBtYXRjaGVkIGxpbmUgaXMgdGhlIGRlbGltaXRlciBiZXR3ZWVuIGxvZyBtZXNzYWdlcy4gT25lIGV4YW1wbGUgb2YgYSB1c2UgY2FzZSBmb3IgdXNpbmcgdGhpcyBmb3JtYXQgaXMgZm9yIHBhcnNpbmcgb3V0cHV0IHN1Y2ggYXMgYSBzdGFjayBkdW1wLCB3aGljaCBtaWdodCBvdGhlcndpc2UgYmUgbG9nZ2VkIGluIG11bHRpcGxlIGVudHJpZXMuIFRoZSBjb3JyZWN0IHBhdHRlcm4gYWxsb3dzIGl0IHRvIGJlIGNhcHR1cmVkIGluIGEgc2luZ2xlIGVudHJ5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0LiBZb3UgY2Fubm90IGNvbmZpZ3VyZSBib3RoIHRoZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBhbmQgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBvcHRpb25zLiBNdWx0aWxpbmUgbG9nZ2luZyBwZXJmb3JtcyByZWd1bGFyIGV4cHJlc3Npb24gcGFyc2luZyBhbmQgbWF0Y2hpbmcgb2YgYWxsIGxvZyBtZXNzYWdlcy4gVGhpcyBtaWdodCBoYXZlIGEgbmVnYXRpdmUgaW1wYWN0IG9uIGxvZ2dpbmcgcGVyZm9ybWFuY2UuICsgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBSZXF1aXJlZDogTm8gVGhpcyBvcHRpb24gZGVmaW5lcyBhIG11bHRpbGluZSBzdGFydCBwYXR0ZXJuIHRoYXQgdXNlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnkgZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGhlIG1hdGNoZWQgbGluZSBpcyB0aGUgZGVsaW1pdGVyIGJldHdlZW4gbG9nIG1lc3NhZ2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4uIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgaXMgYWxzbyBjb25maWd1cmVkLiBZb3UgY2Fubm90IGNvbmZpZ3VyZSBib3RoIHRoZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBhbmQgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBvcHRpb25zLiBNdWx0aWxpbmUgbG9nZ2luZyBwZXJmb3JtcyByZWd1bGFyIGV4cHJlc3Npb24gcGFyc2luZyBhbmQgbWF0Y2hpbmcgb2YgYWxsIGxvZyBtZXNzYWdlcy4gVGhpcyBtaWdodCBoYXZlIGEgbmVnYXRpdmUgaW1wYWN0IG9uIGxvZ2dpbmcgcGVyZm9ybWFuY2UuIFxuICogIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcHBseSB0byBhbGwgc3VwcG9ydGVkIGxvZyBkcml2ZXJzLlxuICogICArIG1vZGUgUmVxdWlyZWQ6IE5vIFZhbGlkIHZhbHVlczogbm9uLWJsb2NraW5nIHwgYmxvY2tpbmcgVGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgZGVsaXZlcnkgbW9kZSBvZiBsb2cgbWVzc2FnZXMgZnJvbSB0aGUgY29udGFpbmVyIHRvIHRoZSBsb2cgZHJpdmVyIHNwZWNpZmllZCB1c2luZyBsb2dEcml2ZXIuIFRoZSBkZWxpdmVyeSBtb2RlIHlvdSBjaG9vc2UgYWZmZWN0cyBhcHBsaWNhdGlvbiBhdmFpbGFiaWxpdHkgd2hlbiB0aGUgZmxvdyBvZiBsb2dzIGZyb20gY29udGFpbmVyIGlzIGludGVycnVwdGVkLiBJZiB5b3UgdXNlIHRoZSBibG9ja2luZyBtb2RlIGFuZCB0aGUgZmxvdyBvZiBsb2dzIGlzIGludGVycnVwdGVkLCBjYWxscyBmcm9tIGNvbnRhaW5lciBjb2RlIHRvIHdyaXRlIHRvIHRoZSBzdGRvdXQgYW5kIHN0ZGVyciBzdHJlYW1zIHdpbGwgYmxvY2suIFRoZSBsb2dnaW5nIHRocmVhZCBvZiB0aGUgYXBwbGljYXRpb24gd2lsbCBibG9jayBhcyBhIHJlc3VsdC4gVGhpcyBtYXkgY2F1c2UgdGhlIGFwcGxpY2F0aW9uIHRvIGJlY29tZSB1bnJlc3BvbnNpdmUgYW5kIGxlYWQgdG8gY29udGFpbmVyIGhlYWx0aGNoZWNrIGZhaWx1cmUuIElmIHlvdSB1c2UgdGhlIG5vbi1ibG9ja2luZyBtb2RlLCB0aGUgY29udGFpbmVyJ3MgbG9ncyBhcmUgaW5zdGVhZCBzdG9yZWQgaW4gYW4gaW4tbWVtb3J5IGludGVybWVkaWF0ZSBidWZmZXIgY29uZmlndXJlZCB3aXRoIHRoZSBtYXgtYnVmZmVyLXNpemUgb3B0aW9uLiBUaGlzIHByZXZlbnRzIHRoZSBhcHBsaWNhdGlvbiBmcm9tIGJlY29taW5nIHVucmVzcG9uc2l2ZSB3aGVuIGxvZ3MgY2Fubm90IGJlIHNlbnQuIFdlIHJlY29tbWVuZCB1c2luZyB0aGlzIG1vZGUgaWYgeW91IHdhbnQgdG8gZW5zdXJlIHNlcnZpY2UgYXZhaWxhYmlsaXR5IGFuZCBhcmUgb2theSB3aXRoIHNvbWUgbG9nIGxvc3MuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUHJldmVudGluZyBsb2cgbG9zcyB3aXRoIG5vbi1ibG9ja2luZyBtb2RlIGluIHRoZSBhd3Nsb2dzIGNvbnRhaW5lciBsb2cgZHJpdmVyLiBZb3UgY2FuIHNldCBhIGRlZmF1bHQgbW9kZSBmb3IgYWxsIGNvbnRhaW5lcnMgaW4gYSBzcGVjaWZpYyBSZWdpb24gYnkgdXNpbmcgdGhlIGRlZmF1bHRMb2dEcml2ZXJNb2RlIGFjY291bnQgc2V0dGluZy4gSWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIG1vZGUgb3B0aW9uIG9yIGNvbmZpZ3VyZSB0aGUgYWNjb3VudCBzZXR0aW5nLCBBbWF6b24gRUNTIHdpbGwgZGVmYXVsdCB0byB0aGUgbm9uLWJsb2NraW5nIG1vZGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY2NvdW50IHNldHRpbmcsIHNlZSBEZWZhdWx0IGxvZyBkcml2ZXIgbW9kZSBpbiB0aGUgQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlLiBPbiBKdW5lIDI1LCAyMDI1LCBBbWF6b24gRUNTIGNoYW5nZWQgdGhlIGRlZmF1bHQgbG9nIGRyaXZlciBtb2RlIGZyb20gYmxvY2tpbmcgdG8gbm9uLWJsb2NraW5nIHRvIHByaW9yaXRpemUgdGFzayBhdmFpbGFiaWxpdHkgb3ZlciBsb2dnaW5nLiBUbyBjb250aW51ZSB1c2luZyB0aGUgYmxvY2tpbmcgbW9kZSBhZnRlciB0aGlzIGNoYW5nZSwgZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6IFNldCB0aGUgbW9kZSBvcHRpb24gaW4geW91ciBjb250YWluZXIgZGVmaW5pdGlvbidzIGxvZ0NvbmZpZ3VyYXRpb24gYXMgYmxvY2tpbmcuIFNldCB0aGUgZGVmYXVsdExvZ0RyaXZlck1vZGUgYWNjb3VudCBzZXR0aW5nIHRvIGJsb2NraW5nLiArIG1heC1idWZmZXItc2l6ZSBSZXF1aXJlZDogTm8gRGVmYXVsdCB2YWx1ZTogMW0gV2hlbiBub24tYmxvY2tpbmcgbW9kZSBpcyB1c2VkLCB0aGUgbWF4LWJ1ZmZlci1zaXplIGxvZyBvcHRpb24gY29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0aGF0J3MgdXNlZCBmb3IgaW50ZXJtZWRpYXRlIG1lc3NhZ2Ugc3RvcmFnZS4gTWFrZSBzdXJlIHRvIHNwZWNpZnkgYW4gYWRlcXVhdGUgYnVmZmVyIHNpemUgYmFzZWQgb24geW91ciBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgYnVmZmVyIGZpbGxzIHVwLCBmdXJ0aGVyIGxvZ3MgY2Fubm90IGJlIHN0b3JlZC4gTG9ncyB0aGF0IGNhbm5vdCBiZSBzdG9yZWQgYXJlIGxvc3QuIFxuICogIFRvIHJvdXRlIGxvZ3MgdXNpbmcgdGhlIGBgc3BsdW5rYGAgbG9nIHJvdXRlciwgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGBgc3BsdW5rLXRva2VuYGAgYW5kIGEgYGBzcGx1bmstdXJsYGAuXG4gKiAgV2hlbiB5b3UgdXNlIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIHJvdXRlciB0byByb3V0ZSBsb2dzIHRvIGFuIEFXUyBTZXJ2aWNlIG9yIEFXUyBQYXJ0bmVyIE5ldHdvcmsgZGVzdGluYXRpb24gZm9yIGxvZyBzdG9yYWdlIGFuZCBhbmFseXRpY3MsIHlvdSBjYW4gc2V0IHRoZSBgYGxvZy1kcml2ZXItYnVmZmVyLWxpbWl0YGAgb3B0aW9uIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgYXJlIGJ1ZmZlcmVkIGluIG1lbW9yeSwgYmVmb3JlIGJlaW5nIHNlbnQgdG8gdGhlIGxvZyByb3V0ZXIgY29udGFpbmVyLiBJdCBjYW4gaGVscCB0byByZXNvbHZlIHBvdGVudGlhbCBsb2cgbG9zcyBpc3N1ZSBiZWNhdXNlIGhpZ2ggdGhyb3VnaHB1dCBtaWdodCByZXN1bHQgaW4gbWVtb3J5IHJ1bm5pbmcgb3V0IGZvciB0aGUgYnVmZmVyIGluc2lkZSBvZiBEb2NrZXIuXG4gKiAgT3RoZXIgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB1c2luZyBgYGF3c2ZpcmVsZW5zYGAgdG8gcm91dGUgbG9ncyBkZXBlbmQgb24gdGhlIGRlc3RpbmF0aW9uLiBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gRGF0YSBGaXJlaG9zZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBBV1MgUmVnaW9uIHdpdGggYGByZWdpb25gYCBhbmQgYSBuYW1lIGZvciB0aGUgbG9nIHN0cmVhbSB3aXRoIGBgZGVsaXZlcnlfc3RyZWFtYGAuXG4gKiAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIEtpbmVzaXMgRGF0YSBTdHJlYW1zLCB5b3UgY2FuIHNwZWNpZnkgYW4gQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgZGF0YSBzdHJlYW0gbmFtZSB3aXRoIGBgc3RyZWFtYGAuXG4gKiAgIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UsIHlvdSBjYW4gc3BlY2lmeSBvcHRpb25zIGxpa2UgYGBOYW1lYGAsIGBgSG9zdGBgIChPcGVuU2VhcmNoIFNlcnZpY2UgZW5kcG9pbnQgd2l0aG91dCBwcm90b2NvbCksIGBgUG9ydGBgLCBgYEluZGV4YGAsIGBgVHlwZWBgLCBgYEF3c19hdXRoYGAsIGBgQXdzX3JlZ2lvbmBgLCBgYFN1cHByZXNzX1R5cGVfTmFtZWBgLCBhbmQgYGB0bHNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5kZXIgdGhlIGhvb2Q6IEZpcmVMZW5zIGZvciBBbWF6b24gRUNTIFRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29udGFpbmVycy91bmRlci10aGUtaG9vZC1maXJlbGVucy1mb3ItYW1hem9uLWVjcy10YXNrcy8pLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBTMywgeW91IGNhbiBzcGVjaWZ5IHRoZSBidWNrZXQgdXNpbmcgdGhlIGBgYnVja2V0YGAgb3B0aW9uLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBgYHJlZ2lvbmBgLCBgYHRvdGFsX2ZpbGVfc2l6ZWBgLCBgYHVwbG9hZF90aW1lb3V0YGAsIGFuZCBgYHVzZV9wdXRfb2JqZWN0YGAgYXMgb3B0aW9ucy5cbiAqICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTkgb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuIFRvIGNoZWNrIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSB2ZXJzaW9uIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLCBsb2cgaW4gdG8geW91ciBjb250YWluZXIgaW5zdGFuY2UgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6IGBgc3VkbyBkb2NrZXIgdmVyc2lvbiAtLWZvcm1hdCAne3suU2VydmVyLkFQSVZlcnNpb259fSdgYFxuICovXG5PcHRpb25zPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsfVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgZHJpdmVyIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lci5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCwgYGBzeXNsb2dgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3Nsb2dzYGAgbG9nIGRyaXZlciwgc2VlIFtTZW5kIEFtYXpvbiBFQ1MgbG9ncyB0byBDbG91ZFdhdGNoXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19hd3Nsb2dzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gYW4gc2VydmljZSBvciBQYXJ0bmVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19maXJlbGVucy5odG1sKS5cbiAqICAgSWYgeW91IGhhdmUgYSBjdXN0b20gZHJpdmVyIHRoYXQgaXNuJ3QgbGlzdGVkLCB5b3UgY2FuIGZvcmsgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IHByb2plY3QgdGhhdCdzIFthdmFpbGFibGUgb24gR2l0SHViXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hbWF6b24tZWNzLWFnZW50KSBhbmQgY3VzdG9taXplIGl0IHRvIHdvcmsgd2l0aCB0aGF0IGRyaXZlci4gV2UgZW5jb3VyYWdlIHlvdSB0byBzdWJtaXQgcHVsbCByZXF1ZXN0cyBmb3IgY2hhbmdlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgaW5jbHVkZWQuIEhvd2V2ZXIsIHdlIGRvbid0IGN1cnJlbnRseSBwcm92aWRlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgbW9kaWZpZWQgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuXG4gKi9cbkxvZ0RyaXZlcj86IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHlvdXIgY29udGFpbmVyLiBTZWNyZXRzIGNhbiBiZSBleHBvc2VkIHRvIGEgY29udGFpbmVyIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqICAgKyAgVG8gaW5qZWN0IHNlbnNpdGl2ZSBkYXRhIGludG8geW91ciBjb250YWluZXJzIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcywgdXNlIHRoZSBgYHNlY3JldHNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgICsgIFRvIHJlZmVyZW5jZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIGxvZyBjb25maWd1cmF0aW9uIG9mIGEgY29udGFpbmVyLCB1c2UgdGhlIGBgc2VjcmV0T3B0aW9uc2BgIGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlci5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0IHtcbi8qKlxuICogVGhlIHNlY3JldCB0byBleHBvc2UgdG8gdGhlIGNvbnRhaW5lci4gVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIGVpdGhlciB0aGUgZnVsbCBBUk4gb2YgdGhlIEFTTWxvbmcgc2VjcmV0IG9yIHRoZSBmdWxsIEFSTiBvZiB0aGUgcGFyYW1ldGVyIGluIHRoZSBTU00gUGFyYW1ldGVyIFN0b3JlLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWlyZSBJQU1sb25nIHBlcm1pc3Npb25zLCBzZWUgW1JlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIEVDUyBzZWNyZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLXNlY3JldHMuaHRtbCNzZWNyZXRzLWlhbSkgKGZvciBTZWNyZXRzIE1hbmFnZXIpIG9yIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1wYXJhbWV0ZXJzLmh0bWwpIChmb3IgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBzdG9yZSkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZSBwYXJhbWV0ZXIgZXhpc3RzIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB0aGUgdGFzayB5b3UncmUgbGF1bmNoaW5nLCB0aGVuIHlvdSBjYW4gdXNlIGVpdGhlciB0aGUgZnVsbCBBUk4gb3IgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLiBJZiB0aGUgcGFyYW1ldGVyIGV4aXN0cyBpbiBhIGRpZmZlcmVudCBSZWdpb24sIHRoZW4gdGhlIGZ1bGwgQVJOIG11c3QgYmUgc3BlY2lmaWVkLlxuICovXG5WYWx1ZUZyb206IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0LlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgc2VydmljZSB0aGF0IGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRhcmdldCBncm91cChzKSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNMYXR0aWNlQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuVGFyZ2V0R3JvdXBBcm46IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcG9ydCBtYXBwaW5nIHRvIHJlZ2lzdGVyIGluIHRoZSBWUEMgTGF0dGljZSB0YXJnZXQgZ3JvdXAuIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGBgcG9ydE1hcHBpbmdgYCB5b3UgZGVmaW5lZCBpbiB5b3VyIHRhc2sgZGVmaW5pdGlvbi5cbiAqL1xuUG9ydE5hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgdGhlIEFtYXpvbiBFQ1PigKggaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGUgdGhhdCBpcyB1c2VkIHRvIG1hbmFnZSB5b3VyIFZQQyBMYXR0aWNlIGluZnJhc3RydWN0dXJlLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLiBJZiBubyBkZXBsb3ltZW50IGNvbnRyb2xsZXIgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYEVDU2BgIGlzIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbnRyb2xsZXIge1xuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGUgdG8gdXNlLiBUaGVyZSBhcmUgdGhyZWUgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGVzIGF2YWlsYWJsZTpcbiAqICAgKyBFQ1MgVGhlIHJvbGxpbmcgdXBkYXRlIChFQ1MpIGRlcGxveW1lbnQgdHlwZSBpbnZvbHZlcyByZXBsYWNpbmcgdGhlIGN1cnJlbnQgcnVubmluZyB2ZXJzaW9uIG9mIHRoZSBjb250YWluZXIgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24uIFRoZSBudW1iZXIgb2YgY29udGFpbmVycyBBbWF6b24gRUNTIGFkZHMgb3IgcmVtb3ZlcyBmcm9tIHRoZSBzZXJ2aWNlIGR1cmluZyBhIHJvbGxpbmcgdXBkYXRlIGlzIGNvbnRyb2xsZWQgYnkgYWRqdXN0aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBoZWFsdGh5IHRhc2tzIGFsbG93ZWQgZHVyaW5nIGEgc2VydmljZSBkZXBsb3ltZW50LCBhcyBzcGVjaWZpZWQgaW4gdGhlIERlcGxveW1lbnRDb25maWd1cmF0aW9uLiArIENPREVfREVQTE9ZIFRoZSBibHVlL2dyZWVuIChDT0RFX0RFUExPWSkgZGVwbG95bWVudCB0eXBlIHVzZXMgdGhlIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBtb2RlbCBwb3dlcmVkIGJ5ICwgd2hpY2ggYWxsb3dzIHlvdSB0byB2ZXJpZnkgYSBuZXcgZGVwbG95bWVudCBvZiBhIHNlcnZpY2UgYmVmb3JlIHNlbmRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LiArIEVYVEVSTkFMIFRoZSBleHRlcm5hbCAoRVhURVJOQUwpIGRlcGxveW1lbnQgdHlwZSBlbmFibGVzIHlvdSB0byB1c2UgYW55IHRoaXJkLXBhcnR5IGRlcGxveW1lbnQgY29udHJvbGxlciBmb3IgZnVsbCBjb250cm9sIG92ZXIgdGhlIGRlcGxveW1lbnQgcHJvY2VzcyBmb3IgYW4gQW1hem9uIEVDUyBzZXJ2aWNlLlxuICovXG5UeXBlPzogKFwiQ09ERV9ERVBMT1lcIiB8IFwiRUNTXCIgfCBcIkVYVEVSTkFMXCIpXG59XG4vKipcbiAqIE9wdGlvbmFsIGRlcGxveW1lbnQgcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgaG93IG1hbnkgdGFza3MgcnVuIGR1cmluZyB0aGUgZGVwbG95bWVudCBhbmQgdGhlIG9yZGVyaW5nIG9mIHN0b3BwaW5nIGFuZCBzdGFydGluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q29uZmlndXJhdGlvbiB7XG5BbGFybXM/OiBEZXBsb3ltZW50QWxhcm1zXG5EZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXI/OiBEZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXJcbi8qKlxuICogSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLCB0aGUgYGBtYXhpbXVtUGVyY2VudGBgIHBhcmFtZXRlciByZXByZXNlbnRzIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBhcmUgYWxsb3dlZCBpbiB0aGUgYGBSVU5OSU5HYGAgb3IgYGBQRU5ESU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikuIFRoaXMgcGFyYW1ldGVyIGVuYWJsZXMgeW91IHRvIGRlZmluZSB0aGUgZGVwbG95bWVudCBiYXRjaCBzaXplLiBGb3IgZXhhbXBsZSwgaWYgeW91ciBzZXJ2aWNlIGlzIHVzaW5nIHRoZSBgYFJFUExJQ0FgYCBzZXJ2aWNlIHNjaGVkdWxlciBhbmQgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBvZiAyMDAlLCB0aGUgc2NoZWR1bGVyIG1heSBzdGFydCBmb3VyIG5ldyB0YXNrcyBiZWZvcmUgc3RvcHBpbmcgdGhlIGZvdXIgb2xkZXIgdGFza3MgKHByb3ZpZGVkIHRoYXQgdGhlIGNsdXN0ZXIgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIGRvIHRoaXMgYXJlIGF2YWlsYWJsZSkuIFRoZSBkZWZhdWx0IGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHVzaW5nIHRoZSBgYFJFUExJQ0FgYCBzZXJ2aWNlIHNjaGVkdWxlciBpcyAyMDAlLlxuICogIFRoZSBBbWF6b24gRUNTIHNjaGVkdWxlciB1c2VzIHRoaXMgcGFyYW1ldGVyIHRvIHJlcGxhY2UgdW5oZWFsdGh5IHRhc2tzIGJ5IHN0YXJ0aW5nIHJlcGxhY2VtZW50IHRhc2tzIGZpcnN0IGFuZCB0aGVuIHN0b3BwaW5nIHRoZSB1bmhlYWx0aHkgdGFza3MsIGFzIGxvbmcgYXMgY2x1c3RlciByZXNvdXJjZXMgZm9yIHN0YXJ0aW5nIHJlcGxhY2VtZW50IHRhc2tzIGFyZSBhdmFpbGFibGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgc2NoZWR1bGVyIHJlcGxhY2VzIHVuaGVhbHRoeSB0YXNrcywgc2VlIFtBbWF6b24gRUNTIHNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcywgYW5kIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdGhhdCB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaGFzIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUuXG4gKiAgIElmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzLCBhbmQgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1heGltdW0gcGVyY2VudCB2YWx1ZSBpcyBub3QgdXNlZC4gVGhlIHZhbHVlIGlzIHN0aWxsIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1heGltdW1QZXJjZW50PzogbnVtYmVyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgcmVwcmVzZW50cyBhIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBtdXN0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZXBsb3kgd2l0aG91dCB1c2luZyBhZGRpdGlvbmFsIGNsdXN0ZXIgY2FwYWNpdHkuIEZvciBleGFtcGxlLCBpZiB5b3VyIHNlcnZpY2UgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgb2YgNTAlLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgbWF5IHN0b3AgdHdvIGV4aXN0aW5nIHRhc2tzIHRvIGZyZWUgdXAgY2x1c3RlciBjYXBhY2l0eSBiZWZvcmUgc3RhcnRpbmcgdHdvIG5ldyB0YXNrcy4gXG4gKiAgIElmIGFueSB0YXNrcyBhcmUgdW5oZWFsdGh5IGFuZCBpZiBgYG1heGltdW1QZXJjZW50YGAgZG9lc24ndCBhbGxvdyB0aGUgQW1hem9uIEVDUyBzY2hlZHVsZXIgdG8gc3RhcnQgcmVwbGFjZW1lbnQgdGFza3MsIHRoZSBzY2hlZHVsZXIgc3RvcHMgdGhlIHVuaGVhbHRoeSB0YXNrcyBvbmUtYnktb25lIOKAlCB1c2luZyB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBhcyBhIGNvbnN0cmFpbnQg4oCUIHRvIGNsZWFyIHVwIGNhcGFjaXR5IHRvIGxhdW5jaCByZXBsYWNlbWVudCB0YXNrcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBzY2hlZHVsZXIgcmVwbGFjZXMgdW5oZWFsdGh5IHRhc2tzLCBzZWUgW0FtYXpvbiBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKSAuIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyBub3QqIHVzZSBhIGxvYWQgYmFsYW5jZXIsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIG5vdGVkOlxuICogICArICBBIHNlcnZpY2UgaXMgY29uc2lkZXJlZCBoZWFsdGh5IGlmIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHBhc3MgdGhlaXIgaGVhbHRoIGNoZWNrcy5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIDQwIHNlY29uZHMgYWZ0ZXIgYSB0YXNrIHJlYWNoZXMgYSBgYFJVTk5JTkdgYCBzdGF0ZSBiZWZvcmUgdGhlIHRhc2sgaXMgY291bnRlZCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBvbmUgb3IgbW9yZSBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIGl0IHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLiBBIHRhc2sgaXMgY29uc2lkZXJlZCBoZWFsdGh5IHdoZW4gYWxsIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGhpbiB0aGUgdGFzayBoYXZlIHBhc3NlZCB0aGVpciBoZWFsdGggY2hlY2tzLiBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGNhbiB3YWl0IGZvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb250YWluZXIgaGVhbHRoIGNoZWNrIHNldHRpbmdzLiBcbiAqICAgXG4gKiAgRm9yIHNlcnZpY2VzIHRoYXQgKmRvKiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICArICBJZiBhIHRhc2sgaGFzIGFuIGVzc2VudGlhbCBjb250YWluZXIgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciBib3RoIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYW5kIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICBcbiAqICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSByZXBsaWNhIHNlcnZpY2UgZm9yIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgaXMgMTAwJS4gVGhlIGRlZmF1bHQgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHVzaW5nIHRoZSBgYERBRU1PTmBgIHNlcnZpY2Ugc2NoZWR1bGUgaXMgMCUgZm9yIHRoZSBDTEksIHRoZSBBV1MgU0RLcywgYW5kIHRoZSBBUElzIGFuZCA1MCUgZm9yIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLlxuICogIFRoZSBtaW5pbXVtIG51bWJlciBvZiBoZWFsdGh5IHRhc2tzIGR1cmluZyBhIGRlcGxveW1lbnQgaXMgdGhlIGBgZGVzaXJlZENvdW50YGAgbXVsdGlwbGllZCBieSB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYC8xMDAsIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciB2YWx1ZS5cbiAqICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlICptaW5pbXVtIGhlYWx0aHkgcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHRoYXQgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGhhcyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLlxuICogICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQsIGFsdGhvdWdoIGl0IGlzIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1pbmltdW1IZWFsdGh5UGVyY2VudD86IG51bWJlclxufVxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgQ2xvdWRXYXRjaCBhbGFybXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudEFsYXJtcyB7XG4vKipcbiAqIE9uZSBvciBtb3JlIENsb3VkV2F0Y2ggYWxhcm0gbmFtZXMuIFVzZSBhIFwiLFwiIHRvIHNlcGFyYXRlIHRoZSBhbGFybXMuXG4gKi9cbkFsYXJtTmFtZXM6IHN0cmluZ1tdXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIENsb3VkV2F0Y2ggYWxhcm0gb3B0aW9uIGluIHRoZSBzZXJ2aWNlIGRlcGxveW1lbnQgcHJvY2Vzcy5cbiAqL1xuRW5hYmxlOiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBjb25maWd1cmUgQW1hem9uIEVDUyB0byByb2xsIGJhY2sgdGhlIHNlcnZpY2UgaWYgYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMuIElmIHJvbGxiYWNrIGlzIHVzZWQsIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICovXG5Sb2xsYmFjazogYm9vbGVhblxufVxuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIgY2FuIG9ubHkgYmUgdXNlZCBmb3Igc2VydmljZXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUuXG4gKiAgIFRoZSAqZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIqIGRldGVybWluZXMgd2hldGhlciBhIHNlcnZpY2UgZGVwbG95bWVudCB3aWxsIGZhaWwgaWYgdGhlIHNlcnZpY2UgY2FuJ3QgcmVhY2ggYSBzdGVhZHkgc3RhdGUuIElmIHlvdSB1c2UgdGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyLCBhIHNlcnZpY2UgZGVwbG95bWVudCB3aWxsIHRyYW5zaXRpb24gdG8gYSBmYWlsZWQgc3RhdGUgYW5kIHN0b3AgbGF1bmNoaW5nIG5ldyB0YXNrcy4gSWYgeW91IHVzZSB0aGUgcm9sbGJhY2sgb3B0aW9uLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUm9sbGluZyB1cGRhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZS1lY3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENpcmN1aXRCcmVha2VyIHtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIgbG9naWMgZm9yIHRoZSBzZXJ2aWNlLlxuICovXG5FbmFibGU6IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNvbmZpZ3VyZSBBbWF6b24gRUNTIHRvIHJvbGwgYmFjayB0aGUgc2VydmljZSBpZiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscy4gSWYgcm9sbGJhY2sgaXMgb24sIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICovXG5Sb2xsYmFjazogYm9vbGVhblxufVxuIl19
@@ -409,7 +409,7 @@ export interface ContainerDefinition {
409
409
  */
410
410
  ReadonlyRootFilesystem?: boolean;
411
411
  /**
412
- * The image used to start a container. This string is passed directly to the Docker daemon. By default, images in the Docker Hub registry are available. Other repositories are specified with either ``repository-url/image:tag`` or ``repository-url/image@digest``. Up to 255 letters (uppercase and lowercase), numbers, hyphens, underscores, colons, periods, forward slashes, and number signs are allowed. This parameter maps to ``Image`` in the docker container create command and the ``IMAGE`` parameter of docker run.
412
+ * The image used to start a container. This string is passed directly to the Docker daemon. By default, images in the Docker Hub registry are available. Other repositories are specified with either ``repository-url/image:tag`` or ``repository-url/image@digest``. For images using tags (repository-url/image:tag), up to 255 characters total are allowed, including letters (uppercase and lowercase), numbers, hyphens, underscores, colons, periods, forward slashes, and number signs (#). For images using digests (repository-url/image@digest), the 255 character limit applies only to the repository URL and image name (everything before the @ sign). The only supported hash function is sha256, and the hash value after sha256: must be exactly 64 characters (only letters A-F, a-f, and numbers 0-9 are allowed). This parameter maps to ``Image`` in the docker container create command and the ``IMAGE`` parameter of docker run.
413
413
  * + When a new task starts, the Amazon ECS container agent pulls the latest version of the specified image and tag for the container to use. However, subsequent updates to a repository image aren't propagated to already running tasks.
414
414
  * + Images in Amazon ECR repositories can be specified by either using the full ``registry/repository:tag`` or ``registry/repository@digest``. For example, ``012345678910.dkr.ecr.<region-name>.amazonaws.com/<repository-name>:latest`` or ``012345678910.dkr.ecr.<region-name>.amazonaws.com/<repository-name>@sha256:94afd1f2e64d908bc90dbca0035a5b567EXAMPLE``.
415
415
  * + Images in official repositories on Docker Hub use a single name (for example, ``ubuntu`` or ``mongo``).
@@ -535,7 +535,7 @@ export interface ContainerDefinition {
535
535
  * + Linux platform version ``1.3.0`` or later.
536
536
  * + Windows platform version ``1.0.0`` or later.
537
537
  *
538
- * If the task definition is used in a blue/green deployment that uses [AWS::CodeDeploy::DeploymentGroup BlueGreenDeploymentConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-bluegreendeploymentconfiguration.html), the ``dependsOn`` parameter is not supported. For more information see [Issue #680](https://docs.aws.amazon.com/https://github.com/aws-cloudformation/cloudformation-coverage-roadmap/issues/680) on the on the GitHub website.
538
+ * If the task definition is used in a blue/green deployment that uses [AWS::CodeDeploy::DeploymentGroup BlueGreenDeploymentConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-bluegreendeploymentconfiguration.html), the ``dependsOn`` parameter is not supported.
539
539
  */
540
540
  DependsOn?: ContainerDependency[];
541
541
  /**