@finbourne/lusid-sdk-angular18 0.11.10068 → 0.11.10114
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/.generated/api/allocationEvents.service.mjs +626 -0
- package/esm2022/lib/.generated/api/allocationMaps.service.mjs +700 -0
- package/esm2022/lib/.generated/api/api.mjs +6 -2
- package/esm2022/lib/.generated/api/entities.service.mjs +69 -1
- package/esm2022/lib/.generated/api/fundStructures.service.mjs +303 -1
- package/esm2022/lib/.generated/api/funds.service.mjs +5 -1
- package/esm2022/lib/.generated/api/identifierDefinitions.service.mjs +4 -4
- package/esm2022/lib/.generated/api/propertyDefinitions.service.mjs +8 -8
- package/esm2022/lib/.generated/api/recs.service.mjs +13 -1
- package/esm2022/lib/.generated/api/transfers.service.mjs +91 -1
- package/esm2022/lib/.generated/model/aggregateNumericTolerance.mjs +1 -1
- package/esm2022/lib/.generated/model/allocationEvent.mjs +2 -0
- package/esm2022/lib/.generated/model/allocationEventBookRequest.mjs +12 -0
- package/esm2022/lib/.generated/model/allocationEventReallocateRequest.mjs +2 -0
- package/esm2022/lib/.generated/model/allocationEventRequest.mjs +2 -0
- package/esm2022/lib/.generated/model/allocationMap.mjs +2 -0
- package/esm2022/lib/.generated/model/allocationMapAllocation.mjs +12 -0
- package/esm2022/lib/.generated/model/allocationMapBasis.mjs +2 -0
- package/esm2022/lib/.generated/model/allocationMapBasisValue.mjs +12 -0
- package/esm2022/lib/.generated/model/allocationMapEventBasis.mjs +2 -0
- package/esm2022/lib/.generated/model/allocationMapException.mjs +12 -0
- package/esm2022/lib/.generated/model/allocationMapFixedFactor.mjs +12 -0
- package/esm2022/lib/.generated/model/allocationMapParticipants.mjs +2 -0
- package/esm2022/lib/.generated/model/allocationMapRequest.mjs +2 -0
- package/esm2022/lib/.generated/model/allocationMapResolution.mjs +2 -0
- package/esm2022/lib/.generated/model/allocationMapResolveRequest.mjs +2 -0
- package/esm2022/lib/.generated/model/bondForwardModelOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/bondLookupModelOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/bucketSetResult.mjs +1 -1
- package/esm2022/lib/.generated/model/cashFlowDetail.mjs +1 -1
- package/esm2022/lib/.generated/model/cdsIndex.mjs +1 -1
- package/esm2022/lib/.generated/model/cdsModelOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/consentEvent.mjs +1 -1
- package/esm2022/lib/.generated/model/coreAttributeOptionalityTolerance.mjs +1 -1
- package/esm2022/lib/.generated/model/coreDateTolerance.mjs +1 -1
- package/esm2022/lib/.generated/model/coreStringCrossTolerance.mjs +1 -1
- package/esm2022/lib/.generated/model/corporateActionSource.mjs +1 -1
- package/esm2022/lib/.generated/model/corporateActionSourceEntity.mjs +2 -0
- package/esm2022/lib/.generated/model/createDerivedPropertyDefinitionRequest.mjs +3 -2
- package/esm2022/lib/.generated/model/createIdentifierDefinitionRequest.mjs +3 -2
- package/esm2022/lib/.generated/model/createMatchingRulesetRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/createPropertyDefinitionRequest.mjs +3 -2
- package/esm2022/lib/.generated/model/createRecDefinitionRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/creditDefaultSwap.mjs +1 -1
- package/esm2022/lib/.generated/model/emptyModelOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/equityModelOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/fixedSchedule.mjs +1 -1
- package/esm2022/lib/.generated/model/flexibleLoan.mjs +1 -1
- package/esm2022/lib/.generated/model/flexibleLoanPricerOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/floatSchedule.mjs +1 -1
- package/esm2022/lib/.generated/model/fund.mjs +1 -1
- package/esm2022/lib/.generated/model/fundDefinitionRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/fundRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/fundStructure.mjs +1 -1
- package/esm2022/lib/.generated/model/fundStructureAllocationBasis.mjs +2 -0
- package/esm2022/lib/.generated/model/fundStructureEdge.mjs +1 -1
- package/esm2022/lib/.generated/model/fundStructureEdgeTarget.mjs +1 -1
- package/esm2022/lib/.generated/model/fundStructureMemberRequest.mjs +2 -0
- package/esm2022/lib/.generated/model/fundStructureNode.mjs +1 -11
- package/esm2022/lib/.generated/model/fundStructureRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/fundingLegModelOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/fxForwardModelOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/fxForwardPipsCurveData.mjs +1 -1
- package/esm2022/lib/.generated/model/fxForwardTenorPipsCurveData.mjs +1 -1
- package/esm2022/lib/.generated/model/hullWhiteModelOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/identifierDefinition.mjs +3 -2
- package/esm2022/lib/.generated/model/indexModelOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/inflationLinkedBond.mjs +1 -1
- package/esm2022/lib/.generated/model/matchingRuleset.mjs +1 -1
- package/esm2022/lib/.generated/model/modelOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/modelOptionsType.mjs +3 -2
- package/esm2022/lib/.generated/model/models.mjs +28 -1
- package/esm2022/lib/.generated/model/navType.mjs +1 -1
- package/esm2022/lib/.generated/model/navTypeDefinition.mjs +1 -1
- package/esm2022/lib/.generated/model/opaqueModelOptions.mjs +3 -2
- package/esm2022/lib/.generated/model/pagedResourceListOfAllocationEvent.mjs +2 -0
- package/esm2022/lib/.generated/model/pagedResourceListOfAllocationMap.mjs +2 -0
- package/esm2022/lib/.generated/model/pikSchedule.mjs +1 -1
- package/esm2022/lib/.generated/model/placementUpdateRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/propertyDefinition.mjs +3 -2
- package/esm2022/lib/.generated/model/propertyDefinitionSearchResult.mjs +3 -2
- package/esm2022/lib/.generated/model/propertyDomain.mjs +3 -2
- package/esm2022/lib/.generated/model/queryBucketCashFlowDrillDownRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/recDatasetSchema.mjs +1 -1
- package/esm2022/lib/.generated/model/recDefSource.mjs +1 -1
- package/esm2022/lib/.generated/model/recDefinition.mjs +1 -1
- package/esm2022/lib/.generated/model/recResultHoldingItem.mjs +1 -1
- package/esm2022/lib/.generated/model/recResultItem.mjs +1 -1
- package/esm2022/lib/.generated/model/recResultSettlementActivityItem.mjs +1 -1
- package/esm2022/lib/.generated/model/recResultTransactionItem.mjs +1 -1
- package/esm2022/lib/.generated/model/recReviewRequirementRule.mjs +1 -1
- package/esm2022/lib/.generated/model/settleExpectedActivityRuleNames.mjs +12 -0
- package/esm2022/lib/.generated/model/settleExpectedActivityWritebackConfiguration.mjs +2 -0
- package/esm2022/lib/.generated/model/settleExpectedActivityWritebackSuggestion.mjs +2 -0
- package/esm2022/lib/.generated/model/simpleModelOptions.mjs +19 -0
- package/esm2022/lib/.generated/model/subscriptionDefinition.mjs +1 -1
- package/esm2022/lib/.generated/model/totalReturnSwap.mjs +1 -1
- package/esm2022/lib/.generated/model/transactionEntityLink.mjs +1 -1
- package/esm2022/lib/.generated/model/updateIdentifierDefinitionRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/updateMatchingRulesetRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/updateRecDefinitionRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/valuationPointDataResponse.mjs +1 -1
- package/esm2022/lib/.generated/model/writebackConfiguration.mjs +2 -0
- package/esm2022/lib/.generated/model/writebackResultPattern.mjs +12 -0
- package/esm2022/lib/.generated/model/writebackSuggestion.mjs +2 -0
- package/fesm2022/finbourne-lusid-sdk-angular18.mjs +2141 -252
- package/fesm2022/finbourne-lusid-sdk-angular18.mjs.map +2 -2
- package/lib/.generated/api/allocationEvents.service.d.ts +242 -0
- package/lib/.generated/api/allocationMaps.service.d.ts +277 -0
- package/lib/.generated/api/api.d.ts +5 -1
- package/lib/.generated/api/entities.service.d.ts +31 -0
- package/lib/.generated/api/fundStructures.service.d.ts +131 -1
- package/lib/.generated/api/funds.service.d.ts +2 -0
- package/lib/.generated/api/identifierDefinitions.service.d.ts +6 -6
- package/lib/.generated/api/propertyDefinitions.service.d.ts +14 -14
- package/lib/.generated/api/recs.service.d.ts +5 -1
- package/lib/.generated/api/transfers.service.d.ts +37 -0
- package/lib/.generated/model/aggregateNumericTolerance.d.ts +4 -4
- package/lib/.generated/model/allocationEvent.d.ts +71 -0
- package/lib/.generated/model/allocationEventBookRequest.d.ts +19 -0
- package/lib/.generated/model/allocationEventReallocateRequest.d.ts +24 -0
- package/lib/.generated/model/allocationEventRequest.d.ts +50 -0
- package/lib/.generated/model/allocationMap.d.ts +42 -0
- package/lib/.generated/model/allocationMapAllocation.d.ts +35 -0
- package/lib/.generated/model/allocationMapBasis.d.ts +30 -0
- package/lib/.generated/model/allocationMapBasisValue.d.ts +23 -0
- package/lib/.generated/model/allocationMapEventBasis.d.ts +21 -0
- package/lib/.generated/model/allocationMapException.d.ts +35 -0
- package/lib/.generated/model/allocationMapFixedFactor.d.ts +23 -0
- package/lib/.generated/model/allocationMapParticipants.d.ts +33 -0
- package/lib/.generated/model/allocationMapRequest.d.ts +41 -0
- package/lib/.generated/model/allocationMapResolution.d.ts +56 -0
- package/lib/.generated/model/allocationMapResolveRequest.d.ts +32 -0
- package/lib/.generated/model/bondForwardModelOptions.d.ts +3 -2
- package/lib/.generated/model/bondLookupModelOptions.d.ts +3 -2
- package/lib/.generated/model/bucketSetResult.d.ts +4 -0
- package/lib/.generated/model/cashFlowDetail.d.ts +9 -1
- package/lib/.generated/model/cdsIndex.d.ts +1 -1
- package/lib/.generated/model/cdsModelOptions.d.ts +3 -2
- package/lib/.generated/model/consentEvent.d.ts +2 -2
- package/lib/.generated/model/coreAttributeOptionalityTolerance.d.ts +1 -1
- package/lib/.generated/model/coreDateTolerance.d.ts +2 -2
- package/lib/.generated/model/coreStringCrossTolerance.d.ts +1 -1
- package/lib/.generated/model/corporateActionSource.d.ts +2 -0
- package/lib/.generated/model/corporateActionSourceEntity.d.ts +54 -0
- package/lib/.generated/model/createDerivedPropertyDefinitionRequest.d.ts +3 -2
- package/lib/.generated/model/createIdentifierDefinitionRequest.d.ts +3 -2
- package/lib/.generated/model/createMatchingRulesetRequest.d.ts +5 -0
- package/lib/.generated/model/createPropertyDefinitionRequest.d.ts +3 -2
- package/lib/.generated/model/createRecDefinitionRequest.d.ts +8 -1
- package/lib/.generated/model/creditDefaultSwap.d.ts +1 -1
- package/lib/.generated/model/emptyModelOptions.d.ts +3 -2
- package/lib/.generated/model/equityModelOptions.d.ts +3 -2
- package/lib/.generated/model/fixedSchedule.d.ts +16 -0
- package/lib/.generated/model/flexibleLoan.d.ts +4 -0
- package/lib/.generated/model/flexibleLoanPricerOptions.d.ts +3 -2
- package/lib/.generated/model/floatSchedule.d.ts +16 -0
- package/lib/.generated/model/fund.d.ts +5 -1
- package/lib/.generated/model/fundDefinitionRequest.d.ts +5 -1
- package/lib/.generated/model/fundRequest.d.ts +1 -1
- package/lib/.generated/model/fundStructure.d.ts +8 -3
- package/lib/.generated/model/fundStructureAllocationBasis.d.ts +25 -0
- package/lib/.generated/model/fundStructureEdge.d.ts +8 -2
- package/lib/.generated/model/fundStructureEdgeTarget.d.ts +4 -4
- package/lib/.generated/model/fundStructureMemberRequest.d.ts +22 -0
- package/lib/.generated/model/fundStructureNode.d.ts +9 -1
- package/lib/.generated/model/fundStructureRequest.d.ts +13 -9
- package/lib/.generated/model/fundingLegModelOptions.d.ts +3 -2
- package/lib/.generated/model/fxForwardModelOptions.d.ts +3 -2
- package/lib/.generated/model/fxForwardPipsCurveData.d.ts +4 -0
- package/lib/.generated/model/fxForwardTenorPipsCurveData.d.ts +4 -0
- package/lib/.generated/model/hullWhiteModelOptions.d.ts +3 -2
- package/lib/.generated/model/identifierDefinition.d.ts +3 -2
- package/lib/.generated/model/indexModelOptions.d.ts +3 -2
- package/lib/.generated/model/inflationLinkedBond.d.ts +16 -0
- package/lib/.generated/model/matchingRuleset.d.ts +5 -0
- package/lib/.generated/model/modelOptions.d.ts +3 -2
- package/lib/.generated/model/modelOptionsType.d.ts +2 -1
- package/lib/.generated/model/models.d.ts +27 -0
- package/lib/.generated/model/navType.d.ts +4 -0
- package/lib/.generated/model/navTypeDefinition.d.ts +4 -0
- package/lib/.generated/model/opaqueModelOptions.d.ts +3 -2
- package/lib/.generated/model/pagedResourceListOfAllocationEvent.d.ts +19 -0
- package/lib/.generated/model/pagedResourceListOfAllocationMap.d.ts +19 -0
- package/lib/.generated/model/pikSchedule.d.ts +3 -1
- package/lib/.generated/model/placementUpdateRequest.d.ts +1 -1
- package/lib/.generated/model/propertyDefinition.d.ts +3 -2
- package/lib/.generated/model/propertyDefinitionSearchResult.d.ts +3 -2
- package/lib/.generated/model/propertyDomain.d.ts +2 -1
- package/lib/.generated/model/queryBucketCashFlowDrillDownRequest.d.ts +4 -0
- package/lib/.generated/model/recDatasetSchema.d.ts +1 -1
- package/lib/.generated/model/recDefSource.d.ts +1 -1
- package/lib/.generated/model/recDefinition.d.ts +8 -1
- package/lib/.generated/model/recResultHoldingItem.d.ts +5 -0
- package/lib/.generated/model/recResultSettlementActivityItem.d.ts +5 -0
- package/lib/.generated/model/recResultTransactionItem.d.ts +5 -0
- package/lib/.generated/model/recReviewRequirementRule.d.ts +1 -1
- package/lib/.generated/model/settleExpectedActivityRuleNames.d.ts +27 -0
- package/lib/.generated/model/settleExpectedActivityWritebackConfiguration.d.ts +30 -0
- package/lib/.generated/model/settleExpectedActivityWritebackSuggestion.d.ts +25 -0
- package/lib/.generated/model/simpleModelOptions.d.ts +46 -0
- package/lib/.generated/model/subscriptionDefinition.d.ts +1 -1
- package/lib/.generated/model/totalReturnSwap.d.ts +1 -1
- package/lib/.generated/model/transactionEntityLink.d.ts +1 -1
- package/lib/.generated/model/updateIdentifierDefinitionRequest.d.ts +4 -0
- package/lib/.generated/model/updateMatchingRulesetRequest.d.ts +5 -0
- package/lib/.generated/model/updateRecDefinitionRequest.d.ts +8 -1
- package/lib/.generated/model/valuationPointDataResponse.d.ts +4 -0
- package/lib/.generated/model/writebackConfiguration.d.ts +10 -0
- package/lib/.generated/model/writebackResultPattern.d.ts +27 -0
- package/lib/.generated/model/writebackSuggestion.d.ts +10 -0
- package/package.json +1 -1
|
@@ -0,0 +1,626 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LUSID API
|
|
3
|
+
* # Introduction This page documents the [LUSID APIs](../../../api/swagger), which allows authorised clients to query and update their data within the LUSID platform. SDKs to interact with the LUSID APIs are available in the following languages and frameworks: * [C#](https://github.com/finbourne/lusid-sdk-csharp) * [Java](https://github.com/finbourne/lusid-sdk-java) * [JavaScript](https://github.com/finbourne/lusid-sdk-js) * [Python](https://github.com/finbourne/lusid-sdk-python) * [Angular](https://github.com/finbourne/lusid-sdk-angular) The LUSID platform is made up of a number of sub-applications. You can find the API / swagger documentation by following the links in the table below. | Application | Description | API / Swagger Documentation | |---------------|-----------------------------------------------------------------------------------|------------------------------------------------------| | LUSID | Open, API-first, developer-friendly investment data platform. | [Swagger](../../../api/swagger/index.html) | | Web app | User-facing front end for LUSID. | [Swagger](../../../app/swagger/index.html) | | Scheduler | Automated job scheduler. | [Swagger](../../../scheduler2/swagger/index.html) | | Insights | Monitoring and troubleshooting service. | [Swagger](../../../insights/swagger/index.html) | | Identity | Identity management for LUSID (in conjunction with Access) | [Swagger](../../../identity/swagger/index.html) | | Access | Access control for LUSID (in conjunction with Identity) | [Swagger](../../../access/swagger/index.html) | | Drive | Secure file repository and manager for collaboration. | [Swagger](../../../drive/swagger/index.html) | | Luminesce | Data virtualisation service (query data from multiple providers, including LUSID) | [Swagger](../../../honeycomb/swagger/index.html) | | Notification | Notification service. | [Swagger](../../../notification/swagger/index.html) | | Configuration | File store for secrets and other sensitive information. | [Swagger](../../../configuration/swagger/index.html) | | Workflow | Workflow service. | [Swagger](../../../workflow/swagger/index.html) | # Error Codes | Code|Name|Description | | ---|---|--- | | <a name=\"-10\">-10</a>|Server Configuration Error| | | <a name=\"-1\">-1</a>|Unknown error|An unexpected error was encountered on our side. | | <a name=\"102\">102</a>|Version Not Found| | | <a name=\"103\">103</a>|Api Rate Limit Violation| | | <a name=\"104\">104</a>|Instrument Not Found| | | <a name=\"105\">105</a>|Property Not Found| | | <a name=\"106\">106</a>|Portfolio Recursion Depth| | | <a name=\"108\">108</a>|Group Not Found| | | <a name=\"109\">109</a>|Portfolio Not Found| | | <a name=\"110\">110</a>|Property Schema Not Found| | | <a name=\"111\">111</a>|Portfolio Ancestry Not Found| | | <a name=\"112\">112</a>|Portfolio With Id Already Exists| | | <a name=\"113\">113</a>|Orphaned Portfolio| | | <a name=\"119\">119</a>|Missing Base Claims| | | <a name=\"121\">121</a>|Property Not Defined| | | <a name=\"122\">122</a>|Cannot Delete System Property| | | <a name=\"123\">123</a>|Cannot Modify Immutable Property Field| | | <a name=\"124\">124</a>|Property Already Exists| | | <a name=\"125\">125</a>|Invalid Property Life Time| | | <a name=\"126\">126</a>|Property Constraint Style Excludes Properties| | | <a name=\"127\">127</a>|Cannot Modify Default Data Type| | | <a name=\"128\">128</a>|Group Already Exists| | | <a name=\"129\">129</a>|No Such Data Type| | | <a name=\"130\">130</a>|Undefined Value For Data Type| | | <a name=\"131\">131</a>|Unsupported Value Type Defined On Data Type| | | <a name=\"132\">132</a>|Validation Error| | | <a name=\"133\">133</a>|Loop Detected In Group Hierarchy| | | <a name=\"134\">134</a>|Undefined Acceptable Values| | | <a name=\"135\">135</a>|Sub Group Already Exists| | | <a name=\"138\">138</a>|Price Source Not Found| | | <a name=\"139\">139</a>|Analytic Store Not Found| | | <a name=\"141\">141</a>|Analytic Store Already Exists| | | <a name=\"143\">143</a>|Client Instrument Already Exists| | | <a name=\"144\">144</a>|Duplicate In Parameter Set| | | <a name=\"147\">147</a>|Results Not Found| | | <a name=\"148\">148</a>|Order Field Not In Result Set| | | <a name=\"149\">149</a>|Operation Failed| | | <a name=\"150\">150</a>|Elastic Search Error| | | <a name=\"151\">151</a>|Invalid Parameter Value| | | <a name=\"153\">153</a>|Command Processing Failure| | | <a name=\"154\">154</a>|Entity State Construction Failure| | | <a name=\"155\">155</a>|Entity Timeline Does Not Exist| | | <a name=\"156\">156</a>|Concurrency Conflict Failure| | | <a name=\"157\">157</a>|Invalid Request| | | <a name=\"158\">158</a>|Event Publish Unknown| | | <a name=\"159\">159</a>|Event Query Failure| | | <a name=\"160\">160</a>|Blob Did Not Exist| | | <a name=\"162\">162</a>|Sub System Request Failure| | | <a name=\"163\">163</a>|Sub System Configuration Failure| | | <a name=\"165\">165</a>|Failed To Delete| | | <a name=\"166\">166</a>|Upsert Client Instrument Failure| | | <a name=\"167\">167</a>|Illegal As At Interval| | | <a name=\"168\">168</a>|Illegal Bitemporal Query| | | <a name=\"169\">169</a>|Invalid Alternate Id| | | <a name=\"170\">170</a>|Cannot Add Non-Writable Properties To Entity| | | <a name=\"171\">171</a>|Entity Already Exists In Group| | | <a name=\"172\">172</a>|Entity With Id Does Not Exist| | | <a name=\"173\">173</a>|Entity With Id Already Exists| | | <a name=\"174\">174</a>|Derived Portfolio Details Do Not Exist| | | <a name=\"175\">175</a>|Entity Not In Group| | | <a name=\"176\">176</a>|Portfolio With Name Already Exists| | | <a name=\"177\">177</a>|Invalid Transactions| | | <a name=\"178\">178</a>|Reference Portfolio Not Found| | | <a name=\"179\">179</a>|Duplicate Id| | | <a name=\"180\">180</a>|Command Retrieval Failure| | | <a name=\"181\">181</a>|Data Filter Application Failure| | | <a name=\"182\">182</a>|Search Failed| | | <a name=\"183\">183</a>|Movements Engine Configuration Key Failure| | | <a name=\"184\">184</a>|Fx Rate Source Not Found| | | <a name=\"185\">185</a>|Accrual Source Not Found| | | <a name=\"186\">186</a>|Access Denied| | | <a name=\"187\">187</a>|Invalid Identity Token| | | <a name=\"188\">188</a>|Invalid Request Headers| | | <a name=\"189\">189</a>|Price Not Found| | | <a name=\"190\">190</a>|Invalid Sub Holding Keys Provided| | | <a name=\"191\">191</a>|Duplicate Sub Holding Keys Provided| | | <a name=\"192\">192</a>|Cut Definition Not Found| | | <a name=\"193\">193</a>|Cut Definition Invalid| | | <a name=\"194\">194</a>|Time Variant Property Deletion Date Unspecified| | | <a name=\"195\">195</a>|Perpetual Property Deletion Date Specified| | | <a name=\"196\">196</a>|Time Variant Property Upsert Date Unspecified| | | <a name=\"197\">197</a>|Perpetual Property Upsert Date Specified| | | <a name=\"200\">200</a>|Invalid Unit For Data Type| | | <a name=\"201\">201</a>|Invalid Type For Data Type| | | <a name=\"202\">202</a>|Invalid Value For Data Type| | | <a name=\"203\">203</a>|Unit Not Defined For Data Type| | | <a name=\"204\">204</a>|Units Not Supported On Data Type| | | <a name=\"205\">205</a>|Cannot Specify Units On Data Type| | | <a name=\"206\">206</a>|Unit Schema Inconsistent With Data Type| | | <a name=\"207\">207</a>|Unit Definition Not Specified| | | <a name=\"208\">208</a>|Duplicate Unit Definitions Specified| | | <a name=\"209\">209</a>|Invalid Units Definition| | | <a name=\"210\">210</a>|Invalid Instrument Identifier Unit| | | <a name=\"211\">211</a>|Holdings Adjustment Does Not Exist| | | <a name=\"212\">212</a>|Could Not Build Excel Url| | | <a name=\"213\">213</a>|Could Not Get Excel Version| | | <a name=\"214\">214</a>|Instrument By Code Not Found| | | <a name=\"215\">215</a>|Entity Schema Does Not Exist| | | <a name=\"216\">216</a>|Feature Not Supported On Portfolio Type| | | <a name=\"217\">217</a>|Quote Not Found| | | <a name=\"218\">218</a>|Invalid Quote Identifier| | | <a name=\"219\">219</a>|Invalid Metric For Data Type| | | <a name=\"220\">220</a>|Invalid Instrument Definition| | | <a name=\"221\">221</a>|Instrument Upsert Failure| | | <a name=\"222\">222</a>|Reference Portfolio Request Not Supported| | | <a name=\"223\">223</a>|Transaction Portfolio Request Not Supported| | | <a name=\"224\">224</a>|Invalid Property Value Assignment| | | <a name=\"230\">230</a>|Transaction Type Not Found| | | <a name=\"231\">231</a>|Transaction Type Duplication| | | <a name=\"232\">232</a>|Portfolio Does Not Exist At Given Date| | | <a name=\"233\">233</a>|Query Parser Failure| | | <a name=\"234\">234</a>|Duplicate Constituent| | | <a name=\"235\">235</a>|Unresolved Instrument Constituent| | | <a name=\"236\">236</a>|Unresolved Instrument In Transition| | | <a name=\"237\">237</a>|Missing Side Definitions| | | <a name=\"240\">240</a>|Duplicate Calculations Failure| | | <a name=\"299\">299</a>|Invalid Recipe| | | <a name=\"300\">300</a>|Missing Recipe| | | <a name=\"301\">301</a>|Dependencies| | | <a name=\"304\">304</a>|Portfolio Preprocess Failure| | | <a name=\"310\">310</a>|Valuation Engine Failure| | | <a name=\"311\">311</a>|Task Factory Failure| | | <a name=\"312\">312</a>|Task Evaluation Failure| | | <a name=\"313\">313</a>|Task Generation Failure| | | <a name=\"314\">314</a>|Engine Configuration Failure| | | <a name=\"315\">315</a>|Model Specification Failure| | | <a name=\"320\">320</a>|Market Data Key Failure| | | <a name=\"321\">321</a>|Market Resolver Failure| | | <a name=\"322\">322</a>|Market Data Failure| | | <a name=\"330\">330</a>|Curve Failure| | | <a name=\"331\">331</a>|Volatility Surface Failure| | | <a name=\"332\">332</a>|Volatility Cube Failure| | | <a name=\"350\">350</a>|Instrument Failure| | | <a name=\"351\">351</a>|Cash Flows Failure| | | <a name=\"352\">352</a>|Reference Data Failure| | | <a name=\"360\">360</a>|Aggregation Failure| | | <a name=\"361\">361</a>|Aggregation Measure Failure| | | <a name=\"370\">370</a>|Result Retrieval Failure| | | <a name=\"371\">371</a>|Result Processing Failure| | | <a name=\"372\">372</a>|Vendor Result Processing Failure| | | <a name=\"373\">373</a>|Vendor Result Mapping Failure| | | <a name=\"374\">374</a>|Vendor Library Unauthorised| | | <a name=\"375\">375</a>|Vendor Connectivity Error| | | <a name=\"376\">376</a>|Vendor Interface Error| | | <a name=\"377\">377</a>|Vendor Pricing Failure| | | <a name=\"378\">378</a>|Vendor Translation Failure| | | <a name=\"379\">379</a>|Vendor Key Mapping Failure| | | <a name=\"380\">380</a>|Vendor Reflection Failure| | | <a name=\"381\">381</a>|Vendor Process Failure| | | <a name=\"382\">382</a>|Vendor System Failure| | | <a name=\"390\">390</a>|Attempt To Upsert Duplicate Quotes| | | <a name=\"391\">391</a>|Corporate Action Source Does Not Exist| | | <a name=\"392\">392</a>|Corporate Action Source Already Exists| | | <a name=\"393\">393</a>|Instrument Identifier Already In Use| | | <a name=\"394\">394</a>|Properties Not Found| | | <a name=\"395\">395</a>|Batch Operation Aborted| | | <a name=\"400\">400</a>|Invalid Iso4217 Currency Code| | | <a name=\"401\">401</a>|Cannot Assign Instrument Identifier To Currency| | | <a name=\"402\">402</a>|Cannot Assign Currency Identifier To Non Currency| | | <a name=\"403\">403</a>|Currency Instrument Cannot Be Deleted| | | <a name=\"404\">404</a>|Currency Instrument Cannot Have Economic Definition| | | <a name=\"405\">405</a>|Currency Instrument Cannot Have Lookthrough Portfolio| | | <a name=\"406\">406</a>|Cannot Create Currency Instrument With Multiple Identifiers| | | <a name=\"407\">407</a>|Specified Currency Is Undefined| | | <a name=\"410\">410</a>|Index Does Not Exist| | | <a name=\"411\">411</a>|Sort Field Does Not Exist| | | <a name=\"413\">413</a>|Negative Pagination Parameters| | | <a name=\"414\">414</a>|Invalid Search Syntax| | | <a name=\"415\">415</a>|Filter Execution Timeout| | | <a name=\"420\">420</a>|Side Definition Inconsistent| | | <a name=\"450\">450</a>|Invalid Quote Access Metadata Rule| | | <a name=\"451\">451</a>|Access Metadata Not Found| | | <a name=\"452\">452</a>|Invalid Access Metadata Identifier| | | <a name=\"460\">460</a>|Standard Resource Not Found| | | <a name=\"461\">461</a>|Standard Resource Conflict| | | <a name=\"462\">462</a>|Calendar Not Found| | | <a name=\"463\">463</a>|Date In A Calendar Not Found| | | <a name=\"464\">464</a>|Invalid Date Source Data| | | <a name=\"465\">465</a>|Invalid Timezone| | | <a name=\"601\">601</a>|Person Identifier Already In Use| | | <a name=\"602\">602</a>|Person Not Found| | | <a name=\"603\">603</a>|Cannot Set Identifier| | | <a name=\"617\">617</a>|Invalid Recipe Specification In Request| | | <a name=\"618\">618</a>|Inline Recipe Deserialisation Failure| | | <a name=\"619\">619</a>|Identifier Types Not Set For Entity| | | <a name=\"620\">620</a>|Cannot Delete All Client Defined Identifiers| | | <a name=\"650\">650</a>|The Order requested was not found.| | | <a name=\"654\">654</a>|The Allocation requested was not found.| | | <a name=\"655\">655</a>|Cannot build the fx forward target with the given holdings.| | | <a name=\"656\">656</a>|Group does not contain expected entities.| | | <a name=\"665\">665</a>|Destination directory not found| | | <a name=\"667\">667</a>|Relation definition already exists| | | <a name=\"672\">672</a>|Could not retrieve file contents| | | <a name=\"673\">673</a>|Missing entitlements for entities in Group| | | <a name=\"674\">674</a>|Next Best Action not found| | | <a name=\"676\">676</a>|Relation definition not defined| | | <a name=\"677\">677</a>|Invalid entity identifier for relation| | | <a name=\"681\">681</a>|Sorting by specified field not supported|One or more of the provided fields to order by were either invalid or not supported. | | <a name=\"682\">682</a>|Too many fields to sort by|The number of fields to sort the data by exceeds the number allowed by the endpoint | | <a name=\"684\">684</a>|Sequence Not Found| | | <a name=\"685\">685</a>|Sequence Already Exists| | | <a name=\"686\">686</a>|Non-cycling sequence has been exhausted| | | <a name=\"687\">687</a>|Legal Entity Identifier Already In Use| | | <a name=\"688\">688</a>|Legal Entity Not Found| | | <a name=\"689\">689</a>|The supplied pagination token is invalid| | | <a name=\"690\">690</a>|Property Type Is Not Supported| | | <a name=\"691\">691</a>|Multiple Tax-lots For Currency Type Is Not Supported| | | <a name=\"692\">692</a>|This endpoint does not support impersonation| | | <a name=\"693\">693</a>|Entity type is not supported for Relationship| | | <a name=\"694\">694</a>|Relationship Validation Failure| | | <a name=\"695\">695</a>|Relationship Not Found| | | <a name=\"697\">697</a>|Derived Property Formula No Longer Valid| | | <a name=\"698\">698</a>|Story is not available| | | <a name=\"703\">703</a>|Corporate Action Does Not Exist| | | <a name=\"720\">720</a>|The provided sort and filter combination is not valid| | | <a name=\"721\">721</a>|A2B generation failed| | | <a name=\"722\">722</a>|Aggregated Return Calculation Failure| | | <a name=\"723\">723</a>|Custom Entity Definition Identifier Already In Use| | | <a name=\"724\">724</a>|Custom Entity Definition Not Found| | | <a name=\"725\">725</a>|The Placement requested was not found.| | | <a name=\"726\">726</a>|The Execution requested was not found.| | | <a name=\"727\">727</a>|The Block requested was not found.| | | <a name=\"728\">728</a>|The Participation requested was not found.| | | <a name=\"729\">729</a>|The Package requested was not found.| | | <a name=\"730\">730</a>|The OrderInstruction requested was not found.| | | <a name=\"732\">732</a>|Custom Entity not found.| | | <a name=\"733\">733</a>|Custom Entity Identifier already in use.| | | <a name=\"735\">735</a>|Calculation Failed.| | | <a name=\"736\">736</a>|An expected key on HttpResponse is missing.| | | <a name=\"737\">737</a>|A required fee detail is missing.| | | <a name=\"738\">738</a>|Zero rows were returned from Luminesce| | | <a name=\"739\">739</a>|Provided Weekend Mask was invalid| | | <a name=\"742\">742</a>|Custom Entity fields do not match the definition| | | <a name=\"746\">746</a>|The provided sequence is not valid.| | | <a name=\"751\">751</a>|The type of the Custom Entity is different than the type provided in the definition.| | | <a name=\"752\">752</a>|Luminesce process returned an error.| | | <a name=\"753\">753</a>|File name or content incompatible with operation.| | | <a name=\"755\">755</a>|Schema of response from Drive is not as expected.| | | <a name=\"757\">757</a>|Schema of response from Luminesce is not as expected.| | | <a name=\"758\">758</a>|Luminesce timed out.| | | <a name=\"763\">763</a>|Invalid Lusid Entity Identifier Unit| | | <a name=\"768\">768</a>|Fee rule not found.| | | <a name=\"769\">769</a>|Cannot update the base currency of a portfolio with transactions loaded| | | <a name=\"771\">771</a>|Transaction configuration source not found| | | <a name=\"774\">774</a>|Compliance rule not found.| | | <a name=\"775\">775</a>|Fund accounting document cannot be processed.| | | <a name=\"778\">778</a>|Unable to look up FX rate from trade ccy to portfolio ccy for some of the trades.| | | <a name=\"782\">782</a>|The Property definition dataType is not matching the derivation formula dataType| | | <a name=\"783\">783</a>|The Property definition domain is not supported for derived properties| | | <a name=\"788\">788</a>|Compliance run not found failure.| | | <a name=\"790\">790</a>|Custom Entity has missing or invalid identifiers| | | <a name=\"791\">791</a>|Custom Entity definition already exists| | | <a name=\"792\">792</a>|Compliance PropertyKey is missing.| | | <a name=\"793\">793</a>|Compliance Criteria Value for matching is missing.| | | <a name=\"795\">795</a>|Cannot delete identifier definition| | | <a name=\"796\">796</a>|Tax rule set not found.| | | <a name=\"797\">797</a>|A tax rule set with this id already exists.| | | <a name=\"798\">798</a>|Multiple rule sets for the same property key are applicable.| | | <a name=\"799\">799</a>|The request must contain a date or diary entry.| | | <a name=\"800\">800</a>|Can not upsert an instrument event of this type.| | | <a name=\"801\">801</a>|The instrument event does not exist.| | | <a name=\"802\">802</a>|The Instrument event is missing salient information.| | | <a name=\"803\">803</a>|The Instrument event could not be processed.| | | <a name=\"804\">804</a>|Some data requested does not follow the order graph assumptions.| | | <a name=\"805\">805</a>|The instrument event type does not exist.| | | <a name=\"806\">806</a>|The transaction template specification does not exist.| | | <a name=\"807\">807</a>|The default transaction template does not exist.| | | <a name=\"808\">808</a>|The transaction template does not exist.| | | <a name=\"811\">811</a>|A price could not be found for an order.| | | <a name=\"812\">812</a>|A price could not be found for an allocation.| | | <a name=\"813\">813</a>|Chart of Accounts not found.| | | <a name=\"814\">814</a>|Account not found.| | | <a name=\"815\">815</a>|Abor not found.| | | <a name=\"816\">816</a>|Abor Configuration not found.| | | <a name=\"817\">817</a>|Reconciliation mapping not found| | | <a name=\"818\">818</a>|Attribute type could not be deleted because it doesn\'t exist.| | | <a name=\"819\">819</a>|Reconciliation not found.| | | <a name=\"820\">820</a>|Custodian Account not found.| | | <a name=\"821\">821</a>|Allocation Failure| | | <a name=\"822\">822</a>|Reconciliation run not found| | | <a name=\"823\">823</a>|Reconciliation break not found| | | <a name=\"824\">824</a>|Entity link type could not be deleted because it doesn\'t exist.| | | <a name=\"828\">828</a>|Address key definition not found.| | | <a name=\"829\">829</a>|Compliance template not found.| | | <a name=\"830\">830</a>|Action not supported| | | <a name=\"831\">831</a>|Reference list not found.| | | <a name=\"832\">832</a>|Posting Module not found.| | | <a name=\"833\">833</a>|The type of parameter provided did not match that required by the compliance rule.| | | <a name=\"834\">834</a>|The parameters provided by a rule did not match those required by its template.| | | <a name=\"835\">835</a>|The entity has a property in a domain that is not supprted for that entity type.| | | <a name=\"836\">836</a>|Structured result data not found.| | | <a name=\"837\">837</a>|Diary entry not found.| | | <a name=\"838\">838</a>|Diary entry could not be created.| | | <a name=\"839\">839</a>|Diary entry already exists.| | | <a name=\"861\">861</a>|Compliance run summary not found.| | | <a name=\"869\">869</a>|Conflicting instrument properties in batch.| | | <a name=\"870\">870</a>|Compliance run summary already exists.| | | <a name=\"871\">871</a>|The specified impersonated user does not exist| | | <a name=\"874\">874</a>|Provided Property Domain is not supported for entity filter.| | | <a name=\"875\">875</a>|Cannot Delete System Reference List.| | | <a name=\"876\">876</a>|Cleardown Module not found.| | | <a name=\"879\">879</a>|Portfolios do not have the same base currency| | | <a name=\"880\">880</a>|There was a problem with the definition of the compliance expression.| | | <a name=\"881\">881</a>|Block overplaced.| | | <a name=\"882\">882</a>|Order not approved.| | | <a name=\"883\">883</a>|Cannot update the shared fields of a block with associated orders.| | | <a name=\"886\">886</a>|Cannot lock the period.| | | <a name=\"887\">887</a>|Cannot apply clear down module.| | | <a name=\"888\">888</a>|Cannot upsert Instrument Event Instruction.| | | <a name=\"889\">889</a>|Cannot read Instrument Event Instruction.| | | <a name=\"895\">895</a>|The Capital Ratio Calculation Is Wrong.| | | <a name=\"910\">910</a>|Cannot update a block referenced by a placement.| | | <a name=\"911\">911</a>|A Fund that references this Abor already exists.| | | <a name=\"912\">912</a>|Cannot add decision to Staged Modification.| | | <a name=\"913\">913</a>|The Staged Modification could not be applied.| | | <a name=\"914\">914</a>|Action cannot be executed.| | | <a name=\"915\">915</a>|Cannot upsert multiple versions of the same property in one request.| | | <a name=\"916\">916</a>|Placement and direct descendents have more executed quantity than total placement quantity.| | | <a name=\"917\">917</a>|Cannot update a placement with this EntryType.| | | <a name=\"918\">918</a>|Cannot update a placement in this State.| | | <a name=\"919\">919</a>|Placement could not be cancelled.| | | <a name=\"920\">920</a>|Share Class not configured in Fund| | | <a name=\"921\">921</a>|Share Class Sub Holding Key not configured in Portfolio| | | <a name=\"922\">922</a>|Could not update an order.| | | <a name=\"923\">923</a>|Multiple sets of Share Class Sub Holding Keys configured across the Portfolios of a Fund.| | | <a name=\"924\">924</a>|One or more matrix cells could not be added to the matrix.| | | <a name=\"925\">925</a>|There was a problem with the provided matrix definition.| | | <a name=\"926\">926</a>|Matrix definition does not exist.| | | <a name=\"927\">927</a>|Matrix definition could not be deleted because it doesn\'t exist.| | | <a name=\"928\">928</a>|DataType with Id already exists.| | | <a name=\"929\">929</a>|Square matrix is incomplete.| | | <a name=\"930\">930</a>|A conditional license term has been exceeded.| | | <a name=\"931\">931</a>|The Custom Data Model requested is not intended for the entity provided.| | | <a name=\"932\">932</a>|The entity provided does not have a mandatory property specified by the Custom Data Model.| | | <a name=\"933\">933</a>|The entity provided has a property not allowed by the specified Custom Data Model.| | | <a name=\"934\">934</a>|The entity provided does not have a mandatory identifier specified by the Custom Data Model.| | | <a name=\"935\">935</a>|The entity provided has an identifier not allowed by the specified Custom Data Model.| | | <a name=\"936\">936</a>|The Custom Data Model included an alias or sort-by attribute that was not on the definition.| | | <a name=\"937\">937</a>|The ClosedPeriod with the Id already exists on the Timeline| | | <a name=\"938\">938</a>|The new Closed Period would cause the Timeline to have non-contiguous Closed Periods| | | <a name=\"939\">939</a>|Blocked by a Network Zone| | | <a name=\"940\">940</a>|The entity provided does not meet the conditions of the Custom Data Model.| | | <a name=\"941\">941</a>|Order not compliant.| | | <a name=\"942\">942</a>|Action would create a circular dependency.| | | <a name=\"944\">944</a>|Derived Property calculation not complete.| | | <a name=\"945\">945</a>|Derived Property is not filterable.| | | <a name=\"946\">946</a>|The conditions provided have one or more errors.| | | <a name=\"947\">947</a>|The property/identifier domain and entity domain do not match.| | | <a name=\"948\">948</a>|Invalid Timeline| | | <a name=\"949\">949</a>|Filterable Derived Property limit reached.| | | <a name=\"950\">950</a>|Investor Record Identifier Already In Use| | | <a name=\"951\">951</a>|Investor Record Not Found| | | <a name=\"952\">952</a>|Investment Account Identifier Already In Use| | | <a name=\"953\">953</a>|Investment Account Not Found| | | <a name=\"954\">954</a>|Could Not Sweep Block| | | <a name=\"955\">955</a>|Entity Unique Id has the wrong format| | | <a name=\"956\">956</a>|Post Close Activity is invalid| | | <a name=\"957\">957</a>|The ClosedPeriod with the Id does not exist on the Timeline| | | <a name=\"958\">958</a>|Invalid Settlement Instructions| | | <a name=\"959\">959</a>|Order requires quantity.| | | <a name=\"960\">960</a>|Invalid DataPoint Value Assignment| | | <a name=\"961\">961</a>|Invalid Relational Dataset Field Definition| | | <a name=\"962\">962</a>|Relational Dataset Definition Does Not Exist| | | <a name=\"963\">963</a>|Timeline Bookmark Not In Open Period| | | <a name=\"964\">964</a>|The Custom Data Model specified identifiers but the entity does not support identifiers| | | <a name=\"965\">965</a>|The sort by provided has one or more errors| | | <a name=\"966\">966</a>|Invalid Custom Data Model Definition| | | <a name=\"967\">967</a>|Rule set does not exist on the Check Definition| | | <a name=\"968\">968</a>|The Closed Period is invalid| | | <a name=\"969\">969</a>|Cannot update a placement with this Stop Price.| | | <a name=\"970\">970</a>|Cannot update a placement with this Limit Price.| | | <a name=\"971\">971</a>|Cannot update a placement with the current Type.| | | <a name=\"974\">974</a>|Cannot PlaceBlocks against an \'Unsolicited\' Block (block containing 0 Orders).| | | <a name=\"975\">975</a>|No Portfolio Group Selected| | | <a name=\"976\">976</a>|Ambiguous Scope| |
|
|
4
|
+
*
|
|
5
|
+
* Contact: info@finbourne.com
|
|
6
|
+
*
|
|
7
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
8
|
+
* https://openapi-generator.tech
|
|
9
|
+
* Do not edit the class manually.
|
|
10
|
+
*/
|
|
11
|
+
/* tslint:disable:no-unused-variable member-ordering */
|
|
12
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
13
|
+
import { HttpHeaders, HttpParams, HttpContext } from '@angular/common/http';
|
|
14
|
+
import { CustomHttpParameterCodec } from '../encoder';
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
import { BASE_PATH } from '../variables';
|
|
17
|
+
import { Configuration } from '../configuration';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
import * as i1 from "@angular/common/http";
|
|
20
|
+
import * as i2 from "../configuration";
|
|
21
|
+
export class AllocationEventsService {
|
|
22
|
+
httpClient;
|
|
23
|
+
basePath = 'https://www.lusid.com/api';
|
|
24
|
+
defaultHeaders = new HttpHeaders();
|
|
25
|
+
configuration = new Configuration();
|
|
26
|
+
encoder;
|
|
27
|
+
constructor(httpClient, basePath, configuration) {
|
|
28
|
+
this.httpClient = httpClient;
|
|
29
|
+
if (configuration) {
|
|
30
|
+
this.configuration = configuration;
|
|
31
|
+
}
|
|
32
|
+
if (typeof this.configuration.basePath !== 'string') {
|
|
33
|
+
const firstBasePath = Array.isArray(basePath) ? basePath[0] : undefined;
|
|
34
|
+
if (firstBasePath != undefined) {
|
|
35
|
+
basePath = firstBasePath;
|
|
36
|
+
}
|
|
37
|
+
if (typeof basePath !== 'string') {
|
|
38
|
+
basePath = this.basePath;
|
|
39
|
+
}
|
|
40
|
+
this.configuration.basePath = basePath;
|
|
41
|
+
}
|
|
42
|
+
this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
|
|
43
|
+
}
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
addToHttpParams(httpParams, value, key) {
|
|
46
|
+
if (typeof value === "object" && value instanceof Date === false) {
|
|
47
|
+
httpParams = this.addToHttpParamsRecursive(httpParams, value);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
|
|
51
|
+
}
|
|
52
|
+
return httpParams;
|
|
53
|
+
}
|
|
54
|
+
addToHttpParamsRecursive(httpParams, value, key) {
|
|
55
|
+
if (value == null) {
|
|
56
|
+
return httpParams;
|
|
57
|
+
}
|
|
58
|
+
if (typeof value === "object") {
|
|
59
|
+
if (Array.isArray(value)) {
|
|
60
|
+
value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
|
|
61
|
+
}
|
|
62
|
+
else if (value instanceof Date) {
|
|
63
|
+
if (key != null) {
|
|
64
|
+
httpParams = httpParams.append(key, value.toISOString().substring(0, 10));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
throw Error("key may not be null if value is Date");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (key != null) {
|
|
75
|
+
httpParams = httpParams.append(key, value);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
throw Error("key may not be null if value is not object or array");
|
|
79
|
+
}
|
|
80
|
+
return httpParams;
|
|
81
|
+
}
|
|
82
|
+
bookAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
83
|
+
const scope = requestParameters?.scope;
|
|
84
|
+
if (scope === null || scope === undefined) {
|
|
85
|
+
throw new Error('Required parameter scope was null or undefined when calling bookAllocationEvent.');
|
|
86
|
+
}
|
|
87
|
+
const code = requestParameters?.code;
|
|
88
|
+
if (code === null || code === undefined) {
|
|
89
|
+
throw new Error('Required parameter code was null or undefined when calling bookAllocationEvent.');
|
|
90
|
+
}
|
|
91
|
+
const allocationEventBookRequest = requestParameters?.allocationEventBookRequest;
|
|
92
|
+
if (allocationEventBookRequest === null || allocationEventBookRequest === undefined) {
|
|
93
|
+
throw new Error('Required parameter allocationEventBookRequest was null or undefined when calling bookAllocationEvent.');
|
|
94
|
+
}
|
|
95
|
+
const effectiveAt = requestParameters?.effectiveAt;
|
|
96
|
+
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
97
|
+
if (effectiveAt !== undefined && effectiveAt !== null) {
|
|
98
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
|
|
99
|
+
}
|
|
100
|
+
let localVarHeaders = this.defaultHeaders;
|
|
101
|
+
let localVarCredential;
|
|
102
|
+
// authentication (oauth2) required
|
|
103
|
+
localVarCredential = this.configuration.lookupCredential('oauth2');
|
|
104
|
+
if (localVarCredential) {
|
|
105
|
+
localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
|
|
106
|
+
}
|
|
107
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
108
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
109
|
+
// to determine the Accept header
|
|
110
|
+
const httpHeaderAccepts = [
|
|
111
|
+
'text/plain',
|
|
112
|
+
'application/json',
|
|
113
|
+
'text/json'
|
|
114
|
+
];
|
|
115
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
116
|
+
}
|
|
117
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
118
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
119
|
+
}
|
|
120
|
+
let localVarHttpContext = options && options.context;
|
|
121
|
+
if (localVarHttpContext === undefined) {
|
|
122
|
+
localVarHttpContext = new HttpContext();
|
|
123
|
+
}
|
|
124
|
+
let localVarTransferCache = options && options.transferCache;
|
|
125
|
+
if (localVarTransferCache === undefined) {
|
|
126
|
+
localVarTransferCache = true;
|
|
127
|
+
}
|
|
128
|
+
// to determine the Content-Type header
|
|
129
|
+
const consumes = [
|
|
130
|
+
'application/json-patch+json',
|
|
131
|
+
'application/json',
|
|
132
|
+
'text/json',
|
|
133
|
+
'application/*+json'
|
|
134
|
+
];
|
|
135
|
+
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
136
|
+
if (httpContentTypeSelected !== undefined) {
|
|
137
|
+
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
138
|
+
}
|
|
139
|
+
let responseType_ = 'json';
|
|
140
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
141
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
142
|
+
responseType_ = 'text';
|
|
143
|
+
}
|
|
144
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
145
|
+
responseType_ = 'json';
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
responseType_ = 'blob';
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/book`;
|
|
152
|
+
return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
|
|
153
|
+
context: localVarHttpContext,
|
|
154
|
+
body: allocationEventBookRequest,
|
|
155
|
+
params: localVarQueryParameters,
|
|
156
|
+
responseType: responseType_,
|
|
157
|
+
withCredentials: this.configuration.withCredentials,
|
|
158
|
+
headers: localVarHeaders,
|
|
159
|
+
observe: observe,
|
|
160
|
+
transferCache: localVarTransferCache,
|
|
161
|
+
reportProgress: reportProgress
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
createAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
165
|
+
const scope = requestParameters?.scope;
|
|
166
|
+
if (scope === null || scope === undefined) {
|
|
167
|
+
throw new Error('Required parameter scope was null or undefined when calling createAllocationEvent.');
|
|
168
|
+
}
|
|
169
|
+
const allocationEventRequest = requestParameters?.allocationEventRequest;
|
|
170
|
+
if (allocationEventRequest === null || allocationEventRequest === undefined) {
|
|
171
|
+
throw new Error('Required parameter allocationEventRequest was null or undefined when calling createAllocationEvent.');
|
|
172
|
+
}
|
|
173
|
+
let localVarHeaders = this.defaultHeaders;
|
|
174
|
+
let localVarCredential;
|
|
175
|
+
// authentication (oauth2) required
|
|
176
|
+
localVarCredential = this.configuration.lookupCredential('oauth2');
|
|
177
|
+
if (localVarCredential) {
|
|
178
|
+
localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
|
|
179
|
+
}
|
|
180
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
181
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
182
|
+
// to determine the Accept header
|
|
183
|
+
const httpHeaderAccepts = [
|
|
184
|
+
'text/plain',
|
|
185
|
+
'application/json',
|
|
186
|
+
'text/json'
|
|
187
|
+
];
|
|
188
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
189
|
+
}
|
|
190
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
191
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
192
|
+
}
|
|
193
|
+
let localVarHttpContext = options && options.context;
|
|
194
|
+
if (localVarHttpContext === undefined) {
|
|
195
|
+
localVarHttpContext = new HttpContext();
|
|
196
|
+
}
|
|
197
|
+
let localVarTransferCache = options && options.transferCache;
|
|
198
|
+
if (localVarTransferCache === undefined) {
|
|
199
|
+
localVarTransferCache = true;
|
|
200
|
+
}
|
|
201
|
+
// to determine the Content-Type header
|
|
202
|
+
const consumes = [
|
|
203
|
+
'application/json-patch+json',
|
|
204
|
+
'application/json',
|
|
205
|
+
'text/json',
|
|
206
|
+
'application/*+json'
|
|
207
|
+
];
|
|
208
|
+
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
209
|
+
if (httpContentTypeSelected !== undefined) {
|
|
210
|
+
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
211
|
+
}
|
|
212
|
+
let responseType_ = 'json';
|
|
213
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
214
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
215
|
+
responseType_ = 'text';
|
|
216
|
+
}
|
|
217
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
218
|
+
responseType_ = 'json';
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
responseType_ = 'blob';
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
|
|
225
|
+
return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
|
|
226
|
+
context: localVarHttpContext,
|
|
227
|
+
body: allocationEventRequest,
|
|
228
|
+
responseType: responseType_,
|
|
229
|
+
withCredentials: this.configuration.withCredentials,
|
|
230
|
+
headers: localVarHeaders,
|
|
231
|
+
observe: observe,
|
|
232
|
+
transferCache: localVarTransferCache,
|
|
233
|
+
reportProgress: reportProgress
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
deleteAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
237
|
+
const scope = requestParameters?.scope;
|
|
238
|
+
if (scope === null || scope === undefined) {
|
|
239
|
+
throw new Error('Required parameter scope was null or undefined when calling deleteAllocationEvent.');
|
|
240
|
+
}
|
|
241
|
+
const code = requestParameters?.code;
|
|
242
|
+
if (code === null || code === undefined) {
|
|
243
|
+
throw new Error('Required parameter code was null or undefined when calling deleteAllocationEvent.');
|
|
244
|
+
}
|
|
245
|
+
const effectiveAt = requestParameters?.effectiveAt;
|
|
246
|
+
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
247
|
+
if (effectiveAt !== undefined && effectiveAt !== null) {
|
|
248
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
|
|
249
|
+
}
|
|
250
|
+
let localVarHeaders = this.defaultHeaders;
|
|
251
|
+
let localVarCredential;
|
|
252
|
+
// authentication (oauth2) required
|
|
253
|
+
localVarCredential = this.configuration.lookupCredential('oauth2');
|
|
254
|
+
if (localVarCredential) {
|
|
255
|
+
localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
|
|
256
|
+
}
|
|
257
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
258
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
259
|
+
// to determine the Accept header
|
|
260
|
+
const httpHeaderAccepts = [
|
|
261
|
+
'text/plain',
|
|
262
|
+
'application/json',
|
|
263
|
+
'text/json'
|
|
264
|
+
];
|
|
265
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
266
|
+
}
|
|
267
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
268
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
269
|
+
}
|
|
270
|
+
let localVarHttpContext = options && options.context;
|
|
271
|
+
if (localVarHttpContext === undefined) {
|
|
272
|
+
localVarHttpContext = new HttpContext();
|
|
273
|
+
}
|
|
274
|
+
let localVarTransferCache = options && options.transferCache;
|
|
275
|
+
if (localVarTransferCache === undefined) {
|
|
276
|
+
localVarTransferCache = true;
|
|
277
|
+
}
|
|
278
|
+
let responseType_ = 'json';
|
|
279
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
280
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
281
|
+
responseType_ = 'text';
|
|
282
|
+
}
|
|
283
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
284
|
+
responseType_ = 'json';
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
responseType_ = 'blob';
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
|
|
291
|
+
return this.httpClient.request('delete', `${this.configuration.basePath}${localVarPath}`, {
|
|
292
|
+
context: localVarHttpContext,
|
|
293
|
+
params: localVarQueryParameters,
|
|
294
|
+
responseType: responseType_,
|
|
295
|
+
withCredentials: this.configuration.withCredentials,
|
|
296
|
+
headers: localVarHeaders,
|
|
297
|
+
observe: observe,
|
|
298
|
+
transferCache: localVarTransferCache,
|
|
299
|
+
reportProgress: reportProgress
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
getAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
303
|
+
const scope = requestParameters?.scope;
|
|
304
|
+
if (scope === null || scope === undefined) {
|
|
305
|
+
throw new Error('Required parameter scope was null or undefined when calling getAllocationEvent.');
|
|
306
|
+
}
|
|
307
|
+
const code = requestParameters?.code;
|
|
308
|
+
if (code === null || code === undefined) {
|
|
309
|
+
throw new Error('Required parameter code was null or undefined when calling getAllocationEvent.');
|
|
310
|
+
}
|
|
311
|
+
const effectiveAt = requestParameters?.effectiveAt;
|
|
312
|
+
const asAt = requestParameters?.asAt;
|
|
313
|
+
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
314
|
+
if (effectiveAt !== undefined && effectiveAt !== null) {
|
|
315
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
|
|
316
|
+
}
|
|
317
|
+
if (asAt !== undefined && asAt !== null) {
|
|
318
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, asAt, 'asAt');
|
|
319
|
+
}
|
|
320
|
+
let localVarHeaders = this.defaultHeaders;
|
|
321
|
+
let localVarCredential;
|
|
322
|
+
// authentication (oauth2) required
|
|
323
|
+
localVarCredential = this.configuration.lookupCredential('oauth2');
|
|
324
|
+
if (localVarCredential) {
|
|
325
|
+
localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
|
|
326
|
+
}
|
|
327
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
328
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
329
|
+
// to determine the Accept header
|
|
330
|
+
const httpHeaderAccepts = [
|
|
331
|
+
'text/plain',
|
|
332
|
+
'application/json',
|
|
333
|
+
'text/json'
|
|
334
|
+
];
|
|
335
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
336
|
+
}
|
|
337
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
338
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
339
|
+
}
|
|
340
|
+
let localVarHttpContext = options && options.context;
|
|
341
|
+
if (localVarHttpContext === undefined) {
|
|
342
|
+
localVarHttpContext = new HttpContext();
|
|
343
|
+
}
|
|
344
|
+
let localVarTransferCache = options && options.transferCache;
|
|
345
|
+
if (localVarTransferCache === undefined) {
|
|
346
|
+
localVarTransferCache = true;
|
|
347
|
+
}
|
|
348
|
+
let responseType_ = 'json';
|
|
349
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
350
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
351
|
+
responseType_ = 'text';
|
|
352
|
+
}
|
|
353
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
354
|
+
responseType_ = 'json';
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
responseType_ = 'blob';
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
|
|
361
|
+
return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
|
|
362
|
+
context: localVarHttpContext,
|
|
363
|
+
params: localVarQueryParameters,
|
|
364
|
+
responseType: responseType_,
|
|
365
|
+
withCredentials: this.configuration.withCredentials,
|
|
366
|
+
headers: localVarHeaders,
|
|
367
|
+
observe: observe,
|
|
368
|
+
transferCache: localVarTransferCache,
|
|
369
|
+
reportProgress: reportProgress
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
listAllocationEvents(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
373
|
+
const effectiveAt = requestParameters?.effectiveAt;
|
|
374
|
+
const asAt = requestParameters?.asAt;
|
|
375
|
+
const page = requestParameters?.page;
|
|
376
|
+
const limit = requestParameters?.limit;
|
|
377
|
+
const filter = requestParameters?.filter;
|
|
378
|
+
const sortBy = requestParameters?.sortBy;
|
|
379
|
+
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
380
|
+
if (effectiveAt !== undefined && effectiveAt !== null) {
|
|
381
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
|
|
382
|
+
}
|
|
383
|
+
if (asAt !== undefined && asAt !== null) {
|
|
384
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, asAt, 'asAt');
|
|
385
|
+
}
|
|
386
|
+
if (page !== undefined && page !== null) {
|
|
387
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, page, 'page');
|
|
388
|
+
}
|
|
389
|
+
if (limit !== undefined && limit !== null) {
|
|
390
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, 'limit');
|
|
391
|
+
}
|
|
392
|
+
if (filter !== undefined && filter !== null) {
|
|
393
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, filter, 'filter');
|
|
394
|
+
}
|
|
395
|
+
if (sortBy) {
|
|
396
|
+
sortBy.forEach((element) => {
|
|
397
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, element, 'sortBy');
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
let localVarHeaders = this.defaultHeaders;
|
|
401
|
+
let localVarCredential;
|
|
402
|
+
// authentication (oauth2) required
|
|
403
|
+
localVarCredential = this.configuration.lookupCredential('oauth2');
|
|
404
|
+
if (localVarCredential) {
|
|
405
|
+
localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
|
|
406
|
+
}
|
|
407
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
408
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
409
|
+
// to determine the Accept header
|
|
410
|
+
const httpHeaderAccepts = [
|
|
411
|
+
'text/plain',
|
|
412
|
+
'application/json',
|
|
413
|
+
'text/json'
|
|
414
|
+
];
|
|
415
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
416
|
+
}
|
|
417
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
418
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
419
|
+
}
|
|
420
|
+
let localVarHttpContext = options && options.context;
|
|
421
|
+
if (localVarHttpContext === undefined) {
|
|
422
|
+
localVarHttpContext = new HttpContext();
|
|
423
|
+
}
|
|
424
|
+
let localVarTransferCache = options && options.transferCache;
|
|
425
|
+
if (localVarTransferCache === undefined) {
|
|
426
|
+
localVarTransferCache = true;
|
|
427
|
+
}
|
|
428
|
+
let responseType_ = 'json';
|
|
429
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
430
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
431
|
+
responseType_ = 'text';
|
|
432
|
+
}
|
|
433
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
434
|
+
responseType_ = 'json';
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
responseType_ = 'blob';
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
let localVarPath = `/api/allocationevents`;
|
|
441
|
+
return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
|
|
442
|
+
context: localVarHttpContext,
|
|
443
|
+
params: localVarQueryParameters,
|
|
444
|
+
responseType: responseType_,
|
|
445
|
+
withCredentials: this.configuration.withCredentials,
|
|
446
|
+
headers: localVarHeaders,
|
|
447
|
+
observe: observe,
|
|
448
|
+
transferCache: localVarTransferCache,
|
|
449
|
+
reportProgress: reportProgress
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
reallocateAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
453
|
+
const scope = requestParameters?.scope;
|
|
454
|
+
if (scope === null || scope === undefined) {
|
|
455
|
+
throw new Error('Required parameter scope was null or undefined when calling reallocateAllocationEvent.');
|
|
456
|
+
}
|
|
457
|
+
const code = requestParameters?.code;
|
|
458
|
+
if (code === null || code === undefined) {
|
|
459
|
+
throw new Error('Required parameter code was null or undefined when calling reallocateAllocationEvent.');
|
|
460
|
+
}
|
|
461
|
+
const allocationEventReallocateRequest = requestParameters?.allocationEventReallocateRequest;
|
|
462
|
+
if (allocationEventReallocateRequest === null || allocationEventReallocateRequest === undefined) {
|
|
463
|
+
throw new Error('Required parameter allocationEventReallocateRequest was null or undefined when calling reallocateAllocationEvent.');
|
|
464
|
+
}
|
|
465
|
+
const effectiveAt = requestParameters?.effectiveAt;
|
|
466
|
+
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
467
|
+
if (effectiveAt !== undefined && effectiveAt !== null) {
|
|
468
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
|
|
469
|
+
}
|
|
470
|
+
let localVarHeaders = this.defaultHeaders;
|
|
471
|
+
let localVarCredential;
|
|
472
|
+
// authentication (oauth2) required
|
|
473
|
+
localVarCredential = this.configuration.lookupCredential('oauth2');
|
|
474
|
+
if (localVarCredential) {
|
|
475
|
+
localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
|
|
476
|
+
}
|
|
477
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
478
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
479
|
+
// to determine the Accept header
|
|
480
|
+
const httpHeaderAccepts = [
|
|
481
|
+
'text/plain',
|
|
482
|
+
'application/json',
|
|
483
|
+
'text/json'
|
|
484
|
+
];
|
|
485
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
486
|
+
}
|
|
487
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
488
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
489
|
+
}
|
|
490
|
+
let localVarHttpContext = options && options.context;
|
|
491
|
+
if (localVarHttpContext === undefined) {
|
|
492
|
+
localVarHttpContext = new HttpContext();
|
|
493
|
+
}
|
|
494
|
+
let localVarTransferCache = options && options.transferCache;
|
|
495
|
+
if (localVarTransferCache === undefined) {
|
|
496
|
+
localVarTransferCache = true;
|
|
497
|
+
}
|
|
498
|
+
// to determine the Content-Type header
|
|
499
|
+
const consumes = [
|
|
500
|
+
'application/json-patch+json',
|
|
501
|
+
'application/json',
|
|
502
|
+
'text/json',
|
|
503
|
+
'application/*+json'
|
|
504
|
+
];
|
|
505
|
+
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
506
|
+
if (httpContentTypeSelected !== undefined) {
|
|
507
|
+
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
508
|
+
}
|
|
509
|
+
let responseType_ = 'json';
|
|
510
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
511
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
512
|
+
responseType_ = 'text';
|
|
513
|
+
}
|
|
514
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
515
|
+
responseType_ = 'json';
|
|
516
|
+
}
|
|
517
|
+
else {
|
|
518
|
+
responseType_ = 'blob';
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/reallocate`;
|
|
522
|
+
return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
|
|
523
|
+
context: localVarHttpContext,
|
|
524
|
+
body: allocationEventReallocateRequest,
|
|
525
|
+
params: localVarQueryParameters,
|
|
526
|
+
responseType: responseType_,
|
|
527
|
+
withCredentials: this.configuration.withCredentials,
|
|
528
|
+
headers: localVarHeaders,
|
|
529
|
+
observe: observe,
|
|
530
|
+
transferCache: localVarTransferCache,
|
|
531
|
+
reportProgress: reportProgress
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
upsertAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
535
|
+
const scope = requestParameters?.scope;
|
|
536
|
+
if (scope === null || scope === undefined) {
|
|
537
|
+
throw new Error('Required parameter scope was null or undefined when calling upsertAllocationEvent.');
|
|
538
|
+
}
|
|
539
|
+
const code = requestParameters?.code;
|
|
540
|
+
if (code === null || code === undefined) {
|
|
541
|
+
throw new Error('Required parameter code was null or undefined when calling upsertAllocationEvent.');
|
|
542
|
+
}
|
|
543
|
+
const allocationEventRequest = requestParameters?.allocationEventRequest;
|
|
544
|
+
if (allocationEventRequest === null || allocationEventRequest === undefined) {
|
|
545
|
+
throw new Error('Required parameter allocationEventRequest was null or undefined when calling upsertAllocationEvent.');
|
|
546
|
+
}
|
|
547
|
+
let localVarHeaders = this.defaultHeaders;
|
|
548
|
+
let localVarCredential;
|
|
549
|
+
// authentication (oauth2) required
|
|
550
|
+
localVarCredential = this.configuration.lookupCredential('oauth2');
|
|
551
|
+
if (localVarCredential) {
|
|
552
|
+
localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
|
|
553
|
+
}
|
|
554
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
555
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
556
|
+
// to determine the Accept header
|
|
557
|
+
const httpHeaderAccepts = [
|
|
558
|
+
'text/plain',
|
|
559
|
+
'application/json',
|
|
560
|
+
'text/json'
|
|
561
|
+
];
|
|
562
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
563
|
+
}
|
|
564
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
565
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
566
|
+
}
|
|
567
|
+
let localVarHttpContext = options && options.context;
|
|
568
|
+
if (localVarHttpContext === undefined) {
|
|
569
|
+
localVarHttpContext = new HttpContext();
|
|
570
|
+
}
|
|
571
|
+
let localVarTransferCache = options && options.transferCache;
|
|
572
|
+
if (localVarTransferCache === undefined) {
|
|
573
|
+
localVarTransferCache = true;
|
|
574
|
+
}
|
|
575
|
+
// to determine the Content-Type header
|
|
576
|
+
const consumes = [
|
|
577
|
+
'application/json-patch+json',
|
|
578
|
+
'application/json',
|
|
579
|
+
'text/json',
|
|
580
|
+
'application/*+json'
|
|
581
|
+
];
|
|
582
|
+
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
583
|
+
if (httpContentTypeSelected !== undefined) {
|
|
584
|
+
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
585
|
+
}
|
|
586
|
+
let responseType_ = 'json';
|
|
587
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
588
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
589
|
+
responseType_ = 'text';
|
|
590
|
+
}
|
|
591
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
592
|
+
responseType_ = 'json';
|
|
593
|
+
}
|
|
594
|
+
else {
|
|
595
|
+
responseType_ = 'blob';
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
|
|
599
|
+
return this.httpClient.request('put', `${this.configuration.basePath}${localVarPath}`, {
|
|
600
|
+
context: localVarHttpContext,
|
|
601
|
+
body: allocationEventRequest,
|
|
602
|
+
responseType: responseType_,
|
|
603
|
+
withCredentials: this.configuration.withCredentials,
|
|
604
|
+
headers: localVarHeaders,
|
|
605
|
+
observe: observe,
|
|
606
|
+
transferCache: localVarTransferCache,
|
|
607
|
+
reportProgress: reportProgress
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AllocationEventsService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
611
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AllocationEventsService, providedIn: 'root' });
|
|
612
|
+
}
|
|
613
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AllocationEventsService, decorators: [{
|
|
614
|
+
type: Injectable,
|
|
615
|
+
args: [{
|
|
616
|
+
providedIn: 'root'
|
|
617
|
+
}]
|
|
618
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
619
|
+
type: Optional
|
|
620
|
+
}, {
|
|
621
|
+
type: Inject,
|
|
622
|
+
args: [BASE_PATH]
|
|
623
|
+
}] }, { type: i2.Configuration, decorators: [{
|
|
624
|
+
type: Optional
|
|
625
|
+
}] }] });
|
|
626
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb2NhdGlvbkV2ZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmluYm91cm5lL2x1c2lkLXNkay1hbmd1bGFyMTgvc3JjL2xpYi8uZ2VuZXJhdGVkL2FwaS9hbGxvY2F0aW9uRXZlbnRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBQ0gsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUEyQixlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQ1UsV0FBVyxFQUN4RCxNQUFZLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUErQixZQUFZLENBQUM7QUFvQi9FLGFBQWE7QUFDYixPQUFPLEVBQUUsU0FBUyxFQUFzQixNQUEwQixjQUFjLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQzs7OztBQWdGckYsTUFBTSxPQUFPLHVCQUF1QjtJQU9WO0lBTFosUUFBUSxHQUFHLDJCQUEyQixDQUFDO0lBQzFDLGNBQWMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ25DLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQ3BDLE9BQU8sQ0FBcUI7SUFFbkMsWUFBc0IsVUFBc0IsRUFBZ0MsUUFBeUIsRUFBYyxhQUE0QjtRQUF6SCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3hDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDdkMsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFD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LFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM1YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBa0IsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLEVBQ2xHO1lBQ0ksT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixJQUFJLEVBQUUsc0JBQXNCO1lBQzVCLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtZQUNwQyxjQUFjLEVBQUUsY0FBYztTQUNqQyxDQUNKLENBQUM7SUFDTixDQUFDO3VHQXJ1QlEsdUJBQXVCLDRDQU9pQyxTQUFTOzJHQVBqRSx1QkFBdUIsY0FGdEIsTUFBTTs7MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUWtELFFBQVE7OzBCQUFHLE1BQU07MkJBQUMsU0FBUzs7MEJBQThCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExVU0lEIEFQSVxuICogIyBJbnRyb2R1Y3Rpb24gIFRoaXMgcGFnZSBkb2N1bWVudHMgdGhlIFtMVVNJRCBBUElzXSguLi8uLi8uLi9hcGkvc3dhZ2dlciksIHdoaWNoIGFsbG93cyBhdXRob3Jpc2VkIGNsaWVudHMgdG8gcXVlcnkgYW5kIHVwZGF0ZSB0aGVpciBkYXRhIHdpdGhpbiB0aGUgTFVTSUQgcGxhdGZvcm0uICBTREtzIHRvIGludGVyYWN0IHdpdGggdGhlIExVU0lEIEFQSXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgZm9sbG93aW5nIGxhbmd1YWdlcyBhbmQgZnJhbWV3b3JrczogICogW0MjXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1jc2hhcnApICogW0phdmFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWphdmEpICogW0phdmFTY3JpcHRdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWpzKSAqIFtQeXRob25dKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLXB5dGhvbikgKiBbQW5ndWxhcl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcikgIFRoZSBMVVNJRCBwbGF0Zm9ybSBpcyBtYWRlIHVwIG9mIGEgbnVtYmVyIG9mIHN1Yi1hcHBsaWNhdGlvbnMuIFlvdSBjYW4gZmluZCB0aGUgQVBJIC8gc3dhZ2dlciBkb2N1bWVudGF0aW9uIGJ5IGZvbGxvd2luZyB0aGUgbGlua3MgaW4gdGhlIHRhYmxlIGJlbG93LiAgIHwgQXBwbGljYXRpb24gICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFQSSAvIFN3YWdnZXIgRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfCBMVVNJRCAgICAgICAgIHwgT3BlbiwgQVBJLWZpcnN0LCBkZXZlbG9wZXItZnJpZW5kbHkgaW52ZXN0bWVudCBkYXRhIHBsYXRmb3JtLiAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2FwaS9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICAgICB8IHwgV2ViIGFwcCAgICAgICB8IFVzZXItZmFjaW5nIGZyb250IGVuZCBmb3IgTFVTSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9hcHAvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgICAgfCB8IFNjaGVkdWxlciAgICAgfCBBdXRvbWF0ZWQgam9iIHNjaGVkdWxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vc2NoZWR1bGVyMi9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgIHwgfCBJbnNpZ2h0cyAgICAgIHwgTW9uaXRvcmluZyBhbmQgdHJvdWJsZXNob290aW5nIHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2luc2lnaHRzL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8IHwgSWRlbnRpdHkgICAgICB8IElkZW50aXR5IG1hbmFnZW1lbnQgZm9yIExVU0lEIChpbiBjb25qdW5jdGlvbiB3aXRoIEFjY2VzcykgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9pZGVudGl0eS9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgfCB8IEFjY2VzcyAgICAgICAgfCBBY2Nlc3MgY29udHJvbCBmb3IgTFVTSUQgKGluIGNvbmp1bmN0aW9uIHdpdGggSWRlbnRpdHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vYWNjZXNzL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgIHwgfCBEcml2ZSAgICAgICAgIHwgU2VjdXJlIGZpbGUgcmVwb3NpdG9yeSBhbmQgbWFuYWdlciBmb3IgY29sbGFib3JhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2RyaXZlL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgICB8IHwgTHVtaW5lc2NlICAgICB8IERhdGEgdmlydHVhbGlzYXRpb24gc2VydmljZSAocXVlcnkgZGF0YSBmcm9tIG11bHRpcGxlIHByb3ZpZGVycywgaW5jbHVkaW5nIExVU0lEKSB8IFtTd2FnZ2VyXSguLi8uLi8uLi9ob25leWNvbWIvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgfCB8IE5vdGlmaWNhdGlvbiAgfCBOb3RpZmljYXRpb24gc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vbm90aWZpY2F0aW9uL3N3YWdnZXIvaW5kZXguaHRtbCkgIHwgfCBDb25maWd1cmF0aW9uIHwgRmlsZSBzdG9yZSBmb3Igc2VjcmV0cyBhbmQgb3RoZXIgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vc3dhZ2dlci9pbmRleC5odG1sKSB8IHwgV29ya2Zsb3cgICAgICB8IFdvcmtmbG93IHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi93b3JrZmxvdy9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgfCAgICMgRXJyb3IgQ29kZXMgIHwgQ29kZXxOYW1lfERlc2NyaXB0aW9uIHwgfCAtLS18LS0tfC0tLSB8IHwgPGEgbmFtZT1cXFwiLTEwXFxcIj4tMTA8L2E+fFNlcnZlciBDb25maWd1cmF0aW9uIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIi0xXFxcIj4tMTwvYT58VW5rbm93biBlcnJvcnxBbiB1bmV4cGVjdGVkIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBvbiBvdXIgc2lkZS4gfCB8IDxhIG5hbWU9XFxcIjEwMlxcXCI+MTAyPC9hPnxWZXJzaW9uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDNcXFwiPjEwMzwvYT58QXBpIFJhdGUgTGltaXQgVmlvbGF0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjEwNFxcXCI+MTA0PC9hPnxJbnN0cnVtZW50IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDVcXFwiPjEwNTwvYT58UHJvcGVydHkgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwNlxcXCI+MTA2PC9hPnxQb3J0Zm9saW8gUmVjdXJzaW9uIERlcHRofCAgfCB8IDxhIG5hbWU9XFxcIjEwOFxcXCI+MTA4PC9hPnxHcm91cCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA5XFxcIj4xMDk8L2E+fFBvcnRmb2xpbyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTEwXFxcIj4xMTA8L2E+fFByb3BlcnR5IFNjaGVtYSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTExXFxcIj4xMTE8L2E+fFBvcnRmb2xpbyBBbmNlc3RyeSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTEyXFxcIj4xMTI8L2E+fFBvcnRmb2xpbyBXaXRoIElkIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjExM1xcXCI+MTEzPC9hPnxPcnBoYW5lZCBQb3J0Zm9saW98ICB8IHwgPGEgbmFtZT1cXFwiMTE5XFxcIj4xMTk8L2E+fE1pc3NpbmcgQmFzZSBDbGFpbXN8ICB8IHwgPGEgbmFtZT1cXFwiMTIxXFxcIj4xMjE8L2E+fFByb3BlcnR5IE5vdCBEZWZpbmVkfCAgfCB8IDxhIG5hbWU9XFxcIjEyMlxcXCI+MTIyPC9hPnxDYW5ub3QgRGVsZXRlIFN5c3RlbSBQcm9wZXJ0eXwgIHwgfCA8YSBuYW1lPVxcXCIxMjNcXFwiPjEyMzwvYT58Q2Fubm90IE1vZGlmeSBJbW11dGFibGUgUHJvcGVydHkgRmllbGR8ICB8IHwgPGEgbmFtZT1cXFwiMTI0XFxcIj4xMjQ8L2E+fFByb3BlcnR5IEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjEyNVxcXCI+MTI1PC9hPnxJbnZhbGlkIFByb3BlcnR5IExpZmUgVGltZXwgIHwgfCA8YSBuYW1lPVxcXCIxMjZcXFwiPjEyNjwvYT58UHJvcGVydHkgQ29uc3RyYWludCBTdHlsZSBFeGNsdWRlcyBQcm9wZXJ0aWVzfCAgfCB8IDxhIG5hbWU9XFxcIjEyN1xcXCI+MTI3PC9hPnxDYW5ub3QgTW9kaWZ5IERlZmF1bHQgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEyOFxcXCI+MTI4PC9hPnxHcm91cCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMjlcXFwiPjEyOTwvYT58Tm8gU3VjaCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMwXFxcIj4xMzA8L2E+fFVuZGVmaW5lZCBWYWx1ZSBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEzMVxcXCI+MTMxPC9hPnxVbnN1cHBvcnRlZCBWYWx1ZSBUeXBlIERlZmluZWQgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEzMlxcXCI+MTMyPC9hPnxWYWxpZGF0aW9uIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjEzM1xcXCI+MTMzPC9hPnxMb29wIERldGVjdGVkIEluIEdyb3VwIEhpZXJhcmNoeXwgIHwgfCA8YSBuYW1lPVxcXCIxMzRcXFwiPjEzNDwvYT58VW5kZWZpbmVkIEFjY2VwdGFibGUgVmFsdWVzfCAgfCB8IDxhIG5hbWU9XFxcIjEzNVxcXCI+MTM1PC9hPnxTdWIgR3JvdXAgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTM4XFxcIj4xMzg8L2E+fFByaWNlIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTM5XFxcIj4xMzk8L2E+fEFuYWx5dGljIFN0b3JlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxNDFcXFwiPjE0MTwvYT58QW5hbHl0aWMgU3RvcmUgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTQzXFxcIj4xNDM8L2E+fENsaWVudCBJbnN0cnVtZW50IEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE0NFxcXCI+MTQ0PC9hPnxEdXBsaWNhdGUgSW4gUGFyYW1ldGVyIFNldHwgIHwgfCA8YSBuYW1lPVxcXCIxNDdcXFwiPjE0NzwvYT58UmVzdWx0cyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTQ4XFxcIj4xNDg8L2E+fE9yZGVyIEZpZWxkIE5vdCBJbiBSZXN1bHQgU2V0fCAgfCB8IDxhIG5hbWU9XFxcIjE0OVxcXCI+MTQ5PC9hPnxPcGVyYXRpb24gRmFpbGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE1MFxcXCI+MTUwPC9hPnxFbGFzdGljIFNlYXJjaCBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIxNTFcXFwiPjE1MTwvYT58SW52YWxpZCBQYXJhbWV0ZXIgVmFsdWV8ICB8IHwgPGEgbmFtZT1cXFwiMTUzXFxcIj4xNTM8L2E+fENvbW1hbmQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1NFxcXCI+MTU0PC9hPnxFbnRpdHkgU3RhdGUgQ29uc3RydWN0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTU1XFxcIj4xNTU8L2E+fEVudGl0eSBUaW1lbGluZSBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNTZcXFwiPjE1NjwvYT58Q29uY3VycmVuY3kgQ29uZmxpY3QgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTdcXFwiPjE1NzwvYT58SW52YWxpZCBSZXF1ZXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE1OFxcXCI+MTU4PC9hPnxFdmVudCBQdWJsaXNoIFVua25vd258ICB8IHwgPGEgbmFtZT1cXFwiMTU5XFxcIj4xNTk8L2E+fEV2ZW50IFF1ZXJ5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTYwXFxcIj4xNjA8L2E+fEJsb2IgRGlkIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNjJcXFwiPjE2MjwvYT58U3ViIFN5c3RlbSBSZXF1ZXN0IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTYzXFxcIj4xNjM8L2E+fFN1YiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2NVxcXCI+MTY1PC9hPnxGYWlsZWQgVG8gRGVsZXRlfCAgfCB8IDxhIG5hbWU9XFxcIjE2NlxcXCI+MTY2PC9hPnxVcHNlcnQgQ2xpZW50IEluc3RydW1lbnQgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjdcXFwiPjE2NzwvYT58SWxsZWdhbCBBcyBBdCBJbnRlcnZhbHwgIHwgfCA8YSBuYW1lPVxcXCIxNjhcXFwiPjE2ODwvYT58SWxsZWdhbCBCaXRlbXBvcmFsIFF1ZXJ5fCAgfCB8IDxhIG5hbWU9XFxcIjE2OVxcXCI+MTY5PC9hPnxJbnZhbGlkIEFsdGVybmF0ZSBJZHwgIHwgfCA8YSBuYW1lPVxcXCIxNzBcXFwiPjE3MDwvYT58Q2Fubm90IEFkZCBOb24tV3JpdGFibGUgUHJvcGVydGllcyBUbyBFbnRpdHl8ICB8IHwgPGEgbmFtZT1cXFwiMTcxXFxcIj4xNzE8L2E+fEVudGl0eSBBbHJlYWR5IEV4aXN0cyBJbiBHcm91cHwgIHwgfCA8YSBuYW1lPVxcXCIxNzJcXFwiPjE3MjwvYT58RW50aXR5IFdpdGggSWQgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTczXFxcIj4xNzM8L2E+fEVudGl0eSBXaXRoIElkIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE3NFxcXCI+MTc0PC9hPnxEZXJpdmVkIFBvcnRmb2xpbyBEZXRhaWxzIERvIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNzVcXFwiPjE3NTwvYT58RW50aXR5IE5vdCBJbiBHcm91cHwgIHwgfCA8YSBuYW1lPVxcXCIxNzZcXFwiPjE3NjwvYT58UG9ydGZvbGlvIFdpdGggTmFtZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNzdcXFwiPjE3NzwvYT58SW52YWxpZCBUcmFuc2FjdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiMTc4XFxcIj4xNzg8L2E+fFJlZmVyZW5jZSBQb3J0Zm9saW8gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE3OVxcXCI+MTc5PC9hPnxEdXBsaWNhdGUgSWR8ICB8IHwgPGEgbmFtZT1cXFwiMTgwXFxcIj4xODA8L2E+fENvbW1hbmQgUmV0cmlldmFsIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTgxXFxcIj4xODE8L2E+fERhdGEgRmlsdGVyIEFwcGxpY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTgyXFxcIj4xODI8L2E+fFNlYXJjaCBGYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTgzXFxcIj4xODM8L2E+fE1vdmVtZW50cyBFbmdpbmUgQ29uZmlndXJhdGlvbiBLZXkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODRcXFwiPjE4NDwvYT58RnggUmF0ZSBTb3VyY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE4NVxcXCI+MTg1PC9hPnxBY2NydWFsIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTg2XFxcIj4xODY8L2E+fEFjY2VzcyBEZW5pZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTg3XFxcIj4xODc8L2E+fEludmFsaWQgSWRlbnRpdHkgVG9rZW58ICB8IHwgPGEgbmFtZT1cXFwiMTg4XFxcIj4xODg8L2E+fEludmFsaWQgUmVxdWVzdCBIZWFkZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjE4OVxcXCI+MTg5PC9hPnxQcmljZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTkwXFxcIj4xOTA8L2E+fEludmFsaWQgU3ViIEhvbGRpbmcgS2V5cyBQcm92aWRlZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTFcXFwiPjE5MTwvYT58RHVwbGljYXRlIFN1YiBIb2xkaW5nIEtleXMgUHJvdmlkZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTkyXFxcIj4xOTI8L2E+fEN1dCBEZWZpbml0aW9uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTNcXFwiPjE5MzwvYT58Q3V0IERlZmluaXRpb24gSW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTRcXFwiPjE5NDwvYT58VGltZSBWYXJpYW50IFByb3BlcnR5IERlbGV0aW9uIERhdGUgVW5zcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk1XFxcIj4xOTU8L2E+fFBlcnBldHVhbCBQcm9wZXJ0eSBEZWxldGlvbiBEYXRlIFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTZcXFwiPjE5NjwvYT58VGltZSBWYXJpYW50IFByb3BlcnR5IFVwc2VydCBEYXRlIFVuc3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5N1xcXCI+MTk3PC9hPnxQZXJwZXR1YWwgUHJvcGVydHkgVXBzZXJ0IERhdGUgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjIwMFxcXCI+MjAwPC9hPnxJbnZhbGlkIFVuaXQgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDFcXFwiPjIwMTwvYT58SW52YWxpZCBUeXBlIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjAyXFxcIj4yMDI8L2E+fEludmFsaWQgVmFsdWUgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDNcXFwiPjIwMzwvYT58VW5pdCBOb3QgRGVmaW5lZCBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNFxcXCI+MjA0PC9hPnxVbml0cyBOb3QgU3VwcG9ydGVkIE9uIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDVcXFwiPjIwNTwvYT58Q2Fubm90IFNwZWNpZnkgVW5pdHMgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNlxcXCI+MjA2PC9hPnxVbml0IFNjaGVtYSBJbmNvbnNpc3RlbnQgV2l0aCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA3XFxcIj4yMDc8L2E+fFVuaXQgRGVmaW5pdGlvbiBOb3QgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjIwOFxcXCI+MjA4PC9hPnxEdXBsaWNhdGUgVW5pdCBEZWZpbml0aW9ucyBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjA5XFxcIj4yMDk8L2E+fEludmFsaWQgVW5pdHMgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMTBcXFwiPjIxMDwvYT58SW52YWxpZCBJbnN0cnVtZW50IElkZW50aWZpZXIgVW5pdHwgIHwgfCA8YSBuYW1lPVxcXCIyMTFcXFwiPjIxMTwvYT58SG9sZGluZ3MgQWRqdXN0bWVudCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIyMTJcXFwiPjIxMjwvYT58Q291bGQgTm90IEJ1aWxkIEV4Y2VsIFVybHwgIHwgfCA8YSBuYW1lPVxcXCIyMTNcXFwiPjIxMzwvYT58Q291bGQgTm90IEdldCBFeGNlbCBWZXJzaW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIxNFxcXCI+MjE0PC9hPnxJbnN0cnVtZW50IEJ5IENvZGUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjIxNVxcXCI+MjE1PC9hPnxFbnRpdHkgU2NoZW1hIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjIxNlxcXCI+MjE2PC9hPnxGZWF0dXJlIE5vdCBTdXBwb3J0ZWQgT24gUG9ydGZvbGlvIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjE3XFxcIj4yMTc8L2E+fFF1b3RlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMThcXFwiPjIxODwvYT58SW52YWxpZCBRdW90ZSBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjIxOVxcXCI+MjE5PC9hPnxJbnZhbGlkIE1ldHJpYyBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIyMFxcXCI+MjIwPC9hPnxJbnZhbGlkIEluc3RydW1lbnQgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMjFcXFwiPjIyMTwvYT58SW5zdHJ1bWVudCBVcHNlcnQgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyMjJcXFwiPjIyMjwvYT58UmVmZXJlbmNlIFBvcnRmb2xpbyBSZXF1ZXN0IE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjIzXFxcIj4yMjM8L2E+fFRyYW5zYWN0aW9uIFBvcnRmb2xpbyBSZXF1ZXN0IE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjI0XFxcIj4yMjQ8L2E+fEludmFsaWQgUHJvcGVydHkgVmFsdWUgQXNzaWdubWVudHwgIHwgfCA8YSBuYW1lPVxcXCIyMzBcXFwiPjIzMDwvYT58VHJhbnNhY3Rpb24gVHlwZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMjMxXFxcIj4yMzE8L2E+fFRyYW5zYWN0aW9uIFR5cGUgRHVwbGljYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjMyXFxcIj4yMzI8L2E+fFBvcnRmb2xpbyBEb2VzIE5vdCBFeGlzdCBBdCBHaXZlbiBEYXRlfCAgfCB8IDxhIG5hbWU9XFxcIjIzM1xcXCI+MjMzPC9hPnxRdWVyeSBQYXJzZXIgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyMzRcXFwiPjIzNDwvYT58RHVwbGljYXRlIENvbnN0aXR1ZW50fCAgfCB8IDxhIG5hbWU9XFxcIjIzNVxcXCI+MjM1PC9hPnxVbnJlc29sdmVkIEluc3RydW1lbnQgQ29uc3RpdHVlbnR8ICB8IHwgPGEgbmFtZT1cXFwiMjM2XFxcIj4yMzY8L2E+fFVucmVzb2x2ZWQgSW5zdHJ1bWVudCBJbiBUcmFuc2l0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIzN1xcXCI+MjM3PC9hPnxNaXNzaW5nIFNpZGUgRGVmaW5pdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiMjQwXFxcIj4yNDA8L2E+fER1cGxpY2F0ZSBDYWxjdWxhdGlvbnMgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyOTlcXFwiPjI5OTwvYT58SW52YWxpZCBSZWNpcGV8ICB8IHwgPGEgbmFtZT1cXFwiMzAwXFxcIj4zMDA8L2E+fE1pc3NpbmcgUmVjaXBlfCAgfCB8IDxhIG5hbWU9XFxcIjMwMVxcXCI+MzAxPC9hPnxEZXBlbmRlbmNpZXN8ICB8IHwgPGEgbmFtZT1cXFwiMzA0XFxcIj4zMDQ8L2E+fFBvcnRmb2xpbyBQcmVwcm9jZXNzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEwXFxcIj4zMTA8L2E+fFZhbHVhdGlvbiBFbmdpbmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTFcXFwiPjMxMTwvYT58VGFzayBGYWN0b3J5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEyXFxcIj4zMTI8L2E+fFRhc2sgRXZhbHVhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxM1xcXCI+MzEzPC9hPnxUYXNrIEdlbmVyYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTRcXFwiPjMxNDwvYT58RW5naW5lIENvbmZpZ3VyYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTVcXFwiPjMxNTwvYT58TW9kZWwgU3BlY2lmaWNhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMyMFxcXCI+MzIwPC9hPnxNYXJrZXQgRGF0YSBLZXkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMjFcXFwiPjMyMTwvYT58TWFya2V0IFJlc29sdmVyIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzIyXFxcIj4zMjI8L2E+fE1hcmtldCBEYXRhIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMwXFxcIj4zMzA8L2E+fEN1cnZlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMxXFxcIj4zMzE8L2E+fFZvbGF0aWxpdHkgU3VyZmFjZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMzMlxcXCI+MzMyPC9hPnxWb2xhdGlsaXR5IEN1YmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNTBcXFwiPjM1MDwvYT58SW5zdHJ1bWVudCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM1MVxcXCI+MzUxPC9hPnxDYXNoIEZsb3dzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzUyXFxcIj4zNTI8L2E+fFJlZmVyZW5jZSBEYXRhIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzYwXFxcIj4zNjA8L2E+fEFnZ3JlZ2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzYxXFxcIj4zNjE8L2E+fEFnZ3JlZ2F0aW9uIE1lYXN1cmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzBcXFwiPjM3MDwvYT58UmVzdWx0IFJldHJpZXZhbCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MVxcXCI+MzcxPC9hPnxSZXN1bHQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MlxcXCI+MzcyPC9hPnxWZW5kb3IgUmVzdWx0IFByb2Nlc3NpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzNcXFwiPjM3MzwvYT58VmVuZG9yIFJlc3VsdCBNYXBwaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzc0XFxcIj4zNzQ8L2E+fFZlbmRvciBMaWJyYXJ5IFVuYXV0aG9yaXNlZHwgIHwgfCA8YSBuYW1lPVxcXCIzNzVcXFwiPjM3NTwvYT58VmVuZG9yIENvbm5lY3Rpdml0eSBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIzNzZcXFwiPjM3NjwvYT58VmVuZG9yIEludGVyZmFjZSBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIzNzdcXFwiPjM3NzwvYT58VmVuZG9yIFByaWNpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzhcXFwiPjM3ODwvYT58VmVuZG9yIFRyYW5zbGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzc5XFxcIj4zNzk8L2E+fFZlbmRvciBLZXkgTWFwcGluZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MFxcXCI+MzgwPC9hPnxWZW5kb3IgUmVmbGVjdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MVxcXCI+MzgxPC9hPnxWZW5kb3IgUHJvY2VzcyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MlxcXCI+MzgyPC9hPnxWZW5kb3IgU3lzdGVtIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzkwXFxcIj4zOTA8L2E+fEF0dGVtcHQgVG8gVXBzZXJ0IER1cGxpY2F0ZSBRdW90ZXN8ICB8IHwgPGEgbmFtZT1cXFwiMzkxXFxcIj4zOTE8L2E+fENvcnBvcmF0ZSBBY3Rpb24gU291cmNlIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjM5MlxcXCI+MzkyPC9hPnxDb3Jwb3JhdGUgQWN0aW9uIFNvdXJjZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIzOTNcXFwiPjM5MzwvYT58SW5zdHJ1bWVudCBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjM5NFxcXCI+Mzk0PC9hPnxQcm9wZXJ0aWVzIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIzOTVcXFwiPjM5NTwvYT58QmF0Y2ggT3BlcmF0aW9uIEFib3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNDAwXFxcIj40MDA8L2E+fEludmFsaWQgSXNvNDIxNyBDdXJyZW5jeSBDb2RlfCAgfCB8IDxhIG5hbWU9XFxcIjQwMVxcXCI+NDAxPC9hPnxDYW5ub3QgQXNzaWduIEluc3RydW1lbnQgSWRlbnRpZmllciBUbyBDdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI0MDJcXFwiPjQwMjwvYT58Q2Fubm90IEFzc2lnbiBDdXJyZW5jeSBJZGVudGlmaWVyIFRvIE5vbiBDdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI0MDNcXFwiPjQwMzwvYT58Q3VycmVuY3kgSW5zdHJ1bWVudCBDYW5ub3QgQmUgRGVsZXRlZHwgIHwgfCA8YSBuYW1lPVxcXCI0MDRcXFwiPjQwNDwvYT58Q3VycmVuY3kgSW5zdHJ1bWVudCBDYW5ub3QgSGF2ZSBFY29ub21pYyBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjQwNVxcXCI+NDA1PC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBIYXZlIExvb2t0aHJvdWdoIFBvcnRmb2xpb3wgIHwgfCA8YSBuYW1lPVxcXCI0MDZcXFwiPjQwNjwvYT58Q2Fubm90IENyZWF0ZSBDdXJyZW5jeSBJbnN0cnVtZW50IFdpdGggTXVsdGlwbGUgSWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNDA3XFxcIj40MDc8L2E+fFNwZWNpZmllZCBDdXJyZW5jeSBJcyBVbmRlZmluZWR8ICB8IHwgPGEgbmFtZT1cXFwiNDEwXFxcIj40MTA8L2E+fEluZGV4IERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjQxMVxcXCI+NDExPC9hPnxTb3J0IEZpZWxkIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjQxM1xcXCI+NDEzPC9hPnxOZWdhdGl2ZSBQYWdpbmF0aW9uIFBhcmFtZXRlcnN8ICB8IHwgPGEgbmFtZT1cXFwiNDE0XFxcIj40MTQ8L2E+fEludmFsaWQgU2VhcmNoIFN5bnRheHwgIHwgfCA8YSBuYW1lPVxcXCI0MTVcXFwiPjQxNTwvYT58RmlsdGVyIEV4ZWN1dGlvbiBUaW1lb3V0fCAgfCB8IDxhIG5hbWU9XFxcIjQyMFxcXCI+NDIwPC9hPnxTaWRlIERlZmluaXRpb24gSW5jb25zaXN0ZW50fCAgfCB8IDxhIG5hbWU9XFxcIjQ1MFxcXCI+NDUwPC9hPnxJbnZhbGlkIFF1b3RlIEFjY2VzcyBNZXRhZGF0YSBSdWxlfCAgfCB8IDxhIG5hbWU9XFxcIjQ1MVxcXCI+NDUxPC9hPnxBY2Nlc3MgTWV0YWRhdGEgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjQ1MlxcXCI+NDUyPC9hPnxJbnZhbGlkIEFjY2VzcyBNZXRhZGF0YSBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjQ2MFxcXCI+NDYwPC9hPnxTdGFuZGFyZCBSZXNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDYxXFxcIj40NjE8L2E+fFN0YW5kYXJkIFJlc291cmNlIENvbmZsaWN0fCAgfCB8IDxhIG5hbWU9XFxcIjQ2MlxcXCI+NDYyPC9hPnxDYWxlbmRhciBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDYzXFxcIj40NjM8L2E+fERhdGUgSW4gQSBDYWxlbmRhciBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDY0XFxcIj40NjQ8L2E+fEludmFsaWQgRGF0ZSBTb3VyY2UgRGF0YXwgIHwgfCA8YSBuYW1lPVxcXCI0NjVcXFwiPjQ2NTwvYT58SW52YWxpZCBUaW1lem9uZXwgIHwgfCA8YSBuYW1lPVxcXCI2MDFcXFwiPjYwMTwvYT58UGVyc29uIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNjAyXFxcIj42MDI8L2E+fFBlcnNvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjAzXFxcIj42MDM8L2E+fENhbm5vdCBTZXQgSWRlbnRpZmllcnwgIHwgfCA8YSBuYW1lPVxcXCI2MTdcXFwiPjYxNzwvYT58SW52YWxpZCBSZWNpcGUgU3BlY2lmaWNhdGlvbiBJbiBSZXF1ZXN0fCAgfCB8IDxhIG5hbWU9XFxcIjYxOFxcXCI+NjE4PC9hPnxJbmxpbmUgUmVjaXBlIERlc2VyaWFsaXNhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjYxOVxcXCI+NjE5PC9hPnxJZGVudGlmaWVyIFR5cGVzIE5vdCBTZXQgRm9yIEVudGl0eXwgIHwgfCA8YSBuYW1lPVxcXCI2MjBcXFwiPjYyMDwvYT58Q2Fubm90IERlbGV0ZSBBbGwgQ2xpZW50IERlZmluZWQgSWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNjUwXFxcIj42NTA8L2E+fFRoZSBPcmRlciByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNjU0XFxcIj42NTQ8L2E+fFRoZSBBbGxvY2F0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTVcXFwiPjY1NTwvYT58Q2Fubm90IGJ1aWxkIHRoZSBmeCBmb3J3YXJkIHRhcmdldCB3aXRoIHRoZSBnaXZlbiBob2xkaW5ncy58ICB8IHwgPGEgbmFtZT1cXFwiNjU2XFxcIj42NTY8L2E+fEdyb3VwIGRvZXMgbm90IGNvbnRhaW4gZXhwZWN0ZWQgZW50aXRpZXMufCAgfCB8IDxhIG5hbWU9XFxcIjY2NVxcXCI+NjY1PC9hPnxEZXN0aW5hdGlvbiBkaXJlY3Rvcnkgbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY2N1xcXCI+NjY3PC9hPnxSZWxhdGlvbiBkZWZpbml0aW9uIGFscmVhZHkgZXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjY3MlxcXCI+NjcyPC9hPnxDb3VsZCBub3QgcmV0cmlldmUgZmlsZSBjb250ZW50c3wgIHwgfCA8YSBuYW1lPVxcXCI2NzNcXFwiPjY3MzwvYT58TWlzc2luZyBlbnRpdGxlbWVudHMgZm9yIGVudGl0aWVzIGluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjY3NFxcXCI+Njc0PC9hPnxOZXh0IEJlc3QgQWN0aW9uIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2NzZcXFwiPjY3NjwvYT58UmVsYXRpb24gZGVmaW5pdGlvbiBub3QgZGVmaW5lZHwgIHwgfCA8YSBuYW1lPVxcXCI2NzdcXFwiPjY3NzwvYT58SW52YWxpZCBlbnRpdHkgaWRlbnRpZmllciBmb3IgcmVsYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNjgxXFxcIj42ODE8L2E+fFNvcnRpbmcgYnkgc3BlY2lmaWVkIGZpZWxkIG5vdCBzdXBwb3J0ZWR8T25lIG9yIG1vcmUgb2YgdGhlIHByb3ZpZGVkIGZpZWxkcyB0byBvcmRlciBieSB3ZXJlIGVpdGhlciBpbnZhbGlkIG9yIG5vdCBzdXBwb3J0ZWQuIHwgfCA8YSBuYW1lPVxcXCI2ODJcXFwiPjY4MjwvYT58VG9vIG1hbnkgZmllbGRzIHRvIHNvcnQgYnl8VGhlIG51bWJlciBvZiBmaWVsZHMgdG8gc29ydCB0aGUgZGF0YSBieSBleGNlZWRzIHRoZSBudW1iZXIgYWxsb3dlZCBieSB0aGUgZW5kcG9pbnQgfCB8IDxhIG5hbWU9XFxcIjY4NFxcXCI+Njg0PC9hPnxTZXF1ZW5jZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjg1XFxcIj42ODU8L2E+fFNlcXVlbmNlIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjY4NlxcXCI+Njg2PC9hPnxOb24tY3ljbGluZyBzZXF1ZW5jZSBoYXMgYmVlbiBleGhhdXN0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjg3XFxcIj42ODc8L2E+fExlZ2FsIEVudGl0eSBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjY4OFxcXCI+Njg4PC9hPnxMZWdhbCBFbnRpdHkgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY4OVxcXCI+Njg5PC9hPnxUaGUgc3VwcGxpZWQgcGFnaW5hdGlvbiB0b2tlbiBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjY5MFxcXCI+NjkwPC9hPnxQcm9wZXJ0eSBUeXBlIElzIE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkxXFxcIj42OTE8L2E+fE11bHRpcGxlIFRheC1sb3RzIEZvciBDdXJyZW5jeSBUeXBlIElzIE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkyXFxcIj42OTI8L2E+fFRoaXMgZW5kcG9pbnQgZG9lcyBub3Qgc3VwcG9ydCBpbXBlcnNvbmF0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjY5M1xcXCI+NjkzPC9hPnxFbnRpdHkgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBSZWxhdGlvbnNoaXB8ICB8IHwgPGEgbmFtZT1cXFwiNjk0XFxcIj42OTQ8L2E+fFJlbGF0aW9uc2hpcCBWYWxpZGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNjk1XFxcIj42OTU8L2E+fFJlbGF0aW9uc2hpcCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjk3XFxcIj42OTc8L2E+fERlcml2ZWQgUHJvcGVydHkgRm9ybXVsYSBObyBMb25nZXIgVmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNjk4XFxcIj42OTg8L2E+fFN0b3J5IGlzIG5vdCBhdmFpbGFibGV8ICB8IHwgPGEgbmFtZT1cXFwiNzAzXFxcIj43MDM8L2E+fENvcnBvcmF0ZSBBY3Rpb24gRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNzIwXFxcIj43MjA8L2E+fFRoZSBwcm92aWRlZCBzb3J0IGFuZCBmaWx0ZXIgY29tYmluYXRpb24gaXMgbm90IHZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjcyMVxcXCI+NzIxPC9hPnxBMkIgZ2VuZXJhdGlvbiBmYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiNzIyXFxcIj43MjI8L2E+fEFnZ3JlZ2F0ZWQgUmV0dXJuIENhbGN1bGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNzIzXFxcIj43MjM8L2E+fEN1c3RvbSBFbnRpdHkgRGVmaW5pdGlvbiBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjcyNFxcXCI+NzI0PC9hPnxDdXN0b20gRW50aXR5IERlZmluaXRpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjcyNVxcXCI+NzI1PC9hPnxUaGUgUGxhY2VtZW50IHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjZcXFwiPjcyNjwvYT58VGhlIEV4ZWN1dGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI3XFxcIj43Mjc8L2E+fFRoZSBCbG9jayByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI4XFxcIj43Mjg8L2E+fFRoZSBQYXJ0aWNpcGF0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjlcXFwiPjcyOTwvYT58VGhlIFBhY2thZ2UgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjczMFxcXCI+NzMwPC9hPnxUaGUgT3JkZXJJbnN0cnVjdGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzMyXFxcIj43MzI8L2E+fEN1c3RvbSBFbnRpdHkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzNcXFwiPjczMzwvYT58Q3VzdG9tIEVudGl0eSBJZGVudGlmaWVyIGFscmVhZHkgaW4gdXNlLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzVcXFwiPjczNTwvYT58Q2FsY3VsYXRpb24gRmFpbGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzZcXFwiPjczNjwvYT58QW4gZXhwZWN0ZWQga2V5IG9uIEh0dHBSZXNwb25zZSBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzdcXFwiPjczNzwvYT58QSByZXF1aXJlZCBmZWUgZGV0YWlsIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjczOFxcXCI+NzM4PC9hPnxaZXJvIHJvd3Mgd2VyZSByZXR1cm5lZCBmcm9tIEx1bWluZXNjZXwgIHwgfCA8YSBuYW1lPVxcXCI3MzlcXFwiPjczOTwvYT58UHJvdmlkZWQgV2Vla2VuZCBNYXNrIHdhcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjc0MlxcXCI+NzQyPC9hPnxDdXN0b20gRW50aXR5IGZpZWxkcyBkbyBub3QgbWF0Y2ggdGhlIGRlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNzQ2XFxcIj43NDY8L2E+fFRoZSBwcm92aWRlZCBzZXF1ZW5jZSBpcyBub3QgdmFsaWQufCAgfCB8IDxhIG5hbWU9XFxcIjc1MVxcXCI+NzUxPC9hPnxUaGUgdHlwZSBvZiB0aGUgQ3VzdG9tIEVudGl0eSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdHlwZSBwcm92aWRlZCBpbiB0aGUgZGVmaW5pdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiNzUyXFxcIj43NTI8L2E+fEx1bWluZXNjZSBwcm9jZXNzIHJldHVybmVkIGFuIGVycm9yLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTNcXFwiPjc1MzwvYT58RmlsZSBuYW1lIG9yIGNvbnRlbnQgaW5jb21wYXRpYmxlIHdpdGggb3BlcmF0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTVcXFwiPjc1NTwvYT58U2NoZW1hIG9mIHJlc3BvbnNlIGZyb20gRHJpdmUgaXMgbm90IGFzIGV4cGVjdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTdcXFwiPjc1NzwvYT58U2NoZW1hIG9mIHJlc3BvbnNlIGZyb20gTHVtaW5lc2NlIGlzIG5vdCBhcyBleHBlY3RlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzU4XFxcIj43NTg8L2E+fEx1bWluZXNjZSB0aW1lZCBvdXQufCAgfCB8IDxhIG5hbWU9XFxcIjc2M1xcXCI+NzYzPC9hPnxJbnZhbGlkIEx1c2lkIEVudGl0eSBJZGVudGlmaWVyIFVuaXR8ICB8IHwgPGEgbmFtZT1cXFwiNzY4XFxcIj43Njg8L2E+fEZlZSBydWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzY5XFxcIj43Njk8L2E+fENhbm5vdCB1cGRhdGUgdGhlIGJhc2UgY3VycmVuY3kgb2YgYSBwb3J0Zm9saW8gd2l0aCB0cmFuc2FjdGlvbnMgbG9hZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjc3MVxcXCI+NzcxPC9hPnxUcmFuc2FjdGlvbiBjb25maWd1cmF0aW9uIHNvdXJjZSBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNzc0XFxcIj43NzQ8L2E+fENvbXBsaWFuY2UgcnVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjc3NVxcXCI+Nzc1PC9hPnxGdW5kIGFjY291bnRpbmcgZG9jdW1lbnQgY2Fubm90IGJlIHByb2Nlc3NlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzc4XFxcIj43Nzg8L2E+fFVuYWJsZSB0byBsb29rIHVwIEZYIHJhdGUgZnJvbSB0cmFkZSBjY3kgdG8gcG9ydGZvbGlvIGNjeSBmb3Igc29tZSBvZiB0aGUgdHJhZGVzLnwgIHwgfCA8YSBuYW1lPVxcXCI3ODJcXFwiPjc4MjwvYT58VGhlIFByb3BlcnR5IGRlZmluaXRpb24gZGF0YVR5cGUgaXMgbm90IG1hdGNoaW5nIHRoZSBkZXJpdmF0aW9uIGZvcm11bGEgZGF0YVR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiNzgzXFxcIj43ODM8L2E+fFRoZSBQcm9wZXJ0eSBkZWZpbml0aW9uIGRvbWFpbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBkZXJpdmVkIHByb3BlcnRpZXN8ICB8IHwgPGEgbmFtZT1cXFwiNzg4XFxcIj43ODg8L2E+fENvbXBsaWFuY2UgcnVuIG5vdCBmb3VuZCBmYWlsdXJlLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTBcXFwiPjc5MDwvYT58Q3VzdG9tIEVudGl0eSBoYXMgbWlzc2luZyBvciBpbnZhbGlkIGlkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjc5MVxcXCI+NzkxPC9hPnxDdXN0b20gRW50aXR5IGRlZmluaXRpb24gYWxyZWFkeSBleGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNzkyXFxcIj43OTI8L2E+fENvbXBsaWFuY2UgUHJvcGVydHlLZXkgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzkzXFxcIj43OTM8L2E+fENvbXBsaWFuY2UgQ3JpdGVyaWEgVmFsdWUgZm9yIG1hdGNoaW5nIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjc5NVxcXCI+Nzk1PC9hPnxDYW5ub3QgZGVsZXRlIGlkZW50aWZpZXIgZGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI3OTZcXFwiPjc5NjwvYT58VGF4IHJ1bGUgc2V0IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzk3XFxcIj43OTc8L2E+fEEgdGF4IHJ1bGUgc2V0IHdpdGggdGhpcyBpZCBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiNzk4XFxcIj43OTg8L2E+fE11bHRpcGxlIHJ1bGUgc2V0cyBmb3IgdGhlIHNhbWUgcHJvcGVydHkga2V5IGFyZSBhcHBsaWNhYmxlLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTlcXFwiPjc5OTwvYT58VGhlIHJlcXVlc3QgbXVzdCBjb250YWluIGEgZGF0ZSBvciBkaWFyeSBlbnRyeS58ICB8IHwgPGEgbmFtZT1cXFwiODAwXFxcIj44MDA8L2E+fENhbiBub3QgdXBzZXJ0IGFuIGluc3RydW1lbnQgZXZlbnQgb2YgdGhpcyB0eXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDFcXFwiPjgwMTwvYT58VGhlIGluc3RydW1lbnQgZXZlbnQgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwMlxcXCI+ODAyPC9hPnxUaGUgSW5zdHJ1bWVudCBldmVudCBpcyBtaXNzaW5nIHNhbGllbnQgaW5mb3JtYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjgwM1xcXCI+ODAzPC9hPnxUaGUgSW5zdHJ1bWVudCBldmVudCBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDRcXFwiPjgwNDwvYT58U29tZSBkYXRhIHJlcXVlc3RlZCBkb2VzIG5vdCBmb2xsb3cgdGhlIG9yZGVyIGdyYXBoIGFzc3VtcHRpb25zLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDVcXFwiPjgwNTwvYT58VGhlIGluc3RydW1lbnQgZXZlbnQgdHlwZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODA2XFxcIj44MDY8L2E+fFRoZSB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDdcXFwiPjgwNzwvYT58VGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gdGVtcGxhdGUgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwOFxcXCI+ODA4PC9hPnxUaGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgxMVxcXCI+ODExPC9hPnxBIHByaWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgYW4gb3JkZXIufCAgfCB8IDxhIG5hbWU9XFxcIjgxMlxcXCI+ODEyPC9hPnxBIHByaWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgYW4gYWxsb2NhdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODEzXFxcIj44MTM8L2E+fENoYXJ0IG9mIEFjY291bnRzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE0XFxcIj44MTQ8L2E+fEFjY291bnQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTVcXFwiPjgxNTwvYT58QWJvciBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxNlxcXCI+ODE2PC9hPnxBYm9yIENvbmZpZ3VyYXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTdcXFwiPjgxNzwvYT58UmVjb25jaWxpYXRpb24gbWFwcGluZyBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODE4XFxcIj44MTg8L2E+fEF0dHJpYnV0ZSB0eXBlIGNvdWxkIG5vdCBiZSBkZWxldGVkIGJlY2F1c2UgaXQgZG9lc25cXCd0IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MTlcXFwiPjgxOTwvYT58UmVjb25jaWxpYXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjBcXFwiPjgyMDwvYT58Q3VzdG9kaWFuIEFjY291bnQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjFcXFwiPjgyMTwvYT58QWxsb2NhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjgyMlxcXCI+ODIyPC9hPnxSZWNvbmNpbGlhdGlvbiBydW4gbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjgyM1xcXCI+ODIzPC9hPnxSZWNvbmNpbGlhdGlvbiBicmVhayBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODI0XFxcIj44MjQ8L2E+fEVudGl0eSBsaW5rIHR5cGUgY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgyOFxcXCI+ODI4PC9hPnxBZGRyZXNzIGtleSBkZWZpbml0aW9uIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODI5XFxcIj44Mjk8L2E+fENvbXBsaWFuY2UgdGVtcGxhdGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzBcXFwiPjgzMDwvYT58QWN0aW9uIG5vdCBzdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiODMxXFxcIj44MzE8L2E+fFJlZmVyZW5jZSBsaXN0IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODMyXFxcIj44MzI8L2E+fFBvc3RpbmcgTW9kdWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODMzXFxcIj44MzM8L2E+fFRoZSB0eXBlIG9mIHBhcmFtZXRlciBwcm92aWRlZCBkaWQgbm90IG1hdGNoIHRoYXQgcmVxdWlyZWQgYnkgdGhlIGNvbXBsaWFuY2UgcnVsZS58ICB8IHwgPGEgbmFtZT1cXFwiODM0XFxcIj44MzQ8L2E+fFRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IGEgcnVsZSBkaWQgbm90IG1hdGNoIHRob3NlIHJlcXVpcmVkIGJ5IGl0cyB0ZW1wbGF0ZS58ICB8IHwgPGEgbmFtZT1cXFwiODM1XFxcIj44MzU8L2E+fFRoZSBlbnRpdHkgaGFzIGEgcHJvcGVydHkgaW4gYSBkb21haW4gdGhhdCBpcyBub3Qgc3VwcHJ0ZWQgZm9yIHRoYXQgZW50aXR5IHR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjgzNlxcXCI+ODM2PC9hPnxTdHJ1Y3R1cmVkIHJlc3VsdCBkYXRhIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODM3XFxcIj44Mzc8L2E+fERpYXJ5IGVudHJ5IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODM4XFxcIj44Mzg8L2E+fERpYXJ5IGVudHJ5IGNvdWxkIG5vdCBiZSBjcmVhdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzlcXFwiPjgzOTwvYT58RGlhcnkgZW50cnkgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjg2MVxcXCI+ODYxPC9hPnxDb21wbGlhbmNlIHJ1biBzdW1tYXJ5IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODY5XFxcIj44Njk8L2E+fENvbmZsaWN0aW5nIGluc3RydW1lbnQgcHJvcGVydGllcyBpbiBiYXRjaC58ICB8IHwgPGEgbmFtZT1cXFwiODcwXFxcIj44NzA8L2E+fENvbXBsaWFuY2UgcnVuIHN1bW1hcnkgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjg3MVxcXCI+ODcxPC9hPnxUaGUgc3BlY2lmaWVkIGltcGVyc29uYXRlZCB1c2VyIGRvZXMgbm90IGV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjg3NFxcXCI+ODc0PC9hPnxQcm92aWRlZCBQcm9wZXJ0eSBEb21haW4gaXMgbm90IHN1cHBvcnRlZCBmb3IgZW50aXR5IGZpbHRlci58ICB8IHwgPGEgbmFtZT1cXFwiODc1XFxcIj44NzU8L2E+fENhbm5vdCBEZWxldGUgU3lzdGVtIFJlZmVyZW5jZSBMaXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4NzZcXFwiPjg3NjwvYT58Q2xlYXJkb3duIE1vZHVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjg3OVxcXCI+ODc5PC9hPnxQb3J0Zm9saW9zIGRvIG5vdCBoYXZlIHRoZSBzYW1lIGJhc2UgY3VycmVuY3l8ICB8IHwgPGEgbmFtZT1cXFwiODgwXFxcIj44ODA8L2E+fFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29tcGxpYW5jZSBleHByZXNzaW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODFcXFwiPjg4MTwvYT58QmxvY2sgb3ZlcnBsYWNlZC58ICB8IHwgPGEgbmFtZT1cXFwiODgyXFxcIj44ODI8L2E+fE9yZGVyIG5vdCBhcHByb3ZlZC58ICB8IHwgPGEgbmFtZT1cXFwiODgzXFxcIj44ODM8L2E+fENhbm5vdCB1cGRhdGUgdGhlIHNoYXJlZCBmaWVsZHMgb2YgYSBibG9jayB3aXRoIGFzc29jaWF0ZWQgb3JkZXJzLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODZcXFwiPjg4NjwvYT58Q2Fubm90IGxvY2sgdGhlIHBlcmlvZC58ICB8IHwgPGEgbmFtZT1cXFwiODg3XFxcIj44ODc8L2E+fENhbm5vdCBhcHBseSBjbGVhciBkb3duIG1vZHVsZS58ICB8IHwgPGEgbmFtZT1cXFwiODg4XFxcIj44ODg8L2E+fENhbm5vdCB1cHNlcnQgSW5zdHJ1bWVudCBFdmVudCBJbnN0cnVjdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODg5XFxcIj44ODk8L2E+fENhbm5vdCByZWFkIEluc3RydW1lbnQgRXZlbnQgSW5zdHJ1Y3Rpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjg5NVxcXCI+ODk1PC9hPnxUaGUgQ2FwaXRhbCBSYXRpbyBDYWxjdWxhdGlvbiBJcyBXcm9uZy58ICB8IHwgPGEgbmFtZT1cXFwiOTEwXFxcIj45MTA8L2E+fENhbm5vdCB1cGRhdGUgYSBibG9jayByZWZlcmVuY2VkIGJ5IGEgcGxhY2VtZW50LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTFcXFwiPjkxMTwvYT58QSBGdW5kIHRoYXQgcmVmZXJlbmNlcyB0aGlzIEFib3IgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjkxMlxcXCI+OTEyPC9hPnxDYW5ub3QgYWRkIGRlY2lzaW9uIHRvIFN0YWdlZCBNb2RpZmljYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkxM1xcXCI+OTEzPC9hPnxUaGUgU3RhZ2VkIE1vZGlmaWNhdGlvbiBjb3VsZCBub3QgYmUgYXBwbGllZC58ICB8IHwgPGEgbmFtZT1cXFwiOTE0XFxcIj45MTQ8L2E+fEFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkxNVxcXCI+OTE1PC9hPnxDYW5ub3QgdXBzZXJ0IG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lIHByb3BlcnR5IGluIG9uZSByZXF1ZXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTZcXFwiPjkxNjwvYT58UGxhY2VtZW50IGFuZCBkaXJlY3QgZGVzY2VuZGVudHMgaGF2ZSBtb3JlIGV4ZWN1dGVkIHF1YW50aXR5IHRoYW4gdG90YWwgcGxhY2VtZW50IHF1YW50aXR5LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTdcXFwiPjkxNzwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoaXMgRW50cnlUeXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MThcXFwiPjkxODwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCBpbiB0aGlzIFN0YXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTlcXFwiPjkxOTwvYT58UGxhY2VtZW50IGNvdWxkIG5vdCBiZSBjYW5jZWxsZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkyMFxcXCI+OTIwPC9hPnxTaGFyZSBDbGFzcyBub3QgY29uZmlndXJlZCBpbiBGdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjkyMVxcXCI+OTIxPC9hPnxTaGFyZSBDbGFzcyBTdWIgSG9sZGluZyBLZXkgbm90IGNvbmZpZ3VyZWQgaW4gUG9ydGZvbGlvfCAgfCB8IDxhIG5hbWU9XFxcIjkyMlxcXCI+OTIyPC9hPnxDb3VsZCBub3QgdXBkYXRlIGFuIG9yZGVyLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjNcXFwiPjkyMzwvYT58TXVsdGlwbGUgc2V0cyBvZiBTaGFyZSBDbGFzcyBTdWIgSG9sZGluZyBLZXlzIGNvbmZpZ3VyZWQgYWNyb3NzIHRoZSBQb3J0Zm9saW9zIG9mIGEgRnVuZC58ICB8IHwgPGEgbmFtZT1cXFwiOTI0XFxcIj45MjQ8L2E+fE9uZSBvciBtb3JlIG1hdHJpeCBjZWxscyBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIG1hdHJpeC58ICB8IHwgPGEgbmFtZT1cXFwiOTI1XFxcIj45MjU8L2E+fFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgcHJvdmlkZWQgbWF0cml4IGRlZmluaXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkyNlxcXCI+OTI2PC9hPnxNYXRyaXggZGVmaW5pdGlvbiBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiOTI3XFxcIj45Mjc8L2E+fE1hdHJpeCBkZWZpbml0aW9uIGNvdWxkIG5vdCBiZSBkZWxldGVkIGJlY2F1c2UgaXQgZG9lc25cXCd0IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjhcXFwiPjkyODwvYT58RGF0YVR5cGUgd2l0aCBJZCBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiOTI5XFxcIj45Mjk8L2E+fFNxdWFyZSBtYXRyaXggaXMgaW5jb21wbGV0ZS58ICB8IHwgPGEgbmFtZT1cXFwiOTMwXFxcIj45MzA8L2E+fEEgY29uZGl0aW9uYWwgbGljZW5zZSB0ZXJtIGhhcyBiZWVuIGV4Y2VlZGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzFcXFwiPjkzMTwvYT58VGhlIEN1c3RvbSBEYXRhIE1vZGVsIHJlcXVlc3RlZCBpcyBub3QgaW50ZW5kZWQgZm9yIHRoZSBlbnRpdHkgcHJvdmlkZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkzMlxcXCI+OTMyPC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGRvZXMgbm90IGhhdmUgYSBtYW5kYXRvcnkgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTMzXFxcIj45MzM8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgaGFzIGEgcHJvcGVydHkgbm90IGFsbG93ZWQgYnkgdGhlIHNwZWNpZmllZCBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM0XFxcIj45MzQ8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgZG9lcyBub3QgaGF2ZSBhIG1hbmRhdG9yeSBpZGVudGlmaWVyIHNwZWNpZmllZCBieSB0aGUgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzNVxcXCI+OTM1PC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGhhcyBhbiBpZGVudGlmaWVyIG5vdCBhbGxvd2VkIGJ5IHRoZSBzcGVjaWZpZWQgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzNlxcXCI+OTM2PC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgaW5jbHVkZWQgYW4gYWxpYXMgb3Igc29ydC1ieSBhdHRyaWJ1dGUgdGhhdCB3YXMgbm90IG9uIHRoZSBkZWZpbml0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzdcXFwiPjkzNzwvYT58VGhlIENsb3NlZFBlcmlvZCB3aXRoIHRoZSBJZCBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTM4XFxcIj45Mzg8L2E+fFRoZSBuZXcgQ2xvc2VkIFBlcmlvZCB3b3VsZCBjYXVzZSB0aGUgVGltZWxpbmUgdG8gaGF2ZSBub24tY29udGlndW91cyBDbG9zZWQgUGVyaW9kc3wgIHwgfCA8YSBuYW1lPVxcXCI5MzlcXFwiPjkzOTwvYT58QmxvY2tlZCBieSBhIE5ldHdvcmsgWm9uZXwgIHwgfCA8YSBuYW1lPVxcXCI5NDBcXFwiPjk0MDwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBkb2VzIG5vdCBtZWV0IHRoZSBjb25kaXRpb25zIG9mIHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTQxXFxcIj45NDE8L2E+fE9yZGVyIG5vdCBjb21wbGlhbnQufCAgfCB8IDxhIG5hbWU9XFxcIjk0MlxcXCI+OTQyPC9hPnxBY3Rpb24gd291bGQgY3JlYXRlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS58ICB8IHwgPGEgbmFtZT1cXFwiOTQ0XFxcIj45NDQ8L2E+fERlcml2ZWQgUHJvcGVydHkgY2FsY3VsYXRpb24gbm90IGNvbXBsZXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDVcXFwiPjk0NTwvYT58RGVyaXZlZCBQcm9wZXJ0eSBpcyBub3QgZmlsdGVyYWJsZS58ICB8IHwgPGEgbmFtZT1cXFwiOTQ2XFxcIj45NDY8L2E+fFRoZSBjb25kaXRpb25zIHByb3ZpZGVkIGhhdmUgb25lIG9yIG1vcmUgZXJyb3JzLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDdcXFwiPjk0NzwvYT58VGhlIHByb3BlcnR5L2lkZW50aWZpZXIgZG9tYWluIGFuZCBlbnRpdHkgZG9tYWluIGRvIG5vdCBtYXRjaC58ICB8IHwgPGEgbmFtZT1cXFwiOTQ4XFxcIj45NDg8L2E+fEludmFsaWQgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTQ5XFxcIj45NDk8L2E+fEZpbHRlcmFibGUgRGVyaXZlZCBQcm9wZXJ0eSBsaW1pdCByZWFjaGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5NTBcXFwiPjk1MDwvYT58SW52ZXN0b3IgUmVjb3JkIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiOTUxXFxcIj45NTE8L2E+fEludmVzdG9yIFJlY29yZCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTUyXFxcIj45NTI8L2E+fEludmVzdG1lbnQgQWNjb3VudCBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjk1M1xcXCI+OTUzPC9hPnxJbnZlc3RtZW50IEFjY291bnQgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjk1NFxcXCI+OTU0PC9hPnxDb3VsZCBOb3QgU3dlZXAgQmxvY2t8ICB8IHwgPGEgbmFtZT1cXFwiOTU1XFxcIj45NTU8L2E+fEVudGl0eSBVbmlxdWUgSWQgaGFzIHRoZSB3cm9uZyBmb3JtYXR8ICB8IHwgPGEgbmFtZT1cXFwiOTU2XFxcIj45NTY8L2E+fFBvc3QgQ2xvc2UgQWN0aXZpdHkgaXMgaW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI5NTdcXFwiPjk1NzwvYT58VGhlIENsb3NlZFBlcmlvZCB3aXRoIHRoZSBJZCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTU4XFxcIj45NTg8L2E+fEludmFsaWQgU2V0dGxlbWVudCBJbnN0cnVjdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiOTU5XFxcIj45NTk8L2E+fE9yZGVyIHJlcXVpcmVzIHF1YW50aXR5LnwgIHwgfCA8YSBuYW1lPVxcXCI5NjBcXFwiPjk2MDwvYT58SW52YWxpZCBEYXRhUG9pbnQgVmFsdWUgQXNzaWdubWVudHwgIHwgfCA8YSBuYW1lPVxcXCI5NjFcXFwiPjk2MTwvYT58SW52YWxpZCBSZWxhdGlvbmFsIERhdGFzZXQgRmllbGQgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI5NjJcXFwiPjk2MjwvYT58UmVsYXRpb25hbCBEYXRhc2V0IERlZmluaXRpb24gRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiOTYzXFxcIj45NjM8L2E+fFRpbWVsaW5lIEJvb2ttYXJrIE5vdCBJbiBPcGVuIFBlcmlvZHwgIHwgfCA8YSBuYW1lPVxcXCI5NjRcXFwiPjk2NDwvYT58VGhlIEN1c3RvbSBEYXRhIE1vZGVsIHNwZWNpZmllZCBpZGVudGlmaWVycyBidXQgdGhlIGVudGl0eSBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjk2NVxcXCI+OTY1PC9hPnxUaGUgc29ydCBieSBwcm92aWRlZCBoYXMgb25lIG9yIG1vcmUgZXJyb3JzfCAgfCB8IDxhIG5hbWU9XFxcIjk2NlxcXCI+OTY2PC9hPnxJbnZhbGlkIEN1c3RvbSBEYXRhIE1vZGVsIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiOTY3XFxcIj45Njc8L2E+fFJ1bGUgc2V0IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBDaGVjayBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjk2OFxcXCI+OTY4PC9hPnxUaGUgQ2xvc2VkIFBlcmlvZCBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjk2OVxcXCI+OTY5PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBTdG9wIFByaWNlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzBcXFwiPjk3MDwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoaXMgTGltaXQgUHJpY2UufCAgfCB8IDxhIG5hbWU9XFxcIjk3MVxcXCI+OTcxPC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhlIGN1cnJlbnQgVHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiOTc0XFxcIj45NzQ8L2E+fENhbm5vdCBQbGFjZUJsb2NrcyBhZ2FpbnN0IGFuIFxcJ1Vuc29saWNpdGVkXFwnIEJsb2NrIChibG9jayBjb250YWluaW5nIDAgT3JkZXJzKS58ICB8IHwgPGEgbmFtZT1cXFwiOTc1XFxcIj45NzU8L2E+fE5vIFBvcnRmb2xpbyBHcm91cCBTZWxlY3RlZHwgIHwgfCA8YSBuYW1lPVxcXCI5NzZcXFwiPjk3NjwvYT58QW1iaWd1b3VzIFNjb3BlfCAgfCBcbiAqXG4gKiBDb250YWN0OiBpbmZvQGZpbmJvdXJuZS5jb21cbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsXG4gICAgICAgICBIdHRwUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cFBhcmFtZXRlckNvZGVjLCBIdHRwQ29udGV4dCBcbiAgICAgICAgfSAgICAgICBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMgfSAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vZW5jb2Rlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcyc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEFsbG9jYXRpb25FdmVudCB9IGZyb20gJy4uL21vZGVsL2FsbG9jYXRpb25FdmVudCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBBbGxvY2F0aW9uRXZlbnRCb29rUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2FsbG9jYXRpb25FdmVudEJvb2tSZXF1ZXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWwvYWxsb2NhdGlvbkV2ZW50UmVhbGxvY2F0ZVJlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQWxsb2NhdGlvbkV2ZW50UmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2FsbG9jYXRpb25FdmVudFJlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRGVsZXRlZEVudGl0eVJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvZGVsZXRlZEVudGl0eVJlc3BvbnNlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi9tb2RlbC9sdXNpZFByb2JsZW1EZXRhaWxzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkVmFsaWRhdGlvblByb2JsZW1EZXRhaWxzIH0gZnJvbSAnLi4vbW9kZWwvbHVzaWRWYWxpZGF0aW9uUHJvYmxlbURldGFpbHMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnZWRSZXNvdXJjZUxpc3RPZkFsbG9jYXRpb25FdmVudCB9IGZyb20gJy4uL21vZGVsL3BhZ2VkUmVzb3VyY2VMaXN0T2ZBbGxvY2F0aW9uRXZlbnQnO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vdmFyaWFibGVzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb2RlIG9mIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiBUb2dldGhlciB3aXRoIHRoZSBzY29wZSB0aGlzIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFsbG9jYXRpb24gRXZlbnQuICovXG4gICAgY29kZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgYm9va2luZyByZWZlcmVuY2UgdG8gZnJlZXplIHRoZSBldmVudCB1bmRlci4gKi9cbiAgICBhbGxvY2F0aW9uRXZlbnRCb29rUmVxdWVzdDogQWxsb2NhdGlvbkV2ZW50Qm9va1JlcXVlc3Q7XG4gICAgLyoqIFRoZSBlZmZlY3RpdmUgZGF0ZXRpbWUgb3IgY3V0IGxhYmVsIGZyb20gd2hpY2ggdGhlIGJvb2tpbmcgYXBwbGllcy4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgTFVTSUQgc3lzdGVtIGRhdGV0aW1lIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgZWZmZWN0aXZlQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQWxsb2NhdGlvbkV2ZW50UmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBzY29wZSBvZiB0aGUgQWxsb2NhdGlvbiBFdmVudC4gKi9cbiAgICBzY29wZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgQWxsb2NhdGlvbiBFdmVudC4gKi9cbiAgICBhbGxvY2F0aW9uRXZlbnRSZXF1ZXN0OiBBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgQWxsb2NhdGlvbiBFdmVudC4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBlZmZlY3RpdmUgZGF0ZXRpbWUgb3IgY3V0IGxhYmVsIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBMVVNJRCBzeXN0ZW0gZGF0ZXRpbWUgaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBlZmZlY3RpdmVBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb2RlIG9mIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiBUb2dldGhlciB3aXRoIHRoZSBzY29wZSB0aGlzIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFsbG9jYXRpb24gRXZlbnQuICovXG4gICAgY29kZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgZWZmZWN0aXZlIGRhdGV0aW1lIG9yIGN1dCBsYWJlbCBhdCB3aGljaCB0byByZXRyaWV2ZSB0aGUgQWxsb2NhdGlvbiBFdmVudC4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgTFVTSUQgc3lzdGVtIGRhdGV0aW1lIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgZWZmZWN0aXZlQXQ/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBhc0F0IGRhdGV0aW1lIGF0IHdoaWNoIHRvIHJldHJpZXZlIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiBEZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgYXNBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0QWxsb2NhdGlvbkV2ZW50c1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgZWZmZWN0aXZlIGRhdGV0aW1lIG9yIGN1dCBsYWJlbCBhdCB3aGljaCB0byBsaXN0IHRoZSBBbGxvY2F0aW9uIEV2ZW50cy4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgTFVTSUQgc3lzdGVtIGRhdGV0aW1lIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgZWZmZWN0aXZlQXQ/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBhc0F0IGRhdGV0aW1lIGF0IHdoaWNoIHRvIGxpc3QgdGhlIEFsbG9jYXRpb24gRXZlbnRzLiBEZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggQWxsb2NhdGlvbiBFdmVudCBpZiBub3Qgc3BlY2lmaWVkLiAqL1xuICAgIGFzQXQ/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwYWdpbmF0aW9uIHRva2VuIHRvIHVzZSB0byBjb250aW51ZSBsaXN0aW5nIEFsbG9jYXRpb24gRXZlbnRzOyB0aGlzIHZhbHVlIGlzIHJldHVybmVkIGZyb20gdGhlIHByZXZpb3VzIGNhbGwuICAgICAgICAgICAgICBJZiBhIHBhZ2luYXRpb24gdG9rZW4gaXMgcHJvdmlkZWQsIHRoZSBmaWx0ZXIsIGVmZmVjdGl2ZUF0IGFuZCBhc0F0IGZpZWxkcyBtdXN0IG5vdCBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIG9yaWdpbmFsIHJlcXVlc3QuICovXG4gICAgcGFnZT86IHN0cmluZztcbiAgICAvKiogV2hlbiBwYWdpbmF0aW5nLCBsaW1pdCB0aGUgcmVzdWx0cyB0byB0aGlzIG51bWJlci4gRGVmYXVsdHMgdG8gMTAwIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgLyoqIEV4cHJlc3Npb24gdG8gZmlsdGVyIHRoZSByZXN1bHRzLiBGb3IgZXhhbXBsZSwgdG8gZmlsdGVyIG9uIHRoZSBBbGxvY2F0aW9uIEV2ZW50IHN0YXR1cywgc3BlY2lmeSBcXCZxdW90O3N0YXR1cyBlcSBcXCYjMzk7Qm9va2VkXFwmIzM5O1xcJnF1b3Q7LiAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZmlsdGVyaW5nIExVU0lEIHJlc3VsdHMsIHNlZSBodHRwczovL3N1cHBvcnQubHVzaWQuY29tL2tub3dsZWRnZWJhc2UvYXJ0aWNsZS9LQS0wMTkxNC4gKi9cbiAgICBmaWx0ZXI/OiBzdHJpbmc7XG4gICAgLyoqIEEgbGlzdCBvZiBmaWVsZCBuYW1lcyBvciBwcm9wZXJ0aWVzIHRvIHNvcnQgYnksIGVhY2ggc3VmZml4ZWQgYnkgXFwmcXVvdDsgQVNDXFwmcXVvdDsgb3IgXFwmcXVvdDsgREVTQ1xcJnF1b3Q7LiAqL1xuICAgIHNvcnRCeT86IEFycmF5PHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgQWxsb2NhdGlvbiBFdmVudC4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSByZWFzb24gZm9yIHRoZSByZWFsbG9jYXRpb24gYW5kIGFueSBiYXNpcyB2YWx1ZXMgdG8gdXNlLiAqL1xuICAgIGFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0OiBBbGxvY2F0aW9uRXZlbnRSZWFsbG9jYXRlUmVxdWVzdDtcbiAgICAvKiogVGhlIGVmZmVjdGl2ZSBkYXRldGltZSBvciBjdXQgbGFiZWwgZnJvbSB3aGljaCB0aGUgcmVhbGxvY2F0aW9uIGFwcGxpZXMuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IExVU0lEIHN5c3RlbSBkYXRldGltZSBpZiBub3Qgc3BlY2lmaWVkLiAqL1xuICAgIGVmZmVjdGl2ZUF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwc2VydEFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgQWxsb2NhdGlvbiBFdmVudC4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiAqL1xuICAgIGFsbG9jYXRpb25FdmVudFJlcXVlc3Q6IEFsbG9jYXRpb25FdmVudFJlcXVlc3Q7XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWxsb2NhdGlvbkV2ZW50c1NlcnZpY2Uge1xuXG4gICAgcHJvdGVjdGVkIGJhc2VQYXRoID0gJ2h0dHBzOi8vd3d3Lmx1c2lkLmNvbS9hcGknO1xuICAgIHB1YmxpYyBkZWZhdWx0SGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgICBwdWJsaWMgZW5jb2RlcjogSHR0cFBhcmFtZXRlckNvZGVjO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpQEluamVjdChCQVNFX1BBVEgpIGJhc2VQYXRoOiBzdHJpbmd8c3RyaW5nW10sIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEJhc2VQYXRoID0gQXJyYXkuaXNBcnJheShiYXNlUGF0aCkgPyBiYXNlUGF0aFswXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChmaXJzdEJhc2VQYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoID0gZmlyc3RCYXNlUGF0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBiYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlciB8fCBuZXcgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjKCk7XG4gICAgfVxuXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXMoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU6IGFueSwga2V5Pzogc3RyaW5nKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zOiBIdHRwUGFyYW1zLCB2YWx1ZT86IGFueSwga2V5Pzogc3RyaW5nKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaCggZWxlbSA9PiBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgZWxlbSwga2V5KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCAodmFsdWUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBEYXRlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goIGsgPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKFxuICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1zLCB2YWx1ZVtrXSwga2V5ICE9IG51bGwgPyBgJHtrZXl9LiR7a31gIDogaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgbm90IG9iamVjdCBvciBhcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRVhQRVJJTUVOVEFMXSBCb29rQWxsb2NhdGlvbkV2ZW50OiBCb29rIGFuIEFsbG9jYXRpb24gRXZlbnQuXG4gICAgICogRnJlZXplIGEgY29tcHV0ZWQgQWxsb2NhdGlvbiBFdmVudCB1bmRlciBhIGJvb2tpbmcgcmVmZXJlbmNlLCBmcm9tIGFuIGVmZmVjdGl2ZSBkYXRldGltZS4gT25jZSBib29rZWQgdGhlICBldmVudCBjYW4gbm8gbG9uZ2VyIGJlIHJlcGxhY2VkIG9yIHJlYWxsb2NhdGVkLiBCb29raW5nIGFnYWluIHVuZGVyIHRoZSBzYW1lIHJlZmVyZW5jZSByZXR1cm5zIHRoZSBldmVudCAgdW5jaGFuZ2VkOyBib29raW5nIHVuZGVyIGEgZGlmZmVyZW50IHJlZmVyZW5jZSBpcyByZWZ1c2VkLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBib29rQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogQm9va0FsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxBbGxvY2F0aW9uRXZlbnQ+O1xuICAgIHB1YmxpYyBib29rQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogQm9va0FsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFsbG9jYXRpb25FdmVudD4+O1xuICAgIHB1YmxpYyBib29rQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogQm9va0FsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBbGxvY2F0aW9uRXZlbnQ+PjtcbiAgICBwdWJsaWMgYm9va0FsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IEJvb2tBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBib29rQWxsb2NhdGlvbkV2ZW50LicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgYm9va0FsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGxvY2F0aW9uRXZlbnRCb29rUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hbGxvY2F0aW9uRXZlbnRCb29rUmVxdWVzdDtcbiAgICAgICAgaWYgKGFsbG9jYXRpb25FdmVudEJvb2tSZXF1ZXN0ID09PSBudWxsIHx8IGFsbG9jYXRpb25FdmVudEJvb2tSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFsbG9jYXRpb25FdmVudEJvb2tSZXF1ZXN0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgYm9va0FsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlZmZlY3RpdmVBdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5lZmZlY3RpdmVBdDtcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGlmIChlZmZlY3RpdmVBdCAhPT0gdW5kZWZpbmVkICYmIGVmZmVjdGl2ZUF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZWZmZWN0aXZlQXQsICdlZmZlY3RpdmVBdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2FsbG9jYXRpb25ldmVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJjb2RlXCIsIHZhbHVlOiBjb2RlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS9ib29rYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFsbG9jYXRpb25FdmVudD4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGFsbG9jYXRpb25FdmVudEJvb2tSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRVhQRVJJTUVOVEFMXSBDcmVhdGVBbGxvY2F0aW9uRXZlbnQ6IENyZWF0ZSBhbiBBbGxvY2F0aW9uIEV2ZW50LlxuICAgICAqIFJhaXNlIGEgbmV3IEFsbG9jYXRpb24gRXZlbnQuIFRoZSBzY29wZSBpcyBwcm92aWRlZCBpbiB0aGUgcm91dGUgYW5kIHRoZSBjb2RlIGluIHRoZSByZXF1ZXN0IGJvZHkuIFRoZSBldmVudCAgbmFtZXMgdGhlIEFsbG9jYXRpb24gTWFwIGl0IGlzIHNoYXJlZCBieSwgdGhlIGtpbmQgb2YgZXZlbnQsIHRoZSBhbW91bnQgYW5kIHRoZSBkYXRlLiBJdHMgcGVyLWludmVzdG9yIHNoYXJlcyAgYXJlIGNvbXB1dGVkIG9uIGNyZWF0aW9uIGZyb20gdGhlIG1hcCBhcyBpdCBzdG9vZCBvbiB0aGUgZXZlbnQgZGF0ZSwgc28gdGhlIHJlc3BvbnNlIGNvbWVzIGJhY2sgQ29tcHV0ZWQuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IENyZWF0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxBbGxvY2F0aW9uRXZlbnQ+O1xuICAgIHB1YmxpYyBjcmVhdGVBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBbGxvY2F0aW9uRXZlbnQ+PjtcbiAgICBwdWJsaWMgY3JlYXRlQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogQ3JlYXRlQWxsb2NhdGlvbkV2ZW50UmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFsbG9jYXRpb25FdmVudD4+O1xuICAgIHB1YmxpYyBjcmVhdGVBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsb2NhdGlvbkV2ZW50UmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hbGxvY2F0aW9uRXZlbnRSZXF1ZXN0O1xuICAgICAgICBpZiAoYWxsb2NhdGlvbkV2ZW50UmVxdWVzdCA9PT0gbnVsbCB8fCBhbGxvY2F0aW9uRXZlbnRSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFsbG9jYXRpb25FdmVudFJlcXVlc3Qgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ3RleHQvanNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vKitqc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvYWxsb2NhdGlvbmV2ZW50cy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFsbG9jYXRpb25FdmVudD4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGFsbG9jYXRpb25FdmVudFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRVhQRVJJTUVOVEFMXSBEZWxldGVBbGxvY2F0aW9uRXZlbnQ6IERlbGV0ZSBhbiBBbGxvY2F0aW9uIEV2ZW50LlxuICAgICAqIERlbGV0ZSBhbiBBbGxvY2F0aW9uIEV2ZW50IGZyb20gYW4gZWZmZWN0aXZlIGRhdGV0aW1lLiBUaGUgQWxsb2NhdGlvbiBFdmVudCByZW1haW5zIHJldHJpZXZhYmxlIGF0IGVhcmxpZXIgIGVmZmVjdGl2ZSBkYXRldGltZXMuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZUFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IERlbGV0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxEZWxldGVkRW50aXR5UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBkZWxldGVBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxEZWxldGVkRW50aXR5UmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgZGVsZXRlQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogRGVsZXRlQWxsb2NhdGlvbkV2ZW50UmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PERlbGV0ZWRFbnRpdHlSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBkZWxldGVBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWZmZWN0aXZlQXQgPSByZXF1ZXN0UGFyYW1ldGVycz8uZWZmZWN0aXZlQXQ7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoZWZmZWN0aXZlQXQgIT09IHVuZGVmaW5lZCAmJiBlZmZlY3RpdmVBdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmVmZmVjdGl2ZUF0LCAnZWZmZWN0aXZlQXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2FsbG9jYXRpb25ldmVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJjb2RlXCIsIHZhbHVlOiBjb2RlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxEZWxldGVkRW50aXR5UmVzcG9uc2U+KCdkZWxldGUnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRVhQRVJJTUVOVEFMXSBHZXRBbGxvY2F0aW9uRXZlbnQ6IEdldCBhbiBBbGxvY2F0aW9uIEV2ZW50LlxuICAgICAqIFJldHJpZXZlIGEgcGFydGljdWxhciBBbGxvY2F0aW9uIEV2ZW50IGF0IGFuIGVmZmVjdGl2ZSBhbmQgYXNBdCBkYXRldGltZSwgaW5jbHVkaW5nIGl0cyBjb21wdXRlZCAgcGVyLWludmVzdG9yIHNoYXJlcyBhbmQsIG9uY2UgYm9va2VkLCBpdHMgYm9va2luZyByZWZlcmVuY2UuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldEFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IEdldEFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxBbGxvY2F0aW9uRXZlbnQ+O1xuICAgIHB1YmxpYyBnZXRBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBbGxvY2F0aW9uRXZlbnQ+PjtcbiAgICBwdWJsaWMgZ2V0QWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0QWxsb2NhdGlvbkV2ZW50UmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFsbG9jYXRpb25FdmVudD4+O1xuICAgIHB1YmxpYyBnZXRBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWZmZWN0aXZlQXQgPSByZXF1ZXN0UGFyYW1ldGVycz8uZWZmZWN0aXZlQXQ7XG4gICAgICAgIGNvbnN0IGFzQXQgPSByZXF1ZXN0UGFyYW1ldGVycz8uYXNBdDtcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGlmIChlZmZlY3RpdmVBdCAhPT0gdW5kZWZpbmVkICYmIGVmZmVjdGl2ZUF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZWZmZWN0aXZlQXQsICdlZmZlY3RpdmVBdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhc0F0ICE9PSB1bmRlZmluZWQgJiYgYXNBdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmFzQXQsICdhc0F0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9hbGxvY2F0aW9uZXZlbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInNjb3BlXCIsIHZhbHVlOiBzY29wZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiY29kZVwiLCB2YWx1ZTogY29kZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QWxsb2NhdGlvbkV2ZW50PignZ2V0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VYUEVSSU1FTlRBTF0gTGlzdEFsbG9jYXRpb25FdmVudHM6IExpc3QgQWxsb2NhdGlvbiBFdmVudHMuXG4gICAgICogTGlzdCBhbGwgdGhlIEFsbG9jYXRpb24gRXZlbnRzIG1hdGNoaW5nIGEgcGFydGljdWxhciBjcml0ZXJpYS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdEFsbG9jYXRpb25FdmVudHMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0QWxsb2NhdGlvbkV2ZW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxQYWdlZFJlc291cmNlTGlzdE9mQWxsb2NhdGlvbkV2ZW50PjtcbiAgICBwdWJsaWMgbGlzdEFsbG9jYXRpb25FdmVudHMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0QWxsb2NhdGlvbkV2ZW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFBhZ2VkUmVzb3VyY2VMaXN0T2ZBbGxvY2F0aW9uRXZlbnQ+PjtcbiAgICBwdWJsaWMgbGlzdEFsbG9jYXRpb25FdmVudHMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0QWxsb2NhdGlvbkV2ZW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxQYWdlZFJlc291cmNlTGlzdE9mQWxsb2NhdGlvbkV2ZW50Pj47XG4gICAgcHVibGljIGxpc3RBbGxvY2F0aW9uRXZlbnRzKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdEFsbG9jYXRpb25FdmVudHNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUF0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmVmZmVjdGl2ZUF0O1xuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSByZXF1ZXN0UGFyYW1ldGVycz8ucGFnZTtcbiAgICAgICAgY29uc3QgbGltaXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ubGltaXQ7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWx0ZXI7XG4gICAgICAgIGNvbnN0IHNvcnRCeSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zb3J0Qnk7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoZWZmZWN0aXZlQXQgIT09IHVuZGVmaW5lZCAmJiBlZmZlY3RpdmVBdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmVmZmVjdGl2ZUF0LCAnZWZmZWN0aXZlQXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWdlICE9PSB1bmRlZmluZWQgJiYgcGFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PnBhZ2UsICdwYWdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5saW1pdCwgJ2xpbWl0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdW5kZWZpbmVkICYmIGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmZpbHRlciwgJ2ZpbHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3J0QnkpIHtcbiAgICAgICAgICAgIHNvcnRCeS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgIDxhbnk+ZWxlbWVudCwgJ3NvcnRCeScpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2FsbG9jYXRpb25ldmVudHNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8UGFnZWRSZXNvdXJjZUxpc3RPZkFsbG9jYXRpb25FdmVudD4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFWFBFUklNRU5UQUxdIFJlYWxsb2NhdGVBbGxvY2F0aW9uRXZlbnQ6IFJlYWxsb2NhdGUgYW4gQWxsb2NhdGlvbiBFdmVudC5cbiAgICAgKiBSZWNvbXB1dGUgdGhlIHBlci1pbnZlc3RvciBzaGFyZXMgb2YgYW4gdW5ib29rZWQgQWxsb2NhdGlvbiBFdmVudCBhZ2FpbnN0IGl0cyBtYXAsIGZyb20gYW4gZWZmZWN0aXZlICBkYXRldGltZSwgcmVjb3JkaW5nIHRoZSByZWFzb24uIEFueSBiYXNpcyB2YWx1ZXMgc3VwcGxpZWQgcmVwbGFjZSB0aG9zZSB1c2VkIGJlZm9yZS4gQSBib29rZWQgQWxsb2NhdGlvbiAgRXZlbnQgY2Fubm90IGJlIHJlYWxsb2NhdGVkLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFsbG9jYXRlQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogUmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxBbGxvY2F0aW9uRXZlbnQ+O1xuICAgIHB1YmxpYyByZWFsbG9jYXRlQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogUmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFsbG9jYXRpb25FdmVudD4+O1xuICAgIHB1YmxpYyByZWFsbG9jYXRlQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogUmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBbGxvY2F0aW9uRXZlbnQ+PjtcbiAgICBwdWJsaWMgcmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IFJlYWxsb2NhdGVBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZWFsbG9jYXRlQWxsb2NhdGlvbkV2ZW50LicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGxvY2F0aW9uRXZlbnRSZWFsbG9jYXRlUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hbGxvY2F0aW9uRXZlbnRSZWFsbG9jYXRlUmVxdWVzdDtcbiAgICAgICAgaWYgKGFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0ID09PSBudWxsIHx8IGFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlZmZlY3RpdmVBdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5lZmZlY3RpdmVBdDtcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGlmIChlZmZlY3RpdmVBdCAhPT0gdW5kZWZpbmVkICYmIGVmZmVjdGl2ZUF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZWZmZWN0aXZlQXQsICdlZmZlY3RpdmVBdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2FsbG9jYXRpb25ldmVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJjb2RlXCIsIHZhbHVlOiBjb2RlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS9yZWFsbG9jYXRlYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFsbG9jYXRpb25FdmVudD4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRVhQRVJJTUVOVEFMXSBVcHNlcnRBbGxvY2F0aW9uRXZlbnQ6IFVwc2VydCBhbiBBbGxvY2F0aW9uIEV2ZW50LlxuICAgICAqIFVwZGF0ZSBvciBpbnNlcnQgYW4gQWxsb2NhdGlvbiBFdmVudC4gSWYgdGhlIEFsbG9jYXRpb24gRXZlbnQgZG9lcyBub3QgZXhpc3QgaXQgaXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGl0IGlzICByZXBsYWNlZCBhbmQgaXRzIHNoYXJlcyByZWNvbXB1dGVkLiBUaGUgY29kZSBpbiB0aGUgcmVxdWVzdCBib2R5IG11c3QgbWF0Y2ggdGhlIGNvZGUgaW4gdGhlIHJvdXRlLiBBIGJvb2tlZCAgQWxsb2NhdGlvbiBFdmVudCBpcyBmcm96ZW4gYW5kIGNhbm5vdCBiZSByZXBsYWNlZC5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBzZXJ0QWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogVXBzZXJ0QWxsb2NhdGlvbkV2ZW50UmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEFsbG9jYXRpb25FdmVudD47XG4gICAgcHVibGljIHVwc2VydEFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IFVwc2VydEFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFsbG9jYXRpb25FdmVudD4+O1xuICAgIHB1YmxpYyB1cHNlcnRBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBVcHNlcnRBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QWxsb2NhdGlvbkV2ZW50Pj47XG4gICAgcHVibGljIHVwc2VydEFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IFVwc2VydEFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc2NvcGU7XG4gICAgICAgIGlmIChzY29wZSA9PT0gbnVsbCB8fCBzY29wZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzY29wZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwc2VydEFsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvZGU7XG4gICAgICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgY29kZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwc2VydEFsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGxvY2F0aW9uRXZlbnRSZXF1ZXN0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFsbG9jYXRpb25FdmVudFJlcXVlc3Q7XG4gICAgICAgIGlmIChhbGxvY2F0aW9uRXZlbnRSZXF1ZXN0ID09PSBudWxsIHx8IGFsbG9jYXRpb25FdmVudFJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgYWxsb2NhdGlvbkV2ZW50UmVxdWVzdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwc2VydEFsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9hbGxvY2F0aW9uZXZlbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInNjb3BlXCIsIHZhbHVlOiBzY29wZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiY29kZVwiLCB2YWx1ZTogY29kZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QWxsb2NhdGlvbkV2ZW50PigncHV0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBhbGxvY2F0aW9uRXZlbnRSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXX0=
|