@aws-cdk/aws-mediaconnect-alpha 2.270.0-alpha.0 → 2.271.0-alpha.0
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/.jsii +237 -231
- package/.jsii.tabl.json.gz +0 -0
- package/README.md +12 -12
- package/lib/bridge-output.js +1 -1
- package/lib/bridge-source.js +2 -2
- package/lib/bridge.js +5 -5
- package/lib/flow-entitlement.js +1 -1
- package/lib/flow-output.js +2 -2
- package/lib/flow-source-configuration.js +4 -4
- package/lib/flow-source.js +1 -1
- package/lib/flow.js +10 -10
- package/lib/gateway.js +1 -1
- package/lib/mediaconnect-grants.generated.js +2 -2
- package/lib/router-input.d.ts +5 -3
- package/lib/router-input.js +10 -9
- package/lib/router-network-interface.js +2 -2
- package/lib/router-output.d.ts +5 -3
- package/lib/router-output.js +8 -7
- package/lib/shared.js +9 -9
- package/package.json +11 -6
package/lib/router-output.js
CHANGED
|
@@ -49,7 +49,7 @@ const shared_1 = require("./shared");
|
|
|
49
49
|
*/
|
|
50
50
|
class RouterOutputProtocolOptions {
|
|
51
51
|
value;
|
|
52
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocolOptions", version: "2.
|
|
52
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocolOptions", version: "2.271.0-alpha.0" };
|
|
53
53
|
/** Real-time Transport Protocol */
|
|
54
54
|
static RTP = new RouterOutputProtocolOptions('RTP');
|
|
55
55
|
/** Reliable Internet Stream Transport */
|
|
@@ -76,11 +76,12 @@ class RouterOutputProtocolOptions {
|
|
|
76
76
|
}
|
|
77
77
|
exports.RouterOutputProtocolOptions = RouterOutputProtocolOptions;
|
|
78
78
|
/**
|
|
79
|
-
*
|
|
79
|
+
* Tier for a router output. The tier determines the capacity limits, performance characteristics,
|
|
80
|
+
* and associated costs. The `maximumBitrate` must fall within the limits of the selected tier.
|
|
80
81
|
*/
|
|
81
82
|
class RouterOutputTier {
|
|
82
83
|
value;
|
|
83
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputTier", version: "2.
|
|
84
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputTier", version: "2.271.0-alpha.0" };
|
|
84
85
|
/** Up to 100 Mbps */
|
|
85
86
|
static OUTPUT_100 = new RouterOutputTier('OUTPUT_100');
|
|
86
87
|
/** Up to 50 Mbps */
|
|
@@ -110,7 +111,7 @@ exports.RouterOutputTier = RouterOutputTier;
|
|
|
110
111
|
* Supported protocols: RTP, RIST, SRT (Listener and Caller).
|
|
111
112
|
*/
|
|
112
113
|
class RouterOutputProtocol {
|
|
113
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocol", version: "2.
|
|
114
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocol", version: "2.271.0-alpha.0" };
|
|
114
115
|
/**
|
|
115
116
|
* Create an RTP protocol configuration
|
|
116
117
|
*
|
|
@@ -300,7 +301,7 @@ exports.RouterOutputProtocol = RouterOutputProtocol;
|
|
|
300
301
|
* Factory class for creating Router Output configurations
|
|
301
302
|
*/
|
|
302
303
|
class RouterOutputConfiguration {
|
|
303
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputConfiguration", version: "2.
|
|
304
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputConfiguration", version: "2.271.0-alpha.0" };
|
|
304
305
|
/**
|
|
305
306
|
* Create a standard Router Output configuration with a single protocol
|
|
306
307
|
*
|
|
@@ -603,7 +604,7 @@ let RouterOutput = (() => {
|
|
|
603
604
|
RouterOutput = _classThis = _classDescriptor.value;
|
|
604
605
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
605
606
|
}
|
|
606
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutput", version: "2.
|
|
607
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutput", version: "2.271.0-alpha.0" };
|
|
607
608
|
/** Uniquely identifies this class. */
|
|
608
609
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-mediaconnect-alpha.RouterOutput';
|
|
609
610
|
/**
|
|
@@ -773,4 +774,4 @@ function extractRouterOutputId(routerOutputArn) {
|
|
|
773
774
|
}
|
|
774
775
|
return parsed;
|
|
775
776
|
}
|
|
776
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLW91dHB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJvdXRlci1vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQXNJO0FBRXRJLCtEQUEwRDtBQUUxRCxtRUFBK0Q7QUFHL0QsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFNMUUscUNBQStJO0FBRS9JOztHQUVHO0FBQ0gsTUFBYSwyQkFBMkI7SUFtQkY7O0lBbEJwQyxtQ0FBbUM7SUFDNUIsTUFBTSxDQUFVLEdBQUcsR0FBRyxJQUFJLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLHlDQUF5QztJQUNsQyxNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEUsOENBQThDO0lBQ3ZDLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRixnREFBZ0Q7SUFDekMsTUFBTSxDQUFVLFlBQVksR0FBRyxJQUFJLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXRGOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBYTtRQUM1QixPQUFPLElBQUksMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDL0M7SUFFRCw2Q0FBNkM7SUFDN0MsWUFBb0MsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7S0FBSTtJQUVyRCwrQkFBK0I7SUFDeEIsUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQjs7QUF4Qkgsa0VBeUJDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGdCQUFnQjtJQWlCUzs7SUFoQnBDLHFCQUFxQjtJQUNkLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2RSxvQkFB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LFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM3Qzs7WUFqS1UsdURBQVk7Ozs7O0FBQVosb0NBQVk7QUFvS3pCLFNBQVMscUJBQXFCLENBQUMsZUFBdUI7SUFDcEQsTUFBTSxNQUFNLEdBQUcsaUJBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLHVCQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDdEYsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLHFDQUF1QixDQUMvQixJQUFBLHNCQUFHLEVBQUEsd0JBQXdCLEVBQzNCLHNDQUFzQyxlQUFlLHNGQUFzRixDQUM1SSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJpdHJhdGUsIElSZXNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBEdXJhdGlvbiwgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBTdGFjaywgVG9rZW4sIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY09wdGlvbnMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBNZXRyaWMsIFVuaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgdHlwZSB7IEdyYW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDZm5Sb3V0ZXJPdXRwdXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFjb25uZWN0JztcbmltcG9ydCB0eXBlIHsgSVJvdXRlck91dHB1dFJlZiwgUm91dGVyT3V0cHV0UmVmZXJlbmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW1lZGlhY29ubmVjdCc7XG5pbXBvcnQgdHlwZSB7IElJbnB1dFJlZiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1tZWRpYWxpdmUnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBJRmxvdyB9IGZyb20gJy4vZmxvdyc7XG5pbXBvcnQgdHlwZSB7IE1haW50ZW5hbmNlQ29uZmlndXJhdGlvbiwgRm9yd2FyZEVycm9yQ29ycmVjdGlvbiwgUm91dGluZ1Njb3BlIH0gZnJvbSAnLi9yb3V0ZXItaW5wdXQnO1xuaW1wb3J0IHR5cGUgeyBJUm91dGVyTmV0d29ya0ludGVyZmFjZSB9IGZyb20gJy4vcm91dGVyLW5ldHdvcmstaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgTWVkaWFMaXZlUGlwZWxpbmUsIFJvdXRlclNydEVuY3J5cHRpb24sIFRyYW5zaXRFbmNyeXB0aW9uIH0gZnJvbSAnLi9zaGFyZWQnO1xuaW1wb3J0IHsgcmVuZGVyVGFncywgZXhjZWVkc1JvdXRlclRpZXJCaXRyYXRlLCByZXNvbHZlUm91dGVyU3J0RW5jcnlwdGlvbiwgcmVzb2x2ZVRyYW5zaXRFbmNyeXB0aW9uLCB2YWxpZGF0ZU1haW50ZW5hbmNlVGltZSB9IGZyb20gJy4vc2hhcmVkJztcblxuLyoqXG4gKiBQcm90b2NvbCBvcHRpb25zIGF2YWlsYWJsZSBmb3IgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zIHtcbiAgLyoqIFJlYWwtdGltZSBUcmFuc3BvcnQgUHJvdG9jb2wgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVFAgPSBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zKCdSVFAnKTtcbiAgLyoqIFJlbGlhYmxlIEludGVybmV0IFN0cmVhbSBUcmFuc3BvcnQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSSVNUID0gbmV3IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucygnUklTVCcpO1xuICAvKiogU2VjdXJlIFJlbGlhYmxlIFRyYW5zcG9ydCAtIENhbGxlciBtb2RlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1JUX0NBTExFUiA9IG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMoJ1NSVF9DQUxMRVInKTtcbiAgLyoqIFNlY3VyZSBSZWxpYWJsZSBUcmFuc3BvcnQgLSBMaXN0ZW5lciBtb2RlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1JUX0xJU1RFTkVSID0gbmV3IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucygnU1JUX0xJU1RFTkVSJyk7XG5cbiAgLyoqXG4gICAqIFVzZSBhIGN1c3RvbSBwcm90b2NvbCB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3RvY29sIHN0cmluZyB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zIHtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyh2YWx1ZSk7XG4gIH1cblxuICAvKiogQHBhcmFtIHZhbHVlIFRoZSBwcm90b2NvbCBzdHJpbmcgdmFsdWUgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZykge31cblxuICAvKiogUmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlICovXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogUm91dGluZyB0aWVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBiaXRyYXRlIChpbiBNYnBzKSBmb3IgYSBSb3V0ZXIgT3V0cHV0LlxuICovXG5leHBvcnQgY2xhc3MgUm91dGVyT3V0cHV0VGllciB7XG4gIC8qKiBVcCB0byAxMDAgTWJwcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9VVFBVVF8xMDAgPSBuZXcgUm91dGVyT3V0cHV0VGllcignT1VUUFVUXzEwMCcpO1xuICAvKiogVXAgdG8gNTAgTWJwcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9VVFBVVF81MCA9IG5ldyBSb3V0ZXJPdXRwdXRUaWVyKCdPVVRQVVRfNTAnKTtcbiAgLyoqIFVwIHRvIDIwIE1icHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPVVRQVVRfMjAgPSBuZXcgUm91dGVyT3V0cHV0VGllcignT1VUUFVUXzIwJyk7XG5cbiAgLyoqXG4gICAqIFVzZSBhIGN1c3RvbSB0aWVyIHZhbHVlXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdGllciBzdHJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IFJvdXRlck91dHB1dFRpZXIge1xuICAgIHJldHVybiBuZXcgUm91dGVyT3V0cHV0VGllcih2YWx1ZSk7XG4gIH1cblxuICAvKiogQHBhcmFtIHZhbHVlIFRoZSB0aWVyIHN0cmluZyB2YWx1ZSAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nKSB7fVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIFJvdXRlciBPdXRwdXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm91dGVyT3V0cHV0IGV4dGVuZHMgSVJlc291cmNlLCBJUm91dGVyT3V0cHV0UmVmIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJPdXRwdXROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGlwQWRkcmVzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHJvdXRlciBvdXRwdXQgd2FzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSByb3V0ZXIgb3V0cHV0IHdhcyBsYXN0IHVwZGF0ZWQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRoaXMgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogUm91dGVyIG91dHB1dCBtZXRyaWNzIGFyZSBkaW1lbnNpb25lZCBieSBgUm91dGVyT3V0cHV0QVJOYC4gU2VlIHRoZSBNZWRpYUNvbm5lY3RcbiAgICogZG9jdW1lbnRhdGlvbiBmb3IgYXZhaWxhYmxlIG1ldHJpYyBuYW1lcyAoZS5nLiBgUm91dGVyT3V0cHV0Qml0UmF0ZWAsXG4gICAqIGBSb3V0ZXJPdXRwdXRUb3RhbFBhY2tldHNgKS5cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgYml0cmF0ZSBvZiB0aGUgcm91dGVyIG91dHB1dCdzIHBheWxvYWQuXG4gICAqIEBkZWZhdWx0IC0gYXZlcmFnZSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0JpdHJhdGUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBzZW50IGJ5IHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY1RvdGFsUGFja2V0cyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHJvdXRlciBvdXRwdXQgY29ubmVjdGlvbiBzdGF0ZSAoMSBjb25uZWN0ZWQsIDAgZGlzY29ubmVjdGVkKS4gQXBwbGllcyB0byBTUlQgb3V0cHV0cyBvbmx5LlxuICAgKiBAZGVmYXVsdCAtIG1pbmltdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNDb25uZWN0ZWQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgcmV0cmFuc21pdHRlZCBwYWNrZXRzIHJlcXVlc3RlZCB0aHJvdWdoIGF1dG9tYXRpYyByZXBlYXQgcmVxdWVzdCAoQVJRKS5cbiAgICogQXBwbGllcyB0byBSSVNUIGFuZCBTUlQgb3V0cHV0cyBvbmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0FycVJlcXVlc3RzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIFJvdXRlciBPdXRwdXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJPdXRwdXRQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBSb3V0ZXIgT3V0cHV0XG4gICAqIEBkZWZhdWx0IC0gR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHlcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbWF4aW11bSBiaXRyYXRlIGZvciB0aGUgcm91dGVyIG91dHB1dC4gKi9cbiAgcmVhZG9ubHkgbWF4aW11bUJpdHJhdGU6IEJpdHJhdGU7XG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcm91dGVyIG91dHB1dCBpcyBjb25maWd1cmVkIGZvciBSZWdpb25hbCBvciBnbG9iYWwgcm91dGluZy4gKi9cbiAgcmVhZG9ubHkgcm91dGluZ1Njb3BlOiBSb3V0aW5nU2NvcGU7XG4gIC8qKlxuICAgKiBSb3V0aW5nIHRpZXIgdGhhdCBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGJpdHJhdGUgKGluIE1icHMpIGZvciB0aGlzIG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgUm91dGVyT3V0cHV0VGllci5PVVRQVVRfMjBcbiAgICovXG4gIHJlYWRvbmx5IHRpZXI/OiBSb3V0ZXJPdXRwdXRUaWVyO1xuICAvKiogQ29uZmlndXJhdGlvbiBmb3IgdGhlIFJvdXRlciBPdXRwdXQgKHN0YW5kYXJkLCBNZWRpYUNvbm5lY3QgRmxvdywgb3IgTWVkaWFMaXZlKSAqL1xuICByZWFkb25seSBjb25maWd1cmF0aW9uOiBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogTWFpbnRlbmFuY2Ugd2luZG93IGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1haW50ZW5hbmNlIHdpbmRvdyB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IG1haW50ZW5hbmNlQ29uZmlndXJhdGlvbj86IE1haW50ZW5hbmNlQ29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBBV1MgUmVnaW9uIHdoZXJlIHRoZSByb3V0ZXIgb3V0cHV0IGlzIGxvY2F0ZWQuXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdHMgdG8gdGhlIHNhbWUgcmVnaW9uIGFzIHN0YWNrXG4gICAqL1xuICByZWFkb25seSByZWdpb25OYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGFncyB0byBhZGQgdG8gdGhlIFJvdXRlciBPdXRwdXRcbiAgICogQGRlZmF1bHQgLSBObyB0YWdnaW5nXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgUm91dGVyIE91dHB1dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJPdXRwdXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIFRoZSBuYW1lIGlzIG5vdCBlbmNvZGVkIGluIHRoZSBBUk4gKHRoZSBBUk4gY29udGFpbnMgb25seSB0aGUgc2VydmljZS1nZW5lcmF0ZWQgSUQpLFxuICAgKiBzbyBwcm92aWRlIGl0IGhlcmUgaWYgeW91IG5lZWQgdG8gYWNjZXNzIGByb3V0ZXJPdXRwdXROYW1lYCBvbiB0aGUgaW1wb3J0ZWQgY29uc3RydWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHJvdXRlck91dHB1dE5hbWUgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgaW1wb3J0ZWQgY29uc3RydWN0XG4gICAqL1xuICByZWFkb25seSByb3V0ZXJPdXRwdXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGFyc2VkIGZyb20gdGhlIEFSTiB3aGVuIGF2YWlsYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUlRQIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIG91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdHBPdXRwdXRQcm90b2NvbFByb3BzIHtcbiAgLyoqIERlc3RpbmF0aW9uIElQIGFkZHJlc3MgZm9yIFJUUCB0cmFmZmljICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nO1xuICAvKiogUG9ydCBudW1iZXIgZm9yIFJUUCB0cmFmZmljICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIEZvcndhcmQgRXJyb3IgQ29ycmVjdGlvbiBzZXR0aW5nXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkOyB3aGVuIG9taXR0ZWQsIE1lZGlhQ29ubmVjdCBhcHBsaWVzIEZvcndhcmRFcnJvckNvcnJlY3Rpb24uRElTQUJMRUQgYXQgZGVwbG95IHRpbWVcbiAgICovXG4gIHJlYWRvbmx5IGZvcndhcmRFcnJvckNvcnJlY3Rpb24/OiBGb3J3YXJkRXJyb3JDb3JyZWN0aW9uO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFJJU1QgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3Igb3V0cHV0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJpc3RPdXRwdXRQcm90b2NvbFByb3BzIHtcbiAgLyoqIERlc3RpbmF0aW9uIElQIGFkZHJlc3MgZm9yIFJJU1QgdHJhZmZpYyAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZztcbiAgLyoqIFBvcnQgbnVtYmVyIGZvciBSSVNUIHRyYWZmaWMgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFNSVCBMaXN0ZW5lciBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciBvdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3J0TGlzdGVuZXJPdXRwdXRQcm90b2NvbFByb3BzIHtcbiAgLyoqIFBvcnQgbnVtYmVyIGZvciBTUlQgbGlzdGVuZXIgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuICAvKiogTWluaW11bSBsYXRlbmN5IGZvciBTUlQgKi9cbiAgcmVhZG9ubHkgbWluaW11bUxhdGVuY3k6IER1cmF0aW9uO1xuICAvKipcbiAgICogT3B0aW9uYWwgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBTUlQgc3RyZWFtc1xuICAgKiBAZGVmYXVsdCAtIE5vIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25Db25maWd1cmF0aW9uPzogUm91dGVyU3J0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBTUlQgQ2FsbGVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIG91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcnRDYWxsZXJPdXRwdXRQcm90b2NvbFByb3BzIHtcbiAgLyoqIERlc3RpbmF0aW9uIElQIGFkZHJlc3MgdG8gY29ubmVjdCB0byAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZztcbiAgLyoqIERlc3RpbmF0aW9uIHBvcnQgdG8gY29ubmVjdCB0byAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblBvcnQ6IG51bWJlcjtcbiAgLyoqIE1pbmltdW0gbGF0ZW5jeSBmb3IgU1JUICovXG4gIHJlYWRvbmx5IG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHN0cmVhbSBJRCBmb3IgU1JUIGNvbm5lY3Rpb25cbiAgICogQGRlZmF1bHQgLSBObyBzdHJlYW0gSURcbiAgICovXG4gIHJlYWRvbmx5IHN0cmVhbUlkPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBTUlQgc3RyZWFtc1xuICAgKiBAZGVmYXVsdCAtIE5vIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25Db25maWd1cmF0aW9uPzogUm91dGVyU3J0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBGYWN0b3J5IGNsYXNzIGZvciBjcmVhdGluZyBSb3V0ZXIgT3V0cHV0IHByb3RvY29sIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFN1cHBvcnRlZCBwcm90b2NvbHM6IFJUUCwgUklTVCwgU1JUIChMaXN0ZW5lciBhbmQgQ2FsbGVyKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlck91dHB1dFByb3RvY29sIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBSVFAgcHJvdG9jb2wgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC5ydHAoe1xuICAgKiAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogJzEwLjAuMC4xJyxcbiAgICogICAgICBwb3J0OiA1MDAwLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFJUUCBwcm90b2NvbCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFJUUFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBydHAocHJvcHM6IFJ0cE91dHB1dFByb3RvY29sUHJvcHMpOiBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gICAgUm91dGVyT3V0cHV0UHJvdG9jb2wudmFsaWRhdGVQb3J0KHByb3BzLnBvcnQpO1xuICAgIHJldHVybiBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2woUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zLlJUUCwge1xuICAgICAgcnRwOiB7XG4gICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogcHJvcHMuZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICAgIGZvcndhcmRFcnJvckNvcnJlY3Rpb246IHByb3BzLmZvcndhcmRFcnJvckNvcnJlY3Rpb24sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIFJJU1QgcHJvdG9jb2wgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC5yaXN0KHtcbiAgICogICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgcG9ydDogNTAwMCxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBSSVNUIHByb3RvY29sIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0UHJvdG9jb2wgaW5zdGFuY2UgY29uZmlndXJlZCBmb3IgUklTVFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByaXN0KHByb3BzOiBSaXN0T3V0cHV0UHJvdG9jb2xQcm9wcyk6IFJvdXRlck91dHB1dFByb3RvY29sIHtcbiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC52YWxpZGF0ZVBvcnQocHJvcHMucG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbChSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMuUklTVCwge1xuICAgICAgcmlzdDoge1xuICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6IHByb3BzLmRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgICAgZGVzdGluYXRpb25Qb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gU1JUIExpc3RlbmVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wuc3J0TGlzdGVuZXIoe1xuICAgKiAgICAgIHBvcnQ6IDUwMDAsXG4gICAqICAgICAgbWluaW11bUxhdGVuY3k6IER1cmF0aW9uLm1pbGxpcygxMjUpLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFNSVCBMaXN0ZW5lciBwcm90b2NvbCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFNSVCBMaXN0ZW5lclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcnRMaXN0ZW5lcihwcm9wczogU3J0TGlzdGVuZXJPdXRwdXRQcm90b2NvbFByb3BzKTogUm91dGVyT3V0cHV0UHJvdG9jb2wge1xuICAgIFJvdXRlck91dHB1dFByb3RvY29sLnZhbGlkYXRlUG9ydChwcm9wcy5wb3J0KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFByb3RvY29sKFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucy5TUlRfTElTVEVORVIsIHtcbiAgICAgIHNydExpc3RlbmVyOiB7XG4gICAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICAgIG1pbmltdW1MYXRlbmN5TWlsbGlzZWNvbmRzOiBwcm9wcy5taW5pbXVtTGF0ZW5jeS50b01pbGxpc2Vjb25kcygpLFxuICAgICAgfSxcbiAgICB9LCBwcm9wcy5lbmNyeXB0aW9uQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFNSVCBDYWxsZXIgcHJvdG9jb2wgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC5zcnRDYWxsZXIoe1xuICAgKiAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogJzEwLjAuMC4xJyxcbiAgICogICAgICBkZXN0aW5hdGlvblBvcnQ6IDUwMDAsXG4gICAqICAgICAgbWluaW11bUxhdGVuY3k6IER1cmF0aW9uLm1pbGxpcygxMjUpLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFNSVCBDYWxsZXIgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBTUlQgQ2FsbGVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNydENhbGxlcihwcm9wczogU3J0Q2FsbGVyT3V0cHV0UHJvdG9jb2xQcm9wcyk6IFJvdXRlck91dHB1dFByb3RvY29sIHtcbiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC52YWxpZGF0ZVNydENhbGxlclBvcnQocHJvcHMuZGVzdGluYXRpb25Qb3J0KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFByb3RvY29sKFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucy5TUlRfQ0FMTEVSLCB7XG4gICAgICBzcnRDYWxsZXI6IHtcbiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiBwcm9wcy5kZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgIGRlc3RpbmF0aW9uUG9ydDogcHJvcHMuZGVzdGluYXRpb25Qb3J0LFxuICAgICAgICBtaW5pbXVtTGF0ZW5jeU1pbGxpc2Vjb25kczogcHJvcHMubWluaW11bUxhdGVuY3kudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgICAgc3RyZWFtSWQ6IHByb3BzLnN0cmVhbUlkLFxuICAgICAgfSxcbiAgICB9LCBwcm9wcy5lbmNyeXB0aW9uQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBwb3J0IGlzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UgKDMwMDAtMzAwMDApXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVBvcnQocG9ydDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocG9ydCkgJiYgKHBvcnQgPCAzMDAwIHx8IHBvcnQgPiAzMDAwMCkpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0UG9ydFJhbmdlYCwgYFBvcnQgbXVzdCBiZSBiZXR3ZWVuIDMwMDAgYW5kIDMwMDAwLCBnb3QgJHtwb3J0fWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IFNSVCBDYWxsZXIgcG9ydCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICgwLTY1NTM1KVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVTcnRDYWxsZXJQb3J0KHBvcnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHBvcnQpICYmIChwb3J0IDwgMCB8fCBwb3J0ID4gNjU1MzUpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFNydENhbGxlclBvcnRSYW5nZWAsIGBTUlQgQ2FsbGVyIHBvcnQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDY1NTM1LCBnb3QgJHtwb3J0fWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3RvY29sTmFtZTogUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWc6IENmblJvdXRlck91dHB1dC5Sb3V0ZXJPdXRwdXRQcm90b2NvbENvbmZpZ3VyYXRpb25Qcm9wZXJ0eTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5jcnlwdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb247XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICBwcm90b2NvbE5hbWU6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyxcbiAgICBjb25maWc6IENmblJvdXRlck91dHB1dC5Sb3V0ZXJPdXRwdXRQcm90b2NvbENvbmZpZ3VyYXRpb25Qcm9wZXJ0eSxcbiAgICBlbmNyeXB0aW9uPzogUm91dGVyU3J0RW5jcnlwdGlvbixcbiAgKSB7XG4gICAgdGhpcy5fcHJvdG9jb2xOYW1lID0gcHJvdG9jb2xOYW1lO1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLl9lbmNyeXB0aW9uID0gZW5jcnlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoaXMgcHJvdG9jb2wgdG8gaXRzIENGTi1yZWFkeSBmb3JtLiBSZXR1cm5zIHRoZSBwcm90b2NvbCBpZGVudGlmaWVyXG4gICAqIGFuZCB0aGUgQ0ZOIGNvbmZpZ3VyYXRpb24gc2hhcGUgd2l0aCBTUlQgZW5jcnlwdGlvbiBhdXRvLXJvbGUgbWF0ZXJpYWxpemVkIGlmIG5lZWRlZC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlICAgICAgICAgICAgIENvbnN0cnVjdCB0aGF0IHNjb3BlcyB0aGUgYXV0by1jcmVhdGVkIGVuY3J5cHRpb24gcm9sZVxuICAgKiBAcGFyYW0gcm91dGVyT3V0cHV0QXJuICAgT3B0aW9uYWwgQVJOIG9mIHRoZSBjb25zdW1pbmcgcm91dGVyIG91dHB1dCDigJQgd2hlbiBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlcyB0aGUgYXV0by1jcmVhdGVkIGVuY3J5cHRpb24gcm9sZSdzIHRydXN0IHBvbGljeS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKToge1xuICAgIG5hbWU6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucztcbiAgICBjb25maWc6IENmblJvdXRlck91dHB1dC5Sb3V0ZXJPdXRwdXRQcm90b2NvbENvbmZpZ3VyYXRpb25Qcm9wZXJ0eTtcbiAgICBncmFudD86IEdyYW50O1xuICB9IHtcbiAgICBpZiAoIXRoaXMuX2VuY3J5cHRpb24pIHtcbiAgICAgIHJldHVybiB7IG5hbWU6IHRoaXMuX3Byb3RvY29sTmFtZSwgY29uZmlnOiB0aGlzLl9jb25maWcgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNvbmZpZzogZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24sIGdyYW50IH0gPSByZXNvbHZlUm91dGVyU3J0RW5jcnlwdGlvbihzY29wZSwgJ0VuY3J5cHRpb25Sb2xlJywgdGhpcy5fZW5jcnlwdGlvbiwgcm91dGVyT3V0cHV0QXJuKTtcblxuICAgIGlmICh0aGlzLl9jb25maWcuc3J0TGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHRoaXMuX3Byb3RvY29sTmFtZSxcbiAgICAgICAgY29uZmlnOiB7IHNydExpc3RlbmVyOiB7IC4uLnRoaXMuX2NvbmZpZy5zcnRMaXN0ZW5lciwgZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24gfSB9LFxuICAgICAgICBncmFudCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcuc3J0Q2FsbGVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsXG4gICAgICAgIGNvbmZpZzogeyBzcnRDYWxsZXI6IHsgLi4udGhpcy5fY29uZmlnLnNydENhbGxlciwgZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24gfSB9LFxuICAgICAgICBncmFudCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IG5hbWU6IHRoaXMuX3Byb3RvY29sTmFtZSwgY29uZmlnOiB0aGlzLl9jb25maWcgfTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHN0YW5kYXJkIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkT3V0cHV0Q29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqIE5ldHdvcmsgaW50ZXJmYWNlIGZvciB0aGUgUm91dGVyIE91dHB1dCAqL1xuICByZWFkb25seSBuZXR3b3JrSW50ZXJmYWNlOiBJUm91dGVyTmV0d29ya0ludGVyZmFjZTtcbiAgLyoqIFByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBvdXRwdXQgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2w6IFJvdXRlck91dHB1dFByb3RvY29sO1xuICAvKipcbiAgICogVGhlIGF2YWlsYWJpbGl0eSB6b25lIHdoZXJlIHRoZSByb3V0ZXIgb3V0cHV0IGlzIGxvY2F0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXNzaWduZWQgYnkgdGhlIE1lZGlhQ29ubmVjdCBzZXJ2aWNlXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIE1lZGlhTGl2ZSBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aCBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFMaXZlSW5wdXRDb25uZWN0aW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIE1lZGlhTGl2ZSBpbnB1dCB0byBzZW5kIG91dHB1dCB0byAobXVzdCBiZSBvZiB0eXBlIGBtZWRpYWxpdmUuSW5wdXRDb25maWd1cmF0aW9uLm1lZGlhQ29ubmVjdFJvdXRlcigpYCkuXG4gICAqL1xuICByZWFkb25seSBpbnB1dDogSUlucHV0UmVmO1xuICAvKiogTWVkaWFMaXZlIHBpcGVsaW5lIHRvIHNlbmQgb3V0cHV0IHRvICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBNZWRpYUxpdmVQaXBlbGluZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFMaXZlIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbiB3aXRob3V0IHNwZWNpZmljIGlucHV0IGNvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZWRpYUxpdmVOb0lucHV0Q29ubmVjdGlvblByb3BzIHtcbiAgLyoqIEF2YWlsYWJpbGl0eSB6b25lIGZvciB0aGUgcm91dGVyIG91dHB1dCB3aGVuIG5vdCBjb25uZWN0aW5nIHRvIGEgc3BlY2lmaWMgaW5wdXQgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgdHJhbnNpdCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBBdXRvbWF0aWMgZW5jcnlwdGlvbiB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aCBzcGVjaWZpYyBmbG93IGNvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZWRpYUNvbm5lY3RGbG93Q29ubmVjdGlvblByb3BzIHtcbiAgLyoqIE1lZGlhQ29ubmVjdCBGbG93IHRvIHNlbmQgb3V0cHV0IHRvICovXG4gIHJlYWRvbmx5IGZsb3c6IElGbG93O1xuICAvKipcbiAgICogT3B0aW9uYWwgdHJhbnNpdCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBBdXRvbWF0aWMgZW5jcnlwdGlvbiB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBzcGVjaWZpYyBmbG93IGNvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZWRpYUNvbm5lY3RGbG93Tm9Db25uZWN0aW9uUHJvcHMge1xuICAvKiogQXZhaWxhYmlsaXR5IHpvbmUgZm9yIHRoZSByb3V0ZXIgb3V0cHV0IHdoZW4gbm90IGNvbm5lY3RpbmcgdG8gYSBzcGVjaWZpYyBmbG93ICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogRmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdGFuZGFyZCBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHNpbmdsZSBwcm90b2NvbFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBkZWNsYXJlIGNvbnN0IG5ldHdvcmtJbnRlcmZhY2U6IFJvdXRlck5ldHdvcmtJbnRlcmZhY2U7XG4gICAqXG4gICAqICAgIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24uc3RhbmRhcmQoe1xuICAgKiAgICAgIG5ldHdvcmtJbnRlcmZhY2UsXG4gICAqICAgICAgcHJvdG9jb2w6IFJvdXRlck91dHB1dFByb3RvY29sLnJ0cCh7XG4gICAqICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgICBwb3J0OiA1MDAwLFxuICAgKiAgICAgIH0pLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBzdGFuZGFyZCBzZXR1cFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzdGFuZGFyZChwcm9wczogU3RhbmRhcmRPdXRwdXRDb25maWd1cmF0aW9uUHJvcHMpOiBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IFN0YW5kYXJkUm91dGVyT3V0cHV0Q29uZmlnKHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUxpdmUgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggYSBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHRoZSBNZWRpYUxpdmUgaW5wdXQgYWxyZWFkeSBleGlzdHMgYW5kIHlvdSB3YW50IHRvIGNvbm5lY3QgaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUxpdmUgaW5wdXQgY29ubmVjdGlvbiBwcm9wZXJ0aWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1lZGlhTGl2ZUlucHV0KHByb3BzOiBNZWRpYUxpdmVJbnB1dENvbm5lY3Rpb25Qcm9wcyk6IFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRDb25maWcoe1xuICAgICAgbWVkaWFMaXZlSW5wdXRBcm46IHByb3BzLmlucHV0LmlucHV0UmVmLmlucHV0QXJuLFxuICAgICAgbWVkaWFMaXZlUGlwZWxpbmVJZDogcHJvcHMucGlwZWxpbmUsXG4gICAgICBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uOiBwcm9wcy5kZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1lZGlhTGl2ZSBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBhIHNwZWNpZmljIGlucHV0IGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIHdoZW4geW91IHdhbnQgdG8gc2V0IHVwIHRoZSByb3V0ZXIgb3V0cHV0IGJlZm9yZSB0aGUgTWVkaWFMaXZlIGlucHV0IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhTGl2ZSBubyBpbnB1dCBjb25uZWN0aW9uIHByb3BlcnRpZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWVkaWFMaXZlSW5wdXRXaXRob3V0Q29ubmVjdGlvbihwcm9wczogTWVkaWFMaXZlTm9JbnB1dENvbm5lY3Rpb25Qcm9wcyk6IFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRDb25maWcoXG4gICAgICB7IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb246IHByb3BzLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24gfSxcbiAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUNvbm5lY3QgRmxvdyBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHNwZWNpZmljIGZsb3cgY29ubmVjdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB0aGUgdGFyZ2V0IGZsb3cgYWxyZWFkeSBleGlzdHMgYW5kIHlvdSB3YW50IHRvIGNvbm5lY3QgaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIGRlY2xhcmUgY29uc3QgZmxvdzogRmxvdztcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbi5tZWRpYUNvbm5lY3RGbG93KHtcbiAgICogICAgICBmbG93LFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhQ29ubmVjdCBGbG93IGNvbm5lY3Rpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBzZXR1cCB3aXRoIGZsb3cgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUNvbm5lY3RGbG93KHByb3BzOiBNZWRpYUNvbm5lY3RGbG93Q29ubmVjdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBNZWRpYUNvbm5lY3RGbG93Um91dGVyT3V0cHV0Q29uZmlnKHtcbiAgICAgIGZsb3c6IHByb3BzLmZsb3csXG4gICAgICBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uOiBwcm9wcy5kZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1lZGlhQ29ubmVjdCBGbG93IFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbiB3aXRob3V0IGEgc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHlvdSB3YW50IHRvIHNldCB1cCB0aGUgcm91dGVyIG91dHB1dCBiZWZvcmUgdGhlIHRhcmdldCBmbG93IGV4aXN0cy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbi5tZWRpYUNvbm5lY3RGbG93V2l0aG91dENvbm5lY3Rpb24oe1xuICAgKiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6ICd1cy1lYXN0LTFhJyxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUNvbm5lY3QgRmxvdyBubyBjb25uZWN0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3IgTWVkaWFDb25uZWN0IEZsb3cgc2V0dXAgd2l0aG91dCBmbG93IGNvbm5lY3Rpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWVkaWFDb25uZWN0Rmxvd1dpdGhvdXRDb25uZWN0aW9uKHByb3BzOiBNZWRpYUNvbm5lY3RGbG93Tm9Db25uZWN0aW9uUHJvcHMpOiBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRDb25maWcoXG4gICAgICB7IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb246IHByb3BzLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24gfSxcbiAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoaXMgY29uZmlndXJhdGlvbiB0byBpdHMgQ2xvdWRGb3JtYXRpb24gc2hhcGUuIENhbGxlZCBieSB0aGUgUm91dGVyT3V0cHV0XG4gICAqIGNvbnN0cnVjdG9yIOKAlCBlYWNoIGNvbmNyZXRlIHN1YmNsYXNzIHN1cHBsaWVzIGl0cyBvd24gdmFyaWFudC1zcGVjaWZpYyByZW5kZXJpbmcuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlck91dHB1dEFybj86IHN0cmluZyk6IHtcbiAgICBjb25maWc6IENmblJvdXRlck91dHB1dC5Sb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uUHJvcGVydHk7IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7IGdyYW50PzogR3JhbnQ7XG4gIH07XG59XG5cbi8qKlxuICogQ29uY3JldGUgdmFyaWFudDogc3RhbmRhcmQgKHNpbmdsZS1wcm90b2NvbCkgcm91dGVyIG91dHB1dCBjb25maWd1cmF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFN0YW5kYXJkUm91dGVyT3V0cHV0Q29uZmlnIGV4dGVuZHMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IFN0YW5kYXJkT3V0cHV0Q29uZmlndXJhdGlvblByb3BzKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvdG9jb2wgPSB0aGlzLnByb3BzLnByb3RvY29sLl9iaW5kKHNjb3BlLCByb3V0ZXJPdXRwdXRBcm4pO1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgc3RhbmRhcmQ6IHtcbiAgICAgICAgICBuZXR3b3JrSW50ZXJmYWNlQXJuOiB0aGlzLnByb3BzLm5ldHdvcmtJbnRlcmZhY2Uucm91dGVyTmV0d29ya0ludGVyZmFjZUFybixcbiAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wubmFtZS52YWx1ZSxcbiAgICAgICAgICBwcm90b2NvbENvbmZpZ3VyYXRpb246IHByb3RvY29sLmNvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiB0aGlzLnByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBncmFudDogcHJvdG9jb2wuZ3JhbnQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmNyZXRlIHZhcmlhbnQ6IE1lZGlhTGl2ZSBJbnB1dCByb3V0ZXIgb3V0cHV0IGNvbmZpZ3VyYXRpb24gKHdpdGggb3Igd2l0aG91dCBjb25uZWN0aW9uKS5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dENvbmZpZyBleHRlbmRzIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE1lZGlhTGl2ZUlucHV0Um91dGVyT3V0cHV0T3B0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmcsXG4gICkgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlck91dHB1dEFybj86IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zaXQgPSByZXNvbHZlVHJhbnNpdEVuY3J5cHRpb24oc2NvcGUsICdEZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uUm9sZScsIHRoaXMub3B0aW9ucy5kZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uLCByb3V0ZXJPdXRwdXRBcm4pO1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgbWVkaWFMaXZlSW5wdXQ6IHtcbiAgICAgICAgICBtZWRpYUxpdmVJbnB1dEFybjogdGhpcy5vcHRpb25zLm1lZGlhTGl2ZUlucHV0QXJuLFxuICAgICAgICAgIG1lZGlhTGl2ZVBpcGVsaW5lSWQ6IHRoaXMub3B0aW9ucy5tZWRpYUxpdmVQaXBlbGluZUlkLFxuICAgICAgICAgIGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb246IHRyYW5zaXQuY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHRoaXMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgIGdyYW50OiB0cmFuc2l0LmdyYW50LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBvcHRpb25zIGZvciB7QGxpbmsgTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRDb25maWd9LlxuICovXG5pbnRlcmZhY2UgTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRPcHRpb25zIHtcbiAgcmVhZG9ubHkgbWVkaWFMaXZlSW5wdXRBcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lZGlhTGl2ZVBpcGVsaW5lSWQ/OiBNZWRpYUxpdmVQaXBlbGluZTtcbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIENvbmNyZXRlIHZhcmlhbnQ6IE1lZGlhQ29ubmVjdCBGbG93IHJvdXRlciBvdXRwdXQgY29uZmlndXJhdGlvbiAod2l0aCBvciB3aXRob3V0IGNvbm5lY3Rpb24pLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRDb25maWcgZXh0ZW5kcyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBNZWRpYUNvbm5lY3RGbG93Um91dGVyT3V0cHV0T3B0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmcsXG4gICkgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlck91dHB1dEFybj86IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zaXQgPSByZXNvbHZlVHJhbnNpdEVuY3J5cHRpb24oc2NvcGUsICdEZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uUm9sZScsIHRoaXMub3B0aW9ucy5kZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uLCByb3V0ZXJPdXRwdXRBcm4pO1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgbWVkaWFDb25uZWN0Rmxvdzoge1xuICAgICAgICAgIGZsb3dBcm46IHRoaXMub3B0aW9ucy5mbG93Py5mbG93QXJuLFxuICAgICAgICAgIGZsb3dTb3VyY2VBcm46IHRoaXMub3B0aW9ucy5mbG93Py5zb3VyY2VBcm4sXG4gICAgICAgICAgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogdHJhbnNpdC5jb25maWcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgZ3JhbnQ6IHRyYW5zaXQuZ3JhbnQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVybmFsIG9wdGlvbnMgZm9yIHtAbGluayBNZWRpYUNvbm5lY3RGbG93Um91dGVyT3V0cHV0Q29uZmlnfS5cbiAqL1xuaW50ZXJmYWNlIE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRPcHRpb25zIHtcbiAgcmVhZG9ubHkgZmxvdz86IElGbG93O1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogQSBNZWRpYUNvbm5lY3QgUm91dGVyIE91dHB1dCB0aGF0IHNlbmRzIG1lZGlhIHN0cmVhbXMgdG8gZGVzdGluYXRpb25zLlxuICpcbiAqIFJvdXRlciBPdXRwdXRzIHN1cHBvcnQgbXVsdGlwbGUgY29uZmlndXJhdGlvbiB0eXBlczpcbiAqIC0gU3RhbmRhcmQ6IFNpbmdsZSBwcm90b2NvbCBvdXRwdXRcbiAqIC0gTWVkaWFMaXZlIElucHV0OiBPdXRwdXQgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUxpdmVcbiAqIC0gTWVkaWFDb25uZWN0IEZsb3c6IE91dHB1dCB0byBhbm90aGVyIE1lZGlhQ29ubmVjdCBGbG93XG4gKi9cbmFic3RyYWN0IGNsYXNzIFJvdXRlck91dHB1dEJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZXJPdXRwdXQge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb3V0ZXJPdXRwdXROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb3V0ZXJPdXRwdXRJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaXBBZGRyZXNzOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoaXMgUm91dGVyIE91dHB1dCByZXNvdXJjZS5cbiAgICogUmVxdWlyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIElSb3V0ZXJPdXRwdXRSZWYgaW50ZXJmYWNlLlxuICAgKi9cbiAgcHVibGljIGdldCByb3V0ZXJPdXRwdXRSZWYoKTogUm91dGVyT3V0cHV0UmVmZXJlbmNlIHtcbiAgICByZXR1cm4geyByb3V0ZXJPdXRwdXRBcm46IHRoaXMucm91dGVyT3V0cHV0QXJuIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRoaXMgcm91dGVyIG91dHB1dC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuYW1lc3BhY2U6ICdBV1MvTWVkaWFDb25uZWN0JyxcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBSb3V0ZXJPdXRwdXRBUk46IHRoaXMucm91dGVyT3V0cHV0QXJuLFxuICAgICAgICAuLi5wcm9wcz8uZGltZW5zaW9uc01hcCxcbiAgICAgIH0sXG4gICAgfSkuYXR0YWNoVG8odGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgYml0cmF0ZSBvZiB0aGUgcm91dGVyIG91dHB1dCdzIHBheWxvYWQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQml0cmF0ZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVyT3V0cHV0Qml0UmF0ZScsIHtcbiAgICAgIHN0YXRpc3RpYzogJ2F2ZycsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5CSVRTX1BFUl9TRUNPTkQsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBzZW50IGJ5IHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKi9cbiAgcHVibGljIG1ldHJpY1RvdGFsUGFja2V0cyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVyT3V0cHV0VG90YWxQYWNrZXRzJywge1xuICAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkNPVU5ULFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgcm91dGVyIG91dHB1dCBjb25uZWN0aW9uIHN0YXRlICgxIGNvbm5lY3RlZCwgMCBkaXNjb25uZWN0ZWQpLiBBcHBsaWVzIHRvIFNSVCBvdXRwdXRzIG9ubHkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQ29ubmVjdGVkKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJPdXRwdXRDb25uZWN0ZWQnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdtaW4nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuTk9ORSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIG51bWJlciBvZiByZXRyYW5zbWl0dGVkIHBhY2tldHMgcmVxdWVzdGVkIHRocm91Z2ggQVJRLiBBcHBsaWVzIHRvIFJJU1QgYW5kIFNSVCBvdXRwdXRzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0FycVJlcXVlc3RzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJPdXRwdXRBUlFSZXF1ZXN0cycsIHtcbiAgICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5DT1VOVCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBBV1MgRWxlbWVudGFsIE1lZGlhQ29ubmVjdCBSb3V0ZXIgT3V0cHV0LlxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgUm91dGVyT3V0cHV0IGV4dGVuZHMgUm91dGVyT3V0cHV0QmFzZSBpbXBsZW1lbnRzIElSb3V0ZXJPdXRwdXQge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1tZWRpYWNvbm5lY3QtYWxwaGEuUm91dGVyT3V0cHV0JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIFJvdXRlciBPdXRwdXQgZnJvbSBpdHMgQVJOLlxuICAgKlxuICAgKiBUaGUgQVJOIG9ubHkgY29udGFpbnMgdGhlIHNlcnZpY2UtZ2VuZXJhdGVkIElEIChub3QgdGhlIHJvdXRlciBvdXRwdXQgbmFtZSkuIEFjY2Vzc2luZ1xuICAgKiBgcm91dGVyT3V0cHV0TmFtZWAgb24gYW4gQVJOIGltcG9ydCB0aHJvd3Mg4oCUIHVzZSBgZnJvbVJvdXRlck91dHB1dEF0dHJpYnV0ZXMoKWAgdG8gcHJvdmlkZVxuICAgKiB0aGUgbmFtZSBleHBsaWNpdGx5LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIHJvdXRlck91dHB1dEFybiBUaGUgQVJOIG9mIHRoZSBSb3V0ZXIgT3V0cHV0XG4gICAqIEByZXR1cm5zIEEgUm91dGVyIE91dHB1dCBjb25zdHJ1Y3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVJvdXRlck91dHB1dEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCByb3V0ZXJPdXRwdXRBcm46IHN0cmluZyk6IElSb3V0ZXJPdXRwdXQge1xuICAgIHJldHVybiBSb3V0ZXJPdXRwdXQuZnJvbVJvdXRlck91dHB1dEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IHJvdXRlck91dHB1dEFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgUm91dGVyIE91dHB1dCBmcm9tIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIFVzZSB0aGlzIHdoZW4geW91IG5lZWQgdG8gcmVmZXJlbmNlIGEgcm91dGVyIG91dHB1dCBieSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBSb3V0ZXIgT3V0cHV0IGF0dHJpYnV0ZXNcbiAgICogQHJldHVybnMgQSBSb3V0ZXIgT3V0cHV0IGNvbnN0cnVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUm91dGVyT3V0cHV0QXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogUm91dGVyT3V0cHV0QXR0cmlidXRlcyk6IElSb3V0ZXJPdXRwdXQge1xuICAgIC8vIERlcml2ZSB0aGUgSUQgZnJvbSB0aGUgQVJOIHVzaW5nIENGTiBpbnRyaW5zaWNzIHNvIHRoaXMgd29ya3Mgd2l0aCB0b2tlbiBBUk5zIHRvby5cbiAgICAvLyBUaGUgQVJOIGZvcm1hdCBpcyBhcm46YXdzOm1lZGlhY29ubmVjdDo8cmVnaW9uPjo8YWNjb3VudD46cm91dGVyT3V0cHV0OjxpZD4sIHNvIHRoZVxuICAgIC8vIHJlc291cmNlIG5hbWUgaXMgdGhlIElELlxuICAgIGNvbnN0IHJvdXRlck91dHB1dElkID0gYXR0cnMucm91dGVyT3V0cHV0SWQgPz8gZXh0cmFjdFJvdXRlck91dHB1dElkKGF0dHJzLnJvdXRlck91dHB1dEFybik7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBSb3V0ZXJPdXRwdXRCYXNlIGltcGxlbWVudHMgSVJvdXRlck91dHB1dCB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuID0gYXR0cnMucm91dGVyT3V0cHV0QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvdXRlck91dHB1dElkID0gcm91dGVyT3V0cHV0SWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdCA9IHVuZGVmaW5lZDtcblxuICAgICAgcHVibGljIGdldCByb3V0ZXJPdXRwdXROYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChhdHRycy5yb3V0ZXJPdXRwdXROYW1lKSByZXR1cm4gYXR0cnMucm91dGVyT3V0cHV0TmFtZTtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUm91dGVyT3V0cHV0TmFtZU5vdFByb3ZpZGVkYCxcbiAgICAgICAgICBgJ3JvdXRlck91dHB1dE5hbWUnIHdhcyBub3QgcHJvdmlkZWQgd2hlbiBpbXBvcnRpbmcgUm91dGVyT3V0cHV0ICR7dGhpcy5ub2RlLnBhdGh9OyBwcm92aWRlIGl0IGluIGZyb21Sb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzKClgLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgaXBBZGRyZXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgbGl0YFJvdXRlck91dHB1dElwQWRkcmVzc05vdFByb3ZpZGVkYCxcbiAgICAgICAgICBgJ2lwQWRkcmVzcycgaXMgbm90IGF2YWlsYWJsZSBvbiBpbXBvcnRlZCBSb3V0ZXJPdXRwdXQgJHt0aGlzLm5vZGUucGF0aH1gLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWF4aW11bSBiaXRyYXRlIGluIE1icHMgZm9yIGEga25vd24gdGllciwgb3IgdW5kZWZpbmVkIGZvciBjdXN0b20gdGllcnMuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB0aWVyTGltaXRNYnBzKHRpZXI6IFJvdXRlck91dHB1dFRpZXIpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aWVyLnZhbHVlID09PSBSb3V0ZXJPdXRwdXRUaWVyLk9VVFBVVF8yMC52YWx1ZSkgcmV0dXJuIDIwO1xuICAgIGlmICh0aWVyLnZhbHVlID09PSBSb3V0ZXJPdXRwdXRUaWVyLk9VVFBVVF81MC52YWx1ZSkgcmV0dXJuIDUwO1xuICAgIGlmICh0aWVyLnZhbHVlID09PSBSb3V0ZXJPdXRwdXRUaWVyLk9VVFBVVF8xMDAudmFsdWUpIHJldHVybiAxMDA7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJPdXRwdXRBcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlck91dHB1dE5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlck91dHB1dElkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBpcEFkZHJlc3M6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm91dGVyT3V0cHV0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMucm91dGVyT3V0cHV0TmFtZSA/PyBMYXp5LnN0cmluZyh7IHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogMTI4IH0pIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgcm91dGVyIG91dHB1dCBuYW1lIGlmIHByb3ZpZGVkXG4gICAgaWYgKHByb3BzLnJvdXRlck91dHB1dE5hbWUgIT0gbnVsbCAmJiBwcm9wcy5yb3V0ZXJPdXRwdXROYW1lICE9PSAnJyAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLnJvdXRlck91dHB1dE5hbWUpKSB7XG4gICAgICBpZiAocHJvcHMucm91dGVyT3V0cHV0TmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0TmFtZUxlbmd0aGAsIGBSb3V0ZXIgb3V0cHV0IG5hbWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEyOCBjaGFyYWN0ZXJzLCBnb3QgJHtwcm9wcy5yb3V0ZXJPdXRwdXROYW1lLmxlbmd0aH1gLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIGlmICghL15bYS16QS1aMC05Xy1dKyQvLnRlc3QocHJvcHMucm91dGVyT3V0cHV0TmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0TmFtZUZvcm1hdGAsIGBSb3V0ZXIgb3V0cHV0IG5hbWUgbXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3JlcywgZ290ICcke3Byb3BzLnJvdXRlck91dHB1dE5hbWV9J2AsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1heGltdW0gYml0cmF0ZVxuICAgIGlmICghcHJvcHMubWF4aW11bUJpdHJhdGUuaXNVbnJlc29sdmVkKCkgJiYgcHJvcHMubWF4aW11bUJpdHJhdGUudG9CcHMoKSA8IDEwMDAwMDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dE1pbkJpdHJhdGVgLCBgTWF4aW11bSBiaXRyYXRlIG11c3QgYmUgYXQgbGVhc3QgMSwwMDAsMDAwIGJpdHMvcyAoMSBNYnBzKSwgZ290ICR7cHJvcHMubWF4aW11bUJpdHJhdGUudG9CcHMoKX1gLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBiaXRyYXRlIGRvZXMgbm90IGV4Y2VlZCB0aWVyIGxpbWl0XG4gICAgY29uc3QgcmVzb2x2ZWRUaWVyID0gcHJvcHMudGllciA/PyBSb3V0ZXJPdXRwdXRUaWVyLk9VVFBVVF8yMDtcbiAgICBjb25zdCB0aWVyTWJwcyA9IFJvdXRlck91dHB1dC50aWVyTGltaXRNYnBzKHJlc29sdmVkVGllcik7XG4gICAgaWYgKGV4Y2VlZHNSb3V0ZXJUaWVyQml0cmF0ZSh0aWVyTWJwcywgcHJvcHMubWF4aW11bUJpdHJhdGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSb3V0ZXJPdXRwdXRCaXRyYXRlRXhjZWVkc1RpZXJgLCBgTWF4aW11bSBiaXRyYXRlICR7cHJvcHMubWF4aW11bUJpdHJhdGUudG9CcHMoKSAvIDFfMDAwXzAwMH0gTWJwcyBleGNlZWRzIHRoZSAke3Jlc29sdmVkVGllci52YWx1ZX0gdGllciBsaW1pdCBvZiAke3RpZXJNYnBzfSBNYnBzYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWFpbnRlbmFuY2UgdGltZSBmb3JtYXRcbiAgICBpZiAocHJvcHMubWFpbnRlbmFuY2VDb25maWd1cmF0aW9uKSB7XG4gICAgICB2YWxpZGF0ZU1haW50ZW5hbmNlVGltZShwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24udGltZSk7XG4gICAgfVxuXG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IHRhcmdldFJlZ2lvbiA9IHByb3BzLnJlZ2lvbk5hbWUgPz8gc3RhY2sucmVnaW9uO1xuXG4gICAgLy8gV2lsZGNhcmQgdGhlIGlkIOKAlCBwaW5uaW5nIHRoZSBsaXZlIEFSTiAoYXR0ckFybikgd291bGQgY3JlYXRlIGEgcm9sZSDihpIgcm91dGVyLW91dHB1dCDihpIgcm9sZSBjeWNsZS5cbiAgICBjb25zdCByb3V0ZXJPdXRwdXRBcm4gPSBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ21lZGlhY29ubmVjdCcsXG4gICAgICByZWdpb246IHRhcmdldFJlZ2lvbixcbiAgICAgIHJlc291cmNlOiAncm91dGVyT3V0cHV0JyxcbiAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbmZpZ0JpbmQgPSBwcm9wcy5jb25maWd1cmF0aW9uLl9iaW5kKHRoaXMsIHJvdXRlck91dHB1dEFybik7XG5cbiAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVnaW9uIHNwZWNpZmllZCBpcyBhbHNvIGNvbXBhdGlibGUgd2l0aCBBWiBjb25maWd1cmVkIGZvciBzb21lIG9mIHRoZSBSb3V0ZXIgT3V0cHV0cyBjb25maWd1cmF0aW9uc1xuICAgIGlmIChjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmUgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmUpICYmICFUb2tlbi5pc1VucmVzb2x2ZWQodGFyZ2V0UmVnaW9uKVxuICAgICAgJiYgIWNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZS5zdGFydHNXaXRoKHRhcmdldFJlZ2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dEF6UmVnaW9uTWlzbWF0Y2hgLCBgQXZhaWxhYmlsaXR5IHpvbmUgJyR7Y29uZmlnQmluZC5hdmFpbGFiaWxpdHlab25lfScgbXVzdCBiZSB3aXRoaW4gcmVnaW9uICcke3RhcmdldFJlZ2lvbn0nYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVyT3V0cHV0ID0gbmV3IENmblJvdXRlck91dHB1dCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIG1heGltdW1CaXRyYXRlOiBwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpLFxuICAgICAgcm91dGluZ1Njb3BlOiBwcm9wcy5yb3V0aW5nU2NvcGUudmFsdWUsXG4gICAgICB0aWVyOiAocHJvcHMudGllciA/PyBSb3V0ZXJPdXRwdXRUaWVyLk9VVFBVVF8yMCkudmFsdWUsXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiBjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBtYWludGVuYW5jZUNvbmZpZ3VyYXRpb246IHByb3BzLm1haW50ZW5hbmNlQ29uZmlndXJhdGlvbiA/IHtcbiAgICAgICAgcHJlZmVycmVkRGF5VGltZTogcHJvcHMubWFpbnRlbmFuY2VDb25maWd1cmF0aW9uLFxuICAgICAgfSA6IHtcbiAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICB9LFxuICAgICAgY29uZmlndXJhdGlvbjogY29uZmlnQmluZC5jb25maWcsXG4gICAgICByZWdpb25OYW1lOiB0YXJnZXRSZWdpb24sXG4gICAgICB0YWdzOiBwcm9wcy50YWdzID8gcmVuZGVyVGFncyhwcm9wcy50YWdzKSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHRoaXMucm91dGVyT3V0cHV0QXJuID0gcm91dGVyT3V0cHV0LmF0dHJBcm47XG4gICAgdGhpcy5yb3V0ZXJPdXRwdXROYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy5yb3V0ZXJPdXRwdXRJZCA9IHJvdXRlck91dHB1dC5hdHRySWQ7XG4gICAgdGhpcy5pcEFkZHJlc3MgPSByb3V0ZXJPdXRwdXQuYXR0cklwQWRkcmVzcztcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHJvdXRlck91dHB1dC5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMudXBkYXRlZEF0ID0gcm91dGVyT3V0cHV0LmF0dHJVcGRhdGVkQXQ7XG5cbiAgICAvLyBXaXRob3V0IHRoaXMgdGhlIHJvdXRlciBpbnB1dCBjYW4gYmUgY3JlYXRlZCBiZWZvcmUgdGhlXG4gICAgLy8gcG9saWN5IGlzIGF0dGFjaGVkIChcImFjY2VzcyBkZW5pZWRcIiBhdCBjcmVhdGUgdGltZSkuIE9yZGVyaW5nIHRoZSBncmFudCBiZWZvcmUgdGhlXG4gICAgLy8gcm91dGVyIGlucHV0IHB1bGxzIHRoZSBwb2xpY3kgaW4gYXMgYSBkZXBlbmRlbmN5LlxuICAgIGNvbmZpZ0JpbmQuZ3JhbnQ/LmFwcGx5QmVmb3JlKHJvdXRlck91dHB1dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdFJvdXRlck91dHB1dElkKHJvdXRlck91dHB1dEFybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyc2VkID0gQXJuLnNwbGl0KHJvdXRlck91dHB1dEFybiwgQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUpLnJlc291cmNlTmFtZTtcbiAgaWYgKHBhcnNlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgbGl0YEludmFsaWRSb3V0ZXJPdXRwdXRBcm5gLFxuICAgICAgYENvdWxkIG5vdCBwYXJzZSBSb3V0ZXIgT3V0cHV0IEFSTjogJHtyb3V0ZXJPdXRwdXRBcm59LiBFeHBlY3RlZCBmb3JtYXQ6IGFybjo8cGFydGl0aW9uPjptZWRpYWNvbm5lY3Q6PHJlZ2lvbj46PGFjY291bnQ+OnJvdXRlck91dHB1dDo8aWQ+YCxcbiAgICApO1xuICB9XG4gIHJldHVybiBwYXJzZWQ7XG59XG4iXX0=
|
|
777
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLW91dHB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJvdXRlci1vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQXNJO0FBRXRJLCtEQUEwRDtBQUUxRCxtRUFBK0Q7QUFHL0QsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFNMUUscUNBQStJO0FBRS9JOztHQUVHO0FBQ0gsTUFBYSwyQkFBMkI7SUFtQkY7O0lBbEJwQyxtQ0FBbUM7SUFDNUIsTUFBTSxDQUFVLEdBQUcsR0FBRyxJQUFJLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLHlDQUF5QztJQUNsQyxNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEUsOENBQThDO0lBQ3ZDLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRixnREFBZ0Q7SUFDekMsTUFBTSxDQUFVLFlBQVksR0FBRyxJQUFJLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXRGOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBYTtRQUM1QixPQUFPLElBQUksMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDL0M7SUFFRCw2Q0FBNkM7SUFDN0MsWUFBb0MsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7S0FBSTtJQUVyRCwrQkFBK0I7SUFDeEIsUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQjs7QUF4Qkgsa0VBeUJDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFpQlM7O0lBaEJwQyxxQkFBcUI7SUFDZCxNQUFNLENBQVUsVUFBVSxHQUFHLElBQUksZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkUsb0JB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RSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDN0M7O1lBaktVLHVEQUFZOzs7OztBQUFaLG9DQUFZO0FBb0t6QixTQUFTLHFCQUFxQixDQUFDLGVBQXVCO0lBQ3BELE1BQU0sTUFBTSxHQUFHLGlCQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSx1QkFBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3RGLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxxQ0FBdUIsQ0FDL0IsSUFBQSxzQkFBRyxFQUFBLHdCQUF3QixFQUMzQixzQ0FBc0MsZUFBZSxzRkFBc0YsQ0FDNUksQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCaXRyYXRlLCBJUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBcm4sIEFybkZvcm1hdCwgRHVyYXRpb24sIExhenksIE5hbWVzLCBSZXNvdXJjZSwgU3RhY2ssIFRva2VuLCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNPcHRpb25zIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgTWV0cmljLCBVbml0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHR5cGUgeyBHcmFudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ2ZuUm91dGVyT3V0cHV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW1lZGlhY29ubmVjdCc7XG5pbXBvcnQgdHlwZSB7IElSb3V0ZXJPdXRwdXRSZWYsIFJvdXRlck91dHB1dFJlZmVyZW5jZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1tZWRpYWNvbm5lY3QnO1xuaW1wb3J0IHR5cGUgeyBJSW5wdXRSZWYgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFsaXZlJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSUZsb3cgfSBmcm9tICcuL2Zsb3cnO1xuaW1wb3J0IHR5cGUgeyBNYWludGVuYW5jZUNvbmZpZ3VyYXRpb24sIEZvcndhcmRFcnJvckNvcnJlY3Rpb24sIFJvdXRpbmdTY29wZSB9IGZyb20gJy4vcm91dGVyLWlucHV0JztcbmltcG9ydCB0eXBlIHsgSVJvdXRlck5ldHdvcmtJbnRlcmZhY2UgfSBmcm9tICcuL3JvdXRlci1uZXR3b3JrLWludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE1lZGlhTGl2ZVBpcGVsaW5lLCBSb3V0ZXJTcnRFbmNyeXB0aW9uLCBUcmFuc2l0RW5jcnlwdGlvbiB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IHJlbmRlclRhZ3MsIGV4Y2VlZHNSb3V0ZXJUaWVyQml0cmF0ZSwgcmVzb2x2ZVJvdXRlclNydEVuY3J5cHRpb24sIHJlc29sdmVUcmFuc2l0RW5jcnlwdGlvbiwgdmFsaWRhdGVNYWludGVuYW5jZVRpbWUgfSBmcm9tICcuL3NoYXJlZCc7XG5cbi8qKlxuICogUHJvdG9jb2wgb3B0aW9ucyBhdmFpbGFibGUgZm9yIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyB7XG4gIC8qKiBSZWFsLXRpbWUgVHJhbnNwb3J0IFByb3RvY29sICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlRQID0gbmV3IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucygnUlRQJyk7XG4gIC8qKiBSZWxpYWJsZSBJbnRlcm5ldCBTdHJlYW0gVHJhbnNwb3J0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUklTVCA9IG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMoJ1JJU1QnKTtcbiAgLyoqIFNlY3VyZSBSZWxpYWJsZSBUcmFuc3BvcnQgLSBDYWxsZXIgbW9kZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNSVF9DQUxMRVIgPSBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zKCdTUlRfQ0FMTEVSJyk7XG4gIC8qKiBTZWN1cmUgUmVsaWFibGUgVHJhbnNwb3J0IC0gTGlzdGVuZXIgbW9kZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNSVF9MSVNURU5FUiA9IG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMoJ1NSVF9MSVNURU5FUicpO1xuXG4gIC8qKlxuICAgKiBVc2UgYSBjdXN0b20gcHJvdG9jb2wgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBwcm90b2NvbCBzdHJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyB7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnModmFsdWUpO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB2YWx1ZSBUaGUgcHJvdG9jb2wgc3RyaW5nIHZhbHVlICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmcpIHt9XG5cbiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRpZXIgZm9yIGEgcm91dGVyIG91dHB1dC4gVGhlIHRpZXIgZGV0ZXJtaW5lcyB0aGUgY2FwYWNpdHkgbGltaXRzLCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsXG4gKiBhbmQgYXNzb2NpYXRlZCBjb3N0cy4gVGhlIGBtYXhpbXVtQml0cmF0ZWAgbXVzdCBmYWxsIHdpdGhpbiB0aGUgbGltaXRzIG9mIHRoZSBzZWxlY3RlZCB0aWVyLlxuICovXG5leHBvcnQgY2xhc3MgUm91dGVyT3V0cHV0VGllciB7XG4gIC8qKiBVcCB0byAxMDAgTWJwcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9VVFBVVF8xMDAgPSBuZXcgUm91dGVyT3V0cHV0VGllcignT1VUUFVUXzEwMCcpO1xuICAvKiogVXAgdG8gNTAgTWJwcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9VVFBVVF81MCA9IG5ldyBSb3V0ZXJPdXRwdXRUaWVyKCdPVVRQVVRfNTAnKTtcbiAgLyoqIFVwIHRvIDIwIE1icHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPVVRQVVRfMjAgPSBuZXcgUm91dGVyT3V0cHV0VGllcignT1VUUFVUXzIwJyk7XG5cbiAgLyoqXG4gICAqIFVzZSBhIGN1c3RvbSB0aWVyIHZhbHVlXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdGllciBzdHJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IFJvdXRlck91dHB1dFRpZXIge1xuICAgIHJldHVybiBuZXcgUm91dGVyT3V0cHV0VGllcih2YWx1ZSk7XG4gIH1cblxuICAvKiogQHBhcmFtIHZhbHVlIFRoZSB0aWVyIHN0cmluZyB2YWx1ZSAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nKSB7fVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIFJvdXRlciBPdXRwdXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm91dGVyT3V0cHV0IGV4dGVuZHMgSVJlc291cmNlLCBJUm91dGVyT3V0cHV0UmVmIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJPdXRwdXROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGlwQWRkcmVzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHJvdXRlciBvdXRwdXQgd2FzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSByb3V0ZXIgb3V0cHV0IHdhcyBsYXN0IHVwZGF0ZWQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRoaXMgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogUm91dGVyIG91dHB1dCBtZXRyaWNzIGFyZSBkaW1lbnNpb25lZCBieSBgUm91dGVyT3V0cHV0QVJOYC4gU2VlIHRoZSBNZWRpYUNvbm5lY3RcbiAgICogZG9jdW1lbnRhdGlvbiBmb3IgYXZhaWxhYmxlIG1ldHJpYyBuYW1lcyAoZS5nLiBgUm91dGVyT3V0cHV0Qml0UmF0ZWAsXG4gICAqIGBSb3V0ZXJPdXRwdXRUb3RhbFBhY2tldHNgKS5cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgYml0cmF0ZSBvZiB0aGUgcm91dGVyIG91dHB1dCdzIHBheWxvYWQuXG4gICAqIEBkZWZhdWx0IC0gYXZlcmFnZSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0JpdHJhdGUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBzZW50IGJ5IHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY1RvdGFsUGFja2V0cyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHJvdXRlciBvdXRwdXQgY29ubmVjdGlvbiBzdGF0ZSAoMSBjb25uZWN0ZWQsIDAgZGlzY29ubmVjdGVkKS4gQXBwbGllcyB0byBTUlQgb3V0cHV0cyBvbmx5LlxuICAgKiBAZGVmYXVsdCAtIG1pbmltdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNDb25uZWN0ZWQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgcmV0cmFuc21pdHRlZCBwYWNrZXRzIHJlcXVlc3RlZCB0aHJvdWdoIGF1dG9tYXRpYyByZXBlYXQgcmVxdWVzdCAoQVJRKS5cbiAgICogQXBwbGllcyB0byBSSVNUIGFuZCBTUlQgb3V0cHV0cyBvbmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0FycVJlcXVlc3RzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIFJvdXRlciBPdXRwdXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJPdXRwdXRQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBSb3V0ZXIgT3V0cHV0XG4gICAqIEBkZWZhdWx0IC0gR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHlcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbWF4aW11bSBiaXRyYXRlIGZvciB0aGUgcm91dGVyIG91dHB1dC4gTXVzdCBmYWxsIHdpdGhpbiB0aGUgbGltaXRzIG9mIHRoZSBzZWxlY3RlZCBgdGllcmAuICovXG4gIHJlYWRvbmx5IG1heGltdW1CaXRyYXRlOiBCaXRyYXRlO1xuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvdXRlciBvdXRwdXQgaXMgY29uZmlndXJlZCBmb3IgUmVnaW9uYWwgb3IgZ2xvYmFsIHJvdXRpbmcuICovXG4gIHJlYWRvbmx5IHJvdXRpbmdTY29wZTogUm91dGluZ1Njb3BlO1xuICAvKipcbiAgICogVGllciBmb3IgdGhpcyBvdXRwdXQuIFRoZSB0aWVyIGRldGVybWluZXMgdGhlIGNhcGFjaXR5IGxpbWl0cywgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLFxuICAgKiBhbmQgYXNzb2NpYXRlZCBjb3N0czsgYG1heGltdW1CaXRyYXRlYCBtdXN0IGZhbGwgd2l0aGluIGl0cyBsaW1pdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwXG4gICAqL1xuICByZWFkb25seSB0aWVyPzogUm91dGVyT3V0cHV0VGllcjtcbiAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBSb3V0ZXIgT3V0cHV0IChzdGFuZGFyZCwgTWVkaWFDb25uZWN0IEZsb3csIG9yIE1lZGlhTGl2ZSkgKi9cbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbjogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIE1haW50ZW5hbmNlIHdpbmRvdyBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtYWludGVuYW5jZSB3aW5kb3cgd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBtYWludGVuYW5jZUNvbmZpZ3VyYXRpb24/OiBNYWludGVuYW5jZUNvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgQVdTIFJlZ2lvbiB3aGVyZSB0aGUgcm91dGVyIG91dHB1dCBpcyBsb2NhdGVkLlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHRzIHRvIHRoZSBzYW1lIHJlZ2lvbiBhcyBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRhZ3MgdG8gYWRkIHRvIHRoZSBSb3V0ZXIgT3V0cHV0XG4gICAqIEBkZWZhdWx0IC0gTm8gdGFnZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIFJvdXRlciBPdXRwdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVyT3V0cHV0QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBUaGUgbmFtZSBpcyBub3QgZW5jb2RlZCBpbiB0aGUgQVJOICh0aGUgQVJOIGNvbnRhaW5zIG9ubHkgdGhlIHNlcnZpY2UtZ2VuZXJhdGVkIElEKSxcbiAgICogc28gcHJvdmlkZSBpdCBoZXJlIGlmIHlvdSBuZWVkIHRvIGFjY2VzcyBgcm91dGVyT3V0cHV0TmFtZWAgb24gdGhlIGltcG9ydGVkIGNvbnN0cnVjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByb3V0ZXJPdXRwdXROYW1lIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIGltcG9ydGVkIGNvbnN0cnVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBhcnNlZCBmcm9tIHRoZSBBUk4gd2hlbiBhdmFpbGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFJUUCBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciBvdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnRwT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIGZvciBSVFAgdHJhZmZpYyAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZztcbiAgLyoqIFBvcnQgbnVtYmVyIGZvciBSVFAgdHJhZmZpYyAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBGb3J3YXJkIEVycm9yIENvcnJlY3Rpb24gc2V0dGluZ1xuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZDsgd2hlbiBvbWl0dGVkLCBNZWRpYUNvbm5lY3QgYXBwbGllcyBGb3J3YXJkRXJyb3JDb3JyZWN0aW9uLkRJU0FCTEVEIGF0IGRlcGxveSB0aW1lXG4gICAqL1xuICByZWFkb25seSBmb3J3YXJkRXJyb3JDb3JyZWN0aW9uPzogRm9yd2FyZEVycm9yQ29ycmVjdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBSSVNUIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIG91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSaXN0T3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIGZvciBSSVNUIHRyYWZmaWMgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBQb3J0IG51bWJlciBmb3IgUklTVCB0cmFmZmljICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBTUlQgTGlzdGVuZXIgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3Igb3V0cHV0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNydExpc3RlbmVyT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBQb3J0IG51bWJlciBmb3IgU1JUIGxpc3RlbmVyICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgLyoqIE1pbmltdW0gbGF0ZW5jeSBmb3IgU1JUICovXG4gIHJlYWRvbmx5IG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgU1JUIHN0cmVhbXNcbiAgICogQGRlZmF1bHQgLSBObyBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgU1JUIENhbGxlciBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciBvdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3J0Q2FsbGVyT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIHRvIGNvbm5lY3QgdG8gKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBEZXN0aW5hdGlvbiBwb3J0IHRvIGNvbm5lY3QgdG8gKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25Qb3J0OiBudW1iZXI7XG4gIC8qKiBNaW5pbXVtIGxhdGVuY3kgZm9yIFNSVCAqL1xuICByZWFkb25seSBtaW5pbXVtTGF0ZW5jeTogRHVyYXRpb247XG4gIC8qKlxuICAgKiBPcHRpb25hbCBzdHJlYW0gSUQgZm9yIFNSVCBjb25uZWN0aW9uXG4gICAqIEBkZWZhdWx0IC0gTm8gc3RyZWFtIElEXG4gICAqL1xuICByZWFkb25seSBzdHJlYW1JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgU1JUIHN0cmVhbXNcbiAgICogQGRlZmF1bHQgLSBObyBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogRmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgUm91dGVyIE91dHB1dCBwcm90b2NvbCBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBTdXBwb3J0ZWQgcHJvdG9jb2xzOiBSVFAsIFJJU1QsIFNSVCAoTGlzdGVuZXIgYW5kIENhbGxlcikuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gUlRQIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wucnRwKHtcbiAgICogICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgcG9ydDogNTAwMCxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBSVFAgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBSVFBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcnRwKHByb3BzOiBSdHBPdXRwdXRQcm90b2NvbFByb3BzKTogUm91dGVyT3V0cHV0UHJvdG9jb2wge1xuICAgIFJvdXRlck91dHB1dFByb3RvY29sLnZhbGlkYXRlUG9ydChwcm9wcy5wb3J0KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFByb3RvY29sKFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucy5SVFAsIHtcbiAgICAgIHJ0cDoge1xuICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6IHByb3BzLmRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgICAgZGVzdGluYXRpb25Qb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBmb3J3YXJkRXJyb3JDb3JyZWN0aW9uOiBwcm9wcy5mb3J3YXJkRXJyb3JDb3JyZWN0aW9uLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBSSVNUIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wucmlzdCh7XG4gICAqICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiAnMTAuMC4wLjEnLFxuICAgKiAgICAgIHBvcnQ6IDUwMDAsXG4gICAqICAgIH0pO1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgUklTVCBwcm90b2NvbCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFJJU1RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmlzdChwcm9wczogUmlzdE91dHB1dFByb3RvY29sUHJvcHMpOiBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gICAgUm91dGVyT3V0cHV0UHJvdG9jb2wudmFsaWRhdGVQb3J0KHByb3BzLnBvcnQpO1xuICAgIHJldHVybiBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2woUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zLlJJU1QsIHtcbiAgICAgIHJpc3Q6IHtcbiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiBwcm9wcy5kZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgIGRlc3RpbmF0aW9uUG9ydDogcHJvcHMucG9ydCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFNSVCBMaXN0ZW5lciBwcm90b2NvbCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIFJvdXRlck91dHB1dFByb3RvY29sLnNydExpc3RlbmVyKHtcbiAgICogICAgICBwb3J0OiA1MDAwLFxuICAgKiAgICAgIG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbi5taWxsaXMoMTI1KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTUlQgTGlzdGVuZXIgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBTUlQgTGlzdGVuZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3J0TGlzdGVuZXIocHJvcHM6IFNydExpc3RlbmVyT3V0cHV0UHJvdG9jb2xQcm9wcyk6IFJvdXRlck91dHB1dFByb3RvY29sIHtcbiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC52YWxpZGF0ZVBvcnQocHJvcHMucG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbChSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMuU1JUX0xJU1RFTkVSLCB7XG4gICAgICBzcnRMaXN0ZW5lcjoge1xuICAgICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBtaW5pbXVtTGF0ZW5jeU1pbGxpc2Vjb25kczogcHJvcHMubWluaW11bUxhdGVuY3kudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgIH0sXG4gICAgfSwgcHJvcHMuZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBTUlQgQ2FsbGVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wuc3J0Q2FsbGVyKHtcbiAgICogICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgZGVzdGluYXRpb25Qb3J0OiA1MDAwLFxuICAgKiAgICAgIG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbi5taWxsaXMoMTI1KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTUlQgQ2FsbGVyIHByb3RvY29sIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0UHJvdG9jb2wgaW5zdGFuY2UgY29uZmlndXJlZCBmb3IgU1JUIENhbGxlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcnRDYWxsZXIocHJvcHM6IFNydENhbGxlck91dHB1dFByb3RvY29sUHJvcHMpOiBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gICAgUm91dGVyT3V0cHV0UHJvdG9jb2wudmFsaWRhdGVTcnRDYWxsZXJQb3J0KHByb3BzLmRlc3RpbmF0aW9uUG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbChSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMuU1JUX0NBTExFUiwge1xuICAgICAgc3J0Q2FsbGVyOiB7XG4gICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogcHJvcHMuZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblBvcnQ6IHByb3BzLmRlc3RpbmF0aW9uUG9ydCxcbiAgICAgICAgbWluaW11bUxhdGVuY3lNaWxsaXNlY29uZHM6IHByb3BzLm1pbmltdW1MYXRlbmN5LnRvTWlsbGlzZWNvbmRzKCksXG4gICAgICAgIHN0cmVhbUlkOiBwcm9wcy5zdHJlYW1JZCxcbiAgICAgIH0sXG4gICAgfSwgcHJvcHMuZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgcG9ydCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICgzMDAwLTMwMDAwKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVQb3J0KHBvcnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHBvcnQpICYmIChwb3J0IDwgMzAwMCB8fCBwb3J0ID4gMzAwMDApKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dFBvcnRSYW5nZWAsIGBQb3J0IG11c3QgYmUgYmV0d2VlbiAzMDAwIGFuZCAzMDAwMCwgZ290ICR7cG9ydH1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBTUlQgQ2FsbGVyIHBvcnQgaXMgd2l0aGluIHRoZSB2YWxpZCByYW5nZSAoMC02NTUzNSlcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlU3J0Q2FsbGVyUG9ydChwb3J0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwb3J0KSAmJiAocG9ydCA8IDAgfHwgcG9ydCA+IDY1NTM1KSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBTcnRDYWxsZXJQb3J0UmFuZ2VgLCBgU1JUIENhbGxlciBwb3J0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2NTUzNSwgZ290ICR7cG9ydH1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9wcm90b2NvbE5hbWU6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuY3J5cHRpb24/OiBSb3V0ZXJTcnRFbmNyeXB0aW9uO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHJvdG9jb2xOYW1lOiBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMsXG4gICAgY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHksXG4gICAgZW5jcnlwdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb24sXG4gICkge1xuICAgIHRoaXMuX3Byb3RvY29sTmFtZSA9IHByb3RvY29sTmFtZTtcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5fZW5jcnlwdGlvbiA9IGVuY3J5cHRpb247XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGlzIHByb3RvY29sIHRvIGl0cyBDRk4tcmVhZHkgZm9ybS4gUmV0dXJucyB0aGUgcHJvdG9jb2wgaWRlbnRpZmllclxuICAgKiBhbmQgdGhlIENGTiBjb25maWd1cmF0aW9uIHNoYXBlIHdpdGggU1JUIGVuY3J5cHRpb24gYXV0by1yb2xlIG1hdGVyaWFsaXplZCBpZiBuZWVkZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAgICAgICAgICAgICBDb25zdHJ1Y3QgdGhhdCBzY29wZXMgdGhlIGF1dG8tY3JlYXRlZCBlbmNyeXB0aW9uIHJvbGVcbiAgICogQHBhcmFtIHJvdXRlck91dHB1dEFybiAgIE9wdGlvbmFsIEFSTiBvZiB0aGUgY29uc3VtaW5nIHJvdXRlciBvdXRwdXQg4oCUIHdoZW4gcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZXMgdGhlIGF1dG8tY3JlYXRlZCBlbmNyeXB0aW9uIHJvbGUncyB0cnVzdCBwb2xpY3kuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlck91dHB1dEFybj86IHN0cmluZyk6IHtcbiAgICBuYW1lOiBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnM7XG4gICAgY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHk7XG4gICAgZ3JhbnQ/OiBHcmFudDtcbiAgfSB7XG4gICAgaWYgKCF0aGlzLl9lbmNyeXB0aW9uKSB7XG4gICAgICByZXR1cm4geyBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsIGNvbmZpZzogdGhpcy5fY29uZmlnIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyBjb25maWc6IGVuY3J5cHRpb25Db25maWd1cmF0aW9uLCBncmFudCB9ID0gcmVzb2x2ZVJvdXRlclNydEVuY3J5cHRpb24oc2NvcGUsICdFbmNyeXB0aW9uUm9sZScsIHRoaXMuX2VuY3J5cHRpb24sIHJvdXRlck91dHB1dEFybik7XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnNydExpc3RlbmVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsXG4gICAgICAgIGNvbmZpZzogeyBzcnRMaXN0ZW5lcjogeyAuLi50aGlzLl9jb25maWcuc3J0TGlzdGVuZXIsIGVuY3J5cHRpb25Db25maWd1cmF0aW9uIH0gfSxcbiAgICAgICAgZ3JhbnQsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnNydENhbGxlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdGhpcy5fcHJvdG9jb2xOYW1lLFxuICAgICAgICBjb25maWc6IHsgc3J0Q2FsbGVyOiB7IC4uLnRoaXMuX2NvbmZpZy5zcnRDYWxsZXIsIGVuY3J5cHRpb25Db25maWd1cmF0aW9uIH0gfSxcbiAgICAgICAgZ3JhbnQsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsIGNvbmZpZzogdGhpcy5fY29uZmlnIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBzdGFuZGFyZCBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFyZE91dHB1dENvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKiBOZXR3b3JrIGludGVyZmFjZSBmb3IgdGhlIFJvdXRlciBPdXRwdXQgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0ludGVyZmFjZTogSVJvdXRlck5ldHdvcmtJbnRlcmZhY2U7XG4gIC8qKiBQcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciB0aGUgb3V0cHV0ICovXG4gIHJlYWRvbmx5IHByb3RvY29sOiBSb3V0ZXJPdXRwdXRQcm90b2NvbDtcbiAgLyoqXG4gICAqIFRoZSBhdmFpbGFiaWxpdHkgem9uZSB3aGVyZSB0aGUgcm91dGVyIG91dHB1dCBpcyBsb2NhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFzc2lnbmVkIGJ5IHRoZSBNZWRpYUNvbm5lY3Qgc2VydmljZVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUxpdmUgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggc3BlY2lmaWMgaW5wdXQgY29ubmVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhTGl2ZUlucHV0Q29ubmVjdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBNZWRpYUxpdmUgaW5wdXQgdG8gc2VuZCBvdXRwdXQgdG8gKG11c3QgYmUgb2YgdHlwZSBgbWVkaWFsaXZlLklucHV0Q29uZmlndXJhdGlvbi5tZWRpYUNvbm5lY3RSb3V0ZXIoKWApLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXQ6IElJbnB1dFJlZjtcbiAgLyoqIE1lZGlhTGl2ZSBwaXBlbGluZSB0byBzZW5kIG91dHB1dCB0byAqL1xuICByZWFkb25seSBwaXBlbGluZTogTWVkaWFMaXZlUGlwZWxpbmU7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIE1lZGlhTGl2ZSBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFMaXZlTm9JbnB1dENvbm5lY3Rpb25Qcm9wcyB7XG4gIC8qKiBBdmFpbGFiaWxpdHkgem9uZSBmb3IgdGhlIHJvdXRlciBvdXRwdXQgd2hlbiBub3QgY29ubmVjdGluZyB0byBhIHNwZWNpZmljIGlucHV0ICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd0Nvbm5lY3Rpb25Qcm9wcyB7XG4gIC8qKiBNZWRpYUNvbm5lY3QgRmxvdyB0byBzZW5kIG91dHB1dCB0byAqL1xuICByZWFkb25seSBmbG93OiBJRmxvdztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd05vQ29ubmVjdGlvblByb3BzIHtcbiAgLyoqIEF2YWlsYWJpbGl0eSB6b25lIGZvciB0aGUgcm91dGVyIG91dHB1dCB3aGVuIG5vdCBjb25uZWN0aW5nIHRvIGEgc3BlY2lmaWMgZmxvdyAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgY2xhc3MgZm9yIGNyZWF0aW5nIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgc3RhbmRhcmQgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggYSBzaW5nbGUgcHJvdG9jb2xcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgZGVjbGFyZSBjb25zdCBuZXR3b3JrSW50ZXJmYWNlOiBSb3V0ZXJOZXR3b3JrSW50ZXJmYWNlO1xuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLnN0YW5kYXJkKHtcbiAgICogICAgICBuZXR3b3JrSW50ZXJmYWNlLFxuICAgKiAgICAgIHByb3RvY29sOiBSb3V0ZXJPdXRwdXRQcm90b2NvbC5ydHAoe1xuICAgKiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiAnMTAuMC4wLjEnLFxuICAgKiAgICAgICAgcG9ydDogNTAwMCxcbiAgICogICAgICB9KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTdGFuZGFyZCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3Igc3RhbmRhcmQgc2V0dXBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3RhbmRhcmQocHJvcHM6IFN0YW5kYXJkT3V0cHV0Q29uZmlndXJhdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTdGFuZGFyZFJvdXRlck91dHB1dENvbmZpZyhwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTWVkaWFMaXZlIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbiB3aXRoIGEgc3BlY2lmaWMgaW5wdXQgY29ubmVjdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB0aGUgTWVkaWFMaXZlIGlucHV0IGFscmVhZHkgZXhpc3RzIGFuZCB5b3Ugd2FudCB0byBjb25uZWN0IGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgTWVkaWFMaXZlIGlucHV0IGNvbm5lY3Rpb24gcHJvcGVydGllc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUxpdmVJbnB1dChwcm9wczogTWVkaWFMaXZlSW5wdXRDb25uZWN0aW9uUHJvcHMpOiBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1lZGlhTGl2ZUlucHV0Um91dGVyT3V0cHV0Q29uZmlnKHtcbiAgICAgIG1lZGlhTGl2ZUlucHV0QXJuOiBwcm9wcy5pbnB1dC5pbnB1dFJlZi5pbnB1dEFybixcbiAgICAgIG1lZGlhTGl2ZVBpcGVsaW5lSWQ6IHByb3BzLnBpcGVsaW5lLFxuICAgICAgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogcHJvcHMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUxpdmUgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgYSBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHlvdSB3YW50IHRvIHNldCB1cCB0aGUgcm91dGVyIG91dHB1dCBiZWZvcmUgdGhlIE1lZGlhTGl2ZSBpbnB1dCBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUxpdmUgbm8gaW5wdXQgY29ubmVjdGlvbiBwcm9wZXJ0aWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1lZGlhTGl2ZUlucHV0V2l0aG91dENvbm5lY3Rpb24ocHJvcHM6IE1lZGlhTGl2ZU5vSW5wdXRDb25uZWN0aW9uUHJvcHMpOiBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1lZGlhTGl2ZUlucHV0Um91dGVyT3V0cHV0Q29uZmlnKFxuICAgICAgeyBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uOiBwcm9wcy5kZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uIH0sXG4gICAgICBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggYSBzcGVjaWZpYyBmbG93IGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIHdoZW4gdGhlIHRhcmdldCBmbG93IGFscmVhZHkgZXhpc3RzIGFuZCB5b3Ugd2FudCB0byBjb25uZWN0IGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBkZWNsYXJlIGNvbnN0IGZsb3c6IEZsb3c7XG4gICAqXG4gICAqICAgIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ubWVkaWFDb25uZWN0Rmxvdyh7XG4gICAqICAgICAgZmxvdyxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUNvbm5lY3QgRmxvdyBjb25uZWN0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3IgTWVkaWFDb25uZWN0IEZsb3cgc2V0dXAgd2l0aCBmbG93IGNvbm5lY3Rpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWVkaWFDb25uZWN0Rmxvdyhwcm9wczogTWVkaWFDb25uZWN0Rmxvd0Nvbm5lY3Rpb25Qcm9wcyk6IFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dENvbmZpZyh7XG4gICAgICBmbG93OiBwcm9wcy5mbG93LFxuICAgICAgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogcHJvcHMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUNvbm5lY3QgRmxvdyBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBhIHNwZWNpZmljIGZsb3cgY29ubmVjdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB5b3Ugd2FudCB0byBzZXQgdXAgdGhlIHJvdXRlciBvdXRwdXQgYmVmb3JlIHRoZSB0YXJnZXQgZmxvdyBleGlzdHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ubWVkaWFDb25uZWN0Rmxvd1dpdGhvdXRDb25uZWN0aW9uKHtcbiAgICogICAgICBhdmFpbGFiaWxpdHlab25lOiAndXMtZWFzdC0xYScsXG4gICAqICAgIH0pO1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgTWVkaWFDb25uZWN0IEZsb3cgbm8gY29ubmVjdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIE1lZGlhQ29ubmVjdCBGbG93IHNldHVwIHdpdGhvdXQgZmxvdyBjb25uZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1lZGlhQ29ubmVjdEZsb3dXaXRob3V0Q29ubmVjdGlvbihwcm9wczogTWVkaWFDb25uZWN0Rmxvd05vQ29ubmVjdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBNZWRpYUNvbm5lY3RGbG93Um91dGVyT3V0cHV0Q29uZmlnKFxuICAgICAgeyBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uOiBwcm9wcy5kZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uIH0sXG4gICAgICBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gaXRzIENsb3VkRm9ybWF0aW9uIHNoYXBlLiBDYWxsZWQgYnkgdGhlIFJvdXRlck91dHB1dFxuICAgKiBjb25zdHJ1Y3RvciDigJQgZWFjaCBjb25jcmV0ZSBzdWJjbGFzcyBzdXBwbGllcyBpdHMgb3duIHZhcmlhbnQtc3BlY2lmaWMgcmVuZGVyaW5nLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfYmluZChzY29wZTogQ29uc3RydWN0LCByb3V0ZXJPdXRwdXRBcm4/OiBzdHJpbmcpOiB7XG4gICAgY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvblByb3BlcnR5OyBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nOyBncmFudD86IEdyYW50O1xuICB9O1xufVxuXG4vKipcbiAqIENvbmNyZXRlIHZhcmlhbnQ6IHN0YW5kYXJkIChzaW5nbGUtcHJvdG9jb2wpIHJvdXRlciBvdXRwdXQgY29uZmlndXJhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBTdGFuZGFyZFJvdXRlck91dHB1dENvbmZpZyBleHRlbmRzIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBTdGFuZGFyZE91dHB1dENvbmZpZ3VyYXRpb25Qcm9wcykgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlck91dHB1dEFybj86IHN0cmluZykge1xuICAgIGNvbnN0IHByb3RvY29sID0gdGhpcy5wcm9wcy5wcm90b2NvbC5fYmluZChzY29wZSwgcm91dGVyT3V0cHV0QXJuKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIHN0YW5kYXJkOiB7XG4gICAgICAgICAgbmV0d29ya0ludGVyZmFjZUFybjogdGhpcy5wcm9wcy5uZXR3b3JrSW50ZXJmYWNlLnJvdXRlck5ldHdvcmtJbnRlcmZhY2VBcm4sXG4gICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLm5hbWUudmFsdWUsXG4gICAgICAgICAgcHJvdG9jb2xDb25maWd1cmF0aW9uOiBwcm90b2NvbC5jb25maWcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy5wcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgZ3JhbnQ6IHByb3RvY29sLmdyYW50LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb25jcmV0ZSB2YXJpYW50OiBNZWRpYUxpdmUgSW5wdXQgcm91dGVyIG91dHB1dCBjb25maWd1cmF0aW9uICh3aXRoIG9yIHdpdGhvdXQgY29ubmVjdGlvbikuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRDb25maWcgZXh0ZW5kcyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dE9wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nLFxuICApIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0LCByb3V0ZXJPdXRwdXRBcm4/OiBzdHJpbmcpIHtcbiAgICBjb25zdCB0cmFuc2l0ID0gcmVzb2x2ZVRyYW5zaXRFbmNyeXB0aW9uKHNjb3BlLCAnRGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvblJvbGUnLCB0aGlzLm9wdGlvbnMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbiwgcm91dGVyT3V0cHV0QXJuKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIG1lZGlhTGl2ZUlucHV0OiB7XG4gICAgICAgICAgbWVkaWFMaXZlSW5wdXRBcm46IHRoaXMub3B0aW9ucy5tZWRpYUxpdmVJbnB1dEFybixcbiAgICAgICAgICBtZWRpYUxpdmVQaXBlbGluZUlkOiB0aGlzLm9wdGlvbnMubWVkaWFMaXZlUGlwZWxpbmVJZCxcbiAgICAgICAgICBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uOiB0cmFuc2l0LmNvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiB0aGlzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBncmFudDogdHJhbnNpdC5ncmFudCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgb3B0aW9ucyBmb3Ige0BsaW5rIE1lZGlhTGl2ZUlucHV0Um91dGVyT3V0cHV0Q29uZmlnfS5cbiAqL1xuaW50ZXJmYWNlIE1lZGlhTGl2ZUlucHV0Um91dGVyT3V0cHV0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IG1lZGlhTGl2ZUlucHV0QXJuPzogc3RyaW5nO1xuICByZWFkb25seSBtZWRpYUxpdmVQaXBlbGluZUlkPzogTWVkaWFMaXZlUGlwZWxpbmU7XG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBDb25jcmV0ZSB2YXJpYW50OiBNZWRpYUNvbm5lY3QgRmxvdyByb3V0ZXIgb3V0cHV0IGNvbmZpZ3VyYXRpb24gKHdpdGggb3Igd2l0aG91dCBjb25uZWN0aW9uKS5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBNZWRpYUNvbm5lY3RGbG93Um91dGVyT3V0cHV0Q29uZmlnIGV4dGVuZHMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dE9wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nLFxuICApIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0LCByb3V0ZXJPdXRwdXRBcm4/OiBzdHJpbmcpIHtcbiAgICBjb25zdCB0cmFuc2l0ID0gcmVzb2x2ZVRyYW5zaXRFbmNyeXB0aW9uKHNjb3BlLCAnRGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvblJvbGUnLCB0aGlzLm9wdGlvbnMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbiwgcm91dGVyT3V0cHV0QXJuKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIG1lZGlhQ29ubmVjdEZsb3c6IHtcbiAgICAgICAgICBmbG93QXJuOiB0aGlzLm9wdGlvbnMuZmxvdz8uZmxvd0FybixcbiAgICAgICAgICBmbG93U291cmNlQXJuOiB0aGlzLm9wdGlvbnMuZmxvdz8uc291cmNlQXJuLFxuICAgICAgICAgIGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb246IHRyYW5zaXQuY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHRoaXMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgIGdyYW50OiB0cmFuc2l0LmdyYW50LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBvcHRpb25zIGZvciB7QGxpbmsgTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dENvbmZpZ30uXG4gKi9cbmludGVyZmFjZSBNZWRpYUNvbm5lY3RGbG93Um91dGVyT3V0cHV0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IGZsb3c/OiBJRmxvdztcbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIEEgTWVkaWFDb25uZWN0IFJvdXRlciBPdXRwdXQgdGhhdCBzZW5kcyBtZWRpYSBzdHJlYW1zIHRvIGRlc3RpbmF0aW9ucy5cbiAqXG4gKiBSb3V0ZXIgT3V0cHV0cyBzdXBwb3J0IG11bHRpcGxlIGNvbmZpZ3VyYXRpb24gdHlwZXM6XG4gKiAtIFN0YW5kYXJkOiBTaW5nbGUgcHJvdG9jb2wgb3V0cHV0XG4gKiAtIE1lZGlhTGl2ZSBJbnB1dDogT3V0cHV0IHRvIEFXUyBFbGVtZW50YWwgTWVkaWFMaXZlXG4gKiAtIE1lZGlhQ29ubmVjdCBGbG93OiBPdXRwdXQgdG8gYW5vdGhlciBNZWRpYUNvbm5lY3QgRmxvd1xuICovXG5hYnN0cmFjdCBjbGFzcyBSb3V0ZXJPdXRwdXRCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVyT3V0cHV0IHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJvdXRlck91dHB1dEFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcm91dGVyT3V0cHV0TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlwQWRkcmVzczogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGlzIFJvdXRlciBPdXRwdXQgcmVzb3VyY2UuXG4gICAqIFJlcXVpcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBJUm91dGVyT3V0cHV0UmVmIGludGVyZmFjZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcm91dGVyT3V0cHV0UmVmKCk6IFJvdXRlck91dHB1dFJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHsgcm91dGVyT3V0cHV0QXJuOiB0aGlzLnJvdXRlck91dHB1dEFybiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0aGlzIHJvdXRlciBvdXRwdXQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmFtZXNwYWNlOiAnQVdTL01lZGlhQ29ubmVjdCcsXG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgUm91dGVyT3V0cHV0QVJOOiB0aGlzLnJvdXRlck91dHB1dEFybixcbiAgICAgICAgLi4ucHJvcHM/LmRpbWVuc2lvbnNNYXAsXG4gICAgICB9LFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIGJpdHJhdGUgb2YgdGhlIHJvdXRlciBvdXRwdXQncyBwYXlsb2FkLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0JpdHJhdGUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1JvdXRlck91dHB1dEJpdFJhdGUnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdhdmcnLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQklUU19QRVJfU0VDT05ELFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgc2VudCBieSB0aGUgcm91dGVyIG91dHB1dC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNUb3RhbFBhY2tldHMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1JvdXRlck91dHB1dFRvdGFsUGFja2V0cycsIHtcbiAgICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5DT1VOVCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHJvdXRlciBvdXRwdXQgY29ubmVjdGlvbiBzdGF0ZSAoMSBjb25uZWN0ZWQsIDAgZGlzY29ubmVjdGVkKS4gQXBwbGllcyB0byBTUlQgb3V0cHV0cyBvbmx5LlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0Nvbm5lY3RlZChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVyT3V0cHV0Q29ubmVjdGVkJywge1xuICAgICAgc3RhdGlzdGljOiAnbWluJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0Lk5PTkUsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgcmV0cmFuc21pdHRlZCBwYWNrZXRzIHJlcXVlc3RlZCB0aHJvdWdoIEFSUS4gQXBwbGllcyB0byBSSVNUIGFuZCBTUlQgb3V0cHV0cy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNBcnFSZXF1ZXN0cyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVyT3V0cHV0QVJRUmVxdWVzdHMnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQ09VTlQsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmluZXMgYW4gQVdTIEVsZW1lbnRhbCBNZWRpYUNvbm5lY3QgUm91dGVyIE91dHB1dC5cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFJvdXRlck91dHB1dCBleHRlbmRzIFJvdXRlck91dHB1dEJhc2UgaW1wbGVtZW50cyBJUm91dGVyT3V0cHV0IHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtbWVkaWFjb25uZWN0LWFscGhhLlJvdXRlck91dHB1dCc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBSb3V0ZXIgT3V0cHV0IGZyb20gaXRzIEFSTi5cbiAgICpcbiAgICogVGhlIEFSTiBvbmx5IGNvbnRhaW5zIHRoZSBzZXJ2aWNlLWdlbmVyYXRlZCBJRCAobm90IHRoZSByb3V0ZXIgb3V0cHV0IG5hbWUpLiBBY2Nlc3NpbmdcbiAgICogYHJvdXRlck91dHB1dE5hbWVgIG9uIGFuIEFSTiBpbXBvcnQgdGhyb3dzIOKAlCB1c2UgYGZyb21Sb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzKClgIHRvIHByb3ZpZGVcbiAgICogdGhlIG5hbWUgZXhwbGljaXRseS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSByb3V0ZXJPdXRwdXRBcm4gVGhlIEFSTiBvZiB0aGUgUm91dGVyIE91dHB1dFxuICAgKiBAcmV0dXJucyBBIFJvdXRlciBPdXRwdXQgY29uc3RydWN0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Sb3V0ZXJPdXRwdXRBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcm91dGVyT3V0cHV0QXJuOiBzdHJpbmcpOiBJUm91dGVyT3V0cHV0IHtcbiAgICByZXR1cm4gUm91dGVyT3V0cHV0LmZyb21Sb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyByb3V0ZXJPdXRwdXRBcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIFJvdXRlciBPdXRwdXQgZnJvbSBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHlvdSBuZWVkIHRvIHJlZmVyZW5jZSBhIHJvdXRlciBvdXRwdXQgYnkgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgUm91dGVyIE91dHB1dCBhdHRyaWJ1dGVzXG4gICAqIEByZXR1cm5zIEEgUm91dGVyIE91dHB1dCBjb25zdHJ1Y3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVJvdXRlck91dHB1dEF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFJvdXRlck91dHB1dEF0dHJpYnV0ZXMpOiBJUm91dGVyT3V0cHV0IHtcbiAgICAvLyBEZXJpdmUgdGhlIElEIGZyb20gdGhlIEFSTiB1c2luZyBDRk4gaW50cmluc2ljcyBzbyB0aGlzIHdvcmtzIHdpdGggdG9rZW4gQVJOcyB0b28uXG4gICAgLy8gVGhlIEFSTiBmb3JtYXQgaXMgYXJuOmF3czptZWRpYWNvbm5lY3Q6PHJlZ2lvbj46PGFjY291bnQ+OnJvdXRlck91dHB1dDo8aWQ+LCBzbyB0aGVcbiAgICAvLyByZXNvdXJjZSBuYW1lIGlzIHRoZSBJRC5cbiAgICBjb25zdCByb3V0ZXJPdXRwdXRJZCA9IGF0dHJzLnJvdXRlck91dHB1dElkID8/IGV4dHJhY3RSb3V0ZXJPdXRwdXRJZChhdHRycy5yb3V0ZXJPdXRwdXRBcm4pO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUm91dGVyT3V0cHV0QmFzZSBpbXBsZW1lbnRzIElSb3V0ZXJPdXRwdXQge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvdXRlck91dHB1dEFybiA9IGF0dHJzLnJvdXRlck91dHB1dEFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSByb3V0ZXJPdXRwdXRJZCA9IHJvdXRlck91dHB1dElkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHB1YmxpYyBnZXQgcm91dGVyT3V0cHV0TmFtZSgpOiBzdHJpbmcge1xuICAgICAgICBpZiAoYXR0cnMucm91dGVyT3V0cHV0TmFtZSkgcmV0dXJuIGF0dHJzLnJvdXRlck91dHB1dE5hbWU7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgbGl0YFJvdXRlck91dHB1dE5hbWVOb3RQcm92aWRlZGAsXG4gICAgICAgICAgYCdyb3V0ZXJPdXRwdXROYW1lJyB3YXMgbm90IHByb3ZpZGVkIHdoZW4gaW1wb3J0aW5nIFJvdXRlck91dHB1dCAke3RoaXMubm9kZS5wYXRofTsgcHJvdmlkZSBpdCBpbiBmcm9tUm91dGVyT3V0cHV0QXR0cmlidXRlcygpYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgZ2V0IGlwQWRkcmVzcygpOiBzdHJpbmcge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBSb3V0ZXJPdXRwdXRJcEFkZHJlc3NOb3RQcm92aWRlZGAsXG4gICAgICAgICAgYCdpcEFkZHJlc3MnIGlzIG5vdCBhdmFpbGFibGUgb24gaW1wb3J0ZWQgUm91dGVyT3V0cHV0ICR7dGhpcy5ub2RlLnBhdGh9YCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1heGltdW0gYml0cmF0ZSBpbiBNYnBzIGZvciBhIGtub3duIHRpZXIsIG9yIHVuZGVmaW5lZCBmb3IgY3VzdG9tIHRpZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdGllckxpbWl0TWJwcyh0aWVyOiBSb3V0ZXJPdXRwdXRUaWVyKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGllci52YWx1ZSA9PT0gUm91dGVyT3V0cHV0VGllci5PVVRQVVRfMjAudmFsdWUpIHJldHVybiAyMDtcbiAgICBpZiAodGllci52YWx1ZSA9PT0gUm91dGVyT3V0cHV0VGllci5PVVRQVVRfNTAudmFsdWUpIHJldHVybiA1MDtcbiAgICBpZiAodGllci52YWx1ZSA9PT0gUm91dGVyT3V0cHV0VGllci5PVVRQVVRfMTAwLnZhbHVlKSByZXR1cm4gMTAwO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJPdXRwdXROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJPdXRwdXRJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaXBBZGRyZXNzOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvdXRlck91dHB1dFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLnJvdXRlck91dHB1dE5hbWUgPz8gTGF6eS5zdHJpbmcoeyBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDEyOCB9KSB9KSxcbiAgICB9KTtcblxuICAgIC8vIFZhbGlkYXRlIHJvdXRlciBvdXRwdXQgbmFtZSBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5yb3V0ZXJPdXRwdXROYW1lICE9IG51bGwgJiYgcHJvcHMucm91dGVyT3V0cHV0TmFtZSAhPT0gJycgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5yb3V0ZXJPdXRwdXROYW1lKSkge1xuICAgICAgaWYgKHByb3BzLnJvdXRlck91dHB1dE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dE5hbWVMZW5ndGhgLCBgUm91dGVyIG91dHB1dCBuYW1lIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjggY2hhcmFjdGVycywgZ290ICR7cHJvcHMucm91dGVyT3V0cHV0TmFtZS5sZW5ndGh9YCwgdGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAoIS9eW2EtekEtWjAtOV8tXSskLy50ZXN0KHByb3BzLnJvdXRlck91dHB1dE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dE5hbWVGb3JtYXRgLCBgUm91dGVyIG91dHB1dCBuYW1lIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMsIGdvdCAnJHtwcm9wcy5yb3V0ZXJPdXRwdXROYW1lfSdgLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtYXhpbXVtIGJpdHJhdGVcbiAgICBpZiAoIXByb3BzLm1heGltdW1CaXRyYXRlLmlzVW5yZXNvbHZlZCgpICYmIHByb3BzLm1heGltdW1CaXRyYXRlLnRvQnBzKCkgPCAxMDAwMDAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSb3V0ZXJPdXRwdXRNaW5CaXRyYXRlYCwgYE1heGltdW0gYml0cmF0ZSBtdXN0IGJlIGF0IGxlYXN0IDEsMDAwLDAwMCBiaXRzL3MgKDEgTWJwcyksIGdvdCAke3Byb3BzLm1heGltdW1CaXRyYXRlLnRvQnBzKCl9YCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYml0cmF0ZSBkb2VzIG5vdCBleGNlZWQgdGllciBsaW1pdFxuICAgIGNvbnN0IHJlc29sdmVkVGllciA9IHByb3BzLnRpZXIgPz8gUm91dGVyT3V0cHV0VGllci5PVVRQVVRfMjA7XG4gICAgY29uc3QgdGllck1icHMgPSBSb3V0ZXJPdXRwdXQudGllckxpbWl0TWJwcyhyZXNvbHZlZFRpZXIpO1xuICAgIGlmIChleGNlZWRzUm91dGVyVGllckJpdHJhdGUodGllck1icHMsIHByb3BzLm1heGltdW1CaXRyYXRlKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0Qml0cmF0ZUV4Y2VlZHNUaWVyYCwgYE1heGltdW0gYml0cmF0ZSAke3Byb3BzLm1heGltdW1CaXRyYXRlLnRvQnBzKCkgLyAxXzAwMF8wMDB9IE1icHMgZXhjZWVkcyB0aGUgJHtyZXNvbHZlZFRpZXIudmFsdWV9IHRpZXIgbGltaXQgb2YgJHt0aWVyTWJwc30gTWJwc2AsIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1haW50ZW5hbmNlIHRpbWUgZm9ybWF0XG4gICAgaWYgKHByb3BzLm1haW50ZW5hbmNlQ29uZmlndXJhdGlvbikge1xuICAgICAgdmFsaWRhdGVNYWludGVuYW5jZVRpbWUocHJvcHMubWFpbnRlbmFuY2VDb25maWd1cmF0aW9uLnRpbWUpO1xuICAgIH1cblxuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCB0YXJnZXRSZWdpb24gPSBwcm9wcy5yZWdpb25OYW1lID8/IHN0YWNrLnJlZ2lvbjtcblxuICAgIC8vIFdpbGRjYXJkIHRoZSBpZCDigJQgcGlubmluZyB0aGUgbGl2ZSBBUk4gKGF0dHJBcm4pIHdvdWxkIGNyZWF0ZSBhIHJvbGUg4oaSIHJvdXRlci1vdXRwdXQg4oaSIHJvbGUgY3ljbGUuXG4gICAgY29uc3Qgcm91dGVyT3V0cHV0QXJuID0gc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdtZWRpYWNvbm5lY3QnLFxuICAgICAgcmVnaW9uOiB0YXJnZXRSZWdpb24sXG4gICAgICByZXNvdXJjZTogJ3JvdXRlck91dHB1dCcsXG4gICAgICByZXNvdXJjZU5hbWU6ICcqJyxcbiAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb25maWdCaW5kID0gcHJvcHMuY29uZmlndXJhdGlvbi5fYmluZCh0aGlzLCByb3V0ZXJPdXRwdXRBcm4pO1xuXG4gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHJlZ2lvbiBzcGVjaWZpZWQgaXMgYWxzbyBjb21wYXRpYmxlIHdpdGggQVogY29uZmlndXJlZCBmb3Igc29tZSBvZiB0aGUgUm91dGVyIE91dHB1dHMgY29uZmlndXJhdGlvbnNcbiAgICBpZiAoY29uZmlnQmluZC5hdmFpbGFiaWxpdHlab25lICYmICFUb2tlbi5pc1VucmVzb2x2ZWQoY29uZmlnQmluZC5hdmFpbGFiaWxpdHlab25lKSAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHRhcmdldFJlZ2lvbilcbiAgICAgICYmICFjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmUuc3RhcnRzV2l0aCh0YXJnZXRSZWdpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSb3V0ZXJPdXRwdXRBelJlZ2lvbk1pc21hdGNoYCwgYEF2YWlsYWJpbGl0eSB6b25lICcke2NvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZX0nIG11c3QgYmUgd2l0aGluIHJlZ2lvbiAnJHt0YXJnZXRSZWdpb259J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJvdXRlck91dHB1dCA9IG5ldyBDZm5Sb3V0ZXJPdXRwdXQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBtYXhpbXVtQml0cmF0ZTogcHJvcHMubWF4aW11bUJpdHJhdGUudG9CcHMoKSxcbiAgICAgIHJvdXRpbmdTY29wZTogcHJvcHMucm91dGluZ1Njb3BlLnZhbHVlLFxuICAgICAgdGllcjogKHByb3BzLnRpZXIgPz8gUm91dGVyT3V0cHV0VGllci5PVVRQVVRfMjApLnZhbHVlLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogY29uZmlnQmluZC5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgbWFpbnRlbmFuY2VDb25maWd1cmF0aW9uOiBwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24gPyB7XG4gICAgICAgIHByZWZlcnJlZERheVRpbWU6IHByb3BzLm1haW50ZW5hbmNlQ29uZmlndXJhdGlvbixcbiAgICAgIH0gOiB7XG4gICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ0JpbmQuY29uZmlnLFxuICAgICAgcmVnaW9uTmFtZTogdGFyZ2V0UmVnaW9uLFxuICAgICAgdGFnczogcHJvcHMudGFncyA/IHJlbmRlclRhZ3MocHJvcHMudGFncykgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlck91dHB1dEFybiA9IHJvdXRlck91dHB1dC5hdHRyQXJuO1xuICAgIHRoaXMucm91dGVyT3V0cHV0TmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIHRoaXMucm91dGVyT3V0cHV0SWQgPSByb3V0ZXJPdXRwdXQuYXR0cklkO1xuICAgIHRoaXMuaXBBZGRyZXNzID0gcm91dGVyT3V0cHV0LmF0dHJJcEFkZHJlc3M7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSByb3V0ZXJPdXRwdXQuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLnVwZGF0ZWRBdCA9IHJvdXRlck91dHB1dC5hdHRyVXBkYXRlZEF0O1xuXG4gICAgLy8gV2l0aG91dCB0aGlzIHRoZSByb3V0ZXIgaW5wdXQgY2FuIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZVxuICAgIC8vIHBvbGljeSBpcyBhdHRhY2hlZCAoXCJhY2Nlc3MgZGVuaWVkXCIgYXQgY3JlYXRlIHRpbWUpLiBPcmRlcmluZyB0aGUgZ3JhbnQgYmVmb3JlIHRoZVxuICAgIC8vIHJvdXRlciBpbnB1dCBwdWxscyB0aGUgcG9saWN5IGluIGFzIGEgZGVwZW5kZW5jeS5cbiAgICBjb25maWdCaW5kLmdyYW50Py5hcHBseUJlZm9yZShyb3V0ZXJPdXRwdXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RSb3V0ZXJPdXRwdXRJZChyb3V0ZXJPdXRwdXRBcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnNlZCA9IEFybi5zcGxpdChyb3V0ZXJPdXRwdXRBcm4sIEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWU7XG4gIGlmIChwYXJzZWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgIGxpdGBJbnZhbGlkUm91dGVyT3V0cHV0QXJuYCxcbiAgICAgIGBDb3VsZCBub3QgcGFyc2UgUm91dGVyIE91dHB1dCBBUk46ICR7cm91dGVyT3V0cHV0QXJufS4gRXhwZWN0ZWQgZm9ybWF0OiBhcm46PHBhcnRpdGlvbj46bWVkaWFjb25uZWN0OjxyZWdpb24+OjxhY2NvdW50Pjpyb3V0ZXJPdXRwdXQ6PGlkPmAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuIl19
|
package/lib/shared.js
CHANGED
|
@@ -23,7 +23,7 @@ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
|
|
|
23
23
|
*/
|
|
24
24
|
class EncryptionAlgorithm {
|
|
25
25
|
value;
|
|
26
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.EncryptionAlgorithm", version: "2.
|
|
26
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.EncryptionAlgorithm", version: "2.271.0-alpha.0" };
|
|
27
27
|
/**
|
|
28
28
|
* Option for AES128
|
|
29
29
|
*/
|
|
@@ -60,7 +60,7 @@ exports.EncryptionAlgorithm = EncryptionAlgorithm;
|
|
|
60
60
|
*/
|
|
61
61
|
class KeyType {
|
|
62
62
|
value;
|
|
63
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.KeyType", version: "2.
|
|
63
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.KeyType", version: "2.271.0-alpha.0" };
|
|
64
64
|
/**
|
|
65
65
|
* Option for Static Key
|
|
66
66
|
*/
|
|
@@ -129,7 +129,7 @@ var MaintenanceDay;
|
|
|
129
129
|
*/
|
|
130
130
|
class BridgeProtocol {
|
|
131
131
|
value;
|
|
132
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.BridgeProtocol", version: "2.
|
|
132
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.BridgeProtocol", version: "2.271.0-alpha.0" };
|
|
133
133
|
/**
|
|
134
134
|
* Option for RTP-FEC
|
|
135
135
|
*/
|
|
@@ -175,7 +175,7 @@ exports.BridgeProtocol = BridgeProtocol;
|
|
|
175
175
|
* });
|
|
176
176
|
*/
|
|
177
177
|
class GatewayNetwork {
|
|
178
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.GatewayNetwork", version: "2.
|
|
178
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.GatewayNetwork", version: "2.271.0-alpha.0" };
|
|
179
179
|
/**
|
|
180
180
|
* Define a new gateway network.
|
|
181
181
|
*
|
|
@@ -220,7 +220,7 @@ exports.GatewayNetwork = GatewayNetwork;
|
|
|
220
220
|
*/
|
|
221
221
|
class FailoverMode {
|
|
222
222
|
value;
|
|
223
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.FailoverMode", version: "2.
|
|
223
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.FailoverMode", version: "2.271.0-alpha.0" };
|
|
224
224
|
/**
|
|
225
225
|
* MERGE combines the source streams into a single stream, allowing graceful
|
|
226
226
|
* recovery from any single-source loss.
|
|
@@ -299,7 +299,7 @@ var MediaLivePipeline;
|
|
|
299
299
|
*/
|
|
300
300
|
class NetworkInterface {
|
|
301
301
|
value;
|
|
302
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.NetworkInterface", version: "2.
|
|
302
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.NetworkInterface", version: "2.271.0-alpha.0" };
|
|
303
303
|
/**
|
|
304
304
|
* Option for ENA
|
|
305
305
|
*/
|
|
@@ -332,7 +332,7 @@ exports.NetworkInterface = NetworkInterface;
|
|
|
332
332
|
* Factory class for creating VPC Interface configurations
|
|
333
333
|
*/
|
|
334
334
|
class VpcInterface {
|
|
335
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.VpcInterface", version: "2.
|
|
335
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.VpcInterface", version: "2.271.0-alpha.0" };
|
|
336
336
|
/**
|
|
337
337
|
* Define a new VPC Interface configuration. MediaConnect will create network interfaces automatically.
|
|
338
338
|
*
|
|
@@ -525,7 +525,7 @@ function resolveRouterSrtEncryption(scope, id, encryption, sourceArn) {
|
|
|
525
525
|
* Use the predefined constants for standard rates, or {@link Framerate.of} for a custom rate.
|
|
526
526
|
*/
|
|
527
527
|
class Framerate {
|
|
528
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.Framerate", version: "2.
|
|
528
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.Framerate", version: "2.271.0-alpha.0" };
|
|
529
529
|
/** 24 fps (cinema) — `24/1`. */
|
|
530
530
|
static FPS_24 = new Framerate(24, 1);
|
|
531
531
|
/** 25 fps — `25/1`. */
|
|
@@ -590,7 +590,7 @@ exports.Framerate = Framerate;
|
|
|
590
590
|
* a custom ratio.
|
|
591
591
|
*/
|
|
592
592
|
class PixelAspectRatio {
|
|
593
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.PixelAspectRatio", version: "2.
|
|
593
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.PixelAspectRatio", version: "2.271.0-alpha.0" };
|
|
594
594
|
/** Square pixels (`1:1`). */
|
|
595
595
|
static SQUARE = new PixelAspectRatio(1, 1);
|
|
596
596
|
/**
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk/aws-mediaconnect-alpha",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.271.0-alpha.0",
|
|
5
5
|
"description": "The CDK construct library for AWS Elemental MediaConnect",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"types": "lib/index.d.ts",
|
|
@@ -79,17 +79,17 @@
|
|
|
79
79
|
},
|
|
80
80
|
"license": "Apache-2.0",
|
|
81
81
|
"devDependencies": {
|
|
82
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
82
|
+
"@aws-cdk/cdk-build-tools": "2.271.0-alpha.0",
|
|
83
83
|
"@aws-cdk/integ-runner": "^2.202.3",
|
|
84
|
-
"@aws-cdk/integ-tests-alpha": "^2.
|
|
85
|
-
"@aws-cdk/pkglint": "2.
|
|
84
|
+
"@aws-cdk/integ-tests-alpha": "^2.271.0-alpha.0",
|
|
85
|
+
"@aws-cdk/pkglint": "2.271.0-alpha.0",
|
|
86
86
|
"@types/jest": "^29.5.14",
|
|
87
|
-
"aws-cdk-lib": "2.
|
|
87
|
+
"aws-cdk-lib": "2.271.0",
|
|
88
88
|
"jest": "^29.7.0"
|
|
89
89
|
},
|
|
90
90
|
"homepage": "https://github.com/aws/aws-cdk",
|
|
91
91
|
"peerDependencies": {
|
|
92
|
-
"aws-cdk-lib": "^2.
|
|
92
|
+
"aws-cdk-lib": "^2.271.0",
|
|
93
93
|
"constructs": "^10.5.0"
|
|
94
94
|
},
|
|
95
95
|
"separate-module": false,
|
|
@@ -109,6 +109,11 @@
|
|
|
109
109
|
"publishConfig": {
|
|
110
110
|
"tag": "latest"
|
|
111
111
|
},
|
|
112
|
+
"jsiiRosetta": {
|
|
113
|
+
"exampleDependencies": {
|
|
114
|
+
"@aws-cdk/aws-medialive-alpha": "^2.271.0-alpha.0"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
112
117
|
"pkglint": {
|
|
113
118
|
"exclude": [
|
|
114
119
|
"naming/package-matches-directory",
|