@fusionauth/typescript-client 1.36.0 → 1.39.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/build/src/FusionAuthClient.d.ts +268 -34
- package/build/src/FusionAuthClient.js +108 -11
- package/build/src/FusionAuthClient.js.map +1 -1
- package/dist/fusionauth-typescript-client.js +109 -12
- package/dist/fusionauth-typescript-client.min.js +1 -1
- package/dist/fusionauth-typescript-client.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -412,7 +412,7 @@ exports.default = DefaultRESTClientBuilder;
|
|
|
412
412
|
(function (global){
|
|
413
413
|
"use strict";
|
|
414
414
|
/*
|
|
415
|
-
* Copyright (c) 2019, FusionAuth, All Rights Reserved
|
|
415
|
+
* Copyright (c) 2019-2022, FusionAuth, All Rights Reserved
|
|
416
416
|
*
|
|
417
417
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
418
418
|
* you may not use this file except in compliance with the License.
|
|
@@ -551,9 +551,9 @@ var FusionAuthClient = /** @class */ (function () {
|
|
|
551
551
|
/**
|
|
552
552
|
* Check to see if the user must obtain a Trust Token Id in order to complete a change password request.
|
|
553
553
|
* When a user has enabled Two-Factor authentication, before you are allowed to use the Change Password API to change
|
|
554
|
-
* your password, you must obtain a
|
|
554
|
+
* your password, you must obtain a Trust Token by completing a Two-Factor Step-Up authentication.
|
|
555
555
|
*
|
|
556
|
-
* An HTTP status code of
|
|
556
|
+
* An HTTP status code of 400 with a general error code of [TrustTokenRequired] indicates that a Trust Token is required to make a POST request to this API.
|
|
557
557
|
*
|
|
558
558
|
* @param {string} changePasswordId The change password Id used to find the user. This value is generated by FusionAuth once the change password workflow has been initiated.
|
|
559
559
|
* @returns {Promise<ClientResponse<void>>}
|
|
@@ -568,9 +568,9 @@ var FusionAuthClient = /** @class */ (function () {
|
|
|
568
568
|
/**
|
|
569
569
|
* Check to see if the user must obtain a Trust Token Id in order to complete a change password request.
|
|
570
570
|
* When a user has enabled Two-Factor authentication, before you are allowed to use the Change Password API to change
|
|
571
|
-
* your password, you must obtain a
|
|
571
|
+
* your password, you must obtain a Trust Token by completing a Two-Factor Step-Up authentication.
|
|
572
572
|
*
|
|
573
|
-
* An HTTP status code of
|
|
573
|
+
* An HTTP status code of 400 with a general error code of [TrustTokenRequired] indicates that a Trust Token is required to make a POST request to this API.
|
|
574
574
|
*
|
|
575
575
|
* @param {string} encodedJWT The encoded JWT (access token).
|
|
576
576
|
* @returns {Promise<ClientResponse<void>>}
|
|
@@ -585,9 +585,9 @@ var FusionAuthClient = /** @class */ (function () {
|
|
|
585
585
|
/**
|
|
586
586
|
* Check to see if the user must obtain a Trust Request Id in order to complete a change password request.
|
|
587
587
|
* When a user has enabled Two-Factor authentication, before you are allowed to use the Change Password API to change
|
|
588
|
-
* your password, you must obtain a
|
|
588
|
+
* your password, you must obtain a Trust Request Id by completing a Two-Factor Step-Up authentication.
|
|
589
589
|
*
|
|
590
|
-
* An HTTP status code of
|
|
590
|
+
* An HTTP status code of 400 with a general error code of [TrustTokenRequired] indicates that a Trust Token is required to make a POST request to this API.
|
|
591
591
|
*
|
|
592
592
|
* @param {string} loginId The loginId of the User that you intend to change the password for.
|
|
593
593
|
* @returns {Promise<ClientResponse<void>>}
|
|
@@ -2025,6 +2025,22 @@ var FusionAuthClient = /** @class */ (function () {
|
|
|
2025
2025
|
.withMethod("PUT")
|
|
2026
2026
|
.go();
|
|
2027
2027
|
};
|
|
2028
|
+
/**
|
|
2029
|
+
* Sends a ping to FusionAuth indicating that the user was automatically logged into an application. When using
|
|
2030
|
+
* FusionAuth's SSO or your own, you should call this if the user is already logged in centrally, but accesses an
|
|
2031
|
+
* application where they no longer have a session. This helps correctly track login counts, times and helps with
|
|
2032
|
+
* reporting.
|
|
2033
|
+
*
|
|
2034
|
+
* @param {LoginPingRequest} request The login request that contains the user credentials used to log them in.
|
|
2035
|
+
* @returns {Promise<ClientResponse<LoginResponse>>}
|
|
2036
|
+
*/
|
|
2037
|
+
FusionAuthClient.prototype.loginPingWithRequest = function (request) {
|
|
2038
|
+
return this.start()
|
|
2039
|
+
.withUri('/api/login')
|
|
2040
|
+
.withJSONBody(request)
|
|
2041
|
+
.withMethod("PUT")
|
|
2042
|
+
.go();
|
|
2043
|
+
};
|
|
2028
2044
|
/**
|
|
2029
2045
|
* The Logout API is intended to be used to remove the refresh token and access token cookies if they exist on the
|
|
2030
2046
|
* client and revoke the refresh token stored. This API does nothing if the request does not contain an access
|
|
@@ -3395,15 +3411,15 @@ var FusionAuthClient = /** @class */ (function () {
|
|
|
3395
3411
|
.go();
|
|
3396
3412
|
};
|
|
3397
3413
|
/**
|
|
3398
|
-
* Retrieves a single refresh token by unique Id. This is not the same thing as the string value of the refresh token
|
|
3414
|
+
* Retrieves a single refresh token by unique Id. This is not the same thing as the string value of the refresh token. If you have that, you already have what you need.
|
|
3399
3415
|
*
|
|
3400
|
-
* @param {UUID}
|
|
3416
|
+
* @param {UUID} tokenId The Id of the token.
|
|
3401
3417
|
* @returns {Promise<ClientResponse<RefreshTokenResponse>>}
|
|
3402
3418
|
*/
|
|
3403
|
-
FusionAuthClient.prototype.retrieveRefreshTokenById = function (
|
|
3419
|
+
FusionAuthClient.prototype.retrieveRefreshTokenById = function (tokenId) {
|
|
3404
3420
|
return this.start()
|
|
3405
3421
|
.withUri('/api/jwt/refresh')
|
|
3406
|
-
.withUriSegment(
|
|
3422
|
+
.withUriSegment(tokenId)
|
|
3407
3423
|
.withMethod("GET")
|
|
3408
3424
|
.go();
|
|
3409
3425
|
};
|
|
@@ -3549,6 +3565,26 @@ var FusionAuthClient = /** @class */ (function () {
|
|
|
3549
3565
|
.withMethod("GET")
|
|
3550
3566
|
.go();
|
|
3551
3567
|
};
|
|
3568
|
+
/**
|
|
3569
|
+
* Retrieve a user's two-factor status.
|
|
3570
|
+
*
|
|
3571
|
+
* This can be used to see if a user will need to complete a two-factor challenge to complete a login,
|
|
3572
|
+
* and optionally identify the state of the two-factor trust across various applications.
|
|
3573
|
+
*
|
|
3574
|
+
* @param {UUID} userId The user Id to retrieve the Two-Factor status.
|
|
3575
|
+
* @param {UUID} applicationId The optional applicationId to verify.
|
|
3576
|
+
* @param {string} twoFactorTrustId The optional two-factor trust Id to verify.
|
|
3577
|
+
* @returns {Promise<ClientResponse<TwoFactorStatusResponse>>}
|
|
3578
|
+
*/
|
|
3579
|
+
FusionAuthClient.prototype.retrieveTwoFactorStatus = function (userId, applicationId, twoFactorTrustId) {
|
|
3580
|
+
return this.start()
|
|
3581
|
+
.withUri('/api/two-factor/status')
|
|
3582
|
+
.withParameter('userId', userId)
|
|
3583
|
+
.withParameter('applicationId', applicationId)
|
|
3584
|
+
.withUriSegment(twoFactorTrustId)
|
|
3585
|
+
.withMethod("GET")
|
|
3586
|
+
.go();
|
|
3587
|
+
};
|
|
3552
3588
|
/**
|
|
3553
3589
|
* Retrieves the user for the given Id.
|
|
3554
3590
|
*
|
|
@@ -4093,6 +4129,19 @@ var FusionAuthClient = /** @class */ (function () {
|
|
|
4093
4129
|
.withMethod("POST")
|
|
4094
4130
|
.go();
|
|
4095
4131
|
};
|
|
4132
|
+
/**
|
|
4133
|
+
* Searches groups with the specified criteria and pagination.
|
|
4134
|
+
*
|
|
4135
|
+
* @param {GroupSearchRequest} request The search criteria and pagination information.
|
|
4136
|
+
* @returns {Promise<ClientResponse<GroupSearchResponse>>}
|
|
4137
|
+
*/
|
|
4138
|
+
FusionAuthClient.prototype.searchGroups = function (request) {
|
|
4139
|
+
return this.start()
|
|
4140
|
+
.withUri('/api/group/search')
|
|
4141
|
+
.withJSONBody(request)
|
|
4142
|
+
.withMethod("POST")
|
|
4143
|
+
.go();
|
|
4144
|
+
};
|
|
4096
4145
|
/**
|
|
4097
4146
|
* Searches the IP Access Control Lists with the specified criteria and pagination.
|
|
4098
4147
|
*
|
|
@@ -4875,6 +4924,21 @@ var FusionAuthClient = /** @class */ (function () {
|
|
|
4875
4924
|
.withMethod("POST")
|
|
4876
4925
|
.go();
|
|
4877
4926
|
};
|
|
4927
|
+
/**
|
|
4928
|
+
* Administratively verify a user's email address. Use this method to bypass email verification for the user.
|
|
4929
|
+
*
|
|
4930
|
+
* The request body will contain the userId to be verified. An API key is required when sending the userId in the request body.
|
|
4931
|
+
*
|
|
4932
|
+
* @param {VerifyEmailRequest} request The request that contains the userId to verify.
|
|
4933
|
+
* @returns {Promise<ClientResponse<void>>}
|
|
4934
|
+
*/
|
|
4935
|
+
FusionAuthClient.prototype.verifyEmailAddressByUserId = function (request) {
|
|
4936
|
+
return this.start()
|
|
4937
|
+
.withUri('/api/user/verify-email')
|
|
4938
|
+
.withJSONBody(request)
|
|
4939
|
+
.withMethod("POST")
|
|
4940
|
+
.go();
|
|
4941
|
+
};
|
|
4878
4942
|
/**
|
|
4879
4943
|
* Confirms an application registration. The Id given is usually from an email sent to the user.
|
|
4880
4944
|
*
|
|
@@ -4949,11 +5013,23 @@ var Algorithm;
|
|
|
4949
5013
|
Algorithm["HS256"] = "HS256";
|
|
4950
5014
|
Algorithm["HS384"] = "HS384";
|
|
4951
5015
|
Algorithm["HS512"] = "HS512";
|
|
5016
|
+
Algorithm["PS256"] = "PS256";
|
|
5017
|
+
Algorithm["PS384"] = "PS384";
|
|
5018
|
+
Algorithm["PS512"] = "PS512";
|
|
4952
5019
|
Algorithm["RS256"] = "RS256";
|
|
4953
5020
|
Algorithm["RS384"] = "RS384";
|
|
4954
5021
|
Algorithm["RS512"] = "RS512";
|
|
4955
5022
|
Algorithm["none"] = "none";
|
|
4956
5023
|
})(Algorithm = exports.Algorithm || (exports.Algorithm = {}));
|
|
5024
|
+
/**
|
|
5025
|
+
* @author Daniel DeGroff
|
|
5026
|
+
*/
|
|
5027
|
+
var ApplicationMultiFactorTrustPolicy;
|
|
5028
|
+
(function (ApplicationMultiFactorTrustPolicy) {
|
|
5029
|
+
ApplicationMultiFactorTrustPolicy["Any"] = "Any";
|
|
5030
|
+
ApplicationMultiFactorTrustPolicy["This"] = "This";
|
|
5031
|
+
ApplicationMultiFactorTrustPolicy["None"] = "None";
|
|
5032
|
+
})(ApplicationMultiFactorTrustPolicy = exports.ApplicationMultiFactorTrustPolicy || (exports.ApplicationMultiFactorTrustPolicy = {}));
|
|
4957
5033
|
/**
|
|
4958
5034
|
* @author Brett Pontarelli
|
|
4959
5035
|
*/
|
|
@@ -5106,6 +5182,18 @@ var EventType;
|
|
|
5106
5182
|
EventType["AuditLogCreate"] = "audit-log.create";
|
|
5107
5183
|
EventType["EventLogCreate"] = "event-log.create";
|
|
5108
5184
|
EventType["KickstartSuccess"] = "kickstart.success";
|
|
5185
|
+
EventType["GroupCreate"] = "group.create";
|
|
5186
|
+
EventType["GroupCreateComplete"] = "group.create.complete";
|
|
5187
|
+
EventType["GroupDelete"] = "group.delete";
|
|
5188
|
+
EventType["GroupDeleteComplete"] = "group.delete.complete";
|
|
5189
|
+
EventType["GroupMemberAdd"] = "group.member.add";
|
|
5190
|
+
EventType["GroupMemberAddComplete"] = "group.member.add.complete";
|
|
5191
|
+
EventType["GroupMemberRemove"] = "group.member.remove";
|
|
5192
|
+
EventType["GroupMemberRemoveComplete"] = "group.member.remove.complete";
|
|
5193
|
+
EventType["GroupMemberUpdate"] = "group.member.update";
|
|
5194
|
+
EventType["GroupMemberUpdateComplete"] = "group.member.update.complete";
|
|
5195
|
+
EventType["GroupUpdate"] = "group.update";
|
|
5196
|
+
EventType["GroupUpdateComplete"] = "group.update.complete";
|
|
5109
5197
|
EventType["UserAction"] = "user.action";
|
|
5110
5198
|
EventType["UserBulkCreate"] = "user.bulk.create";
|
|
5111
5199
|
EventType["UserCreate"] = "user.create";
|
|
@@ -5243,6 +5331,7 @@ var HTTPMethod;
|
|
|
5243
5331
|
var IdentityProviderLinkingStrategy;
|
|
5244
5332
|
(function (IdentityProviderLinkingStrategy) {
|
|
5245
5333
|
IdentityProviderLinkingStrategy["CreatePendingLink"] = "CreatePendingLink";
|
|
5334
|
+
IdentityProviderLinkingStrategy["Disabled"] = "Disabled";
|
|
5246
5335
|
IdentityProviderLinkingStrategy["LinkAnonymously"] = "LinkAnonymously";
|
|
5247
5336
|
IdentityProviderLinkingStrategy["LinkByEmail"] = "LinkByEmail";
|
|
5248
5337
|
IdentityProviderLinkingStrategy["LinkByEmailForExistingUser"] = "LinkByEmailForExistingUser";
|
|
@@ -5391,6 +5480,14 @@ var MessengerType;
|
|
|
5391
5480
|
MessengerType["Kafka"] = "Kafka";
|
|
5392
5481
|
MessengerType["Twilio"] = "Twilio";
|
|
5393
5482
|
})(MessengerType = exports.MessengerType || (exports.MessengerType = {}));
|
|
5483
|
+
/**
|
|
5484
|
+
* @author Daniel DeGroff
|
|
5485
|
+
*/
|
|
5486
|
+
var MultiFactorLoginPolicy;
|
|
5487
|
+
(function (MultiFactorLoginPolicy) {
|
|
5488
|
+
MultiFactorLoginPolicy["Disabled"] = "Disabled";
|
|
5489
|
+
MultiFactorLoginPolicy["Enabled"] = "Enabled";
|
|
5490
|
+
})(MultiFactorLoginPolicy = exports.MultiFactorLoginPolicy || (exports.MultiFactorLoginPolicy = {}));
|
|
5394
5491
|
var OAuthErrorReason;
|
|
5395
5492
|
(function (OAuthErrorReason) {
|
|
5396
5493
|
OAuthErrorReason["auth_code_not_found"] = "auth_code_not_found";
|
|
@@ -5640,4 +5737,4 @@ var XMLSignatureLocation;
|
|
|
5640
5737
|
},{"./DefaultRESTClientBuilder":5}]},{},[1])(1)
|
|
5641
5738
|
});
|
|
5642
5739
|
|
|
5643
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC50cyIsIm5vZGVfbW9kdWxlcy9ub2RlLWZldGNoL2Jyb3dzZXIuanMiLCJzcmMvQ2xpZW50UmVzcG9uc2UudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnQudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyLnRzIiwic3JjL0Z1c2lvbkF1dGhDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7O0FBRUgsMkRBQXFEO0FBQ3JELGtCQUFlLDBCQUFnQixDQUFDO0FBRWhDLDRDQUF1QztBQUV2QyxvREFBK0M7QUFDL0MsMENBQXFDOzs7O0FDdEJyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4QkE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7O0FBRUg7SUFBQTtJQVFBLENBQUM7SUFIQyxzQ0FBYSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN6RCxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQVJBLEFBUUMsSUFBQTs7Ozs7O0FDeEJEOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILG1EQUE4QztBQUM5Qyx5Q0FBeUU7QUFDekUsMkJBQW9DO0FBRXBDOzs7O0dBSUc7QUFDSDtJQVVFLDJCQUFtQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQVJ4QixZQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUVyQyxlQUFVLEdBQTJCLEVBQUUsQ0FBQztRQUd4QyxvQkFBZSxHQUF3Qixp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QUFIRCxXQUFZLG9CQUFvQjtJQUM5Qix1REFBK0IsQ0FBQTtJQUMvQiwrQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSFcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFHL0I7QUF5R0QsSUFBWSxvQkFHWDtBQUhELFdBQVksb0JBQW9CO0lBQzlCLCtDQUF1QixDQUFBO0lBQ3ZCLDZDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxvQkFBb0IsR0FBcEIsNEJBQW9CLEtBQXBCLDRCQUFvQixRQUcvQiIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBGdXNpb25BdXRoQ2xpZW50IGZyb20gJy4vc3JjL0Z1c2lvbkF1dGhDbGllbnQnXG5leHBvcnQgZGVmYXVsdCBGdXNpb25BdXRoQ2xpZW50O1xuXG5leHBvcnQgKiBmcm9tICcuL3NyYy9GdXNpb25BdXRoQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0RlZmF1bHRSRVNUQ2xpZW50QnVpbGRlcic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9DbGllbnRSZXNwb25zZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9JUkVTVENsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9JUkVTVENsaWVudEJ1aWxkZXInO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgZ2V0R2xvYmFsID0gZnVuY3Rpb24gKCkge1xuXHQvLyB0aGUgb25seSByZWxpYWJsZSBtZWFucyB0byBnZXQgdGhlIGdsb2JhbCBvYmplY3QgaXNcblx0Ly8gYEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKClgXG5cdC8vIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIENTUCB2aW9sYXRpb25zIGluIENocm9tZSBhcHBzLlxuXHRpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG5cdGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG5cdHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0Jyk7XG59XG5cbnZhciBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZ2xvYmFsLmZldGNoO1xuXG4vLyBOZWVkZWQgZm9yIFR5cGVTY3JpcHQgYW5kIFdlYnBhY2suXG5pZiAoZ2xvYmFsLmZldGNoKSB7XG5cdGV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbC5mZXRjaC5iaW5kKGdsb2JhbCk7XG59XG5cbmV4cG9ydHMuSGVhZGVycyA9IGdsb2JhbC5IZWFkZXJzO1xuZXhwb3J0cy5SZXF1ZXN0ID0gZ2xvYmFsLlJlcXVlc3Q7XG5leHBvcnRzLlJlc3BvbnNlID0gZ2xvYmFsLlJlc3BvbnNlOyIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsaWVudFJlc3BvbnNlPFQ+IHtcbiAgcHVibGljIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgcHVibGljIHJlc3BvbnNlOiBUO1xuICBwdWJsaWMgZXhjZXB0aW9uOiBFcnJvcjtcblxuICB3YXNTdWNjZXNzZnVsKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXR1c0NvZGUgPj0gMjAwICYmIHRoaXMuc3RhdHVzQ29kZSA8IDMwMDtcbiAgfVxufSIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktMjAyMCwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IElSRVNUQ2xpZW50LCB7RXJyb3JSZXNwb25zZUhhbmRsZXIsIFJlc3BvbnNlSGFuZGxlcn0gZnJvbSBcIi4vSVJFU1RDbGllbnRcIjtcbmltcG9ydCBDbGllbnRSZXNwb25zZSBmcm9tIFwiLi9DbGllbnRSZXNwb25zZVwiO1xuaW1wb3J0IGZldGNoLCB7Qm9keUluaXQsIFJlcXVlc3RDcmVkZW50aWFscywgUmVzcG9uc2V9IGZyb20gJ25vZGUtZmV0Y2gnO1xuaW1wb3J0IHtVUkxTZWFyY2hQYXJhbXN9IGZyb20gXCJ1cmxcIjtcblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBcbiAqIEBhdXRob3IgVHlsZXIgU2NvdHRcbiAqIEBhdXRob3IgVEogUGVkZW5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4gaW1wbGVtZW50cyBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gIHB1YmxpYyBib2R5OiBCb2R5SW5pdDtcbiAgcHVibGljIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHVibGljIG1ldGhvZDogc3RyaW5nO1xuICBwdWJsaWMgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwdWJsaWMgdXJpOiBzdHJpbmc7XG4gIHB1YmxpYyBjcmVkZW50aWFsczogUmVxdWVzdENyZWRlbnRpYWxzO1xuICBwdWJsaWMgcmVzcG9uc2VIYW5kbGVyOiBSZXNwb25zZUhhbmRsZXI8UlQ+ID0gRGVmYXVsdFJFU1RDbGllbnQuSlNPTlJlc3BvbnNlSGFuZGxlcjtcbiAgcHVibGljIGVycm9yUmVzcG9uc2VIYW5kbGVyOiBFcnJvclJlc3BvbnNlSGFuZGxlcjxFUlQ+ID0gRGVmYXVsdFJFU1RDbGllbnQuRXJyb3JKU09OUmVzcG9uc2VIYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBob3N0OiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlciB1c2luZyBhIGtleVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSB2YWx1ZSBvZiB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEByZXR1cm5zIHtEZWZhdWx0UkVTVENsaWVudH1cbiAgICovXG4gIHdpdGhBdXRob3JpemF0aW9uKGtleTogc3RyaW5nKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGlmIChrZXkgPT09IG51bGwgfHwgdHlwZW9mIGtleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMud2l0aEhlYWRlcignQXV0aG9yaXphdGlvbicsIGtleSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNlZ21lbnQgdG8gdGhlIHJlcXVlc3QgdXJpXG4gICAqL1xuICB3aXRoVXJpU2VnbWVudChzZWdtZW50OiBzdHJpbmcgfCBudW1iZXIpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgaWYgKHNlZ21lbnQgPT09IG51bGwgfHwgc2VnbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRoaXMudXJpID09PSBudWxsKSB7XG4gICAgICB0aGlzLnVyaSA9ICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy51cmkuY2hhckF0KHRoaXMudXJpLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgIHRoaXMudXJpICs9ICcvJztcbiAgICB9XG4gICAgdGhpcy51cmkgPSB0aGlzLnVyaSArIHNlZ21lbnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIHVybCArIHBhcmFtZXRlciBsaXN0XG4gICAqL1xuICBnZXRGdWxsVXJsKCkge1xuICAgIHJldHVybiB0aGlzLmhvc3QgKyB0aGlzLnVyaSArIHRoaXMuZ2V0UXVlcnlTdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBib2R5IG9mIHRoZSBjbGllbnQgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGJvZHkgVGhlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSByZXF1ZXN0IGJvZHkgYXMgZm9ybSBkYXRhLlxuICAgKi9cbiAgd2l0aEZvcm1EYXRhKGJvZHk6IFVSTFNlYXJjaFBhcmFtcyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBjb25zdCBib2R5MiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAoYm9keSkge1xuICAgICAgYm9keS5mb3JFYWNoKCh2YWx1ZSwgbmFtZSwgc2VhcmNoUGFyYW1zKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwICYmIHZhbHVlICE9IFwibnVsbFwiICYmIHZhbHVlICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBib2R5Mi5zZXQobmFtZSx2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYm9keSA9IGJvZHkyO1xuICAgIH1cbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBoZWFkZXIgdG8gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyLlxuICAgKi9cbiAgd2l0aEhlYWRlcihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBKU09OLlxuICAgKi9cbiAgd2l0aEpTT05Cb2R5KGJvZHk6IG9iamVjdCk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICB0aGlzLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgLy8gT21pdCB0aGUgQ29udGVudC1MZW5ndGgsIHRoaXMgaXMgc2V0IGF1dG8tbWFnaWNhbGx5IGJ5IHRoZSByZXF1ZXN0IGxpYnJhcnlcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBodHRwIG1ldGhvZCBmb3IgdGhlIHJlcXVlc3RcbiAgICovXG4gIHdpdGhNZXRob2QobWV0aG9kOiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdXJpIG9mIHRoZSByZXF1ZXN0XG4gICAqL1xuICB3aXRoVXJpKHVyaTogc3RyaW5nKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMudXJpID0gdXJpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcGFyYW1ldGVycyB0byB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLCBtYXkgYmUgYSBzdHJpbmcsIG9iamVjdCBvciBudW1iZXIuXG4gICAqL1xuICB3aXRoUGFyYW1ldGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLnBhcmFtZXRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHJlcXVlc3QncyBjcmVkZW50aWFscy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIEEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGUgcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgICovXG4gIHdpdGhDcmVkZW50aWFscyh2YWx1ZTogUmVxdWVzdENyZWRlbnRpYWxzKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhSZXNwb25zZUhhbmRsZXIoaGFuZGxlcjogUmVzcG9uc2VIYW5kbGVyPFJUPik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLnJlc3BvbnNlSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoRXJyb3JSZXNwb25zZUhhbmRsZXIoaGFuZGxlcjogRXJyb3JSZXNwb25zZUhhbmRsZXI8RVJUPik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmVycm9yUmVzcG9uc2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIHJlcXVlc3QgYW5kIHJldHVybiBhIHByb21pc2UuIFRoaXMgcHJvbWlzZSB3aWxsIHJlc29sdmUgaWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bFxuICAgKiBhbmQgcmVqZWN0IG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdvKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UlQ+PiB7XG4gICAgY29uc3QgY2xpZW50UmVzcG9uc2UgPSBuZXcgQ2xpZW50UmVzcG9uc2U8UlQ+KCk7XG5cbiAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIHRoaXMuZ2V0RnVsbFVybCgpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICBib2R5OiB0aGlzLmJvZHkgYXMgQm9keUluaXQsXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIChDcmVkZW50aWFscyBhcmUgbm90IHN1cHBvcnRlZCBvbiBOb2RlSlMpXG4gICAgICAgICAgICBjcmVkZW50aWFsczogdGhpcy5jcmVkZW50aWFscyxcbiAgICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc3BvbnNlSGFuZGxlcihyZXNwb25zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBhd2FpdCB0aGlzLmVycm9yUmVzcG9uc2VIYW5kbGVyKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2xpZW50UmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7IC8vIERvbid0IGNhdGNoIGEgQ2xpZW50UmVzcG9uc2UgKHdlIHdhbnQgdGhpcyB0byB0cmlnZ2VyIHRoZSBjYXRjaCBvZiB0aGUgcHJvbWlzZVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2UpIHsgLy8gVHJ5IHRvIHJlY292ZXIgdGhlIHJlc3BvbnNlIHN0YXR1c1xuICAgICAgICBjbGllbnRSZXNwb25zZS5zdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgfVxuICAgICAgY2xpZW50UmVzcG9uc2UuZXhjZXB0aW9uID0gZXJyb3I7XG5cbiAgICAgIHRocm93IGNsaWVudFJlc3BvbnNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlTdHJpbmcoKSB7XG4gICAgdmFyIHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMucGFyYW1ldGVycykge1xuICAgICAgcXVlcnlTdHJpbmcgKz0gKHF1ZXJ5U3RyaW5nLmxlbmd0aCA9PT0gMCkgPyAnPycgOiAnJic7XG4gICAgICBxdWVyeVN0cmluZyArPSBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5wYXJhbWV0ZXJzW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIEpTT04gZm9ybSBvZiB0aGUgcmVzcG9uc2UgdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIEpTT05SZXNwb25zZUhhbmRsZXI8UlQ+KHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UlQ+PiB7XG4gICAgbGV0IGNsaWVudFJlc3BvbnNlID0gbmV3IENsaWVudFJlc3BvbnNlPFJUPigpO1xuXG4gICAgY2xpZW50UmVzcG9uc2Uuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICBsZXQgdHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICAgIGlmICh0eXBlICYmIHR5cGUuc3RhcnRzV2l0aChcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgIGNsaWVudFJlc3BvbnNlLnJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGllbnRSZXNwb25zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgSlNPTiBmb3JtIG9mIHRoZSByZXNwb25zZSB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVzcG9uc2VcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgRXJyb3JKU09OUmVzcG9uc2VIYW5kbGVyPEVSVD4ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFUlQ+PiB7XG4gICAgbGV0IGNsaWVudFJlc3BvbnNlID0gbmV3IENsaWVudFJlc3BvbnNlPEVSVD4oKTtcblxuICAgIGNsaWVudFJlc3BvbnNlLnN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgbGV0IHR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgICBpZiAodHlwZSAmJiB0eXBlLnN0YXJ0c1dpdGgoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSB7XG4gICAgICBjbGllbnRSZXNwb25zZS5leGNlcHRpb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaWVudFJlc3BvbnNlO1xuICB9XG59XG4iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgSVJFU1RDbGllbnQgZnJvbSBcIi4vSVJFU1RDbGllbnRcIjtcbmltcG9ydCBEZWZhdWx0UkVTVENsaWVudCBmcm9tIFwiLi9EZWZhdWx0UkVTVENsaWVudFwiO1xuaW1wb3J0IElSRVNUQ2xpZW50QnVpbGRlciBmcm9tIFwiLi9JUkVTVENsaWVudEJ1aWxkZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyIGltcGxlbWVudHMgSVJFU1RDbGllbnRCdWlsZGVyIHtcbiAgYnVpbGQ8UlQsIEVSVD4oaG9zdDogc3RyaW5nKTogSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHJldHVybiBuZXcgRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4oaG9zdCk7XG4gIH1cbn1cbiIsIi8qXG4qIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4qIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKlxuKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4qIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4qIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4qIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgSVJFU1RDbGllbnQgZnJvbSBcIi4vSVJFU1RDbGllbnRcIlxuaW1wb3J0IERlZmF1bHRSRVNUQ2xpZW50QnVpbGRlciBmcm9tIFwiLi9EZWZhdWx0UkVTVENsaWVudEJ1aWxkZXJcIjtcbmltcG9ydCBJUkVTVENsaWVudEJ1aWxkZXIgZnJvbSBcIi4vSVJFU1RDbGllbnRCdWlsZGVyXCI7XG5pbXBvcnQgQ2xpZW50UmVzcG9uc2UgZnJvbSBcIi4vQ2xpZW50UmVzcG9uc2VcIjtcbmltcG9ydCB7UmVxdWVzdENyZWRlbnRpYWxzfSBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0IHtVUkxTZWFyY2hQYXJhbXN9IGZyb20gXCJ1cmxcIjtcblxuZXhwb3J0IGNsYXNzIEZ1c2lvbkF1dGhDbGllbnQge1xuICBwdWJsaWMgY2xpZW50QnVpbGRlcjogSVJFU1RDbGllbnRCdWlsZGVyID0gbmV3IERlZmF1bHRSRVNUQ2xpZW50QnVpbGRlcigpO1xuICBwdWJsaWMgY3JlZGVudGlhbHM6IFJlcXVlc3RDcmVkZW50aWFscztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYXBpS2V5OiBzdHJpbmcsXG4gICAgcHVibGljIGhvc3Q6IHN0cmluZyxcbiAgICBwdWJsaWMgdGVuYW50SWQ/OiBzdHJpbmcsXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRlbmFudCBpZCwgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBYLUZ1c2lvbkF1dGgtVGVuYW50SWQgaGVhZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHRlbmFudElkIFRoZSB2YWx1ZSBvZiB0aGUgWC1GdXNpb25BdXRoLVRlbmFudElkIGhlYWRlci5cbiAgICogQHJldHVybnMge0Z1c2lvbkF1dGhDbGllbnR9XG4gICAqL1xuICBzZXRUZW5hbnRJZCh0ZW5hbnRJZDogc3RyaW5nIHwgbnVsbCk6IEZ1c2lvbkF1dGhDbGllbnQge1xuICAgIHRoaXMudGVuYW50SWQgPSB0ZW5hbnRJZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHdoZXRoZXIgYW5kIGhvdyBjb29raWVzIHdpbGwgYmUgc2VudCB3aXRoIGVhY2ggcmVxdWVzdC5cbiAgICogXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBhbmQgaG93IGNvb2tpZXMgd2lsbCBiZSBzZW50LlxuICAgKiBAcmV0dXJucyB7RnVzaW9uQXV0aENsaWVudH1cbiAgICovXG4gIHNldFJlcXVlc3RDcmVkZW50aWFscyh2YWx1ZTogUmVxdWVzdENyZWRlbnRpYWxzKTogRnVzaW9uQXV0aENsaWVudCB7XG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFuIGFjdGlvbiBvbiBhIHVzZXIuIFRoZSB1c2VyIGJlaW5nIGFjdGlvbmVkIGlzIGNhbGxlZCB0aGUgXCJhY3Rpb25lZVwiIGFuZCB0aGUgdXNlciB0YWtpbmcgdGhlIGFjdGlvbiBpcyBjYWxsZWQgdGhlXG4gICAqIFwiYWN0aW9uZXJcIi4gQm90aCB1c2VyIGlkcyBhcmUgcmVxdWlyZWQgaW4gdGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge0FjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIGFjdGlvbiByZXF1ZXN0IHRoYXQgaW5jbHVkZXMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aW9uIGJlaW5nIHRha2VuIGluY2x1ZGluZ1xuICAgKiAgICB0aGUgaWQgb2YgdGhlIGFjdGlvbiwgYW55IG9wdGlvbnMgYW5kIHRoZSBkdXJhdGlvbiAoaWYgYXBwbGljYWJsZSkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBhY3Rpb25Vc2VyKHJlcXVlc3Q6IEFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3RvciB1c2luZyBhIGxpY2Vuc2UgaWQgYW5kIG9wdGlvbmFsbHkgYSBsaWNlbnNlIHRleHQgKGZvciBhaXItZ2FwcGVkIGRlcGxveW1lbnRzKVxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0b3JSZXF1ZXN0fSByZXF1ZXN0IEFuIG9wdGlvbmFsIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgbGljZW5zZSB0ZXh0IHRvIGFjdGl2YXRlIFJlYWN0b3IgKHVzZWZ1bCBmb3IgYWlyLWdhcCBkZXBsb3ltZW50cyBvZiBGdXNpb25BdXRoKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgYWN0aXZhdGVSZWFjdG9yKHJlcXVlc3Q6IFJlYWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZWFjdG9yJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHVzZXIgdG8gYW4gZXhpc3RpbmcgZmFtaWx5LiBUaGUgZmFtaWx5IGlkIG11c3QgYmUgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIFRoZSBpZCBvZiB0aGUgZmFtaWx5LlxuICAgKiBAcGFyYW0ge0ZhbWlseVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGRldGVybWluZSB3aGljaCB1c2VyIHRvIGFkZCB0byB0aGUgZmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+fVxuICAgKi9cbiAgYWRkVXNlclRvRmFtaWx5KGZhbWlseUlkOiBVVUlELCByZXF1ZXN0OiBGYW1pbHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGYW1pbHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZhbWlseUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIHVzZXIgYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjdGlvbklkIFRoZSBhY3Rpb24gaWQgb2YgdGhlIGFjdGlvbiB0byBjYW5jZWwuXG4gICAqIEBwYXJhbSB7QWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgYWN0aW9uIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhbmNlbGxhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNhbmNlbEFjdGlvbihhY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIGEgdXNlcidzIHBhc3N3b3JkIHVzaW5nIHRoZSBjaGFuZ2UgcGFzc3dvcmQgSWQuIFRoaXMgdXN1YWxseSBvY2N1cnMgYWZ0ZXIgYW4gZW1haWwgaGFzIGJlZW4gc2VudCB0byB0aGUgdXNlclxuICAgKiBhbmQgdGhleSBjbGlja2VkIG9uIGEgbGluayB0byByZXNldCB0aGVpciBwYXNzd29yZC5cbiAgICogXG4gICAqIEFzIG9mIHZlcnNpb24gMS4zMi4yLCBwcmVmZXIgc2VuZGluZyB0aGUgY2hhbmdlUGFzc3dvcmRJZCBpbiB0aGUgcmVxdWVzdCBib2R5LiBUbyBkbyB0aGlzLCBvbWl0IHRoZSBmaXJzdCBwYXJhbWV0ZXIsIGFuZCBzZXRcbiAgICogdGhlIHZhbHVlIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFuZ2VQYXNzd29yZElkIFRoZSBjaGFuZ2UgcGFzc3dvcmQgSWQgdXNlZCB0byBmaW5kIHRoZSB1c2VyLiBUaGlzIHZhbHVlIGlzIGdlbmVyYXRlZCBieSBGdXNpb25BdXRoIG9uY2UgdGhlIGNoYW5nZSBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQuXG4gICAqIEBwYXJhbSB7Q2hhbmdlUGFzc3dvcmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlPj59XG4gICAqL1xuICBjaGFuZ2VQYXNzd29yZChjaGFuZ2VQYXNzd29yZElkOiBzdHJpbmcsIHJlcXVlc3Q6IENoYW5nZVBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyBhIHVzZXIncyBwYXNzd29yZCB1c2luZyB0aGVpciBpZGVudGl0eSAobG9naW4gaWQgYW5kIHBhc3N3b3JkKS4gVXNpbmcgYSBsb2dpbklkIGluc3RlYWQgb2YgdGhlIGNoYW5nZVBhc3N3b3JkSWRcbiAgICogYnlwYXNzZXMgdGhlIGVtYWlsIHZlcmlmaWNhdGlvbiBhbmQgYWxsb3dzIGEgcGFzc3dvcmQgdG8gYmUgY2hhbmdlZCBkaXJlY3RseSB3aXRob3V0IGZpcnN0IGNhbGxpbmcgdGhlICNmb3Jnb3RQYXNzd29yZFxuICAgKiBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2hhbmdlUGFzc3dvcmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGFuZ2VQYXNzd29yZEJ5SWRlbnRpdHkocmVxdWVzdDogQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVlc3QgVG9rZW4gYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDEyIGluZGljYXRlcyB0aGF0IGEgVHJ1c3QgVG9rZW4gaXMgcmVxdWlyZWQgdG8gbWFrZSBhIFBPU1QgcmVxdWVzdCB0byB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5nZVBhc3N3b3JkSWQgVGhlIGNoYW5nZSBwYXNzd29yZCBJZCB1c2VkIHRvIGZpbmQgdGhlIHVzZXIuIFRoaXMgdmFsdWUgaXMgZ2VuZXJhdGVkIGJ5IEZ1c2lvbkF1dGggb25jZSB0aGUgY2hhbmdlIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nSWQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjaGFuZ2VQYXNzd29yZElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1ZXN0IFRva2VuIGJ5IGNvbXBsZXRpbmcgYSBUd28tRmFjdG9yIFN0ZXAtVXAgYXV0aGVudGljYXRpb24uXG4gICAqIFxuICAgKiBBbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQxMiBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nSldUKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1ZXN0IFJlcXVlc3QgSWQgYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDEyIGluZGljYXRlcyB0aGF0IGEgVHJ1c3QgVG9rZW4gaXMgcmVxdWlyZWQgdG8gbWFrZSBhIFBPU1QgcmVxdWVzdCB0byB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2luSWQgVGhlIGxvZ2luSWQgb2YgdGhlIFVzZXIgdGhhdCB5b3UgaW50ZW5kIHRvIGNoYW5nZSB0aGUgcGFzc3dvcmQgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdMb2dpbklkKGxvZ2luSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcm5hbWUnLCBsb2dpbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29tbWVudCB0byB0aGUgdXNlcidzIGFjY291bnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckNvbW1lbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVzZXIgY29tbWVudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY29tbWVudE9uVXNlcihyZXF1ZXN0OiBVc2VyQ29tbWVudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29tbWVudCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gQVBJIGtleS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSB1bmlxdWUgSWQgZm9yIHRoZSBrZXksIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIGFuIEFQSSBrZXkgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aXRoIGVxdWFsIG9yIGxlc3NlciBhdXRob3JpdHkuIEFuIEFQSSBrZXkgY2Fubm90IGNyZWF0ZSBhbm90aGVyIEFQSSBrZXkgdW5sZXNzIGl0IGlzIGdyYW50ZWQgXG4gICAqIHRvIHRoYXQgQVBJIGtleS5cbiAgICogXG4gICAqIElmIGFuIEFQSSBrZXkgaXMgbG9ja2VkIHRvIGEgdGVuYW50LCBpdCBjYW4gb25seSBjcmVhdGUgQVBJIEtleXMgZm9yIHRoYXQgc2FtZSB0ZW5hbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIElkIG9mIHRoZSBBUEkga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIElkIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FQSUtleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY3JlYXRlIHRoZSBBUElLZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVBUElLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEFQSUtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFQSUtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhcHBsaWNhdGlvbi4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBhcHBsaWNhdGlvbiwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIElkIHRvIHVzZSBmb3IgdGhlIGFwcGxpY2F0aW9uLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGFwcGxpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcm9sZSBmb3IgYW4gYXBwbGljYXRpb24uIFlvdSBtdXN0IHNwZWNpZnkgdGhlIGlkIG9mIHRoZSBhcHBsaWNhdGlvbiB5b3UgYXJlIGNyZWF0aW5nIHRoZSByb2xlIGZvci5cbiAgICogWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSByb2xlIGluc2lkZSB0aGUgQXBwbGljYXRpb25Sb2xlIG9iamVjdCBpdHNlbGYsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGNyZWF0ZSB0aGUgcm9sZSBvbi5cbiAgICogQHBhcmFtIHtVVUlEfSByb2xlSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHJvbGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgYXBwbGljYXRpb24gcm9sZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXVkaXQgbG9nIHdpdGggdGhlIG1lc3NhZ2UgYW5kIHVzZXIgbmFtZSAodXN1YWxseSBhbiBlbWFpbCkuIEF1ZGl0IGxvZ3Mgc2hvdWxkIGJlIHdyaXR0ZW4gYW55dGltZSB5b3VcbiAgICogbWFrZSBjaGFuZ2VzIHRvIHRoZSBGdXNpb25BdXRoIGRhdGFiYXNlLiBXaGVuIHVzaW5nIHRoZSBGdXNpb25BdXRoIEFwcCB3ZWIgaW50ZXJmYWNlLCBhbnkgY2hhbmdlcyBhcmUgYXV0b21hdGljYWxseVxuICAgKiB3cml0dGVuIHRvIHRoZSBhdWRpdCBsb2cuIEhvd2V2ZXIsIGlmIHlvdSBhcmUgYWNjZXNzaW5nIHRoZSBBUEksIHlvdSBtdXN0IHdyaXRlIHRoZSBhdWRpdCBsb2dzIHlvdXJzZWxmLlxuICAgKlxuICAgKiBAcGFyYW0ge0F1ZGl0TG9nUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBhdWRpdCBsb2cgZW50cnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUF1ZGl0TG9nKHJlcXVlc3Q6IEF1ZGl0TG9nUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBdWRpdExvZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2F1ZGl0LWxvZycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb25uZWN0b3IuICBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGNvbm5lY3RvciwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGNvbm5lY3Rvci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3RvclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgY29ubmVjdG9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQ29ubmVjdG9yKGNvbm5lY3RvcklkOiBVVUlELCByZXF1ZXN0OiBDb25uZWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25uZWN0b3JSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVzZXIgY29uc2VudCB0eXBlLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGNvbnNlbnQgdHlwZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBjb25zZW50LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7Q29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgY29uc2VudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVDb25zZW50KGNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlbWFpbCB0ZW1wbGF0ZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0ZW1wbGF0ZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB0ZW1wbGF0ZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VtYWlsVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGVtYWlsIHRlbXBsYXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBFbWFpbFRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVtYWlsVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFbnRpdHkuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgRW50aXR5LiBJZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgRW50aXR5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RW50aXR5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBFbnRpdHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVFbnRpdHkoZW50aXR5SWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgRW50aXR5IFR5cGUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgRW50aXR5IFR5cGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgRW50aXR5IFR5cGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBFbnRpdHkgVHlwZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGVybWlzc2lvbiBmb3IgYW4gZW50aXR5IHR5cGUuIFlvdSBtdXN0IHNwZWNpZnkgdGhlIGlkIG9mIHRoZSBlbnRpdHkgdHlwZSB5b3UgYXJlIGNyZWF0aW5nIHRoZSBwZXJtaXNzaW9uIGZvci5cbiAgICogWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBwZXJtaXNzaW9uIGluc2lkZSB0aGUgRW50aXR5VHlwZVBlcm1pc3Npb24gb2JqZWN0IGl0c2VsZiwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBlbnRpdHkgdHlwZSB0byBjcmVhdGUgdGhlIHBlcm1pc3Npb24gb24uXG4gICAqIEBwYXJhbSB7VVVJRH0gcGVybWlzc2lvbklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBwZXJtaXNzaW9uLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgcGVybWlzc2lvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVFbnRpdHlUeXBlUGVybWlzc2lvbihlbnRpdHlUeXBlSWQ6IFVVSUQsIHBlcm1pc3Npb25JZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInBlcm1pc3Npb25cIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHBlcm1pc3Npb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZhbWlseSB3aXRoIHRoZSB1c2VyIGlkIGluIHRoZSByZXF1ZXN0IGFzIHRoZSBvd25lciBhbmQgc29sZSBtZW1iZXIgb2YgdGhlIGZhbWlseS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gaWQgZm9yIHRoZVxuICAgKiBmYW1pbHksIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmFtaWx5SWQgKE9wdGlvbmFsKSBUaGUgaWQgZm9yIHRoZSBmYW1pbHkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtGYW1pbHlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGZhbWlseS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUZhbWlseShmYW1pbHlJZDogVVVJRCwgcmVxdWVzdDogRmFtaWx5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RmFtaWx5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmYW1pbHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZvcm0uICBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGZvcm0sIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZm9ybUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgZm9ybS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0Zvcm1SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGZvcm0uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRm9ybShmb3JtSWQ6IFVVSUQsIHJlcXVlc3Q6IEZvcm1SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmb3JtSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb3JtIGZpZWxkLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBmb3JtLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZpZWxkSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBmb3JtIGZpZWxkLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7Rm9ybUZpZWxkUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBmb3JtIGZpZWxkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRm9ybUZpZWxkKGZpZWxkSWQ6IFVVSUQsIHJlcXVlc3Q6IEZvcm1GaWVsZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1GaWVsZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybS9maWVsZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmaWVsZElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZ3JvdXAuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgZ3JvdXAsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZ3JvdXBJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGdyb3VwLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7R3JvdXBSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGdyb3VwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVHcm91cChncm91cElkOiBVVUlELCByZXF1ZXN0OiBHcm91cFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtZW1iZXIgaW4gYSBncm91cC5cbiAgICpcbiAgICogQHBhcmFtIHtNZW1iZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGdyb3VwIG1lbWJlcihzKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVtYmVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUdyb3VwTWVtYmVycyhyZXF1ZXN0OiBNZW1iZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZW1iZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZW1iZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwL21lbWJlcicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gSVAgQWNjZXNzIENvbnRyb2wgTGlzdC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgb24gdGhpcyBjcmVhdGUgcmVxdWVzdCwgaWYgb25lIGlzIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWNjZXNzQ29udHJvbExpc3RJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUlQQWNjZXNzQ29udHJvbExpc3QoYWNjZXNzQ29udHJvbExpc3RJZDogVVVJRCwgcmVxdWVzdDogSVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pcC1hY2wnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYWNjZXNzQ29udHJvbExpc3RJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpZGVudGl0eSBwcm92aWRlci4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBpZGVudGl0eSBwcm92aWRlciwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlSWRlbnRpdHlQcm92aWRlcihpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgTGFtYmRhLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGxhbWJkYSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBsYW1iZGFJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGxhbWJkYS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0xhbWJkYVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbGFtYmRhLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlTGFtYmRhKGxhbWJkYUlkOiBVVUlELCByZXF1ZXN0OiBMYW1iZGFSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBtZXNzYWdlIHRlbXBsYXRlLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHRlbXBsYXRlLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdGVtcGxhdGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lc3NhZ2UgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1lc3Nlbmdlci4gIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgbWVzc2VuZ2VyLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NlbmdlcklkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgbWVzc2VuZ2VyLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7TWVzc2VuZ2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNzZW5nZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVNZXNzZW5nZXIobWVzc2VuZ2VySWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NlbmdlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NlbmdlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NlbmdlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGVuYW50LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHRlbmFudCwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHRlbmFudC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1RlbmFudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdGVuYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVGVuYW50KHRlbmFudElkOiBVVUlELCByZXF1ZXN0OiBUZW5hbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFRoZW1lLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHRoZW1lLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB0aGVtZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1RoZW1lUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB0aGVtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVGhlbWUodGhlbWVJZDogVVVJRCwgcmVxdWVzdDogVGhlbWVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0aGVtZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdXNlci4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB1c2VyLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHVzZXIuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtVc2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXIodXNlcklkOiBVVUlELCByZXF1ZXN0OiBVc2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdXNlciBhY3Rpb24uIFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB0YWtlbiBvbiBhIHVzZXIgdW50aWwgdGhpcyBjYWxsIHN1Y2Nlc3NmdWxseSByZXR1cm5zLiBBbnl0aW1lIGFmdGVyXG4gICAqIHRoYXQgdGhlIHVzZXIgYWN0aW9uIGNhbiBiZSBhcHBsaWVkIHRvIGFueSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHVzZXIgYWN0aW9uLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlciBhY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdXNlciByZWFzb24uIFRoaXMgdXNlciBhY3Rpb24gcmVhc29uIGNhbm5vdCBiZSB1c2VkIHdoZW4gYWN0aW9uaW5nIGEgdXNlciB1bnRpbCB0aGlzIGNhbGwgY29tcGxldGVzXG4gICAqIHN1Y2Nlc3NmdWxseS4gQW55dGltZSBhZnRlciB0aGF0IHRoZSB1c2VyIGFjdGlvbiByZWFzb24gY2FuIGJlIHVzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvblJlYXNvbklkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdXNlciBhY3Rpb24gcmVhc29uLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlYXNvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlciBhY3Rpb24gcmVhc29uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzaW5nbGUgVXNlciBjb25zZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBVc2VyIGNvbnNlbnQuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtVc2VyQ29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlELCByZXF1ZXN0OiBVc2VyQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW5rIGFuIGV4dGVybmFsIHVzZXIgZnJvbSBhIDNyZCBwYXJ0eSBpZGVudGl0eSBwcm92aWRlciB0byBhIEZ1c2lvbkF1dGggdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyTGlua1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGxpbmsgdGhlIEZ1c2lvbkF1dGggdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlckxpbmsocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlckxpbmtSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHdlYmhvb2suIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgd2ViaG9vaywgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB3ZWJob29rLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7V2ViaG9va1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVXZWJob29rKHdlYmhvb2tJZDogVVVJRCwgcmVxdWVzdDogV2ViaG9va1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWFjdGl2YXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3Rvci5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVJlYWN0b3IoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXIodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHVzZXIgYWN0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgdXNlcnMgd2l0aCB0aGUgZ2l2ZW4gaWRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHVzZXJJZHMgVGhlIGlkcyBvZiB0aGUgdXNlcnMgdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVhY3RpdmF0ZVVzZXJzQnlJZHMsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXJzKHVzZXJJZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkcylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2RyeVJ1bicsIGZhbHNlKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIGZhbHNlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgdXNlcnMgd2l0aCB0aGUgZ2l2ZW4gaWRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHVzZXJJZHMgVGhlIGlkcyBvZiB0aGUgdXNlcnMgdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBkZWFjdGl2YXRlVXNlcnNCeUlkcyh1c2VySWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckRlbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9idWxrJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZHMpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdkcnlSdW4nLCBmYWxzZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgQVBJIGtleSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUgYXV0aGVudGljYXRpb24gQVBJIGtleSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUFQSUtleShrZXlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFyZCBkZWxldGVzIGFuIGFwcGxpY2F0aW9uLiBUaGlzIGlzIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG1vc3QgY2lyY3Vtc3RhbmNlcy4gVGhpcyB3aWxsXG4gICAqIGRlbGV0ZSB0aGUgYXBwbGljYXRpb24sIGFueSByZWdpc3RyYXRpb25zIGZvciB0aGF0IGFwcGxpY2F0aW9uLCBtZXRyaWNzIGFuZCByZXBvcnRzIGZvciB0aGUgYXBwbGljYXRpb24sIGFsbCB0aGVcbiAgICogcm9sZXMgZm9yIHRoZSBhcHBsaWNhdGlvbiwgYW5kIGFueSBvdGhlciBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXBwbGljYXRpb24uIFRoaXMgb3BlcmF0aW9uIGNvdWxkIHRha2UgYSB2ZXJ5XG4gICAqIGxvbmcgdGltZSwgZGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgZGF0YSBpbiB5b3VyIGRhdGFiYXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFyZCBkZWxldGVzIGFuIGFwcGxpY2F0aW9uIHJvbGUuIFRoaXMgaXMgYSBkYW5nZXJvdXMgb3BlcmF0aW9uIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbW9zdCBjaXJjdW1zdGFuY2VzLiBUaGlzXG4gICAqIHBlcm1hbmVudGx5IHJlbW92ZXMgdGhlIGdpdmVuIHJvbGUgZnJvbSBhbGwgdXNlcnMgdGhhdCBoYWQgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGRlYWN0aXZhdGUuXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIFRoZSBJZCBvZiB0aGUgcm9sZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUFwcGxpY2F0aW9uUm9sZShhcHBsaWNhdGlvbklkOiBVVUlELCByb2xlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInJvbGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHJvbGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgY29ubmVjdG9yIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgVGhlIElkIG9mIHRoZSBjb25uZWN0b3IgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgY29uc2VudCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVDb25zZW50KGNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGVtYWlsIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgZW1haWwgdGVtcGxhdGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW1haWxUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBFbnRpdHkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVudGl0eShlbnRpdHlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIEVudGl0eSBHcmFudCBmb3IgdGhlIGdpdmVuIFVzZXIgb3IgRW50aXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBiZWluZyBkZWxldGVkIGZvci5cbiAgICogQHBhcmFtIHtVVUlEfSByZWNpcGllbnRFbnRpdHlJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBmb3IuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBVc2VyIHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVudGl0eUdyYW50KGVudGl0eUlkOiBVVUlELCByZWNpcGllbnRFbnRpdHlJZDogVVVJRCwgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcImdyYW50XCIpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWNpcGllbnRFbnRpdHlJZCcsIHJlY2lwaWVudEVudGl0eUlkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBFbnRpdHkgVHlwZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSBUeXBlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW50aXR5VHlwZShlbnRpdHlUeXBlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFyZCBkZWxldGVzIGEgcGVybWlzc2lvbi4gVGhpcyBpcyBhIGRhbmdlcm91cyBvcGVyYXRpb24gYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBtb3N0IGNpcmN1bXN0YW5jZXMuIFRoaXNcbiAgICogcGVybWFuZW50bHkgcmVtb3ZlcyB0aGUgZ2l2ZW4gcGVybWlzc2lvbiBmcm9tIGFsbCBncmFudHMgdGhhdCBoYWQgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgZW50aXR5VHlwZSB0aGUgdGhlIHBlcm1pc3Npb24gYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSBwZXJtaXNzaW9uSWQgVGhlIElkIG9mIHRoZSBwZXJtaXNzaW9uIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW50aXR5VHlwZVBlcm1pc3Npb24oZW50aXR5VHlwZUlkOiBVVUlELCBwZXJtaXNzaW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicGVybWlzc2lvblwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocGVybWlzc2lvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBmb3JtIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZm9ybUlkIFRoZSBJZCBvZiB0aGUgZm9ybSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUZvcm0oZm9ybUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZvcm1JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgZm9ybSBmaWVsZCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZpZWxkSWQgVGhlIElkIG9mIHRoZSBmb3JtIGZpZWxkIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRm9ybUZpZWxkKGZpZWxkSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgZ3JvdXAgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIFRoZSBJZCBvZiB0aGUgZ3JvdXAgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVHcm91cChncm91cElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChncm91cElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHVzZXJzIGFzIG1lbWJlcnMgb2YgYSBncm91cC5cbiAgICpcbiAgICogQHBhcmFtIHtNZW1iZXJEZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSBtZW1iZXIgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byByZW1vdmUgbWVtYmVycyB0byB0aGUgZ3JvdXAuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUdyb3VwTWVtYmVycyhyZXF1ZXN0OiBNZW1iZXJEZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9tZW1iZXInKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpcEFjY2Vzc0NvbnRyb2xMaXN0SWQgVGhlIElkIG9mIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlSVBBY2Nlc3NDb250cm9sTGlzdChpcEFjY2Vzc0NvbnRyb2xMaXN0SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpcEFjY2Vzc0NvbnRyb2xMaXN0SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGlkZW50aXR5IHByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVJZGVudGl0eVByb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBrZXkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGtleSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUtleShrZXlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBsYW1iZGEgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBsYW1iZGFJZCBUaGUgSWQgb2YgdGhlIGxhbWJkYSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUxhbWJkYShsYW1iZGFJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGxhbWJkYUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBtZXNzYWdlIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2FnZVRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBtZXNzZW5nZXIgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCBUaGUgSWQgb2YgdGhlIG1lc3NlbmdlciB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZU1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NlbmdlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGdpdmVuIHVzZXIgYW5kIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgd2hvc2UgcmVnaXN0cmF0aW9uIGlzIGJlaW5nIGRlbGV0ZWQuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHJlbW92ZSB0aGUgcmVnaXN0cmF0aW9uIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlUmVnaXN0cmF0aW9uKHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciByZWdpc3RyYXRpb24gZm9yIHRoZSBnaXZlbiB1c2VyIGFuZCBhcHBsaWNhdGlvbiBhbG9uZyB3aXRoIHRoZSBnaXZlbiBKU09OIGJvZHkgdGhhdCBjb250YWlucyB0aGUgZXZlbnQgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB3aG9zZSByZWdpc3RyYXRpb24gaXMgYmVpbmcgZGVsZXRlZC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gcmVtb3ZlIHRoZSByZWdpc3RyYXRpb24gZm9yLlxuICAgKiBAcGFyYW0ge1JlZ2lzdHJhdGlvbkRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgYm9keSB0aGF0IGNvbnRhaW5zIHRoZSBldmVudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlUmVnaXN0cmF0aW9uV2l0aFJlcXVlc3QodXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlELCByZXF1ZXN0OiBSZWdpc3RyYXRpb25EZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHRlbmFudCBiYXNlZCBvbiB0aGUgZ2l2ZW4gSWQgb24gdGhlIFVSTC4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIGFsbCBpbmZvcm1hdGlvbiwgbWV0cmljcywgcmVwb3J0cyBhbmQgZGF0YSBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHRlbmFudCBhbmQgZXZlcnl0aGluZyB1bmRlciB0aGUgdGVuYW50IChhcHBsaWNhdGlvbnMsIHVzZXJzLCBldGMpLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVGVuYW50KHRlbmFudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHRlbmFudCBmb3IgdGhlIGdpdmVuIElkIGFzeW5jaHJvbm91c2x5LlxuICAgKiBUaGlzIG1ldGhvZCBpcyBoZWxwZnVsIGlmIHlvdSBkbyBub3Qgd2FudCB0byB3YWl0IGZvciB0aGUgZGVsZXRlIG9wZXJhdGlvbiB0byBjb21wbGV0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVRlbmFudEFzeW5jKHRlbmFudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhc3luYycsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHRlbmFudCBiYXNlZCBvbiB0aGUgZ2l2ZW4gcmVxdWVzdCAoc2VudCB0byB0aGUgQVBJIGFzIEpTT04pLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgYWxsIGluZm9ybWF0aW9uLCBtZXRyaWNzLCByZXBvcnRzIGFuZCBkYXRhIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgdGVuYW50IGFuZCBldmVyeXRoaW5nIHVuZGVyIHRoZSB0ZW5hbnQgKGFwcGxpY2F0aW9ucywgdXNlcnMsIGV0YykuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge1RlbmFudERlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGRlbGV0ZSB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVGVuYW50V2l0aFJlcXVlc3QodGVuYW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFRlbmFudERlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB0aGVtZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgVGhlIElkIG9mIHRoZSB0aGVtZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVRoZW1lKHRoZW1lSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiBJZC4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIGFsbCBpbmZvcm1hdGlvbiwgbWV0cmljcywgcmVwb3J0cyBhbmQgZGF0YSBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXIodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIGFjdGlvbiBmb3IgdGhlIGdpdmVuIElkLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgdGhlIHVzZXIgYWN0aW9uIGFuZCBhbHNvIGFueSBoaXN0b3J5IGFuZCBsb2dzIG9mXG4gICAqIHRoZSBhY3Rpb24gYmVpbmcgYXBwbGllZCB0byBhbnkgdXNlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbi1yZWFzb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvblJlYXNvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZXhpc3RpbmcgbGluayB0aGF0IGhhcyBiZWVuIG1hZGUgZnJvbSBhIDNyZCBwYXJ0eSBpZGVudGl0eSBwcm92aWRlciB0byBhIEZ1c2lvbkF1dGggdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGl0eVByb3ZpZGVyVXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgaW4gdGhlIDNyZCBwYXJ0eSBpZGVudGl0eSBwcm92aWRlciB0byB1bmxpbmsuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggdXNlciB0byB1bmxpbmsuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJMaW5rKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgaWRlbnRpdHlQcm92aWRlclVzZXJJZDogc3RyaW5nLCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlcklkJywgaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlclVzZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJVc2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgYmFzZWQgb24gdGhlIGdpdmVuIHJlcXVlc3QgKHNlbnQgdG8gdGhlIEFQSSBhcyBKU09OKS4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIGFsbCBpbmZvcm1hdGlvbiwgbWV0cmljcywgcmVwb3J0cyBhbmQgZGF0YSBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBkZWxldGUgKHJlcXVpcmVkKS5cbiAgICogQHBhcmFtIHtVc2VyRGVsZXRlU2luZ2xlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gZGVsZXRlIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVVc2VyV2l0aFJlcXVlc3QodXNlcklkOiBVVUlELCByZXF1ZXN0OiBVc2VyRGVsZXRlU2luZ2xlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlcnMgd2l0aCB0aGUgZ2l2ZW4gaWRzLCBvciB1c2VycyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgSlNPTiBxdWVyeSBvciBxdWVyeVN0cmluZy5cbiAgICogVGhlIG9yZGVyIG9mIHByZWZlcmVuY2UgaXMgaWRzLCBxdWVyeSBhbmQgdGhlbiBxdWVyeVN0cmluZywgaXQgaXMgcmVjb21tZW5kZWQgdG8gb25seSBwcm92aWRlIG9uZSBvZiB0aGUgdGhyZWUgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBcbiAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZGVhY3RpdmF0ZSBvciBwZXJtYW5lbnRseSBkZWxldGUgKGhhcmQtZGVsZXRlKSB1c2VycyBiYXNlZCB1cG9uIHRoZSBoYXJkRGVsZXRlIGJvb2xlYW4gaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogVXNpbmcgdGhlIGRyeVJ1biBwYXJhbWV0ZXIgeW91IG1heSBhbHNvIHJlcXVlc3QgdGhlIHJlc3VsdCBvZiB0aGUgYWN0aW9uIHdpdGhvdXQgYWN0dWFsbHkgZGVsZXRpbmcgb3IgZGVhY3RpdmF0aW5nIGFueSB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtVc2VyRGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgVXNlckRlbGV0ZVJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlbGV0ZVVzZXJzQnlRdWVyeSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBkZWxldGVVc2VycyhyZXF1ZXN0OiBVc2VyRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlcnMgd2l0aCB0aGUgZ2l2ZW4gaWRzLCBvciB1c2VycyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgSlNPTiBxdWVyeSBvciBxdWVyeVN0cmluZy5cbiAgICogVGhlIG9yZGVyIG9mIHByZWZlcmVuY2UgaXMgaWRzLCBxdWVyeSBhbmQgdGhlbiBxdWVyeVN0cmluZywgaXQgaXMgcmVjb21tZW5kZWQgdG8gb25seSBwcm92aWRlIG9uZSBvZiB0aGUgdGhyZWUgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBcbiAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZGVhY3RpdmF0ZSBvciBwZXJtYW5lbnRseSBkZWxldGUgKGhhcmQtZGVsZXRlKSB1c2VycyBiYXNlZCB1cG9uIHRoZSBoYXJkRGVsZXRlIGJvb2xlYW4gaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogVXNpbmcgdGhlIGRyeVJ1biBwYXJhbWV0ZXIgeW91IG1heSBhbHNvIHJlcXVlc3QgdGhlIHJlc3VsdCBvZiB0aGUgYWN0aW9uIHdpdGhvdXQgYWN0dWFsbHkgZGVsZXRpbmcgb3IgZGVhY3RpdmF0aW5nIGFueSB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtVc2VyRGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgVXNlckRlbGV0ZVJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+fVxuICAgKi9cbiAgZGVsZXRlVXNlcnNCeVF1ZXJ5KHJlcXVlc3Q6IFVzZXJEZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckRlbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9idWxrJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB3ZWJob29rIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIFRoZSBJZCBvZiB0aGUgd2ViaG9vayB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgVXNlciBmb3Igd2hpY2ggeW91J3JlIGRpc2FibGluZyBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kSWQgVGhlIHR3by1mYWN0b3IgbWV0aG9kIGlkZW50aWZpZXIgeW91IHdpc2ggdG8gZGlzYWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgVHdvIEZhY3RvciBjb2RlIHVzZWQgdmVyaWZ5IHRoZSB0aGUgY2FsbGVyIGtub3dzIHRoZSBUd28gRmFjdG9yIHNlY3JldC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGlzYWJsZVR3b0ZhY3Rvcih1c2VySWQ6IFVVSUQsIG1ldGhvZElkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ21ldGhvZElkJywgbWV0aG9kSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjb2RlJywgY29kZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIgdXNpbmcgYSBKU09OIGJvZHkgcmF0aGVyIHRoYW4gVVJMIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgVXNlciBmb3Igd2hpY2ggeW91J3JlIGRpc2FibGluZyBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvckRpc2FibGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGluZm9ybWF0aW9uIHRoYXQgY29udGFpbnMgdGhlIGNvZGUgYW5kIG1ldGhvZElkIGFsb25nIHdpdGggYW55IGV2ZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkaXNhYmxlVHdvRmFjdG9yV2l0aFJlcXVlc3QodXNlcklkOiBVVUlELCByZXF1ZXN0OiBUd29GYWN0b3JEaXNhYmxlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZW5hYmxlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgdHdvIGZhY3RvciBlbmFibGUgcmVxdWVzdCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIGVuYWJsZVR3b0ZhY3Rvcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFR3b0ZhY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2VzIGFuIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBNYWtlcyBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgZnJvbSB0aGUgQXV0aG9yaXplIGVuZHBvaW50IGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgb24gdGhlIC9vYXV0aDIvYXV0aG9yaXplIHJlc3BvbnNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIHdpbGwgYmUgcmVxdWlyZWQgaWYgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdF91cmkgVGhlIFVSSSB0byByZWRpcmVjdCB0byB1cG9uIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VPQXV0aENvZGVGb3JBY2Nlc3NUb2tlbihjb2RlOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHJlZGlyZWN0X3VyaTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjb2RlJywgY29kZSk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdhdXRob3JpemF0aW9uX2NvZGUnKTtcbiAgICBib2R5LmFwcGVuZCgncmVkaXJlY3RfdXJpJywgcmVkaXJlY3RfdXJpKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlcyBhbiBPQXV0aCBhdXRob3JpemF0aW9uIGNvZGUgYW5kIGNvZGVfdmVyaWZpZXIgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICogTWFrZXMgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIGZyb20gdGhlIEF1dGhvcml6ZSBlbmRwb2ludCBhbmQgYSBjb2RlX3ZlcmlmaWVyIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgb24gdGhlIC9vYXV0aDIvYXV0aG9yaXplIHJlc3BvbnNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByb3ZpZGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgaW5zdGVhZCBvZiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdF91cmkgVGhlIFVSSSB0byByZWRpcmVjdCB0byB1cG9uIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZV92ZXJpZmllciBUaGUgcmFuZG9tIHN0cmluZyBnZW5lcmF0ZWQgcHJldmlvdXNseS4gV2lsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSBjb2RlX2NoYWxsZW5nZSBzZW50IHByZXZpb3VzbHksIHdoaWNoIGFsbG93cyB0aGUgT0F1dGggcHJvdmlkZXIgdG8gYXV0aGVudGljYXRlIHlvdXIgYXBwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VPQXV0aENvZGVGb3JBY2Nlc3NUb2tlblVzaW5nUEtDRShjb2RlOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHJlZGlyZWN0X3VyaTogc3RyaW5nLCBjb2RlX3ZlcmlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NvZGUnLCBjb2RlKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ2F1dGhvcml6YXRpb25fY29kZScpO1xuICAgIGJvZHkuYXBwZW5kKCdyZWRpcmVjdF91cmknLCByZWRpcmVjdF91cmkpO1xuICAgIGJvZHkuYXBwZW5kKCdjb2RlX3ZlcmlmaWVyJywgY29kZV92ZXJpZmllcik7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBhIFJlZnJlc2ggVG9rZW4gZm9yIGFuIEFjY2VzcyBUb2tlbi5cbiAgICogSWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlIFJlZnJlc2ggVG9rZW4gR3JhbnQsIHlvdSB3aWxsIG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgdXNlcuKAmXMgcmVmcmVzaCB0b2tlbiBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaF90b2tlbiBUaGUgcmVmcmVzaCB0b2tlbiB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0byBleGNoYW5nZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByb3ZpZGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgaW5zdGVhZCBvZiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZSAoT3B0aW9uYWwpIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBpZiBvbWl0dGVkLCB0aGUgc2FtZSBzY29wZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSBhdXRob3JpemF0aW9uIHJlcXVlc3Qgd2lsbCBiZSB1c2VkLiBJZiBwcm92aWRlZCB0aGUgc2NvcGVzIG11c3QgbWF0Y2ggdGhvc2UgcmVxdWVzdGVkIGR1cmluZyB0aGUgaW5pdGlhbCBhdXRob3JpemF0aW9uIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgKE9wdGlvbmFsKSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuIFRoaXMgY29kZSBpcyByZXF1aXJlZCBpZiB1c2luZyB0aGlzIGVuZHBvaW50IHRvIGFwcHJvdmUgdGhlIERldmljZSBBdXRob3JpemF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JBY2Nlc3NUb2tlbihyZWZyZXNoX3Rva2VuOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHNjb3BlOiBzdHJpbmcsIHVzZXJfY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdyZWZyZXNoX3Rva2VuJywgcmVmcmVzaF90b2tlbik7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdyZWZyZXNoX3Rva2VuJyk7XG4gICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgYSByZWZyZXNoIHRva2VuIGZvciBhIG5ldyBKV1QuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVmcmVzaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlZnJlc2ggcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SldUUmVmcmVzaFJlc3BvbnNlPj59XG4gICAqL1xuICBleGNoYW5nZVJlZnJlc2hUb2tlbkZvckpXVChyZXF1ZXN0OiBSZWZyZXNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SldUUmVmcmVzaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEpXVFJlZnJlc2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgVXNlciBDcmVkZW50aWFscyBmb3IgYSBUb2tlbi5cbiAgICogSWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlIFJlc291cmNlIE93bmVyIFBhc3N3b3JkIENyZWRlbnRpYWwgR3JhbnQsIHlvdSB3aWxsIG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgdXNlcuKAmXMgZW1haWwgYW5kIHBhc3N3b3JkIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VybmFtZSBUaGUgbG9naW4gaWRlbnRpZmllciBvZiB0aGUgdXNlci4gVGhlIGxvZ2luIGlkZW50aWZpZXIgY2FuIGJlIGVpdGhlciB0aGUgZW1haWwgb3IgdGhlIHVzZXJuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHVzZXLigJlzIHBhc3N3b3JkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByb3ZpZGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgaW5zdGVhZCBvZiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZSAoT3B0aW9uYWwpIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBpZiBvbWl0dGVkLCB0aGUgc2FtZSBzY29wZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSBhdXRob3JpemF0aW9uIHJlcXVlc3Qgd2lsbCBiZSB1c2VkLiBJZiBwcm92aWRlZCB0aGUgc2NvcGVzIG11c3QgbWF0Y2ggdGhvc2UgcmVxdWVzdGVkIGR1cmluZyB0aGUgaW5pdGlhbCBhdXRob3JpemF0aW9uIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgKE9wdGlvbmFsKSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuIFRoaXMgY29kZSBpcyByZXF1aXJlZCBpZiB1c2luZyB0aGlzIGVuZHBvaW50IHRvIGFwcHJvdmUgdGhlIERldmljZSBBdXRob3JpemF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VVc2VyQ3JlZGVudGlhbHNGb3JBY2Nlc3NUb2tlbih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCBzY29wZTogc3RyaW5nLCB1c2VyX2NvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgndXNlcm5hbWUnLCB1c2VybmFtZSk7XG4gICAgYm9keS5hcHBlbmQoJ3Bhc3N3b3JkJywgcGFzc3dvcmQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAncGFzc3dvcmQnKTtcbiAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCBzY29wZSk7XG4gICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHVzZXJfY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWdpbnMgdGhlIGZvcmdvdCBwYXNzd29yZCBzZXF1ZW5jZSwgd2hpY2gga2lja3Mgb2ZmIGFuIGVtYWlsIHRvIHRoZSB1c2VyIHNvIHRoYXQgdGhleSBjYW4gcmVzZXQgdGhlaXIgcGFzc3dvcmQuXG4gICAqXG4gICAqIEBwYXJhbSB7Rm9yZ290UGFzc3dvcmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VyIHNvIHRoYXQgdGhleSBjYW4gYmUgZW1haWxlZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4+fVxuICAgKi9cbiAgZm9yZ290UGFzc3dvcmQocmVxdWVzdDogRm9yZ290UGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcmdvdFBhc3N3b3JkUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZvcmdvdC1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IEVtYWlsIFZlcmlmaWNhdGlvbiBJZCB0byBiZSB1c2VkIHdpdGggdGhlIFZlcmlmeSBFbWFpbCBBUEkuIFRoaXMgQVBJIHdpbGwgbm90IGF0dGVtcHQgdG8gc2VuZCBhblxuICAgKiBlbWFpbCB0byB0aGUgVXNlci4gVGhpcyBBUEkgbWF5IGJlIHVzZWQgdG8gY29sbGVjdCB0aGUgdmVyaWZpY2F0aW9uSWQgZm9yIHVzZSB3aXRoIGEgdGhpcmQgcGFydHkgc3lzdGVtLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgdGhhdCBuZWVkcyBhIG5ldyB2ZXJpZmljYXRpb24gZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlRW1haWxWZXJpZmljYXRpb25JZChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeUVtYWlsUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3NlbmRWZXJpZnlFbWFpbCcsIGZhbHNlKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG5ldyBSU0Egb3IgRUMga2V5IHBhaXIgb3IgYW4gSE1BQyBzZWNyZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBrZXkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlS2V5KGtleUlkOiBVVUlELCByZXF1ZXN0OiBLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleS9nZW5lcmF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcgQXBwbGljYXRpb24gUmVnaXN0cmF0aW9uIFZlcmlmaWNhdGlvbiBJZCB0byBiZSB1c2VkIHdpdGggdGhlIFZlcmlmeSBSZWdpc3RyYXRpb24gQVBJLiBUaGlzIEFQSSB3aWxsIG5vdCBhdHRlbXB0IHRvIHNlbmQgYW5cbiAgICogZW1haWwgdG8gdGhlIFVzZXIuIFRoaXMgQVBJIG1heSBiZSB1c2VkIHRvIGNvbGxlY3QgdGhlIHZlcmlmaWNhdGlvbklkIGZvciB1c2Ugd2l0aCBhIHRoaXJkIHBhcnR5IHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB2ZXJpZmllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWQoZW1haWw6IHN0cmluZywgYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzZW5kVmVyaWZ5UGFzc3dvcmRFbWFpbCcsIGZhbHNlKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHR3by1mYWN0b3IgcmVjb3ZlcnkgY29kZXMgZm9yIGEgdXNlci4gR2VuZXJhdGluZyB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIHdpbGwgaW52YWxpZGF0ZSBhbnkgZXhpc3RpbmcgcmVjb3ZlcnkgY29kZXMuIFxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZ2VuZXJhdGUgbmV3IFR3byBGYWN0b3IgcmVjb3ZlcnkgY29kZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZVR3b0ZhY3RvclJlY292ZXJ5Q29kZXModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdHdvLWZhY3Rvci9yZWNvdmVyeS1jb2RlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgVHdvIEZhY3RvciBzZWNyZXQgdGhhdCBjYW4gYmUgdXNlZCB0byBlbmFibGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSBVc2VyLiBUaGUgcmVzcG9uc2Ugd2lsbCBjb250YWluXG4gICAqIGJvdGggdGhlIHNlY3JldCBhbmQgYSBCYXNlMzIgZW5jb2RlZCBmb3JtIG9mIHRoZSBzZWNyZXQgd2hpY2ggY2FuIGJlIHNob3duIHRvIGEgVXNlciB3aGVuIHVzaW5nIGEgMiBTdGVwIEF1dGhlbnRpY2F0aW9uXG4gICAqIGFwcGxpY2F0aW9uIHN1Y2ggYXMgR29vZ2xlIEF1dGhlbnRpY2F0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlY3JldFJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZVR3b0ZhY3RvclNlY3JldCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlY3JldFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlY3JldFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VjcmV0JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBUd28gRmFjdG9yIHNlY3JldCB0aGF0IGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIFVzZXIuIFRoZSByZXNwb25zZSB3aWxsIGNvbnRhaW5cbiAgICogYm90aCB0aGUgc2VjcmV0IGFuZCBhIEJhc2UzMiBlbmNvZGVkIGZvcm0gb2YgdGhlIHNlY3JldCB3aGljaCBjYW4gYmUgc2hvd24gdG8gYSBVc2VyIHdoZW4gdXNpbmcgYSAyIFN0ZXAgQXV0aGVudGljYXRpb25cbiAgICogYXBwbGljYXRpb24gc3VjaCBhcyBHb29nbGUgQXV0aGVudGljYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JTZWNyZXRVc2luZ0pXVChlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlY3JldFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFNlY3JldFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VjcmV0JylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbG9naW4gdmlhIHRoaXJkLXBhcnRpZXMgaW5jbHVkaW5nIFNvY2lhbCBsb2dpbiwgZXh0ZXJuYWwgT0F1dGggYW5kIE9wZW5JRCBDb25uZWN0LCBhbmQgb3RoZXJcbiAgICogbG9naW4gc3lzdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyTG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSB0aGlyZC1wYXJ0eSBsb2dpbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gZnJvbSB0aGUgdGhpcmQtcGFydHkgbG9naW5cbiAgICogICAgcHJvdmlkZXJzIHRoYXQgRnVzaW9uQXV0aCB1c2VzIHRvIHJlY29uY2lsZSB0aGUgdXNlcidzIGFjY291bnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGlkZW50aXR5UHJvdmlkZXJMb2dpbihyZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBSU0Egb3IgRUMga2V5IHBhaXIgb3IgYW4gSE1BQyBzZWNyZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBrZXkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGltcG9ydEtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXkvaW1wb3J0JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWxrIGltcG9ydHMgcmVmcmVzaCB0b2tlbnMuIFRoaXMgcmVxdWVzdCBwZXJmb3JtcyBtaW5pbWFsIHZhbGlkYXRpb24gYW5kIHJ1bnMgYmF0Y2ggaW5zZXJ0cyBvZiByZWZyZXNoIHRva2VucyB3aXRoIHRoZVxuICAgKiBleHBlY3RhdGlvbiB0aGF0IGVhY2ggdG9rZW4gcmVwcmVzZW50cyBhIHVzZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgRnVzaW9uQXV0aFxuICAgKiBBcHBsaWNhdGlvbi4gVGhpcyBpcyBkb25lIHRvIGluY3JlYXNlcyB0aGUgaW5zZXJ0IHBlcmZvcm1hbmNlLlxuICAgKiBcbiAgICogVGhlcmVmb3JlLCBpZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yIGR1ZSB0byBhIGRhdGFiYXNlIGtleSB2aW9sYXRpb24sIHRoZSByZXNwb25zZSB3aWxsIGxpa2VseSBvZmZlciBhIGdlbmVyaWNcbiAgICogZXhwbGFuYXRpb24uIElmIHlvdSBlbmNvdW50ZXIgYW4gZXJyb3IsIHlvdSBtYXkgb3B0aW9uYWxseSBlbmFibGUgYWRkaXRpb25hbCB2YWxpZGF0aW9uIHRvIHJlY2VpdmUgYSBKU09OIHJlc3BvbnNlXG4gICAqIGJvZHkgd2l0aCBzcGVjaWZpYyB2YWxpZGF0aW9uIGVycm9ycy4gVGhpcyB3aWxsIHNsb3cgdGhlIHJlcXVlc3QgZG93biBidXQgd2lsbCBhbGxvdyB5b3UgdG8gaWRlbnRpZnkgdGhlIGNhdXNlIG9mXG4gICAqIHRoZSBmYWlsdXJlLiBTZWUgdGhlIHZhbGlkYXRlRGJDb25zdHJhaW50cyByZXF1ZXN0IHBhcmFtZXRlci5cbiAgICpcbiAgICogQHBhcmFtIHtSZWZyZXNoVG9rZW5JbXBvcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIHJlZnJlc2ggdG9rZW5zIHRvIGltcG9ydC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgaW1wb3J0UmVmcmVzaFRva2VucyhyZXF1ZXN0OiBSZWZyZXNoVG9rZW5JbXBvcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZnJlc2gtdG9rZW4vaW1wb3J0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVsayBpbXBvcnRzIHVzZXJzLiBUaGlzIHJlcXVlc3QgcGVyZm9ybXMgbWluaW1hbCB2YWxpZGF0aW9uIGFuZCBydW5zIGJhdGNoIGluc2VydHMgb2YgdXNlcnMgd2l0aCB0aGUgZXhwZWN0YXRpb25cbiAgICogdGhhdCBlYWNoIHVzZXIgZG9lcyBub3QgeWV0IGV4aXN0IGFuZCBlYWNoIHJlZ2lzdHJhdGlvbiBjb3JyZXNwb25kcyB0byBhbiBleGlzdGluZyBGdXNpb25BdXRoIEFwcGxpY2F0aW9uLiBUaGlzIGlzIGRvbmUgdG9cbiAgICogaW5jcmVhc2VzIHRoZSBpbnNlcnQgcGVyZm9ybWFuY2UuXG4gICAqIFxuICAgKiBUaGVyZWZvcmUsIGlmIHlvdSBlbmNvdW50ZXIgYW4gZXJyb3IgZHVlIHRvIGEgZGF0YWJhc2Uga2V5IHZpb2xhdGlvbiwgdGhlIHJlc3BvbnNlIHdpbGwgbGlrZWx5IG9mZmVyXG4gICAqIGEgZ2VuZXJpYyBleHBsYW5hdGlvbi4gSWYgeW91IGVuY291bnRlciBhbiBlcnJvciwgeW91IG1heSBvcHRpb25hbGx5IGVuYWJsZSBhZGRpdGlvbmFsIHZhbGlkYXRpb24gdG8gcmVjZWl2ZSBhIEpTT04gcmVzcG9uc2VcbiAgICogYm9keSB3aXRoIHNwZWNpZmljIHZhbGlkYXRpb24gZXJyb3JzLiBUaGlzIHdpbGwgc2xvdyB0aGUgcmVxdWVzdCBkb3duIGJ1dCB3aWxsIGFsbG93IHlvdSB0byBpZGVudGlmeSB0aGUgY2F1c2Ugb2YgdGhlIGZhaWx1cmUuIFNlZVxuICAgKiB0aGUgdmFsaWRhdGVEYkNvbnN0cmFpbnRzIHJlcXVlc3QgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0ltcG9ydFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvZiB0aGUgdXNlcnMgdG8gaW1wb3J0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBpbXBvcnRVc2VycyhyZXF1ZXN0OiBJbXBvcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ltcG9ydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3BlY3QgYW4gYWNjZXNzIHRva2VuIGlzc3VlZCBieSBGdXNpb25BdXRoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGZvciB3aGljaCB0aGlzIHRva2VuIHdhcyBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBUaGUgYWNjZXNzIHRva2VuIHJldHVybmVkIGJ5IHRoaXMgT0F1dGggcHJvdmlkZXIgYXMgdGhlIHJlc3VsdCBvZiBhIHN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+fVxuICAgKi9cbiAgaW50cm9zcGVjdEFjY2Vzc1Rva2VuKGNsaWVudF9pZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRyb3NwZWN0UmVzcG9uc2U+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgndG9rZW4nLCB0b2tlbik7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SW50cm9zcGVjdFJlc3BvbnNlLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2ludHJvc3BlY3QnKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJc3N1ZSBhIG5ldyBhY2Nlc3MgdG9rZW4gKEpXVCkgZm9yIHRoZSByZXF1ZXN0ZWQgQXBwbGljYXRpb24gYWZ0ZXIgZW5zdXJpbmcgdGhlIHByb3ZpZGVkIEpXVCBpcyB2YWxpZC4gQSB2YWxpZFxuICAgKiBhY2Nlc3MgdG9rZW4gaXMgcHJvcGVybHkgc2lnbmVkIGFuZCBub3QgZXhwaXJlZC5cbiAgICogPHA+XG4gICAqIFRoaXMgQVBJIG1heSBiZSB1c2VkIGluIGFuIFNTTyBjb25maWd1cmF0aW9uIHRvIGlzc3VlIG5ldyB0b2tlbnMgZm9yIGFub3RoZXIgYXBwbGljYXRpb24gYWZ0ZXIgdGhlIHVzZXIgaGFzXG4gICAqIG9idGFpbmVkIGEgdmFsaWQgdG9rZW4gZnJvbSBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBBcHBsaWNhdGlvbiBJZCBmb3Igd2hpY2ggeW91IGFyZSByZXF1ZXN0aW5nIGEgbmV3IGFjY2VzcyB0b2tlbiBiZSBpc3N1ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZnJlc2hUb2tlbiAoT3B0aW9uYWwpIEFuIGV4aXN0aW5nIHJlZnJlc2ggdG9rZW4gdXNlZCB0byByZXF1ZXN0IGEgcmVmcmVzaCB0b2tlbiBpbiBhZGRpdGlvbiB0byBhIEpXVCBpbiB0aGUgcmVzcG9uc2UuXG4gICAqICAgIDxwPlRoZSB0YXJnZXQgYXBwbGljYXRpb24gcmVwcmVzZW50ZWQgYnkgdGhlIGFwcGxpY2F0aW9uSWQgcmVxdWVzdCBwYXJhbWV0ZXIgbXVzdCBoYXZlIHJlZnJlc2hcbiAgICogICAgdG9rZW5zIGVuYWJsZWQgaW4gb3JkZXIgdG8gcmVjZWl2ZSBhIHJlZnJlc2ggdG9rZW4gaW4gdGhlIHJlc3BvbnNlLjwvcD5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SXNzdWVSZXNwb25zZT4+fVxuICAgKi9cbiAgaXNzdWVKV1QoYXBwbGljYXRpb25JZDogVVVJRCwgZW5jb2RlZEpXVDogc3RyaW5nLCByZWZyZXNoVG9rZW46IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SXNzdWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxJc3N1ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L2lzc3VlJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlZnJlc2hUb2tlbicsIHJlZnJlc2hUb2tlbilcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQXV0aGVudGljYXRlcyBhIHVzZXIgdG8gRnVzaW9uQXV0aC4gXG4gICAqIFxuICAgKiBUaGlzIEFQSSBvcHRpb25hbGx5IHJlcXVpcmVzIGFuIEFQSSBrZXkuIFNlZSA8Y29kZT5BcHBsaWNhdGlvbi5sb2dpbkNvbmZpZ3VyYXRpb24ucmVxdWlyZUF1dGhlbnRpY2F0aW9uPC9jb2RlPi5cbiAgICpcbiAgICogQHBhcmFtIHtMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjcmVkZW50aWFscyB1c2VkIHRvIGxvZyB0aGVtIGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBsb2dpbihyZXF1ZXN0OiBMb2dpblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBwaW5nIHRvIEZ1c2lvbkF1dGggaW5kaWNhdGluZyB0aGF0IHRoZSB1c2VyIHdhcyBhdXRvbWF0aWNhbGx5IGxvZ2dlZCBpbnRvIGFuIGFwcGxpY2F0aW9uLiBXaGVuIHVzaW5nXG4gICAqIEZ1c2lvbkF1dGgncyBTU08gb3IgeW91ciBvd24sIHlvdSBzaG91bGQgY2FsbCB0aGlzIGlmIHRoZSB1c2VyIGlzIGFscmVhZHkgbG9nZ2VkIGluIGNlbnRyYWxseSwgYnV0IGFjY2Vzc2VzIGFuXG4gICAqIGFwcGxpY2F0aW9uIHdoZXJlIHRoZXkgbm8gbG9uZ2VyIGhhdmUgYSBzZXNzaW9uLiBUaGlzIGhlbHBzIGNvcnJlY3RseSB0cmFjayBsb2dpbiBjb3VudHMsIHRpbWVzIGFuZCBoZWxwcyB3aXRoXG4gICAqIHJlcG9ydGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRoYXQgd2FzIGxvZ2dlZCBpbi5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB0aGV5IGxvZ2dlZCBpbnRvLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FsbGVySVBBZGRyZXNzIChPcHRpb25hbCkgVGhlIElQIGFkZHJlc3Mgb2YgdGhlIGVuZC11c2VyIHRoYXQgaXMgbG9nZ2luZyBpbi4gSWYgYSBudWxsIHZhbHVlIGlzIHByb3ZpZGVkXG4gICAqICAgIHRoZSBJUCBhZGRyZXNzIHdpbGwgYmUgdGhhdCBvZiB0aGUgY2xpZW50IG9yIGxhc3QgcHJveHkgdGhhdCBzZW50IHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBsb2dpblBpbmcodXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlELCBjYWxsZXJJUEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9naW4nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lwQWRkcmVzcycsIGNhbGxlcklQQWRkcmVzcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExvZ291dCBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gYW5kIGFjY2VzcyB0b2tlbiBjb29raWVzIGlmIHRoZXkgZXhpc3Qgb24gdGhlXG4gICAqIGNsaWVudCBhbmQgcmV2b2tlIHRoZSByZWZyZXNoIHRva2VuIHN0b3JlZC4gVGhpcyBBUEkgZG9lcyBub3RoaW5nIGlmIHRoZSByZXF1ZXN0IGRvZXMgbm90IGNvbnRhaW4gYW4gYWNjZXNzXG4gICAqIHRva2VuIG9yIHJlZnJlc2ggdG9rZW4gY29va2llcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBnbG9iYWwgV2hlbiB0aGlzIHZhbHVlIGlzIHNldCB0byB0cnVlIGFsbCBvZiB0aGUgcmVmcmVzaCB0b2tlbnMgaXNzdWVkIHRvIHRoZSBvd25lciBvZiB0aGVcbiAgICogICAgcHJvdmlkZWQgdG9rZW4gd2lsbCBiZSByZXZva2VkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuIChPcHRpb25hbCkgVGhlIHJlZnJlc2hfdG9rZW4gYXMgYSByZXF1ZXN0IHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNvbWluZyBpbiB2aWEgYSBjb29raWUuXG4gICAqICAgIElmIHByb3ZpZGVkIHRoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBjb29raWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGxvZ291dChnbG9iYWw6IGJvb2xlYW4sIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9nb3V0JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2dsb2JhbCcsIGdsb2JhbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlZnJlc2hUb2tlbicsIHJlZnJlc2hUb2tlbilcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMb2dvdXQgQVBJIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVtb3ZlIHRoZSByZWZyZXNoIHRva2VuIGFuZCBhY2Nlc3MgdG9rZW4gY29va2llcyBpZiB0aGV5IGV4aXN0IG9uIHRoZVxuICAgKiBjbGllbnQgYW5kIHJldm9rZSB0aGUgcmVmcmVzaCB0b2tlbiBzdG9yZWQuIFRoaXMgQVBJIHRha2VzIHRoZSByZWZyZXNoIHRva2VuIGluIHRoZSBKU09OIGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7TG9nb3V0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gbG9nb3V0IHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBsb2dvdXRXaXRoUmVxdWVzdChyZXF1ZXN0OiBMb2dvdXRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9nb3V0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIGRvbWFpbi4gQSAyMDAgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIGRvbWFpbiBpcyBtYW5hZ2VkXG4gICAqIGJ5IGEgcmVnaXN0ZXJlZCBpZGVudGl0eSBwcm92aWRlci4gQSA0MDQgaW5kaWNhdGVzIHRoZSBkb21haW4gaXMgbm90IG1hbmFnZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBvciBlbWFpbCBhZGRyZXNzIHRvIGxvb2t1cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9va3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvb2t1cElkZW50aXR5UHJvdmlkZXIoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvb2t1cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvb2t1cFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xvb2t1cCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdkb21haW4nLCBkb21haW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIGEgdGVtcG9yYWwgdXNlciBhY3Rpb24gYnkgY2hhbmdpbmcgdGhlIGV4cGlyYXRpb24gb2YgdGhlIGFjdGlvbiBhbmQgb3B0aW9uYWxseSBhZGRpbmcgYSBjb21tZW50IHRvIHRoZVxuICAgKiBhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWN0aW9uSWQgVGhlIElkIG9mIHRoZSBhY3Rpb24gdG8gbW9kaWZ5LiBUaGlzIGlzIHRlY2huaWNhbGx5IHRoZSB1c2VyIGFjdGlvbiBsb2cgaWQuXG4gICAqIEBwYXJhbSB7QWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZGlmaWNhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIG1vZGlmeUFjdGlvbihhY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIGxvZ2luIHJlcXVlc3QgdXNpbmcgYSBwYXNzd29yZGxlc3MgY29kZVxuICAgKlxuICAgKiBAcGFyYW0ge1Bhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY29tcGxldGUgbG9naW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhc3N3b3JkbGVzc0xvZ2luKHJlcXVlc3Q6IFBhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcGFzc3dvcmRsZXNzL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBhdXRoZW50aWNhdGlvbiBBUEkga2V5IGJ5IGdpdmVuIGlkXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBrZXkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gYXBpIGtleSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBUElLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSB0aGUgQVBJS2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hBUElLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEFQSUtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFQSUtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgYXBwbGljYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgYXBwbGljYXRpb24gcm9sZSB3aXRoIHRoZSBnaXZlbiBpZCBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSByb2xlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIFRoZSBJZCBvZiB0aGUgcm9sZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHJvbGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBjb25uZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgVGhlIElkIG9mIHRoZSBjb25uZWN0b3IgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3RvclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgY29ubmVjdG9yIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQsIHJlcXVlc3Q6IENvbm5lY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgY29uc2VudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQ29uc2VudChjb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IENvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBlbWFpbCB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW1haWxUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgZW1haWwgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogRW1haWxUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBFbnRpdHkgVHlwZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgRW50aXR5IFR5cGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBncm91cCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIFRoZSBJZCBvZiB0aGUgZ3JvdXAgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0dyb3VwUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBncm91cCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hHcm91cChncm91cElkOiBVVUlELCByZXF1ZXN0OiBHcm91cFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBpZGVudGl0eSBwcm92aWRlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgdXBkYXRlZCBpZGVudGl0eSBwcm92aWRlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaElkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCByZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGF2YWlsYWJsZSBpbnRlZ3JhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SW50ZWdyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGludGVncmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEludGVncmF0aW9ucyhyZXF1ZXN0OiBJbnRlZ3JhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SW50ZWdyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2ludGVncmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGxhbWJkYSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBsYW1iZGFJZCBUaGUgSWQgb2YgdGhlIGxhbWJkYSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TGFtYmRhUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBsYW1iZGEgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaExhbWJkYShsYW1iZGFJZDogVVVJRCwgcmVxdWVzdDogTGFtYmRhUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBtZXNzYWdlIHRlbXBsYXRlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIG1lc3NlbmdlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCBUaGUgSWQgb2YgdGhlIG1lc3NlbmdlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TWVzc2VuZ2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBtZXNzZW5nZXIgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaE1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCwgcmVxdWVzdDogTWVzc2VuZ2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2VuZ2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSByZWdpc3RyYXRpb24gZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIGlkIGFuZCB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBpbiB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHdob3NlIHJlZ2lzdHJhdGlvbiBpcyBnb2luZyB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge1JlZ2lzdHJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCByZXF1ZXN0OiBSZWdpc3RyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1N5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHN5c3RlbSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoU3lzdGVtQ29uZmlndXJhdGlvbihyZXF1ZXN0OiBTeXN0ZW1Db25maWd1cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS1jb25maWd1cmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHRlbmFudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VGVuYW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB0ZW5hbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFRlbmFudCh0ZW5hbnRJZDogVVVJRCwgcmVxdWVzdDogVGVuYW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSB0aGVtZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIFRoZSBJZCBvZiB0aGUgdGhlbWUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1RoZW1lUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB0aGVtZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hUaGVtZSh0aGVtZUlkOiBVVUlELCByZXF1ZXN0OiBUaGVtZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHVzZXIgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hVc2VyKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVXNlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHVzZXIgYWN0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB1c2VyIGFjdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZWFzb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHVzZXIgYWN0aW9uIHJlYXNvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIENvbnNlbnQgSWRcbiAgICogQHBhcmFtIHtVc2VyQ29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdXNlciBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXJDb25zZW50KHVzZXJDb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFjdGl2YXRlcyB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHJlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlYWN0aXZhdGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVhY3RpdmF0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZhdGVzIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gcmVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZWFjdGl2YXRlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlYWN0aXZhdGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFjdGl2YXRlcyB0aGUgdXNlciBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gcmVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZWFjdGl2YXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWFjdGl2YXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25jaWxlIGEgVXNlciB0byBGdXNpb25BdXRoIHVzaW5nIEpXVCBpc3N1ZWQgZnJvbSBhbm90aGVyIElkZW50aXR5IFByb3ZpZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlY29uY2lsZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgdG8gcmVjb25jaWxlIHRoZSBVc2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICByZWNvbmNpbGVKV1QocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlY29uY2lsZScpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgYSByZWZyZXNoIG9mIHRoZSBFbnRpdHkgc2VhcmNoIGluZGV4LiBUaGlzIEFQSSBpcyBub3QgZ2VuZXJhbGx5IG5lY2Vzc2FyeSBhbmQgdGhlIHNlYXJjaCBpbmRleCB3aWxsIGJlY29tZSBjb25zaXN0ZW50IGluIGFcbiAgICogcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZS4gVGhlcmUgbWF5IGJlIHNjZW5hcmlvcyB3aGVyZSB5b3UgbWF5IHdpc2ggdG8gbWFudWFsbHkgcmVxdWVzdCBhbiBpbmRleCByZWZyZXNoLiBPbmUgZXhhbXBsZSBtYXkgYmUgXG4gICAqIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNlYXJjaCBBUEkgb3IgRGVsZXRlIFRlbmFudCBBUEkgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgRW50aXR5IENyZWF0ZSBldGMsIHlvdSBtYXkgd2lzaCB0byByZXF1ZXN0IGEgcmVmcmVzaCB0b1xuICAgKiAgZW5zdXJlIHRoZSBpbmRleCBpbW1lZGlhdGVseSBjdXJyZW50IGJlZm9yZSBtYWtpbmcgYSBxdWVyeSByZXF1ZXN0IHRvIHRoZSBzZWFyY2ggaW5kZXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlZnJlc2hFbnRpdHlTZWFyY2hJbmRleCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvc2VhcmNoJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBhIHJlZnJlc2ggb2YgdGhlIFVzZXIgc2VhcmNoIGluZGV4LiBUaGlzIEFQSSBpcyBub3QgZ2VuZXJhbGx5IG5lY2Vzc2FyeSBhbmQgdGhlIHNlYXJjaCBpbmRleCB3aWxsIGJlY29tZSBjb25zaXN0ZW50IGluIGFcbiAgICogcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZS4gVGhlcmUgbWF5IGJlIHNjZW5hcmlvcyB3aGVyZSB5b3UgbWF5IHdpc2ggdG8gbWFudWFsbHkgcmVxdWVzdCBhbiBpbmRleCByZWZyZXNoLiBPbmUgZXhhbXBsZSBtYXkgYmUgXG4gICAqIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNlYXJjaCBBUEkgb3IgRGVsZXRlIFRlbmFudCBBUEkgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgVXNlciBDcmVhdGUgZXRjLCB5b3UgbWF5IHdpc2ggdG8gcmVxdWVzdCBhIHJlZnJlc2ggdG9cbiAgICogIGVuc3VyZSB0aGUgaW5kZXggaW1tZWRpYXRlbHkgY3VycmVudCBiZWZvcmUgbWFraW5nIGEgcXVlcnkgcmVxdWVzdCB0byB0aGUgc2VhcmNoIGluZGV4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZWZyZXNoVXNlclNlYXJjaEluZGV4KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnZW5lcmF0ZXMgYW55IGtleXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZWdlbmVyYXRlUmVhY3RvcktleXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHVzZXIgZm9yIGFuIGFwcGxpY2F0aW9uLiBJZiB5b3UgcHJvdmlkZSB0aGUgVXNlciBhbmQgdGhlIFVzZXJSZWdpc3RyYXRpb24gb2JqZWN0IG9uIHRoaXMgcmVxdWVzdCwgaXRcbiAgICogd2lsbCBjcmVhdGUgdGhlIHVzZXIgYXMgd2VsbCBhcyByZWdpc3RlciB0aGVtIGZvciB0aGUgYXBwbGljYXRpb24uIFRoaXMgaXMgY2FsbGVkIGEgRnVsbCBSZWdpc3RyYXRpb24uIEhvd2V2ZXIsIGlmXG4gICAqIHlvdSBvbmx5IHByb3ZpZGUgdGhlIFVzZXJSZWdpc3RyYXRpb24gb2JqZWN0LCB0aGVuIHRoZSB1c2VyIG11c3QgYWxyZWFkeSBleGlzdCBhbmQgdGhleSB3aWxsIGJlIHJlZ2lzdGVyZWQgZm9yIHRoZVxuICAgKiBhcHBsaWNhdGlvbi4gVGhlIHVzZXIgaWQgY2FuIGFsc28gYmUgcHJvdmlkZWQgYW5kIGl0IHdpbGwgZWl0aGVyIGJlIHVzZWQgdG8gbG9vayB1cCBhbiBleGlzdGluZyB1c2VyIG9yIGl0IHdpbGwgYmVcbiAgICogdXNlZCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgVXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHVzZXIgYmVpbmcgcmVnaXN0ZXJlZCBmb3IgdGhlIGFwcGxpY2F0aW9uIGFuZCBvcHRpb25hbGx5IGNyZWF0ZWQuXG4gICAqIEBwYXJhbSB7UmVnaXN0cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IG9wdGlvbmFsbHkgY29udGFpbnMgdGhlIFVzZXIgYW5kIG11c3QgY29udGFpbiB0aGUgVXNlclJlZ2lzdHJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlZ2lzdGVyKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogUmVnaXN0cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVnaXN0cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIEVsYXN0aWNzZWFyY2ggdG8gZGVsZXRlIGFuZCByZWJ1aWxkIHRoZSBpbmRleCBmb3IgRnVzaW9uQXV0aCB1c2VycyBvciBlbnRpdGllcy4gQmUgdmVyeSBjYXJlZnVsIHdoZW4gcnVubmluZyB0aGlzIHJlcXVlc3QgYXMgaXQgd2lsbCBcbiAgICogaW5jcmVhc2UgdGhlIENQVSBhbmQgSS9PIGxvYWQgb24geW91ciBkYXRhYmFzZSB1bnRpbCB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy4gR2VuZXJhbGx5IHNwZWFraW5nIHlvdSBkbyBub3QgZXZlciBuZWVkIHRvIHJ1biB0aGlzIG9wZXJhdGlvbiB1bmxlc3MgXG4gICAqIGluc3RydWN0ZWQgYnkgRnVzaW9uQXV0aCBzdXBwb3J0LCBvciBpZiB5b3UgYXJlIG1pZ3JhdGluZyBhIGRhdGFiYXNlIGFub3RoZXIgc3lzdGVtIGFuZCB5b3UgYXJlIG5vdCBicmluaW5nIGFsb25nIHRoZSBFbGFzdGljc2VhcmNoIGluZGV4LiBcbiAgICogXG4gICAqIFlvdSBoYXZlIGJlZW4gd2FybmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlaW5kZXhSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGluZGV4IG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlaW5kZXgocmVxdWVzdDogUmVpbmRleFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9yZWluZGV4JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHVzZXIgZnJvbSB0aGUgZmFtaWx5IHdpdGggdGhlIGdpdmVuIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIFRoZSBpZCBvZiB0aGUgZmFtaWx5IHRvIHJlbW92ZSB0aGUgdXNlciBmcm9tLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgaWQgb2YgdGhlIHVzZXIgdG8gcmVtb3ZlIGZyb20gdGhlIGZhbWlseS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVtb3ZlVXNlckZyb21GYW1pbHkoZmFtaWx5SWQ6IFVVSUQsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLXNlbmRzIHRoZSB2ZXJpZmljYXRpb24gZW1haWwgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+fVxuICAgKi9cbiAgcmVzZW5kRW1haWxWZXJpZmljYXRpb24oZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlFbWFpbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtc2VuZHMgdGhlIHZlcmlmaWNhdGlvbiBlbWFpbCB0byB0aGUgdXNlci4gSWYgdGhlIEFwcGxpY2F0aW9uIGhhcyBjb25maWd1cmVkIGEgc3BlY2lmaWMgZW1haWwgdGVtcGxhdGUgdGhpcyB3aWxsIGJlIHVzZWRcbiAgICogaW5zdGVhZCBvZiB0aGUgdGVuYW50IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgdW5pcXVlIEFwcGxpY2F0aW9uIElkIHRvIHVzZWQgdG8gcmVzb2x2ZSBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBlbWFpbCB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj59XG4gICAqL1xuICByZXNlbmRFbWFpbFZlcmlmaWNhdGlvbldpdGhBcHBsaWNhdGlvblRlbXBsYXRlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5RW1haWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtc2VuZHMgdGhlIGFwcGxpY2F0aW9uIHJlZ2lzdHJhdGlvbiB2ZXJpZmljYXRpb24gZW1haWwgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gYmUgdmVyaWZpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXNlbmRSZWdpc3RyYXRpb25WZXJpZmljYXRpb24oZW1haWw6IHN0cmluZywgYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYW4gYXV0aGVudGljYXRpb24gQVBJIGtleSBmb3IgdGhlIGdpdmVuIGlkXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBBUEkga2V5IHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBUElLZXkoa2V5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFQSUtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIGFjdGlvbiBsb2cgKHRoZSBsb2cgb2YgYSB1c2VyIGFjdGlvbiB0aGF0IHdhcyB0YWtlbiBvbiBhIHVzZXIgcHJldmlvdXNseSkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY3Rpb25JZCBUaGUgSWQgb2YgdGhlIGFjdGlvbiB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQWN0aW9uKGFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC4gVGhpcyB3aWxsIHJldHVybiBhbGwgdGltZSBiYXNlZCBhY3Rpb25zIHRoYXQgYXJlIGFjdGl2ZSxcbiAgICogYW5kIGluYWN0aXZlIGFzIHdlbGwgYXMgbm9uLXRpbWUgYmFzZWQgYWN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGZldGNoIHRoZSBhY3Rpb25zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQWN0aW9ucyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZCB0aGF0IGFyZSBjdXJyZW50bHkgcHJldmVudGluZyB0aGUgVXNlciBmcm9tIGxvZ2dpbmcgaW4uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBmZXRjaCB0aGUgYWN0aW9ucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFjdGlvbnNQcmV2ZW50aW5nTG9naW4odXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3ByZXZlbnRpbmdMb2dpbicsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUuXG4gICAqIEFuIGFjdGl2ZSBhY3Rpb24gbWVhbnMgb25lIHRoYXQgaXMgdGltZSBiYXNlZCBhbmQgaGFzIG5vdCBiZWVuIGNhbmNlbGVkLCBhbmQgaGFzIG5vdCBlbmRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGZldGNoIHRoZSBhY3Rpb25zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQWN0aXZlQWN0aW9ucyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYWN0aXZlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBhcHBsaWNhdGlvbiBmb3IgdGhlIGdpdmVuIGlkIG9yIGFsbCBvZiB0aGUgYXBwbGljYXRpb25zIGlmIHRoZSBpZCBpcyBudWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFwcGxpY2F0aW9ucy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBcHBsaWNhdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgYXVkaXQgbG9nIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhdWRpdExvZ0lkIFRoZSBJZCBvZiB0aGUgYXVkaXQgbG9nIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUF1ZGl0TG9nKGF1ZGl0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBdWRpdExvZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2F1ZGl0LWxvZycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhdWRpdExvZ0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGNvbm5lY3RvciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCBUaGUgSWQgb2YgdGhlIGNvbm5lY3Rvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQ29ubmVjdG9yKGNvbm5lY3RvcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25uZWN0b3JSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbm5lY3RvcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUNvbm5lY3RvcnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25uZWN0b3JSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIENvbnNlbnQgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQ29uc2VudChjb25zZW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbnNlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25zZW50cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZGFpbHkgYWN0aXZlIHVzZXIgcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cy4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gaWQsIGl0IHdpbGwgb25seVxuICAgKiByZXR1cm4gdGhlIGRhaWx5IGFjdGl2ZSBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZURhaWx5QWN0aXZlUmVwb3J0KGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxEYWlseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxEYWlseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9kYWlseS1hY3RpdmUtdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZW1haWwgdGVtcGxhdGUgZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIGlkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCBvZiB0aGUgZW1haWwgdGVtcGxhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgZW1haWwgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVtYWlsVGVtcGxhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwcmV2aWV3IG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdC4gVGhpcyBhbGxvd3MgeW91IHRvIHByZXZpZXcgYW4gZW1haWwgdGVtcGxhdGUgdGhhdFxuICAgKiBoYXNuJ3QgYmVlbiBzYXZlZCB0byB0aGUgZGF0YWJhc2UgeWV0LiBUaGUgZW50aXJlIGVtYWlsIHRlbXBsYXRlIGRvZXMgbm90IG5lZWQgdG8gYmUgcHJvdmlkZWQgb24gdGhlIHJlcXVlc3QuIFRoaXNcbiAgICogd2lsbCBjcmVhdGUgdGhlIHByZXZpZXcgYmFzZWQgb24gd2hhdGV2ZXIgaXMgZ2l2ZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7UHJldmlld1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgZW1haWwgdGVtcGxhdGUgYW5kIG9wdGlvbmFsbHkgYSBsb2NhbGUgdG8gcmVuZGVyIGl0IGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQcmV2aWV3UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW1haWxUZW1wbGF0ZVByZXZpZXcocmVxdWVzdDogUHJldmlld1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFByZXZpZXdSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxQcmV2aWV3UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZS9wcmV2aWV3JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZW1haWwgdGVtcGxhdGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW1haWxUZW1wbGF0ZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBFbnRpdHkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW50aXR5KGVudGl0eUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFuIEVudGl0eSBHcmFudCBmb3IgdGhlIGdpdmVuIEVudGl0eSBhbmQgVXNlci9FbnRpdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkuXG4gICAqIEBwYXJhbSB7VVVJRH0gcmVjaXBpZW50RW50aXR5SWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIEVudGl0eSB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgZm9yLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgVXNlciB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVudGl0eUdyYW50KGVudGl0eUlkOiBVVUlELCByZWNpcGllbnRFbnRpdHlJZDogVVVJRCwgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eUdyYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcImdyYW50XCIpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWNpcGllbnRFbnRpdHlJZCcsIHJlY2lwaWVudEVudGl0eUlkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEVudGl0eSBUeXBlIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IFR5cGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgRW50aXR5IFR5cGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW50aXR5VHlwZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgZXZlbnQgbG9nIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudExvZ0lkIFRoZSBJZCBvZiB0aGUgZXZlbnQgbG9nIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFdmVudExvZ1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUV2ZW50TG9nKGV2ZW50TG9nSWQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RXZlbnRMb2dSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFdmVudExvZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2V2ZW50LWxvZycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChldmVudExvZ0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBmYW1pbGllcyB0aGF0IGEgdXNlciBiZWxvbmdzIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgVXNlcidzIGlkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUZhbWlsaWVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RmFtaWx5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBtZW1iZXJzIG9mIGEgZmFtaWx5IGJ5IHRoZSB1bmlxdWUgRmFtaWx5IElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIEZhbWlseS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRmFtaWx5TWVtYmVyc0J5RmFtaWx5SWQoZmFtaWx5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZhbWlseVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZhbWlseUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGZvcm0gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZm9ybUlkIFRoZSBJZCBvZiB0aGUgZm9ybS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUZvcm0oZm9ybUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGZvcm0gZmllbGQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmllbGRJZCBUaGUgSWQgb2YgdGhlIGZvcm0gZmllbGQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtL2ZpZWxkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZpZWxkSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGZvcm1zIGZpZWxkc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVGb3JtRmllbGRzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybUZpZWxkUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybS9maWVsZCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGZvcm1zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRm9ybXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGdyb3VwIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZ3JvdXBJZCBUaGUgSWQgb2YgdGhlIGdyb3VwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUdyb3VwKGdyb3VwSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGdyb3Vwcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVHcm91cHMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3Qgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaXBBY2Nlc3NDb250cm9sTGlzdElkIFRoZSBJZCBvZiB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUlQQWNjZXNzQ29udHJvbExpc3QoaXBBY2Nlc3NDb250cm9sTGlzdElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpcEFjY2Vzc0NvbnRyb2xMaXN0SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgZm9yIHRoZSBnaXZlbiBpZCBvciBhbGwgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVycyBpZiB0aGUgaWQgaXMgbnVsbC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIGlkZW50aXR5IHByb3ZpZGVyIElkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSWRlbnRpdHlQcm92aWRlcihpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBvbmUgb3IgbW9yZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIHR5cGUuIEZvciB0eXBlcyBzdWNoIGFzIEdvb2dsZSwgRmFjZWJvb2ssIFR3aXR0ZXIgYW5kIExpbmtlZEluLCBvbmx5IGEgc2luZ2xlIFxuICAgKiBpZGVudGl0eSBwcm92aWRlciBjYW4gZXhpc3QuIEZvciB0eXBlcyBzdWNoIGFzIE9wZW5JRCBDb25uZWN0IGFuZCBTQU1MdjIgbW9yZSB0aGFuIG9uZSBpZGVudGl0eSBwcm92aWRlciBjYW4gYmUgY29uZmlndXJlZCBzbyB0aGlzIHJlcXVlc3QgXG4gICAqIG1heSByZXR1cm4gbXVsdGlwbGUgaWRlbnRpdHkgcHJvdmlkZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJUeXBlfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUlkZW50aXR5UHJvdmlkZXJCeVR5cGUodHlwZTogSWRlbnRpdHlQcm92aWRlclR5cGUpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd0eXBlJywgdHlwZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgaWRlbnRpdHkgcHJvdmlkZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSWRlbnRpdHlQcm92aWRlcnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQgdGhhdCBhcmUgY3VycmVudGx5IGluYWN0aXZlLlxuICAgKiBBbiBpbmFjdGl2ZSBhY3Rpb24gbWVhbnMgb25lIHRoYXQgaXMgdGltZSBiYXNlZCBhbmQgaGFzIGJlZW4gY2FuY2VsZWQgb3IgaGFzIGV4cGlyZWQsIG9yIGlzIG5vdCB0aW1lIGJhc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJbmFjdGl2ZUFjdGlvbnModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FjdGl2ZScsIGZhbHNlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGluYWN0aXZlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUluYWN0aXZlQXBwbGljYXRpb25zKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2luYWN0aXZlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdXNlciBhY3Rpb25zIHRoYXQgYXJlIGN1cnJlbnRseSBpbmFjdGl2ZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUluYWN0aXZlVXNlckFjdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2luYWN0aXZlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBhdmFpbGFibGUgaW50ZWdyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUludGVncmF0aW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJbnRlZ3JhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2ludGVncmF0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBQdWJsaWMgS2V5IGNvbmZpZ3VyZWQgZm9yIHZlcmlmeWluZyBKU09OIFdlYiBUb2tlbnMgKEpXVCkgYnkgdGhlIGtleSBJZCAoa2lkKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleUlkIFRoZSBJZCBvZiB0aGUgcHVibGljIGtleSAoa2lkKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UHVibGljS2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSldUUHVibGljS2V5KGtleUlkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFB1YmxpY0tleVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9wdWJsaWMta2V5JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2tpZCcsIGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIFB1YmxpYyBLZXkgY29uZmlndXJlZCBmb3IgdmVyaWZ5aW5nIHRoZSBKU09OIFdlYiBUb2tlbnMgKEpXVCkgaXNzdWVkIGJ5IHRoZSBMb2dpbiBBUEkgYnkgdGhlIEFwcGxpY2F0aW9uIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIEFwcGxpY2F0aW9uIGZvciB3aGljaCB0aGlzIGtleSBpcyB1c2VkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVKV1RQdWJsaWNLZXlCeUFwcGxpY2F0aW9uSWQoYXBwbGljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxQdWJsaWNLZXlSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcHVibGljLWtleScpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBQdWJsaWMgS2V5cyBjb25maWd1cmVkIGZvciB2ZXJpZnlpbmcgSlNPTiBXZWIgVG9rZW5zIChKV1QpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVKV1RQdWJsaWNLZXlzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UHVibGljS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UHVibGljS2V5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3B1YmxpYy1rZXknKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHB1YmxpYyBrZXlzIHVzZWQgYnkgRnVzaW9uQXV0aCB0byBjcnlwdG9ncmFwaGljYWxseSB2ZXJpZnkgSldUcyB1c2luZyB0aGUgSlNPTiBXZWIgS2V5IGZvcm1hdC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SldLU1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUpzb25XZWJLZXlTZXQoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV0tTUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SldLU1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvLndlbGwta25vd24vandrcy5qc29uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBrZXkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlS2V5KGtleUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUga2V5cy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlS2V5cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGFtYmRhIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgVGhlIElkIG9mIHRoZSBsYW1iZGEuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUxhbWJkYShsYW1iZGFJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGxhbWJkYXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUxhbWJkYXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBsYW1iZGFzIGZvciB0aGUgcHJvdmlkZWQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtMYW1iZGFUeXBlfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBsYW1iZGEgdG8gcmV0dXJuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVMYW1iZGFzQnlUeXBlKHR5cGU6IExhbWJkYVR5cGUpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd0eXBlJywgdHlwZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsb2dpbiByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5IHJldHVybiB0aGVcbiAgICogbG9naW4gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUxvZ2luUmVwb3J0KGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIGlkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2FnZVRlbXBsYXRlSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIG1lc3NhZ2UgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHByZXZpZXcgb2YgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QsIG5vcm1hbGl6ZWQgdG8gYSBnaXZlbiBsb2NhbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgZW1haWwgdGVtcGxhdGUgYW5kIG9wdGlvbmFsbHkgYSBsb2NhbGUgdG8gcmVuZGVyIGl0IGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2FnZVRlbXBsYXRlUHJldmlldyhyZXF1ZXN0OiBQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUvcHJldmlldycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIG1lc3NhZ2UgdGVtcGxhdGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzYWdlVGVtcGxhdGVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbWVzc2VuZ2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NlbmdlcklkIFRoZSBJZCBvZiB0aGUgbWVzc2VuZ2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzZW5nZXIobWVzc2VuZ2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NlbmdlclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgbWVzc2VuZ2Vycy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2VuZ2VycygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NlbmdlclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbW9udGhseSBhY3RpdmUgdXNlciByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5XG4gICAqIHJldHVybiB0aGUgbW9udGhseSBhY3RpdmUgY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNb250aGx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1vbnRobHlBY3RpdmVSZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1vbnRobHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TW9udGhseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9tb250aGx5LWFjdGl2ZS11c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBPYXV0aDIgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uIGZvciB0aGUgZ2l2ZW4gQXBwbGljYXRpb24gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIEFwcGxpY2F0aW9uIHRvIHJldHJpZXZlIE9BdXRoIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE9BdXRoQ29uZmlndXJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU9hdXRoQ29uZmlndXJhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcIm9hdXRoLWNvbmZpZ3VyYXRpb25cIilcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2VsbCBrbm93biBPcGVuSUQgQ29uZmlndXJhdGlvbiBKU09OIGRvY3VtZW50XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE9wZW5JZENvbmZpZ3VyYXRpb24+Pn1cbiAgICovXG4gIHJldHJpZXZlT3BlbklkQ29uZmlndXJhdGlvbigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE9wZW5JZENvbmZpZ3VyYXRpb24+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8T3BlbklkQ29uZmlndXJhdGlvbiwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCB2YWxpZGF0aW9uIHJ1bGVzIGZvciBhIHNwZWNpZmljIHRlbmFudC4gVGhpcyBtZXRob2QgcmVxdWlyZXMgYSB0ZW5hbnRJZCB0byBiZSBwcm92aWRlZCBcbiAgICogdGhyb3VnaCB0aGUgdXNlIG9mIGEgVGVuYW50IHNjb3BlZCBBUEkga2V5IG9yIGFuIEhUVFAgaGVhZGVyIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCB0byBzcGVjaWZ5IHRoZSBUZW5hbnQgSWQuXG4gICAqIFxuICAgKiBUaGlzIEFQSSBkb2VzIG5vdCByZXF1aXJlIGFuIEFQSSBrZXkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50L3Bhc3N3b3JkLXZhbGlkYXRpb24tcnVsZXMnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIHZhbGlkYXRpb24gcnVsZXMgZm9yIGEgc3BlY2lmaWMgdGVuYW50LlxuICAgKiBcbiAgICogVGhpcyBBUEkgZG9lcyBub3QgcmVxdWlyZSBhbiBBUEkga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzV2l0aFRlbmFudElkKHRlbmFudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50L3Bhc3N3b3JkLXZhbGlkYXRpb24tcnVsZXMnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNoaWxkcmVuIGZvciB0aGUgZ2l2ZW4gcGFyZW50IGVtYWlsIGFkZHJlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRFbWFpbCBUaGUgZW1haWwgb2YgdGhlIHBhcmVudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UGVuZGluZ1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBlbmRpbmdDaGlsZHJlbihwYXJlbnRFbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQZW5kaW5nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UGVuZGluZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHkvcGVuZGluZycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdwYXJlbnRFbWFpbCcsIHBhcmVudEVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3RvciBtZXRyaWNzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlYWN0b3JNZXRyaWNzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVhY3Rvck1ldHJpY3NSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3IvbWV0cmljcycpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yIHN0YXR1cy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVhY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlYWN0b3JTdGF0dXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVhY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3InKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxhc3QgbnVtYmVyIG9mIGxvZ2luIHJlY29yZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIGluaXRpYWwgcmVjb3JkLiBlLmcuIDAgaXMgdGhlIGxhc3QgbG9naW4sIDEwMCB3aWxsIGJlIHRoZSAxMDB0aCBtb3N0IHJlY2VudCBsb2dpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IChPcHRpb25hbCwgZGVmYXVsdHMgdG8gMTApIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWNlbnRMb2dpbnMob2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlY2VudExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVjZW50TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVjZW50LWxvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ29mZnNldCcsIG9mZnNldClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xpbWl0JywgbGltaXQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHVuaXF1ZSBJZC4gVGhpcyBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgcmVmcmVzaCB0b2tlbiwgaWYgeW91IGhhdmUgdGhhdCwgeW91IGFscmVhZHkgaGF2ZSB3aGF0IHlvdSBuZWVkLi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWZyZXNoVG9rZW5CeUlkKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVmcmVzaFRva2VuUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVmcmVzaFRva2Vucyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZnJlc2hUb2tlblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZnJlc2hUb2tlblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgcmVnaXN0cmF0aW9uIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBpZCBhbmQgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVnaXN0cmF0aW9uIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHkgcmV0dXJuXG4gICAqIHRoZSByZWdpc3RyYXRpb24gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWdpc3RyYXRpb25SZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBzdGF0dXMgb2YgYSByZS1pbmRleCBwcm9jZXNzLiBBIHN0YXR1cyBjb2RlIG9mIDIwMCBpbmRpY2F0ZXMgdGhlIHJlLWluZGV4IGlzIGluIHByb2dyZXNzLCBhIHN0YXR1cyBjb2RlIG9mICBcbiAgICogNDA0IGluZGljYXRlcyBubyByZS1pbmRleCBpcyBpbiBwcm9ncmVzcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWluZGV4U3RhdHVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL3JlaW5kZXgnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlU3lzdGVtQ29uZmlndXJhdGlvbigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtLWNvbmZpZ3VyYXRpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRlbmFudCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUZW5hbnQodGVuYW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRlbmFudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB0ZW5hbnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUZW5hbnRzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB0aGVtZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgVGhlIElkIG9mIHRoZSB0aGVtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUaGVtZSh0aGVtZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0aGVtZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB0aGVtZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVGhlbWVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB0b3RhbHMgcmVwb3J0LiBUaGlzIGNvbnRhaW5zIGFsbCBvZiB0aGUgdG90YWwgY291bnRzIGZvciBlYWNoIGFwcGxpY2F0aW9uIGFuZCB0aGUgZ2xvYmFsIHJlZ2lzdHJhdGlvblxuICAgKiBjb3VudC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VG90YWxzUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVG90YWxSZXBvcnQoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUb3RhbHNSZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUb3RhbHNSZXBvcnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvdG90YWxzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdHdvLWZhY3RvciByZWNvdmVyeSBjb2RlcyBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gcmV0cmlldmUgVHdvIEZhY3RvciByZWNvdmVyeSBjb2Rlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVHdvRmFjdG9yUmVjb3ZlcnlDb2Rlcyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yL3JlY292ZXJ5LWNvZGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgcGFzcyBpbiBudWxsIGZvciB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIG9mIHRoZSB1c2VyXG4gICAqIGFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IHBhc3MgaW4gbnVsbCBmb3IgdGhlIGlkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCBvZiB0aGUgdXNlclxuICAgKiBhY3Rpb24gcmVhc29ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQWN0aW9uUmVhc29ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdXNlciBhY3Rpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckFjdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGJ5IGEgY2hhbmdlIHBhc3N3b3JkIElkLiBUaGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgQVBJIGlzIHRvIHJldHJpZXZlIGEgdXNlciBhZnRlciB0aGUgZm9yZ290XG4gICAqIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZCBhbmQgeW91IG1heSBub3Qga25vdyB0aGUgdXNlcidzIGVtYWlsIG9yIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgdW5pcXVlIGNoYW5nZSBwYXNzd29yZCBJZCB0aGF0IHdhcyBzZW50IHZpYSBlbWFpbCBvciByZXR1cm5lZCBieSB0aGUgRm9yZ290IFBhc3N3b3JkIEFQSS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUNoYW5nZVBhc3N3b3JkSWQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjaGFuZ2VQYXNzd29yZElkJywgY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlFbWFpbChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBsb2dpbklkLiBUaGUgbG9naW5JZCBjYW4gYmUgZWl0aGVyIHRoZSB1c2VybmFtZSBvciB0aGUgZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBlbWFpbCBvciB1c2VybmFtZSBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUxvZ2luSWQobG9naW5JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gdXNlcm5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VybmFtZSBUaGUgdXNlcm5hbWUgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlVc2VybmFtZSh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VybmFtZScsIHVzZXJuYW1lKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgYnkgYSB2ZXJpZmljYXRpb25JZC4gVGhlIGludGVuZGVkIHVzZSBvZiB0aGlzIEFQSSBpcyB0byByZXRyaWV2ZSBhIHVzZXIgYWZ0ZXIgdGhlIGZvcmdvdFxuICAgKiBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQgYW5kIHlvdSBtYXkgbm90IGtub3cgdGhlIHVzZXIncyBlbWFpbCBvciB1c2VybmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcmlmaWNhdGlvbklkIFRoZSB1bmlxdWUgdmVyaWZpY2F0aW9uIElkIHRoYXQgaGFzIGJlZW4gc2V0IG9uIHRoZSB1c2VyIG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeVZlcmlmaWNhdGlvbklkKHZlcmlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3ZlcmlmaWNhdGlvbklkJywgdmVyaWZpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbW1lbnRzIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb21tZW50cyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbW1lbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29tbWVudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIGNvbnNlbnQgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbnNlbnRzIGZvciBhIFVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBVc2VyJ3MgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29uc2VudHModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGUgVXNlckluZm8gZW5kcG9pbnQgdG8gcmV0cmlldmUgVXNlciBDbGFpbXMgZnJvbSB0aGUgYWNjZXNzIHRva2VuIGlzc3VlZCBieSBGdXNpb25BdXRoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VySW5mb0Zyb21BY2Nlc3NUb2tlbihlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxVc2VyUmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdXNlcmluZm8nKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBzaW5nbGUgSWRlbnRpdHkgUHJvdmlkZXIgdXNlciAobGluaykuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpdHlQcm92aWRlclVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB1c2VyIGluIHRoZSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyTGluayhpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ6IHN0cmluZywgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJVc2VySWQnLCBpZGVudGl0eVByb3ZpZGVyVXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhbGwgSWRlbnRpdHkgUHJvdmlkZXIgdXNlcnMgKGxpbmtzKSBmb3IgdGhlIHVzZXIuIFNwZWNpZnkgdGhlIG9wdGlvbmFsIGlkZW50aXR5UHJvdmlkZXJJZCB0byByZXRyaWV2ZSBsaW5rcyBmb3IgYSBwYXJ0aWN1bGFyIElkUC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci4gU3BlY2lmeSB0aGlzIHZhbHVlIHRvIHJlZHVjZSB0aGUgbGlua3MgcmV0dXJuZWQgdG8gdGhvc2UgZm9yIGEgcGFydGljdWxhciBJZFAuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckxpbmtzQnlVc2VySWQoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlcklkJywgaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMgZm9yIGEgcGFydGljdWxhciB1c2VyIGJ5IElkLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5IHJldHVybiB0aGVcbiAgICogbG9naW4gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1c2VySWQgaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMb2dpblJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCB1c2VySWQ6IFVVSUQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMgZm9yIGEgcGFydGljdWxhciB1c2VyIGJ5IGxvZ2luIElkLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5IHJldHVybiB0aGVcbiAgICogbG9naW4gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSB1c2VySWQgaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMb2dpblJlcG9ydEJ5TG9naW5JZChhcHBsaWNhdGlvbklkOiBVVUlELCBsb2dpbklkOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGFzdCBudW1iZXIgb2YgbG9naW4gcmVjb3JkcyBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIGluaXRpYWwgcmVjb3JkLiBlLmcuIDAgaXMgdGhlIGxhc3QgbG9naW4sIDEwMCB3aWxsIGJlIHRoZSAxMDB0aCBtb3N0IHJlY2VudCBsb2dpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IChPcHRpb25hbCwgZGVmYXVsdHMgdG8gMTApIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyUmVjZW50TG9naW5zKHVzZXJJZDogVVVJRCwgb2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlY2VudExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVjZW50TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVjZW50LWxvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ29mZnNldCcsIG9mZnNldClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xpbWl0JywgbGltaXQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIElkLiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB1c2UgYW4gQVBJIGtleSwgaW5zdGVhZCBpdCB1c2VzIGEgSlNPTiBXZWIgVG9rZW4gKEpXVCkgZm9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyVXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggdmVyc2lvbiBzdHJpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcnNpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVWZXJzaW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyc2lvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcnNpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS92ZXJzaW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB3ZWJob29rIGZvciB0aGUgZ2l2ZW4gSWQuIElmIHlvdSBwYXNzIGluIG51bGwgZm9yIHRoZSBpZCwgdGhpcyB3aWxsIHJldHVybiBhbGwgdGhlIHdlYmhvb2tzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB3ZWJob29rcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYmhvb2tzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyByZWZyZXNoIHRva2Vucy5cbiAgICogXG4gICAqIFVzYWdlIGV4YW1wbGVzOlxuICAgKiAgIC0gRGVsZXRlIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4sIHBhc3MgaW4gb25seSB0aGUgdG9rZW4uXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbih0b2tlbilcbiAgICogXG4gICAqICAgLSBEZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvciBhIHVzZXIsIHBhc3MgaW4gb25seSB0aGUgdXNlcklkLlxuICAgKiAgICAgICByZXZva2VSZWZyZXNoVG9rZW4obnVsbCwgdXNlcklkKVxuICAgKiBcbiAgICogICAtIERlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGEgdXNlciBmb3IgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbiwgcGFzcyBpbiBib3RoIHRoZSB1c2VySWQgYW5kIHRoZSBhcHBsaWNhdGlvbklkLlxuICAgKiAgICAgICByZXZva2VSZWZyZXNoVG9rZW4obnVsbCwgdXNlcklkLCBhcHBsaWNhdGlvbklkKVxuICAgKiBcbiAgICogICAtIERlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGFuIGFwcGxpY2F0aW9uXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbihudWxsLCBudWxsLCBhcHBsaWNhdGlvbklkKVxuICAgKiBcbiAgICogTm90ZTogPGNvZGU+bnVsbDwvY29kZT4gbWF5IGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIHVwb24gdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlLlxuICAgKiBcbiAgICogU2VlIGFsc286IChtZXRob2QgbmFtZXMgbWF5IHZhcnkgYnkgbGFuZ3VhZ2UuLi4gYnV0IHlvdSdsbCBmaWd1cmUgaXQgb3V0KVxuICAgKiBcbiAgICogIC0gcmV2b2tlUmVmcmVzaFRva2VuQnlJZFxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5CeVRva2VuXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbnNCeVVzZXJJZFxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5zQnlBcHBsaWNhdGlvbklkXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbnNCeVVzZXJJZEZvckFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiAoT3B0aW9uYWwpIFRoZSByZWZyZXNoIHRva2VuIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgdXNlciBpZCB3aG9zZSB0b2tlbnMgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQgb2YgdGhlIHRva2VucyB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbih0b2tlbjogc3RyaW5nLCB1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3Rva2VuJywgdG9rZW4pXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHRoZSB1bmlxdWUgSWQuIFRoZSB1bmlxdWUgSWQgaXMgbm90IHNlbnNpdGl2ZSBhcyBpdCBjYW5ub3QgYmUgdXNlZCB0byBvYnRhaW4gYW5vdGhlciBKV1QuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdG9rZW5JZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB0b2tlbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbkJ5SWQodG9rZW5JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodG9rZW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHVzaW5nIHRoZSBhY3R1YWwgcmVmcmVzaCB0b2tlbiB2YWx1ZS4gVGhpcyByZWZyZXNoIHRva2VuIHZhbHVlIGlzIHNlbnNpdGl2ZSwgc28gIGJlIGNhcmVmdWwgd2l0aCB0aGlzIEFQSSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVGhlIHJlZnJlc2ggdG9rZW4gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5CeVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3Rva2VuJywgdG9rZW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gYW4gYXBwbGljYXRpb24gYnkgYXBwbGljYXRpb25JZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIGFsbCByZWZyZXNoIHRva2VucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbnNCeUFwcGxpY2F0aW9uSWQoYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gYSB1c2VyIGJ5IHVzZXIgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgYWxsIHJlZnJlc2ggdG9rZW5zIHRoYXQgYmVsb25nIHRvIGEgdXNlciBieSB1c2VyIElkIGZvciBhIHNwZWNpZmljIGFwcGxpY2F0aW9uIGJ5IGFwcGxpY2F0aW9uSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkRm9yQXBwbGljYXRpb24odXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyByZWZyZXNoIHRva2VucyB1c2luZyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEpTT04gYm9keS4gVGhlIGhhbmRsaW5nIGZvciB0aGlzIG1ldGhvZCBpcyB0aGUgc2FtZSBhcyB0aGUgcmV2b2tlUmVmcmVzaFRva2VuIG1ldGhvZFxuICAgKiBhbmQgaXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHlvdSBwcm92aWRlIGluIHRoZSBSZWZyZXNoRGVsZXRlUmVxdWVzdCBvYmplY3QuIFNlZSB0aGF0IG1ldGhvZCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtSZWZyZXNoVG9rZW5SZXZva2VSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGluZm9ybWF0aW9uIHVzZWQgdG8gcmV2b2tlIHRoZSByZWZyZXNoIHRva2Vucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc1dpdGhSZXF1ZXN0KHJlcXVlc3Q6IFJlZnJlc2hUb2tlblJldm9rZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIENvbnNlbnQgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgYXVkaXQgbG9ncyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXVkaXRMb2dTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEF1ZGl0TG9ncyhyZXF1ZXN0OiBBdWRpdExvZ1NlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXVkaXRMb2dTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9hdWRpdC1sb2cvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZW50aXRpZXMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0VudGl0eVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVudGl0aWVzKHJlcXVlc3Q6IEVudGl0eVNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZW50aXRpZXMgZm9yIHRoZSBnaXZlbiBpZHMuIElmIGFueSBpZCBpcyBpbnZhbGlkLCBpdCBpcyBpZ25vcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGlkcyBUaGUgZW50aXR5IGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRW50aXRpZXNCeUlkcyhpZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3NlYXJjaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZHMnLCBpZHMpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIEVudGl0eSBHcmFudHMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0VudGl0eUdyYW50U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdHlHcmFudHMocmVxdWVzdDogRW50aXR5R3JhbnRTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvZ3JhbnQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIGVudGl0eSB0eXBlcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdHlUeXBlcyhyZXF1ZXN0OiBFbnRpdHlUeXBlU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBldmVudCBsb2dzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudExvZ1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RXZlbnRMb2dTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRXZlbnRMb2dzKHJlcXVlc3Q6IEV2ZW50TG9nU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RXZlbnRMb2dTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFdmVudExvZ1NlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2V2ZW50LWxvZy9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBncm91cCBtZW1iZXJzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtHcm91cE1lbWJlclNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBNZW1iZXJTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IEdyb3VwTWVtYmVyU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBNZW1iZXJTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hJUEFjY2Vzc0NvbnRyb2xMaXN0cyhyZXF1ZXN0OiBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgbG9naW4gcmVjb3JkcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5SZWNvcmRTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaExvZ2luUmVjb3JkcyhyZXF1ZXN0OiBMb2dpblJlY29yZFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9sb2dpbi1yZWNvcmQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIGlkcy4gSWYgYW55IGlkIGlzIGludmFsaWQsIGl0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaWRzIFRoZSB1c2VyIGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHNlYXJjaFVzZXJzQnlJZHMsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VhcmNoVXNlcnMoaWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkcycsIGlkcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIGlkcy4gSWYgYW55IGlkIGlzIGludmFsaWQsIGl0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaWRzIFRoZSB1c2VyIGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoVXNlcnNCeUlkcyhpZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRzJywgaWRzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXJzIGZvciB0aGUgZ2l2ZW4gc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBjb25zdHJhaW50cy4gRmllbGRzIHVzZWQ6IGlkcywgcXVlcnksIHF1ZXJ5U3RyaW5nLCBudW1iZXJPZlJlc3VsdHMsIG9yZGVyQnksIHN0YXJ0Um93LFxuICAgKiAgICBhbmQgc29ydEZpZWxkcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFVzZXJzQnlRdWVyeShyZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gY29uc3RyYWludHMuIEZpZWxkcyB1c2VkOiBpZHMsIHF1ZXJ5LCBxdWVyeVN0cmluZywgbnVtYmVyT2ZSZXN1bHRzLCBvcmRlckJ5LCBzdGFydFJvdyxcbiAgICogICAgYW5kIHNvcnRGaWVsZHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gc2VhcmNoVXNlcnNCeVF1ZXJ5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHNlYXJjaFVzZXJzQnlRdWVyeVN0cmluZyhyZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhbiBlbWFpbCB1c2luZyBhbiBlbWFpbCB0ZW1wbGF0ZSBpZC4gWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgPGNvZGU+cmVxdWVzdERhdGE8L2NvZGU+IHRvIGFjY2VzcyBrZXkgdmFsdWVcbiAgICogcGFpcnMgaW4gdGhlIGVtYWlsIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgaWQgZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIHtTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VuZCBlbWFpbCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZW5kUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlbmRFbWFpbChlbWFpbFRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IFNlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZW5kUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VuZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvc2VuZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIG91dCBhbiBlbWFpbCB0byBhIHBhcmVudCB0aGF0IHRoZXkgbmVlZCB0byByZWdpc3RlciBhbmQgY3JlYXRlIGEgZmFtaWx5IG9yIG5lZWQgdG8gbG9nIGluIGFuZCBhZGQgYSBjaGlsZCB0byB0aGVpciBleGlzdGluZyBmYW1pbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7RmFtaWx5RW1haWxSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwYXJlbnQgZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRGYW1pbHlSZXF1ZXN0RW1haWwocmVxdWVzdDogRmFtaWx5RW1haWxSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseS9yZXF1ZXN0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIHBhc3N3b3JkbGVzcyBhdXRoZW50aWNhdGlvbiBjb2RlIGluIGFuIGVtYWlsIHRvIGNvbXBsZXRlIGxvZ2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1Bhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3Mgc2VuZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgYW4gZW1haWwgY29udGFpbmluZyBhIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRQYXNzd29yZGxlc3NDb2RlKHJlcXVlc3Q6IFBhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3Mvc2VuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYXNzaXN0IGluIHNldHRpbmcgdXAgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBvciBkaXNhYmxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZW5kVHdvRmFjdG9yQ29kZUZvckVuYWJsZURpc2FibGUsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGUocmVxdWVzdDogVHdvRmFjdG9yU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYXNzaXN0IGluIHNldHRpbmcgdXAgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBvciBkaXNhYmxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRUd29GYWN0b3JDb2RlRm9yRW5hYmxlRGlzYWJsZShyZXF1ZXN0OiBUd29GYWN0b3JTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gY29kZSB0byBhbGxvdyB0aGUgY29tcGxldGlvbiBvZiBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHdvRmFjdG9ySWQgVGhlIElkIHJldHVybmVkIGJ5IHRoZSBMb2dpbiBBUEkgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZW5kVHdvRmFjdG9yQ29kZUZvckxvZ2luVXNpbmdNZXRob2QsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGVGb3JMb2dpbih0d29GYWN0b3JJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlbmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodHdvRmFjdG9ySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBjb2RlIHRvIGFsbG93IHRoZSBjb21wbGV0aW9uIG9mIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0d29GYWN0b3JJZCBUaGUgSWQgcmV0dXJuZWQgYnkgdGhlIExvZ2luIEFQSSBuZWNlc3NhcnkgdG8gY29tcGxldGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtUd29GYWN0b3JTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgVHdvIEZhY3RvciBzZW5kIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCB0aGUgVHdvIEZhY3RvciBjb2RlIHRvIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBzZW5kVHdvRmFjdG9yQ29kZUZvckxvZ2luVXNpbmdNZXRob2QodHdvRmFjdG9ySWQ6IHN0cmluZywgcmVxdWVzdDogVHdvRmFjdG9yU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0d29GYWN0b3JJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQmVnaW5zIGEgbG9naW4gcmVxdWVzdCBmb3IgYSAzcmQgcGFydHkgbG9naW4gdGhhdCByZXF1aXJlcyB1c2VyIGludGVyYWN0aW9uIHN1Y2ggYXMgSFlQUi5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIHRoaXJkLXBhcnR5IGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0aGlyZC1wYXJ0eSBsb2dpblxuICAgKiAgICBwcm92aWRlcnMgdGhhdCBGdXNpb25BdXRoIHVzZXMgdG8gcmVjb25jaWxlIHRoZSB1c2VyJ3MgYWNjb3VudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgc3RhcnRJZGVudGl0eVByb3ZpZGVyTG9naW4ocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QgYnkgZ2VuZXJhdGluZyBhIHBhc3N3b3JkbGVzcyBjb2RlLiBUaGlzIGNvZGUgY2FuIGJlIHNlbnQgdG8gdGhlIFVzZXIgdXNpbmcgdGhlIFNlbmRcbiAgICogUGFzc3dvcmRsZXNzIENvZGUgQVBJIG9yIHVzaW5nIGEgbWVjaGFuaXNtIG91dHNpZGUgb2YgRnVzaW9uQXV0aC4gVGhlIHBhc3N3b3JkbGVzcyBsb2dpbiBpcyBjb21wbGV0ZWQgYnkgdXNpbmcgdGhlIFBhc3N3b3JkbGVzcyBMb2dpbiBBUEkgd2l0aCB0aGlzIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3Mgc3RhcnQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBiZWdpbiB0aGUgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0UGFzc3dvcmRsZXNzTG9naW4ocmVxdWVzdDogUGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZGxlc3NTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3Mvc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIFR3by1GYWN0b3IgbG9naW4gcmVxdWVzdCBieSBnZW5lcmF0aW5nIGEgdHdvLWZhY3RvciBpZGVudGlmaWVyLiBUaGlzIGNvZGUgY2FuIHRoZW4gYmUgc2VudCB0byB0aGUgVHdvIEZhY3RvciBTZW5kIFxuICAgKiBBUEkgKC9hcGkvdHdvLWZhY3Rvci9zZW5kKWluIG9yZGVyIHRvIHNlbmQgYSBvbmUtdGltZSB1c2UgY29kZSB0byBhIHVzZXIuIFlvdSBjYW4gYWxzbyB1c2Ugb25lLXRpbWUgdXNlIGNvZGUgcmV0dXJuZWQgXG4gICAqIHRvIHNlbmQgdGhlIGNvZGUgb3V0LW9mLWJhbmQuIFRoZSBUd28tRmFjdG9yIGxvZ2luIGlzIGNvbXBsZXRlZCBieSBtYWtpbmcgYSByZXF1ZXN0IHRvIHRoZSBUd28tRmFjdG9yIExvZ2luIFxuICAgKiBBUEkgKC9hcGkvdHdvLWZhY3Rvci9sb2dpbikuIHdpdGggdGhlIHR3by1mYWN0b3IgaWRlbnRpZmllciBhbmQgdGhlIG9uZS10aW1lIHVzZSBjb2RlLlxuICAgKiBcbiAgICogVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYWxsb3cgeW91IHRvIGJlZ2luIGEgVHdvLUZhY3RvciBsb2dpbiBvdXRzaWRlIG9mIGEgbm9ybWFsIGxvZ2luIHRoYXQgb3JpZ2luYXRlZCBmcm9tIHRoZSBMb2dpbiBBUEkgKC9hcGkvbG9naW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclN0YXJ0UmVxdWVzdH0gcmVxdWVzdCBUaGUgVHdvLUZhY3RvciBzdGFydCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGJlZ2luIHRoZSBUd28tRmFjdG9yIGxvZ2luIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0VHdvRmFjdG9yTG9naW4ocmVxdWVzdDogVHdvRmFjdG9yU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3N0YXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgbG9naW4gdXNpbmcgYSAyRkEgY2hhbGxlbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yTG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBsb2dpbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY3JlZGVudGlhbHMgdXNlZCB0byBsb2cgdGhlbSBpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgdHdvRmFjdG9yTG9naW4ocmVxdWVzdDogVHdvRmFjdG9yTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBBUEkga2V5IGJ5IGdpdmVuIGlkXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBpS2V5SWQgVGhlIElkIG9mIHRoZSBBUEkga2V5IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBUElLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIEFQSSBLZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVBUElLZXkoYXBpS2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEFQSUtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFQSUtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcGlLZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgYXBwbGljYXRpb24gcm9sZSB3aXRoIHRoZSBnaXZlbiBpZCBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSByb2xlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIFRoZSBJZCBvZiB0aGUgcm9sZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgcm9sZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29ubmVjdG9yIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIFRoZSBJZCBvZiB0aGUgY29ubmVjdG9yIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb25uZWN0b3JSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGNvbm5lY3RvciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCwgcmVxdWVzdDogQ29ubmVjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29uc2VudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQ29uc2VudChjb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IENvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZW1haWwgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgZW1haWwgdGVtcGxhdGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VtYWlsVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgZW1haWwgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW1haWxUZW1wbGF0ZShlbWFpbFRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVtYWlsVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW1haWxUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIEVudGl0eSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IEVudGl0eSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUVudGl0eShlbnRpdHlJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgRW50aXR5IFR5cGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IFR5cGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgRW50aXR5IFR5cGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW50aXR5VHlwZShlbnRpdHlUeXBlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBlcm1pc3Npb24gd2l0aCB0aGUgZ2l2ZW4gaWQgZm9yIHRoZSBlbnRpdHkgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBlbnRpdHlUeXBlIHRoYXQgdGhlIHBlcm1pc3Npb24gYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSBwZXJtaXNzaW9uSWQgVGhlIElkIG9mIHRoZSBwZXJtaXNzaW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHBlcm1pc3Npb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW50aXR5VHlwZVBlcm1pc3Npb24oZW50aXR5VHlwZUlkOiBVVUlELCBwZXJtaXNzaW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJwZXJtaXNzaW9uXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZXJtaXNzaW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZm9ybSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgVGhlIElkIG9mIHRoZSBmb3JtIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtGb3JtUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBmb3JtIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUZvcm0oZm9ybUlkOiBVVUlELCByZXF1ZXN0OiBGb3JtUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGZvcm0gZmllbGQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmllbGRJZCBUaGUgSWQgb2YgdGhlIGZvcm0gZmllbGQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Zvcm1GaWVsZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgZm9ybSBmaWVsZCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlELCByZXF1ZXN0OiBGb3JtRmllbGRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBncm91cCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIFRoZSBJZCBvZiB0aGUgZ3JvdXAgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0dyb3VwUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGdyb3VwIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVHcm91cChncm91cElkOiBVVUlELCByZXF1ZXN0OiBHcm91cFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1lbWJlciBpbiBhIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0ge01lbWJlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZ3JvdXAgbWVtYmVyKHMpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZW1iZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IE1lbWJlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lbWJlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lbWJlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjY2Vzc0NvbnRyb2xMaXN0SWQgVGhlIElkIG9mIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IElQIEFjY2VzcyBDb250cm9sIExpc3QgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlSVBBY2Nlc3NDb250cm9sTGlzdChhY2Nlc3NDb250cm9sTGlzdElkOiBVVUlELCByZXF1ZXN0OiBJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY2Nlc3NDb250cm9sTGlzdElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgdXBkYXRlZCBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVJZGVudGl0eVByb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgcmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgYXZhaWxhYmxlIGludGVncmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJbnRlZ3JhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBpbnRlZ3JhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlSW50ZWdyYXRpb25zKHJlcXVlc3Q6IEludGVncmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJbnRlZ3JhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaW50ZWdyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGtleSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGtleSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGtleSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbGFtYmRhIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIFRoZSBJZCBvZiB0aGUgbGFtYmRhIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtMYW1iZGFSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgbGFtYmRhIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlTGFtYmRhKGxhbWJkYUlkOiBVVUlELCByZXF1ZXN0OiBMYW1iZGFSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IG1lc3NhZ2UgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBtZXNzZW5nZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgVGhlIElkIG9mIHRoZSBtZXNzZW5nZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge01lc3NlbmdlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgbWVzc2VuZ2VyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlELCByZXF1ZXN0OiBNZXNzZW5nZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSByZWdpc3RyYXRpb24gZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIGlkIGFuZCB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBpbiB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHdob3NlIHJlZ2lzdHJhdGlvbiBpcyBnb2luZyB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge1JlZ2lzdHJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCByZXF1ZXN0OiBSZWdpc3RyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTeXN0ZW1Db25maWd1cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHN5c3RlbSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVN5c3RlbUNvbmZpZ3VyYXRpb24ocmVxdWVzdDogU3lzdGVtQ29uZmlndXJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0tY29uZmlndXJhdGlvbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdGVuYW50IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtUZW5hbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgdGVuYW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVGVuYW50KHRlbmFudElkOiBVVUlELCByZXF1ZXN0OiBUZW5hbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB0aGVtZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIFRoZSBJZCBvZiB0aGUgdGhlbWUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1RoZW1lUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHRoZW1lIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVUaGVtZSh0aGVtZUlkOiBVVUlELCByZXF1ZXN0OiBUaGVtZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtVc2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHVzZXIgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVXNlcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlciBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgdXNlciBhY3Rpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZWFzb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgdXNlciBhY3Rpb24gcmVhc29uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHNpbmdsZSBVc2VyIGNvbnNlbnQgYnkgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckNvbnNlbnRJZCBUaGUgVXNlciBDb25zZW50IElkXG4gICAqIEBwYXJhbSB7VXNlckNvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY29uc2VudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogVXNlckNvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB3ZWJob29rIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tJZCBUaGUgSWQgb2YgdGhlIHdlYmhvb2sgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1dlYmhvb2tSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgd2ViaG9vayBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVXZWJob29rKHdlYmhvb2tJZDogVVVJRCwgcmVxdWVzdDogV2ViaG9va1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG9yIHVwZGF0ZXMgYW4gRW50aXR5IEdyYW50LiBUaGlzIGlzIHdoZW4gYSBVc2VyL0VudGl0eSBpcyBncmFudGVkIHBlcm1pc3Npb25zIHRvIGFuIEVudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSB0aGF0IHRoZSBVc2VyL0VudGl0eSBpcyBiZWluZyBncmFudGVkIGFjY2VzcyB0by5cbiAgICogQHBhcmFtIHtFbnRpdHlHcmFudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgRW50aXR5IEdyYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB1cHNlcnRFbnRpdHlHcmFudChlbnRpdHlJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5R3JhbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcImdyYW50XCIpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZW5kLXVzZXIgcHJvdmlkZWQgdXNlcl9jb2RlIGZyb20gdGhlIHVzZXItaW50ZXJhY3Rpb24gb2YgdGhlIERldmljZSBBdXRob3JpemF0aW9uIEdyYW50LlxuICAgKiBJZiB5b3UgYnVpbGQgeW91ciBvd24gYWN0aXZhdGlvbiBmb3JtIHlvdSBzaG91bGQgdmFsaWRhdGUgdGhlIHVzZXIgcHJvdmlkZWQgY29kZSBwcmlvciB0byBiZWdpbm5pbmcgdGhlIEF1dGhvcml6YXRpb24gZ3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIFRoZSBjbGllbnQgaWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZhbGlkYXRlRGV2aWNlKHVzZXJfY29kZTogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZS92YWxpZGF0ZScpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcHJvdmlkZWQgSldUIChlbmNvZGVkIEpXVCBzdHJpbmcpIHRvIGVuc3VyZSB0aGUgdG9rZW4gaXMgdmFsaWQuIEEgdmFsaWQgYWNjZXNzIHRva2VuIGlzIHByb3Blcmx5XG4gICAqIHNpZ25lZCBhbmQgbm90IGV4cGlyZWQuXG4gICAqIDxwPlxuICAgKiBUaGlzIEFQSSBtYXkgYmUgdXNlZCB0byB2ZXJpZnkgdGhlIEpXVCBhcyB3ZWxsIGFzIGRlY29kZSB0aGUgZW5jb2RlZCBKV1QgaW50byBodW1hbiByZWFkYWJsZSBpZGVudGl0eSBjbGFpbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmFsaWRhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdmFsaWRhdGVKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWYWxpZGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFZhbGlkYXRlUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3ZhbGlkYXRlJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0J3MgYSBKV1QgdmVuZGluZyBtYWNoaW5lIVxuICAgKiBcbiAgICogSXNzdWUgYSBuZXcgYWNjZXNzIHRva2VuIChKV1QpIHdpdGggdGhlIHByb3ZpZGVkIGNsYWltcyBpbiB0aGUgcmVxdWVzdC4gVGhpcyBKV1QgaXMgbm90IHNjb3BlZCB0byBhIHRlbmFudCBvciB1c2VyLCBpdCBpcyBhIGZyZWUgZm9ybSBcbiAgICogdG9rZW4gdGhhdCB3aWxsIGNvbnRhaW4gd2hhdCBjbGFpbXMgeW91IHByb3ZpZGUuXG4gICAqIDxwPlxuICAgKiBUaGUgaWF0LCBleHAgYW5kIGp0aSBjbGFpbXMgd2lsbCBiZSBhZGRlZCBieSBGdXNpb25BdXRoLCBhbGwgb3RoZXIgY2xhaW1zIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci5cbiAgICogXG4gICAqIElmIGEgVFRMIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCwgdGhlIFRUTCB3aWxsIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBkZWZhdWx0IFRlbmFudCBvciB0aGUgVGVuYW50IHNwZWNpZmllZCBvbiB0aGUgcmVxdWVzdCBlaXRoZXIgXG4gICAqIGJ5IHdheSBvZiB0aGUgWC1GdXNpb25BdXRoLVRlbmFudElkIHJlcXVlc3QgaGVhZGVyLCBvciBhIHRlbmFudCBzY29wZWQgQVBJIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtKV1RWZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgY2xhaW1zIGZvciB0aGlzIEpXVC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SldUVmVuZFJlc3BvbnNlPj59XG4gICAqL1xuICB2ZW5kSldUKHJlcXVlc3Q6IEpXVFZlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RWZW5kUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SldUVmVuZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3ZlbmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhIGVtYWlsIHZlcmlmaWNhdGlvbi4gVGhlIElkIGdpdmVuIGlzIHVzdWFsbHkgZnJvbSBhbiBlbWFpbCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyaWZpY2F0aW9uSWQgVGhlIGVtYWlsIHZlcmlmaWNhdGlvbiBpZCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gdmVyaWZ5RW1haWxBZGRyZXNzIGFuZCBjaGFuZ2VkIHRvIHRha2UgYSBKU09OIHJlcXVlc3QgYm9keSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICB2ZXJpZnlFbWFpbCh2ZXJpZmljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh2ZXJpZmljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGEgdXNlcidzIGVtYWlsIGFkZHJlc3MuIFxuICAgKiBcbiAgICogVGhlIHJlcXVlc3QgYm9keSB3aWxsIGNvbnRhaW4gdGhlIHZlcmlmaWNhdGlvbklkLiBZb3UgbWF5IGFsc28gYmUgcmVxdWlyZWQgdG8gc2VuZCBhIG9uZS10aW1lIHVzZSBjb2RlIGJhc2VkIHVwb24geW91ciBjb25maWd1cmF0aW9uLiBXaGVuIFxuICAgKiB0aGUgdGVuYW50IGlzIGNvbmZpZ3VyZWQgdG8gZ2F0ZSBhIHVzZXIgdW50aWwgdGhlaXIgZW1haWwgYWRkcmVzcyBpcyB2ZXJpZmllZCwgdGhpcyBwcm9jZWR1cmVzIHJlcXVpcmVzIHR3byB2YWx1ZXMgaW5zdGVhZCBvZiBvbmUuIFxuICAgKiBUaGUgdmVyaWZpY2F0aW9uSWQgaXMgYSBoaWdoIGVudHJvcHkgdmFsdWUgYW5kIHRoZSBvbmUtdGltZSB1c2UgY29kZSBpcyBhIGxvdyBlbnRyb3B5IHZhbHVlIHRoYXQgaXMgZWFzaWx5IGVudGVyZWQgaW4gYSB1c2VyIGludGVyYWN0aXZlIGZvcm0uIFRoZSBcbiAgICogdHdvIHZhbHVlcyB0b2dldGhlciBhcmUgYWJsZSB0byBjb25maXJtIGEgdXNlcidzIGVtYWlsIGFkZHJlc3MgYW5kIG1hcmsgdGhlIHVzZXIncyBlbWFpbCBhZGRyZXNzIGFzIHZlcmlmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeUVtYWlsUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB2ZXJpZmljYXRpb25JZCBhbmQgb3B0aW9uYWwgb25lLXRpbWUgdXNlIGNvZGUgcGFpcmVkIHdpdGggdGhlIHZlcmlmaWNhdGlvbklkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2ZXJpZnlFbWFpbEFkZHJlc3MocmVxdWVzdDogVmVyaWZ5RW1haWxSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGFuIGFwcGxpY2F0aW9uIHJlZ2lzdHJhdGlvbi4gVGhlIElkIGdpdmVuIGlzIHVzdWFsbHkgZnJvbSBhbiBlbWFpbCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyaWZpY2F0aW9uSWQgVGhlIHJlZ2lzdHJhdGlvbiB2ZXJpZmljYXRpb24gSWQgc2VudCB0byB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHZlcmlmeVVzZXJSZWdpc3RyYXRpb24gYW5kIGNoYW5nZWQgdG8gdGFrZSBhIEpTT04gcmVxdWVzdCBib2R5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHZlcmlmeVJlZ2lzdHJhdGlvbih2ZXJpZmljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodmVyaWZpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhIHVzZXIncyByZWdpc3RyYXRpb24uIFxuICAgKiBcbiAgICogVGhlIHJlcXVlc3QgYm9keSB3aWxsIGNvbnRhaW4gdGhlIHZlcmlmaWNhdGlvbklkLiBZb3UgbWF5IGFsc28gYmUgcmVxdWlyZWQgdG8gc2VuZCBhIG9uZS10aW1lIHVzZSBjb2RlIGJhc2VkIHVwb24geW91ciBjb25maWd1cmF0aW9uLiBXaGVuIFxuICAgKiB0aGUgYXBwbGljYXRpb24gaXMgY29uZmlndXJlZCB0byBnYXRlIGEgdXNlciB1bnRpbCB0aGVpciByZWdpc3RyYXRpb24gaXMgdmVyaWZpZWQsIHRoaXMgcHJvY2VkdXJlcyByZXF1aXJlcyB0d28gdmFsdWVzIGluc3RlYWQgb2Ygb25lLiBcbiAgICogVGhlIHZlcmlmaWNhdGlvbklkIGlzIGEgaGlnaCBlbnRyb3B5IHZhbHVlIGFuZCB0aGUgb25lLXRpbWUgdXNlIGNvZGUgaXMgYSBsb3cgZW50cm9weSB2YWx1ZSB0aGF0IGlzIGVhc2lseSBlbnRlcmVkIGluIGEgdXNlciBpbnRlcmFjdGl2ZSBmb3JtLiBUaGUgXG4gICAqIHR3byB2YWx1ZXMgdG9nZXRoZXIgYXJlIGFibGUgdG8gY29uZmlybSBhIHVzZXIncyByZWdpc3RyYXRpb24gYW5kIG1hcmsgdGhlIHVzZXIncyByZWdpc3RyYXRpb24gYXMgdmVyaWZpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5UmVnaXN0cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB2ZXJpZmljYXRpb25JZCBhbmQgb3B0aW9uYWwgb25lLXRpbWUgdXNlIGNvZGUgcGFpcmVkIHdpdGggdGhlIHZlcmlmaWNhdGlvbklkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2ZXJpZnlVc2VyUmVnaXN0cmF0aW9uKHJlcXVlc3Q6IFZlcmlmeVJlZ2lzdHJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cblxuICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqIFByaXZhdGUgbWV0aG9kc1xuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuICAvKipcbiAgICogY3JlYXRlcyBhIHJlc3QgY2xpZW50XG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBSRVNUQ2xpZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNhbGwuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0PFJULCBFUlQ+KCk6IElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxSVCwgRVJUPigpXG4gICAgICAgICAgICAgICAud2l0aEF1dGhvcml6YXRpb24odGhpcy5hcGlLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEFub255bW91czxSVCwgRVJUPigpOiBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgbGV0IGNsaWVudCA9IHRoaXMuY2xpZW50QnVpbGRlci5idWlsZDxSVCwgRVJUPih0aGlzLmhvc3QpO1xuXG4gICAgaWYgKHRoaXMudGVuYW50SWQgIT0gbnVsbCkge1xuICAgICAgY2xpZW50LndpdGhIZWFkZXIoJ1gtRnVzaW9uQXV0aC1UZW5hbnRJZCcsIHRoaXMudGVuYW50SWQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNyZWRlbnRpYWxzICE9IG51bGwpIHtcbiAgICAgIGNsaWVudC53aXRoQ3JlZGVudGlhbHModGhpcy5jcmVkZW50aWFscyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGdXNpb25BdXRoQ2xpZW50O1xuXG4vKipcbiAqIEEgMTI4IGJpdCBVVUlEIGluIHN0cmluZyBmb3JtYXQgXCI4LTQtNC00LTEyXCIsIGZvciBleGFtcGxlIFwiNThENUUyMTItMTY1Qi00Q0EwLTkwOUItQzg2QjlDRUUwMTExXCIuXG4gKi9cbmV4cG9ydCB0eXBlIFVVSUQgPSBzdHJpbmc7XG5cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzVG9rZW4ge1xuICBhY2Nlc3NfdG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyZXNfaW4/OiBudW1iZXI7XG4gIGlkX3Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoX3Rva2VuPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdG9rZW5fdHlwZT86IFRva2VuVHlwZTtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25EYXRhIHtcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVXNlcj86IGJvb2xlYW47XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbm90aWZ5VXNlcj86IGJvb2xlYW47XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uSWQ/OiBVVUlEO1xuICB1c2VyQWN0aW9uSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFRoZSB1c2VyIGFjdGlvbiByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFjdGlvbj86IEFjdGlvbkRhdGE7XG4gIGJyb2FkY2FzdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHVzZXIgYWN0aW9uIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25SZXNwb25zZSB7XG4gIGFjdGlvbj86IFVzZXJBY3Rpb25Mb2c7XG4gIGFjdGlvbnM/OiBBcnJheTxVc2VyQWN0aW9uTG9nPjtcbn1cblxuLyoqXG4gKiBBdmFpbGFibGUgSlNPTiBXZWIgQWxnb3JpdGhtcyAoSldBKSBhcyBkZXNjcmliZWQgaW4gUkZDIDc1MTggYXZhaWxhYmxlIGZvciB0aGlzIEpXVCBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEFsZ29yaXRobSB7XG4gIEVTMjU2ID0gXCJFUzI1NlwiLFxuICBFUzM4NCA9IFwiRVMzODRcIixcbiAgRVM1MTIgPSBcIkVTNTEyXCIsXG4gIEhTMjU2ID0gXCJIUzI1NlwiLFxuICBIUzM4NCA9IFwiSFMzODRcIixcbiAgSFM1MTIgPSBcIkhTNTEyXCIsXG4gIFJTMjU2ID0gXCJSUzI1NlwiLFxuICBSUzM4NCA9IFwiUlMzODRcIixcbiAgUlM1MTIgPSBcIlJTNTEyXCIsXG4gIG5vbmUgPSBcIm5vbmVcIlxufVxuXG4vKipcbiAqIGRvbWFpbiBQT0pPIHRvIHJlcHJlc2VudCBBdXRoZW50aWNhdGlvbktleVxuICpcbiAqIEBhdXRob3Igc2FuamF5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5IHtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0SWQ/OiBVVUlEO1xuICBrZXk/OiBzdHJpbmc7XG4gIGtleU1hbmFnZXI/OiBib29sZWFuO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbWV0YURhdGE/OiBBUElLZXlNZXRhRGF0YTtcbiAgcGVybWlzc2lvbnM/OiBBUElLZXlQZXJtaXNzaW9ucztcbiAgdGVuYW50SWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleU1ldGFEYXRhIHtcbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5UGVybWlzc2lvbnMge1xuICBlbmRwb2ludHM/OiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxzdHJpbmc+Pjtcbn1cblxuLyoqXG4gKiBBdXRoZW50aWNhdGlvbiBrZXkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTYW5qYXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBUElLZXlSZXF1ZXN0IHtcbiAgYXBpS2V5PzogQVBJS2V5O1xuICBzb3VyY2VLZXlJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24ga2V5IHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNhbmpheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleVJlc3BvbnNlIHtcbiAgYXBpS2V5PzogQVBJS2V5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgc2VydmljZXNJZD86IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsZUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxBcHBsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBrZXlJZD86IFVVSUQ7XG4gIHNjb3BlPzogc3RyaW5nO1xuICBzZXJ2aWNlc0lkPzogc3RyaW5nO1xuICB0ZWFtSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uIHtcbiAgYWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbkFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uO1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBhdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbj86IEF1dGhlbnRpY2F0aW9uVG9rZW5Db25maWd1cmF0aW9uO1xuICBjbGVhblNwZWFrQ29uZmlndXJhdGlvbj86IENsZWFuU3BlYWtDb25maWd1cmF0aW9uO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW1haWxDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25FbWFpbENvbmZpZ3VyYXRpb247XG4gIGZvcm1Db25maWd1cmF0aW9uPzogQXBwbGljYXRpb25Gb3JtQ29uZmlndXJhdGlvbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBqd3RDb25maWd1cmF0aW9uPzogSldUQ29uZmlndXJhdGlvbjtcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2dpbkNvbmZpZ3VyYXRpb24/OiBMb2dpbkNvbmZpZ3VyYXRpb247XG4gIG11bHRpRmFjdG9yQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uTXVsdGlGYWN0b3JDb25maWd1cmF0aW9uO1xuICBuYW1lPzogc3RyaW5nO1xuICBvYXV0aENvbmZpZ3VyYXRpb24/OiBPQXV0aDJDb25maWd1cmF0aW9uO1xuICBwYXNzd29yZGxlc3NDb25maWd1cmF0aW9uPzogUGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbj86IFJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvbkRlbGV0ZVBvbGljeT86IEFwcGxpY2F0aW9uUmVnaXN0cmF0aW9uRGVsZXRlUG9saWN5O1xuICByb2xlcz86IEFycmF5PEFwcGxpY2F0aW9uUm9sZT47XG4gIHNhbWx2MkNvbmZpZ3VyYXRpb24/OiBTQU1MdjJDb25maWd1cmF0aW9uO1xuICBzdGF0ZT86IE9iamVjdFN0YXRlO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHRoZW1lSWQ/OiBVVUlEO1xuICB1bnZlcmlmaWVkPzogUmVnaXN0cmF0aW9uVW52ZXJpZmllZE9wdGlvbnM7XG4gIHZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvblN0cmF0ZWd5PzogVmVyaWZpY2F0aW9uU3RyYXRlZ3k7XG4gIHZlcmlmeVJlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uQWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuICB1aUlQQWNjZXNzQ29udHJvbExpc3RJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25FbWFpbENvbmZpZ3VyYXRpb24ge1xuICBlbWFpbFVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGVtYWlsVmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW1haWxWZXJpZmllZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGZvcmdvdFBhc3N3b3JkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5JZEluVXNlT25DcmVhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPblVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luTmV3RGV2aWNlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5TdXNwaWNpb3VzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRsZXNzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRSZXNldFN1Y2Nlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHNldFBhc3N3b3JkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kQWRkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kUmVtb3ZlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBFdmVudHMgdGhhdCBhcmUgYm91bmQgdG8gYXBwbGljYXRpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uRXZlbnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkZvcm1Db25maWd1cmF0aW9uIHtcbiAgYWRtaW5SZWdpc3RyYXRpb25Gb3JtSWQ/OiBVVUlEO1xuICBzZWxmU2VydmljZUZvcm1JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uTXVsdGlGYWN0b3JDb25maWd1cmF0aW9uIHtcbiAgZW1haWw/OiBNdWx0aUZhY3RvckVtYWlsVGVtcGxhdGU7XG4gIHNtcz86IE11bHRpRmFjdG9yU01TVGVtcGxhdGU7XG59XG5cbi8qKlxuICogQSBBcHBsaWNhdGlvbi1sZXZlbCBwb2xpY3kgZm9yIGRlbGV0aW5nIFVzZXJzLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25SZWdpc3RyYXRpb25EZWxldGVQb2xpY3kge1xuICB1bnZlcmlmaWVkPzogVGltZUJhc2VkRGVsZXRlUG9saWN5O1xufVxuXG4vKipcbiAqIFRoZSBBcHBsaWNhdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uPzogQXBwbGljYXRpb247XG4gIHJvbGU/OiBBcHBsaWNhdGlvblJvbGU7XG4gIHdlYmhvb2tJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBUaGUgQXBwbGljYXRpb24gQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUmVzcG9uc2Uge1xuICBhcHBsaWNhdGlvbj86IEFwcGxpY2F0aW9uO1xuICBhcHBsaWNhdGlvbnM/OiBBcnJheTxBcHBsaWNhdGlvbj47XG4gIHJvbGU/OiBBcHBsaWNhdGlvblJvbGU7XG59XG5cbi8qKlxuICogQSByb2xlIGdpdmVuIHRvIGEgdXNlciBmb3IgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25Sb2xlIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNEZWZhdWx0PzogYm9vbGVhbjtcbiAgaXNTdXBlclJvbGU/OiBib29sZWFuO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25VbnZlcmlmaWVkQ29uZmlndXJhdGlvbiB7XG4gIHJlZ2lzdHJhdGlvbj86IFVudmVyaWZpZWRCZWhhdmlvcjtcbiAgdmVyaWZpY2F0aW9uU3RyYXRlZ3k/OiBWZXJpZmljYXRpb25TdHJhdGVneTtcbiAgd2hlbkdhdGVkPzogUmVnaXN0cmF0aW9uVW52ZXJpZmllZE9wdGlvbnM7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyBhIHNpbXBsZSBhdHRhY2htZW50IHdpdGggYSBieXRlIGFycmF5LCBuYW1lIGFuZCBNSU1FIHR5cGUuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gIGF0dGFjaG1lbnQ/OiBBcnJheTxudW1iZXI+O1xuICBtaW1lPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGF1ZGl0IGxvZy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZyB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IG51bWJlcjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaW5zZXJ0VXNlcj86IHN0cmluZztcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgbmV3VmFsdWU/OiBhbnk7XG4gIG9sZFZhbHVlPzogYW55O1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dDb25maWd1cmF0aW9uIHtcbiAgZGVsZXRlPzogRGVsZXRlQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBFdmVudCBldmVudCB0byBhbiBhdWRpdCBsb2cgd2FzIGNyZWF0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhdWRpdExvZz86IEF1ZGl0TG9nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0V4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGNyaXRlcmlhPzogQXVkaXRMb2dTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ1JlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXVkaXRMb2c/OiBBdWRpdExvZztcbn1cblxuLyoqXG4gKiBBdWRpdCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dSZXNwb25zZSB7XG4gIGF1ZGl0TG9nPzogQXVkaXRMb2c7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGVuZD86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgbmV3VmFsdWU/OiBzdHJpbmc7XG4gIG9sZFZhbHVlPzogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB1c2VyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEF1ZGl0TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQXVkaXQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2Uge1xuICBhdWRpdExvZ3M/OiBBcnJheTxBdWRpdExvZz47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBBdXRoZW50aWNhdGlvblRocmVhdHMge1xuICBJbXBvc3NpYmxlVHJhdmVsID0gXCJJbXBvc3NpYmxlVHJhdmVsXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdG9yQ29uZmlndXJhdGlvbiB7XG4gIGFsZ29yaXRobT86IFRPVFBBbGdvcml0aG07XG4gIGNvZGVMZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVTdGVwPzogbnVtYmVyO1xufVxuXG4vLyBEbyBub3QgcmVxdWlyZSBhIHNldHRlciBmb3IgJ3R5cGUnLCBpdCBpcyBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBjbGFzcyBhbmQgaXMgbm90IG11dGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogQ29ubmVjdG9yVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRWxhc3RpY1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYWNjdXJhdGVUb3RhbD86IGJvb2xlYW47XG4gIGlkcz86IEFycmF5PFVVSUQ+O1xuICBxdWVyeT86IHN0cmluZztcbiAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XG4gIHNvcnRGaWVsZHM/OiBBcnJheTxTb3J0RmllbGQ+O1xufVxuXG4vKipcbiAqIEJhc2UtY2xhc3MgZm9yIGFsbCBGdXNpb25BdXRoIGV2ZW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRXZlbnQge1xuICBjcmVhdGVJbnN0YW50PzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGluZm8/OiBFdmVudEluZm87XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdHlwZT86IEV2ZW50VHlwZTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciByZXF1ZXN0cyB0aGF0IGNhbiBjb250YWluIGV2ZW50IGluZm9ybWF0aW9uLiBUaGlzIGV2ZW50IGluZm9ybWF0aW9uIGlzIHVzZWQgd2hlbiBzZW5kaW5nIFdlYmhvb2tzIG9yIGVtYWlsc1xuICogZHVyaW5nIHRoZSB0cmFuc2FjdGlvbi4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgZXZlbnQgaW5mb3JtYXRpb24gaXMgY29ycmVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZXZlbnRJbmZvPzogRXZlbnRJbmZvO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGRhdGVUaW1lU2Vjb25kc0Zvcm1hdD86IHN0cmluZztcbiAgem9uZUlkPzogc3RyaW5nO1xufVxuXG4vLyBEbyBub3QgcmVxdWlyZSBhIHNldHRlciBmb3IgJ3R5cGUnLCBpdCBpcyBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBjbGFzcyBhbmQgaXMgbm90IG11dGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUlkZW50aXR5UHJvdmlkZXI8RCBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8VVVJRCwgRD47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsaW5raW5nU3RyYXRlZ3k/OiBJZGVudGl0eVByb3ZpZGVyTGlua2luZ1N0cmF0ZWd5O1xuICBuYW1lPzogc3RyaW5nO1xuICB0ZW5hbnRDb25maWd1cmF0aW9uPzogUmVjb3JkPFVVSUQsIElkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPjtcbiAgdHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjcmVhdGVSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICBtZXRhRGF0YT86IE1ldGFEYXRhO1xuICBuZXdEZXZpY2U/OiBib29sZWFuO1xuICBub0pXVD86IGJvb2xlYW47XG59XG5cbi8vIERvIG5vdCByZXF1aXJlIGEgc2V0dGVyIGZvciAndHlwZScsIGl0IGlzIGRlZmluZWQgYnkgdGhlIGNvbmNyZXRlIGNsYXNzIGFuZCBpcyBub3QgbXV0YWJsZVxuZXhwb3J0IGludGVyZmFjZSBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRyYW5zcG9ydD86IHN0cmluZztcbiAgdHlwZT86IE1lc3NlbmdlclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbnVtYmVyT2ZSZXN1bHRzPzogbnVtYmVyO1xuICBvcmRlckJ5Pzogc3RyaW5nO1xuICBzdGFydFJvdz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gQnJlYWNoQWN0aW9uIHtcbiAgT2ZmID0gXCJPZmZcIixcbiAgUmVjb3JkT25seSA9IFwiUmVjb3JkT25seVwiLFxuICBOb3RpZnlVc2VyID0gXCJOb3RpZnlVc2VyXCIsXG4gIFJlcXVpcmVDaGFuZ2UgPSBcIlJlcXVpcmVDaGFuZ2VcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQnJlYWNoZWRQYXNzd29yZFN0YXR1cyB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgRXhhY3RNYXRjaCA9IFwiRXhhY3RNYXRjaFwiLFxuICBTdWJBZGRyZXNzTWF0Y2ggPSBcIlN1YkFkZHJlc3NNYXRjaFwiLFxuICBQYXNzd29yZE9ubHkgPSBcIlBhc3N3b3JkT25seVwiLFxuICBDb21tb25QYXNzd29yZCA9IFwiQ29tbW9uUGFzc3dvcmRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmVhY2hlZFBhc3N3b3JkVGVuYW50TWV0cmljIHtcbiAgYWN0aW9uUmVxdWlyZWQ/OiBudW1iZXI7XG4gIG1hdGNoZWRDb21tb25QYXNzd29yZENvdW50PzogbnVtYmVyO1xuICBtYXRjaGVkRXhhY3RDb3VudD86IG51bWJlcjtcbiAgbWF0Y2hlZFBhc3N3b3JkQ291bnQ/OiBudW1iZXI7XG4gIG1hdGNoZWRTdWJBZGRyZXNzQ291bnQ/OiBudW1iZXI7XG4gIHBhc3N3b3Jkc0NoZWNrZWRDb3VudD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gQnJlYWNoTWF0Y2hNb2RlIHtcbiAgTG93ID0gXCJMb3dcIixcbiAgTWVkaXVtID0gXCJNZWRpdW1cIixcbiAgSGlnaCA9IFwiSGlnaFwiXG59XG5cbi8qKlxuICogWE1MIGNhbm9uaWNhbGl6YXRpb24gbWV0aG9kIGVudW1lcmF0aW9uLiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBJZFAgYW5kIFNQIHNpZGUgb2YgRnVzaW9uQXV0aCBTQU1MLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBDYW5vbmljYWxpemF0aW9uTWV0aG9kIHtcbiAgZXhjbHVzaXZlID0gXCJleGNsdXNpdmVcIixcbiAgZXhjbHVzaXZlX3dpdGhfY29tbWVudHMgPSBcImV4Y2x1c2l2ZV93aXRoX2NvbW1lbnRzXCIsXG4gIGluY2x1c2l2ZSA9IFwiaW5jbHVzaXZlXCIsXG4gIGluY2x1c2l2ZV93aXRoX2NvbW1lbnRzID0gXCJpbmNsdXNpdmVfd2l0aF9jb21tZW50c1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIENhcHRjaGFNZXRob2Qge1xuICBHb29nbGVSZWNhcHRjaGFWMiA9IFwiR29vZ2xlUmVjYXB0Y2hhVjJcIixcbiAgR29vZ2xlUmVjYXB0Y2hhVjMgPSBcIkdvb2dsZVJlY2FwdGNoYVYzXCIsXG4gIEhDYXB0Y2hhID0gXCJIQ2FwdGNoYVwiLFxuICBIQ2FwdGNoYUVudGVycHJpc2UgPSBcIkhDYXB0Y2hhRW50ZXJwcmlzZVwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VydGlmaWNhdGVJbmZvcm1hdGlvbiB7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgbWQ1RmluZ2VycHJpbnQ/OiBzdHJpbmc7XG4gIHNlcmlhbE51bWJlcj86IHN0cmluZztcbiAgc2hhMUZpbmdlcnByaW50Pzogc3RyaW5nO1xuICBzaGExVGh1bWJwcmludD86IHN0cmluZztcbiAgc2hhMjU2RmluZ2VycHJpbnQ/OiBzdHJpbmc7XG4gIHNoYTI1NlRodW1icHJpbnQ/OiBzdHJpbmc7XG4gIHN1YmplY3Q/OiBzdHJpbmc7XG4gIHZhbGlkRnJvbT86IG51bWJlcjtcbiAgdmFsaWRUbz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgZW51bSBDaGFuZ2VQYXNzd29yZFJlYXNvbiB7XG4gIEFkbWluaXN0cmF0aXZlID0gXCJBZG1pbmlzdHJhdGl2ZVwiLFxuICBCcmVhY2hlZCA9IFwiQnJlYWNoZWRcIixcbiAgRXhwaXJlZCA9IFwiRXhwaXJlZFwiLFxuICBWYWxpZGF0aW9uID0gXCJWYWxpZGF0aW9uXCJcbn1cblxuLyoqXG4gKiBDaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjaGFuZ2VQYXNzd29yZElkPzogc3RyaW5nO1xuICBjdXJyZW50UGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRydXN0Q2hhbGxlbmdlPzogc3RyaW5nO1xuICB0cnVzdFRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENoYW5nZSBwYXNzd29yZCByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZVBhc3N3b3JkUmVzcG9uc2Uge1xuICBvbmVUaW1lUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBDbGVhblNwZWFrIGNvbmZpZ3VyYXRpb24gYXQgdGhlIHN5c3RlbSBhbmQgYXBwbGljYXRpb24gbGV2ZWwuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYW5TcGVha0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xuICB1cmw/OiBzdHJpbmc7XG4gIHVzZXJuYW1lTW9kZXJhdGlvbj86IFVzZXJuYW1lTW9kZXJhdGlvbjtcbn1cblxuZXhwb3J0IGVudW0gQ2xpZW50QXV0aGVudGljYXRpb25NZXRob2Qge1xuICBub25lID0gXCJub25lXCIsXG4gIGNsaWVudF9zZWNyZXRfYmFzaWMgPSBcImNsaWVudF9zZWNyZXRfYmFzaWNcIixcbiAgY2xpZW50X3NlY3JldF9wb3N0ID0gXCJjbGllbnRfc2VjcmV0X3Bvc3RcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIENsaWVudEF1dGhlbnRpY2F0aW9uUG9saWN5IHtcbiAgUmVxdWlyZWQgPSBcIlJlcXVpcmVkXCIsXG4gIE5vdFJlcXVpcmVkID0gXCJOb3RSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZFdoZW5Vc2luZ1BLQ0UgPSBcIk5vdFJlcXVpcmVkV2hlblVzaW5nUEtDRVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JQb2xpY3kge1xuICBjb25uZWN0b3JJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgbWlncmF0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JSZXF1ZXN0IHtcbiAgY29ubmVjdG9yPzogQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JSZXNwb25zZSB7XG4gIGNvbm5lY3Rvcj86IEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uO1xuICBjb25uZWN0b3JzPzogQXJyYXk8QmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24+O1xufVxuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBjb25uZWN0b3JzLiBUaGlzIGVudW0gaXMgc3RvcmVkIGFzIGFuIG9yZGluYWwgb24gdGhlIDxjb2RlPmlkZW50aXRpZXM8L2NvZGU+IHRhYmxlLCBvcmRlciBtdXN0IGJlIG1haW50YWluZWQuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGVudW0gQ29ubmVjdG9yVHlwZSB7XG4gIEZ1c2lvbkF1dGggPSBcIkZ1c2lvbkF1dGhcIixcbiAgR2VuZXJpYyA9IFwiR2VuZXJpY1wiLFxuICBMREFQID0gXCJMREFQXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBjb25zZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50IHtcbiAgY29uc2VudEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGNvdW50cnlNaW5pbXVtQWdlRm9yU2VsZkNvbnNlbnQ/OiBMb2NhbGl6ZWRJbnRlZ2VycztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlZmF1bHRNaW5pbXVtQWdlRm9yU2VsZkNvbnNlbnQ/OiBudW1iZXI7XG4gIGVtYWlsUGx1cz86IEVtYWlsUGx1cztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbXVsdGlwbGVWYWx1ZXNBbGxvd2VkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgdmFsdWVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCBmb3IgVXNlciBjb25zZW50IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50UmVxdWVzdCB7XG4gIGNvbnNlbnQ/OiBDb25zZW50O1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFJlc3BvbnNlIHtcbiAgY29uc2VudD86IENvbnNlbnQ7XG4gIGNvbnNlbnRzPzogQXJyYXk8Q29uc2VudD47XG59XG5cbi8qKlxuICogTW9kZWxzIGEgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIENvbnNlbnRTdGF0dXMge1xuICBBY3RpdmUgPSBcIkFjdGl2ZVwiLFxuICBSZXZva2VkID0gXCJSZXZva2VkXCJcbn1cblxuLyoqXG4gKiBTdGF0dXMgZm9yIGNvbnRlbnQgbGlrZSB1c2VybmFtZXMsIHByb2ZpbGUgYXR0cmlidXRlcywgZXRjLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBDb250ZW50U3RhdHVzIHtcbiAgQUNUSVZFID0gXCJBQ1RJVkVcIixcbiAgUEVORElORyA9IFwiUEVORElOR1wiLFxuICBSRUpFQ1RFRCA9IFwiUkVKRUNURURcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ09SU0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWxsb3dDcmVkZW50aWFscz86IGJvb2xlYW47XG4gIGFsbG93ZWRIZWFkZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgYWxsb3dlZE1ldGhvZHM/OiBBcnJheTxIVFRQTWV0aG9kPjtcbiAgYWxsb3dlZE9yaWdpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGV4cG9zZWRIZWFkZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgcHJlZmxpZ2h0TWF4QWdlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvdW50IHtcbiAgY291bnQ/OiBudW1iZXI7XG4gIGludGVydmFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgZGFpbHkgYWN0aXZlIHVzZXIgcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlIHtcbiAgZGFpbHlBY3RpdmVVc2Vycz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBudW1iZXJPZkRheXNUb1JldGFpbj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlSW5mbyB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsYXN0QWNjZXNzZWRBZGRyZXNzPzogc3RyaW5nO1xuICBsYXN0QWNjZXNzZWRJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogRGV2aWNlVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVJlc3BvbnNlIHtcbiAgZGV2aWNlX2NvZGU/OiBzdHJpbmc7XG4gIGV4cGlyZXNfaW4/OiBudW1iZXI7XG4gIGludGVydmFsPzogbnVtYmVyO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbl91cmk/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbl91cmlfY29tcGxldGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIERldmljZVR5cGUge1xuICBCUk9XU0VSID0gXCJCUk9XU0VSXCIsXG4gIERFU0tUT1AgPSBcIkRFU0tUT1BcIixcbiAgTEFQVE9QID0gXCJMQVBUT1BcIixcbiAgTU9CSUxFID0gXCJNT0JJTEVcIixcbiAgT1RIRVIgPSBcIk9USEVSXCIsXG4gIFNFUlZFUiA9IFwiU0VSVkVSXCIsXG4gIFRBQkxFVCA9IFwiVEFCTEVUXCIsXG4gIFRWID0gXCJUVlwiLFxuICBVTktOT1dOID0gXCJVTktOT1dOXCJcbn1cblxuLyoqXG4gKiBBIGRpc3BsYXlhYmxlIHJhdyBsb2dpbiB0aGF0IGluY2x1ZGVzIGFwcGxpY2F0aW9uIG5hbWUgYW5kIHVzZXIgbG9naW5JZC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNwbGF5YWJsZVJhd0xvZ2luIGV4dGVuZHMgUmF3TG9naW4ge1xuICBhcHBsaWNhdGlvbk5hbWU/OiBzdHJpbmc7XG4gIGxvY2F0aW9uPzogTG9jYXRpb247XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBhbGwgaWRlbnRpdHkgcHJvdmlkZXJzIHRoYXQgY2FuIGJlIGRvbWFpbiBiYXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb21haW5CYXNlZElkZW50aXR5UHJvdmlkZXIge1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgYW4gYWJzdHJhY3Rpb24gb2YgYSBzaW1wbGUgZW1haWwgbWVzc2FnZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbCB7XG4gIGF0dGFjaG1lbnRzPzogQXJyYXk8QXR0YWNobWVudD47XG4gIGJjYz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG4gIGNjPzogQXJyYXk8RW1haWxBZGRyZXNzPjtcbiAgZnJvbT86IEVtYWlsQWRkcmVzcztcbiAgaHRtbD86IHN0cmluZztcbiAgcmVwbHlUbz86IEVtYWlsQWRkcmVzcztcbiAgc3ViamVjdD86IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbiAgdG8/OiBBcnJheTxFbWFpbEFkZHJlc3M+O1xufVxuXG4vKipcbiAqIEFuIGVtYWlsIGFkZHJlc3MuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxBZGRyZXNzIHtcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgZGlzcGxheT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbENvbmZpZ3VyYXRpb24ge1xuICBhZGRpdGlvbmFsSGVhZGVycz86IEFycmF5PEVtYWlsSGVhZGVyPjtcbiAgZGVmYXVsdEZyb21FbWFpbD86IHN0cmluZztcbiAgZGVmYXVsdEZyb21OYW1lPzogc3RyaW5nO1xuICBlbWFpbFVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGVtYWlsVmVyaWZpZWRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBmb3Jnb3RQYXNzd29yZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGhvc3Q/OiBzdHJpbmc7XG4gIGltcGxpY2l0RW1haWxWZXJpZmljYXRpb25BbGxvd2VkPzogYm9vbGVhbjtcbiAgbG9naW5JZEluVXNlT25DcmVhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPblVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luTmV3RGV2aWNlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5TdXNwaWNpb3VzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHBhc3N3b3JkbGVzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkUmVzZXRTdWNjZXNzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRVcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwb3J0PzogbnVtYmVyO1xuICBwcm9wZXJ0aWVzPzogc3RyaW5nO1xuICBzZWN1cml0eT86IEVtYWlsU2VjdXJpdHlUeXBlO1xuICBzZXRQYXNzd29yZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHR3b0ZhY3Rvck1ldGhvZEFkZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHR3b0ZhY3Rvck1ldGhvZFJlbW92ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHVudmVyaWZpZWQ/OiBFbWFpbFVudmVyaWZpZWRPcHRpb25zO1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdmVyaWZpY2F0aW9uU3RyYXRlZ3k/OiBWZXJpZmljYXRpb25TdHJhdGVneTtcbiAgdmVyaWZ5RW1haWw/OiBib29sZWFuO1xuICB2ZXJpZnlFbWFpbFdoZW5DaGFuZ2VkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxIZWFkZXIge1xuICBuYW1lPzogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWFpbFBsdXMgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbWF4aW11bVRpbWVUb1NlbmRFbWFpbEluSG91cnM/OiBudW1iZXI7XG4gIG1pbmltdW1UaW1lVG9TZW5kRW1haWxJbkhvdXJzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBFbWFpbFNlY3VyaXR5VHlwZSB7XG4gIE5PTkUgPSBcIk5PTkVcIixcbiAgU1NMID0gXCJTU0xcIixcbiAgVExTID0gXCJUTFNcIlxufVxuXG4vKipcbiAqIFN0b3JlcyBhbiBlbWFpbCB0ZW1wbGF0ZSB1c2VkIHRvIHNlbmQgZW1haWxzIHRvIHVzZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGUge1xuICBkZWZhdWx0RnJvbU5hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRIdG1sVGVtcGxhdGU/OiBzdHJpbmc7XG4gIGRlZmF1bHRTdWJqZWN0Pzogc3RyaW5nO1xuICBkZWZhdWx0VGV4dFRlbXBsYXRlPzogc3RyaW5nO1xuICBmcm9tRW1haWw/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvY2FsaXplZEZyb21OYW1lcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIGxvY2FsaXplZEh0bWxUZW1wbGF0ZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBsb2NhbGl6ZWRTdWJqZWN0cz86IExvY2FsaXplZFN0cmluZ3M7XG4gIGxvY2FsaXplZFRleHRUZW1wbGF0ZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVFcnJvcnMge1xuICBwYXJzZUVycm9ycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlbmRlckVycm9ycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogRW1haWwgdGVtcGxhdGUgcmVxdWVzdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlUmVxdWVzdCB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEVtYWlsIHRlbXBsYXRlIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVSZXNwb25zZSB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xuICBlbWFpbFRlbXBsYXRlcz86IEFycmF5PEVtYWlsVGVtcGxhdGU+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFVudmVyaWZpZWRPcHRpb25zIHtcbiAgYWxsb3dFbWFpbENoYW5nZVdoZW5HYXRlZD86IGJvb2xlYW47XG4gIGJlaGF2aW9yPzogVW52ZXJpZmllZEJlaGF2aW9yO1xufVxuXG4vKipcbiAqIFNvbWV0aGluZyB0aGF0IGNhbiBiZSBlbmFibGVkIGFuZCB0aHVzIGFsc28gZGlzYWJsZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZWFibGUge1xuICBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZW50aXR5IHRoYXQgYSB1c2VyIGNhbiBiZSBncmFudGVkIHBlcm1pc3Npb25zIHRvLiBPciBhbiBlbnRpdHkgdGhhdCBjYW4gYmUgZ3JhbnRlZCBwZXJtaXNzaW9ucyB0byBhbm90aGVyIGVudGl0eS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHkge1xuICBjbGllbnRJZD86IHN0cmluZztcbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcGFyZW50SWQ/OiBVVUlEO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHR5cGU/OiBFbnRpdHlUeXBlO1xufVxuXG4vKipcbiAqIEEgZ3JhbnQgZm9yIGFuIGVudGl0eSB0byBhIHVzZXIgb3IgYW5vdGhlciBlbnRpdHkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnQge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW50aXR5PzogRW50aXR5O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBwZXJtaXNzaW9ucz86IEFycmF5PHN0cmluZz47XG4gIHJlY2lwaWVudEVudGl0eUlkPzogVVVJRDtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBFbnRpdHkgZ3JhbnQgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50UmVxdWVzdCB7XG4gIGdyYW50PzogRW50aXR5R3JhbnQ7XG59XG5cbi8qKlxuICogRW50aXR5IGdyYW50IEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnRSZXNwb25zZSB7XG4gIGdyYW50PzogRW50aXR5R3JhbnQ7XG4gIGdyYW50cz86IEFycmF5PEVudGl0eUdyYW50Pjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIGVudGl0eSBncmFudHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnRTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGVudGl0eUlkPzogVVVJRDtcbiAgbmFtZT86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXR5IGdyYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBFbnRpdHlHcmFudFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBlbnRpdHkgZ3JhbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2Uge1xuICBncmFudHM/OiBBcnJheTxFbnRpdHlHcmFudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEpXVCBDb25maWd1cmF0aW9uIGZvciBlbnRpdGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlKV1RDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFjY2Vzc1Rva2VuS2V5SWQ/OiBVVUlEO1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEVudGl0eSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5UmVxdWVzdCB7XG4gIGVudGl0eT86IEVudGl0eTtcbn1cblxuLyoqXG4gKiBFbnRpdHkgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlSZXNwb25zZSB7XG4gIGVudGl0eT86IEVudGl0eTtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSBlbnRpdHkgcXVlcnkuIEl0IHByb3ZpZGVzIGEgYnVpbGQgcGF0dGVybiBhcyB3ZWxsIGFzIHB1YmxpYyBmaWVsZHMgZm9yIHVzZSBvbiBmb3JtcyBhbmQgaW4gYWN0aW9ucy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VFbGFzdGljU2VhcmNoQ3JpdGVyaWEge1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBlbnRpdGllc1xuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEVudGl0eVNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBlbnRpdGllc1xuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5U2VhcmNoUmVzcG9uc2Uge1xuICBlbnRpdGllcz86IEFycmF5PEVudGl0eT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBlbnRpdHkgdHlwZSB0aGF0IGhhcyBhIHNwZWNpZmljIHNldCBvZiBwZXJtaXNzaW9ucy4gVGhlc2UgYXJlIGdsb2JhbCBvYmplY3RzIGFuZCBjYW4gYmUgdXNlZCBhY3Jvc3MgdGVuYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgand0Q29uZmlndXJhdGlvbj86IEVudGl0eUpXVENvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwZXJtaXNzaW9ucz86IEFycmF5PEVudGl0eVR5cGVQZXJtaXNzaW9uPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzcGVjaWZpYyBlbnRpdHkgdHlwZSBwZXJtaXNzaW9uLiBUaGlzIHBlcm1pc3Npb24gY2FuIGJlIGdyYW50ZWQgdG8gdXNlcnMgb3Igb3RoZXIgZW50aXRpZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVBlcm1pc3Npb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNEZWZhdWx0PzogYm9vbGVhbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW50aXR5IFR5cGUgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVSZXF1ZXN0IHtcbiAgZW50aXR5VHlwZT86IEVudGl0eVR5cGU7XG4gIHBlcm1pc3Npb24/OiBFbnRpdHlUeXBlUGVybWlzc2lvbjtcbn1cblxuLyoqXG4gKiBFbnRpdHkgVHlwZSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVSZXNwb25zZSB7XG4gIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlO1xuICBlbnRpdHlUeXBlcz86IEFycmF5PEVudGl0eVR5cGU+O1xuICBwZXJtaXNzaW9uPzogRW50aXR5VHlwZVBlcm1pc3Npb247XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBlbnRpdHkgdHlwZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogRW50aXR5VHlwZVNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVTZWFyY2hSZXNwb25zZSB7XG4gIGVudGl0eVR5cGVzPzogQXJyYXk8RW50aXR5VHlwZT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVwaWNHYW1lc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFcGljIGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcGljR2FtZXNJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8RXBpY0dhbWVzQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBlcnJvci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcnJvciB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkIGVycm9yIGRvbWFpbiBvYmplY3QgdGhhdCBjYW4gYWxzbyBiZSB1c2VkIGFzIHRoZSByZXNwb25zZSBmcm9tIGFuIEFQSSBjYWxsLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9ycyB7XG4gIGZpZWxkRXJyb3JzPzogUmVjb3JkPHN0cmluZywgQXJyYXk8RXJyb3I+PjtcbiAgZ2VuZXJhbEVycm9ycz86IEFycmF5PEVycm9yPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudENvbmZpZ3VyYXRpb24ge1xuICBldmVudHM/OiBSZWNvcmQ8RXZlbnRUeXBlLCBFdmVudENvbmZpZ3VyYXRpb25EYXRhPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudENvbmZpZ3VyYXRpb25EYXRhIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHRyYW5zYWN0aW9uVHlwZT86IFRyYW5zYWN0aW9uVHlwZTtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCBhIHVzZXIgZXZlbnQgKGxvZ2luLCByZWdpc3RlciwgZXRjKSB0aGF0IGhlbHBzIGlkZW50aWZ5IHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50IChsb2NhdGlvbiwgZGV2aWNlIHR5cGUsIE9TLCBldGMpLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50SW5mbyB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXZpY2VEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZGV2aWNlTmFtZT86IHN0cmluZztcbiAgZGV2aWNlVHlwZT86IHN0cmluZztcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICBsb2NhdGlvbj86IExvY2F0aW9uO1xuICBvcz86IHN0cmluZztcbiAgdXNlckFnZW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyB1c2VkIGludGVybmFsbHkgYnkgRnVzaW9uQXV0aCB0byBoZWxwIGRldmVsb3BlcnMgZGVidWcgaG9va3MsIFdlYmhvb2tzLCBlbWFpbCB0ZW1wbGF0ZXMsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZyB7XG4gIGlkPzogbnVtYmVyO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICB0eXBlPzogRXZlbnRMb2dUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nQ29uZmlndXJhdGlvbiB7XG4gIG51bWJlclRvUmV0YWluPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV2ZW50IGV2ZW50IHRvIGFuIGV2ZW50IGxvZyB3YXMgY3JlYXRlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGV2ZW50TG9nPzogRXZlbnRMb2c7XG59XG5cbi8qKlxuICogRXZlbnQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ1Jlc3BvbnNlIHtcbiAgZXZlbnRMb2c/OiBFdmVudExvZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIHRoZSBldmVudCBsb2cuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGVuZD86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgc3RhcnQ/OiBudW1iZXI7XG4gIHR5cGU/OiBFdmVudExvZ1R5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogRXZlbnRMb2dTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBFdmVudCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dTZWFyY2hSZXNwb25zZSB7XG4gIGV2ZW50TG9ncz86IEFycmF5PEV2ZW50TG9nPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRXZlbnQgTG9nIFR5cGVcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEV2ZW50TG9nVHlwZSB7XG4gIEluZm9ybWF0aW9uID0gXCJJbmZvcm1hdGlvblwiLFxuICBEZWJ1ZyA9IFwiRGVidWdcIixcbiAgRXJyb3IgPSBcIkVycm9yXCJcbn1cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIHRoZSBldmVudCBpbmZvcm1hdGlvbi4gVGhpcyBpcyB0aGUgSlNPTiB0aGF0IGlzIHNlbnQgZnJvbSBGdXNpb25BdXRoIHRvIHdlYmhvb2tzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50UmVxdWVzdCB7XG4gIGV2ZW50PzogQmFzZUV2ZW50O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgZXZlbnQgdHlwZXMgdGhhdCBGdXNpb25BdXRoIHByb2R1Y2VzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBFdmVudFR5cGUge1xuICBKV1RQdWJsaWNLZXlVcGRhdGUgPSBcImp3dC5wdWJsaWMta2V5LnVwZGF0ZVwiLFxuICBKV1RSZWZyZXNoVG9rZW5SZXZva2UgPSBcImp3dC5yZWZyZXNoLXRva2VuLnJldm9rZVwiLFxuICBKV1RSZWZyZXNoID0gXCJqd3QucmVmcmVzaFwiLFxuICBBdWRpdExvZ0NyZWF0ZSA9IFwiYXVkaXQtbG9nLmNyZWF0ZVwiLFxuICBFdmVudExvZ0NyZWF0ZSA9IFwiZXZlbnQtbG9nLmNyZWF0ZVwiLFxuICBLaWNrc3RhcnRTdWNjZXNzID0gXCJraWNrc3RhcnQuc3VjY2Vzc1wiLFxuICBVc2VyQWN0aW9uID0gXCJ1c2VyLmFjdGlvblwiLFxuICBVc2VyQnVsa0NyZWF0ZSA9IFwidXNlci5idWxrLmNyZWF0ZVwiLFxuICBVc2VyQ3JlYXRlID0gXCJ1c2VyLmNyZWF0ZVwiLFxuICBVc2VyQ3JlYXRlQ29tcGxldGUgPSBcInVzZXIuY3JlYXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJEZWFjdGl2YXRlID0gXCJ1c2VyLmRlYWN0aXZhdGVcIixcbiAgVXNlckRlbGV0ZSA9IFwidXNlci5kZWxldGVcIixcbiAgVXNlckRlbGV0ZUNvbXBsZXRlID0gXCJ1c2VyLmRlbGV0ZS5jb21wbGV0ZVwiLFxuICBVc2VyRW1haWxVcGRhdGUgPSBcInVzZXIuZW1haWwudXBkYXRlXCIsXG4gIFVzZXJFbWFpbFZlcmlmaWVkID0gXCJ1c2VyLmVtYWlsLnZlcmlmaWVkXCIsXG4gIFVzZXJJZGVudGl0eVByb3ZpZGVyTGluayA9IFwidXNlci5pZGVudGl0eS1wcm92aWRlci5saW5rXCIsXG4gIFVzZXJJZGVudGl0eVByb3ZpZGVyVW5saW5rID0gXCJ1c2VyLmlkZW50aXR5LXByb3ZpZGVyLnVubGlua1wiLFxuICBVc2VyTG9naW5JZER1cGxpY2F0ZU9uQ3JlYXRlID0gXCJ1c2VyLmxvZ2luSWQuZHVwbGljYXRlLmNyZWF0ZVwiLFxuICBVc2VyTG9naW5JZER1cGxpY2F0ZU9uVXBkYXRlID0gXCJ1c2VyLmxvZ2luSWQuZHVwbGljYXRlLnVwZGF0ZVwiLFxuICBVc2VyTG9naW5GYWlsZWQgPSBcInVzZXIubG9naW4uZmFpbGVkXCIsXG4gIFVzZXJMb2dpbk5ld0RldmljZSA9IFwidXNlci5sb2dpbi5uZXctZGV2aWNlXCIsXG4gIFVzZXJMb2dpblN1Y2Nlc3MgPSBcInVzZXIubG9naW4uc3VjY2Vzc1wiLFxuICBVc2VyTG9naW5TdXNwaWNpb3VzID0gXCJ1c2VyLmxvZ2luLnN1c3BpY2lvdXNcIixcbiAgVXNlclBhc3N3b3JkQnJlYWNoID0gXCJ1c2VyLnBhc3N3b3JkLmJyZWFjaFwiLFxuICBVc2VyUGFzc3dvcmRSZXNldFNlbmQgPSBcInVzZXIucGFzc3dvcmQucmVzZXQuc2VuZFwiLFxuICBVc2VyUGFzc3dvcmRSZXNldFN0YXJ0ID0gXCJ1c2VyLnBhc3N3b3JkLnJlc2V0LnN0YXJ0XCIsXG4gIFVzZXJQYXNzd29yZFJlc2V0U3VjY2VzcyA9IFwidXNlci5wYXNzd29yZC5yZXNldC5zdWNjZXNzXCIsXG4gIFVzZXJQYXNzd29yZFVwZGF0ZSA9IFwidXNlci5wYXNzd29yZC51cGRhdGVcIixcbiAgVXNlclJlYWN0aXZhdGUgPSBcInVzZXIucmVhY3RpdmF0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uQ3JlYXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi5jcmVhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZUNvbXBsZXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi5jcmVhdGUuY29tcGxldGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvbkRlbGV0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uZGVsZXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25EZWxldGVDb21wbGV0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uZGVsZXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25VcGRhdGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLnVwZGF0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uVXBkYXRlQ29tcGxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLnVwZGF0ZS5jb21wbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uVmVyaWZpZWQgPSBcInVzZXIucmVnaXN0cmF0aW9uLnZlcmlmaWVkXCIsXG4gIFVzZXJUd29GYWN0b3JNZXRob2RBZGQgPSBcInVzZXIudHdvLWZhY3Rvci5tZXRob2QuYWRkXCIsXG4gIFVzZXJUd29GYWN0b3JNZXRob2RSZW1vdmUgPSBcInVzZXIudHdvLWZhY3Rvci5tZXRob2QucmVtb3ZlXCIsXG4gIFVzZXJVcGRhdGUgPSBcInVzZXIudXBkYXRlXCIsXG4gIFVzZXJVcGRhdGVDb21wbGV0ZSA9IFwidXNlci51cGRhdGUuY29tcGxldGVcIixcbiAgVGVzdCA9IFwidGVzdFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIEV4cGlyeVVuaXQge1xuICBNSU5VVEVTID0gXCJNSU5VVEVTXCIsXG4gIEhPVVJTID0gXCJIT1VSU1wiLFxuICBEQVlTID0gXCJEQVlTXCIsXG4gIFdFRUtTID0gXCJXRUVLU1wiLFxuICBNT05USFMgPSBcIk1PTlRIU1wiLFxuICBZRUFSUyA9IFwiWUVBUlNcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uIHtcbiAgYXV0aG9yaXphdGlvbkdyYW50SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBjaGFuZ2VQYXNzd29yZElkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgY2hhbmdlUGFzc3dvcmRJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIGRldmljZUNvZGVUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBkZXZpY2VVc2VyQ29kZUlkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgZW1haWxWZXJpZmljYXRpb25JZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBlbWFpbFZlcmlmaWNhdGlvbk9uZVRpbWVDb2RlR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgZXh0ZXJuYWxBdXRoZW50aWNhdGlvbklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgb25lVGltZVBhc3N3b3JkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcGFzc3dvcmRsZXNzTG9naW5HZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBwYXNzd29yZGxlc3NMb2dpblRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHBlbmRpbmdBY2NvdW50TGlua1RpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25PbmVUaW1lQ29kZUdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHNhbWx2MkF1dGhOUmVxdWVzdElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgc2V0dXBQYXNzd29yZElkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgc2V0dXBQYXNzd29yZElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHJ1c3RUb2tlblRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHR3b0ZhY3RvcklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHdvRmFjdG9yT25lVGltZUNvZGVJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHR3b0ZhY3Rvck9uZVRpbWVDb2RlSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0d29GYWN0b3JUcnVzdElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxKV1RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG59XG5cbi8qKlxuICogRXh0ZXJuYWwgSldULW9ubHkgaWRlbnRpdHkgcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZiBhbmQgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVybmFsSldUSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEV4dGVybmFsSldUQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGNsYWltTWFwPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZGVmYXVsdEtleUlkPzogVVVJRDtcbiAgZG9tYWlucz86IEFycmF5PHN0cmluZz47XG4gIGhlYWRlcktleVBhcmFtZXRlcj86IHN0cmluZztcbiAgb2F1dGgyPzogSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb247XG4gIHVuaXF1ZUlkZW50aXR5Q2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhY2Vib29rQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBhcHBJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZmllbGRzPzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmFjZWJvb2sgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhY2Vib29rSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEZhY2Vib29rQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGFwcElkPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBmaWVsZHM/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBwZXJtaXNzaW9ucz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgYmVoYXZpb3Igb2YgZmFpbGVkIGxvZ2luIGF0dGVtcHRzLiBUaGlzIGhlbHBzIHVzIHByb3RlY3QgYWdhaW5zdCBicnV0ZSBmb3JjZSBwYXNzd29yZCBhdHRhY2tzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsZWRBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBhY3Rpb25EdXJhdGlvbj86IG51bWJlcjtcbiAgYWN0aW9uRHVyYXRpb25Vbml0PzogRXhwaXJ5VW5pdDtcbiAgcmVzZXRDb3VudEluU2Vjb25kcz86IG51bWJlcjtcbiAgdG9vTWFueUF0dGVtcHRzPzogbnVtYmVyO1xuICB1c2VyQWN0aW9uSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyBhIGZhbWlseSBncm91cGluZyBvZiB1c2Vycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHkge1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtZW1iZXJzPzogQXJyYXk8RmFtaWx5TWVtYmVyPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFsbG93Q2hpbGRSZWdpc3RyYXRpb25zPzogYm9vbGVhbjtcbiAgY29uZmlybUNoaWxkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZGVsZXRlT3JwaGFuZWRBY2NvdW50cz86IGJvb2xlYW47XG4gIGRlbGV0ZU9ycGhhbmVkQWNjb3VudHNEYXlzPzogbnVtYmVyO1xuICBmYW1pbHlSZXF1ZXN0RW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbWF4aW11bUNoaWxkQWdlPzogbnVtYmVyO1xuICBtaW5pbXVtT3duZXJBZ2U/OiBudW1iZXI7XG4gIHBhcmVudEVtYWlsUmVxdWlyZWQ/OiBib29sZWFuO1xuICBwYXJlbnRSZWdpc3RyYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IGZvciBzZW5kaW5nIG91dCBmYW1pbHkgcmVxdWVzdHMgdG8gcGFyZW50J3MuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5RW1haWxSZXF1ZXN0IHtcbiAgcGFyZW50RW1haWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgc2luZ2xlIGZhbWlseSBtZW1iZXIuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5TWVtYmVyIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBvd25lcj86IGJvb2xlYW47XG4gIHJvbGU/OiBGYW1pbHlSb2xlO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IGZvciBtYW5hZ2luZyBmYW1pbGllcyBhbmQgbWVtYmVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlSZXF1ZXN0IHtcbiAgZmFtaWx5TWVtYmVyPzogRmFtaWx5TWVtYmVyO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgbWFuYWdpbmcgZmFtaWxpZXMgYW5kIG1lbWJlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5UmVzcG9uc2Uge1xuICBmYW1pbGllcz86IEFycmF5PEZhbWlseT47XG4gIGZhbWlseT86IEZhbWlseTtcbn1cblxuZXhwb3J0IGVudW0gRmFtaWx5Um9sZSB7XG4gIENoaWxkID0gXCJDaGlsZFwiLFxuICBUZWVuID0gXCJUZWVuXCIsXG4gIEFkdWx0ID0gXCJBZHVsdFwiXG59XG5cbi8qKlxuICogRm9yZ290IHBhc3N3b3JkIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmdvdFBhc3N3b3JkUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHNlbmRGb3Jnb3RQYXNzd29yZEVtYWlsPzogYm9vbGVhbjtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB1c2VybmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3Jnb3QgcGFzc3dvcmQgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3Jnb3RQYXNzd29yZFJlc3BvbnNlIHtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGVwcz86IEFycmF5PEZvcm1TdGVwPjtcbiAgdHlwZT86IEZvcm1UeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybUNvbnRyb2wge1xuICBjaGVja2JveCA9IFwiY2hlY2tib3hcIixcbiAgbnVtYmVyID0gXCJudW1iZXJcIixcbiAgcGFzc3dvcmQgPSBcInBhc3N3b3JkXCIsXG4gIHJhZGlvID0gXCJyYWRpb1wiLFxuICBzZWxlY3QgPSBcInNlbGVjdFwiLFxuICB0ZXh0YXJlYSA9IFwidGV4dGFyZWFcIixcbiAgdGV4dCA9IFwidGV4dFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBGb3JtRGF0YVR5cGUge1xuICBib29sID0gXCJib29sXCIsXG4gIGNvbnNlbnQgPSBcImNvbnNlbnRcIixcbiAgZGF0ZSA9IFwiZGF0ZVwiLFxuICBlbWFpbCA9IFwiZW1haWxcIixcbiAgbnVtYmVyID0gXCJudW1iZXJcIixcbiAgc3RyaW5nID0gXCJzdHJpbmdcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGQge1xuICBjb25maXJtPzogYm9vbGVhbjtcbiAgY29uc2VudElkPzogVVVJRDtcbiAgY29udHJvbD86IEZvcm1Db250cm9sO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAga2V5Pzogc3RyaW5nO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9ucz86IEFycmF5PHN0cmluZz47XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgdHlwZT86IEZvcm1EYXRhVHlwZTtcbiAgdmFsaWRhdG9yPzogRm9ybUZpZWxkVmFsaWRhdG9yO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybUZpZWxkQWRtaW5Qb2xpY3kge1xuICBFZGl0ID0gXCJFZGl0XCIsXG4gIFZpZXcgPSBcIlZpZXdcIlxufVxuXG4vKipcbiAqIFRoZSBGb3JtRmllbGQgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkUmVxdWVzdCB7XG4gIGZpZWxkPzogRm9ybUZpZWxkO1xuICBmaWVsZHM/OiBBcnJheTxGb3JtRmllbGQ+O1xufVxuXG4vKipcbiAqIEZvcm0gZmllbGQgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGRSZXNwb25zZSB7XG4gIGZpZWxkPzogRm9ybUZpZWxkO1xuICBmaWVsZHM/OiBBcnJheTxGb3JtRmllbGQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGRWYWxpZGF0b3IgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZXhwcmVzc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3JtIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtUmVxdWVzdCB7XG4gIGZvcm0/OiBGb3JtO1xufVxuXG4vKipcbiAqIEZvcm0gcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1SZXNwb25zZSB7XG4gIGZvcm0/OiBGb3JtO1xuICBmb3Jtcz86IEFycmF5PEZvcm0+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtU3RlcCB7XG4gIGZpZWxkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybVR5cGUge1xuICByZWdpc3RyYXRpb24gPSBcInJlZ2lzdHJhdGlvblwiLFxuICBhZG1pblJlZ2lzdHJhdGlvbiA9IFwiYWRtaW5SZWdpc3RyYXRpb25cIixcbiAgYWRtaW5Vc2VyID0gXCJhZG1pblVzZXJcIixcbiAgc2VsZlNlcnZpY2VVc2VyID0gXCJzZWxmU2VydmljZVVzZXJcIlxufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgRnVzaW9uQXV0aCBjb25uZWN0b3IuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdXNpb25BdXRoQ29ubmVjdG9yQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBnZW5lcmljIGNvbm5lY3Rvci5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyaWNDb25uZWN0b3JDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdGlvblVSTD86IHN0cmluZztcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGhlYWRlcnM/OiBIVFRQSGVhZGVycztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGh0dHBBdXRoZW50aWNhdGlvblVzZXJuYW1lPzogc3RyaW5nO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgc3NsQ2VydGlmaWNhdGVLZXlJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uIHtcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGhlYWRlcnM/OiBIVFRQSGVhZGVycztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGh0dHBBdXRoZW50aWNhdGlvblVzZXJuYW1lPzogc3RyaW5nO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgc3NsQ2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR29vZ2xlQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHb29nbGUgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb29nbGVJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8R29vZ2xlQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgbG9naW5NZXRob2Q/OiBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Q7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF1dGhvcml6YXRpb24gR3JhbnQgdHlwZXMgYXMgZGVmaW5lZCBieSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5XCI+VGhlIE9BdXRoIDIuMCBBdXRob3JpemF0aW9uXG4gKiBGcmFtZXdvcmsgLSBSRkMgNjc0OTwvYT4uXG4gKiA8cD5cbiAqIFNwZWNpZmljIG5hbWVzIGFzIGRlZmluZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTkxI3NlY3Rpb24tNC4xXCI+XG4gKiBPQXV0aCAyLjAgRHluYW1pYyBDbGllbnQgUmVnaXN0cmF0aW9uIFByb3RvY29sIC0gUkZDIDc1OTEgU2VjdGlvbiA0LjE8L2E+XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBHcmFudFR5cGUge1xuICBhdXRob3JpemF0aW9uX2NvZGUgPSBcImF1dGhvcml6YXRpb25fY29kZVwiLFxuICBpbXBsaWNpdCA9IFwiaW1wbGljaXRcIixcbiAgcGFzc3dvcmQgPSBcInBhc3N3b3JkXCIsXG4gIGNsaWVudF9jcmVkZW50aWFscyA9IFwiY2xpZW50X2NyZWRlbnRpYWxzXCIsXG4gIHJlZnJlc2hfdG9rZW4gPSBcInJlZnJlc2hfdG9rZW5cIixcbiAgdW5rbm93biA9IFwidW5rbm93blwiLFxuICBkZXZpY2VfY29kZSA9IFwidXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6ZGV2aWNlX2NvZGVcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgVHlsZXIgU2NvdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICByb2xlcz86IFJlY29yZDxVVUlELCBBcnJheTxBcHBsaWNhdGlvblJvbGU+PjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEEgVXNlcidzIG1lbWJlcnNoaXAgaW50byBhIEdyb3VwXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGdyb3VwSWQ/OiBVVUlEO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIHVzZXI/OiBVc2VyO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgR3JvdXAgTWVtYmVyc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZ3JvdXBJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIEdyb3VwIE1lbWJlcnMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEdyb3VwTWVtYmVyU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3BvbnNlIGZvciBHcm91cCBNZW1iZXJzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoUmVzcG9uc2Uge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHcm91cCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwUmVxdWVzdCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIHJvbGVJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBHcm91cCBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFJlc3BvbnNlIHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgZ3JvdXBzPzogQXJyYXk8R3JvdXA+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlJdGVtIHtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBjcmVhdGVJbnN0YW50PzogbnVtYmVyO1xuICBleHBpcnk/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVHlwZSBmb3Igd2ViaG9vayBoZWFkZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhUVFBIZWFkZXJzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBIVFRQTWV0aG9kIHtcbiAgR0VUID0gXCJHRVRcIixcbiAgUE9TVCA9IFwiUE9TVFwiLFxuICBQVVQgPSBcIlBVVFwiLFxuICBERUxFVEUgPSBcIkRFTEVURVwiLFxuICBIRUFEID0gXCJIRUFEXCIsXG4gIE9QVElPTlMgPSBcIk9QVElPTlNcIixcbiAgUEFUQ0ggPSBcIlBBVENIXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSFlQUkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgcmVseWluZ1BhcnR5QXBwbGljYXRpb25JZD86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5VVJMPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIWVBSSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEhZUFJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgcmVseWluZ1BhcnR5QXBwbGljYXRpb25JZD86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5VVJMPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJEZXRhaWxzIHtcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgaWQ/OiBVVUlEO1xuICBpZHBFbmRwb2ludD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgb2F1dGgyPzogSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb247XG4gIHR5cGU/OiBJZGVudGl0eVByb3ZpZGVyVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxpbWl0VXNlckxpbmtpbmdQb2xpY3kgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbWF4aW11bUxpbmtzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGluayB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgaWRlbnRpdHlQcm92aWRlclVzZXJJZD86IHN0cmluZztcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdExvZ2luSW5zdGFudD86IG51bWJlcjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBUaGUgSWRQIGJlaGF2aW9yIHdoZW4gbm8gdXNlciBsaW5rIGhhcyBiZWVuIG1hZGUgeWV0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gSWRlbnRpdHlQcm92aWRlckxpbmtpbmdTdHJhdGVneSB7XG4gIENyZWF0ZVBlbmRpbmdMaW5rID0gXCJDcmVhdGVQZW5kaW5nTGlua1wiLFxuICBMaW5rQW5vbnltb3VzbHkgPSBcIkxpbmtBbm9ueW1vdXNseVwiLFxuICBMaW5rQnlFbWFpbCA9IFwiTGlua0J5RW1haWxcIixcbiAgTGlua0J5RW1haWxGb3JFeGlzdGluZ1VzZXIgPSBcIkxpbmtCeUVtYWlsRm9yRXhpc3RpbmdVc2VyXCIsXG4gIExpbmtCeVVzZXJuYW1lID0gXCJMaW5rQnlVc2VybmFtZVwiLFxuICBMaW5rQnlVc2VybmFtZUZvckV4aXN0aW5nVXNlciA9IFwiTGlua0J5VXNlcm5hbWVGb3JFeGlzdGluZ1VzZXJcIixcbiAgVW5zdXBwb3J0ZWQgPSBcIlVuc3VwcG9ydGVkXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxpbmtSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVyVXNlcklkPzogc3RyaW5nO1xuICBwZW5kaW5nSWRQTGlua0lkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlckxpbms/OiBJZGVudGl0eVByb3ZpZGVyTGluaztcbiAgaWRlbnRpdHlQcm92aWRlckxpbmtzPzogQXJyYXk8SWRlbnRpdHlQcm92aWRlckxpbms+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Qge1xuICBVc2VQb3B1cCA9IFwiVXNlUG9wdXBcIixcbiAgVXNlUmVkaXJlY3QgPSBcIlVzZVJlZGlyZWN0XCJcbn1cblxuLyoqXG4gKiBMb2dpbiBBUEkgcmVxdWVzdCBvYmplY3QgdXNlZCBmb3IgbG9naW4gdG8gdGhpcmQtcGFydHkgc3lzdGVtcyAoaS5lLiBMb2dpbiB3aXRoIEZhY2Vib29rKS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBlbmNvZGVkSldUPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBub0xpbms/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhvcml6YXRpb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgY2xpZW50QXV0aGVudGljYXRpb25NZXRob2Q/OiBDbGllbnRBdXRoZW50aWNhdGlvbk1ldGhvZDtcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdG9rZW5fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJpbmZvX2VuZHBvaW50Pzogc3RyaW5nO1xuICB1c2VybmFtZUNsYWltPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCB7XG4gIGlkZW50aXR5UHJvdmlkZXI/OiBCYXNlSWRlbnRpdHlQcm92aWRlcjxhbnk+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVyPzogQmFzZUlkZW50aXR5UHJvdmlkZXI8YW55PjtcbiAgaWRlbnRpdHlQcm92aWRlcnM/OiBBcnJheTxCYXNlSWRlbnRpdHlQcm92aWRlcjxhbnk+Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyVGVuYW50Q29uZmlndXJhdGlvbiB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBsaW1pdFVzZXJMaW5rQ291bnQ/OiBJZGVudGl0eVByb3ZpZGVyTGltaXRVc2VyTGlua2luZ1BvbGljeTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJUeXBlIHtcbiAgQXBwbGUgPSBcIkFwcGxlXCIsXG4gIEVwaWNHYW1lcyA9IFwiRXBpY0dhbWVzXCIsXG4gIEV4dGVybmFsSldUID0gXCJFeHRlcm5hbEpXVFwiLFxuICBGYWNlYm9vayA9IFwiRmFjZWJvb2tcIixcbiAgR29vZ2xlID0gXCJHb29nbGVcIixcbiAgSFlQUiA9IFwiSFlQUlwiLFxuICBMaW5rZWRJbiA9IFwiTGlua2VkSW5cIixcbiAgTmludGVuZG8gPSBcIk5pbnRlbmRvXCIsXG4gIE9wZW5JRENvbm5lY3QgPSBcIk9wZW5JRENvbm5lY3RcIixcbiAgU0FNTHYyID0gXCJTQU1MdjJcIixcbiAgU0FNTHYySWRQSW5pdGlhdGVkID0gXCJTQU1MdjJJZFBJbml0aWF0ZWRcIixcbiAgU29ueVBTTiA9IFwiU29ueVBTTlwiLFxuICBTdGVhbSA9IFwiU3RlYW1cIixcbiAgVHdpdGNoID0gXCJUd2l0Y2hcIixcbiAgVHdpdHRlciA9IFwiVHdpdHRlclwiLFxuICBYYm94ID0gXCJYYm94XCJcbn1cblxuLyoqXG4gKiBJbXBvcnQgcmVxdWVzdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGVuY3J5cHRpb25TY2hlbWU/OiBzdHJpbmc7XG4gIGZhY3Rvcj86IG51bWJlcjtcbiAgdXNlcnM/OiBBcnJheTxVc2VyPjtcbiAgdmFsaWRhdGVEYkNvbnN0cmFpbnRzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgaW5kaWNhdGluZyB0aGlzIGV2ZW50IGlzIG5vdCBzY29wZWQgdG8gYSB0ZW5hbnQgYW5kIHdpbGwgYmUgc2VudCB0byBhbGwgd2ViaG9va3MuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlRXZlbnQgZXh0ZW5kcyBOb25UcmFuc2FjdGlvbmFsRXZlbnQge1xufVxuXG4vKipcbiAqIFRoZSBJbnRlZ3JhdGlvbiBSZXF1ZXN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uUmVxdWVzdCB7XG4gIGludGVncmF0aW9ucz86IEludGVncmF0aW9ucztcbn1cblxuLyoqXG4gKiBUaGUgSW50ZWdyYXRpb24gUmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25SZXNwb25zZSB7XG4gIGludGVncmF0aW9ucz86IEludGVncmF0aW9ucztcbn1cblxuLyoqXG4gKiBBdmFpbGFibGUgSW50ZWdyYXRpb25zXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9ucyB7XG4gIGNsZWFuc3BlYWs/OiBDbGVhblNwZWFrQ29uZmlndXJhdGlvbjtcbiAga2Fma2E/OiBLYWZrYUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludHJvc3BlY3RSZXNwb25zZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sRW50cnkge1xuICBhY3Rpb24/OiBJUEFjY2Vzc0NvbnRyb2xFbnRyeUFjdGlvbjtcbiAgZW5kSVBBZGRyZXNzPzogc3RyaW5nO1xuICBzdGFydElQQWRkcmVzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBJUEFjY2Vzc0NvbnRyb2xFbnRyeUFjdGlvbiB7XG4gIEFsbG93ID0gXCJBbGxvd1wiLFxuICBCbG9jayA9IFwiQmxvY2tcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbnRyaWVzPzogQXJyYXk8SVBBY2Nlc3NDb250cm9sRW50cnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3Qge1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0PzogSVBBY2Nlc3NDb250cm9sTGlzdDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSB7XG4gIGlwQWNjZXNzQ29udHJvbExpc3Q/OiBJUEFjY2Vzc0NvbnRyb2xMaXN0O1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0cz86IEFycmF5PElQQWNjZXNzQ29udHJvbExpc3Q+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgSVAgQUNMcyAuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXNwb25zZSB7XG4gIGlwQWNjZXNzQ29udHJvbExpc3RzPzogQXJyYXk8SVBBY2Nlc3NDb250cm9sTGlzdD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc3N1ZVJlc3BvbnNlIHtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIEpTT04gV2ViIEtleSBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxNyNzZWN0aW9uLTRcIj5SRkMgNzUxNyBKU09OIFdlYiBLZXkgKEpXSylcbiAqIFNlY3Rpb24gNDwvYT4gYW5kIDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxOFwiPlJGQyA3NTE4IEpTT04gV2ViIEFsZ29yaXRobXMgKEpXQSk8L2E+LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKU09OV2ViS2V5IHtcbiAgYWxnPzogQWxnb3JpdGhtO1xuICBjcnY/OiBzdHJpbmc7XG4gIGQ/OiBzdHJpbmc7XG4gIGRwPzogc3RyaW5nO1xuICBkcT86IHN0cmluZztcbiAgZT86IHN0cmluZztcbiAga2lkPzogc3RyaW5nO1xuICBrdHk/OiBLZXlUeXBlO1xuICBuPzogc3RyaW5nO1xuICBbb3RoZXI6IHN0cmluZ106IGFueTsgLy8gQW55IG90aGVyIGZpZWxkc1xuICBwPzogc3RyaW5nO1xuICBxPzogc3RyaW5nO1xuICBxaT86IHN0cmluZztcbiAgdXNlPzogc3RyaW5nO1xuICB4Pzogc3RyaW5nO1xuICB4NWM/OiBBcnJheTxzdHJpbmc+O1xuICB4NXQ/OiBzdHJpbmc7XG4gIHg1dF9TMjU2Pzogc3RyaW5nO1xuICB5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgYW55IG9iamVjdCB0aGF0IGNhbiBwcm92aWRlIEpTT04gV2ViIGtleSBJbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKU09OV2ViS2V5SW5mb1Byb3ZpZGVyIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldLU1Jlc3BvbnNlIHtcbiAga2V5cz86IEFycmF5PEpTT05XZWJLZXk+O1xufVxuXG4vKipcbiAqIEpTT04gV2ViIFRva2VuIChKV1QpIGFzIGRlZmluZWQgYnkgUkZDIDc1MTkuXG4gKiA8cHJlPlxuICogRnJvbSBSRkMgNzUxOSBTZWN0aW9uIDEuIEludHJvZHVjdGlvbjpcbiAqICAgIFRoZSBzdWdnZXN0ZWQgcHJvbnVuY2lhdGlvbiBvZiBKV1QgaXMgdGhlIHNhbWUgYXMgdGhlIEVuZ2xpc2ggd29yZCBcImpvdFwiLlxuICogPC9wcmU+XG4gKiBUaGUgSldUIGlzIG5vdCBUaHJlYWQtU2FmZSBhbmQgc2hvdWxkIG5vdCBiZSByZS11c2VkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1Qge1xuICBhdWQ/OiBhbnk7XG4gIGV4cD86IG51bWJlcjtcbiAgaWF0PzogbnVtYmVyO1xuICBpc3M/OiBzdHJpbmc7XG4gIGp0aT86IHN0cmluZztcbiAgbmJmPzogbnVtYmVyO1xuICBbb3RoZXJDbGFpbXM6IHN0cmluZ106IGFueTsgLy8gQW55IG90aGVyIGZpZWxkc1xuICBzdWI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSldUIENvbmZpZ3VyYXRpb24uIEEgSldUIENvbmZpZ3VyYXRpb24gZm9yIGFuIEFwcGxpY2F0aW9uIG1heSBub3QgYmUgYWN0aXZlIGlmIGl0IGlzIHVzaW5nIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiwgdGhlIGNvbmZpZ3VyYXRpb25cbiAqIG1heSBiZSA8Y29kZT5lbmFibGVkID0gZmFsc2U8L2NvZGU+LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFjY2Vzc1Rva2VuS2V5SWQ/OiBVVUlEO1xuICBpZFRva2VuS2V5SWQ/OiBVVUlEO1xuICByZWZyZXNoVG9rZW5FeHBpcmF0aW9uUG9saWN5PzogUmVmcmVzaFRva2VuRXhwaXJhdGlvblBvbGljeTtcbiAgcmVmcmVzaFRva2VuUmV2b2NhdGlvblBvbGljeT86IFJlZnJlc2hUb2tlblJldm9jYXRpb25Qb2xpY3k7XG4gIHJlZnJlc2hUb2tlblRpbWVUb0xpdmVJbk1pbnV0ZXM/OiBudW1iZXI7XG4gIHJlZnJlc2hUb2tlblVzYWdlUG9saWN5PzogUmVmcmVzaFRva2VuVXNhZ2VQb2xpY3k7XG4gIHRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBKV1QgcHVibGljIGtleSBSZWZyZXNoIFRva2VuIFJldm9rZSBFdmVudCAoYW5kIGNhbiBiZSBjb252ZXJ0ZWQgdG8gSlNPTikuIFRoaXMgZXZlbnQgbWlnaHQgYmUgZm9yIGEgc2luZ2xlXG4gKiB0b2tlbiwgYSB1c2VyIG9yIGFuIGVudGlyZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RQdWJsaWNLZXlVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBKV1QgUmVmcmVzaCBFdmVudC4gVGhpcyBldmVudCB3aWxsIGJlIGZpcmVkIHdoZW4gYSBKV1QgaXMgXCJyZWZyZXNoZWRcIiAoZ2VuZXJhdGVkKSB1c2luZyBhIFJlZnJlc2ggVG9rZW4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFJlZnJlc2hFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHJlZnJlc2hpbmcgYSBKV1Qgd2l0aCBhIFJlZnJlc2ggVG9rZW4uXG4gKiA8cD5cbiAqIFVzaW5nIGEgZGlmZmVyZW50IHJlc3BvbnNlIG9iamVjdCBmcm9tIFJlZnJlc2hUb2tlblJlc3BvbnNlIGJlY2F1c2UgdGhlIHJldHJpZXZlIHJlc3BvbnNlIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBmb3IgcmVmcmVzaFRva2VuLCBhbmQgdGhpcyBpcyBhIHN0cmluZy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUUmVmcmVzaFJlc3BvbnNlIHtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFJlZnJlc2ggVG9rZW4gUmV2b2tlIEV2ZW50IChhbmQgY2FuIGJlIGNvbnZlcnRlZCB0byBKU09OKS4gVGhpcyBldmVudCBtaWdodCBiZSBmb3IgYSBzaW5nbGUgdG9rZW4sIGEgdXNlclxuICogb3IgYW4gZW50aXJlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFJlZnJlc2hUb2tlblJldm9rZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uVGltZVRvTGl2ZUluU2Vjb25kcz86IFJlY29yZDxVVUlELCBudW1iZXI+O1xuICB1c2VyPzogVXNlcjtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUVmVuZFJlcXVlc3Qge1xuICBjbGFpbXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBrZXlJZD86IFVVSUQ7XG4gIHRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFZlbmRSZXNwb25zZSB7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZGVmYXVsdFRvcGljPzogc3RyaW5nO1xuICBwcm9kdWNlcj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYU1lc3NlbmdlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiB7XG4gIGRlZmF1bHRUb3BpYz86IHN0cmluZztcbiAgcHJvZHVjZXI/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIERvbWFpbiBmb3IgYSBwdWJsaWMga2V5LCBrZXkgcGFpciBvciBhbiBITUFDIHNlY3JldC4gVGhpcyBpcyB1c2VkIGJ5IEtleU1hc3RlciB0byBtYW5hZ2Uga2V5cyBmb3IgSldUcywgU0FNTCwgZXRjLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleSB7XG4gIGFsZ29yaXRobT86IEtleUFsZ29yaXRobTtcbiAgY2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIGNlcnRpZmljYXRlSW5mb3JtYXRpb24/OiBDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uO1xuICBleHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgaGFzUHJpdmF0ZUtleT86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBraWQ/OiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHByaXZhdGVLZXk/OiBzdHJpbmc7XG4gIHB1YmxpY0tleT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICB0eXBlPzogS2V5VHlwZTtcbn1cblxuZXhwb3J0IGVudW0gS2V5QWxnb3JpdGhtIHtcbiAgRVMyNTYgPSBcIkVTMjU2XCIsXG4gIEVTMzg0ID0gXCJFUzM4NFwiLFxuICBFUzUxMiA9IFwiRVM1MTJcIixcbiAgSFMyNTYgPSBcIkhTMjU2XCIsXG4gIEhTMzg0ID0gXCJIUzM4NFwiLFxuICBIUzUxMiA9IFwiSFM1MTJcIixcbiAgUlMyNTYgPSBcIlJTMjU2XCIsXG4gIFJTMzg0ID0gXCJSUzM4NFwiLFxuICBSUzUxMiA9IFwiUlM1MTJcIlxufVxuXG4vKipcbiAqIEtleSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVJlcXVlc3Qge1xuICBrZXk/OiBLZXk7XG59XG5cbi8qKlxuICogS2V5IEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVJlc3BvbnNlIHtcbiAga2V5PzogS2V5O1xuICBrZXlzPzogQXJyYXk8S2V5Pjtcbn1cblxuZXhwb3J0IGVudW0gS2V5VHlwZSB7XG4gIEVDID0gXCJFQ1wiLFxuICBSU0EgPSBcIlJTQVwiLFxuICBITUFDID0gXCJITUFDXCJcbn1cblxuLyoqXG4gKiBUaGUgdXNlIHR5cGUgb2YgYSBrZXkuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBLZXlVc2Uge1xuICBTaWduT25seSA9IFwiU2lnbk9ubHlcIixcbiAgU2lnbkFuZFZlcmlmeSA9IFwiU2lnbkFuZFZlcmlmeVwiLFxuICBWZXJpZnlPbmx5ID0gXCJWZXJpZnlPbmx5XCJcbn1cblxuLyoqXG4gKiBFdmVudCBldmVudCB0byBpbmRpY2F0ZSBraWNrc3RhcnQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2lja3N0YXJ0U3VjY2Vzc0V2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgaW5zdGFuY2VJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQSBKYXZhU2NyaXB0IGxhbWJkYSBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGR1cmluZyBjZXJ0YWluIGV2ZW50cyBpbnNpZGUgRnVzaW9uQXV0aC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGEge1xuICBib2R5Pzogc3RyaW5nO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGVuZ2luZVR5cGU/OiBMYW1iZGFFbmdpbmVUeXBlO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogTGFtYmRhVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFDb25maWd1cmF0aW9uIHtcbiAgYWNjZXNzVG9rZW5Qb3B1bGF0ZUlkPzogVVVJRDtcbiAgaWRUb2tlblBvcHVsYXRlSWQ/OiBVVUlEO1xuICBzYW1sdjJQb3B1bGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFDb25maWd1cmF0aW9uIHtcbiAgcmVjb25jaWxlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICByZWNvbmNpbGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBMYW1iZGFFbmdpbmVUeXBlIHtcbiAgR3JhYWxKUyA9IFwiR3JhYWxKU1wiLFxuICBOYXNob3JuID0gXCJOYXNob3JuXCJcbn1cblxuLyoqXG4gKiBMYW1iZGEgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVJlcXVlc3Qge1xuICBsYW1iZGE/OiBMYW1iZGE7XG59XG5cbi8qKlxuICogTGFtYmRhIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhUmVzcG9uc2Uge1xuICBsYW1iZGE/OiBMYW1iZGE7XG4gIGxhbWJkYXM/OiBBcnJheTxMYW1iZGE+O1xufVxuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsYW1iZGFzIHRoYXQgaW5kaWNhdGUgaG93IHRoZXkgYXJlIGludm9rZWQgYnkgRnVzaW9uQXV0aC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gTGFtYmRhVHlwZSB7XG4gIEpXVFBvcHVsYXRlID0gXCJKV1RQb3B1bGF0ZVwiLFxuICBPcGVuSURSZWNvbmNpbGUgPSBcIk9wZW5JRFJlY29uY2lsZVwiLFxuICBTQU1MdjJSZWNvbmNpbGUgPSBcIlNBTUx2MlJlY29uY2lsZVwiLFxuICBTQU1MdjJQb3B1bGF0ZSA9IFwiU0FNTHYyUG9wdWxhdGVcIixcbiAgQXBwbGVSZWNvbmNpbGUgPSBcIkFwcGxlUmVjb25jaWxlXCIsXG4gIEV4dGVybmFsSldUUmVjb25jaWxlID0gXCJFeHRlcm5hbEpXVFJlY29uY2lsZVwiLFxuICBGYWNlYm9va1JlY29uY2lsZSA9IFwiRmFjZWJvb2tSZWNvbmNpbGVcIixcbiAgR29vZ2xlUmVjb25jaWxlID0gXCJHb29nbGVSZWNvbmNpbGVcIixcbiAgSFlQUlJlY29uY2lsZSA9IFwiSFlQUlJlY29uY2lsZVwiLFxuICBUd2l0dGVyUmVjb25jaWxlID0gXCJUd2l0dGVyUmVjb25jaWxlXCIsXG4gIExEQVBDb25uZWN0b3JSZWNvbmNpbGUgPSBcIkxEQVBDb25uZWN0b3JSZWNvbmNpbGVcIixcbiAgTGlua2VkSW5SZWNvbmNpbGUgPSBcIkxpbmtlZEluUmVjb25jaWxlXCIsXG4gIEVwaWNHYW1lc1JlY29uY2lsZSA9IFwiRXBpY0dhbWVzUmVjb25jaWxlXCIsXG4gIE5pbnRlbmRvUmVjb25jaWxlID0gXCJOaW50ZW5kb1JlY29uY2lsZVwiLFxuICBTb255UFNOUmVjb25jaWxlID0gXCJTb255UFNOUmVjb25jaWxlXCIsXG4gIFN0ZWFtUmVjb25jaWxlID0gXCJTdGVhbVJlY29uY2lsZVwiLFxuICBUd2l0Y2hSZWNvbmNpbGUgPSBcIlR3aXRjaFJlY29uY2lsZVwiLFxuICBYYm94UmVjb25jaWxlID0gXCJYYm94UmVjb25jaWxlXCIsXG4gIENsaWVudENyZWRlbnRpYWxzSldUUG9wdWxhdGUgPSBcIkNsaWVudENyZWRlbnRpYWxzSldUUG9wdWxhdGVcIixcbiAgU0NJTVNlcnZlckdyb3VwUmVxdWVzdENvbnZlcnRlciA9IFwiU0NJTVNlcnZlckdyb3VwUmVxdWVzdENvbnZlcnRlclwiLFxuICBTQ0lNU2VydmVyR3JvdXBSZXNwb25zZUNvbnZlcnRlciA9IFwiU0NJTVNlcnZlckdyb3VwUmVzcG9uc2VDb252ZXJ0ZXJcIixcbiAgU0NJTVNlcnZlclVzZXJSZXF1ZXN0Q29udmVydGVyID0gXCJTQ0lNU2VydmVyVXNlclJlcXVlc3RDb252ZXJ0ZXJcIixcbiAgU0NJTVNlcnZlclVzZXJSZXNwb25zZUNvbnZlcnRlciA9IFwiU0NJTVNlcnZlclVzZXJSZXNwb25zZUNvbnZlcnRlclwiXG59XG5cbi8qKlxuICogTW9kZWxzIGFuIExEQVAgY29ubmVjdG9yLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTERBUENvbm5lY3RvckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhlbnRpY2F0aW9uVVJMPzogc3RyaW5nO1xuICBiYXNlU3RydWN0dXJlPzogc3RyaW5nO1xuICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgaWRlbnRpZnlpbmdBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIGxhbWJkYUNvbmZpZ3VyYXRpb24/OiBMYW1iZGFDb25maWd1cmF0aW9uO1xuICBsb2dpbklkQXR0cmlidXRlPzogc3RyaW5nO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgcmVxdWVzdGVkQXR0cmlidXRlcz86IEFycmF5PHN0cmluZz47XG4gIHNlY3VyaXR5TWV0aG9kPzogTERBUFNlY3VyaXR5TWV0aG9kO1xuICBzeXN0ZW1BY2NvdW50RE4/OiBzdHJpbmc7XG4gIHN5c3RlbUFjY291bnRQYXNzd29yZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gTERBUFNlY3VyaXR5TWV0aG9kIHtcbiAgTm9uZSA9IFwiTm9uZVwiLFxuICBMREFQUyA9IFwiTERBUFNcIixcbiAgU3RhcnRUTFMgPSBcIlN0YXJ0VExTXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkSW5BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZEluSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPExpbmtlZEluQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgc2V0IG9mIGxvY2FsaXplZCBJbnRlZ2VycyB0aGF0IGNhbiBiZSBzdG9yZWQgYXMgSlNPTi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxpemVkSW50ZWdlcnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzZXQgb2YgbG9jYWxpemVkIFN0cmluZ3MgdGhhdCBjYW4gYmUgc3RvcmVkIGFzIEpTT04uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxpemVkU3RyaW5ncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xufVxuXG4vKipcbiAqIExvY2F0aW9uIGluZm9ybWF0aW9uLiBVc2VmdWwgZm9yIElQIGFkZHJlc3NlcyBhbmQgb3RoZXIgZGlzcGxheWFibGUgZGF0YSBvYmplY3RzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uIHtcbiAgY2l0eT86IHN0cmluZztcbiAgY291bnRyeT86IHN0cmluZztcbiAgZGlzcGxheVN0cmluZz86IHN0cmluZztcbiAgbGF0aXR1ZGU/OiBudW1iZXI7XG4gIGxvbmdpdHVkZT86IG51bWJlcjtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICB6aXBjb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgaGlzdG9yaWNhbCBzdGF0ZSBvZiBhIHVzZXIgbG9nIGV2ZW50LiBTaW5jZSBldmVudHMgY2FuIGJlIG1vZGlmaWVkLCB0aGlzIHN0b3JlcyB0aGUgaGlzdG9yaWNhbCBzdGF0ZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dIaXN0b3J5IHtcbiAgaGlzdG9yeUl0ZW1zPzogQXJyYXk8SGlzdG9yeUl0ZW0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luQ29uZmlndXJhdGlvbiB7XG4gIGFsbG93VG9rZW5SZWZyZXNoPzogYm9vbGVhbjtcbiAgZ2VuZXJhdGVSZWZyZXNoVG9rZW5zPzogYm9vbGVhbjtcbiAgcmVxdWlyZUF1dGhlbnRpY2F0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gTG9naW5JZFR5cGUge1xuICBlbWFpbCA9IFwiZW1haWxcIixcbiAgdXNlcm5hbWUgPSBcInVzZXJuYW1lXCJcbn1cblxuLyoqXG4gKiBUaGUgc3VtbWFyeSBvZiB0aGUgYWN0aW9uIHRoYXQgaXMgcHJldmVudGluZyBsb2dpbiB0byBiZSByZXR1cm5lZCBvbiB0aGUgbG9naW4gcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUHJldmVudGVkUmVzcG9uc2Uge1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbklkPzogVVVJRDtcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBsb2NhbGl6ZWROYW1lPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRPcHRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZFJlYXNvbj86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9uPzogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHJlYXNvbkNvZGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRDb25maWd1cmF0aW9uIHtcbiAgZGVsZXRlPzogRGVsZXRlQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRFeHBvcnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV4cG9ydFJlcXVlc3Qge1xuICBjcml0ZXJpYT86IExvZ2luUmVjb3JkU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVjb3JkU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgZW5kPzogbnVtYmVyO1xuICBzdGFydD86IG51bWJlcjtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRTZWFyY2hSZXF1ZXN0IHtcbiAgcmV0cmlldmVUb3RhbD86IGJvb2xlYW47XG4gIHNlYXJjaD86IExvZ2luUmVjb3JkU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQSByYXcgbG9naW4gcmVjb3JkIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2Uge1xuICBsb2dpbnM/OiBBcnJheTxEaXNwbGF5YWJsZVJhd0xvZ2luPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBsb2dpbiByZXBvcnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZXBvcnRSZXNwb25zZSB7XG4gIGhvdXJseUNvdW50cz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTG9naW4gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgbG9naW5JZD86IHN0cmluZztcbiAgb25lVGltZVBhc3N3b3JkPzogc3RyaW5nO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgdHdvRmFjdG9yVHJ1c3RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlc3BvbnNlIHtcbiAgYWN0aW9ucz86IEFycmF5PExvZ2luUHJldmVudGVkUmVzcG9uc2U+O1xuICBjaGFuZ2VQYXNzd29yZElkPzogc3RyaW5nO1xuICBjaGFuZ2VQYXNzd29yZFJlYXNvbj86IENoYW5nZVBhc3N3b3JkUmVhc29uO1xuICBlbWFpbFZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICBtZXRob2RzPzogQXJyYXk8VHdvRmFjdG9yTWV0aG9kPjtcbiAgcGVuZGluZ0lkUExpbmtJZD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0aHJlYXRzRGV0ZWN0ZWQ/OiBBcnJheTxBdXRoZW50aWNhdGlvblRocmVhdHM+O1xuICB0b2tlbj86IHN0cmluZztcbiAgdG9rZW5FeHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgdHJ1c3RUb2tlbj86IHN0cmluZztcbiAgdHdvRmFjdG9ySWQ/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWF0dGhldyBBbHRtYW5cbiAqL1xuZXhwb3J0IGVudW0gTG9nb3V0QmVoYXZpb3Ige1xuICBSZWRpcmVjdE9ubHkgPSBcIlJlZGlyZWN0T25seVwiLFxuICBBbGxBcHBsaWNhdGlvbnMgPSBcIkFsbEFwcGxpY2F0aW9uc1wiXG59XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgdGhlIExvZ291dCBBUEkgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dvdXRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGdsb2JhbD86IGJvb2xlYW47XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVyPzogSWRlbnRpdHlQcm92aWRlckRldGFpbHM7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgbWFuYWdlZCBmaWVsZHMgdGhhdCBhcmUgYWxzbyBwdXQgaW50byB0aGUgZGF0YWJhc2UgZHVyaW5nIEZ1c2lvbkF1dGggc2V0dXAuXG4gKiA8cD5cbiAqIEludGVybmFsIE5vdGU6IFRoZXNlIGZpZWxkcyBhcmUgYWxzbyBkZWNsYXJlZCBpbiBTUUwgaW4gb3JkZXIgdG8gYm9vdHN0cmFwIHRoZSBzeXN0ZW0uIFRoZXNlIG5lZWQgdG8gc3RheSBpbiBzeW5jLlxuICogQW55IGNoYW5nZXMgdG8gdGhlc2UgZmllbGRzIG5lZWRzIHRvIGFsc28gYmUgcmVmbGVjdGVkIGluIG15c3FsLnNxbCBhbmQgcG9zdGdyZXNxbC5zcWxcbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VkRmllbGRzIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF4aW11bVBhc3N3b3JkQWdlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRheXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogR3JvdXAgTWVtYmVyIERlbGV0ZSBSZXF1ZXN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbWJlckRlbGV0ZVJlcXVlc3Qge1xuICBtZW1iZXJJZHM/OiBBcnJheTxVVUlEPjtcbiAgbWVtYmVycz86IFJlY29yZDxVVUlELCBBcnJheTxVVUlEPj47XG59XG5cbi8qKlxuICogR3JvdXAgTWVtYmVyIFJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyUmVxdWVzdCB7XG4gIG1lbWJlcnM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8R3JvdXBNZW1iZXI+Pjtcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgUmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyUmVzcG9uc2Uge1xuICBtZW1iZXJzPzogUmVjb3JkPFVVSUQsIEFycmF5PEdyb3VwTWVtYmVyPj47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWtleSBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIHtcbn1cblxuLyoqXG4gKiBTdG9yZXMgYW4gbWVzc2FnZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3RyaWJ1dGUgbWVzc2FnZXM7XG4gKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUZW1wbGF0ZSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogTWVzc2FnZVR5cGU7XG59XG5cbi8qKlxuICogQSBNZXNzYWdlIFRlbXBsYXRlIFJlcXVlc3QgdG8gdGhlIEFQSVxuICpcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IHtcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSB7XG4gIG1lc3NhZ2VUZW1wbGF0ZT86IE1lc3NhZ2VUZW1wbGF0ZTtcbiAgbWVzc2FnZVRlbXBsYXRlcz86IEFycmF5PE1lc3NhZ2VUZW1wbGF0ZT47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWtleSBTbGVldmlcbiAqL1xuZXhwb3J0IGVudW0gTWVzc2FnZVR5cGUge1xuICBTTVMgPSBcIlNNU1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzZW5nZXJSZXF1ZXN0IHtcbiAgbWVzc2VuZ2VyPzogQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzZW5nZXJSZXNwb25zZSB7XG4gIG1lc3Nlbmdlcj86IEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uO1xuICBtZXNzZW5nZXJzPzogQXJyYXk8QmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzZW5nZXJUcmFuc3BvcnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIE1lc3NlbmdlclR5cGUge1xuICBHZW5lcmljID0gXCJHZW5lcmljXCIsXG4gIEthZmthID0gXCJLYWZrYVwiLFxuICBUd2lsaW8gPSBcIlR3aWxpb1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YURhdGEge1xuICBkZXZpY2U/OiBEZXZpY2VJbmZvO1xuICBzY29wZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaW5pbXVtUGFzc3dvcmRBZ2UgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIGRhaWx5IGFjdGl2ZSB1c2VyIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb250aGx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlIHtcbiAgbW9udGhseUFjdGl2ZVVzZXJzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvckF1dGhlbnRpY2F0b3JNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWxnb3JpdGhtPzogVE9UUEFsZ29yaXRobTtcbiAgY29kZUxlbmd0aD86IG51bWJlcjtcbiAgdGltZVN0ZXA/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JFbWFpbE1ldGhvZCBleHRlbmRzIEVuYWJsZWFibGUge1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvckVtYWlsVGVtcGxhdGUge1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvclNNU01ldGhvZCBleHRlbmRzIEVuYWJsZWFibGUge1xuICBtZXNzZW5nZXJJZD86IFVVSUQ7XG4gIHRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yU01TVGVtcGxhdGUge1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOaW50ZW5kb0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBlbWFpbENsYWltPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdW5pcXVlSWRDbGFpbT86IHN0cmluZztcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBOaW50ZW5kbyBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmludGVuZG9JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8TmludGVuZG9BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBlbWFpbENsYWltPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdW5pcXVlSWRDbGFpbT86IHN0cmluZztcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgaW5kaWNhdGluZyB0aGlzIGV2ZW50IGNhbm5vdCBiZSBtYWRlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vblRyYW5zYWN0aW9uYWxFdmVudCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoMkNvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemVkT3JpZ2luVVJMcz86IEFycmF5PHN0cmluZz47XG4gIGF1dGhvcml6ZWRSZWRpcmVjdFVSTHM/OiBBcnJheTxzdHJpbmc+O1xuICBjbGllbnRBdXRoZW50aWNhdGlvblBvbGljeT86IENsaWVudEF1dGhlbnRpY2F0aW9uUG9saWN5O1xuICBjbGllbnRJZD86IHN0cmluZztcbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRldmljZVZlcmlmaWNhdGlvblVSTD86IHN0cmluZztcbiAgZW5hYmxlZEdyYW50cz86IEFycmF5PEdyYW50VHlwZT47XG4gIGdlbmVyYXRlUmVmcmVzaFRva2Vucz86IGJvb2xlYW47XG4gIGxvZ291dEJlaGF2aW9yPzogTG9nb3V0QmVoYXZpb3I7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgcHJvb2ZLZXlGb3JDb2RlRXhjaGFuZ2VQb2xpY3k/OiBQcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeTtcbiAgcmVxdWlyZUNsaWVudEF1dGhlbnRpY2F0aW9uPzogYm9vbGVhbjtcbiAgcmVxdWlyZVJlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoQ29uZmlndXJhdGlvblJlc3BvbnNlIHtcbiAgaHR0cFNlc3Npb25NYXhJbmFjdGl2ZUludGVydmFsPzogbnVtYmVyO1xuICBsb2dvdXRVUkw/OiBzdHJpbmc7XG4gIG9hdXRoQ29uZmlndXJhdGlvbj86IE9BdXRoMkNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoRXJyb3Ige1xuICBjaGFuZ2VfcGFzc3dvcmRfaWQ/OiBzdHJpbmc7XG4gIGVycm9yPzogT0F1dGhFcnJvclR5cGU7XG4gIGVycm9yX2Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBlcnJvcl9yZWFzb24/OiBPQXV0aEVycm9yUmVhc29uO1xuICBlcnJvcl91cmk/OiBzdHJpbmc7XG4gIHR3b19mYWN0b3JfaWQ/OiBzdHJpbmc7XG4gIHR3b19mYWN0b3JfbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG59XG5cbmV4cG9ydCBlbnVtIE9BdXRoRXJyb3JSZWFzb24ge1xuICBhdXRoX2NvZGVfbm90X2ZvdW5kID0gXCJhdXRoX2NvZGVfbm90X2ZvdW5kXCIsXG4gIGFjY2Vzc190b2tlbl9tYWxmb3JtZWQgPSBcImFjY2Vzc190b2tlbl9tYWxmb3JtZWRcIixcbiAgYWNjZXNzX3Rva2VuX2V4cGlyZWQgPSBcImFjY2Vzc190b2tlbl9leHBpcmVkXCIsXG4gIGFjY2Vzc190b2tlbl91bmF2YWlsYWJsZV9mb3JfcHJvY2Vzc2luZyA9IFwiYWNjZXNzX3Rva2VuX3VuYXZhaWxhYmxlX2Zvcl9wcm9jZXNzaW5nXCIsXG4gIGFjY2Vzc190b2tlbl9mYWlsZWRfcHJvY2Vzc2luZyA9IFwiYWNjZXNzX3Rva2VuX2ZhaWxlZF9wcm9jZXNzaW5nXCIsXG4gIHJlZnJlc2hfdG9rZW5fbm90X2ZvdW5kID0gXCJyZWZyZXNoX3Rva2VuX25vdF9mb3VuZFwiLFxuICByZWZyZXNoX3Rva2VuX3R5cGVfbm90X3N1cHBvcnRlZCA9IFwicmVmcmVzaF90b2tlbl90eXBlX25vdF9zdXBwb3J0ZWRcIixcbiAgaW52YWxpZF9jbGllbnRfaWQgPSBcImludmFsaWRfY2xpZW50X2lkXCIsXG4gIGludmFsaWRfdXNlcl9jcmVkZW50aWFscyA9IFwiaW52YWxpZF91c2VyX2NyZWRlbnRpYWxzXCIsXG4gIGludmFsaWRfZ3JhbnRfdHlwZSA9IFwiaW52YWxpZF9ncmFudF90eXBlXCIsXG4gIGludmFsaWRfb3JpZ2luID0gXCJpbnZhbGlkX29yaWdpblwiLFxuICBpbnZhbGlkX29yaWdpbl9vcGFxdWUgPSBcImludmFsaWRfb3JpZ2luX29wYXF1ZVwiLFxuICBpbnZhbGlkX3BrY2VfY29kZV92ZXJpZmllciA9IFwiaW52YWxpZF9wa2NlX2NvZGVfdmVyaWZpZXJcIixcbiAgaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlID0gXCJpbnZhbGlkX3BrY2VfY29kZV9jaGFsbGVuZ2VcIixcbiAgaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlX21ldGhvZCA9IFwiaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlX21ldGhvZFwiLFxuICBpbnZhbGlkX3JlZGlyZWN0X3VyaSA9IFwiaW52YWxpZF9yZWRpcmVjdF91cmlcIixcbiAgaW52YWxpZF9yZXNwb25zZV9tb2RlID0gXCJpbnZhbGlkX3Jlc3BvbnNlX21vZGVcIixcbiAgaW52YWxpZF9yZXNwb25zZV90eXBlID0gXCJpbnZhbGlkX3Jlc3BvbnNlX3R5cGVcIixcbiAgaW52YWxpZF9pZF90b2tlbl9oaW50ID0gXCJpbnZhbGlkX2lkX3Rva2VuX2hpbnRcIixcbiAgaW52YWxpZF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBcImludmFsaWRfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpXCIsXG4gIGludmFsaWRfZGV2aWNlX2NvZGUgPSBcImludmFsaWRfZGV2aWNlX2NvZGVcIixcbiAgaW52YWxpZF91c2VyX2NvZGUgPSBcImludmFsaWRfdXNlcl9jb2RlXCIsXG4gIGludmFsaWRfYWRkaXRpb25hbF9jbGllbnRfaWQgPSBcImludmFsaWRfYWRkaXRpb25hbF9jbGllbnRfaWRcIixcbiAgaW52YWxpZF90YXJnZXRfZW50aXR5X3Njb3BlID0gXCJpbnZhbGlkX3RhcmdldF9lbnRpdHlfc2NvcGVcIixcbiAgaW52YWxpZF9lbnRpdHlfcGVybWlzc2lvbl9zY29wZSA9IFwiaW52YWxpZF9lbnRpdHlfcGVybWlzc2lvbl9zY29wZVwiLFxuICBncmFudF90eXBlX2Rpc2FibGVkID0gXCJncmFudF90eXBlX2Rpc2FibGVkXCIsXG4gIG1pc3NpbmdfY2xpZW50X2lkID0gXCJtaXNzaW5nX2NsaWVudF9pZFwiLFxuICBtaXNzaW5nX2NsaWVudF9zZWNyZXQgPSBcIm1pc3NpbmdfY2xpZW50X3NlY3JldFwiLFxuICBtaXNzaW5nX2NvZGUgPSBcIm1pc3NpbmdfY29kZVwiLFxuICBtaXNzaW5nX2NvZGVfY2hhbGxlbmdlID0gXCJtaXNzaW5nX2NvZGVfY2hhbGxlbmdlXCIsXG4gIG1pc3NpbmdfY29kZV92ZXJpZmllciA9IFwibWlzc2luZ19jb2RlX3ZlcmlmaWVyXCIsXG4gIG1pc3NpbmdfZGV2aWNlX2NvZGUgPSBcIm1pc3NpbmdfZGV2aWNlX2NvZGVcIixcbiAgbWlzc2luZ19ncmFudF90eXBlID0gXCJtaXNzaW5nX2dyYW50X3R5cGVcIixcbiAgbWlzc2luZ19yZWRpcmVjdF91cmkgPSBcIm1pc3NpbmdfcmVkaXJlY3RfdXJpXCIsXG4gIG1pc3NpbmdfcmVmcmVzaF90b2tlbiA9IFwibWlzc2luZ19yZWZyZXNoX3Rva2VuXCIsXG4gIG1pc3NpbmdfcmVzcG9uc2VfdHlwZSA9IFwibWlzc2luZ19yZXNwb25zZV90eXBlXCIsXG4gIG1pc3NpbmdfdG9rZW4gPSBcIm1pc3NpbmdfdG9rZW5cIixcbiAgbWlzc2luZ191c2VyX2NvZGUgPSBcIm1pc3NpbmdfdXNlcl9jb2RlXCIsXG4gIG1pc3NpbmdfdmVyaWZpY2F0aW9uX3VyaSA9IFwibWlzc2luZ192ZXJpZmljYXRpb25fdXJpXCIsXG4gIGxvZ2luX3ByZXZlbnRlZCA9IFwibG9naW5fcHJldmVudGVkXCIsXG4gIG5vdF9saWNlbnNlZCA9IFwibm90X2xpY2Vuc2VkXCIsXG4gIHVzZXJfY29kZV9leHBpcmVkID0gXCJ1c2VyX2NvZGVfZXhwaXJlZFwiLFxuICB1c2VyX2V4cGlyZWQgPSBcInVzZXJfZXhwaXJlZFwiLFxuICB1c2VyX2xvY2tlZCA9IFwidXNlcl9sb2NrZWRcIixcbiAgdXNlcl9ub3RfZm91bmQgPSBcInVzZXJfbm90X2ZvdW5kXCIsXG4gIGNsaWVudF9hdXRoZW50aWNhdGlvbl9taXNzaW5nID0gXCJjbGllbnRfYXV0aGVudGljYXRpb25fbWlzc2luZ1wiLFxuICBpbnZhbGlkX2NsaWVudF9hdXRoZW50aWNhdGlvbl9zY2hlbWUgPSBcImludmFsaWRfY2xpZW50X2F1dGhlbnRpY2F0aW9uX3NjaGVtZVwiLFxuICBpbnZhbGlkX2NsaWVudF9hdXRoZW50aWNhdGlvbiA9IFwiaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb25cIixcbiAgY2xpZW50X2lkX21pc21hdGNoID0gXCJjbGllbnRfaWRfbWlzbWF0Y2hcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX2FkbWluaXN0cmF0aXZlID0gXCJjaGFuZ2VfcGFzc3dvcmRfYWRtaW5pc3RyYXRpdmVcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX2JyZWFjaGVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfYnJlYWNoZWRcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX2V4cGlyZWQgPSBcImNoYW5nZV9wYXNzd29yZF9leHBpcmVkXCIsXG4gIGNoYW5nZV9wYXNzd29yZF92YWxpZGF0aW9uID0gXCJjaGFuZ2VfcGFzc3dvcmRfdmFsaWRhdGlvblwiLFxuICB1bmtub3duID0gXCJ1bmtub3duXCJcbn1cblxuZXhwb3J0IGVudW0gT0F1dGhFcnJvclR5cGUge1xuICBpbnZhbGlkX3JlcXVlc3QgPSBcImludmFsaWRfcmVxdWVzdFwiLFxuICBpbnZhbGlkX2NsaWVudCA9IFwiaW52YWxpZF9jbGllbnRcIixcbiAgaW52YWxpZF9ncmFudCA9IFwiaW52YWxpZF9ncmFudFwiLFxuICBpbnZhbGlkX3Rva2VuID0gXCJpbnZhbGlkX3Rva2VuXCIsXG4gIHVuYXV0aG9yaXplZF9jbGllbnQgPSBcInVuYXV0aG9yaXplZF9jbGllbnRcIixcbiAgaW52YWxpZF9zY29wZSA9IFwiaW52YWxpZF9zY29wZVwiLFxuICBzZXJ2ZXJfZXJyb3IgPSBcInNlcnZlcl9lcnJvclwiLFxuICB1bnN1cHBvcnRlZF9ncmFudF90eXBlID0gXCJ1bnN1cHBvcnRlZF9ncmFudF90eXBlXCIsXG4gIHVuc3VwcG9ydGVkX3Jlc3BvbnNlX3R5cGUgPSBcInVuc3VwcG9ydGVkX3Jlc3BvbnNlX3R5cGVcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX3JlcXVpcmVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfcmVxdWlyZWRcIixcbiAgbm90X2xpY2Vuc2VkID0gXCJub3RfbGljZW5zZWRcIixcbiAgdHdvX2ZhY3Rvcl9yZXF1aXJlZCA9IFwidHdvX2ZhY3Rvcl9yZXF1aXJlZFwiLFxuICBhdXRob3JpemF0aW9uX3BlbmRpbmcgPSBcImF1dGhvcml6YXRpb25fcGVuZGluZ1wiLFxuICBleHBpcmVkX3Rva2VuID0gXCJleHBpcmVkX3Rva2VuXCIsXG4gIHVuc3VwcG9ydGVkX3Rva2VuX3R5cGUgPSBcInVuc3VwcG9ydGVkX3Rva2VuX3R5cGVcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aFJlc3BvbnNlIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIE9iamVjdFN0YXRlIHtcbiAgQWN0aXZlID0gXCJBY3RpdmVcIixcbiAgSW5hY3RpdmUgPSBcIkluYWN0aXZlXCIsXG4gIFBlbmRpbmdEZWxldGUgPSBcIlBlbmRpbmdEZWxldGVcIlxufVxuXG4vKipcbiAqIE9wZW5JRCBDb25uZWN0IENvbmZpZ3VyYXRpb24gYXMgZGVzY3JpYmVkIGJ5IHRoZSA8YSBocmVmPVwiaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWRpc2NvdmVyeS0xXzAuaHRtbCNQcm92aWRlck1ldGFkYXRhXCI+T3BlbklEXG4gKiBQcm92aWRlciBNZXRhZGF0YTwvYT4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBiYWNrY2hhbm5lbF9sb2dvdXRfc3VwcG9ydGVkPzogYm9vbGVhbjtcbiAgY2xhaW1zX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIGRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBlbmRfc2Vzc2lvbl9lbmRwb2ludD86IHN0cmluZztcbiAgZnJvbnRjaGFubmVsX2xvZ291dF9zdXBwb3J0ZWQ/OiBib29sZWFuO1xuICBncmFudF90eXBlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICBpZF90b2tlbl9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBqd2tzX3VyaT86IHN0cmluZztcbiAgcmVzcG9uc2VfbW9kZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVzcG9uc2VfdHlwZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgc2NvcGVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIHN1YmplY3RfdHlwZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgdG9rZW5fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHRva2VuX2VuZHBvaW50X2F1dGhfbWV0aG9kc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICB1c2VyaW5mb19lbmRwb2ludD86IHN0cmluZztcbiAgdXNlcmluZm9fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbm5lY3RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvbkltYWdlVVJMPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBvYXV0aDI/OiBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbklkQ29ubmVjdElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxPcGVuSWRDb25uZWN0QXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvbkltYWdlVVJMPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgb2F1dGgyPzogSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb247XG4gIHBvc3RSZXF1ZXN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRCcmVhY2hEZXRlY3Rpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbWF0Y2hNb2RlPzogQnJlYWNoTWF0Y2hNb2RlO1xuICBub3RpZnlVc2VyRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgb25Mb2dpbj86IEJyZWFjaEFjdGlvbjtcbn1cblxuLyoqXG4gKiBQYXNzd29yZCBFbmNyeXB0aW9uIFNjaGVtZSBDb25maWd1cmF0aW9uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBlbmNyeXB0aW9uU2NoZW1lPzogc3RyaW5nO1xuICBlbmNyeXB0aW9uU2NoZW1lRmFjdG9yPzogbnVtYmVyO1xuICBtb2RpZnlFbmNyeXB0aW9uU2NoZW1lT25Mb2dpbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgYWxsIGlkZW50aXR5IHByb3ZpZGVycyB0aGF0IGFyZSBwYXNzd29yZGxlc3MgYW5kIGRvIG5vdCBhY2NlcHQgYSBwYXNzd29yZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZGxlc3NJZGVudGl0eVByb3ZpZGVyIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzU3RhcnRSZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEZXJlayBLbGF0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzIHtcbiAgYnJlYWNoRGV0ZWN0aW9uPzogUGFzc3dvcmRCcmVhY2hEZXRlY3Rpb247XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICByZW1lbWJlclByZXZpb3VzUGFzc3dvcmRzPzogUmVtZW1iZXJQcmV2aW91c1Bhc3N3b3JkcztcbiAgcmVxdWlyZU1peGVkQ2FzZT86IGJvb2xlYW47XG4gIHJlcXVpcmVOb25BbHBoYT86IGJvb2xlYW47XG4gIHJlcXVpcmVOdW1iZXI/OiBib29sZWFuO1xuICB2YWxpZGF0ZU9uTG9naW4/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlIHtcbiAgcGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM/OiBQYXNzd29yZFZhbGlkYXRpb25SdWxlcztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVuZGluZ0lkUExpbmsge1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rcz86IEFycmF5PElkZW50aXR5UHJvdmlkZXJMaW5rPjtcbiAgaWRlbnRpdHlQcm92aWRlck5hbWU/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPzogSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb247XG4gIGlkZW50aXR5UHJvdmlkZXJUeXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG4gIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xuICB1c2VybmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nUmVzcG9uc2Uge1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCB7XG4gIGxvY2FsZT86IHN0cmluZztcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2Uge1xuICBlcnJvcnM/OiBFcnJvcnM7XG4gIG1lc3NhZ2U/OiBTTVNNZXNzYWdlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXZpZXdSZXF1ZXN0IHtcbiAgZW1haWxUZW1wbGF0ZT86IEVtYWlsVGVtcGxhdGU7XG4gIGxvY2FsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld1Jlc3BvbnNlIHtcbiAgZW1haWw/OiBFbWFpbDtcbiAgZXJyb3JzPzogRXJyb3JzO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIFByb29mS2V5Rm9yQ29kZUV4Y2hhbmdlUG9saWN5IHtcbiAgUmVxdWlyZWQgPSBcIlJlcXVpcmVkXCIsXG4gIE5vdFJlcXVpcmVkID0gXCJOb3RSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZFdoZW5Vc2luZ0NsaWVudEF1dGhlbnRpY2F0aW9uID0gXCJOb3RSZXF1aXJlZFdoZW5Vc2luZ0NsaWVudEF1dGhlbnRpY2F0aW9uXCJcbn1cblxuLyoqXG4gKiBKV1QgUHVibGljIEtleSBSZXNwb25zZSBPYmplY3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5UmVzcG9uc2Uge1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHB1YmxpY0tleXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICB0aW1lUGVyaW9kSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gUmF0ZUxpbWl0ZWRSZXF1ZXN0VHlwZSB7XG4gIEZhaWxlZExvZ2luID0gXCJGYWlsZWRMb2dpblwiLFxuICBGb3Jnb3RQYXNzd29yZCA9IFwiRm9yZ290UGFzc3dvcmRcIixcbiAgU2VuZEVtYWlsVmVyaWZpY2F0aW9uID0gXCJTZW5kRW1haWxWZXJpZmljYXRpb25cIixcbiAgU2VuZFBhc3N3b3JkbGVzcyA9IFwiU2VuZFBhc3N3b3JkbGVzc1wiLFxuICBTZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uID0gXCJTZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uXCIsXG4gIFNlbmRUd29GYWN0b3IgPSBcIlNlbmRUd29GYWN0b3JcIlxufVxuXG4vKipcbiAqIFJhdyBsb2dpbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCB0aW1lIGEgdXNlciBsb2dzIGludG8gYW4gYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF3TG9naW4ge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgaW5zdGFudD86IG51bWJlcjtcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBSZWFjdG9yRmVhdHVyZVN0YXR1cyB7XG4gIEFDVElWRSA9IFwiQUNUSVZFXCIsXG4gIERJU0NPTk5FQ1RFRCA9IFwiRElTQ09OTkVDVEVEXCIsXG4gIFBFTkRJTkcgPSBcIlBFTkRJTkdcIixcbiAgRElTQUJMRUQgPSBcIkRJU0FCTEVEXCIsXG4gIFVOS05PV04gPSBcIlVOS05PV05cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yTWV0cmljcyB7XG4gIGJyZWFjaGVkUGFzc3dvcmRNZXRyaWNzPzogUmVjb3JkPFVVSUQsIEJyZWFjaGVkUGFzc3dvcmRUZW5hbnRNZXRyaWM+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yTWV0cmljc1Jlc3BvbnNlIHtcbiAgbWV0cmljcz86IFJlYWN0b3JNZXRyaWNzO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIG1hbmFnaW5nIEZ1c2lvbkF1dGggUmVhY3RvciBhbmQgbGljZW5zZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RvclJlcXVlc3Qge1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICBsaWNlbnNlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JSZXNwb25zZSB7XG4gIHN0YXR1cz86IFJlYWN0b3JTdGF0dXM7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JTdGF0dXMge1xuICBhZHZhbmNlZElkZW50aXR5UHJvdmlkZXJzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkTGFtYmRhcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZE11bHRpRmFjdG9yQXV0aGVudGljYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRSZWdpc3RyYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYXBwbGljYXRpb25UaGVtZXM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYnJlYWNoZWRQYXNzd29yZERldGVjdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBjb25uZWN0b3JzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGVudGl0eU1hbmFnZW1lbnQ/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgZXhwaXJhdGlvbj86IHN0cmluZztcbiAgbGljZW5zZWQ/OiBib29sZWFuO1xuICBzY2ltU2VydmVyPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHRocmVhdERldGVjdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgdXNlciBsb2dpbiByZXBvcnQuXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY2VudExvZ2luUmVzcG9uc2Uge1xuICBsb2dpbnM/OiBBcnJheTxEaXNwbGF5YWJsZVJhd0xvZ2luPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlc3BvbnNlIHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBKV1QgUmVmcmVzaCBUb2tlbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIG1ldGFEYXRhPzogTWV0YURhdGE7XG4gIHN0YXJ0SW5zdGFudD86IG51bWJlcjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFJlZnJlc2hUb2tlbkV4cGlyYXRpb25Qb2xpY3kge1xuICBGaXhlZCA9IFwiRml4ZWRcIixcbiAgU2xpZGluZ1dpbmRvdyA9IFwiU2xpZGluZ1dpbmRvd1wiXG59XG5cbi8qKlxuICogUmVmcmVzaCBUb2tlbiBJbXBvcnQgcmVxdWVzdC5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlbkltcG9ydFJlcXVlc3Qge1xuICByZWZyZXNoVG9rZW5zPzogQXJyYXk8UmVmcmVzaFRva2VuPjtcbiAgdmFsaWRhdGVEYkNvbnN0cmFpbnRzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHJldHJpZXZpbmcgUmVmcmVzaCBUb2tlbnNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuUmVzcG9uc2Uge1xuICByZWZyZXNoVG9rZW4/OiBSZWZyZXNoVG9rZW47XG4gIHJlZnJlc2hUb2tlbnM/OiBBcnJheTxSZWZyZXNoVG9rZW4+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXZvY2F0aW9uUG9saWN5IHtcbiAgb25Mb2dpblByZXZlbnRlZD86IGJvb2xlYW47XG4gIG9uUGFzc3dvcmRDaGFuZ2VkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGZvciB0aGUgUmVmcmVzaCBUb2tlbiBBUEkgdG8gcmV2b2tlIGEgcmVmcmVzaCB0b2tlbiByYXRoZXIgdGhhbiB1c2luZyB0aGUgVVJMIHBhcmFtZXRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuUmV2b2tlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBSZWZyZXNoVG9rZW5Vc2FnZVBvbGljeSB7XG4gIFJldXNhYmxlID0gXCJSZXVzYWJsZVwiLFxuICBPbmVUaW1lVXNlID0gXCJPbmVUaW1lVXNlXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGJpcnRoRGF0ZT86IFJlcXVpcmFibGU7XG4gIGNvbmZpcm1QYXNzd29yZD86IGJvb2xlYW47XG4gIGZpcnN0TmFtZT86IFJlcXVpcmFibGU7XG4gIGZvcm1JZD86IFVVSUQ7XG4gIGZ1bGxOYW1lPzogUmVxdWlyYWJsZTtcbiAgbGFzdE5hbWU/OiBSZXF1aXJhYmxlO1xuICBsb2dpbklkVHlwZT86IExvZ2luSWRUeXBlO1xuICBtaWRkbGVOYW1lPzogUmVxdWlyYWJsZTtcbiAgbW9iaWxlUGhvbmU/OiBSZXF1aXJhYmxlO1xuICB0eXBlPzogUmVnaXN0cmF0aW9uVHlwZTtcbn1cblxuLyoqXG4gKiBSZWdpc3RyYXRpb24gZGVsZXRlIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25EZWxldGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSByZWdpc3RyYXRpb24gcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlIHtcbiAgaG91cmx5Q291bnRzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZWdpc3RyYXRpb24gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZGlzYWJsZURvbWFpbkJsb2NrPzogYm9vbGVhbjtcbiAgZ2VuZXJhdGVBdXRoZW50aWNhdGlvblRva2VuPzogYm9vbGVhbjtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgc2VuZFNldFBhc3N3b3JkRW1haWw/OiBib29sZWFuO1xuICBza2lwUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uPzogYm9vbGVhbjtcbiAgc2tpcFZlcmlmaWNhdGlvbj86IGJvb2xlYW47XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIFJlZ2lzdHJhdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUmVzcG9uc2Uge1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbiAgdG9rZW5FeHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbmV4cG9ydCBlbnVtIFJlZ2lzdHJhdGlvblR5cGUge1xuICBiYXNpYyA9IFwiYmFzaWNcIixcbiAgYWR2YW5jZWQgPSBcImFkdmFuY2VkXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uVW52ZXJpZmllZE9wdGlvbnMge1xuICBiZWhhdmlvcj86IFVudmVyaWZpZWRCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBSZWluZGV4IEFQSSByZXF1ZXN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlaW5kZXhSZXF1ZXN0IHtcbiAgaW5kZXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbG9hZFJlcXVlc3Qge1xuICBuYW1lcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbWVtYmVyUHJldmlvdXNQYXNzd29yZHMgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgY291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogU29tZXRoaW5nIHRoYXQgY2FuIGJlIHJlcXVpcmVkIGFuZCB0aHVzIGFsc28gb3B0aW9uYWwuIFRoaXMgY3VycmVudGx5IGV4dGVuZHMgRW5hYmxlYWJsZSBiZWNhdXNlIGFueXRoaW5nIHRoYXQgaXNcbiAqIHJlcXVpcmUvb3B0aW9uYWwgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVhYmxlIGFzIHdlbGwuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWlyYWJsZSBleHRlbmRzIEVuYWJsZWFibGUge1xuICByZXF1aXJlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGRlc2NyaWJpbmcgdGhlIG5lZWQgZm9yIENPUlMgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWlyZXNDT1JTQ29uZmlndXJhdGlvbiB7XG59XG5cbmV4cG9ydCBlbnVtIFNBTUxMb2dvdXRCZWhhdmlvciB7XG4gIEFsbFBhcnRpY2lwYW50cyA9IFwiQWxsUGFydGljaXBhbnRzXCIsXG4gIE9ubHlPcmlnaW5hdG9yID0gXCJPbmx5T3JpZ2luYXRvclwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25JbWFnZVVSTD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGF1ZGllbmNlPzogc3RyaW5nO1xuICBhdXRob3JpemVkUmVkaXJlY3RVUkxzPzogQXJyYXk8c3RyaW5nPjtcbiAgY2FsbGJhY2tVUkw/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZGVmYXVsdFZlcmlmaWNhdGlvbktleUlkPzogVVVJRDtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBrZXlJZD86IFVVSUQ7XG4gIGxvZ291dD86IFNBTUx2MkxvZ291dDtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICByZXF1aXJlU2lnbmVkUmVxdWVzdHM/OiBib29sZWFuO1xuICB4bWxTaWduYXR1cmVDMTRuTWV0aG9kPzogQ2Fub25pY2FsaXphdGlvbk1ldGhvZDtcbiAgeG1sU2lnbmF0dXJlTG9jYXRpb24/OiBYTUxTaWduYXR1cmVMb2NhdGlvbjtcbn1cblxuLyoqXG4gKiBTQU1MIHYyIGlkZW50aXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFNBTUx2MkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25JbWFnZVVSTD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgZG9tYWlucz86IEFycmF5PHN0cmluZz47XG4gIGVtYWlsQ2xhaW0/OiBzdHJpbmc7XG4gIGlkcEVuZHBvaW50Pzogc3RyaW5nO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGtleUlkPzogVVVJRDtcbiAgbmFtZUlkRm9ybWF0Pzogc3RyaW5nO1xuICBwb3N0UmVxdWVzdD86IGJvb2xlYW47XG4gIHJlcXVlc3RTaWduaW5nS2V5SWQ/OiBVVUlEO1xuICBzaWduUmVxdWVzdD86IGJvb2xlYW47XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZU5hbWVJZEZvckVtYWlsPzogYm9vbGVhbjtcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkUEluaXRpYXRlZEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBTQU1MIHYyIElkUCBJbml0aWF0ZWQgaWRlbnRpdHkgcHJvdmlkZXIgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRQSW5pdGlhdGVkSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFNBTUx2MklkUEluaXRpYXRlZEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBlbWFpbENsYWltPzogc3RyaW5nO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGtleUlkPzogVVVJRDtcbiAgdW5pcXVlSWRDbGFpbT86IHN0cmluZztcbiAgdXNlTmFtZUlkRm9yRW1haWw/OiBib29sZWFuO1xuICB1c2VybmFtZUNsYWltPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkxvZ291dCB7XG4gIGJlaGF2aW9yPzogU0FNTExvZ291dEJlaGF2aW9yO1xuICBkZWZhdWx0VmVyaWZpY2F0aW9uS2V5SWQ/OiBVVUlEO1xuICBrZXlJZD86IFVVSUQ7XG4gIHJlcXVpcmVTaWduZWRSZXF1ZXN0cz86IGJvb2xlYW47XG4gIHNpbmdsZUxvZ291dD86IFNBTUx2MlNpbmdsZUxvZ291dDtcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyU2luZ2xlTG9nb3V0IGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGtleUlkPzogVVVJRDtcbiAgdXJsPzogc3RyaW5nO1xuICB4bWxTaWduYXR1cmVDMTRuTWV0aG9kPzogQ2Fub25pY2FsaXphdGlvbk1ldGhvZDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggQVBJIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFVzZXJTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3BvbnNlIHtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHVzZXJzPzogQXJyYXk8VXNlcj47XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3VsdHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0czxUPiB7XG4gIHJlc3VsdHM/OiBBcnJheTxUPjtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHRvdGFsRXF1YWxUb0FjdHVhbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldFJlc3BvbnNlIHtcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICBzZWNyZXRCYXNlMzJFbmNvZGVkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uIHtcbiAgbGVuZ3RoPzogbnVtYmVyO1xuICB0eXBlPzogU2VjdXJlR2VuZXJhdG9yVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFNlY3VyZUdlbmVyYXRvclR5cGUge1xuICByYW5kb21EaWdpdHMgPSBcInJhbmRvbURpZ2l0c1wiLFxuICByYW5kb21CeXRlcyA9IFwicmFuZG9tQnl0ZXNcIixcbiAgcmFuZG9tQWxwaGEgPSBcInJhbmRvbUFscGhhXCIsXG4gIHJhbmRvbUFscGhhTnVtZXJpYyA9IFwicmFuZG9tQWxwaGFOdW1lcmljXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlSWRlbnRpdHkge1xuICBicmVhY2hlZFBhc3N3b3JkTGFzdENoZWNrZWRJbnN0YW50PzogbnVtYmVyO1xuICBicmVhY2hlZFBhc3N3b3JkU3RhdHVzPzogQnJlYWNoZWRQYXNzd29yZFN0YXR1cztcbiAgY29ubmVjdG9ySWQ/OiBVVUlEO1xuICBlbmNyeXB0aW9uU2NoZW1lPzogc3RyaW5nO1xuICBmYWN0b3I/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgbGFzdExvZ2luSW5zdGFudD86IG51bWJlcjtcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHBhc3N3b3JkQ2hhbmdlUmVhc29uPzogQ2hhbmdlUGFzc3dvcmRSZWFzb247XG4gIHBhc3N3b3JkQ2hhbmdlUmVxdWlyZWQ/OiBib29sZWFuO1xuICBwYXNzd29yZExhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBzYWx0Pzogc3RyaW5nO1xuICB1bmlxdWVVc2VybmFtZT86IHN0cmluZztcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHVzZXJuYW1lU3RhdHVzPzogQ29udGVudFN0YXR1cztcbiAgdmVyaWZpZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBiY2NBZGRyZXNzZXM/OiBBcnJheTxzdHJpbmc+O1xuICBjY0FkZHJlc3Nlcz86IEFycmF5PHN0cmluZz47XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IEFycmF5PHN0cmluZz47XG4gIHJlcXVlc3REYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdG9BZGRyZXNzZXM/OiBBcnJheTxFbWFpbEFkZHJlc3M+O1xuICB1c2VySWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRSZXNwb25zZSB7XG4gIGFub255bW91c1Jlc3VsdHM/OiBSZWNvcmQ8c3RyaW5nLCBFbWFpbFRlbXBsYXRlRXJyb3JzPjtcbiAgcmVzdWx0cz86IFJlY29yZDxVVUlELCBFbWFpbFRlbXBsYXRlRXJyb3JzPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU01TTWVzc2FnZSB7XG4gIHBob25lTnVtYmVyPzogc3RyaW5nO1xuICB0ZXh0TWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU01TTWVzc2FnZVRlbXBsYXRlIGV4dGVuZHMgTWVzc2FnZVRlbXBsYXRlIHtcbiAgZGVmYXVsdFRlbXBsYXRlPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRUZW1wbGF0ZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbnlQU05BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU29ueVBTTiBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29ueVBTTklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxTb255UFNOQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBTb3J0IHtcbiAgYXNjID0gXCJhc2NcIixcbiAgZGVzYyA9IFwiZGVzY1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRGaWVsZCB7XG4gIG1pc3Npbmc/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9yZGVyPzogU29ydDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGVhbUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgd2ViQVBJS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0ZWFtIGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGVhbUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxTdGVhbUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB3ZWJBUElLZXk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGVscGVyIGludGVyZmFjZSB0aGF0IGluZGljYXRlcyBhbiBpZGVudGl0eSBwcm92aWRlciBjYW4gYmUgZmVkZXJhdGVkIHRvIHVzaW5nIHRoZSBIVFRQIFBPU1QgbWV0aG9kLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1cHBvcnRzUG9zdEJpbmRpbmdzIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXN0ZW1Db25maWd1cmF0aW9uIHtcbiAgYXVkaXRMb2dDb25maWd1cmF0aW9uPzogQXVkaXRMb2dDb25maWd1cmF0aW9uO1xuICBjb3JzQ29uZmlndXJhdGlvbj86IENPUlNDb25maWd1cmF0aW9uO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZXZlbnRMb2dDb25maWd1cmF0aW9uPzogRXZlbnRMb2dDb25maWd1cmF0aW9uO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9naW5SZWNvcmRDb25maWd1cmF0aW9uPzogTG9naW5SZWNvcmRDb25maWd1cmF0aW9uO1xuICByZXBvcnRUaW1lem9uZT86IHN0cmluZztcbiAgdWlDb25maWd1cmF0aW9uPzogVUlDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBBUEkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvblJlcXVlc3Qge1xuICBzeXN0ZW1Db25maWd1cmF0aW9uPzogU3lzdGVtQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIEFQSS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2Uge1xuICBzeXN0ZW1Db25maWd1cmF0aW9uPzogU3lzdGVtQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtTG9nc0V4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGxhc3ROQnl0ZXM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVzIHtcbiAgYWNjb3VudEVkaXQ/OiBzdHJpbmc7XG4gIGFjY291bnRJbmRleD86IHN0cmluZztcbiAgYWNjb3VudFR3b0ZhY3RvckRpc2FibGU/OiBzdHJpbmc7XG4gIGFjY291bnRUd29GYWN0b3JFbmFibGU/OiBzdHJpbmc7XG4gIGFjY291bnRUd29GYWN0b3JJbmRleD86IHN0cmluZztcbiAgZW1haWxDb21wbGV0ZT86IHN0cmluZztcbiAgZW1haWxTZW5kPzogc3RyaW5nO1xuICBlbWFpbFNlbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVmVyaWZpY2F0aW9uUmVxdWlyZWQ/OiBzdHJpbmc7XG4gIGVtYWlsVmVyaWZ5Pzogc3RyaW5nO1xuICBoZWxwZXJzPzogc3RyaW5nO1xuICBpbmRleD86IHN0cmluZztcbiAgb2F1dGgyQXV0aG9yaXplPzogc3RyaW5nO1xuICBvYXV0aDJBdXRob3JpemVkTm90UmVnaXN0ZXJlZD86IHN0cmluZztcbiAgb2F1dGgyQ2hpbGRSZWdpc3RyYXRpb25Ob3RBbGxvd2VkPzogc3RyaW5nO1xuICBvYXV0aDJDaGlsZFJlZ2lzdHJhdGlvbk5vdEFsbG93ZWRDb21wbGV0ZT86IHN0cmluZztcbiAgb2F1dGgyQ29tcGxldGVSZWdpc3RyYXRpb24/OiBzdHJpbmc7XG4gIG9hdXRoMkRldmljZT86IHN0cmluZztcbiAgb2F1dGgyRGV2aWNlQ29tcGxldGU/OiBzdHJpbmc7XG4gIG9hdXRoMkVycm9yPzogc3RyaW5nO1xuICBvYXV0aDJMb2dvdXQ/OiBzdHJpbmc7XG4gIG9hdXRoMlBhc3N3b3JkbGVzcz86IHN0cmluZztcbiAgb2F1dGgyUmVnaXN0ZXI/OiBzdHJpbmc7XG4gIG9hdXRoMlN0YXJ0SWRQTGluaz86IHN0cmluZztcbiAgb2F1dGgyVHdvRmFjdG9yPzogc3RyaW5nO1xuICBvYXV0aDJUd29GYWN0b3JNZXRob2RzPzogc3RyaW5nO1xuICBvYXV0aDJXYWl0Pzogc3RyaW5nO1xuICBwYXNzd29yZENoYW5nZT86IHN0cmluZztcbiAgcGFzc3dvcmRDb21wbGV0ZT86IHN0cmluZztcbiAgcGFzc3dvcmRGb3Jnb3Q/OiBzdHJpbmc7XG4gIHBhc3N3b3JkU2VudD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uQ29tcGxldGU/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblNlbmQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblNlbnQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvblJlcXVpcmVkPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZnk/OiBzdHJpbmc7XG4gIHNhbWx2MkxvZ291dD86IHN0cmluZztcbiAgdW5hdXRob3JpemVkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnQge1xuICBhY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbj86IFRlbmFudEFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uO1xuICBjYXB0Y2hhQ29uZmlndXJhdGlvbj86IFRlbmFudENhcHRjaGFDb25maWd1cmF0aW9uO1xuICBjb25maWd1cmVkPzogYm9vbGVhbjtcbiAgY29ubmVjdG9yUG9saWNpZXM/OiBBcnJheTxDb25uZWN0b3JQb2xpY3k+O1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW1haWxDb25maWd1cmF0aW9uPzogRW1haWxDb25maWd1cmF0aW9uO1xuICBldmVudENvbmZpZ3VyYXRpb24/OiBFdmVudENvbmZpZ3VyYXRpb247XG4gIGV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb24/OiBFeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uO1xuICBmYWlsZWRBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24/OiBGYWlsZWRBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb247XG4gIGZhbWlseUNvbmZpZ3VyYXRpb24/OiBGYW1pbHlDb25maWd1cmF0aW9uO1xuICBmb3JtQ29uZmlndXJhdGlvbj86IFRlbmFudEZvcm1Db25maWd1cmF0aW9uO1xuICBodHRwU2Vzc2lvbk1heEluYWN0aXZlSW50ZXJ2YWw/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBqd3RDb25maWd1cmF0aW9uPzogSldUQ29uZmlndXJhdGlvbjtcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IFRlbmFudExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2dpbkNvbmZpZ3VyYXRpb24/OiBUZW5hbnRMb2dpbkNvbmZpZ3VyYXRpb247XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgbWF4aW11bVBhc3N3b3JkQWdlPzogTWF4aW11bVBhc3N3b3JkQWdlO1xuICBtaW5pbXVtUGFzc3dvcmRBZ2U/OiBNaW5pbXVtUGFzc3dvcmRBZ2U7XG4gIG11bHRpRmFjdG9yQ29uZmlndXJhdGlvbj86IFRlbmFudE11bHRpRmFjdG9yQ29uZmlndXJhdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogVGVuYW50T0F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFBhc3N3b3JkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb247XG4gIHBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzPzogUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM7XG4gIHJhdGVMaW1pdENvbmZpZ3VyYXRpb24/OiBUZW5hbnRSYXRlTGltaXRDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25Db25maWd1cmF0aW9uPzogVGVuYW50UmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbjtcbiAgc2NpbVNlcnZlckNvbmZpZ3VyYXRpb24/OiBUZW5hbnRTQ0lNU2VydmVyQ29uZmlndXJhdGlvbjtcbiAgc3NvQ29uZmlndXJhdGlvbj86IFRlbmFudFNTT0NvbmZpZ3VyYXRpb247XG4gIHN0YXRlPzogT2JqZWN0U3RhdGU7XG4gIHRoZW1lSWQ/OiBVVUlEO1xuICB1c2VyRGVsZXRlUG9saWN5PzogVGVuYW50VXNlckRlbGV0ZVBvbGljeTtcbiAgdXNlcm5hbWVDb25maWd1cmF0aW9uPzogVGVuYW50VXNlcm5hbWVDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudGFibGUge1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50QWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuICB1aUlQQWNjZXNzQ29udHJvbExpc3RJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Q2FwdGNoYUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgY2FwdGNoYU1ldGhvZD86IENhcHRjaGFNZXRob2Q7XG4gIHNlY3JldEtleT86IHN0cmluZztcbiAgc2l0ZUtleT86IHN0cmluZztcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBUZW5hbnQgQVBJIHRvIGRlbGV0ZSBhIHRlbmFudCByYXRoZXIgdGhhbiB1c2luZyB0aGUgVVJMIHBhcmFtZXRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50RGVsZXRlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhc3luYz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudEZvcm1Db25maWd1cmF0aW9uIHtcbiAgYWRtaW5Vc2VyRm9ybUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFJvYiBEYXZpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICBzY2ltRW50ZXJwcmlzZVVzZXJSZXF1ZXN0Q29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltRW50ZXJwcmlzZVVzZXJSZXNwb25zZUNvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbUdyb3VwUmVxdWVzdENvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbUdyb3VwUmVzcG9uc2VDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Vc2VyUmVxdWVzdENvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbVVzZXJSZXNwb25zZUNvbnZlcnRlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50TG9naW5Db25maWd1cmF0aW9uIHtcbiAgcmVxdWlyZUF1dGhlbnRpY2F0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pa2V5IFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudE11bHRpRmFjdG9yQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhlbnRpY2F0b3I/OiBNdWx0aUZhY3RvckF1dGhlbnRpY2F0b3JNZXRob2Q7XG4gIGVtYWlsPzogTXVsdGlGYWN0b3JFbWFpbE1ldGhvZDtcbiAgc21zPzogTXVsdGlGYWN0b3JTTVNNZXRob2Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50T0F1dGgyQ29uZmlndXJhdGlvbiB7XG4gIGNsaWVudENyZWRlbnRpYWxzQWNjZXNzVG9rZW5Qb3B1bGF0ZUxhbWJkYUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmF0ZUxpbWl0Q29uZmlndXJhdGlvbiB7XG4gIGZhaWxlZExvZ2luPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgZm9yZ290UGFzc3dvcmQ/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kRW1haWxWZXJpZmljYXRpb24/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kUGFzc3dvcmRsZXNzPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRUd29GYWN0b3I/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYmxvY2tlZERvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIHNvdXJjZVRlbmFudElkPzogVVVJRDtcbiAgdGVuYW50PzogVGVuYW50O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSZXNwb25zZSB7XG4gIHRlbmFudD86IFRlbmFudDtcbiAgdGVuYW50cz86IEFycmF5PFRlbmFudD47XG59XG5cbi8qKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRTQ0lNU2VydmVyQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjbGllbnRFbnRpdHlUeXBlSWQ/OiBVVUlEO1xuICBzY2hlbWFzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc2VydmVyRW50aXR5VHlwZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRTU09Db25maWd1cmF0aW9uIHtcbiAgZGV2aWNlVHJ1c3RUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRVbnZlcmlmaWVkQ29uZmlndXJhdGlvbiB7XG4gIGVtYWlsPzogVW52ZXJpZmllZEJlaGF2aW9yO1xuICB3aGVuR2F0ZWQ/OiBSZWdpc3RyYXRpb25VbnZlcmlmaWVkT3B0aW9ucztcbn1cblxuLyoqXG4gKiBBIFRlbmFudC1sZXZlbCBwb2xpY3kgZm9yIGRlbGV0aW5nIFVzZXJzLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50VXNlckRlbGV0ZVBvbGljeSB7XG4gIHVudmVyaWZpZWQ/OiBUaW1lQmFzZWREZWxldGVQb2xpY3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFVzZXJuYW1lQ29uZmlndXJhdGlvbiB7XG4gIHVuaXF1ZT86IFVuaXF1ZVVzZXJuYW1lQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlZmF1bHRNZXNzYWdlcz86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkTWVzc2FnZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdHlsZXNoZWV0Pzogc3RyaW5nO1xuICB0ZW1wbGF0ZXM/OiBUZW1wbGF0ZXM7XG59XG5cbi8qKlxuICogVGhlbWUgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVSZXF1ZXN0IHtcbiAgc291cmNlVGhlbWVJZD86IFVVSUQ7XG4gIHRoZW1lPzogVGhlbWU7XG59XG5cbi8qKlxuICogVGhlbWUgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lUmVzcG9uc2Uge1xuICB0aGVtZT86IFRoZW1lO1xuICB0aGVtZXM/OiBBcnJheTxUaGVtZT47XG59XG5cbi8qKlxuICogQSBwb2xpY3kgZm9yIGRlbGV0aW5nIFVzZXJzLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGltZUJhc2VkRGVsZXRlUG9saWN5IGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG51bWJlck9mRGF5c1RvUmV0YWluPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIDx1bD5cbiAqIDxsaT5CZWFyZXIgVG9rZW4gdHlwZSBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc1MFwiPlJGQyA2NzUwPC9hPi48L2xpPlxuICogPGxpPk1BQyBUb2tlbiB0eXBlIGFzIHJlZmVyZW5jZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5XCI+UkZDIDY3NDk8L2E+IGFuZFxuICogPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLW9hdXRoLXYyLWh0dHAtbWFjLTA1XCI+XG4gKiBEcmFmdCBSRkMgb24gT0F1dGggMi4wIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSAoTUFDKSBUb2tlbnM8L2E+XG4gKiA8L2xpPlxuICogPC91bD5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFRva2VuVHlwZSB7XG4gIEJlYXJlciA9IFwiQmVhcmVyXCIsXG4gIE1BQyA9IFwiTUFDXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3RhbHMge1xuICBsb2dpbnM/OiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG4gIHRvdGFsUmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgcmVzcG9uc2UgZnJvbSB0aGUgdG90YWwgcmVwb3J0LiBUaGlzIHJlcG9ydCBzdG9yZXMgdGhlIHRvdGFsIG51bWJlcnMgZm9yIGVhY2ggYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG90YWxzUmVwb3J0UmVzcG9uc2Uge1xuICBhcHBsaWNhdGlvblRvdGFscz86IFJlY29yZDxVVUlELCBUb3RhbHM+O1xuICBnbG9iYWxSZWdpc3RyYXRpb25zPzogbnVtYmVyO1xuICB0b3RhbEdsb2JhbFJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIFRPVFBBbGdvcml0aG0ge1xuICBIbWFjU0hBMSA9IFwiSG1hY1NIQTFcIixcbiAgSG1hY1NIQTI1NiA9IFwiSG1hY1NIQTI1NlwiLFxuICBIbWFjU0hBNTEyID0gXCJIbWFjU0hBNTEyXCJcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNhY3Rpb24gdHlwZXMgZm9yIFdlYmhvb2tzIGFuZCBvdGhlciBldmVudCBzeXN0ZW1zIHdpdGhpbiBGdXNpb25BdXRoLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBUcmFuc2FjdGlvblR5cGUge1xuICBOb25lID0gXCJOb25lXCIsXG4gIEFueSA9IFwiQW55XCIsXG4gIFNpbXBsZU1ham9yaXR5ID0gXCJTaW1wbGVNYWpvcml0eVwiLFxuICBTdXBlck1ham9yaXR5ID0gXCJTdXBlck1ham9yaXR5XCIsXG4gIEFic29sdXRlTWFqb3JpdHkgPSBcIkFic29sdXRlTWFqb3JpdHlcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpbGlvTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uIHtcbiAgYWNjb3VudFNJRD86IHN0cmluZztcbiAgYXV0aFRva2VuPzogc3RyaW5nO1xuICBmcm9tUGhvbmVOdW1iZXI/OiBzdHJpbmc7XG4gIG1lc3NhZ2luZ1NlcnZpY2VTaWQ/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2l0Y2hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHdpdGNoIGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2l0Y2hJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8VHdpdGNoQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXR0ZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNvbnN1bWVyS2V5Pzogc3RyaW5nO1xuICBjb25zdW1lclNlY3JldD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUd2l0dGVyIHNvY2lhbCBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdHRlcklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxUd2l0dGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNvbnN1bWVyS2V5Pzogc3RyaW5nO1xuICBjb25zdW1lclNlY3JldD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JEaXNhYmxlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY29kZT86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvckVuYWJsZURpc2FibGVTZW5kUmVxdWVzdCB7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIG1ldGhvZElkPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIHRydXN0Q29tcHV0ZXI/OiBib29sZWFuO1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yTWV0aG9kIHtcbiAgYXV0aGVudGljYXRvcj86IEF1dGhlbnRpY2F0b3JDb25maWd1cmF0aW9uO1xuICBlbWFpbD86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGxhc3RVc2VkPzogYm9vbGVhbjtcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZSB7XG4gIHJlY292ZXJ5Q29kZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGF1dGhlbnRpY2F0b3JJZD86IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG4gIHNlY3JldD86IHN0cmluZztcbiAgc2VjcmV0QmFzZTMyRW5jb2RlZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVzcG9uc2Uge1xuICByZWNvdmVyeUNvZGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU2VuZFJlcXVlc3Qge1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtZXRob2RJZD86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTdGFydFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY29kZT86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0cnVzdENoYWxsZW5nZT86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU3RhcnRSZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVSUNvbmZpZ3VyYXRpb24ge1xuICBoZWFkZXJDb2xvcj86IHN0cmluZztcbiAgbG9nb1VSTD86IHN0cmluZztcbiAgbWVudUZvbnRDb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlxdWVVc2VybmFtZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbnVtYmVyT2ZEaWdpdHM/OiBudW1iZXI7XG4gIHNlcGFyYXRvcj86IHN0cmluZztcbiAgc3RyYXRlZ3k/OiBVbmlxdWVVc2VybmFtZVN0cmF0ZWd5O1xufVxuXG5leHBvcnQgZW51bSBVbmlxdWVVc2VybmFtZVN0cmF0ZWd5IHtcbiAgQWx3YXlzID0gXCJBbHdheXNcIixcbiAgT25Db2xsaXNpb24gPSBcIk9uQ29sbGlzaW9uXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFVudmVyaWZpZWRCZWhhdmlvciB7XG4gIEFsbG93ID0gXCJBbGxvd1wiLFxuICBHYXRlZCA9IFwiR2F0ZWRcIlxufVxuXG4vKipcbiAqIFRoZSBnbG9iYWwgdmlldyBvZiBhIFVzZXIuIFRoaXMgb2JqZWN0IGNvbnRhaW5zIGFsbCBnbG9iYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIgaW5jbHVkaW5nIGJpcnRoIGRhdGUsIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvblxuICogcHJlZmVycmVkIGxhbmd1YWdlcywgZ2xvYmFsIGF0dHJpYnV0ZXMsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciBleHRlbmRzIFNlY3VyZUlkZW50aXR5IHtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgYmlydGhEYXRlPzogc3RyaW5nO1xuICBjbGVhblNwZWFrSWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgZmlyc3ROYW1lPzogc3RyaW5nO1xuICBmdWxsTmFtZT86IHN0cmluZztcbiAgaW1hZ2VVcmw/OiBzdHJpbmc7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3ROYW1lPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbWVtYmVyc2hpcHM/OiBBcnJheTxHcm91cE1lbWJlcj47XG4gIG1pZGRsZU5hbWU/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICBwYXJlbnRFbWFpbD86IHN0cmluZztcbiAgcHJlZmVycmVkTGFuZ3VhZ2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVnaXN0cmF0aW9ucz86IEFycmF5PFVzZXJSZWdpc3RyYXRpb24+O1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICB0d29GYWN0b3I/OiBVc2VyVHdvRmFjdG9yQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBbiBhY3Rpb24gdGhhdCBjYW4gYmUgZXhlY3V0ZWQgb24gYSB1c2VyIChkaXNjaXBsaW5lIG9yIHJld2FyZCBwb3RlbnRpYWxseSkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvbiB7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGNhbmNlbEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGVuZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5jbHVkZUVtYWlsSW5FdmVudEpTT04/OiBib29sZWFuO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkTmFtZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBtb2RpZnlFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBuYW1lPzogc3RyaW5nO1xuICBvcHRpb25zPzogQXJyYXk8VXNlckFjdGlvbk9wdGlvbj47XG4gIHByZXZlbnRMb2dpbj86IGJvb2xlYW47XG4gIHNlbmRFbmRFdmVudD86IGJvb2xlYW47XG4gIHN0YXJ0RW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdGVtcG9yYWw/OiBib29sZWFuO1xuICB0cmFuc2FjdGlvblR5cGU/OiBUcmFuc2FjdGlvblR5cGU7XG4gIHVzZXJFbWFpbGluZ0VuYWJsZWQ/OiBib29sZWFuO1xuICB1c2VyTm90aWZpY2F0aW9uc0VuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgdXNlciBhY3Rpb24gZXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25FdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFjdGlvbj86IHN0cmluZztcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW1haWw/OiBFbWFpbDtcbiAgZW1haWxlZFVzZXI/OiBib29sZWFuO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIGxvY2FsaXplZEFjdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkRHVyYXRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZE9wdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkUmVhc29uPzogc3RyaW5nO1xuICBub3RpZnlVc2VyPzogYm9vbGVhbjtcbiAgb3B0aW9uPzogc3RyaW5nO1xuICBwaGFzZT86IFVzZXJBY3Rpb25QaGFzZTtcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbG9nIGZvciBhbiBhY3Rpb24gdGhhdCB3YXMgdGFrZW4gb24gYSBVc2VyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25Mb2cge1xuICBhY3Rpb25lZVVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbmVyVXNlcklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW1haWxVc2VyT25FbmQ/OiBib29sZWFuO1xuICBlbmRFdmVudFNlbnQ/OiBib29sZWFuO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIGhpc3Rvcnk/OiBMb2dIaXN0b3J5O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxvY2FsaXplZE5hbWU/OiBzdHJpbmc7XG4gIGxvY2FsaXplZE9wdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkUmVhc29uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBub3RpZnlVc2VyT25FbmQ/OiBib29sZWFuO1xuICBvcHRpb24/OiBzdHJpbmc7XG4gIHJlYXNvbj86IHN0cmluZztcbiAgcmVhc29uQ29kZT86IHN0cmluZztcbiAgdXNlckFjdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgY29udGVudCB1c2VyIGFjdGlvbiBvcHRpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25PcHRpb24ge1xuICBsb2NhbGl6ZWROYW1lcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBoYXNlcyBvZiBhIHRpbWUtYmFzZWQgdXNlciBhY3Rpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIFVzZXJBY3Rpb25QaGFzZSB7XG4gIHN0YXJ0ID0gXCJzdGFydFwiLFxuICBtb2RpZnkgPSBcIm1vZGlmeVwiLFxuICBjYW5jZWwgPSBcImNhbmNlbFwiLFxuICBlbmQgPSBcImVuZFwiXG59XG5cbi8qKlxuICogTW9kZWxzIGFjdGlvbiByZWFzb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZWFzb24ge1xuICBjb2RlPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRUZXh0cz86IExvY2FsaXplZFN0cmluZ3M7XG4gIHRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVXNlciBBY3Rpb24gUmVhc29uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCB7XG4gIHVzZXJBY3Rpb25SZWFzb24/OiBVc2VyQWN0aW9uUmVhc29uO1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIFJlYXNvbiBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSB7XG4gIHVzZXJBY3Rpb25SZWFzb24/OiBVc2VyQWN0aW9uUmVhc29uO1xuICB1c2VyQWN0aW9uUmVhc29ucz86IEFycmF5PFVzZXJBY3Rpb25SZWFzb24+O1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVxdWVzdCB7XG4gIHVzZXJBY3Rpb24/OiBVc2VyQWN0aW9uO1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlc3BvbnNlIHtcbiAgdXNlckFjdGlvbj86IFVzZXJBY3Rpb247XG4gIHVzZXJBY3Rpb25zPzogQXJyYXk8VXNlckFjdGlvbj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEJ1bGsgQ3JlYXRlIEV2ZW50IChhbmQgY2FuIGJlIGNvbnZlcnRlZCB0byBKU09OKS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQnVsa0NyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcnM/OiBBcnJheTxVc2VyPjtcbn1cblxuLyoqXG4gKiBBIGxvZyBmb3IgYW4gZXZlbnQgdGhhdCBoYXBwZW5lZCB0byBhIFVzZXIuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnQge1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBjb21tZW50ZXJJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnRSZXF1ZXN0IHtcbiAgdXNlckNvbW1lbnQ/OiBVc2VyQ29tbWVudDtcbn1cblxuLyoqXG4gKiBVc2VyIENvbW1lbnQgUmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnRSZXNwb25zZSB7XG4gIHVzZXJDb21tZW50PzogVXNlckNvbW1lbnQ7XG4gIHVzZXJDb21tZW50cz86IEFycmF5PFVzZXJDb21tZW50Pjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50IHtcbiAgY29uc2VudD86IENvbnNlbnQ7XG4gIGNvbnNlbnRJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBnaXZlclVzZXJJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHN0YXR1cz86IENvbnNlbnRTdGF0dXM7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHZhbHVlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50UmVxdWVzdCB7XG4gIHVzZXJDb25zZW50PzogVXNlckNvbnNlbnQ7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50UmVzcG9uc2Uge1xuICB1c2VyQ29uc2VudD86IFVzZXJDb25zZW50O1xuICB1c2VyQ29uc2VudHM/OiBBcnJheTxVc2VyQ29uc2VudD47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZWQgRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pLlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSB1c2VyLmNyZWF0ZSBldmVudCBpbiB0aGF0IGl0IHdpbGwgYmUgc2VudCBhZnRlciB0aGUgdXNlciBoYXMgYmVlbiBjcmVhdGVkLiBUaGlzIGV2ZW50IGNhbm5vdCBiZSBtYWRlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDcmVhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZSBFdmVudCAoYW5kIGNhbiBiZSBjb252ZXJ0ZWQgdG8gSlNPTikuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIERlYWN0aXZhdGUgRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWFjdGl2YXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pIHRoYXQgaXMgdXNlZCBmb3IgYWxsIHVzZXIgbW9kaWZpY2F0aW9ucyAoY3JlYXRlLCB1cGRhdGUsXG4gKiBkZWxldGUpLlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIuZGVsZXRlIGJlY2F1c2UgaXQgaXMgc2VudCBhZnRlciB0aGUgdHggaXMgY29tbWl0dGVkLCB0aGlzIGNhbm5vdCBiZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBFdmVudCAoYW5kIGNhbiBiZSBjb252ZXJ0ZWQgdG8gSlNPTikgdGhhdCBpcyB1c2VkIGZvciBhbGwgdXNlciBtb2RpZmljYXRpb25zIChjcmVhdGUsIHVwZGF0ZSxcbiAqIGRlbGV0ZSkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRlbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogVXNlciBBUEkgZGVsZXRlIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbiAgcXVlcnk/OiBzdHJpbmc7XG4gIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xuICB1c2VySWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogVXNlciBBUEkgYnVsayByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlUmVzcG9uc2Uge1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHVzZXJJZHM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFVzZXIgQVBJIGRlbGV0ZSByZXF1ZXN0IG9iamVjdCBmb3IgYSBzaW5nbGUgdXNlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlU2luZ2xlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZXZlbnQgd2hlcmUgYSB1c2VyJ3MgZW1haWwgaXMgdXBkYXRlZCBvdXRzaWRlIG9mIGEgZm9yZ290IC8gY2hhbmdlIHBhc3N3b3JkIHdvcmtmbG93LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRW1haWxVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHByZXZpb3VzRW1haWw/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBFbWFpbCBWZXJpZnkgRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckVtYWlsVmVyaWZpZWRFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBJZGVudGl0eSBQcm92aWRlciBMaW5rIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgUm9iIERhdmlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlcklkZW50aXR5UHJvdmlkZXJMaW5rRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgSWRlbnRpdHkgUHJvdmlkZXIgVW5saW5rIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgUm9iIERhdmlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlcklkZW50aXR5UHJvdmlkZXJVbmxpbmtFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyaW5mb1Jlc3BvbnNlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIExvZ2luIEZhaWxlZCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luRmFpbGVkRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRpb25UeXBlPzogc3RyaW5nO1xuICBpcEFkZHJlc3M/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBldmVudCB3aGVyZSBhIHVzZXIgaXMgYmVpbmcgY3JlYXRlZCB3aXRoIGFuIFwiaW4tdXNlXCIgbG9naW4gSWQgKGVtYWlsIG9yIHVzZXJuYW1lKS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZHVwbGljYXRlRW1haWw/OiBzdHJpbmc7XG4gIGR1cGxpY2F0ZVVzZXJuYW1lPzogc3RyaW5nO1xuICBleGlzdGluZz86IFVzZXI7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBldmVudCB3aGVyZSBhIHVzZXIgaXMgYmVpbmcgdXBkYXRlZCBhbmQgdHJpZXMgdG8gdXNlIGFuIFwiaW4tdXNlXCIgbG9naW4gSWQgKGVtYWlsIG9yIHVzZXJuYW1lKS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luSWREdXBsaWNhdGVPblVwZGF0ZUV2ZW50IGV4dGVuZHMgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZUV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgTG9naW4gZXZlbnQgZm9yIGEgbmV3IGRldmljZSAodW4tcmVjb2duaXplZClcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luTmV3RGV2aWNlRXZlbnQgZXh0ZW5kcyBVc2VyTG9naW5TdWNjZXNzRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBTdWNjZXNzIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5TdWNjZXNzRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRpb25UeXBlPzogc3RyaW5nO1xuICBjb25uZWN0b3JJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJOYW1lPzogc3RyaW5nO1xuICBpcEFkZHJlc3M/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBldmVudCB0aGF0IGlzIHN1c3BpY2lvdXMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpblN1c3BpY2lvdXNFdmVudCBleHRlbmRzIFVzZXJMb2dpblN1Y2Nlc3NFdmVudCB7XG4gIHRocmVhdHNEZXRlY3RlZD86IEFycmF5PEF1dGhlbnRpY2F0aW9uVGhyZWF0cz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlcm5hbWVNb2RlcmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBCcmVhY2ggRXZlbnQuXG4gKlxuICogQGF1dGhvciBNYXR0aGV3IEFsdG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZEJyZWFjaEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIFJlc2V0IFNlbmQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFJlc2V0U2VuZEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIFJlc2V0IFN0YXJ0IEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUGFzc3dvcmRSZXNldFN0YXJ0RXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUGFzc3dvcmQgUmVzZXQgU3VjY2VzcyBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkUmVzZXRTdWNjZXNzRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUGFzc3dvcmQgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUGFzc3dvcmRVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBSZWFjdGl2YXRlIEV2ZW50IChhbmQgY2FuIGJlIGNvbnZlcnRlZCB0byBKU09OKS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVhY3RpdmF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogVXNlciByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb24ge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRpb25Ub2tlbj86IHN0cmluZztcbiAgY2xlYW5TcGVha0lkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdExvZ2luSW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IEFycmF5PHN0cmluZz47XG4gIHJvbGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIHRva2Vucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VybmFtZVN0YXR1cz86IENvbnRlbnRTdGF0dXM7XG4gIHZlcmlmaWVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlZCBSZWdpc3RyYXRpb24gRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pLlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSB1c2VyLnJlZ2lzdHJhdGlvbi5jcmVhdGUgZXZlbnQgaW4gdGhhdCBpdCB3aWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIHVzZXIgaGFzIGJlZW4gY3JlYXRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uQ3JlYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlIFJlZ2lzdHJhdGlvbiBFdmVudCAoYW5kIGNhbiBiZSBjb252ZXJ0ZWQgdG8gSlNPTikuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRGVsZXRlZCBSZWdpc3RyYXRpb24gRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pLlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZSBpbiB0aGF0IGl0IGlzIHNlbnQgYWZ0ZXIgdGhlIFRYIGhhcyBiZWVuIGNvbW1pdHRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkRlbGV0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIERlbGV0ZSBSZWdpc3RyYXRpb24gRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFVwZGF0ZSBSZWdpc3RyYXRpb24gRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pLlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIucmVnaXN0cmF0aW9uLnVwZGF0ZSBpbiB0aGF0IGl0IGlzIHNlbnQgYWZ0ZXIgdGhpcyBldmVudCBjb21wbGV0ZXMsIHRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25VcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIG9yaWdpbmFsPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFVwZGF0ZSBSZWdpc3RyYXRpb24gRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgb3JpZ2luYWw/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUmVnaXN0cmF0aW9uIFZlcmlmaWVkIEV2ZW50IChhbmQgY2FuIGJlIGNvbnZlcnRlZCB0byBKU09OKS5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25WZXJpZmllZEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIFVzZXIgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBkaXNhYmxlRG9tYWluQmxvY2s/OiBib29sZWFuO1xuICBzZW5kU2V0UGFzc3dvcmRFbWFpbD86IGJvb2xlYW47XG4gIHNraXBWZXJpZmljYXRpb24/OiBib29sZWFuO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlc3BvbnNlIHtcbiAgZW1haWxWZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWRzPzogUmVjb3JkPFVVSUQsIHN0cmluZz47XG4gIHRva2VuPzogc3RyaW5nO1xuICB0b2tlbkV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSB1c2VyIHF1ZXJ5LiBJdCBwcm92aWRlcyBhIGJ1aWxkIHBhdHRlcm4gYXMgd2VsbCBhcyBwdWJsaWMgZmllbGRzIGZvciB1c2Ugb24gZm9ybXMgYW5kIGluIGFjdGlvbnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZUVsYXN0aWNTZWFyY2hDcml0ZXJpYSB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBVc2VyU3RhdGUge1xuICBBdXRoZW50aWNhdGVkID0gXCJBdXRoZW50aWNhdGVkXCIsXG4gIEF1dGhlbnRpY2F0ZWROb3RSZWdpc3RlcmVkID0gXCJBdXRoZW50aWNhdGVkTm90UmVnaXN0ZXJlZFwiLFxuICBBdXRoZW50aWNhdGVkTm90VmVyaWZpZWQgPSBcIkF1dGhlbnRpY2F0ZWROb3RWZXJpZmllZFwiLFxuICBBdXRoZW50aWNhdGVkUmVnaXN0cmF0aW9uTm90VmVyaWZpZWQgPSBcIkF1dGhlbnRpY2F0ZWRSZWdpc3RyYXRpb25Ob3RWZXJpZmllZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUd29GYWN0b3JDb25maWd1cmF0aW9uIHtcbiAgbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG4gIHJlY292ZXJ5Q29kZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIE1vZGVsIGEgdXNlciBldmVudCB3aGVuIGEgdHdvLWZhY3RvciBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclR3b0ZhY3Rvck1ldGhvZEFkZEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgbWV0aG9kPzogVHdvRmFjdG9yTWV0aG9kO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbCBhIHVzZXIgZXZlbnQgd2hlbiBhIHR3by1mYWN0b3IgbWV0aG9kIGhhcyBiZWVuIGFkZGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBtZXRob2Q/OiBUd29GYWN0b3JNZXRob2Q7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgRXZlbnQgb25jZSBpdCBpcyBjb21wbGV0ZWQuIFRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJVcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgb3JpZ2luYWw/OiBVc2VyO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIEV2ZW50IChhbmQgY2FuIGJlIGNvbnZlcnRlZCB0byBKU09OKS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBvcmlnaW5hbD86IFVzZXI7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0ZVJlc3BvbnNlIHtcbiAgand0PzogSldUO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVmVyaWZpY2F0aW9uU3RyYXRlZ3kge1xuICBDbGlja2FibGVMaW5rID0gXCJDbGlja2FibGVMaW5rXCIsXG4gIEZvcm1GaWVsZCA9IFwiRm9ybUZpZWxkXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5RW1haWxSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5RW1haWxSZXNwb25zZSB7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5UmVnaXN0cmF0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uUmVzcG9uc2Uge1xuICB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2VydmVyIHdoZXJlIGV2ZW50cyBhcmUgc2VudC4gVGhpcyBpbmNsdWRlcyB1c2VyIGFjdGlvbiBldmVudHMgYW5kIGFueSBvdGhlciBldmVudHMgc2VudCBieSBGdXNpb25BdXRoLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2sge1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xuICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudHNFbmFibGVkPzogUmVjb3JkPEV2ZW50VHlwZSwgYm9vbGVhbj47XG4gIGdsb2JhbD86IGJvb2xlYW47XG4gIGhlYWRlcnM/OiBIVFRQSGVhZGVycztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGh0dHBBdXRoZW50aWNhdGlvblVzZXJuYW1lPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgc3NsQ2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBXZWJob29rIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rUmVxdWVzdCB7XG4gIHdlYmhvb2s/OiBXZWJob29rO1xufVxuXG4vKipcbiAqIFdlYmhvb2sgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rUmVzcG9uc2Uge1xuICB3ZWJob29rPzogV2ViaG9vaztcbiAgd2ViaG9va3M/OiBBcnJheTxXZWJob29rPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBYYm94QXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFhib3ggZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFhib3hJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8WGJveEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBYTUxTaWduYXR1cmVMb2NhdGlvbiB7XG4gIEFzc2VydGlvbiA9IFwiQXNzZXJ0aW9uXCIsXG4gIFJlc3BvbnNlID0gXCJSZXNwb25zZVwiXG59XG5cbiJdfQ==
|
|
5740
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC50cyIsIm5vZGVfbW9kdWxlcy9ub2RlLWZldGNoL2Jyb3dzZXIuanMiLCJzcmMvQ2xpZW50UmVzcG9uc2UudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnQudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyLnRzIiwic3JjL0Z1c2lvbkF1dGhDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7O0FBRUgsMkRBQXFEO0FBQ3JELGtCQUFlLDBCQUFnQixDQUFDO0FBRWhDLDRDQUF1QztBQUV2QyxvREFBK0M7QUFDL0MsMENBQXFDOzs7O0FDdEJyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4QkE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7O0FBRUg7SUFBQTtJQVFBLENBQUM7SUFIQyxzQ0FBYSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN6RCxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQVJBLEFBUUMsSUFBQTs7Ozs7O0FDeEJEOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILG1EQUE4QztBQUM5Qyx5Q0FBeUU7QUFDekUsMkJBQW9DO0FBRXBDOzs7O0dBSUc7QUFDSDtJQVVFLDJCQUFtQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQVJ4QixZQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUVyQyxlQUFVLEdBQTJCLEVBQUUsQ0FBQztRQUd4QyxvQkFBZSxHQUF3Qixp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QXRCLDhCQUFzQixLQUF0Qiw4QkFBc0IsUUFHakM7QUFFRDs7R0FFRztBQUNILElBQVksa0JBR1g7QUFIRCxXQUFZLGtCQUFrQjtJQUM1QixxQ0FBZSxDQUFBO0lBQ2YscUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSFcsa0JBQWtCLEdBQWxCLDBCQUFrQixLQUFsQiwwQkFBa0IsUUFHN0I7QUF5SEQ7Ozs7R0FJRztBQUNILElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN6QixrQ0FBZSxDQUFBO0lBQ2Ysb0NBQWlCLENBQUE7SUFDakIsb0NBQWlCLENBQUE7SUFDakIsOEJBQVcsQ0FBQTtBQUNiLENBQUMsRUFMVyxlQUFlLEdBQWYsdUJBQWUsS0FBZix1QkFBZSxRQUsxQjtBQTZnQkQ7O0dBRUc7QUFDSCxJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDbkIsNENBQStCLENBQUE7SUFDL0Isc0VBQXlELENBQUE7SUFDekQsa0VBQXFELENBQUE7SUFDckQsMEZBQTZFLENBQUE7QUFDL0UsQ0FBQyxFQUxXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBS3BCO0FBeUREOztHQUVHO0FBQ0gsSUFBWSxvQkFHWDtBQUhELFdBQVksb0JBQW9CO0lBQzlCLHVEQUErQixDQUFBO0lBQy9CLCtDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFIVyxvQkFBb0IsR0FBcEIsNEJBQW9CLEtBQXBCLDRCQUFvQixRQUcvQjtBQTBHRCxJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDOUIsK0NBQXVCLENBQUE7SUFDdkIsNkNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUhXLG9CQUFvQixHQUFwQiw0QkFBb0IsS0FBcEIsNEJBQW9CLFFBRy9CIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IEZ1c2lvbkF1dGhDbGllbnQgZnJvbSAnLi9zcmMvRnVzaW9uQXV0aENsaWVudCdcbmV4cG9ydCBkZWZhdWx0IEZ1c2lvbkF1dGhDbGllbnQ7XG5cbmV4cG9ydCAqIGZyb20gJy4vc3JjL0Z1c2lvbkF1dGhDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvSVJFU1RDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0NsaWVudFJlc3BvbnNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50QnVpbGRlcic7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciBnZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XG5cdC8vIHRoZSBvbmx5IHJlbGlhYmxlIG1lYW5zIHRvIGdldCB0aGUgZ2xvYmFsIG9iamVjdCBpc1xuXHQvLyBgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKWBcblx0Ly8gSG93ZXZlciwgdGhpcyBjYXVzZXMgQ1NQIHZpb2xhdGlvbnMgaW4gQ2hyb21lIGFwcHMuXG5cdGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cblx0aWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cblx0dGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QnKTtcbn1cblxudmFyIGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBnbG9iYWwuZmV0Y2g7XG5cbi8vIE5lZWRlZCBmb3IgVHlwZVNjcmlwdCBhbmQgV2VicGFjay5cbmlmIChnbG9iYWwuZmV0Y2gpIHtcblx0ZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsLmZldGNoLmJpbmQoZ2xvYmFsKTtcbn1cblxuZXhwb3J0cy5IZWFkZXJzID0gZ2xvYmFsLkhlYWRlcnM7XG5leHBvcnRzLlJlcXVlc3QgPSBnbG9iYWwuUmVxdWVzdDtcbmV4cG9ydHMuUmVzcG9uc2UgPSBnbG9iYWwuUmVzcG9uc2U7IiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50UmVzcG9uc2U8VD4ge1xuICBwdWJsaWMgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBwdWJsaWMgcmVzcG9uc2U6IFQ7XG4gIHB1YmxpYyBleGNlcHRpb246IEVycm9yO1xuXG4gIHdhc1N1Y2Nlc3NmdWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgdGhpcy5zdGF0dXNDb2RlIDwgMzAwO1xuICB9XG59IiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOS0yMDIwLCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgSVJFU1RDbGllbnQsIHtFcnJvclJlc3BvbnNlSGFuZGxlciwgUmVzcG9uc2VIYW5kbGVyfSBmcm9tIFwiLi9JUkVTVENsaWVudFwiO1xuaW1wb3J0IENsaWVudFJlc3BvbnNlIGZyb20gXCIuL0NsaWVudFJlc3BvbnNlXCI7XG5pbXBvcnQgZmV0Y2gsIHtCb2R5SW5pdCwgUmVxdWVzdENyZWRlbnRpYWxzLCBSZXNwb25zZX0gZnJvbSAnbm9kZS1mZXRjaCc7XG5pbXBvcnQge1VSTFNlYXJjaFBhcmFtc30gZnJvbSBcInVybFwiO1xuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUFxuICogQGF1dGhvciBUeWxlciBTY290dFxuICogQGF1dGhvciBUSiBQZWRlblxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiBpbXBsZW1lbnRzIElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgcHVibGljIGJvZHk6IEJvZHlJbml0O1xuICBwdWJsaWMgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwdWJsaWMgbWV0aG9kOiBzdHJpbmc7XG4gIHB1YmxpYyBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHB1YmxpYyB1cmk6IHN0cmluZztcbiAgcHVibGljIGNyZWRlbnRpYWxzOiBSZXF1ZXN0Q3JlZGVudGlhbHM7XG4gIHB1YmxpYyByZXNwb25zZUhhbmRsZXI6IFJlc3BvbnNlSGFuZGxlcjxSVD4gPSBEZWZhdWx0UkVTVENsaWVudC5KU09OUmVzcG9uc2VIYW5kbGVyO1xuICBwdWJsaWMgZXJyb3JSZXNwb25zZUhhbmRsZXI6IEVycm9yUmVzcG9uc2VIYW5kbGVyPEVSVD4gPSBEZWZhdWx0UkVTVENsaWVudC5FcnJvckpTT05SZXNwb25zZUhhbmRsZXI7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGhvc3Q6IHN0cmluZykge1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIHVzaW5nIGEga2V5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHZhbHVlIG9mIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHJldHVybnMge0RlZmF1bHRSRVNUQ2xpZW50fVxuICAgKi9cbiAgd2l0aEF1dGhvcml6YXRpb24oa2V5OiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy53aXRoSGVhZGVyKCdBdXRob3JpemF0aW9uJywga2V5KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2VnbWVudCB0byB0aGUgcmVxdWVzdCB1cmlcbiAgICovXG4gIHdpdGhVcmlTZWdtZW50KHNlZ21lbnQ6IHN0cmluZyB8IG51bWJlcik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBpZiAoc2VnbWVudCA9PT0gbnVsbCB8fCBzZWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy51cmkgPT09IG51bGwpIHtcbiAgICAgIHRoaXMudXJpID0gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVyaS5jaGFyQXQodGhpcy51cmkubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgdGhpcy51cmkgKz0gJy8nO1xuICAgIH1cbiAgICB0aGlzLnVyaSA9IHRoaXMudXJpICsgc2VnbWVudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgdXJsICsgcGFyYW1ldGVyIGxpc3RcbiAgICovXG4gIGdldEZ1bGxVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdCArIHRoaXMudXJpICsgdGhpcy5nZXRRdWVyeVN0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBmb3JtIGRhdGEuXG4gICAqL1xuICB3aXRoRm9ybURhdGEoYm9keTogVVJMU2VhcmNoUGFyYW1zKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGNvbnN0IGJvZHkyID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChib2R5KSB7XG4gICAgICBib2R5LmZvckVhY2goKHZhbHVlLCBuYW1lLCBzZWFyY2hQYXJhbXMpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUgIT0gXCJudWxsXCIgJiYgdmFsdWUgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGJvZHkyLnNldChuYW1lLHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBib2R5ID0gYm9keTI7XG4gICAgfVxuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGhlYWRlciB0byB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGtleSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIuXG4gICAqL1xuICB3aXRoSGVhZGVyKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuaGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYm9keSBvZiB0aGUgY2xpZW50IHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBib2R5IFRoZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgcmVxdWVzdCBib2R5IGFzIEpTT04uXG4gICAqL1xuICB3aXRoSlNPTkJvZHkoYm9keTogb2JqZWN0KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgIHRoaXMud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAvLyBPbWl0IHRoZSBDb250ZW50LUxlbmd0aCwgdGhpcyBpcyBzZXQgYXV0by1tYWdpY2FsbHkgYnkgdGhlIHJlcXVlc3QgbGlicmFyeVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGh0dHAgbWV0aG9kIGZvciB0aGUgcmVxdWVzdFxuICAgKi9cbiAgd2l0aE1ldGhvZChtZXRob2Q6IHN0cmluZyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB1cmkgb2YgdGhlIHJlcXVlc3RcbiAgICovXG4gIHdpdGhVcmkodXJpOiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy51cmkgPSB1cmk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBwYXJhbWV0ZXJzIHRvIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIsIG1heSBiZSBhIHN0cmluZywgb2JqZWN0IG9yIG51bWJlci5cbiAgICovXG4gIHdpdGhQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMucGFyYW1ldGVyc1tuYW1lXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcmVxdWVzdCdzIGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgQSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZSByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICAgKi9cbiAgd2l0aENyZWRlbnRpYWxzKHZhbHVlOiBSZXF1ZXN0Q3JlZGVudGlhbHMpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2l0aFJlc3BvbnNlSGFuZGxlcihoYW5kbGVyOiBSZXNwb25zZUhhbmRsZXI8UlQ+KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhFcnJvclJlc3BvbnNlSGFuZGxlcihoYW5kbGVyOiBFcnJvclJlc3BvbnNlSGFuZGxlcjxFUlQ+KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuZXJyb3JSZXNwb25zZUhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIGEgcHJvbWlzZS4gVGhpcyBwcm9taXNlIHdpbGwgcmVzb2x2ZSBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsXG4gICAqIGFuZCByZWplY3Qgb3RoZXJ3aXNlLlxuICAgKi9cbiAgYXN5bmMgZ28oKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSVD4+IHtcbiAgICBjb25zdCBjbGllbnRSZXNwb25zZSA9IG5ldyBDbGllbnRSZXNwb25zZTxSVD4oKTtcblxuICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgdGhpcy5nZXRGdWxsVXJsKCksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgIGJvZHk6IHRoaXMuYm9keSBhcyBCb2R5SW5pdCxcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgKENyZWRlbnRpYWxzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIE5vZGVKUylcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiB0aGlzLmNyZWRlbnRpYWxzLFxuICAgICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVzcG9uc2VIYW5kbGVyKHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGF3YWl0IHRoaXMuZXJyb3JSZXNwb25zZUhhbmRsZXIocmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDbGllbnRSZXNwb25zZSkge1xuICAgICAgICB0aHJvdyBlcnJvcjsgLy8gRG9uJ3QgY2F0Y2ggYSBDbGllbnRSZXNwb25zZSAod2Ugd2FudCB0aGlzIHRvIHRyaWdnZXIgdGhlIGNhdGNoIG9mIHRoZSBwcm9taXNlXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZSkgeyAvLyBUcnkgdG8gcmVjb3ZlciB0aGUgcmVzcG9uc2Ugc3RhdHVzXG4gICAgICAgIGNsaWVudFJlc3BvbnNlLnN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICB9XG4gICAgICBjbGllbnRSZXNwb25zZS5leGNlcHRpb24gPSBlcnJvcjtcblxuICAgICAgdGhyb3cgY2xpZW50UmVzcG9uc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRRdWVyeVN0cmluZygpIHtcbiAgICB2YXIgcXVlcnlTdHJpbmcgPSAnJztcbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5wYXJhbWV0ZXJzKSB7XG4gICAgICBxdWVyeVN0cmluZyArPSAocXVlcnlTdHJpbmcubGVuZ3RoID09PSAwKSA/ICc/JyA6ICcmJztcbiAgICAgIHF1ZXJ5U3RyaW5nICs9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnBhcmFtZXRlcnNba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgSlNPTiBmb3JtIG9mIHRoZSByZXNwb25zZSB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVzcG9uc2VcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgSlNPTlJlc3BvbnNlSGFuZGxlcjxSVD4ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSVD4+IHtcbiAgICBsZXQgY2xpZW50UmVzcG9uc2UgPSBuZXcgQ2xpZW50UmVzcG9uc2U8UlQ+KCk7XG5cbiAgICBjbGllbnRSZXNwb25zZS5zdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGxldCB0eXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gICAgaWYgKHR5cGUgJiYgdHlwZS5zdGFydHNXaXRoKFwiYXBwbGljYXRpb24vanNvblwiKSkge1xuICAgICAgY2xpZW50UmVzcG9uc2UucmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaWVudFJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBKU09OIGZvcm0gb2YgdGhlIHJlc3BvbnNlIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSByZXNwb25zZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIHN0YXRpYyBhc3luYyBFcnJvckpTT05SZXNwb25zZUhhbmRsZXI8RVJUPihyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVSVD4+IHtcbiAgICBsZXQgY2xpZW50UmVzcG9uc2UgPSBuZXcgQ2xpZW50UmVzcG9uc2U8RVJUPigpO1xuXG4gICAgY2xpZW50UmVzcG9uc2Uuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICBsZXQgdHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICAgIGlmICh0eXBlICYmIHR5cGUuc3RhcnRzV2l0aChcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgIGNsaWVudFJlc3BvbnNlLmV4Y2VwdGlvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpZW50UmVzcG9uc2U7XG4gIH1cbn1cbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBJUkVTVENsaWVudCBmcm9tIFwiLi9JUkVTVENsaWVudFwiO1xuaW1wb3J0IERlZmF1bHRSRVNUQ2xpZW50IGZyb20gXCIuL0RlZmF1bHRSRVNUQ2xpZW50XCI7XG5pbXBvcnQgSVJFU1RDbGllbnRCdWlsZGVyIGZyb20gXCIuL0lSRVNUQ2xpZW50QnVpbGRlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIgaW1wbGVtZW50cyBJUkVTVENsaWVudEJ1aWxkZXIge1xuICBidWlsZDxSVCwgRVJUPihob3N0OiBzdHJpbmcpOiBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgcmV0dXJuIG5ldyBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPihob3N0KTtcbiAgfVxufVxuIiwiLypcbiogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjIsIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbipcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbipcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IElSRVNUQ2xpZW50IGZyb20gXCIuL0lSRVNUQ2xpZW50XCJcbmltcG9ydCBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIgZnJvbSBcIi4vRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyXCI7XG5pbXBvcnQgSVJFU1RDbGllbnRCdWlsZGVyIGZyb20gXCIuL0lSRVNUQ2xpZW50QnVpbGRlclwiO1xuaW1wb3J0IENsaWVudFJlc3BvbnNlIGZyb20gXCIuL0NsaWVudFJlc3BvbnNlXCI7XG5pbXBvcnQge1JlcXVlc3RDcmVkZW50aWFsc30gZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCB7VVJMU2VhcmNoUGFyYW1zfSBmcm9tIFwidXJsXCI7XG5cbmV4cG9ydCBjbGFzcyBGdXNpb25BdXRoQ2xpZW50IHtcbiAgcHVibGljIGNsaWVudEJ1aWxkZXI6IElSRVNUQ2xpZW50QnVpbGRlciA9IG5ldyBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIoKTtcbiAgcHVibGljIGNyZWRlbnRpYWxzOiBSZXF1ZXN0Q3JlZGVudGlhbHM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFwaUtleTogc3RyaW5nLFxuICAgIHB1YmxpYyBob3N0OiBzdHJpbmcsXG4gICAgcHVibGljIHRlbmFudElkPzogc3RyaW5nLFxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZW5hbnQgaWQsIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgWC1GdXNpb25BdXRoLVRlbmFudElkIGhlYWRlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSB0ZW5hbnRJZCBUaGUgdmFsdWUgb2YgdGhlIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCBoZWFkZXIuXG4gICAqIEByZXR1cm5zIHtGdXNpb25BdXRoQ2xpZW50fVxuICAgKi9cbiAgc2V0VGVuYW50SWQodGVuYW50SWQ6IHN0cmluZyB8IG51bGwpOiBGdXNpb25BdXRoQ2xpZW50IHtcbiAgICB0aGlzLnRlbmFudElkID0gdGVuYW50SWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB3aGV0aGVyIGFuZCBob3cgY29va2llcyB3aWxsIGJlIHNlbnQgd2l0aCBlYWNoIHJlcXVlc3QuXG4gICAqIFxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgYW5kIGhvdyBjb29raWVzIHdpbGwgYmUgc2VudC5cbiAgICogQHJldHVybnMge0Z1c2lvbkF1dGhDbGllbnR9XG4gICAqL1xuICBzZXRSZXF1ZXN0Q3JlZGVudGlhbHModmFsdWU6IFJlcXVlc3RDcmVkZW50aWFscyk6IEZ1c2lvbkF1dGhDbGllbnQge1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhbiBhY3Rpb24gb24gYSB1c2VyLiBUaGUgdXNlciBiZWluZyBhY3Rpb25lZCBpcyBjYWxsZWQgdGhlIFwiYWN0aW9uZWVcIiBhbmQgdGhlIHVzZXIgdGFraW5nIHRoZSBhY3Rpb24gaXMgY2FsbGVkIHRoZVxuICAgKiBcImFjdGlvbmVyXCIuIEJvdGggdXNlciBpZHMgYXJlIHJlcXVpcmVkIGluIHRoZSByZXF1ZXN0IG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSBhY3Rpb24gcmVxdWVzdCB0aGF0IGluY2x1ZGVzIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjdGlvbiBiZWluZyB0YWtlbiBpbmNsdWRpbmdcbiAgICogICAgdGhlIGlkIG9mIHRoZSBhY3Rpb24sIGFueSBvcHRpb25zIGFuZCB0aGUgZHVyYXRpb24gKGlmIGFwcGxpY2FibGUpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgYWN0aW9uVXNlcihyZXF1ZXN0OiBBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGVzIHRoZSBGdXNpb25BdXRoIFJlYWN0b3IgdXNpbmcgYSBsaWNlbnNlIGlkIGFuZCBvcHRpb25hbGx5IGEgbGljZW5zZSB0ZXh0IChmb3IgYWlyLWdhcHBlZCBkZXBsb3ltZW50cylcbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdG9yUmVxdWVzdH0gcmVxdWVzdCBBbiBvcHRpb25hbCByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGxpY2Vuc2UgdGV4dCB0byBhY3RpdmF0ZSBSZWFjdG9yICh1c2VmdWwgZm9yIGFpci1nYXAgZGVwbG95bWVudHMgb2YgRnVzaW9uQXV0aCkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGFjdGl2YXRlUmVhY3RvcihyZXF1ZXN0OiBSZWFjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB1c2VyIHRvIGFuIGV4aXN0aW5nIGZhbWlseS4gVGhlIGZhbWlseSBpZCBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmYW1pbHlJZCBUaGUgaWQgb2YgdGhlIGZhbWlseS5cbiAgICogQHBhcmFtIHtGYW1pbHlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggdXNlciB0byBhZGQgdG8gdGhlIGZhbWlseS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGFkZFVzZXJUb0ZhbWlseShmYW1pbHlJZDogVVVJRCwgcmVxdWVzdDogRmFtaWx5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RmFtaWx5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmYW1pbHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIHRoZSB1c2VyIGFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY3Rpb25JZCBUaGUgYWN0aW9uIGlkIG9mIHRoZSBhY3Rpb24gdG8gY2FuY2VsLlxuICAgKiBAcGFyYW0ge0FjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIGFjdGlvbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYW5jZWxsYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBjYW5jZWxBY3Rpb24oYWN0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYWN0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyBhIHVzZXIncyBwYXNzd29yZCB1c2luZyB0aGUgY2hhbmdlIHBhc3N3b3JkIElkLiBUaGlzIHVzdWFsbHkgb2NjdXJzIGFmdGVyIGFuIGVtYWlsIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHVzZXJcbiAgICogYW5kIHRoZXkgY2xpY2tlZCBvbiBhIGxpbmsgdG8gcmVzZXQgdGhlaXIgcGFzc3dvcmQuXG4gICAqIFxuICAgKiBBcyBvZiB2ZXJzaW9uIDEuMzIuMiwgcHJlZmVyIHNlbmRpbmcgdGhlIGNoYW5nZVBhc3N3b3JkSWQgaW4gdGhlIHJlcXVlc3QgYm9keS4gVG8gZG8gdGhpcywgb21pdCB0aGUgZmlyc3QgcGFyYW1ldGVyLCBhbmQgc2V0XG4gICAqIHRoZSB2YWx1ZSBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgY2hhbmdlIHBhc3N3b3JkIElkIHVzZWQgdG8gZmluZCB0aGUgdXNlci4gVGhpcyB2YWx1ZSBpcyBnZW5lcmF0ZWQgYnkgRnVzaW9uQXV0aCBvbmNlIHRoZSBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkLlxuICAgKiBAcGFyYW0ge0NoYW5nZVBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZT4+fVxuICAgKi9cbiAgY2hhbmdlUGFzc3dvcmQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nLCByZXF1ZXN0OiBDaGFuZ2VQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENoYW5nZVBhc3N3b3JkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNoYW5nZVBhc3N3b3JkSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgYSB1c2VyJ3MgcGFzc3dvcmQgdXNpbmcgdGhlaXIgaWRlbnRpdHkgKGxvZ2luIGlkIGFuZCBwYXNzd29yZCkuIFVzaW5nIGEgbG9naW5JZCBpbnN0ZWFkIG9mIHRoZSBjaGFuZ2VQYXNzd29yZElkXG4gICAqIGJ5cGFzc2VzIHRoZSBlbWFpbCB2ZXJpZmljYXRpb24gYW5kIGFsbG93cyBhIHBhc3N3b3JkIHRvIGJlIGNoYW5nZWQgZGlyZWN0bHkgd2l0aG91dCBmaXJzdCBjYWxsaW5nIHRoZSAjZm9yZ290UGFzc3dvcmRcbiAgICogbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge0NoYW5nZVBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hhbmdlUGFzc3dvcmRCeUlkZW50aXR5KHJlcXVlc3Q6IENoYW5nZVBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAwIHdpdGggYSBnZW5lcmFsIGVycm9yIGNvZGUgb2YgW1RydXN0VG9rZW5SZXF1aXJlZF0gaW5kaWNhdGVzIHRoYXQgYSBUcnVzdCBUb2tlbiBpcyByZXF1aXJlZCB0byBtYWtlIGEgUE9TVCByZXF1ZXN0IHRvIHRoaXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgY2hhbmdlIHBhc3N3b3JkIElkIHVzZWQgdG8gZmluZCB0aGUgdXNlci4gVGhpcyB2YWx1ZSBpcyBnZW5lcmF0ZWQgYnkgRnVzaW9uQXV0aCBvbmNlIHRoZSBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdJZChjaGFuZ2VQYXNzd29yZElkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNoYW5nZVBhc3N3b3JkSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nSldUKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBsb2dpbklkIG9mIHRoZSBVc2VyIHRoYXQgeW91IGludGVuZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nTG9naW5JZChsb2dpbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJuYW1lJywgbG9naW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNvbW1lbnQgdG8gdGhlIHVzZXIncyBhY2NvdW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1VzZXJDb21tZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB1c2VyIGNvbW1lbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNvbW1lbnRPblVzZXIocmVxdWVzdDogVXNlckNvbW1lbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbW1lbnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEFQSSBrZXkuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgdW5pcXVlIElkIGZvciB0aGUga2V5LCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBhbiBBUEkga2V5IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2l0aCBlcXVhbCBvciBsZXNzZXIgYXV0aG9yaXR5LiBBbiBBUEkga2V5IGNhbm5vdCBjcmVhdGUgYW5vdGhlciBBUEkga2V5IHVubGVzcyBpdCBpcyBncmFudGVkIFxuICAgKiB0byB0aGF0IEFQSSBrZXkuXG4gICAqIFxuICAgKiBJZiBhbiBBUEkga2V5IGlzIGxvY2tlZCB0byBhIHRlbmFudCwgaXQgY2FuIG9ubHkgY3JlYXRlIEFQSSBLZXlzIGZvciB0aGF0IHNhbWUgdGVuYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgQVBJIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBJZCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBUElLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSB0aGUgQVBJS2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQVBJS2V5KGtleUlkOiBVVUlELCByZXF1ZXN0OiBBUElLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBUElLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwaS1rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24uIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgYXBwbGljYXRpb24sIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBJZCB0byB1c2UgZm9yIHRoZSBhcHBsaWNhdGlvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBhcHBsaWNhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHJvbGUgZm9yIGFuIGFwcGxpY2F0aW9uLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24geW91IGFyZSBjcmVhdGluZyB0aGUgcm9sZSBmb3IuXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgcm9sZSBpbnNpZGUgdGhlIEFwcGxpY2F0aW9uUm9sZSBvYmplY3QgaXRzZWxmLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBjcmVhdGUgdGhlIHJvbGUgb24uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSByb2xlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGFwcGxpY2F0aW9uIHJvbGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUFwcGxpY2F0aW9uUm9sZShhcHBsaWNhdGlvbklkOiBVVUlELCByb2xlSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicm9sZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocm9sZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGF1ZGl0IGxvZyB3aXRoIHRoZSBtZXNzYWdlIGFuZCB1c2VyIG5hbWUgKHVzdWFsbHkgYW4gZW1haWwpLiBBdWRpdCBsb2dzIHNob3VsZCBiZSB3cml0dGVuIGFueXRpbWUgeW91XG4gICAqIG1ha2UgY2hhbmdlcyB0byB0aGUgRnVzaW9uQXV0aCBkYXRhYmFzZS4gV2hlbiB1c2luZyB0aGUgRnVzaW9uQXV0aCBBcHAgd2ViIGludGVyZmFjZSwgYW55IGNoYW5nZXMgYXJlIGF1dG9tYXRpY2FsbHlcbiAgICogd3JpdHRlbiB0byB0aGUgYXVkaXQgbG9nLiBIb3dldmVyLCBpZiB5b3UgYXJlIGFjY2Vzc2luZyB0aGUgQVBJLCB5b3UgbXVzdCB3cml0ZSB0aGUgYXVkaXQgbG9ncyB5b3Vyc2VsZi5cbiAgICpcbiAgICogQHBhcmFtIHtBdWRpdExvZ1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgYXVkaXQgbG9nIGVudHJ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVBdWRpdExvZyhyZXF1ZXN0OiBBdWRpdExvZ1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXVkaXRMb2dSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9hdWRpdC1sb2cnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY29ubmVjdG9yLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBjb25uZWN0b3IsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBjb25uZWN0b3IuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtDb25uZWN0b3JSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGNvbm5lY3Rvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCwgcmVxdWVzdDogQ29ubmVjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyIGNvbnNlbnQgdHlwZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBjb25zZW50IHR5cGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgY29uc2VudC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0NvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGNvbnNlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQ29uc2VudChjb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IENvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZW1haWwgdGVtcGxhdGUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdGVtcGxhdGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdGVtcGxhdGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtFbWFpbFRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBlbWFpbCB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogRW1haWxUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gRW50aXR5LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIEVudGl0eS4gSWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIEVudGl0eS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VudGl0eVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgRW50aXR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5KGVudGl0eUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEVudGl0eSBUeXBlLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIEVudGl0eSBUeXBlLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIEVudGl0eSBUeXBlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgRW50aXR5IFR5cGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5VHlwZShlbnRpdHlUeXBlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBlcm1pc3Npb24gZm9yIGFuIGVudGl0eSB0eXBlLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBpZCBvZiB0aGUgZW50aXR5IHR5cGUgeW91IGFyZSBjcmVhdGluZyB0aGUgcGVybWlzc2lvbiBmb3IuXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgcGVybWlzc2lvbiBpbnNpZGUgdGhlIEVudGl0eVR5cGVQZXJtaXNzaW9uIG9iamVjdCBpdHNlbGYsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgZW50aXR5IHR5cGUgdG8gY3JlYXRlIHRoZSBwZXJtaXNzaW9uIG9uLlxuICAgKiBAcGFyYW0ge1VVSUR9IHBlcm1pc3Npb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgcGVybWlzc2lvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHBlcm1pc3Npb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5VHlwZVBlcm1pc3Npb24oZW50aXR5VHlwZUlkOiBVVUlELCBwZXJtaXNzaW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJwZXJtaXNzaW9uXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZXJtaXNzaW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmYW1pbHkgd2l0aCB0aGUgdXNlciBpZCBpbiB0aGUgcmVxdWVzdCBhcyB0aGUgb3duZXIgYW5kIHNvbGUgbWVtYmVyIG9mIHRoZSBmYW1pbHkuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIGlkIGZvciB0aGVcbiAgICogZmFtaWx5LCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIChPcHRpb25hbCkgVGhlIGlkIGZvciB0aGUgZmFtaWx5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RmFtaWx5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBmYW1pbHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVGYW1pbHkoZmFtaWx5SWQ6IFVVSUQsIHJlcXVlc3Q6IEZhbWlseVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZhbWlseVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb3JtLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBmb3JtLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZvcm1JZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGZvcm0uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtGb3JtUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBmb3JtLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUZvcm0oZm9ybUlkOiBVVUlELCByZXF1ZXN0OiBGb3JtUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZm9ybSBmaWVsZC4gIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgZm9ybSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgZm9ybSBmaWVsZC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0Zvcm1GaWVsZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZm9ybSBmaWVsZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlELCByZXF1ZXN0OiBGb3JtRmllbGRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGdyb3VwLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGdyb3VwLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBncm91cC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0dyb3VwUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBncm91cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlR3JvdXAoZ3JvdXBJZDogVVVJRCwgcmVxdWVzdDogR3JvdXBSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChncm91cElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbWVtYmVyIGluIGEgZ3JvdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7TWVtYmVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBncm91cCBtZW1iZXIocykuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lbWJlclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVHcm91cE1lbWJlcnMocmVxdWVzdDogTWVtYmVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVtYmVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVtYmVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9tZW1iZXInKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIElQIEFjY2VzcyBDb250cm9sIExpc3QuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIG9uIHRoaXMgY3JlYXRlIHJlcXVlc3QsIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjY2Vzc0NvbnRyb2xMaXN0SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7SVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVJUEFjY2Vzc0NvbnRyb2xMaXN0KGFjY2Vzc0NvbnRyb2xMaXN0SWQ6IFVVSUQsIHJlcXVlc3Q6IElQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjY2Vzc0NvbnRyb2xMaXN0SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgcHJvdmlkZXIuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgaWRlbnRpdHkgcHJvdmlkZXIsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUlkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCByZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIExhbWJkYS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBsYW1iZGEsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBsYW1iZGEuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtMYW1iZGFSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGxhbWJkYS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUxhbWJkYShsYW1iZGFJZDogVVVJRCwgcmVxdWVzdDogTGFtYmRhUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gbWVzc2FnZSB0ZW1wbGF0ZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0ZW1wbGF0ZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHRlbXBsYXRlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNzYWdlIHRlbXBsYXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2FnZVRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtZXNzZW5nZXIuICBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIG1lc3NlbmdlciwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIG1lc3Nlbmdlci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge01lc3NlbmdlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzc2VuZ2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlELCByZXF1ZXN0OiBNZXNzZW5nZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRlbmFudC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0ZW5hbnQsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB0ZW5hbnQuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtUZW5hbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHRlbmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCwgcmVxdWVzdDogVGVuYW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBUaGVtZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0aGVtZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdGhlbWUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtUaGVtZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdGhlbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVRoZW1lKHRoZW1lSWQ6IFVVSUQsIHJlcXVlc3Q6IFRoZW1lUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVzZXIuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdXNlciwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB1c2VyLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVXNlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVzZXIgYWN0aW9uLiBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdGFrZW4gb24gYSB1c2VyIHVudGlsIHRoaXMgY2FsbCBzdWNjZXNzZnVsbHkgcmV0dXJucy4gQW55dGltZSBhZnRlclxuICAgKiB0aGF0IHRoZSB1c2VyIGFjdGlvbiBjYW4gYmUgYXBwbGllZCB0byBhbnkgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB1c2VyIGFjdGlvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVzZXIgYWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVzZXIgcmVhc29uLiBUaGlzIHVzZXIgYWN0aW9uIHJlYXNvbiBjYW5ub3QgYmUgdXNlZCB3aGVuIGFjdGlvbmluZyBhIHVzZXIgdW50aWwgdGhpcyBjYWxsIGNvbXBsZXRlc1xuICAgKiBzdWNjZXNzZnVsbHkuIEFueXRpbWUgYWZ0ZXIgdGhhdCB0aGUgdXNlciBhY3Rpb24gcmVhc29uIGNhbiBiZSB1c2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZWFzb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyQWN0aW9uUmVhc29uKHVzZXJBY3Rpb25SZWFzb25JZDogVVVJRCwgcmVxdWVzdDogVXNlckFjdGlvblJlYXNvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbi1yZWFzb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvblJlYXNvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2luZ2xlIFVzZXIgY29uc2VudC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgVXNlciBjb25zZW50LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlckNvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY29uc2VudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogVXNlckNvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogTGluayBhbiBleHRlcm5hbCB1c2VyIGZyb20gYSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIgdG8gYSBGdXNpb25BdXRoIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlckxpbmtSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBsaW5rIHRoZSBGdXNpb25BdXRoIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXJMaW5rKHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJMaW5rUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluaycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB3ZWJob29rLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHdlYmhvb2ssIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgd2ViaG9vay4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1dlYmhvb2tSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlV2ViaG9vayh3ZWJob29rSWQ6IFVVSUQsIHJlcXVlc3Q6IFdlYmhvb2tSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vaycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSBGdXNpb25BdXRoIFJlYWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVSZWFjdG9yKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3InKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VyIGFjdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWFjdGl2YXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIGlkcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSB1c2VySWRzIFRoZSBpZHMgb2YgdGhlIHVzZXJzIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlYWN0aXZhdGVVc2Vyc0J5SWRzLCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIGRlYWN0aXZhdGVVc2Vycyh1c2VySWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckRlbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9idWxrJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZHMpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdkcnlSdW4nLCBmYWxzZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIGlkcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSB1c2VySWRzIFRoZSBpZHMgb2YgdGhlIHVzZXJzIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXJzQnlJZHModXNlcklkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWRzKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZHJ5UnVuJywgZmFsc2UpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgZmFsc2UpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIEFQSSBrZXkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIEFQSSBrZXkgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVBUElLZXkoa2V5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwaS1rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmQgZGVsZXRlcyBhbiBhcHBsaWNhdGlvbi4gVGhpcyBpcyBhIGRhbmdlcm91cyBvcGVyYXRpb24gYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBtb3N0IGNpcmN1bXN0YW5jZXMuIFRoaXMgd2lsbFxuICAgKiBkZWxldGUgdGhlIGFwcGxpY2F0aW9uLCBhbnkgcmVnaXN0cmF0aW9ucyBmb3IgdGhhdCBhcHBsaWNhdGlvbiwgbWV0cmljcyBhbmQgcmVwb3J0cyBmb3IgdGhlIGFwcGxpY2F0aW9uLCBhbGwgdGhlXG4gICAqIHJvbGVzIGZvciB0aGUgYXBwbGljYXRpb24sIGFuZCBhbnkgb3RoZXIgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcGxpY2F0aW9uLiBUaGlzIG9wZXJhdGlvbiBjb3VsZCB0YWtlIGEgdmVyeVxuICAgKiBsb25nIHRpbWUsIGRlcGVuZGluZyBvbiB0aGUgYW1vdW50IG9mIGRhdGEgaW4geW91ciBkYXRhYmFzZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmQgZGVsZXRlcyBhbiBhcHBsaWNhdGlvbiByb2xlLiBUaGlzIGlzIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG1vc3QgY2lyY3Vtc3RhbmNlcy4gVGhpc1xuICAgKiBwZXJtYW5lbnRseSByZW1vdmVzIHRoZSBnaXZlbiByb2xlIGZyb20gYWxsIHVzZXJzIHRoYXQgaGFkIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBkZWFjdGl2YXRlLlxuICAgKiBAcGFyYW0ge1VVSUR9IHJvbGVJZCBUaGUgSWQgb2YgdGhlIHJvbGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVBcHBsaWNhdGlvblJvbGUoYXBwbGljYXRpb25JZDogVVVJRCwgcm9sZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGNvbm5lY3RvciBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIFRoZSBJZCBvZiB0aGUgY29ubmVjdG9yIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQ29ubmVjdG9yKGNvbm5lY3RvcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGNvbnNlbnQgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQ29uc2VudChjb25zZW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29uc2VudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBlbWFpbCB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIGVtYWlsIHRlbXBsYXRlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW1haWxUZW1wbGF0ZShlbWFpbFRlbXBsYXRlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgRW50aXR5IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHkoZW50aXR5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhbiBFbnRpdHkgR3JhbnQgZm9yIHRoZSBnaXZlbiBVc2VyIG9yIEVudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgYmVpbmcgZGVsZXRlZCBmb3IuXG4gICAqIEBwYXJhbSB7VVVJRH0gcmVjaXBpZW50RW50aXR5SWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIEVudGl0eSB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgZm9yLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgVXNlciB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHlHcmFudChlbnRpdHlJZDogVVVJRCwgcmVjaXBpZW50RW50aXR5SWQ6IFVVSUQsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJncmFudFwiKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVjaXBpZW50RW50aXR5SWQnLCByZWNpcGllbnRFbnRpdHlJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgRW50aXR5IFR5cGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmQgZGVsZXRlcyBhIHBlcm1pc3Npb24uIFRoaXMgaXMgYSBkYW5nZXJvdXMgb3BlcmF0aW9uIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbW9zdCBjaXJjdW1zdGFuY2VzLiBUaGlzXG4gICAqIHBlcm1hbmVudGx5IHJlbW92ZXMgdGhlIGdpdmVuIHBlcm1pc3Npb24gZnJvbSBhbGwgZ3JhbnRzIHRoYXQgaGFkIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIGVudGl0eVR5cGUgdGhlIHRoZSBwZXJtaXNzaW9uIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcGVybWlzc2lvbklkIFRoZSBJZCBvZiB0aGUgcGVybWlzc2lvbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVudGl0eVR5cGVQZXJtaXNzaW9uKGVudGl0eVR5cGVJZDogVVVJRCwgcGVybWlzc2lvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInBlcm1pc3Npb25cIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHBlcm1pc3Npb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgZm9ybSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZvcm1JZCBUaGUgSWQgb2YgdGhlIGZvcm0gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVGb3JtKGZvcm1JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmb3JtSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGZvcm0gZmllbGQgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIFRoZSBJZCBvZiB0aGUgZm9ybSBmaWVsZCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtL2ZpZWxkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZpZWxkSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGdyb3VwIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZ3JvdXBJZCBUaGUgSWQgb2YgdGhlIGdyb3VwIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlR3JvdXAoZ3JvdXBJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB1c2VycyBhcyBtZW1iZXJzIG9mIGEgZ3JvdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7TWVtYmVyRGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgbWVtYmVyIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gcmVtb3ZlIG1lbWJlcnMgdG8gdGhlIGdyb3VwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVHcm91cE1lbWJlcnMocmVxdWVzdDogTWVtYmVyRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaXBBY2Nlc3NDb250cm9sTGlzdElkIFRoZSBJZCBvZiB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUlQQWNjZXNzQ29udHJvbExpc3QoaXBBY2Nlc3NDb250cm9sTGlzdElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pcC1hY2wnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaXBBY2Nlc3NDb250cm9sTGlzdElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlSWRlbnRpdHlQcm92aWRlcihpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUga2V5IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBrZXkgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVLZXkoa2V5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgbGFtYmRhIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgVGhlIElkIG9mIHRoZSBsYW1iZGEgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVMYW1iZGEobGFtYmRhSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZU1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgbWVzc2VuZ2VyIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgVGhlIElkIG9mIHRoZSBtZXNzZW5nZXIgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVNZXNzZW5nZXIobWVzc2VuZ2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciByZWdpc3RyYXRpb24gZm9yIHRoZSBnaXZlbiB1c2VyIGFuZCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHdob3NlIHJlZ2lzdHJhdGlvbiBpcyBiZWluZyBkZWxldGVkLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byByZW1vdmUgdGhlIHJlZ2lzdHJhdGlvbiBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgcmVnaXN0cmF0aW9uIGZvciB0aGUgZ2l2ZW4gdXNlciBhbmQgYXBwbGljYXRpb24gYWxvbmcgd2l0aCB0aGUgZ2l2ZW4gSlNPTiBib2R5IHRoYXQgY29udGFpbnMgdGhlIGV2ZW50IGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgd2hvc2UgcmVnaXN0cmF0aW9uIGlzIGJlaW5nIGRlbGV0ZWQuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHJlbW92ZSB0aGUgcmVnaXN0cmF0aW9uIGZvci5cbiAgICogQHBhcmFtIHtSZWdpc3RyYXRpb25EZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGJvZHkgdGhhdCBjb250YWlucyB0aGUgZXZlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVJlZ2lzdHJhdGlvbldpdGhSZXF1ZXN0KHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogUmVnaXN0cmF0aW9uRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB0ZW5hbnQgYmFzZWQgb24gdGhlIGdpdmVuIElkIG9uIHRoZSBVUkwuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB0ZW5hbnQgYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIHRlbmFudCAoYXBwbGljYXRpb25zLCB1c2VycywgZXRjKS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB0ZW5hbnQgZm9yIHRoZSBnaXZlbiBJZCBhc3luY2hyb25vdXNseS5cbiAgICogVGhpcyBtZXRob2QgaXMgaGVscGZ1bCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gd2FpdCBmb3IgdGhlIGRlbGV0ZSBvcGVyYXRpb24gdG8gY29tcGxldGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUZW5hbnRBc3luYyh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXN5bmMnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB0ZW5hbnQgYmFzZWQgb24gdGhlIGdpdmVuIHJlcXVlc3QgKHNlbnQgdG8gdGhlIEFQSSBhcyBKU09OKS4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIGFsbCBpbmZvcm1hdGlvbiwgbWV0cmljcywgcmVwb3J0cyBhbmQgZGF0YSBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHRlbmFudCBhbmQgZXZlcnl0aGluZyB1bmRlciB0aGUgdGVuYW50IChhcHBsaWNhdGlvbnMsIHVzZXJzLCBldGMpLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtUZW5hbnREZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBkZWxldGUgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVRlbmFudFdpdGhSZXF1ZXN0KHRlbmFudElkOiBVVUlELCByZXF1ZXN0OiBUZW5hbnREZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGhlbWUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIFRoZSBJZCBvZiB0aGUgdGhlbWUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUaGVtZSh0aGVtZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0aGVtZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gSWQuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBhY3Rpb24gZm9yIHRoZSBnaXZlbiBJZC4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZSB1c2VyIGFjdGlvbiBhbmQgYWxzbyBhbnkgaGlzdG9yeSBhbmQgbG9ncyBvZlxuICAgKiB0aGUgYWN0aW9uIGJlaW5nIGFwcGxpZWQgdG8gYW55IHVzZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVVc2VyQWN0aW9uUmVhc29uKHVzZXJBY3Rpb25SZWFzb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV4aXN0aW5nIGxpbmsgdGhhdCBoYXMgYmVlbiBtYWRlIGZyb20gYSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIgdG8gYSBGdXNpb25BdXRoIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpdHlQcm92aWRlclVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB1c2VyIGluIHRoZSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIgdG8gdW5saW5rLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBGdXNpb25BdXRoIHVzZXIgdG8gdW5saW5rLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj59XG4gICAqL1xuICBkZWxldGVVc2VyTGluayhpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ6IHN0cmluZywgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJVc2VySWQnLCBpZGVudGl0eVByb3ZpZGVyVXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIGJhc2VkIG9uIHRoZSBnaXZlbiByZXF1ZXN0IChzZW50IHRvIHRoZSBBUEkgYXMgSlNPTikuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZGVsZXRlIChyZXF1aXJlZCkuXG4gICAqIEBwYXJhbSB7VXNlckRlbGV0ZVNpbmdsZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGRlbGV0ZSB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlcldpdGhSZXF1ZXN0KHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVXNlckRlbGV0ZVNpbmdsZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIGlkcywgb3IgdXNlcnMgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIEpTT04gcXVlcnkgb3IgcXVlcnlTdHJpbmcuXG4gICAqIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGlzIGlkcywgcXVlcnkgYW5kIHRoZW4gcXVlcnlTdHJpbmcsIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgcHJvdmlkZSBvbmUgb2YgdGhlIHRocmVlIGZvciB0aGUgcmVxdWVzdC5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRlYWN0aXZhdGUgb3IgcGVybWFuZW50bHkgZGVsZXRlIChoYXJkLWRlbGV0ZSkgdXNlcnMgYmFzZWQgdXBvbiB0aGUgaGFyZERlbGV0ZSBib29sZWFuIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqIFVzaW5nIHRoZSBkcnlSdW4gcGFyYW1ldGVyIHlvdSBtYXkgYWxzbyByZXF1ZXN0IHRoZSByZXN1bHQgb2YgdGhlIGFjdGlvbiB3aXRob3V0IGFjdHVhbGx5IGRlbGV0aW5nIG9yIGRlYWN0aXZhdGluZyBhbnkgdXNlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIFVzZXJEZWxldGVSZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBkZWxldGVVc2Vyc0J5UXVlcnksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgZGVsZXRlVXNlcnMocmVxdWVzdDogVXNlckRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIGlkcywgb3IgdXNlcnMgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIEpTT04gcXVlcnkgb3IgcXVlcnlTdHJpbmcuXG4gICAqIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGlzIGlkcywgcXVlcnkgYW5kIHRoZW4gcXVlcnlTdHJpbmcsIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgcHJvdmlkZSBvbmUgb2YgdGhlIHRocmVlIGZvciB0aGUgcmVxdWVzdC5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRlYWN0aXZhdGUgb3IgcGVybWFuZW50bHkgZGVsZXRlIChoYXJkLWRlbGV0ZSkgdXNlcnMgYmFzZWQgdXBvbiB0aGUgaGFyZERlbGV0ZSBib29sZWFuIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqIFVzaW5nIHRoZSBkcnlSdW4gcGFyYW1ldGVyIHlvdSBtYXkgYWxzbyByZXF1ZXN0IHRoZSByZXN1bHQgb2YgdGhlIGFjdGlvbiB3aXRob3V0IGFjdHVhbGx5IGRlbGV0aW5nIG9yIGRlYWN0aXZhdGluZyBhbnkgdXNlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIFVzZXJEZWxldGVSZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJzQnlRdWVyeShyZXF1ZXN0OiBVc2VyRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgd2ViaG9vayBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tJZCBUaGUgSWQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVXZWJob29rKHdlYmhvb2tJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vaycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIFVzZXIgZm9yIHdoaWNoIHlvdSdyZSBkaXNhYmxpbmcgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZElkIFRoZSB0d28tZmFjdG9yIG1ldGhvZCBpZGVudGlmaWVyIHlvdSB3aXNoIHRvIGRpc2FibGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVGhlIFR3byBGYWN0b3IgY29kZSB1c2VkIHZlcmlmeSB0aGUgdGhlIGNhbGxlciBrbm93cyB0aGUgVHdvIEZhY3RvciBzZWNyZXQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRpc2FibGVUd29GYWN0b3IodXNlcklkOiBVVUlELCBtZXRob2RJZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdHdvLWZhY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdtZXRob2RJZCcsIG1ldGhvZElkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignY29kZScsIGNvZGUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSB1c2VyIHVzaW5nIGEgSlNPTiBib2R5IHJhdGhlciB0aGFuIFVSTCBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIFVzZXIgZm9yIHdoaWNoIHlvdSdyZSBkaXNhYmxpbmcgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtUd29GYWN0b3JEaXNhYmxlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBpbmZvcm1hdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBjb2RlIGFuZCBtZXRob2RJZCBhbG9uZyB3aXRoIGFueSBldmVudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGlzYWJsZVR3b0ZhY3RvcldpdGhSZXF1ZXN0KHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVHdvRmFjdG9yRGlzYWJsZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdHdvLWZhY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGVuYWJsZSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclJlcXVlc3R9IHJlcXVlc3QgVGhlIHR3byBmYWN0b3IgZW5hYmxlIHJlcXVlc3QgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICBlbmFibGVUd29GYWN0b3IodXNlcklkOiBVVUlELCByZXF1ZXN0OiBUd29GYWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUd29GYWN0b3JSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdHdvLWZhY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlcyBhbiBPQXV0aCBhdXRob3JpemF0aW9uIGNvZGUgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICogTWFrZXMgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIGZyb20gdGhlIEF1dGhvcml6ZSBlbmRwb2ludCBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIG9uIHRoZSAvb2F1dGgyL2F1dGhvcml6ZSByZXNwb25zZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHJlcXVpcmVkIGlmIGNsaWVudCBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVkaXJlY3RfdXJpIFRoZSBVUkkgdG8gcmVkaXJlY3QgdG8gdXBvbiBhIHN1Y2Nlc3NmdWwgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlT0F1dGhDb2RlRm9yQWNjZXNzVG9rZW4oY29kZTogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCByZWRpcmVjdF91cmk6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY29kZScsIGNvZGUpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAnYXV0aG9yaXphdGlvbl9jb2RlJyk7XG4gICAgYm9keS5hcHBlbmQoJ3JlZGlyZWN0X3VyaScsIHJlZGlyZWN0X3VyaSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZXMgYW4gT0F1dGggYXV0aG9yaXphdGlvbiBjb2RlIGFuZCBjb2RlX3ZlcmlmaWVyIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqIE1ha2VzIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBmcm9tIHRoZSBBdXRob3JpemUgZW5kcG9pbnQgYW5kIGEgY29kZV92ZXJpZmllciBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIG9uIHRoZSAvb2F1dGgyL2F1dGhvcml6ZSByZXNwb25zZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcm92aWRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVkaXJlY3RfdXJpIFRoZSBVUkkgdG8gcmVkaXJlY3QgdG8gdXBvbiBhIHN1Y2Nlc3NmdWwgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGVfdmVyaWZpZXIgVGhlIHJhbmRvbSBzdHJpbmcgZ2VuZXJhdGVkIHByZXZpb3VzbHkuIFdpbGwgYmUgY29tcGFyZWQgd2l0aCB0aGUgY29kZV9jaGFsbGVuZ2Ugc2VudCBwcmV2aW91c2x5LCB3aGljaCBhbGxvd3MgdGhlIE9BdXRoIHByb3ZpZGVyIHRvIGF1dGhlbnRpY2F0ZSB5b3VyIGFwcC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlT0F1dGhDb2RlRm9yQWNjZXNzVG9rZW5Vc2luZ1BLQ0UoY29kZTogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCByZWRpcmVjdF91cmk6IHN0cmluZywgY29kZV92ZXJpZmllcjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjb2RlJywgY29kZSk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdhdXRob3JpemF0aW9uX2NvZGUnKTtcbiAgICBib2R5LmFwcGVuZCgncmVkaXJlY3RfdXJpJywgcmVkaXJlY3RfdXJpKTtcbiAgICBib2R5LmFwcGVuZCgnY29kZV92ZXJpZmllcicsIGNvZGVfdmVyaWZpZXIpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgYSBSZWZyZXNoIFRva2VuIGZvciBhbiBBY2Nlc3MgVG9rZW4uXG4gICAqIElmIHlvdSB3aWxsIGJlIHVzaW5nIHRoZSBSZWZyZXNoIFRva2VuIEdyYW50LCB5b3Ugd2lsbCBtYWtlIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIHVzZXLigJlzIHJlZnJlc2ggdG9rZW4gZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZnJlc2hfdG9rZW4gVGhlIHJlZnJlc2ggdG9rZW4gdGhhdCB5b3Ugd291bGQgbGlrZSB0byB1c2UgdG8gZXhjaGFuZ2UgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcm92aWRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgaWYgb21pdHRlZCwgdGhlIHNhbWUgc2NvcGUgcmVxdWVzdGVkIGR1cmluZyB0aGUgYXV0aG9yaXphdGlvbiByZXF1ZXN0IHdpbGwgYmUgdXNlZC4gSWYgcHJvdmlkZWQgdGhlIHNjb3BlcyBtdXN0IG1hdGNoIHRob3NlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGluaXRpYWwgYXV0aG9yaXphdGlvbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIChPcHRpb25hbCkgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLiBUaGlzIGNvZGUgaXMgcmVxdWlyZWQgaWYgdXNpbmcgdGhpcyBlbmRwb2ludCB0byBhcHByb3ZlIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlUmVmcmVzaFRva2VuRm9yQWNjZXNzVG9rZW4ocmVmcmVzaF90b2tlbjogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCBzY29wZTogc3RyaW5nLCB1c2VyX2NvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgncmVmcmVzaF90b2tlbicsIHJlZnJlc2hfdG9rZW4pO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAncmVmcmVzaF90b2tlbicpO1xuICAgIGJvZHkuYXBwZW5kKCdzY29wZScsIHNjb3BlKTtcbiAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgdXNlcl9jb2RlKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlIGEgcmVmcmVzaCB0b2tlbiBmb3IgYSBuZXcgSldULlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZnJlc2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZWZyZXNoIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFJlZnJlc2hSZXNwb25zZT4+fVxuICAgKi9cbiAgZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JKV1QocmVxdWVzdDogUmVmcmVzaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFJlZnJlc2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxKV1RSZWZyZXNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlIFVzZXIgQ3JlZGVudGlhbHMgZm9yIGEgVG9rZW4uXG4gICAqIElmIHlvdSB3aWxsIGJlIHVzaW5nIHRoZSBSZXNvdXJjZSBPd25lciBQYXNzd29yZCBDcmVkZW50aWFsIEdyYW50LCB5b3Ugd2lsbCBtYWtlIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIHVzZXLigJlzIGVtYWlsIGFuZCBwYXNzd29yZCBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcm5hbWUgVGhlIGxvZ2luIGlkZW50aWZpZXIgb2YgdGhlIHVzZXIuIFRoZSBsb2dpbiBpZGVudGlmaWVyIGNhbiBiZSBlaXRoZXIgdGhlIGVtYWlsIG9yIHRoZSB1c2VybmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSB1c2Vy4oCZcyBwYXNzd29yZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcm92aWRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgaWYgb21pdHRlZCwgdGhlIHNhbWUgc2NvcGUgcmVxdWVzdGVkIGR1cmluZyB0aGUgYXV0aG9yaXphdGlvbiByZXF1ZXN0IHdpbGwgYmUgdXNlZC4gSWYgcHJvdmlkZWQgdGhlIHNjb3BlcyBtdXN0IG1hdGNoIHRob3NlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGluaXRpYWwgYXV0aG9yaXphdGlvbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIChPcHRpb25hbCkgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLiBUaGlzIGNvZGUgaXMgcmVxdWlyZWQgaWYgdXNpbmcgdGhpcyBlbmRwb2ludCB0byBhcHByb3ZlIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlVXNlckNyZWRlbnRpYWxzRm9yQWNjZXNzVG9rZW4odXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgc2NvcGU6IHN0cmluZywgdXNlcl9jb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ3VzZXJuYW1lJywgdXNlcm5hbWUpO1xuICAgIGJvZHkuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ3Bhc3N3b3JkJyk7XG4gICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQmVnaW5zIHRoZSBmb3Jnb3QgcGFzc3dvcmQgc2VxdWVuY2UsIHdoaWNoIGtpY2tzIG9mZiBhbiBlbWFpbCB0byB0aGUgdXNlciBzbyB0aGF0IHRoZXkgY2FuIHJlc2V0IHRoZWlyIHBhc3N3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0ge0ZvcmdvdFBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBzbyB0aGF0IHRoZXkgY2FuIGJlIGVtYWlsZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcmdvdFBhc3N3b3JkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGZvcmdvdFBhc3N3b3JkKHJlcXVlc3Q6IEZvcmdvdFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mb3Jnb3QtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG5ldyBFbWFpbCBWZXJpZmljYXRpb24gSWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBWZXJpZnkgRW1haWwgQVBJLiBUaGlzIEFQSSB3aWxsIG5vdCBhdHRlbXB0IHRvIHNlbmQgYW5cbiAgICogZW1haWwgdG8gdGhlIFVzZXIuIFRoaXMgQVBJIG1heSBiZSB1c2VkIHRvIGNvbGxlY3QgdGhlIHZlcmlmaWNhdGlvbklkIGZvciB1c2Ugd2l0aCBhIHRoaXJkIHBhcnR5IHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZUVtYWlsVmVyaWZpY2F0aW9uSWQoZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlFbWFpbFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzZW5kVmVyaWZ5RW1haWwnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcgUlNBIG9yIEVDIGtleSBwYWlyIG9yIGFuIEhNQUMgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXkvZ2VuZXJhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IEFwcGxpY2F0aW9uIFJlZ2lzdHJhdGlvbiBWZXJpZmljYXRpb24gSWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBWZXJpZnkgUmVnaXN0cmF0aW9uIEFQSS4gVGhpcyBBUEkgd2lsbCBub3QgYXR0ZW1wdCB0byBzZW5kIGFuXG4gICAqIGVtYWlsIHRvIHRoZSBVc2VyLiBUaGlzIEFQSSBtYXkgYmUgdXNlZCB0byBjb2xsZWN0IHRoZSB2ZXJpZmljYXRpb25JZCBmb3IgdXNlIHdpdGggYSB0aGlyZCBwYXJ0eSBzeXN0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gYmUgdmVyaWZpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZVJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkKGVtYWlsOiBzdHJpbmcsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc2VuZFZlcmlmeVBhc3N3b3JkRW1haWwnLCBmYWxzZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIGZvciBhIHVzZXIuIEdlbmVyYXRpbmcgdHdvLWZhY3RvciByZWNvdmVyeSBjb2RlcyB3aWxsIGludmFsaWRhdGUgYW55IGV4aXN0aW5nIHJlY292ZXJ5IGNvZGVzLiBcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGdlbmVyYXRlIG5ldyBUd28gRmFjdG9yIHJlY292ZXJ5IGNvZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JSZWNvdmVyeUNvZGVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3IvcmVjb3ZlcnktY29kZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIFR3byBGYWN0b3Igc2VjcmV0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgVXNlci4gVGhlIHJlc3BvbnNlIHdpbGwgY29udGFpblxuICAgKiBib3RoIHRoZSBzZWNyZXQgYW5kIGEgQmFzZTMyIGVuY29kZWQgZm9ybSBvZiB0aGUgc2VjcmV0IHdoaWNoIGNhbiBiZSBzaG93biB0byBhIFVzZXIgd2hlbiB1c2luZyBhIDIgU3RlcCBBdXRoZW50aWNhdGlvblxuICAgKiBhcHBsaWNhdGlvbiBzdWNoIGFzIEdvb2dsZSBBdXRoZW50aWNhdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JTZWNyZXQoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWNyZXRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlY3JldCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgVHdvIEZhY3RvciBzZWNyZXQgdGhhdCBjYW4gYmUgdXNlZCB0byBlbmFibGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSBVc2VyLiBUaGUgcmVzcG9uc2Ugd2lsbCBjb250YWluXG4gICAqIGJvdGggdGhlIHNlY3JldCBhbmQgYSBCYXNlMzIgZW5jb2RlZCBmb3JtIG9mIHRoZSBzZWNyZXQgd2hpY2ggY2FuIGJlIHNob3duIHRvIGEgVXNlciB3aGVuIHVzaW5nIGEgMiBTdGVwIEF1dGhlbnRpY2F0aW9uXG4gICAqIGFwcGxpY2F0aW9uIHN1Y2ggYXMgR29vZ2xlIEF1dGhlbnRpY2F0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VjcmV0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlVHdvRmFjdG9yU2VjcmV0VXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxTZWNyZXRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlY3JldCcpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGxvZ2luIHZpYSB0aGlyZC1wYXJ0aWVzIGluY2x1ZGluZyBTb2NpYWwgbG9naW4sIGV4dGVybmFsIE9BdXRoIGFuZCBPcGVuSUQgQ29ubmVjdCwgYW5kIG90aGVyXG4gICAqIGxvZ2luIHN5c3RlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgdGhpcmQtcGFydHkgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGZyb20gdGhlIHRoaXJkLXBhcnR5IGxvZ2luXG4gICAqICAgIHByb3ZpZGVycyB0aGF0IEZ1c2lvbkF1dGggdXNlcyB0byByZWNvbmNpbGUgdGhlIHVzZXIncyBhY2NvdW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBpZGVudGl0eVByb3ZpZGVyTG9naW4ocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgUlNBIG9yIEVDIGtleSBwYWlyIG9yIGFuIEhNQUMgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICBpbXBvcnRLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5L2ltcG9ydCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVsayBpbXBvcnRzIHJlZnJlc2ggdG9rZW5zLiBUaGlzIHJlcXVlc3QgcGVyZm9ybXMgbWluaW1hbCB2YWxpZGF0aW9uIGFuZCBydW5zIGJhdGNoIGluc2VydHMgb2YgcmVmcmVzaCB0b2tlbnMgd2l0aCB0aGVcbiAgICogZXhwZWN0YXRpb24gdGhhdCBlYWNoIHRva2VuIHJlcHJlc2VudHMgYSB1c2VyIHRoYXQgYWxyZWFkeSBleGlzdHMgYW5kIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIEZ1c2lvbkF1dGhcbiAgICogQXBwbGljYXRpb24uIFRoaXMgaXMgZG9uZSB0byBpbmNyZWFzZXMgdGhlIGluc2VydCBwZXJmb3JtYW5jZS5cbiAgICogXG4gICAqIFRoZXJlZm9yZSwgaWYgeW91IGVuY291bnRlciBhbiBlcnJvciBkdWUgdG8gYSBkYXRhYmFzZSBrZXkgdmlvbGF0aW9uLCB0aGUgcmVzcG9uc2Ugd2lsbCBsaWtlbHkgb2ZmZXIgYSBnZW5lcmljXG4gICAqIGV4cGxhbmF0aW9uLiBJZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yLCB5b3UgbWF5IG9wdGlvbmFsbHkgZW5hYmxlIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiB0byByZWNlaXZlIGEgSlNPTiByZXNwb25zZVxuICAgKiBib2R5IHdpdGggc3BlY2lmaWMgdmFsaWRhdGlvbiBlcnJvcnMuIFRoaXMgd2lsbCBzbG93IHRoZSByZXF1ZXN0IGRvd24gYnV0IHdpbGwgYWxsb3cgeW91IHRvIGlkZW50aWZ5IHRoZSBjYXVzZSBvZlxuICAgKiB0aGUgZmFpbHVyZS4gU2VlIHRoZSB2YWxpZGF0ZURiQ29uc3RyYWludHMgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG9mIHRoZSByZWZyZXNoIHRva2VucyB0byBpbXBvcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGltcG9ydFJlZnJlc2hUb2tlbnMocmVxdWVzdDogUmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWZyZXNoLXRva2VuL2ltcG9ydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bGsgaW1wb3J0cyB1c2Vycy4gVGhpcyByZXF1ZXN0IHBlcmZvcm1zIG1pbmltYWwgdmFsaWRhdGlvbiBhbmQgcnVucyBiYXRjaCBpbnNlcnRzIG9mIHVzZXJzIHdpdGggdGhlIGV4cGVjdGF0aW9uXG4gICAqIHRoYXQgZWFjaCB1c2VyIGRvZXMgbm90IHlldCBleGlzdCBhbmQgZWFjaCByZWdpc3RyYXRpb24gY29ycmVzcG9uZHMgdG8gYW4gZXhpc3RpbmcgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbi4gVGhpcyBpcyBkb25lIHRvXG4gICAqIGluY3JlYXNlcyB0aGUgaW5zZXJ0IHBlcmZvcm1hbmNlLlxuICAgKiBcbiAgICogVGhlcmVmb3JlLCBpZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yIGR1ZSB0byBhIGRhdGFiYXNlIGtleSB2aW9sYXRpb24sIHRoZSByZXNwb25zZSB3aWxsIGxpa2VseSBvZmZlclxuICAgKiBhIGdlbmVyaWMgZXhwbGFuYXRpb24uIElmIHlvdSBlbmNvdW50ZXIgYW4gZXJyb3IsIHlvdSBtYXkgb3B0aW9uYWxseSBlbmFibGUgYWRkaXRpb25hbCB2YWxpZGF0aW9uIHRvIHJlY2VpdmUgYSBKU09OIHJlc3BvbnNlXG4gICAqIGJvZHkgd2l0aCBzcGVjaWZpYyB2YWxpZGF0aW9uIGVycm9ycy4gVGhpcyB3aWxsIHNsb3cgdGhlIHJlcXVlc3QgZG93biBidXQgd2lsbCBhbGxvdyB5b3UgdG8gaWRlbnRpZnkgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlLiBTZWVcbiAgICogdGhlIHZhbGlkYXRlRGJDb25zdHJhaW50cyByZXF1ZXN0IHBhcmFtZXRlci5cbiAgICpcbiAgICogQHBhcmFtIHtJbXBvcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIHVzZXJzIHRvIGltcG9ydC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgaW1wb3J0VXNlcnMocmVxdWVzdDogSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9pbXBvcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNwZWN0IGFuIGFjY2VzcyB0b2tlbiBpc3N1ZWQgYnkgRnVzaW9uQXV0aC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBmb3Igd2hpY2ggdGhpcyB0b2tlbiB3YXMgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVGhlIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBieSB0aGlzIE9BdXRoIHByb3ZpZGVyIGFzIHRoZSByZXN1bHQgb2YgYSBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRyb3NwZWN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGludHJvc3BlY3RBY2Nlc3NUb2tlbihjbGllbnRfaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50cm9zcGVjdFJlc3BvbnNlPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ3Rva2VuJywgdG9rZW4pO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEludHJvc3BlY3RSZXNwb25zZSwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9pbnRyb3NwZWN0JylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSXNzdWUgYSBuZXcgYWNjZXNzIHRva2VuIChKV1QpIGZvciB0aGUgcmVxdWVzdGVkIEFwcGxpY2F0aW9uIGFmdGVyIGVuc3VyaW5nIHRoZSBwcm92aWRlZCBKV1QgaXMgdmFsaWQuIEEgdmFsaWRcbiAgICogYWNjZXNzIHRva2VuIGlzIHByb3Blcmx5IHNpZ25lZCBhbmQgbm90IGV4cGlyZWQuXG4gICAqIDxwPlxuICAgKiBUaGlzIEFQSSBtYXkgYmUgdXNlZCBpbiBhbiBTU08gY29uZmlndXJhdGlvbiB0byBpc3N1ZSBuZXcgdG9rZW5zIGZvciBhbm90aGVyIGFwcGxpY2F0aW9uIGFmdGVyIHRoZSB1c2VyIGhhc1xuICAgKiBvYnRhaW5lZCBhIHZhbGlkIHRva2VuIGZyb20gYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgQXBwbGljYXRpb24gSWQgZm9yIHdoaWNoIHlvdSBhcmUgcmVxdWVzdGluZyBhIG5ldyBhY2Nlc3MgdG9rZW4gYmUgaXNzdWVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoVG9rZW4gKE9wdGlvbmFsKSBBbiBleGlzdGluZyByZWZyZXNoIHRva2VuIHVzZWQgdG8gcmVxdWVzdCBhIHJlZnJlc2ggdG9rZW4gaW4gYWRkaXRpb24gdG8gYSBKV1QgaW4gdGhlIHJlc3BvbnNlLlxuICAgKiAgICA8cD5UaGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbklkIHJlcXVlc3QgcGFyYW1ldGVyIG11c3QgaGF2ZSByZWZyZXNoXG4gICAqICAgIHRva2VucyBlbmFibGVkIGluIG9yZGVyIHRvIHJlY2VpdmUgYSByZWZyZXNoIHRva2VuIGluIHRoZSByZXNwb25zZS48L3A+XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElzc3VlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGlzc3VlSldUKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGVuY29kZWRKV1Q6IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElzc3VlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SXNzdWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9pc3N1ZScpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWZyZXNoVG9rZW4nLCByZWZyZXNoVG9rZW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgYSB1c2VyIHRvIEZ1c2lvbkF1dGguIFxuICAgKiBcbiAgICogVGhpcyBBUEkgb3B0aW9uYWxseSByZXF1aXJlcyBhbiBBUEkga2V5LiBTZWUgPGNvZGU+QXBwbGljYXRpb24ubG9naW5Db25maWd1cmF0aW9uLnJlcXVpcmVBdXRoZW50aWNhdGlvbjwvY29kZT4uXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBsb2dpbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY3JlZGVudGlhbHMgdXNlZCB0byBsb2cgdGhlbSBpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgbG9naW4ocmVxdWVzdDogTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcGluZyB0byBGdXNpb25BdXRoIGluZGljYXRpbmcgdGhhdCB0aGUgdXNlciB3YXMgYXV0b21hdGljYWxseSBsb2dnZWQgaW50byBhbiBhcHBsaWNhdGlvbi4gV2hlbiB1c2luZ1xuICAgKiBGdXNpb25BdXRoJ3MgU1NPIG9yIHlvdXIgb3duLCB5b3Ugc2hvdWxkIGNhbGwgdGhpcyBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZCBpbiBjZW50cmFsbHksIGJ1dCBhY2Nlc3NlcyBhblxuICAgKiBhcHBsaWNhdGlvbiB3aGVyZSB0aGV5IG5vIGxvbmdlciBoYXZlIGEgc2Vzc2lvbi4gVGhpcyBoZWxwcyBjb3JyZWN0bHkgdHJhY2sgbG9naW4gY291bnRzLCB0aW1lcyBhbmQgaGVscHMgd2l0aFxuICAgKiByZXBvcnRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0aGF0IHdhcyBsb2dnZWQgaW4uXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhleSBsb2dnZWQgaW50by5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhbGxlcklQQWRkcmVzcyAoT3B0aW9uYWwpIFRoZSBJUCBhZGRyZXNzIG9mIHRoZSBlbmQtdXNlciB0aGF0IGlzIGxvZ2dpbmcgaW4uIElmIGEgbnVsbCB2YWx1ZSBpcyBwcm92aWRlZFxuICAgKiAgICB0aGUgSVAgYWRkcmVzcyB3aWxsIGJlIHRoYXQgb2YgdGhlIGNsaWVudCBvciBsYXN0IHByb3h5IHRoYXQgc2VudCB0aGUgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgbG9naW5QaW5nKHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCwgY2FsbGVySVBBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xvZ2luJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpcEFkZHJlc3MnLCBjYWxsZXJJUEFkZHJlc3MpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcGluZyB0byBGdXNpb25BdXRoIGluZGljYXRpbmcgdGhhdCB0aGUgdXNlciB3YXMgYXV0b21hdGljYWxseSBsb2dnZWQgaW50byBhbiBhcHBsaWNhdGlvbi4gV2hlbiB1c2luZ1xuICAgKiBGdXNpb25BdXRoJ3MgU1NPIG9yIHlvdXIgb3duLCB5b3Ugc2hvdWxkIGNhbGwgdGhpcyBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZCBpbiBjZW50cmFsbHksIGJ1dCBhY2Nlc3NlcyBhblxuICAgKiBhcHBsaWNhdGlvbiB3aGVyZSB0aGV5IG5vIGxvbmdlciBoYXZlIGEgc2Vzc2lvbi4gVGhpcyBoZWxwcyBjb3JyZWN0bHkgdHJhY2sgbG9naW4gY291bnRzLCB0aW1lcyBhbmQgaGVscHMgd2l0aFxuICAgKiByZXBvcnRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5QaW5nUmVxdWVzdH0gcmVxdWVzdCBUaGUgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNyZWRlbnRpYWxzIHVzZWQgdG8gbG9nIHRoZW0gaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luUGluZ1dpdGhSZXF1ZXN0KHJlcXVlc3Q6IExvZ2luUGluZ1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTG9nb3V0IEFQSSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgcmVmcmVzaCB0b2tlbiBhbmQgYWNjZXNzIHRva2VuIGNvb2tpZXMgaWYgdGhleSBleGlzdCBvbiB0aGVcbiAgICogY2xpZW50IGFuZCByZXZva2UgdGhlIHJlZnJlc2ggdG9rZW4gc3RvcmVkLiBUaGlzIEFQSSBkb2VzIG5vdGhpbmcgaWYgdGhlIHJlcXVlc3QgZG9lcyBub3QgY29udGFpbiBhbiBhY2Nlc3NcbiAgICogdG9rZW4gb3IgcmVmcmVzaCB0b2tlbiBjb29raWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdsb2JhbCBXaGVuIHRoaXMgdmFsdWUgaXMgc2V0IHRvIHRydWUgYWxsIG9mIHRoZSByZWZyZXNoIHRva2VucyBpc3N1ZWQgdG8gdGhlIG93bmVyIG9mIHRoZVxuICAgKiAgICBwcm92aWRlZCB0b2tlbiB3aWxsIGJlIHJldm9rZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoVG9rZW4gKE9wdGlvbmFsKSBUaGUgcmVmcmVzaF90b2tlbiBhcyBhIHJlcXVlc3QgcGFyYW1ldGVyIGluc3RlYWQgb2YgY29taW5nIGluIHZpYSBhIGNvb2tpZS5cbiAgICogICAgSWYgcHJvdmlkZWQgdGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGNvb2tpZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgbG9nb3V0KGdsb2JhbDogYm9vbGVhbiwgcmVmcmVzaFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dvdXQnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZ2xvYmFsJywgZ2xvYmFsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExvZ291dCBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gYW5kIGFjY2VzcyB0b2tlbiBjb29raWVzIGlmIHRoZXkgZXhpc3Qgb24gdGhlXG4gICAqIGNsaWVudCBhbmQgcmV2b2tlIHRoZSByZWZyZXNoIHRva2VuIHN0b3JlZC4gVGhpcyBBUEkgdGFrZXMgdGhlIHJlZnJlc2ggdG9rZW4gaW4gdGhlIEpTT04gYm9keS5cbiAgICpcbiAgICogQHBhcmFtIHtMb2dvdXRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBsb2dvdXQgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGxvZ291dFdpdGhSZXF1ZXN0KHJlcXVlc3Q6IExvZ291dFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dvdXQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGlkZW50aXR5IHByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gZG9tYWluLiBBIDIwMCByZXNwb25zZSBjb2RlIGluZGljYXRlcyB0aGUgZG9tYWluIGlzIG1hbmFnZWRcbiAgICogYnkgYSByZWdpc3RlcmVkIGlkZW50aXR5IHByb3ZpZGVyLiBBIDQwNCBpbmRpY2F0ZXMgdGhlIGRvbWFpbiBpcyBub3QgbWFuYWdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG9yIGVtYWlsIGFkZHJlc3MgdG8gbG9va3VwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb29rdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgbG9va3VwSWRlbnRpdHlQcm92aWRlcihkb21haW46IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9va3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9va3VwUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbG9va3VwJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2RvbWFpbicsIGRvbWFpbilcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZpZXMgYSB0ZW1wb3JhbCB1c2VyIGFjdGlvbiBieSBjaGFuZ2luZyB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgYWN0aW9uIGFuZCBvcHRpb25hbGx5IGFkZGluZyBhIGNvbW1lbnQgdG8gdGhlXG4gICAqIGFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY3Rpb25JZCBUaGUgSWQgb2YgdGhlIGFjdGlvbiB0byBtb2RpZnkuIFRoaXMgaXMgdGVjaG5pY2FsbHkgdGhlIHVzZXIgYWN0aW9uIGxvZyBpZC5cbiAgICogQHBhcmFtIHtBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kaWZpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgbW9kaWZ5QWN0aW9uKGFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgbG9naW4gcmVxdWVzdCB1c2luZyBhIHBhc3N3b3JkbGVzcyBjb2RlXG4gICAqXG4gICAqIEBwYXJhbSB7UGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3MgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjb21wbGV0ZSBsb2dpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcGFzc3dvcmRsZXNzTG9naW4ocmVxdWVzdDogUGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3MvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuIGF1dGhlbnRpY2F0aW9uIEFQSSBrZXkgYnkgZ2l2ZW4gaWRcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBhcGkga2V5IHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FQSUtleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY3JlYXRlIHRoZSBBUElLZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEFQSUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogQVBJS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBhcHBsaWNhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBhcHBsaWNhdGlvbiByb2xlIHdpdGggdGhlIGdpdmVuIGlkIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIHJvbGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSByb2xlSWQgVGhlIElkIG9mIHRoZSByb2xlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgcm9sZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hBcHBsaWNhdGlvblJvbGUoYXBwbGljYXRpb25JZDogVVVJRCwgcm9sZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInJvbGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHJvbGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGNvbm5lY3RvciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCBUaGUgSWQgb2YgdGhlIGNvbm5lY3RvciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Q29ubmVjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBjb25uZWN0b3IgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaENvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCwgcmVxdWVzdDogQ29ubmVjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBjb25zZW50IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0NvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hDb25zZW50KGNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGVtYWlsIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIGVtYWlsIHRlbXBsYXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbWFpbFRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBlbWFpbCB0ZW1wbGF0ZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBFbWFpbFRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVtYWlsVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIEVudGl0eSBUeXBlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSBUeXBlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBFbnRpdHkgVHlwZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGdyb3VwIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgVGhlIElkIG9mIHRoZSBncm91cCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7R3JvdXBSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGdyb3VwIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEdyb3VwKGdyb3VwSWQ6IFVVSUQsIHJlcXVlc3Q6IEdyb3VwUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSB1cGRhdGVkIGlkZW50aXR5IHByb3ZpZGVyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoSWRlbnRpdHlQcm92aWRlcihpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgYXZhaWxhYmxlIGludGVncmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJbnRlZ3JhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgaW50ZWdyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoSW50ZWdyYXRpb25zKHJlcXVlc3Q6IEludGVncmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJbnRlZ3JhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaW50ZWdyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgbGFtYmRhIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIFRoZSBJZCBvZiB0aGUgbGFtYmRhIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtMYW1iZGFSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGxhbWJkYSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoTGFtYmRhKGxhbWJkYUlkOiBVVUlELCByZXF1ZXN0OiBMYW1iZGFSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2FnZVRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IG1lc3NhZ2UgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaE1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgbWVzc2VuZ2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NlbmdlcklkIFRoZSBJZCBvZiB0aGUgbWVzc2VuZ2VyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtNZXNzZW5nZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IG1lc3NlbmdlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlELCByZXF1ZXN0OiBNZXNzZW5nZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGluIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgd2hvc2UgcmVnaXN0cmF0aW9uIGlzIGdvaW5nIHRvIGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7UmVnaXN0cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFJlZ2lzdHJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U3lzdGVtQ29uZmlndXJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgc3lzdGVtIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hTeXN0ZW1Db25maWd1cmF0aW9uKHJlcXVlc3Q6IFN5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtLWNvbmZpZ3VyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgdGVuYW50IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtUZW5hbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHRlbmFudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVGVuYW50KHRlbmFudElkOiBVVUlELCByZXF1ZXN0OiBUZW5hbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHRoZW1lIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgVGhlIElkIG9mIHRoZSB0aGVtZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VGhlbWVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHRoZW1lIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFRoZW1lKHRoZW1lSWQ6IFVVSUQsIHJlcXVlc3Q6IFRoZW1lUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdXNlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXIodXNlcklkOiBVVUlELCByZXF1ZXN0OiBVc2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgdXNlciBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHVzZXIgYWN0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgdXNlciBhY3Rpb24gcmVhc29uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlYXNvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdXNlciBhY3Rpb24gcmVhc29uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZWFzb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgYSBzaW5nbGUgVXNlciBjb25zZW50IGJ5IElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgVGhlIFVzZXIgQ29uc2VudCBJZFxuICAgKiBAcGFyYW0ge1VzZXJDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB1c2VyIGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogVXNlckNvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZhdGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gcmVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVhY3RpdmF0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWFjdGl2YXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhY3RpdmF0ZXMgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byByZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlYWN0aXZhdGVVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVhY3RpdmF0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZhdGVzIHRoZSB1c2VyIGFjdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byByZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlYWN0aXZhdGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlYWN0aXZhdGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbmNpbGUgYSBVc2VyIHRvIEZ1c2lvbkF1dGggdXNpbmcgSldUIGlzc3VlZCBmcm9tIGFub3RoZXIgSWRlbnRpdHkgUHJvdmlkZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVjb25jaWxlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgZGF0YSB0byByZWNvbmNpbGUgdGhlIFVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlY29uY2lsZUpXVChyZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVjb25jaWxlJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBhIHJlZnJlc2ggb2YgdGhlIEVudGl0eSBzZWFyY2ggaW5kZXguIFRoaXMgQVBJIGlzIG5vdCBnZW5lcmFsbHkgbmVjZXNzYXJ5IGFuZCB0aGUgc2VhcmNoIGluZGV4IHdpbGwgYmVjb21lIGNvbnNpc3RlbnQgaW4gYVxuICAgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLiBUaGVyZSBtYXkgYmUgc2NlbmFyaW9zIHdoZXJlIHlvdSBtYXkgd2lzaCB0byBtYW51YWxseSByZXF1ZXN0IGFuIGluZGV4IHJlZnJlc2guIE9uZSBleGFtcGxlIG1heSBiZSBcbiAgICogaWYgeW91IGFyZSB1c2luZyB0aGUgU2VhcmNoIEFQSSBvciBEZWxldGUgVGVuYW50IEFQSSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSBFbnRpdHkgQ3JlYXRlIGV0YywgeW91IG1heSB3aXNoIHRvIHJlcXVlc3QgYSByZWZyZXNoIHRvXG4gICAqICBlbnN1cmUgdGhlIGluZGV4IGltbWVkaWF0ZWx5IGN1cnJlbnQgYmVmb3JlIG1ha2luZyBhIHF1ZXJ5IHJlcXVlc3QgdG8gdGhlIHNlYXJjaCBpbmRleC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVmcmVzaEVudGl0eVNlYXJjaEluZGV4KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS9zZWFyY2gnKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IGEgcmVmcmVzaCBvZiB0aGUgVXNlciBzZWFyY2ggaW5kZXguIFRoaXMgQVBJIGlzIG5vdCBnZW5lcmFsbHkgbmVjZXNzYXJ5IGFuZCB0aGUgc2VhcmNoIGluZGV4IHdpbGwgYmVjb21lIGNvbnNpc3RlbnQgaW4gYVxuICAgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLiBUaGVyZSBtYXkgYmUgc2NlbmFyaW9zIHdoZXJlIHlvdSBtYXkgd2lzaCB0byBtYW51YWxseSByZXF1ZXN0IGFuIGluZGV4IHJlZnJlc2guIE9uZSBleGFtcGxlIG1heSBiZSBcbiAgICogaWYgeW91IGFyZSB1c2luZyB0aGUgU2VhcmNoIEFQSSBvciBEZWxldGUgVGVuYW50IEFQSSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSBVc2VyIENyZWF0ZSBldGMsIHlvdSBtYXkgd2lzaCB0byByZXF1ZXN0IGEgcmVmcmVzaCB0b1xuICAgKiAgZW5zdXJlIHRoZSBpbmRleCBpbW1lZGlhdGVseSBjdXJyZW50IGJlZm9yZSBtYWtpbmcgYSBxdWVyeSByZXF1ZXN0IHRvIHRoZSBzZWFyY2ggaW5kZXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlZnJlc2hVc2VyU2VhcmNoSW5kZXgoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdlbmVyYXRlcyBhbnkga2V5cyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBGdXNpb25BdXRoIFJlYWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlZ2VuZXJhdGVSZWFjdG9yS2V5cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZWFjdG9yJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgdXNlciBmb3IgYW4gYXBwbGljYXRpb24uIElmIHlvdSBwcm92aWRlIHRoZSBVc2VyIGFuZCB0aGUgVXNlclJlZ2lzdHJhdGlvbiBvYmplY3Qgb24gdGhpcyByZXF1ZXN0LCBpdFxuICAgKiB3aWxsIGNyZWF0ZSB0aGUgdXNlciBhcyB3ZWxsIGFzIHJlZ2lzdGVyIHRoZW0gZm9yIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBpcyBjYWxsZWQgYSBGdWxsIFJlZ2lzdHJhdGlvbi4gSG93ZXZlciwgaWZcbiAgICogeW91IG9ubHkgcHJvdmlkZSB0aGUgVXNlclJlZ2lzdHJhdGlvbiBvYmplY3QsIHRoZW4gdGhlIHVzZXIgbXVzdCBhbHJlYWR5IGV4aXN0IGFuZCB0aGV5IHdpbGwgYmUgcmVnaXN0ZXJlZCBmb3IgdGhlXG4gICAqIGFwcGxpY2F0aW9uLiBUaGUgdXNlciBpZCBjYW4gYWxzbyBiZSBwcm92aWRlZCBhbmQgaXQgd2lsbCBlaXRoZXIgYmUgdXNlZCB0byBsb29rIHVwIGFuIGV4aXN0aW5nIHVzZXIgb3IgaXQgd2lsbCBiZVxuICAgKiB1c2VkIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBVc2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgdXNlciBiZWluZyByZWdpc3RlcmVkIGZvciB0aGUgYXBwbGljYXRpb24gYW5kIG9wdGlvbmFsbHkgY3JlYXRlZC5cbiAgICogQHBhcmFtIHtSZWdpc3RyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgb3B0aW9uYWxseSBjb250YWlucyB0aGUgVXNlciBhbmQgbXVzdCBjb250YWluIHRoZSBVc2VyUmVnaXN0cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVnaXN0ZXIodXNlcklkOiBVVUlELCByZXF1ZXN0OiBSZWdpc3RyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdHMgRWxhc3RpY3NlYXJjaCB0byBkZWxldGUgYW5kIHJlYnVpbGQgdGhlIGluZGV4IGZvciBGdXNpb25BdXRoIHVzZXJzIG9yIGVudGl0aWVzLiBCZSB2ZXJ5IGNhcmVmdWwgd2hlbiBydW5uaW5nIHRoaXMgcmVxdWVzdCBhcyBpdCB3aWxsIFxuICAgKiBpbmNyZWFzZSB0aGUgQ1BVIGFuZCBJL08gbG9hZCBvbiB5b3VyIGRhdGFiYXNlIHVudGlsIHRoZSBvcGVyYXRpb24gY29tcGxldGVzLiBHZW5lcmFsbHkgc3BlYWtpbmcgeW91IGRvIG5vdCBldmVyIG5lZWQgdG8gcnVuIHRoaXMgb3BlcmF0aW9uIHVubGVzcyBcbiAgICogaW5zdHJ1Y3RlZCBieSBGdXNpb25BdXRoIHN1cHBvcnQsIG9yIGlmIHlvdSBhcmUgbWlncmF0aW5nIGEgZGF0YWJhc2UgYW5vdGhlciBzeXN0ZW0gYW5kIHlvdSBhcmUgbm90IGJyaW5pbmcgYWxvbmcgdGhlIEVsYXN0aWNzZWFyY2ggaW5kZXguIFxuICAgKiBcbiAgICogWW91IGhhdmUgYmVlbiB3YXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVpbmRleFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgaW5kZXggbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVpbmRleChyZXF1ZXN0OiBSZWluZGV4UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL3JlaW5kZXgnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgdXNlciBmcm9tIHRoZSBmYW1pbHkgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmFtaWx5SWQgVGhlIGlkIG9mIHRoZSBmYW1pbHkgdG8gcmVtb3ZlIHRoZSB1c2VyIGZyb20uXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBpZCBvZiB0aGUgdXNlciB0byByZW1vdmUgZnJvbSB0aGUgZmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZW1vdmVVc2VyRnJvbUZhbWlseShmYW1pbHlJZDogVVVJRCwgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmYW1pbHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtc2VuZHMgdGhlIHZlcmlmaWNhdGlvbiBlbWFpbCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj59XG4gICAqL1xuICByZXNlbmRFbWFpbFZlcmlmaWNhdGlvbihlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeUVtYWlsUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1zZW5kcyB0aGUgdmVyaWZpY2F0aW9uIGVtYWlsIHRvIHRoZSB1c2VyLiBJZiB0aGUgQXBwbGljYXRpb24gaGFzIGNvbmZpZ3VyZWQgYSBzcGVjaWZpYyBlbWFpbCB0ZW1wbGF0ZSB0aGlzIHdpbGwgYmUgdXNlZFxuICAgKiBpbnN0ZWFkIG9mIHRoZSB0ZW5hbnQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSB1bmlxdWUgQXBwbGljYXRpb24gSWQgdG8gdXNlZCB0byByZXNvbHZlIGFuIGFwcGxpY2F0aW9uIHNwZWNpZmljIGVtYWlsIHRlbXBsYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgdGhhdCBuZWVkcyBhIG5ldyB2ZXJpZmljYXRpb24gZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlc2VuZEVtYWlsVmVyaWZpY2F0aW9uV2l0aEFwcGxpY2F0aW9uVGVtcGxhdGUoYXBwbGljYXRpb25JZDogVVVJRCwgZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlFbWFpbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1zZW5kcyB0aGUgYXBwbGljYXRpb24gcmVnaXN0cmF0aW9uIHZlcmlmaWNhdGlvbiBlbWFpbCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB2ZXJpZmllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlc2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbihlbWFpbDogc3RyaW5nLCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbiBhdXRoZW50aWNhdGlvbiBBUEkga2V5IGZvciB0aGUgZ2l2ZW4gaWRcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIEFQSSBrZXkgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFQSUtleShrZXlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgYWN0aW9uIGxvZyAodGhlIGxvZyBvZiBhIHVzZXIgYWN0aW9uIHRoYXQgd2FzIHRha2VuIG9uIGEgdXNlciBwcmV2aW91c2x5KSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjdGlvbklkIFRoZSBJZCBvZiB0aGUgYWN0aW9uIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3Rpb24oYWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYWN0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLiBUaGlzIHdpbGwgcmV0dXJuIGFsbCB0aW1lIGJhc2VkIGFjdGlvbnMgdGhhdCBhcmUgYWN0aXZlLFxuICAgKiBhbmQgaW5hY3RpdmUgYXMgd2VsbCBhcyBub24tdGltZSBiYXNlZCBhY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3Rpb25zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkIHRoYXQgYXJlIGN1cnJlbnRseSBwcmV2ZW50aW5nIHRoZSBVc2VyIGZyb20gbG9nZ2luZyBpbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGZldGNoIHRoZSBhY3Rpb25zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQWN0aW9uc1ByZXZlbnRpbmdMb2dpbih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncHJldmVudGluZ0xvZ2luJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZS5cbiAgICogQW4gYWN0aXZlIGFjdGlvbiBtZWFucyBvbmUgdGhhdCBpcyB0aW1lIGJhc2VkIGFuZCBoYXMgbm90IGJlZW4gY2FuY2VsZWQsIGFuZCBoYXMgbm90IGVuZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3RpdmVBY3Rpb25zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhY3RpdmUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGFwcGxpY2F0aW9uIGZvciB0aGUgZ2l2ZW4gaWQgb3IgYWxsIG9mIHRoZSBhcHBsaWNhdGlvbnMgaWYgdGhlIGlkIGlzIG51bGwuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYXBwbGljYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFwcGxpY2F0aW9ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSBhdWRpdCBsb2cgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGF1ZGl0TG9nSWQgVGhlIElkIG9mIHRoZSBhdWRpdCBsb2cgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQXVkaXRMb2coYXVkaXRMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEF1ZGl0TG9nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vYXVkaXQtbG9nJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGF1ZGl0TG9nSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY29ubmVjdG9yIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIFRoZSBJZCBvZiB0aGUgY29ubmVjdG9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29ubmVjdG9ycy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQ29ubmVjdG9ycygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgQ29uc2VudCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25zZW50KGNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29uc2VudC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUNvbnNlbnRzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBkYWlseSBhY3RpdmUgdXNlciByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5XG4gICAqIHJldHVybiB0aGUgZGFpbHkgYWN0aXZlIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIGlkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RGFpbHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRGFpbHlBY3RpdmVSZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L2RhaWx5LWFjdGl2ZS11c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBlbWFpbCB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHByZXZpZXcgb2YgdGhlIGVtYWlsIHRlbXBsYXRlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LiBUaGlzIGFsbG93cyB5b3UgdG8gcHJldmlldyBhbiBlbWFpbCB0ZW1wbGF0ZSB0aGF0XG4gICAqIGhhc24ndCBiZWVuIHNhdmVkIHRvIHRoZSBkYXRhYmFzZSB5ZXQuIFRoZSBlbnRpcmUgZW1haWwgdGVtcGxhdGUgZG9lcyBub3QgbmVlZCB0byBiZSBwcm92aWRlZCBvbiB0aGUgcmVxdWVzdC4gVGhpc1xuICAgKiB3aWxsIGNyZWF0ZSB0aGUgcHJldmlldyBiYXNlZCBvbiB3aGF0ZXZlciBpcyBnaXZlbi5cbiAgICpcbiAgICogQHBhcmFtIHtQcmV2aWV3UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBlbWFpbCB0ZW1wbGF0ZSBhbmQgb3B0aW9uYWxseSBhIGxvY2FsZSB0byByZW5kZXIgaXQgaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFByZXZpZXdSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbWFpbFRlbXBsYXRlUHJldmlldyhyZXF1ZXN0OiBQcmV2aWV3UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UHJldmlld1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFByZXZpZXdSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlL3ByZXZpZXcnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBlbWFpbCB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbWFpbFRlbXBsYXRlcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEVudGl0eSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbnRpdHkoZW50aXR5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYW4gRW50aXR5IEdyYW50IGZvciB0aGUgZ2l2ZW4gRW50aXR5IGFuZCBVc2VyL0VudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eS5cbiAgICogQHBhcmFtIHtVVUlEfSByZWNpcGllbnRFbnRpdHlJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBmb3IuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBVc2VyIHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW50aXR5R3JhbnQoZW50aXR5SWQ6IFVVSUQsIHJlY2lwaWVudEVudGl0eUlkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5R3JhbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwiZ3JhbnRcIilcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlY2lwaWVudEVudGl0eUlkJywgcmVjaXBpZW50RW50aXR5SWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRW50aXR5IFR5cGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBFbnRpdHkgVHlwZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbnRpdHlUeXBlcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSBldmVudCBsb2cgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50TG9nSWQgVGhlIElkIG9mIHRoZSBldmVudCBsb2cgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEV2ZW50TG9nUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRXZlbnRMb2coZXZlbnRMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFdmVudExvZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEV2ZW50TG9nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vZXZlbnQtbG9nJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGV2ZW50TG9nSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGZhbWlsaWVzIHRoYXQgYSB1c2VyIGJlbG9uZ3MgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBVc2VyJ3MgaWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRmFtaWxpZXModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGYW1pbHlSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIG1lbWJlcnMgb2YgYSBmYW1pbHkgYnkgdGhlIHVuaXF1ZSBGYW1pbHkgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmFtaWx5SWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgRmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVGYW1pbHlNZW1iZXJzQnlGYW1pbHlJZChmYW1pbHlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RmFtaWx5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZm9ybSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgVGhlIElkIG9mIHRoZSBmb3JtLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRm9ybShmb3JtSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmb3JtSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZm9ybSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIFRoZSBJZCBvZiB0aGUgZm9ybSBmaWVsZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRm9ybUZpZWxkKGZpZWxkSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1GaWVsZFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZm9ybXMgZmllbGRzXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUZvcm1GaWVsZHMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtL2ZpZWxkJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZm9ybXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVGb3JtcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZ3JvdXAgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIFRoZSBJZCBvZiB0aGUgZ3JvdXAuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlR3JvdXAoZ3JvdXBJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZ3JvdXBzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUdyb3VwcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpcEFjY2Vzc0NvbnRyb2xMaXN0SWQgVGhlIElkIG9mIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSVBBY2Nlc3NDb250cm9sTGlzdChpcEFjY2Vzc0NvbnRyb2xMaXN0SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlwQWNjZXNzQ29udHJvbExpc3RJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIGlkIG9yIGFsbCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXJzIGlmIHRoZSBpZCBpcyBudWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgaWRlbnRpdHkgcHJvdmlkZXIgSWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJZGVudGl0eVByb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIG9uZSBvciBtb3JlIGlkZW50aXR5IHByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gdHlwZS4gRm9yIHR5cGVzIHN1Y2ggYXMgR29vZ2xlLCBGYWNlYm9vaywgVHdpdHRlciBhbmQgTGlua2VkSW4sIG9ubHkgYSBzaW5nbGUgXG4gICAqIGlkZW50aXR5IHByb3ZpZGVyIGNhbiBleGlzdC4gRm9yIHR5cGVzIHN1Y2ggYXMgT3BlbklEIENvbm5lY3QgYW5kIFNBTUx2MiBtb3JlIHRoYW4gb25lIGlkZW50aXR5IHByb3ZpZGVyIGNhbiBiZSBjb25maWd1cmVkIHNvIHRoaXMgcmVxdWVzdCBcbiAgICogbWF5IHJldHVybiBtdWx0aXBsZSBpZGVudGl0eSBwcm92aWRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclR5cGV9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSWRlbnRpdHlQcm92aWRlckJ5VHlwZSh0eXBlOiBJZGVudGl0eVByb3ZpZGVyVHlwZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3R5cGUnLCB0eXBlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBpZGVudGl0eSBwcm92aWRlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJZGVudGl0eVByb3ZpZGVycygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZCB0aGF0IGFyZSBjdXJyZW50bHkgaW5hY3RpdmUuXG4gICAqIEFuIGluYWN0aXZlIGFjdGlvbiBtZWFucyBvbmUgdGhhdCBpcyB0aW1lIGJhc2VkIGFuZCBoYXMgYmVlbiBjYW5jZWxlZCBvciBoYXMgZXhwaXJlZCwgb3IgaXMgbm90IHRpbWUgYmFzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBmZXRjaCB0aGUgYWN0aW9ucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUluYWN0aXZlQWN0aW9ucyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYWN0aXZlJywgZmFsc2UpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBjdXJyZW50bHkgaW5hY3RpdmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSW5hY3RpdmVBcHBsaWNhdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaW5hY3RpdmUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB1c2VyIGFjdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGluYWN0aXZlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSW5hY3RpdmVVc2VyQWN0aW9ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaW5hY3RpdmUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGF2YWlsYWJsZSBpbnRlZ3JhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSW50ZWdyYXRpb24oKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEludGVncmF0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaW50ZWdyYXRpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIFB1YmxpYyBLZXkgY29uZmlndXJlZCBmb3IgdmVyaWZ5aW5nIEpTT04gV2ViIFRva2VucyAoSldUKSBieSB0aGUga2V5IElkIChraWQpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5SWQgVGhlIElkIG9mIHRoZSBwdWJsaWMga2V5IChraWQpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVKV1RQdWJsaWNLZXkoa2V5SWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UHVibGljS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UHVibGljS2V5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3B1YmxpYy1rZXknKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigna2lkJywga2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgUHVibGljIEtleSBjb25maWd1cmVkIGZvciB2ZXJpZnlpbmcgdGhlIEpTT04gV2ViIFRva2VucyAoSldUKSBpc3N1ZWQgYnkgdGhlIExvZ2luIEFQSSBieSB0aGUgQXBwbGljYXRpb24gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgQXBwbGljYXRpb24gZm9yIHdoaWNoIHRoaXMga2V5IGlzIHVzZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUpXVFB1YmxpY0tleUJ5QXBwbGljYXRpb25JZChhcHBsaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFB1YmxpY0tleVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9wdWJsaWMta2V5JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIFB1YmxpYyBLZXlzIGNvbmZpZ3VyZWQgZm9yIHZlcmlmeWluZyBKU09OIFdlYiBUb2tlbnMgKEpXVCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUpXVFB1YmxpY0tleXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxQdWJsaWNLZXlSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcHVibGljLWtleScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcHVibGljIGtleXMgdXNlZCBieSBGdXNpb25BdXRoIHRvIGNyeXB0b2dyYXBoaWNhbGx5IHZlcmlmeSBKV1RzIHVzaW5nIHRoZSBKU09OIFdlYiBLZXkgZm9ybWF0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV0tTUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSnNvbldlYktleVNldCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXS1NSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxKV0tTUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy8ud2VsbC1rbm93bi9qd2tzLmpzb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGtleSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUga2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVLZXkoa2V5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBrZXlzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVLZXlzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsYW1iZGEgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBsYW1iZGFJZCBUaGUgSWQgb2YgdGhlIGxhbWJkYS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTGFtYmRhKGxhbWJkYUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgbGFtYmRhcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTGFtYmRhcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGxhbWJkYXMgZm9yIHRoZSBwcm92aWRlZCB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge0xhbWJkYVR5cGV9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGxhbWJkYSB0byByZXR1cm4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUxhbWJkYXNCeVR5cGUodHlwZTogTGFtYmRhVHlwZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3R5cGUnLCB0eXBlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHkgcmV0dXJuIHRoZVxuICAgKiBsb2dpbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTG9naW5SZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9sb2dpbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcHJldmlldyBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCwgbm9ybWFsaXplZCB0byBhIGdpdmVuIGxvY2FsZS5cbiAgICpcbiAgICogQHBhcmFtIHtQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBlbWFpbCB0ZW1wbGF0ZSBhbmQgb3B0aW9uYWxseSBhIGxvY2FsZSB0byByZW5kZXIgaXQgaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzYWdlVGVtcGxhdGVQcmV2aWV3KHJlcXVlc3Q6IFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZS9wcmV2aWV3JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgbWVzc2FnZSB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NhZ2VUZW1wbGF0ZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBtZXNzZW5nZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgVGhlIElkIG9mIHRoZSBtZXNzZW5nZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NlbmdlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBtZXNzZW5nZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzZW5nZXJzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBtb250aGx5IGFjdGl2ZSB1c2VyIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHlcbiAgICogcmV0dXJuIHRoZSBtb250aGx5IGFjdGl2ZSBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1vbnRobHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTW9udGhseUFjdGl2ZVJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TW9udGhseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNb250aGx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L21vbnRobHktYWN0aXZlLXVzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIE9hdXRoMiBjb25maWd1cmF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24gZm9yIHRoZSBnaXZlbiBBcHBsaWNhdGlvbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgQXBwbGljYXRpb24gdG8gcmV0cmlldmUgT0F1dGggY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8T0F1dGhDb25maWd1cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlT2F1dGhDb25maWd1cmF0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE9BdXRoQ29uZmlndXJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE9BdXRoQ29uZmlndXJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwib2F1dGgtY29uZmlndXJhdGlvblwiKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3ZWxsIGtub3duIE9wZW5JRCBDb25maWd1cmF0aW9uIEpTT04gZG9jdW1lbnRcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8T3BlbklkQ29uZmlndXJhdGlvbj4+fVxuICAgKi9cbiAgcmV0cmlldmVPcGVuSWRDb25maWd1cmF0aW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8T3BlbklkQ29uZmlndXJhdGlvbj4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxPcGVuSWRDb25maWd1cmF0aW9uLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIHZhbGlkYXRpb24gcnVsZXMgZm9yIGEgc3BlY2lmaWMgdGVuYW50LiBUaGlzIG1ldGhvZCByZXF1aXJlcyBhIHRlbmFudElkIHRvIGJlIHByb3ZpZGVkIFxuICAgKiB0aHJvdWdoIHRoZSB1c2Ugb2YgYSBUZW5hbnQgc2NvcGVkIEFQSSBrZXkgb3IgYW4gSFRUUCBoZWFkZXIgWC1GdXNpb25BdXRoLVRlbmFudElkIHRvIHNwZWNpZnkgdGhlIFRlbmFudCBJZC5cbiAgICogXG4gICAqIFRoaXMgQVBJIGRvZXMgbm90IHJlcXVpcmUgYW4gQVBJIGtleS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVQYXNzd29yZFZhbGlkYXRpb25SdWxlcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQvcGFzc3dvcmQtdmFsaWRhdGlvbi1ydWxlcycpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcGFzc3dvcmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgYSBzcGVjaWZpYyB0ZW5hbnQuXG4gICAqIFxuICAgKiBUaGlzIEFQSSBkb2VzIG5vdCByZXF1aXJlIGFuIEFQSSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNXaXRoVGVuYW50SWQodGVuYW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQvcGFzc3dvcmQtdmFsaWRhdGlvbi1ydWxlcycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY2hpbGRyZW4gZm9yIHRoZSBnaXZlbiBwYXJlbnQgZW1haWwgYWRkcmVzcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudEVtYWlsIFRoZSBlbWFpbCBvZiB0aGUgcGFyZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQZW5kaW5nUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUGVuZGluZ0NoaWxkcmVuKHBhcmVudEVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFBlbmRpbmdSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxQZW5kaW5nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseS9wZW5kaW5nJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3BhcmVudEVtYWlsJywgcGFyZW50RW1haWwpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yIG1ldHJpY3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlYWN0b3JNZXRyaWNzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVhY3Rvck1ldHJpY3MoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlYWN0b3JNZXRyaWNzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3Rvci9tZXRyaWNzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBGdXNpb25BdXRoIFJlYWN0b3Igc3RhdHVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVhY3RvclN0YXR1cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlYWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWFjdG9yUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGFzdCBudW1iZXIgb2YgbG9naW4gcmVjb3Jkcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgaW5pdGlhbCByZWNvcmQuIGUuZy4gMCBpcyB0aGUgbGFzdCBsb2dpbiwgMTAwIHdpbGwgYmUgdGhlIDEwMHRoIG1vc3QgcmVjZW50IGxvZ2luLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgKE9wdGlvbmFsLCBkZWZhdWx0cyB0byAxMCkgVGhlIG51bWJlciBvZiByZWNvcmRzIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWNlbnRMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlY2VudExvZ2lucyhvZmZzZXQ6IG51bWJlciwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWNlbnRMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWNlbnQtbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignb2Zmc2V0Jywgb2Zmc2V0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbGltaXQnLCBsaW1pdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4gYnkgdW5pcXVlIElkLiBUaGlzIGlzIG5vdCB0aGUgc2FtZSB0aGluZyBhcyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSByZWZyZXNoIHRva2VuLiBJZiB5b3UgaGF2ZSB0aGF0LCB5b3UgYWxyZWFkeSBoYXZlIHdoYXQgeW91IG5lZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdG9rZW5JZCBUaGUgSWQgb2YgdGhlIHRva2VuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWZyZXNoVG9rZW5CeUlkKHRva2VuSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZnJlc2hUb2tlblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZnJlc2hUb2tlblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodG9rZW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSByZWZyZXNoIHRva2VucyB0aGF0IGJlbG9uZyB0byB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWZyZXNoVG9rZW5zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVmcmVzaFRva2VuUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciByZWdpc3RyYXRpb24gZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIGlkIGFuZCB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSByZWdpc3RyYXRpb24gcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cy4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gaWQsIGl0IHdpbGwgb25seSByZXR1cm5cbiAgICogdGhlIHJlZ2lzdHJhdGlvbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlZ2lzdHJhdGlvblJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHN0YXR1cyBvZiBhIHJlLWluZGV4IHByb2Nlc3MuIEEgc3RhdHVzIGNvZGUgb2YgMjAwIGluZGljYXRlcyB0aGUgcmUtaW5kZXggaXMgaW4gcHJvZ3Jlc3MsIGEgc3RhdHVzIGNvZGUgb2YgIFxuICAgKiA0MDQgaW5kaWNhdGVzIG5vIHJlLWluZGV4IGlzIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXRyaWV2ZVJlaW5kZXhTdGF0dXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vcmVpbmRleCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVTeXN0ZW1Db25maWd1cmF0aW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0tY29uZmlndXJhdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdGVuYW50IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHRlbmFudHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRlbmFudHMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRoZW1lIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCBUaGUgSWQgb2YgdGhlIHRoZW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRoZW1lKHRoZW1lSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHRoZW1lcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUaGVtZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRvdGFscyByZXBvcnQuIFRoaXMgY29udGFpbnMgYWxsIG9mIHRoZSB0b3RhbCBjb3VudHMgZm9yIGVhY2ggYXBwbGljYXRpb24gYW5kIHRoZSBnbG9iYWwgcmVnaXN0cmF0aW9uXG4gICAqIGNvdW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUb3RhbHNSZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUb3RhbFJlcG9ydCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRvdGFsc1JlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRvdGFsc1JlcG9ydFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC90b3RhbHMnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byByZXRyaWV2ZSBUd28gRmFjdG9yIHJlY292ZXJ5IGNvZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUd29GYWN0b3JSZWNvdmVyeUNvZGVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3IvcmVjb3ZlcnktY29kZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdXNlcidzIHR3by1mYWN0b3Igc3RhdHVzLlxuICAgKiBcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBzZWUgaWYgYSB1c2VyIHdpbGwgbmVlZCB0byBjb21wbGV0ZSBhIHR3by1mYWN0b3IgY2hhbGxlbmdlIHRvIGNvbXBsZXRlIGEgbG9naW4sXG4gICAqIGFuZCBvcHRpb25hbGx5IGlkZW50aWZ5IHRoZSBzdGF0ZSBvZiB0aGUgdHdvLWZhY3RvciB0cnVzdCBhY3Jvc3MgdmFyaW91cyBhcHBsaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1c2VyIElkIHRvIHJldHJpZXZlIHRoZSBUd28tRmFjdG9yIHN0YXR1cy5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBvcHRpb25hbCBhcHBsaWNhdGlvbklkIHRvIHZlcmlmeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHR3b0ZhY3RvclRydXN0SWQgVGhlIG9wdGlvbmFsIHR3by1mYWN0b3IgdHJ1c3QgSWQgdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGF0dXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUd29GYWN0b3JTdGF0dXModXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlELCB0d29GYWN0b3JUcnVzdElkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zdGF0dXMnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0d29GYWN0b3JUcnVzdElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgcGFzcyBpbiBudWxsIGZvciB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIG9mIHRoZSB1c2VyXG4gICAqIGFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IHBhc3MgaW4gbnVsbCBmb3IgdGhlIGlkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCBvZiB0aGUgdXNlclxuICAgKiBhY3Rpb24gcmVhc29ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQWN0aW9uUmVhc29ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdXNlciBhY3Rpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckFjdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGJ5IGEgY2hhbmdlIHBhc3N3b3JkIElkLiBUaGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgQVBJIGlzIHRvIHJldHJpZXZlIGEgdXNlciBhZnRlciB0aGUgZm9yZ290XG4gICAqIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZCBhbmQgeW91IG1heSBub3Qga25vdyB0aGUgdXNlcidzIGVtYWlsIG9yIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgdW5pcXVlIGNoYW5nZSBwYXNzd29yZCBJZCB0aGF0IHdhcyBzZW50IHZpYSBlbWFpbCBvciByZXR1cm5lZCBieSB0aGUgRm9yZ290IFBhc3N3b3JkIEFQSS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUNoYW5nZVBhc3N3b3JkSWQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjaGFuZ2VQYXNzd29yZElkJywgY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlFbWFpbChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBsb2dpbklkLiBUaGUgbG9naW5JZCBjYW4gYmUgZWl0aGVyIHRoZSB1c2VybmFtZSBvciB0aGUgZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBlbWFpbCBvciB1c2VybmFtZSBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUxvZ2luSWQobG9naW5JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gdXNlcm5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VybmFtZSBUaGUgdXNlcm5hbWUgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlVc2VybmFtZSh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VybmFtZScsIHVzZXJuYW1lKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgYnkgYSB2ZXJpZmljYXRpb25JZC4gVGhlIGludGVuZGVkIHVzZSBvZiB0aGlzIEFQSSBpcyB0byByZXRyaWV2ZSBhIHVzZXIgYWZ0ZXIgdGhlIGZvcmdvdFxuICAgKiBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQgYW5kIHlvdSBtYXkgbm90IGtub3cgdGhlIHVzZXIncyBlbWFpbCBvciB1c2VybmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcmlmaWNhdGlvbklkIFRoZSB1bmlxdWUgdmVyaWZpY2F0aW9uIElkIHRoYXQgaGFzIGJlZW4gc2V0IG9uIHRoZSB1c2VyIG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeVZlcmlmaWNhdGlvbklkKHZlcmlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3ZlcmlmaWNhdGlvbklkJywgdmVyaWZpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbW1lbnRzIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb21tZW50cyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbW1lbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29tbWVudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIGNvbnNlbnQgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbnNlbnRzIGZvciBhIFVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBVc2VyJ3MgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29uc2VudHModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGUgVXNlckluZm8gZW5kcG9pbnQgdG8gcmV0cmlldmUgVXNlciBDbGFpbXMgZnJvbSB0aGUgYWNjZXNzIHRva2VuIGlzc3VlZCBieSBGdXNpb25BdXRoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VySW5mb0Zyb21BY2Nlc3NUb2tlbihlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxVc2VyUmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdXNlcmluZm8nKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBzaW5nbGUgSWRlbnRpdHkgUHJvdmlkZXIgdXNlciAobGluaykuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpdHlQcm92aWRlclVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB1c2VyIGluIHRoZSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyTGluayhpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ6IHN0cmluZywgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJVc2VySWQnLCBpZGVudGl0eVByb3ZpZGVyVXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhbGwgSWRlbnRpdHkgUHJvdmlkZXIgdXNlcnMgKGxpbmtzKSBmb3IgdGhlIHVzZXIuIFNwZWNpZnkgdGhlIG9wdGlvbmFsIGlkZW50aXR5UHJvdmlkZXJJZCB0byByZXRyaWV2ZSBsaW5rcyBmb3IgYSBwYXJ0aWN1bGFyIElkUC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci4gU3BlY2lmeSB0aGlzIHZhbHVlIHRvIHJlZHVjZSB0aGUgbGlua3MgcmV0dXJuZWQgdG8gdGhvc2UgZm9yIGEgcGFydGljdWxhciBJZFAuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckxpbmtzQnlVc2VySWQoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlcklkJywgaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMgZm9yIGEgcGFydGljdWxhciB1c2VyIGJ5IElkLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5IHJldHVybiB0aGVcbiAgICogbG9naW4gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1c2VySWQgaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMb2dpblJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCB1c2VySWQ6IFVVSUQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMgZm9yIGEgcGFydGljdWxhciB1c2VyIGJ5IGxvZ2luIElkLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5IHJldHVybiB0aGVcbiAgICogbG9naW4gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSB1c2VySWQgaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMb2dpblJlcG9ydEJ5TG9naW5JZChhcHBsaWNhdGlvbklkOiBVVUlELCBsb2dpbklkOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGFzdCBudW1iZXIgb2YgbG9naW4gcmVjb3JkcyBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIGluaXRpYWwgcmVjb3JkLiBlLmcuIDAgaXMgdGhlIGxhc3QgbG9naW4sIDEwMCB3aWxsIGJlIHRoZSAxMDB0aCBtb3N0IHJlY2VudCBsb2dpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IChPcHRpb25hbCwgZGVmYXVsdHMgdG8gMTApIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyUmVjZW50TG9naW5zKHVzZXJJZDogVVVJRCwgb2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlY2VudExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVjZW50TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVjZW50LWxvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ29mZnNldCcsIG9mZnNldClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xpbWl0JywgbGltaXQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIElkLiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB1c2UgYW4gQVBJIGtleSwgaW5zdGVhZCBpdCB1c2VzIGEgSlNPTiBXZWIgVG9rZW4gKEpXVCkgZm9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyVXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggdmVyc2lvbiBzdHJpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcnNpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVWZXJzaW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyc2lvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcnNpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS92ZXJzaW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB3ZWJob29rIGZvciB0aGUgZ2l2ZW4gSWQuIElmIHlvdSBwYXNzIGluIG51bGwgZm9yIHRoZSBpZCwgdGhpcyB3aWxsIHJldHVybiBhbGwgdGhlIHdlYmhvb2tzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB3ZWJob29rcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYmhvb2tzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyByZWZyZXNoIHRva2Vucy5cbiAgICogXG4gICAqIFVzYWdlIGV4YW1wbGVzOlxuICAgKiAgIC0gRGVsZXRlIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4sIHBhc3MgaW4gb25seSB0aGUgdG9rZW4uXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbih0b2tlbilcbiAgICogXG4gICAqICAgLSBEZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvciBhIHVzZXIsIHBhc3MgaW4gb25seSB0aGUgdXNlcklkLlxuICAgKiAgICAgICByZXZva2VSZWZyZXNoVG9rZW4obnVsbCwgdXNlcklkKVxuICAgKiBcbiAgICogICAtIERlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGEgdXNlciBmb3IgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbiwgcGFzcyBpbiBib3RoIHRoZSB1c2VySWQgYW5kIHRoZSBhcHBsaWNhdGlvbklkLlxuICAgKiAgICAgICByZXZva2VSZWZyZXNoVG9rZW4obnVsbCwgdXNlcklkLCBhcHBsaWNhdGlvbklkKVxuICAgKiBcbiAgICogICAtIERlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGFuIGFwcGxpY2F0aW9uXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbihudWxsLCBudWxsLCBhcHBsaWNhdGlvbklkKVxuICAgKiBcbiAgICogTm90ZTogPGNvZGU+bnVsbDwvY29kZT4gbWF5IGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIHVwb24gdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlLlxuICAgKiBcbiAgICogU2VlIGFsc286IChtZXRob2QgbmFtZXMgbWF5IHZhcnkgYnkgbGFuZ3VhZ2UuLi4gYnV0IHlvdSdsbCBmaWd1cmUgaXQgb3V0KVxuICAgKiBcbiAgICogIC0gcmV2b2tlUmVmcmVzaFRva2VuQnlJZFxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5CeVRva2VuXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbnNCeVVzZXJJZFxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5zQnlBcHBsaWNhdGlvbklkXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbnNCeVVzZXJJZEZvckFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiAoT3B0aW9uYWwpIFRoZSByZWZyZXNoIHRva2VuIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgdXNlciBpZCB3aG9zZSB0b2tlbnMgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQgb2YgdGhlIHRva2VucyB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbih0b2tlbjogc3RyaW5nLCB1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3Rva2VuJywgdG9rZW4pXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHRoZSB1bmlxdWUgSWQuIFRoZSB1bmlxdWUgSWQgaXMgbm90IHNlbnNpdGl2ZSBhcyBpdCBjYW5ub3QgYmUgdXNlZCB0byBvYnRhaW4gYW5vdGhlciBKV1QuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdG9rZW5JZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB0b2tlbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbkJ5SWQodG9rZW5JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodG9rZW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHVzaW5nIHRoZSBhY3R1YWwgcmVmcmVzaCB0b2tlbiB2YWx1ZS4gVGhpcyByZWZyZXNoIHRva2VuIHZhbHVlIGlzIHNlbnNpdGl2ZSwgc28gIGJlIGNhcmVmdWwgd2l0aCB0aGlzIEFQSSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVGhlIHJlZnJlc2ggdG9rZW4gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5CeVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3Rva2VuJywgdG9rZW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gYW4gYXBwbGljYXRpb24gYnkgYXBwbGljYXRpb25JZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIGFsbCByZWZyZXNoIHRva2VucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbnNCeUFwcGxpY2F0aW9uSWQoYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gYSB1c2VyIGJ5IHVzZXIgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgYWxsIHJlZnJlc2ggdG9rZW5zIHRoYXQgYmVsb25nIHRvIGEgdXNlciBieSB1c2VyIElkIGZvciBhIHNwZWNpZmljIGFwcGxpY2F0aW9uIGJ5IGFwcGxpY2F0aW9uSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkRm9yQXBwbGljYXRpb24odXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyByZWZyZXNoIHRva2VucyB1c2luZyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEpTT04gYm9keS4gVGhlIGhhbmRsaW5nIGZvciB0aGlzIG1ldGhvZCBpcyB0aGUgc2FtZSBhcyB0aGUgcmV2b2tlUmVmcmVzaFRva2VuIG1ldGhvZFxuICAgKiBhbmQgaXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHlvdSBwcm92aWRlIGluIHRoZSBSZWZyZXNoRGVsZXRlUmVxdWVzdCBvYmplY3QuIFNlZSB0aGF0IG1ldGhvZCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtSZWZyZXNoVG9rZW5SZXZva2VSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGluZm9ybWF0aW9uIHVzZWQgdG8gcmV2b2tlIHRoZSByZWZyZXNoIHRva2Vucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc1dpdGhSZXF1ZXN0KHJlcXVlc3Q6IFJlZnJlc2hUb2tlblJldm9rZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIENvbnNlbnQgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgYXVkaXQgbG9ncyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXVkaXRMb2dTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEF1ZGl0TG9ncyhyZXF1ZXN0OiBBdWRpdExvZ1NlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXVkaXRMb2dTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9hdWRpdC1sb2cvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZW50aXRpZXMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0VudGl0eVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVudGl0aWVzKHJlcXVlc3Q6IEVudGl0eVNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZW50aXRpZXMgZm9yIHRoZSBnaXZlbiBpZHMuIElmIGFueSBpZCBpcyBpbnZhbGlkLCBpdCBpcyBpZ25vcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGlkcyBUaGUgZW50aXR5IGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRW50aXRpZXNCeUlkcyhpZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3NlYXJjaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZHMnLCBpZHMpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIEVudGl0eSBHcmFudHMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0VudGl0eUdyYW50U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdHlHcmFudHMocmVxdWVzdDogRW50aXR5R3JhbnRTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvZ3JhbnQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIGVudGl0eSB0eXBlcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdHlUeXBlcyhyZXF1ZXN0OiBFbnRpdHlUeXBlU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBldmVudCBsb2dzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudExvZ1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RXZlbnRMb2dTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRXZlbnRMb2dzKHJlcXVlc3Q6IEV2ZW50TG9nU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RXZlbnRMb2dTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFdmVudExvZ1NlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2V2ZW50LWxvZy9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBncm91cCBtZW1iZXJzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtHcm91cE1lbWJlclNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBNZW1iZXJTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IEdyb3VwTWVtYmVyU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBNZW1iZXJTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGdyb3VwcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7R3JvdXBTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEdyb3VwcyhyZXF1ZXN0OiBHcm91cFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hJUEFjY2Vzc0NvbnRyb2xMaXN0cyhyZXF1ZXN0OiBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgbG9naW4gcmVjb3JkcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5SZWNvcmRTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaExvZ2luUmVjb3JkcyhyZXF1ZXN0OiBMb2dpblJlY29yZFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9sb2dpbi1yZWNvcmQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIGlkcy4gSWYgYW55IGlkIGlzIGludmFsaWQsIGl0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaWRzIFRoZSB1c2VyIGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHNlYXJjaFVzZXJzQnlJZHMsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VhcmNoVXNlcnMoaWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkcycsIGlkcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIGlkcy4gSWYgYW55IGlkIGlzIGludmFsaWQsIGl0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaWRzIFRoZSB1c2VyIGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoVXNlcnNCeUlkcyhpZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRzJywgaWRzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXJzIGZvciB0aGUgZ2l2ZW4gc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBjb25zdHJhaW50cy4gRmllbGRzIHVzZWQ6IGlkcywgcXVlcnksIHF1ZXJ5U3RyaW5nLCBudW1iZXJPZlJlc3VsdHMsIG9yZGVyQnksIHN0YXJ0Um93LFxuICAgKiAgICBhbmQgc29ydEZpZWxkcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFVzZXJzQnlRdWVyeShyZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gY29uc3RyYWludHMuIEZpZWxkcyB1c2VkOiBpZHMsIHF1ZXJ5LCBxdWVyeVN0cmluZywgbnVtYmVyT2ZSZXN1bHRzLCBvcmRlckJ5LCBzdGFydFJvdyxcbiAgICogICAgYW5kIHNvcnRGaWVsZHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gc2VhcmNoVXNlcnNCeVF1ZXJ5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHNlYXJjaFVzZXJzQnlRdWVyeVN0cmluZyhyZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhbiBlbWFpbCB1c2luZyBhbiBlbWFpbCB0ZW1wbGF0ZSBpZC4gWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgPGNvZGU+cmVxdWVzdERhdGE8L2NvZGU+IHRvIGFjY2VzcyBrZXkgdmFsdWVcbiAgICogcGFpcnMgaW4gdGhlIGVtYWlsIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgaWQgZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIHtTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VuZCBlbWFpbCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZW5kUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlbmRFbWFpbChlbWFpbFRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IFNlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZW5kUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VuZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvc2VuZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIG91dCBhbiBlbWFpbCB0byBhIHBhcmVudCB0aGF0IHRoZXkgbmVlZCB0byByZWdpc3RlciBhbmQgY3JlYXRlIGEgZmFtaWx5IG9yIG5lZWQgdG8gbG9nIGluIGFuZCBhZGQgYSBjaGlsZCB0byB0aGVpciBleGlzdGluZyBmYW1pbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7RmFtaWx5RW1haWxSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwYXJlbnQgZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRGYW1pbHlSZXF1ZXN0RW1haWwocmVxdWVzdDogRmFtaWx5RW1haWxSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseS9yZXF1ZXN0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIHBhc3N3b3JkbGVzcyBhdXRoZW50aWNhdGlvbiBjb2RlIGluIGFuIGVtYWlsIHRvIGNvbXBsZXRlIGxvZ2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1Bhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3Mgc2VuZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgYW4gZW1haWwgY29udGFpbmluZyBhIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRQYXNzd29yZGxlc3NDb2RlKHJlcXVlc3Q6IFBhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3Mvc2VuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYXNzaXN0IGluIHNldHRpbmcgdXAgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBvciBkaXNhYmxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZW5kVHdvRmFjdG9yQ29kZUZvckVuYWJsZURpc2FibGUsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGUocmVxdWVzdDogVHdvRmFjdG9yU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYXNzaXN0IGluIHNldHRpbmcgdXAgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBvciBkaXNhYmxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRUd29GYWN0b3JDb2RlRm9yRW5hYmxlRGlzYWJsZShyZXF1ZXN0OiBUd29GYWN0b3JTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gY29kZSB0byBhbGxvdyB0aGUgY29tcGxldGlvbiBvZiBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHdvRmFjdG9ySWQgVGhlIElkIHJldHVybmVkIGJ5IHRoZSBMb2dpbiBBUEkgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZW5kVHdvRmFjdG9yQ29kZUZvckxvZ2luVXNpbmdNZXRob2QsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGVGb3JMb2dpbih0d29GYWN0b3JJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlbmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodHdvRmFjdG9ySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBjb2RlIHRvIGFsbG93IHRoZSBjb21wbGV0aW9uIG9mIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0d29GYWN0b3JJZCBUaGUgSWQgcmV0dXJuZWQgYnkgdGhlIExvZ2luIEFQSSBuZWNlc3NhcnkgdG8gY29tcGxldGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtUd29GYWN0b3JTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgVHdvIEZhY3RvciBzZW5kIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCB0aGUgVHdvIEZhY3RvciBjb2RlIHRvIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBzZW5kVHdvRmFjdG9yQ29kZUZvckxvZ2luVXNpbmdNZXRob2QodHdvRmFjdG9ySWQ6IHN0cmluZywgcmVxdWVzdDogVHdvRmFjdG9yU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0d29GYWN0b3JJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQmVnaW5zIGEgbG9naW4gcmVxdWVzdCBmb3IgYSAzcmQgcGFydHkgbG9naW4gdGhhdCByZXF1aXJlcyB1c2VyIGludGVyYWN0aW9uIHN1Y2ggYXMgSFlQUi5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIHRoaXJkLXBhcnR5IGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0aGlyZC1wYXJ0eSBsb2dpblxuICAgKiAgICBwcm92aWRlcnMgdGhhdCBGdXNpb25BdXRoIHVzZXMgdG8gcmVjb25jaWxlIHRoZSB1c2VyJ3MgYWNjb3VudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgc3RhcnRJZGVudGl0eVByb3ZpZGVyTG9naW4ocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QgYnkgZ2VuZXJhdGluZyBhIHBhc3N3b3JkbGVzcyBjb2RlLiBUaGlzIGNvZGUgY2FuIGJlIHNlbnQgdG8gdGhlIFVzZXIgdXNpbmcgdGhlIFNlbmRcbiAgICogUGFzc3dvcmRsZXNzIENvZGUgQVBJIG9yIHVzaW5nIGEgbWVjaGFuaXNtIG91dHNpZGUgb2YgRnVzaW9uQXV0aC4gVGhlIHBhc3N3b3JkbGVzcyBsb2dpbiBpcyBjb21wbGV0ZWQgYnkgdXNpbmcgdGhlIFBhc3N3b3JkbGVzcyBMb2dpbiBBUEkgd2l0aCB0aGlzIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3Mgc3RhcnQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBiZWdpbiB0aGUgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0UGFzc3dvcmRsZXNzTG9naW4ocmVxdWVzdDogUGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZGxlc3NTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3Mvc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIFR3by1GYWN0b3IgbG9naW4gcmVxdWVzdCBieSBnZW5lcmF0aW5nIGEgdHdvLWZhY3RvciBpZGVudGlmaWVyLiBUaGlzIGNvZGUgY2FuIHRoZW4gYmUgc2VudCB0byB0aGUgVHdvIEZhY3RvciBTZW5kIFxuICAgKiBBUEkgKC9hcGkvdHdvLWZhY3Rvci9zZW5kKWluIG9yZGVyIHRvIHNlbmQgYSBvbmUtdGltZSB1c2UgY29kZSB0byBhIHVzZXIuIFlvdSBjYW4gYWxzbyB1c2Ugb25lLXRpbWUgdXNlIGNvZGUgcmV0dXJuZWQgXG4gICAqIHRvIHNlbmQgdGhlIGNvZGUgb3V0LW9mLWJhbmQuIFRoZSBUd28tRmFjdG9yIGxvZ2luIGlzIGNvbXBsZXRlZCBieSBtYWtpbmcgYSByZXF1ZXN0IHRvIHRoZSBUd28tRmFjdG9yIExvZ2luIFxuICAgKiBBUEkgKC9hcGkvdHdvLWZhY3Rvci9sb2dpbikuIHdpdGggdGhlIHR3by1mYWN0b3IgaWRlbnRpZmllciBhbmQgdGhlIG9uZS10aW1lIHVzZSBjb2RlLlxuICAgKiBcbiAgICogVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYWxsb3cgeW91IHRvIGJlZ2luIGEgVHdvLUZhY3RvciBsb2dpbiBvdXRzaWRlIG9mIGEgbm9ybWFsIGxvZ2luIHRoYXQgb3JpZ2luYXRlZCBmcm9tIHRoZSBMb2dpbiBBUEkgKC9hcGkvbG9naW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclN0YXJ0UmVxdWVzdH0gcmVxdWVzdCBUaGUgVHdvLUZhY3RvciBzdGFydCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGJlZ2luIHRoZSBUd28tRmFjdG9yIGxvZ2luIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0VHdvRmFjdG9yTG9naW4ocmVxdWVzdDogVHdvRmFjdG9yU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3N0YXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgbG9naW4gdXNpbmcgYSAyRkEgY2hhbGxlbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yTG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBsb2dpbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY3JlZGVudGlhbHMgdXNlZCB0byBsb2cgdGhlbSBpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgdHdvRmFjdG9yTG9naW4ocmVxdWVzdDogVHdvRmFjdG9yTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBBUEkga2V5IGJ5IGdpdmVuIGlkXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBpS2V5SWQgVGhlIElkIG9mIHRoZSBBUEkga2V5IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBUElLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIEFQSSBLZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVBUElLZXkoYXBpS2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEFQSUtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFQSUtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcGlLZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgYXBwbGljYXRpb24gcm9sZSB3aXRoIHRoZSBnaXZlbiBpZCBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSByb2xlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIFRoZSBJZCBvZiB0aGUgcm9sZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgcm9sZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29ubmVjdG9yIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIFRoZSBJZCBvZiB0aGUgY29ubmVjdG9yIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb25uZWN0b3JSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGNvbm5lY3RvciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCwgcmVxdWVzdDogQ29ubmVjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29uc2VudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQ29uc2VudChjb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IENvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZW1haWwgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgZW1haWwgdGVtcGxhdGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VtYWlsVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgZW1haWwgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW1haWxUZW1wbGF0ZShlbWFpbFRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVtYWlsVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW1haWxUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIEVudGl0eSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IEVudGl0eSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUVudGl0eShlbnRpdHlJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgRW50aXR5IFR5cGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IFR5cGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgRW50aXR5IFR5cGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW50aXR5VHlwZShlbnRpdHlUeXBlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBlcm1pc3Npb24gd2l0aCB0aGUgZ2l2ZW4gaWQgZm9yIHRoZSBlbnRpdHkgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBlbnRpdHlUeXBlIHRoYXQgdGhlIHBlcm1pc3Npb24gYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSBwZXJtaXNzaW9uSWQgVGhlIElkIG9mIHRoZSBwZXJtaXNzaW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHBlcm1pc3Npb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW50aXR5VHlwZVBlcm1pc3Npb24oZW50aXR5VHlwZUlkOiBVVUlELCBwZXJtaXNzaW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJwZXJtaXNzaW9uXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZXJtaXNzaW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZm9ybSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgVGhlIElkIG9mIHRoZSBmb3JtIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtGb3JtUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBmb3JtIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUZvcm0oZm9ybUlkOiBVVUlELCByZXF1ZXN0OiBGb3JtUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGZvcm0gZmllbGQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmllbGRJZCBUaGUgSWQgb2YgdGhlIGZvcm0gZmllbGQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Zvcm1GaWVsZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgZm9ybSBmaWVsZCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlELCByZXF1ZXN0OiBGb3JtRmllbGRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBncm91cCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIFRoZSBJZCBvZiB0aGUgZ3JvdXAgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0dyb3VwUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGdyb3VwIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVHcm91cChncm91cElkOiBVVUlELCByZXF1ZXN0OiBHcm91cFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1lbWJlciBpbiBhIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0ge01lbWJlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZ3JvdXAgbWVtYmVyKHMpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZW1iZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IE1lbWJlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lbWJlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lbWJlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjY2Vzc0NvbnRyb2xMaXN0SWQgVGhlIElkIG9mIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IElQIEFjY2VzcyBDb250cm9sIExpc3QgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlSVBBY2Nlc3NDb250cm9sTGlzdChhY2Nlc3NDb250cm9sTGlzdElkOiBVVUlELCByZXF1ZXN0OiBJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY2Nlc3NDb250cm9sTGlzdElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgdXBkYXRlZCBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVJZGVudGl0eVByb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgcmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgYXZhaWxhYmxlIGludGVncmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJbnRlZ3JhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBpbnRlZ3JhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlSW50ZWdyYXRpb25zKHJlcXVlc3Q6IEludGVncmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJbnRlZ3JhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaW50ZWdyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGtleSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGtleSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGtleSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbGFtYmRhIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIFRoZSBJZCBvZiB0aGUgbGFtYmRhIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtMYW1iZGFSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgbGFtYmRhIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlTGFtYmRhKGxhbWJkYUlkOiBVVUlELCByZXF1ZXN0OiBMYW1iZGFSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IG1lc3NhZ2UgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBtZXNzZW5nZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgVGhlIElkIG9mIHRoZSBtZXNzZW5nZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge01lc3NlbmdlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgbWVzc2VuZ2VyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlELCByZXF1ZXN0OiBNZXNzZW5nZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSByZWdpc3RyYXRpb24gZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIGlkIGFuZCB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBpbiB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHdob3NlIHJlZ2lzdHJhdGlvbiBpcyBnb2luZyB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge1JlZ2lzdHJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCByZXF1ZXN0OiBSZWdpc3RyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTeXN0ZW1Db25maWd1cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHN5c3RlbSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVN5c3RlbUNvbmZpZ3VyYXRpb24ocmVxdWVzdDogU3lzdGVtQ29uZmlndXJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0tY29uZmlndXJhdGlvbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdGVuYW50IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtUZW5hbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgdGVuYW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVGVuYW50KHRlbmFudElkOiBVVUlELCByZXF1ZXN0OiBUZW5hbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB0aGVtZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIFRoZSBJZCBvZiB0aGUgdGhlbWUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1RoZW1lUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHRoZW1lIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVUaGVtZSh0aGVtZUlkOiBVVUlELCByZXF1ZXN0OiBUaGVtZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtVc2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHVzZXIgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVXNlcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlciBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgdXNlciBhY3Rpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZWFzb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgdXNlciBhY3Rpb24gcmVhc29uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHNpbmdsZSBVc2VyIGNvbnNlbnQgYnkgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckNvbnNlbnRJZCBUaGUgVXNlciBDb25zZW50IElkXG4gICAqIEBwYXJhbSB7VXNlckNvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY29uc2VudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogVXNlckNvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB3ZWJob29rIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tJZCBUaGUgSWQgb2YgdGhlIHdlYmhvb2sgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1dlYmhvb2tSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgd2ViaG9vayBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVXZWJob29rKHdlYmhvb2tJZDogVVVJRCwgcmVxdWVzdDogV2ViaG9va1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG9yIHVwZGF0ZXMgYW4gRW50aXR5IEdyYW50LiBUaGlzIGlzIHdoZW4gYSBVc2VyL0VudGl0eSBpcyBncmFudGVkIHBlcm1pc3Npb25zIHRvIGFuIEVudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSB0aGF0IHRoZSBVc2VyL0VudGl0eSBpcyBiZWluZyBncmFudGVkIGFjY2VzcyB0by5cbiAgICogQHBhcmFtIHtFbnRpdHlHcmFudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgRW50aXR5IEdyYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB1cHNlcnRFbnRpdHlHcmFudChlbnRpdHlJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5R3JhbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcImdyYW50XCIpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZW5kLXVzZXIgcHJvdmlkZWQgdXNlcl9jb2RlIGZyb20gdGhlIHVzZXItaW50ZXJhY3Rpb24gb2YgdGhlIERldmljZSBBdXRob3JpemF0aW9uIEdyYW50LlxuICAgKiBJZiB5b3UgYnVpbGQgeW91ciBvd24gYWN0aXZhdGlvbiBmb3JtIHlvdSBzaG91bGQgdmFsaWRhdGUgdGhlIHVzZXIgcHJvdmlkZWQgY29kZSBwcmlvciB0byBiZWdpbm5pbmcgdGhlIEF1dGhvcml6YXRpb24gZ3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIFRoZSBjbGllbnQgaWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZhbGlkYXRlRGV2aWNlKHVzZXJfY29kZTogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZS92YWxpZGF0ZScpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcHJvdmlkZWQgSldUIChlbmNvZGVkIEpXVCBzdHJpbmcpIHRvIGVuc3VyZSB0aGUgdG9rZW4gaXMgdmFsaWQuIEEgdmFsaWQgYWNjZXNzIHRva2VuIGlzIHByb3Blcmx5XG4gICAqIHNpZ25lZCBhbmQgbm90IGV4cGlyZWQuXG4gICAqIDxwPlxuICAgKiBUaGlzIEFQSSBtYXkgYmUgdXNlZCB0byB2ZXJpZnkgdGhlIEpXVCBhcyB3ZWxsIGFzIGRlY29kZSB0aGUgZW5jb2RlZCBKV1QgaW50byBodW1hbiByZWFkYWJsZSBpZGVudGl0eSBjbGFpbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmFsaWRhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdmFsaWRhdGVKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWYWxpZGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFZhbGlkYXRlUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3ZhbGlkYXRlJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0J3MgYSBKV1QgdmVuZGluZyBtYWNoaW5lIVxuICAgKiBcbiAgICogSXNzdWUgYSBuZXcgYWNjZXNzIHRva2VuIChKV1QpIHdpdGggdGhlIHByb3ZpZGVkIGNsYWltcyBpbiB0aGUgcmVxdWVzdC4gVGhpcyBKV1QgaXMgbm90IHNjb3BlZCB0byBhIHRlbmFudCBvciB1c2VyLCBpdCBpcyBhIGZyZWUgZm9ybSBcbiAgICogdG9rZW4gdGhhdCB3aWxsIGNvbnRhaW4gd2hhdCBjbGFpbXMgeW91IHByb3ZpZGUuXG4gICAqIDxwPlxuICAgKiBUaGUgaWF0LCBleHAgYW5kIGp0aSBjbGFpbXMgd2lsbCBiZSBhZGRlZCBieSBGdXNpb25BdXRoLCBhbGwgb3RoZXIgY2xhaW1zIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci5cbiAgICogXG4gICAqIElmIGEgVFRMIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCwgdGhlIFRUTCB3aWxsIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBkZWZhdWx0IFRlbmFudCBvciB0aGUgVGVuYW50IHNwZWNpZmllZCBvbiB0aGUgcmVxdWVzdCBlaXRoZXIgXG4gICAqIGJ5IHdheSBvZiB0aGUgWC1GdXNpb25BdXRoLVRlbmFudElkIHJlcXVlc3QgaGVhZGVyLCBvciBhIHRlbmFudCBzY29wZWQgQVBJIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtKV1RWZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgY2xhaW1zIGZvciB0aGlzIEpXVC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SldUVmVuZFJlc3BvbnNlPj59XG4gICAqL1xuICB2ZW5kSldUKHJlcXVlc3Q6IEpXVFZlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RWZW5kUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SldUVmVuZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3ZlbmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhIGVtYWlsIHZlcmlmaWNhdGlvbi4gVGhlIElkIGdpdmVuIGlzIHVzdWFsbHkgZnJvbSBhbiBlbWFpbCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyaWZpY2F0aW9uSWQgVGhlIGVtYWlsIHZlcmlmaWNhdGlvbiBpZCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gdmVyaWZ5RW1haWxBZGRyZXNzIGFuZCBjaGFuZ2VkIHRvIHRha2UgYSBKU09OIHJlcXVlc3QgYm9keSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICB2ZXJpZnlFbWFpbCh2ZXJpZmljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh2ZXJpZmljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGEgdXNlcidzIGVtYWlsIGFkZHJlc3MuIFxuICAgKiBcbiAgICogVGhlIHJlcXVlc3QgYm9keSB3aWxsIGNvbnRhaW4gdGhlIHZlcmlmaWNhdGlvbklkLiBZb3UgbWF5IGFsc28gYmUgcmVxdWlyZWQgdG8gc2VuZCBhIG9uZS10aW1lIHVzZSBjb2RlIGJhc2VkIHVwb24geW91ciBjb25maWd1cmF0aW9uLiBXaGVuIFxuICAgKiB0aGUgdGVuYW50IGlzIGNvbmZpZ3VyZWQgdG8gZ2F0ZSBhIHVzZXIgdW50aWwgdGhlaXIgZW1haWwgYWRkcmVzcyBpcyB2ZXJpZmllZCwgdGhpcyBwcm9jZWR1cmVzIHJlcXVpcmVzIHR3byB2YWx1ZXMgaW5zdGVhZCBvZiBvbmUuIFxuICAgKiBUaGUgdmVyaWZpY2F0aW9uSWQgaXMgYSBoaWdoIGVudHJvcHkgdmFsdWUgYW5kIHRoZSBvbmUtdGltZSB1c2UgY29kZSBpcyBhIGxvdyBlbnRyb3B5IHZhbHVlIHRoYXQgaXMgZWFzaWx5IGVudGVyZWQgaW4gYSB1c2VyIGludGVyYWN0aXZlIGZvcm0uIFRoZSBcbiAgICogdHdvIHZhbHVlcyB0b2dldGhlciBhcmUgYWJsZSB0byBjb25maXJtIGEgdXNlcidzIGVtYWlsIGFkZHJlc3MgYW5kIG1hcmsgdGhlIHVzZXIncyBlbWFpbCBhZGRyZXNzIGFzIHZlcmlmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeUVtYWlsUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB2ZXJpZmljYXRpb25JZCBhbmQgb3B0aW9uYWwgb25lLXRpbWUgdXNlIGNvZGUgcGFpcmVkIHdpdGggdGhlIHZlcmlmaWNhdGlvbklkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2ZXJpZnlFbWFpbEFkZHJlc3MocmVxdWVzdDogVmVyaWZ5RW1haWxSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkbWluaXN0cmF0aXZlbHkgdmVyaWZ5IGEgdXNlcidzIGVtYWlsIGFkZHJlc3MuIFVzZSB0aGlzIG1ldGhvZCB0byBieXBhc3MgZW1haWwgdmVyaWZpY2F0aW9uIGZvciB0aGUgdXNlci5cbiAgICogXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgd2lsbCBjb250YWluIHRoZSB1c2VySWQgdG8gYmUgdmVyaWZpZWQuIEFuIEFQSSBrZXkgaXMgcmVxdWlyZWQgd2hlbiBzZW5kaW5nIHRoZSB1c2VySWQgaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlFbWFpbFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlcklkIHRvIHZlcmlmeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmVyaWZ5RW1haWxBZGRyZXNzQnlVc2VySWQocmVxdWVzdDogVmVyaWZ5RW1haWxSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGFuIGFwcGxpY2F0aW9uIHJlZ2lzdHJhdGlvbi4gVGhlIElkIGdpdmVuIGlzIHVzdWFsbHkgZnJvbSBhbiBlbWFpbCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyaWZpY2F0aW9uSWQgVGhlIHJlZ2lzdHJhdGlvbiB2ZXJpZmljYXRpb24gSWQgc2VudCB0byB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHZlcmlmeVVzZXJSZWdpc3RyYXRpb24gYW5kIGNoYW5nZWQgdG8gdGFrZSBhIEpTT04gcmVxdWVzdCBib2R5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHZlcmlmeVJlZ2lzdHJhdGlvbih2ZXJpZmljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodmVyaWZpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhIHVzZXIncyByZWdpc3RyYXRpb24uIFxuICAgKiBcbiAgICogVGhlIHJlcXVlc3QgYm9keSB3aWxsIGNvbnRhaW4gdGhlIHZlcmlmaWNhdGlvbklkLiBZb3UgbWF5IGFsc28gYmUgcmVxdWlyZWQgdG8gc2VuZCBhIG9uZS10aW1lIHVzZSBjb2RlIGJhc2VkIHVwb24geW91ciBjb25maWd1cmF0aW9uLiBXaGVuIFxuICAgKiB0aGUgYXBwbGljYXRpb24gaXMgY29uZmlndXJlZCB0byBnYXRlIGEgdXNlciB1bnRpbCB0aGVpciByZWdpc3RyYXRpb24gaXMgdmVyaWZpZWQsIHRoaXMgcHJvY2VkdXJlcyByZXF1aXJlcyB0d28gdmFsdWVzIGluc3RlYWQgb2Ygb25lLiBcbiAgICogVGhlIHZlcmlmaWNhdGlvbklkIGlzIGEgaGlnaCBlbnRyb3B5IHZhbHVlIGFuZCB0aGUgb25lLXRpbWUgdXNlIGNvZGUgaXMgYSBsb3cgZW50cm9weSB2YWx1ZSB0aGF0IGlzIGVhc2lseSBlbnRlcmVkIGluIGEgdXNlciBpbnRlcmFjdGl2ZSBmb3JtLiBUaGUgXG4gICAqIHR3byB2YWx1ZXMgdG9nZXRoZXIgYXJlIGFibGUgdG8gY29uZmlybSBhIHVzZXIncyByZWdpc3RyYXRpb24gYW5kIG1hcmsgdGhlIHVzZXIncyByZWdpc3RyYXRpb24gYXMgdmVyaWZpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5UmVnaXN0cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB2ZXJpZmljYXRpb25JZCBhbmQgb3B0aW9uYWwgb25lLXRpbWUgdXNlIGNvZGUgcGFpcmVkIHdpdGggdGhlIHZlcmlmaWNhdGlvbklkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2ZXJpZnlVc2VyUmVnaXN0cmF0aW9uKHJlcXVlc3Q6IFZlcmlmeVJlZ2lzdHJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cblxuICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqIFByaXZhdGUgbWV0aG9kc1xuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuICAvKipcbiAgICogY3JlYXRlcyBhIHJlc3QgY2xpZW50XG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBSRVNUQ2xpZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNhbGwuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0PFJULCBFUlQ+KCk6IElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxSVCwgRVJUPigpXG4gICAgICAgICAgICAgICAud2l0aEF1dGhvcml6YXRpb24odGhpcy5hcGlLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEFub255bW91czxSVCwgRVJUPigpOiBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgbGV0IGNsaWVudCA9IHRoaXMuY2xpZW50QnVpbGRlci5idWlsZDxSVCwgRVJUPih0aGlzLmhvc3QpO1xuXG4gICAgaWYgKHRoaXMudGVuYW50SWQgIT0gbnVsbCkge1xuICAgICAgY2xpZW50LndpdGhIZWFkZXIoJ1gtRnVzaW9uQXV0aC1UZW5hbnRJZCcsIHRoaXMudGVuYW50SWQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNyZWRlbnRpYWxzICE9IG51bGwpIHtcbiAgICAgIGNsaWVudC53aXRoQ3JlZGVudGlhbHModGhpcy5jcmVkZW50aWFscyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGdXNpb25BdXRoQ2xpZW50O1xuXG4vKipcbiAqIEEgMTI4IGJpdCBVVUlEIGluIHN0cmluZyBmb3JtYXQgXCI4LTQtNC00LTEyXCIsIGZvciBleGFtcGxlIFwiNThENUUyMTItMTY1Qi00Q0EwLTkwOUItQzg2QjlDRUUwMTExXCIuXG4gKi9cbmV4cG9ydCB0eXBlIFVVSUQgPSBzdHJpbmc7XG5cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzVG9rZW4ge1xuICBhY2Nlc3NfdG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyZXNfaW4/OiBudW1iZXI7XG4gIGlkX3Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoX3Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoX3Rva2VuX2lkPzogVVVJRDtcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRva2VuX3R5cGU/OiBUb2tlblR5cGU7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGF0YSB7XG4gIGFjdGlvbmVlVXNlcklkPzogVVVJRDtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBlbWFpbFVzZXI/OiBib29sZWFuO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIG5vdGlmeVVzZXI/OiBib29sZWFuO1xuICBvcHRpb24/OiBzdHJpbmc7XG4gIHJlYXNvbklkPzogVVVJRDtcbiAgdXNlckFjdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBUaGUgdXNlciBhY3Rpb24gcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhY3Rpb24/OiBBY3Rpb25EYXRhO1xuICBicm9hZGNhc3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSB1c2VyIGFjdGlvbiByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uUmVzcG9uc2Uge1xuICBhY3Rpb24/OiBVc2VyQWN0aW9uTG9nO1xuICBhY3Rpb25zPzogQXJyYXk8VXNlckFjdGlvbkxvZz47XG59XG5cbi8qKlxuICogQXZhaWxhYmxlIEpTT04gV2ViIEFsZ29yaXRobXMgKEpXQSkgYXMgZGVzY3JpYmVkIGluIFJGQyA3NTE4IGF2YWlsYWJsZSBmb3IgdGhpcyBKV1QgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBBbGdvcml0aG0ge1xuICBFUzI1NiA9IFwiRVMyNTZcIixcbiAgRVMzODQgPSBcIkVTMzg0XCIsXG4gIEVTNTEyID0gXCJFUzUxMlwiLFxuICBIUzI1NiA9IFwiSFMyNTZcIixcbiAgSFMzODQgPSBcIkhTMzg0XCIsXG4gIEhTNTEyID0gXCJIUzUxMlwiLFxuICBQUzI1NiA9IFwiUFMyNTZcIixcbiAgUFMzODQgPSBcIlBTMzg0XCIsXG4gIFBTNTEyID0gXCJQUzUxMlwiLFxuICBSUzI1NiA9IFwiUlMyNTZcIixcbiAgUlMzODQgPSBcIlJTMzg0XCIsXG4gIFJTNTEyID0gXCJSUzUxMlwiLFxuICBub25lID0gXCJub25lXCJcbn1cblxuLyoqXG4gKiBkb21haW4gUE9KTyB0byByZXByZXNlbnQgQXV0aGVudGljYXRpb25LZXlcbiAqXG4gKiBAYXV0aG9yIHNhbmpheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleSB7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdElkPzogVVVJRDtcbiAga2V5Pzogc3RyaW5nO1xuICBrZXlNYW5hZ2VyPzogYm9vbGVhbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG1ldGFEYXRhPzogQVBJS2V5TWV0YURhdGE7XG4gIHBlcm1pc3Npb25zPzogQVBJS2V5UGVybWlzc2lvbnM7XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBUElLZXlNZXRhRGF0YSB7XG4gIGF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleVBlcm1pc3Npb25zIHtcbiAgZW5kcG9pbnRzPzogUmVjb3JkPHN0cmluZywgQXJyYXk8c3RyaW5nPj47XG59XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24ga2V5IHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgU2FuamF5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5UmVxdWVzdCB7XG4gIGFwaUtleT86IEFQSUtleTtcbiAgc291cmNlS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEF1dGhlbnRpY2F0aW9uIGtleSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTYW5qYXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBUElLZXlSZXNwb25zZSB7XG4gIGFwaUtleT86IEFQSUtleTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGVBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGtleUlkPzogVVVJRDtcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHNlcnZpY2VzSWQ/OiBzdHJpbmc7XG4gIHRlYW1JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGVJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8QXBwbGVBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgc2VydmljZXNJZD86IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbiB7XG4gIGFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25BY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbjtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgYXV0aGVudGljYXRpb25Ub2tlbkNvbmZpZ3VyYXRpb24/OiBBdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbjtcbiAgY2xlYW5TcGVha0NvbmZpZ3VyYXRpb24/OiBDbGVhblNwZWFrQ29uZmlndXJhdGlvbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVtYWlsQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRW1haWxDb25maWd1cmF0aW9uO1xuICBleHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25FeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uO1xuICBmb3JtQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRm9ybUNvbmZpZ3VyYXRpb247XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgand0Q29uZmlndXJhdGlvbj86IEpXVENvbmZpZ3VyYXRpb247XG4gIGxhbWJkYUNvbmZpZ3VyYXRpb24/OiBMYW1iZGFDb25maWd1cmF0aW9uO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9naW5Db25maWd1cmF0aW9uPzogTG9naW5Db25maWd1cmF0aW9uO1xuICBtdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbk11bHRpRmFjdG9yQ29uZmlndXJhdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogT0F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbj86IFBhc3N3b3JkbGVzc0NvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24/OiBSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25EZWxldGVQb2xpY3k/OiBBcHBsaWNhdGlvblJlZ2lzdHJhdGlvbkRlbGV0ZVBvbGljeTtcbiAgcm9sZXM/OiBBcnJheTxBcHBsaWNhdGlvblJvbGU+O1xuICBzYW1sdjJDb25maWd1cmF0aW9uPzogU0FNTHYyQ29uZmlndXJhdGlvbjtcbiAgc3RhdGU/OiBPYmplY3RTdGF0ZTtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0aGVtZUlkPzogVVVJRDtcbiAgdW52ZXJpZmllZD86IFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zO1xuICB2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB2ZXJpZmljYXRpb25TdHJhdGVneT86IFZlcmlmaWNhdGlvblN0cmF0ZWd5O1xuICB2ZXJpZnlSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uIHtcbiAgdWlJUEFjY2Vzc0NvbnRyb2xMaXN0SWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uRW1haWxDb25maWd1cmF0aW9uIHtcbiAgZW1haWxVcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbWFpbFZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGVtYWlsVmVyaWZpZWRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBmb3Jnb3RQYXNzd29yZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luSWRJblVzZU9uQ3JlYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5JZEluVXNlT25VcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbk5ld0RldmljZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luU3VzcGljaW91c0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkbGVzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkUmVzZXRTdWNjZXNzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRVcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBzZXRQYXNzd29yZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHR3b0ZhY3Rvck1ldGhvZEFkZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHR3b0ZhY3Rvck1ldGhvZFJlbW92ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uRXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbiB7XG4gIHR3b0ZhY3RvclRydXN0SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkZvcm1Db25maWd1cmF0aW9uIHtcbiAgYWRtaW5SZWdpc3RyYXRpb25Gb3JtSWQ/OiBVVUlEO1xuICBzZWxmU2VydmljZUZvcm1JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uTXVsdGlGYWN0b3JDb25maWd1cmF0aW9uIHtcbiAgZW1haWw/OiBNdWx0aUZhY3RvckVtYWlsVGVtcGxhdGU7XG4gIGxvZ2luUG9saWN5PzogTXVsdGlGYWN0b3JMb2dpblBvbGljeTtcbiAgc21zPzogTXVsdGlGYWN0b3JTTVNUZW1wbGF0ZTtcbiAgdHJ1c3RQb2xpY3k/OiBBcHBsaWNhdGlvbk11bHRpRmFjdG9yVHJ1c3RQb2xpY3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBBcHBsaWNhdGlvbk11bHRpRmFjdG9yVHJ1c3RQb2xpY3kge1xuICBBbnkgPSBcIkFueVwiLFxuICBUaGlzID0gXCJUaGlzXCIsXG4gIE5vbmUgPSBcIk5vbmVcIlxufVxuXG4vKipcbiAqIEEgQXBwbGljYXRpb24tbGV2ZWwgcG9saWN5IGZvciBkZWxldGluZyBVc2Vycy5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUmVnaXN0cmF0aW9uRGVsZXRlUG9saWN5IHtcbiAgdW52ZXJpZmllZD86IFRpbWVCYXNlZERlbGV0ZVBvbGljeTtcbn1cblxuLyoqXG4gKiBUaGUgQXBwbGljYXRpb24gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbj86IEFwcGxpY2F0aW9uO1xuICByb2xlPzogQXBwbGljYXRpb25Sb2xlO1xufVxuXG4vKipcbiAqIFRoZSBBcHBsaWNhdGlvbiBBUEkgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25SZXNwb25zZSB7XG4gIGFwcGxpY2F0aW9uPzogQXBwbGljYXRpb247XG4gIGFwcGxpY2F0aW9ucz86IEFycmF5PEFwcGxpY2F0aW9uPjtcbiAgcm9sZT86IEFwcGxpY2F0aW9uUm9sZTtcbn1cblxuLyoqXG4gKiBBIHJvbGUgZ2l2ZW4gdG8gYSB1c2VyIGZvciBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblJvbGUge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpc0RlZmF1bHQ/OiBib29sZWFuO1xuICBpc1N1cGVyUm9sZT86IGJvb2xlYW47XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblVudmVyaWZpZWRDb25maWd1cmF0aW9uIHtcbiAgcmVnaXN0cmF0aW9uPzogVW52ZXJpZmllZEJlaGF2aW9yO1xuICB2ZXJpZmljYXRpb25TdHJhdGVneT86IFZlcmlmaWNhdGlvblN0cmF0ZWd5O1xuICB3aGVuR2F0ZWQ/OiBSZWdpc3RyYXRpb25VbnZlcmlmaWVkT3B0aW9ucztcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIGEgc2ltcGxlIGF0dGFjaG1lbnQgd2l0aCBhIGJ5dGUgYXJyYXksIG5hbWUgYW5kIE1JTUUgdHlwZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgYXR0YWNobWVudD86IEFycmF5PG51bWJlcj47XG4gIG1pbWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gYXVkaXQgbG9nLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogbnVtYmVyO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpbnNlcnRVc2VyPzogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBuZXdWYWx1ZT86IGFueTtcbiAgb2xkVmFsdWU/OiBhbnk7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0NvbmZpZ3VyYXRpb24ge1xuICBkZWxldGU/OiBEZWxldGVDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEV2ZW50IGV2ZW50IHRvIGFuIGF1ZGl0IGxvZyB3YXMgY3JlYXRlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGF1ZGl0TG9nPzogQXVkaXRMb2c7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nRXhwb3J0UmVxdWVzdCBleHRlbmRzIEJhc2VFeHBvcnRSZXF1ZXN0IHtcbiAgY3JpdGVyaWE/OiBBdWRpdExvZ1NlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhdWRpdExvZz86IEF1ZGl0TG9nO1xufVxuXG4vKipcbiAqIEF1ZGl0IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ1Jlc3BvbnNlIHtcbiAgYXVkaXRMb2c/OiBBdWRpdExvZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZW5kPzogbnVtYmVyO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBuZXdWYWx1ZT86IHN0cmluZztcbiAgb2xkVmFsdWU/OiBzdHJpbmc7XG4gIHJlYXNvbj86IHN0cmluZztcbiAgc3RhcnQ/OiBudW1iZXI7XG4gIHVzZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogQXVkaXRMb2dTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBBdWRpdCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dTZWFyY2hSZXNwb25zZSB7XG4gIGF1ZGl0TG9ncz86IEFycmF5PEF1ZGl0TG9nPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIEF1dGhlbnRpY2F0aW9uVGhyZWF0cyB7XG4gIEltcG9zc2libGVUcmF2ZWwgPSBcIkltcG9zc2libGVUcmF2ZWxcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhlbnRpY2F0aW9uVG9rZW5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhlbnRpY2F0b3JDb25maWd1cmF0aW9uIHtcbiAgYWxnb3JpdGhtPzogVE9UUEFsZ29yaXRobTtcbiAgY29kZUxlbmd0aD86IG51bWJlcjtcbiAgdGltZVN0ZXA/OiBudW1iZXI7XG59XG5cbi8vIERvIG5vdCByZXF1aXJlIGEgc2V0dGVyIGZvciAndHlwZScsIGl0IGlzIGRlZmluZWQgYnkgdGhlIGNvbmNyZXRlIGNsYXNzIGFuZCBpcyBub3QgbXV0YWJsZVxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbiB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBDb25uZWN0b3JUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFbGFzdGljU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBhY2N1cmF0ZVRvdGFsPzogYm9vbGVhbjtcbiAgaWRzPzogQXJyYXk8VVVJRD47XG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICBxdWVyeVN0cmluZz86IHN0cmluZztcbiAgc29ydEZpZWxkcz86IEFycmF5PFNvcnRGaWVsZD47XG59XG5cbi8qKlxuICogQmFzZS1jbGFzcyBmb3IgYWxsIEZ1c2lvbkF1dGggZXZlbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFdmVudCB7XG4gIGNyZWF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgaW5mbz86IEV2ZW50SW5mbztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0eXBlPzogRXZlbnRUeXBlO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHJlcXVlc3RzIHRoYXQgY2FuIGNvbnRhaW4gZXZlbnQgaW5mb3JtYXRpb24uIFRoaXMgZXZlbnQgaW5mb3JtYXRpb24gaXMgdXNlZCB3aGVuIHNlbmRpbmcgV2ViaG9va3Mgb3IgZW1haWxzXG4gKiBkdXJpbmcgdGhlIHRyYW5zYWN0aW9uLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBldmVudCBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFdmVudFJlcXVlc3Qge1xuICBldmVudEluZm8/OiBFdmVudEluZm87XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFeHBvcnRSZXF1ZXN0IHtcbiAgZGF0ZVRpbWVTZWNvbmRzRm9ybWF0Pzogc3RyaW5nO1xuICB6b25lSWQ/OiBzdHJpbmc7XG59XG5cbi8vIERvIG5vdCByZXF1aXJlIGEgc2V0dGVyIGZvciAndHlwZScsIGl0IGlzIGRlZmluZWQgYnkgdGhlIGNvbmNyZXRlIGNsYXNzIGFuZCBpcyBub3QgbXV0YWJsZVxuZXhwb3J0IGludGVyZmFjZSBCYXNlSWRlbnRpdHlQcm92aWRlcjxEIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj86IFJlY29yZDxVVUlELCBEPjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogTGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxpbmtpbmdTdHJhdGVneT86IElkZW50aXR5UHJvdmlkZXJMaW5raW5nU3RyYXRlZ3k7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRlbmFudENvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8VVVJRCwgSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb24+O1xuICB0eXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNyZWF0ZVJlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBpcEFkZHJlc3M/OiBzdHJpbmc7XG4gIG1ldGFEYXRhPzogTWV0YURhdGE7XG4gIG5ld0RldmljZT86IGJvb2xlYW47XG4gIG5vSldUPzogYm9vbGVhbjtcbn1cblxuLy8gRG8gbm90IHJlcXVpcmUgYSBzZXR0ZXIgZm9yICd0eXBlJywgaXQgaXMgZGVmaW5lZCBieSB0aGUgY29uY3JldGUgY2xhc3MgYW5kIGlzIG5vdCBtdXRhYmxlXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHJhbnNwb3J0Pzogc3RyaW5nO1xuICB0eXBlPzogTWVzc2VuZ2VyVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBudW1iZXJPZlJlc3VsdHM/OiBudW1iZXI7XG4gIG9yZGVyQnk/OiBzdHJpbmc7XG4gIHN0YXJ0Um93PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBCcmVhY2hBY3Rpb24ge1xuICBPZmYgPSBcIk9mZlwiLFxuICBSZWNvcmRPbmx5ID0gXCJSZWNvcmRPbmx5XCIsXG4gIE5vdGlmeVVzZXIgPSBcIk5vdGlmeVVzZXJcIixcbiAgUmVxdWlyZUNoYW5nZSA9IFwiUmVxdWlyZUNoYW5nZVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBCcmVhY2hlZFBhc3N3b3JkU3RhdHVzIHtcbiAgTm9uZSA9IFwiTm9uZVwiLFxuICBFeGFjdE1hdGNoID0gXCJFeGFjdE1hdGNoXCIsXG4gIFN1YkFkZHJlc3NNYXRjaCA9IFwiU3ViQWRkcmVzc01hdGNoXCIsXG4gIFBhc3N3b3JkT25seSA9IFwiUGFzc3dvcmRPbmx5XCIsXG4gIENvbW1vblBhc3N3b3JkID0gXCJDb21tb25QYXNzd29yZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFjaGVkUGFzc3dvcmRUZW5hbnRNZXRyaWMge1xuICBhY3Rpb25SZXF1aXJlZD86IG51bWJlcjtcbiAgbWF0Y2hlZENvbW1vblBhc3N3b3JkQ291bnQ/OiBudW1iZXI7XG4gIG1hdGNoZWRFeGFjdENvdW50PzogbnVtYmVyO1xuICBtYXRjaGVkUGFzc3dvcmRDb3VudD86IG51bWJlcjtcbiAgbWF0Y2hlZFN1YkFkZHJlc3NDb3VudD86IG51bWJlcjtcbiAgcGFzc3dvcmRzQ2hlY2tlZENvdW50PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBCcmVhY2hNYXRjaE1vZGUge1xuICBMb3cgPSBcIkxvd1wiLFxuICBNZWRpdW0gPSBcIk1lZGl1bVwiLFxuICBIaWdoID0gXCJIaWdoXCJcbn1cblxuLyoqXG4gKiBYTUwgY2Fub25pY2FsaXphdGlvbiBtZXRob2QgZW51bWVyYXRpb24uIFRoaXMgaXMgdXNlZCBmb3IgdGhlIElkUCBhbmQgU1Agc2lkZSBvZiBGdXNpb25BdXRoIFNBTUwuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIENhbm9uaWNhbGl6YXRpb25NZXRob2Qge1xuICBleGNsdXNpdmUgPSBcImV4Y2x1c2l2ZVwiLFxuICBleGNsdXNpdmVfd2l0aF9jb21tZW50cyA9IFwiZXhjbHVzaXZlX3dpdGhfY29tbWVudHNcIixcbiAgaW5jbHVzaXZlID0gXCJpbmNsdXNpdmVcIixcbiAgaW5jbHVzaXZlX3dpdGhfY29tbWVudHMgPSBcImluY2x1c2l2ZV93aXRoX2NvbW1lbnRzXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gQ2FwdGNoYU1ldGhvZCB7XG4gIEdvb2dsZVJlY2FwdGNoYVYyID0gXCJHb29nbGVSZWNhcHRjaGFWMlwiLFxuICBHb29nbGVSZWNhcHRjaGFWMyA9IFwiR29vZ2xlUmVjYXB0Y2hhVjNcIixcbiAgSENhcHRjaGEgPSBcIkhDYXB0Y2hhXCIsXG4gIEhDYXB0Y2hhRW50ZXJwcmlzZSA9IFwiSENhcHRjaGFFbnRlcnByaXNlXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uIHtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBtZDVGaW5nZXJwcmludD86IHN0cmluZztcbiAgc2VyaWFsTnVtYmVyPzogc3RyaW5nO1xuICBzaGExRmluZ2VycHJpbnQ/OiBzdHJpbmc7XG4gIHNoYTFUaHVtYnByaW50Pzogc3RyaW5nO1xuICBzaGEyNTZGaW5nZXJwcmludD86IHN0cmluZztcbiAgc2hhMjU2VGh1bWJwcmludD86IHN0cmluZztcbiAgc3ViamVjdD86IHN0cmluZztcbiAgdmFsaWRGcm9tPzogbnVtYmVyO1xuICB2YWxpZFRvPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBlbnVtIENoYW5nZVBhc3N3b3JkUmVhc29uIHtcbiAgQWRtaW5pc3RyYXRpdmUgPSBcIkFkbWluaXN0cmF0aXZlXCIsXG4gIEJyZWFjaGVkID0gXCJCcmVhY2hlZFwiLFxuICBFeHBpcmVkID0gXCJFeHBpcmVkXCIsXG4gIFZhbGlkYXRpb24gPSBcIlZhbGlkYXRpb25cIlxufVxuXG4vKipcbiAqIENoYW5nZSBwYXNzd29yZCByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VQYXNzd29yZFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG4gIGN1cnJlbnRQYXNzd29yZD86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdHJ1c3RDaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIHRydXN0VG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2hhbmdlIHBhc3N3b3JkIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlUGFzc3dvcmRSZXNwb25zZSB7XG4gIG9uZVRpbWVQYXNzd29yZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIENsZWFuU3BlYWsgY29uZmlndXJhdGlvbiBhdCB0aGUgc3lzdGVtIGFuZCBhcHBsaWNhdGlvbiBsZXZlbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGVhblNwZWFrQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIHVybD86IHN0cmluZztcbiAgdXNlcm5hbWVNb2RlcmF0aW9uPzogVXNlcm5hbWVNb2RlcmF0aW9uO1xufVxuXG5leHBvcnQgZW51bSBDbGllbnRBdXRoZW50aWNhdGlvbk1ldGhvZCB7XG4gIG5vbmUgPSBcIm5vbmVcIixcbiAgY2xpZW50X3NlY3JldF9iYXNpYyA9IFwiY2xpZW50X3NlY3JldF9iYXNpY1wiLFxuICBjbGllbnRfc2VjcmV0X3Bvc3QgPSBcImNsaWVudF9zZWNyZXRfcG9zdFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGVudW0gQ2xpZW50QXV0aGVudGljYXRpb25Qb2xpY3kge1xuICBSZXF1aXJlZCA9IFwiUmVxdWlyZWRcIixcbiAgTm90UmVxdWlyZWQgPSBcIk5vdFJlcXVpcmVkXCIsXG4gIE5vdFJlcXVpcmVkV2hlblVzaW5nUEtDRSA9IFwiTm90UmVxdWlyZWRXaGVuVXNpbmdQS0NFXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclBvbGljeSB7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBtaWdyYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclJlcXVlc3Qge1xuICBjb25uZWN0b3I/OiBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclJlc3BvbnNlIHtcbiAgY29ubmVjdG9yPzogQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb247XG4gIGNvbm5lY3RvcnM/OiBBcnJheTxCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbj47XG59XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGNvbm5lY3RvcnMuIFRoaXMgZW51bSBpcyBzdG9yZWQgYXMgYW4gb3JkaW5hbCBvbiB0aGUgPGNvZGU+aWRlbnRpdGllczwvY29kZT4gdGFibGUsIG9yZGVyIG11c3QgYmUgbWFpbnRhaW5lZC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgZW51bSBDb25uZWN0b3JUeXBlIHtcbiAgRnVzaW9uQXV0aCA9IFwiRnVzaW9uQXV0aFwiLFxuICBHZW5lcmljID0gXCJHZW5lcmljXCIsXG4gIExEQVAgPSBcIkxEQVBcIlxufVxuXG4vKipcbiAqIE1vZGVscyBhIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnQge1xuICBjb25zZW50RW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgY291bnRyeU1pbmltdW1BZ2VGb3JTZWxmQ29uc2VudD86IExvY2FsaXplZEludGVnZXJzO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVmYXVsdE1pbmltdW1BZ2VGb3JTZWxmQ29uc2VudD86IG51bWJlcjtcbiAgZW1haWxQbHVzPzogRW1haWxQbHVzO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtdWx0aXBsZVZhbHVlc0FsbG93ZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICB2YWx1ZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IGZvciBVc2VyIGNvbnNlbnQgdHlwZXMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRSZXF1ZXN0IHtcbiAgY29uc2VudD86IENvbnNlbnQ7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBjb25zZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50UmVzcG9uc2Uge1xuICBjb25zZW50PzogQ29uc2VudDtcbiAgY29uc2VudHM/OiBBcnJheTxDb25zZW50Pjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBjb25zZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQ29uc2VudFN0YXR1cyB7XG4gIEFjdGl2ZSA9IFwiQWN0aXZlXCIsXG4gIFJldm9rZWQgPSBcIlJldm9rZWRcIlxufVxuXG4vKipcbiAqIFN0YXR1cyBmb3IgY29udGVudCBsaWtlIHVzZXJuYW1lcywgcHJvZmlsZSBhdHRyaWJ1dGVzLCBldGMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIENvbnRlbnRTdGF0dXMge1xuICBBQ1RJVkUgPSBcIkFDVElWRVwiLFxuICBQRU5ESU5HID0gXCJQRU5ESU5HXCIsXG4gIFJFSkVDVEVEID0gXCJSRUpFQ1RFRFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDT1JTQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhbGxvd0NyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgYWxsb3dlZEhlYWRlcnM/OiBBcnJheTxzdHJpbmc+O1xuICBhbGxvd2VkTWV0aG9kcz86IEFycmF5PEhUVFBNZXRob2Q+O1xuICBhbGxvd2VkT3JpZ2lucz86IEFycmF5PHN0cmluZz47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZXhwb3NlZEhlYWRlcnM/OiBBcnJheTxzdHJpbmc+O1xuICBwcmVmbGlnaHRNYXhBZ2VJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ291bnQge1xuICBjb3VudD86IG51bWJlcjtcbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBkYWlseSBhY3RpdmUgdXNlciByZXBvcnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFpbHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2Uge1xuICBkYWlseUFjdGl2ZVVzZXJzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG51bWJlck9mRGF5c1RvUmV0YWluPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VJbmZvIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhc3RBY2Nlc3NlZEFkZHJlc3M/OiBzdHJpbmc7XG4gIGxhc3RBY2Nlc3NlZEluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBEZXZpY2VUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlUmVzcG9uc2Uge1xuICBkZXZpY2VfY29kZT86IHN0cmluZztcbiAgZXhwaXJlc19pbj86IG51bWJlcjtcbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG4gIHVzZXJfY29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uX3VyaT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uX3VyaV9jb21wbGV0ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gRGV2aWNlVHlwZSB7XG4gIEJST1dTRVIgPSBcIkJST1dTRVJcIixcbiAgREVTS1RPUCA9IFwiREVTS1RPUFwiLFxuICBMQVBUT1AgPSBcIkxBUFRPUFwiLFxuICBNT0JJTEUgPSBcIk1PQklMRVwiLFxuICBPVEhFUiA9IFwiT1RIRVJcIixcbiAgU0VSVkVSID0gXCJTRVJWRVJcIixcbiAgVEFCTEVUID0gXCJUQUJMRVRcIixcbiAgVFYgPSBcIlRWXCIsXG4gIFVOS05PV04gPSBcIlVOS05PV05cIlxufVxuXG4vKipcbiAqIEEgZGlzcGxheWFibGUgcmF3IGxvZ2luIHRoYXQgaW5jbHVkZXMgYXBwbGljYXRpb24gbmFtZSBhbmQgdXNlciBsb2dpbklkLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3BsYXlhYmxlUmF3TG9naW4gZXh0ZW5kcyBSYXdMb2dpbiB7XG4gIGFwcGxpY2F0aW9uTmFtZT86IHN0cmluZztcbiAgbG9jYXRpb24/OiBMb2NhdGlvbjtcbiAgbG9naW5JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFsbCBpZGVudGl0eSBwcm92aWRlcnMgdGhhdCBjYW4gYmUgZG9tYWluIGJhc2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvbWFpbkJhc2VkSWRlbnRpdHlQcm92aWRlciB7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyBhbiBhYnN0cmFjdGlvbiBvZiBhIHNpbXBsZSBlbWFpbCBtZXNzYWdlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsIHtcbiAgYXR0YWNobWVudHM/OiBBcnJheTxBdHRhY2htZW50PjtcbiAgYmNjPzogQXJyYXk8RW1haWxBZGRyZXNzPjtcbiAgY2M/OiBBcnJheTxFbWFpbEFkZHJlc3M+O1xuICBmcm9tPzogRW1haWxBZGRyZXNzO1xuICBodG1sPzogc3RyaW5nO1xuICByZXBseVRvPzogRW1haWxBZGRyZXNzO1xuICBzdWJqZWN0Pzogc3RyaW5nO1xuICB0ZXh0Pzogc3RyaW5nO1xuICB0bz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG59XG5cbi8qKlxuICogQW4gZW1haWwgYWRkcmVzcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEFkZHJlc3Mge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBkaXNwbGF5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsQ29uZmlndXJhdGlvbiB7XG4gIGFkZGl0aW9uYWxIZWFkZXJzPzogQXJyYXk8RW1haWxIZWFkZXI+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRlZmF1bHRGcm9tRW1haWw/OiBzdHJpbmc7XG4gIGRlZmF1bHRGcm9tTmFtZT86IHN0cmluZztcbiAgZW1haWxVcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbWFpbFZlcmlmaWVkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZm9yZ290UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBob3N0Pzogc3RyaW5nO1xuICBpbXBsaWNpdEVtYWlsVmVyaWZpY2F0aW9uQWxsb3dlZD86IGJvb2xlYW47XG4gIGxvZ2luSWRJblVzZU9uQ3JlYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5JZEluVXNlT25VcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbk5ld0RldmljZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luU3VzcGljaW91c0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICBwYXNzd29yZGxlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFJlc2V0U3VjY2Vzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcG9ydD86IG51bWJlcjtcbiAgcHJvcGVydGllcz86IHN0cmluZztcbiAgc2VjdXJpdHk/OiBFbWFpbFNlY3VyaXR5VHlwZTtcbiAgc2V0UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RBZGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RSZW1vdmVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB1bnZlcmlmaWVkPzogRW1haWxVbnZlcmlmaWVkT3B0aW9ucztcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvblN0cmF0ZWd5PzogVmVyaWZpY2F0aW9uU3RyYXRlZ3k7XG4gIHZlcmlmeUVtYWlsPzogYm9vbGVhbjtcbiAgdmVyaWZ5RW1haWxXaGVuQ2hhbmdlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsSGVhZGVyIHtcbiAgbmFtZT86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxQbHVzIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG1heGltdW1UaW1lVG9TZW5kRW1haWxJbkhvdXJzPzogbnVtYmVyO1xuICBtaW5pbXVtVGltZVRvU2VuZEVtYWlsSW5Ib3Vycz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gRW1haWxTZWN1cml0eVR5cGUge1xuICBOT05FID0gXCJOT05FXCIsXG4gIFNTTCA9IFwiU1NMXCIsXG4gIFRMUyA9IFwiVExTXCJcbn1cblxuLyoqXG4gKiBTdG9yZXMgYW4gZW1haWwgdGVtcGxhdGUgdXNlZCB0byBzZW5kIGVtYWlscyB0byB1c2Vycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlIHtcbiAgZGVmYXVsdEZyb21OYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0SHRtbFRlbXBsYXRlPzogc3RyaW5nO1xuICBkZWZhdWx0U3ViamVjdD86IHN0cmluZztcbiAgZGVmYXVsdFRleHRUZW1wbGF0ZT86IHN0cmluZztcbiAgZnJvbUVtYWlsPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRGcm9tTmFtZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBsb2NhbGl6ZWRIdG1sVGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbG9jYWxpemVkU3ViamVjdHM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBsb2NhbGl6ZWRUZXh0VGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlRXJyb3JzIHtcbiAgcGFyc2VFcnJvcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByZW5kZXJFcnJvcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEVtYWlsIHRlbXBsYXRlIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVJlcXVlc3Qge1xuICBlbWFpbFRlbXBsYXRlPzogRW1haWxUZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBFbWFpbCB0ZW1wbGF0ZSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlUmVzcG9uc2Uge1xuICBlbWFpbFRlbXBsYXRlPzogRW1haWxUZW1wbGF0ZTtcbiAgZW1haWxUZW1wbGF0ZXM/OiBBcnJheTxFbWFpbFRlbXBsYXRlPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxVbnZlcmlmaWVkT3B0aW9ucyB7XG4gIGFsbG93RW1haWxDaGFuZ2VXaGVuR2F0ZWQ/OiBib29sZWFuO1xuICBiZWhhdmlvcj86IFVudmVyaWZpZWRCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBTb21ldGhpbmcgdGhhdCBjYW4gYmUgZW5hYmxlZCBhbmQgdGh1cyBhbHNvIGRpc2FibGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVhYmxlIHtcbiAgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGVudGl0eSB0aGF0IGEgdXNlciBjYW4gYmUgZ3JhbnRlZCBwZXJtaXNzaW9ucyB0by4gT3IgYW4gZW50aXR5IHRoYXQgY2FuIGJlIGdyYW50ZWQgcGVybWlzc2lvbnMgdG8gYW5vdGhlciBlbnRpdHkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5IHtcbiAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhcmVudElkPzogVVVJRDtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0eXBlPzogRW50aXR5VHlwZTtcbn1cblxuLyoqXG4gKiBBIGdyYW50IGZvciBhbiBlbnRpdHkgdG8gYSB1c2VyIG9yIGFub3RoZXIgZW50aXR5LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50IHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVudGl0eT86IEVudGl0eTtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgcGVybWlzc2lvbnM/OiBBcnJheTxzdHJpbmc+O1xuICByZWNpcGllbnRFbnRpdHlJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogRW50aXR5IGdyYW50IEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFJlcXVlc3Qge1xuICBncmFudD86IEVudGl0eUdyYW50O1xufVxuXG4vKipcbiAqIEVudGl0eSBncmFudCBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50UmVzcG9uc2Uge1xuICBncmFudD86IEVudGl0eUdyYW50O1xuICBncmFudHM/OiBBcnJheTxFbnRpdHlHcmFudD47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBlbnRpdHkgZ3JhbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbnRpdHlJZD86IFVVSUQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0eSBncmFudHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnRTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogRW50aXR5R3JhbnRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXR5IGdyYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlIHtcbiAgZ3JhbnRzPzogQXJyYXk8RW50aXR5R3JhbnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBKV1QgQ29uZmlndXJhdGlvbiBmb3IgZW50aXRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5SldUQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhY2Nlc3NUb2tlbktleUlkPzogVVVJRDtcbiAgdGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFbnRpdHkgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVJlcXVlc3Qge1xuICBlbnRpdHk/OiBFbnRpdHk7XG59XG5cbi8qKlxuICogRW50aXR5IEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5UmVzcG9uc2Uge1xuICBlbnRpdHk/OiBFbnRpdHk7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB0aGUgZW50aXR5IHF1ZXJ5LiBJdCBwcm92aWRlcyBhIGJ1aWxkIHBhdHRlcm4gYXMgd2VsbCBhcyBwdWJsaWMgZmllbGRzIGZvciB1c2Ugb24gZm9ybXMgYW5kIGluIGFjdGlvbnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlRWxhc3RpY1NlYXJjaENyaXRlcmlhIHtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXRpZXNcbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBFbnRpdHlTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXRpZXNcbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVNlYXJjaFJlc3BvbnNlIHtcbiAgZW50aXRpZXM/OiBBcnJheTxFbnRpdHk+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZW50aXR5IHR5cGUgdGhhdCBoYXMgYSBzcGVjaWZpYyBzZXQgb2YgcGVybWlzc2lvbnMuIFRoZXNlIGFyZSBnbG9iYWwgb2JqZWN0cyBhbmQgY2FuIGJlIHVzZWQgYWNyb3NzIHRlbmFudHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGp3dENvbmZpZ3VyYXRpb24/OiBFbnRpdHlKV1RDb25maWd1cmF0aW9uO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcGVybWlzc2lvbnM/OiBBcnJheTxFbnRpdHlUeXBlUGVybWlzc2lvbj47XG59XG5cbi8qKlxuICogTW9kZWxzIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgcGVybWlzc2lvbi4gVGhpcyBwZXJtaXNzaW9uIGNhbiBiZSBncmFudGVkIHRvIHVzZXJzIG9yIG90aGVyIGVudGl0aWVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVQZXJtaXNzaW9uIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlzRGVmYXVsdD86IGJvb2xlYW47XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVudGl0eSBUeXBlIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlUmVxdWVzdCB7XG4gIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlO1xuICBwZXJtaXNzaW9uPzogRW50aXR5VHlwZVBlcm1pc3Npb247XG59XG5cbi8qKlxuICogRW50aXR5IFR5cGUgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlUmVzcG9uc2Uge1xuICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcbiAgZW50aXR5VHlwZXM/OiBBcnJheTxFbnRpdHlUeXBlPjtcbiAgcGVybWlzc2lvbj86IEVudGl0eVR5cGVQZXJtaXNzaW9uO1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEVudGl0eVR5cGVTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVzcG9uc2UgZm9yIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlU2VhcmNoUmVzcG9uc2Uge1xuICBlbnRpdHlUeXBlcz86IEFycmF5PEVudGl0eVR5cGU+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcGljR2FtZXNBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXBpYyBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXBpY0dhbWVzSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEVwaWNHYW1lc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluZXMgYW4gZXJyb3IuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3Ige1xuICBjb2RlPzogc3RyaW5nO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGFuZGFyZCBlcnJvciBkb21haW4gb2JqZWN0IHRoYXQgY2FuIGFsc28gYmUgdXNlZCBhcyB0aGUgcmVzcG9uc2UgZnJvbSBhbiBBUEkgY2FsbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcnJvcnMge1xuICBmaWVsZEVycm9ycz86IFJlY29yZDxzdHJpbmcsIEFycmF5PEVycm9yPj47XG4gIGdlbmVyYWxFcnJvcnM/OiBBcnJheTxFcnJvcj47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDb25maWd1cmF0aW9uIHtcbiAgZXZlbnRzPzogUmVjb3JkPEV2ZW50VHlwZSwgRXZlbnRDb25maWd1cmF0aW9uRGF0YT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDb25maWd1cmF0aW9uRGF0YSBleHRlbmRzIEVuYWJsZWFibGUge1xuICB0cmFuc2FjdGlvblR5cGU/OiBUcmFuc2FjdGlvblR5cGU7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgYSB1c2VyIGV2ZW50IChsb2dpbiwgcmVnaXN0ZXIsIGV0YykgdGhhdCBoZWxwcyBpZGVudGlmeSB0aGUgc291cmNlIG9mIHRoZSBldmVudCAobG9jYXRpb24sIGRldmljZSB0eXBlLCBPUywgZXRjKS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudEluZm8ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGV2aWNlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGRldmljZU5hbWU/OiBzdHJpbmc7XG4gIGRldmljZVR5cGU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgbG9jYXRpb24/OiBMb2NhdGlvbjtcbiAgb3M/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBsb2cgdXNlZCBpbnRlcm5hbGx5IGJ5IEZ1c2lvbkF1dGggdG8gaGVscCBkZXZlbG9wZXJzIGRlYnVnIGhvb2tzLCBXZWJob29rcywgZW1haWwgdGVtcGxhdGVzLCBldGMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2cge1xuICBpZD86IG51bWJlcjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgdHlwZT86IEV2ZW50TG9nVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ0NvbmZpZ3VyYXRpb24ge1xuICBudW1iZXJUb1JldGFpbj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFdmVudCBldmVudCB0byBhbiBldmVudCBsb2cgd2FzIGNyZWF0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBldmVudExvZz86IEV2ZW50TG9nO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dSZXNwb25zZSB7XG4gIGV2ZW50TG9nPzogRXZlbnRMb2c7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciB0aGUgZXZlbnQgbG9nLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbmQ/OiBudW1iZXI7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB0eXBlPzogRXZlbnRMb2dUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEV2ZW50TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogRXZlbnQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoUmVzcG9uc2Uge1xuICBldmVudExvZ3M/OiBBcnJheTxFdmVudExvZz47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV2ZW50IExvZyBUeXBlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBFdmVudExvZ1R5cGUge1xuICBJbmZvcm1hdGlvbiA9IFwiSW5mb3JtYXRpb25cIixcbiAgRGVidWcgPSBcIkRlYnVnXCIsXG4gIEVycm9yID0gXCJFcnJvclwiXG59XG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgZXZlbnQgaW5mb3JtYXRpb24uIFRoaXMgaXMgdGhlIEpTT04gdGhhdCBpcyBzZW50IGZyb20gRnVzaW9uQXV0aCB0byB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFJlcXVlc3Qge1xuICBldmVudD86IEJhc2VFdmVudDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIGV2ZW50IHR5cGVzIHRoYXQgRnVzaW9uQXV0aCBwcm9kdWNlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgSldUUHVibGljS2V5VXBkYXRlID0gXCJqd3QucHVibGljLWtleS51cGRhdGVcIixcbiAgSldUUmVmcmVzaFRva2VuUmV2b2tlID0gXCJqd3QucmVmcmVzaC10b2tlbi5yZXZva2VcIixcbiAgSldUUmVmcmVzaCA9IFwiand0LnJlZnJlc2hcIixcbiAgQXVkaXRMb2dDcmVhdGUgPSBcImF1ZGl0LWxvZy5jcmVhdGVcIixcbiAgRXZlbnRMb2dDcmVhdGUgPSBcImV2ZW50LWxvZy5jcmVhdGVcIixcbiAgS2lja3N0YXJ0U3VjY2VzcyA9IFwia2lja3N0YXJ0LnN1Y2Nlc3NcIixcbiAgR3JvdXBDcmVhdGUgPSBcImdyb3VwLmNyZWF0ZVwiLFxuICBHcm91cENyZWF0ZUNvbXBsZXRlID0gXCJncm91cC5jcmVhdGUuY29tcGxldGVcIixcbiAgR3JvdXBEZWxldGUgPSBcImdyb3VwLmRlbGV0ZVwiLFxuICBHcm91cERlbGV0ZUNvbXBsZXRlID0gXCJncm91cC5kZWxldGUuY29tcGxldGVcIixcbiAgR3JvdXBNZW1iZXJBZGQgPSBcImdyb3VwLm1lbWJlci5hZGRcIixcbiAgR3JvdXBNZW1iZXJBZGRDb21wbGV0ZSA9IFwiZ3JvdXAubWVtYmVyLmFkZC5jb21wbGV0ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZSA9IFwiZ3JvdXAubWVtYmVyLnJlbW92ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZUNvbXBsZXRlID0gXCJncm91cC5tZW1iZXIucmVtb3ZlLmNvbXBsZXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlID0gXCJncm91cC5tZW1iZXIudXBkYXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlQ29tcGxldGUgPSBcImdyb3VwLm1lbWJlci51cGRhdGUuY29tcGxldGVcIixcbiAgR3JvdXBVcGRhdGUgPSBcImdyb3VwLnVwZGF0ZVwiLFxuICBHcm91cFVwZGF0ZUNvbXBsZXRlID0gXCJncm91cC51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlckFjdGlvbiA9IFwidXNlci5hY3Rpb25cIixcbiAgVXNlckJ1bGtDcmVhdGUgPSBcInVzZXIuYnVsay5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZSA9IFwidXNlci5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZUNvbXBsZXRlID0gXCJ1c2VyLmNyZWF0ZS5jb21wbGV0ZVwiLFxuICBVc2VyRGVhY3RpdmF0ZSA9IFwidXNlci5kZWFjdGl2YXRlXCIsXG4gIFVzZXJEZWxldGUgPSBcInVzZXIuZGVsZXRlXCIsXG4gIFVzZXJEZWxldGVDb21wbGV0ZSA9IFwidXNlci5kZWxldGUuY29tcGxldGVcIixcbiAgVXNlckVtYWlsVXBkYXRlID0gXCJ1c2VyLmVtYWlsLnVwZGF0ZVwiLFxuICBVc2VyRW1haWxWZXJpZmllZCA9IFwidXNlci5lbWFpbC52ZXJpZmllZFwiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlckxpbmsgPSBcInVzZXIuaWRlbnRpdHktcHJvdmlkZXIubGlua1wiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlclVubGluayA9IFwidXNlci5pZGVudGl0eS1wcm92aWRlci51bmxpbmtcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS5jcmVhdGVcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPblVwZGF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS51cGRhdGVcIixcbiAgVXNlckxvZ2luRmFpbGVkID0gXCJ1c2VyLmxvZ2luLmZhaWxlZFwiLFxuICBVc2VyTG9naW5OZXdEZXZpY2UgPSBcInVzZXIubG9naW4ubmV3LWRldmljZVwiLFxuICBVc2VyTG9naW5TdWNjZXNzID0gXCJ1c2VyLmxvZ2luLnN1Y2Nlc3NcIixcbiAgVXNlckxvZ2luU3VzcGljaW91cyA9IFwidXNlci5sb2dpbi5zdXNwaWNpb3VzXCIsXG4gIFVzZXJQYXNzd29yZEJyZWFjaCA9IFwidXNlci5wYXNzd29yZC5icmVhY2hcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTZW5kID0gXCJ1c2VyLnBhc3N3b3JkLnJlc2V0LnNlbmRcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTdGFydCA9IFwidXNlci5wYXNzd29yZC5yZXNldC5zdGFydFwiLFxuICBVc2VyUGFzc3dvcmRSZXNldFN1Y2Nlc3MgPSBcInVzZXIucGFzc3dvcmQucmVzZXQuc3VjY2Vzc1wiLFxuICBVc2VyUGFzc3dvcmRVcGRhdGUgPSBcInVzZXIucGFzc3dvcmQudXBkYXRlXCIsXG4gIFVzZXJSZWFjdGl2YXRlID0gXCJ1c2VyLnJlYWN0aXZhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVDb21wbGV0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25EZWxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlQ29tcGxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZS5jb21wbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uVXBkYXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblVwZGF0ZUNvbXBsZXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblZlcmlmaWVkID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi52ZXJpZmllZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kQWRkID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLmFkZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLnJlbW92ZVwiLFxuICBVc2VyVXBkYXRlID0gXCJ1c2VyLnVwZGF0ZVwiLFxuICBVc2VyVXBkYXRlQ29tcGxldGUgPSBcInVzZXIudXBkYXRlLmNvbXBsZXRlXCIsXG4gIFRlc3QgPSBcInRlc3RcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBFeHBpcnlVbml0IHtcbiAgTUlOVVRFUyA9IFwiTUlOVVRFU1wiLFxuICBIT1VSUyA9IFwiSE9VUlNcIixcbiAgREFZUyA9IFwiREFZU1wiLFxuICBXRUVLUyA9IFwiV0VFS1NcIixcbiAgTU9OVEhTID0gXCJNT05USFNcIixcbiAgWUVBUlMgPSBcIllFQVJTXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhvcml6YXRpb25HcmFudElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgY2hhbmdlUGFzc3dvcmRJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGNoYW5nZVBhc3N3b3JkSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBkZXZpY2VDb2RlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgZGV2aWNlVXNlckNvZGVJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBlbWFpbFZlcmlmaWNhdGlvbklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgZW1haWxWZXJpZmljYXRpb25PbmVUaW1lQ29kZUdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGV4dGVybmFsQXV0aGVudGljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIG9uZVRpbWVQYXNzd29yZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHBhc3N3b3JkbGVzc0xvZ2luR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRsZXNzTG9naW5UaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBwZW5kaW5nQWNjb3VudExpbmtUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uT25lVGltZUNvZGVHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBzYW1sdjJBdXRoTlJlcXVlc3RJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHNldHVwUGFzc3dvcmRJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHNldHVwUGFzc3dvcmRJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHRydXN0VG9rZW5UaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0d29GYWN0b3JJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHR3b0ZhY3Rvck9uZVRpbWVDb2RlSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICB0d29GYWN0b3JPbmVUaW1lQ29kZUlkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHdvRmFjdG9yVHJ1c3RJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVybmFsSldUQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xufVxuXG4vKipcbiAqIEV4dGVybmFsIEpXVC1vbmx5IGlkZW50aXR5IHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmYgYW5kIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbEpXVElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxFeHRlcm5hbEpXVEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBjbGFpbU1hcD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGRlZmF1bHRLZXlJZD86IFVVSUQ7XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBoZWFkZXJLZXlQYXJhbWV0ZXI/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xuICB1bmlxdWVJZGVudGl0eUNsYWltPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYXBwSWQ/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGZpZWxkcz86IHN0cmluZztcbiAgbG9naW5NZXRob2Q/OiBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Q7XG4gIHBlcm1pc3Npb25zPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZhY2Vib29rIHNvY2lhbCBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0lkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxGYWNlYm9va0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBhcHBJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZmllbGRzPzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGJlaGF2aW9yIG9mIGZhaWxlZCBsb2dpbiBhdHRlbXB0cy4gVGhpcyBoZWxwcyB1cyBwcm90ZWN0IGFnYWluc3QgYnJ1dGUgZm9yY2UgcGFzc3dvcmQgYXR0YWNrcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbGVkQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYWN0aW9uRHVyYXRpb24/OiBudW1iZXI7XG4gIGFjdGlvbkR1cmF0aW9uVW5pdD86IEV4cGlyeVVuaXQ7XG4gIHJlc2V0Q291bnRJblNlY29uZHM/OiBudW1iZXI7XG4gIHRvb01hbnlBdHRlbXB0cz86IG51bWJlcjtcbiAgdXNlckFjdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBmYW1pbHkgZ3JvdXBpbmcgb2YgdXNlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5IHtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbWVtYmVycz86IEFycmF5PEZhbWlseU1lbWJlcj47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhbGxvd0NoaWxkUmVnaXN0cmF0aW9ucz86IGJvb2xlYW47XG4gIGNvbmZpcm1DaGlsZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGRlbGV0ZU9ycGhhbmVkQWNjb3VudHM/OiBib29sZWFuO1xuICBkZWxldGVPcnBoYW5lZEFjY291bnRzRGF5cz86IG51bWJlcjtcbiAgZmFtaWx5UmVxdWVzdEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG1heGltdW1DaGlsZEFnZT86IG51bWJlcjtcbiAgbWluaW11bU93bmVyQWdlPzogbnVtYmVyO1xuICBwYXJlbnRFbWFpbFJlcXVpcmVkPzogYm9vbGVhbjtcbiAgcGFyZW50UmVnaXN0cmF0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCBmb3Igc2VuZGluZyBvdXQgZmFtaWx5IHJlcXVlc3RzIHRvIHBhcmVudCdzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseUVtYWlsUmVxdWVzdCB7XG4gIHBhcmVudEVtYWlsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNpbmdsZSBmYW1pbHkgbWVtYmVyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseU1lbWJlciB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgb3duZXI/OiBib29sZWFuO1xuICByb2xlPzogRmFtaWx5Um9sZTtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCBmb3IgbWFuYWdpbmcgZmFtaWxpZXMgYW5kIG1lbWJlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5UmVxdWVzdCB7XG4gIGZhbWlseU1lbWJlcj86IEZhbWlseU1lbWJlcjtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIG1hbmFnaW5nIGZhbWlsaWVzIGFuZCBtZW1iZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseVJlc3BvbnNlIHtcbiAgZmFtaWxpZXM/OiBBcnJheTxGYW1pbHk+O1xuICBmYW1pbHk/OiBGYW1pbHk7XG59XG5cbmV4cG9ydCBlbnVtIEZhbWlseVJvbGUge1xuICBDaGlsZCA9IFwiQ2hpbGRcIixcbiAgVGVlbiA9IFwiVGVlblwiLFxuICBBZHVsdCA9IFwiQWR1bHRcIlxufVxuXG4vKipcbiAqIEZvcmdvdCBwYXNzd29yZCByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3Jnb3RQYXNzd29yZFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBzZW5kRm9yZ290UGFzc3dvcmRFbWFpbD86IGJvb2xlYW47XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRm9yZ290IHBhc3N3b3JkIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXNwb25zZSB7XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm0ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RlcHM/OiBBcnJheTxGb3JtU3RlcD47XG4gIHR5cGU/OiBGb3JtVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1Db250cm9sIHtcbiAgY2hlY2tib3ggPSBcImNoZWNrYm94XCIsXG4gIG51bWJlciA9IFwibnVtYmVyXCIsXG4gIHBhc3N3b3JkID0gXCJwYXNzd29yZFwiLFxuICByYWRpbyA9IFwicmFkaW9cIixcbiAgc2VsZWN0ID0gXCJzZWxlY3RcIixcbiAgdGV4dGFyZWEgPSBcInRleHRhcmVhXCIsXG4gIHRleHQgPSBcInRleHRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybURhdGFUeXBlIHtcbiAgYm9vbCA9IFwiYm9vbFwiLFxuICBjb25zZW50ID0gXCJjb25zZW50XCIsXG4gIGRhdGUgPSBcImRhdGVcIixcbiAgZW1haWwgPSBcImVtYWlsXCIsXG4gIG51bWJlciA9IFwibnVtYmVyXCIsXG4gIHN0cmluZyA9IFwic3RyaW5nXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkIHtcbiAgY29uZmlybT86IGJvb2xlYW47XG4gIGNvbnNlbnRJZD86IFVVSUQ7XG4gIGNvbnRyb2w/OiBGb3JtQ29udHJvbDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGtleT86IHN0cmluZztcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBBcnJheTxzdHJpbmc+O1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHR5cGU/OiBGb3JtRGF0YVR5cGU7XG4gIHZhbGlkYXRvcj86IEZvcm1GaWVsZFZhbGlkYXRvcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1GaWVsZEFkbWluUG9saWN5IHtcbiAgRWRpdCA9IFwiRWRpdFwiLFxuICBWaWV3ID0gXCJWaWV3XCJcbn1cblxuLyoqXG4gKiBUaGUgRm9ybUZpZWxkIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1GaWVsZFJlcXVlc3Qge1xuICBmaWVsZD86IEZvcm1GaWVsZDtcbiAgZmllbGRzPzogQXJyYXk8Rm9ybUZpZWxkPjtcbn1cblxuLyoqXG4gKiBGb3JtIGZpZWxkIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkUmVzcG9uc2Uge1xuICBmaWVsZD86IEZvcm1GaWVsZDtcbiAgZmllbGRzPzogQXJyYXk8Rm9ybUZpZWxkPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkVmFsaWRhdG9yIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGV4cHJlc3Npb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRm9ybSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVJlcXVlc3Qge1xuICBmb3JtPzogRm9ybTtcbn1cblxuLyoqXG4gKiBGb3JtIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtUmVzcG9uc2Uge1xuICBmb3JtPzogRm9ybTtcbiAgZm9ybXM/OiBBcnJheTxGb3JtPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVN0ZXAge1xuICBmaWVsZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1UeXBlIHtcbiAgcmVnaXN0cmF0aW9uID0gXCJyZWdpc3RyYXRpb25cIixcbiAgYWRtaW5SZWdpc3RyYXRpb24gPSBcImFkbWluUmVnaXN0cmF0aW9uXCIsXG4gIGFkbWluVXNlciA9IFwiYWRtaW5Vc2VyXCIsXG4gIHNlbGZTZXJ2aWNlVXNlciA9IFwic2VsZlNlcnZpY2VVc2VyXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEZ1c2lvbkF1dGggY29ubmVjdG9yLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVzaW9uQXV0aENvbm5lY3RvckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbiB7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgZ2VuZXJpYyBjb25uZWN0b3IuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljQ29ubmVjdG9yQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbiAgYXV0aGVudGljYXRpb25VUkw/OiBzdHJpbmc7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBoZWFkZXJzPzogSFRUUEhlYWRlcnM7XG4gIGh0dHBBdXRoZW50aWNhdGlvblBhc3N3b3JkPzogc3RyaW5nO1xuICBodHRwQXV0aGVudGljYXRpb25Vc2VybmFtZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHNzbENlcnRpZmljYXRlS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY01lc3NlbmdlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiB7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBoZWFkZXJzPzogSFRUUEhlYWRlcnM7XG4gIGh0dHBBdXRoZW50aWNhdGlvblBhc3N3b3JkPzogc3RyaW5nO1xuICBodHRwQXV0aGVudGljYXRpb25Vc2VybmFtZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHNzbENlcnRpZmljYXRlPzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdvb2dsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogR29vZ2xlIHNvY2lhbCBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR29vZ2xlSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEdvb2dsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBdXRob3JpemF0aW9uIEdyYW50IHR5cGVzIGFzIGRlZmluZWQgYnkgdGhlIDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc0OVwiPlRoZSBPQXV0aCAyLjAgQXV0aG9yaXphdGlvblxuICogRnJhbWV3b3JrIC0gUkZDIDY3NDk8L2E+LlxuICogPHA+XG4gKiBTcGVjaWZpYyBuYW1lcyBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU5MSNzZWN0aW9uLTQuMVwiPlxuICogT0F1dGggMi4wIER5bmFtaWMgQ2xpZW50IFJlZ2lzdHJhdGlvbiBQcm90b2NvbCAtIFJGQyA3NTkxIFNlY3Rpb24gNC4xPC9hPlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gR3JhbnRUeXBlIHtcbiAgYXV0aG9yaXphdGlvbl9jb2RlID0gXCJhdXRob3JpemF0aW9uX2NvZGVcIixcbiAgaW1wbGljaXQgPSBcImltcGxpY2l0XCIsXG4gIHBhc3N3b3JkID0gXCJwYXNzd29yZFwiLFxuICBjbGllbnRfY3JlZGVudGlhbHMgPSBcImNsaWVudF9jcmVkZW50aWFsc1wiLFxuICByZWZyZXNoX3Rva2VuID0gXCJyZWZyZXNoX3Rva2VuXCIsXG4gIHVua25vd24gPSBcInVua25vd25cIixcbiAgZGV2aWNlX2NvZGUgPSBcInVybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmRldmljZV9jb2RlXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFR5bGVyIFNjb3R0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXAge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcm9sZXM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8QXBwbGljYXRpb25Sb2xlPj47XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIENyZWF0ZWQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwQ3JlYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgQ3JlYXRlIENvbXBsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cERlbGV0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgRGVsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cERlbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbn1cblxuLyoqXG4gKiBBIFVzZXIncyBtZW1iZXJzaGlwIGludG8gYSBHcm91cFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlciB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBncm91cElkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICB1c2VyPzogVXNlcjtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBBZGQgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyQWRkQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgQWRkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlckFkZEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBSZW1vdmUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyUmVtb3ZlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgUmVtb3ZlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclJlbW92ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIEdyb3VwIE1lbWJlcnNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGdyb3VwSWQ/OiBVVUlEO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIEdyb3VwIE1lbWJlcnMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEdyb3VwTWVtYmVyU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3BvbnNlIGZvciBHcm91cCBNZW1iZXJzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoUmVzcG9uc2Uge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBVcGRhdGUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBHcm91cCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwUmVxdWVzdCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIHJvbGVJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBHcm91cCBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFJlc3BvbnNlIHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgZ3JvdXBzPzogQXJyYXk8R3JvdXA+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgR3JvdXBzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBpZD86IFVVSUQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgR3JvdXBzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBHcm91cFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgR3JvdXBzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VhcmNoUmVzcG9uc2Uge1xuICBncm91cHM/OiBBcnJheTxHcm91cD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgVXBkYXRlIENvbXBsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFVwZGF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xuICBvcmlnaW5hbD86IEdyb3VwO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgb3JpZ2luYWw/OiBHcm91cDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5SXRlbSB7XG4gIGFjdGlvbmVyVXNlcklkPzogVVVJRDtcbiAgY29tbWVudD86IHN0cmluZztcbiAgY3JlYXRlSW5zdGFudD86IG51bWJlcjtcbiAgZXhwaXJ5PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFR5cGUgZm9yIHdlYmhvb2sgaGVhZGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIVFRQSGVhZGVycyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gSFRUUE1ldGhvZCB7XG4gIEdFVCA9IFwiR0VUXCIsXG4gIFBPU1QgPSBcIlBPU1RcIixcbiAgUFVUID0gXCJQVVRcIixcbiAgREVMRVRFID0gXCJERUxFVEVcIixcbiAgSEVBRCA9IFwiSEVBRFwiLFxuICBPUFRJT05TID0gXCJPUFRJT05TXCIsXG4gIFBBVENIID0gXCJQQVRDSFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhZUFJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIHJlbHlpbmdQYXJ0eUFwcGxpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHJlbHlpbmdQYXJ0eVVSTD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSFlQUklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxIWVBSQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIHJlbHlpbmdQYXJ0eUFwcGxpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHJlbHlpbmdQYXJ0eVVSTD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyRGV0YWlscyB7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGlkPzogVVVJRDtcbiAgaWRwRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xuICB0eXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW1pdFVzZXJMaW5raW5nUG9saWN5IGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG1heGltdW1MaW5rcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxpbmsge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ/OiBzdHJpbmc7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RMb2dpbkluc3RhbnQ/OiBudW1iZXI7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIElkUCBiZWhhdmlvciB3aGVuIG5vIHVzZXIgbGluayBoYXMgYmVlbiBtYWRlIHlldC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJMaW5raW5nU3RyYXRlZ3kge1xuICBDcmVhdGVQZW5kaW5nTGluayA9IFwiQ3JlYXRlUGVuZGluZ0xpbmtcIixcbiAgRGlzYWJsZWQgPSBcIkRpc2FibGVkXCIsXG4gIExpbmtBbm9ueW1vdXNseSA9IFwiTGlua0Fub255bW91c2x5XCIsXG4gIExpbmtCeUVtYWlsID0gXCJMaW5rQnlFbWFpbFwiLFxuICBMaW5rQnlFbWFpbEZvckV4aXN0aW5nVXNlciA9IFwiTGlua0J5RW1haWxGb3JFeGlzdGluZ1VzZXJcIixcbiAgTGlua0J5VXNlcm5hbWUgPSBcIkxpbmtCeVVzZXJuYW1lXCIsXG4gIExpbmtCeVVzZXJuYW1lRm9yRXhpc3RpbmdVc2VyID0gXCJMaW5rQnlVc2VybmFtZUZvckV4aXN0aW5nVXNlclwiLFxuICBVbnN1cHBvcnRlZCA9IFwiVW5zdXBwb3J0ZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGlua1JlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ/OiBzdHJpbmc7XG4gIHBlbmRpbmdJZFBMaW5rSWQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICBpZGVudGl0eVByb3ZpZGVyTGlua3M/OiBBcnJheTxJZGVudGl0eVByb3ZpZGVyTGluaz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZCB7XG4gIFVzZVBvcHVwID0gXCJVc2VQb3B1cFwiLFxuICBVc2VSZWRpcmVjdCA9IFwiVXNlUmVkaXJlY3RcIlxufVxuXG4vKipcbiAqIExvZ2luIEFQSSByZXF1ZXN0IG9iamVjdCB1c2VkIGZvciBsb2dpbiB0byB0aGlyZC1wYXJ0eSBzeXN0ZW1zIChpLmUuIExvZ2luIHdpdGggRmFjZWJvb2spLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGVuY29kZWRKV1Q/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIG5vTGluaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uIHtcbiAgYXV0aG9yaXphdGlvbl9lbmRwb2ludD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBjbGllbnRBdXRoZW50aWNhdGlvbk1ldGhvZD86IENsaWVudEF1dGhlbnRpY2F0aW9uTWV0aG9kO1xuICBlbWFpbENsYWltPzogc3RyaW5nO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB0b2tlbl9lbmRwb2ludD86IHN0cmluZztcbiAgdW5pcXVlSWRDbGFpbT86IHN0cmluZztcbiAgdXNlcmluZm9fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJSZXF1ZXN0IHtcbiAgaWRlbnRpdHlQcm92aWRlcj86IEJhc2VJZGVudGl0eVByb3ZpZGVyPGFueT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXI/OiBCYXNlSWRlbnRpdHlQcm92aWRlcjxhbnk+O1xuICBpZGVudGl0eVByb3ZpZGVycz86IEFycmF5PEJhc2VJZGVudGl0eVByb3ZpZGVyPGFueT4+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGxpbWl0VXNlckxpbmtDb3VudD86IElkZW50aXR5UHJvdmlkZXJMaW1pdFVzZXJMaW5raW5nUG9saWN5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gSWRlbnRpdHlQcm92aWRlclR5cGUge1xuICBBcHBsZSA9IFwiQXBwbGVcIixcbiAgRXBpY0dhbWVzID0gXCJFcGljR2FtZXNcIixcbiAgRXh0ZXJuYWxKV1QgPSBcIkV4dGVybmFsSldUXCIsXG4gIEZhY2Vib29rID0gXCJGYWNlYm9va1wiLFxuICBHb29nbGUgPSBcIkdvb2dsZVwiLFxuICBIWVBSID0gXCJIWVBSXCIsXG4gIExpbmtlZEluID0gXCJMaW5rZWRJblwiLFxuICBOaW50ZW5kbyA9IFwiTmludGVuZG9cIixcbiAgT3BlbklEQ29ubmVjdCA9IFwiT3BlbklEQ29ubmVjdFwiLFxuICBTQU1MdjIgPSBcIlNBTUx2MlwiLFxuICBTQU1MdjJJZFBJbml0aWF0ZWQgPSBcIlNBTUx2MklkUEluaXRpYXRlZFwiLFxuICBTb255UFNOID0gXCJTb255UFNOXCIsXG4gIFN0ZWFtID0gXCJTdGVhbVwiLFxuICBUd2l0Y2ggPSBcIlR3aXRjaFwiLFxuICBUd2l0dGVyID0gXCJUd2l0dGVyXCIsXG4gIFhib3ggPSBcIlhib3hcIlxufVxuXG4vKipcbiAqIEltcG9ydCByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZW5jcnlwdGlvblNjaGVtZT86IHN0cmluZztcbiAgZmFjdG9yPzogbnVtYmVyO1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xuICB2YWxpZGF0ZURiQ29uc3RyYWludHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgbWFya2VyIGludGVyZmFjZSBpbmRpY2F0aW5nIHRoaXMgZXZlbnQgaXMgbm90IHNjb3BlZCB0byBhIHRlbmFudCBhbmQgd2lsbCBiZSBzZW50IHRvIGFsbCB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VFdmVudCBleHRlbmRzIE5vblRyYW5zYWN0aW9uYWxFdmVudCB7XG59XG5cbi8qKlxuICogVGhlIEludGVncmF0aW9uIFJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25SZXF1ZXN0IHtcbiAgaW50ZWdyYXRpb25zPzogSW50ZWdyYXRpb25zO1xufVxuXG4vKipcbiAqIFRoZSBJbnRlZ3JhdGlvbiBSZXNwb25zZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvblJlc3BvbnNlIHtcbiAgaW50ZWdyYXRpb25zPzogSW50ZWdyYXRpb25zO1xufVxuXG4vKipcbiAqIEF2YWlsYWJsZSBJbnRlZ3JhdGlvbnNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25zIHtcbiAgY2xlYW5zcGVhaz86IENsZWFuU3BlYWtDb25maWd1cmF0aW9uO1xuICBrYWZrYT86IEthZmthQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50cm9zcGVjdFJlc3BvbnNlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xFbnRyeSB7XG4gIGFjdGlvbj86IElQQWNjZXNzQ29udHJvbEVudHJ5QWN0aW9uO1xuICBlbmRJUEFkZHJlc3M/OiBzdHJpbmc7XG4gIHN0YXJ0SVBBZGRyZXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIElQQWNjZXNzQ29udHJvbEVudHJ5QWN0aW9uIHtcbiAgQWxsb3cgPSBcIkFsbG93XCIsXG4gIEJsb2NrID0gXCJCbG9ja1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0IHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVudHJpZXM/OiBBcnJheTxJUEFjY2Vzc0NvbnRyb2xFbnRyeT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdCB7XG4gIGlwQWNjZXNzQ29udHJvbExpc3Q/OiBJUEFjY2Vzc0NvbnRyb2xMaXN0O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlIHtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdD86IElQQWNjZXNzQ29udHJvbExpc3Q7XG4gIGlwQWNjZXNzQ29udHJvbExpc3RzPzogQXJyYXk8SVBBY2Nlc3NDb250cm9sTGlzdD47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBJUCBBQ0xzIC5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlIHtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdHM/OiBBcnJheTxJUEFjY2Vzc0NvbnRyb2xMaXN0PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzc3VlUmVzcG9uc2Uge1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgSlNPTiBXZWIgS2V5IGFzIGRlZmluZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTE3I3NlY3Rpb24tNFwiPlJGQyA3NTE3IEpTT04gV2ViIEtleSAoSldLKVxuICogU2VjdGlvbiA0PC9hPiBhbmQgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTE4XCI+UkZDIDc1MTggSlNPTiBXZWIgQWxnb3JpdGhtcyAoSldBKTwvYT4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpTT05XZWJLZXkge1xuICBhbGc/OiBBbGdvcml0aG07XG4gIGNydj86IHN0cmluZztcbiAgZD86IHN0cmluZztcbiAgZHA/OiBzdHJpbmc7XG4gIGRxPzogc3RyaW5nO1xuICBlPzogc3RyaW5nO1xuICBraWQ/OiBzdHJpbmc7XG4gIGt0eT86IEtleVR5cGU7XG4gIG4/OiBzdHJpbmc7XG4gIFtvdGhlcjogc3RyaW5nXTogYW55OyAvLyBBbnkgb3RoZXIgZmllbGRzXG4gIHA/OiBzdHJpbmc7XG4gIHE/OiBzdHJpbmc7XG4gIHFpPzogc3RyaW5nO1xuICB1c2U/OiBzdHJpbmc7XG4gIHg/OiBzdHJpbmc7XG4gIHg1Yz86IEFycmF5PHN0cmluZz47XG4gIHg1dD86IHN0cmluZztcbiAgeDV0X1MyNTY/OiBzdHJpbmc7XG4gIHk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBhbnkgb2JqZWN0IHRoYXQgY2FuIHByb3ZpZGUgSlNPTiBXZWIga2V5IEluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpTT05XZWJLZXlJbmZvUHJvdmlkZXIge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV0tTUmVzcG9uc2Uge1xuICBrZXlzPzogQXJyYXk8SlNPTldlYktleT47XG59XG5cbi8qKlxuICogSlNPTiBXZWIgVG9rZW4gKEpXVCkgYXMgZGVmaW5lZCBieSBSRkMgNzUxOS5cbiAqIDxwcmU+XG4gKiBGcm9tIFJGQyA3NTE5IFNlY3Rpb24gMS4gSW50cm9kdWN0aW9uOlxuICogICAgVGhlIHN1Z2dlc3RlZCBwcm9udW5jaWF0aW9uIG9mIEpXVCBpcyB0aGUgc2FtZSBhcyB0aGUgRW5nbGlzaCB3b3JkIFwiam90XCIuXG4gKiA8L3ByZT5cbiAqIFRoZSBKV1QgaXMgbm90IFRocmVhZC1TYWZlIGFuZCBzaG91bGQgbm90IGJlIHJlLXVzZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVCB7XG4gIGF1ZD86IGFueTtcbiAgZXhwPzogbnVtYmVyO1xuICBpYXQ/OiBudW1iZXI7XG4gIGlzcz86IHN0cmluZztcbiAganRpPzogc3RyaW5nO1xuICBuYmY/OiBudW1iZXI7XG4gIFtvdGhlckNsYWltczogc3RyaW5nXTogYW55OyAvLyBBbnkgb3RoZXIgZmllbGRzXG4gIHN1Yj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBKV1QgQ29uZmlndXJhdGlvbi4gQSBKV1QgQ29uZmlndXJhdGlvbiBmb3IgYW4gQXBwbGljYXRpb24gbWF5IG5vdCBiZSBhY3RpdmUgaWYgaXQgaXMgdXNpbmcgdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uLCB0aGUgY29uZmlndXJhdGlvblxuICogbWF5IGJlIDxjb2RlPmVuYWJsZWQgPSBmYWxzZTwvY29kZT4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWNjZXNzVG9rZW5LZXlJZD86IFVVSUQ7XG4gIGlkVG9rZW5LZXlJZD86IFVVSUQ7XG4gIHJlZnJlc2hUb2tlbkV4cGlyYXRpb25Qb2xpY3k/OiBSZWZyZXNoVG9rZW5FeHBpcmF0aW9uUG9saWN5O1xuICByZWZyZXNoVG9rZW5SZXZvY2F0aW9uUG9saWN5PzogUmVmcmVzaFRva2VuUmV2b2NhdGlvblBvbGljeTtcbiAgcmVmcmVzaFRva2VuVGltZVRvTGl2ZUluTWludXRlcz86IG51bWJlcjtcbiAgcmVmcmVzaFRva2VuVXNhZ2VQb2xpY3k/OiBSZWZyZXNoVG9rZW5Vc2FnZVBvbGljeTtcbiAgdGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEpXVCBwdWJsaWMga2V5IFJlZnJlc2ggVG9rZW4gUmV2b2tlIEV2ZW50LiBUaGlzIGV2ZW50IG1pZ2h0IGJlIGZvciBhIHNpbmdsZVxuICogdG9rZW4sIGEgdXNlciBvciBhbiBlbnRpcmUgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUUHVibGljS2V5VXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgSldUIFJlZnJlc2ggRXZlbnQuIFRoaXMgZXZlbnQgd2lsbCBiZSBmaXJlZCB3aGVuIGEgSldUIGlzIFwicmVmcmVzaGVkXCIgKGdlbmVyYXRlZCkgdXNpbmcgYSBSZWZyZXNoIFRva2VuLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RSZWZyZXNoRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgb3JpZ2luYWw/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciByZWZyZXNoaW5nIGEgSldUIHdpdGggYSBSZWZyZXNoIFRva2VuLlxuICogPHA+XG4gKiBVc2luZyBhIGRpZmZlcmVudCByZXNwb25zZSBvYmplY3QgZnJvbSBSZWZyZXNoVG9rZW5SZXNwb25zZSBiZWNhdXNlIHRoZSByZXRyaWV2ZSByZXNwb25zZSB3aWxsIHJldHVybiBhbiBvYmplY3QgZm9yIHJlZnJlc2hUb2tlbiwgYW5kIHRoaXMgaXMgYVxuICogc3RyaW5nLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RSZWZyZXNoUmVzcG9uc2Uge1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbklkPzogVVVJRDtcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBSZWZyZXNoIFRva2VuIFJldm9rZSBFdmVudC4gVGhpcyBldmVudCBtaWdodCBiZSBmb3IgYSBzaW5nbGUgdG9rZW4sIGEgdXNlclxuICogb3IgYW4gZW50aXJlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFJlZnJlc2hUb2tlblJldm9rZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uVGltZVRvTGl2ZUluU2Vjb25kcz86IFJlY29yZDxVVUlELCBudW1iZXI+O1xuICByZWZyZXNoVG9rZW4/OiBSZWZyZXNoVG9rZW47XG4gIHVzZXI/OiBVc2VyO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RWZW5kUmVxdWVzdCB7XG4gIGNsYWltcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGtleUlkPzogVVVJRDtcbiAgdGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUVmVuZFJlc3BvbnNlIHtcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBkZWZhdWx0VG9waWM/OiBzdHJpbmc7XG4gIHByb2R1Y2VyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uIHtcbiAgZGVmYXVsdFRvcGljPzogc3RyaW5nO1xuICBwcm9kdWNlcj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogRG9tYWluIGZvciBhIHB1YmxpYyBrZXksIGtleSBwYWlyIG9yIGFuIEhNQUMgc2VjcmV0LiBUaGlzIGlzIHVzZWQgYnkgS2V5TWFzdGVyIHRvIG1hbmFnZSBrZXlzIGZvciBKV1RzLCBTQU1MLCBldGMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5IHtcbiAgYWxnb3JpdGhtPzogS2V5QWxnb3JpdGhtO1xuICBjZXJ0aWZpY2F0ZT86IHN0cmluZztcbiAgY2VydGlmaWNhdGVJbmZvcm1hdGlvbj86IENlcnRpZmljYXRlSW5mb3JtYXRpb247XG4gIGV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICBoYXNQcml2YXRlS2V5PzogYm9vbGVhbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGtpZD86IHN0cmluZztcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZUtleT86IHN0cmluZztcbiAgcHVibGljS2V5Pzogc3RyaW5nO1xuICBzZWNyZXQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBLZXlUeXBlO1xufVxuXG5leHBvcnQgZW51bSBLZXlBbGdvcml0aG0ge1xuICBFUzI1NiA9IFwiRVMyNTZcIixcbiAgRVMzODQgPSBcIkVTMzg0XCIsXG4gIEVTNTEyID0gXCJFUzUxMlwiLFxuICBIUzI1NiA9IFwiSFMyNTZcIixcbiAgSFMzODQgPSBcIkhTMzg0XCIsXG4gIEhTNTEyID0gXCJIUzUxMlwiLFxuICBSUzI1NiA9IFwiUlMyNTZcIixcbiAgUlMzODQgPSBcIlJTMzg0XCIsXG4gIFJTNTEyID0gXCJSUzUxMlwiXG59XG5cbi8qKlxuICogS2V5IEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5UmVxdWVzdCB7XG4gIGtleT86IEtleTtcbn1cblxuLyoqXG4gKiBLZXkgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5UmVzcG9uc2Uge1xuICBrZXk/OiBLZXk7XG4gIGtleXM/OiBBcnJheTxLZXk+O1xufVxuXG5leHBvcnQgZW51bSBLZXlUeXBlIHtcbiAgRUMgPSBcIkVDXCIsXG4gIFJTQSA9IFwiUlNBXCIsXG4gIEhNQUMgPSBcIkhNQUNcIlxufVxuXG4vKipcbiAqIFRoZSB1c2UgdHlwZSBvZiBhIGtleS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEtleVVzZSB7XG4gIFNpZ25Pbmx5ID0gXCJTaWduT25seVwiLFxuICBTaWduQW5kVmVyaWZ5ID0gXCJTaWduQW5kVmVyaWZ5XCIsXG4gIFZlcmlmeU9ubHkgPSBcIlZlcmlmeU9ubHlcIlxufVxuXG4vKipcbiAqIEV2ZW50IGV2ZW50IHRvIGluZGljYXRlIGtpY2tzdGFydCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGxldGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLaWNrc3RhcnRTdWNjZXNzRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBpbnN0YW5jZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBIEphdmFTY3JpcHQgbGFtYmRhIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgZHVyaW5nIGNlcnRhaW4gZXZlbnRzIGluc2lkZSBGdXNpb25BdXRoLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYSB7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZW5naW5lVHlwZT86IExhbWJkYUVuZ2luZVR5cGU7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBMYW1iZGFUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICBhY2Nlc3NUb2tlblBvcHVsYXRlSWQ/OiBVVUlEO1xuICBpZFRva2VuUG9wdWxhdGVJZD86IFVVSUQ7XG4gIHNhbWx2MlBvcHVsYXRlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICByZWNvbmNpbGVJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIHJlY29uY2lsZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIExhbWJkYUVuZ2luZVR5cGUge1xuICBHcmFhbEpTID0gXCJHcmFhbEpTXCIsXG4gIE5hc2hvcm4gPSBcIk5hc2hvcm5cIlxufVxuXG4vKipcbiAqIExhbWJkYSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhUmVxdWVzdCB7XG4gIGxhbWJkYT86IExhbWJkYTtcbn1cblxuLyoqXG4gKiBMYW1iZGEgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFSZXNwb25zZSB7XG4gIGxhbWJkYT86IExhbWJkYTtcbiAgbGFtYmRhcz86IEFycmF5PExhbWJkYT47XG59XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxhbWJkYXMgdGhhdCBpbmRpY2F0ZSBob3cgdGhleSBhcmUgaW52b2tlZCBieSBGdXNpb25BdXRoLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBMYW1iZGFUeXBlIHtcbiAgSldUUG9wdWxhdGUgPSBcIkpXVFBvcHVsYXRlXCIsXG4gIE9wZW5JRFJlY29uY2lsZSA9IFwiT3BlbklEUmVjb25jaWxlXCIsXG4gIFNBTUx2MlJlY29uY2lsZSA9IFwiU0FNTHYyUmVjb25jaWxlXCIsXG4gIFNBTUx2MlBvcHVsYXRlID0gXCJTQU1MdjJQb3B1bGF0ZVwiLFxuICBBcHBsZVJlY29uY2lsZSA9IFwiQXBwbGVSZWNvbmNpbGVcIixcbiAgRXh0ZXJuYWxKV1RSZWNvbmNpbGUgPSBcIkV4dGVybmFsSldUUmVjb25jaWxlXCIsXG4gIEZhY2Vib29rUmVjb25jaWxlID0gXCJGYWNlYm9va1JlY29uY2lsZVwiLFxuICBHb29nbGVSZWNvbmNpbGUgPSBcIkdvb2dsZVJlY29uY2lsZVwiLFxuICBIWVBSUmVjb25jaWxlID0gXCJIWVBSUmVjb25jaWxlXCIsXG4gIFR3aXR0ZXJSZWNvbmNpbGUgPSBcIlR3aXR0ZXJSZWNvbmNpbGVcIixcbiAgTERBUENvbm5lY3RvclJlY29uY2lsZSA9IFwiTERBUENvbm5lY3RvclJlY29uY2lsZVwiLFxuICBMaW5rZWRJblJlY29uY2lsZSA9IFwiTGlua2VkSW5SZWNvbmNpbGVcIixcbiAgRXBpY0dhbWVzUmVjb25jaWxlID0gXCJFcGljR2FtZXNSZWNvbmNpbGVcIixcbiAgTmludGVuZG9SZWNvbmNpbGUgPSBcIk5pbnRlbmRvUmVjb25jaWxlXCIsXG4gIFNvbnlQU05SZWNvbmNpbGUgPSBcIlNvbnlQU05SZWNvbmNpbGVcIixcbiAgU3RlYW1SZWNvbmNpbGUgPSBcIlN0ZWFtUmVjb25jaWxlXCIsXG4gIFR3aXRjaFJlY29uY2lsZSA9IFwiVHdpdGNoUmVjb25jaWxlXCIsXG4gIFhib3hSZWNvbmNpbGUgPSBcIlhib3hSZWNvbmNpbGVcIixcbiAgQ2xpZW50Q3JlZGVudGlhbHNKV1RQb3B1bGF0ZSA9IFwiQ2xpZW50Q3JlZGVudGlhbHNKV1RQb3B1bGF0ZVwiLFxuICBTQ0lNU2VydmVyR3JvdXBSZXF1ZXN0Q29udmVydGVyID0gXCJTQ0lNU2VydmVyR3JvdXBSZXF1ZXN0Q29udmVydGVyXCIsXG4gIFNDSU1TZXJ2ZXJHcm91cFJlc3BvbnNlQ29udmVydGVyID0gXCJTQ0lNU2VydmVyR3JvdXBSZXNwb25zZUNvbnZlcnRlclwiLFxuICBTQ0lNU2VydmVyVXNlclJlcXVlc3RDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJVc2VyUmVxdWVzdENvbnZlcnRlclwiLFxuICBTQ0lNU2VydmVyVXNlclJlc3BvbnNlQ29udmVydGVyID0gXCJTQ0lNU2VydmVyVXNlclJlc3BvbnNlQ29udmVydGVyXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gTERBUCBjb25uZWN0b3IuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMREFQQ29ubmVjdG9yQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbiAgYXV0aGVudGljYXRpb25VUkw/OiBzdHJpbmc7XG4gIGJhc2VTdHJ1Y3R1cmU/OiBzdHJpbmc7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBpZGVudGlmeWluZ0F0dHJpYnV0ZT86IHN0cmluZztcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxvZ2luSWRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIHJlYWRUaW1lb3V0PzogbnVtYmVyO1xuICByZXF1ZXN0ZWRBdHRyaWJ1dGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgc2VjdXJpdHlNZXRob2Q/OiBMREFQU2VjdXJpdHlNZXRob2Q7XG4gIHN5c3RlbUFjY291bnRETj86IHN0cmluZztcbiAgc3lzdGVtQWNjb3VudFBhc3N3b3JkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBMREFQU2VjdXJpdHlNZXRob2Qge1xuICBOb25lID0gXCJOb25lXCIsXG4gIExEQVBTID0gXCJMREFQU1wiLFxuICBTdGFydFRMUyA9IFwiU3RhcnRUTFNcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRJbkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkSW5JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8TGlua2VkSW5BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzZXQgb2YgbG9jYWxpemVkIEludGVnZXJzIHRoYXQgY2FuIGJlIHN0b3JlZCBhcyBKU09OLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbGl6ZWRJbnRlZ2VycyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4ge1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNldCBvZiBsb2NhbGl6ZWQgU3RyaW5ncyB0aGF0IGNhbiBiZSBzdG9yZWQgYXMgSlNPTi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbGl6ZWRTdHJpbmdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG59XG5cbi8qKlxuICogTG9jYXRpb24gaW5mb3JtYXRpb24uIFVzZWZ1bCBmb3IgSVAgYWRkcmVzc2VzIGFuZCBvdGhlciBkaXNwbGF5YWJsZSBkYXRhIG9iamVjdHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb24ge1xuICBjaXR5Pzogc3RyaW5nO1xuICBjb3VudHJ5Pzogc3RyaW5nO1xuICBkaXNwbGF5U3RyaW5nPzogc3RyaW5nO1xuICBsYXRpdHVkZT86IG51bWJlcjtcbiAgbG9uZ2l0dWRlPzogbnVtYmVyO1xuICByZWdpb24/OiBzdHJpbmc7XG4gIHppcGNvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBoaXN0b3JpY2FsIHN0YXRlIG9mIGEgdXNlciBsb2cgZXZlbnQuIFNpbmNlIGV2ZW50cyBjYW4gYmUgbW9kaWZpZWQsIHRoaXMgc3RvcmVzIHRoZSBoaXN0b3JpY2FsIHN0YXRlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0hpc3Rvcnkge1xuICBoaXN0b3J5SXRlbXM/OiBBcnJheTxIaXN0b3J5SXRlbT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5Db25maWd1cmF0aW9uIHtcbiAgYWxsb3dUb2tlblJlZnJlc2g/OiBib29sZWFuO1xuICBnZW5lcmF0ZVJlZnJlc2hUb2tlbnM/OiBib29sZWFuO1xuICByZXF1aXJlQXV0aGVudGljYXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZW51bSBMb2dpbklkVHlwZSB7XG4gIGVtYWlsID0gXCJlbWFpbFwiLFxuICB1c2VybmFtZSA9IFwidXNlcm5hbWVcIlxufVxuXG4vKipcbiAqIExvZ2luIFBpbmcgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblBpbmdSZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIHN1bW1hcnkgb2YgdGhlIGFjdGlvbiB0aGF0IGlzIHByZXZlbnRpbmcgbG9naW4gdG8gYmUgcmV0dXJuZWQgb24gdGhlIGxvZ2luIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblByZXZlbnRlZFJlc3BvbnNlIHtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25JZD86IFVVSUQ7XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbG9jYWxpemVkTmFtZT86IHN0cmluZztcbiAgbG9jYWxpemVkT3B0aW9uPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRSZWFzb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVjb3JkQ29uZmlndXJhdGlvbiB7XG4gIGRlbGV0ZT86IERlbGV0ZUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVjb3JkRXhwb3J0UmVxdWVzdCBleHRlbmRzIEJhc2VFeHBvcnRSZXF1ZXN0IHtcbiAgY3JpdGVyaWE/OiBMb2dpblJlY29yZFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGVuZD86IG51bWJlcjtcbiAgc3RhcnQ/OiBudW1iZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVjb3JkU2VhcmNoUmVxdWVzdCB7XG4gIHJldHJpZXZlVG90YWw/OiBib29sZWFuO1xuICBzZWFyY2g/OiBMb2dpblJlY29yZFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEEgcmF3IGxvZ2luIHJlY29yZCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaFJlc3BvbnNlIHtcbiAgbG9naW5zPzogQXJyYXk8RGlzcGxheWFibGVSYXdMb2dpbj47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgbG9naW4gcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVwb3J0UmVzcG9uc2Uge1xuICBob3VybHlDb3VudHM/OiBBcnJheTxDb3VudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIExvZ2luIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIG9uZVRpbWVQYXNzd29yZD86IHN0cmluZztcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZXNwb25zZSB7XG4gIGFjdGlvbnM/OiBBcnJheTxMb2dpblByZXZlbnRlZFJlc3BvbnNlPjtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbiAgY2hhbmdlUGFzc3dvcmRSZWFzb24/OiBDaGFuZ2VQYXNzd29yZFJlYXNvbjtcbiAgZW1haWxWZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG4gIHBlbmRpbmdJZFBMaW5rSWQ/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0aHJlYXRzRGV0ZWN0ZWQ/OiBBcnJheTxBdXRoZW50aWNhdGlvblRocmVhdHM+O1xuICB0b2tlbj86IHN0cmluZztcbiAgdG9rZW5FeHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgdHJ1c3RUb2tlbj86IHN0cmluZztcbiAgdHdvRmFjdG9ySWQ/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWF0dGhldyBBbHRtYW5cbiAqL1xuZXhwb3J0IGVudW0gTG9nb3V0QmVoYXZpb3Ige1xuICBSZWRpcmVjdE9ubHkgPSBcIlJlZGlyZWN0T25seVwiLFxuICBBbGxBcHBsaWNhdGlvbnMgPSBcIkFsbEFwcGxpY2F0aW9uc1wiXG59XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgdGhlIExvZ291dCBBUEkgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dvdXRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGdsb2JhbD86IGJvb2xlYW47XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVyPzogSWRlbnRpdHlQcm92aWRlckRldGFpbHM7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgbWFuYWdlZCBmaWVsZHMgdGhhdCBhcmUgYWxzbyBwdXQgaW50byB0aGUgZGF0YWJhc2UgZHVyaW5nIEZ1c2lvbkF1dGggc2V0dXAuXG4gKiA8cD5cbiAqIEludGVybmFsIE5vdGU6IFRoZXNlIGZpZWxkcyBhcmUgYWxzbyBkZWNsYXJlZCBpbiBTUUwgaW4gb3JkZXIgdG8gYm9vdHN0cmFwIHRoZSBzeXN0ZW0uIFRoZXNlIG5lZWQgdG8gc3RheSBpbiBzeW5jLlxuICogQW55IGNoYW5nZXMgdG8gdGhlc2UgZmllbGRzIG5lZWRzIHRvIGFsc28gYmUgcmVmbGVjdGVkIGluIG15c3FsLnNxbCBhbmQgcG9zdGdyZXNxbC5zcWxcbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VkRmllbGRzIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF4aW11bVBhc3N3b3JkQWdlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRheXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogR3JvdXAgTWVtYmVyIERlbGV0ZSBSZXF1ZXN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbWJlckRlbGV0ZVJlcXVlc3Qge1xuICBtZW1iZXJJZHM/OiBBcnJheTxVVUlEPjtcbiAgbWVtYmVycz86IFJlY29yZDxVVUlELCBBcnJheTxVVUlEPj47XG59XG5cbi8qKlxuICogR3JvdXAgTWVtYmVyIFJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyUmVxdWVzdCB7XG4gIG1lbWJlcnM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8R3JvdXBNZW1iZXI+Pjtcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgUmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyUmVzcG9uc2Uge1xuICBtZW1iZXJzPzogUmVjb3JkPFVVSUQsIEFycmF5PEdyb3VwTWVtYmVyPj47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWtleSBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIHtcbn1cblxuLyoqXG4gKiBTdG9yZXMgYW4gbWVzc2FnZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3RyaWJ1dGUgbWVzc2FnZXM7XG4gKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUZW1wbGF0ZSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogTWVzc2FnZVR5cGU7XG59XG5cbi8qKlxuICogQSBNZXNzYWdlIFRlbXBsYXRlIFJlcXVlc3QgdG8gdGhlIEFQSVxuICpcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IHtcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSB7XG4gIG1lc3NhZ2VUZW1wbGF0ZT86IE1lc3NhZ2VUZW1wbGF0ZTtcbiAgbWVzc2FnZVRlbXBsYXRlcz86IEFycmF5PE1lc3NhZ2VUZW1wbGF0ZT47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWtleSBTbGVldmlcbiAqL1xuZXhwb3J0IGVudW0gTWVzc2FnZVR5cGUge1xuICBTTVMgPSBcIlNNU1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzZW5nZXJSZXF1ZXN0IHtcbiAgbWVzc2VuZ2VyPzogQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzZW5nZXJSZXNwb25zZSB7XG4gIG1lc3Nlbmdlcj86IEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uO1xuICBtZXNzZW5nZXJzPzogQXJyYXk8QmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzZW5nZXJUcmFuc3BvcnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIE1lc3NlbmdlclR5cGUge1xuICBHZW5lcmljID0gXCJHZW5lcmljXCIsXG4gIEthZmthID0gXCJLYWZrYVwiLFxuICBUd2lsaW8gPSBcIlR3aWxpb1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YURhdGEge1xuICBkZXZpY2U/OiBEZXZpY2VJbmZvO1xuICBzY29wZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaW5pbXVtUGFzc3dvcmRBZ2UgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIGRhaWx5IGFjdGl2ZSB1c2VyIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb250aGx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlIHtcbiAgbW9udGhseUFjdGl2ZVVzZXJzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvckF1dGhlbnRpY2F0b3JNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWxnb3JpdGhtPzogVE9UUEFsZ29yaXRobTtcbiAgY29kZUxlbmd0aD86IG51bWJlcjtcbiAgdGltZVN0ZXA/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JFbWFpbE1ldGhvZCBleHRlbmRzIEVuYWJsZWFibGUge1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvckVtYWlsVGVtcGxhdGUge1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIE11bHRpRmFjdG9yTG9naW5Qb2xpY3kge1xuICBEaXNhYmxlZCA9IFwiRGlzYWJsZWRcIixcbiAgRW5hYmxlZCA9IFwiRW5hYmxlZFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JTTVNNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbWVzc2VuZ2VySWQ/OiBVVUlEO1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvclNNU1RlbXBsYXRlIHtcbiAgdGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmludGVuZG9BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTmludGVuZG8gZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pbnRlbmRvSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPE5pbnRlbmRvQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBtYXJrZXIgaW50ZXJmYWNlIGluZGljYXRpbmcgdGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb25UcmFuc2FjdGlvbmFsRXZlbnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aDJDb25maWd1cmF0aW9uIHtcbiAgYXV0aG9yaXplZE9yaWdpblVSTHM/OiBBcnJheTxzdHJpbmc+O1xuICBhdXRob3JpemVkUmVkaXJlY3RVUkxzPzogQXJyYXk8c3RyaW5nPjtcbiAgY2xpZW50QXV0aGVudGljYXRpb25Qb2xpY3k/OiBDbGllbnRBdXRoZW50aWNhdGlvblBvbGljeTtcbiAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgZGVidWc/OiBib29sZWFuO1xuICBkZXZpY2VWZXJpZmljYXRpb25VUkw/OiBzdHJpbmc7XG4gIGVuYWJsZWRHcmFudHM/OiBBcnJheTxHcmFudFR5cGU+O1xuICBnZW5lcmF0ZVJlZnJlc2hUb2tlbnM/OiBib29sZWFuO1xuICBsb2dvdXRCZWhhdmlvcj86IExvZ291dEJlaGF2aW9yO1xuICBsb2dvdXRVUkw/OiBzdHJpbmc7XG4gIHByb29mS2V5Rm9yQ29kZUV4Y2hhbmdlUG9saWN5PzogUHJvb2ZLZXlGb3JDb2RlRXhjaGFuZ2VQb2xpY3k7XG4gIHJlcXVpcmVDbGllbnRBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG4gIHJlcXVpcmVSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZSB7XG4gIGh0dHBTZXNzaW9uTWF4SW5hY3RpdmVJbnRlcnZhbD86IG51bWJlcjtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICBvYXV0aENvbmZpZ3VyYXRpb24/OiBPQXV0aDJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aEVycm9yIHtcbiAgY2hhbmdlX3Bhc3N3b3JkX2lkPzogc3RyaW5nO1xuICBlcnJvcj86IE9BdXRoRXJyb3JUeXBlO1xuICBlcnJvcl9kZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXJyb3JfcmVhc29uPzogT0F1dGhFcnJvclJlYXNvbjtcbiAgZXJyb3JfdXJpPzogc3RyaW5nO1xuICB0d29fZmFjdG9yX2lkPzogc3RyaW5nO1xuICB0d29fZmFjdG9yX21ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xufVxuXG5leHBvcnQgZW51bSBPQXV0aEVycm9yUmVhc29uIHtcbiAgYXV0aF9jb2RlX25vdF9mb3VuZCA9IFwiYXV0aF9jb2RlX25vdF9mb3VuZFwiLFxuICBhY2Nlc3NfdG9rZW5fbWFsZm9ybWVkID0gXCJhY2Nlc3NfdG9rZW5fbWFsZm9ybWVkXCIsXG4gIGFjY2Vzc190b2tlbl9leHBpcmVkID0gXCJhY2Nlc3NfdG9rZW5fZXhwaXJlZFwiLFxuICBhY2Nlc3NfdG9rZW5fdW5hdmFpbGFibGVfZm9yX3Byb2Nlc3NpbmcgPSBcImFjY2Vzc190b2tlbl91bmF2YWlsYWJsZV9mb3JfcHJvY2Vzc2luZ1wiLFxuICBhY2Nlc3NfdG9rZW5fZmFpbGVkX3Byb2Nlc3NpbmcgPSBcImFjY2Vzc190b2tlbl9mYWlsZWRfcHJvY2Vzc2luZ1wiLFxuICByZWZyZXNoX3Rva2VuX25vdF9mb3VuZCA9IFwicmVmcmVzaF90b2tlbl9ub3RfZm91bmRcIixcbiAgcmVmcmVzaF90b2tlbl90eXBlX25vdF9zdXBwb3J0ZWQgPSBcInJlZnJlc2hfdG9rZW5fdHlwZV9ub3Rfc3VwcG9ydGVkXCIsXG4gIGludmFsaWRfY2xpZW50X2lkID0gXCJpbnZhbGlkX2NsaWVudF9pZFwiLFxuICBpbnZhbGlkX3VzZXJfY3JlZGVudGlhbHMgPSBcImludmFsaWRfdXNlcl9jcmVkZW50aWFsc1wiLFxuICBpbnZhbGlkX2dyYW50X3R5cGUgPSBcImludmFsaWRfZ3JhbnRfdHlwZVwiLFxuICBpbnZhbGlkX29yaWdpbiA9IFwiaW52YWxpZF9vcmlnaW5cIixcbiAgaW52YWxpZF9vcmlnaW5fb3BhcXVlID0gXCJpbnZhbGlkX29yaWdpbl9vcGFxdWVcIixcbiAgaW52YWxpZF9wa2NlX2NvZGVfdmVyaWZpZXIgPSBcImludmFsaWRfcGtjZV9jb2RlX3ZlcmlmaWVyXCIsXG4gIGludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZSA9IFwiaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlXCIsXG4gIGludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZV9tZXRob2QgPSBcImludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZV9tZXRob2RcIixcbiAgaW52YWxpZF9yZWRpcmVjdF91cmkgPSBcImludmFsaWRfcmVkaXJlY3RfdXJpXCIsXG4gIGludmFsaWRfcmVzcG9uc2VfbW9kZSA9IFwiaW52YWxpZF9yZXNwb25zZV9tb2RlXCIsXG4gIGludmFsaWRfcmVzcG9uc2VfdHlwZSA9IFwiaW52YWxpZF9yZXNwb25zZV90eXBlXCIsXG4gIGludmFsaWRfaWRfdG9rZW5faGludCA9IFwiaW52YWxpZF9pZF90b2tlbl9oaW50XCIsXG4gIGludmFsaWRfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gXCJpbnZhbGlkX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaVwiLFxuICBpbnZhbGlkX2RldmljZV9jb2RlID0gXCJpbnZhbGlkX2RldmljZV9jb2RlXCIsXG4gIGludmFsaWRfdXNlcl9jb2RlID0gXCJpbnZhbGlkX3VzZXJfY29kZVwiLFxuICBpbnZhbGlkX2FkZGl0aW9uYWxfY2xpZW50X2lkID0gXCJpbnZhbGlkX2FkZGl0aW9uYWxfY2xpZW50X2lkXCIsXG4gIGludmFsaWRfdGFyZ2V0X2VudGl0eV9zY29wZSA9IFwiaW52YWxpZF90YXJnZXRfZW50aXR5X3Njb3BlXCIsXG4gIGludmFsaWRfZW50aXR5X3Blcm1pc3Npb25fc2NvcGUgPSBcImludmFsaWRfZW50aXR5X3Blcm1pc3Npb25fc2NvcGVcIixcbiAgZ3JhbnRfdHlwZV9kaXNhYmxlZCA9IFwiZ3JhbnRfdHlwZV9kaXNhYmxlZFwiLFxuICBtaXNzaW5nX2NsaWVudF9pZCA9IFwibWlzc2luZ19jbGllbnRfaWRcIixcbiAgbWlzc2luZ19jbGllbnRfc2VjcmV0ID0gXCJtaXNzaW5nX2NsaWVudF9zZWNyZXRcIixcbiAgbWlzc2luZ19jb2RlID0gXCJtaXNzaW5nX2NvZGVcIixcbiAgbWlzc2luZ19jb2RlX2NoYWxsZW5nZSA9IFwibWlzc2luZ19jb2RlX2NoYWxsZW5nZVwiLFxuICBtaXNzaW5nX2NvZGVfdmVyaWZpZXIgPSBcIm1pc3NpbmdfY29kZV92ZXJpZmllclwiLFxuICBtaXNzaW5nX2RldmljZV9jb2RlID0gXCJtaXNzaW5nX2RldmljZV9jb2RlXCIsXG4gIG1pc3NpbmdfZ3JhbnRfdHlwZSA9IFwibWlzc2luZ19ncmFudF90eXBlXCIsXG4gIG1pc3NpbmdfcmVkaXJlY3RfdXJpID0gXCJtaXNzaW5nX3JlZGlyZWN0X3VyaVwiLFxuICBtaXNzaW5nX3JlZnJlc2hfdG9rZW4gPSBcIm1pc3NpbmdfcmVmcmVzaF90b2tlblwiLFxuICBtaXNzaW5nX3Jlc3BvbnNlX3R5cGUgPSBcIm1pc3NpbmdfcmVzcG9uc2VfdHlwZVwiLFxuICBtaXNzaW5nX3Rva2VuID0gXCJtaXNzaW5nX3Rva2VuXCIsXG4gIG1pc3NpbmdfdXNlcl9jb2RlID0gXCJtaXNzaW5nX3VzZXJfY29kZVwiLFxuICBtaXNzaW5nX3ZlcmlmaWNhdGlvbl91cmkgPSBcIm1pc3NpbmdfdmVyaWZpY2F0aW9uX3VyaVwiLFxuICBsb2dpbl9wcmV2ZW50ZWQgPSBcImxvZ2luX3ByZXZlbnRlZFwiLFxuICBub3RfbGljZW5zZWQgPSBcIm5vdF9saWNlbnNlZFwiLFxuICB1c2VyX2NvZGVfZXhwaXJlZCA9IFwidXNlcl9jb2RlX2V4cGlyZWRcIixcbiAgdXNlcl9leHBpcmVkID0gXCJ1c2VyX2V4cGlyZWRcIixcbiAgdXNlcl9sb2NrZWQgPSBcInVzZXJfbG9ja2VkXCIsXG4gIHVzZXJfbm90X2ZvdW5kID0gXCJ1c2VyX25vdF9mb3VuZFwiLFxuICBjbGllbnRfYXV0aGVudGljYXRpb25fbWlzc2luZyA9IFwiY2xpZW50X2F1dGhlbnRpY2F0aW9uX21pc3NpbmdcIixcbiAgaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb25fc2NoZW1lID0gXCJpbnZhbGlkX2NsaWVudF9hdXRoZW50aWNhdGlvbl9zY2hlbWVcIixcbiAgaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb24gPSBcImludmFsaWRfY2xpZW50X2F1dGhlbnRpY2F0aW9uXCIsXG4gIGNsaWVudF9pZF9taXNtYXRjaCA9IFwiY2xpZW50X2lkX21pc21hdGNoXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9hZG1pbmlzdHJhdGl2ZSA9IFwiY2hhbmdlX3Bhc3N3b3JkX2FkbWluaXN0cmF0aXZlXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9icmVhY2hlZCA9IFwiY2hhbmdlX3Bhc3N3b3JkX2JyZWFjaGVkXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9leHBpcmVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfZXhwaXJlZFwiLFxuICBjaGFuZ2VfcGFzc3dvcmRfdmFsaWRhdGlvbiA9IFwiY2hhbmdlX3Bhc3N3b3JkX3ZhbGlkYXRpb25cIixcbiAgdW5rbm93biA9IFwidW5rbm93blwiXG59XG5cbmV4cG9ydCBlbnVtIE9BdXRoRXJyb3JUeXBlIHtcbiAgaW52YWxpZF9yZXF1ZXN0ID0gXCJpbnZhbGlkX3JlcXVlc3RcIixcbiAgaW52YWxpZF9jbGllbnQgPSBcImludmFsaWRfY2xpZW50XCIsXG4gIGludmFsaWRfZ3JhbnQgPSBcImludmFsaWRfZ3JhbnRcIixcbiAgaW52YWxpZF90b2tlbiA9IFwiaW52YWxpZF90b2tlblwiLFxuICB1bmF1dGhvcml6ZWRfY2xpZW50ID0gXCJ1bmF1dGhvcml6ZWRfY2xpZW50XCIsXG4gIGludmFsaWRfc2NvcGUgPSBcImludmFsaWRfc2NvcGVcIixcbiAgc2VydmVyX2Vycm9yID0gXCJzZXJ2ZXJfZXJyb3JcIixcbiAgdW5zdXBwb3J0ZWRfZ3JhbnRfdHlwZSA9IFwidW5zdXBwb3J0ZWRfZ3JhbnRfdHlwZVwiLFxuICB1bnN1cHBvcnRlZF9yZXNwb25zZV90eXBlID0gXCJ1bnN1cHBvcnRlZF9yZXNwb25zZV90eXBlXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9yZXF1aXJlZCA9IFwiY2hhbmdlX3Bhc3N3b3JkX3JlcXVpcmVkXCIsXG4gIG5vdF9saWNlbnNlZCA9IFwibm90X2xpY2Vuc2VkXCIsXG4gIHR3b19mYWN0b3JfcmVxdWlyZWQgPSBcInR3b19mYWN0b3JfcmVxdWlyZWRcIixcbiAgYXV0aG9yaXphdGlvbl9wZW5kaW5nID0gXCJhdXRob3JpemF0aW9uX3BlbmRpbmdcIixcbiAgZXhwaXJlZF90b2tlbiA9IFwiZXhwaXJlZF90b2tlblwiLFxuICB1bnN1cHBvcnRlZF90b2tlbl90eXBlID0gXCJ1bnN1cHBvcnRlZF90b2tlbl90eXBlXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGhSZXNwb25zZSB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBPYmplY3RTdGF0ZSB7XG4gIEFjdGl2ZSA9IFwiQWN0aXZlXCIsXG4gIEluYWN0aXZlID0gXCJJbmFjdGl2ZVwiLFxuICBQZW5kaW5nRGVsZXRlID0gXCJQZW5kaW5nRGVsZXRlXCJcbn1cblxuLyoqXG4gKiBPcGVuSUQgQ29ubmVjdCBDb25maWd1cmF0aW9uIGFzIGRlc2NyaWJlZCBieSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1kaXNjb3ZlcnktMV8wLmh0bWwjUHJvdmlkZXJNZXRhZGF0YVwiPk9wZW5JRFxuICogUHJvdmlkZXIgTWV0YWRhdGE8L2E+LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuSWRDb25maWd1cmF0aW9uIHtcbiAgYXV0aG9yaXphdGlvbl9lbmRwb2ludD86IHN0cmluZztcbiAgYmFja2NoYW5uZWxfbG9nb3V0X3N1cHBvcnRlZD86IGJvb2xlYW47XG4gIGNsYWltc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICBkZXZpY2VfYXV0aG9yaXphdGlvbl9lbmRwb2ludD86IHN0cmluZztcbiAgZW5kX3Nlc3Npb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGZyb250Y2hhbm5lbF9sb2dvdXRfc3VwcG9ydGVkPzogYm9vbGVhbjtcbiAgZ3JhbnRfdHlwZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgaWRfdG9rZW5fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgandrc191cmk/OiBzdHJpbmc7XG4gIHJlc3BvbnNlX21vZGVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIHJlc3BvbnNlX3R5cGVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIHNjb3Blc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICBzdWJqZWN0X3R5cGVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIHRva2VuX2VuZHBvaW50Pzogc3RyaW5nO1xuICB0b2tlbl9lbmRwb2ludF9hdXRoX21ldGhvZHNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgdXNlcmluZm9fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHVzZXJpbmZvX3NpZ25pbmdfYWxnX3ZhbHVlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuSWRDb25uZWN0QXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25JbWFnZVVSTD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgb2F1dGgyPzogSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbm5lY3RJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8T3BlbklkQ29ubmVjdEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25JbWFnZVVSTD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgZG9tYWlucz86IEFycmF5PHN0cmluZz47XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xuICBwb3N0UmVxdWVzdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkQnJlYWNoRGV0ZWN0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG1hdGNoTW9kZT86IEJyZWFjaE1hdGNoTW9kZTtcbiAgbm90aWZ5VXNlckVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG9uTG9naW4/OiBCcmVhY2hBY3Rpb247XG59XG5cbi8qKlxuICogUGFzc3dvcmQgRW5jcnlwdGlvbiBTY2hlbWUgQ29uZmlndXJhdGlvblxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZEVuY3J5cHRpb25Db25maWd1cmF0aW9uIHtcbiAgZW5jcnlwdGlvblNjaGVtZT86IHN0cmluZztcbiAgZW5jcnlwdGlvblNjaGVtZUZhY3Rvcj86IG51bWJlcjtcbiAgbW9kaWZ5RW5jcnlwdGlvblNjaGVtZU9uTG9naW4/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFsbCBpZGVudGl0eSBwcm92aWRlcnMgdGhhdCBhcmUgcGFzc3dvcmRsZXNzIGFuZCBkbyBub3QgYWNjZXB0IGEgcGFzc3dvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzSWRlbnRpdHlQcm92aWRlciB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBjb2RlPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZGxlc3NTZW5kUmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjb2RlPzogc3RyaW5nO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc1N0YXJ0UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGVyZWsgS2xhdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFZhbGlkYXRpb25SdWxlcyB7XG4gIGJyZWFjaERldGVjdGlvbj86IFBhc3N3b3JkQnJlYWNoRGV0ZWN0aW9uO1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgcmVtZW1iZXJQcmV2aW91c1Bhc3N3b3Jkcz86IFJlbWVtYmVyUHJldmlvdXNQYXNzd29yZHM7XG4gIHJlcXVpcmVNaXhlZENhc2U/OiBib29sZWFuO1xuICByZXF1aXJlTm9uQWxwaGE/OiBib29sZWFuO1xuICByZXF1aXJlTnVtYmVyPzogYm9vbGVhbjtcbiAgdmFsaWRhdGVPbkxvZ2luPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZSB7XG4gIHBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzPzogUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlbmRpbmdJZFBMaW5rIHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVyTGlua3M/OiBBcnJheTxJZGVudGl0eVByb3ZpZGVyTGluaz47XG4gIGlkZW50aXR5UHJvdmlkZXJOYW1lPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVyVGVuYW50Q29uZmlndXJhdGlvbj86IElkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uO1xuICBpZGVudGl0eVByb3ZpZGVyVHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xuICBpZGVudGl0eVByb3ZpZGVyVXNlcklkPzogc3RyaW5nO1xuICB1c2VyPzogVXNlcjtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVuZGluZ1Jlc3BvbnNlIHtcbiAgdXNlcnM/OiBBcnJheTxVc2VyPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlcXVlc3Qge1xuICBsb2NhbGU/OiBzdHJpbmc7XG4gIG1lc3NhZ2VUZW1wbGF0ZT86IE1lc3NhZ2VUZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgZXJyb3JzPzogRXJyb3JzO1xuICBtZXNzYWdlPzogU01TTWVzc2FnZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3UmVxdWVzdCB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xuICBsb2NhbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXZpZXdSZXNwb25zZSB7XG4gIGVtYWlsPzogRW1haWw7XG4gIGVycm9ycz86IEVycm9ycztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBQcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeSB7XG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZCA9IFwiTm90UmVxdWlyZWRcIixcbiAgTm90UmVxdWlyZWRXaGVuVXNpbmdDbGllbnRBdXRoZW50aWNhdGlvbiA9IFwiTm90UmVxdWlyZWRXaGVuVXNpbmdDbGllbnRBdXRoZW50aWNhdGlvblwiXG59XG5cbi8qKlxuICogSldUIFB1YmxpYyBLZXkgUmVzcG9uc2UgT2JqZWN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleVJlc3BvbnNlIHtcbiAgcHVibGljS2V5Pzogc3RyaW5nO1xuICBwdWJsaWNLZXlzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBsaW1pdD86IG51bWJlcjtcbiAgdGltZVBlcmlvZEluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFJhdGVMaW1pdGVkUmVxdWVzdFR5cGUge1xuICBGYWlsZWRMb2dpbiA9IFwiRmFpbGVkTG9naW5cIixcbiAgRm9yZ290UGFzc3dvcmQgPSBcIkZvcmdvdFBhc3N3b3JkXCIsXG4gIFNlbmRFbWFpbFZlcmlmaWNhdGlvbiA9IFwiU2VuZEVtYWlsVmVyaWZpY2F0aW9uXCIsXG4gIFNlbmRQYXNzd29yZGxlc3MgPSBcIlNlbmRQYXNzd29yZGxlc3NcIixcbiAgU2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbiA9IFwiU2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvblwiLFxuICBTZW5kVHdvRmFjdG9yID0gXCJTZW5kVHdvRmFjdG9yXCJcbn1cblxuLyoqXG4gKiBSYXcgbG9naW4gaW5mb3JtYXRpb24gZm9yIGVhY2ggdGltZSBhIHVzZXIgbG9ncyBpbnRvIGFuIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd0xvZ2luIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGluc3RhbnQ/OiBudW1iZXI7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gUmVhY3RvckZlYXR1cmVTdGF0dXMge1xuICBBQ1RJVkUgPSBcIkFDVElWRVwiLFxuICBESVNDT05ORUNURUQgPSBcIkRJU0NPTk5FQ1RFRFwiLFxuICBQRU5ESU5HID0gXCJQRU5ESU5HXCIsXG4gIERJU0FCTEVEID0gXCJESVNBQkxFRFwiLFxuICBVTktOT1dOID0gXCJVTktOT1dOXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rvck1ldHJpY3Mge1xuICBicmVhY2hlZFBhc3N3b3JkTWV0cmljcz86IFJlY29yZDxVVUlELCBCcmVhY2hlZFBhc3N3b3JkVGVuYW50TWV0cmljPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rvck1ldHJpY3NSZXNwb25zZSB7XG4gIG1ldHJpY3M/OiBSZWFjdG9yTWV0cmljcztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGZvciBtYW5hZ2luZyBGdXNpb25BdXRoIFJlYWN0b3IgYW5kIGxpY2Vuc2VzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JSZXF1ZXN0IHtcbiAgbGljZW5zZT86IHN0cmluZztcbiAgbGljZW5zZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yUmVzcG9uc2Uge1xuICBzdGF0dXM/OiBSZWFjdG9yU3RhdHVzO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yU3RhdHVzIHtcbiAgYWR2YW5jZWRJZGVudGl0eVByb3ZpZGVycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZExhbWJkYXM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRNdWx0aUZhY3RvckF1dGhlbnRpY2F0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkUmVnaXN0cmF0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFwcGxpY2F0aW9uTXVsdGlGYWN0b3JBdXRoZW50aWNhdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhcHBsaWNhdGlvblRoZW1lcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBicmVhY2hlZFBhc3N3b3JkRGV0ZWN0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGNvbm5lY3RvcnM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgZW50aXR5TWFuYWdlbWVudD86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBleHBpcmF0aW9uPzogc3RyaW5nO1xuICBsaWNlbnNlQXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGxpY2Vuc2VkPzogYm9vbGVhbjtcbiAgc2NpbVNlcnZlcj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB0aHJlYXREZXRlY3Rpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHVzZXIgbG9naW4gcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNlbnRMb2dpblJlc3BvbnNlIHtcbiAgbG9naW5zPzogQXJyYXk8RGlzcGxheWFibGVSYXdMb2dpbj47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hSZXNwb25zZSB7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgSldUIFJlZnJlc2ggVG9rZW4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBtZXRhRGF0YT86IE1ldGFEYXRhO1xuICBzdGFydEluc3RhbnQ/OiBudW1iZXI7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBSZWZyZXNoVG9rZW5FeHBpcmF0aW9uUG9saWN5IHtcbiAgRml4ZWQgPSBcIkZpeGVkXCIsXG4gIFNsaWRpbmdXaW5kb3cgPSBcIlNsaWRpbmdXaW5kb3dcIlxufVxuXG4vKipcbiAqIFJlZnJlc2ggVG9rZW4gSW1wb3J0IHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5JbXBvcnRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2Vucz86IEFycmF5PFJlZnJlc2hUb2tlbj47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciByZXRyaWV2aW5nIFJlZnJlc2ggVG9rZW5zXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlblJlc3BvbnNlIHtcbiAgcmVmcmVzaFRva2VuPzogUmVmcmVzaFRva2VuO1xuICByZWZyZXNoVG9rZW5zPzogQXJyYXk8UmVmcmVzaFRva2VuPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuUmV2b2NhdGlvblBvbGljeSB7XG4gIG9uTG9naW5QcmV2ZW50ZWQ/OiBib29sZWFuO1xuICBvblBhc3N3b3JkQ2hhbmdlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgdGhlIFJlZnJlc2ggVG9rZW4gQVBJIHRvIHJldm9rZSBhIHJlZnJlc2ggdG9rZW4gcmF0aGVyIHRoYW4gdXNpbmcgdGhlIFVSTCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlblJldm9rZVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHRva2VuPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gUmVmcmVzaFRva2VuVXNhZ2VQb2xpY3kge1xuICBSZXVzYWJsZSA9IFwiUmV1c2FibGVcIixcbiAgT25lVGltZVVzZSA9IFwiT25lVGltZVVzZVwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBiaXJ0aERhdGU/OiBSZXF1aXJhYmxlO1xuICBjb25maXJtUGFzc3dvcmQ/OiBib29sZWFuO1xuICBmaXJzdE5hbWU/OiBSZXF1aXJhYmxlO1xuICBmb3JtSWQ/OiBVVUlEO1xuICBmdWxsTmFtZT86IFJlcXVpcmFibGU7XG4gIGxhc3ROYW1lPzogUmVxdWlyYWJsZTtcbiAgbG9naW5JZFR5cGU/OiBMb2dpbklkVHlwZTtcbiAgbWlkZGxlTmFtZT86IFJlcXVpcmFibGU7XG4gIG1vYmlsZVBob25lPzogUmVxdWlyYWJsZTtcbiAgdHlwZT86IFJlZ2lzdHJhdGlvblR5cGU7XG59XG5cbi8qKlxuICogUmVnaXN0cmF0aW9uIGRlbGV0ZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uRGVsZXRlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgcmVnaXN0cmF0aW9uIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25SZXBvcnRSZXNwb25zZSB7XG4gIGhvdXJseUNvdW50cz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVnaXN0cmF0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGRpc2FibGVEb21haW5CbG9jaz86IGJvb2xlYW47XG4gIGdlbmVyYXRlQXV0aGVudGljYXRpb25Ub2tlbj86IGJvb2xlYW47XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHNlbmRTZXRQYXNzd29yZEVtYWlsPzogYm9vbGVhbjtcbiAgc2tpcFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbj86IGJvb2xlYW47XG4gIHNraXBWZXJpZmljYXRpb24/OiBib29sZWFuO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBSZWdpc3RyYXRpb24gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG5leHBvcnQgZW51bSBSZWdpc3RyYXRpb25UeXBlIHtcbiAgYmFzaWMgPSBcImJhc2ljXCIsXG4gIGFkdmFuY2VkID0gXCJhZHZhbmNlZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zIHtcbiAgYmVoYXZpb3I/OiBVbnZlcmlmaWVkQmVoYXZpb3I7XG59XG5cbi8qKlxuICogUmVpbmRleCBBUEkgcmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWluZGV4UmVxdWVzdCB7XG4gIGluZGV4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxvYWRSZXF1ZXN0IHtcbiAgbmFtZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1lbWJlclByZXZpb3VzUGFzc3dvcmRzIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNvdW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFNvbWV0aGluZyB0aGF0IGNhbiBiZSByZXF1aXJlZCBhbmQgdGh1cyBhbHNvIG9wdGlvbmFsLiBUaGlzIGN1cnJlbnRseSBleHRlbmRzIEVuYWJsZWFibGUgYmVjYXVzZSBhbnl0aGluZyB0aGF0IGlzXG4gKiByZXF1aXJlL29wdGlvbmFsIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlYWJsZSBhcyB3ZWxsLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmFibGUgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBkZXNjcmliaW5nIHRoZSBuZWVkIGZvciBDT1JTIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVzQ09SU0NvbmZpZ3VyYXRpb24ge1xufVxuXG5leHBvcnQgZW51bSBTQU1MTG9nb3V0QmVoYXZpb3Ige1xuICBBbGxQYXJ0aWNpcGFudHMgPSBcIkFsbFBhcnRpY2lwYW50c1wiLFxuICBPbmx5T3JpZ2luYXRvciA9IFwiT25seU9yaWdpbmF0b3JcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhdWRpZW5jZT86IHN0cmluZztcbiAgYXV0aG9yaXplZFJlZGlyZWN0VVJMcz86IEFycmF5PHN0cmluZz47XG4gIGNhbGxiYWNrVVJMPzogc3RyaW5nO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRlZmF1bHRWZXJpZmljYXRpb25LZXlJZD86IFVVSUQ7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBsb2dvdXQ/OiBTQU1MdjJMb2dvdXQ7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgcmVxdWlyZVNpZ25lZFJlcXVlc3RzPzogYm9vbGVhbjtcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG4gIHhtbFNpZ25hdHVyZUxvY2F0aW9uPzogWE1MU2lnbmF0dXJlTG9jYXRpb247XG59XG5cbi8qKlxuICogU0FNTCB2MiBpZGVudGl0eSBwcm92aWRlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxTQU1MdjJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBlbWFpbENsYWltPzogc3RyaW5nO1xuICBpZHBFbmRwb2ludD86IHN0cmluZztcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBrZXlJZD86IFVVSUQ7XG4gIG5hbWVJZEZvcm1hdD86IHN0cmluZztcbiAgcG9zdFJlcXVlc3Q/OiBib29sZWFuO1xuICByZXF1ZXN0U2lnbmluZ0tleUlkPzogVVVJRDtcbiAgc2lnblJlcXVlc3Q/OiBib29sZWFuO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VOYW1lSWRGb3JFbWFpbD86IGJvb2xlYW47XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG4gIHhtbFNpZ25hdHVyZUMxNG5NZXRob2Q/OiBDYW5vbmljYWxpemF0aW9uTWV0aG9kO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJJZFBJbml0aWF0ZWRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG59XG5cbi8qKlxuICogU0FNTCB2MiBJZFAgSW5pdGlhdGVkIGlkZW50aXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkUEluaXRpYXRlZElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxTQU1MdjJJZFBJbml0aWF0ZWRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBrZXlJZD86IFVVSUQ7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZU5hbWVJZEZvckVtYWlsPzogYm9vbGVhbjtcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJMb2dvdXQge1xuICBiZWhhdmlvcj86IFNBTUxMb2dvdXRCZWhhdmlvcjtcbiAgZGVmYXVsdFZlcmlmaWNhdGlvbktleUlkPzogVVVJRDtcbiAga2V5SWQ/OiBVVUlEO1xuICByZXF1aXJlU2lnbmVkUmVxdWVzdHM/OiBib29sZWFuO1xuICBzaW5nbGVMb2dvdXQ/OiBTQU1MdjJTaW5nbGVMb2dvdXQ7XG4gIHhtbFNpZ25hdHVyZUMxNG5NZXRob2Q/OiBDYW5vbmljYWxpemF0aW9uTWV0aG9kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MlNpbmdsZUxvZ291dCBleHRlbmRzIEVuYWJsZWFibGUge1xuICBrZXlJZD86IFVVSUQ7XG4gIHVybD86IHN0cmluZztcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG59XG5cbi8qKlxuICogU2VhcmNoIEFQSSByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBVc2VyU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIEFQSSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXNwb25zZSB7XG4gIHRvdGFsPzogbnVtYmVyO1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXN1bHRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdHM8VD4ge1xuICByZXN1bHRzPzogQXJyYXk8VD47XG4gIHRvdGFsPzogbnVtYmVyO1xuICB0b3RhbEVxdWFsVG9BY3R1YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRSZXNwb25zZSB7XG4gIHNlY3JldD86IHN0cmluZztcbiAgc2VjcmV0QmFzZTMyRW5jb2RlZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbiB7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgdHlwZT86IFNlY3VyZUdlbmVyYXRvclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBTZWN1cmVHZW5lcmF0b3JUeXBlIHtcbiAgcmFuZG9tRGlnaXRzID0gXCJyYW5kb21EaWdpdHNcIixcbiAgcmFuZG9tQnl0ZXMgPSBcInJhbmRvbUJ5dGVzXCIsXG4gIHJhbmRvbUFscGhhID0gXCJyYW5kb21BbHBoYVwiLFxuICByYW5kb21BbHBoYU51bWVyaWMgPSBcInJhbmRvbUFscGhhTnVtZXJpY1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyZUlkZW50aXR5IHtcbiAgYnJlYWNoZWRQYXNzd29yZExhc3RDaGVja2VkSW5zdGFudD86IG51bWJlcjtcbiAgYnJlYWNoZWRQYXNzd29yZFN0YXR1cz86IEJyZWFjaGVkUGFzc3dvcmRTdGF0dXM7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgZW5jcnlwdGlvblNjaGVtZT86IHN0cmluZztcbiAgZmFjdG9yPzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGxhc3RMb2dpbkluc3RhbnQ/OiBudW1iZXI7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICBwYXNzd29yZENoYW5nZVJlYXNvbj86IENoYW5nZVBhc3N3b3JkUmVhc29uO1xuICBwYXNzd29yZENoYW5nZVJlcXVpcmVkPzogYm9vbGVhbjtcbiAgcGFzc3dvcmRMYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgc2FsdD86IHN0cmluZztcbiAgdW5pcXVlVXNlcm5hbWU/OiBzdHJpbmc7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VybmFtZVN0YXR1cz86IENvbnRlbnRTdGF0dXM7XG4gIHZlcmlmaWVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYmNjQWRkcmVzc2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgY2NBZGRyZXNzZXM/OiBBcnJheTxzdHJpbmc+O1xuICBwcmVmZXJyZWRMYW5ndWFnZXM/OiBBcnJheTxzdHJpbmc+O1xuICByZXF1ZXN0RGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHRvQWRkcmVzc2VzPzogQXJyYXk8RW1haWxBZGRyZXNzPjtcbiAgdXNlcklkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVzcG9uc2Uge1xuICBhbm9ueW1vdXNSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgRW1haWxUZW1wbGF0ZUVycm9ycz47XG4gIHJlc3VsdHM/OiBSZWNvcmQ8VVVJRCwgRW1haWxUZW1wbGF0ZUVycm9ycz47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNNU01lc3NhZ2Uge1xuICBwaG9uZU51bWJlcj86IHN0cmluZztcbiAgdGV4dE1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNNU01lc3NhZ2VUZW1wbGF0ZSBleHRlbmRzIE1lc3NhZ2VUZW1wbGF0ZSB7XG4gIGRlZmF1bHRUZW1wbGF0ZT86IHN0cmluZztcbiAgbG9jYWxpemVkVGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb255UFNOQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNvbnlQU04gZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbnlQU05JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8U29ueVBTTkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU29ydCB7XG4gIGFzYyA9IFwiYXNjXCIsXG4gIGRlc2MgPSBcImRlc2NcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3J0RmllbGQge1xuICBtaXNzaW5nPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBvcmRlcj86IFNvcnQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlYW1BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHdlYkFQSUtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGVhbSBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlYW1JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8U3RlYW1BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgd2ViQVBJS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhlbHBlciBpbnRlcmZhY2UgdGhhdCBpbmRpY2F0ZXMgYW4gaWRlbnRpdHkgcHJvdmlkZXIgY2FuIGJlIGZlZGVyYXRlZCB0byB1c2luZyB0aGUgSFRUUCBQT1NUIG1ldGhvZC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdXBwb3J0c1Bvc3RCaW5kaW5ncyB7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvbiB7XG4gIGF1ZGl0TG9nQ29uZmlndXJhdGlvbj86IEF1ZGl0TG9nQ29uZmlndXJhdGlvbjtcbiAgY29yc0NvbmZpZ3VyYXRpb24/OiBDT1JTQ29uZmlndXJhdGlvbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGV2ZW50TG9nQ29uZmlndXJhdGlvbj86IEV2ZW50TG9nQ29uZmlndXJhdGlvbjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvZ2luUmVjb3JkQ29uZmlndXJhdGlvbj86IExvZ2luUmVjb3JkQ29uZmlndXJhdGlvbjtcbiAgcmVwb3J0VGltZXpvbmU/OiBzdHJpbmc7XG4gIHVpQ29uZmlndXJhdGlvbj86IFVJQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGZvciB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gQVBJLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0IHtcbiAgc3lzdGVtQ29uZmlndXJhdGlvbj86IFN5c3RlbUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBBUEkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlIHtcbiAgc3lzdGVtQ29uZmlndXJhdGlvbj86IFN5c3RlbUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUxvZ3NFeHBvcnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV4cG9ydFJlcXVlc3Qge1xuICBsYXN0TkJ5dGVzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlcyB7XG4gIGFjY291bnRFZGl0Pzogc3RyaW5nO1xuICBhY2NvdW50SW5kZXg/OiBzdHJpbmc7XG4gIGFjY291bnRUd29GYWN0b3JEaXNhYmxlPzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9yRW5hYmxlPzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9ySW5kZXg/OiBzdHJpbmc7XG4gIGVtYWlsQ29tcGxldGU/OiBzdHJpbmc7XG4gIGVtYWlsU2VuZD86IHN0cmluZztcbiAgZW1haWxTZW50Pzogc3RyaW5nO1xuICBlbWFpbFZlcmlmaWNhdGlvblJlcXVpcmVkPzogc3RyaW5nO1xuICBlbWFpbFZlcmlmeT86IHN0cmluZztcbiAgaGVscGVycz86IHN0cmluZztcbiAgaW5kZXg/OiBzdHJpbmc7XG4gIG9hdXRoMkF1dGhvcml6ZT86IHN0cmluZztcbiAgb2F1dGgyQXV0aG9yaXplZE5vdFJlZ2lzdGVyZWQ/OiBzdHJpbmc7XG4gIG9hdXRoMkNoaWxkUmVnaXN0cmF0aW9uTm90QWxsb3dlZD86IHN0cmluZztcbiAgb2F1dGgyQ2hpbGRSZWdpc3RyYXRpb25Ob3RBbGxvd2VkQ29tcGxldGU/OiBzdHJpbmc7XG4gIG9hdXRoMkNvbXBsZXRlUmVnaXN0cmF0aW9uPzogc3RyaW5nO1xuICBvYXV0aDJEZXZpY2U/OiBzdHJpbmc7XG4gIG9hdXRoMkRldmljZUNvbXBsZXRlPzogc3RyaW5nO1xuICBvYXV0aDJFcnJvcj86IHN0cmluZztcbiAgb2F1dGgyTG9nb3V0Pzogc3RyaW5nO1xuICBvYXV0aDJQYXNzd29yZGxlc3M/OiBzdHJpbmc7XG4gIG9hdXRoMlJlZ2lzdGVyPzogc3RyaW5nO1xuICBvYXV0aDJTdGFydElkUExpbms/OiBzdHJpbmc7XG4gIG9hdXRoMlR3b0ZhY3Rvcj86IHN0cmluZztcbiAgb2F1dGgyVHdvRmFjdG9yTWV0aG9kcz86IHN0cmluZztcbiAgb2F1dGgyV2FpdD86IHN0cmluZztcbiAgcGFzc3dvcmRDaGFuZ2U/OiBzdHJpbmc7XG4gIHBhc3N3b3JkQ29tcGxldGU/OiBzdHJpbmc7XG4gIHBhc3N3b3JkRm9yZ290Pzogc3RyaW5nO1xuICBwYXNzd29yZFNlbnQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvbkNvbXBsZXRlPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25TZW5kPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25TZW50Pzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25SZXF1aXJlZD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uVmVyaWZ5Pzogc3RyaW5nO1xuICBzYW1sdjJMb2dvdXQ/OiBzdHJpbmc7XG4gIHVuYXV0aG9yaXplZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50IHtcbiAgYWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb24/OiBUZW5hbnRBY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbjtcbiAgY2FwdGNoYUNvbmZpZ3VyYXRpb24/OiBUZW5hbnRDYXB0Y2hhQ29uZmlndXJhdGlvbjtcbiAgY29uZmlndXJlZD86IGJvb2xlYW47XG4gIGNvbm5lY3RvclBvbGljaWVzPzogQXJyYXk8Q29ubmVjdG9yUG9saWN5PjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVtYWlsQ29uZmlndXJhdGlvbj86IEVtYWlsQ29uZmlndXJhdGlvbjtcbiAgZXZlbnRDb25maWd1cmF0aW9uPzogRXZlbnRDb25maWd1cmF0aW9uO1xuICBleHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uPzogRXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbjtcbiAgZmFpbGVkQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uPzogRmFpbGVkQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uO1xuICBmYW1pbHlDb25maWd1cmF0aW9uPzogRmFtaWx5Q29uZmlndXJhdGlvbjtcbiAgZm9ybUNvbmZpZ3VyYXRpb24/OiBUZW5hbnRGb3JtQ29uZmlndXJhdGlvbjtcbiAgaHR0cFNlc3Npb25NYXhJbmFjdGl2ZUludGVydmFsPzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgand0Q29uZmlndXJhdGlvbj86IEpXVENvbmZpZ3VyYXRpb247XG4gIGxhbWJkYUNvbmZpZ3VyYXRpb24/OiBUZW5hbnRMYW1iZGFDb25maWd1cmF0aW9uO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9naW5Db25maWd1cmF0aW9uPzogVGVuYW50TG9naW5Db25maWd1cmF0aW9uO1xuICBsb2dvdXRVUkw/OiBzdHJpbmc7XG4gIG1heGltdW1QYXNzd29yZEFnZT86IE1heGltdW1QYXNzd29yZEFnZTtcbiAgbWluaW11bVBhc3N3b3JkQWdlPzogTWluaW11bVBhc3N3b3JkQWdlO1xuICBtdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24/OiBUZW5hbnRNdWx0aUZhY3RvckNvbmZpZ3VyYXRpb247XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9hdXRoQ29uZmlndXJhdGlvbj86IFRlbmFudE9BdXRoMkNvbmZpZ3VyYXRpb247XG4gIHBhc3N3b3JkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24/OiBQYXNzd29yZEVuY3J5cHRpb25Db25maWd1cmF0aW9uO1xuICBwYXNzd29yZFZhbGlkYXRpb25SdWxlcz86IFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzO1xuICByYXRlTGltaXRDb25maWd1cmF0aW9uPzogVGVuYW50UmF0ZUxpbWl0Q29uZmlndXJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbj86IFRlbmFudFJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb247XG4gIHNjaW1TZXJ2ZXJDb25maWd1cmF0aW9uPzogVGVuYW50U0NJTVNlcnZlckNvbmZpZ3VyYXRpb247XG4gIHNzb0NvbmZpZ3VyYXRpb24/OiBUZW5hbnRTU09Db25maWd1cmF0aW9uO1xuICBzdGF0ZT86IE9iamVjdFN0YXRlO1xuICB0aGVtZUlkPzogVVVJRDtcbiAgdXNlckRlbGV0ZVBvbGljeT86IFRlbmFudFVzZXJEZWxldGVQb2xpY3k7XG4gIHVzZXJuYW1lQ29uZmlndXJhdGlvbj86IFRlbmFudFVzZXJuYW1lQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRhYmxlIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudEFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uIHtcbiAgdWlJUEFjY2Vzc0NvbnRyb2xMaXN0SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudENhcHRjaGFDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNhcHRjaGFNZXRob2Q/OiBDYXB0Y2hhTWV0aG9kO1xuICBzZWNyZXRLZXk/OiBzdHJpbmc7XG4gIHNpdGVLZXk/OiBzdHJpbmc7XG4gIHRocmVzaG9sZD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGZvciB0aGUgVGVuYW50IEFQSSB0byBkZWxldGUgYSB0ZW5hbnQgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIFVSTCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudERlbGV0ZVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXN5bmM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRGb3JtQ29uZmlndXJhdGlvbiB7XG4gIGFkbWluVXNlckZvcm1JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRMYW1iZGFDb25maWd1cmF0aW9uIHtcbiAgc2NpbUVudGVycHJpc2VVc2VyUmVxdWVzdENvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbUVudGVycHJpc2VVc2VyUmVzcG9uc2VDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Hcm91cFJlcXVlc3RDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Hcm91cFJlc3BvbnNlQ29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltVXNlclJlcXVlc3RDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Vc2VyUmVzcG9uc2VDb252ZXJ0ZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudExvZ2luQ29uZmlndXJhdGlvbiB7XG4gIHJlcXVpcmVBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWtleSBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRNdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdG9yPzogTXVsdGlGYWN0b3JBdXRoZW50aWNhdG9yTWV0aG9kO1xuICBlbWFpbD86IE11bHRpRmFjdG9yRW1haWxNZXRob2Q7XG4gIGxvZ2luUG9saWN5PzogTXVsdGlGYWN0b3JMb2dpblBvbGljeTtcbiAgc21zPzogTXVsdGlGYWN0b3JTTVNNZXRob2Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50T0F1dGgyQ29uZmlndXJhdGlvbiB7XG4gIGNsaWVudENyZWRlbnRpYWxzQWNjZXNzVG9rZW5Qb3B1bGF0ZUxhbWJkYUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmF0ZUxpbWl0Q29uZmlndXJhdGlvbiB7XG4gIGZhaWxlZExvZ2luPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgZm9yZ290UGFzc3dvcmQ/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kRW1haWxWZXJpZmljYXRpb24/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kUGFzc3dvcmRsZXNzPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRUd29GYWN0b3I/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYmxvY2tlZERvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIHNvdXJjZVRlbmFudElkPzogVVVJRDtcbiAgdGVuYW50PzogVGVuYW50O1xuICB3ZWJob29rSWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFJlc3BvbnNlIHtcbiAgdGVuYW50PzogVGVuYW50O1xuICB0ZW5hbnRzPzogQXJyYXk8VGVuYW50Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFJvYiBEYXZpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNDSU1TZXJ2ZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNsaWVudEVudGl0eVR5cGVJZD86IFVVSUQ7XG4gIHNjaGVtYXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBzZXJ2ZXJFbnRpdHlUeXBlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNTT0NvbmZpZ3VyYXRpb24ge1xuICBkZXZpY2VUcnVzdFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFVudmVyaWZpZWRDb25maWd1cmF0aW9uIHtcbiAgZW1haWw/OiBVbnZlcmlmaWVkQmVoYXZpb3I7XG4gIHdoZW5HYXRlZD86IFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zO1xufVxuXG4vKipcbiAqIEEgVGVuYW50LWxldmVsIHBvbGljeSBmb3IgZGVsZXRpbmcgVXNlcnMuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRVc2VyRGVsZXRlUG9saWN5IHtcbiAgdW52ZXJpZmllZD86IFRpbWVCYXNlZERlbGV0ZVBvbGljeTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50VXNlcm5hbWVDb25maWd1cmF0aW9uIHtcbiAgdW5pcXVlPzogVW5pcXVlVXNlcm5hbWVDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0RXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWUge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVmYXVsdE1lc3NhZ2VzPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRNZXNzYWdlcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0eWxlc2hlZXQ/OiBzdHJpbmc7XG4gIHRlbXBsYXRlcz86IFRlbXBsYXRlcztcbn1cblxuLyoqXG4gKiBUaGVtZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZVJlcXVlc3Qge1xuICBzb3VyY2VUaGVtZUlkPzogVVVJRDtcbiAgdGhlbWU/OiBUaGVtZTtcbn1cblxuLyoqXG4gKiBUaGVtZSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVSZXNwb25zZSB7XG4gIHRoZW1lPzogVGhlbWU7XG4gIHRoZW1lcz86IEFycmF5PFRoZW1lPjtcbn1cblxuLyoqXG4gKiBBIHBvbGljeSBmb3IgZGVsZXRpbmcgVXNlcnMuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lQmFzZWREZWxldGVQb2xpY3kgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbnVtYmVyT2ZEYXlzVG9SZXRhaW4/OiBudW1iZXI7XG59XG5cbi8qKlxuICogPHVsPlxuICogPGxpPkJlYXJlciBUb2tlbiB0eXBlIGFzIGRlZmluZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzUwXCI+UkZDIDY3NTA8L2E+LjwvbGk+XG4gKiA8bGk+TUFDIFRva2VuIHR5cGUgYXMgcmVmZXJlbmNlZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDlcIj5SRkMgNjc0OTwvYT4gYW5kXG4gKiA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtb2F1dGgtdjItaHR0cC1tYWMtMDVcIj5cbiAqIERyYWZ0IFJGQyBvbiBPQXV0aCAyLjAgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIChNQUMpIFRva2VuczwvYT5cbiAqIDwvbGk+XG4gKiA8L3VsPlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVG9rZW5UeXBlIHtcbiAgQmVhcmVyID0gXCJCZWFyZXJcIixcbiAgTUFDID0gXCJNQUNcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvdGFscyB7XG4gIGxvZ2lucz86IG51bWJlcjtcbiAgcmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbiAgdG90YWxSZWdpc3RyYXRpb25zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSByZXNwb25zZSBmcm9tIHRoZSB0b3RhbCByZXBvcnQuIFRoaXMgcmVwb3J0IHN0b3JlcyB0aGUgdG90YWwgbnVtYmVycyBmb3IgZWFjaCBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb3RhbHNSZXBvcnRSZXNwb25zZSB7XG4gIGFwcGxpY2F0aW9uVG90YWxzPzogUmVjb3JkPFVVSUQsIFRvdGFscz47XG4gIGdsb2JhbFJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG4gIHRvdGFsR2xvYmFsUmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gVE9UUEFsZ29yaXRobSB7XG4gIEhtYWNTSEExID0gXCJIbWFjU0hBMVwiLFxuICBIbWFjU0hBMjU2ID0gXCJIbWFjU0hBMjU2XCIsXG4gIEhtYWNTSEE1MTIgPSBcIkhtYWNTSEE1MTJcIlxufVxuXG4vKipcbiAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlcyBmb3IgV2ViaG9va3MgYW5kIG90aGVyIGV2ZW50IHN5c3RlbXMgd2l0aGluIEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uVHlwZSB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgQW55ID0gXCJBbnlcIixcbiAgU2ltcGxlTWFqb3JpdHkgPSBcIlNpbXBsZU1ham9yaXR5XCIsXG4gIFN1cGVyTWFqb3JpdHkgPSBcIlN1cGVyTWFqb3JpdHlcIixcbiAgQWJzb2x1dGVNYWpvcml0eSA9IFwiQWJzb2x1dGVNYWpvcml0eVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2lsaW9NZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBhY2NvdW50U0lEPzogc3RyaW5nO1xuICBhdXRoVG9rZW4/OiBzdHJpbmc7XG4gIGZyb21QaG9uZU51bWJlcj86IHN0cmluZztcbiAgbWVzc2FnaW5nU2VydmljZVNpZD86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUd2l0Y2ggZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxUd2l0Y2hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdHRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFR3aXR0ZXIgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2l0dGVySWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFR3aXR0ZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvckRpc2FibGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjb2RlPzogc3RyaW5nO1xuICBtZXRob2RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yRW5hYmxlRGlzYWJsZVNlbmRSZXF1ZXN0IHtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgY29kZT86IHN0cmluZztcbiAgdHJ1c3RDb21wdXRlcj86IGJvb2xlYW47XG4gIHR3b0ZhY3RvcklkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JNZXRob2Qge1xuICBhdXRoZW50aWNhdG9yPzogQXV0aGVudGljYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgbGFzdFVzZWQ/OiBib29sZWFuO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICBzZWNyZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlIHtcbiAgcmVjb3ZlcnlDb2Rlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRvcklkPzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICBzZWNyZXRCYXNlMzJFbmNvZGVkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JSZXNwb25zZSB7XG4gIHJlY292ZXJ5Q29kZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTZW5kUmVxdWVzdCB7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIG1ldGhvZElkPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclN0YXJ0UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjb2RlPzogc3RyaW5nO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHRydXN0Q2hhbGxlbmdlPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTdGFydFJlc3BvbnNlIHtcbiAgY29kZT86IHN0cmluZztcbiAgbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG4gIHR3b0ZhY3RvcklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTdGF0dXNSZXNwb25zZSB7XG4gIHRydXN0cz86IEFycmF5PFR3b0ZhY3RvclRydXN0PjtcbiAgdHdvRmFjdG9yVHJ1c3RJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JUcnVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBleHBpcmF0aW9uPzogbnVtYmVyO1xuICBzdGFydEluc3RhbnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVUlDb25maWd1cmF0aW9uIHtcbiAgaGVhZGVyQ29sb3I/OiBzdHJpbmc7XG4gIGxvZ29VUkw/OiBzdHJpbmc7XG4gIG1lbnVGb250Q29sb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pcXVlVXNlcm5hbWVDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG51bWJlck9mRGlnaXRzPzogbnVtYmVyO1xuICBzZXBhcmF0b3I/OiBzdHJpbmc7XG4gIHN0cmF0ZWd5PzogVW5pcXVlVXNlcm5hbWVTdHJhdGVneTtcbn1cblxuZXhwb3J0IGVudW0gVW5pcXVlVXNlcm5hbWVTdHJhdGVneSB7XG4gIEFsd2F5cyA9IFwiQWx3YXlzXCIsXG4gIE9uQ29sbGlzaW9uID0gXCJPbkNvbGxpc2lvblwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBVbnZlcmlmaWVkQmVoYXZpb3Ige1xuICBBbGxvdyA9IFwiQWxsb3dcIixcbiAgR2F0ZWQgPSBcIkdhdGVkXCJcbn1cblxuLyoqXG4gKiBUaGUgZ2xvYmFsIHZpZXcgb2YgYSBVc2VyLiBUaGlzIG9iamVjdCBjb250YWlucyBhbGwgZ2xvYmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VyIGluY2x1ZGluZyBiaXJ0aCBkYXRlLCByZWdpc3RyYXRpb24gaW5mb3JtYXRpb25cbiAqIHByZWZlcnJlZCBsYW5ndWFnZXMsIGdsb2JhbCBhdHRyaWJ1dGVzLCBldGMuXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIgZXh0ZW5kcyBTZWN1cmVJZGVudGl0eSB7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGJpcnRoRGF0ZT86IHN0cmluZztcbiAgY2xlYW5TcGVha0lkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVtYWlsPzogc3RyaW5nO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIGZpcnN0TmFtZT86IHN0cmluZztcbiAgZnVsbE5hbWU/OiBzdHJpbmc7XG4gIGltYWdlVXJsPzogc3RyaW5nO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0TmFtZT86IHN0cmluZztcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG1lbWJlcnNoaXBzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xuICBtaWRkbGVOYW1lPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgcGFyZW50RW1haWw/OiBzdHJpbmc7XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IEFycmF5PHN0cmluZz47XG4gIHJlZ2lzdHJhdGlvbnM/OiBBcnJheTxVc2VyUmVnaXN0cmF0aW9uPjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0aW1lem9uZT86IHN0cmluZztcbiAgdHdvRmFjdG9yPzogVXNlclR3b0ZhY3RvckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQW4gYWN0aW9uIHRoYXQgY2FuIGJlIGV4ZWN1dGVkIG9uIGEgdXNlciAoZGlzY2lwbGluZSBvciByZXdhcmQgcG90ZW50aWFsbHkpLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb24ge1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBjYW5jZWxFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBpZD86IFVVSUQ7XG4gIGluY2x1ZGVFbWFpbEluRXZlbnRKU09OPzogYm9vbGVhbjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvY2FsaXplZE5hbWVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbW9kaWZ5RW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9ucz86IEFycmF5PFVzZXJBY3Rpb25PcHRpb24+O1xuICBwcmV2ZW50TG9naW4/OiBib29sZWFuO1xuICBzZW5kRW5kRXZlbnQ/OiBib29sZWFuO1xuICBzdGFydEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHRlbXBvcmFsPzogYm9vbGVhbjtcbiAgdHJhbnNhY3Rpb25UeXBlPzogVHJhbnNhY3Rpb25UeXBlO1xuICB1c2VyRW1haWxpbmdFbmFibGVkPzogYm9vbGVhbjtcbiAgdXNlck5vdGlmaWNhdGlvbnNFbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIHVzZXIgYWN0aW9uIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25FdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFjdGlvbj86IHN0cmluZztcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW1haWw/OiBFbWFpbDtcbiAgZW1haWxlZFVzZXI/OiBib29sZWFuO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIGxvY2FsaXplZEFjdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkRHVyYXRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZE9wdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkUmVhc29uPzogc3RyaW5nO1xuICBub3RpZnlVc2VyPzogYm9vbGVhbjtcbiAgb3B0aW9uPzogc3RyaW5nO1xuICBwaGFzZT86IFVzZXJBY3Rpb25QaGFzZTtcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbG9nIGZvciBhbiBhY3Rpb24gdGhhdCB3YXMgdGFrZW4gb24gYSBVc2VyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25Mb2cge1xuICBhY3Rpb25lZVVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbmVyVXNlcklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW1haWxVc2VyT25FbmQ/OiBib29sZWFuO1xuICBlbmRFdmVudFNlbnQ/OiBib29sZWFuO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIGhpc3Rvcnk/OiBMb2dIaXN0b3J5O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxvY2FsaXplZE5hbWU/OiBzdHJpbmc7XG4gIGxvY2FsaXplZE9wdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkUmVhc29uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBub3RpZnlVc2VyT25FbmQ/OiBib29sZWFuO1xuICBvcHRpb24/OiBzdHJpbmc7XG4gIHJlYXNvbj86IHN0cmluZztcbiAgcmVhc29uQ29kZT86IHN0cmluZztcbiAgdXNlckFjdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgY29udGVudCB1c2VyIGFjdGlvbiBvcHRpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25PcHRpb24ge1xuICBsb2NhbGl6ZWROYW1lcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBoYXNlcyBvZiBhIHRpbWUtYmFzZWQgdXNlciBhY3Rpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIFVzZXJBY3Rpb25QaGFzZSB7XG4gIHN0YXJ0ID0gXCJzdGFydFwiLFxuICBtb2RpZnkgPSBcIm1vZGlmeVwiLFxuICBjYW5jZWwgPSBcImNhbmNlbFwiLFxuICBlbmQgPSBcImVuZFwiXG59XG5cbi8qKlxuICogTW9kZWxzIGFjdGlvbiByZWFzb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZWFzb24ge1xuICBjb2RlPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRUZXh0cz86IExvY2FsaXplZFN0cmluZ3M7XG4gIHRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVXNlciBBY3Rpb24gUmVhc29uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCB7XG4gIHVzZXJBY3Rpb25SZWFzb24/OiBVc2VyQWN0aW9uUmVhc29uO1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIFJlYXNvbiBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSB7XG4gIHVzZXJBY3Rpb25SZWFzb24/OiBVc2VyQWN0aW9uUmVhc29uO1xuICB1c2VyQWN0aW9uUmVhc29ucz86IEFycmF5PFVzZXJBY3Rpb25SZWFzb24+O1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVxdWVzdCB7XG4gIHVzZXJBY3Rpb24/OiBVc2VyQWN0aW9uO1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlc3BvbnNlIHtcbiAgdXNlckFjdGlvbj86IFVzZXJBY3Rpb247XG4gIHVzZXJBY3Rpb25zPzogQXJyYXk8VXNlckFjdGlvbj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEJ1bGsgQ3JlYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJCdWxrQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIEEgbG9nIGZvciBhbiBldmVudCB0aGF0IGhhcHBlbmVkIHRvIGEgVXNlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29tbWVudCB7XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGNvbW1lbnRlcklkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29tbWVudFJlcXVlc3Qge1xuICB1c2VyQ29tbWVudD86IFVzZXJDb21tZW50O1xufVxuXG4vKipcbiAqIFVzZXIgQ29tbWVudCBSZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29tbWVudFJlc3BvbnNlIHtcbiAgdXNlckNvbW1lbnQ/OiBVc2VyQ29tbWVudDtcbiAgdXNlckNvbW1lbnRzPzogQXJyYXk8VXNlckNvbW1lbnQ+O1xufVxuXG4vKipcbiAqIE1vZGVscyBhIFVzZXIgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbnNlbnQge1xuICBjb25zZW50PzogQ29uc2VudDtcbiAgY29uc2VudElkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGdpdmVyVXNlcklkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgc3RhdHVzPzogQ29uc2VudFN0YXR1cztcbiAgdXNlcklkPzogVVVJRDtcbiAgdmFsdWVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIFVzZXIgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbnNlbnRSZXF1ZXN0IHtcbiAgdXNlckNvbnNlbnQ/OiBVc2VyQ29uc2VudDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIFVzZXIgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbnNlbnRSZXNwb25zZSB7XG4gIHVzZXJDb25zZW50PzogVXNlckNvbnNlbnQ7XG4gIHVzZXJDb25zZW50cz86IEFycmF5PFVzZXJDb25zZW50Pjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlZCBFdmVudC5cbiAqIDxwPlxuICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdXNlci5jcmVhdGUgZXZlbnQgaW4gdGhhdCBpdCB3aWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIHVzZXIgaGFzIGJlZW4gY3JlYXRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ3JlYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBDcmVhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIERlYWN0aXZhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRlYWN0aXZhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBFdmVudCAoYW5kIGNhbiBiZSBjb252ZXJ0ZWQgdG8gSlNPTikgdGhhdCBpcyB1c2VkIGZvciBhbGwgdXNlciBtb2RpZmljYXRpb25zIChjcmVhdGUsIHVwZGF0ZSxcbiAqIGRlbGV0ZSkuXG4gKiA8cD5cbiAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdXNlci5kZWxldGUgYmVjYXVzZSBpdCBpcyBzZW50IGFmdGVyIHRoZSB0eCBpcyBjb21taXR0ZWQsIHRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEV2ZW50IChhbmQgY2FuIGJlIGNvbnZlcnRlZCB0byBKU09OKSB0aGF0IGlzIHVzZWQgZm9yIGFsbCB1c2VyIG1vZGlmaWNhdGlvbnMgKGNyZWF0ZSwgdXBkYXRlLFxuICogZGVsZXRlKS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSBkZWxldGUgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGRyeVJ1bj86IGJvb2xlYW47XG4gIGhhcmREZWxldGU/OiBib29sZWFuO1xuICBxdWVyeT86IHN0cmluZztcbiAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XG4gIHVzZXJJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSBidWxrIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVSZXNwb25zZSB7XG4gIGRyeVJ1bj86IGJvb2xlYW47XG4gIGhhcmREZWxldGU/OiBib29sZWFuO1xuICB0b3RhbD86IG51bWJlcjtcbiAgdXNlcklkcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogVXNlciBBUEkgZGVsZXRlIHJlcXVlc3Qgb2JqZWN0IGZvciBhIHNpbmdsZSB1c2VyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVTaW5nbGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGhhcmREZWxldGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBldmVudCB3aGVyZSBhIHVzZXIncyBlbWFpbCBpcyB1cGRhdGVkIG91dHNpZGUgb2YgYSBmb3Jnb3QgLyBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJFbWFpbFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgcHJldmlvdXNFbWFpbD86IHN0cmluZztcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEVtYWlsIFZlcmlmeSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJFbWFpbFZlcmlmaWVkRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgSWRlbnRpdHkgUHJvdmlkZXIgTGluayBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIFJvYiBEYXZpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJZGVudGl0eVByb3ZpZGVyTGlua0V2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgaWRlbnRpdHlQcm92aWRlckxpbms/OiBJZGVudGl0eVByb3ZpZGVyTGluaztcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIElkZW50aXR5IFByb3ZpZGVyIFVubGluayBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIFJvYiBEYXZpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJZGVudGl0eVByb3ZpZGVyVW5saW5rRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlcmluZm9SZXNwb25zZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBGYWlsZWQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpbkZhaWxlZEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGF1dGhlbnRpY2F0aW9uVHlwZT86IHN0cmluZztcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZXZlbnQgd2hlcmUgYSB1c2VyIGlzIGJlaW5nIGNyZWF0ZWQgd2l0aCBhbiBcImluLXVzZVwiIGxvZ2luIElkIChlbWFpbCBvciB1c2VybmFtZSkuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpbklkRHVwbGljYXRlT25DcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGR1cGxpY2F0ZUVtYWlsPzogc3RyaW5nO1xuICBkdXBsaWNhdGVVc2VybmFtZT86IHN0cmluZztcbiAgZXhpc3Rpbmc/OiBVc2VyO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZXZlbnQgd2hlcmUgYSB1c2VyIGlzIGJlaW5nIHVwZGF0ZWQgYW5kIHRyaWVzIHRvIHVzZSBhbiBcImluLXVzZVwiIGxvZ2luIElkIChlbWFpbCBvciB1c2VybmFtZSkuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpbklkRHVwbGljYXRlT25VcGRhdGVFdmVudCBleHRlbmRzIFVzZXJMb2dpbklkRHVwbGljYXRlT25DcmVhdGVFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIExvZ2luIGV2ZW50IGZvciBhIG5ldyBkZXZpY2UgKHVuLXJlY29nbml6ZWQpXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpbk5ld0RldmljZUV2ZW50IGV4dGVuZHMgVXNlckxvZ2luU3VjY2Vzc0V2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgTG9naW4gU3VjY2VzcyBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luU3VjY2Vzc0V2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGF1dGhlbnRpY2F0aW9uVHlwZT86IHN0cmluZztcbiAgY29ubmVjdG9ySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVyTmFtZT86IHN0cmluZztcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgTG9naW4gZXZlbnQgdGhhdCBpcyBzdXNwaWNpb3VzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5TdXNwaWNpb3VzRXZlbnQgZXh0ZW5kcyBVc2VyTG9naW5TdWNjZXNzRXZlbnQge1xuICB0aHJlYXRzRGV0ZWN0ZWQ/OiBBcnJheTxBdXRoZW50aWNhdGlvblRocmVhdHM+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJuYW1lTW9kZXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUGFzc3dvcmQgQnJlYWNoIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgTWF0dGhldyBBbHRtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUGFzc3dvcmRCcmVhY2hFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBSZXNldCBTZW5kIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUGFzc3dvcmRSZXNldFNlbmRFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBSZXNldCBTdGFydCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkUmVzZXRTdGFydEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIFJlc2V0IFN1Y2Nlc3MgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFJlc2V0U3VjY2Vzc0V2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIFVwZGF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUmVhY3RpdmF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVhY3RpdmF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogVXNlciByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb24ge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRpb25Ub2tlbj86IHN0cmluZztcbiAgY2xlYW5TcGVha0lkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdExvZ2luSW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IEFycmF5PHN0cmluZz47XG4gIHJvbGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIHRva2Vucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VybmFtZVN0YXR1cz86IENvbnRlbnRTdGF0dXM7XG4gIHZlcmlmaWVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlZCBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKiA8cD5cbiAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHVzZXIucmVnaXN0cmF0aW9uLmNyZWF0ZSBldmVudCBpbiB0aGF0IGl0IHdpbGwgYmUgc2VudCBhZnRlciB0aGUgdXNlciBoYXMgYmVlbiBjcmVhdGVkLiBUaGlzIGV2ZW50IGNhbm5vdCBiZSBtYWRlXG4gKiB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uQ3JlYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlIFJlZ2lzdHJhdGlvbiBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBEZWxldGVkIFJlZ2lzdHJhdGlvbiBFdmVudC5cbiAqIDxwPlxuICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB1c2VyLnJlZ2lzdHJhdGlvbi5kZWxldGUgaW4gdGhhdCBpdCBpcyBzZW50IGFmdGVyIHRoZSBUWCBoYXMgYmVlbiBjb21taXR0ZWQuIFRoaXMgZXZlbnQgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25EZWxldGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBEZWxldGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFVwZGF0ZSBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKiA8cD5cbiAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdXNlci5yZWdpc3RyYXRpb24udXBkYXRlIGluIHRoYXQgaXQgaXMgc2VudCBhZnRlciB0aGlzIGV2ZW50IGNvbXBsZXRlcywgdGhpcyBjYW5ub3QgYmUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvblVwZGF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgb3JpZ2luYWw/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIFJlZ2lzdHJhdGlvbiBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvblVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIG9yaWdpbmFsPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFJlZ2lzdHJhdGlvbiBWZXJpZmllZCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25WZXJpZmllZEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIFVzZXIgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBkaXNhYmxlRG9tYWluQmxvY2s/OiBib29sZWFuO1xuICBzZW5kU2V0UGFzc3dvcmRFbWFpbD86IGJvb2xlYW47XG4gIHNraXBWZXJpZmljYXRpb24/OiBib29sZWFuO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlc3BvbnNlIHtcbiAgZW1haWxWZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWRzPzogUmVjb3JkPFVVSUQsIHN0cmluZz47XG4gIHRva2VuPzogc3RyaW5nO1xuICB0b2tlbkV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSB1c2VyIHF1ZXJ5LiBJdCBwcm92aWRlcyBhIGJ1aWxkIHBhdHRlcm4gYXMgd2VsbCBhcyBwdWJsaWMgZmllbGRzIGZvciB1c2Ugb24gZm9ybXMgYW5kIGluIGFjdGlvbnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZUVsYXN0aWNTZWFyY2hDcml0ZXJpYSB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBVc2VyU3RhdGUge1xuICBBdXRoZW50aWNhdGVkID0gXCJBdXRoZW50aWNhdGVkXCIsXG4gIEF1dGhlbnRpY2F0ZWROb3RSZWdpc3RlcmVkID0gXCJBdXRoZW50aWNhdGVkTm90UmVnaXN0ZXJlZFwiLFxuICBBdXRoZW50aWNhdGVkTm90VmVyaWZpZWQgPSBcIkF1dGhlbnRpY2F0ZWROb3RWZXJpZmllZFwiLFxuICBBdXRoZW50aWNhdGVkUmVnaXN0cmF0aW9uTm90VmVyaWZpZWQgPSBcIkF1dGhlbnRpY2F0ZWRSZWdpc3RyYXRpb25Ob3RWZXJpZmllZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUd29GYWN0b3JDb25maWd1cmF0aW9uIHtcbiAgbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG4gIHJlY292ZXJ5Q29kZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIE1vZGVsIGEgdXNlciBldmVudCB3aGVuIGEgdHdvLWZhY3RvciBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclR3b0ZhY3Rvck1ldGhvZEFkZEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgbWV0aG9kPzogVHdvRmFjdG9yTWV0aG9kO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbCBhIHVzZXIgZXZlbnQgd2hlbiBhIHR3by1mYWN0b3IgbWV0aG9kIGhhcyBiZWVuIGFkZGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBtZXRob2Q/OiBUd29GYWN0b3JNZXRob2Q7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgRXZlbnQgb25jZSBpdCBpcyBjb21wbGV0ZWQuIFRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJVcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgb3JpZ2luYWw/OiBVc2VyO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIG9yaWdpbmFsPzogVXNlcjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlUmVzcG9uc2Uge1xuICBqd3Q/OiBKV1Q7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBWZXJpZmljYXRpb25TdHJhdGVneSB7XG4gIENsaWNrYWJsZUxpbmsgPSBcIkNsaWNrYWJsZUxpbmtcIixcbiAgRm9ybUZpZWxkID0gXCJGb3JtRmllbGRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlc3BvbnNlIHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlSZWdpc3RyYXRpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2Uge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25SZXNwb25zZSB7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzZXJ2ZXIgd2hlcmUgZXZlbnRzIGFyZSBzZW50LiBUaGlzIGluY2x1ZGVzIHVzZXIgYWN0aW9uIGV2ZW50cyBhbmQgYW55IG90aGVyIGV2ZW50cyBzZW50IGJ5IEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9vayB7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50c0VuYWJsZWQ/OiBSZWNvcmQ8RXZlbnRUeXBlLCBib29sZWFuPjtcbiAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgaGVhZGVycz86IEhUVFBIZWFkZXJzO1xuICBodHRwQXV0aGVudGljYXRpb25QYXNzd29yZD86IHN0cmluZztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uVXNlcm5hbWU/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHJlYWRUaW1lb3V0PzogbnVtYmVyO1xuICBzc2xDZXJ0aWZpY2F0ZT86IHN0cmluZztcbiAgdGVuYW50SWRzPzogQXJyYXk8VVVJRD47XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBXZWJob29rIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rUmVxdWVzdCB7XG4gIHdlYmhvb2s/OiBXZWJob29rO1xufVxuXG4vKipcbiAqIFdlYmhvb2sgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rUmVzcG9uc2Uge1xuICB3ZWJob29rPzogV2ViaG9vaztcbiAgd2ViaG9va3M/OiBBcnJheTxXZWJob29rPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBYYm94QXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFhib3ggZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFhib3hJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8WGJveEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBYTUxTaWduYXR1cmVMb2NhdGlvbiB7XG4gIEFzc2VydGlvbiA9IFwiQXNzZXJ0aW9uXCIsXG4gIFJlc3BvbnNlID0gXCJSZXNwb25zZVwiXG59XG5cbiJdfQ==
|