@pipeline-builder/pipeline-core 3.4.122 → 3.4.123

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.
@@ -3,7 +3,7 @@ import type { CloudFormationCustomResourceEvent, CloudFormationCustomResourceRes
3
3
  * Lambda handler for CloudFormation Custom Resource that performs plugin lookup.
4
4
  *
5
5
  * Authenticates using JWT token from AWS Secrets Manager (PLATFORM_SECRET_NAME env var).
6
- * Create the secret with: `pipeline-manager store-token`
6
+ * Create the secret with: `pipeline-manager infra store-token`
7
7
  *
8
8
  * Request Types:
9
9
  * - Create/Update: fetches and returns plugin configuration from API
@@ -47,7 +47,7 @@ export function _resetCredentialsCache() { cachedToken = null; }
47
47
  * Caches the result for the lifetime of the Lambda execution context.
48
48
  *
49
49
  * The secret name is set via PLATFORM_SECRET_NAME env var (e.g. `{prefix}/{orgId}/platform`)
50
- * Create it with: `pipeline-manager store-token`
50
+ * Create it with: `pipeline-manager infra store-token`
51
51
  */
52
52
  async function getToken() {
53
53
  if (cachedToken)
@@ -65,7 +65,7 @@ async function getToken() {
65
65
  // pipeline-image-registry token endpoint validates the password as a JWT
66
66
  // and issues a registry token scoped to the JWT's org.
67
67
  if (!parsed.password) {
68
- throw new Error(`Secret "${PLATFORM_SECRET_NAME}" missing password — run "pipeline-manager store-token" to generate`);
68
+ throw new Error(`Secret "${PLATFORM_SECRET_NAME}" missing password — run "pipeline-manager infra store-token" to generate`);
69
69
  }
70
70
  cachedToken = parsed.password;
71
71
  lambdaLog.info('AUTH', 'Token retrieved from Secrets Manager');
@@ -174,7 +174,7 @@ function validatePluginFilter(pluginFilter) {
174
174
  * Lambda handler for CloudFormation Custom Resource that performs plugin lookup.
175
175
  *
176
176
  * Authenticates using JWT token from AWS Secrets Manager (PLATFORM_SECRET_NAME env var).
177
- * Create the secret with: `pipeline-manager store-token`
177
+ * Create the secret with: `pipeline-manager infra store-token`
178
178
  *
179
179
  * Request Types:
180
180
  * - Create/Update: fetches and returns plugin configuration from API
@@ -289,4 +289,4 @@ export const handler = async (event) => {
289
289
  lambdaLog.info('END', 'Custom resource execution completed');
290
290
  }
291
291
  };
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzlGLE9BQU8sS0FBSyxFQUFFLEVBQXNCLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxtRkFBbUY7QUFDbkYsbUZBQW1GO0FBQ25GLHFGQUFxRjtBQUNyRixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsd0JBQXdCLEdBQ3pCLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEM7OztHQUdHO0FBQ0gsU0FBUyxRQUFRLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxPQUFlLEVBQUUsSUFBYztJQUMzRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RixRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxPQUFPO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDekMsS0FBSyxPQUFPO1lBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxPQUFPO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNO1FBQ2hGLFNBQVMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sU0FBUyxHQUFH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LENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDeEQsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1NBQ3lCLENBQUM7SUFDNUMsQ0FBQztZQUFTLENBQUM7UUFDVCxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgR2V0U2VjcmV0VmFsdWVDb21tYW5kLCBTZWNyZXRzTWFuYWdlckNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXInO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IGF4aW9zLCB7IHR5cGUgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbi8vIEltcG9ydCB0aGUgZGVwZW5kZW5jeS1mcmVlIGxlYWYsIE5PVCBgYXBwLWNvbmZpZy5qc2AvYENvcmVDb25zdGFudHNgOiB0aGUgbGF0dGVyXG4vLyB0cmFuc2l0aXZlbHkgcHVsbHMgaW5mcmFzdHJ1Y3R1cmUtY29uZmlnIOKGkiBhd3MtY2RrLWxpYiwgd2hpY2ggZXNidWlsZCB0aGVuIHRyaWVzXG4vLyB0byBidW5kbGUgaW50byB0aGlzIExhbWJkYSAoaHVuZHJlZHMgb2YgTUIg4oaSIE9PTS9TSUdLSUxMIGR1cmluZyBjb2xkLXN0YXJ0IHN5bnRoKS5cbmltcG9ydCB7XG4gIEhBTkRMRVJfVElNRU9VVF9NUyxcbiAgSEFORExFUl9NQVhfUkVUUklFUyxcbiAgSEFORExFUl9SRVRSWV9ERUxBWV9NUyxcbiAgSEFORExFUl9ERUZBVUxUX0JBU0VfVVJMLFxufSBmcm9tICcuLi9jb25maWcvaGFuZGxlci1jb25zdGFudHMuanMnO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQgbG9nZ2VyIGZvciBMYW1iZGEgKG91dHB1dHMgSlNPTiB0byBDbG91ZFdhdGNoKS5cbiAqIERlYnVnIG1lc3NhZ2VzIG9ubHkgZW1pdHRlZCB3aGVuIExPR19MRVZFTD1kZWJ1Zy5cbiAqL1xuZnVuY3Rpb24gbG9nRW50cnkobGV2ZWw6IHN0cmluZywgdGFnOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pIHtcbiAgY29uc3QgbGluZSA9IEpTT04uc3RyaW5naWZ5KHsgbGV2ZWwsIHRhZywgbWVzc2FnZSwgZGF0YSwgdHM6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KTtcbiAgc3dpdGNoIChsZXZlbCkge1xuICAgIGNhc2UgJ0VSUk9SJzogY29uc29sZS5lcnJvcihsaW5lKTsgYnJlYWs7XG4gICAgY2FzZSAnREVCVUcnOiBpZiAocHJvY2Vzcy5lbnYuTE9HX0xFVkVMID09PSAnZGVidWcnKSBjb25zb2xlLmRlYnVnKGxpbmUpOyBicmVhaztcbiAgICBkZWZhdWx0OiBjb25zb2xlLmxvZyhsaW5lKTtcbiAgfVxufVxuXG5jb25zdCBsYW1iZGFMb2cgPSB7XG4gIGluZm86ICh0YWc6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gbG9nRW50cnkoJ0lORk8nLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxuICBlcnJvcjogKHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiBsb2dFbnRyeSgnRVJST1InLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxuICBkZWJ1ZzogKHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiBsb2dFbnRyeSgnREVCVUcnLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxufTtcblxuY29uc3QgUkVUUllBQkxFX1NUQVRVU0VTID0gbmV3IFNldChbNDI5LCA1MDIsIDUwMywgNTA0XSk7XG5jb25zdCBSRVRSWUFCTEVfQ09ERVMgPSBuZXcgU2V0KFsnRUNPTk5SRVNFVCcsICdFQ09OTlJFRlVTRUQnLCAnRVRJTUVET1VUJ10pO1xuXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqIFBsYXRmb3JtIHNlY3JldCBuYW1lIOKAlCBpbmplY3RlZCBhcyBQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyIGJ5IFBsdWdpbkxvb2t1cCBjb25zdHJ1Y3QuICovXG5jb25zdCBQTEFURk9STV9TRUNSRVRfTkFNRSA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFQ1JFVF9OQU1FO1xuaWYgKCFQTEFURk9STV9TRUNSRVRfTkFNRSkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1BMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHJlcXVpcmVkJyk7XG59XG5cbi8qKiBDYWNoZWQgdG9rZW4gdG8gYXZvaWQgcmVwZWF0ZWQgU2VjcmV0cyBNYW5hZ2VyIGNhbGxzIHdpdGhpbiBhIHNpbmdsZSBpbnZvY2F0aW9uLiAqL1xubGV0IGNhY2hlZFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuLyoqIEBpbnRlcm5hbCBSZXNldCBjYWNoZWQgdG9rZW4gKGZvciB0ZXN0aW5nIG9ubHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldENyZWRlbnRpYWxzQ2FjaGUoKTogdm9pZCB7IGNhY2hlZFRva2VuID0gbnVsbDsgfVxuXG4vKipcbiAqIEZldGNoIEpXVCB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDYWNoZXMgdGhlIHJlc3VsdCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBMYW1iZGEgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogVGhlIHNlY3JldCBuYW1lIGlzIHNldCB2aWEgUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhciAoZS5nLiBge3ByZWZpeH0ve29yZ0lkfS9wbGF0Zm9ybWApXG4gKiBDcmVhdGUgaXQgd2l0aDogYHBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW5gXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChjYWNoZWRUb2tlbikgcmV0dXJuIGNhY2hlZFRva2VuO1xuXG4gIGxhbWJkYUxvZy5pbmZvKCdBVVRIJywgYEZldGNoaW5nIHRva2VuIGZyb20gU2VjcmV0cyBNYW5hZ2VyOiAke1BMQVRGT1JNX1NFQ1JFVF9OQU1FfWApO1xuXG4gIGNvbnN0IGNsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh7fSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7IFNlY3JldElkOiBQTEFURk9STV9TRUNSRVRfTkFNRSB9KSk7XG5cbiAgaWYgKCFyZXNwb25zZS5TZWNyZXRTdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlY3JldCBcIiR7UExBVEZPUk1fU0VDUkVUX05BTUV9XCIgaXMgZW1wdHlgKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzcG9uc2UuU2VjcmV0U3RyaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvLyBTY2hlbWEgaXMgYHsgdXNlcm5hbWUsIHBhc3N3b3JkLCAuLi4gfWAg4oCUIHRoZSBgcGFzc3dvcmRgIGZpZWxkIGlzIHRoZVxuICAvLyBwbGF0Zm9ybSBKV1QuIFNhbWUgc2VjcmV0IGlzIHJlYWQgYnkgQ29kZUJ1aWxkJ3MgYHNlY3JldHNNYW5hZ2VyQ3JlZGVudGlhbHNgXG4gIC8vIGZvciByZWdpc3RyeSBwdWxscyAoQmFzaWMgYXV0aDogdXNlcm5hbWU6cGFzc3dvcmQgPSBvcmdJZDpKV1QpLiBUaGVcbiAgLy8gcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkgdG9rZW4gZW5kcG9pbnQgdmFsaWRhdGVzIHRoZSBwYXNzd29yZCBhcyBhIEpXVFxuICAvLyBhbmQgaXNzdWVzIGEgcmVnaXN0cnkgdG9rZW4gc2NvcGVkIHRvIHRoZSBKV1QncyBvcmcuXG4gIGlmICghcGFyc2VkLnBhc3N3b3JkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgXCIke1BMQVRGT1JNX1NFQ1JFVF9OQU1FfVwiIG1pc3NpbmcgcGFzc3dvcmQg4oCUIHJ1biBcInBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW5cIiB0byBnZW5lcmF0ZWApO1xuICB9XG5cbiAgY2FjaGVkVG9rZW4gPSBwYXJzZWQucGFzc3dvcmQ7XG4gIGxhbWJkYUxvZy5pbmZvKCdBVVRIJywgJ1Rva2VuIHJldHJpZXZlZCBmcm9tIFNlY3JldHMgTWFuYWdlcicpO1xuICByZXR1cm4gY2FjaGVkVG9rZW47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByZS1jb25maWd1cmVkIEF4aW9zIGluc3RhbmNlIGZvciBBUEkgcmVxdWVzdHMuXG4gKlxuICogQHBhcmFtIGJhc2VVUkwgLSBCYXNlIFVSTCBvZiB0aGUgdGFyZ2V0IEFQSVxuICogQHBhcmFtIHRva2VuIC0gSldUIHRva2VuIGZvciBhdXRob3JpemF0aW9uXG4gKiBAcmV0dXJucyBDb25maWd1cmVkIEF4aW9zIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShiYXNlVVJMOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBBeGlvc0luc3RhbmNlIHtcbiAgcmV0dXJuIGF4aW9zLmNyZWF0ZSh7XG4gICAgYmFzZVVSTCxcbiAgICB0aW1lb3V0OiBIQU5ETEVSX1RJTUVPVVRfTVMsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBwbHVnaW4gY29uZmlndXJhdGlvbiBmcm9tIHRoZSBleHRlcm5hbCBBUEkgd2l0aCByZXRyeSBsb2dpYy5cbiAqIFJldHJpZXMgb24gdHJhbnNpZW50IGZhaWx1cmVzICg0MjksIDUwMiwgNTAzLCA1MDQsIG5ldHdvcmsgZXJyb3JzKVxuICogd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLlxuICpcbiAqIEBwYXJhbSBhcGkgLSBDb25maWd1cmVkIEF4aW9zIGluc3RhbmNlXG4gKiBAcGFyYW0gcGx1Z2luRmlsdGVyIC0gRmlsdGVyIGNyaXRlcmlhIGZvciB0aGUgcGx1Z2luIGxvb2t1cFxuICogQHJldHVybnMgVGhlIHBsdWdpbiBkYXRhIHJldHVybmVkIGJ5IHRoZSBBUElcbiAqIEB0aHJvd3MgRXJyb3Igb24gcGVyc2lzdGVudCBmYWlsdXJlLCB0aW1lb3V0IG9yIGludmFsaWQgcmVzcG9uc2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2goYXBpOiBBeGlvc0luc3RhbmNlLCBwbHVnaW5GaWx0ZXI6IFBsdWdpbkZpbHRlcik6IFByb21pc2U8UGx1Z2luPiB7XG4gIGxhbWJkYUxvZy5kZWJ1ZygnRkVUQ0gnLCAnU3RhcnRpbmcgcGx1Z2luIGZldGNoJywgeyBmaWx0ZXI6IHBsdWdpbkZpbHRlciB9KTtcblxuICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBIQU5ETEVSX01BWF9SRVRSSUVTOyBhdHRlbXB0KyspIHtcbiAgICBpZiAoYXR0ZW1wdCA+IDApIHtcbiAgICAgIGNvbnN0IGRlbGF5ID0gSEFORExFUl9SRVRSWV9ERUxBWV9NUyAqIE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKTtcbiAgICAgIGxhbWJkYUxvZy5pbmZvKCdSRVRSWScsIGBBdHRlbXB0ICR7YXR0ZW1wdCArIDF9LyR7SEFORExFUl9NQVhfUkVUUklFUyArIDF9IGFmdGVyICR7ZGVsYXl9bXNgKTtcbiAgICAgIGF3YWl0IHNsZWVwKGRlbGF5KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhLCBzdGF0dXMgfSA9IGF3YWl0IGFwaS5wb3N0PFBsdWdpbj4oJy9hcGkvcGx1Z2lucy9sb29rdXAnLCB7XG4gICAgICAgIGZpbHRlcjogcGx1Z2luRmlsdGVyLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IHJlc3BvbnNlIGRhdGEgZnJvbSBBUEknKTtcbiAgICAgIH1cblxuICAgICAgbGFtYmRhTG9nLmluZm8oJ0ZFVENIJywgJ1BsdWdpbiBmZXRjaGVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBwbHVnaW46IGRhdGEubmFtZSxcbiAgICAgICAgdmVyc2lvbjogZGF0YS52ZXJzaW9uLFxuICAgICAgICBpZDogZGF0YS5pZCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXhpb3NFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VDT05OQUJPUlRFRCcpIHtcbiAgICAgICAgICBsYW1iZGFMb2cuZXJyb3IoJ0ZFVENIJywgYFBsdWdpbiBsb29rdXAgdGltZWQgb3V0IGFmdGVyICR7SEFORExFUl9USU1FT1VUX01TfW1zYCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gbG9va3VwIHRpbWVkIG91dCBhZnRlciAke0hBTkRMRVJfVElNRU9VVF9NU31tc2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmV0cnlhYmxlID0gZXJyb3IucmVzcG9uc2VcbiAgICAgICAgICA/IFJFVFJZQUJMRV9TVEFUVVNFUy5oYXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgICAgIDogUkVUUllBQkxFX0NPREVTLmhhcyhlcnJvci5jb2RlID8/ICcnKTtcblxuICAgICAgICBjb25zdCBtc2cgPSBlcnJvci5yZXNwb25zZVxuICAgICAgICAgID8gYEFQSSBlcnJvciAke2Vycm9yLnJlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3IucmVzcG9uc2Uuc3RhdHVzVGV4dH1gXG4gICAgICAgICAgOiBlcnJvci5jb2RlIHx8IGVycm9yLm1lc3NhZ2U7XG5cbiAgICAgICAgaWYgKHJldHJ5YWJsZSAmJiBhdHRlbXB0IDwgSEFORExFUl9NQVhfUkVUUklFUykge1xuICAgICAgICAgIGxhbWJkYUxvZy5pbmZvKCdSRVRSWScsIGBSZXRyeWFibGUgZXJyb3I6ICR7bXNnfWAsIHsgYXR0ZW1wdDogYXR0ZW1wdCArIDEgfSk7XG4gICAgICAgICAgbGFzdEVycm9yID0gbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcGx1Z2luOiAke21zZ31gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvbid0IGxvZyB0aGUgdXBzdHJlYW0gYm9keSB2ZXJiYXRpbSDigJQgaXQgbWF5IGNhcnJ5IGEgc3RhY2sgdHJhY2UsXG4gICAgICAgIC8vIGEgcmVxdWVzdCBwYXlsb2FkIGVjaG8sIG9yIG90aGVyIHNlbnNpdGl2ZSBkYXRhIHdlIHNob3VsZG4ndCBlY2hvXG4gICAgICAgIC8vIGludG8gTGFtYmRhIENsb3VkV2F0Y2ggbG9ncy4gS2VlcCBqdXN0IHRoZSBoaWdoLWxldmVsIHNoYXBlLlxuICAgICAgICBjb25zdCBzYWZlQm9keSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhICYmIHR5cGVvZiBlcnJvci5yZXNwb25zZS5kYXRhID09PSAnb2JqZWN0J1xuICAgICAgICAgID8geyBjb2RlOiAoZXJyb3IucmVzcG9uc2UuZGF0YSBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSwgbWVzc2FnZTogKGVycm9yLnJlc3BvbnNlLmRhdGEgYXMgeyBtZXNzYWdlPzogc3RyaW5nIH0pLm1lc3NhZ2UgfVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBsYW1iZGFMb2cuZXJyb3IoJ0ZFVENIJywgbXNnLCB7IHJlc3BvbnNlQm9keTogc2FmZUJvZHkgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHBsdWdpbjogJHttc2d9YCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcignVW5rbm93biBlcnJvciBkdXJpbmcgcGx1Z2luIGZldGNoJyk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbGFzdEVycm9yID8/IG5ldyBFcnJvcignRmFpbGVkIHRvIGZldGNoIHBsdWdpbiBhZnRlciByZXRyaWVzJyk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBwbHVnaW4gZmlsdGVyIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwbHVnaW5GaWx0ZXIgLSBGaWx0ZXIgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHRydWUgaWYgdmFsaWRcbiAqIEB0aHJvd3MgRXJyb3IgaWYgaW52YWxpZFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBsdWdpbkZpbHRlcihwbHVnaW5GaWx0ZXI6IHVua25vd24pOiBwbHVnaW5GaWx0ZXIgaXMgUGx1Z2luRmlsdGVyIHtcbiAgaWYgKCFwbHVnaW5GaWx0ZXIgfHwgdHlwZW9mIHBsdWdpbkZpbHRlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCBwbHVnaW5GaWx0ZXInKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlciA9IHBsdWdpbkZpbHRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKCFmaWx0ZXIubmFtZSAmJiAhZmlsdGVyLmlkICYmICFmaWx0ZXIudmVyc2lvbiAmJiAhZmlsdGVyLm9yZ0lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQbHVnaW5GaWx0ZXIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjcml0ZXJpb24gKG5hbWUsIGlkLCB2ZXJzaW9uLCBvciBvcmdJZCknKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIExhbWJkYSBoYW5kbGVyIGZvciBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2UgdGhhdCBwZXJmb3JtcyBwbHVnaW4gbG9va3VwLlxuICpcbiAqIEF1dGhlbnRpY2F0ZXMgdXNpbmcgSldUIHRva2VuIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlciAoUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhcikuXG4gKiBDcmVhdGUgdGhlIHNlY3JldCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbmBcbiAqXG4gKiBSZXF1ZXN0IFR5cGVzOlxuICogLSBDcmVhdGUvVXBkYXRlOiBmZXRjaGVzIGFuZCByZXR1cm5zIHBsdWdpbiBjb25maWd1cmF0aW9uIGZyb20gQVBJXG4gKiAtIERlbGV0ZTogbm8tb3AgKGFsd2F5cyBzdWNjZWVkcylcbiAqXG4gKiBSZXNwb25zZTpcbiAqIC0gU3VjY2VzczogUmV0dXJucyBiYXNlNjQtZW5jb2RlZCBwbHVnaW4gSlNPTiBpbiBEYXRhLlJlc3VsdFZhbHVlXG4gKiAtIEZhaWx1cmU6IFJldHVybnMgZXJyb3IgbWVzc2FnZSBpbiBSZWFzb25cbiAqXG4gKiBAcGFyYW0gZXZlbnQgLSBDbG91ZEZvcm1hdGlvbiBjdXN0b20gcmVzb3VyY2UgZXZlbnRcbiAqIEByZXR1cm5zIENsb3VkRm9ybWF0aW9uIHJlc3BvbnNlXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSBSZXNvdXJjZSBQcm9wZXJ0aWVzOlxuICogYGBganNvblxuICoge1xuICogICBcImJhc2VVUkxcIjogXCJodHRwczovL2FwaS5leGFtcGxlLmNvbVwiLFxuICogICBcInBsdWdpbkZpbHRlclwiOiB7XG4gKiAgICAgXCJuYW1lXCI6IFwibm9kZWpzLWJ1aWxkXCIsXG4gKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMS4wLjBcIixcbiAqICAgICBcImlzQWN0aXZlXCI6IHRydWVcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKFxuICBldmVudDogQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50LFxuKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U+ID0+IHtcbiAgLy8gTk9URTogbmV2ZXIgbG9nIGV2ZW50LlN0YWNrSWQgaGVyZSDigJQgdGhlIENsb3VkRm9ybWF0aW9uIFN0YWNrIEFSTiBlbWJlZHMgdGhlXG4gIC8vIEFXUyBhY2NvdW50IGlkIChhcm46YXdzOmNsb3VkZm9ybWF0aW9uOjxyZWdpb24+OjxBQ0NPVU5UX0lEPjpzdGFjay/igKYpLCB3aGljaFxuICAvLyBtdXN0IG5ldmVyIGJlIHBlcnNpc3RlZCB0byBDbG91ZFdhdGNoLiByZXF1ZXN0SWQgKyBsb2dpY2FsUmVzb3VyY2VJZCBhcmVcbiAgLy8gc3VmZmljaWVudCBmb3IgY29ycmVsYXRpb24uIChTdGFja0lkIGlzIHN0aWxsIHJldHVybmVkIGluIHRoZSBDRk4gcmVzcG9uc2VcbiAgLy8gYm9keSBiZWxvdyDigJQgdGhhdCBpcyB0aGUgbWFuZGF0b3J5IENGTiBwcm90b2NvbCBmaWVsZCBhbmQgaXMgbm90IGEgbG9nLilcbiAgbGFtYmRhTG9nLmluZm8oJ1NUQVJUJywgYCR7ZXZlbnQuUmVxdWVzdFR5cGV9IHJlcXVlc3QgcmVjZWl2ZWRgLCB7XG4gICAgbG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIHJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICB9KTtcblxuICBjb25zdCBiYXNlUmVzcG9uc2U6IFBhcnRpYWw8Q2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlPiA9IHtcbiAgICBTdGFja0lkOiBldmVudC5TdGFja0lkLFxuICAgIFJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICB9O1xuXG4gIHRyeSB7XG4gICAgLy8gSGFuZGxlIERlbGV0ZSAtIGFsd2F5cyBzdWNjZWVkIChuby1vcClcbiAgICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnKSB7XG4gICAgICBsYW1iZGFMb2cuaW5mbygnREVMRVRFJywgJ05vLW9wIC0gcmV0dXJuaW5nIFNVQ0NFU1MnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgICAgU3RhdHVzOiAnU1VDQ0VTUycsXG4gICAgICAgIFJlYXNvbjogJ0RlbGV0ZSBjb21wbGV0ZWQgKG5vLW9wKScsXG4gICAgICB9IGFzIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IGFuZCB2YWxpZGF0ZSBwcm9wZXJ0aWVzXG4gICAgY29uc3QgcGx1Z2luRmlsdGVyID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLnBsdWdpbkZpbHRlcjtcbiAgICBjb25zdCBiYXNlVVJMID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLmJhc2VVUkwgfHwgSEFORExFUl9ERUZBVUxUX0JBU0VfVVJMO1xuXG4gICAgaWYgKCFiYXNlVVJMLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgJiYgIWJhc2VVUkwuc3RhcnRzV2l0aCgnaHR0cDovLycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYmFzZVVSTDogXCIke2Jhc2VVUkx9XCIg4oCUIG11c3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vYCk7XG4gICAgfVxuXG4gICAgbGFtYmRhTG9nLmluZm8oJ0NPTkZJRycsICdDb25maWd1cmF0aW9uIGxvYWRlZCcsIHsgYmFzZVVSTCwgcGx1Z2luRmlsdGVyIH0pO1xuXG4gICAgdmFsaWRhdGVQbHVnaW5GaWx0ZXIocGx1Z2luRmlsdGVyKTtcblxuICAgIC8vIEdldCB0b2tlbiBmcm9tIFNlY3JldHMgTWFuYWdlciBhbmQgY3JlYXRlIEFQSSBjbGllbnRcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldFRva2VuKCk7XG4gICAgY29uc3QgYXBpID0gY3JlYXRlKGJhc2VVUkwsIHRva2VuKTtcblxuICAgIC8vIEZldGNoIHBsdWdpblxuICAgIGxhbWJkYUxvZy5pbmZvKCdGRVRDSCcsICdJbml0aWF0aW5nIHBsdWdpbiBsb29rdXAuLi4nKTtcbiAgICBjb25zdCBwbHVnaW4gPSBhd2FpdCBmZXRjaChhcGksIHBsdWdpbkZpbHRlcik7XG4gICAgbGFtYmRhTG9nLmluZm8oJ0ZFVENIJywgJ1BsdWdpbiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgbmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICB2ZXJzaW9uOiBwbHVnaW4udmVyc2lvbixcbiAgICAgIGlkOiBwbHVnaW4uaWQsXG4gICAgfSk7XG5cbiAgICAvLyBTdHJpcCBsYXJnZSBmaWVsZHMgdG8gc3RheSB3aXRoaW4gQ2xvdWRGb3JtYXRpb24ncyA0MDk2LWJ5dGUgRGF0YSBsaW1pdC5cbiAgICAvLyBDREsgY29uc3RydWN0cyBvbmx5IG5lZWQgdGhlIGZpZWxkcyB1c2VkIGJ5IGNyZWF0ZUNvZGVCdWlsZFN0ZXAoKS5cbiAgICBjb25zdCBzbGltID0ge1xuICAgICAgaWQ6IHBsdWdpbi5pZCxcbiAgICAgIG5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgdmVyc2lvbjogcGx1Z2luLnZlcnNpb24sXG4gICAgICBwbHVnaW5UeXBlOiBwbHVnaW4ucGx1Z2luVHlwZSxcbiAgICAgIGNvbXB1dGVUeXBlOiBwbHVnaW4uY29tcHV0ZVR5cGUsXG4gICAgICBjb21tYW5kczogcGx1Z2luLmNvbW1hbmRzLFxuICAgICAgaW5zdGFsbENvbW1hbmRzOiBwbHVnaW4uaW5zdGFsbENvbW1hbmRzLFxuICAgICAgZW52OiBwbHVnaW4uZW52LFxuICAgICAgbWV0YWRhdGE6IHBsdWdpbi5tZXRhZGF0YSxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5LFxuICAgICAgc2VjcmV0czogcGx1Z2luLnNlY3JldHMsXG4gICAgICBmYWlsdXJlQmVoYXZpb3I6IHBsdWdpbi5mYWlsdXJlQmVoYXZpb3IsXG4gICAgICB0aW1lb3V0OiBwbHVnaW4udGltZW91dCxcbiAgICB9O1xuXG4gICAgY29uc3QgZW5jb2RlZCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNsaW0pLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgbGFtYmRhTG9nLmRlYnVnKCdFTkNPREUnLCAnRW5jb2RlZCBwbHVnaW4gZGF0YScsIHsgbGVuZ3RoOiBlbmNvZGVkLmxlbmd0aCB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5iYXNlUmVzcG9uc2UsXG4gICAgICBTdGF0dXM6ICdTVUNDRVNTJyxcbiAgICAgIFJlYXNvbjogYFBsdWdpbiAnJHtwbHVnaW4ubmFtZX0nICh2JHtwbHVnaW4udmVyc2lvbn0pIHJldHJpZXZlZCBzdWNjZXNzZnVsbHlgLFxuICAgICAgRGF0YToge1xuICAgICAgICBSZXN1bHRWYWx1ZTogZW5jb2RlZCxcbiAgICAgIH0sXG4gICAgfSBhcyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgcmVhc29uID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCc7XG4gICAgbGFtYmRhTG9nLmVycm9yKCdFUlJPUicsICdIYW5kbGVyIGZhaWxlZCcsIHtcbiAgICAgIHJlYXNvbixcbiAgICAgIHN0YWNrOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgU3RhdHVzOiAnRkFJTEVEJyxcbiAgICAgIFJlYXNvbjogcmVhc29uLFxuICAgIH0gYXMgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlO1xuICB9IGZpbmFsbHkge1xuICAgIGxhbWJkYUxvZy5pbmZvKCdFTkQnLCAnQ3VzdG9tIHJlc291cmNlIGV4ZWN1dGlvbiBjb21wbGV0ZWQnKTtcbiAgfVxufTtcbiJdfQ==
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzlGLE9BQU8sS0FBSyxFQUFFLEVBQXNCLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxtRkFBbUY7QUFDbkYsbUZBQW1GO0FBQ25GLHFGQUFxRjtBQUNyRixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsd0JBQXdCLEdBQ3pCLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEM7OztHQUdHO0FBQ0gsU0FBUyxRQUFRLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxPQUFlLEVBQUUsSUFBYztJQUMzRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RixRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxPQUFPO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDekMsS0FBSyxPQUFPO1lBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxPQUFPO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNO1FBQ2hGLFNBQVMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sU0FBUyxHQUFH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LENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDeEQsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1NBQ3lCLENBQUM7SUFDNUMsQ0FBQztZQUFTLENBQUM7UUFDVCxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgR2V0U2VjcmV0VmFsdWVDb21tYW5kLCBTZWNyZXRzTWFuYWdlckNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXInO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IGF4aW9zLCB7IHR5cGUgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbi8vIEltcG9ydCB0aGUgZGVwZW5kZW5jeS1mcmVlIGxlYWYsIE5PVCBgYXBwLWNvbmZpZy5qc2AvYENvcmVDb25zdGFudHNgOiB0aGUgbGF0dGVyXG4vLyB0cmFuc2l0aXZlbHkgcHVsbHMgaW5mcmFzdHJ1Y3R1cmUtY29uZmlnIOKGkiBhd3MtY2RrLWxpYiwgd2hpY2ggZXNidWlsZCB0aGVuIHRyaWVzXG4vLyB0byBidW5kbGUgaW50byB0aGlzIExhbWJkYSAoaHVuZHJlZHMgb2YgTUIg4oaSIE9PTS9TSUdLSUxMIGR1cmluZyBjb2xkLXN0YXJ0IHN5bnRoKS5cbmltcG9ydCB7XG4gIEhBTkRMRVJfVElNRU9VVF9NUyxcbiAgSEFORExFUl9NQVhfUkVUUklFUyxcbiAgSEFORExFUl9SRVRSWV9ERUxBWV9NUyxcbiAgSEFORExFUl9ERUZBVUxUX0JBU0VfVVJMLFxufSBmcm9tICcuLi9jb25maWcvaGFuZGxlci1jb25zdGFudHMuanMnO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQgbG9nZ2VyIGZvciBMYW1iZGEgKG91dHB1dHMgSlNPTiB0byBDbG91ZFdhdGNoKS5cbiAqIERlYnVnIG1lc3NhZ2VzIG9ubHkgZW1pdHRlZCB3aGVuIExPR19MRVZFTD1kZWJ1Zy5cbiAqL1xuZnVuY3Rpb24gbG9nRW50cnkobGV2ZWw6IHN0cmluZywgdGFnOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pIHtcbiAgY29uc3QgbGluZSA9IEpTT04uc3RyaW5naWZ5KHsgbGV2ZWwsIHRhZywgbWVzc2FnZSwgZGF0YSwgdHM6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KTtcbiAgc3dpdGNoIChsZXZlbCkge1xuICAgIGNhc2UgJ0VSUk9SJzogY29uc29sZS5lcnJvcihsaW5lKTsgYnJlYWs7XG4gICAgY2FzZSAnREVCVUcnOiBpZiAocHJvY2Vzcy5lbnYuTE9HX0xFVkVMID09PSAnZGVidWcnKSBjb25zb2xlLmRlYnVnKGxpbmUpOyBicmVhaztcbiAgICBkZWZhdWx0OiBjb25zb2xlLmxvZyhsaW5lKTtcbiAgfVxufVxuXG5jb25zdCBsYW1iZGFMb2cgPSB7XG4gIGluZm86ICh0YWc6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gbG9nRW50cnkoJ0lORk8nLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxuICBlcnJvcjogKHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiBsb2dFbnRyeSgnRVJST1InLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxuICBkZWJ1ZzogKHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiBsb2dFbnRyeSgnREVCVUcnLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxufTtcblxuY29uc3QgUkVUUllBQkxFX1NUQVRVU0VTID0gbmV3IFNldChbNDI5LCA1MDIsIDUwMywgNTA0XSk7XG5jb25zdCBSRVRSWUFCTEVfQ09ERVMgPSBuZXcgU2V0KFsnRUNPTk5SRVNFVCcsICdFQ09OTlJFRlVTRUQnLCAnRVRJTUVET1VUJ10pO1xuXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqIFBsYXRmb3JtIHNlY3JldCBuYW1lIOKAlCBpbmplY3RlZCBhcyBQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyIGJ5IFBsdWdpbkxvb2t1cCBjb25zdHJ1Y3QuICovXG5jb25zdCBQTEFURk9STV9TRUNSRVRfTkFNRSA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFQ1JFVF9OQU1FO1xuaWYgKCFQTEFURk9STV9TRUNSRVRfTkFNRSkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1BMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHJlcXVpcmVkJyk7XG59XG5cbi8qKiBDYWNoZWQgdG9rZW4gdG8gYXZvaWQgcmVwZWF0ZWQgU2VjcmV0cyBNYW5hZ2VyIGNhbGxzIHdpdGhpbiBhIHNpbmdsZSBpbnZvY2F0aW9uLiAqL1xubGV0IGNhY2hlZFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuLyoqIEBpbnRlcm5hbCBSZXNldCBjYWNoZWQgdG9rZW4gKGZvciB0ZXN0aW5nIG9ubHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldENyZWRlbnRpYWxzQ2FjaGUoKTogdm9pZCB7IGNhY2hlZFRva2VuID0gbnVsbDsgfVxuXG4vKipcbiAqIEZldGNoIEpXVCB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDYWNoZXMgdGhlIHJlc3VsdCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBMYW1iZGEgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogVGhlIHNlY3JldCBuYW1lIGlzIHNldCB2aWEgUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhciAoZS5nLiBge3ByZWZpeH0ve29yZ0lkfS9wbGF0Zm9ybWApXG4gKiBDcmVhdGUgaXQgd2l0aDogYHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW5gXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChjYWNoZWRUb2tlbikgcmV0dXJuIGNhY2hlZFRva2VuO1xuXG4gIGxhbWJkYUxvZy5pbmZvKCdBVVRIJywgYEZldGNoaW5nIHRva2VuIGZyb20gU2VjcmV0cyBNYW5hZ2VyOiAke1BMQVRGT1JNX1NFQ1JFVF9OQU1FfWApO1xuXG4gIGNvbnN0IGNsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh7fSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7IFNlY3JldElkOiBQTEFURk9STV9TRUNSRVRfTkFNRSB9KSk7XG5cbiAgaWYgKCFyZXNwb25zZS5TZWNyZXRTdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlY3JldCBcIiR7UExBVEZPUk1fU0VDUkVUX05BTUV9XCIgaXMgZW1wdHlgKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzcG9uc2UuU2VjcmV0U3RyaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvLyBTY2hlbWEgaXMgYHsgdXNlcm5hbWUsIHBhc3N3b3JkLCAuLi4gfWAg4oCUIHRoZSBgcGFzc3dvcmRgIGZpZWxkIGlzIHRoZVxuICAvLyBwbGF0Zm9ybSBKV1QuIFNhbWUgc2VjcmV0IGlzIHJlYWQgYnkgQ29kZUJ1aWxkJ3MgYHNlY3JldHNNYW5hZ2VyQ3JlZGVudGlhbHNgXG4gIC8vIGZvciByZWdpc3RyeSBwdWxscyAoQmFzaWMgYXV0aDogdXNlcm5hbWU6cGFzc3dvcmQgPSBvcmdJZDpKV1QpLiBUaGVcbiAgLy8gcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkgdG9rZW4gZW5kcG9pbnQgdmFsaWRhdGVzIHRoZSBwYXNzd29yZCBhcyBhIEpXVFxuICAvLyBhbmQgaXNzdWVzIGEgcmVnaXN0cnkgdG9rZW4gc2NvcGVkIHRvIHRoZSBKV1QncyBvcmcuXG4gIGlmICghcGFyc2VkLnBhc3N3b3JkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgXCIke1BMQVRGT1JNX1NFQ1JFVF9OQU1FfVwiIG1pc3NpbmcgcGFzc3dvcmQg4oCUIHJ1biBcInBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW5cIiB0byBnZW5lcmF0ZWApO1xuICB9XG5cbiAgY2FjaGVkVG9rZW4gPSBwYXJzZWQucGFzc3dvcmQ7XG4gIGxhbWJkYUxvZy5pbmZvKCdBVVRIJywgJ1Rva2VuIHJldHJpZXZlZCBmcm9tIFNlY3JldHMgTWFuYWdlcicpO1xuICByZXR1cm4gY2FjaGVkVG9rZW47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByZS1jb25maWd1cmVkIEF4aW9zIGluc3RhbmNlIGZvciBBUEkgcmVxdWVzdHMuXG4gKlxuICogQHBhcmFtIGJhc2VVUkwgLSBCYXNlIFVSTCBvZiB0aGUgdGFyZ2V0IEFQSVxuICogQHBhcmFtIHRva2VuIC0gSldUIHRva2VuIGZvciBhdXRob3JpemF0aW9uXG4gKiBAcmV0dXJucyBDb25maWd1cmVkIEF4aW9zIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShiYXNlVVJMOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBBeGlvc0luc3RhbmNlIHtcbiAgcmV0dXJuIGF4aW9zLmNyZWF0ZSh7XG4gICAgYmFzZVVSTCxcbiAgICB0aW1lb3V0OiBIQU5ETEVSX1RJTUVPVVRfTVMsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBwbHVnaW4gY29uZmlndXJhdGlvbiBmcm9tIHRoZSBleHRlcm5hbCBBUEkgd2l0aCByZXRyeSBsb2dpYy5cbiAqIFJldHJpZXMgb24gdHJhbnNpZW50IGZhaWx1cmVzICg0MjksIDUwMiwgNTAzLCA1MDQsIG5ldHdvcmsgZXJyb3JzKVxuICogd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLlxuICpcbiAqIEBwYXJhbSBhcGkgLSBDb25maWd1cmVkIEF4aW9zIGluc3RhbmNlXG4gKiBAcGFyYW0gcGx1Z2luRmlsdGVyIC0gRmlsdGVyIGNyaXRlcmlhIGZvciB0aGUgcGx1Z2luIGxvb2t1cFxuICogQHJldHVybnMgVGhlIHBsdWdpbiBkYXRhIHJldHVybmVkIGJ5IHRoZSBBUElcbiAqIEB0aHJvd3MgRXJyb3Igb24gcGVyc2lzdGVudCBmYWlsdXJlLCB0aW1lb3V0IG9yIGludmFsaWQgcmVzcG9uc2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2goYXBpOiBBeGlvc0luc3RhbmNlLCBwbHVnaW5GaWx0ZXI6IFBsdWdpbkZpbHRlcik6IFByb21pc2U8UGx1Z2luPiB7XG4gIGxhbWJkYUxvZy5kZWJ1ZygnRkVUQ0gnLCAnU3RhcnRpbmcgcGx1Z2luIGZldGNoJywgeyBmaWx0ZXI6IHBsdWdpbkZpbHRlciB9KTtcblxuICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBIQU5ETEVSX01BWF9SRVRSSUVTOyBhdHRlbXB0KyspIHtcbiAgICBpZiAoYXR0ZW1wdCA+IDApIHtcbiAgICAgIGNvbnN0IGRlbGF5ID0gSEFORExFUl9SRVRSWV9ERUxBWV9NUyAqIE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKTtcbiAgICAgIGxhbWJkYUxvZy5pbmZvKCdSRVRSWScsIGBBdHRlbXB0ICR7YXR0ZW1wdCArIDF9LyR7SEFORExFUl9NQVhfUkVUUklFUyArIDF9IGFmdGVyICR7ZGVsYXl9bXNgKTtcbiAgICAgIGF3YWl0IHNsZWVwKGRlbGF5KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhLCBzdGF0dXMgfSA9IGF3YWl0IGFwaS5wb3N0PFBsdWdpbj4oJy9hcGkvcGx1Z2lucy9sb29rdXAnLCB7XG4gICAgICAgIGZpbHRlcjogcGx1Z2luRmlsdGVyLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IHJlc3BvbnNlIGRhdGEgZnJvbSBBUEknKTtcbiAgICAgIH1cblxuICAgICAgbGFtYmRhTG9nLmluZm8oJ0ZFVENIJywgJ1BsdWdpbiBmZXRjaGVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBwbHVnaW46IGRhdGEubmFtZSxcbiAgICAgICAgdmVyc2lvbjogZGF0YS52ZXJzaW9uLFxuICAgICAgICBpZDogZGF0YS5pZCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXhpb3NFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VDT05OQUJPUlRFRCcpIHtcbiAgICAgICAgICBsYW1iZGFMb2cuZXJyb3IoJ0ZFVENIJywgYFBsdWdpbiBsb29rdXAgdGltZWQgb3V0IGFmdGVyICR7SEFORExFUl9USU1FT1VUX01TfW1zYCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gbG9va3VwIHRpbWVkIG91dCBhZnRlciAke0hBTkRMRVJfVElNRU9VVF9NU31tc2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmV0cnlhYmxlID0gZXJyb3IucmVzcG9uc2VcbiAgICAgICAgICA/IFJFVFJZQUJMRV9TVEFUVVNFUy5oYXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgICAgIDogUkVUUllBQkxFX0NPREVTLmhhcyhlcnJvci5jb2RlID8/ICcnKTtcblxuICAgICAgICBjb25zdCBtc2cgPSBlcnJvci5yZXNwb25zZVxuICAgICAgICAgID8gYEFQSSBlcnJvciAke2Vycm9yLnJlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3IucmVzcG9uc2Uuc3RhdHVzVGV4dH1gXG4gICAgICAgICAgOiBlcnJvci5jb2RlIHx8IGVycm9yLm1lc3NhZ2U7XG5cbiAgICAgICAgaWYgKHJldHJ5YWJsZSAmJiBhdHRlbXB0IDwgSEFORExFUl9NQVhfUkVUUklFUykge1xuICAgICAgICAgIGxhbWJkYUxvZy5pbmZvKCdSRVRSWScsIGBSZXRyeWFibGUgZXJyb3I6ICR7bXNnfWAsIHsgYXR0ZW1wdDogYXR0ZW1wdCArIDEgfSk7XG4gICAgICAgICAgbGFzdEVycm9yID0gbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcGx1Z2luOiAke21zZ31gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvbid0IGxvZyB0aGUgdXBzdHJlYW0gYm9keSB2ZXJiYXRpbSDigJQgaXQgbWF5IGNhcnJ5IGEgc3RhY2sgdHJhY2UsXG4gICAgICAgIC8vIGEgcmVxdWVzdCBwYXlsb2FkIGVjaG8sIG9yIG90aGVyIHNlbnNpdGl2ZSBkYXRhIHdlIHNob3VsZG4ndCBlY2hvXG4gICAgICAgIC8vIGludG8gTGFtYmRhIENsb3VkV2F0Y2ggbG9ncy4gS2VlcCBqdXN0IHRoZSBoaWdoLWxldmVsIHNoYXBlLlxuICAgICAgICBjb25zdCBzYWZlQm9keSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhICYmIHR5cGVvZiBlcnJvci5yZXNwb25zZS5kYXRhID09PSAnb2JqZWN0J1xuICAgICAgICAgID8geyBjb2RlOiAoZXJyb3IucmVzcG9uc2UuZGF0YSBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSwgbWVzc2FnZTogKGVycm9yLnJlc3BvbnNlLmRhdGEgYXMgeyBtZXNzYWdlPzogc3RyaW5nIH0pLm1lc3NhZ2UgfVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBsYW1iZGFMb2cuZXJyb3IoJ0ZFVENIJywgbXNnLCB7IHJlc3BvbnNlQm9keTogc2FmZUJvZHkgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHBsdWdpbjogJHttc2d9YCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcignVW5rbm93biBlcnJvciBkdXJpbmcgcGx1Z2luIGZldGNoJyk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbGFzdEVycm9yID8/IG5ldyBFcnJvcignRmFpbGVkIHRvIGZldGNoIHBsdWdpbiBhZnRlciByZXRyaWVzJyk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBwbHVnaW4gZmlsdGVyIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwbHVnaW5GaWx0ZXIgLSBGaWx0ZXIgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHRydWUgaWYgdmFsaWRcbiAqIEB0aHJvd3MgRXJyb3IgaWYgaW52YWxpZFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBsdWdpbkZpbHRlcihwbHVnaW5GaWx0ZXI6IHVua25vd24pOiBwbHVnaW5GaWx0ZXIgaXMgUGx1Z2luRmlsdGVyIHtcbiAgaWYgKCFwbHVnaW5GaWx0ZXIgfHwgdHlwZW9mIHBsdWdpbkZpbHRlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCBwbHVnaW5GaWx0ZXInKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlciA9IHBsdWdpbkZpbHRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKCFmaWx0ZXIubmFtZSAmJiAhZmlsdGVyLmlkICYmICFmaWx0ZXIudmVyc2lvbiAmJiAhZmlsdGVyLm9yZ0lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQbHVnaW5GaWx0ZXIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjcml0ZXJpb24gKG5hbWUsIGlkLCB2ZXJzaW9uLCBvciBvcmdJZCknKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIExhbWJkYSBoYW5kbGVyIGZvciBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2UgdGhhdCBwZXJmb3JtcyBwbHVnaW4gbG9va3VwLlxuICpcbiAqIEF1dGhlbnRpY2F0ZXMgdXNpbmcgSldUIHRva2VuIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlciAoUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhcikuXG4gKiBDcmVhdGUgdGhlIHNlY3JldCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbmBcbiAqXG4gKiBSZXF1ZXN0IFR5cGVzOlxuICogLSBDcmVhdGUvVXBkYXRlOiBmZXRjaGVzIGFuZCByZXR1cm5zIHBsdWdpbiBjb25maWd1cmF0aW9uIGZyb20gQVBJXG4gKiAtIERlbGV0ZTogbm8tb3AgKGFsd2F5cyBzdWNjZWVkcylcbiAqXG4gKiBSZXNwb25zZTpcbiAqIC0gU3VjY2VzczogUmV0dXJucyBiYXNlNjQtZW5jb2RlZCBwbHVnaW4gSlNPTiBpbiBEYXRhLlJlc3VsdFZhbHVlXG4gKiAtIEZhaWx1cmU6IFJldHVybnMgZXJyb3IgbWVzc2FnZSBpbiBSZWFzb25cbiAqXG4gKiBAcGFyYW0gZXZlbnQgLSBDbG91ZEZvcm1hdGlvbiBjdXN0b20gcmVzb3VyY2UgZXZlbnRcbiAqIEByZXR1cm5zIENsb3VkRm9ybWF0aW9uIHJlc3BvbnNlXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSBSZXNvdXJjZSBQcm9wZXJ0aWVzOlxuICogYGBganNvblxuICoge1xuICogICBcImJhc2VVUkxcIjogXCJodHRwczovL2FwaS5leGFtcGxlLmNvbVwiLFxuICogICBcInBsdWdpbkZpbHRlclwiOiB7XG4gKiAgICAgXCJuYW1lXCI6IFwibm9kZWpzLWJ1aWxkXCIsXG4gKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMS4wLjBcIixcbiAqICAgICBcImlzQWN0aXZlXCI6IHRydWVcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKFxuICBldmVudDogQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50LFxuKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U+ID0+IHtcbiAgLy8gTk9URTogbmV2ZXIgbG9nIGV2ZW50LlN0YWNrSWQgaGVyZSDigJQgdGhlIENsb3VkRm9ybWF0aW9uIFN0YWNrIEFSTiBlbWJlZHMgdGhlXG4gIC8vIEFXUyBhY2NvdW50IGlkIChhcm46YXdzOmNsb3VkZm9ybWF0aW9uOjxyZWdpb24+OjxBQ0NPVU5UX0lEPjpzdGFjay/igKYpLCB3aGljaFxuICAvLyBtdXN0IG5ldmVyIGJlIHBlcnNpc3RlZCB0byBDbG91ZFdhdGNoLiByZXF1ZXN0SWQgKyBsb2dpY2FsUmVzb3VyY2VJZCBhcmVcbiAgLy8gc3VmZmljaWVudCBmb3IgY29ycmVsYXRpb24uIChTdGFja0lkIGlzIHN0aWxsIHJldHVybmVkIGluIHRoZSBDRk4gcmVzcG9uc2VcbiAgLy8gYm9keSBiZWxvdyDigJQgdGhhdCBpcyB0aGUgbWFuZGF0b3J5IENGTiBwcm90b2NvbCBmaWVsZCBhbmQgaXMgbm90IGEgbG9nLilcbiAgbGFtYmRhTG9nLmluZm8oJ1NUQVJUJywgYCR7ZXZlbnQuUmVxdWVzdFR5cGV9IHJlcXVlc3QgcmVjZWl2ZWRgLCB7XG4gICAgbG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIHJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICB9KTtcblxuICBjb25zdCBiYXNlUmVzcG9uc2U6IFBhcnRpYWw8Q2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlPiA9IHtcbiAgICBTdGFja0lkOiBldmVudC5TdGFja0lkLFxuICAgIFJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICB9O1xuXG4gIHRyeSB7XG4gICAgLy8gSGFuZGxlIERlbGV0ZSAtIGFsd2F5cyBzdWNjZWVkIChuby1vcClcbiAgICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnKSB7XG4gICAgICBsYW1iZGFMb2cuaW5mbygnREVMRVRFJywgJ05vLW9wIC0gcmV0dXJuaW5nIFNVQ0NFU1MnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgICAgU3RhdHVzOiAnU1VDQ0VTUycsXG4gICAgICAgIFJlYXNvbjogJ0RlbGV0ZSBjb21wbGV0ZWQgKG5vLW9wKScsXG4gICAgICB9IGFzIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IGFuZCB2YWxpZGF0ZSBwcm9wZXJ0aWVzXG4gICAgY29uc3QgcGx1Z2luRmlsdGVyID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLnBsdWdpbkZpbHRlcjtcbiAgICBjb25zdCBiYXNlVVJMID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLmJhc2VVUkwgfHwgSEFORExFUl9ERUZBVUxUX0JBU0VfVVJMO1xuXG4gICAgaWYgKCFiYXNlVVJMLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgJiYgIWJhc2VVUkwuc3RhcnRzV2l0aCgnaHR0cDovLycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYmFzZVVSTDogXCIke2Jhc2VVUkx9XCIg4oCUIG11c3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vYCk7XG4gICAgfVxuXG4gICAgbGFtYmRhTG9nLmluZm8oJ0NPTkZJRycsICdDb25maWd1cmF0aW9uIGxvYWRlZCcsIHsgYmFzZVVSTCwgcGx1Z2luRmlsdGVyIH0pO1xuXG4gICAgdmFsaWRhdGVQbHVnaW5GaWx0ZXIocGx1Z2luRmlsdGVyKTtcblxuICAgIC8vIEdldCB0b2tlbiBmcm9tIFNlY3JldHMgTWFuYWdlciBhbmQgY3JlYXRlIEFQSSBjbGllbnRcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldFRva2VuKCk7XG4gICAgY29uc3QgYXBpID0gY3JlYXRlKGJhc2VVUkwsIHRva2VuKTtcblxuICAgIC8vIEZldGNoIHBsdWdpblxuICAgIGxhbWJkYUxvZy5pbmZvKCdGRVRDSCcsICdJbml0aWF0aW5nIHBsdWdpbiBsb29rdXAuLi4nKTtcbiAgICBjb25zdCBwbHVnaW4gPSBhd2FpdCBmZXRjaChhcGksIHBsdWdpbkZpbHRlcik7XG4gICAgbGFtYmRhTG9nLmluZm8oJ0ZFVENIJywgJ1BsdWdpbiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgbmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICB2ZXJzaW9uOiBwbHVnaW4udmVyc2lvbixcbiAgICAgIGlkOiBwbHVnaW4uaWQsXG4gICAgfSk7XG5cbiAgICAvLyBTdHJpcCBsYXJnZSBmaWVsZHMgdG8gc3RheSB3aXRoaW4gQ2xvdWRGb3JtYXRpb24ncyA0MDk2LWJ5dGUgRGF0YSBsaW1pdC5cbiAgICAvLyBDREsgY29uc3RydWN0cyBvbmx5IG5lZWQgdGhlIGZpZWxkcyB1c2VkIGJ5IGNyZWF0ZUNvZGVCdWlsZFN0ZXAoKS5cbiAgICBjb25zdCBzbGltID0ge1xuICAgICAgaWQ6IHBsdWdpbi5pZCxcbiAgICAgIG5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgdmVyc2lvbjogcGx1Z2luLnZlcnNpb24sXG4gICAgICBwbHVnaW5UeXBlOiBwbHVnaW4ucGx1Z2luVHlwZSxcbiAgICAgIGNvbXB1dGVUeXBlOiBwbHVnaW4uY29tcHV0ZVR5cGUsXG4gICAgICBjb21tYW5kczogcGx1Z2luLmNvbW1hbmRzLFxuICAgICAgaW5zdGFsbENvbW1hbmRzOiBwbHVnaW4uaW5zdGFsbENvbW1hbmRzLFxuICAgICAgZW52OiBwbHVnaW4uZW52LFxuICAgICAgbWV0YWRhdGE6IHBsdWdpbi5tZXRhZGF0YSxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5LFxuICAgICAgc2VjcmV0czogcGx1Z2luLnNlY3JldHMsXG4gICAgICBmYWlsdXJlQmVoYXZpb3I6IHBsdWdpbi5mYWlsdXJlQmVoYXZpb3IsXG4gICAgICB0aW1lb3V0OiBwbHVnaW4udGltZW91dCxcbiAgICB9O1xuXG4gICAgY29uc3QgZW5jb2RlZCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNsaW0pLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgbGFtYmRhTG9nLmRlYnVnKCdFTkNPREUnLCAnRW5jb2RlZCBwbHVnaW4gZGF0YScsIHsgbGVuZ3RoOiBlbmNvZGVkLmxlbmd0aCB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5iYXNlUmVzcG9uc2UsXG4gICAgICBTdGF0dXM6ICdTVUNDRVNTJyxcbiAgICAgIFJlYXNvbjogYFBsdWdpbiAnJHtwbHVnaW4ubmFtZX0nICh2JHtwbHVnaW4udmVyc2lvbn0pIHJldHJpZXZlZCBzdWNjZXNzZnVsbHlgLFxuICAgICAgRGF0YToge1xuICAgICAgICBSZXN1bHRWYWx1ZTogZW5jb2RlZCxcbiAgICAgIH0sXG4gICAgfSBhcyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgcmVhc29uID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCc7XG4gICAgbGFtYmRhTG9nLmVycm9yKCdFUlJPUicsICdIYW5kbGVyIGZhaWxlZCcsIHtcbiAgICAgIHJlYXNvbixcbiAgICAgIHN0YWNrOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgU3RhdHVzOiAnRkFJTEVEJyxcbiAgICAgIFJlYXNvbjogcmVhc29uLFxuICAgIH0gYXMgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlO1xuICB9IGZpbmFsbHkge1xuICAgIGxhbWJkYUxvZy5pbmZvKCdFTkQnLCAnQ3VzdG9tIHJlc291cmNlIGV4ZWN1dGlvbiBjb21wbGV0ZWQnKTtcbiAgfVxufTtcbiJdfQ==
@@ -59,7 +59,7 @@ export interface BuilderProps {
59
59
  /** Custom tags applied to all pipeline resources. */
60
60
  readonly tags?: Record<string, string>;
61
61
  /**
62
- * Plugins pre-resolved by `pipeline-manager synth` from the platform API,
62
+ * Plugins pre-resolved by `pipeline-manager pipeline synth` from the platform API,
63
63
  * keyed by `alias || name`. When present, `PluginLookup.plugin()` returns
64
64
  * the matching entry directly and skips the custom resource — so the
65
65
  * synthesized CFN template ships with the real CodeBuild image baked in.
@@ -109,10 +109,10 @@ export class PipelineBuilder extends Construct {
109
109
  const sourceBuilder = new SourceBuilder(this, this.config);
110
110
  const source = sourceBuilder.create(uniqueId);
111
111
  // Synth-plugin resolution:
112
- // 1. Pre-resolved by `pipeline-manager synth/deploy` from the platform
112
+ // 1. Pre-resolved by `pipeline-manager pipeline synth/deploy` from the platform
113
113
  // API → use it. Synth step runs on the real `cdk-synth` image with
114
114
  // real commands baked into the template.
115
- // 2. Otherwise → `bootstrap()`: cold-start `pipeline-manager synth`
115
+ // 2. Otherwise → `bootstrap()`: cold-start `pipeline-manager pipeline synth`
116
116
  // on the configured CODEBUILD_DEFAULT_IMAGE (default
117
117
  // pipeline-bootstrap:1.0). Used when the platform isn't reachable
118
118
  // at synth time (CLI logs a warning per missed plugin).
@@ -207,7 +207,7 @@ export class PipelineBuilder extends Construct {
207
207
  }
208
208
  // ── Tags ──
209
209
  // The first three are operations-essential and used by `pipeline-manager
210
- // audit-stacks` to diff CFN stacks against the pipeline_registry table.
210
+ // audit stacks` to diff CFN stacks against the pipeline_registry table.
211
211
  // `OrgId` is the canonical key for cost attribution (AWS Cost Explorer
212
212
  // groups by tag key/value when activated in Billing settings).
213
213
  Tags.of(this.pipeline).add('pipeline-builder', 'true');
@@ -385,4 +385,4 @@ export class PipelineBuilder extends Construct {
385
385
  };
386
386
  }
387
387
  }
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9waXBlbGluZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEtBQUssVUFBVSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEcsT0FBTyxLQUFLLE1BQU0sTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssT0FBTyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2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c291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMsIFBpcGVsaW5lVHlwZSwgVmFyaWFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgeyBDb2RlUGlwZWxpbmUsIHR5cGUgQ29kZUJ1aWxkT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFBpcGVsaW5lQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGlwZWxpbmUtY29uZmlndXJhdGlvbi5qcyc7XG5pbXBvcnQgeyBQbHVnaW5Mb29rdXAgfSBmcm9tICcuL3BsdWdpbi1sb29rdXAuanMnO1xuaW1wb3J0IHsgU291cmNlQnVpbGRlciB9IGZyb20gJy4vc291cmNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgU3RhZ2VCdWlsZGVyIH0gZnJvbSAnLi9zdGFnZS1idWlsZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VPcHRpb25zLCBTeW50aE9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWdpc3RyeUNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9jb25maWctdHlwZXMuanMnO1xuaW1wb3J0IHsgQXJ0aWZhY3RNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9hcnRpZmFjdC1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZS9pZC1nZW5lcmF0b3IuanMnO1xuaW1wb3J0IHtcbiAgYXNJbnQsXG4gIG1ldGFkYXRhRm9yQ29kZVBpcGVsaW5lLFxuICBuZXR3b3JrQ29uZmlnRnJvbU1ldGFkYXRhLFxuICBwYXJzZVBpcGVsaW5lVmFyaWFibGVzLFxuICByb2xlQ29uZmlnRnJvbU1ldGFkYXRhLFxuICBzZWN1cml0eUdyb3VwQ29uZmlnRnJvbU1ldGFkYXRhLFxufSBmcm9tICcuLi9jb3JlL21ldGFkYXRhLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQnVpbGREZWZhdWx0cyB9IGZyb20gJy4uL2NvcmUvbmV0d29yay10eXBlcy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlTmV0d29yaywgbmV0d29ya0NvbmZpZ0Zyb21FbnYgfSBmcm9tICcuLi9jb3JlL25ldHdvcmsuanMnO1xuaW1wb3J0IHsgY3JlYXRlQ29kZUJ1aWxkU3RlcCwgcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS1oZWxwZXJzLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhS2V5cywgVHJpZ2dlclR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTWV0YURhdGFUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJvbGVDb25maWcgfSBmcm9tICcuLi9jb3JlL3JvbGUtdHlwZXMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVJvbGUgfSBmcm9tICcuLi9jb3JlL3JvbGUuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVNlY3VyaXR5R3JvdXAgfSBmcm9tICcuLi9jb3JlL3NlY3VyaXR5LWdyb3VwLmpzJztcblxuY29uc3QgUElQRUxJTkVfRVZFTlRfTUFQOiBSZWNvcmQ8c3RyaW5nLCBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cz4gPSB7XG4gIEZBSUxFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgU1VDQ0VFREVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1VDQ0VFREVELFxuICBTVEFSVEVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1RBUlRFRCxcbiAgQ0FOQ0VMRUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9DQU5DRUxFRCxcbiAgU1VQRVJTRURFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX1NVUEVSU0VERUQsXG59O1xuXG5mdW5jdGlvbiBwYXJzZU5vdGlmaWNhdGlvbkV2ZW50cyh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gIHJldHVybiBbJ0ZBSUxFRCcsICdTVUNDRUVERUQnXTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBQaXBlbGluZUJ1aWxkZXIgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclByb3BzIHtcbiAgLyoqIFByb2plY3QgaWRlbnRpZmllciAod2lsbCBiZSBzYW5pdGl6ZWQgdG8gbG93ZXJjYXNlIGFscGhhbnVtZXJpYyB3aXRoIHVuZGVyc2NvcmVzKSAqL1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG5cbiAgLyoqIE9yZ2FuaXphdGlvbiBpZGVudGlmaWVyICh3aWxsIGJlIHNhbml0aXplZCB0byBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggdW5kZXJzY29yZXMpICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXBsb3kgZW52aXJvbm1lbnQgKGUuZy4gYHByb2R1Y3Rpb25gLCBgc3RhZ2luZ2ApLiBXaGVuIHNldCwgaXQgaXNcbiAgICogYXBwbGllZCBhcyBhbiBgRW52aXJvbm1lbnRgIHRhZyBvbiB0aGUgcGlwZWxpbmUgc28gdGhlIGV2ZW50cyBMYW1iZGEgY2FuXG4gICAqIGF0dHJpYnV0ZSBDb2RlUGlwZWxpbmUgc3RhdGUtY2hhbmdlIGV2ZW50cyB0byBhIHJlYWwgZGVwbG95bWVudCBmb3IgRE9SQVxuICAgKiBtZXRyaWNzLiBQdXJlbHkgYWRkaXRpdmUg4oCUIG9taXQgaXQgYW5kIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIFBpcGVsaW5lIGRhdGFiYXNlIHJlY29yZCBJRCDigJQgaW5qZWN0ZWQgYXMgUElQRUxJTkVfSUQgZW52IHZhciBmb3IgYXV0b25vbW91cyBzeW50aCAqL1xuICByZWFkb25seSBwaXBlbGluZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBjdXN0b20gcGlwZWxpbmUgbmFtZS4gRGVmYXVsdHMgdG86IHtvcmdhbml6YXRpb259LXtwcm9qZWN0fS1waXBlbGluZSAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIEdsb2JhbCBtZXRhZGF0YSBpbmhlcml0ZWQgYnkgYWxsIHBpcGVsaW5lIHN0ZXBzICovXG4gIHJlYWRvbmx5IGdsb2JhbD86IE1ldGFEYXRhVHlwZTtcblxuICAvKipcbiAgICogUGlwZWxpbmUtbGV2ZWwgdGVtcGxhdGUgdmFyaWFibGVzLCBleHBvc2VkIHRvIGB7eyBwaXBlbGluZS52YXJzLiogfX1gIGluXG4gICAqIHBpcGVsaW5lIGNvbmZpZ3MgYW5kIHBsdWdpbiBzcGVjcyAoc2VlIGBQbHVnaW5TcGVjLnJlcXVpcmVkVmFyc2ApLiBEZWNsYXJlZFxuICAgKiBoZXJlIHNvIHRoZSBgcGlwZWxpbmUudmFyc2AgdGVtcGxhdGUgc2NvcGUgaXMgdHlwZS1jaGVja2VkIGVuZC10by1lbmQuXG4gICAqL1xuICByZWFkb25seSB2YXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIENvZGVCdWlsZCBkZWZhdWx0cyBhcHBsaWVkIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9uc1xuICAgKiAoc3ludGgsIHNlbGYtbXV0YXRpb24sIGFzc2V0IHB1Ymxpc2hpbmcpIHZpYSBgY29kZUJ1aWxkRGVmYXVsdHNgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdHM/OiBDb2RlQnVpbGREZWZhdWx0cztcblxuICAvKipcbiAgICogT3B0aW9uYWwgSUFNIHJvbGUgZm9yIHRoZSBDb2RlUGlwZWxpbmUuXG4gICAqIFdoZW4gcHJvdmlkZWQsIHJlc29sdmVzIHRvIGEgQ0RLIElSb2xlIGFuZCBpcyBwYXNzZWQgdG8gdGhlIENvZGVQaXBlbGluZSBjb25zdHJ1Y3QuXG4gICAqIFdoZW4gb21pdHRlZCwgQ0RLIGF1dG8tY3JlYXRlcyBhIHJvbGUgd2l0aCB0aGUgY29ycmVjdCBjb2RlcGlwZWxpbmUuYW1hem9uYXdzLmNvbSBwcmluY2lwYWwuXG4gICAqL1xuICByZWFkb25seSByb2xlPzogUm9sZUNvbmZpZztcblxuICAvKiogU3ludGhlc2lzIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHNvdXJjZSBhbmQgcGx1Z2luIGRldGFpbHMgKi9cbiAgcmVhZG9ubHkgc3ludGg6IFN5bnRoT3B0aW9ucztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcGlwZWxpbmUgc3RhZ2VzLCBlYWNoIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgQ29kZUJ1aWxkIHN0ZXBzLlxuICAgKiBTdGFnZXMgYXJlIGFkZGVkIGFzIHdhdmVzIHRvIHRoZSBDb2RlUGlwZWxpbmUgYWZ0ZXIgdGhlIHN5bnRoIHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBzdGFnZXM/OiBTdGFnZU9wdGlvbnNbXTtcblxuICAvKiogT3B0aW9uYWwgY3Jvbi9yYXRlIGV4cHJlc3Npb24gZm9yIHNjaGVkdWxlZCBwaXBlbGluZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogc3RyaW5nO1xuXG4gIC8qKiBDdXN0b20gdGFncyBhcHBsaWVkIHRvIGFsbCBwaXBlbGluZSByZXNvdXJjZXMuICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLFxuICAgKiBrZXllZCBieSBgYWxpYXMgfHwgbmFtZWAuIFdoZW4gcHJlc2VudCwgYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAgcmV0dXJuc1xuICAgKiB0aGUgbWF0Y2hpbmcgZW50cnkgZGlyZWN0bHkgYW5kIHNraXBzIHRoZSBjdXN0b20gcmVzb3VyY2Ug4oCUIHNvIHRoZVxuICAgKiBzeW50aGVzaXplZCBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAqIFBvcHVsYXRlZCBieSB0aGUgQ0xJIGJlZm9yZSBpbnZva2luZyB0aGUgYm9pbGVycGxhdGUgYXBwOyBDREsgY29uc3VtZXJzXG4gICAqIHdobyBjb25zdHJ1Y3QgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIC8qKlxuICAgKiBQbGF0Zm9ybS1zb3VyY2VkIHJlZ2lzdHJ5IG92ZXJyaWRlcywgYXBwbGllZCBvdmVyIHRoZSBlbnYtbG9hZGVkIGByZWdpc3RyeWBcbiAgICogY29uZmlnIGF0IHN5bnRoIHN0YXJ0LiBwaXBlbGluZS1tYW5hZ2VyIHBvcHVsYXRlcyB0aGlzIGZyb20gdGhlIHBsYXRmb3JtIFVSTFxuICAgKiBpdCBkZXBsb3lzIGFnYWluc3Qgc28gdGhlIENvZGVCdWlsZCBpbWFnZSBVUklzIHVzZSBhIHB1bGwgaG9zdCBBV1MgQ29kZUJ1aWxkXG4gICAqIGNhbiByZXNvbHZlIChpbnN0ZWFkIG9mIHRoZSBpbi1jbHVzdGVyIGByZWdpc3RyeTo1MDAwYCBkZWZhdWx0KS4gQ0RLXG4gICAqIGNvbnN1bWVycyBjb25zdHJ1Y3RpbmcgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZWdpc3RyeT86IFBhcnRpYWw8UmVnaXN0cnlDb25maWc+O1xufVxuXG4vKipcbiAqIENESyBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGFuZCBjb25maWd1cmVzIGEgQ29kZVBpcGVsaW5lIGZvciBjb250aW51b3VzIGRlcGxveW1lbnQuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIE11bHRpLXNvdXJjZSBzdXBwb3J0IChTMywgR2l0SHViLCBDb2RlU3RhcilcbiAqIC0gUGx1Z2luLWJhc2VkIGJ1aWxkIHN0ZXBzXG4gKiAtIE1ldGFkYXRhLWRyaXZlbiBjb25maWd1cmF0aW9uXG4gKiAtIEF1dG9tYXRpYyB0YWdnaW5nXG4gKiAtIEF1dG9tYXRpYyBzYW5pdGl6YXRpb24gb2YgcHJvamVjdCBhbmQgb3JnYW5pemF0aW9uIG5hbWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG5ldyBQaXBlbGluZUJ1aWxkZXIodGhpcywgJ015UGlwZWxpbmUnLCB7XG4gKiAgIHByb2plY3Q6ICdteS1hcHAnLFxuICogICBvcmdhbml6YXRpb246ICdteS1vcmcnLFxuICogICBzeW50aDoge1xuICogICAgIHNvdXJjZToge1xuICogICAgICAgdHlwZTogJ2dpdGh1YicsXG4gKiAgICAgICBvcHRpb25zOiB7IHJlcG86ICdvd25lci9yZXBvJywgYnJhbmNoOiAnbWFpbicgfVxuICogICAgIH0sXG4gKiAgICAgcGx1Z2luOiB7IG5hbWU6ICdzeW50aCcgfVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVCdWlsZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBDb2RlUGlwZWxpbmU7XG4gIHB1YmxpYyByZWFkb25seSBjb25maWc6IFBpcGVsaW5lQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEFwcGx5IHBsYXRmb3JtLXNvdXJjZWQgcmVnaXN0cnkgb3ZlcnJpZGVzIEJFRk9SRSBhbnkgQ29uZmlnLmdldCgncmVnaXN0cnknKVxuICAgIC8vIChwbHVnaW4vZGVmYXVsdCBidWlsZC1pbWFnZSByZXNvbHV0aW9uIGJlbG93KSBzbyB0aGUgc3ludGggdXNlcyB0aGUgcHVsbFxuICAgIC8vIGhvc3QgdGhlIHBsYXRmb3JtIGRlcGxveXMgYWdhaW5zdCwgbm90IHRoZSBpbi1jbHVzdGVyIGVudiBkZWZhdWx0LiBUaGUgQ0xJXG4gICAgLy8gb25seSBzZXRzIHByb3BzLnJlZ2lzdHJ5IHdoZW4gSU1BR0VfUkVHSVNUUllfUFVMTF9IT1NUIGlzIHVuc2V0LCBzbyBhblxuICAgIC8vIGV4cGxpY2l0IG9wZXJhdG9yIHB1bGwgaG9zdCBpcyBuZXZlciBjbG9iYmVyZWQgKHNlZSBiYWtlUGxhdGZvcm1SZWdpc3RyeSkuXG4gICAgLy9cbiAgICAvLyBTY29wZWQgKyByZXN0b3JlZCBzbyB0aGUgb3ZlcnJpZGUgZG9lcyBOT1QgbGVhayBpbnRvIHRoZSBwcm9jZXNzLXdpZGVcbiAgICAvLyBDb25maWcgY2FjaGU6IGluIGEgbXVsdGktcGlwZWxpbmUgQ0RLIGFwcCwgcGlwZWxpbmUgQidzIHJlZ2lzdHJ5IG11c3Qgbm90XG4gICAgLy8gYmxlZWQgaW50byBwaXBlbGluZSBBJ3MgaW1hZ2UgcmVzb2x1dGlvbi4gQWxsIHJlZ2lzdHJ5IHJlYWRzIGhhcHBlblxuICAgIC8vIHN5bmNocm9ub3VzbHkgYmVsb3cgKGJ1aWxkLWltYWdlIHJlc29sdXRpb24pLCBzbyByZXN0b3JpbmcgYXQgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBrZWVwcyBzaW5nbGUtcGlwZWxpbmUgYmVoYXZpb3IgaWRlbnRpY2FsLlxuICAgIGNvbnN0IHJlc3RvcmVSZWdpc3RyeSA9IHByb3BzLnJlZ2lzdHJ5XG4gICAgICA/IENvbmZpZy5vdmVycmlkZVNjb3BlZCgncmVnaXN0cnknLCBwcm9wcy5yZWdpc3RyeSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgUGlwZWxpbmVDb25maWd1cmF0aW9uIGZvciBhbGwgYnVzaW5lc3MgbG9naWMgKHZhbGlkYXRpb24sIHNhbml0aXphdGlvbiwgbWV0YWRhdGEgbWVyZ2luZylcbiAgICAgIHRoaXMuY29uZmlnID0gbmV3IFBpcGVsaW5lQ29uZmlndXJhdGlvbihwcm9wcyk7XG5cbiAgICAgIGNvbnN0IHNlcnZlckNvbmZpZyA9IENvbmZpZy5nZXQoJ3NlcnZlcicpO1xuICAgICAgY29uc3QgYXdzQ29uZmlnID0gQ29uZmlnLmdldCgnYXdzJyk7XG4gICAgICAvLyBQYXNzIG9yZytwcm9qZWN0IHNvIGxvZyBncm91cCAvIElBTSByb2xlIG5hbWVzIGdldCBhIHN0YWJsZSBoYXNoXG4gICAgICAvLyBzdWZmaXggcGVyIHBpcGVsaW5lLiBQcmV2ZW50cyBgUmVzb3VyY2UgYWxyZWFkeSBleGlzdHNgIGNvbGxpc2lvbnNcbiAgICAgIC8vIGFjcm9zcyBzdGFja3MgZGVwbG95ZWQgdG8gdGhlIHNhbWUgQVdTIGFjY291bnQuXG4gICAgICBjb25zdCB1bmlxdWVJZCA9IG5ldyBVbmlxdWVJZCh7XG4gICAgICAgIG9yZ2FuaXphdGlvbjogdGhpcy5jb25maWcub3JnYW5pemF0aW9uLFxuICAgICAgICBwcm9qZWN0OiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwbHVnaW5Mb29rdXAgPSBuZXcgUGx1Z2luTG9va3VwKFxuICAgICAgICB0aGlzLFxuICAgICAgICB1bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLFxuICAgICAgICB7XG4gICAgICAgICAgb3JnYW5pemF0aW9uOiB0aGlzLmNvbmZpZy5vcmdhbml6YXRpb24sXG4gICAgICAgICAgcHJvamVjdDogdGhpcy5jb25maWcucHJvamVjdCxcbiAgICAgICAgICBwbGF0Zm9ybVVybDogc2VydmVyQ29uZmlnLnBsYXRmb3JtVXJsLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIG9yZ0lkOiBwcm9wcy5vcmdJZCxcbiAgICAgICAgICBydW50aW1lOiBhd3NDb25maWcubGFtYmRhLnJ1bnRpbWUsXG4gICAgICAgICAgdGltZW91dDogYXdzQ29uZmlnLmxhbWJkYS50aW1lb3V0LFxuICAgICAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IGF3c0NvbmZpZy5sYW1iZGEucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICAgICAgICByZXNvbHZlZFBsdWdpbnM6IHByb3BzLnJlc29sdmVkUGx1Z2lucyxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIENyZWF0ZSBzb3VyY2UgYW5kIGJ1aWxkIHN0ZXBcbiAgICAgIGNvbnN0IHNvdXJjZUJ1aWxkZXIgPSBuZXcgU291cmNlQnVpbGRlcih0aGlzLCB0aGlzLmNvbmZpZyk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VCdWlsZGVyLmNyZWF0ZSh1bmlxdWVJZCk7XG5cbiAgICAgIC8vIFN5bnRoLXBsdWdpbiByZXNvbHV0aW9uOlxuICAgICAgLy8gICAxLiBQcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgc3ludGgvZGVwbG95YCBmcm9tIHRoZSBwbGF0Zm9ybVxuICAgICAgLy8gICAgICBBUEkg4oaSIHVzZSBpdC4gU3ludGggc3RlcCBydW5zIG9uIHRoZSByZWFsIGBjZGstc3ludGhgIGltYWdlIHdpdGhcbiAgICAgIC8vICAgICAgcmVhbCBjb21tYW5kcyBiYWtlZCBpbnRvIHRoZSB0ZW1wbGF0ZS5cbiAgICAgIC8vICAgMi4gT3RoZXJ3aXNlIOKGkiBgYm9vdHN0cmFwKClgOiBjb2xkLXN0YXJ0IGBwaXBlbGluZS1tYW5hZ2VyIHN5bnRoYFxuICAgICAgLy8gICAgICBvbiB0aGUgY29uZmlndXJlZCBDT0RFQlVJTERfREVGQVVMVF9JTUFHRSAoZGVmYXVsdFxuICAgICAgLy8gICAgICBwaXBlbGluZS1ib290c3RyYXA6MS4wKS4gVXNlZCB3aGVuIHRoZSBwbGF0Zm9ybSBpc24ndCByZWFjaGFibGVcbiAgICAgIC8vICAgICAgYXQgc3ludGggdGltZSAoQ0xJIGxvZ3MgYSB3YXJuaW5nIHBlciBtaXNzZWQgcGx1Z2luKS5cbiAgICAgIC8vXG4gICAgICAvLyBwbHVnaW5Mb29rdXAucGx1Z2luKCkgcmVhZHMgYHJlc29sdmVkUGx1Z2luc2AgaW50ZXJuYWxseSBhbmQgcmV0dXJuc1xuICAgICAgLy8gdGhlIGNhY2hlZCBlbnRyeSB3aGVuIHByZXNlbnQg4oCUIHNvIGNhbGxpbmcgaXQgYWx3YXlzIHdpbnMgb3ZlclxuICAgICAgLy8gYm9vdHN0cmFwKCkgd2hlbiBwcmUtcmVzb2x1dGlvbiBzdWNjZWVkZWQuXG4gICAgICBjb25zdCBzeW50aENhY2hlS2V5ID1cbiAgICAgIHRoaXMuY29uZmlnLnBsdWdpbi5hbGlhcyB8fCBgJHt0aGlzLmNvbmZpZy5wbHVnaW4ubmFtZX0tYWxpYXNgO1xuICAgICAgY29uc3QgcGx1Z2luID0gcHJvcHMucmVzb2x2ZWRQbHVnaW5zPy5bc3ludGhDYWNoZUtleV1cbiAgICAgICAgPyBwbHVnaW5Mb29rdXAucGx1Z2luKHRoaXMuY29uZmlnLnBsdWdpbilcbiAgICAgICAgOiBwbHVnaW5Mb29rdXAuYm9vdHN0cmFwKCk7XG4gICAgICBjb25zdCBkZWZhdWx0Q29tcHV0ZVR5cGUgPSBhd3NDb25maWcuY29kZUJ1aWxkLmNvbXB1dGVUeXBlO1xuICAgICAgY29uc3QgYXJ0aWZhY3RNYW5hZ2VyID0gbmV3IEFydGlmYWN0TWFuYWdlcigpO1xuICAgICAgY29uc3Qgc3ludGhBbGlhcyA9IHRoaXMuY29uZmlnLnBsdWdpbi5hbGlhcyA/PyB0aGlzLmNvbmZpZy5wbHVnaW4ubmFtZTtcblxuICAgICAgLy8gU2NvcGUgZXhwb3NlZCB0byBwbHVnaW4tc3BlYyB0ZW1wbGF0ZXMgYXMgYHBpcGVsaW5lLipgLiBCdWlsdCBvbmNlXG4gICAgICAvLyBoZXJlIHNvIGJvdGggdGhlIHN5bnRoIHN0ZXAgYW5kIGV2ZXJ5IHN0YWdlIHN0ZXAgcmVzb2x2ZSBhZ2FpbnN0XG4gICAgICAvLyB0aGUgc2FtZSBzbmFwc2hvdC5cbiAgICAgIGNvbnN0IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBwaXBlbGluZToge1xuICAgICAgICAgIHByb2plY3ROYW1lOiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgICAgIHByb2plY3Q6IHRoaXMuY29uZmlnLnByb2plY3QsXG4gICAgICAgICAgb3JnSWQ6IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICBvcmdhbml6YXRpb246IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICBwaXBlbGluZU5hbWU6IHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgICBtZXRhZGF0YTogdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkLFxuICAgICAgICAgIHZhcnM6IHByb3BzLnZhcnMgPz8ge30sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzeW50aCA9IGNyZWF0ZUNvZGVCdWlsZFN0ZXAoe1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5zeW50aEN1c3RvbWl6YXRpb24sXG4gICAgICAgIGlkOiB1bmlxdWVJZC5nZW5lcmF0ZSgnY2RrOnN5bnRoJyksXG4gICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICBwbHVnaW4sXG4gICAgICAgIGlucHV0OiBzb3VyY2UsXG4gICAgICAgIG1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgIG5ldHdvcms6IHRoaXMuY29uZmlnLm5ldHdvcmssXG4gICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICBkZWZhdWx0Q29tcHV0ZVR5cGUsXG4gICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgc3RhZ2VOYW1lOiAnbm8tc3RhZ2UnLFxuICAgICAgICBzdGFnZUFsaWFzOiAnbm8tc3RhZ2UtYWxpYXMnLFxuICAgICAgICBwbHVnaW5BbGlhczogYCR7c3ludGhBbGlhc30tYWxpYXNgLFxuICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgIHBpcGVsaW5lU2NvcGUsXG4gICAgICB9KTtcblxuICAgICAgLy8gUmVzb2x2ZSBwaXBlbGluZS1sZXZlbCBkZWZhdWx0cyBpbnRvIGNvZGVCdWlsZERlZmF1bHRzXG4gICAgICAvLyBCdWlsZCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQgbmFtZSBmb3IgQ29kZUJ1aWxkIGVudiB2YXJzXG4gICAgICBjb25zdCBwbGF0Zm9ybVNlY3JldE5hbWUgPSBwcm9wcy5vcmdJZFxuICAgICAgICA/IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChwcm9wcy5vcmdJZCwgJ3BsYXRmb3JtJylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGNvZGVCdWlsZERlZmF1bHRzID0gdGhpcy5yZXNvbHZlRGVmYXVsdHModGhpcy5jb25maWcuZGVmYXVsdHMsIHVuaXF1ZUlkLCBwcm9wcy5waXBlbGluZUlkLCBwbGF0Zm9ybVNlY3JldE5hbWUsIHNlcnZlckNvbmZpZy5wbGF0Zm9ybVVybCwgcHJvcHMub3JnSWQpO1xuXG4gICAgICAvLyBSZXNvbHZlIElBTSByb2xlOiBleHBsaWNpdCBwcm9wIHdpbnMsIGVsc2UgYGlhbTpyb2xlYCBtZXRhZGF0YSwgZWxzZSBsZXRcbiAgICAgIC8vIENESyBhdXRvLWNyZWF0ZSB0aGUgcGlwZWxpbmUgcm9sZSAoY29kZXBpcGVsaW5lLmFtYXpvbmF3cy5jb20gcHJpbmNpcGFsKS5cbiAgICAgIGNvbnN0IHJvbGVDb25maWcgPSBwcm9wcy5yb2xlID8/IHJvbGVDb25maWdGcm9tTWV0YWRhdGEodGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkKTtcbiAgICAgIGlmIChyb2xlQ29uZmlnPy50eXBlID09PSAnY29kZUJ1aWxkRGVmYXVsdCcpIHtcbiAgICAgICAgY3JlYXRlTG9nZ2VyKCdwaXBlbGluZS1idWlsZGVyJykud2FybihcbiAgICAgICAgICAnY29kZUJ1aWxkRGVmYXVsdCByb2xlIHR5cGUgdXNlcyBjb2RlYnVpbGQuYW1hem9uYXdzLmNvbSB0cnVzdCBwcmluY2lwYWwg4oCUICcgK1xuICAgICAgICAndGhpcyBpcyBub3Qgc3VpdGFibGUgYXMgdGhlIHBpcGVsaW5lLWxldmVsIHJvbGUuIENvbnNpZGVyIHVzaW5nIHJvbGVBcm4vcm9sZU5hbWUgJyArXG4gICAgICAgICdvciBvbWl0dGluZyB0aGUgcm9sZSB0byBsZXQgQ0RLIGF1dG8tY3JlYXRlIG9uZSB3aXRoIGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByb2xlID0gcm9sZUNvbmZpZ1xuICAgICAgICA/IHJlc29sdmVSb2xlKHRoaXMsIHVuaXF1ZUlkLCByb2xlQ29uZmlnKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8g4pSA4pSAIEFydGlmYWN0IGJ1Y2tldCAoS01TIGVuY3J5cHRpb24gKyByZXRlbnRpb24pIOKUgOKUgFxuICAgICAgLy8gV2hlbiBgZW5jcnlwdGlvbi5rbXNLZXlBcm5gIGFuZC9vciBgb3BlcmF0aW9ucy5hcnRpZmFjdFJldGVudGlvbkRheXNgIGFyZVxuICAgICAgLy8gc2V0IHdlIGNyZWF0ZSBhIGN1c3RvbSBhcnRpZmFjdCBidWNrZXQgYW5kIHBhc3MgaXQgdG8gQ29kZVBpcGVsaW5lOyB0aGF0XG4gICAgICAvLyBpcyB0aGUgb25seSB3YXkgdG8gYXR0YWNoIGEgY3VzdG9tZXItbWFuYWdlZCBrZXkgKHRoZSBMMyBjb25zdHJ1Y3QgZXhwb3Nlc1xuICAgICAgLy8gYGFydGlmYWN0QnVja2V0YCwgbm90IGBlbmNyeXB0aW9uS2V5YCkuIEFic2VudCBib3RoIGtleXMsIENESyBhdXRvLWNyZWF0ZXNcbiAgICAgIC8vIHRoZSBidWNrZXQgYW5kIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gdGhpcy5idWlsZEFydGlmYWN0QnVja2V0KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBDb2RlUGlwZWxpbmUgY29uc3RydWN0XG4gICAgICB0aGlzLnBpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCB1bmlxdWVJZC5nZW5lcmF0ZSgncGlwZWxpbmVzOmNvZGVwaXBlbGluZScpLCB7XG4gICAgICAgIC4uLihjb2RlQnVpbGREZWZhdWx0cyAmJiB7IGNvZGVCdWlsZERlZmF1bHRzIH0pLFxuICAgICAgICAuLi4ocm9sZSAmJiB7IHJvbGUgfSksXG4gICAgICAgIC4uLihhcnRpZmFjdEJ1Y2tldCAmJiB7IGFydGlmYWN0QnVja2V0IH0pLFxuICAgICAgICBwaXBlbGluZVR5cGU6IFBpcGVsaW5lVHlwZS5WMixcbiAgICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUsXG4gICAgICAgIHN5bnRoLFxuICAgICAgICAuLi5tZXRhZGF0YUZvckNvZGVQaXBlbGluZSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChwcm9wcy5zdGFnZXMpIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VCdWlsZGVyID0gbmV3IFN0YWdlQnVpbGRlcih7XG4gICAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgICAgcGx1Z2luTG9va3VwLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIGdsb2JhbE1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgICAgZGVmYXVsdENvbXB1dGVUeXBlLFxuICAgICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgICAgcGlwZWxpbmVTY29wZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YWdlQnVpbGRlci5hZGRTdGFnZXModGhpcy5waXBlbGluZSwgcHJvcHMuc3RhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFRhZ3Mg4pSA4pSAXG4gICAgICAvLyBUaGUgZmlyc3QgdGhyZWUgYXJlIG9wZXJhdGlvbnMtZXNzZW50aWFsIGFuZCB1c2VkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyXG4gICAgICAvLyBhdWRpdC1zdGFja3NgIHRvIGRpZmYgQ0ZOIHN0YWNrcyBhZ2FpbnN0IHRoZSBwaXBlbGluZV9yZWdpc3RyeSB0YWJsZS5cbiAgICAgIC8vIGBPcmdJZGAgaXMgdGhlIGNhbm9uaWNhbCBrZXkgZm9yIGNvc3QgYXR0cmlidXRpb24gKEFXUyBDb3N0IEV4cGxvcmVyXG4gICAgICAvLyBncm91cHMgYnkgdGFnIGtleS92YWx1ZSB3aGVuIGFjdGl2YXRlZCBpbiBCaWxsaW5nIHNldHRpbmdzKS5cbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwaXBlbGluZS1idWlsZGVyJywgJ3RydWUnKTtcbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwcm9qZWN0JywgdGhpcy5jb25maWcucHJvamVjdCk7XG4gICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnb3JnYW5pemF0aW9uJywgdGhpcy5jb25maWcub3JnYW5pemF0aW9uKTtcbiAgICAgIGlmIChwcm9wcy5vcmdJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnT3JnSWQnLCBwcm9wcy5vcmdJZCk7XG4gICAgICB9XG4gICAgICAvLyBTdGFibGUgZXZlbnQtcmVwb3J0aW5nIGtleS4gQXBwbGllZCBhdCBzeW50aCAodGhlIHBpcGVsaW5lSWQgaXMga25vd25cbiAgICAgIC8vIGhlcmUpLCBzbyBpdCdzIHByZXNlbnQgZnJvbSBzdGFjayBjcmVhdGlvbiDigJQgdGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhpc1xuICAgICAgLy8gdGFnIHRvIGF0dHJpYnV0ZSBDb2RlUGlwZWxpbmUgc3RhdGUtY2hhbmdlIGV2ZW50cyB0byB0aGUgcGlwZWxpbmUgd2l0aG91dFxuICAgICAgLy8gZXZlciBoYW5kbGluZyB0aGUgQVJOL2FjY291bnQuIFNlZSBwYWNrYWdlcy9waXBlbGluZS1ldmVudHMuXG4gICAgICBpZiAocHJvcHMucGlwZWxpbmVJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnUElQRUxJTkVfRVZFTlRfSUQnLCBwcm9wcy5waXBlbGluZUlkKTtcbiAgICAgIH1cbiAgICAgIC8vIE9wdGlvbmFsIGRlcGxveS1lbnZpcm9ubWVudCBhdHRyaWJ1dGlvbiBmb3IgRE9SQSBtZXRyaWNzLiBNaXJyb3JzIHRoZVxuICAgICAgLy8gUElQRUxJTkVfRVZFTlRfSUQgdGFnOiBhcHBsaWVkIGF0IHN5bnRoIHNvIGl0J3MgcHJlc2VudCBmcm9tIHN0YWNrXG4gICAgICAvLyBjcmVhdGlvbiwgYW5kIHJlYWQgYnkgdGhlIGV2ZW50cyBMYW1iZGEgZnJvbSB0aGUgc2FtZSBMaXN0VGFncyBjYWxsLlxuICAgICAgLy8gQWJzZW50IHdoZW4gYGVudmlyb25tZW50YCBpcyB1bnNldCDigJQgbGVnYWN5IHBpcGVsaW5lcyByZXBvcnQgdW5jaGFuZ2VkLlxuICAgICAgaWYgKHByb3BzLmVudmlyb25tZW50KSB7XG4gICAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdFbnZpcm9ubWVudCcsIHByb3BzLmVudmlyb25tZW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy50YWdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLnRhZ3MpKSB7XG4gICAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgdGhlIGludGVybmFsIHBpcGVsaW5lIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIHByb3BlcnRpZXNcbiAgICAgIHRoaXMucGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuICAgICAgY29uc3QgY2RrUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLnBpcGVsaW5lO1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lLWxldmVsIFZhcmlhYmxlcyAoQ29kZVBpcGVsaW5lIFYyKSDilIDilIBcbiAgICAgIGZvciAoY29uc3QgdiBvZiBwYXJzZVBpcGVsaW5lVmFyaWFibGVzKG1ldGFbTWV0YWRhdGFLZXlzLlBJUEVMSU5FX1ZBUklBQkxFU10pKSB7XG4gICAgICAgIGNka1BpcGVsaW5lLmFkZFZhcmlhYmxlKG5ldyBWYXJpYWJsZSh7XG4gICAgICAgICAgdmFyaWFibGVOYW1lOiB2Lm5hbWUsXG4gICAgICAgICAgLi4uKHYuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgeyBkZWZhdWx0VmFsdWU6IHYuZGVmYXVsdFZhbHVlIH0pLFxuICAgICAgICAgIC4uLih2LmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZXNjcmlwdGlvbjogdi5kZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgU05TIE5vdGlmaWNhdGlvbnMg4pSA4pSAXG4gICAgICBjb25zdCBub3RpZmljYXRpb25Ub3BpY0FybiA9IG1ldGFbTWV0YWRhdGFLZXlzLk5PVElGSUNBVElPTl9UT1BJQ19BUk5dO1xuICAgICAgaWYgKHR5cGVvZiBub3RpZmljYXRpb25Ub3BpY0FybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdG9waWMgPSBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdOb3RpZmljYXRpb25Ub3BpYycsIG5vdGlmaWNhdGlvblRvcGljQXJuKTtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uRXZlbnRzID0gcGFyc2VOb3RpZmljYXRpb25FdmVudHMobWV0YVtNZXRhZGF0YUtleXMuTk9USUZJQ0FUSU9OX0VWRU5UU10pXG4gICAgICAgICAgLm1hcChlID0+IFBJUEVMSU5FX0VWRU5UX01BUFtlLnRvVXBwZXJDYXNlKCldKVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgIGlmIChub3RpZmljYXRpb25FdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNka1BpcGVsaW5lLm5vdGlmeU9uKCdQaXBlbGluZU5vdGlmaWNhdGlvbicsIHRvcGljLCB7IGV2ZW50czogbm90aWZpY2F0aW9uRXZlbnRzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOKUgOKUgCBTY2hlZHVsZWQgRXhlY3V0aW9uIOKUgOKUgFxuICAgICAgaWYgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zPy50cmlnZ2VyID09PSBUcmlnZ2VyVHlwZS5TQ0hFRFVMRSB8fCBwcm9wcy5zY2hlZHVsZSkge1xuICAgICAgICBjb25zdCBleHByID0gcHJvcHMuc2NoZWR1bGUgfHwgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zIGFzIHsgc2NoZWR1bGU/OiBzdHJpbmcgfSk/LnNjaGVkdWxlIHx8ICdyYXRlKDEgZGF5KSc7XG4gICAgICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnU2NoZWR1bGVSdWxlJywge1xuICAgICAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbihleHByKSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKGNka1BpcGVsaW5lKV0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgRXhlY3V0aW9uIEV2ZW50IFRyYWNraW5nIChmb3J3YXJkIHBpcGVsaW5lIHN0YXRlIGNoYW5nZXMgdG8gU05TKSDilIDilIBcbiAgICAgIGlmIChtZXRhW01ldGFkYXRhS2V5cy5FTkFCTEVfRVhFQ1VUSU9OX0VWRU5UU10gJiYgdHlwZW9mIG5vdGlmaWNhdGlvblRvcGljQXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0V4ZWN1dGlvbkV2ZW50UnVsZScsIHtcbiAgICAgICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgICAgIHNvdXJjZTogWydhd3MuY29kZXBpcGVsaW5lJ10sXG4gICAgICAgICAgICBkZXRhaWxUeXBlOiBbJ0NvZGVQaXBlbGluZSBQaXBlbGluZSBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJ10sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtjZGtQaXBlbGluZS5waXBlbGluZUFybl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuU25zVG9waWMoXG4gICAgICAgICAgICBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdFeGVjdXRpb25FdmVudFRvcGljJywgbm90aWZpY2F0aW9uVG9waWNBcm4pLFxuICAgICAgICAgICldLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lIE1ldHJpY3MgJiBBbGFybXMg4pSA4pSAXG4gICAgICBjb25zdCBlbmFibGVNZXRyaWNzID0gdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkW01ldGFkYXRhS2V5cy5FTkFCTEVfTUVUUklDU107XG4gICAgICBpZiAoZW5hYmxlTWV0cmljcykge1xuICAgICAgICBuZXcgY2xvdWR3YXRjaC5BbGFybSh0aGlzLCAnUGlwZWxpbmVGYWlsdXJlQWxhcm0nLCB7XG4gICAgICAgICAgbWV0cmljOiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiAnQVdTL0NvZGVQaXBlbGluZScsXG4gICAgICAgICAgICBtZXRyaWNOYW1lOiAnRmFpbGVkUGlwZWxpbmVFeGVjdXRpb25Db3VudCcsXG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7IFBpcGVsaW5lTmFtZTogdGhpcy5jb25maWcucGlwZWxpbmVOYW1lIH0sXG4gICAgICAgICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBgUGlwZWxpbmUgJHt0aGlzLmNvbmZpZy5waXBlbGluZU5hbWV9IGV4ZWN1dGlvbiBmYWlsZWRgLFxuICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBjbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJldmVydCB0aGUgcGVyLWJ1aWxkZXIgcmVnaXN0cnkgb3ZlcnJpZGUgc28gaXQgbmV2ZXIgbGVha3MgaW50byB0aGVcbiAgICAgIC8vIHByb2Nlc3Mtd2lkZSBDb25maWcgY2FjaGUgKHNlZSB0aGUgb3ZlcnJpZGUgYXQgdGhlIHRvcCBvZiB0aGUgY29uc3RydWN0b3IpLlxuICAgICAgcmVzdG9yZVJlZ2lzdHJ5Py4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjdXN0b20gYXJ0aWZhY3QgYnVja2V0IHdoZW4gYGVuY3J5cHRpb24ua21zS2V5QXJuYCBhbmQvb3JcbiAgICogYG9wZXJhdGlvbnMuYXJ0aWZhY3RSZXRlbnRpb25EYXlzYCBhcmUgc2V0LiBSZXR1cm5zIHVuZGVmaW5lZCBvdGhlcndpc2Ugc29cbiAgICogQ0RLIGF1dG8tY3JlYXRlcyB0aGUgZGVmYXVsdCBhcnRpZmFjdCBidWNrZXQgKHVuY2hhbmdlZCBiZWhhdmlvcikuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQXJ0aWZhY3RCdWNrZXQoKTogczMuSUJ1Y2tldCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcbiAgICBjb25zdCBrbXNLZXlBcm4gPSB0eXBlb2YgbWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dID09PSAnc3RyaW5nJ1xuICAgICAgPyAobWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dIGFzIHN0cmluZylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJldGVudGlvbkRheXMgPSBhc0ludChtZXRhW01ldGFkYXRhS2V5cy5BUlRJRkFDVF9SRVRFTlRJT05fREFZU10pO1xuXG4gICAgaWYgKCFrbXNLZXlBcm4gJiYgcmV0ZW50aW9uRGF5cyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGttc0tleUFyblxuICAgICAgPyBrbXMuS2V5LmZyb21LZXlBcm4odGhpcywgJ0FydGlmYWN0S2V5Jywga21zS2V5QXJuKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBidWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsICdBcnRpZmFjdEJ1Y2tldCcsIHtcbiAgICAgIGVuY3J5cHRpb246IGVuY3J5cHRpb25LZXkgPyBzMy5CdWNrZXRFbmNyeXB0aW9uLktNUyA6IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIC4uLihlbmNyeXB0aW9uS2V5ICYmIHsgZW5jcnlwdGlvbktleSB9KSxcbiAgICAgIC4uLihyZXRlbnRpb25EYXlzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBsaWZlY3ljbGVSdWxlczogW3sgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cyhyZXRlbnRpb25EYXlzKSB9XSxcbiAgICAgIH0pLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKGJ1Y2tldCkuYWRkKCdwaXBlbGluZScsIHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSk7XG4gICAgcmV0dXJuIGJ1Y2tldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBDb2RlQnVpbGREZWZhdWx0cyBpbnRvIHRoZSBzaGFwZSBleHBlY3RlZCBieSBDREsncyBjb2RlQnVpbGREZWZhdWx0cy5cbiAgICogQ29tYmluZXMgbmV0d29yayBjb25maWcsIHNlY3VyaXR5IGdyb3VwcywgYW5kIHBpcGVsaW5lLWxldmVsIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiAoUElQRUxJTkVfSUQsIEVYRUNVVElPTl9JRCwgUExBVEZPUk1fQkFTRV9VUkwpIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVEZWZhdWx0cyhcbiAgICBkZWZhdWx0czogQ29kZUJ1aWxkRGVmYXVsdHMgfCB1bmRlZmluZWQsXG4gICAgaWQ6IFVuaXF1ZUlkLFxuICAgIHBpcGVsaW5lSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVNlY3JldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVVybDogc3RyaW5nLFxuICAgIG9yZ0lkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IENvZGVCdWlsZE9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIC8vIFBlci1waXBlbGluZSBuZXR3b3JrIGNvbmZpZyB3aW5zOyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFuIGVudi1kcml2ZW5cbiAgICAvLyBnbG9iYWwgVlBDIChpbnRlcm5hbCAvIGluc2lkZS1BV1Mtb25seSBtb2RlKSBzbyBldmVyeSBwaXBlbGluZSdzXG4gICAgLy8gQ29kZUJ1aWxkIHJ1bnMgaW4gdGhlIFZQQyBhbmQgY2FuIHJlYWNoIHRoZSBwcml2YXRlIGdhdGV3YXkuIFVuc2V0IGluXG4gICAgLy8gcHVibGljIGRlcGxveXMg4oaSIENvZGVCdWlsZCBzdGF5cyBpbiB0aGUgQVdTLW1hbmFnZWQgbmV0d29yay5cbiAgICAvLyBQcmVjZWRlbmNlOiBleHBsaWNpdCBwcm9wID4gYGVjMjpuZXR3b3JrYCBtZXRhZGF0YSA+IGVudi1kcml2ZW4gZ2xvYmFsIFZQQy5cbiAgICBjb25zdCBuZXR3b3JrID0gZGVmYXVsdHM/Lm5ldHdvcmsgPz8gbmV0d29ya0NvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpID8/IG5ldHdvcmtDb25maWdGcm9tRW52KCk7XG4gICAgY29uc3QgbmV0d29ya1Byb3BzID0gbmV0d29ya1xuICAgICAgPyByZXNvbHZlTmV0d29yayh0aGlzLCBpZCwgbmV0d29yaylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gU2FtZSBwcmVjZWRlbmNlIGZvciBzdGFuZGFsb25lIHNlY3VyaXR5IGdyb3VwcyAocHJvcCA+IGBlYzI6c2VjdXJpdHlncm91cGAgbWV0YWRhdGEpLlxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBDb25maWcgPSBkZWZhdWx0cz8uc2VjdXJpdHlHcm91cHMgPz8gc2VjdXJpdHlHcm91cENvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpO1xuICAgIGNvbnN0IHN0YW5kYWxvbmVTZWN1cml0eUdyb3VwcyA9IHNlY3VyaXR5R3JvdXBDb25maWdcbiAgICAgID8gcmVzb2x2ZVNlY3VyaXR5R3JvdXAodGhpcywgaWQsIHNlY3VyaXR5R3JvdXBDb25maWcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFBpcGVsaW5lLWxldmVsIGVudiB2YXJzIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnNcbiAgICAvLyBOb3RlOiAje2NvZGVwaXBlbGluZS4qfSByZXNvbHZlZCB2YXJpYWJsZXMgbXVzdCBnbyB0aHJvdWdoIENvZGVCdWlsZFN0ZXAuZW52XG4gICAgLy8gKGFjdGlvbi1sZXZlbCksIG5vdCBidWlsZEVudmlyb25tZW50LmVudmlyb25tZW50VmFyaWFibGVzIChwcm9qZWN0LWxldmVsKS5cbiAgICBjb25zdCBwaXBlbGluZUVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiA9IHtcbiAgICAgIFBMQVRGT1JNX0JBU0VfVVJMOiB7IHZhbHVlOiBwbGF0Zm9ybVVybCB9LFxuICAgICAgLi4uKHBpcGVsaW5lSWQgJiYgeyBQSVBFTElORV9JRDogeyB2YWx1ZTogcGlwZWxpbmVJZCB9IH0pLFxuICAgICAgLi4uKHBsYXRmb3JtU2VjcmV0TmFtZSAmJiB7IFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiB7IHZhbHVlOiBwbGF0Zm9ybVNlY3JldE5hbWUgfSB9KSxcbiAgICAgIC8vIFByb3BhZ2F0ZSBUTFMgdmVyaWZpY2F0aW9uIHNldHRpbmcgc28gYWxsIENvZGVCdWlsZCBzdGVwcyBjYW4gcmVhY2hcbiAgICAgIC8vIHRoZSBwbGF0Zm9ybSBBUEkgd2hlbiB1c2luZyBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXNcbiAgICAgIC4uLihwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCcgJiYge1xuICAgICAgICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEOiB7IHZhbHVlOiAnMCcgfSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IFtcbiAgICAgIC4uLihuZXR3b3JrUHJvcHM/LnNlY3VyaXR5R3JvdXBzID8/IFtdKSxcbiAgICAgIC4uLihzdGFuZGFsb25lU2VjdXJpdHlHcm91cHMgPz8gW10pLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKG5ldHdvcmtQcm9wcyAmJiB7IHZwYzogbmV0d29ya1Byb3BzLnZwYywgc3VibmV0U2VsZWN0aW9uOiBuZXR3b3JrUHJvcHMuc3VibmV0U2VsZWN0aW9uIH0pLFxuICAgICAgLi4uKHNlY3VyaXR5R3JvdXBzLmxlbmd0aCA+IDAgJiYgeyBzZWN1cml0eUdyb3VwcyB9KSxcbiAgICAgIC8vIGJ1aWxkSW1hZ2UgYXQgdGhpcyBsZXZlbCByZWFjaGVzIENESyBQaXBlbGluZXMnIGludGVybmFsbHktd3JhcHBlZFxuICAgICAgLy8gU2hlbGxTdGVwIENvZGVCdWlsZCBhY3Rpb24sIHdoaWNoIG90aGVyd2lzZSBoYXJkY29kZXNcbiAgICAgIC8vIENESydzIGRlZmF1bHQgY3VyYXRlZCBzdGFuZGFyZCBpbWFnZS4gU2V0dGluZyBpdCBoZXJlIGNsb3NlcyB0aGUgZ2FwXG4gICAgICAvLyBleHBvc2VkIGluIHRoZSBzYW1lIGVudiB2YXIgKGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWApIHRoYXQgdGhlXG4gICAgICAvLyBDb2RlQnVpbGRTdGVwIHBhdGggYWxyZWFkeSBob25vcnMgdmlhIHJlc29sdmVQbHVnaW5JbWFnZSgpJ3NcbiAgICAgIC8vIGZhbGxiYWNrLiBQZXItc3RlcCBgYnVpbGRJbWFnZWAgb24gYSBDb2RlQnVpbGRTdGVwIHN0aWxsIHdpbnMuXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZSh0aGlzLCBvcmdJZCksXG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiBwaXBlbGluZUVudlZhcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9waXBlbGluZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEtBQUssVUFBVSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEcsT0FBTyxLQUFLLE1BQU0sTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssT0FBTyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUNMLEtBQUssRUFDTCx1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsK0JBQStCLEdBQ2hDLE1BQU0sNkJBQTZCLENBQUM7QUFFckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVGLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWpFLE1BQU0sa0JBQWtCLEdBQStDO0lBQ3JFLE1BQU0sRUFBRSwwQkFBMEIsQ0FBQyx5QkFBeUI7SUFDNUQsU0FBUyxFQUFFLDBCQUEwQixDQUFDLDRCQUE0QjtJQUNsRSxPQUFPLEVBQUUsMEJBQTBCLENBQUMsMEJBQTBCO0lBQzlELFFBQVEsRUFBRSwwQkFBMEIsQ0FBQywyQkFBMkI7SUFDaEUsVUFBVSxFQUFFLDBCQUEwQixDQUFDLDZCQUE2QjtDQUNyRSxDQUFDO0FBRUYsU0FBUyx1QkFBdUIsQ0FBQyxLQUFjO0lBQzdDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN2QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBdUZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxTQUFTO0lBQzVCLFFBQVEsQ0FBZTtJQUN2QixNQUFNLENBQXdCO0lBRTlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBbUI7UUFDM0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiw4RUFBOEU7UUFDOUUsMkVBQTJFO1FBQzNFLDZFQUE2RTtRQUM3RSx5RUFBeUU7UUFDekUsNkVBQTZFO1FBQzdFLEVBQUU7UUFDRix3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLHNFQUFzRTtRQUN0RSwyRUFBMkU7UUFDM0UsNERBQTREO1FBQzVELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxRQUFRO1lBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ25ELENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCxJQUFJLENBQUM7WUFDSCxnR0FBZ0c7WUFDaEcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRS9DLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxtRUFBbUU7WUFDbkUscUVBQXFFO1lBQ3JFLGtEQUFrRDtZQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQztnQkFDNUIsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtnQkFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTzthQUM3QixDQUFDLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FDbkMsSUFBSSxFQUNKLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQ2xDO2dCQUNFLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7Z0JBQ3RDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQzVCLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztnQkFDckMsUUFBUTtnQkFDUixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQ2pDLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQ2pDLDRCQUE0QixFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsNEJBQTRCO2dCQUMzRSxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7YUFDdkMsQ0FDRixDQUFDO1lBRUYsK0JBQStCO1lBQy9CLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU5QywyQkFBMkI7WUFDM0Isa0ZBQWtGO1lBQ2xGLHdFQUF3RTtZQUN4RSw4Q0FBOEM7WUFDOUMsK0VBQStFO1lBQy9FLDBEQUEwRDtZQUMxRCx1RUFBdUU7WUFDdkUsNkRBQTZEO1lBQzdELEVBQUU7WUFDRix1RUFBdUU7WUFDdkUsaUVBQWlFO1lBQ2pFLDZDQUE2QztZQUM3QyxNQUFNLGFBQWEsR0FDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUM7WUFDL0QsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDLGFBQWEsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0IsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztZQUMzRCxNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFFdkUscUVBQXFFO1lBQ3JFLG1FQUFtRTtZQUNuRSxxQkFBcUI7WUFDckIsTUFBTSxhQUFhLEdBQTRCO2dCQUM3QyxRQUFRLEVBQUU7b0JBQ1IsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztvQkFDaEMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztvQkFDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtvQkFDL0IsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtvQkFDdEMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtvQkFDdEMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU07b0JBQ3JDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUU7aUJBQ3ZCO2FBQ0YsQ0FBQztZQUVGLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDO2dCQUNoQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCO2dCQUNqQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7Z0JBQ2xDLFFBQVE7Z0JBQ1IsTUFBTTtnQkFDTixLQUFLLEVBQUUsTUFBTTtnQkFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTTtnQkFDckMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztnQkFDNUIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsa0JBQWtCO2dCQUNsQixlQUFlO2dCQUNmLFNBQVMsRUFBRSxVQUFVO2dCQUNyQixVQUFVLEVBQUUsZ0JBQWdCO2dCQUM1QixXQUFXLEVBQUUsR0FBRyxVQUFVLFFBQVE7Z0JBQ2xDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsYUFBYTthQUNkLENBQUMsQ0FBQztZQUVILHlEQUF5RDtZQUN6RCxnRUFBZ0U7WUFDaEUsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsS0FBSztnQkFDcEMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7Z0JBQ25ELENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFZCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFNUosMkVBQTJFO1lBQzNFLDRFQUE0RTtZQUM1RSxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JGLElBQUksVUFBVSxFQUFFLElBQUksS0FBSyxrQkFBa0IsRUFBRSxDQUFDO2dCQUM1QyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQ25DLDRFQUE0RTtvQkFDOUUsbUZBQW1GO29CQUNuRixrRkFBa0YsQ0FDakYsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxVQUFVO2dCQUNyQixDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDO2dCQUN6QyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRWQscURBQXFEO1lBQ3JELDRFQUE0RTtZQUM1RSwyRUFBMkU7WUFDM0UsNkVBQTZFO1lBQzdFLDZFQUE2RTtZQUM3RSx3Q0FBd0M7WUFDeEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFFbEQsZ0NBQWdDO1lBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsRUFBRTtnQkFDbEYsR0FBRyxDQUFDLGlCQUFpQixJQUFJLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztnQkFDL0MsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNyQixHQUFHLENBQUMsY0FBYyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUM7Z0JBQ3pDLFlBQVksRUFBRSxZQUFZLENBQUMsRUFBRTtnQkFDN0IsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtnQkFDdEMsS0FBSztnQkFDTCxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzthQUN4RCxDQUFDLENBQUM7WUFFSCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUM7b0JBQ3BDLEtBQUssRUFBRSxJQUFJO29CQUNYLFlBQVk7b0JBQ1osUUFBUTtvQkFDUixjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDM0Msa0JBQWtCO29CQUNsQixlQUFlO29CQUNmLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztvQkFDbEIsYUFBYTtpQkFDZCxDQUFDLENBQUM7Z0JBQ0gsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBRUQsYUFBYTtZQUNiLHlFQUF5RTtZQUN6RSx3RUFBd0U7WUFDeEUsdUVBQXVFO1lBQ3ZFLCtEQUErRDtZQUMvRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyRSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsQ0FBQztZQUNELHdFQUF3RTtZQUN4RSw0RUFBNEU7WUFDNUUsNEVBQTRFO1lBQzVFLCtEQUErRDtZQUMvRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRSxDQUFDO1lBQ0Qsd0VBQXdFO1lBQ3hFLHFFQUFxRTtZQUNyRSx1RUFBdUU7WUFDdkUsMEVBQTBFO1lBQzFFLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3RELElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDO1lBRUQsOERBQThEO1lBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBRXpDLG1EQUFtRDtZQUNuRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlFLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxRQUFRLENBQUM7b0JBQ25DLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSTtvQkFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDckUsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDbkUsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1lBRUQsMEJBQTBCO1lBQzFCLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksT0FBTyxvQkFBb0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3RGLE1BQU0sa0JBQWtCLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO3FCQUN2RixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztxQkFDN0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RixDQUFDO1lBQ0gsQ0FBQztZQUVELDRCQUE0QjtZQUM1QixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEtBQUssV0FBVyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25GLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBaUMsRUFBRSxRQUFRLElBQUksYUFBYSxDQUFDO2dCQUNoSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtvQkFDcEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDMUMsT0FBTyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUNqRCxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQseUVBQXlFO1lBQ3pFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLE9BQU8sb0JBQW9CLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzNGLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7b0JBQzFDLFlBQVksRUFBRTt3QkFDWixNQUFNLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDNUIsVUFBVSxFQUFFLENBQUMsOENBQThDLENBQUM7d0JBQzVELFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7cUJBQ3JDO29CQUNELE9BQU8sRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FDNUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixDQUFDLENBQzFFLENBQUM7aUJBQ0gsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELGtDQUFrQztZQUNsQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQy9FLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7b0JBQ2pELE1BQU0sRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7d0JBQzVCLFNBQVMsRUFBRSxrQkFBa0I7d0JBQzdCLFVBQVUsRUFBRSw4QkFBOEI7d0JBQzFDLGFBQWEsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTt3QkFDekQsU0FBUyxFQUFFLEtBQUs7d0JBQ2hCLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztxQkFDNUIsQ0FBQztvQkFDRixTQUFTLEVBQUUsQ0FBQztvQkFDWixpQkFBaUIsRUFBRSxDQUFDO29CQUNwQixnQkFBZ0IsRUFBRSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxtQkFBbUI7b0JBQ3pFLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxrQ0FBa0M7b0JBQ3BGLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhO2lCQUM1RCxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztnQkFBUyxDQUFDO1lBQ1Qsc0VBQXNFO1lBQ3RFLDhFQUE4RTtZQUM5RSxlQUFlLEVBQUUsRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG1CQUFtQjtRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFFBQVE7WUFDbEUsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFZO1lBQzVDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7UUFFeEUsSUFBSSxDQUFDLFNBQVMsSUFBSSxhQUFhLEtBQUssU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRWhFLE1BQU0sYUFBYSxHQUFHLFNBQVM7WUFDN0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ25ELFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVO1lBQ3BGLEdBQUcsQ0FBQyxhQUFhLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUN2QyxHQUFHLENBQUMsYUFBYSxLQUFLLFNBQVMsSUFBSTtnQkFDakMsY0FBYyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2FBQy9ELENBQUM7WUFDRixVQUFVLEVBQUUsSUFBSTtZQUNoQixpQkFBaUIsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsU0FBUztZQUNqRCxhQUFhLEVBQUUsYUFBYSxDQUFDLE9BQU87WUFDcEMsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGVBQWUsQ0FDckIsUUFBdUMsRUFDdkMsRUFBWSxFQUNaLFVBQThCLEVBQzlCLGtCQUFzQyxFQUN0QyxXQUFtQixFQUNuQixLQUF5QjtRQUV6Qix5RUFBeUU7UUFDekUsbUVBQW1FO1FBQ25FLHdFQUF3RTtRQUN4RSwrREFBK0Q7UUFDL0QsOEVBQThFO1FBQzlFLE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxPQUFPLElBQUkseUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUN0SCxNQUFNLFlBQVksR0FBRyxPQUFPO1lBQzFCLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUM7WUFDbkMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLHdGQUF3RjtRQUN4RixNQUFNLG1CQUFtQixHQUFHLFFBQVEsRUFBRSxjQUFjLElBQUksK0JBQStCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckgsTUFBTSx3QkFBd0IsR0FBRyxtQkFBbUI7WUFDbEQsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsbUJBQW1CLENBQUM7WUFDckQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLDZEQUE2RDtRQUM3RCwrRUFBK0U7UUFDL0UsNkVBQTZFO1FBQzdFLE1BQU0sZUFBZSxHQUFzQztZQUN6RCxpQkFBaUIsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7WUFDekMsR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3pELEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztZQUNsRixzRUFBc0U7WUFDdEUsdURBQXVEO1lBQ3ZELEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixLQUFLLEdBQUcsSUFBSTtnQkFDdEQsNEJBQTRCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2FBQzdDLENBQUM7U0FDSCxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxDQUFDLFlBQVksRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxFQUFFLENBQUM7U0FDcEMsQ0FBQztRQUVGLE9BQU87WUFDTCxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM3RixHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUNwRCxxRUFBcUU7WUFDckUsd0RBQXdEO1lBQ3hELHVFQUF1RTtZQUN2RSxtRUFBbUU7WUFDbkUsK0RBQStEO1lBQy9ELGlFQUFpRTtZQUNqRSxnQkFBZ0IsRUFBRTtnQkFDaEIsVUFBVSxFQUFFLHdCQUF3QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0JBQ2pELG9CQUFvQixFQUFFLGVBQWU7YUFDdEM7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMsIFBpcGVsaW5lVHlwZSwgVmFyaWFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgeyBDb2RlUGlwZWxpbmUsIHR5cGUgQ29kZUJ1aWxkT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFBpcGVsaW5lQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGlwZWxpbmUtY29uZmlndXJhdGlvbi5qcyc7XG5pbXBvcnQgeyBQbHVnaW5Mb29rdXAgfSBmcm9tICcuL3BsdWdpbi1sb29rdXAuanMnO1xuaW1wb3J0IHsgU291cmNlQnVpbGRlciB9IGZyb20gJy4vc291cmNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgU3RhZ2VCdWlsZGVyIH0gZnJvbSAnLi9zdGFnZS1idWlsZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VPcHRpb25zLCBTeW50aE9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWdpc3RyeUNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9jb25maWctdHlwZXMuanMnO1xuaW1wb3J0IHsgQXJ0aWZhY3RNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9hcnRpZmFjdC1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZS9pZC1nZW5lcmF0b3IuanMnO1xuaW1wb3J0IHtcbiAgYXNJbnQsXG4gIG1ldGFkYXRhRm9yQ29kZVBpcGVsaW5lLFxuICBuZXR3b3JrQ29uZmlnRnJvbU1ldGFkYXRhLFxuICBwYXJzZVBpcGVsaW5lVmFyaWFibGVzLFxuICByb2xlQ29uZmlnRnJvbU1ldGFkYXRhLFxuICBzZWN1cml0eUdyb3VwQ29uZmlnRnJvbU1ldGFkYXRhLFxufSBmcm9tICcuLi9jb3JlL21ldGFkYXRhLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQnVpbGREZWZhdWx0cyB9IGZyb20gJy4uL2NvcmUvbmV0d29yay10eXBlcy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlTmV0d29yaywgbmV0d29ya0NvbmZpZ0Zyb21FbnYgfSBmcm9tICcuLi9jb3JlL25ldHdvcmsuanMnO1xuaW1wb3J0IHsgY3JlYXRlQ29kZUJ1aWxkU3RlcCwgcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS1oZWxwZXJzLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhS2V5cywgVHJpZ2dlclR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTWV0YURhdGFUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJvbGVDb25maWcgfSBmcm9tICcuLi9jb3JlL3JvbGUtdHlwZXMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVJvbGUgfSBmcm9tICcuLi9jb3JlL3JvbGUuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVNlY3VyaXR5R3JvdXAgfSBmcm9tICcuLi9jb3JlL3NlY3VyaXR5LWdyb3VwLmpzJztcblxuY29uc3QgUElQRUxJTkVfRVZFTlRfTUFQOiBSZWNvcmQ8c3RyaW5nLCBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cz4gPSB7XG4gIEZBSUxFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgU1VDQ0VFREVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1VDQ0VFREVELFxuICBTVEFSVEVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1RBUlRFRCxcbiAgQ0FOQ0VMRUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9DQU5DRUxFRCxcbiAgU1VQRVJTRURFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX1NVUEVSU0VERUQsXG59O1xuXG5mdW5jdGlvbiBwYXJzZU5vdGlmaWNhdGlvbkV2ZW50cyh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gIHJldHVybiBbJ0ZBSUxFRCcsICdTVUNDRUVERUQnXTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBQaXBlbGluZUJ1aWxkZXIgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclByb3BzIHtcbiAgLyoqIFByb2plY3QgaWRlbnRpZmllciAod2lsbCBiZSBzYW5pdGl6ZWQgdG8gbG93ZXJjYXNlIGFscGhhbnVtZXJpYyB3aXRoIHVuZGVyc2NvcmVzKSAqL1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG5cbiAgLyoqIE9yZ2FuaXphdGlvbiBpZGVudGlmaWVyICh3aWxsIGJlIHNhbml0aXplZCB0byBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggdW5kZXJzY29yZXMpICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXBsb3kgZW52aXJvbm1lbnQgKGUuZy4gYHByb2R1Y3Rpb25gLCBgc3RhZ2luZ2ApLiBXaGVuIHNldCwgaXQgaXNcbiAgICogYXBwbGllZCBhcyBhbiBgRW52aXJvbm1lbnRgIHRhZyBvbiB0aGUgcGlwZWxpbmUgc28gdGhlIGV2ZW50cyBMYW1iZGEgY2FuXG4gICAqIGF0dHJpYnV0ZSBDb2RlUGlwZWxpbmUgc3RhdGUtY2hhbmdlIGV2ZW50cyB0byBhIHJlYWwgZGVwbG95bWVudCBmb3IgRE9SQVxuICAgKiBtZXRyaWNzLiBQdXJlbHkgYWRkaXRpdmUg4oCUIG9taXQgaXQgYW5kIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIFBpcGVsaW5lIGRhdGFiYXNlIHJlY29yZCBJRCDigJQgaW5qZWN0ZWQgYXMgUElQRUxJTkVfSUQgZW52IHZhciBmb3IgYXV0b25vbW91cyBzeW50aCAqL1xuICByZWFkb25seSBwaXBlbGluZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBjdXN0b20gcGlwZWxpbmUgbmFtZS4gRGVmYXVsdHMgdG86IHtvcmdhbml6YXRpb259LXtwcm9qZWN0fS1waXBlbGluZSAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIEdsb2JhbCBtZXRhZGF0YSBpbmhlcml0ZWQgYnkgYWxsIHBpcGVsaW5lIHN0ZXBzICovXG4gIHJlYWRvbmx5IGdsb2JhbD86IE1ldGFEYXRhVHlwZTtcblxuICAvKipcbiAgICogUGlwZWxpbmUtbGV2ZWwgdGVtcGxhdGUgdmFyaWFibGVzLCBleHBvc2VkIHRvIGB7eyBwaXBlbGluZS52YXJzLiogfX1gIGluXG4gICAqIHBpcGVsaW5lIGNvbmZpZ3MgYW5kIHBsdWdpbiBzcGVjcyAoc2VlIGBQbHVnaW5TcGVjLnJlcXVpcmVkVmFyc2ApLiBEZWNsYXJlZFxuICAgKiBoZXJlIHNvIHRoZSBgcGlwZWxpbmUudmFyc2AgdGVtcGxhdGUgc2NvcGUgaXMgdHlwZS1jaGVja2VkIGVuZC10by1lbmQuXG4gICAqL1xuICByZWFkb25seSB2YXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIENvZGVCdWlsZCBkZWZhdWx0cyBhcHBsaWVkIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9uc1xuICAgKiAoc3ludGgsIHNlbGYtbXV0YXRpb24sIGFzc2V0IHB1Ymxpc2hpbmcpIHZpYSBgY29kZUJ1aWxkRGVmYXVsdHNgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdHM/OiBDb2RlQnVpbGREZWZhdWx0cztcblxuICAvKipcbiAgICogT3B0aW9uYWwgSUFNIHJvbGUgZm9yIHRoZSBDb2RlUGlwZWxpbmUuXG4gICAqIFdoZW4gcHJvdmlkZWQsIHJlc29sdmVzIHRvIGEgQ0RLIElSb2xlIGFuZCBpcyBwYXNzZWQgdG8gdGhlIENvZGVQaXBlbGluZSBjb25zdHJ1Y3QuXG4gICAqIFdoZW4gb21pdHRlZCwgQ0RLIGF1dG8tY3JlYXRlcyBhIHJvbGUgd2l0aCB0aGUgY29ycmVjdCBjb2RlcGlwZWxpbmUuYW1hem9uYXdzLmNvbSBwcmluY2lwYWwuXG4gICAqL1xuICByZWFkb25seSByb2xlPzogUm9sZUNvbmZpZztcblxuICAvKiogU3ludGhlc2lzIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHNvdXJjZSBhbmQgcGx1Z2luIGRldGFpbHMgKi9cbiAgcmVhZG9ubHkgc3ludGg6IFN5bnRoT3B0aW9ucztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcGlwZWxpbmUgc3RhZ2VzLCBlYWNoIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgQ29kZUJ1aWxkIHN0ZXBzLlxuICAgKiBTdGFnZXMgYXJlIGFkZGVkIGFzIHdhdmVzIHRvIHRoZSBDb2RlUGlwZWxpbmUgYWZ0ZXIgdGhlIHN5bnRoIHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBzdGFnZXM/OiBTdGFnZU9wdGlvbnNbXTtcblxuICAvKiogT3B0aW9uYWwgY3Jvbi9yYXRlIGV4cHJlc3Npb24gZm9yIHNjaGVkdWxlZCBwaXBlbGluZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogc3RyaW5nO1xuXG4gIC8qKiBDdXN0b20gdGFncyBhcHBsaWVkIHRvIGFsbCBwaXBlbGluZSByZXNvdXJjZXMuICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLFxuICAgKiBrZXllZCBieSBgYWxpYXMgfHwgbmFtZWAuIFdoZW4gcHJlc2VudCwgYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAgcmV0dXJuc1xuICAgKiB0aGUgbWF0Y2hpbmcgZW50cnkgZGlyZWN0bHkgYW5kIHNraXBzIHRoZSBjdXN0b20gcmVzb3VyY2Ug4oCUIHNvIHRoZVxuICAgKiBzeW50aGVzaXplZCBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAqIFBvcHVsYXRlZCBieSB0aGUgQ0xJIGJlZm9yZSBpbnZva2luZyB0aGUgYm9pbGVycGxhdGUgYXBwOyBDREsgY29uc3VtZXJzXG4gICAqIHdobyBjb25zdHJ1Y3QgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIC8qKlxuICAgKiBQbGF0Zm9ybS1zb3VyY2VkIHJlZ2lzdHJ5IG92ZXJyaWRlcywgYXBwbGllZCBvdmVyIHRoZSBlbnYtbG9hZGVkIGByZWdpc3RyeWBcbiAgICogY29uZmlnIGF0IHN5bnRoIHN0YXJ0LiBwaXBlbGluZS1tYW5hZ2VyIHBvcHVsYXRlcyB0aGlzIGZyb20gdGhlIHBsYXRmb3JtIFVSTFxuICAgKiBpdCBkZXBsb3lzIGFnYWluc3Qgc28gdGhlIENvZGVCdWlsZCBpbWFnZSBVUklzIHVzZSBhIHB1bGwgaG9zdCBBV1MgQ29kZUJ1aWxkXG4gICAqIGNhbiByZXNvbHZlIChpbnN0ZWFkIG9mIHRoZSBpbi1jbHVzdGVyIGByZWdpc3RyeTo1MDAwYCBkZWZhdWx0KS4gQ0RLXG4gICAqIGNvbnN1bWVycyBjb25zdHJ1Y3RpbmcgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZWdpc3RyeT86IFBhcnRpYWw8UmVnaXN0cnlDb25maWc+O1xufVxuXG4vKipcbiAqIENESyBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGFuZCBjb25maWd1cmVzIGEgQ29kZVBpcGVsaW5lIGZvciBjb250aW51b3VzIGRlcGxveW1lbnQuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIE11bHRpLXNvdXJjZSBzdXBwb3J0IChTMywgR2l0SHViLCBDb2RlU3RhcilcbiAqIC0gUGx1Z2luLWJhc2VkIGJ1aWxkIHN0ZXBzXG4gKiAtIE1ldGFkYXRhLWRyaXZlbiBjb25maWd1cmF0aW9uXG4gKiAtIEF1dG9tYXRpYyB0YWdnaW5nXG4gKiAtIEF1dG9tYXRpYyBzYW5pdGl6YXRpb24gb2YgcHJvamVjdCBhbmQgb3JnYW5pemF0aW9uIG5hbWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG5ldyBQaXBlbGluZUJ1aWxkZXIodGhpcywgJ015UGlwZWxpbmUnLCB7XG4gKiAgIHByb2plY3Q6ICdteS1hcHAnLFxuICogICBvcmdhbml6YXRpb246ICdteS1vcmcnLFxuICogICBzeW50aDoge1xuICogICAgIHNvdXJjZToge1xuICogICAgICAgdHlwZTogJ2dpdGh1YicsXG4gKiAgICAgICBvcHRpb25zOiB7IHJlcG86ICdvd25lci9yZXBvJywgYnJhbmNoOiAnbWFpbicgfVxuICogICAgIH0sXG4gKiAgICAgcGx1Z2luOiB7IG5hbWU6ICdzeW50aCcgfVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVCdWlsZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBDb2RlUGlwZWxpbmU7XG4gIHB1YmxpYyByZWFkb25seSBjb25maWc6IFBpcGVsaW5lQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEFwcGx5IHBsYXRmb3JtLXNvdXJjZWQgcmVnaXN0cnkgb3ZlcnJpZGVzIEJFRk9SRSBhbnkgQ29uZmlnLmdldCgncmVnaXN0cnknKVxuICAgIC8vIChwbHVnaW4vZGVmYXVsdCBidWlsZC1pbWFnZSByZXNvbHV0aW9uIGJlbG93KSBzbyB0aGUgc3ludGggdXNlcyB0aGUgcHVsbFxuICAgIC8vIGhvc3QgdGhlIHBsYXRmb3JtIGRlcGxveXMgYWdhaW5zdCwgbm90IHRoZSBpbi1jbHVzdGVyIGVudiBkZWZhdWx0LiBUaGUgQ0xJXG4gICAgLy8gb25seSBzZXRzIHByb3BzLnJlZ2lzdHJ5IHdoZW4gSU1BR0VfUkVHSVNUUllfUFVMTF9IT1NUIGlzIHVuc2V0LCBzbyBhblxuICAgIC8vIGV4cGxpY2l0IG9wZXJhdG9yIHB1bGwgaG9zdCBpcyBuZXZlciBjbG9iYmVyZWQgKHNlZSBiYWtlUGxhdGZvcm1SZWdpc3RyeSkuXG4gICAgLy9cbiAgICAvLyBTY29wZWQgKyByZXN0b3JlZCBzbyB0aGUgb3ZlcnJpZGUgZG9lcyBOT1QgbGVhayBpbnRvIHRoZSBwcm9jZXNzLXdpZGVcbiAgICAvLyBDb25maWcgY2FjaGU6IGluIGEgbXVsdGktcGlwZWxpbmUgQ0RLIGFwcCwgcGlwZWxpbmUgQidzIHJlZ2lzdHJ5IG11c3Qgbm90XG4gICAgLy8gYmxlZWQgaW50byBwaXBlbGluZSBBJ3MgaW1hZ2UgcmVzb2x1dGlvbi4gQWxsIHJlZ2lzdHJ5IHJlYWRzIGhhcHBlblxuICAgIC8vIHN5bmNocm9ub3VzbHkgYmVsb3cgKGJ1aWxkLWltYWdlIHJlc29sdXRpb24pLCBzbyByZXN0b3JpbmcgYXQgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBrZWVwcyBzaW5nbGUtcGlwZWxpbmUgYmVoYXZpb3IgaWRlbnRpY2FsLlxuICAgIGNvbnN0IHJlc3RvcmVSZWdpc3RyeSA9IHByb3BzLnJlZ2lzdHJ5XG4gICAgICA/IENvbmZpZy5vdmVycmlkZVNjb3BlZCgncmVnaXN0cnknLCBwcm9wcy5yZWdpc3RyeSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgUGlwZWxpbmVDb25maWd1cmF0aW9uIGZvciBhbGwgYnVzaW5lc3MgbG9naWMgKHZhbGlkYXRpb24sIHNhbml0aXphdGlvbiwgbWV0YWRhdGEgbWVyZ2luZylcbiAgICAgIHRoaXMuY29uZmlnID0gbmV3IFBpcGVsaW5lQ29uZmlndXJhdGlvbihwcm9wcyk7XG5cbiAgICAgIGNvbnN0IHNlcnZlckNvbmZpZyA9IENvbmZpZy5nZXQoJ3NlcnZlcicpO1xuICAgICAgY29uc3QgYXdzQ29uZmlnID0gQ29uZmlnLmdldCgnYXdzJyk7XG4gICAgICAvLyBQYXNzIG9yZytwcm9qZWN0IHNvIGxvZyBncm91cCAvIElBTSByb2xlIG5hbWVzIGdldCBhIHN0YWJsZSBoYXNoXG4gICAgICAvLyBzdWZmaXggcGVyIHBpcGVsaW5lLiBQcmV2ZW50cyBgUmVzb3VyY2UgYWxyZWFkeSBleGlzdHNgIGNvbGxpc2lvbnNcbiAgICAgIC8vIGFjcm9zcyBzdGFja3MgZGVwbG95ZWQgdG8gdGhlIHNhbWUgQVdTIGFjY291bnQuXG4gICAgICBjb25zdCB1bmlxdWVJZCA9IG5ldyBVbmlxdWVJZCh7XG4gICAgICAgIG9yZ2FuaXphdGlvbjogdGhpcy5jb25maWcub3JnYW5pemF0aW9uLFxuICAgICAgICBwcm9qZWN0OiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwbHVnaW5Mb29rdXAgPSBuZXcgUGx1Z2luTG9va3VwKFxuICAgICAgICB0aGlzLFxuICAgICAgICB1bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLFxuICAgICAgICB7XG4gICAgICAgICAgb3JnYW5pemF0aW9uOiB0aGlzLmNvbmZpZy5vcmdhbml6YXRpb24sXG4gICAgICAgICAgcHJvamVjdDogdGhpcy5jb25maWcucHJvamVjdCxcbiAgICAgICAgICBwbGF0Zm9ybVVybDogc2VydmVyQ29uZmlnLnBsYXRmb3JtVXJsLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIG9yZ0lkOiBwcm9wcy5vcmdJZCxcbiAgICAgICAgICBydW50aW1lOiBhd3NDb25maWcubGFtYmRhLnJ1bnRpbWUsXG4gICAgICAgICAgdGltZW91dDogYXdzQ29uZmlnLmxhbWJkYS50aW1lb3V0LFxuICAgICAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IGF3c0NvbmZpZy5sYW1iZGEucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICAgICAgICByZXNvbHZlZFBsdWdpbnM6IHByb3BzLnJlc29sdmVkUGx1Z2lucyxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIENyZWF0ZSBzb3VyY2UgYW5kIGJ1aWxkIHN0ZXBcbiAgICAgIGNvbnN0IHNvdXJjZUJ1aWxkZXIgPSBuZXcgU291cmNlQnVpbGRlcih0aGlzLCB0aGlzLmNvbmZpZyk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VCdWlsZGVyLmNyZWF0ZSh1bmlxdWVJZCk7XG5cbiAgICAgIC8vIFN5bnRoLXBsdWdpbiByZXNvbHV0aW9uOlxuICAgICAgLy8gICAxLiBQcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGgvZGVwbG95YCBmcm9tIHRoZSBwbGF0Zm9ybVxuICAgICAgLy8gICAgICBBUEkg4oaSIHVzZSBpdC4gU3ludGggc3RlcCBydW5zIG9uIHRoZSByZWFsIGBjZGstc3ludGhgIGltYWdlIHdpdGhcbiAgICAgIC8vICAgICAgcmVhbCBjb21tYW5kcyBiYWtlZCBpbnRvIHRoZSB0ZW1wbGF0ZS5cbiAgICAgIC8vICAgMi4gT3RoZXJ3aXNlIOKGkiBgYm9vdHN0cmFwKClgOiBjb2xkLXN0YXJ0IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYFxuICAgICAgLy8gICAgICBvbiB0aGUgY29uZmlndXJlZCBDT0RFQlVJTERfREVGQVVMVF9JTUFHRSAoZGVmYXVsdFxuICAgICAgLy8gICAgICBwaXBlbGluZS1ib290c3RyYXA6MS4wKS4gVXNlZCB3aGVuIHRoZSBwbGF0Zm9ybSBpc24ndCByZWFjaGFibGVcbiAgICAgIC8vICAgICAgYXQgc3ludGggdGltZSAoQ0xJIGxvZ3MgYSB3YXJuaW5nIHBlciBtaXNzZWQgcGx1Z2luKS5cbiAgICAgIC8vXG4gICAgICAvLyBwbHVnaW5Mb29rdXAucGx1Z2luKCkgcmVhZHMgYHJlc29sdmVkUGx1Z2luc2AgaW50ZXJuYWxseSBhbmQgcmV0dXJuc1xuICAgICAgLy8gdGhlIGNhY2hlZCBlbnRyeSB3aGVuIHByZXNlbnQg4oCUIHNvIGNhbGxpbmcgaXQgYWx3YXlzIHdpbnMgb3ZlclxuICAgICAgLy8gYm9vdHN0cmFwKCkgd2hlbiBwcmUtcmVzb2x1dGlvbiBzdWNjZWVkZWQuXG4gICAgICBjb25zdCBzeW50aENhY2hlS2V5ID1cbiAgICAgIHRoaXMuY29uZmlnLnBsdWdpbi5hbGlhcyB8fCBgJHt0aGlzLmNvbmZpZy5wbHVnaW4ubmFtZX0tYWxpYXNgO1xuICAgICAgY29uc3QgcGx1Z2luID0gcHJvcHMucmVzb2x2ZWRQbHVnaW5zPy5bc3ludGhDYWNoZUtleV1cbiAgICAgICAgPyBwbHVnaW5Mb29rdXAucGx1Z2luKHRoaXMuY29uZmlnLnBsdWdpbilcbiAgICAgICAgOiBwbHVnaW5Mb29rdXAuYm9vdHN0cmFwKCk7XG4gICAgICBjb25zdCBkZWZhdWx0Q29tcHV0ZVR5cGUgPSBhd3NDb25maWcuY29kZUJ1aWxkLmNvbXB1dGVUeXBlO1xuICAgICAgY29uc3QgYXJ0aWZhY3RNYW5hZ2VyID0gbmV3IEFydGlmYWN0TWFuYWdlcigpO1xuICAgICAgY29uc3Qgc3ludGhBbGlhcyA9IHRoaXMuY29uZmlnLnBsdWdpbi5hbGlhcyA/PyB0aGlzLmNvbmZpZy5wbHVnaW4ubmFtZTtcblxuICAgICAgLy8gU2NvcGUgZXhwb3NlZCB0byBwbHVnaW4tc3BlYyB0ZW1wbGF0ZXMgYXMgYHBpcGVsaW5lLipgLiBCdWlsdCBvbmNlXG4gICAgICAvLyBoZXJlIHNvIGJvdGggdGhlIHN5bnRoIHN0ZXAgYW5kIGV2ZXJ5IHN0YWdlIHN0ZXAgcmVzb2x2ZSBhZ2FpbnN0XG4gICAgICAvLyB0aGUgc2FtZSBzbmFwc2hvdC5cbiAgICAgIGNvbnN0IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBwaXBlbGluZToge1xuICAgICAgICAgIHByb2plY3ROYW1lOiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgICAgIHByb2plY3Q6IHRoaXMuY29uZmlnLnByb2plY3QsXG4gICAgICAgICAgb3JnSWQ6IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICBvcmdhbml6YXRpb246IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICBwaXBlbGluZU5hbWU6IHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgICBtZXRhZGF0YTogdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkLFxuICAgICAgICAgIHZhcnM6IHByb3BzLnZhcnMgPz8ge30sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzeW50aCA9IGNyZWF0ZUNvZGVCdWlsZFN0ZXAoe1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5zeW50aEN1c3RvbWl6YXRpb24sXG4gICAgICAgIGlkOiB1bmlxdWVJZC5nZW5lcmF0ZSgnY2RrOnN5bnRoJyksXG4gICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICBwbHVnaW4sXG4gICAgICAgIGlucHV0OiBzb3VyY2UsXG4gICAgICAgIG1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgIG5ldHdvcms6IHRoaXMuY29uZmlnLm5ldHdvcmssXG4gICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICBkZWZhdWx0Q29tcHV0ZVR5cGUsXG4gICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgc3RhZ2VOYW1lOiAnbm8tc3RhZ2UnLFxuICAgICAgICBzdGFnZUFsaWFzOiAnbm8tc3RhZ2UtYWxpYXMnLFxuICAgICAgICBwbHVnaW5BbGlhczogYCR7c3ludGhBbGlhc30tYWxpYXNgLFxuICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgIHBpcGVsaW5lU2NvcGUsXG4gICAgICB9KTtcblxuICAgICAgLy8gUmVzb2x2ZSBwaXBlbGluZS1sZXZlbCBkZWZhdWx0cyBpbnRvIGNvZGVCdWlsZERlZmF1bHRzXG4gICAgICAvLyBCdWlsZCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQgbmFtZSBmb3IgQ29kZUJ1aWxkIGVudiB2YXJzXG4gICAgICBjb25zdCBwbGF0Zm9ybVNlY3JldE5hbWUgPSBwcm9wcy5vcmdJZFxuICAgICAgICA/IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChwcm9wcy5vcmdJZCwgJ3BsYXRmb3JtJylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGNvZGVCdWlsZERlZmF1bHRzID0gdGhpcy5yZXNvbHZlRGVmYXVsdHModGhpcy5jb25maWcuZGVmYXVsdHMsIHVuaXF1ZUlkLCBwcm9wcy5waXBlbGluZUlkLCBwbGF0Zm9ybVNlY3JldE5hbWUsIHNlcnZlckNvbmZpZy5wbGF0Zm9ybVVybCwgcHJvcHMub3JnSWQpO1xuXG4gICAgICAvLyBSZXNvbHZlIElBTSByb2xlOiBleHBsaWNpdCBwcm9wIHdpbnMsIGVsc2UgYGlhbTpyb2xlYCBtZXRhZGF0YSwgZWxzZSBsZXRcbiAgICAgIC8vIENESyBhdXRvLWNyZWF0ZSB0aGUgcGlwZWxpbmUgcm9sZSAoY29kZXBpcGVsaW5lLmFtYXpvbmF3cy5jb20gcHJpbmNpcGFsKS5cbiAgICAgIGNvbnN0IHJvbGVDb25maWcgPSBwcm9wcy5yb2xlID8/IHJvbGVDb25maWdGcm9tTWV0YWRhdGEodGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkKTtcbiAgICAgIGlmIChyb2xlQ29uZmlnPy50eXBlID09PSAnY29kZUJ1aWxkRGVmYXVsdCcpIHtcbiAgICAgICAgY3JlYXRlTG9nZ2VyKCdwaXBlbGluZS1idWlsZGVyJykud2FybihcbiAgICAgICAgICAnY29kZUJ1aWxkRGVmYXVsdCByb2xlIHR5cGUgdXNlcyBjb2RlYnVpbGQuYW1hem9uYXdzLmNvbSB0cnVzdCBwcmluY2lwYWwg4oCUICcgK1xuICAgICAgICAndGhpcyBpcyBub3Qgc3VpdGFibGUgYXMgdGhlIHBpcGVsaW5lLWxldmVsIHJvbGUuIENvbnNpZGVyIHVzaW5nIHJvbGVBcm4vcm9sZU5hbWUgJyArXG4gICAgICAgICdvciBvbWl0dGluZyB0aGUgcm9sZSB0byBsZXQgQ0RLIGF1dG8tY3JlYXRlIG9uZSB3aXRoIGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByb2xlID0gcm9sZUNvbmZpZ1xuICAgICAgICA/IHJlc29sdmVSb2xlKHRoaXMsIHVuaXF1ZUlkLCByb2xlQ29uZmlnKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8g4pSA4pSAIEFydGlmYWN0IGJ1Y2tldCAoS01TIGVuY3J5cHRpb24gKyByZXRlbnRpb24pIOKUgOKUgFxuICAgICAgLy8gV2hlbiBgZW5jcnlwdGlvbi5rbXNLZXlBcm5gIGFuZC9vciBgb3BlcmF0aW9ucy5hcnRpZmFjdFJldGVudGlvbkRheXNgIGFyZVxuICAgICAgLy8gc2V0IHdlIGNyZWF0ZSBhIGN1c3RvbSBhcnRpZmFjdCBidWNrZXQgYW5kIHBhc3MgaXQgdG8gQ29kZVBpcGVsaW5lOyB0aGF0XG4gICAgICAvLyBpcyB0aGUgb25seSB3YXkgdG8gYXR0YWNoIGEgY3VzdG9tZXItbWFuYWdlZCBrZXkgKHRoZSBMMyBjb25zdHJ1Y3QgZXhwb3Nlc1xuICAgICAgLy8gYGFydGlmYWN0QnVja2V0YCwgbm90IGBlbmNyeXB0aW9uS2V5YCkuIEFic2VudCBib3RoIGtleXMsIENESyBhdXRvLWNyZWF0ZXNcbiAgICAgIC8vIHRoZSBidWNrZXQgYW5kIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gdGhpcy5idWlsZEFydGlmYWN0QnVja2V0KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBDb2RlUGlwZWxpbmUgY29uc3RydWN0XG4gICAgICB0aGlzLnBpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCB1bmlxdWVJZC5nZW5lcmF0ZSgncGlwZWxpbmVzOmNvZGVwaXBlbGluZScpLCB7XG4gICAgICAgIC4uLihjb2RlQnVpbGREZWZhdWx0cyAmJiB7IGNvZGVCdWlsZERlZmF1bHRzIH0pLFxuICAgICAgICAuLi4ocm9sZSAmJiB7IHJvbGUgfSksXG4gICAgICAgIC4uLihhcnRpZmFjdEJ1Y2tldCAmJiB7IGFydGlmYWN0QnVja2V0IH0pLFxuICAgICAgICBwaXBlbGluZVR5cGU6IFBpcGVsaW5lVHlwZS5WMixcbiAgICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUsXG4gICAgICAgIHN5bnRoLFxuICAgICAgICAuLi5tZXRhZGF0YUZvckNvZGVQaXBlbGluZSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChwcm9wcy5zdGFnZXMpIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VCdWlsZGVyID0gbmV3IFN0YWdlQnVpbGRlcih7XG4gICAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgICAgcGx1Z2luTG9va3VwLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIGdsb2JhbE1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgICAgZGVmYXVsdENvbXB1dGVUeXBlLFxuICAgICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgICAgcGlwZWxpbmVTY29wZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YWdlQnVpbGRlci5hZGRTdGFnZXModGhpcy5waXBlbGluZSwgcHJvcHMuc3RhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFRhZ3Mg4pSA4pSAXG4gICAgICAvLyBUaGUgZmlyc3QgdGhyZWUgYXJlIG9wZXJhdGlvbnMtZXNzZW50aWFsIGFuZCB1c2VkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyXG4gICAgICAvLyBhdWRpdCBzdGFja3NgIHRvIGRpZmYgQ0ZOIHN0YWNrcyBhZ2FpbnN0IHRoZSBwaXBlbGluZV9yZWdpc3RyeSB0YWJsZS5cbiAgICAgIC8vIGBPcmdJZGAgaXMgdGhlIGNhbm9uaWNhbCBrZXkgZm9yIGNvc3QgYXR0cmlidXRpb24gKEFXUyBDb3N0IEV4cGxvcmVyXG4gICAgICAvLyBncm91cHMgYnkgdGFnIGtleS92YWx1ZSB3aGVuIGFjdGl2YXRlZCBpbiBCaWxsaW5nIHNldHRpbmdzKS5cbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwaXBlbGluZS1idWlsZGVyJywgJ3RydWUnKTtcbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwcm9qZWN0JywgdGhpcy5jb25maWcucHJvamVjdCk7XG4gICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnb3JnYW5pemF0aW9uJywgdGhpcy5jb25maWcub3JnYW5pemF0aW9uKTtcbiAgICAgIGlmIChwcm9wcy5vcmdJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnT3JnSWQnLCBwcm9wcy5vcmdJZCk7XG4gICAgICB9XG4gICAgICAvLyBTdGFibGUgZXZlbnQtcmVwb3J0aW5nIGtleS4gQXBwbGllZCBhdCBzeW50aCAodGhlIHBpcGVsaW5lSWQgaXMga25vd25cbiAgICAgIC8vIGhlcmUpLCBzbyBpdCdzIHByZXNlbnQgZnJvbSBzdGFjayBjcmVhdGlvbiDigJQgdGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhpc1xuICAgICAgLy8gdGFnIHRvIGF0dHJpYnV0ZSBDb2RlUGlwZWxpbmUgc3RhdGUtY2hhbmdlIGV2ZW50cyB0byB0aGUgcGlwZWxpbmUgd2l0aG91dFxuICAgICAgLy8gZXZlciBoYW5kbGluZyB0aGUgQVJOL2FjY291bnQuIFNlZSBwYWNrYWdlcy9waXBlbGluZS1ldmVudHMuXG4gICAgICBpZiAocHJvcHMucGlwZWxpbmVJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnUElQRUxJTkVfRVZFTlRfSUQnLCBwcm9wcy5waXBlbGluZUlkKTtcbiAgICAgIH1cbiAgICAgIC8vIE9wdGlvbmFsIGRlcGxveS1lbnZpcm9ubWVudCBhdHRyaWJ1dGlvbiBmb3IgRE9SQSBtZXRyaWNzLiBNaXJyb3JzIHRoZVxuICAgICAgLy8gUElQRUxJTkVfRVZFTlRfSUQgdGFnOiBhcHBsaWVkIGF0IHN5bnRoIHNvIGl0J3MgcHJlc2VudCBmcm9tIHN0YWNrXG4gICAgICAvLyBjcmVhdGlvbiwgYW5kIHJlYWQgYnkgdGhlIGV2ZW50cyBMYW1iZGEgZnJvbSB0aGUgc2FtZSBMaXN0VGFncyBjYWxsLlxuICAgICAgLy8gQWJzZW50IHdoZW4gYGVudmlyb25tZW50YCBpcyB1bnNldCDigJQgbGVnYWN5IHBpcGVsaW5lcyByZXBvcnQgdW5jaGFuZ2VkLlxuICAgICAgaWYgKHByb3BzLmVudmlyb25tZW50KSB7XG4gICAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdFbnZpcm9ubWVudCcsIHByb3BzLmVudmlyb25tZW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy50YWdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLnRhZ3MpKSB7XG4gICAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgdGhlIGludGVybmFsIHBpcGVsaW5lIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIHByb3BlcnRpZXNcbiAgICAgIHRoaXMucGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuICAgICAgY29uc3QgY2RrUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLnBpcGVsaW5lO1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lLWxldmVsIFZhcmlhYmxlcyAoQ29kZVBpcGVsaW5lIFYyKSDilIDilIBcbiAgICAgIGZvciAoY29uc3QgdiBvZiBwYXJzZVBpcGVsaW5lVmFyaWFibGVzKG1ldGFbTWV0YWRhdGFLZXlzLlBJUEVMSU5FX1ZBUklBQkxFU10pKSB7XG4gICAgICAgIGNka1BpcGVsaW5lLmFkZFZhcmlhYmxlKG5ldyBWYXJpYWJsZSh7XG4gICAgICAgICAgdmFyaWFibGVOYW1lOiB2Lm5hbWUsXG4gICAgICAgICAgLi4uKHYuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgeyBkZWZhdWx0VmFsdWU6IHYuZGVmYXVsdFZhbHVlIH0pLFxuICAgICAgICAgIC4uLih2LmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZXNjcmlwdGlvbjogdi5kZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgU05TIE5vdGlmaWNhdGlvbnMg4pSA4pSAXG4gICAgICBjb25zdCBub3RpZmljYXRpb25Ub3BpY0FybiA9IG1ldGFbTWV0YWRhdGFLZXlzLk5PVElGSUNBVElPTl9UT1BJQ19BUk5dO1xuICAgICAgaWYgKHR5cGVvZiBub3RpZmljYXRpb25Ub3BpY0FybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdG9waWMgPSBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdOb3RpZmljYXRpb25Ub3BpYycsIG5vdGlmaWNhdGlvblRvcGljQXJuKTtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uRXZlbnRzID0gcGFyc2VOb3RpZmljYXRpb25FdmVudHMobWV0YVtNZXRhZGF0YUtleXMuTk9USUZJQ0FUSU9OX0VWRU5UU10pXG4gICAgICAgICAgLm1hcChlID0+IFBJUEVMSU5FX0VWRU5UX01BUFtlLnRvVXBwZXJDYXNlKCldKVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgIGlmIChub3RpZmljYXRpb25FdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNka1BpcGVsaW5lLm5vdGlmeU9uKCdQaXBlbGluZU5vdGlmaWNhdGlvbicsIHRvcGljLCB7IGV2ZW50czogbm90aWZpY2F0aW9uRXZlbnRzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOKUgOKUgCBTY2hlZHVsZWQgRXhlY3V0aW9uIOKUgOKUgFxuICAgICAgaWYgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zPy50cmlnZ2VyID09PSBUcmlnZ2VyVHlwZS5TQ0hFRFVMRSB8fCBwcm9wcy5zY2hlZHVsZSkge1xuICAgICAgICBjb25zdCBleHByID0gcHJvcHMuc2NoZWR1bGUgfHwgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zIGFzIHsgc2NoZWR1bGU/OiBzdHJpbmcgfSk/LnNjaGVkdWxlIHx8ICdyYXRlKDEgZGF5KSc7XG4gICAgICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnU2NoZWR1bGVSdWxlJywge1xuICAgICAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbihleHByKSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKGNka1BpcGVsaW5lKV0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgRXhlY3V0aW9uIEV2ZW50IFRyYWNraW5nIChmb3J3YXJkIHBpcGVsaW5lIHN0YXRlIGNoYW5nZXMgdG8gU05TKSDilIDilIBcbiAgICAgIGlmIChtZXRhW01ldGFkYXRhS2V5cy5FTkFCTEVfRVhFQ1VUSU9OX0VWRU5UU10gJiYgdHlwZW9mIG5vdGlmaWNhdGlvblRvcGljQXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0V4ZWN1dGlvbkV2ZW50UnVsZScsIHtcbiAgICAgICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgICAgIHNvdXJjZTogWydhd3MuY29kZXBpcGVsaW5lJ10sXG4gICAgICAgICAgICBkZXRhaWxUeXBlOiBbJ0NvZGVQaXBlbGluZSBQaXBlbGluZSBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJ10sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtjZGtQaXBlbGluZS5waXBlbGluZUFybl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuU25zVG9waWMoXG4gICAgICAgICAgICBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdFeGVjdXRpb25FdmVudFRvcGljJywgbm90aWZpY2F0aW9uVG9waWNBcm4pLFxuICAgICAgICAgICldLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lIE1ldHJpY3MgJiBBbGFybXMg4pSA4pSAXG4gICAgICBjb25zdCBlbmFibGVNZXRyaWNzID0gdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkW01ldGFkYXRhS2V5cy5FTkFCTEVfTUVUUklDU107XG4gICAgICBpZiAoZW5hYmxlTWV0cmljcykge1xuICAgICAgICBuZXcgY2xvdWR3YXRjaC5BbGFybSh0aGlzLCAnUGlwZWxpbmVGYWlsdXJlQWxhcm0nLCB7XG4gICAgICAgICAgbWV0cmljOiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiAnQVdTL0NvZGVQaXBlbGluZScsXG4gICAgICAgICAgICBtZXRyaWNOYW1lOiAnRmFpbGVkUGlwZWxpbmVFeGVjdXRpb25Db3VudCcsXG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7IFBpcGVsaW5lTmFtZTogdGhpcy5jb25maWcucGlwZWxpbmVOYW1lIH0sXG4gICAgICAgICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBgUGlwZWxpbmUgJHt0aGlzLmNvbmZpZy5waXBlbGluZU5hbWV9IGV4ZWN1dGlvbiBmYWlsZWRgLFxuICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBjbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJldmVydCB0aGUgcGVyLWJ1aWxkZXIgcmVnaXN0cnkgb3ZlcnJpZGUgc28gaXQgbmV2ZXIgbGVha3MgaW50byB0aGVcbiAgICAgIC8vIHByb2Nlc3Mtd2lkZSBDb25maWcgY2FjaGUgKHNlZSB0aGUgb3ZlcnJpZGUgYXQgdGhlIHRvcCBvZiB0aGUgY29uc3RydWN0b3IpLlxuICAgICAgcmVzdG9yZVJlZ2lzdHJ5Py4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjdXN0b20gYXJ0aWZhY3QgYnVja2V0IHdoZW4gYGVuY3J5cHRpb24ua21zS2V5QXJuYCBhbmQvb3JcbiAgICogYG9wZXJhdGlvbnMuYXJ0aWZhY3RSZXRlbnRpb25EYXlzYCBhcmUgc2V0LiBSZXR1cm5zIHVuZGVmaW5lZCBvdGhlcndpc2Ugc29cbiAgICogQ0RLIGF1dG8tY3JlYXRlcyB0aGUgZGVmYXVsdCBhcnRpZmFjdCBidWNrZXQgKHVuY2hhbmdlZCBiZWhhdmlvcikuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQXJ0aWZhY3RCdWNrZXQoKTogczMuSUJ1Y2tldCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcbiAgICBjb25zdCBrbXNLZXlBcm4gPSB0eXBlb2YgbWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dID09PSAnc3RyaW5nJ1xuICAgICAgPyAobWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dIGFzIHN0cmluZylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJldGVudGlvbkRheXMgPSBhc0ludChtZXRhW01ldGFkYXRhS2V5cy5BUlRJRkFDVF9SRVRFTlRJT05fREFZU10pO1xuXG4gICAgaWYgKCFrbXNLZXlBcm4gJiYgcmV0ZW50aW9uRGF5cyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGttc0tleUFyblxuICAgICAgPyBrbXMuS2V5LmZyb21LZXlBcm4odGhpcywgJ0FydGlmYWN0S2V5Jywga21zS2V5QXJuKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBidWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsICdBcnRpZmFjdEJ1Y2tldCcsIHtcbiAgICAgIGVuY3J5cHRpb246IGVuY3J5cHRpb25LZXkgPyBzMy5CdWNrZXRFbmNyeXB0aW9uLktNUyA6IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIC4uLihlbmNyeXB0aW9uS2V5ICYmIHsgZW5jcnlwdGlvbktleSB9KSxcbiAgICAgIC4uLihyZXRlbnRpb25EYXlzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBsaWZlY3ljbGVSdWxlczogW3sgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cyhyZXRlbnRpb25EYXlzKSB9XSxcbiAgICAgIH0pLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKGJ1Y2tldCkuYWRkKCdwaXBlbGluZScsIHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSk7XG4gICAgcmV0dXJuIGJ1Y2tldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBDb2RlQnVpbGREZWZhdWx0cyBpbnRvIHRoZSBzaGFwZSBleHBlY3RlZCBieSBDREsncyBjb2RlQnVpbGREZWZhdWx0cy5cbiAgICogQ29tYmluZXMgbmV0d29yayBjb25maWcsIHNlY3VyaXR5IGdyb3VwcywgYW5kIHBpcGVsaW5lLWxldmVsIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiAoUElQRUxJTkVfSUQsIEVYRUNVVElPTl9JRCwgUExBVEZPUk1fQkFTRV9VUkwpIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVEZWZhdWx0cyhcbiAgICBkZWZhdWx0czogQ29kZUJ1aWxkRGVmYXVsdHMgfCB1bmRlZmluZWQsXG4gICAgaWQ6IFVuaXF1ZUlkLFxuICAgIHBpcGVsaW5lSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVNlY3JldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVVybDogc3RyaW5nLFxuICAgIG9yZ0lkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IENvZGVCdWlsZE9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIC8vIFBlci1waXBlbGluZSBuZXR3b3JrIGNvbmZpZyB3aW5zOyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFuIGVudi1kcml2ZW5cbiAgICAvLyBnbG9iYWwgVlBDIChpbnRlcm5hbCAvIGluc2lkZS1BV1Mtb25seSBtb2RlKSBzbyBldmVyeSBwaXBlbGluZSdzXG4gICAgLy8gQ29kZUJ1aWxkIHJ1bnMgaW4gdGhlIFZQQyBhbmQgY2FuIHJlYWNoIHRoZSBwcml2YXRlIGdhdGV3YXkuIFVuc2V0IGluXG4gICAgLy8gcHVibGljIGRlcGxveXMg4oaSIENvZGVCdWlsZCBzdGF5cyBpbiB0aGUgQVdTLW1hbmFnZWQgbmV0d29yay5cbiAgICAvLyBQcmVjZWRlbmNlOiBleHBsaWNpdCBwcm9wID4gYGVjMjpuZXR3b3JrYCBtZXRhZGF0YSA+IGVudi1kcml2ZW4gZ2xvYmFsIFZQQy5cbiAgICBjb25zdCBuZXR3b3JrID0gZGVmYXVsdHM/Lm5ldHdvcmsgPz8gbmV0d29ya0NvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpID8/IG5ldHdvcmtDb25maWdGcm9tRW52KCk7XG4gICAgY29uc3QgbmV0d29ya1Byb3BzID0gbmV0d29ya1xuICAgICAgPyByZXNvbHZlTmV0d29yayh0aGlzLCBpZCwgbmV0d29yaylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gU2FtZSBwcmVjZWRlbmNlIGZvciBzdGFuZGFsb25lIHNlY3VyaXR5IGdyb3VwcyAocHJvcCA+IGBlYzI6c2VjdXJpdHlncm91cGAgbWV0YWRhdGEpLlxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBDb25maWcgPSBkZWZhdWx0cz8uc2VjdXJpdHlHcm91cHMgPz8gc2VjdXJpdHlHcm91cENvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpO1xuICAgIGNvbnN0IHN0YW5kYWxvbmVTZWN1cml0eUdyb3VwcyA9IHNlY3VyaXR5R3JvdXBDb25maWdcbiAgICAgID8gcmVzb2x2ZVNlY3VyaXR5R3JvdXAodGhpcywgaWQsIHNlY3VyaXR5R3JvdXBDb25maWcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFBpcGVsaW5lLWxldmVsIGVudiB2YXJzIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnNcbiAgICAvLyBOb3RlOiAje2NvZGVwaXBlbGluZS4qfSByZXNvbHZlZCB2YXJpYWJsZXMgbXVzdCBnbyB0aHJvdWdoIENvZGVCdWlsZFN0ZXAuZW52XG4gICAgLy8gKGFjdGlvbi1sZXZlbCksIG5vdCBidWlsZEVudmlyb25tZW50LmVudmlyb25tZW50VmFyaWFibGVzIChwcm9qZWN0LWxldmVsKS5cbiAgICBjb25zdCBwaXBlbGluZUVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiA9IHtcbiAgICAgIFBMQVRGT1JNX0JBU0VfVVJMOiB7IHZhbHVlOiBwbGF0Zm9ybVVybCB9LFxuICAgICAgLi4uKHBpcGVsaW5lSWQgJiYgeyBQSVBFTElORV9JRDogeyB2YWx1ZTogcGlwZWxpbmVJZCB9IH0pLFxuICAgICAgLi4uKHBsYXRmb3JtU2VjcmV0TmFtZSAmJiB7IFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiB7IHZhbHVlOiBwbGF0Zm9ybVNlY3JldE5hbWUgfSB9KSxcbiAgICAgIC8vIFByb3BhZ2F0ZSBUTFMgdmVyaWZpY2F0aW9uIHNldHRpbmcgc28gYWxsIENvZGVCdWlsZCBzdGVwcyBjYW4gcmVhY2hcbiAgICAgIC8vIHRoZSBwbGF0Zm9ybSBBUEkgd2hlbiB1c2luZyBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXNcbiAgICAgIC4uLihwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCcgJiYge1xuICAgICAgICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEOiB7IHZhbHVlOiAnMCcgfSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IFtcbiAgICAgIC4uLihuZXR3b3JrUHJvcHM/LnNlY3VyaXR5R3JvdXBzID8/IFtdKSxcbiAgICAgIC4uLihzdGFuZGFsb25lU2VjdXJpdHlHcm91cHMgPz8gW10pLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKG5ldHdvcmtQcm9wcyAmJiB7IHZwYzogbmV0d29ya1Byb3BzLnZwYywgc3VibmV0U2VsZWN0aW9uOiBuZXR3b3JrUHJvcHMuc3VibmV0U2VsZWN0aW9uIH0pLFxuICAgICAgLi4uKHNlY3VyaXR5R3JvdXBzLmxlbmd0aCA+IDAgJiYgeyBzZWN1cml0eUdyb3VwcyB9KSxcbiAgICAgIC8vIGJ1aWxkSW1hZ2UgYXQgdGhpcyBsZXZlbCByZWFjaGVzIENESyBQaXBlbGluZXMnIGludGVybmFsbHktd3JhcHBlZFxuICAgICAgLy8gU2hlbGxTdGVwIENvZGVCdWlsZCBhY3Rpb24sIHdoaWNoIG90aGVyd2lzZSBoYXJkY29kZXNcbiAgICAgIC8vIENESydzIGRlZmF1bHQgY3VyYXRlZCBzdGFuZGFyZCBpbWFnZS4gU2V0dGluZyBpdCBoZXJlIGNsb3NlcyB0aGUgZ2FwXG4gICAgICAvLyBleHBvc2VkIGluIHRoZSBzYW1lIGVudiB2YXIgKGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWApIHRoYXQgdGhlXG4gICAgICAvLyBDb2RlQnVpbGRTdGVwIHBhdGggYWxyZWFkeSBob25vcnMgdmlhIHJlc29sdmVQbHVnaW5JbWFnZSgpJ3NcbiAgICAgIC8vIGZhbGxiYWNrLiBQZXItc3RlcCBgYnVpbGRJbWFnZWAgb24gYSBDb2RlQnVpbGRTdGVwIHN0aWxsIHdpbnMuXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZSh0aGlzLCBvcmdJZCksXG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiBwaXBlbGluZUVudlZhcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -25,7 +25,7 @@ export interface PluginLookupProps {
25
25
  /** Reserved concurrent executions for the lookup Lambda (default: 30) */
26
26
  readonly reservedConcurrentExecutions?: number;
27
27
  /**
28
- * Plugins pre-resolved by `pipeline-manager synth` from the platform API.
28
+ * Plugins pre-resolved by `pipeline-manager pipeline synth` from the platform API.
29
29
  * Keyed by `alias || name` (matches the construct's normalize() output).
30
30
  * When a lookup hits this map, `plugin()` returns the resolved Plugin
31
31
  * directly — no custom resource is created. This is what makes the
@@ -48,7 +48,7 @@ export interface PluginLookupProps {
48
48
  *
49
49
  * Before deploying, store a JWT token in Secrets Manager:
50
50
  * ```sh
51
- * pipeline-manager store-token --days 30 --region <region>
51
+ * pipeline-manager infra store-token --days 30 --region <region>
52
52
  * ```
53
53
  *
54
54
  * The Lambda resolves the secret by name at runtime:
@@ -83,7 +83,7 @@ export declare class PluginLookup extends Construct {
83
83
  * secret by name at runtime using `CoreConstants.SECRETS_PATH_PREFIX`.
84
84
  *
85
85
  * Create the secret before deploying with:
86
- * pipeline-manager store-token --days 30 --region <region>
86
+ * pipeline-manager infra store-token --days 30 --region <region>
87
87
  */
88
88
  private createLambdaFunction;
89
89
  /**
@@ -114,11 +114,11 @@ export declare class PluginLookup extends Construct {
114
114
  private fallback;
115
115
  /**
116
116
  * Synth plugin with pipeline-manager commands. Cold-start bootstrap for
117
- * the synth step when pre-resolution by `pipeline-manager synth/deploy`
117
+ * the synth step when pre-resolution by `pipeline-manager pipeline synth/deploy`
118
118
  * didn't populate `resolvedPlugins` for the synth plugin. Runs on the
119
119
  * configured `CODEBUILD_DEFAULT_IMAGE` (default `pipeline-bootstrap:1.0`)
120
120
  * and self-bootstraps the real synth via
121
- * `pipeline-manager synth --id ${PIPELINE_ID}`.
121
+ * `pipeline-manager pipeline synth --id ${PIPELINE_ID}`.
122
122
  *
123
123
  * No `installCommands`: the default image already has `pipeline-manager`
124
124
  * baked in (that's the whole point of `pipeline-bootstrap:1.0`). If the
@@ -30,7 +30,7 @@ const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
30
30
  *
31
31
  * Before deploying, store a JWT token in Secrets Manager:
32
32
  * ```sh
33
- * pipeline-manager store-token --days 30 --region <region>
33
+ * pipeline-manager infra store-token --days 30 --region <region>
34
34
  * ```
35
35
  *
36
36
  * The Lambda resolves the secret by name at runtime:
@@ -92,7 +92,7 @@ export class PluginLookup extends Construct {
92
92
  */
93
93
  plugin(plugin) {
94
94
  const props = this.normalize(plugin);
95
- // Pre-resolved by `pipeline-manager synth` from the platform API.
95
+ // Pre-resolved by `pipeline-manager pipeline synth` from the platform API.
96
96
  // Skip the custom resource entirely — we already know the plugin's
97
97
  // name, version, commands, env, etc. at synth time, so the resulting CFN
98
98
  // template can ship with the real CodeBuild image baked in.
@@ -129,7 +129,7 @@ export class PluginLookup extends Construct {
129
129
  * secret by name at runtime using `CoreConstants.SECRETS_PATH_PREFIX`.
130
130
  *
131
131
  * Create the secret before deploying with:
132
- * pipeline-manager store-token --days 30 --region <region>
132
+ * pipeline-manager infra store-token --days 30 --region <region>
133
133
  */
134
134
  createLambdaFunction() {
135
135
  if (!this._orgId) {
@@ -250,6 +250,12 @@ export class PluginLookup extends Construct {
250
250
  commands: [],
251
251
  dockerfile: null,
252
252
  buildType: 'metadata_only',
253
+ ownerId: null,
254
+ ownerType: null,
255
+ lifecycle: 'production',
256
+ criticality: null,
257
+ labels: {},
258
+ links: [],
253
259
  accessModifier: 'public',
254
260
  isDefault: false,
255
261
  isActive: true,
@@ -282,11 +288,11 @@ export class PluginLookup extends Construct {
282
288
  }
283
289
  /**
284
290
  * Synth plugin with pipeline-manager commands. Cold-start bootstrap for
285
- * the synth step when pre-resolution by `pipeline-manager synth/deploy`
291
+ * the synth step when pre-resolution by `pipeline-manager pipeline synth/deploy`
286
292
  * didn't populate `resolvedPlugins` for the synth plugin. Runs on the
287
293
  * configured `CODEBUILD_DEFAULT_IMAGE` (default `pipeline-bootstrap:1.0`)
288
294
  * and self-bootstraps the real synth via
289
- * `pipeline-manager synth --id ${PIPELINE_ID}`.
295
+ * `pipeline-manager pipeline synth --id ${PIPELINE_ID}`.
290
296
  *
291
297
  * No `installCommands`: the default image already has `pipeline-manager`
292
298
  * baked in (that's the whole point of `pipeline-bootstrap:1.0`). If the
@@ -301,9 +307,9 @@ export class PluginLookup extends Construct {
301
307
  name: 'cdk-synth',
302
308
  primaryOutputDirectory: 'cdk.out',
303
309
  commands: [
304
- 'pipeline-manager synth --id ${PIPELINE_ID} --store-tokens --quiet --no-notices --no-verify-ssl',
310
+ 'pipeline-manager pipeline synth --id ${PIPELINE_ID} --store-tokens --quiet --no-notices --no-verify-ssl',
305
311
  ],
306
312
  };
307
313
  }
308
314
  }
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTFDLDJFQUEyRTtBQUMzRSxpQ0FBaUM7QUFDakMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBcUMzRDs7Ozs7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Q1AsU0FBUyxFQUFFLEVBQUU7WUFDYixlQUFlLEVBQUUsRUFBRTtZQUNuQixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFNBQVMsRUFBRSxlQUFlO1lBQzFCLGNBQWMsRUFBRSxRQUFRO1lBQ3hCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsU0FBUyxFQUFFLElBQUk7WUFDZixTQUFTLEVBQUUsSUFBSTtTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ssUUFBUTtRQUNkLE9BQU87WUFDTCxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDNUIsUUFBUSxFQUFFO2dCQUNSLHVJQUF1STtnQkFDdkksb0lBQW9JO2dCQUNwSSwyR0FBMkc7Z0JBQzNHLFFBQVE7YUFDVDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxTQUFTO1FBQ2QsT0FBTztZQUNMLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRTtZQUM1QixJQUFJLEVBQUUsV0FBVztZQUNqQixzQkFBc0IsRUFBRSxTQUFTO1lBQ2pDLFFBQVEsRUFBRTtnQkFDUixnR0FBZ0c7YUFDakc7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBTWVNURU1fT1JHX0lEIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIFRva2VuLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBSdW50aW1lLCBBcmNoaXRlY3R1cmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnO1xuaW1wb3J0IHsgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvci5qcyc7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcigncGx1Z2luLWxvb2t1cCcpO1xuXG4vLyBFU00tc2FmZSBtb2R1bGUgZGlyZWN0b3J5ICh0aGUgcGFja2FnZSBpcyBgdHlwZTogbW9kdWxlYDsgYF9fZGlybmFtZWAgaXNcbi8vIG5vdCBkZWZpbmVkIHVuZGVyIEVTIG1vZHVsZXMpLlxuY29uc3QgTU9EVUxFX0RJUiA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuaW50ZXJmYWNlIElucHV0UHJvcHMge1xuICByZWFkb25seSBiYXNlVVJMOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdWdpbkZpbHRlcjogUGx1Z2luRmlsdGVyO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIFBsdWdpbkxvb2t1cCBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Mb29rdXBQcm9wcyB7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsYXRmb3JtVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVuaXF1ZUlkOiBVbmlxdWVJZDtcbiAgLyoqIE9yZ2FuaXphdGlvbiBJRCBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIFNlY3JldHMgTWFuYWdlciAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZT86IFJ1bnRpbWU7XG4gIC8qKiBMYW1iZGEgdGltZW91dCAoZGVmYXVsdDogMzBzKSAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG4gIC8qKiBMYW1iZGEgbWVtb3J5IGluIE1CIChkZWZhdWx0OiA1MTIpICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIC8qKiBMb2cgcmV0ZW50aW9uIChkZWZhdWx0OiBPTkVfV0VFSykgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogUmV0ZW50aW9uRGF5cztcbiAgLyoqIFJlc2VydmVkIGNvbmN1cnJlbnQgZXhlY3V0aW9ucyBmb3IgdGhlIGxvb2t1cCBMYW1iZGEgKGRlZmF1bHQ6IDMwKSAqL1xuICByZWFkb25seSByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zPzogbnVtYmVyO1xuICAvKipcbiAgICogUGx1Z2lucyBwcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgc3ludGhgIGZyb20gdGhlIHBsYXRmb3JtIEFQSS5cbiAgICogS2V5ZWQgYnkgYGFsaWFzIHx8IG5hbWVgIChtYXRjaGVzIHRoZSBjb25zdHJ1Y3QncyBub3JtYWxpemUoKSBvdXRwdXQpLlxuICAgKiBXaGVuIGEgbG9va3VwIGhpdHMgdGhpcyBtYXAsIGBwbHVnaW4oKWAgcmV0dXJucyB0aGUgcmVzb2x2ZWQgUGx1Z2luXG4gICAqIGRpcmVjdGx5IOKAlCBubyBjdXN0b20gcmVzb3VyY2UgaXMgY3JlYXRlZC4gVGhpcyBpcyB3aGF0IG1ha2VzIHRoZVxuICAgKiBuYW1lLCB2ZXJzaW9uLCBjb21tYW5kcywgZW52LCBldGMuIGF2YWlsYWJsZSBhdCBzeW50aCB0aW1lIHNvIHRoZSByZXN1bHRpbmdcbiAgICogQ0ZOIHRlbXBsYXRlIHNoaXBzIHdpdGggdGhlIHJlYWwgdmFsdWVzIGJha2VkIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRQbHVnaW5zPzogUmVjb3JkPHN0cmluZywgUGx1Z2luPjtcbn1cblxuLyoqXG4gKiBDREsgQ29uc3RydWN0IHJlc3BvbnNpYmxlIGZvciBsb29raW5nIHVwIHBsdWdpbiBjb25maWd1cmF0aW9ucyBmcm9tIGFuIGV4dGVybmFsIHBsYXRmb3JtXG4gKiB1c2luZyBBV1MgQ2xvdWRGb3JtYXRpb24gQ3VzdG9tIFJlc291cmNlcyBiYWNrZWQgYnkgYSBMYW1iZGEgZnVuY3Rpb24uXG4gKlxuICogVGhpcyBjb25zdHJ1Y3QgY3JlYXRlczpcbiAqIC0gQSBMYW1iZGEgZnVuY3Rpb24gKHBsdWdpbi1sb29rdXAtaGFuZGxlcikgdGhhdCBmZXRjaGVzIHBsdWdpbiBjb25maWdzXG4gKiAtIEEgQ2xvdWRXYXRjaCBMb2cgR3JvdXAgZm9yIHRoZSBMYW1iZGFcbiAqIC0gQSBDdXN0b20gUmVzb3VyY2UgUHJvdmlkZXIgdGhhdCBpbnZva2VzIHRoZSBMYW1iZGFcbiAqIC0gQW4gSUFNIHBvbGljeSBncmFudGluZyB0aGUgTGFtYmRhIGFjY2VzcyB0byB0aGUgY3JlZGVudGlhbHMgc2VjcmV0XG4gKlxuICogIyMgUHJlcmVxdWlzaXRlc1xuICpcbiAqIEJlZm9yZSBkZXBsb3lpbmcsIHN0b3JlIGEgSldUIHRva2VuIGluIFNlY3JldHMgTWFuYWdlcjpcbiAqIGBgYHNoXG4gKiBwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiA8cmVnaW9uPlxuICogYGBgXG4gKlxuICogVGhlIExhbWJkYSByZXNvbHZlcyB0aGUgc2VjcmV0IGJ5IG5hbWUgYXQgcnVudGltZTpcbiAqIGB7U0VDUkVUU19QQVRIX1BSRUZJWH0ve29yZ0lkfS9wbGF0Zm9ybWBcbiAqXG4gKiBAc2VlIGhhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci50cyBmb3IgdGhlIExhbWJkYSBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luTG9va3VwIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcm92aWRlcjogUHJvdmlkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BsYXRmb3JtVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J1bnRpbWU6IFJ1bnRpbWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IER1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZW1vcnlTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29yZ0lkPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQbHVnaW5Mb29rdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLm9yZ2FuaXphdGlvbiB8fCAhcHJvcHMucHJvamVjdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb3RoIG9yZ2FuaXphdGlvbiBhbmQgcHJvamVjdCBhcmUgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdW5pcXVlSWQgPSBwcm9wcy51bmlxdWVJZDtcbiAgICB0aGlzLl9wbGF0Zm9ybVVybCA9IHByb3BzLnBsYXRmb3JtVXJsO1xuICAgIHRoaXMuX29yZ0lkID0gcHJvcHMub3JnSWQ7XG4gICAgdGhpcy5fcnVudGltZSA9IHByb3BzLnJ1bnRpbWUgPz8gUnVudGltZS5OT0RFSlNfMjRfWDtcbiAgICB0aGlzLl90aW1lb3V0ID0gcHJvcHMudGltZW91dCA/PyBEdXJhdGlvbi5zZWNvbmRzKDMwKTtcbiAgICB0aGlzLl9tZW1vcnlTaXplID0gcHJvcHMubWVtb3J5U2l6ZSA/PyBDb25maWcuZ2V0KCdhd3MnKS5sYW1iZGEubWVtb3J5U2l6ZTtcbiAgICB0aGlzLl9yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zID0gcHJvcHMucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucztcbiAgICB0aGlzLl9yZXNvbHZlZFBsdWdpbnMgPSBwcm9wcy5yZXNvbHZlZFBsdWdpbnM7XG5cbiAgICBjb25zdCBvbkV2ZW50SGFuZGxlciA9IHRoaXMuY3JlYXRlTGFtYmRhRnVuY3Rpb24oKTtcblxuICAgIC8vIExvZy1ncm91cCBzdHJhdGVneTpcbiAgICAvLyAgIFByZXZpb3VzIGNvZGUgY3JlYXRlZCBhbiBgQVdTOjpMb2dzOjpMb2dHcm91cGAgcmVzb3VyY2Ugd2l0aCBhblxuICAgIC8vICAgRVhQTElDSVQgbmFtZSAoYC9hd3MvbGFtYmRhL3BsdWdpbi1sb29rdXAtTmApLiBUaGF0IGJyZWFrcyBldmVyeVxuICAgIC8vICAgcmUtZGVwbG95IGFmdGVyIGEgcm9sbGVkLWJhY2sgc3RhY2s6IEFXUyBhdXRvLWNyZWF0ZXMgdGhlIGdyb3VwIG9uXG4gICAgLy8gICBmaXJzdCBMYW1iZGEgaW52b2NhdGlvbiwgdGhlIHJvbGxiYWNrIGxlYXZlcyBpdCBhcyBhbiBvcnBoYW4sIGFuZFxuICAgIC8vICAgdGhlIG5leHQgQ0RLIHJ1biBmYWlscyB3aXRoIFwiUmVzb3VyY2UgLi4uIGFscmVhZHkgZXhpc3RzXCIgYmVjYXVzZVxuICAgIC8vICAgdGhlIGV4cGxpY2l0IG5hbWUgY29sbGlkZXMgd2l0aCB0aGUgb3JwaGFuLlxuICAgIC8vXG4gICAgLy8gICBGaXg6IHVzZSBgTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZSgpYCB0byBhZG9wdC1vci1wYXNzLXRocm91Z2guXG4gICAgLy8gICBJZiB0aGUgZ3JvdXAgZXhpc3RzLCBDREsgcmVmZXJlbmNlcyBpdCB3aXRob3V0IHRyeWluZyB0byByZWNyZWF0ZS5cbiAgICAvLyAgIElmIGl0IGRvZXNuJ3QsIEFXUyBMYW1iZGEgYXV0by1jcmVhdGVzIGl0IG9uIGZpcnN0IGludm9jYXRpb24uXG4gICAgLy8gICBSZXRlbnRpb24gaXMgdGhlbiBzZXQgdmlhIGEgc2VwYXJhdGUgcmV0ZW50aW9uLXBvbGljeSBjdXN0b21cbiAgICAvLyAgIHJlc291cmNlIHdoaWNoIGlzIGlkZW1wb3RlbnQgKHNhZmUgdG8gYXBwbHkgdG8gZXhpc3RpbmcgZ3JvdXBzKS5cbiAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBgL2F3cy9sYW1iZGEvJHt0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLnJlcGxhY2UoLzovZywgJy0nKX1gO1xuICAgIGNvbnN0IGxvZ0dyb3VwID0gTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnbG9nOmdyb3VwJyksXG4gICAgICBsb2dHcm91cE5hbWUsXG4gICAgKTtcblxuICAgIHRoaXMuX3Byb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdyZXNvdXJjZTpwcm92aWRlcicpLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcixcbiAgICAgIGxvZ0dyb3VwLFxuICAgIH0pO1xuXG4gICAgbG9nLmRlYnVnKGBQbHVnaW5Mb29rdXAgaW5pdGlhbGl6ZWQgZm9yICR7cHJvcHMub3JnYW5pemF0aW9ufS8ke3Byb3BzLnByb2plY3R9YCk7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgdXAgYW5kIHJlc29sdmVzIHBsdWdpbiBjb25maWd1cmF0aW9uIHVzaW5nIGVpdGhlciBhIHNpbXBsZSBuYW1lIG9yIGZ1bGwgUGx1Z2luT3B0aW9ucyBvYmplY3RcbiAgICogRHVyaW5nIHN5bnRoZXNpcywgaWYgdGhlIHZhbHVlIGlzIHVucmVzb2x2ZWQgKHRva2VuKSwgcmV0dXJucyBmYWxsYmFjayBwbHVnaW5cbiAgICogRHVyaW5nIGRlcGxveW1lbnQsIGF0dGVtcHRzIHRvIHBhcnNlIHRoZSBhY3R1YWwgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGN1c3RvbSByZXNvdXJjZVxuICAgKiBAcGFyYW0gcGx1Z2luIC0gUGx1Z2luIG5hbWUgKHN0cmluZykgb3IgY29tcGxldGUgUGx1Z2luT3B0aW9ucyBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIFJlc29sdmVkIFBsdWdpbiBvYmplY3Qgb3IgZmFsbGJhY2sgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgcGx1Z2luKHBsdWdpbjogc3RyaW5nIHwgUGx1Z2luT3B0aW9ucyk6IFBsdWdpbiB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLm5vcm1hbGl6ZShwbHVnaW4pO1xuXG4gICAgLy8gUHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHN5bnRoYCBmcm9tIHRoZSBwbGF0Zm9ybSBBUEkuXG4gICAgLy8gU2tpcCB0aGUgY3VzdG9tIHJlc291cmNlIGVudGlyZWx5IOKAlCB3ZSBhbHJlYWR5IGtub3cgdGhlIHBsdWdpbidzXG4gICAgLy8gbmFtZSwgdmVyc2lvbiwgY29tbWFuZHMsIGVudiwgZXRjLiBhdCBzeW50aCB0aW1lLCBzbyB0aGUgcmVzdWx0aW5nIENGTlxuICAgIC8vIHRlbXBsYXRlIGNhbiBzaGlwIHdpdGggdGhlIHJlYWwgQ29kZUJ1aWxkIGltYWdlIGJha2VkIGluLlxuICAgIGNvbnN0IGNhY2hlS2V5ID0gcHJvcHMuYWxpYXMgfHwgcHJvcHMubmFtZTtcbiAgICBjb25zdCBwcmVSZXNvbHZlZCA9IHRoaXMuX3Jlc29sdmVkUGx1Z2lucz8uW2NhY2hlS2V5XTtcbiAgICBpZiAocHJlUmVzb2x2ZWQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIHByZS1yZXNvbHZlZCAoYWxpYXM9JHtjYWNoZUtleX0pIOKAlCBza2lwcGluZyBjdXN0b20gcmVzb3VyY2VgKTtcbiAgICAgIHJldHVybiBwcmVSZXNvbHZlZDtcbiAgICB9XG5cbiAgICBjb25zdCBjdXN0b20gPSB0aGlzLmNyZWF0ZUN1c3RvbVJlc291cmNlKHByb3BzKTtcbiAgICBjb25zdCBlbmNvZGVkID0gY3VzdG9tLmdldEF0dFN0cmluZygnUmVzdWx0VmFsdWUnKTtcblxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZW5jb2RlZCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIHZhbHVlIGlzIHVucmVzb2x2ZWQgKHRva2VuKSBkdXJpbmcgc3ludGhlc2lzIOKAlCB1c2luZyBmYWxsYmFjay4gVGhlIGFjdHVhbCBwbHVnaW4gd2lsbCBiZSByZXNvbHZlZCBhdCBkZXBsb3ltZW50IHRpbWUuYCk7XG4gICAgICByZXR1cm4gdGhpcy5mYWxsYmFjaygpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gQnVmZmVyLmZyb20oZW5jb2RlZCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGVjb2RlZCk7XG5cbiAgICAgIGlmICghZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgIWRhdGEubmFtZSB8fCAhQXJyYXkuaXNBcnJheShkYXRhLmNvbW1hbmRzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGx1Z2luIHJlc3BvbnNlOiBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcyAobmFtZSwgY29tbWFuZHMpJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhIGFzIFBsdWdpbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNc2cgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJztcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIHBsdWdpbiBcIiR7cHJvcHMubmFtZX1cIiBkYXRhOiAke2Vycm9yTXNnfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBzZXJ2ZXMgYXMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXIuXG4gICAqXG4gICAqIEpXVCB0b2tlbiBpcyBzdG9yZWQgaW4gYSBwcmUtZXhpc3RpbmcgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBhdFxuICAgKiBge1NFQ1JFVFNfUEFUSF9QUkVGSVh9L3tvcmdJZH0vcGxhdGZvcm1gLiBUaGUgTGFtYmRhIHJlc29sdmVzIHRoZVxuICAgKiBzZWNyZXQgYnkgbmFtZSBhdCBydW50aW1lIHVzaW5nIGBDb3JlQ29uc3RhbnRzLlNFQ1JFVFNfUEFUSF9QUkVGSVhgLlxuICAgKlxuICAgKiBDcmVhdGUgdGhlIHNlY3JldCBiZWZvcmUgZGVwbG95aW5nIHdpdGg6XG4gICAqICAgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbiAtLWRheXMgMzAgLS1yZWdpb24gPHJlZ2lvbj5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTGFtYmRhRnVuY3Rpb24oKTogTm9kZWpzRnVuY3Rpb24ge1xuICAgIGlmICghdGhpcy5fb3JnSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3JnSWQgaXMgcmVxdWlyZWQgZm9yIFBsdWdpbkxvb2t1cCDigJQgbmVlZGVkIHRvIHJlc29sdmUgdGhlIHBlci1vcmcgcGxhdGZvcm0gc2VjcmV0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNlY3JldE5hbWUgPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgodGhpcy5fb3JnSWQsICdwbGF0Zm9ybScpO1xuXG4gICAgY29uc3QgZm4gPSBuZXcgTm9kZWpzRnVuY3Rpb24odGhpcywgdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUoJ29uZXZlbnQ6aGFuZGxlcicpLCB7XG4gICAgICBydW50aW1lOiB0aGlzLl9ydW50aW1lLFxuICAgICAgdGltZW91dDogdGhpcy5fdGltZW91dCxcbiAgICAgIG1lbW9yeVNpemU6IHRoaXMuX21lbW9yeVNpemUsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBlbnRyeTogam9pbihNT0RVTEVfRElSLCAnLy4uL2hhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci5qcycpLFxuICAgICAgZGVwc0xvY2tGaWxlUGF0aDogam9pbihNT0RVTEVfRElSLCAnLy4uL2hhbmRsZXJzL3BucG0tbG9jay55YW1sJyksXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiB0aGlzLl9yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgUExBVEZPUk1fU0VDUkVUX05BTUU6IHNlY3JldE5hbWUsXG4gICAgICAgIC8vIEFsbG93IHNlbGYtc2lnbmVkIGNlcnRzIHdoZW4gcGxhdGZvcm0gdXNlcyBIVFRQUyB3aXRob3V0IGEgQ0Etc2lnbmVkIGNlcnRpZmljYXRlXG4gICAgICAgIC4uLihwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCcgJiYge1xuICAgICAgICAgIE5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ6ICcwJyxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICBzb3VyY2VNYXA6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgICBleHRlcm5hbE1vZHVsZXM6IFtcbiAgICAgICAgICAvLyBQcm92aWRlZCBieSB0aGUgTGFtYmRhIE5vZGUuanMgcnVudGltZSDigJQgbmV2ZXIgYnVuZGxlLlxuICAgICAgICAgICdAYXdzLXNkay8qJyxcbiAgICAgICAgICAvLyBTeW50aC1vbmx5IGxpYnJhcmllcyB0aGF0IG11c3QgTkVWRVIgZW5kIHVwIGluIGEgTGFtYmRhIGJ1bmRsZS5cbiAgICAgICAgICAvLyBUaGUgaGFuZGxlciBkb2Vzbid0IHVzZSB0aGVtOyB0aGlzIGlzIGEgZ3VhcmQgc28gYSBzdHJheSB0cmFuc2l0aXZlXG4gICAgICAgICAgLy8gaW1wb3J0IChlLmcuIHZpYSBhIGNvbmZpZyBtb2R1bGUgdGhhdCBwdWxscyBpbmZyYXN0cnVjdHVyZS1jb25maWcg4oaSXG4gICAgICAgICAgLy8gYXdzLWNkay1saWIpIGNhbid0IGRyYWcgdGhlIGVudGlyZSB+aHVuZHJlZHMtb2YtTUIgQ0RLIGludG8gdGhlXG4gICAgICAgICAgLy8gYnVuZGxlIGFuZCBPT00ta2lsbCBlc2J1aWxkIGR1cmluZyBjb2xkLXN0YXJ0IHN5bnRoLiBJZiBvbmUgb2YgdGhlc2VcbiAgICAgICAgICAvLyBpcyBldmVyIGdlbnVpbmVseSByZWFjaGVkIGF0IHJ1bnRpbWUgdGhlIExhbWJkYSB3aWxsIGZhaWwgbG91ZGx5IGF0XG4gICAgICAgICAgLy8gaW5pdCAobW9kdWxlIG5vdCBmb3VuZCkgcmF0aGVyIHRoYW4gc2lsZW50bHkgT09NIGF0IHN5bnRoIOKAlCB3aGljaCBpc1xuICAgICAgICAgIC8vIHRoZSBjb3JyZWN0IHNpZ25hbCwgc2luY2UgQ0RLIGhhcyBubyBidXNpbmVzcyBydW5uaW5nIGluIHRoaXMgTGFtYmRhLlxuICAgICAgICAgICdhd3MtY2RrLWxpYicsXG4gICAgICAgICAgJ2F3cy1jZGstbGliLyonLFxuICAgICAgICAgICdjb25zdHJ1Y3RzJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCB0aGUgTGFtYmRhIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQuXG4gICAgLy8gVGhlIHdpbGRjYXJkIHN1ZmZpeCBoYW5kbGVzIHRoZSA2LWNoYXIgcmFuZG9tIElEIHRoYXQgU2VjcmV0cyBNYW5hZ2VyIGFwcGVuZHMuXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoqOio6c2VjcmV0OiR7c2VjcmV0TmFtZX0tKmBdLFxuICAgIH0pKTtcblxuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgZGVmYXVsdCBwbHVnaW4gZmlsdGVyLlxuICAgKiBBY2Nlc3MgY29udHJvbCAob3JnSWQgc2NvcGluZywgcHVibGljL3ByaXZhdGUgdmlzaWJpbGl0eSkgaXMgaGFuZGxlZCBieVxuICAgKiB0aGUgcGxhdGZvcm0ncyBhY2Nlc3MgY29udHJvbCBxdWVyeSBidWlsZGVyIGJhc2VkIG9uIHRoZSBKV1QncyBvcmdhbml6YXRpb25JZC5cbiAgICovXG4gIHByaXZhdGUgZGVmYXVsdEZpbHRlcihuYW1lOiBzdHJpbmcpOiBQbHVnaW5GaWx0ZXIge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplKHBsdWdpbjogc3RyaW5nIHwgUGx1Z2luT3B0aW9ucyk6IFBsdWdpbk9wdGlvbnMge1xuICAgIGlmICh0eXBlb2YgcGx1Z2luID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogcGx1Z2luLFxuICAgICAgICBmaWx0ZXI6IHRoaXMuZGVmYXVsdEZpbHRlcihwbHVnaW4pLFxuICAgICAgICBhbGlhczogYCR7cGx1Z2lufS1hbGlhc2AsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBwbHVnaW4ubmFtZSxcbiAgICAgIGFsaWFzOiBwbHVnaW4uYWxpYXMgPz8gYCR7cGx1Z2luLm5hbWV9LWFsaWFzYCxcbiAgICAgIGZpbHRlcjogcGx1Z2luLmZpbHRlciA/PyB0aGlzLmRlZmF1bHRGaWx0ZXIocGx1Z2luLm5hbWUpLFxuICAgICAgbWV0YWRhdGE6IHBsdWdpbi5tZXRhZGF0YSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDdXN0b21SZXNvdXJjZSBpbnN0YW5jZSB0aGF0IHRyaWdnZXJzIHBsdWdpbiBsb29rdXAgZHVyaW5nIGRlcGxveW1lbnRcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQ3VzdG9tUmVzb3VyY2UocHJvcHM6IFBsdWdpbk9wdGlvbnMpOiBDdXN0b21SZXNvdXJjZSB7XG4gICAgY29uc3QgcmVzb3VyY2VJZCA9IHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKHByb3BzLmFsaWFzIHx8IHByb3BzLm5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCByZXNvdXJjZUlkLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHRoaXMuX3Byb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHJlc291cmNlVHlwZTogJ0N1c3RvbTo6UGx1Z2luTG9va3VwJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYmFzZVVSTDogdGhpcy5fcGxhdGZvcm1VcmwsXG4gICAgICAgIHBsdWdpbkZpbHRlcjogcHJvcHMuZmlsdGVyLFxuICAgICAgfSBhcyBJbnB1dFByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEJhc2UgcGx1Z2luIHNoYXBlIHdpdGggbm8tb3AgZGVmYXVsdHMgZm9yIGZpZWxkcyBDREsgZG9lc24ndCB1c2UuICovXG4gIHByaXZhdGUgc3RhdGljIGJhc2VQbHVnaW4oKTogUGx1Z2luIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcsXG4gICAgICBvcmdJZDogU1lTVEVNX09SR19JRCxcbiAgICAgIGNyZWF0ZWRCeTogJ3N5c3RlbScsXG4gICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgIHVwZGF0ZWRCeTogJ3N5c3RlbScsXG4gICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICAgIG5hbWU6ICdmYWxsYmFjaycsXG4gICAgICBkZXNjcmlwdGlvbjogbnVsbCxcbiAgICAgIGtleXdvcmRzOiBbXSxcbiAgICAgIGNhdGVnb3J5OiAndW5rbm93bicsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgcGx1Z2luVHlwZTogJ0NvZGVCdWlsZFN0ZXAnLFxuICAgICAgY29tcHV0ZVR5cGU6ICdTTUFMTCcsXG4gICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgZmFpbHVyZUJlaGF2aW9yOiAnZmFpbCcsXG4gICAgICBzZWNyZXRzOiBbXSxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6ICdjZGsub3V0JyxcbiAgICAgIGVudjoge30sXG4gICAgICBidWlsZEFyZ3M6IHt9LFxuICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXSxcbiAgICAgIGNvbW1hbmRzOiBbXSxcbiAgICAgIGRvY2tlcmZpbGU6IG51bGwsXG4gICAgICBidWlsZFR5cGU6ICdtZXRhZGF0YV9vbmx5JyxcbiAgICAgIGFjY2Vzc01vZGlmaWVyOiAncHVibGljJyxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRlbGV0ZWRBdDogbnVsbCxcbiAgICAgIGRlbGV0ZWRCeTogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZhbGxiYWNrIGZvciBhIHBsdWdpbiB3aG9zZSBsb29rdXAgcmV0dXJuZWQgbm8gcmVjb3JkIChub3QgaW4gdGhlIHBsYXRmb3JtXG4gICAqIGNhdGFsb2cgZm9yIHRoaXMgb3JnKSBhbmQgc28gY291bGQgbm90IGJlIHByZS1yZXNvbHZlZCBhdCBzeW50aC5cbiAgICpcbiAgICogVGhpcyBzdGVwIEZBSUxTIHRoZSBidWlsZCAoZXhpdCAxKSBvbiBwdXJwb3NlLiBUaGUgcHJldmlvdXMgYmVoYXZpb3VyIOKAlFxuICAgKiBgZWNobyBcIuKAplwiICYmIGV4aXQgMGAg4oCUIHdhcyBhIGZhbHNlIHBvc2l0aXZlOiBhbiB1bnJlc29sdmVkIHNlY3VyaXR5L3F1YWxpdHlcbiAgICogc3RlcCAoZGVwZW5kZW5jeS1jaGVjaywgc2VtZ3JlcCwgc3BvdGJ1Z3MsIOKApikgcmVwb3J0ZWQgdGhlIHN0YWdlIGdyZWVuIHdoaWxlXG4gICAqIHJ1bm5pbmcgbm90aGluZywgZ2l2aW5nIGZhbHNlIGFzc3VyYW5jZSB0aGF0IHNjYW5zL2J1aWxkcyBoYWQgcGFzc2VkLiBBXG4gICAqIHBsdWdpbiBzdGVwIHRoYXQgY2FuJ3QgcnVuIGl0cyBwbHVnaW4gbXVzdCBnbyByZWQsIGNvbnNpc3RlbnQgd2l0aFxuICAgKiBgYmFzZVBsdWdpbigpLmZhaWx1cmVCZWhhdmlvciA9PT0gJ2ZhaWwnYC4gVGhlIG1lc3NhZ2UgaXMgYWN0aW9uYWJsZSBzbyB0aGVcbiAgICogb3BlcmF0b3Iga25vd3MgdGhlIGNhdGFsb2cgaXMgZW1wdHkvaW5jb21wbGV0ZSwgbm90IHRoYXQgdGhlIHRvb2wgY3Jhc2hlZC5cbiAgICovXG4gIHByaXZhdGUgZmFsbGJhY2soKTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uUGx1Z2luTG9va3VwLmJhc2VQbHVnaW4oKSxcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICdlY2hvIFwiRVJST1I6IHBsdWdpbiBsb29rdXAgcmV0dXJuZWQgbm8gcmVjb3JkIOKAlCB0aGlzIHBsdWdpbiBpcyBub3QgaW4gdGhlIHBsYXRmb3JtIGNhdGFsb2cgZm9yIHRoaXMgb3JnLCBzbyB0aGUgc3RlcCBjYW5ub3QgcnVuLlwiID4mMicsXG4gICAgICAgICdlY2hvIFwiVGhpcyBzdGVwIGZhaWxzIGluc3RlYWQgb2YgcGFzc2luZyBhcyBhIG5vLW9wIChhbiB1bnJlc29sdmVkIHBsdWdpbiByZXBvcnRpbmcgc3VjY2VzcyB3b3VsZCBiZSBhIGZhbHNlLXBvc2l0aXZlIGdyZWVuKS5cIiA+JjInLFxuICAgICAgICAnZWNobyBcIkZpeDogbG9hZCB0aGUgcGx1Z2luIGludG8gdGhlIHBsYXRmb3JtIChkZXBsb3kvYmluL2xvYWQtcGx1Z2lucy5zaCksIHRoZW4gcmUtcnVuIHRoZSBwaXBlbGluZS5cIiA+JjInLFxuICAgICAgICAnZXhpdCAxJyxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aCBwbHVnaW4gd2l0aCBwaXBlbGluZS1tYW5hZ2VyIGNvbW1hbmRzLiBDb2xkLXN0YXJ0IGJvb3RzdHJhcCBmb3JcbiAgICogdGhlIHN5bnRoIHN0ZXAgd2hlbiBwcmUtcmVzb2x1dGlvbiBieSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aC9kZXBsb3lgXG4gICAqIGRpZG4ndCBwb3B1bGF0ZSBgcmVzb2x2ZWRQbHVnaW5zYCBmb3IgdGhlIHN5bnRoIHBsdWdpbi4gUnVucyBvbiB0aGVcbiAgICogY29uZmlndXJlZCBgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0VgIChkZWZhdWx0IGBwaXBlbGluZS1ib290c3RyYXA6MS4wYClcbiAgICogYW5kIHNlbGYtYm9vdHN0cmFwcyB0aGUgcmVhbCBzeW50aCB2aWFcbiAgICogYHBpcGVsaW5lLW1hbmFnZXIgc3ludGggLS1pZCAke1BJUEVMSU5FX0lEfWAuXG4gICAqXG4gICAqIE5vIGBpbnN0YWxsQ29tbWFuZHNgOiB0aGUgZGVmYXVsdCBpbWFnZSBhbHJlYWR5IGhhcyBgcGlwZWxpbmUtbWFuYWdlcmBcbiAgICogYmFrZWQgaW4gKHRoYXQncyB0aGUgd2hvbGUgcG9pbnQgb2YgYHBpcGVsaW5lLWJvb3RzdHJhcDoxLjBgKS4gSWYgdGhlXG4gICAqIG9wZXJhdG9yIHBvaW50cyBDT0RFQlVJTERfREVGQVVMVF9JTUFHRSBhdCBhbiBpbWFnZSBsYWNraW5nIGl0IChlLmcuXG4gICAqIHZhbmlsbGEgYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo3LjApLCB0aGlzIHN0ZXAgZXhpdHMgMTI3IOKAlCBmaXggdGhhdFxuICAgKiBieSB1c2luZyBhbiBpbWFnZSB3aXRoIHBpcGVsaW5lLW1hbmFnZXIgcmF0aGVyIHRoYW4gcGFwZXJpbmcgb3ZlciBpdFxuICAgKiB3aXRoIGEgcGVyLWJ1aWxkIGBucG0gaW5zdGFsbCAtZ2AuXG4gICAqL1xuICBwdWJsaWMgYm9vdHN0cmFwKCk6IFBsdWdpbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLlBsdWdpbkxvb2t1cC5iYXNlUGx1Z2luKCksXG4gICAgICBuYW1lOiAnY2RrLXN5bnRoJyxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6ICdjZGsub3V0JyxcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICdwaXBlbGluZS1tYW5hZ2VyIHN5bnRoIC0taWQgJHtQSVBFTElORV9JRH0gLS1zdG9yZS10b2tlbnMgLS1xdWlldCAtLW5vLW5vdGljZXMgLS1uby12ZXJpZnktc3NsJyxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTFDLDJFQUEyRTtBQUMzRSxpQ0FBaUM7QUFDakMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBcUMzRDs7Ozs7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Q1AsU0FBUyxFQUFFLEVBQUU7WUFDYixlQUFlLEVBQUUsRUFBRTtZQUNuQixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFNBQVMsRUFBRSxlQUFlO1lBQzFCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLElBQUk7WUFDZixTQUFTLEVBQUUsWUFBWTtZQUN2QixXQUFXLEVBQUUsSUFBSTtZQUNqQixNQUFNLEVBQUUsRUFBRTtZQUNWLEtBQUssRUFBRSxFQUFFO1lBQ1QsY0FBYyxFQUFFLFFBQVE7WUFDeEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSyxRQUFRO1FBQ2QsT0FBTztZQUNMLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRTtZQUM1QixRQUFRLEVBQUU7Z0JBQ1IsdUlBQXVJO2dCQUN2SSxvSUFBb0k7Z0JBQ3BJLDJHQUEyRztnQkFDM0csUUFBUTthQUNUO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLFNBQVM7UUFDZCxPQUFPO1lBQ0wsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzVCLElBQUksRUFBRSxXQUFXO1lBQ2pCLHNCQUFzQixFQUFFLFNBQVM7WUFDakMsUUFBUSxFQUFFO2dCQUNSLHlHQUF5RzthQUMxRztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIFNZU1RFTV9PUkdfSUQgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbkZpbHRlciwgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgVG9rZW4sIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50LCBFZmZlY3QgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFJ1bnRpbWUsIEFyY2hpdGVjdHVyZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQgeyBMb2dHcm91cCwgUmV0ZW50aW9uRGF5cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luT3B0aW9ucyB9IGZyb20gJy4vc3RlcC10eXBlcy5qcyc7XG5pbXBvcnQgeyBDb25maWcsIENvcmVDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZy5qcyc7XG5pbXBvcnQgeyBVbmlxdWVJZCB9IGZyb20gJy4uL2NvcmUvaWQtZ2VuZXJhdG9yLmpzJztcblxuY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKCdwbHVnaW4tbG9va3VwJyk7XG5cbi8vIEVTTS1zYWZlIG1vZHVsZSBkaXJlY3RvcnkgKHRoZSBwYWNrYWdlIGlzIGB0eXBlOiBtb2R1bGVgOyBgX19kaXJuYW1lYCBpc1xuLy8gbm90IGRlZmluZWQgdW5kZXIgRVMgbW9kdWxlcykuXG5jb25zdCBNT0RVTEVfRElSID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5pbnRlcmZhY2UgSW5wdXRQcm9wcyB7XG4gIHJlYWRvbmx5IGJhc2VVUkw6IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luRmlsdGVyOiBQbHVnaW5GaWx0ZXI7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgUGx1Z2luTG9va3VwIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkxvb2t1cFByb3BzIHtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb2plY3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICAvKiogT3JnYW5pemF0aW9uIElEIGZvciByZXNvbHZpbmcgcGVyLW9yZyBzZWNyZXRzIGZyb20gU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lPzogUnVudGltZTtcbiAgLyoqIExhbWJkYSB0aW1lb3V0IChkZWZhdWx0OiAzMHMpICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcbiAgLyoqIExhbWJkYSBtZW1vcnkgaW4gTUIgKGRlZmF1bHQ6IDUxMikgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgLyoqIExvZyByZXRlbnRpb24gKGRlZmF1bHQ6IE9ORV9XRUVLKSAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb24/OiBSZXRlbnRpb25EYXlzO1xuICAvKiogUmVzZXJ2ZWQgY29uY3VycmVudCBleGVjdXRpb25zIGZvciB0aGUgbG9va3VwIExhbWJkYSAoZGVmYXVsdDogMzApICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLlxuICAgKiBLZXllZCBieSBgYWxpYXMgfHwgbmFtZWAgKG1hdGNoZXMgdGhlIGNvbnN0cnVjdCdzIG5vcm1hbGl6ZSgpIG91dHB1dCkuXG4gICAqIFdoZW4gYSBsb29rdXAgaGl0cyB0aGlzIG1hcCwgYHBsdWdpbigpYCByZXR1cm5zIHRoZSByZXNvbHZlZCBQbHVnaW5cbiAgICogZGlyZWN0bHkg4oCUIG5vIGN1c3RvbSByZXNvdXJjZSBpcyBjcmVhdGVkLiBUaGlzIGlzIHdoYXQgbWFrZXMgdGhlXG4gICAqIG5hbWUsIHZlcnNpb24sIGNvbW1hbmRzLCBlbnYsIGV0Yy4gYXZhaWxhYmxlIGF0IHN5bnRoIHRpbWUgc28gdGhlIHJlc3VsdGluZ1xuICAgKiBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCB2YWx1ZXMgYmFrZWQgaW4uXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xufVxuXG4vKipcbiAqIENESyBDb25zdHJ1Y3QgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgcGx1Z2luIGNvbmZpZ3VyYXRpb25zIGZyb20gYW4gZXh0ZXJuYWwgcGxhdGZvcm1cbiAqIHVzaW5nIEFXUyBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2VzIGJhY2tlZCBieSBhIExhbWJkYSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzOlxuICogLSBBIExhbWJkYSBmdW5jdGlvbiAocGx1Z2luLWxvb2t1cC1oYW5kbGVyKSB0aGF0IGZldGNoZXMgcGx1Z2luIGNvbmZpZ3NcbiAqIC0gQSBDbG91ZFdhdGNoIExvZyBHcm91cCBmb3IgdGhlIExhbWJkYVxuICogLSBBIEN1c3RvbSBSZXNvdXJjZSBQcm92aWRlciB0aGF0IGludm9rZXMgdGhlIExhbWJkYVxuICogLSBBbiBJQU0gcG9saWN5IGdyYW50aW5nIHRoZSBMYW1iZGEgYWNjZXNzIHRvIHRoZSBjcmVkZW50aWFscyBzZWNyZXRcbiAqXG4gKiAjIyBQcmVyZXF1aXNpdGVzXG4gKlxuICogQmVmb3JlIGRlcGxveWluZywgc3RvcmUgYSBKV1QgdG9rZW4gaW4gU2VjcmV0cyBNYW5hZ2VyOlxuICogYGBgc2hcbiAqIHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1kYXlzIDMwIC0tcmVnaW9uIDxyZWdpb24+XG4gKiBgYGBcbiAqXG4gKiBUaGUgTGFtYmRhIHJlc29sdmVzIHRoZSBzZWNyZXQgYnkgbmFtZSBhdCBydW50aW1lOlxuICogYHtTRUNSRVRTX1BBVEhfUFJFRklYfS97b3JnSWR9L3BsYXRmb3JtYFxuICpcbiAqIEBzZWUgaGFuZGxlcnMvcGx1Z2luLWxvb2t1cC1oYW5kbGVyLnRzIGZvciB0aGUgTGFtYmRhIGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb29rdXAgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF91bmlxdWVJZDogVW5pcXVlSWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3ZpZGVyOiBQcm92aWRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnVudGltZTogUnVudGltZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogRHVyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lbW9yeVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3JnSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc29sdmVkUGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIFBsdWdpbj47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBsdWdpbkxvb2t1cFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmICghcHJvcHMub3JnYW5pemF0aW9uIHx8ICFwcm9wcy5wcm9qZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggb3JnYW5pemF0aW9uIGFuZCBwcm9qZWN0IGFyZSByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl91bmlxdWVJZCA9IHByb3BzLnVuaXF1ZUlkO1xuICAgIHRoaXMuX3BsYXRmb3JtVXJsID0gcHJvcHMucGxhdGZvcm1Vcmw7XG4gICAgdGhpcy5fb3JnSWQgPSBwcm9wcy5vcmdJZDtcbiAgICB0aGlzLl9ydW50aW1lID0gcHJvcHMucnVudGltZSA/PyBSdW50aW1lLk5PREVKU18yNF9YO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBwcm9wcy50aW1lb3V0ID8/IER1cmF0aW9uLnNlY29uZHMoMzApO1xuICAgIHRoaXMuX21lbW9yeVNpemUgPSBwcm9wcy5tZW1vcnlTaXplID8/IENvbmZpZy5nZXQoJ2F3cycpLmxhbWJkYS5tZW1vcnlTaXplO1xuICAgIHRoaXMuX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMgPSBwcm9wcy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zO1xuICAgIHRoaXMuX3Jlc29sdmVkUGx1Z2lucyA9IHByb3BzLnJlc29sdmVkUGx1Z2lucztcblxuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbigpO1xuXG4gICAgLy8gTG9nLWdyb3VwIHN0cmF0ZWd5OlxuICAgIC8vICAgUHJldmlvdXMgY29kZSBjcmVhdGVkIGFuIGBBV1M6OkxvZ3M6OkxvZ0dyb3VwYCByZXNvdXJjZSB3aXRoIGFuXG4gICAgLy8gICBFWFBMSUNJVCBuYW1lIChgL2F3cy9sYW1iZGEvcGx1Z2luLWxvb2t1cC1OYCkuIFRoYXQgYnJlYWtzIGV2ZXJ5XG4gICAgLy8gICByZS1kZXBsb3kgYWZ0ZXIgYSByb2xsZWQtYmFjayBzdGFjazogQVdTIGF1dG8tY3JlYXRlcyB0aGUgZ3JvdXAgb25cbiAgICAvLyAgIGZpcnN0IExhbWJkYSBpbnZvY2F0aW9uLCB0aGUgcm9sbGJhY2sgbGVhdmVzIGl0IGFzIGFuIG9ycGhhbiwgYW5kXG4gICAgLy8gICB0aGUgbmV4dCBDREsgcnVuIGZhaWxzIHdpdGggXCJSZXNvdXJjZSAuLi4gYWxyZWFkeSBleGlzdHNcIiBiZWNhdXNlXG4gICAgLy8gICB0aGUgZXhwbGljaXQgbmFtZSBjb2xsaWRlcyB3aXRoIHRoZSBvcnBoYW4uXG4gICAgLy9cbiAgICAvLyAgIEZpeDogdXNlIGBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKClgIHRvIGFkb3B0LW9yLXBhc3MtdGhyb3VnaC5cbiAgICAvLyAgIElmIHRoZSBncm91cCBleGlzdHMsIENESyByZWZlcmVuY2VzIGl0IHdpdGhvdXQgdHJ5aW5nIHRvIHJlY3JlYXRlLlxuICAgIC8vICAgSWYgaXQgZG9lc24ndCwgQVdTIExhbWJkYSBhdXRvLWNyZWF0ZXMgaXQgb24gZmlyc3QgaW52b2NhdGlvbi5cbiAgICAvLyAgIFJldGVudGlvbiBpcyB0aGVuIHNldCB2aWEgYSBzZXBhcmF0ZSByZXRlbnRpb24tcG9saWN5IGN1c3RvbVxuICAgIC8vICAgcmVzb3VyY2Ugd2hpY2ggaXMgaWRlbXBvdGVudCAoc2FmZSB0byBhcHBseSB0byBleGlzdGluZyBncm91cHMpLlxuICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IGAvYXdzL2xhbWJkYS8ke3RoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdwbHVnaW46bG9va3VwJykucmVwbGFjZSgvOi9nLCAnLScpfWA7XG4gICAgY29uc3QgbG9nR3JvdXAgPSBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdsb2c6Z3JvdXAnKSxcbiAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICApO1xuXG4gICAgdGhpcy5fcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUoJ3Jlc291cmNlOnByb3ZpZGVyJyksIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyLFxuICAgICAgbG9nR3JvdXAsXG4gICAgfSk7XG5cbiAgICBsb2cuZGVidWcoYFBsdWdpbkxvb2t1cCBpbml0aWFsaXplZCBmb3IgJHtwcm9wcy5vcmdhbml6YXRpb259LyR7cHJvcHMucHJvamVjdH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCBhbmQgcmVzb2x2ZXMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gdXNpbmcgZWl0aGVyIGEgc2ltcGxlIG5hbWUgb3IgZnVsbCBQbHVnaW5PcHRpb25zIG9iamVjdFxuICAgKiBEdXJpbmcgc3ludGhlc2lzLCBpZiB0aGUgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pLCByZXR1cm5zIGZhbGxiYWNrIHBsdWdpblxuICAgKiBEdXJpbmcgZGVwbG95bWVudCwgYXR0ZW1wdHMgdG8gcGFyc2UgdGhlIGFjdHVhbCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgY3VzdG9tIHJlc291cmNlXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBQbHVnaW4gbmFtZSAoc3RyaW5nKSBvciBjb21wbGV0ZSBQbHVnaW5PcHRpb25zIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgUmVzb2x2ZWQgUGx1Z2luIG9iamVjdCBvciBmYWxsYmFjayBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyBwbHVnaW4ocGx1Z2luOiBzdHJpbmcgfCBQbHVnaW5PcHRpb25zKTogUGx1Z2luIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMubm9ybWFsaXplKHBsdWdpbik7XG5cbiAgICAvLyBQcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGhgIGZyb20gdGhlIHBsYXRmb3JtIEFQSS5cbiAgICAvLyBTa2lwIHRoZSBjdXN0b20gcmVzb3VyY2UgZW50aXJlbHkg4oCUIHdlIGFscmVhZHkga25vdyB0aGUgcGx1Z2luJ3NcbiAgICAvLyBuYW1lLCB2ZXJzaW9uLCBjb21tYW5kcywgZW52LCBldGMuIGF0IHN5bnRoIHRpbWUsIHNvIHRoZSByZXN1bHRpbmcgQ0ZOXG4gICAgLy8gdGVtcGxhdGUgY2FuIHNoaXAgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAgY29uc3QgY2FjaGVLZXkgPSBwcm9wcy5hbGlhcyB8fCBwcm9wcy5uYW1lO1xuICAgIGNvbnN0IHByZVJlc29sdmVkID0gdGhpcy5fcmVzb2x2ZWRQbHVnaW5zPy5bY2FjaGVLZXldO1xuICAgIGlmIChwcmVSZXNvbHZlZCkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgcHJlLXJlc29sdmVkIChhbGlhcz0ke2NhY2hlS2V5fSkg4oCUIHNraXBwaW5nIGN1c3RvbSByZXNvdXJjZWApO1xuICAgICAgcmV0dXJuIHByZVJlc29sdmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UocHJvcHMpO1xuICAgIGNvbnN0IGVuY29kZWQgPSBjdXN0b20uZ2V0QXR0U3RyaW5nKCdSZXN1bHRWYWx1ZScpO1xuXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChlbmNvZGVkKSkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pIGR1cmluZyBzeW50aGVzaXMg4oCUIHVzaW5nIGZhbGxiYWNrLiBUaGUgYWN0dWFsIHBsdWdpbiB3aWxsIGJlIHJlc29sdmVkIGF0IGRlcGxveW1lbnQgdGltZS5gKTtcbiAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBCdWZmZXIuZnJvbShlbmNvZGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkKTtcblxuICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCAhZGF0YS5uYW1lIHx8ICFBcnJheS5pc0FycmF5KGRhdGEuY29tbWFuZHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwbHVnaW4gcmVzcG9uc2U6IG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzIChuYW1lLCBjb21tYW5kcyknKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGEgYXMgUGx1Z2luO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIGRhdGE6ICR7ZXJyb3JNc2d9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IHNlcnZlcyBhcyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlci5cbiAgICpcbiAgICogSldUIHRva2VuIGlzIHN0b3JlZCBpbiBhIHByZS1leGlzdGluZyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGF0XG4gICAqIGB7U0VDUkVUU19QQVRIX1BSRUZJWH0ve29yZ0lkfS9wbGF0Zm9ybWAuIFRoZSBMYW1iZGEgcmVzb2x2ZXMgdGhlXG4gICAqIHNlY3JldCBieSBuYW1lIGF0IHJ1bnRpbWUgdXNpbmcgYENvcmVDb25zdGFudHMuU0VDUkVUU19QQVRIX1BSRUZJWGAuXG4gICAqXG4gICAqIENyZWF0ZSB0aGUgc2VjcmV0IGJlZm9yZSBkZXBsb3lpbmcgd2l0aDpcbiAgICogICBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiA8cmVnaW9uPlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVMYW1iZGFGdW5jdGlvbigpOiBOb2RlanNGdW5jdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9vcmdJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcmdJZCBpcyByZXF1aXJlZCBmb3IgUGx1Z2luTG9va3VwIOKAlCBuZWVkZWQgdG8gcmVzb2x2ZSB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQnKTtcbiAgICB9XG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aCh0aGlzLl9vcmdJZCwgJ3BsYXRmb3JtJyk7XG5cbiAgICBjb25zdCBmbiA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnb25ldmVudDpoYW5kbGVyJyksIHtcbiAgICAgIHJ1bnRpbWU6IHRoaXMuX3J1bnRpbWUsXG4gICAgICB0aW1lb3V0OiB0aGlzLl90aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZTogdGhpcy5fbWVtb3J5U2l6ZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIGVudHJ5OiBqb2luKE1PRFVMRV9ESVIsICcvLi4vaGFuZGxlcnMvcGx1Z2luLWxvb2t1cC1oYW5kbGVyLmpzJyksXG4gICAgICBkZXBzTG9ja0ZpbGVQYXRoOiBqb2luKE1PRFVMRV9ESVIsICcvLi4vaGFuZGxlcnMvcG5wbS1sb2NrLnlhbWwnKSxcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IHRoaXMuX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBQTEFURk9STV9TRUNSRVRfTkFNRTogc2VjcmV0TmFtZSxcbiAgICAgICAgLy8gQWxsb3cgc2VsZi1zaWduZWQgY2VydHMgd2hlbiBwbGF0Zm9ybSB1c2VzIEhUVFBTIHdpdGhvdXQgYSBDQS1zaWduZWQgY2VydGlmaWNhdGVcbiAgICAgICAgLi4uKHByb2Nlc3MuZW52Lk5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgPT09ICcwJyAmJiB7XG4gICAgICAgICAgTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRDogJzAnLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgIHNvdXJjZU1hcDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgICAgIGV4dGVybmFsTW9kdWxlczogW1xuICAgICAgICAgIC8vIFByb3ZpZGVkIGJ5IHRoZSBMYW1iZGEgTm9kZS5qcyBydW50aW1lIOKAlCBuZXZlciBidW5kbGUuXG4gICAgICAgICAgJ0Bhd3Mtc2RrLyonLFxuICAgICAgICAgIC8vIFN5bnRoLW9ubHkgbGlicmFyaWVzIHRoYXQgbXVzdCBORVZFUiBlbmQgdXAgaW4gYSBMYW1iZGEgYnVuZGxlLlxuICAgICAgICAgIC8vIFRoZSBoYW5kbGVyIGRvZXNuJ3QgdXNlIHRoZW07IHRoaXMgaXMgYSBndWFyZCBzbyBhIHN0cmF5IHRyYW5zaXRpdmVcbiAgICAgICAgICAvLyBpbXBvcnQgKGUuZy4gdmlhIGEgY29uZmlnIG1vZHVsZSB0aGF0IHB1bGxzIGluZnJhc3RydWN0dXJlLWNvbmZpZyDihpJcbiAgICAgICAgICAvLyBhd3MtY2RrLWxpYikgY2FuJ3QgZHJhZyB0aGUgZW50aXJlIH5odW5kcmVkcy1vZi1NQiBDREsgaW50byB0aGVcbiAgICAgICAgICAvLyBidW5kbGUgYW5kIE9PTS1raWxsIGVzYnVpbGQgZHVyaW5nIGNvbGQtc3RhcnQgc3ludGguIElmIG9uZSBvZiB0aGVzZVxuICAgICAgICAgIC8vIGlzIGV2ZXIgZ2VudWluZWx5IHJlYWNoZWQgYXQgcnVudGltZSB0aGUgTGFtYmRhIHdpbGwgZmFpbCBsb3VkbHkgYXRcbiAgICAgICAgICAvLyBpbml0IChtb2R1bGUgbm90IGZvdW5kKSByYXRoZXIgdGhhbiBzaWxlbnRseSBPT00gYXQgc3ludGgg4oCUIHdoaWNoIGlzXG4gICAgICAgICAgLy8gdGhlIGNvcnJlY3Qgc2lnbmFsLCBzaW5jZSBDREsgaGFzIG5vIGJ1c2luZXNzIHJ1bm5pbmcgaW4gdGhpcyBMYW1iZGEuXG4gICAgICAgICAgJ2F3cy1jZGstbGliJyxcbiAgICAgICAgICAnYXdzLWNkay1saWIvKicsXG4gICAgICAgICAgJ2NvbnN0cnVjdHMnLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IHRoZSBMYW1iZGEgcGVybWlzc2lvbiB0byByZWFkIHRoZSBwZXItb3JnIHBsYXRmb3JtIHNlY3JldC5cbiAgICAvLyBUaGUgd2lsZGNhcmQgc3VmZml4IGhhbmRsZXMgdGhlIDYtY2hhciByYW5kb20gSUQgdGhhdCBTZWNyZXRzIE1hbmFnZXIgYXBwZW5kcy5cbiAgICBmbi5hZGRUb1JvbGVQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOnNlY3JldHNtYW5hZ2VyOio6KjpzZWNyZXQ6JHtzZWNyZXROYW1lfS0qYF0sXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBkZWZhdWx0IHBsdWdpbiBmaWx0ZXIuXG4gICAqIEFjY2VzcyBjb250cm9sIChvcmdJZCBzY29waW5nLCBwdWJsaWMvcHJpdmF0ZSB2aXNpYmlsaXR5KSBpcyBoYW5kbGVkIGJ5XG4gICAqIHRoZSBwbGF0Zm9ybSdzIGFjY2VzcyBjb250cm9sIHF1ZXJ5IGJ1aWxkZXIgYmFzZWQgb24gdGhlIEpXVCdzIG9yZ2FuaXphdGlvbklkLlxuICAgKi9cbiAgcHJpdmF0ZSBkZWZhdWx0RmlsdGVyKG5hbWU6IHN0cmluZyk6IFBsdWdpbkZpbHRlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemUocGx1Z2luOiBzdHJpbmcgfCBQbHVnaW5PcHRpb25zKTogUGx1Z2luT3B0aW9ucyB7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBwbHVnaW4sXG4gICAgICAgIGZpbHRlcjogdGhpcy5kZWZhdWx0RmlsdGVyKHBsdWdpbiksXG4gICAgICAgIGFsaWFzOiBgJHtwbHVnaW59LWFsaWFzYCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgYWxpYXM6IHBsdWdpbi5hbGlhcyA/PyBgJHtwbHVnaW4ubmFtZX0tYWxpYXNgLFxuICAgICAgZmlsdGVyOiBwbHVnaW4uZmlsdGVyID8/IHRoaXMuZGVmYXVsdEZpbHRlcihwbHVnaW4ubmFtZSksXG4gICAgICBtZXRhZGF0YTogcGx1Z2luLm1ldGFkYXRhLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEN1c3RvbVJlc291cmNlIGluc3RhbmNlIHRoYXQgdHJpZ2dlcnMgcGx1Z2luIGxvb2t1cCBkdXJpbmcgZGVwbG95bWVudFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVDdXN0b21SZXNvdXJjZShwcm9wczogUGx1Z2luT3B0aW9ucyk6IEN1c3RvbVJlc291cmNlIHtcbiAgICBjb25zdCByZXNvdXJjZUlkID0gdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUocHJvcHMuYWxpYXMgfHwgcHJvcHMubmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIHJlc291cmNlSWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5fcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpQbHVnaW5Mb29rdXAnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBiYXNlVVJMOiB0aGlzLl9wbGF0Zm9ybVVybCxcbiAgICAgICAgcGx1Z2luRmlsdGVyOiBwcm9wcy5maWx0ZXIsXG4gICAgICB9IGFzIElucHV0UHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQmFzZSBwbHVnaW4gc2hhcGUgd2l0aCBuby1vcCBkZWZhdWx0cyBmb3IgZmllbGRzIENESyBkb2Vzbid0IHVzZS4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYmFzZVBsdWdpbigpOiBQbHVnaW4ge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyxcbiAgICAgIG9yZ0lkOiBTWVNURU1fT1JHX0lELFxuICAgICAgY3JlYXRlZEJ5OiAnc3lzdGVtJyxcbiAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgdXBkYXRlZEJ5OiAnc3lzdGVtJyxcbiAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgbmFtZTogJ2ZhbGxiYWNrJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBudWxsLFxuICAgICAga2V5d29yZHM6IFtdLFxuICAgICAgY2F0ZWdvcnk6ICd1bmtub3duJyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBtZXRhZGF0YToge30sXG4gICAgICBwbHVnaW5UeXBlOiAnQ29kZUJ1aWxkU3RlcCcsXG4gICAgICBjb21wdXRlVHlwZTogJ1NNQUxMJyxcbiAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICBmYWlsdXJlQmVoYXZpb3I6ICdmYWlsJyxcbiAgICAgIHNlY3JldHM6IFtdLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogJ2Nkay5vdXQnLFxuICAgICAgZW52OiB7fSxcbiAgICAgIGJ1aWxkQXJnczoge30sXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IFtdLFxuICAgICAgY29tbWFuZHM6IFtdLFxuICAgICAgZG9ja2VyZmlsZTogbnVsbCxcbiAgICAgIGJ1aWxkVHlwZTogJ21ldGFkYXRhX29ubHknLFxuICAgICAgb3duZXJJZDogbnVsbCxcbiAgICAgIG93bmVyVHlwZTogbnVsbCxcbiAgICAgIGxpZmVjeWNsZTogJ3Byb2R1Y3Rpb24nLFxuICAgICAgY3JpdGljYWxpdHk6IG51bGwsXG4gICAgICBsYWJlbHM6IHt9LFxuICAgICAgbGlua3M6IFtdLFxuICAgICAgYWNjZXNzTW9kaWZpZXI6ICdwdWJsaWMnLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgZGVsZXRlZEF0OiBudWxsLFxuICAgICAgZGVsZXRlZEJ5OiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmFsbGJhY2sgZm9yIGEgcGx1Z2luIHdob3NlIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQgKG5vdCBpbiB0aGUgcGxhdGZvcm1cbiAgICogY2F0YWxvZyBmb3IgdGhpcyBvcmcpIGFuZCBzbyBjb3VsZCBub3QgYmUgcHJlLXJlc29sdmVkIGF0IHN5bnRoLlxuICAgKlxuICAgKiBUaGlzIHN0ZXAgRkFJTFMgdGhlIGJ1aWxkIChleGl0IDEpIG9uIHB1cnBvc2UuIFRoZSBwcmV2aW91cyBiZWhhdmlvdXIg4oCUXG4gICAqIGBlY2hvIFwi4oCmXCIgJiYgZXhpdCAwYCDigJQgd2FzIGEgZmFsc2UgcG9zaXRpdmU6IGFuIHVucmVzb2x2ZWQgc2VjdXJpdHkvcXVhbGl0eVxuICAgKiBzdGVwIChkZXBlbmRlbmN5LWNoZWNrLCBzZW1ncmVwLCBzcG90YnVncywg4oCmKSByZXBvcnRlZCB0aGUgc3RhZ2UgZ3JlZW4gd2hpbGVcbiAgICogcnVubmluZyBub3RoaW5nLCBnaXZpbmcgZmFsc2UgYXNzdXJhbmNlIHRoYXQgc2NhbnMvYnVpbGRzIGhhZCBwYXNzZWQuIEFcbiAgICogcGx1Z2luIHN0ZXAgdGhhdCBjYW4ndCBydW4gaXRzIHBsdWdpbiBtdXN0IGdvIHJlZCwgY29uc2lzdGVudCB3aXRoXG4gICAqIGBiYXNlUGx1Z2luKCkuZmFpbHVyZUJlaGF2aW9yID09PSAnZmFpbCdgLiBUaGUgbWVzc2FnZSBpcyBhY3Rpb25hYmxlIHNvIHRoZVxuICAgKiBvcGVyYXRvciBrbm93cyB0aGUgY2F0YWxvZyBpcyBlbXB0eS9pbmNvbXBsZXRlLCBub3QgdGhhdCB0aGUgdG9vbCBjcmFzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBmYWxsYmFjaygpOiBQbHVnaW4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5QbHVnaW5Mb29rdXAuYmFzZVBsdWdpbigpLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ2VjaG8gXCJFUlJPUjogcGx1Z2luIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQg4oCUIHRoaXMgcGx1Z2luIGlzIG5vdCBpbiB0aGUgcGxhdGZvcm0gY2F0YWxvZyBmb3IgdGhpcyBvcmcsIHNvIHRoZSBzdGVwIGNhbm5vdCBydW4uXCIgPiYyJyxcbiAgICAgICAgJ2VjaG8gXCJUaGlzIHN0ZXAgZmFpbHMgaW5zdGVhZCBvZiBwYXNzaW5nIGFzIGEgbm8tb3AgKGFuIHVucmVzb2x2ZWQgcGx1Z2luIHJlcG9ydGluZyBzdWNjZXNzIHdvdWxkIGJlIGEgZmFsc2UtcG9zaXRpdmUgZ3JlZW4pLlwiID4mMicsXG4gICAgICAgICdlY2hvIFwiRml4OiBsb2FkIHRoZSBwbHVnaW4gaW50byB0aGUgcGxhdGZvcm0gKGRlcGxveS9iaW4vbG9hZC1wbHVnaW5zLnNoKSwgdGhlbiByZS1ydW4gdGhlIHBpcGVsaW5lLlwiID4mMicsXG4gICAgICAgICdleGl0IDEnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoIHBsdWdpbiB3aXRoIHBpcGVsaW5lLW1hbmFnZXIgY29tbWFuZHMuIENvbGQtc3RhcnQgYm9vdHN0cmFwIGZvclxuICAgKiB0aGUgc3ludGggc3RlcCB3aGVuIHByZS1yZXNvbHV0aW9uIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoL2RlcGxveWBcbiAgICogZGlkbid0IHBvcHVsYXRlIGByZXNvbHZlZFBsdWdpbnNgIGZvciB0aGUgc3ludGggcGx1Z2luLiBSdW5zIG9uIHRoZVxuICAgKiBjb25maWd1cmVkIGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWAgKGRlZmF1bHQgYHBpcGVsaW5lLWJvb3RzdHJhcDoxLjBgKVxuICAgKiBhbmQgc2VsZi1ib290c3RyYXBzIHRoZSByZWFsIHN5bnRoIHZpYVxuICAgKiBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aCAtLWlkICR7UElQRUxJTkVfSUR9YC5cbiAgICpcbiAgICogTm8gYGluc3RhbGxDb21tYW5kc2A6IHRoZSBkZWZhdWx0IGltYWdlIGFscmVhZHkgaGFzIGBwaXBlbGluZS1tYW5hZ2VyYFxuICAgKiBiYWtlZCBpbiAodGhhdCdzIHRoZSB3aG9sZSBwb2ludCBvZiBgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMGApLiBJZiB0aGVcbiAgICogb3BlcmF0b3IgcG9pbnRzIENPREVCVUlMRF9ERUZBVUxUX0lNQUdFIGF0IGFuIGltYWdlIGxhY2tpbmcgaXQgKGUuZy5cbiAgICogdmFuaWxsYSBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMCksIHRoaXMgc3RlcCBleGl0cyAxMjcg4oCUIGZpeCB0aGF0XG4gICAqIGJ5IHVzaW5nIGFuIGltYWdlIHdpdGggcGlwZWxpbmUtbWFuYWdlciByYXRoZXIgdGhhbiBwYXBlcmluZyBvdmVyIGl0XG4gICAqIHdpdGggYSBwZXItYnVpbGQgYG5wbSBpbnN0YWxsIC1nYC5cbiAgICovXG4gIHB1YmxpYyBib290c3RyYXAoKTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uUGx1Z2luTG9va3VwLmJhc2VQbHVnaW4oKSxcbiAgICAgIG5hbWU6ICdjZGstc3ludGgnLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogJ2Nkay5vdXQnLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ3BpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGggLS1pZCAke1BJUEVMSU5FX0lEfSAtLXN0b3JlLXRva2VucyAtLXF1aWV0IC0tbm8tbm90aWNlcyAtLW5vLXZlcmlmeS1zc2wnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -30,8 +30,8 @@
30
30
  "constructs": "10.7.0",
31
31
  "jsonwebtoken": "9.0.3",
32
32
  "uuid": "14.0.1",
33
- "@pipeline-builder/api-core": "3.4.104",
34
- "@pipeline-builder/pipeline-data": "3.4.108"
33
+ "@pipeline-builder/api-core": "3.4.105",
34
+ "@pipeline-builder/pipeline-data": "3.4.109"
35
35
  },
36
36
  "keywords": [
37
37
  "ci-cd",
@@ -87,7 +87,7 @@
87
87
  "access": "public",
88
88
  "registry": "https://registry.npmjs.org/"
89
89
  },
90
- "version": "3.4.122",
90
+ "version": "3.4.123",
91
91
  "bugs": {
92
92
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
93
93
  },