@horietakehiro/aws-cdk-utul 0.41.21 → 0.41.23
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.
- package/lib/types/cfn-resource-types/aws-ec2-volume.d.ts +17 -16
- package/lib/types/cfn-resource-types/aws-ec2-volume.js +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +24 -3
- package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
- package/lib/types/cfn-resource-types/aws-ivs-stage.d.ts +37 -34
- package/lib/types/cfn-resource-types/aws-ivs-stage.js +1 -1
- package/package.json +1 -1
|
@@ -52,6 +52,7 @@ export interface _AWS_EC2_VOLUME {
|
|
|
52
52
|
OutpostArn?: string;
|
|
53
53
|
/**
|
|
54
54
|
* The ID of the Availability Zone in which to create the volume. For example, ``us-east-1a``.
|
|
55
|
+
* Either ``AvailabilityZone`` or ``AvailabilityZoneId`` must be specified, but not both.
|
|
55
56
|
*/
|
|
56
57
|
AvailabilityZone: string;
|
|
57
58
|
/**
|
|
@@ -71,10 +72,22 @@ export interface _AWS_EC2_VOLUME {
|
|
|
71
72
|
* This parameter is required for ``io1`` and ``io2`` volumes. The default for ``gp3`` volumes is 3,000 IOPS. This parameter is not supported for ``gp2``, ``st1``, ``sc1``, or ``standard`` volumes.
|
|
72
73
|
*/
|
|
73
74
|
Iops?: number;
|
|
75
|
+
/**
|
|
76
|
+
* Specifies the Amazon EBS Provisioned Rate for Volume Initialization (volume initialization rate), in MiB/s, at which to download the snapshot blocks from Amazon S3 to the volume. This is also known as *volume initialization*. Specifying a volume initialization rate ensures that the volume is initialized at a predictable and consistent rate after creation.
|
|
77
|
+
* This parameter is supported only for volumes created from snapshots. Omit this parameter if:
|
|
78
|
+
* + You want to create the volume using fast snapshot restore. You must specify a snapshot that is enabled for fast snapshot restore. In this case, the volume is fully initialized at creation.
|
|
79
|
+
* If you specify a snapshot that is enabled for fast snapshot restore and a volume initialization rate, the volume will be initialized at the specified rate instead of fast snapshot restore.
|
|
80
|
+
* + You want to create a volume that is initialized at the default rate.
|
|
81
|
+
*
|
|
82
|
+
* For more information, see [Initialize Amazon EBS volumes](https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html) in the *Amazon EC2 User Guide*.
|
|
83
|
+
* Valid range: 100 - 300 MiB/s
|
|
84
|
+
*/
|
|
85
|
+
VolumeInitializationRate?: number;
|
|
74
86
|
/**
|
|
75
87
|
* The snapshot from which to create the volume. You must specify either a snapshot ID or a volume size.
|
|
76
88
|
*/
|
|
77
89
|
SnapshotId?: string;
|
|
90
|
+
VolumeId?: string;
|
|
78
91
|
/**
|
|
79
92
|
* The volume type. This parameter can be one of the following values:
|
|
80
93
|
* + General Purpose SSD: ``gp2`` | ``gp3``
|
|
@@ -87,33 +100,21 @@ export interface _AWS_EC2_VOLUME {
|
|
|
87
100
|
* Default: ``gp2``
|
|
88
101
|
*/
|
|
89
102
|
VolumeType?: string;
|
|
90
|
-
VolumeId?: string;
|
|
91
103
|
/**
|
|
92
104
|
* The tags to apply to the volume during creation.
|
|
93
105
|
*/
|
|
94
106
|
Tags?: Tag[];
|
|
95
|
-
/**
|
|
96
|
-
* Specifies the Amazon EBS Provisioned Rate for Volume Initialization (volume initialization rate), in MiB/s, at which to download the snapshot blocks from Amazon S3 to the volume. This is also known as *volume initialization*. Specifying a volume initialization rate ensures that the volume is initialized at a predictable and consistent rate after creation.
|
|
97
|
-
* This parameter is supported only for volumes created from snapshots. Omit this parameter if:
|
|
98
|
-
* + You want to create the volume using fast snapshot restore. You must specify a snapshot that is enabled for fast snapshot restore. In this case, the volume is fully initialized at creation.
|
|
99
|
-
* If you specify a snapshot that is enabled for fast snapshot restore and a volume initialization rate, the volume will be initialized at the specified rate instead of fast snapshot restore.
|
|
100
|
-
* + You want to create a volume that is initialized at the default rate.
|
|
101
|
-
*
|
|
102
|
-
* For more information, see [Initialize Amazon EBS volumes](https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html) in the *Amazon EC2 User Guide*.
|
|
103
|
-
* Valid range: 100 - 300 MiB/s
|
|
104
|
-
*/
|
|
105
|
-
VolumeInitializationRate?: number;
|
|
106
107
|
}
|
|
107
108
|
/**
|
|
108
109
|
* Specifies a tag. For more information, see [Resource tags](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html).
|
|
109
110
|
*/
|
|
110
111
|
export interface Tag {
|
|
111
|
-
/**
|
|
112
|
-
* The tag key.
|
|
113
|
-
*/
|
|
114
|
-
Key: string;
|
|
115
112
|
/**
|
|
116
113
|
* The tag value.
|
|
117
114
|
*/
|
|
118
115
|
Value: string;
|
|
116
|
+
/**
|
|
117
|
+
* The tag key.
|
|
118
|
+
*/
|
|
119
|
+
Key: string;
|
|
119
120
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjMi12b2x1bWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtZWMyLXZvbHVtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTcGVjaWZpZXMgYW4gQW1hem9uIEVsYXN0aWMgQmxvY2sgU3RvcmUgKEFtYXpvbiBFQlMpIHZvbHVtZS5cbiAqICBXaGVuIHlvdSB1c2UgQ0ZObG9uZyB0byB1cGRhdGUgYW4gQW1hem9uIEVCUyB2b2x1bWUgdGhhdCBtb2RpZmllcyBgYElvcHNgYCwgYGBTaXplYGAsIG9yIGBgVm9sdW1lVHlwZWBgLCB0aGVyZSBpcyBhIGNvb2xkb3duIHBlcmlvZCBiZWZvcmUgYW5vdGhlciBvcGVyYXRpb24gY2FuIG9jY3VyLiBUaGlzIGNhbiBjYXVzZSB5b3VyIHN0YWNrIHRvIHJlcG9ydCBiZWluZyBpbiBgYFVQREFURV9JTl9QUk9HUkVTU2BgIG9yIGBgVVBEQVRFX1JPTExCQUNLX0lOX1BST0dSRVNTYGAgZm9yIGxvbmcgcGVyaW9kcyBvZiB0aW1lLlxuICogIEFtYXpvbiBFQlMgZG9lcyBub3Qgc3VwcG9ydCBzaXppbmcgZG93biBhbiBBbWF6b24gRUJTIHZvbHVtZS4gQ0ZObG9uZyBkb2VzIG5vdCBhdHRlbXB0IHRvIG1vZGlmeSBhbiBBbWF6b24gRUJTIHZvbHVtZSB0byBhIHNtYWxsZXIgc2l6ZSBvbiByb2xsYmFjay5cbiAqICBTb21lIGNvbW1vbiBzY2VuYXJpb3Mgd2hlbiB5b3UgbWlnaHQgZW5jb3VudGVyIGEgY29vbGRvd24gcGVyaW9kIGZvciBBbWF6b24gRUJTIGluY2x1ZGU6XG4gKiAgICsgIFlvdSBzdWNjZXNzZnVsbHkgdXBkYXRlIGFuIEFtYXpvbiBFQlMgdm9sdW1lIGFuZCB0aGUgdXBkYXRlIHN1Y2NlZWRzLiBXaGVuIHlvdSBhdHRlbXB0IGFub3RoZXIgdXBkYXRlIHdpdGhpbiB0aGUgY29vbGRvd24gd2luZG93LCB0aGF0IHVwZGF0ZSB3aWxsIGJlIHN1YmplY3QgdG8gYSBjb29sZG93biBwZXJpb2QuXG4gKiAgICsgIFlvdSBzdWNjZXNzZnVsbHkgdXBkYXRlIGFuIEFtYXpvbiBFQlMgdm9sdW1lIGFuZCB0aGUgdXBkYXRlIHN1Y2NlZWRzIGJ1dCBhbm90aGVyIGNoYW5nZSBpbiB5b3VyIGBgdXBkYXRlLXN0YWNrYGAgY2FsbCBmYWlscy4gVGhlIHJvbGxiYWNrIHdpbGwgYmUgc3ViamVjdCB0byBhIGNvb2xkb3duIHBlcmlvZC5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVxdWlyZW1lbnRzIGZvciBFQlMgdm9sdW1lIG1vZGlmaWNhdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9tb2RpZnktdm9sdW1lLXJlcXVpcmVtZW50cy5odG1sKS5cbiAqICAgKkRlbGV0aW9uUG9saWN5IGF0dHJpYnV0ZSogXG4gKiAgVG8gY29udHJvbCBob3cgQ0ZObG9uZyBoYW5kbGVzIHRoZSB2b2x1bWUgd2hlbiB0aGUgc3RhY2sgaXMgZGVsZXRlZCwgc2V0IGEgZGVsZXRpb24gcG9saWN5IGZvciB5b3VyIHZvbHVtZS4gWW91IGNhbiBjaG9vc2UgdG8gcmV0YWluIHRoZSB2b2x1bWUsIHRvIGRlbGV0ZSB0aGUgdm9sdW1lLCBvciB0byBjcmVhdGUgYSBzbmFwc2hvdCBvZiB0aGUgdm9sdW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtEZWxldGlvblBvbGljeSBhdHRyaWJ1dGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1hdHRyaWJ1dGUtZGVsZXRpb25wb2xpY3kuaHRtbCkuXG4gKiAgIElmIHlvdSBzZXQgYSBkZWxldGlvbiBwb2xpY3kgdGhhdCBjcmVhdGVzIGEgc25hcHNob3QsIGFsbCB0YWdzIG9uIHRoZSB2b2x1bWUgYXJlIGluY2x1ZGVkIGluIHRoZSBzbmFwc2hvdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDMl9WT0xVTUUge1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciBBbWF6b24gRUJTIE11bHRpLUF0dGFjaCBpcyBlbmFibGVkLlxuICogIENGTmxvbmcgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdXBkYXRpbmcgYSBzaW5nbGUtYXR0YWNoIHZvbHVtZSB0byBiZSBtdWx0aS1hdHRhY2ggZW5hYmxlZCwgdXBkYXRpbmcgYSBtdWx0aS1hdHRhY2ggZW5hYmxlZCB2b2x1bWUgdG8gYmUgc2luZ2xlLWF0dGFjaCwgb3IgdXBkYXRpbmcgdGhlIHNpemUgb3IgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpIG9mIGEgbXVsdGktYXR0YWNoIGVuYWJsZWQgdm9sdW1lLlxuICovXG5NdWx0aUF0dGFjaEVuYWJsZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBrbXMta2V5LWxvbmcgdG8gdXNlIGZvciBBbWF6b24gRUJTIGVuY3J5cHRpb24uIElmIGBgS21zS2V5SWRgYCBpcyBzcGVjaWZpZWQsIHRoZSBlbmNyeXB0ZWQgc3RhdGUgbXVzdCBiZSBgYHRydWVgYC5cbiAqICBJZiB5b3Ugb21pdCB0aGlzIHByb3BlcnR5IGFuZCB5b3VyIGFjY291bnQgaXMgZW5hYmxlZCBmb3IgZW5jcnlwdGlvbiBieSBkZWZhdWx0LCBvciAqRW5jcnlwdGVkKiBpcyBzZXQgdG8gYGB0cnVlYGAsIHRoZW4gdGhlIHZvbHVtZSBpcyBlbmNyeXB0ZWQgdXNpbmcgdGhlIGRlZmF1bHQga2V5IHNwZWNpZmllZCBmb3IgeW91ciBhY2NvdW50LiBJZiB5b3VyIGFjY291bnQgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQga2V5LCB0aGVuIHRoZSB2b2x1bWUgaXMgZW5jcnlwdGVkIHVzaW5nIHRoZSBhd3MtbWFuYWdlZC1rZXkuXG4gKiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IHdhbnQgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBrZXksIHlvdSBjYW4gc3BlY2lmeSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAqICAgKyAgS2V5IElELiBGb3IgZXhhbXBsZSwgMTIzNGFiY2QtMTJhYi0zNGNkLTU2ZWYtMTIzNDU2Nzg5MGFiLlxuICogICArICBLZXkgYWxpYXMuIFNwZWNpZnkgdGhlIGFsaWFzIGZvciB0aGUga2V5LCBwcmVmaXhlZCB3aXRoIGBgYWxpYXMvYGAuIEZvciBleGFtcGxlLCBmb3IgYSBrZXkgd2l0aCB0aGUgYWxpYXMgYGBteV9jbWtgYCwgdXNlIGBgYWxpYXMvbXlfY21rYGAuIE9yIHRvIHNwZWNpZnkgdGhlIGF3cy1tYW5hZ2VkLWtleSwgdXNlIGBgYWxpYXMvYXdzL2Vic2BgLlxuICogICArICBLZXkgQVJOLiBGb3IgZXhhbXBsZSwgYXJuOmF3czprbXM6dXMtZWFzdC0xOjAxMjM0NTY3ODkxMDprZXkvMTIzNGFiY2QtMTJhYi0zNGNkLTU2ZWYtMTIzNDU2Nzg5MGFiLlxuICogICArICBBbGlhcyBBUk4uIEZvciBleGFtcGxlLCBhcm46YXdzOmttczp1cy1lYXN0LTE6MDEyMzQ1Njc4OTEwOmFsaWFzL0V4YW1wbGVBbGlhcy5cbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZvbHVtZSBzaG91bGQgYmUgZW5jcnlwdGVkLiBUaGUgZWZmZWN0IG9mIHNldHRpbmcgdGhlIGVuY3J5cHRpb24gc3RhdGUgdG8gYGB0cnVlYGAgZGVwZW5kcyBvbiB0aGUgdm9sdW1lIG9yaWdpbiAobmV3IG9yIGZyb20gYSBzbmFwc2hvdCksIHN0YXJ0aW5nIGVuY3J5cHRpb24gc3RhdGUsIG93bmVyc2hpcCwgYW5kIHdoZXRoZXIgZW5jcnlwdGlvbiBieSBkZWZhdWx0IGlzIGVuYWJsZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0VuY3J5cHRpb24gYnkgZGVmYXVsdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL3dvcmstd2l0aC1lYnMtZW5jci5odG1sI2VuY3J5cHRpb24tYnktZGVmYXVsdCkgaW4gdGhlICpBbWF6b24gRUJTIFVzZXIgR3VpZGUqLlxuICogIEVuY3J5cHRlZCBBbWF6b24gRUJTIHZvbHVtZXMgbXVzdCBiZSBhdHRhY2hlZCB0byBpbnN0YW5jZXMgdGhhdCBzdXBwb3J0IEFtYXpvbiBFQlMgZW5jcnlwdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3VwcG9ydGVkIGluc3RhbmNlIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvZWJzLWVuY3J5cHRpb24tcmVxdWlyZW1lbnRzLmh0bWwjZWJzLWVuY3J5cHRpb25fc3VwcG9ydGVkX2luc3RhbmNlcykuXG4gKi9cbkVuY3J5cHRlZD86IGJvb2xlYW5cbi8qKlxuICogVGhlIHNpemUgb2YgdGhlIHZvbHVtZSwgaW4gR2lCcy4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLiBJZiB5b3Ugc3BlY2lmeSBhIHNuYXBzaG90LCB0aGUgZGVmYXVsdCBpcyB0aGUgc25hcHNob3Qgc2l6ZS4gWW91IGNhbiBzcGVjaWZ5IGEgdm9sdW1lIHNpemUgdGhhdCBpcyBlcXVhbCB0byBvciBsYXJnZXIgdGhhbiB0aGUgc25hcHNob3Qgc2l6ZS5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZXMgc2l6ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGU6XG4gKiAgICsgIGBgZ3AyYGAgYW5kIGBgZ3AzYGA6IDEgLSAxNiwzODQgR2lCXG4gKiAgICsgIGBgaW8xYGA6IDQgLSAxNiwzODQgR2lCXG4gKiAgICsgIGBgaW8yYGA6IDQgLSA2NSw1MzYgR2lCXG4gKiAgICsgIGBgc3QxYGAgYW5kIGBgc2MxYGA6IDEyNSAtIDE2LDM4NCBHaUJcbiAqICAgKyAgYGBzdGFuZGFyZGBgOiAxIC0gMTAyNCBHaUJcbiAqL1xuU2l6ZT86IG51bWJlclxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIGlzIGF1dG8tZW5hYmxlZCBmb3IgSS9PIG9wZXJhdGlvbnMuIEJ5IGRlZmF1bHQsIEFtYXpvbiBFQlMgZGlzYWJsZXMgSS9PIHRvIHRoZSB2b2x1bWUgZnJvbSBhdHRhY2hlZCBFQzIgaW5zdGFuY2VzIHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGF0IGEgdm9sdW1lJ3MgZGF0YSBpcyBwb3RlbnRpYWxseSBpbmNvbnNpc3RlbnQuIElmIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgdm9sdW1lIGlzIG5vdCBhIGNvbmNlcm4sIGFuZCB5b3UgcHJlZmVyIHRoYXQgdGhlIHZvbHVtZSBiZSBtYWRlIGF2YWlsYWJsZSBpbW1lZGlhdGVseSBpZiBpdCdzIGltcGFpcmVkLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUgdm9sdW1lIHRvIGF1dG9tYXRpY2FsbHkgZW5hYmxlIEkvTy5cbiAqL1xuQXV0b0VuYWJsZUlPPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIE91dHBvc3QuXG4gKi9cbk91dHBvc3RBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSBBdmFpbGFiaWxpdHkgWm9uZSBpbiB3aGljaCB0byBjcmVhdGUgdGhlIHZvbHVtZS4gRm9yIGV4YW1wbGUsIGBgdXMtZWFzdC0xYWBgLlxuICovXG5BdmFpbGFiaWxpdHlab25lOiBzdHJpbmdcbi8qKlxuICogVGhlIHRocm91Z2hwdXQgdG8gcHJvdmlzaW9uIGZvciBhIHZvbHVtZSwgd2l0aCBhIG1heGltdW0gb2YgMSwwMDAgTWlCL3MuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgaXMgdmFsaWQgb25seSBmb3IgYGBncDNgYCB2b2x1bWVzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMjUuXG4gKiAgVmFsaWQgUmFuZ2U6IE1pbmltdW0gdmFsdWUgb2YgMTI1LiBNYXhpbXVtIHZhbHVlIG9mIDEwMDAuXG4gKi9cblRocm91Z2hwdXQ/OiBudW1iZXJcbi8qKlxuICogVGhlIG51bWJlciBvZiBJL08gb3BlcmF0aW9ucyBwZXIgc2Vjb25kIChJT1BTKS4gRm9yIGBgZ3AzYGAsIGBgaW8xYGAsIGFuZCBgYGlvMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIElPUFMgdGhhdCBhcmUgcHJvdmlzaW9uZWQgZm9yIHRoZSB2b2x1bWUuIEZvciBgYGdwMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgYmFzZWxpbmUgcGVyZm9ybWFuY2Ugb2YgdGhlIHZvbHVtZSBhbmQgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIHZvbHVtZSBhY2N1bXVsYXRlcyBJL08gY3JlZGl0cyBmb3IgYnVyc3RpbmcuXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGU6XG4gKiAgICsgIGBgZ3AzYGA6IDMsMDAwIC0gMTYsMDAwIElPUFNcbiAqICAgKyAgYGBpbzFgYDogMTAwIC0gNjQsMDAwIElPUFNcbiAqICAgKyAgYGBpbzJgYDogMTAwIC0gMjU2LDAwMCBJT1BTXG4gKiAgIFxuICogIEZvciBgYGlvMmBgIHZvbHVtZXMsIHlvdSBjYW4gYWNoaWV2ZSB1cCB0byAyNTYsMDAwIElPUFMgb24gW2luc3RhbmNlcyBidWlsdCBvbiB0aGUgTml0cm8gU3lzdGVtXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWMyL2xhdGVzdC9pbnN0YW5jZXR5cGVzL2VjMi1uaXRyby1pbnN0YW5jZXMuaHRtbCkuIE9uIG90aGVyIGluc3RhbmNlcywgeW91IGNhbiBhY2hpZXZlIHBlcmZvcm1hbmNlIHVwIHRvIDMyLDAwMCBJT1BTLlxuICogIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciBgYGlvMWBgIGFuZCBgYGlvMmBgIHZvbHVtZXMuIFRoZSBkZWZhdWx0IGZvciBgYGdwM2BgIHZvbHVtZXMgaXMgMywwMDAgSU9QUy4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgYGBncDJgYCwgYGBzdDFgYCwgYGBzYzFgYCwgb3IgYGBzdGFuZGFyZGBgIHZvbHVtZXMuXG4gKi9cbklvcHM/OiBudW1iZXJcbi8qKlxuICogVGhlIHNuYXBzaG90IGZyb20gd2hpY2ggdG8gY3JlYXRlIHRoZSB2b2x1bWUuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgc25hcHNob3QgSUQgb3IgYSB2b2x1bWUgc2l6ZS5cbiAqL1xuU25hcHNob3RJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdm9sdW1lIHR5cGUuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSBTU0Q6IGBgZ3AyYGAgfCBgYGdwM2BgXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgU1NEOiBgYGlvMWBgIHwgYGBpbzJgYFxuICogICArICBUaHJvdWdocHV0IE9wdGltaXplZCBIREQ6IGBgc3QxYGBcbiAqICAgKyAgQ29sZCBIREQ6IGBgc2MxYGBcbiAqICAgKyAgTWFnbmV0aWM6IGBgc3RhbmRhcmRgYFxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUJTIHZvbHVtZSB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbCkuXG4gKiAgRGVmYXVsdDogYGBncDJgYFxuICovXG5Wb2x1bWVUeXBlPzogc3RyaW5nXG5Wb2x1bWVJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgdm9sdW1lIGR1cmluZyBjcmVhdGlvbi5cbiAqL1xuVGFncz86IFRhZ1tdXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgQW1hem9uIEVCUyBQcm92aXNpb25lZCBSYXRlIGZvciBWb2x1bWUgSW5pdGlhbGl6YXRpb24gKHZvbHVtZSBpbml0aWFsaXphdGlvbiByYXRlKSwgaW4gTWlCL3MsIGF0IHdoaWNoIHRvIGRvd25sb2FkIHRoZSBzbmFwc2hvdCBibG9ja3MgZnJvbSBBbWF6b24gUzMgdG8gdGhlIHZvbHVtZS4gVGhpcyBpcyBhbHNvIGtub3duIGFzICp2b2x1bWUgaW5pdGlhbGl6YXRpb24qLiBTcGVjaWZ5aW5nIGEgdm9sdW1lIGluaXRpYWxpemF0aW9uIHJhdGUgZW5zdXJlcyB0aGF0IHRoZSB2b2x1bWUgaXMgaW5pdGlhbGl6ZWQgYXQgYSBwcmVkaWN0YWJsZSBhbmQgY29uc2lzdGVudCByYXRlIGFmdGVyIGNyZWF0aW9uLlxuICogIFRoaXMgcGFyYW1ldGVyIGlzIHN1cHBvcnRlZCBvbmx5IGZvciB2b2x1bWVzIGNyZWF0ZWQgZnJvbSBzbmFwc2hvdHMuIE9taXQgdGhpcyBwYXJhbWV0ZXIgaWY6XG4gKiAgICsgIFlvdSB3YW50IHRvIGNyZWF0ZSB0aGUgdm9sdW1lIHVzaW5nIGZhc3Qgc25hcHNob3QgcmVzdG9yZS4gWW91IG11c3Qgc3BlY2lmeSBhIHNuYXBzaG90IHRoYXQgaXMgZW5hYmxlZCBmb3IgZmFzdCBzbmFwc2hvdCByZXN0b3JlLiBJbiB0aGlzIGNhc2UsIHRoZSB2b2x1bWUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uXG4gKiAgIElmIHlvdSBzcGVjaWZ5IGEgc25hcHNob3QgdGhhdCBpcyBlbmFibGVkIGZvciBmYXN0IHNuYXBzaG90IHJlc3RvcmUgYW5kIGEgdm9sdW1lIGluaXRpYWxpemF0aW9uIHJhdGUsIHRoZSB2b2x1bWUgd2lsbCBiZSBpbml0aWFsaXplZCBhdCB0aGUgc3BlY2lmaWVkIHJhdGUgaW5zdGVhZCBvZiBmYXN0IHNuYXBzaG90IHJlc3RvcmUuXG4gKiAgICArICBZb3Ugd2FudCB0byBjcmVhdGUgYSB2b2x1bWUgdGhhdCBpcyBpbml0aWFsaXplZCBhdCB0aGUgZGVmYXVsdCByYXRlLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJbml0aWFsaXplIEFtYXpvbiBFQlMgdm9sdW1lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2luaXRhbGl6ZS12b2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUqLlxuICogIFZhbGlkIHJhbmdlOiAxMDAgLSAzMDAgTWlCL3NcbiAqL1xuVm9sdW1lSW5pdGlhbGl6YXRpb25SYXRlPzogbnVtYmVyXG59XG4vKipcbiAqIFNwZWNpZmllcyBhIHRhZy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzb3VyY2UgdGFnc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmVzb3VyY2UtdGFncy5odG1sKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUgdGFnIGtleS5cbiAqL1xuS2V5OiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZyB2YWx1ZS5cbiAqL1xuVmFsdWU6IHN0cmluZ1xufVxuIl19
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjMi12b2x1bWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtZWMyLXZvbHVtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTcGVjaWZpZXMgYW4gQW1hem9uIEVsYXN0aWMgQmxvY2sgU3RvcmUgKEFtYXpvbiBFQlMpIHZvbHVtZS5cbiAqICBXaGVuIHlvdSB1c2UgQ0ZObG9uZyB0byB1cGRhdGUgYW4gQW1hem9uIEVCUyB2b2x1bWUgdGhhdCBtb2RpZmllcyBgYElvcHNgYCwgYGBTaXplYGAsIG9yIGBgVm9sdW1lVHlwZWBgLCB0aGVyZSBpcyBhIGNvb2xkb3duIHBlcmlvZCBiZWZvcmUgYW5vdGhlciBvcGVyYXRpb24gY2FuIG9jY3VyLiBUaGlzIGNhbiBjYXVzZSB5b3VyIHN0YWNrIHRvIHJlcG9ydCBiZWluZyBpbiBgYFVQREFURV9JTl9QUk9HUkVTU2BgIG9yIGBgVVBEQVRFX1JPTExCQUNLX0lOX1BST0dSRVNTYGAgZm9yIGxvbmcgcGVyaW9kcyBvZiB0aW1lLlxuICogIEFtYXpvbiBFQlMgZG9lcyBub3Qgc3VwcG9ydCBzaXppbmcgZG93biBhbiBBbWF6b24gRUJTIHZvbHVtZS4gQ0ZObG9uZyBkb2VzIG5vdCBhdHRlbXB0IHRvIG1vZGlmeSBhbiBBbWF6b24gRUJTIHZvbHVtZSB0byBhIHNtYWxsZXIgc2l6ZSBvbiByb2xsYmFjay5cbiAqICBTb21lIGNvbW1vbiBzY2VuYXJpb3Mgd2hlbiB5b3UgbWlnaHQgZW5jb3VudGVyIGEgY29vbGRvd24gcGVyaW9kIGZvciBBbWF6b24gRUJTIGluY2x1ZGU6XG4gKiAgICsgIFlvdSBzdWNjZXNzZnVsbHkgdXBkYXRlIGFuIEFtYXpvbiBFQlMgdm9sdW1lIGFuZCB0aGUgdXBkYXRlIHN1Y2NlZWRzLiBXaGVuIHlvdSBhdHRlbXB0IGFub3RoZXIgdXBkYXRlIHdpdGhpbiB0aGUgY29vbGRvd24gd2luZG93LCB0aGF0IHVwZGF0ZSB3aWxsIGJlIHN1YmplY3QgdG8gYSBjb29sZG93biBwZXJpb2QuXG4gKiAgICsgIFlvdSBzdWNjZXNzZnVsbHkgdXBkYXRlIGFuIEFtYXpvbiBFQlMgdm9sdW1lIGFuZCB0aGUgdXBkYXRlIHN1Y2NlZWRzIGJ1dCBhbm90aGVyIGNoYW5nZSBpbiB5b3VyIGBgdXBkYXRlLXN0YWNrYGAgY2FsbCBmYWlscy4gVGhlIHJvbGxiYWNrIHdpbGwgYmUgc3ViamVjdCB0byBhIGNvb2xkb3duIHBlcmlvZC5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVxdWlyZW1lbnRzIGZvciBFQlMgdm9sdW1lIG1vZGlmaWNhdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9tb2RpZnktdm9sdW1lLXJlcXVpcmVtZW50cy5odG1sKS5cbiAqICAgKkRlbGV0aW9uUG9saWN5IGF0dHJpYnV0ZSogXG4gKiAgVG8gY29udHJvbCBob3cgQ0ZObG9uZyBoYW5kbGVzIHRoZSB2b2x1bWUgd2hlbiB0aGUgc3RhY2sgaXMgZGVsZXRlZCwgc2V0IGEgZGVsZXRpb24gcG9saWN5IGZvciB5b3VyIHZvbHVtZS4gWW91IGNhbiBjaG9vc2UgdG8gcmV0YWluIHRoZSB2b2x1bWUsIHRvIGRlbGV0ZSB0aGUgdm9sdW1lLCBvciB0byBjcmVhdGUgYSBzbmFwc2hvdCBvZiB0aGUgdm9sdW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtEZWxldGlvblBvbGljeSBhdHRyaWJ1dGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1hdHRyaWJ1dGUtZGVsZXRpb25wb2xpY3kuaHRtbCkuXG4gKiAgIElmIHlvdSBzZXQgYSBkZWxldGlvbiBwb2xpY3kgdGhhdCBjcmVhdGVzIGEgc25hcHNob3QsIGFsbCB0YWdzIG9uIHRoZSB2b2x1bWUgYXJlIGluY2x1ZGVkIGluIHRoZSBzbmFwc2hvdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDMl9WT0xVTUUge1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciBBbWF6b24gRUJTIE11bHRpLUF0dGFjaCBpcyBlbmFibGVkLlxuICogIENGTmxvbmcgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdXBkYXRpbmcgYSBzaW5nbGUtYXR0YWNoIHZvbHVtZSB0byBiZSBtdWx0aS1hdHRhY2ggZW5hYmxlZCwgdXBkYXRpbmcgYSBtdWx0aS1hdHRhY2ggZW5hYmxlZCB2b2x1bWUgdG8gYmUgc2luZ2xlLWF0dGFjaCwgb3IgdXBkYXRpbmcgdGhlIHNpemUgb3IgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpIG9mIGEgbXVsdGktYXR0YWNoIGVuYWJsZWQgdm9sdW1lLlxuICovXG5NdWx0aUF0dGFjaEVuYWJsZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBrbXMta2V5LWxvbmcgdG8gdXNlIGZvciBBbWF6b24gRUJTIGVuY3J5cHRpb24uIElmIGBgS21zS2V5SWRgYCBpcyBzcGVjaWZpZWQsIHRoZSBlbmNyeXB0ZWQgc3RhdGUgbXVzdCBiZSBgYHRydWVgYC5cbiAqICBJZiB5b3Ugb21pdCB0aGlzIHByb3BlcnR5IGFuZCB5b3VyIGFjY291bnQgaXMgZW5hYmxlZCBmb3IgZW5jcnlwdGlvbiBieSBkZWZhdWx0LCBvciAqRW5jcnlwdGVkKiBpcyBzZXQgdG8gYGB0cnVlYGAsIHRoZW4gdGhlIHZvbHVtZSBpcyBlbmNyeXB0ZWQgdXNpbmcgdGhlIGRlZmF1bHQga2V5IHNwZWNpZmllZCBmb3IgeW91ciBhY2NvdW50LiBJZiB5b3VyIGFjY291bnQgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQga2V5LCB0aGVuIHRoZSB2b2x1bWUgaXMgZW5jcnlwdGVkIHVzaW5nIHRoZSBhd3MtbWFuYWdlZC1rZXkuXG4gKiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IHdhbnQgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBrZXksIHlvdSBjYW4gc3BlY2lmeSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAqICAgKyAgS2V5IElELiBGb3IgZXhhbXBsZSwgMTIzNGFiY2QtMTJhYi0zNGNkLTU2ZWYtMTIzNDU2Nzg5MGFiLlxuICogICArICBLZXkgYWxpYXMuIFNwZWNpZnkgdGhlIGFsaWFzIGZvciB0aGUga2V5LCBwcmVmaXhlZCB3aXRoIGBgYWxpYXMvYGAuIEZvciBleGFtcGxlLCBmb3IgYSBrZXkgd2l0aCB0aGUgYWxpYXMgYGBteV9jbWtgYCwgdXNlIGBgYWxpYXMvbXlfY21rYGAuIE9yIHRvIHNwZWNpZnkgdGhlIGF3cy1tYW5hZ2VkLWtleSwgdXNlIGBgYWxpYXMvYXdzL2Vic2BgLlxuICogICArICBLZXkgQVJOLiBGb3IgZXhhbXBsZSwgYXJuOmF3czprbXM6dXMtZWFzdC0xOjAxMjM0NTY3ODkxMDprZXkvMTIzNGFiY2QtMTJhYi0zNGNkLTU2ZWYtMTIzNDU2Nzg5MGFiLlxuICogICArICBBbGlhcyBBUk4uIEZvciBleGFtcGxlLCBhcm46YXdzOmttczp1cy1lYXN0LTE6MDEyMzQ1Njc4OTEwOmFsaWFzL0V4YW1wbGVBbGlhcy5cbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZvbHVtZSBzaG91bGQgYmUgZW5jcnlwdGVkLiBUaGUgZWZmZWN0IG9mIHNldHRpbmcgdGhlIGVuY3J5cHRpb24gc3RhdGUgdG8gYGB0cnVlYGAgZGVwZW5kcyBvbiB0aGUgdm9sdW1lIG9yaWdpbiAobmV3IG9yIGZyb20gYSBzbmFwc2hvdCksIHN0YXJ0aW5nIGVuY3J5cHRpb24gc3RhdGUsIG93bmVyc2hpcCwgYW5kIHdoZXRoZXIgZW5jcnlwdGlvbiBieSBkZWZhdWx0IGlzIGVuYWJsZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0VuY3J5cHRpb24gYnkgZGVmYXVsdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL3dvcmstd2l0aC1lYnMtZW5jci5odG1sI2VuY3J5cHRpb24tYnktZGVmYXVsdCkgaW4gdGhlICpBbWF6b24gRUJTIFVzZXIgR3VpZGUqLlxuICogIEVuY3J5cHRlZCBBbWF6b24gRUJTIHZvbHVtZXMgbXVzdCBiZSBhdHRhY2hlZCB0byBpbnN0YW5jZXMgdGhhdCBzdXBwb3J0IEFtYXpvbiBFQlMgZW5jcnlwdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3VwcG9ydGVkIGluc3RhbmNlIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvZWJzLWVuY3J5cHRpb24tcmVxdWlyZW1lbnRzLmh0bWwjZWJzLWVuY3J5cHRpb25fc3VwcG9ydGVkX2luc3RhbmNlcykuXG4gKi9cbkVuY3J5cHRlZD86IGJvb2xlYW5cbi8qKlxuICogVGhlIHNpemUgb2YgdGhlIHZvbHVtZSwgaW4gR2lCcy4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLiBJZiB5b3Ugc3BlY2lmeSBhIHNuYXBzaG90LCB0aGUgZGVmYXVsdCBpcyB0aGUgc25hcHNob3Qgc2l6ZS4gWW91IGNhbiBzcGVjaWZ5IGEgdm9sdW1lIHNpemUgdGhhdCBpcyBlcXVhbCB0byBvciBsYXJnZXIgdGhhbiB0aGUgc25hcHNob3Qgc2l6ZS5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZXMgc2l6ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGU6XG4gKiAgICsgIGBgZ3AyYGAgYW5kIGBgZ3AzYGA6IDEgLSAxNiwzODQgR2lCXG4gKiAgICsgIGBgaW8xYGA6IDQgLSAxNiwzODQgR2lCXG4gKiAgICsgIGBgaW8yYGA6IDQgLSA2NSw1MzYgR2lCXG4gKiAgICsgIGBgc3QxYGAgYW5kIGBgc2MxYGA6IDEyNSAtIDE2LDM4NCBHaUJcbiAqICAgKyAgYGBzdGFuZGFyZGBgOiAxIC0gMTAyNCBHaUJcbiAqL1xuU2l6ZT86IG51bWJlclxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIGlzIGF1dG8tZW5hYmxlZCBmb3IgSS9PIG9wZXJhdGlvbnMuIEJ5IGRlZmF1bHQsIEFtYXpvbiBFQlMgZGlzYWJsZXMgSS9PIHRvIHRoZSB2b2x1bWUgZnJvbSBhdHRhY2hlZCBFQzIgaW5zdGFuY2VzIHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGF0IGEgdm9sdW1lJ3MgZGF0YSBpcyBwb3RlbnRpYWxseSBpbmNvbnNpc3RlbnQuIElmIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgdm9sdW1lIGlzIG5vdCBhIGNvbmNlcm4sIGFuZCB5b3UgcHJlZmVyIHRoYXQgdGhlIHZvbHVtZSBiZSBtYWRlIGF2YWlsYWJsZSBpbW1lZGlhdGVseSBpZiBpdCdzIGltcGFpcmVkLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUgdm9sdW1lIHRvIGF1dG9tYXRpY2FsbHkgZW5hYmxlIEkvTy5cbiAqL1xuQXV0b0VuYWJsZUlPPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIE91dHBvc3QuXG4gKi9cbk91dHBvc3RBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSBBdmFpbGFiaWxpdHkgWm9uZSBpbiB3aGljaCB0byBjcmVhdGUgdGhlIHZvbHVtZS4gRm9yIGV4YW1wbGUsIGBgdXMtZWFzdC0xYWBgLlxuICogIEVpdGhlciBgYEF2YWlsYWJpbGl0eVpvbmVgYCBvciBgYEF2YWlsYWJpbGl0eVpvbmVJZGBgIG11c3QgYmUgc3BlY2lmaWVkLCBidXQgbm90IGJvdGguXG4gKi9cbkF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGhyb3VnaHB1dCB0byBwcm92aXNpb24gZm9yIGEgdm9sdW1lLCB3aXRoIGEgbWF4aW11bSBvZiAxLDAwMCBNaUIvcy5cbiAqICBUaGlzIHBhcmFtZXRlciBpcyB2YWxpZCBvbmx5IGZvciBgYGdwM2BgIHZvbHVtZXMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEyNS5cbiAqICBWYWxpZCBSYW5nZTogTWluaW11bSB2YWx1ZSBvZiAxMjUuIE1heGltdW0gdmFsdWUgb2YgMTAwMC5cbiAqL1xuVGhyb3VnaHB1dD86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpLiBGb3IgYGBncDNgYCwgYGBpbzFgYCwgYW5kIGBgaW8yYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgSU9QUyB0aGF0IGFyZSBwcm92aXNpb25lZCBmb3IgdGhlIHZvbHVtZS4gRm9yIGBgZ3AyYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBiYXNlbGluZSBwZXJmb3JtYW5jZSBvZiB0aGUgdm9sdW1lIGFuZCB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgdm9sdW1lIGFjY3VtdWxhdGVzIEkvTyBjcmVkaXRzIGZvciBidXJzdGluZy5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZTpcbiAqICAgKyAgYGBncDNgYDogMywwMDAgLSAxNiwwMDAgSU9QU1xuICogICArICBgYGlvMWBgOiAxMDAgLSA2NCwwMDAgSU9QU1xuICogICArICBgYGlvMmBgOiAxMDAgLSAyNTYsMDAwIElPUFNcbiAqICAgXG4gKiAgRm9yIGBgaW8yYGAgdm9sdW1lcywgeW91IGNhbiBhY2hpZXZlIHVwIHRvIDI1NiwwMDAgSU9QUyBvbiBbaW5zdGFuY2VzIGJ1aWx0IG9uIHRoZSBOaXRybyBTeXN0ZW1dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYzIvbGF0ZXN0L2luc3RhbmNldHlwZXMvZWMyLW5pdHJvLWluc3RhbmNlcy5odG1sKS4gT24gb3RoZXIgaW5zdGFuY2VzLCB5b3UgY2FuIGFjaGlldmUgcGVyZm9ybWFuY2UgdXAgdG8gMzIsMDAwIElPUFMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIGBgaW8xYGAgYW5kIGBgaW8yYGAgdm9sdW1lcy4gVGhlIGRlZmF1bHQgZm9yIGBgZ3AzYGAgdm9sdW1lcyBpcyAzLDAwMCBJT1BTLiBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBgYGdwMmBgLCBgYHN0MWBgLCBgYHNjMWBgLCBvciBgYHN0YW5kYXJkYGAgdm9sdW1lcy5cbiAqL1xuSW9wcz86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIEFtYXpvbiBFQlMgUHJvdmlzaW9uZWQgUmF0ZSBmb3IgVm9sdW1lIEluaXRpYWxpemF0aW9uICh2b2x1bWUgaW5pdGlhbGl6YXRpb24gcmF0ZSksIGluIE1pQi9zLCBhdCB3aGljaCB0byBkb3dubG9hZCB0aGUgc25hcHNob3QgYmxvY2tzIGZyb20gQW1hem9uIFMzIHRvIHRoZSB2b2x1bWUuIFRoaXMgaXMgYWxzbyBrbm93biBhcyAqdm9sdW1lIGluaXRpYWxpemF0aW9uKi4gU3BlY2lmeWluZyBhIHZvbHVtZSBpbml0aWFsaXphdGlvbiByYXRlIGVuc3VyZXMgdGhhdCB0aGUgdm9sdW1lIGlzIGluaXRpYWxpemVkIGF0IGEgcHJlZGljdGFibGUgYW5kIGNvbnNpc3RlbnQgcmF0ZSBhZnRlciBjcmVhdGlvbi5cbiAqICBUaGlzIHBhcmFtZXRlciBpcyBzdXBwb3J0ZWQgb25seSBmb3Igdm9sdW1lcyBjcmVhdGVkIGZyb20gc25hcHNob3RzLiBPbWl0IHRoaXMgcGFyYW1ldGVyIGlmOlxuICogICArICBZb3Ugd2FudCB0byBjcmVhdGUgdGhlIHZvbHVtZSB1c2luZyBmYXN0IHNuYXBzaG90IHJlc3RvcmUuIFlvdSBtdXN0IHNwZWNpZnkgYSBzbmFwc2hvdCB0aGF0IGlzIGVuYWJsZWQgZm9yIGZhc3Qgc25hcHNob3QgcmVzdG9yZS4gSW4gdGhpcyBjYXNlLCB0aGUgdm9sdW1lIGlzIGZ1bGx5IGluaXRpYWxpemVkIGF0IGNyZWF0aW9uLlxuICogICBJZiB5b3Ugc3BlY2lmeSBhIHNuYXBzaG90IHRoYXQgaXMgZW5hYmxlZCBmb3IgZmFzdCBzbmFwc2hvdCByZXN0b3JlIGFuZCBhIHZvbHVtZSBpbml0aWFsaXphdGlvbiByYXRlLCB0aGUgdm9sdW1lIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXQgdGhlIHNwZWNpZmllZCByYXRlIGluc3RlYWQgb2YgZmFzdCBzbmFwc2hvdCByZXN0b3JlLlxuICogICAgKyAgWW91IHdhbnQgdG8gY3JlYXRlIGEgdm9sdW1lIHRoYXQgaXMgaW5pdGlhbGl6ZWQgYXQgdGhlIGRlZmF1bHQgcmF0ZS5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSW5pdGlhbGl6ZSBBbWF6b24gRUJTIHZvbHVtZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9pbml0YWxpemUtdm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlKi5cbiAqICBWYWxpZCByYW5nZTogMTAwIC0gMzAwIE1pQi9zXG4gKi9cblZvbHVtZUluaXRpYWxpemF0aW9uUmF0ZT86IG51bWJlclxuLyoqXG4gKiBUaGUgc25hcHNob3QgZnJvbSB3aGljaCB0byBjcmVhdGUgdGhlIHZvbHVtZS4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLlxuICovXG5TbmFwc2hvdElkPzogc3RyaW5nXG5Wb2x1bWVJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdm9sdW1lIHR5cGUuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSBTU0Q6IGBgZ3AyYGAgfCBgYGdwM2BgXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgU1NEOiBgYGlvMWBgIHwgYGBpbzJgYFxuICogICArICBUaHJvdWdocHV0IE9wdGltaXplZCBIREQ6IGBgc3QxYGBcbiAqICAgKyAgQ29sZCBIREQ6IGBgc2MxYGBcbiAqICAgKyAgTWFnbmV0aWM6IGBgc3RhbmRhcmRgYFxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUJTIHZvbHVtZSB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbCkuXG4gKiAgRGVmYXVsdDogYGBncDJgYFxuICovXG5Wb2x1bWVUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSB2b2x1bWUgZHVyaW5nIGNyZWF0aW9uLlxuICovXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogU3BlY2lmaWVzIGEgdGFnLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXNvdXJjZSB0YWdzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZXNvdXJjZS10YWdzLmh0bWwpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSB0YWcgdmFsdWUuXG4gKi9cblZhbHVlOiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZyBrZXkuXG4gKi9cbktleTogc3RyaW5nXG59XG4iXX0=
|
|
@@ -331,13 +331,31 @@ export interface CapacityProviderStrategyItem {
|
|
|
331
331
|
*/
|
|
332
332
|
CapacityProvider?: string;
|
|
333
333
|
/**
|
|
334
|
-
* The *base* value designates how many tasks, at a minimum, to run on the specified capacity provider. Only one capacity provider in a capacity provider strategy can have a *base* defined. If no value is specified, the default value of ``0`` is used.
|
|
334
|
+
* The *base* value designates how many tasks, at a minimum, to run on the specified capacity provider for each service. Only one capacity provider in a capacity provider strategy can have a *base* defined. If no value is specified, the default value of ``0`` is used.
|
|
335
|
+
* Base value characteristics:
|
|
336
|
+
* + Only one capacity provider in a strategy can have a base defined
|
|
337
|
+
* + Default value is ``0`` if not specified
|
|
338
|
+
* + Valid range: 0 to 100,000
|
|
339
|
+
* + Base requirements are satisfied first before weight distribution
|
|
335
340
|
*/
|
|
336
341
|
Base?: number;
|
|
337
342
|
/**
|
|
338
343
|
* The *weight* value designates the relative percentage of the total number of tasks launched that should use the specified capacity provider. The ``weight`` value is taken into consideration after the ``base`` value, if defined, is satisfied.
|
|
339
344
|
* If no ``weight`` value is specified, the default value of ``0`` is used. When multiple capacity providers are specified within a capacity provider strategy, at least one of the capacity providers must have a weight value greater than zero and any capacity providers with a weight of ``0`` can't be used to place tasks. If you specify multiple capacity providers in a strategy that all have a weight of ``0``, any ``RunTask`` or ``CreateService`` actions using the capacity provider strategy will fail.
|
|
340
|
-
*
|
|
345
|
+
* Weight value characteristics:
|
|
346
|
+
* + Weight is considered after the base value is satisfied
|
|
347
|
+
* + Default value is ``0`` if not specified
|
|
348
|
+
* + Valid range: 0 to 1,000
|
|
349
|
+
* + At least one capacity provider must have a weight greater than zero
|
|
350
|
+
* + Capacity providers with weight of ``0`` cannot place tasks
|
|
351
|
+
*
|
|
352
|
+
* Task distribution logic:
|
|
353
|
+
* 1. Base satisfaction: The minimum number of tasks specified by the base value are placed on that capacity provider
|
|
354
|
+
* 1. Weight distribution: After base requirements are met, additional tasks are distributed according to weight ratios
|
|
355
|
+
*
|
|
356
|
+
* Examples:
|
|
357
|
+
* Equal Distribution: Two capacity providers both with weight ``1`` will split tasks evenly after base requirements are met.
|
|
358
|
+
* Weighted Distribution: If capacityProviderA has weight ``1`` and capacityProviderB has weight ``4``, then for every 1 task on A, 4 tasks will run on B.
|
|
341
359
|
*/
|
|
342
360
|
Weight?: number;
|
|
343
361
|
}
|
|
@@ -370,6 +388,9 @@ export interface AwsVpcConfiguration {
|
|
|
370
388
|
*/
|
|
371
389
|
AssignPublicIp?: ("DISABLED" | "ENABLED");
|
|
372
390
|
}
|
|
391
|
+
/**
|
|
392
|
+
* Determines whether to force a new deployment of the service. By default, deployments aren't forced. You can use this option to start a new deployment with no service definition changes. For example, you can update a service's tasks to use a newer Docker image with the same image/tag combination (``my_image:latest``) or to roll Fargate tasks onto a newer platform version.
|
|
393
|
+
*/
|
|
373
394
|
export interface ForceNewDeployment {
|
|
374
395
|
EnableForceNewDeployment: boolean;
|
|
375
396
|
ForceNewDeploymentNonce?: string;
|
|
@@ -583,7 +604,7 @@ export interface LogConfiguration {
|
|
|
583
604
|
* The options you can specify depend on the log driver. Some of the options you can specify when you use the ``awslogs`` log driver to route logs to Amazon CloudWatch include the following:
|
|
584
605
|
* + awslogs-create-group Required: No Specify whether you want the log group to be created automatically. If this option isn't specified, it defaults to false. Your IAM policy must include the logs:CreateLogGroup permission before you attempt to use awslogs-create-group. + awslogs-region Required: Yes Specify the Region that the awslogs log driver is to send your Docker logs to. You can choose to send all of your logs from clusters in different Regions to a single region in CloudWatch Logs. This is so that they're all visible in one location. Otherwise, you can separate them by Region for more granularity. Make sure that the specified log group exists in the Region that you specify with this option. + awslogs-group Required: Yes Make sure to specify a log group that the awslogs log driver sends its log streams to. + awslogs-stream-prefix Required: Yes, when using Fargate.Optional when using EC2. Use the awslogs-stream-prefix option to associate a log stream with the specified prefix, the container name, and the ID of the Amazon ECS task that the container belongs to. If you specify a prefix with this option, then the log stream takes the format prefix-name/container-name/ecs-task-id. If you don't specify a prefix with this option, then the log stream is named after the container ID that's assigned by the Docker daemon on the container instance. Because it's difficult to trace logs back to the container that sent them with just the Docker container ID (which is only available on the container instance), we recommend that you specify a prefix with this option. For Amazon ECS services, you can use the service name as the prefix. Doing so, you can trace log streams to the service that the container belongs to, the name of the container that sent them, and the ID of the task that the container belongs to. You must specify a stream-prefix for your logs to have your logs appear in the Log pane when using the Amazon ECS console. + awslogs-datetime-format Required: No This option defines a multiline start pattern in Python strftime format. A log message consists of a line that matches the pattern and any following lines that don’t match the pattern. The matched line is the delimiter between log messages. One example of a use case for using this format is for parsing output such as a stack dump, which might otherwise be logged in multiple entries. The correct pattern allows it to be captured in a single entry. For more information, see awslogs-datetime-format. You cannot configure both the awslogs-datetime-format and awslogs-multiline-pattern options. Multiline logging performs regular expression parsing and matching of all log messages. This might have a negative impact on logging performance. + awslogs-multiline-pattern Required: No This option defines a multiline start pattern that uses a regular expression. A log message consists of a line that matches the pattern and any following lines that don’t match the pattern. The matched line is the delimiter between log messages. For more information, see awslogs-multiline-pattern. This option is ignored if awslogs-datetime-format is also configured. You cannot configure both the awslogs-datetime-format and awslogs-multiline-pattern options. Multiline logging performs regular expression parsing and matching of all log messages. This might have a negative impact on logging performance.
|
|
585
606
|
* The following options apply to all supported log drivers.
|
|
586
|
-
* + mode Required: No Valid values: non-blocking | blocking This option defines the delivery mode of log messages from the container to the log driver specified using logDriver. The delivery mode you choose affects application availability when the flow of logs from container is interrupted. If you use the blocking mode and the flow of logs is interrupted, calls from container code to write to the stdout and stderr streams will block. The logging thread of the application will block as a result. This may cause the application to become unresponsive and lead to container healthcheck failure. If you use the non-blocking mode, the container's logs are instead stored in an in-memory intermediate buffer configured with the max-buffer-size option. This prevents the application from becoming unresponsive when logs cannot be sent. We recommend using this mode if you want to ensure service availability and are okay with some log loss. For more information, see Preventing log loss with non-blocking mode in the awslogs container log driver. You can set a default mode for all containers in a specific Region by using the defaultLogDriverMode account setting. If you don't specify the mode option or configure the account setting, Amazon ECS will default to the non-blocking mode. For more information about the account setting, see Default log driver mode in the Amazon Elastic Container Service Developer Guide. On June 25, 2025, Amazon ECS changed the default log driver mode from blocking to non-blocking to prioritize task availability over logging. To continue using the blocking mode after this change, do one of the following: Set the mode option in your container definition's logConfiguration as blocking. Set the defaultLogDriverMode account setting to blocking. + max-buffer-size Required: No Default value:
|
|
607
|
+
* + mode Required: No Valid values: non-blocking | blocking This option defines the delivery mode of log messages from the container to the log driver specified using logDriver. The delivery mode you choose affects application availability when the flow of logs from container is interrupted. If you use the blocking mode and the flow of logs is interrupted, calls from container code to write to the stdout and stderr streams will block. The logging thread of the application will block as a result. This may cause the application to become unresponsive and lead to container healthcheck failure. If you use the non-blocking mode, the container's logs are instead stored in an in-memory intermediate buffer configured with the max-buffer-size option. This prevents the application from becoming unresponsive when logs cannot be sent. We recommend using this mode if you want to ensure service availability and are okay with some log loss. For more information, see Preventing log loss with non-blocking mode in the awslogs container log driver. You can set a default mode for all containers in a specific Region by using the defaultLogDriverMode account setting. If you don't specify the mode option or configure the account setting, Amazon ECS will default to the non-blocking mode. For more information about the account setting, see Default log driver mode in the Amazon Elastic Container Service Developer Guide. On June 25, 2025, Amazon ECS changed the default log driver mode from blocking to non-blocking to prioritize task availability over logging. To continue using the blocking mode after this change, do one of the following: Set the mode option in your container definition's logConfiguration as blocking. Set the defaultLogDriverMode account setting to blocking. + max-buffer-size Required: No Default value: 10m When non-blocking mode is used, the max-buffer-size log option controls the size of the buffer that's used for intermediate message storage. Make sure to specify an adequate buffer size based on your application. When the buffer fills up, further logs cannot be stored. Logs that cannot be stored are lost.
|
|
587
608
|
* To route logs using the ``splunk`` log router, you need to specify a ``splunk-token`` and a ``splunk-url``.
|
|
588
609
|
* When you use the ``awsfirelens`` log router to route logs to an AWS Service or AWS Partner Network destination for log storage and analytics, you can set the ``log-driver-buffer-limit`` option to limit the number of events that are buffered in memory, before being sent to the log router container. It can help to resolve potential log loss issue because high throughput might result in memory running out for the buffer inside of Docker.
|
|
589
610
|
* Other options you can specify when using ``awsfirelens`` to route logs depend on the destination. When you export logs to Amazon Data Firehose, you can specify the AWS Region with ``region`` and a name for the log stream with ``delivery_stream``.
|
|
@@ -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/OiAoXCJFQzJcIiB8IFwiRkFSR0FURVwiIHwgXCJFWFRFUk5BTFwiKVxuTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgQXZhaWxhYmlsaXR5IFpvbmUgcmViYWxhbmNpbmcgZm9yIHRoZSBzZXJ2aWNlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JhbGFuY2luZyBhbiBBbWF6b24gRUNTIHNlcnZpY2UgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1yZWJhbGFuY2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkF2YWlsYWJpbGl0eVpvbmVSZWJhbGFuY2luZz86IChcIkVOQUJMRURcIiB8IFwiRElTQUJMRURcIilcbi8qKlxuICogVGhlIHNjaGVkdWxpbmcgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKS5cbiAqICBUaGVyZSBhcmUgdHdvIHNlcnZpY2Ugc2NoZWR1bGVyIHN0cmF0ZWdpZXMgYXZhaWxhYmxlOlxuICogICArICBgYFJFUExJQ0FgYC1UaGUgcmVwbGljYSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHBsYWNlcyBhbmQgbWFpbnRhaW5zIHRoZSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcyBhY3Jvc3MgeW91ciBjbHVzdGVyLiBCeSBkZWZhdWx0LCB0aGUgc2VydmljZSBzY2hlZHVsZXIgc3ByZWFkcyB0YXNrcyBhY3Jvc3MgQXZhaWxhYmlsaXR5IFpvbmVzLiBZb3UgY2FuIHVzZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVnaWVzIGFuZCBjb25zdHJhaW50cyB0byBjdXN0b21pemUgdGFzayBwbGFjZW1lbnQgZGVjaXNpb25zLiBUaGlzIHNjaGVkdWxlciBzdHJhdGVneSBpcyByZXF1aXJlZCBpZiB0aGUgc2VydmljZSB1c2VzIHRoZSBgYENPREVfREVQTE9ZYGAgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcy5cbiAqICAgKyAgYGBEQUVNT05gYC1UaGUgZGFlbW9uIHNjaGVkdWxpbmcgc3RyYXRlZ3kgZGVwbG95cyBleGFjdGx5IG9uZSB0YXNrIG9uIGVhY2ggYWN0aXZlIGNvbnRhaW5lciBpbnN0YW5jZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgdGhhdCB5b3Ugc3BlY2lmeSBpbiB5b3VyIGNsdXN0ZXIuIFRoZSBzZXJ2aWNlIHNjaGVkdWxlciBhbHNvIGV2YWx1YXRlcyB0aGUgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgZm9yIHJ1bm5pbmcgdGFza3MgYW5kIHdpbGwgc3RvcCB0YXNrcyB0aGF0IGRvbid0IG1lZXQgdGhlIHBsYWNlbWVudCBjb25zdHJhaW50cy4gV2hlbiB5b3UncmUgdXNpbmcgdGhpcyBzdHJhdGVneSwgeW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhIGRlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLCBhIHRhc2sgcGxhY2VtZW50IHN0cmF0ZWd5LCBvciB1c2UgU2VydmljZSBBdXRvIFNjYWxpbmcgcG9saWNpZXMuXG4gKiAgIFRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlIG9yIHRoZSBgYENPREVfREVQTE9ZYGAgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcyBkb24ndCBzdXBwb3J0IHRoZSBgYERBRU1PTmBgIHNjaGVkdWxpbmcgc3RyYXRlZ3kuXG4gKi9cblNjaGVkdWxpbmdTdHJhdGVneT86IChcIkRBRU1PTlwiIHwgXCJSRVBMSUNBXCIpXG5OZXR3b3JrQ29uZmlndXJhdGlvbj86IE5ldHdvcmtDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byB0aGUgc2VydmljZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUsIGJvdGggb2Ygd2hpY2ggeW91IGRlZmluZS4gV2hlbiBhIHNlcnZpY2UgaXMgZGVsZXRlZCwgdGhlIHRhZ3MgYXJlIGRlbGV0ZWQgYXMgd2VsbC5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICovXG5UYWdzPzogVGFnW11cbkZvcmNlTmV3RGVwbG95bWVudD86IEZvcmNlTmV3RGVwbG95bWVudFxuLyoqXG4gKiBUaGUgcGVyaW9kIG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyB1bmhlYWx0aHkgRWxhc3RpYyBMb2FkIEJhbGFuY2luZywgVlBDIExhdHRpY2UsIGFuZCBjb250YWluZXIgaGVhbHRoIGNoZWNrcyBhZnRlciBhIHRhc2sgaGFzIGZpcnN0IHN0YXJ0ZWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCB2YWx1ZSwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC4gSWYgeW91IGRvbid0IHVzZSBhbnkgb2YgdGhlIGhlYWx0aCBjaGVja3MsIHRoZW4gYGBoZWFsdGhDaGVja0dyYWNlUGVyaW9kU2Vjb25kc2BgIGlzIHVudXNlZC5cbiAqICBJZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0YWtlIGEgd2hpbGUgdG8gc3RhcnQgYW5kIHJlc3BvbmQgdG8gaGVhbHRoIGNoZWNrcywgeW91IGNhbiBzcGVjaWZ5IGEgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCBvZiB1cCB0byAyLDE0Nyw0ODMsNjQ3IHNlY29uZHMgKGFib3V0IDY5IHllYXJzKS4gRHVyaW5nIHRoYXQgdGltZSwgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyBoZWFsdGggY2hlY2sgc3RhdHVzLiBUaGlzIGdyYWNlIHBlcmlvZCBjYW4gcHJldmVudCB0aGUgc2VydmljZSBzY2hlZHVsZXIgZnJvbSBtYXJraW5nIHRhc2tzIGFzIHVuaGVhbHRoeSBhbmQgc3RvcHBpbmcgdGhlbSBiZWZvcmUgdGhleSBoYXZlIHRpbWUgdG8gY29tZSB1cC5cbiAqL1xuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdHVybiBvbiBBbWF6b24gRUNTIG1hbmFnZWQgdGFncyBmb3IgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFnZ2luZyB5b3VyIEFtYXpvbiBFQ1MgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtdXNpbmctdGFncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgV2hlbiB5b3UgdXNlIEFtYXpvbiBFQ1MgbWFuYWdlZCB0YWdzLCB5b3UgbXVzdCBzZXQgdGhlIGBgcHJvcGFnYXRlVGFnc2BgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICovXG5FbmFibGVFQ1NNYW5hZ2VkVGFncz86IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBleGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb24gZm9yIHRoZSBzZXJ2aWNlLiBJZiBgYHRydWVgYCwgdGhlIGV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbmFsaXR5IGlzIHR1cm5lZCBvbiBmb3IgYWxsIGNvbnRhaW5lcnMgaW4gdGFza3MgYXMgcGFydCBvZiB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlRXhlY3V0ZUNvbW1hbmQ/OiBib29sZWFuXG4vKipcbiAqIEFuIGFycmF5IG9mIHBsYWNlbWVudCBjb25zdHJhaW50IG9iamVjdHMgdG8gdXNlIGZvciB0YXNrcyBpbiB5b3VyIHNlcnZpY2UuIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgMTAgY29uc3RyYWludHMgZm9yIGVhY2ggdGFzay4gVGhpcyBsaW1pdCBpbmNsdWRlcyBjb25zdHJhaW50cyBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFuZCB0aG9zZSBzcGVjaWZpZWQgYXQgcnVudGltZS5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBQbGFjZW1lbnRDb25zdHJhaW50YGAgYXJyYXkuXG4gKi9cblBsYWNlbWVudENvbnN0cmFpbnRzPzogUGxhY2VtZW50Q29uc3RyYWludFtdXG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGNsdXN0ZXIgdGhhdCB5b3UgcnVuIHlvdXIgc2VydmljZSBvbi4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgY2x1c3RlciwgdGhlIGRlZmF1bHQgY2x1c3RlciBpcyBhc3N1bWVkLlxuICovXG5DbHVzdGVyPzogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBsb2FkIGJhbGFuY2VyIG9iamVjdHMgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHNlcnZpY2UuIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFJvbGVgYCBwcm9wZXJ0eSwgYGBMb2FkQmFsYW5jZXJzYGAgbXVzdCBiZSBzcGVjaWZpZWQgYXMgd2VsbC4gRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBudW1iZXIgb2YgbG9hZCBiYWxhbmNlcnMgdGhhdCB5b3UgY2FuIHNwZWNpZnkgcGVyIHNlcnZpY2UsIHNlZSBbU2VydmljZSBMb2FkIEJhbGFuY2luZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1sb2FkLWJhbGFuY2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgTG9hZEJhbGFuY2VyYGAgYXJyYXkuXG4gKi9cbkxvYWRCYWxhbmNlcnM/OiBMb2FkQmFsYW5jZXJbXVxuU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uPzogU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgaW5zdGFudGlhdGlvbnMgb2YgdGhlIHNwZWNpZmllZCB0YXNrIGRlZmluaXRpb24gdG8gcGxhY2UgYW5kIGtlZXAgcnVubmluZyBpbiB5b3VyIHNlcnZpY2UuXG4gKiAgRm9yIG5ldyBzZXJ2aWNlcywgaWYgYSBkZXNpcmVkIGNvdW50IGlzIG5vdCBzcGVjaWZpZWQsIGEgZGVmYXVsdCB2YWx1ZSBvZiBgYDFgYCBpcyB1c2VkLiBXaGVuIHVzaW5nIHRoZSBgYERBRU1PTmBgIHNjaGVkdWxpbmcgc3RyYXRlZ3ksIHRoZSBkZXNpcmVkIGNvdW50IGlzIG5vdCByZXF1aXJlZC5cbiAqICBGb3IgZXhpc3Rpbmcgc2VydmljZXMsIGlmIGEgZGVzaXJlZCBjb3VudCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcyBvbWl0dGVkIGZyb20gdGhlIG9wZXJhdGlvbi5cbiAqL1xuRGVzaXJlZENvdW50PzogbnVtYmVyXG4vKipcbiAqIFRoZSBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VydmljZSBiZWluZyBjcmVhdGVkLlxuICovXG5WcGNMYXR0aWNlQ29uZmlndXJhdGlvbnM/OiBWcGNMYXR0aWNlQ29uZmlndXJhdGlvbltdXG5EZXBsb3ltZW50Q29udHJvbGxlcj86IERlcGxveW1lbnRDb250cm9sbGVyXG4vKipcbiAqIFRoZSBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQgYWxsb3dzIEFtYXpvbiBFQ1MgdG8gbWFrZSBjYWxscyB0byB5b3VyIGxvYWQgYmFsYW5jZXIgb24geW91ciBiZWhhbGYuIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgcGVybWl0dGVkIGlmIHlvdSBhcmUgdXNpbmcgYSBsb2FkIGJhbGFuY2VyIHdpdGggeW91ciBzZXJ2aWNlIGFuZCB5b3VyIHRhc2sgZGVmaW5pdGlvbiBkb2Vzbid0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUuIElmIHlvdSBzcGVjaWZ5IHRoZSBgYHJvbGVgYCBwYXJhbWV0ZXIsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSBhIGxvYWQgYmFsYW5jZXIgb2JqZWN0IHdpdGggdGhlIGBgbG9hZEJhbGFuY2Vyc2BgIHBhcmFtZXRlci5cbiAqICAgSWYgeW91ciBhY2NvdW50IGhhcyBhbHJlYWR5IGNyZWF0ZWQgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZS1saW5rZWQgcm9sZSwgdGhhdCByb2xlIGlzIHVzZWQgZm9yIHlvdXIgc2VydmljZSB1bmxlc3MgeW91IHNwZWNpZnkgYSByb2xlIGhlcmUuIFRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIGlzIHJlcXVpcmVkIGlmIHlvdXIgdGFzayBkZWZpbml0aW9uIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIG9yIGlmIHRoZSBzZXJ2aWNlIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHNlcnZpY2UgZGlzY292ZXJ5LCBhbiBleHRlcm5hbCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIG11bHRpcGxlIHRhcmdldCBncm91cHMsIG9yIEVsYXN0aWMgSW5mZXJlbmNlIGFjY2VsZXJhdG9ycyBpbiB3aGljaCBjYXNlIHlvdSBkb24ndCBzcGVjaWZ5IGEgcm9sZSBoZXJlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2luZyBzZXJ2aWNlLWxpbmtlZCByb2xlcyBmb3IgQW1hem9uIEVDU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmctc2VydmljZS1saW5rZWQtcm9sZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3VyIHNwZWNpZmllZCByb2xlIGhhcyBhIHBhdGggb3RoZXIgdGhhbiBgYC9gYCwgdGhlbiB5b3UgbXVzdCBlaXRoZXIgc3BlY2lmeSB0aGUgZnVsbCByb2xlIEFSTiAodGhpcyBpcyByZWNvbW1lbmRlZCkgb3IgcHJlZml4IHRoZSByb2xlIG5hbWUgd2l0aCB0aGUgcGF0aC4gRm9yIGV4YW1wbGUsIGlmIGEgcm9sZSB3aXRoIHRoZSBuYW1lIGBgYmFyYGAgaGFzIGEgcGF0aCBvZiBgYC9mb28vYGAgdGhlbiB5b3Ugd291bGQgc3BlY2lmeSBgYC9mb28vYmFyYGAgYXMgdGhlIHJvbGUgbmFtZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRnJpZW5kbHkgbmFtZXMgYW5kIHBhdGhzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2lkZW50aWZpZXJzLmh0bWwjaWRlbnRpZmllcnMtZnJpZW5kbHktbmFtZXMpIGluIHRoZSAqSUFNIFVzZXIgR3VpZGUqLlxuICovXG5Sb2xlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBgYGZhbWlseWBgIGFuZCBgYHJldmlzaW9uYGAgKGBgZmFtaWx5OnJldmlzaW9uYGApIG9yIGZ1bGwgQVJOIG9mIHRoZSB0YXNrIGRlZmluaXRpb24gdG8gcnVuIGluIHlvdXIgc2VydmljZS4gSWYgYSBgYHJldmlzaW9uYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgbGF0ZXN0IGBgQUNUSVZFYGAgcmV2aXNpb24gaXMgdXNlZC5cbiAqICBBIHRhc2sgZGVmaW5pdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBpZiB0aGUgc2VydmljZSB1c2VzIGVpdGhlciB0aGUgYGBFQ1NgYCBvciBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVycy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkZXBsb3ltZW50IHR5cGVzLCBzZWUgW0FtYXpvbiBFQ1MgZGVwbG95bWVudCB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlcy5odG1sKS5cbiAqL1xuVGFza0RlZmluaXRpb24/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgeW91ciBzZXJ2aWNlLiBVcCB0byAyNTUgbGV0dGVycyAodXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UpLCBudW1iZXJzLCB1bmRlcnNjb3JlcywgYW5kIGh5cGhlbnMgYXJlIGFsbG93ZWQuIFNlcnZpY2UgbmFtZXMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgY2x1c3RlciwgYnV0IHlvdSBjYW4gaGF2ZSBzaW1pbGFybHkgbmFtZWQgc2VydmljZXMgaW4gbXVsdGlwbGUgY2x1c3RlcnMgd2l0aGluIGEgUmVnaW9uIG9yIGFjcm9zcyBtdWx0aXBsZSBSZWdpb25zLlxuICogICBUaGUgc3RhY2sgdXBkYXRlIGZhaWxzIGlmIHlvdSBjaGFuZ2UgYW55IHByb3BlcnRpZXMgdGhhdCByZXF1aXJlIHJlcGxhY2VtZW50IGFuZCB0aGUgYGBTZXJ2aWNlTmFtZWBgIGlzIGNvbmZpZ3VyZWQuIFRoaXMgaXMgYmVjYXVzZSBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyB0aGUgcmVwbGFjZW1lbnQgc2VydmljZSBmaXJzdCwgYnV0IGVhY2ggYGBTZXJ2aWNlTmFtZWBgIG11c3QgYmUgdW5pcXVlIGluIHRoZSBjbHVzdGVyLlxuICovXG5TZXJ2aWNlTmFtZT86IHN0cmluZ1xuRGVwbG95bWVudENvbmZpZ3VyYXRpb24/OiBEZXBsb3ltZW50Q29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBUaGUgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ3kgZm9yIGEgdGFzayBvciBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIHBsYWNlbWVudCBzdHJhdGVnaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLXBsYWNlbWVudC1zdHJhdGVnaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRTdHJhdGVneSB7XG4vKipcbiAqIFRoZSBmaWVsZCB0byBhcHBseSB0aGUgcGxhY2VtZW50IHN0cmF0ZWd5IGFnYWluc3QuIEZvciB0aGUgYGBzcHJlYWRgYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHZhbGlkIHZhbHVlcyBhcmUgYGBpbnN0YW5jZUlkYGAgKG9yIGBgaG9zdGBgLCB3aGljaCBoYXMgdGhlIHNhbWUgZWZmZWN0KSwgb3IgYW55IHBsYXRmb3JtIG9yIGN1c3RvbSBhdHRyaWJ1dGUgdGhhdCdzIGFwcGxpZWQgdG8gYSBjb250YWluZXIgaW5zdGFuY2UsIHN1Y2ggYXMgYGBhdHRyaWJ1dGU6ZWNzLmF2YWlsYWJpbGl0eS16b25lYGAuIEZvciB0aGUgYGBiaW5wYWNrYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB2YWxpZCB2YWx1ZXMgYXJlIGBgY3B1YGAgYW5kIGBgbWVtb3J5YGAuIEZvciB0aGUgYGByYW5kb21gYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHRoaXMgZmllbGQgaXMgbm90IHVzZWQuXG4gKi9cbkZpZWxkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0eXBlIG9mIHBsYWNlbWVudCBzdHJhdGVneS4gVGhlIGBgcmFuZG9tYGAgcGxhY2VtZW50IHN0cmF0ZWd5IHJhbmRvbWx5IHBsYWNlcyB0YXNrcyBvbiBhdmFpbGFibGUgY2FuZGlkYXRlcy4gVGhlIGBgc3ByZWFkYGAgcGxhY2VtZW50IHN0cmF0ZWd5IHNwcmVhZHMgcGxhY2VtZW50IGFjcm9zcyBhdmFpbGFibGUgY2FuZGlkYXRlcyBldmVubHkgYmFzZWQgb24gdGhlIGBgZmllbGRgYCBwYXJhbWV0ZXIuIFRoZSBgYGJpbnBhY2tgYCBzdHJhdGVneSBwbGFjZXMgdGFza3Mgb24gYXZhaWxhYmxlIGNhbmRpZGF0ZXMgdGhhdCBoYXZlIHRoZSBsZWFzdCBhdmFpbGFibGUgYW1vdW50IG9mIHRoZSByZXNvdXJjZSB0aGF0J3Mgc3BlY2lmaWVkIHdpdGggdGhlIGBgZmllbGRgYCBwYXJhbWV0ZXIuIEZvciBleGFtcGxlLCBpZiB5b3UgYmlucGFjayBvbiBtZW1vcnksIGEgdGFzayBpcyBwbGFjZWQgb24gdGhlIGluc3RhbmNlIHdpdGggdGhlIGxlYXN0IGFtb3VudCBvZiByZW1haW5pbmcgbWVtb3J5IGJ1dCBzdGlsbCBlbm91Z2ggdG8gcnVuIHRoZSB0YXNrLlxuICovXG5UeXBlOiAoXCJiaW5wYWNrXCIgfCBcInJhbmRvbVwiIHwgXCJzcHJlYWRcIilcbn1cbi8qKlxuICogVGhlIGRldGFpbHMgZm9yIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5LlxuICogIEVhY2ggc2VydmljZSBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIG9uZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBNdWx0aXBsZSBzZXJ2aWNlIHJlZ2lzdHJpZXMgZm9yIGVhY2ggc2VydmljZSBhcmUgbm90IHN1cHBvcnRlZC5cbiAqICBXaGVuIHlvdSBhZGQsIHVwZGF0ZSwgb3IgcmVtb3ZlIHRoZSBzZXJ2aWNlIHJlZ2lzdHJpZXMgY29uZmlndXJhdGlvbiwgQW1hem9uIEVDUyBzdGFydHMgYSBuZXcgZGVwbG95bWVudC4gTmV3IHRhc2tzIGFyZSByZWdpc3RlcmVkIGFuZCBkZXJlZ2lzdGVyZWQgdG8gdGhlIHVwZGF0ZWQgc2VydmljZSByZWdpc3RyeSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VSZWdpc3RyeSB7XG4vKipcbiAqIFRoZSBjb250YWluZXIgbmFtZSB2YWx1ZSB0byBiZSB1c2VkIGZvciB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2UuIEl0J3MgYWxyZWFkeSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGJyaWRnZWBgIG9yIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSwgeW91IG11c3Qgc3BlY2lmeSBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIGEgdHlwZSBTUlYgRE5TIHJlY29yZCBpcyB1c2VkLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBvciBhIGBgcG9ydGBgIHZhbHVlLiBIb3dldmVyLCB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoLlxuICovXG5Db250YWluZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwb3J0IHZhbHVlIHVzZWQgaWYgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlIHNwZWNpZmllZCBhbiBTUlYgcmVjb3JkLiBUaGlzIGZpZWxkIG1pZ2h0IGJlIHVzZWQgaWYgYm90aCB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIFNSViByZWNvcmRzIGFyZSB1c2VkLlxuICovXG5Qb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBwb3J0IHZhbHVlIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSXQncyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGJyaWRnZWBgIG9yIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSwgeW91IG11c3Qgc3BlY2lmeSBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBhIHR5cGUgU1JWIEROUyByZWNvcmQgaXMgdXNlZCwgeW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gb3IgYSBgYHBvcnRgYCB2YWx1ZS4gSG93ZXZlciwgeW91IGNhbid0IHNwZWNpZnkgYm90aC5cbiAqL1xuQ29udGFpbmVyUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHNlcnZpY2UgcmVnaXN0cnkuIFRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIHNlcnZpY2UgcmVnaXN0cnkgaXMgQ01BUC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRlU2VydmljZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkLW1hcC9sYXRlc3QvYXBpL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWwpLlxuICovXG5SZWdpc3RyeUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgYSB2b2x1bWUgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYXMgYSB2b2x1bWUgdGhhdCBpcyBjb25maWd1cmVkIGF0IGxhdW5jaCB0aW1lLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCB2b2x1bWUgdHlwZSBpcyBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbiB7XG5NYW5hZ2VkRUJTVm9sdW1lPzogU2VydmljZU1hbmFnZWRFQlNWb2x1bWVDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSB2b2x1bWUuIFRoaXMgdmFsdWUgbXVzdCBtYXRjaCB0aGUgdm9sdW1lIG5hbWUgZnJvbSB0aGUgYGBWb2x1bWVgYCBvYmplY3QgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQW1hem9uIEVCUyB2b2x1bWUgdGhhdCBBbWF6b24gRUNTIGNyZWF0ZXMgYW5kIG1hbmFnZXMgb24geW91ciBiZWhhbGYuIFRoZXNlIHNldHRpbmdzIGFyZSB1c2VkIHRvIGNyZWF0ZSBlYWNoIEFtYXpvbiBFQlMgdm9sdW1lLCB3aXRoIG9uZSB2b2x1bWUgY3JlYXRlZCBmb3IgZWFjaCB0YXNrIGluIHRoZSBzZXJ2aWNlLiBUaGUgQW1hem9uIEVCUyB2b2x1bWVzIGFyZSB2aXNpYmxlIGluIHlvdXIgYWNjb3VudCBpbiB0aGUgQW1hem9uIEVDMiBjb25zb2xlIG9uY2UgdGhleSBhcmUgY3JlYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlTWFuYWdlZEVCU1ZvbHVtZUNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc25hcHNob3QgdGhhdCBBbWF6b24gRUNTIHVzZXMgdG8gY3JlYXRlIHZvbHVtZXMgZm9yIGF0dGFjaG1lbnQgdG8gdGFza3MgbWFpbnRhaW5lZCBieSB0aGUgc2VydmljZS4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYGBzbmFwc2hvdElkYGAgb3IgYGBzaXplSW5HaUJgYCBpbiB5b3VyIHZvbHVtZSBjb25maWd1cmF0aW9uLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNuYXBzaG90SWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblNuYXBzaG90SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZvbHVtZSB0eXBlLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFZvbHVtZVR5cGVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQlMgdm9sdW1lIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgdHlwZXMuXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSBTU0Q6IGBgZ3AyYGB8YGBncDNgYFxuICogICArICBQcm92aXNpb25lZCBJT1BTIFNTRDogYGBpbzFgYHxgYGlvMmBgXG4gKiAgICsgIFRocm91Z2hwdXQgT3B0aW1pemVkIEhERDogYGBzdDFgYFxuICogICArICBDb2xkIEhERDogYGBzYzFgYFxuICogICArICBNYWduZXRpYzogYGBzdGFuZGFyZGBgXG4gKiAgIFRoZSBtYWduZXRpYyB2b2x1bWUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIG9uIEZhcmdhdGUuXG4gKi9cblZvbHVtZVR5cGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIGlkZW50aWZpZXIgb2YgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSB0byB1c2UgZm9yIEFtYXpvbiBFQlMgZW5jcnlwdGlvbi4gV2hlbiBhIGtleSBpcyBzcGVjaWZpZWQgdXNpbmcgdGhpcyBwYXJhbWV0ZXIsIGl0IG92ZXJyaWRlcyBBbWF6b24gRUJTIGRlZmF1bHQgZW5jcnlwdGlvbiBvciBhbnkgS01TIGtleSB0aGF0IHlvdSBzcGVjaWZpZWQgZm9yIGNsdXN0ZXItbGV2ZWwgbWFuYWdlZCBzdG9yYWdlIGVuY3J5cHRpb24uIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgS21zS2V5SWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGVuY3J5cHRpbmcgQW1hem9uIEVCUyB2b2x1bWVzIGF0dGFjaGVkIHRvIHRhc2tzLCBzZWUgW0VuY3J5cHQgZGF0YSBzdG9yZWQgaW4gQW1hem9uIEVCUyB2b2x1bWVzIGF0dGFjaGVkIHRvIEFtYXpvbiBFQ1MgdGFza3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vicy1rbXMtZW5jcnlwdGlvbi5odG1sKS5cbiAqICAgQVdTIGF1dGhlbnRpY2F0ZXMgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSBhc3luY2hyb25vdXNseS4gVGhlcmVmb3JlLCBpZiB5b3Ugc3BlY2lmeSBhbiBJRCwgYWxpYXMsIG9yIEFSTiB0aGF0IGlzIGludmFsaWQsIHRoZSBhY3Rpb24gY2FuIGFwcGVhciB0byBjb21wbGV0ZSwgYnV0IGV2ZW50dWFsbHkgZmFpbHMuXG4gKi9cbkttc0tleUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSB2b2x1bWUuIEFtYXpvbiBFQ1MgYXBwbGllcyBzZXJ2aWNlLW1hbmFnZWQgdGFncyBieSBkZWZhdWx0LiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRhZ1NwZWNpZmljYXRpb25zLk5gYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblRhZ1NwZWNpZmljYXRpb25zPzogRUJTVGFnU3BlY2lmaWNhdGlvbltdXG4vKipcbiAqIFRoZSBmaWxlc3lzdGVtIHR5cGUgZm9yIHRoZSB2b2x1bWUuIEZvciB2b2x1bWVzIGNyZWF0ZWQgZnJvbSBhIHNuYXBzaG90LCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBzYW1lIGZpbGVzeXN0ZW0gdHlwZSB0aGF0IHRoZSB2b2x1bWUgd2FzIHVzaW5nIHdoZW4gdGhlIHNuYXBzaG90IHdhcyBjcmVhdGVkLiBJZiB0aGVyZSBpcyBhIGZpbGVzeXN0ZW0gdHlwZSBtaXNtYXRjaCwgdGhlIHRhc2tzIHdpbGwgZmFpbCB0byBzdGFydC5cbiAqICBUaGUgYXZhaWxhYmxlIExpbnV4IGZpbGVzeXN0ZW0gdHlwZXMgYXJl4oCoIGBgZXh0M2BgLCBgYGV4dDRgYCwgYW5kIGBgeGZzYGAuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGBgeGZzYGAgZmlsZXN5c3RlbSB0eXBlIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqICBUaGUgYXZhaWxhYmxlIFdpbmRvd3MgZmlsZXN5c3RlbSB0eXBlcyBhcmUgYGBOVEZTYGAuXG4gKi9cbkZpbGVzeXN0ZW1UeXBlPzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB2b2x1bWUgc2hvdWxkIGJlIGVuY3J5cHRlZC4gSWYgeW91IHR1cm4gb24gUmVnaW9uLWxldmVsIEFtYXpvbiBFQlMgZW5jcnlwdGlvbiBieSBkZWZhdWx0IGJ1dCBzZXQgdGhpcyB2YWx1ZSBhcyBgYGZhbHNlYGAsIHRoZSBzZXR0aW5nIGlzIG92ZXJyaWRkZW4gYW5kIHRoZSB2b2x1bWUgaXMgZW5jcnlwdGVkIHdpdGggdGhlIEtNUyBrZXkgc3BlY2lmaWVkIGZvciBBbWF6b24gRUJTIGVuY3J5cHRpb24gYnkgZGVmYXVsdC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBFbmNyeXB0ZWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cbkVuY3J5cHRlZD86IGJvb2xlYW5cbi8qKlxuICogVGhlIHRocm91Z2hwdXQgdG8gcHJvdmlzaW9uIGZvciBhIHZvbHVtZSwgaW4gTWlCL3MsIHdpdGggYSBtYXhpbXVtIG9mIDEsMDAwIE1pQi9zLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRocm91Z2hwdXRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0aGUgYGBncDNgYCB2b2x1bWUgdHlwZS5cbiAqL1xuVGhyb3VnaHB1dD86IG51bWJlclxuLyoqXG4gKiBUaGUgcmF0ZSwgaW4gTWlCL3MsIGF0IHdoaWNoIGRhdGEgaXMgZmV0Y2hlZCBmcm9tIGEgc25hcHNob3Qgb2YgYW4gZXhpc3RpbmcgRUJTIHZvbHVtZSB0byBjcmVhdGUgbmV3IHZvbHVtZXMgZm9yIGF0dGFjaG1lbnQgdG8gdGhlIHRhc2tzIG1haW50YWluZWQgYnkgdGhlIHNlcnZpY2UuIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNwZWNpZmllZCBvbmx5IGlmIHlvdSBzcGVjaWZ5IGEgYGBzbmFwc2hvdElkYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0luaXRpYWxpemUgQW1hem9uIEVCUyB2b2x1bWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvaW5pdGFsaXplLXZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQlMgVXNlciBHdWlkZSouXG4gKi9cblZvbHVtZUluaXRpYWxpemF0aW9uUmF0ZT86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpLiBGb3IgYGBncDNgYCwgYGBpbzFgYCwgYW5kIGBgaW8yYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgSU9QUyB0aGF0IGFyZSBwcm92aXNpb25lZCBmb3IgdGhlIHZvbHVtZS4gRm9yIGBgZ3AyYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBiYXNlbGluZSBwZXJmb3JtYW5jZSBvZiB0aGUgdm9sdW1lIGFuZCB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgdm9sdW1lIGFjY3VtdWxhdGVzIEkvTyBjcmVkaXRzIGZvciBidXJzdGluZy5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgYGBncDNgYDogMywwMDAgLSAxNiwwMDAgSU9QU1xuICogICArICBgYGlvMWBgOiAxMDAgLSA2NCwwMDAgSU9QU1xuICogICArICBgYGlvMmBgOiAxMDAgLSAyNTYsMDAwIElPUFNcbiAqICAgXG4gKiAgVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIGBgaW8xYGAgYW5kIGBgaW8yYGAgdm9sdW1lIHR5cGVzLiBUaGUgZGVmYXVsdCBmb3IgYGBncDNgYCB2b2x1bWVzIGlzIGBgMywwMDAgSU9QU2BgLiBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBgYHN0MWBgLCBgYHNjMWBgLCBvciBgYHN0YW5kYXJkYGAgdm9sdW1lIHR5cGVzLlxuICogIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgSW9wc2BgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuSW9wcz86IG51bWJlclxuLyoqXG4gKiBUaGUgc2l6ZSBvZiB0aGUgdm9sdW1lIGluIEdpQi4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSB2b2x1bWUgc2l6ZSBvciBhIHNuYXBzaG90IElELiBJZiB5b3Ugc3BlY2lmeSBhIHNuYXBzaG90IElELCB0aGUgc25hcHNob3Qgc2l6ZSBpcyB1c2VkIGZvciB0aGUgdm9sdW1lIHNpemUgYnkgZGVmYXVsdC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSB2b2x1bWUgc2l6ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNuYXBzaG90IHNpemUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgU2l6ZWBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZSBzaXplIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgYGBncDJgYCBhbmQgYGBncDNgYDogMS0xNiwzODRcbiAqICAgKyAgYGBpbzFgYCBhbmQgYGBpbzJgYDogNC0xNiwzODRcbiAqICAgKyAgYGBzdDFgYCBhbmQgYGBzYzFgYDogMTI1LTE2LDM4NFxuICogICArICBgYHN0YW5kYXJkYGA6IDEtMSwwMjRcbiAqL1xuU2l6ZUluR2lCPzogbnVtYmVyXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIElBTSByb2xlIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgdm9sdW1lLiBUaGlzIGlzIHRoZSBBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBtYW5hZ2UgeW91ciBBV1MgaW5mcmFzdHJ1Y3R1cmUuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgQW1hem9uIEVDUy1tYW5hZ2VkIGBgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVm9sdW1lc2BgIElBTSBwb2xpY3kgd2l0aCB0aGlzIHJvbGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2luZnJhc3RydWN0dXJlX0lBTV9yb2xlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDUyBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHRhZyBzcGVjaWZpY2F0aW9ucyBvZiBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFQlNUYWdTcGVjaWZpY2F0aW9uIHtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHByb3BhZ2F0ZSB0aGUgdGFncyBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gdG8g4oCodGhlIEFtYXpvbiBFQlMgdm9sdW1lLiBUYWdzIGNhbiBvbmx5IHByb3BhZ2F0ZSB0byBhIGBgU0VSVklDRWBgIHNwZWNpZmllZCBpbiDigKhgYFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uYGAuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIHRhZ3MgYXJlbid0IOKAqHByb3BhZ2F0ZWQuXG4gKi9cblByb3BhZ2F0ZVRhZ3M/OiAoXCJTRVJWSUNFXCIgfCBcIlRBU0tfREVGSU5JVElPTlwiKVxuLyoqXG4gKiBUaGUgdHlwZSBvZiB2b2x1bWUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlVHlwZTogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIGFwcGxpZWQgdG8gdGhpcyBBbWF6b24gRUJTIHZvbHVtZS4gYGBBbWF6b25FQ1NDcmVhdGVkYGAgYW5kIGBgQW1hem9uRUNTTWFuYWdlZGBgIGFyZSByZXNlcnZlZCB0YWdzIHRoYXQgY2FuJ3QgYmUgdXNlZC5cbiAqL1xuVGFncz86IFRhZ1tdXG59XG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byBhIHJlc291cmNlIHRvIGhlbHAgeW91IGNhdGVnb3JpemUgYW5kIG9yZ2FuaXplIHRoZW0uIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZS4gWW91IGRlZmluZSB0aGVtLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKiAgIFxuICogIEluIG9yZGVyIHRvIHRhZyBhIHNlcnZpY2UgdGhhdCBoYXMgdGhlIGZvbGxvd2luZyBBUk4gZm9ybWF0LCB5b3UgbmVlZCB0byBtaWdyYXRlIHRoZSBzZXJ2aWNlIHRvIHRoZSBsb25nIEFSTi4gWW91IG11c3QgdXNlIHRoZSBBUEksIENMSSBvciBjb25zb2xlIHRvIG1pZ3JhdGUgdGhlIHNlcnZpY2UgQVJOLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNaWdyYXRlIGFuIHNob3J0IHNlcnZpY2UgQVJOIHRvIGEgbG9uZyBBUk5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtYXJuLW1pZ3JhdGlvbi5odG1sKSBpbiB0aGUgKkRldmVsb3BlciBHdWlkZSouXG4gKiAgIGBgYXJuOmF3czplY3M6cmVnaW9uOmF3c19hY2NvdW50X2lkOnNlcnZpY2Uvc2VydmljZS1uYW1lYGAgXG4gKiAgQWZ0ZXIgdGhlIG1pZ3JhdGlvbiBpcyBjb21wbGV0ZSwgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZTpcbiAqICAgKyAgIFRoZSBzZXJ2aWNlIEFSTiBpczogYGBhcm46YXdzOmVjczpyZWdpb246YXdzX2FjY291bnRfaWQ6c2VydmljZS9jbHVzdGVyLW5hbWUvc2VydmljZS1uYW1lYGBcbiAqICAgKyAgWW91IGNhbiB1c2UgQ0ZOIHRvIHRhZyB0aGUgc2VydmljZSBhcyB5b3Ugd291bGQgYSBzZXJ2aWNlIHdpdGggYSBsb25nIEFSTiBmb3JtYXQuXG4gKiAgICsgIFdoZW4gdGhlIGBgUGh5c2ljYWxSZXNvdXJjZUlkYGAgaW4gdGhlIENGTiBzdGFjayByZXByZXNlbnRzIGEgc2VydmljZSwgdGhlIHZhbHVlIGRvZXMgbm90IGNoYW5nZSBhbmQgd2lsbCBiZSB0aGUgc2hvcnQgc2VydmljZSBBUk4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIG9wdGlvbmFsIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGB2YWx1ZWBgIGFjdHMgYXMgYSBkZXNjcmlwdG9yIHdpdGhpbiBhIHRhZyBjYXRlZ29yeSAoa2V5KS5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbi8qKlxuICogT25lIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGBrZXlgYCBpcyBhIGdlbmVyYWwgbGFiZWwgdGhhdCBhY3RzIGxpa2UgYSBjYXRlZ29yeSBmb3IgbW9yZSBzcGVjaWZpYyB0YWcgdmFsdWVzLlxuICovXG5LZXk/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRldGFpbHMgb2YgYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gQSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBjYW4gYmUgc2V0IHdoZW4gdXNpbmcgdGhlIGBgUnVuVGFza2BgIG9yIGBgQ3JlYXRlU2VydmljZWBgIEFQSXMgb3IgYXMgdGhlIGRlZmF1bHQgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgZm9yIGEgY2x1c3RlciB3aXRoIHRoZSBgYENyZWF0ZUNsdXN0ZXJgYCBBUEkuXG4gKiAgT25seSBjYXBhY2l0eSBwcm92aWRlcnMgdGhhdCBhcmUgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBjbHVzdGVyIGFuZCBoYXZlIGFuIGBgQUNUSVZFYGAgb3IgYGBVUERBVElOR2BgIHN0YXR1cyBjYW4gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LiBUaGUgYGBQdXRDbHVzdGVyQ2FwYWNpdHlQcm92aWRlcnNgYCBBUEkgaXMgdXNlZCB0byBhc3NvY2lhdGUgYSBjYXBhY2l0eSBwcm92aWRlciB3aXRoIGEgY2x1c3Rlci5cbiAqICBJZiBzcGVjaWZ5aW5nIGEgY2FwYWNpdHkgcHJvdmlkZXIgdGhhdCB1c2VzIGFuIEF1dG8gU2NhbGluZyBncm91cCwgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIG11c3QgYWxyZWFkeSBiZSBjcmVhdGVkLiBOZXcgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycyBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBgYENyZWF0ZUNhcGFjaXR5UHJvdmlkZXJgYCBBUEkgb3BlcmF0aW9uLlxuICogIFRvIHVzZSBhbiBGQVJHQVRFbG9uZyBjYXBhY2l0eSBwcm92aWRlciwgc3BlY2lmeSBlaXRoZXIgdGhlIGBgRkFSR0FURWBgIG9yIGBgRkFSR0FURV9TUE9UYGAgY2FwYWNpdHkgcHJvdmlkZXJzLiBUaGUgRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgdG8gYWxsIGFjY291bnRzIGFuZCBvbmx5IG5lZWQgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciB0byBiZSB1c2VkIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbSB7XG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlci5cbiAqL1xuQ2FwYWNpdHlQcm92aWRlcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgKmJhc2UqIHZhbHVlIGRlc2lnbmF0ZXMgaG93IG1hbnkgdGFza3MsIGF0IGEgbWluaW11bSwgdG8gcnVuIG9uIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIuIE9ubHkgb25lIGNhcGFjaXR5IHByb3ZpZGVyIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGhhdmUgYSAqYmFzZSogZGVmaW5lZC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLlxuICovXG5CYXNlPzogbnVtYmVyXG4vKipcbiAqIFRoZSAqd2VpZ2h0KiB2YWx1ZSBkZXNpZ25hdGVzIHRoZSByZWxhdGl2ZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MgbGF1bmNoZWQgdGhhdCBzaG91bGQgdXNlIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIuIFRoZSBgYHdlaWdodGBgIHZhbHVlIGlzIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBhZnRlciB0aGUgYGBiYXNlYGAgdmFsdWUsIGlmIGRlZmluZWQsIGlzIHNhdGlzZmllZC5cbiAqICBJZiBubyBgYHdlaWdodGBgIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC4gV2hlbiBtdWx0aXBsZSBjYXBhY2l0eSBwcm92aWRlcnMgYXJlIHNwZWNpZmllZCB3aXRoaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlcnMgbXVzdCBoYXZlIGEgd2VpZ2h0IHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBhbnkgY2FwYWNpdHkgcHJvdmlkZXJzIHdpdGggYSB3ZWlnaHQgb2YgYGAwYGAgY2FuJ3QgYmUgdXNlZCB0byBwbGFjZSB0YXNrcy4gSWYgeW91IHNwZWNpZnkgbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGluIGEgc3RyYXRlZ3kgdGhhdCBhbGwgaGF2ZSBhIHdlaWdodCBvZiBgYDBgYCwgYW55IGBgUnVuVGFza2BgIG9yIGBgQ3JlYXRlU2VydmljZWBgIGFjdGlvbnMgdXNpbmcgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHdpbGwgZmFpbC5cbiAqICBBbiBleGFtcGxlIHNjZW5hcmlvIGZvciB1c2luZyB3ZWlnaHRzIGlzIGRlZmluaW5nIGEgc3RyYXRlZ3kgdGhhdCBjb250YWlucyB0d28gY2FwYWNpdHkgcHJvdmlkZXJzIGFuZCBib3RoIGhhdmUgYSB3ZWlnaHQgb2YgYGAxYGAsIHRoZW4gd2hlbiB0aGUgYGBiYXNlYGAgaXMgc2F0aXNmaWVkLCB0aGUgdGFza3Mgd2lsbCBiZSBzcGxpdCBldmVubHkgYWNyb3NzIHRoZSB0d28gY2FwYWNpdHkgcHJvdmlkZXJzLiBVc2luZyB0aGF0IHNhbWUgbG9naWMsIGlmIHlvdSBzcGVjaWZ5IGEgd2VpZ2h0IG9mIGBgMWBgIGZvciAqY2FwYWNpdHlQcm92aWRlckEqIGFuZCBhIHdlaWdodCBvZiBgYDRgYCBmb3IgKmNhcGFjaXR5UHJvdmlkZXJCKiwgdGhlbiBmb3IgZXZlcnkgb25lIHRhc2sgdGhhdCdzIHJ1biB1c2luZyAqY2FwYWNpdHlQcm92aWRlckEqLCBmb3VyIHRhc2tzIHdvdWxkIHVzZSAqY2FwYWNpdHlQcm92aWRlckIqLlxuICovXG5XZWlnaHQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciB0YXNrIGRlZmluaXRpb25zIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSB0byByZWNlaXZlIHRoZWlyIG93biBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBhbmQgaXQgaXMgbm90IHN1cHBvcnRlZCBmb3Igb3RoZXIgbmV0d29yayBtb2Rlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBOZXR3b3JraW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLW5ldHdvcmtpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtDb25maWd1cmF0aW9uIHtcbkF3c3ZwY0NvbmZpZ3VyYXRpb24/OiBBd3NWcGNDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSBWUEMgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2suXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzVnBjQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHNlY3VyaXR5IGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBzZWN1cml0eSBncm91cCwgdGhlIGRlZmF1bHQgc2VjdXJpdHkgZ3JvdXAgZm9yIHRoZSBWUEMgaXMgdXNlZC4gVGhlcmUncyBhIGxpbWl0IG9mIDUgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgY2FuIGJlIHNwZWNpZmllZC5cbiAqICAgQWxsIHNwZWNpZmllZCBzZWN1cml0eSBncm91cHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuU2VjdXJpdHlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgSURzIG9mIHRoZSBzdWJuZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBvciBzZXJ2aWNlLiBUaGVyZSdzIGEgbGltaXQgb2YgMTYgc3VibmV0cyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQuXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TdWJuZXRzPzogc3RyaW5nW11cbi8qKlxuICogV2hldGhlciB0aGUgdGFzaydzIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UgcmVjZWl2ZXMgYSBwdWJsaWMgSVAgYWRkcmVzcy4gXG4gKiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyB3aGVuIHlvdSBzZXQgdGhpcyB2YWx1ZTpcbiAqICAgKyAgV2hlbiB5b3UgdXNlIGBgY3JlYXRlLXNlcnZpY2VgYCBvciBgYHVwZGF0ZS1zZXJ2aWNlYGAsIHRoZSBkZWZhdWx0IGlzIGBgRElTQUJMRURgYC4gXG4gKiAgICsgIFdoZW4gdGhlIHNlcnZpY2UgYGBkZXBsb3ltZW50Q29udHJvbGxlcmBgIGlzIGBgRUNTYGAsIHRoZSB2YWx1ZSBtdXN0IGJlIGBgRElTQUJMRURgYC5cbiAqL1xuQXNzaWduUHVibGljSXA/OiAoXCJESVNBQkxFRFwiIHwgXCJFTkFCTEVEXCIpXG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcmNlTmV3RGVwbG95bWVudCB7XG5FbmFibGVGb3JjZU5ld0RlcGxveW1lbnQ6IGJvb2xlYW5cbkZvcmNlTmV3RGVwbG95bWVudE5vbmNlPzogc3RyaW5nXG59XG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb25zdHJhaW50IG9uIHRhc2sgcGxhY2VtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIHBsYWNlbWVudCBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtY29uc3RyYWludHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3UncmUgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGFyZW4ndCBzdXBwb3J0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50Q29uc3RyYWludCB7XG4vKipcbiAqIFRoZSB0eXBlIG9mIGNvbnN0cmFpbnQuIFVzZSBgYGRpc3RpbmN0SW5zdGFuY2VgYCB0byBlbnN1cmUgdGhhdCBlYWNoIHRhc2sgaW4gYSBwYXJ0aWN1bGFyIGdyb3VwIGlzIHJ1bm5pbmcgb24gYSBkaWZmZXJlbnQgY29udGFpbmVyIGluc3RhbmNlLiBVc2UgYGBtZW1iZXJPZmBgIHRvIHJlc3RyaWN0IHRoZSBzZWxlY3Rpb24gdG8gYSBncm91cCBvZiB2YWxpZCBjYW5kaWRhdGVzLlxuICovXG5UeXBlOiAoXCJkaXN0aW5jdEluc3RhbmNlXCIgfCBcIm1lbWJlck9mXCIpXG4vKipcbiAqIEEgY2x1c3RlciBxdWVyeSBsYW5ndWFnZSBleHByZXNzaW9uIHRvIGFwcGx5IHRvIHRoZSBjb25zdHJhaW50LiBUaGUgZXhwcmVzc2lvbiBjYW4gaGF2ZSBhIG1heGltdW0gbGVuZ3RoIG9mIDIwMDAgY2hhcmFjdGVycy4gWW91IGNhbid0IHNwZWNpZnkgYW4gZXhwcmVzc2lvbiBpZiB0aGUgY29uc3RyYWludCB0eXBlIGlzIGBgZGlzdGluY3RJbnN0YW5jZWBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jbHVzdGVyLXF1ZXJ5LWxhbmd1YWdlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRXhwcmVzc2lvbj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYGBMb2FkQmFsYW5jZXJgYCBwcm9wZXJ0eSBzcGVjaWZpZXMgZGV0YWlscyBvbiBhIGxvYWQgYmFsYW5jZXIgdGhhdCBpcyB1c2VkIHdpdGggYSBzZXJ2aWNlLlxuICogIElmIHRoZSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB0aGUgc2VydmljZSBpcyByZXF1aXJlZCB0byB1c2UgZWl0aGVyIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBXaGVuIHlvdSBhcmUgY3JlYXRpbmcgYW4gQUNEbG9uZyBkZXBsb3ltZW50IGdyb3VwLCB5b3Ugc3BlY2lmeSB0d28gdGFyZ2V0IGdyb3VwcyAocmVmZXJyZWQgdG8gYXMgYSBgYHRhcmdldEdyb3VwUGFpcmBgKS4gRWFjaCB0YXJnZXQgZ3JvdXAgYmluZHMgdG8gYSBzZXBhcmF0ZSB0YXNrIHNldCBpbiB0aGUgZGVwbG95bWVudC4gVGhlIGxvYWQgYmFsYW5jZXIgY2FuIGFsc28gaGF2ZSB1cCB0byB0d28gbGlzdGVuZXJzLCBhIHJlcXVpcmVkIGxpc3RlbmVyIGZvciBwcm9kdWN0aW9uIHRyYWZmaWMgYW5kIGFuIG9wdGlvbmFsIGxpc3RlbmVyIHRoYXQgYWxsb3dzIHlvdSB0byB0ZXN0IG5ldyByZXZpc2lvbnMgb2YgdGhlIHNlcnZpY2UgYmVmb3JlIHJvdXRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LlxuICogIFNlcnZpY2VzIHdpdGggdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIChmb3IgZXhhbXBsZSwgdGhvc2Ugd2l0aCB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSkgb25seSBzdXBwb3J0IEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzIGFuZCBOZXR3b3JrIExvYWQgQmFsYW5jZXJzLiBDbGFzc2ljIExvYWQgQmFsYW5jZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiBBbHNvLCB3aGVuIHlvdSBjcmVhdGUgYW55IHRhcmdldCBncm91cHMgZm9yIHRoZXNlIHNlcnZpY2VzLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gVGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgbm90IGFuIEFtYXpvbiBFQzIgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyIHtcbi8qKlxuICogVGhlIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgdGFyZ2V0IGdyb3VwIG9yIGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggYSBzZXJ2aWNlIG9yIHRhc2sgc2V0LlxuICogIEEgdGFyZ2V0IGdyb3VwIEFSTiBpcyBvbmx5IHNwZWNpZmllZCB3aGVuIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBcbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgRUNTYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UgY2FuIHNwZWNpZnkgb25lIG9yIG11bHRpcGxlIHRhcmdldCBncm91cHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JlZ2lzdGVyaW5nIG11bHRpcGxlIHRhcmdldCBncm91cHMgd2l0aCBhIHNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3JlZ2lzdGVyLW11bHRpcGxlLXRhcmdldGdyb3Vwcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UncmUgcmVxdWlyZWQgdG8gZGVmaW5lIHR3byB0YXJnZXQgZ3JvdXBzIGZvciB0aGUgbG9hZCBiYWxhbmNlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQmx1ZS9ncmVlbiBkZXBsb3ltZW50IHdpdGggQ29kZURlcGxveV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWJsdWVncmVlbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc2VydmljZSdzIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSwgeW91IG11c3QgY2hvb3NlIGBgaXBgYCBhcyB0aGUgdGFyZ2V0IHR5cGUsIG5vdCBgYGluc3RhbmNlYGAuIERvIHRoaXMgd2hlbiBjcmVhdGluZyB5b3VyIHRhcmdldCBncm91cHMgYmVjYXVzZSB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS4gVGhpcyBuZXR3b3JrIG1vZGUgaXMgcmVxdWlyZWQgZm9yIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLlxuICovXG5UYXJnZXRHcm91cEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbG9hZCBiYWxhbmNlciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIG9yIHRhc2sgc2V0LlxuICogIElmIHlvdSBhcmUgdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBhIE5ldHdvcmsgTG9hZCBCYWxhbmNlciB0aGUgbG9hZCBiYWxhbmNlciBuYW1lIHBhcmFtZXRlciBzaG91bGQgYmUgb21pdHRlZC5cbiAqL1xuTG9hZEJhbGFuY2VyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIChhcyBpdCBhcHBlYXJzIGluIGEgY29udGFpbmVyIGRlZmluaXRpb24pIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLlxuICogIFlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNvbnRhaW5lciBuYW1lIHdoZW4gY29uZmlndXJpbmcgdGhlIHRhcmdldCBncm91cCBmb3IgYW4gQW1hem9uIEVDUyBsb2FkIGJhbGFuY2VyLlxuICovXG5Db250YWluZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwb3J0IG9uIHRoZSBjb250YWluZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuIFRoaXMgcG9ydCBtdXN0IGNvcnJlc3BvbmQgdG8gYSBgYGNvbnRhaW5lclBvcnRgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgdXNpbmcuIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgY29udGFpbmVyIGluc3RhbmNlIHRoZXkncmUgbGF1bmNoZWQgb24gbXVzdCBhbGxvdyBpbmdyZXNzIHRyYWZmaWMgb24gdGhlIGBgaG9zdFBvcnRgYCBvZiB0aGUgcG9ydCBtYXBwaW5nLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG5BZHZhbmNlZENvbmZpZ3VyYXRpb24/OiBBZHZhbmNlZENvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIGFkdmFuY2VkIHNldHRpbmdzIGZvciB0aGUgbG9hZCBiYWxhbmNlciB1c2VkIGluIGJsdWUvZ3JlZW4gZGVwbG95bWVudHMuIFNwZWNpZnkgdGhlIGFsdGVybmF0ZSB0YXJnZXQgZ3JvdXAsIGxpc3RlbmVyIHJ1bGVzLCBhbmQgSUFNIHJvbGUgcmVxdWlyZWQgZm9yIHRyYWZmaWMgc2hpZnRpbmcgZHVyaW5nIGJsdWUvZ3JlZW4gZGVwbG95bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIHRoYXQgaWRlbnRpZmllcyApIHRoYXQgaWRlbnRpZmllcyB0aGUgdGVzdCBsaXN0ZW5lciBydWxlIChpbiB0aGUgY2FzZSBvZiBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyKSBvciBsaXN0ZW5lciAoaW4gdGhlIGNhc2UgZm9yIGFuIE5ldHdvcmsgTG9hZCBCYWxhbmNlcikgZm9yIHJvdXRpbmcgdGVzdCB0cmFmZmljLlxuICovXG5UZXN0TGlzdGVuZXJSdWxlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgYWx0ZXJuYXRlIHRhcmdldCBncm91cCBmb3IgQW1hem9uIEVDUyBibHVlL2dyZWVuIGRlcGxveW1lbnRzLlxuICovXG5BbHRlcm5hdGVUYXJnZXRHcm91cEFybjogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSB0aGF0IHRoYXQgaWRlbnRpZmllcyB0aGUgcHJvZHVjdGlvbiBsaXN0ZW5lciBydWxlIChpbiB0aGUgY2FzZSBvZiBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyKSBvciBsaXN0ZW5lciAoaW4gdGhlIGNhc2UgZm9yIGFuIE5ldHdvcmsgTG9hZCBCYWxhbmNlcikgZm9yIHJvdXRpbmcgcHJvZHVjdGlvbiB0cmFmZmljLlxuICovXG5Qcm9kdWN0aW9uTGlzdGVuZXJSdWxlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBncmFudHMgQW1hem9uIEVDUyBwZXJtaXNzaW9uIHRvIGNhbGwgdGhlIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgQVBJcyBmb3IgeW91LlxuICovXG5Sb2xlQXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHNlcnZpY2UgdG8gZGlzY292ZXIgYW5kIGNvbm5lY3QgdG8gc2VydmljZXMsIGFuZCBiZSBkaXNjb3ZlcmVkIGJ5LCBhbmQgY29ubmVjdGVkIGZyb20sIG90aGVyIHNlcnZpY2VzIHdpdGhpbiBhIG5hbWVzcGFjZS5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGxpc3Qgb2YgU2VydmljZSBDb25uZWN0IHNlcnZpY2Ugb2JqZWN0cy4gVGhlc2UgYXJlIG5hbWVzIGFuZCBhbGlhc2VzIChhbHNvIGtub3duIGFzIGVuZHBvaW50cykgdGhhdCBhcmUgdXNlZCBieSBvdGhlciBBbWF6b24gRUNTIHNlcnZpY2VzIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLiBcbiAqICBUaGlzIGZpZWxkIGlzIG5vdCByZXF1aXJlZCBmb3IgYSBcImNsaWVudFwiIEFtYXpvbiBFQ1Mgc2VydmljZSB0aGF0J3MgYSBtZW1iZXIgb2YgYSBuYW1lc3BhY2Ugb25seSB0byBjb25uZWN0IHRvIG90aGVyIHNlcnZpY2VzIHdpdGhpbiB0aGUgbmFtZXNwYWNlLiBBbiBleGFtcGxlIG9mIHRoaXMgd291bGQgYmUgYSBmcm9udGVuZCBhcHBsaWNhdGlvbiB0aGF0IGFjY2VwdHMgaW5jb21pbmcgcmVxdWVzdHMgZnJvbSBlaXRoZXIgYSBsb2FkIGJhbGFuY2VyIHRoYXQncyBhdHRhY2hlZCB0byB0aGUgc2VydmljZSBvciBieSBvdGhlciBtZWFucy5cbiAqICBBbiBvYmplY3Qgc2VsZWN0cyBhIHBvcnQgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLCBhc3NpZ25zIGEgbmFtZSBmb3IgdGhlIENNQVBsb25nIHNlcnZpY2UsIGFuZCBhIGxpc3Qgb2YgYWxpYXNlcyAoZW5kcG9pbnRzKSBhbmQgcG9ydHMgZm9yIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gcmVmZXIgdG8gdGhpcyBzZXJ2aWNlLlxuICovXG5TZXJ2aWNlcz86IFNlcnZpY2VDb25uZWN0U2VydmljZVtdXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSBTZXJ2aWNlIENvbm5lY3Qgd2l0aCB0aGlzIHNlcnZpY2UuXG4gKi9cbkVuYWJsZWQ6IGJvb2xlYW5cbkxvZ0NvbmZpZ3VyYXRpb24/OiBMb2dDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBuYW1lc3BhY2UgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBDTUFQbG9uZyBuYW1lc3BhY2UgZm9yIHVzZSB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gVGhlIG5hbWVzcGFjZSBtdXN0IGJlIGluIHRoZSBzYW1lIEFXUyBSZWdpb24gYXMgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBhbmQgY2x1c3Rlci4gVGhlIHR5cGUgb2YgbmFtZXNwYWNlIGRvZXNuJ3QgYWZmZWN0IFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ01BUGxvbmcsIHNlZSBbV29ya2luZyB3aXRoIFNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9kZy93b3JraW5nLXdpdGgtc2VydmljZXMuaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5OYW1lc3BhY2U/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlIG9iamVjdCBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RTZXJ2aWNlIHtcblRpbWVvdXQ/OiBUaW1lb3V0Q29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgcG9ydCBudW1iZXIgZm9yIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkgdG8gbGlzdGVuIG9uLlxuICogIFVzZSB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCB0byBieXBhc3MgdGhlIHByb3h5IGZvciB0cmFmZmljIG9uIHRoZSBwb3J0IG51bWJlciBzcGVjaWZpZWQgaW4gdGhlIG5hbWVkIGBgcG9ydE1hcHBpbmdgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIG9mIHRoaXMgYXBwbGljYXRpb24sIGFuZCB0aGVuIHVzZSBpdCBpbiB5b3VyIFZQQyBzZWN1cml0eSBncm91cHMgdG8gYWxsb3cgdHJhZmZpYyBpbnRvIHRoZSBwcm94eSBmb3IgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKiAgSW4gYGBhd3N2cGNgYCBtb2RlIGFuZCBGYXJnYXRlLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgY29udGFpbmVyIHBvcnQgbnVtYmVyLiBUaGUgY29udGFpbmVyIHBvcnQgbnVtYmVyIGlzIGluIHRoZSBgYHBvcnRNYXBwaW5nYGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSW4gYnJpZGdlIG1vZGUsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBlcGhlbWVyYWwgcG9ydCBvZiB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LlxuICovXG5JbmdyZXNzUG9ydE92ZXJyaWRlPzogbnVtYmVyXG4vKipcbiAqIFRoZSBsaXN0IG9mIGNsaWVudCBhbGlhc2VzIGZvciB0aGlzIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlLiBZb3UgdXNlIHRoZXNlIHRvIGFzc2lnbiBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjbGllbnQgYWxpYXNlcyB0aGF0IHlvdSBjYW4gaGF2ZSBpbiB0aGlzIGxpc3QgaXMgMS5cbiAqICBFYWNoIGFsaWFzIChcImVuZHBvaW50XCIpIGlzIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgYW5kIHBvcnQgbnVtYmVyIHRoYXQgb3RoZXIgQW1hem9uIEVDUyB0YXNrcyAoXCJjbGllbnRzXCIpIGNhbiB1c2UgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuXG4gKiAgRWFjaCBuYW1lIGFuZCBwb3J0IG1hcHBpbmcgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBuYW1lc3BhY2UuXG4gKiAgRm9yIGVhY2ggYGBTZXJ2aWNlQ29ubmVjdFNlcnZpY2VgYCwgeW91IG11c3QgcHJvdmlkZSBhdCBsZWFzdCBvbmUgYGBjbGllbnRBbGlhc2BgIHdpdGggb25lIGBgcG9ydGBgLlxuICovXG5DbGllbnRBbGlhc2VzPzogU2VydmljZUNvbm5lY3RDbGllbnRBbGlhc1tdXG5UbHM/OiBTZXJ2aWNlQ29ubmVjdFRsc0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzIHRoZSBuYW1lIG9mIHRoZSBuZXcgQ01BUCBzZXJ2aWNlIHRoYXQgQW1hem9uIEVDUyBjcmVhdGVzIGZvciB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS4gVGhpcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIENNQVAgbmFtZXNwYWNlLiBUaGUgbmFtZSBjYW4gY29udGFpbiB1cCB0byA2NCBjaGFyYWN0ZXJzLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMgKF8pLCBhbmQgaHlwaGVucyAoLSkuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKiAgSWYgdGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzbid0IHNwZWNpZmllZCwgdGhlIHBvcnQgbWFwcGluZyBuYW1lIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkIGluIGBgcG9ydE5hbWUubmFtZXNwYWNlYGAuXG4gKi9cbkRpc2NvdmVyeU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgcG9ydE5hbWVgYCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGUgYGBwb3J0TWFwcGluZ3NgYCBmcm9tIGFsbCB0aGUgY29udGFpbmVycyBpbiB0aGUgdGFzayBkZWZpbml0aW9uIG9mIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLlxuICovXG5Qb3J0TmFtZTogc3RyaW5nXG59XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyZWQgdGltZW91dHMgZm9yIFNlcnZpY2UgQ29ubmVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lb3V0Q29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSB3YWl0aW5nIGZvciB0aGUgdXBzdHJlYW0gdG8gcmVzcG9uZCB3aXRoIGEgY29tcGxldGUgcmVzcG9uc2UgcGVyIHJlcXVlc3QuIEEgdmFsdWUgb2YgYGAwYGAgY2FuIGJlIHNldCB0byBkaXNhYmxlIGBgcGVyUmVxdWVzdFRpbWVvdXRgYC4gYGBwZXJSZXF1ZXN0VGltZW91dGBgIGNhbiBvbmx5IGJlIHNldCBpZiBTZXJ2aWNlIENvbm5lY3QgYGBhcHBQcm90b2NvbGBgIGlzbid0IGBgVENQYGAuIE9ubHkgYGBpZGxlVGltZW91dGBgIGlzIGFsbG93ZWQgZm9yIGBgVENQYGBgYGFwcFByb3RvY29sYGAuXG4gKi9cblBlclJlcXVlc3RUaW1lb3V0U2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBhIGNvbm5lY3Rpb24gd2lsbCBzdGF5IGFjdGl2ZSB3aGlsZSBpZGxlLiBBIHZhbHVlIG9mIGBgMGBgIGNhbiBiZSBzZXQgdG8gZGlzYWJsZSBgYGlkbGVUaW1lb3V0YGAuXG4gKiAgVGhlIGBgaWRsZVRpbWVvdXRgYCBkZWZhdWx0IGZvciBgYEhUVFBgYC9gYEhUVFAyYGAvYGBHUlBDYGAgaXMgNSBtaW51dGVzLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBUQ1BgYCBpcyAxIGhvdXIuXG4gKi9cbklkbGVUaW1lb3V0U2Vjb25kcz86IG51bWJlclxufVxuLyoqXG4gKiBFYWNoIGFsaWFzIChcImVuZHBvaW50XCIpIGlzIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgYW5kIHBvcnQgbnVtYmVyIHRoYXQgb3RoZXIgdGFza3MgKFwiY2xpZW50c1wiKSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLlxuICogIEVhY2ggbmFtZSBhbmQgcG9ydCBtYXBwaW5nIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzIHtcbi8qKlxuICogVGhlIGBgZG5zTmFtZWBgIGlzIHRoZSBuYW1lIHRoYXQgeW91IHVzZSBpbiB0aGUgYXBwbGljYXRpb25zIG9mIGNsaWVudCB0YXNrcyB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS4gVGhlIG5hbWUgbXVzdCBiZSBhIHZhbGlkIEROUyBuYW1lIGJ1dCBkb2Vzbid0IG5lZWQgdG8gYmUgZnVsbHktcXVhbGlmaWVkLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSB1cCB0byAxMjcgY2hhcmFjdGVycy4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgaHlwaGVucyAoLSksIGFuZCBwZXJpb2RzICguKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgZGlzY292ZXJ5TmFtZS5uYW1lc3BhY2VgYCBpcyB1c2VkLiBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgbmFtZSB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgZXhhbXBsZSwgYSBmZXcgY29tbW9uIG5hbWVzIGFyZSBgYGRhdGFiYXNlYGAsIGBgZGJgYCwgb3IgdGhlIGxvd2VyY2FzZSBuYW1lIG9mIGEgZGF0YWJhc2UsIHN1Y2ggYXMgYGBteXNxbGBgIG9yIGBgcmVkaXNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5EbnNOYW1lPzogc3RyaW5nXG5UZXN0VHJhZmZpY1J1bGVzPzogU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzXG4vKipcbiAqIFRoZSBsaXN0ZW5pbmcgcG9ydCBudW1iZXIgZm9yIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuIFRoaXMgcG9ydCBpcyBhdmFpbGFibGUgaW5zaWRlIG9mIGFsbCBvZiB0aGUgdGFza3Mgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZS5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgcG9ydCB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBvcnQ6IG51bWJlclxufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGVzdCB0cmFmZmljIHJvdXRpbmcgcnVsZXMgdXNlZCBkdXJpbmcgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cyB3aXRoIEFtYXpvbiBFQ1MgU2VydmljZSBDb25uZWN0LiBUaGlzIGFsbG93cyB5b3UgdG8gcm91dGUgYSBwb3J0aW9uIG9mIHRyYWZmaWMgdG8gdGhlIG5ldyBzZXJ2aWNlIHJldmlzaW9uIG9mIHlvdXIgc2VydmljZSBmb3IgdGVzdGluZyBiZWZvcmUgc2hpZnRpbmcgYWxsIHByb2R1Y3Rpb24gdHJhZmZpYy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRlc3RUcmFmZmljUnVsZXMge1xuSGVhZGVyOiBTZXJ2aWNlQ29ubmVjdFRlc3RUcmFmZmljUnVsZXNIZWFkZXJcbn1cbi8qKlxuICogVGhlIEhUVFAgaGVhZGVyLWJhc2VkIHJvdXRpbmcgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggcmVxdWVzdHMgc2hvdWxkIGJlIHJvdXRlZCB0byB0aGUgbmV3IHNlcnZpY2UgdmVyc2lvbiBkdXJpbmcgYmx1ZS9ncmVlbiBkZXBsb3ltZW50IHRlc3RpbmcuIFRoZXNlIHJ1bGVzIHByb3ZpZGUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0ZXN0IHRyYWZmaWMgcm91dGluZyBiYXNlZCBvbiByZXF1ZXN0IGhlYWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzSGVhZGVyIHtcblZhbHVlPzogU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzSGVhZGVyVmFsdWVcbk5hbWU6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRlc3RUcmFmZmljUnVsZXNIZWFkZXJWYWx1ZSB7XG5FeGFjdDogc3RyaW5nXG59XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NvbmZpZ3VyYXRpb24ge1xuSXNzdWVyQ2VydGlmaWNhdGVBdXRob3JpdHk6IFNlcnZpY2VDb25uZWN0VGxzQ2VydGlmaWNhdGVBdXRob3JpdHlcbi8qKlxuICogVGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleS5cbiAqL1xuS21zS2V5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgU2VydmljZSBDb25uZWN0IFRMUy5cbiAqL1xuUm9sZUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgc2lnbmVyIGNlcnRpZmljYXRlIGF1dGhvcml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5IHtcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGNlcnRpZmljYXRlLlxuICovXG5Bd3NQY2FBdXRob3JpdHlBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgTG9nQ29uZmlnYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tbG9nLWRyaXZlcmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogIEJ5IGRlZmF1bHQsIGNvbnRhaW5lcnMgdXNlIHRoZSBzYW1lIGxvZ2dpbmcgZHJpdmVyIHRoYXQgdGhlIERvY2tlciBkYWVtb24gdXNlcy4gSG93ZXZlciwgdGhlIGNvbnRhaW5lciBtaWdodCB1c2UgYSBkaWZmZXJlbnQgbG9nZ2luZyBkcml2ZXIgdGhhbiB0aGUgRG9ja2VyIGRhZW1vbiBieSBzcGVjaWZ5aW5nIGEgbG9nIGRyaXZlciBjb25maWd1cmF0aW9uIGluIHRoZSBjb250YWluZXIgZGVmaW5pdGlvbi5cbiAqICBVbmRlcnN0YW5kIHRoZSBmb2xsb3dpbmcgd2hlbiBzcGVjaWZ5aW5nIGEgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgY29udGFpbmVycy5cbiAqICAgKyAgQW1hem9uIEVDUyBjdXJyZW50bHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgdGhlIGxvZ2dpbmcgZHJpdmVycyBhdmFpbGFibGUgdG8gdGhlIERvY2tlciBkYWVtb24uIEFkZGl0aW9uYWwgbG9nIGRyaXZlcnMgbWF5IGJlIGF2YWlsYWJsZSBpbiBmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50LlxuICogIEZvciB0YXNrcyBvbiBGQVJHQVRFbG9uZywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIHRhc2tzIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgZmx1ZW50ZGBgLCBgYGdlbGZgYCwgYGBqc29uLWZpbGVgYCwgYGBqb3VybmFsZGBgLGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgICsgIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOCBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS5cbiAqICAgKyAgRm9yIHRhc2tzIHRoYXQgYXJlIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IG11c3QgcmVnaXN0ZXIgdGhlIGF2YWlsYWJsZSBsb2dnaW5nIGRyaXZlcnMgd2l0aCB0aGUgYGBFQ1NfQVZBSUxBQkxFX0xPR0dJTkdfRFJJVkVSU2BgIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZSBjb250YWluZXJzIHBsYWNlZCBvbiB0aGF0IGluc3RhbmNlIGNhbiB1c2UgdGhlc2UgbG9nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgY29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLWFnZW50LWNvbmZpZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBvbiBGQVJHQVRFbG9uZywgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgeW91ciB0YXNrcyBhcmUgaG9zdGVkIG9uLCBhbnkgYWRkaXRpb25hbCBzb2Z0d2FyZSBuZWVkZWQgbXVzdCBiZSBpbnN0YWxsZWQgb3V0c2lkZSBvZiB0aGUgdGFzay4gRm9yIGV4YW1wbGUsIHRoZSBGbHVlbnRkIG91dHB1dCBhZ2dyZWdhdG9ycyBvciBhIHJlbW90ZSBob3N0IHJ1bm5pbmcgTG9nc3Rhc2ggdG8gc2VuZCBHZWxmIGxvZ3MgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzZWNyZXRzIHRvIHBhc3MgdG8gdGhlIGxvZyBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIHNlbnNpdGl2ZSBkYXRhXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuU2VjcmV0T3B0aW9ucz86IFNlY3JldFtdXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VuZCB0byB0aGUgbG9nIGRyaXZlci5cbiAqICBUaGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgZGVwZW5kIG9uIHRoZSBsb2cgZHJpdmVyLiBTb21lIG9mIHRoZSBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSB3aGVuIHlvdSB1c2UgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIgdG8gcm91dGUgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgYXdzbG9ncy1jcmVhdGUtZ3JvdXAgUmVxdWlyZWQ6IE5vIFNwZWNpZnkgd2hldGhlciB5b3Ugd2FudCB0aGUgbG9nIGdyb3VwIHRvIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS4gSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBmYWxzZS4gWW91ciBJQU0gcG9saWN5IG11c3QgaW5jbHVkZSB0aGUgbG9nczpDcmVhdGVMb2dHcm91cCBwZXJtaXNzaW9uIGJlZm9yZSB5b3UgYXR0ZW1wdCB0byB1c2UgYXdzbG9ncy1jcmVhdGUtZ3JvdXAuICsgYXdzbG9ncy1yZWdpb24gUmVxdWlyZWQ6IFllcyBTcGVjaWZ5IHRoZSBSZWdpb24gdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIGlzIHRvIHNlbmQgeW91ciBEb2NrZXIgbG9ncyB0by4gWW91IGNhbiBjaG9vc2UgdG8gc2VuZCBhbGwgb2YgeW91ciBsb2dzIGZyb20gY2x1c3RlcnMgaW4gZGlmZmVyZW50IFJlZ2lvbnMgdG8gYSBzaW5nbGUgcmVnaW9uIGluIENsb3VkV2F0Y2ggTG9ncy4gVGhpcyBpcyBzbyB0aGF0IHRoZXkncmUgYWxsIHZpc2libGUgaW4gb25lIGxvY2F0aW9uLiBPdGhlcndpc2UsIHlvdSBjYW4gc2VwYXJhdGUgdGhlbSBieSBSZWdpb24gZm9yIG1vcmUgZ3JhbnVsYXJpdHkuIE1ha2Ugc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgbG9nIGdyb3VwIGV4aXN0cyBpbiB0aGUgUmVnaW9uIHRoYXQgeW91IHNwZWNpZnkgd2l0aCB0aGlzIG9wdGlvbi4gKyBhd3Nsb2dzLWdyb3VwIFJlcXVpcmVkOiBZZXMgTWFrZSBzdXJlIHRvIHNwZWNpZnkgYSBsb2cgZ3JvdXAgdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIHNlbmRzIGl0cyBsb2cgc3RyZWFtcyB0by4gKyBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggUmVxdWlyZWQ6IFllcywgd2hlbiB1c2luZyBGYXJnYXRlLk9wdGlvbmFsIHdoZW4gdXNpbmcgRUMyLiBVc2UgdGhlIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBvcHRpb24gdG8gYXNzb2NpYXRlIGEgbG9nIHN0cmVhbSB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LCB0aGUgY29udGFpbmVyIG5hbWUsIGFuZCB0aGUgSUQgb2YgdGhlIEFtYXpvbiBFQ1MgdGFzayB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0by4gSWYgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSB0YWtlcyB0aGUgZm9ybWF0IHByZWZpeC1uYW1lL2NvbnRhaW5lci1uYW1lL2Vjcy10YXNrLWlkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLCB0aGVuIHRoZSBsb2cgc3RyZWFtIGlzIG5hbWVkIGFmdGVyIHRoZSBjb250YWluZXIgSUQgdGhhdCdzIGFzc2lnbmVkIGJ5IHRoZSBEb2NrZXIgZGFlbW9uIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UuIEJlY2F1c2UgaXQncyBkaWZmaWN1bHQgdG8gdHJhY2UgbG9ncyBiYWNrIHRvIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0gd2l0aCBqdXN0IHRoZSBEb2NrZXIgY29udGFpbmVyIElEICh3aGljaCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlKSwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbi4gRm9yIEFtYXpvbiBFQ1Mgc2VydmljZXMsIHlvdSBjYW4gdXNlIHRoZSBzZXJ2aWNlIG5hbWUgYXMgdGhlIHByZWZpeC4gRG9pbmcgc28sIHlvdSBjYW4gdHJhY2UgbG9nIHN0cmVhbXMgdG8gdGhlIHNlcnZpY2UgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8sIHRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0sIGFuZCB0aGUgSUQgb2YgdGhlIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIFlvdSBtdXN0IHNwZWNpZnkgYSBzdHJlYW0tcHJlZml4IGZvciB5b3VyIGxvZ3MgdG8gaGF2ZSB5b3VyIGxvZ3MgYXBwZWFyIGluIHRoZSBMb2cgcGFuZSB3aGVuIHVzaW5nIHRoZSBBbWF6b24gRUNTIGNvbnNvbGUuICsgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiBpbiBQeXRob24gc3RyZnRpbWUgZm9ybWF0LiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIE9uZSBleGFtcGxlIG9mIGEgdXNlIGNhc2UgZm9yIHVzaW5nIHRoaXMgZm9ybWF0IGlzIGZvciBwYXJzaW5nIG91dHB1dCBzdWNoIGFzIGEgc3RhY2sgZHVtcCwgd2hpY2ggbWlnaHQgb3RoZXJ3aXNlIGJlIGxvZ2dlZCBpbiBtdWx0aXBsZSBlbnRyaWVzLiBUaGUgY29ycmVjdCBwYXR0ZXJuIGFsbG93cyBpdCB0byBiZSBjYXB0dXJlZCBpbiBhIHNpbmdsZSBlbnRyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiArIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiB0aGF0IHVzZXMgYSByZWd1bGFyIGV4cHJlc3Npb24uIEEgbG9nIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybiBhbmQgYW55IGZvbGxvd2luZyBsaW5lcyB0aGF0IGRvbuKAmXQgbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZSBtYXRjaGVkIGxpbmUgaXMgdGhlIGRlbGltaXRlciBiZXR3ZWVuIGxvZyBtZXNzYWdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuLiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGlzIGFsc28gY29uZmlndXJlZC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiBcbiAqICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXBwbHkgdG8gYWxsIHN1cHBvcnRlZCBsb2cgZHJpdmVycy5cbiAqICAgKyBtb2RlIFJlcXVpcmVkOiBObyBWYWxpZCB2YWx1ZXM6IG5vbi1ibG9ja2luZyB8IGJsb2NraW5nIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIGRlbGl2ZXJ5IG1vZGUgb2YgbG9nIG1lc3NhZ2VzIGZyb20gdGhlIGNvbnRhaW5lciB0byB0aGUgbG9nIGRyaXZlciBzcGVjaWZpZWQgdXNpbmcgbG9nRHJpdmVyLiBUaGUgZGVsaXZlcnkgbW9kZSB5b3UgY2hvb3NlIGFmZmVjdHMgYXBwbGljYXRpb24gYXZhaWxhYmlsaXR5IHdoZW4gdGhlIGZsb3cgb2YgbG9ncyBmcm9tIGNvbnRhaW5lciBpcyBpbnRlcnJ1cHRlZC4gSWYgeW91IHVzZSB0aGUgYmxvY2tpbmcgbW9kZSBhbmQgdGhlIGZsb3cgb2YgbG9ncyBpcyBpbnRlcnJ1cHRlZCwgY2FsbHMgZnJvbSBjb250YWluZXIgY29kZSB0byB3cml0ZSB0byB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyB3aWxsIGJsb2NrLiBUaGUgbG9nZ2luZyB0aHJlYWQgb2YgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmxvY2sgYXMgYSByZXN1bHQuIFRoaXMgbWF5IGNhdXNlIHRoZSBhcHBsaWNhdGlvbiB0byBiZWNvbWUgdW5yZXNwb25zaXZlIGFuZCBsZWFkIHRvIGNvbnRhaW5lciBoZWFsdGhjaGVjayBmYWlsdXJlLiBJZiB5b3UgdXNlIHRoZSBub24tYmxvY2tpbmcgbW9kZSwgdGhlIGNvbnRhaW5lcidzIGxvZ3MgYXJlIGluc3RlYWQgc3RvcmVkIGluIGFuIGluLW1lbW9yeSBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvbmZpZ3VyZWQgd2l0aCB0aGUgbWF4LWJ1ZmZlci1zaXplIG9wdGlvbi4gVGhpcyBwcmV2ZW50cyB0aGUgYXBwbGljYXRpb24gZnJvbSBiZWNvbWluZyB1bnJlc3BvbnNpdmUgd2hlbiBsb2dzIGNhbm5vdCBiZSBzZW50LiBXZSByZWNvbW1lbmQgdXNpbmcgdGhpcyBtb2RlIGlmIHlvdSB3YW50IHRvIGVuc3VyZSBzZXJ2aWNlIGF2YWlsYWJpbGl0eSBhbmQgYXJlIG9rYXkgd2l0aCBzb21lIGxvZyBsb3NzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFByZXZlbnRpbmcgbG9nIGxvc3Mgd2l0aCBub24tYmxvY2tpbmcgbW9kZSBpbiB0aGUgYXdzbG9ncyBjb250YWluZXIgbG9nIGRyaXZlci4gWW91IGNhbiBzZXQgYSBkZWZhdWx0IG1vZGUgZm9yIGFsbCBjb250YWluZXJzIGluIGEgc3BlY2lmaWMgUmVnaW9uIGJ5IHVzaW5nIHRoZSBkZWZhdWx0TG9nRHJpdmVyTW9kZSBhY2NvdW50IHNldHRpbmcuIElmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBtb2RlIG9wdGlvbiBvciBjb25maWd1cmUgdGhlIGFjY291bnQgc2V0dGluZywgQW1hem9uIEVDUyB3aWxsIGRlZmF1bHQgdG8gdGhlIG5vbi1ibG9ja2luZyBtb2RlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWNjb3VudCBzZXR0aW5nLCBzZWUgRGVmYXVsdCBsb2cgZHJpdmVyIG1vZGUgaW4gdGhlIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZS4gT24gSnVuZSAyNSwgMjAyNSwgQW1hem9uIEVDUyBjaGFuZ2VkIHRoZSBkZWZhdWx0IGxvZyBkcml2ZXIgbW9kZSBmcm9tIGJsb2NraW5nIHRvIG5vbi1ibG9ja2luZyB0byBwcmlvcml0aXplIHRhc2sgYXZhaWxhYmlsaXR5IG92ZXIgbG9nZ2luZy4gVG8gY29udGludWUgdXNpbmcgdGhlIGJsb2NraW5nIG1vZGUgYWZ0ZXIgdGhpcyBjaGFuZ2UsIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBTZXQgdGhlIG1vZGUgb3B0aW9uIGluIHlvdXIgY29udGFpbmVyIGRlZmluaXRpb24ncyBsb2dDb25maWd1cmF0aW9uIGFzIGJsb2NraW5nLiBTZXQgdGhlIGRlZmF1bHRMb2dEcml2ZXJNb2RlIGFjY291bnQgc2V0dGluZyB0byBibG9ja2luZy4gKyBtYXgtYnVmZmVyLXNpemUgUmVxdWlyZWQ6IE5vIERlZmF1bHQgdmFsdWU6IDFtIFdoZW4gbm9uLWJsb2NraW5nIG1vZGUgaXMgdXNlZCwgdGhlIG1heC1idWZmZXItc2l6ZSBsb2cgb3B0aW9uIGNvbnRyb2xzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdGhhdCdzIHVzZWQgZm9yIGludGVybWVkaWF0ZSBtZXNzYWdlIHN0b3JhZ2UuIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGFuIGFkZXF1YXRlIGJ1ZmZlciBzaXplIGJhc2VkIG9uIHlvdXIgYXBwbGljYXRpb24uIFdoZW4gdGhlIGJ1ZmZlciBmaWxscyB1cCwgZnVydGhlciBsb2dzIGNhbm5vdCBiZSBzdG9yZWQuIExvZ3MgdGhhdCBjYW5ub3QgYmUgc3RvcmVkIGFyZSBsb3N0LiBcbiAqICBUbyByb3V0ZSBsb2dzIHVzaW5nIHRoZSBgYHNwbHVua2BgIGxvZyByb3V0ZXIsIHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBgYHNwbHVuay10b2tlbmBgIGFuZCBhIGBgc3BsdW5rLXVybGBgLlxuICogIFdoZW4geW91IHVzZSB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyByb3V0ZXIgdG8gcm91dGUgbG9ncyB0byBhbiBBV1MgU2VydmljZSBvciBBV1MgUGFydG5lciBOZXR3b3JrIGRlc3RpbmF0aW9uIGZvciBsb2cgc3RvcmFnZSBhbmQgYW5hbHl0aWNzLCB5b3UgY2FuIHNldCB0aGUgYGBsb2ctZHJpdmVyLWJ1ZmZlci1saW1pdGBgIG9wdGlvbiB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGV2ZW50cyB0aGF0IGFyZSBidWZmZXJlZCBpbiBtZW1vcnksIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBsb2cgcm91dGVyIGNvbnRhaW5lci4gSXQgY2FuIGhlbHAgdG8gcmVzb2x2ZSBwb3RlbnRpYWwgbG9nIGxvc3MgaXNzdWUgYmVjYXVzZSBoaWdoIHRocm91Z2hwdXQgbWlnaHQgcmVzdWx0IGluIG1lbW9yeSBydW5uaW5nIG91dCBmb3IgdGhlIGJ1ZmZlciBpbnNpZGUgb2YgRG9ja2VyLlxuICogIE90aGVyIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IHdoZW4gdXNpbmcgYGBhd3NmaXJlbGVuc2BgIHRvIHJvdXRlIGxvZ3MgZGVwZW5kIG9uIHRoZSBkZXN0aW5hdGlvbi4gV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIERhdGEgRmlyZWhvc2UsIHlvdSBjYW4gc3BlY2lmeSB0aGUgQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgbmFtZSBmb3IgdGhlIGxvZyBzdHJlYW0gd2l0aCBgYGRlbGl2ZXJ5X3N0cmVhbWBgLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBLaW5lc2lzIERhdGEgU3RyZWFtcywgeW91IGNhbiBzcGVjaWZ5IGFuIEFXUyBSZWdpb24gd2l0aCBgYHJlZ2lvbmBgIGFuZCBhIGRhdGEgc3RyZWFtIG5hbWUgd2l0aCBgYHN0cmVhbWBgLlxuICogICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlLCB5b3UgY2FuIHNwZWNpZnkgb3B0aW9ucyBsaWtlIGBgTmFtZWBgLCBgYEhvc3RgYCAoT3BlblNlYXJjaCBTZXJ2aWNlIGVuZHBvaW50IHdpdGhvdXQgcHJvdG9jb2wpLCBgYFBvcnRgYCwgYGBJbmRleGBgLCBgYFR5cGVgYCwgYGBBd3NfYXV0aGBgLCBgYEF3c19yZWdpb25gYCwgYGBTdXBwcmVzc19UeXBlX05hbWVgYCwgYW5kIGBgdGxzYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VuZGVyIHRoZSBob29kOiBGaXJlTGVucyBmb3IgQW1hem9uIEVDUyBUYXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvbnRhaW5lcnMvdW5kZXItdGhlLWhvb2QtZmlyZWxlbnMtZm9yLWFtYXpvbi1lY3MtdGFza3MvKS5cbiAqICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gUzMsIHlvdSBjYW4gc3BlY2lmeSB0aGUgYnVja2V0IHVzaW5nIHRoZSBgYGJ1Y2tldGBgIG9wdGlvbi4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYGByZWdpb25gYCwgYGB0b3RhbF9maWxlX3NpemVgYCwgYGB1cGxvYWRfdGltZW91dGBgLCBhbmQgYGB1c2VfcHV0X29iamVjdGBgIGFzIG9wdGlvbnMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE5IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLiBUbyBjaGVjayB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgdmVyc2lvbiBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSwgbG9nIGluIHRvIHlvdXIgY29udGFpbmVyIGluc3RhbmNlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOiBgYHN1ZG8gZG9ja2VyIHZlcnNpb24gLS1mb3JtYXQgJ3t7LlNlcnZlci5BUElWZXJzaW9ufX0nYGBcbiAqL1xuT3B0aW9ucz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGRyaXZlciB0byB1c2UgZm9yIHRoZSBjb250YWluZXIuXG4gKiAgRm9yIHRhc2tzIG9uIEZBUkdBVEVsb25nLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgdGFza3MgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBmbHVlbnRkYGAsIGBgZ2VsZmBgLCBgYGpzb24tZmlsZWBgLCBgYGpvdXJuYWxkYGAsIGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gQ2xvdWRXYXRjaF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfYXdzbG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzZmlyZWxlbnNgYCBsb2cgZHJpdmVyLCBzZWUgW1NlbmQgQW1hem9uIEVDUyBsb2dzIHRvIGFuIHNlcnZpY2Ugb3IgUGFydG5lcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfZmlyZWxlbnMuaHRtbCkuXG4gKiAgIElmIHlvdSBoYXZlIGEgY3VzdG9tIGRyaXZlciB0aGF0IGlzbid0IGxpc3RlZCwgeW91IGNhbiBmb3JrIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBwcm9qZWN0IHRoYXQncyBbYXZhaWxhYmxlIG9uIEdpdEh1Yl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYW1hem9uLWVjcy1hZ2VudCkgYW5kIGN1c3RvbWl6ZSBpdCB0byB3b3JrIHdpdGggdGhhdCBkcml2ZXIuIFdlIGVuY291cmFnZSB5b3UgdG8gc3VibWl0IHB1bGwgcmVxdWVzdHMgZm9yIGNoYW5nZXMgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBoYXZlIGluY2x1ZGVkLiBIb3dldmVyLCB3ZSBkb24ndCBjdXJyZW50bHkgcHJvdmlkZSBzdXBwb3J0IGZvciBydW5uaW5nIG1vZGlmaWVkIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLlxuICovXG5Mb2dEcml2ZXI/OiBzdHJpbmdcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VjcmV0IHRvIGV4cG9zZSB0byB5b3VyIGNvbnRhaW5lci4gU2VjcmV0cyBjYW4gYmUgZXhwb3NlZCB0byBhIGNvbnRhaW5lciBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAgICsgIFRvIGluamVjdCBzZW5zaXRpdmUgZGF0YSBpbnRvIHlvdXIgY29udGFpbmVycyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHVzZSB0aGUgYGBzZWNyZXRzYGAgY29udGFpbmVyIGRlZmluaXRpb24gcGFyYW1ldGVyLlxuICogICArICBUbyByZWZlcmVuY2Ugc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIHRoZSBsb2cgY29uZmlndXJhdGlvbiBvZiBhIGNvbnRhaW5lciwgdXNlIHRoZSBgYHNlY3JldE9wdGlvbnNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgc2Vuc2l0aXZlIGRhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldCB7XG4vKipcbiAqIFRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHRoZSBjb250YWluZXIuIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9mIHRoZSBBU01sb25nIHNlY3JldCBvciB0aGUgZnVsbCBBUk4gb2YgdGhlIHBhcmFtZXRlciBpbiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVpcmUgSUFNbG9uZyBwZXJtaXNzaW9ucywgc2VlIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1zZWNyZXRzLmh0bWwjc2VjcmV0cy1pYW0pIChmb3IgU2VjcmV0cyBNYW5hZ2VyKSBvciBbUmVxdWlyZWQgSUFNIHBlcm1pc3Npb25zIGZvciBBbWF6b24gRUNTIHNlY3JldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEtcGFyYW1ldGVycy5odG1sKSAoZm9yIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgc3RvcmUpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGFyYW1ldGVyIGV4aXN0cyBpbiB0aGUgc2FtZSBSZWdpb24gYXMgdGhlIHRhc2sgeW91J3JlIGxhdW5jaGluZywgdGhlbiB5b3UgY2FuIHVzZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9yIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4gSWYgdGhlIHBhcmFtZXRlciBleGlzdHMgaW4gYSBkaWZmZXJlbnQgUmVnaW9uLCB0aGVuIHRoZSBmdWxsIEFSTiBtdXN0IGJlIHNwZWNpZmllZC5cbiAqL1xuVmFsdWVGcm9tOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHNlY3JldC5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uIGZvciB5b3VyIHNlcnZpY2UgdGhhdCBob2xkcyB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSB0YXJnZXQgZ3JvdXAocykgQW1hem9uIEVDUyB0YXNrcyB3aWxsIGJlIHJlZ2lzdGVyZWQgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjTGF0dGljZUNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgdGFyZ2V0IGdyb3VwIG9yIGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gdGhhdCB0aGUgQW1hem9uIEVDUyB0YXNrcyB3aWxsIGJlIHJlZ2lzdGVyZWQgdG8uXG4gKi9cblRhcmdldEdyb3VwQXJuOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHBvcnQgbWFwcGluZyB0byByZWdpc3RlciBpbiB0aGUgVlBDIExhdHRpY2UgdGFyZ2V0IGdyb3VwLiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBgYHBvcnRNYXBwaW5nYGAgeW91IGRlZmluZWQgaW4geW91ciB0YXNrIGRlZmluaXRpb24uXG4gKi9cblBvcnROYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHRoZSBBbWF6b24gRUNT4oCoIGluZnJhc3RydWN0dXJlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBtYW5hZ2UgeW91ciBWUEMgTGF0dGljZSBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdG8gdXNlIGZvciB0aGUgc2VydmljZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q29udHJvbGxlciB7XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZSB0byB1c2UuXG4gKiAgVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciBpcyB0aGUgbWVjaGFuaXNtIHRoYXQgZGV0ZXJtaW5lcyBob3cgdGFza3MgYXJlIGRlcGxveWVkIGZvciB5b3VyIHNlcnZpY2UuIFRoZSB2YWxpZCBvcHRpb25zIGFyZTpcbiAqICAgKyAgRUNTXG4gKiAgV2hlbiB5b3UgY3JlYXRlIGEgc2VydmljZSB3aGljaCB1c2VzIHRoZSBgYEVDU2BgIGRlcGxveW1lbnQgY29udHJvbGxlciwgeW91IGNhbiBjaG9vc2UgYmV0d2VlbiB0aGUgZm9sbG93aW5nIGRlcGxveW1lbnQgc3RyYXRlZ2llczpcbiAqICAgKyAgYGBST0xMSU5HYGA6IFdoZW4geW91IGNyZWF0ZSBhIHNlcnZpY2Ugd2hpY2ggdXNlcyB0aGUgKnJvbGxpbmcgdXBkYXRlKiAoYGBST0xMSU5HYGApIGRlcGxveW1lbnQgc3RyYXRlZ3ksIHRoZSBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgcmVwbGFjZXMgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2tzIHdpdGggbmV3IHRhc2tzLiBUaGUgbnVtYmVyIG9mIHRhc2tzIHRoYXQgRUNTIGFkZHMgb3IgcmVtb3ZlcyBmcm9tIHRoZSBzZXJ2aWNlIGR1cmluZyBhIHJvbGxpbmcgdXBkYXRlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlcnZpY2UgZGVwbG95bWVudCBjb25maWd1cmF0aW9uLiBcbiAqICBSb2xsaW5nIHVwZGF0ZSBkZXBsb3ltZW50cyBhcmUgYmVzdCBzdWl0ZWQgZm9yIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxuICogICArICBHcmFkdWFsIHNlcnZpY2UgdXBkYXRlczogWW91IG5lZWQgdG8gdXBkYXRlIHlvdXIgc2VydmljZSBpbmNyZW1lbnRhbGx5IHdpdGhvdXQgdGFraW5nIHRoZSBlbnRpcmUgc2VydmljZSBvZmZsaW5lIGF0IG9uY2UuXG4gKiAgICsgIExpbWl0ZWQgcmVzb3VyY2UgcmVxdWlyZW1lbnRzOiBZb3Ugd2FudCB0byBhdm9pZCB0aGUgYWRkaXRpb25hbCByZXNvdXJjZSBjb3N0cyBvZiBydW5uaW5nIHR3byBjb21wbGV0ZSBlbnZpcm9ubWVudHMgc2ltdWx0YW5lb3VzbHkgKGFzIHJlcXVpcmVkIGJ5IGJsdWUvZ3JlZW4gZGVwbG95bWVudHMpLlxuICogICArICBBY2NlcHRhYmxlIGRlcGxveW1lbnQgdGltZTogWW91ciBhcHBsaWNhdGlvbiBjYW4gdG9sZXJhdGUgYSBsb25nZXIgZGVwbG95bWVudCBwcm9jZXNzLCBhcyByb2xsaW5nIHVwZGF0ZXMgcmVwbGFjZSB0YXNrcyBvbmUgYnkgb25lLlxuICogICArICBObyBuZWVkIGZvciBpbnN0YW50IHJvbGwgYmFjazogWW91ciBzZXJ2aWNlIGNhbiB0b2xlcmF0ZSBhIHJvbGxiYWNrIHByb2Nlc3MgdGhhdCB0YWtlcyBtaW51dGVzIHJhdGhlciB0aGFuIHNlY29uZHMuXG4gKiAgICsgIFNpbXBsZSBkZXBsb3ltZW50IHByb2Nlc3M6IFlvdSBwcmVmZXIgYSBzdHJhaWdodGZvcndhcmQgZGVwbG95bWVudCBhcHByb2FjaCB3aXRob3V0IHRoZSBjb21wbGV4aXR5IG9mIG1hbmFnaW5nIG11bHRpcGxlIGVudmlyb25tZW50cywgdGFyZ2V0IGdyb3VwcywgYW5kIGxpc3RlbmVycy5cbiAqICAgKyAgTm8gbG9hZCBiYWxhbmNlciByZXF1aXJlbWVudDogWW91ciBzZXJ2aWNlIGRvZXNuJ3QgdXNlIG9yIHJlcXVpcmUgYSBsb2FkIGJhbGFuY2VyLCBBTEIsIE5MQiwgb3IgU2VydmljZSBDb25uZWN0ICh3aGljaCBhcmUgcmVxdWlyZWQgZm9yIGJsdWUvZ3JlZW4gZGVwbG95bWVudHMpLlxuICogICArICBTdGF0ZWZ1bCBhcHBsaWNhdGlvbnM6IFlvdXIgYXBwbGljYXRpb24gbWFpbnRhaW5zIHN0YXRlIHRoYXQgbWFrZXMgaXQgZGlmZmljdWx0IHRvIHJ1biB0d28gcGFyYWxsZWwgZW52aXJvbm1lbnRzLlxuICogICArICBDb3N0IHNlbnNpdGl2aXR5OiBZb3Ugd2FudCB0byBtaW5pbWl6ZSBkZXBsb3ltZW50IGNvc3RzIGJ5IG5vdCBydW5uaW5nIGR1cGxpY2F0ZSBlbnZpcm9ubWVudHMgZHVyaW5nIGRlcGxveW1lbnQuXG4gKiAgIFxuICogIFJvbGxpbmcgdXBkYXRlcyBhcmUgdGhlIGRlZmF1bHQgZGVwbG95bWVudCBzdHJhdGVneSBmb3Igc2VydmljZXMgYW5kIHByb3ZpZGUgYSBiYWxhbmNlIGJldHdlZW4gZGVwbG95bWVudCBzYWZldHkgYW5kIHJlc291cmNlIGVmZmljaWVuY3kgZm9yIG1hbnkgY29tbW9uIGFwcGxpY2F0aW9uIHNjZW5hcmlvcy5cbiAqICAgKyAgYGBCTFVFX0dSRUVOYGA6IEEgKmJsdWUvZ3JlZW4qIGRlcGxveW1lbnQgc3RyYXRlZ3kgKGBgQkxVRV9HUkVFTmBgKSBpcyBhIHJlbGVhc2UgbWV0aG9kb2xvZ3kgdGhhdCByZWR1Y2VzIGRvd250aW1lIGFuZCByaXNrIGJ5IHJ1bm5pbmcgdHdvIGlkZW50aWNhbCBwcm9kdWN0aW9uIGVudmlyb25tZW50cyBjYWxsZWQgYmx1ZSBhbmQgZ3JlZW4uIFdpdGggRUNTIGJsdWUvZ3JlZW4gZGVwbG95bWVudHMsIHlvdSBjYW4gdmFsaWRhdGUgbmV3IHNlcnZpY2UgcmV2aXNpb25zIGJlZm9yZSBkaXJlY3RpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIHRoZW0uIFRoaXMgYXBwcm9hY2ggcHJvdmlkZXMgYSBzYWZlciB3YXkgdG8gZGVwbG95IGNoYW5nZXMgd2l0aCB0aGUgYWJpbGl0eSB0byBxdWlja2x5IHJvbGwgYmFjayBpZiBuZWVkZWQuXG4gKiAgRUNTIGJsdWUvZ3JlZW4gZGVwbG95bWVudHMgYXJlIGJlc3Qgc3VpdGVkIGZvciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvczpcbiAqICAgKyAgU2VydmljZSB2YWxpZGF0aW9uOiBXaGVuIHlvdSBuZWVkIHRvIHZhbGlkYXRlIG5ldyBzZXJ2aWNlIHJldmlzaW9ucyBiZWZvcmUgZGlyZWN0aW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byB0aGVtXG4gKiAgICsgIFplcm8gZG93bnRpbWU6IFdoZW4geW91ciBzZXJ2aWNlIHJlcXVpcmVzIHplcm8tZG93bnRpbWUgZGVwbG95bWVudHNcbiAqICAgKyAgSW5zdGFudCByb2xsIGJhY2s6IFdoZW4geW91IG5lZWQgdGhlIGFiaWxpdHkgdG8gcXVpY2tseSByb2xsIGJhY2sgaWYgaXNzdWVzIGFyZSBkZXRlY3RlZFxuICogICArICBMb2FkIGJhbGFuY2VyIHJlcXVpcmVtZW50OiBXaGVuIHlvdXIgc2VydmljZSB1c2VzIEFMQiwgTkxCLCBvciBTZXJ2aWNlIENvbm5lY3RcbiAqICAgXG4gKiAgIFxuICogICArICBFeHRlcm5hbFxuICogIFVzZSBhIHRoaXJkLXBhcnR5IGRlcGxveW1lbnQgY29udHJvbGxlci5cbiAqICAgKyAgQmx1ZS9ncmVlbiBkZXBsb3ltZW50IChwb3dlcmVkIGJ5IEFDRClcbiAqICBBQ0QgaW5zdGFsbHMgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBhcHBsaWNhdGlvbiBhcyBhIG5ldyByZXBsYWNlbWVudCB0YXNrIHNldCBhbmQgcmVyb3V0ZXMgcHJvZHVjdGlvbiB0cmFmZmljIGZyb20gdGhlIG9yaWdpbmFsIGFwcGxpY2F0aW9uIHRhc2sgc2V0IHRvIHRoZSByZXBsYWNlbWVudCB0YXNrIHNldC4gVGhlIG9yaWdpbmFsIHRhc2sgc2V0IGlzIHRlcm1pbmF0ZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRlcGxveW1lbnQuIFVzZSB0aGlzIGRlcGxveW1lbnQgY29udHJvbGxlciB0byB2ZXJpZnkgYSBuZXcgZGVwbG95bWVudCBvZiBhIHNlcnZpY2UgYmVmb3JlIHNlbmRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LlxuICogICBcbiAqICBXaGVuIHVwZGF0aW5nIHRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgZm9yIGEgc2VydmljZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgbWlncmF0aW9uIHlvdSdyZSBwZXJmb3JtaW5nLlxuICogICArICBJZiB5b3UgaGF2ZSBhIHRlbXBsYXRlIHRoYXQgY29udGFpbnMgdGhlIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgaW5mb3JtYXRpb24gYXMgd2VsbCBhcyBgYFRhc2tTZXRgYCBhbmQgYGBQcmltYXJ5VGFza1NldGBgIHJlc291cmNlcywgYW5kIHlvdSByZW1vdmUgdGhlIHRhc2sgc2V0IHJlc291cmNlcyBmcm9tIHRoZSB0ZW1wbGF0ZSB3aGVuIHVwZGF0aW5nIGZyb20gYGBFWFRFUk5BTGBgIHRvIGBgRUNTYGAsIHRoZSBgYERlc2NyaWJlVGFza1NldGBgIGFuZCBgYERlbGV0ZVRhc2tTZXRgYCBBUEkgY2FsbHMgd2lsbCByZXR1cm4gYSA0MDAgZXJyb3IgYWZ0ZXIgdGhlIGRlcGxveW1lbnQgY29udHJvbGxlciBpcyB1cGRhdGVkIHRvIGBgRUNTYGAuIFRoaXMgcmVzdWx0cyBpbiBhIGRlbGV0ZSBmYWlsdXJlIG9uIHRoZSB0YXNrIHNldCByZXNvdXJjZXMsIGV2ZW4gdGhvdWdoIHRoZSBzdGFjayB0cmFuc2l0aW9ucyB0byBgYFVQREFURV9DT01QTEVURWBgIHN0YXR1cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzb3VyY2UgcmVtb3ZlZCBmcm9tIHN0YWNrIGJ1dCBub3QgZGVsZXRlZF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvdHJvdWJsZXNob290aW5nLmh0bWwjdHJvdWJsZXNob290aW5nLWVycm9ycy1yZXNvdXJjZS1yZW1vdmVkLW5vdC1kZWxldGVkKSBpbiB0aGUgQ0ZObG9uZyBVc2VyIEd1aWRlLiBUbyBmaXggdGhpcyBpc3N1ZSwgZGVsZXRlIHRoZSB0YXNrIHNldHMgZGlyZWN0bHkgdXNpbmcgdGhlIEVDU2BgRGVsZXRlVGFza1NldGBgIEFQSS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGRlbGV0ZSBhIHRhc2sgc2V0LCBzZWUgW0RlbGV0ZVRhc2tTZXRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVsZXRlVGFza1NldC5odG1sKSBpbiB0aGUgRUNTbG9uZyBBUEkgUmVmZXJlbmNlLlxuICogICArICBJZiB5b3UncmUgbWlncmF0aW5nIGZyb20gYGBDT0RFX0RFUExPWWBgIHRvIGBgRUNTYGAgd2l0aCBhIG5ldyB0YXNrIGRlZmluaXRpb24gYW5kIENGTiBwZXJmb3JtcyBhIHJvbGxiYWNrIG9wZXJhdGlvbiwgdGhlIEVDU2BgVXBkYXRlU2VydmljZWBgIHJlcXVlc3QgZmFpbHMgd2l0aCB0aGUgZm9sbG93aW5nIGVycm9yOlxuICogIFJlc291cmNlIGhhbmRsZXIgcmV0dXJuZWQgbWVzc2FnZTogXCJJbnZhbGlkIHJlcXVlc3QgcHJvdmlkZWQ6IFVuYWJsZSB0byB1cGRhdGUgdGFzayBkZWZpbml0aW9uIG9uIHNlcnZpY2VzIHdpdGggYSBDT0RFX0RFUExPWSBkZXBsb3ltZW50IGNvbnRyb2xsZXIuIFxuICogICArICBBZnRlciBhIHN1Y2Nlc3NmdWwgbWlncmF0aW9uIGZyb20gYGBFQ1NgYCB0byBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UgbmVlZCB0byBtYW51YWxseSByZW1vdmUgdGhlIGBgQUNUSVZFYGAgdGFzayBzZXQsIGJlY2F1c2UgRUNTIG5vIGxvbmdlciBtYW5hZ2VzIHRoZSBkZXBsb3ltZW50LiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGRlbGV0ZSBhIHRhc2sgc2V0LCBzZWUgW0RlbGV0ZVRhc2tTZXRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVsZXRlVGFza1NldC5odG1sKSBpbiB0aGUgRUNTbG9uZyBBUEkgUmVmZXJlbmNlLlxuICovXG5UeXBlPzogKFwiQ09ERV9ERVBMT1lcIiB8IFwiRUNTXCIgfCBcIkVYVEVSTkFMXCIpXG59XG4vKipcbiAqIE9wdGlvbmFsIGRlcGxveW1lbnQgcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgaG93IG1hbnkgdGFza3MgcnVuIGR1cmluZyB0aGUgZGVwbG95bWVudCBhbmQgdGhlIG9yZGVyaW5nIG9mIHN0b3BwaW5nIGFuZCBzdGFydGluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBkdXJhdGlvbiB3aGVuIGJvdGggYmx1ZSBhbmQgZ3JlZW4gc2VydmljZSByZXZpc2lvbnMgYXJlIHJ1bm5pbmcgc2ltdWx0YW5lb3VzbHkgYWZ0ZXIgdGhlIHByb2R1Y3Rpb24gdHJhZmZpYyBoYXMgc2hpZnRlZC5cbiAqICBUaGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5IHdoZW4geW91IGRvbid0IHNwZWNpZnkgYSB2YWx1ZTpcbiAqICAgKyAgRm9yIHJvbGxpbmcgZGVwbG95bWVudHMsIHRoZSB2YWx1ZSBpcyBzZXQgdG8gMyBob3VycyAoMTgwIG1pbnV0ZXMpLlxuICogICArICBXaGVuIHlvdSB1c2UgYW4gZXh0ZXJuYWwgZGVwbG95bWVudCBjb250cm9sbGVyIChgYEVYVEVSTkFMYGApLCBvciB0aGUgQUNEIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBjb250cm9sbGVyIChgYENPREVfREVQTE9ZYGApLCB0aGUgdmFsdWUgaXMgc2V0IHRvIDMgaG91cnMgKDE4MCBtaW51dGVzKS5cbiAqICAgKyAgRm9yIGFsbCBvdGhlciBjYXNlcywgdGhlIHZhbHVlIGlzIHNldCB0byAzNiBob3VycyAoMjE2MCBtaW51dGVzKS5cbiAqL1xuQmFrZVRpbWVJbk1pbnV0ZXM/OiBudW1iZXJcbi8qKlxuICogQW4gYXJyYXkgb2YgZGVwbG95bWVudCBsaWZlY3ljbGUgaG9vayBvYmplY3RzIHRvIHJ1biBjdXN0b20gbG9naWMgYXQgc3BlY2lmaWMgc3RhZ2VzIG9mIHRoZSBkZXBsb3ltZW50IGxpZmVjeWNsZS5cbiAqL1xuTGlmZWN5Y2xlSG9va3M/OiBEZXBsb3ltZW50TGlmZWN5Y2xlSG9va1tdXG5BbGFybXM/OiBEZXBsb3ltZW50QWxhcm1zXG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IHN0cmF0ZWd5IGZvciB0aGUgc2VydmljZS4gQ2hvb3NlIGZyb20gdGhlc2UgdmFsaWQgdmFsdWVzOlxuICogICArICBgYFJPTExJTkdgYCAtIFdoZW4geW91IGNyZWF0ZSBhIHNlcnZpY2Ugd2hpY2ggdXNlcyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgUk9MTElOR2BgKSBkZXBsb3ltZW50IHN0cmF0ZWd5LCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciByZXBsYWNlcyB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFza3Mgd2l0aCBuZXcgdGFza3MuIFRoZSBudW1iZXIgb2YgdGFza3MgdGhhdCBBbWF6b24gRUNTIGFkZHMgb3IgcmVtb3ZlcyBmcm9tIHRoZSBzZXJ2aWNlIGR1cmluZyBhIHJvbGxpbmcgdXBkYXRlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlcnZpY2UgZGVwbG95bWVudCBjb25maWd1cmF0aW9uLlxuICogICArICBgYEJMVUVfR1JFRU5gYCAtIEEgYmx1ZS9ncmVlbiBkZXBsb3ltZW50IHN0cmF0ZWd5IChgYEJMVUVfR1JFRU5gYCkgaXMgYSByZWxlYXNlIG1ldGhvZG9sb2d5IHRoYXQgcmVkdWNlcyBkb3dudGltZSBhbmQgcmlzayBieSBydW5uaW5nIHR3byBpZGVudGljYWwgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgY2FsbGVkIGJsdWUgYW5kIGdyZWVuLiBXaXRoIEFtYXpvbiBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cywgeW91IGNhbiB2YWxpZGF0ZSBuZXcgc2VydmljZSByZXZpc2lvbnMgYmVmb3JlIGRpcmVjdGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gdGhlbS4gVGhpcyBhcHByb2FjaCBwcm92aWRlcyBhIHNhZmVyIHdheSB0byBkZXBsb3kgY2hhbmdlcyB3aXRoIHRoZSBhYmlsaXR5IHRvIHF1aWNrbHkgcm9sbCBiYWNrIGlmIG5lZWRlZC5cbiAqL1xuU3RyYXRlZ3k/OiAoXCJST0xMSU5HXCIgfCBcIkJMVUVfR1JFRU5cIilcbkRlcGxveW1lbnRDaXJjdWl0QnJlYWtlcj86IERlcGxveW1lbnRDaXJjdWl0QnJlYWtlclxuLyoqXG4gKiBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUsIHRoZSBgYG1heGltdW1QZXJjZW50YGAgcGFyYW1ldGVyIHJlcHJlc2VudHMgYW4gdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IGFyZSBhbGxvd2VkIGluIHRoZSBgYFJVTk5JTkdgYCBvciBgYFBFTkRJTkdgYCBzdGF0ZSBkdXJpbmcgYSBkZXBsb3ltZW50LCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGBgZGVzaXJlZENvdW50YGAgKHJvdW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKS4gVGhpcyBwYXJhbWV0ZXIgZW5hYmxlcyB5b3UgdG8gZGVmaW5lIHRoZSBkZXBsb3ltZW50IGJhdGNoIHNpemUuIEZvciBleGFtcGxlLCBpZiB5b3VyIHNlcnZpY2UgaXMgdXNpbmcgdGhlIGBgUkVQTElDQWBgIHNlcnZpY2Ugc2NoZWR1bGVyIGFuZCBoYXMgYSBgYGRlc2lyZWRDb3VudGBgIG9mIGZvdXIgdGFza3MgYW5kIGEgYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIG9mIDIwMCUsIHRoZSBzY2hlZHVsZXIgbWF5IHN0YXJ0IGZvdXIgbmV3IHRhc2tzIGJlZm9yZSBzdG9wcGluZyB0aGUgZm91ciBvbGRlciB0YXNrcyAocHJvdmlkZWQgdGhhdCB0aGUgY2x1c3RlciByZXNvdXJjZXMgcmVxdWlyZWQgdG8gZG8gdGhpcyBhcmUgYXZhaWxhYmxlKS4gVGhlIGRlZmF1bHQgYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdXNpbmcgdGhlIGBgUkVQTElDQWBgIHNlcnZpY2Ugc2NoZWR1bGVyIGlzIDIwMCUuXG4gKiAgVGhlIEFtYXpvbiBFQ1Mgc2NoZWR1bGVyIHVzZXMgdGhpcyBwYXJhbWV0ZXIgdG8gcmVwbGFjZSB1bmhlYWx0aHkgdGFza3MgYnkgc3RhcnRpbmcgcmVwbGFjZW1lbnQgdGFza3MgZmlyc3QgYW5kIHRoZW4gc3RvcHBpbmcgdGhlIHVuaGVhbHRoeSB0YXNrcywgYXMgbG9uZyBhcyBjbHVzdGVyIHJlc291cmNlcyBmb3Igc3RhcnRpbmcgcmVwbGFjZW1lbnQgdGFza3MgYXJlIGF2YWlsYWJsZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBzY2hlZHVsZXIgcmVwbGFjZXMgdW5oZWFsdGh5IHRhc2tzLCBzZWUgW0FtYXpvbiBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKS5cbiAqICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzLCBhbmQgdGFza3MgaW4gdGhlIHNlcnZpY2UgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSAqbWF4aW11bSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWF4aW11bSBwZXJjZW50KiB2YWx1ZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgdGhhdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIHdoaWxlIHRoZSBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBpbiB0aGUgYGBEUkFJTklOR2BgIHN0YXRlLlxuICogICBZb3UgY2FuJ3Qgc3BlY2lmeSBhIGN1c3RvbSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgdGhlIHNlcnZpY2UgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMsIGFuZCB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgbWF4aW11bSBwZXJjZW50IHZhbHVlIGlzIG5vdCB1c2VkLiBUaGUgdmFsdWUgaXMgc3RpbGwgcmV0dXJuZWQgd2hlbiBkZXNjcmliaW5nIHlvdXIgc2VydmljZS5cbiAqL1xuTWF4aW11bVBlcmNlbnQ/OiBudW1iZXJcbi8qKlxuICogSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLCB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCByZXByZXNlbnRzIGEgbG93ZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSBkdXJpbmcgYSBkZXBsb3ltZW50LCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGBgZGVzaXJlZENvdW50YGAgKHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikuIFRoaXMgcGFyYW1ldGVyIGVuYWJsZXMgeW91IHRvIGRlcGxveSB3aXRob3V0IHVzaW5nIGFkZGl0aW9uYWwgY2x1c3RlciBjYXBhY2l0eS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBoYXMgYSBgYGRlc2lyZWRDb3VudGBgIG9mIGZvdXIgdGFza3MgYW5kIGEgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBvZiA1MCUsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBtYXkgc3RvcCB0d28gZXhpc3RpbmcgdGFza3MgdG8gZnJlZSB1cCBjbHVzdGVyIGNhcGFjaXR5IGJlZm9yZSBzdGFydGluZyB0d28gbmV3IHRhc2tzLiBcbiAqICAgSWYgYW55IHRhc2tzIGFyZSB1bmhlYWx0aHkgYW5kIGlmIGBgbWF4aW11bVBlcmNlbnRgYCBkb2Vzbid0IGFsbG93IHRoZSBBbWF6b24gRUNTIHNjaGVkdWxlciB0byBzdGFydCByZXBsYWNlbWVudCB0YXNrcywgdGhlIHNjaGVkdWxlciBzdG9wcyB0aGUgdW5oZWFsdGh5IHRhc2tzIG9uZS1ieS1vbmUg4oCUIHVzaW5nIHRoZSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIGFzIGEgY29uc3RyYWludCDigJQgdG8gY2xlYXIgdXAgY2FwYWNpdHkgdG8gbGF1bmNoIHJlcGxhY2VtZW50IHRhc2tzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHNjaGVkdWxlciByZXBsYWNlcyB1bmhlYWx0aHkgdGFza3MsIHNlZSBbQW1hem9uIEVDUyBzZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzX3NlcnZpY2VzLmh0bWwpIC4gXG4gKiAgRm9yIHNlcnZpY2VzIHRoYXQgKmRvIG5vdCogdXNlIGEgbG9hZCBiYWxhbmNlciwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgbm90ZWQ6XG4gKiAgICsgIEEgc2VydmljZSBpcyBjb25zaWRlcmVkIGhlYWx0aHkgaWYgYWxsIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGhpbiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgcGFzcyB0aGVpciBoZWFsdGggY2hlY2tzLlxuICogICArICBJZiBhIHRhc2sgaGFzIG5vIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgNDAgc2Vjb25kcyBhZnRlciBhIHRhc2sgcmVhY2hlcyBhIGBgUlVOTklOR2BgIHN0YXRlIGJlZm9yZSB0aGUgdGFzayBpcyBjb3VudGVkIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICArICBJZiBhIHRhc2sgaGFzIG9uZSBvciBtb3JlIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgdGhlIHRhc2sgdG8gcmVhY2ggYSBoZWFsdGh5IHN0YXR1cyBiZWZvcmUgY291bnRpbmcgaXQgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuIEEgdGFzayBpcyBjb25zaWRlcmVkIGhlYWx0aHkgd2hlbiBhbGwgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrIGhhdmUgcGFzc2VkIHRoZWlyIGhlYWx0aCBjaGVja3MuIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmljZSBzY2hlZHVsZXIgY2FuIHdhaXQgZm9yIGlzIGRldGVybWluZWQgYnkgdGhlIGNvbnRhaW5lciBoZWFsdGggY2hlY2sgc2V0dGluZ3MuIFxuICogICBcbiAqICBGb3Igc2VydmljZXMgdGhhdCAqZG8qIHVzZSBhIGxvYWQgYmFsYW5jZXIsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIG5vdGVkOlxuICogICArICBJZiBhIHRhc2sgaGFzIG5vIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgdGhlIGxvYWQgYmFsYW5jZXIgdGFyZ2V0IGdyb3VwIGhlYWx0aCBjaGVjayB0byByZXR1cm4gYSBoZWFsdGh5IHN0YXR1cyBiZWZvcmUgY291bnRpbmcgdGhlIHRhc2sgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgYW4gZXNzZW50aWFsIGNvbnRhaW5lciB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIGJvdGggdGhlIHRhc2sgdG8gcmVhY2ggYSBoZWFsdGh5IHN0YXR1cyBhbmQgdGhlIGxvYWQgYmFsYW5jZXIgdGFyZ2V0IGdyb3VwIGhlYWx0aCBjaGVjayB0byByZXR1cm4gYSBoZWFsdGh5IHN0YXR1cyBiZWZvcmUgY291bnRpbmcgdGhlIHRhc2sgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgIFxuICogIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIHJlcGxpY2Egc2VydmljZSBmb3IgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBpcyAxMDAlLiBUaGUgZGVmYXVsdCBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdXNpbmcgdGhlIGBgREFFTU9OYGAgc2VydmljZSBzY2hlZHVsZSBpcyAwJSBmb3IgdGhlIENMSSwgdGhlIEFXUyBTREtzLCBhbmQgdGhlIEFQSXMgYW5kIDUwJSBmb3IgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuXG4gKiAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIGhlYWx0aHkgdGFza3MgZHVyaW5nIGEgZGVwbG95bWVudCBpcyB0aGUgYGBkZXNpcmVkQ291bnRgYCBtdWx0aXBsaWVkIGJ5IHRoZSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgLzEwMCwgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHZhbHVlLlxuICogIElmIGEgc2VydmljZSBpcyB1c2luZyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGlzIHJ1bm5pbmcgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlICptaW5pbXVtIGhlYWx0aHkgcGVyY2VudCogdmFsdWUgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgKm1pbmltdW0gaGVhbHRoeSBwZXJjZW50KiB2YWx1ZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgbG93ZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgdGhhdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIHdoaWxlIHRoZSBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBpbiB0aGUgYGBEUkFJTklOR2BgIHN0YXRlLlxuICogICBZb3UgY2FuJ3Qgc3BlY2lmeSBhIGN1c3RvbSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdGhhdCB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaGFzIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUuXG4gKiAgIElmIGEgc2VydmljZSBpcyB1c2luZyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGlzIHJ1bm5pbmcgdGFza3MgdGhhdCB1c2UgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB2YWx1ZSBpcyBub3QgdXNlZCwgYWx0aG91Z2ggaXQgaXMgcmV0dXJuZWQgd2hlbiBkZXNjcmliaW5nIHlvdXIgc2VydmljZS5cbiAqL1xuTWluaW11bUhlYWx0aHlQZXJjZW50PzogbnVtYmVyXG59XG4vKipcbiAqIEEgZGVwbG95bWVudCBsaWZlY3ljbGUgaG9vayBydW5zIGN1c3RvbSBsb2dpYyBhdCBzcGVjaWZpYyBzdGFnZXMgb2YgdGhlIGRlcGxveW1lbnQgcHJvY2Vzcy4gQ3VycmVudGx5LCB5b3UgY2FuIHVzZSBMYW1iZGEgZnVuY3Rpb25zIGFzIGhvb2sgdGFyZ2V0cy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtMaWZlY3ljbGUgaG9va3MgZm9yIEFtYXpvbiBFQ1Mgc2VydmljZSBkZXBsb3ltZW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC1saWZlY3ljbGUtaG9va3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRMaWZlY3ljbGVIb29rIHtcbi8qKlxuICogVGhlIGxpZmVjeWNsZSBzdGFnZXMgYXQgd2hpY2ggdG8gcnVuIHRoZSBob29rLiBDaG9vc2UgZnJvbSB0aGVzZSB2YWxpZCB2YWx1ZXM6XG4gKiAgICsgIFJFQ09OQ0lMRV9TRVJWSUNFXG4gKiAgVGhlIHJlY29uY2lsaWF0aW9uIHN0YWdlIHRoYXQgb25seSBoYXBwZW5zIHdoZW4geW91IHN0YXJ0IGEgbmV3IHNlcnZpY2UgZGVwbG95bWVudCB3aXRoIG1vcmUgdGhhbiAxIHNlcnZpY2UgcmV2aXNpb24gaW4gYW4gQUNUSVZFIHN0YXRlLlxuICogIFlvdSBjYW4gdXNlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHRoaXMgc3RhZ2UuXG4gKiAgICsgIFBSRV9TQ0FMRV9VUFxuICogIFRoZSBncmVlbiBzZXJ2aWNlIHJldmlzaW9uIGhhcyBub3Qgc3RhcnRlZC4gVGhlIGJsdWUgc2VydmljZSByZXZpc2lvbiBpcyBoYW5kbGluZyAxMDAlIG9mIHRoZSBwcm9kdWN0aW9uIHRyYWZmaWMuIFRoZXJlIGlzIG5vIHRlc3QgdHJhZmZpYy5cbiAqICBZb3UgY2FuIHVzZSBhIGxpZmVjeWNsZSBob29rIGZvciB0aGlzIHN0YWdlLlxuICogICArICBQT1NUX1NDQUxFX1VQXG4gKiAgVGhlIGdyZWVuIHNlcnZpY2UgcmV2aXNpb24gaGFzIHN0YXJ0ZWQuIFRoZSBibHVlIHNlcnZpY2UgcmV2aXNpb24gaXMgaGFuZGxpbmcgMTAwJSBvZiB0aGUgcHJvZHVjdGlvbiB0cmFmZmljLiBUaGVyZSBpcyBubyB0ZXN0IHRyYWZmaWMuXG4gKiAgWW91IGNhbiB1c2UgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhpcyBzdGFnZS5cbiAqICAgKyAgVEVTVF9UUkFGRklDX1NISUZUXG4gKiAgVGhlIGJsdWUgYW5kIGdyZWVuIHNlcnZpY2UgcmV2aXNpb25zIGFyZSBydW5uaW5nLiBUaGUgYmx1ZSBzZXJ2aWNlIHJldmlzaW9uIGhhbmRsZXMgMTAwJSBvZiB0aGUgcHJvZHVjdGlvbiB0cmFmZmljLiBUaGUgZ3JlZW4gc2VydmljZSByZXZpc2lvbiBpcyBtaWdyYXRpbmcgZnJvbSAwJSB0byAxMDAlIG9mIHRlc3QgdHJhZmZpYy5cbiAqICBZb3UgY2FuIHVzZSBhIGxpZmVjeWNsZSBob29rIGZvciB0aGlzIHN0YWdlLlxuICogICArICBQT1NUX1RFU1RfVFJBRkZJQ19TSElGVFxuICogIFRoZSB0ZXN0IHRyYWZmaWMgc2hpZnQgaXMgY29tcGxldGUuIFRoZSBncmVlbiBzZXJ2aWNlIHJldmlzaW9uIGhhbmRsZXMgMTAwJSBvZiB0aGUgdGVzdCB0cmFmZmljLlxuICogIFlvdSBjYW4gdXNlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHRoaXMgc3RhZ2UuXG4gKiAgICsgIFBST0RVQ1RJT05fVFJBRkZJQ19TSElGVFxuICogIFByb2R1Y3Rpb24gdHJhZmZpYyBpcyBzaGlmdGluZyB0byB0aGUgZ3JlZW4gc2VydmljZSByZXZpc2lvbi4gVGhlIGdyZWVuIHNlcnZpY2UgcmV2aXNpb24gaXMgbWlncmF0aW5nIGZyb20gMCUgdG8gMTAwJSBvZiBwcm9kdWN0aW9uIHRyYWZmaWMuXG4gKiAgWW91IGNhbiB1c2UgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhpcyBzdGFnZS5cbiAqICAgKyAgUE9TVF9QUk9EVUNUSU9OX1RSQUZGSUNfU0hJRlRcbiAqICBUaGUgcHJvZHVjdGlvbiB0cmFmZmljIHNoaWZ0IGlzIGNvbXBsZXRlLlxuICogIFlvdSBjYW4gdXNlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHRoaXMgc3RhZ2UuXG4gKiAgIFxuICogIFlvdSBtdXN0IHByb3ZpZGUgdGhpcyBwYXJhbWV0ZXIgd2hlbiBjb25maWd1cmluZyBhIGRlcGxveW1lbnQgbGlmZWN5Y2xlIGhvb2suXG4gKiBcbiAqIEBtaW5JdGVtcyAxXG4gKi9cbkxpZmVjeWNsZVN0YWdlczogKFwiUkVDT05DSUxFX1NFUlZJQ0VcIiB8IFwiUFJFX1NDQUxFX1VQXCIgfCBcIlBPU1RfU0NBTEVfVVBcIiB8IFwiVEVTVF9UUkFGRklDX1NISUZUXCIgfCBcIlBPU1RfVEVTVF9UUkFGRklDX1NISUZUXCIgfCBcIlBST0RVQ1RJT05fVFJBRkZJQ19TSElGVFwiIHwgXCJQT1NUX1BST0RVQ1RJT05fVFJBRkZJQ19TSElGVFwiKVtdXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgaG9vayB0YXJnZXQuIEN1cnJlbnRseSwgb25seSBMYW1iZGEgZnVuY3Rpb24gQVJOcyBhcmUgc3VwcG9ydGVkLlxuICogIFlvdSBtdXN0IHByb3ZpZGUgdGhpcyBwYXJhbWV0ZXIgd2hlbiBjb25maWd1cmluZyBhIGRlcGxveW1lbnQgbGlmZWN5Y2xlIGhvb2suXG4gKi9cbkhvb2tUYXJnZXRBcm46IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQgZ3JhbnRzIEFtYXpvbiBFQ1MgcGVybWlzc2lvbiB0byBjYWxsIExhbWJkYSBmdW5jdGlvbnMgb24geW91ciBiZWhhbGYuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIExhbWJkYSBmdW5jdGlvbnMgaW4gQW1hem9uIEVDUyBibHVlL2dyZWVuIGRlcGxveW1lbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9ibHVlLWdyZWVuLXBlcm1pc3Npb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBDbG91ZFdhdGNoIGFsYXJtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50QWxhcm1zIHtcbi8qKlxuICogT25lIG9yIG1vcmUgQ2xvdWRXYXRjaCBhbGFybSBuYW1lcy4gVXNlIGEgXCIsXCIgdG8gc2VwYXJhdGUgdGhlIGFsYXJtcy5cbiAqL1xuQWxhcm1OYW1lczogc3RyaW5nW11cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgQ2xvdWRXYXRjaCBhbGFybSBvcHRpb24gaW4gdGhlIHNlcnZpY2UgZGVwbG95bWVudCBwcm9jZXNzLlxuICovXG5FbmFibGU6IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNvbmZpZ3VyZSBBbWF6b24gRUNTIHRvIHJvbGwgYmFjayB0aGUgc2VydmljZSBpZiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscy4gSWYgcm9sbGJhY2sgaXMgdXNlZCwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gKi9cblJvbGxiYWNrOiBib29sZWFuXG59XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciBjYW4gb25seSBiZSB1c2VkIGZvciBzZXJ2aWNlcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZS5cbiAqICAgVGhlICpkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc2VydmljZSBkZXBsb3ltZW50IHdpbGwgZmFpbCBpZiB0aGUgc2VydmljZSBjYW4ndCByZWFjaCBhIHN0ZWFkeSBzdGF0ZS4gSWYgeW91IHVzZSB0aGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIsIGEgc2VydmljZSBkZXBsb3ltZW50IHdpbGwgdHJhbnNpdGlvbiB0byBhIGZhaWxlZCBzdGF0ZSBhbmQgc3RvcCBsYXVuY2hpbmcgbmV3IHRhc2tzLiBJZiB5b3UgdXNlIHRoZSByb2xsYmFjayBvcHRpb24sIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSb2xsaW5nIHVwZGF0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWVjcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXIge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciBsb2dpYyBmb3IgdGhlIHNlcnZpY2UuXG4gKi9cbkVuYWJsZTogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29uZmlndXJlIEFtYXpvbiBFQ1MgdG8gcm9sbCBiYWNrIHRoZSBzZXJ2aWNlIGlmIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLiBJZiByb2xsYmFjayBpcyBvbiwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gKi9cblJvbGxiYWNrOiBib29sZWFuXG59XG4iXX0=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAgbXVzdCBoYXZlIGEgbmFtZSB0aGF0IGlzIHVuaXF1ZSBpbiB0aGUgbmFtZXNwYWNlLlxuICogICAgU3RhcnRpbmcgQXByaWwgMTUsIDIwMjMsIEFXUzsgd2lsbCBub3Qgb25ib2FyZCBuZXcgY3VzdG9tZXJzIHRvIEFtYXpvbiBFbGFzdGljIEluZmVyZW5jZSAoRUkpLCBhbmQgd2lsbCBoZWxwIGN1cnJlbnQgY3VzdG9tZXJzIG1pZ3JhdGUgdGhlaXIgd29ya2xvYWRzIHRvIG9wdGlvbnMgdGhhdCBvZmZlciBiZXR0ZXIgcHJpY2UgYW5kIHBlcmZvcm1hbmNlLiBBZnRlciBBcHJpbCAxNSwgMjAyMywgbmV3IGN1c3RvbWVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIGxhdW5jaCBpbnN0YW5jZXMgd2l0aCBBbWF6b24gRUkgYWNjZWxlcmF0b3JzIGluIEFtYXpvbiBTYWdlTWFrZXIsIEVDUywgb3IgRUMyLiBIb3dldmVyLCBjdXN0b21lcnMgd2hvIGhhdmUgdXNlZCBBbWF6b24gRUkgYXQgbGVhc3Qgb25jZSBkdXJpbmcgdGhlIHBhc3QgMzAtZGF5IHBlcmlvZCBhcmUgY29uc2lkZXJlZCBjdXJyZW50IGN1c3RvbWVycyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBzZXJ2aWNlLiBcbiAqICAgIE9uIEp1bmUgMTIsIDIwMjUsIEFtYXpvbiBFQ1MgbGF1bmNoZWQgc3VwcG9ydCBmb3IgdXBkYXRpbmcgY2FwYWNpdHkgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBmb3IgRUNTIHNlcnZpY2VzLiBXaXRoIHRoaXMgbGF1bmNoLCBFQ1MgYWxzbyBhbGlnbmVkIHRoZSBDRk4gdXBkYXRlIGJlaGF2aW9yIGZvciBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIHBhcmFtZXRlciB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbYWRkcyBzdXBwb3J0IGZvciB1cGRhdGluZyBjYXBhY2l0eSBwcm92aWRlciBjb25maWd1cmF0aW9uIGZvciBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hYm91dC1hd3Mvd2hhdHMtbmV3LzIwMjUvMDUvYW1hem9uLWVjcy1jYXBhY2l0eS1wcm92aWRlci1jb25maWd1cmF0aW9uLWVjcy8pLiBQcmV2aW91c2x5IEVDUyBpZ25vcmVkIHRoZSBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIHByb3BlcnR5IGlmIGl0IHdhcyBzZXQgdG8gYW4gZW1wdHkgbGlzdCBmb3IgZXhhbXBsZSwgYGBbXWBgIGluIENGTiwgYmVjYXVzZSB1cGRhdGluZyBjYXBhY2l0eSBwcm92aWRlciBjb25maWd1cmF0aW9uIHdhcyBub3Qgc3VwcG9ydGVkLiBOb3csIHdpdGggc3VwcG9ydCBmb3IgY2FwYWNpdHkgcHJvdmlkZXIgdXBkYXRlcywgY3VzdG9tZXJzIGNhbiByZW1vdmUgY2FwYWNpdHkgcHJvdmlkZXJzIGZyb20gYSBzZXJ2aWNlIGJ5IHBhc3NpbmcgYW4gZW1wdHkgbGlzdC4gV2hlbiB5b3Ugc3BlY2lmeSBhbiBlbXB0eSBsaXN0IChgYFtdYGApIGZvciB0aGUgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBwcm9wZXJ0eSBpbiB5b3VyIENGTiB0ZW1wbGF0ZSwgRUNTIHdpbGwgcmVtb3ZlIGFueSBjYXBhY2l0eSBwcm92aWRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2aWNlLCBhcyBmb2xsb3dzOlxuICogICArICBGb3Igc2VydmljZXMgY3JlYXRlZCB3aXRoIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgYWZ0ZXIgdGhlIGxhdW5jaDpcbiAqICAgKyAgSWYgdGhlcmUncyBhIGNsdXN0ZXIgZGVmYXVsdCBzdHJhdGVneSBzZXQsIHRoZSBzZXJ2aWNlIHdpbGwgcmV2ZXJ0IHRvIHVzaW5nIHRoYXQgZGVmYXVsdCBzdHJhdGVneS5cbiAqICAgKyAgSWYgbm8gY2x1c3RlciBkZWZhdWx0IHN0cmF0ZWd5IGV4aXN0cywgeW91IHdpbGwgcmVjZWl2ZSB0aGUgZm9sbG93aW5nIGVycm9yOlxuICogIE5vIGxhdW5jaCB0eXBlIHRvIGZhbGwgYmFjayB0byBmb3IgZW1wdHkgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIFlvdXIgc2VydmljZSB3YXMgbm90IGNyZWF0ZWQgd2l0aCBhIGxhdW5jaCB0eXBlLlxuICogICBcbiAqICAgKyAgRm9yIHNlcnZpY2VzIGNyZWF0ZWQgd2l0aCBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHByaW9yIHRvIHRoZSBsYXVuY2g6XG4gKiAgICsgIElmIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgaGFkIGBgRkFSR0FURV9TUE9UYGAgb3IgYGBGQVJHQVRFYGAgY2FwYWNpdHkgcHJvdmlkZXJzLCB0aGUgbGF1bmNoIHR5cGUgd2lsbCBiZSB1cGRhdGVkIHRvIGBgRkFSR0FURWBgIGFuZCB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgd2lsbCBiZSByZW1vdmVkLlxuICogICArICBJZiB0aGUgc3RyYXRlZ3kgaW5jbHVkZWQgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycywgdGhlIHNlcnZpY2Ugd2lsbCByZXZlcnQgdG8gRUMyIGxhdW5jaCB0eXBlLCBhbmQgdGhlIEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgd2lsbCBub3QgYmUgdXNlZC5cbiAqICAgXG4gKiAgIFxuICogIFJlY29tbWVuZGVkIEFjdGlvbnNcbiAqICBJZiB5b3UgYXJlIGN1cnJlbnRseSB1c2luZyBgYENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneTogW11gYCBpbiB5b3VyIENGTiB0ZW1wbGF0ZXMsIHlvdSBzaG91bGQgdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuICogICArICBJZiB5b3UgZG8gbm90IGludGVuZCB0byB1cGRhdGUgdGhlIENhcGFjaXR5IFByb3ZpZGVyIFN0cmF0ZWd5OlxuICogICArICBSZW1vdmUgdGhlIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgcHJvcGVydHkgZW50aXJlbHkgZnJvbSB5b3VyIENGTiB0ZW1wbGF0ZVxuICogICArICBBbHRlcm5hdGl2ZWx5LCB1c2UgYGAhUmVmIDo6Tm9WYWx1ZWBgIGZvciB0aGUgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBwcm9wZXJ0eSBpbiB5b3VyIHRlbXBsYXRlXG4gKiAgIFxuICogICArICBJZiB5b3UgaW50ZW5kIHRvIG1haW50YWluIG9yIHVwZGF0ZSB0aGUgQ2FwYWNpdHkgUHJvdmlkZXIgU3RyYXRlZ3ksIHNwZWNpZnkgdGhlIGFjdHVhbCBDYXBhY2l0eSBQcm92aWRlciBTdHJhdGVneSBmb3IgdGhlIHNlcnZpY2UgaW4geW91ciBDRk4gdGVtcGxhdGUuXG4gKiAgIFxuICogIElmIHlvdXIgQ0ZOIHRlbXBsYXRlIGhhZCBhbiBlbXB0eSBsaXN0IChbXSkgZm9yIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgcHJpb3IgdG8gdGhlIGFmb3JlbWVudGlvbmVkIGxhdW5jaCBvbiBKdW5lIDEyLCBhbmQgeW91IGFyZSB1c2luZyB0aGUgc2FtZSB0ZW1wbGF0ZSB3aXRoIGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5OiBbXWBgLCB5b3UgbWlnaHQgZW5jb3VudGVyIHRoZSBmb2xsb3dpbmcgZXJyb3I6XG4gKiAgIEludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogV2hlbiBzd2l0Y2hpbmcgZnJvbSBsYXVuY2ggdHlwZSB0byBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBvbiBhbiBleGlzdGluZyBzZXJ2aWNlLCBvciBtYWtpbmcgYSBjaGFuZ2UgdG8gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBvbiBhIHNlcnZpY2UgdGhhdCBpcyBhbHJlYWR5IHVzaW5nIG9uZSwgeW91IG11c3QgZm9yY2UgYSBuZXcgZGVwbG95bWVudC4gKFNlcnZpY2U6IEVjcywgU3RhdHVzIENvZGU6IDQwMCwgUmVxdWVzdCBJRDogeHh4KSAoU0RLIEF0dGVtcHQgQ291bnQ6IDEpXCIgKFJlcXVlc3RUb2tlbjogeHh4IEhhbmRsZXJFcnJvckNvZGU6IEludmFsaWRSZXF1ZXN0KSBcbiAqICBOb3RlIHRoYXQgQ0ZOIGF1dG9tYXRpY2FsbHkgaW5pdGlhdGVzIGEgbmV3IGRlcGxveW1lbnQgd2hlbiBpdCBkZXRlY3RzIGEgcGFyYW1ldGVyIGNoYW5nZSwgYnV0IGN1c3RvbWVycyBjYW5ub3QgY2hvb3NlIHRvIGZvcmNlIGEgZGVwbG95bWVudCB0aHJvdWdoIENGTi4gVGhpcyBpcyBhbiBpbnZhbGlkIGlucHV0IHNjZW5hcmlvIHRoYXQgcmVxdWlyZXMgb25lIG9mIHRoZSByZW1lZGlhdGlvbiBhY3Rpb25zIGxpc3RlZCBhYm92ZS5cbiAqICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhY3RpdmUgcHJvZHVjdGlvbiBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSwgY29udGFjdCBBV1MgU3VwcG9ydCBvciB5b3VyIFRlY2huaWNhbCBBY2NvdW50IE1hbmFnZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19FQ1NfU0VSVklDRSB7XG4vKipcbiAqIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIHRoYXQgeW91ciB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgcnVubmluZyBvbi4gQSBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHNwZWNpZmllZCBvbmx5IGZvciB0YXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS4gSWYgb25lIGlzbid0IHNwZWNpZmllZCwgdGhlIGBgTEFURVNUYGAgcGxhdGZvcm0gdmVyc2lvbiBpcyB1c2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtwbGF0Zm9ybSB2ZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcGxhdGZvcm1fdmVyc2lvbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5QbGF0Zm9ybVZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSB0YWdzIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiB0byB0aGUgdGFzay4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgdGFncyBhcmVuJ3QgcHJvcGFnYXRlZC4gVGFncyBjYW4gb25seSBiZSBwcm9wYWdhdGVkIHRvIHRoZSB0YXNrIGR1cmluZyB0YXNrIGNyZWF0aW9uLiBUbyBhZGQgdGFncyB0byBhIHRhc2sgYWZ0ZXIgdGFzayBjcmVhdGlvbiwgdXNlIHRoZSBbVGFnUmVzb3VyY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVGFnUmVzb3VyY2UuaHRtbCkgQVBJIGFjdGlvbi5cbiAqICBZb3UgbXVzdCBzZXQgdGhpcyB0byBhIHZhbHVlIG90aGVyIHRoYW4gYGBOT05FYGAgd2hlbiB5b3UgdXNlIENvc3QgRXhwbG9yZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgdXNhZ2UgcmVwb3J0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNhZ2UtcmVwb3J0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIGRlZmF1bHQgaXMgYGBOT05FYGAuXG4gKi9cblByb3BhZ2F0ZVRhZ3M/OiAoXCJTRVJWSUNFXCIgfCBcIlRBU0tfREVGSU5JVElPTlwiKVxuU2VydmljZUFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcGxhY2VtZW50IHN0cmF0ZWd5IG9iamVjdHMgdG8gdXNlIGZvciB0YXNrcyBpbiB5b3VyIHNlcnZpY2UuIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgNSBzdHJhdGVneSBydWxlcyBmb3IgZWFjaCBzZXJ2aWNlLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFBsYWNlbWVudFN0cmF0ZWd5YGAgYXJyYXkuXG4gKi9cblBsYWNlbWVudFN0cmF0ZWdpZXM/OiBQbGFjZW1lbnRTdHJhdGVneVtdXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgZGlzY292ZXJ5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWRpc2NvdmVyeS5odG1sKS5cbiAqICAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGlzbid0IHN1cHBvcnRlZC5cbiAqICAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgU2VydmljZVJlZ2lzdHJ5YGAgYXJyYXkuXG4gKi9cblNlcnZpY2VSZWdpc3RyaWVzPzogU2VydmljZVJlZ2lzdHJ5W11cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgdm9sdW1lIHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFzIGEgdm9sdW1lIHRoYXQgaXMgY29uZmlndXJlZCBhdCBsYXVuY2ggdGltZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGUgaXMgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25gYCBhcnJheS5cbiAqL1xuVm9sdW1lQ29uZmlndXJhdGlvbnM/OiBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICogIElmIGEgYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGxhdW5jaFR5cGVgYCBwYXJhbWV0ZXIgbXVzdCBiZSBvbWl0dGVkLiBJZiBubyBgYGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIG9yIGBgbGF1bmNoVHlwZWBgIGlzIHNwZWNpZmllZCwgdGhlIGBgZGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIGZvciB0aGUgY2x1c3RlciBpcyB1c2VkLlxuICogIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGNvbnRhaW4gYSBtYXhpbXVtIG9mIDIwIGNhcGFjaXR5IHByb3ZpZGVycy5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtYGAgYXJyYXkuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneT86IENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW1bXVxuLyoqXG4gKiBUaGUgbGF1bmNoIHR5cGUgb24gd2hpY2ggdG8gcnVuIHlvdXIgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBMYXVuY2ggVHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2xhdW5jaF90eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkxhdW5jaFR5cGU/OiAoXCJFQzJcIiB8IFwiRkFSR0FURVwiIHwgXCJFWFRFUk5BTFwiKVxuTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgQXZhaWxhYmlsaXR5IFpvbmUgcmViYWxhbmNpbmcgZm9yIHRoZSBzZXJ2aWNlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JhbGFuY2luZyBhbiBBbWF6b24gRUNTIHNlcnZpY2UgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1yZWJhbGFuY2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkF2YWlsYWJpbGl0eVpvbmVSZWJhbGFuY2luZz86IChcIkVOQUJMRURcIiB8IFwiRElTQUJMRURcIilcbi8qKlxuICogVGhlIHNjaGVkdWxpbmcgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKS5cbiAqICBUaGVyZSBhcmUgdHdvIHNlcnZpY2Ugc2NoZWR1bGVyIHN0cmF0ZWdpZXMgYXZhaWxhYmxlOlxuICogICArICBgYFJFUExJQ0FgYC1UaGUgcmVwbGljYSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHBsYWNlcyBhbmQgbWFpbnRhaW5zIHRoZSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcyBhY3Jvc3MgeW91ciBjbHVzdGVyLiBCeSBkZWZhdWx0LCB0aGUgc2VydmljZSBzY2hlZHVsZXIgc3ByZWFkcyB0YXNrcyBhY3Jvc3MgQXZhaWxhYmlsaXR5IFpvbmVzLiBZb3UgY2FuIHVzZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVnaWVzIGFuZCBjb25zdHJhaW50cyB0byBjdXN0b21pemUgdGFzayBwbGFjZW1lbnQgZGVjaXNpb25zLiBUaGlzIHNjaGVkdWxlciBzdHJhdGVneSBpcyByZXF1aXJlZCBpZiB0aGUgc2VydmljZSB1c2VzIHRoZSBgYENPREVfREVQTE9ZYGAgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcy5cbiAqICAgKyAgYGBEQUVNT05gYC1UaGUgZGFlbW9uIHNjaGVkdWxpbmcgc3RyYXRlZ3kgZGVwbG95cyBleGFjdGx5IG9uZSB0YXNrIG9uIGVhY2ggYWN0aXZlIGNvbnRhaW5lciBpbnN0YW5jZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgdGhhdCB5b3Ugc3BlY2lmeSBpbiB5b3VyIGNsdXN0ZXIuIFRoZSBzZXJ2aWNlIHNjaGVkdWxlciBhbHNvIGV2YWx1YXRlcyB0aGUgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgZm9yIHJ1bm5pbmcgdGFza3MgYW5kIHdpbGwgc3RvcCB0YXNrcyB0aGF0IGRvbid0IG1lZXQgdGhlIHBsYWNlbWVudCBjb25zdHJhaW50cy4gV2hlbiB5b3UncmUgdXNpbmcgdGhpcyBzdHJhdGVneSwgeW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhIGRlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLCBhIHRhc2sgcGxhY2VtZW50IHN0cmF0ZWd5LCBvciB1c2UgU2VydmljZSBBdXRvIFNjYWxpbmcgcG9saWNpZXMuXG4gKiAgIFRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlIG9yIHRoZSBgYENPREVfREVQTE9ZYGAgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcyBkb24ndCBzdXBwb3J0IHRoZSBgYERBRU1PTmBgIHNjaGVkdWxpbmcgc3RyYXRlZ3kuXG4gKi9cblNjaGVkdWxpbmdTdHJhdGVneT86IChcIkRBRU1PTlwiIHwgXCJSRVBMSUNBXCIpXG5OZXR3b3JrQ29uZmlndXJhdGlvbj86IE5ldHdvcmtDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byB0aGUgc2VydmljZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUsIGJvdGggb2Ygd2hpY2ggeW91IGRlZmluZS4gV2hlbiBhIHNlcnZpY2UgaXMgZGVsZXRlZCwgdGhlIHRhZ3MgYXJlIGRlbGV0ZWQgYXMgd2VsbC5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICovXG5UYWdzPzogVGFnW11cbkZvcmNlTmV3RGVwbG95bWVudD86IEZvcmNlTmV3RGVwbG95bWVudFxuLyoqXG4gKiBUaGUgcGVyaW9kIG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyB1bmhlYWx0aHkgRWxhc3RpYyBMb2FkIEJhbGFuY2luZywgVlBDIExhdHRpY2UsIGFuZCBjb250YWluZXIgaGVhbHRoIGNoZWNrcyBhZnRlciBhIHRhc2sgaGFzIGZpcnN0IHN0YXJ0ZWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCB2YWx1ZSwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC4gSWYgeW91IGRvbid0IHVzZSBhbnkgb2YgdGhlIGhlYWx0aCBjaGVja3MsIHRoZW4gYGBoZWFsdGhDaGVja0dyYWNlUGVyaW9kU2Vjb25kc2BgIGlzIHVudXNlZC5cbiAqICBJZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0YWtlIGEgd2hpbGUgdG8gc3RhcnQgYW5kIHJlc3BvbmQgdG8gaGVhbHRoIGNoZWNrcywgeW91IGNhbiBzcGVjaWZ5IGEgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCBvZiB1cCB0byAyLDE0Nyw0ODMsNjQ3IHNlY29uZHMgKGFib3V0IDY5IHllYXJzKS4gRHVyaW5nIHRoYXQgdGltZSwgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyBoZWFsdGggY2hlY2sgc3RhdHVzLiBUaGlzIGdyYWNlIHBlcmlvZCBjYW4gcHJldmVudCB0aGUgc2VydmljZSBzY2hlZHVsZXIgZnJvbSBtYXJraW5nIHRhc2tzIGFzIHVuaGVhbHRoeSBhbmQgc3RvcHBpbmcgdGhlbSBiZWZvcmUgdGhleSBoYXZlIHRpbWUgdG8gY29tZSB1cC5cbiAqL1xuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdHVybiBvbiBBbWF6b24gRUNTIG1hbmFnZWQgdGFncyBmb3IgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFnZ2luZyB5b3VyIEFtYXpvbiBFQ1MgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtdXNpbmctdGFncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgV2hlbiB5b3UgdXNlIEFtYXpvbiBFQ1MgbWFuYWdlZCB0YWdzLCB5b3UgbXVzdCBzZXQgdGhlIGBgcHJvcGFnYXRlVGFnc2BgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICovXG5FbmFibGVFQ1NNYW5hZ2VkVGFncz86IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBleGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb24gZm9yIHRoZSBzZXJ2aWNlLiBJZiBgYHRydWVgYCwgdGhlIGV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbmFsaXR5IGlzIHR1cm5lZCBvbiBmb3IgYWxsIGNvbnRhaW5lcnMgaW4gdGFza3MgYXMgcGFydCBvZiB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlRXhlY3V0ZUNvbW1hbmQ/OiBib29sZWFuXG4vKipcbiAqIEFuIGFycmF5IG9mIHBsYWNlbWVudCBjb25zdHJhaW50IG9iamVjdHMgdG8gdXNlIGZvciB0YXNrcyBpbiB5b3VyIHNlcnZpY2UuIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgMTAgY29uc3RyYWludHMgZm9yIGVhY2ggdGFzay4gVGhpcyBsaW1pdCBpbmNsdWRlcyBjb25zdHJhaW50cyBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFuZCB0aG9zZSBzcGVjaWZpZWQgYXQgcnVudGltZS5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBQbGFjZW1lbnRDb25zdHJhaW50YGAgYXJyYXkuXG4gKi9cblBsYWNlbWVudENvbnN0cmFpbnRzPzogUGxhY2VtZW50Q29uc3RyYWludFtdXG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGNsdXN0ZXIgdGhhdCB5b3UgcnVuIHlvdXIgc2VydmljZSBvbi4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgY2x1c3RlciwgdGhlIGRlZmF1bHQgY2x1c3RlciBpcyBhc3N1bWVkLlxuICovXG5DbHVzdGVyPzogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBsb2FkIGJhbGFuY2VyIG9iamVjdHMgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHNlcnZpY2UuIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFJvbGVgYCBwcm9wZXJ0eSwgYGBMb2FkQmFsYW5jZXJzYGAgbXVzdCBiZSBzcGVjaWZpZWQgYXMgd2VsbC4gRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBudW1iZXIgb2YgbG9hZCBiYWxhbmNlcnMgdGhhdCB5b3UgY2FuIHNwZWNpZnkgcGVyIHNlcnZpY2UsIHNlZSBbU2VydmljZSBMb2FkIEJhbGFuY2luZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1sb2FkLWJhbGFuY2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgTG9hZEJhbGFuY2VyYGAgYXJyYXkuXG4gKi9cbkxvYWRCYWxhbmNlcnM/OiBMb2FkQmFsYW5jZXJbXVxuU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uPzogU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgaW5zdGFudGlhdGlvbnMgb2YgdGhlIHNwZWNpZmllZCB0YXNrIGRlZmluaXRpb24gdG8gcGxhY2UgYW5kIGtlZXAgcnVubmluZyBpbiB5b3VyIHNlcnZpY2UuXG4gKiAgRm9yIG5ldyBzZXJ2aWNlcywgaWYgYSBkZXNpcmVkIGNvdW50IGlzIG5vdCBzcGVjaWZpZWQsIGEgZGVmYXVsdCB2YWx1ZSBvZiBgYDFgYCBpcyB1c2VkLiBXaGVuIHVzaW5nIHRoZSBgYERBRU1PTmBgIHNjaGVkdWxpbmcgc3RyYXRlZ3ksIHRoZSBkZXNpcmVkIGNvdW50IGlzIG5vdCByZXF1aXJlZC5cbiAqICBGb3IgZXhpc3Rpbmcgc2VydmljZXMsIGlmIGEgZGVzaXJlZCBjb3VudCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcyBvbWl0dGVkIGZyb20gdGhlIG9wZXJhdGlvbi5cbiAqL1xuRGVzaXJlZENvdW50PzogbnVtYmVyXG4vKipcbiAqIFRoZSBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VydmljZSBiZWluZyBjcmVhdGVkLlxuICovXG5WcGNMYXR0aWNlQ29uZmlndXJhdGlvbnM/OiBWcGNMYXR0aWNlQ29uZmlndXJhdGlvbltdXG5EZXBsb3ltZW50Q29udHJvbGxlcj86IERlcGxveW1lbnRDb250cm9sbGVyXG4vKipcbiAqIFRoZSBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQgYWxsb3dzIEFtYXpvbiBFQ1MgdG8gbWFrZSBjYWxscyB0byB5b3VyIGxvYWQgYmFsYW5jZXIgb24geW91ciBiZWhhbGYuIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgcGVybWl0dGVkIGlmIHlvdSBhcmUgdXNpbmcgYSBsb2FkIGJhbGFuY2VyIHdpdGggeW91ciBzZXJ2aWNlIGFuZCB5b3VyIHRhc2sgZGVmaW5pdGlvbiBkb2Vzbid0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUuIElmIHlvdSBzcGVjaWZ5IHRoZSBgYHJvbGVgYCBwYXJhbWV0ZXIsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSBhIGxvYWQgYmFsYW5jZXIgb2JqZWN0IHdpdGggdGhlIGBgbG9hZEJhbGFuY2Vyc2BgIHBhcmFtZXRlci5cbiAqICAgSWYgeW91ciBhY2NvdW50IGhhcyBhbHJlYWR5IGNyZWF0ZWQgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZS1saW5rZWQgcm9sZSwgdGhhdCByb2xlIGlzIHVzZWQgZm9yIHlvdXIgc2VydmljZSB1bmxlc3MgeW91IHNwZWNpZnkgYSByb2xlIGhlcmUuIFRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIGlzIHJlcXVpcmVkIGlmIHlvdXIgdGFzayBkZWZpbml0aW9uIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIG9yIGlmIHRoZSBzZXJ2aWNlIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHNlcnZpY2UgZGlzY292ZXJ5LCBhbiBleHRlcm5hbCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIG11bHRpcGxlIHRhcmdldCBncm91cHMsIG9yIEVsYXN0aWMgSW5mZXJlbmNlIGFjY2VsZXJhdG9ycyBpbiB3aGljaCBjYXNlIHlvdSBkb24ndCBzcGVjaWZ5IGEgcm9sZSBoZXJlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2luZyBzZXJ2aWNlLWxpbmtlZCByb2xlcyBmb3IgQW1hem9uIEVDU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmctc2VydmljZS1saW5rZWQtcm9sZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3VyIHNwZWNpZmllZCByb2xlIGhhcyBhIHBhdGggb3RoZXIgdGhhbiBgYC9gYCwgdGhlbiB5b3UgbXVzdCBlaXRoZXIgc3BlY2lmeSB0aGUgZnVsbCByb2xlIEFSTiAodGhpcyBpcyByZWNvbW1lbmRlZCkgb3IgcHJlZml4IHRoZSByb2xlIG5hbWUgd2l0aCB0aGUgcGF0aC4gRm9yIGV4YW1wbGUsIGlmIGEgcm9sZSB3aXRoIHRoZSBuYW1lIGBgYmFyYGAgaGFzIGEgcGF0aCBvZiBgYC9mb28vYGAgdGhlbiB5b3Ugd291bGQgc3BlY2lmeSBgYC9mb28vYmFyYGAgYXMgdGhlIHJvbGUgbmFtZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRnJpZW5kbHkgbmFtZXMgYW5kIHBhdGhzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2lkZW50aWZpZXJzLmh0bWwjaWRlbnRpZmllcnMtZnJpZW5kbHktbmFtZXMpIGluIHRoZSAqSUFNIFVzZXIgR3VpZGUqLlxuICovXG5Sb2xlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBgYGZhbWlseWBgIGFuZCBgYHJldmlzaW9uYGAgKGBgZmFtaWx5OnJldmlzaW9uYGApIG9yIGZ1bGwgQVJOIG9mIHRoZSB0YXNrIGRlZmluaXRpb24gdG8gcnVuIGluIHlvdXIgc2VydmljZS4gSWYgYSBgYHJldmlzaW9uYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgbGF0ZXN0IGBgQUNUSVZFYGAgcmV2aXNpb24gaXMgdXNlZC5cbiAqICBBIHRhc2sgZGVmaW5pdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBpZiB0aGUgc2VydmljZSB1c2VzIGVpdGhlciB0aGUgYGBFQ1NgYCBvciBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVycy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkZXBsb3ltZW50IHR5cGVzLCBzZWUgW0FtYXpvbiBFQ1MgZGVwbG95bWVudCB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlcy5odG1sKS5cbiAqL1xuVGFza0RlZmluaXRpb24/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgeW91ciBzZXJ2aWNlLiBVcCB0byAyNTUgbGV0dGVycyAodXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UpLCBudW1iZXJzLCB1bmRlcnNjb3JlcywgYW5kIGh5cGhlbnMgYXJlIGFsbG93ZWQuIFNlcnZpY2UgbmFtZXMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgY2x1c3RlciwgYnV0IHlvdSBjYW4gaGF2ZSBzaW1pbGFybHkgbmFtZWQgc2VydmljZXMgaW4gbXVsdGlwbGUgY2x1c3RlcnMgd2l0aGluIGEgUmVnaW9uIG9yIGFjcm9zcyBtdWx0aXBsZSBSZWdpb25zLlxuICogICBUaGUgc3RhY2sgdXBkYXRlIGZhaWxzIGlmIHlvdSBjaGFuZ2UgYW55IHByb3BlcnRpZXMgdGhhdCByZXF1aXJlIHJlcGxhY2VtZW50IGFuZCB0aGUgYGBTZXJ2aWNlTmFtZWBgIGlzIGNvbmZpZ3VyZWQuIFRoaXMgaXMgYmVjYXVzZSBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyB0aGUgcmVwbGFjZW1lbnQgc2VydmljZSBmaXJzdCwgYnV0IGVhY2ggYGBTZXJ2aWNlTmFtZWBgIG11c3QgYmUgdW5pcXVlIGluIHRoZSBjbHVzdGVyLlxuICovXG5TZXJ2aWNlTmFtZT86IHN0cmluZ1xuRGVwbG95bWVudENvbmZpZ3VyYXRpb24/OiBEZXBsb3ltZW50Q29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBUaGUgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ3kgZm9yIGEgdGFzayBvciBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIHBsYWNlbWVudCBzdHJhdGVnaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLXBsYWNlbWVudC1zdHJhdGVnaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRTdHJhdGVneSB7XG4vKipcbiAqIFRoZSBmaWVsZCB0byBhcHBseSB0aGUgcGxhY2VtZW50IHN0cmF0ZWd5IGFnYWluc3QuIEZvciB0aGUgYGBzcHJlYWRgYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHZhbGlkIHZhbHVlcyBhcmUgYGBpbnN0YW5jZUlkYGAgKG9yIGBgaG9zdGBgLCB3aGljaCBoYXMgdGhlIHNhbWUgZWZmZWN0KSwgb3IgYW55IHBsYXRmb3JtIG9yIGN1c3RvbSBhdHRyaWJ1dGUgdGhhdCdzIGFwcGxpZWQgdG8gYSBjb250YWluZXIgaW5zdGFuY2UsIHN1Y2ggYXMgYGBhdHRyaWJ1dGU6ZWNzLmF2YWlsYWJpbGl0eS16b25lYGAuIEZvciB0aGUgYGBiaW5wYWNrYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB2YWxpZCB2YWx1ZXMgYXJlIGBgY3B1YGAgYW5kIGBgbWVtb3J5YGAuIEZvciB0aGUgYGByYW5kb21gYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHRoaXMgZmllbGQgaXMgbm90IHVzZWQuXG4gKi9cbkZpZWxkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0eXBlIG9mIHBsYWNlbWVudCBzdHJhdGVneS4gVGhlIGBgcmFuZG9tYGAgcGxhY2VtZW50IHN0cmF0ZWd5IHJhbmRvbWx5IHBsYWNlcyB0YXNrcyBvbiBhdmFpbGFibGUgY2FuZGlkYXRlcy4gVGhlIGBgc3ByZWFkYGAgcGxhY2VtZW50IHN0cmF0ZWd5IHNwcmVhZHMgcGxhY2VtZW50IGFjcm9zcyBhdmFpbGFibGUgY2FuZGlkYXRlcyBldmVubHkgYmFzZWQgb24gdGhlIGBgZmllbGRgYCBwYXJhbWV0ZXIuIFRoZSBgYGJpbnBhY2tgYCBzdHJhdGVneSBwbGFjZXMgdGFza3Mgb24gYXZhaWxhYmxlIGNhbmRpZGF0ZXMgdGhhdCBoYXZlIHRoZSBsZWFzdCBhdmFpbGFibGUgYW1vdW50IG9mIHRoZSByZXNvdXJjZSB0aGF0J3Mgc3BlY2lmaWVkIHdpdGggdGhlIGBgZmllbGRgYCBwYXJhbWV0ZXIuIEZvciBleGFtcGxlLCBpZiB5b3UgYmlucGFjayBvbiBtZW1vcnksIGEgdGFzayBpcyBwbGFjZWQgb24gdGhlIGluc3RhbmNlIHdpdGggdGhlIGxlYXN0IGFtb3VudCBvZiByZW1haW5pbmcgbWVtb3J5IGJ1dCBzdGlsbCBlbm91Z2ggdG8gcnVuIHRoZSB0YXNrLlxuICovXG5UeXBlOiAoXCJiaW5wYWNrXCIgfCBcInJhbmRvbVwiIHwgXCJzcHJlYWRcIilcbn1cbi8qKlxuICogVGhlIGRldGFpbHMgZm9yIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5LlxuICogIEVhY2ggc2VydmljZSBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIG9uZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBNdWx0aXBsZSBzZXJ2aWNlIHJlZ2lzdHJpZXMgZm9yIGVhY2ggc2VydmljZSBhcmUgbm90IHN1cHBvcnRlZC5cbiAqICBXaGVuIHlvdSBhZGQsIHVwZGF0ZSwgb3IgcmVtb3ZlIHRoZSBzZXJ2aWNlIHJlZ2lzdHJpZXMgY29uZmlndXJhdGlvbiwgQW1hem9uIEVDUyBzdGFydHMgYSBuZXcgZGVwbG95bWVudC4gTmV3IHRhc2tzIGFyZSByZWdpc3RlcmVkIGFuZCBkZXJlZ2lzdGVyZWQgdG8gdGhlIHVwZGF0ZWQgc2VydmljZSByZWdpc3RyeSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VSZWdpc3RyeSB7XG4vKipcbiAqIFRoZSBjb250YWluZXIgbmFtZSB2YWx1ZSB0byBiZSB1c2VkIGZvciB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2UuIEl0J3MgYWxyZWFkeSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGJyaWRnZWBgIG9yIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSwgeW91IG11c3Qgc3BlY2lmeSBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIGEgdHlwZSBTUlYgRE5TIHJlY29yZCBpcyB1c2VkLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBvciBhIGBgcG9ydGBgIHZhbHVlLiBIb3dldmVyLCB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoLlxuICovXG5Db250YWluZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwb3J0IHZhbHVlIHVzZWQgaWYgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlIHNwZWNpZmllZCBhbiBTUlYgcmVjb3JkLiBUaGlzIGZpZWxkIG1pZ2h0IGJlIHVzZWQgaWYgYm90aCB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIFNSViByZWNvcmRzIGFyZSB1c2VkLlxuICovXG5Qb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBwb3J0IHZhbHVlIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSXQncyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGJyaWRnZWBgIG9yIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSwgeW91IG11c3Qgc3BlY2lmeSBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBhIHR5cGUgU1JWIEROUyByZWNvcmQgaXMgdXNlZCwgeW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gb3IgYSBgYHBvcnRgYCB2YWx1ZS4gSG93ZXZlciwgeW91IGNhbid0IHNwZWNpZnkgYm90aC5cbiAqL1xuQ29udGFpbmVyUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHNlcnZpY2UgcmVnaXN0cnkuIFRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIHNlcnZpY2UgcmVnaXN0cnkgaXMgQ01BUC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRlU2VydmljZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkLW1hcC9sYXRlc3QvYXBpL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWwpLlxuICovXG5SZWdpc3RyeUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgYSB2b2x1bWUgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYXMgYSB2b2x1bWUgdGhhdCBpcyBjb25maWd1cmVkIGF0IGxhdW5jaCB0aW1lLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCB2b2x1bWUgdHlwZSBpcyBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbiB7XG5NYW5hZ2VkRUJTVm9sdW1lPzogU2VydmljZU1hbmFnZWRFQlNWb2x1bWVDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSB2b2x1bWUuIFRoaXMgdmFsdWUgbXVzdCBtYXRjaCB0aGUgdm9sdW1lIG5hbWUgZnJvbSB0aGUgYGBWb2x1bWVgYCBvYmplY3QgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQW1hem9uIEVCUyB2b2x1bWUgdGhhdCBBbWF6b24gRUNTIGNyZWF0ZXMgYW5kIG1hbmFnZXMgb24geW91ciBiZWhhbGYuIFRoZXNlIHNldHRpbmdzIGFyZSB1c2VkIHRvIGNyZWF0ZSBlYWNoIEFtYXpvbiBFQlMgdm9sdW1lLCB3aXRoIG9uZSB2b2x1bWUgY3JlYXRlZCBmb3IgZWFjaCB0YXNrIGluIHRoZSBzZXJ2aWNlLiBUaGUgQW1hem9uIEVCUyB2b2x1bWVzIGFyZSB2aXNpYmxlIGluIHlvdXIgYWNjb3VudCBpbiB0aGUgQW1hem9uIEVDMiBjb25zb2xlIG9uY2UgdGhleSBhcmUgY3JlYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlTWFuYWdlZEVCU1ZvbHVtZUNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc25hcHNob3QgdGhhdCBBbWF6b24gRUNTIHVzZXMgdG8gY3JlYXRlIHZvbHVtZXMgZm9yIGF0dGFjaG1lbnQgdG8gdGFza3MgbWFpbnRhaW5lZCBieSB0aGUgc2VydmljZS4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYGBzbmFwc2hvdElkYGAgb3IgYGBzaXplSW5HaUJgYCBpbiB5b3VyIHZvbHVtZSBjb25maWd1cmF0aW9uLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNuYXBzaG90SWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblNuYXBzaG90SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZvbHVtZSB0eXBlLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFZvbHVtZVR5cGVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQlMgdm9sdW1lIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgdHlwZXMuXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSBTU0Q6IGBgZ3AyYGB8YGBncDNgYFxuICogICArICBQcm92aXNpb25lZCBJT1BTIFNTRDogYGBpbzFgYHxgYGlvMmBgXG4gKiAgICsgIFRocm91Z2hwdXQgT3B0aW1pemVkIEhERDogYGBzdDFgYFxuICogICArICBDb2xkIEhERDogYGBzYzFgYFxuICogICArICBNYWduZXRpYzogYGBzdGFuZGFyZGBgXG4gKiAgIFRoZSBtYWduZXRpYyB2b2x1bWUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIG9uIEZhcmdhdGUuXG4gKi9cblZvbHVtZVR5cGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIGlkZW50aWZpZXIgb2YgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSB0byB1c2UgZm9yIEFtYXpvbiBFQlMgZW5jcnlwdGlvbi4gV2hlbiBhIGtleSBpcyBzcGVjaWZpZWQgdXNpbmcgdGhpcyBwYXJhbWV0ZXIsIGl0IG92ZXJyaWRlcyBBbWF6b24gRUJTIGRlZmF1bHQgZW5jcnlwdGlvbiBvciBhbnkgS01TIGtleSB0aGF0IHlvdSBzcGVjaWZpZWQgZm9yIGNsdXN0ZXItbGV2ZWwgbWFuYWdlZCBzdG9yYWdlIGVuY3J5cHRpb24uIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgS21zS2V5SWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGVuY3J5cHRpbmcgQW1hem9uIEVCUyB2b2x1bWVzIGF0dGFjaGVkIHRvIHRhc2tzLCBzZWUgW0VuY3J5cHQgZGF0YSBzdG9yZWQgaW4gQW1hem9uIEVCUyB2b2x1bWVzIGF0dGFjaGVkIHRvIEFtYXpvbiBFQ1MgdGFza3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vicy1rbXMtZW5jcnlwdGlvbi5odG1sKS5cbiAqICAgQVdTIGF1dGhlbnRpY2F0ZXMgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSBhc3luY2hyb25vdXNseS4gVGhlcmVmb3JlLCBpZiB5b3Ugc3BlY2lmeSBhbiBJRCwgYWxpYXMsIG9yIEFSTiB0aGF0IGlzIGludmFsaWQsIHRoZSBhY3Rpb24gY2FuIGFwcGVhciB0byBjb21wbGV0ZSwgYnV0IGV2ZW50dWFsbHkgZmFpbHMuXG4gKi9cbkttc0tleUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSB2b2x1bWUuIEFtYXpvbiBFQ1MgYXBwbGllcyBzZXJ2aWNlLW1hbmFnZWQgdGFncyBieSBkZWZhdWx0LiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRhZ1NwZWNpZmljYXRpb25zLk5gYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblRhZ1NwZWNpZmljYXRpb25zPzogRUJTVGFnU3BlY2lmaWNhdGlvbltdXG4vKipcbiAqIFRoZSBmaWxlc3lzdGVtIHR5cGUgZm9yIHRoZSB2b2x1bWUuIEZvciB2b2x1bWVzIGNyZWF0ZWQgZnJvbSBhIHNuYXBzaG90LCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBzYW1lIGZpbGVzeXN0ZW0gdHlwZSB0aGF0IHRoZSB2b2x1bWUgd2FzIHVzaW5nIHdoZW4gdGhlIHNuYXBzaG90IHdhcyBjcmVhdGVkLiBJZiB0aGVyZSBpcyBhIGZpbGVzeXN0ZW0gdHlwZSBtaXNtYXRjaCwgdGhlIHRhc2tzIHdpbGwgZmFpbCB0byBzdGFydC5cbiAqICBUaGUgYXZhaWxhYmxlIExpbnV4IGZpbGVzeXN0ZW0gdHlwZXMgYXJl4oCoIGBgZXh0M2BgLCBgYGV4dDRgYCwgYW5kIGBgeGZzYGAuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGBgeGZzYGAgZmlsZXN5c3RlbSB0eXBlIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqICBUaGUgYXZhaWxhYmxlIFdpbmRvd3MgZmlsZXN5c3RlbSB0eXBlcyBhcmUgYGBOVEZTYGAuXG4gKi9cbkZpbGVzeXN0ZW1UeXBlPzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB2b2x1bWUgc2hvdWxkIGJlIGVuY3J5cHRlZC4gSWYgeW91IHR1cm4gb24gUmVnaW9uLWxldmVsIEFtYXpvbiBFQlMgZW5jcnlwdGlvbiBieSBkZWZhdWx0IGJ1dCBzZXQgdGhpcyB2YWx1ZSBhcyBgYGZhbHNlYGAsIHRoZSBzZXR0aW5nIGlzIG92ZXJyaWRkZW4gYW5kIHRoZSB2b2x1bWUgaXMgZW5jcnlwdGVkIHdpdGggdGhlIEtNUyBrZXkgc3BlY2lmaWVkIGZvciBBbWF6b24gRUJTIGVuY3J5cHRpb24gYnkgZGVmYXVsdC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBFbmNyeXB0ZWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cbkVuY3J5cHRlZD86IGJvb2xlYW5cbi8qKlxuICogVGhlIHRocm91Z2hwdXQgdG8gcHJvdmlzaW9uIGZvciBhIHZvbHVtZSwgaW4gTWlCL3MsIHdpdGggYSBtYXhpbXVtIG9mIDEsMDAwIE1pQi9zLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRocm91Z2hwdXRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0aGUgYGBncDNgYCB2b2x1bWUgdHlwZS5cbiAqL1xuVGhyb3VnaHB1dD86IG51bWJlclxuLyoqXG4gKiBUaGUgcmF0ZSwgaW4gTWlCL3MsIGF0IHdoaWNoIGRhdGEgaXMgZmV0Y2hlZCBmcm9tIGEgc25hcHNob3Qgb2YgYW4gZXhpc3RpbmcgRUJTIHZvbHVtZSB0byBjcmVhdGUgbmV3IHZvbHVtZXMgZm9yIGF0dGFjaG1lbnQgdG8gdGhlIHRhc2tzIG1haW50YWluZWQgYnkgdGhlIHNlcnZpY2UuIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNwZWNpZmllZCBvbmx5IGlmIHlvdSBzcGVjaWZ5IGEgYGBzbmFwc2hvdElkYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0luaXRpYWxpemUgQW1hem9uIEVCUyB2b2x1bWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvaW5pdGFsaXplLXZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQlMgVXNlciBHdWlkZSouXG4gKi9cblZvbHVtZUluaXRpYWxpemF0aW9uUmF0ZT86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpLiBGb3IgYGBncDNgYCwgYGBpbzFgYCwgYW5kIGBgaW8yYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgSU9QUyB0aGF0IGFyZSBwcm92aXNpb25lZCBmb3IgdGhlIHZvbHVtZS4gRm9yIGBgZ3AyYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBiYXNlbGluZSBwZXJmb3JtYW5jZSBvZiB0aGUgdm9sdW1lIGFuZCB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgdm9sdW1lIGFjY3VtdWxhdGVzIEkvTyBjcmVkaXRzIGZvciBidXJzdGluZy5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgYGBncDNgYDogMywwMDAgLSAxNiwwMDAgSU9QU1xuICogICArICBgYGlvMWBgOiAxMDAgLSA2NCwwMDAgSU9QU1xuICogICArICBgYGlvMmBgOiAxMDAgLSAyNTYsMDAwIElPUFNcbiAqICAgXG4gKiAgVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIGBgaW8xYGAgYW5kIGBgaW8yYGAgdm9sdW1lIHR5cGVzLiBUaGUgZGVmYXVsdCBmb3IgYGBncDNgYCB2b2x1bWVzIGlzIGBgMywwMDAgSU9QU2BgLiBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBgYHN0MWBgLCBgYHNjMWBgLCBvciBgYHN0YW5kYXJkYGAgdm9sdW1lIHR5cGVzLlxuICogIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgSW9wc2BgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuSW9wcz86IG51bWJlclxuLyoqXG4gKiBUaGUgc2l6ZSBvZiB0aGUgdm9sdW1lIGluIEdpQi4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSB2b2x1bWUgc2l6ZSBvciBhIHNuYXBzaG90IElELiBJZiB5b3Ugc3BlY2lmeSBhIHNuYXBzaG90IElELCB0aGUgc25hcHNob3Qgc2l6ZSBpcyB1c2VkIGZvciB0aGUgdm9sdW1lIHNpemUgYnkgZGVmYXVsdC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSB2b2x1bWUgc2l6ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNuYXBzaG90IHNpemUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgU2l6ZWBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZSBzaXplIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgYGBncDJgYCBhbmQgYGBncDNgYDogMS0xNiwzODRcbiAqICAgKyAgYGBpbzFgYCBhbmQgYGBpbzJgYDogNC0xNiwzODRcbiAqICAgKyAgYGBzdDFgYCBhbmQgYGBzYzFgYDogMTI1LTE2LDM4NFxuICogICArICBgYHN0YW5kYXJkYGA6IDEtMSwwMjRcbiAqL1xuU2l6ZUluR2lCPzogbnVtYmVyXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIElBTSByb2xlIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgdm9sdW1lLiBUaGlzIGlzIHRoZSBBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBtYW5hZ2UgeW91ciBBV1MgaW5mcmFzdHJ1Y3R1cmUuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgQW1hem9uIEVDUy1tYW5hZ2VkIGBgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVm9sdW1lc2BgIElBTSBwb2xpY3kgd2l0aCB0aGlzIHJvbGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2luZnJhc3RydWN0dXJlX0lBTV9yb2xlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDUyBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHRhZyBzcGVjaWZpY2F0aW9ucyBvZiBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFQlNUYWdTcGVjaWZpY2F0aW9uIHtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHByb3BhZ2F0ZSB0aGUgdGFncyBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gdG8g4oCodGhlIEFtYXpvbiBFQlMgdm9sdW1lLiBUYWdzIGNhbiBvbmx5IHByb3BhZ2F0ZSB0byBhIGBgU0VSVklDRWBgIHNwZWNpZmllZCBpbiDigKhgYFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uYGAuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIHRhZ3MgYXJlbid0IOKAqHByb3BhZ2F0ZWQuXG4gKi9cblByb3BhZ2F0ZVRhZ3M/OiAoXCJTRVJWSUNFXCIgfCBcIlRBU0tfREVGSU5JVElPTlwiKVxuLyoqXG4gKiBUaGUgdHlwZSBvZiB2b2x1bWUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlVHlwZTogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIGFwcGxpZWQgdG8gdGhpcyBBbWF6b24gRUJTIHZvbHVtZS4gYGBBbWF6b25FQ1NDcmVhdGVkYGAgYW5kIGBgQW1hem9uRUNTTWFuYWdlZGBgIGFyZSByZXNlcnZlZCB0YWdzIHRoYXQgY2FuJ3QgYmUgdXNlZC5cbiAqL1xuVGFncz86IFRhZ1tdXG59XG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byBhIHJlc291cmNlIHRvIGhlbHAgeW91IGNhdGVnb3JpemUgYW5kIG9yZ2FuaXplIHRoZW0uIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZS4gWW91IGRlZmluZSB0aGVtLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKiAgIFxuICogIEluIG9yZGVyIHRvIHRhZyBhIHNlcnZpY2UgdGhhdCBoYXMgdGhlIGZvbGxvd2luZyBBUk4gZm9ybWF0LCB5b3UgbmVlZCB0byBtaWdyYXRlIHRoZSBzZXJ2aWNlIHRvIHRoZSBsb25nIEFSTi4gWW91IG11c3QgdXNlIHRoZSBBUEksIENMSSBvciBjb25zb2xlIHRvIG1pZ3JhdGUgdGhlIHNlcnZpY2UgQVJOLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNaWdyYXRlIGFuIHNob3J0IHNlcnZpY2UgQVJOIHRvIGEgbG9uZyBBUk5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtYXJuLW1pZ3JhdGlvbi5odG1sKSBpbiB0aGUgKkRldmVsb3BlciBHdWlkZSouXG4gKiAgIGBgYXJuOmF3czplY3M6cmVnaW9uOmF3c19hY2NvdW50X2lkOnNlcnZpY2Uvc2VydmljZS1uYW1lYGAgXG4gKiAgQWZ0ZXIgdGhlIG1pZ3JhdGlvbiBpcyBjb21wbGV0ZSwgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZTpcbiAqICAgKyAgIFRoZSBzZXJ2aWNlIEFSTiBpczogYGBhcm46YXdzOmVjczpyZWdpb246YXdzX2FjY291bnRfaWQ6c2VydmljZS9jbHVzdGVyLW5hbWUvc2VydmljZS1uYW1lYGBcbiAqICAgKyAgWW91IGNhbiB1c2UgQ0ZOIHRvIHRhZyB0aGUgc2VydmljZSBhcyB5b3Ugd291bGQgYSBzZXJ2aWNlIHdpdGggYSBsb25nIEFSTiBmb3JtYXQuXG4gKiAgICsgIFdoZW4gdGhlIGBgUGh5c2ljYWxSZXNvdXJjZUlkYGAgaW4gdGhlIENGTiBzdGFjayByZXByZXNlbnRzIGEgc2VydmljZSwgdGhlIHZhbHVlIGRvZXMgbm90IGNoYW5nZSBhbmQgd2lsbCBiZSB0aGUgc2hvcnQgc2VydmljZSBBUk4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIG9wdGlvbmFsIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGB2YWx1ZWBgIGFjdHMgYXMgYSBkZXNjcmlwdG9yIHdpdGhpbiBhIHRhZyBjYXRlZ29yeSAoa2V5KS5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbi8qKlxuICogT25lIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGBrZXlgYCBpcyBhIGdlbmVyYWwgbGFiZWwgdGhhdCBhY3RzIGxpa2UgYSBjYXRlZ29yeSBmb3IgbW9yZSBzcGVjaWZpYyB0YWcgdmFsdWVzLlxuICovXG5LZXk/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRldGFpbHMgb2YgYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gQSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBjYW4gYmUgc2V0IHdoZW4gdXNpbmcgdGhlIGBgUnVuVGFza2BgIG9yIGBgQ3JlYXRlU2VydmljZWBgIEFQSXMgb3IgYXMgdGhlIGRlZmF1bHQgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgZm9yIGEgY2x1c3RlciB3aXRoIHRoZSBgYENyZWF0ZUNsdXN0ZXJgYCBBUEkuXG4gKiAgT25seSBjYXBhY2l0eSBwcm92aWRlcnMgdGhhdCBhcmUgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBjbHVzdGVyIGFuZCBoYXZlIGFuIGBgQUNUSVZFYGAgb3IgYGBVUERBVElOR2BgIHN0YXR1cyBjYW4gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LiBUaGUgYGBQdXRDbHVzdGVyQ2FwYWNpdHlQcm92aWRlcnNgYCBBUEkgaXMgdXNlZCB0byBhc3NvY2lhdGUgYSBjYXBhY2l0eSBwcm92aWRlciB3aXRoIGEgY2x1c3Rlci5cbiAqICBJZiBzcGVjaWZ5aW5nIGEgY2FwYWNpdHkgcHJvdmlkZXIgdGhhdCB1c2VzIGFuIEF1dG8gU2NhbGluZyBncm91cCwgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIG11c3QgYWxyZWFkeSBiZSBjcmVhdGVkLiBOZXcgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycyBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBgYENyZWF0ZUNhcGFjaXR5UHJvdmlkZXJgYCBBUEkgb3BlcmF0aW9uLlxuICogIFRvIHVzZSBhbiBGQVJHQVRFbG9uZyBjYXBhY2l0eSBwcm92aWRlciwgc3BlY2lmeSBlaXRoZXIgdGhlIGBgRkFSR0FURWBgIG9yIGBgRkFSR0FURV9TUE9UYGAgY2FwYWNpdHkgcHJvdmlkZXJzLiBUaGUgRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgdG8gYWxsIGFjY291bnRzIGFuZCBvbmx5IG5lZWQgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciB0byBiZSB1c2VkIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbSB7XG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlci5cbiAqL1xuQ2FwYWNpdHlQcm92aWRlcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgKmJhc2UqIHZhbHVlIGRlc2lnbmF0ZXMgaG93IG1hbnkgdGFza3MsIGF0IGEgbWluaW11bSwgdG8gcnVuIG9uIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIgZm9yIGVhY2ggc2VydmljZS4gT25seSBvbmUgY2FwYWNpdHkgcHJvdmlkZXIgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBjYW4gaGF2ZSBhICpiYXNlKiBkZWZpbmVkLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuXG4gKiAgQmFzZSB2YWx1ZSBjaGFyYWN0ZXJpc3RpY3M6XG4gKiAgICsgIE9ubHkgb25lIGNhcGFjaXR5IHByb3ZpZGVyIGluIGEgc3RyYXRlZ3kgY2FuIGhhdmUgYSBiYXNlIGRlZmluZWRcbiAqICAgKyAgRGVmYXVsdCB2YWx1ZSBpcyBgYDBgYCBpZiBub3Qgc3BlY2lmaWVkXG4gKiAgICsgIFZhbGlkIHJhbmdlOiAwIHRvIDEwMCwwMDBcbiAqICAgKyAgQmFzZSByZXF1aXJlbWVudHMgYXJlIHNhdGlzZmllZCBmaXJzdCBiZWZvcmUgd2VpZ2h0IGRpc3RyaWJ1dGlvblxuICovXG5CYXNlPzogbnVtYmVyXG4vKipcbiAqIFRoZSAqd2VpZ2h0KiB2YWx1ZSBkZXNpZ25hdGVzIHRoZSByZWxhdGl2ZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MgbGF1bmNoZWQgdGhhdCBzaG91bGQgdXNlIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIuIFRoZSBgYHdlaWdodGBgIHZhbHVlIGlzIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBhZnRlciB0aGUgYGBiYXNlYGAgdmFsdWUsIGlmIGRlZmluZWQsIGlzIHNhdGlzZmllZC5cbiAqICBJZiBubyBgYHdlaWdodGBgIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC4gV2hlbiBtdWx0aXBsZSBjYXBhY2l0eSBwcm92aWRlcnMgYXJlIHNwZWNpZmllZCB3aXRoaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlcnMgbXVzdCBoYXZlIGEgd2VpZ2h0IHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBhbnkgY2FwYWNpdHkgcHJvdmlkZXJzIHdpdGggYSB3ZWlnaHQgb2YgYGAwYGAgY2FuJ3QgYmUgdXNlZCB0byBwbGFjZSB0YXNrcy4gSWYgeW91IHNwZWNpZnkgbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGluIGEgc3RyYXRlZ3kgdGhhdCBhbGwgaGF2ZSBhIHdlaWdodCBvZiBgYDBgYCwgYW55IGBgUnVuVGFza2BgIG9yIGBgQ3JlYXRlU2VydmljZWBgIGFjdGlvbnMgdXNpbmcgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHdpbGwgZmFpbC5cbiAqICBXZWlnaHQgdmFsdWUgY2hhcmFjdGVyaXN0aWNzOlxuICogICArICBXZWlnaHQgaXMgY29uc2lkZXJlZCBhZnRlciB0aGUgYmFzZSB2YWx1ZSBpcyBzYXRpc2ZpZWRcbiAqICAgKyAgRGVmYXVsdCB2YWx1ZSBpcyBgYDBgYCBpZiBub3Qgc3BlY2lmaWVkXG4gKiAgICsgIFZhbGlkIHJhbmdlOiAwIHRvIDEsMDAwXG4gKiAgICsgIEF0IGxlYXN0IG9uZSBjYXBhY2l0eSBwcm92aWRlciBtdXN0IGhhdmUgYSB3ZWlnaHQgZ3JlYXRlciB0aGFuIHplcm9cbiAqICAgKyAgQ2FwYWNpdHkgcHJvdmlkZXJzIHdpdGggd2VpZ2h0IG9mIGBgMGBgIGNhbm5vdCBwbGFjZSB0YXNrc1xuICogICBcbiAqICBUYXNrIGRpc3RyaWJ1dGlvbiBsb2dpYzpcbiAqICAgMS4gIEJhc2Ugc2F0aXNmYWN0aW9uOiBUaGUgbWluaW11bSBudW1iZXIgb2YgdGFza3Mgc3BlY2lmaWVkIGJ5IHRoZSBiYXNlIHZhbHVlIGFyZSBwbGFjZWQgb24gdGhhdCBjYXBhY2l0eSBwcm92aWRlclxuICogICAxLiAgV2VpZ2h0IGRpc3RyaWJ1dGlvbjogQWZ0ZXIgYmFzZSByZXF1aXJlbWVudHMgYXJlIG1ldCwgYWRkaXRpb25hbCB0YXNrcyBhcmUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHdlaWdodCByYXRpb3NcbiAqICAgXG4gKiAgRXhhbXBsZXM6XG4gKiAgRXF1YWwgRGlzdHJpYnV0aW9uOiBUd28gY2FwYWNpdHkgcHJvdmlkZXJzIGJvdGggd2l0aCB3ZWlnaHQgYGAxYGAgd2lsbCBzcGxpdCB0YXNrcyBldmVubHkgYWZ0ZXIgYmFzZSByZXF1aXJlbWVudHMgYXJlIG1ldC5cbiAqICBXZWlnaHRlZCBEaXN0cmlidXRpb246IElmIGNhcGFjaXR5UHJvdmlkZXJBIGhhcyB3ZWlnaHQgYGAxYGAgYW5kIGNhcGFjaXR5UHJvdmlkZXJCIGhhcyB3ZWlnaHQgYGA0YGAsIHRoZW4gZm9yIGV2ZXJ5IDEgdGFzayBvbiBBLCA0IHRhc2tzIHdpbGwgcnVuIG9uIEIuXG4gKi9cbldlaWdodD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VydmljZS4gVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIHRhc2sgZGVmaW5pdGlvbnMgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIHRvIHJlY2VpdmUgdGhlaXIgb3duIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIGFuZCBpdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBvdGhlciBuZXR3b3JrIG1vZGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIE5ldHdvcmtpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stbmV0d29ya2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0NvbmZpZ3VyYXRpb24ge1xuQXdzdnBjQ29uZmlndXJhdGlvbj86IEF3c1ZwY0NvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIFZQQyBzdWJuZXRzIGFuZCBzZWN1cml0eSBncm91cHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgdGFzay5cbiAqICAgQWxsIHNwZWNpZmllZCBzdWJuZXRzIGFuZCBzZWN1cml0eSBncm91cHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NWcGNDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIElEcyBvZiB0aGUgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBvciBzZXJ2aWNlLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHNlY3VyaXR5IGdyb3VwLCB0aGUgZGVmYXVsdCBzZWN1cml0eSBncm91cCBmb3IgdGhlIFZQQyBpcyB1c2VkLiBUaGVyZSdzIGEgbGltaXQgb2YgNSBzZWN1cml0eSBncm91cHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkLlxuICogICBBbGwgc3BlY2lmaWVkIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHN1Ym5ldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIFRoZXJlJ3MgYSBsaW1pdCBvZiAxNiBzdWJuZXRzIHRoYXQgY2FuIGJlIHNwZWNpZmllZC5cbiAqICAgQWxsIHNwZWNpZmllZCBzdWJuZXRzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cblN1Ym5ldHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHRoZSB0YXNrJ3MgZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSByZWNlaXZlcyBhIHB1YmxpYyBJUCBhZGRyZXNzLiBcbiAqICBDb25zaWRlciB0aGUgZm9sbG93aW5nIHdoZW4geW91IHNldCB0aGlzIHZhbHVlOlxuICogICArICBXaGVuIHlvdSB1c2UgYGBjcmVhdGUtc2VydmljZWBgIG9yIGBgdXBkYXRlLXNlcnZpY2VgYCwgdGhlIGRlZmF1bHQgaXMgYGBESVNBQkxFRGBgLiBcbiAqICAgKyAgV2hlbiB0aGUgc2VydmljZSBgYGRlcGxveW1lbnRDb250cm9sbGVyYGAgaXMgYGBFQ1NgYCwgdGhlIHZhbHVlIG11c3QgYmUgYGBESVNBQkxFRGBgLlxuICovXG5Bc3NpZ25QdWJsaWNJcD86IChcIkRJU0FCTEVEXCIgfCBcIkVOQUJMRURcIilcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGZvcmNlIGEgbmV3IGRlcGxveW1lbnQgb2YgdGhlIHNlcnZpY2UuIEJ5IGRlZmF1bHQsIGRlcGxveW1lbnRzIGFyZW4ndCBmb3JjZWQuIFlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIHRvIHN0YXJ0IGEgbmV3IGRlcGxveW1lbnQgd2l0aCBubyBzZXJ2aWNlIGRlZmluaXRpb24gY2hhbmdlcy4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXBkYXRlIGEgc2VydmljZSdzIHRhc2tzIHRvIHVzZSBhIG5ld2VyIERvY2tlciBpbWFnZSB3aXRoIHRoZSBzYW1lIGltYWdlL3RhZyBjb21iaW5hdGlvbiAoYGBteV9pbWFnZTpsYXRlc3RgYCkgb3IgdG8gcm9sbCBGYXJnYXRlIHRhc2tzIG9udG8gYSBuZXdlciBwbGF0Zm9ybSB2ZXJzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmNlTmV3RGVwbG95bWVudCB7XG5FbmFibGVGb3JjZU5ld0RlcGxveW1lbnQ6IGJvb2xlYW5cbkZvcmNlTmV3RGVwbG95bWVudE5vbmNlPzogc3RyaW5nXG59XG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb25zdHJhaW50IG9uIHRhc2sgcGxhY2VtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIHBsYWNlbWVudCBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtY29uc3RyYWludHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3UncmUgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGFyZW4ndCBzdXBwb3J0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50Q29uc3RyYWludCB7XG4vKipcbiAqIFRoZSB0eXBlIG9mIGNvbnN0cmFpbnQuIFVzZSBgYGRpc3RpbmN0SW5zdGFuY2VgYCB0byBlbnN1cmUgdGhhdCBlYWNoIHRhc2sgaW4gYSBwYXJ0aWN1bGFyIGdyb3VwIGlzIHJ1bm5pbmcgb24gYSBkaWZmZXJlbnQgY29udGFpbmVyIGluc3RhbmNlLiBVc2UgYGBtZW1iZXJPZmBgIHRvIHJlc3RyaWN0IHRoZSBzZWxlY3Rpb24gdG8gYSBncm91cCBvZiB2YWxpZCBjYW5kaWRhdGVzLlxuICovXG5UeXBlOiAoXCJkaXN0aW5jdEluc3RhbmNlXCIgfCBcIm1lbWJlck9mXCIpXG4vKipcbiAqIEEgY2x1c3RlciBxdWVyeSBsYW5ndWFnZSBleHByZXNzaW9uIHRvIGFwcGx5IHRvIHRoZSBjb25zdHJhaW50LiBUaGUgZXhwcmVzc2lvbiBjYW4gaGF2ZSBhIG1heGltdW0gbGVuZ3RoIG9mIDIwMDAgY2hhcmFjdGVycy4gWW91IGNhbid0IHNwZWNpZnkgYW4gZXhwcmVzc2lvbiBpZiB0aGUgY29uc3RyYWludCB0eXBlIGlzIGBgZGlzdGluY3RJbnN0YW5jZWBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jbHVzdGVyLXF1ZXJ5LWxhbmd1YWdlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRXhwcmVzc2lvbj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYGBMb2FkQmFsYW5jZXJgYCBwcm9wZXJ0eSBzcGVjaWZpZXMgZGV0YWlscyBvbiBhIGxvYWQgYmFsYW5jZXIgdGhhdCBpcyB1c2VkIHdpdGggYSBzZXJ2aWNlLlxuICogIElmIHRoZSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB0aGUgc2VydmljZSBpcyByZXF1aXJlZCB0byB1c2UgZWl0aGVyIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBXaGVuIHlvdSBhcmUgY3JlYXRpbmcgYW4gQUNEbG9uZyBkZXBsb3ltZW50IGdyb3VwLCB5b3Ugc3BlY2lmeSB0d28gdGFyZ2V0IGdyb3VwcyAocmVmZXJyZWQgdG8gYXMgYSBgYHRhcmdldEdyb3VwUGFpcmBgKS4gRWFjaCB0YXJnZXQgZ3JvdXAgYmluZHMgdG8gYSBzZXBhcmF0ZSB0YXNrIHNldCBpbiB0aGUgZGVwbG95bWVudC4gVGhlIGxvYWQgYmFsYW5jZXIgY2FuIGFsc28gaGF2ZSB1cCB0byB0d28gbGlzdGVuZXJzLCBhIHJlcXVpcmVkIGxpc3RlbmVyIGZvciBwcm9kdWN0aW9uIHRyYWZmaWMgYW5kIGFuIG9wdGlvbmFsIGxpc3RlbmVyIHRoYXQgYWxsb3dzIHlvdSB0byB0ZXN0IG5ldyByZXZpc2lvbnMgb2YgdGhlIHNlcnZpY2UgYmVmb3JlIHJvdXRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LlxuICogIFNlcnZpY2VzIHdpdGggdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIChmb3IgZXhhbXBsZSwgdGhvc2Ugd2l0aCB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSkgb25seSBzdXBwb3J0IEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzIGFuZCBOZXR3b3JrIExvYWQgQmFsYW5jZXJzLiBDbGFzc2ljIExvYWQgQmFsYW5jZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiBBbHNvLCB3aGVuIHlvdSBjcmVhdGUgYW55IHRhcmdldCBncm91cHMgZm9yIHRoZXNlIHNlcnZpY2VzLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gVGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgbm90IGFuIEFtYXpvbiBFQzIgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyIHtcbi8qKlxuICogVGhlIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgdGFyZ2V0IGdyb3VwIG9yIGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggYSBzZXJ2aWNlIG9yIHRhc2sgc2V0LlxuICogIEEgdGFyZ2V0IGdyb3VwIEFSTiBpcyBvbmx5IHNwZWNpZmllZCB3aGVuIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBcbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgRUNTYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UgY2FuIHNwZWNpZnkgb25lIG9yIG11bHRpcGxlIHRhcmdldCBncm91cHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JlZ2lzdGVyaW5nIG11bHRpcGxlIHRhcmdldCBncm91cHMgd2l0aCBhIHNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3JlZ2lzdGVyLW11bHRpcGxlLXRhcmdldGdyb3Vwcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UncmUgcmVxdWlyZWQgdG8gZGVmaW5lIHR3byB0YXJnZXQgZ3JvdXBzIGZvciB0aGUgbG9hZCBiYWxhbmNlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQmx1ZS9ncmVlbiBkZXBsb3ltZW50IHdpdGggQ29kZURlcGxveV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWJsdWVncmVlbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc2VydmljZSdzIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSwgeW91IG11c3QgY2hvb3NlIGBgaXBgYCBhcyB0aGUgdGFyZ2V0IHR5cGUsIG5vdCBgYGluc3RhbmNlYGAuIERvIHRoaXMgd2hlbiBjcmVhdGluZyB5b3VyIHRhcmdldCBncm91cHMgYmVjYXVzZSB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS4gVGhpcyBuZXR3b3JrIG1vZGUgaXMgcmVxdWlyZWQgZm9yIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLlxuICovXG5UYXJnZXRHcm91cEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbG9hZCBiYWxhbmNlciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIG9yIHRhc2sgc2V0LlxuICogIElmIHlvdSBhcmUgdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBhIE5ldHdvcmsgTG9hZCBCYWxhbmNlciB0aGUgbG9hZCBiYWxhbmNlciBuYW1lIHBhcmFtZXRlciBzaG91bGQgYmUgb21pdHRlZC5cbiAqL1xuTG9hZEJhbGFuY2VyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIChhcyBpdCBhcHBlYXJzIGluIGEgY29udGFpbmVyIGRlZmluaXRpb24pIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLlxuICogIFlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNvbnRhaW5lciBuYW1lIHdoZW4gY29uZmlndXJpbmcgdGhlIHRhcmdldCBncm91cCBmb3IgYW4gQW1hem9uIEVDUyBsb2FkIGJhbGFuY2VyLlxuICovXG5Db250YWluZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwb3J0IG9uIHRoZSBjb250YWluZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuIFRoaXMgcG9ydCBtdXN0IGNvcnJlc3BvbmQgdG8gYSBgYGNvbnRhaW5lclBvcnRgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgdXNpbmcuIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgY29udGFpbmVyIGluc3RhbmNlIHRoZXkncmUgbGF1bmNoZWQgb24gbXVzdCBhbGxvdyBpbmdyZXNzIHRyYWZmaWMgb24gdGhlIGBgaG9zdFBvcnRgYCBvZiB0aGUgcG9ydCBtYXBwaW5nLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG5BZHZhbmNlZENvbmZpZ3VyYXRpb24/OiBBZHZhbmNlZENvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIGFkdmFuY2VkIHNldHRpbmdzIGZvciB0aGUgbG9hZCBiYWxhbmNlciB1c2VkIGluIGJsdWUvZ3JlZW4gZGVwbG95bWVudHMuIFNwZWNpZnkgdGhlIGFsdGVybmF0ZSB0YXJnZXQgZ3JvdXAsIGxpc3RlbmVyIHJ1bGVzLCBhbmQgSUFNIHJvbGUgcmVxdWlyZWQgZm9yIHRyYWZmaWMgc2hpZnRpbmcgZHVyaW5nIGJsdWUvZ3JlZW4gZGVwbG95bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIHRoYXQgaWRlbnRpZmllcyApIHRoYXQgaWRlbnRpZmllcyB0aGUgdGVzdCBsaXN0ZW5lciBydWxlIChpbiB0aGUgY2FzZSBvZiBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyKSBvciBsaXN0ZW5lciAoaW4gdGhlIGNhc2UgZm9yIGFuIE5ldHdvcmsgTG9hZCBCYWxhbmNlcikgZm9yIHJvdXRpbmcgdGVzdCB0cmFmZmljLlxuICovXG5UZXN0TGlzdGVuZXJSdWxlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgYWx0ZXJuYXRlIHRhcmdldCBncm91cCBmb3IgQW1hem9uIEVDUyBibHVlL2dyZWVuIGRlcGxveW1lbnRzLlxuICovXG5BbHRlcm5hdGVUYXJnZXRHcm91cEFybjogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSB0aGF0IHRoYXQgaWRlbnRpZmllcyB0aGUgcHJvZHVjdGlvbiBsaXN0ZW5lciBydWxlIChpbiB0aGUgY2FzZSBvZiBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyKSBvciBsaXN0ZW5lciAoaW4gdGhlIGNhc2UgZm9yIGFuIE5ldHdvcmsgTG9hZCBCYWxhbmNlcikgZm9yIHJvdXRpbmcgcHJvZHVjdGlvbiB0cmFmZmljLlxuICovXG5Qcm9kdWN0aW9uTGlzdGVuZXJSdWxlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBncmFudHMgQW1hem9uIEVDUyBwZXJtaXNzaW9uIHRvIGNhbGwgdGhlIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgQVBJcyBmb3IgeW91LlxuICovXG5Sb2xlQXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHNlcnZpY2UgdG8gZGlzY292ZXIgYW5kIGNvbm5lY3QgdG8gc2VydmljZXMsIGFuZCBiZSBkaXNjb3ZlcmVkIGJ5LCBhbmQgY29ubmVjdGVkIGZyb20sIG90aGVyIHNlcnZpY2VzIHdpdGhpbiBhIG5hbWVzcGFjZS5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGxpc3Qgb2YgU2VydmljZSBDb25uZWN0IHNlcnZpY2Ugb2JqZWN0cy4gVGhlc2UgYXJlIG5hbWVzIGFuZCBhbGlhc2VzIChhbHNvIGtub3duIGFzIGVuZHBvaW50cykgdGhhdCBhcmUgdXNlZCBieSBvdGhlciBBbWF6b24gRUNTIHNlcnZpY2VzIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLiBcbiAqICBUaGlzIGZpZWxkIGlzIG5vdCByZXF1aXJlZCBmb3IgYSBcImNsaWVudFwiIEFtYXpvbiBFQ1Mgc2VydmljZSB0aGF0J3MgYSBtZW1iZXIgb2YgYSBuYW1lc3BhY2Ugb25seSB0byBjb25uZWN0IHRvIG90aGVyIHNlcnZpY2VzIHdpdGhpbiB0aGUgbmFtZXNwYWNlLiBBbiBleGFtcGxlIG9mIHRoaXMgd291bGQgYmUgYSBmcm9udGVuZCBhcHBsaWNhdGlvbiB0aGF0IGFjY2VwdHMgaW5jb21pbmcgcmVxdWVzdHMgZnJvbSBlaXRoZXIgYSBsb2FkIGJhbGFuY2VyIHRoYXQncyBhdHRhY2hlZCB0byB0aGUgc2VydmljZSBvciBieSBvdGhlciBtZWFucy5cbiAqICBBbiBvYmplY3Qgc2VsZWN0cyBhIHBvcnQgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLCBhc3NpZ25zIGEgbmFtZSBmb3IgdGhlIENNQVBsb25nIHNlcnZpY2UsIGFuZCBhIGxpc3Qgb2YgYWxpYXNlcyAoZW5kcG9pbnRzKSBhbmQgcG9ydHMgZm9yIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gcmVmZXIgdG8gdGhpcyBzZXJ2aWNlLlxuICovXG5TZXJ2aWNlcz86IFNlcnZpY2VDb25uZWN0U2VydmljZVtdXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSBTZXJ2aWNlIENvbm5lY3Qgd2l0aCB0aGlzIHNlcnZpY2UuXG4gKi9cbkVuYWJsZWQ6IGJvb2xlYW5cbkxvZ0NvbmZpZ3VyYXRpb24/OiBMb2dDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBuYW1lc3BhY2UgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBDTUFQbG9uZyBuYW1lc3BhY2UgZm9yIHVzZSB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gVGhlIG5hbWVzcGFjZSBtdXN0IGJlIGluIHRoZSBzYW1lIEFXUyBSZWdpb24gYXMgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBhbmQgY2x1c3Rlci4gVGhlIHR5cGUgb2YgbmFtZXNwYWNlIGRvZXNuJ3QgYWZmZWN0IFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ01BUGxvbmcsIHNlZSBbV29ya2luZyB3aXRoIFNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9kZy93b3JraW5nLXdpdGgtc2VydmljZXMuaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5OYW1lc3BhY2U/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlIG9iamVjdCBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RTZXJ2aWNlIHtcblRpbWVvdXQ/OiBUaW1lb3V0Q29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgcG9ydCBudW1iZXIgZm9yIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkgdG8gbGlzdGVuIG9uLlxuICogIFVzZSB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCB0byBieXBhc3MgdGhlIHByb3h5IGZvciB0cmFmZmljIG9uIHRoZSBwb3J0IG51bWJlciBzcGVjaWZpZWQgaW4gdGhlIG5hbWVkIGBgcG9ydE1hcHBpbmdgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIG9mIHRoaXMgYXBwbGljYXRpb24sIGFuZCB0aGVuIHVzZSBpdCBpbiB5b3VyIFZQQyBzZWN1cml0eSBncm91cHMgdG8gYWxsb3cgdHJhZmZpYyBpbnRvIHRoZSBwcm94eSBmb3IgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKiAgSW4gYGBhd3N2cGNgYCBtb2RlIGFuZCBGYXJnYXRlLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgY29udGFpbmVyIHBvcnQgbnVtYmVyLiBUaGUgY29udGFpbmVyIHBvcnQgbnVtYmVyIGlzIGluIHRoZSBgYHBvcnRNYXBwaW5nYGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSW4gYnJpZGdlIG1vZGUsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBlcGhlbWVyYWwgcG9ydCBvZiB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LlxuICovXG5JbmdyZXNzUG9ydE92ZXJyaWRlPzogbnVtYmVyXG4vKipcbiAqIFRoZSBsaXN0IG9mIGNsaWVudCBhbGlhc2VzIGZvciB0aGlzIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlLiBZb3UgdXNlIHRoZXNlIHRvIGFzc2lnbiBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjbGllbnQgYWxpYXNlcyB0aGF0IHlvdSBjYW4gaGF2ZSBpbiB0aGlzIGxpc3QgaXMgMS5cbiAqICBFYWNoIGFsaWFzIChcImVuZHBvaW50XCIpIGlzIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgYW5kIHBvcnQgbnVtYmVyIHRoYXQgb3RoZXIgQW1hem9uIEVDUyB0YXNrcyAoXCJjbGllbnRzXCIpIGNhbiB1c2UgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuXG4gKiAgRWFjaCBuYW1lIGFuZCBwb3J0IG1hcHBpbmcgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBuYW1lc3BhY2UuXG4gKiAgRm9yIGVhY2ggYGBTZXJ2aWNlQ29ubmVjdFNlcnZpY2VgYCwgeW91IG11c3QgcHJvdmlkZSBhdCBsZWFzdCBvbmUgYGBjbGllbnRBbGlhc2BgIHdpdGggb25lIGBgcG9ydGBgLlxuICovXG5DbGllbnRBbGlhc2VzPzogU2VydmljZUNvbm5lY3RDbGllbnRBbGlhc1tdXG5UbHM/OiBTZXJ2aWNlQ29ubmVjdFRsc0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzIHRoZSBuYW1lIG9mIHRoZSBuZXcgQ01BUCBzZXJ2aWNlIHRoYXQgQW1hem9uIEVDUyBjcmVhdGVzIGZvciB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS4gVGhpcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIENNQVAgbmFtZXNwYWNlLiBUaGUgbmFtZSBjYW4gY29udGFpbiB1cCB0byA2NCBjaGFyYWN0ZXJzLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMgKF8pLCBhbmQgaHlwaGVucyAoLSkuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKiAgSWYgdGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzbid0IHNwZWNpZmllZCwgdGhlIHBvcnQgbWFwcGluZyBuYW1lIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkIGluIGBgcG9ydE5hbWUubmFtZXNwYWNlYGAuXG4gKi9cbkRpc2NvdmVyeU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgcG9ydE5hbWVgYCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGUgYGBwb3J0TWFwcGluZ3NgYCBmcm9tIGFsbCB0aGUgY29udGFpbmVycyBpbiB0aGUgdGFzayBkZWZpbml0aW9uIG9mIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLlxuICovXG5Qb3J0TmFtZTogc3RyaW5nXG59XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyZWQgdGltZW91dHMgZm9yIFNlcnZpY2UgQ29ubmVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lb3V0Q29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSB3YWl0aW5nIGZvciB0aGUgdXBzdHJlYW0gdG8gcmVzcG9uZCB3aXRoIGEgY29tcGxldGUgcmVzcG9uc2UgcGVyIHJlcXVlc3QuIEEgdmFsdWUgb2YgYGAwYGAgY2FuIGJlIHNldCB0byBkaXNhYmxlIGBgcGVyUmVxdWVzdFRpbWVvdXRgYC4gYGBwZXJSZXF1ZXN0VGltZW91dGBgIGNhbiBvbmx5IGJlIHNldCBpZiBTZXJ2aWNlIENvbm5lY3QgYGBhcHBQcm90b2NvbGBgIGlzbid0IGBgVENQYGAuIE9ubHkgYGBpZGxlVGltZW91dGBgIGlzIGFsbG93ZWQgZm9yIGBgVENQYGBgYGFwcFByb3RvY29sYGAuXG4gKi9cblBlclJlcXVlc3RUaW1lb3V0U2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBhIGNvbm5lY3Rpb24gd2lsbCBzdGF5IGFjdGl2ZSB3aGlsZSBpZGxlLiBBIHZhbHVlIG9mIGBgMGBgIGNhbiBiZSBzZXQgdG8gZGlzYWJsZSBgYGlkbGVUaW1lb3V0YGAuXG4gKiAgVGhlIGBgaWRsZVRpbWVvdXRgYCBkZWZhdWx0IGZvciBgYEhUVFBgYC9gYEhUVFAyYGAvYGBHUlBDYGAgaXMgNSBtaW51dGVzLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBUQ1BgYCBpcyAxIGhvdXIuXG4gKi9cbklkbGVUaW1lb3V0U2Vjb25kcz86IG51bWJlclxufVxuLyoqXG4gKiBFYWNoIGFsaWFzIChcImVuZHBvaW50XCIpIGlzIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgYW5kIHBvcnQgbnVtYmVyIHRoYXQgb3RoZXIgdGFza3MgKFwiY2xpZW50c1wiKSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLlxuICogIEVhY2ggbmFtZSBhbmQgcG9ydCBtYXBwaW5nIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzIHtcbi8qKlxuICogVGhlIGBgZG5zTmFtZWBgIGlzIHRoZSBuYW1lIHRoYXQgeW91IHVzZSBpbiB0aGUgYXBwbGljYXRpb25zIG9mIGNsaWVudCB0YXNrcyB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS4gVGhlIG5hbWUgbXVzdCBiZSBhIHZhbGlkIEROUyBuYW1lIGJ1dCBkb2Vzbid0IG5lZWQgdG8gYmUgZnVsbHktcXVhbGlmaWVkLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSB1cCB0byAxMjcgY2hhcmFjdGVycy4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgaHlwaGVucyAoLSksIGFuZCBwZXJpb2RzICguKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgZGlzY292ZXJ5TmFtZS5uYW1lc3BhY2VgYCBpcyB1c2VkLiBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgbmFtZSB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgZXhhbXBsZSwgYSBmZXcgY29tbW9uIG5hbWVzIGFyZSBgYGRhdGFiYXNlYGAsIGBgZGJgYCwgb3IgdGhlIGxvd2VyY2FzZSBuYW1lIG9mIGEgZGF0YWJhc2UsIHN1Y2ggYXMgYGBteXNxbGBgIG9yIGBgcmVkaXNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5EbnNOYW1lPzogc3RyaW5nXG5UZXN0VHJhZmZpY1J1bGVzPzogU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzXG4vKipcbiAqIFRoZSBsaXN0ZW5pbmcgcG9ydCBudW1iZXIgZm9yIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuIFRoaXMgcG9ydCBpcyBhdmFpbGFibGUgaW5zaWRlIG9mIGFsbCBvZiB0aGUgdGFza3Mgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZS5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgcG9ydCB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBvcnQ6IG51bWJlclxufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGVzdCB0cmFmZmljIHJvdXRpbmcgcnVsZXMgdXNlZCBkdXJpbmcgYmx1ZS9ncmVlbiBkZXBsb3ltZW50cyB3aXRoIEFtYXpvbiBFQ1MgU2VydmljZSBDb25uZWN0LiBUaGlzIGFsbG93cyB5b3UgdG8gcm91dGUgYSBwb3J0aW9uIG9mIHRyYWZmaWMgdG8gdGhlIG5ldyBzZXJ2aWNlIHJldmlzaW9uIG9mIHlvdXIgc2VydmljZSBmb3IgdGVzdGluZyBiZWZvcmUgc2hpZnRpbmcgYWxsIHByb2R1Y3Rpb24gdHJhZmZpYy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRlc3RUcmFmZmljUnVsZXMge1xuSGVhZGVyOiBTZXJ2aWNlQ29ubmVjdFRlc3RUcmFmZmljUnVsZXNIZWFkZXJcbn1cbi8qKlxuICogVGhlIEhUVFAgaGVhZGVyLWJhc2VkIHJvdXRpbmcgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggcmVxdWVzdHMgc2hvdWxkIGJlIHJvdXRlZCB0byB0aGUgbmV3IHNlcnZpY2UgdmVyc2lvbiBkdXJpbmcgYmx1ZS9ncmVlbiBkZXBsb3ltZW50IHRlc3RpbmcuIFRoZXNlIHJ1bGVzIHByb3ZpZGUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0ZXN0IHRyYWZmaWMgcm91dGluZyBiYXNlZCBvbiByZXF1ZXN0IGhlYWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzSGVhZGVyIHtcblZhbHVlPzogU2VydmljZUNvbm5lY3RUZXN0VHJhZmZpY1J1bGVzSGVhZGVyVmFsdWVcbk5hbWU6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRlc3RUcmFmZmljUnVsZXNIZWFkZXJWYWx1ZSB7XG5FeGFjdDogc3RyaW5nXG59XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NvbmZpZ3VyYXRpb24ge1xuSXNzdWVyQ2VydGlmaWNhdGVBdXRob3JpdHk6IFNlcnZpY2VDb25uZWN0VGxzQ2VydGlmaWNhdGVBdXRob3JpdHlcbi8qKlxuICogVGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleS5cbiAqL1xuS21zS2V5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgU2VydmljZSBDb25uZWN0IFRMUy5cbiAqL1xuUm9sZUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgc2lnbmVyIGNlcnRpZmljYXRlIGF1dGhvcml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5IHtcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGNlcnRpZmljYXRlLlxuICovXG5Bd3NQY2FBdXRob3JpdHlBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgTG9nQ29uZmlnYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tbG9nLWRyaXZlcmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogIEJ5IGRlZmF1bHQsIGNvbnRhaW5lcnMgdXNlIHRoZSBzYW1lIGxvZ2dpbmcgZHJpdmVyIHRoYXQgdGhlIERvY2tlciBkYWVtb24gdXNlcy4gSG93ZXZlciwgdGhlIGNvbnRhaW5lciBtaWdodCB1c2UgYSBkaWZmZXJlbnQgbG9nZ2luZyBkcml2ZXIgdGhhbiB0aGUgRG9ja2VyIGRhZW1vbiBieSBzcGVjaWZ5aW5nIGEgbG9nIGRyaXZlciBjb25maWd1cmF0aW9uIGluIHRoZSBjb250YWluZXIgZGVmaW5pdGlvbi5cbiAqICBVbmRlcnN0YW5kIHRoZSBmb2xsb3dpbmcgd2hlbiBzcGVjaWZ5aW5nIGEgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgY29udGFpbmVycy5cbiAqICAgKyAgQW1hem9uIEVDUyBjdXJyZW50bHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgdGhlIGxvZ2dpbmcgZHJpdmVycyBhdmFpbGFibGUgdG8gdGhlIERvY2tlciBkYWVtb24uIEFkZGl0aW9uYWwgbG9nIGRyaXZlcnMgbWF5IGJlIGF2YWlsYWJsZSBpbiBmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50LlxuICogIEZvciB0YXNrcyBvbiBGQVJHQVRFbG9uZywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIHRhc2tzIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgZmx1ZW50ZGBgLCBgYGdlbGZgYCwgYGBqc29uLWZpbGVgYCwgYGBqb3VybmFsZGBgLGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgICsgIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOCBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS5cbiAqICAgKyAgRm9yIHRhc2tzIHRoYXQgYXJlIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IG11c3QgcmVnaXN0ZXIgdGhlIGF2YWlsYWJsZSBsb2dnaW5nIGRyaXZlcnMgd2l0aCB0aGUgYGBFQ1NfQVZBSUxBQkxFX0xPR0dJTkdfRFJJVkVSU2BgIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZSBjb250YWluZXJzIHBsYWNlZCBvbiB0aGF0IGluc3RhbmNlIGNhbiB1c2UgdGhlc2UgbG9nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgY29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLWFnZW50LWNvbmZpZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBvbiBGQVJHQVRFbG9uZywgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgeW91ciB0YXNrcyBhcmUgaG9zdGVkIG9uLCBhbnkgYWRkaXRpb25hbCBzb2Z0d2FyZSBuZWVkZWQgbXVzdCBiZSBpbnN0YWxsZWQgb3V0c2lkZSBvZiB0aGUgdGFzay4gRm9yIGV4YW1wbGUsIHRoZSBGbHVlbnRkIG91dHB1dCBhZ2dyZWdhdG9ycyBvciBhIHJlbW90ZSBob3N0IHJ1bm5pbmcgTG9nc3Rhc2ggdG8gc2VuZCBHZWxmIGxvZ3MgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzZWNyZXRzIHRvIHBhc3MgdG8gdGhlIGxvZyBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIHNlbnNpdGl2ZSBkYXRhXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuU2VjcmV0T3B0aW9ucz86IFNlY3JldFtdXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VuZCB0byB0aGUgbG9nIGRyaXZlci5cbiAqICBUaGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgZGVwZW5kIG9uIHRoZSBsb2cgZHJpdmVyLiBTb21lIG9mIHRoZSBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSB3aGVuIHlvdSB1c2UgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIgdG8gcm91dGUgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgYXdzbG9ncy1jcmVhdGUtZ3JvdXAgUmVxdWlyZWQ6IE5vIFNwZWNpZnkgd2hldGhlciB5b3Ugd2FudCB0aGUgbG9nIGdyb3VwIHRvIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS4gSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBmYWxzZS4gWW91ciBJQU0gcG9saWN5IG11c3QgaW5jbHVkZSB0aGUgbG9nczpDcmVhdGVMb2dHcm91cCBwZXJtaXNzaW9uIGJlZm9yZSB5b3UgYXR0ZW1wdCB0byB1c2UgYXdzbG9ncy1jcmVhdGUtZ3JvdXAuICsgYXdzbG9ncy1yZWdpb24gUmVxdWlyZWQ6IFllcyBTcGVjaWZ5IHRoZSBSZWdpb24gdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIGlzIHRvIHNlbmQgeW91ciBEb2NrZXIgbG9ncyB0by4gWW91IGNhbiBjaG9vc2UgdG8gc2VuZCBhbGwgb2YgeW91ciBsb2dzIGZyb20gY2x1c3RlcnMgaW4gZGlmZmVyZW50IFJlZ2lvbnMgdG8gYSBzaW5nbGUgcmVnaW9uIGluIENsb3VkV2F0Y2ggTG9ncy4gVGhpcyBpcyBzbyB0aGF0IHRoZXkncmUgYWxsIHZpc2libGUgaW4gb25lIGxvY2F0aW9uLiBPdGhlcndpc2UsIHlvdSBjYW4gc2VwYXJhdGUgdGhlbSBieSBSZWdpb24gZm9yIG1vcmUgZ3JhbnVsYXJpdHkuIE1ha2Ugc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgbG9nIGdyb3VwIGV4aXN0cyBpbiB0aGUgUmVnaW9uIHRoYXQgeW91IHNwZWNpZnkgd2l0aCB0aGlzIG9wdGlvbi4gKyBhd3Nsb2dzLWdyb3VwIFJlcXVpcmVkOiBZZXMgTWFrZSBzdXJlIHRvIHNwZWNpZnkgYSBsb2cgZ3JvdXAgdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIHNlbmRzIGl0cyBsb2cgc3RyZWFtcyB0by4gKyBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggUmVxdWlyZWQ6IFllcywgd2hlbiB1c2luZyBGYXJnYXRlLk9wdGlvbmFsIHdoZW4gdXNpbmcgRUMyLiBVc2UgdGhlIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBvcHRpb24gdG8gYXNzb2NpYXRlIGEgbG9nIHN0cmVhbSB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LCB0aGUgY29udGFpbmVyIG5hbWUsIGFuZCB0aGUgSUQgb2YgdGhlIEFtYXpvbiBFQ1MgdGFzayB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0by4gSWYgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSB0YWtlcyB0aGUgZm9ybWF0IHByZWZpeC1uYW1lL2NvbnRhaW5lci1uYW1lL2Vjcy10YXNrLWlkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLCB0aGVuIHRoZSBsb2cgc3RyZWFtIGlzIG5hbWVkIGFmdGVyIHRoZSBjb250YWluZXIgSUQgdGhhdCdzIGFzc2lnbmVkIGJ5IHRoZSBEb2NrZXIgZGFlbW9uIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UuIEJlY2F1c2UgaXQncyBkaWZmaWN1bHQgdG8gdHJhY2UgbG9ncyBiYWNrIHRvIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0gd2l0aCBqdXN0IHRoZSBEb2NrZXIgY29udGFpbmVyIElEICh3aGljaCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlKSwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbi4gRm9yIEFtYXpvbiBFQ1Mgc2VydmljZXMsIHlvdSBjYW4gdXNlIHRoZSBzZXJ2aWNlIG5hbWUgYXMgdGhlIHByZWZpeC4gRG9pbmcgc28sIHlvdSBjYW4gdHJhY2UgbG9nIHN0cmVhbXMgdG8gdGhlIHNlcnZpY2UgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8sIHRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0sIGFuZCB0aGUgSUQgb2YgdGhlIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIFlvdSBtdXN0IHNwZWNpZnkgYSBzdHJlYW0tcHJlZml4IGZvciB5b3VyIGxvZ3MgdG8gaGF2ZSB5b3VyIGxvZ3MgYXBwZWFyIGluIHRoZSBMb2cgcGFuZSB3aGVuIHVzaW5nIHRoZSBBbWF6b24gRUNTIGNvbnNvbGUuICsgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiBpbiBQeXRob24gc3RyZnRpbWUgZm9ybWF0LiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIE9uZSBleGFtcGxlIG9mIGEgdXNlIGNhc2UgZm9yIHVzaW5nIHRoaXMgZm9ybWF0IGlzIGZvciBwYXJzaW5nIG91dHB1dCBzdWNoIGFzIGEgc3RhY2sgZHVtcCwgd2hpY2ggbWlnaHQgb3RoZXJ3aXNlIGJlIGxvZ2dlZCBpbiBtdWx0aXBsZSBlbnRyaWVzLiBUaGUgY29ycmVjdCBwYXR0ZXJuIGFsbG93cyBpdCB0byBiZSBjYXB0dXJlZCBpbiBhIHNpbmdsZSBlbnRyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiArIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiB0aGF0IHVzZXMgYSByZWd1bGFyIGV4cHJlc3Npb24uIEEgbG9nIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybiBhbmQgYW55IGZvbGxvd2luZyBsaW5lcyB0aGF0IGRvbuKAmXQgbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZSBtYXRjaGVkIGxpbmUgaXMgdGhlIGRlbGltaXRlciBiZXR3ZWVuIGxvZyBtZXNzYWdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuLiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGlzIGFsc28gY29uZmlndXJlZC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiBcbiAqICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXBwbHkgdG8gYWxsIHN1cHBvcnRlZCBsb2cgZHJpdmVycy5cbiAqICAgKyBtb2RlIFJlcXVpcmVkOiBObyBWYWxpZCB2YWx1ZXM6IG5vbi1ibG9ja2luZyB8IGJsb2NraW5nIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIGRlbGl2ZXJ5IG1vZGUgb2YgbG9nIG1lc3NhZ2VzIGZyb20gdGhlIGNvbnRhaW5lciB0byB0aGUgbG9nIGRyaXZlciBzcGVjaWZpZWQgdXNpbmcgbG9nRHJpdmVyLiBUaGUgZGVsaXZlcnkgbW9kZSB5b3UgY2hvb3NlIGFmZmVjdHMgYXBwbGljYXRpb24gYXZhaWxhYmlsaXR5IHdoZW4gdGhlIGZsb3cgb2YgbG9ncyBmcm9tIGNvbnRhaW5lciBpcyBpbnRlcnJ1cHRlZC4gSWYgeW91IHVzZSB0aGUgYmxvY2tpbmcgbW9kZSBhbmQgdGhlIGZsb3cgb2YgbG9ncyBpcyBpbnRlcnJ1cHRlZCwgY2FsbHMgZnJvbSBjb250YWluZXIgY29kZSB0byB3cml0ZSB0byB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyB3aWxsIGJsb2NrLiBUaGUgbG9nZ2luZyB0aHJlYWQgb2YgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmxvY2sgYXMgYSByZXN1bHQuIFRoaXMgbWF5IGNhdXNlIHRoZSBhcHBsaWNhdGlvbiB0byBiZWNvbWUgdW5yZXNwb25zaXZlIGFuZCBsZWFkIHRvIGNvbnRhaW5lciBoZWFsdGhjaGVjayBmYWlsdXJlLiBJZiB5b3UgdXNlIHRoZSBub24tYmxvY2tpbmcgbW9kZSwgdGhlIGNvbnRhaW5lcidzIGxvZ3MgYXJlIGluc3RlYWQgc3RvcmVkIGluIGFuIGluLW1lbW9yeSBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvbmZpZ3VyZWQgd2l0aCB0aGUgbWF4LWJ1ZmZlci1zaXplIG9wdGlvbi4gVGhpcyBwcmV2ZW50cyB0aGUgYXBwbGljYXRpb24gZnJvbSBiZWNvbWluZyB1bnJlc3BvbnNpdmUgd2hlbiBsb2dzIGNhbm5vdCBiZSBzZW50LiBXZSByZWNvbW1lbmQgdXNpbmcgdGhpcyBtb2RlIGlmIHlvdSB3YW50IHRvIGVuc3VyZSBzZXJ2aWNlIGF2YWlsYWJpbGl0eSBhbmQgYXJlIG9rYXkgd2l0aCBzb21lIGxvZyBsb3NzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFByZXZlbnRpbmcgbG9nIGxvc3Mgd2l0aCBub24tYmxvY2tpbmcgbW9kZSBpbiB0aGUgYXdzbG9ncyBjb250YWluZXIgbG9nIGRyaXZlci4gWW91IGNhbiBzZXQgYSBkZWZhdWx0IG1vZGUgZm9yIGFsbCBjb250YWluZXJzIGluIGEgc3BlY2lmaWMgUmVnaW9uIGJ5IHVzaW5nIHRoZSBkZWZhdWx0TG9nRHJpdmVyTW9kZSBhY2NvdW50IHNldHRpbmcuIElmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBtb2RlIG9wdGlvbiBvciBjb25maWd1cmUgdGhlIGFjY291bnQgc2V0dGluZywgQW1hem9uIEVDUyB3aWxsIGRlZmF1bHQgdG8gdGhlIG5vbi1ibG9ja2luZyBtb2RlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWNjb3VudCBzZXR0aW5nLCBzZWUgRGVmYXVsdCBsb2cgZHJpdmVyIG1vZGUgaW4gdGhlIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZS4gT24gSnVuZSAyNSwgMjAyNSwgQW1hem9uIEVDUyBjaGFuZ2VkIHRoZSBkZWZhdWx0IGxvZyBkcml2ZXIgbW9kZSBmcm9tIGJsb2NraW5nIHRvIG5vbi1ibG9ja2luZyB0byBwcmlvcml0aXplIHRhc2sgYXZhaWxhYmlsaXR5IG92ZXIgbG9nZ2luZy4gVG8gY29udGludWUgdXNpbmcgdGhlIGJsb2NraW5nIG1vZGUgYWZ0ZXIgdGhpcyBjaGFuZ2UsIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBTZXQgdGhlIG1vZGUgb3B0aW9uIGluIHlvdXIgY29udGFpbmVyIGRlZmluaXRpb24ncyBsb2dDb25maWd1cmF0aW9uIGFzIGJsb2NraW5nLiBTZXQgdGhlIGRlZmF1bHRMb2dEcml2ZXJNb2RlIGFjY291bnQgc2V0dGluZyB0byBibG9ja2luZy4gKyBtYXgtYnVmZmVyLXNpemUgUmVxdWlyZWQ6IE5vIERlZmF1bHQgdmFsdWU6IDEwbSBXaGVuIG5vbi1ibG9ja2luZyBtb2RlIGlzIHVzZWQsIHRoZSBtYXgtYnVmZmVyLXNpemUgbG9nIG9wdGlvbiBjb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRoYXQncyB1c2VkIGZvciBpbnRlcm1lZGlhdGUgbWVzc2FnZSBzdG9yYWdlLiBNYWtlIHN1cmUgdG8gc3BlY2lmeSBhbiBhZGVxdWF0ZSBidWZmZXIgc2l6ZSBiYXNlZCBvbiB5b3VyIGFwcGxpY2F0aW9uLiBXaGVuIHRoZSBidWZmZXIgZmlsbHMgdXAsIGZ1cnRoZXIgbG9ncyBjYW5ub3QgYmUgc3RvcmVkLiBMb2dzIHRoYXQgY2Fubm90IGJlIHN0b3JlZCBhcmUgbG9zdC4gXG4gKiAgVG8gcm91dGUgbG9ncyB1c2luZyB0aGUgYGBzcGx1bmtgYCBsb2cgcm91dGVyLCB5b3UgbmVlZCB0byBzcGVjaWZ5IGEgYGBzcGx1bmstdG9rZW5gYCBhbmQgYSBgYHNwbHVuay11cmxgYC5cbiAqICBXaGVuIHlvdSB1c2UgdGhlIGBgYXdzZmlyZWxlbnNgYCBsb2cgcm91dGVyIHRvIHJvdXRlIGxvZ3MgdG8gYW4gQVdTIFNlcnZpY2Ugb3IgQVdTIFBhcnRuZXIgTmV0d29yayBkZXN0aW5hdGlvbiBmb3IgbG9nIHN0b3JhZ2UgYW5kIGFuYWx5dGljcywgeW91IGNhbiBzZXQgdGhlIGBgbG9nLWRyaXZlci1idWZmZXItbGltaXRgYCBvcHRpb24gdG8gbGltaXQgdGhlIG51bWJlciBvZiBldmVudHMgdGhhdCBhcmUgYnVmZmVyZWQgaW4gbWVtb3J5LCBiZWZvcmUgYmVpbmcgc2VudCB0byB0aGUgbG9nIHJvdXRlciBjb250YWluZXIuIEl0IGNhbiBoZWxwIHRvIHJlc29sdmUgcG90ZW50aWFsIGxvZyBsb3NzIGlzc3VlIGJlY2F1c2UgaGlnaCB0aHJvdWdocHV0IG1pZ2h0IHJlc3VsdCBpbiBtZW1vcnkgcnVubmluZyBvdXQgZm9yIHRoZSBidWZmZXIgaW5zaWRlIG9mIERvY2tlci5cbiAqICBPdGhlciBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSB3aGVuIHVzaW5nIGBgYXdzZmlyZWxlbnNgYCB0byByb3V0ZSBsb2dzIGRlcGVuZCBvbiB0aGUgZGVzdGluYXRpb24uIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBEYXRhIEZpcmVob3NlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIEFXUyBSZWdpb24gd2l0aCBgYHJlZ2lvbmBgIGFuZCBhIG5hbWUgZm9yIHRoZSBsb2cgc3RyZWFtIHdpdGggYGBkZWxpdmVyeV9zdHJlYW1gYC5cbiAqICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gS2luZXNpcyBEYXRhIFN0cmVhbXMsIHlvdSBjYW4gc3BlY2lmeSBhbiBBV1MgUmVnaW9uIHdpdGggYGByZWdpb25gYCBhbmQgYSBkYXRhIHN0cmVhbSBuYW1lIHdpdGggYGBzdHJlYW1gYC5cbiAqICAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIE9wZW5TZWFyY2ggU2VydmljZSwgeW91IGNhbiBzcGVjaWZ5IG9wdGlvbnMgbGlrZSBgYE5hbWVgYCwgYGBIb3N0YGAgKE9wZW5TZWFyY2ggU2VydmljZSBlbmRwb2ludCB3aXRob3V0IHByb3RvY29sKSwgYGBQb3J0YGAsIGBgSW5kZXhgYCwgYGBUeXBlYGAsIGBgQXdzX2F1dGhgYCwgYGBBd3NfcmVnaW9uYGAsIGBgU3VwcHJlc3NfVHlwZV9OYW1lYGAsIGFuZCBgYHRsc2BgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbmRlciB0aGUgaG9vZDogRmlyZUxlbnMgZm9yIEFtYXpvbiBFQ1MgVGFza3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb250YWluZXJzL3VuZGVyLXRoZS1ob29kLWZpcmVsZW5zLWZvci1hbWF6b24tZWNzLXRhc2tzLykuXG4gKiAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIFMzLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGJ1Y2tldCB1c2luZyB0aGUgYGBidWNrZXRgYCBvcHRpb24uIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGBgcmVnaW9uYGAsIGBgdG90YWxfZmlsZV9zaXplYGAsIGBgdXBsb2FkX3RpbWVvdXRgYCwgYW5kIGBgdXNlX3B1dF9vYmplY3RgYCBhcyBvcHRpb25zLlxuICogIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOSBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS4gVG8gY2hlY2sgdGhlIERvY2tlciBSZW1vdGUgQVBJIHZlcnNpb24gb24geW91ciBjb250YWluZXIgaW5zdGFuY2UsIGxvZyBpbiB0byB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogYGBzdWRvIGRvY2tlciB2ZXJzaW9uIC0tZm9ybWF0ICd7ey5TZXJ2ZXIuQVBJVmVyc2lvbn19J2BgXG4gKi9cbk9wdGlvbnM/OiB7XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi57MSx9XCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyBkcml2ZXIgdG8gdXNlIGZvciB0aGUgY29udGFpbmVyLlxuICogIEZvciB0YXNrcyBvbiBGQVJHQVRFbG9uZywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIHRhc2tzIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgZmx1ZW50ZGBgLCBgYGdlbGZgYCwgYGBqc29uLWZpbGVgYCwgYGBqb3VybmFsZGBgLCBgYHN5c2xvZ2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIHRoZSBgYGF3c2xvZ3NgYCBsb2cgZHJpdmVyLCBzZWUgW1NlbmQgQW1hem9uIEVDUyBsb2dzIHRvIENsb3VkV2F0Y2hdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nX2F3c2xvZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIGRyaXZlciwgc2VlIFtTZW5kIEFtYXpvbiBFQ1MgbG9ncyB0byBhbiBzZXJ2aWNlIG9yIFBhcnRuZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nX2ZpcmVsZW5zLmh0bWwpLlxuICogICBJZiB5b3UgaGF2ZSBhIGN1c3RvbSBkcml2ZXIgdGhhdCBpc24ndCBsaXN0ZWQsIHlvdSBjYW4gZm9yayB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgcHJvamVjdCB0aGF0J3MgW2F2YWlsYWJsZSBvbiBHaXRIdWJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2dpdGh1Yi5jb20vYXdzL2FtYXpvbi1lY3MtYWdlbnQpIGFuZCBjdXN0b21pemUgaXQgdG8gd29yayB3aXRoIHRoYXQgZHJpdmVyLiBXZSBlbmNvdXJhZ2UgeW91IHRvIHN1Ym1pdCBwdWxsIHJlcXVlc3RzIGZvciBjaGFuZ2VzIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gaGF2ZSBpbmNsdWRlZC4gSG93ZXZlciwgd2UgZG9uJ3QgY3VycmVudGx5IHByb3ZpZGUgc3VwcG9ydCBmb3IgcnVubmluZyBtb2RpZmllZCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS5cbiAqL1xuTG9nRHJpdmVyPzogc3RyaW5nXG59XG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlY3JldCB0byBleHBvc2UgdG8geW91ciBjb250YWluZXIuIFNlY3JldHMgY2FuIGJlIGV4cG9zZWQgdG8gYSBjb250YWluZXIgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICogICArICBUbyBpbmplY3Qgc2Vuc2l0aXZlIGRhdGEgaW50byB5b3VyIGNvbnRhaW5lcnMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCB1c2UgdGhlIGBgc2VjcmV0c2BgIGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlci5cbiAqICAgKyAgVG8gcmVmZXJlbmNlIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBpbiB0aGUgbG9nIGNvbmZpZ3VyYXRpb24gb2YgYSBjb250YWluZXIsIHVzZSB0aGUgYGBzZWNyZXRPcHRpb25zYGAgY29udGFpbmVyIGRlZmluaXRpb24gcGFyYW1ldGVyLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIHNlbnNpdGl2ZSBkYXRhXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXQge1xuLyoqXG4gKiBUaGUgc2VjcmV0IHRvIGV4cG9zZSB0byB0aGUgY29udGFpbmVyLiBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmUgZWl0aGVyIHRoZSBmdWxsIEFSTiBvZiB0aGUgQVNNbG9uZyBzZWNyZXQgb3IgdGhlIGZ1bGwgQVJOIG9mIHRoZSBwYXJhbWV0ZXIgaW4gdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUuXG4gKiAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1aXJlIElBTWxvbmcgcGVybWlzc2lvbnMsIHNlZSBbUmVxdWlyZWQgSUFNIHBlcm1pc3Npb25zIGZvciBBbWF6b24gRUNTIHNlY3JldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEtc2VjcmV0cy5odG1sI3NlY3JldHMtaWFtKSAoZm9yIFNlY3JldHMgTWFuYWdlcikgb3IgW1JlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIEVDUyBzZWNyZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLXBhcmFtZXRlcnMuaHRtbCkgKGZvciBTeXN0ZW1zIE1hbmFnZXIgUGFyYW1ldGVyIHN0b3JlKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHRoZSBTU00gUGFyYW1ldGVyIFN0b3JlIHBhcmFtZXRlciBleGlzdHMgaW4gdGhlIHNhbWUgUmVnaW9uIGFzIHRoZSB0YXNrIHlvdSdyZSBsYXVuY2hpbmcsIHRoZW4geW91IGNhbiB1c2UgZWl0aGVyIHRoZSBmdWxsIEFSTiBvciBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuIElmIHRoZSBwYXJhbWV0ZXIgZXhpc3RzIGluIGEgZGlmZmVyZW50IFJlZ2lvbiwgdGhlbiB0aGUgZnVsbCBBUk4gbXVzdCBiZSBzcGVjaWZpZWQuXG4gKi9cblZhbHVlRnJvbTogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQuXG4gKi9cbk5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiBmb3IgeW91ciBzZXJ2aWNlIHRoYXQgaG9sZHMgdGhlIGluZm9ybWF0aW9uIGZvciB0aGUgdGFyZ2V0IGdyb3VwKHMpIEFtYXpvbiBFQ1MgdGFza3Mgd2lsbCBiZSByZWdpc3RlcmVkIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0xhdHRpY2VDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHRhcmdldCBncm91cCBvciBncm91cHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uIHRoYXQgdGhlIEFtYXpvbiBFQ1MgdGFza3Mgd2lsbCBiZSByZWdpc3RlcmVkIHRvLlxuICovXG5UYXJnZXRHcm91cEFybjogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBwb3J0IG1hcHBpbmcgdG8gcmVnaXN0ZXIgaW4gdGhlIFZQQyBMYXR0aWNlIHRhcmdldCBncm91cC4gVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYGBwb3J0TWFwcGluZ2BgIHlvdSBkZWZpbmVkIGluIHlvdXIgdGFzayBkZWZpbml0aW9uLlxuICovXG5Qb3J0TmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIElBTSByb2xlIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbi4gVGhpcyBpcyB0aGUgQW1hem9uIEVDU+KAqCBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gbWFuYWdlIHlvdXIgVlBDIExhdHRpY2UgaW5mcmFzdHJ1Y3R1cmUuXG4gKi9cblJvbGVBcm46IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjb250cm9sbGVyIHRvIHVzZSBmb3IgdGhlIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbnRyb2xsZXIge1xuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGUgdG8gdXNlLlxuICogIFRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgaXMgdGhlIG1lY2hhbmlzbSB0aGF0IGRldGVybWluZXMgaG93IHRhc2tzIGFyZSBkZXBsb3llZCBmb3IgeW91ciBzZXJ2aWNlLiBUaGUgdmFsaWQgb3B0aW9ucyBhcmU6XG4gKiAgICsgIEVDU1xuICogIFdoZW4geW91IGNyZWF0ZSBhIHNlcnZpY2Ugd2hpY2ggdXNlcyB0aGUgYGBFQ1NgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSBjYW4gY2hvb3NlIGJldHdlZW4gdGhlIGZvbGxvd2luZyBkZXBsb3ltZW50IHN0cmF0ZWdpZXM6XG4gKiAgICsgIGBgUk9MTElOR2BgOiBXaGVuIHlvdSBjcmVhdGUgYSBzZXJ2aWNlIHdoaWNoIHVzZXMgdGhlICpyb2xsaW5nIHVwZGF0ZSogKGBgUk9MTElOR2BgKSBkZXBsb3ltZW50IHN0cmF0ZWd5LCB0aGUgRUNTIHNlcnZpY2Ugc2NoZWR1bGVyIHJlcGxhY2VzIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrcyB3aXRoIG5ldyB0YXNrcy4gVGhlIG51bWJlciBvZiB0YXNrcyB0aGF0IEVDUyBhZGRzIG9yIHJlbW92ZXMgZnJvbSB0aGUgc2VydmljZSBkdXJpbmcgYSByb2xsaW5nIHVwZGF0ZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZXJ2aWNlIGRlcGxveW1lbnQgY29uZmlndXJhdGlvbi4gXG4gKiAgUm9sbGluZyB1cGRhdGUgZGVwbG95bWVudHMgYXJlIGJlc3Qgc3VpdGVkIGZvciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvczpcbiAqICAgKyAgR3JhZHVhbCBzZXJ2aWNlIHVwZGF0ZXM6IFlvdSBuZWVkIHRvIHVwZGF0ZSB5b3VyIHNlcnZpY2UgaW5jcmVtZW50YWxseSB3aXRob3V0IHRha2luZyB0aGUgZW50aXJlIHNlcnZpY2Ugb2ZmbGluZSBhdCBvbmNlLlxuICogICArICBMaW1pdGVkIHJlc291cmNlIHJlcXVpcmVtZW50czogWW91IHdhbnQgdG8gYXZvaWQgdGhlIGFkZGl0aW9uYWwgcmVzb3VyY2UgY29zdHMgb2YgcnVubmluZyB0d28gY29tcGxldGUgZW52aXJvbm1lbnRzIHNpbXVsdGFuZW91c2x5IChhcyByZXF1aXJlZCBieSBibHVlL2dyZWVuIGRlcGxveW1lbnRzKS5cbiAqICAgKyAgQWNjZXB0YWJsZSBkZXBsb3ltZW50IHRpbWU6IFlvdXIgYXBwbGljYXRpb24gY2FuIHRvbGVyYXRlIGEgbG9uZ2VyIGRlcGxveW1lbnQgcHJvY2VzcywgYXMgcm9sbGluZyB1cGRhdGVzIHJlcGxhY2UgdGFza3Mgb25lIGJ5IG9uZS5cbiAqICAgKyAgTm8gbmVlZCBmb3IgaW5zdGFudCByb2xsIGJhY2s6IFlvdXIgc2VydmljZSBjYW4gdG9sZXJhdGUgYSByb2xsYmFjayBwcm9jZXNzIHRoYXQgdGFrZXMgbWludXRlcyByYXRoZXIgdGhhbiBzZWNvbmRzLlxuICogICArICBTaW1wbGUgZGVwbG95bWVudCBwcm9jZXNzOiBZb3UgcHJlZmVyIGEgc3RyYWlnaHRmb3J3YXJkIGRlcGxveW1lbnQgYXBwcm9hY2ggd2l0aG91dCB0aGUgY29tcGxleGl0eSBvZiBtYW5hZ2luZyBtdWx0aXBsZSBlbnZpcm9ubWVudHMsIHRhcmdldCBncm91cHMsIGFuZCBsaXN0ZW5lcnMuXG4gKiAgICsgIE5vIGxvYWQgYmFsYW5jZXIgcmVxdWlyZW1lbnQ6IFlvdXIgc2VydmljZSBkb2Vzbid0IHVzZSBvciByZXF1aXJlIGEgbG9hZCBiYWxhbmNlciwgQUxCLCBOTEIsIG9yIFNlcnZpY2UgQ29ubmVjdCAod2hpY2ggYXJlIHJlcXVpcmVkIGZvciBibHVlL2dyZWVuIGRlcGxveW1lbnRzKS5cbiAqICAgKyAgU3RhdGVmdWwgYXBwbGljYXRpb25zOiBZb3VyIGFwcGxpY2F0aW9uIG1haW50YWlucyBzdGF0ZSB0aGF0IG1ha2VzIGl0IGRpZmZpY3VsdCB0byBydW4gdHdvIHBhcmFsbGVsIGVudmlyb25tZW50cy5cbiAqICAgKyAgQ29zdCBzZW5zaXRpdml0eTogWW91IHdhbnQgdG8gbWluaW1pemUgZGVwbG95bWVudCBjb3N0cyBieSBub3QgcnVubmluZyBkdXBsaWNhdGUgZW52aXJvbm1lbnRzIGR1cmluZyBkZXBsb3ltZW50LlxuICogICBcbiAqICBSb2xsaW5nIHVwZGF0ZXMgYXJlIHRoZSBkZWZhdWx0IGRlcGxveW1lbnQgc3RyYXRlZ3kgZm9yIHNlcnZpY2VzIGFuZCBwcm92aWRlIGEgYmFsYW5jZSBiZXR3ZWVuIGRlcGxveW1lbnQgc2FmZXR5IGFuZCByZXNvdXJjZSBlZmZpY2llbmN5IGZvciBtYW55IGNvbW1vbiBhcHBsaWNhdGlvbiBzY2VuYXJpb3MuXG4gKiAgICsgIGBgQkxVRV9HUkVFTmBgOiBBICpibHVlL2dyZWVuKiBkZXBsb3ltZW50IHN0cmF0ZWd5IChgYEJMVUVfR1JFRU5gYCkgaXMgYSByZWxlYXNlIG1ldGhvZG9sb2d5IHRoYXQgcmVkdWNlcyBkb3dudGltZSBhbmQgcmlzayBieSBydW5uaW5nIHR3byBpZGVudGljYWwgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgY2FsbGVkIGJsdWUgYW5kIGdyZWVuLiBXaXRoIEVDUyBibHVlL2dyZWVuIGRlcGxveW1lbnRzLCB5b3UgY2FuIHZhbGlkYXRlIG5ldyBzZXJ2aWNlIHJldmlzaW9ucyBiZWZvcmUgZGlyZWN0aW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byB0aGVtLiBUaGlzIGFwcHJvYWNoIHByb3ZpZGVzIGEgc2FmZXIgd2F5IHRvIGRlcGxveSBjaGFuZ2VzIHdpdGggdGhlIGFiaWxpdHkgdG8gcXVpY2tseSByb2xsIGJhY2sgaWYgbmVlZGVkLlxuICogIEVDUyBibHVlL2dyZWVuIGRlcGxveW1lbnRzIGFyZSBiZXN0IHN1aXRlZCBmb3IgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4gKiAgICsgIFNlcnZpY2UgdmFsaWRhdGlvbjogV2hlbiB5b3UgbmVlZCB0byB2YWxpZGF0ZSBuZXcgc2VydmljZSByZXZpc2lvbnMgYmVmb3JlIGRpcmVjdGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gdGhlbVxuICogICArICBaZXJvIGRvd250aW1lOiBXaGVuIHlvdXIgc2VydmljZSByZXF1aXJlcyB6ZXJvLWRvd250aW1lIGRlcGxveW1lbnRzXG4gKiAgICsgIEluc3RhbnQgcm9sbCBiYWNrOiBXaGVuIHlvdSBuZWVkIHRoZSBhYmlsaXR5IHRvIHF1aWNrbHkgcm9sbCBiYWNrIGlmIGlzc3VlcyBhcmUgZGV0ZWN0ZWRcbiAqICAgKyAgTG9hZCBiYWxhbmNlciByZXF1aXJlbWVudDogV2hlbiB5b3VyIHNlcnZpY2UgdXNlcyBBTEIsIE5MQiwgb3IgU2VydmljZSBDb25uZWN0XG4gKiAgIFxuICogICBcbiAqICAgKyAgRXh0ZXJuYWxcbiAqICBVc2UgYSB0aGlyZC1wYXJ0eSBkZXBsb3ltZW50IGNvbnRyb2xsZXIuXG4gKiAgICsgIEJsdWUvZ3JlZW4gZGVwbG95bWVudCAocG93ZXJlZCBieSBBQ0QpXG4gKiAgQUNEIGluc3RhbGxzIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgYXBwbGljYXRpb24gYXMgYSBuZXcgcmVwbGFjZW1lbnQgdGFzayBzZXQgYW5kIHJlcm91dGVzIHByb2R1Y3Rpb24gdHJhZmZpYyBmcm9tIHRoZSBvcmlnaW5hbCBhcHBsaWNhdGlvbiB0YXNrIHNldCB0byB0aGUgcmVwbGFjZW1lbnQgdGFzayBzZXQuIFRoZSBvcmlnaW5hbCB0YXNrIHNldCBpcyB0ZXJtaW5hdGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkZXBsb3ltZW50LiBVc2UgdGhpcyBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdG8gdmVyaWZ5IGEgbmV3IGRlcGxveW1lbnQgb2YgYSBzZXJ2aWNlIGJlZm9yZSBzZW5kaW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byBpdC5cbiAqICAgXG4gKiAgV2hlbiB1cGRhdGluZyB0aGUgZGVwbG95bWVudCBjb250cm9sbGVyIGZvciBhIHNlcnZpY2UsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIG1pZ3JhdGlvbiB5b3UncmUgcGVyZm9ybWluZy5cbiAqICAgKyAgSWYgeW91IGhhdmUgYSB0ZW1wbGF0ZSB0aGF0IGNvbnRhaW5zIHRoZSBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCBjb250cm9sbGVyIGluZm9ybWF0aW9uIGFzIHdlbGwgYXMgYGBUYXNrU2V0YGAgYW5kIGBgUHJpbWFyeVRhc2tTZXRgYCByZXNvdXJjZXMsIGFuZCB5b3UgcmVtb3ZlIHRoZSB0YXNrIHNldCByZXNvdXJjZXMgZnJvbSB0aGUgdGVtcGxhdGUgd2hlbiB1cGRhdGluZyBmcm9tIGBgRVhURVJOQUxgYCB0byBgYEVDU2BgLCB0aGUgYGBEZXNjcmliZVRhc2tTZXRgYCBhbmQgYGBEZWxldGVUYXNrU2V0YGAgQVBJIGNhbGxzIHdpbGwgcmV0dXJuIGEgNDAwIGVycm9yIGFmdGVyIHRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgaXMgdXBkYXRlZCB0byBgYEVDU2BgLiBUaGlzIHJlc3VsdHMgaW4gYSBkZWxldGUgZmFpbHVyZSBvbiB0aGUgdGFzayBzZXQgcmVzb3VyY2VzLCBldmVuIHRob3VnaCB0aGUgc3RhY2sgdHJhbnNpdGlvbnMgdG8gYGBVUERBVEVfQ09NUExFVEVgYCBzdGF0dXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Jlc291cmNlIHJlbW92ZWQgZnJvbSBzdGFjayBidXQgbm90IGRlbGV0ZWRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3Ryb3VibGVzaG9vdGluZy5odG1sI3Ryb3VibGVzaG9vdGluZy1lcnJvcnMtcmVzb3VyY2UtcmVtb3ZlZC1ub3QtZGVsZXRlZCkgaW4gdGhlIENGTmxvbmcgVXNlciBHdWlkZS4gVG8gZml4IHRoaXMgaXNzdWUsIGRlbGV0ZSB0aGUgdGFzayBzZXRzIGRpcmVjdGx5IHVzaW5nIHRoZSBFQ1NgYERlbGV0ZVRhc2tTZXRgYCBBUEkuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBkZWxldGUgYSB0YXNrIHNldCwgc2VlIFtEZWxldGVUYXNrU2V0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RlbGV0ZVRhc2tTZXQuaHRtbCkgaW4gdGhlIEVDU2xvbmcgQVBJIFJlZmVyZW5jZS5cbiAqICAgKyAgSWYgeW91J3JlIG1pZ3JhdGluZyBmcm9tIGBgQ09ERV9ERVBMT1lgYCB0byBgYEVDU2BgIHdpdGggYSBuZXcgdGFzayBkZWZpbml0aW9uIGFuZCBDRk4gcGVyZm9ybXMgYSByb2xsYmFjayBvcGVyYXRpb24sIHRoZSBFQ1NgYFVwZGF0ZVNlcnZpY2VgYCByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIGZvbGxvd2luZyBlcnJvcjpcbiAqICBSZXNvdXJjZSBoYW5kbGVyIHJldHVybmVkIG1lc3NhZ2U6IFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBVbmFibGUgdG8gdXBkYXRlIHRhc2sgZGVmaW5pdGlvbiBvbiBzZXJ2aWNlcyB3aXRoIGEgQ09ERV9ERVBMT1kgZGVwbG95bWVudCBjb250cm9sbGVyLiBcbiAqICAgKyAgQWZ0ZXIgYSBzdWNjZXNzZnVsIG1pZ3JhdGlvbiBmcm9tIGBgRUNTYGAgdG8gYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciwgeW91IG5lZWQgdG8gbWFudWFsbHkgcmVtb3ZlIHRoZSBgYEFDVElWRWBgIHRhc2sgc2V0LCBiZWNhdXNlIEVDUyBubyBsb25nZXIgbWFuYWdlcyB0aGUgZGVwbG95bWVudC4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBkZWxldGUgYSB0YXNrIHNldCwgc2VlIFtEZWxldGVUYXNrU2V0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RlbGV0ZVRhc2tTZXQuaHRtbCkgaW4gdGhlIEVDU2xvbmcgQVBJIFJlZmVyZW5jZS5cbiAqL1xuVHlwZT86IChcIkNPREVfREVQTE9ZXCIgfCBcIkVDU1wiIHwgXCJFWFRFUk5BTFwiKVxufVxuLyoqXG4gKiBPcHRpb25hbCBkZXBsb3ltZW50IHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIGhvdyBtYW55IHRhc2tzIHJ1biBkdXJpbmcgdGhlIGRlcGxveW1lbnQgYW5kIHRoZSBvcmRlcmluZyBvZiBzdG9wcGluZyBhbmQgc3RhcnRpbmcgdGFza3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgZHVyYXRpb24gd2hlbiBib3RoIGJsdWUgYW5kIGdyZWVuIHNlcnZpY2UgcmV2aXNpb25zIGFyZSBydW5uaW5nIHNpbXVsdGFuZW91c2x5IGFmdGVyIHRoZSBwcm9kdWN0aW9uIHRyYWZmaWMgaGFzIHNoaWZ0ZWQuXG4gKiAgVGhlIGZvbGxvd2luZyBydWxlcyBhcHBseSB3aGVuIHlvdSBkb24ndCBzcGVjaWZ5IGEgdmFsdWU6XG4gKiAgICsgIEZvciByb2xsaW5nIGRlcGxveW1lbnRzLCB0aGUgdmFsdWUgaXMgc2V0IHRvIDMgaG91cnMgKDE4MCBtaW51dGVzKS5cbiAqICAgKyAgV2hlbiB5b3UgdXNlIGFuIGV4dGVybmFsIGRlcGxveW1lbnQgY29udHJvbGxlciAoYGBFWFRFUk5BTGBgKSwgb3IgdGhlIEFDRCBibHVlL2dyZWVuIGRlcGxveW1lbnQgY29udHJvbGxlciAoYGBDT0RFX0RFUExPWWBgKSwgdGhlIHZhbHVlIGlzIHNldCB0byAzIGhvdXJzICgxODAgbWludXRlcykuXG4gKiAgICsgIEZvciBhbGwgb3RoZXIgY2FzZXMsIHRoZSB2YWx1ZSBpcyBzZXQgdG8gMzYgaG91cnMgKDIxNjAgbWludXRlcykuXG4gKi9cbkJha2VUaW1lSW5NaW51dGVzPzogbnVtYmVyXG4vKipcbiAqIEFuIGFycmF5IG9mIGRlcGxveW1lbnQgbGlmZWN5Y2xlIGhvb2sgb2JqZWN0cyB0byBydW4gY3VzdG9tIGxvZ2ljIGF0IHNwZWNpZmljIHN0YWdlcyBvZiB0aGUgZGVwbG95bWVudCBsaWZlY3ljbGUuXG4gKi9cbkxpZmVjeWNsZUhvb2tzPzogRGVwbG95bWVudExpZmVjeWNsZUhvb2tbXVxuQWxhcm1zPzogRGVwbG95bWVudEFsYXJtc1xuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBzdHJhdGVneSBmb3IgdGhlIHNlcnZpY2UuIENob29zZSBmcm9tIHRoZXNlIHZhbGlkIHZhbHVlczpcbiAqICAgKyAgYGBST0xMSU5HYGAgLSBXaGVuIHlvdSBjcmVhdGUgYSBzZXJ2aWNlIHdoaWNoIHVzZXMgdGhlIHJvbGxpbmcgdXBkYXRlIChgYFJPTExJTkdgYCkgZGVwbG95bWVudCBzdHJhdGVneSwgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgcmVwbGFjZXMgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2tzIHdpdGggbmV3IHRhc2tzLiBUaGUgbnVtYmVyIG9mIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBhZGRzIG9yIHJlbW92ZXMgZnJvbSB0aGUgc2VydmljZSBkdXJpbmcgYSByb2xsaW5nIHVwZGF0ZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZXJ2aWNlIGRlcGxveW1lbnQgY29uZmlndXJhdGlvbi5cbiAqICAgKyAgYGBCTFVFX0dSRUVOYGAgLSBBIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBzdHJhdGVneSAoYGBCTFVFX0dSRUVOYGApIGlzIGEgcmVsZWFzZSBtZXRob2RvbG9neSB0aGF0IHJlZHVjZXMgZG93bnRpbWUgYW5kIHJpc2sgYnkgcnVubmluZyB0d28gaWRlbnRpY2FsIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIGNhbGxlZCBibHVlIGFuZCBncmVlbi4gV2l0aCBBbWF6b24gRUNTIGJsdWUvZ3JlZW4gZGVwbG95bWVudHMsIHlvdSBjYW4gdmFsaWRhdGUgbmV3IHNlcnZpY2UgcmV2aXNpb25zIGJlZm9yZSBkaXJlY3RpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIHRoZW0uIFRoaXMgYXBwcm9hY2ggcHJvdmlkZXMgYSBzYWZlciB3YXkgdG8gZGVwbG95IGNoYW5nZXMgd2l0aCB0aGUgYWJpbGl0eSB0byBxdWlja2x5IHJvbGwgYmFjayBpZiBuZWVkZWQuXG4gKi9cblN0cmF0ZWd5PzogKFwiUk9MTElOR1wiIHwgXCJCTFVFX0dSRUVOXCIpXG5EZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXI/OiBEZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXJcbi8qKlxuICogSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLCB0aGUgYGBtYXhpbXVtUGVyY2VudGBgIHBhcmFtZXRlciByZXByZXNlbnRzIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBhcmUgYWxsb3dlZCBpbiB0aGUgYGBSVU5OSU5HYGAgb3IgYGBQRU5ESU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikuIFRoaXMgcGFyYW1ldGVyIGVuYWJsZXMgeW91IHRvIGRlZmluZSB0aGUgZGVwbG95bWVudCBiYXRjaCBzaXplLiBGb3IgZXhhbXBsZSwgaWYgeW91ciBzZXJ2aWNlIGlzIHVzaW5nIHRoZSBgYFJFUExJQ0FgYCBzZXJ2aWNlIHNjaGVkdWxlciBhbmQgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBvZiAyMDAlLCB0aGUgc2NoZWR1bGVyIG1heSBzdGFydCBmb3VyIG5ldyB0YXNrcyBiZWZvcmUgc3RvcHBpbmcgdGhlIGZvdXIgb2xkZXIgdGFza3MgKHByb3ZpZGVkIHRoYXQgdGhlIGNsdXN0ZXIgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIGRvIHRoaXMgYXJlIGF2YWlsYWJsZSkuIFRoZSBkZWZhdWx0IGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHVzaW5nIHRoZSBgYFJFUExJQ0FgYCBzZXJ2aWNlIHNjaGVkdWxlciBpcyAyMDAlLlxuICogIFRoZSBBbWF6b24gRUNTIHNjaGVkdWxlciB1c2VzIHRoaXMgcGFyYW1ldGVyIHRvIHJlcGxhY2UgdW5oZWFsdGh5IHRhc2tzIGJ5IHN0YXJ0aW5nIHJlcGxhY2VtZW50IHRhc2tzIGZpcnN0IGFuZCB0aGVuIHN0b3BwaW5nIHRoZSB1bmhlYWx0aHkgdGFza3MsIGFzIGxvbmcgYXMgY2x1c3RlciByZXNvdXJjZXMgZm9yIHN0YXJ0aW5nIHJlcGxhY2VtZW50IHRhc2tzIGFyZSBhdmFpbGFibGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgc2NoZWR1bGVyIHJlcGxhY2VzIHVuaGVhbHRoeSB0YXNrcywgc2VlIFtBbWF6b24gRUNTIHNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcywgYW5kIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdGhhdCB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaGFzIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUuXG4gKiAgIElmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzLCBhbmQgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1heGltdW0gcGVyY2VudCB2YWx1ZSBpcyBub3QgdXNlZC4gVGhlIHZhbHVlIGlzIHN0aWxsIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1heGltdW1QZXJjZW50PzogbnVtYmVyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgcmVwcmVzZW50cyBhIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBtdXN0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZXBsb3kgd2l0aG91dCB1c2luZyBhZGRpdGlvbmFsIGNsdXN0ZXIgY2FwYWNpdHkuIEZvciBleGFtcGxlLCBpZiB5b3VyIHNlcnZpY2UgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgb2YgNTAlLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgbWF5IHN0b3AgdHdvIGV4aXN0aW5nIHRhc2tzIHRvIGZyZWUgdXAgY2x1c3RlciBjYXBhY2l0eSBiZWZvcmUgc3RhcnRpbmcgdHdvIG5ldyB0YXNrcy4gXG4gKiAgIElmIGFueSB0YXNrcyBhcmUgdW5oZWFsdGh5IGFuZCBpZiBgYG1heGltdW1QZXJjZW50YGAgZG9lc24ndCBhbGxvdyB0aGUgQW1hem9uIEVDUyBzY2hlZHVsZXIgdG8gc3RhcnQgcmVwbGFjZW1lbnQgdGFza3MsIHRoZSBzY2hlZHVsZXIgc3RvcHMgdGhlIHVuaGVhbHRoeSB0YXNrcyBvbmUtYnktb25lIOKAlCB1c2luZyB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBhcyBhIGNvbnN0cmFpbnQg4oCUIHRvIGNsZWFyIHVwIGNhcGFjaXR5IHRvIGxhdW5jaCByZXBsYWNlbWVudCB0YXNrcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBzY2hlZHVsZXIgcmVwbGFjZXMgdW5oZWFsdGh5IHRhc2tzLCBzZWUgW0FtYXpvbiBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKSAuIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyBub3QqIHVzZSBhIGxvYWQgYmFsYW5jZXIsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIG5vdGVkOlxuICogICArICBBIHNlcnZpY2UgaXMgY29uc2lkZXJlZCBoZWFsdGh5IGlmIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHBhc3MgdGhlaXIgaGVhbHRoIGNoZWNrcy5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIDQwIHNlY29uZHMgYWZ0ZXIgYSB0YXNrIHJlYWNoZXMgYSBgYFJVTk5JTkdgYCBzdGF0ZSBiZWZvcmUgdGhlIHRhc2sgaXMgY291bnRlZCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBvbmUgb3IgbW9yZSBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIGl0IHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLiBBIHRhc2sgaXMgY29uc2lkZXJlZCBoZWFsdGh5IHdoZW4gYWxsIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGhpbiB0aGUgdGFzayBoYXZlIHBhc3NlZCB0aGVpciBoZWFsdGggY2hlY2tzLiBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGNhbiB3YWl0IGZvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb250YWluZXIgaGVhbHRoIGNoZWNrIHNldHRpbmdzLiBcbiAqICAgXG4gKiAgRm9yIHNlcnZpY2VzIHRoYXQgKmRvKiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICArICBJZiBhIHRhc2sgaGFzIGFuIGVzc2VudGlhbCBjb250YWluZXIgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciBib3RoIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYW5kIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICBcbiAqICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSByZXBsaWNhIHNlcnZpY2UgZm9yIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgaXMgMTAwJS4gVGhlIGRlZmF1bHQgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHVzaW5nIHRoZSBgYERBRU1PTmBgIHNlcnZpY2Ugc2NoZWR1bGUgaXMgMCUgZm9yIHRoZSBDTEksIHRoZSBBV1MgU0RLcywgYW5kIHRoZSBBUElzIGFuZCA1MCUgZm9yIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLlxuICogIFRoZSBtaW5pbXVtIG51bWJlciBvZiBoZWFsdGh5IHRhc2tzIGR1cmluZyBhIGRlcGxveW1lbnQgaXMgdGhlIGBgZGVzaXJlZENvdW50YGAgbXVsdGlwbGllZCBieSB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYC8xMDAsIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciB2YWx1ZS5cbiAqICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlICptaW5pbXVtIGhlYWx0aHkgcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHRoYXQgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGhhcyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLlxuICogICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQsIGFsdGhvdWdoIGl0IGlzIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1pbmltdW1IZWFsdGh5UGVyY2VudD86IG51bWJlclxufVxuLyoqXG4gKiBBIGRlcGxveW1lbnQgbGlmZWN5Y2xlIGhvb2sgcnVucyBjdXN0b20gbG9naWMgYXQgc3BlY2lmaWMgc3RhZ2VzIG9mIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MuIEN1cnJlbnRseSwgeW91IGNhbiB1c2UgTGFtYmRhIGZ1bmN0aW9ucyBhcyBob29rIHRhcmdldHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTGlmZWN5Y2xlIGhvb2tzIGZvciBBbWF6b24gRUNTIHNlcnZpY2UgZGVwbG95bWVudHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtbGlmZWN5Y2xlLWhvb2tzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50TGlmZWN5Y2xlSG9vayB7XG4vKipcbiAqIFRoZSBsaWZlY3ljbGUgc3RhZ2VzIGF0IHdoaWNoIHRvIHJ1biB0aGUgaG9vay4gQ2hvb3NlIGZyb20gdGhlc2UgdmFsaWQgdmFsdWVzOlxuICogICArICBSRUNPTkNJTEVfU0VSVklDRVxuICogIFRoZSByZWNvbmNpbGlhdGlvbiBzdGFnZSB0aGF0IG9ubHkgaGFwcGVucyB3aGVuIHlvdSBzdGFydCBhIG5ldyBzZXJ2aWNlIGRlcGxveW1lbnQgd2l0aCBtb3JlIHRoYW4gMSBzZXJ2aWNlIHJldmlzaW9uIGluIGFuIEFDVElWRSBzdGF0ZS5cbiAqICBZb3UgY2FuIHVzZSBhIGxpZmVjeWNsZSBob29rIGZvciB0aGlzIHN0YWdlLlxuICogICArICBQUkVfU0NBTEVfVVBcbiAqICBUaGUgZ3JlZW4gc2VydmljZSByZXZpc2lvbiBoYXMgbm90IHN0YXJ0ZWQuIFRoZSBibHVlIHNlcnZpY2UgcmV2aXNpb24gaXMgaGFuZGxpbmcgMTAwJSBvZiB0aGUgcHJvZHVjdGlvbiB0cmFmZmljLiBUaGVyZSBpcyBubyB0ZXN0IHRyYWZmaWMuXG4gKiAgWW91IGNhbiB1c2UgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhpcyBzdGFnZS5cbiAqICAgKyAgUE9TVF9TQ0FMRV9VUFxuICogIFRoZSBncmVlbiBzZXJ2aWNlIHJldmlzaW9uIGhhcyBzdGFydGVkLiBUaGUgYmx1ZSBzZXJ2aWNlIHJldmlzaW9uIGlzIGhhbmRsaW5nIDEwMCUgb2YgdGhlIHByb2R1Y3Rpb24gdHJhZmZpYy4gVGhlcmUgaXMgbm8gdGVzdCB0cmFmZmljLlxuICogIFlvdSBjYW4gdXNlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHRoaXMgc3RhZ2UuXG4gKiAgICsgIFRFU1RfVFJBRkZJQ19TSElGVFxuICogIFRoZSBibHVlIGFuZCBncmVlbiBzZXJ2aWNlIHJldmlzaW9ucyBhcmUgcnVubmluZy4gVGhlIGJsdWUgc2VydmljZSByZXZpc2lvbiBoYW5kbGVzIDEwMCUgb2YgdGhlIHByb2R1Y3Rpb24gdHJhZmZpYy4gVGhlIGdyZWVuIHNlcnZpY2UgcmV2aXNpb24gaXMgbWlncmF0aW5nIGZyb20gMCUgdG8gMTAwJSBvZiB0ZXN0IHRyYWZmaWMuXG4gKiAgWW91IGNhbiB1c2UgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhpcyBzdGFnZS5cbiAqICAgKyAgUE9TVF9URVNUX1RSQUZGSUNfU0hJRlRcbiAqICBUaGUgdGVzdCB0cmFmZmljIHNoaWZ0IGlzIGNvbXBsZXRlLiBUaGUgZ3JlZW4gc2VydmljZSByZXZpc2lvbiBoYW5kbGVzIDEwMCUgb2YgdGhlIHRlc3QgdHJhZmZpYy5cbiAqICBZb3UgY2FuIHVzZSBhIGxpZmVjeWNsZSBob29rIGZvciB0aGlzIHN0YWdlLlxuICogICArICBQUk9EVUNUSU9OX1RSQUZGSUNfU0hJRlRcbiAqICBQcm9kdWN0aW9uIHRyYWZmaWMgaXMgc2hpZnRpbmcgdG8gdGhlIGdyZWVuIHNlcnZpY2UgcmV2aXNpb24uIFRoZSBncmVlbiBzZXJ2aWNlIHJldmlzaW9uIGlzIG1pZ3JhdGluZyBmcm9tIDAlIHRvIDEwMCUgb2YgcHJvZHVjdGlvbiB0cmFmZmljLlxuICogIFlvdSBjYW4gdXNlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHRoaXMgc3RhZ2UuXG4gKiAgICsgIFBPU1RfUFJPRFVDVElPTl9UUkFGRklDX1NISUZUXG4gKiAgVGhlIHByb2R1Y3Rpb24gdHJhZmZpYyBzaGlmdCBpcyBjb21wbGV0ZS5cbiAqICBZb3UgY2FuIHVzZSBhIGxpZmVjeWNsZSBob29rIGZvciB0aGlzIHN0YWdlLlxuICogICBcbiAqICBZb3UgbXVzdCBwcm92aWRlIHRoaXMgcGFyYW1ldGVyIHdoZW4gY29uZmlndXJpbmcgYSBkZXBsb3ltZW50IGxpZmVjeWNsZSBob29rLlxuICogXG4gKiBAbWluSXRlbXMgMVxuICovXG5MaWZlY3ljbGVTdGFnZXM6IChcIlJFQ09OQ0lMRV9TRVJWSUNFXCIgfCBcIlBSRV9TQ0FMRV9VUFwiIHwgXCJQT1NUX1NDQUxFX1VQXCIgfCBcIlRFU1RfVFJBRkZJQ19TSElGVFwiIHwgXCJQT1NUX1RFU1RfVFJBRkZJQ19TSElGVFwiIHwgXCJQUk9EVUNUSU9OX1RSQUZGSUNfU0hJRlRcIiB8IFwiUE9TVF9QUk9EVUNUSU9OX1RSQUZGSUNfU0hJRlRcIilbXVxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGhvb2sgdGFyZ2V0LiBDdXJyZW50bHksIG9ubHkgTGFtYmRhIGZ1bmN0aW9uIEFSTnMgYXJlIHN1cHBvcnRlZC5cbiAqICBZb3UgbXVzdCBwcm92aWRlIHRoaXMgcGFyYW1ldGVyIHdoZW4gY29uZmlndXJpbmcgYSBkZXBsb3ltZW50IGxpZmVjeWNsZSBob29rLlxuICovXG5Ib29rVGFyZ2V0QXJuOiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGdyYW50cyBBbWF6b24gRUNTIHBlcm1pc3Npb24gdG8gY2FsbCBMYW1iZGEgZnVuY3Rpb25zIG9uIHlvdXIgYmVoYWxmLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Blcm1pc3Npb25zIHJlcXVpcmVkIGZvciBMYW1iZGEgZnVuY3Rpb25zIGluIEFtYXpvbiBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYmx1ZS1ncmVlbi1wZXJtaXNzaW9ucy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblJvbGVBcm46IHN0cmluZ1xufVxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgQ2xvdWRXYXRjaCBhbGFybXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudEFsYXJtcyB7XG4vKipcbiAqIE9uZSBvciBtb3JlIENsb3VkV2F0Y2ggYWxhcm0gbmFtZXMuIFVzZSBhIFwiLFwiIHRvIHNlcGFyYXRlIHRoZSBhbGFybXMuXG4gKi9cbkFsYXJtTmFtZXM6IHN0cmluZ1tdXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIENsb3VkV2F0Y2ggYWxhcm0gb3B0aW9uIGluIHRoZSBzZXJ2aWNlIGRlcGxveW1lbnQgcHJvY2Vzcy5cbiAqL1xuRW5hYmxlOiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBjb25maWd1cmUgQW1hem9uIEVDUyB0byByb2xsIGJhY2sgdGhlIHNlcnZpY2UgaWYgYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMuIElmIHJvbGxiYWNrIGlzIHVzZWQsIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICovXG5Sb2xsYmFjazogYm9vbGVhblxufVxuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIgY2FuIG9ubHkgYmUgdXNlZCBmb3Igc2VydmljZXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUuXG4gKiAgIFRoZSAqZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIqIGRldGVybWluZXMgd2hldGhlciBhIHNlcnZpY2UgZGVwbG95bWVudCB3aWxsIGZhaWwgaWYgdGhlIHNlcnZpY2UgY2FuJ3QgcmVhY2ggYSBzdGVhZHkgc3RhdGUuIElmIHlvdSB1c2UgdGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyLCBhIHNlcnZpY2UgZGVwbG95bWVudCB3aWxsIHRyYW5zaXRpb24gdG8gYSBmYWlsZWQgc3RhdGUgYW5kIHN0b3AgbGF1bmNoaW5nIG5ldyB0YXNrcy4gSWYgeW91IHVzZSB0aGUgcm9sbGJhY2sgb3B0aW9uLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUm9sbGluZyB1cGRhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZS1lY3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENpcmN1aXRCcmVha2VyIHtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIgbG9naWMgZm9yIHRoZSBzZXJ2aWNlLlxuICovXG5FbmFibGU6IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNvbmZpZ3VyZSBBbWF6b24gRUNTIHRvIHJvbGwgYmFjayB0aGUgc2VydmljZSBpZiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscy4gSWYgcm9sbGJhY2sgaXMgb24sIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICovXG5Sb2xsYmFjazogYm9vbGVhblxufVxuIl19
|
|
@@ -37,48 +37,51 @@ export interface AutoParticipantRecordingConfiguration {
|
|
|
37
37
|
* @maxItems 1
|
|
38
38
|
*/
|
|
39
39
|
MediaTypes?: ("AUDIO_VIDEO" | "AUDIO_ONLY")[];
|
|
40
|
-
|
|
41
|
-
* HLS configuration object for individual participant recording.
|
|
42
|
-
*/
|
|
43
|
-
HlsConfiguration?: {
|
|
44
|
-
/**
|
|
45
|
-
* An object representing a configuration of participant HLS recordings for individual participant recording.
|
|
46
|
-
*/
|
|
47
|
-
ParticipantRecordingHlsConfiguration?: {
|
|
48
|
-
/**
|
|
49
|
-
* Defines the target duration for recorded segments generated when recording a stage participant. Segments may have durations longer than the specified value when needed to ensure each segment begins with a keyframe. Default: 6.
|
|
50
|
-
*/
|
|
51
|
-
TargetSegmentDurationSeconds?: number;
|
|
52
|
-
};
|
|
53
|
-
};
|
|
40
|
+
HlsConfiguration?: HlsConfiguration;
|
|
54
41
|
/**
|
|
55
42
|
* If a stage publisher disconnects and then reconnects within the specified interval, the multiple recordings will be considered a single recording and merged together. The default value is 0, which disables merging.
|
|
56
43
|
*/
|
|
57
44
|
RecordingReconnectWindowSeconds?: number;
|
|
45
|
+
ThumbnailConfiguration?: ThumbnailConfiguration;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* HLS configuration object for individual participant recording.
|
|
49
|
+
*/
|
|
50
|
+
export interface HlsConfiguration {
|
|
51
|
+
ParticipantRecordingHlsConfiguration?: ParticipantRecordingHlsConfiguration;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* An object representing a configuration of participant HLS recordings for individual participant recording.
|
|
55
|
+
*/
|
|
56
|
+
export interface ParticipantRecordingHlsConfiguration {
|
|
57
|
+
/**
|
|
58
|
+
* Defines the target duration for recorded segments generated when recording a stage participant. Segments may have durations longer than the specified value when needed to ensure each segment begins with a keyframe. Default: 6.
|
|
59
|
+
*/
|
|
60
|
+
TargetSegmentDurationSeconds?: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* A complex type that allows you to enable/disable the recording of thumbnails for individual participant recording and modify the interval at which thumbnails are generated for the live session.
|
|
64
|
+
*/
|
|
65
|
+
export interface ThumbnailConfiguration {
|
|
58
66
|
/**
|
|
59
|
-
*
|
|
67
|
+
* An object representing a configuration of thumbnails for recorded video from an individual participant.
|
|
60
68
|
*/
|
|
61
|
-
|
|
69
|
+
ParticipantThumbnailConfiguration?: {
|
|
70
|
+
/**
|
|
71
|
+
* Thumbnail recording mode. Default: DISABLED.
|
|
72
|
+
*/
|
|
73
|
+
RecordingMode?: ("INTERVAL" | "DISABLED");
|
|
74
|
+
/**
|
|
75
|
+
* Indicates the format in which thumbnails are recorded. SEQUENTIAL records all generated thumbnails in a serial manner, to the media/thumbnails/high directory. LATEST saves the latest thumbnail in media/latest_thumbnail/high/thumb.jpg and overwrites it at the interval specified by targetIntervalSeconds. You can enable both SEQUENTIAL and LATEST. Default: SEQUENTIAL.
|
|
76
|
+
*
|
|
77
|
+
* @minItems 0
|
|
78
|
+
* @maxItems 2
|
|
79
|
+
*/
|
|
80
|
+
Storage?: ("SEQUENTIAL" | "LATEST")[];
|
|
62
81
|
/**
|
|
63
|
-
*
|
|
82
|
+
* The targeted thumbnail-generation interval in seconds. This is configurable only if recordingMode is INTERVAL. Default: 60.
|
|
64
83
|
*/
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Thumbnail recording mode. Default: DISABLED.
|
|
68
|
-
*/
|
|
69
|
-
RecordingMode?: ("INTERVAL" | "DISABLED");
|
|
70
|
-
/**
|
|
71
|
-
* Indicates the format in which thumbnails are recorded. SEQUENTIAL records all generated thumbnails in a serial manner, to the media/thumbnails/high directory. LATEST saves the latest thumbnail in media/latest_thumbnail/high/thumb.jpg and overwrites it at the interval specified by targetIntervalSeconds. You can enable both SEQUENTIAL and LATEST. Default: SEQUENTIAL.
|
|
72
|
-
*
|
|
73
|
-
* @minItems 0
|
|
74
|
-
* @maxItems 2
|
|
75
|
-
*/
|
|
76
|
-
Storage?: ("SEQUENTIAL" | "LATEST")[];
|
|
77
|
-
/**
|
|
78
|
-
* The targeted thumbnail-generation interval in seconds. This is configurable only if recordingMode is INTERVAL. Default: 60.
|
|
79
|
-
*/
|
|
80
|
-
TargetIntervalSeconds?: number;
|
|
81
|
-
};
|
|
84
|
+
TargetIntervalSeconds?: number;
|
|
82
85
|
};
|
|
83
86
|
}
|
|
84
87
|
export interface Tag {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWl2cy1zdGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1pdnMtc3RhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb3VyY2UgVHlwZSBkZWZpbml0aW9uIGZvciBBV1M6OklWUzo6U3RhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19JVlNfU1RBR0Uge1xuLyoqXG4gKiBTdGFnZSBBUk4gaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgb24gY3JlYXRpb24gYW5kIGFzc2lnbmVkIGFzIHRoZSB1bmlxdWUgaWRlbnRpZmllci5cbiAqL1xuQXJuPzogc3RyaW5nXG4vKipcbiAqIFN0YWdlIG5hbWVcbiAqL1xuTmFtZT86IHN0cmluZ1xuQXV0b1BhcnRpY2lwYW50UmVjb3JkaW5nQ29uZmlndXJhdGlvbj86IEF1dG9QYXJ0aWNpcGFudFJlY29yZGluZ0NvbmZpZ3VyYXRpb25cbi8qKlxuICogQW4gYXJyYXkgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFwcGx5IHRvIHRoaXMgcmVzb3VyY2UuXG4gKiBcbiAqIEBtYXhJdGVtcyA1MFxuICovXG5UYWdzPzogVGFnW11cbi8qKlxuICogSUQgb2YgdGhlIGFjdGl2ZSBzZXNzaW9uIHdpdGhpbiB0aGUgc3RhZ2UuXG4gKi9cbkFjdGl2ZVNlc3Npb25JZD86IHN0cmluZ1xufVxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudCByZWNvcmRpbmcsIHRvIGF0dGFjaCB0byB0aGUgbmV3IHN0YWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9QYXJ0aWNpcGFudFJlY29yZGluZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBBUk4gb2YgdGhlIFN0b3JhZ2VDb25maWd1cmF0aW9uIHJlc291cmNlIHRvIHVzZSBmb3IgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudCByZWNvcmRpbmcuXG4gKi9cblN0b3JhZ2VDb25maWd1cmF0aW9uQXJuOiBzdHJpbmdcbi8qKlxuICogVHlwZXMgb2YgbWVkaWEgdG8gYmUgcmVjb3JkZWQuIERlZmF1bHQ6IEFVRElPX1ZJREVPLlxuICogXG4gKiBAbWluSXRlbXMgMFxuICogQG1heEl0ZW1zIDFcbiAqL1xuTWVkaWFUeXBlcz86IChcIkFVRElPX1ZJREVPXCIgfCBcIkFVRElPX09OTFlcIilbXVxuSGxzQ29uZmlndXJhdGlvbj86IEhsc0NvbmZpZ3VyYXRpb25cbi8qKlxuICogSWYgYSBzdGFnZSBwdWJsaXNoZXIgZGlzY29ubmVjdHMgYW5kIHRoZW4gcmVjb25uZWN0cyB3aXRoaW4gdGhlIHNwZWNpZmllZCBpbnRlcnZhbCwgdGhlIG11bHRpcGxlIHJlY29yZGluZ3Mgd2lsbCBiZSBjb25zaWRlcmVkIGEgc2luZ2xlIHJlY29yZGluZyBhbmQgbWVyZ2VkIHRvZ2V0aGVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLCB3aGljaCBkaXNhYmxlcyBtZXJnaW5nLlxuICovXG5SZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3dTZWNvbmRzPzogbnVtYmVyXG5UaHVtYm5haWxDb25maWd1cmF0aW9uPzogVGh1bWJuYWlsQ29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBITFMgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGluZGl2aWR1YWwgcGFydGljaXBhbnQgcmVjb3JkaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhsc0NvbmZpZ3VyYXRpb24ge1xuUGFydGljaXBhbnRSZWNvcmRpbmdIbHNDb25maWd1cmF0aW9uPzogUGFydGljaXBhbnRSZWNvcmRpbmdIbHNDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb25maWd1cmF0aW9uIG9mIHBhcnRpY2lwYW50IEhMUyByZWNvcmRpbmdzIGZvciBpbmRpdmlkdWFsIHBhcnRpY2lwYW50IHJlY29yZGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJ0aWNpcGFudFJlY29yZGluZ0hsc0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBEZWZpbmVzIHRoZSB0YXJnZXQgZHVyYXRpb24gZm9yIHJlY29yZGVkIHNlZ21lbnRzIGdlbmVyYXRlZCB3aGVuIHJlY29yZGluZyBhIHN0YWdlIHBhcnRpY2lwYW50LiBTZWdtZW50cyBtYXkgaGF2ZSBkdXJhdGlvbnMgbG9uZ2VyIHRoYW4gdGhlIHNwZWNpZmllZCB2YWx1ZSB3aGVuIG5lZWRlZCB0byBlbnN1cmUgZWFjaCBzZWdtZW50IGJlZ2lucyB3aXRoIGEga2V5ZnJhbWUuIERlZmF1bHQ6IDYuXG4gKi9cblRhcmdldFNlZ21lbnREdXJhdGlvblNlY29uZHM/OiBudW1iZXJcbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBhbGxvd3MgeW91IHRvIGVuYWJsZS9kaXNhYmxlIHRoZSByZWNvcmRpbmcgb2YgdGh1bWJuYWlscyBmb3IgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudCByZWNvcmRpbmcgYW5kIG1vZGlmeSB0aGUgaW50ZXJ2YWwgYXQgd2hpY2ggdGh1bWJuYWlscyBhcmUgZ2VuZXJhdGVkIGZvciB0aGUgbGl2ZSBzZXNzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRodW1ibmFpbENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgY29uZmlndXJhdGlvbiBvZiB0aHVtYm5haWxzIGZvciByZWNvcmRlZCB2aWRlbyBmcm9tIGFuIGluZGl2aWR1YWwgcGFydGljaXBhbnQuXG4gKi9cblBhcnRpY2lwYW50VGh1bWJuYWlsQ29uZmlndXJhdGlvbj86IHtcbi8qKlxuICogVGh1bWJuYWlsIHJlY29yZGluZyBtb2RlLiBEZWZhdWx0OiBESVNBQkxFRC5cbiAqL1xuUmVjb3JkaW5nTW9kZT86IChcIklOVEVSVkFMXCIgfCBcIkRJU0FCTEVEXCIpXG4vKipcbiAqIEluZGljYXRlcyB0aGUgZm9ybWF0IGluIHdoaWNoIHRodW1ibmFpbHMgYXJlIHJlY29yZGVkLiBTRVFVRU5USUFMIHJlY29yZHMgYWxsIGdlbmVyYXRlZCB0aHVtYm5haWxzIGluIGEgc2VyaWFsIG1hbm5lciwgdG8gdGhlIG1lZGlhL3RodW1ibmFpbHMvaGlnaCBkaXJlY3RvcnkuIExBVEVTVCBzYXZlcyB0aGUgbGF0ZXN0IHRodW1ibmFpbCBpbiBtZWRpYS9sYXRlc3RfdGh1bWJuYWlsL2hpZ2gvdGh1bWIuanBnIGFuZCBvdmVyd3JpdGVzIGl0IGF0IHRoZSBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGFyZ2V0SW50ZXJ2YWxTZWNvbmRzLiBZb3UgY2FuIGVuYWJsZSBib3RoIFNFUVVFTlRJQUwgYW5kIExBVEVTVC4gRGVmYXVsdDogU0VRVUVOVElBTC5cbiAqIFxuICogQG1pbkl0ZW1zIDBcbiAqIEBtYXhJdGVtcyAyXG4gKi9cblN0b3JhZ2U/OiAoXCJTRVFVRU5USUFMXCIgfCBcIkxBVEVTVFwiKVtdXG4vKipcbiAqIFRoZSB0YXJnZXRlZCB0aHVtYm5haWwtZ2VuZXJhdGlvbiBpbnRlcnZhbCBpbiBzZWNvbmRzLiBUaGlzIGlzIGNvbmZpZ3VyYWJsZSBvbmx5IGlmIHJlY29yZGluZ01vZGUgaXMgSU5URVJWQUwuIERlZmF1bHQ6IDYwLlxuICovXG5UYXJnZXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXJcbn1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIGtleSBuYW1lIG9mIHRoZSB0YWcuIFlvdSBjYW4gc3BlY2lmeSBhIHZhbHVlIHRoYXQgaXMgMSB0byAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIGxlbmd0aCBhbmQgY2Fubm90IGJlIHByZWZpeGVkIHdpdGggYXdzOi4gWW91IGNhbiB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogdGhlIHNldCBvZiBVbmljb2RlIGxldHRlcnMsIGRpZ2l0cywgd2hpdGVzcGFjZSwgXywgLiwgLywgPSwgKywgYW5kIC0uXG4gKi9cbktleTogc3RyaW5nXG4vKipcbiAqIFRoZSB2YWx1ZSBmb3IgdGhlIHRhZy4gWW91IGNhbiBzcGVjaWZ5IGEgdmFsdWUgdGhhdCBpcyAwIHRvIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3QgYmUgcHJlZml4ZWQgd2l0aCBhd3M6LiBZb3UgY2FuIHVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiB0aGUgc2V0IG9mIFVuaWNvZGUgbGV0dGVycywgZGlnaXRzLCB3aGl0ZXNwYWNlLCBfLCAuLCAvLCA9LCArLCBhbmQgLS5cbiAqL1xuVmFsdWU6IHN0cmluZ1xufVxuIl19
|